@testmuai/kane-cli 0.7.2 → 0.8.2
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-B3ULYDYC.js +8 -0
- package/dist/{ChromeProfilePicker-DGDWGCZD.js → ChromeProfilePicker-T77E7ZSC.js} +1 -1
- package/dist/{CliFeedbackPrompt-SYCZXSME.js → CliFeedbackPrompt-FQ2XV5DZ.js} +1 -1
- package/dist/{CliUploadProgress-VDEAKXJY.js → CliUploadProgress-TZ55LONO.js} +1 -1
- package/dist/ConfigView-WWQMH36G.js +2 -0
- package/dist/EvidenceViewOffer-L5FVBQNK.js +2 -0
- package/dist/FolderPicker-6Z3CYSHF.js +2 -0
- package/dist/{HelpView-ON6BFGJM.js → HelpView-XXPCPJNF.js} +1 -1
- package/dist/{InfoBox-B23NZ6IG.js → InfoBox-SHBRHQX5.js} +1 -1
- package/dist/{LinksBox-TI26VFFH.js → LinksBox-ENNF7TDJ.js} +1 -1
- package/dist/{ProfilesView-CRO5AH3H.js → ProfilesView-CNF2FXF3.js} +1 -1
- package/dist/{ProjectPicker-3N7LJOXU.js → ProjectPicker-PVPLS642.js} +1 -1
- package/dist/{SaveSessionPrompt-UTOEC5AW.js → SaveSessionPrompt-4QP4GNGO.js} +1 -1
- package/dist/SingleShotApp-M3HNSUMZ.js +2 -0
- package/dist/{SummaryBox-JK64EKC2.js → SummaryBox-HYNINDNN.js} +1 -1
- package/dist/TestMdRunView-ISOVQ7YP.js +2 -0
- package/dist/{WhoamiView-6QSLPNF6.js → WhoamiView-NN2HOK6H.js} +1 -1
- package/dist/adbkit-apkreader-ORZBGCJQ.js +184 -0
- package/dist/app-client-ZCCNE3RV.js +2 -0
- package/dist/app-download-5UJMXPF3.js +2 -0
- package/dist/{auth-IKFVW3NX.js → auth-QKBTOWQX.js} +1 -1
- package/dist/{bind-KCUSVJXG.js → bind-LVGP5KHO.js} +3 -3
- package/dist/{bootstrap-NFYYRGGR.js → bootstrap-RUJBMB2P.js} +1 -1
- package/dist/bridge-QDPBIIOW.js +2 -0
- package/dist/{changelog-AAH2ZBYO.js → changelog-HBPBPR2O.js} +1 -1
- package/dist/{chat-committer-UUC6JTRJ.js → chat-committer-ZWWCLJFD.js} +1 -1
- package/dist/{chat-controller-T2FAI55V.js → chat-controller-R4THYYPU.js} +1 -1
- package/dist/chunk-2E3ZWGIK.js +12 -0
- package/dist/chunk-2KH2JUGL.js +13 -0
- package/dist/{chunk-VWKVUOXU.js → chunk-2TYCUPCN.js} +1 -1
- package/dist/{chunk-GYNTNKNB.js → chunk-2ZZDNPFN.js} +1 -1
- package/dist/chunk-3654GK6O.js +66 -0
- package/dist/{chunk-M6FKJKC6.js → chunk-3NHO5R4P.js} +3 -3
- package/dist/{chunk-SFII7HPP.js → chunk-4II6VDXG.js} +1 -1
- package/dist/chunk-4J6DQFPC.js +4 -0
- package/dist/chunk-4JOD47QI.js +2 -0
- package/dist/{chunk-5FJJJNJK.js → chunk-4U4OSOA4.js} +1 -1
- package/dist/{chunk-QIGPXYMF.js → chunk-56PAQAX5.js} +6 -6
- package/dist/chunk-5NIYYD7O.js +2 -0
- package/dist/chunk-5SNT2MK5.js +2 -0
- package/dist/chunk-6IA6QMPH.js +2 -0
- package/dist/chunk-6J5T5FEY.js +2 -0
- package/dist/chunk-6N726QLP.js +349 -0
- package/dist/chunk-7F2ZV46B.js +2 -0
- package/dist/{chunk-7OYZR6JA.js → chunk-7S3JZ6FQ.js} +1 -1
- package/dist/chunk-A2SQD2AY.js +4 -0
- package/dist/chunk-AJQT4IWZ.js +2 -0
- package/dist/chunk-AN2ZPHCE.js +2 -0
- package/dist/{chunk-7QJ75SYR.js → chunk-ATGRRKEV.js} +2 -2
- package/dist/chunk-AXTPNZPX.js +2 -0
- package/dist/{chunk-ZRASQ63J.js → chunk-BKVDAZEJ.js} +1 -1
- package/dist/{chunk-2WVKOZ6W.js → chunk-BPMSNGXQ.js} +1 -1
- package/dist/chunk-BRIEBB2U.js +2 -0
- package/dist/chunk-BSYX225I.js +2 -0
- package/dist/{chunk-B5RS2XZU.js → chunk-CAMO26QU.js} +3 -3
- package/dist/chunk-DPUV6OSP.js +2 -0
- package/dist/chunk-ECZMYPLJ.js +19 -0
- package/dist/chunk-EYOCNMUM.js +2 -0
- package/dist/{chunk-DZPGG4S6.js → chunk-FNS2EAA5.js} +2 -2
- package/dist/{chunk-VMM4LC4V.js → chunk-GNIFMQNK.js} +3 -3
- package/dist/chunk-GUVM6SZF.js +2 -0
- package/dist/{chunk-ZBOWFJB2.js → chunk-HFFPPCZO.js} +2 -2
- package/dist/chunk-HRZOFTV7.js +4 -0
- package/dist/chunk-HWH3UYD6.js +4 -0
- package/dist/{chunk-JKM2PUHI.js → chunk-I7RQS65W.js} +1 -1
- package/dist/chunk-IUEEFGEW.js +11 -0
- package/dist/{chunk-KWIK22R6.js → chunk-IV76ZXCY.js} +1 -1
- package/dist/{chunk-HYSFJSIG.js → chunk-IZ2FJYHG.js} +1 -1
- package/dist/{chunk-4NFCAGRK.js → chunk-J7KT44IC.js} +1 -1
- package/dist/{chunk-VOOPWFHW.js → chunk-JEDLXUO5.js} +1 -1
- package/dist/chunk-JGOZUAMC.js +2 -0
- package/dist/{chunk-4LTXE3IX.js → chunk-JHKM7W5X.js} +1 -1
- package/dist/chunk-JJN76EXE.js +2 -0
- package/dist/{chunk-EOLFTMWF.js → chunk-JUVQQP42.js} +1 -1
- package/dist/chunk-KKRNTSLL.js +6 -0
- package/dist/chunk-KRKGZ2ZW.js +47 -0
- package/dist/{chunk-YTHQNN2L.js → chunk-LDCLZR2U.js} +1 -1
- package/dist/chunk-LQQXPY5B.js +4 -0
- package/dist/{chunk-UC7MNPIN.js → chunk-LVCY5IYI.js} +1 -1
- package/dist/{chunk-O75ZHGJG.js → chunk-LVN6VHFN.js} +1 -1
- package/dist/chunk-MMBBQ4OZ.js +2 -0
- package/dist/chunk-MSGW4JDG.js +2 -0
- package/dist/{chunk-VLWMMOMF.js → chunk-MTIC65NK.js} +1 -1
- package/dist/chunk-NHBYZCSX.js +4 -0
- package/dist/chunk-NRUD56FY.js +7 -0
- package/dist/chunk-NXFAEDHV.js +26 -0
- package/dist/{chunk-OIYGGEUL.js → chunk-NXXJ56QA.js} +1 -1
- package/dist/{chunk-AXTGYOMK.js → chunk-O3AHFP3K.js} +1 -1
- package/dist/chunk-OAVPM6YJ.js +2 -0
- package/dist/{chunk-FBHRBFHP.js → chunk-OJTCIZDK.js} +1 -1
- package/dist/{chunk-JPWLGHPM.js → chunk-OOEPLMKA.js} +1 -1
- package/dist/{chunk-VT54ARGE.js → chunk-PXCMEI73.js} +1 -1
- package/dist/{chunk-APPYQZFK.js → chunk-R4UCBA5R.js} +1 -1
- package/dist/chunk-RKXHVP2Z.js +2 -0
- package/dist/{chunk-AJ56AMT6.js → chunk-RN4PKQFR.js} +1 -1
- package/dist/chunk-RUCSRS4C.js +5 -0
- package/dist/chunk-TAOHYWEO.js +2 -0
- package/dist/chunk-TZXXJWHA.js +2 -0
- package/dist/{chunk-VRLUNZAK.js → chunk-U5GHOGLM.js} +1 -1
- package/dist/chunk-UJZZDPDY.js +2 -0
- package/dist/{chunk-VHZ4S57N.js → chunk-UODLRQQ4.js} +1 -1
- package/dist/chunk-VK3NU742.js +21 -0
- package/dist/{chunk-FDIPQRX4.js → chunk-VPRNGWIY.js} +1 -1
- package/dist/{chunk-RDNFVZEB.js → chunk-WOEQDUJ6.js} +1 -1
- package/dist/chunk-WQPQNL4S.js +2 -0
- package/dist/{chunk-SL6PCVM2.js → chunk-WV27D55O.js} +1 -1
- package/dist/{chunk-2WFZIQ62.js → chunk-WVCH66YH.js} +1 -1
- package/dist/{chunk-PLOWZLG5.js → chunk-YCLG3T5E.js} +2 -2
- package/dist/chunk-YGMC3FGJ.js +26 -0
- package/dist/{chunk-5SXMV66P.js → chunk-YHYTCENI.js} +1 -1
- package/dist/{chunk-KQZA2QSC.js → chunk-YSSYT5F5.js} +1 -1
- package/dist/{chunk-OR6MCL6Z.js → chunk-YTDSQAYN.js} +1 -1
- package/dist/{chunk-XUS4WKDS.js → chunk-ZEDAPY7M.js} +1 -1
- package/dist/{chunk-F7ISS545.js → chunk-ZGBSGZZM.js} +1 -1
- package/dist/chunk-ZI6UIJUN.js +11 -0
- package/dist/{config-CWZV6XPT.js → config-RLDXM5ZH.js} +1 -1
- package/dist/{controller-client-RD2YEMAH.js → controller-client-OB4WD2C4.js} +1 -1
- package/dist/{cover-cmd-NWIRJY5Z.js → cover-cmd-HDZZWJXG.js} +1 -1
- package/dist/{credentials-YHTJGKEO.js → credentials-CALNKQMN.js} +1 -1
- package/dist/deps-bundle-GVHIMZ5E.js +2 -0
- package/dist/deps-resolve-T6P4EACP.js +2 -0
- package/dist/{dispatch-WVNXB7AD.js → dispatch-ECUEAMXS.js} +1 -1
- package/dist/doctor-SIBHJVGC.js +2 -0
- package/dist/docx-convert-JMUMT5C4.js +2 -0
- package/dist/evidence-ZVQHPELX.js +2 -0
- package/dist/evolve-cmd-JGCFTXWA.js +2 -0
- package/dist/exec-P2IKJRRR.js +2 -0
- package/dist/exit-manager-3FVBTNYR.js +2 -0
- package/dist/{explain-cmd-IZEHWZV5.js → explain-cmd-3GEKR7O5.js} +1 -1
- package/dist/{explain-cmd-75MCF2ZV.js → explain-cmd-EX24XKD6.js} +1 -1
- package/dist/extract-bind-EXW32RUY.js +10 -0
- package/dist/{extract-cmd-ZRYMJ6IC.js → extract-cmd-7IOLJJCL.js} +2 -2
- package/dist/gaps-cmd-WPCJPLGB.js +3 -0
- package/dist/{generate-headless-D6BISWDC.js → generate-headless-U4GTG234.js} +3 -3
- package/dist/host-7GZPBA74.js +2 -0
- package/dist/index.js +84 -67
- package/dist/ingest-cmd-YYNAKI2U.js +2 -0
- package/dist/interactive-bind-Y65XV4Y5.js +25 -0
- package/dist/{lifecycle-cmd-EQSFAZG6.js → lifecycle-cmd-HO5VL7AM.js} +1 -1
- package/dist/{list-cmd-IRJSUCM5.js → list-cmd-N4KMA34H.js} +1 -1
- package/dist/list-commands-3EROWJWV.js +2 -0
- package/dist/login-flow-TRINUSBB.js +2 -0
- package/dist/{maintenance-cmd-MVFA6H74.js → maintenance-cmd-6XSVO6FO.js} +1 -1
- package/dist/mobile-prompts-TP3ODM5M.js +2 -0
- package/dist/persist-recorded-session-EHYT3PVN.js +3 -0
- package/dist/pipeline-5GOS2KV2.js +2 -0
- package/dist/prepare-target-BUEOZVJV.js +2 -0
- package/dist/reconcile-cmd-TY3MWZL3.js +2 -0
- package/dist/reconcile-deps-6KTJHBMJ.js +4 -0
- package/dist/reconcile-engine-O7QEZVX6.js +2 -0
- package/dist/{recording-banner-76GCIPUN.js → recording-banner-BWWFOJCR.js} +1 -1
- package/dist/registry-KXEDLM6X.js +2 -0
- package/dist/{require-project-folder-ACRDP5ZB.js → require-project-folder-CXDRRWEQ.js} +1 -1
- package/dist/resolve-run-intent-PZXEQTHC.js +7 -0
- package/dist/{resolver-SRPCFW7P.js → resolver-FTU5KO7H.js} +1 -1
- package/dist/{review-cmd-L3V5UP5T.js → review-cmd-DQRKQUMG.js} +1 -1
- package/dist/run-CMFBSYWF.js +2 -0
- package/dist/run-WKHPVWUN.js +2 -0
- package/dist/{run-test-md-KEHSRMCM.js → run-test-md-7HGOZJSU.js} +3 -3
- package/dist/session-items-2ATN7VXG.js +2 -0
- package/dist/session-target-UWROGOCY.js +2 -0
- package/dist/{sessions-cmd-ZVYGSRJ3.js → sessions-cmd-ZZIZN2VB.js} +1 -1
- package/dist/{skill-installer-HBN3A35K.js → skill-installer-QNUDLGPD.js} +1 -1
- package/dist/spawner-DQZRJIE6.js +2 -0
- package/dist/{structured-answers-A43Q25CZ.js → structured-answers-5EY2AZN7.js} +1 -1
- package/dist/tcg-generate-XKSTMCOG.js +2 -0
- package/dist/testmd-actions-IFRW7NGG.js +2 -0
- package/dist/{tms-client-VD3B3SMU.js → tms-client-V3TR4QW3.js} +1 -1
- package/dist/token-refresh-FP6JFLXB.js +2 -0
- package/dist/types-6E2HTDKJ.js +2 -0
- package/dist/{validate-basic-ZGWPBYB6.js → validate-basic-3CNUDDH7.js} +1 -1
- package/dist/{verdicts-SCETLY5J.js → verdicts-NYCSBWUC.js} +1 -1
- package/dist/{version-check-CJWKDAXV.js → version-check-7TSAVA6V.js} +1 -1
- package/dist/{view-cmd-SOVM64L2.js → view-cmd-KPJTP4DI.js} +1 -1
- package/dist/walk-session-AINBHZKB.js +2 -0
- package/dist/{with-telemetry-E7QWPGL6.js → with-telemetry-3DL7ZEZL.js} +1 -1
- package/package.json +12 -6
- package/dist/ChatSurface-E7QKI4LA.js +0 -8
- package/dist/ConfigView-HPKRQXMC.js +0 -2
- package/dist/EvidenceViewOffer-F5YG54OC.js +0 -2
- package/dist/FolderPicker-4NSDXQY5.js +0 -2
- package/dist/SingleShotApp-Y3YDFQSD.js +0 -2
- package/dist/TestMdRunView-O6JTHV5W.js +0 -2
- package/dist/bridge-JSKEO4N3.js +0 -2
- package/dist/chunk-23VPUWBD.js +0 -23
- package/dist/chunk-2WRBTLFN.js +0 -13
- package/dist/chunk-53IBTIL3.js +0 -12
- package/dist/chunk-5WXGMXGA.js +0 -26
- package/dist/chunk-5ZQZOVWY.js +0 -4
- package/dist/chunk-74HTO7K3.js +0 -11
- package/dist/chunk-AECMF3T2.js +0 -8
- package/dist/chunk-AFBKGZFG.js +0 -2
- package/dist/chunk-BXYWX4J3.js +0 -2
- package/dist/chunk-C3T7TKAC.js +0 -349
- package/dist/chunk-DBKNJRJG.js +0 -2
- package/dist/chunk-H32GM5G4.js +0 -2
- package/dist/chunk-J5FBU425.js +0 -62
- package/dist/chunk-KCCSWEGA.js +0 -4
- package/dist/chunk-MK7JUOYV.js +0 -6
- package/dist/chunk-ORQNKZ2Z.js +0 -5
- package/dist/chunk-OUJQVBUT.js +0 -7
- package/dist/chunk-QOFZSHSC.js +0 -47
- package/dist/chunk-RKWJG3WW.js +0 -19
- package/dist/chunk-STVP2XHO.js +0 -2
- package/dist/chunk-VFII6C46.js +0 -2
- package/dist/chunk-VGFTNLQQ.js +0 -2
- package/dist/chunk-WAOCHXJ5.js +0 -2
- package/dist/chunk-ZUGCHQFC.js +0 -2
- package/dist/docx-convert-CHLJUTFH.js +0 -2
- package/dist/evidence-IVDNXWPL.js +0 -2
- package/dist/evolve-cmd-XBX4SX5H.js +0 -2
- package/dist/exit-manager-XZL4KIJU.js +0 -2
- package/dist/extract-bind-5OWELRME.js +0 -10
- package/dist/gaps-cmd-XBRXKXDL.js +0 -3
- package/dist/ingest-cmd-YTGOICTC.js +0 -2
- package/dist/interactive-bind-XSRD36MO.js +0 -25
- package/dist/list-commands-RCYHJ5Y3.js +0 -2
- package/dist/login-flow-PYAPYCPY.js +0 -2
- package/dist/persist-recorded-session-DTYCLXTQ.js +0 -3
- package/dist/pipeline-MXFOD6ES.js +0 -2
- package/dist/reconcile-cmd-EG6BOU3A.js +0 -2
- package/dist/reconcile-deps-HTT6IPHT.js +0 -4
- package/dist/reconcile-engine-JQNXALNY.js +0 -2
- package/dist/run-GMZCDRDD.js +0 -2
- package/dist/run-TFRWPGXP.js +0 -2
- package/dist/spawner-GC5CFAJ7.js +0 -2
- package/dist/tcg-generate-V7YFNC5O.js +0 -2
- package/dist/testmd-actions-MNDOO76O.js +0 -2
- package/dist/token-refresh-3UYMCYG3.js +0 -2
- package/dist/walk-session-YUYRULPY.js +0 -2
package/dist/chunk-2WRBTLFN.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as qe,g as et}from"./chunk-5DBK6QNS.js";import{b as y,c as te,d as Ye,f as re,g as ne}from"./chunk-CJJXT5DO.js";import{a as Ke,e as P,f as N,g as We,h as G,i as A,j as Je}from"./chunk-ZPDM6FO7.js";import{d as tt}from"./chunk-NVGBE2DR.js";import{a as T,b as j,d as Ue}from"./chunk-EHN5HTUD.js";import{a as R,b as _}from"./chunk-L5LI2JF4.js";import{A as x}from"./chunk-TH47OOBV.js";import{b as K}from"./chunk-VAYBKR76.js";import{a as Ze}from"./chunk-CUM23TLF.js";import{b as Qe,f as U,i as Y}from"./chunk-DUAXZYAD.js";import{d as ie,f as Xe}from"./chunk-WXHQYYD5.js";import{a as W}from"./chunk-CH273NAE.js";import{a as Ge}from"./chunk-O75ZHGJG.js";import{a as ze}from"./chunk-ZUGCHQFC.js";function D(t){if(t===null)return"broken";let e=Math.floor(t/100);return e===1?"passed":e===7?"failed":e===2?"skipped":"broken"}var C={failed:3,broken:2,passed:1,skipped:0};function oe(t){let e="skipped";for(let r of t)C[r]>C[e]&&(e=r);return e}import{createHash as At}from"crypto";import{basename as Ot}from"path";function se(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return e.length>0?e:"session"}function ae(t){return At("sha256").update(t).digest("hex").slice(0,8)}function ce(t){let e=Ot(t).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${se(e)}-${ae(t)}`}function de(t,e){return`${se(t)}-${ae(e)}`}function ue(t){let e={};for(let[r,n]of Object.entries(t))typeof n=="string"&&n.length>0&&(e[r]=n);return e}var Ft={darwin:"macOS",linux:"Linux",win32:"Windows"};function le(t){return Ft[t]??t}function pe(t,e){let r={},n=(i,o)=>{o!==void 0&&o!==""&&(r[i]=o)};return n("model",e.model),n("os",t.os),n("browser",t.browser),n("browser_version",t.browser_version),n("resolution",t.resolution),n("platform",e.platform),n("platform_type",e.platform_type),n("run_kind",e.run_kind),n("os_version",t.os_version),t.device!==void 0&&t.device!==""?r.device=t.device:e.platform_type&&e.platform_type!=="web"&&(r.device=null),r}function Lt(t,e){return{pack_test_dir:t,ordinal_offset:e}}import{promises as k}from"fs";import{join as S}from"path";function fe(t){let e={evidence:"0.1",run_id:t.execution_id,status:"running",title:t.title,started:t.started,environment:{producer:{name:"kane-cli",version:t.producerVersion},...t.surfaces?{surfaces:t.surfaces}:{},run_kind:t.run_kind,origin:t.origin,pid:t.pid},...t.credits!==void 0?{metrics:{credits:{value:t.credits,type:"count"}}}:{}};return _(e,{lineWidth:-1})}async function me(t,e,r,n=process.cwd(),i){let o=i??y(t.execution_id,n),s=S(o,"tests",e);return await k.mkdir(S(o,"coverage"),{recursive:!0}),await k.writeFile(S(o,"coverage",".keep"),""),await k.mkdir(s,{recursive:!0}),await k.writeFile(S(o,"run.yaml"),fe(t)),r&&await k.writeFile(S(s,r.path),r.content),o}async function Tt(t,e=process.cwd()){let r=y(t.execution_id,e);await k.mkdir(S(r,"coverage"),{recursive:!0}),await k.writeFile(S(r,"coverage",".keep"),"");let n=R(fe(t));return n.environment&&delete n.environment.run_kind,await k.writeFile(S(r,"run.yaml"),_(n,{lineWidth:-1})),r}async function jt(t,e=process.cwd()){return j(y(t,e),new Date().toISOString())}async function ge(t,e=process.cwd()){await k.rm(y(t,e),{recursive:!0,force:!0})}import{promises as he}from"fs";import{join as ve}from"path";function J(t){let e={evidence:"0.1",test:t.testId,status:t.status,...t.durationMs!==void 0?{duration_ms:t.durationMs}:{},...t.attempts&&t.attempts.length?{attempts:t.attempts}:{},...t.flaky!==void 0?{flaky:t.flaky}:{},...t.definitionPath?{definition:{path:t.definitionPath}}:{},...t.definitionId?{definition_id:t.definitionId}:{},...t.assuranceId?{assurance_id:t.assuranceId}:{},...Object.keys(t.externalId).length?{external_id:t.externalId}:{},...t.tags&&t.tags.length?{tags:t.tags}:{},...Object.keys(t.environment).length?{environment:t.environment}:{},steps:t.steps};return _(e,{lineWidth:-1})}function we(t){return _({logs:t},{lineWidth:-1})}async function ye(t,e,r){await he.writeFile(ve(t,"tests",e,"result.yaml"),r)}async function _e(t,e,r){let n=ve(t,"tests",e,"logs");await he.mkdir(n,{recursive:!0}),await he.writeFile(ve(n,"meta.yaml"),r)}import{promises as X}from"fs";import{join as rt}from"path";function nt(t){return rt(t,".internal","meta.json")}async function it(t){let e;try{e=await X.readFile(nt(t),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function xe(t,e){let r;try{r=await it(t)??{}}catch(s){console.warn(`evidence: meta.json at ${t} unreadable \u2014 skipping execution-pointer append to preserve identity`,s);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(e),r.executions=n,await X.mkdir(rt(t,".internal"),{recursive:!0});let i=nt(t),o=`${i}.tmp-${process.pid}-${Date.now()}`;await X.writeFile(o,JSON.stringify(r,null,2)+`
|
|
3
|
-
`),await X.rename(o,i)}async function Nt(t){try{let e=await it(t);return e&&Array.isArray(e.executions)?e.executions:[]}catch{return[]}}async function Mt(t,e,r=process.cwd()){let n=await re(t,r);if(!n){let o=`evidence: no pack found for "${t}"`;return e.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:t})):console.error(o),2}let i=await T(n,e.profile??"L1");return e.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${e.profile??"L1"}, status ${i.status})`),i.valid?0:1}function ke(t){let e=[];for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)e.push(D(i))}return oe(e)}function Vt(t){let e=null;for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(e==null||C[D(i)]>C[D(e)]||C[D(i)]===C[D(e)]&&i>e)&&(e=i)}return e}import{promises as Bt}from"fs";import{extname as ot,basename as Ht}from"path";var zt={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function be(t){let e;try{e=await Bt.readdir(t)}catch{return[]}return e.filter(r=>r!=="meta.yaml").sort().map(r=>({name:Ht(r,ot(r)),file:r,format:zt[ot(r)]??"txt"}))}import{mkdirSync as Gt,appendFileSync as Ut}from"fs";import{join as st}from"path";function Ie(t,e){return st(t,"tests",e,"logs")}function Se(t,e,r,n={},i){try{i?.(e,r,r,n)}catch{}if(t)try{Gt(t,{recursive:!0});let o=JSON.stringify({ts:new Date().toISOString(),level:e,event:r,...n})+`
|
|
4
|
-
`;Ut(st(t,"diagnostics.ndjson"),o)}catch{}}import{promises as E}from"fs";import{join as O}from"path";async function Yt(t){try{let e=O(t,"tests"),r=await E.readdir(e).catch(()=>[]);for(let n of r){let i=O(e,n,"steps"),o=await E.readdir(i).catch(()=>[]);for(let s of o){let a=await E.readFile(O(i,s,"failure.yaml"),"utf8").catch(()=>null);if(a!=null)try{let c=R(a);if(c&&typeof c=="object"&&c.triage)return!0}catch{}}}}catch{}return!1}async function at(t,e,r){let n=O(t,"tests",e,"logs");if(r)try{await E.mkdir(n,{recursive:!0}),await E.copyFile(r,O(n,"tui.log"))}catch{}let i=await be(n);i.length&&await _e(t,e,we(i))}async function Ee(t){let e=t.cwd??process.cwd(),r=t.packDir??y(t.executionId,e);if(!t.saved&&!t.packDir)return await ge(t.executionId,e),{sealed:!1};await at(r,t.testId,t.tuiLogPath);let n=O(r,"run.yaml"),i=R(await E.readFile(n,"utf8"));i.environment={...i.environment??{},saved:t.saved,run_kind:t.runKind},await E.writeFile(n,_(i,{lineWidth:-1}));let o=await E.open(n,"r+");try{await o.sync()}finally{await o.close()}let s=await Yt(r);await j(r,new Date().toISOString());let a;try{let d=await T(r,"L1");a=d.valid;let u=(d.diagnostics??[]).filter(p=>String(p?.code??"").includes("failure.status_disagrees"));if(u.length>0)if(t.expectStatusDisagrees||s){let p=t.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${u.length} status_disagrees advisory(ies) \u2014 ${p}`)}else console.warn(`evidence: ${u.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,u);if(!d.valid){console.warn(`evidence: sealed pack ${t.executionId} failed L1 validation`,d.diagnostics);let p=String(d.diagnostics?.[0]?.code??"");Se(Ie(r,t.testId),"warn","EVIDENCE_INVALID",{execution_id:t.executionId,first_code:p,surface:t.surface??"testmd"},t.log)}}catch(d){console.warn(`evidence: validation error for ${t.executionId}`,d)}let c;if(t.saved&&t.packDir)try{c=await Ye(r,t.executionId,e)}catch(d){console.warn(`evidence: store install failed for ${t.executionId}`,d)}if(t.outputStemDir)try{await xe(t.outputStemDir,{execution_id:t.executionId,run_kind:t.runKind,status:t.verdict,valid:a,at:new Date().toISOString()})}catch(d){console.warn(`evidence: execution-pointer append failed for ${t.executionId} (pack is sealed)`,d)}return{sealed:!0,valid:a,storePath:c}}import{release as ct}from"os";import{execFileSync as Kt}from"child_process";var dt=!1,Z;function Wt(){if(!dt)if(dt=!0,process.platform==="darwin")try{Z=Kt("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{Z=ct()||void 0}else Z=ct()||void 0;return Z}function Re(t){let e={os:le(process.platform)},r=Wt();if(r&&(e.os_version=r),t.cdpBrowser){let n=/^([A-Za-z]+)\/(\d+)/.exec(t.cdpBrowser);n&&(e.browser=n[1].replace(/^Headless/,""),e.browser_version=n[2])}return t.resolution&&(e.resolution=t.resolution),e}async function ut(t){if(t)try{let e=await fetch(`${t}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!e.ok)return;let r=await e.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function Jt(t){let e;return()=>(e||(e=ut(t)),e)}import{promises as $,existsSync as F,readFileSync as qt}from"fs";import{basename as er,join as h}from"path";import{readFileSync as Xt}from"fs";import{dirname as Zt,resolve as Qt}from"path";function lt(t,e){let r=Qt(t),n=Xt(r,"utf8");return P(e?N(n,G(Zt(r),e)):n)}var M=class t{constructor(e){this.opts=e}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_attempts=[];_packDirOverride;_attached=!1;get attached(){return this._attached}static async attach(e){let r=er(e.packDir).replace(/\.evidence$/,""),n=new t({origin:"testrun",runKind:"author",pid:process.pid,title:e.testId,started:new Date().toISOString(),producerVersion:ze,cwd:e.cwd});n.executionId=r,n.testId=e.testId,n._packDirOverride=e.packDir,n._attached=!0;let i=h(e.packDir,"tests",e.testId);return await $.mkdir(i,{recursive:!0}),e.definition&&(await $.writeFile(h(i,e.definition.path),e.definition.content),n.definitionPath=e.definition.path,n.definitionContent=e.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=te(),this.testId=this.opts.testmdRelPath?ce(this.opts.testmdRelPath):de(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let e=this.opts.definition??null;return await me({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,e,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),e&&(this.definitionPath=e.path,this.definitionContent=e.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?h(this.opts.packRootDir,`${this.executionId}.evidence`):y(this.executionId,this.opts.cwd)}get packTestDir(){return h(this.pack,"tests",this.testId)}async writeDefinition(e,r="test.md"){await $.writeFile(h(this.packTestDir,r),e),this.definitionPath=r,this.definitionContent=e}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=h(this.opts.cwd,this.opts.testmdRelPath);if(F(e))return A(qt(e,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=h(this.opts.cwd,this.opts.testmdRelPath),r=h(this.opts.cwd,".context"),n=F(r)?x(r):void 0;if(F(e))return lt(e,n)}if(this.definitionContent!=null)return P(this.definitionContent)}catch{}}noteSpawn(e){this.accumulatedSteps.push(...e.steps),this.maxOrdinal=Math.max(this.maxOrdinal,e.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}get attempts(){return this._attempts}async archiveAttempt(e,r){let n=this._attempts.length+1,i=h(this.packTestDir,String(n));try{await $.mkdir(i,{recursive:!0});for(let o of["steps","logs","v16-trajectory"]){let s=h(this.packTestDir,o);F(s)&&await $.rename(s,h(i,o))}this.definitionPath&&F(h(this.packTestDir,this.definitionPath))&&await $.copyFile(h(this.packTestDir,this.definitionPath),h(i,this.definitionPath))}catch{}return this._attempts.push({n,status:e,steps:this.accumulatedSteps,...r!==void 0?{durationMs:r}:{}}),this.accumulatedSteps=[],this.maxOrdinal=0,n}async writeResult(e){let r=ke(e.spawns),n=this._attempts.length?[...this._attempts.map(u=>({status:u.status,...u.durationMs!==void 0?{duration_ms:u.durationMs}:{}})),{status:r,...e.durationMs!==void 0?{duration_ms:e.durationMs}:{}}]:void 0,i=n?new Set(n.map(u=>u.status)).size>1:void 0,o=this.pack,s=ue(e.externalIdInput),a=pe(e.runnerEnv,e.intentEnv),c=this.computeDefinitionId(),d=this.computeAssuranceId();await ye(o,this.testId,J({testId:this.testId,status:r,durationMs:e.durationMs,definitionPath:this.definitionPath,definitionId:c,assuranceId:d,externalId:s,environment:a,steps:e.steps,tags:e.tags,attempts:n,flaky:i}));for(let u of this._attempts){let p=h(this.packTestDir,String(u.n));F(p)&&await $.writeFile(h(p,"result.yaml"),J({testId:this.testId,status:u.status,durationMs:u.durationMs,definitionPath:this.definitionPath,definitionId:c,assuranceId:d,externalId:s,environment:a,steps:u.steps,tags:e.tags}))}let l=e.externalIdInput;return e.log&&(l.commit_id||l.test_id||l.testcase_id)&&e.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:l.commit_id??null,test_id:l.test_id??null,testcase_id:l.testcase_id??null,project_id:l.project_id??null,session_id:l.session_id??null,session_name:l.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function tr(t,e,r=ne){try{let n=await r(t);if(n.aborted.length>0||n.removed.length>0)try{e?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as kr}from"fs";import{existsSync as De,mkdirSync as gr,readdirSync as hr,readFileSync as vr,rmSync as wr,statSync as yr,writeFileSync as _r}from"fs";import{join as L}from"path";import{mkdirSync as rr,renameSync as nr,rmSync as ir,writeFileSync as or}from"fs";import{join as pt}from"path";var sr=5e6;function ft(t,e,r){let n=pt(t,"coverage","sources"),i=new Map,o=!1;try{for(let s of r.usecases)for(let a of s.sources){if(i.has(a.id)){a.file=i.get(a.id);continue}if(!a.cid)continue;let c=tt(e,a.cid);if(c===null||c.byteLength>sr)continue;o||(rr(n,{recursive:!0}),o=!0);let d=pt(n,a.id),l=`${d}.tmp-${process.pid}`;or(l,c),nr(l,d);let u=`coverage/sources/${a.id}`;i.set(a.id,u),a.file=u}}catch{for(let s of r.usecases)for(let a of s.sources)delete a.file;if(o)try{ir(n,{recursive:!0,force:!0})}catch{}}}import{existsSync as Ce,readFileSync as V,renameSync as ur,writeFileSync as lr}from"fs";import{dirname as wt,isAbsolute as yt,resolve as _t}from"path";var ar=new Set(["inline","testmd","testrun"]),cr=new Set(["inferred","authored","runtime-derived"]),Pe=new Set(["passed","failed","broken","skipped"]);function mt(t,e,r){if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let n=e;for(let i=0;;i++){let o=U(t);if(n.latestHash!==o){if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(n.latestHash)} but chain head is ${String(o)} \u2014 retry budget exhausted`}]};n=x(t);continue}let s=dr(t,n,r);if(s!=="cas")return s;if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 retry budget exhausted"}]};n=x(t)}}function dr(t,e,r){let n=[],i=[];for(let s of r.facts){let a=`executions[${s.ref}]`,c=e.resolve(s.ref),d=c?e.tipOf(c.cid):null;if(!c||!d||e.superseded.has(d)){n.push({code:"UNKNOWN_REF",detail:`${a}: '${s.ref}' is not a live committed node`});continue}if(e.nodeLabel.get(d)!==ie.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${a}: execution facts attach to tests \u2014 '${s.ref}' is a ${e.nodeLabel.get(d)}`});continue}if(!ar.has(s.mode)){n.push({code:"BAD_MODE",detail:`${a}: mode '${s.mode}' not in inline|testmd|testrun`});continue}if(!Pe.has(s.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}: verdict '${s.verdict}' not in ${[...Pe].join("|")}`});continue}if(!cr.has(s.oracle_mode)){n.push({code:"BAD_ORACLE_MODE",detail:`${a}: oracle_mode '${s.oracle_mode}' not in inferred|authored|runtime-derived`});continue}if(typeof s.drift_flag!="boolean"||typeof s.stale_at_run!="boolean"){n.push({code:"MISSING_FIELD",detail:`${a}: drift_flag and stale_at_run are required booleans`});continue}if(!s.execution_id||!s.started_at||!s.definition_id_at_run){n.push({code:"MISSING_FIELD",detail:`${a}: execution_id, started_at and definition_id_at_run are required`});continue}let l=[];for(let u of s.per_ac??[]){let p=e.resolve(u.ac_ref),f=p?e.tipOf(p.cid):null;if(!p||!f||e.superseded.has(f)||e.nodeLabel.get(f)!==ie.AC){n.push({code:"UNKNOWN_REF",detail:`${a}.per_ac: '${u.ac_ref}' is not a live AC`});continue}if(!Pe.has(u.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}.per_ac['${u.ac_ref}']: verdict '${u.verdict}'`});continue}l.push({ac_ref:e.nameOf.get(f)??f,verdict:u.verdict})}i.push({about:d,definition_id_at_run:s.definition_id_at_run,verdict:s.verdict,...l.length?{per_ac:l}:{},drift_flag:s.drift_flag,oracle_mode:s.oracle_mode,stale_at_run:s.stale_at_run,...s.unresolved_acs?.length?{unresolved_acs:s.unresolved_acs}:{},execution_id:s.execution_id,...s.evidence_id?{evidence_id:s.evidence_id}:{},...s.duration_ms!==void 0?{duration_ms:s.duration_ms}:{},started_at:s.started_at,mode:s.mode,local:s.local,...s.via_parent?{via_parent:s.via_parent}:{}})}if(n.length>0)return{record:null,errors:n};let o;try{o=Y(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:i,...r.eventIds&&r.eventIds.length>0?{event_ids:r.eventIds}:{},source_head_moves:{}},{expectPrev:e.latestHash})}catch(s){if(s instanceof Qe)return"cas";throw s}return K(t),{record:o.record,errors:null}}function xt(t){let e={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of t)for(let i of n.verifies??[]){let o=r.get(i);(o===void 0||(e[n.status]??0)>(e[o]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function kt(t){let e=[],r=W(t.cwd);if(!Ce(r))return{synced:0,superseded:0,skipped:"no-context",warnings:e};let n=t.by??{kind:"ai",id:"exec-sync"},i=x(r),o=[],s=0,a=new Set;for(let d of t.members){let l=yt(d.path)?d.path:_t(t.cwd,d.path);for(let u of pr(l)){if(a.has(u.path))continue;a.add(u.path);let p=u.path===l?void 0:A(V(l,"utf8"))?.id,f=V(u.path,"utf8"),m=A(f);if(!m?.id)continue;let g=i.resolve(m.id),b=g?i.tipOf(g.cid):null;if(!g||!b||i.superseded.has(b)){e.push(`sync: ${m.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let I=P(N(f,G(wt(u.path),i))),v=String(i.getNode(b)?.content.test_md_blob??""),H=P(N(v,We(i))),z=!1,ee=b;if(I===H)m.base!==H&&vt(u.path,f,H,e);else if(m.base===H){let w=fr(r,i,b,f,I,n);w.error?(e.push(`sync: could not supersede ${m.id}: ${w.error}`),z=!0):(s++,ee=w.newCid,z=w.oracleTier,vt(u.path,V(u.path,"utf8"),I,e),i=x(r))}else z=!0,e.push(m.base?`sync: ${m.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${m.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);let Me=i.getNode(ee)?.content.check,Ve=u.path===l?d.acs??[]:[],Be=Ve.filter(w=>gt(i,w.ref)),He=Ve.filter(w=>!gt(i,w.ref)).map(w=>w.ref);o.push({ref:m.id,definition_id_at_run:I,verdict:d.verdict,...Be.length?{per_ac:Be.map(w=>({ac_ref:w.ref,verdict:w.verdict}))}:{},drift_flag:z,oracle_mode:Me?.expected_mode??(Ke(Me?.operand)?"runtime-derived":"inferred"),stale_at_run:i.stale(ee)!=="fresh",...He.length?{unresolved_acs:He}:{},execution_id:d.executionId,...d.evidenceId?{evidence_id:d.evidenceId}:{},...d.durationMs!==void 0?{duration_ms:d.durationMs}:{},started_at:d.startedAt,mode:d.mode,local:d.local,...p?{via_parent:p}:{}})}}if(o.length===0)return{synced:0,superseded:s,warnings:e};let c=mt(r,x(r),{facts:o,by:n});return c.errors?(e.push(...c.errors.map(d=>`sync facts: ${d.code}: ${d.detail}`)),{synced:0,superseded:s,warnings:e}):{synced:o.length,superseded:s,warnings:e}}function pr(t){let e=[],r=new Set,n=i=>{if(r.has(i)||!Ce(i))return;r.add(i);let o=V(i,"utf8");for(let s of o.split(`
|
|
5
|
-
`)){let a=/^@import\s+(\S+)\s*$/.exec(s.trim());if(!a)continue;let c=yt(a[1])?a[1]:_t(wt(i),a[1]);Ce(c)&&A(V(c,"utf8"))?.id&&n(c)}e.push({path:i})};return n(t),e}function gt(t,e){let r=t.resolve(e),n=r?t.tipOf(r.cid):null;return!!(r&&n&&!t.superseded.has(n)&&t.nodeLabel.get(n)==="ac")}function fr(t,e,r,n,i,o){let s=e.getNode(r);if(!s)return{oracleTier:!1,error:"tip unreadable"};let a=Je(n),c=String(s.content.test_md_blob??""),d=/^#\s+(.+?)\s*$/m.exec(a)?.[1]??String(s.content.title??""),l={...s.content,test_md_blob:a,definitionId:i,title:d},u=Xe("test",l);if(u.length>0)return{oracleTier:!1,error:u.map(g=>g.detail).join("; ")};let p=Ze("test",l);if(p===r)return{newCid:r,oracleTier:!1};let f=ht(c)!==ht(a),m=U(t);if(e.latestHash!==m)return{oracleTier:f,error:`store advanced under the sync (basis ${String(e.latestHash)} vs head ${String(m)}) \u2014 re-run to retry`};try{Y(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:p,label:"test",content:l}],edges:[],review:[{id:p,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:o}],supersessions:[{kind:"node",old:r,new:p,reason:"edited on disk (run sync)",by:o}],source_head_moves:{}},{expectPrev:m})}catch(g){return{oracleTier:f,error:g instanceof Error?g.message:String(g)}}return K(t),{newCid:p,oracleTier:f}}var mr=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/;function ht(t){let e=[],r=t.split(`
|
|
6
|
-
`),n=!1;for(let i of r){if(/^##\s/.test(i)){n=/\bassert\b/i.test(i);let o=mr.exec(i);o&&e.push(`v:${o[1].trim()}`);continue}n&&i.trim()!==""&&e.push(i.trim())}return e.join(`
|
|
7
|
-
`)}function vt(t,e,r,n){try{let i=e.split(`
|
|
8
|
-
`),o=-1;if(i[0]?.trim()==="---"){for(let c=1;c<i.length;c++)if(i[c].trim()==="---"){o=c;break}}if(o<0)return;let s=!1;for(let c=1;c<o;c++){if(/^\s+base:\s*sha256:[0-9a-f]+\s*$/.test(i[c])){i[c]=i[c].replace(/sha256:[0-9a-f]+/,r),s=!0;break}if(/^assurance:\s*$/.test(i[c])&&!i.slice(c,Math.min(c+3,o)).some(d=>/^\s+base:/.test(d))){i.splice(c+2,0,` base: ${r}`),s=!0;break}}if(!s)return;let a=`${t}.tmp-sync`;lr(a,i.join(`
|
|
9
|
-
`)),ur(a,t)}catch(i){n.push(`sync: pin refresh failed for ${t} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var xr={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"},bt=(t,e)=>{try{if(!De(e))return{status:"skipped",reason:"no context store at the project root"};let r=L(t,"tests");if(!De(r))return{status:"skipped",reason:"pack has no tests/"};let n=new Map;for(let a of hr(r)){let c=L(r,a,"result.yaml");if(!De(c)||!yr(L(r,a)).isDirectory())continue;let d=R(vr(c,"utf8"));if(!d?.definition_id&&!d?.assurance_id)continue;let l=xt(d.steps??[]),u={testShortId:String(d.test??a),execution:xr[String(d.status)]??"not-run",...l.length?{acs:l}:{}};d.assurance_id&&n.set(`id:${d.assurance_id}`,u),d.definition_id&&n.set(`def:${d.definition_id}`,u)}let i=et(x(e),n,{scope:"run"}),o=qe(i);ft(t,e,i);let s=_({...i,rollup:o},{lineWidth:-1});return gr(L(t,"coverage"),{recursive:!0}),_r(L(t,"coverage","usecases.yaml"),s),{status:"written"}}catch(r){try{wr(L(t,"coverage","sources"),{recursive:!0,force:!0})}catch{}return{status:"skipped",reason:r instanceof Error?r.message:String(r)}}};async function br(t){try{let e=new M({origin:"inline",runKind:"author",pid:t.pid,title:t.title,started:new Date().toISOString(),producerVersion:t.producerVersion,surfaces:t.surfaces,objectiveOrName:t.objectiveOrName,sessionId:t.sessionId,cwd:t.cwd,packRootDir:t.packRootDir}),r=await e.start();return{session:e,...r,packDir:e.pack,spawns:[],startedAtMs:Date.now(),cwd:t.cwd}}catch(e){return console.warn("evidence: inline pack creation failed",e),null}}function Ir(t,e,r){if(!t)return;t.session.noteSpawn(e),e.resolution&&(t.resolution=e.resolution);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));t.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function Sr(t){if(t)return{packTestDir:t.packTestDir,ordinalOffset:t.session.nextOrdinalOffset()}}async function Er(t,e){if(!t)return null;if(t.finalized)return t.finalized;let r=(n,i,o)=>e.log?e.log("warn",n,i,o):console.warn(`evidence: ${i}`,o??"");try{if(e.recordedTestPath)try{await t.session.writeDefinition(await kr.readFile(e.recordedTestPath,"utf8"))}catch(s){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(s)})}let n=e.cdpBrowserCapture?await e.cdpBrowserCapture():void 0,i=await t.session.writeResult({steps:t.session.steps,spawns:t.spawns.length?t.spawns:[{resultCode:null}],externalIdInput:{...e.externalIdInput,execution_id:t.executionId},runnerEnv:Re({cdpBrowser:n,resolution:t.resolution}),intentEnv:{model:e.model,platform:"Desktop",platform_type:"web"},durationMs:e.durationMs??Date.now()-t.startedAtMs,log:e.log});try{if(e.recordedTestPath){let s=kt({cwd:e.cwd??t.cwd??process.cwd(),members:[{path:e.recordedTestPath,verdict:i,executionId:t.executionId,startedAt:new Date(t.startedAtMs).toISOString(),mode:"inline",local:e.local??!1}]});for(let a of s.warnings)r("EXEC_SYNC",a)}}catch(s){r("EXEC_SYNC","exec-sync failed",{error:String(s)})}try{let s=(e.coverageWriter??bt)(t.packDir,W(e.cwd??t.cwd??process.cwd()));s.status==="skipped"&&r("EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${s.reason}`)}catch(s){r("EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(s)})}let o=await Ee({executionId:t.executionId,testId:t.testId,saved:e.saved,runKind:"author",verdict:i,cwd:e.cwd??t.cwd,packDir:t.packDir,tuiLogPath:e.tuiLogPath,log:e.log,surface:"inline"});return t.finalized=o,e.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:t.executionId,verdict:i,valid:o.valid,pack:t.packDir,store_copy:o.storePath??null}),o}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as Ar,openSync as Or,readSync as Fr,closeSync as Lr}from"fs";import{basename as Tr,resolve as jr}from"path";import{createServer as Rr}from"http";import{createReadStream as Pr,promises as Cr}from"fs";import{randomBytes as Dr}from"crypto";var Q="127.0.0.1";function It(t,e){if(!t)return null;let r=/^bytes=(\d*)-(\d*)$/.exec(t.trim());if(!r)return null;let[,n,i]=r;if(n===""&&i==="")return null;if(n===""){let a=Number(i);return a===0||e===0?"unsatisfiable":{start:Math.max(0,e-a),end:e-1}}let o=Number(n);if(o>=e)return"unsatisfiable";let s=i===""?e-1:Math.min(Number(i),e-1);return s<o?null:{start:o,end:s}}async function $e(t){let e=Dr(16).toString("hex"),r=Rr((i,o)=>{$r(i,o,t,e).catch(()=>o.destroy())});await new Promise((i,o)=>{r.once("error",o),r.listen(t.port??0,Q,()=>{r.removeListener("error",o),i()})});let n=r.address().port;return{port:n,urlFor:i=>`http://${Q}:${n}/${e}/${encodeURIComponent(i)}`,close:()=>new Promise(i=>{r.close(()=>i()),r.closeAllConnections()})}}async function $r(t,e,r,n){let i=t.url??"/",o=v=>{try{r.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:v,path:i})}catch{}};if(t.headers.host!==`${Q}:${t.socket.localPort}`){o("host_mismatch"),e.writeHead(403).end();return}let s=t.headers.origin;if(s!==void 0&&!r.allowedOrigins.includes(s)){o("origin_denied"),e.writeHead(403).end();return}let a=s?{"Access-Control-Allow-Origin":s,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(t.method==="OPTIONS"){let v={...a,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};t.headers["access-control-request-private-network"]==="true"&&(v["Access-Control-Allow-Private-Network"]="true"),e.writeHead(204,v).end();return}if(t.method!=="GET"&&t.method!=="HEAD"){e.writeHead(405,a).end();return}let c;try{let v=new URL(t.url??"/",`http://${Q}`).pathname.split("/");if(v.length!==3||v[1]!==n){o("bad_token"),e.writeHead(404,a).end();return}c=decodeURIComponent(v[2])}catch{o("not_found"),e.writeHead(404,a).end();return}let d=r.packs.get(c);if(!d){o("not_found"),e.writeHead(404,a).end();return}let l;try{let v=await Cr.stat(d);if(!v.isFile())throw new Error("not a file");l=v.size}catch{o("not_found"),e.writeHead(404,a).end();return}let u={...a,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(t.method==="HEAD"){e.writeHead(200,{...u,"Content-Length":String(l)}).end();return}let p=It(t.headers.range,l);if(p==="unsatisfiable"){o("unsatisfiable"),e.writeHead(416,{...a,"Content-Range":`bytes */${l}`}).end();return}let[f,m,g]=p===null?[0,l-1,200]:[p.start,p.end,206],b={...u,"Content-Length":String(m-f+1)};if(g===206&&(b["Content-Range"]=`bytes ${f}-${m}/${l}`),e.writeHead(g,b),l===0){e.end();return}let I=Pr(d,{start:f,end:m});I.on("error",()=>e.destroy()),e.on("close",()=>I.destroy()),I.pipe(e)}function B(t,e){return(e??Ge(t).evidenceViewerUrl).replace(/\/+$/,"")}function Ae(t,e){return`${e}/?pack=${encodeURIComponent(t)}`}function Oe(t){return`evidence: view locally with \`kane-cli evidence serve ${t}\``}async function Nr(t,e,r={}){let n=r.out??(l=>process.stdout.write(l+`
|
|
10
|
-
`)),i=l=>(n(`error: ${l}`),2);if(e.env!=="prod"&&e.env!=="stage")return i(`invalid --env: ${String(e.env)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))return i("invalid --port: expected an integer 1-65535");let o;try{o=B(e.env,e.viewerUrl),new URL(o)}catch{return i(`invalid --viewer-url: ${e.viewerUrl}`)}if(t.length===0)return i("no pack paths given");let s=new Map;for(let l of t){let u=jr(l),p;try{p=Ar(u)}catch{return i(`${l}: not found`)}if(p.isDirectory())return i(`${l}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!p.isFile())return i(`${l}: not a regular file`);let f=Buffer.alloc(2),m=Or(u,"r");try{Fr(m,f,0,2,0)}finally{Lr(m)}if(f.toString("latin1")!=="PK")return i(`${l}: not a sealed evidence pack (zip magic missing)`);let g=Tr(u);if(s.has(g))return i(`duplicate pack basename: ${g} (URL names collide \u2014 rename one)`);s.set(g,u)}let a=r.log??((l,u,p)=>process.stderr.write(`warn: ${u} reason=${p.reason} path=${p.path}
|
|
11
|
-
`)),c;try{c=await $e({packs:s,allowedOrigins:[new URL(o).origin],port:e.port,log:a})}catch(l){return i(`could not bind 127.0.0.1${e.port?`:${e.port}`:""} \u2014 ${l.message}`)}n(`serving ${s.size} pack${s.size===1?"":"s"} on http://127.0.0.1:${c.port}`);for(let l of s.keys()){let u=c.urlFor(l);n(l),n(` pack ${u}`),n(` viewer ${Ae(u,o)}`)}return n("press Ctrl-C to stop"),await(r.hold??Mr)(),await c.close(),0}function Mr(){return new Promise(t=>{let e=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of e)process.on("SIGINT",r);t()})})}import{promises as q}from"fs";import{tmpdir as zr}from"os";import{join as Rt,resolve as Le}from"path";var Vr=["error","prefer_first","prefer_latest","discard"],Br=["external_id.commit_id","external_id.test_id"];function St(t){let e=t.replace(/-/g,"_");return Vr.includes(e)?e:null}function Et(t){let e=t==="discard"?{on_collision:"discard"}:{on_collision:"error",identity:{keys:[...Br],on_same:t??"nest",on_different:t?"error":"split"}};return _({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:e,rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function Fe(t){try{if(!t.isTTY){t.log(Oe(t.packPath));return}let e=B(t.env);await(t.renderPrompt??Hr)(t.packPath,e)}catch(e){try{t.log(`evidence view failed \u2014 ${e.message}`)}catch{}}}async function Hr(t,e){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-F5YG54OC.js");await new Promise(o=>{let s=n(r.default.createElement(i,{packPath:t,viewerBase:e,onDone:()=>{s.unmount(),o()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function Gr(t,e,r=process.cwd(),n={}){let i=n.out??(p=>process.stdout.write(p+`
|
|
12
|
-
`)),o=n.err??(p=>process.stderr.write(p+`
|
|
13
|
-
`)),s=p=>(o(`evidence merge: ${p}`),2);if(!e.runId)return s("--run-id is required (merged identity is the caller's fact)");if(e.rules&&e.onCollision)return s("--rules and --on-collision are mutually exclusive");let a;if(e.onCollision!==void 0){let p=St(e.onCollision);if(!p)return s(`invalid --on-collision: ${e.onCollision} (expected error | prefer-first | prefer-latest | discard)`);a=p}let c=[];for(let p of t){let f=await Ur(p,r);if(!f)return s(`no pack found for "${p}"`);c.push(f)}let d=e.out?Le(r,e.out):y(e.runId,r),l=null,u;e.rules?u=Le(r,e.rules):(l=await q.mkdtemp(Rt(zr(),"kane-merge-rules-")),u=Rt(l,"merge-rules.yaml"),await q.writeFile(u,Et(a)));try{let p=await(n.mergeFn??Ue)(c,{runId:e.runId,out:d,rulesPath:u,title:e.title,finalize:e.finalize});return e.json?i(JSON.stringify(p)):Yr(i,p),p.output.finalized&&!e.json&&await(n.offer??Fe)({packPath:d,env:e.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:o}),0}catch(p){let f=p instanceof Error?p.message:String(p);return p?.code==="ABORT"?(o(`evidence merge: aborted \u2014 ${f}`),1):s(f)}finally{l&&await q.rm(l,{recursive:!0,force:!0}).catch(()=>{})}}async function Ur(t,e){let r=Le(e,t);if(await Pt(r))return r;let n=y(t,e);return await Pt(n)?n:null}async function Pt(t){try{return await q.stat(t),!0}catch{return!1}}function Yr(t,e){let{packs:r,tests:n,output:i}=e;t(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let o of r.skipped)t(` skipped ${o.runId}: ${o.rule} \u2014 ${o.reason}`);for(let o of n.collisions){let s;o.action==="nest"?s=`nested into ${o.folder}, latest ${o.winner}`:o.action==="split"?s=`split into ${o.folder}`:s=`winner ${o.winner}`,t(` collision ${o.test}: ${s} (${o.rule})`)}for(let o of n.discarded)t(` discarded ${o}`)}import{copyFileSync as Kr,existsSync as Te,mkdirSync as Wr}from"fs";import{join as Ct}from"path";function Jr(t,e,r){try{let n=Ct(t,"auteur","execution.json");if(Te(n))return!0;for(let i of e)if(!(!i||!Te(i)))return Wr(Ct(t,"auteur"),{recursive:!0}),Kr(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:e.find(i=>i&&Te(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as Xr}from"fs";import{join as Zr}from"path";function Ne(t){let e=[],r=!0,n=o=>{if(o===null||typeof o!="object")return;let s=o;if(Array.isArray(s.operations))for(let a of s.operations){let c=a?.operation_id;typeof c=="string"&&c&&e.push(c)}if(Array.isArray(s.children)){s.content_type!=="generative_block"&&(r=!1);for(let a of s.children)n(a)}if(Array.isArray(s.branches)){r=!1;for(let a of s.branches){let c=a?.children;if(Array.isArray(c))for(let d of c)n(d)}}},i=t?.instructions;if(Array.isArray(i))for(let o of i)n(o);return{ids:e,linear:r}}function Qr(t){return Ne(t).ids}function je(t,e){let r=new Set(e.map(a=>a.action_id).filter(Boolean)),n=-1;for(let a of r){let c=t.indexOf(a);c>n&&(n=c)}let i=e.reduce((a,c)=>Math.max(a,c.ordinal),0),o=new Set,s=[];for(let a of t.slice(n+1))r.has(a)||o.has(a)||(o.add(a),s.push({id:a,ordinal:++i,status:"skipped",action_id:a}));return s}function Dt(t,e){let r=new Set(e),n=t.filter(o=>o.action_id);if(n.some(o=>r.has(o.action_id))||n.length>e.length)return null;let i=0;return t.map(o=>o.action_id?{...o,action_id:e[i++]}:o)}function qr(t,e){if(t.length>e.length)return!1;for(let r=0;r<t.length;r++)if(e[r]!==t[r].action_id)return!1;return!0}function en(t,e,r,n=!0){if(e.length===0)return{steps:t,tail:[]};let i=(r&&n?Dt(t,e):null)??t,o=i.filter(a=>a.action_id),s=new Set(e);return o.length>0&&o.every(a=>s.has(a.action_id))?{steps:i,tail:je(e,i)}:o.length>0&&!qr(o,e)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:je(e,i)}}function $t(t){try{let e=Xr(Zr(t,"auteur","execution.json"),"utf8");return Ne(JSON.parse(e))}catch{return{ids:[],linear:!0}}}function tn(t){return $t(t).ids}export{D as a,oe as b,se as c,ae as d,ce as e,de as f,ue as g,le as h,pe as i,Lt as j,fe as k,me as l,Tt as m,jt as n,ge as o,J as p,we as q,ye as r,_e as s,xe as t,Nt as u,Mt as v,ke as w,Vt as x,be as y,Ie as z,Se as A,at as B,Ee as C,Re as D,ut as E,Jt as F,M as G,tr as H,xt as I,kt as J,bt as K,br as L,Ir as M,Sr as N,Er as O,It as P,$e as Q,B as R,Ae as S,Oe as T,Nr as U,Fe as V,Gr as W,Jr as X,Ne as Y,Qr as Z,je as _,Dt as $,en as aa,$t as ba,tn as ca};
|
package/dist/chunk-53IBTIL3.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as jt}from"./chunk-ZMNJBUAO.js";import{f as tr}from"./chunk-W5TTF7GB.js";import{a as Bt}from"./chunk-I7TIGB7K.js";import{a as ke,c as Yt,e as Zt,f as Fe,g as Qt,h as or}from"./chunk-AJ56AMT6.js";import{a as Xt,b as rr,c as sr,d as ir,e as dt,f as nr}from"./chunk-F7ISS545.js";import{a as Se,b as qt,c as Gt,d as Lt,e as Vt}from"./chunk-7OYZR6JA.js";import{a as Kt,b as Jt}from"./chunk-JFAFKHDX.js";import{b as Ft}from"./chunk-YKTYVJBN.js";import{a as er}from"./chunk-IMR64OCZ.js";import{a as zt}from"./chunk-L2TV4G56.js";import{c as Wt}from"./chunk-6KPPGMO2.js";import{d as Ut}from"./chunk-DBKNJRJG.js";import{a as Be}from"./chunk-5FJJJNJK.js";import{d as Mt}from"./chunk-W4B5LOEX.js";import{a as be,b as ct}from"./chunk-DNNZ353O.js";import{a as Nt,e as Ht}from"./chunk-GFKCTYCA.js";import{a as we}from"./chunk-NVGBE2DR.js";import{A as Z,k as ye,o as je}from"./chunk-TH47OOBV.js";import{f as It}from"./chunk-DUAXZYAD.js";import{e as at}from"./chunk-DBIBROYW.js";import{d as de}from"./chunk-WXHQYYD5.js";import{b as Ot}from"./chunk-IAHKTEET.js";import{b as ot}from"./chunk-IDX3TOPY.js";import{a as At}from"./chunk-5EOX4MEY.js";import{appendFileSync as wr,mkdirSync as ut,rmdirSync as br,writeFileSync as lt}from"fs";import{dirname as mr,extname as Sr,join as oe}from"path";var J=class extends Error{code;constructor(e,a){super(`${e}: ${a}`),this.name="ProposalAdapterError",this.code=e}};function cr(r){return r.version===2}var ar=8;function vr(r){let e=/^extract@(\d+)$/.exec(r??"");return e?Number.parseInt(e[1],10):null}var yr=r=>typeof r=="object"&&r!==null&&"op"in r;function qe(r,e,a){return{anchor:r.anchor,quote:r.quote,...a||r.source_id!==e?{source_id:r.source_id}:{}}}function dr(r,e,a={}){let m=vr(a.templateVersion),_=m!==null&&m>=5,x=m!==null&&m<5,y=r.archived!=null&&r.archived.length>0&&m!==null&&m<5;if(y&&a.warn?.(`dropped ${r.archived.length} archive op(s): the bound extract template @${m} never described archiving \u2014 nothing was archived; the use-cases still land`),!_&&r.read_basis.length!==1)throw new J("READ_BASIS_COUNT",`read_basis must have exactly 1 element, got ${r.read_basis.length}`);if(r.read_basis.length===0)throw new J("READ_BASIS_COUNT","read_basis must not be empty");let v=r.read_basis[0],g=r.read_basis.length>1,k=r.use_cases.map(i=>{if(x&&i.cite.length!==1)throw new J("CITE_COUNT",`${i.temp_ref}: cite must have exactly 1 element, got ${i.cite.length}`);if(i.cite.length<1||i.cite.length>ar)throw new J("CITE_COUNT",`${i.temp_ref}: 1..${ar} cites allowed, got ${i.cite.length}`);let I=(h,Q)=>{if(!_&&h!==v.source_id)throw new J("SOURCE_MISMATCH",`${Q}: cite source ${h} != read_basis source ${v.source_id} (single-source)`)};I(i.cite[0].source_id,i.temp_ref);let P=i.cite.map(h=>(I(h.source_id,i.temp_ref),qe(h,v.source_id,_&&(g||h.source_id!==v.source_id)))),u=(i.updated?.criteria??[]).some(yr);if(!_&&u)throw new J("CRITERIA_OPS_UNSUPPORTED",`${i.temp_ref}: op-union updated.criteria (keep/set/remove) needs an extract@5+ binding \u2014 this session is bound to ${a.templateVersion??"an unversioned template"}`);return{temp_ref:i.temp_ref,title:i.title,...i.description!==void 0?{description:i.description}:{},...i.summary!==void 0?{summary:i.summary}:{},...i.actors!==void 0?{actors:i.actors}:{},...i.value!==void 0?{value:i.value}:{},risk:i.risk,cite:P[0],...P.length>1?{cites:P}:{},...i.criteria!=null&&i.criteria.length>0?{criteria:i.criteria.map((h,Q)=>(I(h.cite.source_id,`${i.temp_ref}.criteria[${Q}]`),{text:h.text,cite:qe(h.cite,v.source_id,_&&h.cite.source_id!==v.source_id)}))}:{},depends_on_hint:i.depends_on_hint,matches_existing:i.matches_existing,...i.conflicts_with!=null?{conflicts_with:i.conflicts_with}:{},...i.changed?{changed:!0}:{},...i.updated!=null?{updated:{...i.updated.title!=null?{title:i.updated.title}:{},...i.updated.description!=null?{description:i.updated.description}:{},...i.updated.summary!=null?{summary:i.updated.summary}:{},...i.updated.actors!=null?{actors:i.updated.actors}:{},...i.updated.value!=null?{value:i.updated.value}:{},...i.updated.risk!=null?{risk:i.updated.risk}:{},...i.updated.criteria!=null?{criteria:u?i.updated.criteria.map(h=>h.op==="set"?{op:"set",text:h.text,cite:qe(h.cite,v.source_id,_&&h.cite.source_id!==v.source_id)}:h.op==="keep"?{op:"keep",ref:h.ref,text:h.text}:{op:"remove",ref:h.ref,text:h.text,reason:h.reason}):i.updated.criteria.map((h,Q)=>(I(h.cite.source_id,`${i.temp_ref}.updated.criteria[${Q}]`),{text:h.text,cite:qe(h.cite,v.source_id,_&&h.cite.source_id!==v.source_id)}))}:{}}}:{},...i.change_note!=null?{change_note:i.change_note}:{}}});return{version:1,read_basis:e,source:{source_id:v.source_id,source_cid:v.source_cid},use_cases:k,...g?{sources:r.read_basis.map(i=>({source_id:i.source_id,source_cid:i.source_cid}))}:{},...r.extraction_of!=null&&r.extraction_of.length>0?{extraction_claims:r.extraction_of.map(i=>({source_id:i.source_id,completeness:i.completeness}))}:{},...r.archived!=null&&r.archived.length>0&&!y?{archived:r.archived.map(i=>({target:i.target,reason:i.reason,basis:i.basis}))}:{}}}function ur(r){let{contextDir:e,graph:a}=r,m=r.maxDigestBytes??4096,_={},x=[];for(let[g,k]of a.heads){if(_[g]=k,typeof k!="string")continue;let i=a.mediaOf(k),I=a.getNode(k)?.content?.blob;if(typeof I=="string")if(i.format==="image")x.push({source_id:g,cid:k,format:"image",blobRef:{path:we(e,I),cid:I}});else{let P=be(e,a,k)?.toString("utf8")??"";x.push({source_id:g,cid:k,format:i.format,text:P})}}x.sort((g,k)=>g.source_id<k.source_id?-1:1);let y=[];for(let g of a.byLabel(de.STYLENOTE).sort((k,i)=>k.cid<i.cid?-1:1))a.superseded.has(g.cid)||y.push(`\u2022 ${String(g.content.statement)} [${String(g.content.learned_from_kind)}]`);let v="";for(let g of y){if(Buffer.byteLength(v+g+`
|
|
3
|
-
`,"utf8")>m)break;v+=g+`
|
|
4
|
-
`}return{read_basis:_,sources:x,styleNoteDigest:v}}function lr(r,e){let a=ur({contextDir:r,graph:e}).styleNoteDigest;return a.length>0?a:void 0}function mt(r,e,a,m,_){let x=null,y=()=>x??=_&&Object.keys(_).length>0?Promise.resolve(_):Ut().catch(()=>({}));return{contextDir:r,rootSid:e,locks:at(r,e),probe:m??Bt(r,{resolveAlias:async v=>qt(v,{env:process.env,auth:await y()}),embed:async(v,g)=>Gt(v,g,{env:process.env,auth:await y()}),readVector:(v,g)=>Lt(r,v,g),writeVector:(v,g,k)=>Vt(r,v,g,k)}),...a?.length?{reservedEventIds:a}:{}}}function gt(r,e){let a=[],m=[];for(let _ of r.use_cases){let x=_.matches_existing;x?.cid&&e.hasNode(x.cid)?a.push({ref:x.cid,expectedTip:e.tipOf(x.cid)}):m.push({tempRef:_.temp_ref,title:String(_.title??""),probeText:String(_.title??"")})}return{verb:"extract",ucTargets:a,newBuCandidates:m,sourcePins:[{source_id:r.source.source_id,source_cid:r.source.source_cid}],readBasis:r.read_basis??null}}function kr(r,e){let a=(r.images??[]).filter(m=>m.delivery==="selected");if(a.length!==0)return a.map(m=>({ref:m.ref,...m.page!==void 0?{page:m.page}:{},...m.loc!==void 0?{loc:m.loc}:{},media_type:m.media_type,blob_ref:{path:we(e,m.blob),cid:m.blob}}))}function $r(r){return r.length>8&&r[0]===137&&r[1]===80&&r[2]===78&&r[3]===71?"image/png":r.length>3&&r[0]===255&&r[1]===216&&r[2]===255?"image/jpeg":r.length>12&&r.toString("ascii",0,4)==="RIFF"&&r.toString("ascii",8,12)==="WEBP"?"image/webp":null}function Ge(r){return r.toISOString().replace(/[-:]/g,"").slice(0,15)}function gr(r){return r.startsWith("su-conv-")?`conv-${Ot(Buffer.from(r,"utf8")).slice(0,8)}`:r}function pr(r){return r.source_id.startsWith("su-conv-")?"the conversation":r.source_id}function Rr(r,e,a){return`reading ${pr(r)}${a>1?` (source ${e} of ${a})`:""}`}function $e(r){return r.toLowerCase().trim().replace(/\s+/g," ")}function hr(r,e){let a=new Map,m=new Map,_=new Map;for(let{cid:y,content:v}of e.byLabel(de.USECASE)){if(e.superseded.has(y))continue;(e.trust.get(y)==="archived"?_:m).set($e(String(v.title??"")),y)}let x=y=>e.trust.get(y)==="archived"?{cid:y,archived:!0,reason:e.archivedReason.get(y)}:{cid:y};for(let y of r.use_cases){if(y.matches_existing){let k=y.matches_existing.cid;if(e.superseded.has(k)){let i=e.tipOf(k);k=e.superseded.has(i)?null:i}if(k!==null){a.set(y.temp_ref,x(k));continue}}let v=m.get($e(y.title));if(v){a.set(y.temp_ref,{cid:v});continue}let g=_.get($e(y.title));g&&a.set(y.temp_ref,x(g))}return a}var fr=/^(\S+)\.criteria\[(\d+)\]/;function Cr(r,e,a){if(e.length===0||!e.every(_=>fr.test(_.detail)))return!1;let m=new Map;for(let _ of e){let x=fr.exec(_.detail),y=m.get(x[1])??new Set;y.add(Number(x[2])),m.set(x[1],y)}for(let _ of r.use_cases){let x=m.get(_.temp_ref);x?.size&&(_.criteria=(_.criteria??[]).filter((y,v)=>!x.has(v)),a(`${_.temp_ref}: dropped ${x.size} criteria with unverifiable cites \u2014 committed without them (criteria are hints, not oracles)`))}return!0}async function ht(r,e,a,m,_=()=>{},x,y){let v=(g,k)=>_(g,k,r.session_id);return Zt(r,e,a,m,_,{async onProposalEvent(g){let k=g,i=null,I=null;if(cr(k))try{i=dr(k,r.read_basis,{templateVersion:y?.()??null,warn:P=>{e.out(`warning: ${P}`),v("adapter",{warn:P})}}),v("adapter",{ok:!0,use_cases:i.use_cases.length})}catch(P){I=P instanceof J?P.message:String(P),v("adapter",{ok:!1,error:I})}else i=k;return i&&i.use_cases.length===0&&(e.out("warning: the agent proposed ZERO use-cases for this source"),e.emit?.({type:"warning",code:"ZERO_USE_CASES",message:"the agent proposed ZERO use-cases for this source"})),i&&x&&await x(i),{proposal:i,error:I}}})}var Dr=new Set(["agent","ci","override"]);async function Ss(r,e){let a=`ext-${Ge(e.now?.()??new Date)}-lk${Math.random().toString(36).slice(2,8)}`,_=at(e.contextDir,a,e.now?{now:e.now}:void 0).tryAcquire([{kind:"extract"}],{hold:"session",verb:"extract"});if("contended"in _){let x=_.contended.holder,y=`another extraction is running on this context${x?` (pid ${x.pid})`:""} \u2014 retry when it finishes`;return e.out(y),e.emit?.({type:"error",message:y,code:"EXTRACT_LOCKED"}),2}try{return await Er(r,e)}finally{_.release()}}async function Er(r,e){let a=r.mode??"interactive";if(r.posture==="reconcile"){if(r.trust==="hold"){let n="error: --trust hold has no meaning here \u2014 a reconcile IS the review; drop the flag";return e.out(`${n} [TRUST_USAGE]`),e.emit?.({type:"error",message:n,code:"TRUST_USAGE"}),2}if(!r.source||!r.changeContext){let n="reconcile posture needs a pinned source and its change context \u2014 internal wiring fault";return e.out(`error: ${n}`),e.emit?.({type:"error",message:n,code:"POSTURE_USAGE"}),2}if(a==="ci"){let n="reconcile posture is not available under --mode ci \u2014 a held changeset needs a durable session; use --mode agent";return e.out(`error: ${n}`),e.emit?.({type:"error",message:n,code:"POSTURE_USAGE"}),2}}if(r.trust==="hold"&&a==="interactive")return e.out("error: --trust hold only applies to headless runs \u2014 in interactive chat you review items in-session anyway; use --mode agent to hold everything for review"),e.emit?.({type:"error",message:"error: --trust hold only applies to headless runs \u2014 use --mode agent",code:"TRUST_USAGE"}),2;if(a==="interactive"){if(!e.isTTY)return e.out("extract: --mode interactive needs a TTY (use --mode agent|ci|override headless)"),2}else if(!Dr.has(a))return e.out(`extract: unknown mode "${a}" \u2014 interactive | agent | ci | override`),2;if(r.trust!==void 0){if(a==="ci")return e.out("error: --trust is not available under --mode ci (ci is fail-closed \u2014 no trust dials)"),e.emit?.({type:"error",message:"error: --trust is not available under --mode ci",code:"TRUST_UNDER_CI"}),2;if(r.trust!=="auto"&&r.trust!=="hold")return e.out(`error: --trust must be auto | hold, got '${r.trust}'`),e.emit?.({type:"error",message:`error: --trust must be auto | hold, got '${r.trust}'`,code:"TRUST_USAGE"}),2}let m=e.telemetry?.enabled?e.telemetry:void 0,_=Ge(e.now?.()??new Date),x=m?At(m.ids.context_instance_id??null,"extract",m.ids.session_id):oe(e.contextDir,"logs",`extract-${_}.log`);ut(mr(x),{recursive:!0});let y=`run-${_}-${Math.random().toString(36).slice(2,8)}`,v=n=>n==="error"||n==="failed_proposal"?"error":n==="repair_respawn"?"warn":"info",g=(n,d,s)=>{try{wr(x,JSON.stringify({ts:new Date().toISOString(),level:v(n),run_id:y,...m?{user_session_id:m.ids.session_id}:{},...s?{session_id:s}:{},kind:n,data:d})+`
|
|
5
|
-
`)}catch{}m?.wireTrace(n,d,s)};{let n=e.out;e.out=d=>{g("transcript",{line:d}),n(d)}}e.out(`trace: ${ke(x)}`),e.emit?.({type:"run_start",mode:a,trace:x,...m?{session:m.ids.session_id}:{}});let k=Ft();if(k&&e.out(k),e.preflightTurn){let n=await e.preflightTurn();if(g("preflight",n),!n.ok)return e.out(n.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:n.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),2}let i=Z(e.contextDir),I=lr(e.contextDir,i),P=r.sources?.length?r.sources:r.source?[r.source]:[];if(P.length>0){if(r.resume){let n="error: --source cannot be combined with --resume (the resumed session already has its scope)";return e.out(n),e.emit?.({type:"error",message:n,code:"SOURCE_WITH_RESUME"}),2}for(let n of P){let d=i.heads.get(n);if(typeof d!="string"){let s=d===null?`error: --source ${n} was ingested but is retired \u2014 re-ingest it to extract again`:`error: --source ${n} is not an ingested source (kane-cli context list shows them)`;return e.out(s),e.emit?.({type:"error",message:s,code:"SOURCE_UNKNOWN"}),2}}}let u=null,h=null;if(r.resume){try{{let c=await nr(e.contextDir,r.resume,i,{verb:"extract",deps:{onWarn:C=>e.out(`note: ${C}`)}});{let C=Object.keys(c.handle.state.read_basis??{});if(C.length>1){let j=`error: session ${r.resume} spans ${C.length} sources \u2014 multi-source resume isn't supported yet; committed work is preserved (re-run kane-cli context extract for anything remaining)`;return e.out(j),e.emit?.({type:"error",message:j,code:"MULTI_SOURCE_RESUME"}),c.handle.release(),2}h=c,g("resume_kind",{kind:c.view.pointer===null?"bare-base":c.view.pointer.at==="final"?"pause":"crash"}),u={handle:c.handle,represent:c.represent,questions:c.questions,staleBasis:c.drift.map(j=>j.subject)}}}}catch(c){let C=c instanceof Error?c.message:String(c);return e.out(`error: ${C}`),e.emit?.({type:"error",message:`error: ${C}`,...c instanceof dt?{code:c.code}:{}}),c instanceof dt?2:1}let n=h?null:Xt(u.handle.state.verb,"extract",r.resume);if(n)return e.out(n.message),e.emit?.({type:"error",message:n.message,code:n.code}),u.handle.release(),2;let d=u.handle.state.change_basis;if(d&&(i.heads.get(d.source_id)??null)!==d.new_head){let c=`error: ${d.source_id} moved while this reconcile extraction was paused \u2014 its recorded change context no longer matches; re-run kane-cli maintain reconcile against the current file (session ${r.resume} is defunct and can be ignored)`;return e.out(c),e.emit?.({type:"error",message:c,code:"CHANGE_BASIS_MOVED"}),u.handle.release(),2}if(h&&h.view.pointer!==null&&h.drift.length>0){if(!await e.confirmStale(`changed since the pause: ${h.drift.map(C=>C.subject).join(", ")} \u2014 re-ground and continue against the current versions?`)){let C=`resume aborted: the context moved since the pause (${h.drift.map(j=>j.subject).join(", ")}) \u2014 session ${r.resume} is preserved`;return e.out(C),e.emit?.({type:"error",message:C,code:"RESUME_DRIFT"}),u.handle.release(),2}}else u.staleBasis.length>0&&e.out(`note: changed since the pause: ${u.staleBasis.join(", ")} \u2014 re-presented items may be stale`);let s=[...new Set([...u.handle.state.held_receipts??[],...h?.view.kane?.held_receipts??[]])];if(s.length>0)if(e.chat?.holdReceipt)for(let c of s)e.chat.holdReceipt(c);else e={...e,initialMessage:[s.join(`
|
|
6
|
-
|
|
7
|
-
`),e.initialMessage].filter(Boolean).join(`
|
|
8
|
-
|
|
9
|
-
`)};u.handle.state.assumed.length>0&&e.out(`note: ${u.handle.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${r.resume} lists them`)}let Q=i.extractedSourceCids,ue=!!(r.force||u?.handle.state.force),ee=[],se=[],Re=P.length>0?new Set(P):null;for(let[n,d]of i.heads.entries())if(d!=null&&!(Re&&!Re.has(n))){if(!Re&&!u&&n.startsWith("su-conv-")){e.out(`skipped ${n} \u2014 conversation source; extract it explicitly with --source ${n}`),se.push({source_id:n,reason:"conversation"});continue}if(u){let s=n in u.handle.state.read_basis,c=u.handle.state.corpus_cursor.remaining.includes(n);if(!s&&!c)continue;if(c&&!ue&&Q.has(d)){e.out(`${n} already extracted \u2014 skipped (--force re-runs it)`),se.push({source_id:n,reason:"cached"});continue}}else if(!ue&&Q.has(d)){e.out(`${n} already extracted \u2014 skipped (--force re-runs it)`),se.push({source_id:n,reason:"cached"});continue}ee.push({source_id:n,cid:d})}let _r=n=>{let d=tr(e.contextDir,n);d&&e.out(`note: a reconcile plan for ${n} is pending (${d.pending} item(s)) \u2014 resume with \`kane-cli maintain reconcile --apply ${d.path}\``)};for(let n of se)n.reason==="cached"&&_r(n.source_id);if(e.emit?.({type:"corpus",sources:ee,skipped:se}),ee.length===0){if(u){let s=`error: resumed session's paused source (${Object.keys(u.handle.state.read_basis).join(", ")||"unknown"}) is no longer in the corpus \u2014 restore/re-ingest it and re-run --resume ${r.resume}, or discard with: kane-cli context sessions clean ${r.resume}`;return e.out(s),e.emit?.({type:"error",message:s,code:"SOURCE_MISSING"}),u.handle.release(),2}let n=se.length>0&&se.every(d=>d.reason==="conversation");return e.out(Re?`extract: nothing to do \u2014 ${P.join(", ")} ${P.length===1?"is":"are all"} already extracted at the current snapshot (--force to re-run)`:n?"extract: nothing to do \u2014 only conversation sources here (extract one explicitly with --source <id>)":"extract: nothing to do \u2014 every ingested source is already extracted"),0}let te=!r.plan&&a!=="ci",Ce=e.now?.()??new Date,De=r.resume??`ext-${Ge(Ce)}-${gr(ee[0].source_id)}`,T=null,Ee=!1;te&&!u&&(T=ot(e.contextDir,{sid:De,mode:"agent",created_at:Ce.toISOString(),expires_at:new Date(Ce.getTime()+1440*60*1e3).toISOString(),agent_state:{schema:2,items:[],provider_state:""},pending:{questions:[],proposals:[]},assumed:[],read_basis:{[ee[0].source_id]:ee[0].cid},corpus_cursor:{remaining:ee.slice(1).map(n=>n.source_id)},conv_source:"",verb:"extract",...ue?{force:!0}:{},...r.changeContext?{change_basis:{source_id:r.changeContext.source_id,new_head:r.changeContext.new_head}}:{},...m?{user_session_id:m.ids.session_id}:{}}));let Le=h?h.represent.map(n=>n.event_id).filter(n=>typeof n=="string"):[],w=u?.handle??T,ft=!1,pt=()=>{try{br(oe(e.contextDir,"sessions"))}catch{}},_t=()=>{if(T){try{T.complete()}catch{T.release()}T=null,w=null,pt()}},Pe=new Map;if(u&&u.questions.length>0&&!r.message&&!r.withSource){e.out(`re-presenting ${u.questions.length} unanswered question(s) from the paused session`);let n=await e.ask(u.questions.map(rr));if(Array.isArray(n))for(let d of n)Pe.set(d.id,d)}let le=e.by??{kind:"human",id:"owner"},re=a==="interactive"&&!r.plan&&!!e.chat,Ve=0,xt=0,Te=!1,me=0,We=()=>{Te||(Te=!0,e.out("note: duplicate detection is running in a reduced mode this run \u2014 new items will be held for your review instead of committed"),m?.event("ASR_EMBED_DEGRADED",{}),e.emit?.({type:"degraded",reason:"embed_fallback"}))},Ae=null,ge=()=>w??T,ze=(n,d,s)=>{let c=ge();if(!c)return;let C=d.map(b=>({label:"usecase",content:{title:b.title,...b.summary!==void 0?{summary:b.summary}:{},...b.risk!==void 0?{risk:b.risk}:{},derived:!0,_held:{source_id:n.source_id,source_cid:n.cid,anchor:b.cite?.anchor??"L1-L1",quote:b.cite?.quote??""}},rationale:`held (${s==="degraded"?"embed degraded \u2014 lexical dedup only":"--trust hold"}): ${n.source_id} @ ${n.cid.slice(0,19)} ${b.cite?.anchor??""}`,edges:[],tempRef:b.temp_ref})),j=c.state.pending;c.save({pending:{questions:j.questions,proposals:[...j.proposals,...C]}}),me+=C.length,Ae=c.state.sid,e.emit?.({type:"held",source_id:n.source_id,count:C.length,reason:s==="degraded"?"embed_degraded":"trust_hold"})},F=[],vt=!1,M=[...ee];try{let n=d=>{let s=w;if(!s)return;let c=s.state.ingest_schedule??[];if(!c.some(b=>b.status==="pending"))return;let C=Z(e.contextDir),j=c.map(b=>b.status!=="pending"?b:(C.heads.get(b.source_id)??null)!==b.cid?(e.out(`note: ${b.source_id} changed after it was added \u2014 skipping its extraction this run; re-run kane-cli context extract to pick up the newer version`),{...b,status:"skipped",note:"head moved since landing"}):C.extractedSourceCids.has(b.cid)||M.some(V=>V.source_id===b.source_id&&V.cid===b.cid)?{...b,status:"done"}:M.some(V=>V.source_id===b.source_id)?(e.out(`note: an older version of ${b.source_id} is already queued this run \u2014 the newly landed version is not extracted; re-run kane-cli context extract to pick it up`),{...b,status:"skipped",note:"an older version of the source was already queued this run"}):(M.push({source_id:b.source_id,cid:b.cid}),e.out(`queued ${b.source_id} for extraction in this run (landed mid-run)`),{...b,status:"done"}));s.save({ingest_schedule:j,corpus_cursor:{remaining:M.slice(d+1).map(b=>b.source_id)}})};for(let d=0;d<M.length;n(d),d++){let s=M[d],c=Z(e.contextDir),C={current:c};e.chat?.attachOnCommitted?.(t=>{C.current=t});let j=c.getNode(s.cid),b=String(j?.content.blob??""),Oe=be(e.contextDir,c,s.cid);if(!Oe){e.out(`error: ${s.source_id}: its stored content is missing \u2014 re-ingest the file (kane-cli context ingest <file>) [BLOB_MISSING]`),e.emit?.({type:"error",source_id:s.source_id,message:`error: ${s.source_id}: blob ${b} missing from .context/blobs`,code:"BLOB_MISSING"}),F.push(s.source_id);continue}let V=c.mediaOf(s.cid),Ke=V.media_type.startsWith("image/");if(!Ke){let t=$r(Oe);if(t){e.out(`skipping ${s.source_id}: binary ${t} ingested before image support \u2014 re-ingest it (kane-cli context ingest) to extract from it`),e.emit?.({type:"source_skipped",source_id:s.source_id,reason:"binary_pre_media"});continue}}let yt=Ke?`0001| (image source ${s.source_id} \u2014 the content is attached as an image; cite it with anchor img#whole)`:ct(Oe),Ie=(t,o)=>{let l=new Map;l.set(s.source_id,{media:V,numberedText:yt});for(let f of o.sources??[]){if(l.has(f.source_id))continue;let D=be(e.contextDir,t,f.source_cid);if(!D)continue;let $=t.mediaOf(f.source_cid),E=$.media_type.startsWith("image/")?`0001| (image source ${f.source_id} \u2014 the content is attached as an image; cite it with anchor img#whole)`:ct(D);l.set(f.source_id,{media:$,numberedText:E})}return l},wt=Ge(e.now?.()??new Date),ie=`${wt}-${s.source_id}`,he=!!(u&&s.source_id in u.handle.state.read_basis),Me=w?De:`ext-${wt}-${gr(s.source_id)}`,Je=M.slice(d+1).map(t=>t.source_id);w&&te&&!he&&w.save({read_basis:{[s.source_id]:s.cid},corpus_cursor:{remaining:Je}});let ne="";if(re){let t=Wt({contextDir:e.contextDir,graph:Z(e.contextDir),sessionStamp:Me,by:le});t.errors===null||t.errors[0]?.code==="CONV_SOURCE_EXISTS"?(ne=t.sourceId,e.chat.attachConversationSource?.(ne),C.current=Z(e.contextDir)):e.out(`warning: notes you add in chat can't be saved to the context this session (${t.errors[0]?.detail})`)}let bt={type:"run_config",version:1,session_id:Me,mode:a,source:{source_id:s.source_id,source_cid:s.cid,kind:Mt.has(V.format)?V.format:Sr(s.source_id)||"md",numbered_text:yt,...(()=>{let t=kr(V,e.contextDir);return t?{images:t}:{}})()},existing_use_cases:c.byLabel(de.USECASE).filter(({cid:t})=>c.trust.get(t)!=="archived"&&!c.superseded.has(t)).map(({cid:t,content:o})=>({id:t,title:String(o.title??""),summary:String(o.summary??"")})),read_basis:C.current.latestHash,max_free_text_rounds:Yt,graph_reads:!0,verb:"extract",...I!==void 0?{style_note_digest:I}:{},...r.changeContext&&r.changeContext.source_id===s.source_id?{change_context:r.changeContext}:{},topology:er(),...re?{chat:!0}:{},...Ke?{image_sources:[{source_id:s.source_id,source_cid:s.cid,media_type:V.media_type,blob_ref:{path:we(e.contextDir,b),cid:b}}]}:{},...u&&!h&&s.source_id in u.handle.state.read_basis?{resume:{agent_state:u.handle.state.agent_state}}:{},...te&&w?{checkpoints:!0}:{}},R=h&&he?{...h.spawnConfig,mode:a}:bt;if(te&&w&&!ft){ft=!0;let{resume:t,...o}=bt;Ht(e.contextDir,De,{schema:Nt,kind:"base",sid:De,verb:"extract",mode:a,created_at:Ce.toISOString(),run_config:o,conv_source:ne||w.state.conv_source||"",store_watermark:It(e.contextDir)})}let St=h&&he?0:w?.state.checkpoint?.seq??0,fe={current:null};if(R.resume&&"schema"in R.resume){let t=R.resume.binding?.template_version;typeof t=="string"&&(fe.current=t)}let Xe=te&&w?ir({contextDir:e.contextDir,handle:w,seqBase:()=>St,peekHeldReceipts:()=>e.chat?.peekHeldReceipts?.()??[],readBasis:()=>({[s.source_id]:s.cid}),corpusCursor:()=>({remaining:Je}),onSoftCap:t=>e.out(t),onStat:t=>g("ckpt_stat",t,R.session_id),...e.now?{now:e.now}:{}}):void 0,ae=Xe?{...Xe,persist:t=>{let o=t.binding?.template_version;return typeof o=="string"&&o&&(fe.current=o),Xe.persist(t)}}:void 0;re||e.out(u&&s.source_id in u.handle.state.read_basis?`resuming: ${s.source_id} (session ${r.resume})`:`reading ${s.source_id} (source ${d+1} of ${M.length})`),e.emit?.({type:"source_start",source_id:s.source_id,cid:s.cid,index:d+1,total:M.length,resumed:!!(u&&s.source_id in u.handle.state.read_basis)}),e.chat?.ledger?.({kind:"banner",text:Rr(s,d+1,M.length)}),e.chat?.setWorking?.(`Reading ${pr(s)}\u2026`);let Ye=new Map;g("spawn",{source_id:s.source_id,source_cid:s.cid,resume:!!u,chat:re},R.session_id);let kt=!1,$t=!1,Ze=!1,Rt=async t=>{let o=Z(e.contextDir),l=ye(t,Ie(o,t),o);if(g("kane_validate",{errors:l.map(p=>p.code)},R.session_id),l.length>0){if(e.nested){e.chat?.ledger?.({kind:"commit",ok:!1,line:"proposal failed validation \u2014 nothing landed",warnings:l.map(p=>`${p.code}: ${p.detail}`)}),$t=!0;return}e.chat.submit("[auto-repair] the proposal failed validation: "+l.map(p=>`${p.code}: ${p.detail}`).join("; ")+" \u2014 please re-finalize with these fixed.");return}let f=Z(e.contextDir),D=hr(t,f),$=oe(e.contextDir,"proposals",ie);ut($,{recursive:!0}),lt(oe($,"proposal.json"),JSON.stringify(t,null,2)+`
|
|
10
|
-
`);let E=new Map(t.use_cases.map(p=>[p.temp_ref,{resolution:"skipped"}])),Y=mt(e.contextDir,R.session_id,Le,e.probe,e.auth),O=await Se(Y,gt(t,f),p=>{if(p.degradedProbe&&ge()!==null&&t.use_cases.some(xe=>xe.matches_existing==null))return{result:{degradedHold:!0},record:null};let z=je({contextDir:e.contextDir,graph:p.graph,proposal:t,proposalId:ie,verdicts:E,by:{kind:"ai",id:"extract-agent"},autoName:!0,allowStaleBasis:!0,eventIds:p.eventIds("extract",1),...te?{sid:p.sid}:{},probeHits:p.probeHits});return z.errors!==null?{errors:z.errors}:{result:z,record:z.record}}),U=O.ok&&"result"in O?O.result:null;if(U!==null&&"degradedHold"in U){We(),ze(s,t.use_cases,"degraded"),Ze=!0,e.chat.ledger?.({kind:"commit",ok:!1,line:`held ${t.use_cases.length} item(s) for review \u2014 semantic dedup ran degraded (embeddings unavailable); nothing saved this turn`});return}let L=U??{record:null,errors:O.ok?null:O.kind==="validation"?O.errors:[{code:O.kind==="contended"?O.err.code:"UNSETTLED",detail:O.kind==="contended"?`held by ${O.err.holder?.owner_sid??"another session"}`:"concurrent activity kept moving the store"}]};if(L.errors){e.chat.ledger?.({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:L.errors.map(p=>`${p.code}: ${p.detail}`)});return}kt=!0,L.record?.event_ids?.length&&w?.markApplied(L.record.event_ids);{let p=L.record.review.filter(z=>z.kind==="pending_update");p.length>0&&(e.out(`${p.length} update(s) held for review`),e.emit?.({type:"update_held",count:p.length,targets:p.map(z=>z.id)}),e.chat?.ledger?.({kind:"commit",ok:!0,line:`${p.length} update(s) held for review`}))}let W=L.record.nodes.length;Ve+=W;let N=t.use_cases.length-W;{let p=Z(e.contextDir),z=new Map;for(let{cid:H,content:K}of p.byLabel(de.USECASE))p.superseded.has(H)||z.set($e(String(K.title??"")),H);let xe=[];for(let H of t.use_cases){let K=null;if(H.matches_existing?.cid&&p.hasNode(H.matches_existing.cid)){let ve=p.tipOf(H.matches_existing.cid);K=p.superseded.has(ve)?null:ve}K=K??z.get($e(H.title))??null,K&&xe.push({ref:H.temp_ref,cid:K,...p.displayNameOf(K)?{id:p.displayNameOf(K)}:{}})}xe.length>0&&e.chat.registerAliases?.(xe),C.current=p;let Pt=H=>{for(let[K,ve]of p.names)if(ve===H&&!p.superseded.has(ve))return K},Tt=zt({verb:"extract",commitN:1,phase:"proposal",committed:L.record.nodes.map(H=>({cid:H.cid,...Pt(H.cid)?{logical_id:Pt(H.cid)}:{}})),reused:N},p);e.emit?.(Tt.event),e.chat.holdReceipt?.(Tt.text)}g("commit",{derived:W,evidence_matched:N,chat:!0},R.session_id),e.chat.ledger?.({kind:"commit",ok:!0,line:W===0&&N>0?`all ${N} matched existing \u2014 nothing new to save`:`saved ${W} use-case${W===1?"":"s"} as drafts`+(N>0?` \xB7 ${N} matched existing`:"")})},Qe=!!(u&&s.source_id in u.handle.state.read_basis),q=Qe&&Pe.size>0?{...e,ask:async t=>t.every(o=>Pe.has(o.id))?(u.handle.markApplied(t.map(o=>`resolveq:${r.resume}:${o.id}`)),e.out(`answered ${t.length} re-asked question(s) from the held resume answers`),t.map(o=>Pe.get(o.id))):e.ask(t)}:e;Qe&&r.message&&(q={...q,initialMessage:r.message}),q={...q,onEmbedDegraded:We};let ce,et;if(w){let t=w,o=q.ask,l=Qt({contextDir:e.contextDir,cwd:mr(e.contextDir),handle:t,note:f=>e.chat?e.chat.note(f):e.out(f),schedule:r.trust!=="hold",...r.trust==="hold"?{scheduleRefused:"this run holds items for review, so its extraction is not scheduled \u2014 kane-cli context extract runs it after the review"}:{},graphSlot:C,...e.now?{now:e.now}:{}});if(q={...q,ask:async f=>{let D=await o(f);if(Array.isArray(D)){let $=D.filter(E=>{if(E.free_text==null||E.free_text.trim()==="")return!1;let Y=f.find(O=>O.id===E.id);return E.selected_index!=null&&Y?.options[E.selected_index]?.input===!0}).map(E=>E.free_text.trim());if($.length>0){let E=t.state.ingest_registry;for(let Y of $)E=Fe(E,Y,e.now?.()??new Date);t.save({ingest_registry:E})}}return D},ingest:l},Qe&&r.withSource){let f=(t.state.pending?.proposals??[]).filter(E=>E.content?._held!=null).length;if(r.trust==="hold"||f>0){let E=f>0?`error: --with-source can't add a source to a session holding ${f} item(s) for review \u2014 resume without --with-source to finish the review first, then land it with kane-cli context ingest [HOLD_MULTI_SOURCE]`:"error: --with-source is not available with --trust hold \u2014 held work from a multi-source run can't be resumed yet; drop --trust hold, or land the source separately with kane-cli context ingest [HOLD_MULTI_SOURCE]";return e.out(E),e.emit?.({type:"error",code:"HOLD_MULTI_SOURCE",message:E}),2}let D=r.withSource;t.save({ingest_registry:Fe(t.state.ingest_registry,D,e.now?.()??new Date)});let $=await l({id:`withsource-${t.state.sid}`,ref:D,purpose:null});if(!$.ok)return e.out(`error: --with-source: ${$.error.message}`),e.emit?.({type:"error",code:$.error.code,message:`--with-source: ${$.error.message}`}),2;q={...q,pendingDeferral:{ingested:{source_id:$.result.source_id,cid:$.result.cid}}}}et=()=>{if(!e.chat?.attachIngest)return;let f=e.chat;ce=f.attachIngest(async D=>{try{t.save({ingest_registry:Fe(t.state.ingest_registry,D,e.now?.()??new Date)});let $=await l({id:`attach-${t.state.sid}-${(t.state.ingest_registry??[]).length}`,ref:D,purpose:null});return $.ok?(f.deferBatch({source_id:$.result.source_id,cid:$.result.cid}),{ok:!0}):{ok:!1,error:$.error.message}}catch($){return{ok:!1,error:$ instanceof Error?$.message:String($)}}})},et()}let S;try{S=await ht(R,{...q,graphSlot:C,...ae?{checkpoint:ae}:{}},Ye,c,g,re?Rt:void 0,()=>fe.current)}catch(t){if(t instanceof Be)return ce?.(),e.chat?.setWorking?.(null),e.out(`error: ${t.message}`),e.emit?.({type:"error",code:"PAIR_MISMATCH",message:t.message}),2;throw t}if(ce?.(),e.chat?.setWorking?.(null),S.errorCode==="binding_mismatch"&&h&&he){let t=await e.ask([{id:"binding-mismatch",text:"this session's saved conversation is no longer accepted by the service \u2014 start the conversation fresh (committed work is kept), or stop and keep the session?",risk:"high",rationale:"the service refused the saved conversation on the first turn after resume",options:[{label:"start fresh",detail:"continue with a fresh conversation \u2014 earlier answers may be re-asked"},{label:"stop",detail:"stop here; the session stays resumable"}],recommended_index:1,allow_free_text:!1}]);if((Array.isArray(t)?t.find(f=>f.id==="binding-mismatch"):void 0)?.selected_index!==0){let f=`resume abandoned: binding mismatch on session ${Me} \u2014 the session is preserved`;return e.out(f),e.emit?.({type:"error",message:f,code:"BINDING_MISMATCH"}),2}g("binding_migrate",{sid:Me},R.session_id),et?.();let l=R.resume&&"schema"in R.resume?{...R.resume,binding:{}}:void 0;try{S=await ht({...R,...l?{resume:l}:{}},{...q,graphSlot:C,...ae?{checkpoint:ae}:{}},Ye,c,g,re?Rt:void 0,()=>fe.current)}catch(f){if(f instanceof Be)return ce?.(),e.chat?.setWorking?.(null),e.out(`error: ${f.message}`),e.emit?.({type:"error",code:"PAIR_MISMATCH",message:f.message}),2;throw ce?.(),f}ce?.(),e.chat?.setWorking?.(null)}if(S.error){let t=S.error.startsWith("proposal failed validation after repair:");t&&g("agent_error_detail",{error:S.error},R.session_id);let o=t?`error: the agent could not produce a valid proposal for ${s.source_id} \u2014 re-run kane-cli context extract to retry`:`error: agent failed for ${s.source_id}: ${S.error}`;e.out(o),e.emit?.({type:"error",source_id:s.source_id,message:o}),F.push(s.source_id);continue}if(S.highRisk)return e.out(`error: ${S.highRisk.length} high-risk decision${S.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),e.emit?.({type:"error",source_id:s.source_id,message:`error: high-risk question(s) in ci mode (fail-closed): ${S.highRisk.map(t=>t.id).join(", ")}`,code:"HIGH_RISK_CI"}),1;if(S.paused){let t=M.slice(d+1).map(D=>D.source_id),o=u?.handle??T,l=o??ot(e.contextDir,{sid:R.session_id,mode:"agent",created_at:(e.now?.()??new Date).toISOString(),expires_at:new Date((e.now?.()??new Date).getTime()+1440*60*1e3).toISOString(),agent_state:S.paused.agent_state,pending:{questions:[],proposals:[]},assumed:[],read_basis:{[s.source_id]:s.cid},corpus_cursor:{remaining:t},conv_source:ne,verb:"extract",...ue?{force:!0}:{},...r.changeContext?{change_basis:{source_id:r.changeContext.source_id,new_head:r.changeContext.new_head}}:{},...m?{user_session_id:m.ids.session_id}:{}});Ee=!0;try{ne&&l.state.conv_source!==ne&&l.save({conv_source:ne});let D=e.chat?.drainHeldReceipts?.()??[];(D.length>0||(l.state.held_receipts?.length??0)>0)&&l.save({held_receipts:D}),o&&l.save({read_basis:{[s.source_id]:s.cid},corpus_cursor:{remaining:t},...ue&&!l.state.force?{force:!0}:{},...m&&l.state.user_session_id!==m.ids.session_id?{user_session_id:m.ids.session_id}:{}}),sr(l,S.paused)}catch(D){let $=l.state.checkpoint,E=`error: couldn't persist the pause for session ${l.state.sid}`+($?` \u2014 last durable checkpoint: seq ${$.seq} @ ${$.ts}`:" \u2014 no durable checkpoint exists")+` (${D instanceof Error?D.message:String(D)})`;return e.out(E),e.emit?.({type:"error",message:E,code:"PAUSE_PERSIST_FAILED",sid:l.state.sid}),1}g("session_paused",{sid:l.state.sid},R.session_id);let f=`kane-cli context extract --resume ${l.state.sid} --mode ${a}`;return e.out(`paused: session ${l.state.sid} saved \u2014 resume with: ${f}`),e.emit?.({type:"session_paused",sid:l.state.sid,source_id:s.source_id,mode:a,resume:f,expires_at:l.state.expires_at,pending_questions:S.paused.pending.questions}),e.chat?.ledger?.({kind:"pause",sid:l.state.sid,expires_at:l.state.expires_at,resume:f,messageForm:`${f} --message "<your words>"`}),3}if(S.crashed){let t=w?.state.checkpoint;if(w&&t){let o=`kane-cli context extract --resume ${w.state.sid} --mode ${a}`;try{w.save({read_basis:{[s.source_id]:s.cid},corpus_cursor:{remaining:Je}})}catch{}return g("agent_crashed_resumable",{sid:w.state.sid,seq:t.seq},R.session_id),e.out(`agent crashed \u2014 session ${w.state.sid} is resumable at checkpoint seq ${t.seq} (at most the in-flight turn lost); resume with: ${o}`),e.emit?.({type:"session_paused",sid:w.state.sid,source_id:s.source_id,mode:a,resume:o,expires_at:w.state.expires_at,crashed:!0}),e.chat?.ledger?.({kind:"pause",sid:w.state.sid,expires_at:w.state.expires_at,resume:o,messageForm:`${o} --message "<your words>"`}),Ee=!0,w.release(),3}e.out(`error: agent crashed for ${s.source_id} with no durable checkpoint`),e.emit?.({type:"error",source_id:s.source_id,message:`error: agent crashed for ${s.source_id} with no durable checkpoint`,code:"AGENT_CRASHED"}),F.push(s.source_id);continue}if(re){if(xt+=S.assumedDefaults??0,S.error||$t)return 1;if(!kt&&!Ze){let t=M.length-d-1;e.out(`done \u2014 nothing committed for ${s.source_id} (no finalize before the session ended)`+(t>0?`; stopping here \u2014 ${t} remaining source(s) not extracted (re-run kane-cli context extract to continue)`:""));{let o=(w?.state.ingest_schedule??[]).filter(l=>l.status==="pending");o.length>0&&e.out(`note: ${o.length} source(s) landed this session (${o.map(l=>l.source_id).join(", ")}) were not extracted \u2014 the session ended first; kane-cli context extract runs them`)}return u&&s.source_id in u.handle.state.read_basis&&(u.handle.complete(),u=null,w=null),_t(),0}u&&s.source_id in u.handle.state.read_basis&&!Ze&&(n(d),u.handle.complete(),u=null,w=null);continue}if(!S.proposal){e.out(`error: agent ended without a proposal for ${s.source_id}`),e.emit?.({type:"error",source_id:s.source_id,message:`error: agent ended without a proposal for ${s.source_id}`}),F.push(s.source_id);continue}let G=ye(S.proposal,Ie(c,S.proposal),c);if(g("kane_validate",{errors:G.map(t=>t.code)},R.session_id),G.length>0&&Cr(S.proposal,G,t=>e.out(t))&&(g("criteria_dropped",{source_id:s.source_id},R.session_id),G=ye(S.proposal,Ie(c,S.proposal),c)),G.length>0){e.out("the agent's proposal didn't validate \u2014 retrying once"),e.emit?.({type:"validate_failed",source_id:s.source_id,codes:G.map(t=>t.code),repairing:!0}),g("repair_respawn",{source_id:s.source_id},R.session_id),h&&he||(St=w?.state.checkpoint?.seq??0);try{S=await ht(R,{...q,graphSlot:C,...ae?{checkpoint:ae}:{}},Ye,c,g,void 0,()=>fe.current)}catch(t){if(t instanceof Be)return e.out(`error: ${t.message}`),e.emit?.({type:"error",code:"PAIR_MISMATCH",message:t.message}),2;throw t}if(S.error||!S.proposal){e.out(`error: repair run failed for ${s.source_id}`),e.emit?.({type:"error",source_id:s.source_id,message:`error: repair run failed for ${s.source_id}`}),F.push(s.source_id);continue}if(G=ye(S.proposal,Ie(c,S.proposal),c),G.length>0){g("validation_details",{errors:G.map(t=>({code:t.code,detail:t.detail}))},R.session_id),e.out(`\u2717 validation failed \u2014 ${G.map(t=>t.code).join(", ")} (details: ${ke(x)})`),e.emit?.({type:"validate_failed",source_id:s.source_id,codes:G.map(t=>t.code),repairing:!1}),e.emit?.({type:"error",source_id:s.source_id,message:`error: proposal failed validation after repair (${G.map(t=>t.code).join(", ")})`}),F.push(s.source_id);continue}}let A=S.proposal,Ue=hr(A,c),tt=oe(e.contextDir,"proposals",ie);if(ut(tt,{recursive:!0}),lt(oe(tt,"proposal.json"),JSON.stringify(A,null,2)+`
|
|
11
|
-
`),r.plan){e.out(`plan: ${A.use_cases.length} use-case(s) proposed from ${s.source_id} (nothing committed)`);for(let t of A.use_cases){let o=Ue.get(t.temp_ref),l=o?o.archived?` \u2248 matches ARCHIVED ${o.cid.slice(0,19)}${o.reason?` \u2014 previously rejected: "${o.reason}"`:" \u2014 previously rejected"}`:` \u2248 matches ${o.cid.slice(0,19)}`:"";e.out(` [${t.risk}] ${t.title} \u2014 cite ${t.cite.anchor}${l}`)}e.emit?.({type:"plan",source_id:s.source_id,use_cases:A.use_cases.map(t=>{let o=Ue.get(t.temp_ref);return{risk:t.risk,title:t.title,anchor:t.cite.anchor,...o?{match:o.cid,match_archived:!!o.archived}:{}}})}),S.assumedDefaults&&e.out(`assumed: ${S.assumedDefaults} default(s) auto-taken (assumed)`);continue}for(let t of A.use_cases){if(!t.conflicts_with?.length)continue;let o=t.conflicts_with.filter(f=>c.resolve(f)!==null),l=t.conflicts_with.filter(f=>c.resolve(f)===null);l.length>0&&(e.out(`note: ${t.temp_ref}: dropped unresolvable conflict hint(s): ${l.join(", ")}`),t.conflicts_with=o.length>0?o:void 0)}g("review_start",{use_cases:A.use_cases.length,flags:Ue.size},R.session_id);let Ne=await e.review(A.use_cases,Ue);if(g("review_verdicts",[...Ne.entries()].map(([t,o])=>({ref:t,resolution:o.resolution})),R.session_id),lt(oe(tt,"review.json"),JSON.stringify(A.use_cases.map(t=>{let o=Ne.get(t.temp_ref)??{resolution:"skipped"};return{id:t.temp_ref,kind:"review-item",resolution:o.resolution,edit:o.edit??null,reason:o.reason??null,...o.supersedeTarget?{supersede_target:o.supersedeTarget}:{},by:le}}),null,2)+`
|
|
12
|
-
`),r.posture==="reconcile"){let t=jt(A),o=U=>t.passthrough.use_cases.filter(L=>{let W=L.matches_existing?.cid,N=W?U.resolve(W):null,p=N?U.tipOf(N.cid):null;return p!=null&&(U.trust.get(p)??null)!=="derived"}),l=o(c),f=t.passthrough.use_cases.length-l.length,D=mt(e.contextDir,R.session_id,Le,e.probe,e.auth),$=new Set(l.map(U=>U.temp_ref));(await Se(D,gt({...t.passthrough,use_cases:l},c),U=>{let L={...t.passthrough,use_cases:o(U.graph).filter(p=>$.has(p.temp_ref))},W=new Map(L.use_cases.map(p=>[p.temp_ref,{resolution:"approved"}])),N=je({contextDir:e.contextDir,graph:U.graph,proposal:L,proposalId:ie,verdicts:W,by:le,autoName:!0,allowStaleBasis:!0,eventIds:U.eventIds("extract",1),...te?{sid:U.sid}:{},probeHits:U.probeHits});return N.errors!==null?{errors:N.errors}:{result:N,record:N.record}})).ok||e.out("note: the unchanged-match evidence attach did not land this run \u2014 the held changeset is unaffected; re-run reconcile to refresh it"),f>0&&e.out(`note: ${f} unchanged match(es) target unreviewed (or no-longer-resolving) item(s) \u2014 evidence not attached (bless them with kane-cli context review; a later reconcile attaches)`);let Y=ge(),O=t.adds.length+t.updates.length+t.archives.length;Y&&O>0&&(Y.save({reconcile:{proposal_id:ie,verdicts:{}}}),me+=O,Ae=Y.state.sid,e.out(`held: ${O} change(s) from ${s.source_id} await your verdicts \u2014 nothing from the changeset committed`),e.emit?.({type:"held",source_id:s.source_id,count:O,reason:"reconcile"}));continue}if((Te||r.trust==="hold")&&ge()&&A.use_cases.some(t=>t.matches_existing==null)){ze(s,A.use_cases,Te?"degraded":"trust_hold");continue}let Ct=mt(e.contextDir,R.session_id,Le,e.probe,e.auth),Dt=t=>{if(t.degradedProbe&&ge()!==null&&A.use_cases.some(l=>l.matches_existing==null))return{result:{degradedHold:!0},record:null};let o=je({contextDir:e.contextDir,graph:t.graph,proposal:A,proposalId:ie,verdicts:Ne,by:le,autoName:!0,allowStaleBasis:!0,eventIds:t.eventIds("extract",1),...te?{sid:t.sid}:{},probeHits:t.probeHits});return o.errors!==null?{errors:o.errors}:{result:o,record:o.record}},Et=gt(A,c),B=await Se(Ct,Et,Dt);if(!B.ok&&B.kind==="drifted"){if(!await e.confirmStale(`the context changed while you reviewed (${B.asks.map(o=>o.detail).join("; ")}) \u2014 commit against the new head anyway?`)){e.out("aborted: proposal not committed"),e.emit?.({type:"error",source_id:s.source_id,message:"aborted: proposal not committed",code:"STALE_BASIS"}),F.push(s.source_id);continue}B=await Se(Ct,{...Et,sourcePins:[]},Dt)}let rt=B.ok&&"result"in B?B.result:null;if(rt!==null&&"degradedHold"in rt){We(),ze(s,A.use_cases,"degraded");continue}let pe=rt??(B.ok?{record:null,errors:null}:{record:null,errors:B.kind==="validation"?B.errors:B.kind==="contended"?[{code:B.err.code,detail:`a use-case this proposal touches is held by ${B.err.holder?.owner_sid??"another session"} \u2014 try again when it frees`}]:[{code:"UNSETTLED",detail:"concurrent activity kept moving the store \u2014 retry when quieter"}]});if(pe.errors){g("commit_error_details",{errors:pe.errors.map(t=>({code:t.code,detail:t.detail}))},R.session_id),e.out(`\u2717 commit failed \u2014 ${pe.errors.map(t=>t.code).join(", ")} (details: ${ke(x)})`),e.emit?.({type:"error",source_id:s.source_id,message:`error: commit failed: ${pe.errors.map(t=>`${t.code}: ${t.detail}`).join("; ")}`}),F.push(s.source_id);continue}let xr=new Date().toISOString();for(let t of A.use_cases){let o=Ne.get(t.temp_ref)??{resolution:"skipped"};for(let l of Jt({ts:xr,command:"context extract",id:t.temp_ref,by:le},o.resolution))Kt(e.contextDir,l)}let X=pe.record;X.event_ids?.length&&w?.markApplied(X.event_ids);let st=new Map(X.review.map(t=>[t.id,t.resolution])),it=[...st.values()].filter(t=>t==="approved"||t==="edited").length,He=[...st.values()].filter(t=>t==="rejected").length,_e=X.nodes.filter(t=>!st.has(t.cid)).length,nt=X.supersessions.filter(t=>t.kind==="node"&&t.new!==t.old).length;g("commit",{trusted:it,derived:_e,archived:He},R.session_id),e.out(`saved ${it+_e} use-case(s)`+(_e>0?` \xB7 ${_e} awaiting review`:"")+(He>0?` \xB7 ${He} archived`:"")+(nt>0?` \xB7 ${nt} superseded`:""));{let t=X.review.filter(o=>o.kind==="pending_update");t.length>0&&(e.out(`${t.length} update(s) held for review`),e.emit?.({type:"update_held",count:t.length,targets:t.map(o=>o.id)}))}S.assumedDefaults&&e.out(`assumed: ${S.assumedDefaults} default(s) auto-taken (assumed)`),e.emit?.({type:"commit",source_id:s.source_id,proposal_id:ie,trusted:it,derived:_e,archived:He,superseded:nt,assumed:S.assumedDefaults??0,evidence_matched:Math.max(0,A.use_cases.length-X.nodes.length),minted:X.nodes.map(t=>{let o=X.names?.find(l=>l.cid===t.cid)?.slug;return{cid:t.cid,...o?{logical_id:o}:{}}})}),u&&s.source_id in u.handle.state.read_basis&&(n(d),u.handle.complete(),e.out(`session ${r.resume} complete`),e.emit?.({type:"session_complete",sid:r.resume,source_id:s.source_id}),m?.event("ASR_SESSION_COMPLETE",{}),u=null,w=null)}if(w){let d=w.state.ingest_schedule??[];d.some(s=>s.status==="pending")&&w.save({ingest_schedule:d.map(s=>s.status==="pending"?{...s,status:"skipped",note:"run ended before its turn \u2014 kane-cli context extract runs it"}:s)})}vt=!0}finally{if(u?.handle.release(),T&&!Ee&&!vt){let n=T.state.checkpoint;if(n){let d=`kane-cli context extract --resume ${T.state.sid} --mode ${a}`;e.out(`session ${T.state.sid} kept its last checkpoint (seq ${n.seq}, ${n.ts}) \u2014 resume with: ${d}`),T.release()}else{try{T.complete()}catch{T.release()}pt()}T=null}}if(re){let n=e.chat?.state.ledger.filter(c=>c.kind==="answer"&&c.receipt.form==="assumed").length??0,d=xt+n,s=e.chat?.state.credits?.total;e.chat?.ledger?.({kind:"summary",lines:[`saved ${Ve} use-case${Ve===1?"":"s"} across ${M.length} source${M.length===1?"":"s"}`,...d>0?[`${d} assumed default(s)`]:[],...s!==void 0?[`credits used: ${s.toFixed(1)}`]:[],`trace: ${ke(x)}`]})}if(r.plan||or(e.contextDir),me>0&&(T||Ae)){Ee=!0;let n=T?.state.sid??Ae,d=`kane-cli context extract --resume ${n} --mode ${a}`;return e.out(`paused: ${me} held item(s) await review \u2014 resume with: ${d}`),e.emit?.({type:"session_paused",sid:n,resume:d,held:me}),T?.release(),3}return F.length>0&&e.out(`${F.length} of ${M.length} source(s) failed \u2014 re-run kane-cli context extract to retry (${F.join(", ")})`),_t(),F.length>0?1:0}export{mt as a,kr as b,gr as c,pr as d,Rr as e,hr as f,Ss as g};
|
package/dist/chunk-5WXGMXGA.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as B,b as V,c as se}from"./chunk-M6FKJKC6.js";import{a as j,b as N}from"./chunk-JPWLGHPM.js";import{a as ne,b as oe}from"./chunk-2YQ6TW77.js";import{a as C,b as Y,e as M,f as te,m as re}from"./chunk-RKWJG3WW.js";import{a as L}from"./chunk-AECMF3T2.js";import{a as ee}from"./chunk-WAOCHXJ5.js";import{a as Z}from"./chunk-H32GM5G4.js";import{a as A}from"./chunk-RZ4F3BHX.js";import{a as H}from"./chunk-O75ZHGJG.js";import{a as O}from"./chunk-VT54ARGE.js";import{y as h}from"./chunk-ZUGCHQFC.js";import{a as F}from"./chunk-HCBYKLMW.js";import{a as k,b as g,i as Q}from"./chunk-C44QQJR4.js";import{a as X}from"./chunk-6YGTRKDT.js";import{e as v}from"./chunk-UR6MHSHU.js";var D=v(X(),1);import{existsSync as P,readFileSync as Je,rmSync as pe,unlinkSync as Ke}from"fs";import{resolve as G}from"path";import{promises as ie,realpathSync as ke}from"fs";import{homedir as be}from"os";import{join as q,parse as Te,relative as ae,resolve as ce}from"path";var le=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),R=class extends Error{constructor(s){super(`refusing to scan '${s}'. Run from your project root, or pass --root <dir>.`);this.cwd=s;this.name="HomeRefusedError"}};function ue(e){try{return ke(ce(e))}catch{return ce(e)}}function Ee(e){let r=ue(e),s=ue(be()),n=Te(r).root;if(process.platform==="win32"){let o=t=>t.toLowerCase();return o(r)===o(s)||o(r)===o(n)}return r===s||r===n}async function U(e){if(Ee(e.root))throw new R(e.root);let r=e.maxEntries??5e4,s=e.maxResults??5e3,n=new Set(e.ignore??[]),o=[],t=0,i=0,c=!1,f,l=[e.root];for(;l.length>0&&!c;){let a=l.shift(),m;try{m=await ie.readdir(a,{withFileTypes:!0})}catch{continue}i++;for(let b of m){if(t++,t>r){c=!0,f="max_entries";break}let w=b.name,E=q(a,w);if(b.isDirectory()){if(le.has(w)||w.startsWith(".")||w.startsWith("output-")||n.has(w))continue;l.push(E)}else if(b.isFile()&&w.endsWith("_test.md")&&(o.push({path:E,relPath:ae(e.root,E),source:"cwd"}),o.length>=s)){c=!0,f="max_results";break}}e.onProgress?.(i,o.length)}if(!c){let m=[{dir:q(e.root,".testmuai","tests"),depth:0}];for(;m.length>0&&!c;){let{dir:b,depth:w}=m.shift(),E;try{E=await ie.readdir(b,{withFileTypes:!0})}catch{continue}i++;for(let u of E){if(t++,t>r){c=!0,f="max_entries";break}let x=u.name,y=q(b,x);if(u.isDirectory()){if(w>=20||x.startsWith(".")||x.startsWith("output-")||le.has(x))continue;m.push({dir:y,depth:w+1})}else if(u.isFile()&&x.endsWith("_test.md")&&(o.push({path:y,relPath:ae(e.root,y),source:"tests-dir"}),o.length>=s)){c=!0,f="max_results";break}}}}return{results:o,aborted:c,abortReason:f,dirsScanned:i}}import{readFileSync as Se}from"fs";function W(e){try{return re(e,Se(e,"utf8")).global.tags??[]}catch{return[]}}import{mkdirSync as ve,writeFileSync as Re}from"fs";import{join as Pe}from"path";function de(e,r){return`Basic ${Buffer.from(`${e}:${r}`).toString("base64")}`}async function Me(e){let r=ne({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId,codeExport:{enabled:!0,language:e.language,skipValidation:e.skipValidation}}),s=await A(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:de(e.auth.username,e.auth.access_key)},body:JSON.stringify(r.body)});if(!s.ok)throw new Error(`code-export trigger failed: ${s.status} ${await s.text()}`);e.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:e.testcaseId})}async function De(e){let r=oe({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId}),s=e.pollIntervalMs??5e3,n=e.timeoutMs??3e5,o=Date.now()+n;for(;Date.now()<o;){let t=await A(r,{headers:{authorization:de(e.auth.username,e.auth.access_key),accept:"application/json"}});if(!t.ok){await new Promise(l=>setTimeout(l,s));continue}let c=(await t.json()).data?.find(l=>l.code_name==="kane-cli-trigger");if(!c){await new Promise(l=>setTimeout(l,s));continue}let f=(c.status??"").toLowerCase();if(f==="in progress"||f==="in_progress"||f==="pending"){await new Promise(l=>setTimeout(l,s));continue}if(!c.url||c.url.length===0)throw new Error(`code-export status=${c.status} but no files returned`);ve(e.outDir,{recursive:!0});for(let l of c.url){let a=Pe(e.outDir,l.file_name),m=await A(l.file_url);if(!m.ok){e.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:l.file_name,status:m.status});continue}let b=await m.text();Re(a,b,"utf-8")}return e.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:e.outDir,file_count:c.url.length}),e.outDir}throw new Error("code-export polling timed out")}async function fe(e){return await Me(e),await De(e)}var T=v(X(),1);import{existsSync as $e,readFileSync as Ce}from"fs";var p=v(F(),1);function Ie(e){B(e);let r=M(e);if(!$e(r))return null;try{return JSON.parse(Ce(r,"utf8"))}catch{return{}}}function Fe(e){return e===null?"never_run":e.testcase_id?"synced":"local_only"}function Oe(e){return e==="synced"?"\u2601":e==="local_only"?"\u25A3":"\u25CB"}function Ae(e){return e==="tests-dir"?"\u2726":" "}function Le(e,r){return r==="all"?!0:r==="synced"?e.status==="synced":r==="local"?e.status==="local_only":r==="never_run"?e.status==="never_run":r==="cli"?e.source==="tests-dir":r==="hand"?e.source==="cwd":!0}var z=["all","synced","local","never_run","cli","hand"];function Be(e){let r=z.indexOf(e);return z[(r+1)%z.length]}function me({root:e,currentOrgId:r,onSelect:s,onCancel:n}){let[o,t]=(0,T.useState)([]),[i,c]=(0,T.useState)(null),[f,l]=(0,T.useState)(!0),[a,m]=(0,T.useState)("all");(0,T.useEffect)(()=>{(async()=>{try{let u=await U({root:e}),x=[];for(let y of u.results){let K=Ie(y.path);K?.org_id!==void 0&&K.org_id!==r||x.push({path:y.path,relPath:y.relPath,name:C(y.path),status:Fe(K),source:y.source,tags:W(y.path)})}t(x),l(!1)}catch(u){u instanceof R,c(u.message),l(!1)}})()},[e,r]);let b=(0,T.useMemo)(()=>o.filter(u=>Le(u,a)).map(u=>({id:u.path,label:`${Oe(u.status)} ${Ae(u.source)} ${u.relPath}${u.tags.length>0?` [${u.tags.join(", ")}]`:""}`})),[o,a]),w=(0,T.useMemo)(()=>Ne(a,o),[a,o]);if(i)return(0,p.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.red,paddingX:2,paddingY:1,children:[(0,p.jsx)(g,{color:h.red,bold:!0,children:"testmd"}),(0,p.jsx)(k,{marginTop:1,children:(0,p.jsx)(g,{color:h.red,children:i})})]});let E=a==="all"?"all":je(a);return(0,p.jsx)(Z,{title:`testmd \xB7 filter: ${E}`,items:b,loading:f,itemNoun:"tests",onSelect:u=>{let x=o.find(y=>y.path===u.id);x&&s(x)},onCancel:n,onTab:()=>m(u=>Be(u)),extraHint:"cycle filter",footer:w})}function je(e){return e==="synced"?"synced (\u2601)":e==="local"?"local (\u25A3)":e==="never_run"?"never run (\u25CB)":e==="cli"?"cli-generated (\u2726)":e==="hand"?"hand-written":"all"}function Ne(e,r){let s={synced:r.filter(o=>o.status==="synced").length,local:r.filter(o=>o.status==="local_only").length,never:r.filter(o=>o.status==="never_run").length,cli:r.filter(o=>o.source==="tests-dir").length,hand:r.filter(o=>o.source==="cwd").length},n=o=>o?h.orange:h.dim;return(0,p.jsxs)(k,{flexDirection:"column",children:[(0,p.jsx)(g,{color:h.dim,children:"legend:"}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="synced"),children:` \u2601 synced (${s.synced}) `}),(0,p.jsx)(g,{color:n(e==="local"),children:`\u25A3 local (${s.local}) `}),(0,p.jsx)(g,{color:n(e==="never_run"),children:`\u25CB never run (${s.never})`})]}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="cli"),children:` \u2726 cli-generated (${s.cli}) `}),(0,p.jsx)(g,{color:n(e==="hand"),children:` hand-written (${s.hand})`})]})]})}var I=v(X(),1);import{existsSync as Ue,readFileSync as We}from"fs";var d=v(F(),1);function ge({path:e,relPath:r,onAction:s,onBack:n,onView:o}){let[t,i]=(0,I.useState)(null),[c,f]=(0,I.useState)(!1);(0,I.useEffect)(()=>{let a=M(e);if(Ue(a))try{i(JSON.parse(We(a,"utf8")))}catch{i(null)}},[e]),Q((a,m)=>{if(m.escape){if(c){f(!1);return}n();return}if(c){a==="y"||a==="Y"?(f(!1),s("delete")):(a==="n"||a==="N")&&f(!1);return}a==="r"&&s("run"),a==="e"&&t?.testcase_id&&s("export"),a==="d"&&f(!0),a==="v"&&o&&o()});let l=({k:a,v:m})=>m?(0,d.jsxs)(g,{children:[(0,d.jsx)(g,{color:h.dim,children:a.padEnd(14)}),m]}):null;return(0,d.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.orange,paddingX:2,paddingY:1,children:[(0,d.jsx)(g,{color:h.orange,bold:!0,children:r}),(0,d.jsx)(k,{marginTop:1,flexDirection:"column",children:t?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l,{k:"test_id",v:t.test_id}),(0,d.jsx)(l,{k:"testcase_id",v:t.testcase_id}),(0,d.jsx)(l,{k:"project_id",v:t.project_id}),(0,d.jsx)(l,{k:"folder_id",v:t.folder_id}),(0,d.jsx)(l,{k:"org_id",v:t.org_id}),(0,d.jsx)(l,{k:"session_name",v:t.session_name}),(0,d.jsx)(l,{k:"commit_id",v:t.commit_id})]}):(0,d.jsx)(g,{color:h.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.red,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.dim,children:["[r] run [e] export",t?.testcase_id?"":" (need testcase_id)"," [d] delete",o?" [v] view":""," [Esc] back"]})})]})}function $(e){B(e);let r=M(e);if(!P(r))return null;try{return JSON.parse(Je(r,"utf8"))}catch{return null}}function he(e,r){return!e||e.org_id===void 0?!0:e.org_id===r}function J(e,r){return he(e,r)?null:(process.stderr.write(`error: this test belongs to org ${e.org_id}; you are logged in as org ${r}.
|
|
3
|
-
Switch profiles with \`kane-cli profiles switch\` to act on it.
|
|
4
|
-
`),2)}async function Ut(e={}){let r=!!process.stdin.isTTY&&!e.json,s=new O,n=new L;await V({isInteractive:r,creds:s,config:n});let o=s.getDefaultEnv()??"prod";try{let t=await N({creds:s,env:o,log:()=>{}});return t.resolvedCreds?.org_id===void 0?(process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),{ok:!1,code:2}):{ok:!0,orgId:String(t.resolvedCreds.org_id)}}catch(t){if(t instanceof j)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw t}}async function Wt(e,r){if(process.stdin.isTTY&&!e.json)return await Ye(r,e.root);let s=e.root??process.cwd(),n;try{n=await U({root:s,ignore:e.ignore})}catch(o){if(o instanceof R)return process.stderr.write(`error: ${o.message}
|
|
5
|
-
`),2;throw o}for(let o of n.results){let t=$(o.path);if(!he(t,r))continue;let i={path:o.relPath.startsWith(".")?o.relPath:`./${o.relPath}`,name:C(o.path),has_meta:t!==null,source:o.source,synced:!!t?.testcase_id,tags:W(o.path)};t&&(t.test_id&&(i.test_id=t.test_id),t.testcase_id&&(i.testcase_id=t.testcase_id),t.org_id&&(i.org_id=t.org_id),t.project_id&&(i.project_id=t.project_id),t.folder_id&&(i.folder_id=t.folder_id)),process.stdout.write(JSON.stringify(i)+`
|
|
6
|
-
`)}return n.aborted&&process.stderr.write(`warn: walk aborted (${n.abortReason}). Pass --root or --ignore to narrow.
|
|
7
|
-
`),0}var _e=-1001,ye=-1002,we=-1003,_={action:null,path:null};function Xe(e,r){return _.action=e,_.path=r,e==="run"?_e:e==="export"?ye:we}function He({root:e,currentOrgId:r,onComplete:s}){let[n,o]=D.default.useState({kind:"list"});return D.default.useEffect(()=>{n.kind==="exiting"&&s(n.code)},[n,s]),n.kind==="list"?D.default.createElement(me,{root:e,currentOrgId:r,onSelect:t=>o({kind:"inspect",path:t.path,relPath:t.relPath}),onCancel:()=>o({kind:"exiting",code:0})}):n.kind==="inspect"?D.default.createElement(ge,{path:n.path,relPath:n.relPath,onAction:async t=>{o({kind:"exiting",code:Xe(t,n.path)})},onBack:()=>o({kind:"list"})}):null}async function Ye(e,r){let s=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),o=await new Promise(t=>{let{unmount:i,waitUntilExit:c}=n(D.default.createElement(He,{root:s,currentOrgId:e,onComplete:f=>{i(),t(f)}}),{stdout:process.stderr,exitOnCtrlC:!0});c().then(()=>t(0)).catch(()=>t(0))});if(o===_e&&_.path){let{runTestMdFile:t}=await import("./run-test-md-KEHSRMCM.js"),i=await t(_.path,{});return _.action=null,_.path=null,i}if(o===ye&&_.path){let t=await qe(_.path,{},e);return _.action=null,_.path=null,t}if(o===we&&_.path){let t=await Ve(_.path,!0,e);return _.action=null,_.path=null,t}return o}async function Jt(e,r){let s=G(e);if(!P(s))return process.stderr.write(`error: file not found: ${s}
|
|
8
|
-
`),2;let n=$(s),o=J(n,r);if(o!==null)return o;let t={path:s,name:C(s),has_meta:n!==null};return n&&(n.commit_id&&(t.commit_id=n.commit_id),n.test_id&&(t.test_id=n.test_id),n.testcase_id&&(t.testcase_id=n.testcase_id),n.project_id&&(t.project_id=n.project_id),n.folder_id&&(t.folder_id=n.folder_id),n.org_id&&(t.org_id=n.org_id),n.session_name&&(t.session_name=n.session_name)),process.stdout.write(JSON.stringify(t)+`
|
|
9
|
-
`),0}async function Ve(e,r,s){let n=G(e);if(!P(n))return process.stderr.write(`error: file not found: ${n}
|
|
10
|
-
`),2;let o=$(n),t=J(o,s);if(t!==null)return t;if(!r)return process.stderr.write(`error: refusing to delete without --yes.
|
|
11
|
-
This will remove '${n}' and '${Y(n)}/'.
|
|
12
|
-
`),2;let i=Y(n);if(P(i))try{pe(i,{recursive:!0,force:!0})}catch(c){return process.stderr.write(`error: failed to remove ${i}: ${c.message}
|
|
13
|
-
`),2}try{Ke(n)}catch(c){return process.stderr.write(`error: failed to remove ${n}: ${c.message}
|
|
14
|
-
`),2}return process.stderr.write(`removed ${n} and ${i}/
|
|
15
|
-
`),0}var S=class extends Error{kind;constructor(r,s){super(s),this.name="ExportError",this.kind=r}};async function Kt(e,r){let{codeDir:s}=await xe(e,r);return{codeDir:s}}async function xe(e,r){let s=$(e);if(!s?.testcase_id)throw new S("not-synced","this test has not been synced to TMS \u2014 run `kane-cli testmd run` first.");let n=new L().load(),o=r.language??n.code_export?.language;if(!o)throw new S("no-language","--language not provided and no default in tui-config.");let t=r.output??te(e,"playwright",o),i=P(t);if(i&&!r.force){let a=!1;try{let{readdirSync:m}=await import("fs");a=m(t).length>0}catch{}if(a)return{kind:"reused",codeDir:t}}i&&r.force&&pe(t,{recursive:!0,force:!0});let c=new O,f=r.env??c.getDefaultEnv()??"prod",l;try{l=await N({creds:c,env:f,log:()=>{}})}catch(a){throw a instanceof j?new S("auth-fail","not authenticated. Run `kane-cli login` first."):a}if(!l.basicAuth)throw new S("auth-incomplete","TMS basic auth could not be resolved. Run `kane-cli login` again.");try{let a=H(f);await fe({tmsBaseUrl:a.tmsBaseUrl,testcaseId:s.testcase_id,auth:l.basicAuth,language:o,framework:"playwright",skipValidation:n.code_export?.skip_validation??!0,outDir:t,log:()=>{}})}catch(a){throw new S("export-fail",`code export failed: ${a.message}`)}return{kind:"exported",codeDir:t}}async function qe(e,r,s){let n=G(e);if(!P(n))return process.stderr.write(`error: file not found: ${n}
|
|
16
|
-
`),2;let o=$(n),t=J(o,s);if(t!==null)return t;try{let i=await xe(n,r);return i.kind==="reused"?process.stderr.write(`reusing existing export at ${i.codeDir}
|
|
17
|
-
`):process.stderr.write(`exported to ${i.codeDir}
|
|
18
|
-
`),0}catch(i){if(i instanceof S)return i.kind==="not-synced"?(process.stderr.write("error: this test has not been synced to TMS \u2014 run `kane-cli testmd run` first.\n"),2):i.kind==="no-language"?(process.stderr.write(`error: --language not provided and no default in tui-config.
|
|
19
|
-
`),2):i.kind==="auth-fail"?(process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),2):i.kind==="auth-incomplete"?(process.stderr.write("error: TMS basic auth could not be resolved. Run `kane-cli login` again.\n"),2):(process.stderr.write(`error: ${i.message}
|
|
20
|
-
`),2);throw i}}async function Xt(e={}){let r=!!process.stdin.isTTY,s=new O,n=new L;await V({isInteractive:r,creds:s,config:n});let o=e.env??s.getDefaultEnv()??"prod";try{let t=await N({creds:s,env:o,usernameFlag:e.username,accessKeyFlag:e.accessKey,log:()=>{}});return t.resolvedCreds?.org_id===void 0||!t.basicAuth?(process.stderr.write("error: could not resolve TMS credentials. Run `kane-cli login` again.\n"),{ok:!1,code:2}):{ok:!0,orgId:String(t.resolvedCreds.org_id),basicAuth:t.basicAuth,controllerBaseUrl:H(o).controllerBaseUrl}}catch(t){if(t instanceof j)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw t}}async function Ht(e,r,s=se){if(!P(e))return process.stderr.write(`error: file not found: ${e}
|
|
21
|
-
`),2;if(!e.endsWith("_test.md"))return process.stderr.write(`error: not a *_test.md file: ${e}
|
|
22
|
-
`),2;let n=$(e),o=J(n,r.orgId);if(o!==null)return o;if(!n?.commit_id||!n?.test_id)return process.stderr.write(`error: ${e} is not authored \u2014 run \`kane-cli testmd run ${e}\` first.
|
|
23
|
-
`),2;let t=await s({sourcePath:e,testId:n.test_id,sessionId:n.commit_id,commitId:n.commit_id,controller:new ee(r.controllerBaseUrl,{username:r.basicAuth.username,accessKey:r.basicAuth.access_key})}),i={type:"test_md_bundle_sync",status:t.ok?"ok":"failed",commit_id:n.commit_id,...t.ok?{bytes:t.bytes}:{stage:t.stage}};return process.stdout.write(JSON.stringify(i)+`
|
|
24
|
-
`),t.ok?(process.stderr.write(`synced: ${n.commit_id}-testmd.zip (${t.bytes} bytes)
|
|
25
|
-
`),0):(process.stderr.write(`error: bundle sync failed at ${t.stage}: ${t.error}
|
|
26
|
-
`),t.stage==="collect"?2:1)}export{U as a,W as b,me as c,ge as d,$ as e,he as f,J as g,Ut as h,Wt as i,Ye as j,Jt as k,Ve as l,S as m,Kt as n,qe as o,Xt as p,Ht as q};
|
package/dist/chunk-5ZQZOVWY.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{j as we,k as ie,l as oe,m as ye,n as ke,o as se}from"./chunk-7QJ75SYR.js";import{a as ne,c as te,d as ve,f as re}from"./chunk-AFBKGZFG.js";import{a as E,b as ge,d as he}from"./chunk-OS4VSIHT.js";import{a as Q,b as K,c as X,d as N,e as pe,g as C,h as ee}from"./chunk-W5TTF7GB.js";import{a as me}from"./chunk-JFAFKHDX.js";import{a as H}from"./chunk-CLGC7VEO.js";import{b as z,c as Z,d as J}from"./chunk-VMM4LC4V.js";import{e as ue,g as fe}from"./chunk-W4B5LOEX.js";import{A as S}from"./chunk-TH47OOBV.js";import{f as F}from"./chunk-DUAXZYAD.js";import{existsSync as De,statSync as xe}from"fs";import{basename as W,resolve as G}from"path";var _e=new Set(["interactive","agent","ci","override"]);function Se(e,n){if(e.mode!==void 0&&!_e.has(e.mode))return{error:`--mode must be interactive | agent | ci | override, got '${e.mode}'`,code:"MODE_USAGE"};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})}async function Re(e){let{makeHeadlessIO:n,agentRefusal:t}=await import("./headless-io-66RG5NN5.js");return t(n("ndjson","reconcile"),e,"MODE_USAGE")}function Oe(e,n,t,r){if(Z(t)){let v=J(t),a=v?.sourceIdFor(t)??null;if(v===null||a===null)return{error:`--from '${t}' is not a supported remote URL \u2014 supported: ${z.map(u=>u.hint).join("; ")}`};if(r!==void 0&&r!==a)return{error:`--source-id '${r}' does not match this URL's own identity '${a}' \u2014 re-run without --source-id. A source adopted with --as updates by re-running context ingest with the same --as; reconcile follows only the URL's own id`};let c=S(e);if(!c.heads.has(a))return{error:`unknown source '${a}' \u2014 see \`kane-cli context list --type source\`. If this URL was ingested under a custom id, update it by re-running context ingest with the same --as`};if(c.heads.get(a)==null)return{error:`source '${a}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let $=q(e,a,{remoteUrl:t});return $!==null?{error:$}:{sourceId:a,remoteUrl:t}}if(r===void 0)return{error:"reconcile needs --from <file> AND --source-id <id> \u2014 see `kane-cli context list --type source` for ids"};let i=G(n,t);if(!De(i)||!xe(i).isFile())return{error:`--from '${t}' is not a file \u2014 pass the changed source document`};let l=ue(i);if(!l.ok)return{error:`--from '${t}' is not an ingestable document \u2014 allowed: ${l.allowlist.join(", ")}`};let o=S(e);if(!o.heads.has(r))return{error:`unknown source '${r}' \u2014 see \`kane-cli context list --type source\``};if(o.heads.get(r)==null)return{error:`source '${r}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let w=q(e,r,{filePath:i});if(w!==null)return{error:w};let d=null;try{d=fe(i)}catch{}return d!==null&&d!==r&&o.heads.get(d)!=null?{error:`'${W(i)}' already backs live source '${d}' \u2014 did you mean --source-id ${d}? To truly move these bytes under '${r}', retire '${d}' first`}:{sourceId:r,filePath:i}}function O(e){return e==null?"(none)":e.slice(0,19)}function j(e,n,t,r=!1,i){if(e.out(`reconcile ${n.source_id}: head ${n.head.status} \u2014 ${O(n.head.before)} \u2192 ${O(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`),i?.({type:"defaults_taken",count:t?.defaultsTaken??0})),r){let l=n.changeset??[],o=(d,v)=>{let a=l.filter(c=>c.kind===d).length;return a>0?`${a} ${v}`:null},w=[o("ADD","add"),o("MODIFY","modify"),o("ARCHIVE","archive")].filter(Boolean);n.changed&&e.out(`changeset: ${l.length} item(s)${w.length?` \u2014 ${w.join(" \xB7 ")}`:""}`),e.out(`plan: ${n.rows.length} row(s) \u2014 each gets a card below`);return}if(n.changed){let l=n.changeset??[];e.out(`changeset: ${l.length} item(s)`);for(let o of l)if(o.kind==="MODIFY")e.out(` [MODIFY] ${H(o.ref)} \u2014 ${o.summary} (${O(o.old_cid)} \u2192 ${o.new_cid===null?"(staged)":O(o.new_cid)})`);else if(o.kind==="ADD")e.out(` [ADD] ${H(o.ref)}`);else{e.out(` [ARCHIVE] ${H(o.ref)} \u2014 ${o.why}`);let w=ae(o.impact,"retiring drops");w&&e.out(` ${w}`)}}e.out(`plan: ${n.rows.length} row(s)`);for(let l of n.rows){e.out(` [${l.kind}] ${H(l.ref)} \u2014 ${l.reason}`);let o=ae(l.impact,"approving marks");o&&e.out(` ${o}`),e.out(` provenance: ${l.provenance}`),e.out(` action: ${l.action}`)}}function ae(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 x(e){return e==="interactive"?"override":e}async function A(e,n,t,r,i,l,o=[],w="override",d,v,a,c,$){let u;try{u=ee(e)}catch(R){return E(r,R instanceof Error?R.message:String(R)),1}try{if(!t){let{runWalkSession:R}=await import("./walk-session-YUYRULPY.js");return await R({dir:e,rows:n,archive:o,held:d??null,childMode:w,runDesign:c??null,mark:l,markA:a,...v?{archiveState:v}:{},signals:m=>I(e,m.ref,m.verdict,m.reason),...$?{script:$}:{}})}return await Ie(e,n,t,r,i,l,o,w,d,v)}finally{u()}}var L=e=>`${e} high-risk item(s) need a human \u2014 ci mode won't guess. Walk interactively or use --mode agent.`;function M(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 ce(e={}){return{type:"reconcile_summary",applied:0,skipped:0,deferred:0,plan_only:0,failed:0,paused:0,stale_created:0,...e}}var V=ce();async function B(e,n,t,r,i,l,o,w,d){M(i,n,t);let v=n.changeset.filter($=>$.kind==="ARCHIVE"&&d?.[$.ref]===void 0),a=n.rows,c;try{c=ee(e)}catch($){return i({type:"error",message:$ instanceof Error?$.message:String($)}),i(ce()),2}try{return await Ce(e,n,t,r,i,l,o,a,v,w)}finally{c()}}async function Ce(e,n,t,r,i,l,o,w,d,v){let a=0,c=0,$=0,u=0,R=0,m=0,f=0,P=new Set,b=(g,p)=>{try{v?.(g,p)}catch{}};for(let[g,p]of w.entries()){i({type:"reconcile_row_start",kind:p.kind,ref:p.ref,...p.impact?{stale:p.impact.stale_refs.length,direct:p.impact.direct_refs?.length??0}:{}});let h=(s,_,D)=>i({type:"reconcile_row_end",kind:p.kind,ref:p.ref,outcome:s,..._!==void 0?{exit_code:_}:{},...D?{detail:D}:{}});if(p.applied){c++,h("skipped");continue}if(p.kind==="REMOVE"){R++,h("plan-only");continue}if(p.held_ref&&n.held){let s=new Set;if(p.kind==="MODIFY"&&p.impact){let D=S(e);for(let U of p.impact.stale_refs){let Y=D.resolve(U);Y&&D.stale(Y.tip)==="fresh"&&s.add(U)}}let _=ie(e,n.held,p.held_ref,le);if(!_.ok){$++,f===0&&(f=1),h("failed",1,_.message);continue}if(_.kind==="ADD"){let D=await r(_.ref,{yes:!0,mode:o});if(D!==0){D===3?(u++,f===0&&(f=3),h("paused",3)):($++,f===0&&(f=1),h("failed",D));continue}}a++,_.kind!=="ADD"&&p.impact&&(m+=s.size),b(g,"approved"),I(e,p.ref,_.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve"),h("applied");continue}let k=ne(S(e),p.ref);if(!k.ok){c++,h("skipped");continue}let y=k.target;if(P.has(y.ucTip)){c++,h("skipped");continue}if(p.kind==="ADD"){let s=await r(y.seamRef,{yes:!0,mode:o});if(s===3){u++,f===0&&(f=3),h("paused",3);continue}if(s!==0){$++,f===0&&(f=1),h("failed",s);continue}P.add(y.ucTip),a++,b(g,"approved"),I(e,p.ref,"gap-resolved-create"),h("applied")}else{let s=await te(e,y,{yes:!0,mode:o},l,r,"batch");s.outcome==="evolved"?(P.add(y.ucTip),a++,b(g,"approved"),I(e,p.ref,"gap-resolved-evolve"),h("applied")):s.outcome==="paused"?(u++,f===0&&(f=s.code),h("paused",s.code)):s.outcome==="failed"?($++,f===0&&(f=1),h("failed",s.code)):(c++,h("skipped"))}}return d.length>0&&(i({type:"reconcile_paused",plan_path:t,pending:d.map(g=>({ref:g.ref,why:g.why}))}),u+=d.length,f===0&&(f=3)),i(ce({applied:a,skipped:c,plan_only:R,failed:$,paused:u,stale_created:m})),f}var le={kind:"human",id:process.env.USER??"operator"};function I(e,n,t,r){me(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:n,verdict:t,polarity:"preference",by:le,target:n,...r!==void 0?{reason:r}:{}})}async function Ie(e,n,t,r,i,l,o=[],w="override",d,v){let a=0,c=0,$=0,u=0,R=0,m=0,f=0,P=new Set;for(let[b,g]of n.entries()){if(g.applied){r.out(`skipped ${g.ref} \u2014 already applied (${g.applied.outcome} at ${g.applied.at})`),c++;continue}let p=s=>{try{l?.(b,s)}catch(_){E(r,`could not record applied state for ${g.ref}: ${_ instanceof Error?_.message:String(_)}`)}};if(g.kind==="REMOVE"){r.out(`REMOVE ${g.ref} \u2014 plan-only in this release (not executed)`),u++;continue}if(g.held_ref&&d){let s=ie(e,d,g.held_ref,le);if(!s.ok){E(r,`held ${g.ref}: ${s.message}`),R++,f===0&&(f=1);continue}if(r.out(`committed ${s.ref} (${g.kind==="ADD"?"minted":"updated \u2014 old\u2192new redirect"})`),s.kind==="ADD"){let _=await i(s.ref,{yes:t,mode:w});if(_===3){r.out(`design session for ${s.ref} paused \u2014 resume with the "kane-cli design tests --resume <session>" command printed above`),m++,f===0&&(f=3),p("approved");continue}if(_!==0){E(r,`design run for ${s.ref} ended with exit code ${_}`),R++,f===0&&(f=1),p("approved");continue}}a++,p("approved"),I(e,g.ref,g.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve");continue}let h=S(e),k=ne(h,g.ref);if(!k.ok){r.out(`skipped ${g.ref} \u2014 ${k.message}`),c++;continue}let y=k.target;if(P.has(y.ucTip)){r.out(`skipped ${g.ref} \u2014 use-case ${y.display} already handled in this walk`),c++;continue}if(g.kind==="ADD"){let s=await i(y.seamRef,{yes:t,mode:w});if(s===3){r.out(`design session for ${y.display} paused \u2014 resume with the "kane-cli design tests --resume <session>" command printed above; this row lands when that session completes`),m++,f===0&&(f=3);continue}if(s!==0){E(r,`design run for ${y.display} ended with exit code ${s}`),R++,f===0&&(f=1);continue}P.add(y.ucTip),a++,p("approved"),I(e,g.ref,"gap-resolved-create")}else{let s=await te(e,y,{yes:!0,mode:w},r,i,"batch");s.outcome==="evolved"?(P.add(y.ucTip),a++,p("approved"),I(e,g.ref,"gap-resolved-evolve")):s.outcome==="paused"?(m++,f===0&&(f=s.code)):s.outcome==="failed"?(R++,f===0&&(f=s.code)):c++}}for(let b of o)if(b.kind==="ARCHIVE"&&v?.[b.ref]===void 0){r.out(`[ARCHIVE] ${b.ref} \u2014 ${b.why}`);{let g=ae(b.impact,"retiring drops");g&&r.out(` ${g}`)}r.out(" plan-only \u2014 retire belongs to the interactive session (never headless)"),u++}return r.out(`reconcile walk: ${a} applied, ${c} skipped, ${$} deferred, ${u} plan-only`+(R>0?`, ${R} failed`:"")+(m>0?`, ${m} paused`:"")),f}var Ue=new Set(z.map(e=>e.name));function q(e,n,t){let r=S(e),i=r.heads.get(n);if(i==null)return null;let l=r.mediaOf(i);if("remoteUrl"in t){let o=J(t.remoteUrl)?.name??"remote";return l.format!==o?`source '${n}' is backed by ${l.format} content, not a ${o} source \u2014 reconcile it with the --from it was originally ingested from`:null}return Ue.has(l.format)?`source '${n}' is a remote ${l.format} source \u2014 pass its URL to --from, not a file`:null}function de(e,n,t,r){return"remoteUrl"in n?ke(e,n.remoteUrl,{out:t.out,err:t.err},r.remoteFindProvider):ye(e,n.filePath)}function Ee(e){return e.remote_url!==void 0?{remoteUrl:e.remote_url}:e.backing_path!==void 0?{filePath:e.backing_path}:null}async function Pe(e,n,t,r,i,l=!1,o=!1){let w=i.seams??{reingest:de(e,t,r,i),reextract:se(e,{stage:l,hostOut:c=>r.out(c),hostEmit:c=>{c.type!=="run_start"&&i.emitEvent?.(c)},...i.emitEvent?{}:{hostProgress:c=>process.stderr.write(c+`
|
|
3
|
-
`)}})},d=null,v={reingest:w.reingest,reextract:async c=>d=await w.reextract(c)},a;try{r.out(`reconciling ${n}: re-reading the source and comparing against the graph\u2026`),a=await(i.buildPlan??oe)(e,n,v)}catch(c){return E(r,`reconcile failed: ${c instanceof Error?c.message:String(c)}`),null}return a.changed&&j(r,a,d,o,i.emitEvent),a}async function Ae(e){let[{render:n},t,{ScrollbackProvider:r},{ChatSurface:i},{makeChatController:l},{makeReconcileDeps:o}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-E7QKI4LA.js"),import("./chat-controller-T2FAI55V.js"),import("./reconcile-deps-HTT6IPHT.js")]),w=t.default??t,d=l(),v=o({contextDir:e,note:a=>d.note(a)});return new Promise(a=>{let c=n(w.createElement(r,null,w.createElement(i,{controller:d,verb:"extract",reconcile:v,autoReview:!0,onReviewExit:()=>{c.unmount(),a(0)},onCtrlC:()=>{c.unmount(),a(v.pending()?3:0)}})),{exitOnCtrlC:!1})})}async function Me(e,n,t,r,i){let l=K(e,n);if("error"in l)return E(r,l.error),2;let{plan:o,path:w}=l,d=t==="override"||t==="ci";if(n===void 0&&t==="interactive"&&r.isTTY&&!await r.confirm(`apply plan ${W(w)} for ${o.source_id} (created ${o.created})?`))return r.out(`not applying ${W(w)}`),0;let v=i.runDesignForUc??re,a=i.runDesignForUc??null,c=i.sessionScript,$=(g,p)=>C(w,g,p),u=(g,p)=>N(w,g,p),R=F(e);if(R===o.head_pin){if(t==="agent"){let p=i.emitEvent??(()=>{});return B(e,T(o),w,v,p,r,x(t),$,o.archive_state)}let g=X(o);return t==="ci"&&g.length>0?(E(r,L(g.length)),2):(r.out(`applying stored plan ${W(w)} for ${o.source_id} (${o.rows.length} row(s))`),A(e,o.rows,d,r,v,$,o.changeset??[],x(t),o.held,o.archive_state,u,a,c))}if(r.out(`graph moved since this plan (${O(o.head_pin)} \u2192 ${O(R)}) \u2014 recomputing`),o.held)return be(e,o,r,i,t,v,!1);let m=Ee(o);if(m===null)return E(r,`stored plan for ${o.source_id} names no backing file or URL \u2014 re-run reconcile --from`),2;let f=q(e,o.source_id,m);if(f!==null)return E(r,`stored plan cannot replay: ${f}`),2;let P=await Pe(e,o.source_id,m,r,i,!1,t==="interactive");if(!P)return 1;if(!P.changed)return j(r,P,null,!1,i.emitEvent),0;if(t==="agent"){let g=i.emitEvent??(()=>{});return B(e,P,null,v,g,r,x(t))}let b=P.changeset.filter(g=>g.kind==="ARCHIVE");return t==="ci"&&b.length>0?(E(r,L(b.length)),2):A(e,P.rows,d,r,v,void 0,P.changeset,x(t),P.held,void 0,void 0,a,c)}function T(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 Fe(e,n,t,r,i,l,o){let w=r.runDesignForUc??null,d=r.sessionScript,v=pe(e,n);if(v===null)return null;if("error"in v)return E(t,v.error),2;let{plan:a,path:c}=v,$=a.rows.filter(f=>f.applied===void 0),u=X(a),R=r.emitEvent??(()=>{});if($.length===0&&u.length===0){t.out(`already reconciled \u2014 plan ${a.created} applied ${a.rows.length} row(s)`);let f=ve(S(e)).staleCount;return f>0&&(t.out(`${f} item(s) still stale \u2014 kane-cli maintain evolve --from-stale`),R({type:"stale_debt",count:f})),i==="agent"&&(M(R,T(a),c),R({...V})),0}let m=F(e);return m!==a.head_pin?(t.out(`plan ${a.created} superseded \u2014 graph moved (${O(a.head_pin)} \u2192 ${O(m)}); recomputing`),be(e,a,t,r,i,l,o)):(t.out(`resuming plan ${a.created} \u2014 ${$.length} pending row(s)${u.length>0?`, ${u.length} undecided archive item(s)`:""}`),o?(j(t,T(a),null,!1,r.emitEvent),t.out(`plan stored: ${c}`),i==="agent"&&(M(R,T(a),c),R({...V})),0):i==="agent"?B(e,T(a),c,l,R,t,x(i),(f,P)=>C(c,f,P),a.archive_state):i==="ci"&&u.length>0?(E(t,L(u.length)),2):A(e,a.rows,i==="override"||i==="ci",t,l,(f,P)=>C(c,f,P),a.changeset??[],x(i),a.held,a.archive_state,(f,P)=>N(c,f,P),w,d))}async function be(e,n,t,r,i,l,o){let w=r.runDesignForUc??null,d=r.sessionScript,v;if(n.held){let h=S(e),k=new Set(n.rows.filter(s=>s.held_ref!==void 0&&s.applied!==void 0).map(s=>s.held_ref)),y=[];for(let s of n.held.rows){if(k.has(s.temp_ref))continue;if(!s.matched_cid){y.push(s);continue}let _=h.tipOf(s.matched_cid);if(h.superseded.get(_)===null){t.out(`dropped held "${s.title}" \u2014 its use-case was retired meanwhile`),r.emitEvent?.({type:"held_dropped",ref:s.temp_ref,title:s.title,reason:"target_retired"});continue}y.push(_===s.matched_cid?s:{...s,matched_cid:_,uc:{...s.uc,matches_existing:{cid:_}}})}v={source_id:n.held.source_id,rows:y}}let a=Ee(n);if(a===null)return E(t,`stored plan for ${n.source_id} names no backing file or URL \u2014 re-run reconcile --from`),2;let c=q(e,n.source_id,a);if(c!==null)return E(t,`stored plan cannot replay: ${c}`),2;let $=r.seams??{reingest:de(e,a,t,r),reextract:se(e,{stage:v!==void 0,hostOut:h=>t.out(h),hostEmit:h=>{h.type!=="run_start"&&r.emitEvent?.(h)},...r.emitEvent?{}:{hostProgress:h=>process.stderr.write(h+`
|
|
4
|
-
`)}})},u;try{u=await(r.buildPlan??oe)(e,n.source_id,$,{resumeHeld:v})}catch(h){return E(t,`reconcile failed: ${h instanceof Error?h.message:String(h)}`),1}j(t,u,null,i==="interactive"&&!o,r.emitEvent);let R=F(e),m=null;if(R!=null){let h={},k=new Set(u.changeset.filter(y=>y.kind==="ARCHIVE").map(y=>y.ref));for(let[y,s]of Object.entries(n.archive_state??{}))k.has(y)&&(h[y]=s);m=Q(e,{version:2,source_id:u.source_id,...n.remote_url!==void 0?{remote_url:n.remote_url}:{backing_path:n.backing_path},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}:{},...Object.keys(h).length>0?{archive_state:h}:{}}),t.out(`plan stored: ${m}`)}if(o){if(i==="agent"){let h=r.emitEvent??(()=>{});M(h,u,m),h({...V})}return 0}let f=r.emitEvent??(()=>{}),P=m?K(e,m).plan.archive_state:void 0,b=m?(h,k)=>C(m,h,k):void 0,g=m?(h,k)=>N(m,h,k):void 0;if(i==="agent")return B(e,u,m,l,f,t,x(i),b,P);let p=u.changeset.filter(h=>h.kind==="ARCHIVE"&&P?.[h.ref]===void 0);return i==="ci"&&p.length>0?(E(t,L(p.length)),2):A(e,u.rows,i==="override"||i==="ci",t,l,b,u.changeset,x(i),u.held,P,g,w,d)}async function $e(e,n,t={},r=process.cwd()){let{telemetryBootstrap:i,telemetryEnvName:l}=await import("./bootstrap-NFYYRGGR.js"),o=i({verb:"reconcile",mode:typeof e.mode=="string"?e.mode:"interactive",contextRoot:G(r,".context"),env:l(),applyPlanPath:typeof e.apply=="string"?G(r,e.apply):void 0,write:!0,longSession:!0});e.mode==="agent"&&t.emitEvent?.({type:"run_start",session:o.ids.session_id});let w=await He(e,n,t,r);return w===1&&e.mode!=="agent"&&(n.err??n.out)(o.supportFooter()),await o.end({exit_code:w}),w}async function He(e,n,t={},r=process.cwd()){let i=e.apply!==void 0&&e.apply!==!1,l=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&i)return E(n,"pass --plan OR --apply, not both"),2;let o=e.from!==void 0||!i,w=e.from!==void 0&&Z(e.from);if(o&&(!e.from||!e.sourceId&&!w))return E(n,"reconcile needs --from <file|url> AND --source-id <id> (files only \u2014 a URL derives its own id) \u2014 see `kane-cli context list --type source` for ids"),2;if(e.from&&l!==void 0)return E(n,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let d=ge(r,n);if(!d)return 2;if(e.mode!==void 0&&!_e.has(e.mode))return Re(`--mode must be interactive | agent | ci | override, got '${e.mode}'`);let v=e.mode==="agent"||e.mode==="ci"||e.mode==="override";if(i&&!v&&!n.isTTY)return E(n,"refusing to apply without a TTY to confirm \u2014 pass --mode override|ci"),2;let a=!e.plan,c="override";if(e.from){let k=Se(e,n.isTTY);if(typeof k=="object")return k.code==="MODE_USAGE"?Re(k.error):(E(n,k.error),2);c=k}let $=c==="override"||c==="ci";if(i&&!e.from){let{makeReconcileDeps:k}=await import("./reconcile-deps-HTT6IPHT.js"),y=l===void 0?k({contextDir:d}).pending():null;if(y?.kind==="cards"){let _=e.mode??"interactive";return!n.isTTY||_!=="interactive"?(E(n,`a held changeset for ${y.source} awaits review (${y.count} change(s)) \u2014 resume in a terminal: kane-cli maintain reconcile --apply [HELD_REVIEW]`),2):(t.cardApplyMount??Ae)(d)}let s=e.mode??"interactive";return Me(d,l===void 0?void 0:G(r,l),s,n,t)}let u=Oe(d,r,e.from,e.sourceId);if("error"in u)return E(n,u.error),2;if(!i){let{sessionsHoldingSource:k}=await import("./sessions-GIEXOCE4.js"),{holders:y,corrupt:s}=k(d,u.sourceId);if(s>0)return E(n,`cannot verify review holds \u2014 ${s} session file(s) unreadable; inspect with kane-cli context sessions list, clean with kane-cli context sessions clean, then retry [SESSIONS_UNREADABLE]`),2;if(y.length>0)return E(n,`session ${y[0]} holds item(s) for review pinned to ${u.sourceId} \u2014 finish that review first: kane-cli context extract --resume ${y[0]} [SOURCE_HELD]`),2}if(c==="interactive"&&!e.plan&&!i){let k=t.seams?.reingest??de(d,u,n,t),y;try{y=await k(u.sourceId)}catch(_){return E(n,_ instanceof Error?_.message:String(_)),1}let s=y.status==="unchanged"?null:we(d,u.sourceId);if(y.status!=="unchanged"&&!s)return n.out(`${u.sourceId} landed for the first time \u2014 extract it: kane-cli context extract --source ${u.sourceId}`),0;if(s){let D=await(t.chatMount??(async U=>{let{bindExtractInteractive:Y}=await import("./extract-bind-5OWELRME.js");return Y(U)}))({mode:"interactive",posture:"reconcile",source:u.sourceId,changeContext:s});if(D===3){let{sessionsHoldingSource:U}=await import("./sessions-GIEXOCE4.js");if(U(d,u.sourceId).holders.length===0)return 0}return D}}let R="remoteUrl"in u?{remoteUrl:u.remoteUrl}:{filePath:u.filePath},m=await Pe(d,u.sourceId,R,n,t,!!e.plan||c==="interactive",c==="interactive"&&!e.plan);if(!m)return 1;let f=t.runDesignForUc??re,P=t.runDesignForUc??null,b=t.sessionScript;if(!m.changed){let k=await Fe(d,u.sourceId,n,t,c,f,!!e.plan);if(k!==null)return k;if(j(n,m,null,!1,t.emitEvent),c==="agent"){let y=t.emitEvent??(()=>{});M(y,m,null),y({...V})}return 0}let g=F(d),p=null;if(g!=null?p=Q(d,{version:2,source_id:m.source_id,..."remoteUrl"in R?{remote_url:R.remoteUrl}:{backing_path:R.filePath},head_pin:g,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:m.skipped_arms,note:m.note,changeset:m.changeset,rows:m.rows,...m.held?{held:m.held}:{}}):E(n,"no chain head after extract \u2014 plan not stored"),c==="agent"){let k=t.emitEvent??(()=>{});if(!a)return M(k,m,p),k({...V}),0;let y=p?(s,_)=>C(p,s,_):void 0;return B(d,m,p,f,k,n,x(c),y)}if(!a)return p&&n.out(`plan stored: ${p}`),0;let h=m.changeset.filter(k=>k.kind==="ARCHIVE");if(c==="ci"&&h.length>0)return p&&n.out(`plan stored: ${p}`),E(n,L(h.length)),2;if(p){n.out(`plan stored: ${p}`);let k=p;return A(d,Te(d,k)??m.rows,$,n,f,(y,s)=>C(k,y,s),m.changeset,x(c),m.held,void 0,void 0,P,b)}return A(d,m.rows,$,n,f,void 0,m.changeset,x(c),m.held,void 0,void 0,P,b)}function Te(e,n){let t=K(e,n);return"error"in t?null:t.plan.rows}async function Xe(e,n={},t,r=process.cwd()){if(e.mode==="agent"){let{makeHeadlessIO:i}=await import("./headless-io-66RG5NN5.js"),l=t?i("ndjson","reconcile",t):i("ndjson","reconcile"),o={out:l.out,err:v=>l.event({type:"error",message:v}),isTTY:!1,confirm:async()=>!1,ask:async()=>""},{runWithChannel:w}=await import("./run-channel-RGH4WIQX.js"),d=2;try{d=await w({event:v=>l.event(v)},()=>$e(e,o,{...n,emitEvent:v=>l.event(v)},r))}catch(v){d=1,l.event({type:"error",message:v instanceof Error?v.message:String(v)})}return l.done(d)}return $e(e,he(),n,r)}export{Se as a,Oe as b,x as c,I as d,$e as e,Xe as f};
|
package/dist/chunk-74HTO7K3.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as Ke}from"./chunk-AECMF3T2.js";import{a as Ne}from"./chunk-OR6MCL6Z.js";import{a as Fe}from"./chunk-4NFCAGRK.js";import{a as Oe}from"./chunk-YCCUBQY4.js";import{a as $e}from"./chunk-O75ZHGJG.js";import{a as Ue}from"./chunk-VE3SUJMA.js";import{a as me}from"./chunk-VRLUNZAK.js";import{c as _e,y as u}from"./chunk-ZUGCHQFC.js";import{a as te}from"./chunk-HCBYKLMW.js";import{a as p,b as f,h as De,i as be,k as ke}from"./chunk-C44QQJR4.js";import{a as xe}from"./chunk-6YGTRKDT.js";import{e as $}from"./chunk-UR6MHSHU.js";var We=$(xe(),1);import{readFileSync as tt,writeFileSync as nt,mkdirSync as rt}from"fs";import{dirname as ot,join as He}from"path";var it=He(_e,"command-history.json"),At=He(_e,"generate-history.json"),st=200,Ie=class{entries;filePath;max;constructor(t=it,e=st){this.filePath=t,this.max=e,this.entries=this._load()}push(t){this.entries.length>0&&this.entries[this.entries.length-1]===t||(this.entries.push(t),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(t){let e=t.toLowerCase(),i=[];for(let s=this.entries.length-1;s>=0;s--)this.entries[s].toLowerCase().includes(e)&&i.push(this.entries[s]);return i}_load(){if(this.filePath===null)return[];try{let t=tt(this.filePath,"utf-8"),e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}_save(){if(this.filePath!==null)try{rt(ot(this.filePath),{recursive:!0}),nt(this.filePath,JSON.stringify(this.entries)+`
|
|
3
|
-
`)}catch{}}};function Ct(r){let t=(0,We.useRef)(null);return t.current||(t.current=new Ie(r)),t.current}var D=$(xe(),1);var Pe=$(xe(),1);var Q=$(te(),1);function Ge({history:r,onSelect:t,onClose:e}){let[i,s]=(0,Pe.useState)(""),[l,h]=(0,Pe.useState)(0),w=i?r.search(i).slice(0,8):[];return be((T,m)=>{if(m.escape){e();return}if(m.return){w.length>0&&w[l]?t(w[l]):e();return}if(m.upArrow){h(S=>Math.max(0,S-1));return}if(m.downArrow){h(S=>Math.min(w.length-1,S+1));return}if(m.backspace||m.delete){s(S=>S.slice(0,-1)),h(0);return}T&&!m.ctrl&&!m.meta&&(s(S=>S+T),h(0))}),(0,Q.jsxs)(p,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,Q.jsx)(f,{color:u.muted,bold:!0,children:"reverse search"}),(0,Q.jsxs)(p,{gap:1,children:[(0,Q.jsx)(f,{color:u.dim,children:"search:"}),(0,Q.jsx)(f,{children:i}),(0,Q.jsx)(f,{color:u.orange,children:"\u2588"})]}),w.length>0&&(0,Q.jsx)(f,{children:" "}),w.map((T,m)=>(0,Q.jsx)(p,{marginLeft:2,children:(0,Q.jsxs)(f,{color:m===l?u.orange:u.dim,bold:m===l,children:[m===l?"\u25B8 ":" ",T]})},`${m}-${T}`))]})}var ue=$(te(),1);function Ve({commands:r,selectedIndex:t}){return r.length===0?null:(0,ue.jsx)(p,{flexDirection:"column",marginBottom:0,children:r.map((e,i)=>{let s=i===t;return(0,ue.jsxs)(p,{children:[(0,ue.jsx)(f,{color:s?u.orange:u.dim,children:s?"\u276F ":" "}),(0,ue.jsxs)(f,{color:s?u.orange:void 0,bold:s,children:["/",e.name]}),e.args&&(0,ue.jsxs)(f,{color:u.dim,children:[" ",e.args]}),(0,ue.jsxs)(f,{color:u.dim,children:[" ",e.description]})]},e.name)})})}var qe=$(xe(),1);var G=$(te(),1),je={scenario:"Scenarios",case:"Test Cases",file:"Files"};function Ye(r){let t={scenario:0,case:0,file:0};for(let e of r)t[e.kind]++;return["scenario","case","file"].filter(e=>t[e]>0).map(e=>`${t[e]} ${je[e]}`).join(" \xB7 ")}var Ee=7;function ze({items:r,selectedIndex:t,accent:e=u.orange}){let i=r.length;if(i===0)return null;let s=Math.floor(Ee/2),l=i<=Ee?0:Math.max(0,Math.min(t-s,i-Ee)),h=Math.min(i,l+Ee),w=l,T=i-h;return(0,G.jsxs)(p,{flexDirection:"column",marginBottom:0,children:[w>0&&(0,G.jsx)(p,{children:(0,G.jsx)(f,{color:u.dim,children:` \u22EF ${w} above \u2014 ${Ye(r.slice(0,l))}`})}),r.slice(l,h).map((m,S)=>{let U=l+S,k=U===t,C=S===0||r[U-1].kind!==m.kind;return(0,G.jsxs)(qe.default.Fragment,{children:[C&&(0,G.jsx)(p,{children:(0,G.jsx)(f,{color:u.dim,children:je[m.kind]})}),(0,G.jsxs)(p,{children:[(0,G.jsx)(f,{color:k?e:u.dim,children:k?"\u276F ":" "}),(0,G.jsx)(f,{color:k?e:void 0,bold:k,children:m.label})]})]},`${m.kind}:${m.value}:${U}`)}),T>0&&(0,G.jsx)(p,{children:(0,G.jsx)(f,{color:u.dim,children:` \u22EF ${T} more \u2014 ${Ye(r.slice(h))}`})})]})}var ye=$(xe(),1);var lt=27,at=127,ct=11;function ut(r){return r>=64&&r<=126}function ft(r,t){r===ct&&t({killToEnd:!0,ctrl:!0,raw:String.fromCharCode(r)})}function dt(r,t){r===at&&t({backspace:!0,meta:!0,raw:"\x1B\x7F"})}function mt(r,t){let e=r.map(s=>String.fromCharCode(s)).join(""),i=/^\[1;([0-9]+)([A-D])$/.exec(e);if(i){let s=parseInt(i[1],10),l=i[2],h={raw:"\x1B"+e};if(s===2)h.shift=!0;else if(s===3)h.meta=!0;else if(s===5)h.ctrl=!0;else return;l==="A"?h.arrowUp=!0:l==="B"?h.arrowDown=!0:l==="C"?h.arrowRight=!0:l==="D"&&(h.arrowLeft=!0),t(h);return}if(e==="[H"||e==="[1~"||e==="[7~"){t({home:!0,raw:"\x1B"+e});return}if(e==="[F"||e==="[4~"||e==="[8~"){t({end:!0,raw:"\x1B"+e});return}if(e==="[3;5~"){t({delete:!0,ctrl:!0,raw:"\x1B"+e});return}if(e==="[3;3~"){t({delete:!0,meta:!0,raw:"\x1B"+e});return}}function ht(r,t){r===72?t({home:!0,raw:"\x1BO"+String.fromCharCode(r)}):r===70&&t({end:!0,raw:"\x1BO"+String.fromCharCode(r)})}function gt(){let r="IDLE",t=[];function e(){r="IDLE",t=[]}return{feed(i,s){for(let l of i)r==="IDLE"?l===lt?(r="ESC",t=[]):ft(l,s):r==="ESC"?l===91?(r="CSI",t=[]):l===79?(r="SS3",t=[]):(dt(l,s),e()):r==="CSI"?(t.push(l),ut(l)&&(mt([91,...t],s),e())):r==="SS3"&&(ht(l,s),e())},flushIdle(i){r==="ESC"&&t.length===0&&i({raw:"\x1B"}),e()}}}function Xe(r,t={}){let e=(0,ye.useRef)(r);e.current=r;let{stdin:i}=De();(0,ye.useEffect)(()=>{if(t.isActive===!1||!i)return;let s=gt(),l=null,h=w=>{l&&(clearTimeout(l),l=null);let T=Buffer.isBuffer(w)?w:Buffer.from(w,"binary");s.feed(T,m=>e.current(m)),l=setTimeout(()=>{s.flushIdle(m=>e.current(m)),l=null},50)};return i.on("data",h),()=>{i.removeListener("data",h),l&&clearTimeout(l)}},[t.isActive,i])}var y=$(te(),1);function pt(r,t){let e=t-1;for(;e>=0&&r[e]!=="@"&&r[e]!==" "&&r[e]!==`
|
|
4
|
-
`;)e--;return e<0||r[e]!=="@"||e>0&&r[e-1]!==" "&&r[e-1]!==`
|
|
5
|
-
`?null:{at:e,query:r.slice(e+1,t).join("")}}var Me=10;function xt(r){return r.replace(/\x1b?\[200~/g,"").replace(/\x1b?\[201~/g,"").replace(/\r\n/g,`
|
|
6
|
-
`).replace(/\r/g,`
|
|
7
|
-
`).replace(/[\x00-\x08\x0b-\x1f\x7f]/g,"")}function bt(r,t){let e=[],i=0;for(;i<=r.length;){let s=i;for(;s<r.length&&r[s]!==`
|
|
8
|
-
`;)s++;if(i===s)e.push({start:i,end:i});else{let l=i;for(;l<s;){let h=Math.min(l+t,s);e.push({start:l,end:h}),l=h}}if(s>=r.length)break;i=s+1}return e}function Tt(r,t,e){if(r.length===0)return 0;if(t>=e.length)return r.length-1;if(e[t]===`
|
|
9
|
-
`){for(let i=r.length-1;i>=0;i--)if(r[i].end===t)return i;return r.length-1}for(let i=0;i<r.length;i++){let s=r[i];if(s.start<=t&&t<s.end)return i}return r.length-1}function Je(r,t,e,i){let s=bt(r,e);if(s.length===0)return null;let l=Tt(s,t,r),h=l+i;if(h<0||h>=s.length)return null;let w=t-s[l].start,T=s[h],m=T.end-T.start;return T.start+Math.min(w,m)}function jt({onSubmit:r,onEscape:t,history:e,placeholder:i="Type an objective or /command...",commands:s,clearSeq:l,submitVerb:h,footerBindings:w,inert:T=!1,clearOnSubmit:m=!0,noHistory:S=!1,accent:U=u.orange,scenarios:k,mentionFiles:C,submitEmpty:M=!1}){let[c,v]=(0,D.useState)([]),[d,b]=(0,D.useState)(0),[V,q]=(0,D.useState)("none"),[Y,O]=(0,D.useState)(-1),oe=(0,D.useRef)(""),[Te,H]=(0,D.useState)(!0),{stdout:ve}=ke(),F=ve?.columns??80,[ie,j]=(0,D.useState)(0),[Z,se]=(0,D.useState)(0),[Ae,le]=(0,D.useState)([]),[Ce,_]=(0,D.useState)(null),R=(0,D.useRef)(!1);(0,D.useEffect)(()=>{if(l!==void 0){if(!R.current){R.current=!0;return}v([]),b(0),O(-1),oe.current="",H(!0),q("none"),j(0)}},[l]);let g=c.join(""),P=(()=>{if(V!=="none"||c.length===0)return"";if(g.startsWith("/")&&s&&g.length>=2){let n=g.slice(1).toLowerCase(),o=s.find(E=>E.name.startsWith(n)&&E.name!==n);return o?`/${o.name}`.slice(g.length):""}if(g.startsWith("/")||S)return"";let a=e.getAll();for(let n=a.length-1;n>=0;n--)if(a[n].startsWith(g)&&a[n]!==g)return a[n].slice(g.length);return""})(),B=(()=>{if(!s||!g.startsWith("/"))return[];let a=g.length>=2?g.slice(1).toLowerCase():"";return a&&s.some(n=>n.name===a)?[]:s.filter(n=>!a||n.name.startsWith(a))})(),he=B.length>0&&g.startsWith("/"),z=!!C||!!(k&&k.length)?pt(c,d):null,Re=z?z.query:null,ne=(()=>{if(!z)return[];let a=z.query.toLowerCase(),n=[];(k??[]).forEach((o,E)=>{let A=`s${E+1}`;(!a||A.includes(a)||(o.title??"").toLowerCase().includes(a))&&n.push({kind:"scenario",value:A,label:`@${A} ${o.title??o.sid??""}`.trim()})}),(k??[]).forEach((o,E)=>{let I=E+1;(o.test_cases??[]).forEach((A,N)=>{let X=`s${I}.c${N+1}`;(!a||X.includes(a)||(A.title??"").toLowerCase().includes(a))&&n.push({kind:"case",value:X,label:`@${X} ${A.title??""}`.trim()})})});for(let o of Ae)n.push({kind:"file",value:o,label:o});return n})(),ge=z!==null&&z.at!==Ce&&!he&&V==="none"&&ne.length>0;(0,D.useEffect)(()=>{if(!C||Re===null){le([]);return}let a=!1;return C(Re).then(n=>{a||le(n)}).catch(()=>{a||le([])}),()=>{a=!0}},[Re,C]),(0,D.useEffect)(()=>{Z>=ne.length&&se(0)},[ne.length]);let Be=a=>{if(!z)return;let n=a.kind==="file"&&/\s/.test(a.value)?`@"${a.value}"`:`@${a.value}`,o=[...c.slice(0,z.at),...n,...c.slice(d)];v(o),b(z.at+n.length),se(0),_(z.at),H(!1)};if(be((a,n)=>{if(Te&&a&&H(!1),n.return){if(ge&&ne[Z]){Be(ne[Z]);return}if(he&&B[ie]){let o=`/${B[ie].name}`;S||e.push(o),r(o),v([]),b(0),q("none"),O(-1),oe.current="",H(!0),j(0);return}g.trim()?(S||e.push(g.trim()),r(g.trim()),m&&(v([]),b(0),q("none"),O(-1),oe.current="",H(!0),j(0))):M&&r("");return}if(n.escape){if(ge){_(z.at);return}V!=="none"?q("none"):c.length>0?(v([]),b(0),O(-1),oe.current=""):t?.();return}if(n.tab&&!n.shift){if(ge&&ne[Z]){Be(ne[Z]);return}if(he&&B[ie]){let o=`/${B[ie].name}`;v([...o]),b(o.length),j(0);return}if(P){let o=g+P;v([...o]),b(o.length);return}return}if(n.ctrl&&a==="r"){if(S)return;q("search");return}if(n.ctrl&&a==="a"){b(0);return}if(n.ctrl&&a==="e"){b(c.length);return}if(n.ctrl&&a==="w"){if(d===0)return;let o=d-1;for(;o>0&&c[o]===" ";)o--;for(;o>0&&c[o-1]!==" ";)o--;let E=[...c.slice(0,o),...c.slice(d)];v(E),b(o);return}if(n.ctrl&&a==="u"){v([]),b(0),O(-1),q("none");return}if(n.meta&&a==="b"){let o=d-1;for(;o>0&&c[o]===" ";)o--;for(;o>0&&c[o-1]!==" ";)o--;b(Math.max(0,o));return}if(n.meta&&a==="f"){let o=d;for(;o<c.length&&c[o]!==" ";)o++;for(;o<c.length&&c[o]===" ";)o++;b(o);return}if(n.leftArrow){if(n.ctrl||n.shift)return;b(o=>Math.max(0,o-1));return}if(n.rightArrow){if(n.ctrl||n.shift)return;if(d>=c.length&&P){let o=g+P;v([...o]),b(o.length)}else b(o=>Math.min(c.length,o+1));return}if(n.upArrow){if(n.shift)return;if(ge){se(o=>Math.max(0,o-1));return}if(he){j(o=>Math.max(0,o-1));return}if(V==="none"){let o=Math.max(1,F-2),E=Je(c,d,o,-1);if(E!==null){b(E);return}if(S)return;let I=e.getAll();if(I.length===0)return;if(Y===-1){oe.current=g,O(I.length-1);let A=I[I.length-1];v([...A]),b(A.length)}else if(Y>0){let A=Y-1;O(A);let N=I[A];v([...N]),b(N.length)}}return}if(n.downArrow){if(n.shift)return;if(ge){se(o=>Math.min(ne.length-1,o+1));return}if(he){j(o=>Math.min(B.length-1,o+1));return}if(V==="none"){let o=Math.max(1,F-2),E=Je(c,d,o,1);if(E!==null){b(E);return}if(S)return;let I=e.getAll();if(Y===-1)return;if(Y<I.length-1){let A=Y+1;O(A);let N=I[A];v([...N]),b(N.length)}else{O(-1);let A=oe.current;v([...A]),b(A.length)}}return}if(n.backspace||n.delete){if(n.meta||n.ctrl)return;if(d>0){let o=[...c.slice(0,d-1),...c.slice(d)];v(o),b(d-1),O(-1),j(0),_(null),se(0)}return}if(a&&!n.ctrl&&!n.meta){let o=xt(a);if(!o)return;let E=[...c.slice(0,d),...o,...c.slice(d)];v(E),b(d+o.length),O(-1),j(0),_(null),se(0)}},{isActive:!T&&V!=="search"}),Xe(a=>{if(a.home){b(0);return}if(a.end){b(c.length);return}if(a.killToEnd){v(c.slice(0,d));return}if(a.arrowLeft&&(a.ctrl||a.meta)){let n=d-1;for(;n>0&&c[n]===" ";)n--;for(;n>0&&c[n-1]!==" ";)n--;b(Math.max(0,n));return}if(a.arrowRight&&(a.ctrl||a.meta)){let n=d;for(;n<c.length&&c[n]!==" ";)n++;for(;n<c.length&&c[n]===" ";)n++;b(n);return}if(a.backspace&&a.meta){if(d===0)return;let n=d-1;for(;n>0&&c[n]===" ";)n--;for(;n>0&&c[n-1]!==" ";)n--;let o=[...c.slice(0,n),...c.slice(d)];v(o),b(n);return}if(a.delete&&(a.ctrl||a.meta)){let n=d;for(;n<c.length&&c[n]===" ";)n++;for(;n<c.length&&c[n]!==" ";)n++;v([...c.slice(0,d),...c.slice(n)]);return}},{isActive:!T&&V!=="search"}),T)return(0,y.jsxs)(p,{flexDirection:"column",children:[(0,y.jsx)(f,{color:u.muted,children:"\u2500".repeat(F)}),(0,y.jsxs)(p,{children:[(0,y.jsx)(f,{color:u.muted,children:"\u276F "}),(0,y.jsx)(f,{color:u.dim,children:i})]}),(0,y.jsx)(me,{bindings:w??[{keys:"ctrl+c",label:"cancel"},{keys:"/cancel",label:"stop turn"},{keys:"ctrl+t",label:"thinking"}],suppressEscBack:!0})]});let Ze=a=>{v([...a]),b(a.length),q("none")},et=()=>{q("none")},we=(()=>{if(Te&&c.length===0)return null;let a=d>=c.length,n=c.slice(0,d).join(""),o,E;a?(o=" ",E=""):c[d]===`
|
|
10
|
-
`?(o=" ",E=c.slice(d).join("")):(o=c[d],E=c.slice(d+1).join(""));let I=n+o+E+P,A=n.length,N=A+1,X=N+E.length,Se=Math.max(1,F-2),L=[],re=0;for(;re<=I.length;){let W=I.indexOf(`
|
|
11
|
-
`,re);if(W===-1&&(W=I.length),re===W)L.push({type:"content",start:re,end:re});else{let J=re;for(;J<W;){let ae=Math.min(J+Se,W);L.push({type:"content",start:J,end:ae}),J=ae}}if(W>=I.length)break;re=W+1}let ee=Math.max(0,L.findIndex(W=>W.start<=A&&A<=W.end)),de;if(L.length<=Me)de=L;else{let J=Me-1-4;if(ee<4||ee>=L.length-J)de=[...L.slice(0,4),{type:"ellipsis",hidden:L.length-4-J},...L.slice(L.length-J)];else{let ae=Me-2,Le=Math.floor(ae/2),ce=ee-Le,pe=ee+(ae-Le)-1;ce<1&&(pe+=1-ce,ce=1),pe>L.length-2&&(ce-=pe-(L.length-2),pe=L.length-2),ce=Math.max(1,ce),de=[{type:"ellipsis",hidden:ce},...L.slice(ce,pe+1),{type:"ellipsis",hidden:L.length-pe-1}]}}return{full:I,b:A,c:N,a:X,rows:de}})();return(0,y.jsxs)(p,{flexDirection:"column",children:[V==="search"&&(0,y.jsx)(Ge,{history:e,onSelect:Ze,onClose:et}),he&&(0,y.jsx)(Ve,{commands:B,selectedIndex:ie}),ge&&(0,y.jsx)(ze,{items:ne,selectedIndex:Z,accent:U}),(0,y.jsx)(f,{color:u.muted,children:"\u2500".repeat(F)}),we===null?(0,y.jsxs)(p,{children:[(0,y.jsx)(f,{color:U,children:"\u276F "}),(0,y.jsx)(f,{inverse:!0,children:" "}),(0,y.jsx)(f,{color:u.dim,children:i})]}):(()=>{let a=we.rows.findIndex(n=>n.type==="content");return(0,y.jsx)(p,{flexDirection:"column",children:we.rows.map((n,o)=>{if(n.type==="ellipsis")return(0,y.jsx)(p,{children:(0,y.jsxs)(f,{color:u.dim,children:[" \u22EF ","(",n.hidden," more line",n.hidden===1?"":"s",")"]})},o);let{full:E,b:I,c:A,a:N}=we,X=n.start,fe=n.end,Se=o===a,L=Se?"\u276F ":" ",re=Se?U:u.muted,ee=[(0,y.jsx)(f,{color:re,children:L},"p")];X<Math.min(I,fe)&&ee.push((0,y.jsx)(f,{children:E.slice(X,Math.min(I,fe))},"b"));let de=Math.max(I,X),W=Math.min(A,fe);de<W&&ee.push((0,y.jsx)(f,{color:U,inverse:!0,children:E.slice(de,W)},"c"));let J=Math.max(A,X),ae=Math.min(N,fe);return J<ae&&ee.push((0,y.jsx)(f,{children:E.slice(J,ae)},"a")),fe>N&&ee.push((0,y.jsx)(f,{color:u.dim,children:E.slice(Math.max(N,X),fe)},"g")),(0,y.jsx)(p,{children:ee},o)})})})(),(0,y.jsx)(me,{bindings:w??[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:h??"submit"},{keys:"tab",label:"complete"},{keys:"ctrl+r",label:"search"}],escBackLabel:"clear"})]})}var K=$(xe(),1);var x=$(te(),1);function vt(r){let t=[{id:"method",label:"Auth method",options:[{label:"Basic Auth",value:"basic"},{label:"OAuth (browser)",value:"oauth"}]}];return r&&t.push({id:"env",label:"Environment",options:[{label:"prod",value:"prod"},{label:"stage",value:"stage"}]}),t.push({id:"profile",label:"Profile"}),t.push({id:"credentials",label:"Credentials"}),t}function tn({devMode:r,profiles:t,onBasicLogin:e,onOAuthLogin:i,onComplete:s,onCancel:l}){let h=vt(r),[w,T]=(0,K.useState)(0),[m,S]=(0,K.useState)(0),[U,k]=(0,K.useState)({}),[C,M]=(0,K.useState)("select"),[c,v]=(0,K.useState)(""),[d,b]=(0,K.useState)("username"),[V,q]=(0,K.useState)(""),[Y,O]=(0,K.useState)(null),[oe,Te]=(0,K.useState)(null),H=h[w],ve=U.method??"basic",F=U.env??"prod",ie=(0,K.useCallback)(()=>{let R=t.filter(g=>g.env===F).map(g=>({label:`${g.profile} [${g.env}]`,value:g.profile}));return R.push({label:"+ Create new",value:"__new__"}),R},[t,F]),j=(0,K.useCallback)(()=>{w===0?l():(T(_=>_-1),S(0),M("select"),v(""),O(null))},[w,l]),Z=(0,K.useCallback)(_=>{ve==="basic"?(M("text-input"),b("username"),v("")):(M("waiting"),i(_,F).then(()=>{Te(`Logged in via OAuth as ${_} [${F}]`),M("done")}).catch(R=>{O(R.message),M("error")}))},[ve,F,i]),se=(0,K.useCallback)(_=>{let R=_.trim();if(R){if(d==="profileName"){let g=R;k(P=>({...P,profile:g})),Z(g);return}if(d==="username"){q(R),v(""),b("accessKey"),M("text-input-masked");return}if(d==="accessKey"){let g=U.profile??"default";M("waiting"),(async()=>{try{await e(g,F,V,R),Te(`Logged in as ${g} [${F}] via basic auth`),M("done")}catch{O("Credentials not valid. Please use valid credentials."),q(""),v(""),b("username"),M("text-input")}})()}}},[d,U.profile,F,e,V,Z]),Ae=(0,K.useCallback)(_=>{v(_),Y&&O(null)},[Y]);be((_,R)=>{if(C==="done"){let P=U.profile??"default";s(P,F);return}if(C==="error"){l();return}if(C==="waiting"){R.escape&&l();return}if(C==="text-input"||C==="text-input-masked")return;if(R.escape){j();return}let g=H?.id==="profile"?ie():H?.options??[];if(R.upArrow){S(P=>Math.max(0,P-1));return}if(R.downArrow){S(P=>Math.min(g.length-1,P+1));return}if(R.return&&g[m]){let P=g[m];if(H.id==="profile"){if(P.value==="__new__"){M("text-input"),b("profileName"),v("");return}k(B=>({...B,profile:P.value})),T(B=>B+1),S(0),Z(P.value);return}k(B=>({...B,[H.id]:P.value})),T(B=>B+1),S(0)}});let le="Login";if(C==="done")return(0,x.jsxs)(p,{flexDirection:"column",borderStyle:"round",borderColor:u.green,paddingX:2,paddingY:1,children:[(0,x.jsxs)(f,{color:u.green,bold:!0,children:["\u2713 ",oe]}),(0,x.jsx)(p,{marginTop:1,children:(0,x.jsx)(f,{color:u.dim,children:"press any key"})})]});if(C==="error")return(0,x.jsxs)(p,{flexDirection:"column",borderStyle:"round",borderColor:u.red,paddingX:2,paddingY:1,children:[(0,x.jsx)(f,{color:u.red,bold:!0,children:"Login failed"}),(0,x.jsx)(p,{marginTop:1,children:(0,x.jsx)(f,{color:u.red,children:Y})}),(0,x.jsx)(p,{marginTop:1,children:(0,x.jsx)(f,{color:u.dim,children:"press any key"})})]});if(C==="waiting")return(0,x.jsxs)(p,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[(0,x.jsxs)(f,{color:u.orange,bold:!0,children:[le," \u203A OAuth"]}),(0,x.jsx)(p,{marginTop:1,children:(0,x.jsx)(f,{color:u.secondary,children:"Opening browser for login..."})}),(0,x.jsx)(p,{marginTop:1,children:(0,x.jsx)(f,{color:u.orange,children:"Waiting for callback \u27F3"})}),(0,x.jsx)(me,{bindings:[],escBackLabel:"cancel"})]});if(C==="text-input"||C==="text-input-masked"){let _=d==="username"?"Username":d==="accessKey"?"Access Key":"Profile name",R=d==="username"||d==="accessKey"?`${le} \u203A Basic Auth`:`${le} \u203A New Profile`;return(0,x.jsxs)(p,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[Y&&(d==="username"||d==="accessKey")&&(0,x.jsx)(p,{marginBottom:1,children:(0,x.jsxs)(f,{color:u.red,children:["\u2717 ",Y]})}),(0,x.jsx)(f,{color:u.orange,bold:!0,children:R}),d==="accessKey"&&(0,x.jsxs)(p,{marginTop:1,children:[(0,x.jsx)(f,{color:u.secondary,children:"Username: "}),(0,x.jsx)(f,{children:V})]}),(0,x.jsxs)(p,{marginTop:1,children:[(0,x.jsxs)(f,{color:u.secondary,children:[_,": "]}),(0,x.jsx)(Oe,{value:c,onChange:Ae,onSubmit:se,onCancel:j,masked:C==="text-input-masked"})]}),(0,x.jsx)(me,{bindings:[{keys:"\u21B5",label:"confirm"}],escBackLabel:"back"})]})}let Ce=H?.id==="profile"?ie():H?.options??[];return(0,x.jsxs)(p,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[(0,x.jsx)(f,{color:u.orange,bold:!0,children:le}),(0,x.jsx)(p,{marginTop:1,children:(0,x.jsxs)(f,{color:u.secondary,children:[H?.label,":"]})}),(0,x.jsx)(p,{flexDirection:"column",marginTop:1,children:Ce.map((_,R)=>{let g=R===m,P=g?"\u276F ":" ",B=_.value==="__new__"?u.green:g?u.orange:void 0;return(0,x.jsxs)(f,{color:B,children:[P,_.label]},_.value)})}),(0,x.jsx)(me,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}async function Qe(r,t,e,i){let s=r.loadBasicAuth(t,e),l=r.loadCredentials(t,e);if(!s&&!l)return i("info","STARTUP_GATE_NO_CREDS","Profile has no credentials",{profile:t,env:e}),{status:"needs_login",profile:t,env:e};let h=$e(e),w=async()=>r.loadCredentials(t,e)?.access_token??null,T=new Ne(h.controllerBaseUrl,w,s,i);i("info","STARTUP_GATE_VALIDATE","Validating credentials with controller",{profile:t,env:e,method:s?"basic":"oauth"});let m=await T.resolve(!0);if(m)return i("info","STARTUP_GATE_VALID","Credentials validated",{profile:t,env:e,username:m.username,org_id:m.org_id}),{status:"authenticated",result:{profile:t,env:e,credentials:l,basicAuth:s,tmsCreds:m,resolver:T}};if(!s&&l){let S=l.refresh_token,k=r.loadClient(t,e)?.client_id;if(S&&k){i("info","STARTUP_GATE_REFRESH","Attempting token refresh",{profile:t,env:e});try{let M=await new Fe(e).refreshToken(S,k);if(M.access_token){r.saveCredentials(t,e,{...l,...M,expires_at:Date.now()/1e3+(M.expires_in??3600)});let v=await T.resolve(!0);if(v)return i("info","STARTUP_GATE_REFRESH_OK","Token refreshed and validated",{profile:t,env:e,username:v.username}),{status:"authenticated",result:{profile:t,env:e,credentials:{...l,...M},basicAuth:null,tmsCreds:v,resolver:T}}}i("warn","STARTUP_GATE_REFRESH_INVALID","Refreshed token still invalid",{profile:t,env:e})}catch(C){i("warn","STARTUP_GATE_REFRESH_FAILED","Token refresh failed",{profile:t,env:e,error:C instanceof Error?C.message:String(C)})}}else i("info","STARTUP_GATE_NO_REFRESH","No refresh_token or client_id \u2014 login required",{profile:t,env:e})}return i("info","STARTUP_GATE_INVALID","Credentials invalid \u2014 login required",{profile:t,env:e}),{status:"needs_login",profile:t,env:e}}async function cn(r,t,e=new Ke){let i=r.listProfiles();if(t("info","STARTUP_GATE_START","Auth startup gate",{profile_count:i.length}),i.length===0)return t("info","STARTUP_GATE_NONE","No profiles found \u2014 login required"),{status:"needs_login"};if(i.length>1){let h=r.getActiveProfile(),w=r.getDefaultEnv();if(h&&i.some(m=>m.profile===h&&m.env===w)){t("info","STARTUP_GATE_TRY_ACTIVE","Multiple profiles \u2014 trying active first",{activeProfile:h,activeEnv:w});let m=await Qe(r,h,w,t);if(m.status==="authenticated")return m;t("info","STARTUP_GATE_ACTIVE_FAILED","Active profile invalid \u2014 showing picker",{activeProfile:h,activeEnv:w})}return t("info","STARTUP_GATE_MULTI","Multiple profiles \u2014 picker required",{profiles:i.map(T=>`${T.profile}/${T.env}`)}),{status:"needs_pick",profiles:i}}let{profile:s,env:l}=i[0];return r.setActiveProfile(s),r.setDefaultEnv(l),Ue(r,e,s,l),Qe(r,s,l,t)}export{At as a,Ct as b,jt as c,tn as d,Qe as e,cn as f};
|
package/dist/chunk-AECMF3T2.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as s,k as l}from"./chunk-ZUGCHQFC.js";import{readFileSync as g,writeFileSync as o,mkdirSync as i,existsSync as p}from"fs";import{dirname as a}from"path";var n={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:l,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0},c=class{constructor(r=s){this.path=r}exists(){return p(this.path)}load(){try{let r=g(this.path,"utf-8"),e=JSON.parse(r);return{...n,...e,code_export:{...n.code_export,...e.code_export??{}},generate:{...n.generate,...e.generate??{}}}}catch{return{...n,code_export:{...n.code_export},generate:{...n.generate}}}}set(r,e){try{let t=this.load();t[r]=e,i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
|
|
3
|
-
`)}catch(t){let d=t instanceof Error?t.message:String(t);process.stderr.write(`[config] Failed to save config: ${d}
|
|
4
|
-
`)}}save(r){try{let t={...this.load(),...r};i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
|
|
5
|
-
`)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[config] Failed to save config: ${t}
|
|
6
|
-
`)}}writeRaw(r){try{i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(r,null,2)+`
|
|
7
|
-
`)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[config] Failed to save config: ${t}
|
|
8
|
-
`)}}};export{c as a};
|
package/dist/chunk-AFBKGZFG.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as v,b as w,d as C}from"./chunk-OS4VSIHT.js";import{b as k}from"./chunk-TRJUD3XJ.js";import{a as T}from"./chunk-JFAFKHDX.js";import{a as E}from"./chunk-JZ26R6UL.js";import{A as y,B as O}from"./chunk-TH47OOBV.js";import{d,e as g}from"./chunk-WXHQYYD5.js";var D=new Set([d.USECASE,d.SCENARIO,d.AC,d.TEST]);function p(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function b(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function S(e,t,n){if(n===d.USECASE)return t;if(n===d.SCENARIO)return b(e,t,g.BELONGS_TO);if(n===d.AC){let o=b(e,t,g.SCOPED_TO);return o?e.nodeLabel.get(o)===d.USECASE?o:b(e,o,g.BELONGS_TO):null}if(n===d.TEST){let o=b(e,t,g.AUTOMATES);return o?b(e,o,g.BELONGS_TO):null}return null}function A(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function G(e,t){return{ucTip:t,display:A(e,t),seamRef:e.nameOf.get(t)??t}}function L(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!D.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let a=S(e,o,s);return!a||e.nodeLabel.get(a)!==d.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(a)?{ok:!1,message:`use-case ${A(e,a)} was removed \u2014 nothing to evolve`}:{ok:!0,target:G(e,a)}}function z(e,t){return h(e,t)}function h(e,t){let n=[];for(let{cid:s}of e.byLabel(d.SCENARIO)){if(!p(e,s)||!e.edgesFrom(s).some(r=>r.type===g.BELONGS_TO&&e.tipOf(r.dst)===t))continue;let a=e.edgesInto(s).filter(r=>r.type===g.AUTOMATES&&p(e,r.src));if(a.length===0)n.push({scenario:s,test:null});else for(let r of a)n.push({scenario:s,test:r.src})}let o=new Map;for(let{cid:s}of e.byLabel(d.AC)){if(!p(e,s)||S(e,s,d.AC)!==t)continue;let a=e.edgesInto(s).filter(r=>r.type===g.VERIFIES&&p(e,r.src)).map(r=>r.src).sort();o.set(s,a)}return{pairs:n,verifies:o}}function x(e,t){let n=r=>`${r.scenario}\0${r.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),a=[];for(let[r,i]of e.verifies){let u=t.verifies.get(r);u&&(i.length===u.length&&i.every((l,f)=>l===u[f])||a.push({ac:r,before:i,after:u}))}return{superseded:e.pairs.filter(r=>!s.has(n(r))),minted:t.pairs.filter(r=>!o.has(n(r))),retained:t.pairs.filter(r=>o.has(n(r))),moves:a}}function P(e,t,n,o,s){let a=i=>t.nameOf.get(i)??i,r=i=>` - ${a(i.scenario)} \xB7 ${i.test?a(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(r(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(r(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(r(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=l=>l.length>0?l.map(a).join(" + "):"(none)";e.out(` - ${a(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function U(e,t,n,o,s,a){let r=y(e),i=E(r,t.ucTip);if(!i)return a==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(v(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=h(r,t.ucTip),l=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(l);else if(!await o.confirm(`${l} \u2014 proceed?`))return o.out(a==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let f=k(e,r,t.ucTip,n.because),c=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...f!==void 0?{changeDelta:f.change_delta,priorDesign:f.prior_design}:{}});if(c===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:c,outcome:"paused"};if(c!==0)return v(o,`design run for ${t.display} ended with exit code ${c} \u2014 no diff to report`),{code:c,outcome:"failed"};let m=y(e),$=m.tipOf(t.ucTip),R=E(m,$)?.seq;return P(o,m,t.display,{before:i.seq,after:R??"?"},x(u,h(m,$))),{code:0,outcome:"evolved"}}function F(e){let t=new Map,n=0;for(let{cid:s,state:a}of e.staleList()){if(a==="superseded")continue;let r=e.nodeLabel.get(s);if(!r||!D.has(r)||!p(e,s)||!O(e,s))continue;let i=S(e,s,r);!i||e.nodeLabel.get(i)!==d.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,G(e,i)))}return{targets:[...t.values()].sort((s,a)=>s.display<a.display?-1:s.display>a.display?1:0),staleCount:n}}function I(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!D.has(s)||!p(e,n))&&O(e,n)&&S(e,n,s)===t)return!0}return!1}async function N(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return v(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return v(n,"evolve needs a <ref> or --from-stale"),2;let a=w(s,n);if(!a)return 2;let r=o.runDesignForUc??_;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=y(a),u,l=null;if(e){let c=L(i,e);if(!c.ok)return v(n,c.message),2;if(!t.because&&E(i,c.target.ucTip)&&!I(i,c.target.ucTip))return v(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[c.target]}else{let{targets:c,staleCount:m}=F(i);if(c.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;l=`from-stale: ${m} stale node(s) \u2192 ${c.length} use-case(s)`,u=c}if(!t.yes&&!n.isTTY)return v(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(l&&n.out(l),e){let c=await U(a,u[0],t,n,r,"single");return c.outcome==="evolved"&&t.because&&T(a,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),c.code}let f=0;for(let c of u){let{code:m}=await U(a,c,t,n,r,"batch");m!==0&&f===0&&(f=m)}return f}var _=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-KCUSVJXG.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...a)=>!0);try{return await o()}finally{process.stdout.write=s}};async function J(e,t){return N(e,t,C(),{})}export{L as a,z as b,U as c,F as d,N as e,_ as f,J as g};
|
package/dist/chunk-BXYWX4J3.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as K,c as V,d as z,e as ee,f as te}from"./chunk-74HTO7K3.js";import{c as J}from"./chunk-SL6PCVM2.js";import{a as Q}from"./chunk-AECMF3T2.js";import{a as Z}from"./chunk-OR6MCL6Z.js";import{b as H}from"./chunk-FBHRBFHP.js";import{b as W}from"./chunk-HYSFJSIG.js";import{p as E}from"./chunk-QIGPXYMF.js";import{a as O}from"./chunk-2WVKOZ6W.js";import{a as _}from"./chunk-O75ZHGJG.js";import{a as k,b as A,d as Y}from"./chunk-VE3SUJMA.js";import{a as q}from"./chunk-VT54ARGE.js";import{a as G}from"./chunk-HCBYKLMW.js";import{a as c,b as u,i as I,j as X}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as F}from"./chunk-UR6MHSHU.js";var i=F(ue(),1);var r=F(G(),1);function _e({resultRef:h,mode:d="singleshot",loginCompleteRef:f}){let{exit:m}=X(),C=(0,i.useRef)(new q),S=(0,i.useRef)(new Q),v=(0,i.useRef)(new J),t=C.current,l=S.current,$=v.current,ne=K(),[P,g]=(0,i.useState)(d==="login"?"login":"gate"),[L,re]=(0,i.useState)(null),[de,R]=(0,i.useState)(null),[ge,T]=(0,i.useState)(null),[N,oe]=(0,i.useState)(null),[U,B]=(0,i.useState)([]),x=(0,i.useCallback)((e,n,s,o)=>$.log(e,n,s,o),[$]),pe=(0,i.useCallback)((e,n)=>{e?k(t,l,e,n):l.save({project_id:null,project_name:null,folder_id:null,folder_name:null})},[t,l]),y=(0,i.useCallback)(()=>{d==="login"?(f&&(f.current=!0),m()):g("input")},[d,m,f]),D=(0,i.useCallback)((e,n)=>{let s=k(t,l,e,n);if(d==="login"){g("ensure-project");return}Y(s)?y():s.projectId?g("ensure-folder"):g("ensure-project")},[t,l,y,d]);I((e,n)=>{n.ctrl&&e==="c"&&E(0,"Ctrl+C exit")});let M=(0,i.useRef)(!1);i.default.useEffect(()=>{M.current||(M.current=!0,d!=="login"&&te(t,x).then(e=>{re(e),e.status==="authenticated"?D(e.result.profile,e.result.env):e.status==="needs_pick"?g("pick"):(R(e.profile??null),T(e.env??null),g("login"))}).catch(e=>{oe(`Auth check failed: ${e instanceof Error?e.message:String(e)}`)}))},[t,x]);let ie=(0,i.useCallback)(e=>{h.current={objective:e},m()},[h,m]),se=(0,i.useCallback)(async(e,n)=>{t.setActiveProfile(e),t.setDefaultEnv(n),(await ee(t,e,n,x)).status==="authenticated"?D(e,n):(R(e),T(n),g("login"))},[t,x,D]),w=(0,i.useCallback)(()=>{let e=t.getActiveProfile(),n=t.getDefaultEnv();if(!e)return null;let s=_(n),o=t.loadBasicAuth(e,n);return new Z(s.controllerBaseUrl,async()=>t.loadCredentials(e,n)?.access_token??null,o,x)},[t,x]),le=(0,i.useCallback)(async()=>{let e=w();if(!e)return null;let n=e.cached??await e.resolve();if(!n)return null;let s=_(t.getDefaultEnv()),o=new O(s.tmsBaseUrl,n.username,n.access_key);try{let p=(await o.listProjects()).find(b=>b.name==="KaneAI Generated");if(p)return{id:p.project_id,name:p.name};let j=await o.createProject("KaneAI Generated");return{id:j.id,name:j.name}}catch{return null}},[w,t]),ae=(0,i.useCallback)(async e=>{let n=w();if(!n)return null;let s=n.cached??await n.resolve();if(!s)return null;let o=_(t.getDefaultEnv()),a=new O(o.tmsBaseUrl,s.username,s.access_key);try{let j=(await a.listFolders(e)).find(ce=>ce.name==="Untitled");if(j)return{id:j.id,name:j.name};let b=await a.createFolder(e,"Untitled");return{id:b.id,name:b.name}}catch{return null}},[w,t]);if(P==="gate")return(0,r.jsx)(c,{paddingX:1,children:(0,r.jsx)(u,{color:"yellow",children:"Checking authentication..."})});if(N)return(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"red",children:N}),(0,r.jsx)(u,{color:"gray",children:"Press Ctrl+C to exit."})]});if(P==="pick"&&L?.status==="needs_pick")return(0,r.jsx)(fe,{profiles:L.profiles,onSelect:se});if(P==="login")return(0,r.jsx)(z,{devMode:process.env.KANE_DEV_MODE==="1",profiles:t.listProfiles(),onBasicLogin:async(e,n,s,o)=>{let{validateBasicAuth:a}=await import("./validate-basic-ZGWPBYB6.js");await a(n,s,o),t.saveBasicAuth(e,n,{username:s,access_key:o}),t.setActiveProfile(e),t.setDefaultEnv(n)},onOAuthLogin:async(e,n)=>{let{LoginFlow:s}=await import("./login-flow-PYAPYCPY.js");t.setDefaultEnv(n),t.setActiveProfile(e),await new s(e,n,t).login()},onComplete:(e,n)=>{R(e),T(n),t.setActiveProfile(e),t.setDefaultEnv(n),D(e,n)},onCancel:()=>{E(0,"Login cancelled")}});if(P==="ensure-project"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=()=>{if(d==="login"){g("ensure-folder");return}k(t,l,e,n).folderId?y():g("ensure-folder")};return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(H,{resolver:w(),currentProjectId:l.load().project_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{projectId:o,projectName:a}),B(p=>[...p,`\u2713 Project: ${a} (${o})`]),s()},onCancel:async()=>{let o=await le();o&&(A(t,l,e,n,{projectId:o.id,projectName:o.name}),B(a=>[...a,`\u2713 Default project: ${o.name} (${o.id})`]),s())}})]})}if(P==="ensure-folder"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=t.loadProfileConfig(e,n);return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(W,{resolver:w(),projectId:s?.project_id??"",currentFolderId:l.load().folder_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{folderId:o,folderName:a}),B(p=>[...p,`\u2713 Folder: ${a} (${o})`]),y()},onCancel:async()=>{if(!s?.project_id)return;let o=await ae(s.project_id);o&&(A(t,l,e,n,{folderId:o.id,folderName:o.name}),B(a=>[...a,`\u2713 Default folder: ${o.name} (${o.id})`]),y())}})]})}return P==="input"?(0,r.jsxs)(c,{flexDirection:"column",children:[U.length>0&&(0,r.jsx)(c,{flexDirection:"column",paddingX:1,marginBottom:1,children:U.map((e,n)=>(0,r.jsx)(u,{color:"green",children:e},n))}),(0,r.jsx)(V,{onSubmit:ie,onEscape:()=>E(0,"User pressed Escape"),history:ne,placeholder:"Type an objective..."})]}):(0,r.jsx)(r.Fragment,{})}function fe({profiles:h,onSelect:d}){let[f,m]=(0,i.useState)(0),[C,S]=(0,i.useState)(!1);return I((v,t)=>{if(!C){if(t.escape){E(0,"Profile picker cancelled");return}if(t.upArrow&&f>0&&m(l=>l-1),t.downArrow&&f<h.length-1&&m(l=>l+1),t.return){S(!0);let l=h[f];d(l.profile,l.env).catch(()=>S(!1))}}}),(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,r.jsx)(c,{marginTop:1,flexDirection:"column",children:h.map((v,t)=>(0,r.jsxs)(u,{children:[t===f?"\u276F ":" ",(0,r.jsx)(u,{color:t===f?"#ff9500":"white",bold:t===f,children:v.profile}),(0,r.jsxs)(u,{color:"gray",children:[" [",v.env,"]"]})]},`${v.profile}-${v.env}`))}),C&&(0,r.jsx)(c,{marginTop:1,children:(0,r.jsx)(u,{color:"yellow",children:"Validating credentials..."})})]})}export{_e as a};
|