@testmuai/kane-cli 0.6.6 → 0.6.7

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 (168) hide show
  1. package/dist/{ChatSurface-LV3KW6WN.js → ChatSurface-Y2M6HB2R.js} +1 -1
  2. package/dist/{ChromeProfilePicker-6PLUQ5TW.js → ChromeProfilePicker-IW3K43VC.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-I4F56IVK.js → CliFeedbackPrompt-ZJ4LZGPK.js} +1 -1
  4. package/dist/{CliUploadProgress-ULRSPKY3.js → CliUploadProgress-SMPVN7Q6.js} +1 -1
  5. package/dist/{ConfigView-7NMYALEA.js → ConfigView-RTAGKZH4.js} +1 -1
  6. package/dist/EvidenceViewOffer-LHPIZUGQ.js +2 -0
  7. package/dist/{FolderPicker-4IOVDO2P.js → FolderPicker-QUY7LNVZ.js} +1 -1
  8. package/dist/{HelpView-SHMVMHNU.js → HelpView-47J2NZWJ.js} +1 -1
  9. package/dist/{InfoBox-W2LZVGQS.js → InfoBox-G63WZAMH.js} +1 -1
  10. package/dist/{LinksBox-ZS25VTBY.js → LinksBox-2HIHDT5K.js} +1 -1
  11. package/dist/{ProfilesView-XBBRIQ3U.js → ProfilesView-TUXQXPXJ.js} +1 -1
  12. package/dist/{ProjectPicker-AUN47FXS.js → ProjectPicker-VUABWG2P.js} +1 -1
  13. package/dist/{SaveSessionPrompt-Z2K225VN.js → SaveSessionPrompt-PNVGNLGO.js} +1 -1
  14. package/dist/SingleShotApp-BZV5CULT.js +2 -0
  15. package/dist/{SummaryBox-4T545XRB.js → SummaryBox-36MDDDYQ.js} +1 -1
  16. package/dist/TestMdRunView-A655PMEY.js +2 -0
  17. package/dist/{WhoamiView-GCVD35EX.js → WhoamiView-LHU6RGIY.js} +1 -1
  18. package/dist/{bind-JLMT57Q3.js → bind-E67W2DXG.js} +2 -2
  19. package/dist/{bridge-PDJEOSAJ.js → bridge-WVFTWHKP.js} +1 -1
  20. package/dist/{changelog-D65HWZDM.js → changelog-D4Y5QJIZ.js} +1 -1
  21. package/dist/chat-committer-WOTCC7L3.js +2 -0
  22. package/dist/chat-controller-MONWZKS7.js +4 -0
  23. package/dist/{chunk-HA5GE57Z.js → chunk-3CY3DZDH.js} +2 -2
  24. package/dist/{chunk-BLSZ4H5W.js → chunk-3GOZ7R4G.js} +3 -3
  25. package/dist/{chunk-AKHUNBQS.js → chunk-3NR6OTHL.js} +1 -1
  26. package/dist/{chunk-KI2DVQSA.js → chunk-5J3HQZNU.js} +1 -1
  27. package/dist/{chunk-5JJ245FW.js → chunk-6EC54ZHT.js} +1 -1
  28. package/dist/{chunk-WJGBXJT4.js → chunk-77PBBYRZ.js} +2 -2
  29. package/dist/{chunk-GYW7LVVL.js → chunk-7Z64BL5D.js} +1 -1
  30. package/dist/{chunk-MSPZOEFB.js → chunk-7ZMYAXES.js} +1 -1
  31. package/dist/{chunk-XQL53VB7.js → chunk-A2AZQ4PQ.js} +1 -1
  32. package/dist/{chunk-JU5KRCKD.js → chunk-AASBJJCU.js} +1 -1
  33. package/dist/{chunk-BV5QKFMJ.js → chunk-BBZBXSTP.js} +1 -1
  34. package/dist/chunk-CIFVUX3B.js +4 -0
  35. package/dist/chunk-CVOGP253.js +2 -0
  36. package/dist/{chunk-OFEOWKM3.js → chunk-DCWCANNS.js} +1 -1
  37. package/dist/{chunk-C42WWO7Y.js → chunk-DL5CXC64.js} +1 -1
  38. package/dist/chunk-DNNZ353O.js +4 -0
  39. package/dist/chunk-E4EHWO3J.js +4 -0
  40. package/dist/{chunk-24OFJ7SE.js → chunk-EDM6YACR.js} +1 -1
  41. package/dist/{chunk-HWA7WD44.js → chunk-FYSWQ4K7.js} +1 -1
  42. package/dist/{chunk-JTEY32TL.js → chunk-G5CYSC23.js} +1 -1
  43. package/dist/chunk-GAD6IBZ6.js +12 -0
  44. package/dist/chunk-GLVDOR5G.js +2 -0
  45. package/dist/chunk-I37UOX73.js +14 -0
  46. package/dist/chunk-IAHKTEET.js +2 -0
  47. package/dist/{chunk-LEQ2B3PR.js → chunk-IX34JIXK.js} +1 -1
  48. package/dist/{chunk-WWH7CW5R.js → chunk-IYTHPCQ2.js} +1 -1
  49. package/dist/chunk-JR37W7IJ.js +6 -0
  50. package/dist/{chunk-3Z3UIW5H.js → chunk-KVAALPTA.js} +1 -1
  51. package/dist/{chunk-ZZLR3O5A.js → chunk-L4JIMNKW.js} +1 -1
  52. package/dist/{chunk-S2C62SDY.js → chunk-LVWB6TB2.js} +1 -1
  53. package/dist/chunk-MBXWXBDM.js +4 -0
  54. package/dist/{chunk-24VYAMMK.js → chunk-MTG2LRGV.js} +1 -1
  55. package/dist/{chunk-D7L6UW5Z.js → chunk-NEHF4C6X.js} +1 -1
  56. package/dist/{chunk-6SGPN76K.js → chunk-NMKZHHB6.js} +1 -1
  57. package/dist/{chunk-KNCHEM6A.js → chunk-NMZATEKQ.js} +8 -8
  58. package/dist/{chunk-2PQXEEVY.js → chunk-NVGBE2DR.js} +1 -1
  59. package/dist/{chunk-JV356AYH.js → chunk-OPDJD7WS.js} +2 -2
  60. package/dist/{chunk-6GTOYTCQ.js → chunk-OSALXGD4.js} +1 -1
  61. package/dist/{chunk-RV2NXHIC.js → chunk-QG6LJCZG.js} +1 -1
  62. package/dist/{chunk-MCQXRJGH.js → chunk-QHFUDBQH.js} +1 -1
  63. package/dist/{chunk-EOLQUB4Q.js → chunk-QVJ7C4GW.js} +1 -1
  64. package/dist/{chunk-VBCE4U4B.js → chunk-QYTMD6NM.js} +1 -1
  65. package/dist/{chunk-6CZIEK6B.js → chunk-R7NNIQMH.js} +1 -1
  66. package/dist/{chunk-L26LU6TU.js → chunk-RBLZUDMZ.js} +2 -2
  67. package/dist/chunk-RGDQMKNJ.js +4 -0
  68. package/dist/{chunk-4SXD6XWV.js → chunk-RGQIBS32.js} +1 -1
  69. package/dist/{chunk-UZJ7MRBV.js → chunk-RWIHSR4H.js} +1 -1
  70. package/dist/{chunk-6XHAXAL2.js → chunk-SK2GVMTJ.js} +1 -1
  71. package/dist/{chunk-6NIV7AVZ.js → chunk-TADJIOHV.js} +1 -1
  72. package/dist/{chunk-EWTX7HSU.js → chunk-TSWGQKUK.js} +2 -2
  73. package/dist/{chunk-2BWRAY3Y.js → chunk-TTJ4XMWP.js} +1 -1
  74. package/dist/{chunk-LLS47HUA.js → chunk-UQVKNUYO.js} +1 -1
  75. package/dist/chunk-UZWOHCFX.js +4 -0
  76. package/dist/chunk-VLC24QVT.js +2 -0
  77. package/dist/{chunk-2WO7G2HO.js → chunk-WFQUDSKY.js} +1 -1
  78. package/dist/{chunk-LABIRPOT.js → chunk-WJG4ZPUH.js} +1 -1
  79. package/dist/{chunk-N6DO2LBH.js → chunk-X47VFBIV.js} +1 -1
  80. package/dist/{chunk-MY32TBBR.js → chunk-XUHVQ5VL.js} +1 -1
  81. package/dist/{chunk-JF7Q2I45.js → chunk-Y6HPW2OQ.js} +1 -1
  82. package/dist/{chunk-32GP7KTM.js → chunk-YB54MHKU.js} +1 -1
  83. package/dist/{chunk-RIMJDJWY.js → chunk-YTZUYCFZ.js} +1 -1
  84. package/dist/{chunk-4A6BLXQN.js → chunk-YZBLBPOE.js} +2 -2
  85. package/dist/{chunk-P4HW2NTZ.js → chunk-Z34XRBKQ.js} +1 -1
  86. package/dist/{chunk-FJTWJ243.js → chunk-ZPDM6FO7.js} +1 -1
  87. package/dist/{config-6PAZZ7CR.js → config-BZ7C5NU5.js} +1 -1
  88. package/dist/cover-cmd-DN5D6A3S.js +2 -0
  89. package/dist/{credentials-BJCIWQWA.js → credentials-BPJL6YIZ.js} +1 -1
  90. package/dist/{descriptor-EHK3DRCZ.js → descriptor-KXDJ4XYD.js} +1 -1
  91. package/dist/evidence-E5B24ZO6.js +2 -0
  92. package/dist/evolve-cmd-V7H4PLCX.js +2 -0
  93. package/dist/explain-VTRHEVUQ.js +2 -0
  94. package/dist/{explain-cmd-U367SD4N.js → explain-cmd-AG6ZDXV6.js} +1 -1
  95. package/dist/{explain-cmd-KV5YUXKB.js → explain-cmd-NZPC6537.js} +1 -1
  96. package/dist/{extract-bind-YS7C4KZ3.js → extract-bind-3QBBCWYE.js} +2 -2
  97. package/dist/{extract-cmd-Z4PMDIMZ.js → extract-cmd-4PGUDJMU.js} +1 -1
  98. package/dist/gaps-cmd-42LPHWFP.js +2 -0
  99. package/dist/{generate-headless-IWY32HC4.js → generate-headless-NZUDYIKJ.js} +2 -2
  100. package/dist/index.js +12 -12
  101. package/dist/ingest-GOKIMEP4.js +2 -0
  102. package/dist/ingest-cmd-BTYHVJ33.js +3 -0
  103. package/dist/{interactive-bind-ZIIJDRBU.js → interactive-bind-TKRWAPJU.js} +3 -3
  104. package/dist/lifecycle-cmd-E6AXODQD.js +2 -0
  105. package/dist/list-cmd-RJVLH2GR.js +3 -0
  106. package/dist/{list-commands-SSXJQGE7.js → list-commands-55RCFEOL.js} +1 -1
  107. package/dist/logical-ids-QZQRQ3TV.js +2 -0
  108. package/dist/login-flow-WNIHDQXF.js +2 -0
  109. package/dist/maintenance-cmd-UJG4LPWD.js +2 -0
  110. package/dist/pdf-convert-KYXI4FU4.js +2 -0
  111. package/dist/{persist-recorded-session-3AOYZJT2.js → persist-recorded-session-HK7JUONC.js} +1 -1
  112. package/dist/pipeline-FTLXJQRT.js +2 -0
  113. package/dist/readmodel-KTNI6QDC.js +2 -0
  114. package/dist/reconcile-cmd-5XC4AUSJ.js +2 -0
  115. package/dist/{recording-banner-KKEUWS3N.js → recording-banner-5IYX2KBV.js} +1 -1
  116. package/dist/{require-project-folder-NPTKR2AW.js → require-project-folder-J4Q4FRQ4.js} +1 -1
  117. package/dist/revert-FRXNIP5R.js +2 -0
  118. package/dist/review-cmd-XB2DCTMZ.js +4 -0
  119. package/dist/run-2RFR2ASQ.js +2 -0
  120. package/dist/run-3ZYJQBBC.js +2 -0
  121. package/dist/{run-test-md-QNC6KDMN.js → run-test-md-WN6BH3PC.js} +2 -2
  122. package/dist/{skill-installer-ULFNSE6X.js → skill-installer-4HYPUBNB.js} +1 -1
  123. package/dist/{spawner-DWONVIPI.js → spawner-VD6YFZ43.js} +1 -1
  124. package/dist/tcg-generate-77QKMB63.js +2 -0
  125. package/dist/{testmd-actions-S3ZNOZEK.js → testmd-actions-LT5FNIR6.js} +1 -1
  126. package/dist/token-refresh-PCOAZBKK.js +2 -0
  127. package/dist/{validate-basic-4OLDKIA2.js → validate-basic-XWGKC5VF.js} +1 -1
  128. package/dist/{version-check-UL4S6R4N.js → version-check-6FDTS6MK.js} +1 -1
  129. package/dist/{view-cmd-FRMQF76B.js → view-cmd-PCDG3FIC.js} +1 -1
  130. package/dist/walk-session-YS62CWX5.js +2 -0
  131. package/package.json +7 -6
  132. package/dist/EvidenceViewOffer-KQKPTMXA.js +0 -2
  133. package/dist/SingleShotApp-M7R5PW4X.js +0 -2
  134. package/dist/TestMdRunView-JXRXMACE.js +0 -2
  135. package/dist/chat-committer-ADJJTDUT.js +0 -2
  136. package/dist/chat-controller-VAC57IEV.js +0 -3
  137. package/dist/chunk-262ES67I.js +0 -14
  138. package/dist/chunk-4R2HOA7J.js +0 -14
  139. package/dist/chunk-6AYUSR7X.js +0 -2
  140. package/dist/chunk-74RUSHIB.js +0 -4
  141. package/dist/chunk-KYHXDJN4.js +0 -2
  142. package/dist/chunk-LURGFJEE.js +0 -6
  143. package/dist/chunk-QPZRHAYK.js +0 -4
  144. package/dist/chunk-SJ2KQKOV.js +0 -3
  145. package/dist/chunk-WIA7TPK3.js +0 -2
  146. package/dist/chunk-ZG2V2ODK.js +0 -4
  147. package/dist/cover-cmd-K3LCXHAQ.js +0 -2
  148. package/dist/evidence-7VE5EGEF.js +0 -2
  149. package/dist/evolve-cmd-RUGUWKAG.js +0 -2
  150. package/dist/explain-VFIZTHFN.js +0 -2
  151. package/dist/gaps-cmd-DTVDIOED.js +0 -2
  152. package/dist/ingest-C5ANIN7S.js +0 -2
  153. package/dist/ingest-cmd-LLC5CDQ5.js +0 -3
  154. package/dist/lifecycle-cmd-BXE5IMFN.js +0 -2
  155. package/dist/list-cmd-KBWPYJMV.js +0 -3
  156. package/dist/logical-ids-3Y6RX5C2.js +0 -2
  157. package/dist/login-flow-HRS6YACY.js +0 -2
  158. package/dist/maintenance-cmd-VS3APIUN.js +0 -2
  159. package/dist/pipeline-IZSODNCC.js +0 -2
  160. package/dist/readmodel-XOGOELUP.js +0 -2
  161. package/dist/reconcile-cmd-6HVZJFG3.js +0 -2
  162. package/dist/revert-AQQ2VHRM.js +0 -2
  163. package/dist/review-cmd-4WZUUOE4.js +0 -4
  164. package/dist/run-2A7M7EJK.js +0 -2
  165. package/dist/run-6AFY35QW.js +0 -2
  166. package/dist/tcg-generate-IHHPRVNG.js +0 -2
  167. package/dist/token-refresh-CFVOA62N.js +0 -2
  168. package/dist/walk-session-N3BP57HK.js +0 -2
@@ -0,0 +1,14 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as j}from"./chunk-GBBVP2JW.js";import{b as U}from"./chunk-OPDJD7WS.js";import{e as N,f as F}from"./chunk-VLC24QVT.js";import{a as L,b as M}from"./chunk-CIFVUX3B.js";import{a as G}from"./chunk-DNNZ353O.js";import{a as C}from"./chunk-QHFUDBQH.js";import{b as V}from"./chunk-MBXWXBDM.js";import{d as E,e as $,g as P}from"./chunk-5YPBPZUR.js";function W(e,n,t,i,r){let d=t.rows.filter(p=>{let u=i.get(p.temp_ref);return u!==void 0&&u!=="reject"});if(d.length===0)return{record:null,errors:null};let s={version:1,read_basis:n.latestHash,source:{source_id:t.source_id,source_cid:n.heads.get(t.source_id)??""},use_cases:d.map(p=>p.uc)},g=new Map;for(let p of d){let u=i.get(p.temp_ref);typeof u=="object"?g.set(p.temp_ref,{resolution:"edited",edit:u.edited}):g.set(p.temp_ref,{resolution:p.uc.matches_existing&&p.uc.changed?"edited":"approved"})}let l=ee(s,n,t.staged_source_cid);if(l.errors!==null)return{record:null,errors:l.errors};let o=l.proposal,f=s.source.source_cid?D(e,n,s.source.source_cid):null;if(f!==null){o=Z(o,f);let p=N(o,z(f),n);if(p.length>0)return{record:null,errors:[{code:"HELD_CITES_STALE",detail:"the source moved after this plan staged \u2014 its quotes no longer verify against the current head; re-run kane-cli maintain reconcile to re-stage"},...p]}}let m=`held-${(n.latestHash??"root").slice(-12)}-${d.length}`;return F({contextDir:e,graph:n,proposal:o,proposalId:m,verdicts:g,by:r,autoName:!0})}function z(e){return e.replace(/\n$/,"").split(`
3
+ `).map((t,i)=>`${String(i+1).padStart(4,"0")}| ${t}`).join(`
4
+ `)}function Z(e,n){let t=n.replace(/\n$/,""),i=z(n),r=d=>{if(!d?.quote)return d;let s=M(i,d.anchor);if(s!==null&&s.includes(d.quote))return d;let g=t.indexOf(d.quote);if(g===-1||t.indexOf(d.quote,g+1)!==-1)return d;let l=t.slice(0,g).split(`
5
+ `).length,o=l+d.quote.replace(/\n$/,"").split(`
6
+ `).length-1;return{...d,anchor:`L${l}-L${o}`}};return{...e,use_cases:e.use_cases.map(d=>({...d,cite:r(d.cite)??d.cite,...d.criteria?{criteria:d.criteria.map(s=>({...s,cite:r(s.cite)??s.cite}))}:{},...d.updated?.criteria?{updated:{...d.updated,criteria:d.updated.criteria.map(s=>({...s,cite:r(s.cite)??s.cite}))}}:{}}))}}function ee(e,n,t){let i=[],r=n.mediaOf(e.source.source_cid).images??[],d=t!==void 0?n.mediaOf(t).images??[]:null,s=(l,o)=>{let f=l?L(l.anchor):null;if(!l||f?.kind!=="img-part")return l;if(d===null)return i.push({code:"HELD_CITES_STALE",detail:`${o}: this plan predates image-part staging \u2014 ${l.anchor} cannot be verified against the version it staged under; re-run kane-cli maintain reconcile to re-stage`}),l;let m=d.find(c=>c.ref===f.ref)?.blob;if(m===void 0)return i.push({code:"HELD_CITES_STALE",detail:`${o}: ${l.anchor} names no decodable image of the staged version \u2014 re-run kane-cli maintain reconcile to re-stage`}),l;if(r.some(c=>c.ref===f.ref&&c.blob===m))return l;let p=r.filter(c=>c.blob===m),u=p.filter(c=>c.delivery==="selected");return u.length===1?{...l,anchor:`img#${u[0].ref}`}:p.length===1?{...l,anchor:`img#${p[0].ref}`}:(i.push({code:"HELD_CITES_STALE",detail:`${o}: the image behind ${l.anchor} is ${p.length===0?"no longer in":"ambiguous in"} the current head \u2014 re-run kane-cli maintain reconcile to re-stage`}),l)};return{proposal:{...e,use_cases:e.use_cases.map(l=>({...l,cite:s(l.cite,l.temp_ref)??l.cite,...l.criteria?{criteria:l.criteria.map(o=>({...o,cite:s(o.cite,l.temp_ref)??o.cite}))}:{},...l.updated?.criteria?{updated:{...l.updated,criteria:l.updated.criteria.map(o=>({...o,cite:s(o.cite,l.temp_ref)??o.cite}))}}:{}}))},errors:i.length>0?i:null}}function J(e,n,t=[]){let i=U(e,n),r=new Set,d=[],s=f=>{!f||r.has(f)||(r.add(f),d.push(R(e,f)))};for(let f of i.pairs)s(f.scenario),s(f.test);for(let[f,m]of i.verifies){s(f);for(let p of m)s(p)}if(t.length===0)return{stale_refs:d};let g=f=>`${String(f.props.source_id)}\0${String(f.props.anchor)}`,l=new Set;for(let{cid:f}of e.byLabel(E.USECASE))if(e.tipOf(f)===n)for(let m of e.edgesInto(f)){if(m.type!==$.DERIVES)continue;let p=m.props.claim;typeof p=="string"&&t.includes(p)&&l.add(g(m))}if(l.size===0)return{stale_refs:d};let o=new Set;for(let[f,m]of i.verifies)if(e.edgesInto(f).some(u=>u.type===$.DERIVES&&l.has(g(u)))){o.add(R(e,f));for(let u of m)o.add(R(e,u))}return{stale_refs:d,...o.size>0?{direct_refs:[...o]}:{}}}var B="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",te="suite untouched; graph updated";function T(e,n){return!e.superseded.has(n)&&e.trust.get(n)!=="archived"}function R(e,n,t=new Set){let i=e.nameOf.get(n);if(i!==void 0)return i;if(t.has(n))return n;t.add(n);for(let[r,d]of e.superseded){if(d!==n)continue;let s=R(e,r,t);if(s!==r)return s}return n}function k(e){return String(e).slice(0,19)}function A(e,n,t){let i=e.edgesFrom(n).find(r=>r.type===t);return i?e.tipOf(i.dst):null}function Y(e,n){let t=e.nodeLabel.get(n);if(t===E.USECASE)return n;if(t===E.SCENARIO)return A(e,n,$.BELONGS_TO);if(t===E.AC){let i=A(e,n,$.SCOPED_TO);return i?e.nodeLabel.get(i)===E.USECASE?i:A(e,i,$.BELONGS_TO):null}if(t===E.TEST){let i=A(e,n,$.AUTOMATES);return i?A(e,i,$.BELONGS_TO):null}return null}function q(e,n){let t=[],i=new Map;for(let r of e.derivesInto(n))i.set(String(r.props.source_id),r);for(let[r,d]of i){let s=e.heads.get(r);if(s==null){t.push(`DERIVES pin ${r} @ ${k(d.props.source_cid)} \u2014 source retired`);continue}if(s!==d.props.source_cid){let g=e.convChains.get(r)?.chain;if(g&&g.includes(String(d.props.source_cid)))continue;t.push(`DERIVES pin ${r} @ ${k(d.props.source_cid)} \u2014 source head moved to ${k(s)}`)}}for(let r of e.edgesFrom(n))P(r.type)?.pin?.comparesTo==="dst_tip"&&e.superseded.has(r.dst)&&t.push(`${r.type} pin \u2192 ${R(e,r.dst)} \u2014 target superseded`);return t.join("; ")||"structural pin broken"}var ne=new Set([E.USECASE,E.SCENARIO,E.AC,E.TEST]);function O(e,n){return e.ref<n.ref?-1:e.ref>n.ref?1:0}function D(e,n,t){let i=G(e,n,t);return i===null?null:i.toString("utf8")}function re(e,n,t,i,r){let d=t.props.quote;if(typeof d=="string"&&d.length>0)return i.includes(d);let s=String(t.props.source_cid);r.has(s)||r.set(s,D(e,n,s));let g=r.get(s);if(g===null)return!1;let l=M(g,String(t.props.anchor));return l===null?!1:l.split(`
7
+ `).some(o=>o.trim().length>0&&i.includes(o.trim()))}function se(e,n,t){let i=L(String(n.props.anchor));if(i?.kind!=="img-part")return!1;let d=(e.mediaOf(String(n.props.source_cid)).images??[]).find(s=>s.ref===i.ref)?.blob;return d===void 0?!1:(e.mediaOf(t).images??[]).some(s=>s.blob===d)}var K=128*1024,X=64*1024;function oe(e,n){let t=e.split(`
8
+ `),i=n.split(`
9
+ `),r=0;for(;r<t.length&&r<i.length&&t[r]===i[r];)r++;let d=t.length,s=i.length;for(;d>r&&s>r&&t[d-1]===i[s-1];)d--,s--;if(d===r&&s===r)return"";let g=t.slice(r,d),l=i.slice(r,s),f=ie(g,l,2e3),m=[];if(f===null)m.push(`@@ old L${r+1}-L${d} \u2192 new L${r+1}-L${s} @@`,...g.map(p=>`- ${p}`),...l.map(p=>`+ ${p}`));else{let p=f.map((c,h)=>c.op==="="?-1:h).filter(c=>c>=0),u=0;for(;u<p.length;){let c=u;for(;c+1<p.length&&p[c+1]-p[c]<=3;)c++;let h=Math.max(p[u]-1,0),v=Math.min(p[c]+1,f.length-1),y=f.slice(h,v+1),S=r+(y[0].ai??0)+1,w=r+(y[0].bi??0)+1,a=y.filter(b=>b.op!=="+").length,_=y.filter(b=>b.op!=="-").length;m.push(`@@ old L${S}-L${S+Math.max(a-1,0)} \u2192 new L${w}-L${w+Math.max(_-1,0)} @@`);for(let b of y)m.push(b.op==="="?` ${b.line}`:`${b.op} ${b.line}`);u=c+1}}return m.join(`
10
+ `)}function ie(e,n,t){let i=e.length,r=n.length,d=Math.min(i+r,t),s=new Map([[1,0]]),g=[],l=!1;for(let p=0;p<=d&&!l;p++){g.push(new Map(s));for(let u=-p;u<=p;u+=2){let c=u===-p||u!==p&&(s.get(u-1)??0)<(s.get(u+1)??0)?s.get(u+1)??0:(s.get(u-1)??0)+1,h=c-u;for(;c<i&&h<r&&e[c]===n[h];)c++,h++;if(s.set(u,c),c>=i&&h>=r){l=!0;break}}}if(!l)return null;let o=i,f=r,m=[];for(let p=g.length-1;p>0;p--){let u=g[p],c=o-f,h=c===-p||c!==p&&(u.get(c-1)??0)<(u.get(c+1)??0)?c+1:c-1,v=u.get(h)??0,y=v-h;for(;o>v&&f>y;)m.push({op:"=",line:e[o-1],ai:o-1,bi:f-1}),o--,f--;p>0&&(o===v?(m.push({op:"+",line:n[f-1],ai:o,bi:f-1}),f--):(m.push({op:"-",line:e[o-1],ai:o-1,bi:f}),o--))}for(;o>0&&f>0;)m.push({op:"=",line:e[o-1],ai:o-1,bi:f-1}),o--,f--;for(;o>0;)m.push({op:"-",line:e[o-1],ai:o-1,bi:0}),o--;for(;f>0;)m.push({op:"+",line:n[f-1],ai:0,bi:f-1}),f--;return m.reverse()}function ce(e){let n=Buffer.byteLength(e,"utf8");if(n<=K+X)return{diff:e,truncated:!1};let t=Buffer.from(e,"utf8"),i=K;for(;i>0&&(t[i]&192)===128;)i--;let r=n-X;for(;r<n&&(t[r]&192)===128;)r++;let d=t.subarray(0,i).toString("utf8"),s=t.subarray(r).toString("utf8");return{diff:`${d}
11
+ \u2026 [diff truncated: ${n-i-(n-r)} bytes omitted] \u2026
12
+ ${s}`,truncated:!0}}function ae(e,n){let t=C(e),i=t.heads.get(n);if(typeof i!="string")return null;let r=[];for(let u of V(e).records){let c=u.source_head_moves?.[n];c!==void 0&&c!==r[r.length-1]&&r.push(c)}let d=r.lastIndexOf(i),s=d>0?r[d-1]:null;if(typeof s!="string"||s===i)return null;let g=D(e,t,s),l=D(e,t,i);if(g===null||l===null)return null;let{diff:o,truncated:f}=ce(oe(g,l)),m=new Set,p=[];for(let u of t.edgesFrom(s))u.type!==$.DERIVES||t.nodeLabel.get(u.dst)!==E.USECASE||m.has(u.dst)||(m.add(u.dst),p.push({id:u.dst,title:String(t.getNode(u.dst)?.content.title??"")}));return{source_id:n,old_head:s,new_head:i,diff:o,...f?{truncated:!0}:{},prior_ucs:p}}function de(e,n,t){let i=e.getNode(n)?.content??{},r=e.getNode(t)?.content??{},s=[...new Set([...Object.keys(i),...Object.keys(r)])].sort().filter(g=>JSON.stringify(i[g])!==JSON.stringify(r[g]));return s.length>0?`updated: ${s.join(", ")}`:"updated"}function le(e,n,t,i,r,d,s){let g=new Set((s?.rows??[]).map(c=>c.matched_cid).filter(c=>!!c)),l=[];for(let[c,h]of t.superseded)h===null||c===h||n.superseded.has(c)||t.nodeLabel.get(c)===E.USECASE&&l.push({kind:"MODIFY",ref:R(t,c),old_cid:c,new_cid:h,summary:de(t,c,h)});let o=d.map(c=>({kind:"ADD",ref:R(t,c),cid:c}));for(let c of s?.rows??[])c.kind==="MODIFY"&&c.matched_cid?l.push({kind:"MODIFY",ref:R(t,c.matched_cid),old_cid:c.matched_cid,new_cid:null,summary:`${c.why} (staged)`}):c.kind==="ADD"&&o.push({kind:"ADD",ref:c.title,cid:null});let f=[],m=D(e,t,r),p=new Map;for(let{cid:c}of t.byLabel(E.USECASE)){if(!T(t,c)||g.has(c))continue;let h=t.derivesInto(c),v=h.filter(w=>String(w.props.source_id)===i);v.length===0||v.some(w=>w.props.source_cid===r)||v.some(w=>{let a=String(w.props.anchor),_=L(a);return _?.kind==="img-whole"?!1:_?.kind==="img-part"?se(t,w,r):m!==null&&re(e,t,w,m,p)})||h.some(w=>{let a=String(w.props.source_id);if(a===i)return!1;let _=t.heads.get(a);return _!=null})||f.push({kind:"ARCHIVE",ref:R(t,c),cid:c,why:`evidence decayed: no quote from ${i} relocates into @${k(r)}, no other live source, no fresh evidence this run`,impact:J(t,t.tipOf(c))})}let u=(c,h)=>c.ref<h.ref?-1:c.ref>h.ref?1:0;return[...l.sort(u),...o.sort(u),...f.sort(u)]}function Ee(e,n,t,i,r){let d=n.rows.find(u=>u.temp_ref===t);if(!d)return{ok:!1,message:`held item ${t} missing from the plan artifact`};let s=d,g=C(e);if(s.matched_cid){let u=g.tipOf(s.matched_cid);if(g.superseded.get(u)===null)return{ok:!1,message:`use-case for "${s.title}" was retired meanwhile \u2014 nothing to update`};u!==s.matched_cid&&(s={...s,matched_cid:u,uc:{...s.uc,matches_existing:{cid:u}}})}let l=r?{edited:r}:"approve",o=W(e,g,{source_id:n.source_id,...n.staged_source_cid!==void 0?{staged_source_cid:n.staged_source_cid}:{},rows:[s]},new Map([[s.temp_ref,l]]),i);if(o.errors)return{ok:!1,message:o.errors.map(u=>`${u.code}: ${u.detail}`).join("; ")};let f=C(e),m=s.matched_cid?f.tipOf(s.matched_cid):o.record?.nodes.find(u=>u.label==="usecase")?.cid??o.record?.review[0]?.id;return{ok:!0,ref:m?R(f,m):s.title,kind:s.kind}}async function be(e,n,t,i={}){let r=C(e),d=r.heads.get(n)??null,s=new Set(r.staleList().filter(a=>a.state==="stale").map(a=>a.cid)),g=await t.reingest(n);if(g.status==="unchanged"&&!i.resumeHeld)return{source_id:n,changed:!1,head:{status:g.status,before:d,after:g.cid},note:`nothing to reconcile \u2014 ${n} is unchanged`,skipped_arms:B,changeset:[],rows:[]};let l=i.resumeHeld?{minted:[],matched:[],held:i.resumeHeld}:await t.reextract(n),o=C(e),f=l.minted.map(a=>{let _=R(o,a);return{kind:"ADD",origin:"content-change",ref:_,reason:`new use-case extracted from ${n}`,provenance:`extraction commit \u2014 DERIVES ${n} @ ${k(g.cid)}`,action:`kane-cli design tests --use-case ${_}`}}),m=o.staleList().filter(a=>a.state==="stale"&&!s.has(a.cid)&&T(o,a.cid)).map(a=>a.cid),p=m.map(a=>{let _=R(o,a),b=ne.has(o.nodeLabel.get(a)??"");return{kind:"MODIFY",origin:"structural-stale",ref:_,reason:"stale (structural)",provenance:q(o,a),action:b?`kane-cli maintain evolve ${_}`:`kane-cli design explain ${_}`}}),u=[],c=[];for(let a of l.held?.rows??[])if(a.kind==="ADD")u.push({kind:"ADD",origin:"content-change",ref:a.title,held_ref:a.temp_ref,reason:`${a.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${n} @ ${k(g.cid)}`,action:"approve to commit + design"});else{let _=a.matched_cid?o.tipOf(a.matched_cid):null,b=_?o.getNode(_)?.content.criteria??[]:[],I=(a.uc.updated?.criteria??[]).map(x=>typeof x=="string"?x:x.text),Q=[...I.filter(x=>!b.includes(x)),...a.uc.updated?.criteria!==void 0?b.filter(x=>!I.includes(x)):[]],H=_?J(o,_,Q):void 0;c.push({kind:"MODIFY",origin:"content-change",ref:a.matched_cid?R(o,a.matched_cid):a.title,held_ref:a.temp_ref,reason:`${a.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${n} @ ${k(g.cid)}`,action:"approve to commit the updated version (old\u2192new redirect)",...H?{impact:H}:{}})}let h=new Set;for(let a of[...l.minted,...l.matched])h.add(o.tipOf(a));for(let a of l.held?.rows??[])a.matched_cid&&h.add(o.tipOf(a.matched_cid));for(let a of m){let _=Y(o,o.tipOf(a));_&&o.nodeLabel.get(_)===E.USECASE&&h.add(o.tipOf(_))}let v=[];for(let a of await j(o,"design")){if(a.kind!=="no-verifies")continue;let _=o.resolve(a.ref);if(!_)continue;let b=Y(o,_.tip);!b||!h.has(o.tipOf(b))||v.push({kind:"ADD",origin:"content-change",ref:a.ref,reason:a.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${R(o,b)}`,action:a.ready_command})}let y=[];for(let{cid:a}of o.byLabel(E.USECASE))T(o,a)&&o.stale(a)==="orphaned"&&y.push({kind:"REMOVE",ref:R(o,a),reason:"orphaned \u2014 no live source evidences this use-case",provenance:q(o,a),action:"plan-only \u2014 REMOVE is not executed in this release"});let S=new Set,w=[...f.sort(O),...u.sort(O),...v.sort(O),...c.sort(O),...p.sort(O),...y.sort(O)].filter(a=>{let _=`${a.kind}\0${a.ref}`;return S.has(_)?!1:(S.add(_),!0)});return{source_id:n,changed:!0,head:{status:g.status,before:d,after:g.cid},note:te,skipped_arms:B,changeset:le(e,r,o,n,g.cid,l.minted,l.held),rows:w,...l.held?{held:l.held}:{}}}function ve(e,n){return async t=>{let{ingestFile:i}=await import("./ingest-GOKIMEP4.js"),{convertPdf:r}=await import("./pdf-convert-KYXI4FU4.js"),d=await i({contextDir:e,filePath:n,asId:t,pdfConverter:r});return{status:d.status,cid:d.cid}}}function Re(e,n={}){return async t=>{let i=[],[{runExtract:r},{resolveAgentAuthEnv:d},{runAgent:s},{preflightTurn:g}]=await Promise.all([import("./run-3ZYJQBBC.js"),import("./spawner-VD6YFZ43.js"),import("./bridge-WVFTWHKP.js"),import("./turn-preflight-JGYT7LXP.js")]),l=await d(),o=new Set(C(e).byLabel(E.USECASE).map(S=>S.cid)),f=ae(e,t)??void 0,m=0,p=await r({mode:"override",...f?{changeContext:f}:{}},{contextDir:e,agent:s,preflightTurn:()=>g(l),ask:async()=>[],review:async S=>{if(!n.stage)return new Map(S.map(a=>[a.temp_ref,{resolution:a.matches_existing&&a.changed?"edited":"skipped"}]));let w=new Map;for(let a of S){if(a.matches_existing&&!a.changed){w.set(a.temp_ref,{resolution:"skipped"});continue}i.push({kind:a.matches_existing?"MODIFY":"ADD",temp_ref:a.temp_ref,title:a.title,why:a.matches_existing?`updated: ${Object.keys(a.updated??{}).join(", ")||"content"}`:`newly extracted from ${t}`,...a.matches_existing?{matched_cid:a.matches_existing.cid,updated:a.updated}:{},uc:a}),w.set(a.temp_ref,{resolution:"rejected"})}return w},confirmStale:async()=>!1,out:S=>process.stderr.write(S+`
13
+ `),progress:S=>process.stderr.write(S+`
14
+ `),emit:S=>{S.type==="commit"&&typeof S.assumed=="number"&&(m+=S.assumed)},isTTY:!1,auth:l});if(p!==0)throw new Error(`reconcile: re-extract of ${t} failed (exit ${p})`);let u=C(e),c=u.heads.get(t),h=[],v=[];if(typeof c=="string"){let S=new Set;for(let w of u.edgesFrom(c))w.type!==$.DERIVES||u.nodeLabel.get(w.dst)!==E.USECASE||S.has(w.dst)||(S.add(w.dst),!(n.stage&&u.trust.get(w.dst)==="archived")&&(o.has(w.dst)?v:h).push(w.dst))}let y=C(e).heads.get(t);return{minted:h,matched:v,defaultsTaken:m,...n.stage?{held:{source_id:t,...y!=null?{staged_source_cid:y}:{},rows:i}}:{}}}}export{Ee as a,be as b,ve as c,Re as d};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{createHash as s}from"crypto";function f(n){if(n===null)return"null";let t=typeof n;if(t==="string")return JSON.stringify(n.normalize("NFC"));if(t==="boolean")return n?"true":"false";if(t==="number"){if(!Number.isFinite(n))throw new Error("non-finite number is not canonicalizable");return JSON.stringify(n)}if(Array.isArray(n))return"["+n.map(i=>i===void 0?"null":f(i)).join(",")+"]";if(t==="object"){let i=n,e=new Map;for(let r of Object.keys(i)){if(i[r]===void 0)continue;let o=r.normalize("NFC");if(e.has(o))throw new Error(`canonicalization collision: NFC-equivalent duplicate key ${JSON.stringify(o)}`);e.set(o,i[r])}return"{"+[...e.keys()].sort((r,o)=>Buffer.compare(Buffer.from(r,"utf8"),Buffer.from(o,"utf8"))).map(r=>JSON.stringify(r)+":"+f(e.get(r))).join(",")+"}"}throw new Error("unsupported type for canonicalization: "+t)}function a(n){return s("sha256").update(n).digest("hex")}export{f as a,a as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as h}from"./chunk-4SXD6XWV.js";import{y as l}from"./chunk-6SGPN76K.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-RGQIBS32.js";import{y as l}from"./chunk-NMKZHHB6.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,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Ue}from"./chunk-KHU7C6EE.js";import{a as Me,b as Ge}from"./chunk-3C5GMAM4.js";import{a as me,b as Te,c as Oe,d as Ie,g as Ne,h as je}from"./chunk-KNCHEM6A.js";import{a as qe,b as Fe,g as Be,h as Pe}from"./chunk-FXPPQL4D.js";import{a as Ae}from"./chunk-RE3BZVGE.js";import{b as Re,c as De}from"./chunk-WIA7TPK3.js";import{c as Ce}from"./chunk-6GTOYTCQ.js";import{a as Le}from"./chunk-6AYUSR7X.js";import{b as _e,c as be,d as ye,e as ee,f as J,g as re,h as ve,i as le}from"./chunk-FJTWJ243.js";import{a as de}from"./chunk-L5LI2JF4.js";import{a as Y}from"./chunk-MCQXRJGH.js";import{a as xe,b as ue}from"./chunk-ZZLR3O5A.js";import{e as $e,g as Ee}from"./chunk-ZG2V2ODK.js";import{d as S,e as E,f as we,g as Se,h as ke}from"./chunk-5YPBPZUR.js";import{mkdirSync as Et,appendFileSync as Rt}from"fs";import{randomBytes as Dt}from"crypto";import{join as ct}from"path";import{existsSync as ge,readFileSync as pe,readdirSync as dt}from"fs";import{join as te}from"path";var ze=`
2
+ import{a as Ue}from"./chunk-KHU7C6EE.js";import{a as Me,b as Ge}from"./chunk-3C5GMAM4.js";import{a as me,b as Te,c as Oe,d as Ie,g as Ne,h as je}from"./chunk-NMZATEKQ.js";import{a as qe,b as Fe,g as Be,h as Pe}from"./chunk-FXPPQL4D.js";import{a as Ae}from"./chunk-RE3BZVGE.js";import{b as Re,c as De}from"./chunk-VLC24QVT.js";import{c as Ce}from"./chunk-OSALXGD4.js";import{a as Le}from"./chunk-CVOGP253.js";import{b as _e,c as be,d as ye,e as ee,f as J,g as re,h as ve,i as le}from"./chunk-ZPDM6FO7.js";import{a as de}from"./chunk-L5LI2JF4.js";import{a as Y}from"./chunk-QHFUDBQH.js";import{a as xe,b as ue}from"./chunk-L4JIMNKW.js";import{c as $e,e as Ee}from"./chunk-MBXWXBDM.js";import{d as S,e as E,f as we,g as Se,h as ke}from"./chunk-5YPBPZUR.js";import{mkdirSync as Et,appendFileSync as Rt}from"fs";import{randomBytes as Dt}from"crypto";import{join as ct}from"path";import{existsSync as ge,readFileSync as pe,readdirSync as dt}from"fs";import{join as te}from"path";var ze=`
3
3
  version: 1
4
4
  techniques:
5
5
  - id: eqp
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as c,c as p}from"./chunk-GLVDOR5G.js";import{spawn as y}from"child_process";var h=new Set(["progress","ask_user","graph_query","proposal","design","error","done","reasoning_delta","reasoning_done","tool_activity","decision_activity","text_delta","usage","receipt","chat_ops","session_paused","session_complete"]);function w(l,n={}){let a=n.spawnCmd!==void 0?n.spawnCmd:c();if(!a)throw new Error("assurance agent not found \u2014 your platform package may be missing; reinstall kane-cli (npm i -g @testmuai/kane-cli)");let f=l.source.images?.length??0;a.tier==="dev-python"&&f>0&&n.onWarn?.("warn: development agent in use \u2014 if image citations are missing, update the agent package");let t=y(a.cmd,a.args,{stdio:["pipe","pipe","pipe"],env:p(l.session_id,n.auth)});if(t.stdin.write(JSON.stringify(l)+`
3
+ `),n.onStderr){let e="";t.stderr.on("data",r=>{e+=r.toString("utf8");let i;for(;(i=e.indexOf(`
4
+ `))>=0;){let o=e.slice(0,i);e=e.slice(i+1),o.trim()&&n.onStderr(o)}})}let d=new Promise(e=>{t.on("exit",(r,i)=>e({code:r,signal:i}))});async function*m(){let e="",r=!1;for await(let i of t.stdout){e+=i.toString("utf8");let o;for(;(o=e.indexOf(`
5
+ `))>=0;){let g=e.slice(0,o).trim();if(e=e.slice(o+1),!g)continue;let u;try{u=JSON.parse(g)}catch{n.onWarn?.(`agent: skipping malformed line: ${g.slice(0,120)}`);continue}let s=u;if(!s||typeof s!="object"||!h.has(s.type)){n.onWarn?.(`agent: skipping unknown event type "${s&&typeof s=="object"?String(s.type??"?"):"?"}"`);continue}if(yield s,s.type==="done"){r=!0;break}}if(r)break}await d.catch(()=>{})}return{events:m(),send:e=>{t.stdin&&!t.stdin.destroyed&&t.stdin.write(JSON.stringify(e)+`
6
+ `)},kill:()=>{t.kill("SIGTERM")},exited:d}}export{w as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{y as o}from"./chunk-6SGPN76K.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-NMKZHHB6.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};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as t,b as i}from"./chunk-ZG2V2ODK.js";import{i as s,j as e}from"./chunk-5YPBPZUR.js";function a(r,n){return"sha256:"+i(Buffer.from("assurance."+r+"\0"+t(s(r,n)),"utf8"))}function f(r,n,o,u){return"sha256:"+i(Buffer.from("assurance.edge\0"+t({type:r,src:n,dst:o,props:e(r,u)}),"utf8"))}function d(r,n){return{source_id:r,blob:n}}function p(r){return{...r,derived:!0}}export{a,f as b,d as c,p as d};
2
+ import{a as t,b as i}from"./chunk-IAHKTEET.js";import{i as s,j as e}from"./chunk-5YPBPZUR.js";function a(r,n){return"sha256:"+i(Buffer.from("assurance."+r+"\0"+t(s(r,n)),"utf8"))}function f(r,n,o,u){return"sha256:"+i(Buffer.from("assurance.edge\0"+t({type:r,src:n,dst:o,props:e(r,u)}),"utf8"))}function d(r,n){return{source_id:r,blob:n}}function p(r){return{...r,derived:!0}}export{a,f as b,d as c,p as d};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as m}from"./chunk-4SXD6XWV.js";import{y as t}from"./chunk-6SGPN76K.js";import{a as p}from"./chunk-HCBYKLMW.js";import{a,b as r,i as u}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var c=n(b(),1);var e=n(p(),1);function R({onSubmit:l}){let[o,f]=(0,c.useState)(0),s=(0,c.useRef)(!1);return u((x,i)=>{s.current||(i.leftArrow||i.rightArrow?f(d=>d===0?1:0):i.return?(s.current=!0,l(o===0?"positive":"negative")):i.escape&&(s.current=!0,l(null)))}),(0,e.jsxs)(a,{flexDirection:"column",marginTop:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(r,{color:t.secondary,children:"Rate this session: "}),(0,e.jsx)(r,{color:o===0?t.orange:t.dim,children:o===0?"[ \u{1F44D} ]":" \u{1F44D} "}),(0,e.jsx)(r,{children:" "}),(0,e.jsx)(r,{color:o===1?t.orange:t.dim,children:o===1?"[ \u{1F44E} ]":" \u{1F44E} "})]}),(0,e.jsx)(m,{bindings:[{keys:"\u2190/\u2192",label:"select"},{keys:"\u21B5",label:"submit"}],escBackLabel:"skip"})]})}export{R as a};
2
+ import{a as m}from"./chunk-RGQIBS32.js";import{y as t}from"./chunk-NMKZHHB6.js";import{a as p}from"./chunk-HCBYKLMW.js";import{a,b as r,i as u}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var c=n(b(),1);var e=n(p(),1);function R({onSubmit:l}){let[o,f]=(0,c.useState)(0),s=(0,c.useRef)(!1);return u((x,i)=>{s.current||(i.leftArrow||i.rightArrow?f(d=>d===0?1:0):i.return?(s.current=!0,l(o===0?"positive":"negative")):i.escape&&(s.current=!0,l(null)))}),(0,e.jsxs)(a,{flexDirection:"column",marginTop:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(r,{color:t.secondary,children:"Rate this session: "}),(0,e.jsx)(r,{color:o===0?t.orange:t.dim,children:o===0?"[ \u{1F44D} ]":" \u{1F44D} "}),(0,e.jsx)(r,{children:" "}),(0,e.jsx)(r,{color:o===1?t.orange:t.dim,children:o===1?"[ \u{1F44E} ]":" \u{1F44E} "})]}),(0,e.jsx)(m,{bindings:[{keys:"\u2190/\u2192",label:"select"},{keys:"\u21B5",label:"submit"}],escBackLabel:"skip"})]})}export{R as a};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as C,b as _}from"./chunk-IAHKTEET.js";import{a as g}from"./chunk-5YPBPZUR.js";import{closeSync as $,existsSync as O,fsyncSync as x,mkdirSync as b,openSync as v,readFileSync as y,readdirSync as N,renameSync as P,rmSync as A,writeFileSync as k}from"fs";import{join as p}from"path";var i=class extends Error{};function S(e,r){if(e.schema_version!==void 0&&e.schema_version!==g)throw new i(`record ${r} is stamped ${e.schema_version}, this build reads ${g} \u2014 migrate explicitly`);if(e.parents!==void 0&&!(e.prev_hash===null?e.parents.length===0:e.parents.length===1&&e.parents[0]===e.prev_hash))throw new i(`record ${r}: parents does not mirror prev_hash \u2014 multi-parent records need a DAG-aware reader`)}function F(e){b(e,{recursive:!0});let r=p(e,".lock"),t=Date.now()+2e3;for(;;)try{let n=v(r,"wx");return k(n,`${process.pid}
3
+ `),$(n),()=>{try{A(r)}catch{}}}catch(n){if(n.code!=="EEXIST")throw n;if(Date.now()>t)throw new i(`.context is locked by another process \u2014 remove ${r} if that process is gone`);Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,25)}}var J=/^\d{6}-[0-9a-f]{12}\.json$/,f=e=>p(e,"commits");function w(e){return"sha256:"+_(Buffer.from(C(e),"utf8"))}function R(e){let r=f(e);return O(r)?N(r).filter(t=>J.test(t)).sort():[]}function B(e){let r=R(e),t=[],n=[],c=null;return r.forEach((s,h)=>{let d=y(p(f(e),s),"utf8"),o;try{o=JSON.parse(d)}catch(l){throw new i(`corrupt commit record ${s}: ${String(l)}`)}if(o.seq!==h+1)throw new i(`sequence gap: expected seq ${h+1}, ${s} has ${o.seq}`);if(o.prev_hash!==c)throw new i(`broken chain at ${s}: prev_hash ${String(o.prev_hash)} != ${String(c)}`);S(o,s);let m=w(o),a=s.slice(7,19);if(!m.slice(7).startsWith(a))throw new i(`tampered record ${s}: content hash ${m} does not match filename`);t.push(o),n.push(m),c=m}),{records:t,hashes:n}}function E(e){let r=R(e);if(r.length===0)return null;let t=r[r.length-1],n=y(p(f(e),t),"utf8"),c;try{c=JSON.parse(n)}catch(h){throw new i(`corrupt tail record ${t}: ${String(h)}`)}S(c,t);let s=w(c);if(!s.slice(7).startsWith(t.slice(7,19)))throw new i(`tampered tail record ${t}: content hash ${s} does not match filename`);if(c.seq!==r.length)throw new i(`sequence gap at tail: ${r.length} record files but tail seq is ${c.seq}`);return{seq:c.seq,hash:s}}function T(e){return E(e)?.hash??null}function z(e,r,t){let n=R(e);if(n.length<r)throw new i(`derived state is ahead of the record log (applied seq ${r}, ${n.length} records) \u2014 run kane-cli context rebuild`);let c=[],s=[],h=t;for(let d=r;d<n.length;d++){let o=n[d],m=y(p(f(e),o),"utf8"),a;try{a=JSON.parse(m)}catch(u){throw new i(`corrupt commit record ${o}: ${String(u)}`)}if(a.seq!==d+1)throw new i(`sequence gap: expected seq ${d+1}, ${o} has ${a.seq}`);if(a.prev_hash!==h)throw new i(`broken chain at ${o}: prev_hash ${String(a.prev_hash)} != ${String(h)}`);S(a,o);let l=w(a);if(!l.slice(7).startsWith(o.slice(7,19)))throw new i(`tampered record ${o}: content hash ${l} does not match filename`);c.push(a),s.push(l),h=l}return{records:c,hashes:s}}function G(e,r,t={}){let n=F(e);try{return j(e,r,t)}finally{n()}}function j(e,r,t){let n=E(e),c=(n?.seq??0)+1,s=n?.hash??null;if(t.expectPrev!==void 0&&t.expectPrev!==s)throw new i(`concurrent append detected: validated against ${String(t.expectPrev)} but the chain head is ${String(s)} \u2014 re-open and retry`);let h={seq:c,prev_hash:s,...r,schema_version:g,parents:s===null?[]:[s]},d=w(h),o=f(e);b(o,{recursive:!0});let m=`${String(c).padStart(6,"0")}-${d.slice(7,19)}.json`,a=p(o,m),l=a+".tmp",u=v(l,"w");try{k(u,JSON.stringify(h)+`
4
+ `),x(u)}finally{$(u)}P(l,a);try{let q=v(o,"r");x(q),$(q)}catch{}return{seq:c,hash:d,file:a,record:h}}export{i as a,B as b,T as c,z as d,G as e};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as f}from"./chunk-2WO7G2HO.js";import{y as t}from"./chunk-6SGPN76K.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a as r,b as n}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as p}from"./chunk-UR6MHSHU.js";var c=p(B(),1);var e=p(x(),1);function v(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"atomic_replace",label:"Replacing local output",status:"pending"},{name:"commit_lock",label:"Committing to TMS",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function U(s,o,d,a){return s.map(l=>l.name===o?{...l,status:d,detail:a}:l)}function R(s){let o=s/1e3;if(o<60)return`${o.toFixed(1)}s`;let d=Math.floor(o/60),a=Math.round(o%60);return`${d}m ${a}s`}function D(s){let[o,d]=(0,c.useState)(0),a=c.default.useRef(Date.now());return(0,c.useEffect)(()=>{if(!s)return;a.current=Date.now();let l=setInterval(()=>{d(Date.now()-a.current)},100);return()=>clearInterval(l)},[s]),o}function h({steps:s,status:o,testUrl:d,error:a}){let l=D(o==="uploading");return o==="uploading"?(0,e.jsxs)(r,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(r,{children:[(0,e.jsx)(n,{color:t.orange,children:"\u2601 "}),(0,e.jsx)(n,{color:t.orange,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dim,children:[" ",R(l)]})]}),(0,e.jsx)(r,{flexDirection:"column",marginTop:1,children:s.filter(i=>i.status!=="skipped").map((i,S,T)=>{let b=S===T.length-1?"\u2514\u2500":"\u251C\u2500",u=i.status==="done",m=i.status==="running",g=i.status==="failed";return(0,e.jsxs)(r,{children:[(0,e.jsxs)(n,{color:t.dim,children:[" ",b," "]}),(0,e.jsx)(r,{width:3,children:m?(0,e.jsx)(f,{}):u?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):g?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:u?t.dim:m?void 0:g?t.red:t.muted,children:i.label}),i.detail&&(0,e.jsxs)(n,{color:t.dim,children:[" ",i.detail]})]},i.name)})}),(0,e.jsx)(r,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):o==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(r,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(r,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),a&&(0,e.jsxs)(r,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dim,children:" "}),(0,e.jsx)(n,{color:t.dim,children:a})]})]})}export{v as a,U as b,h as c};
2
+ import{a as f}from"./chunk-WFQUDSKY.js";import{y as t}from"./chunk-NMKZHHB6.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a as r,b as n}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as p}from"./chunk-UR6MHSHU.js";var c=p(B(),1);var e=p(x(),1);function v(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"atomic_replace",label:"Replacing local output",status:"pending"},{name:"commit_lock",label:"Committing to TMS",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function U(s,o,d,a){return s.map(l=>l.name===o?{...l,status:d,detail:a}:l)}function R(s){let o=s/1e3;if(o<60)return`${o.toFixed(1)}s`;let d=Math.floor(o/60),a=Math.round(o%60);return`${d}m ${a}s`}function D(s){let[o,d]=(0,c.useState)(0),a=c.default.useRef(Date.now());return(0,c.useEffect)(()=>{if(!s)return;a.current=Date.now();let l=setInterval(()=>{d(Date.now()-a.current)},100);return()=>clearInterval(l)},[s]),o}function h({steps:s,status:o,testUrl:d,error:a}){let l=D(o==="uploading");return o==="uploading"?(0,e.jsxs)(r,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(r,{children:[(0,e.jsx)(n,{color:t.orange,children:"\u2601 "}),(0,e.jsx)(n,{color:t.orange,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dim,children:[" ",R(l)]})]}),(0,e.jsx)(r,{flexDirection:"column",marginTop:1,children:s.filter(i=>i.status!=="skipped").map((i,S,T)=>{let b=S===T.length-1?"\u2514\u2500":"\u251C\u2500",u=i.status==="done",m=i.status==="running",g=i.status==="failed";return(0,e.jsxs)(r,{children:[(0,e.jsxs)(n,{color:t.dim,children:[" ",b," "]}),(0,e.jsx)(r,{width:3,children:m?(0,e.jsx)(f,{}):u?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):g?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:u?t.dim:m?void 0:g?t.red:t.muted,children:i.label}),i.detail&&(0,e.jsxs)(n,{color:t.dim,children:[" ",i.detail]})]},i.name)})}),(0,e.jsx)(r,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):o==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(r,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(r,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),a&&(0,e.jsxs)(r,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dim,children:" "}),(0,e.jsx)(n,{color:t.dim,children:a})]})]})}export{v as a,U as b,h as c};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b}from"./chunk-VBCE4U4B.js";import{a as O}from"./chunk-AKHUNBQS.js";import{e as w,j as N}from"./chunk-6SGPN76K.js";import{spawn as U,execSync as B}from"child_process";import{appendFileSync as L,existsSync as E,mkdirSync as K}from"fs";import{homedir as D}from"os";import{join as G,resolve as t,dirname as C}from"path";import{fileURLToPath as W}from"url";import{createInterface as V}from"readline";async function*T(e){let n=V({input:e,crlfDelay:1/0});for await(let l of n){let r=l.trim();if(r)try{let a=JSON.parse(r);a&&typeof a.type=="string"&&(yield a)}catch{}}}function M(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function h(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function I(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var o=C(W(import.meta.url));function j(){for(let e of["python3","python"])try{return B(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function $(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",l={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},r=`${process.platform}-${process.arch}`,a=l[r];if(a)for(let s of a){let m=[t(o,"..","node_modules",s,"bin",n),t(o,"..","..","node_modules",s,"bin",n),t(o,"..","..","..","node_modules",s,"bin",n),t(o,"..","..","..","..","node_modules",s,"bin",n)];for(let u of m)if(E(u))return{cmd:u,args:[]}}let f=[t(o,"bin",n),t(o,"..","bin",n),t(o,"..","..","..","..","v16-runner","dist",n),t(o,"..","..","..","v16-runner","dist",n),t(o,"..","..","v16-runner","dist",n),t(process.cwd(),"v16-runner","dist",n),t(process.cwd(),"..","v16-runner","dist",n)];for(let s of f)if(E(s))return{cmd:s,args:[]};let v=[t(o,"..","..","v16-runner"),t(o,"..","..","..","..","v16-runner"),t(o,"..","..","..","v16-runner"),t(process.cwd(),"v16-runner"),t(process.cwd(),"..","v16-runner")];for(let s of v)if(E(t(s,"main.py"))){for(let u of[t(s,".venv","bin","python"),t(s,"..",".venv","bin","python"),t(s,"..","browser-agent",".venv","bin","python")])if(E(u))return{cmd:u,args:["main.py"],cwd:s};let m=j();if(m)return{cmd:m,args:["main.py"],cwd:s}}return null}function ie(e,n){let l=$();if(!l)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(l)}
2
+ import{a as b}from"./chunk-QYTMD6NM.js";import{a as O}from"./chunk-3NR6OTHL.js";import{e as w,j as N}from"./chunk-NMKZHHB6.js";import{spawn as U,execSync as B}from"child_process";import{appendFileSync as L,existsSync as E,mkdirSync as K}from"fs";import{homedir as D}from"os";import{join as G,resolve as t,dirname as C}from"path";import{fileURLToPath as W}from"url";import{createInterface as V}from"readline";async function*T(e){let n=V({input:e,crlfDelay:1/0});for await(let l of n){let r=l.trim();if(r)try{let a=JSON.parse(r);a&&typeof a.type=="string"&&(yield a)}catch{}}}function M(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function h(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function I(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var o=C(W(import.meta.url));function j(){for(let e of["python3","python"])try{return B(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function $(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",l={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},r=`${process.platform}-${process.arch}`,a=l[r];if(a)for(let s of a){let m=[t(o,"..","node_modules",s,"bin",n),t(o,"..","..","node_modules",s,"bin",n),t(o,"..","..","..","node_modules",s,"bin",n),t(o,"..","..","..","..","node_modules",s,"bin",n)];for(let u of m)if(E(u))return{cmd:u,args:[]}}let f=[t(o,"bin",n),t(o,"..","bin",n),t(o,"..","..","..","..","v16-runner","dist",n),t(o,"..","..","..","v16-runner","dist",n),t(o,"..","..","v16-runner","dist",n),t(process.cwd(),"v16-runner","dist",n),t(process.cwd(),"..","v16-runner","dist",n)];for(let s of f)if(E(s))return{cmd:s,args:[]};let v=[t(o,"..","..","v16-runner"),t(o,"..","..","..","..","v16-runner"),t(o,"..","..","..","v16-runner"),t(process.cwd(),"v16-runner"),t(process.cwd(),"..","v16-runner")];for(let s of v)if(E(t(s,"main.py"))){for(let u of[t(s,".venv","bin","python"),t(s,"..",".venv","bin","python"),t(s,"..","browser-agent",".venv","bin","python")])if(E(u))return{cmd:u,args:["main.py"],cwd:s};let m=j();if(m)return{cmd:m,args:["main.py"],cwd:s}}return null}function ie(e,n){let l=$();if(!l)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(l)}
3
3
  `);let r={...process.env};n?.environment&&(r.TESTMUAI_ENV=n.environment),r.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(r.PYTHONIOENCODING="utf-8");let a=O(n?.environment);r.V16_SERVER_API_HOST=a.v16ServerHost,r.ATMS_URL=a.tmsBaseUrl.replace(/\/api\/?$/,""),e.username&&e.access_key&&(r.LT_USERNAME=e.username,r.LT_ACCESS_KEY=e.access_key),e.session_id&&(r.TESTMUAI_SESSION_ID=e.session_id);let f=M(n?.mode??"testing");Object.assign(r,f.set);for(let i of f.unset)delete r[i];let v=new b().load(),s=I(n?.assertionMode??(v.assertion_mode==="visual"?"visual":"dom"));Object.assign(r,s.set);for(let i of s.unset)delete r[i];let m=n?.finalValidation??v.final_validation,u=h(m);Object.assign(r,u.set);for(let i of u.unset)delete r[i];let g=process.env.KANE_AP_MODE,S=g?{v1:"v1",v2:"v2"}[g]:void 0;S!==void 0&&e.ap_mode===void 0&&(e.ap_mode=S),e.telemetry_proxy_url===void 0&&process.env.KANE_TELEMETRY!=="0"&&(e.telemetry_proxy_url=N),e.media_upload===void 0&&e.org_id&&e.username&&e.access_key&&(e.media_upload={url:a.shareApiBaseUrl.replace(/\/$/,"")+"/mfs/v1.0/media/upload",artefacts_host:a.mediaArtefactsHost,org_id:e.org_id,media_dir:w});let d=U(l.cmd,l.args,{stdio:["pipe","pipe","pipe"],env:r,cwd:l.cwd});d.stdin.on("error",()=>{}),d.stdin.write(JSON.stringify(e)+`
4
4
  `);let p=e.session_id?G(D(),".testmuai","kaneai","sessions",e.session_id,"runner-stderr.log"):null;if(p)try{K(C(p),{recursive:!0}),L(p,`--- runner spawn ${new Date().toISOString()} run_index=${e.run_index} ---
5
5
  `)}catch{}let R=1e5,_="";d.stderr.on("data",i=>{if(_+=i.toString(),_.length>R&&(_=_.slice(-R)),p)try{L(p,i)}catch{}}),d.on("error",i=>{n?.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:i.message})});let A=null,y=null,k=new Promise(i=>{d.on("close",(c,x)=>{A=c,y=x?String(x):null,n?.log?.("info","RUNNER_EXIT","Runner exited",{code:c,signal:y??"none"}),i({code:c,signal:y})})}),P=T(d.stdout);return{child:d,events:P,sendUserResponse(i){let c=JSON.stringify({type:"user_response",answer:i});try{d.stdin.write(c+`
@@ -1,2 +1,2 @@
1
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.6.6",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",x=`https://registry.npmjs.org/${n}`,r="kane-cli",b=[{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,N=18400,i="/callback";function P(s){return`http://${c}:${s}${i}`}var B="KANE CLI",O="*",f={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",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,b 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,N as s,i as t,P as u,B as v,O as w,f as x,k as y};
2
+ import{homedir as a}from"os";import{join as t}from"path";var m="0.6.7",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",x=`https://registry.npmjs.org/${n}`,r="kane-cli",b=[{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,N=18400,i="/callback";function P(s){return`http://${c}:${s}${i}`}var B="KANE CLI",O="*",f={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",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,b 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,N as s,i as t,P as u,B as v,O as w,f as x,k as y};
@@ -1,9 +1,9 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as K,d as W}from"./chunk-RE3BZVGE.js";import{d as D}from"./chunk-JFAFKHDX.js";import{a as G}from"./chunk-YKTYVJBN.js";import{d as X}from"./chunk-2PQXEEVY.js";import{a as Q}from"./chunk-MCQXRJGH.js";import{a as H}from"./chunk-ZZLR3O5A.js";import{g as z}from"./chunk-ZG2V2ODK.js";import{d as U,f as j}from"./chunk-5YPBPZUR.js";import{a as P,c as B}from"./chunk-6SGPN76K.js";function lt(t){let e=process.env.HOME??"";return e&&t.startsWith(e)?`~${t.slice(e.length)}`:t}import{readFileSync as Se,writeFileSync as Ee,renameSync as $e,mkdirSync as Re}from"fs";import{dirname as Ce,join as Te}from"path";var O=1,Me=720*60*1e3;function F(t){return Te(B,"embeddings",`alias-${t}.json`)}function J(t,e=Date.now()){return t!==null&&e-t.fetchedAt<Me}function Y(t){try{let e=JSON.parse(Se(t,"utf-8"));return e.wrapperVersion!==O||typeof e.purposes!="object"||e.purposes===null?null:{wrapperVersion:O,writtenByVersion:String(e.writtenByVersion??""),purposes:e.purposes}}catch{return null}}function Z(t,e,n=F(t)){let r=Y(n)?.purposes?.[e];return!r||typeof r.alias!="string"||typeof r.dims!="number"||typeof r.fetchedAt!="number"?null:{alias:r.alias,dims:r.dims,fetchedAt:r.fetchedAt}}function q(t,e,n,s=F(t)){try{Re(Ce(s),{recursive:!0});let a=Y(s)?.purposes??{};a[e]={alias:n.alias,dims:n.dims,fetchedAt:Date.now()};let o={wrapperVersion:O,writtenByVersion:P,purposes:a},m=`${s}.tmp`;Ee(m,JSON.stringify(o,null,2)+`
3
- `),$e(m,s)}catch(r){process.stderr.write(`[embed] Failed to save alias cache: ${r instanceof Error?r.message:String(r)}
4
- `)}}function De(t){return t.TESTMUAI_ENV==="stage"?"stage":"prod"}function ee(t){let e=t.env??process.env,n=t.auth?.TESTMUAI_BASIC_AUTH||e.TESTMUAI_BASIC_AUTH;if(n)return{authorization:`Basic ${n}`};let s=t.auth?.TESTMUAI_API_KEY||e.TESTMUAI_API_KEY;return s?{authorization:`Bearer ${s}`}:{}}async function te(t,e={}){let n=e.env??process.env,s=De(n),r=e.aliasCacheFile??F(s),a=e.now??Date.now,o=Z(s,t,r);if(J(o,a()))return{alias:o.alias,dims:o.dims};let d=`${G(n)}/assurance/embed/alias?purpose=${encodeURIComponent(t)}`,f=await(e.fetchImpl??fetch)(d,{method:"GET",headers:ee(e)});if(!f.ok)throw new Error(`embed alias resolve failed: ${f.status}`);let c=await f.json();return q(s,t,{alias:c.alias,dims:c.dims},r),{alias:c.alias,dims:c.dims}}async function ne(t,e,n={}){let s=n.env??process.env,r=G(s),a=await(n.fetchImpl??fetch)(`${r}/assurance/embed`,{method:"POST",headers:{...ee(n),"content-type":"application/json"},body:JSON.stringify({purpose:t,input:e})});if(!a.ok)throw new Error(`embed failed: ${a.status}`);return await a.json()}import{randomBytes as nt}from"crypto";function re(t,e){let n=Math.min(t.length,e.length),s=0,r=0,a=0;for(let o=0;o<n;o++)s+=t[o]*e[o],r+=t[o]*t[o],a+=e[o]*e[o];return r===0||a===0?0:s/(Math.sqrt(r)*Math.sqrt(a))}function se(t,e,n){return n*t+(1-n)*e}var ie=.7;import{readFileSync as Fe,writeFileSync as Ne,renameSync as Le,mkdirSync as Ge}from"fs";import{dirname as Oe,join as oe}from"path";function Ve(t){return oe(t,"embeddings")}function Ie(t){let e=t.indexOf(":");return e>=0?t.slice(e+1):t}function ae(t,e,n){let s=Ie(n);return oe(Ve(t),e,s.slice(0,2),`${s.slice(2)}.f32`)}function ce(t,e,n){try{let s=Fe(ae(t,e,n)),r=new Float32Array(Math.floor(s.length/4));for(let a=0;a<r.length;a++)r[a]=s.readFloatLE(a*4);return r}catch{return null}}function le(t,e,n,s){try{let r=ae(t,e,n);Ge(Oe(r),{recursive:!0});let a=Buffer.alloc(s.length*4);for(let m=0;m<s.length;m++)a.writeFloatLE(s[m],m*4);let o=`${r}.tmp`;Ne(o,a),Le(o,r)}catch(r){process.stderr.write(`[embed] Failed to cache vector: ${r instanceof Error?r.message:String(r)}
5
- `)}}var Pe=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar"],Be=["source_read","source_grep"],Ue=[...Pe,...Be],fe=50,V=200,pe=10,ge=50,ue=20,je=200,He=50;function N(t,e,n){let s=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(s,n))}function $(t,e){let n=t[e];if(typeof n!="string"||n.length===0)throw new w(`param "${e}" must be a non-empty string`);return n}function E(t,e){let n=t[e];if(n==null)return null;if(typeof n!="string")throw new w(`param "${e}" must be a string when present`);return n}var w=class extends Error{};function I(t,e){let n=t.getNode(e);return n?{cid:e,label:n.label,content:n.content,trust:t.trust.get(e)??null,freshness:t.stale(e)}:null}function de(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function he(t,...e){let n=de(t);if(n.size===0)return 0;let s=t.trim().toLowerCase(),r=0;for(let a of e){let o=de(a);if(o.size===0)continue;let m=0;for(let c of n)o.has(c)&&m++;let d=n.size+o.size-m,f=d===0?0:m/d;s&&a.toLowerCase().includes(s)&&(f=Math.max(f,.9)),r=Math.max(r,f)}return r}function ze(t,e){let n=$(e,"cid"),s=E(e,"type"),r=E(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new w('param "direction" must be out|in|both');let a=N(e.limit,fe,V),o=[];return(r==="out"||r==="both")&&o.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&o.push(...t.edgesInto(n)),o.filter(m=>s==null||m.type===s).slice(0,a)}function Qe(t,e){let n=$(e,"source_id"),s=t.heads.get(n)??null,r=[];for(let a of t.nodeLabel.keys()){let o=t.derivesInto(a).filter(d=>d.props.source_id===n).map(d=>({source_cid:d.props.source_cid,anchor:d.props.anchor??null}));if(o.length===0)continue;let m=I(t,a);if(m&&(r.push({...m,pins:o,pinned_to_head:s!=null&&o.some(d=>d.source_cid===s)}),r.length>=V))break}return r}function Xe(t,e){let n=$(e,"label"),s=E(e,"trust"),r=E(e,"freshness"),a=N(e.limit,fe,V),o=[];for(let{cid:m}of t.byLabel(n)){let d=I(t,m);if(d&&!(s!=null&&d.trust!==s)&&!(r!=null&&d.freshness!==r)&&(o.push(d),o.length>=a))break}return o}function Ke(t){return t.staleList().map(({cid:e,state:n})=>{let s=t.getNode(e);return{cid:e,state:n,label:s?.label??null,title:s?.content.title??null}})}function We(t,e){let n=$(e,"text"),s=E(e,"label")??"usecase",r=N(e.k,pe,ge),a=[];for(let{cid:o,content:m}of t.byLabel(s)){let d=String(m.title??""),f=String(m.summary??""),c=he(n,d,f);c<=0||a.push({cid:o,title:d,summary:f,score:Math.round(c*1e3)/1e3,trust:t.trust.get(o)??null,freshness:t.stale(o)})}return a.sort((o,m)=>m.score-o.score||o.cid.localeCompare(m.cid)),a.slice(0,r)}function _e(t,e,n){let s=t.heads.get(n);if(typeof s!="string"){let o=[...t.heads.keys()].sort().join(", ");throw new w(`unknown source_id "${n}" \u2014 known: ${o||"(none)"}`)}if(t.mediaOf(s).format==="image")throw new w(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=t.getNode(s)?.content?.blob,a=typeof r=="string"?X(e,r):null;if(a==null)throw new w(`source "${n}" blob is missing from the store`);return{head:s,lines:a.toString("utf8").replace(/\n$/,"").split(`
6
- `)}}function Je(t,e,n){return t.slice(e-1,n).map((s,r)=>`${String(e+r).padStart(4,"0")}| ${s}`).join(`
7
- `)}function Ye(t,e,n){let s=$(e,"source_id"),r=E(e,"anchor"),a=e.line_range;if(r!=null&&a!=null)throw new w("give anchor OR line_range, not both");let{head:o,lines:m}=_e(t,n,s),d=m.length,f,c;if(r!=null){let p=/^L(\d+)-L(\d+)$/.exec(r);if(!p)throw new w(`anchor "${r}" is not L<a>-L<b>`);let y=Number(p[1]),u=Number(p[2]);if(y<1||u<y||u>d)throw new w(`anchor "${r}" does not resolve (source has ${d} lines)`);f=Math.max(1,y-ue),c=Math.min(d,u+ue)}else if(a!=null){if(!Array.isArray(a)||a.length!==2||!a.every(u=>Number.isInteger(u)))throw new w('param "line_range" must be [from_line, to_line]');let[p,y]=a;if(p<1||y<p)throw new w('param "line_range" must be 1-based with from \u2264 to');if(p>d)throw new w(`line_range starts past the end (source has ${d} lines)`);f=p,c=Math.min(y,d)}else f=1,c=d;return c=Math.min(c,f+je-1),{window:Je(m,f,c),from_line:f,to_line:c,source_cid:o}}function Ze(t,e,n){let s=$(e,"pattern"),r=E(e,"source_id"),a;try{a=new RegExp(s,"u")}catch(f){throw new w(`invalid pattern: ${f instanceof Error?f.message:String(f)}`)}let o=r!=null?[r]:[...t.heads.keys()].sort(),m=[],d=!1;e:for(let f of o){if(r==null){let p=t.heads.get(f);if(typeof p!="string"||t.mediaOf(p).format==="image")continue}let{lines:c}=_e(t,n,f);for(let p=0;p<c.length;p++)if(a.test(c[p])){if(m.length>=He){d=!0;break e}m.push({source_id:f,line:p+1,text:c[p]})}}return{matches:m,truncated:d}}function qe(t,e,n,s){try{switch(e){case"get_node":return{ok:!0,result:I(t,$(n,"cid"))};case"get_edges":return{ok:!0,result:ze(t,n)};case"find_by_provenance":return{ok:!0,result:Qe(t,n)};case"match_by_type":return{ok:!0,result:Xe(t,n)};case"stale_nodes":return{ok:!0,result:Ke(t)};case"search_similar":return{ok:!0,result:We(t,n)};case"source_read":case"source_grep":{if(s==null)throw new w("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?Ye:Ze)(t,n,s)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${Ue.join(", ")}`}}}catch(r){return r instanceof w?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}}var me="assurance.sim";function et(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
8
- `)}async function tt(t,e,n){let s=$(e,"text"),r=E(e,"label")??"usecase",a=N(e.k,pe,ge),o=[];for(let{cid:d,content:f}of t.byLabel(r)){if(t.superseded.has(d))continue;let c=String(f.title??""),p=String(f.summary??""),y=String(f.description??"");o.push({cid:d,title:c,summary:p,description:y,lex:he(s,c,p,y)})}let m=d=>{let f=[];for(let c of o){let p=d(c);p.score<=0||f.push({cid:c.cid,title:c.title,summary:c.summary,score:Math.round(p.score*1e3)/1e3,trust:t.trust.get(c.cid)??null,freshness:t.stale(c.cid),...p.dense!==void 0?{dense_score:Math.round(p.dense*1e3)/1e3,lexical_score:Math.round(c.lex*1e3)/1e3}:{}})}return f.sort((c,p)=>p.score-c.score||c.cid.localeCompare(p.cid)),f.slice(0,a)};try{let d=n.readVector??ce,f=n.writeVector??le,c=n.alpha??ie,{alias:p}=await n.resolveAlias(me),y=new Map,u=[],b=[];for(let h of o){let k=d(n.contextDir,p,h.cid);k?y.set(h.cid,k):(u.push(h.cid),b.push(et(h)))}let{vectors:v}=await n.embed(me,[s,...b]),A=Float32Array.from(v[0]);for(let h=0;h<u.length;h++){let k=Float32Array.from(v[h+1]);y.set(u[h],k),f(n.contextDir,p,u[h],k)}return m(h=>{let k=y.get(h.cid),x=k?re(A,k):0;return{score:se(x,h.lex,c),dense:x}})}catch{return m(d=>({score:d.lex}))}}async function ye(t,e,n,s){if(e==="search_similar"&&s)try{return{ok:!0,result:await tt(t,n,s)}}catch(r){return r instanceof w?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}return qe(t,e,n,s?.contextDir)}var rt=2,we=10,st=2;function be(t,e,n){return t.map(s=>{let r=e.find(a=>a.id===s.id);return r&&r.selected_index!=null&&r.selected_index>=0&&r.selected_index<s.options.length?{id:s.id,resolution:"answered",selected_index:r.selected_index,free_text:null}:r&&r.free_text!=null&&s.allow_free_text?{id:s.id,resolution:"answered",selected_index:-1,free_text:r.free_text}:n.explicitAcceptDefaults?{id:s.id,resolution:"assumed-default",selected_index:s.recommended_index,flagged:!0}:{id:s.id,resolution:"deferred",selected_index:null}})}async function Tt(t,e,n,s,r=()=>{},a){let o=(i,l)=>r(i,l,t.session_id),m=(process.env.ASSURANCE_LOG_LEVEL??"info").toLowerCase()==="debug",d={contextDir:e.contextDir,resolveAlias:i=>te(i,{env:process.env,auth:e.auth}),embed:(i,l)=>ne(i,l,{env:process.env,auth:e.auth})},f=0,c=e.agent(t,{auth:e.auth,onWarn:i=>{o("warn",i),e.out(i)},onStderr:i=>o("agent_stderr",i)}),p=null,y=null,u;e.chat?.attachSender?.(i=>c.send(i)),e.initialMessage&&(c.send({type:"user_message",message_id:`msg-${t.session_id}-${nt(3).toString("hex")}`,text:e.initialMessage}),o("user_message_sent",{chars:e.initialMessage.length,...m?{text:e.initialMessage}:{}}),e.emit?.({type:"message_sent",sid:t.session_id,chars:e.initialMessage.length}),e.chat?.note(`delivered your message to the agent: "${e.initialMessage}"`));let b,v=0,A=0,h=0,k,x=K(),C=e.progress??e.out;try{for await(let i of c.events){try{e.chat?.onAgentEvent(i)}catch(l){o("chat_mirror_error",{event_type:i.type,message:l instanceof Error?l.message:String(l)})}if(i.type==="reasoning_delta"?(f+=i.text.length,process.env.KANE_TRACE_REASONING&&o("reasoning_delta",i.text)):o(i.type,i),i.type==="reasoning_done"&&o("reasoning_chars",f),i.type==="progress")C(`\u2026 ${i.stage}${i.n?` #${i.n}`:""}`),e.emit?.({type:"agent_activity",kind:"progress",label:`${i.stage}${i.n?` #${i.n}`:""}`});else if(i.type==="reasoning_delta"||i.type==="reasoning_done"||i.type==="tool_activity"||i.type==="decision_activity"){e.onStreamEvent?.(i);let l=x;if(x=W(x,i),x===l)continue;i.type==="reasoning_delta"?x.liveThinking===i.text&&C("\u2237 thinking\u2026"):i.type==="reasoning_done"?i.present&&(C(`thought for ${(i.took_ms/1e3).toFixed(1)}s`),e.emit?.({type:"agent_activity",kind:"thinking_done",label:`thought for ${(i.took_ms/1e3).toFixed(1)}s`})):i.type==="tool_activity"?i.status!=="done"&&(C(x.activity[x.activity.length-1].label),e.emit?.({type:"agent_activity",kind:"tool",label:x.activity[x.activity.length-1].label})):(C(`\xB7 ${x.activity[x.activity.length-1].label}`),e.emit?.({type:"agent_activity",kind:"decision",label:x.activity[x.activity.length-1].label}))}else if(i.type==="usage")k=i.total_credits,e.emit?.({type:"usage",credits:i.credits,total_credits:i.total_credits});else if(i.type==="graph_query"){let l=await ye(e.graphSlot?.current??s,i.method,i.params??{},d),S=l.ok?{type:"graph_result",id:i.id,ok:!0,result:l.result}:{type:"graph_result",id:i.id,ok:!1,error:l.error};o("graph_result",m?{id:i.id,method:i.method,ok:l.ok,result:l.ok?l.result:l.error}:{id:i.id,method:i.method,ok:l.ok}),c.send(S)}else if(i.type==="session_paused")u=i;else if(i.type==="ask_user"){i.text&&(e.chat?e.chat.ledger({kind:"agent",text:i.text}):e.out(i.text));let l=t.mode;if(l!=="interactive"){let g=i.questions.filter(_=>_.risk==="high");if(l==="ci"&&g.length>0){b=g,c.kill();break}if(l==="agent"&&g.length>0){o("pause_requested",{high:g.map(_=>_.id)}),c.send({type:"pause"});continue}let R=be(i.questions,[],{explicitAcceptDefaults:!0});v+=R.length;for(let _ of R)o("assumed_default",{id:_.id,resolution:_.resolution}),e.emit?.({type:"assumed_default",id:_.id,selected_index:_.selected_index,risk:i.questions.find(M=>M.id===_.id)?.risk});let T={type:"user_response",answers:R.map(_=>({id:_.id,selected_index:_.resolution==="deferred"?null:_.selected_index,free_text:null}))};c.send(T);continue}let S=await e.ask(i.questions),xe=be(i.questions,S,{explicitAcceptDefaults:!1}),ke={type:"user_response",answers:i.questions.map(g=>{let R=S.find(_=>_.id===g.id);if(R?.free_text!=null){let _=n.get(g.id)??0;if(!g.allow_free_text||_>=rt){let M=g.options[g.recommended_index]?.label??"recommended option";if(v+=1,e.emit?.({type:"assumed_default",id:g.id,selected_index:g.recommended_index,risk:g.risk}),e.chat?.noteCoercion)e.chat.noteCoercion(g,M);else{let L=g.text.replace(/\?+\s*$/,""),Ae=L.length<=36?L:`${L.slice(0,33)}\u2026`;e.out(`note: couldn't use a typed answer for "${Ae}" \u2014 kept the recommended option (${M})`)}return{id:g.id,selected_index:g.recommended_index,free_text:null}}return n.set(g.id,_+1),{id:g.id,selected_index:null,free_text:R.free_text}}let T=xe.find(_=>_.id===g.id);return T.resolution==="deferred"?{id:g.id,selected_index:null,free_text:null}:{id:g.id,selected_index:T.selected_index,free_text:null}})};c.send(ke)}else if(i.type==="chat_ops"&&!e.chat){let l=i.chat_ops??i,S=Array.isArray(l.ops)?l.ops.length:0;if(S===0)l.text&&e.out(l.text),c.send({type:"session_complete"}),o("headless_zero_op_chat_turn_complete",{chars:l.text?.length??0});else if(h<st)h+=1,c.send({type:"user_message",message_id:`nochat-${t.session_id}-${h}`,text:"[auto-repair] chat ops are unavailable in this mode \u2014 commit through finalize_design, or finish if nothing remains."}),o("headless_chat_ops_nudge",{n:h,ops:S});else{y="agent kept sending chat ops in a mode with no chat plane",e.out("error: agent kept sending chat ops in a mode with no chat plane \u2014 closing the session"),o("headless_chat_ops_terminal",{ops:S}),c.kill();break}}else if(i.type===(a.terminalEventType??"proposal")){let l=await a.onProposalEvent(i[i.type]);if(p=l.proposal,l.error&&(y=l.error),l.receipt)e.emit?.(l.receipt.event),t.mode!=="interactive"?(A+=1,l.sessionComplete||A>=we?(l.sessionComplete||(e.out(`warning: ${we} commits without completion \u2014 closing the session (runaway guard)`),o("receipt_runaway_cap",{commits:A})),c.send({type:"session_complete"}),o("session_complete_sent",{commit_n:l.receipt.event.commit_n,runaway:!l.sessionComplete})):(c.send({type:"user_message",message_id:`receipt-${t.session_id}-${String(l.receipt.event.commit_n??0)}`,text:l.receipt.text}),o("receipt_sent",{commit_n:l.receipt.event.commit_n,chars:l.receipt.text.length}))):e.chat?.holdReceipt&&(e.chat.holdReceipt(l.receipt.text),o("receipt_held",{commit_n:l.receipt.event.commit_n}));else if(l.error&&t.mode!=="interactive"){e.out("error: commit failed with no repair channel \u2014 closing the session"),o("headless_commit_error_terminal",{error:l.error}),c.kill();break}}else if(i.type==="error"){y=i.message;let l=i.failed_proposal;l&&o("failed_proposal",l)}}}finally{c.kill()}return{proposal:p,error:y,paused:u,highRisk:b,...v>0?{assumedDefaults:v}:{},...k!==void 0?{creditsTotal:k}:{}}}var it=3,ot={edit:"edit",reject:"mistake",dedup_dropped:"mistake",approve:"usage",enhance:"directed-edit",add:"directed-edit",default_accepted:"usage",default_overridden:"edit",gap_resolution:"usage",dedup_kept:"usage"};function ve(t){let{contextDir:e,graph:n,watermark:s,by:r}=t,{signals:a}=D(e,s),o=a.filter(u=>u.event_id===void 0||n.appliedEvents.has(u.event_id)),m=new Map;for(let u of o){let b=u.event_id??`${u.ts}|${u.id}|${u.verdict}|${u.polarity}`;m.has(`${b}|${u.polarity}|${u.verdict}`)||m.set(`${b}|${u.polarity}|${u.verdict}`,u)}let d=[...m.values()].sort((u,b)=>(u.event_id??u.ts)<(b.event_id??b.ts)?-1:1),f=new Map;for(let u of d){let b=`${u.verdict}|${u.tag??""}`,v=f.get(b)??{verdict:u.verdict,tag:u.tag,events:new Set};v.events.add(u.event_id??u.ts),f.set(b,v)}let c=[],p=0;for(let[,u]of[...f.entries()].sort(([b],[v])=>b<v?-1:1)){if(u.events.size<it)continue;let v={derived:!0,statement:`${u.verdict}${u.tag?`/${u.tag}`:""} recurs (${u.events.size} distinct events) \u2014 bias future proposals ${u.verdict==="approve"?"toward":"away from"} this pattern`,learned_from_kind:ot[u.verdict]??"usage",learned_from:[...u.events].sort()},A=j("stylenote",v);if(A.length>0)return{record:null,errors:A.map(k=>({code:k.code,detail:k.detail})),minted:0};let h=H("stylenote",v);n.hasNode(h)||(c.push({cid:h,label:U.STYLENOTE,content:v}),p+=1)}return c.length===0?{record:null,errors:null,minted:0}:{record:z(e,{ts:new Date().toISOString(),proposal_id:null,nodes:c,edges:[],review:[],supersessions:[],source_head_moves:{}},{expectPrev:n.latestHash}).record,errors:null,minted:p}}var at={kind:"system",id:"distiller"};function Pt(t,e=n=>process.stderr.write(n+`
9
- `)){try{let n=Q(t),{watermark:s}=D(t),r=ve({contextDir:t,graph:n,watermark:s,by:at});if(r.errors){let a=r.errors.map(o=>`${o.code}: ${o.detail}`).join("; ");return e(`warning: style-note distill skipped \u2014 ${a}`),{minted:0,error:a}}return{minted:r.minted,error:null}}catch(n){let s=n instanceof Error?n.message:String(n);return e(`warning: style-note distill skipped \u2014 ${s}`),{minted:0,error:s}}}export{lt as a,ye as b,te as c,ne as d,rt as e,be as f,Tt as g,Pt as h};
2
+ import{b as W,d as J}from"./chunk-RE3BZVGE.js";import{d as D}from"./chunk-JFAFKHDX.js";import{a as K}from"./chunk-DNNZ353O.js";import{a as G}from"./chunk-YKTYVJBN.js";import{a as X}from"./chunk-QHFUDBQH.js";import{b as Q}from"./chunk-RGDQMKNJ.js";import{a as H}from"./chunk-L4JIMNKW.js";import{e as z}from"./chunk-MBXWXBDM.js";import{d as j,f as U}from"./chunk-5YPBPZUR.js";import{a as I,c as B}from"./chunk-NMKZHHB6.js";function ut(t){let e=process.env.HOME??"";return e&&t.startsWith(e)?`~${t.slice(e.length)}`:t}import{readFileSync as Ee,writeFileSync as $e,renameSync as Re,mkdirSync as Ce}from"fs";import{dirname as Te,join as Me}from"path";var O=1,De=720*60*1e3;function F(t){return Me(B,"embeddings",`alias-${t}.json`)}function Y(t,e=Date.now()){return t!==null&&e-t.fetchedAt<De}function Z(t){try{let e=JSON.parse(Ee(t,"utf-8"));return e.wrapperVersion!==O||typeof e.purposes!="object"||e.purposes===null?null:{wrapperVersion:O,writtenByVersion:String(e.writtenByVersion??""),purposes:e.purposes}}catch{return null}}function q(t,e,n=F(t)){let r=Z(n)?.purposes?.[e];return!r||typeof r.alias!="string"||typeof r.dims!="number"||typeof r.fetchedAt!="number"?null:{alias:r.alias,dims:r.dims,fetchedAt:r.fetchedAt}}function ee(t,e,n,s=F(t)){try{Ce(Te(s),{recursive:!0});let a=Z(s)?.purposes??{};a[e]={alias:n.alias,dims:n.dims,fetchedAt:Date.now()};let o={wrapperVersion:O,writtenByVersion:I,purposes:a},m=`${s}.tmp`;$e(m,JSON.stringify(o,null,2)+`
3
+ `),Re(m,s)}catch(r){process.stderr.write(`[embed] Failed to save alias cache: ${r instanceof Error?r.message:String(r)}
4
+ `)}}function Fe(t){return t.TESTMUAI_ENV==="stage"?"stage":"prod"}function te(t){let e=t.env??process.env,n=t.auth?.TESTMUAI_BASIC_AUTH||e.TESTMUAI_BASIC_AUTH;if(n)return{authorization:`Basic ${n}`};let s=t.auth?.TESTMUAI_API_KEY||e.TESTMUAI_API_KEY;return s?{authorization:`Bearer ${s}`}:{}}async function ne(t,e={}){let n=e.env??process.env,s=Fe(n),r=e.aliasCacheFile??F(s),a=e.now??Date.now,o=q(s,t,r);if(Y(o,a()))return{alias:o.alias,dims:o.dims};let d=`${G(n)}/assurance/embed/alias?purpose=${encodeURIComponent(t)}`,f=await(e.fetchImpl??fetch)(d,{method:"GET",headers:te(e)});if(!f.ok)throw new Error(`embed alias resolve failed: ${f.status}`);let c=await f.json();return ee(s,t,{alias:c.alias,dims:c.dims},r),{alias:c.alias,dims:c.dims}}async function re(t,e,n={}){let s=n.env??process.env,r=G(s),a=await(n.fetchImpl??fetch)(`${r}/assurance/embed`,{method:"POST",headers:{...te(n),"content-type":"application/json"},body:JSON.stringify({purpose:t,input:e})});if(!a.ok)throw new Error(`embed failed: ${a.status}`);return await a.json()}import{randomBytes as rt}from"crypto";function se(t,e){let n=Math.min(t.length,e.length),s=0,r=0,a=0;for(let o=0;o<n;o++)s+=t[o]*e[o],r+=t[o]*t[o],a+=e[o]*e[o];return r===0||a===0?0:s/(Math.sqrt(r)*Math.sqrt(a))}function ie(t,e,n){return n*t+(1-n)*e}var oe=.7;import{readFileSync as Ne,writeFileSync as Le,renameSync as Ge,mkdirSync as Oe}from"fs";import{dirname as Pe,join as ae}from"path";function Ve(t){return ae(t,"embeddings")}function Ie(t){let e=t.indexOf(":");return e>=0?t.slice(e+1):t}function ce(t,e,n){let s=Ie(n);return ae(Ve(t),e,s.slice(0,2),`${s.slice(2)}.f32`)}function le(t,e,n){try{let s=Ne(ce(t,e,n)),r=new Float32Array(Math.floor(s.length/4));for(let a=0;a<r.length;a++)r[a]=s.readFloatLE(a*4);return r}catch{return null}}function ue(t,e,n,s){try{let r=ce(t,e,n);Oe(Pe(r),{recursive:!0});let a=Buffer.alloc(s.length*4);for(let m=0;m<s.length;m++)a.writeFloatLE(s[m],m*4);let o=`${r}.tmp`;Le(o,a),Ge(o,r)}catch(r){process.stderr.write(`[embed] Failed to cache vector: ${r instanceof Error?r.message:String(r)}
5
+ `)}}var Be=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar"],je=["source_read","source_grep"],Ue=[...Be,...je],pe=50,P=200,ge=10,he=50,de=20,He=200,ze=50;function N(t,e,n){let s=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(s,n))}function $(t,e){let n=t[e];if(typeof n!="string"||n.length===0)throw new w(`param "${e}" must be a non-empty string`);return n}function E(t,e){let n=t[e];if(n==null)return null;if(typeof n!="string")throw new w(`param "${e}" must be a string when present`);return n}var w=class extends Error{};function V(t,e){let n=t.getNode(e);return n?{cid:e,label:n.label,content:n.content,trust:t.trust.get(e)??null,freshness:t.stale(e)}:null}function me(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function _e(t,...e){let n=me(t);if(n.size===0)return 0;let s=t.trim().toLowerCase(),r=0;for(let a of e){let o=me(a);if(o.size===0)continue;let m=0;for(let c of n)o.has(c)&&m++;let d=n.size+o.size-m,f=d===0?0:m/d;s&&a.toLowerCase().includes(s)&&(f=Math.max(f,.9)),r=Math.max(r,f)}return r}function Qe(t,e){let n=$(e,"cid"),s=E(e,"type"),r=E(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new w('param "direction" must be out|in|both');let a=N(e.limit,pe,P),o=[];return(r==="out"||r==="both")&&o.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&o.push(...t.edgesInto(n)),o.filter(m=>s==null||m.type===s).slice(0,a)}function Xe(t,e){let n=$(e,"source_id"),s=t.heads.get(n)??null,r=[];for(let a of t.nodeLabel.keys()){let o=t.derivesInto(a).filter(d=>d.props.source_id===n).map(d=>({source_cid:d.props.source_cid,anchor:d.props.anchor??null}));if(o.length===0)continue;let m=V(t,a);if(m&&(r.push({...m,pins:o,pinned_to_head:s!=null&&o.some(d=>d.source_cid===s)}),r.length>=P))break}return r}function Ke(t,e){let n=$(e,"label"),s=E(e,"trust"),r=E(e,"freshness"),a=N(e.limit,pe,P),o=[];for(let{cid:m}of t.byLabel(n)){let d=V(t,m);if(d&&!(s!=null&&d.trust!==s)&&!(r!=null&&d.freshness!==r)&&(o.push(d),o.length>=a))break}return o}function We(t){return t.staleList().map(({cid:e,state:n})=>{let s=t.getNode(e);return{cid:e,state:n,label:s?.label??null,title:s?.content.title??null}})}function Je(t,e){let n=$(e,"text"),s=E(e,"label")??"usecase",r=N(e.k,ge,he),a=[];for(let{cid:o,content:m}of t.byLabel(s)){let d=String(m.title??""),f=String(m.summary??""),c=_e(n,d,f);c<=0||a.push({cid:o,title:d,summary:f,score:Math.round(c*1e3)/1e3,trust:t.trust.get(o)??null,freshness:t.stale(o)})}return a.sort((o,m)=>m.score-o.score||o.cid.localeCompare(m.cid)),a.slice(0,r)}function ye(t,e,n){let s=t.heads.get(n);if(typeof s!="string"){let a=[...t.heads.keys()].sort().join(", ");throw new w(`unknown source_id "${n}" \u2014 known: ${a||"(none)"}`)}if(t.mediaOf(s).format==="image")throw new w(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=K(e,t,s);if(r==null)throw new w(`source "${n}" blob is missing from the store`);return{head:s,lines:r.toString("utf8").replace(/\n$/,"").split(`
6
+ `)}}function Ye(t,e,n){return t.slice(e-1,n).map((s,r)=>`${String(e+r).padStart(4,"0")}| ${s}`).join(`
7
+ `)}function Ze(t,e,n){let s=$(e,"source_id"),r=E(e,"anchor"),a=e.line_range;if(r!=null&&a!=null)throw new w("give anchor OR line_range, not both");let{head:o,lines:m}=ye(t,n,s),d=m.length,f,c;if(r!=null){let p=/^L(\d+)-L(\d+)$/.exec(r);if(!p)throw new w(`anchor "${r}" is not L<a>-L<b>`);let y=Number(p[1]),u=Number(p[2]);if(y<1||u<y||u>d)throw new w(`anchor "${r}" does not resolve (source has ${d} lines)`);f=Math.max(1,y-de),c=Math.min(d,u+de)}else if(a!=null){if(!Array.isArray(a)||a.length!==2||!a.every(u=>Number.isInteger(u)))throw new w('param "line_range" must be [from_line, to_line]');let[p,y]=a;if(p<1||y<p)throw new w('param "line_range" must be 1-based with from \u2264 to');if(p>d)throw new w(`line_range starts past the end (source has ${d} lines)`);f=p,c=Math.min(y,d)}else f=1,c=d;return c=Math.min(c,f+He-1),{window:Ye(m,f,c),from_line:f,to_line:c,source_cid:o}}function qe(t,e,n){let s=$(e,"pattern"),r=E(e,"source_id"),a;try{a=new RegExp(s,"u")}catch(f){throw new w(`invalid pattern: ${f instanceof Error?f.message:String(f)}`)}let o=r!=null?[r]:[...t.heads.keys()].sort(),m=[],d=!1;e:for(let f of o){if(r==null){let p=t.heads.get(f);if(typeof p!="string"||t.mediaOf(p).format==="image")continue}let{lines:c}=ye(t,n,f);for(let p=0;p<c.length;p++)if(a.test(c[p])){if(m.length>=ze){d=!0;break e}m.push({source_id:f,line:p+1,text:c[p]})}}return{matches:m,truncated:d}}function et(t,e,n,s){try{switch(e){case"get_node":return{ok:!0,result:V(t,$(n,"cid"))};case"get_edges":return{ok:!0,result:Qe(t,n)};case"find_by_provenance":return{ok:!0,result:Xe(t,n)};case"match_by_type":return{ok:!0,result:Ke(t,n)};case"stale_nodes":return{ok:!0,result:We(t)};case"search_similar":return{ok:!0,result:Je(t,n)};case"source_read":case"source_grep":{if(s==null)throw new w("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?Ze:qe)(t,n,s)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${Ue.join(", ")}`}}}catch(r){return r instanceof w?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}}var fe="assurance.sim";function tt(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
8
+ `)}async function nt(t,e,n){let s=$(e,"text"),r=E(e,"label")??"usecase",a=N(e.k,ge,he),o=[];for(let{cid:d,content:f}of t.byLabel(r)){if(t.superseded.has(d))continue;let c=String(f.title??""),p=String(f.summary??""),y=String(f.description??"");o.push({cid:d,title:c,summary:p,description:y,lex:_e(s,c,p,y)})}let m=d=>{let f=[];for(let c of o){let p=d(c);p.score<=0||f.push({cid:c.cid,title:c.title,summary:c.summary,score:Math.round(p.score*1e3)/1e3,trust:t.trust.get(c.cid)??null,freshness:t.stale(c.cid),...p.dense!==void 0?{dense_score:Math.round(p.dense*1e3)/1e3,lexical_score:Math.round(c.lex*1e3)/1e3}:{}})}return f.sort((c,p)=>p.score-c.score||c.cid.localeCompare(p.cid)),f.slice(0,a)};try{let d=n.readVector??le,f=n.writeVector??ue,c=n.alpha??oe,{alias:p}=await n.resolveAlias(fe),y=new Map,u=[],b=[];for(let h of o){let k=d(n.contextDir,p,h.cid);k?y.set(h.cid,k):(u.push(h.cid),b.push(tt(h)))}let{vectors:v}=await n.embed(fe,[s,...b]),A=Float32Array.from(v[0]);for(let h=0;h<u.length;h++){let k=Float32Array.from(v[h+1]);y.set(u[h],k),f(n.contextDir,p,u[h],k)}return m(h=>{let k=y.get(h.cid),x=k?se(A,k):0;return{score:ie(x,h.lex,c),dense:x}})}catch{return m(d=>({score:d.lex}))}}async function we(t,e,n,s){if(e==="search_similar"&&s)try{return{ok:!0,result:await nt(t,n,s)}}catch(r){return r instanceof w?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}return et(t,e,n,s?.contextDir)}var st=2,be=10,it=2;function ve(t,e,n){return t.map(s=>{let r=e.find(a=>a.id===s.id);return r&&r.selected_index!=null&&r.selected_index>=0&&r.selected_index<s.options.length?{id:s.id,resolution:"answered",selected_index:r.selected_index,free_text:null}:r&&r.free_text!=null&&s.allow_free_text?{id:s.id,resolution:"answered",selected_index:-1,free_text:r.free_text}:n.explicitAcceptDefaults?{id:s.id,resolution:"assumed-default",selected_index:s.recommended_index,flagged:!0}:{id:s.id,resolution:"deferred",selected_index:null}})}async function Mt(t,e,n,s,r=()=>{},a){let o=(i,l)=>r(i,l,t.session_id),m=(process.env.ASSURANCE_LOG_LEVEL??"info").toLowerCase()==="debug",d={contextDir:e.contextDir,resolveAlias:i=>ne(i,{env:process.env,auth:e.auth}),embed:(i,l)=>re(i,l,{env:process.env,auth:e.auth})},f=0,c=e.agent(t,{auth:e.auth,onWarn:i=>{o("warn",i),e.out(i)},onStderr:i=>o("agent_stderr",i)}),p=null,y=null,u;e.chat?.attachSender?.(i=>c.send(i)),e.initialMessage&&(c.send({type:"user_message",message_id:`msg-${t.session_id}-${rt(3).toString("hex")}`,text:e.initialMessage}),o("user_message_sent",{chars:e.initialMessage.length,...m?{text:e.initialMessage}:{}}),e.emit?.({type:"message_sent",sid:t.session_id,chars:e.initialMessage.length}),e.chat?.note(`delivered your message to the agent: "${e.initialMessage}"`));let b,v=0,A=0,h=0,k,x=W(),C=e.progress??e.out;try{for await(let i of c.events){try{e.chat?.onAgentEvent(i)}catch(l){o("chat_mirror_error",{event_type:i.type,message:l instanceof Error?l.message:String(l)})}if(i.type==="reasoning_delta"?(f+=i.text.length,process.env.KANE_TRACE_REASONING&&o("reasoning_delta",i.text)):o(i.type,i),i.type==="reasoning_done"&&o("reasoning_chars",f),i.type==="progress")C(`\u2026 ${i.stage}${i.n?` #${i.n}`:""}`),e.emit?.({type:"agent_activity",kind:"progress",label:`${i.stage}${i.n?` #${i.n}`:""}`});else if(i.type==="reasoning_delta"||i.type==="reasoning_done"||i.type==="tool_activity"||i.type==="decision_activity"){e.onStreamEvent?.(i);let l=x;if(x=J(x,i),x===l)continue;i.type==="reasoning_delta"?x.liveThinking===i.text&&C("\u2237 thinking\u2026"):i.type==="reasoning_done"?i.present&&(C(`thought for ${(i.took_ms/1e3).toFixed(1)}s`),e.emit?.({type:"agent_activity",kind:"thinking_done",label:`thought for ${(i.took_ms/1e3).toFixed(1)}s`})):i.type==="tool_activity"?i.status!=="done"&&(C(x.activity[x.activity.length-1].label),e.emit?.({type:"agent_activity",kind:"tool",label:x.activity[x.activity.length-1].label})):(C(`\xB7 ${x.activity[x.activity.length-1].label}`),e.emit?.({type:"agent_activity",kind:"decision",label:x.activity[x.activity.length-1].label}))}else if(i.type==="usage")k=i.total_credits,e.emit?.({type:"usage",credits:i.credits,total_credits:i.total_credits});else if(i.type==="graph_query"){let l=await we(e.graphSlot?.current??s,i.method,i.params??{},d),S=l.ok?{type:"graph_result",id:i.id,ok:!0,result:l.result}:{type:"graph_result",id:i.id,ok:!1,error:l.error};o("graph_result",m?{id:i.id,method:i.method,ok:l.ok,result:l.ok?l.result:l.error}:{id:i.id,method:i.method,ok:l.ok}),c.send(S)}else if(i.type==="session_paused")u=i;else if(i.type==="ask_user"){i.text&&(e.chat?e.chat.ledger({kind:"agent",text:i.text}):e.out(i.text));let l=t.mode;if(l!=="interactive"){let g=i.questions.filter(_=>_.risk==="high");if(l==="ci"&&g.length>0){b=g,c.kill();break}if(l==="agent"&&g.length>0){o("pause_requested",{high:g.map(_=>_.id)}),c.send({type:"pause"});continue}let R=ve(i.questions,[],{explicitAcceptDefaults:!0});v+=R.length;for(let _ of R)o("assumed_default",{id:_.id,resolution:_.resolution}),e.emit?.({type:"assumed_default",id:_.id,selected_index:_.selected_index,risk:i.questions.find(M=>M.id===_.id)?.risk});let T={type:"user_response",answers:R.map(_=>({id:_.id,selected_index:_.resolution==="deferred"?null:_.selected_index,free_text:null}))};c.send(T);continue}let S=await e.ask(i.questions),ke=ve(i.questions,S,{explicitAcceptDefaults:!1}),Ae={type:"user_response",answers:i.questions.map(g=>{let R=S.find(_=>_.id===g.id);if(R?.free_text!=null){let _=n.get(g.id)??0;if(!g.allow_free_text||_>=st){let M=g.options[g.recommended_index]?.label??"recommended option";if(v+=1,e.emit?.({type:"assumed_default",id:g.id,selected_index:g.recommended_index,risk:g.risk}),e.chat?.noteCoercion)e.chat.noteCoercion(g,M);else{let L=g.text.replace(/\?+\s*$/,""),Se=L.length<=36?L:`${L.slice(0,33)}\u2026`;e.out(`note: couldn't use a typed answer for "${Se}" \u2014 kept the recommended option (${M})`)}return{id:g.id,selected_index:g.recommended_index,free_text:null}}return n.set(g.id,_+1),{id:g.id,selected_index:null,free_text:R.free_text}}let T=ke.find(_=>_.id===g.id);return T.resolution==="deferred"?{id:g.id,selected_index:null,free_text:null}:{id:g.id,selected_index:T.selected_index,free_text:null}})};c.send(Ae)}else if(i.type==="chat_ops"&&!e.chat){let l=i.chat_ops??i,S=Array.isArray(l.ops)?l.ops.length:0;if(S===0)l.text&&e.out(l.text),c.send({type:"session_complete"}),o("headless_zero_op_chat_turn_complete",{chars:l.text?.length??0});else if(h<it)h+=1,c.send({type:"user_message",message_id:`nochat-${t.session_id}-${h}`,text:"[auto-repair] chat ops are unavailable in this mode \u2014 commit through finalize_design, or finish if nothing remains."}),o("headless_chat_ops_nudge",{n:h,ops:S});else{y="agent kept sending chat ops in a mode with no chat plane",e.out("error: agent kept sending chat ops in a mode with no chat plane \u2014 closing the session"),o("headless_chat_ops_terminal",{ops:S}),c.kill();break}}else if(i.type===(a.terminalEventType??"proposal")){let l=await a.onProposalEvent(i[i.type]);if(p=l.proposal,l.error&&(y=l.error),l.receipt)e.emit?.(l.receipt.event),t.mode!=="interactive"?(A+=1,l.sessionComplete||A>=be?(l.sessionComplete||(e.out(`warning: ${be} commits without completion \u2014 closing the session (runaway guard)`),o("receipt_runaway_cap",{commits:A})),c.send({type:"session_complete"}),o("session_complete_sent",{commit_n:l.receipt.event.commit_n,runaway:!l.sessionComplete})):(c.send({type:"user_message",message_id:`receipt-${t.session_id}-${String(l.receipt.event.commit_n??0)}`,text:l.receipt.text}),o("receipt_sent",{commit_n:l.receipt.event.commit_n,chars:l.receipt.text.length}))):e.chat?.holdReceipt&&(e.chat.holdReceipt(l.receipt.text),o("receipt_held",{commit_n:l.receipt.event.commit_n}));else if(l.error&&t.mode!=="interactive"){e.out("error: commit failed with no repair channel \u2014 closing the session"),o("headless_commit_error_terminal",{error:l.error}),c.kill();break}}else if(i.type==="error"){y=i.message;let l=i.failed_proposal;l&&o("failed_proposal",l)}}}finally{c.kill()}return{proposal:p,error:y,paused:u,highRisk:b,...v>0?{assumedDefaults:v}:{},...k!==void 0?{creditsTotal:k}:{}}}var ot=3,at={edit:"edit",reject:"mistake",dedup_dropped:"mistake",approve:"usage",enhance:"directed-edit",add:"directed-edit",default_accepted:"usage",default_overridden:"edit",gap_resolution:"usage",dedup_kept:"usage"};function xe(t){let{contextDir:e,graph:n,watermark:s,by:r}=t,{signals:a}=D(e,s),o=a.filter(u=>u.event_id===void 0||n.appliedEvents.has(u.event_id)),m=new Map;for(let u of o){let b=u.event_id??`${u.ts}|${u.id}|${u.verdict}|${u.polarity}`;m.has(`${b}|${u.polarity}|${u.verdict}`)||m.set(`${b}|${u.polarity}|${u.verdict}`,u)}let d=[...m.values()].sort((u,b)=>(u.event_id??u.ts)<(b.event_id??b.ts)?-1:1),f=new Map;for(let u of d){let b=`${u.verdict}|${u.tag??""}`,v=f.get(b)??{verdict:u.verdict,tag:u.tag,events:new Set};v.events.add(u.event_id??u.ts),f.set(b,v)}let c=[],p=0;for(let[,u]of[...f.entries()].sort(([b],[v])=>b<v?-1:1)){if(u.events.size<ot)continue;let v={derived:!0,statement:`${u.verdict}${u.tag?`/${u.tag}`:""} recurs (${u.events.size} distinct events) \u2014 bias future proposals ${u.verdict==="approve"?"toward":"away from"} this pattern`,learned_from_kind:at[u.verdict]??"usage",learned_from:[...u.events].sort()},A=U("stylenote",v);if(A.length>0)return{record:null,errors:A.map(k=>({code:k.code,detail:k.detail})),minted:0};let h=H("stylenote",v);n.hasNode(h)||(c.push({cid:h,label:j.STYLENOTE,content:v}),p+=1)}return c.length===0?{record:null,errors:null,minted:0}:{record:z(e,{ts:new Date().toISOString(),proposal_id:null,nodes:c,edges:[],review:[],supersessions:[],source_head_moves:{}},{expectPrev:n.latestHash}).record,errors:null,minted:p}}var ct={kind:"system",id:"distiller"};function jt(t,e=n=>process.stderr.write(n+`
9
+ `)){try{let n=X(t),{watermark:s}=D(t),r=xe({contextDir:t,graph:n,watermark:s,by:ct});if(r.errors){let a=r.errors.map(o=>`${o.code}: ${o.detail}`).join("; ");return e(`warning: style-note distill skipped \u2014 ${a}`),{minted:0,error:a}}if(r.minted>0)try{Q(t)}catch{}return{minted:r.minted,error:null}}catch(n){let s=n instanceof Error?n.message:String(n);return e(`warning: style-note distill skipped \u2014 ${s}`),{minted:0,error:s}}}export{ut as a,we as b,ne as c,re as d,st as e,ve as f,Mt as g,jt as h};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as o}from"./chunk-ZG2V2ODK.js";import{existsSync as c,mkdirSync as f,readFileSync as u,renameSync as l,writeFileSync as g}from"fs";import{dirname as p,join as a}from"path";function i(t,r){let n=r.startsWith("sha256:")?r.slice(7):r;return a(t,"blobs",n.slice(0,2),n.slice(2))}function B(t,r){return i(t,r)}function m(t){let r=Buffer.concat([Buffer.from("assurance.blob\0","utf8"),t]);return"sha256:"+o(r)}function d(t,r){let n=m(r),e=i(t,n);if(!c(e)){f(p(e),{recursive:!0});let s=`${e}.tmp-${process.pid}`;g(s,r),l(s,e)}return n}function S(t,r){let n=i(t,r);return c(n)?u(n):null}export{B as a,m as b,d as c,S as d};
2
+ import{b as o}from"./chunk-IAHKTEET.js";import{existsSync as c,mkdirSync as f,readFileSync as u,renameSync as l,writeFileSync as g}from"fs";import{dirname as p,join as a}from"path";function i(t,r){let n=r.startsWith("sha256:")?r.slice(7):r;return a(t,"blobs",n.slice(0,2),n.slice(2))}function B(t,r){return i(t,r)}function m(t){let r=Buffer.concat([Buffer.from("assurance.blob\0","utf8"),t]);return"sha256:"+o(r)}function d(t,r){let n=m(r),e=i(t,n);if(!c(e)){f(p(e),{recursive:!0});let s=`${e}.tmp-${process.pid}`;g(s,r),l(s,e)}return n}function S(t,r){let n=i(t,r);return c(n)?u(n):null}export{B as a,m as b,d as c,S as d};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as O}from"./chunk-3C5GMAM4.js";import{a as S,b as A,d as P}from"./chunk-GRB66C5S.js";import{a as U}from"./chunk-JFAFKHDX.js";import{a as G}from"./chunk-QPZRHAYK.js";import{d as T}from"./chunk-2PQXEEVY.js";import{a as E,b as $}from"./chunk-MCQXRJGH.js";import{d as g,e as m}from"./chunk-5YPBPZUR.js";var v=(e,t,n=new Set)=>{let o=e.nameOf.get(t);if(o!==void 0)return o;if(n.has(t))return t;n.add(t);for(let[s,r]of e.superseded){if(r!==t)continue;let c=v(e,s,n);if(c!==s)return c}return t};function M(e,t){let n=e.stale(t);if(n==="fresh")return;if(n==="orphaned")return"orphaned \u2014 no live source evidences this item";let o=[],s=new Map;for(let r of e.derivesInto(t))s.set(String(r.props.source_id),r);for(let[r,c]of s){let i=e.heads.get(r);if(i==null||i===c.props.source_cid)continue;let u=e.convChains.get(r)?.chain;u&&u.includes(String(c.props.source_cid))||o.push(`DERIVES pin ${r}@${String(c.props.source_cid).slice(0,19)} broke \u2014 the source head moved`)}for(let r of e.edgesFrom(t)){if(r.type===m.DERIVES||!e.superseded.has(r.dst))continue;let c=e.tipOf(r.dst);if(e.superseded.has(c)){o.push(`${r.type} pin \u2192 ${v(e,r.dst)} \u2014 target retired`);continue}let i=L(e,r.dst,c);o.push(i.length>0?`${v(e,r.dst)} updated: ${i.map(u=>u.field).join(", ")}`:`${r.type} pin \u2192 ${v(e,r.dst)} \u2014 target superseded`)}return o.length>0?o.join("; "):"stale \u2014 a pinned dependency moved"}function L(e,t,n){let o=e.getNode(t)?.content??{},s=e.getNode(n)?.content??{},r=i=>i===void 0?"":Array.isArray(i)?i.map(String).join(" \xB7 "):typeof i=="object"?JSON.stringify(i):String(i),c=[];for(let i of[...new Set([...Object.keys(o),...Object.keys(s)])].sort())JSON.stringify(o[i])!==JSON.stringify(s[i])&&c.push({field:i,old:r(o[i]),new:r(s[i])});return c}function V(e,t){let n=[];for(let{cid:o}of e.byLabel(g.SCENARIO))e.superseded.has(o)||e.edgesFrom(o).some(s=>s.type===m.BELONGS_TO&&e.tipOf(s.dst)===t)&&n.push(o);return n}function R(e,t){let n=[],o=[],s=[],r=V(e,t),c=new Set(r),i=(u,f)=>{let d=M(e,f);return d===void 0?u:{...u,stale:!0,stale_reason:d}};for(let u of r){let f=e.getNode(u)?.content??{};n.push(i({ref:v(e,u),title:String(f.title??""),case_type:String(f.case_type??""),intent:String(f.intent??"")},u));for(let d of e.edgesInto(u)){if(d.type!==m.AUTOMATES||e.superseded.has(d.src))continue;let a=e.getNode(d.src)?.content??{},l=e.edgesFrom(d.src).filter(p=>p.type===m.VERIFIES&&!e.superseded.has(p.dst)).map(p=>v(e,p.dst));o.push(i({ref:v(e,d.src),title:String(a.title??""),check:a.check,verifies:l},d.src))}}for(let{cid:u}of e.byLabel(g.AC)){if(e.superseded.has(u))continue;let f=e.edgesFrom(u).find(p=>p.type===m.SCOPED_TO);if(!f)continue;let d=e.tipOf(f.dst);if(!(d===t||c.has(d)))continue;let l=e.getNode(u)?.content??{};s.push(i({ref:v(e,u),text:String(l.text??""),kind:String(l.kind??""),scope:d===t?"use-case":v(e,d)},u))}return{scenarios:n,tests:o,acs:s}}function I(e,t,n){let o=t.getNode(n)?.content.blob;if(typeof o!="string")return null;let s=T(e,o);return s===null?null:s.toString("utf8")}function q(e,t){let n=t.split(`
2
+ import{a as O}from"./chunk-3C5GMAM4.js";import{a as S,b as A,d as P}from"./chunk-GRB66C5S.js";import{a as U}from"./chunk-JFAFKHDX.js";import{b as G}from"./chunk-CIFVUX3B.js";import{a as T}from"./chunk-DNNZ353O.js";import{a as E,b as $}from"./chunk-QHFUDBQH.js";import{d as g,e as m}from"./chunk-5YPBPZUR.js";var v=(e,t,n=new Set)=>{let o=e.nameOf.get(t);if(o!==void 0)return o;if(n.has(t))return t;n.add(t);for(let[s,r]of e.superseded){if(r!==t)continue;let c=v(e,s,n);if(c!==s)return c}return t};function M(e,t){let n=e.stale(t);if(n==="fresh")return;if(n==="orphaned")return"orphaned \u2014 no live source evidences this item";let o=[],s=new Map;for(let r of e.derivesInto(t))s.set(String(r.props.source_id),r);for(let[r,c]of s){let i=e.heads.get(r);if(i==null||i===c.props.source_cid)continue;let u=e.convChains.get(r)?.chain;u&&u.includes(String(c.props.source_cid))||o.push(`DERIVES pin ${r}@${String(c.props.source_cid).slice(0,19)} broke \u2014 the source head moved`)}for(let r of e.edgesFrom(t)){if(r.type===m.DERIVES||!e.superseded.has(r.dst))continue;let c=e.tipOf(r.dst);if(e.superseded.has(c)){o.push(`${r.type} pin \u2192 ${v(e,r.dst)} \u2014 target retired`);continue}let i=L(e,r.dst,c);o.push(i.length>0?`${v(e,r.dst)} updated: ${i.map(u=>u.field).join(", ")}`:`${r.type} pin \u2192 ${v(e,r.dst)} \u2014 target superseded`)}return o.length>0?o.join("; "):"stale \u2014 a pinned dependency moved"}function L(e,t,n){let o=e.getNode(t)?.content??{},s=e.getNode(n)?.content??{},r=i=>i===void 0?"":Array.isArray(i)?i.map(String).join(" \xB7 "):typeof i=="object"?JSON.stringify(i):String(i),c=[];for(let i of[...new Set([...Object.keys(o),...Object.keys(s)])].sort())JSON.stringify(o[i])!==JSON.stringify(s[i])&&c.push({field:i,old:r(o[i]),new:r(s[i])});return c}function V(e,t){let n=[];for(let{cid:o}of e.byLabel(g.SCENARIO))e.superseded.has(o)||e.edgesFrom(o).some(s=>s.type===m.BELONGS_TO&&e.tipOf(s.dst)===t)&&n.push(o);return n}function R(e,t){let n=[],o=[],s=[],r=V(e,t),c=new Set(r),i=(u,f)=>{let a=M(e,f);return a===void 0?u:{...u,stale:!0,stale_reason:a}};for(let u of r){let f=e.getNode(u)?.content??{};n.push(i({ref:v(e,u),title:String(f.title??""),case_type:String(f.case_type??""),intent:String(f.intent??"")},u));for(let a of e.edgesInto(u)){if(a.type!==m.AUTOMATES||e.superseded.has(a.src))continue;let d=e.getNode(a.src)?.content??{},l=e.edgesFrom(a.src).filter(p=>p.type===m.VERIFIES&&!e.superseded.has(p.dst)).map(p=>v(e,p.dst));o.push(i({ref:v(e,a.src),title:String(d.title??""),check:d.check,verifies:l},a.src))}}for(let{cid:u}of e.byLabel(g.AC)){if(e.superseded.has(u))continue;let f=e.edgesFrom(u).find(p=>p.type===m.SCOPED_TO);if(!f)continue;let a=e.tipOf(f.dst);if(!(a===t||c.has(a)))continue;let l=e.getNode(u)?.content??{};s.push(i({ref:v(e,u),text:String(l.text??""),kind:String(l.kind??""),scope:a===t?"use-case":v(e,a)},u))}return{scenarios:n,tests:o,acs:s}}function I(e,t,n){let o=T(e,t,n);return o===null?null:o.toString("utf8")}function q(e,t){let n=t.split(`
3
3
  `).map(s=>s.replace(/^\d+\| /,"")),o=[];for(let s of e.split(`
4
4
  `)){let r=s.trim();if(r.length===0)continue;let c=n.find(i=>i.includes(r));c!==void 0&&!o.includes(c.trim())&&o.push(c.trim())}return o.length>0?o.join(`
5
- `):{removed:!0}}function J(e,t,n,o){if(o!==void 0&&o.trim().length>0)return{kind:"user-directive",text:o.trim()};let s=[n,...R(t,n).acs.map(u=>t.resolve(u.ref)?.cid??"")].filter(Boolean),r=[],c=new Set;for(let u of s){let f=new Map;for(let d of t.derivesInto(u))f.set(String(d.props.source_id),d);for(let[d,a]of f){let l=t.heads.get(d);if(l==null||l===a.props.source_cid)continue;let p=String(a.props.anchor),b=`${d}\0${p}`;if(c.has(b)||p==="img#whole")continue;c.add(b);let k=I(e,t,String(a.props.source_cid)),w=k===null?null:G(k,p);if(w===null)continue;let x=I(e,t,l);r.push({source_id:d,anchor:p,old_anchor_text:w,new_anchor_text:x===null?{removed:!0}:q(w,x)})}}let i;for(let[u,f]of t.superseded){if(f!==n||t.nodeLabel.get(u)!==g.USECASE)continue;let d=L(t,u,n);d.length>0&&(i=d);break}return{kind:"source-change",changes:r,...i?{uc_updated:i}:{}}}function N(e,t,n,o){let s=R(t,n);if(s.scenarios.length===0&&s.tests.length===0&&s.acs.length===0)return;let r=J(e,t,n,o);if(!(r.kind==="source-change"&&r.changes.length===0&&!r.uc_updated))return{prior_design:s,change_delta:r}}var _=new Set([g.USECASE,g.SCENARIO,g.AC,g.TEST]);function h(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function y(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function D(e,t,n){if(n===g.USECASE)return t;if(n===g.SCENARIO)return y(e,t,m.BELONGS_TO);if(n===g.AC){let o=y(e,t,m.SCOPED_TO);return o?e.nodeLabel.get(o)===g.USECASE?o:y(e,o,m.BELONGS_TO):null}if(n===g.TEST){let o=y(e,t,m.AUTOMATES);return o?y(e,o,m.BELONGS_TO):null}return null}function j(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function B(e,t){return{ucTip:t,display:j(e,t),seamRef:e.nameOf.get(t)??t}}function Y(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!_.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let r=D(e,o,s);return!r||e.nodeLabel.get(r)!==g.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(r)?{ok:!1,message:`use-case ${j(e,r)} was removed \u2014 nothing to evolve`}:{ok:!0,target:B(e,r)}}function de(e,t){return C(e,t)}function C(e,t){let n=[];for(let{cid:s}of e.byLabel(g.SCENARIO)){if(!h(e,s)||!e.edgesFrom(s).some(c=>c.type===m.BELONGS_TO&&e.tipOf(c.dst)===t))continue;let r=e.edgesInto(s).filter(c=>c.type===m.AUTOMATES&&h(e,c.src));if(r.length===0)n.push({scenario:s,test:null});else for(let c of r)n.push({scenario:s,test:c.src})}let o=new Map;for(let{cid:s}of e.byLabel(g.AC)){if(!h(e,s)||D(e,s,g.AC)!==t)continue;let r=e.edgesInto(s).filter(c=>c.type===m.VERIFIES&&h(e,c.src)).map(c=>c.src).sort();o.set(s,r)}return{pairs:n,verifies:o}}function H(e,t){let n=c=>`${c.scenario}\0${c.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),r=[];for(let[c,i]of e.verifies){let u=t.verifies.get(c);u&&(i.length===u.length&&i.every((f,d)=>f===u[d])||r.push({ac:c,before:i,after:u}))}return{superseded:e.pairs.filter(c=>!s.has(n(c))),minted:t.pairs.filter(c=>!o.has(n(c))),retained:t.pairs.filter(c=>o.has(n(c))),moves:r}}function z(e,t,n,o,s){let r=i=>t.nameOf.get(i)??i,c=i=>` - ${r(i.scenario)} \xB7 ${i.test?r(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(c(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(c(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(c(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=f=>f.length>0?f.map(r).join(" + "):"(none)";e.out(` - ${r(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function F(e,t,n,o,s,r){let c=E(e),i=O(c,t.ucTip);if(!i)return r==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(S(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=C(c,t.ucTip),f=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(f);else if(!await o.confirm(`${f} \u2014 proceed?`))return o.out(r==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let d=N(e,c,t.ucTip,n.because),a=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...d!==void 0?{changeDelta:d.change_delta,priorDesign:d.prior_design}:{}});if(a===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:a,outcome:"paused"};if(a!==0)return S(o,`design run for ${t.display} ended with exit code ${a} \u2014 no diff to report`),{code:a,outcome:"failed"};let l=E(e),p=l.tipOf(t.ucTip),b=O(l,p)?.seq;return z(o,l,t.display,{before:i.seq,after:b??"?"},H(u,C(l,p))),{code:0,outcome:"evolved"}}function K(e){let t=new Map,n=0;for(let{cid:s,state:r}of e.staleList()){if(r==="superseded")continue;let c=e.nodeLabel.get(s);if(!c||!_.has(c)||!h(e,s)||!$(e,s))continue;let i=D(e,s,c);!i||e.nodeLabel.get(i)!==g.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,B(e,i)))}return{targets:[...t.values()].sort((s,r)=>s.display<r.display?-1:s.display>r.display?1:0),staleCount:n}}function Q(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!_.has(s)||!h(e,n))&&$(e,n)&&D(e,n,s)===t)return!0}return!1}async function W(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return S(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return S(n,"evolve needs a <ref> or --from-stale"),2;let r=A(s,n);if(!r)return 2;let c=o.runDesignForUc??X;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=E(r),u,f=null;if(e){let a=Y(i,e);if(!a.ok)return S(n,a.message),2;if(!t.because&&O(i,a.target.ucTip)&&!Q(i,a.target.ucTip))return S(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[a.target]}else{let{targets:a,staleCount:l}=K(i);if(a.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;f=`from-stale: ${l} stale node(s) \u2192 ${a.length} use-case(s)`,u=a}if(!t.yes&&!n.isTTY)return S(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(f&&n.out(f),e){let a=await F(r,u[0],t,n,c,"single");return a.outcome==="evolved"&&t.because&&U(r,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),a.code}let d=0;for(let a of u){let{code:l}=await F(r,a,t,n,c,"batch");l!==0&&d===0&&(d=l)}return d}var X=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-JLMT57Q3.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...r)=>!0);try{return await o()}finally{process.stdout.write=s}};async function ae(e,t){return W(e,t,P(),{})}export{Y as a,de as b,F as c,K as d,W as e,X as f,ae as g};
5
+ `):{removed:!0}}function J(e,t,n,o){if(o!==void 0&&o.trim().length>0)return{kind:"user-directive",text:o.trim()};let s=[n,...R(t,n).acs.map(u=>t.resolve(u.ref)?.cid??"")].filter(Boolean),r=[],c=new Set;for(let u of s){let f=new Map;for(let a of t.derivesInto(u))f.set(String(a.props.source_id),a);for(let[a,d]of f){let l=t.heads.get(a);if(l==null||l===d.props.source_cid)continue;let p=String(d.props.anchor),b=`${a}\0${p}`;if(c.has(b)||p==="img#whole")continue;c.add(b);let k=I(e,t,String(d.props.source_cid)),w=k===null?null:G(k,p);if(w===null)continue;let x=I(e,t,l);r.push({source_id:a,anchor:p,old_anchor_text:w,new_anchor_text:x===null?{removed:!0}:q(w,x)})}}let i;for(let[u,f]of t.superseded){if(f!==n||t.nodeLabel.get(u)!==g.USECASE)continue;let a=L(t,u,n);a.length>0&&(i=a);break}return{kind:"source-change",changes:r,...i?{uc_updated:i}:{}}}function N(e,t,n,o){let s=R(t,n);if(s.scenarios.length===0&&s.tests.length===0&&s.acs.length===0)return;let r=J(e,t,n,o);if(!(r.kind==="source-change"&&r.changes.length===0&&!r.uc_updated))return{prior_design:s,change_delta:r}}var _=new Set([g.USECASE,g.SCENARIO,g.AC,g.TEST]);function h(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function y(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function D(e,t,n){if(n===g.USECASE)return t;if(n===g.SCENARIO)return y(e,t,m.BELONGS_TO);if(n===g.AC){let o=y(e,t,m.SCOPED_TO);return o?e.nodeLabel.get(o)===g.USECASE?o:y(e,o,m.BELONGS_TO):null}if(n===g.TEST){let o=y(e,t,m.AUTOMATES);return o?y(e,o,m.BELONGS_TO):null}return null}function j(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function B(e,t){return{ucTip:t,display:j(e,t),seamRef:e.nameOf.get(t)??t}}function Y(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!_.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let r=D(e,o,s);return!r||e.nodeLabel.get(r)!==g.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(r)?{ok:!1,message:`use-case ${j(e,r)} was removed \u2014 nothing to evolve`}:{ok:!0,target:B(e,r)}}function ae(e,t){return C(e,t)}function C(e,t){let n=[];for(let{cid:s}of e.byLabel(g.SCENARIO)){if(!h(e,s)||!e.edgesFrom(s).some(c=>c.type===m.BELONGS_TO&&e.tipOf(c.dst)===t))continue;let r=e.edgesInto(s).filter(c=>c.type===m.AUTOMATES&&h(e,c.src));if(r.length===0)n.push({scenario:s,test:null});else for(let c of r)n.push({scenario:s,test:c.src})}let o=new Map;for(let{cid:s}of e.byLabel(g.AC)){if(!h(e,s)||D(e,s,g.AC)!==t)continue;let r=e.edgesInto(s).filter(c=>c.type===m.VERIFIES&&h(e,c.src)).map(c=>c.src).sort();o.set(s,r)}return{pairs:n,verifies:o}}function H(e,t){let n=c=>`${c.scenario}\0${c.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),r=[];for(let[c,i]of e.verifies){let u=t.verifies.get(c);u&&(i.length===u.length&&i.every((f,a)=>f===u[a])||r.push({ac:c,before:i,after:u}))}return{superseded:e.pairs.filter(c=>!s.has(n(c))),minted:t.pairs.filter(c=>!o.has(n(c))),retained:t.pairs.filter(c=>o.has(n(c))),moves:r}}function z(e,t,n,o,s){let r=i=>t.nameOf.get(i)??i,c=i=>` - ${r(i.scenario)} \xB7 ${i.test?r(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(c(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(c(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(c(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=f=>f.length>0?f.map(r).join(" + "):"(none)";e.out(` - ${r(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function F(e,t,n,o,s,r){let c=E(e),i=O(c,t.ucTip);if(!i)return r==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(S(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=C(c,t.ucTip),f=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(f);else if(!await o.confirm(`${f} \u2014 proceed?`))return o.out(r==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let a=N(e,c,t.ucTip,n.because),d=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...a!==void 0?{changeDelta:a.change_delta,priorDesign:a.prior_design}:{}});if(d===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:d,outcome:"paused"};if(d!==0)return S(o,`design run for ${t.display} ended with exit code ${d} \u2014 no diff to report`),{code:d,outcome:"failed"};let l=E(e),p=l.tipOf(t.ucTip),b=O(l,p)?.seq;return z(o,l,t.display,{before:i.seq,after:b??"?"},H(u,C(l,p))),{code:0,outcome:"evolved"}}function K(e){let t=new Map,n=0;for(let{cid:s,state:r}of e.staleList()){if(r==="superseded")continue;let c=e.nodeLabel.get(s);if(!c||!_.has(c)||!h(e,s)||!$(e,s))continue;let i=D(e,s,c);!i||e.nodeLabel.get(i)!==g.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,B(e,i)))}return{targets:[...t.values()].sort((s,r)=>s.display<r.display?-1:s.display>r.display?1:0),staleCount:n}}function Q(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!_.has(s)||!h(e,n))&&$(e,n)&&D(e,n,s)===t)return!0}return!1}async function W(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return S(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return S(n,"evolve needs a <ref> or --from-stale"),2;let r=A(s,n);if(!r)return 2;let c=o.runDesignForUc??X;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=E(r),u,f=null;if(e){let d=Y(i,e);if(!d.ok)return S(n,d.message),2;if(!t.because&&O(i,d.target.ucTip)&&!Q(i,d.target.ucTip))return S(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[d.target]}else{let{targets:d,staleCount:l}=K(i);if(d.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;f=`from-stale: ${l} stale node(s) \u2192 ${d.length} use-case(s)`,u=d}if(!t.yes&&!n.isTTY)return S(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(f&&n.out(f),e){let d=await F(r,u[0],t,n,c,"single");return d.outcome==="evolved"&&t.because&&U(r,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),d.code}let a=0;for(let d of u){let{code:l}=await F(r,d,t,n,c,"batch");l!==0&&a===0&&(a=l)}return a}var X=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-E67W2DXG.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...r)=>!0);try{return await o()}finally{process.stdout.write=s}};async function de(e,t){return W(e,t,P(),{})}export{Y as a,ae as b,F as c,K as d,W as e,X as f,de as g};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as b,d as _}from"./chunk-2PQXEEVY.js";import{a as g,c as h}from"./chunk-ZZLR3O5A.js";import{g as S}from"./chunk-ZG2V2ODK.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{e as S}from"./chunk-MBXWXBDM.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 S}from"./chunk-6NIV7AVZ.js";import{y as o}from"./chunk-6SGPN76K.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
2
+ import{a as S}from"./chunk-TADJIOHV.js";import{y as o}from"./chunk-NMKZHHB6.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as L,b as N}from"./chunk-74RUSHIB.js";import{c as G}from"./chunk-ZG2V2ODK.js";import{e as _,g as v}from"./chunk-5YPBPZUR.js";import{existsSync as k,readFileSync as q}from"fs";function J(a){let s=N(a),u=new Map(Object.entries(s.heads)),d=new Map(Object.entries(s.trust)),r=new Map(Object.entries(s.nodeLabel)),i=new Map(Object.entries(s.superseded)),g=new Map(Object.entries(s.names)),R=new Map(Object.entries(s.archivedReason)),I=new Set(s.appliedEvents),S=new Map(Object.entries(s.conv)),T=e=>s.media[e]??{format:"text",media_type:"text/plain",anchors_supported:["L-L"]},M=new Map;for(let[e,t]of g)M.set(t,e);let h=new Map,E=e=>{if(h.has(e))return h.get(e);if(!r.has(e))return h.set(e,null),null;let t=L(a,e);if(!k(t))throw new G(`derived node file missing for ${e} \u2014 run kane-cli context rebuild`);let n=JSON.parse(q(t,"utf8"));return h.set(e,n),n},m=e=>{let t=e,n=new Set;for(;i.has(t)&&!n.has(t);){n.add(t);let o=i.get(t);if(typeof o!="string")break;t=o}return t},x=e=>{let t=u.get(e),n=r.has(e)?e:g.get(e)??(typeof t=="string"?t:void 0);if(n===void 0||!r.has(n))return null;let o=m(n);return{cid:n,tip:o,superseded:i.has(n)||i.has(o)}},b=new Map;for(let e of Object.values(s.forward))for(let t of e){let n=b.get(t.dst);n?n.push(t):b.set(t.dst,[t])}let w=e=>(e??[]).filter(t=>!i.has(t.ecid)),C=e=>w(b.get(e)),O=e=>C(e).filter(t=>t.type===_.DERIVES),y=e=>w(s.forward[e]).some(t=>v(t.type)?.pin?.comparesTo==="dst_tip"&&i.has(t.dst)),F=e=>{if(i.has(e))return"superseded";let t=O(e);if(t.length===0)return y(e)?"stale":"fresh";let n=new Map;for(let p of t)n.set(p.props.source_id,p);let o=!1,f=!1;for(let[p,c]of n){let l=u.get(p);if(l!=null&&(o=!0,l!==c.props.source_cid)){let j=S.get(p)?.chain;(!j||!j.includes(c.props.source_cid))&&(f=!0)}}return o?f||y(e)?"stale":"fresh":"orphaned"};return{heads:u,trust:d,nodeLabel:r,superseded:i,names:g,nameOf:M,archivedReason:R,appliedEvents:I,convChains:S,mediaOf:T,extractedSourceCids:new Set(s.extracted),designOf:new Map(Object.entries(s.design_of??{})),latestHash:s.applied.hash,lastSeq:s.applied.seq,hasNode:e=>r.has(e),getNode:E,byLabel:e=>[...r.entries()].filter(([,t])=>t===e).map(([t])=>({cid:t,content:E(t)?.content??{}})),edgesFrom:e=>w(s.forward[e]),edgesInto:C,derivesInto:O,resolve:x,tipOf:m,stale:F,staleList:()=>[...r.keys()].map(e=>({cid:e,state:F(e)})).filter(e=>e.state!=="fresh"),execHistory:e=>{let t=x(e);if(!t)return[];let n=m(t.cid),o=new Set([n]),f=!0;for(;f;){f=!1;for(let[c,l]of i)l!==null&&o.has(l)&&!o.has(c)&&(o.add(c),f=!0)}let p=[];for(let c of Object.entries(s.exec??{}))o.has(c[0])&&p.push(...c[1]);return p.sort((c,l)=>c.started_at<l.started_at?-1:1)}}}function V(a,s){if(a.stale(s)!=="stale")return!1;let u=new Map;for(let d of a.derivesInto(s))u.set(d.props.source_id,d);for(let[d,r]of u){let i=a.heads.get(d);if(i==null||i===r.props.source_cid)continue;let g=a.convChains.get(d)?.chain;if(!g||!g.includes(r.props.source_cid))return!0}for(let d of a.edgesFrom(s)){if(v(d.type)?.pin?.comparesTo!=="dst_tip"||!a.superseded.has(d.dst))continue;let r=a.tipOf(d.dst);if(a.superseded.has(r)||a.nodeLabel.get(r)==="usecase")return!0}return!1}export{J as a,V as b};
2
+ import{a as L,b as N}from"./chunk-RGDQMKNJ.js";import{a as G}from"./chunk-MBXWXBDM.js";import{e as _,g as v}from"./chunk-5YPBPZUR.js";import{existsSync as k,readFileSync as q}from"fs";function J(a){let s=N(a),u=new Map(Object.entries(s.heads)),d=new Map(Object.entries(s.trust)),r=new Map(Object.entries(s.nodeLabel)),i=new Map(Object.entries(s.superseded)),g=new Map(Object.entries(s.names)),R=new Map(Object.entries(s.archivedReason)),I=new Set(s.appliedEvents),S=new Map(Object.entries(s.conv)),T=e=>s.media[e]??{format:"text",media_type:"text/plain",anchors_supported:["L-L"]},M=new Map;for(let[e,t]of g)M.set(t,e);let h=new Map,E=e=>{if(h.has(e))return h.get(e);if(!r.has(e))return h.set(e,null),null;let t=L(a,e);if(!k(t))throw new G(`derived node file missing for ${e} \u2014 run kane-cli context rebuild`);let n=JSON.parse(q(t,"utf8"));return h.set(e,n),n},m=e=>{let t=e,n=new Set;for(;i.has(t)&&!n.has(t);){n.add(t);let o=i.get(t);if(typeof o!="string")break;t=o}return t},x=e=>{let t=u.get(e),n=r.has(e)?e:g.get(e)??(typeof t=="string"?t:void 0);if(n===void 0||!r.has(n))return null;let o=m(n);return{cid:n,tip:o,superseded:i.has(n)||i.has(o)}},b=new Map;for(let e of Object.values(s.forward))for(let t of e){let n=b.get(t.dst);n?n.push(t):b.set(t.dst,[t])}let w=e=>(e??[]).filter(t=>!i.has(t.ecid)),C=e=>w(b.get(e)),O=e=>C(e).filter(t=>t.type===_.DERIVES),y=e=>w(s.forward[e]).some(t=>v(t.type)?.pin?.comparesTo==="dst_tip"&&i.has(t.dst)),F=e=>{if(i.has(e))return"superseded";let t=O(e);if(t.length===0)return y(e)?"stale":"fresh";let n=new Map;for(let p of t)n.set(p.props.source_id,p);let o=!1,f=!1;for(let[p,c]of n){let l=u.get(p);if(l!=null&&(o=!0,l!==c.props.source_cid)){let j=S.get(p)?.chain;(!j||!j.includes(c.props.source_cid))&&(f=!0)}}return o?f||y(e)?"stale":"fresh":"orphaned"};return{heads:u,trust:d,nodeLabel:r,superseded:i,names:g,nameOf:M,archivedReason:R,appliedEvents:I,convChains:S,mediaOf:T,extractedSourceCids:new Set(s.extracted),designOf:new Map(Object.entries(s.design_of??{})),latestHash:s.applied.hash,lastSeq:s.applied.seq,hasNode:e=>r.has(e),getNode:E,byLabel:e=>[...r.entries()].filter(([,t])=>t===e).map(([t])=>({cid:t,content:E(t)?.content??{}})),edgesFrom:e=>w(s.forward[e]),edgesInto:C,derivesInto:O,resolve:x,tipOf:m,stale:F,staleList:()=>[...r.keys()].map(e=>({cid:e,state:F(e)})).filter(e=>e.state!=="fresh"),execHistory:e=>{let t=x(e);if(!t)return[];let n=m(t.cid),o=new Set([n]),f=!0;for(;f;){f=!1;for(let[c,l]of i)l!==null&&o.has(l)&&!o.has(c)&&(o.add(c),f=!0)}let p=[];for(let c of Object.entries(s.exec??{}))o.has(c[0])&&p.push(...c[1]);return p.sort((c,l)=>c.started_at<l.started_at?-1:1)}}}function V(a,s){if(a.stale(s)!=="stale")return!1;let u=new Map;for(let d of a.derivesInto(s))u.set(d.props.source_id,d);for(let[d,r]of u){let i=a.heads.get(d);if(i==null||i===r.props.source_cid)continue;let g=a.convChains.get(d)?.chain;if(!g||!g.includes(r.props.source_cid))return!0}for(let d of a.edgesFrom(s)){if(v(d.type)?.pin?.comparesTo!=="dst_tip"||!a.superseded.has(d.dst))continue;let r=a.tipOf(d.dst);if(a.superseded.has(r)||a.nodeLabel.get(r)==="usecase")return!0}return!1}export{J as a,V as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as t}from"./chunk-C42WWO7Y.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-DL5CXC64.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,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-6SGPN76K.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-NMKZHHB6.js";import{readFileSync as g,writeFileSync as o,mkdirSync as i,existsSync as p}from"fs";import{dirname as a}from"path";var n={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:l,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0},c=class{constructor(r=s){this.path=r}exists(){return p(this.path)}load(){try{let r=g(this.path,"utf-8"),e=JSON.parse(r);return{...n,...e,code_export:{...n.code_export,...e.code_export??{}},generate:{...n.generate,...e.generate??{}}}}catch{return{...n,code_export:{...n.code_export},generate:{...n.generate}}}}set(r,e){try{let t=this.load();t[r]=e,i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
3
3
  `)}catch(t){let d=t instanceof Error?t.message:String(t);process.stderr.write(`[config] Failed to save config: ${d}
4
4
  `)}}save(r){try{let t={...this.load(),...r};i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
5
5
  `)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[config] Failed to save config: ${t}
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as ve}from"./chunk-4SXD6XWV.js";import{c as we,y as d}from"./chunk-6SGPN76K.js";import{a as V}from"./chunk-HCBYKLMW.js";import{a as v,b as u,h as Te,i as de,k as Ae}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as B}from"./chunk-UR6MHSHU.js";var Be=B(ue(),1);import{readFileSync as Ye,writeFileSync as Ve,mkdirSync as Xe}from"fs";import{dirname as Ge,join as Pe}from"path";var Je=Pe(we,"command-history.json"),gt=Pe(we,"generate-history.json"),ze=200,Ee=class{entries;filePath;max;constructor(o=Je,n=ze){this.filePath=o,this.max=n,this.entries=this._load()}push(o){this.entries.length>0&&this.entries[this.entries.length-1]===o||(this.entries.push(o),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(o){let n=o.toLowerCase(),l=[];for(let s=this.entries.length-1;s>=0;s--)this.entries[s].toLowerCase().includes(n)&&l.push(this.entries[s]);return l}_load(){if(this.filePath===null)return[];try{let o=Ye(this.filePath,"utf-8"),n=JSON.parse(o);return Array.isArray(n)?n:[]}catch{return[]}}_save(){if(this.filePath!==null)try{Xe(Ge(this.filePath),{recursive:!0}),Ve(this.filePath,JSON.stringify(this.entries)+`
2
+ import{a as ve}from"./chunk-RGQIBS32.js";import{c as we,y as d}from"./chunk-NMKZHHB6.js";import{a as V}from"./chunk-HCBYKLMW.js";import{a as v,b as u,h as Te,i as de,k as Ae}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as B}from"./chunk-UR6MHSHU.js";var Be=B(ue(),1);import{readFileSync as Ye,writeFileSync as Ve,mkdirSync as Xe}from"fs";import{dirname as Ge,join as Pe}from"path";var Je=Pe(we,"command-history.json"),gt=Pe(we,"generate-history.json"),ze=200,Ee=class{entries;filePath;max;constructor(o=Je,n=ze){this.filePath=o,this.max=n,this.entries=this._load()}push(o){this.entries.length>0&&this.entries[this.entries.length-1]===o||(this.entries.push(o),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(o){let n=o.toLowerCase(),l=[];for(let s=this.entries.length-1;s>=0;s--)this.entries[s].toLowerCase().includes(n)&&l.push(this.entries[s]);return l}_load(){if(this.filePath===null)return[];try{let o=Ye(this.filePath,"utf-8"),n=JSON.parse(o);return Array.isArray(n)?n:[]}catch{return[]}}_save(){if(this.filePath!==null)try{Xe(Ge(this.filePath),{recursive:!0}),Ve(this.filePath,JSON.stringify(this.entries)+`
3
3
  `)}catch{}}};function pt(r){let o=(0,Be.useRef)(null);return o.current||(o.current=new Ee(r)),o.current}var C=B(ue(),1);var Se=B(ue(),1);var $=B(V(),1);function Le({history:r,onSelect:o,onClose:n}){let[l,s]=(0,Se.useState)(""),[c,m]=(0,Se.useState)(0),S=l?r.search(l).slice(0,8):[];return de((y,g)=>{if(g.escape){n();return}if(g.return){S.length>0&&S[c]?o(S[c]):n();return}if(g.upArrow){m(M=>Math.max(0,M-1));return}if(g.downArrow){m(M=>Math.min(S.length-1,M+1));return}if(g.backspace||g.delete){s(M=>M.slice(0,-1)),m(0);return}y&&!g.ctrl&&!g.meta&&(s(M=>M+y),m(0))}),(0,$.jsxs)(v,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,$.jsx)(u,{color:d.muted,bold:!0,children:"reverse search"}),(0,$.jsxs)(v,{gap:1,children:[(0,$.jsx)(u,{color:d.dim,children:"search:"}),(0,$.jsx)(u,{children:l}),(0,$.jsx)(u,{color:d.orange,children:"\u2588"})]}),S.length>0&&(0,$.jsx)(u,{children:" "}),S.map((y,g)=>(0,$.jsx)(v,{marginLeft:2,children:(0,$.jsxs)(u,{color:g===c?d.orange:d.dim,bold:g===c,children:[g===c?"\u25B8 ":" ",y]})},`${g}-${y}`))]})}var X=B(V(),1);function De({commands:r,selectedIndex:o}){return r.length===0?null:(0,X.jsx)(v,{flexDirection:"column",marginBottom:0,children:r.map((n,l)=>{let s=l===o;return(0,X.jsxs)(v,{children:[(0,X.jsx)(u,{color:s?d.orange:d.dim,children:s?"\u276F ":" "}),(0,X.jsxs)(u,{color:s?d.orange:void 0,bold:s,children:["/",n.name]}),n.args&&(0,X.jsxs)(u,{color:d.dim,children:[" ",n.args]}),(0,X.jsxs)(u,{color:d.dim,children:[" ",n.description]})]},n.name)})})}var _e=B(ue(),1);var P=B(V(),1),$e={scenario:"Scenarios",case:"Test Cases",file:"Files"};function Oe(r){let o={scenario:0,case:0,file:0};for(let n of r)o[n.kind]++;return["scenario","case","file"].filter(n=>o[n]>0).map(n=>`${o[n]} ${$e[n]}`).join(" \xB7 ")}var ge=7;function Ke({items:r,selectedIndex:o,accent:n=d.orange}){let l=r.length;if(l===0)return null;let s=Math.floor(ge/2),c=l<=ge?0:Math.max(0,Math.min(o-s,l-ge)),m=Math.min(l,c+ge),S=c,y=l-m;return(0,P.jsxs)(v,{flexDirection:"column",marginBottom:0,children:[S>0&&(0,P.jsx)(v,{children:(0,P.jsx)(u,{color:d.dim,children:` \u22EF ${S} above \u2014 ${Oe(r.slice(0,c))}`})}),r.slice(c,m).map((g,M)=>{let W=c+M,H=W===o,Q=M===0||r[W-1].kind!==g.kind;return(0,P.jsxs)(_e.default.Fragment,{children:[Q&&(0,P.jsx)(v,{children:(0,P.jsx)(u,{color:d.dim,children:$e[g.kind]})}),(0,P.jsxs)(v,{children:[(0,P.jsx)(u,{color:H?n:d.dim,children:H?"\u276F ":" "}),(0,P.jsx)(u,{color:H?n:void 0,bold:H,children:g.label})]})]},`${g.kind}:${g.value}:${W}`)}),y>0&&(0,P.jsx)(v,{children:(0,P.jsx)(u,{color:d.dim,children:` \u22EF ${y} more \u2014 ${Oe(r.slice(m))}`})})]})}var pe=B(ue(),1);var Qe=27,Ze=127,et=11;function tt(r){return r>=64&&r<=126}function nt(r,o){r===et&&o({killToEnd:!0,ctrl:!0,raw:String.fromCharCode(r)})}function rt(r,o){r===Ze&&o({backspace:!0,meta:!0,raw:"\x1B\x7F"})}function ot(r,o){let n=r.map(s=>String.fromCharCode(s)).join(""),l=/^\[1;([0-9]+)([A-D])$/.exec(n);if(l){let s=parseInt(l[1],10),c=l[2],m={raw:"\x1B"+n};if(s===2)m.shift=!0;else if(s===3)m.meta=!0;else if(s===5)m.ctrl=!0;else return;c==="A"?m.arrowUp=!0:c==="B"?m.arrowDown=!0:c==="C"?m.arrowRight=!0:c==="D"&&(m.arrowLeft=!0),o(m);return}if(n==="[H"||n==="[1~"||n==="[7~"){o({home:!0,raw:"\x1B"+n});return}if(n==="[F"||n==="[4~"||n==="[8~"){o({end:!0,raw:"\x1B"+n});return}if(n==="[3;5~"){o({delete:!0,ctrl:!0,raw:"\x1B"+n});return}if(n==="[3;3~"){o({delete:!0,meta:!0,raw:"\x1B"+n});return}}function it(r,o){r===72?o({home:!0,raw:"\x1BO"+String.fromCharCode(r)}):r===70&&o({end:!0,raw:"\x1BO"+String.fromCharCode(r)})}function st(){let r="IDLE",o=[];function n(){r="IDLE",o=[]}return{feed(l,s){for(let c of l)r==="IDLE"?c===Qe?(r="ESC",o=[]):nt(c,s):r==="ESC"?c===91?(r="CSI",o=[]):c===79?(r="SS3",o=[]):(rt(c,s),n()):r==="CSI"?(o.push(c),tt(c)&&(ot([91,...o],s),n())):r==="SS3"&&(it(c,s),n())},flushIdle(l){r==="ESC"&&o.length===0&&l({raw:"\x1B"}),n()}}}function He(r,o={}){let n=(0,pe.useRef)(r);n.current=r;let{stdin:l}=Te();(0,pe.useEffect)(()=>{if(o.isActive===!1||!l)return;let s=st(),c=null,m=S=>{c&&(clearTimeout(c),c=null);let y=Buffer.isBuffer(S)?S:Buffer.from(S,"binary");s.feed(y,g=>n.current(g)),c=setTimeout(()=>{s.flushIdle(g=>n.current(g)),c=null},50)};return l.on("data",m),()=>{l.removeListener("data",m),c&&clearTimeout(c)}},[o.isActive,l])}var x=B(V(),1);function lt(r,o){let n=o-1;for(;n>=0&&r[n]!=="@"&&r[n]!==" "&&r[n]!==`
4
4
  `;)n--;return n<0||r[n]!=="@"||n>0&&r[n-1]!==" "&&r[n-1]!==`
5
5
  `?null:{at:n,query:r.slice(n+1,o).join("")}}var ye=10;function at(r){return r.replace(/\x1b?\[200~/g,"").replace(/\x1b?\[201~/g,"").replace(/\r\n/g,`
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as k}from"./chunk-FPFOW6BS.js";import{h as a}from"./chunk-M5JQXOCE.js";import{a as m}from"./chunk-2WVKOZ6W.js";import{a as y}from"./chunk-AKHUNBQS.js";import{a as h}from"./chunk-P4HW2NTZ.js";var $=10,u=200,N=1e4,S=1e6;function T(t,e,r="streaming"){let n=r==="full-fetch"?S:N,o=$,i=0;if(t!==void 0){let s=Number(t);if(!Number.isInteger(s)||s<1||s>u)return{error:`--limit must be an integer in [1, ${u}] (got "${t}")`};o=s}if(e!==void 0){let s=Number(e);if(!Number.isInteger(s)||s<0||s>n)return{error:`--offset must be an integer in [0, ${n}] (got "${e}")`};i=s}return{limit:o,offset:i}}function C(t,e){if(!e)return t;let r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r))}function j(t,{limit:e,offset:r}){let n=t.slice(r,r+e),o=t.length>r+e;return{slice:n,hasMore:o}}function v(t,e,r=n=>process.stdout.write(`${n}
2
+ import{a as k}from"./chunk-FPFOW6BS.js";import{h as a}from"./chunk-M5JQXOCE.js";import{a as m}from"./chunk-2WVKOZ6W.js";import{a as y}from"./chunk-3NR6OTHL.js";import{a as h}from"./chunk-Z34XRBKQ.js";var $=10,u=200,N=1e4,S=1e6;function T(t,e,r="streaming"){let n=r==="full-fetch"?S:N,o=$,i=0;if(t!==void 0){let s=Number(t);if(!Number.isInteger(s)||s<1||s>u)return{error:`--limit must be an integer in [1, ${u}] (got "${t}")`};o=s}if(e!==void 0){let s=Number(e);if(!Number.isInteger(s)||s<0||s>n)return{error:`--offset must be an integer in [0, ${n}] (got "${e}")`};i=s}return{limit:o,offset:i}}function C(t,e){if(!e)return t;let r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r))}function j(t,{limit:e,offset:r}){let n=t.slice(r,r+e),o=t.length>r+e;return{slice:n,hasMore:o}}function v(t,e,r=n=>process.stdout.write(`${n}
3
3
  `)){for(let n of t)r(JSON.stringify(n));r(JSON.stringify({_meta:"page",limit:e.limit,offset:e.offset,returned:t.length,has_more:e.has_more}))}function b(t,e,r=n=>process.stdout.write(`${n}
4
- `)){if(t.length===0){r("(no results)");return}let n=Math.max(2,...t.map(s=>s.id.length)),o=`${"ID".padEnd(n)} NAME`;r(o),r(`${"-".repeat(n)} ----`);for(let s of t)r(`${s.id.padEnd(n)} ${s.name}`);r("");let i=e.offset+t.length;if(e.hasMore){let s=e.totalIsLowerBound?`${e.total}+`:`${e.total}`;r(`${i} of ${s} \u2014 next: --offset ${e.offset+e.limit}`)}else r(`${t.length} shown (${e.total} total)`)}async function B(t,e,r){if(r.username&&r.accessKey)return{ok:!0,creds:{username:r.username,access_key:r.accessKey}};let n=new h,o=n.loadBasicAuth(t,e);if(o)return{ok:!0,creds:{username:o.username,access_key:o.access_key}};let i=n.loadCredentials(t,e);if(!i)return{ok:!1,reason:"no_credentials"};let s=i.access_token;try{let{refreshOAuthToken:d}=await import("./token-refresh-CFVOA62N.js"),w=await d({creds:n,profile:t,env:e,credentials:i});w&&(s=w.accessToken)}catch(d){return{ok:!1,reason:"refresh_failed",detail:d instanceof Error?d.message:String(d)}}let c=y(e),f=await new k(c.controllerBaseUrl,async()=>s,null).resolve();return f?{ok:!0,creds:{username:f.username,access_key:f.access_key}}:{ok:!1,reason:"exchange_failed"}}function E(t,e,r){switch(r.reason){case"no_credentials":return{message:`error: no credentials for profile "${t}" [${e}]. Run \`kane-cli login\` or pass --username/--access-key.
4
+ `)){if(t.length===0){r("(no results)");return}let n=Math.max(2,...t.map(s=>s.id.length)),o=`${"ID".padEnd(n)} NAME`;r(o),r(`${"-".repeat(n)} ----`);for(let s of t)r(`${s.id.padEnd(n)} ${s.name}`);r("");let i=e.offset+t.length;if(e.hasMore){let s=e.totalIsLowerBound?`${e.total}+`:`${e.total}`;r(`${i} of ${s} \u2014 next: --offset ${e.offset+e.limit}`)}else r(`${t.length} shown (${e.total} total)`)}async function B(t,e,r){if(r.username&&r.accessKey)return{ok:!0,creds:{username:r.username,access_key:r.accessKey}};let n=new h,o=n.loadBasicAuth(t,e);if(o)return{ok:!0,creds:{username:o.username,access_key:o.access_key}};let i=n.loadCredentials(t,e);if(!i)return{ok:!1,reason:"no_credentials"};let s=i.access_token;try{let{refreshOAuthToken:d}=await import("./token-refresh-PCOAZBKK.js"),w=await d({creds:n,profile:t,env:e,credentials:i});w&&(s=w.accessToken)}catch(d){return{ok:!1,reason:"refresh_failed",detail:d instanceof Error?d.message:String(d)}}let c=y(e),f=await new k(c.controllerBaseUrl,async()=>s,null).resolve();return f?{ok:!0,creds:{username:f.username,access_key:f.access_key}}:{ok:!1,reason:"exchange_failed"}}function E(t,e,r){switch(r.reason){case"no_credentials":return{message:`error: no credentials for profile "${t}" [${e}]. Run \`kane-cli login\` or pass --username/--access-key.
5
5
  `,exitCode:2};case"refresh_failed":return{message:`error: OAuth token refresh failed for profile "${t}" [${e}]${r.detail?`: ${r.detail}`:""}. Run \`kane-cli login\` to re-auth.
6
6
  `,exitCode:2};case"exchange_failed":return{message:`error: TMS credential exchange failed for profile "${t}" [${e}]. Token may be revoked \u2014 try \`kane-cli login\`; if the problem persists, TMS may be down.
7
7
  `,exitCode:2}}}function O(t){return{id:t.project_id,name:t.name}}function M(t){return{id:t.id,name:t.name}}async function P(t,e,r,n){let o=r+n+1,i=[],s=!0;for await(let c of t.listProjectsStream({name:e})){if(i.push(...c.projects),c.done){s=!0;break}if(i.length>=o){s=!1;break}}return{items:i,doneStreaming:s}}function g(t){return!!t.agent||!process.stdin.isTTY||!process.stdout.isTTY}function _(t,e=r=>process.stdout.write(`${r}
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as q}from"./chunk-L4JIMNKW.js";import{a as b,b as S,d as C}from"./chunk-MBXWXBDM.js";import{a as R,e as I,f as j,g as L,h as F}from"./chunk-5YPBPZUR.js";import{existsSync as E,mkdirSync as P,readFileSync as k,renameSync as J,rmSync as W,writeFileSync as K}from"fs";import{dirname as V,join as y}from"path";var O=o=>y(o,"derived"),D=o=>y(O(o),"index.json");function U(o,e){let r=e.startsWith("sha256:")?e.slice(7):e;return y(O(o),"nodes",r.slice(0,2),r.slice(2)+".json")}function $(){return{applied:{seq:0,hash:null},heads:{},trust:{},nodeLabel:{},forward:{},extracted:[],design_of:{},exec:{},superseded:{},names:{},archivedReason:{},appliedEvents:[],conv:{},media:{}}}function M(o){let e=D(o);if(!E(e))return null;try{let r=JSON.parse(k(e,"utf8"));return r.superseded===void 0||r.names===void 0||r.archivedReason===void 0||r.appliedEvents===void 0||r.conv===void 0||r.media===void 0||r.exec===void 0||r.reverse!==void 0?null:r}catch{return null}}function T(o,e){P(V(o),{recursive:!0});let r=`${o}.tmp-${process.pid}`;K(r,e),J(r,o)}function w(o,e,r,p,f={}){let u=f.writeNodeFiles!==!1,h=new Set(e.extracted),m=new Set(e.appliedEvents);r.forEach((i,v)=>{for(let n of i.nodes){let s=U(o,n.cid);u&&!E(s)&&T(s,JSON.stringify({label:n.label,content:n.content})+`
3
+ `),!(n.cid in e.trust)&&n.content.derived===!0&&(e.trust[n.cid]="derived"),e.nodeLabel[n.cid]=n.label}i.proposal_id!=null&&typeof i.extraction_of=="string"&&h.add(i.extraction_of),i.design_of&&((e.design_of??={})[i.design_of.uc_cid]={engine:i.design_of.engine,seq:i.seq});for(let n of i.executions??[])((e.exec??={})[n.about]??=[]).push(n);for(let n of i.edges){let{quote:s,...t}=n.props,c=e.forward[n.src]??=[];c.some(a=>a.ecid===n.ecid)||c.push({...n,props:t}),i.proposal_id!=null&&n.type===I.DERIVES&&typeof n.props.source_cid=="string"&&h.add(n.props.source_cid)}for(let n of i.review)n.resolution==="approved"||n.resolution==="edited"?(e.trust[n.id]="trusted",delete e.archivedReason[n.id]):n.resolution==="rejected"?(e.trust[n.id]="archived",n.reason?e.archivedReason[n.id]=n.reason:delete e.archivedReason[n.id]):n.resolution==="reset"&&(e.trust[n.id]="derived",delete e.archivedReason[n.id]);for(let n of i.supersessions)n.kind==="node"?n.new===n.old?delete e.superseded[n.old]:e.superseded[n.old]=n.new:e.superseded[n.ecid]=null;for(let n of i.names??[])e.names[n.slug]=n.cid;for(let[n,s]of Object.entries(i.source_head_moves))e.heads[n]=s;for(let n of i.event_ids??[])m.add(n);if(i.media)for(let[n,s]of Object.entries(i.media)){let t=i.source_head_moves[n];typeof t=="string"&&(e.media[t]=s)}if(i.conv){let n=i.source_head_moves[i.conv.source_id];if(typeof n=="string"){let s=e.conv[i.conv.source_id],t=s&&s.chain.length>0?s.chain[s.chain.length-1]:null;i.conv.append_of===t?e.conv[i.conv.source_id]={turns:i.conv.turn,chain:[...s?.chain??[],n]}:e.conv[i.conv.source_id]={turns:i.conv.turn,chain:[n]}}}for(let[n,s]of Object.entries(i.source_head_moves))i.conv?.source_id!==n&&e.conv[n]!==void 0&&(e.conv[n]=typeof s=="string"?{turns:e.conv[n].turns,chain:[s]}:{turns:e.conv[n].turns,chain:[]});e.applied={seq:i.seq,hash:p[v]}}),e.extracted=[...h].sort(),e.appliedEvents=[...m].sort()}function x(o,e){T(D(o),JSON.stringify(e)+`
4
+ `)}function Y(o){let e=y(o,"meta.json");if(E(e))try{let r=JSON.parse(k(e,"utf8"));if(r.schema!==R||r.canonicalizer!=="v1")throw new b(`schema fence: store is ${r.schema}/${r.canonicalizer}, this build is ${R}/${"v1"} \u2014 migrate explicitly (kane-cli context rebuild after upgrading)`)}catch(r){throw r instanceof b?r:new b(`corrupt meta.json in ${o} \u2014 fix or remove it`)}}function z(o){Y(o);let e=M(o);if(e===null){e=$();let{records:f,hashes:u}=S(o);return w(o,e,f,u),x(o,e),e}let{records:r,hashes:p}=C(o,e.applied.seq,e.applied.hash);return r.length>0&&(w(o,e,r,p),x(o,e)),e}function X(o){return W(O(o),{recursive:!0,force:!0}),z(o)}function ee(o){let e=[],r=[],p=[];try{({records:r,hashes:p}=S(o))}catch(s){return{ok:!1,issues:[s instanceof b?s.message:String(s)],records:0}}let f=$();w(o,f,r,p,{writeNodeFiles:!1});let u=M(o),h=0,m=f;if(u!==null&&u.applied.seq<r.length){let s=u.applied.seq;u.applied.hash===(s===0?null:p[s-1])&&(h=r.length-s,m=$(),w(o,m,r.slice(0,s),p.slice(0,s),{writeNodeFiles:!1}))}if(u===null)e.push("derived/index.json missing or corrupt (run kane-cli context rebuild)");else{let s=t=>JSON.stringify(N(t));for(let t of["applied","heads","trust","nodeLabel","forward","extracted","superseded","names","archivedReason","appliedEvents","conv","media","design_of","exec"])s(m[t])!==s(u[t])&&e.push(`derived drift in index.${t} (run kane-cli context rebuild)`)}let i=new Set;for(let s of Object.values(f.forward))for(let t of s)i.add(t.ecid);let v=new Set;for(let s of r)for(let t of s.supersessions)t.kind==="node"?(t.old in f.nodeLabel||e.push(`SUPERSEDE_UNKNOWN_OLD: ${t.old} (record ${s.seq})`),t.new!==null&&t.new!==t.old&&!(t.new in f.nodeLabel)&&e.push(`SUPERSEDE_UNKNOWN_NEW: ${String(t.new)} (record ${s.seq})`),t.new===t.old?v.delete(t.old):(v.has(t.old)&&e.push(`DOUBLE_SUPERSEDE: ${t.old} re-superseded while live (record ${s.seq})`),v.add(t.old))):i.has(t.ecid)||e.push(`SUPERSEDE_UNKNOWN_ECID: ${t.ecid} (record ${s.seq})`);for(let s of Object.keys(f.superseded)){let t=new Set,c=s;for(;c!==null&&c in f.superseded;){if(t.has(c)){e.push(`SUPERSEDE_CYCLE: chain from ${s} revisits ${c}`);break}t.add(c),c=f.superseded[c]}}for(let[s,t]of Object.entries(f.names))t in f.nodeLabel||e.push(`NAME_UNKNOWN_TARGET: slug ${s} \u2192 ${t} not in the graph`);for(let s of r)for(let t of s.edges){let c=f.nodeLabel[t.src]??"(unknown)",a=f.nodeLabel[t.dst]??"(unknown)";for(let d of F(t.type,c,a,t.props))e.push(`${d.code}: ${t.ecid} ${d.detail}`)}let n=new Map;for(let s of Object.values(f.forward))for(let t of s){if(t.ecid in f.superseded)continue;let c=n.get(t.type)??[];c.push(t),n.set(t.type,c)}for(let[s,t]of n){let c=L(s);if(c?.acyclic){let a=new Map;for(let l of t)a.set(l.src,[...a.get(l.src)??[],l.dst]);let d=new Map,g=l=>{d.set(l,1);for(let _ of a.get(l)??[])if(d.get(_)===1||d.get(_)===void 0&&g(_))return!0;return d.set(l,2),!1};for(let l of a.keys())if(d.get(l)===void 0&&g(l)){e.push(`EDGE_CYCLE: live ${s} edges form a cycle reachable from ${l}`);break}}if(c?.cardinality==="one-live-per-src"||c?.cardinality==="one-live-per-src-and-dst"){let a=new Map;for(let d of t)d.dst in f.superseded||a.set(d.src,(a.get(d.src)??0)+1);for(let[d,g]of a)g>1&&e.push(`CARDINALITY_VIOLATION: ${g} live ${s} edges from ${d} (one-live-per-src)`)}if(c?.cardinality==="one-live-per-src-and-dst"){let a=new Map;for(let d of t)d.src in f.superseded||d.dst in f.superseded||a.set(d.dst,(a.get(d.dst)??0)+1);for(let[d,g]of a)g>1&&e.push(`CARDINALITY_VIOLATION: ${g} live ${s} edges onto ${d} (one-live-per-dst)`)}}for(let[s,t]of Object.entries(m.nodeLabel)){let c=U(o,s);if(!E(c)){e.push(`missing node file for ${s} (run kane-cli context rebuild)`);continue}try{let a=JSON.parse(k(c,"utf8"));(a.label!==t||q(a.label,a.content)!==s)&&e.push(`node file content mismatch for ${s} (run kane-cli context rebuild)`);for(let d of j(a.label,a.content))e.push(`${d.code}: ${s} ${d.detail}`)}catch{e.push(`corrupt node file for ${s} (run kane-cli context rebuild)`)}}return{ok:e.length===0,issues:e,records:r.length,...h>0?{pending:h}:{}}}function N(o){return Array.isArray(o)?o.map(N):o&&typeof o=="object"?Object.fromEntries(Object.entries(o).sort(([e],[r])=>e<r?-1:1).map(([e,r])=>[e,N(r)])):o}export{U as a,z as b,X as c,ee as d};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{y as n}from"./chunk-6SGPN76K.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-NMKZHHB6.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};