@testmuai/kane-cli 0.6.11 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/dist/ChatSurface-D66CACLX.js +8 -0
  2. package/dist/{ChromeProfilePicker-54CAJDUF.js → ChromeProfilePicker-4CDSPBWL.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-TCAH4AHL.js → CliFeedbackPrompt-TLRVBA4E.js} +1 -1
  4. package/dist/{CliUploadProgress-UURZ63VQ.js → CliUploadProgress-WGGFLUSF.js} +1 -1
  5. package/dist/{ConfigView-5QGB7MUS.js → ConfigView-DBANTBXC.js} +1 -1
  6. package/dist/EvidenceViewOffer-DNCQ3A6R.js +2 -0
  7. package/dist/{FolderPicker-Y5MAYFIJ.js → FolderPicker-W7RCIFEL.js} +1 -1
  8. package/dist/{HelpView-S3GJGSCE.js → HelpView-FBCX32U7.js} +1 -1
  9. package/dist/{InfoBox-LYTNNMVJ.js → InfoBox-KK2ICVS4.js} +1 -1
  10. package/dist/{LinksBox-5MSEKNSV.js → LinksBox-KKRANMR3.js} +1 -1
  11. package/dist/{ProfilesView-LTHE5UIO.js → ProfilesView-DGPXSAQN.js} +1 -1
  12. package/dist/{ProjectPicker-XMXIGHSE.js → ProjectPicker-ESQSL4TT.js} +1 -1
  13. package/dist/{SaveSessionPrompt-VQDEA4WA.js → SaveSessionPrompt-AQGP5W6E.js} +1 -1
  14. package/dist/SingleShotApp-SMCAIKCE.js +2 -0
  15. package/dist/{SummaryBox-WWF3G263.js → SummaryBox-BFZJW2KK.js} +1 -1
  16. package/dist/TestMdRunView-FMKZJ3A3.js +2 -0
  17. package/dist/{WhoamiView-PDURYP7E.js → WhoamiView-JABY3I5Q.js} +1 -1
  18. package/dist/{auth-I4RB4KO3.js → auth-76LVI6B5.js} +1 -1
  19. package/dist/bind-AACBTSAA.js +12 -0
  20. package/dist/bootstrap-CNOZ5VRB.js +2 -0
  21. package/dist/bridge-T4HL4TG7.js +2 -0
  22. package/dist/{changelog-OKYH4F7I.js → changelog-PSWPPOAF.js} +1 -1
  23. package/dist/chat-committer-4BQBOKI4.js +2 -0
  24. package/dist/chat-controller-NNTMKEPG.js +2 -0
  25. package/dist/{chunk-NUQ423YE.js → chunk-2KBD6JZX.js} +1 -1
  26. package/dist/chunk-2SREGETM.js +4 -0
  27. package/dist/chunk-2XGDWUJ5.js +2 -0
  28. package/dist/{chunk-MJBCBQC2.js → chunk-322JEJEH.js} +1 -1
  29. package/dist/{chunk-SURF5Z7Y.js → chunk-323MLBYA.js} +1 -1
  30. package/dist/{chunk-HOQEMPMQ.js → chunk-33QXD75Y.js} +2 -2
  31. package/dist/{chunk-K7USHLVZ.js → chunk-36OC3TFE.js} +1 -1
  32. package/dist/{chunk-ZNHXIRCM.js → chunk-3FN5VJMV.js} +2 -2
  33. package/dist/chunk-3LWTUMDG.js +2 -0
  34. package/dist/chunk-3STZLM5J.js +4 -0
  35. package/dist/{chunk-KXUSG5ZI.js → chunk-4OPQJ7PE.js} +1 -1
  36. package/dist/chunk-5JTUL6XL.js +2 -0
  37. package/dist/{chunk-FMR2KPSK.js → chunk-5KFS3GAZ.js} +1 -1
  38. package/dist/{chunk-XZRIQ3GF.js → chunk-6HEGD6H2.js} +1 -1
  39. package/dist/{chunk-XWSAKVEY.js → chunk-6UJDOAYR.js} +2 -2
  40. package/dist/{chunk-QJIJC3KC.js → chunk-73C4PRYU.js} +1 -1
  41. package/dist/chunk-AAONIIQV.js +6 -0
  42. package/dist/chunk-AH7ZZIZY.js +2 -0
  43. package/dist/chunk-AM5S4KG4.js +6 -0
  44. package/dist/{chunk-7MRBMDZ5.js → chunk-APAIWBIH.js} +1 -1
  45. package/dist/{chunk-HMM5FJJO.js → chunk-BAL64WSI.js} +1 -1
  46. package/dist/chunk-BB2W35TW.js +2 -0
  47. package/dist/chunk-BQHKBOSF.js +11 -0
  48. package/dist/chunk-C4G7RVJ6.js +2 -0
  49. package/dist/{chunk-NTGYFYBP.js → chunk-CDQX6HGJ.js} +1 -1
  50. package/dist/{chunk-KSZ72BSC.js → chunk-CSQ46PJ7.js} +1 -1
  51. package/dist/chunk-DQ54MH7F.js +13 -0
  52. package/dist/{chunk-3AZTXJY4.js → chunk-DXV6MBTD.js} +1 -1
  53. package/dist/chunk-DYW5C6II.js +2 -0
  54. package/dist/{chunk-LHDNJJGE.js → chunk-F6ZOJXYU.js} +1 -1
  55. package/dist/chunk-GVIPTX6T.js +6 -0
  56. package/dist/chunk-GW5DWAXY.js +2 -0
  57. package/dist/chunk-HJERKSBK.js +349 -0
  58. package/dist/{chunk-POYZ6SAI.js → chunk-HPMS5KO6.js} +2 -2
  59. package/dist/{chunk-3RZ63RBO.js → chunk-IBNC444G.js} +1 -1
  60. package/dist/{chunk-73OQDAXF.js → chunk-IQDWBTRJ.js} +1 -1
  61. package/dist/chunk-IXVOXJP6.js +6 -0
  62. package/dist/{chunk-IQODWB32.js → chunk-JEUA4UWK.js} +1 -1
  63. package/dist/{chunk-GLA6QL3T.js → chunk-JKTFTF24.js} +1 -1
  64. package/dist/{chunk-KHJXOFDM.js → chunk-JRMDGLLT.js} +1 -1
  65. package/dist/{chunk-GIMTSDNC.js → chunk-KNDSQ4PS.js} +1 -1
  66. package/dist/chunk-KRXSXQBU.js +12 -0
  67. package/dist/{chunk-4CJ55EUY.js → chunk-KT6G7AF2.js} +1 -1
  68. package/dist/chunk-KVQOBPAZ.js +2 -0
  69. package/dist/chunk-L2TV4G56.js +4 -0
  70. package/dist/{chunk-6HYW5RFX.js → chunk-L4JIMNKW.js} +1 -1
  71. package/dist/{chunk-FSB3FTIQ.js → chunk-L7VREJTG.js} +1 -1
  72. package/dist/{chunk-MRP54NCJ.js → chunk-LQZ2BU7Q.js} +1 -1
  73. package/dist/{chunk-EAUUULJQ.js → chunk-LR5XO2KD.js} +1 -1
  74. package/dist/chunk-M7WQM4UA.js +4 -0
  75. package/dist/{chunk-KHQHVSZ6.js → chunk-NAC7SFBE.js} +1 -1
  76. package/dist/{chunk-DSOA6L73.js → chunk-NAE7MBR2.js} +3 -3
  77. package/dist/{chunk-NTNAHN25.js → chunk-NBKQT7LJ.js} +1 -1
  78. package/dist/{chunk-7NLQ3QQD.js → chunk-NJPTOKW5.js} +1 -1
  79. package/dist/{chunk-RFJAYURU.js → chunk-NOCIMJSN.js} +1 -1
  80. package/dist/chunk-NRC2G4Y5.js +5 -0
  81. package/dist/{chunk-H2W2UNTN.js → chunk-NRTHYROA.js} +1 -1
  82. package/dist/chunk-O56PUUNL.js +9 -0
  83. package/dist/chunk-OHRS3H7Z.js +5 -0
  84. package/dist/{chunk-FCHTL74E.js → chunk-PMHJRT3A.js} +1 -1
  85. package/dist/{chunk-GRB66C5S.js → chunk-QROUKGKU.js} +1 -1
  86. package/dist/{chunk-XXMNUJX4.js → chunk-R2RGSO4B.js} +1 -1
  87. package/dist/{chunk-MFOH7EYR.js → chunk-RNSSM2BK.js} +1 -1
  88. package/dist/chunk-SE6WNCYU.js +4 -0
  89. package/dist/{chunk-ICGHBZFZ.js → chunk-SRDHPKJT.js} +1 -1
  90. package/dist/chunk-SWESH2J7.js +10 -0
  91. package/dist/chunk-SY3HLQMV.js +4 -0
  92. package/dist/chunk-T63R6QT4.js +4 -0
  93. package/dist/{chunk-ZP4S5WGW.js → chunk-UBFKZEX3.js} +2 -2
  94. package/dist/chunk-UI7KULSI.js +7 -0
  95. package/dist/chunk-UPPEOQJQ.js +3 -0
  96. package/dist/chunk-URQUQWGW.js +62 -0
  97. package/dist/chunk-UX2B7L6K.js +2 -0
  98. package/dist/{chunk-XSKLH2MC.js → chunk-V36ATG7A.js} +2 -2
  99. package/dist/chunk-VGFTNLQQ.js +2 -0
  100. package/dist/{chunk-RGJIRS3B.js → chunk-W5DOU2DV.js} +1 -1
  101. package/dist/chunk-W6VD2XFO.js +19 -0
  102. package/dist/chunk-WJ5HDEVH.js +6 -0
  103. package/dist/chunk-WWNSD6FA.js +6 -0
  104. package/dist/{chunk-ZPCU6546.js → chunk-X3ICV5M5.js} +1 -1
  105. package/dist/chunk-XDHZMCTA.js +4 -0
  106. package/dist/{chunk-2WKX3RMA.js → chunk-XVDJ423L.js} +1 -1
  107. package/dist/chunk-ZLCZDAEX.js +6 -0
  108. package/dist/{chunk-NJAHRITS.js → chunk-ZM5PVRJK.js} +1 -1
  109. package/dist/committer-2EJPVVCQ.js +2 -0
  110. package/dist/{config-QISRENF5.js → config-R3GF2FZA.js} +1 -1
  111. package/dist/cover-cmd-TXICWHUU.js +3 -0
  112. package/dist/{credentials-OGLK7MPV.js → credentials-XN4ROCQ3.js} +1 -1
  113. package/dist/design-committer-BQUWD6AC.js +2 -0
  114. package/dist/docx-convert-ZBVQO2LG.js +1 -1
  115. package/dist/dossier-QZV74XOS.js +3 -0
  116. package/dist/evidence-V23FPVXQ.js +2 -0
  117. package/dist/evolve-cmd-PZCPXDMR.js +2 -0
  118. package/dist/{exit-manager-MXUD7GQ7.js → exit-manager-HNFATGSM.js} +1 -1
  119. package/dist/explain-UE4IACQH.js +2 -0
  120. package/dist/{explain-cmd-NWIYH5MI.js → explain-cmd-RZW6QJYM.js} +1 -1
  121. package/dist/{explain-cmd-DBUTPZHA.js → explain-cmd-X7JZLSZZ.js} +1 -1
  122. package/dist/extract-bind-BFY7IRL4.js +10 -0
  123. package/dist/extract-cmd-U3MGK2LP.js +6 -0
  124. package/dist/feeder-XGTFV7TZ.js +2 -0
  125. package/dist/gaps-cmd-BWCRLLBK.js +3 -0
  126. package/dist/{gate-B6C6KLFA.js → gate-YHBPWEM5.js} +1 -1
  127. package/dist/{generate-headless-TUA3HGRX.js → generate-headless-BSTDLZZY.js} +2 -2
  128. package/dist/{headless-io-PWW6YKH2.js → headless-io-BL3TEAX5.js} +1 -1
  129. package/dist/index.js +67 -68
  130. package/dist/ingest-AL6CABJT.js +2 -0
  131. package/dist/ingest-cmd-O6OWWZT4.js +2 -0
  132. package/dist/interactive-bind-43HGDF5K.js +24 -0
  133. package/dist/lifecycle-cmd-D6TVTYRK.js +2 -0
  134. package/dist/list-cmd-XCAV2FKA.js +3 -0
  135. package/dist/{list-commands-F53ZNYOZ.js → list-commands-747UTUSS.js} +1 -1
  136. package/dist/locks-cmd-QAULI5LV.js +2 -0
  137. package/dist/logical-ids-4G4FAHNJ.js +2 -0
  138. package/dist/login-flow-CV76ENHV.js +2 -0
  139. package/dist/maintenance-cmd-ZRB4NTGG.js +2 -0
  140. package/dist/next-TRSKMBO5.js +2 -0
  141. package/dist/paths-JCYX6UWL.js +2 -0
  142. package/dist/{persist-recorded-session-5ZFS5SMZ.js → persist-recorded-session-MDPWWUA7.js} +1 -1
  143. package/dist/phase-seed-52LRE3LH.js +2 -0
  144. package/dist/pipeline-LM5JAK7F.js +2 -0
  145. package/dist/readmodel-X7L7W2BA.js +2 -0
  146. package/dist/reconcile-cmd-DGCSDML6.js +2 -0
  147. package/dist/{recording-banner-ZZUF2MGT.js → recording-banner-TALO7PUR.js} +1 -1
  148. package/dist/records-5SVUXJBW.js +2 -0
  149. package/dist/{require-project-folder-NQBZFUPF.js → require-project-folder-R347LFDQ.js} +1 -1
  150. package/dist/revert-DXXYXJGN.js +2 -0
  151. package/dist/review-cmd-2QF5HTI7.js +4 -0
  152. package/dist/run-52UIBPXD.js +2 -0
  153. package/dist/run-VRVH4VO3.js +2 -0
  154. package/dist/{run-test-md-XOSCYVSS.js → run-test-md-DFNIGYB7.js} +2 -2
  155. package/dist/sessions-BLXZVK5U.js +2 -0
  156. package/dist/sessions-cmd-AQWLL5ZN.js +25 -0
  157. package/dist/{skill-installer-VYIIWAK7.js → skill-installer-ANXTCXQV.js} +1 -1
  158. package/dist/spawner-AH5FTUYU.js +2 -0
  159. package/dist/structured-answers-QHFGZPSS.js +5 -0
  160. package/dist/tcg-generate-WKCBBKI5.js +2 -0
  161. package/dist/testmd-actions-RPYG6TJG.js +2 -0
  162. package/dist/token-refresh-NIDUOTRM.js +2 -0
  163. package/dist/trust-gate-EX7R2P4Y.js +2 -0
  164. package/dist/{validate-basic-LP3S5PK7.js → validate-basic-O2DP2XJL.js} +1 -1
  165. package/dist/verdicts-TJH3O5UW.js +2 -0
  166. package/dist/{version-check-XP62HWLJ.js → version-check-RNR3JCQ5.js} +1 -1
  167. package/dist/{view-cmd-GQBFCPDL.js → view-cmd-YSEGA5PI.js} +1 -1
  168. package/dist/walk-session-HXW4OSA2.js +2 -0
  169. package/dist/with-telemetry-PNP6CAVM.js +2 -0
  170. package/package.json +6 -6
  171. package/dist/ChatSurface-TZ554O4U.js +0 -8
  172. package/dist/EvidenceViewOffer-SSAM4RRP.js +0 -2
  173. package/dist/SingleShotApp-A6PCNPLM.js +0 -2
  174. package/dist/TestMdRunView-MQ7ZPFN2.js +0 -2
  175. package/dist/bind-QJT726NE.js +0 -6
  176. package/dist/bootstrap-566PPFCC.js +0 -2
  177. package/dist/bridge-QCMEOQDD.js +0 -2
  178. package/dist/chat-committer-OS7ULZMH.js +0 -2
  179. package/dist/chat-controller-QLORQWJZ.js +0 -2
  180. package/dist/chunk-3C5GMAM4.js +0 -2
  181. package/dist/chunk-54IB6CXK.js +0 -5
  182. package/dist/chunk-54VQ46U2.js +0 -14
  183. package/dist/chunk-55Y65VPA.js +0 -347
  184. package/dist/chunk-6W6AIDLJ.js +0 -4
  185. package/dist/chunk-7E24OCGX.js +0 -2
  186. package/dist/chunk-7YPK6EDR.js +0 -4
  187. package/dist/chunk-FHKDTM5L.js +0 -6
  188. package/dist/chunk-FRBYGSGJ.js +0 -4
  189. package/dist/chunk-GG43HSU2.js +0 -3
  190. package/dist/chunk-HLRLP6TQ.js +0 -2
  191. package/dist/chunk-J2KSZUOO.js +0 -4
  192. package/dist/chunk-J44RN3FB.js +0 -2
  193. package/dist/chunk-JXKRO2ZJ.js +0 -13
  194. package/dist/chunk-M5PJQ5Y3.js +0 -6
  195. package/dist/chunk-MMPFU2YC.js +0 -2
  196. package/dist/chunk-MR7CX5VT.js +0 -9
  197. package/dist/chunk-MTNUZEO7.js +0 -12
  198. package/dist/chunk-OGWC3J3C.js +0 -4
  199. package/dist/chunk-RN4OSVTG.js +0 -6
  200. package/dist/chunk-RZJVQUBA.js +0 -61
  201. package/dist/chunk-V3UE6RJP.js +0 -2
  202. package/dist/chunk-Y5RNCJAN.js +0 -19
  203. package/dist/chunk-YSSTGJ7O.js +0 -7
  204. package/dist/chunk-Z2JSEL3I.js +0 -4
  205. package/dist/cover-cmd-SV3I23UM.js +0 -2
  206. package/dist/dossier-KJSJPWOW.js +0 -3
  207. package/dist/evidence-HDD7T7DX.js +0 -2
  208. package/dist/evolve-cmd-UE2BIMXK.js +0 -2
  209. package/dist/explain-EBVIUS2X.js +0 -2
  210. package/dist/extract-bind-6MQYKN3G.js +0 -8
  211. package/dist/extract-cmd-2RUIWFZG.js +0 -6
  212. package/dist/gaps-cmd-CKCHH3HQ.js +0 -2
  213. package/dist/ingest-FIIO67ZN.js +0 -2
  214. package/dist/ingest-cmd-CRMY46YC.js +0 -7
  215. package/dist/interactive-bind-53FCRK34.js +0 -10
  216. package/dist/lifecycle-cmd-32LG364Q.js +0 -2
  217. package/dist/list-cmd-UTZ2PQUK.js +0 -3
  218. package/dist/logical-ids-I7B3VJEH.js +0 -2
  219. package/dist/login-flow-D7KBR7XR.js +0 -2
  220. package/dist/maintenance-cmd-BZAGSYGI.js +0 -2
  221. package/dist/pipeline-MX3ZR5B3.js +0 -2
  222. package/dist/readmodel-S5RAQH3F.js +0 -2
  223. package/dist/reconcile-cmd-4377PWF5.js +0 -2
  224. package/dist/revert-RQJE56HF.js +0 -2
  225. package/dist/review-cmd-7LXGYHHQ.js +0 -4
  226. package/dist/run-2AIQUJ55.js +0 -2
  227. package/dist/run-YH5SCBYD.js +0 -2
  228. package/dist/sessions-cmd-DTQYDZNT.js +0 -23
  229. package/dist/spawner-7KXVKAD5.js +0 -2
  230. package/dist/tcg-generate-U6OCCS2E.js +0 -2
  231. package/dist/testmd-actions-RPALXRZK.js +0 -2
  232. package/dist/token-refresh-S7CYBZTE.js +0 -2
  233. package/dist/walk-session-YIKHE6PT.js +0 -2
  234. /package/dist/{chunk-BC7UVJJB.js → chunk-CH273NAE.js} +0 -0
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as le}from"./chunk-SWESH2J7.js";import{a as X,c as z,d as se}from"./chunk-3LWTUMDG.js";import{c as ae}from"./chunk-AH7ZZIZY.js";import"./chunk-QROUKGKU.js";import"./chunk-OHRS3H7Z.js";import"./chunk-AM5S4KG4.js";import"./chunk-5JTUL6XL.js";import{b as Q,c as oe,d as ie}from"./chunk-W5DOU2DV.js";import{a as U}from"./chunk-JEUA4UWK.js";import"./chunk-JFAFKHDX.js";import"./chunk-AAONIIQV.js";import"./chunk-ZLCZDAEX.js";import"./chunk-DNNZ353O.js";import"./chunk-QM4S2APK.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import{a as _}from"./chunk-GW5DWAXY.js";import{b as ne}from"./chunk-T63R6QT4.js";import"./chunk-3STZLM5J.js";import"./chunk-L4JIMNKW.js";import{i as re}from"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import{a as G}from"./chunk-YCCUBQY4.js";import{y as l}from"./chunk-C4G7RVJ6.js";import{a as j}from"./chunk-HCBYKLMW.js";import{a as $,b as s,k as H}from"./chunk-C44QQJR4.js";import{a as xe}from"./chunk-6YGTRKDT.js";import{e as V}from"./chunk-UR6MHSHU.js";var S=V(xe(),1);function ce(e,v,R){let{ref:A,reason:d,by:y}=R;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=v.resolve(A);if(!x)return{record:null,errors:[{code:"UNKNOWN_REF",detail:`no node '${A}' in the graph`}]};let r=v.tipOf(x.cid);if(v.superseded.has(r))return{record:null,errors:[{code:"ALREADY_ARCHIVED",detail:`${A} is already superseded at its tip (${r.slice(0,19)}\u2026)`}]};let o=re(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:v.latestHash});return ne(e),{record:o.record,errors:null}}function de(e){let v=e.by??{kind:"human",id:process.env.USER??"operator"},R=e.mode==="interactive"?"override":e.mode,A={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 o=e.held.rows.find(a=>a.temp_ref===r.held_ref);if(!o)continue;let k={kind:o.kind,ref:o.temp_ref,title:o.title,why:o.why,origin:"content-change",...r.impact?{impact:r.impact}:{}};y.set(k.ref,{card:k,source:"held",heldRef:o.temp_ref})}else if(r.kind==="MODIFY"){let o={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(o.ref,{card:o,source:"row",row:r})}else if(r.kind==="ADD"){let o={kind:"ADD",ref:r.ref,title:r.ref,why:r.reason,origin:r.origin??"content-change"};y.set(o.ref,{card:o,source:"row",row:r})}for(let r of e.archive){if(r.kind!=="ARCHIVE")continue;let o={kind:"ARCHIVE",ref:r.ref,title:r.ref,why:r.why,provenance:r.why,...r.impact?{impact:r.impact}:{}};y.set(o.ref,{card:o,source:"archive",row:r})}for(let r of e.reviewFeeder?.()??[]){if(y.has(r.ref))continue;let o={kind:r.kind==="MODIFY_HELD"?"MODIFY":r.kind,ref:r.ref,title:r.title,why:r.why,...r.impact?{impact:r.impact}:{},...r.pair?{pair:r.pair}:{},...r.held?{held:!0}:{},...r.kind==="MODIFY_HELD"?{heldPayload:!0}:{}};y.set(o.ref,{card:o,source:"review",reviewCard:r})}let x=r=>(d.failed++,{outcome:"failed",detail:r});return{cards:()=>[...y.values()].map(r=>r.card),async submit(r,o){let k=y.get(r);if(!k)return x(`no card ${r}`);if(k.source==="review"){if(k.reviewCard.kind==="PAIR"&&o.v==="approve")return x(`${r} is a PAIR card \u2014 approve is not in its grammar (merge / keep both / defer); words ride a defer note`);let{submitReview:c}=await import("./verdicts-TJH3O5UW.js"),w=o.v==="approve"?{v:"approve"}:o.v==="archive"?{v:"archive",because:o.because??""}:o.v==="skip"&&k.reviewCard.kind==="MODIFY_HELD"?{v:"keep_current"}:o.v==="defer"||o.v==="skip"?{v:"defer"}:o.v==="merge"?{v:"merge"}:{v:"keep_both"},b=await c({contextDir:e.contextDir,signals:i=>e.signals({ref:i.ref,verdict:i.verdict,...i.reason?{reason:i.reason}:{}})},k.reviewCard,w,v);return b.outcome==="failed"?(d.failed++,b):b.outcome==="deferred"?(d.deferred++,o.v==="defer"&&o.note?(e.signals({ref:r,verdict:"deferred-with-note",reason:o.note}),{...b,detail:`steering noted: "${o.note}" \u2014 decide ${k.reviewCard.kind==="PAIR"?"merge / keep both":"the verdict"} when it re-offers`}):b):b.outcome==="retired"?(d.retired++,b):b.outcome==="committed"?(d.committed++,b):(d.applied++,b)}if(o.v==="merge"||o.v==="keep_both")return x(`${r} is a ${k.card.kind} card \u2014 ${o.v} applies to review cards only`);if(o.v==="skip")return d.skipped++,e.signals({ref:r,verdict:"gap-dismissed"}),{outcome:"skipped"};if(o.v==="defer")return d.deferred++,o.note?(e.signals({ref:r,verdict:"deferred-with-note",reason:o.note}),{outcome:"deferred",detail:`steering noted: "${o.note}"`}):{outcome:"deferred"};if(o.v==="archive"){if(k.source!=="archive")return x(`${r} is not an ARCHIVE card`);let c=_(e.contextDir),w=c.resolve(k.row.ref);if(w&&c.superseded.has(c.tipOf(w.cid)))return d.skipped++,{outcome:"skipped",detail:"already retired \u2014 nothing to do"};let b=ce(e.contextDir,_(e.contextDir),{ref:k.row.ref,reason:`reconcile retire: ${k.row.why}`,by:v});return b.errors?x(b.errors.map(i=>`${i.code}: ${i.detail}`).join("; ")):(d.retired++,e.signals({ref:r,verdict:"gap-resolved-archive",reason:k.row.why}),{outcome:"retired"})}if(k.source==="archive")return x(`${r} takes archive/skip/defer, not approve`);if(k.source==="held"){let c=le(e.contextDir,e.held,k.heldRef,v,o.edits);if(!c.ok)return x(c.message);if(c.kind==="ADD"){let w=await e.runDesign(c.ref,{yes:!0,mode:R,...o.steering?{because:o.steering}:{}});return w!==0?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but its design run exited ${w} \u2014 finish with kane-cli design tests --use-case ${c.ref}`}):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create",...o.steering?{reason:o.steering}:{}}),{outcome:"applied",detail:c.ref})}if(o.steering){let w=_(e.contextDir),b=X(w,c.ref);if(!b.ok)return d.committed++,{outcome:"committed",detail:`committed ${c.ref}, but steering could not resolve it (${b.message}) \u2014 steer via kane-cli maintain evolve ${c.ref}`};let i=await z(e.contextDir,b.target,{yes:!0,mode:R,because:o.steering},A,e.runDesign,"batch");if(i.outcome==="no-design"){let u=await e.runDesign(b.target.seamRef,{yes:!0,mode:R,because:o.steering});return u!==0?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but its steered design run exited ${u} \u2014 finish with kane-cli design tests --use-case ${b.target.seamRef}`}):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create",reason:o.steering}),{outcome:"applied",detail:c.ref})}return i.outcome==="failed"||i.outcome==="paused"?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but the steering evolve ${i.outcome} (exit ${i.code}) \u2014 finish with kane-cli maintain evolve ${c.ref}`}):i.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:o.steering}),{outcome:"applied",detail:c.ref})}return d.committed++,e.signals({ref:r,verdict:"gap-resolved-evolve"}),{outcome:"committed",detail:c.ref}}let a=_(e.contextDir),g=X(a,k.row.ref);if(!g.ok)return x(g.message);if(k.card.kind==="ADD"){let c=await e.runDesign(g.target.seamRef,{yes:!0,mode:R});return c!==0?x(`design run exited ${c}`):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create"}),{outcome:"applied"})}let C=await z(e.contextDir,g.target,{yes:!0,mode:R,...o.steering?{because:o.steering}:{}},A,e.runDesign,"batch");return C.outcome==="evolved"?(d.applied++,e.signals({ref:r,verdict:"gap-resolved-evolve",...o.steering?{reason:o.steering}:{}}),{outcome:"applied"}):C.outcome==="failed"||C.outcome==="paused"?x(`evolve ${C.outcome} (exit ${C.code})`):(d.skipped++,{outcome:"skipped",detail:C.outcome})},summary:()=>({...d})}}var f=V(j(),1);function L(e){return e.kind==="REVIEW"?[{v:"approve",label:"approve",detail:"mark it reviewed and trusted"},{v:"archive",label:"archive",detail:"reject it \u2014 asks for a reason; impact shown above"},{v:"defer",label:"defer",detail:"not now \u2014 stays queued"}]:e.kind==="PAIR"?[{v:"merge",label:"merge",detail:"duplicate \u2014 fold into the older item (it stays unreviewed)"},{v:"keep_both",label:"keep both",detail:"genuinely distinct \u2014 promote both"},{v:"defer",label:"defer",detail:"not now \u2014 stays queued"}]:e.kind==="ARCHIVE"?[{v:"archive",label:"retire",detail:"hidden from now on; history is kept and it can be reverted"},{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"}]:e.heldPayload?[{v:"approve",label:"approve update",detail:"commit the held payload \u2014 impact preview above"},{v:"skip",label:"keep current",detail:"drop the held payload (the owner's disk state stays untouched)"},{v:"defer",label:"defer",detail:"not now \u2014 stays held"}]:[{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 Y(e){return e.kind==="ARCHIVE"?null:L(e).length}var ye={ADD:{color:l.green??"green"},MODIFY:{color:"yellow"},ARCHIVE:{color:l.red},REVIEW:{color:"cyan"},PAIR:{color:"magenta"}},Re=60,$e=100;function ue({card:e,position:v,sel:R=0,focused:A=!1,freeText:d=null,editorIntent:y="steer"}){let{stdout:x}=H(),r=x?.columns??80,o=r<Re,k=Math.min(r-1,$e),a=L(e),g=Y(e),C=ye[e.kind],c=E=>A&&R===E?(0,f.jsx)(s,{color:l.assuranceAccent,children:"\u276F"}):" ",w=e.impact,b=w&&"stale_refs"in w&&w.stale_refs.length>0?`${e.kind==="ARCHIVE"?"retiring leaves":"approving marks"} ${w.stale_refs.length} item(s) stale`+((w.direct_refs?.length??0)>0?` \u2014 ${w.direct_refs.length} directly touched: ${w.direct_refs.join(", ")}`:""):w&&"design_children"in w?`${e.kind==="REVIEW"?"archiving drops":"merging folds"} ${w.design_children} design child(ren)`:null,i=`? reconcile \u2014 item ${v.n} of ${v.of}`,u=g!==null?"\u2191\u2193 \xB7 \u23CE select \xB7 1-9 \xB7 type = adjust \xB7 esc \xB7 nothing to undo":"\u2191\u2193 \xB7 \u23CE select \xB7 1-9 \xB7 esc \xB7 nothing to undo",I=(0,f.jsxs)($,{flexDirection:"column",children:[(0,f.jsx)($,{paddingLeft:2,children:(0,f.jsxs)(s,{bold:!0,children:[(0,f.jsx)(s,{color:C.color,children:`[${e.kind}]`}),` ${U(e.title)}`]})}),(0,f.jsx)($,{paddingLeft:2,children:(0,f.jsx)(s,{color:l.muted,children:e.why})}),b?(0,f.jsx)($,{paddingLeft:2,children:(0,f.jsx)(s,{color:l.muted,children:`impact: ${b}`})}):null,e.kind==="ARCHIVE"&&e.provenance&&e.provenance!==e.why?(0,f.jsx)($,{paddingLeft:2,children:(0,f.jsx)(s,{color:l.muted,children:e.provenance})}):null,(0,f.jsx)(s,{children:" "}),a.map((E,T)=>(0,f.jsxs)(s,{children:[c(T),` ${T+1}. ${E.label}`,(0,f.jsx)(s,{color:l.dim,children:` \u2014 ${E.detail}`})]},`o-${T}`)),g!==null||d&&y==="because"?d?(0,f.jsxs)($,{flexDirection:"column",children:[(0,f.jsxs)($,{children:[(0,f.jsxs)(s,{children:[(0,f.jsx)(s,{color:l.assuranceAccent,children:"\u276F"})," ",(0,f.jsx)(s,{color:l.dim,children:"\u270E "})]}),(0,f.jsx)(G,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:y==="because"?"why archive it?":"say what to adjust"})]}),(0,f.jsx)(s,{color:l.muted,children:y==="because"?" submits as: archive \xB7 your reason goes on the record":e.kind==="PAIR"?" submits as: defer \xB7 your note parks with the card (it re-offers)":" submits as: approve \xB7 your words steer the re-design"})]}):g!==null?(0,f.jsxs)(s,{children:[c(g)," ",(0,f.jsx)(s,{color:l.dim,children:e.kind==="PAIR"?"\u270E defer with a note \u2014 say what you noticed":"\u270E approve with changes \u2014 say what to adjust"})]}):null:null]});if(o)return(0,f.jsxs)($,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,f.jsx)(s,{bold:!0,color:l.assuranceAccent,children:i}),I,(0,f.jsx)(s,{color:l.muted,children:u})]});let D=Math.max(2,k-(3+i.length+1)),W=Math.max(2,k-(3+u.length+1));return(0,f.jsxs)($,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,f.jsxs)(s,{color:l.assuranceAccent,children:["\u2500\u2500 ",(0,f.jsx)(s,{bold:!0,children:i}),` ${"\u2500".repeat(D)}`]}),(0,f.jsx)(s,{children:" "}),I,(0,f.jsx)(s,{children:" "}),(0,f.jsxs)(s,{color:l.assuranceAccent,children:["\u2500\u2500 ",(0,f.jsx)(s,{color:l.muted,children:u}),` ${"\u2500".repeat(W)}`]})]})}var B=V(j(),1);function K({mark:e,markColor:v,color:R,indent:A=2,reserve:d=0,children:y}){let{stdout:x}=H(),r=(x?.columns??80)-d,o=A+e.length+1;return(0,B.jsxs)($,{children:[(0,B.jsx)($,{width:o,flexShrink:0,children:(0,B.jsx)(s,{color:v,children:`${" ".repeat(A)}${e}`})}),(0,B.jsx)($,{width:Math.max(20,r-o),children:(0,B.jsx)(s,{color:R,children:y})})]})}var p=V(j(),1);function me(e){return e.landed?"committed":e.outcome}var Ce={applied:{mark:"\u2714",color:"green"},committed:{mark:"\u2714",color:"green"},retired:{mark:"\u2714",color:"green"},skipped:{mark:"\xB7",color:"dim"},deferred:{mark:"\u2013",color:"dim"},failed:{mark:"\u2717",color:"red"}},q=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function De(e){return e.v==="archive"?"Retiring\u2026":e.v==="approve"&&e.steering?"Approving with your changes \u2014 committing, then re-designing\u2026":"Applying \u2014 committing\u2026"}function Te({controller:e,cards:v,note:R,markOutcome:A,routeChat:d,listEvolveTargets:y,barSubject:x,onFinish:r,onCtrlC:o,pauseRef:k}){let[a,g]=(0,S.useState)(v.length>0?{at:"card",idx:0,sel:0,editor:null}:{at:"done-panel",sel:0}),C=(0,S.useRef)(0),c=(0,S.useRef)(a);c.current=a;let w=(0,S.useRef)([]),[b,i]=(0,S.useState)(0),u=a.at==="busy"||a.at==="evolving";(0,S.useEffect)(()=>{if(!u)return;let t=setInterval(()=>i(n=>n+1),120);return()=>clearInterval(t)},[u]);let I=(0,S.useRef)(!1),D=()=>{R((0,p.jsx)(s,{color:l.dim,children:"walk paused \u2014 every verdict so far is committed; re-run the same command to continue"})),r(3)},W=()=>{if(I.current)return;I.current=!0;let t=c.current;if(t.at==="busy"||t.at==="evolving"){R((0,p.jsx)(s,{color:l.dim,children:"finishing the current item, then pausing\u2026"}));return}if(t.at==="done-panel"||t.at==="picker"||t.at==="why"||t.at==="view"){r(C.current);return}D()};k&&(k.current=W);let E=a.at==="card"||a.at==="busy"?v[a.idx]:null,T=()=>[{key:"finish",label:"finish"},...y?[{key:"evolve",label:"evolve another use-case\u2026"}]:[],...w.current.length>0?[{key:"view",label:"view what changed"}]:[]],P=()=>{let t=y?.()??[];if(t.length===0){R((0,p.jsx)(s,{color:l.dim,children:"nothing is stale \u2014 no evolve targets right now"})),g({at:"done-panel",sel:0});return}g({at:"picker",items:t,sel:0})},M=t=>{let n=t+1;if(n<v.length)g({at:"card",idx:n,sel:0,editor:null});else{let m=e.summary();R((0,p.jsx)(s,{color:l.dim,children:`reconcile walk: ${m.applied} applied, ${m.committed} committed, ${m.retired} retired, ${m.skipped} skipped, ${m.deferred} deferred`+(m.failed>0?`, ${m.failed} failed`:"")})),g({at:"done-panel",sel:0})}},N=(0,S.useRef)(!1),O=(t,n)=>{if(N.current)return;N.current=!0;let m=v[t];g({at:"busy",idx:t,label:De(n),startedAt:Date.now()}),e.submit(m.ref,n).catch(h=>({outcome:"failed",detail:h instanceof Error?h.message:String(h)})).then(h=>{let F=Ce[h.outcome]??{mark:"\xB7",color:"dim"},be=h.outcome!=="failed"&&h.outcome!=="skipped"&&h.outcome!=="deferred"&&m.impact&&"stale_refs"in m.impact&&m.impact.stale_refs.length>0?` \xB7 ${m.impact.stale_refs.length} item(s) now stale`:"",te=`${h.outcome} [${m.kind}] ${U(m.title)}${h.detail?` \u2014 ${U(h.detail)}`:""}${be}`;if(w.current.push({mark:F.mark,color:F.color,line:te}),R((0,p.jsx)(K,{mark:F.mark,markColor:F.color==="green"?l.green:F.color==="red"?l.red:l.dim,color:F.color==="dim"?l.dim:void 0,children:te})),h.outcome==="failed"&&(C.current=C.current===0?1:C.current),A(m.ref,me(h)),N.current=!1,I.current){D();return}M(t)})},pe=(t,n)=>{g({at:"evolving",title:t.title,startedAt:Date.now()}),d(`${t.key} ${n}`).catch(m=>`\u2717 evolve failed: ${m instanceof Error?m.message:String(m)}`).then(m=>{let h=m.startsWith("\u2713");if(w.current.push({mark:h?"\u2714":"\u2717",color:h?"green":"red",line:m.replace(/^[✓✗]\s*/,"")}),R((0,p.jsx)(K,{mark:h?"\u2714":"\u2717",markColor:h?l.green:l.red,children:m.replace(/^[✓✗]\s*/,"")})),I.current){r(C.current);return}g({at:"done-panel",sel:0})})},fe=(0,S.useMemo)(()=>({isFocused:()=>{let t=c.current;return t.at==="card"&&t.editor===null||t.at==="done-panel"||t.at==="picker"||t.at==="view"},onMove:t=>{g(n=>{if(n.at==="card"){let m=v[n.idx],h=Y(m)??L(m).length-1;return{...n,sel:Math.max(0,Math.min(h,n.sel+t))}}return n.at==="done-panel"?{...n,sel:Math.max(0,Math.min(T().length-1,n.sel+t))}:n.at==="picker"?{...n,sel:Math.max(0,Math.min(n.items.length-1,n.sel+t))}:n})},onSelect:()=>{let t=c.current;if(t.at==="card"){let n=v[t.idx],m=Y(n);if(m!==null&&t.sel===m){g({...t,editor:"",editorIntent:"steer"});return}let h=L(n)[t.sel];if(h?.v==="archive"&&n.kind==="REVIEW"){g({...t,editor:"",editorIntent:"because"});return}h&&O(t.idx,{v:h.v});return}if(t.at==="done-panel"){let n=T()[t.sel];n?.key==="finish"?r(C.current):n?.key==="evolve"?P():n?.key==="view"&&g({at:"view"});return}if(t.at==="picker"){let n=t.items[t.sel];n&&g({at:"why",item:n,text:""});return}},onDigit:t=>{let n=c.current;if(n.at==="card"){let m=v[n.idx],h=L(m)[t-1];if(h?.v==="archive"&&m.kind==="REVIEW"){g({...n,editor:"",editorIntent:"because"});return}h&&O(n.idx,{v:h.v});return}n.at==="done-panel"&&t-1<T().length&&g({...n,sel:t-1}),n.at==="picker"&&t-1<n.items.length&&g({...n,sel:t-1})},onType:t=>{g(n=>n.at!=="card"||Y(v[n.idx])===null?n:{...n,editor:(n.editor??"")+t,editorIntent:n.editorIntent??"steer"})},isMulti:()=>!1,onSpace:()=>{},onBack:()=>{let t=c.current;(t.at==="picker"||t.at==="view")&&g({at:"done-panel",sel:0})}}),[v]);(0,S.useEffect)(()=>{a.at==="done"&&r(C.current)},[a.at]);let ge=a.at==="card"||a.at==="done-panel"||a.at==="picker"||a.at==="why"||a.at==="view",ve=a.at==="card"||a.at==="busy"?`${x?`${x} \xB7 `:""}item ${a.idx+1} of ${v.length}`:x,J=t=>Math.floor((Date.now()-t)/1e3),{stdout:he}=H(),Z=Math.min((he?.columns??80)-1,100),ee=`view \xB7 this run's changes \xB7 ${w.current.length}`,ke=Math.max(2,Z-(3+ee.length+1)),we=Math.max(2,Z-12);return(0,p.jsxs)($,{flexDirection:"column",children:[(0,p.jsx)(ie,{onToggleThinking:()=>{},onCtrlC:()=>{o(),W()},panel:fe}),a.at==="card"&&E?(0,p.jsx)(ue,{card:E,position:{n:a.idx+1,of:v.length},sel:a.sel,focused:a.editor===null,editorIntent:a.editorIntent??"steer",freeText:a.editor!==null?{value:a.editor,onChange:t=>g(n=>n.at==="card"?{...n,editor:t}:n),onSubmit:t=>{let n=c.current;if(n.at!=="card")return;let m=t.trim();if(!m){g({...n,editor:null,editorIntent:void 0});return}let h=v[n.idx];n.editorIntent==="because"?O(n.idx,{v:"archive",because:m}):h.kind==="PAIR"?O(n.idx,{v:"defer",note:m}):O(n.idx,{v:"approve",steering:m})},onCancel:()=>g(t=>t.at==="card"?{...t,editor:null,editorIntent:void 0}:t)}:null}):null,a.at==="busy"?(0,p.jsxs)(s,{color:l.assuranceAccent,children:[`${q[b%q.length]} ${a.label} `,(0,p.jsx)(s,{color:l.dim,children:`(${J(a.startedAt)}s)`})]}):null,a.at==="evolving"?(0,p.jsxs)(s,{color:l.assuranceAccent,children:[`${q[b%q.length]} Evolving ${a.title}\u2026 `,(0,p.jsx)(s,{color:l.dim,children:`(${J(a.startedAt)}s)`})]}):null,a.at==="done-panel"?(0,p.jsx)(Q,{headline:(()=>{let t=e.summary();return`reconcile done \u2014 ${t.applied+t.committed} applied \xB7 ${t.retired} retired \xB7 ${t.skipped} skipped \xB7 ${t.deferred} deferred${t.failed>0?` \xB7 ${t.failed} failed`:""}`})(),rows:T(),sel:a.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select"}):null,a.at==="picker"?(0,p.jsx)(Q,{ask:!0,headline:"evolve which use-case?",rows:a.items.map(t=>({key:t.key,label:t.title,detail:t.badge})),sel:a.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}):null,a.at==="why"?(0,p.jsxs)($,{flexDirection:"column",borderStyle:"round",borderColor:l.assuranceAccent,paddingX:1,children:[(0,p.jsxs)($,{children:[(0,p.jsxs)(s,{children:[(0,p.jsx)(s,{color:l.assuranceAccent,children:"\u25B8"})," ",(0,p.jsx)(s,{color:l.dim,children:"\u270E "})]}),(0,p.jsx)(G,{value:a.text,onChange:t=>g(n=>n.at==="why"?{...n,text:t}:n),onSubmit:t=>{let n=c.current;n.at==="why"&&(t.trim()?pe(n.item,t.trim()):g({at:"picker",items:[n.item],sel:0}))},onCancel:()=>{c.current.at==="why"&&P()},placeholder:`what should change about ${a.item.title}?`})]}),(0,p.jsx)(s,{color:l.muted,children:" \u23CE submit \xB7 esc back"})]}):null,a.at==="view"?(0,p.jsxs)($,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,p.jsxs)(s,{color:l.assuranceAccent,children:["\u2500\u2500 ",(0,p.jsx)(s,{bold:!0,children:ee}),` ${"\u2500".repeat(ke)}`]}),(0,p.jsx)(s,{children:" "}),w.current.map((t,n)=>(0,p.jsx)(K,{mark:t.mark,markColor:t.color==="green"?l.green:t.color==="red"?l.red:l.dim,color:t.color==="dim"?l.dim:void 0,indent:0,reserve:0,children:t.line},`vc-${n}`)),(0,p.jsx)(s,{children:" "}),(0,p.jsxs)(s,{color:l.assuranceAccent,children:["\u2500\u2500 ",(0,p.jsx)(s,{color:l.muted,children:"esc back"}),` ${"\u2500".repeat(we)}`]})]}):null,(0,p.jsx)(oe,{verb:"maintain",subject:ve,state:ge?"idle":void 0,hints:"ctrl+c exit"})]})}async function nt(e){let v={current:null},R=i=>{v.current?.append(i)},A=null,d=async(i,u)=>{let[{runDesign:I},{resolveAgentAuthEnv:D},{runAgent:W},{preflightTurn:E}]=await Promise.all([import("./run-52UIBPXD.js"),import("./spawner-AH5FTUYU.js"),import("./bridge-T4HL4TG7.js"),import("./turn-preflight-JGYT7LXP.js")]);A??=await D();let T=A;return I({useCase:i,force:!0,mode:u.mode??"override",...u.because?{because:u.because}:{},...u.changeDelta!==void 0?{changeDelta:u.changeDelta}:{},...u.priorDesign!==void 0?{priorDesign:u.priorDesign}:{}},{contextDir:e.dir,agent:W,preflightTurn:()=>E(T),ask:async()=>[],out:()=>{},progress:()=>{},isTTY:!1,auth:T})},y=e.runDesign??d,x=de({contextDir:e.dir,held:e.held,archive:e.archive,planRows:e.rows,runDesign:y,mode:"interactive",signals:e.signals,reviewFeeder:()=>{try{return ae({contextDir:e.dir},_(e.dir))}catch{return[]}}}),r=new Set(e.rows.filter(i=>i.applied!==void 0).map(i=>i.held_ref??i.ref)),o=x.cards().filter(i=>!r.has(i.ref)&&!(i.kind==="ARCHIVE"&&e.archiveState?.[i.ref]!==void 0)),k=i=>e.rows.findIndex(u=>(u.held_ref??u.ref)===i),a=(i,u)=>{try{if(o.find(W=>W.ref===i)?.kind==="ARCHIVE"){u==="retired"?e.markA?.(i,"retired"):u==="skipped"&&e.markA?.(i,"skipped");return}let D=k(i);if(D<0)return;u==="applied"||u==="committed"?e.mark?.(D,"approved"):u==="skipped"&&e.mark?.(D,"skipped")}catch{}},g=async i=>{let[{openGraph:u},{resolveParentUc:I,evolveOneUc:D}]=await Promise.all([import("./readmodel-X7L7W2BA.js"),import("./evolve-cmd-PZCPXDMR.js")]),[W,...E]=i.split(/\s+/),T=u(e.dir),P=I(T,W);if(!P.ok)return`couldn't resolve '${W}' \u2014 start with a use-case id (uc-\u2026): ${P.message}`;if(E.length===0)return`say what to change: \`${W} <your words>\` \u2014 the words become the redesign's change delta`;let M=E.join(" "),N={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},O=await D(e.dir,P.target,{yes:!0,mode:"override",because:M},N,y,"batch");return O.outcome==="evolved"?(e.signals({ref:P.target.display,verdict:"gap-resolved-evolve",reason:M}),`\u2713 redesigned ${P.target.display} \u2014 "${M}"`):`\u2717 evolve ${O.outcome} for ${P.target.display} (exit ${O.code})`},C=e.listEvolveTargets??(()=>{let i=_(e.dir);return se(i).targets.map(u=>({key:u.display,title:u.display,badge:"stale"}))});if(e.script){let i=0;for(let u of o){let I=await e.script(u),D=await x.submit(u.ref,I);D.outcome==="failed"&&i===0&&(i=1),a(u.ref,me(D))}return i}let[{render:c},{ScrollbackProvider:w},{ScrollbackTap:b}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./scrollback-JLPJR25X.js"),import("./ScrollbackTap-Q3IOKNMS.js")]);return new Promise(i=>{let u=!1,I=M=>{u||(u=!0,(async()=>{process.removeListener("SIGINT",T),await v.current?.flush();try{P.unmount()}catch{}i(M)})())},D=0,W={current:null},E=()=>{if(D+=1,D>=2){process.removeListener("SIGINT",T);try{P.unmount()}catch{}i(130)}},T=()=>{E(),W.current?.()};process.on("SIGINT",T);let P=c((0,p.jsxs)(w,{children:[(0,p.jsx)(b,{into:v}),(0,p.jsx)(Te,{controller:x,cards:o,note:R,markOutcome:a,routeChat:g,listEvolveTargets:C,barSubject:e.barSubject,onFinish:I,onCtrlC:E,pauseRef:W})]}),{exitOnCtrlC:!1})})}export{Te as WalkSessionSurface,me as outcomeToMark,nt as runWalkSession};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-2SREGETM.js";import"./chunk-IQDWBTRJ.js";import"./chunk-GVIPTX6T.js";import"./chunk-BKM2LWU2.js";import"./chunk-2XMJ6YAE.js";import"./chunk-W6VD2XFO.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-C4G7RVJ6.js";import"./chunk-UR6MHSHU.js";export{a as withTelemetry};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testmuai/kane-cli",
3
- "version": "0.6.11",
3
+ "version": "0.7.1",
4
4
  "description": "KaneAI Terminal UI — browser automation testing agent",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -34,11 +34,11 @@
34
34
  "ws": "^8.20.0"
35
35
  },
36
36
  "optionalDependencies": {
37
- "@testmuai/kane-cli-darwin-arm64": "0.6.11",
38
- "@testmuai/kane-cli-darwin-x64": "0.6.11",
39
- "@testmuai/kane-cli-linux-x64": "0.6.11",
40
- "@testmuai/kane-cli-linux-arm64": "0.6.11",
41
- "@testmuai/kane-cli-win-x64": "0.6.11",
37
+ "@testmuai/kane-cli-darwin-arm64": "0.7.1",
38
+ "@testmuai/kane-cli-darwin-x64": "0.7.1",
39
+ "@testmuai/kane-cli-linux-x64": "0.7.1",
40
+ "@testmuai/kane-cli-linux-arm64": "0.7.1",
41
+ "@testmuai/kane-cli-win-x64": "0.7.1",
42
42
  "@testmuai/kane-cli-node-darwin-arm64": "24.18.0",
43
43
  "@testmuai/kane-cli-node-darwin-x64": "24.18.0",
44
44
  "@testmuai/kane-cli-node-linux-x64": "24.18.0",
@@ -1,8 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Lt,b as ae,c as Ot,d as Je}from"./chunk-RGJIRS3B.js";import{a as _t}from"./chunk-IQODWB32.js";import{a as Ae}from"./chunk-7YPK6EDR.js";import{b as Dt,c as Mt}from"./chunk-GG43HSU2.js";import"./chunk-FMR2KPSK.js";import{a as Bt,b as At,c as Et}from"./chunk-H2W2UNTN.js";import{a as St}from"./chunk-5Y2G4NC7.js";import"./chunk-NVGBE2DR.js";import"./chunk-6W6AIDLJ.js";import"./chunk-6HYW5RFX.js";import"./chunk-J2KSZUOO.js";import"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import{a as Ct}from"./chunk-YCCUBQY4.js";import{a as It}from"./chunk-QJIJC3KC.js";import{b as Rt}from"./chunk-DFS4RMVP.js";import{y as r}from"./chunk-MMPFU2YC.js";import{a as V}from"./chunk-HCBYKLMW.js";import{a as S,b as n,k as Be}from"./chunk-C44QQJR4.js";import{a as Cn}from"./chunk-6YGTRKDT.js";import{e as U}from"./chunk-UR6MHSHU.js";var k=U(Cn(),1);var c=U(V(),1),Bn=60,An=100;function Ye(e,s){let i=e.options.length,a=i,d=e.multi_select?a++:null,g=e.allow_free_text?a++:null,u=s?a++:null;return{optionCount:i,doneIdx:d,freeIdx:g,batchIdx:u,maxSel:a-1}}var En="\xA0",Dn={high:{text:`\u203C${En}high`,color:r.red},med:{text:"med",color:"yellow"},low:{text:"low",color:r.dim}};function Mn(e){let s=(e.header??e.text.split(/\s+/).slice(0,3).join(" ")).trim();return s.length>16?`${s.slice(0,15)}\u2026`:s}function Ln(e,s,i){let a=m=>e[m].length+6,d=a(s),g=s,u=s;for(;;){let m=u+1<e.length?a(u+1):1/0,h=g-1>=0?a(g-1):1/0;if(m===1/0&&h===1/0)break;if(m<=h){if(d+m>i)break;d+=m,u+=1}else{if(d+h>i)break;d+=h,g-=1}}return{lo:g,hi:u}}function Pt({batch:e,qView:s,sel:i=0,focused:a=!1,freeText:d=null,multiSelFor:g}){let{stdout:u}=Be(),m=u?.columns??80,h=m<Bn,I=Math.min(m-1,An),f=Math.max(0,Math.min(e.questions.length-1,s??(e.cursor<0?0:e.cursor))),p=e.questions[f],L=e.resolution[f],A=e.resolution.filter(F=>!F).length,w=e.questions.length-A,R=Ae(e),C=Ye(p,R!==""),v=g?g(f):[],E=Dn[p.risk],x=F=>a&&i===F?(0,c.jsx)(n,{color:r.assuranceAccent,children:"\u276F"}):" ",N=`? the agent needs ${A===1?"one answer":`${A} answers`}`,_=e.questions.length>1?` \xB7 ${f+1} of ${e.questions.length} \xB7 ${w} answered`:"",q=(0,c.jsxs)(S,{flexDirection:"column",children:[(0,c.jsx)(S,{paddingLeft:2,children:(0,c.jsxs)(n,{bold:!0,children:[p.text,E?(0,c.jsx)(n,{color:E.color,bold:!1,children:` ${E.text}`}):null]})}),(0,c.jsx)(S,{paddingLeft:2,children:(0,c.jsx)(n,{color:r.dim,children:p.rationale})}),(0,c.jsx)(n,{children:" "}),p.options.map((F,O)=>{let H=a&&i===O;return(0,c.jsxs)(S,{flexDirection:"column",children:[(0,c.jsxs)(n,{children:[x(O)," ",p.multi_select?(0,c.jsx)(n,{color:v.includes(O)?r.green:r.dim,children:v.includes(O)?"[x] ":"[ ] "}):null,(0,c.jsx)(n,{color:H?r.assuranceAccent:void 0,children:`${O+1}. ${F.label}`}),O===p.recommended_index?(0,c.jsx)(n,{color:r.dim,children:" (recommended)"}):null,L?.selected_index===O?(0,c.jsx)(n,{color:r.dim,children:" (current)"}):null]}),F.detail?(0,c.jsx)(S,{paddingLeft:5,children:(0,c.jsx)(n,{color:r.dim,children:F.detail})}):null]},`o-${O}`)}),p.multi_select&&C.doneIdx!=null?(0,c.jsxs)(n,{children:[x(C.doneIdx)," ",(0,c.jsx)(n,{color:r.green,children:"\u2714"}),(0,c.jsx)(n,{color:a&&i===C.doneIdx?r.assuranceAccent:void 0,children:" done \u2014 confirm selection"})]}):null,p.allow_free_text?(0,c.jsx)(n,{children:" "}):null,p.allow_free_text?d?(0,c.jsxs)(S,{children:[(0,c.jsxs)(n,{children:[(0,c.jsx)(n,{color:r.assuranceAccent,children:"\u276F"})," ",(0,c.jsx)(n,{color:r.dim,children:"\u270E "})]}),(0,c.jsx)(Ct,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:"Tell me what to do"})]}):(0,c.jsxs)(n,{children:[C.freeIdx!=null?x(C.freeIdx):" "," ",(0,c.jsx)(n,{color:a&&C.freeIdx!=null&&i===C.freeIdx?r.assuranceAccent:r.dim,children:"\u270E Tell me what to do"})]}):null]}),de=R!==""?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n,{children:" "}),(0,c.jsxs)(n,{children:[a&&C.batchIdx!=null&&i===C.batchIdx?(0,c.jsx)(n,{color:r.assuranceAccent,children:"\u276F"}):" "," ",(0,c.jsx)(n,{color:r.assuranceAccent,children:"\xBB"}),(0,c.jsx)(n,{bold:!0,color:a&&C.batchIdx!=null&&i===C.batchIdx?r.assuranceAccent:void 0,children:" Go with recommendations"}),A>=5?(0,c.jsx)(n,{color:r.dim,children:` \u2014 resolves all ${A} open`}):null,(0,c.jsx)(n,{color:r.dim,children:" (tab)"})]})]}):null;if(h)return(0,c.jsxs)(S,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,c.jsx)(n,{color:r.assuranceAccent,bold:!0,children:N}),e.questions.length>1?(0,c.jsx)(n,{color:r.dim,children:_.replace(/^ · /,"")}):null,(0,c.jsx)(n,{children:" "}),q,de,(0,c.jsx)(S,{paddingLeft:2,children:(0,c.jsx)(n,{color:r.muted,children:"\u2191\u2193 \u23CE \xB7 \u2190 \u2192 questions \xB7 esc back"})})]});let _e=`\u2500\u2500 ${N}${_} `,Oe=Math.max(2,I-_e.length),me="\u2191\u2193 select \xB7 \u23CE confirm \xB7 \u2190 \u2192 questions \xB7 type = your words \xB7 esc back",ge=`\u2500\u2500 ${me} `,te=Math.max(2,I-ge.length),K=e.questions.map(F=>Mn(F)),D=e.questions.length>1?Ln(K,f,I-8):null;return(0,c.jsxs)(S,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,c.jsxs)(n,{color:r.assuranceAccent,children:["\u2500\u2500 ",(0,c.jsx)(n,{bold:!0,children:N}),_?(0,c.jsx)(n,{color:r.dim,children:_}):null,` ${"\u2500".repeat(Oe)}`]}),D?(0,c.jsx)(S,{marginTop:1,children:(0,c.jsxs)(n,{children:[D.lo>0?(0,c.jsx)(n,{color:r.dim,children:"\u25C0 "}):" ",e.questions.slice(D.lo,D.hi+1).map((F,O)=>{let H=D.lo+O,we=O>0?" ":"";return H===f?(0,c.jsxs)(n,{children:[we,(0,c.jsx)(n,{backgroundColor:r.assuranceAccent,color:"#0d1117",bold:!0,children:` ${K[H]} `})]},F.id):(0,c.jsxs)(n,{children:[we,e.resolution[H]?(0,c.jsxs)(n,{children:[(0,c.jsx)(n,{color:r.green,children:"\u2713 "}),(0,c.jsx)(n,{color:r.dim,children:K[H]})]}):(0,c.jsx)(n,{color:r.dim,children:`\u25CB ${K[H]}`})]},F.id)}),D.hi<e.questions.length-1?(0,c.jsx)(n,{color:r.dim,children:" \u25B6"}):null]})}):null,(0,c.jsx)(n,{children:" "}),q,de,(0,c.jsx)(n,{children:" "}),(0,c.jsxs)(n,{color:r.assuranceAccent,children:["\u2500\u2500 ",(0,c.jsx)(n,{color:r.muted,children:me}),` ${"\u2500".repeat(te)}`]})]})}var M=U(V(),1),qt={high:0,med:1,low:2},_n={high:r.red,med:"yellow",low:r.dim};function On(e){return e.map((s,i)=>({r:s,i})).sort((s,i)=>(qt[s.r.risk??"zz"]??3)-(qt[i.r.risk??"zz"]??3)||s.i-i.i).map(({r:s})=>s)}var ne=(e,s)=>e.length<=s?e:s<=1?"\u2026":`${e.slice(0,s-1)}\u2026`,Ee=(e,s)=>e+" ".repeat(Math.max(0,s-e.length));function Ft({rows:e,width:s=120,badgeHeader:i="risk"}){if(e.length===0)return null;let a=On(e),d=v=>v.staged||!v.id?"(staged)":_t(v.id),g=Math.max(2,...a.map(v=>d(v).length)),u=Math.max(i.length,...a.map(v=>(v.badge??"").length)),m=s>=96&&a.some(v=>v.summary),I=s-(m?13:10)-g-u,f=Math.max(...a.map(v=>Math.max(v.title.length,(v.marker??"").length)),5),p=Math.max(5,m?Math.min(f,Math.max(16,Math.floor(I*.5))):Math.min(f,I)),L=m?Math.max(7,I-p):0,A=(v,E,x,N)=>v+N.map(_=>`\u2500${"\u2500".repeat(_.length)}\u2500`).join(E)+x,w=(v,E,x,N)=>[Ee(ne(v,g),g),Ee(ne(E,p),p),Ee(ne(x,u),u),...m?[Ee(ne(N,L),L)]:[]],R=w("id","title",i,"summary"),C=[];C.push((0,M.jsx)(n,{color:r.dim,children:A("\u250C","\u252C","\u2510",R)},"t")),C.push((0,M.jsxs)(n,{children:[R.map((v,E)=>(0,M.jsxs)(n,{children:[(0,M.jsx)(n,{color:r.dim,children:E===0?"\u2502 ":" \u2502 "}),(0,M.jsx)(n,{bold:!0,children:v})]},E)),(0,M.jsx)(n,{color:r.dim,children:" \u2502"})]},"h")),C.push((0,M.jsx)(n,{color:r.dim,children:A("\u251C","\u253C","\u2524",R)},"m"));for(let[v,E]of a.entries()){let x=w(d(E),ne(E.title,p),ne(E.badge??"",u),ne(E.summary??"",L)),N=E.badgeColor??_n[E.badge??""]??r.dim;if(C.push((0,M.jsxs)(n,{children:[(0,M.jsx)(n,{color:r.dim,children:"\u2502 "}),(0,M.jsx)(n,{color:r.assuranceAccent,children:x[0]}),(0,M.jsx)(n,{color:r.dim,children:" \u2502 "}),x[1],(0,M.jsx)(n,{color:r.dim,children:" \u2502 "}),(0,M.jsx)(n,{color:N,children:x[2]}),m?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(n,{color:r.dim,children:" \u2502 "}),x[3]]}):null,(0,M.jsx)(n,{color:r.dim,children:" \u2502"})]},`r-${v}`)),E.marker){let _=w("",ne(E.marker,p),"","");C.push((0,M.jsx)(n,{color:r.dim,children:`\u2502 ${_.join(" \u2502 ")} \u2502`},`mk-${v}`))}}return C.push((0,M.jsx)(n,{color:r.dim,children:A("\u2514","\u2534","\u2518",R)},"b")),(0,M.jsx)(M.Fragment,{children:C})}var Pn={"use-case":"use-cases",ac:"ACs",scenario:"scenarios",test:"tests",gap:"gaps"},ee=e=>Pn[e]??`${e}s`,Nt=e=>e==="ac"?"AC":e==="use-case"?"use-case":e,Ze=e=>e.kind??"use-case",Wt=e=>`${Ze(e)}:${e.temp_ref}`;function jt(e){let s=e,i=s.badge??e.risk??null,a=s.why??e.summary??e.description??null;return JSON.stringify([e.title,i,a,s.extra??null,e.depends_on_hint??null])}function Ut(e){return e.filter(s=>s.role==="agent"&&typeof s.turnIndex=="number"&&Array.isArray(s.items)&&s.items.length>0)}function se(e){let s=new Map,i=1;for(let g of Ut(e)){let u=new Set;for(let m of g.items){let h=Wt(m);if(u.has(h))continue;u.add(h);let I=s.get(h);s.set(h,{num:I?.num??i++,ref:m.temp_ref,kind:Ze(m),item:m,turnIndex:g.turnIndex,fingerprint:jt(m)})}}let a=[...s.values()].sort((g,u)=>g.num-u.num),d=[];for(let g of a){let u=d.find(m=>m.kind===g.kind);u?u.count++:d.push({kind:g.kind,label:ee(g.kind),count:1})}return{entries:a,byRef:s,counts:d}}function Vt(e,s){let a=Ut(e).find(w=>w.turnIndex===s);if(!a)return null;let d=e.filter(w=>w.role!=="agent"||typeof w.turnIndex!="number"||w.turnIndex<=s),g=se(d),u=se(e.filter(w=>w.role!=="agent"||typeof w.turnIndex!="number"||w.turnIndex<s)),m=[],h=new Map,I=new Map,f=new Map,p=new Set;for(let w of a.items){let R=Wt(w);if(p.has(R))continue;p.add(R);let C=u.byRef.get(R),v=w.changed===!0,E=g.byRef.get(R).num,x=Ze(w);if(C&&!v&&C.fingerprint===jt(w)){h.set(x,(h.get(x)??0)+1);continue}let N=!!C||v,_=N?f:I;_.set(x,(_.get(x)??0)+1),m.push({item:w,num:E,updated:N})}let L=[...h.entries()].map(([w,R])=>({label:ee(w),count:R})),A=[...[...I.entries()].map(([w,R])=>`${R} new ${R===1?Nt(w):ee(w)}`),...[...f.entries()].map(([w,R])=>`${R} updated ${R===1?Nt(w):ee(w)}`)].join(" \xB7 ");return{fresh:m,unchanged:L,headerStats:A}}function et(e,s){let i=e.entries.filter(g=>g.turnIndex===s);if(i.length===0)return e;let a=new Map(i.map(g=>[g.ref,g])),d=[];for(let g of i){let u=d.find(m=>m.kind===g.kind);u?u.count+=1:d.push({kind:g.kind,label:ee(g.kind),count:1})}return{entries:i,byRef:a,counts:d}}var b=U(V(),1);function qn(e){let s=e.form==="assumed"?" (flagged)":e.form==="deferred"?"":" (you)",i=e.note?` \u2014 ${e.note}`:"";return e.form==="deferred"?`\u21B3 deferred q${e.qNum} ${e.stub}${i}`:e.form==="changed"?`\u21B3 changed q${e.qNum} ${e.stub}: ${e.prev??"?"} \u2192 ${e.choice??"?"}${s}${i}`:`\u21B3 ${e.form} q${e.qNum} ${e.stub}: ${e.choice??"?"}${s}${i}`}var Fn=Math.min(process.stdout?.columns??100,120)-2;function Kt({block:e,annotations:s}){switch(e.kind){case"banner":return(0,b.jsx)(S,{marginTop:1,children:(0,b.jsx)(n,{color:r.dim,children:` \u2500\u2500 ${e.text} \u2500\u2500`})});case"user":return(0,b.jsxs)(S,{marginTop:1,children:[(0,b.jsx)(n,{color:r.orange,children:"\u276F "}),(0,b.jsx)(n,{children:e.text})]});case"note":return(0,b.jsx)(n,{color:r.dim,children:` ${e.text}`});case"agent":return(0,b.jsx)(S,{marginTop:1,children:(0,b.jsx)(At,{text:e.text,accent:r.assuranceAccent})});case"thinking":return(0,b.jsx)(S,{marginTop:1,children:(0,b.jsx)(n,{color:r.dim,children:` thought for ${(e.tookMs/1e3).toFixed(1)}s`})});case"tool":return(0,b.jsx)(n,{color:r.dim,children:` ${Dt({name:e.name,status:e.status==="ok"?"done":e.status,detail:e.detail})}`});case"usage":return(0,b.jsx)(n,{color:r.dim,children:` \xB7 ${e.credits.toFixed(1)} credits \u2014 total ${e.total.toFixed(1)}`});case"turn":{let i=s??null,a=i?i.fresh:e.items.map((f,p)=>({item:f,num:p+1,updated:!1})),d={usecase:"risk","use-case":"risk",ac:"check",scenario:"kind",test:"check",gap:"severity",stylenote:"kind"},g=f=>f.kind??"use-case",u=new Map;for(let f of a){let p=f.item,L=g(f.item),A=p.risk==="high"||p.risk==="med"||p.risk==="low"?p.risk:void 0,w={id:p.logical_id??"",staged:!p.logical_id,title:p.title,badge:p.badge??p.risk??"",summary:p.why??p.summary??p.description??"",...A?{risk:A}:{},...f.updated?{marker:"\u21B3 changed"}:{}},R=u.get(L)??[];R.push(w),u.set(L,R)}let m=a.some(f=>!!f.item.kind),h=(i?.unchanged??[]).reduce((f,p)=>f+p.count,0),I=i?.headerStats?` \u2014 ${i.headerStats}${h>0?` (${h} unchanged)`:""}`:"";return(0,b.jsxs)(S,{flexDirection:"column",marginLeft:2,children:[(0,b.jsxs)(n,{bold:!0,children:[m?"design":e.heading,I?(0,b.jsx)(n,{bold:!1,color:r.dim,children:I}):null]}),[...u.entries()].map(([f,p])=>(0,b.jsxs)(S,{flexDirection:"column",children:[u.size>1?(0,b.jsx)(n,{color:r.dim,children:`${ee(f)} \xB7 ${p.length}`}):null,(0,b.jsx)(Ft,{rows:p,width:Fn,badgeHeader:d[f]??"info"})]},f)),i&&i.unchanged.length>0&&(0,b.jsx)(n,{color:r.dim,children:` \u22EE unchanged: ${i.unchanged.map(f=>`${f.count} ${f.label}`).join(" \xB7 ")}`})]})}case"answer":return(0,b.jsx)(n,{color:r.dim,children:qn(e.receipt)});case"continued":return(0,b.jsx)(n,{color:r.dim,children:"\u21B3 continued"});case"commit":return(0,b.jsxs)(S,{flexDirection:"column",children:[(0,b.jsx)(n,{color:e.ok?r.green:r.red,children:` ${e.ok?"\u2714":"\u2717"} ${e.line}`}),(e.warnings??[]).map((i,a)=>(0,b.jsx)(n,{color:r.dim,children:` \u26A0 ${i}`},`w-${a}`))]});case"error":return(0,b.jsxs)(It,{variant:"error",paddingX:1,children:[(0,b.jsx)(n,{color:r.red,children:e.title}),e.detail.map((i,a)=>(0,b.jsx)(n,{color:r.dim,children:i},`d-${a}`))]});case"interrupted":return(0,b.jsxs)(S,{flexDirection:"column",children:[(0,b.jsx)(n,{color:r.red,children:"interrupted \u2014 session not saved"}),e.detail?(0,b.jsx)(n,{color:r.dim,children:e.detail}):null]});case"pause":return(0,b.jsxs)(S,{flexDirection:"column",children:[(0,b.jsx)(n,{children:`paused: session ${e.sid} saved`}),e.expires_at?(0,b.jsx)(n,{color:r.dim,children:`expires: ${e.expires_at}`}):null,(0,b.jsx)(n,{children:`resume: ${e.resume}`}),e.messageForm?(0,b.jsx)(n,{children:`or say something on the way in: ${e.messageForm}`}):null]});case"summary":return(0,b.jsxs)(S,{flexDirection:"column",children:[(0,b.jsx)(n,{bold:!0,children:"session summary"}),e.lines.map((i,a)=>(0,b.jsx)(n,{children:` ${i}`},`s-${a}`))]})}}var ue=U(V(),1);function Qt({item:e}){return(0,ue.jsxs)(S,{flexDirection:"column",marginLeft:2,children:[(e.cite??[]).map((s,i)=>(0,ue.jsx)(n,{dimColor:!0,children:`cite ${s.anchor??"conv"} \u2014 "${s.quote??""}"`},`cite-${i}`)),(e.depends_on_hint??[]).length>0&&(0,ue.jsx)(n,{dimColor:!0,children:`depends on: ${(e.depends_on_hint??[]).join(", ")}`}),Object.entries(e.extra??{}).map(([s,i])=>(0,ue.jsx)(n,{dimColor:!0,children:`${s}: ${i}`},`extra-${s}`))]})}var $=U(V(),1),tt=(e,s)=>Math.max(0,Math.min(s,e));function Me(e,s,i){switch(s.type){case"move":return e.level==="detail"?{...e,scroll:Math.max(0,(e.scroll??0)+s.delta)}:{...e,cursor:tt(e.cursor+s.delta,Math.max(0,i-1))};case"enter":return e.level==="list"?{...e,level:"detail",scroll:0}:e;case"back":return e.level==="detail"?{...e,level:"list",scroll:0}:null}}var Xt={"use-case":"use-cases",ac:"acs",scenario:"scenarios",test:"tests",gap:"gaps"};function zt(e,s){if(e.level==="detail")return{level:"detail",cursor:tt(e.num-1,Math.max(0,s.entries.length-1))};if(e.section){let i=s.entries.findIndex(a=>Xt[a.kind]===e.section);if(i>=0)return{level:"list",cursor:i}}return{level:"list",cursor:0}}function Nn(e){let s=[];for(let i of e.entries){let a=s.find(d=>d.kind===i.kind);a?a.entries.push(i):s.push({kind:i.kind,entries:[i]})}return s}var Ht=3;function Wn({items:e,cursor:s,verb:i,more:a}){let d=`view \xB7 ${i} so far \xB7 ${e.counts.map(u=>`${u.count} ${u.count===1?u.label.replace(/s$/,""):u.label}`).join(" \xB7 ")}`,g=e.entries[s];return(0,$.jsxs)(S,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,$.jsx)(n,{bold:!0,children:d}),Nn(e).map(({kind:u,entries:m})=>{let h=g?.kind===u,I=h?m.findIndex(A=>A.ref===g.ref):-1,f=h?tt(I-1,Math.max(0,m.length-Ht)):0,p=m.slice(f,f+(h?Ht:1)),L=m.length-p.length;return(0,$.jsxs)(S,{flexDirection:"column",children:[(0,$.jsx)(n,{color:r.dim,children:`${Xt[u]??ee(u)} \xB7 ${m.length}`}),p.map(A=>{let w=h&&A.ref===g.ref,R=A.item.badge;return(0,$.jsxs)(n,{children:[(0,$.jsx)(n,{color:r.assuranceAccent,children:w?"\u203A ":" "}),(0,$.jsx)(n,{children:`${A.num} \xB7 ${A.item.title}`}),R?(0,$.jsx)(n,{color:r.dim,children:` \xB7 ${R}`}):null]},`${A.kind}:${A.ref}`)}),L>0&&(0,$.jsx)(n,{color:r.dim,children:` \u22EE ${L} more`})]},u)}),a?(0,$.jsxs)(n,{children:[(0,$.jsx)(n,{color:r.assuranceAccent,children:s===e.entries.length?"\u203A ":" "}),(0,$.jsx)(n,{color:r.dim,children:`\u22EF show all \u2014 ${a.hidden} more from earlier turns`})]}):null,(0,$.jsx)(n,{color:r.dim,children:"\u2191\u2193 move \xB7 \u21B5 detail \xB7 esc back"})]})}var De=14;function jn({items:e,cursor:s,explain:i,grandTotal:a,dossier:d,scroll:g=0}){let u=e.entries[s];if(!u)return(0,$.jsx)(n,{color:r.dim,children:"nothing to show"});if(d){let h=Math.max(0,Math.min(g,Math.max(0,d.lines.length-De))),I=d.lines.slice(h,h+De);return(0,$.jsxs)(S,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,$.jsxs)(n,{bold:!0,children:[`view \xB7 ${d.id}`,d.id.toLowerCase()!==d.rawId?(0,$.jsx)(n,{bold:!1,color:r.dim,children:` \xB7 ${d.rawId}`}):null]}),(0,$.jsx)(n,{bold:!0,children:d.title}),h>0?(0,$.jsx)(n,{color:r.muted,children:`\u22EE ${h} above`}):null,I.map((f,p)=>(0,$.jsx)(n,{color:f.dim?r.dim:void 0,children:f.text},`dl-${p}`)),d.lines.length>h+De?(0,$.jsx)(n,{color:r.muted,children:`\u22EE ${d.lines.length-h-De} more`}):null,(0,$.jsx)(n,{color:r.dim,children:"\u2191\u2193 scroll \xB7 esc back"})]})}let m=u.item;return(0,$.jsxs)(S,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,$.jsx)(n,{bold:!0,children:`view \xB7 ${u.kind} ${u.num} of ${a??e.entries.length}`}),(0,$.jsx)(n,{children:u.item.title}),m.badge?(0,$.jsx)(n,{color:r.dim,children:`kind: ${m.badge}`}):null,m.why?(0,$.jsx)(n,{color:r.dim,children:m.why}):null,(0,$.jsx)(Qt,{item:u.item}),i?.map((h,I)=>(0,$.jsx)(n,{color:r.dim,children:h},`ex-${I}`)),(0,$.jsx)(n,{color:r.dim,children:"view-only \u2014 approvals happen in chat"}),(0,$.jsx)(n,{color:r.dim,children:"\u2191\u2193 prev/next \xB7 esc back to list"})]})}function Gt({items:e,state:s,verb:i,more:a,explain:d,grandTotal:g,dossier:u=null}){return s.level==="list"?(0,$.jsx)(Wn,{items:e,cursor:s.cursor,verb:i,more:a}):(0,$.jsx)(jn,{items:e,cursor:s.cursor,explain:d,grandTotal:g,dossier:u,scroll:s.scroll??0})}var Un={"use-cases":"use-cases",usecases:"use-cases","use-case":"use-cases",acs:"acs",ac:"acs",scenarios:"scenarios",scenario:"scenarios",tests:"tests",test:"tests",gaps:"gaps",gap:"gaps"};function Jt(e){let s=(e??"").trim().toLowerCase();if(!s)return{level:"list"};if(/^\d+$/.test(s)){let a=parseInt(s,10);return a>=1?{level:"detail",num:a}:{error:"items are numbered from 1 \u2014 /view 1"}}let i=Un[s];return i?{level:"list",section:i}:{error:"try /view, /view <number>, or /view acs|scenarios|tests"}}var B=U(V(),1),Vn=6,Yt=12;function Kn(e,s,i){let a=Math.max(20,s),d=[];for(let u of e.split(`
3
- `)){if(u.length<=a){d.push(u);continue}let m="";for(let h of u.split(" "))m&&m.length+1+h.length>a?(d.push(m),m=h):m=m?`${m} ${h}`:h;d.push(m)}let g=Math.max(0,d.length-i);return{body:d.slice(-i).join(`
4
- `),hidden:g}}var Le=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function Zt(e){let s={key:"redesign",label:"re-design from scratch",detail:"replaces the current design"},i={key:"keep",label:"keep the existing design",detail:"back to the list"};return e.designed==="stale"?[{...s,detail:"the use-case changed since it was designed"},i]:[i,s]}function _r({controller:e,verb:s="extract",onCtrlC:i,chain:a=null,inspect:d=null}){let[,g]=(0,k.useState)(0),[u,m]=(0,k.useState)(!1),[h,I]=(0,k.useState)(null),[f,p]=(0,k.useState)(null),L=(0,k.useRef)(null),[A,w]=(0,k.useState)(null),R=(0,k.useRef)(null),C=t=>{R.current=t,w(t)},v=t=>{L.current=t,p(t),t===null&&C(null)},E=(0,k.useRef)([]),[x,N]=(0,k.useState)(null),_=(0,k.useRef)(null),q=t=>{_.current=t,N(t)},de=Rt(),{stdout:_e}=Be(),Oe=_e?.columns??80,me=(0,k.useRef)(0),ge=(0,k.useRef)(0);(0,k.useEffect)(()=>{let t=()=>{let o=e.state.ledger;for(let y=me.current;y<o.length;y++){let T=o[y],P=T.kind==="turn"?Vt(e.state.turns,T.turnIndex):void 0;de.append((0,B.jsx)(Kt,{block:T,annotations:P},`lg-${y}`))}me.current=o.length};t();let l=e.subscribe(()=>{t();let o=e.state;L.current&&(o.pending||o.status==="pausing")&&(v(null),o.pending&&I("questions arrived \u2014 back to chat")),g(y=>y+1)});return g(o=>o+1),l},[e,de]);let{thinking:te,status:K,pending:D,confirm:F,ledger:O,activeTurn:H,stream:we,notice:$e}=e.state,nt=(we?.text??"").trimEnd(),rt=nt.length>0,en=u&&(te.liveThinking.length>0||te.thinkingLog.length>0),tn=Kn(te.liveThinking||te.thinkingLog.map(t=>t.text).join(`
5
- `),Oe-6,Yt),st=rt?nt.split(`
6
- `).slice(-Vn):[];H&&(ge.current=H.turnIndex);let nn=D?D.resolution.filter(t=>!t).length:0,it;for(let t=O.length-1;t>=0;t--){if(E.current.some(o=>o.end!=null&&t>=o.start&&t<o.end))continue;let l=O[t];if(l.kind==="banner"&&!l.text.startsWith("kane")){it=l.text;break}}let fe=te.activity[te.activity.length-1],Pe=fe?fe.status==="decision"?fe.label:Mt({name:fe.name,status:fe.status}):void 0,ot=K==="streaming"||K==="working",[lt,rn]=(0,k.useState)(0);St(()=>rn(t=>t+1),ot||x?.kind==="running"?120:null);let sn=e.state.busySince?Math.floor((Date.now()-e.state.busySince)/1e3):0,on=rt?"Writing\u2026":Pe?`${Pe.charAt(0).toUpperCase()}${Pe.slice(1)}\u2026`:e.state.workingLabel??(s==="design"?"Designing\u2026":"Thinking\u2026"),ln=e.state.turns.some(t=>t.role==="agent"),[cn,an]=(0,k.useState)(0),[un,dn]=(0,k.useState)(!1),[ct,mn]=(0,k.useState)(null),pe=(0,k.useRef)(0),at=(0,k.useRef)(!1),ut=(0,k.useRef)(null),he=t=>{pe.current=t,an(t)},dt=t=>{at.current=t,dn(t)},ie=t=>{ut.current=t,mn(t)},[qe,gn]=(0,k.useState)(0),Q=(0,k.useRef)(0),xe=t=>{Q.current=t,gn(t)},mt=D?D.questions[0]?.id??"b":null;(0,k.useEffect)(()=>{D&&xe(D.cursor<0?0:D.cursor)},[mt,D?.cursor]);let Fe=()=>{let t=z.current;if(!t)return;let l=t.questions.length;for(let o=1;o<=l;o++){let y=(Q.current+o)%l;if(!t.resolution[y]){xe(y);return}}},gt=D?D.questions[Math.max(0,Math.min(D.questions.length-1,qe))]:void 0,X=(0,k.useRef)(gt);X.current=gt;let z=(0,k.useRef)(D);z.current=D;let fn=D?`${mt}:${qe}`:null;(0,k.useEffect)(()=>{if(ie(null),X.current){dt(!0);let t=z.current?.resolution[Q.current]?.selected_index;he(t??X.current.recommended_index??0)}else dt(!1)},[fn]);let ve=t=>{let l=z.current;return Ye(t,l?Ae(l)!=="":!1)},pn={isFocused:()=>at.current&&X.current!=null&&ut.current==null||_.current!=null&&_.current.kind!=="running"||G.current&&$t.current==null,onMove:t=>{let l=X.current;if(l){he(Math.max(0,Math.min(ve(l).maxSel,pe.current+t)));return}let o=_.current;if(o?.kind==="picker"){q({...o,sel:Math.max(0,Math.min(o.items.length-1,o.sel+t))});return}if(o?.kind==="ask"||o?.kind==="confirm"||o?.kind==="failed"){let y=(o.kind==="ask"?Ie.current.length:o.kind==="failed"?Re.current.length:2)-1;q({...o,sel:Math.max(0,Math.min(y,o.sel+t))});return}o&&!G.current||G.current&&le(Math.max(0,Math.min(Te.current.length-1,ze.current+t)))},onSelect:()=>{let t=X.current,l=z.current;if(!t||!l){let T=_.current;if(T?.kind==="picker"){let W=T.items[T.sel];W&&(W.designed?q({kind:"confirm",item:W,sel:0}):Ke(W,!1));return}if(T?.kind==="confirm"){Zt(T.item)[T.sel]?.key==="redesign"?Ke(T.item,!0):Ve();return}if(T?.kind==="ask"){let W=Ie.current[T.sel]?.key;W==="another"?Ve():W==="view"?Ge(""):q(null);return}if(T?.kind==="failed"){let W=Re.current[T.sel]?.key;W==="retry"?Ke(T.item,T.force):W==="view"?Ge(""):q(null);return}if(T&&!G.current||!G.current)return;switch(Te.current[ze.current]?.key){case"finish":e.completeSession();return;case"continue":e.continueParked();return;case"design-chain":Ve();return;case"view":Ge("",ge.current);return;case"free":ce("");return}return}let o=ve(t),y=pe.current;if(o.batchIdx!=null&&y===o.batchIdx){e.goWithRecommendations();return}if(o.freeIdx!=null&&y===o.freeIdx){ie("");return}if(o.doneIdx!=null&&y===o.doneIdx){e.confirmMulti(Q.current),Fe();return}if(t.multi_select){e.toggleOption(Q.current,y);return}e.submitAnswer(Q.current,y),Fe()},onLeft:()=>{z.current&&xe(Math.max(0,Q.current-1))},onRight:()=>{let t=z.current;t&&xe(Math.min(t.questions.length-1,Q.current+1))},onDigit:t=>{let l=X.current;if(l){t-1<l.options.length&&he(t-1);return}let o=_.current;if(o?.kind==="picker"){t-1<o.items.length&&q({...o,sel:t-1});return}if(o?.kind==="ask"){t-1<Ie.current.length&&q({...o,sel:t-1});return}if(o?.kind==="failed"){t-1<Re.current.length&&q({...o,sel:t-1});return}if(o?.kind==="confirm"){t-1<2&&q({...o,sel:t-1});return}if(!(o&&!G.current)&&G.current){let y=Te.current,T=0;for(let P=0;P<y.length;P++)if(!y[P].free&&(T+=1,T===t)){le(P);return}}},isMulti:()=>{let t=X.current;return!!t?.multi_select&&pe.current<(t?.options.length??0)},onSpace:()=>{z.current&&e.toggleOption(Q.current,pe.current)},onTab:()=>{let t=X.current;if(!t)return;let l=ve(t);l.batchIdx!=null&&he(l.batchIdx)},onType:t=>{let l=X.current;if(l){if(!l.allow_free_text)return;let o=ve(l);he(o.freeIdx??0),ie(t);return}if(!(_.current&&!G.current)&&G.current){let o=Lt(Te.current);if(o==null)return;le(o),ce(t)}},onBack:()=>{let t=_.current;if(t&&t.kind!=="running"){q(null);return}let l=z.current;if(l){for(let o=Q.current-1;o>=0;o--)if(l.resolution[o]){xe(o);return}}}},hn=ct!=null?{value:ct,onChange:t=>ie(t),onSubmit:t=>{ie(null),t.trim()&&z.current&&(e.submitFreeText(Q.current,t),Fe())},onCancel:()=>ie(null)}:null,ft=i??(()=>e.requestPause()),re=e.state.checkpoint,ke=x?.kind==="running"&&K==="idle",be=K==="idle"&&ln&&!D&&!f&&(!x||ke),G=(0,k.useRef)(!1);G.current=be;let J=se(e.state.turns).entries.length,ye,Y;for(let t=O.length-1;t>=0;t--){if(E.current.some(o=>o.end!=null&&t>=o.start&&t<o.end))continue;let l=O[t];if(!ye&&l.kind==="commit"&&l.ok&&(ye=l.line),!Y&&l.kind==="banner"&&l.text.startsWith("designing: ")&&(Y=l.text.slice(11)),ye&&Y)break}let Ne;for(let t=O.length-1;t>=0;t--){let l=O[t];if(l.kind==="user")break;if(l.kind==="commit"&&l.ok&&/\bapplied\b/.test(l.line)){Ne=l.line;break}}let Z=Y?{"acceptance criteria":"scenarios",scenarios:"acceptance criteria + exercises","acceptance criteria + exercises":"tests + gaps"}[Y]:void 0,pt={"acceptance criteria":"the promises every path of this use-case must keep",scenarios:"the concrete user journeys that exercise those promises","acceptance criteria + exercises":"the wiring pass \u2014 per-journey checks, tied to the promises each journey exercises","tests + gaps":"runnable browser tests \u2014 anything unautomatable is recorded as a gap"},ht=Y?pt[Y]:void 0,xt=Z?pt[Z]:void 0,xn="phases: acceptance criteria \u2192 scenarios \u2192 wiring \u2192 tests \xB7 stop anytime with finish",kn=(()=>{for(let t=O.length-1;t>=0;t--){let l=O[t];if(l.kind==="agent")return l.text}return null})(),oe=/\?\s*$/.test((kn??"").trimEnd()),kt=s==="design"&&!re&&(oe||Z!==void 0),bt=Y==="tests + gaps",Se=x?.kind==="running"?x.title:"the design",yt=!!e.state.error&&!e.senderAlive(),bn=F?"the agent needs a clarification before it can apply that":ke&&!re?oe?`${Se} \u2014 the agent asked a question`:Ne?`${Se} \u2014 ${Ne}`:bt?`${Se} \u2014 design complete`:`${Se} \u2014 the agent is waiting on you`:re?Y?`${Y} done${Z?` \u2014 next: ${Z}`:""}`:ye??"phase done":yt?"the agent stopped \u2014 the session is view-only":kt?oe?"the agent asked a question \u2014 answer or continue":`design incomplete \u2014 ${Z} not started`:ye??"waiting on you",We=F?[{key:"free",label:"clarify \u2014 type which one you meant",free:!0}]:ke&&!re?bt&&!oe?[{key:"finish",label:"finish this design"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"free",label:"reply \u2014 tell the agent what to change",free:!0}]:[{key:"continue",label:oe?"continue \u2014 go with your suggestion":"continue designing"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"finish",label:"finish this design"},{key:"free",label:"reply \u2014 tell the agent what to change",free:!0}]:re?[{key:"continue",label:Z?`continue to ${Z}`:"continue"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"finish",label:"finish here"},{key:"free",label:"adjust \u2014 tell me what to change",free:!0}]:yt?[...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"free",label:"tell me what to change",free:!0}]:kt?[{key:"continue",label:oe?"continue \u2014 go with your suggestion":`continue \u2014 ${Z} next`},...J>0?[{key:"view",label:"view the design"}]:[],{key:"finish",label:"finish anyway"},{key:"free",label:"reply \u2014 answer and continue",free:!0}]:[{key:"finish",label:s==="design"?"finish":"looks good \u2014 finish the session"},...a?[{key:"design-chain",label:"design tests for a use-case\u2026"}]:[],...J>0?[{key:"view",label:s==="design"?"view the design":`view the ${J} draft${J===1?"":"s"}`}]:[],{key:"free",label:s==="design"?"keep adjusting \u2014 tell me what to change":"tell me what to change",free:!0}],je=[{key:"another",label:"design another use-case\u2026"},...J>0?[{key:"view",label:"view what was designed"}]:[],{key:"back",label:"done \u2014 back"}],Ie=(0,k.useRef)(je);Ie.current=je;let Ue=[{key:"retry",label:"try again"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"back",label:"back"}],Re=(0,k.useRef)(Ue);Re.current=Ue;let Ve=()=>{let t=a?.listUcs()??[];if(t.length===0){I("no use-cases to design yet");return}q({kind:"picker",items:t,sel:0})},Ke=(t,l)=>{let o={start:e.state.ledger.length,end:null};E.current.push(o);let y=()=>{o.end=e.state.ledger.length};q({kind:"running",title:t.title,item:t,force:l,startedAt:Date.now()}),a.runDesignChild(t.key,l).then(T=>{y(),T===0?(e.ledger({kind:"commit",ok:!0,line:`designed ${t.title}`}),q({kind:"ask",title:t.title,sel:0})):(e.ledger({kind:"commit",ok:!1,line:`design for ${t.title} failed \u2014 child exited ${T}`}),q({kind:"failed",item:t,force:l,detail:`child exited ${T}`,sel:0}))}).catch(T=>{y();let P=T instanceof Error?T.message:String(T);e.ledger({kind:"commit",ok:!1,line:`design for ${t.title} failed \u2014 ${P}`}),q({kind:"failed",item:t,force:l,detail:P,sel:0})})},Te=(0,k.useRef)(We);Te.current=We;let Qe=be&&re&&ht!==void 0,He=E.current.find(t=>t.end==null)?.start??"top",Tt=(0,k.useRef)(new Set),[yn,wt]=(0,k.useState)(!1);(0,k.useEffect)(()=>{Qe?Tt.current.has(He)||(Tt.current.add(He),wt(!0)):wt(!1)},[Qe,He]);let Tn=Qe?[...yn?[xn]:[],`${ht}${xt?` \xB7 next: ${xt}`:""}`]:[],[wn,$n]=(0,k.useState)(0),[Xe,vn]=(0,k.useState)(null),ze=(0,k.useRef)(0),$t=(0,k.useRef)(null),le=t=>{ze.current=t,$n(t)},ce=t=>{$t.current=t,vn(t)},Sn=`${be}:${re}:${ge.current}`;(0,k.useEffect)(()=>{le(0),ce(null)},[Sn]);let In=Xe!=null?{value:Xe,onChange:t=>ce(t),onSubmit:t=>{ce(null),le(0);let l=t.trim();l&&(I(null),e.submit(l))},onCancel:()=>{ce(null),le(0)}}:null,Ge=(t,l)=>{if(/^(uc|sc|ac|t|gap|sty)-\d+$/i.test(t.trim())){let P=t.trim().toLowerCase(),Ce=se(e.state.turns).entries.findIndex(j=>(j.item.logical_id??"").toLowerCase()===P);if(Ce<0){I(`${t.trim().toUpperCase()} isn't in this session's items \u2014 view lists what this session minted`);return}v({level:"detail",cursor:Ce,scroll:0}),C(null);return}let o=Jt(t);if("error"in o){I(o.error);return}let y=se(e.state.turns);if(y.entries.length===0){I("nothing proposed yet \u2014 the first turn is still coming");return}if(o.level==="detail"&&o.num>y.entries.length){I(`no item ${o.num} \u2014 the set has ${y.entries.length} item${y.entries.length===1?"":"s"}`);return}let T=l!=null?et(y,l):y;v(zt(o,T)),C(l!=null&&T.entries.length<y.entries.length?l:null)},vt=(0,B.jsx)(Ot,{verb:s,subject:it,pendingCount:nn,creditsTotal:e.state.credits?.total,state:ke?"waiting on you":D||be||f||x&&x.kind!=="running"?"idle":void 0});if(f){let t=se(e.state.turns),l=A!=null?et(t,A):t,o=t.entries.length-l.entries.length,y=f.level==="list"&&o>0,T=l.entries.length+(y?1:0),P=l.entries[f.cursor],W=f.level==="detail"&&P?e.explainLines(P.item.slug??P.item.temp_ref):null,Ce=f.level==="detail"&&P&&d?d(P.item.logical_id??e.aliasOf(P.item.temp_ref)??P.item.temp_ref):null;return(0,B.jsxs)(S,{flexDirection:"column",children:[(0,B.jsx)(Je,{onToggleThinking:()=>m(j=>!j),onCtrlC:ft,explorer:{isOpen:()=>L.current!==null,onMove:j=>v(L.current&&Me(L.current,{type:"move",delta:j},T)),onEnter:()=>{let j=L.current;if(j){if(j.level==="list"&&y&&j.cursor===l.entries.length){C(null);return}v(Me(j,{type:"enter"},T))}},onBack:()=>{v(L.current&&Me(L.current,{type:"back"},T)),setTimeout(()=>g(j=>j+1),0)}}}),(0,B.jsx)(Gt,{items:l,state:f,verb:s,more:y?{hidden:o}:null,explain:W,grandTotal:t.entries.length,dossier:Ce}),($e??h)&&($e??h).split(`
7
- `).map((j,Rn)=>(0,B.jsx)(n,{color:r.orange,children:j},`nt-${Rn}`)),vt]})}return(0,B.jsxs)(S,{flexDirection:"column",children:[(0,B.jsx)(Je,{onToggleThinking:()=>m(t=>!t),onCtrlC:ft,panel:pn}),en&&(0,B.jsx)(Et,{thinking:tn.body,expanded:!0,thinkingDone:K!=="streaming",maxLines:Yt+1}),st.length>0&&(0,B.jsx)(S,{flexDirection:"column",children:st.map((t,l)=>(0,B.jsx)(n,{children:Bt(t).map((o,y)=>(0,B.jsx)(n,{bold:o.bold,italic:o.italic,color:o.code?r.dim:void 0,children:o.text},y))},`st-${l}`))}),D&&(0,B.jsx)(Pt,{batch:D,qView:qe,sel:cn,focused:un,freeText:hn,multiSelFor:t=>e.multiSelection(t)}),F&&(0,B.jsx)(n,{color:"yellow",children:F.prompt}),($e??h)&&($e??h).split(`
8
- `).map((t,l)=>(0,B.jsx)(n,{color:r.orange,children:t},`nt-${l}`)),ot&&!D&&(0,B.jsxs)(n,{color:r.assuranceAccent,children:[`${Le[lt%Le.length]} ${on} `,(0,B.jsx)(n,{color:r.dim,children:`(${sn}s)`})]}),be&&(0,B.jsx)(ae,{headline:bn,rows:We,sel:wn,focused:Xe==null,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 type = your own words",freeText:In,sublines:Tn}),x?.kind==="picker"&&(0,B.jsx)(ae,{ask:!0,headline:"design tests for which use-case?",rows:x.items.map(t=>({key:t.key,label:t.title,detail:t.badge})),sel:x.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),x?.kind==="confirm"&&(0,B.jsx)(ae,{ask:!0,headline:`${x.item.title} is already designed${x.item.designed==="stale"?" \u2014 and the use-case has changed since":""}`,rows:Zt(x.item).map(t=>({key:t.key,label:t.label,detail:t.detail})),sel:x.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),x?.kind==="running"&&!ke&&(0,B.jsxs)(n,{color:r.assuranceAccent,children:[`${Le[lt%Le.length]} Designing ${x.title}\u2026 `,(0,B.jsx)(n,{color:r.dim,children:`(${Math.floor((Date.now()-x.startedAt)/1e3)}s)`})]}),x?.kind==="ask"&&(0,B.jsx)(ae,{headline:`designed ${x.title}`,rows:je,sel:x.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),x?.kind==="failed"&&(0,B.jsx)(ae,{headline:`design failed \u2014 ${x.item.title} (${x.detail})`,rows:Ue,sel:x.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),K==="pausing"&&(0,B.jsx)(n,{color:r.dim,children:"pausing \u2014 saving session\u2026 (ctrl+c again = force quit)"}),vt]})}export{_r as ChatSurface,Kn as tailVisualRows};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-NUQ423YE.js";import"./chunk-RFHMDQXZ.js";import"./chunk-JXKRO2ZJ.js";import"./chunk-FCMLIK7P.js";import"./chunk-CJJXT5DO.js";import"./chunk-QM4S2APK.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-7E24OCGX.js";import"./chunk-FRBYGSGJ.js";import"./chunk-6W6AIDLJ.js";import"./chunk-6HYW5RFX.js";import"./chunk-J2KSZUOO.js";import"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-KHJXOFDM.js";import"./chunk-MMPFU2YC.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as EvidenceViewOffer};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-ICGHBZFZ.js";import"./chunk-MFOH7EYR.js";import"./chunk-ZNHXIRCM.js";import"./chunk-TDPWFYTJ.js";import"./chunk-3AZTXJY4.js";import"./chunk-4CJ55EUY.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-L5LI2JF4.js";import"./chunk-GLA6QL3T.js";import"./chunk-SURF5Z7Y.js";import"./chunk-YCCUBQY4.js";import"./chunk-GIMTSDNC.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-KHJXOFDM.js";import"./chunk-VE3SUJMA.js";import"./chunk-LHDNJJGE.js";import"./chunk-KXUSG5ZI.js";import"./chunk-MMPFU2YC.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{g as a}from"./chunk-NTNAHN25.js";import"./chunk-OGWC3J3C.js";import"./chunk-YSSTGJ7O.js";import"./chunk-TDPWFYTJ.js";import"./chunk-3AZTXJY4.js";import"./chunk-XXMNUJX4.js";import"./chunk-5Y2G4NC7.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-KHJXOFDM.js";import"./chunk-7MRBMDZ5.js";import"./chunk-QJIJC3KC.js";import"./chunk-DFS4RMVP.js";import"./chunk-MMPFU2YC.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as TestMdRunView};
@@ -1,6 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as w}from"./chunk-55Y65VPA.js";import"./chunk-3RZ63RBO.js";import"./chunk-KHU7C6EE.js";import"./chunk-MR7CX5VT.js";import"./chunk-J44RN3FB.js";import"./chunk-JFAFKHDX.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-3C5GMAM4.js";import"./chunk-GG43HSU2.js";import"./chunk-FMR2KPSK.js";import"./chunk-DNNZ353O.js";import"./chunk-FHKDTM5L.js";import"./chunk-ZPDM6FO7.js";import{a as u}from"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-L5LI2JF4.js";import"./chunk-7E24OCGX.js";import"./chunk-FRBYGSGJ.js";import"./chunk-6W6AIDLJ.js";import"./chunk-6HYW5RFX.js";import"./chunk-J2KSZUOO.js";import"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import"./chunk-5EOX4MEY.js";import"./chunk-MMPFU2YC.js";import"./chunk-UR6MHSHU.js";import{existsSync as y}from"fs";var O=new Set(["interactive","agent","ci","override"]);function C(e){return e.mode!=null&&!O.has(e.mode)?{error:`design: --mode must be interactive | agent | ci | override, got '${e.mode}'`}:e.strength!=null&&e.strength!=="pairwise"&&e.strength!=="3-wise"?{error:`design: --strength must be pairwise | 3-wise, got '${e.strength}'`}:e.max!=null&&(!Number.isInteger(e.max)||e.max<1)?{error:"design: --max must be a positive integer"}:!e.useCase&&!e.resume?{error:"design: --use-case is required (or --resume <sid> \u2014 the session remembers its use-case)"}:{useCase:e.useCase,max:e.max,strength:e.strength,mode:e.mode,force:e.force,resume:e.resume,plan:e.plan,message:e.message,because:e.because,changeDelta:e.changeDelta,priorDesign:e.priorDesign}}async function _(e){let g=async(r,n)=>{if(process.stderr.write(r+`
3
- `),e.mode!=="agent")return 2;let{makeHeadlessIO:i,agentRefusal:o}=await import("./headless-io-PWW6YKH2.js");return o(i("ndjson","design"),r,n)},m=C(e);if("error"in m)return g(m.error);let a=m;{let{validateResumeMessage:r}=await import("./headless-io-PWW6YKH2.js"),n=r(a,"design");if(n)return g(n)}if(!y(u(process.cwd())))return g("error: no context store here (run `kane-cli context ingest` + `kane-cli context extract` first)","NO_STORE");let t=null;try{if(!a.mode&&!process.stdin.isTTY)return process.stderr.write(`design: no TTY \u2014 pass an explicit --mode agent|ci|override to run headless
4
- `),2;let r=a.mode??"interactive";if(r==="interactive"){if(!process.stdin.isTTY||!process.stdout.isTTY)return process.stderr.write(`design: --mode interactive needs a TTY on stdin and stdout (use --mode agent|ci|override headless)
5
- `),2;let{bindDesignInteractive:s}=await import("./interactive-bind-53FCRK34.js");return await s(a)}let{resolveAgentAuthEnv:n}=await import("./spawner-7KXVKAD5.js"),{runAgent:i}=await import("./bridge-QCMEOQDD.js"),{preflightTurn:o}=await import("./turn-preflight-JGYT7LXP.js"),{makeInterruptGuard:h}=await import("./interrupt-guard-UREUWNRL.js"),{baseUrlAdvisory:v}=await import("./turn-preflight-JGYT7LXP.js"),{makeHeadlessIO:T,resolveEncoding:x,guardedChannels:D}=await import("./headless-io-PWW6YKH2.js");t=T(x(r),"design");let{telemetryBootstrap:b,telemetryEnvName:E}=await import("./bootstrap-566PPFCC.js"),c=b({verb:"design",mode:r,contextRoot:u(process.cwd()),env:E(),resumeSid:a.resume,write:!0,longSession:!0}),l={...await n(),...c.spawnEnv()},p=v();p&&t.out(p);let d=h(i,s=>t.out(s)),f=D(t,()=>d.interrupted(),/^error: (design agent failed|the design agent ended)/);try{let s=await w({...a,mode:r},{contextDir:u(process.cwd()),agent:d.agent,preflightTurn:()=>o(l),ask:async()=>[],out:f.out,emit:f.emit,progress:t.progress,isTTY:!1,auth:l,telemetry:c});return d.interrupted()&&s!==3?(t.out("interrupted \u2014 no session saved"),await c.end({exit_code:130}),t.done(130)):(s===1&&t.out(c.supportFooter()),await c.end({exit_code:s}),t.done(s))}finally{d.dispose()}}catch(r){let n=r instanceof Error?r.message:String(r);t?.event({type:"error",message:`error: design failed: ${n}`});let i=t?o=>t.out(o):o=>process.stderr.write(o+`
6
- `);return i(`error: design failed: ${n}`),(process.env.ASSURANCE_LOG_LEVEL??"").toLowerCase()==="debug"&&r instanceof Error&&r.stack&&i(r.stack),i("hint: per-run trace logs live under .context/logs/ (design-*.log)"),t?t.done(1):1}}export{_ as designTestsCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-73OQDAXF.js";import"./chunk-FHKDTM5L.js";import"./chunk-2XMJ6YAE.js";import"./chunk-BKM2LWU2.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-MMPFU2YC.js";import"./chunk-UR6MHSHU.js";export{b as telemetryBootstrap,a as telemetryEnvName};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-M5PJQ5Y3.js";import"./chunk-HLRLP6TQ.js";import"./chunk-UR6MHSHU.js";export{a as runAgent};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as V,c as te}from"./chunk-JFAFKHDX.js";import{a as ne}from"./chunk-427OQS2N.js";import{a as w,b as ee}from"./chunk-FMR2KPSK.js";import{d as Z}from"./chunk-NVGBE2DR.js";import{a as X}from"./chunk-7E24OCGX.js";import"./chunk-FRBYGSGJ.js";import{c as Y,d as z,n as Q}from"./chunk-6W6AIDLJ.js";import{a as j,b as F}from"./chunk-6HYW5RFX.js";import{c as J,e as W}from"./chunk-J2KSZUOO.js";import{e as L,f as A,g as P,h as x}from"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import"./chunk-UR6MHSHU.js";var de=new Set(["approve","edit","reject"]);function ye(k){let{contextDir:f,graph:s,ops:oe,by:l}=k,N=k.mintable??ne(),T=J(f);if(s.latestHash!==T)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(s.latestHash)} but chain head is ${String(T)} \u2014 re-open and retry`}]};let C=[],h=[],M=new Set;for(let e of oe){if(s.appliedEvents.has(e.eventId)||M.has(e.eventId)){C.push(e.eventId);continue}M.add(e.eventId),h.push(e)}if(h.length===0)return{record:null,errors:null,applied:[],skipped:C,minted:[],staleDelta:[]};let o=[],$=[],y=[],m=[],I=[],O=[],_=[...k.judgements??[]],D=[],q=new Map,B=new Set,G=[],b=new Set,se=new Set(N),H=new Set;for(let e of h){if(!de.has(e.kind))continue;let n=e.target,t=s.resolve(n)?.cid??n;H.has(t)&&o.push({code:"MULTIPLE_TERMINAL_OPS",detail:`${n} has more than one terminal op in this turn \u2014 normalize latest-wins first`}),H.add(t)}let E=(e,n,t)=>{let i=s.resolve(n);if(!i)return o.push({code:"UNKNOWN_NODE",detail:`${e}: ${n} names nothing in the graph`}),null;let p=s.tipOf(i.cid);return p!==t||s.superseded.has(t)?(o.push({code:"EXPECTED_CID_MOVED",detail:`${e}: ${n} moved or was archived since it was displayed`,data:{tip:p}}),null):t};for(let e of h)if(e.kind==="approve"){let n=E("approve",e.target,e.expectedCid);n&&m.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l})}else if(e.kind==="reject"){let n=E("reject",e.target,e.expectedCid);if(!n)continue;if(m.push({id:n,kind:"review-item",resolution:"rejected",edit:null,reason:e.reason,by:l}),e.redirectTo!==void 0){let t=s.resolve(e.redirectTo);if(!t||t.superseded){o.push({code:"UNKNOWN_NODE",detail:`reject.redirectTo: ${e.redirectTo} is not a live node`});continue}I.push({kind:"node",old:n,new:t.cid,reason:e.reason,by:l})}}else if(e.kind==="edit"){let n=E("edit",e.target,e.expectedCid);if(!n)continue;let t=s.getNode(n);if(!t){o.push({code:"UNKNOWN_NODE",detail:`edit: ${e.target} node file unreadable`});continue}let i={...t.content};for(let[c,u]of Object.entries(e.edit))u!==void 0&&(i[c]=u);if(typeof i.title=="string"&&!i.title.trim()){o.push({code:"EMPTY_TITLE",detail:`edit: ${e.target} edited title is empty`});continue}let p=A(t.label,i);if(p.length>0){for(let c of p)o.push({code:c.code,detail:`edit ${e.target}: ${c.detail}`});continue}let d=j(t.label,i);if(d===n){m.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l});continue}$.push({cid:d,label:t.label,content:i}),I.push({kind:"node",old:n,new:d,reason:e.reason??"edited in chat",by:l}),m.push({id:d,kind:"review-item",resolution:"edited",edit:{...e.edit},reason:null,by:l})}else if(e.kind==="enhance"){if(!E("enhance",e.target,e.expectedCid))continue;for(let t of e.edges){let i=s.nodeLabel.get(t.src)??"(unknown)",p=s.nodeLabel.get(t.dst)??"(unknown)";for(let r of x(t.type,i,p,t.props))o.push({code:r.code,detail:`enhance ${e.target}: ${r.detail}`});let d=F(t.type,t.src,t.dst,t.props);if(s.edgesFrom(t.src).some(r=>r.ecid===d)||y.some(r=>r.ecid===d))continue;let c=Y(s,t.type,t.src,t.dst,G);c&&o.push(c);let u=z(s,t.type,t.src,t.dst);u&&o.push(u);let a=P(t.type)?.cardinality;if(a==="one-live-per-src"||a==="one-live-per-src-and-dst"){let r=`${t.type}|${t.src}`;b.has(r)&&o.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} from ${t.src}: two one-live edges in one turn`}),b.add(r)}if(a==="one-live-per-src-and-dst"){let r=`${t.type}|dst|${t.dst}`;b.has(r)&&o.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} onto ${t.dst}: two one-live edges in one turn (strict 1:1)`}),b.add(r)}y.push({ecid:d,type:t.type,src:t.src,dst:t.dst,props:t.props}),G.push({src:t.src,dst:t.dst,type:t.type})}}else if(e.kind==="add"){if(!se.has(e.label)){o.push({code:"GATED_LABEL",detail:`add: ${e.label} is not mintable in v1 (gate: ${N.join("|")})`,data:{gate:[...N]}});continue}let n=s.heads.get(e.convSourceId),t=s.convChains.get(e.convSourceId);if(typeof n!="string"||!t){o.push({code:"CONV_SOURCE_MISSING",detail:`add: ${e.convSourceId} is not a live conversation source`});continue}let i=s.getNode(n)?.content?.blob,p=typeof i=="string"?Z(f,i)?.toString("utf8")??"":"",d=ee(p,e.cite.turn);if(d===null){o.push({code:"BAD_ANCHOR",detail:`add: ${w(e.cite.turn)} does not resolve in ${e.convSourceId}`});continue}if(!d.includes(e.cite.quote)){o.push({code:"QUOTE_MISMATCH",detail:`add: quote is not verbatim within ${w(e.cite.turn)}`});continue}let c={...e.content,derived:!0},u=A(e.label,c);if(u.length>0){for(let g of u)o.push({code:g.code,detail:`add: ${g.detail}`});continue}let a=j(e.label,c),r={source_id:e.convSourceId,source_cid:n,anchor:w(e.cite.turn),quote:e.cite.quote};for(let g of x(L.DERIVES,"source",e.label,r))o.push({code:g.code,detail:`add: ${g.detail}`});$.push({cid:a,label:e.label,content:c}),y.push({ecid:F("DERIVES",n,a,r),type:L.DERIVES,src:n,dst:a,props:r}),e.rationale&&_.push({about:a,rationale:e.rationale,by:l});let v=Q(e.label,g=>B.has(g),s.names.keys());v!==null&&(B.add(v),O.push({cid:a,slug:v,by:l})),D.push({cid:a,...v!==null?{slug:v}:{}}),q.set(e.eventId,a)}if(o.length)return{record:null,errors:o};let U=new Date().toISOString();for(let e of h){if(e.kind==="add"){let n=q.get(e.eventId);n&&V(f,{ts:U,command:"extract-chat",id:n,verdict:"add",polarity:"preference",tag:e.label,by:l,event_id:e.eventId,target:n});continue}for(let n of te(e,{ts:U,command:"extract-chat",by:l}))V(f,n)}let K=h.map(e=>e.eventId).sort(),re=W(f,{ts:new Date().toISOString(),proposal_id:null,nodes:$,edges:y,review:m,supersessions:I,...O.length>0?{names:O}:{},..._.length>0?{judgements:_}:{},event_ids:K,source_head_moves:{}},{expectPrev:T}),R=X(f),S=new Set;for(let e of I)if(e.kind==="node"){S.add(e.old);for(let n of R.edgesInto(e.old))S.add(n.src)}for(let e of D)S.add(e.cid);let ie=[...S].map(e=>({cid:e,state:R.stale(R.tipOf(e))})).filter(e=>e.state!=="fresh");return{record:re.record,errors:null,applied:K,skipped:C,minted:D,staleDelta:ie}}export{ye as commitChatTurn};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-7YPK6EDR.js";import"./chunk-GG43HSU2.js";import"./chunk-FMR2KPSK.js";import"./chunk-NVGBE2DR.js";import"./chunk-6HYW5RFX.js";import"./chunk-J2KSZUOO.js";import"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import"./chunk-UR6MHSHU.js";export{c as makeChatController,b as questionStub,a as recommendationPicks};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as g}from"./chunk-5YPBPZUR.js";function $(s,n){let t=null;for(let[i,e]of s.designOf)i!==n&&s.tipOf(i)!==n||(t==null||e.seq>t.seq)&&(t={...e,designed_at_cid:i});return t}function v(s,n){let t=new Map;for(let[c,o]of s.superseded)o!=null&&t.set(o,c);let i=[n],e=n;for(;t.has(e);)e=t.get(e),i.unshift(e);return i}function h(s,n,t){let i=s.resolve(n);if(!i){let r=[...s.names.keys()].filter(m=>m.startsWith("uc-")).sort().slice(0,6);return{ok:!1,code:2,message:`unknown use-case '${n}' \u2014 no live node by that logical id or cid${r.length?` (known: ${r.join(", ")})`:""}`}}let e=i.tip;if(s.superseded.has(e)&&s.superseded.get(e)===null)return{ok:!1,code:2,message:`use-case '${n}' was removed (tombstoned) \u2014 nothing to design`};let c=s.nodeLabel.get(e);if(c!==g.USECASE)return{ok:!1,code:2,message:`'${n}' is a ${c??"missing node"}, not a use-case \u2014 design runs per use-case`};let o=s.nameOf.get(e)??s.nameOf.get(i.cid)??e.slice(0,19);if(s.trust.get(e)==="archived"){let r=s.archivedReason.get(e);return{ok:!1,code:2,message:`use-case '${o}' is archived${r?` (${r})`:""} \u2014 design runs only over live use-cases`}}let d=$(s,e);if(d==null||t)return{ok:!0};let a=v(s,e),l=a.length;if(d.designed_at_cid===e)return{ok:!1,code:2,message:`'${o}' is already designed @ v${l} \u2014 current; use --force to redesign`};let u=a.indexOf(d.designed_at_cid),f=u>=0?`v${u+1}`:"an earlier version";return{ok:!1,code:2,message:`'${o}' was designed @ ${f} \u2014 the use-case is now @ v${l} (STALE); use --force to redesign`}}export{$ as a,h as b};
@@ -1,5 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as S,b as A,d as P}from"./chunk-GRB66C5S.js";import{a as U}from"./chunk-JFAFKHDX.js";import{a as O}from"./chunk-3C5GMAM4.js";import{a as G}from"./chunk-DNNZ353O.js";import{a as E,b as $}from"./chunk-7E24OCGX.js";import{b as T}from"./chunk-6W6AIDLJ.js";import{d as g,e as m}from"./chunk-5YPBPZUR.js";var v=(e,t,n=new Set)=>{let o=e.nameOf.get(t);if(o!==void 0)return o;if(n.has(t))return t;n.add(t);for(let[s,r]of e.superseded){if(r!==t)continue;let c=v(e,s,n);if(c!==s)return c}return t};function M(e,t){let n=e.stale(t);if(n==="fresh")return;if(n==="orphaned")return"orphaned \u2014 no live source evidences this item";let o=[],s=new Map;for(let r of e.derivesInto(t))s.set(String(r.props.source_id),r);for(let[r,c]of s){let i=e.heads.get(r);if(i==null||i===c.props.source_cid)continue;let u=e.convChains.get(r)?.chain;u&&u.includes(String(c.props.source_cid))||o.push(`DERIVES pin ${r}@${String(c.props.source_cid).slice(0,19)} broke \u2014 the source head moved`)}for(let r of e.edgesFrom(t)){if(r.type===m.DERIVES||!e.superseded.has(r.dst))continue;let c=e.tipOf(r.dst);if(e.superseded.has(c)){o.push(`${r.type} pin \u2192 ${v(e,r.dst)} \u2014 target retired`);continue}let i=L(e,r.dst,c);o.push(i.length>0?`${v(e,r.dst)} updated: ${i.map(u=>u.field).join(", ")}`:`${r.type} pin \u2192 ${v(e,r.dst)} \u2014 target superseded`)}return o.length>0?o.join("; "):"stale \u2014 a pinned dependency moved"}function L(e,t,n){let o=e.getNode(t)?.content??{},s=e.getNode(n)?.content??{},r=i=>i===void 0?"":Array.isArray(i)?i.map(String).join(" \xB7 "):typeof i=="object"?JSON.stringify(i):String(i),c=[];for(let i of[...new Set([...Object.keys(o),...Object.keys(s)])].sort())JSON.stringify(o[i])!==JSON.stringify(s[i])&&c.push({field:i,old:r(o[i]),new:r(s[i])});return c}function V(e,t){let n=[];for(let{cid:o}of e.byLabel(g.SCENARIO))e.superseded.has(o)||e.edgesFrom(o).some(s=>s.type===m.BELONGS_TO&&e.tipOf(s.dst)===t)&&n.push(o);return n}function R(e,t){let n=[],o=[],s=[],r=V(e,t),c=new Set(r),i=(u,f)=>{let a=M(e,f);return a===void 0?u:{...u,stale:!0,stale_reason:a}};for(let u of r){let f=e.getNode(u)?.content??{};n.push(i({ref:v(e,u),title:String(f.title??""),case_type:String(f.case_type??""),intent:String(f.intent??"")},u));for(let a of e.edgesInto(u)){if(a.type!==m.AUTOMATES||e.superseded.has(a.src))continue;let d=e.getNode(a.src)?.content??{},l=e.edgesFrom(a.src).filter(p=>p.type===m.VERIFIES&&!e.superseded.has(p.dst)).map(p=>v(e,p.dst));o.push(i({ref:v(e,a.src),title:String(d.title??""),check:d.check,verifies:l},a.src))}}for(let{cid:u}of e.byLabel(g.AC)){if(e.superseded.has(u))continue;let f=e.edgesFrom(u).find(p=>p.type===m.SCOPED_TO);if(!f)continue;let a=e.tipOf(f.dst);if(!(a===t||c.has(a)))continue;let l=e.getNode(u)?.content??{};s.push(i({ref:v(e,u),text:String(l.text??""),kind:String(l.kind??""),scope:a===t?"use-case":v(e,a)},u))}return{scenarios:n,tests:o,acs:s}}function I(e,t,n){let o=G(e,t,n);return o===null?null:o.toString("utf8")}function q(e,t){let n=t.split(`
3
- `).map(s=>s.replace(/^\d+\| /,"")),o=[];for(let s of e.split(`
4
- `)){let r=s.trim();if(r.length===0)continue;let c=n.find(i=>i.includes(r));c!==void 0&&!o.includes(c.trim())&&o.push(c.trim())}return o.length>0?o.join(`
5
- `):{removed:!0}}function J(e,t,n,o){if(o!==void 0&&o.trim().length>0)return{kind:"user-directive",text:o.trim()};let s=[n,...R(t,n).acs.map(u=>t.resolve(u.ref)?.cid??"")].filter(Boolean),r=[],c=new Set;for(let u of s){let f=new Map;for(let a of t.derivesInto(u))f.set(String(a.props.source_id),a);for(let[a,d]of f){let l=t.heads.get(a);if(l==null||l===d.props.source_cid)continue;let p=String(d.props.anchor),b=`${a}\0${p}`;if(c.has(b)||p==="img#whole")continue;c.add(b);let k=I(e,t,String(d.props.source_cid)),w=k===null?null:T(k,p);if(w===null)continue;let x=I(e,t,l);r.push({source_id:a,anchor:p,old_anchor_text:w,new_anchor_text:x===null?{removed:!0}:q(w,x)})}}let i;for(let[u,f]of t.superseded){if(f!==n||t.nodeLabel.get(u)!==g.USECASE)continue;let a=L(t,u,n);a.length>0&&(i=a);break}return{kind:"source-change",changes:r,...i?{uc_updated:i}:{}}}function N(e,t,n,o){let s=R(t,n);if(s.scenarios.length===0&&s.tests.length===0&&s.acs.length===0)return;let r=J(e,t,n,o);if(!(r.kind==="source-change"&&r.changes.length===0&&!r.uc_updated))return{prior_design:s,change_delta:r}}var _=new Set([g.USECASE,g.SCENARIO,g.AC,g.TEST]);function h(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function y(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function D(e,t,n){if(n===g.USECASE)return t;if(n===g.SCENARIO)return y(e,t,m.BELONGS_TO);if(n===g.AC){let o=y(e,t,m.SCOPED_TO);return o?e.nodeLabel.get(o)===g.USECASE?o:y(e,o,m.BELONGS_TO):null}if(n===g.TEST){let o=y(e,t,m.AUTOMATES);return o?y(e,o,m.BELONGS_TO):null}return null}function j(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function B(e,t){return{ucTip:t,display:j(e,t),seamRef:e.nameOf.get(t)??t}}function Y(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!_.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let r=D(e,o,s);return!r||e.nodeLabel.get(r)!==g.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(r)?{ok:!1,message:`use-case ${j(e,r)} was removed \u2014 nothing to evolve`}:{ok:!0,target:B(e,r)}}function ae(e,t){return C(e,t)}function C(e,t){let n=[];for(let{cid:s}of e.byLabel(g.SCENARIO)){if(!h(e,s)||!e.edgesFrom(s).some(c=>c.type===m.BELONGS_TO&&e.tipOf(c.dst)===t))continue;let r=e.edgesInto(s).filter(c=>c.type===m.AUTOMATES&&h(e,c.src));if(r.length===0)n.push({scenario:s,test:null});else for(let c of r)n.push({scenario:s,test:c.src})}let o=new Map;for(let{cid:s}of e.byLabel(g.AC)){if(!h(e,s)||D(e,s,g.AC)!==t)continue;let r=e.edgesInto(s).filter(c=>c.type===m.VERIFIES&&h(e,c.src)).map(c=>c.src).sort();o.set(s,r)}return{pairs:n,verifies:o}}function H(e,t){let n=c=>`${c.scenario}\0${c.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),r=[];for(let[c,i]of e.verifies){let u=t.verifies.get(c);u&&(i.length===u.length&&i.every((f,a)=>f===u[a])||r.push({ac:c,before:i,after:u}))}return{superseded:e.pairs.filter(c=>!s.has(n(c))),minted:t.pairs.filter(c=>!o.has(n(c))),retained:t.pairs.filter(c=>o.has(n(c))),moves:r}}function z(e,t,n,o,s){let r=i=>t.nameOf.get(i)??i,c=i=>` - ${r(i.scenario)} \xB7 ${i.test?r(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(c(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(c(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(c(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=f=>f.length>0?f.map(r).join(" + "):"(none)";e.out(` - ${r(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function F(e,t,n,o,s,r){let c=E(e),i=O(c,t.ucTip);if(!i)return r==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(S(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=C(c,t.ucTip),f=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(f);else if(!await o.confirm(`${f} \u2014 proceed?`))return o.out(r==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let a=N(e,c,t.ucTip,n.because),d=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...a!==void 0?{changeDelta:a.change_delta,priorDesign:a.prior_design}:{}});if(d===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:d,outcome:"paused"};if(d!==0)return S(o,`design run for ${t.display} ended with exit code ${d} \u2014 no diff to report`),{code:d,outcome:"failed"};let l=E(e),p=l.tipOf(t.ucTip),b=O(l,p)?.seq;return z(o,l,t.display,{before:i.seq,after:b??"?"},H(u,C(l,p))),{code:0,outcome:"evolved"}}function K(e){let t=new Map,n=0;for(let{cid:s,state:r}of e.staleList()){if(r==="superseded")continue;let c=e.nodeLabel.get(s);if(!c||!_.has(c)||!h(e,s)||!$(e,s))continue;let i=D(e,s,c);!i||e.nodeLabel.get(i)!==g.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,B(e,i)))}return{targets:[...t.values()].sort((s,r)=>s.display<r.display?-1:s.display>r.display?1:0),staleCount:n}}function Q(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!_.has(s)||!h(e,n))&&$(e,n)&&D(e,n,s)===t)return!0}return!1}async function W(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return S(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return S(n,"evolve needs a <ref> or --from-stale"),2;let r=A(s,n);if(!r)return 2;let c=o.runDesignForUc??X;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=E(r),u,f=null;if(e){let d=Y(i,e);if(!d.ok)return S(n,d.message),2;if(!t.because&&O(i,d.target.ucTip)&&!Q(i,d.target.ucTip))return S(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[d.target]}else{let{targets:d,staleCount:l}=K(i);if(d.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;f=`from-stale: ${l} stale node(s) \u2192 ${d.length} use-case(s)`,u=d}if(!t.yes&&!n.isTTY)return S(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(f&&n.out(f),e){let d=await F(r,u[0],t,n,c,"single");return d.outcome==="evolved"&&t.because&&U(r,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),d.code}let a=0;for(let d of u){let{code:l}=await F(r,d,t,n,c,"batch");l!==0&&a===0&&(a=l)}return a}var X=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-QJT726NE.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...r)=>!0);try{return await o()}finally{process.stdout.write=s}};async function de(e,t){return W(e,t,P(),{})}export{Y as a,ae as b,F as c,K as d,W as e,X as f,de as g};
@@ -1,14 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as j}from"./chunk-54IB6CXK.js";import{a as U}from"./chunk-DNNZ353O.js";import{d as F}from"./chunk-QM4S2APK.js";import{a as x}from"./chunk-7E24OCGX.js";import{a as D,b as M,e as G,f as N}from"./chunk-6W6AIDLJ.js";import{b as V}from"./chunk-J2KSZUOO.js";import{d as b,e as $,g as P}from"./chunk-5YPBPZUR.js";function W(e,n,t,i,o){let d=t.rows.filter(p=>{let u=i.get(p.temp_ref);return u!==void 0&&u!=="reject"});if(d.length===0)return{record:null,errors:null};let s={version:1,read_basis:n.latestHash,source:{source_id:t.source_id,source_cid:n.heads.get(t.source_id)??""},use_cases:d.map(p=>p.uc)},g=new Map;for(let p of d){let u=i.get(p.temp_ref);typeof u=="object"?g.set(p.temp_ref,{resolution:"edited",edit:u.edited}):g.set(p.temp_ref,{resolution:p.uc.matches_existing&&p.uc.changed?"edited":"approved"})}let l=ee(s,n,t.staged_source_cid);if(l.errors!==null)return{record:null,errors:l.errors};let r=l.proposal,f=s.source.source_cid?L(e,n,s.source.source_cid):null;if(f!==null){r=Z(r,f);let p=G(r,z(f),n);if(p.length>0)return{record:null,errors:[{code:"HELD_CITES_STALE",detail:"the source moved after this plan staged \u2014 its quotes no longer verify against the current head; re-run kane-cli maintain reconcile to re-stage"},...p]}}let m=`held-${(n.latestHash??"root").slice(-12)}-${d.length}`;return N({contextDir:e,graph:n,proposal:r,proposalId:m,verdicts:g,by:o,autoName:!0})}function z(e){return e.replace(/\n$/,"").split(`
3
- `).map((t,i)=>`${String(i+1).padStart(4,"0")}| ${t}`).join(`
4
- `)}function Z(e,n){let t=n.replace(/\n$/,""),i=z(n),o=d=>{if(!d?.quote)return d;let s=M(i,d.anchor);if(s!==null&&s.includes(d.quote))return d;let g=t.indexOf(d.quote);if(g===-1||t.indexOf(d.quote,g+1)!==-1)return d;let l=t.slice(0,g).split(`
5
- `).length,r=l+d.quote.replace(/\n$/,"").split(`
6
- `).length-1;return{...d,anchor:`L${l}-L${r}`}};return{...e,use_cases:e.use_cases.map(d=>({...d,cite:o(d.cite)??d.cite,...d.criteria?{criteria:d.criteria.map(s=>({...s,cite:o(s.cite)??s.cite}))}:{},...d.updated?.criteria?{updated:{...d.updated,criteria:d.updated.criteria.map(s=>({...s,cite:o(s.cite)??s.cite}))}}:{}}))}}function ee(e,n,t){let i=[],o=n.mediaOf(e.source.source_cid).images??[],d=t!==void 0?n.mediaOf(t).images??[]:null,s=(l,r)=>{let f=l?D(l.anchor):null;if(!l||f?.kind!=="img-part")return l;if(d===null)return i.push({code:"HELD_CITES_STALE",detail:`${r}: this plan predates image-part staging \u2014 ${l.anchor} cannot be verified against the version it staged under; re-run kane-cli maintain reconcile to re-stage`}),l;let m=d.find(c=>c.ref===f.ref)?.blob;if(m===void 0)return i.push({code:"HELD_CITES_STALE",detail:`${r}: ${l.anchor} names no decodable image of the staged version \u2014 re-run kane-cli maintain reconcile to re-stage`}),l;if(o.some(c=>c.ref===f.ref&&c.blob===m))return l;let p=o.filter(c=>c.blob===m),u=p.filter(c=>c.delivery==="selected");if(u.length===1)return{...l,anchor:`img#${u[0].ref}`};if(p.length===1)return{...l,anchor:`img#${p[0].ref}`};if(p.length===0){let c=d.find(h=>h.ref===f.ref)?.appearance;if(c!==void 0){let h=o.filter(v=>v.appearance===c),E=h.filter(v=>v.delivery==="selected");if(E.length===1)return{...l,anchor:`img#${E[0].ref}`};if(h.length===1)return{...l,anchor:`img#${h[0].ref}`}}}return i.push({code:"HELD_CITES_STALE",detail:`${r}: the image behind ${l.anchor} is ${p.length===0?"no longer in":"ambiguous in"} the current head \u2014 re-run kane-cli maintain reconcile to re-stage`}),l};return{proposal:{...e,use_cases:e.use_cases.map(l=>({...l,cite:s(l.cite,l.temp_ref)??l.cite,...l.criteria?{criteria:l.criteria.map(r=>({...r,cite:s(r.cite,l.temp_ref)??r.cite}))}:{},...l.updated?.criteria?{updated:{...l.updated,criteria:l.updated.criteria.map(r=>({...r,cite:s(r.cite,l.temp_ref)??r.cite}))}}:{}}))},errors:i.length>0?i:null}}function J(e,n,t=[]){let i=j(e,n),o=new Set,d=[],s=f=>{!f||o.has(f)||(o.add(f),d.push(y(e,f)))};for(let f of i.pairs)s(f.scenario),s(f.test);for(let[f,m]of i.verifies){s(f);for(let p of m)s(p)}if(t.length===0)return{stale_refs:d};let g=f=>`${String(f.props.source_id)}\0${String(f.props.anchor)}`,l=new Set;for(let{cid:f}of e.byLabel(b.USECASE))if(e.tipOf(f)===n)for(let m of e.edgesInto(f)){if(m.type!==$.DERIVES)continue;let p=m.props.claim;typeof p=="string"&&t.includes(p)&&l.add(g(m))}if(l.size===0)return{stale_refs:d};let r=new Set;for(let[f,m]of i.verifies)if(e.edgesInto(f).some(u=>u.type===$.DERIVES&&l.has(g(u)))){r.add(y(e,f));for(let u of m)r.add(y(e,u))}return{stale_refs:d,...r.size>0?{direct_refs:[...r]}:{}}}var B="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",te="suite untouched; graph updated";function T(e,n){return!e.superseded.has(n)&&e.trust.get(n)!=="archived"}function y(e,n,t=new Set){let i=e.nameOf.get(n);if(i!==void 0)return i;if(t.has(n))return n;t.add(n);for(let[o,d]of e.superseded){if(d!==n)continue;let s=y(e,o,t);if(s!==o)return s}return n}function C(e){return String(e).slice(0,19)}function A(e,n,t){let i=e.edgesFrom(n).find(o=>o.type===t);return i?e.tipOf(i.dst):null}function Y(e,n){let t=e.nodeLabel.get(n);if(t===b.USECASE)return n;if(t===b.SCENARIO)return A(e,n,$.BELONGS_TO);if(t===b.AC){let i=A(e,n,$.SCOPED_TO);return i?e.nodeLabel.get(i)===b.USECASE?i:A(e,i,$.BELONGS_TO):null}if(t===b.TEST){let i=A(e,n,$.AUTOMATES);return i?A(e,i,$.BELONGS_TO):null}return null}function q(e,n){let t=[],i=new Map;for(let o of e.derivesInto(n))i.set(String(o.props.source_id),o);for(let[o,d]of i){let s=e.heads.get(o);if(s==null){t.push(`DERIVES pin ${o} @ ${C(d.props.source_cid)} \u2014 source retired`);continue}if(s!==d.props.source_cid){let g=e.convChains.get(o)?.chain;if(g&&g.includes(String(d.props.source_cid)))continue;t.push(`DERIVES pin ${o} @ ${C(d.props.source_cid)} \u2014 source head moved to ${C(s)}`)}}for(let o of e.edgesFrom(n))P(o.type)?.pin?.comparesTo==="dst_tip"&&e.superseded.has(o.dst)&&t.push(`${o.type} pin \u2192 ${y(e,o.dst)} \u2014 target superseded`);return t.join("; ")||"structural pin broken"}var ne=new Set([b.USECASE,b.SCENARIO,b.AC,b.TEST]);function O(e,n){return e.ref<n.ref?-1:e.ref>n.ref?1:0}function L(e,n,t){let i=U(e,n,t);return i===null?null:i.toString("utf8")}function re(e,n,t,i,o){let d=t.props.quote;if(typeof d=="string"&&d.length>0)return i.includes(d);let s=String(t.props.source_cid);o.has(s)||o.set(s,L(e,n,s));let g=o.get(s);if(g===null)return!1;let l=M(g,String(t.props.anchor));return l===null?!1:l.split(`
7
- `).some(r=>r.trim().length>0&&i.includes(r.trim()))}function se(e,n,t){let i=D(String(n.props.anchor));if(i?.kind!=="img-part")return!1;let d=(e.mediaOf(String(n.props.source_cid)).images??[]).find(r=>r.ref===i.ref),s=d?.blob;if(s===void 0)return!1;let g=e.mediaOf(t).images??[];if(g.some(r=>r.blob===s))return!0;let l=d?.appearance;return l!==void 0&&g.filter(r=>r.appearance===l).length===1}var K=128*1024,X=64*1024;function oe(e,n){let t=e.split(`
8
- `),i=n.split(`
9
- `),o=0;for(;o<t.length&&o<i.length&&t[o]===i[o];)o++;let d=t.length,s=i.length;for(;d>o&&s>o&&t[d-1]===i[s-1];)d--,s--;if(d===o&&s===o)return"";let g=t.slice(o,d),l=i.slice(o,s),f=ie(g,l,2e3),m=[];if(f===null)m.push(`@@ old L${o+1}-L${d} \u2192 new L${o+1}-L${s} @@`,...g.map(p=>`- ${p}`),...l.map(p=>`+ ${p}`));else{let p=f.map((c,h)=>c.op==="="?-1:h).filter(c=>c>=0),u=0;for(;u<p.length;){let c=u;for(;c+1<p.length&&p[c+1]-p[c]<=3;)c++;let h=Math.max(p[u]-1,0),E=Math.min(p[c]+1,f.length-1),v=f.slice(h,E+1),S=o+(v[0].ai??0)+1,w=o+(v[0].bi??0)+1,a=v.filter(R=>R.op!=="+").length,_=v.filter(R=>R.op!=="-").length;m.push(`@@ old L${S}-L${S+Math.max(a-1,0)} \u2192 new L${w}-L${w+Math.max(_-1,0)} @@`);for(let R of v)m.push(R.op==="="?` ${R.line}`:`${R.op} ${R.line}`);u=c+1}}return m.join(`
10
- `)}function ie(e,n,t){let i=e.length,o=n.length,d=Math.min(i+o,t),s=new Map([[1,0]]),g=[],l=!1;for(let p=0;p<=d&&!l;p++){g.push(new Map(s));for(let u=-p;u<=p;u+=2){let c=u===-p||u!==p&&(s.get(u-1)??0)<(s.get(u+1)??0)?s.get(u+1)??0:(s.get(u-1)??0)+1,h=c-u;for(;c<i&&h<o&&e[c]===n[h];)c++,h++;if(s.set(u,c),c>=i&&h>=o){l=!0;break}}}if(!l)return null;let r=i,f=o,m=[];for(let p=g.length-1;p>0;p--){let u=g[p],c=r-f,h=c===-p||c!==p&&(u.get(c-1)??0)<(u.get(c+1)??0)?c+1:c-1,E=u.get(h)??0,v=E-h;for(;r>E&&f>v;)m.push({op:"=",line:e[r-1],ai:r-1,bi:f-1}),r--,f--;p>0&&(r===E?(m.push({op:"+",line:n[f-1],ai:r,bi:f-1}),f--):(m.push({op:"-",line:e[r-1],ai:r-1,bi:f}),r--))}for(;r>0&&f>0;)m.push({op:"=",line:e[r-1],ai:r-1,bi:f-1}),r--,f--;for(;r>0;)m.push({op:"-",line:e[r-1],ai:r-1,bi:0}),r--;for(;f>0;)m.push({op:"+",line:n[f-1],ai:0,bi:f-1}),f--;return m.reverse()}function ce(e){let n=Buffer.byteLength(e,"utf8");if(n<=K+X)return{diff:e,truncated:!1};let t=Buffer.from(e,"utf8"),i=K;for(;i>0&&(t[i]&192)===128;)i--;let o=n-X;for(;o<n&&(t[o]&192)===128;)o++;let d=t.subarray(0,i).toString("utf8"),s=t.subarray(o).toString("utf8");return{diff:`${d}
11
- \u2026 [diff truncated: ${n-i-(n-o)} bytes omitted] \u2026
12
- ${s}`,truncated:!0}}function ae(e,n){let t=x(e),i=t.heads.get(n);if(typeof i!="string")return null;let o=[];for(let u of V(e).records){let c=u.source_head_moves?.[n];c!==void 0&&c!==o[o.length-1]&&o.push(c)}let d=o.lastIndexOf(i),s=d>0?o[d-1]:null;if(typeof s!="string"||s===i)return null;let g=L(e,t,s),l=L(e,t,i);if(g===null||l===null)return null;let{diff:r,truncated:f}=ce(oe(g,l)),m=new Set,p=[];for(let u of t.edgesFrom(s))u.type!==$.DERIVES||t.nodeLabel.get(u.dst)!==b.USECASE||m.has(u.dst)||(m.add(u.dst),p.push({id:u.dst,title:String(t.getNode(u.dst)?.content.title??"")}));return{source_id:n,old_head:s,new_head:i,diff:r,...f?{truncated:!0}:{},prior_ucs:p}}function de(e,n,t){let i=e.getNode(n)?.content??{},o=e.getNode(t)?.content??{},s=[...new Set([...Object.keys(i),...Object.keys(o)])].sort().filter(g=>JSON.stringify(i[g])!==JSON.stringify(o[g]));return s.length>0?`updated: ${s.join(", ")}`:"updated"}function le(e,n,t,i,o,d,s){let g=new Set((s?.rows??[]).map(c=>c.matched_cid).filter(c=>!!c)),l=[];for(let[c,h]of t.superseded)h===null||c===h||n.superseded.has(c)||t.nodeLabel.get(c)===b.USECASE&&l.push({kind:"MODIFY",ref:y(t,c),old_cid:c,new_cid:h,summary:de(t,c,h)});let r=d.map(c=>({kind:"ADD",ref:y(t,c),cid:c}));for(let c of s?.rows??[])c.kind==="MODIFY"&&c.matched_cid?l.push({kind:"MODIFY",ref:y(t,c.matched_cid),old_cid:c.matched_cid,new_cid:null,summary:`${c.why} (staged)`}):c.kind==="ADD"&&r.push({kind:"ADD",ref:c.title,cid:null});let f=[],m=L(e,t,o),p=new Map;for(let{cid:c}of t.byLabel(b.USECASE)){if(!T(t,c)||g.has(c))continue;let h=t.derivesInto(c),E=h.filter(w=>String(w.props.source_id)===i);E.length===0||E.some(w=>w.props.source_cid===o)||E.some(w=>{let a=String(w.props.anchor),_=D(a);return _?.kind==="img-whole"?!1:_?.kind==="img-part"?se(t,w,o):m!==null&&re(e,t,w,m,p)})||h.some(w=>{let a=String(w.props.source_id);if(a===i)return!1;let _=t.heads.get(a);return _!=null})||f.push({kind:"ARCHIVE",ref:y(t,c),cid:c,why:`evidence decayed: no quote from ${i} relocates into @${C(o)}, no other live source, no fresh evidence this run`,impact:J(t,t.tipOf(c))})}let u=(c,h)=>c.ref<h.ref?-1:c.ref>h.ref?1:0;return[...l.sort(u),...r.sort(u),...f.sort(u)]}function Ee(e,n,t,i,o){let d=n.rows.find(u=>u.temp_ref===t);if(!d)return{ok:!1,message:`held item ${t} missing from the plan artifact`};let s=d,g=x(e);if(s.matched_cid){let u=g.tipOf(s.matched_cid);if(g.superseded.get(u)===null)return{ok:!1,message:`use-case for "${s.title}" was retired meanwhile \u2014 nothing to update`};u!==s.matched_cid&&(s={...s,matched_cid:u,uc:{...s.uc,matches_existing:{cid:u}}})}let l=o?{edited:o}:"approve",r=W(e,g,{source_id:n.source_id,...n.staged_source_cid!==void 0?{staged_source_cid:n.staged_source_cid}:{},rows:[s]},new Map([[s.temp_ref,l]]),i);if(r.errors)return{ok:!1,message:r.errors.map(u=>`${u.code}: ${u.detail}`).join("; ")};let f=x(e),m=s.matched_cid?f.tipOf(s.matched_cid):r.record?.nodes.find(u=>u.label==="usecase")?.cid??r.record?.review[0]?.id;return{ok:!0,ref:m?y(f,m):s.title,kind:s.kind}}async function ve(e,n,t,i={}){let o=x(e),d=o.heads.get(n)??null,s=new Set(o.staleList().filter(a=>a.state==="stale").map(a=>a.cid)),g=await t.reingest(n);if(g.status==="unchanged"&&!i.resumeHeld)return{source_id:n,changed:!1,head:{status:g.status,before:d,after:g.cid},note:`nothing to reconcile \u2014 ${n} is unchanged`,skipped_arms:B,changeset:[],rows:[]};let l=i.resumeHeld?{minted:[],matched:[],held:i.resumeHeld}:await t.reextract(n),r=x(e),f=l.minted.map(a=>{let _=y(r,a);return{kind:"ADD",origin:"content-change",ref:_,reason:`new use-case extracted from ${n}`,provenance:`extraction commit \u2014 DERIVES ${n} @ ${C(g.cid)}`,action:`kane-cli design tests --use-case ${_}`}}),m=r.staleList().filter(a=>a.state==="stale"&&!s.has(a.cid)&&T(r,a.cid)).map(a=>a.cid),p=m.map(a=>{let _=y(r,a),R=ne.has(r.nodeLabel.get(a)??"");return{kind:"MODIFY",origin:"structural-stale",ref:_,reason:"stale (structural)",provenance:q(r,a),action:R?`kane-cli maintain evolve ${_}`:`kane-cli design explain ${_}`}}),u=[],c=[];for(let a of l.held?.rows??[])if(a.kind==="ADD")u.push({kind:"ADD",origin:"content-change",ref:a.title,held_ref:a.temp_ref,reason:`${a.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${n} @ ${C(g.cid)}`,action:"approve to commit + design"});else{let _=a.matched_cid?r.tipOf(a.matched_cid):null,R=_?r.getNode(_)?.content.criteria??[]:[],I=(a.uc.updated?.criteria??[]).map(k=>typeof k=="string"?k:k.text),Q=[...I.filter(k=>!R.includes(k)),...a.uc.updated?.criteria!==void 0?R.filter(k=>!I.includes(k)):[]],H=_?J(r,_,Q):void 0;c.push({kind:"MODIFY",origin:"content-change",ref:a.matched_cid?y(r,a.matched_cid):a.title,held_ref:a.temp_ref,reason:`${a.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${n} @ ${C(g.cid)}`,action:"approve to commit the updated version (old\u2192new redirect)",...H?{impact:H}:{}})}let h=new Set;for(let a of[...l.minted,...l.matched])h.add(r.tipOf(a));for(let a of l.held?.rows??[])a.matched_cid&&h.add(r.tipOf(a.matched_cid));for(let a of m){let _=Y(r,r.tipOf(a));_&&r.nodeLabel.get(_)===b.USECASE&&h.add(r.tipOf(_))}let E=[];for(let a of await F(r,"design")){if(a.kind!=="no-verifies")continue;let _=r.resolve(a.ref);if(!_)continue;let R=Y(r,_.tip);!R||!h.has(r.tipOf(R))||E.push({kind:"ADD",origin:"content-change",ref:a.ref,reason:a.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${y(r,R)}`,action:a.ready_command})}let v=[];for(let{cid:a}of r.byLabel(b.USECASE))T(r,a)&&r.stale(a)==="orphaned"&&v.push({kind:"REMOVE",ref:y(r,a),reason:"orphaned \u2014 no live source evidences this use-case",provenance:q(r,a),action:"plan-only \u2014 REMOVE is not executed in this release"});let S=new Set,w=[...f.sort(O),...u.sort(O),...E.sort(O),...c.sort(O),...p.sort(O),...v.sort(O)].filter(a=>{let _=`${a.kind}\0${a.ref}`;return S.has(_)?!1:(S.add(_),!0)});return{source_id:n,changed:!0,head:{status:g.status,before:d,after:g.cid},note:te,skipped_arms:B,changeset:le(e,o,r,n,g.cid,l.minted,l.held),rows:w,...l.held?{held:l.held}:{}}}function be(e,n){return async t=>{let{ingestFile:i}=await import("./ingest-FIIO67ZN.js"),{convertPdf:o}=await import("./pdf-convert-S7VYE6AV.js"),{convertDocx:d}=await import("./docx-convert-ZBVQO2LG.js"),s=await i({contextDir:e,filePath:n,asId:t,converters:{pdf:o,docx:d}});return{status:s.status,cid:s.cid}}}function Re(e,n={}){return async t=>{let i=[],[{runExtract:o},{resolveAgentAuthEnv:d},{runAgent:s},{preflightTurn:g}]=await Promise.all([import("./run-YH5SCBYD.js"),import("./spawner-7KXVKAD5.js"),import("./bridge-QCMEOQDD.js"),import("./turn-preflight-JGYT7LXP.js")]),l=await d(),r=new Set(x(e).byLabel(b.USECASE).map(S=>S.cid)),f=ae(e,t)??void 0,m=0,p=await o({mode:"override",...f?{changeContext:f}:{}},{contextDir:e,agent:s,preflightTurn:()=>g(l),ask:async()=>[],review:async S=>{if(!n.stage)return new Map(S.map(a=>[a.temp_ref,{resolution:a.matches_existing&&a.changed?"edited":"skipped"}]));let w=new Map;for(let a of S){if(a.matches_existing&&!a.changed){w.set(a.temp_ref,{resolution:"skipped"});continue}i.push({kind:a.matches_existing?"MODIFY":"ADD",temp_ref:a.temp_ref,title:a.title,why:a.matches_existing?`updated: ${Object.keys(a.updated??{}).join(", ")||"content"}`:`newly extracted from ${t}`,...a.matches_existing?{matched_cid:a.matches_existing.cid,updated:a.updated}:{},uc:a}),w.set(a.temp_ref,{resolution:"rejected"})}return w},confirmStale:async()=>!1,out:S=>process.stderr.write(S+`
13
- `),progress:S=>process.stderr.write(S+`
14
- `),emit:S=>{S.type==="commit"&&typeof S.assumed=="number"&&(m+=S.assumed)},isTTY:!1,auth:l});if(p!==0)throw new Error(`reconcile: re-extract of ${t} failed (exit ${p})`);let u=x(e),c=u.heads.get(t),h=[],E=[];if(typeof c=="string"){let S=new Set;for(let w of u.edgesFrom(c))w.type!==$.DERIVES||u.nodeLabel.get(w.dst)!==b.USECASE||S.has(w.dst)||(S.add(w.dst),!(n.stage&&u.trust.get(w.dst)==="archived")&&(r.has(w.dst)?E:h).push(w.dst))}let v=x(e).heads.get(t);return{minted:h,matched:E,defaultsTaken:m,...n.stage?{held:{source_id:t,...v!=null?{staged_source_cid:v}:{},rows:i}}:{}}}}export{Ee as a,ve as b,be as c,Re as d};