@testmuai/kane-cli 0.6.3 → 0.6.4

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 (169) hide show
  1. package/dist/ChatSurface-VXYU6KFW.js +8 -0
  2. package/dist/{ChromeProfilePicker-UUGUMJPI.js → ChromeProfilePicker-QWTM7DK6.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-JZWESL7Z.js → CliFeedbackPrompt-6NVWMONO.js} +1 -1
  4. package/dist/{CliUploadProgress-62U3LAUU.js → CliUploadProgress-2YRQLECI.js} +1 -1
  5. package/dist/{ConfigView-WHEFCVHR.js → ConfigView-I4R5M7BO.js} +1 -1
  6. package/dist/EvidenceViewOffer-54GEARRX.js +2 -0
  7. package/dist/{FolderPicker-HJUUHQEI.js → FolderPicker-5VWBYTAK.js} +1 -1
  8. package/dist/{HelpView-EWHP7LSJ.js → HelpView-OJZW4XWX.js} +1 -1
  9. package/dist/{InfoBox-GQQJVTI5.js → InfoBox-TGELGCBR.js} +1 -1
  10. package/dist/{LinksBox-EWCPAZFN.js → LinksBox-B5EBRY26.js} +1 -1
  11. package/dist/{ProfilesView-5FJNQMUW.js → ProfilesView-3SJRIBHQ.js} +1 -1
  12. package/dist/{ProjectPicker-IN7GFN7I.js → ProjectPicker-72HKMBEY.js} +1 -1
  13. package/dist/{SaveSessionPrompt-ISODGFP7.js → SaveSessionPrompt-CK5SGNRO.js} +1 -1
  14. package/dist/SingleShotApp-AJBIWW74.js +2 -0
  15. package/dist/{SummaryBox-R6WHU7VD.js → SummaryBox-ABB7ST26.js} +1 -1
  16. package/dist/TestMdRunView-5PMLLLFT.js +2 -0
  17. package/dist/{WhoamiView-YRQNOSOH.js → WhoamiView-OF354UGC.js} +1 -1
  18. package/dist/bind-BWILBZGR.js +6 -0
  19. package/dist/{bridge-7UMWMIJJ.js → bridge-LNDJS3HH.js} +1 -1
  20. package/dist/{changelog-YQC2QDCO.js → changelog-BWCEZQ23.js} +1 -1
  21. package/dist/{chat-committer-GHDZY5XF.js → chat-committer-ADJJTDUT.js} +1 -1
  22. package/dist/{chat-controller-QXFAB2DK.js → chat-controller-VAC57IEV.js} +1 -1
  23. package/dist/{chunk-F66SSA4C.js → chunk-2K4XOHVK.js} +1 -1
  24. package/dist/{chunk-KHDUQ33H.js → chunk-2PQXEEVY.js} +1 -1
  25. package/dist/{chunk-NNZV5RCE.js → chunk-3C5GMAM4.js} +1 -1
  26. package/dist/{chunk-7YQW4TFI.js → chunk-3HEPW6SN.js} +1 -1
  27. package/dist/{chunk-WFRL54GK.js → chunk-3WJJ43MT.js} +1 -1
  28. package/dist/{chunk-SL7AJ7JQ.js → chunk-4MUHS3UL.js} +1 -1
  29. package/dist/{chunk-2TVRHXRK.js → chunk-5CTMOJG4.js} +1 -1
  30. package/dist/{chunk-OGVIHL5G.js → chunk-5KSB5MOF.js} +1 -1
  31. package/dist/chunk-5YPBPZUR.js +2 -0
  32. package/dist/chunk-64LC36AF.js +2 -0
  33. package/dist/{chunk-CIW2KP4C.js → chunk-64QURIT6.js} +1 -1
  34. package/dist/{chunk-326XAPMW.js → chunk-652FEDL4.js} +2 -2
  35. package/dist/{chunk-Z56AWGVY.js → chunk-6AYUSR7X.js} +1 -1
  36. package/dist/{chunk-VJUIW2ES.js → chunk-6GTOYTCQ.js} +1 -1
  37. package/dist/chunk-6LRKYF67.js +14 -0
  38. package/dist/{chunk-AE6SS34N.js → chunk-74RUSHIB.js} +1 -1
  39. package/dist/chunk-ACEODVSC.js +14 -0
  40. package/dist/{chunk-FFL2TQEJ.js → chunk-ADOXYGZE.js} +1 -1
  41. package/dist/chunk-ANIVHX3P.js +5 -0
  42. package/dist/{chunk-B5LJCGAY.js → chunk-AXABTFCD.js} +1 -1
  43. package/dist/{chunk-7LFCSSPX.js → chunk-BNN6ZDJW.js} +1 -1
  44. package/dist/{chunk-TZZYRDCF.js → chunk-BOO7YXAV.js} +1 -1
  45. package/dist/{chunk-Y6LMHBLE.js → chunk-BYUARJE7.js} +1 -1
  46. package/dist/{chunk-FYOCF7DY.js → chunk-CJJXT5DO.js} +1 -1
  47. package/dist/{chunk-F2K3XFFH.js → chunk-CLTANA4L.js} +2 -2
  48. package/dist/{chunk-YZSYXNMB.js → chunk-CT2I5KUM.js} +1 -1
  49. package/dist/{chunk-RZFINU7J.js → chunk-CY5NDMO7.js} +1 -1
  50. package/dist/{chunk-RLG5NUTE.js → chunk-DNOBOZPO.js} +1 -1
  51. package/dist/chunk-DXK55KGR.js +9 -0
  52. package/dist/{chunk-Q4HLQOJI.js → chunk-E3BO7OVR.js} +1 -1
  53. package/dist/chunk-EHN5HTUD.js +147 -0
  54. package/dist/{chunk-RGEAEAZB.js → chunk-FJTWJ243.js} +1 -1
  55. package/dist/{chunk-G6AF2JUA.js → chunk-FV4LLU3T.js} +1 -1
  56. package/dist/{chunk-CE664P73.js → chunk-GBBVP2JW.js} +1 -1
  57. package/dist/{chunk-AD46OCZ4.js → chunk-GRB66C5S.js} +1 -1
  58. package/dist/{chunk-22A2ECA2.js → chunk-GYW7LVVL.js} +1 -1
  59. package/dist/{chunk-E4OYR32M.js → chunk-HJGUEZLW.js} +1 -1
  60. package/dist/{chunk-DEEBPSJN.js → chunk-HNE4TDOZ.js} +1 -1
  61. package/dist/{chunk-7MV5UF6O.js → chunk-I2JUBAPU.js} +1 -1
  62. package/dist/chunk-IJPFAWBH.js +5 -0
  63. package/dist/{chunk-53VDR5DN.js → chunk-IOTJZTHX.js} +3 -3
  64. package/dist/{chunk-SHSV64GX.js → chunk-IRRGSC7B.js} +1 -1
  65. package/dist/{chunk-BFFCGEUH.js → chunk-IXVR66NS.js} +1 -1
  66. package/dist/chunk-K5JGCJ2K.js +6 -0
  67. package/dist/{chunk-D5T4ARTB.js → chunk-MCQXRJGH.js} +1 -1
  68. package/dist/{chunk-UXJPCWGW.js → chunk-MK2G7VIF.js} +1 -1
  69. package/dist/{chunk-P46TIMGQ.js → chunk-MVF4KRHA.js} +1 -1
  70. package/dist/{chunk-ARS72637.js → chunk-O66EU5UV.js} +1 -1
  71. package/dist/{chunk-Y7KW5AEN.js → chunk-OB6CKLEL.js} +1 -1
  72. package/dist/{chunk-2S4S2XJC.js → chunk-OLXOZJ7X.js} +1 -1
  73. package/dist/{chunk-YZKPZXHY.js → chunk-PICCLJSO.js} +1 -1
  74. package/dist/{chunk-EWFFJBAM.js → chunk-POI6DCP6.js} +1 -1
  75. package/dist/{chunk-C5POEXSX.js → chunk-PYB2EXRE.js} +2 -2
  76. package/dist/{chunk-OE7TVGNB.js → chunk-QNNBNIR7.js} +3 -3
  77. package/dist/{chunk-TTSYHJLX.js → chunk-QZI43UNV.js} +1 -1
  78. package/dist/{chunk-LMJTY32X.js → chunk-RHNKYNNZ.js} +1 -1
  79. package/dist/{chunk-ZKYYZ5NO.js → chunk-RN4OSVTG.js} +2 -2
  80. package/dist/chunk-SJ2KQKOV.js +3 -0
  81. package/dist/{chunk-BGGNBWAJ.js → chunk-STH6I3UB.js} +1 -1
  82. package/dist/{chunk-PJDOXRLB.js → chunk-UZSG54OY.js} +1 -1
  83. package/dist/{chunk-XBE7PGVY.js → chunk-W36P7S5W.js} +1 -1
  84. package/dist/{chunk-EEO4XWY6.js → chunk-WE57PD6K.js} +1 -1
  85. package/dist/{chunk-NFGG5DA2.js → chunk-WFEGGQJ4.js} +1 -1
  86. package/dist/chunk-WIA7TPK3.js +2 -0
  87. package/dist/{chunk-SQFNMZJ2.js → chunk-WT3SMSY5.js} +1 -1
  88. package/dist/{chunk-AV5SUGRY.js → chunk-XUJ5EPVW.js} +1 -1
  89. package/dist/{chunk-BO3JA2GS.js → chunk-YI4XULHR.js} +2 -2
  90. package/dist/{chunk-VXGOWBET.js → chunk-YMSN25DX.js} +1 -1
  91. package/dist/{chunk-B2PZAB7J.js → chunk-ZG2V2ODK.js} +1 -1
  92. package/dist/{chunk-ME5QSYWX.js → chunk-ZQP3MCZW.js} +1 -1
  93. package/dist/{chunk-GIRXJOJI.js → chunk-ZZLR3O5A.js} +1 -1
  94. package/dist/{config-5OOP2BO3.js → config-OJF53CHL.js} +1 -1
  95. package/dist/{cover-cmd-Y5L4O4Q3.js → cover-cmd-K3LCXHAQ.js} +1 -1
  96. package/dist/{credentials-XCP6DJZZ.js → credentials-NLJHSVBY.js} +1 -1
  97. package/dist/descriptor-EHK3DRCZ.js +2 -0
  98. package/dist/{evidence-AX67Q6RN.js → evidence-UPOFW3XC.js} +1 -1
  99. package/dist/evolve-cmd-MVALOB3G.js +2 -0
  100. package/dist/explain-VFIZTHFN.js +2 -0
  101. package/dist/{explain-cmd-RIDEMDMY.js → explain-cmd-KV5YUXKB.js} +1 -1
  102. package/dist/{explain-cmd-55WRDIMW.js → explain-cmd-U367SD4N.js} +1 -1
  103. package/dist/{extract-bind-ZDAXRQUS.js → extract-bind-SSTKQGTV.js} +2 -2
  104. package/dist/{extract-cmd-5GGI6LAM.js → extract-cmd-GO4UV7ER.js} +2 -2
  105. package/dist/{gaps-cmd-P2DRK6FW.js → gaps-cmd-DTVDIOED.js} +1 -1
  106. package/dist/{gate-FACZRGOC.js → gate-B6C6KLFA.js} +1 -1
  107. package/dist/{generate-headless-DRDE46ON.js → generate-headless-2HYMSVN5.js} +2 -2
  108. package/dist/{headless-io-GXHKDPHB.js → headless-io-PWW6YKH2.js} +1 -1
  109. package/dist/index.js +43 -43
  110. package/dist/ingest-C5ANIN7S.js +2 -0
  111. package/dist/ingest-cmd-LLC5CDQ5.js +3 -0
  112. package/dist/interactive-bind-Q5TQFQ6N.js +7 -0
  113. package/dist/{lifecycle-cmd-55NZL3UO.js → lifecycle-cmd-BXE5IMFN.js} +1 -1
  114. package/dist/{list-cmd-JB2ABACD.js → list-cmd-KBWPYJMV.js} +1 -1
  115. package/dist/{list-commands-UDAL3SBY.js → list-commands-6WDXAECV.js} +1 -1
  116. package/dist/{logical-ids-ATVR6PF2.js → logical-ids-3Y6RX5C2.js} +1 -1
  117. package/dist/login-flow-XQMJFC4H.js +2 -0
  118. package/dist/{maintenance-cmd-E3HEEVQW.js → maintenance-cmd-VS3APIUN.js} +1 -1
  119. package/dist/{persist-recorded-session-BW3YSFMP.js → persist-recorded-session-KHIMN4A3.js} +1 -1
  120. package/dist/pipeline-2HRAWT5U.js +2 -0
  121. package/dist/readmodel-XOGOELUP.js +2 -0
  122. package/dist/reconcile-cmd-DH4VV6PG.js +2 -0
  123. package/dist/{recording-banner-6FVTCUWQ.js → recording-banner-SADVYNEP.js} +1 -1
  124. package/dist/{require-project-folder-AQUVEEJB.js → require-project-folder-LP7V26IU.js} +1 -1
  125. package/dist/{revert-3TKLOYQA.js → revert-AQQ2VHRM.js} +1 -1
  126. package/dist/{review-cmd-RXPPC5GK.js → review-cmd-4WZUUOE4.js} +1 -1
  127. package/dist/run-RT2VMPTQ.js +2 -0
  128. package/dist/run-XAZMT7WO.js +2 -0
  129. package/dist/{run-test-md-AUK7NGLL.js → run-test-md-ATB2HZRG.js} +2 -2
  130. package/dist/{skill-installer-2MNPCPRD.js → skill-installer-DE2LSSKU.js} +1 -1
  131. package/dist/{spawner-XCOMTJJC.js → spawner-GOTVIFR5.js} +1 -1
  132. package/dist/tcg-generate-7PUXJ5R4.js +2 -0
  133. package/dist/{testmd-actions-TU4KTO32.js → testmd-actions-RYQHBX4K.js} +1 -1
  134. package/dist/token-refresh-F5KRV7ER.js +2 -0
  135. package/dist/{validate-basic-IYMPP7C7.js → validate-basic-6BQ2L7TT.js} +1 -1
  136. package/dist/{version-check-MUPSKONS.js → version-check-YW3FUWDH.js} +1 -1
  137. package/dist/{view-cmd-QE2FS3GB.js → view-cmd-FRMQF76B.js} +1 -1
  138. package/dist/walk-session-O4TMVORI.js +2 -0
  139. package/package.json +7 -7
  140. package/dist/ChatSurface-J777M5WC.js +0 -8
  141. package/dist/EvidenceViewOffer-JQDEAE2T.js +0 -2
  142. package/dist/SingleShotApp-QANGFAPO.js +0 -2
  143. package/dist/TestMdRunView-74A3LCNE.js +0 -2
  144. package/dist/archive-committer-3NI773TP.js +0 -2
  145. package/dist/bind-FZ4X4SOK.js +0 -6
  146. package/dist/chunk-6RQAUK5F.js +0 -5
  147. package/dist/chunk-FTD3B7QA.js +0 -2
  148. package/dist/chunk-GIGD4M7V.js +0 -5
  149. package/dist/chunk-I2S6KNZW.js +0 -2
  150. package/dist/chunk-IACKIGPX.js +0 -2
  151. package/dist/chunk-NFOBDHZK.js +0 -147
  152. package/dist/chunk-SGU72YLH.js +0 -9
  153. package/dist/chunk-TY5LWU6I.js +0 -14
  154. package/dist/chunk-YANCBRER.js +0 -3
  155. package/dist/descriptor-SL5A7RQE.js +0 -2
  156. package/dist/distill-cmd-EYCCCFL3.js +0 -2
  157. package/dist/evolve-cmd-HR25DRTC.js +0 -2
  158. package/dist/explain-JIXUWEFJ.js +0 -2
  159. package/dist/ingest-4CGBXC2L.js +0 -2
  160. package/dist/ingest-cmd-X7BWGIN7.js +0 -3
  161. package/dist/interactive-bind-T6OBLZCT.js +0 -7
  162. package/dist/login-flow-LJ4BH3OS.js +0 -2
  163. package/dist/pipeline-TZJ652NT.js +0 -2
  164. package/dist/readmodel-MPTENJ2R.js +0 -2
  165. package/dist/reconcile-cmd-242S7XNO.js +0 -8
  166. package/dist/run-UGAOGR3B.js +0 -2
  167. package/dist/signals-cmd-LXHZQLXZ.js +0 -2
  168. package/dist/tcg-generate-E5X23RVP.js +0 -2
  169. package/dist/token-refresh-GGLARJV4.js +0 -2
@@ -1,9 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as z}from"./chunk-I2S6KNZW.js";import{b as H,d as Q}from"./chunk-RE3BZVGE.js";import{d as j}from"./chunk-JFAFKHDX.js";import{a as G}from"./chunk-YKTYVJBN.js";import{d as U}from"./chunk-KHDUQ33H.js";import{a as B}from"./chunk-D5T4ARTB.js";import{a as I,c as O}from"./chunk-E4OYR32M.js";function rt(t){let e=process.env.HOME??"";return e&&t.startsWith(e)?`~${t.slice(e.length)}`:t}import{randomBytes as Ze}from"crypto";function X(t,e){let n=Math.min(t.length,e.length),s=0,r=0,a=0;for(let o=0;o<n;o++)s+=t[o]*e[o],r+=t[o]*t[o],a+=e[o]*e[o];return r===0||a===0?0:s/(Math.sqrt(r)*Math.sqrt(a))}function K(t,e,n){return n*t+(1-n)*e}var W=.7;import{readFileSync as xe,writeFileSync as Ae,renameSync as ve,mkdirSync as ke}from"fs";import{dirname as Se,join as J}from"path";function Ee(t){return J(t,"embeddings")}function Re(t){let e=t.indexOf(":");return e>=0?t.slice(e+1):t}function Y(t,e,n){let s=Re(n);return J(Ee(t),e,s.slice(0,2),`${s.slice(2)}.f32`)}function Z(t,e,n){try{let s=xe(Y(t,e,n)),r=new Float32Array(Math.floor(s.length/4));for(let a=0;a<r.length;a++)r[a]=s.readFloatLE(a*4);return r}catch{return null}}function q(t,e,n,s){try{let r=Y(t,e,n);ke(Se(r),{recursive:!0});let a=Buffer.alloc(s.length*4);for(let d=0;d<s.length;d++)a.writeFloatLE(s[d],d*4);let o=`${r}.tmp`;Ae(o,a),ve(o,r)}catch(r){process.stderr.write(`[embed] Failed to cache vector: ${r instanceof Error?r.message:String(r)}
3
- `)}}var $e=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar"],Ce=["source_read","source_grep"],Me=[...$e,...Ce],re=50,N=200,se=10,ie=50,ee=20,Te=200,De=50;function D(t,e,n){let s=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(s,n))}function k(t,e){let n=t[e];if(typeof n!="string"||n.length===0)throw new y(`param "${e}" must be a non-empty string`);return n}function v(t,e){let n=t[e];if(n==null)return null;if(typeof n!="string")throw new y(`param "${e}" must be a string when present`);return n}var y=class extends Error{};function P(t,e){let n=t.getNode(e);return n?{cid:e,label:n.label,content:n.content,trust:t.trust.get(e)??null,freshness:t.stale(e)}:null}function te(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function oe(t,...e){let n=te(t);if(n.size===0)return 0;let s=t.trim().toLowerCase(),r=0;for(let a of e){let o=te(a);if(o.size===0)continue;let d=0;for(let c of n)o.has(c)&&d++;let u=n.size+o.size-d,m=u===0?0:d/u;s&&a.toLowerCase().includes(s)&&(m=Math.max(m,.9)),r=Math.max(r,m)}return r}function Fe(t,e){let n=k(e,"cid"),s=v(e,"type"),r=v(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new y('param "direction" must be out|in|both');let a=D(e.limit,re,N),o=[];return(r==="out"||r==="both")&&o.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&o.push(...t.edgesInto(n)),o.filter(d=>s==null||d.type===s).slice(0,a)}function Le(t,e){let n=k(e,"source_id"),s=t.heads.get(n)??null,r=[];for(let a of t.nodeLabel.keys()){let o=t.derivesInto(a).filter(u=>u.props.source_id===n).map(u=>({source_cid:u.props.source_cid,anchor:u.props.anchor??null}));if(o.length===0)continue;let d=P(t,a);if(d&&(r.push({...d,pins:o,pinned_to_head:s!=null&&o.some(u=>u.source_cid===s)}),r.length>=N))break}return r}function Ge(t,e){let n=k(e,"label"),s=v(e,"trust"),r=v(e,"freshness"),a=D(e.limit,re,N),o=[];for(let{cid:d}of t.byLabel(n)){let u=P(t,d);if(u&&!(s!=null&&u.trust!==s)&&!(r!=null&&u.freshness!==r)&&(o.push(u),o.length>=a))break}return o}function Ne(t){return t.staleList().map(({cid:e,state:n})=>{let s=t.getNode(e);return{cid:e,state:n,label:s?.label??null,title:s?.content.title??null}})}function Pe(t,e){let n=k(e,"text"),s=v(e,"label")??"usecase",r=D(e.k,se,ie),a=[];for(let{cid:o,content:d}of t.byLabel(s)){let u=String(d.title??""),m=String(d.summary??""),c=oe(n,u,m);c<=0||a.push({cid:o,title:u,summary:m,score:Math.round(c*1e3)/1e3,trust:t.trust.get(o)??null,freshness:t.stale(o)})}return a.sort((o,d)=>d.score-o.score||o.cid.localeCompare(d.cid)),a.slice(0,r)}function ae(t,e,n){let s=t.heads.get(n);if(typeof s!="string"){let o=[...t.heads.keys()].sort().join(", ");throw new y(`unknown source_id "${n}" \u2014 known: ${o||"(none)"}`)}if(t.mediaOf(s).format==="image")throw new y(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=t.getNode(s)?.content?.blob,a=typeof r=="string"?U(e,r):null;if(a==null)throw new y(`source "${n}" blob is missing from the store`);return{head:s,lines:a.toString("utf8").replace(/\n$/,"").split(`
4
- `)}}function Ve(t,e,n){return t.slice(e-1,n).map((s,r)=>`${String(e+r).padStart(4,"0")}| ${s}`).join(`
5
- `)}function Ie(t,e,n){let s=k(e,"source_id"),r=v(e,"anchor"),a=e.line_range;if(r!=null&&a!=null)throw new y("give anchor OR line_range, not both");let{head:o,lines:d}=ae(t,n,s),u=d.length,m,c;if(r!=null){let f=/^L(\d+)-L(\d+)$/.exec(r);if(!f)throw new y(`anchor "${r}" is not L<a>-L<b>`);let h=Number(f[1]),b=Number(f[2]);if(h<1||b<h||b>u)throw new y(`anchor "${r}" does not resolve (source has ${u} lines)`);m=Math.max(1,h-ee),c=Math.min(u,b+ee)}else if(a!=null){if(!Array.isArray(a)||a.length!==2||!a.every(b=>Number.isInteger(b)))throw new y('param "line_range" must be [from_line, to_line]');let[f,h]=a;if(f<1||h<f)throw new y('param "line_range" must be 1-based with from \u2264 to');if(f>u)throw new y(`line_range starts past the end (source has ${u} lines)`);m=f,c=Math.min(h,u)}else m=1,c=u;return c=Math.min(c,m+Te-1),{window:Ve(d,m,c),from_line:m,to_line:c,source_cid:o}}function Oe(t,e,n){let s=k(e,"pattern"),r=v(e,"source_id"),a;try{a=new RegExp(s,"u")}catch(m){throw new y(`invalid pattern: ${m instanceof Error?m.message:String(m)}`)}let o=r!=null?[r]:[...t.heads.keys()].sort(),d=[],u=!1;e:for(let m of o){if(r==null){let f=t.heads.get(m);if(typeof f!="string"||t.mediaOf(f).format==="image")continue}let{lines:c}=ae(t,n,m);for(let f=0;f<c.length;f++)if(a.test(c[f])){if(d.length>=De){u=!0;break e}d.push({source_id:m,line:f+1,text:c[f]})}}return{matches:d,truncated:u}}function Be(t,e,n,s){try{switch(e){case"get_node":return{ok:!0,result:P(t,k(n,"cid"))};case"get_edges":return{ok:!0,result:Fe(t,n)};case"find_by_provenance":return{ok:!0,result:Le(t,n)};case"match_by_type":return{ok:!0,result:Ge(t,n)};case"stale_nodes":return{ok:!0,result:Ne(t)};case"search_similar":return{ok:!0,result:Pe(t,n)};case"source_read":case"source_grep":{if(s==null)throw new y("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?Ie:Oe)(t,n,s)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${Me.join(", ")}`}}}catch(r){return r instanceof y?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}}var ne="assurance.sim";function Ue(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
6
- `)}async function je(t,e,n){let s=k(e,"text"),r=v(e,"label")??"usecase",a=D(e.k,se,ie),o=[];for(let{cid:u,content:m}of t.byLabel(r)){if(t.superseded.has(u))continue;let c=String(m.title??""),f=String(m.summary??""),h=String(m.description??"");o.push({cid:u,title:c,summary:f,description:h,lex:oe(s,c,f,h)})}let d=u=>{let m=[];for(let c of o){let f=u(c);f.score<=0||m.push({cid:c.cid,title:c.title,summary:c.summary,score:Math.round(f.score*1e3)/1e3,trust:t.trust.get(c.cid)??null,freshness:t.stale(c.cid),...f.dense!==void 0?{dense_score:Math.round(f.dense*1e3)/1e3,lexical_score:Math.round(c.lex*1e3)/1e3}:{}})}return m.sort((c,f)=>f.score-c.score||c.cid.localeCompare(f.cid)),m.slice(0,a)};try{let u=n.readVector??Z,m=n.writeVector??q,c=n.alpha??W,{alias:f}=await n.resolveAlias(ne),h=new Map,b=[],R=[];for(let _ of o){let x=u(n.contextDir,f,_.cid);x?h.set(_.cid,x):(b.push(_.cid),R.push(Ue(_)))}let{vectors:S}=await n.embed(ne,[s,...R]),$=Float32Array.from(S[0]);for(let _=0;_<b.length;_++){let x=Float32Array.from(S[_+1]);h.set(b[_],x),m(n.contextDir,f,b[_],x)}return d(_=>{let x=h.get(_.cid),w=x?X($,x):0;return{score:K(w,_.lex,c),dense:w}})}catch{return d(u=>({score:u.lex}))}}async function ce(t,e,n,s){if(e==="search_similar"&&s)try{return{ok:!0,result:await je(t,n,s)}}catch(r){return r instanceof y?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}return Be(t,e,n,s?.contextDir)}import{readFileSync as He,writeFileSync as Qe,renameSync as ze,mkdirSync as Xe}from"fs";import{dirname as Ke,join as We}from"path";var V=1,Je=720*60*1e3;function F(t){return We(O,"embeddings",`alias-${t}.json`)}function le(t,e=Date.now()){return t!==null&&e-t.fetchedAt<Je}function ue(t){try{let e=JSON.parse(He(t,"utf-8"));return e.wrapperVersion!==V||typeof e.purposes!="object"||e.purposes===null?null:{wrapperVersion:V,writtenByVersion:String(e.writtenByVersion??""),purposes:e.purposes}}catch{return null}}function de(t,e,n=F(t)){let r=ue(n)?.purposes?.[e];return!r||typeof r.alias!="string"||typeof r.dims!="number"||typeof r.fetchedAt!="number"?null:{alias:r.alias,dims:r.dims,fetchedAt:r.fetchedAt}}function me(t,e,n,s=F(t)){try{Xe(Ke(s),{recursive:!0});let a=ue(s)?.purposes??{};a[e]={alias:n.alias,dims:n.dims,fetchedAt:Date.now()};let o={wrapperVersion:V,writtenByVersion:I,purposes:a},d=`${s}.tmp`;Qe(d,JSON.stringify(o,null,2)+`
7
- `),ze(d,s)}catch(r){process.stderr.write(`[embed] Failed to save alias cache: ${r instanceof Error?r.message:String(r)}
8
- `)}}function Ye(t){return t.TESTMUAI_ENV==="stage"?"stage":"prod"}function fe(t){let e=t.env??process.env,n=t.auth?.TESTMUAI_BASIC_AUTH||e.TESTMUAI_BASIC_AUTH;if(n)return{authorization:`Basic ${n}`};let s=t.auth?.TESTMUAI_API_KEY||e.TESTMUAI_API_KEY;return s?{authorization:`Bearer ${s}`}:{}}async function ge(t,e={}){let n=e.env??process.env,s=Ye(n),r=e.aliasCacheFile??F(s),a=e.now??Date.now,o=de(s,t,r);if(le(o,a()))return{alias:o.alias,dims:o.dims};let u=`${G(n)}/assurance/embed/alias?purpose=${encodeURIComponent(t)}`,m=await(e.fetchImpl??fetch)(u,{method:"GET",headers:fe(e)});if(!m.ok)throw new Error(`embed alias resolve failed: ${m.status}`);let c=await m.json();return me(s,t,{alias:c.alias,dims:c.dims},r),{alias:c.alias,dims:c.dims}}async function pe(t,e,n={}){let s=n.env??process.env,r=G(s),a=await(n.fetchImpl??fetch)(`${r}/assurance/embed`,{method:"POST",headers:{...fe(n),"content-type":"application/json"},body:JSON.stringify({purpose:t,input:e})});if(!a.ok)throw new Error(`embed failed: ${a.status}`);return await a.json()}var qe=2,he=10,et=2;function _e(t,e,n){return t.map(s=>{let r=e.find(a=>a.id===s.id);return r&&r.selected_index!=null&&r.selected_index>=0&&r.selected_index<s.options.length?{id:s.id,resolution:"answered",selected_index:r.selected_index,free_text:null}:r&&r.free_text!=null&&s.allow_free_text?{id:s.id,resolution:"answered",selected_index:-1,free_text:r.free_text}:n.explicitAcceptDefaults?{id:s.id,resolution:"assumed-default",selected_index:s.recommended_index,flagged:!0}:{id:s.id,resolution:"deferred",selected_index:null}})}async function kt(t,e,n,s,r=()=>{},a){let o=(i,l)=>r(i,l,t.session_id),d=(process.env.ASSURANCE_LOG_LEVEL??"info").toLowerCase()==="debug",u={contextDir:e.contextDir,resolveAlias:i=>ge(i,{env:process.env,auth:e.auth}),embed:(i,l)=>pe(i,l,{env:process.env,auth:e.auth})},m=0,c=e.agent(t,{auth:e.auth,onWarn:i=>{o("warn",i),e.out(i)},onStderr:i=>o("agent_stderr",i)}),f=null,h=null,b;e.chat?.attachSender?.(i=>c.send(i)),e.initialMessage&&(c.send({type:"user_message",message_id:`msg-${t.session_id}-${Ze(3).toString("hex")}`,text:e.initialMessage}),o("user_message_sent",{chars:e.initialMessage.length,...d?{text:e.initialMessage}:{}}),e.emit?.({type:"message_sent",sid:t.session_id,chars:e.initialMessage.length}),e.chat?.note(`delivered your message to the agent: "${e.initialMessage}"`));let R,S=0,$=0,_=0,x,w=H(),C=e.progress??e.out;try{for await(let i of c.events){try{e.chat?.onAgentEvent(i)}catch(l){o("chat_mirror_error",{event_type:i.type,message:l instanceof Error?l.message:String(l)})}if(i.type==="reasoning_delta"?(m+=i.text.length,process.env.KANE_TRACE_REASONING&&o("reasoning_delta",i.text)):o(i.type,i),i.type==="reasoning_done"&&o("reasoning_chars",m),i.type==="progress")C(`\u2026 ${i.stage}${i.n?` #${i.n}`:""}`),e.emit?.({type:"agent_activity",kind:"progress",label:`${i.stage}${i.n?` #${i.n}`:""}`});else if(i.type==="reasoning_delta"||i.type==="reasoning_done"||i.type==="tool_activity"||i.type==="decision_activity"){e.onStreamEvent?.(i);let l=w;if(w=Q(w,i),w===l)continue;i.type==="reasoning_delta"?w.liveThinking===i.text&&C("\u2237 thinking\u2026"):i.type==="reasoning_done"?i.present&&(C(`thought for ${(i.took_ms/1e3).toFixed(1)}s`),e.emit?.({type:"agent_activity",kind:"thinking_done",label:`thought for ${(i.took_ms/1e3).toFixed(1)}s`})):i.type==="tool_activity"?i.status!=="done"&&(C(w.activity[w.activity.length-1].label),e.emit?.({type:"agent_activity",kind:"tool",label:w.activity[w.activity.length-1].label})):(C(`\xB7 ${w.activity[w.activity.length-1].label}`),e.emit?.({type:"agent_activity",kind:"decision",label:w.activity[w.activity.length-1].label}))}else if(i.type==="usage")x=i.total_credits,e.emit?.({type:"usage",credits:i.credits,total_credits:i.total_credits});else if(i.type==="graph_query"){let l=await ce(e.graphSlot?.current??s,i.method,i.params??{},u),A=l.ok?{type:"graph_result",id:i.id,ok:!0,result:l.result}:{type:"graph_result",id:i.id,ok:!1,error:l.error};o("graph_result",d?{id:i.id,method:i.method,ok:l.ok,result:l.ok?l.result:l.error}:{id:i.id,method:i.method,ok:l.ok}),c.send(A)}else if(i.type==="session_paused")b=i;else if(i.type==="ask_user"){i.text&&(e.chat?e.chat.ledger({kind:"agent",text:i.text}):e.out(i.text));let l=t.mode;if(l!=="interactive"){let g=i.questions.filter(p=>p.risk==="high");if(l==="ci"&&g.length>0){R=g,c.kill();break}if(l==="agent"&&g.length>0){o("pause_requested",{high:g.map(p=>p.id)}),c.send({type:"pause"});continue}let E=_e(i.questions,[],{explicitAcceptDefaults:!0});S+=E.length;for(let p of E)o("assumed_default",{id:p.id,resolution:p.resolution}),e.emit?.({type:"assumed_default",id:p.id,selected_index:p.selected_index,risk:i.questions.find(T=>T.id===p.id)?.risk});let M={type:"user_response",answers:E.map(p=>({id:p.id,selected_index:p.resolution==="deferred"?null:p.selected_index,free_text:null}))};c.send(M);continue}let A=await e.ask(i.questions),ye=_e(i.questions,A,{explicitAcceptDefaults:!1}),we={type:"user_response",answers:i.questions.map(g=>{let E=A.find(p=>p.id===g.id);if(E?.free_text!=null){let p=n.get(g.id)??0;if(!g.allow_free_text||p>=qe){let T=g.options[g.recommended_index]?.label??"recommended option";if(S+=1,e.emit?.({type:"assumed_default",id:g.id,selected_index:g.recommended_index,risk:g.risk}),e.chat?.noteCoercion)e.chat.noteCoercion(g,T);else{let L=g.text.replace(/\?+\s*$/,""),be=L.length<=36?L:`${L.slice(0,33)}\u2026`;e.out(`note: couldn't use a typed answer for "${be}" \u2014 kept the recommended option (${T})`)}return{id:g.id,selected_index:g.recommended_index,free_text:null}}return n.set(g.id,p+1),{id:g.id,selected_index:null,free_text:E.free_text}}let M=ye.find(p=>p.id===g.id);return M.resolution==="deferred"?{id:g.id,selected_index:null,free_text:null}:{id:g.id,selected_index:M.selected_index,free_text:null}})};c.send(we)}else if(i.type==="chat_ops"&&!e.chat){let l=i.chat_ops??i,A=Array.isArray(l.ops)?l.ops.length:0;if(A===0)l.text&&e.out(l.text),c.send({type:"session_complete"}),o("headless_zero_op_chat_turn_complete",{chars:l.text?.length??0});else if(_<et)_+=1,c.send({type:"user_message",message_id:`nochat-${t.session_id}-${_}`,text:"[auto-repair] chat ops are unavailable in this mode \u2014 commit through finalize_design, or finish if nothing remains."}),o("headless_chat_ops_nudge",{n:_,ops:A});else{h="agent kept sending chat ops in a mode with no chat plane",e.out("error: agent kept sending chat ops in a mode with no chat plane \u2014 closing the session"),o("headless_chat_ops_terminal",{ops:A}),c.kill();break}}else if(i.type===(a.terminalEventType??"proposal")){let l=await a.onProposalEvent(i[i.type]);if(f=l.proposal,l.error&&(h=l.error),l.receipt)e.emit?.(l.receipt.event),t.mode!=="interactive"?($+=1,l.sessionComplete||$>=he?(l.sessionComplete||(e.out(`warning: ${he} commits without completion \u2014 closing the session (runaway guard)`),o("receipt_runaway_cap",{commits:$})),c.send({type:"session_complete"}),o("session_complete_sent",{commit_n:l.receipt.event.commit_n,runaway:!l.sessionComplete})):(c.send({type:"user_message",message_id:`receipt-${t.session_id}-${String(l.receipt.event.commit_n??0)}`,text:l.receipt.text}),o("receipt_sent",{commit_n:l.receipt.event.commit_n,chars:l.receipt.text.length}))):e.chat?.holdReceipt&&(e.chat.holdReceipt(l.receipt.text),o("receipt_held",{commit_n:l.receipt.event.commit_n}));else if(l.error&&t.mode!=="interactive"){e.out("error: commit failed with no repair channel \u2014 closing the session"),o("headless_commit_error_terminal",{error:l.error}),c.kill();break}}else if(i.type==="error"){h=i.message;let l=i.failed_proposal;l&&o("failed_proposal",l)}}}finally{c.kill()}return{proposal:f,error:h,paused:b,highRisk:R,...S>0?{assumedDefaults:S}:{},...x!==void 0?{creditsTotal:x}:{}}}var tt={kind:"system",id:"distiller"};function Ct(t,e=n=>process.stderr.write(n+`
9
- `)){try{let n=B(t),{watermark:s}=j(t),r=z({contextDir:t,graph:n,watermark:s,by:tt});if(r.errors){let a=r.errors.map(o=>`${o.code}: ${o.detail}`).join("; ");return e(`warning: style-note distill skipped \u2014 ${a}`),{minted:0,error:a}}return{minted:r.minted,error:null}}catch(n){let s=n instanceof Error?n.message:String(n);return e(`warning: style-note distill skipped \u2014 ${s}`),{minted:0,error:s}}}export{rt as a,ce as b,ge as c,pe as d,qe as e,_e as f,kt as g,Ct as h};
@@ -1,14 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as ge,e as Te,g as Me,h as Ge}from"./chunk-SGU72YLH.js";import{b as Ne,f as je,g as Be,h as Ue}from"./chunk-FXPPQL4D.js";import{a as Oe}from"./chunk-RE3BZVGE.js";import{a as Pe,b as Ae}from"./chunk-JFAFKHDX.js";import{e as z,f as re}from"./chunk-FTD3B7QA.js";import{c as Ce}from"./chunk-VJUIW2ES.js";import{b as Ie}from"./chunk-YKTYVJBN.js";import{a as Fe}from"./chunk-Z56AWGVY.js";import{a as ee,d as te}from"./chunk-KHDUQ33H.js";import{a as E}from"./chunk-D5T4ARTB.js";import{b as Ee}from"./chunk-B2PZAB7J.js";import{d as U}from"./chunk-IACKIGPX.js";import{appendFileSync as et,mkdirSync as pe,writeFileSync as he}from"fs";import{extname as tt,join as I}from"path";var O=class extends Error{code;constructor(e,c){super(`${e}: ${c}`),this.name="ProposalAdapterError",this.code=e}};function He(s){return s.version===2}function qe(s,e){if(s.read_basis.length!==1)throw new O("READ_BASIS_COUNT",`read_basis must have exactly 1 element, got ${s.read_basis.length}`);let c=s.read_basis[0],h=s.use_cases.map(i=>{if(i.cite.length!==1)throw new O("CITE_COUNT",`${i.temp_ref}: cite must have exactly 1 element, got ${i.cite.length}`);let l=i.cite[0];if(l.source_id!==c.source_id)throw new O("SOURCE_MISMATCH",`${i.temp_ref}: cite source ${l.source_id} != read_basis source ${c.source_id} (single-source)`);return{temp_ref:i.temp_ref,title:i.title,...i.description!==void 0?{description:i.description}:{},...i.summary!==void 0?{summary:i.summary}:{},...i.actors!==void 0?{actors:i.actors}:{},...i.value!==void 0?{value:i.value}:{},risk:i.risk,cite:{anchor:l.anchor,quote:l.quote},...i.criteria!=null&&i.criteria.length>0?{criteria:i.criteria.map((d,p)=>{if(d.cite.source_id!==c.source_id)throw new O("SOURCE_MISMATCH",`${i.temp_ref}.criteria[${p}]: cite source ${d.cite.source_id} != read_basis source ${c.source_id} (single-source)`);return{text:d.text,cite:{anchor:d.cite.anchor,quote:d.cite.quote}}})}:{},depends_on_hint:i.depends_on_hint,matches_existing:i.matches_existing,...i.conflicts_with!=null?{conflicts_with:i.conflicts_with}:{},...i.changed?{changed:!0}:{},...i.updated!=null?{updated:i.updated}:{}}});return{version:1,read_basis:e,source:{source_id:c.source_id,source_cid:c.source_cid},use_cases:h}}function Le(s){let{contextDir:e,graph:c}=s,h=s.maxDigestBytes??4096,i={},l=[];for(let[u,m]of c.heads){if(i[u]=m,typeof m!="string")continue;let _=c.mediaOf(m),w=c.getNode(m)?.content?.blob;if(typeof w=="string")if(_.format==="image")l.push({source_id:u,cid:m,format:"image",blobRef:{path:ee(e,w),cid:w}});else{let n=te(e,w)?.toString("utf8")??"";l.push({source_id:u,cid:m,format:_.format,text:n})}}l.sort((u,m)=>u.source_id<m.source_id?-1:1);let d=[];for(let u of c.byLabel(U.STYLENOTE).sort((m,_)=>m.cid<_.cid?-1:1))c.superseded.has(u.cid)||d.push(`\u2022 ${String(u.content.statement)} [${String(u.content.learned_from_kind)}]`);let p="";for(let u of d){if(Buffer.byteLength(p+u+`
3
- `,"utf8")>h)break;p+=u+`
4
- `}return{read_basis:i,sources:l,styleNoteDigest:p}}function We(s,e){let c=Le({contextDir:s,graph:e}).styleNoteDigest;return c.length>0?c:void 0}function rt(s){return s.length>8&&s[0]===137&&s[1]===80&&s[2]===78&&s[3]===71?"image/png":s.length>3&&s[0]===255&&s[1]===216&&s[2]===255?"image/jpeg":s.length>12&&s.toString("ascii",0,4)==="RIFF"&&s.toString("ascii",8,12)==="WEBP"?"image/webp":null}function st(s){return s.toString("utf8").replace(/\n$/,"").split(`
5
- `).map((c,h)=>`${String(h+1).padStart(4,"0")}| ${c}`).join(`
6
- `)}function ze(s){return s.toISOString().replace(/[-:]/g,"").slice(0,15)}function ot(s){return s.startsWith("su-conv-")?`conv-${Ee(Buffer.from(s,"utf8")).slice(0,8)}`:s}function Ye(s){return s.source_id.startsWith("su-conv-")?"the conversation":s.source_id}function it(s,e,c){return`reading ${Ye(s)}${c>1?` (source ${e} of ${c})`:""}`}function V(s){return s.toLowerCase().trim().replace(/\s+/g," ")}function Ve(s,e){let c=new Map,h=new Map,i=new Map;for(let{cid:d,content:p}of e.byLabel(U.USECASE)){if(e.superseded.has(d))continue;(e.trust.get(d)==="archived"?i:h).set(V(String(p.title??"")),d)}let l=d=>e.trust.get(d)==="archived"?{cid:d,archived:!0,reason:e.archivedReason.get(d)}:{cid:d};for(let d of s.use_cases){if(d.matches_existing){let m=d.matches_existing.cid;if(e.superseded.has(m)){let _=e.tipOf(m);m=e.superseded.has(_)?null:_}if(m!==null){c.set(d.temp_ref,l(m));continue}}let p=h.get(V(d.title));if(p){c.set(d.temp_ref,{cid:p});continue}let u=i.get(V(d.title));u&&c.set(d.temp_ref,l(u))}return c}var Je=/^(\S+)\.criteria\[(\d+)\]/;function nt(s,e,c){if(e.length===0||!e.every(i=>Je.test(i.detail)))return!1;let h=new Map;for(let i of e){let l=Je.exec(i.detail),d=h.get(l[1])??new Set;d.add(Number(l[2])),h.set(l[1],d)}for(let i of s.use_cases){let l=h.get(i.temp_ref);l?.size&&(i.criteria=(i.criteria??[]).filter((d,p)=>!l.has(p)),c(`${i.temp_ref}: dropped ${l.size} criteria with unverifiable cites \u2014 committed without them (criteria are hints, not oracles)`))}return!0}async function Xe(s,e,c,h,i=()=>{},l){let d=(p,u)=>i(p,u,s.session_id);return Me(s,e,c,h,i,{async onProposalEvent(p){let u=p,m=null,_=null;if(He(u))try{m=qe(u,s.read_basis),d("adapter",{ok:!0,use_cases:m.use_cases.length})}catch(w){_=w instanceof O?w.message:String(w),d("adapter",{ok:!1,error:_})}else m=u;return m&&m.use_cases.length===0&&e.out("warning: the agent proposed ZERO use-cases for this source"),m&&l&&await l(m),{proposal:m,error:_}}})}var at=new Set(["agent","ci","override"]);async function Ft(s,e){let c=s.mode??"interactive";if(c==="interactive"){if(!e.isTTY)return e.out("extract: --mode interactive needs a TTY (use --mode agent|ci|override headless)"),2}else if(!at.has(c))return e.out(`extract: unknown mode "${c}" \u2014 interactive | agent | ci | override`),2;let h=ze(e.now?.()??new Date),i=I(e.contextDir,"logs");pe(i,{recursive:!0});let l=I(i,`extract-${h}.log`),d=`run-${h}-${Math.random().toString(36).slice(2,8)}`,p=t=>t==="error"||t==="failed_proposal"?"error":t==="repair_respawn"?"warn":"info",u=(t,a,x)=>{try{et(l,JSON.stringify({ts:new Date().toISOString(),level:p(t),run_id:d,...x?{session_id:x}:{},kind:t,data:a})+`
7
- `)}catch{}};e.out(`trace: ${ge(l)}`),e.emit?.({type:"run_start",mode:c,trace:l});let m=Ie();if(m&&e.out(m),e.preflightTurn){let t=await e.preflightTurn();if(u("preflight",t),!t.ok)return e.out(t.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:t.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),2}let _=E(e.contextDir),w=We(e.contextDir,_);if(s.source){if(s.resume){let a="error: --source cannot be combined with --resume (the resumed session already has its scope)";return e.out(a),e.emit?.({type:"error",message:a,code:"SOURCE_WITH_RESUME"}),2}let t=_.heads.get(s.source);if(typeof t!="string"){let a=t===null?`error: --source ${s.source} was ingested but is retired \u2014 re-ingest it to extract again`:`error: --source ${s.source} is not an ingested source (kane-cli context list shows them)`;return e.out(a),e.emit?.({type:"error",message:a,code:"SOURCE_UNKNOWN"}),2}}let n=null;if(s.resume){try{n=Ue(e.contextDir,s.resume,_)}catch(a){return e.out(`error: ${a instanceof Error?a.message:String(a)}`),e.emit?.({type:"error",message:`error: ${a instanceof Error?a.message:String(a)}`}),1}n.staleBasis.length>0&&e.out(`note: changed since the pause: ${n.staleBasis.join(", ")} \u2014 re-presented items may be stale`);let t=n.handle.state.held_receipts??[];if(t.length>0)if(e.chat?.holdReceipt)for(let a of t)e.chat.holdReceipt(a);else e={...e,initialMessage:[t.join(`
8
-
9
- `),e.initialMessage].filter(Boolean).join(`
10
-
11
- `)};n.handle.state.assumed.length>0&&e.out(`note: ${n.handle.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${s.resume} lists them`)}let _e=_.extractedSourceCids,J=!!(s.force||n?.handle.state.force),v=[],T=[];for(let[t,a]of _.heads.entries())if(a!=null&&!(s.source&&t!==s.source)){if(!s.source&&!n&&t.startsWith("su-conv-")){e.out(`skipped: ${t} \u2014 conversation source (extract it explicitly with --source ${t})`),T.push({source_id:t,reason:"conversation"});continue}if(n){let x=t in n.handle.state.read_basis,A=n.handle.state.corpus_cursor.remaining.includes(t);if(!x&&!A)continue;if(A&&!J&&_e.has(a)){e.out(`cached: ${t} @ ${a.slice(0,19)} already extracted \u2014 skipping`),T.push({source_id:t,reason:"cached"});continue}}else if(!J&&_e.has(a)){e.out(`cached: ${t} @ ${a.slice(0,19)} already extracted \u2014 skipping`),T.push({source_id:t,reason:"cached"});continue}v.push({source_id:t,cid:a})}if(e.emit?.({type:"corpus",sources:v,skipped:T}),v.length===0){if(n){let x=`error: resumed session's paused source (${Object.keys(n.handle.state.read_basis).join(", ")||"unknown"}) is no longer in the corpus \u2014 restore/re-ingest it and re-run --resume ${s.resume}, or discard with: kane-cli context sessions clean ${s.resume}`;return e.out(x),e.emit?.({type:"error",message:x,code:"SOURCE_MISSING"}),n.handle.release(),2}let t=T.length>0&&T.every(a=>a.reason==="conversation");return e.out(s.source?`extract: nothing to do \u2014 ${s.source} is already extracted at its current snapshot (--force to re-run)`:t?"extract: nothing to do \u2014 only conversation sources here (extract one explicitly with --source <id>)":"extract: nothing to do \u2014 every ingested source is already extracted"),0}let X=new Map;if(n&&n.questions.length>0&&!s.message){e.out(`re-presenting ${n.questions.length} unanswered question(s) from the paused session`);let t=await e.ask(n.questions.map(je));for(let a of t)X.set(a.id,a)}let G=e.by??{kind:"human",id:"owner"},P=c==="interactive"&&!s.plan&&!!e.chat,se=0,xe=0;try{for(let t of v){let a=E(e.contextDir),x={current:a};e.chat?.attachOnCommitted?.(r=>{x.current=r});let A=a.getNode(t.cid),H=String(A?.content.blob??""),oe=te(e.contextDir,H);if(!oe)return e.out(`error: ${t.source_id}: blob ${H} missing from .context/blobs`),e.emit?.({type:"error",source_id:t.source_id,message:`error: ${t.source_id}: blob ${H} missing from .context/blobs`,code:"BLOB_MISSING"}),1;let ve=a.mediaOf(t.cid),ie=ve.media_type.startsWith("image/");if(!ie){let r=rt(oe);if(r){e.out(`skipping ${t.source_id}: binary ${r} ingested before image support \u2014 re-ingest it (kane-cli context ingest) to extract from it`),e.emit?.({type:"source_skipped",source_id:t.source_id,reason:"binary_pre_media"});continue}}let q=ie?`0001| (image source ${t.source_id} \u2014 the content is attached as an image; cite it with anchor img#whole)`:st(oe),ye=ze(e.now?.()??new Date),M=`${ye}-${t.source_id}`,$e=!!(n&&t.source_id in n.handle.state.read_basis)?s.resume:`ext-${ye}-${ot(t.source_id)}`,N="";if(P){let r=Ce({contextDir:e.contextDir,graph:E(e.contextDir),sessionStamp:$e,by:G});r.errors===null||r.errors[0]?.code==="CONV_SOURCE_EXISTS"?(N=r.sourceId,e.chat.attachConversationSource?.(N),x.current=E(e.contextDir)):e.out(`warning: conversation source unavailable (${r.errors[0]?.detail}) \u2014 chat adds will not land this session`)}let b={type:"run_config",version:1,session_id:$e,mode:c,source:{source_id:t.source_id,source_cid:t.cid,kind:tt(t.source_id)||"md",numbered_text:q},existing_use_cases:a.byLabel(U.USECASE).filter(({cid:r})=>a.trust.get(r)!=="archived"&&!a.superseded.has(r)).map(({cid:r,content:o})=>({id:r,title:String(o.title??""),summary:String(o.summary??"")})),read_basis:x.current.latestHash,max_free_text_rounds:Te,graph_reads:!0,verb:"extract",...w!==void 0?{style_note_digest:w}:{},topology:Fe(),...P?{chat:!0}:{},...ie?{image_sources:[{source_id:t.source_id,source_cid:t.cid,media_type:ve.media_type,blob_ref:{path:ee(e.contextDir,H),cid:H}}]}:{},...n&&t.source_id in n.handle.state.read_basis?{resume:{agent_state:n.handle.state.agent_state}}:{}};P||e.out(n&&t.source_id in n.handle.state.read_basis?`resuming: ${t.source_id} (session ${s.resume})`:`extracting: ${t.source_id} @ ${t.cid.slice(0,19)}`),e.emit?.({type:"source_start",source_id:t.source_id,cid:t.cid,index:v.indexOf(t)+1,total:v.length,resumed:!!(n&&t.source_id in n.handle.state.read_basis)}),e.chat?.ledger?.({kind:"banner",text:it(t,v.indexOf(t)+1,v.length)}),e.chat?.setWorking?.(`Reading ${Ye(t)}\u2026`);let be=new Map;u("spawn",{source_id:t.source_id,source_cid:t.cid,resume:!!n,chat:P},b.session_id);let Se=!1,Ke=async r=>{let o=z(r,q,E(e.contextDir));if(u("kane_validate",{errors:o.map(g=>g.code)},b.session_id),o.length>0){e.chat.submit("[auto-repair] the proposal failed validation: "+o.map(g=>`${g.code}: ${g.detail}`).join("; ")+" \u2014 please re-finalize with these fixed.");return}let y=E(e.contextDir),k=Ve(r,y),Q=I(e.contextDir,"proposals",M);pe(Q,{recursive:!0}),he(I(Q,"proposal.json"),JSON.stringify(r,null,2)+`
12
- `);let Ze=new Map(r.use_cases.map(g=>[g.temp_ref,{resolution:"skipped"}])),Z=re({contextDir:e.contextDir,graph:y,proposal:r,proposalId:M,verdicts:Ze,by:{kind:"ai",id:"extract-agent"},autoName:!0});if(Z.errors){e.chat.ledger?.({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:Z.errors.map(g=>`${g.code}: ${g.detail}`)});return}Se=!0;let j=Z.record.nodes.length;se+=j;let B=r.use_cases.length-j;{let g=E(e.contextDir),De=new Map;for(let{cid:$,content:R}of g.byLabel(U.USECASE))g.superseded.has($)||De.set(V(String(R.title??"")),$);let fe=[];for(let $ of r.use_cases){let R=null;if($.matches_existing?.cid&&g.hasNode($.matches_existing.cid)){let W=g.tipOf($.matches_existing.cid);R=g.superseded.has(W)?null:W}R=R??De.get(V($.title))??null,R&&fe.push({ref:$.temp_ref,cid:R})}fe.length>0&&e.chat.registerAliases?.(fe),x.current=g;let ke=$=>{for(let[R,W]of g.names)if(W===$&&!g.superseded.has(W))return R},Re=Oe({verb:"extract",commitN:1,phase:"proposal",committed:Z.record.nodes.map($=>({cid:$.cid,...ke($.cid)?{logical_id:ke($.cid)}:{}})),reused:B},g);e.emit?.(Re.event),e.chat.holdReceipt?.(Re.text)}u("commit",{derived:j,evidence_matched:B,chat:!0},b.session_id),e.chat.ledger?.({kind:"commit",ok:!0,line:j===0&&B>0?`all ${B} matched existing \u2014 nothing new to save`:`saved ${j} use-case${j===1?"":"s"} as drafts`+(B>0?` \xB7 ${B} matched existing`:"")})},we=!!(n&&t.source_id in n.handle.state.read_basis),Y=we&&X.size>0?{...e,ask:async r=>r.every(o=>X.has(o.id))?(n.handle.markApplied(r.map(o=>`resolveq:${s.resume}:${o.id}`)),e.out(`answered ${r.length} re-asked question(s) from the held resume answers`),r.map(o=>X.get(o.id))):e.ask(r)}:e;we&&s.message&&(Y={...Y,initialMessage:s.message});let f=await Xe(b,{...Y,graphSlot:x},be,a,u,P?Ke:void 0);if(e.chat?.setWorking?.(null),f.error)return e.out(`error: agent failed for ${t.source_id}: ${f.error}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: agent failed for ${t.source_id}: ${f.error}`}),1;if(f.highRisk)return e.out(`error: ${f.highRisk.length} high-risk decision${f.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),e.emit?.({type:"error",source_id:t.source_id,message:`error: high-risk question(s) in ci mode (fail-closed): ${f.highRisk.map(r=>r.id).join(", ")}`,code:"HIGH_RISK_CI"}),1;if(f.paused){let r=v.slice(v.indexOf(t)+1).map(Q=>Q.source_id),o=n?.handle??Ne(e.contextDir,{sid:b.session_id,mode:"agent",created_at:(e.now?.()??new Date).toISOString(),expires_at:new Date((e.now?.()??new Date).getTime()+1440*60*1e3).toISOString(),agent_state:f.paused.agent_state,pending:{questions:[],proposals:[]},assumed:[],read_basis:{[t.source_id]:t.cid},corpus_cursor:{remaining:r},conv_source:N,verb:"extract",...J?{force:!0}:{}});N&&o.state.conv_source!==N&&o.save({conv_source:N});let y=e.chat?.drainHeldReceipts?.()??[];(y.length>0||(o.state.held_receipts?.length??0)>0)&&o.save({held_receipts:y}),n?.handle&&o.save({read_basis:{[t.source_id]:t.cid},corpus_cursor:{remaining:r},...J&&!o.state.force?{force:!0}:{}}),Be(o,f.paused),u("session_paused",{sid:o.state.sid},b.session_id);let k=`kane-cli context extract --resume ${o.state.sid} --mode ${c}`;return e.out(`paused: session ${o.state.sid} saved \u2014 resume with: ${k}`),e.emit?.({type:"session_paused",sid:o.state.sid,source_id:t.source_id,mode:c,resume:k,expires_at:o.state.expires_at,pending_questions:f.paused.pending.questions}),e.chat?.ledger?.({kind:"pause",sid:o.state.sid,expires_at:o.state.expires_at,resume:k,messageForm:`${k} --message "<your words>"`}),3}if(P){if(xe+=f.assumedDefaults??0,f.error)return 1;if(!Se){let r=v.length-v.indexOf(t)-1;return e.out(`done \u2014 nothing committed for ${t.source_id} (no finalize before the session ended)`+(r>0?`; stopping here \u2014 ${r} remaining source(s) not extracted (re-run kane-cli context extract to continue)`:"")),n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),n=null),0}n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),n=null);continue}if(!f.proposal)return e.out(`error: agent ended without a proposal for ${t.source_id}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: agent ended without a proposal for ${t.source_id}`}),1;let D=z(f.proposal,q,a);if(u("kane_validate",{errors:D.map(r=>r.code)},b.session_id),D.length>0&&nt(f.proposal,D,r=>e.out(r))&&(u("criteria_dropped",{source_id:t.source_id},b.session_id),D=z(f.proposal,q,a)),D.length>0){if(e.out("the agent's proposal didn't validate \u2014 retrying once"),e.emit?.({type:"validate_failed",source_id:t.source_id,codes:D.map(r=>r.code),repairing:!0}),u("repair_respawn",{source_id:t.source_id},b.session_id),f=await Xe(b,{...Y,graphSlot:x},be,a,u),f.error||!f.proposal)return e.out(`error: repair run failed for ${t.source_id}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: repair run failed for ${t.source_id}`}),1;if(D=z(f.proposal,q,a),D.length>0){for(let r of D)e.out(` ${r.detail}`);return e.emit?.({type:"validate_failed",source_id:t.source_id,codes:D.map(r=>r.code),repairing:!1}),e.emit?.({type:"error",source_id:t.source_id,message:`error: proposal failed validation after repair (${D.map(r=>r.code).join(", ")})`}),1}}let S=f.proposal,K=Ve(S,a),ne=I(e.contextDir,"proposals",M);if(pe(ne,{recursive:!0}),he(I(ne,"proposal.json"),JSON.stringify(S,null,2)+`
13
- `),s.plan){e.out(`plan: ${S.use_cases.length} use-case(s) proposed from ${t.source_id} (nothing committed)`);for(let r of S.use_cases){let o=K.get(r.temp_ref),y=o?o.archived?` \u2248 matches ARCHIVED ${o.cid.slice(0,19)}${o.reason?` \u2014 previously rejected: "${o.reason}"`:" \u2014 previously rejected"}`:` \u2248 matches ${o.cid.slice(0,19)}`:"";e.out(` [${r.risk}] ${r.title} \u2014 cite ${r.cite.anchor}${y}`)}e.emit?.({type:"plan",source_id:t.source_id,use_cases:S.use_cases.map(r=>{let o=K.get(r.temp_ref);return{risk:r.risk,title:r.title,anchor:r.cite.anchor,...o?{match:o.cid,match_archived:!!o.archived}:{}}})}),f.assumedDefaults&&e.out(`assumed: ${f.assumedDefaults} default(s) auto-taken (flagged)`);continue}for(let r of S.use_cases){if(!r.conflicts_with?.length)continue;let o=r.conflicts_with.filter(k=>a.resolve(k)!==null),y=r.conflicts_with.filter(k=>a.resolve(k)===null);y.length>0&&(e.out(`note: ${r.temp_ref}: dropped unresolvable conflict hint(s): ${y.join(", ")}`),r.conflicts_with=o.length>0?o:void 0)}u("review_start",{use_cases:S.use_cases.length,flags:K.size},b.session_id);let L=await e.review(S.use_cases,K);u("review_verdicts",[...L.entries()].map(([r,o])=>({ref:r,resolution:o.resolution})),b.session_id),he(I(ne,"review.json"),JSON.stringify(S.use_cases.map(r=>{let o=L.get(r.temp_ref)??{resolution:"skipped"};return{id:r.temp_ref,kind:"review-item",resolution:o.resolution,edit:o.edit??null,reason:o.reason??null,...o.supersedeTarget?{supersede_target:o.supersedeTarget}:{},by:G}}),null,2)+`
14
- `);let ae=a,C=re({contextDir:e.contextDir,graph:ae,proposal:S,proposalId:M,verdicts:L,by:G,autoName:!0});if(C.errors&&C.errors[0]?.code==="STALE_BASIS"){if(!await e.confirmStale(`the context changed while you reviewed (${C.errors[0].detail}) \u2014 commit against the new head anyway?`))return e.out("aborted: proposal not committed"),e.emit?.({type:"error",source_id:t.source_id,message:"aborted: proposal not committed",code:"STALE_BASIS"}),e.emit?.({type:"done",status:"aborted",exit_code:1}),1;ae=E(e.contextDir),C=re({contextDir:e.contextDir,graph:ae,proposal:S,proposalId:M,verdicts:L,by:G,allowStaleBasis:!0,autoName:!0})}if(C.errors){for(let r of C.errors)e.out(` ${r.detail}`);return e.emit?.({type:"error",source_id:t.source_id,message:`error: commit failed: ${C.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}`}),1}let Qe=new Date().toISOString();for(let r of S.use_cases){let o=L.get(r.temp_ref)??{resolution:"skipped"};for(let y of Ae({ts:Qe,command:"context extract",id:r.temp_ref,by:G},o.resolution))Pe(e.contextDir,y)}let F=C.record,ce=new Map(F.review.map(r=>[r.id,r.resolution])),ue=[...ce.values()].filter(r=>r==="approved"||r==="edited").length,de=[...ce.values()].filter(r=>r==="rejected").length,le=F.nodes.filter(r=>!ce.has(r.cid)).length,me=F.supersessions.filter(r=>r.kind==="node"&&r.new!==r.old).length;u("commit",{trusted:ue,derived:le,archived:de},b.session_id),e.out(`committed: ${ue} trusted, ${le} derived (queued), ${de} archived`+(me>0?`, ${me} superseded`:"")),f.assumedDefaults&&e.out(`assumed: ${f.assumedDefaults} default(s) auto-taken (flagged)`),e.emit?.({type:"commit",source_id:t.source_id,proposal_id:M,trusted:ue,derived:le,archived:de,superseded:me,assumed:f.assumedDefaults??0,evidence_matched:Math.max(0,S.use_cases.length-F.nodes.length),minted:F.nodes.map(r=>{let o=F.names?.find(y=>y.cid===r.cid)?.slug;return{cid:r.cid,...o?{logical_id:o}:{}}})}),n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),e.out(`session ${s.resume} complete`),e.emit?.({type:"session_complete",sid:s.resume,source_id:t.source_id}),n=null)}}finally{n?.handle.release()}if(P){let t=e.chat?.state.ledger.filter(A=>A.kind==="answer"&&A.receipt.form==="assumed").length??0,a=xe+t,x=e.chat?.state.credits?.total;e.chat?.ledger?.({kind:"summary",lines:[`saved ${se} use-case${se===1?"":"s"} across ${v.length} source${v.length===1?"":"s"}`,...a>0?[`${a} assumed default(s)`]:[],...x!==void 0?[`credits used: ${x.toFixed(1)}`]:[],`trace: ${ge(l)}`]})}return s.plan||Ge(e.contextDir),0}export{ot as a,Ye as b,it as c,Ve as d,Ft as e};
@@ -1,3 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as k,c as I}from"./chunk-KHDUQ33H.js";import{a as E}from"./chunk-D5T4ARTB.js";import{a as h,c as w}from"./chunk-GIRXJOJI.js";import{g as S}from"./chunk-B2PZAB7J.js";import{a as x,d as y,f as b}from"./chunk-IACKIGPX.js";import{existsSync as B,mkdirSync as C,readFileSync as $,writeFileSync as F}from"fs";import{basename as P,extname as N,join as U}from"path";var A=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function v(e){return typeof e=="string"&&e!=="."&&e!==".."&&A.test(e)}function f(e){if(!v(e))throw new Error(`unsafe logical_id: ${JSON.stringify(e)} \u2014 must match ${String(A)} (no path separators)`)}import{extname as M}from"path";var L=[{kind:"text",media_type:"text/plain",extensions:[".txt"],cite:"verbatim",maxBytes:2e6},{kind:"markdown",media_type:"text/markdown",extensions:[".md",".markdown"],cite:"verbatim",maxBytes:2e6},{kind:"image",media_type:"image/png",extensions:[".png"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/jpeg",extensions:[".jpg",".jpeg"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/webp",extensions:[".webp"],cite:"anchor-only",maxBytes:5e6}];function O(e){let t=M(e).toLowerCase(),n=L.find(r=>r.extensions.includes(t));return n?{ok:!0,media:n}:{ok:!1,code:"UNSUPPORTED_MEDIA",allowlist:L.flatMap(r=>r.extensions)}}function j(e){let n=P(e,N(e)).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^[^a-z0-9]+/,"");return f(n),n}function z(e){let t=U(e,"meta.json");B(t)||(C(e,{recursive:!0}),F(t,JSON.stringify({schema:x,canonicalizer:"v1"},null,2)+`
3
- `))}async function ee(e){let{contextDir:t,filePath:n,asId:r,confirmSameSource:_}=e;z(t);let d=$(n),i=O(n);if(!i.ok)throw new Error(`UNSUPPORTED_MEDIA: ${N(n)} \u2014 supported: ${i.allowlist.join(" ")}`);if(d.byteLength>i.media.maxBytes)throw new Error(`FILE_TOO_LARGE: ${d.byteLength} bytes > ${i.media.maxBytes} cap for ${i.media.media_type}`);let s=k(d),o;r!==void 0?(f(r),o=r):o=j(n);let c=E(t),a=c.heads.get(o),D=a!=null?c.getNode(a)?.content:void 0;if(a!=null&&D?.blob===s)return{status:"unchanged",source_id:o,cid:a,blob:s};if(a==null){for(let[g,p]of c.heads.entries())if(!(g===o||p==null)&&c.getNode(p)?.content.blob===s){if(_&&await _(g))return{status:"unchanged",source_id:g,cid:p,blob:s};break}}I(t,d);let m=w(o,s),l=b("source",m);if(l.length>0)throw new Error(`source node fails ${l[0].code}: ${l[0].detail}`);let u=h("source",m);return S(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:u,label:y.SOURCE,content:m}],edges:[],review:[],supersessions:[],media:{[o]:{format:i.media.kind,media_type:i.media.media_type,anchors_supported:i.media.cite==="verbatim"?["L-L"]:[]}},source_head_moves:{[o]:u}}),{status:a!=null?"versioned":"created",source_id:o,cid:u,blob:s}}export{O as a,j as b,ee as c};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-Z56AWGVY.js";import"./chunk-427OQS2N.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";export{a as topologyDescriptor};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as i,b as l,d as a}from"./chunk-AD46OCZ4.js";import{a as d}from"./chunk-I2S6KNZW.js";import{d as m}from"./chunk-JFAFKHDX.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import{a as s}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";async function f(r,c=process.cwd()){let e=l(c,r);if(!e)return 2;try{r.out("distilling style notes from run signals\u2026");let t=s(e),{watermark:u}=m(e),n=d({contextDir:e,graph:t,watermark:u,by:{kind:"human",id:"owner"}});return n.errors?(i(r,`distill failed: ${n.errors.map(o=>`${o.code}: ${o.detail}`).join("; ")}`),1):(r.out(n.minted>0?`distilled: ${n.minted} new style note(s)`:"nothing new \u2014 style notes already reflect the signal ledger"),0)}catch(t){return i(r,`distill failed: ${t instanceof Error?t.message:String(t)}`),1}}async function w(){return f(a())}export{w as distillCommand,f as runDistillCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d,e}from"./chunk-6RQAUK5F.js";import"./chunk-NNZV5RCE.js";import"./chunk-AD46OCZ4.js";import"./chunk-JFAFKHDX.js";import"./chunk-QPZRHAYK.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";export{e as evolveCommand,b as evolveOneUc,d as liveRunDesignForUc,a as resolveParentUc,c as runEvolveCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-22A2ECA2.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";export{a as explain};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as a,c as b}from"./chunk-YANCBRER.js";import"./chunk-KHDUQ33H.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";export{b as ingestFile,a as slugFromFilename};
@@ -1,3 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as l}from"./chunk-YANCBRER.js";import{c as f}from"./chunk-ZKYYZ5NO.js";import{a as d}from"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import{a as u}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";async function g(i,a,t,o=process.cwd()){let s=d(o);for(let n of i){let e;try{e=await l({contextDir:s,filePath:n,asId:a.as,confirmSameSource:t.isTTY?r=>t.confirm(`identical bytes already ingested as ${r} \u2014 treat as the same source?`):void 0})}catch(r){return t.out(`error: ${n}: ${r instanceof Error?r.message:String(r)}`),1}if(t.out(`${e.status} ${e.source_id} source ${e.cid} blob ${e.blob}`),!t.isTTY&&e.status==="created"){let r=u(s);for(let[c,m]of r.heads.entries())if(!(c===e.source_id||m==null)&&r.getNode(m)?.content.blob===e.blob){t.out(`hint: identical bytes already ingested as ${c} \u2014 merged later via review`);break}}}return 0}async function $(i,a){let{createInterface:t}=await import("readline/promises");return g(i,a,{out:o=>process.stdout.write(o+`
3
- `),isTTY:f(),confirm:async o=>{let s=t({input:process.stdin,output:process.stdout});try{let n=await s.question(`${o} [Y/n] `);return!/^n(o)?$/i.test(n.trim())}finally{s.close()}}})}export{$ as ingestCommand,g as runIngestCommand};
@@ -1,7 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as y}from"./chunk-7LFCSSPX.js";import"./chunk-KHU7C6EE.js";import"./chunk-NNZV5RCE.js";import"./chunk-SGU72YLH.js";import"./chunk-I2S6KNZW.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-FTD3B7QA.js";import"./chunk-QPZRHAYK.js";import"./chunk-VJUIW2ES.js";import"./chunk-YKTYVJBN.js";import"./chunk-Z56AWGVY.js";import"./chunk-427OQS2N.js";import{c as k}from"./chunk-ZKYYZ5NO.js";import"./chunk-RGEAEAZB.js";import{a as v}from"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";async function j(t){let[{render:u},o,{QuestionBatchPrompt:p}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),i=o.default??o;return new Promise(e=>{let m=u(i.createElement(p,{questions:t,onSubmit:a=>{m.unmount(),e(a)}}))})}async function q(t){let[{resolveAgentAuthEnv:u},{runAgent:o},{preflightTurn:p}]=await Promise.all([import("./spawner-XCOMTJJC.js"),import("./bridge-7UMWMIJJ.js"),import("./turn-preflight-JGYT7LXP.js")]),i=await u(),e=v(process.cwd()),{baseUrlAdvisory:m}=await import("./turn-preflight-JGYT7LXP.js"),a=m();a&&process.stderr.write(a+`
3
- `);let d=await p(i);if(!d.ok)return process.stderr.write((d.message??"error: turn-endpoint preflight failed")+`
4
- `),2;let T=async()=>d;if(t.plan)return y(t,{contextDir:e,agent:o,preflightTurn:T,ask:j,out:r=>process.stdout.write(r+`
5
- `),progress:r=>process.stderr.write(r+`
6
- `),isTTY:k(),auth:i});if(!t.resume){let[{openGraph:r},{designGate:s}]=await Promise.all([import("./readmodel-MPTENJ2R.js"),import("./gate-FACZRGOC.js")]),w=s(r(e),t.useCase,!!t.force);if(!w.ok)return process.stderr.write(`design: ${w.message}
7
- `),w.code}let[{render:C},b,{ScrollbackProvider:A},{ChatSurface:D},{ScrollbackTap:E},{makeChatController:R},{setInkExit:S},G]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-J777M5WC.js"),import("./ScrollbackTap-Q3IOKNMS.js"),import("./chat-controller-QXFAB2DK.js"),import("./exit-manager-VCSIUYBR.js"),Promise.all([import("./chat-committer-GHDZY5XF.js"),import("./descriptor-SL5A7RQE.js"),import("./explain-JIXUWEFJ.js"),import("./readmodel-MPTENJ2R.js")])]),[{commitChatTurn:I},{topologyDescriptor:O},{explain:Q},{openGraph:x}]=G,f=b.default??b,n=R({commitChatTurn:I,descriptor:O("design"),contextDir:e,refreshGraph:()=>x(e),graph:x(e),explain:Q,by:{kind:"human",id:"owner"}}),g={current:null},P=0,h=null,c=!1,Y=()=>{if(P+=1,P>=2){try{l.unmount()}catch{}process.exit(130)}n.requestPause(),h=setTimeout(()=>{c||(c=!0,(async()=>{n.ledger({kind:"interrupted",detail:"the agent did not confirm the pause within 5s"}),await g.current?.flush();try{l.unmount()}catch{}process.exit(130)})())},5e3)},l=C(f.createElement(A,null,f.createElement(E,{into:g}),f.createElement(D,{controller:n,verb:"design",onCtrlC:Y})),{exitOnCtrlC:!1});S(()=>l.unmount()),n.ledger({kind:"banner",text:`kane-cli design \xB7 ${t.useCase??t.resume??""}`});try{let r=y(t,{contextDir:e,agent:o,preflightTurn:T,ask:s=>n.ask(s),out:s=>n.note(s),progress:()=>{},isTTY:k(),auth:i,chat:n});return r.finally(()=>{c=!0}),await r}finally{c=!0,h&&clearTimeout(h),await g.current?.flush();try{l.unmount()}catch{}}}export{q as bindDesignInteractive};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-2TVRHXRK.js";import"./chunk-SL7AJ7JQ.js";import"./chunk-RFHMDQXZ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-TZZYRDCF.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-GIGD4M7V.js";import"./chunk-2YQ6TW77.js";import"./chunk-WAOCHXJ5.js";import"./chunk-OE7TVGNB.js";import"./chunk-FYOCF7DY.js";import"./chunk-RGEAEAZB.js";import"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import"./chunk-NFOBDHZK.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";export{c as UploadPipeline,b as packPresignEntry,a as readPackForUpload};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";export{a as openGraph,b as staleForEvolve};
@@ -1,8 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as re}from"./chunk-CE664P73.js";import{a as te,b as j,d as B}from"./chunk-6RQAUK5F.js";import"./chunk-NNZV5RCE.js";import{a as R,b as ee,d as ne}from"./chunk-AD46OCZ4.js";import{a as X,b as M}from"./chunk-YANCBRER.js";import{a as Z}from"./chunk-JFAFKHDX.js";import{a as Q}from"./chunk-QPZRHAYK.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import{d as z}from"./chunk-KHDUQ33H.js";import{a as E}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import{e as G}from"./chunk-B2PZAB7J.js";import{d as v,e as P,g as H}from"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";import{existsSync as Ae,lstatSync as Le,readdirSync as Te,statSync as Ie}from"fs";import{basename as J,join as Ne,relative as Fe,resolve as ye}from"path";var oe="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",Re="suite untouched; graph updated";function W(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function O(e,t){return e.nameOf.get(t)??t}function A(e){return String(e).slice(0,19)}function C(e,t,r){let n=e.edgesFrom(t).find(o=>o.type===r);return n?e.tipOf(n.dst):null}function se(e,t){let r=e.nodeLabel.get(t);if(r===v.USECASE)return t;if(r===v.SCENARIO)return C(e,t,P.BELONGS_TO);if(r===v.AC){let n=C(e,t,P.SCOPED_TO);return n?e.nodeLabel.get(n)===v.USECASE?n:C(e,n,P.BELONGS_TO):null}if(r===v.TEST){let n=C(e,t,P.AUTOMATES);return n?C(e,n,P.BELONGS_TO):null}return null}function ie(e,t){let r=[],n=new Map;for(let o of e.derivesInto(t))n.set(String(o.props.source_id),o);for(let[o,c]of n){let s=e.heads.get(o);if(s==null){r.push(`DERIVES pin ${o} @ ${A(c.props.source_cid)} \u2014 source retired`);continue}if(s!==c.props.source_cid){let d=e.convChains.get(o)?.chain;if(d&&d.includes(String(c.props.source_cid)))continue;r.push(`DERIVES pin ${o} @ ${A(c.props.source_cid)} \u2014 source head moved to ${A(s)}`)}}for(let o of e.edgesFrom(t))H(o.type)?.pin?.comparesTo==="dst_tip"&&e.superseded.has(o.dst)&&r.push(`${o.type} pin \u2192 ${O(e,o.dst)} \u2014 target superseded`);return r.join("; ")||"structural pin broken"}var ke=new Set([v.USECASE,v.SCENARIO,v.AC,v.TEST]);function F(e,t){return e.ref<t.ref?-1:e.ref>t.ref?1:0}function ae(e,t,r){let n=t.getNode(r)?.content.blob;if(typeof n!="string")return null;let o=z(e,n);return o===null?null:o.toString("utf8")}function Se(e,t,r,n,o){let c=r.props.quote;if(typeof c=="string"&&c.length>0)return n.includes(c);let s=String(r.props.source_cid);o.has(s)||o.set(s,ae(e,t,s));let d=o.get(s);if(d===null)return!1;let i=Q(d,String(r.props.anchor));return i===null?!1:i.split(`
3
- `).some(g=>g.trim().length>0&&n.includes(g.trim()))}function Ee(e,t,r){let n=e.getNode(t)?.content??{},o=e.getNode(r)?.content??{},s=[...new Set([...Object.keys(n),...Object.keys(o)])].sort().filter(d=>JSON.stringify(n[d])!==JSON.stringify(o[d]));return s.length>0?`updated: ${s.join(", ")}`:"updated"}function be(e,t,r,n,o,c){let s=[];for(let[p,u]of r.superseded)u===null||p===u||t.superseded.has(p)||r.nodeLabel.get(p)===v.USECASE&&s.push({kind:"MODIFIED",ref:O(r,p),old_cid:p,new_cid:u,summary:Ee(r,p,u)});let d=c.map(p=>({kind:"ADDED",ref:O(r,p),cid:p})),i=[],g=ae(e,r,o),f=new Map;for(let{cid:p}of r.byLabel(v.USECASE)){if(!W(r,p))continue;let u=r.derivesInto(p),m=u.filter(a=>String(a.props.source_id)===n);m.length===0||m.some(a=>a.props.source_cid===o)||g!==null&&m.some(a=>String(a.props.anchor)!=="img#whole"&&Se(e,r,a,g,f))||u.some(a=>{let l=String(a.props.source_id);if(l===n)return!1;let $=r.heads.get(l);return $!=null})||i.push({kind:"DROPPED",ref:O(r,p),cid:p,why:`evidence decayed: no quote from ${n} relocates into @${A(o)}, no other live source, no fresh evidence this run`})}let h=(p,u)=>p.ref<u.ref?-1:p.ref>u.ref?1:0;return[...s.sort(h),...d.sort(h),...i.sort(h)]}async function ce(e,t,r){let n=E(e),o=n.heads.get(t)??null,c=new Set(n.staleList().filter(a=>a.state==="stale").map(a=>a.cid)),s=await r.reingest(t);if(s.status==="unchanged")return{source_id:t,changed:!1,head:{status:s.status,before:o,after:s.cid},note:`nothing to reconcile \u2014 ${t} is unchanged`,skipped_arms:oe,changeset:[],rows:[]};let d=await r.reextract(t),i=E(e),g=d.minted.map(a=>{let l=O(i,a);return{kind:"ADD",ref:l,reason:`new use-case extracted from ${t}`,provenance:`extraction commit \u2014 DERIVES ${t} @ ${A(s.cid)}`,action:`kane-cli design tests --use-case ${l}`}}),f=i.staleList().filter(a=>a.state==="stale"&&!c.has(a.cid)&&W(i,a.cid)).map(a=>a.cid),h=f.map(a=>{let l=O(i,a),$=ke.has(i.nodeLabel.get(a)??"");return{kind:"ENHANCE",ref:l,reason:"stale (structural)",provenance:ie(i,a),action:$?`kane-cli maintain evolve ${l}`:`kane-cli design explain ${l}`}}),p=new Set;for(let a of[...d.minted,...d.matched])p.add(i.tipOf(a));for(let a of f){let l=se(i,i.tipOf(a));l&&i.nodeLabel.get(l)===v.USECASE&&p.add(i.tipOf(l))}let u=[];for(let a of await re(i,"design")){if(a.kind!=="no-verifies")continue;let l=i.resolve(a.ref);if(!l)continue;let $=se(i,l.tip);!$||!p.has(i.tipOf($))||u.push({kind:"ADD",ref:a.ref,reason:a.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${O(i,$)}`,action:a.ready_command})}let m=[];for(let{cid:a}of i.byLabel(v.USECASE))W(i,a)&&i.stale(a)==="orphaned"&&m.push({kind:"REMOVE",ref:O(i,a),reason:"orphaned \u2014 no live source evidences this use-case",provenance:ie(i,a),action:"plan-only \u2014 REMOVE is not executed in this release"});let w=new Set,b=[...g.sort(F),...u.sort(F),...h.sort(F),...m.sort(F)].filter(a=>{let l=`${a.kind}\0${a.ref}`;return w.has(l)?!1:(w.add(l),!0)});return{source_id:t,changed:!0,head:{status:s.status,before:o,after:s.cid},note:Re,skipped_arms:oe,changeset:be(e,n,i,t,s.cid,d.minted),rows:b}}function de(e,t){return async r=>{let{ingestFile:n}=await import("./ingest-4CGBXC2L.js"),o=await n({contextDir:e,filePath:t,asId:r});return{status:o.status,cid:o.cid}}}function le(e){return async t=>{let[{runExtract:r},{resolveAgentAuthEnv:n},{runAgent:o},{preflightTurn:c}]=await Promise.all([import("./run-UGAOGR3B.js"),import("./spawner-XCOMTJJC.js"),import("./bridge-7UMWMIJJ.js"),import("./turn-preflight-JGYT7LXP.js")]),s=await n(),d=new Set(E(e).byLabel(v.USECASE).map(m=>m.cid)),i=0,g=await r({mode:"override"},{contextDir:e,agent:o,preflightTurn:()=>c(s),ask:async()=>[],review:async m=>new Map(m.map(w=>[w.temp_ref,{resolution:w.matches_existing&&w.changed?"edited":"skipped"}])),confirmStale:async()=>!1,out:m=>process.stderr.write(m+`
4
- `),progress:m=>process.stderr.write(m+`
5
- `),emit:m=>{m.type==="commit"&&typeof m.assumed=="number"&&(i+=m.assumed)},isTTY:!1,auth:s});if(g!==0)throw new Error(`reconcile: re-extract of ${t} failed (exit ${g})`);let f=E(e),h=f.heads.get(t),p=[],u=[];if(typeof h=="string"){let m=new Set;for(let w of f.edgesFrom(h))w.type!==P.DERIVES||f.nodeLabel.get(w.dst)!==v.USECASE||m.has(w.dst)||(m.add(w.dst),(d.has(w.dst)?u:p).push(w.dst))}return{minted:p,matched:u,defaultsTaken:i}}}import{closeSync as Oe,existsSync as Pe,mkdirSync as pe,openSync as De,readFileSync as V,readdirSync as _e,renameSync as xe,rmSync as ue,writeFileSync as fe}from"fs";import{join as L}from"path";var D=class extends Error{constructor(r,n){super(`${r}: ${n}`);this.code=r}},K=e=>L(e,"reconcile","plans");function ge(e,t){let r=`${e}.tmp-${process.pid}`;fe(r,t,{mode:384}),xe(r,e)}function me(e,t){let r=K(e);pe(r,{recursive:!0});let n=L(r,`${t.created}-${t.source_id}.json`);return ge(n,JSON.stringify(t,null,2)+`
6
- `),n}function Y(e,t){let r=t;if(r===void 0){let s=K(e),d=[];try{d=_e(s).filter(i=>i.endsWith(".json")).sort()}catch{}if(d.length===0)return{error:`no stored plans under ${s} \u2014 run reconcile --plan first`};r=L(s,d[d.length-1])}if(!Pe(r))return{error:`no such plan file: ${r}`};let n;try{n=V(r,"utf8")}catch(s){return{error:`cannot read plan ${r}: ${s instanceof Error?s.message:String(s)}`}}let o;try{o=JSON.parse(n)}catch(s){return{error:`corrupted plan ${r}: ${s instanceof Error?s.message:String(s)}`}}let c=o?.version;return c!==1?{error:`unsupported plan version ${String(c)} in ${r} (expected 1)`}:Array.isArray(o.rows)?{plan:o,path:r}:{error:`not a reconcile plan \u2014 ${r} has no rows[] (hand-edited?)`}}function q(e,t,r){let n;try{n=JSON.parse(V(e,"utf8"))}catch(c){throw new D("PLAN_UNREADABLE",`${e}: ${c instanceof Error?c.message:String(c)}`)}let o=n.rows?.[t];if(!o)throw new D("ROW_MISSING",`${e} has no row ${t}`);if(o.applied)throw new D("ROW_ALREADY_APPLIED",`row ${t} of ${e} was already applied (${o.applied.outcome} at ${o.applied.at})`);o.applied={at:new Date().toISOString(),outcome:r},ge(e,JSON.stringify(n,null,2)+`
7
- `)}function he(e){let t=K(e);pe(t,{recursive:!0});let r=L(t,".walk-lock");for(let n=0;n<2;n++)try{let o=De(r,"wx");return fe(o,`${process.pid}
8
- `),Oe(o),()=>{try{ue(r)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let c=NaN;try{c=parseInt(V(r,"utf8").trim(),10)}catch{}if(Number.isFinite(c)&&Ce(c))throw new D("WALK_LOCKED",`another reconcile walk is running (pid ${c}) \u2014 remove ${r} if that process is gone`);try{ue(r)}catch{}}throw new D("WALK_LOCKED",`could not take the walk lock at ${L(t,".walk-lock")}`)}function Ce(e){try{return process.kill(e,0),!0}catch{return!1}}function Ue(e,t){let r=[],n=o=>{let c;try{c=Te(o).sort()}catch{return}for(let s of c){if(s.startsWith(".")||s==="node_modules")continue;let d=Ne(o,s),i;try{i=Le(d)}catch{continue}if(i.isDirectory()){n(d);continue}if(!(!i.isFile()||!X(d).ok))try{M(d)===t&&r.push(d)}catch{}}};return n(e),r}function Ge(e,t,r){let n=E(e);if(n.heads.has(r)){if(n.heads.get(r)==null)return{error:`source '${r}' is retired \u2014 pass the file path to --from to re-ingest it`};let c=Ue(t,r);if(c.length===1)return{sourceId:r,filePath:c[0]};if(c.length===0)return{error:`cannot find a file backing source '${r}' under ${t} \u2014 pass the file path to --from instead`};let s=c.map(d=>Fe(t,d)).join(", ");return{error:`source '${r}' is backed by ${c.length} candidate files (${s}) \u2014 pass the file path to --from instead`}}let o=ye(t,r);if(Ae(o)&&Ie(o).isFile())try{return{sourceId:M(o),filePath:o}}catch(c){return{error:c instanceof Error?c.message:String(c)}}return{error:`--from '${r}' is neither a known source-id nor a file path`}}function x(e){return e==null?"(none)":e.slice(0,19)}function Me(e,t,r){if(e.out(`reconcile ${t.source_id}: head ${t.head.status} \u2014 ${x(t.head.before)} \u2192 ${x(t.head.after)}`),e.out(`note: ${t.note}`),e.out(`skipped arms: ${t.skipped_arms}`),t.changed&&e.out(`extract ran in override mode; ${r?.defaultsTaken??0} default(s) auto-taken; matched-but-changed proposals auto-committed as edits`),t.changed){let n=t.changeset??[];e.out(`changeset: ${n.length} item(s)`);for(let o of n)o.kind==="MODIFIED"?e.out(` [MODIFIED] ${o.ref} \u2014 ${o.summary} (${x(o.old_cid)} \u2192 ${x(o.new_cid)})`):o.kind==="ADDED"?e.out(` [ADDED] ${o.ref}`):e.out(` [DROPPED] ${o.ref} \u2014 ${o.why}`)}e.out(`plan: ${t.rows.length} row(s)`);for(let n of t.rows)e.out(` [${n.kind}] ${n.ref} \u2014 ${n.reason}`),e.out(` provenance: ${n.provenance}`),e.out(` action: ${n.action}`)}async function we(e,t){let r=e.ask,n=t?"[r]etire / [s]kip / [d]efer":"[a]pprove / [e]dit / [s]kip / [d]efer";for(;;){let o=(await r(`${n}? `)).trim().toLowerCase();if(!t&&(o==="a"||o==="approve"))return{v:"approve"};if(o==="s"||o==="skip")return{v:"skip"};if(o==="d"||o==="defer")return{v:"defer"};if(t&&(o==="r"||o==="retire"))return{v:"retire"};if(!t&&(o==="e"||o==="edit")){let c=(await r("steering (one line): ")).trim();if(c.length>0)return{v:"edit",steering:c};e.out("empty steering \u2014 pick a verdict again");continue}e.out(`unrecognized '${o}' \u2014 ${n}`)}}async function T(e,t,r,n,o,c,s=[]){let d;try{d=he(e)}catch(i){return R(n,i instanceof Error?i.message:String(i)),1}try{return await je(e,t,r,n,o,c,s)}finally{d()}}var $e={kind:"human",id:process.env.USER??"operator"};function _(e,t,r,n){Z(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:t,verdict:r,polarity:"preference",by:$e,target:t,...n!==void 0?{reason:n}:{}})}async function je(e,t,r,n,o,c,s=[]){let d=0,i=0,g=0,f=0,h=0,p=0,u=0,m=!r;if(m&&!n.ask)return R(n,"the interactive walk needs a prompt channel \u2014 pass --yes or run in a TTY"),2;let w=new Set;for(let[a,l]of t.entries()){if(l.applied){n.out(`skipped ${l.ref} \u2014 already applied (${l.applied.outcome} at ${l.applied.at})`),i++;continue}let $=y=>{try{c?.(a,y)}catch(U){R(n,`could not record applied state for ${l.ref}: ${U instanceof Error?U.message:String(U)}`)}};if(l.kind==="REMOVE"){n.out(`REMOVE ${l.ref} \u2014 plan-only in this release (not executed)`),f++;continue}let I=E(e),N=te(I,l.ref);if(!N.ok){n.out(`skipped ${l.ref} \u2014 ${N.message}`),i++;continue}let k=N.target;if(w.has(k.ucTip)){n.out(`skipped ${l.ref} \u2014 use-case ${k.display} already handled in this walk`),i++;continue}let S={v:"approve"};if(m&&(n.out(`[${l.kind}] ${l.ref} \u2014 ${l.reason}`),n.out(` provenance: ${l.provenance}`),n.out(` action: ${l.action}`),S=await we(n,!1)),S.v==="skip"){n.out(`skipped ${l.ref}`),$("skipped"),_(e,l.ref,"gap-dismissed"),i++;continue}if(S.v==="defer"){n.out(`deferred ${l.ref} \u2014 the plan artifact keeps it`),g++;continue}if(S.v==="edit"){let y=await j(e,k,{yes:!0,because:S.steering},n,o,"batch");y.outcome==="evolved"?(w.add(k.ucTip),d++,$("approved"),_(e,l.ref,"gap-resolved-evolve",S.steering)):y.outcome==="paused"?(p++,u===0&&(u=y.code)):y.outcome==="failed"?(h++,u===0&&(u=y.code)):i++;continue}if(l.kind==="ADD"){let y=await o(k.seamRef,{yes:r});if(y===3){n.out(`design session for ${k.display} paused \u2014 resume with "kane-cli design tests --resume"; this row lands when that session completes`),p++,u===0&&(u=3);continue}if(y!==0){R(n,`design run for ${k.display} ended with exit code ${y}`),h++,u===0&&(u=y);continue}w.add(k.ucTip),d++,$("approved"),_(e,l.ref,"gap-resolved-create")}else{let y=await j(e,k,{yes:!0},n,o,"batch");y.outcome==="evolved"?(w.add(k.ucTip),d++,$("approved"),_(e,l.ref,"gap-resolved-evolve")):y.outcome==="paused"?(p++,u===0&&(u=y.code)):y.outcome==="failed"?(h++,u===0&&(u=y.code)):i++}}let b=0;for(let a of s){if(a.kind!=="DROPPED")continue;if(n.out(`[DROPPED] ${a.ref} \u2014 ${a.why}`),!m){n.out(" plan-only \u2014 retire is interactive-only (never under --yes)"),f++;continue}let l=E(e),$=l.resolve(a.ref);if($&&l.superseded.has(l.tipOf($.cid))){n.out(" already retired \u2014 nothing to do"),i++;continue}let I=await we(n,!0);if(I.v==="skip"){n.out(`skipped ${a.ref}`),_(e,a.ref,"gap-dismissed"),i++;continue}if(I.v==="defer"){n.out(`deferred ${a.ref} \u2014 the plan artifact keeps it`),g++;continue}if(!await n.confirm(`retire ${a.ref}? ${a.why} \u2014 tombstones the node (restore: kane-cli context revert)`)){n.out(`skipped ${a.ref}`),i++;continue}let{commitArchive:k}=await import("./archive-committer-3NI773TP.js"),S=k(e,E(e),{ref:a.ref,reason:`reconcile retire: ${a.why}`,by:$e});if(S.errors){R(n,`retire ${a.ref} failed: ${S.errors.map(y=>`${y.code}: ${y.detail}`).join("; ")}`),h++,u===0&&(u=1);continue}n.out(`retired ${a.ref} \u2014 tombstone committed (record ${S.record.seq})`),_(e,a.ref,"gap-resolved-archive",a.why),b++}return n.out(`reconcile walk: ${d} applied, ${i} skipped, ${g} deferred, ${f} plan-only`+(b>0?`, ${b} retired`:"")+(h>0?`, ${h} failed`:"")+(p>0?`, ${p} paused`:"")),u}async function ve(e,t,r,n,o){let c=o.seams??{reingest:de(e,r),reextract:le(e)},s=null,d={reingest:c.reingest,reextract:async g=>s=await c.reextract(g)},i;try{n.out(`reconciling ${t}: re-reading the source and comparing against the graph\u2026`),i=await(o.buildPlan??ce)(e,t,d)}catch(g){return R(n,`reconcile failed: ${g instanceof Error?g.message:String(g)}`),null}return Me(n,i,s),i}async function Be(e,t,r,n,o){let c=Y(e,t);if("error"in c)return R(n,c.error),2;let{plan:s,path:d}=c;if(t===void 0&&!r&&n.isTTY&&!await n.confirm(`apply plan ${J(d)} for ${s.source_id} (created ${s.created})?`))return n.out(`not applying ${J(d)}`),0;let i=o.runDesignForUc??B,g=G(e);if(g===s.head_pin)return n.out(`applying stored plan ${J(d)} for ${s.source_id} (${s.rows.length} row(s))`),T(e,s.rows,r,n,i,(h,p)=>q(d,h,p),s.changeset??[]);n.out(`graph moved since this plan (${x(s.head_pin)} \u2192 ${x(g)}) \u2014 recomputing`);let f=await ve(e,s.source_id,s.backing_path,n,o);return f?f.changed?T(e,f.rows,r,n,i,void 0,f.changeset):0:1}async function We(e,t,r={},n=process.cwd()){let o=e.apply!==void 0&&e.apply!==!1,c=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&o)return R(t,"pass --plan OR --apply, not both"),2;if(!e.from&&!o)return R(t,"reconcile needs --from <source-id|path>"),2;if(e.from&&c!==void 0)return R(t,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let s=ee(n,t);if(!s)return 2;let d=!!e.yes;if(o&&!d&&!t.isTTY)return R(t,"refusing to apply without --yes (no TTY to confirm)"),2;let i=!e.plan&&!o;if(i&&e.from&&!d&&!t.isTTY)return R(t,"refusing to walk without --yes (no TTY) \u2014 use --plan for a preview"),2;if(o&&!e.from)return Be(s,c===void 0?void 0:ye(n,c),d,t,r);let g=Ge(s,n,e.from);if("error"in g)return R(t,g.error),2;let f=await ve(s,g.sourceId,g.filePath,t,r);if(!f)return 1;let h=r.runDesignForUc??B;if(o)return f.changed?T(s,f.rows,d,t,h,void 0,f.changeset):0;if(!f.changed)return 0;let p=G(s),u=null;if(p!=null?u=me(s,{version:1,source_id:f.source_id,backing_path:g.filePath,head_pin:p,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:f.skipped_arms,note:f.note,changeset:f.changeset,rows:f.rows}):R(t,"no chain head after extract \u2014 plan not stored"),!i)return u&&t.out(`plan stored: ${u}`),0;if(u){t.out(`plan stored: ${u}`);let m=u;return T(s,Ve(s,m)??f.rows,d,t,h,(w,b)=>q(m,w,b),f.changeset)}return T(s,f.rows,d,t,h,void 0,f.changeset)}function Ve(e,t){let r=Y(e,t);return"error"in r?null:r.plan.rows}async function pn(e){return We(e,ne(),{})}export{pn as reconcileCommand,Ge as resolveFromArg,We as runReconcileCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b,b as c,c as d,d as e,e as f}from"./chunk-TY5LWU6I.js";import{f as a}from"./chunk-SGU72YLH.js";import"./chunk-I2S6KNZW.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-FTD3B7QA.js";import"./chunk-QPZRHAYK.js";import"./chunk-VJUIW2ES.js";import"./chunk-YKTYVJBN.js";import"./chunk-Z56AWGVY.js";import"./chunk-427OQS2N.js";import"./chunk-KHDUQ33H.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";export{e as dedupPreFlags,c as displaySourceName,a as resolveAnswers,f as runExtract,b as sessionSourceRef,d as sourceBanner};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as a,d}from"./chunk-AD46OCZ4.js";import{d as s}from"./chunk-JFAFKHDX.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import"./chunk-UR6MHSHU.js";var u=new Set(["preference","mistake","correction"]);async function c(r,e,m=process.cwd()){if(r.kind!==void 0&&!u.has(r.kind))return(e.err??e.out)(`error: unknown kind ${r.kind} \u2014 one of: preference | mistake | correction`),2;let i=a(m,e);if(!i)return 2;let{signals:o}=s(i),t=r.kind?o.filter(n=>n.polarity===r.kind):o;if(r.show!==void 0){let n=Number(r.show);return!Number.isInteger(n)||n<0||n>=t.length?((e.err??e.out)(`error: --show ${r.show} out of range (0..${t.length-1})`),2):(e.out(JSON.stringify(t[n],null,2)),0)}if(r.json)return e.out(JSON.stringify(t)),0;if(t.length===0)return e.out("(no signals)"),0;e.out("when \xB7 command \xB7 verdict \xB7 polarity \xB7 target");for(let n of t)e.out(`${n.ts} \xB7 ${n.command} \xB7 ${n.verdict} \xB7 ${n.polarity} \xB7 ${n.target??n.id}`);return 0}async function l(r){return c(r,d())}export{c as runSignalsCommand,l as signalsCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as a}from"./chunk-53VDR5DN.js";import"./chunk-3MSXQU2C.js";import"./chunk-SQFNMZJ2.js";import"./chunk-DEEBPSJN.js";import"./chunk-ARS72637.js";import"./chunk-BO3JA2GS.js";import"./chunk-GIGD4M7V.js";import"./chunk-F2K3XFFH.js";import"./chunk-C5POEXSX.js";import"./chunk-Y6LMHBLE.js";import"./chunk-2YQ6TW77.js";import"./chunk-EEO4XWY6.js";import"./chunk-LMJTY32X.js";import"./chunk-RKWJG3WW.js";import"./chunk-7YQW4TFI.js";import"./chunk-Y7KW5AEN.js";import"./chunk-7MV5UF6O.js";import"./chunk-UXJPCWGW.js";import"./chunk-FFL2TQEJ.js";import"./chunk-Q4HLQOJI.js";import"./chunk-XBE7PGVY.js";import"./chunk-PJDOXRLB.js";import"./chunk-F66SSA4C.js";import"./chunk-5Y2G4NC7.js";import"./chunk-ME5QSYWX.js";import"./chunk-NFGG5DA2.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-P46TIMGQ.js";import"./chunk-2TVRHXRK.js";import"./chunk-SL7AJ7JQ.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-B5LJCGAY.js";import"./chunk-RFHMDQXZ.js";import"./chunk-OE7TVGNB.js";import"./chunk-FYOCF7DY.js";import"./chunk-RGEAEAZB.js";import"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import"./chunk-NFOBDHZK.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-WFRL54GK.js";import"./chunk-VXGOWBET.js";import"./chunk-BGGNBWAJ.js";import"./chunk-YCCUBQY4.js";import"./chunk-YZKPZXHY.js";import"./chunk-M5JQXOCE.js";import"./chunk-CIW2KP4C.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import"./chunk-TZZYRDCF.js";import"./chunk-EWFFJBAM.js";import"./chunk-SHSV64GX.js";import{a as o}from"./chunk-DFS4RMVP.js";import"./chunk-BFFCGEUH.js";import"./chunk-AV5SUGRY.js";import"./chunk-E4OYR32M.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-P46TIMGQ.js";import"./chunk-SL7AJ7JQ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};