@testmuai/kane-cli 0.7.2 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ChatSurface-E7QKI4LA.js → ChatSurface-U37VZDCW.js} +1 -1
- package/dist/{ChromeProfilePicker-DGDWGCZD.js → ChromeProfilePicker-AUU7JF6F.js} +1 -1
- package/dist/{CliFeedbackPrompt-SYCZXSME.js → CliFeedbackPrompt-4W74Y3UF.js} +1 -1
- package/dist/{CliUploadProgress-VDEAKXJY.js → CliUploadProgress-6HL7WTEX.js} +1 -1
- package/dist/ConfigView-6BSCZP5Y.js +2 -0
- package/dist/EvidenceViewOffer-62XHEEGW.js +2 -0
- package/dist/FolderPicker-S7U2EN2M.js +2 -0
- package/dist/{HelpView-ON6BFGJM.js → HelpView-TU7ED43J.js} +1 -1
- package/dist/{InfoBox-B23NZ6IG.js → InfoBox-JLTMKVDE.js} +1 -1
- package/dist/{LinksBox-TI26VFFH.js → LinksBox-LREUUJDV.js} +1 -1
- package/dist/{ProfilesView-CRO5AH3H.js → ProfilesView-W3GX2N2E.js} +1 -1
- package/dist/{ProjectPicker-3N7LJOXU.js → ProjectPicker-SYQUJK2J.js} +1 -1
- package/dist/{SaveSessionPrompt-UTOEC5AW.js → SaveSessionPrompt-MR5NJMRP.js} +1 -1
- package/dist/SingleShotApp-XOKVOM7C.js +2 -0
- package/dist/{SummaryBox-JK64EKC2.js → SummaryBox-UAYSVFB7.js} +1 -1
- package/dist/TestMdRunView-7UVSDAF4.js +2 -0
- package/dist/{WhoamiView-6QSLPNF6.js → WhoamiView-2YU76ASQ.js} +1 -1
- package/dist/adbkit-apkreader-ORZBGCJQ.js +184 -0
- package/dist/app-client-OEXESV4U.js +2 -0
- package/dist/app-download-AEEFQ63M.js +2 -0
- package/dist/{auth-IKFVW3NX.js → auth-HET3TBRI.js} +1 -1
- package/dist/{bind-KCUSVJXG.js → bind-STKXOUYI.js} +3 -3
- package/dist/bootstrap-44YKVWWE.js +2 -0
- package/dist/bridge-5Z3BIB77.js +2 -0
- package/dist/{changelog-AAH2ZBYO.js → changelog-7OWRHFHZ.js} +1 -1
- package/dist/{chat-committer-UUC6JTRJ.js → chat-committer-ZWWCLJFD.js} +1 -1
- package/dist/{chunk-ZUGCHQFC.js → chunk-27U4PLPX.js} +1 -1
- package/dist/{chunk-ZBOWFJB2.js → chunk-2BGUUWNF.js} +2 -2
- package/dist/chunk-2KDGIZED.js +4 -0
- package/dist/{chunk-SFII7HPP.js → chunk-3LJWYRAA.js} +1 -1
- package/dist/chunk-3PECJD6S.js +11 -0
- package/dist/{chunk-7QJ75SYR.js → chunk-3POR47RC.js} +2 -2
- package/dist/chunk-4JOD47QI.js +2 -0
- package/dist/{chunk-QIGPXYMF.js → chunk-56PAQAX5.js} +6 -6
- package/dist/{chunk-DZPGG4S6.js → chunk-65ZTD5SJ.js} +2 -2
- package/dist/chunk-6IA6QMPH.js +2 -0
- package/dist/{chunk-VT54ARGE.js → chunk-6O3DDOP2.js} +1 -1
- package/dist/chunk-6XX4LEVJ.js +2 -0
- package/dist/{chunk-4NFCAGRK.js → chunk-766WGMBU.js} +1 -1
- package/dist/{chunk-VMM4LC4V.js → chunk-7BZSCUPP.js} +3 -3
- package/dist/{chunk-PLOWZLG5.js → chunk-7JWKHKFU.js} +2 -2
- package/dist/chunk-7Q6M6P4X.js +26 -0
- package/dist/chunk-AW2XUHH4.js +2 -0
- package/dist/{chunk-7OYZR6JA.js → chunk-BRHNRCEZ.js} +1 -1
- package/dist/chunk-BRIEBB2U.js +2 -0
- package/dist/{chunk-APPYQZFK.js → chunk-C7HSWZP6.js} +1 -1
- package/dist/chunk-CTW2VQKS.js +6 -0
- package/dist/{chunk-FDIPQRX4.js → chunk-DCY6R5DP.js} +1 -1
- package/dist/{chunk-KWIK22R6.js → chunk-DO5HAO3H.js} +1 -1
- package/dist/chunk-DPUV6OSP.js +2 -0
- package/dist/{chunk-B5RS2XZU.js → chunk-DZGCXKKI.js} +3 -3
- package/dist/{chunk-JKM2PUHI.js → chunk-EDSZJZFG.js} +1 -1
- package/dist/{chunk-OIYGGEUL.js → chunk-ELM6MXGJ.js} +1 -1
- package/dist/{chunk-VHZ4S57N.js → chunk-EWCAFKLX.js} +1 -1
- package/dist/chunk-EYOCNMUM.js +2 -0
- package/dist/{chunk-GYNTNKNB.js → chunk-FEJXWJ3L.js} +1 -1
- package/dist/{chunk-UC7MNPIN.js → chunk-FMRSMN34.js} +1 -1
- package/dist/chunk-FNH55WSR.js +19 -0
- package/dist/chunk-FQLIW3LM.js +2 -0
- package/dist/{chunk-O75ZHGJG.js → chunk-G7VQCS4J.js} +1 -1
- package/dist/{chunk-2WFZIQ62.js → chunk-GCBKDX2J.js} +1 -1
- package/dist/chunk-GKYPNSQP.js +26 -0
- package/dist/chunk-GPG3FIN3.js +21 -0
- package/dist/chunk-GZPK6FRP.js +7 -0
- package/dist/{chunk-XUS4WKDS.js → chunk-HCKH44I2.js} +1 -1
- package/dist/chunk-HEAIJCGZ.js +2 -0
- package/dist/{chunk-SL6PCVM2.js → chunk-HMYMSRA4.js} +1 -1
- package/dist/chunk-IOFZSQAA.js +2 -0
- package/dist/{chunk-YTHQNN2L.js → chunk-IP2O264K.js} +1 -1
- package/dist/{chunk-AXTGYOMK.js → chunk-JJHG3BWO.js} +1 -1
- package/dist/chunk-KFSUPQAG.js +66 -0
- package/dist/chunk-KRKGZ2ZW.js +47 -0
- package/dist/{chunk-AJ56AMT6.js → chunk-KU6IXFGZ.js} +1 -1
- package/dist/chunk-L7MXYCD7.js +2 -0
- package/dist/{chunk-5ZQZOVWY.js → chunk-MA34UWKX.js} +3 -3
- package/dist/chunk-MBF3FP5P.js +5 -0
- package/dist/chunk-MSGW4JDG.js +2 -0
- package/dist/{chunk-C3T7TKAC.js → chunk-MXHHMIO2.js} +2 -2
- package/dist/{chunk-RDNFVZEB.js → chunk-NX7TM662.js} +1 -1
- package/dist/chunk-OMQCD3KR.js +2 -0
- package/dist/{chunk-OR6MCL6Z.js → chunk-OTTGS2TE.js} +1 -1
- package/dist/chunk-QGKPLOUI.js +2 -0
- package/dist/{chunk-FBHRBFHP.js → chunk-QRZRSAZH.js} +1 -1
- package/dist/{chunk-VLWMMOMF.js → chunk-QSDH5P7C.js} +1 -1
- package/dist/{chunk-VOOPWFHW.js → chunk-QW6EZC53.js} +1 -1
- package/dist/{chunk-ZRASQ63J.js → chunk-RC52N7PC.js} +1 -1
- package/dist/{chunk-M6FKJKC6.js → chunk-RFR4ZKIC.js} +3 -3
- package/dist/{chunk-AFBKGZFG.js → chunk-RLRNLIRS.js} +1 -1
- package/dist/{chunk-5FJJJNJK.js → chunk-SDPRO2LE.js} +1 -1
- package/dist/chunk-T5Y6MOLM.js +4 -0
- package/dist/{chunk-VRLUNZAK.js → chunk-TFPPEOAK.js} +1 -1
- package/dist/{chunk-5SXMV66P.js → chunk-TKGUT425.js} +1 -1
- package/dist/chunk-TYLYFERW.js +10 -0
- package/dist/chunk-TZXXJWHA.js +2 -0
- package/dist/{chunk-KQZA2QSC.js → chunk-UDIQOJEL.js} +1 -1
- package/dist/chunk-UV462FZR.js +2 -0
- package/dist/{chunk-HYSFJSIG.js → chunk-UXDL4XDL.js} +1 -1
- package/dist/{chunk-53IBTIL3.js → chunk-V2R3LCA3.js} +1 -1
- package/dist/{chunk-VFII6C46.js → chunk-W2JFDDIB.js} +1 -1
- package/dist/{chunk-4LTXE3IX.js → chunk-XO5ZH3ZR.js} +1 -1
- package/dist/{chunk-EOLFTMWF.js → chunk-YFYCCTSL.js} +1 -1
- package/dist/{chunk-JPWLGHPM.js → chunk-YJELGSKJ.js} +1 -1
- package/dist/chunk-YRFMPIU2.js +4 -0
- package/dist/{chunk-F7ISS545.js → chunk-ZGBSGZZM.js} +1 -1
- package/dist/{chunk-VWKVUOXU.js → chunk-ZIUAOEUC.js} +1 -1
- package/dist/chunk-ZVHCQMJ6.js +13 -0
- package/dist/{config-CWZV6XPT.js → config-RS47F5SC.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-OH6AVI6N.js} +1 -1
- package/dist/deps-resolve-XC5S53DG.js +2 -0
- package/dist/{dispatch-WVNXB7AD.js → dispatch-SE5GY3Z2.js} +1 -1
- package/dist/doctor-FSECFZUU.js +2 -0
- package/dist/docx-convert-JMUMT5C4.js +2 -0
- package/dist/evidence-OYPHZUKI.js +2 -0
- package/dist/evolve-cmd-BCPNXAMV.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-5OWELRME.js → extract-bind-LLEASZAK.js} +3 -3
- package/dist/{extract-cmd-ZRYMJ6IC.js → extract-cmd-UZMEZMGP.js} +2 -2
- package/dist/{gaps-cmd-XBRXKXDL.js → gaps-cmd-IVXFPFAQ.js} +1 -1
- package/dist/{generate-headless-D6BISWDC.js → generate-headless-D3SVQ2AI.js} +3 -3
- package/dist/host-7GZPBA74.js +2 -0
- package/dist/index.js +85 -69
- package/dist/ingest-cmd-EAE7N5RC.js +2 -0
- package/dist/{interactive-bind-XSRD36MO.js → interactive-bind-ORMN2REX.js} +3 -3
- package/dist/{lifecycle-cmd-EQSFAZG6.js → lifecycle-cmd-O2324GN6.js} +1 -1
- package/dist/{list-cmd-IRJSUCM5.js → list-cmd-N4KMA34H.js} +1 -1
- package/dist/list-commands-MRXL5HGS.js +2 -0
- package/dist/login-flow-QJQM3RHT.js +2 -0
- package/dist/{maintenance-cmd-MVFA6H74.js → maintenance-cmd-6XSVO6FO.js} +1 -1
- package/dist/mobile-prompts-TOX35ER6.js +2 -0
- package/dist/persist-recorded-session-TLDQ5HKP.js +3 -0
- package/dist/{phase-seed-DIRETNU6.js → phase-seed-VFHIH6FL.js} +1 -1
- package/dist/pipeline-UOM4LNAI.js +2 -0
- package/dist/prepare-target-QYWIJIVQ.js +2 -0
- package/dist/reconcile-cmd-3H34KVVD.js +2 -0
- package/dist/{reconcile-deps-HTT6IPHT.js → reconcile-deps-XIH75ZLY.js} +2 -2
- package/dist/reconcile-engine-UKWPG2LV.js +2 -0
- package/dist/{recording-banner-76GCIPUN.js → recording-banner-4M7XHVGI.js} +1 -1
- package/dist/registry-PYOTKZYZ.js +2 -0
- package/dist/{require-project-folder-ACRDP5ZB.js → require-project-folder-4UPQNEBJ.js} +1 -1
- package/dist/resolve-run-intent-X72V3KJA.js +7 -0
- package/dist/{resolver-SRPCFW7P.js → resolver-UBOZLFFE.js} +1 -1
- package/dist/{review-cmd-L3V5UP5T.js → review-cmd-DQRKQUMG.js} +1 -1
- package/dist/run-2COODVX2.js +2 -0
- package/dist/run-URPGHOQM.js +2 -0
- package/dist/{run-test-md-KEHSRMCM.js → run-test-md-76ZPKXO6.js} +3 -3
- 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-CIS6GAYF.js} +1 -1
- package/dist/spawner-J67QR4QP.js +2 -0
- package/dist/{structured-answers-A43Q25CZ.js → structured-answers-5EY2AZN7.js} +1 -1
- package/dist/tcg-generate-BDTRKY2A.js +2 -0
- package/dist/testmd-actions-77ELR5UU.js +2 -0
- package/dist/token-refresh-4BPAPXKK.js +2 -0
- package/dist/types-6E2HTDKJ.js +2 -0
- package/dist/{validate-basic-ZGWPBYB6.js → validate-basic-2GVSQ2R5.js} +1 -1
- package/dist/{verdicts-SCETLY5J.js → verdicts-TRSTJLCL.js} +1 -1
- package/dist/{version-check-CJWKDAXV.js → version-check-O6PYTI4T.js} +1 -1
- package/dist/{view-cmd-SOVM64L2.js → view-cmd-KPJTP4DI.js} +1 -1
- package/dist/{walk-session-YUYRULPY.js → walk-session-CHJXHZMO.js} +1 -1
- package/dist/with-telemetry-CQCWLVOC.js +2 -0
- package/package.json +12 -6
- 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/bootstrap-NFYYRGGR.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-5WXGMXGA.js +0 -26
- package/dist/chunk-74HTO7K3.js +0 -11
- package/dist/chunk-AECMF3T2.js +0 -8
- package/dist/chunk-BXYWX4J3.js +0 -2
- package/dist/chunk-DBKNJRJG.js +0 -2
- package/dist/chunk-H32GM5G4.js +0 -2
- package/dist/chunk-J5FBU425.js +0 -62
- 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-WAOCHXJ5.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/ingest-cmd-YTGOICTC.js +0 -2
- 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-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/with-telemetry-E7QWPGL6.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as ke}from"./chunk-
|
|
2
|
+
import{a as ke}from"./chunk-65ZTD5SJ.js";import{b as he,c as _e,d as Z,e as ee}from"./chunk-BRHNRCEZ.js";import{c as ye,e as we}from"./chunk-VGFTNLQQ.js";import{d as P}from"./chunk-JFAFKHDX.js";import{a as L}from"./chunk-DNNZ353O.js";import{a as pe}from"./chunk-SDPRO2LE.js";import{A as I,z as me}from"./chunk-TH47OOBV.js";import{b as ge}from"./chunk-VAYBKR76.js";import{a as ue}from"./chunk-CUM23TLF.js";import{d as de,i as fe}from"./chunk-DUAXZYAD.js";import{d as ae,f as le}from"./chunk-WXHQYYD5.js";function bt(t){let e=process.env.HOME??"";return e&&t.startsWith(e)?`~${t.slice(e.length)}`:t}import{randomBytes as mt}from"crypto";function te(t,e){let n=Math.min(t.length,e.length),o=0,r=0,c=0;for(let s=0;s<n;s++)o+=t[s]*e[s],r+=t[s]*t[s],c+=e[s]*e[s];return r===0||c===0?0:o/(Math.sqrt(r)*Math.sqrt(c))}function ne(t,e,n){return n*t+(1-n)*e}var re=.7;var ze=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar","search_similar_batch","history"],Qe=["source_read","source_grep","source_list"],Ke=[...ze,...Qe],Se=50,Ee=200,se=10,Re=50,be=20,We=200,Xe=50;function U(t,e,n){let o=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(o,n))}function M(t,e){let n=t[e];if(typeof n!="string"||n.length===0)throw new b(`param "${e}" must be a non-empty string`);return n}function D(t,e){let n=t[e];if(n==null)return null;if(typeof n!="string")throw new b(`param "${e}" must be a string when present`);return n}var b=class extends Error{},xe=24,qe=10,Ye=10;function Je(t){let e=t.cursor;if(e==null)return 0;if(typeof e=="string"&&/^\d+$/.test(e))return Number.parseInt(e,10);throw new b(`BAD_CURSOR: cursor ${JSON.stringify(e)} is not a cursor this store minted`)}function Ae(t,e){let n=e.fields;if(!Array.isArray(n)||n.length===0)return t;let o=new Set(n.filter(r=>typeof r=="string"));return t.map(r=>Object.fromEntries(Object.entries(r).filter(([c])=>o.has(c))))}function oe(t,e,n=Se,o=Ee){let r=Je(e),c=U(e.limit,n,o),s=t.slice(r,r+c),d=r+s.length<t.length;return{rows:Ae(s,e),truncated:d,next_cursor:d?String(r+s.length):null}}var Ze=t=>t.cursor!=null||t.fields!=null;function z(t,e,n=Se){let o=oe(t,e,n);return Ze(e)||o.truncated?{rows:o.rows,truncated:o.truncated,next_cursor:o.next_cursor}:o.rows}function ie(t,e){let n=t.getNode(e);return n?{cid:e,label:n.label,content:n.content,trust:t.trust.get(e)??null,freshness:t.stale(e)}:null}function ve(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function Q(t,...e){let n=ve(t);if(n.size===0)return 0;let o=t.trim().toLowerCase(),r=0;for(let c of e){let s=ve(c);if(s.size===0)continue;let d=0;for(let u of n)s.has(u)&&d++;let m=n.size+s.size-d,f=m===0?0:d/m;o&&c.toLowerCase().includes(o)&&(f=Math.max(f,.9)),r=Math.max(r,f)}return r}function et(t,e){let n=M(e,"cid"),o=D(e,"type"),r=D(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new b('param "direction" must be out|in|both');let c=[];(r==="out"||r==="both")&&c.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&c.push(...t.edgesInto(n));let s=c.filter(d=>o==null||d.type===o);return z(s,e)}function tt(t,e){let n=M(e,"source_id"),o=t.heads.get(n)??null,r=[];for(let c of t.nodeLabel.keys()){let s=t.derivesInto(c).filter(m=>m.props.source_id===n).map(m=>({source_cid:m.props.source_cid,anchor:m.props.anchor??null}));if(s.length===0)continue;let d=ie(t,c);d&&r.push({...d,pins:s,pinned_to_head:o!=null&&s.some(m=>m.source_cid===o)})}return z(r,e,Ee)}function nt(t,e){let n=M(e,"label"),o=D(e,"trust"),r=D(e,"freshness"),c=[];for(let{cid:s}of t.byLabel(n)){let d=ie(t,s);d&&(o!=null&&d.trust!==o||r!=null&&d.freshness!==r||c.push(d))}return z(c,e)}function rt(t,e={}){let n=D(e,"label"),o=t.staleList().map(({cid:r,state:c})=>{let s=t.getNode(r);return{cid:r,state:c,label:s?.label??null,title:s?.content.title??null}}).filter(r=>n==null||r.label===n);return z(o,e)}function st(t,e,n){let o=e.extracted,r=D(e,"kind"),c=[];for(let f of[...t.heads.keys()].sort()){let u=t.heads.get(f);if(typeof u!="string")continue;let h=t.mediaOf(u).format;if(r!=null&&h!==r)continue;let _=t.extractedSourceCids.has(u);if(typeof o=="boolean"&&_!==o)continue;let E=0;if(h!=="image"){let y=L(n,t,u);y&&(E=y.toString("utf8").replace(/\n$/,"").split(`
|
|
3
3
|
`).length)}let l=t.extractionCompleteness.get(f);c.push({source_id:f,kind:h,lines:E,head_cid:u,extracted:_,last_extract_at:l?.at??null,extractor_version:l?.extractor_version??null})}let{rows:s,truncated:d,next_cursor:m}=oe(c,e);return{sources:s,truncated:d,next_cursor:m}}function ot(t,e,n){let o=M(e,"ref"),r=t.resolve(o);if(!r)throw new b(`UNKNOWN_REF: ${o} names nothing in the graph`);let c=r.tip,s=new Map;for(let[p,k]of t.superseded)typeof k=="string"&&k!==p&&s.set(k,[...s.get(k)??[],p]);let d=[],m=[c],f=new Set;for(;m.length>0;){let p=m.pop();f.has(p)||(f.add(p),d.push(p),m.push(...s.get(p)??[]))}let{records:u}=de(n),g=new Map,h=new Map;for(let p of u){for(let k of p.nodes)g.has(k.cid)||g.set(k.cid,p.ts);for(let k of p.supersessions)k.kind==="node"&&h.set(k.old,{by_cid:k.new,reason:k.reason})}let _=d.map(p=>({cid:p,minted_at:g.get(p)??null,superseded_by:h.get(p)?.by_cid??null,reason:h.get(p)?.reason??null,change_note:null})),{rows:E,truncated:l,next_cursor:y}=oe(_,e,Ye);return{root_logical_id:t.displayNameOf(c),live_tip:t.superseded.has(c)?null:c,truncated:l,next_cursor:y,chain:E}}function $e(t){let e=t.queries;if(!Array.isArray(e)||e.length<1||e.length>xe)throw new b(`param "queries" must be 1..${xe} entries`);return e.map((n,o)=>{if(typeof n!="object"||n===null)throw new b(`queries[${o}] must be an object`);let r=n;if(typeof r.qid!="string"||r.qid.length===0)throw new b(`queries[${o}].qid must be a non-empty string`);if(typeof r.text!="string"||r.text.length===0)throw new b(`queries[${o}].text must be a non-empty string`);return{qid:r.qid,text:r.text,topK:U(r.top_k,se,qe)}})}function De(t){let e=[];for(let{cid:n,content:o}of t.byLabel("usecase"))t.superseded.has(n)||e.push({cid:n,title:String(o.title??""),summary:String(o.summary??""),description:String(o.description??"")});return e}function Me(t,e,n){let o=De(t);return e.map(r=>{let c=[];for(let s of o){let d=n(r,s);d<=0||c.push({cid:s.cid,logical_id:t.displayNameOf(s.cid),title:s.title,score:Math.round(d*1e3)/1e3,trust:t.trust.get(s.cid)??null,superseded:!1})}return c.sort((s,d)=>d.score-s.score||s.cid.localeCompare(d.cid)),{qid:r.qid,truncated:c.length>r.topK,matches:c.slice(0,r.topK)}})}function Ce(t,e){let n=$e(e);return{results:Me(t,n,(o,r)=>Q(o.text,r.title,r.summary,r.description)),scorer:"lexical_fallback"}}function it(t,e){let n=M(e,"text"),o=D(e,"label")??"usecase",r=U(e.k,se,Re),c=[];for(let{cid:s,content:d}of t.byLabel(o)){let m=String(d.title??""),f=String(d.summary??""),u=Q(n,m,f);u<=0||c.push({cid:s,title:m,summary:f,score:Math.round(u*1e3)/1e3,trust:t.trust.get(s)??null,freshness:t.stale(s)})}return c.sort((s,d)=>d.score-s.score||s.cid.localeCompare(d.cid)),c.slice(0,r)}function Te(t,e,n){let o=t.heads.get(n);if(typeof o!="string"){let c=[...t.heads.keys()].sort().join(", ");throw new b(`unknown source_id "${n}" \u2014 known: ${c||"(none)"}`)}if(t.mediaOf(o).format==="image")throw new b(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=L(e,t,o);if(r==null)throw new b(`source "${n}" blob is missing from the store`);return{head:o,lines:r.toString("utf8").replace(/\n$/,"").split(`
|
|
4
4
|
`)}}function ct(t,e,n){return t.slice(e-1,n).map((o,r)=>`${String(e+r).padStart(4,"0")}| ${o}`).join(`
|
|
5
5
|
`)}function at(t,e,n){let o=M(e,"source_id"),r=D(e,"anchor"),c=e.line_range;if(r!=null&&c!=null)throw new b("give anchor OR line_range, not both");let{head:s,lines:d}=Te(t,n,o),m=d.length,f,u;if(r!=null){let g=/^L(\d+)-L(\d+)$/.exec(r);if(!g)throw new b(`anchor "${r}" is not L<a>-L<b>`);let h=Number(g[1]),_=Number(g[2]);if(h<1||_<h||_>m)throw new b(`anchor "${r}" does not resolve (source has ${m} lines)`);f=Math.max(1,h-be),u=Math.min(m,_+be)}else if(c!=null){if(!Array.isArray(c)||c.length!==2||!c.every(_=>Number.isInteger(_)))throw new b('param "line_range" must be [from_line, to_line]');let[g,h]=c;if(g<1||h<g)throw new b('param "line_range" must be 1-based with from \u2264 to');if(g>m)throw new b(`line_range starts past the end (source has ${m} lines)`);f=g,u=Math.min(h,m)}else f=1,u=m;return u=Math.min(u,f+We-1),{window:ct(d,f,u),from_line:f,to_line:u,source_cid:s,total_lines:m}}function lt(t,e,n){let o=M(e,"pattern"),r=D(e,"source_id"),c;try{c=new RegExp(o,"u")}catch(f){throw new b(`invalid pattern: ${f instanceof Error?f.message:String(f)}`)}let s=r!=null?[r]:[...t.heads.keys()].sort(),d=[],m=!1;e:for(let f of s){if(r==null){let g=t.heads.get(f);if(typeof g!="string"||t.mediaOf(g).format==="image")continue}let{lines:u}=Te(t,n,f);for(let g=0;g<u.length;g++)if(c.test(u[g])){if(d.length>=Xe){m=!0;break e}d.push({source_id:f,line:g+1,text:u[g]})}}return{matches:d,truncated:m}}function ut(t,e,n,o){try{switch(e){case"get_node":{let r=ie(t,M(n,"cid"));return r==null?{ok:!0,result:null}:{ok:!0,result:Ae([r],n)[0]}}case"get_edges":return{ok:!0,result:et(t,n)};case"find_by_provenance":return{ok:!0,result:tt(t,n)};case"match_by_type":return{ok:!0,result:nt(t,n)};case"stale_nodes":return{ok:!0,result:rt(t,n)};case"search_similar":return{ok:!0,result:it(t,n)};case"search_similar_batch":return{ok:!0,result:Ce(t,n)};case"history":{if(o==null)throw new b("history unavailable (no context store)");return{ok:!0,result:ot(t,n,o)}}case"source_list":{if(o==null)throw new b("source roster unavailable (no context store)");return{ok:!0,result:st(t,n,o)}}case"source_read":case"source_grep":{if(o==null)throw new b("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?at:lt)(t,n,o)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${Ke.join(", ")}`}}}catch(r){return r instanceof b?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}}var H="assurance.sim";function dt(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as R}from"./chunk-TFPPEOAK.js";import{y as i}from"./chunk-27U4PLPX.js";import{a as X}from"./chunk-HCBYKLMW.js";import{a,b as l,i as p}from"./chunk-C44QQJR4.js";import{a as G}from"./chunk-6YGTRKDT.js";import{e as P}from"./chunk-UR6MHSHU.js";var x=P(G(),1);var e=P(X(),1),f=5;function K(t,I){if(!I)return t;let c=I.toLowerCase();return t.filter(B=>B.label.toLowerCase().includes(c))}function J(t){let{title:I,items:c,loading:B=!1,loadingText:Y,error:L=null,itemNoun:v="items",onSelect:F,onCancel:E,defaultActiveId:w,onTab:y,extraHint:H}=t,[g,d]=(0,x.useState)(0),[S,u]=(0,x.useState)(0),[s,A]=(0,x.useState)(""),[C,h]=(0,x.useState)(null);(0,x.useEffect)(()=>{if(c.length===0)return;if(t.preserveSelectionById&&C!==null){let o=c.findIndex(n=>n.id===C);if(o>=0){u(Math.floor(o/f)),d(o%f);return}}let r=w?c.findIndex(o=>o.id===w):c.findIndex(o=>o.isActive);r>=0?(u(Math.floor(r/f)),d(r%f),t.preserveSelectionById&&h(c[r].id)):t.preserveSelectionById&&(u(0),d(0),h(c[0]?.id??null))},[c,w,t.preserveSelectionById,C]),(0,x.useEffect)(()=>{if(!t.onSearch)return;let r=setTimeout(()=>t.onSearch(s),t.searchDebounceMs??250);return()=>clearTimeout(r)},[s,t.onSearch,t.searchDebounceMs]);let b=t.onSearch?c:K(c,s),D=S*f,N=Math.min(D+f,b.length),M=Math.ceil(b.length/f),O=N-D,T=b.slice(D,N);return p((r,o)=>{if(L){o.escape&&E();return}if(o.escape){s?(A(""),d(0),u(0)):E();return}if(o.tab&&y){y();return}if(o.upArrow){if(g>0){let n=g-1;d(n),t.preserveSelectionById&&h(T[n]?.id??null)}else if(S>0){let n=S-1,m=f-1;u(n),d(m),t.preserveSelectionById&&h(b[n*f+m]?.id??null)}return}if(o.downArrow){if(g<O-1){let n=g+1;d(n),t.preserveSelectionById&&h(T[n]?.id??null)}else if(S<M-1){let n=S+1,m=0;u(n),d(m),t.preserveSelectionById&&h(b[n*f+m]?.id??null)}return}if(o.return&&T[g]){if(T[g].disabled)return;F(T[g]);return}if(o.backspace||o.delete){A(n=>n.slice(0,-1)),d(0),u(0);return}r&&!o.ctrl&&!o.meta&&(A(n=>n+r),d(0),u(0))},{isActive:!B}),B?(0,e.jsxs)(a,{flexDirection:"column",borderStyle:"round",borderColor:i.orange,paddingX:2,paddingY:1,children:[(0,e.jsx)(l,{color:i.orange,bold:!0,children:I}),(0,e.jsx)(a,{marginTop:1,children:(0,e.jsx)(l,{color:i.secondary,children:Y??`Loading ${v}\u2026`})})]}):L?(0,e.jsxs)(a,{flexDirection:"column",borderStyle:"round",borderColor:i.red,paddingX:2,paddingY:1,children:[(0,e.jsx)(l,{color:i.red,bold:!0,children:I}),(0,e.jsx)(a,{marginTop:1,children:(0,e.jsx)(l,{color:i.red,children:L})}),(0,e.jsx)(R,{bindings:[]})]}):(0,e.jsxs)(a,{flexDirection:"column",borderStyle:"round",borderColor:i.orange,paddingX:2,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(l,{color:i.orange,bold:!0,children:I}),(0,e.jsxs)(l,{color:i.dim,children:[" (",b.length,!t.onSearch&&s?`/${c.length}`:""," ",v,t.loadingMore?" \xB7 loading more":"",")"]})]}),(0,e.jsxs)(a,{marginTop:1,children:[(0,e.jsx)(l,{color:i.secondary,children:s?"filter: ":""}),s?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(l,{children:s}),(0,e.jsx)(l,{inverse:!0,children:" "})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)(l,{color:i.dim,children:["Search ",v,"\u2026"]}),(0,e.jsx)(l,{inverse:!0,children:" "})]})]}),(0,e.jsx)(a,{flexDirection:"column",marginTop:1,children:t.searching?(0,e.jsxs)(l,{color:i.secondary,children:["Searching ",v,"\u2026"]}):b.length===0?(0,e.jsxs)(l,{color:i.dim,children:["No ",v,' match "',s,'"']}):T.map((r,o)=>{let n=o===g,m=n?"\u276F ":" ",$=r.disabled?i.muted:r.isActive?i.green:n?i.orange:void 0;return(0,e.jsxs)(a,{flexDirection:"column",children:[(0,e.jsxs)(l,{color:$,children:[m,r.label,r.isActive&&!r.disabled?" \u25CF selected":""]}),n&&r.disabled&&r.disabledHint&&(0,e.jsxs)(l,{color:i.red,children:[" ",r.disabledHint]})]},r.id)})}),!t.searching&&M>1&&(0,e.jsx)(a,{marginTop:1,children:(0,e.jsxs)(l,{color:i.dim,children:["Page ",S+1,"/",M]})}),t.footer&&(0,e.jsx)(a,{marginTop:1,flexDirection:"column",children:t.footer}),(0,e.jsx)(R,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"type",label:"to search"},{keys:"\u21B5",label:"select"},...y&&H?[{keys:"tab",label:H}]:[]],escBackLabel:s?"clear":"back to chat"})]})}export{J as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
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-
|
|
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-
|
|
2
|
+
import{j as we,k as ie,l as oe,m as ye,n as ke,o as se}from"./chunk-3POR47RC.js";import{a as ne,c as te,d as ve,f as re}from"./chunk-RLRNLIRS.js";import{a as E,b as ge,d as he}from"./chunk-OS4VSIHT.js";import{a as H}from"./chunk-CLGC7VEO.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{b as z,c as Z,d as J}from"./chunk-7BZSCUPP.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-CHJXHZMO.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-U37VZDCW.js"),import("./chat-controller-T2FAI55V.js"),import("./reconcile-deps-XIH75ZLY.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-44YKVWWE.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-XIH75ZLY.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-LLEASZAK.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};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as V,b as $,c as ce,d as R}from"./chunk-2YQ6TW77.js";import{b as z}from"./chunk-CJJXT5DO.js";import{a as B}from"./chunk-2WVKOZ6W.js";import{a as M}from"./chunk-DPUV6OSP.js";import{a as F}from"./chunk-NLCCBXXV.js";import{a as x}from"./chunk-RZ4F3BHX.js";import{e as le}from"./chunk-UR6MHSHU.js";import{readFileSync as oe,existsSync as j,readdirSync as Se,mkdirSync as U,writeFileSync as k}from"fs";import{readFile as ae,unlink as Te}from"fs/promises";import{join as E}from"path";import{existsSync as ye,mkdirSync as Ae,readdirSync as ee,writeFileSync as Re}from"fs";import{join as L}from"path";import{randomUUID as P}from"crypto";var ue="/home/kaneai/Downloads";function w(t){return`${ue}/${t}`}function K(t){return"FILE__"+t.replace(/[^A-Za-z0-9]/g,"_")}function C(t){let e=t?.media;return!e||!e.name||!e.media_url?null:{media_id:e.media_id??"",name:e.name,media_url:e.media_url,type:e.type??"doc"}}function H(t){return t?t.includes(`
|
|
3
|
+
`)?t.split(`
|
|
4
|
+
`).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function T(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(s,i)=>{let n=e[i];return n?n.value:s}).replace(/\$\{(.+?)\}/g,(s,i)=>{let n=e[i];return n?n.value:s})}var de={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",clear:"CLEAR",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD"},X={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},_e=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function W(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return X[i]}let s=de[t];return s||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),s??t.toUpperCase()}function Y(t,e){if(!t||!e)return"";try{let s=new Date(t);return isNaN(s.getTime())?"":new Date(s.getTime()+e).toISOString()}catch{return""}}function J(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function pe(t){let e=t.output_variable??"";if(!e)return"[]";let i={...J(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||P().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function ge(t,e,s){let i=t.action_params??{},n=_e.has(e)?"Vision Agent":"Operation Agent",r={operation_type:e};if(e==="OPEN"&&(r.url=i.url??""),e==="SET_VARIABLE"&&(r.variable_name=t.output_variable??i.key??"",r.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let m=C(i);m&&(r.value=w(m.name))}let o={},l={},a=t.action_instruction??"",c=i.text??"",u=i.url??"",p=[["intent",a],["value",c],["url",u]];for(let[m,h]of Object.entries(s)){let I=String(h);if(m.startsWith("secrets."))for(let[b,v]of p)v.includes(I)&&(l[b]=m);for(let[b,v]of p)v.includes(I)&&!(b in o)&&(o[b]=v)}let d=t.action_type,_={operation:t.action_instruction??"",agent:n,operation_dict:r,reasoning:d==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:o,secrets:l,params:{}};d==="analyze"&&typeof i.code=="string"&&i.code&&(_.code=i.code),d==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(_.code_js=i.code_js),d==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(_.condition_expression=i.condition_expression),i.uses_websocket===!0&&(_.uses_websocket=!0),i.uses_sse===!0&&(_.uses_sse=!0),d==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(_.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(_.locators=i.locators),typeof i.operator=="string"&&(_.operator=i.operator),Array.isArray(i.transforms)&&(_.transforms=i.transforms),typeof i.query=="string"&&(_.query=i.query),typeof i.expected_value=="string"&&(_.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(_.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(_.condition=i.condition));let f={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[d];return f&&i[f]!==void 0&&(_[f]=i[f]),d==="set_clipboard"&&typeof i.html=="string"&&i.html&&(_.html=i.html),_}function fe(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let s=e.sub_results??[];return s.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?s.some(n=>n.passed===!0):s.every(n=>n.passed===!0)}function Z(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function me(t){let e=t.assertion_tree??{},s=e.sub_results??[],i=Z(s);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:s,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function he(t){let s=(t.action_params??{}).assertion_tree??{},i=s.sub_results??[],n=Z(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:n,composite_operator:s.composite_operator??"and",verification:"",claim:s.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function Ee(t,e,s,i){let n=t.visual_data;if(!n||n.x==null||n.y==null)return null;let r=e?`${e}/test_screenshots`:"";return{x:n.x,y:n.y,confidence:0,bbox:n.bbox??null,bbox_source:n.bbox?"accessibility_tree":"fallback",viewport_width:n.viewport_width??1280,viewport_height:n.viewport_height??800,scale_factor:null,raw_image_url:r?`${r}/untagged_screenshot/${s}.${i?.get(s)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function be(t){if(!t)return"";let e=t;return typeof t=="object"&&!Array.isArray(t)&&Array.isArray(t.frameInfo)&&(e=t.frameInfo),!Array.isArray(e)||e.length===0?"":JSON.stringify(e)}function Ie(t){return/^(android|ios)_native$/i.test(t.platform??"")}function q(t,e={},s="",i){let n=t.action_type,r=W(n,t),o=t.action_params??{},l=t.coordinates??null,a=t.selectors??null,c=!!(a&&a.length>0),u=Ie(t),p=t.timestamp??"",d=t.duration_ms??0,_=t.variables_used??{},g=t.action_id??P(),f=P(),m=Y(p,d),h="",I="";if(n==="navigate")I=o.url??"",h=I;else if(n==="type"||n==="fill")h=o.text??"";else if(n==="press_key")h=o.key??"";else if(n==="wait")h=String(o.ms??o.timeout_ms??"");else if(n==="evaluate_js")h=o.script??"";else if(n==="upload_files"){let A=C(o);A&&(h=w(A.name))}else n==="analyze"&&r==="SET_VARIABLE"&&(h=t.output_value??"");let b="";n==="go_back"?b="back":n==="go_forward"&&(b="forward");let v=T(h,e),O=T(I,e),y=T(t.action_instruction??"",e),S=ge(t,r,_);return{operation_id:g,instruction_id:f,instruction:y,intent:y,operation_start:p,operation_end:m,status:t.status??"",command:r,name:"",target:"",value:v,message:"",operation_dict:"",frame:be(t.frame_info),error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(S),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:s?`${s}/test_screenshots/untagged_screenshot/${g}.${i?.get(g)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:O,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:r==="ASSERTION"?fe(o):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(o.tab_index??""),tab_identifier:String(o.tab_identifier??""),scroll_value:o.amount??1,scroll_direction:o.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:n==="evaluate_js"?o.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:u,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:l!==null&&!c,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:c?null:l?.x??null,y_coord:c?null:l?.y??null,target_x_coord:o.target_x??null,target_y_coord:o.target_y??null,source_description:o.source_description??null,target_description:o.target_description??null,use_coordinates:l!==null&&!c,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:c?a.map(A=>({...A,type:u?A.strategy??A.type??"native":A.isXPath?"xpath":"css"})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:r==="ASSERTION"?me(o):o.expression_tree??{},assertion_tree:o.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:r==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:o.source_coordinates?{x:o.source_coordinates[0],y:o.source_coordinates[1]}:{},end_coordinates:o.target_coordinates?{x:o.target_coordinates[0],y:o.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:n==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:n==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:Ee(t,s,g,i),reasoning:n==="analyze"?o.query??"":t.intent??t.action_instruction??""}}function G(t,e,s={}){let i=t.action_type,n=W(i,t),r=t.timestamp??"",o=t.duration_ms??0,l=Y(r,o),a=n==="ASSERTION"||n==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:T(t.action_instruction??"",s),command:n,error:null,parent_instruction_id:"",classification_layer_resp:n==="ASSERTION"?he(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:r,end_timestamp:l,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?pe(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:J(t)}:{},params_used:!1,hard_assertion:n==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function ve(t,e=[]){let s=t.action_params??{},i=s.branches??[],n=s.winning_index??-1,r=s.sub_results??[],o={};for(let a of r){let c=a.sub_results;if(c)for(let u of c){let p=u.store_key;p&&(o[p]=u)}}let l=i.map((a,c)=>{let u=c===n,p=(a.sub_checks??[]).map(d=>{let _=o[d.store_key];return{description:d.description,store_key:d.store_key,expected_value:d.expected_value,stored_value:_?.extracted_value??d.stored_value,operator:d.operator??_?.operator??"equals",transforms:d.transforms??_?.transforms??[]}});if(p.length===0&&a.condition&&r.length>0){let _=r.find(g=>g.branch_index===c)?.sub_results??[];_.length>0&&(p=_.map(g=>({description:g.description??a.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:c,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:a.custom_event??null,children:u?e:[],sub_checks:a.condition?p:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${P().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:n,branches:l,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Q(t,e,s){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=s)}function D(t,e={},s="",i,n){let r=[],o=0;for(;o<t.length;){let l=t[o],a=l.action_type;if(!n?.keepFailedActions&&l.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(l.until_condition&&!l.error)){o+=1;continue}if(a==="analyze"&&!X[l.action_params?.analyzer_type??""]){o+=1;continue}if(a==="child_agent_start"){let c=l.action_params?.child_id??"",u=l.action_params?.objective??"",p=[];o+=1;let d=1,_="error",g;for(;o<t.length&&d>0;){let y=t[o],S=y.action_type;if(S==="child_agent_start")d+=1;else if(S==="child_agent_end"&&(d-=1,d===0)){_=y.status??"success",g=y,o+=1;break}d>0&&p.push(y),o+=1}let f=D(p,e,s,i);Q(f,c,u);let m=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,I=g?.action_params?.error_message??null,b=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,O=_==="error";r.push({content_type:"generative_block",instruction_id:`generative_block_${c}`,generative_id:c,objective:u,status:_,children:f,error_message:O?I??null:null,error_code:O?h??null:null,result_code:m??null,bifurcation_context:[],approach_reason:H(b),one_liner:v??null});continue}else if(a==="child_agent_end"){o+=1;continue}else if(a==="if_else"){o+=1;let c=[];for(;o<t.length&&t[o].action_type==="child_agent_start";){let u=t[o],p=u.action_params?.child_id??"",d=u.action_params?.objective??"",_=[];o+=1;let g=1,f="error";for(;o<t.length&&g>0;){let h=t[o];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){f=h.status??"success",o+=1;break}g>0&&_.push(h),o+=1}let m=D(_,e,s,i);c.push(...m)}r.push(ve(l,c));continue}else if(a==="query_tool"){o+=1;continue}else if(l.until_condition){let c=q(l,e,s,i),u=G(l,c,e),p=typeof l.until_condition_met=="boolean"?l.until_condition_met:l.status==="success";r.push({content_type:"until_block",instruction_id:`until_${P().slice(0,8)}`,condition:l.until_condition,max_retries:l.until_max_retries??10,settle_ms:l.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:l.status??"success"})}else{let c=q(l,e,s,i),u=G(l,c,e);r.push(u)}o+=1}return r}function N(t,e={},s="",i,n){let r=[];for(let o of t){let l=D(o.records,e,s,i,n);if(l.length===0)continue;let a=P().replace(/-/g,"");Q(l,a,o.objective);let c=l.some(_=>"status"in _&&typeof _.status=="string"?_.status==="error"||_.status==="failed":!1),u=o.resultCode?parseInt(o.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,d=c||p?"error":"success";r.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:o.objective,status:d,children:l,error_message:d==="error"?o.errorMessage??null:null,error_code:d==="error"?o.reasonCode??null:null,result_code:o.resultCode??null,bifurcation_context:[],approach_reason:H(o.summary),one_liner:o.oneLiner??null})}return{instructions:r}}function te(t,e){let s;try{s=ee(t)}catch{return 0}let i=0,n=s.filter(r=>/^\d+$/.test(r)).sort((r,o)=>Number(r)-Number(o));for(let r of n){let o=L(t,r),l=L(o,"logs");if(!ye(l))continue;let a;try{a=ee(l)}catch{continue}let c=a.filter(d=>d.endsWith("-actions.ndjson")).sort((d,_)=>(parseInt(d,10)||0)-(parseInt(_,10)||0)),u=[];for(let d of c){let _=e.readActions(L(l,d));_.length&&u.push({objective:e.objective??"",records:_})}if(u.length===0)continue;let{instructions:p}=N(u,e.vars??{},e.screenshotBaseUrl??"",e.extMap,{keepFailedActions:!0});if(p.length!==0)try{let d=L(o,"auteur");Ae(d,{recursive:!0}),Re(L(d,"execution.json"),JSON.stringify(e.buildBlob(p),null,2)),i++,e.log?.("info","EVIDENCE_ARCHIVED_ATTEMPT_BLOB","Derived nested attempt blob",{attempt:r,instructions:p.length})}catch(d){e.log?.("debug","EVIDENCE_ARCHIVED_ATTEMPT_BLOB_FAILED","Nested attempt blob derivation failed",{attempt:r,error:d instanceof Error?d.message:String(d)})}}return i}var ie=le(ce(),1);import{createWriteStream as Pe}from"fs";import{readFile as xe}from"fs/promises";import{join as Ne,basename as Le}from"path";import{tmpdir as ke}from"os";var Oe=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function ne(t){let e=Ne(ke(),`${Le(t)}_artifacts.zip`);return new Promise((s,i)=>{let n=Pe(e),r=(0,ie.default)("zip",{zlib:{level:6}});n.on("close",()=>s(e)),r.on("error",i),r.pipe(n),r.glob("**/*",{cwd:t,ignore:Oe}),r.finalize()})}async function se(t){return xe(t)}async function we(t,e){return ae(z(t,e))}function Ce(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var re=class{config;controller;testId;constructor(e){this.config=e,this.controller=new M(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,s,i,n){this.config.log?.(e,s,i,n)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let s=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let l=this.collectNdjsonPerRun(),a=l.reduce((f,m)=>f+m.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:l.length});let c=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(c)});let{instructions:u}=l.length>0?N(l,c,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),d=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(d.length/1024).toFixed(1)});let _=E(this.config.sessionDir,"execution.json");k(_,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:_});let g=s?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let f=E(g,"auteur");U(f,{recursive:!0}),k(E(f,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(f,"execution.json")}),this.deriveArchivedAttemptBlobs(g,c)}if(e("convert","done"),s)i=d;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let f=null,m;try{f=await ne(this.config.sessionDir),m=await se(f),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(m.length/1024/1024).toFixed(1),path:f}),e("zip","done",`${(m.length/1024/1024).toFixed(1)}MB`)}finally{f&&await Te(f).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(m.length/1024/1024).toFixed(1),blob_size_kb:+(d.length/1024).toFixed(1)}),await Promise.all([R(h.urls.artifacts.upload_url,m,"application/zip"),R(h.urls.blob.upload_url,d,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let l=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:c}=l.length>0?N(l,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(c),p=E(this.config.sessionDir,"execution.json");k(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let d=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(d){let _=E(d,"auteur");U(_,{recursive:!0});let g=this.readAuthoredExecution();k(E(_,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(_,"execution.json"),source:g?"authored":"run_envelope"}),this.deriveArchivedAttemptBlobs(d,a)}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(l){let a=l instanceof Error?l.message:String(l);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),l}}else e("atomic_replace","skipped");let n,r;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let l=await this.config.onCommitLock();if(l.ok)n=l.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:n??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:l.reason,message:l.message}),e("commit_lock","failed",`${l.reason??"unknown"}: ${l.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${l.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let l=new B(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(n=(await l.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:n??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(n)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(n&&this.config.shareApiBaseUrl)try{r=await this.generateShareLink(n),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:r})}catch(l){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(l)})}if(s&&i){let l=null;e("zip","running");try{await s.sealFn({testcaseId:n,shareId:r}),l=s.sealedPackPath?await ae(s.sealedPackPath):await we(s.executionId,s.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:s.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(l.length/1024/1024).toFixed(1)})}catch(a){let c=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:s.executionId,error:c})}if(l){e("zip","done",`${(l.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Ce(s.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(l.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([R(a.urls.artifacts.upload_url,l,"application/zip"),R(a.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await R(a.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let o;if(this.config.mobile&&this.config.codeExport?.enabled)this.log("info","PIPELINE_CODE_EXPORT_SKIPPED","Code export is not supported for device runs"),e("code_export","skipped","not supported on mobile yet");else if(this.config.codeExport?.enabled&&n){let l=!1;try{await this.triggerCodeExport(n),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),l=!0}catch(a){let c=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:c}),e("code_export","failed",`trigger failed: ${c}`)}if(l){e("code_export","running","Waiting for code generation\u2026");try{o=await this.pollAndDownloadCode(n,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:o}),e("code_export","done",o)}catch(a){let c=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:c}),e("code_export","failed",c)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:n,shareId:r,codeExportDir:o}}catch(s){return{success:!1,testId:this.testId,error:s instanceof Error?s.message:String(s)}}}async runCodeExport(e,s){let i=s??this.config.onProgress,n=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),n=!0}catch(r){let o=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:o}),i("code_export","failed",`trigger failed: ${o}`)}if(n){i("code_export","running","Waiting for code generation\u2026");try{let r=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:r}),i("code_export","done",r),r}catch(r){let o=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:o}),i("code_export","failed",o);return}}}deriveArchivedAttemptBlobs(e,s){try{let i=te(e,{readActions:n=>this.readNdjsonFromFile(n),buildBlob:n=>this.buildExecutionEnvelope(n),objective:this.config.firstObjective,vars:s,screenshotBaseUrl:this.config.screenshotBaseUrl??"",extMap:this.config.screenshotExtMap,log:(n,r,o,l)=>this.log(n,r,o,l)});i>0&&this.log("info","PIPELINE_ARCHIVED_ATTEMPTS","Nested retry-attempt blobs derived",{count:i})}catch(i){this.log("debug","PIPELINE_ARCHIVED_ATTEMPTS_FAILED","Nested attempt blob pass failed",{error:i instanceof Error?i.message:String(i)})}}collectNdjsonPerRun(){let e=[],s=this.config.runObjectives??[],i=this.config.runMetadata??[],n=this.config.evidence??this.config.evidenceRead;for(let r=0;r<this.config.runDirs.length;r++){let o=this.config.runDirs[r],l=s[r]||this.config.firstObjective,a=i[r],c=n?this.readNdjsonFromFile(E(n.packTestDir,"logs",`${n.runIndices?.[r]??r}-actions.ndjson`)):this.readNdjsonFromDir(o);c.length>0&&e.push({objective:l,records:c,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let r=E(this.config.sessionDir,"runs");if(j(r))try{let l=Se(r,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of l){let c=E(r,a),u=this.readNdjsonFromDir(c);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let s=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of s)if(j(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let s=[];if(!j(e))return s;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=oe(e,"utf-8");for(let n of i.split(`
|
|
5
|
+
`)){let r=n.trim();if(r)try{s.push(JSON.parse(r))}catch{}}return s}async generateShareLink(e){let s=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:s,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},n=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:n,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let r=n?await this.config.authResolver.fetch(s,i):await x(s,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Share link API failed: ${r.status} ${await r.text()}`);let o=await r.json();if(!o.shareId)throw new Error("Share link API returned no shareId");return o.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:s,body:i}=V({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:s});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},r=this.config.authResolver?await this.config.authResolver.fetch(s,n):await x(s,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Code export failed: ${r.status} ${await r.text()}`)}async pollAndDownloadCode(e,s){let i=$({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),n=this.config.exitTimeoutMs??3e5,r=5e3,o=Date.now()+n;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:n});let l=(a,c)=>this.config.authResolver?this.config.authResolver.fetch(a,c):x(a,{...c,headers:{...c?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<o;){let a=await l(i,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let _=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:_.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let u=(await a.json()).data?.find(_=>_.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),s("code_export","running","Waiting for code generation\u2026"),await this.sleep(r);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),s("code_export","running","Generating code\u2026"),await this.sleep(r);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let d=this.config.codeExportDir??E(this.config.sessionDir,"code-export");U(d,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:d}),s("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let _ of u.url){let g=E(d,_.file_name),f=await x(_.file_url);if(!f.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:_.file_name,status:f.status});continue}let m=await f.text();k(g,m,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:_.file_name,size_bytes:m.length})}return d}throw new Error("Code export timed out")}sleep(e){return new Promise(s=>setTimeout(s,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:F(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let s=oe(e,"utf8");return JSON.parse(s),s}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let s=this.config.runStatuses.every(a=>a==="passed")?"success":"error",i=this.config.variableIds??{},n=[];if(this.config.variables)for(let[a,c]of Object.entries(this.config.variables)){if(c.secret)continue;let u=a.startsWith("global.")?a.slice(7):a;n.push({id:i[u]??0,name:u,value:c.value,session_value:c.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let r=[],o=[],l=new Set;for(let a of this.collectNdjsonPerRun())for(let c of a.records)if(c.output_variable&&c.output_value!=null&&r.push({name:c.output_variable,value:String(c.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),c.action_type==="upload_files"){let u=C(c.action_params);if(u){let p=u.media_id||u.media_url;if(!l.has(p)){l.add(p),o.push({media_url:u.media_url,media_id:u.media_id,name:u.name,type:u.type});let d=w(u.name);r.push({name:K(u.name),value:d,value_type:"string",variable_description:`variable for ${d}`})}}}return{test_id:this.testId,version:"v4",auto_heal_version:this.config.apMode==="v2"?"AH2":"",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:s,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:o,test_params:[],test_level_variables:JSON.stringify(r),test_global_variables:n,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{we as a,Ce as b,re as c};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{createRequire as Sr}from"module";var Ur=Sr("/"),H,Fr,Cr;try{H=Ur("worker_threads"),Fr=H.Worker,Cr=H.isMarkedAsUntransferable}catch{}var g=Uint8Array,k=Uint16Array,Dr=Int32Array,cr=new g([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),pr=new g([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Tr=new g([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),gr=function(n,r){for(var t=new k(31),e=0;e<31;++e)t[e]=r+=1<<n[e-1];for(var i=new Dr(t[30]),e=1;e<30;++e)for(var l=t[e];l<t[e+1];++l)i[l]=l-t[e]<<5|e;return{b:t,r:i}},H=gr(cr,2),yr=H.b,Ir=H.r;yr[28]=258,Ir[258]=28;var wr=gr(pr,0),Br=wr.b,Rr=wr.r,or=new k(32768);for(f=0;f<32768;++f)B=(f&43690)>>1|(f&21845)<<1,B=(B&52428)>>2|(B&13107)<<2,B=(B&61680)>>4|(B&3855)<<4,or[f]=((B&65280)>>8|(B&255)<<8)>>1;var B,f,Q=(function(n,r,t){for(var e=n.length,i=0,l=new k(r);i<e;++i)n[i]&&++l[n[i]-1];var u=new k(r);for(i=1;i<r;++i)u[i]=u[i-1]+l[i-1]<<1;var o;if(t){o=new k(1<<r);var v=15-r;for(i=0;i<e;++i)if(n[i])for(var s=i<<4|n[i],c=r-n[i],a=u[n[i]-1]++<<c,h=a|(1<<c)-1;a<=h;++a)o[or[a]>>v]=s}else for(o=new k(e),i=0;i<e;++i)n[i]&&(o[i]=or[u[n[i]-1]++]>>15-n[i]);return o}),X=new g(288);for(f=0;f<144;++f)X[f]=8;var f;for(f=144;f<256;++f)X[f]=9;var f;for(f=256;f<280;++f)X[f]=7;var f;for(f=280;f<288;++f)X[f]=8;var f,mr=new g(32);for(f=0;f<32;++f)mr[f]=5;var f;var Zr=Q(X,9,1);var Er=Q(mr,5,1),er=function(n){for(var r=n[0],t=1;t<n.length;++t)n[t]>r&&(r=n[t]);return r},C=function(n,r,t){var e=r/8|0;return(n[e]|n[e+1]<<8)>>(r&7)&t},ir=function(n,r){var t=r/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(r&7)},qr=function(n){return(n+7)/8|0},L=function(n,r,t){return(r==null||r<0)&&(r=0),(t==null||t>n.length)&&(t=n.length),new g(n.subarray(r,t))};var Gr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],p=function(n,r,t){var e=new Error(r||Gr[n]);if(e.code=n,Error.captureStackTrace&&Error.captureStackTrace(e,p),!t)throw e;return e},xr=function(n,r,t,e){var i=n.length,l=e?e.length:0;if(!i||r.f&&!r.l)return t||new g(0);var u=!t,o=u||r.i!=2,v=r.i;u&&(t=new g(i*3));var s=function(ur){var lr=t.length;if(ur>lr){var vr=new g(Math.max(lr*2,ur));vr.set(t),t=vr}},c=r.f||0,a=r.p||0,h=r.b||0,M=r.l,y=r.d,T=r.m,D=r.n,S=i*8;do{if(!M){c=C(n,a,1);var q=C(n,a+1,3);if(a+=3,q)if(q==1)M=Zr,y=Er,T=9,D=5;else if(q==2){var G=C(n,a,31)+257,O=C(n,a+10,15)+4,P=G+C(n,a+5,31)+1;a+=14;for(var E=new g(P),V=new g(19),w=0;w<O;++w)V[Tr[w]]=C(n,a+w*3,7);a+=O*3;for(var N=er(V),I=(1<<N)-1,$=Q(V,N,1),w=0;w<P;){var j=$[C(n,a,I)];a+=j&15;var z=j>>4;if(z<16)E[w++]=z;else{var x=0,U=0;for(z==16?(U=3+C(n,a,3),a+=2,x=E[w-1]):z==17?(U=3+C(n,a,7),a+=3):z==18&&(U=11+C(n,a,127),a+=7);U--;)E[w++]=x}}var d=E.subarray(0,G),F=E.subarray(G);T=er(d),D=er(F),M=Q(d,T,1),y=Q(F,D,1)}else p(1);else{var z=qr(a)+4,W=n[z-4]|n[z-3]<<8,R=z+W;if(R>i){v&&p(0);break}o&&s(h+W),t.set(n.subarray(z,R),h),r.b=h+=W,r.p=a=R*8,r.f=c;continue}if(a>S){v&&p(0);break}}o&&s(h+131072);for(var b=(1<<T)-1,rr=(1<<D)-1,Y=a;;Y=a){var x=M[ir(n,a)&b],Z=x>>4;if(a+=x&15,a>S){v&&p(0);break}if(x||p(2),Z<256)t[h++]=Z;else if(Z==256){Y=a,M=null;break}else{var _=Z-254;if(Z>264){var w=Z-257,J=cr[w];_=C(n,a,(1<<J)-1)+yr[w],a+=J}var nr=y[ir(n,a)&rr],tr=nr>>4;nr||p(3),a+=nr&15;var F=Br[tr];if(tr>3){var J=pr[tr];F+=ir(n,a)&(1<<J)-1,a+=J}if(a>S){v&&p(0);break}o&&s(h+131072);var fr=h+_;if(h<F){var hr=l-F,Mr=Math.min(F,fr);for(hr+h<0&&p(3);h<Mr;++h)t[h]=e[hr+h]}for(;h<fr;++h)t[h]=t[h-F]}}r.l=M,r.p=Y,r.b=h,r.f=c,M&&(c=1,r.m=T,r.d=y,r.n=D)}while(!c);return h!=t.length&&u?L(t,0,h):t.subarray(0,h)};var K=new g(0);var A=function(n,r){return n[r]|n[r+1]<<8},m=function(n,r){return(n[r]|n[r+1]<<8|n[r+2]<<16|n[r+3]<<24)>>>0},ar=function(n,r){return m(n,r)+m(n,r+4)*4294967296};var Or=(function(){function n(r,t){typeof r=="function"&&(t=r,r={}),this.ondata=t;var e=r&&r.dictionary&&r.dictionary.subarray(-32768);this.s={i:0,b:e?e.length:0},this.o=new g(32768),this.p=new g(0),e&&this.o.set(e)}return n.prototype.e=function(r){if(this.ondata||p(5),this.d&&p(4),!this.p.length)this.p=r;else if(r.length){var t=new g(this.p.length+r.length);t.set(this.p),t.set(r,this.p.length),this.p=t}},n.prototype.c=function(r){this.s.i=+(this.d=r||!1);var t=this.s.b,e=xr(this.p,this.s,this.o);this.ondata(L(e,t,this.s.b),this.d),this.o=L(e,this.s.b-32768),this.s.b=this.o.length,this.p=L(this.p,this.s.p/8|0),this.s.p&=7},n.prototype.push=function(r,t){this.e(r),this.c(t)},n})();function Pr(n,r){return xr(n,{i:2},r&&r.out,r&&r.dictionary)}var sr=typeof TextDecoder<"u"&&new TextDecoder,Nr=0;try{sr.decode(K,{stream:!0}),Nr=1}catch{}var dr=function(n){for(var r="",t=0;;){var e=n[t++],i=(e>127)+(e>223)+(e>239);if(t+i>n.length)return{s:r,r:L(n,t-1)};i?i==3?(e=((e&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,r+=String.fromCharCode(55296|e>>10,56320|e&1023)):i&1?r+=String.fromCharCode((e&31)<<6|n[t++]&63):r+=String.fromCharCode((e&15)<<12|(n[t++]&63)<<6|n[t++]&63):r+=String.fromCharCode(e)}};function zr(n,r){if(r){for(var t="",e=0;e<n.length;e+=16384)t+=String.fromCharCode.apply(null,n.subarray(e,e+16384));return t}else{if(sr)return sr.decode(n);var i=dr(n),l=i.s,t=i.r;return t.length&&p(8),l}}var kr=function(n,r){return r+30+A(n,r+26)+A(n,r+28)},Hr=function(n,r,t){var e=A(n,r+28),i=A(n,r+30),l=zr(n.subarray(r+46,r+46+e),!(A(n,r+8)&2048)),u=r+46+e,o=Ar(n,u,i,t,m(n,r+20),m(n,r+24),m(n,r+42)),v=o[0],s=o[1],c=o[2];return[A(n,r+10),v,s,l,u+i+A(n,r+32),c]},Ar=function(n,r,t,e,i,l,u){var o=i==4294967295,v=l==4294967295,s=u==4294967295,c=r+t,a=o+v+s;if(e&&a){for(;r+4<c;r+=4+A(n,r+2))if(A(n,r)==1)return[o?ar(n,r+4+8*v):i,v?ar(n,r+4):l,s?ar(n,r+4+8*(v+o)):u,1];e<2&&p(13)}return[i,l,u,0]};var Lr=(function(){function n(){}return n.prototype.push=function(r,t){this.ondata(null,r,t)},n.compression=0,n})();var Vr=(function(){function n(){var r=this;this.i=new Or(function(t,e){r.ondata(null,t,e)})}return n.prototype.push=function(r,t){try{this.i.push(r,t)}catch(e){this.ondata(e,null,t)}},n.compression=8,n})();var Yr=(function(){function n(r){this.onfile=r,this.k=[],this.o={0:Lr},this.p=K}return n.prototype.push=function(r,t){var e=this;if(this.onfile||p(5),this.p||p(4),this.c>0){var i=Math.min(this.c,r.length),l=r.subarray(0,i);if(this.c-=i,this.d?this.d.push(l,!this.c):this.k[0].push(l),r=r.subarray(i),r.length)return this.push(r,t)}else{var u=0,o=0,v=void 0,s=void 0;this.p.length?r.length?(s=new g(this.p.length+r.length),s.set(this.p),s.set(r,this.p.length)):s=this.p:s=r;for(var c=s.length,a=this.c,h=a&&this.d,M=function(){var S=m(s,o);if(S==67324752){u=1,v=o,y.d=null,y.c=0;var q=A(s,o+6),z=A(s,o+8),W=q&2048,R=q&8,G=A(s,o+26),O=A(s,o+28);if(c>o+30+G+O){var P=[];y.k.unshift(P),u=2;var E=m(s,o+18),V=m(s,o+22),w=zr(s.subarray(o+30,o+=30+G),!W),N=Ar(s,o,O,2,E,V,0),I=N[0],$=N[1],j=N[3];R&&(I=-1-j),o+=O,y.c=I;var x,U={name:w,compression:z,start:function(){if(U.ondata||p(5),!I)U.ondata(null,K,!0);else{var d=e.o[z];d||U.ondata(p(14,"unknown compression type "+z,1),null,!1),x=I<0?new d(w):new d(w,I,$),x.ondata=function(Y,Z,_){U.ondata(Y,Z,_)};for(var F=0,b=P;F<b.length;F++){var rr=b[F];x.push(rr,!1)}e.k[0]==P&&e.c?e.d=x:x.push(K,!0)}},terminate:function(){x&&x.terminate&&x.terminate()}};I>=0&&(U.size=I,U.originalSize=$),y.onfile(U)}return"break"}else if(a){if(S==134695760)return v=o+=12+(a==-2&&8),u=3,y.c=0,"break";if(S==33639248)return v=o-=4,u=3,y.c=0,"break"}},y=this;o<c-4;++o){var T=M();if(T==="break")break}if(this.p=K,a<0){var D=u?s.subarray(0,v-12-(a==-2&&8)-(m(s,v-16)==134695760&&4)):s.subarray(0,o);h?h.push(D,!!u):this.k[+(u==2)].push(D)}if(u&2)return this.push(s.subarray(o),t);this.p=s.subarray(o)}t&&(this.c&&p(13),this.p=null)},n.prototype.register=function(r){this.o[r.compression]=r},n})();function Jr(n,r){for(var t={},e=n.length-22;m(n,e)!=101010256;--e)(!e||n.length-e>65558)&&p(13);var i=A(n,e+8);if(!i)return{};var l=m(n,e+16),u=m(n,e-20)==117853008;if(u){var o=m(n,e-12);u=m(n,o)==101075792,u&&(i=m(n,o+32),l=m(n,o+48))}for(var v=r&&r.filter,s=0;s<i;++s){var c=Hr(n,l,u),a=c[0],h=c[1],M=c[2],y=c[3],T=c[4],D=c[5],S=kr(n,D);l=T,(!v||v({name:y,size:h,originalSize:M,compression:a}))&&(a?a==8?t[y]=Pr(n.subarray(S,S+h),{out:new g(M)}):p(14,"unknown compression type "+a):t[y]=L(n,S,S+h))}return t}export{Lr as a,Vr as b,Yr as c,Jr as d};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{
|
|
2
|
+
import{a as Ve}from"./chunk-KHU7C6EE.js";import{c as We}from"./chunk-IOD3HQVW.js";import{a as ze,b as me}from"./chunk-3Q6WAK6P.js";import{a as te,b as Ne,e as ce,f as le,g as je,h as Ge}from"./chunk-KU6IXFGZ.js";import{a as qe,c as Me,d as Fe,e as de,f as Be}from"./chunk-ZGBSGZZM.js";import{a as Te,b as Ae,c as Ie}from"./chunk-BRHNRCEZ.js";import{a as $e,b as Ee,c as Ce}from"./chunk-BB2W35TW.js";import{a as Oe}from"./chunk-L2TV4G56.js";import{c as Pe}from"./chunk-6KPPGMO2.js";import{a as De,e as Re}from"./chunk-GFKCTYCA.js";import{a as Le}from"./chunk-IMR64OCZ.js";import{a as He,b as Ue}from"./chunk-JZ26R6UL.js";import{b as ye,c as be,d as we,e as re,f as oe,g as ae}from"./chunk-ZPDM6FO7.js";import{a as ie}from"./chunk-L5LI2JF4.js";import{a as _e,b as ne}from"./chunk-IDX3TOPY.js";import{A as G}from"./chunk-TH47OOBV.js";import{f as Se}from"./chunk-DUAXZYAD.js";import{a as ve,e as ke,f as xe}from"./chunk-DBIBROYW.js";import{d as V,e as J}from"./chunk-WXHQYYD5.js";import{a as he}from"./chunk-5EOX4MEY.js";import{mkdirSync as xt,appendFileSync as St,rmdirSync as lt}from"fs";import{randomBytes as Dt}from"crypto";import{dirname as dt,join as fe}from"path";function Ke(t,e){let n=[];for(let i of e??[]){let g=t.resolve(i.ref)?.tip??null;g!==i.cid&&n.push({ref:i.ref,pinned:i.cid,now:g})}return n}import{existsSync as ue,readFileSync as ge,readdirSync as gt}from"fs";import{join as Z}from"path";var Qe=`
|
|
3
3
|
version: 1
|
|
4
4
|
techniques:
|
|
5
5
|
- id: eqp
|
|
@@ -341,7 +341,7 @@ pitfalls:
|
|
|
341
341
|
|
|
342
342
|
`),e.initialMessage].filter(Boolean).join(`
|
|
343
343
|
|
|
344
|
-
`)};if(!r)return e.out(`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),e.emit?.({type:"error",message:`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let x=t.resume?void 0:t.phase,O=!1;if(x!==void 0){let{checkPhaseEntry:s,phaseEntryCmd:c,phaseLadderFor:l}=await import("./phase-seed-
|
|
344
|
+
`)};if(!r)return e.out(`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),e.emit?.({type:"error",message:`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let x=t.resume?void 0:t.phase,O=!1;if(x!==void 0){let{checkPhaseEntry:s,phaseEntryCmd:c,phaseLadderFor:l}=await import("./phase-seed-VFHIH6FL.js");O=l(e.contextDir,n,r).length>0;let a=s(e.contextDir,n,r,x);if(!a.ok&&a.code==="UNKNOWN_PHASE")return e.out(`error: ${a.message}`),e.emit?.({type:"error",code:"UNKNOWN_PHASE",message:a.message}),i?.release(),2;if(!a.ok&&a.code==="PHASE_ORDER"){let m=t.askPhaseEntry?await t.askPhaseEntry({message:a.message,earliest:a.earliest}):"cancel";if(m==="earliest")e.out(`starting at ${a.earliest} instead (${a.missing.join(", ")} not committed yet)`),x=a.earliest;else if(m==="proceed")e.out(`note: entering at ${x} with ${a.missing.join(", ")} uncommitted \u2014 proceeding on your say-so`),e.emit?.({type:"phase_entry_override",phase:x,missing:a.missing});else{let h=(t.mode??"interactive")==="agent",$=c(r,a.earliest,h);return e.out(`error: ${a.message}`),e.emit?.({type:"error",code:"PHASE_ORDER",message:a.message,next:[{cmd:$,why:`${a.earliest} is the earliest uncommitted phase for ${r}`,title:`Start at ${a.earliest}`}]}),i?.release(),2}}}let S=!!(t.force||i?.state.force),E=!!(t.resume&&i),D=Ue(n,r,S||E||O);if(!D.ok){let s=(t.mode??"interactive")==="interactive";if(D.wall&&s&&t.askDesignEntry){let{captureForceScope:c}=await import("./design-committer-VYT6NU3T.js"),l=c(n,r).length,a=await t.askDesignEntry({wall:D.wall.kind,message:D.message,display:D.wall.display,impactPairs:l});if(a.pick==="redesign"||a.pick==="proceed"){if(!a.because.trim())return e.out("a redesign needs a reason (--because) \u2014 nothing executed"),i?.release(),2;e.out(a.pick==="redesign"?`redesigning ${D.wall.display} (${l} pair(s) superseded) \u2014 because: ${a.because.trim()}`:`proceeding against the stale design (noted) \u2014 because: ${a.because.trim()}`),t={...t,force:!0,because:t.because??a.because.trim()},S=!0}else return a.pick==="view"?(e.out(`view the existing design: kane-cli context view ${D.wall.display}`),i?.release(),0):a.pick==="refresh"?(e.out(`refresh it first: kane-cli maintain evolve ${D.wall.display}`),i?.release(),0):(e.out("nothing executed \u2014 list use-cases: kane-cli context list"),i?.release(),0)}else{e.out(`design: ${D.message}`);let c=D.wall&&t.mode==="agent"?[{cmd:`kane-cli context view ${D.wall.display}`,why:"view the existing design",title:"View the design"},...D.wall.kind==="designed-stale"?[{cmd:`kane-cli maintain evolve ${D.wall.display}`,why:"the use-case moved since the design \u2014 evolve refreshes it",title:"Evolve the design"}]:[],{cmd:`kane-cli design tests --use-case ${D.wall.display} --force --mode agent`,why:"redesign \u2014 supersedes the live scenario+test pairs",title:"Redesign"}]:void 0;return e.emit?.({type:"gate_refused",message:D.message,...c?{next:c}:{}}),i?.release(),D.code}}if(e.preflightTurn){let s=await e.preflightTurn();if(!s.ok)return e.out(s.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:s.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),i?.release(),2}let w={contextDir:e.contextDir,resolveAlias:s=>Ae(s,{env:process.env,auth:e.auth}),embed:(s,c)=>Ie(s,c,{env:process.env,auth:e.auth})};e.chat?.setWorking?.("assembling context\u2026");let _=await rt(e.contextDir,r,{max:t.max,strength:t.strength,embedSearch:w});if(t.priorDesign!==void 0&&(_.prior_design=t.priorDesign),t.changeDelta!==void 0&&(_.change_delta=t.changeDelta),t.because&&(_.because=t.because),x!==void 0){let{buildPhaseSeed:s}=await import("./phase-seed-VFHIH6FL.js"),c=s(e.contextDir,n,r,x);_.prior_design===void 0&&c.priorDesign!==void 0&&(_.prior_design=c.priorDesign),_.entry_phase=x,c.phaseLadder.length>0&&(_.phase_ladder=c.phaseLadder)}let F=e.now?.()??new Date,B=`${F.toISOString().replace(/[-:]/g,"").slice(0,15)}-${Dt(2).toString("hex")}`,R=t.mode??"interactive",p=g?{...g.spawnConfig,mode:R}:ct(_,{session_id:t.resume??`design-${B}`,mode:R,ucCid:_.usecase.cid,readBasis:n.latestHash,topology:Le("design")}),f={current:null};if(p.resume&&"schema"in p.resume){let s=p.resume.binding?.template_version;typeof s=="string"&&(f.current=s)}t.plan?p.chat=!1:p.chat=!0;let v=e.telemetry?.enabled?e.telemetry:void 0,P=v?he(v.ids.context_instance_id??null,"design",v.ids.session_id):fe(e.contextDir,"logs",`design-${B}.log`);xt(dt(P),{recursive:!0}),e.out(`trace: ${te(P)}`),e.emit?.({type:"run_start",mode:R,trace:P,use_case:r,...v?{session:v.ids.session_id}:{}});let d=(s,c,l)=>{try{St(P,JSON.stringify({ts:new Date().toISOString(),level:s==="error"?"error":"info",run_id:v?.ids.operation_id,...v?{user_session_id:v.ids.session_id}:{},kind:s,session_id:l,data:c})+`
|
|
345
345
|
`)}catch{}v?.wireTrace(s,c,l)};{let s=e.out;if(s[mt]!==!0){let c=l=>{d("transcript",{line:l}),s(l)};c[mt]=!0,e.out=c}}if(t.resume&&i){g||(p.resume={agent_state:i.state.agent_state}),e.out(`resuming design session ${t.resume}`),i.state.assumed.length>0&&e.out(`note: ${i.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${t.resume} lists them`);try{let{readRecords:s}=await import("./records-IOZTZUZV.js"),c=s(e.contextDir).records.filter(l=>l.sid===t.resume).map(l=>l.design_phase).filter(l=>l!=null&&typeof l.phase=="string");if(c.length>0){let l=c.map(m=>`${m.phase}${m.completeness==="partial"?" (partial)":""}`).join(" \u2192 "),a=`[kane] durable record for this session (${t.resume}) on ${r}: design phases already COMMITTED \u2014 ${l}. Those finalizes landed; do not re-send them. Continue from the next uncommitted phase, or finish if the design is complete.`;e={...e,initialMessage:[e.initialMessage,a].filter(Boolean).join(`
|
|
346
346
|
|
|
347
347
|
`)}}}catch{}t.message&&(e={...e,initialMessage:[e.initialMessage,t.message].filter(Boolean).join(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as h}from"./chunk-
|
|
2
|
+
import{a as h}from"./chunk-TFPPEOAK.js";import{y as l}from"./chunk-27U4PLPX.js";import{a as A}from"./chunk-HCBYKLMW.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(B(),1);var n=x(A(),1);function S(r,d,s,u,m){let p=s==="basic"&&u?`basic (${u})`:s,i=20,a=`${r} [${d}]`,g="\xB7".repeat(Math.max(2,i-a.length+3));return{label:`${a} ${g} ${p}`,profile:r,env:d,isActive:m}}function M({creds:r,onSwitch:d,onCancel:s}){let u=r.listProfiles(),m=r.getActiveProfile(),p=r.getDefaultEnv(),i=u.map(e=>{let o=r.loadBasicAuth(e.profile,e.env),t=r.loadCredentials(e.profile,e.env)!==null,v=o?"basic":t?"oauth":"none",b=o?o.username:null,w=e.profile===m&&e.env===p;return S(e.profile,e.env,v,b,w)}),[a,g]=(0,L.useState)(()=>{let e=i.findIndex(o=>o.isActive);return e>=0?e:0});return P((e,o)=>{if(o.escape){s();return}if(o.upArrow){g(t=>Math.max(0,t-1));return}if(o.downArrow){g(t=>Math.min(i.length-1,t+1));return}if(o.return&&i[a]){let t=i[a];t.isActive||d(t.profile,t.env),s();return}}),i.length===0?(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{marginTop:1,children:(0,n.jsx)(f,{color:l.dim,children:"No profiles \u2014 use Login to create one"})}),(0,n.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{flexDirection:"column",marginTop:1,children:i.map((e,o)=>{let t=o===a,v=t?"\u276F ":" ",b=e.isActive?l.green:t?l.orange:void 0;return(0,n.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,n.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{S as a,M as b};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{b as f}from"./chunk-SDPRO2LE.js";import{c as g}from"./chunk-UD7KKHPW.js";import{existsSync as u}from"fs";import{dirname as p,resolve as c}from"path";import{fileURLToPath as A}from"url";var d=p(A(import.meta.url));function E(){return[c(d,".."),c(d,"../../..")]}function _(t){return{"darwin-arm64":"kane-cli-darwin-arm64","darwin-x64":"kane-cli-darwin-x64","linux-x64":"kane-cli-linux-x64","linux-arm64":"kane-cli-linux-arm64","win32-x64":"kane-cli-win-x64"}[t]??null}function x(t){return{"darwin-arm64":"kane-cli-assurance-darwin-arm64","darwin-x64":"kane-cli-assurance-darwin-x64","linux-x64":"kane-cli-assurance-linux-x64","linux-arm64":"kane-cli-assurance-linux-arm64","win32-x64":"kane-cli-assurance-win-x64"}[t]??null}function I(){let t=_(`${process.platform}-${process.arch}`),e=x(`${process.platform}-${process.arch}`),a=process.platform==="win32"?"assurance-agent.exe":"assurance-agent";for(let s of E()){for(let n of e?["@testmuai","@lambdatestincprivate"]:[]){let r=c(s,"node_modules",n,e,"bin",a);if(u(r))return{cmd:r,args:[],tier:"platform"}}for(let n of t?["@testmuai","@lambdatestincprivate"]:[]){let r=c(s,"node_modules",n,t,"bin",a);if(u(r))return{cmd:r,args:[],tier:"platform"}}let i=c(s,"../assurance-agent/dist",a);if(u(i))return{cmd:i,args:[],tier:"sibling"};let o=c(s,"../assurance-agent/main.py");if(u(o)){let n=c(s,"../assurance-agent/.venv/bin/python");return{cmd:u(n)?n:"python3",args:[o],tier:"dev-python"}}}return null}function U(t,e={}){return{...process.env,...e,...f(),TESTMUAI_SOURCE:"kane-cli",TESTMUAI_SESSION_ID:t,ASSURANCE_LOG_LEVEL:process.env.ASSURANCE_LOG_LEVEL??"info"}}async function P(){if(process.env.TESTMUAI_API_KEY||process.env.TESTMUAI_BASIC_AUTH)return{};try{let{CredentialsManager:t}=await import("./credentials-OH6AVI6N.js"),e=process.env.TESTMUAI_ENV==="stage"?"stage":"prod",a=new t,s=a.getActiveProfile()??"default",i={TESTMUAI_ENV:e},o=a.loadBasicAuth(s,e);if(o)return i.TESTMUAI_BASIC_AUTH=Buffer.from(`${o.username}:${o.access_key}`,"utf8").toString("base64"),i;let n=a.loadCredentials(s,e);if(n){try{let{refreshOAuthToken:l}=await import("./token-refresh-4BPAPXKK.js");await l({creds:a,profile:s,env:e,credentials:n})}catch{}let r=a.loadCredentials(s,e)??n;if(typeof r.access_token=="string"){let l=await h(e,r.access_token);return l?(i.TESTMUAI_BASIC_AUTH=l,i):(i.TESTMUAI_API_KEY=r.access_token,i)}}return{}}catch{return{}}}var T=8e3;function m(){return g("warn: session auth may expire during long runs \u2014 if that happens, run `kane-cli login` and retry","AUTH_EXCHANGE_FAILED"),null}async function h(t,e){try{let[{getEnvironment:a},{ControllerClient:s}]=await Promise.all([import("./config-RS47F5SC.js"),import("./controller-client-OB4WD2C4.js")]),i=new s(a(t).controllerBaseUrl,e),o;try{let n=await Promise.race([i.getTmsCredentials().catch(()=>null),new Promise(r=>{o=setTimeout(()=>r(null),T)})]);if(typeof n?.username!="string"||!n.username||typeof n.access_key!="string"||!n.access_key)return m();try{let[{refreshIdentitySnapshot:r},{telemetryEnvName:l}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-44YKVWWE.js")]);await r(l(),n)}catch{}return Buffer.from(`${n.username}:${n.access_key}`,"utf8").toString("base64")}finally{clearTimeout(o)}}catch{return m()}}export{_ as a,x as b,I as c,U as d,P as e};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as l}from"./chunk-
|
|
2
|
+
import{a as l}from"./chunk-DPUV6OSP.js";import{a as c}from"./chunk-NLCCBXXV.js";import{a}from"./chunk-RZ4F3BHX.js";var h=class{constructor(e,t,r,s){this.controllerBaseUrl=e;this.getOAuthToken=t;this.directBasicAuth=r;this.log=s}_cached=null;_revoked=!1;_lastError=null;revoke(){this._revoked=!0,this._cached=null}prime(e){this._revoked||(this._cached=e)}get revoked(){return this._revoked}get cached(){return this._cached}get lastError(){return this._lastError}async resolve(e=!1){if(this._cached&&!e)return this._cached;try{let t;if(this.directBasicAuth)t=new l(this.controllerBaseUrl,{username:this.directBasicAuth.username,accessKey:this.directBasicAuth.access_key});else{let s=await this.getOAuthToken();if(!s)return null;t=new l(this.controllerBaseUrl,s)}let r=await t.getTmsCredentials();this.directBasicAuth&&!r.access_key&&(r.access_key=this.directBasicAuth.access_key),this._cached=r,this._lastError=null;try{let[{refreshIdentitySnapshot:s},{telemetryEnvName:n}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-44YKVWWE.js")]);await s(n(),r)}catch{}return this.log?.("info","AUTH_RESOLVE_OK","Auth resolved",{username:r.username,org_id:r.org_id,user_id:r.user_id}),r}catch(t){return this._lastError=t instanceof Error?t:new Error(String(t)),this.log?.("warn","AUTH_RESOLVE_FAILED","Auth resolve failed",{error:this._lastError.message}),null}}async fetch(e,t={}){if(this._revoked)throw new Error("Resolver has been revoked \u2014 identity changed");let r=await this.resolve();if(!r)throw new Error("Not authenticated \u2014 no credentials resolved");let s=i=>({...t,headers:{...t.headers,Authorization:c(i.username,i.access_key)}}),n=await a(e,s(r));if(n.status===401){if(this._revoked)throw new Error("Resolver has been revoked \u2014 identity changed");this.log?.("warn","AUTH_RESOLVE_401","Got 401, re-resolving",{url:e});let i=await this.resolve(!0);if(!i)throw new Error("Re-authentication failed after 401");return a(e,s(i))}return n}};function _(o){if(!o)return"network";let e=/failed:\s*(\d{3})\b/.exec(o.message)?.[1];return e==="401"||e==="403"?"auth":e?"server":"network"}export{h as a,_ as b};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{d as Y,f as q,h as H}from"./chunk-2KDGIZED.js";import{a as j,b as L,c as z}from"./chunk-YRFMPIU2.js";import{d as B,f as R}from"./chunk-FNH55WSR.js";import{a as N,b as _,c as M}from"./chunk-TYLYFERW.js";import{a as O}from"./chunk-TZXXJWHA.js";import{m as b}from"./chunk-56PAQAX5.js";import{a as K,b as C,c as G}from"./chunk-AW2XUHH4.js";import{g as J}from"./chunk-HEAIJCGZ.js";import{a as F,b as $}from"./chunk-BRIEBB2U.js";import{c as E}from"./chunk-27U4PLPX.js";import{createHash as be}from"crypto";import{readdir as Ce,stat as Te}from"fs/promises";import{basename as f,extname as Ie,join as Ae,relative as ke}from"path";import{createHash as de}from"crypto";import{createReadStream as le}from"fs";import{mkdir as ce,readFile as ue,rename as fe,writeFile as ge}from"fs/promises";import{dirname as me,join as he}from"path";var we=60,ve=5;function V(){return{entries:[]}}function X(){return he(E,"mobile","app-cache.json")}async function T(e){let r=de("sha256");for await(let t of le(e))r.update(t);return r.digest("hex")}function ye(){return{readFile:e=>ue(e,"utf8"),writeFile:async(e,r)=>{await ce(me(e),{recursive:!0});let t=`${e}.tmp`;await ge(t,r),await fe(t,e)},hashFile:T,now:()=>new Date}}function I(e){if(!e)return;let r=/\/(\d{4})\/(\d{2})\/(\d{2})\//.exec(e);if(!r)return;let[,t,a,n]=r,s=new Date(`${t}-${a}-${n}T00:00:00Z`);return Number.isNaN(s.getTime())?void 0:s.toISOString()}function Pe(e,r){if(!e.storedAt)return!0;let t=new Date(e.storedAt).getTime();return Number.isNaN(t)?!0:(r.getTime()-t)/864e5>=we-ve}var u=class{deps;constructor(r={}){this.deps={...ye(),...r}}async read(){try{let r=JSON.parse(await this.deps.readFile(X()));if(!r||typeof r!="object")return V();let t=r;return{entries:Array.isArray(t.entries)?t.entries:[]}}catch{return V()}}async write(r){await this.deps.writeFile(X(),JSON.stringify(r,null,2))}async hashOf(r){return this.deps.hashFile(r)}async lookup(r){return(await this.read()).entries.find(a=>a.sha256===r.sha256&&a.env===r.env&&a.orgId===r.orgId&&a.type===r.type)}async remember(r){let t=await this.read();t.entries=[...t.entries.filter(a=>!(a.sha256===r.sha256&&a.env===r.env&&a.orgId===r.orgId&&a.type===r.type)),r],await this.write(t)}async forget(r){let t=await this.read(),a=t.entries.length;t.entries=t.entries.filter(n=>!(n.sha256===r.sha256&&n.env===r.env&&n.orgId===r.orgId&&n.type===r.type)),t.entries.length!==a&&await this.write(t)}isNearExpiry(r){return Pe(r,this.deps.now())}};var Z={emulator:[".apk"],simulator:[".zip"]};function Q(e){return e.skipped===!0}function De(e,r){let t=Ie(e).toLowerCase();return t===".ipa"?`${f(e)} is a device build \u2014 .ipa is not accepted for ${r} runs.`:Z[r].includes(t)?null:`${f(e)} cannot be uploaded for a ${r} run \u2014 expected one of ${Z[r].join(", ")}.`}async function A(e,r){if(!(await Te(e)).isDirectory())return r.hashOf(e);let a=[],n=async i=>{for(let o of await Ce(i,{withFileTypes:!0})){let p=Ae(i,o.name);o.isDirectory()?await n(p):o.isFile()&&a.push(p)}};await n(e),a.sort();let s=be("sha256");for(let i of a)s.update(ke(e,i)),s.update("\0"),s.update(await T(i)),s.update("\0");return s.digest("hex")}async function W(e){let r=De(e.path,e.type);if(r)return{skipped:!0,reason:r};let t=e.cache??new u,a=e.client??new J(e.baseUrl,e.auth),n;try{n=await A(e.path,t)}catch(o){return{skipped:!0,reason:`could not read ${f(e.path)}: ${o.message}`}}let s={sha256:n,env:e.env,orgId:e.orgId,type:e.type},i=await t.lookup(s);if(i){if(await a.liveness(i.appId)!=="gone")return{appId:i.appId,...i.appUrl?{appUrl:i.appUrl}:{},fromCache:!0};e.onProgress?.(`${i.appId} is no longer in the cloud \u2014 uploading again`),await t.forget(s)}try{e.onProgress?.(`uploading ${f(e.path)}\u2026`);let o=await a.upload(e.path,e.type);return await t.remember({sha256:n,env:e.env,orgId:e.orgId,type:e.type,appId:o.appId,...o.appUrl?{appUrl:o.appUrl}:{},...I(o.url)?{storedAt:I(o.url)}:{},sourcePath:e.path}),e.onProgress?.(o.cached?`${f(e.path)} already in the cloud (${o.appId})`:`${f(e.path)} uploaded (${o.appId})`),{appId:o.appId,...o.appUrl?{appUrl:o.appUrl}:{},fromCache:!1}}catch(o){return{skipped:!0,reason:o.message}}}function h(e){return`${e.platform}|${F(e)}`}var g=new Map,ee=new Set;function re(e){return ee.has(h(e))}function We(e,r,t){r.state==="stopped"&&(g.has(h(r))||ae(e,r,t))}async function te(e,r,t){let a=g.get(h(r));return a?(t?.(`waiting for ${r.displayName} to finish booting\u2026`),a):ae(e,r,t)}function ae(e,r,t){let a=h(r),n=e.prepare(r,t);g.set(a,n),r.state==="stopped"&&n.then(()=>ee.add(a),()=>{});let s=()=>{g.get(a)===n&&g.delete(a)};return n.then(s,s),n.catch(()=>{}),n}import{basename as xe}from"path";import{spawnSync as Ue}from"child_process";async function Se(e,r,t){if(!e.teardownPlan||!t.appPackage&&!t.shutdown)return;let a;try{a=await e.teardownPlan(r,t)}catch{return}a.length!==0&&b(`device:${r.id}`,()=>{Y({udid:r.id,displayName:r.displayName});for(let n of a)try{Ue(n.file,n.args,{timeout:3e4,stdio:"ignore"})}catch{}})}var oe={emulator:[".apk"],simulator:[".zip"]};async function Ee(e,r,t,a){if(e.kind==="package")return e;if(e.kind==="app_id"){let n=r.cloudUpload;if(!n)throw new Error(`${e.value} is an app id, which needs an account to download it. Log in, or pass a path to a local build instead.`);let s=await G({appId:e.value,baseUrl:n.baseUrl,auth:n.auth,...oe[t]?{accepts:oe[t]}:{},...a?{onProgress:a}:{}}),i=D(s.path);if(!i||i.kind==="app_id")throw new Error(`${s.name} is not a build this CLI can install (from ${e.value}).`);return i}try{let n=new u,s=await A(e.value,n),i=new K;await i.find(s)||a?.(`copying ${xe(e.value)} into the local app store\u2026`);let p=await i.put({key:s,sourcePath:e.value,source:"local"});return{...e,value:p.path}}catch{return e}}function Fe(e){b(`appium:${e}`,()=>{H({deviceClass:e,owner:process.pid})})}var k=class extends Error{constructor(r){super(r),this.name="MobileHostUnsupportedError"}},w=class extends Error{constructor(t,a){super(t);this.doctorText=a;this.name="MobilePreflightError"}};async function $e(e,r,t){let a=t.cloudUpload,n=await W({path:e,type:r,env:a.env,orgId:a.orgId,userId:a.userId,auth:a.auth,baseUrl:a.baseUrl,...t.onProgress?{onProgress:t.onProgress}:{}});if(Q(n)){t.onProgress?.(`app not uploaded \u2014 ${n.reason}`);return}return n.appId}var Ne="app must be a build (.apk for an emulator, .zip of the .app bundle for a simulator) or an app id from your cloud uploads \u2014 a package id names something already installed on one device, so it cannot be uploaded, exported as code, or run anywhere else.",ne=/\.(apk|zip)$/i;function D(e){let r=e.trim();if(C(r))return{kind:"app_id",value:r};let t=ne.exec(r)?.[1]?.toLowerCase();return t?{kind:t,value:r}:null}function _e(e){return!!e&&(ne.test(e)||C(e.trim()))}function Me(e){return e.filter(r=>r.required&&r.status==="fail")}function Be(e,r){return!!r&&e.platform===r.platform&&e.kind===r.kind&&(e.id===r.id||e.virtualName===r.id)}async function mr(e){let r=O();if(!r.supported)throw new k(r.reason);let t=e.appiumUrl??e.defaults?.appium_url,a=!!(e.agent||!e.interactive),n=M();a&&e.platform?.toLowerCase()!=="ios"&&((await n.status("emulator")).installed||await n.ensure("emulator",{automatic:!0,onProgress:e.onProgress}));let s=await j(e.platform,{appiumUrl:t});if(z(s)){let d=s.sections.flatMap(P=>Me(P.checks)).map(P=>P.label).join(", ");throw new w(`Mobile toolchain not ready (${d}). Run \`kane-cli doctor\` for details.`,L(s))}let i=await R({device:e.device,platform:e.platform,defaultTarget:e.defaults?.default_target,interactive:e.interactive}),o;if(i.ok)o=i.target;else if(i.reason==="needs-picker"&&e.pickTarget){let d=await e.pickTarget(i.candidates);if(!d)throw new Error("Target selection cancelled");o=d}else throw new Error(i.message);let p=B(o.platform);if(!p)throw new Error(`No provider for platform "${o.platform}"`);let l=N(o);if(!l)throw new Error(`No managed dependencies serve ${o.platform} ${o.kind} targets yet.`);try{await n.ensure(l,{automatic:a,onProgress:e.onProgress})}catch(d){throw d instanceof _?new w(d.message,d.message):d}let ie=o.state!=="ready"||re(o);o=await te(p,o,e.onProgress);let se=await q(l,{...t?{appiumUrl:t}:{},device:{udid:o.id,displayName:o.displayName},onProgress:e.onProgress});Fe(l);let x=Be(o,e.defaults?.default_target)?e.defaults?.default_app:void 0,m=e.app??(_e(x)?x:void 0);if(e.app&&!D(e.app))throw new Error(`${e.app}: ${Ne}`);let c=m?D(m):null,U=c?await Ee(c,e,l,e.onProgress):null,v=U?await p.ensureApp(o,U,e.onProgress):void 0,y=c?.kind==="app_id"?c.value:e.cloudUpload&&c&&m?await $e(c.value,l,e):void 0;await Se(p,o,{shutdown:ie,...v?{appPackage:v}:{}});let pe=$(o,v,{noReset:e.noReset??e.defaults?.no_reset,appiumUrl:se.url}),S=y??m;return{device:pe,target:o,provider:p,...y?{appId:y}:{},...S?{appRef:S}:{}}}export{We as a,te as b,k as c,w as d,Ne as e,D as f,_e as g,mr as h};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as $}from"./chunk-YCCUBQY4.js";import{a as U}from"./chunk-
|
|
2
|
+
import{a as $}from"./chunk-YCCUBQY4.js";import{a as U}from"./chunk-L7MXYCD7.js";import{a as k}from"./chunk-2WVKOZ6W.js";import{a as _}from"./chunk-TFPPEOAK.js";import{a as T}from"./chunk-G7VQCS4J.js";import{y as i}from"./chunk-27U4PLPX.js";import{a as O}from"./chunk-HCBYKLMW.js";import{a as u,b as s}from"./chunk-C44QQJR4.js";import{a as K}from"./chunk-6YGTRKDT.js";import{e as S}from"./chunk-UR6MHSHU.js";var e=S(K(),1);var r=S(O(),1);function V(n,x,c){return{id:n,label:`${x} (${n})`,isActive:n===c}}function se({resolver:n,currentProjectId:x,env:c,onSelect:w,onCancel:C}){let[q,B]=(0,e.useState)([]),[D,l]=(0,e.useState)(!0),[H,m]=(0,e.useState)(!1),[J,g]=(0,e.useState)(!1),[Q,P]=(0,e.useState)(null),[d,p]=(0,e.useState)("list"),[v,R]=(0,e.useState)(""),[E,h]=(0,e.useState)(null),[I,X]=(0,e.useState)(""),b=(0,e.useRef)(!1),A=(0,e.useRef)(!0);(0,e.useEffect)(()=>{if(!n){P("Login first to browse projects"),l(!1);return}let o=new AbortController,a=I.trim();return A.current?l(!0):a&&g(!0),m(!0),P(null),(async()=>{try{let t=n.cached??await n.resolve();if(!t){P("Login first to browse projects"),l(!1),m(!1),g(!1);return}let L=T(c),F=new k(L.tmsBaseUrl,t.username,t.access_key),f=!0,N=0,G=a?{signal:o.signal,name:a,perPage:10}:{signal:o.signal,perPage:10};for await(let y of F.listProjectsStream(G)){if(f&&(l(!1),g(!1),A.current=!1,f=!1),y.totalLoaded===0&&y.done&&N===0&&!a){b.current=!0,p("naming"),m(!1);return}let M=y.projects.map(j=>V(j.project_id,j.name,x));B(N===0?M:j=>[...j,...M]),N+=y.projects.length,y.done&&m(!1)}f&&(l(!1),m(!1),g(!1))}catch(t){if(t?.name==="AbortError")return;P(t instanceof Error?t.message:String(t)),l(!1),m(!1),g(!1)}})(),()=>o.abort()},[n,x,c,I]);let Y=(0,e.useCallback)(o=>{let a=o.trim();if(!a){h("Name cannot be empty");return}h(null),p("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let t=n.cached??await n.resolve();if(!t)throw new Error("Not authenticated");let L=T(c),f=await new k(L.tmsBaseUrl,t.username,t.access_key).createProject(a);w(f.id,f.name)}catch(t){h(t instanceof Error?t.message:String(t)),p("naming")}})()},[n,c,w]),z=(0,e.useCallback)(()=>{R(""),h(null),b.current?C():p("list")},[C]);return d==="naming"||d==="creating"?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(s,{color:i.orange,bold:!0,children:"Create new project"}),b.current&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"No projects yet \u2014 let's create one."})}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(s,{color:i.dim,children:"Name: "}),d==="naming"?(0,r.jsx)($,{value:v,onChange:o=>{R(o),E&&h(null)},onSubmit:Y,onCancel:z}):(0,r.jsx)(s,{children:v})]}),E&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.red,children:E})}),d==="creating"&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"Creating..."})}),d==="naming"&&(0,r.jsx)(_,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:b.current?"cancel":"back"})]}):(0,r.jsx)(U,{title:"Projects",items:q,loading:D,loadingMore:H,searching:J,preserveSelectionById:!0,onSearch:X,error:Q,itemNoun:"projects",onTab:()=>{b.current=!1,p("naming")},extraHint:"tab to create new",onSelect:o=>{let a=o.label.replace(` (${o.id})`,"");w(o.id,a)},onCancel:C})}export{V as a,se as b};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{
|
|
2
|
+
import{c as u,d as p}from"./chunk-OMQCD3KR.js";import{spawn as h}from"child_process";var k=new Set(["progress","ask_user","graph_query","ingest_request","proposal","design","error","done","reasoning_delta","reasoning_done","tool_activity","decision_activity","text_delta","usage","receipt","chat_ops","session_paused","session_complete","state_checkpoint"]);function v(g,n={}){let a=n.spawnCmd!==void 0?n.spawnCmd:u();if(!a)throw new Error("assurance agent not found \u2014 your platform package may be missing; reinstall kane-cli (npm i -g @testmuai/kane-cli)");let f=g.source.images?.length??0;a.tier==="dev-python"&&f>0&&n.onWarn?.("warn: development agent in use \u2014 if image citations are missing, update the agent package");let t=h(a.cmd,a.args,{stdio:["pipe","pipe","pipe"],env:p(g.session_id,n.auth)});if(t.stdin.write(JSON.stringify(g)+`
|
|
3
3
|
`),n.onStderr){let e="";t.stderr.on("data",r=>{e+=r.toString("utf8");let i;for(;(i=e.indexOf(`
|
|
4
4
|
`))>=0;){let o=e.slice(0,i);e=e.slice(i+1),o.trim()&&n.onStderr(o)}})}let d=new Promise(e=>{t.on("exit",(r,i)=>e({code:r,signal:i}))});async function*m(){let e="",r=!1;for await(let i of t.stdout){e+=i.toString("utf8");let o;for(;(o=e.indexOf(`
|
|
5
5
|
`))>=0;){let l=e.slice(0,o).trim();if(e=e.slice(o+1),!l)continue;let c;try{c=JSON.parse(l)}catch{n.onWarn?.(`agent: skipping malformed line: ${l.slice(0,120)}`);continue}let s=c;if(!s||typeof s!="object"||!k.has(s.type)){n.onWarn?.(`agent: skipping unknown event type "${s&&typeof s=="object"?String(s.type??"?"):"?"}"`);continue}if(yield s,s.type==="done"){r=!0;break}}if(r)break}await d.catch(()=>{})}return{events:m(),send:e=>{t.stdin&&!t.stdin.destroyed&&t.stdin.write(JSON.stringify(e)+`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as l}from"./chunk-RZ4F3BHX.js";import{a,c,f as o}from"./chunk-
|
|
2
|
+
import{a as l}from"./chunk-RZ4F3BHX.js";import{a,c,f as o}from"./chunk-27U4PLPX.js";import{readFileSync as f,writeFileSync as d,mkdirSync as h,realpathSync as g}from"fs";import{join as y}from"path";var C="npm install -g @testmuai/kane-cli@latest",b="brew upgrade lambdatest/kane/kane-cli";function w(){try{let t=process.argv[1];if(t&&g(t).includes("/Cellar/"))return b}catch{}return C}var m=y(c,"version-check.json"),S=1440*60*1e3;function k(){try{let t=JSON.parse(f(m,"utf-8"));if(Date.now()-t.checkedAt<S)return t}catch{}return null}function A(t){try{h(c,{recursive:!0}),d(m,JSON.stringify({latest:t,checkedAt:Date.now()}))}catch{}}function u(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);for(let s=0;s<3;s++){let e=(n[s]??0)-(i[s]??0);if(e!==0)return e}return 0}function p(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);return(n[0]??0)!==(i[0]??0)?"major":(n[1]??0)!==(i[1]??0)?"minor":"patch"}async function j(){try{let t=k();if(t)return u(a,t.latest)>0?{current:a,latest:t.latest,severity:p(a,t.latest)}:null;let r=new AbortController,i=setTimeout(()=>r.abort(),5e3),n=await l(o,{headers:{Accept:"application/json"},signal:r.signal});if(clearTimeout(i),!n.ok)return null;let e=(await n.json())["dist-tags"]?.latest;return e?(A(e),u(a,e)>0?{current:a,latest:e,severity:p(a,e)}:null):null}catch{return null}}export{w as a,u as b,p as c,j as d};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as b}from"./chunk-
|
|
2
|
+
import{a as b}from"./chunk-TFPPEOAK.js";import{n as d,y as o}from"./chunk-27U4PLPX.js";import{a as L}from"./chunk-HCBYKLMW.js";import{a as u,b as c,i as A}from"./chunk-C44QQJR4.js";import{a as D}from"./chunk-6YGTRKDT.js";import{e as h}from"./chunk-UR6MHSHU.js";var x=h(D(),1);import{readdirSync as N,mkdirSync as B,statSync as k}from"fs";import{join as P}from"path";var r=h(L(),1);function O(n){try{return N(n).filter(l=>{try{return k(P(n,l)).isDirectory()}catch{return!1}})}catch{return[]}}function E(n,l,f,v){return{name:n,path:l,label:n,isActive:v}}function H({currentPath:n,onSelect:l,onCancel:f}){let s=O(d).map(i=>{let e=P(d,i);return E(i,e,n,e===n)}),p=!n,R=s.length+2,[a,C]=(0,x.useState)(()=>{if(p)return 0;let i=s.findIndex(e=>e.isActive);return i>=0?i+1:0}),[T,I]=(0,x.useState)(!1),[S,g]=(0,x.useState)("");return A((i,e)=>{if(T){if(e.escape){I(!1),g("");return}if(e.return){let t=S.trim();if(t){let m=P(d,t);B(m,{recursive:!0}),l(m),f()}return}if(e.backspace||e.delete){g(t=>t.slice(0,-1));return}i&&!e.ctrl&&!e.meta&&g(t=>t+i);return}if(e.escape){f();return}if(e.upArrow){C(t=>Math.max(0,t-1));return}if(e.downArrow){C(t=>Math.min(R-1,t+1));return}if(e.return){if(a===0){p||l(""),f();return}if(a===s.length+1){B(d,{recursive:!0}),I(!0),g("");return}let t=s[a-1];t&&!t.isActive&&l(t.path),f();return}}),T?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:o.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(c,{color:o.orange,bold:!0,children:"Chrome Profile \u203A New"}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(c,{color:o.secondary,children:"Name: "}),(0,r.jsx)(c,{children:S}),(0,r.jsx)(c,{color:o.dim,children:"\u2588"})]}),(0,r.jsx)(b,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:"back"})]}):(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:o.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(c,{color:o.orange,bold:!0,children:"Chrome Profile"}),(0,r.jsxs)(u,{flexDirection:"column",marginTop:1,children:[(0,r.jsxs)(c,{color:p?o.green:a===0?o.orange:o.dim,children:[a===0?"\u276F ":" ","Use temporary (no profile)",p?" \u25CF active":""]}),s.map((i,e)=>{let m=e+1===a,w=m?"\u276F ":" ",y=i.isActive?o.green:m?o.orange:void 0;return(0,r.jsxs)(c,{color:y,children:[w,i.label,i.isActive?" \u25CF active":""]},i.name)}),(0,r.jsxs)(c,{color:a===s.length+1?o.orange:o.dim,children:[a===s.length+1?"\u276F ":" ","+ Create new"]})]}),(0,r.jsx)(b,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}export{O as a,E as b,H as c};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{
|
|
3
|
-
`)}let i=C(e);if(f(i)){let o="python";try{let c=new
|
|
2
|
+
import{b as p,c as E,d as j,e as y,f as M,g as C,i as A,l as D,m as F,q as T,s as $,t as O}from"./chunk-GPG3FIN3.js";import{c as H,d as z}from"./chunk-2YQ6TW77.js";import{a as k}from"./chunk-T5Y6MOLM.js";import{p as B,q as R}from"./chunk-56PAQAX5.js";import{a as P}from"./chunk-27U4PLPX.js";import{e as q}from"./chunk-UR6MHSHU.js";import{existsSync as f,mkdirSync as V,readFileSync as Z,renameSync as N,writeFileSync as K}from"fs";import{join as Q}from"path";function fe(e){D(p(e));let t=p(e);if(!f(t))return;let n=Q(t,"meta.json"),r=y(e);if(f(n)&&!f(r))try{V(j(e),{recursive:!0}),N(n,r)}catch(o){process.stderr.write(`warn: meta.json migration failed: ${o.message}
|
|
3
|
+
`)}let i=C(e);if(f(i)){let o="python";try{let c=new k().load();c.code_export?.language&&(o=c.code_export.language)}catch{}let a=M(e,"playwright",o);if(!f(a))try{N(i,a)}catch(c){process.stderr.write(`warn: generated-code migration failed: ${c.message}
|
|
4
4
|
`)}}if(f(r))try{let o=JSON.parse(Z(r,"utf8"));"md5sum"in o&&(delete o.md5sum,K(r,JSON.stringify(o,null,2)+`
|
|
5
5
|
`,"utf8"))}catch(o){process.stderr.write(`warn: meta.json md5sum strip failed: ${o.message}
|
|
6
|
-
`)}}async function ye(e){if(!e.isInteractive)return{recovered:!1};if(W(e.creds))return{recovered:!1};let{SingleShotApp:t}=await import("./SingleShotApp-
|
|
6
|
+
`)}}async function ye(e){if(!e.isInteractive)return{recovered:!1};if(W(e.creds))return{recovered:!1};let{SingleShotApp:t}=await import("./SingleShotApp-XOKVOM7C.js"),{ScrollbackProvider:n}=await import("./scrollback-JLPJR25X.js"),{render:r}=await import("./build-JIKYOZUH.js"),i=await import("./react-QWOAB3TB.js"),o={current:null},a={current:!1},{waitUntilExit:c,unmount:l}=r(i.default.createElement(n,null,i.default.createElement(t,{resultRef:o,mode:"login",loginCompleteRef:a})),{exitOnCtrlC:!1});R(()=>l()),await c();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),a.current?{recovered:!0}:(B(0,"Startup gate cancelled"),{recovered:!1})}function W(e){let t=e.getActiveProfile(),n=e.getDefaultEnv();if(!t||!!!(e.loadBasicAuth(t,n)||e.loadCredentials(t,n)))return!1;let i=e.loadProfileConfig(t,n)??{};return!!i.project_id&&!!i.folder_id}var J=q(H(),1);import{existsSync as v,readFileSync as U,readdirSync as X,statSync as Y}from"fs";import{dirname as ee,isAbsolute as te,join as g,relative as x,resolve as re,sep as h}from"path";import{createHash as ne}from"crypto";var S="testmd-bundle.json",d=class extends Error{constructor(t){super(t),this.name="BundleUsageError"}},_=e=>e.split(h).join("/");function I(e){if(!v(e))return[];let t=[];for(let n of X(e).sort()){let r=g(e,n);Y(r).isDirectory()?t.push(...I(r)):t.push(r)}return t}function se(e){let t=e.map(r=>ee(r).split(h)),n=t[0];for(let r of t.slice(1)){let i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;n=n.slice(0,i)}return n.join(h)||h}function ie(e){for(let t of e){let n=F(t,U(t,"utf8"));for(let r of n.steps)if(r.body.kind==="import_ref"&&te(r.body.path))throw new d(`bundle sync: absolute @import is not portable after unzip: ${t} step ${r.index} (@import ${r.body.path})`)}}function G(e){let t=re(e),n=T(t);if(!n?.commit_id||!n?.test_id)throw new d(`bundle sync: ${t} is not authored \u2014 run \`kane-cli testmd run\` first (output-<stem>/.internal/meta.json needs commit_id + test_id)`);let r;try{r=O(t)}catch(s){throw s instanceof $?new d(`bundle sync: ${s.message}`):s}let i=[t];for(let s of r.steps)for(let u of s.trace.slice(1))i.includes(u.file)||i.push(u.file);ie(i);let o=[];for(let s of r.unitFiles){if(s.file===t)continue;let u=p(s.file);o.includes(u)||o.push(u)}let a=[...i],c=s=>{v(s)&&a.push(s)};c(E(t)),a.push(y(t)),c(g(p(t),".internal","execution.json")),a.push(...I(A(t)));for(let s of o)c(g(s,"Result.md")),a.push(...I(g(s,".internal","steps")));let l=se(a);if(v(g(l,S)))throw new d(`bundle sync: a real file named ${S} exists at the zip root (${l}) \u2014 it would collide with the generated manifest`);let b=a.map(s=>{let u=U(s);return{abs:s,rel:_(x(l,s)),sha256:ne("sha256").update(u).digest("hex"),bytes:u.length}}).sort((s,u)=>s.rel<u.rel?-1:1),m=_(x(l,t)),L={schema_version:2,entry:m,commit_id:n.commit_id,test_id:n.test_id,testcase_id:n.testcase_id??null,project_id:n.project_id??null,folder_id:n.folder_id??null,org_id:n.org_id??null,created_at:new Date().toISOString(),producer:{name:"kane-cli",version:P},files:b.map(s=>({path:s.rel,sha256:s.sha256,bytes:s.bytes})),units:r.unitFiles.filter(s=>s.file!==t).map(s=>({path:_(x(l,s.file)),kind:s.kind}))};return{zipRoot:l,entry:m,files:b,manifest:L}}var w=e=>e instanceof Error?e.message:String(e);function oe(e){return new Promise((t,n)=>{let r=(0,J.default)("zip",{zlib:{level:6}}),i=[];r.on("data",o=>i.push(o)),r.on("error",n),r.on("end",()=>t(Buffer.concat(i))),r.append(JSON.stringify(e.manifest,null,2)+`
|
|
7
7
|
`,{name:S});for(let o of e.files)r.file(o.abs,{name:o.rel});r.finalize()})}async function ae(e){let{plan:t,controller:n,testId:r,sessionId:i,commitId:o}=e,a;try{a=await oe(t)}catch(l){return{ok:!1,stage:"zip",error:w(l)}}let c;try{let l={key:"testmd",content_type:"application/zip",filename:`${o}-testmd.zip`},m=(await n.getPresignedUrls(r,i,[l])).urls?.testmd?.upload_url;if(!m)return{ok:!1,stage:"presign",error:"presign response missing testmd upload_url"};c=m}catch(l){return{ok:!1,stage:"presign",error:w(l)}}try{await z(c,a,"application/zip")}catch(l){return{ok:!1,stage:"upload",error:w(l)}}return{ok:!0,bytes:a.length}}async function Ee(e){let t;try{t=G(e.sourcePath)}catch(n){return n instanceof d?{ok:!1,stage:"collect",error:n.message}:{ok:!1,stage:"collect",error:w(n)}}return ae({...e,plan:t})}function je(e){return e.shouldUploadPipeline&&e.uploadSucceeded&&!!e.metaCommitId&&!!e.metaTestId}export{fe as a,ye as b,Ee as c,je as d};
|