@testmuai/kane-cli 0.6.2 → 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.
- package/dist/ChatSurface-VXYU6KFW.js +8 -0
- package/dist/{ChromeProfilePicker-XXNZLSCC.js → ChromeProfilePicker-QWTM7DK6.js} +1 -1
- package/dist/{CliFeedbackPrompt-FJF5INQO.js → CliFeedbackPrompt-6NVWMONO.js} +1 -1
- package/dist/{CliUploadProgress-5E3CCYPZ.js → CliUploadProgress-2YRQLECI.js} +1 -1
- package/dist/{ConfigView-TGVOKOUZ.js → ConfigView-I4R5M7BO.js} +1 -1
- package/dist/EvidenceViewOffer-54GEARRX.js +2 -0
- package/dist/{FolderPicker-T4JB4NNW.js → FolderPicker-5VWBYTAK.js} +1 -1
- package/dist/{HelpView-PSHKI7DD.js → HelpView-OJZW4XWX.js} +1 -1
- package/dist/{InfoBox-PXWJ6BIX.js → InfoBox-TGELGCBR.js} +1 -1
- package/dist/{LinksBox-IUOYRXYO.js → LinksBox-B5EBRY26.js} +1 -1
- package/dist/{ProfilesView-UK5XX5WP.js → ProfilesView-3SJRIBHQ.js} +1 -1
- package/dist/{ProjectPicker-3FE7UFXL.js → ProjectPicker-72HKMBEY.js} +1 -1
- package/dist/{SaveSessionPrompt-P7NF5FDA.js → SaveSessionPrompt-CK5SGNRO.js} +1 -1
- package/dist/SingleShotApp-AJBIWW74.js +2 -0
- package/dist/{SummaryBox-WVR4U3NN.js → SummaryBox-ABB7ST26.js} +1 -1
- package/dist/TestMdRunView-5PMLLLFT.js +2 -0
- package/dist/{WhoamiView-QVXJAVTC.js → WhoamiView-OF354UGC.js} +1 -1
- package/dist/bind-BWILBZGR.js +6 -0
- package/dist/{bridge-I6N3YPXI.js → bridge-LNDJS3HH.js} +1 -1
- package/dist/{changelog-HPSX3L7T.js → changelog-BWCEZQ23.js} +1 -1
- package/dist/{chat-committer-GHDZY5XF.js → chat-committer-ADJJTDUT.js} +1 -1
- package/dist/chat-controller-VAC57IEV.js +3 -0
- package/dist/{chunk-M6DX4ENH.js → chunk-2K4XOHVK.js} +1 -1
- package/dist/{chunk-KHDUQ33H.js → chunk-2PQXEEVY.js} +1 -1
- package/dist/{chunk-NNZV5RCE.js → chunk-3C5GMAM4.js} +1 -1
- package/dist/{chunk-VL2UA23Z.js → chunk-3HEPW6SN.js} +1 -1
- package/dist/{chunk-BKGJGPDN.js → chunk-3WJJ43MT.js} +1 -1
- package/dist/{chunk-4G4HPMR2.js → chunk-4MUHS3UL.js} +1 -1
- package/dist/{chunk-DEYHK6ZC.js → chunk-5CTMOJG4.js} +1 -1
- package/dist/{chunk-6UNTIXFW.js → chunk-5KSB5MOF.js} +1 -1
- package/dist/chunk-5YPBPZUR.js +2 -0
- package/dist/chunk-64LC36AF.js +2 -0
- package/dist/{chunk-HR7AGYV2.js → chunk-64QURIT6.js} +1 -1
- package/dist/{chunk-6XKJH5ZE.js → chunk-652FEDL4.js} +2 -2
- package/dist/{chunk-Z56AWGVY.js → chunk-6AYUSR7X.js} +1 -1
- package/dist/{chunk-VJUIW2ES.js → chunk-6GTOYTCQ.js} +1 -1
- package/dist/chunk-6LRKYF67.js +14 -0
- package/dist/{chunk-AE6SS34N.js → chunk-74RUSHIB.js} +1 -1
- package/dist/chunk-ACEODVSC.js +14 -0
- package/dist/{chunk-44QUA6GV.js → chunk-ADOXYGZE.js} +1 -1
- package/dist/chunk-ANIVHX3P.js +5 -0
- package/dist/{chunk-K2MKBBI4.js → chunk-AXABTFCD.js} +1 -1
- package/dist/{chunk-5ON7QQZO.js → chunk-BNN6ZDJW.js} +10 -10
- package/dist/{chunk-L4AUCQVO.js → chunk-BOO7YXAV.js} +1 -1
- package/dist/{chunk-OZODSY6H.js → chunk-BYUARJE7.js} +1 -1
- package/dist/{chunk-FYOCF7DY.js → chunk-CJJXT5DO.js} +1 -1
- package/dist/{chunk-S6GRW5ZA.js → chunk-CLTANA4L.js} +2 -2
- package/dist/{chunk-NEZ4G7XR.js → chunk-CT2I5KUM.js} +1 -1
- package/dist/{chunk-ZGH7T32S.js → chunk-CY5NDMO7.js} +1 -1
- package/dist/{chunk-YIOWO6WS.js → chunk-DNOBOZPO.js} +1 -1
- package/dist/chunk-DXK55KGR.js +9 -0
- package/dist/{chunk-IDDVO4UV.js → chunk-E3BO7OVR.js} +1 -1
- package/dist/chunk-EHN5HTUD.js +147 -0
- package/dist/{chunk-RGEAEAZB.js → chunk-FJTWJ243.js} +1 -1
- package/dist/{chunk-FOZVXYVG.js → chunk-FV4LLU3T.js} +1 -1
- package/dist/{chunk-CE664P73.js → chunk-GBBVP2JW.js} +1 -1
- package/dist/{chunk-AD46OCZ4.js → chunk-GRB66C5S.js} +1 -1
- package/dist/{chunk-22A2ECA2.js → chunk-GYW7LVVL.js} +1 -1
- package/dist/{chunk-QIE62H3J.js → chunk-HJGUEZLW.js} +1 -1
- package/dist/{chunk-XN7PPLFS.js → chunk-HNE4TDOZ.js} +1 -1
- package/dist/{chunk-2U5DZUC7.js → chunk-I2JUBAPU.js} +1 -1
- package/dist/chunk-IJPFAWBH.js +5 -0
- package/dist/{chunk-TJRBV2V2.js → chunk-IOTJZTHX.js} +3 -3
- package/dist/{chunk-OZM4UU5F.js → chunk-IRRGSC7B.js} +1 -1
- package/dist/{chunk-Z4K4AYEI.js → chunk-IXVR66NS.js} +1 -1
- package/dist/chunk-K5JGCJ2K.js +6 -0
- package/dist/{chunk-D5T4ARTB.js → chunk-MCQXRJGH.js} +1 -1
- package/dist/{chunk-DCYTRYR2.js → chunk-MK2G7VIF.js} +1 -1
- package/dist/{chunk-35SRW4KA.js → chunk-MVF4KRHA.js} +1 -1
- package/dist/{chunk-KGFISJFM.js → chunk-O66EU5UV.js} +1 -1
- package/dist/{chunk-LV5VRSPI.js → chunk-OB6CKLEL.js} +1 -1
- package/dist/{chunk-HUD7SPUF.js → chunk-OLXOZJ7X.js} +1 -1
- package/dist/{chunk-U3JB76QP.js → chunk-PICCLJSO.js} +1 -1
- package/dist/{chunk-PJSCM6JX.js → chunk-POI6DCP6.js} +1 -1
- package/dist/{chunk-D5DEWIAU.js → chunk-PYB2EXRE.js} +2 -2
- package/dist/{chunk-YSK535OI.js → chunk-QNNBNIR7.js} +3 -3
- package/dist/{chunk-B2CIHKXG.js → chunk-QZI43UNV.js} +1 -1
- package/dist/chunk-RE3BZVGE.js +3 -0
- package/dist/{chunk-LMJTY32X.js → chunk-RHNKYNNZ.js} +1 -1
- package/dist/{chunk-ZKYYZ5NO.js → chunk-RN4OSVTG.js} +2 -2
- package/dist/chunk-SJ2KQKOV.js +3 -0
- package/dist/{chunk-FU3OQXFH.js → chunk-STH6I3UB.js} +1 -1
- package/dist/{chunk-N62EM6JX.js → chunk-UZSG54OY.js} +1 -1
- package/dist/{chunk-EK2B2LZK.js → chunk-W36P7S5W.js} +1 -1
- package/dist/{chunk-Q6TVDG3X.js → chunk-WE57PD6K.js} +1 -1
- package/dist/{chunk-52VLJKIN.js → chunk-WFEGGQJ4.js} +1 -1
- package/dist/chunk-WIA7TPK3.js +2 -0
- package/dist/{chunk-LZKUF23A.js → chunk-WT3SMSY5.js} +1 -1
- package/dist/{chunk-KRFGAVYU.js → chunk-XUJ5EPVW.js} +1 -1
- package/dist/{chunk-4PIMEZJW.js → chunk-YI4XULHR.js} +3 -3
- package/dist/{chunk-MHQ6A2QZ.js → chunk-YMSN25DX.js} +1 -1
- package/dist/{chunk-B2PZAB7J.js → chunk-ZG2V2ODK.js} +1 -1
- package/dist/{chunk-GN3SZXZ5.js → chunk-ZQP3MCZW.js} +1 -1
- package/dist/{chunk-GIRXJOJI.js → chunk-ZZLR3O5A.js} +1 -1
- package/dist/{config-KD62VH3R.js → config-OJF53CHL.js} +1 -1
- package/dist/{cover-cmd-Y5L4O4Q3.js → cover-cmd-K3LCXHAQ.js} +1 -1
- package/dist/{credentials-NQNJR4E4.js → credentials-NLJHSVBY.js} +1 -1
- package/dist/descriptor-EHK3DRCZ.js +2 -0
- package/dist/{evidence-FFOI2H3N.js → evidence-UPOFW3XC.js} +1 -1
- package/dist/evolve-cmd-MVALOB3G.js +2 -0
- package/dist/explain-VFIZTHFN.js +2 -0
- package/dist/{explain-cmd-RIDEMDMY.js → explain-cmd-KV5YUXKB.js} +1 -1
- package/dist/{explain-cmd-55WRDIMW.js → explain-cmd-U367SD4N.js} +1 -1
- package/dist/{extract-bind-6UMILP4U.js → extract-bind-SSTKQGTV.js} +2 -2
- package/dist/{extract-cmd-MZR7PHGA.js → extract-cmd-GO4UV7ER.js} +2 -2
- package/dist/{gaps-cmd-P2DRK6FW.js → gaps-cmd-DTVDIOED.js} +1 -1
- package/dist/{gate-FACZRGOC.js → gate-B6C6KLFA.js} +1 -1
- package/dist/{generate-headless-XOBQS6RU.js → generate-headless-2HYMSVN5.js} +2 -2
- package/dist/{headless-io-GXHKDPHB.js → headless-io-PWW6YKH2.js} +1 -1
- package/dist/index.js +43 -43
- package/dist/ingest-C5ANIN7S.js +2 -0
- package/dist/ingest-cmd-LLC5CDQ5.js +3 -0
- package/dist/interactive-bind-Q5TQFQ6N.js +7 -0
- package/dist/{lifecycle-cmd-55NZL3UO.js → lifecycle-cmd-BXE5IMFN.js} +1 -1
- package/dist/{list-cmd-JB2ABACD.js → list-cmd-KBWPYJMV.js} +1 -1
- package/dist/{list-commands-PDTISP6T.js → list-commands-6WDXAECV.js} +1 -1
- package/dist/{logical-ids-ATVR6PF2.js → logical-ids-3Y6RX5C2.js} +1 -1
- package/dist/login-flow-XQMJFC4H.js +2 -0
- package/dist/{maintenance-cmd-E3HEEVQW.js → maintenance-cmd-VS3APIUN.js} +1 -1
- package/dist/{persist-recorded-session-5UNUINWF.js → persist-recorded-session-KHIMN4A3.js} +1 -1
- package/dist/pipeline-2HRAWT5U.js +2 -0
- package/dist/readmodel-XOGOELUP.js +2 -0
- package/dist/reconcile-cmd-DH4VV6PG.js +2 -0
- package/dist/{recording-banner-IWY3GS6N.js → recording-banner-SADVYNEP.js} +1 -1
- package/dist/{require-project-folder-PFIDA5ZH.js → require-project-folder-LP7V26IU.js} +1 -1
- package/dist/{revert-3TKLOYQA.js → revert-AQQ2VHRM.js} +1 -1
- package/dist/{review-cmd-RXPPC5GK.js → review-cmd-4WZUUOE4.js} +1 -1
- package/dist/run-RT2VMPTQ.js +2 -0
- package/dist/run-XAZMT7WO.js +2 -0
- package/dist/{run-test-md-7GONSVAM.js → run-test-md-ATB2HZRG.js} +2 -2
- package/dist/{skill-installer-YZP5DWWZ.js → skill-installer-DE2LSSKU.js} +1 -1
- package/dist/{spawner-YDYCSTZD.js → spawner-GOTVIFR5.js} +1 -1
- package/dist/tcg-generate-7PUXJ5R4.js +2 -0
- package/dist/{testmd-actions-7RNW76DN.js → testmd-actions-RYQHBX4K.js} +1 -1
- package/dist/token-refresh-F5KRV7ER.js +2 -0
- package/dist/{validate-basic-IQY5CRLP.js → validate-basic-6BQ2L7TT.js} +1 -1
- package/dist/{version-check-U5UBPVX4.js → version-check-YW3FUWDH.js} +1 -1
- package/dist/{view-cmd-QE2FS3GB.js → view-cmd-FRMQF76B.js} +1 -1
- package/dist/walk-session-O4TMVORI.js +2 -0
- package/package.json +7 -7
- package/dist/ChatSurface-HGP5EHZM.js +0 -9
- package/dist/EvidenceViewOffer-7O3RNBEE.js +0 -2
- package/dist/SingleShotApp-UIDA54GB.js +0 -2
- package/dist/TestMdRunView-OH4Y6YD6.js +0 -2
- package/dist/archive-committer-3NI773TP.js +0 -2
- package/dist/bind-SRZYTS4Q.js +0 -6
- package/dist/chat-controller-VKGECDTU.js +0 -3
- package/dist/chunk-DM2GL24Z.js +0 -3
- package/dist/chunk-FTD3B7QA.js +0 -2
- package/dist/chunk-GIGD4M7V.js +0 -5
- package/dist/chunk-HW7Z5S2M.js +0 -14
- package/dist/chunk-I2S6KNZW.js +0 -2
- package/dist/chunk-IACKIGPX.js +0 -2
- package/dist/chunk-NFOBDHZK.js +0 -147
- package/dist/chunk-WM5QHLAP.js +0 -9
- package/dist/chunk-X4QL2DAD.js +0 -5
- package/dist/chunk-YANCBRER.js +0 -3
- package/dist/descriptor-SL5A7RQE.js +0 -2
- package/dist/distill-cmd-EYCCCFL3.js +0 -2
- package/dist/evolve-cmd-PHQ6FHRI.js +0 -2
- package/dist/explain-JIXUWEFJ.js +0 -2
- package/dist/ingest-4CGBXC2L.js +0 -2
- package/dist/ingest-cmd-X7BWGIN7.js +0 -3
- package/dist/interactive-bind-5FWW3S53.js +0 -7
- package/dist/login-flow-IXPJHTL2.js +0 -2
- package/dist/pipeline-F4WTOZ3Y.js +0 -2
- package/dist/readmodel-MPTENJ2R.js +0 -2
- package/dist/reconcile-cmd-MNMWAZF3.js +0 -8
- package/dist/run-V2WMNHFK.js +0 -2
- package/dist/signals-cmd-LXHZQLXZ.js +0 -2
- package/dist/tcg-generate-ZRKSX2KC.js +0 -2
- package/dist/token-refresh-DH2L2IPP.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{b as a,c as b,d as c}from"./chunk-SJ2KQKOV.js";import"./chunk-2PQXEEVY.js";import"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{c as ingestFile,a as slugFromFilename,b as versionBaseOf};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{b as g,c as b,d as p}from"./chunk-SJ2KQKOV.js";import{c as l}from"./chunk-RN4OSVTG.js";import{a as f}from"./chunk-BC7UVJJB.js";import"./chunk-2PQXEEVY.js";import{a as d}from"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{existsSync as $}from"fs";async function h(o,u,e,i=process.cwd()){let n=f(i);if(u.as!==void 0&&o.length>1)return(e.err??e.out)(`error: --as names ONE source identity \u2014 pass a single file (got ${o.length})`),2;for(let a of o){let m=u.as;if(e.isTTY&&m===void 0&&$(n)){let t=g(a),s=b(t);if(s){let c=d(n);c.heads.get(s)!=null&&c.heads.get(t)==null&&await e.confirm(`${t} looks like a new version of existing source '${s}' \u2014 ingest as '${s}' (moves its head)?`)&&(m=s)}}let r;try{r=await p({contextDir:n,filePath:a,asId:m,confirmSameSource:e.isTTY?t=>e.confirm(`identical bytes already ingested as ${t} \u2014 treat as the same source?`):void 0})}catch(t){return e.out(`error: ${a}: ${t instanceof Error?t.message:String(t)}`),1}if(e.out(`${r.status} ${r.source_id} source ${r.cid} blob ${r.blob}`),!e.isTTY&&r.status==="created"){let t=d(n);for(let[s,c]of t.heads.entries())if(!(s===r.source_id||c==null)&&t.getNode(c)?.content.blob===r.blob){e.out(`hint: identical bytes already ingested as ${s} \u2014 merged later via review`);break}}}return 0}async function Y(o,u){let{createInterface:e}=await import("readline/promises");return h(o,u,{out:i=>process.stdout.write(i+`
|
|
3
|
+
`),isTTY:l(),confirm:async i=>{let n=e({input:process.stdin,output:process.stdout});try{let a=await n.question(`${i} [Y/n] `);return!/^n(o)?$/i.test(a.trim())}finally{n.close()}}})}export{Y as ingestCommand,h as runIngestCommand};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as y}from"./chunk-BNN6ZDJW.js";import"./chunk-KHU7C6EE.js";import"./chunk-3C5GMAM4.js";import"./chunk-DXK55KGR.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-WIA7TPK3.js";import"./chunk-QPZRHAYK.js";import"./chunk-6GTOYTCQ.js";import"./chunk-YKTYVJBN.js";import"./chunk-6AYUSR7X.js";import"./chunk-427OQS2N.js";import{c as k}from"./chunk-RN4OSVTG.js";import"./chunk-FJTWJ243.js";import{a as v}from"./chunk-BC7UVJJB.js";import"./chunk-2PQXEEVY.js";import"./chunk-L5LI2JF4.js";import"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-HJGUEZLW.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-GOTVIFR5.js"),import("./bridge-LNDJS3HH.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-XOGOELUP.js"),import("./gate-B6C6KLFA.js")]),w=s(r(e),t.useCase,!!t.force);if(!w.ok)return process.stderr.write(`design: ${w.message}
|
|
7
|
+
`),w.code}let[{render:C},b,{ScrollbackProvider:A},{ChatSurface:D},{ScrollbackTap:E},{makeChatController:R},{setInkExit:S},G]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-VXYU6KFW.js"),import("./ScrollbackTap-Q3IOKNMS.js"),import("./chat-controller-VAC57IEV.js"),import("./exit-manager-VCSIUYBR.js"),Promise.all([import("./chat-committer-ADJJTDUT.js"),import("./descriptor-EHK3DRCZ.js"),import("./explain-VFIZTHFN.js"),import("./readmodel-XOGOELUP.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 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as b,b as a,c as f,d as m}from"./chunk-
|
|
2
|
+
import{a as b,b as a,c as f,d as m}from"./chunk-GRB66C5S.js";import{h as p,i as y}from"./chunk-WIA7TPK3.js";import"./chunk-QPZRHAYK.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as c}from"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var g={kind:"human",id:process.env.USER??"operator"},$=/^(UNKNOWN_|BAD_|INVALID_|MALFORMED_|NOT_|SLUG_TAKEN|ALREADY_|SUPERSEDED_)/;function h(e){return e.every(r=>$.test(r.code))?2:1}function l(e,r){for(let n of r)b(e,`${n.code}: ${n.detail}`);return h(r)}async function w(e,r,n,t=process.cwd()){let s=a(t,n);if(!s||!await f(n,`retire source ${e} (head \u2192 null + tombstone record)`,r.yes))return 2;let i=c(s),o=y({contextDir:s,graph:i,sourceId:e,reason:r.reason,by:g});return o.errors?l(n,o.errors):(n.out(`retired ${e} (record ${o.record.seq}) \u2014 its use-cases stay until no live source evidences them`),0)}async function x(e,r,n,t=process.cwd()){let s=a(t,n);if(!s)return 2;let i=c(s),o=p({contextDir:s,graph:i,assignments:[{ref:e,slug:r}],by:g});return o.errors?l(n,o.errors):(n.out(`named ${o.record.names[0].cid} as "${r}" (record ${o.record.seq})`),0)}async function O(e,r,n,t=process.cwd()){let s=a(t,n);if(!s)return 2;let i=Number(e);if(!await f(n,`revert record ${i} via a compensation record`,r.yes))return 2;let o=c(s),{commitRevert:v}=await import("./revert-AQQ2VHRM.js"),d=v({contextDir:s,graph:o,seq:i,reason:r.reason,by:g});for(let C of d.warnings)n.out(`note: ${C}`);if(d.errors)return l(n,d.errors);let u=d.record;return n.out(`reverted record ${i} via compensation record ${u.seq}: ${u.supersessions.length} supersession(s), ${u.review.length} trust restoration(s), ${Object.keys(u.source_head_moves).length} head move(s) \u2014 history unchanged, effects inverted`),0}async function A(e,r){return w(e,r,m())}async function P(e,r){return x(e,r,m())}async function I(e={},r=process.cwd()){return D(e,m(),r)}async function D(e,r,n=process.cwd()){let t=a(n,r);if(!t||!await f(r,"assign logical ids to every live unnamed node (one commit record)",e.yes))return 2;let{backfillLogicalIds:s}=await import("./logical-ids-3Y6RX5C2.js"),i=c(t),o=s(t,i);return o.errors?l(r,o.errors):(r.out(o.assigned===0?"backfill: every live node already has a logical id":`backfill: assigned ${o.assigned} logical id(s) (record ${o.record.seq})`),0)}async function R(e,r){return O(e,r,m())}export{I as nameBackfillCommand,P as nameCommand,A as retireCommand,R as revertCommand,D as runNameBackfillCommand,x as runNameCommand,w as runRetireCommand,O as runRevertCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as m}from"./chunk-
|
|
2
|
+
import{b as m}from"./chunk-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as g}from"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import{d as o}from"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var p=[o.SOURCE,o.USECASE,o.SCENARIO,o.AC,o.TEST,o.GAP];function h(n,e){if(n===o.SOURCE)return String(e.source_id??"");let i=e.question?.header,l=e.title??e.text??i??e.kind??"";return String(l)}function E(n,e){if(n.length<=e)return n;let i=n.slice(0,e-1),l=i.lastIndexOf(" ");return`${(l>e*.6?i.slice(0,l):i).trimEnd()}\u2026`}var b=58;async function O(n,e,i=process.cwd()){let l=m(i,e);if(!l)return 2;let a=g(l),s=[...a.nodeLabel.entries()].filter(([t])=>n.all||!a.superseded.has(t)).map(([t,r])=>{let u=a.getNode(t)?.content??{},f=a.trust.get(t)??(r===o.SOURCE?"-":"derived");return{id:r===o.SOURCE?String(u.source_id??""):a.nameOf.get(t)??t.slice(0,19),cid:t,label:r,title:h(r,u),trust:f,fresh:f==="archived"?"-":a.stale(t)}});if(n.type&&(s=s.filter(t=>t.label===n.type)),n.inferred&&(s=s.filter(t=>t.trust==="derived")),n.stale&&(s=s.filter(t=>t.fresh!=="fresh")),!n.all){let t=new Map;for(let r of s)t.set(`${r.label}:${r.id}`,r);s=[...t.values()]}let d=t=>{let r=p.indexOf(t);return r===-1?p.length:r};if(s.sort((t,r)=>d(t.label)-d(r.label)||t.title.localeCompare(r.title)),n.json){for(let t of s)e.out(JSON.stringify(t));return 0}if(s.length===0)return e.out("(no matching nodes)"),0;e.out("trust \xB7 fresh \xB7 title \xB7 id");let c=null;for(let t of s){if(t.label!==c){c=t.label;let u=s.filter(f=>f.label===t.label).length;e.out(""),e.out(`\u2500\u2500 ${t.label} \xB7 ${u} \u2500\u2500`)}let r=E(t.title||"(untitled)",b);e.out(` ${t.trust.padEnd(8)} ${t.fresh.padEnd(6)} ${r.padEnd(b)} ${t.id}`)}return 0}async function R(n){return O(n,{out:e=>process.stdout.write(e+`
|
|
3
3
|
`),confirm:async()=>!1,isTTY:!!process.stdout.isTTY})}export{E as capWord,R as listCommand,O as runListCommand,h as titleOf};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c,d,e,f,g,h,i}from"./chunk-
|
|
2
|
+
import{a,b,c,d,e,f,g,h,i}from"./chunk-652FEDL4.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-M5JQXOCE.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DNOBOZPO.js";import"./chunk-BOO7YXAV.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";export{d as emitNdjson,b as filterByName,g as formatAuthResolutionError,c as paginate,a as parsePagination,i as registerListCommands,e as renderTable,f as resolveTmsBasicAuth,h as validateCreateName};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as d,b as f,h as m}from"./chunk-
|
|
2
|
+
import{a as d,b as f,h as m}from"./chunk-WIA7TPK3.js";import"./chunk-QPZRHAYK.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var y=Object.keys(d).filter(n=>n!=="source");function b(n,t,u={kind:"system",id:"logical-id-backfill"}){let l=new Set(t.names.keys()),r=[];for(let c of y)for(let{cid:s,content:e}of t.byLabel(c)){if(t.superseded.has(s)||t.nameOf.has(s))continue;let a=typeof e.title=="string"&&e.title||typeof e.intent=="string"&&e.intent||typeof e.statement=="string"&&e.statement||typeof e.text=="string"&&e.text||"",i=a?f(c,a,g=>l.has(g)):null;i&&(l.add(i),r.push({ref:s,slug:i}))}if(r.length===0)return{record:null,errors:null,assigned:0};let o=m({contextDir:n,graph:t,assignments:r,by:u});return o.errors?{record:null,errors:o.errors,assigned:0}:{record:o.record,errors:null,assigned:r.length}}export{b as backfillLogicalIds};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a}from"./chunk-5CTMOJG4.js";import"./chunk-4MUHS3UL.js";import"./chunk-RFHMDQXZ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DNOBOZPO.js";import"./chunk-BOO7YXAV.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as i,c,d as s}from"./chunk-
|
|
2
|
+
import{b as i,c,d as s}from"./chunk-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import{a as t}from"./chunk-BC7UVJJB.js";import{c as m,d as u}from"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";async function d(e,r=process.cwd()){if(!i(r,e))return 2;let o=u(t(r));if(o.ok)return e.out(`ok: ${o.records} record(s) verified, derived projection in parity`),0;for(let n of o.issues)e.out(`issue: ${n}`);return 1}async function f(e,r,o=process.cwd()){if(!i(o,r)||!await c(r,"wipe .context/derived and rebuild it from the verified commit chain",e.yes))return 2;let n=m(t(o));return r.out(`rebuilt: ${n.applied.seq} record(s) replayed, ${Object.keys(n.nodeLabel).length} node(s) projected`),0}async function l(){return d(s())}async function y(e={}){return f(e,s())}export{l as fsckCommand,y as rebuildCommand,d as runFsckCommand,f as runRebuildCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{g as h}from"./chunk-
|
|
2
|
+
import{g as h}from"./chunk-RHNKYNNZ.js";import{a as m,b as I,k as S,s as _}from"./chunk-RKWJG3WW.js";import{a as f}from"./chunk-W36P7S5W.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";async function v(e,s={}){e.flushRecorder();let o=e.recorder?.lastWrittenPath??null;if(!o)return e.log("info","PERSIST_SKIPPED","No recorded path \u2014 recorder.flush no-op",{reason:e.sessionName?"recorder_flush_failed":"no_session_name",session_name:e.sessionName}),null;let p;try{p=_(o)}catch(t){throw e.log("error","PERSIST_RESOLVE_FAILED","resolveTestMd threw",{error:t.message,recorded_path:o}),t}let i=e.getRunsAsStepRecords(),u=e.getFlows(),a=[],c=0;for(let t=0;t<i.length;t++){let r=i[t],l=u.slice(c,c+r.totalRunDirs);c+=r.totalRunDirs;let g=l.find(n=>n.status==="failed"||n.status==="error"),T=g?"failed":l.length===0?"skipped":"passed";a.push({rootStepIndex:t+1,status:T,duration_s:l.reduce((n,E)=>n+(E.duration??0),0),reason:g?.reason})}let P=a.some(t=>t.status==="failed")?"failed":"passed",D=new f().load().code_export?.language==="javascript"?"javascript":"python",d=I(o);e.log("info","PERSIST_START","Building staging dir",{recorded_path:o,output_dir:d,session_dir:e.sessionDir,step_count:i.length,flow_count:u.length});try{await h({resolvedTest:p,sessionDir:e.sessionDir,stepRunRecords:i,outcomes:a,overallStatus:P,startedISO:e.startedAt,durationS:a.reduce((t,r)=>t+(r.duration_s??0),0),sessionId:e.sessionId,commitId:e.sessionId,tmsIds:{testId:e.testId??void 0,testcaseId:s.testcaseId,projectId:s.projectId,folderId:s.folderId,orgId:s.orgId??e.orgId??void 0,sessionName:e.sessionName??m(o)},codeExportDir:s.codeExportDir,codeExportLanguage:D,packTestDir:s.packTestDir}),e.log("info","PERSIST_STAGING_OK","Staging dir built",{output_dir:d}),S(d),e.log("info","PERSIST_OK","Persist complete",{output_dir:d})}catch(t){let r=t;e.log("error","PERSIST_FAILED","staging build / atomic replace failed",{error:r.message,stack:r.stack,output_dir:d}),process.stderr.write(`[persist] staging build / atomic replace failed: ${r.message}
|
|
3
3
|
`)}return{recordedTestPath:o,outputDir:d}}export{v as persistRecordedSession};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a,b,c}from"./chunk-IJPFAWBH.js";import"./chunk-2YQ6TW77.js";import"./chunk-WAOCHXJ5.js";import"./chunk-QNNBNIR7.js";import"./chunk-CJJXT5DO.js";import"./chunk-FJTWJ243.js";import"./chunk-BC7UVJJB.js";import"./chunk-2PQXEEVY.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DNOBOZPO.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";export{c as UploadPipeline,b as packPresignEntry,a as readPackForUpload};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a,b}from"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{a as openGraph,b as staleForEvolve};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as G,b as Z,c as J,d as Q}from"./chunk-6LRKYF67.js";import"./chunk-GBBVP2JW.js";import{a as N,c as q,d as ue,f as z}from"./chunk-ANIVHX3P.js";import"./chunk-3C5GMAM4.js";import{a as P,b as le,d as de}from"./chunk-GRB66C5S.js";import{a as se,b as oe}from"./chunk-SJ2KQKOV.js";import{a as B,b as T,c as L,d as V,e as ce,g as I,h as K}from"./chunk-K5JGCJ2K.js";import{a as ae}from"./chunk-JFAFKHDX.js";import"./chunk-WIA7TPK3.js";import"./chunk-QPZRHAYK.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import"./chunk-2PQXEEVY.js";import{a as x}from"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import{e as F}from"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{existsSync as ve,statSync as we}from"fs";import{basename as j,resolve as pe}from"path";var ge=new Set(["interactive","agent","ci","override"]);function ke(e,t){if(e.mode!==void 0&&!ge.has(e.mode))return{error:`--mode must be interactive | agent | ci | override, got '${e.mode}'`};let r=e.mode,n="reconcile without a TTY needs an explicit mode \u2014 pass --mode agent|ci|override, or --plan for a preview";return r==="interactive"&&!t?{error:n}:r||(t?"interactive":e.plan?"override":{error:n})}function ye(e,t,r,n){let i=pe(t,r);if(!ve(i)||!we(i).isFile())return{error:`--from '${r}' is not a file \u2014 pass the changed source document`};let p=se(i);if(!p.ok)return{error:`--from '${r}' is not an ingestable document \u2014 allowed: ${p.allowlist.join(", ")}`};let f=x(e);if(!f.heads.has(n))return{error:`unknown source '${n}' \u2014 see \`kane-cli context list --type source\``};if(f.heads.get(n)==null)return{error:`source '${n}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let d=null;try{d=oe(i)}catch{}return d!==null&&d!==n&&f.heads.get(d)!=null?{error:`'${j(i)}' already backs live source '${d}' \u2014 did you mean --source-id ${d}? To truly move these bytes under '${n}', retire '${d}' first`}:{sourceId:n,filePath:i}}function O(e){return e==null?"(none)":e.slice(0,19)}function M(e,t,r){if(e.out(`reconcile ${t.source_id}: head ${t.head.status} \u2014 ${O(t.head.before)} \u2192 ${O(t.head.after)}`),e.out(`note: ${t.note}`),e.out(`skipped arms: ${t.skipped_arms}`),t.changed&&e.out(t.held?`extract ran in override mode; ${r?.defaultsTaken??0} default(s) auto-taken; matched-but-changed and new proposals HELD for your verdict (staged \u2014 nothing committed)`:`extract ran in override mode; ${r?.defaultsTaken??0} default(s) auto-taken; matched-but-changed proposals auto-committed as edits`),t.changed){let n=t.changeset??[];e.out(`changeset: ${n.length} item(s)`);for(let i of n)if(i.kind==="MODIFY")e.out(` [MODIFY] ${i.ref} \u2014 ${i.summary} (${O(i.old_cid)} \u2192 ${i.new_cid===null?"(staged)":O(i.new_cid)})`);else if(i.kind==="ADD")e.out(` [ADD] ${i.ref}`);else{e.out(` [ARCHIVE] ${i.ref} \u2014 ${i.why}`);let p=X(i.impact,"retiring drops");p&&e.out(` ${p}`)}}e.out(`plan: ${t.rows.length} row(s)`);for(let n of t.rows){e.out(` [${n.kind}] ${n.ref} \u2014 ${n.reason}`);let i=X(n.impact,"approving marks");i&&e.out(` ${i}`),e.out(` provenance: ${n.provenance}`),e.out(` action: ${n.action}`)}}function X(e,t){if(!e||e.stale_refs.length===0)return null;let r=e.direct_refs??[];return`impact: ${t} ${e.stale_refs.length} item(s) stale`+(r.length>0?` \u2014 ${r.length} directly touched: ${r.join(", ")}`:"")}function E(e){return e==="interactive"?"override":e}async function A(e,t,r,n,i,p,f=[],d="override",y,w,s,u,h){let l;try{l=K(e)}catch($){return P(n,$ instanceof Error?$.message:String($)),1}try{if(!r){let{runWalkSession:$}=await import("./walk-session-O4TMVORI.js");return await $({dir:e,rows:t,archive:f,held:y??null,childMode:d,runDesign:u??null,mark:p,markA:s,...w?{archiveState:w}:{},signals:k=>C(e,k.ref,k.verdict,k.reason),...h?{script:h}:{}})}return await $e(e,t,r,n,i,p,f,d,y,w)}finally{l()}}var H=e=>`${e} high-risk item(s) need a human \u2014 ci mode won't guess. Walk interactively or use --mode agent.`;function W(e,t,r){let n=t.rows;e({type:"reconcile_plan",source_id:t.source_id,plan_path:r,rows:n.map(i=>({kind:i.kind,ref:i.ref,why:i.reason})),archive:t.changeset.filter(i=>i.kind==="ARCHIVE").map(i=>({ref:i.ref,why:i.why}))})}function ne(e={}){return{type:"reconcile_summary",applied:0,skipped:0,deferred:0,plan_only:0,failed:0,paused:0,stale_created:0,...e}}var ee=ne();async function U(e,t,r,n,i,p,f,d,y){W(i,t,r);let w=t.changeset.filter(h=>h.kind==="ARCHIVE"&&y?.[h.ref]===void 0),s=t.rows,u;try{u=K(e)}catch(h){return i({type:"error",message:h instanceof Error?h.message:String(h)}),i(ne()),2}try{return await Re(e,t,r,n,i,p,f,s,w,d)}finally{u()}}async function Re(e,t,r,n,i,p,f,d,y,w){let s=0,u=0,h=0,l=0,$=0,k=0,a=0,R=new Set,v=(c,o)=>{try{w?.(c,o)}catch{}};for(let[c,o]of d.entries()){i({type:"reconcile_row_start",kind:o.kind,ref:o.ref,...o.impact?{stale:o.impact.stale_refs.length,direct:o.impact.direct_refs?.length??0}:{}});let g=(m,D,S)=>i({type:"reconcile_row_end",kind:o.kind,ref:o.ref,outcome:m,...D!==void 0?{exit_code:D}:{},...S?{detail:S}:{}});if(o.applied){u++,g("skipped");continue}if(o.kind==="REMOVE"){$++,g("plan-only");continue}if(o.held_ref&&t.held){let m=new Set;if(o.kind==="MODIFY"&&o.impact){let S=x(e);for(let re of o.impact.stale_refs){let ie=S.resolve(re);ie&&S.stale(ie.tip)==="fresh"&&m.add(re)}}let D=G(e,t.held,o.held_ref,te);if(!D.ok){h++,a===0&&(a=1),g("failed",1,D.message);continue}if(D.kind==="ADD"){let S=await n(D.ref,{yes:!0,mode:f});if(S!==0){S===3?(l++,a===0&&(a=3),g("paused",3)):(h++,a===0&&(a=1),g("failed",S));continue}}s++,D.kind!=="ADD"&&o.impact&&(k+=m.size),v(c,"approved"),C(e,o.ref,D.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve"),g("applied");continue}let _=N(x(e),o.ref);if(!_.ok){u++,g("skipped");continue}let b=_.target;if(R.has(b.ucTip)){u++,g("skipped");continue}if(o.kind==="ADD"){let m=await n(b.seamRef,{yes:!0,mode:f});if(m===3){l++,a===0&&(a=3),g("paused",3);continue}if(m!==0){h++,a===0&&(a=1),g("failed",m);continue}R.add(b.ucTip),s++,v(c,"approved"),C(e,o.ref,"gap-resolved-create"),g("applied")}else{let m=await q(e,b,{yes:!0,mode:f},p,n,"batch");m.outcome==="evolved"?(R.add(b.ucTip),s++,v(c,"approved"),C(e,o.ref,"gap-resolved-evolve"),g("applied")):m.outcome==="paused"?(l++,a===0&&(a=m.code),g("paused",m.code)):m.outcome==="failed"?(h++,a===0&&(a=1),g("failed",m.code)):(u++,g("skipped"))}}return y.length>0&&(i({type:"reconcile_paused",plan_path:r,pending:y.map(c=>({ref:c.ref,why:c.why}))}),l+=y.length,a===0&&(a=3)),i(ne({applied:s,skipped:u,plan_only:$,failed:h,paused:l,stale_created:k})),a}var te={kind:"human",id:process.env.USER??"operator"};function C(e,t,r,n){ae(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:t,verdict:r,polarity:"preference",by:te,target:t,...n!==void 0?{reason:n}:{}})}async function $e(e,t,r,n,i,p,f=[],d="override",y,w){let s=0,u=0,h=0,l=0,$=0,k=0,a=0,R=new Set;for(let[v,c]of t.entries()){if(c.applied){n.out(`skipped ${c.ref} \u2014 already applied (${c.applied.outcome} at ${c.applied.at})`),u++;continue}let o=m=>{try{p?.(v,m)}catch(D){P(n,`could not record applied state for ${c.ref}: ${D instanceof Error?D.message:String(D)}`)}};if(c.kind==="REMOVE"){n.out(`REMOVE ${c.ref} \u2014 plan-only in this release (not executed)`),l++;continue}if(c.held_ref&&y){let m=G(e,y,c.held_ref,te);if(!m.ok){P(n,`held ${c.ref}: ${m.message}`),$++,a===0&&(a=1);continue}if(n.out(`committed ${m.ref} (${c.kind==="ADD"?"minted":"updated \u2014 old\u2192new redirect"})`),m.kind==="ADD"){let D=await i(m.ref,{yes:r,mode:d});if(D===3){n.out(`design session for ${m.ref} paused \u2014 resume with "kane-cli design tests --resume"`),k++,a===0&&(a=3),o("approved");continue}if(D!==0){P(n,`design run for ${m.ref} ended with exit code ${D}`),$++,a===0&&(a=1),o("approved");continue}}s++,o("approved"),C(e,c.ref,c.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve");continue}let g=x(e),_=N(g,c.ref);if(!_.ok){n.out(`skipped ${c.ref} \u2014 ${_.message}`),u++;continue}let b=_.target;if(R.has(b.ucTip)){n.out(`skipped ${c.ref} \u2014 use-case ${b.display} already handled in this walk`),u++;continue}if(c.kind==="ADD"){let m=await i(b.seamRef,{yes:r,mode:d});if(m===3){n.out(`design session for ${b.display} paused \u2014 resume with "kane-cli design tests --resume"; this row lands when that session completes`),k++,a===0&&(a=3);continue}if(m!==0){P(n,`design run for ${b.display} ended with exit code ${m}`),$++,a===0&&(a=1);continue}R.add(b.ucTip),s++,o("approved"),C(e,c.ref,"gap-resolved-create")}else{let m=await q(e,b,{yes:!0,mode:d},n,i,"batch");m.outcome==="evolved"?(R.add(b.ucTip),s++,o("approved"),C(e,c.ref,"gap-resolved-evolve")):m.outcome==="paused"?(k++,a===0&&(a=m.code)):m.outcome==="failed"?($++,a===0&&(a=m.code)):u++}}for(let v of f)if(v.kind==="ARCHIVE"&&w?.[v.ref]===void 0){n.out(`[ARCHIVE] ${v.ref} \u2014 ${v.why}`);{let c=X(v.impact,"retiring drops");c&&n.out(` ${c}`)}n.out(" plan-only \u2014 retire belongs to the interactive session (never headless)"),l++}return n.out(`reconcile walk: ${s} applied, ${u} skipped, ${h} deferred, ${l} plan-only`+($>0?`, ${$} failed`:"")+(k>0?`, ${k} paused`:"")),a}async function me(e,t,r,n,i,p=!1){let f=i.seams??{reingest:J(e,r),reextract:Q(e,{stage:p})},d=null,y={reingest:f.reingest,reextract:async s=>d=await f.reextract(s)},w;try{n.out(`reconciling ${t}: re-reading the source and comparing against the graph\u2026`),w=await(i.buildPlan??Z)(e,t,y)}catch(s){return P(n,`reconcile failed: ${s instanceof Error?s.message:String(s)}`),null}return w.changed&&M(n,w,d),w}async function _e(e,t,r,n,i){let p=T(e,t);if("error"in p)return P(n,p.error),2;let{plan:f,path:d}=p,y=r==="override"||r==="ci";if(t===void 0&&r==="interactive"&&n.isTTY&&!await n.confirm(`apply plan ${j(d)} for ${f.source_id} (created ${f.created})?`))return n.out(`not applying ${j(d)}`),0;let w=i.runDesignForUc??z,s=i.runDesignForUc??null,u=i.sessionScript,h=(R,v)=>I(d,R,v),l=(R,v)=>V(d,R,v),$=F(e);if($===f.head_pin){if(r==="agent"){let v=i.emitEvent??(()=>{});return U(e,Y(f),d,w,v,n,E(r),h,f.archive_state)}let R=L(f);return r==="ci"&&R.length>0?(P(n,H(R.length)),2):(n.out(`applying stored plan ${j(d)} for ${f.source_id} (${f.rows.length} row(s))`),A(e,f.rows,y,n,w,h,f.changeset??[],E(r),f.held,f.archive_state,l,s,u))}if(n.out(`graph moved since this plan (${O(f.head_pin)} \u2192 ${O($)}) \u2014 recomputing`),f.held)return he(e,f,n,i,r,w,!1);let k=await me(e,f.source_id,f.backing_path,n,i);if(!k)return 1;if(!k.changed)return M(n,k,null),0;if(r==="agent"){let R=i.emitEvent??(()=>{});return U(e,k,null,w,R,n,E(r))}let a=k.changeset.filter(R=>R.kind==="ARCHIVE");return r==="ci"&&a.length>0?(P(n,H(a.length)),2):A(e,k.rows,y,n,w,void 0,k.changeset,E(r),k.held,void 0,void 0,s,u)}function Y(e,t=!1){return{source_id:e.source_id,changed:!0,head:{status:"unchanged",before:e.head_pin,after:e.head_pin},note:e.note,skipped_arms:e.skipped_arms,changeset:e.changeset??[],rows:t?e.rows.filter(r=>r.applied===void 0):e.rows,...e.held?{held:e.held}:{}}}async function Pe(e,t,r,n,i,p,f){let d=n.runDesignForUc??null,y=n.sessionScript,w=ce(e,t);if(w===null)return null;if("error"in w)return P(r,w.error),2;let{plan:s,path:u}=w,h=s.rows.filter(a=>a.applied===void 0),l=L(s),$=n.emitEvent??(()=>{});if(h.length===0&&l.length===0){r.out(`already reconciled \u2014 plan ${s.created} applied ${s.rows.length} row(s)`);let a=ue(x(e)).staleCount;return a>0&&r.out(`${a} item(s) still stale \u2014 kane-cli maintain evolve --from-stale`),i==="agent"&&(W($,Y(s),u),$({...ee})),0}let k=F(e);return k!==s.head_pin?(r.out(`plan ${s.created} superseded \u2014 graph moved (${O(s.head_pin)} \u2192 ${O(k)}); recomputing`),he(e,s,r,n,i,p,f)):(r.out(`resuming plan ${s.created} \u2014 ${h.length} pending row(s)${l.length>0?`, ${l.length} undecided archive item(s)`:""}`),f?(M(r,Y(s),null),r.out(`plan stored: ${u}`),0):i==="agent"?U(e,Y(s),u,p,$,r,E(i),(a,R)=>I(u,a,R),s.archive_state):i==="ci"&&l.length>0?(P(r,H(l.length)),2):A(e,s.rows,i==="override"||i==="ci",r,p,(a,R)=>I(u,a,R),s.changeset??[],E(i),s.held,s.archive_state,(a,R)=>V(u,a,R),d,y))}async function he(e,t,r,n,i,p,f){let d=n.runDesignForUc??null,y=n.sessionScript,w;if(t.held){let c=x(e),o=new Set(t.rows.filter(_=>_.held_ref!==void 0&&_.applied!==void 0).map(_=>_.held_ref)),g=[];for(let _ of t.held.rows){if(o.has(_.temp_ref))continue;if(!_.matched_cid){g.push(_);continue}let b=c.tipOf(_.matched_cid);if(c.superseded.get(b)===null){r.out(`dropped held "${_.title}" \u2014 its use-case was retired meanwhile`);continue}g.push(b===_.matched_cid?_:{..._,matched_cid:b,uc:{..._.uc,matches_existing:{cid:b}}})}w={source_id:t.held.source_id,rows:g}}let s=n.seams??{reingest:J(e,t.backing_path),reextract:Q(e,{stage:w!==void 0})},u;try{u=await(n.buildPlan??Z)(e,t.source_id,s,{resumeHeld:w})}catch(c){return P(r,`reconcile failed: ${c instanceof Error?c.message:String(c)}`),1}M(r,u,null);let h=F(e),l=null;if(h!=null){let c={},o=new Set(u.changeset.filter(g=>g.kind==="ARCHIVE").map(g=>g.ref));for(let[g,_]of Object.entries(t.archive_state??{}))o.has(g)&&(c[g]=_);l=B(e,{version:2,source_id:u.source_id,backing_path:t.backing_path,head_pin:h,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:u.skipped_arms,note:u.note,changeset:u.changeset,rows:u.rows,...u.held?{held:u.held}:{},...Object.keys(c).length>0?{archive_state:c}:{}}),r.out(`plan stored: ${l}`)}if(f)return 0;let $=n.emitEvent??(()=>{}),k=l?T(e,l).plan.archive_state:void 0,a=l?(c,o)=>I(l,c,o):void 0,R=l?(c,o)=>V(l,c,o):void 0;if(i==="agent")return U(e,u,l,p,$,r,E(i),a,k);let v=u.changeset.filter(c=>c.kind==="ARCHIVE"&&k?.[c.ref]===void 0);return i==="ci"&&v.length>0?(P(r,H(v.length)),2):A(e,u.rows,i==="override"||i==="ci",r,p,a,u.changeset,E(i),u.held,k,R,d,y)}async function fe(e,t,r={},n=process.cwd()){let i=e.apply!==void 0&&e.apply!==!1,p=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&i)return P(t,"pass --plan OR --apply, not both"),2;if((e.from!==void 0||!i)&&(!e.from||!e.sourceId))return P(t,"reconcile needs --from <file> AND --source-id <id> \u2014 see `kane-cli context list --type source` for ids"),2;if(e.from&&p!==void 0)return P(t,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let d=le(n,t);if(!d)return 2;if(e.mode!==void 0&&!ge.has(e.mode))return P(t,`--mode must be interactive | agent | ci | override, got '${e.mode}'`),2;let y=e.mode==="agent"||e.mode==="ci"||e.mode==="override";if(i&&!y&&!t.isTTY)return P(t,"refusing to apply without a TTY to confirm \u2014 pass --mode override|ci"),2;let w=!e.plan,s="override";if(e.from){let o=ke(e,t.isTTY);if(typeof o=="object")return P(t,o.error),2;s=o}let u=s==="override"||s==="ci";if(i&&!e.from){let o=e.mode??"interactive";return _e(d,p===void 0?void 0:pe(n,p),o,t,r)}let h=ye(d,n,e.from,e.sourceId);if("error"in h)return P(t,h.error),2;let l=await me(d,h.sourceId,h.filePath,t,r,!!e.plan||s==="interactive");if(!l)return 1;let $=r.runDesignForUc??z,k=r.runDesignForUc??null,a=r.sessionScript;if(!l.changed){let o=await Pe(d,h.sourceId,t,r,s,$,!!e.plan);if(o!==null)return o;if(M(t,l,null),s==="agent"){let g=r.emitEvent??(()=>{});W(g,l,null),g({...ee})}return 0}let R=F(d),v=null;if(R!=null?v=B(d,{version:2,source_id:l.source_id,backing_path:h.filePath,head_pin:R,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:l.skipped_arms,note:l.note,changeset:l.changeset,rows:l.rows,...l.held?{held:l.held}:{}}):P(t,"no chain head after extract \u2014 plan not stored"),s==="agent"){let o=r.emitEvent??(()=>{});if(!w)return W(o,l,v),o({...ee}),0;let g=v?(_,b)=>I(v,_,b):void 0;return U(d,l,v,$,o,t,E(s),g)}if(!w)return v&&t.out(`plan stored: ${v}`),0;let c=l.changeset.filter(o=>o.kind==="ARCHIVE");if(s==="ci"&&c.length>0)return v&&t.out(`plan stored: ${v}`),P(t,H(c.length)),2;if(v){t.out(`plan stored: ${v}`);let o=v;return A(d,be(d,o)??l.rows,u,t,$,(g,_)=>I(o,g,_),l.changeset,E(s),l.held,void 0,void 0,k,a)}return A(d,l.rows,u,t,$,void 0,l.changeset,E(s),l.held,void 0,void 0,k,a)}function be(e,t){let r=T(e,t);return"error"in r?null:r.plan.rows}async function Te(e,t={},r,n=process.cwd()){if(e.mode==="agent"){let{makeHeadlessIO:i}=await import("./headless-io-PWW6YKH2.js"),p=r?i("ndjson","reconcile",r):i("ndjson","reconcile"),f={out:p.out,err:y=>p.event({type:"error",message:y}),isTTY:!1,confirm:async()=>!1,ask:async()=>""},d=2;try{d=await fe(e,f,{...t,emitEvent:y=>p.event(y)},n)}catch(y){p.event({type:"error",message:y instanceof Error?y.message:String(y)})}return p.done(d)}return fe(e,de(),t,n)}export{E as childModeFor,Te as reconcileCommand,ke as resolveReconcileMode,fe as runReconcileCommand,ye as validateReconcileInputs};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
2
|
import{a as n}from"./chunk-3MSXQU2C.js";import"./chunk-UR6MHSHU.js";function p(t){let s=t.sessionName!==null,e={type:"recording_state",enabled:!0,session_id:t.sessionId,persist:s};return t.sessionName&&(e.session_name=t.sessionName),t.testPath&&(e.test_path=t.testPath),t.outputPath&&(e.output_path=t.outputPath),e}async function g(t){if(t.isAgent){process.stdout.write(JSON.stringify(p(t))+`
|
|
3
|
-
`);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-
|
|
3
|
+
`);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-TGELGCBR.js"),u=t.sessionName?[{label:"session",value:t.sessionName},{label:"test",value:n(t.testPath??"")},{label:"output",value:n(t.outputPath??"")}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];function l(){let{exit:i}=a();return o(()=>{let c=setTimeout(()=>i(),50);return()=>clearTimeout(c)},[i]),s.createElement(r,{title:"Recording",titleColor:"#ff9500",rows:u})}await e(s.createElement(l),{stdout:process.stderr}).waitUntilExit()}export{p as buildRecordingStateEvent,g as printRecordingBanner};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g}from"./chunk-
|
|
2
|
+
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g}from"./chunk-64QURIT6.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DNOBOZPO.js";import"./chunk-VE3SUJMA.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";export{d as buildAutoDefaultAnnouncement,f as buildAutoDefaultedEvent,e as buildAutoDefaultedNdjson,c as buildRemediationMessage,b as decideGateAction,a as loadCachedIds,g as requireProjectFolder};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as _,g as k}from"./chunk-
|
|
2
|
+
import{d as _,g as k}from"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";function j(w){let{contextDir:v,graph:y,seq:r,by:d}=w,{records:l,hashes:$}=_(v);if(!Number.isInteger(r)||r<1||r>l.length)return{record:null,warnings:[],errors:[{code:"UNKNOWN_SEQ",detail:`no record ${r} (chain has ${l.length})`}]};let i=l[r-1],p=l.slice(0,r-1),c=w.reason??`revert of record ${r}`,t=[],u=[],f=[],g=[],m={},b=new Set(i.nodes.map(e=>e.cid));for(let e of i.nodes){if(y.superseded.has(e.cid)){t.push(`${e.cid} was already superseded after record ${r} \u2014 left as is`);continue}u.push({kind:"node",old:e.cid,new:null,reason:c,by:d})}for(let e of i.supersessions){if(e.kind==="edge"){t.push(`edge retraction ${e.ecid} cannot be auto-restored \u2014 re-extract to re-evidence`);continue}if(l.slice(r).some(n=>n.supersessions.some(s=>s.kind==="node"&&s.old===e.old))){t.push(`supersession of ${e.old.slice(0,19)} was changed again after record ${r} \u2014 later state kept`);continue}let o;for(let n of p)for(let s of n.supersessions)s.kind==="node"&&s.old===e.old&&(o=s.new===s.old?void 0:s.new);o===void 0?u.push({kind:"node",old:e.old,new:e.old,reason:c,by:d}):u.push({kind:"node",old:e.old,new:o,reason:c,by:d})}let h=l.slice(r);for(let e of Object.keys(i.source_head_moves)){if(h.some(n=>e in n.source_head_moves)){t.push(`head of ${e} was moved again after record ${r} \u2014 later state kept`);continue}let o=null;for(let n of p)e in n.source_head_moves&&(o=n.source_head_moves[e]);m[e]=o}let R=new Set;for(let e of i.review){if(R.has(e.id)||b.has(e.id))continue;if(R.add(e.id),h.some(s=>s.review.some(a=>a.id===e.id))){t.push(`trust of ${e.id.slice(0,19)} was reviewed again after record ${r} \u2014 later state kept`);continue}let o=null,n=null;for(let s of p)for(let a of s.review)a.id===e.id&&(o=a.resolution==="reset"?null:a.resolution,n=a.reason);o==="approved"||o==="edited"?f.push({id:e.id,kind:"review-item",resolution:"approved",edit:null,reason:c,by:d}):o==="rejected"?f.push({id:e.id,kind:"review-item",resolution:"rejected",edit:null,reason:n??c,by:d}):f.push({id:e.id,kind:"review-item",resolution:"reset",edit:null,reason:c,by:d})}for(let e of i.names??[]){if(h.some(n=>(n.names??[]).some(s=>s.slug===e.slug))){t.push(`slug "${e.slug}" was reassigned after record ${r} \u2014 later state kept`);continue}let o;for(let n of p)for(let s of n.names??[])s.slug===e.slug&&(o=s.cid);o!==void 0?g.push({cid:o,slug:e.slug,by:d}):t.push(`slug "${e.slug}" was first assigned by record ${r} \u2014 unassignment unsupported, reassign manually`)}return u.length===0&&f.length===0&&g.length===0&&Object.keys(m).length===0?{record:null,warnings:t,errors:[{code:"NOTHING_TO_REVERT",detail:`record ${r} left no compensable facts`}]}:(i.extraction_of&&t.push(`extraction cache for ${i.extraction_of.slice(0,19)} stays \u2014 re-extract with --force`),{record:k(v,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:f,supersessions:u,...g.length>0?{names:g}:{},source_head_moves:m},{expectPrev:$[$.length-1]??null}).record,warnings:t,errors:null})}export{j as commitRevert};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as j}from"./chunk-
|
|
2
|
+
import{b as j}from"./chunk-GRB66C5S.js";import{g as b}from"./chunk-WIA7TPK3.js";import"./chunk-QPZRHAYK.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as _}from"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import{d as V}from"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{readFileSync as E}from"fs";var O=new Set(["derived","skipped","archived","drift"]),q={kind:"human",id:process.env.USER??"operator"};function R(d,r){return d.nameOf.get(r)??r.slice(0,19)}function N(d,r){let n=d.getNode(r)?.content??{},a=d.derivesInto(r)[0]?.props.anchor;return{cid:r,uc:{temp_ref:r,title:String(n.title??n.text??""),summary:n.summary!==void 0?String(n.summary):void 0,risk:String(n.risk??"med"),cite:{anchor:typeof a=="string"?a:"\u2014",quote:""},depends_on_hint:[],matches_existing:null}}}function T(d,r){let n=new Set,{records:a}=V(d);for(let s of a){if(s.proposal_id==null)continue;let u=new Set(s.review.map(e=>e.id));for(let e of s.nodes)u.has(e.cid)||n.add(e.cid)}for(let s of[...n])(r.trust.get(s)!=="derived"||r.superseded.has(s))&&n.delete(s);return n}var x=new Set(["approved","edited","rejected","skipped","supersede"]);function C(d){let r;try{r=JSON.parse(d)}catch(s){return{errors:[`not valid JSON: ${s instanceof Error?s.message:String(s)}`]}}if(!Array.isArray(r))return{errors:['expected a top-level array of {"ref", "resolution", ...} entries']};let n=[],a=[];return r.forEach((s,u)=>{if(s==null||typeof s!="object"||Array.isArray(s)){n.push(`[${u}]: not an object`);return}let e=s;(typeof e.ref!="string"||!e.ref.trim())&&n.push(`[${u}]: "ref" (slug or cid) is required`),(typeof e.resolution!="string"||!x.has(e.resolution))&&n.push(`[${u}]: "resolution" must be one of approved | edited | rejected | skipped | supersede`),e.resolution==="supersede"&&(typeof e.supersede_target!="string"||!e.supersede_target.trim())&&n.push(`[${u}]: resolution "supersede" requires "supersede_target" (slug or cid)`),e.edit!==void 0&&(e.edit==null||typeof e.edit!="object"||Array.isArray(e.edit))&&n.push(`[${u}]: "edit" must be an object ({title?, summary?, risk?})`),n.length===0&&a.push(e)}),n.length>0?{errors:n}:{entries:a}}async function I(d,r,n,a=process.cwd()){let s=d.queue??"derived";if(!O.has(s))return r.out(`unknown queue ${s} \u2014 one of: derived | skipped | archived | drift`),2;let u=j(a,r);if(!u)return 2;let e=_(u);if(d.verdicts){let i=t=>(r.err??r.out)(t),o;try{o=E(d.verdicts,"utf8")}catch{return i(`error: cannot read verdicts file ${d.verdicts}`),2}let l=C(o);if("errors"in l){for(let t of l.errors)i(`error: --verdicts ${d.verdicts}: ${t}`);return 2}let c=new Set([...e.trust.entries()].filter(([t,p])=>(p==="derived"||p==="archived")&&!e.superseded.has(t)).map(([t])=>t)),f=new Map,y=[];for(let t of l.entries){let p=e.resolve(t.ref),m=p&&!e.superseded.has(p.tip)?p.tip:null;if(!m){y.push(`${t.ref}: names nothing in the graph`);continue}if(!c.has(m)){y.push(`${t.ref}: not in a review queue (trust: ${e.trust.get(m)??"?"})`);continue}if(f.has(m)){y.push(`${t.ref}: duplicate \u2014 an earlier entry already resolves to this node (${R(e,m)})`);continue}f.set(m,{resolution:t.resolution,...t.reason?{reason:t.reason}:{},...t.edit?{edit:t.edit}:{},...t.supersede_target?{supersedeTarget:t.supersede_target}:{}})}if(y.length>0){for(let t of y)i(`error: --verdicts: ${t}`);return i("error: nothing committed (the verdicts file is atomic \u2014 fix every offender and re-run)"),2}let k=b({contextDir:u,graph:e,verdicts:f,by:q});if(k.errors){if(k.errors[0]?.code==="NO_VERDICTS")return i("nothing changed \u2014 every item was skipped"),0;for(let t of k.errors)i(`${t.code}: ${t.detail}`);return 1}let S=new Map;for(let t of f.values())S.set(t.resolution,(S.get(t.resolution)??0)+1);if(d.json)for(let[t,p]of f.entries())r.out(JSON.stringify({ref:R(e,t),cid:t,resolution:p.resolution}));else{let t=[...S.entries()].map(([p,m])=>`${m} ${p}`).join(", ");r.out(`review: committed record ${k.record.seq} \u2014 ${t}`)}return 0}if(s==="drift"){let i=e.staleList().filter(({state:o})=>o!=="superseded").map(({cid:o,state:l})=>({ref:R(e,o),cid:o,state:l,title:String(e.getNode(o)?.content.title??e.getNode(o)?.content.source_id??""),pinned_sources:[...new Set(e.derivesInto(o).map(c=>String(c.props.source_id)))]}));if(d.json){for(let o of i)r.out(JSON.stringify(o));return 0}if(i.length===0)return r.out("drift queue is empty \u2014 every node's evidence matches the current source snapshots"),0;r.out(`${i.length} node(s) with drifting evidence (re-extract the source to re-bless):`);for(let o of i)r.out(` [${o.state}] ${o.ref} \xB7 ${o.title} \xB7 sources: ${o.pinned_sources.join(", ")||"\u2014"}`);return 0}if(!r.isTTY)return r.out("review: verdict queues need a TTY (drift listing works anywhere, or pass --verdicts <file.json>)"),2;let g,h;if(s==="archived")g=[...e.trust.entries()].filter(([i,o])=>o==="archived"&&!e.superseded.has(i)).map(([i])=>N(e,i)),h="skipped";else{let i=T(u,e),o=[...e.trust.entries()].filter(([c,f])=>f==="derived"&&!e.superseded.has(c)).map(([c])=>c),l=s==="skipped"?o.filter(c=>i.has(c)):o;l.sort((c,f)=>Number(i.has(f))-Number(i.has(c))),g=l.map(c=>N(e,c)),h="skipped"}if(g.length===0)return r.out(`${s} queue is empty`),0;r.out(`${g.length} node(s) in the ${s} queue \u2014 approve promotes, reject ${s==="archived"?"re-archives":"archives"}, edit mints a new version, skip leaves it for later`);let v=await n(g,e,h),w=b({contextDir:u,graph:e,verdicts:v,by:q});if(w.errors){if(w.errors[0]?.code==="NO_VERDICTS")return r.out("nothing changed \u2014 every item was skipped"),0;for(let i of w.errors)r.out(`${i.code}: ${i.detail}`);return 1}let $=w.record;return r.out(`committed record ${$.seq}: ${$.review.length} review fact(s), ${$.supersessions.length} supersession(s), ${$.nodes.length} new version(s)`),0}async function P(d,r,n){let[{render:a},s,{ReviewChecklist:u}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),e=s.default??s;return new Promise(g=>{let h=a(e.createElement(u,{items:d.map(v=>({uc:v.uc})),defaultResolution:n,onSubmit:v=>{h.unmount(),g(v)}}))})}async function D(d){let{bothTTY:r}=await import("./headless-io-PWW6YKH2.js");return I(d,{out:n=>process.stdout.write(n+`
|
|
3
3
|
`),err:n=>process.stderr.write(n+`
|
|
4
4
|
`),confirm:async()=>!1,isTTY:r()},P)}export{C as parseVerdictsFile,D as reviewCommand,I as runReviewCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
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-ACEODVSC.js";import"./chunk-K5JGCJ2K.js";import{f as a}from"./chunk-DXK55KGR.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-WIA7TPK3.js";import"./chunk-QPZRHAYK.js";import"./chunk-6GTOYTCQ.js";import"./chunk-YKTYVJBN.js";import"./chunk-6AYUSR7X.js";import"./chunk-427OQS2N.js";import"./chunk-2PQXEEVY.js";import"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";export{e as dedupPreFlags,c as displaySourceName,a as resolveAnswers,f as runExtract,b as sessionSourceRef,d as sourceBanner};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a}from"./chunk-BNN6ZDJW.js";import"./chunk-KHU7C6EE.js";import"./chunk-3C5GMAM4.js";import"./chunk-DXK55KGR.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-WIA7TPK3.js";import"./chunk-QPZRHAYK.js";import"./chunk-6GTOYTCQ.js";import"./chunk-YKTYVJBN.js";import"./chunk-6AYUSR7X.js";import"./chunk-427OQS2N.js";import"./chunk-FJTWJ243.js";import"./chunk-2PQXEEVY.js";import"./chunk-L5LI2JF4.js";import"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";export{a as runDesign};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as A}from"./chunk-
|
|
2
|
+
import{a as A}from"./chunk-5KSB5MOF.js";import{E as M,F as P,G as K,H,I as U}from"./chunk-YI4XULHR.js";import"./chunk-IJPFAWBH.js";import{a as _,b as E}from"./chunk-PYB2EXRE.js";import{a as h,b as k}from"./chunk-BYUARJE7.js";import"./chunk-2YQ6TW77.js";import"./chunk-RHNKYNNZ.js";import{s as L}from"./chunk-RKWJG3WW.js";import{c as R}from"./chunk-I2JUBAPU.js";import"./chunk-ADOXYGZE.js";import"./chunk-E3BO7OVR.js";import{a as x}from"./chunk-W36P7S5W.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-MVF4KRHA.js";import"./chunk-4MUHS3UL.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-QNNBNIR7.js";import"./chunk-CJJXT5DO.js";import"./chunk-FJTWJ243.js";import"./chunk-BC7UVJJB.js";import"./chunk-2PQXEEVY.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import{e as b,f as S,g as T}from"./chunk-M5JQXOCE.js";import"./chunk-64QURIT6.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import{a as C}from"./chunk-DNOBOZPO.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import{a as v}from"./chunk-BOO7YXAV.js";import"./chunk-HJGUEZLW.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";import{resolve as Y}from"path";import{existsSync as D}from"fs";function O(){return{register:(n,r)=>b(n,r),deregister:n=>S(n),cleanup:(n,r)=>T(n,r),remoteLogger:null}}async function le(n,r){let t=Y(n);if(!D(t))return process.stderr.write(`error: file not found: ${t}
|
|
3
3
|
`),2;if(r.finalValidation!==void 0&&r.finalValidation!=="on"&&r.finalValidation!=="off")return process.stderr.write(`error: --final-validation must be 'on' or 'off'
|
|
4
4
|
`),2;if(!t.endsWith("_test.md"))return process.stderr.write(`error: not a *_test.md file: ${t}
|
|
5
5
|
helpers are import-only \u2014 run a test that @imports it.
|
|
@@ -12,6 +12,6 @@ import{a as A}from"./chunk-6UNTIXFW.js";import{E as M,F as P,G as K,H,I as U}fro
|
|
|
12
12
|
\u2022 Run 'kane-cli login --username <user> --access-key <key>'
|
|
13
13
|
`):e instanceof h&&e.code==="refresh_failed"?process.stderr.write(`error: Token refresh failed. Run 'kane-cli login' to re-authenticate.
|
|
14
14
|
`):process.stderr.write(`error: auth resolution failed: ${e.message}
|
|
15
|
-
`),2}let y=String(p.resolvedCreds?.org_id??"");if(!y)return process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),2;{let{readMetaIfExists:e,assertOrgMatchOrExit:g}=await import("./testmd-actions-
|
|
15
|
+
`),2}let y=String(p.resolvedCreds?.org_id??"");if(!y)return process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),2;{let{readMetaIfExists:e,assertOrgMatchOrExit:g}=await import("./testmd-actions-RYQHBX4K.js"),d=g(e(t),y);if(d!==null)return d}let w=new R,j=A({isAgent:a,log:(e,g,d,V)=>w.log(e,g,d,V)}),F={path:t,cwd:process.cwd(),opts:r,isAgent:a,disableAskUser:!0,resolved:s,resolvedAuth:p,cliOverrides:i,environment:f,envConfig:N,profile:I,model:$,creds:o,configStore:l,session:w};try{return(await M(F,j,c)).exitCode}catch(e){return process.stderr.write(`error: ${e.message}
|
|
16
16
|
`),2}}var m=class extends Error{constructor(t,a){super(t);this.exitCode=a;this.name="CliArgError"}};function G(n){let r={mode:"mode",assertionMode:"assertion_mode",finalValidation:"final_validation",maxSteps:"max_steps",timeout:"timeout",globalContext:"global_context",localContext:"local_context",codeExport:"code_export",codeLanguage:"code_language",headless:"headless",cdpEndpoint:"cdp_endpoint",wsEndpoint:"ws_endpoint"},t=new Set(["max_steps","timeout"]),a={};for(let[c,s]of Object.entries(r)){let i=n[c];if(i===void 0||i==="")continue;let o=i;if(t.has(s)&&(o=Number(i),Number.isNaN(o))){let l="--"+c.replace(/[A-Z]/g,u=>"-"+u.toLowerCase());throw new m(`error: ${l} must be a number
|
|
17
17
|
`,2)}a[s]=o}return a}export{U as applyCliStepConfig,K as buildStepRunVariables,P as buildTestLevelVariables,G as optsToOverrides,H as replayVariablesForStep,le as runTestMdFile};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as p,b as g}from"./chunk-
|
|
2
|
+
import{a as p,b as g}from"./chunk-FV4LLU3T.js";import{b as m}from"./chunk-QZI43UNV.js";import{a as d}from"./chunk-RZ4F3BHX.js";import"./chunk-DNOBOZPO.js";import"./chunk-BOO7YXAV.js";import{a as f,g as a,h as u}from"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";import{mkdirSync as y,writeFileSync as w,readFileSync as S,rmSync as c,cpSync as v,createWriteStream as T,existsSync as b}from"fs";import{join as s}from"path";import{tmpdir as k}from"os";import{spawn as h}from"child_process";import{Readable as I}from"stream";import{pipeline as $}from"stream/promises";function E(t){try{return S(s(t,"VERSION"),"utf-8").trim()||null}catch{return null}}function L(t,r,l){return l?t!==r:t===null||m(t,r)>0}function C(t){let r=a.split("/").pop()??a;return`https://registry.npmjs.org/${a}/-/${r}-${t}.tgz`}var R=5e3,A=6e4;async function x(){let t=new AbortController,r=setTimeout(()=>t.abort(),R);try{let l=await d(p(),{headers:{Accept:"application/json"},signal:t.signal});if(!l.ok)throw new Error(`Controller returned ${l.status} fetching skill version map`);let i=await l.json(),n=g(i,f);if(!n)throw new Error("No compatible skill version found for this kane-cli build");return n}finally{clearTimeout(r)}}async function _(t){let r=C(t),l=new AbortController,i=setTimeout(()=>l.abort(),A);try{let n=await d(r,{headers:{Accept:"application/octet-stream"},signal:l.signal});if(!n.ok||!n.body)throw new Error(`Failed to download skill tarball (${n.status})`);let e=s(k(),`kane-cli-skill-${t}-${process.pid}.tgz`);return await $(I.fromWeb(n.body),T(e)),e}finally{clearTimeout(i)}}function M(t,r){return new Promise((l,i)=>{y(r,{recursive:!0});let n=h("tar",["-xzf",t,"-C",r,"--strip-components=2","package/skills"],{stdio:["ignore","ignore","pipe"]}),e="";n.stderr?.on("data",o=>{e+=o.toString()}),n.on("error",o=>i(o)),n.on("close",o=>{o===0?l():i(new Error(`tar exited ${o}${e?`: ${e.trim()}`:""}`))})})}async function W(t){let r;try{r=t??await x()}catch(e){return{status:"failed",version:t??"unknown",installedTargets:0,error:e instanceof Error?e.message:String(e)}}let l=u.filter(({dir:e})=>L(E(e),r,!!t));if(l.length===0)return{status:"already-installed",version:r,installedTargets:0};let i=null,n=null;try{if(n=await _(r),i=s(k(),`kane-cli-skill-${r}-stage-${process.pid}`),c(i,{recursive:!0,force:!0}),await M(n,i),!b(s(i,"SKILL.md")))throw new Error(`Unexpected skill tarball layout for v${r}: SKILL.md not at package/skills/ root`);let e=0;for(let{dir:o}of l)try{c(o,{recursive:!0,force:!0}),y(o,{recursive:!0}),v(i,o,{recursive:!0,force:!0}),w(s(o,"VERSION"),r+`
|
|
3
3
|
`),e++}catch{}return e===0?{status:"failed",version:r,installedTargets:0,error:"Could not write to any agent skill directory"}:{status:"installed",version:r,installedTargets:e}}catch(e){return{status:"failed",version:r,installedTargets:0,error:e instanceof Error?e.message:String(e)}}finally{if(n)try{c(n,{force:!0})}catch{}if(i)try{c(i,{recursive:!0,force:!0})}catch{}}}function D(t){switch(t.status){case"installed":return`Installed kane-cli skill v${t.version} (${t.installedTargets}/${u.length} agent dirs). Restart your AI agent (Claude Code / Codex CLI / Gemini CLI) to load it.`;case"already-installed":return`kane-cli skill v${t.version} already installed.`;case"failed":return`Failed to install kane-cli skill: ${t.error??"unknown error"}`}}export{D as formatInstallResult,W as installSkill,L as targetNeedsInstall};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c,d}from"./chunk-
|
|
2
|
+
import{a,b,c,d}from"./chunk-CT2I5KUM.js";import"./chunk-UR6MHSHU.js";export{c as buildAgentEnv,b as findAssuranceAgent,a as platformPackageName,d as resolveAgentAuthEnv};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{d as a}from"./chunk-IOTJZTHX.js";import"./chunk-WT3SMSY5.js";import"./chunk-HNE4TDOZ.js";import"./chunk-3MSXQU2C.js";import"./chunk-O66EU5UV.js";import"./chunk-YI4XULHR.js";import"./chunk-IJPFAWBH.js";import"./chunk-CLTANA4L.js";import"./chunk-PYB2EXRE.js";import"./chunk-BYUARJE7.js";import"./chunk-2YQ6TW77.js";import"./chunk-WE57PD6K.js";import"./chunk-RHNKYNNZ.js";import"./chunk-RKWJG3WW.js";import"./chunk-3HEPW6SN.js";import"./chunk-OB6CKLEL.js";import"./chunk-I2JUBAPU.js";import"./chunk-MK2G7VIF.js";import"./chunk-ADOXYGZE.js";import"./chunk-E3BO7OVR.js";import"./chunk-W36P7S5W.js";import"./chunk-UZSG54OY.js";import"./chunk-2K4XOHVK.js";import"./chunk-5Y2G4NC7.js";import"./chunk-ZQP3MCZW.js";import"./chunk-WFEGGQJ4.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-MVF4KRHA.js";import"./chunk-5CTMOJG4.js";import"./chunk-4MUHS3UL.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-AXABTFCD.js";import"./chunk-RFHMDQXZ.js";import"./chunk-QNNBNIR7.js";import"./chunk-CJJXT5DO.js";import"./chunk-FJTWJ243.js";import"./chunk-BC7UVJJB.js";import"./chunk-2PQXEEVY.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import"./chunk-3WJJ43MT.js";import"./chunk-YMSN25DX.js";import"./chunk-STH6I3UB.js";import"./chunk-YCCUBQY4.js";import"./chunk-PICCLJSO.js";import"./chunk-M5JQXOCE.js";import"./chunk-64QURIT6.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DNOBOZPO.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import"./chunk-BOO7YXAV.js";import"./chunk-POI6DCP6.js";import"./chunk-IRRGSC7B.js";import{a as o}from"./chunk-DFS4RMVP.js";import"./chunk-IXVR66NS.js";import"./chunk-XUJ5EPVW.js";import"./chunk-HJGUEZLW.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 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{e as a,f as b,g as c,h as d,i as e,j as f,k as g,l as h,m as i,n as j,o as k,p as l,q as m}from"./chunk-
|
|
2
|
+
import{e as a,f as b,g as c,h as d,i as e,j as f,k as g,l as h,m as i,n as j,o as k,p as l,q as m}from"./chunk-CLTANA4L.js";import"./chunk-PYB2EXRE.js";import"./chunk-BYUARJE7.js";import"./chunk-2YQ6TW77.js";import"./chunk-RKWJG3WW.js";import"./chunk-W36P7S5W.js";import"./chunk-MVF4KRHA.js";import"./chunk-4MUHS3UL.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-L5LI2JF4.js";import"./chunk-PICCLJSO.js";import"./chunk-M5JQXOCE.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DNOBOZPO.js";import"./chunk-BOO7YXAV.js";import"./chunk-XUJ5EPVW.js";import"./chunk-HJGUEZLW.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{i as ExportError,c as assertOrgMatchOrExit,j as exportTestmd,b as metaMatchesOrg,a as readMetaIfExists,d as resolveCurrentOrgId,l as resolveSyncAuth,h as runDeleteAction,k as runExportAction,e as runListAction,f as runListTui,g as runStatusAction,m as runSyncAction};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a}from"./chunk-MVF4KRHA.js";import"./chunk-4MUHS3UL.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DNOBOZPO.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as t}from"./chunk-
|
|
2
|
+
import{a as t}from"./chunk-DNOBOZPO.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";async function l(n,o,r){let{ControllerClient:e}=await import("./controller-client-RD2YEMAH.js");await new e(t(n).controllerBaseUrl,{username:o,accessKey:r}).getTmsCredentials()}export{l as validateBasicAuth};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c,d}from"./chunk-
|
|
2
|
+
import{a,b,c,d}from"./chunk-QZI43UNV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-HJGUEZLW.js";import"./chunk-UR6MHSHU.js";export{d as checkForUpdate,b as compareVersions,c as getSeverity,a as getUpdateCommand};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as T}from"./chunk-
|
|
2
|
+
import{b as T}from"./chunk-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as A}from"./chunk-MCQXRJGH.js";import"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import{d as V}from"./chunk-ZG2V2ODK.js";import{d as g,e as x}from"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{writeFileSync as le,mkdirSync as ce}from"fs";import{tmpdir as pe}from"os";import{dirname as ue,join as ge}from"path";var F={DERIVES:"derivation",automates:"linkage",exercises:"mesh",verifies:"mesh",depends_on:"crosslink",reuses:"crosslink",belongs_to:"containment",scoped_to:"containment",annotates:"annotation"},ne=(t,r)=>t===g.SOURCE?String(r.source_id??""):t===g.AC?String(r.text??""):t===g.STYLENOTE?String(r.statement??r.text??""):t===g.GAP?String(r.text??r.question??""):String(r.title??"");function H(t){let r=[];for(let[o,p]of t.nodeLabel){let f=t.getNode(o)?.content??{};r.push({cid:o,label:p,slug:p===g.SOURCE?String(f.source_id??""):t.nameOf.get(o)??o.slice(0,19),trust:t.trust.get(o)??"derived",fresh:t.stale(o),title:ne(p,f),content:f,superseded:t.superseded.has(o)})}let e=new Map;for(let[o]of t.nodeLabel)for(let p of t.edgesFrom(o)){let f=`${p.type}|${p.src}|${p.dst}`,v=typeof p.props?.anchor=="string"?p.props.anchor:void 0,w=e.get(f);w?(w.count++,v&&w.anchors.push(v)):e.set(f,{key:f,type:p.type,family:F[p.type]??"mesh",src:p.src,dst:p.dst,count:1,anchors:v?[v]:[],container:F[p.type]==="containment"})}let a=[...e.values()],s={},l={trusted:0,derived:0,archived:0},d={fresh:0,stale:0,orphaned:0,superseded:0},i=0;for(let o of r)o.superseded||(i++,s[o.label]=(s[o.label]??0)+1,o.label!==g.SOURCE&&l[o.trust]++,d[o.fresh]++);return{nodes:r,edges:a,summary:{nodes:i,edges:a.reduce((o,p)=>o+p.count,0),byLabel:s,trust:l,fresh:d,usecases:s[g.USECASE]??0,designed:0}}}var E=(t,r)=>t<r?-1:t>r?1:0;function re(t,r,e){let a=new Set,s=d=>{let i=e.nodeLabel.get(d);if(i===g.USECASE)a.add(d);else if(i===g.SCENARIO)for(let o of e.edgesFrom(d))o.type===x.BELONGS_TO&&a.add(o.dst)},l=e.edgesFrom(t);if(r===g.SCENARIO)for(let d of l)d.type===x.BELONGS_TO&&a.add(d.dst);if(r===g.AC)for(let d of l)d.type===x.SCOPED_TO&&s(d.dst);if(r===g.TEST)for(let d of l)d.type===x.AUTOMATES&&s(d.dst);return a}function P(t,r){let e=new Map,a=t.nodes.filter(i=>i.label===g.USECASE).map(i=>i.cid),s=a.map(i=>({ucCid:i,slug:r.nameOf.get(i)??i.slice(0,19),designed:r.designOf.has(i),nodeCids:[i]})).sort((i,o)=>E(i.slug,o.slug)),l={ucCid:"__shared__",slug:"cross-cutting",designed:!1,nodeCids:[]},d=new Map(s.map(i=>[i.ucCid,i]));for(let i of a)e.set(i,i);for(let i of t.nodes){if(i.label===g.SOURCE||i.label===g.USECASE)continue;let o=re(i.cid,i.label,r);if(o.size===1){let p=[...o][0];e.set(i.cid,p),d.get(p).nodeCids.push(i.cid)}else e.set(i.cid,"__shared__"),l.nodeCids.push(i.cid)}return{laneOf:e,lanes:[...s,l]}}var N={source:0,usecase:1,scenario:2,ac:3,test:4,stylenote:5,gap:5},se=6,G=260,R=64,z=28;function B(t,r,e){let{lanes:a}=r,s=new Map(t.nodes.map(n=>[n.cid,n])),l=new Map,d=[],i=[],o=n=>{let m=n.map(h=>l.get(h)).filter(h=>h!==void 0);return m.length?m.reduce((h,S)=>h+S,0)/m.length:Number.MAX_SAFE_INTEGER},p=a.filter(n=>n.ucCid!=="__shared__"||n.nodeCids.length>0),f=t.nodes.filter(n=>n.label===g.SOURCE).sort((n,m)=>E(n.slug,m.slug)),v=0;for(let n of p){let m=n.nodeCids.map(c=>s.get(c)).filter(Boolean),h=c=>m.filter(u=>u.label===c),S=h(g.USECASE).sort((c,u)=>E(c.slug,u.slug));S.forEach((c,u)=>l.set(c.cid,u));let D=h(g.SCENARIO).sort((c,u)=>E(c.slug,u.slug));D.forEach((c,u)=>l.set(c.cid,u));let M=h(g.AC).sort((c,u)=>{let _=o(e.edgesInto(c.cid).filter(b=>b.type===x.EXERCISES).map(b=>b.src)),O=o(e.edgesInto(u.cid).filter(b=>b.type===x.EXERCISES).map(b=>b.src));return _-O||E(c.slug,u.slug)});M.forEach((c,u)=>l.set(c.cid,u));let j=h(g.TEST).sort((c,u)=>{let _=o(e.edgesFrom(c.cid).filter(b=>b.type===x.VERIFIES).map(b=>b.dst)),O=o(e.edgesFrom(u.cid).filter(b=>b.type===x.VERIFIES).map(b=>b.dst));return _-O||E(c.slug,u.slug)});j.forEach((c,u)=>l.set(c.cid,u));let q=m.filter(c=>N[c.label]===void 0||N[c.label]>=5).sort((c,u)=>E(c.slug,u.slug));q.forEach((c,u)=>l.set(c.cid,u));let I=Math.max(1,S.length,D.length,M.length,j.length,q.length)*R+z;for(let c of m){let u=N[c.label]??4,_=l.get(c.cid)??0;d.push({...c,lane:n.ucCid,col:u,x:u*G,y:v+z/2+_*R})}i.push({...n,y0:v,y1:v+I}),v+=I}let w=Math.max(v,R);f.forEach((n,m)=>d.push({...n,lane:"__spine__",col:0,x:0,y:w/(f.length+1)*(m+1)}));let L=se*G;return{nodes:d,lanes:i,width:L,height:w}}function ie(t){return t.design_of?"design":t.review.length>0?"review":t.nodes.some(r=>r.label==="source")?"ingest":t.nodes.length>0?"extract":"other"}function U(t){let r=new Map,e=new Map,a=[];for(let s of t){for(let n of s.nodes)r.has(n.cid)||r.set(n.cid,s.seq);let l=new Map(e);for(let n of s.nodes)n.content?.derived===!0&&!e.has(n.cid)&&e.set(n.cid,"derived");for(let n of s.review)n.resolution==="approved"||n.resolution==="edited"?e.set(n.id,"trusted"):n.resolution==="rejected"?e.set(n.id,"archived"):n.resolution==="reset"&&e.set(n.id,"derived");let d=n=>{let m=0;for(let[h,S]of e)S===n&&l.get(h)!==n&&m++;return m},i=0;for(let[n,m]of e){let h=l.get(n);m==="derived"&&(h==="trusted"||h==="archived")&&i++}let o={trusted:d("trusted"),archived:d("archived"),reset:i},p=ie(s),f=s.nodes.map(n=>n.cid),v=s.edges.map(n=>`${n.type}|${n.src}|${n.dst}`),w=s.review.map(n=>n.id),L=p==="review"?"review \xB7 +"+o.trusted+" trusted"+(o.archived?", +"+o.archived+" archived":""):p+" \xB7 +"+f.length+" nodes";a.push({seq:s.seq,ts:s.ts,kind:p,label:L,mintedNodeCids:f,mintedEdgeKeys:v,reviewedNodeCids:w,trustDelta:o})}return{commits:a,bornSeq:r}}function Y(t,r,e){let a=[];for(let s of t){s.nodes.some(l=>l.cid===r)&&a.push({seq:s.seq,ts:s.ts,kind:"minted",detail:"minted here"});for(let l of s.review)l.id===r&&a.push({seq:s.seq,ts:s.ts,kind:"review",detail:l.resolution+(l.reason?": "+l.reason:"")})}return e.length&&a.push({seq:0,ts:"",kind:"derived_from",detail:"source lines "+e.join(", ")}),a}var ae={"&":"&","<":"<",">":">",'"':""","'":"'"};function k(t){return String(t).replace(/[&<>"']/g,r=>ae[r])}var $=t=>"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"),oe=new RegExp("[\u2028\u2029]","g");function W(t){return t.replace(/[<>&]/g,$).replace(oe,$)}var X=t=>t.replace("sha256:","").slice(0,12);function K(t){if(!t||typeof t!="object")return"";let r=String(t.operator??""),e=t.operand!=null?String(t.operand):"",a=t.unit!=null?" "+String(t.unit):"",s=t.baseline!=null?String(t.baseline):"",l=t.within&&typeof t.within=="object"?t.within:null,d;switch(r){case"exists":d="exists: "+e;break;case"forall":d="for all "+e;break;case"contains":d="contains "+e;break;case"gte":d=">= "+e+a;break;case"lte":d="<= "+e+a;break;case"equals":d="= "+e+a+(s?" (was "+s+")":"");break;case"changed-by":d="changed by "+e+a;break;default:d=(r+" "+e+a).trim()}if(l){let i=l.threshold!=null?String(l.threshold):"",o=l.unit!=null?String(l.unit):"";(i||o)&&(d+=" within "+i+o)}return d.trim()}var C=t=>t==null||t===""?"":`<span class="chip">${k(t)}</span>`,y=(t,r)=>r==null||r===""?"":`<div class="kv"><span class="k">${k(t)}</span><span class="v">${k(r)}</span></div>`,de=t=>Array.isArray(t)&&t.length?`<ul class="crit">${t.map(r=>`<li>${k(r)}</li>`).join("")}</ul>`:"";function J(t,r){let e=r??{};switch(t){case"usecase":return[y("description",e.description),y("value",e.value),[C(e.risk?"risk: "+e.risk:""),...Array.isArray(e.actors)?e.actors.map(a=>C(a)):[]].join(""),de(e.criteria)].join("");case"scenario":return[y("intent",e.intent),[C(e.case_type)].join(""),e.parameters&&typeof e.parameters=="object"?Object.entries(e.parameters).map(([a,s])=>y(a,s)).join(""):"",y("techniques",e.technique_notes)].join("");case"ac":return[y("",e.text),[C(e.kind),C(e.risk?"risk: "+e.risk:"")].join(""),(()=>{let a=K(e.expected_answer);return a?`<div class="pred">${k(a)}</div>`:""})()].join("");case"test":{let a=K(e.check),s=e.test_md_blob!=null?`<pre class="md">${k(String(e.test_md_blob))}</pre>`:"";return[a?`<div class="pred">${k(a)}</div>`:"",y("definitionId",e.definitionId),s].join("")}case"source":return[y("source_id",e.source_id),y("blob",e.blob)].join("");case"stylenote":return[e.statement?`<div class="pred">${k(e.statement)}</div>`:"",[C(e.learned_from_kind?"learned from: "+e.learned_from_kind:"")].join(""),y("",e.text),Array.isArray(e.tags)?e.tags.map(a=>C(a)).join(""):""].join("");case"gap":return[y("",e.text??e.question),[C(e.kind),C(e.risk?"risk: "+e.risk:"")].join(""),y("why",e.risk_rationale),y("ref",e.ref)].join("");default:return""}}function Z(t,r,e,a){let s=H(t),l=P(s,t),d=B(s,l,t),{commits:i}=U(r);s.summary.designed=l.lanes.filter(n=>n.designed&&n.ucCid!=="__shared__").length;let o={},p={};for(let n of s.nodes){o[n.cid]=J(n.label,n.content);let m=t.edgesInto(n.cid).filter(h=>h.type===x.DERIVES&&typeof h.props?.anchor=="string").map(h=>h.props.anchor);p[n.cid]=Y(r,n.cid,m)}let f=d.nodes.map(n=>({cid:n.cid,slug:n.slug,label:n.label,trust:n.trust,fresh:n.fresh,title:n.title,superseded:n.superseded,lane:n.lane,col:n.col,x:n.x,y:n.y})),v=d.lanes.map(n=>({ucCid:n.ucCid,slug:n.slug,designed:n.designed,y0:n.y0,y1:n.y1})),L=s.nodes.some(n=>n.label===g.SOURCE)?{}:void 0;return{meta:{fromSeq:r[0]?.seq??0,tipHash:e[e.length-1]??null,storePath:a,schema:"assurance/context@1",asOf:r[r.length-1]?.ts??null},summary:s.summary,lanes:v,nodes:f,edges:s.edges,commits:i,lineage:p,contentHtml:o,width:d.width,height:d.height,source:L}}var Q="__PAYLOAD__",ee=`<!doctype html>
|
|
3
3
|
<html lang="en">
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="utf-8">
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as Y}from"./chunk-6LRKYF67.js";import"./chunk-GBBVP2JW.js";import{a as j,c as F}from"./chunk-ANIVHX3P.js";import"./chunk-3C5GMAM4.js";import"./chunk-GRB66C5S.js";import{a as B}from"./chunk-64LC36AF.js";import"./chunk-JFAFKHDX.js";import"./chunk-WIA7TPK3.js";import"./chunk-QPZRHAYK.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import"./chunk-2PQXEEVY.js";import{a as I}from"./chunk-MCQXRJGH.js";import{b as U}from"./chunk-74RUSHIB.js";import"./chunk-ZZLR3O5A.js";import{g as N}from"./chunk-ZG2V2ODK.js";import"./chunk-5YPBPZUR.js";import{a as V}from"./chunk-YCCUBQY4.js";import{x as m}from"./chunk-HJGUEZLW.js";import{a as P}from"./chunk-HCBYKLMW.js";import{a as A,b as u,k as M}from"./chunk-C44QQJR4.js";import{a as Q}from"./chunk-6YGTRKDT.js";import{e as O}from"./chunk-UR6MHSHU.js";var T=O(Q(),1);function K(e,p,k){let{ref:D,reason:d,by:y}=k;if(!d||d.trim().length===0)return{record:null,errors:[{code:"REASON_REQUIRED",detail:"archiving a node needs a reason \u2014 it becomes the tombstone's provenance"}]};let x=p.resolve(D);if(!x)return{record:null,errors:[{code:"UNKNOWN_REF",detail:`no node '${D}' in the graph`}]};let r=p.tipOf(x.cid);if(p.superseded.has(r))return{record:null,errors:[{code:"ALREADY_ARCHIVED",detail:`${D} is already superseded at its tip (${r.slice(0,19)}\u2026)`}]};let t=N(e,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:r,new:null,reason:d,by:y}],source_head_moves:{}},{expectPrev:p.latestHash});return U(e),{record:t.record,errors:null}}function L(e){let p=e.by??{kind:"human",id:process.env.USER??"operator"},k=e.mode==="interactive"?"override":e.mode,D={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},d={applied:0,committed:0,retired:0,skipped:0,deferred:0,failed:0},y=new Map;for(let r of e.planRows)if(r.held_ref&&e.held){let t=e.held.rows.find($=>$.temp_ref===r.held_ref);if(!t)continue;let l={kind:t.kind,ref:t.temp_ref,title:t.title,why:t.why,origin:"content-change",...r.impact?{impact:r.impact}:{}};y.set(l.ref,{card:l,source:"held",heldRef:t.temp_ref})}else if(r.kind==="MODIFY"){let t={kind:"MODIFY",ref:r.ref,title:r.ref,why:`${r.reason}: ${r.provenance}`,origin:r.origin??"structural-stale",...r.impact?{impact:r.impact}:{}};y.set(t.ref,{card:t,source:"row",row:r})}else if(r.kind==="ADD"){let t={kind:"ADD",ref:r.ref,title:r.ref,why:r.reason,origin:r.origin??"content-change"};y.set(t.ref,{card:t,source:"row",row:r})}for(let r of e.archive){if(r.kind!=="ARCHIVE")continue;let t={kind:"ARCHIVE",ref:r.ref,title:r.ref,why:r.why,provenance:r.why,...r.impact?{impact:r.impact}:{}};y.set(t.ref,{card:t,source:"archive",row:r})}let x=r=>(d.failed++,{outcome:"failed",detail:r});return{cards:()=>[...y.values()].map(r=>r.card),async submit(r,t){let l=y.get(r);if(!l)return x(`no card ${r}`);if(t.v==="skip")return d.skipped++,e.signals({ref:r,verdict:"gap-dismissed"}),{outcome:"skipped"};if(t.v==="defer")return d.deferred++,{outcome:"deferred"};if(t.v==="archive"){if(l.source!=="archive")return x(`${r} is not an ARCHIVE card`);let c=I(e.contextDir),C=c.resolve(l.row.ref);if(C&&c.superseded.has(c.tipOf(C.cid)))return d.skipped++,{outcome:"skipped",detail:"already retired \u2014 nothing to do"};let n=K(e.contextDir,I(e.contextDir),{ref:l.row.ref,reason:`reconcile retire: ${l.row.why}`,by:p});return n.errors?x(n.errors.map(s=>`${s.code}: ${s.detail}`).join("; ")):(d.retired++,e.signals({ref:r,verdict:"gap-resolved-archive",reason:l.row.why}),{outcome:"retired"})}if(l.source==="archive")return x(`${r} takes archive/skip/defer, not approve`);if(l.source==="held"){let c=Y(e.contextDir,e.held,l.heldRef,p,t.edits);if(!c.ok)return x(c.message);if(c.kind==="ADD"){let C=await e.runDesign(c.ref,{yes:!0,mode:k,...t.steering?{because:t.steering}:{}});return C!==0?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but its design run exited ${C} \u2014 finish with kane-cli design tests --use-case ${c.ref}`}):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create",...t.steering?{reason:t.steering}:{}}),{outcome:"applied",detail:c.ref})}if(t.steering){let C=I(e.contextDir),n=j(C,c.ref);if(!n.ok)return d.committed++,{outcome:"committed",detail:`committed ${c.ref}, but steering could not resolve it (${n.message}) \u2014 steer via kane-cli maintain evolve ${c.ref}`};let s=await F(e.contextDir,n.target,{yes:!0,mode:k,because:t.steering},D,e.runDesign,"batch");if(s.outcome==="no-design"){let R=await e.runDesign(n.target.seamRef,{yes:!0,mode:k,because:t.steering});return R!==0?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but its steered design run exited ${R} \u2014 finish with kane-cli design tests --use-case ${n.target.seamRef}`}):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create",reason:t.steering}),{outcome:"applied",detail:c.ref})}return s.outcome==="failed"||s.outcome==="paused"?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${c.ref}, but the steering evolve ${s.outcome} (exit ${s.code}) \u2014 finish with kane-cli maintain evolve ${c.ref}`}):s.outcome==="declined"?(d.committed++,{outcome:"committed",detail:`committed ${c.ref} \u2014 the steering evolve was declined; re-run kane-cli maintain evolve ${c.ref}`}):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-evolve",reason:t.steering}),{outcome:"applied",detail:c.ref})}return d.committed++,e.signals({ref:r,verdict:"gap-resolved-evolve"}),{outcome:"committed",detail:c.ref}}let $=I(e.contextDir),b=j($,l.row.ref);if(!b.ok)return x(b.message);if(l.card.kind==="ADD"){let c=await e.runDesign(b.target.seamRef,{yes:!0,mode:k});return c!==0?x(`design run exited ${c}`):(d.applied++,e.signals({ref:r,verdict:"gap-resolved-create"}),{outcome:"applied"})}let h=await F(e.contextDir,b.target,{yes:!0,mode:k,...t.steering?{because:t.steering}:{}},D,e.runDesign,"batch");return h.outcome==="evolved"?(d.applied++,e.signals({ref:r,verdict:"gap-resolved-evolve",...t.steering?{reason:t.steering}:{}}),{outcome:"applied"}):h.outcome==="failed"||h.outcome==="paused"?x(`evolve ${h.outcome} (exit ${h.code})`):(d.skipped++,{outcome:"skipped",detail:h.outcome})},summary:()=>({...d})}}var v=O(P(),1);function S(e){return e.kind==="ARCHIVE"?[{v:"archive",label:"retire",detail:"tombstone it \u2014 the graph forgets forward"},{v:"skip",label:"skip",detail:"keep it \u2014 decided, never re-offered"},{v:"defer",label:"defer",detail:"not now \u2014 the plan re-offers it"}]:[{v:"approve",label:"approve",detail:e.kind==="ADD"?"commit + design it":"commit the updated version (old\u2192new redirect)"},{v:"skip",label:e.origin==="content-change"?"reject":"skip",detail:e.origin==="content-change"?"drop the staged proposal \u2014 nothing committed":"leave it as is"},{v:"defer",label:"defer",detail:"not now \u2014 the plan keeps it staged"}]}function E(e){return e.kind==="ARCHIVE"?null:S(e).length}var X={ADD:{color:m.green??"green"},MODIFY:{color:"yellow"},ARCHIVE:{color:m.red}},z=60;function G({card:e,position:p,sel:k=0,focused:D=!1,freeText:d=null}){let{stdout:y}=M(),r=(y?.columns??80)<z,t=S(e),l=E(e),$=X[e.kind],b=n=>D&&k===n?(0,v.jsx)(u,{color:m.generateAccent,children:"\u25B8"}):" ",h=e.impact,c=h&&h.stale_refs.length>0?`${e.kind==="ARCHIVE"?"retiring drops":"approving marks"} ${h.stale_refs.length} item(s) stale`+((h.direct_refs?.length??0)>0?` \u2014 ${h.direct_refs.length} directly touched: ${h.direct_refs.join(", ")}`:""):null,C=(0,v.jsxs)(A,{flexDirection:"column",children:[(0,v.jsx)(u,{bold:!0,color:m.generateAccent,children:`? reconcile \u2014 item ${p.n} of ${p.of}`}),(0,v.jsxs)(u,{bold:!0,children:[" ",(0,v.jsx)(u,{color:$.color,children:`[${e.kind}]`}),` ${e.title}`]}),(0,v.jsx)(u,{color:m.muted,children:` ${e.why}`}),c?(0,v.jsx)(u,{color:m.muted,children:` impact: ${c}`}):null,e.kind==="ARCHIVE"&&e.provenance&&e.provenance!==e.why?(0,v.jsx)(u,{color:m.muted,children:` ${e.provenance}`}):null,t.map((n,s)=>(0,v.jsxs)(u,{children:[" ",b(s),` ${s+1} ${n.label}`,(0,v.jsx)(u,{color:m.dim,children:` \u2014 ${n.detail}`})]},`o-${s}`)),l!==null?d?(0,v.jsxs)(A,{children:[(0,v.jsxs)(u,{children:[" ",(0,v.jsx)(u,{color:m.generateAccent,children:"\u25B8"})," ",(0,v.jsx)(u,{color:m.dim,children:"\u270E "})]}),(0,v.jsx)(V,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:"steer the redesign (approves, then evolves with your words)"})]}):(0,v.jsxs)(u,{children:[" ",b(l)," ",(0,v.jsx)(u,{color:m.dim,children:"\u270E steer the redesign"})]}):null]});return r?C:(0,v.jsx)(A,{flexDirection:"column",borderStyle:"round",borderColor:m.generateAccent,paddingX:1,children:C})}var g=O(P(),1);function q(e){return e.landed?"committed":e.outcome}var J={applied:"\u2713",committed:"\u2713",retired:"\u2713",skipped:"\xB7",deferred:"\u2013",failed:"\u2717"};function Z({controller:e,cards:p,note:k,markOutcome:D,routeChat:d,onFinish:y,onCtrlC:x,pauseRef:r}){let[t,l]=(0,T.useState)(p.length>0?{at:"card",idx:0,sel:0,editor:null}:{at:"chat",text:"",busy:null}),$=(0,T.useRef)(0),b=(0,T.useRef)(t);b.current=t;let h=(0,T.useRef)(!1),c=()=>{k((0,g.jsx)(u,{color:m.dim,children:"walk paused \u2014 every verdict so far is committed; re-run the same command to continue"})),y(3)},C=()=>{if(h.current)return;h.current=!0;let i=b.current;if(i.at==="busy"||i.at==="chat"&&i.busy!==null){k((0,g.jsx)(u,{color:m.dim,children:"finishing the current item, then pausing\u2026"}));return}if(i.at==="chat"){y($.current);return}c()};r&&(r.current=C);let n=t.at==="card"||t.at==="busy"?p[t.idx]:null,s=i=>{let o=i+1;if(o<p.length)l({at:"card",idx:o,sel:0,editor:null});else{let a=e.summary();k((0,g.jsx)(u,{color:m.dim,children:`reconcile walk: ${a.applied} applied, ${a.committed} committed, ${a.retired} retired, ${a.skipped} skipped, ${a.deferred} deferred`+(a.failed>0?`, ${a.failed} failed`:"")})),k((0,g.jsx)(u,{color:m.dim,children:"anything else? steer a redesign \u2014 `<uc-ref> <what to change>` \u2014 or press Enter to finish"})),l({at:"chat",text:"",busy:null})}},R=(0,T.useRef)(!1),w=(i,o)=>{if(R.current)return;R.current=!0;let a=p[i];l({at:"busy",idx:i,label:o.v==="archive"?"retiring\u2026":o.v==="approve"&&o.steering?"committing, then steering the redesign\u2026":"applying\u2026"}),e.submit(a.ref,o).catch(f=>({outcome:"failed",detail:f instanceof Error?f.message:String(f)})).then(f=>{let _=J[f.outcome]??"\xB7";if(k((0,g.jsxs)(u,{children:[(0,g.jsx)(u,{color:f.outcome==="failed"?m.red:m.green,children:_}),` ${f.outcome} [${a.kind}] ${a.title}`,f.detail?(0,g.jsx)(u,{color:m.dim,children:` \u2014 ${f.detail}`}):null,f.outcome!=="failed"&&f.outcome!=="skipped"&&f.outcome!=="deferred"&&a.impact&&a.impact.stale_refs.length>0?(0,g.jsx)(u,{color:m.dim,children:` \xB7 ${a.impact.stale_refs.length} item(s) now stale`}):null]})),f.outcome==="failed"&&($.current=$.current===0?1:$.current),D(a.ref,q(f)),R.current=!1,h.current){c();return}s(i)})},W=(0,T.useMemo)(()=>({isFocused:()=>b.current.at==="card"&&b.current.editor===null,onMove:i=>{l(o=>{if(o.at!=="card")return o;let a=p[o.idx],f=E(a)??S(a).length-1;return{...o,sel:Math.max(0,Math.min(f,o.sel+i))}})},onSelect:()=>{let i=b.current;if(i.at!=="card")return;let o=p[i.idx],a=E(o);if(a!==null&&i.sel===a){l({...i,editor:""});return}let f=S(o)[i.sel];f&&w(i.idx,{v:f.v})},onDigit:i=>{let o=b.current;if(o.at!=="card")return;let a=S(p[o.idx])[i-1];a&&w(o.idx,{v:a.v})},onType:i=>{l(o=>o.at!=="card"||E(p[o.idx])===null?o:{...o,editor:(o.editor??"")+i})},onBack:()=>{}}),[p]);return(0,T.useEffect)(()=>{t.at==="done"&&y($.current)},[t.at]),(0,g.jsxs)(A,{flexDirection:"column",children:[(0,g.jsx)(B,{onToggleThinking:()=>{},onCtrlC:()=>{x(),C()},panel:W}),t.at==="card"&&n?(0,g.jsx)(G,{card:n,position:{n:t.idx+1,of:p.length},sel:t.sel,focused:t.editor===null,freeText:t.editor!==null?{value:t.editor,onChange:i=>l(o=>o.at==="card"?{...o,editor:i}:o),onSubmit:i=>{let o=b.current;o.at==="card"&&(i.trim()?w(o.idx,{v:"approve",steering:i.trim()}):l({...o,editor:null}))},onCancel:()=>l(i=>i.at==="card"?{...i,editor:null}:i)}:null}):null,t.at==="busy"?(0,g.jsx)(u,{color:m.dim,children:`\u2026 ${t.label}`}):null,t.at==="chat"?t.busy?(0,g.jsx)(u,{color:m.dim,children:`\u2026 ${t.busy}`}):(0,g.jsxs)(A,{children:[(0,g.jsx)(u,{color:m.generateAccent,children:"\u203A "}),(0,g.jsx)(V,{value:t.text,onChange:i=>l(o=>o.at==="chat"?{...o,text:i}:o),onSubmit:i=>{let o=i.trim();if(!o){l({at:"done"});return}l({at:"chat",text:"",busy:"redesigning\u2026"}),d(o).catch(a=>`\u2717 redesign failed: ${a instanceof Error?a.message:String(a)}`).then(a=>{if(k((0,g.jsx)(u,{children:a})),h.current){c();return}l({at:"chat",text:"",busy:null})})},onCancel:()=>{},placeholder:"uc-\u2026 what to change (Enter on empty = finish)"})]}):null]})}async function xe(e){let p={current:null},k=n=>{p.current?.append(n)},D=null,d=async(n,s)=>{let[{runDesign:R},{resolveAgentAuthEnv:w},{runAgent:W},{preflightTurn:i}]=await Promise.all([import("./run-XAZMT7WO.js"),import("./spawner-GOTVIFR5.js"),import("./bridge-LNDJS3HH.js"),import("./turn-preflight-JGYT7LXP.js")]);D??=await w();let o=D;return R({useCase:n,force:!0,mode:s.mode??"override",...s.because?{because:s.because}:{},...s.changeDelta!==void 0?{changeDelta:s.changeDelta}:{},...s.priorDesign!==void 0?{priorDesign:s.priorDesign}:{}},{contextDir:e.dir,agent:W,preflightTurn:()=>i(o),ask:async()=>[],out:a=>k((0,g.jsx)(u,{color:m.dim,children:` ${a}`})),progress:()=>{},isTTY:!1,auth:o})},y=e.runDesign??d,x=L({contextDir:e.dir,held:e.held,archive:e.archive,planRows:e.rows,runDesign:y,mode:"interactive",signals:e.signals}),r=new Set(e.rows.filter(n=>n.applied!==void 0).map(n=>n.held_ref??n.ref)),t=x.cards().filter(n=>!r.has(n.ref)&&!(n.kind==="ARCHIVE"&&e.archiveState?.[n.ref]!==void 0)),l=n=>e.rows.findIndex(s=>(s.held_ref??s.ref)===n),$=(n,s)=>{try{if(t.find(W=>W.ref===n)?.kind==="ARCHIVE"){s==="retired"?e.markA?.(n,"retired"):s==="skipped"&&e.markA?.(n,"skipped");return}let w=l(n);if(w<0)return;s==="applied"||s==="committed"?e.mark?.(w,"approved"):s==="skipped"&&e.mark?.(w,"skipped")}catch{}},b=async n=>{let[{openGraph:s},{resolveParentUc:R,evolveOneUc:w}]=await Promise.all([import("./readmodel-XOGOELUP.js"),import("./evolve-cmd-MVALOB3G.js")]),[W,...i]=n.split(/\s+/),o=s(e.dir),a=R(o,W);if(!a.ok)return`couldn't resolve '${W}' \u2014 start with a use-case id (uc-\u2026): ${a.message}`;if(i.length===0)return`say what to change: \`${W} <your words>\` \u2014 the words become the redesign's change delta`;let f=i.join(" "),_={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},H=await w(e.dir,a.target,{yes:!0,mode:"override",because:f},_,y,"batch");return H.outcome==="evolved"?(e.signals({ref:a.target.display,verdict:"gap-resolved-evolve",reason:f}),`\u2713 redesigned ${a.target.display} \u2014 "${f}"`):`\u2717 evolve ${H.outcome} for ${a.target.display} (exit ${H.code})`};if(e.script){let n=0;for(let s of t){let R=await e.script(s),w=await x.submit(s.ref,R);w.outcome==="failed"&&n===0&&(n=1),$(s.ref,q(w))}return n}let[{render:h},{ScrollbackProvider:c},{ScrollbackTap:C}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./scrollback-JLPJR25X.js"),import("./ScrollbackTap-Q3IOKNMS.js")]);return new Promise(n=>{let s=!1,R=f=>{s||(s=!0,(async()=>{process.removeListener("SIGINT",o),await p.current?.flush();try{a.unmount()}catch{}n(f)})())},w=0,W={current:null},i=()=>{if(w+=1,w>=2){process.removeListener("SIGINT",o);try{a.unmount()}catch{}n(130)}},o=()=>{i(),W.current?.()};process.on("SIGINT",o);let a=h((0,g.jsxs)(c,{children:[(0,g.jsx)(C,{into:p}),(0,g.jsx)(Z,{controller:x,cards:t,note:k,markOutcome:$,routeChat:b,onFinish:R,onCtrlC:i,pauseRef:W})]}),{exitOnCtrlC:!1})})}export{Z as WalkSessionSurface,q as outcomeToMark,xe as runWalkSession};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testmuai/kane-cli",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
4
|
"description": "KaneAI Terminal UI — browser automation testing agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"README.md"
|
|
15
15
|
],
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@testmuai/evidence-cli": "^0.1.
|
|
17
|
+
"@testmuai/evidence-cli": "^0.1.7",
|
|
18
18
|
"archiver": "^7.0.1",
|
|
19
19
|
"chalk": "^5.3.0",
|
|
20
20
|
"commander": "^12.0.0",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
"ws": "^8.20.0"
|
|
27
27
|
},
|
|
28
28
|
"optionalDependencies": {
|
|
29
|
-
"@testmuai/kane-cli-darwin-arm64": "0.6.
|
|
30
|
-
"@testmuai/kane-cli-darwin-x64": "0.6.
|
|
31
|
-
"@testmuai/kane-cli-linux-x64": "0.6.
|
|
32
|
-
"@testmuai/kane-cli-linux-arm64": "0.6.
|
|
33
|
-
"@testmuai/kane-cli-win-x64": "0.6.
|
|
29
|
+
"@testmuai/kane-cli-darwin-arm64": "0.6.4",
|
|
30
|
+
"@testmuai/kane-cli-darwin-x64": "0.6.4",
|
|
31
|
+
"@testmuai/kane-cli-linux-x64": "0.6.4",
|
|
32
|
+
"@testmuai/kane-cli-linux-arm64": "0.6.4",
|
|
33
|
+
"@testmuai/kane-cli-win-x64": "0.6.4",
|
|
34
34
|
"sharp": "^0.34.5"
|
|
35
35
|
},
|
|
36
36
|
"publishConfig": {
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as H,b as $e}from"./chunk-6PS65QFF.js";import{a as xe,b as ye}from"./chunk-KGFISJFM.js";import{b as de,d as he}from"./chunk-LV5VRSPI.js";import{a as pe}from"./chunk-5Y2G4NC7.js";import{a as fe}from"./chunk-OZM4UU5F.js";import{b as ge}from"./chunk-DFS4RMVP.js";import"./chunk-KRFGAVYU.js";import{x as l}from"./chunk-QIE62H3J.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as x,b as o,i as me,k as U}from"./chunk-C44QQJR4.js";import{a as Y}from"./chunk-6YGTRKDT.js";import{e as I}from"./chunk-UR6MHSHU.js";var L=I(Y(),1);var B=I(R(),1),Te=3,Ze=60;function et(e){let n=e.cursor>=0?e.questions[e.cursor]:void 0;if(n?.risk==="high")return"high-risk \u2014 answer explicitly, or type 'defer' to leave the rest with the agent";let t=e.resolution.findIndex(Boolean);if(t>=0){let a=e.questions[t],r=a.options.find((i,p)=>p!==e.resolution[t].selected_index)?.label??a.options[0]?.label??"\u2026";return`changed your mind? \`${t+1}: ${r}\` re-answers q${t+1}`}let s=n??e.questions[0],u=s.options[0]?.label??"\u2026",c=s.allow_free_text?" \xB7 or your own words":"";return`e.g. \`1\` or \`${u}\`${c} \xB7 Enter takes recommended defaults`}function tt(e){return`[${e}]`}function nt({batch:e,i:n}){let t=e.resolution[n],s=t.form==="deferred"?"\u2013 deferred (the agent keeps it)":`\u2713 ${t.form}: ${t.choice}${t.form==="assumed"?" (flagged)":" (you)"}`;return(0,B.jsx)(o,{color:l.dim,children:` ${s}`})}function rt({batch:e,i:n}){let t=e.questions[n],s=e.cursor===n&&!e.resolution[n],u=s?"\u203A":" ";return(0,B.jsxs)(x,{flexDirection:"column",children:[(0,B.jsx)(o,{bold:s,children:` ${n+1} ${u} ${t.text} ${tt(t.risk)}`}),(0,B.jsx)(o,{color:l.dim,children:` why: ${t.rationale}`}),e.resolution[n]?(0,B.jsx)(nt,{batch:e,i:n}):(0,B.jsxs)(x,{flexDirection:"column",children:[t.multi_select?(0,B.jsx)(o,{color:l.dim,children:" note: multi-select not yet supported \u2014 pick the best single option"}):null,t.options.map((c,a)=>(0,B.jsx)(o,{children:` ${a+1}. ${c.label}${a===t.recommended_index?" \u2605 recommended":""}`},`o-${a}`)),t.allow_free_text?(0,B.jsx)(o,{color:l.dim,children:" (free text allowed \u2014 just type your own words)"}):null]})]})}function we({batch:e}){let{stdout:n}=U(),t=n?.columns??80,s=t<Ze,u=e.resolution.filter(y=>!y).length,c=Math.max(0,Math.min(e.cursor<0?0:e.cursor,e.questions.length-Te)),a=e.questions.slice(c,c+Te),r=c,i=e.questions.length-c-a.length,p=et(e);s&&p.length>t-2&&(p=`${p.slice(0,Math.max(0,t-3))}\u2026`);let f=e.cursor>=0?`answering ${e.cursor+1} of ${e.questions.length}`:"all placed",g=(0,B.jsxs)(x,{flexDirection:"column",children:[(0,B.jsx)(o,{bold:!0,children:`questions \xB7 ${u} pending \xB7 ${f}`}),r>0?(0,B.jsx)(o,{color:l.muted,children:` \u22EE ${r} above`}):null,a.map((y,C)=>(0,B.jsx)(rt,{batch:e,i:c+C},y.id)),i>0?(0,B.jsx)(o,{color:l.muted,children:` \u22EE ${i} more`}):null,(0,B.jsx)(o,{color:l.dim,children:p})]});return s?g:(0,B.jsx)(x,{flexDirection:"column",borderStyle:"round",borderColor:l.dim,paddingX:1,children:g})}var A=I(R(),1),be=60,ot=e=>e.length<=be?e:`${e.slice(0,be-1)}\u2026`;function Z({item:e}){return(0,A.jsxs)(x,{flexDirection:"column",marginLeft:2,children:[(e.cite??[]).map((n,t)=>(0,A.jsx)(o,{dimColor:!0,children:`cite ${n.anchor??"conv"} \u2014 "${n.quote??""}"`},`cite-${t}`)),(e.depends_on_hint??[]).length>0&&(0,A.jsx)(o,{dimColor:!0,children:`depends on: ${(e.depends_on_hint??[]).join(", ")}`}),Object.entries(e.extra??{}).map(([n,t])=>(0,A.jsx)(o,{dimColor:!0,children:`${n}: ${t}`},`extra-${n}`))]})}function Q({heading:e,turn:n,items:t,expandedRef:s,total:u,compact:c,numbers:a,marks:r}){return(0,A.jsxs)(x,{flexDirection:"column",children:[(0,A.jsx)(o,{bold:!0,children:`${e} \xB7 turn ${n} \xB7 ${u??t.length} proposed`}),t.map((i,p)=>{let f=i.matches_existing,g=f?f.cid?f.archived?` \u2248 matches ARCHIVED ${f.cid.slice(0,19)} \u2014 previously rejected${f.reason?`: "${f.reason}"`:""}`:` \u2248 matches ${f.cid.slice(0,19)}`:" \u2248overlap":"",y=r?.[p]?" \xB7 updated":"",C=c?` ${a?.[p]??p+1} \xB7 ${i.title}${i.badge!==void 0?` \xB7 ${i.badge}`:""}${i.why?` \u2014 ${ot(i.why)}`:""}${g}${y}`:` ${i.title}${i.badge!==void 0?` \xB7 ${i.badge}`:""}${i.why!==void 0?` \xB7 ${i.why}`:""}${g}`;return(0,A.jsxs)(x,{flexDirection:"column",children:[(0,A.jsx)(o,{children:C}),s===i.temp_ref&&(0,A.jsx)(Z,{item:i})]},i.temp_ref)})]})}var Ce=I(R(),1),st=e=>e.summary??e.description??"";function it(e){return{temp_ref:e.temp_ref,title:e.title,badge:e.risk,why:st(e),matches_existing:e.matches_existing?e.matches_existing:null,cite:e.cite??[],depends_on_hint:e.depends_on_hint??[]}}function ve({turn:e,items:n,expandedRef:t,total:s,compact:u,numbers:c,marks:a}){return(0,Ce.jsx)(Q,{heading:"use-cases",turn:e,items:n.map(it),expandedRef:t,total:s,compact:u,numbers:c,marks:a})}var at={"use-case":"use-cases",ac:"ACs",scenario:"scenarios",test:"tests",gap:"gaps"},P=e=>at[e]??`${e}s`,ke=e=>e==="ac"?"AC":e==="use-case"?"use-case":e,ee=e=>e.kind??"use-case",Se=e=>`${ee(e)}:${e.temp_ref}`;function Ie(e){let n=e,t=n.badge??e.risk??null,s=n.why??e.summary??e.description??null;return JSON.stringify([e.title,t,s,n.extra??null,e.depends_on_hint??null])}function Be(e){return e.filter(n=>n.role==="agent"&&typeof n.turnIndex=="number"&&Array.isArray(n.items)&&n.items.length>0)}function F(e){let n=new Map,t=1;for(let c of Be(e)){let a=new Set;for(let r of c.items){let i=Se(r);if(a.has(i))continue;a.add(i);let p=n.get(i);n.set(i,{num:p?.num??t++,ref:r.temp_ref,kind:ee(r),item:r,turnIndex:c.turnIndex,fingerprint:Ie(r)})}}let s=[...n.values()].sort((c,a)=>c.num-a.num),u=[];for(let c of s){let a=u.find(r=>r.kind===c.kind);a?a.count++:u.push({kind:c.kind,label:P(c.kind),count:1})}return{entries:s,byRef:n,counts:u}}function Re(e,n){let s=Be(e).find(m=>m.turnIndex===n);if(!s)return null;let u=e.filter(m=>m.role!=="agent"||typeof m.turnIndex!="number"||m.turnIndex<=n),c=F(u),a=F(e.filter(m=>m.role!=="agent"||typeof m.turnIndex!="number"||m.turnIndex<n)),r=[],i=new Map,p=new Map,f=new Map,g=new Set;for(let m of s.items){let w=Se(m);if(g.has(w))continue;g.add(w);let q=a.byRef.get(w),O=m.changed===!0,S=c.byRef.get(w).num,D=ee(m);if(q&&!O&&q.fingerprint===Ie(m)){i.set(D,(i.get(D)??0)+1);continue}let b=!!q||O,M=b?f:p;M.set(D,(M.get(D)??0)+1),r.push({item:m,num:S,updated:b})}let y=[...i.entries()].map(([m,w])=>({label:P(m),count:w})),C=[...[...p.entries()].map(([m,w])=>`${w} new ${w===1?ke(m):P(m)}`),...[...f.entries()].map(([m,w])=>`${w} updated ${w===1?ke(m):P(m)}`)].join(" \xB7 ");return{fresh:r,unchanged:y,headerStats:C}}var E=I(R(),1);function De({turnIndex:e,fresh:n,headerStats:t,unchangedTotal:s}){let u=[];for(let a of n){let r=a.item.kind??"use-case",i=u.find(p=>p.kind===r);i?i.rows.push(a):u.push({kind:r,rows:[a]})}let c=`design \xB7 turn ${e} \u2014 ${t||"no new items"}${s>0?` (${s} unchanged)`:""}`;return(0,E.jsxs)(x,{flexDirection:"column",children:[(0,E.jsx)(o,{bold:!0,children:c}),u.map(({kind:a,rows:r})=>{let i=r.filter(g=>!g.updated).length,p=r.length-i,f=[...i>0?[`${i} new`]:[],...p>0?[`${p} updated`]:[]].join(" \xB7 ");return(0,E.jsxs)(x,{flexDirection:"column",children:[(0,E.jsx)(o,{color:l.dim,children:`${P(a).toLowerCase()} \xB7 ${f}`}),r.map(({item:g,num:y,updated:C})=>{let m=g;return(0,E.jsxs)(x,{flexDirection:"column",children:[(0,E.jsxs)(o,{children:[(0,E.jsx)(o,{children:` ${y} \xB7 ${g.title}`}),m.badge?(0,E.jsx)(o,{color:l.dim,children:` \xB7 ${m.badge}`}):null,C?(0,E.jsx)(o,{color:l.dim,children:" \xB7 updated"}):null]}),m.why?(0,E.jsx)(o,{color:l.dim,children:` ${m.why}`}):null]},`${a}:${g.temp_ref}`)})]},a)})]})}var d=I(R(),1);function ct(e){let n=e.form==="assumed"?" (flagged)":e.form==="deferred"?"":" (you)",t=e.note?` \u2014 ${e.note}`:"";return e.form==="deferred"?`\u21B3 deferred q${e.qNum} ${e.stub}${t}`:e.form==="changed"?`\u21B3 changed q${e.qNum} ${e.stub}: ${e.prev??"?"} \u2192 ${e.choice??"?"}${n}${t}`:`\u21B3 ${e.form} q${e.qNum} ${e.stub}: ${e.choice??"?"}${n}${t}`}function Ee({block:e,annotations:n}){switch(e.kind){case"banner":return(0,d.jsx)(o,{color:l.dim,children:`\u2500\u2500 ${e.text} \u2500\u2500`});case"user":return(0,d.jsxs)(x,{children:[(0,d.jsx)(o,{color:l.orange,children:"\u276F "}),(0,d.jsx)(o,{children:e.text})]});case"note":return(0,d.jsx)(o,{color:l.dim,children:e.text});case"agent":return(0,d.jsx)(xe,{text:e.text});case"thinking":return(0,d.jsx)(o,{color:l.dim,children:` thought for ${(e.tookMs/1e3).toFixed(1)}s`});case"tool":return(0,d.jsx)(o,{color:l.dim,children:` ${H({name:e.name,status:e.status==="ok"?"done":e.status,detail:e.detail})}`});case"usage":return(0,d.jsx)(o,{color:l.dim,children:` \xB7 ${e.credits.toFixed(1)} credits \u2014 total ${e.total.toFixed(1)}`});case"turn":{let t=n??null,s=t?t.fresh.map(r=>r.item):e.items,u=t?t.fresh.map(r=>r.num):void 0,c=t?t.fresh.map(r=>r.updated):void 0,a=s.some(r=>!!r.kind);return(0,d.jsxs)(x,{flexDirection:"column",marginLeft:2,children:[a?(0,d.jsx)(De,{turnIndex:e.turnIndex,fresh:t?t.fresh:s.map((r,i)=>({item:r,num:i+1,updated:!1})),headerStats:t?.headerStats??"",unchangedTotal:(t?.unchanged??[]).reduce((r,i)=>r+i.count,0)}):e.heading==="use-cases"?(0,d.jsx)(ve,{turn:e.turnIndex,items:s,expandedRef:null,compact:!0,total:s.length,numbers:u,marks:c}):(0,d.jsx)(Q,{heading:e.heading,turn:e.turnIndex,items:s,expandedRef:null,compact:!0,total:s.length,numbers:u,marks:c}),t&&t.unchanged.length>0&&(0,d.jsx)(o,{color:l.dim,children:` \u22EE unchanged: ${t.unchanged.map(r=>`${r.count} ${r.label}`).join(" \xB7 ")} \u2014 /view to browse`})]})}case"answer":return(0,d.jsx)(o,{color:l.dim,children:ct(e.receipt)});case"commit":return(0,d.jsxs)(x,{flexDirection:"column",children:[(0,d.jsx)(o,{color:e.ok?l.green:l.red,children:`${e.ok?"\u2714":"\u2717"} ${e.line}`}),(e.warnings??[]).map((t,s)=>(0,d.jsx)(o,{color:l.dim,children:` \u26A0 ${t}`},`w-${s}`))]});case"error":return(0,d.jsxs)(fe,{variant:"error",paddingX:1,children:[(0,d.jsx)(o,{color:l.red,children:e.title}),e.detail.map((t,s)=>(0,d.jsx)(o,{color:l.dim,children:t},`d-${s}`))]});case"interrupted":return(0,d.jsxs)(x,{flexDirection:"column",children:[(0,d.jsx)(o,{color:l.red,children:"interrupted \u2014 session not saved"}),e.detail?(0,d.jsx)(o,{color:l.dim,children:e.detail}):null]});case"pause":return(0,d.jsxs)(x,{flexDirection:"column",children:[(0,d.jsx)(o,{children:`paused: session ${e.sid} saved`}),e.expires_at?(0,d.jsx)(o,{color:l.dim,children:`expires: ${e.expires_at}`}):null,(0,d.jsx)(o,{children:`resume: ${e.resume}`}),e.messageForm?(0,d.jsx)(o,{children:`or say something on the way in: ${e.messageForm}`}):null]});case"summary":return(0,d.jsxs)(x,{flexDirection:"column",children:[(0,d.jsx)(o,{bold:!0,children:"session summary"}),e.lines.map((t,s)=>(0,d.jsx)(o,{children:` ${t}`},`s-${s}`))]})}}var W=I(Y(),1);var Oe=I(R(),1),Le=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],te="ctrl+t thinking \xB7 ctrl+c pause";function Ae(e,n){if(e.length<=n)return e;if(n<=1)return"\u2026";let t=Math.ceil((n-1)/2),s=Math.floor((n-1)/2);return`${e.slice(0,t)}\u2026${s>0?e.slice(-s):""}`}function _e({streaming:e,verb:n,subject:t,turn:s,pendingCount:u,lastActivity:c,workingLabel:a,creditsTotal:r}){let{stdout:i}=U(),p=i?.columns??80,[f,g]=(0,W.useState)(0),y=(0,W.useRef)(null);(0,W.useEffect)(()=>{e&&y.current===null&&(y.current=Date.now()),e||(y.current=null)},[e]),pe(()=>g(b=>b+1),e?1e3:null);let C=[];if(e){let b=y.current?Math.floor((Date.now()-y.current)/1e3):0;C.push(`${Le[f%Le.length]} ${b}s ${a??c??"waiting for model"}`)}C.push(n),s&&C.push(`turn ${s}`),r!==void 0&&C.push(`${r.toFixed(1)} cr`);let m=u?`[${u} pending]`:null,w=" \xB7 ",O=[...C,...m?[m]:[]].join(w).length,S,D=[...C,...t?[t]:[],...m?[m]:[],te].join(w);if(D.length<=p)S=D;else{let b=p-O-(t?w.length:0)-w.length-te.length;if(t&&b>=8)S=[...C,Ae(t,b),...m?[m]:[],te].join(w);else{let M=p-O-(t?w.length:0);S=[...C,...t&&M>=4?[Ae(t,M)]:[],...m?[m]:[]].join(w)}}return(0,Oe.jsx)(o,{color:l.dim,children:S})}var V=I(Y(),1);function ne({onToggleThinking:e,onCtrlC:n,explorer:t}){let u=(0,V.useRef)(null),c=(0,V.useRef)(""),a=()=>{u.current&&clearTimeout(u.current),u.current=null,c.current=""};return(0,V.useEffect)(()=>a,[]),me((r,i)=>{if(i.ctrl&&r==="t"){e();return}if(i.ctrl&&r==="c"){n();return}if(!i.ctrl&&r.includes("")){n();return}if(!i.ctrl&&r.includes("")){e();return}if(t&&t.isOpen()){let p=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{a(),t.onBack()},150)};if(u.current){if(i.upArrow||i.downArrow||i.return){a(),i.return?t.onEnter():t.onMove(i.upArrow?-1:1);return}if(c.current+=r,c.current==="["){p();return}let f=c.current;a();let g=/^\[([AB])/.exec(f);if(g){t.onMove(g[1]==="A"?-1:1);return}t.onBack();return}if(i.upArrow){t.onMove(-1);return}if(i.downArrow){t.onMove(1);return}if(i.return){t.onEnter();return}if(i.escape){c.current="",p();return}if(r.length>=2&&!i.ctrl&&!i.meta){t.onClose();return}return}}),null}var v=I(R(),1),re=(e,n)=>Math.max(0,Math.min(n,e));function X(e,n,t){switch(n.type){case"move":return{...e,cursor:re(e.cursor+n.delta,Math.max(0,t-1))};case"enter":return e.level==="list"?{...e,level:"detail"}:e;case"back":return e.level==="detail"?{...e,level:"list"}:null}}var Pe={"use-case":"use-cases",ac:"acs",scenario:"scenarios",test:"tests",gap:"gaps"};function qe(e,n){if(e.level==="detail")return{level:"detail",cursor:re(e.num-1,Math.max(0,n.entries.length-1))};if(e.section){let t=n.entries.findIndex(s=>Pe[s.kind]===e.section);if(t>=0)return{level:"list",cursor:t}}return{level:"list",cursor:0}}function lt(e){let n=[];for(let t of e.entries){let s=n.find(u=>u.kind===t.kind);s?s.entries.push(t):n.push({kind:t.kind,entries:[t]})}return n}var Me=3;function ut({items:e,cursor:n,verb:t}){let s=`view \xB7 ${t} so far \xB7 ${e.counts.map(c=>`${c.count} ${c.count===1?c.label.replace(/s$/,""):c.label}`).join(" \xB7 ")}`,u=e.entries[n];return(0,v.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:l.dim,paddingX:1,children:[(0,v.jsx)(o,{bold:!0,children:s}),lt(e).map(({kind:c,entries:a})=>{let r=u?.kind===c,i=r?a.findIndex(y=>y.ref===u.ref):-1,p=r?re(i-1,Math.max(0,a.length-Me)):0,f=a.slice(p,p+(r?Me:1)),g=a.length-f.length;return(0,v.jsxs)(x,{flexDirection:"column",children:[(0,v.jsx)(o,{color:l.dim,children:`${Pe[c]??P(c)} \xB7 ${a.length}`}),f.map(y=>{let C=r&&y.ref===u.ref,m=y.item.badge;return(0,v.jsxs)(o,{children:[(0,v.jsx)(o,{color:l.generateAccent,children:C?"\u203A ":" "}),(0,v.jsx)(o,{children:`${y.num} \xB7 ${y.item.title}`}),m?(0,v.jsx)(o,{color:l.dim,children:` \xB7 ${m}`}):null]},`${y.kind}:${y.ref}`)}),g>0&&(0,v.jsx)(o,{color:l.dim,children:` \u22EE ${g} more`})]},c)}),(0,v.jsx)(o,{color:l.dim,children:"\u2191\u2193 move \xB7 \u21B5 detail \xB7 esc back to chat"})]})}function mt({items:e,cursor:n}){let t=e.entries[n];if(!t)return(0,v.jsx)(o,{color:l.dim,children:"nothing to show"});let s=t.item;return(0,v.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:l.dim,paddingX:1,children:[(0,v.jsx)(o,{bold:!0,children:`view \xB7 ${t.kind} ${t.num} of ${e.entries.length}`}),(0,v.jsx)(o,{children:t.item.title}),s.badge?(0,v.jsx)(o,{color:l.dim,children:`kind: ${s.badge}`}):null,s.why?(0,v.jsx)(o,{color:l.dim,children:s.why}):null,(0,v.jsx)(Z,{item:t.item}),(0,v.jsx)(o,{color:l.dim,children:"view-only \u2014 approvals happen in chat"}),(0,v.jsx)(o,{color:l.dim,children:"\u2191\u2193 prev/next \xB7 esc back to list"})]})}function Ne({items:e,state:n,verb:t}){return n.level==="list"?(0,v.jsx)(ut,{items:e,cursor:n.cursor,verb:t}):(0,v.jsx)(mt,{items:e,cursor:n.cursor})}var Ue=[{name:"view",description:"browse the proposal set"},{name:"explain",description:"why a committed item exists"},{name:"pause",description:"save + exit (resumable)"},{name:"done",description:"finish the session"}],dt={"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 We(e){let n=(e??"").trim().toLowerCase();if(!n)return{level:"list"};if(/^\d+$/.test(n)){let s=parseInt(n,10);return s>=1?{level:"detail",num:s}:{error:"items are numbered from 1 \u2014 /view 1"}}let t=dt[n];return t?{level:"list",section:t}:{error:"try /view, /view <number>, or /view acs|scenarios|tests"}}var k=I(R(),1),pt=6,Ke=12;function Fe(e,n,t){let s=Math.max(20,n),u=[];for(let a of e.split(`
|
|
3
|
-
`)){if(a.length<=s){u.push(a);continue}let r="";for(let i of a.split(" "))r&&r.length+1+i.length>s?(u.push(r),r=i):r=r?`${r} ${i}`:i;u.push(r)}let c=Math.max(0,u.length-t);return{body:u.slice(-t).join(`
|
|
4
|
-
`),hidden:c}}var ft='chat with the agent \u2014 "/" for commands';function un({controller:e,verb:n="extract",onCtrlC:t}){let[,s]=(0,L.useState)(0),[u,c]=(0,L.useState)(!1),[a,r]=(0,L.useState)(null),[i,p]=(0,L.useState)(null),f=(0,L.useRef)(null),g=$=>{f.current=$,p($)},y=ge(),{stdout:C}=U(),m=C?.columns??80,w=(0,L.useRef)(0),q=(0,L.useRef)(0),O=(0,L.useRef)(null);O.current||(O.current=new de(null)),(0,L.useEffect)(()=>{let $=()=>{let h=e.state.ledger;for(let _=w.current;_<h.length;_++){let N=h[_],Ye=N.kind==="turn"?Re(e.state.turns,N.turnIndex):void 0;y.append((0,k.jsx)(Ee,{block:N,annotations:Ye},`lg-${_}`))}w.current=h.length};$();let T=e.subscribe(()=>{$();let h=e.state;f.current&&(h.pending||h.status==="pausing")&&(g(null),h.pending&&r("questions arrived \u2014 back to chat")),s(_=>_+1)});return s(h=>h+1),T},[e,y]);let{thinking:S,status:D,pending:b,confirm:M,ledger:oe,activeTurn:se,stream:z,notice:j}=e.state,G=S.activity[S.activity.length-1],ie=G&&G.status==="started"?G:null,ae=z!=null&&z.text.length>0,Ve=ae?`\u2237 thinking \xB7 ${S.thinkingLog.length} block${S.thinkingLog.length===1?"":"s"} \xB7 ctrl+t to inspect`:S.liveThinking.length>0?`\u273B ${Fe(S.liveThinking,m-4,1).body}`:D==="streaming"?"\u2237 thinking\u2026 (ctrl+t to show)":"\u2237 thinking complete (ctrl+t to view)",je=S.liveThinking.length>0||u&&S.thinkingLog.length>0,He=Fe(S.liveThinking||S.thinkingLog.map($=>$.text).join(`
|
|
5
|
-
`),m-6,Ke),ce=ae?z.text.split(`
|
|
6
|
-
`).slice(-pt):[];se&&(q.current=se.turnIndex);let Qe=b?b.resolution.filter($=>!$).length:0,le;for(let $=oe.length-1;$>=0;$--){let T=oe[$];if(T.kind==="banner"&&!T.text.startsWith("kane")){le=T.text;break}}let K=S.activity[S.activity.length-1],Xe=K?K.status==="decision"?K.label:$e({name:K.name,status:K.status}):void 0,ze=D==="streaming"&&!b,Ge=b?`answering ${Math.max(0,b.cursor)+1} of ${b.questions.length} \u2014 option number, label, or your own words`:ft,J=t??(()=>e.requestPause()),Je=$=>{let T=We($);if("error"in T){r(T.error);return}let h=F(e.state.turns);if(h.entries.length===0){r("nothing proposed yet \u2014 the first turn is still coming");return}if(T.level==="detail"&&T.num>h.entries.length){r(`no item ${T.num} \u2014 the set has ${h.entries.length} item${h.entries.length===1?"":"s"}`);return}g(qe(T,h))},ue=(0,k.jsx)(_e,{streaming:D==="streaming"||D==="working",verb:n,subject:le,turn:q.current||void 0,pendingCount:Qe,lastActivity:Xe,workingLabel:D==="working"?e.state.workingLabel:void 0,creditsTotal:e.state.credits?.total});if(i){let $=F(e.state.turns),T=$.entries.length;return(0,k.jsxs)(x,{flexDirection:"column",children:[(0,k.jsx)(ne,{onToggleThinking:()=>c(h=>!h),onCtrlC:J,explorer:{isOpen:()=>f.current!==null,onClose:()=>{g(null),r("closed the explorer \u2014 your text didn't send, retype to chat"),setTimeout(()=>s(h=>h+1),0)},onMove:h=>g(f.current&&X(f.current,{type:"move",delta:h},T)),onEnter:()=>g(f.current&&X(f.current,{type:"enter"},T)),onBack:()=>{g(f.current&&X(f.current,{type:"back"},T)),setTimeout(()=>s(h=>h+1),0)}}}),(0,k.jsx)(Ne,{items:$,state:i,verb:n}),(j??a)&&(j??a).split(`
|
|
7
|
-
`).map((h,_)=>(0,k.jsx)(o,{color:l.orange,children:h},`nt-${_}`)),ue]})}return(0,k.jsxs)(x,{flexDirection:"column",children:[(0,k.jsx)(ne,{onToggleThinking:()=>c($=>!$),onCtrlC:J}),je&&(u?(0,k.jsx)(ye,{thinking:He.body,expanded:!0,thinkingDone:D!=="streaming",maxLines:Ke+1}):(0,k.jsx)(o,{color:l.dim,children:Ve})),ie&&(0,k.jsx)(o,{dimColor:!0,children:`${H({name:ie.name,status:"started"})}\u2026`}),ce.length>0&&(0,k.jsx)(x,{flexDirection:"column",children:ce.map(($,T)=>(0,k.jsx)(o,{children:$},`st-${T}`))}),b&&(0,k.jsx)(we,{batch:b}),M&&(0,k.jsx)(o,{color:"yellow",children:M.prompt}),(j??a)&&(j??a).split(`
|
|
8
|
-
`).map(($,T)=>(0,k.jsx)(o,{color:l.orange,children:$},`nt-${T}`)),D==="pausing"?(0,k.jsx)(o,{color:l.dim,children:"pausing \u2014 saving session\u2026 (ctrl+c again = force quit)"}):(0,k.jsx)(he,{history:O.current,placeholder:Ge,accent:l.generateAccent,submitVerb:b?"answer":"send",submitEmpty:!!b,inert:ze,commands:Ue,footerBindings:[{keys:"\u21B5",label:b?"answer":"send"},{keys:"\u2191\u2193",label:"history"},{keys:"ctrl+t",label:"thinking"},{keys:"ctrl+c",label:"pause"}],onSubmit:$=>{let T=$.trim();if(!T){b&&e.submit("");return}if(r(null),T.startsWith("/")){let[h="",..._]=T.slice(1).split(/\s+/),N=_.join(" ");if(!h){r('type "/" then a command \u2014 /view, /explain, /pause, /done');return}switch(h.toLowerCase()){case"view":Je(N);return;case"explain":if(!N){r("usage: /explain <ref> \u2014 e.g. /explain guest-checkout");return}e.explainRef(N);return;case"pause":J();return;case"done":case"exit":e.completeSession();return;default:r(`unknown command "/${h}" \u2014 try /view, /explain, /pause, /done${b?`
|
|
9
|
-
to answer with a literal "/", quote it: "/api/v2"`:""}`);return}}e.submit(T)}}),ue]})}export{un as ChatSurface,Fe as tailVisualRows};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-K2MKBBI4.js";import"./chunk-RFHMDQXZ.js";import"./chunk-YSK535OI.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-M5JQXOCE.js";import"./chunk-YIOWO6WS.js";import"./chunk-QIE62H3J.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as EvidenceViewOffer};
|