@testmuai/kane-cli 0.6.7 → 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChatSurface-QLRMFZJG.js +8 -0
- package/dist/{ChromeProfilePicker-IW3K43VC.js → ChromeProfilePicker-FJOUNY2B.js} +1 -1
- package/dist/{CliFeedbackPrompt-ZJ4LZGPK.js → CliFeedbackPrompt-HC4NNBTK.js} +1 -1
- package/dist/{CliUploadProgress-SMPVN7Q6.js → CliUploadProgress-VIEZQNZ5.js} +1 -1
- package/dist/{ConfigView-RTAGKZH4.js → ConfigView-LK5F4F7W.js} +1 -1
- package/dist/EvidenceViewOffer-HZ4WZKGM.js +2 -0
- package/dist/{FolderPicker-QUY7LNVZ.js → FolderPicker-3S57MSC6.js} +1 -1
- package/dist/{HelpView-47J2NZWJ.js → HelpView-BQ3TS7WE.js} +1 -1
- package/dist/{InfoBox-G63WZAMH.js → InfoBox-4HVXV3TD.js} +1 -1
- package/dist/{LinksBox-2HIHDT5K.js → LinksBox-3B2KO5S4.js} +1 -1
- package/dist/{ProfilesView-TUXQXPXJ.js → ProfilesView-FLRMROUR.js} +1 -1
- package/dist/{ProjectPicker-VUABWG2P.js → ProjectPicker-R3KLRGHH.js} +1 -1
- package/dist/{SaveSessionPrompt-PNVGNLGO.js → SaveSessionPrompt-P7HSG7R7.js} +1 -1
- package/dist/SingleShotApp-ZBZY7KGR.js +2 -0
- package/dist/{SummaryBox-36MDDDYQ.js → SummaryBox-HCDIWKPS.js} +1 -1
- package/dist/TestMdRunView-GQP2QGFU.js +2 -0
- package/dist/{WhoamiView-LHU6RGIY.js → WhoamiView-ZD6FIBMK.js} +1 -1
- package/dist/{bind-E67W2DXG.js → bind-RSVQXQJT.js} +2 -2
- package/dist/{bridge-WVFTWHKP.js → bridge-D2HETW5M.js} +1 -1
- package/dist/{changelog-D4Y5QJIZ.js → changelog-QB7S4VV4.js} +1 -1
- package/dist/chat-committer-MWZ4JQMM.js +2 -0
- package/dist/chat-controller-YX5A7R52.js +2 -0
- package/dist/{chunk-3GOZ7R4G.js → chunk-27GF2OQ7.js} +3 -3
- package/dist/{chunk-GAD6IBZ6.js → chunk-35RV2AAV.js} +8 -8
- package/dist/{chunk-7ZMYAXES.js → chunk-3BIEIXJK.js} +1 -1
- package/dist/{chunk-UZWOHCFX.js → chunk-4GXOBABK.js} +1 -1
- package/dist/chunk-5VC7MBHR.js +2 -0
- package/dist/{chunk-XUHVQ5VL.js → chunk-66LXV7NN.js} +1 -1
- package/dist/{chunk-JR37W7IJ.js → chunk-6WHKJSMJ.js} +1 -1
- package/dist/{chunk-BBZBXSTP.js → chunk-A6TFZQV6.js} +1 -1
- package/dist/{chunk-AASBJJCU.js → chunk-ATO6NM45.js} +1 -1
- package/dist/{chunk-LVWB6TB2.js → chunk-AXJIXRYF.js} +1 -1
- package/dist/{chunk-RBLZUDMZ.js → chunk-B22NUHB2.js} +2 -2
- package/dist/chunk-BLHCGRSK.js +11 -0
- package/dist/chunk-BSFONZ2E.js +2 -0
- package/dist/{chunk-Z34XRBKQ.js → chunk-BUVRZXO3.js} +1 -1
- package/dist/{chunk-G5CYSC23.js → chunk-D4WLVWJQ.js} +1 -1
- package/dist/{chunk-3CY3DZDH.js → chunk-D5IZ77YG.js} +2 -2
- package/dist/{chunk-UQVKNUYO.js → chunk-ELN3EN4K.js} +1 -1
- package/dist/{chunk-QG6LJCZG.js → chunk-EQORZ6RT.js} +1 -1
- package/dist/chunk-EYZWG32F.js +13 -0
- package/dist/{chunk-TADJIOHV.js → chunk-F4FXE466.js} +1 -1
- package/dist/chunk-FCMLIK7P.js +2 -0
- package/dist/{chunk-TSWGQKUK.js → chunk-FCZ2YFD3.js} +2 -2
- package/dist/{chunk-QVJ7C4GW.js → chunk-GFKIE3AL.js} +1 -1
- package/dist/chunk-GG43HSU2.js +3 -0
- package/dist/{chunk-KVAALPTA.js → chunk-GO4CBUB6.js} +1 -1
- package/dist/{chunk-RWIHSR4H.js → chunk-HCWEZCKP.js} +1 -1
- package/dist/{chunk-SK2GVMTJ.js → chunk-IQFUBT6Z.js} +1 -1
- package/dist/{chunk-77PBBYRZ.js → chunk-JKHQBGFY.js} +2 -2
- package/dist/{chunk-3NR6OTHL.js → chunk-K4ERF7GT.js} +1 -1
- package/dist/chunk-K4LCN5X4.js +6 -0
- package/dist/{chunk-NEHF4C6X.js → chunk-K7P6VNLI.js} +1 -1
- package/dist/chunk-L3HG5ONB.js +4 -0
- package/dist/chunk-LEA6IHXC.js +2 -0
- package/dist/{chunk-RGQIBS32.js → chunk-MEHEGW3V.js} +1 -1
- package/dist/{chunk-WFQUDSKY.js → chunk-N5YIMTGV.js} +1 -1
- package/dist/{chunk-QYTMD6NM.js → chunk-NKCXCCPM.js} +1 -1
- package/dist/{chunk-DL5CXC64.js → chunk-NKUA3TSO.js} +1 -1
- package/dist/chunk-NVGTSXCJ.js +9 -0
- package/dist/{chunk-IX34JIXK.js → chunk-OYOTWI53.js} +1 -1
- package/dist/{chunk-X47VFBIV.js → chunk-PV4EDQY4.js} +1 -1
- package/dist/{chunk-NMKZHHB6.js → chunk-PXPXK4Q7.js} +1 -1
- package/dist/{chunk-EDM6YACR.js → chunk-Q3WHZ26R.js} +1 -1
- package/dist/{chunk-WJG4ZPUH.js → chunk-QFD6CB4P.js} +1 -1
- package/dist/chunk-QM4S2APK.js +2 -0
- package/dist/{chunk-OPDJD7WS.js → chunk-QOGQBVTP.js} +2 -2
- package/dist/{chunk-I37UOX73.js → chunk-QZ7DZXLQ.js} +3 -3
- package/dist/chunk-SHAA6FOD.js +11 -0
- package/dist/{chunk-6EC54ZHT.js → chunk-TAUSKB3O.js} +1 -1
- package/dist/{chunk-A2AZQ4PQ.js → chunk-TBXIOT6M.js} +1 -1
- package/dist/chunk-TFVMSEIA.js +2 -0
- package/dist/{chunk-5J3HQZNU.js → chunk-TRXNJZSL.js} +1 -1
- package/dist/{chunk-FYSWQ4K7.js → chunk-VRVSOGXH.js} +1 -1
- package/dist/{chunk-MTG2LRGV.js → chunk-VZHXNQDO.js} +1 -1
- package/dist/chunk-XSAZDIQV.js +347 -0
- package/dist/chunk-XWIN3S7O.js +4 -0
- package/dist/{chunk-YB54MHKU.js → chunk-YEMR62WY.js} +1 -1
- package/dist/{chunk-GLVDOR5G.js → chunk-YKZIACYJ.js} +1 -1
- package/dist/{chunk-TTJ4XMWP.js → chunk-YTK3IQUB.js} +1 -1
- package/dist/{config-BZ7C5NU5.js → config-JV7HNJ3I.js} +1 -1
- package/dist/cover-cmd-L2HSVDLH.js +2 -0
- package/dist/{credentials-BPJL6YIZ.js → credentials-TQW3TT2I.js} +1 -1
- package/dist/dossier-ZHSHATVU.js +3 -0
- package/dist/evidence-ZFYDHO73.js +2 -0
- package/dist/evolve-cmd-YGJECGND.js +2 -0
- package/dist/{explain-cmd-AG6ZDXV6.js → explain-cmd-327F6ESA.js} +1 -1
- package/dist/{explain-cmd-NZPC6537.js → explain-cmd-E366QTAD.js} +1 -1
- package/dist/extract-bind-7UZXDON6.js +5 -0
- package/dist/{extract-cmd-4PGUDJMU.js → extract-cmd-TQ2MYXOG.js} +1 -1
- package/dist/gaps-cmd-IAEXXESW.js +2 -0
- package/dist/{generate-headless-NZUDYIKJ.js → generate-headless-XXECVP6L.js} +2 -2
- package/dist/index.js +12 -12
- package/dist/ingest-CBQAXVH6.js +2 -0
- package/dist/ingest-cmd-JN6PLDE3.js +3 -0
- package/dist/interactive-bind-WA2YVAUW.js +7 -0
- package/dist/lifecycle-cmd-KZOC4WDW.js +2 -0
- package/dist/list-cmd-6X5U46RD.js +3 -0
- package/dist/{list-commands-55RCFEOL.js → list-commands-I577A5LK.js} +1 -1
- package/dist/logical-ids-RFGWBVML.js +2 -0
- package/dist/login-flow-OVEZXSMW.js +2 -0
- package/dist/{persist-recorded-session-HK7JUONC.js → persist-recorded-session-DT3K6ZYQ.js} +1 -1
- package/dist/pipeline-5N7HWGAL.js +2 -0
- package/dist/readmodel-V3DVL6NP.js +2 -0
- package/dist/reconcile-cmd-HYYH3SZS.js +2 -0
- package/dist/{recording-banner-5IYX2KBV.js → recording-banner-QI77ERTZ.js} +1 -1
- package/dist/{require-project-folder-J4Q4FRQ4.js → require-project-folder-2UAXXZA4.js} +1 -1
- package/dist/review-cmd-XVWPSWU2.js +4 -0
- package/dist/run-RYIYWV63.js +2 -0
- package/dist/run-VMKZDO7J.js +2 -0
- package/dist/{run-test-md-WN6BH3PC.js → run-test-md-DKRJOUFA.js} +2 -2
- package/dist/{skill-installer-4HYPUBNB.js → skill-installer-TK5REDD6.js} +1 -1
- package/dist/{spawner-VD6YFZ43.js → spawner-K7LWPNIC.js} +1 -1
- package/dist/tcg-generate-6EJLU5KX.js +2 -0
- package/dist/{testmd-actions-LT5FNIR6.js → testmd-actions-Q2XWL7P5.js} +1 -1
- package/dist/token-refresh-NQZJEUQE.js +2 -0
- package/dist/{validate-basic-XWGKC5VF.js → validate-basic-XEJGB4GN.js} +1 -1
- package/dist/{version-check-6FDTS6MK.js → version-check-IT7T5YKJ.js} +1 -1
- package/dist/{view-cmd-PCDG3FIC.js → view-cmd-G4PGJRQH.js} +3 -3
- package/dist/walk-session-HCTG4LN2.js +2 -0
- package/package.json +6 -6
- package/dist/ChatSurface-Y2M6HB2R.js +0 -8
- package/dist/EvidenceViewOffer-LHPIZUGQ.js +0 -2
- package/dist/SingleShotApp-BZV5CULT.js +0 -2
- package/dist/TestMdRunView-A655PMEY.js +0 -2
- package/dist/chat-committer-WOTCC7L3.js +0 -2
- package/dist/chat-controller-MONWZKS7.js +0 -4
- package/dist/chunk-64LC36AF.js +0 -2
- package/dist/chunk-6PS65QFF.js +0 -2
- package/dist/chunk-CIFVUX3B.js +0 -4
- package/dist/chunk-DCWCANNS.js +0 -6
- package/dist/chunk-GBBVP2JW.js +0 -2
- package/dist/chunk-IYTHPCQ2.js +0 -356
- package/dist/chunk-NMZATEKQ.js +0 -9
- package/dist/chunk-QHFUDBQH.js +0 -2
- package/dist/chunk-R7NNIQMH.js +0 -11
- package/dist/chunk-RE3BZVGE.js +0 -3
- package/dist/chunk-VLC24QVT.js +0 -2
- package/dist/chunk-Y6HPW2OQ.js +0 -2
- package/dist/chunk-YTZUYCFZ.js +0 -2
- package/dist/chunk-YZBLBPOE.js +0 -13
- package/dist/cover-cmd-DN5D6A3S.js +0 -2
- package/dist/evidence-E5B24ZO6.js +0 -2
- package/dist/evolve-cmd-V7H4PLCX.js +0 -2
- package/dist/extract-bind-3QBBCWYE.js +0 -5
- package/dist/gaps-cmd-42LPHWFP.js +0 -2
- package/dist/ingest-GOKIMEP4.js +0 -2
- package/dist/ingest-cmd-BTYHVJ33.js +0 -3
- package/dist/interactive-bind-TKRWAPJU.js +0 -7
- package/dist/lifecycle-cmd-E6AXODQD.js +0 -2
- package/dist/list-cmd-RJVLH2GR.js +0 -3
- package/dist/logical-ids-QZQRQ3TV.js +0 -2
- package/dist/login-flow-WNIHDQXF.js +0 -2
- package/dist/pipeline-FTLXJQRT.js +0 -2
- package/dist/readmodel-KTNI6QDC.js +0 -2
- package/dist/reconcile-cmd-5XC4AUSJ.js +0 -2
- package/dist/review-cmd-XB2DCTMZ.js +0 -4
- package/dist/run-2RFR2ASQ.js +0 -2
- package/dist/run-3ZYJQBBC.js +0 -2
- package/dist/tcg-generate-77QKMB63.js +0 -2
- package/dist/token-refresh-PCOAZBKK.js +0 -2
- package/dist/walk-session-YS62CWX5.js +0 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
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-
|
|
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-NKCXCCPM.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-PXPXK4Q7.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-GLS46X7N.js";import"./chunk-2YQ6TW77.js";import"./chunk-WAOCHXJ5.js";import"./chunk-EYZWG32F.js";import"./chunk-FCMLIK7P.js";import"./chunk-CJJXT5DO.js";import"./chunk-QM4S2APK.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-K4ERF7GT.js";import"./chunk-PXPXK4Q7.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-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{a as openGraph,b as staleForEvolve};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as Z,b as J,c as Q,d as X}from"./chunk-QZ7DZXLQ.js";import{a as q,c as z,d as fe,f as G}from"./chunk-QOGQBVTP.js";import{a as P,b as de,d as ue}from"./chunk-GRB66C5S.js";import"./chunk-3C5GMAM4.js";import{a as H}from"./chunk-TFVMSEIA.js";import{a as oe,b as ae}from"./chunk-4GXOBABK.js";import{a as K,b as V,c as L,d as j,e as le,g as x,h as N}from"./chunk-K5JGCJ2K.js";import{a as ce}from"./chunk-JFAFKHDX.js";import"./chunk-DNNZ353O.js";import"./chunk-RN4OSVTG.js";import"./chunk-QM4S2APK.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import{a as O}from"./chunk-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import{c as F}from"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{existsSync as we,statSync as ke}from"fs";import{basename as Y,resolve as ge}from"path";var me=new Set(["interactive","agent","ci","override"]);function ye(e,n){if(e.mode!==void 0&&!me.has(e.mode))return{error:`--mode must be interactive | agent | ci | override, got '${e.mode}'`};let t=e.mode,r="reconcile without a TTY needs an explicit mode \u2014 pass --mode agent|ci|override, or --plan for a preview";return t==="interactive"&&!n?{error:r}:t||(n?"interactive":e.plan?"override":{error:r})}function Re(e,n,t,r){let i=ge(n,t);if(!we(i)||!ke(i).isFile())return{error:`--from '${t}' is not a file \u2014 pass the changed source document`};let a=oe(i);if(!a.ok)return{error:`--from '${t}' is not an ingestable document \u2014 allowed: ${a.allowlist.join(", ")}`};let f=O(e);if(!f.heads.has(r))return{error:`unknown source '${r}' \u2014 see \`kane-cli context list --type source\``};if(f.heads.get(r)==null)return{error:`source '${r}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let p=null;try{p=ae(i)}catch{}return p!==null&&p!==r&&f.heads.get(p)!=null?{error:`'${Y(i)}' already backs live source '${p}' \u2014 did you mean --source-id ${p}? To truly move these bytes under '${r}', retire '${p}' first`}:{sourceId:r,filePath:i}}function I(e){return e==null?"(none)":e.slice(0,19)}function T(e,n,t,r=!1){if(e.out(`reconcile ${n.source_id}: head ${n.head.status} \u2014 ${I(n.head.before)} \u2192 ${I(n.head.after)}`),r||(e.out(`note: ${n.note}`),e.out(`skipped arms: ${n.skipped_arms}`)),n.changed&&e.out(n.held?`extract ran in override mode; ${t?.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; ${t?.defaultsTaken??0} default(s) auto-taken; matched-but-changed proposals auto-committed as edits`),r){let i=n.changeset??[],a=(p,h)=>{let k=i.filter(s=>s.kind===p).length;return k>0?`${k} ${h}`:null},f=[a("ADD","add"),a("MODIFY","modify"),a("ARCHIVE","archive")].filter(Boolean);n.changed&&e.out(`changeset: ${i.length} item(s)${f.length?` \u2014 ${f.join(" \xB7 ")}`:""}`),e.out(`plan: ${n.rows.length} row(s) \u2014 each gets a card below`);return}if(n.changed){let i=n.changeset??[];e.out(`changeset: ${i.length} item(s)`);for(let a of i)if(a.kind==="MODIFY")e.out(` [MODIFY] ${H(a.ref)} \u2014 ${a.summary} (${I(a.old_cid)} \u2192 ${a.new_cid===null?"(staged)":I(a.new_cid)})`);else if(a.kind==="ADD")e.out(` [ADD] ${H(a.ref)}`);else{e.out(` [ARCHIVE] ${H(a.ref)} \u2014 ${a.why}`);let f=ee(a.impact,"retiring drops");f&&e.out(` ${f}`)}}e.out(`plan: ${n.rows.length} row(s)`);for(let i of n.rows){e.out(` [${i.kind}] ${H(i.ref)} \u2014 ${i.reason}`);let a=ee(i.impact,"approving marks");a&&e.out(` ${a}`),e.out(` provenance: ${i.provenance}`),e.out(` action: ${i.action}`)}}function ee(e,n){if(!e||e.stale_refs.length===0)return null;let t=e.direct_refs??[];return`impact: ${n} ${e.stale_refs.length} item(s) stale`+(t.length>0?` \u2014 ${t.length} directly touched: ${t.join(", ")}`:"")}function E(e){return e==="interactive"?"override":e}async function A(e,n,t,r,i,a,f=[],p="override",h,k,s,d,v){let u;try{u=N(e)}catch($){return P(r,$ instanceof Error?$.message:String($)),1}try{if(!t){let{runWalkSession:$}=await import("./walk-session-HCTG4LN2.js");return await $({dir:e,rows:n,archive:f,held:h??null,childMode:p,runDesign:d??null,mark:a,markA:s,...k?{archiveState:k}:{},signals:y=>C(e,y.ref,y.verdict,y.reason),...v?{script:v}:{}})}return await _e(e,n,t,r,i,a,f,p,h,k)}finally{u()}}var M=e=>`${e} high-risk item(s) need a human \u2014 ci mode won't guess. Walk interactively or use --mode agent.`;function W(e,n,t){let r=n.rows;e({type:"reconcile_plan",source_id:n.source_id,plan_path:t,rows:r.map(i=>({kind:i.kind,ref:i.ref,why:i.reason})),archive:n.changeset.filter(i=>i.kind==="ARCHIVE").map(i=>({ref:i.ref,why:i.why}))})}function te(e={}){return{type:"reconcile_summary",applied:0,skipped:0,deferred:0,plan_only:0,failed:0,paused:0,stale_created:0,...e}}var ne=te();async function U(e,n,t,r,i,a,f,p,h){W(i,n,t);let k=n.changeset.filter(v=>v.kind==="ARCHIVE"&&h?.[v.ref]===void 0),s=n.rows,d;try{d=N(e)}catch(v){return i({type:"error",message:v instanceof Error?v.message:String(v)}),i(te()),2}try{return await $e(e,n,t,r,i,a,f,s,k,p)}finally{d()}}async function $e(e,n,t,r,i,a,f,p,h,k){let s=0,d=0,v=0,u=0,$=0,y=0,c=0,R=new Set,w=(l,o)=>{try{k?.(l,o)}catch{}};for(let[l,o]of p.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){d++,g("skipped");continue}if(o.kind==="REMOVE"){$++,g("plan-only");continue}if(o.held_ref&&n.held){let m=new Set;if(o.kind==="MODIFY"&&o.impact){let S=O(e);for(let ie of o.impact.stale_refs){let se=S.resolve(ie);se&&S.stale(se.tip)==="fresh"&&m.add(ie)}}let D=Z(e,n.held,o.held_ref,re);if(!D.ok){v++,c===0&&(c=1),g("failed",1,D.message);continue}if(D.kind==="ADD"){let S=await r(D.ref,{yes:!0,mode:f});if(S!==0){S===3?(u++,c===0&&(c=3),g("paused",3)):(v++,c===0&&(c=1),g("failed",S));continue}}s++,D.kind!=="ADD"&&o.impact&&(y+=m.size),w(l,"approved"),C(e,o.ref,D.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve"),g("applied");continue}let _=q(O(e),o.ref);if(!_.ok){d++,g("skipped");continue}let b=_.target;if(R.has(b.ucTip)){d++,g("skipped");continue}if(o.kind==="ADD"){let m=await r(b.seamRef,{yes:!0,mode:f});if(m===3){u++,c===0&&(c=3),g("paused",3);continue}if(m!==0){v++,c===0&&(c=1),g("failed",m);continue}R.add(b.ucTip),s++,w(l,"approved"),C(e,o.ref,"gap-resolved-create"),g("applied")}else{let m=await z(e,b,{yes:!0,mode:f},a,r,"batch");m.outcome==="evolved"?(R.add(b.ucTip),s++,w(l,"approved"),C(e,o.ref,"gap-resolved-evolve"),g("applied")):m.outcome==="paused"?(u++,c===0&&(c=m.code),g("paused",m.code)):m.outcome==="failed"?(v++,c===0&&(c=1),g("failed",m.code)):(d++,g("skipped"))}}return h.length>0&&(i({type:"reconcile_paused",plan_path:t,pending:h.map(l=>({ref:l.ref,why:l.why}))}),u+=h.length,c===0&&(c=3)),i(te({applied:s,skipped:d,plan_only:$,failed:v,paused:u,stale_created:y})),c}var re={kind:"human",id:process.env.USER??"operator"};function C(e,n,t,r){ce(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:n,verdict:t,polarity:"preference",by:re,target:n,...r!==void 0?{reason:r}:{}})}async function _e(e,n,t,r,i,a,f=[],p="override",h,k){let s=0,d=0,v=0,u=0,$=0,y=0,c=0,R=new Set;for(let[w,l]of n.entries()){if(l.applied){r.out(`skipped ${l.ref} \u2014 already applied (${l.applied.outcome} at ${l.applied.at})`),d++;continue}let o=m=>{try{a?.(w,m)}catch(D){P(r,`could not record applied state for ${l.ref}: ${D instanceof Error?D.message:String(D)}`)}};if(l.kind==="REMOVE"){r.out(`REMOVE ${l.ref} \u2014 plan-only in this release (not executed)`),u++;continue}if(l.held_ref&&h){let m=Z(e,h,l.held_ref,re);if(!m.ok){P(r,`held ${l.ref}: ${m.message}`),$++,c===0&&(c=1);continue}if(r.out(`committed ${m.ref} (${l.kind==="ADD"?"minted":"updated \u2014 old\u2192new redirect"})`),m.kind==="ADD"){let D=await i(m.ref,{yes:t,mode:p});if(D===3){r.out(`design session for ${m.ref} paused \u2014 resume with "kane-cli design tests --resume"`),y++,c===0&&(c=3),o("approved");continue}if(D!==0){P(r,`design run for ${m.ref} ended with exit code ${D}`),$++,c===0&&(c=1),o("approved");continue}}s++,o("approved"),C(e,l.ref,l.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve");continue}let g=O(e),_=q(g,l.ref);if(!_.ok){r.out(`skipped ${l.ref} \u2014 ${_.message}`),d++;continue}let b=_.target;if(R.has(b.ucTip)){r.out(`skipped ${l.ref} \u2014 use-case ${b.display} already handled in this walk`),d++;continue}if(l.kind==="ADD"){let m=await i(b.seamRef,{yes:t,mode:p});if(m===3){r.out(`design session for ${b.display} paused \u2014 resume with "kane-cli design tests --resume"; this row lands when that session completes`),y++,c===0&&(c=3);continue}if(m!==0){P(r,`design run for ${b.display} ended with exit code ${m}`),$++,c===0&&(c=1);continue}R.add(b.ucTip),s++,o("approved"),C(e,l.ref,"gap-resolved-create")}else{let m=await z(e,b,{yes:!0,mode:p},r,i,"batch");m.outcome==="evolved"?(R.add(b.ucTip),s++,o("approved"),C(e,l.ref,"gap-resolved-evolve")):m.outcome==="paused"?(y++,c===0&&(c=m.code)):m.outcome==="failed"?($++,c===0&&(c=m.code)):d++}}for(let w of f)if(w.kind==="ARCHIVE"&&k?.[w.ref]===void 0){r.out(`[ARCHIVE] ${w.ref} \u2014 ${w.why}`);{let l=ee(w.impact,"retiring drops");l&&r.out(` ${l}`)}r.out(" plan-only \u2014 retire belongs to the interactive session (never headless)"),u++}return r.out(`reconcile walk: ${s} applied, ${d} skipped, ${v} deferred, ${u} plan-only`+($>0?`, ${$} failed`:"")+(y>0?`, ${y} paused`:"")),c}async function he(e,n,t,r,i,a=!1,f=!1){let p=i.seams??{reingest:Q(e,t),reextract:X(e,{stage:a})},h=null,k={reingest:p.reingest,reextract:async d=>h=await p.reextract(d)},s;try{r.out(`reconciling ${n}: re-reading the source and comparing against the graph\u2026`),s=await(i.buildPlan??J)(e,n,k)}catch(d){return P(r,`reconcile failed: ${d instanceof Error?d.message:String(d)}`),null}return s.changed&&T(r,s,h,f),s}async function Pe(e,n,t,r,i){let a=V(e,n);if("error"in a)return P(r,a.error),2;let{plan:f,path:p}=a,h=t==="override"||t==="ci";if(n===void 0&&t==="interactive"&&r.isTTY&&!await r.confirm(`apply plan ${Y(p)} for ${f.source_id} (created ${f.created})?`))return r.out(`not applying ${Y(p)}`),0;let k=i.runDesignForUc??G,s=i.runDesignForUc??null,d=i.sessionScript,v=(R,w)=>x(p,R,w),u=(R,w)=>j(p,R,w),$=F(e);if($===f.head_pin){if(t==="agent"){let w=i.emitEvent??(()=>{});return U(e,B(f),p,k,w,r,E(t),v,f.archive_state)}let R=L(f);return t==="ci"&&R.length>0?(P(r,M(R.length)),2):(r.out(`applying stored plan ${Y(p)} for ${f.source_id} (${f.rows.length} row(s))`),A(e,f.rows,h,r,k,v,f.changeset??[],E(t),f.held,f.archive_state,u,s,d))}if(r.out(`graph moved since this plan (${I(f.head_pin)} \u2192 ${I($)}) \u2014 recomputing`),f.held)return ve(e,f,r,i,t,k,!1);let y=await he(e,f.source_id,f.backing_path,r,i,!1,t==="interactive");if(!y)return 1;if(!y.changed)return T(r,y,null),0;if(t==="agent"){let R=i.emitEvent??(()=>{});return U(e,y,null,k,R,r,E(t))}let c=y.changeset.filter(R=>R.kind==="ARCHIVE");return t==="ci"&&c.length>0?(P(r,M(c.length)),2):A(e,y.rows,h,r,k,void 0,y.changeset,E(t),y.held,void 0,void 0,s,d)}function B(e,n=!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:n?e.rows.filter(t=>t.applied===void 0):e.rows,...e.held?{held:e.held}:{}}}async function be(e,n,t,r,i,a,f){let p=r.runDesignForUc??null,h=r.sessionScript,k=le(e,n);if(k===null)return null;if("error"in k)return P(t,k.error),2;let{plan:s,path:d}=k,v=s.rows.filter(c=>c.applied===void 0),u=L(s),$=r.emitEvent??(()=>{});if(v.length===0&&u.length===0){t.out(`already reconciled \u2014 plan ${s.created} applied ${s.rows.length} row(s)`);let c=fe(O(e)).staleCount;return c>0&&t.out(`${c} item(s) still stale \u2014 kane-cli maintain evolve --from-stale`),i==="agent"&&(W($,B(s),d),$({...ne})),0}let y=F(e);return y!==s.head_pin?(t.out(`plan ${s.created} superseded \u2014 graph moved (${I(s.head_pin)} \u2192 ${I(y)}); recomputing`),ve(e,s,t,r,i,a,f)):(t.out(`resuming plan ${s.created} \u2014 ${v.length} pending row(s)${u.length>0?`, ${u.length} undecided archive item(s)`:""}`),f?(T(t,B(s),null),t.out(`plan stored: ${d}`),0):i==="agent"?U(e,B(s),d,a,$,t,E(i),(c,R)=>x(d,c,R),s.archive_state):i==="ci"&&u.length>0?(P(t,M(u.length)),2):A(e,s.rows,i==="override"||i==="ci",t,a,(c,R)=>x(d,c,R),s.changeset??[],E(i),s.held,s.archive_state,(c,R)=>j(d,c,R),p,h))}async function ve(e,n,t,r,i,a,f){let p=r.runDesignForUc??null,h=r.sessionScript,k;if(n.held){let l=O(e),o=new Set(n.rows.filter(_=>_.held_ref!==void 0&&_.applied!==void 0).map(_=>_.held_ref)),g=[];for(let _ of n.held.rows){if(o.has(_.temp_ref))continue;if(!_.matched_cid){g.push(_);continue}let b=l.tipOf(_.matched_cid);if(l.superseded.get(b)===null){t.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}}})}k={source_id:n.held.source_id,rows:g}}let s=r.seams??{reingest:Q(e,n.backing_path),reextract:X(e,{stage:k!==void 0})},d;try{d=await(r.buildPlan??J)(e,n.source_id,s,{resumeHeld:k})}catch(l){return P(t,`reconcile failed: ${l instanceof Error?l.message:String(l)}`),1}T(t,d,null,i==="interactive"&&!f);let v=F(e),u=null;if(v!=null){let l={},o=new Set(d.changeset.filter(g=>g.kind==="ARCHIVE").map(g=>g.ref));for(let[g,_]of Object.entries(n.archive_state??{}))o.has(g)&&(l[g]=_);u=K(e,{version:2,source_id:d.source_id,backing_path:n.backing_path,head_pin:v,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:d.skipped_arms,note:d.note,changeset:d.changeset,rows:d.rows,...d.held?{held:d.held}:{},...Object.keys(l).length>0?{archive_state:l}:{}}),t.out(`plan stored: ${u}`)}if(f)return 0;let $=r.emitEvent??(()=>{}),y=u?V(e,u).plan.archive_state:void 0,c=u?(l,o)=>x(u,l,o):void 0,R=u?(l,o)=>j(u,l,o):void 0;if(i==="agent")return U(e,d,u,a,$,t,E(i),c,y);let w=d.changeset.filter(l=>l.kind==="ARCHIVE"&&y?.[l.ref]===void 0);return i==="ci"&&w.length>0?(P(t,M(w.length)),2):A(e,d.rows,i==="override"||i==="ci",t,a,c,d.changeset,E(i),d.held,y,R,p,h)}async function pe(e,n,t={},r=process.cwd()){let i=e.apply!==void 0&&e.apply!==!1,a=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&i)return P(n,"pass --plan OR --apply, not both"),2;if((e.from!==void 0||!i)&&(!e.from||!e.sourceId))return P(n,"reconcile needs --from <file> AND --source-id <id> \u2014 see `kane-cli context list --type source` for ids"),2;if(e.from&&a!==void 0)return P(n,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let p=de(r,n);if(!p)return 2;if(e.mode!==void 0&&!me.has(e.mode))return P(n,`--mode must be interactive | agent | ci | override, got '${e.mode}'`),2;let h=e.mode==="agent"||e.mode==="ci"||e.mode==="override";if(i&&!h&&!n.isTTY)return P(n,"refusing to apply without a TTY to confirm \u2014 pass --mode override|ci"),2;let k=!e.plan,s="override";if(e.from){let o=ye(e,n.isTTY);if(typeof o=="object")return P(n,o.error),2;s=o}let d=s==="override"||s==="ci";if(i&&!e.from){let o=e.mode??"interactive";return Pe(p,a===void 0?void 0:ge(r,a),o,n,t)}let v=Re(p,r,e.from,e.sourceId);if("error"in v)return P(n,v.error),2;let u=await he(p,v.sourceId,v.filePath,n,t,!!e.plan||s==="interactive",s==="interactive"&&!e.plan);if(!u)return 1;let $=t.runDesignForUc??G,y=t.runDesignForUc??null,c=t.sessionScript;if(!u.changed){let o=await be(p,v.sourceId,n,t,s,$,!!e.plan);if(o!==null)return o;if(T(n,u,null),s==="agent"){let g=t.emitEvent??(()=>{});W(g,u,null),g({...ne})}return 0}let R=F(p),w=null;if(R!=null?w=K(p,{version:2,source_id:u.source_id,backing_path:v.filePath,head_pin:R,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}:{}}):P(n,"no chain head after extract \u2014 plan not stored"),s==="agent"){let o=t.emitEvent??(()=>{});if(!k)return W(o,u,w),o({...ne}),0;let g=w?(_,b)=>x(w,_,b):void 0;return U(p,u,w,$,o,n,E(s),g)}if(!k)return w&&n.out(`plan stored: ${w}`),0;let l=u.changeset.filter(o=>o.kind==="ARCHIVE");if(s==="ci"&&l.length>0)return w&&n.out(`plan stored: ${w}`),P(n,M(l.length)),2;if(w){n.out(`plan stored: ${w}`);let o=w;return A(p,De(p,o)??u.rows,d,n,$,(g,_)=>x(o,g,_),u.changeset,E(s),u.held,void 0,void 0,y,c)}return A(p,u.rows,d,n,$,void 0,u.changeset,E(s),u.held,void 0,void 0,y,c)}function De(e,n){let t=V(e,n);return"error"in t?null:t.plan.rows}async function je(e,n={},t,r=process.cwd()){if(e.mode==="agent"){let{makeHeadlessIO:i}=await import("./headless-io-PWW6YKH2.js"),a=t?i("ndjson","reconcile",t):i("ndjson","reconcile"),f={out:a.out,err:h=>a.event({type:"error",message:h}),isTTY:!1,confirm:async()=>!1,ask:async()=>""},p=2;try{p=await pe(e,f,{...n,emitEvent:h=>a.event(h)},r)}catch(h){a.event({type:"error",message:h instanceof Error?h.message:String(h)})}return a.done(p)}return pe(e,ue(),n,r)}export{E as childModeFor,je as reconcileCommand,ye as resolveReconcileMode,pe as runReconcileCommand,Re 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-4HVXV3TD.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-YTK3IQUB.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-K4ERF7GT.js";import"./chunk-VE3SUJMA.js";import"./chunk-PXPXK4Q7.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};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{b as j}from"./chunk-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as _}from"./chunk-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import{g as b}from"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import{b as V}from"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{readFileSync as E}from"fs";var O=new Set(["derived","skipped","archived","drift"]),q={kind:"human",id:process.env.USER??"operator"};function R(d,r){return d.nameOf.get(r)??r.slice(0,19)}function N(d,r){let n=d.getNode(r)?.content??{},a=d.derivesInto(r)[0]?.props.anchor;return{cid:r,uc:{temp_ref:r,title:String(n.title??n.text??""),summary:n.summary!==void 0?String(n.summary):void 0,risk:String(n.risk??"med"),cite:{anchor:typeof a=="string"?a:"\u2014",quote:""},depends_on_hint:[],matches_existing:null}}}function T(d,r){let n=new Set,{records:a}=V(d);for(let s of a){if(s.proposal_id==null)continue;let u=new Set(s.review.map(e=>e.id));for(let e of s.nodes)u.has(e.cid)||n.add(e.cid)}for(let s of[...n])(r.trust.get(s)!=="derived"||r.superseded.has(s))&&n.delete(s);return n}var x=new Set(["approved","edited","rejected","skipped","supersede"]);function C(d){let r;try{r=JSON.parse(d)}catch(s){return{errors:[`not valid JSON: ${s instanceof Error?s.message:String(s)}`]}}if(!Array.isArray(r))return{errors:['expected a top-level array of {"ref", "resolution", ...} entries']};let n=[],a=[];return r.forEach((s,u)=>{if(s==null||typeof s!="object"||Array.isArray(s)){n.push(`[${u}]: not an object`);return}let e=s;(typeof e.ref!="string"||!e.ref.trim())&&n.push(`[${u}]: "ref" (slug or cid) is required`),(typeof e.resolution!="string"||!x.has(e.resolution))&&n.push(`[${u}]: "resolution" must be one of approved | edited | rejected | skipped | supersede`),e.resolution==="supersede"&&(typeof e.supersede_target!="string"||!e.supersede_target.trim())&&n.push(`[${u}]: resolution "supersede" requires "supersede_target" (slug or cid)`),e.edit!==void 0&&(e.edit==null||typeof e.edit!="object"||Array.isArray(e.edit))&&n.push(`[${u}]: "edit" must be an object ({title?, summary?, risk?})`),n.length===0&&a.push(e)}),n.length>0?{errors:n}:{entries:a}}async function I(d,r,n,a=process.cwd()){let s=d.queue??"derived";if(!O.has(s))return r.out(`unknown queue ${s} \u2014 one of: derived | skipped | archived | drift`),2;let u=j(a,r);if(!u)return 2;let e=_(u);if(d.verdicts){let i=t=>(r.err??r.out)(t),o;try{o=E(d.verdicts,"utf8")}catch{return i(`error: cannot read verdicts file ${d.verdicts}`),2}let l=C(o);if("errors"in l){for(let t of l.errors)i(`error: --verdicts ${d.verdicts}: ${t}`);return 2}let c=new Set([...e.trust.entries()].filter(([t,p])=>(p==="derived"||p==="archived")&&!e.superseded.has(t)).map(([t])=>t)),f=new Map,y=[];for(let t of l.entries){let p=e.resolve(t.ref),m=p&&!e.superseded.has(p.tip)?p.tip:null;if(!m){y.push(`${t.ref}: names nothing in the graph`);continue}if(!c.has(m)){y.push(`${t.ref}: not in a review queue (trust: ${e.trust.get(m)??"?"})`);continue}if(f.has(m)){y.push(`${t.ref}: duplicate \u2014 an earlier entry already resolves to this node (${R(e,m)})`);continue}f.set(m,{resolution:t.resolution,...t.reason?{reason:t.reason}:{},...t.edit?{edit:t.edit}:{},...t.supersede_target?{supersedeTarget:t.supersede_target}:{}})}if(y.length>0){for(let t of y)i(`error: --verdicts: ${t}`);return i("error: nothing committed (the verdicts file is atomic \u2014 fix every offender and re-run)"),2}let k=b({contextDir:u,graph:e,verdicts:f,by:q});if(k.errors){if(k.errors[0]?.code==="NO_VERDICTS")return i("nothing changed \u2014 every item was skipped"),0;for(let t of k.errors)i(`${t.code}: ${t.detail}`);return 1}let S=new Map;for(let t of f.values())S.set(t.resolution,(S.get(t.resolution)??0)+1);if(d.json)for(let[t,p]of f.entries())r.out(JSON.stringify({ref:R(e,t),cid:t,resolution:p.resolution}));else{let t=[...S.entries()].map(([p,m])=>`${m} ${p}`).join(", ");r.out(`review: committed record ${k.record.seq} \u2014 ${t}`)}return 0}if(s==="drift"){let i=e.staleList().filter(({state:o})=>o!=="superseded").map(({cid:o,state:l})=>({ref:R(e,o),cid:o,state:l,title:String(e.getNode(o)?.content.title??e.getNode(o)?.content.source_id??""),pinned_sources:[...new Set(e.derivesInto(o).map(c=>String(c.props.source_id)))]}));if(d.json){for(let o of i)r.out(JSON.stringify(o));return 0}if(i.length===0)return r.out("drift queue is empty \u2014 every node's evidence matches the current source snapshots"),0;r.out(`${i.length} node(s) with drifting evidence (re-extract the source to re-bless):`);for(let o of i)r.out(` [${o.state}] ${o.ref} \xB7 ${o.title} \xB7 sources: ${o.pinned_sources.join(", ")||"\u2014"}`);return 0}if(!r.isTTY)return r.out("review: verdict queues need a TTY (drift listing works anywhere, or pass --verdicts <file.json>)"),2;let g,h;if(s==="archived")g=[...e.trust.entries()].filter(([i,o])=>o==="archived"&&!e.superseded.has(i)).map(([i])=>N(e,i)),h="skipped";else{let i=T(u,e),o=[...e.trust.entries()].filter(([c,f])=>f==="derived"&&!e.superseded.has(c)).map(([c])=>c),l=s==="skipped"?o.filter(c=>i.has(c)):o;l.sort((c,f)=>Number(i.has(f))-Number(i.has(c))),g=l.map(c=>N(e,c)),h="skipped"}if(g.length===0)return r.out(`${s} queue is empty`),0;r.out(`${g.length} node(s) in the ${s} queue \u2014 approve promotes, reject ${s==="archived"?"re-archives":"archives"}, edit mints a new version, skip leaves it for later`);let v=await n(g,e,h),w=b({contextDir:u,graph:e,verdicts:v,by:q});if(w.errors){if(w.errors[0]?.code==="NO_VERDICTS")return r.out("nothing changed \u2014 every item was skipped"),0;for(let i of w.errors)r.out(`${i.code}: ${i.detail}`);return 1}let $=w.record;return r.out(`committed record ${$.seq}: ${$.review.length} review fact(s), ${$.supersessions.length} supersession(s), ${$.nodes.length} new version(s)`),0}async function P(d,r,n){let[{render:a},s,{ReviewChecklist:u}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),e=s.default??s;return new Promise(g=>{let h=a(e.createElement(u,{items:d.map(v=>({uc:v.uc})),defaultResolution:n,onSubmit:v=>{h.unmount(),g(v)}}))})}async function D(d){let{bothTTY:r}=await import("./headless-io-PWW6YKH2.js");return I(d,{out:n=>process.stdout.write(n+`
|
|
3
|
+
`),err:n=>process.stderr.write(n+`
|
|
4
|
+
`),confirm:async()=>!1,isTTY:r()},P)}export{C as parseVerdictsFile,D as reviewCommand,I as runReviewCommand};
|
|
@@ -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-35RV2AAV.js";import"./chunk-K5JGCJ2K.js";import{f as a}from"./chunk-NVGTSXCJ.js";import"./chunk-FXPPQL4D.js";import"./chunk-GG43HSU2.js";import"./chunk-JFAFKHDX.js";import"./chunk-OSALXGD4.js";import"./chunk-DNNZ353O.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-NVGBE2DR.js";import"./chunk-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-PXPXK4Q7.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-XSAZDIQV.js";import"./chunk-SHAA6FOD.js";import"./chunk-KHU7C6EE.js";import"./chunk-3C5GMAM4.js";import"./chunk-NVGTSXCJ.js";import"./chunk-FXPPQL4D.js";import"./chunk-GG43HSU2.js";import"./chunk-JFAFKHDX.js";import"./chunk-OSALXGD4.js";import"./chunk-DNNZ353O.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-ZPDM6FO7.js";import"./chunk-NVGBE2DR.js";import"./chunk-L5LI2JF4.js";import"./chunk-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-PXPXK4Q7.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-A6TFZQV6.js";import{E as M,F as P,G as K,H,I as U}from"./chunk-D5IZ77YG.js";import"./chunk-GLS46X7N.js";import{a as _,b as E}from"./chunk-FCZ2YFD3.js";import{a as h,b as k}from"./chunk-YEMR62WY.js";import"./chunk-2YQ6TW77.js";import"./chunk-RHNKYNNZ.js";import{s as L}from"./chunk-RKWJG3WW.js";import{c as R}from"./chunk-IQFUBT6Z.js";import"./chunk-TAUSKB3O.js";import"./chunk-K7P6VNLI.js";import{a as x}from"./chunk-NKCXCCPM.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-GFKIE3AL.js";import"./chunk-NKUA3TSO.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-EYZWG32F.js";import"./chunk-FCMLIK7P.js";import"./chunk-CJJXT5DO.js";import"./chunk-QM4S2APK.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import{e as b,f as S,g as T}from"./chunk-M5JQXOCE.js";import"./chunk-YTK3IQUB.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import{a as C}from"./chunk-K4ERF7GT.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import{a as v}from"./chunk-BUVRZXO3.js";import"./chunk-PXPXK4Q7.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-BBZBXSTP.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-Q2XWL7P5.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-HCWEZCKP.js";import{b as m}from"./chunk-D4WLVWJQ.js";import{a as d}from"./chunk-RZ4F3BHX.js";import"./chunk-K4ERF7GT.js";import"./chunk-BUVRZXO3.js";import{a as f,h as a,i as u}from"./chunk-PXPXK4Q7.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-YKZIACYJ.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-27GF2OQ7.js";import"./chunk-3MSXQU2C.js";import"./chunk-AXJIXRYF.js";import"./chunk-ATO6NM45.js";import"./chunk-K4LCN5X4.js";import"./chunk-D5IZ77YG.js";import"./chunk-GLS46X7N.js";import"./chunk-JKHQBGFY.js";import"./chunk-FCZ2YFD3.js";import"./chunk-YEMR62WY.js";import"./chunk-2YQ6TW77.js";import"./chunk-ELN3EN4K.js";import"./chunk-RHNKYNNZ.js";import"./chunk-RKWJG3WW.js";import"./chunk-BLHCGRSK.js";import"./chunk-IQFUBT6Z.js";import"./chunk-TRXNJZSL.js";import"./chunk-TAUSKB3O.js";import"./chunk-K7P6VNLI.js";import"./chunk-NKCXCCPM.js";import"./chunk-VZHXNQDO.js";import"./chunk-N5YIMTGV.js";import"./chunk-5Y2G4NC7.js";import"./chunk-EQORZ6RT.js";import"./chunk-TBXIOT6M.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-GFKIE3AL.js";import"./chunk-3BIEIXJK.js";import"./chunk-NKUA3TSO.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-Q3WHZ26R.js";import"./chunk-RFHMDQXZ.js";import"./chunk-EYZWG32F.js";import"./chunk-FCMLIK7P.js";import"./chunk-CJJXT5DO.js";import"./chunk-QM4S2APK.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-QFD6CB4P.js";import"./chunk-VRVSOGXH.js";import"./chunk-PV4EDQY4.js";import"./chunk-YCCUBQY4.js";import"./chunk-66LXV7NN.js";import"./chunk-M5JQXOCE.js";import"./chunk-YTK3IQUB.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-K4ERF7GT.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import"./chunk-BUVRZXO3.js";import"./chunk-F4FXE466.js";import"./chunk-GO4CBUB6.js";import{a as o}from"./chunk-DFS4RMVP.js";import"./chunk-OYOTWI53.js";import"./chunk-MEHEGW3V.js";import"./chunk-PXPXK4Q7.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-JKHQBGFY.js";import"./chunk-FCZ2YFD3.js";import"./chunk-YEMR62WY.js";import"./chunk-2YQ6TW77.js";import"./chunk-RKWJG3WW.js";import"./chunk-NKCXCCPM.js";import"./chunk-GFKIE3AL.js";import"./chunk-NKUA3TSO.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-L5LI2JF4.js";import"./chunk-66LXV7NN.js";import"./chunk-M5JQXOCE.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-K4ERF7GT.js";import"./chunk-BUVRZXO3.js";import"./chunk-MEHEGW3V.js";import"./chunk-PXPXK4Q7.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-GFKIE3AL.js";import"./chunk-NKUA3TSO.js";import"./chunk-RZ4F3BHX.js";import"./chunk-K4ERF7GT.js";import"./chunk-PXPXK4Q7.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-K4ERF7GT.js";import"./chunk-PXPXK4Q7.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-D4WLVWJQ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-PXPXK4Q7.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-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as
|
|
2
|
+
import{b as T}from"./chunk-GRB66C5S.js";import"./chunk-RN4OSVTG.js";import"./chunk-BC7UVJJB.js";import{a as V}from"./chunk-LEA6IHXC.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import{b as I}from"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import{d as f,e as x}from"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{writeFileSync as ce,mkdirSync as pe}from"fs";import{tmpdir as ue}from"os";import{dirname as fe,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"},re=(t,r)=>t===f.SOURCE?String(r.source_id??""):t===f.AC?String(r.text??""):t===f.STYLENOTE?String(r.statement??r.text??""):t===f.GAP?String(r.text??r.question??""):String(r.title??"");function H(t){let r=[];for(let[o,p]of t.nodeLabel){let g=t.getNode(o)?.content??{};r.push({cid:o,label:p,slug:p===f.SOURCE?String(g.source_id??""):t.displayNameOf?.(o)??t.nameOf.get(o)??o.slice(0,19),trust:t.trust.get(o)??"derived",fresh:t.stale(o),title:re(p,g),content:g,superseded:t.superseded.has(o)})}let e=new Map;for(let[o]of t.nodeLabel)for(let p of t.edgesFrom(o)){let g=`${p.type}|${p.src}|${p.dst}`,v=typeof p.props?.anchor=="string"?p.props.anchor:void 0,w=e.get(g);w?(w.count++,v&&w.anchors.push(v)):e.set(g,{key:g,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 s=[...e.values()],i={},l={trusted:0,derived:0,archived:0},d={fresh:0,stale:0,orphaned:0,superseded:0},a=0;for(let o of r)o.superseded||(a++,i[o.label]=(i[o.label]??0)+1,o.label!==f.SOURCE&&l[o.trust]++,d[o.fresh]++);return{nodes:r,edges:s,summary:{nodes:a,edges:s.reduce((o,p)=>o+p.count,0),byLabel:i,trust:l,fresh:d,usecases:i[f.USECASE]??0,designed:0}}}var P=/^([a-z]+)-(\d+)$/,E=(t,r)=>{let e=P.exec(t),s=P.exec(r);return e&&s&&e[1]===s[1]?Number(e[2])-Number(s[2]):t<r?-1:t>r?1:0};function se(t,r,e){let s=new Set,i=d=>{let a=e.nodeLabel.get(d);if(a===f.USECASE)s.add(d);else if(a===f.SCENARIO)for(let o of e.edgesFrom(d))o.type===x.BELONGS_TO&&s.add(o.dst)},l=e.edgesFrom(t);if(r===f.SCENARIO)for(let d of l)d.type===x.BELONGS_TO&&s.add(d.dst);if(r===f.AC)for(let d of l)d.type===x.SCOPED_TO&&i(d.dst);if(r===f.TEST)for(let d of l)d.type===x.AUTOMATES&&i(d.dst);return s}function G(t,r){let e=new Map,s=t.nodes.filter(a=>a.label===f.USECASE).map(a=>a.cid),i=s.map(a=>({ucCid:a,slug:r.nameOf.get(a)??a.slice(0,19),designed:r.designOf.has(a),nodeCids:[a]})).sort((a,o)=>E(a.slug,o.slug)),l={ucCid:"__shared__",slug:"cross-cutting",designed:!1,nodeCids:[]},d=new Map(i.map(a=>[a.ucCid,a]));for(let a of s)e.set(a,a);for(let a of t.nodes){if(a.label===f.SOURCE||a.label===f.USECASE)continue;let o=se(a.cid,a.label,r);if(o.size===1){let p=[...o][0];e.set(a.cid,p),d.get(p).nodeCids.push(a.cid)}else e.set(a.cid,"__shared__"),l.nodeCids.push(a.cid)}return{laneOf:e,lanes:[...i,l]}}var N={source:0,usecase:1,scenario:2,ac:3,test:4,stylenote:5,gap:5},ie=6,z=260,R=64,B=28;function U(t,r,e){let{lanes:s}=r,i=new Map(t.nodes.map(n=>[n.cid,n])),l=new Map,d=[],a=[],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=s.filter(n=>n.ucCid!=="__shared__"||n.nodeCids.length>0),g=t.nodes.filter(n=>n.label===f.SOURCE).sort((n,m)=>E(n.slug,m.slug)),v=0;for(let n of p){let m=n.nodeCids.map(c=>i.get(c)).filter(Boolean),h=c=>m.filter(u=>u.label===c),S=h(f.USECASE).sort((c,u)=>E(c.slug,u.slug));S.forEach((c,u)=>l.set(c.cid,u));let D=h(f.SCENARIO).sort((c,u)=>E(c.slug,u.slug));D.forEach((c,u)=>l.set(c.cid,u));let M=h(f.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(f.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 A=Math.max(1,S.length,D.length,M.length,j.length,q.length)*R+B;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*z,y:v+B/2+_*R})}a.push({...n,y0:v,y1:v+A}),v+=A}let w=Math.max(v,R);g.forEach((n,m)=>d.push({...n,lane:"__spine__",col:0,x:0,y:w/(g.length+1)*(m+1)}));let L=ie*z;return{nodes:d,lanes:a,width:L,height:w}}function ae(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 $(t){let r=new Map,e=new Map,s=[];for(let i of t){for(let n of i.nodes)r.has(n.cid)||r.set(n.cid,i.seq);let l=new Map(e);for(let n of i.nodes)n.content?.derived===!0&&!e.has(n.cid)&&e.set(n.cid,"derived");for(let n of i.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},a=0;for(let[n,m]of e){let h=l.get(n);m==="derived"&&(h==="trusted"||h==="archived")&&a++}let o={trusted:d("trusted"),archived:d("archived"),reset:a},p=ae(i),g=i.nodes.map(n=>n.cid),v=i.edges.map(n=>`${n.type}|${n.src}|${n.dst}`),w=i.review.map(n=>n.id),L=p==="review"?"review \xB7 +"+o.trusted+" trusted"+(o.archived?", +"+o.archived+" archived":""):p+" \xB7 +"+g.length+" nodes";s.push({seq:i.seq,ts:i.ts,kind:p,label:L,mintedNodeCids:g,mintedEdgeKeys:v,reviewedNodeCids:w,trustDelta:o})}return{commits:s,bornSeq:r}}function Y(t,r,e){let s=[];for(let i of t){i.nodes.some(l=>l.cid===r)&&s.push({seq:i.seq,ts:i.ts,kind:"minted",detail:"minted here"});for(let l of i.review)l.id===r&&s.push({seq:i.seq,ts:i.ts,kind:"review",detail:l.resolution+(l.reason?": "+l.reason:"")})}return e.length&&s.push({seq:0,ts:"",kind:"derived_from",detail:"source lines "+e.join(", ")}),s}var oe={"&":"&","<":"<",">":">",'"':""","'":"'"};function k(t){return String(t).replace(/[&<>"']/g,r=>oe[r])}var W=t=>"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"),de=new RegExp("[\u2028\u2029]","g");function X(t){return t.replace(/[<>&]/g,W).replace(de,W)}var K=t=>t.replace("sha256:","").slice(0,12);function J(t){if(!t||typeof t!="object")return"";let r=String(t.operator??""),e=t.operand!=null?String(t.operand):"",s=t.unit!=null?" "+String(t.unit):"",i=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+s;break;case"lte":d="<= "+e+s;break;case"equals":d="= "+e+s+(i?" (was "+i+")":"");break;case"changed-by":d="changed by "+e+s;break;default:d=(r+" "+e+s).trim()}if(l){let a=l.threshold!=null?String(l.threshold):"",o=l.unit!=null?String(l.unit):"";(a||o)&&(d+=" within "+a+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>`,le=t=>Array.isArray(t)&&t.length?`<ul class="crit">${t.map(r=>`<li>${k(r)}</li>`).join("")}</ul>`:"";function Q(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(s=>C(s)):[]].join(""),le(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(([s,i])=>y(s,i)).join(""):"",y("techniques",e.technique_notes)].join("");case"ac":return[y("",e.text),[C(e.kind),C(e.risk?"risk: "+e.risk:"")].join(""),(()=>{let s=J(e.expected_answer);return s?`<div class="pred">${k(s)}</div>`:""})()].join("");case"test":{let s=J(e.check),i=e.test_md_blob!=null?`<pre class="md">${k(String(e.test_md_blob))}</pre>`:"";return[s?`<div class="pred">${k(s)}</div>`:"",y("definitionId",e.definitionId),i].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(s=>C(s)).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,s){let i=H(t),l=G(i,t),d=U(i,l,t),{commits:a}=$(r);i.summary.designed=l.lanes.filter(n=>n.designed&&n.ucCid!=="__shared__").length;let o={},p={};for(let n of i.nodes){o[n.cid]=Q(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 g=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=i.nodes.some(n=>n.label===f.SOURCE)?{}:void 0;return{meta:{fromSeq:r[0]?.seq??0,tipHash:e[e.length-1]??null,storePath:s,schema:"assurance/context@1",asOf:r[r.length-1]?.ts??null},summary:i.summary,lanes:v,nodes:g,edges:i.edges,commits:a,lineage:p,contentHtml:o,width:d.width,height:d.height,source:L}}var ee="__PAYLOAD__",te=`<!doctype html>
|
|
3
3
|
<html lang="en">
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="utf-8">
|
|
@@ -431,6 +431,6 @@ pre.md{white-space:pre-wrap;background:var(--bg);border:1px solid var(--line);bo
|
|
|
431
431
|
})();
|
|
432
432
|
</script>
|
|
433
433
|
</body>
|
|
434
|
-
</html>`;function
|
|
434
|
+
</html>`;function ne(t){let r=X(JSON.stringify(t));return te.split(ee).join(r)}async function he(t,r,e=process.cwd()){let s=T(e,r);if(!s)return 2;let i=V(s),{records:l,hashes:d}=I(s),a=Z(i,l,d,s);if(t.json)return r.out(JSON.stringify(a)),0;let o=ne(a),p=K(a.meta.tipHash??"empty"),g=t.out??ge(ue(),"kane-context-view-"+p+".html");if(pe(fe(g),{recursive:!0}),ce(g,o),r.out(g),t.open??r.isTTY)try{await(await import("./open-MQLQKFAW.js")).default(g)}catch{}return 0}async function Ke(t){let r=await he(t,{out:e=>process.stdout.write(e+`
|
|
435
435
|
`),err:e=>process.stderr.write(e+`
|
|
436
|
-
`),confirm:async()=>!0,isTTY:process.stdout.isTTY??!1});return await new Promise(e=>process.stdout.write("",()=>e())),r}export{
|
|
436
|
+
`),confirm:async()=>!0,isTTY:process.stdout.isTTY??!1});return await new Promise(e=>process.stdout.write("",()=>e())),r}export{he as runViewCommand,Ke as viewCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as ie}from"./chunk-QZ7DZXLQ.js";import{a as Q,c as z,d as ne}from"./chunk-QOGQBVTP.js";import"./chunk-GRB66C5S.js";import"./chunk-3C5GMAM4.js";import{b as X,c as re,d as oe}from"./chunk-BSFONZ2E.js";import{a as L}from"./chunk-TFVMSEIA.js";import"./chunk-JFAFKHDX.js";import"./chunk-DNNZ353O.js";import"./chunk-RN4OSVTG.js";import"./chunk-QM4S2APK.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import{a as _}from"./chunk-LEA6IHXC.js";import{b as te}from"./chunk-RGDQMKNJ.js";import"./chunk-L3HG5ONB.js";import"./chunk-L4JIMNKW.js";import{e as ee}from"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import{a as G}from"./chunk-YCCUBQY4.js";import{y as l}from"./chunk-PXPXK4Q7.js";import{a as H}from"./chunk-HCBYKLMW.js";import{a as T,b as c,k as Y}from"./chunk-C44QQJR4.js";import{a as ge}from"./chunk-6YGTRKDT.js";import{e as V}from"./chunk-UR6MHSHU.js";var A=V(ge(),1);function ae(e,g,b){let{ref:C,reason:d,by:x}=b;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 w=g.resolve(C);if(!w)return{record:null,errors:[{code:"UNKNOWN_REF",detail:`no node '${C}' in the graph`}]};let o=g.tipOf(w.cid);if(g.superseded.has(o))return{record:null,errors:[{code:"ALREADY_ARCHIVED",detail:`${C} is already superseded at its tip (${o.slice(0,19)}\u2026)`}]};let i=ee(e,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:o,new:null,reason:d,by:x}],source_head_moves:{}},{expectPrev:g.latestHash});return te(e),{record:i.record,errors:null}}function se(e){let g=e.by??{kind:"human",id:process.env.USER??"operator"},b=e.mode==="interactive"?"override":e.mode,C={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},d={applied:0,committed:0,retired:0,skipped:0,deferred:0,failed:0},x=new Map;for(let o of e.planRows)if(o.held_ref&&e.held){let i=e.held.rows.find(n=>n.temp_ref===o.held_ref);if(!i)continue;let h={kind:i.kind,ref:i.temp_ref,title:i.title,why:i.why,origin:"content-change",...o.impact?{impact:o.impact}:{}};x.set(h.ref,{card:h,source:"held",heldRef:i.temp_ref})}else if(o.kind==="MODIFY"){let i={kind:"MODIFY",ref:o.ref,title:o.ref,why:`${o.reason}: ${o.provenance}`,origin:o.origin??"structural-stale",...o.impact?{impact:o.impact}:{}};x.set(i.ref,{card:i,source:"row",row:o})}else if(o.kind==="ADD"){let i={kind:"ADD",ref:o.ref,title:o.ref,why:o.reason,origin:o.origin??"content-change"};x.set(i.ref,{card:i,source:"row",row:o})}for(let o of e.archive){if(o.kind!=="ARCHIVE")continue;let i={kind:"ARCHIVE",ref:o.ref,title:o.ref,why:o.why,provenance:o.why,...o.impact?{impact:o.impact}:{}};x.set(i.ref,{card:i,source:"archive",row:o})}let w=o=>(d.failed++,{outcome:"failed",detail:o});return{cards:()=>[...x.values()].map(o=>o.card),async submit(o,i){let h=x.get(o);if(!h)return w(`no card ${o}`);if(i.v==="skip")return d.skipped++,e.signals({ref:o,verdict:"gap-dismissed"}),{outcome:"skipped"};if(i.v==="defer")return d.deferred++,{outcome:"deferred"};if(i.v==="archive"){if(h.source!=="archive")return w(`${o} is not an ARCHIVE card`);let s=_(e.contextDir),R=s.resolve(h.row.ref);if(R&&s.superseded.has(s.tipOf(R.cid)))return d.skipped++,{outcome:"skipped",detail:"already retired \u2014 nothing to do"};let $=ae(e.contextDir,_(e.contextDir),{ref:h.row.ref,reason:`reconcile retire: ${h.row.why}`,by:g});return $.errors?w($.errors.map(a=>`${a.code}: ${a.detail}`).join("; ")):(d.retired++,e.signals({ref:o,verdict:"gap-resolved-archive",reason:h.row.why}),{outcome:"retired"})}if(h.source==="archive")return w(`${o} takes archive/skip/defer, not approve`);if(h.source==="held"){let s=ie(e.contextDir,e.held,h.heldRef,g,i.edits);if(!s.ok)return w(s.message);if(s.kind==="ADD"){let R=await e.runDesign(s.ref,{yes:!0,mode:b,...i.steering?{because:i.steering}:{}});return R!==0?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but its design run exited ${R} \u2014 finish with kane-cli design tests --use-case ${s.ref}`}):(d.applied++,e.signals({ref:o,verdict:"gap-resolved-create",...i.steering?{reason:i.steering}:{}}),{outcome:"applied",detail:s.ref})}if(i.steering){let R=_(e.contextDir),$=Q(R,s.ref);if(!$.ok)return d.committed++,{outcome:"committed",detail:`committed ${s.ref}, but steering could not resolve it (${$.message}) \u2014 steer via kane-cli maintain evolve ${s.ref}`};let a=await z(e.contextDir,$.target,{yes:!0,mode:b,because:i.steering},C,e.runDesign,"batch");if(a.outcome==="no-design"){let u=await e.runDesign($.target.seamRef,{yes:!0,mode:b,because:i.steering});return u!==0?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but its steered design run exited ${u} \u2014 finish with kane-cli design tests --use-case ${$.target.seamRef}`}):(d.applied++,e.signals({ref:o,verdict:"gap-resolved-create",reason:i.steering}),{outcome:"applied",detail:s.ref})}return a.outcome==="failed"||a.outcome==="paused"?(d.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but the steering evolve ${a.outcome} (exit ${a.code}) \u2014 finish with kane-cli maintain evolve ${s.ref}`}):a.outcome==="declined"?(d.committed++,{outcome:"committed",detail:`committed ${s.ref} \u2014 the steering evolve was declined; re-run kane-cli maintain evolve ${s.ref}`}):(d.applied++,e.signals({ref:o,verdict:"gap-resolved-evolve",reason:i.steering}),{outcome:"applied",detail:s.ref})}return d.committed++,e.signals({ref:o,verdict:"gap-resolved-evolve"}),{outcome:"committed",detail:s.ref}}let n=_(e.contextDir),f=Q(n,h.row.ref);if(!f.ok)return w(f.message);if(h.card.kind==="ADD"){let s=await e.runDesign(f.target.seamRef,{yes:!0,mode:b});return s!==0?w(`design run exited ${s}`):(d.applied++,e.signals({ref:o,verdict:"gap-resolved-create"}),{outcome:"applied"})}let v=await z(e.contextDir,f.target,{yes:!0,mode:b,...i.steering?{because:i.steering}:{}},C,e.runDesign,"batch");return v.outcome==="evolved"?(d.applied++,e.signals({ref:o,verdict:"gap-resolved-evolve",...i.steering?{reason:i.steering}:{}}),{outcome:"applied"}):v.outcome==="failed"||v.outcome==="paused"?w(`evolve ${v.outcome} (exit ${v.code})`):(d.skipped++,{outcome:"skipped",detail:v.outcome})},summary:()=>({...d})}}var y=V(H(),1);function N(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 U(e){return e.kind==="ARCHIVE"?null:N(e).length}var he={ADD:{color:l.green??"green"},MODIFY:{color:"yellow"},ARCHIVE:{color:l.red}},ve=60;function le({card:e,position:g,sel:b=0,focused:C=!1,freeText:d=null}){let{stdout:x}=Y(),o=(x?.columns??80)<ve,i=N(e),h=U(e),n=he[e.kind],f=$=>C&&b===$?(0,y.jsx)(c,{color:l.generateAccent,children:"\u25B8"}):" ",v=e.impact,s=v&&v.stale_refs.length>0?`${e.kind==="ARCHIVE"?"retiring drops":"approving marks"} ${v.stale_refs.length} item(s) stale`+((v.direct_refs?.length??0)>0?` \u2014 ${v.direct_refs.length} directly touched: ${v.direct_refs.join(", ")}`:""):null,R=(0,y.jsxs)(T,{flexDirection:"column",children:[(0,y.jsx)(c,{bold:!0,color:l.generateAccent,children:`? reconcile \u2014 item ${g.n} of ${g.of}`}),(0,y.jsxs)(c,{bold:!0,children:[" ",(0,y.jsx)(c,{color:n.color,children:`[${e.kind}]`}),` ${L(e.title)}`]}),(0,y.jsx)(c,{color:l.muted,children:` ${e.why}`}),s?(0,y.jsx)(c,{color:l.muted,children:` impact: ${s}`}):null,e.kind==="ARCHIVE"&&e.provenance&&e.provenance!==e.why?(0,y.jsx)(c,{color:l.muted,children:` ${e.provenance}`}):null,i.map(($,a)=>(0,y.jsxs)(c,{children:[" ",f(a),` ${a+1} ${$.label}`,(0,y.jsx)(c,{color:l.dim,children:` \u2014 ${$.detail}`})]},`o-${a}`)),h!==null?d?(0,y.jsxs)(T,{flexDirection:"column",children:[(0,y.jsxs)(T,{children:[(0,y.jsxs)(c,{children:[" ",(0,y.jsx)(c,{color:l.generateAccent,children:"\u25B8"})," ",(0,y.jsx)(c,{color:l.dim,children:"\u270E "})]}),(0,y.jsx)(G,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:"say what to adjust"})]}),(0,y.jsx)(c,{color:l.muted,children:" submits as: approve \xB7 your words steer the re-design"})]}):(0,y.jsxs)(c,{children:[" ",f(h)," ",(0,y.jsx)(c,{color:l.dim,children:"\u270E approve with changes \u2014 say what to adjust"})]}):null,(0,y.jsx)(c,{color:l.muted,children:h!==null?" \u2191\u2193 \xB7 \u23CE select \xB7 1-9 \xB7 type = adjust \xB7 esc \xB7 nothing to undo":" \u2191\u2193 \xB7 \u23CE select \xB7 1-9 \xB7 esc \xB7 nothing to undo"})]});return o?R:(0,y.jsx)(T,{flexDirection:"column",borderStyle:"round",borderColor:l.generateAccent,paddingX:1,children:R})}var j=V(H(),1);function K({mark:e,markColor:g,color:b,indent:C=2,reserve:d=0,children:x}){let{stdout:w}=Y(),o=(w?.columns??80)-d,i=C+e.length+1;return(0,j.jsxs)(T,{children:[(0,j.jsx)(T,{width:i,flexShrink:0,children:(0,j.jsx)(c,{color:g,children:`${" ".repeat(C)}${e}`})}),(0,j.jsx)(T,{width:Math.max(20,o-i),children:(0,j.jsx)(c,{color:b,children:x})})]})}var p=V(H(),1);function ce(e){return e.landed?"committed":e.outcome}var ke={applied:{mark:"\u2714",color:"green"},committed:{mark:"\u2714",color:"green"},retired:{mark:"\u2714",color:"green"},skipped:{mark:"\xB7",color:"dim"},deferred:{mark:"\u2013",color:"dim"},failed:{mark:"\u2717",color:"red"}},q=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function ye(e){return e.v==="archive"?"Retiring\u2026":e.v==="approve"&&e.steering?"Approving with your changes \u2014 committing, then re-designing\u2026":"Applying \u2014 committing\u2026"}function we({controller:e,cards:g,note:b,markOutcome:C,routeChat:d,listEvolveTargets:x,barSubject:w,onFinish:o,onCtrlC:i,pauseRef:h}){let[n,f]=(0,A.useState)(g.length>0?{at:"card",idx:0,sel:0,editor:null}:{at:"done-panel",sel:0}),v=(0,A.useRef)(0),s=(0,A.useRef)(n);s.current=n;let R=(0,A.useRef)([]),[$,a]=(0,A.useState)(0),u=n.at==="busy"||n.at==="evolving";(0,A.useEffect)(()=>{if(!u)return;let t=setInterval(()=>a(r=>r+1),120);return()=>clearInterval(t)},[u]);let W=(0,A.useRef)(!1),D=()=>{b((0,p.jsx)(c,{color:l.dim,children:"walk paused \u2014 every verdict so far is committed; re-run the same command to continue"})),o(3)},S=()=>{if(W.current)return;W.current=!0;let t=s.current;if(t.at==="busy"||t.at==="evolving"){b((0,p.jsx)(c,{color:l.dim,children:"finishing the current item, then pausing\u2026"}));return}if(t.at==="done-panel"||t.at==="picker"||t.at==="why"||t.at==="view"){o(v.current);return}D()};h&&(h.current=S);let I=n.at==="card"||n.at==="busy"?g[n.idx]:null,E=()=>[{key:"finish",label:"finish"},...x?[{key:"evolve",label:"evolve another use-case\u2026"}]:[],...R.current.length>0?[{key:"view",label:"view what changed"}]:[]],O=()=>{let t=x?.()??[];if(t.length===0){b((0,p.jsx)(c,{color:l.dim,children:"nothing is stale \u2014 no evolve targets right now"})),f({at:"done-panel",sel:0});return}f({at:"picker",items:t,sel:0})},P=t=>{let r=t+1;if(r<g.length)f({at:"card",idx:r,sel:0,editor:null});else{let m=e.summary();b((0,p.jsx)(c,{color:l.dim,children:`reconcile walk: ${m.applied} applied, ${m.committed} committed, ${m.retired} retired, ${m.skipped} skipped, ${m.deferred} deferred`+(m.failed>0?`, ${m.failed} failed`:"")})),f({at:"done-panel",sel:0})}},F=(0,A.useRef)(!1),M=(t,r)=>{if(F.current)return;F.current=!0;let m=g[t];f({at:"busy",idx:t,label:ye(r),startedAt:Date.now()}),e.submit(m.ref,r).catch(k=>({outcome:"failed",detail:k instanceof Error?k.message:String(k)})).then(k=>{let B=ke[k.outcome]??{mark:"\xB7",color:"dim"},fe=k.outcome!=="failed"&&k.outcome!=="skipped"&&k.outcome!=="deferred"&&m.impact&&m.impact.stale_refs.length>0?` \xB7 ${m.impact.stale_refs.length} item(s) now stale`:"",Z=`${k.outcome} [${m.kind}] ${L(m.title)}${k.detail?` \u2014 ${L(k.detail)}`:""}${fe}`;if(R.current.push({mark:B.mark,color:B.color,line:Z}),b((0,p.jsx)(K,{mark:B.mark,markColor:B.color==="green"?l.green:B.color==="red"?l.red:l.dim,color:B.color==="dim"?l.dim:void 0,children:Z})),k.outcome==="failed"&&(v.current=v.current===0?1:v.current),C(m.ref,ce(k)),F.current=!1,W.current){D();return}P(t)})},de=(t,r)=>{f({at:"evolving",title:t.title,startedAt:Date.now()}),d(`${t.key} ${r}`).catch(m=>`\u2717 evolve failed: ${m instanceof Error?m.message:String(m)}`).then(m=>{let k=m.startsWith("\u2713");if(R.current.push({mark:k?"\u2714":"\u2717",color:k?"green":"red",line:m.replace(/^[✓✗]\s*/,"")}),b((0,p.jsx)(K,{mark:k?"\u2714":"\u2717",markColor:k?l.green:l.red,children:m.replace(/^[✓✗]\s*/,"")})),W.current){o(v.current);return}f({at:"done-panel",sel:0})})},ue=(0,A.useMemo)(()=>({isFocused:()=>{let t=s.current;return t.at==="card"&&t.editor===null||t.at==="done-panel"||t.at==="picker"||t.at==="view"},onMove:t=>{f(r=>{if(r.at==="card"){let m=g[r.idx],k=U(m)??N(m).length-1;return{...r,sel:Math.max(0,Math.min(k,r.sel+t))}}return r.at==="done-panel"?{...r,sel:Math.max(0,Math.min(E().length-1,r.sel+t))}:r.at==="picker"?{...r,sel:Math.max(0,Math.min(r.items.length-1,r.sel+t))}:r})},onSelect:()=>{let t=s.current;if(t.at==="card"){let r=g[t.idx],m=U(r);if(m!==null&&t.sel===m){f({...t,editor:""});return}let k=N(r)[t.sel];k&&M(t.idx,{v:k.v});return}if(t.at==="done-panel"){let r=E()[t.sel];r?.key==="finish"?o(v.current):r?.key==="evolve"?O():r?.key==="view"&&f({at:"view"});return}if(t.at==="picker"){let r=t.items[t.sel];r&&f({at:"why",item:r,text:""});return}},onDigit:t=>{let r=s.current;if(r.at==="card"){let m=N(g[r.idx])[t-1];m&&M(r.idx,{v:m.v});return}r.at==="done-panel"&&t-1<E().length&&f({...r,sel:t-1}),r.at==="picker"&&t-1<r.items.length&&f({...r,sel:t-1})},onType:t=>{f(r=>r.at!=="card"||U(g[r.idx])===null?r:{...r,editor:(r.editor??"")+t})},isMulti:()=>!1,onSpace:()=>{},onBack:()=>{let t=s.current;(t.at==="picker"||t.at==="view")&&f({at:"done-panel",sel:0})}}),[g]);(0,A.useEffect)(()=>{n.at==="done"&&o(v.current)},[n.at]);let me=n.at==="card"||n.at==="done-panel"||n.at==="picker"||n.at==="why"||n.at==="view",pe=n.at==="card"||n.at==="busy"?`${w?`${w} \xB7 `:""}item ${n.idx+1} of ${g.length}`:w,J=t=>Math.floor((Date.now()-t)/1e3);return(0,p.jsxs)(T,{flexDirection:"column",children:[(0,p.jsx)(oe,{onToggleThinking:()=>{},onCtrlC:()=>{i(),S()},panel:ue}),n.at==="card"&&I?(0,p.jsx)(le,{card:I,position:{n:n.idx+1,of:g.length},sel:n.sel,focused:n.editor===null,freeText:n.editor!==null?{value:n.editor,onChange:t=>f(r=>r.at==="card"?{...r,editor:t}:r),onSubmit:t=>{let r=s.current;r.at==="card"&&(t.trim()?M(r.idx,{v:"approve",steering:t.trim()}):f({...r,editor:null}))},onCancel:()=>f(t=>t.at==="card"?{...t,editor:null}:t)}:null}):null,n.at==="busy"?(0,p.jsxs)(c,{color:l.generateAccent,children:[`${q[$%q.length]} ${n.label} `,(0,p.jsx)(c,{color:l.dim,children:`(${J(n.startedAt)}s)`})]}):null,n.at==="evolving"?(0,p.jsxs)(c,{color:l.generateAccent,children:[`${q[$%q.length]} Evolving ${n.title}\u2026 `,(0,p.jsx)(c,{color:l.dim,children:`(${J(n.startedAt)}s)`})]}):null,n.at==="done-panel"?(0,p.jsx)(X,{headline:(()=>{let t=e.summary();return`reconcile done \u2014 ${t.applied+t.committed} applied \xB7 ${t.retired} retired \xB7 ${t.skipped} skipped \xB7 ${t.deferred} deferred${t.failed>0?` \xB7 ${t.failed} failed`:""}`})(),rows:E(),sel:n.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select"}):null,n.at==="picker"?(0,p.jsx)(X,{ask:!0,headline:"evolve which use-case?",rows:n.items.map(t=>({key:t.key,label:t.title,detail:t.badge})),sel:n.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}):null,n.at==="why"?(0,p.jsxs)(T,{flexDirection:"column",borderStyle:"round",borderColor:l.generateAccent,paddingX:1,children:[(0,p.jsxs)(T,{children:[(0,p.jsxs)(c,{children:[(0,p.jsx)(c,{color:l.generateAccent,children:"\u25B8"})," ",(0,p.jsx)(c,{color:l.dim,children:"\u270E "})]}),(0,p.jsx)(G,{value:n.text,onChange:t=>f(r=>r.at==="why"?{...r,text:t}:r),onSubmit:t=>{let r=s.current;r.at==="why"&&(t.trim()?de(r.item,t.trim()):f({at:"picker",items:[r.item],sel:0}))},onCancel:()=>{s.current.at==="why"&&O()},placeholder:`what should change about ${n.item.title}?`})]}),(0,p.jsx)(c,{color:l.muted,children:" \u23CE submit \xB7 esc back"})]}):null,n.at==="view"?(0,p.jsxs)(T,{flexDirection:"column",borderStyle:"round",borderColor:l.dim,paddingX:1,children:[(0,p.jsx)(c,{bold:!0,children:`view \xB7 this run's changes \xB7 ${R.current.length}`}),R.current.map((t,r)=>(0,p.jsx)(K,{mark:t.mark,markColor:t.color==="green"?l.green:t.color==="red"?l.red:l.dim,color:t.color==="dim"?l.dim:void 0,indent:0,reserve:4,children:t.line},`vc-${r}`)),(0,p.jsx)(c,{color:l.muted,children:" esc back"})]}):null,(0,p.jsx)(re,{verb:"maintain",subject:pe,state:me?"idle":void 0,hints:"ctrl+c exit"})]})}async function Xe(e){let g={current:null},b=a=>{g.current?.append(a)},C=null,d=async(a,u)=>{let[{runDesign:W},{resolveAgentAuthEnv:D},{runAgent:S},{preflightTurn:I}]=await Promise.all([import("./run-VMKZDO7J.js"),import("./spawner-K7LWPNIC.js"),import("./bridge-D2HETW5M.js"),import("./turn-preflight-JGYT7LXP.js")]);C??=await D();let E=C;return W({useCase:a,force:!0,mode:u.mode??"override",...u.because?{because:u.because}:{},...u.changeDelta!==void 0?{changeDelta:u.changeDelta}:{},...u.priorDesign!==void 0?{priorDesign:u.priorDesign}:{}},{contextDir:e.dir,agent:S,preflightTurn:()=>I(E),ask:async()=>[],out:()=>{},progress:()=>{},isTTY:!1,auth:E})},x=e.runDesign??d,w=se({contextDir:e.dir,held:e.held,archive:e.archive,planRows:e.rows,runDesign:x,mode:"interactive",signals:e.signals}),o=new Set(e.rows.filter(a=>a.applied!==void 0).map(a=>a.held_ref??a.ref)),i=w.cards().filter(a=>!o.has(a.ref)&&!(a.kind==="ARCHIVE"&&e.archiveState?.[a.ref]!==void 0)),h=a=>e.rows.findIndex(u=>(u.held_ref??u.ref)===a),n=(a,u)=>{try{if(i.find(S=>S.ref===a)?.kind==="ARCHIVE"){u==="retired"?e.markA?.(a,"retired"):u==="skipped"&&e.markA?.(a,"skipped");return}let D=h(a);if(D<0)return;u==="applied"||u==="committed"?e.mark?.(D,"approved"):u==="skipped"&&e.mark?.(D,"skipped")}catch{}},f=async a=>{let[{openGraph:u},{resolveParentUc:W,evolveOneUc:D}]=await Promise.all([import("./readmodel-V3DVL6NP.js"),import("./evolve-cmd-YGJECGND.js")]),[S,...I]=a.split(/\s+/),E=u(e.dir),O=W(E,S);if(!O.ok)return`couldn't resolve '${S}' \u2014 start with a use-case id (uc-\u2026): ${O.message}`;if(I.length===0)return`say what to change: \`${S} <your words>\` \u2014 the words become the redesign's change delta`;let P=I.join(" "),F={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},M=await D(e.dir,O.target,{yes:!0,mode:"override",because:P},F,x,"batch");return M.outcome==="evolved"?(e.signals({ref:O.target.display,verdict:"gap-resolved-evolve",reason:P}),`\u2713 redesigned ${O.target.display} \u2014 "${P}"`):`\u2717 evolve ${M.outcome} for ${O.target.display} (exit ${M.code})`},v=e.listEvolveTargets??(()=>{let a=_(e.dir);return ne(a).targets.map(u=>({key:u.display,title:u.display,badge:"stale"}))});if(e.script){let a=0;for(let u of i){let W=await e.script(u),D=await w.submit(u.ref,W);D.outcome==="failed"&&a===0&&(a=1),n(u.ref,ce(D))}return a}let[{render:s},{ScrollbackProvider:R},{ScrollbackTap:$}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./scrollback-JLPJR25X.js"),import("./ScrollbackTap-Q3IOKNMS.js")]);return new Promise(a=>{let u=!1,W=P=>{u||(u=!0,(async()=>{process.removeListener("SIGINT",E),await g.current?.flush();try{O.unmount()}catch{}a(P)})())},D=0,S={current:null},I=()=>{if(D+=1,D>=2){process.removeListener("SIGINT",E);try{O.unmount()}catch{}a(130)}},E=()=>{I(),S.current?.()};process.on("SIGINT",E);let O=s((0,p.jsxs)(R,{children:[(0,p.jsx)($,{into:g}),(0,p.jsx)(we,{controller:w,cards:i,note:b,markOutcome:n,routeChat:f,listEvolveTargets:v,barSubject:e.barSubject,onFinish:W,onCtrlC:I,pauseRef:S})]}),{exitOnCtrlC:!1})})}export{we as WalkSessionSurface,ce 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.8",
|
|
4
4
|
"description": "KaneAI Terminal UI — browser automation testing agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"ws": "^8.20.0"
|
|
31
31
|
},
|
|
32
32
|
"optionalDependencies": {
|
|
33
|
-
"@testmuai/kane-cli-darwin-arm64": "0.6.
|
|
34
|
-
"@testmuai/kane-cli-darwin-x64": "0.6.
|
|
35
|
-
"@testmuai/kane-cli-linux-x64": "0.6.
|
|
36
|
-
"@testmuai/kane-cli-linux-arm64": "0.6.
|
|
37
|
-
"@testmuai/kane-cli-win-x64": "0.6.
|
|
33
|
+
"@testmuai/kane-cli-darwin-arm64": "0.6.8",
|
|
34
|
+
"@testmuai/kane-cli-darwin-x64": "0.6.8",
|
|
35
|
+
"@testmuai/kane-cli-linux-x64": "0.6.8",
|
|
36
|
+
"@testmuai/kane-cli-linux-arm64": "0.6.8",
|
|
37
|
+
"@testmuai/kane-cli-win-x64": "0.6.8",
|
|
38
38
|
"@testmuai/kane-cli-node-darwin-arm64": "24.18.0",
|
|
39
39
|
"@testmuai/kane-cli-node-darwin-x64": "24.18.0",
|
|
40
40
|
"@testmuai/kane-cli-node-linux-x64": "24.18.0",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as ee}from"./chunk-64LC36AF.js";import{a as Re,b as Ie}from"./chunk-6PS65QFF.js";import{a as ve,b as ke}from"./chunk-DCWCANNS.js";import{b as Te,d as Ce}from"./chunk-R7NNIQMH.js";import{a as be}from"./chunk-5Y2G4NC7.js";import{a as Se}from"./chunk-YCCUBQY4.js";import{a as $e}from"./chunk-KVAALPTA.js";import{b as we}from"./chunk-DFS4RMVP.js";import"./chunk-RGQIBS32.js";import{y as s}from"./chunk-NMKZHHB6.js";import{a as B}from"./chunk-HCBYKLMW.js";import{a as b,b as n,k as W}from"./chunk-C44QQJR4.js";import{a as yt}from"./chunk-6YGTRKDT.js";import{e as R}from"./chunk-UR6MHSHU.js";var v=R(yt(),1);var $=R(B(),1),Be=3,Tt=60;function X(e){return e.options.length}var bt={high:{text:"\u203C high",color:s.red},med:{text:"med",color:"yellow"},low:{text:"low",color:s.dim}};function $t({batch:e,i:t}){let r=e.resolution[t],i=r.form==="deferred"?"\u2013 deferred (the agent keeps it)":`\u2713 ${r.form}: ${r.choice}${r.form==="assumed"?" (flagged)":" (you)"}`;return(0,$.jsx)(n,{color:s.dim,children:` ${i}`})}function wt({batch:e,i:t,sel:r,focused:i,freeText:m}){let u=e.questions[t],l=e.cursor===t,o=e.resolution[t],a=l?"\u203A":" ",f=bt[u.risk],h=y=>l&&i&&r===y?(0,$.jsx)(n,{color:s.generateAccent,children:"\u25B8"}):" ";return(0,$.jsxs)(b,{flexDirection:"column",children:[(0,$.jsxs)(n,{bold:l,children:[` ${t+1} ${a} ${u.text}`,f?(0,$.jsx)(n,{color:f.color,bold:!1,children:` ${f.text}`}):null]}),(0,$.jsx)(n,{color:s.muted,children:` ${u.rationale}`}),o&&!l?(0,$.jsx)($t,{batch:e,i:t}):(0,$.jsxs)(b,{flexDirection:"column",children:[u.multi_select?(0,$.jsx)(n,{color:s.dim,children:" note: multi-select not yet supported \u2014 pick the best single option"}):null,u.options.map((y,x)=>(0,$.jsxs)(n,{children:[" ",h(x),` ${x+1} ${y.label}`,x===u.recommended_index?(0,$.jsx)(n,{color:s.dim,children:" (recommended)"}):null,o?.selected_index===x?(0,$.jsx)(n,{color:s.dim,children:" (current)"}):null]},`o-${x}`)),u.allow_free_text&&l?m?(0,$.jsxs)(b,{children:[(0,$.jsxs)(n,{children:[" ",(0,$.jsx)(n,{color:s.generateAccent,children:"\u25B8"})," ",(0,$.jsx)(n,{color:s.dim,children:"\u270E "})]}),(0,$.jsx)(Se,{value:m.value,onChange:m.onChange,onSubmit:m.onSubmit,onCancel:m.onCancel,placeholder:"tell me what to do"})]}):(0,$.jsxs)(n,{children:[" ",h(u.options.length)," ",(0,$.jsx)(n,{color:s.dim,children:"\u270E tell me what to do"})]}):null]})]})}function De({batch:e,sel:t=0,focused:r=!1,freeText:i=null}){let{stdout:m}=W(),l=(m?.columns??80)<Tt,o=e.resolution.filter(I=>!I).length,a=Math.max(0,Math.min(e.cursor<0?0:e.cursor,e.questions.length-Be)),f=e.questions.slice(a,a+Be),h=a,y=e.questions.length-a-f.length,x=(0,$.jsxs)(b,{flexDirection:"column",children:[(0,$.jsx)(n,{bold:!0,color:s.generateAccent,children:`? the agent needs ${o===1?"one answer":`${o} answers`} before it can continue`}),h>0?(0,$.jsx)(n,{color:s.muted,children:` \u22EE ${h} above`}):null,f.map((I,d)=>(0,$.jsx)(wt,{batch:e,i:a+d,sel:t,focused:r,freeText:i},I.id)),y>0?(0,$.jsx)(n,{color:s.muted,children:` \u22EE ${y} more`}):null]});return l?x:(0,$.jsx)(b,{flexDirection:"column",borderStyle:"round",borderColor:s.generateAccent,paddingX:1,children:x})}var D=R(B(),1),Ee=60,Ct=e=>e.length<=Ee?e:`${e.slice(0,Ee-1)}\u2026`,St={high:s.red,med:"yellow"};function te({item:e}){return(0,D.jsxs)(b,{flexDirection:"column",marginLeft:2,children:[(e.cite??[]).map((t,r)=>(0,D.jsx)(n,{dimColor:!0,children:`cite ${t.anchor??"conv"} \u2014 "${t.quote??""}"`},`cite-${r}`)),(e.depends_on_hint??[]).length>0&&(0,D.jsx)(n,{dimColor:!0,children:`depends on: ${(e.depends_on_hint??[]).join(", ")}`}),Object.entries(e.extra??{}).map(([t,r])=>(0,D.jsx)(n,{dimColor:!0,children:`${t}: ${r}`},`extra-${t}`))]})}function G({heading:e,turn:t,items:r,expandedRef:i,total:m,compact:u,numbers:l,marks:o}){return(0,D.jsxs)(b,{flexDirection:"column",children:[(0,D.jsx)(n,{bold:!0,children:`${e} \xB7 turn ${t} \xB7 ${m??r.length} proposed`}),r.map((a,f)=>{let h=a.matches_existing,y=h?h.cid?h.archived?` \u2248 matches archived \u2014 previously rejected${h.reason?`: "${h.reason}"`:""}`:" \u2248 matches existing":" \u2248overlap":"",x=o?.[f]?" \xB7 updated":"",I=u?` ${l?.[f]??f+1} \xB7 ${a.title}`:` ${a.title}`,d=a.why?` \u2014 ${u?Ct(a.why):a.why}`:"";return(0,D.jsxs)(b,{flexDirection:"column",children:[(0,D.jsxs)(n,{children:[I,a.badge!==void 0?(0,D.jsx)(n,{color:St[a.badge]??s.dim,children:` ${a.badge}`}):null,d?(0,D.jsx)(n,{color:s.dim,children:d}):null,y?(0,D.jsx)(n,{color:h?.archived?"yellow":"magenta",children:y}):null,x?(0,D.jsx)(n,{color:s.dim,children:x}):null]}),i===a.temp_ref&&(0,D.jsx)(te,{item:a})]},a.temp_ref)})]})}var Le=R(B(),1),vt=e=>e.summary??e.description??"";function kt(e){return{temp_ref:e.temp_ref,title:e.title,badge:e.risk,why:vt(e),matches_existing:e.matches_existing?e.matches_existing:null,cite:e.cite??[],depends_on_hint:e.depends_on_hint??[]}}function _e({turn:e,items:t,expandedRef:r,total:i,compact:m,numbers:u,marks:l}){return(0,Le.jsx)(G,{heading:"use-cases",turn:e,items:t.map(kt),expandedRef:r,total:i,compact:m,numbers:u,marks:l})}var Rt={"use-case":"use-cases",ac:"ACs",scenario:"scenarios",test:"tests",gap:"gaps"},P=e=>Rt[e]??`${e}s`,Ae=e=>e==="ac"?"AC":e==="use-case"?"use-case":e,ne=e=>e.kind??"use-case",Oe=e=>`${ne(e)}:${e.temp_ref}`;function Pe(e){let t=e,r=t.badge??e.risk??null,i=t.why??e.summary??e.description??null;return JSON.stringify([e.title,r,i,t.extra??null,e.depends_on_hint??null])}function Me(e){return e.filter(t=>t.role==="agent"&&typeof t.turnIndex=="number"&&Array.isArray(t.items)&&t.items.length>0)}function V(e){let t=new Map,r=1;for(let u of Me(e)){let l=new Set;for(let o of u.items){let a=Oe(o);if(l.has(a))continue;l.add(a);let f=t.get(a);t.set(a,{num:f?.num??r++,ref:o.temp_ref,kind:ne(o),item:o,turnIndex:u.turnIndex,fingerprint:Pe(o)})}}let i=[...t.values()].sort((u,l)=>u.num-l.num),m=[];for(let u of i){let l=m.find(o=>o.kind===u.kind);l?l.count++:m.push({kind:u.kind,label:P(u.kind),count:1})}return{entries:i,byRef:t,counts:m}}function qe(e,t){let i=Me(e).find(d=>d.turnIndex===t);if(!i)return null;let m=e.filter(d=>d.role!=="agent"||typeof d.turnIndex!="number"||d.turnIndex<=t),u=V(m),l=V(e.filter(d=>d.role!=="agent"||typeof d.turnIndex!="number"||d.turnIndex<t)),o=[],a=new Map,f=new Map,h=new Map,y=new Set;for(let d of i.items){let k=Oe(d);if(y.has(k))continue;y.add(k);let q=l.byRef.get(k),F=d.changed===!0,A=u.byRef.get(k).num,_=ne(d);if(q&&!F&&q.fingerprint===Pe(d)){a.set(_,(a.get(_)??0)+1);continue}let w=!!q||F,N=w?h:f;N.set(_,(N.get(_)??0)+1),o.push({item:d,num:A,updated:w})}let x=[...a.entries()].map(([d,k])=>({label:P(d),count:k})),I=[...[...f.entries()].map(([d,k])=>`${k} new ${k===1?Ae(d):P(d)}`),...[...h.entries()].map(([d,k])=>`${k} updated ${k===1?Ae(d):P(d)}`)].join(" \xB7 ");return{fresh:o,unchanged:x,headerStats:I}}var E=R(B(),1);function Fe({turnIndex:e,fresh:t,headerStats:r,unchangedTotal:i}){let m=[];for(let l of t){let o=l.item.kind??"use-case",a=m.find(f=>f.kind===o);a?a.rows.push(l):m.push({kind:o,rows:[l]})}let u=`design \xB7 turn ${e} \u2014 ${r||"no new items"}${i>0?` (${i} unchanged)`:""}`;return(0,E.jsxs)(b,{flexDirection:"column",children:[(0,E.jsx)(n,{bold:!0,children:u}),m.map(({kind:l,rows:o})=>{let a=o.filter(y=>!y.updated).length,f=o.length-a,h=[...a>0?[`${a} new`]:[],...f>0?[`${f} updated`]:[]].join(" \xB7 ");return(0,E.jsxs)(b,{flexDirection:"column",children:[(0,E.jsx)(n,{color:s.dim,children:`${P(l).toLowerCase()} \xB7 ${h}`}),o.map(({item:y,num:x,updated:I})=>{let d=y;return(0,E.jsxs)(b,{flexDirection:"column",children:[(0,E.jsxs)(n,{children:[(0,E.jsx)(n,{children:` ${x} \xB7 ${y.title}`}),d.badge?(0,E.jsx)(n,{color:s.dim,children:` \xB7 ${d.badge}`}):null,I?(0,E.jsx)(n,{color:s.dim,children:" \xB7 updated"}):null]}),d.why?(0,E.jsx)(n,{color:s.dim,children:` ${d.why}`}):null]},`${l}:${y.temp_ref}`)})]},l)})]})}var g=R(B(),1);function It(e){let t=e.form==="assumed"?" (flagged)":e.form==="deferred"?"":" (you)",r=e.note?` \u2014 ${e.note}`:"";return e.form==="deferred"?`\u21B3 deferred q${e.qNum} ${e.stub}${r}`:e.form==="changed"?`\u21B3 changed q${e.qNum} ${e.stub}: ${e.prev??"?"} \u2192 ${e.choice??"?"}${t}${r}`:`\u21B3 ${e.form} q${e.qNum} ${e.stub}: ${e.choice??"?"}${t}${r}`}function Ne({block:e,annotations:t}){switch(e.kind){case"banner":return(0,g.jsx)(n,{color:s.dim,children:` \u2500\u2500 ${e.text} \u2500\u2500`});case"user":return(0,g.jsxs)(b,{children:[(0,g.jsx)(n,{color:s.orange,children:"\u276F "}),(0,g.jsx)(n,{children:e.text})]});case"note":return(0,g.jsx)(n,{color:s.dim,children:` ${e.text}`});case"agent":return(0,g.jsx)(ve,{text:e.text});case"thinking":return(0,g.jsx)(n,{color:s.dim,children:` thought for ${(e.tookMs/1e3).toFixed(1)}s`});case"tool":return(0,g.jsx)(n,{color:s.dim,children:` ${Re({name:e.name,status:e.status==="ok"?"done":e.status,detail:e.detail})}`});case"usage":return(0,g.jsx)(n,{color:s.dim,children:` \xB7 ${e.credits.toFixed(1)} credits \u2014 total ${e.total.toFixed(1)}`});case"turn":{let r=t??null,i=r?r.fresh.map(o=>o.item):e.items,m=r?r.fresh.map(o=>o.num):void 0,u=r?r.fresh.map(o=>o.updated):void 0,l=i.some(o=>!!o.kind);return(0,g.jsxs)(b,{flexDirection:"column",marginLeft:2,children:[l?(0,g.jsx)(Fe,{turnIndex:e.turnIndex,fresh:r?r.fresh:i.map((o,a)=>({item:o,num:a+1,updated:!1})),headerStats:r?.headerStats??"",unchangedTotal:(r?.unchanged??[]).reduce((o,a)=>o+a.count,0)}):e.heading==="use-cases"?(0,g.jsx)(_e,{turn:e.turnIndex,items:i,expandedRef:null,compact:!0,total:i.length,numbers:m,marks:u}):(0,g.jsx)(G,{heading:e.heading,turn:e.turnIndex,items:i,expandedRef:null,compact:!0,total:i.length,numbers:m,marks:u}),r&&r.unchanged.length>0&&(0,g.jsx)(n,{color:s.dim,children:` \u22EE unchanged: ${r.unchanged.map(o=>`${o.count} ${o.label}`).join(" \xB7 ")} \u2014 /view to browse`})]})}case"answer":return(0,g.jsx)(n,{color:s.dim,children:It(e.receipt)});case"continued":return(0,g.jsx)(n,{color:s.dim,children:"\u21B3 continued"});case"commit":return(0,g.jsxs)(b,{flexDirection:"column",children:[(0,g.jsx)(n,{color:e.ok?s.green:s.red,children:` ${e.ok?"\u2714":"\u2717"} ${e.line}`}),(e.warnings??[]).map((r,i)=>(0,g.jsx)(n,{color:s.dim,children:` \u26A0 ${r}`},`w-${i}`))]});case"error":return(0,g.jsxs)($e,{variant:"error",paddingX:1,children:[(0,g.jsx)(n,{color:s.red,children:e.title}),e.detail.map((r,i)=>(0,g.jsx)(n,{color:s.dim,children:r},`d-${i}`))]});case"interrupted":return(0,g.jsxs)(b,{flexDirection:"column",children:[(0,g.jsx)(n,{color:s.red,children:"interrupted \u2014 session not saved"}),e.detail?(0,g.jsx)(n,{color:s.dim,children:e.detail}):null]});case"pause":return(0,g.jsxs)(b,{flexDirection:"column",children:[(0,g.jsx)(n,{children:`paused: session ${e.sid} saved`}),e.expires_at?(0,g.jsx)(n,{color:s.dim,children:`expires: ${e.expires_at}`}):null,(0,g.jsx)(n,{children:`resume: ${e.resume}`}),e.messageForm?(0,g.jsx)(n,{children:`or say something on the way in: ${e.messageForm}`}):null]});case"summary":return(0,g.jsxs)(b,{flexDirection:"column",children:[(0,g.jsx)(n,{bold:!0,children:"session summary"}),e.lines.map((r,i)=>(0,g.jsx)(n,{children:` ${r}`},`s-${i}`))]})}}var je=R(B(),1),re="ctrl+t thinking \xB7 ctrl+c exit";function Ue(e,t){if(e.length<=t)return e;if(t<=1)return"\u2026";let r=Math.ceil((t-1)/2),i=Math.floor((t-1)/2);return`${e.slice(0,r)}\u2026${i>0?e.slice(-i):""}`}function We({verb:e,subject:t,turn:r,pendingCount:i,creditsTotal:m}){let{stdout:u}=W(),l=u?.columns??80,o=[];o.push(e),r&&o.push(`turn ${r}`),m!==void 0&&o.push(`${m.toFixed(1)} cr`);let a=i?`[${i} pending]`:null,f=" \xB7 ",y=[...o,...a?[a]:[]].join(f).length,x,I=[...o,...t?[t]:[],...a?[a]:[],re].join(f);if(I.length<=l)x=I;else{let d=l-y-(t?f.length:0)-f.length-re.length;if(t&&d>=8)x=[...o,Ue(t,d),...a?[a]:[],re].join(f);else{let k=l-y-(t?f.length:0);x=[...o,...t&&k>=4?[Ue(t,k)]:[],...a?[a]:[]].join(f)}}return(0,je.jsx)(n,{color:s.dim,children:x})}var C=R(B(),1),oe=(e,t)=>Math.max(0,Math.min(t,e));function Y(e,t,r){switch(t.type){case"move":return{...e,cursor:oe(e.cursor+t.delta,Math.max(0,r-1))};case"enter":return e.level==="list"?{...e,level:"detail"}:e;case"back":return e.level==="detail"?{...e,level:"list"}:null}}var Ke={"use-case":"use-cases",ac:"acs",scenario:"scenarios",test:"tests",gap:"gaps"};function He(e,t){if(e.level==="detail")return{level:"detail",cursor:oe(e.num-1,Math.max(0,t.entries.length-1))};if(e.section){let r=t.entries.findIndex(i=>Ke[i.kind]===e.section);if(r>=0)return{level:"list",cursor:r}}return{level:"list",cursor:0}}function Bt(e){let t=[];for(let r of e.entries){let i=t.find(m=>m.kind===r.kind);i?i.entries.push(r):t.push({kind:r.kind,entries:[r]})}return t}var Ve=3;function Dt({items:e,cursor:t,verb:r}){let i=`view \xB7 ${r} so far \xB7 ${e.counts.map(u=>`${u.count} ${u.count===1?u.label.replace(/s$/,""):u.label}`).join(" \xB7 ")}`,m=e.entries[t];return(0,C.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:s.dim,paddingX:1,children:[(0,C.jsx)(n,{bold:!0,children:i}),Bt(e).map(({kind:u,entries:l})=>{let o=m?.kind===u,a=o?l.findIndex(x=>x.ref===m.ref):-1,f=o?oe(a-1,Math.max(0,l.length-Ve)):0,h=l.slice(f,f+(o?Ve:1)),y=l.length-h.length;return(0,C.jsxs)(b,{flexDirection:"column",children:[(0,C.jsx)(n,{color:s.dim,children:`${Ke[u]??P(u)} \xB7 ${l.length}`}),h.map(x=>{let I=o&&x.ref===m.ref,d=x.item.badge;return(0,C.jsxs)(n,{children:[(0,C.jsx)(n,{color:s.generateAccent,children:I?"\u203A ":" "}),(0,C.jsx)(n,{children:`${x.num} \xB7 ${x.item.title}`}),d?(0,C.jsx)(n,{color:s.dim,children:` \xB7 ${d}`}):null]},`${x.kind}:${x.ref}`)}),y>0&&(0,C.jsx)(n,{color:s.dim,children:` \u22EE ${y} more`})]},u)}),(0,C.jsx)(n,{color:s.dim,children:"\u2191\u2193 move \xB7 \u21B5 detail \xB7 esc back to chat"})]})}function Et({items:e,cursor:t}){let r=e.entries[t];if(!r)return(0,C.jsx)(n,{color:s.dim,children:"nothing to show"});let i=r.item;return(0,C.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:s.dim,paddingX:1,children:[(0,C.jsx)(n,{bold:!0,children:`view \xB7 ${r.kind} ${r.num} of ${e.entries.length}`}),(0,C.jsx)(n,{children:r.item.title}),i.badge?(0,C.jsx)(n,{color:s.dim,children:`kind: ${i.badge}`}):null,i.why?(0,C.jsx)(n,{color:s.dim,children:i.why}):null,(0,C.jsx)(te,{item:r.item}),(0,C.jsx)(n,{color:s.dim,children:"view-only \u2014 approvals happen in chat"}),(0,C.jsx)(n,{color:s.dim,children:"\u2191\u2193 prev/next \xB7 esc back to list"})]})}function Qe({items:e,state:t,verb:r}){return t.level==="list"?(0,C.jsx)(Dt,{items:e,cursor:t.cursor,verb:r}):(0,C.jsx)(Et,{items:e,cursor:t.cursor})}var Xe=[{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"}],_t={"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 Ge(e){let t=(e??"").trim().toLowerCase();if(!t)return{level:"list"};if(/^\d+$/.test(t)){let i=parseInt(t,10);return i>=1?{level:"detail",num:i}:{error:"items are numbered from 1 \u2014 /view 1"}}let r=_t[t];return r?{level:"list",section:r}:{error:"try /view, /view <number>, or /view acs|scenarios|tests"}}var S=R(B(),1),Lt=6,Ye=12;function At(e,t,r){let i=Math.max(20,t),m=[];for(let l of e.split(`
|
|
3
|
-
`)){if(l.length<=i){m.push(l);continue}let o="";for(let a of l.split(" "))o&&o.length+1+a.length>i?(m.push(o),o=a):o=o?`${o} ${a}`:a;m.push(o)}let u=Math.max(0,m.length-r);return{body:m.slice(-r).join(`
|
|
4
|
-
`),hidden:u}}var Ot='chat with the agent \u2014 "/" for commands',ze=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function Pt(e,t){return t?" \u2014 Enter continues \xB7 or type to adjust":e==="design"?" \u2014 reply, or /done to finish":' \u2014 reply, "looks good" approves, /done finishes'}function En({controller:e,verb:t="extract",onCtrlC:r}){let[,i]=(0,v.useState)(0),[m,u]=(0,v.useState)(!1),[l,o]=(0,v.useState)(null),[a,f]=(0,v.useState)(null),h=(0,v.useRef)(null),y=c=>{h.current=c,f(c)},x=we(),{stdout:I}=W(),d=I?.columns??80,k=(0,v.useRef)(0),q=(0,v.useRef)(0),F=(0,v.useRef)(null);F.current||(F.current=new Te(null)),(0,v.useEffect)(()=>{let c=()=>{let T=e.state.ledger;for(let L=k.current;L<T.length;L++){let M=T[L],ht=M.kind==="turn"?qe(e.state.turns,M.turnIndex):void 0;x.append((0,S.jsx)(Ne,{block:M,annotations:ht},`lg-${L}`))}k.current=T.length};c();let p=e.subscribe(()=>{c();let T=e.state;h.current&&(T.pending||T.status==="pausing")&&(y(null),T.pending&&o("questions arrived \u2014 back to chat")),i(L=>L+1)});return i(T=>T+1),p},[e,x]);let{thinking:A,status:_,pending:w,confirm:N,ledger:se,activeTurn:ie,stream:Je,notice:K}=e.state,ae=(Je?.text??"").trimEnd(),ce=ae.length>0,Ze=m&&(A.liveThinking.length>0||A.thinkingLog.length>0),et=At(A.liveThinking||A.thinkingLog.map(c=>c.text).join(`
|
|
5
|
-
`),d-6,Ye),le=ce?ae.split(`
|
|
6
|
-
`).slice(-Lt):[];ie&&(q.current=ie.turnIndex);let tt=w?w.resolution.filter(c=>!c).length:0,ue;for(let c=se.length-1;c>=0;c--){let p=se[c];if(p.kind==="banner"&&!p.text.startsWith("kane")){ue=p.text;break}}let j=A.activity[A.activity.length-1],z=j?j.status==="decision"?j.label:Ie({name:j.name,status:j.status}):void 0,me=_==="streaming"||_==="working",[nt,rt]=(0,v.useState)(0);be(()=>rt(c=>c+1),me?120:null);let ot=e.state.busySince?Math.floor((Date.now()-e.state.busySince)/1e3):0,st=ce?"Writing\u2026":z?`${z.charAt(0).toUpperCase()}${z.slice(1)}\u2026`:e.state.workingLabel??(t==="design"?"Designing\u2026":"Thinking\u2026"),it=e.state.turns.some(c=>c.role==="agent"),[at,ct]=(0,v.useState)(0),[de,lt]=(0,v.useState)(!1),[pe,ut]=(0,v.useState)(null),H=(0,v.useRef)(0),ge=(0,v.useRef)(!1),fe=(0,v.useRef)(null),Q=c=>{H.current=c,ct(c)},xe=c=>{ge.current=c,lt(c)},U=c=>{fe.current=c,ut(c)},he=w&&w.cursor>=0?w.questions[w.cursor]:void 0,O=(0,v.useRef)(he);O.current=he;let J=(0,v.useRef)(w);J.current=w;let mt=w?`${w.questions[0]?.id??"b"}:${w.cursor}`:null;(0,v.useEffect)(()=>{if(U(null),O.current){xe(!0);let c=J.current?.resolution[J.current.cursor]?.selected_index;Q(c??O.current.recommended_index??0)}else xe(!1)},[mt]);let dt={isFocused:()=>ge.current&&O.current!=null&&fe.current==null,onMove:c=>{let p=O.current;if(!p)return;let T=p.allow_free_text?X(p):p.options.length-1;Q(Math.max(0,Math.min(T,H.current+c)))},onSelect:()=>{let c=O.current;if(c){if(c.allow_free_text&&H.current===X(c)){U("");return}e.submit(String(H.current+1))}},onDigit:c=>{let p=O.current;p&&c-1<p.options.length&&Q(c-1)},onType:c=>{let p=O.current;p?.allow_free_text&&(Q(X(p)),U(c))},onBack:()=>e.reopenQuestion()},pt=pe!=null?{value:pe,onChange:c=>U(c),onSubmit:c=>{U(null),c.trim()&&e.submit(c.trim())},onCancel:()=>U(null)}:null,gt=_==="streaming"&&!w||!!w&&de,ft=w?"answer in the panel above \u2014 \u2191/\u2193 + Enter, or just type your answer":Ot,Z=r??(()=>e.requestPause()),xt=c=>{let p=Ge(c);if("error"in p){o(p.error);return}let T=V(e.state.turns);if(T.entries.length===0){o("nothing proposed yet \u2014 the first turn is still coming");return}if(p.level==="detail"&&p.num>T.entries.length){o(`no item ${p.num} \u2014 the set has ${T.entries.length} item${T.entries.length===1?"":"s"}`);return}y(He(p,T))},ye=(0,S.jsx)(We,{verb:t,subject:ue,turn:q.current||void 0,pendingCount:tt,creditsTotal:e.state.credits?.total});if(a){let c=V(e.state.turns),p=c.entries.length;return(0,S.jsxs)(b,{flexDirection:"column",children:[(0,S.jsx)(ee,{onToggleThinking:()=>u(T=>!T),onCtrlC:Z,explorer:{isOpen:()=>h.current!==null,onClose:()=>{y(null),o("closed the explorer \u2014 your text didn't send, retype to chat"),setTimeout(()=>i(T=>T+1),0)},onMove:T=>y(h.current&&Y(h.current,{type:"move",delta:T},p)),onEnter:()=>y(h.current&&Y(h.current,{type:"enter"},p)),onBack:()=>{y(h.current&&Y(h.current,{type:"back"},p)),setTimeout(()=>i(T=>T+1),0)}}}),(0,S.jsx)(Qe,{items:c,state:a,verb:t}),(K??l)&&(K??l).split(`
|
|
7
|
-
`).map((T,L)=>(0,S.jsx)(n,{color:s.orange,children:T},`nt-${L}`)),ye]})}return(0,S.jsxs)(b,{flexDirection:"column",children:[(0,S.jsx)(ee,{onToggleThinking:()=>u(c=>!c),onCtrlC:Z,panel:dt}),Ze&&(0,S.jsx)(ke,{thinking:et.body,expanded:!0,thinkingDone:_!=="streaming",maxLines:Ye+1}),le.length>0&&(0,S.jsx)(b,{flexDirection:"column",children:le.map((c,p)=>(0,S.jsx)(n,{children:c},`st-${p}`))}),w&&(0,S.jsx)(De,{batch:w,sel:at,focused:de,freeText:pt}),N&&(0,S.jsx)(n,{color:"yellow",children:N.prompt}),(K??l)&&(K??l).split(`
|
|
8
|
-
`).map((c,p)=>(0,S.jsx)(n,{color:s.orange,children:c},`nt-${p}`)),me&&!w&&(0,S.jsxs)(n,{color:s.generateAccent,children:[`${ze[nt%ze.length]} ${st} `,(0,S.jsx)(n,{color:s.dim,children:`(${ot}s)`})]}),_==="idle"&&it&&!w&&!N&&(0,S.jsxs)(n,{color:s.generateAccent,children:["\u25CF your turn",(0,S.jsx)(n,{color:s.dim,children:Pt(t,e.state.checkpoint)})]}),_==="pausing"?(0,S.jsx)(n,{color:s.dim,children:"pausing \u2014 saving session\u2026 (ctrl+c again = force quit)"}):(0,S.jsx)(Ce,{history:F.current,placeholder:ft,accent:s.generateAccent,submitVerb:w?"answer":"send",submitEmpty:!!w||t==="design"&&e.state.checkpoint,inert:gt,commands:Xe,footerBindings:[{keys:"\u21B5",label:w?"answer":"send"},{keys:"\u2191\u2193",label:"history"},{keys:"ctrl+t",label:"thinking"},{keys:"ctrl+c",label:"exit"}],onSubmit:c=>{let p=c.trim();if(!p){w?e.submit(""):t==="design"&&e.state.checkpoint&&e.continueParked();return}if(o(null),p.startsWith("/")){let[T="",...L]=p.slice(1).split(/\s+/),M=L.join(" ");if(!T){o('type "/" then a command \u2014 /view, /explain, /pause, /done');return}switch(T.toLowerCase()){case"view":xt(M);return;case"explain":if(!M){o("usage: /explain <ref> \u2014 e.g. /explain guest-checkout");return}e.explainRef(M);return;case"pause":Z();return;case"done":case"exit":e.completeSession();return;default:o(`unknown command "/${T}" \u2014 try /view, /explain, /pause, /done`);return}}e.submit(p)}}),ye]})}export{En as ChatSurface,At as tailVisualRows,Pt as yourTurnTail};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-EDM6YACR.js";import"./chunk-RFHMDQXZ.js";import"./chunk-YZBLBPOE.js";import"./chunk-CJJXT5DO.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-M5JQXOCE.js";import"./chunk-3NR6OTHL.js";import"./chunk-NMKZHHB6.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as EvidenceViewOffer};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-YTZUYCFZ.js";import"./chunk-Y6HPW2OQ.js";import"./chunk-R7NNIQMH.js";import"./chunk-SK2GVMTJ.js";import"./chunk-QYTMD6NM.js";import"./chunk-DL5CXC64.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-L5LI2JF4.js";import"./chunk-FYSWQ4K7.js";import"./chunk-X47VFBIV.js";import"./chunk-YCCUBQY4.js";import"./chunk-XUHVQ5VL.js";import"./chunk-M5JQXOCE.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-3NR6OTHL.js";import"./chunk-VE3SUJMA.js";import"./chunk-Z34XRBKQ.js";import"./chunk-RGQIBS32.js";import"./chunk-NMKZHHB6.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{g as a}from"./chunk-5J3HQZNU.js";import"./chunk-6EC54ZHT.js";import"./chunk-NEHF4C6X.js";import"./chunk-QYTMD6NM.js";import"./chunk-WFQUDSKY.js";import"./chunk-5Y2G4NC7.js";import"./chunk-M5JQXOCE.js";import"./chunk-3NR6OTHL.js";import"./chunk-TADJIOHV.js";import"./chunk-KVAALPTA.js";import"./chunk-DFS4RMVP.js";import"./chunk-NMKZHHB6.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as TestMdRunView};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as V,c as ne}from"./chunk-JFAFKHDX.js";import{b as X,c as Z,d as ee}from"./chunk-VLC24QVT.js";import"./chunk-CIFVUX3B.js";import{a as w,b as te}from"./chunk-OSALXGD4.js";import{a as oe}from"./chunk-427OQS2N.js";import{d as Q}from"./chunk-NVGBE2DR.js";import{a as z}from"./chunk-QHFUDBQH.js";import"./chunk-RGDQMKNJ.js";import{a as j,b as F}from"./chunk-L4JIMNKW.js";import{c as W,e as Y}from"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import{e as L,f as A,g as J,h as x}from"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var ce=new Set(["approve","edit","reject"]);function Ie(k){let{contextDir:f,graph:o,ops:se,by:l}=k,N=k.mintable??oe(),T=W(f);if(o.latestHash!==T)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(o.latestHash)} but chain head is ${String(T)} \u2014 re-open and retry`}]};let C=[],h=[],M=new Set;for(let e of se){if(o.appliedEvents.has(e.eventId)||M.has(e.eventId)){C.push(e.eventId);continue}M.add(e.eventId),h.push(e)}if(h.length===0)return{record:null,errors:null,applied:[],skipped:C,minted:[],staleDelta:[]};let s=[],$=[],y=[],m=[],I=[],O=[],_=[...k.judgements??[]],D=[],q=new Map,B=new Set,G=[],b=new Set,ie=new Set(N),H=new Set;for(let e of h){if(!ce.has(e.kind))continue;let n=e.target,t=o.resolve(n)?.cid??n;H.has(t)&&s.push({code:"MULTIPLE_TERMINAL_OPS",detail:`${n} has more than one terminal op in this turn \u2014 normalize latest-wins first`}),H.add(t)}let S=(e,n,t)=>{let d=o.resolve(n);if(!d)return s.push({code:"UNKNOWN_NODE",detail:`${e}: ${n} names nothing in the graph`}),null;let p=o.tipOf(d.cid);return p!==t||o.superseded.has(t)?(s.push({code:"EXPECTED_CID_MOVED",detail:`${e}: ${n} moved or was archived since it was displayed`,data:{tip:p}}),null):t};for(let e of h)if(e.kind==="approve"){let n=S("approve",e.target,e.expectedCid);n&&m.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l})}else if(e.kind==="reject"){let n=S("reject",e.target,e.expectedCid);if(!n)continue;if(m.push({id:n,kind:"review-item",resolution:"rejected",edit:null,reason:e.reason,by:l}),e.redirectTo!==void 0){let t=o.resolve(e.redirectTo);if(!t||t.superseded){s.push({code:"UNKNOWN_NODE",detail:`reject.redirectTo: ${e.redirectTo} is not a live node`});continue}I.push({kind:"node",old:n,new:t.cid,reason:e.reason,by:l})}}else if(e.kind==="edit"){let n=S("edit",e.target,e.expectedCid);if(!n)continue;let t=o.getNode(n);if(!t){s.push({code:"UNKNOWN_NODE",detail:`edit: ${e.target} node file unreadable`});continue}let d={...t.content};for(let[r,g]of Object.entries(e.edit))g!==void 0&&(d[r]=g);if(typeof d.title=="string"&&!d.title.trim()){s.push({code:"EMPTY_TITLE",detail:`edit: ${e.target} edited title is empty`});continue}let p=A(t.label,d);if(p.length>0){for(let r of p)s.push({code:r.code,detail:`edit ${e.target}: ${r.detail}`});continue}let c=j(t.label,d);if(c===n){m.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l});continue}$.push({cid:c,label:t.label,content:d}),I.push({kind:"node",old:n,new:c,reason:e.reason??"edited in chat",by:l}),m.push({id:c,kind:"review-item",resolution:"edited",edit:{...e.edit},reason:null,by:l})}else if(e.kind==="enhance"){if(!S("enhance",e.target,e.expectedCid))continue;for(let t of e.edges){let d=o.nodeLabel.get(t.src)??"(unknown)",p=o.nodeLabel.get(t.dst)??"(unknown)";for(let i of x(t.type,d,p,t.props))s.push({code:i.code,detail:`enhance ${e.target}: ${i.detail}`});let c=F(t.type,t.src,t.dst,t.props);if(o.edgesFrom(t.src).some(i=>i.ecid===c)||y.some(i=>i.ecid===c))continue;let r=Z(o,t.type,t.src,t.dst,G);r&&s.push(r);let g=ee(o,t.type,t.src,t.dst);g&&s.push(g);let a=J(t.type)?.cardinality;if(a==="one-live-per-src"||a==="one-live-per-src-and-dst"){let i=`${t.type}|${t.src}`;b.has(i)&&s.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} from ${t.src}: two one-live edges in one turn`}),b.add(i)}if(a==="one-live-per-src-and-dst"){let i=`${t.type}|dst|${t.dst}`;b.has(i)&&s.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} onto ${t.dst}: two one-live edges in one turn (strict 1:1)`}),b.add(i)}y.push({ecid:c,type:t.type,src:t.src,dst:t.dst,props:t.props}),G.push({src:t.src,dst:t.dst,type:t.type})}}else if(e.kind==="add"){if(!ie.has(e.label)){s.push({code:"GATED_LABEL",detail:`add: ${e.label} is not mintable in v1 (gate: ${N.join("|")})`,data:{gate:[...N]}});continue}let n=o.heads.get(e.convSourceId),t=o.convChains.get(e.convSourceId);if(typeof n!="string"||!t){s.push({code:"CONV_SOURCE_MISSING",detail:`add: ${e.convSourceId} is not a live conversation source`});continue}let d=o.getNode(n)?.content?.blob,p=typeof d=="string"?Q(f,d)?.toString("utf8")??"":"",c=te(p,e.cite.turn);if(c===null){s.push({code:"BAD_ANCHOR",detail:`add: ${w(e.cite.turn)} does not resolve in ${e.convSourceId}`});continue}if(!c.includes(e.cite.quote)){s.push({code:"QUOTE_MISMATCH",detail:`add: quote is not verbatim within ${w(e.cite.turn)}`});continue}let r={...e.content,derived:!0},g=A(e.label,r);if(g.length>0){for(let u of g)s.push({code:u.code,detail:`add: ${u.detail}`});continue}let a=j(e.label,r),i={source_id:e.convSourceId,source_cid:n,anchor:w(e.cite.turn),quote:e.cite.quote};for(let u of x(L.DERIVES,"source",e.label,i))s.push({code:u.code,detail:`add: ${u.detail}`});$.push({cid:a,label:e.label,content:r}),y.push({ecid:F("DERIVES",n,a,i),type:L.DERIVES,src:n,dst:a,props:i}),e.rationale&&_.push({about:a,rationale:e.rationale,by:l});let P=typeof r.title=="string"?r.title:typeof r.intent=="string"?r.intent:"",v=P?X(e.label,P,u=>B.has(u)||o.names.has(u)&&!o.superseded.has(o.names.get(u))):null;v!==null&&(B.add(v),O.push({cid:a,slug:v,by:l})),D.push({cid:a,...v!==null?{slug:v}:{}}),q.set(e.eventId,a)}if(s.length)return{record:null,errors:s};let U=new Date().toISOString();for(let e of h){if(e.kind==="add"){let n=q.get(e.eventId);n&&V(f,{ts:U,command:"extract-chat",id:n,verdict:"add",polarity:"preference",tag:e.label,by:l,event_id:e.eventId,target:n});continue}for(let n of ne(e,{ts:U,command:"extract-chat",by:l}))V(f,n)}let K=h.map(e=>e.eventId).sort(),re=Y(f,{ts:new Date().toISOString(),proposal_id:null,nodes:$,edges:y,review:m,supersessions:I,...O.length>0?{names:O}:{},..._.length>0?{judgements:_}:{},event_ids:K,source_head_moves:{}},{expectPrev:T}),R=z(f),E=new Set;for(let e of I)if(e.kind==="node"){E.add(e.old);for(let n of R.edgesInto(e.old))E.add(n.src)}for(let e of D)E.add(e.cid);let de=[...E].map(e=>({cid:e,state:R.stale(R.tipOf(e))})).filter(e=>e.state!=="fresh");return{record:re.record,errors:null,applied:K,skipped:C,minted:D,staleDelta:de}}export{Ie as commitChatTurn};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as J,b as X,c as Y,d as Z}from"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import{b as P,d as V}from"./chunk-OSALXGD4.js";import{d as K}from"./chunk-NVGBE2DR.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var re=new Set(["approve","edit","reject"]);function se(r,t){return`chatop:${t}:${r.target??"new"}:${r.op}:${r.seq}`}function oe(r,t,y,c){let u=se(r,t),m=r.payload;switch(r.op){case"approve":return{kind:"approve",target:r.target,expectedCid:r.expected_cid,eventId:u};case"edit":{let{reason:i,...h}=m;return{kind:"edit",target:r.target,expectedCid:r.expected_cid,edit:h,reason:i,eventId:u}}case"enhance":return{kind:"enhance",target:r.target,expectedCid:r.expected_cid,edges:m.edges??[],eventId:u};case"reject":return{kind:"reject",target:r.target,expectedCid:r.expected_cid,reason:m.reason??"",redirectTo:m.redirect_to,eventId:u};case"add":{let i=m.proposal_item??{},h=String(i.label??"");if(!y.mint_gate.includes(h))throw new Error(`GATED_LABEL: cannot mint "${h}" (gate: ${y.mint_gate.join(", ")})`);let d=i.cite??{},a=i.conv_source_id??c;if(!a||typeof d.turn!="number"||!d.quote)throw new Error("INVALID_ADD: a chat add requires a conversation cite {turn, quote} and conv_source_id");return{kind:"add",label:h,content:i.content??{},cite:{turn:d.turn,quote:d.quote},convSourceId:a,rationale:i.rationale,eventId:u}}}}function ee(r,t,y={}){let c=y.turn??0,u=[],m=[];for(let d of r)(d.op==="add"||d.op==="enhance")&&m.push(d);let i=new Map;for(let d of r){if(!re.has(d.op)||!d.target)continue;let a=i.get(d.target)??[];a.push(d),i.set(d.target,a)}for(let[d,a]of i){let b=Math.max(...a.map(_=>_.seq)),C=a.filter(_=>_.seq===b);if(C.length>1){u.push({target:d,seq:b,kinds:C.map(_=>_.op)});continue}m.push(C[0])}return{chatOps:m.sort((d,a)=>d.seq-a.seq).map(d=>oe(d,c,t,y.convSourceId)),ambiguous:u}}function ae(r,t){let y=r.trim();if(y==="")return{kind:"defaults"};if(/^defer$/i.test(y))return{kind:"defer-all"};let c=t.cursor,u=y,m=/^(\d+):\s*(.*)$/.exec(y);if(m){let a=Number(m[1]);if(a<1||a>t.questions.length)return{kind:"invalid",target:null,message:`no question ${a} \u2014 this batch has ${t.questions.length}`};if(c=a-1,u=m[2].trim(),!u)return{kind:"invalid",target:c,message:`say what to answer \u2014 e.g. \`${a}: yes\``}}if(c<0||c>=t.questions.length)return{kind:"invalid",target:null,message:"no pending question to answer"};let i=t.questions[c],h=/^"(.*)"$/.exec(u);if(h)return i.allow_free_text?{kind:"free",target:c,text:h[1]}:{kind:"invalid",target:c,message:`question ${c+1} takes an option (1-${i.options.length}) \u2014 free text isn't allowed here`};if(i.multi_select&&/^\d+(\s+\d+)+$/.test(u)){let a=u.split(/\s+/).map(Number);if(a.every(b=>b>=1&&b<=i.options.length))return{kind:"multi",target:c,indices:a.map(b=>b-1)}}if(/^\d+$/.test(u)){let a=Number(u);if(a>=1&&a<=i.options.length)return{kind:"option",target:c,index:a-1}}let d=i.options.findIndex(a=>a.label.toLowerCase()===u.toLowerCase());return d>=0?{kind:"option",target:c,index:d}:i.allow_free_text?{kind:"free",target:c,text:u}:{kind:"invalid",target:c,message:`question ${c+1} takes an option \u2014 type 1-${i.options.length} or an option name`}}function te(r){let t=r.text.replace(/\?+\s*$/,"");return t.length<=36?t:`${t.slice(0,33)}\u2026`}function ue(r){return r.use_cases??[]}var de={acs:"acceptance criteria",scenarios:"scenarios",tests:"tests",gaps:"gaps"};function ce(r){let t=[],y=[],c=(i,h)=>{h.length!==0&&(y.push(i),t.push(...h))},u=i=>typeof i=="string"&&/^[a-z]{1,4}\d{1,4}$/i.test(i)?i:null,m=i=>{let h=u(i.automates)??"1 scenario",d=i.verifies??[],a=d.map(u).filter(_=>_!==null).slice(0,2),b=d.length-a.length,C=a.length?`${a.join(" ")}${b>0?` +${b}`:""}`:`${d.length} ACs`;return`covers ${h} \xB7 verifies ${C}`};return c("acs",(r.acs??[]).map(i=>({temp_ref:i.temp_ref,title:i.text,kind:"ac",badge:String(i.kind),extra:{...i.expected_answer?{expects:`${String(i.expected_answer.operator??"")} \xB7 ${String(i.expected_answer.operand??"")}`}:{},"scoped to":i.scoped_to??"(use-case)"}}))),c("scenarios",(r.scenarios??[]).map(i=>({temp_ref:i.temp_ref,title:i.title,kind:"scenario",badge:i.case_type,why:i.intent,depends_on_hint:i.depends_on??[],extra:{technique:i.technique_notes}}))),c("tests",(r.tests??[]).map(i=>({temp_ref:i.temp_ref,title:i.title,kind:"test",why:m(i),depends_on_hint:i.reuses??[],extra:{automates:String(i.automates??"?"),verifies:(i.verifies??[]).join(", "),check:i.check?`${String(i.check.kind)} vs ${String(i.check.verified_against)}`:"?"}}))),c("gaps",(r.gaps??[]).map(i=>({temp_ref:i.temp_ref??i.ref??"?",title:String(i.question?.header??i.kind),kind:"gap",badge:i.kind,why:i.risk_rationale}))),{items:t,heading:y.join(" + ")||"design"}}function ke(r={}){let t={turns:[],thinking:X(),pending:null,confirm:null,status:"idle",ledger:[],activeTurn:null,stream:null,checkpoint:!1},y=e=>{let n=[],o=e.minted.map(p=>p.slug).filter(Boolean);o.length&&n.push(`added ${o.join(", ")}`);let s=e.applied.length-e.minted.length;return s>0&&n.push(`${s} change${s===1?"":"s"} applied`),e.staleDelta.length&&n.push(`stales ${e.staleDelta.length}`),n.join(" \xB7 ")||"no changes"},c=[];r.onRender&&c.push(r.onRender);let u=0,m=0,i=null,h=null,d=null,a=[],b=0,C=e=>{if(!(!d||!r.contextDir||!e.trim()))try{let n=r.refreshGraph?.()??r.graph;if(!n)return;V({contextDir:r.contextDir,graph:n,sourceId:d,text:e,by:r.by??{kind:"human",id:"owner"}})}catch{}},_=e=>{if(!d||!r.contextDir)return;let n=r.refreshGraph?.()??r.graph,o=n?.heads.get(d),s=n?.convChains.get(d);if(!n||typeof o!="string"||!s)return;let p=n.getNode(o)?.content?.blob,f=typeof p=="string"?K(r.contextDir,p)?.toString("utf8")??"":"";if(f)for(let v of e){if(v.kind!=="add"||v.convSourceId!==d)continue;let O=P(f,v.cite.turn);if(!(O!==null&&O.includes(v.cite.quote)))for(let $=s.turns;$>=1;$--){let L=P(f,$);if(L!==null&&L.includes(v.cite.quote)){v.cite={...v.cite,turn:$};break}}}},j=null,E=new Map,Q=new Map,B=null,x=()=>{I&&(clearTimeout(I),I=null);for(let e of c)e()},I=null,W=()=>{I||(I=setTimeout(()=>{I=null;for(let e of c)e()},80))},l=e=>{t.ledger.push(e)},D=null,M=!1,A=(e=!1)=>{D?l({kind:"agent",text:D}):e&&M&&l({kind:"note",text:'chat to refine ("looks good" approves; /done finishes)'}),D=null,M=!1},ne=()=>{D=null,M=!1},R=()=>{t.activeTurn&&(t.activeTurn=null)},G=(e,n)=>n.choice||(n.selected_index!=null?e.options[n.selected_index]?.label??"?":"?"),U=()=>{let e=t.pending;if(!e)return;if(!e.resolution.every(Boolean)){e.cursor=e.resolution.findIndex(s=>s===null);return}let n=e.questions.map((s,p)=>{let f=e.resolution[p];return f.form==="deferred"?{id:s.id,selected_index:null,free_text:null}:f.free_text!=null?{id:s.id,selected_index:null,free_text:f.free_text}:{id:s.id,selected_index:f.selected_index,free_text:null}});t.pending=null,t.status=t.status==="pausing"?"pausing":"streaming";let o=j;j=null,o?.(n)},T=(e,n)=>{let o=t.pending,s=o.questions[e],p=o.resolution[e];o.resolution[e]=n;let f=te(s);p?l({kind:"answer",receipt:{form:"changed",qNum:e+1,stub:f,choice:G(s,n),prev:p.choice}}):n.form==="deferred"?l({kind:"answer",receipt:{form:"deferred",qNum:e+1,stub:f}}):l({kind:"answer",receipt:{form:n.form,qNum:e+1,stub:f,choice:G(s,n)}})},N=()=>{let e=t.pending;e&&(e.questions.forEach((n,o)=>{e.resolution[o]||T(o,{form:"deferred",selected_index:null,free_text:null,choice:""})}),U())},F=e=>({questions:e,cursor:0,resolution:e.map(()=>null)}),ie=e=>{let n=t.pending;t.notice=void 0;let o=ae(e,n);switch(o.kind){case"invalid":t.notice=o.message;return;case"defaults":{let s=!1;if(n.questions.forEach((p,f)=>{if(!n.resolution[f]){if(p.risk==="high"){s=!0;return}T(f,{form:"assumed",selected_index:p.recommended_index,free_text:null,choice:p.options[p.recommended_index]?.label??"?"})}}),s){n.cursor=n.questions.findIndex((p,f)=>!n.resolution[f]),t.notice="high-risk questions need an explicit answer (or type 'defer' to leave them with the agent)";return}break}case"defer-all":N();return;case"option":{let s=n.questions[o.target];T(o.target,{form:"answered",selected_index:o.index,free_text:null,choice:s.options[o.index]?.label??String(o.index+1)});break}case"free":T(o.target,{form:"answered",selected_index:null,free_text:o.text,choice:o.text});break;case"multi":{let s=n.questions[o.target],p=o.indices[0];T(o.target,{form:"answered",selected_index:p,free_text:null,choice:s.options[p]?.label??String(p+1)}),t.notice="multi-select not yet supported end-to-end \u2014 sent your first choice";break}}U()};return{state:t,explainRef(e){if(!r.explain||!r.graph||r.contextDir===void 0){l({kind:"note",text:"explain isn't available here"}),x();return}let n=r.explain(r.contextDir,r.graph,e),o=n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(s=>` [${s.kind}] ${s.rationale??s.detail}`)].join(`
|
|
3
|
-
`):`unknown ref: ${e}`;l({kind:"note",text:o}),x()},subscribe(e){return c.push(e),()=>{let n=c.indexOf(e);n>=0&&c.splice(n,1)}},submit(e){if(t.confirm&&(t.confirm=null),t.pending){ie(e),x();return}if(!i){t.turns.push({role:"user",text:e}),l({kind:"user",text:e}),t.notice="the agent isn't running \u2014 nothing sent",x();return}for(t.notice=void 0,t.checkpoint=!1,A(),t.turns.push({role:"user",text:e}),l({kind:"user",text:e}),C(e),t.status="streaming",t.busySince=Date.now(),t.error=void 0,m+=1;a.length>0;)m+=1,i({type:"user_message",message_id:`u${m}-receipt`,text:a.shift()});i({type:"user_message",message_id:`u${m}`,text:e}),x()},attachSender(e){i=e},attachOnCommitted(e){h=e},attachConversationSource(e){d=e},holdReceipt(e){a.push(e),t.checkpoint=!0,x()},drainHeldReceipts(){return a.splice(0,a.length)},reopenQuestion(){let e=t.pending;if(!e)return;let n=e.cursor<0?e.questions.length:e.cursor;for(let o=n-1;o>=0;o--)if(e.resolution[o]){e.cursor=o,x();return}},continueParked(){if(!(!i||a.length===0)){for(t.checkpoint=!1,l({kind:"continued"});a.length>0;)m+=1,i({type:"user_message",message_id:`u${m}-receipt`,text:a.shift()});m+=1,i({type:"user_message",message_id:`u${m}`,text:"continue"}),t.status="streaming",t.busySince=Date.now(),x()}},note(e){l({kind:"note",text:e}),x()},registerAliases(e){for(let n of e)Q.set(n.ref,n.cid)},setWorking(e){if(e!=null){if(t.status!=="idle"&&t.status!=="working")return;t.status==="idle"&&(t.busySince=Date.now()),t.status="working",t.workingLabel=e}else{if(t.status!=="working")return;t.status="idle",t.workingLabel=void 0}x()},ledger(e){(e.kind==="pause"||e.kind==="error"||e.kind==="summary")&&(R(),A()),(e.kind==="summary"||e.kind==="pause")&&(t.stream=null),l(e),e.kind==="commit"&&(e.ok?A(!0):ne()),x()},completeSession(){N(),i?.({type:"session_complete"}),t.status="idle",x()},requestPause(){N(),t.status="pausing";let e=i;Promise.resolve().then(()=>e?.({type:"pause"})),x()},ask(e){return t.pending=F(e),E=new Map(e.map((n,o)=>[n.id,o+1])),t.status="awaiting-input",x(),new Promise(n=>{j=n})},noteCoercion(e,n){l({kind:"answer",receipt:{form:"assumed",qNum:E.get(e.id)??0,stub:te(e),choice:n,note:"your typed answer couldn't be used here"}}),x()},onAgentEvent(e){switch(e.type){case"reasoning_delta":case"reasoning_done":case"tool_activity":case"decision_activity":{let n=t.thinking;if(t.thinking=Z(n,e),t.thinking!==n){if(e.type==="reasoning_done"&&e.present)l({kind:"thinking",tookMs:e.took_ms});else if(e.type==="tool_activity"&&e.status!=="started")l({kind:"tool",name:e.name,status:e.status==="done"?"ok":e.status,detail:e.detail});else if(e.type==="decision_activity"){let o=`\xB7 ${Y(e)}`,s=t.ledger[t.ledger.length-1];s&&s.kind==="note"&&s.text===o||l({kind:"note",text:o})}}if(e.type==="reasoning_delta"){W();return}break}case"usage":t.credits={turn:e.credits,total:e.total_credits};break;case"text_delta":{let n=B;if(n&&(e.turn_id<n.turn_id||e.turn_id===n.turn_id&&e.attempt<n.attempt))return;(!n||n.turn_id!==e.turn_id||n.attempt!==e.attempt)&&(B={turn_id:e.turn_id,attempt:e.attempt},t.stream={text:""}),t.stream={text:(t.stream?.text??"")+e.text},W();return}case"progress":break;case"proposal":{u+=1,R(),t.stream=null,t.busySince&&(l({kind:"note",text:`\u2713 done in ${Math.max(1,Math.round((Date.now()-t.busySince)/1e3))}s`}),t.busySince=void 0);let n=ue(e.proposal),o=r.dedupFlags?.(e.proposal);if(o)for(let s of n){let p=o.get(s.temp_ref);p&&(s.matches_existing=p)}t.turns.push({role:"agent",turnIndex:u,items:n,text:e.narrative}),D=e.narrative??null,M=!0,t.activeTurn={turnIndex:u,heading:"use-cases",items:n},l({kind:"turn",turnIndex:u,heading:"use-cases",items:n}),(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"design":{u+=1,R(),t.stream=null,t.busySince&&(l({kind:"note",text:`\u2713 done in ${Math.max(1,Math.round((Date.now()-t.busySince)/1e3))}s`}),t.busySince=void 0);let{items:n,heading:o}=ce(e.design),s=o.split(" + ").map(p=>de[p]??p).join(" + ");l({kind:"banner",text:`designing: ${s}`}),t.turns.push({role:"agent",turnIndex:u,items:n,itemsHeading:o,text:e.narrative}),D=e.narrative??null,M=!0,t.activeTurn={turnIndex:u,heading:o,items:n},l({kind:"turn",turnIndex:u,heading:o,items:n}),(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"ask_user":t.pending=F(e.questions),t.status="awaiting-input";break;case"chat_ops":{u+=1,R(),t.stream=null,t.status==="streaming"&&(t.status="idle");let n=e.chat_ops??e,o=Array.isArray(n.ops)?n.ops:[],s=n.text??e.text??"",p=r.refreshGraph?.()??r.graph,f=g=>Q.get(g)??g,v=o.map(g=>{if(!g.target)return g;let k=f(g.target),w=g.expected_cid;if(w==null&&p){let H=p.resolve(k);H&&(w=p.tipOf(H.cid))}let S=g.payload?.redirect_to,q=S&&f(S);return k===g.target&&w===g.expected_cid&&q===S?g:{...g,target:k,expected_cid:w,...q!==S?{payload:{...g.payload,redirect_to:q}}:{}}}),O;try{if(!Array.isArray(n.ops))throw new Error("the agent sent an unreadable change set (no ops array) \u2014 say it again in different words");O=ee(v,r.descriptor??{mint_gate:[]},{turn:u,...d?{convSourceId:d}:{}})}catch(g){t.error=g instanceof Error?g.message:String(g),t.turns.push({role:"agent",turnIndex:u,text:s,narration:t.error}),s&&l({kind:"agent",text:s}),l({kind:"error",title:t.error,detail:[]});break}let{chatOps:$,ambiguous:L}=O;if(L.length>0){let g=L[0];t.confirm={kind:"ambiguity-confirm",prompt:`did you mean edit or ${g.kinds.filter(k=>k!=="edit").join("/")} on ${g.target}?`},t.turns.push({role:"agent",turnIndex:u,text:s}),s&&l({kind:"agent",text:s});break}if(_($),r.commitChatTurn&&$.length>0){let g=r.commitChatTurn({contextDir:r.contextDir??"",graph:r.refreshGraph?.()??r.graph,ops:$,by:r.by??{kind:"human",id:"owner"},...r.descriptor?.mint_gate?{mintable:r.descriptor.mint_gate}:{}});if(g.errors)t.error=g.errors.map(k=>k.detail).join("; "),t.turns.push({role:"agent",turnIndex:u,text:s}),l({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:g.errors.map(k=>`${k.code}: ${k.detail}`)}),a.push(["COMMIT FAILED (chat turn) \u2014 nothing landed; do not assume any of your last ops applied.",...g.errors.map(k=>`- ${k.code}: ${k.detail}`),...g.errors.some(k=>k.code==="UNKNOWN_FIELD")?["If you were changing citations or matched-existing content, that is proposal territory (approve/re-propose) \u2014 a chat edit can only replace a node's own schema fields."]:[]].join(`
|
|
4
|
-
`)),s&&l({kind:"agent",text:s});else{g.applied.length>0&&r.session?.markApplied(g.applied);let k=y(g);t.turns.push({role:"agent",turnIndex:u,text:s,narration:k}),l({kind:"commit",ok:!0,line:k});let w=r.refreshGraph?.();if(w&&h&&h(w),w)try{b+=1;let z=r.descriptor?.mint_gate?.includes("usecase")?"extract":"design",S=J({verb:z,commitN:b,phase:"chat",committed:g.minted.map(q=>({cid:q.cid,...q.slug?{logical_id:q.slug}:{}}))},w);a.push(S.text)}catch{}s&&l({kind:"agent",text:s})}}else t.turns.push({role:"agent",turnIndex:u,text:s}),s&&l({kind:"agent",text:s});C(s);break}case"done":case"session_complete":R(),A(),t.status="idle",i=null;break;case"error":R(),A(),t.stream=null,t.status="idle",t.error=e.message,i=null,l({kind:"error",title:e.message,detail:[]});break;case"session_paused":break;default:break}x()}}}export{ke as makeChatController,ae as parseAnswerInput,te as questionStub};
|
package/dist/chunk-64LC36AF.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{i as v}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as m}from"./chunk-UR6MHSHU.js";var f=m(w(),1);function E({onToggleThinking:d,onCtrlC:a,explorer:e,panel:n}){let t=(0,f.useRef)(null),u=(0,f.useRef)(""),c=()=>{t.current&&clearTimeout(t.current),t.current=null,u.current=""};return(0,f.useEffect)(()=>c,[]),v((o,r)=>{if(r.ctrl&&o==="t"){d();return}if(r.ctrl&&o==="c"){a();return}if(!r.ctrl&&o.includes("")){a();return}if(!r.ctrl&&o.includes("")){d();return}if(e&&e.isOpen()){let i=()=>{t.current&&clearTimeout(t.current),t.current=setTimeout(()=>{c(),e.onBack()},150)};if(t.current){if(r.upArrow||r.downArrow||r.return){c(),r.return?e.onEnter():e.onMove(r.upArrow?-1:1);return}if(u.current+=o,u.current==="["){i();return}let l=u.current;c();let s=/^\[([AB])/.exec(l);if(s){e.onMove(s[1]==="A"?-1:1);return}e.onBack();return}if(r.upArrow){e.onMove(-1);return}if(r.downArrow){e.onMove(1);return}if(r.return){e.onEnter();return}if(r.escape){u.current="",i();return}if(o.length>=2&&!r.ctrl&&!r.meta){e.onClose();return}return}if(n&&n.isFocused()){let i=()=>{t.current&&clearTimeout(t.current),t.current=setTimeout(()=>{c(),n.onBack()},150)};if(t.current){if(r.upArrow||r.downArrow||r.return){c(),r.return?n.onSelect():n.onMove(r.upArrow?-1:1);return}if(u.current+=o,u.current==="["){i();return}let l=u.current;c();let s=/^\[([AB])/.exec(l);if(s){n.onMove(s[1]==="A"?-1:1);return}n.onBack();return}if(r.upArrow){n.onMove(-1);return}if(r.downArrow){n.onMove(1);return}if(r.return){n.onSelect();return}if(r.escape){u.current="",i();return}if(/^[1-9]$/.test(o)){n.onDigit(Number(o));return}if(o&&!r.ctrl&&!r.meta){n.onType(o);return}return}}),null}export{E as a};
|
package/dist/chunk-6PS65QFF.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
var n={graph_search_similar:"search graph",graph_get_node:"read node",graph_get_edges:"read edges",graph_match_by_type:"match by type",graph_find_by_provenance:"trace provenance",graph_stale_nodes:"check stale",ask_user:"ask",finalize_proposal:"propose use-cases",chat_turn:"apply changes",read_image:"read image",source_read:"read source",source_grep:"search source",finalize_design:"propose design",expand_bva:"expand boundaries",covering_array:"combine classes",dedupe_candidates:"dedupe",budget_cut:"trim to budget"};function s(e){let r=n[e.name],t=e.status==="error"||e.status==="aborted"?" \u2717":"",a=e.detail?` \u2014 ${e.detail}`:"";return r?`\u2692 ${r}${a}${t}`:`\u2692 working\u2026${a}${t}`}function o(e){return s(e).replace(/^\S+ /,"")}export{s as a,o as b};
|
package/dist/chunk-CIFVUX3B.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
var d=/^L([1-9]\d*)-L([1-9]\d*)$/,l=/^img#(p[1-9]\d*-[1-9]\d*)$/;function a(e){if(e==="img#whole")return{kind:"img-whole"};let n=l.exec(e);if(n)return{kind:"img-part",ref:n[1]};let r=d.exec(e);return r?{kind:"lines",a:parseInt(r[1],10),b:parseInt(r[2],10)}:null}function u(e,n){let r=/^L(\d+)-L(\d+)$/.exec(n);if(!r)return null;let t=parseInt(r[1],10),o=parseInt(r[2],10),i=e.split(`
|
|
3
|
-
`);return t<1||o<t||o>i.length?null:i.slice(t-1,o).map(s=>s.replace(/^\d+\| /,"")).join(`
|
|
4
|
-
`)}function g(e,n,r){let t=a(n.anchor);if(e.format==="image")return t?.kind==="img-whole"?[]:[{code:"CITE_ANCHOR_INVALID",detail:`image cites are anchor-only (img#whole), got ${n.anchor}`}];if(t?.kind==="img-part")return new Set((e.images??[]).map(s=>s.ref)).has(t.ref)?[]:[{code:"CITE_ANCHOR_INVALID",detail:`anchor ${n.anchor} names no embedded image of this source version`}];if(!n.anchor||n.quote===void 0||n.quote==="")return[{code:"MISSING_CITE",detail:"text-kind cites need anchor+quote"}];let o=r!==null?u(r,n.anchor):null;return o===null?[{code:"BAD_ANCHOR",detail:`anchor ${n.anchor} does not resolve in the source`}]:o.includes(n.quote)?[]:[{code:"QUOTE_MISMATCH",detail:`quote is not verbatim within ${n.anchor}`}]}export{a,u as b,g as c};
|