@testmuai/kane-cli 0.6.11 → 0.7.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-D66CACLX.js +8 -0
- package/dist/{ChromeProfilePicker-54CAJDUF.js → ChromeProfilePicker-4CDSPBWL.js} +1 -1
- package/dist/{CliFeedbackPrompt-TCAH4AHL.js → CliFeedbackPrompt-TLRVBA4E.js} +1 -1
- package/dist/{CliUploadProgress-UURZ63VQ.js → CliUploadProgress-WGGFLUSF.js} +1 -1
- package/dist/{ConfigView-5QGB7MUS.js → ConfigView-DBANTBXC.js} +1 -1
- package/dist/EvidenceViewOffer-DNCQ3A6R.js +2 -0
- package/dist/{FolderPicker-Y5MAYFIJ.js → FolderPicker-W7RCIFEL.js} +1 -1
- package/dist/{HelpView-S3GJGSCE.js → HelpView-FBCX32U7.js} +1 -1
- package/dist/{InfoBox-LYTNNMVJ.js → InfoBox-KK2ICVS4.js} +1 -1
- package/dist/{LinksBox-5MSEKNSV.js → LinksBox-KKRANMR3.js} +1 -1
- package/dist/{ProfilesView-LTHE5UIO.js → ProfilesView-DGPXSAQN.js} +1 -1
- package/dist/{ProjectPicker-XMXIGHSE.js → ProjectPicker-ESQSL4TT.js} +1 -1
- package/dist/{SaveSessionPrompt-VQDEA4WA.js → SaveSessionPrompt-AQGP5W6E.js} +1 -1
- package/dist/SingleShotApp-SMCAIKCE.js +2 -0
- package/dist/{SummaryBox-WWF3G263.js → SummaryBox-BFZJW2KK.js} +1 -1
- package/dist/TestMdRunView-FMKZJ3A3.js +2 -0
- package/dist/{WhoamiView-PDURYP7E.js → WhoamiView-JABY3I5Q.js} +1 -1
- package/dist/{auth-I4RB4KO3.js → auth-76LVI6B5.js} +1 -1
- package/dist/bind-AACBTSAA.js +12 -0
- package/dist/bootstrap-CNOZ5VRB.js +2 -0
- package/dist/bridge-T4HL4TG7.js +2 -0
- package/dist/{changelog-OKYH4F7I.js → changelog-PSWPPOAF.js} +1 -1
- package/dist/chat-committer-4BQBOKI4.js +2 -0
- package/dist/chat-controller-NNTMKEPG.js +2 -0
- package/dist/{chunk-NUQ423YE.js → chunk-2KBD6JZX.js} +1 -1
- package/dist/chunk-2SREGETM.js +4 -0
- package/dist/chunk-2XGDWUJ5.js +2 -0
- package/dist/{chunk-MJBCBQC2.js → chunk-322JEJEH.js} +1 -1
- package/dist/{chunk-SURF5Z7Y.js → chunk-323MLBYA.js} +1 -1
- package/dist/{chunk-HOQEMPMQ.js → chunk-33QXD75Y.js} +2 -2
- package/dist/{chunk-K7USHLVZ.js → chunk-36OC3TFE.js} +1 -1
- package/dist/{chunk-ZNHXIRCM.js → chunk-3FN5VJMV.js} +2 -2
- package/dist/chunk-3LWTUMDG.js +2 -0
- package/dist/chunk-3STZLM5J.js +4 -0
- package/dist/{chunk-KXUSG5ZI.js → chunk-4OPQJ7PE.js} +1 -1
- package/dist/chunk-5JTUL6XL.js +2 -0
- package/dist/{chunk-FMR2KPSK.js → chunk-5KFS3GAZ.js} +1 -1
- package/dist/{chunk-XZRIQ3GF.js → chunk-6HEGD6H2.js} +1 -1
- package/dist/{chunk-XWSAKVEY.js → chunk-6UJDOAYR.js} +2 -2
- package/dist/{chunk-QJIJC3KC.js → chunk-73C4PRYU.js} +1 -1
- package/dist/chunk-AAONIIQV.js +6 -0
- package/dist/chunk-AH7ZZIZY.js +2 -0
- package/dist/chunk-AM5S4KG4.js +6 -0
- package/dist/{chunk-7MRBMDZ5.js → chunk-APAIWBIH.js} +1 -1
- package/dist/{chunk-HMM5FJJO.js → chunk-BAL64WSI.js} +1 -1
- package/dist/chunk-BB2W35TW.js +2 -0
- package/dist/chunk-BQHKBOSF.js +11 -0
- package/dist/chunk-C4G7RVJ6.js +2 -0
- package/dist/{chunk-NTGYFYBP.js → chunk-CDQX6HGJ.js} +1 -1
- package/dist/{chunk-KSZ72BSC.js → chunk-CSQ46PJ7.js} +1 -1
- package/dist/chunk-DQ54MH7F.js +13 -0
- package/dist/{chunk-3AZTXJY4.js → chunk-DXV6MBTD.js} +1 -1
- package/dist/chunk-DYW5C6II.js +2 -0
- package/dist/{chunk-LHDNJJGE.js → chunk-F6ZOJXYU.js} +1 -1
- package/dist/chunk-GVIPTX6T.js +6 -0
- package/dist/chunk-GW5DWAXY.js +2 -0
- package/dist/chunk-HJERKSBK.js +349 -0
- package/dist/{chunk-POYZ6SAI.js → chunk-HPMS5KO6.js} +2 -2
- package/dist/{chunk-3RZ63RBO.js → chunk-IBNC444G.js} +1 -1
- package/dist/{chunk-73OQDAXF.js → chunk-IQDWBTRJ.js} +1 -1
- package/dist/chunk-IXVOXJP6.js +6 -0
- package/dist/{chunk-IQODWB32.js → chunk-JEUA4UWK.js} +1 -1
- package/dist/{chunk-GLA6QL3T.js → chunk-JKTFTF24.js} +1 -1
- package/dist/{chunk-KHJXOFDM.js → chunk-JRMDGLLT.js} +1 -1
- package/dist/{chunk-GIMTSDNC.js → chunk-KNDSQ4PS.js} +1 -1
- package/dist/chunk-KRXSXQBU.js +12 -0
- package/dist/{chunk-4CJ55EUY.js → chunk-KT6G7AF2.js} +1 -1
- package/dist/chunk-KVQOBPAZ.js +2 -0
- package/dist/chunk-L2TV4G56.js +4 -0
- package/dist/{chunk-6HYW5RFX.js → chunk-L4JIMNKW.js} +1 -1
- package/dist/{chunk-FSB3FTIQ.js → chunk-L7VREJTG.js} +1 -1
- package/dist/{chunk-MRP54NCJ.js → chunk-LQZ2BU7Q.js} +1 -1
- package/dist/{chunk-EAUUULJQ.js → chunk-LR5XO2KD.js} +1 -1
- package/dist/chunk-M7WQM4UA.js +4 -0
- package/dist/{chunk-KHQHVSZ6.js → chunk-NAC7SFBE.js} +1 -1
- package/dist/{chunk-DSOA6L73.js → chunk-NAE7MBR2.js} +3 -3
- package/dist/{chunk-NTNAHN25.js → chunk-NBKQT7LJ.js} +1 -1
- package/dist/{chunk-7NLQ3QQD.js → chunk-NJPTOKW5.js} +1 -1
- package/dist/{chunk-RFJAYURU.js → chunk-NOCIMJSN.js} +1 -1
- package/dist/chunk-NRC2G4Y5.js +5 -0
- package/dist/{chunk-H2W2UNTN.js → chunk-NRTHYROA.js} +1 -1
- package/dist/chunk-O56PUUNL.js +9 -0
- package/dist/chunk-OHRS3H7Z.js +5 -0
- package/dist/{chunk-FCHTL74E.js → chunk-PMHJRT3A.js} +1 -1
- package/dist/{chunk-GRB66C5S.js → chunk-QROUKGKU.js} +1 -1
- package/dist/{chunk-XXMNUJX4.js → chunk-R2RGSO4B.js} +1 -1
- package/dist/{chunk-MFOH7EYR.js → chunk-RNSSM2BK.js} +1 -1
- package/dist/chunk-SE6WNCYU.js +4 -0
- package/dist/{chunk-ICGHBZFZ.js → chunk-SRDHPKJT.js} +1 -1
- package/dist/chunk-SWESH2J7.js +10 -0
- package/dist/chunk-SY3HLQMV.js +4 -0
- package/dist/chunk-T63R6QT4.js +4 -0
- package/dist/{chunk-ZP4S5WGW.js → chunk-UBFKZEX3.js} +2 -2
- package/dist/chunk-UI7KULSI.js +7 -0
- package/dist/chunk-UPPEOQJQ.js +3 -0
- package/dist/chunk-URQUQWGW.js +62 -0
- package/dist/chunk-UX2B7L6K.js +2 -0
- package/dist/{chunk-XSKLH2MC.js → chunk-V36ATG7A.js} +2 -2
- package/dist/chunk-VGFTNLQQ.js +2 -0
- package/dist/{chunk-RGJIRS3B.js → chunk-W5DOU2DV.js} +1 -1
- package/dist/chunk-W6VD2XFO.js +19 -0
- package/dist/chunk-WJ5HDEVH.js +6 -0
- package/dist/chunk-WWNSD6FA.js +6 -0
- package/dist/{chunk-ZPCU6546.js → chunk-X3ICV5M5.js} +1 -1
- package/dist/chunk-XDHZMCTA.js +4 -0
- package/dist/{chunk-2WKX3RMA.js → chunk-XVDJ423L.js} +1 -1
- package/dist/chunk-ZLCZDAEX.js +6 -0
- package/dist/{chunk-NJAHRITS.js → chunk-ZM5PVRJK.js} +1 -1
- package/dist/committer-2EJPVVCQ.js +2 -0
- package/dist/{config-QISRENF5.js → config-R3GF2FZA.js} +1 -1
- package/dist/cover-cmd-TXICWHUU.js +3 -0
- package/dist/{credentials-OGLK7MPV.js → credentials-XN4ROCQ3.js} +1 -1
- package/dist/design-committer-BQUWD6AC.js +2 -0
- package/dist/docx-convert-ZBVQO2LG.js +1 -1
- package/dist/dossier-QZV74XOS.js +3 -0
- package/dist/evidence-V23FPVXQ.js +2 -0
- package/dist/evolve-cmd-PZCPXDMR.js +2 -0
- package/dist/{exit-manager-MXUD7GQ7.js → exit-manager-HNFATGSM.js} +1 -1
- package/dist/explain-UE4IACQH.js +2 -0
- package/dist/{explain-cmd-NWIYH5MI.js → explain-cmd-RZW6QJYM.js} +1 -1
- package/dist/{explain-cmd-DBUTPZHA.js → explain-cmd-X7JZLSZZ.js} +1 -1
- package/dist/extract-bind-BFY7IRL4.js +10 -0
- package/dist/extract-cmd-U3MGK2LP.js +6 -0
- package/dist/feeder-XGTFV7TZ.js +2 -0
- package/dist/gaps-cmd-BWCRLLBK.js +3 -0
- package/dist/{gate-B6C6KLFA.js → gate-YHBPWEM5.js} +1 -1
- package/dist/{generate-headless-TUA3HGRX.js → generate-headless-BSTDLZZY.js} +2 -2
- package/dist/{headless-io-PWW6YKH2.js → headless-io-BL3TEAX5.js} +1 -1
- package/dist/index.js +67 -68
- package/dist/ingest-AL6CABJT.js +2 -0
- package/dist/ingest-cmd-O6OWWZT4.js +2 -0
- package/dist/interactive-bind-43HGDF5K.js +24 -0
- package/dist/lifecycle-cmd-D6TVTYRK.js +2 -0
- package/dist/list-cmd-XCAV2FKA.js +3 -0
- package/dist/{list-commands-F53ZNYOZ.js → list-commands-747UTUSS.js} +1 -1
- package/dist/locks-cmd-QAULI5LV.js +2 -0
- package/dist/logical-ids-4G4FAHNJ.js +2 -0
- package/dist/login-flow-CV76ENHV.js +2 -0
- package/dist/maintenance-cmd-ZRB4NTGG.js +2 -0
- package/dist/next-TRSKMBO5.js +2 -0
- package/dist/paths-JCYX6UWL.js +2 -0
- package/dist/{persist-recorded-session-5ZFS5SMZ.js → persist-recorded-session-MDPWWUA7.js} +1 -1
- package/dist/phase-seed-52LRE3LH.js +2 -0
- package/dist/pipeline-LM5JAK7F.js +2 -0
- package/dist/readmodel-X7L7W2BA.js +2 -0
- package/dist/reconcile-cmd-DGCSDML6.js +2 -0
- package/dist/{recording-banner-ZZUF2MGT.js → recording-banner-TALO7PUR.js} +1 -1
- package/dist/records-5SVUXJBW.js +2 -0
- package/dist/{require-project-folder-NQBZFUPF.js → require-project-folder-R347LFDQ.js} +1 -1
- package/dist/revert-DXXYXJGN.js +2 -0
- package/dist/review-cmd-2QF5HTI7.js +4 -0
- package/dist/run-52UIBPXD.js +2 -0
- package/dist/run-VRVH4VO3.js +2 -0
- package/dist/{run-test-md-XOSCYVSS.js → run-test-md-DFNIGYB7.js} +2 -2
- package/dist/sessions-BLXZVK5U.js +2 -0
- package/dist/sessions-cmd-AQWLL5ZN.js +25 -0
- package/dist/{skill-installer-VYIIWAK7.js → skill-installer-ANXTCXQV.js} +1 -1
- package/dist/spawner-AH5FTUYU.js +2 -0
- package/dist/structured-answers-QHFGZPSS.js +5 -0
- package/dist/tcg-generate-WKCBBKI5.js +2 -0
- package/dist/testmd-actions-RPYG6TJG.js +2 -0
- package/dist/token-refresh-NIDUOTRM.js +2 -0
- package/dist/trust-gate-EX7R2P4Y.js +2 -0
- package/dist/{validate-basic-LP3S5PK7.js → validate-basic-O2DP2XJL.js} +1 -1
- package/dist/verdicts-TJH3O5UW.js +2 -0
- package/dist/{version-check-XP62HWLJ.js → version-check-RNR3JCQ5.js} +1 -1
- package/dist/{view-cmd-GQBFCPDL.js → view-cmd-YSEGA5PI.js} +1 -1
- package/dist/walk-session-HXW4OSA2.js +2 -0
- package/dist/with-telemetry-PNP6CAVM.js +2 -0
- package/package.json +6 -6
- package/dist/ChatSurface-TZ554O4U.js +0 -8
- package/dist/EvidenceViewOffer-SSAM4RRP.js +0 -2
- package/dist/SingleShotApp-A6PCNPLM.js +0 -2
- package/dist/TestMdRunView-MQ7ZPFN2.js +0 -2
- package/dist/bind-QJT726NE.js +0 -6
- package/dist/bootstrap-566PPFCC.js +0 -2
- package/dist/bridge-QCMEOQDD.js +0 -2
- package/dist/chat-committer-OS7ULZMH.js +0 -2
- package/dist/chat-controller-QLORQWJZ.js +0 -2
- package/dist/chunk-3C5GMAM4.js +0 -2
- package/dist/chunk-54IB6CXK.js +0 -5
- package/dist/chunk-54VQ46U2.js +0 -14
- package/dist/chunk-55Y65VPA.js +0 -347
- package/dist/chunk-6W6AIDLJ.js +0 -4
- package/dist/chunk-7E24OCGX.js +0 -2
- package/dist/chunk-7YPK6EDR.js +0 -4
- package/dist/chunk-FHKDTM5L.js +0 -6
- package/dist/chunk-FRBYGSGJ.js +0 -4
- package/dist/chunk-GG43HSU2.js +0 -3
- package/dist/chunk-HLRLP6TQ.js +0 -2
- package/dist/chunk-J2KSZUOO.js +0 -4
- package/dist/chunk-J44RN3FB.js +0 -2
- package/dist/chunk-JXKRO2ZJ.js +0 -13
- package/dist/chunk-M5PJQ5Y3.js +0 -6
- package/dist/chunk-MMPFU2YC.js +0 -2
- package/dist/chunk-MR7CX5VT.js +0 -9
- package/dist/chunk-MTNUZEO7.js +0 -12
- package/dist/chunk-OGWC3J3C.js +0 -4
- package/dist/chunk-RN4OSVTG.js +0 -6
- package/dist/chunk-RZJVQUBA.js +0 -61
- package/dist/chunk-V3UE6RJP.js +0 -2
- package/dist/chunk-Y5RNCJAN.js +0 -19
- package/dist/chunk-YSSTGJ7O.js +0 -7
- package/dist/chunk-Z2JSEL3I.js +0 -4
- package/dist/cover-cmd-SV3I23UM.js +0 -2
- package/dist/dossier-KJSJPWOW.js +0 -3
- package/dist/evidence-HDD7T7DX.js +0 -2
- package/dist/evolve-cmd-UE2BIMXK.js +0 -2
- package/dist/explain-EBVIUS2X.js +0 -2
- package/dist/extract-bind-6MQYKN3G.js +0 -8
- package/dist/extract-cmd-2RUIWFZG.js +0 -6
- package/dist/gaps-cmd-CKCHH3HQ.js +0 -2
- package/dist/ingest-FIIO67ZN.js +0 -2
- package/dist/ingest-cmd-CRMY46YC.js +0 -7
- package/dist/interactive-bind-53FCRK34.js +0 -10
- package/dist/lifecycle-cmd-32LG364Q.js +0 -2
- package/dist/list-cmd-UTZ2PQUK.js +0 -3
- package/dist/logical-ids-I7B3VJEH.js +0 -2
- package/dist/login-flow-D7KBR7XR.js +0 -2
- package/dist/maintenance-cmd-BZAGSYGI.js +0 -2
- package/dist/pipeline-MX3ZR5B3.js +0 -2
- package/dist/readmodel-S5RAQH3F.js +0 -2
- package/dist/reconcile-cmd-4377PWF5.js +0 -2
- package/dist/revert-RQJE56HF.js +0 -2
- package/dist/review-cmd-7LXGYHHQ.js +0 -4
- package/dist/run-2AIQUJ55.js +0 -2
- package/dist/run-YH5SCBYD.js +0 -2
- package/dist/sessions-cmd-DTQYDZNT.js +0 -23
- package/dist/spawner-7KXVKAD5.js +0 -2
- package/dist/tcg-generate-U6OCCS2E.js +0 -2
- package/dist/testmd-actions-RPALXRZK.js +0 -2
- package/dist/token-refresh-S7CYBZTE.js +0 -2
- package/dist/walk-session-YIKHE6PT.js +0 -2
- /package/dist/{chunk-BC7UVJJB.js → chunk-CH273NAE.js} +0 -0
package/dist/chunk-JXKRO2ZJ.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as Qe,g as qe}from"./chunk-FCMLIK7P.js";import{b as w,c as Q,d as Ge,f as q,g as ee}from"./chunk-CJJXT5DO.js";import{a as Ke,e as P,f as j,g as We,h as H,i as D,j as Je}from"./chunk-ZPDM6FO7.js";import{a as G}from"./chunk-BC7UVJJB.js";import{d as et}from"./chunk-NVGBE2DR.js";import{a as F,b as L,d as Ye}from"./chunk-EHN5HTUD.js";import{a as R,b as y}from"./chunk-L5LI2JF4.js";import{a as b}from"./chunk-7E24OCGX.js";import{b as Y}from"./chunk-FRBYGSGJ.js";import{a as Ze}from"./chunk-6HYW5RFX.js";import{c as z,e as U}from"./chunk-J2KSZUOO.js";import{d as te,f as Xe}from"./chunk-5YPBPZUR.js";import{a as Ue}from"./chunk-KHJXOFDM.js";import{a as ze}from"./chunk-MMPFU2YC.js";function $(t){if(t===null)return"broken";let e=Math.floor(t/100);return e===1?"passed":e===7?"failed":e===2?"skipped":"broken"}var C={failed:3,broken:2,passed:1,skipped:0};function re(t){let e="skipped";for(let r of t)C[r]>C[e]&&(e=r);return e}import{createHash as Dt}from"crypto";import{basename as Ot}from"path";function ne(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return e.length>0?e:"session"}function ie(t){return Dt("sha256").update(t).digest("hex").slice(0,8)}function oe(t){let e=Ot(t).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${ne(e)}-${ie(t)}`}function se(t,e){return`${ne(t)}-${ie(e)}`}function ae(t){let e={};for(let[r,n]of Object.entries(t))typeof n=="string"&&n.length>0&&(e[r]=n);return e}var At={darwin:"macOS",linux:"Linux",win32:"Windows"};function ce(t){return At[t]??t}function de(t,e){let r={},n=(i,o)=>{o!==void 0&&o!==""&&(r[i]=o)};return n("model",e.model),n("os",t.os),n("browser",t.browser),n("browser_version",t.browser_version),n("resolution",t.resolution),n("platform",e.platform),n("platform_type",e.platform_type),n("run_kind",e.run_kind),n("os_version",t.os_version),t.device!==void 0&&t.device!==""?r.device=t.device:e.platform_type&&e.platform_type!=="web"&&(r.device=null),r}function Ft(t,e){return{pack_test_dir:t,ordinal_offset:e}}import{promises as _}from"fs";import{join as I}from"path";function ue(t){let e={evidence:"0.1",run_id:t.execution_id,status:"running",title:t.title,started:t.started,environment:{producer:{name:"kane-cli",version:t.producerVersion},...t.surfaces?{surfaces:t.surfaces}:{},run_kind:t.run_kind,origin:t.origin,pid:t.pid},...t.credits!==void 0?{metrics:{credits:{value:t.credits,type:"count"}}}:{}};return y(e,{lineWidth:-1})}async function le(t,e,r,n=process.cwd(),i){let o=i??w(t.execution_id,n),a=I(o,"tests",e);return await _.mkdir(I(o,"coverage"),{recursive:!0}),await _.writeFile(I(o,"coverage",".keep"),""),await _.mkdir(a,{recursive:!0}),await _.writeFile(I(o,"run.yaml"),ue(t)),r&&await _.writeFile(I(a,r.path),r.content),o}async function Lt(t,e=process.cwd()){let r=w(t.execution_id,e);await _.mkdir(I(r,"coverage"),{recursive:!0}),await _.writeFile(I(r,"coverage",".keep"),"");let n=R(ue(t));return n.environment&&delete n.environment.run_kind,await _.writeFile(I(r,"run.yaml"),y(n,{lineWidth:-1})),r}async function jt(t,e=process.cwd()){return L(w(t,e),new Date().toISOString())}async function pe(t,e=process.cwd()){await _.rm(w(t,e),{recursive:!0,force:!0})}import{promises as fe}from"fs";import{join as me}from"path";function ge(t){let e={evidence:"0.1",test:t.testId,status:t.status,...t.durationMs!==void 0?{duration_ms:t.durationMs}:{},...t.definitionPath?{definition:{path:t.definitionPath}}:{},...t.definitionId?{definition_id:t.definitionId}:{},...t.assuranceId?{assurance_id:t.assuranceId}:{},...Object.keys(t.externalId).length?{external_id:t.externalId}:{},...t.tags&&t.tags.length?{tags:t.tags}:{},...Object.keys(t.environment).length?{environment:t.environment}:{},steps:t.steps};return y(e,{lineWidth:-1})}function ve(t){return y({logs:t},{lineWidth:-1})}async function he(t,e,r){await fe.writeFile(me(t,"tests",e,"result.yaml"),r)}async function we(t,e,r){let n=me(t,"tests",e,"logs");await fe.mkdir(n,{recursive:!0}),await fe.writeFile(me(n,"meta.yaml"),r)}import{promises as K}from"fs";import{join as tt}from"path";function rt(t){return tt(t,".internal","meta.json")}async function nt(t){let e;try{e=await K.readFile(rt(t),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function ye(t,e){let r;try{r=await nt(t)??{}}catch(a){console.warn(`evidence: meta.json at ${t} unreadable \u2014 skipping execution-pointer append to preserve identity`,a);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(e),r.executions=n,await K.mkdir(tt(t,".internal"),{recursive:!0});let i=rt(t),o=`${i}.tmp-${process.pid}-${Date.now()}`;await K.writeFile(o,JSON.stringify(r,null,2)+`
|
|
3
|
-
`),await K.rename(o,i)}async function Tt(t){try{let e=await nt(t);return e&&Array.isArray(e.executions)?e.executions:[]}catch{return[]}}async function Nt(t,e,r=process.cwd()){let n=await q(t,r);if(!n){let o=`evidence: no pack found for "${t}"`;return e.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:t})):console.error(o),2}let i=await F(n,e.profile??"L1");return e.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${e.profile??"L1"}, status ${i.status})`),i.valid?0:1}function _e(t){let e=[];for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)e.push($(i))}return re(e)}function Vt(t){let e=null;for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(e==null||C[$(i)]>C[$(e)]||C[$(i)]===C[$(e)]&&i>e)&&(e=i)}return e}import{promises as Mt}from"fs";import{extname as it,basename as Bt}from"path";var Ht={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function xe(t){let e;try{e=await Mt.readdir(t)}catch{return[]}return e.filter(r=>r!=="meta.yaml").sort().map(r=>({name:Bt(r,it(r)),file:r,format:Ht[it(r)]??"txt"}))}import{mkdirSync as zt,appendFileSync as Ut}from"fs";import{join as ot}from"path";function ke(t,e){return ot(t,"tests",e,"logs")}function be(t,e,r,n={},i){try{i?.(e,r,r,n)}catch{}if(t)try{zt(t,{recursive:!0});let o=JSON.stringify({ts:new Date().toISOString(),level:e,event:r,...n})+`
|
|
4
|
-
`;Ut(ot(t,"diagnostics.ndjson"),o)}catch{}}import{promises as E}from"fs";import{join as O}from"path";async function Yt(t){try{let e=O(t,"tests"),r=await E.readdir(e).catch(()=>[]);for(let n of r){let i=O(e,n,"steps"),o=await E.readdir(i).catch(()=>[]);for(let a of o){let s=await E.readFile(O(i,a,"failure.yaml"),"utf8").catch(()=>null);if(s!=null)try{let c=R(s);if(c&&typeof c=="object"&&c.triage)return!0}catch{}}}}catch{}return!1}async function st(t,e,r){let n=O(t,"tests",e,"logs");if(r)try{await E.mkdir(n,{recursive:!0}),await E.copyFile(r,O(n,"tui.log"))}catch{}let i=await xe(n);i.length&&await we(t,e,ve(i))}async function Ie(t){let e=t.cwd??process.cwd(),r=t.packDir??w(t.executionId,e);if(!t.saved&&!t.packDir)return await pe(t.executionId,e),{sealed:!1};await st(r,t.testId,t.tuiLogPath);let n=O(r,"run.yaml"),i=R(await E.readFile(n,"utf8"));i.environment={...i.environment??{},saved:t.saved,run_kind:t.runKind},await E.writeFile(n,y(i,{lineWidth:-1}));let o=await E.open(n,"r+");try{await o.sync()}finally{await o.close()}let a=await Yt(r);await L(r,new Date().toISOString());let s;try{let d=await F(r,"L1");s=d.valid;let p=(d.diagnostics??[]).filter(u=>String(u?.code??"").includes("failure.status_disagrees"));if(p.length>0)if(t.expectStatusDisagrees||a){let u=t.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 ${u}`)}else console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,p);if(!d.valid){console.warn(`evidence: sealed pack ${t.executionId} failed L1 validation`,d.diagnostics);let u=String(d.diagnostics?.[0]?.code??"");be(ke(r,t.testId),"warn","EVIDENCE_INVALID",{execution_id:t.executionId,first_code:u,surface:t.surface??"testmd"},t.log)}}catch(d){console.warn(`evidence: validation error for ${t.executionId}`,d)}let c;if(t.saved&&t.packDir)try{c=await Ge(r,t.executionId,e)}catch(d){console.warn(`evidence: store install failed for ${t.executionId}`,d)}if(t.outputStemDir)try{await ye(t.outputStemDir,{execution_id:t.executionId,run_kind:t.runKind,status:t.verdict,valid:s,at:new Date().toISOString()})}catch(d){console.warn(`evidence: execution-pointer append failed for ${t.executionId} (pack is sealed)`,d)}return{sealed:!0,valid:s,storePath:c}}import{release as at}from"os";import{execFileSync as Gt}from"child_process";var ct=!1,W;function Kt(){if(!ct)if(ct=!0,process.platform==="darwin")try{W=Gt("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{W=at()||void 0}else W=at()||void 0;return W}function Ee(t){let e={os:ce(process.platform)},r=Kt();if(r&&(e.os_version=r),t.cdpBrowser){let n=/^([A-Za-z]+)\/(\d+)/.exec(t.cdpBrowser);n&&(e.browser=n[1].replace(/^Headless/,""),e.browser_version=n[2])}return t.resolution&&(e.resolution=t.resolution),e}async function dt(t){if(t)try{let e=await fetch(`${t}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!e.ok)return;let r=await e.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function Wt(t){let e;return()=>(e||(e=dt(t)),e)}import{promises as Se,existsSync as Re,readFileSync as Qt}from"fs";import{basename as qt,join as S}from"path";import{readFileSync as Jt}from"fs";import{dirname as Xt,resolve as Zt}from"path";function ut(t,e){let r=Zt(t),n=Jt(r,"utf8");return P(e?j(n,H(Xt(r),e)):n)}var T=class t{constructor(e){this.opts=e}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_packDirOverride;_attached=!1;get attached(){return this._attached}static async attach(e){let r=qt(e.packDir).replace(/\.evidence$/,""),n=new t({origin:"testrun",runKind:"author",pid:process.pid,title:e.testId,started:new Date().toISOString(),producerVersion:ze,cwd:e.cwd});n.executionId=r,n.testId=e.testId,n._packDirOverride=e.packDir,n._attached=!0;let i=S(e.packDir,"tests",e.testId);return await Se.mkdir(i,{recursive:!0}),e.definition&&(await Se.writeFile(S(i,e.definition.path),e.definition.content),n.definitionPath=e.definition.path,n.definitionContent=e.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=Q(),this.testId=this.opts.testmdRelPath?oe(this.opts.testmdRelPath):se(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let e=this.opts.definition??null;return await le({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,e,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),e&&(this.definitionPath=e.path,this.definitionContent=e.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?S(this.opts.packRootDir,`${this.executionId}.evidence`):w(this.executionId,this.opts.cwd)}get packTestDir(){return S(this.pack,"tests",this.testId)}async writeDefinition(e,r="test.md"){await Se.writeFile(S(this.packTestDir,r),e),this.definitionPath=r,this.definitionContent=e}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=S(this.opts.cwd,this.opts.testmdRelPath);if(Re(e))return D(Qt(e,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=S(this.opts.cwd,this.opts.testmdRelPath),r=S(this.opts.cwd,".context"),n=Re(r)?b(r):void 0;if(Re(e))return ut(e,n)}if(this.definitionContent!=null)return P(this.definitionContent)}catch{}}noteSpawn(e){this.accumulatedSteps.push(...e.steps),this.maxOrdinal=Math.max(this.maxOrdinal,e.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}async writeResult(e){let r=_e(e.spawns),n=this.pack;await he(n,this.testId,ge({testId:this.testId,status:r,durationMs:e.durationMs,definitionPath:this.definitionPath,definitionId:this.computeDefinitionId(),assuranceId:this.computeAssuranceId(),externalId:ae(e.externalIdInput),environment:de(e.runnerEnv,e.intentEnv),steps:e.steps,tags:e.tags}));let i=e.externalIdInput;return e.log&&(i.commit_id||i.test_id||i.testcase_id)&&e.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:i.commit_id??null,test_id:i.test_id??null,testcase_id:i.testcase_id??null,project_id:i.project_id??null,session_id:i.session_id??null,session_name:i.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function er(t,e,r=ee){try{let n=await r(t);if(n.aborted.length>0||n.removed.length>0)try{e?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as _r}from"fs";import{existsSync as $e,mkdirSync as fr,readdirSync as mr,readFileSync as gr,rmSync as vr,statSync as hr,writeFileSync as wr}from"fs";import{join as A}from"path";import{mkdirSync as tr,renameSync as rr,rmSync as nr,writeFileSync as ir}from"fs";import{join as lt}from"path";var or=5e6;function pt(t,e,r){let n=lt(t,"coverage","sources"),i=new Map,o=!1;try{for(let a of r.usecases)for(let s of a.sources){if(i.has(s.id)){s.file=i.get(s.id);continue}if(!s.cid)continue;let c=et(e,s.cid);if(c===null||c.byteLength>or)continue;o||(tr(n,{recursive:!0}),o=!0);let d=lt(n,s.id),l=`${d}.tmp-${process.pid}`;ir(l,c),rr(l,d);let p=`coverage/sources/${s.id}`;i.set(s.id,p),s.file=p}}catch{for(let a of r.usecases)for(let s of a.sources)delete s.file;if(o)try{nr(n,{recursive:!0,force:!0})}catch{}}}import{existsSync as Ce,readFileSync as N,renameSync as cr,writeFileSync as dr}from"fs";import{dirname as ht,isAbsolute as wt,resolve as yt}from"path";var sr=new Set(["inline","testmd","testrun"]),ar=new Set(["inferred","authored","runtime-derived"]),Pe=new Set(["passed","failed","broken","skipped"]);function ft(t,e,r){let n=[];if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let i=z(t);if(e.latestHash!==i)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(e.latestHash)} but chain head is ${String(i)} \u2014 re-open and retry`}]};let o=[];for(let s of r.facts){let c=`executions[${s.ref}]`,d=e.resolve(s.ref),l=d?e.tipOf(d.cid):null;if(!d||!l||e.superseded.has(l)){n.push({code:"UNKNOWN_REF",detail:`${c}: '${s.ref}' is not a live committed node`});continue}if(e.nodeLabel.get(l)!==te.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${c}: execution facts attach to tests \u2014 '${s.ref}' is a ${e.nodeLabel.get(l)}`});continue}if(!sr.has(s.mode)){n.push({code:"BAD_MODE",detail:`${c}: mode '${s.mode}' not in inline|testmd|testrun`});continue}if(!Pe.has(s.verdict)){n.push({code:"BAD_VERDICT",detail:`${c}: verdict '${s.verdict}' not in ${[...Pe].join("|")}`});continue}if(!ar.has(s.oracle_mode)){n.push({code:"BAD_ORACLE_MODE",detail:`${c}: oracle_mode '${s.oracle_mode}' not in inferred|authored|runtime-derived`});continue}if(typeof s.drift_flag!="boolean"||typeof s.stale_at_run!="boolean"){n.push({code:"MISSING_FIELD",detail:`${c}: drift_flag and stale_at_run are required booleans`});continue}if(!s.execution_id||!s.started_at||!s.definition_id_at_run){n.push({code:"MISSING_FIELD",detail:`${c}: execution_id, started_at and definition_id_at_run are required`});continue}let p=[];for(let u of s.per_ac??[]){let m=e.resolve(u.ac_ref),f=m?e.tipOf(m.cid):null;if(!m||!f||e.superseded.has(f)||e.nodeLabel.get(f)!==te.AC){n.push({code:"UNKNOWN_REF",detail:`${c}.per_ac: '${u.ac_ref}' is not a live AC`});continue}if(!Pe.has(u.verdict)){n.push({code:"BAD_VERDICT",detail:`${c}.per_ac['${u.ac_ref}']: verdict '${u.verdict}'`});continue}p.push({ac_ref:e.nameOf.get(f)??f,verdict:u.verdict})}o.push({about:l,definition_id_at_run:s.definition_id_at_run,verdict:s.verdict,...p.length?{per_ac:p}:{},drift_flag:s.drift_flag,oracle_mode:s.oracle_mode,stale_at_run:s.stale_at_run,...s.unresolved_acs?.length?{unresolved_acs:s.unresolved_acs}:{},execution_id:s.execution_id,...s.evidence_id?{evidence_id:s.evidence_id}:{},...s.duration_ms!==void 0?{duration_ms:s.duration_ms}:{},started_at:s.started_at,mode:s.mode,local:s.local,...s.via_parent?{via_parent:s.via_parent}:{}})}if(n.length>0)return{record:null,errors:n};let a=U(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:o,source_head_moves:{}});return Y(t),{record:a.record,errors:null}}function _t(t){let e={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of t)for(let i of n.verifies??[]){let o=r.get(i);(o===void 0||(e[n.status]??0)>(e[o]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function xt(t){let e=[],r=G(t.cwd);if(!Ce(r))return{synced:0,superseded:0,skipped:"no-context",warnings:e};let n=t.by??{kind:"ai",id:"exec-sync"},i=b(r),o=[],a=0,s=new Set;for(let d of t.members){let l=wt(d.path)?d.path:yt(t.cwd,d.path);for(let p of ur(l)){if(s.has(p.path))continue;s.add(p.path);let u=p.path===l?void 0:D(N(l,"utf8"))?.id,m=N(p.path,"utf8"),f=D(m);if(!f?.id)continue;let g=i.resolve(f.id),x=g?i.tipOf(g.cid):null;if(!g||!x||i.superseded.has(x)){e.push(`sync: ${f.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let k=P(j(m,H(ht(p.path),i))),v=String(i.getNode(x)?.content.test_md_blob??""),M=P(j(v,We(i))),B=!1,Z=x;if(k===M)f.base!==M&&vt(p.path,m,M,e);else if(f.base===M){let h=lr(r,i,x,m,k,n);h.error?(e.push(`sync: could not supersede ${f.id}: ${h.error}`),B=!0):(a++,Z=h.newCid,B=h.oracleTier,vt(p.path,N(p.path,"utf8"),k,e),i=b(r))}else B=!0,e.push(f.base?`sync: ${f.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${f.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);let Ve=i.getNode(Z)?.content.check,Me=p.path===l?d.acs??[]:[],Be=Me.filter(h=>mt(i,h.ref)),He=Me.filter(h=>!mt(i,h.ref)).map(h=>h.ref);o.push({ref:f.id,definition_id_at_run:k,verdict:d.verdict,...Be.length?{per_ac:Be.map(h=>({ac_ref:h.ref,verdict:h.verdict}))}:{},drift_flag:B,oracle_mode:Ve?.expected_mode??(Ke(Ve?.operand)?"runtime-derived":"inferred"),stale_at_run:i.stale(Z)!=="fresh",...He.length?{unresolved_acs:He}:{},execution_id:d.executionId,...d.evidenceId?{evidence_id:d.evidenceId}:{},...d.durationMs!==void 0?{duration_ms:d.durationMs}:{},started_at:d.startedAt,mode:d.mode,local:d.local,...u?{via_parent:u}:{}})}}if(o.length===0)return{synced:0,superseded:a,warnings:e};let c=ft(r,b(r),{facts:o,by:n});return c.errors?(e.push(...c.errors.map(d=>`sync facts: ${d.code}: ${d.detail}`)),{synced:0,superseded:a,warnings:e}):{synced:o.length,superseded:a,warnings:e}}function ur(t){let e=[],r=new Set,n=i=>{if(r.has(i)||!Ce(i))return;r.add(i);let o=N(i,"utf8");for(let a of o.split(`
|
|
5
|
-
`)){let s=/^@import\s+(\S+)\s*$/.exec(a.trim());if(!s)continue;let c=wt(s[1])?s[1]:yt(ht(i),s[1]);Ce(c)&&D(N(c,"utf8"))?.id&&n(c)}e.push({path:i})};return n(t),e}function mt(t,e){let r=t.resolve(e),n=r?t.tipOf(r.cid):null;return!!(r&&n&&!t.superseded.has(n)&&t.nodeLabel.get(n)==="ac")}function lr(t,e,r,n,i,o){let a=e.getNode(r);if(!a)return{oracleTier:!1,error:"tip unreadable"};let s=Je(n),c=String(a.content.test_md_blob??""),d=/^#\s+(.+?)\s*$/m.exec(s)?.[1]??String(a.content.title??""),l={...a.content,test_md_blob:s,definitionId:i,title:d},p=Xe("test",l);if(p.length>0)return{oracleTier:!1,error:p.map(g=>g.detail).join("; ")};let u=Ze("test",l);if(u===r)return{newCid:r,oracleTier:!1};let m=gt(c)!==gt(s),f=z(t);if(e.latestHash!==f)return{oracleTier:m,error:`store advanced under the sync (basis ${String(e.latestHash)} vs head ${String(f)}) \u2014 re-run to retry`};try{U(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:u,label:"test",content:l}],edges:[],review:[{id:u,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:o}],supersessions:[{kind:"node",old:r,new:u,reason:"edited on disk (run sync)",by:o}],source_head_moves:{}},{expectPrev:f})}catch(g){return{oracleTier:m,error:g instanceof Error?g.message:String(g)}}return Y(t),{newCid:u,oracleTier:m}}var pr=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/;function gt(t){let e=[],r=t.split(`
|
|
6
|
-
`),n=!1;for(let i of r){if(/^##\s/.test(i)){n=/\bassert\b/i.test(i);let o=pr.exec(i);o&&e.push(`v:${o[1].trim()}`);continue}n&&i.trim()!==""&&e.push(i.trim())}return e.join(`
|
|
7
|
-
`)}function vt(t,e,r,n){try{let i=e.split(`
|
|
8
|
-
`),o=-1;if(i[0]?.trim()==="---"){for(let c=1;c<i.length;c++)if(i[c].trim()==="---"){o=c;break}}if(o<0)return;let a=!1;for(let c=1;c<o;c++){if(/^\s+base:\s*sha256:[0-9a-f]+\s*$/.test(i[c])){i[c]=i[c].replace(/sha256:[0-9a-f]+/,r),a=!0;break}if(/^assurance:\s*$/.test(i[c])&&!i.slice(c,Math.min(c+3,o)).some(d=>/^\s+base:/.test(d))){i.splice(c+2,0,` base: ${r}`),a=!0;break}}if(!a)return;let s=`${t}.tmp-sync`;dr(s,i.join(`
|
|
9
|
-
`)),cr(s,t)}catch(i){n.push(`sync: pin refresh failed for ${t} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var yr={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"},kt=(t,e)=>{try{if(!$e(e))return{status:"skipped",reason:"no context store at the project root"};let r=A(t,"tests");if(!$e(r))return{status:"skipped",reason:"pack has no tests/"};let n=new Map;for(let s of mr(r)){let c=A(r,s,"result.yaml");if(!$e(c)||!hr(A(r,s)).isDirectory())continue;let d=R(gr(c,"utf8"));if(!d?.definition_id&&!d?.assurance_id)continue;let l=_t(d.steps??[]),p={testShortId:String(d.test??s),execution:yr[String(d.status)]??"not-run",...l.length?{acs:l}:{}};d.assurance_id&&n.set(`id:${d.assurance_id}`,p),d.definition_id&&n.set(`def:${d.definition_id}`,p)}let i=qe(b(e),n,{scope:"run"}),o=Qe(i);pt(t,e,i);let a=y({...i,rollup:o},{lineWidth:-1});return fr(A(t,"coverage"),{recursive:!0}),wr(A(t,"coverage","usecases.yaml"),a),{status:"written"}}catch(r){try{vr(A(t,"coverage","sources"),{recursive:!0,force:!0})}catch{}return{status:"skipped",reason:r instanceof Error?r.message:String(r)}}};async function xr(t){try{let e=new T({origin:"inline",runKind:"author",pid:t.pid,title:t.title,started:new Date().toISOString(),producerVersion:t.producerVersion,surfaces:t.surfaces,objectiveOrName:t.objectiveOrName,sessionId:t.sessionId,cwd:t.cwd,packRootDir:t.packRootDir}),r=await e.start();return{session:e,...r,packDir:e.pack,spawns:[],startedAtMs:Date.now(),cwd:t.cwd}}catch(e){return console.warn("evidence: inline pack creation failed",e),null}}function kr(t,e,r){if(!t)return;t.session.noteSpawn(e),e.resolution&&(t.resolution=e.resolution);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));t.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function br(t){if(t)return{packTestDir:t.packTestDir,ordinalOffset:t.session.nextOrdinalOffset()}}async function Ir(t,e){if(!t)return null;if(t.finalized)return t.finalized;let r=(n,i,o)=>e.log?e.log("warn",n,i,o):console.warn(`evidence: ${i}`,o??"");try{if(e.recordedTestPath)try{await t.session.writeDefinition(await _r.readFile(e.recordedTestPath,"utf8"))}catch(a){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(a)})}let n=e.cdpBrowserCapture?await e.cdpBrowserCapture():void 0,i=await t.session.writeResult({steps:t.session.steps,spawns:t.spawns.length?t.spawns:[{resultCode:null}],externalIdInput:{...e.externalIdInput,execution_id:t.executionId},runnerEnv:Ee({cdpBrowser:n,resolution:t.resolution}),intentEnv:{model:e.model,platform:"Desktop",platform_type:"web"},durationMs:e.durationMs??Date.now()-t.startedAtMs,log:e.log});try{if(e.recordedTestPath){let a=xt({cwd:e.cwd??t.cwd??process.cwd(),members:[{path:e.recordedTestPath,verdict:i,executionId:t.executionId,startedAt:new Date(t.startedAtMs).toISOString(),mode:"inline",local:e.local??!1}]});for(let s of a.warnings)r("EXEC_SYNC",s)}}catch(a){r("EXEC_SYNC","exec-sync failed",{error:String(a)})}try{let a=(e.coverageWriter??kt)(t.packDir,G(e.cwd??t.cwd??process.cwd()));a.status==="skipped"&&r("EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${a.reason}`)}catch(a){r("EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(a)})}let o=await Ie({executionId:t.executionId,testId:t.testId,saved:e.saved,runKind:"author",verdict:i,cwd:e.cwd??t.cwd,packDir:t.packDir,tuiLogPath:e.tuiLogPath,log:e.log,surface:"inline"});return t.finalized=o,e.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:t.executionId,verdict:i,valid:o.valid,pack:t.packDir,store_copy:o.storePath??null}),o}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as $r,openSync as Dr,readSync as Or,closeSync as Ar}from"fs";import{basename as Fr,resolve as Lr}from"path";import{createServer as Er}from"http";import{createReadStream as Sr,promises as Rr}from"fs";import{randomBytes as Pr}from"crypto";var J="127.0.0.1";function bt(t,e){if(!t)return null;let r=/^bytes=(\d*)-(\d*)$/.exec(t.trim());if(!r)return null;let[,n,i]=r;if(n===""&&i==="")return null;if(n===""){let s=Number(i);return s===0||e===0?"unsatisfiable":{start:Math.max(0,e-s),end:e-1}}let o=Number(n);if(o>=e)return"unsatisfiable";let a=i===""?e-1:Math.min(Number(i),e-1);return a<o?null:{start:o,end:a}}async function De(t){let e=Pr(16).toString("hex"),r=Er((i,o)=>{Cr(i,o,t,e).catch(()=>o.destroy())});await new Promise((i,o)=>{r.once("error",o),r.listen(t.port??0,J,()=>{r.removeListener("error",o),i()})});let n=r.address().port;return{port:n,urlFor:i=>`http://${J}:${n}/${e}/${encodeURIComponent(i)}`,close:()=>new Promise(i=>{r.close(()=>i()),r.closeAllConnections()})}}async function Cr(t,e,r,n){let i=t.url??"/",o=v=>{try{r.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:v,path:i})}catch{}};if(t.headers.host!==`${J}:${t.socket.localPort}`){o("host_mismatch"),e.writeHead(403).end();return}let a=t.headers.origin;if(a!==void 0&&!r.allowedOrigins.includes(a)){o("origin_denied"),e.writeHead(403).end();return}let s=a?{"Access-Control-Allow-Origin":a,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(t.method==="OPTIONS"){let v={...s,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};t.headers["access-control-request-private-network"]==="true"&&(v["Access-Control-Allow-Private-Network"]="true"),e.writeHead(204,v).end();return}if(t.method!=="GET"&&t.method!=="HEAD"){e.writeHead(405,s).end();return}let c;try{let v=new URL(t.url??"/",`http://${J}`).pathname.split("/");if(v.length!==3||v[1]!==n){o("bad_token"),e.writeHead(404,s).end();return}c=decodeURIComponent(v[2])}catch{o("not_found"),e.writeHead(404,s).end();return}let d=r.packs.get(c);if(!d){o("not_found"),e.writeHead(404,s).end();return}let l;try{let v=await Rr.stat(d);if(!v.isFile())throw new Error("not a file");l=v.size}catch{o("not_found"),e.writeHead(404,s).end();return}let p={...s,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(t.method==="HEAD"){e.writeHead(200,{...p,"Content-Length":String(l)}).end();return}let u=bt(t.headers.range,l);if(u==="unsatisfiable"){o("unsatisfiable"),e.writeHead(416,{...s,"Content-Range":`bytes */${l}`}).end();return}let[m,f,g]=u===null?[0,l-1,200]:[u.start,u.end,206],x={...p,"Content-Length":String(f-m+1)};if(g===206&&(x["Content-Range"]=`bytes ${m}-${f}/${l}`),e.writeHead(g,x),l===0){e.end();return}let k=Sr(d,{start:m,end:f});k.on("error",()=>e.destroy()),e.on("close",()=>k.destroy()),k.pipe(e)}function V(t,e){return(e??Ue(t).evidenceViewerUrl).replace(/\/+$/,"")}function Oe(t,e){return`${e}/?pack=${encodeURIComponent(t)}`}function Ae(t){return`evidence: view locally with \`kane-cli evidence serve ${t}\``}async function jr(t,e,r={}){let n=r.out??(l=>process.stdout.write(l+`
|
|
10
|
-
`)),i=l=>(n(`error: ${l}`),2);if(e.env!=="prod"&&e.env!=="stage")return i(`invalid --env: ${String(e.env)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))return i("invalid --port: expected an integer 1-65535");let o;try{o=V(e.env,e.viewerUrl),new URL(o)}catch{return i(`invalid --viewer-url: ${e.viewerUrl}`)}if(t.length===0)return i("no pack paths given");let a=new Map;for(let l of t){let p=Lr(l),u;try{u=$r(p)}catch{return i(`${l}: not found`)}if(u.isDirectory())return i(`${l}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!u.isFile())return i(`${l}: not a regular file`);let m=Buffer.alloc(2),f=Dr(p,"r");try{Or(f,m,0,2,0)}finally{Ar(f)}if(m.toString("latin1")!=="PK")return i(`${l}: not a sealed evidence pack (zip magic missing)`);let g=Fr(p);if(a.has(g))return i(`duplicate pack basename: ${g} (URL names collide \u2014 rename one)`);a.set(g,p)}let s=r.log??((l,p,u)=>process.stderr.write(`warn: ${p} reason=${u.reason} path=${u.path}
|
|
11
|
-
`)),c;try{c=await De({packs:a,allowedOrigins:[new URL(o).origin],port:e.port,log:s})}catch(l){return i(`could not bind 127.0.0.1${e.port?`:${e.port}`:""} \u2014 ${l.message}`)}n(`serving ${a.size} pack${a.size===1?"":"s"} on http://127.0.0.1:${c.port}`);for(let l of a.keys()){let p=c.urlFor(l);n(l),n(` pack ${p}`),n(` viewer ${Oe(p,o)}`)}return n("press Ctrl-C to stop"),await(r.hold??Tr)(),await c.close(),0}function Tr(){return new Promise(t=>{let e=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of e)process.on("SIGINT",r);t()})})}import{promises as X}from"fs";import{tmpdir as Br}from"os";import{join as St,resolve as Le}from"path";var Nr=["error","prefer_first","prefer_latest","discard"],Vr=["external_id.commit_id","external_id.test_id"];function It(t){let e=t.replace(/-/g,"_");return Nr.includes(e)?e:null}function Et(t){let e=t==="discard"?{on_collision:"discard"}:{on_collision:"error",identity:{keys:[...Vr],on_same:t??"nest",on_different:t?"error":"split"}};return y({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:e,rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function Fe(t){try{if(!t.isTTY){t.log(Ae(t.packPath));return}let e=V(t.env);await(t.renderPrompt??Mr)(t.packPath,e)}catch(e){try{t.log(`evidence view failed \u2014 ${e.message}`)}catch{}}}async function Mr(t,e){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-SSAM4RRP.js");await new Promise(o=>{let a=n(r.default.createElement(i,{packPath:t,viewerBase:e,onDone:()=>{a.unmount(),o()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function Hr(t,e,r=process.cwd(),n={}){let i=n.out??(u=>process.stdout.write(u+`
|
|
12
|
-
`)),o=n.err??(u=>process.stderr.write(u+`
|
|
13
|
-
`)),a=u=>(o(`evidence merge: ${u}`),2);if(!e.runId)return a("--run-id is required (merged identity is the caller's fact)");if(e.rules&&e.onCollision)return a("--rules and --on-collision are mutually exclusive");let s;if(e.onCollision!==void 0){let u=It(e.onCollision);if(!u)return a(`invalid --on-collision: ${e.onCollision} (expected error | prefer-first | prefer-latest | discard)`);s=u}let c=[];for(let u of t){let m=await zr(u,r);if(!m)return a(`no pack found for "${u}"`);c.push(m)}let d=e.out?Le(r,e.out):w(e.runId,r),l=null,p;e.rules?p=Le(r,e.rules):(l=await X.mkdtemp(St(Br(),"kane-merge-rules-")),p=St(l,"merge-rules.yaml"),await X.writeFile(p,Et(s)));try{let u=await(n.mergeFn??Ye)(c,{runId:e.runId,out:d,rulesPath:p,title:e.title,finalize:e.finalize});return e.json?i(JSON.stringify(u)):Ur(i,u),u.output.finalized&&!e.json&&await(n.offer??Fe)({packPath:d,env:e.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:o}),0}catch(u){let m=u instanceof Error?u.message:String(u);return u?.code==="ABORT"?(o(`evidence merge: aborted \u2014 ${m}`),1):a(m)}finally{l&&await X.rm(l,{recursive:!0,force:!0}).catch(()=>{})}}async function zr(t,e){let r=Le(e,t);if(await Rt(r))return r;let n=w(t,e);return await Rt(n)?n:null}async function Rt(t){try{return await X.stat(t),!0}catch{return!1}}function Ur(t,e){let{packs:r,tests:n,output:i}=e;t(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let o of r.skipped)t(` skipped ${o.runId}: ${o.rule} \u2014 ${o.reason}`);for(let o of n.collisions){let a;o.action==="nest"?a=`nested into ${o.folder}, latest ${o.winner}`:o.action==="split"?a=`split into ${o.folder}`:a=`winner ${o.winner}`,t(` collision ${o.test}: ${a} (${o.rule})`)}for(let o of n.discarded)t(` discarded ${o}`)}import{copyFileSync as Yr,existsSync as je,mkdirSync as Gr}from"fs";import{join as Pt}from"path";function Kr(t,e,r){try{let n=Pt(t,"auteur","execution.json");if(je(n))return!0;for(let i of e)if(!(!i||!je(i)))return Gr(Pt(t,"auteur"),{recursive:!0}),Yr(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:e.find(i=>i&&je(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as Wr}from"fs";import{join as Jr}from"path";function Ne(t){let e=[],r=!0,n=o=>{if(o===null||typeof o!="object")return;let a=o;if(Array.isArray(a.operations))for(let s of a.operations){let c=s?.operation_id;typeof c=="string"&&c&&e.push(c)}if(Array.isArray(a.children)){a.content_type!=="generative_block"&&(r=!1);for(let s of a.children)n(s)}if(Array.isArray(a.branches)){r=!1;for(let s of a.branches){let c=s?.children;if(Array.isArray(c))for(let d of c)n(d)}}},i=t?.instructions;if(Array.isArray(i))for(let o of i)n(o);return{ids:e,linear:r}}function Xr(t){return Ne(t).ids}function Te(t,e){let r=new Set(e.map(s=>s.action_id).filter(Boolean)),n=-1;for(let s of r){let c=t.indexOf(s);c>n&&(n=c)}let i=e.reduce((s,c)=>Math.max(s,c.ordinal),0),o=new Set,a=[];for(let s of t.slice(n+1))r.has(s)||o.has(s)||(o.add(s),a.push({id:s,ordinal:++i,status:"skipped",action_id:s}));return a}function Ct(t,e){let r=new Set(e),n=t.filter(o=>o.action_id);if(n.some(o=>r.has(o.action_id))||n.length>e.length)return null;let i=0;return t.map(o=>o.action_id?{...o,action_id:e[i++]}:o)}function Zr(t,e){if(t.length>e.length)return!1;for(let r=0;r<t.length;r++)if(e[r]!==t[r].action_id)return!1;return!0}function Qr(t,e,r,n=!0){if(e.length===0)return{steps:t,tail:[]};let i=(r&&n?Ct(t,e):null)??t,o=i.filter(s=>s.action_id),a=new Set(e);return o.length>0&&o.every(s=>a.has(s.action_id))?{steps:i,tail:Te(e,i)}:o.length>0&&!Zr(o,e)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:Te(e,i)}}function $t(t){try{let e=Wr(Jr(t,"auteur","execution.json"),"utf8");return Ne(JSON.parse(e))}catch{return{ids:[],linear:!0}}}function qr(t){return $t(t).ids}export{$ as a,re as b,ne as c,ie as d,oe as e,se as f,ae as g,ce as h,de as i,Ft as j,ue as k,le as l,Lt as m,jt as n,pe as o,ge as p,ve as q,he as r,we as s,ye as t,Tt as u,Nt as v,_e as w,Vt as x,xe as y,ke as z,be as A,st as B,Ie as C,Ee as D,dt as E,Wt as F,T as G,er as H,_t as I,xt as J,kt as K,xr as L,kr as M,br as N,Ir as O,bt as P,De as Q,V as R,Oe as S,Ae as T,jr as U,Fe as V,Hr as W,Kr as X,Ne as Y,Xr as Z,Te as _,Ct as $,Qr as aa,$t as ba,qr as ca};
|
package/dist/chunk-M5PJQ5Y3.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as c,c as p}from"./chunk-HLRLP6TQ.js";import{spawn as y}from"child_process";var h=new Set(["progress","ask_user","graph_query","proposal","design","error","done","reasoning_delta","reasoning_done","tool_activity","decision_activity","text_delta","usage","receipt","chat_ops","session_paused","session_complete"]);function w(l,n={}){let a=n.spawnCmd!==void 0?n.spawnCmd:c();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=l.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=y(a.cmd,a.args,{stdio:["pipe","pipe","pipe"],env:p(l.session_id,n.auth)});if(t.stdin.write(JSON.stringify(l)+`
|
|
3
|
-
`),n.onStderr){let e="";t.stderr.on("data",r=>{e+=r.toString("utf8");let i;for(;(i=e.indexOf(`
|
|
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
|
-
`))>=0;){let g=e.slice(0,o).trim();if(e=e.slice(o+1),!g)continue;let u;try{u=JSON.parse(g)}catch{n.onWarn?.(`agent: skipping malformed line: ${g.slice(0,120)}`);continue}let s=u;if(!s||typeof s!="object"||!h.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)+`
|
|
6
|
-
`)},kill:()=>{t.kill("SIGTERM")},exited:d}}export{w as a};
|
package/dist/chunk-MMPFU2YC.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{homedir as a}from"os";import{join as t}from"path";var m="0.6.11",d="kane-cli",e=t(a(),".testmuai","kaneai"),g=t(e,"profiles"),h=t(e,"tui-config.json"),_=t(e,"media"),A="https://registry.npmjs.org/@testmuai/kane-cli",L="https://api.github.com/repos/LambdaTest/kane-cli/releases",n="@testmuai/kane-cli-skill",b=`https://registry.npmjs.org/${n}`,r="kane-cli",x=[{dir:t(a(),".claude","skills",r),agent:"Claude Code"},{dir:t(a(),".agents","skills",r),agent:"Codex CLI"},{dir:t(a(),".gemini","skills",r),agent:"Gemini CLI"}],u="https://dd-proxy.lambdatest.com/intake/kane-cli",U="https://kaneai-playground.lambdatest.io",R=9222,I=9230,E=t(e,"chrome-profiles"),o=t(e,"hints"),C=t(o,"state.json");function T(s){return t(o,`catalog-${s}.json`)}var c="127.0.0.1",S=18392,f=18400,i="/callback";function N(s){return`http://${c}:${s}${i}`}var P="KANE CLI",B="*",O={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",testGeneratorBaseUrl:"https://test-manager-api.lambdatest.com",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server",evidenceViewerUrl:"https://evidence.lambdatest.com",mediaArtefactsHost:"prod-mobile-artefacts.lambdatest.com"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",testGeneratorBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server",evidenceViewerUrl:"https://stage-evidence.lambdatestinternal.com",mediaArtefactsHost:"stage-mobile-artefacts.lambdatestinternal.com"}},k={orange:"#ff9500",generateAccent:"#0d9488",assuranceAccent:"#b388ff",purple:"#b388ff",secondary:"#888888",dim:"#666666",muted:"#444444",green:"#4ade80",red:"#ef4444"};export{m as a,d as b,e as c,h as d,_ as e,A as f,L as g,n as h,x as i,u as j,U as k,R as l,I as m,E as n,C as o,T as p,c as q,S as r,f as s,i as t,N as u,P as v,B as w,O as x,k as y};
|
package/dist/chunk-MR7CX5VT.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as F}from"./chunk-JFAFKHDX.js";import{a as I}from"./chunk-YKTYVJBN.js";import{d as Y,f as Z}from"./chunk-GG43HSU2.js";import{a as J}from"./chunk-DNNZ353O.js";import{a as W}from"./chunk-7E24OCGX.js";import{b as X}from"./chunk-FRBYGSGJ.js";import{n as K}from"./chunk-6W6AIDLJ.js";import{a as z}from"./chunk-6HYW5RFX.js";import{e as Q}from"./chunk-J2KSZUOO.js";import{d as U,f as H}from"./chunk-5YPBPZUR.js";import{a as B,c as j}from"./chunk-MMPFU2YC.js";function mt(t){let e=process.env.HOME??"";return e&&t.startsWith(e)?`~${t.slice(e.length)}`:t}import{readFileSync as Re,writeFileSync as Ce,renameSync as Te,mkdirSync as Me}from"fs";import{dirname as De,join as Fe}from"path";var O=1,Ne=720*60*1e3;function N(t){return Fe(j,"embeddings",`alias-${t}.json`)}function q(t,e=Date.now()){return t!==null&&e-t.fetchedAt<Ne}function ee(t){try{let e=JSON.parse(Re(t,"utf-8"));return e.wrapperVersion!==O||typeof e.purposes!="object"||e.purposes===null?null:{wrapperVersion:O,writtenByVersion:String(e.writtenByVersion??""),purposes:e.purposes}}catch{return null}}function te(t,e,n=N(t)){let r=ee(n)?.purposes?.[e];return!r||typeof r.alias!="string"||typeof r.dims!="number"||typeof r.fetchedAt!="number"?null:{alias:r.alias,dims:r.dims,fetchedAt:r.fetchedAt}}function ne(t,e,n,s=N(t)){try{Me(De(s),{recursive:!0});let a=ee(s)?.purposes??{};a[e]={alias:n.alias,dims:n.dims,fetchedAt:Date.now()};let o={wrapperVersion:O,writtenByVersion:B,purposes:a},u=`${s}.tmp`;Ce(u,JSON.stringify(o,null,2)+`
|
|
3
|
-
`),Te(u,s)}catch(r){process.stderr.write(`[embed] Failed to save alias cache: ${r instanceof Error?r.message:String(r)}
|
|
4
|
-
`)}}function Le(t){return t.TESTMUAI_ENV==="stage"?"stage":"prod"}function re(t){let e=t.env??process.env,n=t.auth?.TESTMUAI_BASIC_AUTH||e.TESTMUAI_BASIC_AUTH;if(n)return{authorization:`Basic ${n}`};let s=t.auth?.TESTMUAI_API_KEY||e.TESTMUAI_API_KEY;return s?{authorization:`Bearer ${s}`}:{}}async function se(t,e={}){let n=e.env??process.env,s=Le(n),r=e.aliasCacheFile??N(s),a=e.now??Date.now,o=te(s,t,r);if(q(o,a()))return{alias:o.alias,dims:o.dims};let d=`${I(n)}/assurance/embed/alias?purpose=${encodeURIComponent(t)}`,m=await(e.fetchImpl??fetch)(d,{method:"GET",headers:re(e)});if(!m.ok)throw new Error(`embed alias resolve failed: ${m.status}`);let c=await m.json();return ne(s,t,{alias:c.alias,dims:c.dims},r),{alias:c.alias,dims:c.dims}}async function ie(t,e,n={}){let s=n.env??process.env,r=I(s),a=await(n.fetchImpl??fetch)(`${r}/assurance/embed`,{method:"POST",headers:{...re(n),"content-type":"application/json"},body:JSON.stringify({purpose:t,input:e})});if(!a.ok)throw new Error(`embed failed: ${a.status}`);return await a.json()}import{randomBytes as it}from"crypto";function oe(t,e){let n=Math.min(t.length,e.length),s=0,r=0,a=0;for(let o=0;o<n;o++)s+=t[o]*e[o],r+=t[o]*t[o],a+=e[o]*e[o];return r===0||a===0?0:s/(Math.sqrt(r)*Math.sqrt(a))}function ae(t,e,n){return n*t+(1-n)*e}var ce=.7;import{readFileSync as Ge,writeFileSync as Ie,renameSync as Oe,mkdirSync as Pe}from"fs";import{dirname as Ve,join as le}from"path";function Be(t){return le(t,"embeddings")}function je(t){let e=t.indexOf(":");return e>=0?t.slice(e+1):t}function de(t,e,n){let s=je(n);return le(Be(t),e,s.slice(0,2),`${s.slice(2)}.f32`)}function ue(t,e,n){try{let s=Ge(de(t,e,n)),r=new Float32Array(Math.floor(s.length/4));for(let a=0;a<r.length;a++)r[a]=s.readFloatLE(a*4);return r}catch{return null}}function me(t,e,n,s){try{let r=de(t,e,n);Pe(Ve(r),{recursive:!0});let a=Buffer.alloc(s.length*4);for(let u=0;u<s.length;u++)a.writeFloatLE(s[u],u*4);let o=`${r}.tmp`;Ie(o,a),Oe(o,r)}catch(r){process.stderr.write(`[embed] Failed to cache vector: ${r instanceof Error?r.message:String(r)}
|
|
5
|
-
`)}}var Ue=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar"],He=["source_read","source_grep"],ze=[...Ue,...He],he=50,P=200,_e=10,ye=50,fe=20,Qe=200,Xe=50;function L(t,e,n){let s=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(s,n))}function R(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 $(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{};function V(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 pe(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function we(t,...e){let n=pe(t);if(n.size===0)return 0;let s=t.trim().toLowerCase(),r=0;for(let a of e){let o=pe(a);if(o.size===0)continue;let u=0;for(let c of n)o.has(c)&&u++;let d=n.size+o.size-u,m=d===0?0:u/d;s&&a.toLowerCase().includes(s)&&(m=Math.max(m,.9)),r=Math.max(r,m)}return r}function Ke(t,e){let n=R(e,"cid"),s=$(e,"type"),r=$(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new b('param "direction" must be out|in|both');let a=L(e.limit,he,P),o=[];return(r==="out"||r==="both")&&o.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&o.push(...t.edgesInto(n)),o.filter(u=>s==null||u.type===s).slice(0,a)}function We(t,e){let n=R(e,"source_id"),s=t.heads.get(n)??null,r=[];for(let a of t.nodeLabel.keys()){let o=t.derivesInto(a).filter(d=>d.props.source_id===n).map(d=>({source_cid:d.props.source_cid,anchor:d.props.anchor??null}));if(o.length===0)continue;let u=V(t,a);if(u&&(r.push({...u,pins:o,pinned_to_head:s!=null&&o.some(d=>d.source_cid===s)}),r.length>=P))break}return r}function Je(t,e){let n=R(e,"label"),s=$(e,"trust"),r=$(e,"freshness"),a=L(e.limit,he,P),o=[];for(let{cid:u}of t.byLabel(n)){let d=V(t,u);if(d&&!(s!=null&&d.trust!==s)&&!(r!=null&&d.freshness!==r)&&(o.push(d),o.length>=a))break}return o}function Ye(t){return t.staleList().map(({cid:e,state:n})=>{let s=t.getNode(e);return{cid:e,state:n,label:s?.label??null,title:s?.content.title??null}})}function Ze(t,e){let n=R(e,"text"),s=$(e,"label")??"usecase",r=L(e.k,_e,ye),a=[];for(let{cid:o,content:u}of t.byLabel(s)){let d=String(u.title??""),m=String(u.summary??""),c=we(n,d,m);c<=0||a.push({cid:o,title:d,summary:m,score:Math.round(c*1e3)/1e3,trust:t.trust.get(o)??null,freshness:t.stale(o)})}return a.sort((o,u)=>u.score-o.score||o.cid.localeCompare(u.cid)),a.slice(0,r)}function be(t,e,n){let s=t.heads.get(n);if(typeof s!="string"){let a=[...t.heads.keys()].sort().join(", ");throw new b(`unknown source_id "${n}" \u2014 known: ${a||"(none)"}`)}if(t.mediaOf(s).format==="image")throw new b(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=J(e,t,s);if(r==null)throw new b(`source "${n}" blob is missing from the store`);return{head:s,lines:r.toString("utf8").replace(/\n$/,"").split(`
|
|
6
|
-
`)}}function qe(t,e,n){return t.slice(e-1,n).map((s,r)=>`${String(e+r).padStart(4,"0")}| ${s}`).join(`
|
|
7
|
-
`)}function et(t,e,n){let s=R(e,"source_id"),r=$(e,"anchor"),a=e.line_range;if(r!=null&&a!=null)throw new b("give anchor OR line_range, not both");let{head:o,lines:u}=be(t,n,s),d=u.length,m,c;if(r!=null){let f=/^L(\d+)-L(\d+)$/.exec(r);if(!f)throw new b(`anchor "${r}" is not L<a>-L<b>`);let _=Number(f[1]),x=Number(f[2]);if(_<1||x<_||x>d)throw new b(`anchor "${r}" does not resolve (source has ${d} lines)`);m=Math.max(1,_-fe),c=Math.min(d,x+fe)}else if(a!=null){if(!Array.isArray(a)||a.length!==2||!a.every(x=>Number.isInteger(x)))throw new b('param "line_range" must be [from_line, to_line]');let[f,_]=a;if(f<1||_<f)throw new b('param "line_range" must be 1-based with from \u2264 to');if(f>d)throw new b(`line_range starts past the end (source has ${d} lines)`);m=f,c=Math.min(_,d)}else m=1,c=d;return c=Math.min(c,m+Qe-1),{window:qe(u,m,c),from_line:m,to_line:c,source_cid:o}}function tt(t,e,n){let s=R(e,"pattern"),r=$(e,"source_id"),a;try{a=new RegExp(s,"u")}catch(m){throw new b(`invalid pattern: ${m instanceof Error?m.message:String(m)}`)}let o=r!=null?[r]:[...t.heads.keys()].sort(),u=[],d=!1;e:for(let m of o){if(r==null){let f=t.heads.get(m);if(typeof f!="string"||t.mediaOf(f).format==="image")continue}let{lines:c}=be(t,n,m);for(let f=0;f<c.length;f++)if(a.test(c[f])){if(u.length>=Xe){d=!0;break e}u.push({source_id:m,line:f+1,text:c[f]})}}return{matches:u,truncated:d}}function nt(t,e,n,s){try{switch(e){case"get_node":return{ok:!0,result:V(t,R(n,"cid"))};case"get_edges":return{ok:!0,result:Ke(t,n)};case"find_by_provenance":return{ok:!0,result:We(t,n)};case"match_by_type":return{ok:!0,result:Je(t,n)};case"stale_nodes":return{ok:!0,result:Ye(t)};case"search_similar":return{ok:!0,result:Ze(t,n)};case"source_read":case"source_grep":{if(s==null)throw new b("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?et:tt)(t,n,s)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${ze.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 ge="assurance.sim";function rt(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
|
|
8
|
-
`)}async function st(t,e,n){let s=R(e,"text"),r=$(e,"label")??"usecase",a=L(e.k,_e,ye),o=[];for(let{cid:d,content:m}of t.byLabel(r)){if(t.superseded.has(d))continue;let c=String(m.title??""),f=String(m.summary??""),_=String(m.description??"");o.push({cid:d,title:c,summary:f,description:_,lex:we(s,c,f,_)})}let u=d=>{let m=[];for(let c of o){let f=d(c);f.score<=0||m.push({cid:c.cid,title:c.title,summary:c.summary,score:Math.round(f.score*1e3)/1e3,trust:t.trust.get(c.cid)??null,freshness:t.stale(c.cid),...f.dense!==void 0?{dense_score:Math.round(f.dense*1e3)/1e3,lexical_score:Math.round(c.lex*1e3)/1e3}:{}})}return m.sort((c,f)=>f.score-c.score||c.cid.localeCompare(f.cid)),m.slice(0,a)};try{let d=n.readVector??ue,m=n.writeVector??me,c=n.alpha??ce,{alias:f}=await n.resolveAlias(ge),_=new Map,x=[],T=[];for(let g of o){let S=d(n.contextDir,f,g.cid);S?_.set(g.cid,S):(x.push(g.cid),T.push(rt(g)))}let{vectors:p}=await n.embed(ge,[s,...T]),w=Float32Array.from(p[0]);for(let g=0;g<x.length;g++){let S=Float32Array.from(p[g+1]);_.set(x[g],S),m(n.contextDir,f,x[g],S)}return u(g=>{let S=_.get(g.cid),k=S?oe(w,S):0;return{score:ae(k,g.lex,c),dense:k}})}catch{return u(d=>({score:d.lex}))}}async function ve(t,e,n,s){if(e==="search_similar"&&s)try{return{ok:!0,result:await st(t,n,s)}}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)}`}}return nt(t,e,n,s?.contextDir)}var ot=2,xe=10,at=2;function Se(t,e,n){return t.map(s=>{let r=e.find(a=>a.id===s.id);return r&&r.selected_index!=null&&r.selected_index>=0&&r.selected_index<s.options.length?{id:s.id,resolution:"answered",selected_index:r.selected_index,free_text:null}:r&&r.free_text!=null&&s.allow_free_text?{id:s.id,resolution:"answered",selected_index:-1,free_text:r.free_text}:n.explicitAcceptDefaults?{id:s.id,resolution:"assumed-default",selected_index:s.recommended_index,flagged:!0}:{id:s.id,resolution:"deferred",selected_index:null}})}async function Ft(t,e,n,s,r=()=>{},a){let o=(i,l)=>r(i,l,t.session_id),u=(process.env.ASSURANCE_LOG_LEVEL??"info").toLowerCase()==="debug",d={contextDir:e.contextDir,resolveAlias:i=>se(i,{env:process.env,auth:e.auth}),embed:(i,l)=>ie(i,l,{env:process.env,auth:e.auth})},m=0,c=e.agent(t,{auth:e.auth,onWarn:i=>{o("warn",i),e.out(i)},onStderr:i=>o("agent_stderr",i)}),f=null,_=null,x,T=e.chat?.attachSender?.(i=>c.send(i));e.initialMessage&&(c.send({type:"user_message",message_id:`msg-${t.session_id}-${it(3).toString("hex")}`,text:e.initialMessage}),o("user_message_sent",{chars:e.initialMessage.length,...u?{text:e.initialMessage}:{}}),e.emit?.({type:"message_sent",sid:t.session_id,chars:e.initialMessage.length}),e.chat?.note(`delivered your message to the agent: "${e.initialMessage}"`));let p,w=0,g=0,S=0,k,v=Y(),A=e.progress??e.out;try{for await(let i of c.events){try{e.chat?.onAgentEvent(i)}catch(l){o("chat_mirror_error",{event_type:i.type,message:l instanceof Error?l.message:String(l)})}if(i.type==="reasoning_delta"?(m+=i.text.length,process.env.KANE_TRACE_REASONING&&o("reasoning_delta",i.text)):o(i.type,i),i.type==="reasoning_done"&&o("reasoning_chars",m),i.type==="progress")A(`\u2026 ${i.stage}${i.n?` #${i.n}`:""}`),e.emit?.({type:"agent_activity",kind:"progress",label:`${i.stage}${i.n?` #${i.n}`:""}`});else if(i.type==="reasoning_delta"||i.type==="reasoning_done"||i.type==="tool_activity"||i.type==="decision_activity"){e.onStreamEvent?.(i);let l=v;if(v=Z(v,i),v===l)continue;i.type==="reasoning_delta"?v.liveThinking===i.text&&A("\u2237 thinking\u2026"):i.type==="reasoning_done"?i.present&&(A(`thought for ${(i.took_ms/1e3).toFixed(1)}s`),e.emit?.({type:"agent_activity",kind:"thinking_done",label:`thought for ${(i.took_ms/1e3).toFixed(1)}s`})):i.type==="tool_activity"?i.status!=="done"&&(A(v.activity[v.activity.length-1].label),e.emit?.({type:"agent_activity",kind:"tool",label:v.activity[v.activity.length-1].label})):(A(`\xB7 ${v.activity[v.activity.length-1].label}`),e.emit?.({type:"agent_activity",kind:"decision",label:v.activity[v.activity.length-1].label}))}else if(i.type==="usage")k=i.total_credits,e.emit?.({type:"usage",credits:i.credits,total_credits:i.total_credits});else if(i.type==="graph_query"){let l=await ve(e.graphSlot?.current??s,i.method,i.params??{},d),E=l.ok?{type:"graph_result",id:i.id,ok:!0,result:l.result}:{type:"graph_result",id:i.id,ok:!1,error:l.error};o("graph_result",u?{id:i.id,method:i.method,ok:l.ok,result:l.ok?l.result:l.error}:{id:i.id,method:i.method,ok:l.ok}),c.send(E)}else if(i.type==="session_paused")x=i;else if(i.type==="ask_user"){i.text&&(e.chat?e.chat.ledger({kind:"agent",text:i.text}):e.out(i.text));let l=t.mode;if(l!=="interactive"){let h=i.questions.filter(y=>y.risk==="high");if(l==="ci"&&h.length>0){p=h,c.kill();break}if(l==="agent"&&h.length>0){o("pause_requested",{high:h.map(y=>y.id)}),c.send({type:"pause"});continue}let C=Se(i.questions,[],{explicitAcceptDefaults:!0});w+=C.length;for(let y of C)o("assumed_default",{id:y.id,resolution:y.resolution}),e.emit?.({type:"assumed_default",id:y.id,selected_index:y.selected_index,risk:i.questions.find(D=>D.id===y.id)?.risk});let M={type:"user_response",answers:C.map(y=>({id:y.id,selected_index:y.resolution==="deferred"?null:y.selected_index,free_text:null}))};c.send(M);continue}let E=await e.ask(i.questions),Ae=Se(i.questions,E,{explicitAcceptDefaults:!1}),Ee={type:"user_response",answers:i.questions.map(h=>{let C=E.find(y=>y.id===h.id);if(C?.free_text!=null){let y=n.get(h.id)??0;if(!h.allow_free_text||y>=ot){let D=h.options[h.recommended_index]?.label??"recommended option";if(w+=1,e.emit?.({type:"assumed_default",id:h.id,selected_index:h.recommended_index,risk:h.risk}),e.chat?.noteCoercion)e.chat.noteCoercion(h,D);else{let G=h.text.replace(/\?+\s*$/,""),$e=G.length<=36?G:`${G.slice(0,33)}\u2026`;e.out(`note: couldn't use a typed answer for "${$e}" \u2014 kept the recommended option (${D})`)}return{id:h.id,selected_index:h.recommended_index,free_text:null}}return n.set(h.id,y+1),{id:h.id,selected_index:null,free_text:C.free_text}}let M=Ae.find(y=>y.id===h.id);return M.resolution==="deferred"?{id:h.id,selected_index:null,free_text:null}:{id:h.id,selected_index:M.selected_index,free_text:null}})};c.send(Ee)}else if(i.type==="chat_ops"&&!e.chat){let l=i.chat_ops??i,E=Array.isArray(l.ops)?l.ops.length:0;if(E===0)l.text&&e.out(l.text),c.send({type:"session_complete"}),o("headless_zero_op_chat_turn_complete",{chars:l.text?.length??0});else if(S<at)S+=1,c.send({type:"user_message",message_id:`nochat-${t.session_id}-${S}`,text:"[auto-repair] chat ops are unavailable in this mode \u2014 commit through finalize_design, or finish if nothing remains."}),o("headless_chat_ops_nudge",{n:S,ops:E});else{_="agent kept sending chat ops in a mode with no chat plane",e.out("error: agent kept sending chat ops in a mode with no chat plane \u2014 closing the session"),o("headless_chat_ops_terminal",{ops:E}),c.kill();break}}else if(i.type===(a.terminalEventType??"proposal")){let l=await a.onProposalEvent(i[i.type]);if(f=l.proposal,l.error&&(_=l.error),l.receipt)e.emit?.(l.receipt.event),t.mode!=="interactive"?(g+=1,l.sessionComplete||g>=xe?(l.sessionComplete||(e.out(`warning: ${xe} commits without completion \u2014 closing the session (runaway guard)`),o("receipt_runaway_cap",{commits:g})),c.send({type:"session_complete"}),o("session_complete_sent",{commit_n:l.receipt.event.commit_n,runaway:!l.sessionComplete})):(c.send({type:"user_message",message_id:`receipt-${t.session_id}-${String(l.receipt.event.commit_n??0)}`,text:l.receipt.text}),o("receipt_sent",{commit_n:l.receipt.event.commit_n,chars:l.receipt.text.length}))):e.chat?.holdReceipt&&(e.chat.holdReceipt(l.receipt.text),o("receipt_held",{commit_n:l.receipt.event.commit_n}));else if(l.error&&t.mode!=="interactive"){e.out("error: commit failed with no repair channel \u2014 closing the session"),o("headless_commit_error_terminal",{error:l.error}),c.kill();break}}else if(i.type==="error"){_=i.message;let l=i.failed_proposal;l&&o("failed_proposal",l)}}}finally{c.kill(),T?.()}return{proposal:f,error:_,paused:x,highRisk:p,...w>0?{assumedDefaults:w}:{},...k!==void 0?{creditsTotal:k}:{}}}var ct=3,lt={edit:"edit",reject:"mistake",dedup_dropped:"mistake",approve:"usage",enhance:"directed-edit",add:"directed-edit",default_accepted:"usage",default_overridden:"edit",gap_resolution:"usage",dedup_kept:"usage"};function ke(t){let{contextDir:e,graph:n,watermark:s,by:r}=t,{signals:a}=F(e,s),o=a.filter(p=>p.event_id===void 0||n.appliedEvents.has(p.event_id)),u=new Map;for(let p of o){let w=p.event_id??`${p.ts}|${p.id}|${p.verdict}|${p.polarity}`;u.has(`${w}|${p.polarity}|${p.verdict}`)||u.set(`${w}|${p.polarity}|${p.verdict}`,p)}let d=[...u.values()].sort((p,w)=>(p.event_id??p.ts)<(w.event_id??w.ts)?-1:1),m=new Map;for(let p of d){let w=`${p.verdict}|${p.tag??""}`,g=m.get(w)??{verdict:p.verdict,tag:p.tag,events:new Set};g.events.add(p.event_id??p.ts),m.set(w,g)}let c=[],f=[],_=new Set,x=0;for(let[,p]of[...m.entries()].sort(([w],[g])=>w<g?-1:1)){if(p.events.size<ct)continue;let g={derived:!0,statement:`${p.verdict}${p.tag?`/${p.tag}`:""} recurs (${p.events.size} distinct events) \u2014 bias future proposals ${p.verdict==="approve"?"toward":"away from"} this pattern`,learned_from_kind:lt[p.verdict]??"usage",learned_from:[...p.events].sort()},S=H("stylenote",g);if(S.length>0)return{record:null,errors:S.map(A=>({code:A.code,detail:A.detail})),minted:0};let k=z("stylenote",g);if(n.hasNode(k))continue;c.push({cid:k,label:U.STYLENOTE,content:g});let v=K("stylenote",A=>_.has(A),n.names.keys());v!==null&&(_.add(v),f.push({cid:k,slug:v,by:r})),x+=1}return c.length===0?{record:null,errors:null,minted:0}:{record:Q(e,{ts:new Date().toISOString(),proposal_id:null,nodes:c,edges:[],review:[],supersessions:[],source_head_moves:{},...f.length>0?{names:f}:{}},{expectPrev:n.latestHash}).record,errors:null,minted:x}}var dt={kind:"system",id:"distiller"};function zt(t,e=n=>process.stderr.write(n+`
|
|
9
|
-
`)){try{let n=W(t),{watermark:s}=F(t),r=ke({contextDir:t,graph:n,watermark:s,by:dt});if(r.errors){let a=r.errors.map(o=>`${o.code}: ${o.detail}`).join("; ");return e(`warning: style-note distill skipped \u2014 ${a}`),{minted:0,error:a}}if(r.minted>0)try{X(t)}catch{}return{minted:r.minted,error:null}}catch(n){let s=n instanceof Error?n.message:String(n);return e(`warning: style-note distill skipped \u2014 ${s}`),{minted:0,error:s}}}export{mt as a,ve as b,se as c,ie as d,ot as e,Se as f,Ft as g,zt as h};
|
package/dist/chunk-MTNUZEO7.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{f as He}from"./chunk-K7USHLVZ.js";import{a as he,e as Be,g as je,h as We}from"./chunk-MR7CX5VT.js";import{a as Ge,b as qe,c as Le}from"./chunk-J44RN3FB.js";import{a as Te,b as Ne}from"./chunk-JFAFKHDX.js";import{b as Fe}from"./chunk-YKTYVJBN.js";import{a as Ue}from"./chunk-CVOGP253.js";import{a as Me}from"./chunk-GG43HSU2.js";import{c as Ie}from"./chunk-FMR2KPSK.js";import{c as Pe}from"./chunk-V3UE6RJP.js";import{a as se,b as Ae}from"./chunk-DNNZ353O.js";import{b as Oe}from"./chunk-FHKDTM5L.js";import{a as V}from"./chunk-NVGBE2DR.js";import{a as R}from"./chunk-7E24OCGX.js";import{e as z,f as re}from"./chunk-6W6AIDLJ.js";import{d as j}from"./chunk-5YPBPZUR.js";import{b as Ee}from"./chunk-IAHKTEET.js";import{a as Re}from"./chunk-5EOX4MEY.js";import{appendFileSync as ot,mkdirSync as pe,writeFileSync as _e}from"fs";import{dirname as nt,extname as at,join as U}from"path";var E=class extends Error{code;constructor(e,c){super(`${e}: ${c}`),this.name="ProposalAdapterError",this.code=e}};function ze(s){return s.version===2}function Ve(s,e){if(s.read_basis.length!==1)throw new E("READ_BASIS_COUNT",`read_basis must have exactly 1 element, got ${s.read_basis.length}`);let c=s.read_basis[0],u=s.use_cases.map(i=>{if(i.cite.length!==1)throw new E("CITE_COUNT",`${i.temp_ref}: cite must have exactly 1 element, got ${i.cite.length}`);let g=i.cite[0];if(g.source_id!==c.source_id)throw new E("SOURCE_MISMATCH",`${i.temp_ref}: cite source ${g.source_id} != read_basis source ${c.source_id} (single-source)`);return{temp_ref:i.temp_ref,title:i.title,...i.description!==void 0?{description:i.description}:{},...i.summary!==void 0?{summary:i.summary}:{},...i.actors!==void 0?{actors:i.actors}:{},...i.value!==void 0?{value:i.value}:{},risk:i.risk,cite:{anchor:g.anchor,quote:g.quote},...i.criteria!=null&&i.criteria.length>0?{criteria:i.criteria.map((d,_)=>{if(d.cite.source_id!==c.source_id)throw new E("SOURCE_MISMATCH",`${i.temp_ref}.criteria[${_}]: cite source ${d.cite.source_id} != read_basis source ${c.source_id} (single-source)`);return{text:d.text,cite:{anchor:d.cite.anchor,quote:d.cite.quote}}})}:{},depends_on_hint:i.depends_on_hint,matches_existing:i.matches_existing,...i.conflicts_with!=null?{conflicts_with:i.conflicts_with}:{},...i.changed?{changed:!0}:{},...i.updated!=null?{updated:{...i.updated.title!=null?{title:i.updated.title}:{},...i.updated.description!=null?{description:i.updated.description}:{},...i.updated.summary!=null?{summary:i.updated.summary}:{},...i.updated.actors!=null?{actors:i.updated.actors}:{},...i.updated.value!=null?{value:i.updated.value}:{},...i.updated.risk!=null?{risk:i.updated.risk}:{},...i.updated.criteria!=null?{criteria:i.updated.criteria.map((d,_)=>{if(d.cite.source_id!==c.source_id)throw new E("SOURCE_MISMATCH",`${i.temp_ref}.updated.criteria[${_}]: cite source ${d.cite.source_id} != read_basis source ${c.source_id} (single-source)`);return{text:d.text,cite:{anchor:d.cite.anchor,quote:d.cite.quote}}})}:{}}}:{},...i.change_note!=null?{change_note:i.change_note}:{}}});return{version:1,read_basis:e,source:{source_id:c.source_id,source_cid:c.source_cid},use_cases:u}}function Je(s){let{contextDir:e,graph:c}=s,u=s.maxDigestBytes??4096,i={},g=[];for(let[l,f]of c.heads){if(i[l]=f,typeof f!="string")continue;let x=c.mediaOf(f),k=c.getNode(f)?.content?.blob;if(typeof k=="string")if(x.format==="image")g.push({source_id:l,cid:f,format:"image",blobRef:{path:V(e,k),cid:k}});else{let n=se(e,c,f)?.toString("utf8")??"";g.push({source_id:l,cid:f,format:x.format,text:n})}}g.sort((l,f)=>l.source_id<f.source_id?-1:1);let d=[];for(let l of c.byLabel(j.STYLENOTE).sort((f,x)=>f.cid<x.cid?-1:1))c.superseded.has(l.cid)||d.push(`\u2022 ${String(l.content.statement)} [${String(l.content.learned_from_kind)}]`);let _="";for(let l of d){if(Buffer.byteLength(_+l+`
|
|
3
|
-
`,"utf8")>u)break;_+=l+`
|
|
4
|
-
`}return{read_basis:i,sources:g,styleNoteDigest:_}}function Ke(s,e){let c=Je({contextDir:s,graph:e}).styleNoteDigest;return c.length>0?c:void 0}function ct(s,e){let c=(s.images??[]).filter(u=>u.delivery==="selected");if(c.length!==0)return c.map(u=>({ref:u.ref,...u.page!==void 0?{page:u.page}:{},...u.loc!==void 0?{loc:u.loc}:{},media_type:u.media_type,blob_ref:{path:V(e,u.blob),cid:u.blob}}))}function dt(s){return s.length>8&&s[0]===137&&s[1]===80&&s[2]===78&&s[3]===71?"image/png":s.length>3&&s[0]===255&&s[1]===216&&s[2]===255?"image/jpeg":s.length>12&&s.toString("ascii",0,4)==="RIFF"&&s.toString("ascii",8,12)==="WEBP"?"image/webp":null}function Xe(s){return s.toISOString().replace(/[-:]/g,"").slice(0,15)}function ut(s){return s.startsWith("su-conv-")?`conv-${Ee(Buffer.from(s,"utf8")).slice(0,8)}`:s}function et(s){return s.source_id.startsWith("su-conv-")?"the conversation":s.source_id}function lt(s,e,c){return`reading ${et(s)}${c>1?` (source ${e} of ${c})`:""}`}function J(s){return s.toLowerCase().trim().replace(/\s+/g," ")}function Ye(s,e){let c=new Map,u=new Map,i=new Map;for(let{cid:d,content:_}of e.byLabel(j.USECASE)){if(e.superseded.has(d))continue;(e.trust.get(d)==="archived"?i:u).set(J(String(_.title??"")),d)}let g=d=>e.trust.get(d)==="archived"?{cid:d,archived:!0,reason:e.archivedReason.get(d)}:{cid:d};for(let d of s.use_cases){if(d.matches_existing){let f=d.matches_existing.cid;if(e.superseded.has(f)){let x=e.tipOf(f);f=e.superseded.has(x)?null:x}if(f!==null){c.set(d.temp_ref,g(f));continue}}let _=u.get(J(d.title));if(_){c.set(d.temp_ref,{cid:_});continue}let l=i.get(J(d.title));l&&c.set(d.temp_ref,g(l))}return c}var Qe=/^(\S+)\.criteria\[(\d+)\]/;function mt(s,e,c){if(e.length===0||!e.every(i=>Qe.test(i.detail)))return!1;let u=new Map;for(let i of e){let g=Qe.exec(i.detail),d=u.get(g[1])??new Set;d.add(Number(g[2])),u.set(g[1],d)}for(let i of s.use_cases){let g=u.get(i.temp_ref);g?.size&&(i.criteria=(i.criteria??[]).filter((d,_)=>!g.has(_)),c(`${i.temp_ref}: dropped ${g.size} criteria with unverifiable cites \u2014 committed without them (criteria are hints, not oracles)`))}return!0}async function Ze(s,e,c,u,i=()=>{},g){let d=(_,l)=>i(_,l,s.session_id);return je(s,e,c,u,i,{async onProposalEvent(_){let l=_,f=null,x=null;if(ze(l))try{f=Ve(l,s.read_basis),d("adapter",{ok:!0,use_cases:f.use_cases.length})}catch(k){x=k instanceof E?k.message:String(k),d("adapter",{ok:!1,error:x})}else f=l;return f&&f.use_cases.length===0&&e.out("warning: the agent proposed ZERO use-cases for this source"),f&&g&&await g(f),{proposal:f,error:x}}})}var gt=new Set(["agent","ci","override"]);async function Jt(s,e){let c=s.mode??"interactive";if(c==="interactive"){if(!e.isTTY)return e.out("extract: --mode interactive needs a TTY (use --mode agent|ci|override headless)"),2}else if(!gt.has(c))return e.out(`extract: unknown mode "${c}" \u2014 interactive | agent | ci | override`),2;let u=e.telemetry?.enabled?e.telemetry:void 0,i=Xe(e.now?.()??new Date),g=u?Re(u.ids.context_instance_id??null,"extract",u.ids.session_id):U(e.contextDir,"logs",`extract-${i}.log`);pe(nt(g),{recursive:!0});let d=`run-${i}-${Math.random().toString(36).slice(2,8)}`,_=t=>t==="error"||t==="failed_proposal"?"error":t==="repair_respawn"?"warn":"info",l=(t,a,m)=>{try{ot(g,JSON.stringify({ts:new Date().toISOString(),level:_(t),run_id:d,...u?{user_session_id:u.ids.session_id}:{},...m?{session_id:m}:{},kind:t,data:a})+`
|
|
5
|
-
`)}catch{}u?.wireTrace(t,a,m)};e.out(`trace: ${he(g)}`),u&&e.out(u.banner()),e.emit?.({type:"run_start",mode:c,trace:g});let f=Fe();if(f&&e.out(f),e.preflightTurn){let t=await e.preflightTurn();if(l("preflight",t),!t.ok)return e.out(t.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:t.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),2}let x=R(e.contextDir),k=Ke(e.contextDir,x);if(s.source){if(s.resume){let a="error: --source cannot be combined with --resume (the resumed session already has its scope)";return e.out(a),e.emit?.({type:"error",message:a,code:"SOURCE_WITH_RESUME"}),2}let t=x.heads.get(s.source);if(typeof t!="string"){let a=t===null?`error: --source ${s.source} was ingested but is retired \u2014 re-ingest it to extract again`:`error: --source ${s.source} is not an ingested source (kane-cli context list shows them)`;return e.out(a),e.emit?.({type:"error",message:a,code:"SOURCE_UNKNOWN"}),2}}let n=null;if(s.resume){try{n=Le(e.contextDir,s.resume,x)}catch(m){return e.out(`error: ${m instanceof Error?m.message:String(m)}`),e.emit?.({type:"error",message:`error: ${m instanceof Error?m.message:String(m)}`}),1}let t=n.handle.state.change_basis;if(t&&(x.heads.get(t.source_id)??null)!==t.new_head){let m=`error: ${t.source_id} moved while this reconcile extraction was paused \u2014 its recorded change context no longer matches; re-run kane-cli maintain reconcile against the current file (session ${s.resume} is defunct and can be ignored)`;return e.out(m),e.emit?.({type:"error",message:m,code:"CHANGE_BASIS_MOVED"}),n.handle.release(),2}n.staleBasis.length>0&&e.out(`note: changed since the pause: ${n.staleBasis.join(", ")} \u2014 re-presented items may be stale`);let a=n.handle.state.held_receipts??[];if(a.length>0)if(e.chat?.holdReceipt)for(let m of a)e.chat.holdReceipt(m);else e={...e,initialMessage:[a.join(`
|
|
6
|
-
|
|
7
|
-
`),e.initialMessage].filter(Boolean).join(`
|
|
8
|
-
|
|
9
|
-
`)};n.handle.state.assumed.length>0&&e.out(`note: ${n.handle.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${s.resume} lists them`)}let xe=x.extractedSourceCids,K=!!(s.force||n?.handle.state.force),y=[],P=[];for(let[t,a]of x.heads.entries())if(a!=null&&!(s.source&&t!==s.source)){if(!s.source&&!n&&t.startsWith("su-conv-")){e.out(`skipped: ${t} \u2014 conversation source (extract it explicitly with --source ${t})`),P.push({source_id:t,reason:"conversation"});continue}if(n){let m=t in n.handle.state.read_basis,I=n.handle.state.corpus_cursor.remaining.includes(t);if(!m&&!I)continue;if(I&&!K&&xe.has(a)){e.out(`cached: ${t} @ ${a.slice(0,19)} already extracted \u2014 skipping`),P.push({source_id:t,reason:"cached"});continue}}else if(!K&&xe.has(a)){e.out(`cached: ${t} @ ${a.slice(0,19)} already extracted \u2014 skipping`),P.push({source_id:t,reason:"cached"});continue}y.push({source_id:t,cid:a})}let tt=t=>{let a=He(e.contextDir,t);a&&e.out(`note: a reconcile plan for ${t} is pending (${a.pending} item(s)) \u2014 resume with \`kane-cli maintain reconcile --apply ${a.path}\``)};for(let t of P)t.reason==="cached"&&tt(t.source_id);if(e.emit?.({type:"corpus",sources:y,skipped:P}),y.length===0){if(n){let m=`error: resumed session's paused source (${Object.keys(n.handle.state.read_basis).join(", ")||"unknown"}) is no longer in the corpus \u2014 restore/re-ingest it and re-run --resume ${s.resume}, or discard with: kane-cli context sessions clean ${s.resume}`;return e.out(m),e.emit?.({type:"error",message:m,code:"SOURCE_MISSING"}),n.handle.release(),2}let t=P.length>0&&P.every(a=>a.reason==="conversation");return e.out(s.source?`extract: nothing to do \u2014 ${s.source} is already extracted at its current snapshot (--force to re-run)`:t?"extract: nothing to do \u2014 only conversation sources here (extract one explicitly with --source <id>)":"extract: nothing to do \u2014 every ingested source is already extracted"),0}let X=new Map;if(n&&n.questions.length>0&&!s.message){e.out(`re-presenting ${n.questions.length} unanswered question(s) from the paused session`);let t=await e.ask(n.questions.map(Ge));for(let a of t)X.set(a.id,a)}let H=e.by??{kind:"human",id:"owner"},A=c==="interactive"&&!s.plan&&!!e.chat,ie=0,ye=0;try{for(let t of y){let a=R(e.contextDir),m={current:a};e.chat?.attachOnCommitted?.(r=>{m.current=r});let I=a.getNode(t.cid),Y=String(I?.content.blob??""),oe=se(e.contextDir,a,t.cid);if(!oe)return e.out(`error: ${t.source_id}: blob ${Y} missing from .context/blobs`),e.emit?.({type:"error",source_id:t.source_id,message:`error: ${t.source_id}: blob ${Y} missing from .context/blobs`,code:"BLOB_MISSING"}),1;let G=a.mediaOf(t.cid),ne=G.media_type.startsWith("image/");if(!ne){let r=dt(oe);if(r){e.out(`skipping ${t.source_id}: binary ${r} ingested before image support \u2014 re-ingest it (kane-cli context ingest) to extract from it`),e.emit?.({type:"source_skipped",source_id:t.source_id,reason:"binary_pre_media"});continue}}let q=ne?`0001| (image source ${t.source_id} \u2014 the content is attached as an image; cite it with anchor img#whole)`:Ae(oe),ve=Xe(e.now?.()??new Date),M=`${ve}-${t.source_id}`,be=!!(n&&t.source_id in n.handle.state.read_basis)?s.resume:`ext-${ve}-${ut(t.source_id)}`,T="";if(A){let r=Ie({contextDir:e.contextDir,graph:R(e.contextDir),sessionStamp:be,by:H});r.errors===null||r.errors[0]?.code==="CONV_SOURCE_EXISTS"?(T=r.sourceId,e.chat.attachConversationSource?.(T),m.current=R(e.contextDir)):e.out(`warning: conversation source unavailable (${r.errors[0]?.detail}) \u2014 chat adds will not land this session`)}let $={type:"run_config",version:1,session_id:be,mode:c,source:{source_id:t.source_id,source_cid:t.cid,kind:Pe.has(G.format)?G.format:at(t.source_id)||"md",numbered_text:q,...(()=>{let r=ct(G,e.contextDir);return r?{images:r}:{}})()},existing_use_cases:a.byLabel(j.USECASE).filter(({cid:r})=>a.trust.get(r)!=="archived"&&!a.superseded.has(r)).map(({cid:r,content:o})=>({id:r,title:String(o.title??""),summary:String(o.summary??"")})),read_basis:m.current.latestHash,max_free_text_rounds:Be,graph_reads:!0,verb:"extract",...k!==void 0?{style_note_digest:k}:{},...s.changeContext&&s.changeContext.source_id===t.source_id?{change_context:s.changeContext}:{},topology:Ue(),...A?{chat:!0}:{},...ne?{image_sources:[{source_id:t.source_id,source_cid:t.cid,media_type:G.media_type,blob_ref:{path:V(e.contextDir,Y),cid:Y}}]}:{},...n&&t.source_id in n.handle.state.read_basis?{resume:{agent_state:n.handle.state.agent_state}}:{}};A||e.out(n&&t.source_id in n.handle.state.read_basis?`resuming: ${t.source_id} (session ${s.resume})`:`extracting: ${t.source_id} @ ${t.cid.slice(0,19)}`),e.emit?.({type:"source_start",source_id:t.source_id,cid:t.cid,index:y.indexOf(t)+1,total:y.length,resumed:!!(n&&t.source_id in n.handle.state.read_basis)}),e.chat?.ledger?.({kind:"banner",text:lt(t,y.indexOf(t)+1,y.length)}),e.chat?.setWorking?.(`Reading ${et(t)}\u2026`);let $e=new Map;l("spawn",{source_id:t.source_id,source_cid:t.cid,resume:!!n,chat:A},$.session_id);let Se=!1,rt=async r=>{let o=z(r,q,R(e.contextDir));if(l("kane_validate",{errors:o.map(p=>p.code)},$.session_id),o.length>0){e.chat.submit("[auto-repair] the proposal failed validation: "+o.map(p=>`${p.code}: ${p.detail}`).join("; ")+" \u2014 please re-finalize with these fixed.");return}let v=R(e.contextDir),C=Ye(r,v),ee=U(e.contextDir,"proposals",M);pe(ee,{recursive:!0}),_e(U(ee,"proposal.json"),JSON.stringify(r,null,2)+`
|
|
10
|
-
`);let it=new Map(r.use_cases.map(p=>[p.temp_ref,{resolution:"skipped"}])),te=re({contextDir:e.contextDir,graph:v,proposal:r,proposalId:M,verdicts:it,by:{kind:"ai",id:"extract-agent"},autoName:!0});if(te.errors){e.chat.ledger?.({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:te.errors.map(p=>`${p.code}: ${p.detail}`)});return}Se=!0;let F=te.record.nodes.length;ie+=F;let B=r.use_cases.length-F;{let p=R(e.contextDir),De=new Map;for(let{cid:b,content:D}of p.byLabel(j.USECASE))p.superseded.has(b)||De.set(J(String(D.title??"")),b);let fe=[];for(let b of r.use_cases){let D=null;if(b.matches_existing?.cid&&p.hasNode(b.matches_existing.cid)){let W=p.tipOf(b.matches_existing.cid);D=p.superseded.has(W)?null:W}D=D??De.get(J(b.title))??null,D&&fe.push({ref:b.temp_ref,cid:D,...p.displayNameOf(D)?{id:p.displayNameOf(D)}:{}})}fe.length>0&&e.chat.registerAliases?.(fe),m.current=p;let ke=b=>{for(let[D,W]of p.names)if(W===b&&!p.superseded.has(W))return D},Ce=Me({verb:"extract",commitN:1,phase:"proposal",committed:te.record.nodes.map(b=>({cid:b.cid,...ke(b.cid)?{logical_id:ke(b.cid)}:{}})),reused:B},p);e.emit?.(Ce.event),e.chat.holdReceipt?.(Ce.text)}l("commit",{derived:F,evidence_matched:B,chat:!0},$.session_id),e.chat.ledger?.({kind:"commit",ok:!0,line:F===0&&B>0?`all ${B} matched existing \u2014 nothing new to save`:`saved ${F} use-case${F===1?"":"s"} as drafts`+(B>0?` \xB7 ${B} matched existing`:"")})},we=!!(n&&t.source_id in n.handle.state.read_basis),Q=we&&X.size>0?{...e,ask:async r=>r.every(o=>X.has(o.id))?(n.handle.markApplied(r.map(o=>`resolveq:${s.resume}:${o.id}`)),e.out(`answered ${r.length} re-asked question(s) from the held resume answers`),r.map(o=>X.get(o.id))):e.ask(r)}:e;we&&s.message&&(Q={...Q,initialMessage:s.message});let h=await Ze($,{...Q,graphSlot:m},$e,a,l,A?rt:void 0);if(e.chat?.setWorking?.(null),h.error)return e.out(`error: agent failed for ${t.source_id}: ${h.error}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: agent failed for ${t.source_id}: ${h.error}`}),1;if(h.highRisk)return e.out(`error: ${h.highRisk.length} high-risk decision${h.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),e.emit?.({type:"error",source_id:t.source_id,message:`error: high-risk question(s) in ci mode (fail-closed): ${h.highRisk.map(r=>r.id).join(", ")}`,code:"HIGH_RISK_CI"}),1;if(h.paused){let r=y.slice(y.indexOf(t)+1).map(ee=>ee.source_id),o=n?.handle??Oe(e.contextDir,{sid:$.session_id,mode:"agent",created_at:(e.now?.()??new Date).toISOString(),expires_at:new Date((e.now?.()??new Date).getTime()+1440*60*1e3).toISOString(),agent_state:h.paused.agent_state,pending:{questions:[],proposals:[]},assumed:[],read_basis:{[t.source_id]:t.cid},corpus_cursor:{remaining:r},conv_source:T,verb:"extract",...K?{force:!0}:{},...s.changeContext?{change_basis:{source_id:s.changeContext.source_id,new_head:s.changeContext.new_head}}:{},...u?{user_session_id:u.ids.session_id}:{}});T&&o.state.conv_source!==T&&o.save({conv_source:T});let v=e.chat?.drainHeldReceipts?.()??[];(v.length>0||(o.state.held_receipts?.length??0)>0)&&o.save({held_receipts:v}),n?.handle&&o.save({read_basis:{[t.source_id]:t.cid},corpus_cursor:{remaining:r},...K&&!o.state.force?{force:!0}:{},...u&&o.state.user_session_id!==u.ids.session_id?{user_session_id:u.ids.session_id}:{}}),qe(o,h.paused),l("session_paused",{sid:o.state.sid},$.session_id);let C=`kane-cli context extract --resume ${o.state.sid} --mode ${c}`;return e.out(`paused: session ${o.state.sid} saved \u2014 resume with: ${C}`),e.emit?.({type:"session_paused",sid:o.state.sid,source_id:t.source_id,mode:c,resume:C,expires_at:o.state.expires_at,pending_questions:h.paused.pending.questions}),e.chat?.ledger?.({kind:"pause",sid:o.state.sid,expires_at:o.state.expires_at,resume:C,messageForm:`${C} --message "<your words>"`}),3}if(A){if(ye+=h.assumedDefaults??0,h.error)return 1;if(!Se){let r=y.length-y.indexOf(t)-1;return e.out(`done \u2014 nothing committed for ${t.source_id} (no finalize before the session ended)`+(r>0?`; stopping here \u2014 ${r} remaining source(s) not extracted (re-run kane-cli context extract to continue)`:"")),n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),n=null),0}n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),n=null);continue}if(!h.proposal)return e.out(`error: agent ended without a proposal for ${t.source_id}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: agent ended without a proposal for ${t.source_id}`}),1;let w=z(h.proposal,q,a);if(l("kane_validate",{errors:w.map(r=>r.code)},$.session_id),w.length>0&&mt(h.proposal,w,r=>e.out(r))&&(l("criteria_dropped",{source_id:t.source_id},$.session_id),w=z(h.proposal,q,a)),w.length>0){if(e.out("the agent's proposal didn't validate \u2014 retrying once"),e.emit?.({type:"validate_failed",source_id:t.source_id,codes:w.map(r=>r.code),repairing:!0}),l("repair_respawn",{source_id:t.source_id},$.session_id),h=await Ze($,{...Q,graphSlot:m},$e,a,l),h.error||!h.proposal)return e.out(`error: repair run failed for ${t.source_id}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: repair run failed for ${t.source_id}`}),1;if(w=z(h.proposal,q,a),w.length>0){for(let r of w)e.out(` ${r.detail}`);return e.emit?.({type:"validate_failed",source_id:t.source_id,codes:w.map(r=>r.code),repairing:!1}),e.emit?.({type:"error",source_id:t.source_id,message:`error: proposal failed validation after repair (${w.map(r=>r.code).join(", ")})`}),1}}let S=h.proposal,Z=Ye(S,a),ae=U(e.contextDir,"proposals",M);if(pe(ae,{recursive:!0}),_e(U(ae,"proposal.json"),JSON.stringify(S,null,2)+`
|
|
11
|
-
`),s.plan){e.out(`plan: ${S.use_cases.length} use-case(s) proposed from ${t.source_id} (nothing committed)`);for(let r of S.use_cases){let o=Z.get(r.temp_ref),v=o?o.archived?` \u2248 matches ARCHIVED ${o.cid.slice(0,19)}${o.reason?` \u2014 previously rejected: "${o.reason}"`:" \u2014 previously rejected"}`:` \u2248 matches ${o.cid.slice(0,19)}`:"";e.out(` [${r.risk}] ${r.title} \u2014 cite ${r.cite.anchor}${v}`)}e.emit?.({type:"plan",source_id:t.source_id,use_cases:S.use_cases.map(r=>{let o=Z.get(r.temp_ref);return{risk:r.risk,title:r.title,anchor:r.cite.anchor,...o?{match:o.cid,match_archived:!!o.archived}:{}}})}),h.assumedDefaults&&e.out(`assumed: ${h.assumedDefaults} default(s) auto-taken (flagged)`);continue}for(let r of S.use_cases){if(!r.conflicts_with?.length)continue;let o=r.conflicts_with.filter(C=>a.resolve(C)!==null),v=r.conflicts_with.filter(C=>a.resolve(C)===null);v.length>0&&(e.out(`note: ${r.temp_ref}: dropped unresolvable conflict hint(s): ${v.join(", ")}`),r.conflicts_with=o.length>0?o:void 0)}l("review_start",{use_cases:S.use_cases.length,flags:Z.size},$.session_id);let L=await e.review(S.use_cases,Z);l("review_verdicts",[...L.entries()].map(([r,o])=>({ref:r,resolution:o.resolution})),$.session_id),_e(U(ae,"review.json"),JSON.stringify(S.use_cases.map(r=>{let o=L.get(r.temp_ref)??{resolution:"skipped"};return{id:r.temp_ref,kind:"review-item",resolution:o.resolution,edit:o.edit??null,reason:o.reason??null,...o.supersedeTarget?{supersede_target:o.supersedeTarget}:{},by:H}}),null,2)+`
|
|
12
|
-
`);let ce=a,O=re({contextDir:e.contextDir,graph:ce,proposal:S,proposalId:M,verdicts:L,by:H,autoName:!0});if(O.errors&&O.errors[0]?.code==="STALE_BASIS"){if(!await e.confirmStale(`the context changed while you reviewed (${O.errors[0].detail}) \u2014 commit against the new head anyway?`))return e.out("aborted: proposal not committed"),e.emit?.({type:"error",source_id:t.source_id,message:"aborted: proposal not committed",code:"STALE_BASIS"}),e.emit?.({type:"done",status:"aborted",exit_code:1}),1;ce=R(e.contextDir),O=re({contextDir:e.contextDir,graph:ce,proposal:S,proposalId:M,verdicts:L,by:H,allowStaleBasis:!0,autoName:!0})}if(O.errors){for(let r of O.errors)e.out(` ${r.detail}`);return e.emit?.({type:"error",source_id:t.source_id,message:`error: commit failed: ${O.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}`}),1}let st=new Date().toISOString();for(let r of S.use_cases){let o=L.get(r.temp_ref)??{resolution:"skipped"};for(let v of Ne({ts:st,command:"context extract",id:r.temp_ref,by:H},o.resolution))Te(e.contextDir,v)}let N=O.record,de=new Map(N.review.map(r=>[r.id,r.resolution])),ue=[...de.values()].filter(r=>r==="approved"||r==="edited").length,le=[...de.values()].filter(r=>r==="rejected").length,me=N.nodes.filter(r=>!de.has(r.cid)).length,ge=N.supersessions.filter(r=>r.kind==="node"&&r.new!==r.old).length;l("commit",{trusted:ue,derived:me,archived:le},$.session_id),e.out(`committed: ${ue} trusted, ${me} derived (queued), ${le} archived`+(ge>0?`, ${ge} superseded`:"")),h.assumedDefaults&&e.out(`assumed: ${h.assumedDefaults} default(s) auto-taken (flagged)`),e.emit?.({type:"commit",source_id:t.source_id,proposal_id:M,trusted:ue,derived:me,archived:le,superseded:ge,assumed:h.assumedDefaults??0,evidence_matched:Math.max(0,S.use_cases.length-N.nodes.length),minted:N.nodes.map(r=>{let o=N.names?.find(v=>v.cid===r.cid)?.slug;return{cid:r.cid,...o?{logical_id:o}:{}}})}),n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),e.out(`session ${s.resume} complete`),e.emit?.({type:"session_complete",sid:s.resume,source_id:t.source_id}),u?.event("ASR_SESSION_COMPLETE",{}),n=null)}}finally{n?.handle.release()}if(A){let t=e.chat?.state.ledger.filter(I=>I.kind==="answer"&&I.receipt.form==="assumed").length??0,a=ye+t,m=e.chat?.state.credits?.total;e.chat?.ledger?.({kind:"summary",lines:[`saved ${ie} use-case${ie===1?"":"s"} across ${y.length} source${y.length===1?"":"s"}`,...a>0?[`${a} assumed default(s)`]:[],...m!==void 0?[`credits used: ${m.toFixed(1)}`]:[],`trace: ${he(g)}`]})}return s.plan||We(e.contextDir),0}export{ct as a,ut as b,et as c,lt as d,Ye as e,Jt as f};
|
package/dist/chunk-OGWC3J3C.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as J}from"./chunk-YSSTGJ7O.js";import{m as H,o as P}from"./chunk-Y5RNCJAN.js";import{a as ce}from"./chunk-6YGTRKDT.js";import{e as ue}from"./chunk-UR6MHSHU.js";var u=ue(ce(),1);function $(p,r){let f=null,R=(b,j)=>{for(let S=0;S<b.length;S++){let y=b[S],l=[...j,S];r(y)&&(f===null||l.length>f.length)&&(f=l),y.children&&y.children.length>0&&R(y.children,l)}};return R(p,[]),f}function T(p,r,f){if(r.length===0)return[...p];let R=r[0],b=[...p],j=b[R];if(r.length===1)b[R]=f(j);else{let S=r.slice(1),y=T(j.children??[],S,f);b[R]={...j,children:y}}return b}function K(){return{steps:[],maxOrdinal:0}}function le(p,r){if(r.type==="run_start"&&r.environment?.resolution)return{...p,resolution:r.environment.resolution};if(r.type==="step_end"&&typeof r.ordinal=="number"&&r.id){let f={id:r.id,ordinal:r.ordinal,status:r.status,...r.kind?{kind:r.kind}:{},...typeof r.duration=="number"?{duration_ms:Math.round(r.duration*1e3)}:{},...typeof r.action_id=="string"&&r.action_id?{action_id:r.action_id}:{}};return{...p,steps:[...p.steps,f],maxOrdinal:Math.max(p.maxOrdinal,r.ordinal)}}return p}function D(p){let r=p.indexOf(": ");return r>0&&r<15?p.slice(r+2):p}function W(p){return p.map(r=>{let f=r.children?W(r.children):r.children;return r.status==="running"?{...r,status:"stopped",phase:void 0,children:f}:f!==r.children?{...r,children:f}:r})}function Se(p,r,f,R,b){let[j,S]=(0,u.useState)(!1),[y,l]=(0,u.useState)([]),[Q,B]=(0,u.useState)(null),[X,F]=(0,u.useState)(null),[Y,w]=(0,u.useState)(null),[Z,L]=(0,u.useState)(null),[ee,q]=(0,u.useState)([]),[ne,G]=(0,u.useState)(null),[te,ie]=(0,u.useState)(void 0),m=(0,u.useRef)(null),x=(0,u.useRef)(null),_=(0,u.useRef)(0),A=(0,u.useRef)(!1),O=(0,u.useRef)(K()),re=(0,u.useCallback)(async(I,V)=>{let z=m.current;if(z){try{await z.exited}catch{}m.current=null}l([]),B(null),F(null),w(null),L(null),q([]),G(null),ie(I.max_steps),S(!0),x.current=null,_.current=0,O.current=K();let h;try{h=J(I,V)}catch(E){w(E instanceof Error?E.message:String(E)),S(!1);return}m.current=h,H("runner",()=>h.cancel()),(async()=>{A.current=!1;let E=!1;for await(let e of h.events){if(A.current)break;switch(O.current=le(O.current,e),e.type){case"run_start":if(e.child_id)break;if(x.current&&!x.current.isSingleFlow){let o=_.current;_.current++,l(d=>d.map((i,s)=>s===o?{...i,status:"running"}:i.status==="running"&&!i.children?.some(n=>n.status==="running")?{...i,status:i.children?.some(n=>n.status==="failed")?"failed":"passed"}:i))}break;case"bifurcation":{let o=e.flows??[],d=e.count??o.length,i={flows:o,isSingleFlow:e.is_single_flow??d<=1};L(i),x.current=i,_.current=0,l(o.map((s,n)=>({index:n+1,objective:s??`Flow ${n+1}`,status:"pending"})));break}case"step_start":{r?.("STEP_START",`Step ${e.index} started`,{index:e.index,objective:e.objective,child_id:e.child_id});let o=e.index,d=e.objective??`Step ${o}`,i=e.child_id,s=x.current&&!x.current.isSingleFlow;if(i)l(n=>{let t=$(n,a=>a.branchChildId===i)??$(n,a=>a.status==="running");return t?T(n,t,a=>{let c=(a.children??[]).map(g=>g.status==="running"&&g.childId===i?{...g,status:"stopped",phase:void 0}:g);return c.push({index:o,objective:d,status:"running",childId:i}),{...a,children:c}}):n});else if(s){let n=Math.max(0,_.current-1);l(t=>{let a=[...t];if(n>=a.length)return t;let c={...a[n]},k=[...c.children??[]].map(U=>U.status==="running"&&U.childId===void 0?{...U,status:"stopped",phase:void 0}:U);return k.push({index:o,objective:d,status:"running"}),c.children=k,c.status="running",a[n]=c,a})}else l(n=>{let t=W(n);return t.some(c=>c.index===o)?t.map(c=>c.index===o?{...c,status:"running",objective:d}:c):[...t,{index:o,objective:d,status:"running"}]});break}case"step_event":{r?.("STEP_EVENT",`Step ${e.index} ${e.event}`,{index:e.index,phase:e.event,action_type:e.action_type,detail:e.detail,child_id:e.child_id});let o=e.child_id,d=x.current&&!x.current.isSingleFlow;if(e.event==="cm_init"&&e.checkpoint_count!=null){q(i=>[...i,e.checkpoint_count]);break}if(e.event==="replay_started"){G({recordingLength:e.recording_length??0});break}if(e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&f?.(e.detail),o){let i=n=>{if(n.index!==e.index||n.childId!==o)return n;let t={phase:e.event};return e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(t.objective=e.detail),e.action_type&&(t.actionType=e.action_type),{...n,...t}},s=n=>n.map(t=>{let a=i(t);return a!==t?a:t.children&&t.children.length>0?{...t,children:s(t.children)}:t});l(n=>n.map(t=>t.children?{...t,children:s(t.children)}:t))}else if(d){let i=Math.max(0,_.current-1);l(s=>{let n=[...s];if(i>=n.length)return s;let t={...n[i]},a=[...t.children??[]];if(!a.some(g=>g.index===e.index&&g.childId===void 0))a.push({index:e.index,objective:`Step ${e.index}`,status:"running",phase:e.event,actionType:e.action_type});else for(let g=0;g<a.length;g++){if(a[g].index!==e.index||a[g].childId!==void 0)continue;let k={phase:e.event};e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(k.objective=e.detail),e.action_type&&(k.actionType=e.action_type),a[g]={...a[g],...k}}return t.children=a,n[i]=t,n})}else l(i=>i.some(n=>n.index===e.index)?i.map(n=>{if(n.index!==e.index)return n;let t={phase:e.event};return e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(t.objective=e.detail),e.action_type&&(t.actionType=e.action_type),{...n,...t}}):[...W(i),{index:e.index,objective:`Step ${e.index}`,status:"running",phase:e.event,actionType:e.action_type}]);break}case"step_end":{r?.("STEP_END",`Step ${e.index} ${e.status}`,{index:e.index,status:e.status,duration:e.duration,summary:e.summary,child_id:e.child_id}),R?.();let o=e.child_id,d=x.current&&!x.current.isSingleFlow;if(o){let i=n=>n.index===e.index&&n.childId===o?{...n,status:e.status,duration:e.duration,phase:void 0,objective:n.objective.startsWith("Step ")?D(e.summary||n.objective):n.objective}:n,s=n=>n.map(t=>{let a=i(t);return a!==t?a:t.children&&t.children.length>0?{...t,children:s(t.children)}:t});l(n=>n.map(t=>t.children?{...t,children:s(t.children)}:t))}else if(d){let i=Math.max(0,_.current-1);l(s=>{let n=[...s];if(i>=n.length)return s;let t={...n[i]},a=(t.children??[]).map(c=>c.index===e.index&&c.childId===void 0?{...c,status:e.status,duration:e.duration,phase:void 0,objective:c.objective.startsWith("Step ")?D(e.summary||c.objective):c.objective}:c);return t.children=a,n[i]=t,n})}else l(i=>i.map(s=>s.index===e.index?{...s,status:e.status,duration:e.duration,phase:void 0,objective:s.objective.startsWith("Step ")?D(e.summary||s.objective):s.objective}:s));{let s=x.current&&!x.current.isSingleFlow?Math.max(0,_.current-1):0,n=typeof e.ordinal=="number"&&e.id?{ordinal:e.ordinal,id:e.id}:void 0;p?.(e.index,s,e.child_id,n)}break}case"child_agent_start":{let o=e.objective??"",d=e.child_id;l(i=>{let s=$(i,n=>n.status==="running");return s?T(i,s,n=>({...n,objective:`${o} (branch)`,phase:`child: ${o.slice(0,50)}`,branchObjective:o,branchChildId:d})):i});break}case"child_agent_end":{let o=e.child_id,d=`child ${e.success?"done":"failed"}`;l(i=>{let s=$(i,n=>n.branchChildId===o);return s?T(i,s,n=>({...n,phase:d})):i.map(n=>n.phase?.startsWith("child:")?{...n,phase:d}:n)});break}case"describe_trigger":b?.(e);break;case"ask_user":B(e.question??"");break;case"run_end":l(o=>o.map(d=>d.status==="running"?{...d,status:e.status,phase:void 0}:d)),S(!1),F(e),E=!0;break;case"error":S(!1),w(e.message??"Runner error"),l(o=>o.map(d=>d.status==="running"?{...d,status:"failed",phase:void 0}:d));break}}let{code:v,signal:M}=await h.exited,N=h.stderr,de=v===0&&!M,C=[];v!==null&&v!==0&&C.push(`Runner exited with code ${v}`),M&&C.push(`Runner killed by signal ${M}`),N&&(!de||!E?C.push(N):V?.log?.("debug","RUNNER_STDERR_BENIGN","Runner stderr on clean exit",{stderr:N})),m.current===h&&(C.length>0&&w(C.join(`
|
|
3
|
-
`)),S(!1),P("runner","Event stream ended"),m.current=null)})().catch(E=>{let v=[`Runner event loop error: ${E}`];h.exitCode!==null&&h.exitCode!==0&&v.push(`Exit code: ${h.exitCode}`),h.exitSignal&&v.push(`Signal: ${h.exitSignal}`),h.stderr&&v.push(h.stderr),m.current===h&&(w(v.join(`
|
|
4
|
-
`)),S(!1),P("runner","Event loop error"),m.current=null)})},[p,r,f,R,b]),se=(0,u.useCallback)(I=>{m.current?.sendUserResponse(I),B(null)},[]),ae=(0,u.useCallback)(()=>{let I=m.current;I&&(I.sendCancel("user"),S(!1),B(null),setTimeout(()=>{m.current===I&&(P("runner","User cancelled run"),m.current=null)},5e3))},[]),oe=(0,u.useCallback)(()=>{l([]),F(null),w(null)},[]);return(0,u.useEffect)(()=>()=>{A.current=!0,P("runner","Component unmounted"),m.current=null},[]),{isRunning:j,steps:y,askingUser:Q,lastRunEnd:X,runError:Y,bifurcationInfo:Z,cmInitCounts:ee,replayInfo:ne,maxSteps:te,startRun:re,sendAnswer:se,cancelRun:ae,clearLastRun:oe,getEvidenceState:()=>O.current}}export{K as a,le as b,Se as c};
|
package/dist/chunk-RN4OSVTG.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
var p=1;function f(e){return e==="agent"?"ndjson":"human"}function c(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}var a=/^(∷ |· |→ |✓ |✗ |… )/;function d(e){return e===0?"complete":e===2?"refused":e===3?"paused":e===130?"interrupted":"error"}function l(e,n,s={stdout:t=>process.stdout.write(t),stderr:t=>process.stderr.write(t)}){let t=!1,i=r=>{if(e!=="ndjson")return;if(r.type==="done"){if(t)return;t=!0}let{type:o,...u}=r;s.stdout(JSON.stringify({type:o,v:1,verb:n,...u})+`
|
|
3
|
-
`)};return{encoding:e,out:e==="ndjson"?r=>s.stderr(r+`
|
|
4
|
-
`):r=>s.stdout(r+`
|
|
5
|
-
`),progress:e==="ndjson"?()=>{}:r=>s.stderr(r.replace(a,"").replace(/…$/,"")+`
|
|
6
|
-
`),event:i,done:(r,o)=>(i({type:"done",status:o??d(r),exit_code:r}),r)}}var g=8*1024;function m(e,n){return e.message==null?null:e.message.trim()?e.resume?Buffer.byteLength(e.message,"utf8")>g?`${n==="extract"?"extract":"design"}: --message is over 8KB \u2014 the agent would silently drop it; shorten the statement`:null:`${n==="extract"?"extract":"design"}: --message only rides a resume \u2014 pair it with --resume <sid> (a fresh run takes its direction from the sources)`:`${n==="extract"?"extract":"design"}: --message is empty \u2014 say what you want the agent to know`}function E(e,n,s){return e.event({type:"error",message:n,...s?{code:s}:{}}),e.done(2,"refused")}function x(e,n,s){return{out:t=>{n()&&s.test(t)||e.out(t)},emit:t=>{n()&&t.type==="error"&&s.test(String(t.message??""))||e.event(t)}}}export{p as a,f as b,c,l as d,g as e,m as f,E as g,x as h};
|
package/dist/chunk-RZJVQUBA.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as Dt,b as Ot,c as sn}from"./chunk-2XMJ6YAE.js";import{c as nn}from"./chunk-KHQHVSZ6.js";import{c as Pt,d as Qr}from"./chunk-HOQEMPMQ.js";import{d as Yr}from"./chunk-2YQ6TW77.js";import{a as Tt,b as Jr,c as Xe,d as et,e as Zr,f as Lt,g as tn,h as rn}from"./chunk-OIYGGEUL.js";import{a as Te,b as ne,e as _e,f as At,k as zr,p as he,q as xt,t as Wr}from"./chunk-RKWJG3WW.js";import{b as Se}from"./chunk-ZNHXIRCM.js";import{a as Je,b as Et}from"./chunk-OGWC3J3C.js";import{a as Dr,b as Ct}from"./chunk-YSSTGJ7O.js";import{a as Le,b as Xr}from"./chunk-C5UNZ6ZY.js";import{c as en}from"./chunk-S3DAAAE5.js";import{a as we}from"./chunk-WAOCHXJ5.js";import{B as Ur,C as jr,D as Fr,F as Nr,G as $r,I as Br,J as Vr,K as Kr,X as Hr,aa as qr,ba as Gr,j as Ze,x as Or}from"./chunk-JXKRO2ZJ.js";import{a as Mr}from"./chunk-BC7UVJJB.js";import{i as Ar,k as Rt,l as kt,m as Qe,n as xr,o as Pr}from"./chunk-Y5RNCJAN.js";import{g as Tr,h as Lr}from"./chunk-POYZ6SAI.js";import{a as We}from"./chunk-2WVKOZ6W.js";import{a as Ye,b as Er}from"./chunk-NLCCBXXV.js";import{a as q}from"./chunk-RZ4F3BHX.js";import{a as re}from"./chunk-KHJXOFDM.js";import{a as kr}from"./chunk-E47GFYXA.js";import{a as Ge,c as wt,j as Cr,k as ze,l as _t,m as It}from"./chunk-MMPFU2YC.js";import{join as le,basename as is}from"path";import{existsSync as go,readFileSync as ls}from"fs";function on(e,t){if(process.env.KANE_REPLAY_TRACE==="1")for(let r=0;r<e.steps.length;r++){let n=e.steps[r],s=t[r],o=" ".repeat(n.trace.length-1),i=`step ${n.flatIndex}`;s.kind==="replay"?process.stderr.write(`[replay-trace] ${o}${i}: REPLAY (would skip; v1 always authors)
|
|
3
|
-
`):process.stderr.write(`[replay-trace] ${o}${i}: AUTHOR (${s.reason})
|
|
4
|
-
`)}}function Ie(e){process.env.KANE_REPLAY_TRACE==="1"&&process.stderr.write(e)}function an(e,t){let r=e===0?"(none)":`0..${e-1}`,n=e>=t?"(none)":`${e}..${t-1}`;Ie(`[replay-trace] phase: replay ${r}, author ${n}
|
|
5
|
-
`)}function ln(e,t){Ie(`[replay-trace] step ${e}: REPLAY ${t==="ok"?"OK":"FAILED"}
|
|
6
|
-
`)}function cn(e,t,r){Ie(`[replay-trace] shrink ${e}/${t} \u2192 new boundary ${r}
|
|
7
|
-
`)}function dn(e,t){Ie(`[replay-trace] complete-reauthor (${e} shrinks exhausted of ${t})
|
|
8
|
-
`)}function Ut(){Ie(`[replay-trace] force-author (--author) \u2014 walker bypassed
|
|
9
|
-
`)}function un(e){Ie(`[replay-trace] cancelled at step ${e}
|
|
10
|
-
`)}import{join as mn}from"path";function jt(e){let t=Zr(e.decision),r={objective:e.step.objective,model:"v16-alpha",width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,stream:!0,mode:"replay",replay:{recording_path:t[0],...t.length>1?{recording_paths:t}:{},step_label:e.step.objective,...e.investigationAsync?{investigation:"async"}:{}},screenshot_dir:e.evidence?mn(e.sessionDir,"scratch",String(e.runIndex)):mn(e.sessionDir,"runs",String(e.runIndex)),run_id:"run",test_id:"test"};return e.forceNavigateUrl&&(r.url=e.forceNavigateUrl),e.chrome.wsEndpoint?r.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(r.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(r.username=e.auth.basicAuth.username,r.access_key=e.auth.basicAuth.access_key):e.auth.token&&(r.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(r.org_id=String(e.auth.resolvedCreds.org_id)),e.variables&&Object.keys(e.variables).length>0&&(r.variables=e.variables),e.sessionContext&&(r.session_context=e.sessionContext),e.evidence&&(r.evidence=Ze(e.evidence.packTestDir,e.evidence.ordinalOffset)),r}async function fn(e){let t=e.forceAuthor?0:et(e.decisions),r=0,n=!1;for(;;){let s=e.session.snapshot(),o=e.accumulator.snapshot(),i=await e.runReplayPhase(t);if(i.cancelled)return n=!0,un(i.failedAt??0),{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};if(i.failedAt===null)return{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};let f=Xr({failedAt:i.failedAt,shrinkCount:r,hasRetry:e.hasRetry,maxShrinks:e.maxShrinks});if(f.kind==="fail")return{authorBoundary:-1,cancelledInPhase:n,shrinkCount:r};if(e.acquireLockIfNeeded&&!await e.acquireLockIfNeeded())return{authorBoundary:-1,cancelledInPhase:n,shrinkCount:r};if(e.session.rollback(s),e.accumulator.rollback(o),f.kind==="complete-reauthor")return dn(r+1,e.maxShrinks),{authorBoundary:0,cancelledInPhase:n,shrinkCount:r};r++,cn(r,Le.maxShrinks,f.newAuthorBoundary),t=f.newAuthorBoundary}}var Rs=15e3,Ft=3,pn=[500,1e3];async function Nt(e){if(process.env.KANE_LOCK_CONFLICT_SIMULATE==="1")return{ok:!1,reason:"concurrent",httpStatus:409,message:"simulated contention (KANE_LOCK_CONFLICT_SIMULATE=1)"};let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground`,r=await tt(t,{from_commit_id:e.fromCommitId,new_commit_id:e.newCommitId},e.auth);return r.ok?{ok:!0,sessionExpiresAt:M(r.body,"session_expires_at")??""}:{ok:!1,...ks(r)}}function ks(e){let t=M(e.body,"error")??M(e.body,"code")??"",r=M(e.body,"message")??M(e.body,"detail")??e.text??`HTTP ${e.status}`,n;return e.status===0?n="network":e.status===401||e.status===403?n="auth":e.status===409&&t==="PlaygroundBaseCommitMismatch"?n="base_mismatch":e.status===409?n="concurrent":e.status===422?n="disabled":e.status===400&&/no committed/i.test(r)?n="no_commits":e.status===400?n="missing_field":e.status>=500||e.status===408||e.status===429?n="network":n="other",{reason:n,httpStatus:e.status,message:r}}async function hn(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground/reserve`,r=await tt(t,void 0,e.auth);return r.ok?{ok:!0,sessionExpiresAt:M(r.body,"session_expires_at")??""}:{ok:!1,expired:r.status===404,httpStatus:r.status,message:M(r.body,"message")??M(r.body,"detail")??r.text??`HTTP ${r.status}`}}async function $t(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,r={commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:e.body.commitMessage,total_steps:e.body.totalSteps};e.body.timeTaken!==void 0&&(r.time_taken=e.body.timeTaken),e.body.objectives!==void 0&&(r.objectives=e.body.objectives);let n=await tt(t,r,e.auth);return n.ok?{ok:!0,testId:M(n.body,"test_id")??e.testId,testcaseId:M(n.body,"testcase_id")??"",projectId:M(n.body,"project_id"),isTestCaseDeleted:typeof n.body?.is_test_case_deleted=="boolean"?n.body.is_test_case_deleted:void 0}:{ok:!1,...Cs(n)}}function Cs(e){let t=M(e.body,"error")??M(e.body,"code")??"",r=M(e.body,"message")??M(e.body,"detail")??e.text??`HTTP ${e.status}`,n;return e.status===0?n="network":e.status===401||e.status===403?n="auth":e.status===409&&t==="PlaygroundBaseCommitMismatch"?n="base_mismatch":e.status===409&&t==="PlaygroundCommitLockMismatch"?n="lock_mismatch":e.status===409?n="expired":e.status===422?n="not_found":e.status>=500||e.status===408||e.status===429?n="network":n="other",{reason:n,httpStatus:e.status,message:r}}async function De(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,r={discard:!0,commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:"(discarded)",total_steps:1},n=await tt(t,r,e.auth);return n.ok?{ok:!0}:{ok:!1,reason:M(n.body,"error")??"other",httpStatus:n.status,message:M(n.body,"message")??M(n.body,"detail")??n.text??`HTTP ${n.status}`}}async function tt(e,t,r){let n=null;for(let s=1;s<=Ft;s++){let o=new AbortController,i=setTimeout(()=>o.abort(),Rs);try{let f=await q(e,{method:"POST",headers:{Authorization:Ye(r.username,r.accessKey),"Content-Type":"application/json",Accept:"application/json"},...t!==void 0?{body:JSON.stringify(t)}:{},signal:o.signal});clearTimeout(i);let a=await f.text(),c=null;if(a)try{c=JSON.parse(a)}catch{}let y=f.status>=500||f.status===408||f.status===429;if(f.ok||!y)return{ok:f.ok,status:f.status,body:c,text:a};if(s<Ft){await gn(pn[s-1]??1e3);continue}return{ok:!1,status:f.status,body:c,text:a}}catch(f){if(clearTimeout(i),n=f,s<Ft){await gn(pn[s-1]??1e3);continue}}}return{ok:!1,status:0,body:null,text:n?.message??"exhausted retries"}}function gn(e){return new Promise(t=>setTimeout(t,e))}function M(e,t){if(typeof e!="object"||e===null)return;let r=e[t];return typeof r=="string"?r:void 0}var Es=60*1e3,bn="lock-heartbeat",me=new Map,Oe=null,As={register:(e,t)=>Qe(e,t),deregister:e=>xr(e),cleanup:(e,t)=>Pr(e,t),remoteLogger:null};function yn(e){if(e!==void 0){let t=me.get(e);t!==void 0&&(clearInterval(t),me.delete(e));return}for(let t of me.values())clearInterval(t);me.clear()}function rt(e){if(me.has(e.testId))return;let t=e.lifecycle??As,r=setInterval(async()=>{let n=await hn({baseUrl:e.baseUrl,testId:e.testId,auth:e.auth});if(!n.ok){let s=n.expired?"session expired":n.message;process.stderr.write(`[lock] heartbeat failed (${e.testId}): ${s}; continuing run
|
|
11
|
-
`)}},Es);me.set(e.testId,r),Oe===null&&(Oe=t,t.register(bn,()=>yn()))}function be(e){me.size!==0&&(yn(e),me.size===0&&Oe!==null&&(Oe.deregister(bn),Oe=null))}import{readFileSync as vn,readdirSync as Sn,existsSync as ye,promises as wn}from"fs";import{join as se}from"path";async function xs(e,t){let r=se(e,"steps",`${t.ordinal}-${t.id}`),n;try{n=await wn.readFile(se(r,"screenshot.png"))}catch{return null}let s=null;try{s=JSON.parse(await wn.readFile(se(r,"step.json"),"utf8")).action_id??null}catch{}return{png:n,actionId:s}}function Ko(){let e=[];return{track:t=>{e.push(t.catch(()=>{}))},settle:async()=>{await Promise.all(e)}}}async function _n(e,t,r,n){try{let s=await xs(e,t);if(!s){n("warn","SCREENSHOT_SKIP","Pack step folder or screenshot not found",{ordinal:t.ordinal,id:t.id,reason:"pack_step_not_found"});return}if(!s.actionId){n("warn","SCREENSHOT_SKIP","No action_id in step.json",{ordinal:t.ordinal,id:t.id,reason:"no_action_id"});return}r.enqueue(s.actionId,s.png),n("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{ordinal:t.ordinal,id:t.id,action_id:s.actionId,size:s.png.length})}catch(s){n("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{ordinal:t.ordinal,id:t.id,error:s instanceof Error?s.message:String(s)})}}function In(e,t,r,n,s,o){try{let i=se(e,"runs",String(t),"run-test");if(!ye(i)){s("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:r,reason:"runsDir_not_found",path:i});return}let f=i;if(o){let k=se(i,`child-${o}`);if(!ye(k)){s("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:r,child_id:o,reason:"child_dir_not_found",path:k});return}let C=Sn(k).filter(l=>ye(se(k,l,"screenshots")));if(C.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:r,child_id:o,reason:"no_child_screenshots_dir"});return}f=se(k,C[0])}else if(!ye(se(i,"screenshots"))){let k=Sn(i).filter(C=>ye(se(i,C,"screenshots")));if(k.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:r,reason:"no_screenshots_dir"});return}f=se(i,k[0])}let a=se(f,"screenshots",`step_${String(r).padStart(3,"0")}.png`);if(!ye(a)){s("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:r,child_id:o,reason:"screenshot_not_found",path:a});return}let c=se(i,"actions.ndjson");if(!ye(c)){s("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:r,reason:"ndjson_not_found"});return}let y=vn(c,"utf-8").trim().split(`
|
|
12
|
-
`),w=y[y.length-1];if(!w){s("warn","SCREENSHOT_SKIP","NDJSON empty",{step_index:r,reason:"ndjson_empty"});return}let R=JSON.parse(w).action_id;if(!R){s("warn","SCREENSHOT_SKIP","No action_id in NDJSON",{step_index:r,reason:"no_action_id"});return}let x=vn(a);n.enqueue(R,x),s("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{step_index:r,child_id:o,action_id:R,size:x.length})}catch(i){s("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{step_index:r,error:i instanceof Error?i.message:String(i)})}}import{dirname as Ps,join as Ts}from"path";function Rn(e,t,r){let n=e.total_runs??1,s=e.run_dir,o,i;if(n>1&&s){let f=Ps(s);o=Array.from({length:n},(a,c)=>Ts(f,String(t+c))),r&&r.length===n&&(i=r)}return{allRunDirs:o,flowObjectives:i}}function kn(e,t,r,n){return{index:r,objective:t,summary:e.summary,oneLiner:e.one_liner,status:e.status,resultCode:e.result_code,reasonCode:e.reason_code,perFlowMetadata:e.per_flow_metadata,context:e.context??{memory:{},variables:{},pointer:""},run_dir:e.run_dir,run_dirs:n.allRunDirs,flow_objectives:n.flowObjectives}}var nt=class{constructor(t){this.resolved=t;this.outcomes=t.rootSteps.map(r=>({rootStepIndex:r.index,status:"skipped"}))}outcomes;skipRoot=null;overallHalted=!1;shouldRunFlatStep(t){if(this.overallHalted)return!1;let r=t.trace[0].stepIndex;return!(this.skipRoot!==null&&r===this.skipRoot)}recordStep(t,r){let n=t.trace[0].stepIndex,s=this.outcomes.find(a=>a.rootStepIndex===n),o=this.resolved.rootSteps.find(a=>a.index===n),i=o.body.kind!=="objective";return i&&(s.refKind="import",s.refLabel=o.body.path,s.inlinedCount=(s.inlinedCount??0)+1,s.duration_s=(s.duration_s??0)+r.duration_s),r.status==="passed"?(i?s.status!=="failed"&&(s.status="passed"):(s.status="passed",s.duration_s=r.duration_s),{continueOverall:!0}):t.optional?(s.softFailures=s.softFailures??[],s.softFailures.push({subStepIndex:t.trace[t.trace.length-1].stepIndex,reason:r.reason}),{continueOverall:!0}):(s.status="failed",s.duration_s=i?s.duration_s:r.duration_s,s.failedSubStepIndex=i?t.trace.slice(1).map(a=>a.stepIndex):void 0,s.reason=r.reason,this.skipRoot=n,o.optional??!1?(s.softFailed=!0,{continueOverall:!0}):(this.overallHalted=!0,{continueOverall:!1}))}snapshotOutcomes(){return[...this.outcomes]}snapshot(){return{outcomes:this.outcomes.map(t=>({...t,softFailures:t.softFailures?[...t.softFailures]:void 0})),skipRoot:this.skipRoot,overallHalted:this.overallHalted}}rollback(t){this.outcomes=t.outcomes.map(r=>({...r,softFailures:r.softFailures?[...r.softFailures]:void 0})),this.skipRoot=t.skipRoot,this.overallHalted=t.overallHalted}finalize(){let t=this.outcomes.some(n=>n.status==="failed"&&!n.softFailed)?"failed":"passed",r=this.outcomes.reduce((n,s)=>n+(s.duration_s??0),0);return{overallStatus:t,outcomes:this.outcomes,totalDurationS:r}}};function Mt(e){if(!e)return null;let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function Cn(e){return Mt(e.flag)??Mt(e.frontmatter)??(e.configDefault&&e.configDefault!==ze?Mt(e.configDefault):null)}function En(e){return e.resolvedUrl!==null?!1:!((!!e.local||!!e.allowMissingUrl)&&!e.isTTY)}import{spawn as Ls}from"child_process";async function An(e,t,r=100){let n=`${e.replace(/\/+$/,"")}/json/version`,s=await q(n);if(!s.ok)throw new Error(`CDP /json/version returned ${s.status}`);let o=await s.json();if(!o.webSocketDebuggerUrl)throw new Error("CDP /json/version missing webSocketDebuggerUrl");let i=new kr(o.webSocketDebuggerUrl);await new Promise((m,_)=>{i.once("open",m),i.once("error",_)});let f=1,a=new Map;i.on("message",m=>{let _;try{_=JSON.parse(m.toString())}catch{return}if(_.id==null)return;let D=a.get(_.id);D&&(a.delete(_.id),_.error?D.reject(new Error(_.error.message)):D.resolve(_.result))});function c(m,_){let D=f++;return new Promise((ce,Q)=>{a.set(D,{resolve:N=>ce(N),reject:Q});let X={id:D,method:m};_&&(X.params=_),i.send(JSON.stringify(X))})}let w=(await c("Target.getTargets")).targetInfos.find(m=>m.type==="page");if(!w)throw i.close(),new Error("CDP: no page target found");let R=(await c("Browser.getWindowForTarget",{targetId:w.targetId})).windowId,x="",k=!1,C=null,l=!1;i.on("close",()=>{l=!0}),i.on("error",()=>{l=!0});async function K(){if(!k){if(l){k=!0;return}try{let _=(await c("Browser.getWindowBounds",{windowId:R})).bounds,D=`${_.left}:${_.top}:${_.width}:${_.height}`;D!==x&&(x=D,t({left:_.left,top:_.top,width:_.width,height:_.height}))}catch{}k||(C=setTimeout(K,r))}}return K(),{stop(){if(!k){k=!0,C&&clearTimeout(C);try{i.close()}catch{}}}}}var Ds=new Set(["1","true","yes"]);function xn(e){if(e?.headless)return null;let t=process.env.KANE_CLI_DISABLE_MARKER;if(t!=null&&Ds.has(t.toLowerCase()))return null;let r=Dr();if(!r)return null;let n=[...r.args,"overlay"];e?.text&&n.push(e.text);let s;try{s=Ls(r.cmd,n,{cwd:r.cwd,stdio:["pipe","ignore","ignore"],detached:!1,windowsHide:!0})}catch{return null}s.stdin?.on("error",()=>{});let o=!1;s.on("exit",()=>{o=!0}),s.on("error",()=>{o=!0});function i(c){if(!(o||!s.stdin||s.stdin.destroyed))try{s.stdin.write(JSON.stringify(c)+`
|
|
13
|
-
`)}catch{}}e?.chromePid&&e.chromePid>0&&i({type:"chrome_pid",pid:e.chromePid});let f=null;e?.cdpEndpoint&&An(e.cdpEndpoint,c=>i({type:"bounds",...c})).then(c=>{f=c.stop}).catch(()=>{});let a=!1;return{setRunActive(c){a||i({type:"run_active",active:c})},setStepText(c){if(a)return;let y=c.trim();y&&i({type:"step_text",text:y})},setStepComplete(){a||i({type:"step_complete"})},kill(){if(!a){a=!0,f?.();try{s.stdin?.end()}catch{}try{s.kill("SIGTERM")}catch{}}}}}function Pn(e,t,r){return`${e}/projects/${t}/test-cases/${r}`}function st(e,t,r,n){return`${Pn(e,t,r)}/dashboard/share/${n}?type=summary&agentView=true&fqdn=summary-page`}function Tn(e,t,r,n){if(!(!t||!r||!n))return st(e,t,r,n)}function Ln(e,t,r){return`${Pn(e,t,r)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{mkdtempSync as zs,rmSync as Ys}from"fs";import{join as Ws}from"path";import{tmpdir as Qs}from"os";import{spawn as Un,spawnSync as Os}from"child_process";import{existsSync as Bt}from"fs";import{createConnection as Us}from"net";import{homedir as Ue,platform as Ne}from"os";import{join as je}from"path";var js=new Set(["1","true","yes"]),ot=class extends Error{constructor(t){super(t),this.name="ChromeNotFoundError"}};function mi(e){return e instanceof ot?e.message:`Chrome failed: ${e instanceof Error?e.message:String(e)}`}var it={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",je(Ue(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",je(Ue(),"Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing"),"/Applications/Chromium.app/Contents/MacOS/Chromium"],linux:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/google-chrome-for-testing","/usr/local/bin/google-chrome-for-testing",je(Ue(),"chrome-for-testing/chrome-linux64/chrome"),"/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium"],win32:["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",je(Ue(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",je(Ue(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function Fs(){if(process.env.KANE_CLI_CHROME_PATH)return process.env.KANE_CLI_CHROME_PATH;let e=Ne(),t=it[e]??it.linux;for(let r of t)if(Bt(r))return r;return e==="win32"?"chrome.exe":"google-chrome"}function Ns(){if(process.env.KANE_CLI_CHROME_PATH)return Bt(process.env.KANE_CLI_CHROME_PATH);let e=Ne();if((it[e]??it.linux).some(s=>Bt(s)))return!0;let r=e==="win32"?"chrome.exe":"google-chrome",n=e==="win32"?"where":"which";try{return Os(n,[r],{stdio:"ignore"}).status===0}catch{return!1}}function $s(){let e=Ne();return e==="darwin"?["Google Chrome is required but was not found at any standard path.","","Install via Homebrew (recommended):"," brew install --cask google-chrome","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
|
|
14
|
-
`):e==="linux"?["Google Chrome is required but was not found at /usr/bin/google-chrome.","(amd64 / x86_64 only \u2014 Google does not ship Chrome for Linux ARM.)","","Debian / Ubuntu (any version):"," wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"," sudo apt install -y ./google-chrome-stable_current_amd64.deb","","Fedora / RHEL / AlmaLinux / Rocky:"," sudo dnf install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
|
|
15
|
-
`):e==="win32"?["Google Chrome is required but was not found in Program Files or AppData.","","Install via winget (Windows 10 1809+):"," winget install --id Google.Chrome -e --silent","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=C:\\path\\to\\chrome.exe","to point at a non-standard install."].join(`
|
|
16
|
-
`):["Google Chrome is required.","Install from https://www.google.com/chrome/","(Note: no official Chrome builds for BSD or Alpine/musl Linux.)"].join(`
|
|
17
|
-
`)}function Ms(e){let t=Ne(),r=[`--remote-debugging-port=${e.port}`,`--user-data-dir=${e.userDataDir}`,`--window-size=${e.width},${e.height}`,"--no-first-run","--no-default-browser-check","--disable-blink-features=AutomationControlled","--disable-features=DownloadBubble,DownloadBubbleV2","--safebrowsing-disable-download-protection","--disable-popup-blocking","--disable-notifications","--disable-infobars","--disable-translate","--disable-prompt-on-repost","--disable-background-networking","--disable-client-side-phishing-detection","--disable-default-apps","--disable-hang-monitor","--disable-sync","--metrics-recording-only","--safebrowsing-disable-auto-update","--disable-backgrounding-occluded-windows","--disable-background-timer-throttling","--test-type=webdriver","--allow-pre-commit-input","--enable-logging","--v=1"];return t==="linux"&&(r.push("--no-sandbox"),r.push("--disable-dev-shm-usage"),r.push("--password-store=basic")),t==="darwin"&&r.push("--use-mock-keychain"),e.headless&&r.push("--headless=new"),r}function Bs(e){return new Promise(t=>{let r=Us({port:e,host:"127.0.0.1"});r.setTimeout(1e3),r.on("connect",()=>{r.destroy(),t(!0)}),r.on("timeout",()=>{r.destroy(),t(!1)}),r.on("error",()=>{r.destroy(),t(!1)})})}async function Vs(){for(let e=_t;e<=It;e++)if(!await Bs(e))return e;throw new Error(`All CDP ports ${_t}-${It} are in use. Close other Chrome instances.`)}var Fe=class extends Error{constructor(t){super(t),this.name="CdpReadinessError"}};async function Ks(e,t){let r=Date.now(),n=`http://127.0.0.1:${e}/json/version`;for(;Date.now()-r<t;){try{if((await q(n)).ok)return`http://127.0.0.1:${e}`}catch{}await new Promise(s=>setTimeout(s,200))}throw new Fe(`Chrome CDP not ready after ${t}ms on port ${e}`)}var Hs=3e4,qs=2;function Dn(e,t,r){let n=process.env[e];if(n==null||n.trim()==="")return t;let s=Number(n);return!Number.isInteger(s)||s<r?t:s}function Gs(e){return Math.min(500*e,3e3)}function On(e,t){try{if(e.pid)if(t==="win32")Un("taskkill",["/pid",String(e.pid),"/T","/F"],{stdio:"ignore"});else try{process.kill(-e.pid,"SIGKILL")}catch{e.kill("SIGKILL")}else e.kill("SIGKILL")}catch{}}async function jn(e){let t=process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD;if(!(t!=null&&js.has(t.toLowerCase()))&&!Ns())throw Rt()?.log("error","CHROME_NOT_FOUND","Startup gate: Chrome unavailable at standard system paths",{platform:process.platform,kane_cli_chrome_path:process.env.KANE_CLI_CHROME_PATH??null,skip_browser_download:process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD??null}),new ot($s());let n=Ne(),s=Fs(),o=Dn("KANE_CLI_CDP_TIMEOUT_MS",Hs,1),f=Dn("KANE_CLI_CDP_RETRIES",qs,0)+1,a;for(let c=1;c<=f;c++){let y=await Vs(),w=Ms({port:y,...e});e.startUrl&&w.push(e.startUrl);let A=Un(s,w,{stdio:"ignore",detached:!0});A.unref();try{let R=await new Promise((x,k)=>{A.on("error",C=>{k(new Error(`Failed to launch Chrome: ${C.message}. Is Chrome installed at ${s}?`))}),A.on("close",C=>{C!==null&&C!==0&&k(new Fe(`Chrome exited during startup with code ${C}`))}),Ks(y,o).then(x,k)});return{process:A,port:y,cdpEndpoint:R,kill(){On(A,n)}}}catch(R){if(a=R,!(R instanceof Fe))throw R;On(A,n),Rt()?.log("warn","CHROME_CDP_LAUNCH_RETRY",`Chrome CDP launch attempt ${c}/${f} failed`,{attempt:c,max_attempts:f,port:y,timeout_ms:o,headless:e.headless??!1,error:R.message}),c<f&&await new Promise(x=>setTimeout(x,Gs(c)))}}throw a??new Error("Chrome launch failed after retries")}async function Fn(e){if(e.cft)return{instance:null,tempDir:null};if(e.wsEndpoint)return{wsEndpoint:e.wsEndpoint,instance:null,tempDir:null};if(e.cdpEndpoint){let s=await q(`${e.cdpEndpoint}/json/version`);if(!s.ok)throw new Error(`CDP endpoint not reachable: ${e.cdpEndpoint} (${s.status})`);return{cdpEndpoint:e.cdpEndpoint,instance:null,tempDir:null}}let t,r=null;if(e.config.chrome_profile_path)t=e.config.chrome_profile_path.replace("~",process.env.HOME??"~");else{r=zs(Ws(Qs(),"kane-clean-")),t=r;let s=r;Qe("tempDir",()=>{try{Ys(s,{recursive:!0,force:!0})}catch{}})}let n=await jn({userDataDir:t,width:e.config.window_size.width,height:e.config.window_size.height,startUrl:e.startUrl,headless:e.headless});return{cdpEndpoint:n.cdpEndpoint,instance:n,tempDir:r}}function Nn(e){let t={objective:e.objective,model:e.model,width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,stream:!0,max_steps:e.maxSteps??30,headless:e.headless??!1};return e.url&&(t.url=e.url),e.requireStartUrl&&(t.require_start_url=!0),e.chrome.wsEndpoint?t.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(t.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(t.username=e.auth.basicAuth.username,t.access_key=e.auth.basicAuth.access_key):e.auth.token&&(t.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(t.org_id=String(e.auth.resolvedCreds.org_id)),e.disableAskUser&&(t.disable_ask_user=!0),e.enableTaskSkills&&(t.enable_task_skills=!0),e.networkWs&&(t.network_ws=!0),e.networkSse&&(t.network_sse=!0),(e.bugDetection==="stop"||e.bugDetection==="continue")&&(t.bug_detection=e.bugDetection),e.variables&&Object.keys(e.variables).length>0&&(t.variables=e.variables),e.globalContext&&(t.global_context=e.globalContext),e.localContext&&(t.local_context=e.localContext),e.sessionContext&&(t.session_context=e.sessionContext),e.evidence&&(t.evidence=Ze(e.evidence.packTestDir,e.evidence.ordinalOffset)),t}import{readdirSync as Js,readFileSync as Mn,existsSync as Bn}from"fs";import{join as Zs}from"path";function $n(e,t){if(!Bn(e))return{};let r={},n;try{n=Js(e).filter(s=>s.endsWith(".json")).sort()}catch{return{}}for(let s of n)try{let o=Mn(Zs(e,s),"utf-8"),i=JSON.parse(o);if(i&&typeof i=="object"){for(let[f,a]of Object.entries(i))if(a&&typeof a=="object"&&"value"in a){let c=a;r[f]={value:c.value,secret:c.secret??!1,syntax:c.syntax??`{{${f}}}`}}}}catch{t?t("warn","VARIABLE_PARSE_FAILED","Skipping invalid variables file",{file:s}):process.stderr.write(`[variables] Warning: skipping invalid variables file: ${s}
|
|
18
|
-
`)}return r}function Vn(e){if(!Bn(e))throw new Error(`Variables file not found: ${e}`);let t=Mn(e,"utf-8"),r=JSON.parse(t),n={};if(r&&typeof r=="object"){for(let[s,o]of Object.entries(r))if(o&&typeof o=="object"&&"value"in o){let i=o;n[s]={value:i.value,secret:i.secret??!1,syntax:i.syntax??`{{${s}}}`}}}return n}function Kn(e){let t;try{t=JSON.parse(e)}catch{throw new Error("Invalid --variables JSON")}let r={};if(t&&typeof t=="object"){for(let[n,s]of Object.entries(t))if(s&&typeof s=="object"&&"value"in s){let o=s;r[n]={value:o.value,secret:o.secret??!1,syntax:o.syntax??`{{${n}}}`}}}return r}function Hn(e,t,r){let n=$n(e,r),s=$n(t,r);return{...n,...s}}var Re=class{constructor(t){this.baseUrl=t}async pushSecret(t){let r=Ye(t.username,t.accessKey),n=await q(`${this.baseUrl}/logistics/v1.0/secrets/create`,{method:"PUT",headers:{Authorization:r,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({secretKey:t.secretKey,secretValue:t.secretValue,orgId:t.orgId,username:t.username,scope:"user",type:"user",accessKey:t.accessKey})});if(!n.ok)throw new Error(`Push secret failed: ${n.status} ${await n.text()}`)}static extractVariableKeys(t){let r=t.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g),n=new Set;for(let s of r)n.add(s[1]);return[...n]}};var ke=class extends Er{constructor(t,r,n){super(t,{username:r,accessKey:n})}async upsertVariable(t){let r=t.environmentId??0,n=await q(`${this.baseUrl}/v1/variables`,{method:"POST",headers:this.headers(),body:JSON.stringify({name:t.name,value:String(t.value),type:"variable",value_type:"string",is_persist:t.isPersist??!1,environment_id:r})});if(n.ok){let a=await n.json().catch(()=>({}));if(a.type==="Success"&&a.id!=null)return{id:Number(a.id)||0}}let s=await q(`${this.baseUrl}/v1/variables/${encodeURIComponent(t.name)}?environment_id=${r}`,{method:"GET",headers:this.headers()});if(!s.ok)return{id:0};let i=(await s.json().catch(()=>({}))).data?.id;return i==null?{id:0}:(await q(`${this.baseUrl}/v1/variables/${i}`,{method:"PUT",headers:this.headers(),body:JSON.stringify({value:String(t.value),value_type:"string"})})).ok?{id:Number(i)||0}:{id:0}}};function qn(e,t){if(Object.keys(e).length===0)return{};let r={};for(let[n,s]of Object.entries(e)){let o=s.syntax??`{{${n}}}`;t.includes(o)&&(r[n]=s)}return r}function Gn(e){let t=Hn(e.globalDir,e.localDir,e.onLoadError),r=e.file?Vn(e.file):{},n=e.inline?Kn(e.inline):{},s={...t,...r,...n},o=Object.keys(s).length>0,{variables:i,objective:f}=o?Se(s,e.objective):{variables:{},objective:e.objective},a=Object.entries(s).filter(([,y])=>y.secret),c=Object.entries(s).filter(([,y])=>!y.secret);return{raw:s,auteur:i,auteurObjective:f,secretEntries:a,nonSecretEntries:c}}async function zn(e){if(e.localMode)return{};let t=re(e.env);if(e.variables.secretEntries.length>0){let n=new Re(t.secretsBaseUrl);for(let[s,o]of e.variables.secretEntries)n.pushSecret({secretKey:s,secretValue:o.value,username:e.auth.username,accessKey:e.auth.access_key,orgId:e.orgId}).then(()=>e.log("info","SECRET_PUSH_OK","Secret pushed",{key:s})).catch(i=>e.log("error","SECRET_PUSH_FAILED","Secret push failed",{key:s,error:String(i)}))}let r={};if(e.variables.nonSecretEntries.length>0){let n=new ke(t.tmsBaseUrl,e.auth.username,e.auth.access_key);for(let[s,o]of e.variables.nonSecretEntries)try{let i=await n.upsertVariable({name:s,value:o.value});r[s]=i.id,e.log("info","VAR_PUSH_OK","Variable pushed",{name:s,id:i.id})}catch(i){e.log("error","VAR_PUSH_FAILED","Variable push failed",{name:s,error:String(i)})}}return r}import{readFileSync as Xs,existsSync as eo}from"fs";function Vt(e){if(!eo(e))return null;try{return Xs(e,"utf-8").trim()||null}catch{return null}}var to=()=>{};async function Yn(e,t,r){let n=t.log??to,s=e.session.testId??null,o=null,i=null,f=null;if(!r.localMode&&t.performUpload)try{o=await t.performUpload(),o?.success&&(o.testId&&(s=o.testId),o.testcaseId&&e.session.setTestcaseId(o.testcaseId))}catch(a){n("error","FINALIZE_UPLOAD_ERROR","Upload pipeline threw",{error:String(a)})}if(t.renderFeedbackPrompt)try{i=await t.renderFeedbackPrompt(),i&&s&&t.submitFeedback&&t.submitFeedback(s,i).catch(a=>{n("error","FINALIZE_FEEDBACK_SUBMIT_ERROR","Feedback submit failed",{error:String(a)})})}catch(a){n("error","FINALIZE_FEEDBACK_RENDER_ERROR","Feedback prompt threw",{error:String(a)})}if(e.session.flushRecorder(),r.skipLocalWrites)n("info","FINALIZE_SKIP_LOCAL_WRITES","Skipping local writes (testmd flow handles via staging)");else if(r.sourcePath&&r.rootSteps&&r.outcomes){try{f=Tt({sourcePath:r.sourcePath,title:r.title,rootSteps:r.rootSteps,outcomes:r.outcomes,overallStatus:r.overallStatus,startedISO:r.startedISO,durationS:r.durationS,sessionId:e.session.sessionId})}catch(a){n("error","FINALIZE_RESULT_MD_ERROR","_Result.md write failed",{error:String(a)})}try{xt({sourcePath:r.sourcePath,commitId:e.session.sessionId,testId:s??void 0,testcaseId:e.session.testcaseId??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,orgId:e.session.orgId??void 0,sessionName:e.session.sessionName??Te(r.sourcePath),plan:e.session.plan??void 0})}catch(a){n("error","FINALIZE_META_WRITE_ERROR","meta.json write failed",{error:String(a)})}if(o?.codeExportDir)try{let a=e.tuiConfig.code_export?.language??"python";Lt(o.codeExportDir,At(r.sourcePath,"playwright",a))}catch(a){n("error","FINALIZE_CODE_COPY_ERROR","code-export copy failed",{error:String(a)})}}else if(e.session.recorder?.lastWrittenPath){let a=e.session.recorder.lastWrittenPath,c=e.session.getFlows(),y=c.map((R,x)=>({index:x+1,heading:`Step ${x+1}`,verifies:[],headingLine:0,body:{kind:"objective",text:R.objective}})),w=c.map((R,x)=>({rootStepIndex:x+1,status:R.status==="passed"?"passed":R.status==="failed"?"failed":"skipped",duration_s:R.duration,reason:R.reason})),A=w.some(R=>R.status==="failed")?"failed":"passed";try{f=Tt({sourcePath:a,title:e.session.sessionName??"Session",rootSteps:y,outcomes:w,overallStatus:A,startedISO:e.session.startedAt,durationS:w.reduce((R,x)=>R+(x.duration_s??0),0),sessionId:e.session.sessionId})}catch(R){n("error","FINALIZE_TUI_RESULT_MD_ERROR","TUI _Result.md write failed",{error:String(R)})}try{xt({sourcePath:a,commitId:e.session.sessionId,testId:s??void 0,testcaseId:e.session.testcaseId??void 0,sessionName:e.session.sessionName??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,plan:e.session.plan??void 0})}catch(R){n("error","FINALIZE_TUI_META_WRITE_ERROR","TUI meta.json write failed",{error:String(R)})}if(o?.codeExportDir)try{let R=e.tuiConfig.code_export?.language??"python";Lt(o.codeExportDir,At(a,"playwright",R))}catch(R){n("error","FINALIZE_TUI_CODE_COPY_ERROR","TUI code-export copy failed",{error:String(R)})}e.session.recorder.lastCollisionSuffixed&&process.stderr.write(`Saved to ${a} (renamed: ${e.session.sessionName}_test.md already existed)
|
|
19
|
-
`)}try{t.runCleanup?.()}catch(a){n("error","FINALIZE_CLEANUP_ERROR","Cleanup hook threw",{error:String(a)})}try{await e.session.finish("complete")}catch(a){n("error","FINALIZE_SESSION_FINISH_ERROR","session.finish threw",{error:String(a)})}return{uploadResult:o,feedbackChoice:i,resultMdPath:f}}import{readFileSync as Kt,writeFileSync as Ht,existsSync as Qn}from"fs";function Wn(e,t,r){if(r.forceAuthor)return"re-recorded from scratch";if(r.retryTriggered)return"re-recorded after retry";if(t.length>0&&t.every(i=>i.kind==="author"&&i.reason==="no-result-md"))return"initial recording";if(t.length>0&&t.every(i=>i.kind==="replay"))return r.wantsPush?"re-recorded (no source changes)":"no changes";let n=[];for(let i=0;i<t.length;i++){let f=t[i];if(!f||f.kind!=="author"||f.reason==="downstream-of-divergence"||f.reason==="no-result-md")continue;let a=ro(e,e.steps[i]);switch(f.reason){case"structure-mismatch":n.push(`added/removed: ${a}`);break;case"md5-mismatch":n.push(`modified: ${a}`);break;case"missing-recording":n.push(`re-recorded: ${a}`);break;case"recorded-failed":n.push(`re-authored after failure: ${a}`);break}}if(n.length===0)return"automated commit";let s=n.filter((i,f)=>f===0||n[f-1]!==i),o=s.slice(0,3).join("; ");return s.length>3?`${o}; +${s.length-3} more`:o}function ro(e,t){if(!t)return"unknown step";let r=t.trace[0]?.stepIndex;if(r==null)return"unknown step";let s=e.rootSteps[r-1]?.heading?.trim()??"";return t.trace.length>1?s?`imported step in "${s}"`:`imported step ${r}`:s||`step ${r}`}function no(e,t){if(!(!e.shouldReplaceLocalOutput||!e.resolvedTest||!e.sourcePath||!e.stepRunRecords||!e.outcomes||!e.overallStatus))return async()=>{let{changedUnitFiles:r,legacySweep:n}=await tn({resolvedTest:e.resolvedTest,sessionDir:e.session.sessionDir,stepRunRecords:e.stepRunRecords,outcomes:e.outcomes,overallStatus:e.overallStatus,startedISO:e.startedISO??new Date().toISOString(),durationS:e.durationS??0,sessionId:e.session.sessionId,commitId:e.fromCommitId??"",tmsIds:e.tmsIds??{},codeExportDir:e.codeExportDir,packTestDir:e.evidence?.packTestDir??e.evidenceRead?.packTestDir,authoredFlatIdx:new Set(e.authoredFlatIdx??[])});t.files=r;for(let s of r){let o=ne(s);if(Qn(`${o}.staging`)){zr(o);let i=n.find(f=>f.unitFile===s);i&&rn(i.dirs)}}}}function so(e,t){if(!(!e.shouldCommit||e.isFirstRun||!e.tmsBaseUrl||!e.testId||!e.fromCommitId||!e.newCommitId||!e.basicAuth||!e.resolvedTest||!e.decisions))return async()=>{let r=Wn(e.resolvedTest,e.decisions,{wantsPush:e.wantsPush??!1,retryTriggered:e.retryTriggered??!1,forceAuthor:e.forceAuthor??!1}),n=e.resolvedTest.steps.map(o=>o.objective).filter(o=>typeof o=="string"&&o.length>0).slice(0,50),s=await $t({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:e.testId,body:{commitId:e.newCommitId,fromCommitId:e.fromCommitId,commitMessage:r,totalSteps:e.resolvedTest.steps.length,timeTaken:Math.round(e.durationS??0),objectives:n},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(s.ok&&e.sourcePath){let o=_e(e.sourcePath);try{let i=JSON.parse(Kt(o,"utf8"));i.commit_id=e.newCommitId,Ht(o,JSON.stringify(i,null,2)+`
|
|
20
|
-
`,"utf8")}catch(i){process.stderr.write(`warn: failed to update meta.json commit_id: ${i.message}
|
|
21
|
-
`)}}if(s.ok)for(let o of e.unitLocks??[]){if(!t.files.includes(o.file)){await De({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:o.testId,body:{commitId:e.newCommitId,fromCommitId:o.fromCommitId},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}}),be(o.testId);continue}let i=e.resolvedTest.steps.filter(c=>c.owningFile===o.file),f=i.map(c=>c.objective).filter(c=>typeof c=="string"&&c.length>0).slice(0,50),a=await $t({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:o.testId,body:{commitId:e.newCommitId,fromCommitId:o.fromCommitId,commitMessage:`healed via importer ${e.sourcePath??""}`,totalSteps:i.length,timeTaken:0,objectives:f},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(a.ok){let c=_e(o.file);try{let y=JSON.parse(Kt(c,"utf8"));y.commit_id=e.newCommitId,Ht(c,JSON.stringify(y,null,2)+`
|
|
22
|
-
`,"utf8")}catch(y){process.stderr.write(`warn: failed to update unit meta commit_id (${o.file}): ${y.message}
|
|
23
|
-
`)}}else process.stderr.write(`warn: unit self-commit failed (${o.file}): ${a.reason??""} ${a.message??""}
|
|
24
|
-
`)}return s}}function oo(e){if(!(!e.isFirstRun||!e.sourcePath))return async t=>{if(!e.sourcePath)return;let r=_e(e.sourcePath);try{let n=Qn(r)?JSON.parse(Kt(r,"utf8")):{};e.session.sessionId&&(n.commit_id=e.session.sessionId),t&&(n.testcase_id=t),e.tmsIds?.testId&&(n.test_id=e.tmsIds.testId),e.tmsIds?.projectId&&(n.project_id=e.tmsIds.projectId),e.tmsIds?.folderId&&(n.folder_id=e.tmsIds.folderId),e.tmsIds?.orgId&&(n.org_id=e.tmsIds.orgId),e.tmsIds?.sessionName&&(n.session_name=e.tmsIds.sessionName),Ht(r,JSON.stringify(n,null,2)+`
|
|
25
|
-
`,"utf8")}catch(n){process.stderr.write(`warn: failed to update meta.json after endTest: ${n.message}
|
|
26
|
-
`)}}}function Jn(e){let t=re(e.env),r={files:[]},{session:n,auth:s}=e,o=s.basicAuth?{username:s.basicAuth.username,accessKey:s.basicAuth.access_key}:s.token,i=s.resolvedCreds?.username??s.basicAuth?.username??"",f=s.resolvedCreds?.access_key??s.basicAuth?.access_key??"",a=s.resolvedCreds?.org_id??0,c=s.resolvedCreds?.user_id??0,y=[];for(let k of Object.keys(n.auteurVariables))k.startsWith("secrets.user.")&&y.push({key_name:k.replace("secrets.user.",""),scope:"user"});let A=n.getContext().prior_runs.map(k=>k.status),R=n.auteurVariables,x=Object.keys(R).length>0;return{controllerBaseUrl:t.controllerBaseUrl,tmsBaseUrl:t.tmsBaseUrl,auth:o,authResolver:s.resolver,sessionId:n.sessionId,sessionDir:n.sessionDir,testId:n.testId,commitId:n.sessionId,apMode:n.apMode,projectId:e.projectId,folderId:e.folderId,firstObjective:n.firstObjective??"KaneAI Test",firstUrl:n.firstUrl??"",runDirs:n.getRunDirs(),runObjectives:n.getRunObjectives(),runMetadata:n.getRunMetadata(),startedAt:n.startedAt,endedAt:new Date().toISOString(),totalSteps:e.totalSteps,totalDuration:e.totalDuration,runStatuses:A,orgId:a,userId:c,tmsUsername:i,tmsAccessKey:f,screenshotBaseUrl:n.screenshotBaseUrl,screenshotExtMap:e.screenshotExtMap,shareApiBaseUrl:t.shareApiBaseUrl,variables:x?R:void 0,variableIds:e.variableIds,secrets:y,codeExport:e.codeExport,onProgress:e.onProgress,log:e.log,shouldUploadArtifacts:e.shouldUploadArtifacts,shouldReplaceLocalOutput:e.shouldReplaceLocalOutput,shouldCommit:e.shouldCommit,isFirstRun:e.isFirstRun,onAtomicReplace:no(e,r),onCommitLock:so(e,r),onFinalizeSuccess:oo(e),evidence:e.evidence,evidenceRead:e.evidenceRead,authoredExecutionPath:e.authoredExecutionPath}}var Zn=["python","javascript"];function io(e){if(e!==void 0){if(!Zn.includes(e))throw new Error(`--code-language must be one of: ${Zn.join(", ")} (got "${e}")`);return e}}function Xn(e,t){let r=io(e.codeLanguage);return{enabled:e.codeExport??t.enabled,language:r??t.language,skipValidation:e.skipCodeValidation??t.skip_validation}}async function es(e){try{let r=await new We(e.tmsBaseUrl,e.auth.username,e.auth.access_key).createAtmTest({objective:e.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:e.hasCustomProfile,testURL:e.url,project_id:e.projectId,folder_id:e.folderId,authoring_version:4});return e.log("info","ATM_CREATE_OK","Test created",{test_id:r}),r}catch(t){return e.log("error","ATM_CREATE_FAILED","Test creation failed",{error:t instanceof Error?t.message:String(t)}),null}}var ao=null,lo=()=>ao??=import("sharp").then(e=>e.default??e).catch(()=>null),at=class{maxWorkers;maxRetries=2;queue=[];activeCount=0;drainResolvers=[];sas;log;uploadedExt=new Map;constructor(t,r=3,n){this.sas=t,this.maxWorkers=r,this.log=n}updateSas(t){this.sas=t}enqueue(t,r){this.queue.push({operationId:t,buffer:r}),this.pump()}async drain(t=3e4){if(!(this.queue.length===0&&this.activeCount===0))return new Promise(r=>{this.drainResolvers.push(r),setTimeout(()=>{r()},t)})}pump(){for(;this.activeCount<this.maxWorkers&&this.queue.length>0;){let t=this.queue.shift();this.activeCount++,this.processJob(t).finally(()=>{if(this.activeCount--,this.pump(),this.queue.length===0&&this.activeCount===0){for(let r of this.drainResolvers)r();this.drainResolvers=[]}})}}async processJob(t){let r,n="image/webp",s=await lo();if(s)try{let a=await s(t.buffer).webp({quality:80}).toBuffer();r=new Uint8Array(a)}catch(a){r=new Uint8Array(t.buffer),n="image/png",this.log?.("warn","SCREENSHOT_CONVERT_FAILED","WebP conversion failed, using PNG",{operation_id:t.operationId,error:a instanceof Error?a.message:String(a)})}else r=new Uint8Array(t.buffer),n="image/png";let o=n==="image/webp"?"webp":"png",i=`test_screenshots/untagged_screenshot/${t.operationId}.${o}`,f=`${this.sas.base_url}/${this.sas.container}/${i}?${this.sas.sas_token}`;for(let a=0;a<=this.maxRetries;a++)try{let c=await q(f,{method:"PUT",headers:{"Content-Type":n,"x-ms-blob-type":"BlockBlob"},body:r});if(c.ok){this.uploadedExt.set(t.operationId,o);return}if(a<this.maxRetries){await this.backoff(a);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed after retries",{operation_id:t.operationId,status:c.status,attempts:this.maxRetries+1})}catch{if(a<this.maxRetries){await this.backoff(a);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed (network error)",{operation_id:t.operationId,error:"network",attempts:this.maxRetries+1})}}backoff(t){let r=t===0?1e3:3e3;return new Promise(n=>setTimeout(n,r))}getExt(t){return this.uploadedExt.get(t)??"png"}getExtMap(){return this.uploadedExt}isNearExpiry(){if(!this.sas.expiry)return!1;let t=new Date(this.sas.expiry).getTime();return Date.now()>t-5*6e4}};import{platform as co,arch as uo}from"os";function ts(e){let t={proxyUrl:Cr,sessionId:e.sessionId,identity:e.identity,device:{cli_version:Ge,platform:co(),arch:uo(),host_agent:Ot(),invocation_mode:e.invocationMode},getToken:e.getToken};return new Dt(t)}async function mo(e){try{let t=re(e.env),n=await new we(t.controllerBaseUrl,e.auth).getScreenshotSas();return e.session.setScreenshotSas(n),e.log("info","SCREENSHOT_SAS_OK","Screenshot SAS fetched",{base_url:n.base_url,container:n.container,expiry:n.expiry}),new at(n,3,e.log)}catch(t){return e.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS fetch failed",{error:t instanceof Error?t.message:String(t)}),null}}async function fo(e){if(e.session.hasRemoteLogger||!e.tmsCreds)return null;let t=e.tmsCreds,r=ts({sessionId:e.session.sessionId,identity:{org_id:String(t.org_id??""),user_id:String(t.user_id??""),machine_id:sn(),email:t.email??null,email_domain:t.email_domain??"unknown",user_type:t.user_type??"unknown",env:e.env,plan:t.plan??"unknown"},invocationMode:e.invocationMode,getToken:e.getToken});return e.session.setRemoteLogger(r),r.start(),r}async function Yt(e){let[t,r]=await Promise.allSettled([e.skipScreenshotQueue?Promise.resolve(null):mo({env:e.env,auth:e.auth,session:e.session,log:e.log}),fo({env:e.env,tmsCreds:e.tmsCreds,getToken:e.getToken,session:e.session,invocationMode:e.invocationMode})]);return{resolver:e.resolver,screenshotQueue:t.status==="fulfilled"?t.value:null,remoteLogger:r.status==="fulfilled"?r.value:null}}async function qt(e){await Promise.allSettled([e.screenshotQueue?.drain(),e.remoteLogger?.shutdown()])}async function ya(e,t){switch(e.kind){case"boot":{if(t.state.identityServicesRef.current)return t.state.identityServicesRef.current;let r=t.auth.initResolver(e.env);r.prime(e.tmsCreds),t.state.setTmsCredsCache(e.tmsCreds);let n=await Gt(e.env,e.tmsCreds,r,t);return zt(n,t),n}case"login":case"switch":{let r=t.state.identityServicesRef.current;r&&(await qt(r),r.resolver.revoke()),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null,t.state.setTmsCredsCache(null);let n=t.auth.initResolver(e.env),s=await n.resolve(!0).catch(()=>null);if(!s)return t.log("warn","IDENTITY_VALIDATE_FAILED","Identity validation failed",{kind:e.kind,env:e.env}),null;t.state.setTmsCredsCache(s);let o=await Gt(e.env,s,n,t);return zt(o,t),o}case"logout":{let r=t.state.identityServicesRef.current;return r&&(await qt(r),r.resolver.revoke()),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null,t.state.setTmsCredsCache(null),null}case"resessionize":{let r=t.state.identityServicesRef.current;r&&await qt(r),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null;let n=t.state.getTmsCredsCache(),s=t.auth.getResolver(),o=s??t.auth.initResolver(e.env);!s&&n&&o.prime(n);let i=await Gt(e.env,n,o,t);return zt(i,t),i}}}async function Gt(e,t,r,n){let s=n.auth.getBasicAuth(),o=s?null:await n.auth.getToken(),i=s?{username:s.username,accessKey:s.access_key}:o??null;return i===null?{resolver:r,screenshotQueue:null,remoteLogger:null}:Yt({env:e,tmsCreds:t,resolver:r,auth:i,getToken:()=>n.auth.getToken(),session:n.getSession(),log:n.log,skipScreenshotQueue:n.options?.skipScreenshotQueue,invocationMode:"tui"})}function zt(e,t){t.state.identityServicesRef.current=e,t.state.screenshotQueueRef.current=e.screenshotQueue,e.remoteLogger&&(t.exit.registerCleanup("remote-logger",()=>e.remoteLogger.shutdownSync()),t.exit.setExitRemoteLogger(e.remoteLogger))}import{relative as ho}from"path";import{readFile as po}from"fs/promises";function rs(e){return e.shouldUploadArtifacts&&!e.lockHeld&&!e.isFirstRun&&e.sealed&&!!e.testId}var Wt=e=>e instanceof Error?e.message:String(e);async function ns(e){let{controller:t,tms:r,testId:n,sessionId:s,executionId:o,sealedPackPath:i,projectId:f}=e,a;try{let c={key:"evidence",content_type:"application/zip",filename:`${o}.evidence`},w=(await t.getPresignedUrls(n,s,[c])).urls?.evidence?.upload_url;if(!w)return{ok:!1,stage:"presign",error:"presign response missing evidence upload_url"};a=w}catch(c){return{ok:!1,stage:"presign",error:Wt(c)}}try{let c=await po(i);await Yr(a,c,"application/zip")}catch(c){return{ok:!1,stage:"upload",error:Wt(c)}}try{await r.ingestEvidence(o,f)}catch(c){return{ok:!1,stage:"ingest",error:Wt(c)}}return{ok:!0}}function ss(e){return e.isFirstRun||Xe(e.decisions)||e.push===!0||e.author===!0}function os(e,t){return{projectId:e?.project_id??t.project_id??null,folderId:e?.folder_id??t.folder_id??null}}function Qt(e){return e?"author":"replay"}function bo(e,t){return e?{session:e,ownsLifecycle:!1}:{session:t,ownsLifecycle:!0}}function lt(e,t){return e?.total_runs??t?.length??1}function yo(e){let t=(e?.per_flow_metadata??[]).map(r=>({resultCode:r?.result_code!=null?Number(r.result_code):null}));return{resultCode:e?.result_code!=null?Number(e.result_code):null,...t.length?{perFlow:t}:{}}}var ct=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"];async function _l(e,t,r){let{path:n,cwd:s,opts:o,isAgent:i,disableAskUser:f,resolved:a,resolvedAuth:c,cliOverrides:y,environment:w,envConfig:A,profile:R,model:x,creds:k,configStore:C,session:l}=e,K=!1,m=await _o(n,a,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},l.sessionId,r);if(m.abort)return{overallStatus:"failed",exitCode:m.abort.exitCode,outputDir:ne(n),durationS:0,uploadResult:null};let _=m.lockAcquired,D=!1,ce=new Set,Q=!1,X=!1;_&&t.onLockState({phase:"acquired",scope:"preemptive"}),l.start({model:x,environment:w,profile:R}),l.setRecordingEnabled(!1);let N=0,Xt=c.basicAuth?{username:c.basicAuth.username,accessKey:c.basicAuth.access_key}:c.token??null,xe=null;if(Xt!==null){let d=await Yt({env:w,tmsCreds:c.resolvedCreds??null,resolver:c.resolver,auth:Xt,getToken:async()=>c.token??null,session:l,log:(u,p,b,h)=>l.log(u,p,b,h),skipScreenshotQueue:!!o.local||!c.basicAuth,invocationMode:i?"agent":"cli"});xe=d.screenshotQueue,d.remoteLogger&&(r.register("remote-logger",()=>d.remoteLogger.shutdownSync()),r.remoteLogger=d.remoteLogger,e.skipGlobalRemoteLogger||Ar(d.remoteLogger))}if(o.name){try{en(o.name)}catch(d){return process.stderr.write(`error: ${d.message}
|
|
27
|
-
`),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}l.setSessionName(o.name)}let dt={};for(let[d,u]of Object.entries(a.rootGlobal))ct.includes(d)||(dt[d]=u);for(let[d,u]of Object.entries(y))ct.includes(d)||u!==void 0&&(dt[d]=u);let ee={...a.chrome};for(let d of ct){let u=y[d];u!==void 0&&(ee[d]=u)}let ds={...dt,...ee};l.setResolvedGlobal(ds);let er=k.getActiveProfile()??"default",tr=k.getDefaultEnv(),{rehydrateIfStale:us}=await import("./profile-sync-DTTRRIVP.js");us(k,C,er,tr);let j=C.load(),rr=(y.assertion_mode??j.assertion_mode)==="dom"?"dom":"visual",nr=y.final_validation,sr=nr===void 0?void 0:nr==="on",F=j.project_id??null,de=j.folder_id??null,or=ss({isFirstRun:m.isFirstRun,decisions:m.decisions,push:o.push===!0,author:o.author===!0});if(or){if(c.basicAuth){let d=await Lr({creds:k,config:C,profile:er,env:tr,tmsCreds:c.basicAuth,isLocal:!!o.local,log:(u,p,b,h)=>l.log(u,p,b,h),onAnnounce:e.onAnnounce,onFatalExit:e.onFatalExit});if(d.status==="ok"){F=d.projectId,de=d.folderId,j=C.load();let u=he(n);u?.project_id&&(F=u.project_id,de=u.folder_id??de),i&&d.autoDefaulted&&t.onAgentEvent(Tr(d.autoDefaulted))}else if(d.status==="cancelled"){process.stderr.write(`error: project/folder configuration failed. See remediation above, or use --local.
|
|
28
|
-
`);let{shutdown:u}=await import("./exit-manager-MXUD7GQ7.js");return u(2,"project/folder gate failed"),{}}}}else{let d=he(n);({projectId:F,folderId:de}=os(d,{project_id:j.project_id??null,folder_id:j.folder_id??null})),l.log("info","GATE_SKIP_REPLAY","Project/folder gate skipped (planned pure replay)",{meta_project:!!d?.project_id,config_project:!!j.project_id})}{let d=Wr(a),u=c.resolvedCreds?.org_id!=null?String(c.resolvedCreds.org_id):void 0,p=d.find(g=>g.project_id&&F&&g.project_id!==String(F)||g.org_id&&u&&g.org_id!==u),b=new Set(d.map(g=>g.project_id).filter(Boolean)),h=new Set(d.map(g=>g.org_id).filter(Boolean));if(p||b.size>1||h.size>1){let g=p??d[0];return process.stderr.write(`error: tenant mismatch \u2014 imported test '${g.file}' was authored under project ${g.project_id??"?"} / org ${g.org_id??"?"}, which differs from the run's project/org (or another imported test). Cross-tenant imports are not allowed.
|
|
29
|
-
`),await l.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}}let ie;try{ie=await Fn({config:{chrome_profile_path:ee.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:ze,headless:ee.headless??!1,wsEndpoint:ee.ws_endpoint,cdpEndpoint:ee.cdp_endpoint})}catch(d){return process.stderr.write(`error: Chrome launch failed: ${d.message}
|
|
30
|
-
`),await l.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}let $e=ie.instance;$e&&r.register("chrome",()=>{try{$e.kill()}catch{}});let ir=Nr(ie.cdpEndpoint),G=null,ar=ie.cdpEndpoint??ee.cdp_endpoint;if(ar&&!ee.ws_endpoint&&!ee.headless&&!e.isAgent)try{G=xn({headless:ee.headless??!1,cdpEndpoint:ar,chromePid:$e?.process.pid}),G&&r.register("marker-overlay",()=>G.kill())}catch(d){l.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay spawn failed",{error:String(d)})}c.resolvedCreds?.org_id!==void 0&&l.setOrgId(String(c.resolvedCreds.org_id)),l.setUserIdentity(c.resolvedCreds?.username??null,c.resolvedCreds?.email??null);let fe=Gn({objective:"",globalDir:le(wt,"variables"),localDir:le(s,".testmuai","variables"),file:o.variablesFile,inline:o.variables}),ms=a.rootGlobal.variables??{},J=vo(fe.raw,ms);l.setAuteurVariables(J.auteur);let lr=Vt(le(wt,"global-memory.md"))??void 0,cr=Vt(le(s,".testmuai","context.md"))??void 0;o.local?process.stderr.write(`info: --local \u2014 KaneAI upload skipped
|
|
31
|
-
`):c.basicAuth?F||(or?process.stderr.write(`warn: KaneAI upload skipped \u2014 no project configured.
|
|
32
|
-
`):process.stderr.write(`warn: evidence publish will be skipped \u2014 no project_id in meta.json or config.
|
|
33
|
-
`)):process.stderr.write(`warn: KaneAI upload skipped \u2014 TMS credentials could not be resolved.
|
|
34
|
-
Run 'kane-cli login' (OAuth) or 'kane-cli config set-username/set-access-key' (basic auth).
|
|
35
|
-
`);let ve=!o.local&&!!c.basicAuth&&F!=null;if(l.log("info","PIPELINE_GATE_STATE","Initial gate state (run-start)",{phase:"run-start",shouldUploadArtifacts:ve,lockHeld:_,isFirstRun:m.isFirstRun,hasAuth:m.hasAuth}),ve&&m.testId==null&&!m.degradedReadonly){let d=re(w);try{let u=await es({tmsBaseUrl:d.tmsBaseUrl,auth:c.basicAuth,objective:a.steps[0].objective,url:"",projectId:F,folderId:de??"",hasCustomProfile:!!ee.chrome_profile,log:(p,b,h,g)=>l.log(p,b,h,g)});u&&l.setTestId(u)}catch(u){process.stderr.write(`warn: ATM test creation failed: ${u.message}
|
|
36
|
-
`)}}else m.testId&&l.setTestId(m.testId);let Me={};if(c.basicAuth&&!o.local&&(J.secretEntries.length>0||J.nonSecretEntries.length>0))try{Me=await zn({variables:J,auth:c.basicAuth,orgId:String(c.resolvedCreds?.org_id??""),env:w,localMode:!!o.local,log:(d,u,p,b)=>l.log(d,u,p,b)})}catch(d){process.stderr.write(`warn: variable/secret push failed: ${d.message}
|
|
37
|
-
`)}let ut=new Map;for(let[d,u]of J.nonSecretEntries)ut.set(d,u.value);let mt=new Map;for(let[d,u]of J.secretEntries)mt.set(d,u.value);async function ft(d){if(!c.basicAuth||o.local)return;let u=[],p=[];for(let[h,g]of Object.entries(d))if(g.secret){if(mt.get(h)===g.value)continue;p.push([h,g])}else{if(ut.get(h)===g.value)continue;u.push([h,g])}if(u.length===0&&p.length===0)return;let b=re(w);if(u.length>0){let h=new ke(b.tmsBaseUrl,c.basicAuth.username,c.basicAuth.access_key);for(let[g,I]of u)try{let P=await h.upsertVariable({name:g,value:I.value});Me[g]=P.id,ut.set(g,I.value),l.log("info","VAR_PUSH_STEP","Variable updated mid-run",{name:g})}catch(P){l.log("warn","VAR_PUSH_STEP_FAILED","Mid-run variable push failed",{name:g,error:String(P)})}}if(p.length>0){let h=new Re(b.secretsBaseUrl);for(let[g,I]of p)try{await h.pushSecret({secretKey:g,secretValue:I.value,username:c.basicAuth.username,accessKey:c.basicAuth.access_key,orgId:String(c.resolvedCreds?.org_id??"")}),mt.set(g,I.value),l.log("info","SECRET_PUSH_STEP","Secret updated mid-run",{name:g})}catch(P){l.log("warn","SECRET_PUSH_STEP_FAILED","Mid-run secret push failed",{name:g,error:String(P)})}}}let Pe=xe?(d,u,p,b)=>{if(!(_||m.isFirstRun))return;if(L&&b){_n(L.packTestDir,b,xe,(g,I,P,H)=>l.log(g,I,P,H));return}let h=N+u;In(l.sessionDir,h,d,xe,(g,I,P,H)=>l.log(g,I,P,H),p)}:void 0,dr=a.rootTitle??a.rootSteps[0]?.heading??is(n),fs=Object.keys(J.raw).length>0?Se(J.raw,dr).objective:dr,pe=Cn({flag:o.url,frontmatter:a.rootGlobal?.url,configDefault:C.load().default_url}),ps=En({resolvedUrl:pe,local:!!o.local,allowMissingUrl:!!o.allowMissingUrl,isTTY:!!process.stdin.isTTY});l.setFirstRun(fs,pe??"");let ue=new nt(a),Be=new Date().toISOString(),ur=Date.now(),pt=e.evidenceAttach?null:new $r({origin:"testmd",runKind:"author",pid:process.pid,title:a.rootTitle??is(n),started:Be,producerVersion:Ge,surfaces:pe?[pe]:void 0,testmdRelPath:ho(s,n),definition:{path:"test.md",content:ls(n,"utf8")},cwd:s,packRootDir:le(l.sessionDir,"evidence")}),ae=bo(e.evidenceAttach,pt),Z=ae.session,L=null;if(e.evidenceAttach)L={executionId:e.evidenceAttach.id,testId:e.evidenceAttach.test,packTestDir:e.evidenceAttach.packTestDir};else if(pt)try{L=await pt.start()}catch(d){l.log("warn","EVIDENCE_START_FAILED","Evidence pack creation failed",{error:String(d)})}let Ve=[],gt=[],mr,ht=(d,u,p,b,h)=>{if(!L)return;Z.noteSpawn(h?.length?{...d,steps:d.steps.map(I=>({...I,verifies:h}))}:d),d.resolution&&(mr=d.resolution),Ve.push(yo(u));let g=lt(u,b);for(let I=0;I<g;I++)gt.push(p+I)},bt=()=>L?{packTestDir:L.packTestDir,ordinalOffset:Z.nextOrdinalOffset()}:void 0,gs=typeof o.maxSteps=="string"&&o.maxSteps!==""?parseInt(o.maxSteps,10):void 0;function fr(d,u){let p=a.steps[d],b=as(p.config,y),h=Ce(fe.raw,b.variables,p.objective);return Nn({objective:h.objective,url:d===0?pe??void 0:p.unitEntryUrl,requireStartUrl:d===0&&ps,model:x,chrome:ie,auth:c,sessionId:l.sessionId,runIndex:u,windowSize:{width:1920,height:1080},maxSteps:b.max_steps??gs??30,headless:ee.headless??!1,disableAskUser:!0,variables:Object.keys(h.variables).length>0?h.variables:void 0,globalContext:b.global_context??lr,localContext:b.local_context??cr,sessionContext:l.getContext(),bugDetection:o.bugDetection??j.bug_detection,evidence:bt()})}function pr(d){let p=a.steps[d].trace[0].stepIndex,b=a.rootSteps.find(g=>g.index===p);a.steps.slice(0,d).some(g=>g.trace[0].stepIndex===p)||t.onAgentEvent({type:"test_md_step_start",step_index:p,heading:b.heading,ref:b.body.kind==="import_ref"?{kind:"import",label:b.body.path,unit_kind:b.body.path.endsWith("_test.md")?"test":"helper"}:null})}function yt(d,u,p,b,h,g){let I=a.steps[d],P=I.trace[0].stepIndex,H=!a.steps.slice(d+1).some(T=>T.trace[0].stepIndex===P),B=p?.status==="passed"?"passed":"failed",O=p?.reason??h??void 0,U=p?.duration??g,S=p?.verdict;if(S&&typeof S=="object"){let T=typeof S.one_liner=="string"?S.one_liner:"",E=typeof S.bug_title=="string"&&S.bug_title?S.bug_title:T;if(E&&B==="failed"){let V=[S.family,S.category].filter(Boolean).join("/"),te=typeof S.confidence=="number"?`, confidence ${S.confidence.toFixed(2)}`:"";O=`${O??"failed"} \u2014 bug verdict: ${E}${V?` [${V}${te}]`:""}`}let v=typeof S.category_proposal=="string"?S.category_proposal:"";v&&B==="failed"&&(O=`${O??"failed"}; category proposal: ${v} \u2014 consider adding to taxonomy`),t.onAgentEvent({type:"test_md_bug_verdict",step_index:I.trace[0].stepIndex,confirmed:S.confirmed===!0,bug_title:E||null,family:S.family??null,category:S.category??null,category_proposal:v||null,severity:S.severity??null,confidence:typeof S.confidence=="number"?S.confidence:null,one_liner:T||null})}let{continueOverall:$}=ue.recordStep(I,{status:B,duration_s:U,reason:O}),Y=as(I.config,y),W=Ce(fe.raw,Y.variables,I.objective).objective;if(p){let T=Rn(p,u,b);l.addRunResult(kn(p,W,u,T),p.total_runs)}else l.addRunResult({index:u,objective:W,status:B,summary:"",context:{memory:{},variables:{},pointer:""}},1);if(H||!$){let T=ue.snapshotOutcomes().find(E=>E.rootStepIndex===P);t.onAgentEvent({type:"test_md_step_end",step_index:P,status:T.status,duration_s:T.duration_s??0,ref_kind:T.refKind??null,unit_kind:T.refKind==="import"?(T.refLabel??"").endsWith("_test.md")?"test":"helper":null,inlined_count:T.inlinedCount??null,failed_sub_step_index:T.failedSubStepIndex??null})}return $}let vt=[];async function hs(d){an(d,a.steps.length);for(let u=0;u<d;u++){if(K||e.signal?.aborted)return{failedAt:u,cancelled:!0};let p=a.steps[u],b=m.decisions[u];if(b.kind!=="replay")return process.stderr.write(`error: runReplayPhase invoked on a non-replay decision at step ${u}
|
|
38
|
-
`),{failedAt:u,cancelled:!1};let h=l.nextRunIndex();N=h;let g=u===0?pe??void 0:a.steps[u].unitEntryUrl,I={width:j.window_size.width,height:j.window_size.height},P=Ce(fe.raw,p.config.variables,p.objective),H=jt({step:p,decision:b,chrome:ie,auth:c,sessionId:l.sessionId,runIndex:h,sessionDir:l.sessionDir,windowSize:I,forceNavigateUrl:g,sessionContext:l.getContext(),variables:Object.keys(P.variables).length>0?P.variables:void 0,evidence:bt(),investigationAsync:!ae.ownsLifecycle});await ft(P.raw),pr(u);let B=Date.now(),O=null,U=null,S=Je();try{let T=Ct(H,{environment:w});r.register("runner",()=>{(kt()||e.signal?.aborted)&&(K=!0);try{T.cancel()}catch{}}),G?.setRunActive(!0);try{for await(let E of T.events){if(t.onAgentEvent(E),S=Et(S,E),E.type==="step_event"&&E.event==="reasoning"?G?.setStepText(E.detail):E.type==="step_end"&&(E.status==="passed"&&G?.setStepComplete(),Pe&&Pe(E.index,0,E.child_id,typeof E.ordinal=="number"&&E.id?{ordinal:E.ordinal,id:E.id}:void 0)),E.type==="run_end"){O=E;break}if(E.type==="error"){U=E.message??"runner error";break}}if(!ae.ownsLifecycle&&O?.status==="failed")r.deregister("runner"),vt.push({exited:T.exited.then(()=>{}).catch(()=>{}),cancel:()=>{try{T.cancel()}catch{}}});else try{T.cancel()}catch{}if(!O&&!U){let{code:E}=await T.exited;E!==0&&(U=`runner exited with code ${E}`)}}finally{G?.setRunActive(!1),r.cleanup("runner","Replay step complete")}}catch(T){U=T.message}if(K)return{failedAt:u,cancelled:!0};let $=Math.round((Date.now()-B)/1e3),Y=yt(u,h,O,null,U,$);l.recordStepRun({testmdStepIndex:a.steps[u].flatIndex,runIndex:h,totalRunDirs:lt(O,null)}),ht(S,O,h,null,a.steps[u].verifies);let W=!!U||O?.status==="failed";if(ln(u,W?"failed":"ok"),W||!Y)return{failedAt:u,cancelled:!1}}return{failedAt:null,cancelled:!1}}let gr=async()=>{if(_)return!0;let d=c.basicAuth;if(!d){let h=await c.resolver.resolve(!0);h?.username&&h?.access_key&&(d={username:h.username,access_key:h.access_key},c.basicAuth=d)}if(!m.testId||!m.fromCommitId||!d)return process.stderr.write(`error: cannot acquire lock \u2014 missing required state
|
|
39
|
-
`),!1;let u=l.sessionId,p=o.onLockConflict??a.rootGlobal.on_lock_conflict??"readonly",b=await Zt({tmsBaseUrl:A.tmsBaseUrl,testId:m.testId,fromCommitId:m.fromCommitId,newCommitId:u,basicAuth:d,onLockConflict:p});if(b==="ok"){_=!0,m.newCommitId=u,l.log("info","MID_RUN_LOCK_ACQUIRED","Mid-run lock acquired",{test_id:m.testId}),i&&t.onLockState({phase:"acquired",scope:"mid_run"}),rt({baseUrl:Ee(A.tmsBaseUrl),testId:m.testId,auth:Ae(d),lifecycle:r});let h=await cs({resolved:a,decisions:m.decisions,tmsBaseUrl:A.tmsBaseUrl,newCommitId:u,basicAuth:d,mode:p,lifecycle:r,alreadyLocked:m.unitLocks,allUnits:!0});return h.outcome==="ok"?m.unitLocks.push(...h.locks):process.stderr.write(`warn: mid-run unit lock acquisition degraded (${h.outcome}) \u2014 affected units will not self-commit
|
|
40
|
-
`),!0}return l.log("error","MID_RUN_LOCK_CONFLICT","Mid-run lock acquisition failed",{reason:b}),i&&t.onLockState({phase:"conflict",scope:"mid_run",reason:b}),process.stderr.write(`error: mid-run lock acquisition failed (${b})
|
|
41
|
-
`),!1};if(i){let d=o.author===!0;d&&(Ut(),l.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let{authorBoundary:u,cancelledInPhase:p,shrinkCount:b}=await fn({decisions:m.decisions,forceAuthor:d,hasRetry:o.retry===!0||o.retryCount!==void 0,maxShrinks:o.retryCount!==void 0?parseInt(o.retryCount,10):Le.maxShrinks,runReplayPhase:hs,session:l,accumulator:ue,acquireLockIfNeeded:gr});if(X=b>0,b>0&&(l.log("info","RETRY_TRIGGERED","Retry loop triggered",{shrink_count:b,final_author_boundary:u}),t.onRetryAttempt({shrink_count:b,final_author_boundary:u,complete_reauthor:u===0})),u===0&&b>0&&l.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback",{shrink_count:b}),!p&&u>=0)for(let h=u;h<a.steps.length&&!e.signal?.aborted;h++){let g=a.steps[h];if(!ue.shouldRunFlatStep(g))continue;pr(h),D=!0,ce.add(a.steps[h].flatIndex);let I=l.nextRunIndex();N=I,await ft(Ce(fe.raw,g.config.variables,g.objective).raw);let P=fr(h,I),H=Date.now(),B=null,O=null,U=null,S=!1,$=0,Y=Je();try{let E=Ct(P,{environment:w,assertionMode:rr,finalValidation:sr});r.register("runner",()=>{(kt()||e.signal?.aborted)&&(K=!0);try{E.cancel()}catch{}}),G?.setRunActive(!0);try{for await(let v of E.events){if(t.onAgentEvent(v),Y=Et(Y,v),v.type==="bifurcation"){let V=v.count??v.flows?.length??0;(v.is_single_flow??V<=1)||(U=v.flows??null,S=!0,$=0)}else if(v.type==="run_start"&&S)$++;else if(v.type==="step_event"&&v.event==="reasoning")G?.setStepText(v.detail);else if(v.type==="step_end"&&(v.status==="passed"&&G?.setStepComplete(),Pe)){let V=S?Math.max(0,$-1):0;Pe(v.index,V,v.child_id,typeof v.ordinal=="number"&&v.id?{ordinal:v.ordinal,id:v.id}:void 0)}if(v.type==="run_end"){B=v;break}if(v.type==="error"){O=v.message??"runner error";break}}try{E.cancel()}catch{}}finally{G?.setRunActive(!1),r.cleanup("runner","Step complete")}}catch(E){O=E.message}let W=Math.round((Date.now()-H)/1e3),T=yt(h,I,B,U,O,W);if(l.recordStepRun({testmdStepIndex:a.steps[h].flatIndex,runIndex:I,totalRunDirs:lt(B,U)}),ht(Y,B,I,U,a.steps[h].verifies),!T||K||e.signal?.aborted)break}}else{let{effectiveDecisions:d}=await import("./effective-decisions-DRM3JSR4.js"),{decideRetry:u}=await import("./replay-policy-6USQBT3E.js"),p=o.retry===!0||o.retryCount!==void 0,b=o.retryCount!==void 0?parseInt(o.retryCount,10):Le.maxShrinks,h=o.author===!0;h&&(Ut(),l.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let g=h?0:et(m.decisions),I=0,P=null,H=m.decisions.filter(S=>S.kind==="replay").length,B=m.decisions.length-H,O=[];o.push&&O.push("--push"),p&&O.push("--retry"),o.retryCount!==void 0&&O.push(`--retry-count=${o.retryCount}`),h&&O.push("--author");let U={source:n,steps:{total:m.decisions.length,replay:H,author:B},model:x,viewport:{width:j.window_size.width,height:j.window_size.height},chrome:ie.cdpEndpoint??ie.wsEndpoint??"managed",session:l.sessionName??"ephemeral",variables:{count:Object.keys(J.raw).length,secrets:Object.values(J.raw).filter(S=>S.secret).length,names:Object.keys(J.raw)},flags:O,mode:y.mode??"testing"};for(;;){let S=l.snapshot(),$=ue.snapshot(),Y=d(m.decisions,g,h);if(I>=1){let v=g===0?`\u21BB Complete re-author \u2014 retry budget exhausted (${I}/${b})`:`\u21BB Retry ${I}/${b} \u2014 replay 0..${g-1}, author ${g}..${m.decisions.length-1}
|
|
42
|
-
reason: replay miss at step ${(P??0)+1}`;process.stderr.write(v+`
|
|
43
|
-
`)}let W=I>=1&&g>0&&P!==null?{startIdx:0,endIdx:P,count:P}:void 0;G?.setRunActive(!0);let T=await Ro({decisions:Y,resolved:a,session:l,accumulator:ue,tuiConfig:j,globalConfig:U,buildStepConfigAt:fr,buildReplayConfig:v=>{let V=m.decisions[v];if(V.kind!=="replay")throw new Error("expected replay decision at index "+v);let te=a.steps[v];return jt({step:te,decision:V,chrome:ie,auth:c,sessionId:l.sessionId,runIndex:l.nextRunIndex(),sessionDir:l.sessionDir,windowSize:{width:j.window_size.width,height:j.window_size.height},forceNavigateUrl:v===0?pe??void 0:te.unitEntryUrl,sessionContext:l.getContext(),variables:So(fe.raw,te.config.variables,te.objective),evidence:bt()})},onAnyAuthorStep:v=>{D=!0,ce.add(a.steps[v].flatIndex)},onCancel:()=>{Q=!0},topBannerModel:x,topBannerAuth:`${k.getActiveProfile()??"no profile"}/${w}`,spawnOpts:{environment:w,mode:y.mode??"testing",assertionMode:rr,finalValidation:sr,log:(v,V,te,St)=>l.log(v,V,te,St)},priorAttemptRollup:W,pushStepLevelDelta:(v,V)=>ft(Ce(fe.raw,v,V).raw),onSequencerStepEnd:(v,V,te,St)=>{let ws=Math.round((Date.now()-St)/1e3),_s=v.hadError?v.reason??"runner error":null,Is=yt(V,te,v.runEnd,v.bifurcationFlows??null,_s,ws);return l.recordStepRun({testmdStepIndex:a.steps[V].flatIndex,runIndex:te,totalRunDirs:lt(v.runEnd,v.bifurcationFlows)}),ht(v.evidence??Je(),v.runEnd,te,v.bifurcationFlows,a.steps[V].verifies),Is},screenshotDispatcher:Pe,onReasoning:v=>G?.setStepText(v),onStepComplete:()=>G?.setStepComplete(),onSpawnStart:v=>{N=v},host:t});if(G?.setRunActive(!1),T.cancelled){r.cleanup("marker-overlay","user cancelled run"),r.cleanup("chrome","user cancelled run");break}if(T.failedAt===null)break;let E=u({failedAt:T.failedAt,shrinkCount:I,hasRetry:p,maxShrinks:b});if(E.kind==="fail"||!_&&!await gr())break;l.rollback(S),ue.rollback($),E.kind==="complete-reauthor"?g=0:g=E.newAuthorBoundary,I++,X=!0,l.log("info","RETRY_TRIGGERED","Retry loop triggered (TTY)",{shrink_count:I,failed_at:P}),g===0&&l.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback (TTY)",{shrink_count:I}),P=T.failedAt}}let z=ue.finalize(),ge=Math.round((Date.now()-ur)/1e3),bs={session:l,resolvedAuth:c,chromeResult:ie,chromeInstance:$e??null,testId:l.testId??null,preparedVariables:J,variableIds:Me,globalContext:lr,localContext:cr,tuiConfig:j,env:w,localMode:!!o.local},hr=!1,br=!1,yr=!1,vr=async(d={})=>{if(!L)return!1;if(ae.ownsLifecycle?hr:yr)return!0;try{let u=await ir(),p=Qt(D)==="replay",b=le(ne(n),".internal","execution.json"),h=le(l.sessionDir,"execution.json"),g=Hr(L.packTestDir,p?[b,h]:[h,b],(S,$,Y,W)=>l.log(S,$,Y,W)),{ids:I,linear:P}=g?Gr(L.packTestDir):{ids:[],linear:!0},{steps:H,tail:B,unjoined:O}=qr(Z.steps,I,p,P);g?O?l.log("warn","SKIPPED_TAIL_UNJOINED","Executed records don't align with the authored blob \u2014 skipped tail withheld",{executed:Z.steps.length,leaves:I.length}):B.length>0&&l.log("info","SKIPPED_TAIL_APPENDED","Unexecuted authored actions recorded as skipped",{count:B.length}):l.log("warn","SKIPPED_TAIL_NO_BLOB","No auteur blob in pack \u2014 unexecuted actions cannot be recorded as skipped",{});let U=await Z.writeResult({steps:[...H,...B],spawns:Ve.length?Ve:[{resultCode:null}],tags:a.rootGlobal.tags,externalIdInput:{execution_id:L.executionId,session_id:l.sessionId,commit_id:p?m.fromCommitId??l.sessionId:l.sessionId,test_id:m.testId??l.testId??void 0,testcase_id:d.testcaseId??m.testcaseId??l.testcaseId??void 0,project_id:F??void 0,folder_id:de??void 0,org_id:l.orgId!=null?String(l.orgId):void 0,session_name:l.sessionName??Te(n),user_name:l.userName??void 0,user_email:l.userEmail??void 0,sharable_link:Tn(re(w).testManagerUiUrl,F,d.testcaseId??m.testcaseId??l.testcaseId,d.shareId)},runnerEnv:Fr({cdpBrowser:u,resolution:mr}),intentEnv:{model:x,platform:"Desktop",platform_type:"web",...ae.ownsLifecycle?{}:{run_kind:Qt(D)}},durationMs:Date.now()-ur,log:(S,$,Y,W)=>l.log(S,$,Y,W)});if(!ae.ownsLifecycle)return await Ur(Z.pack,L.testId,le(l.sessionDir,"tui.log")),yr=!0,l.log("info","EVIDENCE_RESULT_WRITTEN","Member result.yaml written",{execution_id:L.executionId,verdict:U}),!0;if(!br)try{let S=Vr({cwd:process.cwd(),members:[{path:n,verdict:U,executionId:L.executionId,startedAt:new Date().toISOString(),acs:Br(Z.steps),mode:"testmd",local:!!o.local}]});br=!0;for(let $ of S.warnings)l.log("warn","EXEC_SYNC",$,{});S.synced>0&&l.log("info","EXEC_SYNC",`context sync: ${S.synced} fact(s), ${S.superseded} supersession(s)`,{})}catch(S){l.log("warn","EXEC_SYNC",`exec-sync failed: ${S instanceof Error?S.message:String(S)}`,{})}try{let S=Kr(Z.pack,Mr(process.cwd()));S.status==="skipped"&&l.log("warn","EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${S.reason}`,{})}catch(S){l.log("warn","EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(S)})}return await jr({executionId:L.executionId,testId:L.testId,saved:!0,runKind:Qt(D),verdict:U,outputStemDir:ne(n),cwd:s,packDir:Z.pack,tuiLogPath:le(l.sessionDir,"tui.log"),expectStatusDisagrees:(o.bugDetection??j.bug_detection)==="continue",log:(S,$,Y,W)=>l.log(S,$,Y,W),surface:"testmd"}),hr=!0,l.log("info","EVIDENCE_SEALED","Evidence pack sealed",{execution_id:L.executionId,verdict:U}),!0}catch(u){return l.log("warn","EVIDENCE_SEAL_FAILED","Evidence pack seal failed",{error:String(u)}),!1}},Ke=ve&&(_||m.isFirstRun)&&!m.degradedReadonly,ys=async()=>{if(!c.basicAuth)return null;let d=re(w),u=(D||o.push===!0)&&!Q,p=(_||m.isFirstRun)&&!Q&&z.overallStatus==="passed"&&!m.degradedReadonly;l.log("info","PIPELINE_GATE_STATE","Derived gate state (finalize)",{phase:"finalize",shouldUploadArtifacts:ve,shouldUploadPipeline:Ke,shouldReplaceLocalOutput:u,shouldCommit:p,lockHeld:_,anyAuthorStepRan:D,cancelled:Q,overallStatus:z.overallStatus});let b=Jn({session:l,env:w,auth:c,variables:J,variableIds:Me,projectId:F,folderId:de,totalSteps:z.outcomes.length,totalDuration:ge,screenshotExtMap:xe?.getExtMap(),codeExport:Xn({codeExport:o.codeExport,codeLanguage:o.codeLanguage,skipCodeValidation:o.skipCodeValidation},j.code_export),onProgress:()=>{},log:(g,I,P,H)=>l.log(g,I,P,H),shouldUploadArtifacts:Ke,shouldReplaceLocalOutput:u,shouldCommit:p,isFirstRun:m.isFirstRun,resolvedTest:a,sourcePath:n,stepRunRecords:l.getStepRunRecords(),authoredFlatIdx:[...ce],unitLocks:m.unitLocks,outcomes:z.outcomes,overallStatus:z.overallStatus,fromCommitId:m.fromCommitId,startedISO:Be,durationS:ge,tmsIds:{testId:m.testId??l.testId??void 0,testcaseId:m.testcaseId??l.testcaseId??void 0,projectId:F??void 0,folderId:de??void 0,orgId:l.orgId??void 0,sessionName:l.sessionName??Te(n)},tmsBaseUrl:A.tmsBaseUrl,testId:m.testId??void 0,newCommitId:m.newCommitId??void 0,basicAuth:c.basicAuth??void 0,decisions:m.decisions,wantsPush:o.push===!0,retryTriggered:X,forceAuthor:o.author===!0,evidence:L&&ae.ownsLifecycle?{executionId:L.executionId,packTestDir:L.packTestDir,sealedPackPath:Z.pack,cwd:s,runIndices:gt,sealFn:vr}:void 0,evidenceRead:L&&!ae.ownsLifecycle?{packTestDir:L.packTestDir,runIndices:gt}:void 0,authoredExecutionPath:D?void 0:le(ne(n),".internal","execution.json")});m.newCommitId!=null&&(b.skipTmsFinalize=!0);let h=new nn(b);return i?await h.execute():await t.runUpload(h,g=>{if(g.testcaseId&&g.shareId&&F)return st(d.testManagerUiUrl,F,g.testcaseId,g.shareId)})};L&&await ir();let oe=await Yn(bs,{performUpload:ys,runCleanup:()=>{r.cleanup("chrome","test.md run complete")},log:(d,u,p,b)=>l.log(d,u,p,b)},{overallStatus:z.overallStatus,outcomes:z.outcomes,sourcePath:n,title:a.rootTitle,rootSteps:a.rootSteps,startedISO:Be,durationS:ge,localMode:!!o.local,skipLocalWrites:!0}),Sr=await vr({testcaseId:oe.uploadResult?.testcaseId,shareId:oe.uploadResult?.shareId}),wr=o.evidencePublish===!1,_r=ae.ownsLifecycle&&!!L&&!!c.basicAuth&&rs({shouldUploadArtifacts:ve,lockHeld:_,isFirstRun:m.isFirstRun,sealed:Sr,testId:m.testId});if(_r&&wr)l.log("info","EVIDENCE_PUBLISH_SKIPPED","Replay evidence publish skipped (--no-evidence-publish)",{execution_id:L.executionId}),process.stderr.write(`info: evidence publish skipped (--no-evidence-publish)
|
|
44
|
-
`);else if(wr&&(_||m.isFirstRun))process.stderr.write(`note: --no-evidence-publish has no effect on author/commit runs
|
|
45
|
-
`);else if(_r){let d=c.basicAuth,u=L,p=F,b=await ns({controller:new we(A.controllerBaseUrl,{username:d.username,accessKey:d.access_key}),tms:new We(A.tmsBaseUrl,c.resolvedCreds?.username??d.username,c.resolvedCreds?.access_key??d.access_key),testId:m.testId,sessionId:l.sessionId,executionId:u.executionId,sealedPackPath:Z.pack,projectId:p});b.ok?l.log("info","EVIDENCE_INGESTED","Replay evidence uploaded and ingested",{execution_id:u.executionId,project_id:p}):(l.log("warn","EVIDENCE_PUBLISH_FAILED","Replay evidence publish failed",{execution_id:u.executionId,stage:b.stage,error:b.error}),process.stderr.write(` \u26A0 evidence publish failed (${b.stage}): ${b.error}
|
|
46
|
-
`)),t.onAgentEvent({type:"test_md_evidence_ingest",status:b.ok?"ok":"failed",evidence_id:u.executionId,...b.ok?{}:{stage:b.stage}})}await Io(n,m,l,z.outcomes,z.overallStatus,Be,ge,oe.uploadResult,j,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},_,Q);try{let d=he(n);if(Qr({shouldUploadPipeline:Ke,uploadSucceeded:!!oe.uploadResult?.success,metaCommitId:d?.commit_id,metaTestId:d?.test_id})){let u=await Pt({sourcePath:n,testId:d.test_id,sessionId:l.sessionId,commitId:d.commit_id,controller:new we(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});u.ok?l.log("info","BUNDLE_SYNC_OK","testmd bundle pushed",{commit_id:d.commit_id,bytes:u.bytes}):(l.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync failed",{commit_id:d.commit_id,stage:u.stage,error:u.error}),process.stderr.write(` \u26A0 bundle sync failed (${u.stage}): ${u.error}
|
|
47
|
-
`)),t.onAgentEvent({type:"test_md_bundle_sync",status:u.ok?"ok":"failed",commit_id:d.commit_id,path:n,...u.ok?{bytes:u.bytes}:{stage:u.stage}})}}catch(d){l.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync threw",{error:d instanceof Error?d.message:String(d)})}if(Ke&&oe.uploadResult?.success)for(let d of m.unitLocks)try{let u=he(d.file);if(u?.commit_id!==l.sessionId||!u?.test_id)continue;let p=await Pt({sourcePath:d.file,testId:String(u.test_id),sessionId:l.sessionId,commitId:String(u.commit_id),controller:new we(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});p.ok?l.log("info","BUNDLE_SYNC_OK","unit bundle pushed",{commit_id:u.commit_id,path:d.file,bytes:p.bytes}):l.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync failed",{commit_id:u.commit_id,path:d.file,stage:p.stage,error:p.error}),t.onAgentEvent({type:"test_md_bundle_sync",status:p.ok?"ok":"failed",commit_id:u.commit_id,path:d.file,...p.ok?{bytes:p.bytes}:{stage:p.stage}})}catch(u){l.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync threw",{path:d.file,error:u instanceof Error?u.message:String(u)})}let Ir=re(w),He=oe.uploadResult?.testcaseId,qe=He&&oe.uploadResult?.shareId&&F?st(Ir.testManagerUiUrl,F,He,oe.uploadResult.shareId):void 0,vs=a.unitFiles.filter(d=>d.file!==a.rootPath).map(d=>{let u=a.steps.filter(g=>g.owningFile===d.file),p=u.filter(g=>ce.has(g.flatIndex)).length,h=(d.kind==="test"?he(d.file):null)?.commit_id===l.sessionId;return{path:d.file,kind:d.kind,replayed:u.length-p,authored:p,committed:h,...h?{commit_id:l.sessionId}:{}}}),Rr={overallStatus:z.overallStatus,durationS:ge,decisions:m.decisions,outcomes:z.outcomes,cancelled:Q,retryTriggered:X,lockHeld:_,anyAuthorStepRan:D,isFirstRun:m.isFirstRun,wantsPush:o.push===!0,uploadResult:oe.uploadResult,shouldUploadArtifacts:ve,shouldReplaceLocalOutput:D&&!Q,shouldCommit:(_||m.isFirstRun)&&!Q&&z.overallStatus==="passed"&&!m.degradedReadonly,shareUrl:qe,imports:vs},{buildSummaryEvent:Ss}=await import("./SummaryBox-WWF3G263.js");if(i?t.onAgentEvent(Ss(Rr)):await t.onSummary(Rr),!i){let d=He&&F?Ln(Ir.testManagerUiUrl,F,He):void 0;await t.onLinks({recordedTestPath:n,outputDir:ne(n),shareableLink:qe,testCaseLink:d,codeExportDir:oe.uploadResult?.codeExportDir})}if(ae.ownsLifecycle&&Z&&Sr){let{offerEvidenceView:d}=await import("./evidence-HDD7T7DX.js");await d({packPath:Z.pack,env:w,isTTY:!i&&!Q&&!!process.stdin.isTTY&&!!process.stderr.isTTY,log:u=>process.stderr.write(u+`
|
|
48
|
-
`)})}return t.onAgentEvent({type:"test_md_done",overall_status:z.overallStatus,duration_s:ge,session_id:l.sessionId,...qe?{share_url:qe}:{}}),{overallStatus:z.overallStatus,exitCode:z.overallStatus==="passed"?0:1,outputDir:ne(n),durationS:ge,uploadResult:oe.uploadResult,anyAuthorStepRan:D,resultCode:Or(Ve),...vt.length?{pendingInvestigations:vt}:{}}}function vo(e,t){let r={...e,...t},n=Object.keys(r).length>0?Se(r,""):{variables:{},objective:"",keyMap:{}};return{raw:r,auteur:n.variables,auteurObjective:"",secretEntries:Object.entries(r).filter(([,s])=>s.secret),nonSecretEntries:Object.entries(r).filter(([,s])=>!s.secret)}}function Ce(e,t,r){let n={...e,...t??{}};if(Object.keys(n).length===0)return{raw:n,variables:{},objective:r};let s=Se(n,r);return{raw:n,variables:qn(s.variables,s.objective),objective:s.objective}}function So(e,t,r){let n=Ce(e,t,r).variables;return Object.keys(n).length>0?n:void 0}function as(e,t){let r=new Set(ct),n={...e};for(let[s,o]of Object.entries(t))r.has(s)||s!=="variables"&&o!==void 0&&e[s]===void 0&&(n[s]=o);return n}function wo(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}async function _o(e,t,r,n,s,o){let i=Jr(t);on(t,i);let f=_e(e),a=go(f)?JSON.parse(ls(f,"utf8")):null,c=a?.testcase_id,y=a?.test_id,w=a?.commit_id,A=r.push===!0,R=r.retry===!0||r.retryCount!==void 0,x=r.author===!0;A&&!c&&process.stderr.write(`[--push] no meta.json yet \u2014 flag is a no-op on first run
|
|
49
|
-
`),x&&(c=void 0,y=void 0,w=void 0);let k=n.resolvedAuth.basicAuth;if(!k){let N=await n.resolvedAuth.resolver.resolve(!0);N?.username&&N?.access_key&&(k={username:N.username,access_key:N.access_key},n.resolvedAuth.basicAuth=k)}let C=!!k,l=!r.local&&C&&y!=null&&w!=null&&c!=null,K=l&&(Xe(i)||A);if(A&&!l)return process.stderr.write(`error: --push requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
|
|
50
|
-
`),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(R&&!l)return process.stderr.write(`error: --retry requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
|
|
51
|
-
`),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(x&&!C)return process.stderr.write(`error: --author requires authenticated credentials for the TMS API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
|
|
52
|
-
`),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};let m=null,_=!1,D=!1;if(K){m=s;let X=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",N=await Zt({tmsBaseUrl:n.tmsBaseUrl,testId:y,fromCommitId:w,newCommitId:m,basicAuth:k,onLockConflict:X});if(N==="ok")_=!0,rt({baseUrl:Ee(n.tmsBaseUrl),testId:y,auth:Ae(k),lifecycle:o});else{if(N==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};m=null,D=!0}}let ce=[],Q=K&&!_;if(!r.local&&C&&!Q){let X=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",N=await cs({resolved:t,decisions:i,tmsBaseUrl:n.tmsBaseUrl,newCommitId:m??s,basicAuth:k,mode:X,lifecycle:o});if(N.outcome==="ok")ce=N.locks;else{if(_&&y&&w&&m&&await Jt(n,y,w,m),be(),N.outcome==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:c==null,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};process.stderr.write(`[lock] imported-unit conflict \u2014 whole run degrades to readonly (no commits, no uploads)
|
|
53
|
-
`),m=null,_=!1,D=!0}}return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:m,isFirstRun:c==null,hasAuth:C,canLock:l,lockAcquired:_,unitLocks:ce,degradedReadonly:D}}async function cs(e){let t=new Set(e.resolved.steps.filter((n,s)=>e.decisions[s]?.kind==="author").map(n=>n.owningFile)),r=[];for(let n of e.resolved.unitFiles){if(n.kind!=="test"||n.file===e.resolved.rootPath||!e.allUnits&&!t.has(n.file)||e.alreadyLocked?.some(i=>i.file===n.file))continue;let s=he(n.file);if(!s?.test_id||!s?.commit_id)continue;let o=await Zt({tmsBaseUrl:e.tmsBaseUrl,testId:String(s.test_id),fromCommitId:String(s.commit_id),newCommitId:e.newCommitId,basicAuth:e.basicAuth,onLockConflict:e.mode});if(o==="ok"){r.push({file:n.file,testId:String(s.test_id),fromCommitId:String(s.commit_id)}),rt({baseUrl:Ee(e.tmsBaseUrl),testId:String(s.test_id),auth:Ae(e.basicAuth),lifecycle:e.lifecycle});continue}for(let i of r)await De({baseUrl:Ee(e.tmsBaseUrl),testId:i.testId,body:{commitId:e.newCommitId,fromCommitId:i.fromCommitId},auth:Ae(e.basicAuth)}),be(i.testId);return{outcome:o,locks:[]}}return{outcome:"ok",locks:r}}function Ee(e){return`${e}/kane-cli/v1`}function Ae(e){return{username:e.username,accessKey:e.access_key}}async function Zt(e){let t=Ee(e.tmsBaseUrl),r=Ae(e.basicAuth),n={baseUrl:t,testId:e.testId,fromCommitId:e.fromCommitId,newCommitId:e.newCommitId,auth:r},s=await Nt(n);if(s.ok)return"ok";if(!(s.reason==="concurrent"||s.reason==="base_mismatch"))return process.stderr.write(`[lock] acquire failed: ${s.reason} (HTTP ${s.httpStatus}): ${s.message}
|
|
54
|
-
`),"abort";let i=s.reason==="concurrent"?"concurrent session":"base commit mismatch (pull latest)";if(e.onLockConflict==="fail")return process.stderr.write(`[lock] ${i}; aborting (--on-lock-conflict fail)
|
|
55
|
-
`),"abort";if(e.onLockConflict==="wait"){if(s.reason==="base_mismatch")return process.stderr.write(`[lock] base commit mismatch \u2014 pull latest; aborting
|
|
56
|
-
`),"abort";for(;;){process.stderr.write(`[lock] waiting (concurrent session)...
|
|
57
|
-
`),await new Promise(a=>setTimeout(a,3e4));let f=await Nt(n);if(f.ok)return"ok";if(f.reason!=="concurrent")return process.stderr.write(`[lock] wait drifted to ${f.reason} (HTTP ${f.httpStatus}): ${f.message}; aborting
|
|
58
|
-
`),"abort"}}return process.stderr.write(`[lock] ${i} \u2014 running in readonly mode (no commit)
|
|
59
|
-
`),"readonly"}async function Io(e,t,r,n,s,o,i,f,a,c,y,w,A){let{decisions:R,testId:x,testcaseId:k,fromCommitId:C,newCommitId:l}=t;if(!(s==="passed")||A){let m=A?"cancelled":s;w&&x&&C&&l&&(process.stderr.write(`[lock] run not committed (${m}); discarding playground lock
|
|
60
|
-
`),await Jt(y,x,C,l));for(let _ of t.unitLocks)await Jt(y,_.testId,_.fromCommitId,l??r.sessionId);be();return}be()}async function Jt(e,t,r,n){let s=e.resolvedAuth.basicAuth;if(!s){let i=await e.resolvedAuth.resolver.resolve(!0);i?.username&&i?.access_key&&(s={username:i.username,access_key:i.access_key},e.resolvedAuth.basicAuth=s)}if(!s)return;let o=await De({baseUrl:Ee(e.tmsBaseUrl),testId:t,body:{commitId:n,fromCommitId:r},auth:Ae(s)});o.ok||process.stderr.write(`warn: discardLock failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
|
|
61
|
-
`)}async function Ro(e){let t=null,r=!1,n=0,s=-1,o=-1,i=0,f=async a=>{if(a&&a.status==="failed")return n>0&&e.decisions[n-1].kind==="replay"&&(t=n-1),null;for(;n<e.decisions.length&&!e.accumulator.shouldRunFlatStep(e.resolved.steps[n]);)n++;if(n>=e.decisions.length)return null;let c=e.decisions[n],y=e.resolved.steps[n],w=n;n++;let A=e.session.nextRunIndex();s=w,o=A,i=Date.now(),e.onSpawnStart?.(A),c.kind==="author"&&e.onAnyAuthorStep(w),await e.pushStepLevelDelta(y.config.variables,y.objective);let R=c.kind==="replay"?e.buildReplayConfig(w):e.buildStepConfigAt(w,A),x=c.kind==="replay"?"md5-match":c.reason,k=y.config??{},C={};for(let[l,K]of Object.entries(k))K!=null&&l!=="variables"&&l!=="assurance"&&(C[l]=K);return{config:R,banner:{stepLabel:`Step ${w+1}/${e.decisions.length}`,objective:wo(y.objective,100)},mode:c.kind,modeReason:x,perStepOverrides:Object.keys(C).length>0?C:void 0}};return await e.host.runSteps({topBanner:{model:e.topBannerModel,auth:e.topBannerAuth},globalConfig:e.globalConfig,getNextStep:f,onStepEnd:a=>(a.status==="failed"&&s>=0&&e.decisions[s]?.kind==="replay"&&(t=s),e.onSequencerStepEnd(a,s,o,i)),onAllComplete:()=>{},onCancel:()=>{r=!0,e.onCancel()},spawnOpts:e.spawnOpts,priorAttemptRollup:e.priorAttemptRollup,screenshotDispatcher:e.screenshotDispatcher,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete}),{failedAt:t,cancelled:r}}export{Rn as a,kn as b,ot as c,mi as d,jn as e,xn as f,Ko as g,_n as h,In as i,Mt as j,Cn as k,En as l,st as m,Tn as n,Ln as o,Fn as p,Nn as q,qn as r,Gn as s,zn as t,Vt as u,Jn as v,Xn as w,es as x,ts as y,Yt as z,ya as A,ns as B,Qt as C,_l as D,vo as E,Ce as F,So as G,as as H};
|
package/dist/chunk-V3UE6RJP.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{extname as o}from"path";var s={kind:"jira",media_type:"application/x-kane-jira-envelope",extensions:[],cite:"verbatim",maxBytes:2e6},n=[{kind:"text",media_type:"text/plain",extensions:[".txt"],cite:"verbatim",maxBytes:2e6},{kind:"markdown",media_type:"text/markdown",extensions:[".md",".markdown"],cite:"verbatim",maxBytes:2e6},{kind:"image",media_type:"image/png",extensions:[".png"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/jpeg",extensions:[".jpg",".jpeg"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/webp",extensions:[".webp"],cite:"anchor-only",maxBytes:5e6},{kind:"text",media_type:"application/json",extensions:[".json"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/yaml",extensions:[".yaml",".yml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/toml",extensions:[".toml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/xml",extensions:[".xml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"text/plain",extensions:[".log"],cite:"verbatim",maxBytes:2e6},{kind:"pdf",media_type:"application/pdf",extensions:[".pdf"],cite:"verbatim",maxBytes:25e6,sniff:e=>e.subarray(0,5).toString("latin1")==="%PDF-"},{kind:"docx",media_type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",extensions:[".docx"],cite:"verbatim",maxBytes:25e6,sniff:e=>e.length>=4&&e[0]===80&&e[1]===75&&e[2]===3&&e[3]===4,sniffFail:e=>e.length>=8&&e.subarray(0,8).equals(d)?"DOCX_ENCRYPTED_OR_LEGACY: password-protected Office file (or a legacy .doc renamed .docx) \u2014 remove the password / save as .docx and re-ingest":void 0},s],d=Buffer.from([208,207,17,224,161,177,26,225]),x={pdf:"pdf",docx:"docx",jira:"jira"},r=new Set(Object.keys(x));function p(e){let a=o(e).toLowerCase(),i=n.find(t=>t.extensions.includes(a));return i?{ok:!0,media:i}:{ok:!1,code:"UNSUPPORTED_MEDIA",allowlist:n.flatMap(t=>t.extensions)}}export{s as a,x as b,r as c,p as d};
|