@testmuai/kane-cli 0.6.7 → 0.6.8

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 (162) hide show
  1. package/dist/ChatSurface-QLRMFZJG.js +8 -0
  2. package/dist/{ChromeProfilePicker-IW3K43VC.js → ChromeProfilePicker-FJOUNY2B.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-ZJ4LZGPK.js → CliFeedbackPrompt-HC4NNBTK.js} +1 -1
  4. package/dist/{CliUploadProgress-SMPVN7Q6.js → CliUploadProgress-VIEZQNZ5.js} +1 -1
  5. package/dist/{ConfigView-RTAGKZH4.js → ConfigView-LK5F4F7W.js} +1 -1
  6. package/dist/EvidenceViewOffer-HZ4WZKGM.js +2 -0
  7. package/dist/{FolderPicker-QUY7LNVZ.js → FolderPicker-3S57MSC6.js} +1 -1
  8. package/dist/{HelpView-47J2NZWJ.js → HelpView-BQ3TS7WE.js} +1 -1
  9. package/dist/{InfoBox-G63WZAMH.js → InfoBox-4HVXV3TD.js} +1 -1
  10. package/dist/{LinksBox-2HIHDT5K.js → LinksBox-3B2KO5S4.js} +1 -1
  11. package/dist/{ProfilesView-TUXQXPXJ.js → ProfilesView-FLRMROUR.js} +1 -1
  12. package/dist/{ProjectPicker-VUABWG2P.js → ProjectPicker-R3KLRGHH.js} +1 -1
  13. package/dist/{SaveSessionPrompt-PNVGNLGO.js → SaveSessionPrompt-P7HSG7R7.js} +1 -1
  14. package/dist/SingleShotApp-ZBZY7KGR.js +2 -0
  15. package/dist/{SummaryBox-36MDDDYQ.js → SummaryBox-HCDIWKPS.js} +1 -1
  16. package/dist/TestMdRunView-GQP2QGFU.js +2 -0
  17. package/dist/{WhoamiView-LHU6RGIY.js → WhoamiView-ZD6FIBMK.js} +1 -1
  18. package/dist/{bind-E67W2DXG.js → bind-RSVQXQJT.js} +2 -2
  19. package/dist/{bridge-WVFTWHKP.js → bridge-D2HETW5M.js} +1 -1
  20. package/dist/{changelog-D4Y5QJIZ.js → changelog-QB7S4VV4.js} +1 -1
  21. package/dist/chat-committer-MWZ4JQMM.js +2 -0
  22. package/dist/chat-controller-YX5A7R52.js +2 -0
  23. package/dist/{chunk-3GOZ7R4G.js → chunk-27GF2OQ7.js} +3 -3
  24. package/dist/{chunk-GAD6IBZ6.js → chunk-35RV2AAV.js} +8 -8
  25. package/dist/{chunk-7ZMYAXES.js → chunk-3BIEIXJK.js} +1 -1
  26. package/dist/{chunk-UZWOHCFX.js → chunk-4GXOBABK.js} +1 -1
  27. package/dist/chunk-5VC7MBHR.js +2 -0
  28. package/dist/{chunk-XUHVQ5VL.js → chunk-66LXV7NN.js} +1 -1
  29. package/dist/{chunk-JR37W7IJ.js → chunk-6WHKJSMJ.js} +1 -1
  30. package/dist/{chunk-BBZBXSTP.js → chunk-A6TFZQV6.js} +1 -1
  31. package/dist/{chunk-AASBJJCU.js → chunk-ATO6NM45.js} +1 -1
  32. package/dist/{chunk-LVWB6TB2.js → chunk-AXJIXRYF.js} +1 -1
  33. package/dist/{chunk-RBLZUDMZ.js → chunk-B22NUHB2.js} +2 -2
  34. package/dist/chunk-BLHCGRSK.js +11 -0
  35. package/dist/chunk-BSFONZ2E.js +2 -0
  36. package/dist/{chunk-Z34XRBKQ.js → chunk-BUVRZXO3.js} +1 -1
  37. package/dist/{chunk-G5CYSC23.js → chunk-D4WLVWJQ.js} +1 -1
  38. package/dist/{chunk-3CY3DZDH.js → chunk-D5IZ77YG.js} +2 -2
  39. package/dist/{chunk-UQVKNUYO.js → chunk-ELN3EN4K.js} +1 -1
  40. package/dist/{chunk-QG6LJCZG.js → chunk-EQORZ6RT.js} +1 -1
  41. package/dist/chunk-EYZWG32F.js +13 -0
  42. package/dist/{chunk-TADJIOHV.js → chunk-F4FXE466.js} +1 -1
  43. package/dist/chunk-FCMLIK7P.js +2 -0
  44. package/dist/{chunk-TSWGQKUK.js → chunk-FCZ2YFD3.js} +2 -2
  45. package/dist/{chunk-QVJ7C4GW.js → chunk-GFKIE3AL.js} +1 -1
  46. package/dist/chunk-GG43HSU2.js +3 -0
  47. package/dist/{chunk-KVAALPTA.js → chunk-GO4CBUB6.js} +1 -1
  48. package/dist/{chunk-RWIHSR4H.js → chunk-HCWEZCKP.js} +1 -1
  49. package/dist/{chunk-SK2GVMTJ.js → chunk-IQFUBT6Z.js} +1 -1
  50. package/dist/{chunk-77PBBYRZ.js → chunk-JKHQBGFY.js} +2 -2
  51. package/dist/{chunk-3NR6OTHL.js → chunk-K4ERF7GT.js} +1 -1
  52. package/dist/chunk-K4LCN5X4.js +6 -0
  53. package/dist/{chunk-NEHF4C6X.js → chunk-K7P6VNLI.js} +1 -1
  54. package/dist/chunk-L3HG5ONB.js +4 -0
  55. package/dist/chunk-LEA6IHXC.js +2 -0
  56. package/dist/{chunk-RGQIBS32.js → chunk-MEHEGW3V.js} +1 -1
  57. package/dist/{chunk-WFQUDSKY.js → chunk-N5YIMTGV.js} +1 -1
  58. package/dist/{chunk-QYTMD6NM.js → chunk-NKCXCCPM.js} +1 -1
  59. package/dist/{chunk-DL5CXC64.js → chunk-NKUA3TSO.js} +1 -1
  60. package/dist/chunk-NVGTSXCJ.js +9 -0
  61. package/dist/{chunk-IX34JIXK.js → chunk-OYOTWI53.js} +1 -1
  62. package/dist/{chunk-X47VFBIV.js → chunk-PV4EDQY4.js} +1 -1
  63. package/dist/{chunk-NMKZHHB6.js → chunk-PXPXK4Q7.js} +1 -1
  64. package/dist/{chunk-EDM6YACR.js → chunk-Q3WHZ26R.js} +1 -1
  65. package/dist/{chunk-WJG4ZPUH.js → chunk-QFD6CB4P.js} +1 -1
  66. package/dist/chunk-QM4S2APK.js +2 -0
  67. package/dist/{chunk-OPDJD7WS.js → chunk-QOGQBVTP.js} +2 -2
  68. package/dist/{chunk-I37UOX73.js → chunk-QZ7DZXLQ.js} +3 -3
  69. package/dist/chunk-SHAA6FOD.js +11 -0
  70. package/dist/{chunk-6EC54ZHT.js → chunk-TAUSKB3O.js} +1 -1
  71. package/dist/{chunk-A2AZQ4PQ.js → chunk-TBXIOT6M.js} +1 -1
  72. package/dist/chunk-TFVMSEIA.js +2 -0
  73. package/dist/{chunk-5J3HQZNU.js → chunk-TRXNJZSL.js} +1 -1
  74. package/dist/{chunk-FYSWQ4K7.js → chunk-VRVSOGXH.js} +1 -1
  75. package/dist/{chunk-MTG2LRGV.js → chunk-VZHXNQDO.js} +1 -1
  76. package/dist/chunk-XSAZDIQV.js +347 -0
  77. package/dist/chunk-XWIN3S7O.js +4 -0
  78. package/dist/{chunk-YB54MHKU.js → chunk-YEMR62WY.js} +1 -1
  79. package/dist/{chunk-GLVDOR5G.js → chunk-YKZIACYJ.js} +1 -1
  80. package/dist/{chunk-TTJ4XMWP.js → chunk-YTK3IQUB.js} +1 -1
  81. package/dist/{config-BZ7C5NU5.js → config-JV7HNJ3I.js} +1 -1
  82. package/dist/cover-cmd-L2HSVDLH.js +2 -0
  83. package/dist/{credentials-BPJL6YIZ.js → credentials-TQW3TT2I.js} +1 -1
  84. package/dist/dossier-ZHSHATVU.js +3 -0
  85. package/dist/evidence-ZFYDHO73.js +2 -0
  86. package/dist/evolve-cmd-YGJECGND.js +2 -0
  87. package/dist/{explain-cmd-AG6ZDXV6.js → explain-cmd-327F6ESA.js} +1 -1
  88. package/dist/{explain-cmd-NZPC6537.js → explain-cmd-E366QTAD.js} +1 -1
  89. package/dist/extract-bind-7UZXDON6.js +5 -0
  90. package/dist/{extract-cmd-4PGUDJMU.js → extract-cmd-TQ2MYXOG.js} +1 -1
  91. package/dist/gaps-cmd-IAEXXESW.js +2 -0
  92. package/dist/{generate-headless-NZUDYIKJ.js → generate-headless-XXECVP6L.js} +2 -2
  93. package/dist/index.js +12 -12
  94. package/dist/ingest-CBQAXVH6.js +2 -0
  95. package/dist/ingest-cmd-JN6PLDE3.js +3 -0
  96. package/dist/interactive-bind-WA2YVAUW.js +7 -0
  97. package/dist/lifecycle-cmd-KZOC4WDW.js +2 -0
  98. package/dist/list-cmd-6X5U46RD.js +3 -0
  99. package/dist/{list-commands-55RCFEOL.js → list-commands-I577A5LK.js} +1 -1
  100. package/dist/logical-ids-RFGWBVML.js +2 -0
  101. package/dist/login-flow-OVEZXSMW.js +2 -0
  102. package/dist/{persist-recorded-session-HK7JUONC.js → persist-recorded-session-DT3K6ZYQ.js} +1 -1
  103. package/dist/pipeline-5N7HWGAL.js +2 -0
  104. package/dist/readmodel-V3DVL6NP.js +2 -0
  105. package/dist/reconcile-cmd-HYYH3SZS.js +2 -0
  106. package/dist/{recording-banner-5IYX2KBV.js → recording-banner-QI77ERTZ.js} +1 -1
  107. package/dist/{require-project-folder-J4Q4FRQ4.js → require-project-folder-2UAXXZA4.js} +1 -1
  108. package/dist/review-cmd-XVWPSWU2.js +4 -0
  109. package/dist/run-RYIYWV63.js +2 -0
  110. package/dist/run-VMKZDO7J.js +2 -0
  111. package/dist/{run-test-md-WN6BH3PC.js → run-test-md-DKRJOUFA.js} +2 -2
  112. package/dist/{skill-installer-4HYPUBNB.js → skill-installer-TK5REDD6.js} +1 -1
  113. package/dist/{spawner-VD6YFZ43.js → spawner-K7LWPNIC.js} +1 -1
  114. package/dist/tcg-generate-6EJLU5KX.js +2 -0
  115. package/dist/{testmd-actions-LT5FNIR6.js → testmd-actions-Q2XWL7P5.js} +1 -1
  116. package/dist/token-refresh-NQZJEUQE.js +2 -0
  117. package/dist/{validate-basic-XWGKC5VF.js → validate-basic-XEJGB4GN.js} +1 -1
  118. package/dist/{version-check-6FDTS6MK.js → version-check-IT7T5YKJ.js} +1 -1
  119. package/dist/{view-cmd-PCDG3FIC.js → view-cmd-G4PGJRQH.js} +3 -3
  120. package/dist/walk-session-HCTG4LN2.js +2 -0
  121. package/package.json +6 -6
  122. package/dist/ChatSurface-Y2M6HB2R.js +0 -8
  123. package/dist/EvidenceViewOffer-LHPIZUGQ.js +0 -2
  124. package/dist/SingleShotApp-BZV5CULT.js +0 -2
  125. package/dist/TestMdRunView-A655PMEY.js +0 -2
  126. package/dist/chat-committer-WOTCC7L3.js +0 -2
  127. package/dist/chat-controller-MONWZKS7.js +0 -4
  128. package/dist/chunk-64LC36AF.js +0 -2
  129. package/dist/chunk-6PS65QFF.js +0 -2
  130. package/dist/chunk-CIFVUX3B.js +0 -4
  131. package/dist/chunk-DCWCANNS.js +0 -6
  132. package/dist/chunk-GBBVP2JW.js +0 -2
  133. package/dist/chunk-IYTHPCQ2.js +0 -356
  134. package/dist/chunk-NMZATEKQ.js +0 -9
  135. package/dist/chunk-QHFUDBQH.js +0 -2
  136. package/dist/chunk-R7NNIQMH.js +0 -11
  137. package/dist/chunk-RE3BZVGE.js +0 -3
  138. package/dist/chunk-VLC24QVT.js +0 -2
  139. package/dist/chunk-Y6HPW2OQ.js +0 -2
  140. package/dist/chunk-YTZUYCFZ.js +0 -2
  141. package/dist/chunk-YZBLBPOE.js +0 -13
  142. package/dist/cover-cmd-DN5D6A3S.js +0 -2
  143. package/dist/evidence-E5B24ZO6.js +0 -2
  144. package/dist/evolve-cmd-V7H4PLCX.js +0 -2
  145. package/dist/extract-bind-3QBBCWYE.js +0 -5
  146. package/dist/gaps-cmd-42LPHWFP.js +0 -2
  147. package/dist/ingest-GOKIMEP4.js +0 -2
  148. package/dist/ingest-cmd-BTYHVJ33.js +0 -3
  149. package/dist/interactive-bind-TKRWAPJU.js +0 -7
  150. package/dist/lifecycle-cmd-E6AXODQD.js +0 -2
  151. package/dist/list-cmd-RJVLH2GR.js +0 -3
  152. package/dist/logical-ids-QZQRQ3TV.js +0 -2
  153. package/dist/login-flow-WNIHDQXF.js +0 -2
  154. package/dist/pipeline-FTLXJQRT.js +0 -2
  155. package/dist/readmodel-KTNI6QDC.js +0 -2
  156. package/dist/reconcile-cmd-5XC4AUSJ.js +0 -2
  157. package/dist/review-cmd-XB2DCTMZ.js +0 -4
  158. package/dist/run-2RFR2ASQ.js +0 -2
  159. package/dist/run-3ZYJQBBC.js +0 -2
  160. package/dist/tcg-generate-77QKMB63.js +0 -2
  161. package/dist/token-refresh-PCOAZBKK.js +0 -2
  162. package/dist/walk-session-YS62CWX5.js +0 -2
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as z,c as M}from"./chunk-CIFVUX3B.js";import{a as F,b as O,d as K}from"./chunk-L4JIMNKW.js";import{c as J,e as G}from"./chunk-MBXWXBDM.js";import{d as P,e as D,f as U,g as B,h as W}from"./chunk-5YPBPZUR.js";var L=/^[a-z0-9][a-z0-9-]{1,63}$/;function Q(f,d,t,e){if(!d)return{error:{code:"SUPERSEDE_TARGET_MISSING",detail:"supersede verdict needs a target (slug or cid)"}};let n=f.resolve(d);return n?n.superseded||e.has(n.cid)?{error:{code:"ALREADY_SUPERSEDED",detail:`${d} is already superseded (tip: ${n.tip})`}}:n.cid===t?{error:{code:"SELF_SUPERSEDE",detail:"a node cannot supersede itself"}}:{targetCid:n.cid}:{error:{code:"UNKNOWN_SUPERSEDE_TARGET",detail:`${d} names nothing in the graph`}}}function Z(f,d,t,e,n=[]){if(!B(d)?.acyclic)return null;if(t===e)return{code:"EDGE_CYCLE",detail:`${d} ${t} \u2192 itself`};let r=_=>[...f.edgesFrom(_).filter(E=>E.type===d).map(E=>E.dst),...n.filter(E=>E.type===d&&E.src===_).map(E=>E.dst)],c=new Set,p=[e];for(;p.length>0;){let _=p.pop();if(_===t)return{code:"EDGE_CYCLE",detail:`${d} ${t} \u2192 ${e} closes a cycle`};c.has(_)||(c.add(_),p.push(...r(_)))}return null}function ue(f,d,t,e){let m=B(d)?.cardinality;if(m!=="one-live-per-src"&&m!=="one-live-per-src-and-dst")return null;let r=f.edgesFrom(t).filter(c=>c.type===d&&!f.superseded.has(c.dst));if(r.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${d} from ${t} already has a live edge (${r[0].ecid}) \u2014 supersede it first`};if(m==="one-live-per-src-and-dst"&&e!==void 0){let c=f.edgesInto(e).filter(p=>p.type===d&&!f.superseded.has(p.src));if(c.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${d} onto ${e} already has a live edge (${c[0].ecid}) \u2014 strict 1:1, supersede it first`}}return null}var Y=new Set(["high","med","low"]);function le(f,d,t){let e=[],n=t.mediaOf(f.source.source_cid),m=new Set;for(let r of f.use_cases){if(m.has(r.temp_ref)&&e.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${r.temp_ref}`}),m.add(r.temp_ref),(!r.title||!r.title.trim())&&e.push({code:"EMPTY_TITLE",detail:`${r.temp_ref}: title is empty`}),Y.has(r.risk)||e.push({code:"BAD_RISK",detail:`${r.temp_ref}: risk ${JSON.stringify(r.risk)} not in high|med|low`}),!r.cite||!r.cite.anchor)e.push({code:"MISSING_CITE",detail:`${r.temp_ref}: every derived use-case must carry a cite`});else for(let c of M(n,r.cite,d))e.push({code:c.code,detail:`${r.temp_ref}: ${c.detail}`});r.matches_existing&&!t.hasNode(r.matches_existing.cid)&&e.push({code:"UNKNOWN_MATCH",detail:`${r.temp_ref}: matches_existing ${r.matches_existing.cid} is not in the graph`});for(let[c,p]of(r.criteria??[]).entries())if((!p.text||!p.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${r.temp_ref}.criteria[${c}]: text is empty`}),!p.cite||!p.cite.anchor)e.push({code:"MISSING_CITE",detail:`${r.temp_ref}.criteria[${c}]: every criterion carries its own cite`});else for(let _ of M(n,p.cite,d))e.push({code:_.code,detail:`${r.temp_ref}.criteria[${c}]: ${_.detail}`});for(let[c,p]of(r.updated?.criteria??[]).entries())if((!p.text||!p.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${r.temp_ref}.updated.criteria[${c}]: text is empty`}),!p.cite||!p.cite.anchor)e.push({code:"MISSING_CITE",detail:`${r.temp_ref}.updated.criteria[${c}]: every updated criterion carries its own cite`});else for(let _ of M(n,p.cite,d))e.push({code:_.code,detail:`${r.temp_ref}.updated.criteria[${c}]: ${_.detail}`})}return e}function pe(f){let{contextDir:d,graph:t,proposal:e,proposalId:n,verdicts:m,by:r,allowStaleBasis:c,extractorVersion:p,autoName:_}=f,E=J(d);if(!c&&e.read_basis!==E)return{record:null,errors:[{code:"STALE_BASIS",detail:`proposal read_basis ${String(e.read_basis)} != latest ${String(E)}`}]};if(!t.hasNode(e.source.source_cid))return{record:null,errors:[{code:"MISSING_SOURCE_NODE",detail:`source ${e.source.source_id} (${e.source.source_cid}) is not a committed node \u2014 ingest it first`}]};let u=[],h=t.mediaOf(e.source.source_cid),C=new Set,$=[],S=[],A=[],R=[],x=[],V=[],j=new Set,H=new Set,q=(i,s,b)=>{let k=Q(t,s.supersedeTarget,b,j);if("error"in k){u.push({code:k.error.code,detail:`${i}: ${k.error.detail}`});return}j.add(k.targetCid),x.push({kind:"node",old:k.targetCid,new:b,reason:s.reason??`superseded via review by ${r.id}`,by:r})};for(let i of e.use_cases){let s=m.get(i.temp_ref)??{resolution:"skipped"};C.has(i.temp_ref)&&u.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${i.temp_ref}`}),C.add(i.temp_ref),(!i.title||!i.title.trim())&&u.push({code:"EMPTY_TITLE",detail:`${i.temp_ref}: title is empty`}),Y.has(i.risk)||u.push({code:"BAD_RISK",detail:`${i.temp_ref}: risk ${JSON.stringify(i.risk)} not in high|med|low`});let b=z(i.cite?.anchor??"");if(h.format==="image"){if(b?.kind!=="img-whole"){u.push({code:i.cite?.anchor?"CITE_ANCHOR_INVALID":"MISSING_CITE",detail:`${i.temp_ref}: image cites are anchor-only (img#whole)`});continue}}else if(b?.kind==="img-part"){if(!(h.images??[]).some(l=>l.ref===b.ref)){u.push({code:"CITE_ANCHOR_INVALID",detail:`${i.temp_ref}: anchor ${i.cite?.anchor} names no embedded image of this source version`});continue}}else if(!i.cite||!i.cite.anchor||!i.cite.quote){u.push({code:"MISSING_CITE",detail:`${i.temp_ref}: every derived use-case must cite anchor+quote`});continue}s.resolution==="edited"&&s.edit&&(s.edit.title!==void 0&&!s.edit.title.trim()&&u.push({code:"EMPTY_TITLE",detail:`${i.temp_ref}: edited title is empty`}),s.edit.risk!==void 0&&!Y.has(s.edit.risk)&&u.push({code:"BAD_RISK",detail:`${i.temp_ref}: edited risk ${JSON.stringify(s.edit.risk)} invalid`}));let k=K({title:s.edit?.title??i.title,description:i.description,summary:s.edit?.summary??i.summary,actors:i.actors,value:i.value,risk:s.edit?.risk??i.risk,...i.criteria&&i.criteria.length>0?{criteria:i.criteria.map(o=>o.text)}:{}}),g=F("usecase",k),y={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:i.cite.anchor,...i.cite.quote?{quote:i.cite.quote}:{}};if(i.matches_existing&&!t.hasNode(i.matches_existing.cid)){u.push({code:"UNKNOWN_MATCH",detail:`${i.temp_ref}: matches_existing ${i.matches_existing.cid} is not in the graph`});continue}let I=i.matches_existing?.cid??(t.hasNode(g)?g:null);if(I&&t.superseded.has(I)){let o=t.tipOf(I);I=t.superseded.has(o)?null:o}if(I){if(i.changed&&(s.resolution==="approved"||s.resolution==="edited")){let o=i.updated;if(!o||Object.keys(o).length===0){u.push({code:"CHANGED_NEEDS_PAYLOAD",detail:`${i.temp_ref}: changed:true needs an updated{...} payload naming the moved fields`});continue}let l=t.getNode(I)?.content??{},v=(o.criteria??[]).map(a=>typeof a=="string"?{text:a,cite:void 0}:a),T=K({title:s.edit?.title??o.title??String(l.title??i.title),...o.description??l.description?{description:o.description??l.description}:{},...s.edit?.summary??o.summary??l.summary?{summary:s.edit?.summary??o.summary??l.summary}:{},...o.actors??l.actors?{actors:o.actors??l.actors}:{},...o.value??l.value?{value:o.value??l.value}:{},risk:s.edit?.risk??o.risk??String(l.risk??i.risk),...o.criteria?v.length>0?{criteria:v.map(a=>a.text)}:{}:l.criteria?{criteria:l.criteria}:{}}),w=F("usecase",T);if(w!==I){for(let a of U("usecase",T))u.push({code:a.code,detail:`${i.temp_ref}: ${a.detail}`});$.push({cid:w,label:P.USECASE,content:T}),S.push({ecid:O("DERIVES",y.source_cid,w,y),type:D.DERIVES,src:y.source_cid,dst:w,props:y});for(let a of v){if(!a.cite)continue;let N={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:a.cite.anchor,...a.cite.quote?{quote:a.cite.quote}:{},claim:a.text};S.push({ecid:O("DERIVES",N.source_cid,w,N),type:D.DERIVES,src:N.source_cid,dst:w,props:N})}q(i.temp_ref,{resolution:"supersede",supersedeTarget:I,reason:s.reason??`matches-but-changed: ${e.source.source_id} moved (${Object.keys(o).join(", ")})`},w),R.push({id:w,kind:"review-item",resolution:s.resolution,edit:s.resolution==="edited"?{...s.edit}:null,reason:null,by:r});continue}for(let a of v){if(!a.cite)continue;let N={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:a.cite.anchor,...a.cite.quote?{quote:a.cite.quote}:{},claim:a.text};S.push({ecid:O("DERIVES",N.source_cid,I,N),type:D.DERIVES,src:N.source_cid,dst:I,props:N})}}s.resolution!=="rejected"&&(S.push({ecid:O("DERIVES",y.source_cid,I,y),type:D.DERIVES,src:y.source_cid,dst:I,props:y}),(s.resolution==="approved"||s.resolution==="edited"||s.resolution==="supersede")&&R.push({id:I,kind:"review-item",resolution:"approved",edit:null,reason:null,by:r}),s.resolution==="supersede"&&q(i.temp_ref,s,I));continue}for(let o of U("usecase",k))u.push({code:o.code,detail:`${i.temp_ref}: ${o.detail}`});for(let o of W(D.DERIVES,"source","usecase",y))u.push({code:o.code,detail:`${i.temp_ref}: ${o.detail}`});$.push({cid:g,label:P.USECASE,content:k}),S.push({ecid:O("DERIVES",y.source_cid,g,y),type:D.DERIVES,src:y.source_cid,dst:g,props:y});for(let o of i.criteria??[]){let l={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:o.cite.anchor,...o.cite.quote?{quote:o.cite.quote}:{},claim:o.text};S.push({ecid:O("DERIVES",l.source_cid,g,l),type:D.DERIVES,src:l.source_cid,dst:g,props:l})}for(let o of i.depends_on_hint??[]){let l=a=>a.toLowerCase().trim().replace(/\s+/g," "),v=null,T=t.resolve(o);if(T&&!T.superseded&&t.nodeLabel.get(T.cid)===P.USECASE&&(v=T.cid),!v){for(let{cid:a,content:N}of t.byLabel(P.USECASE))if(!t.superseded.has(a)&&l(String(N.title??""))===l(o)){v=a;break}}if(!v){let a=$.find(N=>N.label===P.USECASE&&l(String(N.content.title??""))===l(o));a&&(v=a.cid)}!v||v===g||Z(t,D.DEPENDS_ON,g,v,A)||A.some(a=>a.src===g&&a.dst===v)||(S.push({ecid:O(D.DEPENDS_ON,g,v,{reason:"extract hint"}),type:D.DEPENDS_ON,src:g,dst:v,props:{reason:"extract hint"}}),A.push({src:g,dst:v,type:D.DEPENDS_ON}))}if((s.resolution==="approved"||s.resolution==="edited"||s.resolution==="supersede")&&t.superseded.get(g)===null&&!j.has(g)&&x.push({kind:"node",old:g,new:g,reason:`re-minted after tombstone via review by ${r.id}`,by:r}),_){let o=X("usecase",s.edit?.title??i.title,l=>H.has(l)||t.names.has(l)&&!t.superseded.has(t.names.get(l)));o!==null&&!t.nameOf.has(g)&&(H.add(o),V.push({cid:g,slug:o,by:r}))}s.resolution==="approved"?R.push({id:g,kind:"review-item",resolution:"approved",edit:null,reason:null,by:r}):s.resolution==="edited"?R.push({id:g,kind:"review-item",resolution:"edited",edit:{...s.edit},reason:null,by:r}):s.resolution==="rejected"?R.push({id:g,kind:"review-item",resolution:"rejected",edit:null,reason:s.reason??null,by:r}):s.resolution==="supersede"&&(R.push({id:g,kind:"review-item",resolution:"approved",edit:null,reason:s.reason??null,by:r}),q(i.temp_ref,s,g))}return u.length?{record:null,errors:u}:{record:G(d,{ts:new Date().toISOString(),proposal_id:n,...n!=null?{extraction_of:e.source.source_cid}:{},...n!=null&&p?{extractor_version:p}:{},nodes:$,edges:S,review:R,supersessions:x,...V.length>0?{names:V}:{},...f.judgements&&f.judgements.length>0?{judgements:f.judgements}:{},source_head_moves:{}},{expectPrev:E}).record,errors:null}}function fe(f){let{contextDir:d,graph:t,verdicts:e,by:n}=f,m=[],r=[],c=[],p=[],_=new Set;for(let[u,h]of e){if(h.resolution==="skipped")continue;let C=t.resolve(u);if(!C){m.push({code:"UNKNOWN_NODE",detail:`${u} names nothing in the graph`});continue}if(C.superseded){m.push({code:"SUPERSEDED_TARGET",detail:`${u} is superseded \u2014 review the tip (${C.tip})`});continue}let $=C.cid;if(h.resolution==="approved")c.push({id:$,kind:"review-item",resolution:"approved",edit:null,reason:null,by:n});else if(h.resolution==="rejected")c.push({id:$,kind:"review-item",resolution:"rejected",edit:null,reason:h.reason??null,by:n});else if(h.resolution==="edited"){let S=t.getNode($);if(!S){m.push({code:"UNKNOWN_NODE",detail:`${u}: node file unreadable`});continue}let A={...S.content,...h.edit?.title!==void 0?{title:h.edit.title}:{},...h.edit?.summary!==void 0?{summary:h.edit.summary}:{},...h.edit?.risk!==void 0?{risk:h.edit.risk}:{}},R=U(S.label,A);if(R.length>0){for(let V of R)m.push({code:V.code,detail:`${u}: ${V.detail}`});continue}let x=F(S.label,A);if(x===$){c.push({id:$,kind:"review-item",resolution:"approved",edit:null,reason:null,by:n});continue}r.push({cid:x,label:S.label,content:A}),_.add($),p.push({kind:"node",old:$,new:x,reason:h.reason??"edited in review",by:n}),c.push({id:x,kind:"review-item",resolution:"edited",edit:{...h.edit},reason:null,by:n})}else if(h.resolution==="supersede"){let S=Q(t,h.supersedeTarget,$,_);if("error"in S){m.push({code:S.error.code,detail:`${u}: ${S.error.detail}`});continue}_.add(S.targetCid),p.push({kind:"node",old:S.targetCid,new:$,reason:h.reason??`superseded via review by ${n.id}`,by:n}),c.push({id:$,kind:"review-item",resolution:"approved",edit:null,reason:h.reason??null,by:n})}}return m.length?{record:null,errors:m}:c.length===0&&p.length===0?{record:null,errors:[{code:"NO_VERDICTS",detail:"every item was skipped \u2014 nothing to commit"}]}:{record:G(d,{ts:new Date().toISOString(),proposal_id:null,nodes:r,edges:[],review:c,supersessions:p,source_head_moves:{}},{expectPrev:t.latestHash}).record,errors:null}}function me(f){let{contextDir:d,graph:t,assignments:e,by:n}=f,m=[],r=[],c=new Set;for(let{ref:_,slug:E}of e){if(!L.test(E)){m.push({code:"BAD_SLUG",detail:`${JSON.stringify(E)} \u2014 slugs are kebab-case ${String(L)}`});continue}let u=t.resolve(_);if(!u){m.push({code:"UNKNOWN_REF",detail:`${_} names nothing in the graph`});continue}if(u.superseded){m.push({code:"SUPERSEDED_TARGET",detail:`${_} is superseded \u2014 name the tip instead (${u.tip})`});continue}let h=t.names.get(E);if(h!==void 0&&!t.superseded.has(h)&&h!==u.cid||c.has(E)){m.push({code:"SLUG_TAKEN",detail:`${E} already names ${h??"another node in this record"}`});continue}c.add(E),r.push({cid:u.cid,slug:E,by:n})}return m.length?{record:null,errors:m}:r.length===0?{record:null,errors:[{code:"NO_ASSIGNMENTS",detail:"nothing to name"}]}:{record:G(d,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],names:r,source_head_moves:{}},{expectPrev:t.latestHash}).record,errors:null}}function he(f){let{contextDir:d,graph:t,sourceId:e,reason:n,by:m}=f,r=t.heads.get(e);return r===void 0?{record:null,errors:[{code:"UNKNOWN_SOURCE",detail:`no source ${e} in the graph`}]}:r===null?{record:null,errors:[{code:"ALREADY_RETIRED",detail:`source ${e} is already retired`}]}:{record:G(d,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:r,new:null,reason:n??`retired source ${e}`,by:m}],source_head_moves:{[e]:null},names:[]},{expectPrev:t.latestHash}).record,errors:null}}function ee(f,d){let t=f.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(t.length>60){let n=t.lastIndexOf("-",60);t=(n>0?t.slice(0,n):t.slice(0,60)).replace(/-+$/g,"")}if(!L.test(t))return null;let e=t;for(let n=2;d(e);n++)e=`${t}-${n}`;return L.test(e)?e:null}var te={source:"src",usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"};function X(f,d,t){let e=te[f];return ee(e?`${e} ${d}`:d,t)}export{te as a,X as b,Z as c,ue as d,le as e,pe as f,fe as g,me as h,he as i};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as H}from"./chunk-QYTMD6NM.js";import{a as q}from"./chunk-DL5CXC64.js";import{a as j}from"./chunk-FPFOW6BS.js";import{a as V}from"./chunk-YCCUBQY4.js";import{a as Y}from"./chunk-3NR6OTHL.js";import{a as X}from"./chunk-VE3SUJMA.js";import{a as D}from"./chunk-RGQIBS32.js";import{y as r}from"./chunk-NMKZHHB6.js";import{a as z}from"./chunk-HCBYKLMW.js";import{a as d,b as l,i as $}from"./chunk-C44QQJR4.js";import{a as ne}from"./chunk-6YGTRKDT.js";import{e as G}from"./chunk-UR6MHSHU.js";var f=G(ne(),1);var e=G(z(),1);function re(s){let t=[{id:"method",label:"Auth method",options:[{label:"Basic Auth",value:"basic"},{label:"OAuth (browser)",value:"oauth"}]}];return s&&t.push({id:"env",label:"Environment",options:[{label:"prod",value:"prod"},{label:"stage",value:"stage"}]}),t.push({id:"profile",label:"Profile"}),t.push({id:"credentials",label:"Credentials"}),t}function ce({devMode:s,profiles:t,onBasicLogin:n,onOAuthLogin:o,onComplete:A,onCancel:p}){let v=re(s),[x,h]=(0,f.useState)(0),[m,S]=(0,f.useState)(0),[C,R]=(0,f.useState)({}),[c,g]=(0,f.useState)("select"),[N,b]=(0,f.useState)(""),[_,w]=(0,f.useState)("username"),[I,O]=(0,f.useState)(""),[k,B]=(0,f.useState)(null),[Q,F]=(0,f.useState)(null),P=v[x],K=C.method??"basic",E=C.env??"prod",M=(0,f.useCallback)(()=>{let i=t.filter(a=>a.env===E).map(a=>({label:`${a.profile} [${a.env}]`,value:a.profile}));return i.push({label:"+ Create new",value:"__new__"}),i},[t,E]),W=(0,f.useCallback)(()=>{x===0?p():(h(u=>u-1),S(0),g("select"),b(""),B(null))},[x,p]),U=(0,f.useCallback)(u=>{K==="basic"?(g("text-input"),w("username"),b("")):(g("waiting"),o(u,E).then(()=>{F(`Logged in via OAuth as ${u} [${E}]`),g("done")}).catch(i=>{B(i.message),g("error")}))},[K,E,o]),Z=(0,f.useCallback)(u=>{let i=u.trim();if(i){if(_==="profileName"){let a=i;R(T=>({...T,profile:a})),U(a);return}if(_==="username"){O(i),b(""),w("accessKey"),g("text-input-masked");return}if(_==="accessKey"){let a=C.profile??"default";g("waiting"),(async()=>{try{await n(a,E,I,i),F(`Logged in as ${a} [${E}] via basic auth`),g("done")}catch{B("Credentials not valid. Please use valid credentials."),O(""),b(""),w("username"),g("text-input")}})()}}},[_,C.profile,E,n,I,U]),ee=(0,f.useCallback)(u=>{b(u),k&&B(null)},[k]);$((u,i)=>{if(c==="done"){let T=C.profile??"default";A(T,E);return}if(c==="error"){p();return}if(c==="waiting"){i.escape&&p();return}if(c==="text-input"||c==="text-input-masked")return;if(i.escape){W();return}let a=P?.id==="profile"?M():P?.options??[];if(i.upArrow){S(T=>Math.max(0,T-1));return}if(i.downArrow){S(T=>Math.min(a.length-1,T+1));return}if(i.return&&a[m]){let T=a[m];if(P.id==="profile"){if(T.value==="__new__"){g("text-input"),w("profileName"),b("");return}R(y=>({...y,profile:T.value})),h(y=>y+1),S(0),U(T.value);return}R(y=>({...y,[P.id]:T.value})),h(y=>y+1),S(0)}});let L="Login";if(c==="done")return(0,e.jsxs)(d,{flexDirection:"column",borderStyle:"round",borderColor:r.green,paddingX:2,paddingY:1,children:[(0,e.jsxs)(l,{color:r.green,bold:!0,children:["\u2713 ",Q]}),(0,e.jsx)(d,{marginTop:1,children:(0,e.jsx)(l,{color:r.dim,children:"press any key"})})]});if(c==="error")return(0,e.jsxs)(d,{flexDirection:"column",borderStyle:"round",borderColor:r.red,paddingX:2,paddingY:1,children:[(0,e.jsx)(l,{color:r.red,bold:!0,children:"Login failed"}),(0,e.jsx)(d,{marginTop:1,children:(0,e.jsx)(l,{color:r.red,children:k})}),(0,e.jsx)(d,{marginTop:1,children:(0,e.jsx)(l,{color:r.dim,children:"press any key"})})]});if(c==="waiting")return(0,e.jsxs)(d,{flexDirection:"column",borderStyle:"round",borderColor:r.orange,paddingX:2,paddingY:1,children:[(0,e.jsxs)(l,{color:r.orange,bold:!0,children:[L," \u203A OAuth"]}),(0,e.jsx)(d,{marginTop:1,children:(0,e.jsx)(l,{color:r.secondary,children:"Opening browser for login..."})}),(0,e.jsx)(d,{marginTop:1,children:(0,e.jsx)(l,{color:r.orange,children:"Waiting for callback \u27F3"})}),(0,e.jsx)(D,{bindings:[],escBackLabel:"cancel"})]});if(c==="text-input"||c==="text-input-masked"){let u=_==="username"?"Username":_==="accessKey"?"Access Key":"Profile name",i=_==="username"||_==="accessKey"?`${L} \u203A Basic Auth`:`${L} \u203A New Profile`;return(0,e.jsxs)(d,{flexDirection:"column",borderStyle:"round",borderColor:r.orange,paddingX:2,paddingY:1,children:[k&&(_==="username"||_==="accessKey")&&(0,e.jsx)(d,{marginBottom:1,children:(0,e.jsxs)(l,{color:r.red,children:["\u2717 ",k]})}),(0,e.jsx)(l,{color:r.orange,bold:!0,children:i}),_==="accessKey"&&(0,e.jsxs)(d,{marginTop:1,children:[(0,e.jsx)(l,{color:r.secondary,children:"Username: "}),(0,e.jsx)(l,{children:I})]}),(0,e.jsxs)(d,{marginTop:1,children:[(0,e.jsxs)(l,{color:r.secondary,children:[u,": "]}),(0,e.jsx)(V,{value:N,onChange:ee,onSubmit:Z,onCancel:W,masked:c==="text-input-masked"})]}),(0,e.jsx)(D,{bindings:[{keys:"\u21B5",label:"confirm"}],escBackLabel:"back"})]})}let te=P?.id==="profile"?M():P?.options??[];return(0,e.jsxs)(d,{flexDirection:"column",borderStyle:"round",borderColor:r.orange,paddingX:2,paddingY:1,children:[(0,e.jsx)(l,{color:r.orange,bold:!0,children:L}),(0,e.jsx)(d,{marginTop:1,children:(0,e.jsxs)(l,{color:r.secondary,children:[P?.label,":"]})}),(0,e.jsx)(d,{flexDirection:"column",marginTop:1,children:te.map((u,i)=>{let a=i===m,T=a?"\u276F ":" ",y=u.value==="__new__"?r.green:a?r.orange:void 0;return(0,e.jsxs)(l,{color:y,children:[T,u.label]},u.value)})}),(0,e.jsx)(D,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}async function J(s,t,n,o){let A=s.loadBasicAuth(t,n),p=s.loadCredentials(t,n);if(!A&&!p)return o("info","STARTUP_GATE_NO_CREDS","Profile has no credentials",{profile:t,env:n}),{status:"needs_login",profile:t,env:n};let v=Y(n),x=async()=>s.loadCredentials(t,n)?.access_token??null,h=new j(v.controllerBaseUrl,x,A,o);o("info","STARTUP_GATE_VALIDATE","Validating credentials with controller",{profile:t,env:n,method:A?"basic":"oauth"});let m=await h.resolve(!0);if(m)return o("info","STARTUP_GATE_VALID","Credentials validated",{profile:t,env:n,username:m.username,org_id:m.org_id}),{status:"authenticated",result:{profile:t,env:n,credentials:p,basicAuth:A,tmsCreds:m,resolver:h}};if(!A&&p){let S=p.refresh_token,R=s.loadClient(t,n)?.client_id;if(S&&R){o("info","STARTUP_GATE_REFRESH","Attempting token refresh",{profile:t,env:n});try{let g=await new q(n).refreshToken(S,R);if(g.access_token){s.saveCredentials(t,n,{...p,...g,expires_at:Date.now()/1e3+(g.expires_in??3600)});let b=await h.resolve(!0);if(b)return o("info","STARTUP_GATE_REFRESH_OK","Token refreshed and validated",{profile:t,env:n,username:b.username}),{status:"authenticated",result:{profile:t,env:n,credentials:{...p,...g},basicAuth:null,tmsCreds:b,resolver:h}}}o("warn","STARTUP_GATE_REFRESH_INVALID","Refreshed token still invalid",{profile:t,env:n})}catch(c){o("warn","STARTUP_GATE_REFRESH_FAILED","Token refresh failed",{profile:t,env:n,error:c instanceof Error?c.message:String(c)})}}else o("info","STARTUP_GATE_NO_REFRESH","No refresh_token or client_id \u2014 login required",{profile:t,env:n})}return o("info","STARTUP_GATE_INVALID","Credentials invalid \u2014 login required",{profile:t,env:n}),{status:"needs_login",profile:t,env:n}}async function Te(s,t,n=new H){let o=s.listProfiles();if(t("info","STARTUP_GATE_START","Auth startup gate",{profile_count:o.length}),o.length===0)return t("info","STARTUP_GATE_NONE","No profiles found \u2014 login required"),{status:"needs_login"};if(o.length>1){let v=s.getActiveProfile(),x=s.getDefaultEnv();if(v&&o.some(m=>m.profile===v&&m.env===x)){t("info","STARTUP_GATE_TRY_ACTIVE","Multiple profiles \u2014 trying active first",{activeProfile:v,activeEnv:x});let m=await J(s,v,x,t);if(m.status==="authenticated")return m;t("info","STARTUP_GATE_ACTIVE_FAILED","Active profile invalid \u2014 showing picker",{activeProfile:v,activeEnv:x})}return t("info","STARTUP_GATE_MULTI","Multiple profiles \u2014 picker required",{profiles:o.map(h=>`${h.profile}/${h.env}`)}),{status:"needs_pick",profiles:o}}let{profile:A,env:p}=o[0];return s.setActiveProfile(A),s.setDefaultEnv(p),X(s,n,A,p),J(s,A,p,t)}export{ce as a,J as b,Te as c};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as z,b as ee,c as te}from"./chunk-Y6HPW2OQ.js";import{c as K,d as V}from"./chunk-R7NNIQMH.js";import{c as J}from"./chunk-SK2GVMTJ.js";import{a as Q}from"./chunk-QYTMD6NM.js";import{a as Z}from"./chunk-FPFOW6BS.js";import{b as H}from"./chunk-FYSWQ4K7.js";import{b as W}from"./chunk-X47VFBIV.js";import{h as E}from"./chunk-M5JQXOCE.js";import{a as O}from"./chunk-2WVKOZ6W.js";import{a as _}from"./chunk-3NR6OTHL.js";import{a as k,b as A,d as Y}from"./chunk-VE3SUJMA.js";import{a as q}from"./chunk-Z34XRBKQ.js";import{a as G}from"./chunk-HCBYKLMW.js";import{a as c,b as u,i as I,j as X}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as F}from"./chunk-UR6MHSHU.js";var i=F(ue(),1);var r=F(G(),1);function _e({resultRef:h,mode:d="singleshot",loginCompleteRef:f}){let{exit:m}=X(),C=(0,i.useRef)(new q),S=(0,i.useRef)(new Q),v=(0,i.useRef)(new J),t=C.current,l=S.current,$=v.current,ne=K(),[P,g]=(0,i.useState)(d==="login"?"login":"gate"),[L,re]=(0,i.useState)(null),[de,R]=(0,i.useState)(null),[ge,T]=(0,i.useState)(null),[N,oe]=(0,i.useState)(null),[U,B]=(0,i.useState)([]),x=(0,i.useCallback)((e,n,s,o)=>$.log(e,n,s,o),[$]),pe=(0,i.useCallback)((e,n)=>{e?k(t,l,e,n):l.save({project_id:null,project_name:null,folder_id:null,folder_name:null})},[t,l]),y=(0,i.useCallback)(()=>{d==="login"?(f&&(f.current=!0),m()):g("input")},[d,m,f]),D=(0,i.useCallback)((e,n)=>{let s=k(t,l,e,n);if(d==="login"){g("ensure-project");return}Y(s)?y():s.projectId?g("ensure-folder"):g("ensure-project")},[t,l,y,d]);I((e,n)=>{n.ctrl&&e==="c"&&E(0,"Ctrl+C exit")});let M=(0,i.useRef)(!1);i.default.useEffect(()=>{M.current||(M.current=!0,d!=="login"&&te(t,x).then(e=>{re(e),e.status==="authenticated"?D(e.result.profile,e.result.env):e.status==="needs_pick"?g("pick"):(R(e.profile??null),T(e.env??null),g("login"))}).catch(e=>{oe(`Auth check failed: ${e instanceof Error?e.message:String(e)}`)}))},[t,x]);let ie=(0,i.useCallback)(e=>{h.current={objective:e},m()},[h,m]),se=(0,i.useCallback)(async(e,n)=>{t.setActiveProfile(e),t.setDefaultEnv(n),(await ee(t,e,n,x)).status==="authenticated"?D(e,n):(R(e),T(n),g("login"))},[t,x,D]),w=(0,i.useCallback)(()=>{let e=t.getActiveProfile(),n=t.getDefaultEnv();if(!e)return null;let s=_(n),o=t.loadBasicAuth(e,n);return new Z(s.controllerBaseUrl,async()=>t.loadCredentials(e,n)?.access_token??null,o,x)},[t,x]),le=(0,i.useCallback)(async()=>{let e=w();if(!e)return null;let n=e.cached??await e.resolve();if(!n)return null;let s=_(t.getDefaultEnv()),o=new O(s.tmsBaseUrl,n.username,n.access_key);try{let p=(await o.listProjects()).find(b=>b.name==="KaneAI Generated");if(p)return{id:p.project_id,name:p.name};let j=await o.createProject("KaneAI Generated");return{id:j.id,name:j.name}}catch{return null}},[w,t]),ae=(0,i.useCallback)(async e=>{let n=w();if(!n)return null;let s=n.cached??await n.resolve();if(!s)return null;let o=_(t.getDefaultEnv()),a=new O(o.tmsBaseUrl,s.username,s.access_key);try{let j=(await a.listFolders(e)).find(ce=>ce.name==="Untitled");if(j)return{id:j.id,name:j.name};let b=await a.createFolder(e,"Untitled");return{id:b.id,name:b.name}}catch{return null}},[w,t]);if(P==="gate")return(0,r.jsx)(c,{paddingX:1,children:(0,r.jsx)(u,{color:"yellow",children:"Checking authentication..."})});if(N)return(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"red",children:N}),(0,r.jsx)(u,{color:"gray",children:"Press Ctrl+C to exit."})]});if(P==="pick"&&L?.status==="needs_pick")return(0,r.jsx)(fe,{profiles:L.profiles,onSelect:se});if(P==="login")return(0,r.jsx)(z,{devMode:process.env.KANE_DEV_MODE==="1",profiles:t.listProfiles(),onBasicLogin:async(e,n,s,o)=>{let{validateBasicAuth:a}=await import("./validate-basic-XWGKC5VF.js");await a(n,s,o),t.saveBasicAuth(e,n,{username:s,access_key:o}),t.setActiveProfile(e),t.setDefaultEnv(n)},onOAuthLogin:async(e,n)=>{let{LoginFlow:s}=await import("./login-flow-WNIHDQXF.js");t.setDefaultEnv(n),t.setActiveProfile(e),await new s(e,n,t).login()},onComplete:(e,n)=>{R(e),T(n),t.setActiveProfile(e),t.setDefaultEnv(n),D(e,n)},onCancel:()=>{E(0,"Login cancelled")}});if(P==="ensure-project"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=()=>{if(d==="login"){g("ensure-folder");return}k(t,l,e,n).folderId?y():g("ensure-folder")};return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(H,{resolver:w(),currentProjectId:l.load().project_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{projectId:o,projectName:a}),B(p=>[...p,`\u2713 Project: ${a} (${o})`]),s()},onCancel:async()=>{let o=await le();o&&(A(t,l,e,n,{projectId:o.id,projectName:o.name}),B(a=>[...a,`\u2713 Default project: ${o.name} (${o.id})`]),s())}})]})}if(P==="ensure-folder"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=t.loadProfileConfig(e,n);return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(W,{resolver:w(),projectId:s?.project_id??"",currentFolderId:l.load().folder_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{folderId:o,folderName:a}),B(p=>[...p,`\u2713 Folder: ${a} (${o})`]),y()},onCancel:async()=>{if(!s?.project_id)return;let o=await ae(s.project_id);o&&(A(t,l,e,n,{folderId:o.id,folderName:o.name}),B(a=>[...a,`\u2713 Default folder: ${o.name} (${o.id})`]),y())}})]})}return P==="input"?(0,r.jsxs)(c,{flexDirection:"column",children:[U.length>0&&(0,r.jsx)(c,{flexDirection:"column",paddingX:1,marginBottom:1,children:U.map((e,n)=>(0,r.jsx)(u,{color:"green",children:e},n))}),(0,r.jsx)(V,{onSubmit:ie,onEscape:()=>E(0,"User pressed Escape"),history:ne,placeholder:"Type an objective..."})]}):(0,r.jsx)(r.Fragment,{})}function fe({profiles:h,onSelect:d}){let[f,m]=(0,i.useState)(0),[C,S]=(0,i.useState)(!1);return I((v,t)=>{if(!C){if(t.escape){E(0,"Profile picker cancelled");return}if(t.upArrow&&f>0&&m(l=>l-1),t.downArrow&&f<h.length-1&&m(l=>l+1),t.return){S(!0);let l=h[f];d(l.profile,l.env).catch(()=>S(!1))}}}),(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,r.jsx)(c,{marginTop:1,flexDirection:"column",children:h.map((v,t)=>(0,r.jsxs)(u,{children:[t===f?"\u276F ":" ",(0,r.jsx)(u,{color:t===f?"#ff9500":"white",bold:t===f,children:v.profile}),(0,r.jsxs)(u,{color:"gray",children:[" [",v.env,"]"]})]},`${v.profile}-${v.env}`))}),C&&(0,r.jsx)(c,{marginTop:1,children:(0,r.jsx)(u,{color:"yellow",children:"Validating credentials..."})})]})}export{_e as a};
@@ -1,13 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b,c as ge,d as ct,f as ve,g as he}from"./chunk-CJJXT5DO.js";import{a as at,e as N,f as J,g as dt,h as te,i as U,j as ut}from"./chunk-ZPDM6FO7.js";import{a as oe}from"./chunk-BC7UVJJB.js";import{d as ft}from"./chunk-NVGBE2DR.js";import{a as K,b as W,d as st}from"./chunk-EHN5HTUD.js";import{a as T,b as S}from"./chunk-L5LI2JF4.js";import{a as O}from"./chunk-QHFUDBQH.js";import{b as ie}from"./chunk-RGDQMKNJ.js";import{a as pt}from"./chunk-L4JIMNKW.js";import{c as re,e as ne}from"./chunk-MBXWXBDM.js";import{d as R,e as H,f as lt}from"./chunk-5YPBPZUR.js";import{a as ot}from"./chunk-3NR6OTHL.js";import{a as it}from"./chunk-NMKZHHB6.js";function M(e){if(e===null)return"broken";let t=Math.floor(e/100);return t===1?"passed":t===7?"failed":t===2?"skipped":"broken"}var j={failed:3,broken:2,passed:1,skipped:0};function we(e){let t="skipped";for(let r of e)j[r]>j[t]&&(t=r);return t}import{createHash as Wt}from"crypto";import{basename as Jt}from"path";function ye(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return t.length>0?t:"session"}function _e(e){return Wt("sha256").update(e).digest("hex").slice(0,8)}function xe(e){let t=Jt(e).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${ye(t)}-${_e(e)}`}function Se(e,t){return`${ye(e)}-${_e(t)}`}function be(e){let t={};for(let[r,n]of Object.entries(e))typeof n=="string"&&n.length>0&&(t[r]=n);return t}var Xt={darwin:"macOS",linux:"Linux",win32:"Windows"};function ke(e){return Xt[e]??e}function Ee(e,t){let r={},n=(i,o)=>{o!==void 0&&o!==""&&(r[i]=o)};return n("model",t.model),n("os",e.os),n("browser",e.browser),n("browser_version",e.browser_version),n("resolution",e.resolution),n("platform",t.platform),n("platform_type",t.platform_type),n("run_kind",t.run_kind),n("os_version",e.os_version),e.device!==void 0&&e.device!==""?r.device=e.device:t.platform_type&&t.platform_type!=="web"&&(r.device=null),r}function Zt(e,t){return{pack_test_dir:e,ordinal_offset:t}}import{promises as P}from"fs";import{join as D}from"path";function Ie(e){let t={evidence:"0.1",run_id:e.execution_id,status:"running",title:e.title,started:e.started,environment:{producer:{name:"kane-cli",version:e.producerVersion},...e.surfaces?{surfaces:e.surfaces}:{},run_kind:e.run_kind,origin:e.origin,pid:e.pid},...e.credits!==void 0?{metrics:{credits:{value:e.credits,type:"count"}}}:{}};return S(t,{lineWidth:-1})}async function Re(e,t,r,n=process.cwd(),i){let o=i??b(e.execution_id,n),a=D(o,"tests",t);return await P.mkdir(D(o,"coverage"),{recursive:!0}),await P.writeFile(D(o,"coverage",".keep"),""),await P.mkdir(a,{recursive:!0}),await P.writeFile(D(o,"run.yaml"),Ie(e)),r&&await P.writeFile(D(a,r.path),r.content),o}async function Qt(e,t=process.cwd()){let r=b(e.execution_id,t);await P.mkdir(D(r,"coverage"),{recursive:!0}),await P.writeFile(D(r,"coverage",".keep"),"");let n=T(Ie(e));return n.environment&&delete n.environment.run_kind,await P.writeFile(D(r,"run.yaml"),S(n,{lineWidth:-1})),r}async function qt(e,t=process.cwd()){return W(b(e,t),new Date().toISOString())}async function Pe(e,t=process.cwd()){await P.rm(b(e,t),{recursive:!0,force:!0})}import{promises as Ce}from"fs";import{join as Ae}from"path";function Oe(e){let t={evidence:"0.1",test:e.testId,status:e.status,...e.durationMs!==void 0?{duration_ms:e.durationMs}:{},...e.definitionPath?{definition:{path:e.definitionPath}}:{},...e.definitionId?{definition_id:e.definitionId}:{},...e.assuranceId?{assurance_id:e.assuranceId}:{},...Object.keys(e.externalId).length?{external_id:e.externalId}:{},...e.tags&&e.tags.length?{tags:e.tags}:{},...Object.keys(e.environment).length?{environment:e.environment}:{},steps:e.steps};return S(t,{lineWidth:-1})}function De(e){return S({logs:e},{lineWidth:-1})}async function $e(e,t,r){await Ce.writeFile(Ae(e,"tests",t,"result.yaml"),r)}async function Fe(e,t,r){let n=Ae(e,"tests",t,"logs");await Ce.mkdir(n,{recursive:!0}),await Ce.writeFile(Ae(n,"meta.yaml"),r)}import{promises as se}from"fs";import{join as mt}from"path";function gt(e){return mt(e,".internal","meta.json")}async function vt(e){let t;try{t=await se.readFile(gt(e),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function Le(e,t){let r;try{r=await vt(e)??{}}catch(a){console.warn(`evidence: meta.json at ${e} unreadable \u2014 skipping execution-pointer append to preserve identity`,a);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(t),r.executions=n,await se.mkdir(mt(e,".internal"),{recursive:!0});let i=gt(e),o=`${i}.tmp-${process.pid}-${Date.now()}`;await se.writeFile(o,JSON.stringify(r,null,2)+`
3
- `),await se.rename(o,i)}async function er(e){try{let t=await vt(e);return t&&Array.isArray(t.executions)?t.executions:[]}catch{return[]}}async function tr(e,t,r=process.cwd()){let n=await ve(e,r);if(!n){let o=`evidence: no pack found for "${e}"`;return t.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:e})):console.error(o),2}let i=await K(n,t.profile??"L1");return t.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${t.profile??"L1"}, status ${i.status})`),i.valid?0:1}function Te(e){let t=[];for(let r of e){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)t.push(M(i))}return we(t)}function rr(e){let t=null;for(let r of e){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(t==null||j[M(i)]>j[M(t)]||j[M(i)]===j[M(t)]&&i>t)&&(t=i)}return t}import{promises as nr}from"fs";import{extname as ht,basename as ir}from"path";var or={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function Ne(e){let t;try{t=await nr.readdir(e)}catch{return[]}return t.filter(r=>r!=="meta.yaml").sort().map(r=>({name:ir(r,ht(r)),file:r,format:or[ht(r)]??"txt"}))}import{mkdirSync as sr,appendFileSync as cr}from"fs";import{join as wt}from"path";function je(e,t){return wt(e,"tests",t,"logs")}function Me(e,t,r,n={},i){try{i?.(t,r,r,n)}catch{}if(e)try{sr(e,{recursive:!0});let o=JSON.stringify({ts:new Date().toISOString(),level:t,event:r,...n})+`
4
- `;cr(wt(e,"diagnostics.ndjson"),o)}catch{}}import{promises as $}from"fs";import{join as G}from"path";async function ar(e){try{let t=G(e,"tests"),r=await $.readdir(t).catch(()=>[]);for(let n of r){let i=G(t,n,"steps"),o=await $.readdir(i).catch(()=>[]);for(let a of o){let s=await $.readFile(G(i,a,"failure.yaml"),"utf8").catch(()=>null);if(s!=null)try{let u=T(s);if(u&&typeof u=="object"&&u.triage)return!0}catch{}}}}catch{}return!1}async function yt(e,t,r){let n=G(e,"tests",t,"logs");if(r)try{await $.mkdir(n,{recursive:!0}),await $.copyFile(r,G(n,"tui.log"))}catch{}let i=await Ne(n);i.length&&await Fe(e,t,De(i))}async function Ve(e){let t=e.cwd??process.cwd(),r=e.packDir??b(e.executionId,t);if(!e.saved&&!e.packDir)return await Pe(e.executionId,t),{sealed:!1};await yt(r,e.testId,e.tuiLogPath);let n=G(r,"run.yaml"),i=T(await $.readFile(n,"utf8"));i.environment={...i.environment??{},saved:e.saved,run_kind:e.runKind},await $.writeFile(n,S(i,{lineWidth:-1}));let o=await $.open(n,"r+");try{await o.sync()}finally{await o.close()}let a=await ar(r);await W(r,new Date().toISOString());let s;try{let c=await K(r,"L1");s=c.valid;let p=(c.diagnostics??[]).filter(l=>String(l?.code??"").includes("failure.status_disagrees"));if(p.length>0)if(e.expectStatusDisagrees||a){let l=e.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 ${l}`)}else console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,p);if(!c.valid){console.warn(`evidence: sealed pack ${e.executionId} failed L1 validation`,c.diagnostics);let l=String(c.diagnostics?.[0]?.code??"");Me(je(r,e.testId),"warn","EVIDENCE_INVALID",{execution_id:e.executionId,first_code:l,surface:e.surface??"testmd"},e.log)}}catch(c){console.warn(`evidence: validation error for ${e.executionId}`,c)}let u;if(e.saved&&e.packDir)try{u=await ct(r,e.executionId,t)}catch(c){console.warn(`evidence: store install failed for ${e.executionId}`,c)}if(e.outputStemDir)try{await Le(e.outputStemDir,{execution_id:e.executionId,run_kind:e.runKind,status:e.verdict,valid:s,at:new Date().toISOString()})}catch(c){console.warn(`evidence: execution-pointer append failed for ${e.executionId} (pack is sealed)`,c)}return{sealed:!0,valid:s,storePath:u}}import{release as _t}from"os";import{execFileSync as dr}from"child_process";var xt=!1,ce;function ur(){if(!xt)if(xt=!0,process.platform==="darwin")try{ce=dr("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{ce=_t()||void 0}else ce=_t()||void 0;return ce}function Be(e){let t={os:ke(process.platform)},r=ur();if(r&&(t.os_version=r),e.cdpBrowser){let n=/^([A-Za-z]+)\/(\d+)/.exec(e.cdpBrowser);n&&(t.browser=n[1].replace(/^Headless/,""),t.browser_version=n[2])}return e.resolution&&(t.resolution=e.resolution),t}async function St(e){if(e)try{let t=await fetch(`${e}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!t.ok)return;let r=await t.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function lr(e){let t;return()=>(t||(t=St(e)),t)}import{promises as Ue,existsSync as He,readFileSync as gr}from"fs";import{basename as vr,join as F}from"path";import{readFileSync as pr}from"fs";import{dirname as fr,resolve as mr}from"path";function bt(e,t){let r=mr(e),n=pr(r,"utf8");return N(t?J(n,te(fr(r),t)):n)}var X=class e{constructor(t){this.opts=t}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_packDirOverride;_attached=!1;get attached(){return this._attached}static async attach(t){let r=vr(t.packDir).replace(/\.evidence$/,""),n=new e({origin:"testrun",runKind:"author",pid:process.pid,title:t.testId,started:new Date().toISOString(),producerVersion:it,cwd:t.cwd});n.executionId=r,n.testId=t.testId,n._packDirOverride=t.packDir,n._attached=!0;let i=F(t.packDir,"tests",t.testId);return await Ue.mkdir(i,{recursive:!0}),t.definition&&(await Ue.writeFile(F(i,t.definition.path),t.definition.content),n.definitionPath=t.definition.path,n.definitionContent=t.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=ge(),this.testId=this.opts.testmdRelPath?xe(this.opts.testmdRelPath):Se(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let t=this.opts.definition??null;return await Re({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,t,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),t&&(this.definitionPath=t.path,this.definitionContent=t.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?F(this.opts.packRootDir,`${this.executionId}.evidence`):b(this.executionId,this.opts.cwd)}get packTestDir(){return F(this.pack,"tests",this.testId)}async writeDefinition(t,r="test.md"){await Ue.writeFile(F(this.packTestDir,r),t),this.definitionPath=r,this.definitionContent=t}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let t=F(this.opts.cwd,this.opts.testmdRelPath);if(He(t))return U(gr(t,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let t=F(this.opts.cwd,this.opts.testmdRelPath),r=F(this.opts.cwd,".context"),n=He(r)?O(r):void 0;if(He(t))return bt(t,n)}if(this.definitionContent!=null)return N(this.definitionContent)}catch{}}noteSpawn(t){this.accumulatedSteps.push(...t.steps),this.maxOrdinal=Math.max(this.maxOrdinal,t.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}async writeResult(t){let r=Te(t.spawns),n=this.pack;await $e(n,this.testId,Oe({testId:this.testId,status:r,durationMs:t.durationMs,definitionPath:this.definitionPath,definitionId:this.computeDefinitionId(),assuranceId:this.computeAssuranceId(),externalId:be(t.externalIdInput),environment:Ee(t.runnerEnv,t.intentEnv),steps:t.steps,tags:t.tags}));let i=t.externalIdInput;return t.log&&(i.commit_id||i.test_id||i.testcase_id)&&t.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:i.commit_id??null,test_id:i.test_id??null,testcase_id:i.testcase_id??null,project_id:i.project_id??null,session_id:i.session_id??null,session_name:i.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function hr(e,t,r=he){try{let n=await r(e);if(n.aborted.length>0||n.removed.length>0)try{t?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as Jr}from"fs";import{existsSync as Ye,mkdirSync as Ur,readdirSync as Hr,readFileSync as Gr,rmSync as zr,statSync as Yr,writeFileSync as Kr}from"fs";import{join as z}from"path";var wr={window:10,latest_only:!1,stale_at_run_weight:.5,counted_verdicts:["passed","failed"],accepted_oracle_modes:["authored","inferred","runtime-derived"],verified_threshold:.5,min_passes:1,risk_weights:{high:3}},yr={window:10,latest_only:!0,stale_at_run_weight:0,counted_verdicts:["passed","failed"],accepted_oracle_modes:["authored","inferred"],verified_threshold:1,min_passes:1,risk_weights:{high:3}},_r={lenient:wr,strict:yr};function xr(e,t){let r=e.slice(-t.window),n=new Map;for(let c of r)n.set(c.execution_id,c);let i=[...n.values()].sort((c,d)=>c.ts<d.ts?-1:c.ts>d.ts?1:c.execution_id<d.execution_id?-1:1).filter(c=>t.counted_verdicts.includes(c.verdict)&&t.accepted_oracle_modes.includes(c.oracle_mode));t.latest_only&&i.length>1&&(i=[i[i.length-1]]);let o=0,a=0,s=0;for(let c of i){let d=c.stale_at_run?t.stale_at_run_weight:1;o+=d,c.verdict==="passed"&&(a+=d,s++)}let u=o>0?Math.round(a/o*100)/100:0;return{score:u,verified:u>=t.verified_threshold&&s>=t.min_passes,passes:s,counted:i.length}}function kt(e,t){let r=0,n=0;for(let i of e){let o=t.risk_weights[i.risk]??1;r+=o,i.verified&&(n+=o)}return r>0?Math.round(n/r*100):0}function Sr(e,t){let r={},n={},i=[],o=0;for(let a of e.usecases){let s=[];for(let d of a.acceptance_criteria){let p=xr(d.executions??[],t);r[d.id]=p;let l={risk:d.risk,verified:p.verified};s.push(l),i.push(l)}let u=s.filter(d=>d.verified).length,c=s.length>0&&u===s.length?"covered":u>0?"partial":"uncovered";c==="covered"&&o++,n[a.id]={status:c,pct:kt(s,t)}}return{config:t,acs:r,usecases:n,summary:{coverage_pct:kt(i,t),acs_verified:`${i.filter(a=>a.verified).length}/${i.length}`,usecases_covered:`${o}/${e.usecases.length}`,uncovered:Object.values(n).filter(a=>a.status==="uncovered").length}}}function Et(e,t=_r){return{rollup_version:1,stale_sources:new Set(e.usecases.flatMap(r=>r.stale_sources??[])).size,high_risk_gaps:(e.gaps??[]).filter(r=>r.risk==="high").length,aspects:Object.fromEntries(Object.entries(t).map(([r,n])=>[r,Sr(e,n)]))}}var C=(e,t)=>e.nameOf.get(t)??t,V=(e,t)=>!e.superseded.has(t);function br(e,t){return e.byLabel(R.SCENARIO).filter(({cid:r})=>V(e,r)).filter(({cid:r})=>e.edgesFrom(r).some(n=>n.type===H.BELONGS_TO&&e.tipOf(n.dst)===t)).map(({cid:r})=>r)}function kr(e,t,r){let n=[];for(let{cid:i}of e.byLabel(R.AC)){if(!V(e,i))continue;let o=e.edgesFrom(i).find(s=>s.type===H.SCOPED_TO);if(!o)continue;let a=e.tipOf(o.dst);a===t?n.push({cid:i,scope:{type:"usecase",ref:C(e,t)}}):r.has(a)&&n.push({cid:i,scope:{type:"scenario",ref:C(e,a)}})}return n}function Er(e){let t=e.filter(r=>r!==void 0).map(r=>r.execution);return t.includes("failed")?"failed":t.includes("blocked")?"blocked":t.includes("passed")?"passed":"not-run"}var Ir={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"};function Rr(e,t){let r=t.flatMap(n=>n?.acs??[]).filter(n=>n.ref===e).map(n=>Ir[n.verdict]??"not-run");return r.length===0?Er(t):r.includes("failed")?"failed":r.includes("blocked")?"blocked":r.includes("passed")?"passed":"not-run"}function It(e,t,r){let n=r?.scope==="run",i=[],o=new Set,a=new Map;for(let[c,d]of e.nameOf)a.set(e.tipOf(c)??c,d);let s=c=>a.get(c)??C(e,c);for(let{cid:c,content:d}of e.byLabel(R.USECASE)){if(!V(e,c)||e.trust.get(c)==="archived")continue;let p=e.tipOf(c),l=e.derivesInto(p).filter(f=>!e.superseded.has(f.ecid)),v=[...new Set(l.map(f=>String(f.props?.source_id??"")).filter(Boolean))].sort(),g=v.map(f=>{let y=e.heads.get(f);if(typeof y!="string")return{id:f};let m=e.getNode(y)?.content.blob;return{id:f,media_type:e.mediaOf(y).media_type,...typeof m=="string"?{cid:m}:{}}}),w=l[0],E=new Map;for(let f of l)f.props?.source_id&&f.props?.source_cid&&E.set(String(f.props.source_id),String(f.props.source_cid));let I=v.filter(f=>{let y=e.heads.get(f),m=E.get(f);return y!=null&&m!==void 0&&y!==m}).sort(),_=e.edgesFrom(c).filter(f=>f.type===H.DEPENDS_ON&&!e.superseded.has(f.ecid)).map(f=>Cr(e,f.dst)).filter(f=>f!==null).sort(),A=br(e,p),B=new Set(A),Y=A.map(f=>{let y=e.getNode(f)?.content??{},m=e.edgesFrom(f).filter(k=>k.type===H.EXERCISES&&!e.superseded.has(k.ecid)&&V(e,e.tipOf(k.dst))).map(k=>C(e,e.tipOf(k.dst))).sort();return{id:C(e,f),case_type:String(y.case_type??""),intent:String(y.intent??""),exercises:m}}).sort((f,y)=>f.id<y.id?-1:1),ue=!1,L=new Set([p]);for(let f of A)L.add(f);let q=kr(e,p,B).map(({cid:f,scope:y})=>{let m=e.getNode(f)?.content??{},k=[...new Set(e.edgesInto(f).filter(h=>h.type===H.VERIFIES&&!e.superseded.has(h.ecid)).map(h=>e.tipOf(h.src)).filter(h=>!!h&&V(e,h)))].sort((h,x)=>s(h)<s(x)?-1:1),le=k.length>0,pe=k.map(h=>t.get(`id:${s(h)}`)??t.get(`def:${String(e.getNode(h)?.content.definitionId??"")}`)),tt=pe.some(h=>h!==void 0);tt&&(ue=!0),L.add(f);for(let h of k)L.add(h);let Kt=le&&!tt?"unknown":e.stale(f)==="fresh"?"fresh":"stale",ee=m.expected_answer??{},fe=C(e,f),rt=k.flatMap(h=>(e.execHistory?.(s(h))??[]).map(x=>({execution_id:String(x.execution_id),ts:String(x.started_at),verdict:String(x.per_ac?.find(me=>me.ac_ref===fe)?.verdict??x.verdict),stale_at_run:!!x.stale_at_run,oracle_mode:String(x.oracle_mode),...x.via_parent?{via_parent:String(x.via_parent)}:{}}))).sort((h,x)=>h.ts<x.ts?-1:1).slice(-10);return{id:fe,text:String(m.text??""),risk:String(m.risk??""),scope:y,covered_by:k.map(h=>s(h)),...le?{link_type:"verifies"}:{},execution:Rr(fe,pe),fresh:Kt,derived:!!m.derived,...m.kind||m.expected_answer?{expected_answer:{...m.kind?{kind:String(m.kind)}:{},statement:String(m.text??""),...ee.operator!==void 0?{operator:ee.operator}:{},...ee.operand!==void 0?{operand:ee.operand}:{}}}:{},...le?{satisfied_by:k.map((h,x)=>{let me=e.getNode(h)?.content.check??{},nt=pe[x]?.steps?.checkStepId??me.verified_against;return{test:s(h),...nt?{step:nt}:{}}})}:{},...rt.length?{executions:rt}:{}}}).sort((f,y)=>f.id<y.id?-1:1);if(!(n&&!ue)){for(let f of L)o.add(f);i.push({id:C(e,c),title:String(d.title??""),...d.description||d.summary?{description:String(d.description??d.summary)}:{},...Array.isArray(d.actors)&&d.actors.length?{actors:d.actors.map(String)}:{},...d.value?{value:String(d.value)}:{},risk:String(d.risk??""),status:e.trust.get(c)==="trusted"?"approved":"draft",sources:g,...I.length?{stale_sources:I}:{},..._.length?{depends_on:_}:{},...w?{provenance:{derived_from:`${String(w.props?.source_id??"")}#${String(w.props?.anchor??"")}`}}:{},scenarios:Y,acceptance_criteria:q})}}i.sort((c,d)=>c.id<d.id?-1:1);let u=e.byLabel(R.GAP).filter(({cid:c})=>V(e,c)&&e.trust.get(c)!=="archived").filter(({content:c})=>{if(!n||typeof c.uc=="string"&&o.has(e.tipOf(c.uc)))return!0;let d=typeof c.ref=="string"?e.resolve(c.ref):null;return d!==null&&o.has(e.tipOf(d.cid))}).map(({cid:c,content:d})=>({ref:C(e,c),kind:String(d.kind??""),...d.risk?{risk:String(d.risk)}:{},...d.question?{question:Pr(d.question)}:{}})).sort((c,d)=>c.ref<d.ref?-1:1);return{usecases:i,...u.length?{gaps:u}:{},...n?{scope:"run"}:{}}}function Pr(e){if(typeof e=="string")return e;let t=e?.header;return typeof t=="string"?t:""}function Cr(e,t){let r=e.tipOf(t);return e.nodeLabel.get(r)!==R.USECASE||!V(e,r)?null:C(e,r)}import{mkdirSync as Ar,renameSync as Or,rmSync as Dr,writeFileSync as $r}from"fs";import{join as Rt}from"path";var Fr=5e6;function Pt(e,t,r){let n=Rt(e,"coverage","sources"),i=new Map,o=!1;try{for(let a of r.usecases)for(let s of a.sources){if(i.has(s.id)){s.file=i.get(s.id);continue}if(!s.cid)continue;let u=ft(t,s.cid);if(u===null||u.byteLength>Fr)continue;o||(Ar(n,{recursive:!0}),o=!0);let c=Rt(n,s.id),d=`${c}.tmp-${process.pid}`;$r(d,u),Or(d,c);let p=`coverage/sources/${s.id}`;i.set(s.id,p),s.file=p}}catch{for(let a of r.usecases)for(let s of a.sources)delete s.file;if(o)try{Dr(n,{recursive:!0,force:!0})}catch{}}}import{existsSync as ze,readFileSync as Z,renameSync as Nr,writeFileSync as jr}from"fs";import{dirname as $t,isAbsolute as Ft,resolve as Lt}from"path";var Lr=new Set(["inline","testmd","testrun"]),Tr=new Set(["inferred","authored","runtime-derived"]),Ge=new Set(["passed","failed","broken","skipped"]);function Ct(e,t,r){let n=[];if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let i=re(e);if(t.latestHash!==i)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(t.latestHash)} but chain head is ${String(i)} \u2014 re-open and retry`}]};let o=[];for(let s of r.facts){let u=`executions[${s.ref}]`,c=t.resolve(s.ref),d=c?t.tipOf(c.cid):null;if(!c||!d||t.superseded.has(d)){n.push({code:"UNKNOWN_REF",detail:`${u}: '${s.ref}' is not a live committed node`});continue}if(t.nodeLabel.get(d)!==R.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${u}: execution facts attach to tests \u2014 '${s.ref}' is a ${t.nodeLabel.get(d)}`});continue}if(!Lr.has(s.mode)){n.push({code:"BAD_MODE",detail:`${u}: mode '${s.mode}' not in inline|testmd|testrun`});continue}if(!Ge.has(s.verdict)){n.push({code:"BAD_VERDICT",detail:`${u}: verdict '${s.verdict}' not in ${[...Ge].join("|")}`});continue}if(!Tr.has(s.oracle_mode)){n.push({code:"BAD_ORACLE_MODE",detail:`${u}: oracle_mode '${s.oracle_mode}' not in inferred|authored|runtime-derived`});continue}if(typeof s.drift_flag!="boolean"||typeof s.stale_at_run!="boolean"){n.push({code:"MISSING_FIELD",detail:`${u}: drift_flag and stale_at_run are required booleans`});continue}if(!s.execution_id||!s.started_at||!s.definition_id_at_run){n.push({code:"MISSING_FIELD",detail:`${u}: execution_id, started_at and definition_id_at_run are required`});continue}let p=[];for(let l of s.per_ac??[]){let v=t.resolve(l.ac_ref),g=v?t.tipOf(v.cid):null;if(!v||!g||t.superseded.has(g)||t.nodeLabel.get(g)!==R.AC){n.push({code:"UNKNOWN_REF",detail:`${u}.per_ac: '${l.ac_ref}' is not a live AC`});continue}if(!Ge.has(l.verdict)){n.push({code:"BAD_VERDICT",detail:`${u}.per_ac['${l.ac_ref}']: verdict '${l.verdict}'`});continue}p.push({ac_ref:t.nameOf.get(g)??g,verdict:l.verdict})}o.push({about:d,definition_id_at_run:s.definition_id_at_run,verdict:s.verdict,...p.length?{per_ac:p}:{},drift_flag:s.drift_flag,oracle_mode:s.oracle_mode,stale_at_run:s.stale_at_run,...s.unresolved_acs?.length?{unresolved_acs:s.unresolved_acs}:{},execution_id:s.execution_id,...s.evidence_id?{evidence_id:s.evidence_id}:{},...s.duration_ms!==void 0?{duration_ms:s.duration_ms}:{},started_at:s.started_at,mode:s.mode,local:s.local,...s.via_parent?{via_parent:s.via_parent}:{}})}if(n.length>0)return{record:null,errors:n};let a=ne(e,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:o,source_head_moves:{}});return ie(e),{record:a.record,errors:null}}function Tt(e){let t={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of e)for(let i of n.verifies??[]){let o=r.get(i);(o===void 0||(t[n.status]??0)>(t[o]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function Nt(e){let t=[],r=oe(e.cwd);if(!ze(r))return{synced:0,superseded:0,skipped:"no-context",warnings:t};let n=e.by??{kind:"ai",id:"exec-sync"},i=O(r),o=[],a=0,s=new Set;for(let c of e.members){let d=Ft(c.path)?c.path:Lt(e.cwd,c.path);for(let p of Mr(d)){if(s.has(p.path))continue;s.add(p.path);let l=p.path===d?void 0:U(Z(d,"utf8"))?.id,v=Z(p.path,"utf8"),g=U(v);if(!g?.id)continue;let w=i.resolve(g.id),E=w?i.tipOf(w.cid):null;if(!w||!E||i.superseded.has(E)){t.push(`sync: ${g.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let I=N(J(v,te($t(p.path),i))),_=String(i.getNode(E)?.content.test_md_blob??""),A=N(J(_,dt(i))),B=!1,Y=E;if(I===A)g.base!==A&&Dt(p.path,v,A,t);else if(g.base===A){let m=Vr(r,i,E,v,I,n);m.error?(t.push(`sync: could not supersede ${g.id}: ${m.error}`),B=!0):(a++,Y=m.newCid,B=m.oracleTier,Dt(p.path,Z(p.path,"utf8"),I,t),i=O(r))}else B=!0,t.push(g.base?`sync: ${g.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${g.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);let L=i.getNode(Y)?.content.check,q=p.path===d?c.acs??[]:[],f=q.filter(m=>At(i,m.ref)),y=q.filter(m=>!At(i,m.ref)).map(m=>m.ref);o.push({ref:g.id,definition_id_at_run:I,verdict:c.verdict,...f.length?{per_ac:f.map(m=>({ac_ref:m.ref,verdict:m.verdict}))}:{},drift_flag:B,oracle_mode:L?.expected_mode??(at(L?.operand)?"runtime-derived":"inferred"),stale_at_run:i.stale(Y)!=="fresh",...y.length?{unresolved_acs:y}:{},execution_id:c.executionId,...c.evidenceId?{evidence_id:c.evidenceId}:{},...c.durationMs!==void 0?{duration_ms:c.durationMs}:{},started_at:c.startedAt,mode:c.mode,local:c.local,...l?{via_parent:l}:{}})}}if(o.length===0)return{synced:0,superseded:a,warnings:t};let u=Ct(r,O(r),{facts:o,by:n});return u.errors?(t.push(...u.errors.map(c=>`sync facts: ${c.code}: ${c.detail}`)),{synced:0,superseded:a,warnings:t}):{synced:o.length,superseded:a,warnings:t}}function Mr(e){let t=[],r=new Set,n=i=>{if(r.has(i)||!ze(i))return;r.add(i);let o=Z(i,"utf8");for(let a of o.split(`
5
- `)){let s=/^@import\s+(\S+)\s*$/.exec(a.trim());if(!s)continue;let u=Ft(s[1])?s[1]:Lt($t(i),s[1]);ze(u)&&U(Z(u,"utf8"))?.id&&n(u)}t.push({path:i})};return n(e),t}function At(e,t){let r=e.resolve(t),n=r?e.tipOf(r.cid):null;return!!(r&&n&&!e.superseded.has(n)&&e.nodeLabel.get(n)==="ac")}function Vr(e,t,r,n,i,o){let a=t.getNode(r);if(!a)return{oracleTier:!1,error:"tip unreadable"};let s=ut(n),u=String(a.content.test_md_blob??""),c=/^#\s+(.+?)\s*$/m.exec(s)?.[1]??String(a.content.title??""),d={...a.content,test_md_blob:s,definitionId:i,title:c},p=lt("test",d);if(p.length>0)return{oracleTier:!1,error:p.map(w=>w.detail).join("; ")};let l=pt("test",d);if(l===r)return{newCid:r,oracleTier:!1};let v=Ot(u)!==Ot(s),g=re(e);if(t.latestHash!==g)return{oracleTier:v,error:`store advanced under the sync (basis ${String(t.latestHash)} vs head ${String(g)}) \u2014 re-run to retry`};try{ne(e,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:l,label:"test",content:d}],edges:[],review:[{id:l,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:o}],supersessions:[{kind:"node",old:r,new:l,reason:"edited on disk (run sync)",by:o}],source_head_moves:{}},{expectPrev:g})}catch(w){return{oracleTier:v,error:w instanceof Error?w.message:String(w)}}return ie(e),{newCid:l,oracleTier:v}}var Br=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/;function Ot(e){let t=[],r=e.split(`
6
- `),n=!1;for(let i of r){if(/^##\s/.test(i)){n=/\bassert\b/i.test(i);let o=Br.exec(i);o&&t.push(`v:${o[1].trim()}`);continue}n&&i.trim()!==""&&t.push(i.trim())}return t.join(`
7
- `)}function Dt(e,t,r,n){try{let i=t.split(`
8
- `),o=-1;if(i[0]?.trim()==="---"){for(let u=1;u<i.length;u++)if(i[u].trim()==="---"){o=u;break}}if(o<0)return;let a=!1;for(let u=1;u<o;u++){if(/^\s+base:\s*sha256:[0-9a-f]+\s*$/.test(i[u])){i[u]=i[u].replace(/sha256:[0-9a-f]+/,r),a=!0;break}if(/^assurance:\s*$/.test(i[u])&&!i.slice(u,Math.min(u+3,o)).some(c=>/^\s+base:/.test(c))){i.splice(u+2,0,` base: ${r}`),a=!0;break}}if(!a)return;let s=`${e}.tmp-sync`;jr(s,i.join(`
9
- `)),Nr(s,e)}catch(i){n.push(`sync: pin refresh failed for ${e} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var Wr={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"},jt=(e,t)=>{try{if(!Ye(t))return{status:"skipped",reason:"no context store at the project root"};let r=z(e,"tests");if(!Ye(r))return{status:"skipped",reason:"pack has no tests/"};let n=new Map;for(let s of Hr(r)){let u=z(r,s,"result.yaml");if(!Ye(u)||!Yr(z(r,s)).isDirectory())continue;let c=T(Gr(u,"utf8"));if(!c?.definition_id&&!c?.assurance_id)continue;let d=Tt(c.steps??[]),p={testShortId:String(c.test??s),execution:Wr[String(c.status)]??"not-run",...d.length?{acs:d}:{}};c.assurance_id&&n.set(`id:${c.assurance_id}`,p),c.definition_id&&n.set(`def:${c.definition_id}`,p)}let i=It(O(t),n,{scope:"run"}),o=Et(i);Pt(e,t,i);let a=S({...i,rollup:o},{lineWidth:-1});return Ur(z(e,"coverage"),{recursive:!0}),Kr(z(e,"coverage","usecases.yaml"),a),{status:"written"}}catch(r){try{zr(z(e,"coverage","sources"),{recursive:!0,force:!0})}catch{}return{status:"skipped",reason:r instanceof Error?r.message:String(r)}}};async function Xr(e){try{let t=new X({origin:"inline",runKind:"author",pid:e.pid,title:e.title,started:new Date().toISOString(),producerVersion:e.producerVersion,surfaces:e.surfaces,objectiveOrName:e.objectiveOrName,sessionId:e.sessionId,cwd:e.cwd,packRootDir:e.packRootDir}),r=await t.start();return{session:t,...r,packDir:t.pack,spawns:[],startedAtMs:Date.now(),cwd:e.cwd}}catch(t){return console.warn("evidence: inline pack creation failed",t),null}}function Zr(e,t,r){if(!e)return;e.session.noteSpawn(t),t.resolution&&(e.resolution=t.resolution);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));e.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function Qr(e){if(e)return{packTestDir:e.packTestDir,ordinalOffset:e.session.nextOrdinalOffset()}}async function qr(e,t){if(!e)return null;if(e.finalized)return e.finalized;let r=(n,i,o)=>t.log?t.log("warn",n,i,o):console.warn(`evidence: ${i}`,o??"");try{if(t.recordedTestPath)try{await e.session.writeDefinition(await Jr.readFile(t.recordedTestPath,"utf8"))}catch(a){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(a)})}let n=t.cdpBrowserCapture?await t.cdpBrowserCapture():void 0,i=await e.session.writeResult({steps:e.session.steps,spawns:e.spawns.length?e.spawns:[{resultCode:null}],externalIdInput:{...t.externalIdInput,execution_id:e.executionId},runnerEnv:Be({cdpBrowser:n,resolution:e.resolution}),intentEnv:{model:t.model,platform:"Desktop",platform_type:"web"},durationMs:t.durationMs??Date.now()-e.startedAtMs,log:t.log});try{if(t.recordedTestPath){let a=Nt({cwd:t.cwd??e.cwd??process.cwd(),members:[{path:t.recordedTestPath,verdict:i,executionId:e.executionId,startedAt:new Date(e.startedAtMs).toISOString(),mode:"inline",local:t.local??!1}]});for(let s of a.warnings)r("EXEC_SYNC",s)}}catch(a){r("EXEC_SYNC","exec-sync failed",{error:String(a)})}try{let a=(t.coverageWriter??jt)(e.packDir,oe(t.cwd??e.cwd??process.cwd()));a.status==="skipped"&&r("EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${a.reason}`)}catch(a){r("EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(a)})}let o=await Ve({executionId:e.executionId,testId:e.testId,saved:t.saved,runKind:"author",verdict:i,cwd:t.cwd??e.cwd,packDir:e.packDir,tuiLogPath:t.tuiLogPath,log:t.log,surface:"inline"});return e.finalized=o,t.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:e.executionId,verdict:i,valid:o.valid,pack:e.packDir,store_copy:o.storePath??null}),o}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as sn,openSync as cn,readSync as an,closeSync as dn}from"fs";import{basename as un,resolve as ln}from"path";import{createServer as en}from"http";import{createReadStream as tn,promises as rn}from"fs";import{randomBytes as nn}from"crypto";var ae="127.0.0.1";function Mt(e,t){if(!e)return null;let r=/^bytes=(\d*)-(\d*)$/.exec(e.trim());if(!r)return null;let[,n,i]=r;if(n===""&&i==="")return null;if(n===""){let s=Number(i);return s===0||t===0?"unsatisfiable":{start:Math.max(0,t-s),end:t-1}}let o=Number(n);if(o>=t)return"unsatisfiable";let a=i===""?t-1:Math.min(Number(i),t-1);return a<o?null:{start:o,end:a}}async function Ke(e){let t=nn(16).toString("hex"),r=en((i,o)=>{on(i,o,e,t).catch(()=>o.destroy())});await new Promise((i,o)=>{r.once("error",o),r.listen(e.port??0,ae,()=>{r.removeListener("error",o),i()})});let n=r.address().port;return{port:n,urlFor:i=>`http://${ae}:${n}/${t}/${encodeURIComponent(i)}`,close:()=>new Promise(i=>{r.close(()=>i()),r.closeAllConnections()})}}async function on(e,t,r,n){let i=e.url??"/",o=_=>{try{r.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:_,path:i})}catch{}};if(e.headers.host!==`${ae}:${e.socket.localPort}`){o("host_mismatch"),t.writeHead(403).end();return}let a=e.headers.origin;if(a!==void 0&&!r.allowedOrigins.includes(a)){o("origin_denied"),t.writeHead(403).end();return}let s=a?{"Access-Control-Allow-Origin":a,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(e.method==="OPTIONS"){let _={...s,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};e.headers["access-control-request-private-network"]==="true"&&(_["Access-Control-Allow-Private-Network"]="true"),t.writeHead(204,_).end();return}if(e.method!=="GET"&&e.method!=="HEAD"){t.writeHead(405,s).end();return}let u;try{let _=new URL(e.url??"/",`http://${ae}`).pathname.split("/");if(_.length!==3||_[1]!==n){o("bad_token"),t.writeHead(404,s).end();return}u=decodeURIComponent(_[2])}catch{o("not_found"),t.writeHead(404,s).end();return}let c=r.packs.get(u);if(!c){o("not_found"),t.writeHead(404,s).end();return}let d;try{let _=await rn.stat(c);if(!_.isFile())throw new Error("not a file");d=_.size}catch{o("not_found"),t.writeHead(404,s).end();return}let p={...s,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(e.method==="HEAD"){t.writeHead(200,{...p,"Content-Length":String(d)}).end();return}let l=Mt(e.headers.range,d);if(l==="unsatisfiable"){o("unsatisfiable"),t.writeHead(416,{...s,"Content-Range":`bytes */${d}`}).end();return}let[v,g,w]=l===null?[0,d-1,200]:[l.start,l.end,206],E={...p,"Content-Length":String(g-v+1)};if(w===206&&(E["Content-Range"]=`bytes ${v}-${g}/${d}`),t.writeHead(w,E),d===0){t.end();return}let I=tn(c,{start:v,end:g});I.on("error",()=>t.destroy()),t.on("close",()=>I.destroy()),I.pipe(t)}function Q(e,t){return(t??ot(e).evidenceViewerUrl).replace(/\/+$/,"")}function We(e,t){return`${t}/?pack=${encodeURIComponent(e)}`}function Je(e){return`evidence: view locally with \`kane-cli evidence serve ${e}\``}async function pn(e,t,r={}){let n=r.out??(d=>process.stdout.write(d+`
10
- `)),i=d=>(n(`error: ${d}`),2);if(t.env!=="prod"&&t.env!=="stage")return i(`invalid --env: ${String(t.env)}`);if(t.port!==void 0&&(!Number.isInteger(t.port)||t.port<1||t.port>65535))return i("invalid --port: expected an integer 1-65535");let o;try{o=Q(t.env,t.viewerUrl),new URL(o)}catch{return i(`invalid --viewer-url: ${t.viewerUrl}`)}if(e.length===0)return i("no pack paths given");let a=new Map;for(let d of e){let p=ln(d),l;try{l=sn(p)}catch{return i(`${d}: not found`)}if(l.isDirectory())return i(`${d}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!l.isFile())return i(`${d}: not a regular file`);let v=Buffer.alloc(2),g=cn(p,"r");try{an(g,v,0,2,0)}finally{dn(g)}if(v.toString("latin1")!=="PK")return i(`${d}: not a sealed evidence pack (zip magic missing)`);let w=un(p);if(a.has(w))return i(`duplicate pack basename: ${w} (URL names collide \u2014 rename one)`);a.set(w,p)}let s=r.log??((d,p,l)=>process.stderr.write(`warn: ${p} reason=${l.reason} path=${l.path}
11
- `)),u;try{u=await Ke({packs:a,allowedOrigins:[new URL(o).origin],port:t.port,log:s})}catch(d){return i(`could not bind 127.0.0.1${t.port?`:${t.port}`:""} \u2014 ${d.message}`)}n(`serving ${a.size} pack${a.size===1?"":"s"} on http://127.0.0.1:${u.port}`);for(let d of a.keys()){let p=u.urlFor(d);n(d),n(` pack ${p}`),n(` viewer ${We(p,o)}`)}return n("press Ctrl-C to stop"),await(r.hold??fn)(),await u.close(),0}function fn(){return new Promise(e=>{let t=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of t)process.on("SIGINT",r);e()})})}import{promises as de}from"fs";import{tmpdir as hn}from"os";import{join as Ut,resolve as Ze}from"path";var mn=["error","prefer_first","prefer_latest","discard"],gn=["external_id.commit_id","external_id.test_id"];function Vt(e){let t=e.replace(/-/g,"_");return mn.includes(t)?t:null}function Bt(e){let t=e==="discard"?{on_collision:"discard"}:{on_collision:"error",identity:{keys:[...gn],on_same:e??"nest",on_different:e?"error":"split"}};return S({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:t,rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function Xe(e){try{if(!e.isTTY){e.log(Je(e.packPath));return}let t=Q(e.env);await(e.renderPrompt??vn)(e.packPath,t)}catch(t){try{e.log(`evidence view failed \u2014 ${t.message}`)}catch{}}}async function vn(e,t){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-LHPIZUGQ.js");await new Promise(o=>{let a=n(r.default.createElement(i,{packPath:e,viewerBase:t,onDone:()=>{a.unmount(),o()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function wn(e,t,r=process.cwd(),n={}){let i=n.out??(l=>process.stdout.write(l+`
12
- `)),o=n.err??(l=>process.stderr.write(l+`
13
- `)),a=l=>(o(`evidence merge: ${l}`),2);if(!t.runId)return a("--run-id is required (merged identity is the caller's fact)");if(t.rules&&t.onCollision)return a("--rules and --on-collision are mutually exclusive");let s;if(t.onCollision!==void 0){let l=Vt(t.onCollision);if(!l)return a(`invalid --on-collision: ${t.onCollision} (expected error | prefer-first | prefer-latest | discard)`);s=l}let u=[];for(let l of e){let v=await yn(l,r);if(!v)return a(`no pack found for "${l}"`);u.push(v)}let c=t.out?Ze(r,t.out):b(t.runId,r),d=null,p;t.rules?p=Ze(r,t.rules):(d=await de.mkdtemp(Ut(hn(),"kane-merge-rules-")),p=Ut(d,"merge-rules.yaml"),await de.writeFile(p,Bt(s)));try{let l=await(n.mergeFn??st)(u,{runId:t.runId,out:c,rulesPath:p,title:t.title,finalize:t.finalize});return t.json?i(JSON.stringify(l)):_n(i,l),l.output.finalized&&!t.json&&await(n.offer??Xe)({packPath:c,env:t.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:o}),0}catch(l){let v=l instanceof Error?l.message:String(l);return l?.code==="ABORT"?(o(`evidence merge: aborted \u2014 ${v}`),1):a(v)}finally{d&&await de.rm(d,{recursive:!0,force:!0}).catch(()=>{})}}async function yn(e,t){let r=Ze(t,e);if(await Ht(r))return r;let n=b(e,t);return await Ht(n)?n:null}async function Ht(e){try{return await de.stat(e),!0}catch{return!1}}function _n(e,t){let{packs:r,tests:n,output:i}=t;e(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let o of r.skipped)e(` skipped ${o.runId}: ${o.rule} \u2014 ${o.reason}`);for(let o of n.collisions){let a;o.action==="nest"?a=`nested into ${o.folder}, latest ${o.winner}`:o.action==="split"?a=`split into ${o.folder}`:a=`winner ${o.winner}`,e(` collision ${o.test}: ${a} (${o.rule})`)}for(let o of n.discarded)e(` discarded ${o}`)}import{copyFileSync as xn,existsSync as Qe,mkdirSync as Sn}from"fs";import{join as Gt}from"path";function bn(e,t,r){try{let n=Gt(e,"auteur","execution.json");if(Qe(n))return!0;for(let i of t)if(!(!i||!Qe(i)))return Sn(Gt(e,"auteur"),{recursive:!0}),xn(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:t.find(i=>i&&Qe(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as kn}from"fs";import{join as En}from"path";function et(e){let t=[],r=!0,n=o=>{if(o===null||typeof o!="object")return;let a=o;if(Array.isArray(a.operations))for(let s of a.operations){let u=s?.operation_id;typeof u=="string"&&u&&t.push(u)}if(Array.isArray(a.children)){a.content_type!=="generative_block"&&(r=!1);for(let s of a.children)n(s)}if(Array.isArray(a.branches)){r=!1;for(let s of a.branches){let u=s?.children;if(Array.isArray(u))for(let c of u)n(c)}}},i=e?.instructions;if(Array.isArray(i))for(let o of i)n(o);return{ids:t,linear:r}}function In(e){return et(e).ids}function qe(e,t){let r=new Set(t.map(s=>s.action_id).filter(Boolean)),n=-1;for(let s of r){let u=e.indexOf(s);u>n&&(n=u)}let i=t.reduce((s,u)=>Math.max(s,u.ordinal),0),o=new Set,a=[];for(let s of e.slice(n+1))r.has(s)||o.has(s)||(o.add(s),a.push({id:s,ordinal:++i,status:"skipped",action_id:s}));return a}function zt(e,t){let r=new Set(t),n=e.filter(o=>o.action_id);if(n.some(o=>r.has(o.action_id))||n.length>t.length)return null;let i=0;return e.map(o=>o.action_id?{...o,action_id:t[i++]}:o)}function Rn(e,t){if(e.length>t.length)return!1;for(let r=0;r<e.length;r++)if(t[r]!==e[r].action_id)return!1;return!0}function Pn(e,t,r,n=!0){if(t.length===0)return{steps:e,tail:[]};let i=(r&&n?zt(e,t):null)??e,o=i.filter(s=>s.action_id),a=new Set(t);return o.length>0&&o.every(s=>a.has(s.action_id))?{steps:i,tail:qe(t,i)}:o.length>0&&!Rn(o,t)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:qe(t,i)}}function Yt(e){try{let t=kn(En(e,"auteur","execution.json"),"utf8");return et(JSON.parse(t))}catch{return{ids:[],linear:!0}}}function Cn(e){return Yt(e).ids}export{M as a,we as b,ye as c,_e as d,xe as e,Se as f,be as g,ke as h,Ee as i,Zt as j,Ie as k,Re as l,Qt as m,qt as n,Pe as o,Oe as p,De as q,$e as r,Fe as s,Le as t,er as u,tr as v,Te as w,rr as x,Ne as y,je as z,Me as A,yt as B,Ve as C,Be as D,St as E,lr as F,X as G,hr as H,Tt as I,Nt as J,jt as K,Xr as L,Zr as M,Qr as N,qr as O,Mt as P,Ke as Q,Q as R,We as S,Je as T,pn as U,Xe as V,wn as W,bn as X,et as Y,In as Z,qe as _,zt as $,Pn as aa,Yt as ba,Cn as ca};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as x}from"./chunk-GBBVP2JW.js";import{a as d,b as $,d as w}from"./chunk-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import{e as b,f as k}from"./chunk-CJJXT5DO.js";import"./chunk-BC7UVJJB.js";import{e as v}from"./chunk-EHN5HTUD.js";import{a as h}from"./chunk-L5LI2JF4.js";import{a as y}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{basename as f}from"path";import{statSync as R}from"fs";function S(s,e){if(!s)return 1;let r=s.resolve(e);return!r||r.superseded?1:s.getNode(r.tip)?.content.risk==="high"?3:1}function C(s,e){return s.usecases.map(r=>{let n=r.acceptance_criteria??[],a=n.filter(o=>(o.covered_by??[]).length>0),u=n.filter(o=>o.execution==="passed"),c=n.filter(o=>o.execution==="failed"),p=n.filter(o=>o.execution==="blocked"),i=0,l=0;for(let o of n){let g=S(e,o.id);i+=g,o.execution==="passed"&&(l+=g)}let t=i===0?0:Math.round(100*l/i),m=a.length===0?"uncovered":n.length===u.length?"covered":p.length>0&&c.length===0?"blocked":"partial";return{id:r.id,title:r.title,status:m,pct:t,acs:{total:n.length,covered:a.length,passed:u.length,failed:c.length,blocked:p.length},stale:n.filter(o=>o.fresh==="stale").map(o=>o.id)}})}async function A(s){let e=await b(s);return e.length===0?null:e.map(r=>({p:r,m:R(r).mtimeMs})).sort((r,n)=>n.m-r.m)[0].p}var D={covered:"\u2714",partial:"\u25D0",uncovered:"\u2716",blocked:"\u23F8"};function G(s){let e=Math.round(s/10);return"\u2588".repeat(e)+"\u2591".repeat(10-e)}async function E(s,e=w(),r=process.cwd()){let n=$(r,e);if(!n)return 2;let a=s.from?await k(s.from,r):await A(r);if(!a)return d(e,s.from?`no evidence pack at '${s.from}'`:"no evidence pack in .testmuai/evidence \u2014 run a test first, or pass --from <pack>"),2;let u=await v(a,"coverage/usecases.yaml");if(u==null)return d(e,`${f(a)} carries no coverage/usecases.yaml \u2014 the pack predates coverage or its project had no .context at seal time`),2;let c=h(u);if(!c||!Array.isArray(c.usecases))return d(e,`${f(a)}: coverage/usecases.yaml is not a usecases document`),2;let p=y(n),i=C(c,p),l=await x(p,"design");if(s.json)return e.out(JSON.stringify({pack:a,depth:i,completeness:l},null,2)),0;e.out(`coverage \u2014 ${f(a)}`),e.out(""),e.out("depth (proven by the pack):");for(let t of i){let m=t.stale.length?` \xB7 ${t.stale.length} stale`:"";e.out(` ${D[t.status]} ${G(t.pct)} ${String(t.pct).padStart(3)}% ${t.id} \u2014 ${t.status} (${t.acs.passed}/${t.acs.total} ACs proven${t.acs.failed?`, ${t.acs.failed} failed`:""}${t.acs.blocked?`, ${t.acs.blocked} blocked`:""})${m}`)}e.out(""),e.out("completeness (live graph):"),l.length===0&&e.out(" no design gaps \u2014 every AC verified, every use-case scenarioed");for(let t of l)e.out(` [${t.risk}] ${t.tag} ${t.ref} \u2014 ${t.why}`),e.out(` \u2192 ${t.ready_command}`);return 0}export{E as coverCommand,C as depthRows};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{$ as fa,A as J,B as K,C as L,D as M,E as N,F as O,G as P,H as Q,L as R,M as S,N as T,O as U,P as V,Q as W,R as X,S as Y,T as Z,U as _,V as $,W as aa,X as ba,Y as ca,Z as da,_ as ea,a,aa as ga,b,ba as ha,c,ca as ia,d,e,f,g,h,i,j,k as t,l as u,m as v,n as w,o as x,p as y,q as z,r as A,s as B,t as C,u as D,v as E,w as F,x as G,y as H,z as I}from"./chunk-YZBLBPOE.js";import{a as n,b as o,c as p,e as q,f as r,g as s}from"./chunk-CJJXT5DO.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import{a as k,b as l,c as m}from"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-3NR6OTHL.js";import"./chunk-NMKZHHB6.js";import"./chunk-UR6MHSHU.js";export{P as EvidenceSession,C as appendExecutionPointer,M as assembleExecutionEnv,i as buildEnvironment,j as buildEvidenceRunConfig,g as buildExternalId,z as buildLogsMetaYaml,y as buildResultYaml,t as buildRunYaml,O as createCdpBrowserCapture,u as createRunningPack,v as createRunningPackRoot,H as declareLogsFromDir,J as diagnostics,x as discardPack,ba as ensureAuteurExecution,N as fetchCdpBrowserString,L as finalizeEvidencePack,U as finalizeInlineEvidence,K as finalizeMemberTestLogs,da as flattenAuteurLeafIds,ca as flattenAuteurLeaves,T as inlineEvidenceBlock,q as listPacks,p as newExecutionId,h as normalizeOs,S as noteInlineSpawn,$ as offerEvidenceView,o as packPath,I as packTestLogsDir,V as parseRange,D as readExecutionPointers,ia as readPackLeafIds,ha as readPackLeaves,s as recoverStore,fa as remapReplayActionIds,r as resolvePack,ga as resolveReplayResultSteps,F as rollupTestStatus,aa as runEvidenceMerge,_ as runEvidenceServe,E as runEvidenceValidate,Q as runStartupRecovery,l as sealPack,w as sealPackById,Z as serveHint,d as shortHash,c as slugify,W as startEvidenceLocalServer,R as startInlineEvidence,n as storeDir,m as sweepStore,ea as synthesizeSkippedTail,f as testIdForInline,e as testIdForTestmd,k as validatePack,a as verdictFromResultCode,X as viewerBaseFor,Y as viewerUrlFor,b as worstOf,G as worstResultCode,B as writeLogsMeta,A as writeResult};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d,e,f,g}from"./chunk-OPDJD7WS.js";import"./chunk-3C5GMAM4.js";import"./chunk-GRB66C5S.js";import"./chunk-JFAFKHDX.js";import"./chunk-CIFVUX3B.js";import"./chunk-DNNZ353O.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{b as designStateOf,g as evolveCommand,c as evolveOneUc,f as liveRunDesignForUc,a as resolveParentUc,e as runEvolveCommand,d as staleTargets};
@@ -1,5 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as D,e as h}from"./chunk-GAD6IBZ6.js";import"./chunk-K5JGCJ2K.js";import"./chunk-NMZATEKQ.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-OSALXGD4.js";import"./chunk-DNNZ353O.js";import{c as A}from"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import{a as y}from"./chunk-JR37W7IJ.js";import{d as C}from"./chunk-GLVDOR5G.js";import{c as E}from"./chunk-RN4OSVTG.js";import{a as P}from"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-NMKZHHB6.js";import"./chunk-UR6MHSHU.js";async function j(n){let[{render:o},e,{QuestionBatchPrompt:i}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),c=e.default??e;return new Promise(t=>{let p=o(c.createElement(i,{questions:n,onSubmit:a=>{p.unmount(),t(a)}}))})}async function F(n,o){let[{render:e},i,{ReviewChecklist:c}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),t=i.default??i;return new Promise(p=>{let a=e(t.createElement(c,{items:n.map(u=>{let s=o.get(u.temp_ref);return{uc:u,dedupWith:s&&!s.archived?s.cid:void 0,archivedMatch:s?.archived?{cid:s.cid,reason:s.reason}:void 0}}),onSubmit:u=>{a.unmount(),p(u)}}))})}async function G(n){let{createInterface:o}=await import("readline/promises"),e=o({input:process.stdin,output:process.stdout});try{let i=await e.question(`${n} [y/N] `);return/^y(es)?$/i.test(i.trim())}finally{e.close()}}async function O(n){let o=await C(),e=P(process.cwd()),i=await A(o);if(!i.ok)return process.stderr.write((i.message??"error: turn-endpoint preflight failed")+`
3
- `),2;let c=async()=>i;if(n.plan)return h(n,{contextDir:e,agent:y,preflightTurn:c,ask:j,review:F,confirmStale:G,out:l=>process.stdout.write(l+`
4
- `),progress:l=>process.stderr.write(l+`
5
- `),isTTY:E(),auth:o});let[{render:t},p,{ScrollbackProvider:a},{ChatSurface:u},{ScrollbackTap:s},{makeChatController:r},{setInkExit:w},x]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-Y2M6HB2R.js"),import("./ScrollbackTap-Q3IOKNMS.js"),import("./chat-controller-MONWZKS7.js"),import("./exit-manager-VCSIUYBR.js"),Promise.all([import("./chat-committer-WOTCC7L3.js"),import("./descriptor-KXDJ4XYD.js"),import("./explain-VTRHEVUQ.js"),import("./readmodel-KTNI6QDC.js")])]),[{commitChatTurn:I},{topologyDescriptor:M},{explain:V},{openGraph:k}]=x,v=p.default??p,m=r({commitChatTurn:I,descriptor:M(),contextDir:e,refreshGraph:()=>k(e),graph:k(e),explain:V,by:{kind:"human",id:"owner"},dedupFlags:l=>D(l,k(e))}),T={current:null},S=0,b=null,f=!1,N=()=>{if(S+=1,S>=2){try{g.unmount()}catch{}process.exit(130)}m.requestPause(),b=setTimeout(()=>{f||(f=!0,(async()=>{m.ledger({kind:"interrupted",detail:"the agent did not confirm the pause within 5s"}),await T.current?.flush();try{g.unmount()}catch{}process.exit(130)})())},5e3)},g=t(v.createElement(a,null,v.createElement(s,{into:T}),v.createElement(u,{controller:m,verb:"extract",onCtrlC:N})),{exitOnCtrlC:!1});w(()=>g.unmount()),m.ledger({kind:"banner",text:"kane-cli context \xB7 extract \xB7 interactive"});try{let l=h(n,{contextDir:e,agent:y,preflightTurn:c,ask:d=>m.ask(d),review:async d=>new Map(d.map(R=>[R.temp_ref,{resolution:"skipped"}])),confirmStale:async()=>!0,out:d=>m.note(d),progress:()=>{},isTTY:E(),auth:o,chat:m});return l.finally(()=>{f=!0}),await l}finally{f=!0,b&&clearTimeout(b),await T.current?.flush();try{g.unmount()}catch{}}}async function U(n){let o=await C(),{makeHeadlessIO:e,resolveEncoding:i,guardedChannels:c}=await import("./headless-io-PWW6YKH2.js"),t=e(i(n.mode),"extract"),{makeInterruptGuard:p}=await import("./interrupt-guard-UREUWNRL.js"),a=p(y,r=>t.out(r)),s=c(t,()=>a.interrupted(),/^error: (agent failed|repair run failed|agent ended)/);try{let r=await h(n,{contextDir:P(process.cwd()),agent:a.agent,preflightTurn:()=>A(o),ask:async()=>[],review:async w=>new Map(w.map(x=>[x.temp_ref,{resolution:"skipped"}])),confirmStale:async()=>!1,out:s.out,emit:s.emit,progress:t.progress,isTTY:!1,auth:o});return a.interrupted()&&r!==3?(t.out("interrupted \u2014 no session saved"),t.done(130)):t.done(r)}catch(r){return t.event({type:"error",message:`error: extract failed: ${r instanceof Error?r.message:String(r)}`}),t.out(`error: extract failed: ${r instanceof Error?r.message:String(r)}`),t.out("hint: per-run trace logs live under .context/logs/ (extract-*.log)"),t.done(1)}finally{a.dispose()}}export{U as bindExtractHeadless,O as bindExtractInteractive};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b}from"./chunk-GBBVP2JW.js";import{a as o,b as h,d as w}from"./chunk-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import{e as $,f as y}from"./chunk-CJJXT5DO.js";import"./chunk-BC7UVJJB.js";import{e as l}from"./chunk-EHN5HTUD.js";import{a as g}from"./chunk-L5LI2JF4.js";import{a as k}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{basename as p}from"path";import{statSync as O}from"fs";async function P(t){let e=await $(t);return e.length===0?null:e.map(a=>({p:a,m:O(a).mtimeMs})).sort((a,r)=>r.m-a.m)[0].p}async function U(t,e=w(),a=process.cwd()){let r=t.stage??"design";if(r!=="design"&&r!=="cover"&&r!=="all")return o(e,`--stage must be design | cover | all, got '${r}'`),2;if(t.top!==void 0&&(!Number.isInteger(t.top)||t.top<1))return o(e,"--top must be a positive integer"),2;let f=h(a,e);if(!f)return 2;let d,i;if(r!=="design"){let s=t.from?await y(t.from,a):await P(a);if(!s)return o(e,`--stage ${r} needs an evidence pack \u2014 run a test first, or pass --from <pack>`),2;let c=await l(s,"coverage/usecases.yaml");if(c==null)return o(e,`${p(s)} carries no coverage/usecases.yaml \u2014 re-run the tests to produce a coverage-bearing pack`),2;let u=g(c);if(!u||!Array.isArray(u.usecases))return o(e,`${p(s)}: coverage/usecases.yaml is not a usecases document`),2;d=u,i=p(s)}let v=k(f),n=await b(v,r,void 0,d),m=n.length;return t.top!==void 0&&(n=n.slice(0,t.top)),t.json?(e.out(JSON.stringify({stage:r,...i?{pack:i}:{},total:m,rows:n},null,2)),0):(e.out(`gaps \u2014 stage ${r}${i?` \xB7 pack ${i}`:""} (${n.length}${n.length<m?` of ${m}`:""})`),n.length===0&&e.out(" nothing owed \u2014 design and execution are square"),n.forEach((s,c)=>{e.out(` ${String(c+1).padStart(2)}. [${s.risk}] ${s.tag} ${s.ref} \u2014 ${s.why}`),e.out(` \u2192 ${s.ready_command}`)}),0)}export{U as gapsCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as a,c as b,d as c}from"./chunk-UZWOHCFX.js";import"./chunk-DNNZ353O.js";import"./chunk-NVGBE2DR.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{c as ingestFile,a as slugFromFilename,b as versionBaseOf};
@@ -1,3 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as g,c as p,d as $}from"./chunk-UZWOHCFX.js";import{g as b}from"./chunk-E4EHWO3J.js";import"./chunk-DNNZ353O.js";import{c as l}from"./chunk-RN4OSVTG.js";import{a as m}from"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import{a as u}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{existsSync as h}from"fs";async function y(o,d,e,i=process.cwd()){let n=m(i);if(d.as!==void 0&&o.length>1)return(e.err??e.out)(`error: --as names ONE source identity \u2014 pass a single file (got ${o.length})`),2;for(let a of o){let f=d.as;if(e.isTTY&&f===void 0&&h(n)){let r=g(a),s=p(r);if(s){let c=u(n);c.heads.get(s)!=null&&c.heads.get(r)==null&&await e.confirm(`${r} looks like a new version of existing source '${s}' \u2014 ingest as '${s}' (moves its head)?`)&&(f=s)}}let t;try{t=await $({contextDir:n,filePath:a,asId:f,confirmSameSource:e.isTTY?r=>e.confirm(`identical bytes already ingested as ${r} \u2014 treat as the same source?`):void 0,pdfConverter:b})}catch(r){return e.out(`error: ${a}: ${r instanceof Error?r.message:String(r)}`),1}e.out(`${t.status} ${t.source_id} source ${t.cid} blob ${t.blob}`);for(let r of t.warnings??[])e.out(`warning: ${r}`);if(t.pdf&&e.out(`${t.source_id}: pdf, ${t.pdf.pages} pages, ${t.pdf.delivered} images delivered (${t.pdf.omitted} omitted)`),!e.isTTY&&t.status==="created"){let r=u(n);for(let[s,c]of r.heads.entries())if(!(s===t.source_id||c==null)&&r.getNode(c)?.content.blob===t.blob){e.out(`hint: identical bytes already ingested as ${s} \u2014 merged later via review`);break}}}return 0}async function P(o,d){let{createInterface:e}=await import("readline/promises");return y(o,d,{out:i=>process.stdout.write(i+`
3
- `),isTTY:l(),confirm:async i=>{let n=e({input:process.stdin,output:process.stdout});try{let a=await n.question(`${i} [Y/n] `);return!/^n(o)?$/i.test(a.trim())}finally{n.close()}}})}export{P as ingestCommand,y as runIngestCommand};
@@ -1,7 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as y}from"./chunk-IYTHPCQ2.js";import"./chunk-KHU7C6EE.js";import"./chunk-3C5GMAM4.js";import"./chunk-NMZATEKQ.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-OSALXGD4.js";import"./chunk-DNNZ353O.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import{c as k}from"./chunk-RN4OSVTG.js";import"./chunk-ZPDM6FO7.js";import{a as v}from"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-L5LI2JF4.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-NMKZHHB6.js";import"./chunk-UR6MHSHU.js";async function j(t){let[{render:u},o,{QuestionBatchPrompt:p}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),i=o.default??o;return new Promise(e=>{let m=u(i.createElement(p,{questions:t,onSubmit:a=>{m.unmount(),e(a)}}))})}async function q(t){let[{resolveAgentAuthEnv:u},{runAgent:o},{preflightTurn:p}]=await Promise.all([import("./spawner-VD6YFZ43.js"),import("./bridge-WVFTWHKP.js"),import("./turn-preflight-JGYT7LXP.js")]),i=await u(),e=v(process.cwd()),{baseUrlAdvisory:m}=await import("./turn-preflight-JGYT7LXP.js"),a=m();a&&process.stderr.write(a+`
3
- `);let d=await p(i);if(!d.ok)return process.stderr.write((d.message??"error: turn-endpoint preflight failed")+`
4
- `),2;let T=async()=>d;if(t.plan)return y(t,{contextDir:e,agent:o,preflightTurn:T,ask:j,out:r=>process.stdout.write(r+`
5
- `),progress:r=>process.stderr.write(r+`
6
- `),isTTY:k(),auth:i});if(!t.resume){let[{openGraph:r},{designGate:s}]=await Promise.all([import("./readmodel-KTNI6QDC.js"),import("./gate-B6C6KLFA.js")]),w=s(r(e),t.useCase,!!t.force);if(!w.ok)return process.stderr.write(`design: ${w.message}
7
- `),w.code}let[{render:C},b,{ScrollbackProvider:A},{ChatSurface:D},{ScrollbackTap:E},{makeChatController:R},{setInkExit:S},G]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-Y2M6HB2R.js"),import("./ScrollbackTap-Q3IOKNMS.js"),import("./chat-controller-MONWZKS7.js"),import("./exit-manager-VCSIUYBR.js"),Promise.all([import("./chat-committer-WOTCC7L3.js"),import("./descriptor-KXDJ4XYD.js"),import("./explain-VTRHEVUQ.js"),import("./readmodel-KTNI6QDC.js")])]),[{commitChatTurn:I},{topologyDescriptor:O},{explain:Q},{openGraph:x}]=G,f=b.default??b,n=R({commitChatTurn:I,descriptor:O("design"),contextDir:e,refreshGraph:()=>x(e),graph:x(e),explain:Q,by:{kind:"human",id:"owner"}}),g={current:null},P=0,h=null,c=!1,Y=()=>{if(P+=1,P>=2){try{l.unmount()}catch{}process.exit(130)}n.requestPause(),h=setTimeout(()=>{c||(c=!0,(async()=>{n.ledger({kind:"interrupted",detail:"the agent did not confirm the pause within 5s"}),await g.current?.flush();try{l.unmount()}catch{}process.exit(130)})())},5e3)},l=C(f.createElement(A,null,f.createElement(E,{into:g}),f.createElement(D,{controller:n,verb:"design",onCtrlC:Y})),{exitOnCtrlC:!1});S(()=>l.unmount()),n.ledger({kind:"banner",text:`kane-cli design \xB7 ${t.useCase??t.resume??""}`});try{let r=y(t,{contextDir:e,agent:o,preflightTurn:T,ask:s=>n.ask(s),out:s=>n.note(s),progress:()=>{},isTTY:k(),auth:i,chat:n});return r.finally(()=>{c=!0}),await r}finally{c=!0,h&&clearTimeout(h),await g.current?.flush();try{l.unmount()}catch{}}}export{q as bindDesignInteractive};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b,b as a,c as f,d as m}from"./chunk-GRB66C5S.js";import{h as p,i as y}from"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as c}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var g={kind:"human",id:process.env.USER??"operator"},$=/^(UNKNOWN_|BAD_|INVALID_|MALFORMED_|NOT_|SLUG_TAKEN|ALREADY_|SUPERSEDED_)/;function h(e){return e.every(r=>$.test(r.code))?2:1}function l(e,r){for(let n of r)b(e,`${n.code}: ${n.detail}`);return h(r)}async function w(e,r,n,t=process.cwd()){let s=a(t,n);if(!s||!await f(n,`retire source ${e} (head \u2192 null + tombstone record)`,r.yes))return 2;let i=c(s),o=y({contextDir:s,graph:i,sourceId:e,reason:r.reason,by:g});return o.errors?l(n,o.errors):(n.out(`retired ${e} (record ${o.record.seq}) \u2014 its use-cases stay until no live source evidences them`),0)}async function x(e,r,n,t=process.cwd()){let s=a(t,n);if(!s)return 2;let i=c(s),o=p({contextDir:s,graph:i,assignments:[{ref:e,slug:r}],by:g});return o.errors?l(n,o.errors):(n.out(`named ${o.record.names[0].cid} as "${r}" (record ${o.record.seq})`),0)}async function O(e,r,n,t=process.cwd()){let s=a(t,n);if(!s)return 2;let i=Number(e);if(!await f(n,`revert record ${i} via a compensation record`,r.yes))return 2;let o=c(s),{commitRevert:v}=await import("./revert-FRXNIP5R.js"),d=v({contextDir:s,graph:o,seq:i,reason:r.reason,by:g});for(let C of d.warnings)n.out(`note: ${C}`);if(d.errors)return l(n,d.errors);let u=d.record;return n.out(`reverted record ${i} via compensation record ${u.seq}: ${u.supersessions.length} supersession(s), ${u.review.length} trust restoration(s), ${Object.keys(u.source_head_moves).length} head move(s) \u2014 history unchanged, effects inverted`),0}async function A(e,r){return w(e,r,m())}async function P(e,r){return x(e,r,m())}async function I(e={},r=process.cwd()){return D(e,m(),r)}async function D(e,r,n=process.cwd()){let t=a(n,r);if(!t||!await f(r,"assign logical ids to every live unnamed node (one commit record)",e.yes))return 2;let{backfillLogicalIds:s}=await import("./logical-ids-QZQRQ3TV.js"),i=c(t),o=s(t,i);return o.errors?l(r,o.errors):(r.out(o.assigned===0?"backfill: every live node already has a logical id":`backfill: assigned ${o.assigned} logical id(s) (record ${o.record.seq})`),0)}async function R(e,r){return O(e,r,m())}export{I as nameBackfillCommand,P as nameCommand,A as retireCommand,R as revertCommand,D as runNameBackfillCommand,x as runNameCommand,w as runRetireCommand,O as runRevertCommand};
@@ -1,3 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as m}from"./chunk-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as g}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import{d as o}from"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var p=[o.SOURCE,o.USECASE,o.SCENARIO,o.AC,o.TEST,o.GAP];function h(n,e){if(n===o.SOURCE)return String(e.source_id??"");let i=e.question?.header,l=e.title??e.text??i??e.kind??"";return String(l)}function E(n,e){if(n.length<=e)return n;let i=n.slice(0,e-1),l=i.lastIndexOf(" ");return`${(l>e*.6?i.slice(0,l):i).trimEnd()}\u2026`}var b=58;async function O(n,e,i=process.cwd()){let l=m(i,e);if(!l)return 2;let a=g(l),s=[...a.nodeLabel.entries()].filter(([t])=>n.all||!a.superseded.has(t)).map(([t,r])=>{let u=a.getNode(t)?.content??{},f=a.trust.get(t)??(r===o.SOURCE?"-":"derived");return{id:r===o.SOURCE?String(u.source_id??""):a.nameOf.get(t)??t.slice(0,19),cid:t,label:r,title:h(r,u),trust:f,fresh:f==="archived"?"-":a.stale(t)}});if(n.type&&(s=s.filter(t=>t.label===n.type)),n.inferred&&(s=s.filter(t=>t.trust==="derived")),n.stale&&(s=s.filter(t=>t.fresh!=="fresh")),!n.all){let t=new Map;for(let r of s)t.set(`${r.label}:${r.id}`,r);s=[...t.values()]}let d=t=>{let r=p.indexOf(t);return r===-1?p.length:r};if(s.sort((t,r)=>d(t.label)-d(r.label)||t.title.localeCompare(r.title)),n.json){for(let t of s)e.out(JSON.stringify(t));return 0}if(s.length===0)return e.out("(no matching nodes)"),0;e.out("trust \xB7 fresh \xB7 title \xB7 id");let c=null;for(let t of s){if(t.label!==c){c=t.label;let u=s.filter(f=>f.label===t.label).length;e.out(""),e.out(`\u2500\u2500 ${t.label} \xB7 ${u} \u2500\u2500`)}let r=E(t.title||"(untitled)",b);e.out(` ${t.trust.padEnd(8)} ${t.fresh.padEnd(6)} ${r.padEnd(b)} ${t.id}`)}return 0}async function R(n){return O(n,{out:e=>process.stdout.write(e+`
3
- `),confirm:async()=>!1,isTTY:!!process.stdout.isTTY})}export{E as capWord,R as listCommand,O as runListCommand,h as titleOf};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as d,b as f,h as m}from"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var y=Object.keys(d).filter(n=>n!=="source");function b(n,t,u={kind:"system",id:"logical-id-backfill"}){let l=new Set(t.names.keys()),r=[];for(let c of y)for(let{cid:s,content:e}of t.byLabel(c)){if(t.superseded.has(s)||t.nameOf.has(s))continue;let a=typeof e.title=="string"&&e.title||typeof e.intent=="string"&&e.intent||typeof e.statement=="string"&&e.statement||typeof e.text=="string"&&e.text||"",i=a?f(c,a,g=>l.has(g)):null;i&&(l.add(i),r.push({ref:s,slug:i}))}if(r.length===0)return{record:null,errors:null,assigned:0};let o=m({contextDir:n,graph:t,assignments:r,by:u});return o.errors?{record:null,errors:o.errors,assigned:0}:{record:o.record,errors:null,assigned:r.length}}export{b as backfillLogicalIds};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-7ZMYAXES.js";import"./chunk-DL5CXC64.js";import"./chunk-RFHMDQXZ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-3NR6OTHL.js";import"./chunk-Z34XRBKQ.js";import"./chunk-NMKZHHB6.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-GLS46X7N.js";import"./chunk-2YQ6TW77.js";import"./chunk-WAOCHXJ5.js";import"./chunk-YZBLBPOE.js";import"./chunk-CJJXT5DO.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-3NR6OTHL.js";import"./chunk-NMKZHHB6.js";import"./chunk-UR6MHSHU.js";export{c as UploadPipeline,b as packPresignEntry,a as readPackForUpload};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{a as openGraph,b as staleForEvolve};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as G,b as Z,c as J,d as Q}from"./chunk-I37UOX73.js";import"./chunk-GBBVP2JW.js";import{a as N,c as q,d as ue,f as z}from"./chunk-OPDJD7WS.js";import"./chunk-3C5GMAM4.js";import{a as P,b as le,d as de}from"./chunk-GRB66C5S.js";import{a as se,b as oe}from"./chunk-UZWOHCFX.js";import{a as B,b as T,c as L,d as V,e as ce,g as I,h as K}from"./chunk-K5JGCJ2K.js";import{a as ae}from"./chunk-JFAFKHDX.js";import"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-DNNZ353O.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import{a as x}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import{c as F}from"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{existsSync as ve,statSync as we}from"fs";import{basename as j,resolve as pe}from"path";var ge=new Set(["interactive","agent","ci","override"]);function ke(e,t){if(e.mode!==void 0&&!ge.has(e.mode))return{error:`--mode must be interactive | agent | ci | override, got '${e.mode}'`};let r=e.mode,n="reconcile without a TTY needs an explicit mode \u2014 pass --mode agent|ci|override, or --plan for a preview";return r==="interactive"&&!t?{error:n}:r||(t?"interactive":e.plan?"override":{error:n})}function ye(e,t,r,n){let i=pe(t,r);if(!ve(i)||!we(i).isFile())return{error:`--from '${r}' is not a file \u2014 pass the changed source document`};let p=se(i);if(!p.ok)return{error:`--from '${r}' is not an ingestable document \u2014 allowed: ${p.allowlist.join(", ")}`};let f=x(e);if(!f.heads.has(n))return{error:`unknown source '${n}' \u2014 see \`kane-cli context list --type source\``};if(f.heads.get(n)==null)return{error:`source '${n}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let d=null;try{d=oe(i)}catch{}return d!==null&&d!==n&&f.heads.get(d)!=null?{error:`'${j(i)}' already backs live source '${d}' \u2014 did you mean --source-id ${d}? To truly move these bytes under '${n}', retire '${d}' first`}:{sourceId:n,filePath:i}}function O(e){return e==null?"(none)":e.slice(0,19)}function M(e,t,r){if(e.out(`reconcile ${t.source_id}: head ${t.head.status} \u2014 ${O(t.head.before)} \u2192 ${O(t.head.after)}`),e.out(`note: ${t.note}`),e.out(`skipped arms: ${t.skipped_arms}`),t.changed&&e.out(t.held?`extract ran in override mode; ${r?.defaultsTaken??0} default(s) auto-taken; matched-but-changed and new proposals HELD for your verdict (staged \u2014 nothing committed)`:`extract ran in override mode; ${r?.defaultsTaken??0} default(s) auto-taken; matched-but-changed proposals auto-committed as edits`),t.changed){let n=t.changeset??[];e.out(`changeset: ${n.length} item(s)`);for(let i of n)if(i.kind==="MODIFY")e.out(` [MODIFY] ${i.ref} \u2014 ${i.summary} (${O(i.old_cid)} \u2192 ${i.new_cid===null?"(staged)":O(i.new_cid)})`);else if(i.kind==="ADD")e.out(` [ADD] ${i.ref}`);else{e.out(` [ARCHIVE] ${i.ref} \u2014 ${i.why}`);let p=X(i.impact,"retiring drops");p&&e.out(` ${p}`)}}e.out(`plan: ${t.rows.length} row(s)`);for(let n of t.rows){e.out(` [${n.kind}] ${n.ref} \u2014 ${n.reason}`);let i=X(n.impact,"approving marks");i&&e.out(` ${i}`),e.out(` provenance: ${n.provenance}`),e.out(` action: ${n.action}`)}}function X(e,t){if(!e||e.stale_refs.length===0)return null;let r=e.direct_refs??[];return`impact: ${t} ${e.stale_refs.length} item(s) stale`+(r.length>0?` \u2014 ${r.length} directly touched: ${r.join(", ")}`:"")}function E(e){return e==="interactive"?"override":e}async function A(e,t,r,n,i,p,f=[],d="override",y,w,s,u,h){let l;try{l=K(e)}catch($){return P(n,$ instanceof Error?$.message:String($)),1}try{if(!r){let{runWalkSession:$}=await import("./walk-session-YS62CWX5.js");return await $({dir:e,rows:t,archive:f,held:y??null,childMode:d,runDesign:u??null,mark:p,markA:s,...w?{archiveState:w}:{},signals:k=>C(e,k.ref,k.verdict,k.reason),...h?{script:h}:{}})}return await $e(e,t,r,n,i,p,f,d,y,w)}finally{l()}}var H=e=>`${e} high-risk item(s) need a human \u2014 ci mode won't guess. Walk interactively or use --mode agent.`;function W(e,t,r){let n=t.rows;e({type:"reconcile_plan",source_id:t.source_id,plan_path:r,rows:n.map(i=>({kind:i.kind,ref:i.ref,why:i.reason})),archive:t.changeset.filter(i=>i.kind==="ARCHIVE").map(i=>({ref:i.ref,why:i.why}))})}function ne(e={}){return{type:"reconcile_summary",applied:0,skipped:0,deferred:0,plan_only:0,failed:0,paused:0,stale_created:0,...e}}var ee=ne();async function U(e,t,r,n,i,p,f,d,y){W(i,t,r);let w=t.changeset.filter(h=>h.kind==="ARCHIVE"&&y?.[h.ref]===void 0),s=t.rows,u;try{u=K(e)}catch(h){return i({type:"error",message:h instanceof Error?h.message:String(h)}),i(ne()),2}try{return await Re(e,t,r,n,i,p,f,s,w,d)}finally{u()}}async function Re(e,t,r,n,i,p,f,d,y,w){let s=0,u=0,h=0,l=0,$=0,k=0,a=0,R=new Set,v=(c,o)=>{try{w?.(c,o)}catch{}};for(let[c,o]of d.entries()){i({type:"reconcile_row_start",kind:o.kind,ref:o.ref,...o.impact?{stale:o.impact.stale_refs.length,direct:o.impact.direct_refs?.length??0}:{}});let g=(m,D,S)=>i({type:"reconcile_row_end",kind:o.kind,ref:o.ref,outcome:m,...D!==void 0?{exit_code:D}:{},...S?{detail:S}:{}});if(o.applied){u++,g("skipped");continue}if(o.kind==="REMOVE"){$++,g("plan-only");continue}if(o.held_ref&&t.held){let m=new Set;if(o.kind==="MODIFY"&&o.impact){let S=x(e);for(let re of o.impact.stale_refs){let ie=S.resolve(re);ie&&S.stale(ie.tip)==="fresh"&&m.add(re)}}let D=G(e,t.held,o.held_ref,te);if(!D.ok){h++,a===0&&(a=1),g("failed",1,D.message);continue}if(D.kind==="ADD"){let S=await n(D.ref,{yes:!0,mode:f});if(S!==0){S===3?(l++,a===0&&(a=3),g("paused",3)):(h++,a===0&&(a=1),g("failed",S));continue}}s++,D.kind!=="ADD"&&o.impact&&(k+=m.size),v(c,"approved"),C(e,o.ref,D.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve"),g("applied");continue}let _=N(x(e),o.ref);if(!_.ok){u++,g("skipped");continue}let b=_.target;if(R.has(b.ucTip)){u++,g("skipped");continue}if(o.kind==="ADD"){let m=await n(b.seamRef,{yes:!0,mode:f});if(m===3){l++,a===0&&(a=3),g("paused",3);continue}if(m!==0){h++,a===0&&(a=1),g("failed",m);continue}R.add(b.ucTip),s++,v(c,"approved"),C(e,o.ref,"gap-resolved-create"),g("applied")}else{let m=await q(e,b,{yes:!0,mode:f},p,n,"batch");m.outcome==="evolved"?(R.add(b.ucTip),s++,v(c,"approved"),C(e,o.ref,"gap-resolved-evolve"),g("applied")):m.outcome==="paused"?(l++,a===0&&(a=m.code),g("paused",m.code)):m.outcome==="failed"?(h++,a===0&&(a=1),g("failed",m.code)):(u++,g("skipped"))}}return y.length>0&&(i({type:"reconcile_paused",plan_path:r,pending:y.map(c=>({ref:c.ref,why:c.why}))}),l+=y.length,a===0&&(a=3)),i(ne({applied:s,skipped:u,plan_only:$,failed:h,paused:l,stale_created:k})),a}var te={kind:"human",id:process.env.USER??"operator"};function C(e,t,r,n){ae(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:t,verdict:r,polarity:"preference",by:te,target:t,...n!==void 0?{reason:n}:{}})}async function $e(e,t,r,n,i,p,f=[],d="override",y,w){let s=0,u=0,h=0,l=0,$=0,k=0,a=0,R=new Set;for(let[v,c]of t.entries()){if(c.applied){n.out(`skipped ${c.ref} \u2014 already applied (${c.applied.outcome} at ${c.applied.at})`),u++;continue}let o=m=>{try{p?.(v,m)}catch(D){P(n,`could not record applied state for ${c.ref}: ${D instanceof Error?D.message:String(D)}`)}};if(c.kind==="REMOVE"){n.out(`REMOVE ${c.ref} \u2014 plan-only in this release (not executed)`),l++;continue}if(c.held_ref&&y){let m=G(e,y,c.held_ref,te);if(!m.ok){P(n,`held ${c.ref}: ${m.message}`),$++,a===0&&(a=1);continue}if(n.out(`committed ${m.ref} (${c.kind==="ADD"?"minted":"updated \u2014 old\u2192new redirect"})`),m.kind==="ADD"){let D=await i(m.ref,{yes:r,mode:d});if(D===3){n.out(`design session for ${m.ref} paused \u2014 resume with "kane-cli design tests --resume"`),k++,a===0&&(a=3),o("approved");continue}if(D!==0){P(n,`design run for ${m.ref} ended with exit code ${D}`),$++,a===0&&(a=1),o("approved");continue}}s++,o("approved"),C(e,c.ref,c.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve");continue}let g=x(e),_=N(g,c.ref);if(!_.ok){n.out(`skipped ${c.ref} \u2014 ${_.message}`),u++;continue}let b=_.target;if(R.has(b.ucTip)){n.out(`skipped ${c.ref} \u2014 use-case ${b.display} already handled in this walk`),u++;continue}if(c.kind==="ADD"){let m=await i(b.seamRef,{yes:r,mode:d});if(m===3){n.out(`design session for ${b.display} paused \u2014 resume with "kane-cli design tests --resume"; this row lands when that session completes`),k++,a===0&&(a=3);continue}if(m!==0){P(n,`design run for ${b.display} ended with exit code ${m}`),$++,a===0&&(a=1);continue}R.add(b.ucTip),s++,o("approved"),C(e,c.ref,"gap-resolved-create")}else{let m=await q(e,b,{yes:!0,mode:d},n,i,"batch");m.outcome==="evolved"?(R.add(b.ucTip),s++,o("approved"),C(e,c.ref,"gap-resolved-evolve")):m.outcome==="paused"?(k++,a===0&&(a=m.code)):m.outcome==="failed"?($++,a===0&&(a=m.code)):u++}}for(let v of f)if(v.kind==="ARCHIVE"&&w?.[v.ref]===void 0){n.out(`[ARCHIVE] ${v.ref} \u2014 ${v.why}`);{let c=X(v.impact,"retiring drops");c&&n.out(` ${c}`)}n.out(" plan-only \u2014 retire belongs to the interactive session (never headless)"),l++}return n.out(`reconcile walk: ${s} applied, ${u} skipped, ${h} deferred, ${l} plan-only`+($>0?`, ${$} failed`:"")+(k>0?`, ${k} paused`:"")),a}async function me(e,t,r,n,i,p=!1){let f=i.seams??{reingest:J(e,r),reextract:Q(e,{stage:p})},d=null,y={reingest:f.reingest,reextract:async s=>d=await f.reextract(s)},w;try{n.out(`reconciling ${t}: re-reading the source and comparing against the graph\u2026`),w=await(i.buildPlan??Z)(e,t,y)}catch(s){return P(n,`reconcile failed: ${s instanceof Error?s.message:String(s)}`),null}return w.changed&&M(n,w,d),w}async function _e(e,t,r,n,i){let p=T(e,t);if("error"in p)return P(n,p.error),2;let{plan:f,path:d}=p,y=r==="override"||r==="ci";if(t===void 0&&r==="interactive"&&n.isTTY&&!await n.confirm(`apply plan ${j(d)} for ${f.source_id} (created ${f.created})?`))return n.out(`not applying ${j(d)}`),0;let w=i.runDesignForUc??z,s=i.runDesignForUc??null,u=i.sessionScript,h=(R,v)=>I(d,R,v),l=(R,v)=>V(d,R,v),$=F(e);if($===f.head_pin){if(r==="agent"){let v=i.emitEvent??(()=>{});return U(e,Y(f),d,w,v,n,E(r),h,f.archive_state)}let R=L(f);return r==="ci"&&R.length>0?(P(n,H(R.length)),2):(n.out(`applying stored plan ${j(d)} for ${f.source_id} (${f.rows.length} row(s))`),A(e,f.rows,y,n,w,h,f.changeset??[],E(r),f.held,f.archive_state,l,s,u))}if(n.out(`graph moved since this plan (${O(f.head_pin)} \u2192 ${O($)}) \u2014 recomputing`),f.held)return he(e,f,n,i,r,w,!1);let k=await me(e,f.source_id,f.backing_path,n,i);if(!k)return 1;if(!k.changed)return M(n,k,null),0;if(r==="agent"){let R=i.emitEvent??(()=>{});return U(e,k,null,w,R,n,E(r))}let a=k.changeset.filter(R=>R.kind==="ARCHIVE");return r==="ci"&&a.length>0?(P(n,H(a.length)),2):A(e,k.rows,y,n,w,void 0,k.changeset,E(r),k.held,void 0,void 0,s,u)}function Y(e,t=!1){return{source_id:e.source_id,changed:!0,head:{status:"unchanged",before:e.head_pin,after:e.head_pin},note:e.note,skipped_arms:e.skipped_arms,changeset:e.changeset??[],rows:t?e.rows.filter(r=>r.applied===void 0):e.rows,...e.held?{held:e.held}:{}}}async function Pe(e,t,r,n,i,p,f){let d=n.runDesignForUc??null,y=n.sessionScript,w=ce(e,t);if(w===null)return null;if("error"in w)return P(r,w.error),2;let{plan:s,path:u}=w,h=s.rows.filter(a=>a.applied===void 0),l=L(s),$=n.emitEvent??(()=>{});if(h.length===0&&l.length===0){r.out(`already reconciled \u2014 plan ${s.created} applied ${s.rows.length} row(s)`);let a=ue(x(e)).staleCount;return a>0&&r.out(`${a} item(s) still stale \u2014 kane-cli maintain evolve --from-stale`),i==="agent"&&(W($,Y(s),u),$({...ee})),0}let k=F(e);return k!==s.head_pin?(r.out(`plan ${s.created} superseded \u2014 graph moved (${O(s.head_pin)} \u2192 ${O(k)}); recomputing`),he(e,s,r,n,i,p,f)):(r.out(`resuming plan ${s.created} \u2014 ${h.length} pending row(s)${l.length>0?`, ${l.length} undecided archive item(s)`:""}`),f?(M(r,Y(s),null),r.out(`plan stored: ${u}`),0):i==="agent"?U(e,Y(s),u,p,$,r,E(i),(a,R)=>I(u,a,R),s.archive_state):i==="ci"&&l.length>0?(P(r,H(l.length)),2):A(e,s.rows,i==="override"||i==="ci",r,p,(a,R)=>I(u,a,R),s.changeset??[],E(i),s.held,s.archive_state,(a,R)=>V(u,a,R),d,y))}async function he(e,t,r,n,i,p,f){let d=n.runDesignForUc??null,y=n.sessionScript,w;if(t.held){let c=x(e),o=new Set(t.rows.filter(_=>_.held_ref!==void 0&&_.applied!==void 0).map(_=>_.held_ref)),g=[];for(let _ of t.held.rows){if(o.has(_.temp_ref))continue;if(!_.matched_cid){g.push(_);continue}let b=c.tipOf(_.matched_cid);if(c.superseded.get(b)===null){r.out(`dropped held "${_.title}" \u2014 its use-case was retired meanwhile`);continue}g.push(b===_.matched_cid?_:{..._,matched_cid:b,uc:{..._.uc,matches_existing:{cid:b}}})}w={source_id:t.held.source_id,rows:g}}let s=n.seams??{reingest:J(e,t.backing_path),reextract:Q(e,{stage:w!==void 0})},u;try{u=await(n.buildPlan??Z)(e,t.source_id,s,{resumeHeld:w})}catch(c){return P(r,`reconcile failed: ${c instanceof Error?c.message:String(c)}`),1}M(r,u,null);let h=F(e),l=null;if(h!=null){let c={},o=new Set(u.changeset.filter(g=>g.kind==="ARCHIVE").map(g=>g.ref));for(let[g,_]of Object.entries(t.archive_state??{}))o.has(g)&&(c[g]=_);l=B(e,{version:2,source_id:u.source_id,backing_path:t.backing_path,head_pin:h,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:u.skipped_arms,note:u.note,changeset:u.changeset,rows:u.rows,...u.held?{held:u.held}:{},...Object.keys(c).length>0?{archive_state:c}:{}}),r.out(`plan stored: ${l}`)}if(f)return 0;let $=n.emitEvent??(()=>{}),k=l?T(e,l).plan.archive_state:void 0,a=l?(c,o)=>I(l,c,o):void 0,R=l?(c,o)=>V(l,c,o):void 0;if(i==="agent")return U(e,u,l,p,$,r,E(i),a,k);let v=u.changeset.filter(c=>c.kind==="ARCHIVE"&&k?.[c.ref]===void 0);return i==="ci"&&v.length>0?(P(r,H(v.length)),2):A(e,u.rows,i==="override"||i==="ci",r,p,a,u.changeset,E(i),u.held,k,R,d,y)}async function fe(e,t,r={},n=process.cwd()){let i=e.apply!==void 0&&e.apply!==!1,p=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&i)return P(t,"pass --plan OR --apply, not both"),2;if((e.from!==void 0||!i)&&(!e.from||!e.sourceId))return P(t,"reconcile needs --from <file> AND --source-id <id> \u2014 see `kane-cli context list --type source` for ids"),2;if(e.from&&p!==void 0)return P(t,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let d=le(n,t);if(!d)return 2;if(e.mode!==void 0&&!ge.has(e.mode))return P(t,`--mode must be interactive | agent | ci | override, got '${e.mode}'`),2;let y=e.mode==="agent"||e.mode==="ci"||e.mode==="override";if(i&&!y&&!t.isTTY)return P(t,"refusing to apply without a TTY to confirm \u2014 pass --mode override|ci"),2;let w=!e.plan,s="override";if(e.from){let o=ke(e,t.isTTY);if(typeof o=="object")return P(t,o.error),2;s=o}let u=s==="override"||s==="ci";if(i&&!e.from){let o=e.mode??"interactive";return _e(d,p===void 0?void 0:pe(n,p),o,t,r)}let h=ye(d,n,e.from,e.sourceId);if("error"in h)return P(t,h.error),2;let l=await me(d,h.sourceId,h.filePath,t,r,!!e.plan||s==="interactive");if(!l)return 1;let $=r.runDesignForUc??z,k=r.runDesignForUc??null,a=r.sessionScript;if(!l.changed){let o=await Pe(d,h.sourceId,t,r,s,$,!!e.plan);if(o!==null)return o;if(M(t,l,null),s==="agent"){let g=r.emitEvent??(()=>{});W(g,l,null),g({...ee})}return 0}let R=F(d),v=null;if(R!=null?v=B(d,{version:2,source_id:l.source_id,backing_path:h.filePath,head_pin:R,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:l.skipped_arms,note:l.note,changeset:l.changeset,rows:l.rows,...l.held?{held:l.held}:{}}):P(t,"no chain head after extract \u2014 plan not stored"),s==="agent"){let o=r.emitEvent??(()=>{});if(!w)return W(o,l,v),o({...ee}),0;let g=v?(_,b)=>I(v,_,b):void 0;return U(d,l,v,$,o,t,E(s),g)}if(!w)return v&&t.out(`plan stored: ${v}`),0;let c=l.changeset.filter(o=>o.kind==="ARCHIVE");if(s==="ci"&&c.length>0)return v&&t.out(`plan stored: ${v}`),P(t,H(c.length)),2;if(v){t.out(`plan stored: ${v}`);let o=v;return A(d,be(d,o)??l.rows,u,t,$,(g,_)=>I(o,g,_),l.changeset,E(s),l.held,void 0,void 0,k,a)}return A(d,l.rows,u,t,$,void 0,l.changeset,E(s),l.held,void 0,void 0,k,a)}function be(e,t){let r=T(e,t);return"error"in r?null:r.plan.rows}async function Te(e,t={},r,n=process.cwd()){if(e.mode==="agent"){let{makeHeadlessIO:i}=await import("./headless-io-PWW6YKH2.js"),p=r?i("ndjson","reconcile",r):i("ndjson","reconcile"),f={out:p.out,err:y=>p.event({type:"error",message:y}),isTTY:!1,confirm:async()=>!1,ask:async()=>""},d=2;try{d=await fe(e,f,{...t,emitEvent:y=>p.event(y)},n)}catch(y){p.event({type:"error",message:y instanceof Error?y.message:String(y)})}return p.done(d)}return fe(e,de(),t,n)}export{E as childModeFor,Te as reconcileCommand,ke as resolveReconcileMode,fe as runReconcileCommand,ye as validateReconcileInputs};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as j}from"./chunk-GRB66C5S.js";import{g as b}from"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as _}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import{b as V}from"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{readFileSync as E}from"fs";var O=new Set(["derived","skipped","archived","drift"]),q={kind:"human",id:process.env.USER??"operator"};function R(d,r){return d.nameOf.get(r)??r.slice(0,19)}function N(d,r){let n=d.getNode(r)?.content??{},a=d.derivesInto(r)[0]?.props.anchor;return{cid:r,uc:{temp_ref:r,title:String(n.title??n.text??""),summary:n.summary!==void 0?String(n.summary):void 0,risk:String(n.risk??"med"),cite:{anchor:typeof a=="string"?a:"\u2014",quote:""},depends_on_hint:[],matches_existing:null}}}function T(d,r){let n=new Set,{records:a}=V(d);for(let s of a){if(s.proposal_id==null)continue;let u=new Set(s.review.map(e=>e.id));for(let e of s.nodes)u.has(e.cid)||n.add(e.cid)}for(let s of[...n])(r.trust.get(s)!=="derived"||r.superseded.has(s))&&n.delete(s);return n}var x=new Set(["approved","edited","rejected","skipped","supersede"]);function C(d){let r;try{r=JSON.parse(d)}catch(s){return{errors:[`not valid JSON: ${s instanceof Error?s.message:String(s)}`]}}if(!Array.isArray(r))return{errors:['expected a top-level array of {"ref", "resolution", ...} entries']};let n=[],a=[];return r.forEach((s,u)=>{if(s==null||typeof s!="object"||Array.isArray(s)){n.push(`[${u}]: not an object`);return}let e=s;(typeof e.ref!="string"||!e.ref.trim())&&n.push(`[${u}]: "ref" (slug or cid) is required`),(typeof e.resolution!="string"||!x.has(e.resolution))&&n.push(`[${u}]: "resolution" must be one of approved | edited | rejected | skipped | supersede`),e.resolution==="supersede"&&(typeof e.supersede_target!="string"||!e.supersede_target.trim())&&n.push(`[${u}]: resolution "supersede" requires "supersede_target" (slug or cid)`),e.edit!==void 0&&(e.edit==null||typeof e.edit!="object"||Array.isArray(e.edit))&&n.push(`[${u}]: "edit" must be an object ({title?, summary?, risk?})`),n.length===0&&a.push(e)}),n.length>0?{errors:n}:{entries:a}}async function I(d,r,n,a=process.cwd()){let s=d.queue??"derived";if(!O.has(s))return r.out(`unknown queue ${s} \u2014 one of: derived | skipped | archived | drift`),2;let u=j(a,r);if(!u)return 2;let e=_(u);if(d.verdicts){let i=t=>(r.err??r.out)(t),o;try{o=E(d.verdicts,"utf8")}catch{return i(`error: cannot read verdicts file ${d.verdicts}`),2}let l=C(o);if("errors"in l){for(let t of l.errors)i(`error: --verdicts ${d.verdicts}: ${t}`);return 2}let c=new Set([...e.trust.entries()].filter(([t,p])=>(p==="derived"||p==="archived")&&!e.superseded.has(t)).map(([t])=>t)),f=new Map,y=[];for(let t of l.entries){let p=e.resolve(t.ref),m=p&&!e.superseded.has(p.tip)?p.tip:null;if(!m){y.push(`${t.ref}: names nothing in the graph`);continue}if(!c.has(m)){y.push(`${t.ref}: not in a review queue (trust: ${e.trust.get(m)??"?"})`);continue}if(f.has(m)){y.push(`${t.ref}: duplicate \u2014 an earlier entry already resolves to this node (${R(e,m)})`);continue}f.set(m,{resolution:t.resolution,...t.reason?{reason:t.reason}:{},...t.edit?{edit:t.edit}:{},...t.supersede_target?{supersedeTarget:t.supersede_target}:{}})}if(y.length>0){for(let t of y)i(`error: --verdicts: ${t}`);return i("error: nothing committed (the verdicts file is atomic \u2014 fix every offender and re-run)"),2}let k=b({contextDir:u,graph:e,verdicts:f,by:q});if(k.errors){if(k.errors[0]?.code==="NO_VERDICTS")return i("nothing changed \u2014 every item was skipped"),0;for(let t of k.errors)i(`${t.code}: ${t.detail}`);return 1}let S=new Map;for(let t of f.values())S.set(t.resolution,(S.get(t.resolution)??0)+1);if(d.json)for(let[t,p]of f.entries())r.out(JSON.stringify({ref:R(e,t),cid:t,resolution:p.resolution}));else{let t=[...S.entries()].map(([p,m])=>`${m} ${p}`).join(", ");r.out(`review: committed record ${k.record.seq} \u2014 ${t}`)}return 0}if(s==="drift"){let i=e.staleList().filter(({state:o})=>o!=="superseded").map(({cid:o,state:l})=>({ref:R(e,o),cid:o,state:l,title:String(e.getNode(o)?.content.title??e.getNode(o)?.content.source_id??""),pinned_sources:[...new Set(e.derivesInto(o).map(c=>String(c.props.source_id)))]}));if(d.json){for(let o of i)r.out(JSON.stringify(o));return 0}if(i.length===0)return r.out("drift queue is empty \u2014 every node's evidence matches the current source snapshots"),0;r.out(`${i.length} node(s) with drifting evidence (re-extract the source to re-bless):`);for(let o of i)r.out(` [${o.state}] ${o.ref} \xB7 ${o.title} \xB7 sources: ${o.pinned_sources.join(", ")||"\u2014"}`);return 0}if(!r.isTTY)return r.out("review: verdict queues need a TTY (drift listing works anywhere, or pass --verdicts <file.json>)"),2;let g,h;if(s==="archived")g=[...e.trust.entries()].filter(([i,o])=>o==="archived"&&!e.superseded.has(i)).map(([i])=>N(e,i)),h="skipped";else{let i=T(u,e),o=[...e.trust.entries()].filter(([c,f])=>f==="derived"&&!e.superseded.has(c)).map(([c])=>c),l=s==="skipped"?o.filter(c=>i.has(c)):o;l.sort((c,f)=>Number(i.has(f))-Number(i.has(c))),g=l.map(c=>N(e,c)),h="skipped"}if(g.length===0)return r.out(`${s} queue is empty`),0;r.out(`${g.length} node(s) in the ${s} queue \u2014 approve promotes, reject ${s==="archived"?"re-archives":"archives"}, edit mints a new version, skip leaves it for later`);let v=await n(g,e,h),w=b({contextDir:u,graph:e,verdicts:v,by:q});if(w.errors){if(w.errors[0]?.code==="NO_VERDICTS")return r.out("nothing changed \u2014 every item was skipped"),0;for(let i of w.errors)r.out(`${i.code}: ${i.detail}`);return 1}let $=w.record;return r.out(`committed record ${$.seq}: ${$.review.length} review fact(s), ${$.supersessions.length} supersession(s), ${$.nodes.length} new version(s)`),0}async function P(d,r,n){let[{render:a},s,{ReviewChecklist:u}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),e=s.default??s;return new Promise(g=>{let h=a(e.createElement(u,{items:d.map(v=>({uc:v.uc})),defaultResolution:n,onSubmit:v=>{h.unmount(),g(v)}}))})}async function D(d){let{bothTTY:r}=await import("./headless-io-PWW6YKH2.js");return I(d,{out:n=>process.stdout.write(n+`
3
- `),err:n=>process.stderr.write(n+`
4
- `),confirm:async()=>!1,isTTY:r()},P)}export{C as parseVerdictsFile,D as reviewCommand,I as runReviewCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-IYTHPCQ2.js";import"./chunk-KHU7C6EE.js";import"./chunk-3C5GMAM4.js";import"./chunk-NMZATEKQ.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-OSALXGD4.js";import"./chunk-DNNZ353O.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-ZPDM6FO7.js";import"./chunk-NVGBE2DR.js";import"./chunk-L5LI2JF4.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-NMKZHHB6.js";import"./chunk-UR6MHSHU.js";export{a as runDesign};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b,b as c,c as d,d as e,e as f}from"./chunk-GAD6IBZ6.js";import"./chunk-K5JGCJ2K.js";import{f as a}from"./chunk-NMZATEKQ.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-OSALXGD4.js";import"./chunk-DNNZ353O.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-NVGBE2DR.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-NMKZHHB6.js";import"./chunk-UR6MHSHU.js";export{e as dedupPreFlags,c as displaySourceName,a as resolveAnswers,f as runExtract,b as sessionSourceRef,d as sourceBanner};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as a}from"./chunk-3GOZ7R4G.js";import"./chunk-3MSXQU2C.js";import"./chunk-LVWB6TB2.js";import"./chunk-AASBJJCU.js";import"./chunk-DCWCANNS.js";import"./chunk-3CY3DZDH.js";import"./chunk-GLS46X7N.js";import"./chunk-77PBBYRZ.js";import"./chunk-TSWGQKUK.js";import"./chunk-YB54MHKU.js";import"./chunk-2YQ6TW77.js";import"./chunk-UQVKNUYO.js";import"./chunk-RHNKYNNZ.js";import"./chunk-RKWJG3WW.js";import"./chunk-Y6HPW2OQ.js";import"./chunk-R7NNIQMH.js";import"./chunk-SK2GVMTJ.js";import"./chunk-5J3HQZNU.js";import"./chunk-6EC54ZHT.js";import"./chunk-NEHF4C6X.js";import"./chunk-QYTMD6NM.js";import"./chunk-MTG2LRGV.js";import"./chunk-WFQUDSKY.js";import"./chunk-5Y2G4NC7.js";import"./chunk-QG6LJCZG.js";import"./chunk-A2AZQ4PQ.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-QVJ7C4GW.js";import"./chunk-7ZMYAXES.js";import"./chunk-DL5CXC64.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-EDM6YACR.js";import"./chunk-RFHMDQXZ.js";import"./chunk-YZBLBPOE.js";import"./chunk-CJJXT5DO.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-WJG4ZPUH.js";import"./chunk-FYSWQ4K7.js";import"./chunk-X47VFBIV.js";import"./chunk-YCCUBQY4.js";import"./chunk-XUHVQ5VL.js";import"./chunk-M5JQXOCE.js";import"./chunk-TTJ4XMWP.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-3NR6OTHL.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import"./chunk-Z34XRBKQ.js";import"./chunk-TADJIOHV.js";import"./chunk-KVAALPTA.js";import{a as o}from"./chunk-DFS4RMVP.js";import"./chunk-IX34JIXK.js";import"./chunk-RGQIBS32.js";import"./chunk-NMKZHHB6.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-QVJ7C4GW.js";import"./chunk-DL5CXC64.js";import"./chunk-RZ4F3BHX.js";import"./chunk-3NR6OTHL.js";import"./chunk-NMKZHHB6.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Y}from"./chunk-I37UOX73.js";import"./chunk-GBBVP2JW.js";import{a as j,c as F}from"./chunk-OPDJD7WS.js";import"./chunk-3C5GMAM4.js";import"./chunk-GRB66C5S.js";import{a as B}from"./chunk-64LC36AF.js";import"./chunk-JFAFKHDX.js";import"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import"./chunk-DNNZ353O.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import{a as I}from"./chunk-QHFUDBQH.js";import{b as U}from"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import{e as N}from"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import{a as V}from"./chunk-YCCUBQY4.js";import{y as m}from"./chunk-NMKZHHB6.js";import{a as P}from"./chunk-HCBYKLMW.js";import{a as A,b as u,k as M}from"./chunk-C44QQJR4.js";import{a as Q}from"./chunk-6YGTRKDT.js";import{e as O}from"./chunk-UR6MHSHU.js";var T=O(Q(),1);function K(e,p,k){let{ref:D,reason:d,by:y}=k;if(!d||d.trim().length===0)return{record:null,errors:[{code:"REASON_REQUIRED",detail:"archiving a node needs a reason \u2014 it becomes the tombstone's provenance"}]};let x=p.resolve(D);if(!x)return{record:null,errors:[{code:"UNKNOWN_REF",detail:`no node '${D}' in the graph`}]};let r=p.tipOf(x.cid);if(p.superseded.has(r))return{record:null,errors:[{code:"ALREADY_ARCHIVED",detail:`${D} is already superseded at its tip (${r.slice(0,19)}\u2026)`}]};let t=N(e,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:r,new:null,reason:d,by:y}],source_head_moves:{}},{expectPrev:p.latestHash});return U(e),{record:t.record,errors:null}}function L(e){let p=e.by??{kind:"human",id:process.env.USER??"operator"},k=e.mode==="interactive"?"override":e.mode,D={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},d={applied:0,committed:0,retired:0,skipped:0,deferred:0,failed:0},y=new Map;for(let r of e.planRows)if(r.held_ref&&e.held){let t=e.held.rows.find($=>$.temp_ref===r.held_ref);if(!t)continue;let l={kind:t.kind,ref:t.temp_ref,title:t.title,why:t.why,origin:"content-change",...r.impact?{impact:r.impact}:{}};y.set(l.ref,{card:l,source:"held",heldRef:t.temp_ref})}else if(r.kind==="MODIFY"){let t={kind:"MODIFY",ref:r.ref,title:r.ref,why:`${r.reason}: ${r.provenance}`,origin:r.origin??"structural-stale",...r.impact?{impact:r.impact}:{}};y.set(t.ref,{card:t,source:"row",row:r})}else if(r.kind==="ADD"){let t={kind:"ADD",ref:r.ref,title:r.ref,why:r.reason,origin:r.origin??"content-change"};y.set(t.ref,{card:t,source:"row",row:r})}for(let r of e.archive){if(r.kind!=="ARCHIVE")continue;let t={kind:"ARCHIVE",ref:r.ref,title:r.ref,why:r.why,provenance:r.why,...r.impact?{impact:r.impact}:{}};y.set(t.ref,{card:t,source:"archive",row:r})}let x=r=>(d.failed++,{outcome:"failed",detail:r});return{cards:()=>[...y.values()].map(r=>r.card),async submit(r,t){let l=y.get(r);if(!l)return x(`no card ${r}`);if(t.v==="skip")return d.skipped++,e.signals({ref:r,verdict:"gap-dismissed"}),{outcome:"skipped"};if(t.v==="defer")return d.deferred++,{outcome:"deferred"};if(t.v==="archive"){if(l.source!=="archive")return x(`${r} is not an ARCHIVE card`);let c=I(e.contextDir),C=c.resolve(l.row.ref);if(C&&c.superseded.has(c.tipOf(C.cid)))return d.skipped++,{outcome:"skipped",detail:"already retired \u2014 nothing to do"};let n=K(e.contextDir,I(e.contextDir),{ref:l.row.ref,reason:`reconcile retire: ${l.row.why}`,by:p});return n.errors?x(n.errors.map(s=>`${s.code}: ${s.detail}`).join("; ")):(d.retired++,e.signals({ref:r,verdict:"gap-resolved-archive",reason:l.row.why}),{outcome:"retired"})}if(l.source==="archive")return x(`${r} takes archive/skip/defer, not approve`);if(l.source==="held"){let c=Y(e.contextDir,e.held,l.heldRef,p,t.edits);if(!c.ok)return x(c.message);if(c.kind==="ADD"){let C=await e.runDesign(c.ref,{yes:!0,mode:k,...t.steering?{because:t.steering}:{}});return C!==0?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but its design run exited ${C} \u2014 finish with kane-cli design tests --use-case ${c.ref}`}):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create",...t.steering?{reason:t.steering}:{}}),{outcome:"applied",detail:c.ref})}if(t.steering){let C=I(e.contextDir),n=j(C,c.ref);if(!n.ok)return d.committed++,{outcome:"committed",detail:`committed ${c.ref}, but steering could not resolve it (${n.message}) \u2014 steer via kane-cli maintain evolve ${c.ref}`};let s=await F(e.contextDir,n.target,{yes:!0,mode:k,because:t.steering},D,e.runDesign,"batch");if(s.outcome==="no-design"){let R=await e.runDesign(n.target.seamRef,{yes:!0,mode:k,because:t.steering});return R!==0?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but its steered design run exited ${R} \u2014 finish with kane-cli design tests --use-case ${n.target.seamRef}`}):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create",reason:t.steering}),{outcome:"applied",detail:c.ref})}return s.outcome==="failed"||s.outcome==="paused"?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but the steering evolve ${s.outcome} (exit ${s.code}) \u2014 finish with kane-cli maintain evolve ${c.ref}`}):s.outcome==="declined"?(d.committed++,{outcome:"committed",detail:`committed ${c.ref} \u2014 the steering evolve was declined; re-run kane-cli maintain evolve ${c.ref}`}):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-evolve",reason:t.steering}),{outcome:"applied",detail:c.ref})}return d.committed++,e.signals({ref:r,verdict:"gap-resolved-evolve"}),{outcome:"committed",detail:c.ref}}let $=I(e.contextDir),b=j($,l.row.ref);if(!b.ok)return x(b.message);if(l.card.kind==="ADD"){let c=await e.runDesign(b.target.seamRef,{yes:!0,mode:k});return c!==0?x(`design run exited ${c}`):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create"}),{outcome:"applied"})}let h=await F(e.contextDir,b.target,{yes:!0,mode:k,...t.steering?{because:t.steering}:{}},D,e.runDesign,"batch");return h.outcome==="evolved"?(d.applied++,e.signals({ref:r,verdict:"gap-resolved-evolve",...t.steering?{reason:t.steering}:{}}),{outcome:"applied"}):h.outcome==="failed"||h.outcome==="paused"?x(`evolve ${h.outcome} (exit ${h.code})`):(d.skipped++,{outcome:"skipped",detail:h.outcome})},summary:()=>({...d})}}var v=O(P(),1);function S(e){return e.kind==="ARCHIVE"?[{v:"archive",label:"retire",detail:"tombstone it \u2014 the graph forgets forward"},{v:"skip",label:"skip",detail:"keep it \u2014 decided, never re-offered"},{v:"defer",label:"defer",detail:"not now \u2014 the plan re-offers it"}]:[{v:"approve",label:"approve",detail:e.kind==="ADD"?"commit + design it":"commit the updated version (old\u2192new redirect)"},{v:"skip",label:e.origin==="content-change"?"reject":"skip",detail:e.origin==="content-change"?"drop the staged proposal \u2014 nothing committed":"leave it as is"},{v:"defer",label:"defer",detail:"not now \u2014 the plan keeps it staged"}]}function E(e){return e.kind==="ARCHIVE"?null:S(e).length}var X={ADD:{color:m.green??"green"},MODIFY:{color:"yellow"},ARCHIVE:{color:m.red}},z=60;function G({card:e,position:p,sel:k=0,focused:D=!1,freeText:d=null}){let{stdout:y}=M(),r=(y?.columns??80)<z,t=S(e),l=E(e),$=X[e.kind],b=n=>D&&k===n?(0,v.jsx)(u,{color:m.generateAccent,children:"\u25B8"}):" ",h=e.impact,c=h&&h.stale_refs.length>0?`${e.kind==="ARCHIVE"?"retiring drops":"approving marks"} ${h.stale_refs.length} item(s) stale`+((h.direct_refs?.length??0)>0?` \u2014 ${h.direct_refs.length} directly touched: ${h.direct_refs.join(", ")}`:""):null,C=(0,v.jsxs)(A,{flexDirection:"column",children:[(0,v.jsx)(u,{bold:!0,color:m.generateAccent,children:`? reconcile \u2014 item ${p.n} of ${p.of}`}),(0,v.jsxs)(u,{bold:!0,children:[" ",(0,v.jsx)(u,{color:$.color,children:`[${e.kind}]`}),` ${e.title}`]}),(0,v.jsx)(u,{color:m.muted,children:` ${e.why}`}),c?(0,v.jsx)(u,{color:m.muted,children:` impact: ${c}`}):null,e.kind==="ARCHIVE"&&e.provenance&&e.provenance!==e.why?(0,v.jsx)(u,{color:m.muted,children:` ${e.provenance}`}):null,t.map((n,s)=>(0,v.jsxs)(u,{children:[" ",b(s),` ${s+1} ${n.label}`,(0,v.jsx)(u,{color:m.dim,children:` \u2014 ${n.detail}`})]},`o-${s}`)),l!==null?d?(0,v.jsxs)(A,{children:[(0,v.jsxs)(u,{children:[" ",(0,v.jsx)(u,{color:m.generateAccent,children:"\u25B8"})," ",(0,v.jsx)(u,{color:m.dim,children:"\u270E "})]}),(0,v.jsx)(V,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:"steer the redesign (approves, then evolves with your words)"})]}):(0,v.jsxs)(u,{children:[" ",b(l)," ",(0,v.jsx)(u,{color:m.dim,children:"\u270E steer the redesign"})]}):null]});return r?C:(0,v.jsx)(A,{flexDirection:"column",borderStyle:"round",borderColor:m.generateAccent,paddingX:1,children:C})}var g=O(P(),1);function q(e){return e.landed?"committed":e.outcome}var J={applied:"\u2713",committed:"\u2713",retired:"\u2713",skipped:"\xB7",deferred:"\u2013",failed:"\u2717"};function Z({controller:e,cards:p,note:k,markOutcome:D,routeChat:d,onFinish:y,onCtrlC:x,pauseRef:r}){let[t,l]=(0,T.useState)(p.length>0?{at:"card",idx:0,sel:0,editor:null}:{at:"chat",text:"",busy:null}),$=(0,T.useRef)(0),b=(0,T.useRef)(t);b.current=t;let h=(0,T.useRef)(!1),c=()=>{k((0,g.jsx)(u,{color:m.dim,children:"walk paused \u2014 every verdict so far is committed; re-run the same command to continue"})),y(3)},C=()=>{if(h.current)return;h.current=!0;let i=b.current;if(i.at==="busy"||i.at==="chat"&&i.busy!==null){k((0,g.jsx)(u,{color:m.dim,children:"finishing the current item, then pausing\u2026"}));return}if(i.at==="chat"){y($.current);return}c()};r&&(r.current=C);let n=t.at==="card"||t.at==="busy"?p[t.idx]:null,s=i=>{let o=i+1;if(o<p.length)l({at:"card",idx:o,sel:0,editor:null});else{let a=e.summary();k((0,g.jsx)(u,{color:m.dim,children:`reconcile walk: ${a.applied} applied, ${a.committed} committed, ${a.retired} retired, ${a.skipped} skipped, ${a.deferred} deferred`+(a.failed>0?`, ${a.failed} failed`:"")})),k((0,g.jsx)(u,{color:m.dim,children:"anything else? steer a redesign \u2014 `<uc-ref> <what to change>` \u2014 or press Enter to finish"})),l({at:"chat",text:"",busy:null})}},R=(0,T.useRef)(!1),w=(i,o)=>{if(R.current)return;R.current=!0;let a=p[i];l({at:"busy",idx:i,label:o.v==="archive"?"retiring\u2026":o.v==="approve"&&o.steering?"committing, then steering the redesign\u2026":"applying\u2026"}),e.submit(a.ref,o).catch(f=>({outcome:"failed",detail:f instanceof Error?f.message:String(f)})).then(f=>{let _=J[f.outcome]??"\xB7";if(k((0,g.jsxs)(u,{children:[(0,g.jsx)(u,{color:f.outcome==="failed"?m.red:m.green,children:_}),` ${f.outcome} [${a.kind}] ${a.title}`,f.detail?(0,g.jsx)(u,{color:m.dim,children:` \u2014 ${f.detail}`}):null,f.outcome!=="failed"&&f.outcome!=="skipped"&&f.outcome!=="deferred"&&a.impact&&a.impact.stale_refs.length>0?(0,g.jsx)(u,{color:m.dim,children:` \xB7 ${a.impact.stale_refs.length} item(s) now stale`}):null]})),f.outcome==="failed"&&($.current=$.current===0?1:$.current),D(a.ref,q(f)),R.current=!1,h.current){c();return}s(i)})},W=(0,T.useMemo)(()=>({isFocused:()=>b.current.at==="card"&&b.current.editor===null,onMove:i=>{l(o=>{if(o.at!=="card")return o;let a=p[o.idx],f=E(a)??S(a).length-1;return{...o,sel:Math.max(0,Math.min(f,o.sel+i))}})},onSelect:()=>{let i=b.current;if(i.at!=="card")return;let o=p[i.idx],a=E(o);if(a!==null&&i.sel===a){l({...i,editor:""});return}let f=S(o)[i.sel];f&&w(i.idx,{v:f.v})},onDigit:i=>{let o=b.current;if(o.at!=="card")return;let a=S(p[o.idx])[i-1];a&&w(o.idx,{v:a.v})},onType:i=>{l(o=>o.at!=="card"||E(p[o.idx])===null?o:{...o,editor:(o.editor??"")+i})},onBack:()=>{}}),[p]);return(0,T.useEffect)(()=>{t.at==="done"&&y($.current)},[t.at]),(0,g.jsxs)(A,{flexDirection:"column",children:[(0,g.jsx)(B,{onToggleThinking:()=>{},onCtrlC:()=>{x(),C()},panel:W}),t.at==="card"&&n?(0,g.jsx)(G,{card:n,position:{n:t.idx+1,of:p.length},sel:t.sel,focused:t.editor===null,freeText:t.editor!==null?{value:t.editor,onChange:i=>l(o=>o.at==="card"?{...o,editor:i}:o),onSubmit:i=>{let o=b.current;o.at==="card"&&(i.trim()?w(o.idx,{v:"approve",steering:i.trim()}):l({...o,editor:null}))},onCancel:()=>l(i=>i.at==="card"?{...i,editor:null}:i)}:null}):null,t.at==="busy"?(0,g.jsx)(u,{color:m.dim,children:`\u2026 ${t.label}`}):null,t.at==="chat"?t.busy?(0,g.jsx)(u,{color:m.dim,children:`\u2026 ${t.busy}`}):(0,g.jsxs)(A,{children:[(0,g.jsx)(u,{color:m.generateAccent,children:"\u203A "}),(0,g.jsx)(V,{value:t.text,onChange:i=>l(o=>o.at==="chat"?{...o,text:i}:o),onSubmit:i=>{let o=i.trim();if(!o){l({at:"done"});return}l({at:"chat",text:"",busy:"redesigning\u2026"}),d(o).catch(a=>`\u2717 redesign failed: ${a instanceof Error?a.message:String(a)}`).then(a=>{if(k((0,g.jsx)(u,{children:a})),h.current){c();return}l({at:"chat",text:"",busy:null})})},onCancel:()=>{},placeholder:"uc-\u2026 what to change (Enter on empty = finish)"})]}):null]})}async function xe(e){let p={current:null},k=n=>{p.current?.append(n)},D=null,d=async(n,s)=>{let[{runDesign:R},{resolveAgentAuthEnv:w},{runAgent:W},{preflightTurn:i}]=await Promise.all([import("./run-2RFR2ASQ.js"),import("./spawner-VD6YFZ43.js"),import("./bridge-WVFTWHKP.js"),import("./turn-preflight-JGYT7LXP.js")]);D??=await w();let o=D;return R({useCase:n,force:!0,mode:s.mode??"override",...s.because?{because:s.because}:{},...s.changeDelta!==void 0?{changeDelta:s.changeDelta}:{},...s.priorDesign!==void 0?{priorDesign:s.priorDesign}:{}},{contextDir:e.dir,agent:W,preflightTurn:()=>i(o),ask:async()=>[],out:a=>k((0,g.jsx)(u,{color:m.dim,children:` ${a}`})),progress:()=>{},isTTY:!1,auth:o})},y=e.runDesign??d,x=L({contextDir:e.dir,held:e.held,archive:e.archive,planRows:e.rows,runDesign:y,mode:"interactive",signals:e.signals}),r=new Set(e.rows.filter(n=>n.applied!==void 0).map(n=>n.held_ref??n.ref)),t=x.cards().filter(n=>!r.has(n.ref)&&!(n.kind==="ARCHIVE"&&e.archiveState?.[n.ref]!==void 0)),l=n=>e.rows.findIndex(s=>(s.held_ref??s.ref)===n),$=(n,s)=>{try{if(t.find(W=>W.ref===n)?.kind==="ARCHIVE"){s==="retired"?e.markA?.(n,"retired"):s==="skipped"&&e.markA?.(n,"skipped");return}let w=l(n);if(w<0)return;s==="applied"||s==="committed"?e.mark?.(w,"approved"):s==="skipped"&&e.mark?.(w,"skipped")}catch{}},b=async n=>{let[{openGraph:s},{resolveParentUc:R,evolveOneUc:w}]=await Promise.all([import("./readmodel-KTNI6QDC.js"),import("./evolve-cmd-V7H4PLCX.js")]),[W,...i]=n.split(/\s+/),o=s(e.dir),a=R(o,W);if(!a.ok)return`couldn't resolve '${W}' \u2014 start with a use-case id (uc-\u2026): ${a.message}`;if(i.length===0)return`say what to change: \`${W} <your words>\` \u2014 the words become the redesign's change delta`;let f=i.join(" "),_={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},H=await w(e.dir,a.target,{yes:!0,mode:"override",because:f},_,y,"batch");return H.outcome==="evolved"?(e.signals({ref:a.target.display,verdict:"gap-resolved-evolve",reason:f}),`\u2713 redesigned ${a.target.display} \u2014 "${f}"`):`\u2717 evolve ${H.outcome} for ${a.target.display} (exit ${H.code})`};if(e.script){let n=0;for(let s of t){let R=await e.script(s),w=await x.submit(s.ref,R);w.outcome==="failed"&&n===0&&(n=1),$(s.ref,q(w))}return n}let[{render:h},{ScrollbackProvider:c},{ScrollbackTap:C}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./scrollback-JLPJR25X.js"),import("./ScrollbackTap-Q3IOKNMS.js")]);return new Promise(n=>{let s=!1,R=f=>{s||(s=!0,(async()=>{process.removeListener("SIGINT",o),await p.current?.flush();try{a.unmount()}catch{}n(f)})())},w=0,W={current:null},i=()=>{if(w+=1,w>=2){process.removeListener("SIGINT",o);try{a.unmount()}catch{}n(130)}},o=()=>{i(),W.current?.()};process.on("SIGINT",o);let a=h((0,g.jsxs)(c,{children:[(0,g.jsx)(C,{into:p}),(0,g.jsx)(Z,{controller:x,cards:t,note:k,markOutcome:$,routeChat:b,onFinish:R,onCtrlC:i,pauseRef:W})]}),{exitOnCtrlC:!1})})}export{Z as WalkSessionSurface,q as outcomeToMark,xe as runWalkSession};