@testmuai/kane-cli 0.6.11 → 0.7.1

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 (234) hide show
  1. package/dist/ChatSurface-D66CACLX.js +8 -0
  2. package/dist/{ChromeProfilePicker-54CAJDUF.js → ChromeProfilePicker-4CDSPBWL.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-TCAH4AHL.js → CliFeedbackPrompt-TLRVBA4E.js} +1 -1
  4. package/dist/{CliUploadProgress-UURZ63VQ.js → CliUploadProgress-WGGFLUSF.js} +1 -1
  5. package/dist/{ConfigView-5QGB7MUS.js → ConfigView-DBANTBXC.js} +1 -1
  6. package/dist/EvidenceViewOffer-DNCQ3A6R.js +2 -0
  7. package/dist/{FolderPicker-Y5MAYFIJ.js → FolderPicker-W7RCIFEL.js} +1 -1
  8. package/dist/{HelpView-S3GJGSCE.js → HelpView-FBCX32U7.js} +1 -1
  9. package/dist/{InfoBox-LYTNNMVJ.js → InfoBox-KK2ICVS4.js} +1 -1
  10. package/dist/{LinksBox-5MSEKNSV.js → LinksBox-KKRANMR3.js} +1 -1
  11. package/dist/{ProfilesView-LTHE5UIO.js → ProfilesView-DGPXSAQN.js} +1 -1
  12. package/dist/{ProjectPicker-XMXIGHSE.js → ProjectPicker-ESQSL4TT.js} +1 -1
  13. package/dist/{SaveSessionPrompt-VQDEA4WA.js → SaveSessionPrompt-AQGP5W6E.js} +1 -1
  14. package/dist/SingleShotApp-SMCAIKCE.js +2 -0
  15. package/dist/{SummaryBox-WWF3G263.js → SummaryBox-BFZJW2KK.js} +1 -1
  16. package/dist/TestMdRunView-FMKZJ3A3.js +2 -0
  17. package/dist/{WhoamiView-PDURYP7E.js → WhoamiView-JABY3I5Q.js} +1 -1
  18. package/dist/{auth-I4RB4KO3.js → auth-76LVI6B5.js} +1 -1
  19. package/dist/bind-AACBTSAA.js +12 -0
  20. package/dist/bootstrap-CNOZ5VRB.js +2 -0
  21. package/dist/bridge-T4HL4TG7.js +2 -0
  22. package/dist/{changelog-OKYH4F7I.js → changelog-PSWPPOAF.js} +1 -1
  23. package/dist/chat-committer-4BQBOKI4.js +2 -0
  24. package/dist/chat-controller-NNTMKEPG.js +2 -0
  25. package/dist/{chunk-NUQ423YE.js → chunk-2KBD6JZX.js} +1 -1
  26. package/dist/chunk-2SREGETM.js +4 -0
  27. package/dist/chunk-2XGDWUJ5.js +2 -0
  28. package/dist/{chunk-MJBCBQC2.js → chunk-322JEJEH.js} +1 -1
  29. package/dist/{chunk-SURF5Z7Y.js → chunk-323MLBYA.js} +1 -1
  30. package/dist/{chunk-HOQEMPMQ.js → chunk-33QXD75Y.js} +2 -2
  31. package/dist/{chunk-K7USHLVZ.js → chunk-36OC3TFE.js} +1 -1
  32. package/dist/{chunk-ZNHXIRCM.js → chunk-3FN5VJMV.js} +2 -2
  33. package/dist/chunk-3LWTUMDG.js +2 -0
  34. package/dist/chunk-3STZLM5J.js +4 -0
  35. package/dist/{chunk-KXUSG5ZI.js → chunk-4OPQJ7PE.js} +1 -1
  36. package/dist/chunk-5JTUL6XL.js +2 -0
  37. package/dist/{chunk-FMR2KPSK.js → chunk-5KFS3GAZ.js} +1 -1
  38. package/dist/{chunk-XZRIQ3GF.js → chunk-6HEGD6H2.js} +1 -1
  39. package/dist/{chunk-XWSAKVEY.js → chunk-6UJDOAYR.js} +2 -2
  40. package/dist/{chunk-QJIJC3KC.js → chunk-73C4PRYU.js} +1 -1
  41. package/dist/chunk-AAONIIQV.js +6 -0
  42. package/dist/chunk-AH7ZZIZY.js +2 -0
  43. package/dist/chunk-AM5S4KG4.js +6 -0
  44. package/dist/{chunk-7MRBMDZ5.js → chunk-APAIWBIH.js} +1 -1
  45. package/dist/{chunk-HMM5FJJO.js → chunk-BAL64WSI.js} +1 -1
  46. package/dist/chunk-BB2W35TW.js +2 -0
  47. package/dist/chunk-BQHKBOSF.js +11 -0
  48. package/dist/chunk-C4G7RVJ6.js +2 -0
  49. package/dist/{chunk-NTGYFYBP.js → chunk-CDQX6HGJ.js} +1 -1
  50. package/dist/{chunk-KSZ72BSC.js → chunk-CSQ46PJ7.js} +1 -1
  51. package/dist/chunk-DQ54MH7F.js +13 -0
  52. package/dist/{chunk-3AZTXJY4.js → chunk-DXV6MBTD.js} +1 -1
  53. package/dist/chunk-DYW5C6II.js +2 -0
  54. package/dist/{chunk-LHDNJJGE.js → chunk-F6ZOJXYU.js} +1 -1
  55. package/dist/chunk-GVIPTX6T.js +6 -0
  56. package/dist/chunk-GW5DWAXY.js +2 -0
  57. package/dist/chunk-HJERKSBK.js +349 -0
  58. package/dist/{chunk-POYZ6SAI.js → chunk-HPMS5KO6.js} +2 -2
  59. package/dist/{chunk-3RZ63RBO.js → chunk-IBNC444G.js} +1 -1
  60. package/dist/{chunk-73OQDAXF.js → chunk-IQDWBTRJ.js} +1 -1
  61. package/dist/chunk-IXVOXJP6.js +6 -0
  62. package/dist/{chunk-IQODWB32.js → chunk-JEUA4UWK.js} +1 -1
  63. package/dist/{chunk-GLA6QL3T.js → chunk-JKTFTF24.js} +1 -1
  64. package/dist/{chunk-KHJXOFDM.js → chunk-JRMDGLLT.js} +1 -1
  65. package/dist/{chunk-GIMTSDNC.js → chunk-KNDSQ4PS.js} +1 -1
  66. package/dist/chunk-KRXSXQBU.js +12 -0
  67. package/dist/{chunk-4CJ55EUY.js → chunk-KT6G7AF2.js} +1 -1
  68. package/dist/chunk-KVQOBPAZ.js +2 -0
  69. package/dist/chunk-L2TV4G56.js +4 -0
  70. package/dist/{chunk-6HYW5RFX.js → chunk-L4JIMNKW.js} +1 -1
  71. package/dist/{chunk-FSB3FTIQ.js → chunk-L7VREJTG.js} +1 -1
  72. package/dist/{chunk-MRP54NCJ.js → chunk-LQZ2BU7Q.js} +1 -1
  73. package/dist/{chunk-EAUUULJQ.js → chunk-LR5XO2KD.js} +1 -1
  74. package/dist/chunk-M7WQM4UA.js +4 -0
  75. package/dist/{chunk-KHQHVSZ6.js → chunk-NAC7SFBE.js} +1 -1
  76. package/dist/{chunk-DSOA6L73.js → chunk-NAE7MBR2.js} +3 -3
  77. package/dist/{chunk-NTNAHN25.js → chunk-NBKQT7LJ.js} +1 -1
  78. package/dist/{chunk-7NLQ3QQD.js → chunk-NJPTOKW5.js} +1 -1
  79. package/dist/{chunk-RFJAYURU.js → chunk-NOCIMJSN.js} +1 -1
  80. package/dist/chunk-NRC2G4Y5.js +5 -0
  81. package/dist/{chunk-H2W2UNTN.js → chunk-NRTHYROA.js} +1 -1
  82. package/dist/chunk-O56PUUNL.js +9 -0
  83. package/dist/chunk-OHRS3H7Z.js +5 -0
  84. package/dist/{chunk-FCHTL74E.js → chunk-PMHJRT3A.js} +1 -1
  85. package/dist/{chunk-GRB66C5S.js → chunk-QROUKGKU.js} +1 -1
  86. package/dist/{chunk-XXMNUJX4.js → chunk-R2RGSO4B.js} +1 -1
  87. package/dist/{chunk-MFOH7EYR.js → chunk-RNSSM2BK.js} +1 -1
  88. package/dist/chunk-SE6WNCYU.js +4 -0
  89. package/dist/{chunk-ICGHBZFZ.js → chunk-SRDHPKJT.js} +1 -1
  90. package/dist/chunk-SWESH2J7.js +10 -0
  91. package/dist/chunk-SY3HLQMV.js +4 -0
  92. package/dist/chunk-T63R6QT4.js +4 -0
  93. package/dist/{chunk-ZP4S5WGW.js → chunk-UBFKZEX3.js} +2 -2
  94. package/dist/chunk-UI7KULSI.js +7 -0
  95. package/dist/chunk-UPPEOQJQ.js +3 -0
  96. package/dist/chunk-URQUQWGW.js +62 -0
  97. package/dist/chunk-UX2B7L6K.js +2 -0
  98. package/dist/{chunk-XSKLH2MC.js → chunk-V36ATG7A.js} +2 -2
  99. package/dist/chunk-VGFTNLQQ.js +2 -0
  100. package/dist/{chunk-RGJIRS3B.js → chunk-W5DOU2DV.js} +1 -1
  101. package/dist/chunk-W6VD2XFO.js +19 -0
  102. package/dist/chunk-WJ5HDEVH.js +6 -0
  103. package/dist/chunk-WWNSD6FA.js +6 -0
  104. package/dist/{chunk-ZPCU6546.js → chunk-X3ICV5M5.js} +1 -1
  105. package/dist/chunk-XDHZMCTA.js +4 -0
  106. package/dist/{chunk-2WKX3RMA.js → chunk-XVDJ423L.js} +1 -1
  107. package/dist/chunk-ZLCZDAEX.js +6 -0
  108. package/dist/{chunk-NJAHRITS.js → chunk-ZM5PVRJK.js} +1 -1
  109. package/dist/committer-2EJPVVCQ.js +2 -0
  110. package/dist/{config-QISRENF5.js → config-R3GF2FZA.js} +1 -1
  111. package/dist/cover-cmd-TXICWHUU.js +3 -0
  112. package/dist/{credentials-OGLK7MPV.js → credentials-XN4ROCQ3.js} +1 -1
  113. package/dist/design-committer-BQUWD6AC.js +2 -0
  114. package/dist/docx-convert-ZBVQO2LG.js +1 -1
  115. package/dist/dossier-QZV74XOS.js +3 -0
  116. package/dist/evidence-V23FPVXQ.js +2 -0
  117. package/dist/evolve-cmd-PZCPXDMR.js +2 -0
  118. package/dist/{exit-manager-MXUD7GQ7.js → exit-manager-HNFATGSM.js} +1 -1
  119. package/dist/explain-UE4IACQH.js +2 -0
  120. package/dist/{explain-cmd-NWIYH5MI.js → explain-cmd-RZW6QJYM.js} +1 -1
  121. package/dist/{explain-cmd-DBUTPZHA.js → explain-cmd-X7JZLSZZ.js} +1 -1
  122. package/dist/extract-bind-BFY7IRL4.js +10 -0
  123. package/dist/extract-cmd-U3MGK2LP.js +6 -0
  124. package/dist/feeder-XGTFV7TZ.js +2 -0
  125. package/dist/gaps-cmd-BWCRLLBK.js +3 -0
  126. package/dist/{gate-B6C6KLFA.js → gate-YHBPWEM5.js} +1 -1
  127. package/dist/{generate-headless-TUA3HGRX.js → generate-headless-BSTDLZZY.js} +2 -2
  128. package/dist/{headless-io-PWW6YKH2.js → headless-io-BL3TEAX5.js} +1 -1
  129. package/dist/index.js +67 -68
  130. package/dist/ingest-AL6CABJT.js +2 -0
  131. package/dist/ingest-cmd-O6OWWZT4.js +2 -0
  132. package/dist/interactive-bind-43HGDF5K.js +24 -0
  133. package/dist/lifecycle-cmd-D6TVTYRK.js +2 -0
  134. package/dist/list-cmd-XCAV2FKA.js +3 -0
  135. package/dist/{list-commands-F53ZNYOZ.js → list-commands-747UTUSS.js} +1 -1
  136. package/dist/locks-cmd-QAULI5LV.js +2 -0
  137. package/dist/logical-ids-4G4FAHNJ.js +2 -0
  138. package/dist/login-flow-CV76ENHV.js +2 -0
  139. package/dist/maintenance-cmd-ZRB4NTGG.js +2 -0
  140. package/dist/next-TRSKMBO5.js +2 -0
  141. package/dist/paths-JCYX6UWL.js +2 -0
  142. package/dist/{persist-recorded-session-5ZFS5SMZ.js → persist-recorded-session-MDPWWUA7.js} +1 -1
  143. package/dist/phase-seed-52LRE3LH.js +2 -0
  144. package/dist/pipeline-LM5JAK7F.js +2 -0
  145. package/dist/readmodel-X7L7W2BA.js +2 -0
  146. package/dist/reconcile-cmd-DGCSDML6.js +2 -0
  147. package/dist/{recording-banner-ZZUF2MGT.js → recording-banner-TALO7PUR.js} +1 -1
  148. package/dist/records-5SVUXJBW.js +2 -0
  149. package/dist/{require-project-folder-NQBZFUPF.js → require-project-folder-R347LFDQ.js} +1 -1
  150. package/dist/revert-DXXYXJGN.js +2 -0
  151. package/dist/review-cmd-2QF5HTI7.js +4 -0
  152. package/dist/run-52UIBPXD.js +2 -0
  153. package/dist/run-VRVH4VO3.js +2 -0
  154. package/dist/{run-test-md-XOSCYVSS.js → run-test-md-DFNIGYB7.js} +2 -2
  155. package/dist/sessions-BLXZVK5U.js +2 -0
  156. package/dist/sessions-cmd-AQWLL5ZN.js +25 -0
  157. package/dist/{skill-installer-VYIIWAK7.js → skill-installer-ANXTCXQV.js} +1 -1
  158. package/dist/spawner-AH5FTUYU.js +2 -0
  159. package/dist/structured-answers-QHFGZPSS.js +5 -0
  160. package/dist/tcg-generate-WKCBBKI5.js +2 -0
  161. package/dist/testmd-actions-RPYG6TJG.js +2 -0
  162. package/dist/token-refresh-NIDUOTRM.js +2 -0
  163. package/dist/trust-gate-EX7R2P4Y.js +2 -0
  164. package/dist/{validate-basic-LP3S5PK7.js → validate-basic-O2DP2XJL.js} +1 -1
  165. package/dist/verdicts-TJH3O5UW.js +2 -0
  166. package/dist/{version-check-XP62HWLJ.js → version-check-RNR3JCQ5.js} +1 -1
  167. package/dist/{view-cmd-GQBFCPDL.js → view-cmd-YSEGA5PI.js} +1 -1
  168. package/dist/walk-session-HXW4OSA2.js +2 -0
  169. package/dist/with-telemetry-PNP6CAVM.js +2 -0
  170. package/package.json +6 -6
  171. package/dist/ChatSurface-TZ554O4U.js +0 -8
  172. package/dist/EvidenceViewOffer-SSAM4RRP.js +0 -2
  173. package/dist/SingleShotApp-A6PCNPLM.js +0 -2
  174. package/dist/TestMdRunView-MQ7ZPFN2.js +0 -2
  175. package/dist/bind-QJT726NE.js +0 -6
  176. package/dist/bootstrap-566PPFCC.js +0 -2
  177. package/dist/bridge-QCMEOQDD.js +0 -2
  178. package/dist/chat-committer-OS7ULZMH.js +0 -2
  179. package/dist/chat-controller-QLORQWJZ.js +0 -2
  180. package/dist/chunk-3C5GMAM4.js +0 -2
  181. package/dist/chunk-54IB6CXK.js +0 -5
  182. package/dist/chunk-54VQ46U2.js +0 -14
  183. package/dist/chunk-55Y65VPA.js +0 -347
  184. package/dist/chunk-6W6AIDLJ.js +0 -4
  185. package/dist/chunk-7E24OCGX.js +0 -2
  186. package/dist/chunk-7YPK6EDR.js +0 -4
  187. package/dist/chunk-FHKDTM5L.js +0 -6
  188. package/dist/chunk-FRBYGSGJ.js +0 -4
  189. package/dist/chunk-GG43HSU2.js +0 -3
  190. package/dist/chunk-HLRLP6TQ.js +0 -2
  191. package/dist/chunk-J2KSZUOO.js +0 -4
  192. package/dist/chunk-J44RN3FB.js +0 -2
  193. package/dist/chunk-JXKRO2ZJ.js +0 -13
  194. package/dist/chunk-M5PJQ5Y3.js +0 -6
  195. package/dist/chunk-MMPFU2YC.js +0 -2
  196. package/dist/chunk-MR7CX5VT.js +0 -9
  197. package/dist/chunk-MTNUZEO7.js +0 -12
  198. package/dist/chunk-OGWC3J3C.js +0 -4
  199. package/dist/chunk-RN4OSVTG.js +0 -6
  200. package/dist/chunk-RZJVQUBA.js +0 -61
  201. package/dist/chunk-V3UE6RJP.js +0 -2
  202. package/dist/chunk-Y5RNCJAN.js +0 -19
  203. package/dist/chunk-YSSTGJ7O.js +0 -7
  204. package/dist/chunk-Z2JSEL3I.js +0 -4
  205. package/dist/cover-cmd-SV3I23UM.js +0 -2
  206. package/dist/dossier-KJSJPWOW.js +0 -3
  207. package/dist/evidence-HDD7T7DX.js +0 -2
  208. package/dist/evolve-cmd-UE2BIMXK.js +0 -2
  209. package/dist/explain-EBVIUS2X.js +0 -2
  210. package/dist/extract-bind-6MQYKN3G.js +0 -8
  211. package/dist/extract-cmd-2RUIWFZG.js +0 -6
  212. package/dist/gaps-cmd-CKCHH3HQ.js +0 -2
  213. package/dist/ingest-FIIO67ZN.js +0 -2
  214. package/dist/ingest-cmd-CRMY46YC.js +0 -7
  215. package/dist/interactive-bind-53FCRK34.js +0 -10
  216. package/dist/lifecycle-cmd-32LG364Q.js +0 -2
  217. package/dist/list-cmd-UTZ2PQUK.js +0 -3
  218. package/dist/logical-ids-I7B3VJEH.js +0 -2
  219. package/dist/login-flow-D7KBR7XR.js +0 -2
  220. package/dist/maintenance-cmd-BZAGSYGI.js +0 -2
  221. package/dist/pipeline-MX3ZR5B3.js +0 -2
  222. package/dist/readmodel-S5RAQH3F.js +0 -2
  223. package/dist/reconcile-cmd-4377PWF5.js +0 -2
  224. package/dist/revert-RQJE56HF.js +0 -2
  225. package/dist/review-cmd-7LXGYHHQ.js +0 -4
  226. package/dist/run-2AIQUJ55.js +0 -2
  227. package/dist/run-YH5SCBYD.js +0 -2
  228. package/dist/sessions-cmd-DTQYDZNT.js +0 -23
  229. package/dist/spawner-7KXVKAD5.js +0 -2
  230. package/dist/tcg-generate-U6OCCS2E.js +0 -2
  231. package/dist/testmd-actions-RPALXRZK.js +0 -2
  232. package/dist/token-refresh-S7CYBZTE.js +0 -2
  233. package/dist/walk-session-YIKHE6PT.js +0 -2
  234. /package/dist/{chunk-BC7UVJJB.js → chunk-CH273NAE.js} +0 -0
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as Q,b as A,d as Z}from"./chunk-L4JIMNKW.js";import{f as Ee,i as K}from"./chunk-M7WQM4UA.js";import{d as F,e as y,f as Y,g as le,h as pe}from"./chunk-5YPBPZUR.js";function Re(s,n){let r=s.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(r.length>60){let d=r.lastIndexOf("-",60);r=(d>0?r.slice(0,d):r.slice(0,60)).replace(/-+$/g,"")}if(!X.test(r))return null;let e=r;for(let d=2;n(e);d++)e=`${r}-${d}`;return X.test(e)?e:null}var xe={source:"src",usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"};function Le(s,n,r){let e=xe[s];return Re(e?`${e} ${n}`:n,r)}var Ce={usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"},Ge=/^(uc|sc|ac|t|gap|sty)-\d+$/i;function Se(s,n,r){let e=Ce[s];if(!e)return null;let d=new RegExp(`^${e}-(\\d+)$`),f=0;for(let l of r){let m=d.exec(l);if(!m)continue;let i=Number(m[1]);Number.isSafeInteger(i)&&i>f&&(f=i)}let a=f+1;for(;n(`${e}-${a}`);)a+=1;return`${e}-${a}`}var ye=/^L([1-9]\d*)-L([1-9]\d*)$/,Oe=/^img#(p[1-9]\d*-[1-9]\d*|i[1-9]\d*)$/;function ee(s){if(s==="img#whole")return{kind:"img-whole"};let n=Oe.exec(s);if(n)return{kind:"img-part",ref:n[1]};let r=ye.exec(s);return r?{kind:"lines",a:parseInt(r[1],10),b:parseInt(r[2],10)}:null}function be(s,n){let r=/^L(\d+)-L(\d+)$/.exec(n);if(!r)return null;let e=parseInt(r[1],10),d=parseInt(r[2],10),f=s.split(`
3
+ `);return e<1||d<e||d>f.length?null:f.slice(e-1,d).map(a=>a.replace(/^\d+\| /,"")).join(`
4
+ `)}function $e(s,n,r){let e=ee(n.anchor);if(s.format==="image")return e?.kind==="img-whole"?[]:[{code:"CITE_ANCHOR_INVALID",detail:`image cites are anchor-only (img#whole), got ${n.anchor}`}];if(e?.kind==="img-part")return new Set((s.images??[]).map(a=>a.ref)).has(e.ref)?[]:[{code:"CITE_ANCHOR_INVALID",detail:`anchor ${n.anchor} names no embedded image of this source version`}];if(!n.anchor||n.quote===void 0||n.quote==="")return[{code:"MISSING_CITE",detail:"text-kind cites need anchor+quote"}];let d=r!==null?be(r,n.anchor):null;return d===null?[{code:"BAD_ANCHOR",detail:`anchor ${n.anchor} does not resolve in the source`}]:d.includes(n.quote)?[]:[{code:"QUOTE_MISMATCH",detail:`quote is not verbatim within ${n.anchor}`}]}var X=/^[a-z0-9][a-z0-9-]{1,63}$/;function Ie(s,n,r,e){if(!n)return{error:{code:"SUPERSEDE_TARGET_MISSING",detail:"supersede verdict needs a target (slug or cid)"}};let d=s.resolve(n);return d?d.superseded||e.has(d.cid)?{error:{code:"ALREADY_SUPERSEDED",detail:`${n} is already superseded (tip: ${d.tip})`}}:d.cid===r?{error:{code:"SELF_SUPERSEDE",detail:"a node cannot supersede itself"}}:{targetCid:d.cid}:{error:{code:"UNKNOWN_SUPERSEDE_TARGET",detail:`${n} names nothing in the graph`}}}function ke(s,n,r,e,d=[]){if(!le(n)?.acyclic)return null;if(r===e)return{code:"EDGE_CYCLE",detail:`${n} ${r} \u2192 itself`};let a=i=>[...s.edgesFrom(i).filter(g=>g.type===n).map(g=>g.dst),...d.filter(g=>g.type===n&&g.src===i).map(g=>g.dst)],l=new Set,m=[e];for(;m.length>0;){let i=m.pop();if(i===r)return{code:"EDGE_CYCLE",detail:`${n} ${r} \u2192 ${e} closes a cycle`};l.has(i)||(l.add(i),m.push(...a(i)))}return null}function ze(s,n,r,e){let f=le(n)?.cardinality;if(f!=="one-live-per-src"&&f!=="one-live-per-src-and-dst")return null;let a=s.edgesFrom(r).filter(l=>l.type===n&&!s.superseded.has(l.dst));if(a.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${n} from ${r} already has a live edge (${a[0].ecid}) \u2014 supersede it first`};if(f==="one-live-per-src-and-dst"&&e!==void 0){let l=s.edgesInto(e).filter(m=>m.type===n&&!s.superseded.has(m.src));if(l.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${n} onto ${e} already has a live edge (${l[0].ecid}) \u2014 strict 1:1, supersede it first`}}return null}var fe=new Set(["high","med","low"]),te=s=>s.cites&&s.cites.length>0?s.cites:[s.cite];function re(s){let n=0;for(let r of s)typeof r=="object"&&r!==null&&"op"in r&&n++;return n===0?"flat":n===s.length?"ops":"mixed"}var De=/^c[1-9][0-9]*$/;function ve(s,n,r,e){let d=new Map,f=[],a=[];for(let[m,i]of n.entries()){let g=`${s}.updated.criteria[${m}]`;if(i.op==="keep"||i.op==="remove"){if(!De.test(i.ref??"")){e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${g}: ref ${JSON.stringify(i.ref)} is not a c<N> criterion index`});continue}if(d.has(i.ref)){e.push({code:"CRITERIA_REF_DUPLICATE",detail:`${g}: ${i.ref} is already named by another op \u2014 every prior criterion appears in exactly one keep or remove`});continue}d.set(i.ref,i);let h=Number.parseInt(i.ref.slice(1),10);if(h>r.length){e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${g}: ${i.ref} \u2014 the live target has ${r.length} criteria`});continue}if(r[h-1]!==i.text){e.push({code:"CRITERIA_REF_MISMATCH",detail:`${g}: ${i.ref} echo mismatch \u2014 the live target's criterion ${h} reads ${JSON.stringify(r[h-1])}, the op echoed ${JSON.stringify(i.text)} \u2014 re-read the node and re-emit`});continue}i.op==="remove"&&(f.push(i.text),(!i.reason||!i.reason.trim())&&e.push({code:"EMPTY_REASON",detail:`${g}: a remove op carries its reason`}))}else!i.text||!i.text.trim()?e.push({code:"EMPTY_CRITERION",detail:`${g}: set text is empty`}):a.push(i.text)}let l=[];for(let m=1;m<=r.length;m++)d.has(`c${m}`)||l.push(`c${m}`);l.length>0&&e.push({code:"CRITERIA_PARTITION_INCOMPLETE",detail:`${s}: prior criteria ${l.join(", ")} named by no keep/remove op \u2014 every prior criterion must be kept or removed (with a reason)`});for(let m of f)a.includes(m)&&e.push({code:"CRITERIA_OP_CONFLICT",detail:`${s}: ${JSON.stringify(m)} is removed AND re-set in the same update \u2014 drop one of the two ops`})}function Ze(s,n,r){let e=[],d=s.sources??[s.source],f=new Map(d.map(i=>[i.source_id,i.source_cid])),a=new Map;if(typeof n=="string")a.set(s.source.source_id,{media:r.mediaOf(s.source.source_cid),numberedText:n});else for(let[i,g]of n)a.set(i,g);for(let i of d)r.hasNode(i.source_cid)||e.push({code:"MISSING_SOURCE_NODE",detail:`source ${i.source_id} (${i.source_cid}) is not a committed node \u2014 ingest it first`});let l=(i,g)=>{let h=g.source_id??s.source.source_id;if(!f.has(h)){e.push({code:"CITE_SOURCE_UNKNOWN",detail:`${i}: cite source ${JSON.stringify(h)} is not in read_basis`});return}let o=a.get(h);if(!o){e.push({code:"MISSING_SOURCE_NODE",detail:`${i}: no citable text available for source ${h}`});return}for(let N of $e(o.media,g,o.numberedText))e.push({code:N.code,detail:`${i}: ${N.detail}`})},m=new Set;for(let i of s.use_cases){if(m.has(i.temp_ref)&&e.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${i.temp_ref}`}),m.add(i.temp_ref),(!i.title||!i.title.trim())&&e.push({code:"EMPTY_TITLE",detail:`${i.temp_ref}: title is empty`}),fe.has(i.risk)||e.push({code:"BAD_RISK",detail:`${i.temp_ref}: risk ${JSON.stringify(i.risk)} not in high|med|low`}),!i.cite||!i.cite.anchor)e.push({code:"MISSING_CITE",detail:`${i.temp_ref}: every derived use-case must carry a cite`});else for(let h of te(i))l(i.temp_ref,h);i.matches_existing&&!r.hasNode(i.matches_existing.cid)&&e.push({code:"UNKNOWN_MATCH",detail:`${i.temp_ref}: matches_existing ${i.matches_existing.cid} is not in the graph`});for(let[h,o]of(i.criteria??[]).entries())(!o.text||!o.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${i.temp_ref}.criteria[${h}]: text is empty`}),!o.cite||!o.cite.anchor?e.push({code:"MISSING_CITE",detail:`${i.temp_ref}.criteria[${h}]: every criterion carries its own cite`}):l(`${i.temp_ref}.criteria[${h}]`,o.cite);let g=i.updated?.criteria??[];if(g.length>0){let h=re(g);if(h==="mixed")e.push({code:"CRITERIA_SHAPE_MIXED",detail:`${i.temp_ref}.updated.criteria mixes op-shaped (keep/set/remove) and {text, cite} entries \u2014 emit ONE shape for the whole array`});else if(h==="ops"){let o=g,N=i.matches_existing?Ue(r,i.matches_existing.cid):null;if(!N)e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${i.temp_ref}: op-union criteria address a prior version \u2014 they need a resolvable matches_existing target`});else{let v=r.getNode(N.cid)?.content.criteria??[];ve(i.temp_ref,o,v,e)}for(let[v,R]of o.entries())R.op==="set"&&(!R.cite||!R.cite.anchor?e.push({code:"MISSING_CITE",detail:`${i.temp_ref}.updated.criteria[${v}]: a set op carries the proposing source's cite`}):l(`${i.temp_ref}.updated.criteria[${v}]`,R.cite))}else for(let[o,N]of g.entries())(!N.text||!N.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${i.temp_ref}.updated.criteria[${o}]: text is empty`}),!N.cite||!N.cite.anchor?e.push({code:"MISSING_CITE",detail:`${i.temp_ref}.updated.criteria[${o}]: every updated criterion carries its own cite`}):l(`${i.temp_ref}.updated.criteria[${o}]`,N.cite)}}return e}function we(s,n,r){return`${s}:${n}:${r}`}function Te(s,n,r,e){let d=`${n}:${r}:`,f=0;for(let a of s.appliedEvents){if(!a.startsWith(d))continue;let l=a.slice(d.length);if(!/^\d+$/.test(l))continue;let m=Number.parseInt(l,10);m>f&&(f=m)}return Array.from({length:e},(a,l)=>we(n,r,f+1+l))}function Ae(s,n){let r=new Map;for(let[a,l]of s.superseded)typeof l=="string"&&l!==a&&r.set(l,[...r.get(l)??[],a]);let e=[],d=[n],f=new Set;for(;d.length>0;){let a=d.pop();f.has(a)||(f.add(a),e.push(a),d.push(...r.get(a)??[]))}return e}function Ue(s,n){let r=s.resolve(n);if(r===null)return null;let e=r.cid;if(s.superseded.has(e)){let d=s.tipOf(e);return s.superseded.has(d)?null:{cid:d,redirected:!0}}return{cid:e,redirected:!1}}function et(s){let{contextDir:n,graph:r,proposal:e,proposalId:d,verdicts:f,by:a,allowStaleBasis:l,extractorVersion:m,autoName:i}=s,g=Ee(n);if(!l&&e.read_basis!==g)return{record:null,errors:[{code:"STALE_BASIS",detail:`proposal read_basis ${String(e.read_basis)} != latest ${String(g)}`}]};for(let t of e.sources??[e.source])if(!r.hasNode(t.source_cid))return{record:null,errors:[{code:"MISSING_SOURCE_NODE",detail:`source ${t.source_id} (${t.source_cid}) is not a committed node \u2014 ingest it first`}]};let h=new Map((e.sources??[e.source]).map(t=>[t.source_id,t.source_cid])),o=[],N=[],v=new Map,R=[],W=r.mediaOf(e.source.source_cid),j=new Set,V=[],k=[],ie=[],G=[],se=[],oe=[],ne=new Set,me=new Set,z=(t,u,O)=>{let U=Ie(r,u.supersedeTarget,O,ne);if("error"in U){o.push({code:U.error.code,detail:`${t}: ${U.error.detail}`});return}ne.add(U.targetCid),se.push({kind:"node",old:U.targetCid,new:O,reason:u.reason??`superseded via review by ${a.id}`,by:a})};for(let t of e.use_cases){let u=f.get(t.temp_ref)??{resolution:"skipped"};j.has(t.temp_ref)&&o.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${t.temp_ref}`}),j.add(t.temp_ref),(!t.title||!t.title.trim())&&o.push({code:"EMPTY_TITLE",detail:`${t.temp_ref}: title is empty`}),fe.has(t.risk)||o.push({code:"BAD_RISK",detail:`${t.temp_ref}: risk ${JSON.stringify(t.risk)} not in high|med|low`});let O=ee(t.cite?.anchor??""),U=t.cite?.source_id!==void 0&&h.has(t.cite.source_id)?r.mediaOf(h.get(t.cite.source_id)):W;if(U.format==="image"){if(O?.kind!=="img-whole"){o.push({code:t.cite?.anchor?"CITE_ANCHOR_INVALID":"MISSING_CITE",detail:`${t.temp_ref}: image cites are anchor-only (img#whole)`});continue}}else if(O?.kind==="img-part"){if(!(U.images??[]).some(p=>p.ref===O.ref)){o.push({code:"CITE_ANCHOR_INVALID",detail:`${t.temp_ref}: anchor ${t.cite?.anchor} names no embedded image of this source version`});continue}}else if(!t.cite||!t.cite.anchor||!t.cite.quote){o.push({code:"MISSING_CITE",detail:`${t.temp_ref}: every derived use-case must cite anchor+quote`});continue}u.resolution==="edited"&&u.edit&&(u.edit.title!==void 0&&!u.edit.title.trim()&&o.push({code:"EMPTY_TITLE",detail:`${t.temp_ref}: edited title is empty`}),u.edit.risk!==void 0&&!fe.has(u.edit.risk)&&o.push({code:"BAD_RISK",detail:`${t.temp_ref}: edited risk ${JSON.stringify(u.edit.risk)} invalid`}));let ae=Z({title:u.edit?.title??t.title,description:t.description,summary:u.edit?.summary??t.summary,actors:t.actors,value:t.value,risk:u.edit?.risk??t.risk,...t.criteria&&t.criteria.length>0?{criteria:t.criteria.map(c=>c.text)}:{}}),S=Q("usecase",ae),ue=t.cite.source_id??e.source.source_id,he=h.get(ue);if(t.cite.source_id!==void 0&&he===void 0){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: cite source ${JSON.stringify(ue)} is not in read_basis`});continue}let q={source_id:ue,source_cid:he??e.source.source_cid,anchor:t.cite.anchor,...t.cite.quote?{quote:t.cite.quote}:{}};if(t.matches_existing&&!r.hasNode(t.matches_existing.cid)){o.push({code:"UNKNOWN_MATCH",detail:`${t.temp_ref}: matches_existing ${t.matches_existing.cid} is not in the graph`});continue}let $=t.matches_existing?.cid??(r.hasNode(S)?S:null);if($&&r.superseded.has($)){let c=r.tipOf($);$=r.superseded.has(c)?null:c}if($&&t.matches_existing&&(r.trust.get($)??null)==="derived"){let c=t.updated?.criteria??[];if(t.changed&&c.length>0&&re(c)==="ops"&&(u.resolution==="approved"||u.resolution==="edited")){o.push({code:"UC_UNREVIEWED",detail:`${t.temp_ref}: merge target ${$.slice(0,19)} is unreviewed (derived) \u2014 bless it first (kane-cli context review) and re-propose the merge`});continue}let p=(s.probeHits??[]).find(_=>_.tempRef===t.temp_ref&&_.candidateCid===$);R.push({tempRef:t.temp_ref,candidate_cid:$,score:p?.score??1,scorer:p?.scorer??"lexical_fallback"}),$=null}if($){if(t.changed&&(u.resolution==="approved"||u.resolution==="edited")){let c=t.updated;if(!c||Object.keys(c).length===0){o.push({code:"CHANGED_NEEDS_PAYLOAD",detail:`${t.temp_ref}: changed:true needs an updated{...} payload naming the moved fields`});continue}let p=r.getNode($)?.content??{},_=c.criteria??[],x=_.length>0?re(_):"flat";if(x==="mixed"){o.push({code:"CRITERIA_SHAPE_MIXED",detail:`${t.temp_ref}.updated.criteria mixes op-shaped (keep/set/remove) and {text, cite} entries \u2014 emit ONE shape for the whole array`});continue}if(x==="ops"){let C=_,b=p.criteria??[],D=o.length;ve(t.temp_ref,C,b,o);for(let[H,B]of C.entries())B.op==="set"&&(!B.cite||!B.cite.anchor)&&o.push({code:"MISSING_CITE",detail:`${t.temp_ref}.updated.criteria[${H}]: a set op carries the proposing source's cite`});if(o.length>D)continue;let I=C.filter(H=>H.op!=="remove").map(H=>H.text),T=Z({title:u.edit?.title??c.title??String(p.title??t.title),...c.description??p.description?{description:c.description??p.description}:{},...u.edit?.summary??c.summary??p.summary?{summary:u.edit?.summary??c.summary??p.summary}:{},...c.actors??p.actors?{actors:c.actors??p.actors}:{},...c.value??p.value?{value:c.value??p.value}:{},risk:u.edit?.risk??c.risk??String(p.risk??t.risk),...I.length>0?{criteria:I}:{}}),P=Q("usecase",T);if(P!==$){for(let E of Y("usecase",T))o.push({code:E.code,detail:`${t.temp_ref}: ${E.detail}`});V.push({cid:P,label:F.USECASE,content:T});for(let E of te(t)){let M=E.source_id??e.source.source_id,w=h.get(M);if(!w){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: cite source ${JSON.stringify(M)} is not in read_basis`});continue}let L={source_id:M,source_cid:w,anchor:E.anchor,...E.quote?{quote:E.quote}:{}};k.push({ecid:A("DERIVES",w,P,L),type:y.DERIVES,src:w,dst:P,props:L})}let B=Ae(r,$).flatMap(E=>r.edgesInto(E)).filter(E=>E.type===y.DERIVES&&typeof E.props.claim=="string");for(let E of C){if(E.op!=="keep")continue;let M=new Set;for(let w of B){let L=w.props;if(L.claim!==E.text)continue;let ge=`${L.source_id}|${L.source_cid}|${L.anchor}`;if(M.has(ge))continue;M.add(ge);let _e={...w.props};k.push({ecid:A("DERIVES",w.src,P,_e),type:y.DERIVES,src:w.src,dst:P,props:_e})}}for(let E of C){if(E.op!=="set")continue;let M=E.cite.source_id??e.source.source_id,w=h.get(M);if(!w){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: set cite source ${JSON.stringify(M)} is not in read_basis`});continue}let L={source_id:M,source_cid:w,anchor:E.cite.anchor,...E.cite.quote?{quote:E.cite.quote}:{},claim:E.text};k.push({ecid:A("DERIVES",w,P,L),type:y.DERIVES,src:w,dst:P,props:L})}for(let E of C)E.op==="remove"&&N.push({about:$,ref:E.ref,text:E.text,reason:E.reason});z(t.temp_ref,{resolution:"supersede",supersedeTarget:$,reason:u.reason??`criteria merge: ${e.source.source_id} (${C.filter(E=>E.op==="keep").length} kept, ${C.filter(E=>E.op==="set").length} set, ${C.filter(E=>E.op==="remove").length} removed)`},P),G.push({id:P,kind:"review-item",resolution:u.resolution,edit:u.resolution==="edited"?{...u.edit}:null,reason:null,by:a});continue}}else{let C=_.map(I=>typeof I=="string"?{text:I,cite:void 0}:I),b=Z({title:u.edit?.title??c.title??String(p.title??t.title),...c.description??p.description?{description:c.description??p.description}:{},...u.edit?.summary??c.summary??p.summary?{summary:u.edit?.summary??c.summary??p.summary}:{},...c.actors??p.actors?{actors:c.actors??p.actors}:{},...c.value??p.value?{value:c.value??p.value}:{},risk:u.edit?.risk??c.risk??String(p.risk??t.risk),...c.criteria?C.length>0?{criteria:C.map(I=>I.text)}:{}:p.criteria?{criteria:p.criteria}:{}}),D=Q("usecase",b);if(D!==$){for(let I of Y("usecase",b))o.push({code:I.code,detail:`${t.temp_ref}: ${I.detail}`});V.push({cid:D,label:F.USECASE,content:b}),k.push({ecid:A("DERIVES",q.source_cid,D,q),type:y.DERIVES,src:q.source_cid,dst:D,props:q});for(let I of C){if(!I.cite)continue;let T={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:I.cite.anchor,...I.cite.quote?{quote:I.cite.quote}:{},claim:I.text};k.push({ecid:A("DERIVES",T.source_cid,D,T),type:y.DERIVES,src:T.source_cid,dst:D,props:T})}z(t.temp_ref,{resolution:"supersede",supersedeTarget:$,reason:u.reason??`matches-but-changed: ${e.source.source_id} moved (${Object.keys(c).join(", ")})`},D),G.push({id:D,kind:"review-item",resolution:u.resolution,edit:u.resolution==="edited"?{...u.edit}:null,reason:null,by:a});continue}for(let I of C){if(!I.cite)continue;let T={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:I.cite.anchor,...I.cite.quote?{quote:I.cite.quote}:{},claim:I.text};k.push({ecid:A("DERIVES",T.source_cid,$,T),type:y.DERIVES,src:T.source_cid,dst:$,props:T})}}}if(t.changed&&u.resolution==="skipped"){let c=t.updated?.criteria??[];c.length>0&&re(c)==="ops"&&G.push({id:$,kind:"pending_update",resolution:"pending",edit:{temp_ref:t.temp_ref,source_id:e.source.source_id,updated:t.updated},reason:t.change_note??null,by:a})}if(u.resolution!=="rejected"){for(let c of te(t)){let p=c.source_id??e.source.source_id,_=h.get(p);if(!_){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: cite source ${JSON.stringify(p)} is not in read_basis`});continue}let x={source_id:p,source_cid:_,anchor:c.anchor,...c.quote?{quote:c.quote}:{}};k.push({ecid:A("DERIVES",_,$,x),type:y.DERIVES,src:_,dst:$,props:x})}(u.resolution==="approved"||u.resolution==="edited"||u.resolution==="supersede")&&G.push({id:$,kind:"review-item",resolution:"approved",edit:null,reason:null,by:a}),u.resolution==="supersede"&&z(t.temp_ref,u,$)}continue}for(let c of Y("usecase",ae))o.push({code:c.code,detail:`${t.temp_ref}: ${c.detail}`});for(let c of pe(y.DERIVES,"source","usecase",q))o.push({code:c.code,detail:`${t.temp_ref}: ${c.detail}`});V.push({cid:S,label:F.USECASE,content:ae}),v.set(t.temp_ref,S),k.push({ecid:A("DERIVES",q.source_cid,S,q),type:y.DERIVES,src:q.source_cid,dst:S,props:q});for(let c of te(t).slice(1)){let p=c.source_id??e.source.source_id,_=h.get(p);if(!_){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: cite source ${JSON.stringify(p)} is not in read_basis`});continue}let x={source_id:p,source_cid:_,anchor:c.anchor,...c.quote?{quote:c.quote}:{}};for(let C of pe(y.DERIVES,"source","usecase",x))o.push({code:C.code,detail:`${t.temp_ref}: ${C.detail}`});k.push({ecid:A("DERIVES",_,S,x),type:y.DERIVES,src:_,dst:S,props:x})}for(let c of t.criteria??[]){let p=c.cite.source_id??e.source.source_id,_=h.get(p);if(!_){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: criterion cite source ${JSON.stringify(p)} is not in read_basis`});continue}let x={source_id:p,source_cid:_,anchor:c.cite.anchor,...c.cite.quote?{quote:c.cite.quote}:{},claim:c.text};k.push({ecid:A("DERIVES",x.source_cid,S,x),type:y.DERIVES,src:x.source_cid,dst:S,props:x})}for(let c of t.depends_on_hint??[]){let p=b=>b.toLowerCase().trim().replace(/\s+/g," "),_=null,x=r.resolve(c);if(x&&!x.superseded&&r.nodeLabel.get(x.cid)===F.USECASE&&(_=x.cid),!_){for(let{cid:b,content:D}of r.byLabel(F.USECASE))if(!r.superseded.has(b)&&p(String(D.title??""))===p(c)){_=b;break}}if(!_){let b=V.find(D=>D.label===F.USECASE&&p(String(D.content.title??""))===p(c));b&&(_=b.cid)}!_||_===S||ke(r,y.DEPENDS_ON,S,_,ie)||ie.some(b=>b.src===S&&b.dst===_)||(k.push({ecid:A(y.DEPENDS_ON,S,_,{reason:"extract hint"}),type:y.DEPENDS_ON,src:S,dst:_,props:{reason:"extract hint"}}),ie.push({src:S,dst:_,type:y.DEPENDS_ON}))}if((u.resolution==="approved"||u.resolution==="edited"||u.resolution==="supersede")&&r.superseded.get(S)===null&&!ne.has(S)&&se.push({kind:"node",old:S,new:S,reason:`re-minted after tombstone via review by ${a.id}`,by:a}),i){let c=Se("usecase",p=>me.has(p),r.names.keys());c!==null&&!r.nameOf.has(S)&&(me.add(c),oe.push({cid:S,slug:c,by:a}))}u.resolution==="approved"?G.push({id:S,kind:"review-item",resolution:"approved",edit:null,reason:null,by:a}):u.resolution==="edited"?G.push({id:S,kind:"review-item",resolution:"edited",edit:{...u.edit},reason:null,by:a}):u.resolution==="rejected"?G.push({id:S,kind:"review-item",resolution:"rejected",edit:null,reason:u.reason??null,by:a}):u.resolution==="supersede"&&(G.push({id:S,kind:"review-item",resolution:"approved",edit:null,reason:u.reason??null,by:a}),z(t.temp_ref,u,S))}if(o.length)return{record:null,errors:o};let ce=new Date().toISOString(),Ne=(e.sources?.length??0)>1||(e.extraction_claims?.length??0)>0,de;if(Ne){let t=[];if(e.extraction_claims==null)t.push({source_id:e.source.source_id,source_cid:e.source.source_cid,completeness:"complete",...m?{extractor_version:m}:{},at:ce});else{let u=new Map(e.extraction_claims.map(O=>[O.source_id,O.completeness]));for(let O of e.sources??[e.source]){let U=u.get(O.source_id)??null;U!==null&&t.push({source_id:O.source_id,source_cid:O.source_cid,completeness:U,...m?{extractor_version:m}:{},at:ce})}}de=t}else de=e.source.source_cid;let J=[];for(let t of s.probeHits??[])J.push({...v.has(t.tempRef)?{new_cid:v.get(t.tempRef)}:{},candidate_cid:t.candidateCid,score:t.score,scorer:t.scorer,probe_basis:null});for(let t of R){let u=v.get(t.tempRef);J.some(O=>O.new_cid===u&&O.candidate_cid===t.candidate_cid)||J.push({...u!==void 0?{new_cid:u}:{},candidate_cid:t.candidate_cid,score:t.score,scorer:t.scorer,probe_basis:null})}return{record:K(n,{ts:ce,proposal_id:d,...d!=null?{extraction_of:de}:{},...d!=null&&m?{extractor_version:m}:{},...N.length>0?{criteria_removed:N}:{},...J.length>0?{dedup_hits:J}:{},nodes:V,edges:k,review:G,supersessions:se,...oe.length>0?{names:oe}:{},...s.judgements&&s.judgements.length>0?{judgements:s.judgements}:{},...s.eventIds&&s.eventIds.length>0?{event_ids:s.eventIds}:s.sid?{event_ids:Te(r,s.sid,"extract",1)}:{},...s.sid?{sid:s.sid}:{},source_head_moves:{}},{expectPrev:g}).record,errors:null}}function tt(s){let{contextDir:n,graph:r,verdicts:e,by:d}=s,f=[],a=[],l=[],m=[],i=new Set;for(let[h,o]of e){if(o.resolution==="skipped")continue;let N=r.resolve(h);if(!N){f.push({code:"UNKNOWN_NODE",detail:`${h} names nothing in the graph`});continue}if(N.superseded){f.push({code:"SUPERSEDED_TARGET",detail:`${h} is superseded \u2014 review the tip (${N.tip})`});continue}let v=N.cid;if(o.resolution==="approved")l.push({id:v,kind:"review-item",resolution:"approved",edit:null,reason:null,by:d});else if(o.resolution==="rejected")s.holdArchives?l.push({id:v,kind:"pending_archive",resolution:"pending",edit:null,reason:o.reason??null,by:d}):l.push({id:v,kind:"review-item",resolution:"rejected",edit:null,reason:o.reason??null,by:d});else if(o.resolution==="edited"){let R=r.getNode(v);if(!R){f.push({code:"UNKNOWN_NODE",detail:`${h}: node file unreadable`});continue}let W={...R.content,...o.edit?.title!==void 0?{title:o.edit.title}:{},...o.edit?.summary!==void 0?{summary:o.edit.summary}:{},...o.edit?.risk!==void 0?{risk:o.edit.risk}:{}},j=Y(R.label,W);if(j.length>0){for(let k of j)f.push({code:k.code,detail:`${h}: ${k.detail}`});continue}let V=Q(R.label,W);if(V===v){l.push({id:v,kind:"review-item",resolution:"approved",edit:null,reason:null,by:d});continue}a.push({cid:V,label:R.label,content:W}),i.add(v),m.push({kind:"node",old:v,new:V,reason:o.reason??"edited in review",by:d}),l.push({id:V,kind:"review-item",resolution:"edited",edit:{...o.edit},reason:null,by:d})}else if(o.resolution==="supersede"){let R=Ie(r,o.supersedeTarget,v,i);if("error"in R){f.push({code:R.error.code,detail:`${h}: ${R.error.detail}`});continue}i.add(R.targetCid),s.holdArchives?l.push({id:R.targetCid,kind:"pending_archive",resolution:"pending",edit:null,reason:`supersede by ${v}${o.reason?` \u2014 ${o.reason}`:""}`,by:d}):(m.push({kind:"node",old:R.targetCid,new:v,reason:o.reason??`superseded via review by ${d.id}`,by:d}),l.push({id:v,kind:"review-item",resolution:"approved",edit:null,reason:o.reason??null,by:d}))}}return f.length?{record:null,errors:f}:l.length===0&&m.length===0?{record:null,errors:[{code:"NO_VERDICTS",detail:"every item was skipped \u2014 nothing to commit"}]}:{record:K(n,{ts:new Date().toISOString(),proposal_id:null,nodes:a,edges:[],review:l,supersessions:m,source_head_moves:{}},{expectPrev:r.latestHash}).record,errors:null}}function rt(s){let{contextDir:n,graph:r,survivor:e,merged:d,reason:f,by:a}=s,l=r.resolve(e),m=r.resolve(d);return l?m?l.superseded||m.superseded?{record:null,errors:[{code:"ALREADY_SUPERSEDED",detail:"a side of the pair is already superseded \u2014 the pair is drained"}]}:l.cid===m.cid?{record:null,errors:[{code:"SELF_SUPERSEDE",detail:"a pair cannot merge a node into itself"}]}:{record:K(n,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:m.cid,new:l.cid,reason:f??`pair merge: duplicate of ${e}`,by:a}],source_head_moves:{}},{expectPrev:r.latestHash}).record,errors:null}:{record:null,errors:[{code:"UNKNOWN_NODE",detail:`${d} names nothing in the graph`}]}:{record:null,errors:[{code:"UNKNOWN_NODE",detail:`${e} names nothing in the graph`}]}}function it(s){let{contextDir:n,graph:r,assignments:e,by:d}=s,f=[],a=[],l=new Set;for(let{ref:i,slug:g}of e){if(!X.test(g)){f.push({code:"BAD_SLUG",detail:`${JSON.stringify(g)} \u2014 slugs are kebab-case ${String(X)}`});continue}let h=r.resolve(i);if(!h){f.push({code:"UNKNOWN_REF",detail:`${i} names nothing in the graph`});continue}if(h.superseded){f.push({code:"SUPERSEDED_TARGET",detail:`${i} is superseded \u2014 name the tip instead (${h.tip})`});continue}let o=r.names.get(g);if(o!==void 0&&!r.superseded.has(o)&&o!==h.cid||l.has(g)){f.push({code:"SLUG_TAKEN",detail:`${g} already names ${o??"another node in this record"}`});continue}l.add(g),a.push({cid:h.cid,slug:g,by:d})}return f.length?{record:null,errors:f}:a.length===0?{record:null,errors:[{code:"NO_ASSIGNMENTS",detail:"nothing to name"}]}:{record:K(n,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],names:a,source_head_moves:{}},{expectPrev:r.latestHash}).record,errors:null}}function st(s){let{contextDir:n,graph:r,sourceId:e,reason:d,by:f}=s,a=r.heads.get(e);return a===void 0?{record:null,errors:[{code:"UNKNOWN_SOURCE",detail:`no source ${e} in the graph`}]}:a===null?{record:null,errors:[{code:"ALREADY_RETIRED",detail:`source ${e} is already retired`}]}:{record:K(n,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:a,new:null,reason:d??`retired source ${e}`,by:f}],source_head_moves:{[e]:null},names:[]},{expectPrev:r.latestHash}).record,errors:null}}export{ee as a,be as b,$e as c,X as d,ke as e,ze as f,te as g,re as h,ve as i,Ze as j,we as k,Te as l,Ue as m,et as n,tt as o,rt as p,it as q,st as r,Re as s,xe as t,Le as u,Ge as v,Se as w};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{y as n}from"./chunk-MMPFU2YC.js";import{a as s}from"./chunk-HCBYKLMW.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
2
+ import{y as n}from"./chunk-C4G7RVJ6.js";import{a as s}from"./chunk-HCBYKLMW.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as f}from"./chunk-5YPBPZUR.js";function k(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 $(s,n){let t=new Map;for(let[d,o]of s.superseded)o!=null&&t.set(o,d);let i=[n],e=n;for(;t.has(e);)e=t.get(e),i.unshift(e);return i}function w(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 d=s.nodeLabel.get(e);if(d!==f.USECASE)return{ok:!1,code:2,message:`'${n}' is a ${d??"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 c=k(s,e);if(c==null||t)return{ok:!0};let l=$(s,e),a=l.length;if(c.designed_at_cid===e)return{ok:!1,code:2,message:`'${o}' is already designed @ v${a} \u2014 current; use --force to redesign`,wall:{kind:"already-designed",display:o,currentV:a}};let u=l.indexOf(c.designed_at_cid),g=u>=0?`v${u+1}`:"an earlier version";return{ok:!1,code:2,message:`'${o}' was designed @ ${g} \u2014 the use-case is now @ v${a} (STALE); use --force to redesign`,wall:{kind:"designed-stale",display:o,currentV:a,designedV:g}}}export{k as a,w as b};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as b,d as _}from"./chunk-NVGBE2DR.js";import{a as g,c as h}from"./chunk-6HYW5RFX.js";import{e as S}from"./chunk-J2KSZUOO.js";import{d as f,f as v}from"./chunk-5YPBPZUR.js";var V=n=>`conv#turn=${n}`;function E(n,o){for(let t of n.split(`
2
+ import{c as b,d as _}from"./chunk-NVGBE2DR.js";import{a as g,c as h}from"./chunk-L4JIMNKW.js";import{i as S}from"./chunk-M7WQM4UA.js";import{d as f,f as v}from"./chunk-5YPBPZUR.js";var V=n=>`conv#turn=${n}`;function E(n,o){for(let t of n.split(`
3
3
  `))if(t.trim())try{let r=JSON.parse(t);if(r.turn===o)return r.text}catch{}return null}var y={format:"conversation",media_type:"text/x-conversation",anchors_supported:["#turn="]};function $(n){let{contextDir:o,graph:t,sessionStamp:r}=n,e=`su-conv-${r}`,u=t.heads.get(e);if(typeof u=="string")return{record:null,errors:[{code:"CONV_SOURCE_EXISTS",detail:`${e} already exists \u2014 resume it`}],sourceId:e,cid:u};let i=b(o,Buffer.from("","utf8")),c=h(e,i),a=v("source",c);if(a.length>0)return{record:null,errors:a.map(s=>({code:s.code,detail:s.detail})),sourceId:e,cid:""};let d=g("source",c);return{record:S(o,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:d,label:f.SOURCE,content:c}],edges:[],review:[],supersessions:[],source_head_moves:{[e]:d},media:{[e]:y},conv:{source_id:e,turn:0,append_of:null}},{expectPrev:t.latestHash}).record,errors:null,sourceId:e,cid:d}}function G(n){let{contextDir:o,graph:t,sourceId:r,text:e,force:u}=n,i=t.heads.get(r),c=t.convChains.get(r);if(typeof i!="string"||!c)return{record:null,errors:[{code:"CONV_SOURCE_MISSING",detail:`${r} is not a live conversation source`}]};let d=t.getNode(i)?.content?.blob;if(typeof d!="string")return{record:null,errors:[{code:"CONV_SOURCE_MISSING",detail:`${r} head node unreadable`}]};let l=_(o,d)?.toString("utf8")??"",s=c.turns;if(!u&&s>0&&E(l,s)===e)return{record:null,errors:null,turn:s,cid:i,idempotent:!0};let p=s+1,C=`${l}${JSON.stringify({turn:p,text:e})}
4
4
  `,O=b(o,Buffer.from(C,"utf8")),x=h(r,O),m=g("source",x);return{record:S(o,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:m,label:f.SOURCE,content:x}],edges:[],review:[],supersessions:[],source_head_moves:{[r]:m},media:{[r]:y},conv:{source_id:r,turn:p,append_of:i}},{expectPrev:t.latestHash}).record,errors:null,turn:p,cid:m,idempotent:!1}}export{V as a,E as b,$ as c,G as d};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as t}from"./chunk-4CJ55EUY.js";async function l(e){let o=e.credentials.expires_at,i=e.thresholdSeconds??300;if(o-Date.now()/1e3>=i)return null;let r=e.creds.loadClient(e.profile,e.env);if(!r)return null;let n=await new t(e.env).refreshToken(e.credentials.refresh_token,r.client_id),s=Math.floor(Date.now()/1e3)+n.expires_in;return e.creds.saveCredentials(e.profile,e.env,{access_token:n.access_token,refresh_token:n.refresh_token,expires_at:s,scope:n.scope}),{accessToken:n.access_token,refreshToken:n.refresh_token,expiresAt:s,scope:n.scope}}export{l as a};
2
+ import{a as t}from"./chunk-KT6G7AF2.js";async function l(e){let o=e.credentials.expires_at,i=e.thresholdSeconds??300;if(o-Date.now()/1e3>=i)return null;let r=e.creds.loadClient(e.profile,e.env);if(!r)return null;let n=await new t(e.env).refreshToken(e.credentials.refresh_token,r.client_id),s=Math.floor(Date.now()/1e3)+n.expires_in;return e.creds.saveCredentials(e.profile,e.env,{access_token:n.access_token,refresh_token:n.refresh_token,expires_at:s,scope:n.scope}),{accessToken:n.access_token,refreshToken:n.refresh_token,expiresAt:s,scope:n.scope}}export{l as a};
@@ -1,10 +1,10 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as B,b as V,c as se}from"./chunk-HOQEMPMQ.js";import{a as j,b as N}from"./chunk-NJAHRITS.js";import{a as ne,b as oe}from"./chunk-2YQ6TW77.js";import{a as C,b as Y,e as M,f as te,m as re}from"./chunk-RKWJG3WW.js";import{a as L}from"./chunk-3AZTXJY4.js";import{a as ee}from"./chunk-WAOCHXJ5.js";import{a as Z}from"./chunk-GIMTSDNC.js";import{a as A}from"./chunk-RZ4F3BHX.js";import{a as H}from"./chunk-KHJXOFDM.js";import{a as O}from"./chunk-LHDNJJGE.js";import{y as h}from"./chunk-MMPFU2YC.js";import{a as F}from"./chunk-HCBYKLMW.js";import{a as k,b as g,i as Q}from"./chunk-C44QQJR4.js";import{a as X}from"./chunk-6YGTRKDT.js";import{e as v}from"./chunk-UR6MHSHU.js";var D=v(X(),1);import{existsSync as P,readFileSync as Je,rmSync as pe,unlinkSync as Ke}from"fs";import{resolve as G}from"path";import{promises as ie,realpathSync as ke}from"fs";import{homedir as be}from"os";import{join as q,parse as Te,relative as ae,resolve as ce}from"path";var le=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),R=class extends Error{constructor(s){super(`refusing to scan '${s}'. Run from your project root, or pass --root <dir>.`);this.cwd=s;this.name="HomeRefusedError"}};function ue(e){try{return ke(ce(e))}catch{return ce(e)}}function Ee(e){let r=ue(e),s=ue(be()),n=Te(r).root;if(process.platform==="win32"){let o=t=>t.toLowerCase();return o(r)===o(s)||o(r)===o(n)}return r===s||r===n}async function U(e){if(Ee(e.root))throw new R(e.root);let r=e.maxEntries??5e4,s=e.maxResults??5e3,n=new Set(e.ignore??[]),o=[],t=0,i=0,c=!1,f,l=[e.root];for(;l.length>0&&!c;){let a=l.shift(),m;try{m=await ie.readdir(a,{withFileTypes:!0})}catch{continue}i++;for(let b of m){if(t++,t>r){c=!0,f="max_entries";break}let w=b.name,E=q(a,w);if(b.isDirectory()){if(le.has(w)||w.startsWith(".")||w.startsWith("output-")||n.has(w))continue;l.push(E)}else if(b.isFile()&&w.endsWith("_test.md")&&(o.push({path:E,relPath:ae(e.root,E),source:"cwd"}),o.length>=s)){c=!0,f="max_results";break}}e.onProgress?.(i,o.length)}if(!c){let m=[{dir:q(e.root,".testmuai","tests"),depth:0}];for(;m.length>0&&!c;){let{dir:b,depth:w}=m.shift(),E;try{E=await ie.readdir(b,{withFileTypes:!0})}catch{continue}i++;for(let u of E){if(t++,t>r){c=!0,f="max_entries";break}let x=u.name,y=q(b,x);if(u.isDirectory()){if(w>=20||x.startsWith(".")||x.startsWith("output-")||le.has(x))continue;m.push({dir:y,depth:w+1})}else if(u.isFile()&&x.endsWith("_test.md")&&(o.push({path:y,relPath:ae(e.root,y),source:"tests-dir"}),o.length>=s)){c=!0,f="max_results";break}}}}return{results:o,aborted:c,abortReason:f,dirsScanned:i}}import{readFileSync as Se}from"fs";function W(e){try{return re(e,Se(e,"utf8")).global.tags??[]}catch{return[]}}import{mkdirSync as ve,writeFileSync as Re}from"fs";import{join as Pe}from"path";function de(e,r){return`Basic ${Buffer.from(`${e}:${r}`).toString("base64")}`}async function Me(e){let r=ne({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId,codeExport:{enabled:!0,language:e.language,skipValidation:e.skipValidation}}),s=await A(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:de(e.auth.username,e.auth.access_key)},body:JSON.stringify(r.body)});if(!s.ok)throw new Error(`code-export trigger failed: ${s.status} ${await s.text()}`);e.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:e.testcaseId})}async function De(e){let r=oe({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId}),s=e.pollIntervalMs??5e3,n=e.timeoutMs??3e5,o=Date.now()+n;for(;Date.now()<o;){let t=await A(r,{headers:{authorization:de(e.auth.username,e.auth.access_key),accept:"application/json"}});if(!t.ok){await new Promise(l=>setTimeout(l,s));continue}let c=(await t.json()).data?.find(l=>l.code_name==="kane-cli-trigger");if(!c){await new Promise(l=>setTimeout(l,s));continue}let f=(c.status??"").toLowerCase();if(f==="in progress"||f==="in_progress"||f==="pending"){await new Promise(l=>setTimeout(l,s));continue}if(!c.url||c.url.length===0)throw new Error(`code-export status=${c.status} but no files returned`);ve(e.outDir,{recursive:!0});for(let l of c.url){let a=Pe(e.outDir,l.file_name),m=await A(l.file_url);if(!m.ok){e.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:l.file_name,status:m.status});continue}let b=await m.text();Re(a,b,"utf-8")}return e.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:e.outDir,file_count:c.url.length}),e.outDir}throw new Error("code-export polling timed out")}async function fe(e){return await Me(e),await De(e)}var T=v(X(),1);import{existsSync as $e,readFileSync as Ce}from"fs";var p=v(F(),1);function Ie(e){B(e);let r=M(e);if(!$e(r))return null;try{return JSON.parse(Ce(r,"utf8"))}catch{return{}}}function Fe(e){return e===null?"never_run":e.testcase_id?"synced":"local_only"}function Oe(e){return e==="synced"?"\u2601":e==="local_only"?"\u25A3":"\u25CB"}function Ae(e){return e==="tests-dir"?"\u2726":" "}function Le(e,r){return r==="all"?!0:r==="synced"?e.status==="synced":r==="local"?e.status==="local_only":r==="never_run"?e.status==="never_run":r==="cli"?e.source==="tests-dir":r==="hand"?e.source==="cwd":!0}var z=["all","synced","local","never_run","cli","hand"];function Be(e){let r=z.indexOf(e);return z[(r+1)%z.length]}function me({root:e,currentOrgId:r,onSelect:s,onCancel:n}){let[o,t]=(0,T.useState)([]),[i,c]=(0,T.useState)(null),[f,l]=(0,T.useState)(!0),[a,m]=(0,T.useState)("all");(0,T.useEffect)(()=>{(async()=>{try{let u=await U({root:e}),x=[];for(let y of u.results){let K=Ie(y.path);K?.org_id!==void 0&&K.org_id!==r||x.push({path:y.path,relPath:y.relPath,name:C(y.path),status:Fe(K),source:y.source,tags:W(y.path)})}t(x),l(!1)}catch(u){u instanceof R,c(u.message),l(!1)}})()},[e,r]);let b=(0,T.useMemo)(()=>o.filter(u=>Le(u,a)).map(u=>({id:u.path,label:`${Oe(u.status)} ${Ae(u.source)} ${u.relPath}${u.tags.length>0?` [${u.tags.join(", ")}]`:""}`})),[o,a]),w=(0,T.useMemo)(()=>Ne(a,o),[a,o]);if(i)return(0,p.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.red,paddingX:2,paddingY:1,children:[(0,p.jsx)(g,{color:h.red,bold:!0,children:"testmd"}),(0,p.jsx)(k,{marginTop:1,children:(0,p.jsx)(g,{color:h.red,children:i})})]});let E=a==="all"?"all":je(a);return(0,p.jsx)(Z,{title:`testmd \xB7 filter: ${E}`,items:b,loading:f,itemNoun:"tests",onSelect:u=>{let x=o.find(y=>y.path===u.id);x&&s(x)},onCancel:n,onTab:()=>m(u=>Be(u)),extraHint:"cycle filter",footer:w})}function je(e){return e==="synced"?"synced (\u2601)":e==="local"?"local (\u25A3)":e==="never_run"?"never run (\u25CB)":e==="cli"?"cli-generated (\u2726)":e==="hand"?"hand-written":"all"}function Ne(e,r){let s={synced:r.filter(o=>o.status==="synced").length,local:r.filter(o=>o.status==="local_only").length,never:r.filter(o=>o.status==="never_run").length,cli:r.filter(o=>o.source==="tests-dir").length,hand:r.filter(o=>o.source==="cwd").length},n=o=>o?h.orange:h.dim;return(0,p.jsxs)(k,{flexDirection:"column",children:[(0,p.jsx)(g,{color:h.dim,children:"legend:"}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="synced"),children:` \u2601 synced (${s.synced}) `}),(0,p.jsx)(g,{color:n(e==="local"),children:`\u25A3 local (${s.local}) `}),(0,p.jsx)(g,{color:n(e==="never_run"),children:`\u25CB never run (${s.never})`})]}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="cli"),children:` \u2726 cli-generated (${s.cli}) `}),(0,p.jsx)(g,{color:n(e==="hand"),children:` hand-written (${s.hand})`})]})]})}var I=v(X(),1);import{existsSync as Ue,readFileSync as We}from"fs";var d=v(F(),1);function ge({path:e,relPath:r,onAction:s,onBack:n,onView:o}){let[t,i]=(0,I.useState)(null),[c,f]=(0,I.useState)(!1);(0,I.useEffect)(()=>{let a=M(e);if(Ue(a))try{i(JSON.parse(We(a,"utf8")))}catch{i(null)}},[e]),Q((a,m)=>{if(m.escape){if(c){f(!1);return}n();return}if(c){a==="y"||a==="Y"?(f(!1),s("delete")):(a==="n"||a==="N")&&f(!1);return}a==="r"&&s("run"),a==="e"&&t?.testcase_id&&s("export"),a==="d"&&f(!0),a==="v"&&o&&o()});let l=({k:a,v:m})=>m?(0,d.jsxs)(g,{children:[(0,d.jsx)(g,{color:h.dim,children:a.padEnd(14)}),m]}):null;return(0,d.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.orange,paddingX:2,paddingY:1,children:[(0,d.jsx)(g,{color:h.orange,bold:!0,children:r}),(0,d.jsx)(k,{marginTop:1,flexDirection:"column",children:t?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l,{k:"test_id",v:t.test_id}),(0,d.jsx)(l,{k:"testcase_id",v:t.testcase_id}),(0,d.jsx)(l,{k:"project_id",v:t.project_id}),(0,d.jsx)(l,{k:"folder_id",v:t.folder_id}),(0,d.jsx)(l,{k:"org_id",v:t.org_id}),(0,d.jsx)(l,{k:"session_name",v:t.session_name}),(0,d.jsx)(l,{k:"commit_id",v:t.commit_id})]}):(0,d.jsx)(g,{color:h.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.red,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.dim,children:["[r] run [e] export",t?.testcase_id?"":" (need testcase_id)"," [d] delete",o?" [v] view":""," [Esc] back"]})})]})}function $(e){B(e);let r=M(e);if(!P(r))return null;try{return JSON.parse(Je(r,"utf8"))}catch{return null}}function he(e,r){return!e||e.org_id===void 0?!0:e.org_id===r}function J(e,r){return he(e,r)?null:(process.stderr.write(`error: this test belongs to org ${e.org_id}; you are logged in as org ${r}.
2
+ import{a as B,b as V,c as se}from"./chunk-33QXD75Y.js";import{a as j,b as N}from"./chunk-ZM5PVRJK.js";import{a as C,b as Y,e as M,f as te,m as re}from"./chunk-RKWJG3WW.js";import{a as ne,b as oe}from"./chunk-2YQ6TW77.js";import{a as L}from"./chunk-DXV6MBTD.js";import{a as ee}from"./chunk-WAOCHXJ5.js";import{a as Z}from"./chunk-KNDSQ4PS.js";import{a as A}from"./chunk-RZ4F3BHX.js";import{a as H}from"./chunk-JRMDGLLT.js";import{a as O}from"./chunk-F6ZOJXYU.js";import{y as h}from"./chunk-C4G7RVJ6.js";import{a as F}from"./chunk-HCBYKLMW.js";import{a as k,b as g,i as Q}from"./chunk-C44QQJR4.js";import{a as X}from"./chunk-6YGTRKDT.js";import{e as v}from"./chunk-UR6MHSHU.js";var D=v(X(),1);import{existsSync as P,readFileSync as Je,rmSync as pe,unlinkSync as Ke}from"fs";import{resolve as G}from"path";import{promises as ie,realpathSync as ke}from"fs";import{homedir as be}from"os";import{join as q,parse as Te,relative as ae,resolve as ce}from"path";var le=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),R=class extends Error{constructor(s){super(`refusing to scan '${s}'. Run from your project root, or pass --root <dir>.`);this.cwd=s;this.name="HomeRefusedError"}};function ue(e){try{return ke(ce(e))}catch{return ce(e)}}function Ee(e){let r=ue(e),s=ue(be()),n=Te(r).root;if(process.platform==="win32"){let o=t=>t.toLowerCase();return o(r)===o(s)||o(r)===o(n)}return r===s||r===n}async function U(e){if(Ee(e.root))throw new R(e.root);let r=e.maxEntries??5e4,s=e.maxResults??5e3,n=new Set(e.ignore??[]),o=[],t=0,i=0,c=!1,f,l=[e.root];for(;l.length>0&&!c;){let a=l.shift(),m;try{m=await ie.readdir(a,{withFileTypes:!0})}catch{continue}i++;for(let b of m){if(t++,t>r){c=!0,f="max_entries";break}let w=b.name,E=q(a,w);if(b.isDirectory()){if(le.has(w)||w.startsWith(".")||w.startsWith("output-")||n.has(w))continue;l.push(E)}else if(b.isFile()&&w.endsWith("_test.md")&&(o.push({path:E,relPath:ae(e.root,E),source:"cwd"}),o.length>=s)){c=!0,f="max_results";break}}e.onProgress?.(i,o.length)}if(!c){let m=[{dir:q(e.root,".testmuai","tests"),depth:0}];for(;m.length>0&&!c;){let{dir:b,depth:w}=m.shift(),E;try{E=await ie.readdir(b,{withFileTypes:!0})}catch{continue}i++;for(let u of E){if(t++,t>r){c=!0,f="max_entries";break}let x=u.name,y=q(b,x);if(u.isDirectory()){if(w>=20||x.startsWith(".")||x.startsWith("output-")||le.has(x))continue;m.push({dir:y,depth:w+1})}else if(u.isFile()&&x.endsWith("_test.md")&&(o.push({path:y,relPath:ae(e.root,y),source:"tests-dir"}),o.length>=s)){c=!0,f="max_results";break}}}}return{results:o,aborted:c,abortReason:f,dirsScanned:i}}import{readFileSync as Se}from"fs";function W(e){try{return re(e,Se(e,"utf8")).global.tags??[]}catch{return[]}}import{mkdirSync as ve,writeFileSync as Re}from"fs";import{join as Pe}from"path";function de(e,r){return`Basic ${Buffer.from(`${e}:${r}`).toString("base64")}`}async function Me(e){let r=ne({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId,codeExport:{enabled:!0,language:e.language,skipValidation:e.skipValidation}}),s=await A(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:de(e.auth.username,e.auth.access_key)},body:JSON.stringify(r.body)});if(!s.ok)throw new Error(`code-export trigger failed: ${s.status} ${await s.text()}`);e.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:e.testcaseId})}async function De(e){let r=oe({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId}),s=e.pollIntervalMs??5e3,n=e.timeoutMs??3e5,o=Date.now()+n;for(;Date.now()<o;){let t=await A(r,{headers:{authorization:de(e.auth.username,e.auth.access_key),accept:"application/json"}});if(!t.ok){await new Promise(l=>setTimeout(l,s));continue}let c=(await t.json()).data?.find(l=>l.code_name==="kane-cli-trigger");if(!c){await new Promise(l=>setTimeout(l,s));continue}let f=(c.status??"").toLowerCase();if(f==="in progress"||f==="in_progress"||f==="pending"){await new Promise(l=>setTimeout(l,s));continue}if(!c.url||c.url.length===0)throw new Error(`code-export status=${c.status} but no files returned`);ve(e.outDir,{recursive:!0});for(let l of c.url){let a=Pe(e.outDir,l.file_name),m=await A(l.file_url);if(!m.ok){e.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:l.file_name,status:m.status});continue}let b=await m.text();Re(a,b,"utf-8")}return e.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:e.outDir,file_count:c.url.length}),e.outDir}throw new Error("code-export polling timed out")}async function fe(e){return await Me(e),await De(e)}var T=v(X(),1);import{existsSync as $e,readFileSync as Ce}from"fs";var p=v(F(),1);function Ie(e){B(e);let r=M(e);if(!$e(r))return null;try{return JSON.parse(Ce(r,"utf8"))}catch{return{}}}function Fe(e){return e===null?"never_run":e.testcase_id?"synced":"local_only"}function Oe(e){return e==="synced"?"\u2601":e==="local_only"?"\u25A3":"\u25CB"}function Ae(e){return e==="tests-dir"?"\u2726":" "}function Le(e,r){return r==="all"?!0:r==="synced"?e.status==="synced":r==="local"?e.status==="local_only":r==="never_run"?e.status==="never_run":r==="cli"?e.source==="tests-dir":r==="hand"?e.source==="cwd":!0}var z=["all","synced","local","never_run","cli","hand"];function Be(e){let r=z.indexOf(e);return z[(r+1)%z.length]}function me({root:e,currentOrgId:r,onSelect:s,onCancel:n}){let[o,t]=(0,T.useState)([]),[i,c]=(0,T.useState)(null),[f,l]=(0,T.useState)(!0),[a,m]=(0,T.useState)("all");(0,T.useEffect)(()=>{(async()=>{try{let u=await U({root:e}),x=[];for(let y of u.results){let K=Ie(y.path);K?.org_id!==void 0&&K.org_id!==r||x.push({path:y.path,relPath:y.relPath,name:C(y.path),status:Fe(K),source:y.source,tags:W(y.path)})}t(x),l(!1)}catch(u){u instanceof R,c(u.message),l(!1)}})()},[e,r]);let b=(0,T.useMemo)(()=>o.filter(u=>Le(u,a)).map(u=>({id:u.path,label:`${Oe(u.status)} ${Ae(u.source)} ${u.relPath}${u.tags.length>0?` [${u.tags.join(", ")}]`:""}`})),[o,a]),w=(0,T.useMemo)(()=>Ne(a,o),[a,o]);if(i)return(0,p.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.red,paddingX:2,paddingY:1,children:[(0,p.jsx)(g,{color:h.red,bold:!0,children:"testmd"}),(0,p.jsx)(k,{marginTop:1,children:(0,p.jsx)(g,{color:h.red,children:i})})]});let E=a==="all"?"all":je(a);return(0,p.jsx)(Z,{title:`testmd \xB7 filter: ${E}`,items:b,loading:f,itemNoun:"tests",onSelect:u=>{let x=o.find(y=>y.path===u.id);x&&s(x)},onCancel:n,onTab:()=>m(u=>Be(u)),extraHint:"cycle filter",footer:w})}function je(e){return e==="synced"?"synced (\u2601)":e==="local"?"local (\u25A3)":e==="never_run"?"never run (\u25CB)":e==="cli"?"cli-generated (\u2726)":e==="hand"?"hand-written":"all"}function Ne(e,r){let s={synced:r.filter(o=>o.status==="synced").length,local:r.filter(o=>o.status==="local_only").length,never:r.filter(o=>o.status==="never_run").length,cli:r.filter(o=>o.source==="tests-dir").length,hand:r.filter(o=>o.source==="cwd").length},n=o=>o?h.orange:h.dim;return(0,p.jsxs)(k,{flexDirection:"column",children:[(0,p.jsx)(g,{color:h.dim,children:"legend:"}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="synced"),children:` \u2601 synced (${s.synced}) `}),(0,p.jsx)(g,{color:n(e==="local"),children:`\u25A3 local (${s.local}) `}),(0,p.jsx)(g,{color:n(e==="never_run"),children:`\u25CB never run (${s.never})`})]}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="cli"),children:` \u2726 cli-generated (${s.cli}) `}),(0,p.jsx)(g,{color:n(e==="hand"),children:` hand-written (${s.hand})`})]})]})}var I=v(X(),1);import{existsSync as Ue,readFileSync as We}from"fs";var d=v(F(),1);function ge({path:e,relPath:r,onAction:s,onBack:n,onView:o}){let[t,i]=(0,I.useState)(null),[c,f]=(0,I.useState)(!1);(0,I.useEffect)(()=>{let a=M(e);if(Ue(a))try{i(JSON.parse(We(a,"utf8")))}catch{i(null)}},[e]),Q((a,m)=>{if(m.escape){if(c){f(!1);return}n();return}if(c){a==="y"||a==="Y"?(f(!1),s("delete")):(a==="n"||a==="N")&&f(!1);return}a==="r"&&s("run"),a==="e"&&t?.testcase_id&&s("export"),a==="d"&&f(!0),a==="v"&&o&&o()});let l=({k:a,v:m})=>m?(0,d.jsxs)(g,{children:[(0,d.jsx)(g,{color:h.dim,children:a.padEnd(14)}),m]}):null;return(0,d.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.orange,paddingX:2,paddingY:1,children:[(0,d.jsx)(g,{color:h.orange,bold:!0,children:r}),(0,d.jsx)(k,{marginTop:1,flexDirection:"column",children:t?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l,{k:"test_id",v:t.test_id}),(0,d.jsx)(l,{k:"testcase_id",v:t.testcase_id}),(0,d.jsx)(l,{k:"project_id",v:t.project_id}),(0,d.jsx)(l,{k:"folder_id",v:t.folder_id}),(0,d.jsx)(l,{k:"org_id",v:t.org_id}),(0,d.jsx)(l,{k:"session_name",v:t.session_name}),(0,d.jsx)(l,{k:"commit_id",v:t.commit_id})]}):(0,d.jsx)(g,{color:h.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.red,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.dim,children:["[r] run [e] export",t?.testcase_id?"":" (need testcase_id)"," [d] delete",o?" [v] view":""," [Esc] back"]})})]})}function $(e){B(e);let r=M(e);if(!P(r))return null;try{return JSON.parse(Je(r,"utf8"))}catch{return null}}function he(e,r){return!e||e.org_id===void 0?!0:e.org_id===r}function J(e,r){return he(e,r)?null:(process.stderr.write(`error: this test belongs to org ${e.org_id}; you are logged in as org ${r}.
3
3
  Switch profiles with \`kane-cli profiles switch\` to act on it.
4
4
  `),2)}async function Ut(e={}){let r=!!process.stdin.isTTY&&!e.json,s=new O,n=new L;await V({isInteractive:r,creds:s,config:n});let o=s.getDefaultEnv()??"prod";try{let t=await N({creds:s,env:o,log:()=>{}});return t.resolvedCreds?.org_id===void 0?(process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),{ok:!1,code:2}):{ok:!0,orgId:String(t.resolvedCreds.org_id)}}catch(t){if(t instanceof j)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw t}}async function Wt(e,r){if(process.stdin.isTTY&&!e.json)return await Ye(r,e.root);let s=e.root??process.cwd(),n;try{n=await U({root:s,ignore:e.ignore})}catch(o){if(o instanceof R)return process.stderr.write(`error: ${o.message}
5
5
  `),2;throw o}for(let o of n.results){let t=$(o.path);if(!he(t,r))continue;let i={path:o.relPath.startsWith(".")?o.relPath:`./${o.relPath}`,name:C(o.path),has_meta:t!==null,source:o.source,synced:!!t?.testcase_id,tags:W(o.path)};t&&(t.test_id&&(i.test_id=t.test_id),t.testcase_id&&(i.testcase_id=t.testcase_id),t.org_id&&(i.org_id=t.org_id),t.project_id&&(i.project_id=t.project_id),t.folder_id&&(i.folder_id=t.folder_id)),process.stdout.write(JSON.stringify(i)+`
6
6
  `)}return n.aborted&&process.stderr.write(`warn: walk aborted (${n.abortReason}). Pass --root or --ignore to narrow.
7
- `),0}var _e=-1001,ye=-1002,we=-1003,_={action:null,path:null};function Xe(e,r){return _.action=e,_.path=r,e==="run"?_e:e==="export"?ye:we}function He({root:e,currentOrgId:r,onComplete:s}){let[n,o]=D.default.useState({kind:"list"});return D.default.useEffect(()=>{n.kind==="exiting"&&s(n.code)},[n,s]),n.kind==="list"?D.default.createElement(me,{root:e,currentOrgId:r,onSelect:t=>o({kind:"inspect",path:t.path,relPath:t.relPath}),onCancel:()=>o({kind:"exiting",code:0})}):n.kind==="inspect"?D.default.createElement(ge,{path:n.path,relPath:n.relPath,onAction:async t=>{o({kind:"exiting",code:Xe(t,n.path)})},onBack:()=>o({kind:"list"})}):null}async function Ye(e,r){let s=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),o=await new Promise(t=>{let{unmount:i,waitUntilExit:c}=n(D.default.createElement(He,{root:s,currentOrgId:e,onComplete:f=>{i(),t(f)}}),{stdout:process.stderr,exitOnCtrlC:!0});c().then(()=>t(0)).catch(()=>t(0))});if(o===_e&&_.path){let{runTestMdFile:t}=await import("./run-test-md-XOSCYVSS.js"),i=await t(_.path,{});return _.action=null,_.path=null,i}if(o===ye&&_.path){let t=await qe(_.path,{},e);return _.action=null,_.path=null,t}if(o===we&&_.path){let t=await Ve(_.path,!0,e);return _.action=null,_.path=null,t}return o}async function Jt(e,r){let s=G(e);if(!P(s))return process.stderr.write(`error: file not found: ${s}
7
+ `),0}var _e=-1001,ye=-1002,we=-1003,_={action:null,path:null};function Xe(e,r){return _.action=e,_.path=r,e==="run"?_e:e==="export"?ye:we}function He({root:e,currentOrgId:r,onComplete:s}){let[n,o]=D.default.useState({kind:"list"});return D.default.useEffect(()=>{n.kind==="exiting"&&s(n.code)},[n,s]),n.kind==="list"?D.default.createElement(me,{root:e,currentOrgId:r,onSelect:t=>o({kind:"inspect",path:t.path,relPath:t.relPath}),onCancel:()=>o({kind:"exiting",code:0})}):n.kind==="inspect"?D.default.createElement(ge,{path:n.path,relPath:n.relPath,onAction:async t=>{o({kind:"exiting",code:Xe(t,n.path)})},onBack:()=>o({kind:"list"})}):null}async function Ye(e,r){let s=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),o=await new Promise(t=>{let{unmount:i,waitUntilExit:c}=n(D.default.createElement(He,{root:s,currentOrgId:e,onComplete:f=>{i(),t(f)}}),{stdout:process.stderr,exitOnCtrlC:!0});c().then(()=>t(0)).catch(()=>t(0))});if(o===_e&&_.path){let{runTestMdFile:t}=await import("./run-test-md-DFNIGYB7.js"),i=await t(_.path,{});return _.action=null,_.path=null,i}if(o===ye&&_.path){let t=await qe(_.path,{},e);return _.action=null,_.path=null,t}if(o===we&&_.path){let t=await Ve(_.path,!0,e);return _.action=null,_.path=null,t}return o}async function Jt(e,r){let s=G(e);if(!P(s))return process.stderr.write(`error: file not found: ${s}
8
8
  `),2;let n=$(s),o=J(n,r);if(o!==null)return o;let t={path:s,name:C(s),has_meta:n!==null};return n&&(n.commit_id&&(t.commit_id=n.commit_id),n.test_id&&(t.test_id=n.test_id),n.testcase_id&&(t.testcase_id=n.testcase_id),n.project_id&&(t.project_id=n.project_id),n.folder_id&&(t.folder_id=n.folder_id),n.org_id&&(t.org_id=n.org_id),n.session_name&&(t.session_name=n.session_name)),process.stdout.write(JSON.stringify(t)+`
9
9
  `),0}async function Ve(e,r,s){let n=G(e);if(!P(n))return process.stderr.write(`error: file not found: ${n}
10
10
  `),2;let o=$(n),t=J(o,s);if(t!==null)return t;if(!r)return process.stderr.write(`error: refusing to delete without --yes.
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{y as o}from"./chunk-MMPFU2YC.js";import{a as m}from"./chunk-HCBYKLMW.js";import{a as e,b as i}from"./chunk-C44QQJR4.js";import{e as d}from"./chunk-UR6MHSHU.js";var r=d(m(),1),s={default:o.muted,error:o.red,success:o.green,info:o.orange,warning:o.orange};function h({title:t,titleColor:a,borderColor:l,variant:n="default",children:c,width:u,paddingX:x=2,paddingY:g=0,marginBottom:f=0}){let p=l??s[n],B=a??(n==="default"?o.orange:s[n]);return(0,r.jsxs)(e,{flexDirection:"column",marginBottom:f,children:[t&&(0,r.jsx)(e,{marginBottom:0,children:(0,r.jsxs)(i,{color:B,bold:!0,children:[" ",t]})}),(0,r.jsx)(e,{borderStyle:"round",borderColor:p,flexDirection:"column",paddingX:x,paddingY:g,width:u,children:c})]})}function k({label:t,value:a,labelColor:l=o.dim,valueColor:n,labelWidth:c=14}){return(0,r.jsxs)(e,{children:[(0,r.jsx)(e,{width:c,flexShrink:0,children:(0,r.jsx)(i,{color:l,children:t})}),(0,r.jsx)(e,{flexShrink:1,children:(0,r.jsx)(i,{color:n,wrap:"wrap",children:a})})]})}function I({label:t}){return(0,r.jsx)(e,{marginTop:1,marginBottom:0,children:(0,r.jsx)(i,{bold:!0,children:t})})}export{h as a,k as b,I as c};
2
+ import{y as o}from"./chunk-C4G7RVJ6.js";import{a as m}from"./chunk-HCBYKLMW.js";import{a as e,b as i}from"./chunk-C44QQJR4.js";import{e as d}from"./chunk-UR6MHSHU.js";var r=d(m(),1),s={default:o.muted,error:o.red,success:o.green,info:o.orange,warning:o.orange};function h({title:t,titleColor:a,borderColor:l,variant:n="default",children:c,width:u,paddingX:x=2,paddingY:g=0,marginBottom:f=0}){let p=l??s[n],B=a??(n==="default"?o.orange:s[n]);return(0,r.jsxs)(e,{flexDirection:"column",marginBottom:f,children:[t&&(0,r.jsx)(e,{marginBottom:0,children:(0,r.jsxs)(i,{color:B,bold:!0,children:[" ",t]})}),(0,r.jsx)(e,{borderStyle:"round",borderColor:p,flexDirection:"column",paddingX:x,paddingY:g,width:u,children:c})]})}function k({label:t,value:a,labelColor:l=o.dim,valueColor:n,labelWidth:c=14}){return(0,r.jsxs)(e,{children:[(0,r.jsx)(e,{width:c,flexShrink:0,children:(0,r.jsx)(i,{color:l,children:t})}),(0,r.jsx)(e,{flexShrink:1,children:(0,r.jsx)(i,{color:n,wrap:"wrap",children:a})})]})}function I({label:t}){return(0,r.jsx)(e,{marginTop:1,marginBottom:0,children:(0,r.jsx)(i,{bold:!0,children:t})})}export{h as a,k as b,I as c};
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as V,d as I,h as L}from"./chunk-M7WQM4UA.js";var N="ckpt/1";var H="checkpoints",P="base.json",y=t=>`delta-${t}.json`,w=t=>`full-${t}.json`,oe=["turn","ask","final"],ae=["extract","design","walk"];function _(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function x(t){return Array.isArray(t)&&t.every(n=>typeof n=="string")}function B(t){let n=[],e=(s,a)=>{s||n.push(a)};if(!_(t))return{ok:!1,errors:["record: not an object"]};e(t.schema===N,`schema: expected "${N}"`);let r=t.kind;if(r==="base")e(typeof t.sid=="string"&&t.sid.length>0,"base.sid: non-empty string"),e(typeof t.verb=="string"&&ae.includes(t.verb),"base.verb: extract|design|walk"),e(typeof t.mode=="string","base.mode: string"),e(typeof t.created_at=="string","base.created_at: string"),e(_(t.run_config),"base.run_config: object"),_(t.run_config)&&e(!("resume"in t.run_config),"base.run_config: must not carry `resume`"),e(typeof t.conv_source=="string",'base.conv_source: string ("" when absent)'),e(typeof t.store_watermark=="string"||t.store_watermark===null,"base.store_watermark: string | null (null = genesis)");else if(r==="delta"||r==="full"){e(typeof t.sid=="string"&&t.sid.length>0,"delta.sid: non-empty string"),e(Number.isInteger(t.seq)&&t.seq>=1,"delta.seq: integer \u2265 1"),e(Number.isInteger(t.turn_id),"delta.turn_id: integer"),e(typeof t.at=="string"&&oe.includes(t.at),"delta.at: turn|ask|final"),e(typeof t.ts=="string","delta.ts: string");let s=t.agent;if(_(s)){e(Number.isInteger(s.agent_state_schema),"agent.agent_state_schema: integer"),e(Array.isArray(s.delta_items),"agent.delta_items: array"),e(_(s.binding),"agent.binding: object");let o=s.usage_total;e(_(o)&&typeof o.input_tokens=="number"&&typeof o.output_tokens=="number"&&typeof o.credits=="number","agent.usage_total: {input_tokens, output_tokens, credits} numbers"),s.base_fingerprint!==void 0&&e(typeof s.base_fingerprint=="string","agent.base_fingerprint: string when present"),r==="full"&&e(typeof s.base_fingerprint=="string","full: agent.base_fingerprint required")}else n.push("delta.agent: object");let a=t.kane;if(_(a)){e(x(a.applied_events),"kane.applied_events: string[]"),e(x(a.held_receipts),"kane.held_receipts: string[]");let o=a.pending;e(_(o)&&Array.isArray(o.questions)&&Array.isArray(o.proposals),"kane.pending: {questions[], proposals[]}"),e(Array.isArray(a.parent_asks),"kane.parent_asks: array"),e(_(a.read_basis),"kane.read_basis: object");let p=a.corpus_cursor;e(_(p)&&x(p.remaining),"kane.corpus_cursor: {remaining: string[]}"),e(typeof a.store_watermark=="string"||a.store_watermark===null,"kane.store_watermark: string | null (null = genesis)"),a.ingest_registry!==void 0&&e(Array.isArray(a.ingest_registry)&&a.ingest_registry.every(i=>_(i)&&typeof i.ref=="string"&&typeof i.entered_at=="string"),"kane.ingest_registry: [{ref, entered_at, consumed?}]"),a.ingest_schedule!==void 0&&e(Array.isArray(a.ingest_schedule)&&a.ingest_schedule.every(i=>_(i)&&typeof i.source_id=="string"&&typeof i.cid=="string"&&["pending","done","skipped"].includes(String(i.status))),"kane.ingest_schedule: [{source_id, cid, status}]")}else n.push("delta.kane: object")}else n.push('kind: expected "base" | "delta" | "full"');return{ok:n.length===0,errors:n}}import{closeSync as U,existsSync as Z,fsyncSync as Y,mkdirSync as ee,openSync as W,readFileSync as te,readdirSync as ne,renameSync as ce,rmSync as K,statSync as pe,writeFileSync as de}from"fs";import{join as m}from"path";var ue=3,we=600*1e3,A=class extends Error{constructor(e,r){super(`${e}: ${r}`);this.code=e}},S=class extends Error{constructor(n){super(`CHECKPOINT_WRITE: ${n}`)}},j=class extends S{},E=(t,n)=>m(t,"sessions",n,H),le=(t,n)=>m(t,"sessions",n,"state.json");function F(t,n,e){let r=`${t}.tmp-${process.pid}`,s=W(r,"w");try{de(s,n,{mode:384}),Y(s)}finally{U(s)}ce(r,t);try{let a=W(e,"r");Y(a),U(a)}catch{}}var ge=new Set,J=new Set;function G(t){let n=0;try{for(let e of ne(t))try{n+=pe(m(t,e)).size}catch{}}catch{return 0}return n}function z(t,n,e){for(let r of ge)try{r(t,n,e)}catch{}}var fe=new Set;function Se(t,n=new Date){for(let e of fe)try{e(t,n)}catch{}}function Ae(t,n,e){let r=E(t,n);ee(r,{recursive:!0});let s=m(r,P);Z(s)||F(s,JSON.stringify(e)+`
3
+ `,r)}function _e(t,n){let e;try{e=JSON.parse(n)}catch(s){throw new A("CHECKPOINT_CORRUPT",`${t}: ${s.message}`)}let r=B(e);if(!r.ok)throw new A("CHECKPOINT_CORRUPT",`${t}: ${r.errors.join("; ")}`);return e}function M(t,n,e){let r=m(E(t,n),e);return _e(e,te(r,"utf8"))}function re(t,n){let e=[],r=[],s=[];try{s=ne(E(t,n))}catch{return{deltas:e,fulls:r}}for(let a of s){let o=/^delta-(\d+)\.json$/.exec(a);o&&e.push(Number(o[1]));let p=/^full-(\d+)\.json$/.exec(a);p&&r.push(Number(p[1]))}return e.sort((a,o)=>a-o),r.sort((a,o)=>a-o),{deltas:e,fulls:r}}function me(t,n){try{return JSON.parse(te(le(t,n),"utf8")).checkpoint??null}catch{return null}}function se(t,n,e){let r=[],s,a=0;if(e.full_seq!==null){let i=M(t,n,w(e.full_seq));r.push(i),s=i.agent.base_fingerprint,a=e.full_seq}let o;for(let i=a+1;i<=e.seq;i++)try{let d=M(t,n,y(i));r.push(d),!s&&d.agent.base_fingerprint&&(s=d.agent.base_fingerprint)}catch(d){if(d instanceof A&&d.code==="CHECKPOINT_CORRUPT"){o={resumableAt:i-1,turnsLost:e.seq-(i-1)};break}throw d}if(r.length===0)throw new A("CHECKPOINT_CORRUPT",`${n}: pointer names seq ${e.seq} but no chain records exist`);return{items:r.flatMap(i=>i.agent.delta_items),last:r[r.length-1],base_fingerprint:s,fallback:o}}function Re(t,n,e,r,s){let a=performance.now(),o=n.state.sid,p=n.state.checkpoint;if(p){if(e.seq<p.seq)throw new S(`seq regression: got ${e.seq}, pointer at ${p.seq} (${o})`);if(e.seq===p.seq){if(e.turn_id===p.turn_id&&e.at===p.at)return p;throw new S(`seq regression: seq ${e.seq} re-used with different metadata (turn ${e.turn_id}/${p.turn_id}, at ${e.at}/${p.at}) (${o})`)}}let i=E(t,o);ee(i,{recursive:!0});let d=(s?.now??(()=>new Date))(),b=d.toISOString(),l={schema:N,kind:"delta",sid:o,seq:e.seq,turn_id:e.turn_id,at:e.at,ts:b,agent:{agent_state_schema:e.agent_state_schema,delta_items:e.delta_items,binding:e.binding,usage_total:e.usage_total,...e.base_fingerprint!==void 0?{base_fingerprint:e.base_fingerprint}:{}},kane:r},k=Math.max(1,s?.retries??ue),g=JSON.stringify(l)+`
4
+ `,O=!1;Buffer.byteLength(g)>524288&&!J.has(o)&&(J.add(o),O=!0,s?.onSoftCap?.("note: this session's checkpoints are getting large \u2014 long pasted inputs are kept verbatim; consider ingesting big documents as sources instead"));let R=!1,v;for(let c=0;c<k&&!R;c++)try{F(m(i,y(e.seq)),g,i),R=!0}catch(u){v=u}if(!R)throw new S(`delta-${e.seq} write failed after ${k} attempts: ${v?.message??"unknown"} (${o})`);let h=p?.full_seq??null,$=G(i)>67108864;if(e.seq%25===0||$){let c=[],u=e.base_fingerprint;if(p){let C=se(t,o,p);c=C.items,u=u??C.base_fingerprint}if(c=[...c,...e.delta_items],!u)throw new S(`compaction at seq ${e.seq}: no base_fingerprint anywhere in the chain (${o})`);let f={...l,kind:"full",agent:{...l.agent,delta_items:c,base_fingerprint:u}};F(m(i,w(e.seq)),JSON.stringify(f)+`
5
+ `,i),h=e.seq}let q={seq:e.seq,turn_id:e.turn_id,at:e.at,ts:b,full_seq:h};if(n.save({checkpoint:q}),h===e.seq){let{deltas:c,fulls:u}=re(t,o);for(let f of c)f<=h&&K(m(i,y(f)),{force:!0});for(let f of u)f<h&&K(m(i,w(f)),{force:!0})}let T=G(i);if($&&T>67108864)throw z(o,q,d),new j(`session ${o} checkpoint dir is ${Math.round(T/(1024*1024))}MB (cap ${Math.round(67108864/(1024*1024))}MB) even after compaction \u2014 pausing; resume in a fresh session or trim the conversation`);return z(o,q,d),s?.onStat?.({sid:o,seq:e.seq,persist_ms:performance.now()-a,bytes:Buffer.byteLength(g),dir_bytes:T,compacted:h===e.seq,soft_warned:O}),q}function Pe(t,n,e){let r=e?._readPointer??(()=>me(t,n)),s=m(E(t,n),P);if(!Z(s))throw new A("CHECKPOINT_MISSING",`${n}: no ${P} \u2014 not a checkpoint session`);let a=M(t,n,P),o=i=>{let{deltas:d,fulls:b}=re(t,n);if(!i){let g=[...d.map(y),...b.map(w)];return{base:a,agent:null,kane:null,pointer:null,orphans:g}}let l=se(t,n,i),k=[...d.filter(g=>g>i.seq).map(y),...b.filter(g=>g>i.seq).map(w)];return{base:a,agent:{delta_items:l.items,binding:l.last.agent.binding,base_fingerprint:l.base_fingerprint,agent_state_schema:l.last.agent.agent_state_schema},kane:l.last.kane,pointer:i,orphans:k,...l.fallback?{fallback:l.fallback}:{}}},p=r();try{return o(p)}catch(i){if(!(i.code==="ENOENT"))throw i;return o(r())}}function Ee(t,n){let e=[];for(let r of I(t).records)if(r.sid===n)for(let s of r.event_ids??[])e.push(s);return e}function ve(t,n,e,r,s){let a=s.verb??"extract",o=I(t),p=0;if(e.store_watermark!==null){let c=o.hashes.indexOf(e.store_watermark);if(c===-1)throw new V(`watermark not in chain: ${e.store_watermark} names no record in this store (rebuilt or foreign?) \u2014 re-ground the session or abandon it`);p=c+1}let i=L(t,{seq:p,hash:e.store_watermark}).records,d=o.records.filter(c=>c.sid===n).map(c=>c.seq),b=c=>d.filter(u=>u<=c.seq).length,l=new Set(e.applied_events),k=0,g=[];for(let c of i){if(typeof c.sid!="string"){k+=1;continue}if(c.sid===n){if((c.event_ids??[]).length===0){k+=1;continue}g.push(c)}}k>0&&s.onNote?.(`reconcile: skipped ${k} store record(s) not attributable to this session (pre-sid grace)`);let O=s.ownActors??["extract-agent","design-agent","owner"],R=[],v=[];for(let c of g){let u=(c.event_ids??[]).filter(ie=>!l.has(ie));if(u.length===0)continue;v.push(...u);let f;try{f=s.composeReceipt(c,r,{verb:a,commitN:b(c),...s.ucRef?{ucRef:s.ucRef}:{}}).text}catch{f=`commit ${u[0]} at ${c.ts} \u2014 details unavailable (graph moved since)`}let C=c.review?.[0]?.by;C?.id&&!O.includes(C.id)&&(f+=`
6
+ (committed by ${C.kind}:${C.id} while this session was suspended)`),R.push(f)}let h=e.pending.proposals??[],$=h.filter(c=>typeof c.event_id=="string"&&r.appliedEvents.has(c.event_id)),T=h.filter(c=>!(typeof c.event_id=="string"&&r.appliedEvents.has(c.event_id))).filter(c=>c.state==="accepted-pending-commit");return{redeliverReceipts:R,recommit:T,prunedPending:$,newlyApplied:v,skippedNoSid:k}}function qe(t,n,e){let r=E(t,n);for(let s of e)/^(?:delta|full)-\d+\.json$/.test(s)&&K(m(r,s),{force:!0})}export{N as a,H as b,P as c,Se as d,Ae as e,Re as f,Pe as g,Ee as h,ve as i,qe as j};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{g as h}from"./chunk-AAONIIQV.js";import{d as l}from"./chunk-M7WQM4UA.js";import{b as u}from"./chunk-WWNSD6FA.js";import{d as f}from"./chunk-5YPBPZUR.js";import{existsSync as w,readFileSync as _,readdirSync as R}from"fs";import{join as p}from"path";function g(i,r){let{records:t}=l(i),o=new Set;for(let e of t)for(let n of e.review)n.resolution!=="pending"&&o.add(n.id);let s=[],d=new Set;for(let e=t.length-1;e>=0;e--)for(let n of t[e].dedup_hits??[]){if(n.new_cid===void 0)continue;let c=`${n.new_cid}|${n.candidate_cid}`;d.has(c)||(d.add(c),!o.has(n.new_cid)&&(r.superseded.has(n.new_cid)||r.superseded.has(n.candidate_cid)||r.trust.get(n.new_cid)==="derived"&&s.push({new_cid:n.new_cid,candidate_cid:n.candidate_cid,score:n.score,scorer:n.scorer})))}return s}var a=(i,r)=>i.displayNameOf(r)??r.slice(0,19);function m(i,r){return{design_children:i.edgesInto(r).filter(o=>(o.type==="belongs_to"||o.type==="scoped_to")&&!i.superseded.has(o.src)).length}}function v(i,r){let{records:t}=l(i),o=new Set,s=new Map;for(let e of t)for(let n of e.review)n.kind==="pending_archive"?s.set(n.id,n.reason):n.resolution!=="pending"&&o.add(n.id);let d=new Map;for(let[e,n]of s)r.superseded.has(e)||r.trust.get(e)!=="derived"||o.has(e)||d.set(e,n);return{all:s,live:d}}function y(i,r){let t=[],o=new Set;for(let e of g(i.contextDir,r)){o.add(e.new_cid);let n=e.scorer==="lexical_fallback"?" (lexical fallback \u2014 the probe ran degraded)":"";t.push({kind:"PAIR",ref:a(r,e.new_cid),title:String(r.getNode(e.new_cid)?.content.title??e.new_cid.slice(0,12)),why:`possible duplicate of ${a(r,e.candidate_cid)} \u2014 score ${e.score}${n}`,pair:{candidate_cid:e.candidate_cid,candidate_ref:a(r,e.candidate_cid),score:e.score,scorer:e.scorer}})}let{all:s,live:d}=v(i.contextDir,r);for(let[e,n]of d)t.push({kind:"REVIEW",ref:a(r,e),title:String(r.getNode(e)?.content.title??e.slice(0,12)),why:`archive held for interactive confirmation${n?` \u2014 ${n}`:""}`,held:!0,impact:m(r,e)});for(let e of k(i.contextDir))t.push({kind:"MODIFY_HELD",ref:`${e.sid}:${e.tempRef}`,title:String(e.content.title??e.tempRef),why:`${e.rationale} \u2014 held by paused/dead session ${e.sid}`,heldPayload:e});for(let{cid:e,content:n}of r.byLabel(f.USECASE))r.superseded.has(e)||r.trust.get(e)!=="derived"||o.has(e)||s.has(e)||t.push({kind:"REVIEW",ref:a(r,e),title:String(n.title??e.slice(0,12)),why:"unreviewed \u2014 approve, archive, or defer",impact:m(r,e)});return t}function F(i,r){let t={REVIEW:0,PAIR:0,MODIFY_HELD:0};for(let o of y(i,r))t[o.kind]++;return t}function b(i,r){try{let t=JSON.parse(_(p(i,"sessions",r,".lock"),"utf8"));return typeof t.pid=="number"&&u(t.pid)}catch{return!1}}function k(i){let r=[],t=p(i,"sessions");if(!w(t))return r;let o=[];try{o=R(t)}catch{return r}for(let s of o){if(!w(p(t,s,"state.json"))||b(i,s))continue;let d=[],e=!1;try{let c=h(i,s).kane;c?.pending?.proposals?.length&&(d=c.pending.proposals,e=!0)}catch{e=!1}if(!e)try{d=JSON.parse(_(p(t,s,"state.json"),"utf8")).pending?.proposals??[]}catch{continue}for(let n of d)r.push({sid:s,tempRef:String(n.tempRef??n.temp_ref??"held"),...typeof n.event_id=="string"?{event_id:n.event_id}:{},label:String(n.label??"usecase"),content:n.content??{},rationale:String(n.rationale??"held payload")})}return r}export{m as a,v as b,y as c,F as d};
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as b,b as $}from"./chunk-3STZLM5J.js";function C(n){return n.replace(/\n$/,"").split(`
3
+ `).map((l,o)=>`${String(o+1).padStart(4,"0")}| ${l}`).join(`
4
+ `)}function S(n,d,l){if(!n.quote)return n;let o=$(l,n.anchor);if(o!==null&&o.includes(n.quote))return n;let a=d.indexOf(n.quote);if(a===-1||d.indexOf(n.quote,a+1)!==-1)return"gone-or-ambiguous";let t=d.slice(0,a).split(`
5
+ `).length,r=t+n.quote.replace(/\n$/,"").split(`
6
+ `).length-1;return{...n,anchor:`L${t}-L${r}`}}function P(n,d){let l=d.replace(/\n$/,""),o=C(d),a=t=>{if(!t?.quote)return t;let r=S(t,l,o);return r==="gone-or-ambiguous"?t:r};return{...n,use_cases:n.use_cases.map(t=>({...t,cite:a(t.cite)??t.cite,...t.criteria?{criteria:t.criteria.map(r=>({...r,cite:a(r.cite)??r.cite}))}:{},...t.updated?.criteria?{updated:{...t.updated,criteria:t.updated.criteria.map(r=>"op"in r?r.op==="set"?{...r,cite:a(r.cite)??r.cite}:r:{...r,cite:a(r.cite)??r.cite})}}:{}}))}}function x(n,d,l){let o=[],a=d.mediaOf(n.source.source_cid).images??[],t=l!==void 0?d.mediaOf(l).images??[]:null,r=(e,i)=>{let f=e?b(e.anchor):null;if(!e||f?.kind!=="img-part")return e;if(t===null)return o.push({code:"HELD_CITES_STALE",detail:`${i}: this plan predates image-part staging \u2014 ${e.anchor} cannot be verified against the version it staged under; re-run kane-cli maintain reconcile to re-stage`}),e;let c=t.find(s=>s.ref===f.ref)?.blob;if(c===void 0)return o.push({code:"HELD_CITES_STALE",detail:`${i}: ${e.anchor} names no decodable image of the staged version \u2014 re-run kane-cli maintain reconcile to re-stage`}),e;if(a.some(s=>s.ref===f.ref&&s.blob===c))return e;let u=a.filter(s=>s.blob===c),g=u.filter(s=>s.delivery==="selected");if(g.length===1)return{...e,anchor:`img#${g[0].ref}`};if(u.length===1)return{...e,anchor:`img#${u[0].ref}`};if(u.length===0){let s=t.find(p=>p.ref===f.ref)?.appearance;if(s!==void 0){let p=a.filter(m=>m.appearance===s),h=p.filter(m=>m.delivery==="selected");if(h.length===1)return{...e,anchor:`img#${h[0].ref}`};if(p.length===1)return{...e,anchor:`img#${p[0].ref}`}}}return o.push({code:"HELD_CITES_STALE",detail:`${i}: the image behind ${e.anchor} is ${u.length===0?"no longer in":"ambiguous in"} the current head \u2014 re-run kane-cli maintain reconcile to re-stage`}),e};return{proposal:{...n,use_cases:n.use_cases.map(e=>({...e,cite:r(e.cite,e.temp_ref)??e.cite,...e.criteria?{criteria:e.criteria.map(i=>({...i,cite:r(i.cite,e.temp_ref)??i.cite}))}:{},...e.updated?.criteria?{updated:{...e.updated,criteria:e.updated.criteria.map(i=>"op"in i?i.op==="set"?{...i,cite:r(i.cite,e.temp_ref)??i.cite}:i:{...i,cite:r(i.cite,e.temp_ref)??i.cite})}}:{}}))},errors:o.length>0?o:null}}export{C as a,P as b,x as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as u,b as x}from"./chunk-QJIJC3KC.js";import{y as m}from"./chunk-MMPFU2YC.js";import{a as f}from"./chunk-HCBYKLMW.js";import{a as r,b as i}from"./chunk-C44QQJR4.js";import{e as n}from"./chunk-UR6MHSHU.js";var e=n(f(),1);function C({title:B,titleColor:c,borderColor:d,variant:p,rows:s,footer:t,labelWidth:l=14,marginBottom:b=1}){return(0,e.jsxs)(u,{title:B,titleColor:c,borderColor:d,variant:p,marginBottom:b,children:[s.map((o,a)=>typeof o.value=="string"?(0,e.jsx)(x,{label:o.label,value:o.value,valueColor:o.valueColor,labelWidth:l},`${o.label}-${a}`):(0,e.jsxs)(r,{children:[(0,e.jsx)(r,{width:l,children:(0,e.jsx)(i,{color:m.dim,children:o.label})}),o.value]},`${o.label}-${a}`)),t&&(0,e.jsx)(r,{marginTop:1,children:t})]})}export{C as a};
2
+ import{a as u,b as x}from"./chunk-73C4PRYU.js";import{y as m}from"./chunk-C4G7RVJ6.js";import{a as f}from"./chunk-HCBYKLMW.js";import{a as r,b as i}from"./chunk-C44QQJR4.js";import{e as n}from"./chunk-UR6MHSHU.js";var e=n(f(),1);function C({title:B,titleColor:c,borderColor:d,variant:p,rows:s,footer:t,labelWidth:l=14,marginBottom:b=1}){return(0,e.jsxs)(u,{title:B,titleColor:c,borderColor:d,variant:p,marginBottom:b,children:[s.map((o,a)=>typeof o.value=="string"?(0,e.jsx)(x,{label:o.label,value:o.value,valueColor:o.valueColor,labelWidth:l},`${o.label}-${a}`):(0,e.jsxs)(r,{children:[(0,e.jsx)(r,{width:l,children:(0,e.jsx)(i,{color:m.dim,children:o.label})}),o.value]},`${o.label}-${a}`)),t&&(0,e.jsx)(r,{marginTop:1,children:t})]})}export{C as a};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b}from"./chunk-4CJ55EUY.js";import{c as k}from"./chunk-RFHMDQXZ.js";import{a as C}from"./chunk-LHDNJJGE.js";import{q as m,r as u,s as f,t as x,u as y}from"./chunk-MMPFU2YC.js";import{createServer as S}from"http";import{randomBytes as A}from"crypto";import{URL as L}from"url";var P=class{profile;environment;creds;oauth;constructor(r="default",o="prod",e){this.profile=r,this.environment=o,this.creds=e??new C,this.oauth=new b(o)}async login(){let{server:r,port:o}=await this.startCallbackServer(),e=y(o);try{let t=this.creds.loadClient(this.profile,this.environment),i=t?.redirect_uris;(!t||!i?.includes(e))&&(t=await this.oauth.registerClient(e),this.creds.saveClient(this.profile,this.environment,t));let c=t.client_id,[h,d]=b.generatePkce(),a=A(32).toString("hex"),n=this.oauth.buildAuthorizationUrl(c,d,a,e),l=await this.waitForCallback(r,o,n,a);if(!l)throw new Error("Login cancelled or timed out");let p=await this.oauth.exchangeCode(l,c,h,e),g={access_token:p.access_token,refresh_token:p.refresh_token,expires_at:Math.floor(Date.now()/1e3)+p.expires_in,scope:p.scope??"*"};return this.creds.saveCredentials(this.profile,this.environment,g),this.creds.setActiveProfile(this.profile),g}catch(t){throw r.close(),t}}startCallbackServer(){return new Promise((r,o)=>{let e=u,t=()=>{let i=S();i.on("error",c=>{c.code==="EADDRINUSE"&&e<f?(e++,t()):o(new Error(`Failed to start callback server: ${c.message}. Ports ${u}-${f} are all in use.`))}),i.listen(e,m,()=>{r({server:i,port:e})})};t()})}waitForCallback(r,o,e,t){return new Promise(i=>{let c=!1,h=setTimeout(()=>d(null),12e4),d=a=>{c||(c=!0,clearTimeout(h),r.close(),i(a))};r.on("request",(a,n)=>{let l=new L(a.url??"/",`http://${m}:${o}`);if(l.pathname!==x){n.writeHead(404),n.end();return}let p=l.searchParams.get("state"),g=l.searchParams.get("code");if(l.searchParams.get("error")){n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"error",title:"Login failed",message:"We couldn't complete the sign-in. You can close this tab and try again from your terminal."})),d(null);return}if(p!==t){n.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"error",title:"Invalid state",message:"The sign-in response didn't match this session. Please return to your terminal and try again."})),d(null);return}n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"success",title:"You're signed in",message:"Head back to your terminal \u2014 KaneAI is ready when you are.",autoClose:!0})),d(g)}),k(e).catch(a=>{let n=a instanceof Error?a.message:String(a);process.stderr.write(`[auth] Could not open browser: ${n}
2
+ import{a as b}from"./chunk-KT6G7AF2.js";import{c as k}from"./chunk-RFHMDQXZ.js";import{a as C}from"./chunk-F6ZOJXYU.js";import{q as m,r as u,s as f,t as x,u as y}from"./chunk-C4G7RVJ6.js";import{createServer as S}from"http";import{randomBytes as A}from"crypto";import{URL as L}from"url";var P=class{profile;environment;creds;oauth;constructor(r="default",o="prod",e){this.profile=r,this.environment=o,this.creds=e??new C,this.oauth=new b(o)}async login(){let{server:r,port:o}=await this.startCallbackServer(),e=y(o);try{let t=this.creds.loadClient(this.profile,this.environment),i=t?.redirect_uris;(!t||!i?.includes(e))&&(t=await this.oauth.registerClient(e),this.creds.saveClient(this.profile,this.environment,t));let c=t.client_id,[h,d]=b.generatePkce(),a=A(32).toString("hex"),n=this.oauth.buildAuthorizationUrl(c,d,a,e),l=await this.waitForCallback(r,o,n,a);if(!l)throw new Error("Login cancelled or timed out");let p=await this.oauth.exchangeCode(l,c,h,e),g={access_token:p.access_token,refresh_token:p.refresh_token,expires_at:Math.floor(Date.now()/1e3)+p.expires_in,scope:p.scope??"*"};return this.creds.saveCredentials(this.profile,this.environment,g),this.creds.setActiveProfile(this.profile),g}catch(t){throw r.close(),t}}startCallbackServer(){return new Promise((r,o)=>{let e=u,t=()=>{let i=S();i.on("error",c=>{c.code==="EADDRINUSE"&&e<f?(e++,t()):o(new Error(`Failed to start callback server: ${c.message}. Ports ${u}-${f} are all in use.`))}),i.listen(e,m,()=>{r({server:i,port:e})})};t()})}waitForCallback(r,o,e,t){return new Promise(i=>{let c=!1,h=setTimeout(()=>d(null),12e4),d=a=>{c||(c=!0,clearTimeout(h),r.close(),i(a))};r.on("request",(a,n)=>{let l=new L(a.url??"/",`http://${m}:${o}`);if(l.pathname!==x){n.writeHead(404),n.end();return}let p=l.searchParams.get("state"),g=l.searchParams.get("code");if(l.searchParams.get("error")){n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"error",title:"Login failed",message:"We couldn't complete the sign-in. You can close this tab and try again from your terminal."})),d(null);return}if(p!==t){n.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"error",title:"Invalid state",message:"The sign-in response didn't match this session. Please return to your terminal and try again."})),d(null);return}n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"success",title:"You're signed in",message:"Head back to your terminal \u2014 KaneAI is ready when you are.",autoClose:!0})),d(g)}),k(e).catch(a=>{let n=a instanceof Error?a.message:String(a);process.stderr.write(`[auth] Could not open browser: ${n}
3
3
  Please open this URL manually: ${e}
4
4
  `)})})}};function v(s){let r=s.state==="success",o=r?"#22c55e":"#ef4444",e=r?"rgba(34, 197, 94, 0.12)":"rgba(239, 68, 68, 0.12)",t=r?'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7"/></svg>':'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>',i=s.autoClose?"<script>setTimeout(function(){try{window.close();}catch(e){}}, 1500);</script>":"";return`<!doctype html>
5
5
  <html lang="en">
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ function c(e,r){let n=new Map;for(let[o,s]of e.superseded)typeof s=="string"&&n.set(s,o);let t=r,i=new Set;for(;n.has(t)&&!i.has(t);)i.add(t),t=n.get(t);return t}function a(e,r){let n=e.resolve(r);if(n===null)return null;let t=e.designGenerationOf.get(c(e,n.cid));if(t===void 0)return null;let i=e.tipOf(n.cid),o=!e.superseded.has(i);return{gen:t.gen,live:o,minted_at_seq:t.seq}}function u(e,r,n){let t=e.resolve(r);if(t===null)return{error:{code:"UNKNOWN_REF",detail:`'${r}' names no use-case in this context`}};let i=c(e,t.cid),o=e.designGenerationOf.get(i);if(o===void 0)return{uc_root:i,next_gen:1,expected_prev_gen:null,...n.because?{because:n.because}:{}};let s=a(e,r);return s!==null&&s.live&&!n.force?{error:{code:"GENERATION_LIVE",detail:`${r} already has a live design generation (gen ${o.gen}) \u2014 pass --force with --because to supersede it`}}:s!==null&&s.live&&n.force&&!n.because?{error:{code:"MISSING_BECAUSE",detail:`superseding the live generation of ${r} requires --because <reason>`}}:{uc_root:i,next_gen:o.gen+1,expected_prev_gen:o.gen,...n.because?{because:n.because}:{}}}function d(e,r){let n=e.designGenerationOf.get(r.uc_root)?.gen??null;return n!==r.expected_prev_gen?{code:"GENERATION_MOVED",detail:`design generation of ${r.uc_root.slice(0,12)} moved (expected ${String(r.expected_prev_gen)}, found ${String(n)}) \u2014 another session finalized; re-open and re-ground`}:null}function l(e,r,n){return{uc_root:e.uc_root,uc_cid:r,generation:e.next_gen,supersedes_generation:e.expected_prev_gen,...e.because?{because:e.because}:{},by:n}}export{c as a,a as b,u as c,d,l as e};
@@ -0,0 +1,11 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{g as G}from"./chunk-EV3EHXEI.js";import{a as q,b as X,k as Z}from"./chunk-F7WKDMX7.js";import{a as z}from"./chunk-VOHQA2SP.js";import{c as U}from"./chunk-ZLCZDAEX.js";import{a as M,b as Y,f as V,g as H,h as F,i as K}from"./chunk-SE6WNCYU.js";import{b as B}from"./chunk-NVGBE2DR.js";import{a as D}from"./chunk-CH273NAE.js";import{a as O}from"./chunk-GW5DWAXY.js";import{x as k}from"./chunk-C4G7RVJ6.js";import{existsSync as Te}from"fs";import{basename as $e}from"path";import{appendFileSync as de,mkdirSync as le}from"fs";import{homedir as me}from"os";import{dirname as fe,join as pe}from"path";function W(t,r){let e=/^(DOCX_[A-Z_]+):/.exec(r)?.[1];if(e)try{let o=process.env.KANE_CONTEXT_REFUSAL_LOG??pe(me(),".testmuai","kaneai","context-refusals.log");le(fe(o),{recursive:!0}),de(o,`${new Date().toISOString()} ${e} ${t}
3
+ `)}catch{}}var y=class extends Error{constructor(e,o){super(o);this.code=e;this.name="LisError"}};function ge(t){let r=t.TESTMUAI_ENV==="stage"?"stage":"prod";return`${k[r].shareApiBaseUrl}/lis/api/v1`}function he(t){let r=t.env??process.env,e=t.auth?.TESTMUAI_BASIC_AUTH||r.TESTMUAI_BASIC_AUTH;if(e)return{authorization:`Basic ${e}`};let o=t.auth?.TESTMUAI_API_KEY||r.TESTMUAI_API_KEY;return o?{authorization:`Bearer ${o}`}:{}}function R(t,r,e="the issue"){return t===401||t===403?new y("LIS_AUTH","credentials rejected \u2014 run `kane-cli login` and retry"):t>=500?new y("LIS_UNAVAILABLE",`the integrations service returned an error (HTTP ${t}) \u2014 retry later`):new y("JIRA_ISSUE_UNAVAILABLE",`could not fetch ${e}: ${r||`HTTP ${t}`}`)}function j(t){try{return JSON.parse(t.bytes.toString("utf8"))}catch{throw new y("LIS_UNAVAILABLE","the integrations service returned a malformed response \u2014 retry later")}}var ye=3e4;async function T(t,r,e){let o=e.env??process.env,m=e.fetchImpl??fetch,l=new AbortController,d=setTimeout(()=>l.abort(),ye);try{let a=await m(`${ge(o)}${t}`,{...r,headers:{"content-type":"application/json",...he(e),...r.headers??{}},signal:l.signal}),n=await Promise.race([a.arrayBuffer(),new Promise((s,u)=>{l.signal.addEventListener("abort",()=>u(new DOMException("aborted","AbortError")),{once:!0})})]);return{status:a.status,ok:a.ok,headers:a.headers,bytes:Buffer.from(n)}}catch(a){throw l.signal.aborted?new y("LIS_UNAVAILABLE","the integrations service did not respond within 30 seconds \u2014 retry later"):new y("LIS_UNAVAILABLE",`could not reach the integrations service (${a instanceof Error?a.message:String(a)}) \u2014 check your connection and retry`)}finally{clearTimeout(d)}}function $(t){try{return JSON.parse(t.bytes.toString("utf8")).message??""}catch{return""}}async function Q(t={}){let r=await T("/jira/info",{method:"GET"},t);if(!r.ok)throw R(r.status,$(r));let e=j(r),o=(e.data?.SELECTED_PROJECTS??[]).map(m=>m?.key).filter(m=>typeof m=="string"&&m.length>0);return{installed:e.data?.INSTALLED==="YES",selectAll:e.data?.SELECT_ALL===!0,selectedProjects:o}}async function ee(t,r={}){let e=await T("/jira/issue?details=true",{method:"POST",body:JSON.stringify({plugin_code:"jira",issueKey:t})},r);if(!e.ok)throw R(e.status,$(e));let o=j(e);if(o.type==="error"||!o.data)throw new y("JIRA_ISSUE_UNAVAILABLE",`could not fetch the issue: ${o.message??"issue not found or not accessible"}`);return o.data}async function te(t,r={}){let e=await T("/jira/attachment",{method:"POST",body:JSON.stringify({attachment_id:t})},r);if(e.status===413)throw new y("ATTACHMENT_TOO_LARGE","the attachment exceeds the integrations service's size cap");if(e.status===404)throw new y("JIRA_NOT_CONNECTED","Jira is not connected for this account \u2014 connect it in the Integrations screen and retry");if(!e.ok)throw R(e.status,$(e),`attachment ${t}`);return{bytes:e.bytes,mediaType:e.headers.get("content-type")??"application/octet-stream"}}var S="kane.source.jira/1";function re(t){if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(Array.isArray(t)){let r=t.map(re).filter(e=>e!==null);return r.length===0?null:r.join(", ")}if(t!==null&&typeof t=="object"){let r=t;for(let e of["name","value","displayName"])if(typeof r[e]=="string")return r[e];return null}return null}function ne(t,r){let e=[],o={},m=t.additional_fields??{};for(let n of Object.keys(m).sort()){let s=re(m[n]);if(s===null){e.push(`field "${n}" has no stable text form \u2014 dropped from the envelope`);continue}o[n]=s}let l=[...t.attachments??[]].map(n=>({id:String(n.id),filename:n.filename??"",media_type:n.mime_type??"application/octet-stream",size:n.size??0})).sort((n,s)=>{let u=Number(n.id),i=Number(s.id);return Number.isFinite(u)&&Number.isFinite(i)?u-i:n.id<s.id?-1:n.id>s.id?1:0}),d=t.key;if(!/^[A-Za-z][A-Za-z0-9_]*-\d+$/.test(d))throw new Error(`cannot build a stable identity for issue key "${d}" \u2014 expected a PROJECT-NUMBER key`);let a={schema:S,site:r,project:d.slice(0,d.lastIndexOf("-")),issue:{id:t.id,key:d},content:{summary:t.summary??"",description:t.description??"",fields:o},attachments:l};return{bytes:Buffer.from(JSON.stringify(a),"utf8"),envelope:a,warnings:e}}var se=64,be=16,Ee=6e6,Ie=5e7,_e=12e6,we={png:"image/png",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",bmp:"image/bmp",tiff:"image/tiff",emf:"image/emf",wmf:"image/wmf",unknown:"application/octet-stream"},Ae=new Set(["png","jpeg","webp"]);function ie(t){return async r=>{let e;try{e=JSON.parse(r.toString("utf8"))}catch{throw new Error("JIRA_ENVELOPE_SCHEMA: source bytes are not a kane jira envelope")}if(e.schema!==S)throw new Error(`JIRA_ENVELOPE_SCHEMA: unknown envelope schema "${e.schema}" \u2014 this CLI understands ${S}`);let o=[],m=new Map,l=[],d=0,a=new Map,n=[];for(let i=0;i<e.attachments.length;i++){let c=e.attachments[i],g=`i${i+1}`,w=`attachment:${c.filename}`,p=I=>`[img#${g}] ${c.filename} (${c.media_type}, ${c.size} bytes${I?"":" \u2014 not delivered"})`,f=(I,ue,L)=>{o.push({ref:g,loc:w,media_type:I,...L?.blob?{blob:L.blob}:{},...L?.appearance?{appearance:L.appearance}:{},delivery:ue,...L?.duplicate_of?{duplicate_of:L.duplicate_of}:{}})};if(!c.media_type.startsWith("image/")){f(c.media_type,"unsupported-vision-media-type"),n.push(p(!1));continue}let b;try{b=await t.fetchAttachment(c.id)}catch{f(c.media_type,"external-image-not-fetched"),n.push(p(!1));continue}let A=b.bytes,h=q(A),_=we[h.format],E=B(A);if(m.set(E,A),!Ae.has(h.format)){let I=h.format==="gif"||h.format==="bmp"||h.format==="tiff"?"unsupported-vision-media-type":"unsupported-image-kind";f(_,I,{blob:E}),n.push(p(!1));continue}if(h.width===void 0||h.height===void 0||h.width*h.height>Ie){f(_,"undecodable",{blob:E}),n.push(p(!1));continue}let v;if(h.format==="png"||h.format==="jpeg"){let I=X(A,h.format);if(I===null){f(_,"undecodable",{blob:E}),n.push(p(!1));continue}v=z(I.data,{width:I.width,height:I.height,channels:I.channels})}if(h.width<se||h.height<se){f(_,"below-dimension-floor",{blob:E,appearance:v}),n.push(p(!1));continue}let N=a.get(E);if(N!==void 0){f(_,"duplicate",{blob:E,appearance:v,duplicate_of:N}),n.push(p(!1));continue}if(A.byteLength>Ee){f(_,"image-too-large",{blob:E,appearance:v}),n.push(p(!1));continue}if(d+A.byteLength>_e){f(_,"vision-byte-budget-reached",{blob:E,appearance:v}),n.push(p(!1));continue}if(l.length>=be){f(_,"image-cap-reached",{blob:E,appearance:v}),n.push(p(!1));continue}a.set(E,g),d+=A.byteLength,l.push(g),f(_,"selected",{blob:E,appearance:v}),n.push(p(!0))}let s=[];s.push(`${e.issue.key} \xB7 ${e.site}/${e.project}`,`Summary: ${e.content.summary}`),e.content.description!==""&&s.push("",...e.content.description.split(`
4
+ `));let u=Object.keys(e.content.fields);return u.length>0&&s.push("","--- fields ---",...u.map(i=>`${i}: ${e.content.fields[i]}`)),n.length>0&&s.push("","--- attachments ---",...n),{projection:s.join(`
5
+ `)+`
6
+ `,inventory:o,blobs:m,delivered:l,converter:{name:"jira-convert",version:"1",policy:"v1"}}}}var ve=/^[A-Za-z][A-Za-z0-9_]*-\d+$/;function P(t){if(!/^https?:\/\/.+/i.test(t))return null;let r;try{r=new URL(t)}catch{return null}let e=r.pathname.split("/").filter(Boolean),o=e.lastIndexOf("browse");if(o===-1||o+1>=e.length)return null;let m=e[o+1];return ve.test(m)?{site:r.hostname,issueKey:m.toUpperCase()}:null}async function Le(t,r,e,o,m){let l=P(t);if(l===null)return(e.err??e.out)(`error: ${t}: unsupported remote URL \u2014 expected a Jira issue URL (https://<site>/browse/KEY-123)`),{code:1};let d=m?.lis??{jiraInfo:Q,jiraIssue:ee,jiraAttachment:te};try{let n={auth:await(m?.authEnv??(await import("./auth-76LVI6B5.js")).resolveLisAuthEnv)(),env:process.env},s=await d.jiraInfo(n);if(!s.installed)return(e.err??e.out)(`error: ${t}: Jira is not connected for this account \u2014 connect it in the Integrations screen (integrations.lambdatest.com) and retry`),{code:1};let u=l.issueKey.slice(0,l.issueKey.lastIndexOf("-"));if(!s.selectAll&&s.selectedProjects.length>0&&!s.selectedProjects.includes(u))return(e.err??e.out)(`error: ${t}: project ${u} is not in the integration's selected projects (${s.selectedProjects.join(", ")}) \u2014 add it in the Integrations screen to ingest from it`),{code:1};let i=await d.jiraIssue(l.issueKey,n),c=l.site;if(i.host)try{c=new URL(i.host).hostname}catch{c=i.host.replace(/^https?:\/\//,"").replace(/[/:].*$/,"")}let{bytes:g,warnings:w}=ne(i,c),p=r??l.issueKey.toLowerCase();M(p);let f=await K({contextDir:o,bytes:g,media:Y,sourceId:p,label:t,confirmSameSource:e.isTTY?b=>e.confirm(`identical content already ingested as ${b} \u2014 treat as the same source?`):void 0,converters:{jira:ie({fetchAttachment:b=>d.jiraAttachment(b,n)})}});e.out(x(e.isTTY,f,l.issueKey));for(let b of w)e.out(`warning: ${b}`);for(let b of f.warnings??[])e.out(`warning: ${b}`);if(f.composite){let b=f.composite.delivered+f.composite.omitted;e.out(`${f.source_id}: jira, ${b} attachments, ${f.composite.delivered} images delivered (${f.composite.omitted} omitted)`)}return{code:0,result:{status:f.status,source_id:f.source_id,source_cid:f.cid}}}catch(a){return a instanceof y?((e.err??e.out)(`error: ${t}: ${a.message}`),{code:1}):((e.err??e.out)(`error: ${t}: ${Re(a instanceof Error?a.message:String(a))}`),{code:1})}}function Re(t){let r=t.match(/too large — ([\d.]+ [KM]B), the limit for .+ is ([\d.]+ [KM]B) \[FILE_TOO_LARGE\]/);return r?`the issue's content is too large to ingest (${r[1]}; the limit is ${r[2]}) \u2014 trim the description or attachments in Jira and retry`:t.startsWith("PROJECTION_TOO_LARGE:")?"the issue's text is too large to ingest \u2014 trim the description in Jira and retry":t}var oe={name:"jira",hint:"Jira issue URLs (https://<site>/browse/KEY-123)",match:t=>P(t)!==null,ingest:Le};function x(t,r,e){return t?r.status==="created"?`landed ${r.source_id} (${e}) \u2014 new source`:r.status==="versioned"?`landed ${r.source_id} (${e}) \u2014 new version; dependents go stale`:`${r.source_id} unchanged \u2014 already landed`:`${r.status} ${r.source_id} source ${r.cid} blob ${r.blob}`}var J=[oe];function ae(t){return/^https?:\/\/.+/i.test(t)}function ce(t){return J.find(r=>r.match(t))??null}async function C(t,r,e,o=process.cwd(),m){let l=D(o),d=[];if(r.as!==void 0&&t.length>1)return(e.err??e.out)(`error: --as names ONE source identity \u2014 pass a single file (got ${t.length})`),{code:2,results:d};for(let a of t){if(ae(a)){let u=ce(a);if(u===null)return(e.err??e.out)(`error: ${a}: unsupported remote URL \u2014 supported: ${J.map(c=>c.hint).join("; ")}`),{code:1,results:d};let i=await u.ingest(a,r.as,e,l,m);if(i.code!==0)return{code:i.code,results:d};i.result&&d.push({status:i.result.status==="versioned"?"versioned":i.result.status==="unchanged"?"unchanged":"created",source_id:i.result.source_id,source_cid:i.result.source_cid});continue}let n=r.as;if(e.isTTY&&n===void 0&&Te(l)){let u=V(a),i=H(u);if(i){let c=O(l);c.heads.get(i)!=null&&c.heads.get(u)==null&&await e.confirm(`${u} looks like a new version of existing source '${i}' \u2014 ingest as '${i}' (replaces the current version; items built on it go stale)?`)&&(n=i)}}let s;try{s=await F({contextDir:l,filePath:a,asId:n,confirmSameSource:e.isTTY?u=>e.confirm(`identical bytes already ingested as ${u} \u2014 treat as the same source?`):void 0,converters:{pdf:G,docx:Z}})}catch(u){let i=u instanceof Error?u.message:String(u);return W(a,i),e.out(`error: ${a}: ${i}`),{code:1,results:d}}e.out(x(e.isTTY,s,$e(a)));for(let u of s.warnings??[])e.out(`warning: ${u}`);if(s.composite){let u=s.composite.pages!==void 0?` ${s.composite.pages} pages,`:"";e.out(`${s.source_id}: ${s.composite.kind},${u} ${s.composite.delivered} images delivered (${s.composite.omitted} omitted)`)}if(!e.isTTY&&s.status==="created"){let u=O(l);for(let[i,c]of u.heads.entries())if(!(i===s.source_id||c==null)&&u.getNode(c)?.content.blob===s.blob){e.out(`hint: identical bytes already ingested as ${i} \u2014 merged later via review`);break}}d.push({status:s.status,source_id:s.source_id,source_cid:s.cid})}return{code:0,results:d}}async function mt(t,r,e,o=process.cwd(),m){return(await C(t,r,e,o,m)).code}async function ft(t,r){if(r.mode!=null&&!["interactive","agent","ci","override"].includes(r.mode))return process.stderr.write(`ingest: --mode must be interactive | agent | ci | override, got '${r.mode}'
7
+ `),2;let e=U();if(r.mode==="interactive"&&!e)return process.stderr.write(`ingest: --mode interactive needs a TTY on stdin and stdout (use --mode agent|ci|override headless)
8
+ `),2;let o=r.mode??(e?"interactive":void 0),m=o==="interactive"||o==="agent"||o==="override";if(!m&&(r.plan||r.force||r.trust!==void 0))return process.stderr.write(`ingest: --plan/--force/--trust steer the extraction \u2014 not available when only landing (use --mode agent to extract headless)
9
+ `),2;let{createInterface:l}=await import("readline/promises"),d={out:c=>process.stdout.write(c+`
10
+ `),err:c=>process.stderr.write(c+`
11
+ `),isTTY:e,confirm:async c=>{let g=l({input:process.stdin,output:process.stdout});try{let w=await g.question(`${c} [Y/n] `);return!/^n(o)?$/i.test(w.trim())}finally{g.close()}}};if(!m){let{withTelemetry:c}=await import("./with-telemetry-PNP6CAVM.js");return c("ingest",async()=>{let{code:g,results:w}=await C(t,{as:r.as},d,void 0,void 0);if(g!==0)return g;let p=w.filter(f=>f.status!=="unchanged").length;return p>0&&(d.err??d.out)(`landed ${p} source(s) \u2014 run kane-cli context extract to extract them`),0},{write:!0})}let{code:a,results:n}=await C(t,{as:r.as},d,void 0,void 0);if(a!==0)return a;if(n.length===0)return 0;let{extractCommand:s}=await import("./extract-cmd-U3MGK2LP.js"),u=[...new Set(n.map(c=>c.source_id))],i=await s({...r.mode!==void 0?{mode:r.mode}:{},...r.plan?{plan:!0}:{},...r.force?{force:!0}:{},...r.trust!==void 0?{trust:r.trust}:{},sources:u,landed:n});if(i===2){let c=n.filter(g=>g.status!=="unchanged").length;c>0&&(d.err??d.out)(`note: the ${c} landed source(s) are safe \u2014 extract later with kane-cli context extract`)}return i}export{C as a,mt as b,ft as c};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{homedir as a}from"os";import{join as t}from"path";var m="0.7.1",d="kane-cli",e=t(a(),".testmuai","kaneai"),g=t(e,"profiles"),h=t(e,"tui-config.json"),_=t(e,"media"),A="https://registry.npmjs.org/@testmuai/kane-cli",L="https://api.github.com/repos/LambdaTest/kane-cli/releases",n="@testmuai/kane-cli-skill",b=`https://registry.npmjs.org/${n}`,r="kane-cli",x=[{dir:t(a(),".claude","skills",r),agent:"Claude Code"},{dir:t(a(),".agents","skills",r),agent:"Codex CLI"},{dir:t(a(),".gemini","skills",r),agent:"Gemini CLI"}],u="https://dd-proxy.lambdatest.com/intake/kane-cli",U="https://kaneai-playground.lambdatest.io",R=9222,I=9230,E=t(e,"chrome-profiles"),o=t(e,"hints"),C=t(o,"state.json");function T(s){return t(o,`catalog-${s}.json`)}var c="127.0.0.1",S=18392,f=18400,i="/callback";function N(s){return`http://${c}:${s}${i}`}var P="KANE CLI",B="*",O={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",testGeneratorBaseUrl:"https://test-manager-api.lambdatest.com",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server",evidenceViewerUrl:"https://evidence.lambdatest.com",mediaArtefactsHost:"prod-mobile-artefacts.lambdatest.com"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",testGeneratorBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server",evidenceViewerUrl:"https://stage-evidence.lambdatestinternal.com",mediaArtefactsHost:"stage-mobile-artefacts.lambdatestinternal.com"}},k={orange:"#ff9500",generateAccent:"#0d9488",assuranceAccent:"#b388ff",purple:"#b388ff",secondary:"#888888",dim:"#666666",muted:"#444444",green:"#4ade80",red:"#ef4444"};export{m as a,d as b,e as c,h as d,_ as e,A as f,L as g,n as h,x as i,u as j,U as k,R as l,I as m,E as n,C as o,T as p,c as q,S as r,f as s,i as t,N as u,P as v,B as w,O as x,k as y};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as h}from"./chunk-KXUSG5ZI.js";import{y as l}from"./chunk-MMPFU2YC.js";import{a as A}from"./chunk-HCBYKLMW.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(B(),1);var n=x(A(),1);function S(r,d,s,u,m){let p=s==="basic"&&u?`basic (${u})`:s,i=20,a=`${r} [${d}]`,g="\xB7".repeat(Math.max(2,i-a.length+3));return{label:`${a} ${g} ${p}`,profile:r,env:d,isActive:m}}function M({creds:r,onSwitch:d,onCancel:s}){let u=r.listProfiles(),m=r.getActiveProfile(),p=r.getDefaultEnv(),i=u.map(e=>{let o=r.loadBasicAuth(e.profile,e.env),t=r.loadCredentials(e.profile,e.env)!==null,v=o?"basic":t?"oauth":"none",b=o?o.username:null,w=e.profile===m&&e.env===p;return S(e.profile,e.env,v,b,w)}),[a,g]=(0,L.useState)(()=>{let e=i.findIndex(o=>o.isActive);return e>=0?e:0});return P((e,o)=>{if(o.escape){s();return}if(o.upArrow){g(t=>Math.max(0,t-1));return}if(o.downArrow){g(t=>Math.min(i.length-1,t+1));return}if(o.return&&i[a]){let t=i[a];t.isActive||d(t.profile,t.env),s();return}}),i.length===0?(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{marginTop:1,children:(0,n.jsx)(f,{color:l.dim,children:"No profiles \u2014 use Login to create one"})}),(0,n.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{flexDirection:"column",marginTop:1,children:i.map((e,o)=>{let t=o===a,v=t?"\u276F ":" ",b=e.isActive?l.green:t?l.orange:void 0;return(0,n.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,n.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{S as a,M as b};
2
+ import{a as h}from"./chunk-4OPQJ7PE.js";import{y as l}from"./chunk-C4G7RVJ6.js";import{a as A}from"./chunk-HCBYKLMW.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(B(),1);var n=x(A(),1);function S(r,d,s,u,m){let p=s==="basic"&&u?`basic (${u})`:s,i=20,a=`${r} [${d}]`,g="\xB7".repeat(Math.max(2,i-a.length+3));return{label:`${a} ${g} ${p}`,profile:r,env:d,isActive:m}}function M({creds:r,onSwitch:d,onCancel:s}){let u=r.listProfiles(),m=r.getActiveProfile(),p=r.getDefaultEnv(),i=u.map(e=>{let o=r.loadBasicAuth(e.profile,e.env),t=r.loadCredentials(e.profile,e.env)!==null,v=o?"basic":t?"oauth":"none",b=o?o.username:null,w=e.profile===m&&e.env===p;return S(e.profile,e.env,v,b,w)}),[a,g]=(0,L.useState)(()=>{let e=i.findIndex(o=>o.isActive);return e>=0?e:0});return P((e,o)=>{if(o.escape){s();return}if(o.upArrow){g(t=>Math.max(0,t-1));return}if(o.downArrow){g(t=>Math.min(i.length-1,t+1));return}if(o.return&&i[a]){let t=i[a];t.isActive||d(t.profile,t.env),s();return}}),i.length===0?(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{marginTop:1,children:(0,n.jsx)(f,{color:l.dim,children:"No profiles \u2014 use Login to create one"})}),(0,n.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{flexDirection:"column",marginTop:1,children:i.map((e,o)=>{let t=o===a,v=t?"\u276F ":" ",b=e.isActive?l.green:t?l.orange:void 0;return(0,n.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,n.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{S as a,M as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{y as m}from"./chunk-MMPFU2YC.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a as u,b as a,j as g}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as f}from"./chunk-UR6MHSHU.js";var T=f(b(),1);function k(i,n){if(!n)return i;let l=i.trim()||n;return`\x1B]8;;${n}\x07${l}\x1B]8;;\x07`}var r=f(x(),1);function $({shareableLink:i,testCaseLink:n,codeExportDir:l,recordedTestPath:s,outputDir:o,autoExit:p=!0}){let{exit:c}=g();(0,T.useEffect)(()=>{if(!p)return;let t=setTimeout(()=>c(),100);return()=>clearTimeout(t)},[c,p]);let e=[];return s&&e.push({label:"Test",url:s,linkUrl:`file://${s}`}),o&&e.push({label:"Output",url:o,linkUrl:`file://${o}`}),i&&e.push({label:"ShareLink",url:i}),n&&e.push({label:"TestCase",url:n}),l&&!o&&e.push({label:"CodeExport",url:l,linkUrl:`file://${l}`}),e.length===0?(0,r.jsx)(r.Fragment,{}):(0,r.jsx)(u,{flexDirection:"column",marginTop:1,marginLeft:1,children:e.map(t=>(0,r.jsxs)(u,{flexDirection:"column",marginBottom:1,children:[(0,r.jsxs)(a,{color:m.orange,children:[t.label,":"]}),(0,r.jsx)(a,{color:m.dim,children:k(t.url,t.linkUrl??t.url)})]},t.label))})}export{$ as a};
2
+ import{y as m}from"./chunk-C4G7RVJ6.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a as u,b as a,j as g}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as f}from"./chunk-UR6MHSHU.js";var T=f(b(),1);function k(i,n){if(!n)return i;let l=i.trim()||n;return`\x1B]8;;${n}\x07${l}\x1B]8;;\x07`}var r=f(x(),1);function $({shareableLink:i,testCaseLink:n,codeExportDir:l,recordedTestPath:s,outputDir:o,autoExit:p=!0}){let{exit:c}=g();(0,T.useEffect)(()=>{if(!p)return;let t=setTimeout(()=>c(),100);return()=>clearTimeout(t)},[c,p]);let e=[];return s&&e.push({label:"Test",url:s,linkUrl:`file://${s}`}),o&&e.push({label:"Output",url:o,linkUrl:`file://${o}`}),i&&e.push({label:"ShareLink",url:i}),n&&e.push({label:"TestCase",url:n}),l&&!o&&e.push({label:"CodeExport",url:l,linkUrl:`file://${l}`}),e.length===0?(0,r.jsx)(r.Fragment,{}):(0,r.jsx)(u,{flexDirection:"column",marginTop:1,marginLeft:1,children:e.map(t=>(0,r.jsxs)(u,{flexDirection:"column",marginBottom:1,children:[(0,r.jsxs)(a,{color:m.orange,children:[t.label,":"]}),(0,r.jsx)(a,{color:m.dim,children:k(t.url,t.linkUrl??t.url)})]},t.label))})}export{$ as a};
@@ -0,0 +1,13 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as qe,g as et}from"./chunk-FCMLIK7P.js";import{b as w,c as Q,d as Ye,f as q,g as ee}from"./chunk-CJJXT5DO.js";import{a as Ke,e as P,f as T,g as We,h as H,i as D,j as Je}from"./chunk-ZPDM6FO7.js";import{a as F,b as L,d as Ue}from"./chunk-EHN5HTUD.js";import{d as tt}from"./chunk-NVGBE2DR.js";import{a as Y}from"./chunk-CH273NAE.js";import{a as R,b as y}from"./chunk-L5LI2JF4.js";import{a as _}from"./chunk-GW5DWAXY.js";import{b as U}from"./chunk-T63R6QT4.js";import{a as Ze}from"./chunk-L4JIMNKW.js";import{b as Qe,f as z,i as G}from"./chunk-M7WQM4UA.js";import{d as te,f as Xe}from"./chunk-5YPBPZUR.js";import{a as Ge}from"./chunk-JRMDGLLT.js";import{a as ze}from"./chunk-C4G7RVJ6.js";function $(t){if(t===null)return"broken";let e=Math.floor(t/100);return e===1?"passed":e===7?"failed":e===2?"skipped":"broken"}var C={failed:3,broken:2,passed:1,skipped:0};function re(t){let e="skipped";for(let r of t)C[r]>C[e]&&(e=r);return e}import{createHash as At}from"crypto";import{basename as Ot}from"path";function ne(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return e.length>0?e:"session"}function ie(t){return At("sha256").update(t).digest("hex").slice(0,8)}function oe(t){let e=Ot(t).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${ne(e)}-${ie(t)}`}function se(t,e){return`${ne(t)}-${ie(e)}`}function ae(t){let e={};for(let[r,n]of Object.entries(t))typeof n=="string"&&n.length>0&&(e[r]=n);return e}var Ft={darwin:"macOS",linux:"Linux",win32:"Windows"};function ce(t){return Ft[t]??t}function de(t,e){let r={},n=(i,o)=>{o!==void 0&&o!==""&&(r[i]=o)};return n("model",e.model),n("os",t.os),n("browser",t.browser),n("browser_version",t.browser_version),n("resolution",t.resolution),n("platform",e.platform),n("platform_type",e.platform_type),n("run_kind",e.run_kind),n("os_version",t.os_version),t.device!==void 0&&t.device!==""?r.device=t.device:e.platform_type&&e.platform_type!=="web"&&(r.device=null),r}function Lt(t,e){return{pack_test_dir:t,ordinal_offset:e}}import{promises as x}from"fs";import{join as k}from"path";function ue(t){let e={evidence:"0.1",run_id:t.execution_id,status:"running",title:t.title,started:t.started,environment:{producer:{name:"kane-cli",version:t.producerVersion},...t.surfaces?{surfaces:t.surfaces}:{},run_kind:t.run_kind,origin:t.origin,pid:t.pid},...t.credits!==void 0?{metrics:{credits:{value:t.credits,type:"count"}}}:{}};return y(e,{lineWidth:-1})}async function le(t,e,r,n=process.cwd(),i){let o=i??w(t.execution_id,n),s=k(o,"tests",e);return await x.mkdir(k(o,"coverage"),{recursive:!0}),await x.writeFile(k(o,"coverage",".keep"),""),await x.mkdir(s,{recursive:!0}),await x.writeFile(k(o,"run.yaml"),ue(t)),r&&await x.writeFile(k(s,r.path),r.content),o}async function Tt(t,e=process.cwd()){let r=w(t.execution_id,e);await x.mkdir(k(r,"coverage"),{recursive:!0}),await x.writeFile(k(r,"coverage",".keep"),"");let n=R(ue(t));return n.environment&&delete n.environment.run_kind,await x.writeFile(k(r,"run.yaml"),y(n,{lineWidth:-1})),r}async function jt(t,e=process.cwd()){return L(w(t,e),new Date().toISOString())}async function pe(t,e=process.cwd()){await x.rm(w(t,e),{recursive:!0,force:!0})}import{promises as fe}from"fs";import{join as me}from"path";function ge(t){let e={evidence:"0.1",test:t.testId,status:t.status,...t.durationMs!==void 0?{duration_ms:t.durationMs}:{},...t.definitionPath?{definition:{path:t.definitionPath}}:{},...t.definitionId?{definition_id:t.definitionId}:{},...t.assuranceId?{assurance_id:t.assuranceId}:{},...Object.keys(t.externalId).length?{external_id:t.externalId}:{},...t.tags&&t.tags.length?{tags:t.tags}:{},...Object.keys(t.environment).length?{environment:t.environment}:{},steps:t.steps};return y(e,{lineWidth:-1})}function ve(t){return y({logs:t},{lineWidth:-1})}async function he(t,e,r){await fe.writeFile(me(t,"tests",e,"result.yaml"),r)}async function we(t,e,r){let n=me(t,"tests",e,"logs");await fe.mkdir(n,{recursive:!0}),await fe.writeFile(me(n,"meta.yaml"),r)}import{promises as K}from"fs";import{join as rt}from"path";function nt(t){return rt(t,".internal","meta.json")}async function it(t){let e;try{e=await K.readFile(nt(t),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function ye(t,e){let r;try{r=await it(t)??{}}catch(s){console.warn(`evidence: meta.json at ${t} unreadable \u2014 skipping execution-pointer append to preserve identity`,s);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(e),r.executions=n,await K.mkdir(rt(t,".internal"),{recursive:!0});let i=nt(t),o=`${i}.tmp-${process.pid}-${Date.now()}`;await K.writeFile(o,JSON.stringify(r,null,2)+`
3
+ `),await K.rename(o,i)}async function Nt(t){try{let e=await it(t);return e&&Array.isArray(e.executions)?e.executions:[]}catch{return[]}}async function Vt(t,e,r=process.cwd()){let n=await q(t,r);if(!n){let o=`evidence: no pack found for "${t}"`;return e.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:t})):console.error(o),2}let i=await F(n,e.profile??"L1");return e.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${e.profile??"L1"}, status ${i.status})`),i.valid?0:1}function _e(t){let e=[];for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)e.push($(i))}return re(e)}function Mt(t){let e=null;for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(e==null||C[$(i)]>C[$(e)]||C[$(i)]===C[$(e)]&&i>e)&&(e=i)}return e}import{promises as Bt}from"fs";import{extname as ot,basename as Ht}from"path";var zt={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function xe(t){let e;try{e=await Bt.readdir(t)}catch{return[]}return e.filter(r=>r!=="meta.yaml").sort().map(r=>({name:Ht(r,ot(r)),file:r,format:zt[ot(r)]??"txt"}))}import{mkdirSync as Gt,appendFileSync as Ut}from"fs";import{join as st}from"path";function Ie(t,e){return st(t,"tests",e,"logs")}function be(t,e,r,n={},i){try{i?.(e,r,r,n)}catch{}if(t)try{Gt(t,{recursive:!0});let o=JSON.stringify({ts:new Date().toISOString(),level:e,event:r,...n})+`
4
+ `;Ut(st(t,"diagnostics.ndjson"),o)}catch{}}import{promises as E}from"fs";import{join as A}from"path";async function Yt(t){try{let e=A(t,"tests"),r=await E.readdir(e).catch(()=>[]);for(let n of r){let i=A(e,n,"steps"),o=await E.readdir(i).catch(()=>[]);for(let s of o){let a=await E.readFile(A(i,s,"failure.yaml"),"utf8").catch(()=>null);if(a!=null)try{let c=R(a);if(c&&typeof c=="object"&&c.triage)return!0}catch{}}}}catch{}return!1}async function at(t,e,r){let n=A(t,"tests",e,"logs");if(r)try{await E.mkdir(n,{recursive:!0}),await E.copyFile(r,A(n,"tui.log"))}catch{}let i=await xe(n);i.length&&await we(t,e,ve(i))}async function ke(t){let e=t.cwd??process.cwd(),r=t.packDir??w(t.executionId,e);if(!t.saved&&!t.packDir)return await pe(t.executionId,e),{sealed:!1};await at(r,t.testId,t.tuiLogPath);let n=A(r,"run.yaml"),i=R(await E.readFile(n,"utf8"));i.environment={...i.environment??{},saved:t.saved,run_kind:t.runKind},await E.writeFile(n,y(i,{lineWidth:-1}));let o=await E.open(n,"r+");try{await o.sync()}finally{await o.close()}let s=await Yt(r);await L(r,new Date().toISOString());let a;try{let d=await F(r,"L1");a=d.valid;let p=(d.diagnostics??[]).filter(u=>String(u?.code??"").includes("failure.status_disagrees"));if(p.length>0)if(t.expectStatusDisagrees||s){let u=t.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 ${u}`)}else console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,p);if(!d.valid){console.warn(`evidence: sealed pack ${t.executionId} failed L1 validation`,d.diagnostics);let u=String(d.diagnostics?.[0]?.code??"");be(Ie(r,t.testId),"warn","EVIDENCE_INVALID",{execution_id:t.executionId,first_code:u,surface:t.surface??"testmd"},t.log)}}catch(d){console.warn(`evidence: validation error for ${t.executionId}`,d)}let c;if(t.saved&&t.packDir)try{c=await Ye(r,t.executionId,e)}catch(d){console.warn(`evidence: store install failed for ${t.executionId}`,d)}if(t.outputStemDir)try{await ye(t.outputStemDir,{execution_id:t.executionId,run_kind:t.runKind,status:t.verdict,valid:a,at:new Date().toISOString()})}catch(d){console.warn(`evidence: execution-pointer append failed for ${t.executionId} (pack is sealed)`,d)}return{sealed:!0,valid:a,storePath:c}}import{release as ct}from"os";import{execFileSync as Kt}from"child_process";var dt=!1,W;function Wt(){if(!dt)if(dt=!0,process.platform==="darwin")try{W=Kt("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{W=ct()||void 0}else W=ct()||void 0;return W}function Ee(t){let e={os:ce(process.platform)},r=Wt();if(r&&(e.os_version=r),t.cdpBrowser){let n=/^([A-Za-z]+)\/(\d+)/.exec(t.cdpBrowser);n&&(e.browser=n[1].replace(/^Headless/,""),e.browser_version=n[2])}return t.resolution&&(e.resolution=t.resolution),e}async function ut(t){if(t)try{let e=await fetch(`${t}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!e.ok)return;let r=await e.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function Jt(t){let e;return()=>(e||(e=ut(t)),e)}import{promises as Se,existsSync as Re,readFileSync as qt}from"fs";import{basename as er,join as S}from"path";import{readFileSync as Xt}from"fs";import{dirname as Zt,resolve as Qt}from"path";function lt(t,e){let r=Qt(t),n=Xt(r,"utf8");return P(e?T(n,H(Zt(r),e)):n)}var j=class t{constructor(e){this.opts=e}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_packDirOverride;_attached=!1;get attached(){return this._attached}static async attach(e){let r=er(e.packDir).replace(/\.evidence$/,""),n=new t({origin:"testrun",runKind:"author",pid:process.pid,title:e.testId,started:new Date().toISOString(),producerVersion:ze,cwd:e.cwd});n.executionId=r,n.testId=e.testId,n._packDirOverride=e.packDir,n._attached=!0;let i=S(e.packDir,"tests",e.testId);return await Se.mkdir(i,{recursive:!0}),e.definition&&(await Se.writeFile(S(i,e.definition.path),e.definition.content),n.definitionPath=e.definition.path,n.definitionContent=e.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=Q(),this.testId=this.opts.testmdRelPath?oe(this.opts.testmdRelPath):se(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let e=this.opts.definition??null;return await le({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,e,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),e&&(this.definitionPath=e.path,this.definitionContent=e.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?S(this.opts.packRootDir,`${this.executionId}.evidence`):w(this.executionId,this.opts.cwd)}get packTestDir(){return S(this.pack,"tests",this.testId)}async writeDefinition(e,r="test.md"){await Se.writeFile(S(this.packTestDir,r),e),this.definitionPath=r,this.definitionContent=e}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=S(this.opts.cwd,this.opts.testmdRelPath);if(Re(e))return D(qt(e,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=S(this.opts.cwd,this.opts.testmdRelPath),r=S(this.opts.cwd,".context"),n=Re(r)?_(r):void 0;if(Re(e))return lt(e,n)}if(this.definitionContent!=null)return P(this.definitionContent)}catch{}}noteSpawn(e){this.accumulatedSteps.push(...e.steps),this.maxOrdinal=Math.max(this.maxOrdinal,e.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}async writeResult(e){let r=_e(e.spawns),n=this.pack;await he(n,this.testId,ge({testId:this.testId,status:r,durationMs:e.durationMs,definitionPath:this.definitionPath,definitionId:this.computeDefinitionId(),assuranceId:this.computeAssuranceId(),externalId:ae(e.externalIdInput),environment:de(e.runnerEnv,e.intentEnv),steps:e.steps,tags:e.tags}));let i=e.externalIdInput;return e.log&&(i.commit_id||i.test_id||i.testcase_id)&&e.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:i.commit_id??null,test_id:i.test_id??null,testcase_id:i.testcase_id??null,project_id:i.project_id??null,session_id:i.session_id??null,session_name:i.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function tr(t,e,r=ee){try{let n=await r(t);if(n.aborted.length>0||n.removed.length>0)try{e?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as Ir}from"fs";import{existsSync as $e,mkdirSync as gr,readdirSync as vr,readFileSync as hr,rmSync as wr,statSync as yr,writeFileSync as _r}from"fs";import{join as O}from"path";import{mkdirSync as rr,renameSync as nr,rmSync as ir,writeFileSync as or}from"fs";import{join as pt}from"path";var sr=5e6;function ft(t,e,r){let n=pt(t,"coverage","sources"),i=new Map,o=!1;try{for(let s of r.usecases)for(let a of s.sources){if(i.has(a.id)){a.file=i.get(a.id);continue}if(!a.cid)continue;let c=tt(e,a.cid);if(c===null||c.byteLength>sr)continue;o||(rr(n,{recursive:!0}),o=!0);let d=pt(n,a.id),l=`${d}.tmp-${process.pid}`;or(l,c),nr(l,d);let p=`coverage/sources/${a.id}`;i.set(a.id,p),a.file=p}}catch{for(let s of r.usecases)for(let a of s.sources)delete a.file;if(o)try{ir(n,{recursive:!0,force:!0})}catch{}}}import{existsSync as Ce,readFileSync as N,renameSync as ur,writeFileSync as lr}from"fs";import{dirname as wt,isAbsolute as yt,resolve as _t}from"path";var ar=new Set(["inline","testmd","testrun"]),cr=new Set(["inferred","authored","runtime-derived"]),Pe=new Set(["passed","failed","broken","skipped"]);function mt(t,e,r){if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let n=e;for(let i=0;;i++){let o=z(t);if(n.latestHash!==o){if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(n.latestHash)} but chain head is ${String(o)} \u2014 retry budget exhausted`}]};n=_(t);continue}let s=dr(t,n,r);if(s!=="cas")return s;if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 retry budget exhausted"}]};n=_(t)}}function dr(t,e,r){let n=[],i=[];for(let s of r.facts){let a=`executions[${s.ref}]`,c=e.resolve(s.ref),d=c?e.tipOf(c.cid):null;if(!c||!d||e.superseded.has(d)){n.push({code:"UNKNOWN_REF",detail:`${a}: '${s.ref}' is not a live committed node`});continue}if(e.nodeLabel.get(d)!==te.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${a}: execution facts attach to tests \u2014 '${s.ref}' is a ${e.nodeLabel.get(d)}`});continue}if(!ar.has(s.mode)){n.push({code:"BAD_MODE",detail:`${a}: mode '${s.mode}' not in inline|testmd|testrun`});continue}if(!Pe.has(s.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}: verdict '${s.verdict}' not in ${[...Pe].join("|")}`});continue}if(!cr.has(s.oracle_mode)){n.push({code:"BAD_ORACLE_MODE",detail:`${a}: oracle_mode '${s.oracle_mode}' not in inferred|authored|runtime-derived`});continue}if(typeof s.drift_flag!="boolean"||typeof s.stale_at_run!="boolean"){n.push({code:"MISSING_FIELD",detail:`${a}: drift_flag and stale_at_run are required booleans`});continue}if(!s.execution_id||!s.started_at||!s.definition_id_at_run){n.push({code:"MISSING_FIELD",detail:`${a}: execution_id, started_at and definition_id_at_run are required`});continue}let l=[];for(let p of s.per_ac??[]){let u=e.resolve(p.ac_ref),f=u?e.tipOf(u.cid):null;if(!u||!f||e.superseded.has(f)||e.nodeLabel.get(f)!==te.AC){n.push({code:"UNKNOWN_REF",detail:`${a}.per_ac: '${p.ac_ref}' is not a live AC`});continue}if(!Pe.has(p.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}.per_ac['${p.ac_ref}']: verdict '${p.verdict}'`});continue}l.push({ac_ref:e.nameOf.get(f)??f,verdict:p.verdict})}i.push({about:d,definition_id_at_run:s.definition_id_at_run,verdict:s.verdict,...l.length?{per_ac:l}:{},drift_flag:s.drift_flag,oracle_mode:s.oracle_mode,stale_at_run:s.stale_at_run,...s.unresolved_acs?.length?{unresolved_acs:s.unresolved_acs}:{},execution_id:s.execution_id,...s.evidence_id?{evidence_id:s.evidence_id}:{},...s.duration_ms!==void 0?{duration_ms:s.duration_ms}:{},started_at:s.started_at,mode:s.mode,local:s.local,...s.via_parent?{via_parent:s.via_parent}:{}})}if(n.length>0)return{record:null,errors:n};let o;try{o=G(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:i,...r.eventIds&&r.eventIds.length>0?{event_ids:r.eventIds}:{},source_head_moves:{}},{expectPrev:e.latestHash})}catch(s){if(s instanceof Qe)return"cas";throw s}return U(t),{record:o.record,errors:null}}function xt(t){let e={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of t)for(let i of n.verifies??[]){let o=r.get(i);(o===void 0||(e[n.status]??0)>(e[o]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function It(t){let e=[],r=Y(t.cwd);if(!Ce(r))return{synced:0,superseded:0,skipped:"no-context",warnings:e};let n=t.by??{kind:"ai",id:"exec-sync"},i=_(r),o=[],s=0,a=new Set;for(let d of t.members){let l=yt(d.path)?d.path:_t(t.cwd,d.path);for(let p of pr(l)){if(a.has(p.path))continue;a.add(p.path);let u=p.path===l?void 0:D(N(l,"utf8"))?.id,f=N(p.path,"utf8"),m=D(f);if(!m?.id)continue;let g=i.resolve(m.id),I=g?i.tipOf(g.cid):null;if(!g||!I||i.superseded.has(I)){e.push(`sync: ${m.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let b=P(T(f,H(wt(p.path),i))),v=String(i.getNode(I)?.content.test_md_blob??""),M=P(T(v,We(i))),B=!1,Z=I;if(b===M)m.base!==M&&ht(p.path,f,M,e);else if(m.base===M){let h=fr(r,i,I,f,b,n);h.error?(e.push(`sync: could not supersede ${m.id}: ${h.error}`),B=!0):(s++,Z=h.newCid,B=h.oracleTier,ht(p.path,N(p.path,"utf8"),b,e),i=_(r))}else B=!0,e.push(m.base?`sync: ${m.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${m.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);let Ve=i.getNode(Z)?.content.check,Me=p.path===l?d.acs??[]:[],Be=Me.filter(h=>gt(i,h.ref)),He=Me.filter(h=>!gt(i,h.ref)).map(h=>h.ref);o.push({ref:m.id,definition_id_at_run:b,verdict:d.verdict,...Be.length?{per_ac:Be.map(h=>({ac_ref:h.ref,verdict:h.verdict}))}:{},drift_flag:B,oracle_mode:Ve?.expected_mode??(Ke(Ve?.operand)?"runtime-derived":"inferred"),stale_at_run:i.stale(Z)!=="fresh",...He.length?{unresolved_acs:He}:{},execution_id:d.executionId,...d.evidenceId?{evidence_id:d.evidenceId}:{},...d.durationMs!==void 0?{duration_ms:d.durationMs}:{},started_at:d.startedAt,mode:d.mode,local:d.local,...u?{via_parent:u}:{}})}}if(o.length===0)return{synced:0,superseded:s,warnings:e};let c=mt(r,_(r),{facts:o,by:n});return c.errors?(e.push(...c.errors.map(d=>`sync facts: ${d.code}: ${d.detail}`)),{synced:0,superseded:s,warnings:e}):{synced:o.length,superseded:s,warnings:e}}function pr(t){let e=[],r=new Set,n=i=>{if(r.has(i)||!Ce(i))return;r.add(i);let o=N(i,"utf8");for(let s of o.split(`
5
+ `)){let a=/^@import\s+(\S+)\s*$/.exec(s.trim());if(!a)continue;let c=yt(a[1])?a[1]:_t(wt(i),a[1]);Ce(c)&&D(N(c,"utf8"))?.id&&n(c)}e.push({path:i})};return n(t),e}function gt(t,e){let r=t.resolve(e),n=r?t.tipOf(r.cid):null;return!!(r&&n&&!t.superseded.has(n)&&t.nodeLabel.get(n)==="ac")}function fr(t,e,r,n,i,o){let s=e.getNode(r);if(!s)return{oracleTier:!1,error:"tip unreadable"};let a=Je(n),c=String(s.content.test_md_blob??""),d=/^#\s+(.+?)\s*$/m.exec(a)?.[1]??String(s.content.title??""),l={...s.content,test_md_blob:a,definitionId:i,title:d},p=Xe("test",l);if(p.length>0)return{oracleTier:!1,error:p.map(g=>g.detail).join("; ")};let u=Ze("test",l);if(u===r)return{newCid:r,oracleTier:!1};let f=vt(c)!==vt(a),m=z(t);if(e.latestHash!==m)return{oracleTier:f,error:`store advanced under the sync (basis ${String(e.latestHash)} vs head ${String(m)}) \u2014 re-run to retry`};try{G(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:u,label:"test",content:l}],edges:[],review:[{id:u,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:o}],supersessions:[{kind:"node",old:r,new:u,reason:"edited on disk (run sync)",by:o}],source_head_moves:{}},{expectPrev:m})}catch(g){return{oracleTier:f,error:g instanceof Error?g.message:String(g)}}return U(t),{newCid:u,oracleTier:f}}var mr=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/;function vt(t){let e=[],r=t.split(`
6
+ `),n=!1;for(let i of r){if(/^##\s/.test(i)){n=/\bassert\b/i.test(i);let o=mr.exec(i);o&&e.push(`v:${o[1].trim()}`);continue}n&&i.trim()!==""&&e.push(i.trim())}return e.join(`
7
+ `)}function ht(t,e,r,n){try{let i=e.split(`
8
+ `),o=-1;if(i[0]?.trim()==="---"){for(let c=1;c<i.length;c++)if(i[c].trim()==="---"){o=c;break}}if(o<0)return;let s=!1;for(let c=1;c<o;c++){if(/^\s+base:\s*sha256:[0-9a-f]+\s*$/.test(i[c])){i[c]=i[c].replace(/sha256:[0-9a-f]+/,r),s=!0;break}if(/^assurance:\s*$/.test(i[c])&&!i.slice(c,Math.min(c+3,o)).some(d=>/^\s+base:/.test(d))){i.splice(c+2,0,` base: ${r}`),s=!0;break}}if(!s)return;let a=`${t}.tmp-sync`;lr(a,i.join(`
9
+ `)),ur(a,t)}catch(i){n.push(`sync: pin refresh failed for ${t} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var xr={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"},bt=(t,e)=>{try{if(!$e(e))return{status:"skipped",reason:"no context store at the project root"};let r=O(t,"tests");if(!$e(r))return{status:"skipped",reason:"pack has no tests/"};let n=new Map;for(let a of vr(r)){let c=O(r,a,"result.yaml");if(!$e(c)||!yr(O(r,a)).isDirectory())continue;let d=R(hr(c,"utf8"));if(!d?.definition_id&&!d?.assurance_id)continue;let l=xt(d.steps??[]),p={testShortId:String(d.test??a),execution:xr[String(d.status)]??"not-run",...l.length?{acs:l}:{}};d.assurance_id&&n.set(`id:${d.assurance_id}`,p),d.definition_id&&n.set(`def:${d.definition_id}`,p)}let i=et(_(e),n,{scope:"run"}),o=qe(i);ft(t,e,i);let s=y({...i,rollup:o},{lineWidth:-1});return gr(O(t,"coverage"),{recursive:!0}),_r(O(t,"coverage","usecases.yaml"),s),{status:"written"}}catch(r){try{wr(O(t,"coverage","sources"),{recursive:!0,force:!0})}catch{}return{status:"skipped",reason:r instanceof Error?r.message:String(r)}}};async function br(t){try{let e=new j({origin:"inline",runKind:"author",pid:t.pid,title:t.title,started:new Date().toISOString(),producerVersion:t.producerVersion,surfaces:t.surfaces,objectiveOrName:t.objectiveOrName,sessionId:t.sessionId,cwd:t.cwd,packRootDir:t.packRootDir}),r=await e.start();return{session:e,...r,packDir:e.pack,spawns:[],startedAtMs:Date.now(),cwd:t.cwd}}catch(e){return console.warn("evidence: inline pack creation failed",e),null}}function kr(t,e,r){if(!t)return;t.session.noteSpawn(e),e.resolution&&(t.resolution=e.resolution);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));t.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function Er(t){if(t)return{packTestDir:t.packTestDir,ordinalOffset:t.session.nextOrdinalOffset()}}async function Sr(t,e){if(!t)return null;if(t.finalized)return t.finalized;let r=(n,i,o)=>e.log?e.log("warn",n,i,o):console.warn(`evidence: ${i}`,o??"");try{if(e.recordedTestPath)try{await t.session.writeDefinition(await Ir.readFile(e.recordedTestPath,"utf8"))}catch(s){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(s)})}let n=e.cdpBrowserCapture?await e.cdpBrowserCapture():void 0,i=await t.session.writeResult({steps:t.session.steps,spawns:t.spawns.length?t.spawns:[{resultCode:null}],externalIdInput:{...e.externalIdInput,execution_id:t.executionId},runnerEnv:Ee({cdpBrowser:n,resolution:t.resolution}),intentEnv:{model:e.model,platform:"Desktop",platform_type:"web"},durationMs:e.durationMs??Date.now()-t.startedAtMs,log:e.log});try{if(e.recordedTestPath){let s=It({cwd:e.cwd??t.cwd??process.cwd(),members:[{path:e.recordedTestPath,verdict:i,executionId:t.executionId,startedAt:new Date(t.startedAtMs).toISOString(),mode:"inline",local:e.local??!1}]});for(let a of s.warnings)r("EXEC_SYNC",a)}}catch(s){r("EXEC_SYNC","exec-sync failed",{error:String(s)})}try{let s=(e.coverageWriter??bt)(t.packDir,Y(e.cwd??t.cwd??process.cwd()));s.status==="skipped"&&r("EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${s.reason}`)}catch(s){r("EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(s)})}let o=await ke({executionId:t.executionId,testId:t.testId,saved:e.saved,runKind:"author",verdict:i,cwd:e.cwd??t.cwd,packDir:t.packDir,tuiLogPath:e.tuiLogPath,log:e.log,surface:"inline"});return t.finalized=o,e.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:t.executionId,verdict:i,valid:o.valid,pack:t.packDir,store_copy:o.storePath??null}),o}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as Ar,openSync as Or,readSync as Fr,closeSync as Lr}from"fs";import{basename as Tr,resolve as jr}from"path";import{createServer as Rr}from"http";import{createReadStream as Pr,promises as Cr}from"fs";import{randomBytes as $r}from"crypto";var J="127.0.0.1";function kt(t,e){if(!t)return null;let r=/^bytes=(\d*)-(\d*)$/.exec(t.trim());if(!r)return null;let[,n,i]=r;if(n===""&&i==="")return null;if(n===""){let a=Number(i);return a===0||e===0?"unsatisfiable":{start:Math.max(0,e-a),end:e-1}}let o=Number(n);if(o>=e)return"unsatisfiable";let s=i===""?e-1:Math.min(Number(i),e-1);return s<o?null:{start:o,end:s}}async function De(t){let e=$r(16).toString("hex"),r=Rr((i,o)=>{Dr(i,o,t,e).catch(()=>o.destroy())});await new Promise((i,o)=>{r.once("error",o),r.listen(t.port??0,J,()=>{r.removeListener("error",o),i()})});let n=r.address().port;return{port:n,urlFor:i=>`http://${J}:${n}/${e}/${encodeURIComponent(i)}`,close:()=>new Promise(i=>{r.close(()=>i()),r.closeAllConnections()})}}async function Dr(t,e,r,n){let i=t.url??"/",o=v=>{try{r.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:v,path:i})}catch{}};if(t.headers.host!==`${J}:${t.socket.localPort}`){o("host_mismatch"),e.writeHead(403).end();return}let s=t.headers.origin;if(s!==void 0&&!r.allowedOrigins.includes(s)){o("origin_denied"),e.writeHead(403).end();return}let a=s?{"Access-Control-Allow-Origin":s,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(t.method==="OPTIONS"){let v={...a,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};t.headers["access-control-request-private-network"]==="true"&&(v["Access-Control-Allow-Private-Network"]="true"),e.writeHead(204,v).end();return}if(t.method!=="GET"&&t.method!=="HEAD"){e.writeHead(405,a).end();return}let c;try{let v=new URL(t.url??"/",`http://${J}`).pathname.split("/");if(v.length!==3||v[1]!==n){o("bad_token"),e.writeHead(404,a).end();return}c=decodeURIComponent(v[2])}catch{o("not_found"),e.writeHead(404,a).end();return}let d=r.packs.get(c);if(!d){o("not_found"),e.writeHead(404,a).end();return}let l;try{let v=await Cr.stat(d);if(!v.isFile())throw new Error("not a file");l=v.size}catch{o("not_found"),e.writeHead(404,a).end();return}let p={...a,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(t.method==="HEAD"){e.writeHead(200,{...p,"Content-Length":String(l)}).end();return}let u=kt(t.headers.range,l);if(u==="unsatisfiable"){o("unsatisfiable"),e.writeHead(416,{...a,"Content-Range":`bytes */${l}`}).end();return}let[f,m,g]=u===null?[0,l-1,200]:[u.start,u.end,206],I={...p,"Content-Length":String(m-f+1)};if(g===206&&(I["Content-Range"]=`bytes ${f}-${m}/${l}`),e.writeHead(g,I),l===0){e.end();return}let b=Pr(d,{start:f,end:m});b.on("error",()=>e.destroy()),e.on("close",()=>b.destroy()),b.pipe(e)}function V(t,e){return(e??Ge(t).evidenceViewerUrl).replace(/\/+$/,"")}function Ae(t,e){return`${e}/?pack=${encodeURIComponent(t)}`}function Oe(t){return`evidence: view locally with \`kane-cli evidence serve ${t}\``}async function Nr(t,e,r={}){let n=r.out??(l=>process.stdout.write(l+`
10
+ `)),i=l=>(n(`error: ${l}`),2);if(e.env!=="prod"&&e.env!=="stage")return i(`invalid --env: ${String(e.env)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))return i("invalid --port: expected an integer 1-65535");let o;try{o=V(e.env,e.viewerUrl),new URL(o)}catch{return i(`invalid --viewer-url: ${e.viewerUrl}`)}if(t.length===0)return i("no pack paths given");let s=new Map;for(let l of t){let p=jr(l),u;try{u=Ar(p)}catch{return i(`${l}: not found`)}if(u.isDirectory())return i(`${l}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!u.isFile())return i(`${l}: not a regular file`);let f=Buffer.alloc(2),m=Or(p,"r");try{Fr(m,f,0,2,0)}finally{Lr(m)}if(f.toString("latin1")!=="PK")return i(`${l}: not a sealed evidence pack (zip magic missing)`);let g=Tr(p);if(s.has(g))return i(`duplicate pack basename: ${g} (URL names collide \u2014 rename one)`);s.set(g,p)}let a=r.log??((l,p,u)=>process.stderr.write(`warn: ${p} reason=${u.reason} path=${u.path}
11
+ `)),c;try{c=await De({packs:s,allowedOrigins:[new URL(o).origin],port:e.port,log:a})}catch(l){return i(`could not bind 127.0.0.1${e.port?`:${e.port}`:""} \u2014 ${l.message}`)}n(`serving ${s.size} pack${s.size===1?"":"s"} on http://127.0.0.1:${c.port}`);for(let l of s.keys()){let p=c.urlFor(l);n(l),n(` pack ${p}`),n(` viewer ${Ae(p,o)}`)}return n("press Ctrl-C to stop"),await(r.hold??Vr)(),await c.close(),0}function Vr(){return new Promise(t=>{let e=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of e)process.on("SIGINT",r);t()})})}import{promises as X}from"fs";import{tmpdir as zr}from"os";import{join as Rt,resolve as Le}from"path";var Mr=["error","prefer_first","prefer_latest","discard"],Br=["external_id.commit_id","external_id.test_id"];function Et(t){let e=t.replace(/-/g,"_");return Mr.includes(e)?e:null}function St(t){let e=t==="discard"?{on_collision:"discard"}:{on_collision:"error",identity:{keys:[...Br],on_same:t??"nest",on_different:t?"error":"split"}};return y({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:e,rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function Fe(t){try{if(!t.isTTY){t.log(Oe(t.packPath));return}let e=V(t.env);await(t.renderPrompt??Hr)(t.packPath,e)}catch(e){try{t.log(`evidence view failed \u2014 ${e.message}`)}catch{}}}async function Hr(t,e){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-DNCQ3A6R.js");await new Promise(o=>{let s=n(r.default.createElement(i,{packPath:t,viewerBase:e,onDone:()=>{s.unmount(),o()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function Gr(t,e,r=process.cwd(),n={}){let i=n.out??(u=>process.stdout.write(u+`
12
+ `)),o=n.err??(u=>process.stderr.write(u+`
13
+ `)),s=u=>(o(`evidence merge: ${u}`),2);if(!e.runId)return s("--run-id is required (merged identity is the caller's fact)");if(e.rules&&e.onCollision)return s("--rules and --on-collision are mutually exclusive");let a;if(e.onCollision!==void 0){let u=Et(e.onCollision);if(!u)return s(`invalid --on-collision: ${e.onCollision} (expected error | prefer-first | prefer-latest | discard)`);a=u}let c=[];for(let u of t){let f=await Ur(u,r);if(!f)return s(`no pack found for "${u}"`);c.push(f)}let d=e.out?Le(r,e.out):w(e.runId,r),l=null,p;e.rules?p=Le(r,e.rules):(l=await X.mkdtemp(Rt(zr(),"kane-merge-rules-")),p=Rt(l,"merge-rules.yaml"),await X.writeFile(p,St(a)));try{let u=await(n.mergeFn??Ue)(c,{runId:e.runId,out:d,rulesPath:p,title:e.title,finalize:e.finalize});return e.json?i(JSON.stringify(u)):Yr(i,u),u.output.finalized&&!e.json&&await(n.offer??Fe)({packPath:d,env:e.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:o}),0}catch(u){let f=u instanceof Error?u.message:String(u);return u?.code==="ABORT"?(o(`evidence merge: aborted \u2014 ${f}`),1):s(f)}finally{l&&await X.rm(l,{recursive:!0,force:!0}).catch(()=>{})}}async function Ur(t,e){let r=Le(e,t);if(await Pt(r))return r;let n=w(t,e);return await Pt(n)?n:null}async function Pt(t){try{return await X.stat(t),!0}catch{return!1}}function Yr(t,e){let{packs:r,tests:n,output:i}=e;t(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let o of r.skipped)t(` skipped ${o.runId}: ${o.rule} \u2014 ${o.reason}`);for(let o of n.collisions){let s;o.action==="nest"?s=`nested into ${o.folder}, latest ${o.winner}`:o.action==="split"?s=`split into ${o.folder}`:s=`winner ${o.winner}`,t(` collision ${o.test}: ${s} (${o.rule})`)}for(let o of n.discarded)t(` discarded ${o}`)}import{copyFileSync as Kr,existsSync as Te,mkdirSync as Wr}from"fs";import{join as Ct}from"path";function Jr(t,e,r){try{let n=Ct(t,"auteur","execution.json");if(Te(n))return!0;for(let i of e)if(!(!i||!Te(i)))return Wr(Ct(t,"auteur"),{recursive:!0}),Kr(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:e.find(i=>i&&Te(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as Xr}from"fs";import{join as Zr}from"path";function Ne(t){let e=[],r=!0,n=o=>{if(o===null||typeof o!="object")return;let s=o;if(Array.isArray(s.operations))for(let a of s.operations){let c=a?.operation_id;typeof c=="string"&&c&&e.push(c)}if(Array.isArray(s.children)){s.content_type!=="generative_block"&&(r=!1);for(let a of s.children)n(a)}if(Array.isArray(s.branches)){r=!1;for(let a of s.branches){let c=a?.children;if(Array.isArray(c))for(let d of c)n(d)}}},i=t?.instructions;if(Array.isArray(i))for(let o of i)n(o);return{ids:e,linear:r}}function Qr(t){return Ne(t).ids}function je(t,e){let r=new Set(e.map(a=>a.action_id).filter(Boolean)),n=-1;for(let a of r){let c=t.indexOf(a);c>n&&(n=c)}let i=e.reduce((a,c)=>Math.max(a,c.ordinal),0),o=new Set,s=[];for(let a of t.slice(n+1))r.has(a)||o.has(a)||(o.add(a),s.push({id:a,ordinal:++i,status:"skipped",action_id:a}));return s}function $t(t,e){let r=new Set(e),n=t.filter(o=>o.action_id);if(n.some(o=>r.has(o.action_id))||n.length>e.length)return null;let i=0;return t.map(o=>o.action_id?{...o,action_id:e[i++]}:o)}function qr(t,e){if(t.length>e.length)return!1;for(let r=0;r<t.length;r++)if(e[r]!==t[r].action_id)return!1;return!0}function en(t,e,r,n=!0){if(e.length===0)return{steps:t,tail:[]};let i=(r&&n?$t(t,e):null)??t,o=i.filter(a=>a.action_id),s=new Set(e);return o.length>0&&o.every(a=>s.has(a.action_id))?{steps:i,tail:je(e,i)}:o.length>0&&!qr(o,e)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:je(e,i)}}function Dt(t){try{let e=Xr(Zr(t,"auteur","execution.json"),"utf8");return Ne(JSON.parse(e))}catch{return{ids:[],linear:!0}}}function tn(t){return Dt(t).ids}export{$ as a,re as b,ne as c,ie as d,oe as e,se as f,ae as g,ce as h,de as i,Lt as j,ue as k,le as l,Tt as m,jt as n,pe as o,ge as p,ve as q,he as r,we as s,ye as t,Nt as u,Vt as v,_e as w,Mt as x,xe as y,Ie as z,be as A,at as B,ke as C,Ee as D,ut as E,Jt as F,j as G,tr as H,xt as I,It as J,bt as K,br as L,kr as M,Er as N,Sr as O,kt as P,De as Q,V as R,Ae as S,Oe as T,Nr as U,Fe as V,Gr as W,Jr as X,Ne as Y,Qr as Z,je as _,$t as $,en as aa,Dt as ba,tn as ca};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as s,k as l}from"./chunk-MMPFU2YC.js";import{readFileSync as g,writeFileSync as o,mkdirSync as i,existsSync as p}from"fs";import{dirname as a}from"path";var n={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:l,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0},c=class{constructor(r=s){this.path=r}exists(){return p(this.path)}load(){try{let r=g(this.path,"utf-8"),e=JSON.parse(r);return{...n,...e,code_export:{...n.code_export,...e.code_export??{}},generate:{...n.generate,...e.generate??{}}}}catch{return{...n,code_export:{...n.code_export},generate:{...n.generate}}}}set(r,e){try{let t=this.load();t[r]=e,i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
2
+ import{d as s,k as l}from"./chunk-C4G7RVJ6.js";import{readFileSync as g,writeFileSync as o,mkdirSync as i,existsSync as p}from"fs";import{dirname as a}from"path";var n={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:l,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0},c=class{constructor(r=s){this.path=r}exists(){return p(this.path)}load(){try{let r=g(this.path,"utf-8"),e=JSON.parse(r);return{...n,...e,code_export:{...n.code_export,...e.code_export??{}},generate:{...n.generate,...e.generate??{}}}}catch{return{...n,code_export:{...n.code_export},generate:{...n.generate}}}}set(r,e){try{let t=this.load();t[r]=e,i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
3
3
  `)}catch(t){let d=t instanceof Error?t.message:String(t);process.stderr.write(`[config] Failed to save config: ${d}
4
4
  `)}}save(r){try{let t={...this.load(),...r};i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
5
5
  `)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[config] Failed to save config: ${t}
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var i=[/^kane-cli context extract --resume [A-Za-z0-9][A-Za-z0-9._-]*( --mode agent)?$/,/^kane-cli design tests --resume [A-Za-z0-9][A-Za-z0-9._-]*( --mode agent)?$/,/^kane-cli design tests --use-case \S+( --phase [a-z-]+)?( --force)?( --mode agent)?$/,/^kane-cli context extract( --source \S+)?( --force)?( --mode agent)?$/,/^kane-cli context ingest$/,/^kane-cli context view \S+$/,/^kane-cli maintain evolve \S+$/,/^kane-cli maintain reconcile$/,/^kane-cli design explain \S+$/,/^kane-cli testrun run$/,/^kane-cli context sessions( list)?$/];function r(e){return i.some(s=>s.test(e))}function c(e,s){return e==="design"?`kane-cli design tests --resume ${s}`:`kane-cli context extract --resume ${s}`}function a(e){try{let s=[];if(e.resumeSid&&s.push({cmd:c(e.resumeVerb??"extract",e.resumeSid),why:e.pendingQuestions?`${e.pendingQuestions} question${e.pendingQuestions===1?"":"s"} waiting \u2014 resume to answer`:"resume the paused session",title:"Resume the session"}),e.heldStaged&&s.push({cmd:e.heldStaged.retryCmd,why:`staged work is held under ${e.heldStaged.key} \u2014 retry the commit once the holder finishes`,title:"Retry the held commit"}),e.lockAlternatives&&e.lockAlternatives.length>0){let t=e.lockAlternatives[0];s.push({cmd:`kane-cli design tests --use-case ${t}`,why:`the target is held \u2014 ${t} is the next candidate by risk`,title:`Design ${t} instead`})}if(e.topRiskUndesignedUc){let t=e.topRiskUndesignedUc;s.push({cmd:`kane-cli design tests --use-case ${t.ref}`,why:`${t.title} is ${t.risk??"the top"}-risk and has no live design`,title:`Design ${t.title}`})}if(e.unextractedSources&&e.unextractedSources.length>0){let t=e.unextractedSources[0],n=e.unextractedSources.length-1;s.push({cmd:`kane-cli context extract --source ${t}`,why:`${t} is ingested but not extracted${n>0?` (+${n} more)`:""}`,title:`Extract ${t}`})}return s.filter(t=>t.why.length>0&&t.cmd.startsWith("kane-cli ")&&r(t.cmd)).slice(0,4)}catch{return[]}}export{i as a,r as b,c,a as d};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as g}from"./chunk-MMPFU2YC.js";import{readFileSync as o,writeFileSync as h,mkdirSync as u,readdirSync as a,unlinkSync as s,existsSync as l,chmodSync as f}from"fs";import{join as n,dirname as P}from"path";var d=class{baseDir;profilesDir;configFile;constructor(t=g){this.baseDir=t,this.profilesDir=n(t,"profiles"),this.configFile=n(t,"config.json")}readConfig(){try{return JSON.parse(o(this.configFile,"utf-8"))}catch{return{}}}writeConfig(t){u(this.baseDir,{recursive:!0,mode:448}),h(this.configFile,JSON.stringify(t,null,2)+`
2
+ import{c as g}from"./chunk-C4G7RVJ6.js";import{readFileSync as o,writeFileSync as h,mkdirSync as u,readdirSync as a,unlinkSync as s,existsSync as l,chmodSync as f}from"fs";import{join as n,dirname as P}from"path";var d=class{baseDir;profilesDir;configFile;constructor(t=g){this.baseDir=t,this.profilesDir=n(t,"profiles"),this.configFile=n(t,"config.json")}readConfig(){try{return JSON.parse(o(this.configFile,"utf-8"))}catch{return{}}}writeConfig(t){u(this.baseDir,{recursive:!0,mode:448}),h(this.configFile,JSON.stringify(t,null,2)+`
3
3
  `),f(this.configFile,384)}getActiveProfile(){return this.readConfig().active_profile??null}setActiveProfile(t){let i=this.readConfig();i.active_profile=t,this.writeConfig(i)}getDefaultEnv(){return this.readConfig().default_env??"prod"}setDefaultEnv(t){let i=this.readConfig();i.default_env=t,this.writeConfig(i)}credentialsPath(t,i){return n(this.profilesDir,t,i,"credentials")}clientPath(t,i){return n(this.profilesDir,t,i,"client.json")}basicAuthPath(t,i){return n(this.profilesDir,t,i,"basic-auth")}profileConfigPath(t,i){return n(this.profilesDir,t,i,"profile-config.json")}saveProfileConfig(t,i,r){let e=this.loadProfileConfig(t,i)??{};this.writeSecure(this.profileConfigPath(t,i),{...e,...r})}loadProfileConfig(t,i){try{return JSON.parse(o(this.profileConfigPath(t,i),"utf-8"))}catch{return null}}writeSecure(t,i){try{u(P(t),{recursive:!0,mode:448}),h(t,JSON.stringify(i,null,2)+`
4
4
  `),f(t,384)}catch(r){let e=r instanceof Error?r.message:String(r);process.stderr.write(`[auth] Failed to save credentials: ${e}
5
5
  `)}}saveCredentials(t,i,r){this.writeSecure(this.credentialsPath(t,i),r)}loadCredentials(t,i){try{return JSON.parse(o(this.credentialsPath(t,i),"utf-8"))}catch{return null}}saveClient(t,i,r){this.writeSecure(this.clientPath(t,i),r)}loadClient(t,i){try{return JSON.parse(o(this.clientPath(t,i),"utf-8"))}catch{return null}}getActiveCredentials(){let t=this.getActiveProfile();if(!t)return{credentials:null,profile:null,env:null};let i=this.getDefaultEnv();return{credentials:this.loadCredentials(t,i),profile:t,env:i}}saveBasicAuth(t,i,r){this.writeSecure(this.basicAuthPath(t,i),r)}loadBasicAuth(t,i){try{return JSON.parse(o(this.basicAuthPath(t,i),"utf-8"))}catch{return null}}deleteBasicAuth(t,i){try{s(this.basicAuthPath(t,i))}catch{}}resolveAuth(){let t=this.getActiveProfile();if(!t)return null;let i=this.getDefaultEnv(),r=this.loadBasicAuth(t,i);return r?{method:"basic",...r,profile:t,env:i}:this.loadCredentials(t,i)?{method:"oauth",profile:t,env:i}:null}listProfiles(){let t=[];try{for(let i of a(this.profilesDir)){let r=n(this.profilesDir,i);try{for(let e of a(r)){let c=n(r,e),v=l(n(c,"credentials")),p=l(n(c,"client.json")),y=l(n(c,"basic-auth"));(v||p||y)&&t.push({profile:i,env:e})}}catch{}}}catch{}return t}deleteProfile(t,i){try{s(this.credentialsPath(t,i))}catch{}if(this.getActiveProfile()===t){let r=this.readConfig();delete r.active_profile,this.writeConfig(r)}}deleteProfileFull(t,i){if(i){try{s(this.credentialsPath(t,i))}catch{}try{s(this.clientPath(t,i))}catch{}try{s(this.basicAuthPath(t,i))}catch{}try{s(this.profileConfigPath(t,i))}catch{}}else try{let r=n(this.profilesDir,t);for(let e of a(r)){try{s(n(r,e,"credentials"))}catch{}try{s(n(r,e,"client.json"))}catch{}try{s(n(r,e,"basic-auth"))}catch{}try{s(n(r,e,"profile-config.json"))}catch{}}}catch{}}};export{d as a};
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{existsSync as f,fsyncSync as G,mkdirSync as X,readFileSync as l,readdirSync as P,renameSync as w,rmSync as _,writeFileSync as C,openSync as K,closeSync as q}from"fs";import{randomBytes as z}from"crypto";import{join as O}from"path";var d=class extends Error{constructor(t,i){super(`${t}: ${i}`);this.code=t}},F=1440*60*1e3,H=/^[A-Za-z0-9][A-Za-z0-9._-]*$/,E=n=>O(n,"sessions"),h=(n,e)=>O(E(n),e),g=(n,e)=>O(h(n,e),"state.json"),m=(n,e)=>O(h(n,e),".lock"),v=n=>(n?.now??(()=>new Date))();function M(n){if(!Number.isInteger(n)||n<=0)return!1;try{return process.kill(n,0),!0}catch(e){return e.code==="EPERM"}}function N(n,e){let t=`${n}.tmp-${process.pid}`,i=K(t,"w");try{C(i,e,{mode:384}),G(i)}finally{q(i)}w(t,n)}function b(n,e,t,i=0){if(i>20)throw new d("SESSION_LOCKED",`${e}: lock contention did not settle`);let o=m(n,e),s=z(8).toString("hex"),c=JSON.stringify({pid:process.pid,ts:t.toISOString(),nonce:s})+`
3
+ `;try{let r=K(o,"wx",384);return C(r,c),q(r),s}catch(r){if(r.code!=="EEXIST")throw r;let u=!1,p;try{let a=JSON.parse(l(o,"utf8")),y=t.getTime()-new Date(a.ts).getTime();u=!M(a.pid)||y>=F,p=a.nonce}catch{u=!0}if(!u)throw new d("SESSION_LOCKED",`${e} is held by another live process`);let S=`${o}.break-${s}`;try{w(o,S);let a;try{a=JSON.parse(l(S,"utf8"))}catch{a=null}if(a===null||a.nonce===p)_(S,{force:!0});else try{w(S,o)}catch{_(S,{force:!0})}}catch(a){if(a.code!=="ENOENT")throw a}return b(n,e,t,i+1)}}function j(n,e,t,i,o){let s=()=>{try{if(JSON.parse(l(m(n,e),"utf8")).nonce!==i)throw new d("SESSION_LOCK_LOST",`${e} lock was taken over`)}catch(r){throw r instanceof d?r:new d("SESSION_LOCK_LOST",`${e} lock file unreadable/gone`)}},c=()=>N(g(n,e),JSON.stringify(t)+`
4
+ `);return{get state(){return t},isApplied:r=>t.applied_events.includes(r),markApplied(r){s(),t={...t,applied_events:[...new Set([...t.applied_events,...r])].sort()},c()},reconcileSave(r){s(),t={...t,applied_events:[...new Set([...t.applied_events,...r.appliedEvents])].sort(),held_receipts:r.heldReceipts,pending:r.pending},c()},save(r){s();let{agent_state:u,pending:p,assumed:S,read_basis:a,corpus_cursor:y,expires_at:I,force:k,conv_source:x,held_receipts:T,force_scope:D,user_session_id:J,checkpoint:L,target_pins:$,ingest_registry:R,ingest_schedule:A}=r;t={...t,...u!==void 0?{agent_state:u}:{},...p!==void 0?{pending:p}:{},...S!==void 0?{assumed:S}:{},...a!==void 0?{read_basis:a}:{},...y!==void 0?{corpus_cursor:y}:{},...I!==void 0?{expires_at:I}:{},...k!==void 0?{force:k}:{},...x!==void 0?{conv_source:x}:{},...T!==void 0?{held_receipts:T}:{},...D!==void 0?{force_scope:D}:{},...J!==void 0?{user_session_id:J}:{},...L!==void 0?{checkpoint:L}:{},...$!==void 0?{target_pins:$}:{},...R!==void 0?{ingest_registry:R}:{},...A!==void 0?{ingest_schedule:A}:{}},c()},complete(){s(),_(h(n,e),{recursive:!0,force:!0})},release(){try{s(),_(m(n,e),{force:!0})}catch(r){if(r instanceof d||r.code==="ENOENT")return;throw r}}}}function U(n,e,t){if(!H.test(e.sid))throw new d("SESSION_MISSING",`bad sid ${JSON.stringify(e.sid)}`);let i=v(t);if(f(g(n,e.sid)))throw new d("SESSION_LOCKED",`${e.sid} already exists \u2014 resume it`);X(h(n,e.sid),{recursive:!0,mode:448});let o=b(n,e.sid,i),s={schema:1,applied_events:[],...e};return N(g(n,e.sid),JSON.stringify(s)+`
5
+ `),j(n,e.sid,s,o,t)}function V(n,e,t){if(!H.test(e)||!f(g(n,e)))throw new d("SESSION_MISSING",`no session ${e}`);let i=v(t),o=b(n,e,i),s=JSON.parse(l(g(n,e),"utf8"));if(new Date(s.expires_at).getTime()<=i.getTime())throw _(m(n,e),{force:!0}),new d("SESSION_EXPIRED",`${e} expired at ${s.expires_at}`);let c={...s,expires_at:new Date(i.getTime()+F).toISOString()};return N(g(n,e),JSON.stringify(c)+`
6
+ `),j(n,e,c,o,t)}function W(n,e){let t=g(n,e);return f(t)?JSON.parse(l(t,"utf8")):null}function Y(n){let e=E(n);if(!f(e))return[];let t=[];for(let i of P(e)){let o=g(n,i);if(f(o))try{let s=JSON.parse(l(o,"utf8"));t.push({sid:s.sid,mode:s.mode,created_at:s.created_at,expires_at:s.expires_at,pendingCount:s.pending.questions.length+s.pending.proposals.length,verb:s.verb,use_case:s.use_case})}catch{t.push({sid:i,mode:"?",created_at:"",expires_at:"",pendingCount:0,corrupt:!0})}}return t.sort((i,o)=>i.created_at<o.created_at?-1:1)}function ee(n,e){let t=v(e),i=[],o=[],s=E(n);if(!f(s))return{removed:i,skipped:o};for(let c of P(s)){if(e?.sid&&c!==e.sid)continue;let r=!1,u=!1;try{let p=JSON.parse(l(g(n,c),"utf8"));r=new Date(p.expires_at).getTime()<=t.getTime()}catch{u=!0}if(e?.sid||e?.all||r||u&&e?.all){try{let p=JSON.parse(l(m(n,c),"utf8"));if(M(p.pid)&&p.pid!==process.pid){o.push({sid:c,reason:`in use by live pid ${p.pid}`});continue}}catch{}_(h(n,c),{recursive:!0,force:!0}),i.push(c)}}return{removed:i,skipped:o}}export{d as a,U as b,V as c,W as d,Y as e,ee as f};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as L,b as R}from"./chunk-T63R6QT4.js";import{v as I}from"./chunk-3STZLM5J.js";import{a as N}from"./chunk-M7WQM4UA.js";import{e as G,g as S}from"./chunk-5YPBPZUR.js";import{existsSync as P,readFileSync as D}from"fs";function z(d){let s=R(d),g=new Map(Object.entries(s.heads)),l=new Map(Object.entries(s.trust)),a=new Map(Object.entries(s.nodeLabel)),i=new Map(Object.entries(s.superseded)),f=new Map(Object.entries(s.names)),q=new Map(Object.entries(s.archivedReason)),T=new Set(s.appliedEvents),O=new Map(Object.entries(s.conv)),k=e=>s.media[e]??{format:"text",media_type:"text/plain",anchors_supported:["L-L"]},m=new Map;for(let[e,t]of f)m.set(t,e);let h=new Map,x=e=>{if(h.has(e))return h.get(e);if(!a.has(e))return h.set(e,null),null;let t=L(d,e);if(!P(t))throw new N(`derived node file missing for ${e} \u2014 run kane-cli context rebuild`);let n=JSON.parse(D(t,"utf8"));return h.set(e,n),n},b=e=>{let t=e,n=new Set;for(;i.has(t)&&!n.has(t);){n.add(t);let r=i.get(t);if(typeof r!="string")break;t=r}return t},w=null,H=e=>{let t=m.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 n=new Set,r=e;for(;!n.has(r);){n.add(r);let c=w.get(r);if(c===void 0)return null;let o=m.get(c);if(o!==void 0)return o;r=c}return null},C=e=>{I.test(e)&&(e=e.toLowerCase());let t=g.get(e),n=a.has(e)?e:f.get(e)??(typeof t=="string"?t:void 0);if(n===void 0||!a.has(n))return null;let r=b(n);return{cid:n,tip:r,superseded:i.has(n)||i.has(r)}},M=new Map;for(let e of Object.values(s.forward))for(let t of e){let n=M.get(t.dst);n?n.push(t):M.set(t.dst,[t])}let v=e=>(e??[]).filter(t=>!i.has(t.ecid)),E=e=>v(M.get(e)),y=e=>E(e).filter(t=>t.type===G.DERIVES),_=e=>v(s.forward[e]).some(t=>S(t.type)?.pin?.comparesTo==="dst_tip"&&i.has(t.dst)),j=e=>{if(i.has(e))return"superseded";let t=y(e);if(t.length===0)return _(e)?"stale":"fresh";let n=new Map;for(let o of t)n.set(o.props.source_id,o);let r=!1,c=!1;for(let[o,p]of n){let u=g.get(o);if(u!=null&&(r=!0,u!==p.props.source_cid)){let F=O.get(o)?.chain;(!F||!F.includes(p.props.source_cid))&&(c=!0)}}return r?c||_(e)?"stale":"fresh":"orphaned"};return{heads:g,trust:l,nodeLabel:a,superseded:i,names:f,nameOf:m,archivedReason:q,appliedEvents:T,convChains:O,mediaOf:k,extractedSourceCids:new Set(s.extracted),extractionCompleteness:new Map(Object.entries(s.completeness??{}).map(([e,{seq:t,...n}])=>[e,n])),designOf:new Map(Object.entries(s.design_of??{})),designGenerationOf:new Map(Object.entries(s.design_generation??{})),latestHash:s.applied.hash,lastSeq:s.applied.seq,hasNode:e=>a.has(e),getNode:x,byLabel:e=>[...a.entries()].filter(([,t])=>t===e).map(([t])=>({cid:t,content:x(t)?.content??{}})),edgesFrom:e=>v(s.forward[e]),edgesInto:E,derivesInto:y,resolve:C,tipOf:b,displayNameOf:H,stale:j,staleList:()=>[...a.keys()].map(e=>({cid:e,state:j(e)})).filter(e=>e.state!=="fresh"),execHistory:e=>{let t=C(e);if(!t)return[];let n=b(t.cid),r=new Set([n]),c=!0;for(;c;){c=!1;for(let[p,u]of i)u!==null&&r.has(u)&&!r.has(p)&&(r.add(p),c=!0)}let o=[];for(let p of Object.entries(s.exec??{}))r.has(p[0])&&o.push(...p[1]);return o.sort((p,u)=>p.started_at<u.started_at?-1:1)}}}function B(d,s){if(d.stale(s)!=="stale")return!1;let g=new Map;for(let l of d.derivesInto(s))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(s)){if(S(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};