@testmuai/kane-cli 0.8.6 → 0.8.7
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-S2P7WMBI.js → ChatSurface-3PEXML4X.js} +1 -1
- package/dist/{ChromeProfilePicker-7DTJK2QW.js → ChromeProfilePicker-E3CZ52RH.js} +1 -1
- package/dist/{CliFeedbackPrompt-Y3OYZX54.js → CliFeedbackPrompt-BEVZRLQA.js} +1 -1
- package/dist/{CliUploadProgress-I3N5WDNJ.js → CliUploadProgress-V2FLLVR6.js} +1 -1
- package/dist/ConfigView-ZOGKVFQT.js +2 -0
- package/dist/EvidenceViewOffer-KWX27WNZ.js +2 -0
- package/dist/FolderPicker-EIKQSSF6.js +2 -0
- package/dist/{InfoBox-QBXPPMM2.js → InfoBox-4TNE7QMG.js} +1 -1
- package/dist/{LinksBox-L24KON4U.js → LinksBox-TXO5X5UD.js} +1 -1
- package/dist/{ProfilesView-H6XCTIXI.js → ProfilesView-S4YPEZEF.js} +1 -1
- package/dist/{ProjectPicker-F6JGF2B3.js → ProjectPicker-LWFX2QT2.js} +1 -1
- package/dist/{SaveSessionPrompt-QGO65DZN.js → SaveSessionPrompt-MJTCIQIZ.js} +1 -1
- package/dist/SingleShotApp-5LCIH6DQ.js +2 -0
- package/dist/{SummaryBox-OZIZQY4B.js → SummaryBox-UIVK3QDR.js} +1 -1
- package/dist/TestMdRunView-RE5GX5QX.js +2 -0
- package/dist/{TestrunEvidenceTable-A7WTTKTV.js → TestrunEvidenceTable-GYGVNCYW.js} +1 -1
- package/dist/{WhoamiView-EB5AV27X.js → WhoamiView-NRGMMLL4.js} +1 -1
- package/dist/{app-download-SQ4RDY3E.js → app-download-HTQOD3YF.js} +1 -1
- package/dist/{auth-TW24FZQF.js → auth-5URO2XJU.js} +1 -1
- package/dist/{binary-5LMQJ3CZ.js → binary-2U4YTTFS.js} +1 -1
- package/dist/{bind-SJ6DOVQ4.js → bind-NO4TMSHJ.js} +3 -3
- package/dist/{bootstrap-BTEXO6HX.js → bootstrap-UOEW3VZM.js} +1 -1
- package/dist/bridge-P2EBLXPY.js +2 -0
- package/dist/{changelog-JLSLSA3Y.js → changelog-7BPYLUDK.js} +1 -1
- package/dist/chat-committer-GUK6IBCL.js +2 -0
- package/dist/{chat-controller-R4THYYPU.js → chat-controller-6GUUMUVP.js} +1 -1
- package/dist/{chunk-IWM5EZC3.js → chunk-2RO2BWCZ.js} +2 -2
- package/dist/chunk-3BY7MX3D.js +8 -0
- package/dist/{chunk-USI2WMAK.js → chunk-3IM5QGVV.js} +1 -1
- package/dist/{chunk-PT7V5WDQ.js → chunk-3YKNJIVB.js} +1 -1
- package/dist/{chunk-TKYJTXWL.js → chunk-44PZPNXJ.js} +1 -1
- package/dist/{chunk-FYS5VIOG.js → chunk-46HYKID6.js} +2 -2
- package/dist/{chunk-E5S4BASB.js → chunk-4EFDEDTL.js} +1 -1
- package/dist/chunk-5ZV64NAG.js +5 -0
- package/dist/{chunk-QISE272H.js → chunk-6AUSG5SB.js} +1 -1
- package/dist/{chunk-ATWDQCDA.js → chunk-6YVVTYVO.js} +1 -1
- package/dist/{chunk-GC5U55MW.js → chunk-72J4V3DA.js} +1 -1
- package/dist/{chunk-ZLSWHCWO.js → chunk-76ILJPZF.js} +1 -1
- package/dist/{chunk-3UUPP5W3.js → chunk-7CU5EBC6.js} +1 -1
- package/dist/{chunk-KLTKEGDH.js → chunk-7EFG27IZ.js} +4 -4
- package/dist/{chunk-JCD6FP7A.js → chunk-7UCICMK7.js} +3 -3
- package/dist/{chunk-JN44V63O.js → chunk-7VAE7WXF.js} +2 -2
- package/dist/{chunk-TDS6LG6T.js → chunk-A66ZGHO2.js} +1 -1
- package/dist/chunk-AJXOJF2X.js +4 -0
- package/dist/{chunk-TZFT7R7B.js → chunk-AUERMBX5.js} +1 -1
- package/dist/{chunk-4NSP2NPT.js → chunk-B27X3C2E.js} +1 -1
- package/dist/chunk-B2KXIFZD.js +2 -0
- package/dist/{chunk-WMQJBEQP.js → chunk-BISBPWN3.js} +1 -1
- package/dist/{chunk-GELPKSLC.js → chunk-BPHQNTUD.js} +1 -1
- package/dist/{chunk-JFAFKHDX.js → chunk-BZAGVBCX.js} +1 -1
- package/dist/{chunk-2DCNCH32.js → chunk-C4OVX65Q.js} +1 -1
- package/dist/{chunk-SQGBFCFO.js → chunk-C5ZIKKIB.js} +1 -1
- package/dist/{chunk-DZCG7FFP.js → chunk-C765HUXU.js} +1 -1
- package/dist/{chunk-KQ2MYMOS.js → chunk-DJC6MLO4.js} +1 -1
- package/dist/{chunk-2R7KL7YG.js → chunk-DMOZM22N.js} +1 -1
- package/dist/{chunk-D4SRHIJ5.js → chunk-DSNB7EI6.js} +1 -1
- package/dist/{chunk-TQKIE7AX.js → chunk-DTBKKC2R.js} +1 -1
- package/dist/chunk-E5C3HUIY.js +2 -0
- package/dist/chunk-E5Q5CDOX.js +2 -0
- package/dist/{chunk-VOBXYDJW.js → chunk-E6AF53HZ.js} +42 -43
- package/dist/chunk-EU5ZH334.js +2 -0
- package/dist/{chunk-GFKCTYCA.js → chunk-F43KOMVB.js} +1 -1
- package/dist/{chunk-ZRKPZLLG.js → chunk-F7RR24BL.js} +1 -1
- package/dist/{chunk-MKSTP2XN.js → chunk-FVKLNQ4T.js} +2 -2
- package/dist/{chunk-ZGBSGZZM.js → chunk-GAO6ZMCT.js} +1 -1
- package/dist/chunk-GDB2V6QA.js +21 -0
- package/dist/{chunk-RX5TZZNQ.js → chunk-GJ6RJVXH.js} +1 -1
- package/dist/{chunk-XJILZ2WN.js → chunk-GYTZLUFV.js} +1 -1
- package/dist/{chunk-OYJBABRV.js → chunk-HAGJA7KG.js} +1 -1
- package/dist/{chunk-7KORP5FF.js → chunk-HEWWWMUN.js} +1 -1
- package/dist/{chunk-SQC4P2Q7.js → chunk-HHQ67JCU.js} +1 -1
- package/dist/chunk-HL4UXOHV.js +2 -0
- package/dist/{chunk-DUAXZYAD.js → chunk-HLXOYLZV.js} +3 -3
- package/dist/{chunk-Z35BUPZT.js → chunk-HO3T5LJH.js} +1 -1
- package/dist/{chunk-FJYDEWOA.js → chunk-IJABR5SX.js} +1 -1
- package/dist/chunk-ILKSL4PI.js +4 -0
- package/dist/{chunk-YZ45OEH3.js → chunk-IQBKCLLR.js} +1 -1
- package/dist/{chunk-KDXQNLVV.js → chunk-IRPAWAK7.js} +2 -2
- package/dist/{chunk-3LEVCW6R.js → chunk-K7VX6YIT.js} +1 -1
- package/dist/{chunk-7VZCXW74.js → chunk-LOMPRMG3.js} +1 -1
- package/dist/{chunk-5COGCNED.js → chunk-LRZXVDPY.js} +1 -1
- package/dist/chunk-LWZ7EIXX.js +2 -0
- package/dist/{chunk-YEQVJWEF.js → chunk-MROHDW4W.js} +1 -1
- package/dist/{chunk-OFW3ZVTP.js → chunk-N2N5T5JN.js} +1 -1
- package/dist/{chunk-TYI4MLFJ.js → chunk-NM6PEYED.js} +1 -1
- package/dist/{chunk-RZLD7TPG.js → chunk-NQFAZM2D.js} +1 -1
- package/dist/{chunk-EXERQHXV.js → chunk-OADHU5HL.js} +1 -1
- package/dist/{chunk-S66MCU2Y.js → chunk-OHD4CZXT.js} +1 -1
- package/dist/{chunk-SS5TOK2J.js → chunk-P4JUY54O.js} +1 -1
- package/dist/chunk-Q3S5EKX5.js +21 -0
- package/dist/{chunk-AFPHLUQ5.js → chunk-Q4CTSXDM.js} +1 -1
- package/dist/{chunk-A44G533S.js → chunk-QQ67Z4IW.js} +1 -1
- package/dist/{chunk-NT3UETTV.js → chunk-QZB7CBRO.js} +1 -1
- package/dist/{chunk-FUNKVREV.js → chunk-R2JRQD4I.js} +1 -1
- package/dist/{chunk-CLGC7VEO.js → chunk-SWXEBLKX.js} +1 -1
- package/dist/{chunk-IGJIDN4U.js → chunk-SZTUZZEA.js} +1 -1
- package/dist/{chunk-RDNKYRKY.js → chunk-T3DVIDBA.js} +1 -1
- package/dist/{chunk-B4Q6FMIP.js → chunk-T4LAHU57.js} +3 -3
- package/dist/{chunk-XY325HDJ.js → chunk-TKQSIKMR.js} +1 -1
- package/dist/{chunk-BN6AHQL7.js → chunk-TMFFHGCT.js} +4 -4
- package/dist/{chunk-FMUCZWS3.js → chunk-U35Y7SGB.js} +1 -1
- package/dist/{chunk-V444REBC.js → chunk-UASEGQ7B.js} +1 -1
- package/dist/{chunk-INK66XQS.js → chunk-UFYIQ4E3.js} +1 -1
- package/dist/chunk-UOLERTKE.js +2 -0
- package/dist/{chunk-VMCSRLRC.js → chunk-VHA7UNDW.js} +1 -1
- package/dist/{chunk-P3RKXL3V.js → chunk-VMRP44MN.js} +1 -1
- package/dist/{chunk-4ONGF4NT.js → chunk-VOXDZS4N.js} +1 -1
- package/dist/{chunk-6KPPGMO2.js → chunk-WNHLKDOT.js} +1 -1
- package/dist/chunk-X7R2JWOJ.js +4 -0
- package/dist/chunk-XAQ3Y63J.js +21 -0
- package/dist/chunk-YC2TFACE.js +5 -0
- package/dist/{chunk-AWD56KGX.js → chunk-YC6HYBLN.js} +1 -1
- package/dist/{chunk-AO3PBE2V.js → chunk-YDEK2FJQ.js} +1 -1
- package/dist/chunk-YGVY63PE.js +20 -0
- package/dist/chunk-YKYZKBMH.js +26 -0
- package/dist/{chunk-C4WTZSX4.js → chunk-YYSWJU6H.js} +1 -1
- package/dist/{chunk-VRVFPMCR.js → chunk-Z3EEMIVV.js} +1 -1
- package/dist/{chunk-YHTYPTDD.js → chunk-Z7HUW3L4.js} +1 -1
- package/dist/chunk-Z7S3IWUX.js +2 -0
- package/dist/{chunk-CLLQQPBZ.js → chunk-ZFRWVWUR.js} +1 -1
- package/dist/{chunk-DN3E6RT6.js → chunk-ZH2ROVHE.js} +2 -2
- package/dist/committer-JC6BIBNR.js +2 -0
- package/dist/{config-6TQIMTNB.js → config-XNDP425N.js} +1 -1
- package/dist/cover-cmd-HREOYWWD.js +3 -0
- package/dist/{credentials-ZSNM4BTD.js → credentials-ZTBWB3LK.js} +1 -1
- package/dist/{deps-bundle-D2ZC2SPT.js → deps-bundle-OHCYH5KL.js} +1 -1
- package/dist/{deps-resolve-VRBMFUTX.js → deps-resolve-K2NX2W3K.js} +1 -1
- package/dist/design-committer-IIHKNEYF.js +2 -0
- package/dist/device-ref-LAZWPRQN.js +2 -0
- package/dist/dispatch-JZWIFKRB.js +2 -0
- package/dist/doctor-XXOGVMAI.js +2 -0
- package/dist/dossier-2M62K2PA.js +3 -0
- package/dist/evidence-FN2SQB6Z.js +2 -0
- package/dist/evolve-cmd-WQB7E2B5.js +2 -0
- package/dist/{explain-UAAQWHYR.js → explain-AOZNHWMB.js} +1 -1
- package/dist/{explain-cmd-2TKO7GRW.js → explain-cmd-2SCD5T6U.js} +1 -1
- package/dist/{explain-cmd-EX24XKD6.js → explain-cmd-7VTWRROR.js} +1 -1
- package/dist/{extract-bind-TJ2STXV5.js → extract-bind-3YXY7ZU2.js} +3 -3
- package/dist/{extract-cmd-FLOYO6HL.js → extract-cmd-WGXEJ54C.js} +2 -2
- package/dist/{feeder-C3TOJPKK.js → feeder-GVZSWX6Q.js} +1 -1
- package/dist/gaps-cmd-MFZ52DC7.js +3 -0
- package/dist/{generate-headless-DBT4MKQT.js → generate-headless-PCNAJ2LS.js} +2 -2
- package/dist/index.js +137 -131
- package/dist/ingest-TTSDUMH5.js +2 -0
- package/dist/ingest-cmd-D2MD6EAK.js +2 -0
- package/dist/install-RHINEFR5.js +2 -0
- package/dist/{interactive-bind-7UDJY4CF.js → interactive-bind-ZFMG2JIX.js} +4 -4
- package/dist/lifecycle-cmd-5FRGYY3M.js +2 -0
- package/dist/list-cmd-DD4WYJSH.js +3 -0
- package/dist/{list-commands-DA4ZXOPJ.js → list-commands-64THS67Y.js} +1 -1
- package/dist/logical-ids-U2OUMYCP.js +2 -0
- package/dist/login-flow-B5J6JXQN.js +2 -0
- package/dist/{maintenance-cmd-6XSVO6FO.js → maintenance-cmd-7V44VGL4.js} +1 -1
- package/dist/{mobile-prompts-JS7GPVKS.js → mobile-prompts-RITBS32L.js} +1 -1
- package/dist/{persist-recorded-session-LE3LGFOS.js → persist-recorded-session-Z5SCYWXR.js} +1 -1
- package/dist/phase-seed-ATH337WF.js +2 -0
- package/dist/pipeline-HMFLLUZJ.js +2 -0
- package/dist/prepare-target-HOEFIKXN.js +2 -0
- package/dist/readmodel-UZETCXV6.js +2 -0
- package/dist/reconcile-cmd-Q7CBNPRX.js +2 -0
- package/dist/reconcile-deps-XEUZHUQX.js +4 -0
- package/dist/reconcile-engine-ES2INERY.js +2 -0
- package/dist/{recording-banner-YMKWR3M3.js → recording-banner-NLS7K2RV.js} +1 -1
- package/dist/records-XWF6KDQH.js +2 -0
- package/dist/registry-E5RSXYQJ.js +2 -0
- package/dist/{require-project-folder-3KS7KTME.js → require-project-folder-V4F74R4A.js} +1 -1
- package/dist/resolve-run-intent-WSOCGJUN.js +2 -0
- package/dist/{resolver-V5VP5FLT.js → resolver-7EAM4A6O.js} +1 -1
- package/dist/revert-2UCOMQ4J.js +2 -0
- package/dist/review-cmd-VN6VGUWJ.js +4 -0
- package/dist/run-45ODACZR.js +2 -0
- package/dist/run-ZYARNPAS.js +2 -0
- package/dist/{run-test-md-FO2RNNOD.js → run-test-md-CPGKD3DD.js} +2 -2
- package/dist/{sessions-cmd-ZZIZN2VB.js → sessions-cmd-ME7NM6ES.js} +1 -1
- package/dist/{skill-installer-W4TT5MST.js → skill-installer-WEV2M32J.js} +1 -1
- package/dist/{spawner-ZSYJQGQW.js → spawner-GG6YQB4A.js} +1 -1
- package/dist/{structured-answers-5EY2AZN7.js → structured-answers-2WOTULBQ.js} +1 -1
- package/dist/tcg-generate-DASCY23M.js +2 -0
- package/dist/{testmd-actions-NPILETCQ.js → testmd-actions-X6HEL5NH.js} +1 -1
- package/dist/token-refresh-ZTQFC3Q3.js +2 -0
- package/dist/{validate-basic-727KRHX6.js → validate-basic-QJL4DCKY.js} +1 -1
- package/dist/verdicts-CRNN765C.js +2 -0
- package/dist/{version-check-A2JQYRI2.js → version-check-KONSQ4M3.js} +1 -1
- package/dist/{view-cmd-KPJTP4DI.js → view-cmd-ZSMU4I4J.js} +1 -1
- package/dist/walk-session-X2N4XHLU.js +2 -0
- package/dist/{with-telemetry-HSD6CXDS.js → with-telemetry-Y6MVROKX.js} +1 -1
- package/package.json +11 -11
- package/dist/ConfigView-EOYCKYJS.js +0 -2
- package/dist/EvidenceViewOffer-AQ3KB3EN.js +0 -2
- package/dist/FolderPicker-RCHRYYC4.js +0 -2
- package/dist/SingleShotApp-AY3XFEYT.js +0 -2
- package/dist/TestMdRunView-RPW4MIJA.js +0 -2
- package/dist/bridge-GQJ35GTL.js +0 -2
- package/dist/chat-committer-ZWWCLJFD.js +0 -2
- package/dist/chunk-3Q6WAK6P.js +0 -2
- package/dist/chunk-B5QGIUJA.js +0 -26
- package/dist/chunk-BRTARADN.js +0 -4
- package/dist/chunk-CZUOGGUK.js +0 -2
- package/dist/chunk-DEZ7CXGM.js +0 -21
- package/dist/chunk-ESC7AOCX.js +0 -2
- package/dist/chunk-LN7233E2.js +0 -20
- package/dist/chunk-LQQXPY5B.js +0 -4
- package/dist/chunk-Q4V2GK5U.js +0 -2
- package/dist/chunk-QBG7XEGQ.js +0 -15
- package/dist/chunk-QQAAPFIR.js +0 -2
- package/dist/chunk-R5T4RLF5.js +0 -2
- package/dist/chunk-SORVX3KI.js +0 -7
- package/dist/chunk-TH47OOBV.js +0 -4
- package/dist/chunk-TRJUD3XJ.js +0 -5
- package/dist/chunk-VAYBKR76.js +0 -4
- package/dist/chunk-XQFITNA3.js +0 -2
- package/dist/chunk-ZSXDZI56.js +0 -20
- package/dist/committer-SWEWEYNX.js +0 -2
- package/dist/cover-cmd-7JILZJUK.js +0 -3
- package/dist/design-committer-VYT6NU3T.js +0 -2
- package/dist/dispatch-2PBSJ7YW.js +0 -2
- package/dist/doctor-OWRRDA4Z.js +0 -2
- package/dist/dossier-KTLTGT2X.js +0 -3
- package/dist/evidence-NDAKCCHQ.js +0 -2
- package/dist/evolve-cmd-DIA5EWUT.js +0 -2
- package/dist/gaps-cmd-3ZX3PZF4.js +0 -3
- package/dist/ingest-JO5NJENZ.js +0 -2
- package/dist/ingest-cmd-T6HM3AHK.js +0 -2
- package/dist/install-NIVU4XVS.js +0 -2
- package/dist/lifecycle-cmd-O2324GN6.js +0 -2
- package/dist/list-cmd-N4KMA34H.js +0 -3
- package/dist/logical-ids-TEBCQJGO.js +0 -2
- package/dist/login-flow-NHBJVDW6.js +0 -2
- package/dist/phase-seed-DIRETNU6.js +0 -2
- package/dist/pipeline-MTAZDCZR.js +0 -2
- package/dist/prepare-target-YK2DLDWB.js +0 -2
- package/dist/readmodel-XOYGGQ3S.js +0 -2
- package/dist/reconcile-cmd-CYRYVS5B.js +0 -2
- package/dist/reconcile-deps-FYXRAMF2.js +0 -4
- package/dist/reconcile-engine-6AT6EVGS.js +0 -2
- package/dist/records-IOZTZUZV.js +0 -2
- package/dist/registry-V45ZQ6Q5.js +0 -2
- package/dist/resolve-run-intent-W32G6WM6.js +0 -2
- package/dist/revert-NQ7GEVSE.js +0 -2
- package/dist/review-cmd-DQRKQUMG.js +0 -4
- package/dist/run-26IR3CKX.js +0 -2
- package/dist/run-5IYI2TJI.js +0 -2
- package/dist/tcg-generate-ONLV5GXG.js +0 -2
- package/dist/token-refresh-G2CSTY4B.js +0 -2
- package/dist/types-O23GN2YM.js +0 -2
- package/dist/verdicts-TDJLJJ3F.js +0 -2
- package/dist/walk-session-HB3OOWVR.js +0 -2
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{d as ae,e as ce}from"./chunk-AXTPNZPX.js";import{a as oe}from"./chunk-L2TV4G56.js";import{b as V,d as se}from"./chunk-WNHLKDOT.js";import{d as ie}from"./chunk-NVGBE2DR.js";var pe=new Set(["approve","edit","reject"]),de=new Set(["approve","edit","reject","add","enhance","retract"]);function fe(i,t){return`chatop:${t}:${i.target??"new"}:${i.op}:${i.seq}`}function me(i,t,w,y){let l=fe(i,t),g=i.payload;switch(i.op){case"approve":return{kind:"approve",target:i.target,expectedCid:i.expected_cid,eventId:l};case"edit":{let{reason:s,...x}=g;return{kind:"edit",target:i.target,expectedCid:i.expected_cid,edit:x,reason:s,eventId:l}}case"enhance":return{kind:"enhance",target:i.target,expectedCid:i.expected_cid,edges:g.edges??[],eventId:l};case"retract":{let s=typeof g.reason=="string"?g.reason.trim():"";if(!s)throw new Error("INVALID_RETRACT: a retract needs a non-empty reason");let x=g.edge_ecid!==void 0&&g.edge_ecid!==null,a=g.edge!==void 0&&g.edge!==null;if(x&&a)throw new Error("INVALID_RETRACT: both edge_ecid and edge were sent \u2014 give exactly one");if(!x&&!a)throw new Error("INVALID_RETRACT: neither edge {type, dst, src?} (display refs) nor edge_ecid was sent \u2014 give exactly one");let f={kind:"retract",target:i.target,expectedCid:i.expected_cid,reason:s};if(x){if(typeof g.edge_ecid!="string"||!g.edge_ecid)throw new Error("INVALID_RETRACT: edge_ecid must be a non-empty string");return{...f,edgeEcid:g.edge_ecid,eventId:`chatop:${t}:${i.target}:retract:e:${g.edge_ecid}:${i.seq}`}}let p=g.edge;if(typeof p!="object"||typeof p.type!="string"||!p.type||typeof p.dst!="string"||!p.dst)throw new Error("INVALID_RETRACT: edge needs {type, dst} (src optional), all display refs");if(p.src!==void 0&&p.src!==null&&(typeof p.src!="string"||!p.src))throw new Error("INVALID_RETRACT: edge.src, when given, must be a non-empty display ref");let v=typeof p.src=="string"?p.src:void 0;return{...f,edgeRef:{type:p.type,dst:p.dst,...v!==void 0?{src:v}:{}},eventId:`chatop:${t}:${i.target}:retract:t:${p.type}:${p.dst}:${v??"-"}:${i.seq}`}}case"reject":return{kind:"reject",target:i.target,expectedCid:i.expected_cid,reason:g.reason??"",redirectTo:g.redirect_to,eventId:l};case"add":{let s=g.proposal_item??{},x=String(s.label??"");if(!w.mint_gate.includes(x))throw new Error(`GATED_LABEL: cannot mint "${x}" (gate: ${w.mint_gate.join(", ")})`);let a=s.cite??{},f=s.conv_source_id??y;if(!f||typeof a.turn!="number"||!a.quote)throw new Error("INVALID_ADD: a chat add requires a conversation cite {turn, quote} and conv_source_id");let p=s.content,v=p&&typeof p=="object"&&!Array.isArray(p)&&Object.keys(p).length>0?p:null,C=new Set(["label","cite","conv_source_id","content","rationale","edges"]),_=v??Object.fromEntries(Object.entries(s).filter(([$])=>!C.has($)));return{kind:"add",label:x,content:_,cite:{turn:a.turn,quote:a.quote},convSourceId:f,rationale:s.rationale,eventId:l}}}}function le(i,t,w={}){let y=w.turn??0,l=[],g=[];for(let a of i){if(!de.has(a.op))throw new Error(`UNKNOWN_OP: "${a.op}" is not a chat op (accepted: ${[...de].join(", ")})`);if(a.op!=="add"&&!a.target)throw new Error(`MISSING_TARGET: a ${a.op} op needs a target ref`)}for(let a of i)(a.op==="add"||a.op==="enhance"||a.op==="retract")&&g.push(a);let s=new Map;for(let a of i){if(!pe.has(a.op)||!a.target)continue;let f=s.get(a.target)??[];f.push(a),s.set(a.target,f)}for(let[a,f]of s){let p=Math.max(...f.map(C=>C.seq)),v=f.filter(C=>C.seq===p);if(v.length>1){l.push({target:a,seq:p,kinds:v.map(C=>C.op)});continue}g.push(v[0])}return{chatOps:g.sort((a,f)=>a.seq-f.seq).map(a=>me(a,y,t,w.convSourceId)),ambiguous:l}}function he(i){let t=[];return i.questions.forEach((w,y)=>{if(i.resolution[y])return;let l=w.recommended_index!=null?w.options[w.recommended_index]?.label:void 0;l!=null&&t.push(w.risk==="high"?`${l} \u203C`:l)}),t.length>3?`${t.slice(0,3).join(" \xB7 ")} \xB7 +${t.length-3} more`:t.join(" \xB7 ")}function ue(i){let t=i.text.replace(/\?+\s*$/,"");return t.length<=36?t:`${t.slice(0,33)}\u2026`}function ke(i){return i.use_cases??[]}var be={acs:"acceptance criteria",scenarios:"scenarios",exercises:"exercises",tests:"tests",gaps:"gaps"};function xe(i){let t=[],w=[],y=(s,x)=>{x.length!==0&&(w.push(s),t.push(...x))},l=s=>typeof s=="string"&&/^[a-z]{1,4}\d{1,4}$/i.test(s)?s:null,g=s=>{let x=l(s.automates)??"1 scenario",a=s.verifies??[],f=a.map(l).filter(C=>C!==null).slice(0,2),p=a.length-f.length,v=f.length?`${f.join(" ")}${p>0?` +${p}`:""}`:`${a.length} ACs`;return`covers ${x} \xB7 verifies ${v}`};return y("acs",(i.acs??[]).map(s=>({temp_ref:s.temp_ref,title:s.text,kind:"ac",badge:String(s.kind),extra:{...s.expected_answer?{expects:`${String(s.expected_answer.operator??"")} \xB7 ${String(s.expected_answer.operand??"")}`}:{},"scoped to":s.scoped_to??"(use-case)"}}))),y("scenarios",(i.scenarios??[]).map(s=>({temp_ref:s.temp_ref,title:s.title,kind:"scenario",badge:s.case_type,why:s.intent,depends_on_hint:s.depends_on??[],extra:{technique:s.technique_notes}}))),y("exercises",(i.exercises??[]).map(s=>({temp_ref:l(s.scenario)??"wiring",title:`${l(s.scenario)??"scenario"} exercises ${l(s.ac)??"1 AC"}`,kind:"exercise",badge:"wires",why:s.rationale}))),y("tests",(i.tests??[]).map(s=>({temp_ref:s.temp_ref,title:s.title,kind:"test",why:g(s),depends_on_hint:s.reuses??[],extra:{automates:String(s.automates??"?"),verifies:(s.verifies??[]).join(", "),check:s.check?`${String(s.check.kind)} vs ${String(s.check.verified_against)}`:"?"}}))),y("gaps",(i.gaps??[]).map(s=>({temp_ref:s.temp_ref??s.ref??"?",title:String(s.question?.header??s.kind),kind:"gap",badge:s.kind,why:s.risk_rationale}))),{items:t,heading:w.join(" + ")||"design"}}function Ae(i={}){let t={turns:[],thinking:ae(),pending:null,confirm:null,status:"idle",ledger:[],activeTurn:null,stream:null,checkpoint:!1},w=e=>{let n=[],r=e.minted.map(c=>c.slug).filter(Boolean);r.length&&n.push(`added ${r.join(", ")}`);let o=e.applied.length-e.minted.length;return o>0&&n.push(`${o} change${o===1?"":"s"} applied`),e.staleDelta.length&&n.push(`stales ${e.staleDelta.length}`),n.join(" \xB7 ")||"no changes"},y=[];i.onRender&&y.push(i.onRender);let l=0,g=0,s=null,x=null,a=null,f=[],p=0,v=e=>{if(!(!a||!i.contextDir||!e.trim()))try{let n=i.refreshGraph?.()??i.graph;if(!n)return;se({contextDir:i.contextDir,graph:n,sourceId:a,text:e,by:i.by??{kind:"human",id:"owner"}})}catch{}},C=e=>{if(!a||!i.contextDir)return;let n=i.refreshGraph?.()??i.graph,r=n?.heads.get(a),o=n?.convChains.get(a);if(!n||typeof r!="string"||!o)return;let c=n.getNode(r)?.content?.blob,d=typeof c=="string"?ie(i.contextDir,c)?.toString("utf8")??"":"";if(d)for(let b of e){if(b.kind!=="add"||b.convSourceId!==a)continue;let F=V(d,b.cite.turn);if(!(F!==null&&F.includes(b.cite.quote)))for(let R=o.turns;R>=1;R--){let G=V(d,R);if(G!==null&&G.includes(b.cite.quote)){b.cite={...b.cite,turn:R};break}}}},_={startedAt:null,thinkMs:0,toolCalls:0,tools:new Map},$=()=>{_.startedAt??=Date.now()},A=()=>{if(_.toolCalls>0){let e=_.startedAt!=null?Math.max(1,Math.round((Date.now()-_.startedAt)/1e3)):Math.max(1,Math.round(_.thinkMs/1e3));m({kind:"worked",durS:e,toolCalls:_.toolCalls,tools:[..._.tools.entries()].map(([n,r])=>({name:n,n:r}))})}_.startedAt=null,_.thinkMs=0,_.toolCalls=0,_.tools.clear()},E=null,U=new Map,K=e=>JSON.stringify([e.id,e.text,e.options.map(n=>n.label)]),O=null,J=new Map,z=new Map,Y=null,h=()=>{q&&(clearTimeout(q),q=null);for(let e of y)e()},q=null,X=()=>{q||(q=setTimeout(()=>{q=null;for(let e of y)e()},80))},Q=0,m=e=>{e.kind==="childClose"&&Q>0&&(Q-=1),Q>0&&e.kind!=="childOpen"&&e.kind!=="childBack"&&(e.era=Q),e.kind==="childOpen"&&(Q+=1),t.ledger.push(e)},j=null,B=!1,N=(e=!1)=>{j?m({kind:"agent",text:j}):e&&B&&m({kind:"note",text:'chat to refine ("looks good" approves; /done finishes)'}),j=null,B=!1},ge=()=>{j=null,B=!1},L=null,H=e=>{if(L){if(e)for(let n of L.items){let r=e.get(n.temp_ref);r&&(n.logical_id=r)}m({kind:"turn",...L}),L=null}},T=()=>{H(),t.activeTurn&&(t.activeTurn=null)},Z=(e,n)=>n.choice||(n.selected_index!=null?e.options[n.selected_index]?.label??"?":"?"),P=()=>{let e=t.pending;if(!e)return;if(!e.resolution.every(Boolean)){e.cursor=e.resolution.findIndex(o=>o===null);return}let n=e.questions.map((o,c)=>{let d=e.resolution[c];return d.form==="deferred"?{id:o.id,selected_index:null,free_text:null}:{id:o.id,selected_index:d.selected_index,free_text:d.free_text}});t.pending=null,t.status=t.status==="pausing"?"pausing":"streaming",t.status==="streaming"&&(t.busySince=Date.now());let r=E;E=null,r?.(n)},D=(e,n)=>{let r=t.pending,o=r.questions[e],c=r.resolution[e];r.resolution[e]=n;let d=ue(o);c?m({kind:"answer",receipt:{form:"changed",qNum:e+1,stub:d,choice:Z(o,n),prev:c.choice}}):n.form==="deferred"?m({kind:"answer",receipt:{form:"deferred",qNum:e+1,stub:d}}):m({kind:"answer",receipt:{form:n.form,qNum:e+1,stub:d,choice:Z(o,n)}})},ee=()=>{let e=t.pending;e&&(e.questions.forEach((n,r)=>{e.resolution[r]||D(r,{form:"deferred",selected_index:null,free_text:null,choice:""})}),P())},W=new Map,te=e=>{W.clear();let n={high:0,med:1,low:2};return e=e.map((r,o)=>({q:r,i:o})).sort((r,o)=>(n[r.q.risk]??3)-(n[o.q.risk]??3)||r.i-o.i).map(({q:r})=>r),{questions:e,cursor:0,resolution:e.map(()=>null)}};return{state:t,explainLines(e){if(!i.explain||!i.graph||i.contextDir===void 0)return null;let n=i.explain(i.contextDir,i.graph,e);return n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(r=>` [${r.kind}] ${r.rationale??r.detail}`)]:null},explainRef(e){if(!i.explain||!i.graph||i.contextDir===void 0){m({kind:"note",text:"explain isn't available here"}),h();return}let n=i.explain(i.contextDir,i.graph,e),r=n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(o=>` [${o.kind}] ${o.rationale??o.detail}`)].join(`
|
|
3
|
+
`):`unknown ref: ${e}`;m({kind:"note",text:r}),h()},subscribe(e){return y.push(e),()=>{let n=y.indexOf(e);n>=0&&y.splice(n,1)}},submit(e){if(t.confirm&&(t.confirm=null),!t.pending){if(!s){t.turns.push({role:"user",text:e}),m({kind:"user",text:e}),t.notice="the agent isn't running \u2014 nothing sent",h();return}for(t.notice=void 0,t.checkpoint=!1,N(),t.turns.push({role:"user",text:e}),m({kind:"user",text:e}),v(e),t.status="streaming",t.busySince=Date.now(),$(),t.error=void 0,g+=1;f.length>0;)g+=1,s({type:"user_message",message_id:`u${g}-receipt`,text:f.shift()});s({type:"user_message",message_id:`u${g}`,text:e}),h()}},attachSender(e){let n=s;return s=e,()=>{s=n}},attachOnCommitted(e){x=e},attachConversationSource(e){a=e},attachSession(e){i.session=e},holdReceipt(e){f.push(e),t.checkpoint=!0,h()},drainHeldReceipts(){return f.splice(0,f.length)},peekHeldReceipts(){return[...f]},submitAnswer(e,n){let r=t.pending,o=r?.questions[e],c=o?.options[n]?.label;!r||!o||c==null||(D(e,{form:"answered",selected_index:n,free_text:null,choice:c}),P(),h())},submitFreeText(e,n){let r=t.pending,o=r?.questions[e],c=n.trim();!r||!o||!c||(D(e,{form:"answered",selected_index:null,free_text:c,choice:c}),P(),h())},deferBatch(e){let n=t.pending;if(!n||!E)return;n.questions.forEach((o,c)=>{let d=n.resolution[c];d&&d.form==="answered"&&U.set(K(o),d)}),t.pending=null,t.status=t.status==="pausing"?"pausing":"streaming",t.status==="streaming"&&(t.busySince=Date.now()),m({kind:"note",text:`questions set aside \u2014 source ${e.source_id} landed; the agent reads it next`});let r=E;E=null,r({deferred:!0,ingested:e}),h()},submitAnswerWithText(e,n,r){let o=t.pending,c=o?.questions[e],d=c?.options[n]?.label;if(!o||!c||d==null)return;let b=r.trim();D(e,{form:"answered",selected_index:n,free_text:b||null,choice:b?`${d} \u2014 ${b}`:d}),P(),h()},toggleOption(e,n){let r=t.pending?.questions[e];if(!r||r.options[n]==null)return;let o=W.get(e)??new Set;o.has(n)?o.delete(n):o.add(n),W.set(e,o),h()},multiSelection(e){return[...W.get(e)??[]].sort((n,r)=>n-r)},confirmMulti(e){let n=t.pending,r=n?.questions[e];if(!n||!r)return;let o=[...W.get(e)??[]].sort((d,b)=>d-b).map(d=>r.options[d]?.label).filter(d=>d!=null);if(o.length===0)return;W.delete(e);let c=o.join(", ");D(e,{form:"answered",selected_index:null,free_text:c,choice:c}),P(),h()},goWithRecommendations(){let e=t.pending;if(!e)return{picks:""};let n=he(e),r=null;return e.questions.forEach((o,c)=>{if(e.resolution[c])return;let d=o.recommended_index,b=d!=null?o.options[d]?.label:void 0;if(b==null){r===null&&(r=c);return}D(c,{form:"assumed",selected_index:d,free_text:null,choice:b})}),r!==null?(e.cursor=r,h(),{blocked:r}):(P(),h(),{picks:n})},reopenQuestion(){let e=t.pending;if(!e)return;let n=e.cursor<0?e.questions.length:e.cursor;for(let r=n-1;r>=0;r--)if(e.resolution[r]){e.cursor=r,h();return}},continueParked(){if(s){for(t.checkpoint=!1,m({kind:"continued"});f.length>0;)g+=1,s({type:"user_message",message_id:`u${g}-receipt`,text:f.shift()});g+=1,s({type:"user_message",message_id:`u${g}`,text:"continue"}),t.status="streaming",t.busySince=Date.now(),$(),h()}},note(e){m({kind:"note",text:e}),h()},finalizeForExit(){T(),A(),N(),t.stream=null,h()},aliasOf(e){return z.get(e)},registerAliases(e){for(let n of e)z.set(n.ref,n.cid);H(new Map(e.filter(n=>n.id).map(n=>[n.ref,n.id]))),h()},setWorking(e){if(e!=null){if(t.status!=="idle"&&t.status!=="working")return;t.status==="idle"&&(t.busySince=Date.now()),$(),t.status="working",t.workingLabel=e}else{if(t.status!=="working")return;t.status="idle",t.workingLabel=void 0,t.busySince=void 0}h()},ledger(e){e.kind==="commit"&&H(),e.kind==="error"&&(T(),A(),N()),m(e),e.kind==="commit"&&(e.ok?N(!0):ge()),h()},senderAlive(){return s!=null},completeSession(){ee(),s?.({type:"session_complete"}),t.status="idle",t.busySince=void 0,h()},requestPause(){ee(),t.status="pausing",t.busySince=void 0;let e=s;Promise.resolve().then(()=>e?.({type:"pause"})),h()},ask(e){t.pending=te(e),J=new Map(e.map((r,o)=>[r.id,o+1])),t.status="awaiting-input",t.busySince=void 0;let n=new Promise(r=>{E=r});if(U.size>0){let r=0;e.forEach((o,c)=>{let d=K(o),b=U.get(d);b&&(U.delete(d),D(c,{...b}),r+=1)}),r>0&&m({kind:"note",text:`your earlier answer${r>1?"s are":" is"} pre-filled \u2014 press enter to send, or pick a different answer`})}return h(),n},attachIngest(e){let n=O;return O=e,()=>{O===e&&(O=n)}},canIngest(){return O!==null},async ingestAttach(e){let n=O,r=e.trim();if(!n||!r)return;let o;try{o=await n(r)}catch(c){o={ok:!1,error:c instanceof Error?c.message:String(c)}}o.ok||(m({kind:"note",text:o.error??"the source could not be ingested"}),h())},noteCoercion(e,n){m({kind:"answer",receipt:{form:"assumed",qNum:J.get(e.id)??0,stub:ue(e),choice:n,note:"your typed answer couldn't be used here"}}),h()},onAgentEvent(e){switch(e.type){case"reasoning_delta":case"reasoning_done":case"tool_activity":case"decision_activity":{let n=t.thinking;if(t.thinking=ce(n,e),t.thinking!==n&&(e.type==="reasoning_done"&&e.present?($(),_.thinkMs+=e.took_ms):e.type==="tool_activity"&&e.status!=="started"&&($(),_.toolCalls+=1,_.tools.set(e.name,(_.tools.get(e.name)??0)+1))),e.type==="reasoning_delta"){X();return}break}case"usage":t.credits={turn:e.credits,total:e.total_credits};break;case"text_delta":{let n=Y;if(n&&(e.turn_id<n.turn_id||e.turn_id===n.turn_id&&e.attempt<n.attempt))return;(!n||n.turn_id!==e.turn_id||n.attempt!==e.attempt)&&(Y={turn_id:e.turn_id,attempt:e.attempt},t.stream={text:""}),t.stream={text:(t.stream?.text??"")+e.text},X();return}case"progress":break;case"proposal":{l+=1,T(),t.stream=null,t.busySince=void 0,A();let n=ke(e.proposal),r=i.dedupFlags?.(e.proposal);if(r)for(let o of n){let c=r.get(o.temp_ref);c&&(o.matches_existing=c)}t.turns.push({role:"agent",turnIndex:l,items:n,text:e.narrative}),j=e.narrative??null,B=!0,t.activeTurn={turnIndex:l,heading:"use-cases",items:n},L={turnIndex:l,heading:"use-cases",items:n},(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"design":{l+=1,T(),t.stream=null,t.busySince=void 0,A();let{items:n,heading:r}=xe(e.design),o=e.design.phase==="wiring"?"acceptance criteria + exercises":r.split(" + ").map(c=>be[c]??c).join(" + ");m({kind:"banner",text:`designing: ${o}`}),t.turns.push({role:"agent",turnIndex:l,items:n,itemsHeading:r,text:e.narrative}),j=e.narrative??null,B=!0,t.activeTurn={turnIndex:l,heading:r,items:n},L={turnIndex:l,heading:r,items:n},(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"ask_user":A(),t.pending=te(e.questions),t.status="awaiting-input",t.busySince=void 0;break;case"chat_ops":{l+=1,T(),A(),t.stream=null,(t.status==="streaming"||t.status==="working")&&(t.status="idle",t.busySince=void 0,t.workingLabel=void 0);let n=e.chat_ops??e,r=Array.isArray(n.ops)?n.ops:[],o=n.text??e.text??"",c=i.refreshGraph?.()??i.graph,d=u=>z.get(u)??u,b=r.map(u=>{if(!u.target)return u;let k=d(u.target),S=u.expected_cid;if(S==null&&c){let re=c.resolve(k);re&&(S=c.tipOf(re.cid))}let I=u.payload?.redirect_to,M=I&&d(I);return k===u.target&&S===u.expected_cid&&M===I?u:{...u,target:k,expected_cid:S,...M!==I?{payload:{...u.payload,redirect_to:M}}:{}}}),F;try{if(!Array.isArray(n.ops))throw new Error("the agent sent an unreadable change set (no ops array) \u2014 say it again in different words");F=le(b,i.descriptor??{mint_gate:[]},{turn:l,...a?{convSourceId:a}:{}})}catch(u){t.error=u instanceof Error?u.message:String(u),t.turns.push({role:"agent",turnIndex:l,text:o,narration:t.error}),o&&m({kind:"agent",text:o}),m({kind:"error",title:t.error,detail:[]}),f.push(`OPS REJECTED (did not compile) \u2014 nothing landed; do not assume any of your last ops applied.
|
|
4
|
+
- `+t.error);break}let{chatOps:R,ambiguous:G}=F;if(G.length>0){let u=G[0];t.confirm={kind:"ambiguity-confirm",prompt:`did you mean edit or ${u.kinds.filter(k=>k!=="edit").join("/")} on ${u.target}?`},t.turns.push({role:"agent",turnIndex:l,text:o}),o&&m({kind:"agent",text:o});break}if(C(R),i.commitChatTurn&&R.length>0){let u;try{u=i.commitChatTurn({contextDir:i.contextDir??"",graph:i.refreshGraph?.()??i.graph,ops:R,by:i.by??{kind:"human",id:"owner"},...i.descriptor?.mint_gate?{mintable:i.descriptor.mint_gate}:{},...i.session?.state?.sid?{sid:i.session.state.sid}:{}})}catch(k){u={record:null,errors:[{code:"COMMIT_THREW",detail:k instanceof Error?k.message:String(k)}]}}if(u.errors)t.error=u.errors.map(k=>k.detail).join("; "),t.turns.push({role:"agent",turnIndex:l,text:o}),m({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:u.errors.map(k=>`${k.code}: ${k.detail}`)}),f.push(["COMMIT FAILED (chat turn) \u2014 nothing landed; do not assume any of your last ops applied.",...u.errors.map(k=>`- ${k.code}: ${k.detail}`),...u.errors.some(k=>k.code==="UNKNOWN_FIELD")?["If you were changing citations or matched-existing content, that is proposal territory (approve/re-propose) \u2014 a chat edit can only replace a node's own schema fields."]:[]].join(`
|
|
5
|
+
`)),o&&m({kind:"agent",text:o});else{u.applied.length>0&&i.session?.markApplied(u.applied);let k=w(u);t.turns.push({role:"agent",turnIndex:l,text:o,narration:k}),m({kind:"commit",ok:!0,line:k});let S=i.refreshGraph?.();if(S&&x&&x(S),S)try{p+=1;let ne=i.descriptor?.mint_gate?.includes("usecase")?"extract":"design",I=oe({verb:ne,commitN:p,phase:"chat",committed:u.minted.map(M=>({cid:M.cid,...M.slug?{logical_id:M.slug}:{}}))},S);f.push(I.text)}catch{}o&&m({kind:"agent",text:o})}}else t.turns.push({role:"agent",turnIndex:l,text:o}),o&&m({kind:"agent",text:o});v(o);break}case"done":case"session_complete":T(),A(),N(),t.status="idle",t.busySince=void 0,s=null;break;case"error":T(),A(),N(),t.stream=null,t.status="idle",t.busySince=void 0,t.error=e.message,s=null,m({kind:"error",title:e.message,detail:[]});break;case"session_paused":break;default:break}h()}}}export{he as a,ue as b,Ae as c};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as A}from"./chunk-YCCUBQY4.js";import{a as _}from"./chunk-
|
|
2
|
+
import{a as A}from"./chunk-YCCUBQY4.js";import{a as _}from"./chunk-E5C3HUIY.js";import{a as B}from"./chunk-BPMSNGXQ.js";import{a as R}from"./chunk-YDEK2FJQ.js";import{a as k}from"./chunk-HAGJA7KG.js";import{x as c}from"./chunk-N2N5T5JN.js";import{a as P}from"./chunk-HCBYKLMW.js";import{a as u,b as l}from"./chunk-C44QQJR4.js";import{a as J}from"./chunk-6YGTRKDT.js";import{e as L}from"./chunk-UR6MHSHU.js";var t=L(J(),1);var e=L(P(),1);function X(n,i,y,m){return{id:n,label:`${i} (${n}) \xB7 ${y} tests`,isActive:n===m}}function W({resolver:n,projectId:i,currentFolderId:y,env:m,onSelect:x,onCancel:w}){let[I,M]=(0,t.useState)([]),[$,d]=(0,t.useState)(!0),[O,g]=(0,t.useState)(!1),[U,N]=(0,t.useState)(null),[p,b]=(0,t.useState)("list"),[S,v]=(0,t.useState)(""),[E,f]=(0,t.useState)(null),h=(0,t.useRef)(!1);(0,t.useEffect)(()=>{if(!n){N("Login first to browse folders"),d(!1);return}let o=new AbortController;return d(!0),g(!0),(async()=>{try{let r=n.cached??await n.resolve();if(!r){N("Login first to browse folders"),d(!1),g(!1);return}let a=k(m),T=new B(a.tmsBaseUrl,r.username,r.access_key),F=(async function*(){if(o.signal.aborted)return;let s=await T.listFolders(i);yield{page:1,folders:s,totalLoaded:s.length,done:!0}})();for await(let s of F){if(d(!1),s.totalLoaded===0){h.current=!0,b("naming"),g(!1);return}M(s.folders.map(C=>X(C.id,C.name,C.test_cases_count,y))),s.done&&g(!1)}}catch(r){if(r?.name==="AbortError")return;N(r instanceof Error?r.message:String(r)),d(!1),g(!1)}})(),()=>o.abort()},[n,i,y,m]);let D=(0,t.useCallback)(o=>{let r=o.trim();if(!r){f("Name cannot be empty");return}if(!i){f("No project selected \u2014 pick a project first");return}f(null),b("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let a=n.cached??await n.resolve();if(!a)throw new Error("Not authenticated");let T=k(m),s=await new B(T.tmsBaseUrl,a.username,a.access_key).createFolder(i,r);x(s.id,s.name)}catch(a){f(a instanceof Error?a.message:String(a)),b("naming")}})()},[n,i,m,x]),H=(0,t.useCallback)(()=>{v(""),f(null),h.current?w():b("list")},[w]);return p==="naming"||p==="creating"?(0,e.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:c.orange,paddingX:2,paddingY:1,children:[(0,e.jsx)(l,{color:c.orange,bold:!0,children:"Create new folder"}),h.current&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.dim,children:"No folders yet \u2014 let's create one."})}),(0,e.jsxs)(u,{marginTop:1,children:[(0,e.jsx)(l,{color:c.dim,children:"Name: "}),p==="naming"?(0,e.jsx)(A,{value:S,onChange:o=>{v(o),E&&f(null)},onSubmit:D,onCancel:H}):(0,e.jsx)(l,{children:S})]}),E&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.red,children:E})}),p==="creating"&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.dim,children:"Creating..."})}),p==="naming"&&(0,e.jsx)(R,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:h.current?"cancel":"back"})]}):(0,e.jsx)(_,{title:"Folders",items:I,loading:$,loadingMore:O,preserveSelectionById:!0,error:U,itemNoun:"folders",onTab:()=>{h.current=!1,b("naming")},extraHint:"tab to create new",onSelect:o=>{let r=o.label.split(" (")[0];x(o.id,r)},onCancel:w})}export{X as a,W as b};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as ke}from"./chunk-
|
|
2
|
+
import{a as ke}from"./chunk-2RO2BWCZ.js";import{b as he,c as _e,d as Z,e as ee}from"./chunk-OADHU5HL.js";import{d as ye,e as we}from"./chunk-AXTPNZPX.js";import{d as P}from"./chunk-BZAGVBCX.js";import{a as pe}from"./chunk-YC6HYBLN.js";import{a as L}from"./chunk-DNNZ353O.js";import{B as me,C as I}from"./chunk-AJXOJF2X.js";import{b as ge}from"./chunk-ILKSL4PI.js";import{a as ue}from"./chunk-CUM23TLF.js";import{e as de,j as fe}from"./chunk-HLXOYLZV.js";import{d as ae,f as le}from"./chunk-WXHQYYD5.js";function bt(t){let e=process.env.HOME??"";return e&&t.startsWith(e)?`~${t.slice(e.length)}`:t}import{randomBytes as mt}from"crypto";function te(t,e){let n=Math.min(t.length,e.length),o=0,r=0,c=0;for(let s=0;s<n;s++)o+=t[s]*e[s],r+=t[s]*t[s],c+=e[s]*e[s];return r===0||c===0?0:o/(Math.sqrt(r)*Math.sqrt(c))}function ne(t,e,n){return n*t+(1-n)*e}var re=.7;var ze=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar","search_similar_batch","history"],Qe=["source_read","source_grep","source_list"],Ke=[...ze,...Qe],Se=50,Ee=200,se=10,Re=50,be=20,We=200,Xe=50;function U(t,e,n){let o=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(o,n))}function M(t,e){let n=t[e];if(typeof n!="string"||n.length===0)throw new b(`param "${e}" must be a non-empty string`);return n}function D(t,e){let n=t[e];if(n==null)return null;if(typeof n!="string")throw new b(`param "${e}" must be a string when present`);return n}var b=class extends Error{},xe=24,qe=10,Ye=10;function Je(t){let e=t.cursor;if(e==null)return 0;if(typeof e=="string"&&/^\d+$/.test(e))return Number.parseInt(e,10);throw new b(`BAD_CURSOR: cursor ${JSON.stringify(e)} is not a cursor this store minted`)}function Ae(t,e){let n=e.fields;if(!Array.isArray(n)||n.length===0)return t;let o=new Set(n.filter(r=>typeof r=="string"));return t.map(r=>Object.fromEntries(Object.entries(r).filter(([c])=>o.has(c))))}function oe(t,e,n=Se,o=Ee){let r=Je(e),c=U(e.limit,n,o),s=t.slice(r,r+c),d=r+s.length<t.length;return{rows:Ae(s,e),truncated:d,next_cursor:d?String(r+s.length):null}}var Ze=t=>t.cursor!=null||t.fields!=null;function z(t,e,n=Se){let o=oe(t,e,n);return Ze(e)||o.truncated?{rows:o.rows,truncated:o.truncated,next_cursor:o.next_cursor}:o.rows}function ie(t,e){let n=t.getNode(e);return n?{cid:e,label:n.label,content:n.content,trust:t.trust.get(e)??null,freshness:t.stale(e)}:null}function ve(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function Q(t,...e){let n=ve(t);if(n.size===0)return 0;let o=t.trim().toLowerCase(),r=0;for(let c of e){let s=ve(c);if(s.size===0)continue;let d=0;for(let u of n)s.has(u)&&d++;let m=n.size+s.size-d,f=m===0?0:d/m;o&&c.toLowerCase().includes(o)&&(f=Math.max(f,.9)),r=Math.max(r,f)}return r}function et(t,e){let n=M(e,"cid"),o=D(e,"type"),r=D(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new b('param "direction" must be out|in|both');let c=[];(r==="out"||r==="both")&&c.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&c.push(...t.edgesInto(n));let s=c.filter(d=>o==null||d.type===o);return z(s,e)}function tt(t,e){let n=M(e,"source_id"),o=t.heads.get(n)??null,r=[];for(let c of t.nodeLabel.keys()){let s=t.derivesInto(c).filter(m=>m.props.source_id===n).map(m=>({source_cid:m.props.source_cid,anchor:m.props.anchor??null}));if(s.length===0)continue;let d=ie(t,c);d&&r.push({...d,pins:s,pinned_to_head:o!=null&&s.some(m=>m.source_cid===o)})}return z(r,e,Ee)}function nt(t,e){let n=M(e,"label"),o=D(e,"trust"),r=D(e,"freshness"),c=[];for(let{cid:s}of t.byLabel(n)){let d=ie(t,s);d&&(o!=null&&d.trust!==o||r!=null&&d.freshness!==r||c.push(d))}return z(c,e)}function rt(t,e={}){let n=D(e,"label"),o=t.staleList().map(({cid:r,state:c})=>{let s=t.getNode(r);return{cid:r,state:c,label:s?.label??null,title:s?.content.title??null}}).filter(r=>n==null||r.label===n);return z(o,e)}function st(t,e,n){let o=e.extracted,r=D(e,"kind"),c=[];for(let f of[...t.heads.keys()].sort()){let u=t.heads.get(f);if(typeof u!="string")continue;let h=t.mediaOf(u).format;if(r!=null&&h!==r)continue;let _=t.extractedSourceCids.has(u);if(typeof o=="boolean"&&_!==o)continue;let E=0;if(h!=="image"){let y=L(n,t,u);y&&(E=y.toString("utf8").replace(/\n$/,"").split(`
|
|
3
3
|
`).length)}let l=t.extractionCompleteness.get(f);c.push({source_id:f,kind:h,lines:E,head_cid:u,extracted:_,last_extract_at:l?.at??null,extractor_version:l?.extractor_version??null})}let{rows:s,truncated:d,next_cursor:m}=oe(c,e);return{sources:s,truncated:d,next_cursor:m}}function ot(t,e,n){let o=M(e,"ref"),r=t.resolve(o);if(!r)throw new b(`UNKNOWN_REF: ${o} names nothing in the graph`);let c=r.tip,s=new Map;for(let[p,k]of t.superseded)typeof k=="string"&&k!==p&&s.set(k,[...s.get(k)??[],p]);let d=[],m=[c],f=new Set;for(;m.length>0;){let p=m.pop();f.has(p)||(f.add(p),d.push(p),m.push(...s.get(p)??[]))}let{records:u}=de(n),g=new Map,h=new Map;for(let p of u){for(let k of p.nodes)g.has(k.cid)||g.set(k.cid,p.ts);for(let k of p.supersessions)k.kind==="node"&&h.set(k.old,{by_cid:k.new,reason:k.reason})}let _=d.map(p=>({cid:p,minted_at:g.get(p)??null,superseded_by:h.get(p)?.by_cid??null,reason:h.get(p)?.reason??null,change_note:null})),{rows:E,truncated:l,next_cursor:y}=oe(_,e,Ye);return{root_logical_id:t.displayNameOf(c),live_tip:t.superseded.has(c)?null:c,truncated:l,next_cursor:y,chain:E}}function $e(t){let e=t.queries;if(!Array.isArray(e)||e.length<1||e.length>xe)throw new b(`param "queries" must be 1..${xe} entries`);return e.map((n,o)=>{if(typeof n!="object"||n===null)throw new b(`queries[${o}] must be an object`);let r=n;if(typeof r.qid!="string"||r.qid.length===0)throw new b(`queries[${o}].qid must be a non-empty string`);if(typeof r.text!="string"||r.text.length===0)throw new b(`queries[${o}].text must be a non-empty string`);return{qid:r.qid,text:r.text,topK:U(r.top_k,se,qe)}})}function De(t){let e=[];for(let{cid:n,content:o}of t.byLabel("usecase"))t.superseded.has(n)||e.push({cid:n,title:String(o.title??""),summary:String(o.summary??""),description:String(o.description??"")});return e}function Me(t,e,n){let o=De(t);return e.map(r=>{let c=[];for(let s of o){let d=n(r,s);d<=0||c.push({cid:s.cid,logical_id:t.displayNameOf(s.cid),title:s.title,score:Math.round(d*1e3)/1e3,trust:t.trust.get(s.cid)??null,superseded:!1})}return c.sort((s,d)=>d.score-s.score||s.cid.localeCompare(d.cid)),{qid:r.qid,truncated:c.length>r.topK,matches:c.slice(0,r.topK)}})}function Ce(t,e){let n=$e(e);return{results:Me(t,n,(o,r)=>Q(o.text,r.title,r.summary,r.description)),scorer:"lexical_fallback"}}function it(t,e){let n=M(e,"text"),o=D(e,"label")??"usecase",r=U(e.k,se,Re),c=[];for(let{cid:s,content:d}of t.byLabel(o)){let m=String(d.title??""),f=String(d.summary??""),u=Q(n,m,f);u<=0||c.push({cid:s,title:m,summary:f,score:Math.round(u*1e3)/1e3,trust:t.trust.get(s)??null,freshness:t.stale(s)})}return c.sort((s,d)=>d.score-s.score||s.cid.localeCompare(d.cid)),c.slice(0,r)}function Te(t,e,n){let o=t.heads.get(n);if(typeof o!="string"){let c=[...t.heads.keys()].sort().join(", ");throw new b(`unknown source_id "${n}" \u2014 known: ${c||"(none)"}`)}if(t.mediaOf(o).format==="image")throw new b(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=L(e,t,o);if(r==null)throw new b(`source "${n}" blob is missing from the store`);return{head:o,lines:r.toString("utf8").replace(/\n$/,"").split(`
|
|
4
4
|
`)}}function ct(t,e,n){return t.slice(e-1,n).map((o,r)=>`${String(e+r).padStart(4,"0")}| ${o}`).join(`
|
|
5
5
|
`)}function at(t,e,n){let o=M(e,"source_id"),r=D(e,"anchor"),c=e.line_range;if(r!=null&&c!=null)throw new b("give anchor OR line_range, not both");let{head:s,lines:d}=Te(t,n,o),m=d.length,f,u;if(r!=null){let g=/^L(\d+)-L(\d+)$/.exec(r);if(!g)throw new b(`anchor "${r}" is not L<a>-L<b>`);let h=Number(g[1]),_=Number(g[2]);if(h<1||_<h||_>m)throw new b(`anchor "${r}" does not resolve (source has ${m} lines)`);f=Math.max(1,h-be),u=Math.min(m,_+be)}else if(c!=null){if(!Array.isArray(c)||c.length!==2||!c.every(_=>Number.isInteger(_)))throw new b('param "line_range" must be [from_line, to_line]');let[g,h]=c;if(g<1||h<g)throw new b('param "line_range" must be 1-based with from \u2264 to');if(g>m)throw new b(`line_range starts past the end (source has ${m} lines)`);f=g,u=Math.min(h,m)}else f=1,u=m;return u=Math.min(u,f+We-1),{window:ct(d,f,u),from_line:f,to_line:u,source_cid:s,total_lines:m}}function lt(t,e,n){let o=M(e,"pattern"),r=D(e,"source_id"),c;try{c=new RegExp(o,"u")}catch(f){throw new b(`invalid pattern: ${f instanceof Error?f.message:String(f)}`)}let s=r!=null?[r]:[...t.heads.keys()].sort(),d=[],m=!1;e:for(let f of s){if(r==null){let g=t.heads.get(f);if(typeof g!="string"||t.mediaOf(g).format==="image")continue}let{lines:u}=Te(t,n,f);for(let g=0;g<u.length;g++)if(c.test(u[g])){if(d.length>=Xe){m=!0;break e}d.push({source_id:f,line:g+1,text:u[g]})}}return{matches:d,truncated:m}}function ut(t,e,n,o){try{switch(e){case"get_node":{let r=ie(t,M(n,"cid"));return r==null?{ok:!0,result:null}:{ok:!0,result:Ae([r],n)[0]}}case"get_edges":return{ok:!0,result:et(t,n)};case"find_by_provenance":return{ok:!0,result:tt(t,n)};case"match_by_type":return{ok:!0,result:nt(t,n)};case"stale_nodes":return{ok:!0,result:rt(t,n)};case"search_similar":return{ok:!0,result:it(t,n)};case"search_similar_batch":return{ok:!0,result:Ce(t,n)};case"history":{if(o==null)throw new b("history unavailable (no context store)");return{ok:!0,result:ot(t,n,o)}}case"source_list":{if(o==null)throw new b("source roster unavailable (no context store)");return{ok:!0,result:st(t,n,o)}}case"source_read":case"source_grep":{if(o==null)throw new b("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?at:lt)(t,n,o)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${Ke.join(", ")}`}}}catch(r){return r instanceof b?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}}var H="assurance.sim";function dt(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as S}from"./chunk-I7TIGB7K.js";import{a as x,b as P,c as C,d as V,e as j}from"./chunk-
|
|
2
|
+
import{a as S}from"./chunk-I7TIGB7K.js";import{a as x,b as P,c as C,d as V,e as j}from"./chunk-OADHU5HL.js";import{a as R,b as D}from"./chunk-DNNZ353O.js";import{C as y,c as b,r as f,s as k}from"./chunk-AJXOJF2X.js";import{e as w}from"./chunk-DBIBROYW.js";function I(o,t){return{contextDir:o,rootSid:t,locks:w(o,t),probe:S(o,{resolveAlias:i=>P(i),embed:(i,s)=>C(i,s),readVector:(i,s)=>V(o,i,s),writeVector:(i,s,n)=>j(o,i,s,n)})}}var N=new Set(["archive"]);async function Y(o,t,i,s){let n=y(o.contextDir);if(i.v==="defer")return{outcome:"deferred"};if(t.kind==="MODIFY_HELD"){if(!t.heldPayload)return{outcome:"failed",detail:`${t.ref} carries no held payload`};let e=t.heldPayload;if(i.v==="keep_current"){if(!e.event_id)return{outcome:"failed",detail:`this held row has no durable event id \u2014 resume the owner to drop it: kane-cli context extract --resume ${e.sid}`};let{commitChatTurn:r}=await import("./chat-committer-GUK6IBCL.js"),u=r({contextDir:o.contextDir,graph:n,ops:[{kind:"resolve_question",questionId:`drop-held:${e.sid}:${e.tempRef}`,resolution:"deferred",eventId:e.event_id}],by:s});return u.errors?{outcome:"failed",detail:u.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"held-dropped"}),{outcome:"committed",detail:"held payload dropped (recorded) \u2014 the owner's resume will not re-present it"})}if(i.v==="approve"){let r=e.content._held??null;if(!r?.source_id||!r.source_cid||!r.anchor||!r.quote)return{outcome:"failed",detail:`this held row carries no committable provenance \u2014 resume the owner to apply it: kane-cli context extract --resume ${e.sid}`};{let a=n.mediaOf(r.source_cid),m=R(o.contextDir,n,r.source_cid),g=a.format==="image"?null:m?D(m):null;if(a.format!=="image"&&g===null)return{outcome:"failed",detail:`the pinned source ${r.source_id} (${r.source_cid.slice(0,19)}) has no citable text to verify this held row against \u2014 resume the owner: kane-cli context extract --resume ${e.sid}`};let _=b(a,{anchor:r.anchor,quote:r.quote},g);if(_.length>0)return{outcome:"failed",detail:`held provenance does not verify against the pinned source (${_.map($=>`${$.code}: ${$.detail}`).join("; ")}) \u2014 resume the owner: kane-cli context extract --resume ${e.sid}`}}let{commitProposal:u}=await import("./committer-JC6BIBNR.js"),{_held:d,...c}=e.content,q={version:1,read_basis:n.latestHash,source:{source_id:r.source_id,source_cid:r.source_cid},use_cases:[{temp_ref:e.tempRef,title:String(c.title??e.tempRef),...c.summary!==void 0?{summary:c.summary}:{},risk:String(c.risk??"med"),cite:{anchor:r.anchor,quote:r.quote},depends_on_hint:[],matches_existing:null}]},l=await x(I(o.contextDir,o.rootSid??`review-${process.pid}`),{verb:"maintain",ucTargets:[],newBuCandidates:[{tempRef:e.tempRef,title:String(c.title??e.tempRef),probeText:`${String(c.title??"")} ${String(c.summary??"")}`.trim()}],sourcePins:[{source_id:r.source_id,source_cid:r.source_cid}],readBasis:n.latestHash,...e.event_id?{eventIds:[e.event_id]}:{}},a=>{let m=u({contextDir:o.contextDir,graph:a.graph,proposal:q,proposalId:null,verdicts:new Map([[e.tempRef,{resolution:"skipped"}]]),by:s,autoName:!0,allowStaleBasis:!0,eventIds:e.event_id?[e.event_id]:a.eventIds("maintain",1),sid:a.sid,probeHits:a.probeHits});return m.errors!==null?{errors:m.errors}:{result:m,record:m.record}}),h=l.ok&&"result"in l?l.result:{record:null,errors:l.ok?null:l.kind==="validation"?l.errors:[{code:l.kind==="contended"?l.err.code:"UNSETTLED",detail:l.kind==="contended"?`held by ${l.err.holder?.owner_sid??"another session"}`:"concurrent activity kept moving the store"}]};return h.errors?{outcome:"failed",detail:h.errors.map(a=>`${a.code}: ${a.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"held-applied"}),{outcome:"committed",detail:`held payload committed (derived) by ${s.id}`})}return{outcome:"failed",detail:`verdict ${i.v} does not apply to a MODIFY_HELD card`}}let v=n.resolve(t.ref);if(!v)return{outcome:"failed",detail:`${t.ref} names nothing in the graph`};let p=n.tipOf(v.cid);if(i.v==="archive"){if(!i.because||!i.because.trim())return{outcome:"failed",detail:"archive requires --because (a reason the record keeps)"};let e=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"rejected",reason:i.because}]]),by:s});return e.errors?{outcome:"failed",detail:e.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"archived",reason:i.because}),{outcome:"retired"})}if(i.v==="approve"){let e=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"approved"}]]),by:s});return e.errors?{outcome:"failed",detail:e.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"approved"}),{outcome:"applied"})}if(i.v==="merge"||i.v==="keep_both"){if(t.kind!=="PAIR"||!t.pair)return{outcome:"failed",detail:`${t.ref} is not a PAIR card`};let e=n.resolve(t.pair.candidate_cid);if(!e)return{outcome:"failed",detail:`pair candidate ${t.pair.candidate_ref} names nothing`};let r=n.tipOf(e.cid);if(i.v==="merge"){let d=k({contextDir:o.contextDir,graph:n,survivor:r,merged:p,reason:`pair merge: duplicate of ${t.pair.candidate_ref} (score ${t.pair.score})`,by:s});return d.errors?{outcome:"failed",detail:d.errors.map(c=>`${c.code}: ${c.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"pair-merged",reason:t.pair.candidate_ref}),{outcome:"committed",detail:`merged into ${t.pair.candidate_ref} \u2014 survivor stays derived`})}let u=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"approved"}],[r,{resolution:"approved"}]]),by:s});return u.errors?{outcome:"failed",detail:u.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"pair-kept-both",reason:t.pair.candidate_ref}),{outcome:"applied",detail:"both promoted as distinct"})}return{outcome:"failed",detail:`verdict ${i.v} does not apply to a ${t.kind} card`}}export{I as a,N as b,Y as c};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as g}from"./chunk-
|
|
2
|
+
import{b as g}from"./chunk-N2N5T5JN.js";import{readFileSync as o,writeFileSync as h,mkdirSync as u,readdirSync as a,unlinkSync as s,existsSync as l,chmodSync as f}from"fs";import{join as n,dirname as P}from"path";var d=class{baseDir;profilesDir;configFile;constructor(t=g){this.baseDir=t,this.profilesDir=n(t,"profiles"),this.configFile=n(t,"config.json")}readConfig(){try{return JSON.parse(o(this.configFile,"utf-8"))}catch{return{}}}writeConfig(t){u(this.baseDir,{recursive:!0,mode:448}),h(this.configFile,JSON.stringify(t,null,2)+`
|
|
3
3
|
`),f(this.configFile,384)}getActiveProfile(){return this.readConfig().active_profile??null}setActiveProfile(t){let i=this.readConfig();i.active_profile=t,this.writeConfig(i)}getDefaultEnv(){return this.readConfig().default_env??"prod"}setDefaultEnv(t){let i=this.readConfig();i.default_env=t,this.writeConfig(i)}credentialsPath(t,i){return n(this.profilesDir,t,i,"credentials")}clientPath(t,i){return n(this.profilesDir,t,i,"client.json")}basicAuthPath(t,i){return n(this.profilesDir,t,i,"basic-auth")}profileConfigPath(t,i){return n(this.profilesDir,t,i,"profile-config.json")}saveProfileConfig(t,i,r){let e=this.loadProfileConfig(t,i)??{};this.writeSecure(this.profileConfigPath(t,i),{...e,...r})}loadProfileConfig(t,i){try{return JSON.parse(o(this.profileConfigPath(t,i),"utf-8"))}catch{return null}}writeSecure(t,i){try{u(P(t),{recursive:!0,mode:448}),h(t,JSON.stringify(i,null,2)+`
|
|
4
4
|
`),f(t,384)}catch(r){let e=r instanceof Error?r.message:String(r);process.stderr.write(`[auth] Failed to save credentials: ${e}
|
|
5
5
|
`)}}saveCredentials(t,i,r){this.writeSecure(this.credentialsPath(t,i),r)}loadCredentials(t,i){try{return JSON.parse(o(this.credentialsPath(t,i),"utf-8"))}catch{return null}}saveClient(t,i,r){this.writeSecure(this.clientPath(t,i),r)}loadClient(t,i){try{return JSON.parse(o(this.clientPath(t,i),"utf-8"))}catch{return null}}getActiveCredentials(){let t=this.getActiveProfile();if(!t)return{credentials:null,profile:null,env:null};let i=this.getDefaultEnv();return{credentials:this.loadCredentials(t,i),profile:t,env:i}}saveBasicAuth(t,i,r){this.writeSecure(this.basicAuthPath(t,i),r)}loadBasicAuth(t,i){try{return JSON.parse(o(this.basicAuthPath(t,i),"utf-8"))}catch{return null}}deleteBasicAuth(t,i){try{s(this.basicAuthPath(t,i))}catch{}}resolveAuth(){let t=this.getActiveProfile();if(!t)return null;let i=this.getDefaultEnv(),r=this.loadBasicAuth(t,i);return r?{method:"basic",...r,profile:t,env:i}:this.loadCredentials(t,i)?{method:"oauth",profile:t,env:i}:null}listProfiles(){let t=[];try{for(let i of a(this.profilesDir)){let r=n(this.profilesDir,i);try{for(let e of a(r)){let c=n(r,e),v=l(n(c,"credentials")),p=l(n(c,"client.json")),y=l(n(c,"basic-auth"));(v||p||y)&&t.push({profile:i,env:e})}}catch{}}}catch{}return t}deleteProfile(t,i){try{s(this.credentialsPath(t,i))}catch{}if(this.getActiveProfile()===t){let r=this.readConfig();delete r.active_profile,this.writeConfig(r)}}deleteProfileFull(t,i){if(i){try{s(this.credentialsPath(t,i))}catch{}try{s(this.clientPath(t,i))}catch{}try{s(this.basicAuthPath(t,i))}catch{}try{s(this.profileConfigPath(t,i))}catch{}}else try{let r=n(this.profilesDir,t);for(let e of a(r)){try{s(n(r,e,"credentials"))}catch{}try{s(n(r,e,"client.json"))}catch{}try{s(n(r,e,"basic-auth"))}catch{}try{s(n(r,e,"profile-config.json"))}catch{}}}catch{}}};export{d as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as f}from"./chunk-
|
|
2
|
+
import{a as f}from"./chunk-GJ6RJVXH.js";import{x as t}from"./chunk-N2N5T5JN.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a,b as n}from"./chunk-C44QQJR4.js";import{a as R}from"./chunk-6YGTRKDT.js";import{e as c}from"./chunk-UR6MHSHU.js";var p=c(R(),1);var e=c(x(),1);function v(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"atomic_replace",label:"Replacing local output",status:"pending"},{name:"commit_lock",label:"Committing to TMS",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function U(s,o,d,i){return s.map(l=>l.name===o?{...l,status:d,detail:i}:l)}function D(s){let o=s/1e3;if(o<60)return`${o.toFixed(1)}s`;let d=Math.floor(o/60),i=Math.round(o%60);return`${d}m ${i}s`}function w(s){let[o,d]=(0,p.useState)(0),i=p.default.useRef(Date.now());return(0,p.useEffect)(()=>{if(!s)return;i.current=Date.now();let l=setInterval(()=>{d(Date.now()-i.current)},100);return()=>clearInterval(l)},[s]),o}function h({steps:s,status:o,testUrl:d,error:i}){let l=w(o==="uploading");return o==="uploading"?(0,e.jsxs)(a,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(n,{color:t.orange,children:"\u2601 "}),(0,e.jsx)(n,{color:t.orange,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dim,children:[" ",D(l)]})]}),(0,e.jsx)(a,{flexDirection:"column",marginTop:1,children:s.filter(r=>r.status!=="skipped"||r.detail).map((r,S,T)=>{let b=S===T.length-1?"\u2514\u2500":"\u251C\u2500",u=r.status==="done",m=r.status==="running",g=r.status==="failed",B=r.status==="skipped";return(0,e.jsxs)(a,{children:[(0,e.jsxs)(n,{color:t.dim,children:[" ",b," "]}),(0,e.jsx)(a,{width:3,children:m?(0,e.jsx)(f,{}):u?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):g?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):B?(0,e.jsx)(n,{color:t.muted,children:"\u2013"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:u?t.dim:m?void 0:g?t.red:t.muted,children:r.label}),r.detail&&(0,e.jsxs)(n,{color:t.dim,children:[" ",r.detail]})]},r.name)})}),(0,e.jsx)(a,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):o==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(a,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),i&&(0,e.jsxs)(a,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dim,children:" "}),(0,e.jsx)(n,{color:t.dim,children:i})]})]})}export{v as a,U as b,h as c};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as Ke}from"./chunk-ZKSN2SJ7.js";import{a as ze,b as ue}from"./chunk-
|
|
2
|
+
import{a as Ke}from"./chunk-ZKSN2SJ7.js";import{a as ze,b as ue}from"./chunk-LWZ7EIXX.js";import{a as Ue,b as We}from"./chunk-JZ26R6UL.js";import{a as Z,b as Le,e as le,f as de,g as Be,h as He}from"./chunk-6YVVTYVO.js";import{a as Ne,c as je,d as Fe,e as me,f as Ge}from"./chunk-GAO6ZMCT.js";import{a as Ae,b as Ie,c as Oe}from"./chunk-OADHU5HL.js";import{a as Re,b as Ce,c as Te}from"./chunk-BB2W35TW.js";import{a as qe}from"./chunk-L2TV4G56.js";import{c as Pe}from"./chunk-WNHLKDOT.js";import{a as $e,e as Ee}from"./chunk-F43KOMVB.js";import{a as Me}from"./chunk-IMR64OCZ.js";import{c as Ve}from"./chunk-UASEGQ7B.js";import{b as ye,c as we,d as ve,e as ae,h as oe,i as ce}from"./chunk-GDB2V6QA.js";import{b as ne}from"./chunk-VZ7KXRXB.js";import{a as be,b as re}from"./chunk-IDX3TOPY.js";import{C as U}from"./chunk-AJXOJF2X.js";import{g as De}from"./chunk-HLXOYLZV.js";import{a as ke,e as xe,f as Se}from"./chunk-DBIBROYW.js";import{d as z,e as X}from"./chunk-WXHQYYD5.js";import{a as _e}from"./chunk-5EOX4MEY.js";import{mkdirSync as St,appendFileSync as Dt,rmdirSync as dt}from"fs";import{randomBytes as $t}from"crypto";import{dirname as mt,join as he}from"path";function Qe(t,e){let n=[];for(let i of e??[]){let g=t.resolve(i.ref)?.tip??null;g!==i.cid&&n.push({ref:i.ref,pinned:i.cid,now:g})}return n}import{existsSync as ge,readFileSync as pe,readdirSync as pt}from"fs";import{join as te}from"path";var Ye=`
|
|
3
3
|
version: 1
|
|
4
4
|
techniques:
|
|
5
5
|
- id: eqp
|
|
@@ -347,9 +347,9 @@ pitfalls:
|
|
|
347
347
|
|
|
348
348
|
`),e.initialMessage].filter(Boolean).join(`
|
|
349
349
|
|
|
350
|
-
`)};if(!r)return e.out(`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),e.emit?.({type:"error",message:`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let w=t.resume?void 0:t.phase,I=!1;if(w!==void 0){let{checkPhaseEntry:s,phaseEntryCmd:d,phaseLadderFor:l}=await import("./phase-seed-
|
|
351
|
-
`)}catch{}v?.wireTrace(s,d,l)};{let s=e.out;if(s[ut]!==!0){let d=l=>{f("transcript",{line:l}),s(l)};d[ut]=!0,e.out=d}}if(t.resume&&i){g||(c.resume={agent_state:i.state.agent_state}),e.out(`resuming design session ${t.resume}`),i.state.assumed.length>0&&e.out(`note: ${i.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${t.resume} lists them`);try{let{readRecords:s}=await import("./records-
|
|
350
|
+
`)};if(!r)return e.out(`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),e.emit?.({type:"error",message:`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let w=t.resume?void 0:t.phase,I=!1;if(w!==void 0){let{checkPhaseEntry:s,phaseEntryCmd:d,phaseLadderFor:l}=await import("./phase-seed-ATH337WF.js");I=l(e.contextDir,n,r).length>0;let o=s(e.contextDir,n,r,w);if(!o.ok&&o.code==="UNKNOWN_PHASE")return e.out(`error: ${o.message}`),e.emit?.({type:"error",code:"UNKNOWN_PHASE",message:o.message}),i?.release(),2;if(!o.ok&&o.code==="PHASE_ORDER"){let m=t.askPhaseEntry?await t.askPhaseEntry({message:o.message,earliest:o.earliest}):"cancel";if(m==="earliest")e.out(`starting at ${o.earliest} instead (${o.missing.join(", ")} not committed yet)`),w=o.earliest;else if(m==="proceed")e.out(`note: entering at ${w} with ${o.missing.join(", ")} uncommitted \u2014 proceeding on your say-so`),e.emit?.({type:"phase_entry_override",phase:w,missing:o.missing});else{let _=(t.mode??"interactive")==="agent",C=d(r,o.earliest,_);return e.out(`error: ${o.message}`),e.emit?.({type:"error",code:"PHASE_ORDER",message:o.message,next:[{cmd:C,why:`${o.earliest} is the earliest uncommitted phase for ${r}`,title:`Start at ${o.earliest}`}]}),i?.release(),2}}}let k=!!(t.force||i?.state.force),T=!!(t.resume&&i),x=We(n,r,k||T||I);if(!x.ok){let s=(t.mode??"interactive")==="interactive";if(x.wall&&s&&t.askDesignEntry){let{captureForceScope:d}=await import("./design-committer-IIHKNEYF.js"),l=d(n,r).length,o=await t.askDesignEntry({wall:x.wall.kind,message:x.message,display:x.wall.display,impactPairs:l});if(o.pick==="redesign"||o.pick==="proceed"){if(!o.because.trim())return e.out("a redesign needs a reason (--because) \u2014 nothing executed"),i?.release(),2;e.out(o.pick==="redesign"?`redesigning ${x.wall.display} (${l} pair(s) superseded) \u2014 because: ${o.because.trim()}`:`proceeding against the stale design (noted) \u2014 because: ${o.because.trim()}`),t={...t,force:!0,because:t.because??o.because.trim()},k=!0}else return o.pick==="view"?(e.out(`view the existing design: kane-cli context view ${x.wall.display}`),i?.release(),0):o.pick==="refresh"?(e.out(`refresh it first: kane-cli maintain evolve ${x.wall.display}`),i?.release(),0):(e.out("nothing executed \u2014 list use-cases: kane-cli context list"),i?.release(),0)}else{e.out(`design: ${x.message}`);let d=x.wall&&t.mode==="agent"?[{cmd:`kane-cli context view ${x.wall.display}`,why:"view the existing design",title:"View the design"},...x.wall.kind==="designed-stale"?[{cmd:`kane-cli maintain evolve ${x.wall.display}`,why:"the use-case moved since the design \u2014 evolve refreshes it",title:"Evolve the design"}]:[],{cmd:`kane-cli design tests --use-case ${x.wall.display} --force --mode agent`,why:"redesign \u2014 supersedes the live scenario+test pairs",title:"Redesign"}]:void 0;return e.emit?.({type:"gate_refused",message:x.message,...d?{next:d}:{}}),i?.release(),x.code}}if(e.preflightTurn){let s=await e.preflightTurn();if(!s.ok)return e.out(s.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:s.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),i?.release(),2}let b={contextDir:e.contextDir,resolveAlias:s=>Ie(s,{env:process.env,auth:e.auth}),embed:(s,d)=>Oe(s,d,{env:process.env,auth:e.auth})};e.chat?.setWorking?.("assembling context\u2026");let h=await at(e.contextDir,r,{max:t.max,strength:t.strength,embedSearch:b});if(t.priorDesign!==void 0&&(h.prior_design=t.priorDesign),t.changeDelta!==void 0&&(h.change_delta=t.changeDelta),t.because&&(h.because=t.because),w!==void 0){let{buildPhaseSeed:s}=await import("./phase-seed-ATH337WF.js"),d=s(e.contextDir,n,r,w);h.prior_design===void 0&&d.priorDesign!==void 0&&(h.prior_design=d.priorDesign),h.entry_phase=w,d.phaseLadder.length>0&&(h.phase_ladder=d.phaseLadder)}let M=e.now?.()??new Date,j=`${M.toISOString().replace(/[-:]/g,"").slice(0,15)}-${$t(2).toString("hex")}`,S=t.mode??"interactive",P=S==="interactive"&&!!e.chat&&!e.nested,c=g?{...g.spawnConfig,mode:S}:lt(h,{session_id:t.resume??`design-${j}`,mode:S,ucCid:h.usecase.cid,readBasis:n.latestHash,topology:Me("design")}),N={current:null};if(c.resume&&"schema"in c.resume){let s=c.resume.binding?.template_version;typeof s=="string"&&(N.current=s)}t.plan?c.chat=!1:c.chat=!0;let v=e.telemetry?.enabled?e.telemetry:void 0,u=v?_e(v.ids.context_instance_id??null,"design",v.ids.session_id):he(e.contextDir,"logs",`design-${j}.log`);St(mt(u),{recursive:!0}),P||e.out(`trace: ${Z(u)}`),e.emit?.({type:"run_start",mode:S,trace:u,use_case:r,...v?{session:v.ids.session_id}:{}});let f=(s,d,l)=>{try{Dt(u,JSON.stringify({ts:new Date().toISOString(),level:s==="error"?"error":"info",run_id:v?.ids.operation_id,...v?{user_session_id:v.ids.session_id}:{},kind:s,session_id:l,data:d})+`
|
|
351
|
+
`)}catch{}v?.wireTrace(s,d,l)};{let s=e.out;if(s[ut]!==!0){let d=l=>{f("transcript",{line:l}),s(l)};d[ut]=!0,e.out=d}}if(t.resume&&i){g||(c.resume={agent_state:i.state.agent_state}),e.out(`resuming design session ${t.resume}`),i.state.assumed.length>0&&e.out(`note: ${i.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${t.resume} lists them`);try{let{readRecords:s}=await import("./records-XWF6KDQH.js"),d=s(e.contextDir).records.filter(l=>l.sid===t.resume).map(l=>l.design_phase).filter(l=>l!=null&&typeof l.phase=="string");if(d.length>0){let l=d.map(m=>`${m.phase}${m.completeness==="partial"?" (partial)":""}`).join(" \u2192 "),o=`[kane] durable record for this session (${t.resume}) on ${r}: design phases already COMMITTED \u2014 ${l}. Those finalizes landed; do not re-send them. Continue from the next uncommitted phase, or finish if the design is complete.`;e={...e,initialMessage:[e.initialMessage,o].filter(Boolean).join(`
|
|
352
352
|
|
|
353
353
|
`)}}}catch{}t.message&&(e={...e,initialMessage:[e.initialMessage,t.message].filter(Boolean).join(`
|
|
354
354
|
|
|
355
|
-
`)})}let y=null,$={current:n},V={detach:null},a=()=>{let s=V.detach;V.detach=null,s&&s()},p=(s,d)=>{let l=i;if(!l)return{};let o=s.ask,m=Be({contextDir:s.contextDir,cwd:mt(s.contextDir),handle:l,note:_=>s.chat?s.chat.note(_):s.out(_),graphSlot:d,...s.now?{now:s.now}:{}});if(s.chat?.attachIngest){let _=s.chat;V.detach=_.attachIngest(async C=>{try{l.save({ingest_registry:de(l.state.ingest_registry,C,s.now?.()??new Date)});let L=await m({id:`attach-${l.state.sid}-${(l.state.ingest_registry??[]).length}`,ref:C,purpose:null});return L.ok?(_.deferBatch({source_id:L.result.source_id,cid:L.result.cid}),{ok:!0}):{ok:!1,error:L.error.message}}catch(L){return{ok:!1,error:L instanceof Error?L.message:String(L)}}})}return{ask:async _=>{let C=await o(_);if(Array.isArray(C)){let L=C.filter(B=>{if(B.free_text==null||B.free_text.trim()==="")return!1;let ie=_.find(gt=>gt.id===B.id);return B.selected_index!=null&&ie?.options[B.selected_index]?.input===!0}).map(B=>B.free_text.trim());if(L.length>0){let B=l.state.ingest_registry;for(let ie of L)B=de(B,ie,s.now?.()??new Date);l.save({ingest_registry:B})}}return C},ingest:m}};e.nested||e.chat?.attachOnCommitted?.(s=>{$.current=s});let E="";if(e.chat&&!t.plan&&!e.nested){let s=Pe({contextDir:e.contextDir,graph:U(e.contextDir),sessionStamp:c.session_id,by:e.by??{kind:"human",id:"owner"}});s.errors===null||s.errors[0]?.code==="CONV_SOURCE_EXISTS"?(E=s.sourceId,e.chat.attachConversationSource?.(E),$.current=U(e.contextDir)):e.out(`warning: notes you add in chat can't be saved to the context this session (${s.errors[0]?.detail})`)}let R=U(e.contextDir),K;if(!t.plan){let s=Ce(R,r);if(T&&s!==null&&s.live){let d=R.resolve(r);K={uc_root:Re(R,d.cid),next_gen:s.gen,expected_prev_gen:s.gen}}else{let d=Te(R,r,{...k?{force:!0}:{},because:t.because??(k?"forced redesign (--force)":void 0)});if("error"in d)return e.out(`design: ${d.error.detail}`),e.emit?.({type:"gate_refused",message:d.error.detail,code:d.error.code}),i?.release(),2;K=d}}let A=xe(e.contextDir,c.session_id),F=null,O=()=>{try{F?.release()}catch{}};if(!t.plan)try{F=A.acquire([Se(R,r).key],{hold:"session",verb:"design"})}catch(s){if(s instanceof ke&&s.code==="UC_HELD"){let d=s.holder,l=`design: ${r} is being designed by another session${d?.alive===!1?` \u2014 that session looks stopped; resume it with kane-cli design tests --resume ${d?.owner_sid??"<session>"}`:""} \u2014 pick another use-case (kane-cli design tests) or wait for it to finish`;return e.out(l),e.emit?.({type:"error",code:"UC_HELD",message:l}),i?.release(),2}throw s}let G={contextDir:e.contextDir,rootSid:c.session_id,locks:A,probe:{batchSimilar:async()=>({hits:[],degraded:!1,probeBasis:null}),recheckLocal:()=>({hits:[],uncachedNewNodes:[]})}},W=!t.plan&&S!=="ci",Q=()=>Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(s=>s.type==="DERIVES"&&typeof s.props.source_id=="string").map(s=>[String(s.props.source_id),n.heads.get(String(s.props.source_id))??null])),Y=!1;W&&!i&&(Y=!0,i=re(e.contextDir,{sid:c.session_id,mode:"agent",created_at:M.toISOString(),expires_at:new Date(M.getTime()+1440*60*1e3).toISOString(),agent_state:{schema:2,items:[],provider_state:""},pending:{questions:[],proposals:[]},read_basis:Q(),assumed:[],corpus_cursor:{remaining:[]},conv_source:E,target_pins:n.resolve(r)?[{ref:r,cid:n.resolve(r).tip}]:[],verb:"design",use_case:r,...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},...k?{force:!0}:{},...v?{user_session_id:v.ids.session_id}:{}}));let H;if(W&&i){let{resume:s,...d}=c;Ee(e.contextDir,c.session_id,{schema:$e,kind:"base",sid:c.session_id,verb:"design",mode:S,created_at:M.toISOString(),run_config:d,conv_source:E||i.state.conv_source||"",...r?{use_case:r}:{},...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},store_watermark:De(e.contextDir)}),c.checkpoints=!0,t.resume&&f("resume_kind",{kind:g?g.view.pointer===null?"bare-base":g.view.pointer.at==="final"?"pause":"crash":"v1-shim"},c.session_id);let l=g?0:i.state.checkpoint?.seq??0,o=i;H=Fe({contextDir:e.contextDir,handle:o,seqBase:()=>l,peekHeldReceipts:()=>e.chat?.peekHeldReceipts?.()??[],readBasis:()=>Q(),corpusCursor:()=>({remaining:[]}),onSoftCap:_=>e.out(_),onStat:_=>f("ckpt_stat",_,c.session_id),...e.now?{now:e.now}:{}});let m=H;H={...m,persist:_=>{let C=_.binding?.template_version;return typeof C=="string"&&C&&(N.current=C),m.persist(_)}}}let q=()=>{if(!i)return;let s=i.state.checkpoint;if(s){let d=S!=="interactive"?` --mode ${S}`:"";e.out(`session ${i.state.sid} kept its last checkpoint (seq ${s.seq}, ${s.ts}) \u2014 resume with: kane-cli design tests --resume ${i.state.sid}${d}`),i.release()}else if(Y){try{i.complete()}catch{i.release()}try{dt(he(e.contextDir,"sessions"))}catch{}}else i.release();i=null},J=t.plan?Et(e.out,e.emit,f,u):ct({templateVersion:()=>N.current,contextDir:e.contextDir,ucRef:r,by:{kind:"ai",id:"design-agent"},force:k,engine:"design@1",note:s=>e.chat?e.chat.note(s):e.out(s),commitLine:s=>e.chat?e.chat.ledger({kind:"commit",ok:!0,line:s}):e.out(s),steer:e.chat?s=>e.chat.submit(s):void 0,event:e.emit,resuming:T,...i?.state.force_scope?.length?{forceScope:i.state.force_scope}:{},onForceScope:s=>{y=s},...t.because?{because:t.because}:{},aliases:e.chat?s=>e.chat.registerAliases?.(s):void 0,onCommitted:s=>{$.current=s},protocol:G,...K?{generationTicket:K}:{},...T?{generationStamped:!0}:{}});e.chat||(f("design_budget",{max_pairs:h.budget.max_pairs??null,strength:h.budget.strength_override??null}),e.out(`designing: ${h.usecase.logical_id??r}`)),e.chat?.setWorking?.(`designing ${h.usecase.logical_id??r}\u2026`);let D;try{D=await le(c,{...e,graphSlot:$,...p(e,$),...H?{checkpoint:H}:{}},new Map,n,f,J)}catch(s){throw f("error",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack:void 0},c.session_id),q(),s}finally{e.chat?.setWorking?.(null),a()}if(D.errorCode==="binding_mismatch"&&g){let s=await e.ask([{id:"binding-mismatch",text:"this session's saved conversation is no longer accepted by the service \u2014 start the conversation fresh (committed work is kept), or stop and keep the session?",risk:"high",rationale:"the service refused the saved conversation on the first turn after resume",options:[{label:"start fresh",detail:"continue with a fresh conversation \u2014 earlier answers may be re-asked"},{label:"stop",detail:"stop here; the session stays resumable"}],recommended_index:1,allow_free_text:!1}]);if((Array.isArray(s)?s.find(o=>o.id==="binding-mismatch"):void 0)?.selected_index!==0){let o=`resume abandoned: binding mismatch on session ${c.session_id} \u2014 the session is preserved`;return e.out(o),e.emit?.({type:"error",message:o,code:"BINDING_MISMATCH"}),i?.release(),2}f("binding_migrate",{sid:c.session_id},c.session_id);let l=c.resume&&"schema"in c.resume?{...c.resume,binding:{}}:void 0;try{D=await le({...c,...l?{resume:l}:{}},{...e,graphSlot:$,...p(e,$),...H?{checkpoint:H}:{}},new Map,n,f,J)}catch(o){throw f("error",{message:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0},c.session_id),q(),o}finally{e.chat?.setWorking?.(null),a()}}if(D.highRisk)return e.out(`error: ${D.highRisk.length} high-risk decision${D.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",message:`error: high-risk question(s) in ci mode (fail-closed): ${D.highRisk.map(s=>s.id).join(", ")}`,code:"HIGH_RISK_CI"}),q(),O(),1;if(D.paused){let s=i;s||(s=re(e.contextDir,{sid:c.session_id,mode:"agent",created_at:M.toISOString(),expires_at:new Date(M.getTime()+1440*60*1e3).toISOString(),agent_state:D.paused.agent_state,pending:{questions:[],proposals:[]},read_basis:Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(o=>o.type==="DERIVES"&&typeof o.props.source_id=="string").map(o=>[String(o.props.source_id),n.heads.get(String(o.props.source_id))??null])),assumed:[],corpus_cursor:{remaining:[]},conv_source:E,target_pins:n.resolve(r)?[{ref:r,cid:n.resolve(r).tip}]:[],verb:"design",use_case:r,...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},...k?{force:!0}:{},...v?{user_session_id:v.ids.session_id}:{}}));try{k&&!s.state.force&&s.save({force:!0}),v&&s.state.user_session_id!==v.ids.session_id&&s.save({user_session_id:v.ids.session_id}),E&&s.state.conv_source!==E&&s.save({conv_source:E});let o=e.chat?.drainHeldReceipts?.()??[];(o.length>0||(s.state.held_receipts?.length??0)>0)&&s.save({held_receipts:o}),y!==null&&s.save({force_scope:y}),je(s,D.paused)}catch(o){let m=s.state.checkpoint,_=`error: couldn't persist the pause for session ${s.state.sid}`+(m?` \u2014 last durable checkpoint: seq ${m.seq} @ ${m.ts}`:" \u2014 no durable checkpoint exists")+` (${o instanceof Error?o.message:String(o)})`;return e.out(_),e.emit?.({type:"error",message:_,code:"PAUSE_PERSIST_FAILED",sid:s.state.sid}),1}f("session_paused",{sid:s.state.sid},c.session_id);let d=S!=="interactive"?` --mode ${S}`:"",l=`kane-cli design tests --resume ${s.state.sid}${d}`;if(P||e.out(`paused \u2014 resume with: ${l}`),e.emit?.({type:"session_paused",sid:s.state.sid,mode:S,resume:l,expires_at:s.state.expires_at,pending_questions:D.paused.pending.questions}),P){let o=e.chat?.state.credits?.total;e.onSummary?.({state:"paused",reason:"ctrl+c",facts:[`session ${s.state.sid} saved \u2014 designing ${h.usecase.logical_id??r}`,...s.state.expires_at?[`expires: ${s.state.expires_at}`]:[],...o!==void 0?[`credits used: ${o.toFixed(1)}`]:[]],resume:l,resumeMessage:`${l} --message "<your words>"`,tracePath:Z(u)})}return O(),3}if(D.crashed&&i?.state.checkpoint){let s=i.state.checkpoint,d=S!=="interactive"?` --mode ${S}`:"",l=`kane-cli design tests --resume ${i.state.sid}${d}`;if(f("agent_crashed_resumable",{sid:i.state.sid,seq:s.seq},c.session_id),P||e.out(`agent crashed \u2014 session ${i.state.sid} is resumable at checkpoint seq ${s.seq} (at most the in-flight turn lost); resume with: ${l}`),e.emit?.({type:"session_paused",sid:i.state.sid,mode:S,resume:l,expires_at:i.state.expires_at,crashed:!0}),P){let o=e.chat?.state.credits?.total;e.onSummary?.({state:"crashed",facts:[`agent crashed \u2014 session ${i.state.sid} is resumable at checkpoint seq ${s.seq}`,"at most the in-flight turn was lost",...o!==void 0?[`credits used: ${o.toFixed(1)}`]:[]],resume:l,resumeMessage:`${l} --message "<your words>"`,tracePath:Z(u)})}return i.release(),i=null,3}if(D.error)return e.out(`error: design agent failed: ${D.error}`),e.emit?.({type:"error",message:`error: design agent failed: ${D.error}`}),q(),O(),1;if(D.proposal==null&&S!=="interactive")return e.out(`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${u})`),e.emit?.({type:"error",message:`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${u})`}),q(),O(),1;let ee=0;if(D.proposal==null)try{let{readRecords:s}=await import("./records-IOZTZUZV.js"),d=t.resume??c.session_id;ee=s(e.contextDir).records.filter(l=>l.sid===d).reduce((l,o)=>l+o.nodes.filter(m=>m.label!=="source").length,0)}catch{}if(D.proposal==null&&e.out(ee>0?`done \u2014 ${ee} item(s) committed in this session (earlier legs included); nothing new since the resume`:"done \u2014 nothing designed this session (no finalize before the session ended)"),D.assumedDefaults&&e.out(`assumed: ${D.assumedDefaults} default(s) taken while unattended`),i&&e.emit?.({type:"session_complete",sid:t.resume??c.session_id}),v?.event("ASR_SESSION_COMPLETE",{}),i?.complete(),Y)try{dt(he(e.contextDir,"sessions"))}catch{}if(P){let s=e.chat.state.ledger.filter(o=>o.kind==="answer"&&o.receipt.form==="assumed").length??0,d=(D.assumedDefaults??0)+s,l=e.chat.state.credits?.total??D.creditsTotal;e.onSummary?.({state:"complete",facts:[`designed: ${h.usecase.logical_id??r}${D.proposal==null?ee>0?` (${ee} item(s) committed across this session)`:" (nothing committed this session)":""}`,...d>0?[`${d} assumed default(s)`]:[],...l!==void 0?[`credits used: ${l.toFixed(1)}`]:[]],tracePath:Z(u)})}return t.plan||He(e.contextDir),O(),0}export{Es as a};
|
|
355
|
+
`)})}let y=null,$={current:n},V={detach:null},a=()=>{let s=V.detach;V.detach=null,s&&s()},p=(s,d)=>{let l=i;if(!l)return{};let o=s.ask,m=Be({contextDir:s.contextDir,cwd:mt(s.contextDir),handle:l,note:_=>s.chat?s.chat.note(_):s.out(_),graphSlot:d,...s.now?{now:s.now}:{}});if(s.chat?.attachIngest){let _=s.chat;V.detach=_.attachIngest(async C=>{try{l.save({ingest_registry:de(l.state.ingest_registry,C,s.now?.()??new Date)});let L=await m({id:`attach-${l.state.sid}-${(l.state.ingest_registry??[]).length}`,ref:C,purpose:null});return L.ok?(_.deferBatch({source_id:L.result.source_id,cid:L.result.cid}),{ok:!0}):{ok:!1,error:L.error.message}}catch(L){return{ok:!1,error:L instanceof Error?L.message:String(L)}}})}return{ask:async _=>{let C=await o(_);if(Array.isArray(C)){let L=C.filter(B=>{if(B.free_text==null||B.free_text.trim()==="")return!1;let ie=_.find(gt=>gt.id===B.id);return B.selected_index!=null&&ie?.options[B.selected_index]?.input===!0}).map(B=>B.free_text.trim());if(L.length>0){let B=l.state.ingest_registry;for(let ie of L)B=de(B,ie,s.now?.()??new Date);l.save({ingest_registry:B})}}return C},ingest:m}};e.nested||e.chat?.attachOnCommitted?.(s=>{$.current=s});let E="";if(e.chat&&!t.plan&&!e.nested){let s=Pe({contextDir:e.contextDir,graph:U(e.contextDir),sessionStamp:c.session_id,by:e.by??{kind:"human",id:"owner"}});s.errors===null||s.errors[0]?.code==="CONV_SOURCE_EXISTS"?(E=s.sourceId,e.chat.attachConversationSource?.(E),$.current=U(e.contextDir)):e.out(`warning: notes you add in chat can't be saved to the context this session (${s.errors[0]?.detail})`)}let R=U(e.contextDir),K;if(!t.plan){let s=Ce(R,r);if(T&&s!==null&&s.live){let d=R.resolve(r);K={uc_root:Re(R,d.cid),next_gen:s.gen,expected_prev_gen:s.gen}}else{let d=Te(R,r,{...k?{force:!0}:{},because:t.because??(k?"forced redesign (--force)":void 0)});if("error"in d)return e.out(`design: ${d.error.detail}`),e.emit?.({type:"gate_refused",message:d.error.detail,code:d.error.code}),i?.release(),2;K=d}}let A=xe(e.contextDir,c.session_id),F=null,O=()=>{try{F?.release()}catch{}};if(!t.plan)try{F=A.acquire([Se(R,r).key],{hold:"session",verb:"design"})}catch(s){if(s instanceof ke&&s.code==="UC_HELD"){let d=s.holder,l=`design: ${r} is being designed by another session${d?.alive===!1?` \u2014 that session looks stopped; resume it with kane-cli design tests --resume ${d?.owner_sid??"<session>"}`:""} \u2014 pick another use-case (kane-cli design tests) or wait for it to finish`;return e.out(l),e.emit?.({type:"error",code:"UC_HELD",message:l}),i?.release(),2}throw s}let G={contextDir:e.contextDir,rootSid:c.session_id,locks:A,probe:{batchSimilar:async()=>({hits:[],degraded:!1,probeBasis:null}),recheckLocal:()=>({hits:[],uncachedNewNodes:[]})}},W=!t.plan&&S!=="ci",Q=()=>Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(s=>s.type==="DERIVES"&&typeof s.props.source_id=="string").map(s=>[String(s.props.source_id),n.heads.get(String(s.props.source_id))??null])),Y=!1;W&&!i&&(Y=!0,i=re(e.contextDir,{sid:c.session_id,mode:"agent",created_at:M.toISOString(),expires_at:new Date(M.getTime()+1440*60*1e3).toISOString(),agent_state:{schema:2,items:[],provider_state:""},pending:{questions:[],proposals:[]},read_basis:Q(),assumed:[],corpus_cursor:{remaining:[]},conv_source:E,target_pins:n.resolve(r)?[{ref:r,cid:n.resolve(r).tip}]:[],verb:"design",use_case:r,...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},...k?{force:!0}:{},...v?{user_session_id:v.ids.session_id}:{}}));let H;if(W&&i){let{resume:s,...d}=c;Ee(e.contextDir,c.session_id,{schema:$e,kind:"base",sid:c.session_id,verb:"design",mode:S,created_at:M.toISOString(),run_config:d,conv_source:E||i.state.conv_source||"",...r?{use_case:r}:{},...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},store_watermark:De(e.contextDir)}),c.checkpoints=!0,t.resume&&f("resume_kind",{kind:g?g.view.pointer===null?"bare-base":g.view.pointer.at==="final"?"pause":"crash":"v1-shim"},c.session_id);let l=g?0:i.state.checkpoint?.seq??0,o=i;H=Fe({contextDir:e.contextDir,handle:o,seqBase:()=>l,peekHeldReceipts:()=>e.chat?.peekHeldReceipts?.()??[],readBasis:()=>Q(),corpusCursor:()=>({remaining:[]}),onSoftCap:_=>e.out(_),onStat:_=>f("ckpt_stat",_,c.session_id),...e.now?{now:e.now}:{}});let m=H;H={...m,persist:_=>{let C=_.binding?.template_version;return typeof C=="string"&&C&&(N.current=C),m.persist(_)}}}let q=()=>{if(!i)return;let s=i.state.checkpoint;if(s){let d=S!=="interactive"?` --mode ${S}`:"";e.out(`session ${i.state.sid} kept its last checkpoint (seq ${s.seq}, ${s.ts}) \u2014 resume with: kane-cli design tests --resume ${i.state.sid}${d}`),i.release()}else if(Y){try{i.complete()}catch{i.release()}try{dt(he(e.contextDir,"sessions"))}catch{}}else i.release();i=null},J=t.plan?Et(e.out,e.emit,f,u):ct({templateVersion:()=>N.current,contextDir:e.contextDir,ucRef:r,by:{kind:"ai",id:"design-agent"},force:k,engine:"design@1",note:s=>e.chat?e.chat.note(s):e.out(s),commitLine:s=>e.chat?e.chat.ledger({kind:"commit",ok:!0,line:s}):e.out(s),steer:e.chat?s=>e.chat.submit(s):void 0,event:e.emit,resuming:T,...i?.state.force_scope?.length?{forceScope:i.state.force_scope}:{},onForceScope:s=>{y=s},...t.because?{because:t.because}:{},aliases:e.chat?s=>e.chat.registerAliases?.(s):void 0,onCommitted:s=>{$.current=s},protocol:G,...K?{generationTicket:K}:{},...T?{generationStamped:!0}:{}});e.chat||(f("design_budget",{max_pairs:h.budget.max_pairs??null,strength:h.budget.strength_override??null}),e.out(`designing: ${h.usecase.logical_id??r}`)),e.chat?.setWorking?.(`designing ${h.usecase.logical_id??r}\u2026`);let D;try{D=await le(c,{...e,graphSlot:$,...p(e,$),...H?{checkpoint:H}:{}},new Map,n,f,J)}catch(s){throw f("error",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack:void 0},c.session_id),q(),s}finally{e.chat?.setWorking?.(null),a()}if(D.errorCode==="binding_mismatch"&&g){let s=await e.ask([{id:"binding-mismatch",text:"this session's saved conversation is no longer accepted by the service \u2014 start the conversation fresh (committed work is kept), or stop and keep the session?",risk:"high",rationale:"the service refused the saved conversation on the first turn after resume",options:[{label:"start fresh",detail:"continue with a fresh conversation \u2014 earlier answers may be re-asked"},{label:"stop",detail:"stop here; the session stays resumable"}],recommended_index:1,allow_free_text:!1}]);if((Array.isArray(s)?s.find(o=>o.id==="binding-mismatch"):void 0)?.selected_index!==0){let o=`resume abandoned: binding mismatch on session ${c.session_id} \u2014 the session is preserved`;return e.out(o),e.emit?.({type:"error",message:o,code:"BINDING_MISMATCH"}),i?.release(),2}f("binding_migrate",{sid:c.session_id},c.session_id);let l=c.resume&&"schema"in c.resume?{...c.resume,binding:{}}:void 0;try{D=await le({...c,...l?{resume:l}:{}},{...e,graphSlot:$,...p(e,$),...H?{checkpoint:H}:{}},new Map,n,f,J)}catch(o){throw f("error",{message:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0},c.session_id),q(),o}finally{e.chat?.setWorking?.(null),a()}}if(D.highRisk)return e.out(`error: ${D.highRisk.length} high-risk decision${D.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",message:`error: high-risk question(s) in ci mode (fail-closed): ${D.highRisk.map(s=>s.id).join(", ")}`,code:"HIGH_RISK_CI"}),q(),O(),1;if(D.paused){let s=i;s||(s=re(e.contextDir,{sid:c.session_id,mode:"agent",created_at:M.toISOString(),expires_at:new Date(M.getTime()+1440*60*1e3).toISOString(),agent_state:D.paused.agent_state,pending:{questions:[],proposals:[]},read_basis:Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(o=>o.type==="DERIVES"&&typeof o.props.source_id=="string").map(o=>[String(o.props.source_id),n.heads.get(String(o.props.source_id))??null])),assumed:[],corpus_cursor:{remaining:[]},conv_source:E,target_pins:n.resolve(r)?[{ref:r,cid:n.resolve(r).tip}]:[],verb:"design",use_case:r,...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},...k?{force:!0}:{},...v?{user_session_id:v.ids.session_id}:{}}));try{k&&!s.state.force&&s.save({force:!0}),v&&s.state.user_session_id!==v.ids.session_id&&s.save({user_session_id:v.ids.session_id}),E&&s.state.conv_source!==E&&s.save({conv_source:E});let o=e.chat?.drainHeldReceipts?.()??[];(o.length>0||(s.state.held_receipts?.length??0)>0)&&s.save({held_receipts:o}),y!==null&&s.save({force_scope:y}),je(s,D.paused)}catch(o){let m=s.state.checkpoint,_=`error: couldn't persist the pause for session ${s.state.sid}`+(m?` \u2014 last durable checkpoint: seq ${m.seq} @ ${m.ts}`:" \u2014 no durable checkpoint exists")+` (${o instanceof Error?o.message:String(o)})`;return e.out(_),e.emit?.({type:"error",message:_,code:"PAUSE_PERSIST_FAILED",sid:s.state.sid}),1}f("session_paused",{sid:s.state.sid},c.session_id);let d=S!=="interactive"?` --mode ${S}`:"",l=`kane-cli design tests --resume ${s.state.sid}${d}`;if(P||e.out(`paused \u2014 resume with: ${l}`),e.emit?.({type:"session_paused",sid:s.state.sid,mode:S,resume:l,expires_at:s.state.expires_at,pending_questions:D.paused.pending.questions}),P){let o=e.chat?.state.credits?.total;e.onSummary?.({state:"paused",reason:"ctrl+c",facts:[`session ${s.state.sid} saved \u2014 designing ${h.usecase.logical_id??r}`,...s.state.expires_at?[`expires: ${s.state.expires_at}`]:[],...o!==void 0?[`credits used: ${o.toFixed(1)}`]:[]],resume:l,resumeMessage:`${l} --message "<your words>"`,tracePath:Z(u)})}return O(),3}if(D.crashed&&i?.state.checkpoint){let s=i.state.checkpoint,d=S!=="interactive"?` --mode ${S}`:"",l=`kane-cli design tests --resume ${i.state.sid}${d}`;if(f("agent_crashed_resumable",{sid:i.state.sid,seq:s.seq},c.session_id),P||e.out(`agent crashed \u2014 session ${i.state.sid} is resumable at checkpoint seq ${s.seq} (at most the in-flight turn lost); resume with: ${l}`),e.emit?.({type:"session_paused",sid:i.state.sid,mode:S,resume:l,expires_at:i.state.expires_at,crashed:!0}),P){let o=e.chat?.state.credits?.total;e.onSummary?.({state:"crashed",facts:[`agent crashed \u2014 session ${i.state.sid} is resumable at checkpoint seq ${s.seq}`,"at most the in-flight turn was lost",...o!==void 0?[`credits used: ${o.toFixed(1)}`]:[]],resume:l,resumeMessage:`${l} --message "<your words>"`,tracePath:Z(u)})}return i.release(),i=null,3}if(D.error)return e.out(`error: design agent failed: ${D.error}`),e.emit?.({type:"error",message:`error: design agent failed: ${D.error}`}),q(),O(),1;if(D.proposal==null&&S!=="interactive")return e.out(`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${u})`),e.emit?.({type:"error",message:`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${u})`}),q(),O(),1;let ee=0;if(D.proposal==null)try{let{readRecords:s}=await import("./records-XWF6KDQH.js"),d=t.resume??c.session_id;ee=s(e.contextDir).records.filter(l=>l.sid===d).reduce((l,o)=>l+o.nodes.filter(m=>m.label!=="source").length,0)}catch{}if(D.proposal==null&&e.out(ee>0?`done \u2014 ${ee} item(s) committed in this session (earlier legs included); nothing new since the resume`:"done \u2014 nothing designed this session (no finalize before the session ended)"),D.assumedDefaults&&e.out(`assumed: ${D.assumedDefaults} default(s) taken while unattended`),i&&e.emit?.({type:"session_complete",sid:t.resume??c.session_id}),v?.event("ASR_SESSION_COMPLETE",{}),i?.complete(),Y)try{dt(he(e.contextDir,"sessions"))}catch{}if(P){let s=e.chat.state.ledger.filter(o=>o.kind==="answer"&&o.receipt.form==="assumed").length??0,d=(D.assumedDefaults??0)+s,l=e.chat.state.credits?.total??D.creditsTotal;e.onSummary?.({state:"complete",facts:[`designed: ${h.usecase.logical_id??r}${D.proposal==null?ee>0?` (${ee} item(s) committed across this session)`:" (nothing committed this session)":""}`,...d>0?[`${d} assumed default(s)`]:[],...l!==void 0?[`credits used: ${l.toFixed(1)}`]:[]],tracePath:Z(u)})}return t.plan||He(e.contextDir),O(),0}export{Es as a};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as V,b as q,c as le,d as A}from"./chunk-2YQ6TW77.js";import{b as z}from"./chunk-5GUD3CIH.js";import{a as B}from"./chunk-BPMSNGXQ.js";import{a as M}from"./chunk-DPUV6OSP.js";import{a as F}from"./chunk-NLCCBXXV.js";import{a as L}from"./chunk-RZ4F3BHX.js";import{e as ce}from"./chunk-UR6MHSHU.js";import{readFileSync as oe,existsSync as j,readdirSync as Se,mkdirSync as U,writeFileSync as
|
|
2
|
+
import{a as V,b as q,c as le,d as A}from"./chunk-2YQ6TW77.js";import{b as z}from"./chunk-5GUD3CIH.js";import{a as B}from"./chunk-BPMSNGXQ.js";import{a as M}from"./chunk-DPUV6OSP.js";import{a as F}from"./chunk-NLCCBXXV.js";import{a as L}from"./chunk-RZ4F3BHX.js";import{e as ce}from"./chunk-UR6MHSHU.js";import{readFileSync as oe,existsSync as j,readdirSync as Se,mkdirSync as U,writeFileSync as k}from"fs";import{readFile as ae,unlink as Te}from"fs/promises";import{join as E}from"path";import{existsSync as ye,mkdirSync as Re,readdirSync as ee,writeFileSync as Ae}from"fs";import{join as x}from"path";import{randomUUID as P}from"crypto";var ue="/home/kaneai/Downloads";function w(t){return`${ue}/${t}`}function K(t){return"FILE__"+t.replace(/[^A-Za-z0-9]/g,"_")}function C(t){let e=t?.media;return!e||!e.name||!e.media_url?null:{media_id:e.media_id??"",name:e.name,media_url:e.media_url,type:e.type??"doc"}}function H(t){return t?t.includes(`
|
|
3
3
|
`)?t.split(`
|
|
4
|
-
`).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function T(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(o,i)=>{let n=e[i];return n?n.value:o}).replace(/\$\{(.+?)\}/g,(o,i)=>{let n=e[i];return n?n.value:o})}var de={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",clear:"CLEAR",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD",device_control:"DEVICE_CONTROL",device_control_query:"DEVICE_CONTROL_QUERY"},X={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},_e=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function Y(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return X[i]}if(t==="scroll"&&e?.action_params?.into_view===!0)return"SCROLL_UNTIL_ELEMENT";let o=de[t];return o||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),o??t.toUpperCase()}function W(t,e){if(!t||!e)return"";try{let o=new Date(t);return isNaN(o.getTime())?"":new Date(o.getTime()+e).toISOString()}catch{return""}}function J(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function pe(t){let e=t.output_variable??"";if(!e)return"[]";let i={...J(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||P().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function ge(t,e,o){let i=t.action_params??{},n=_e.has(e)?"Vision Agent":"Operation Agent",r={operation_type:e};if(e==="OPEN"&&(r.url=i.url??""),e==="SET_VARIABLE"&&(r.variable_name=t.output_variable??i.key??"",r.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let m=C(i);m&&(r.value=w(m.name))}let s={},c={},a=t.action_instruction??"",l=i.text??"",u=i.url??"",p=[["intent",a],["value",l],["url",u]];for(let[m,h]of Object.entries(o)){let I=String(h);if(m.startsWith("secrets."))for(let[b,v]of p)v.includes(I)&&(c[b]=m);for(let[b,v]of p)v.includes(I)&&!(b in s)&&(s[b]=v)}let d=t.action_type,_={operation:t.action_instruction??"",agent:n,operation_dict:r,reasoning:d==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:s,secrets:c,params:{}};d==="analyze"&&typeof i.code=="string"&&i.code&&(_.code=i.code),d==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(_.code_js=i.code_js),d==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(_.condition_expression=i.condition_expression),i.uses_websocket===!0&&(_.uses_websocket=!0),i.uses_sse===!0&&(_.uses_sse=!0),d==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(_.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(_.locators=i.locators),typeof i.operator=="string"&&(_.operator=i.operator),Array.isArray(i.transforms)&&(_.transforms=i.transforms),typeof i.query=="string"&&(_.query=i.query),typeof i.expected_value=="string"&&(_.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(_.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(_.condition=i.condition));let f={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[d];return f&&i[f]!==void 0&&(_[f]=i[f]),d==="set_clipboard"&&typeof i.html=="string"&&i.html&&(_.html=i.html),_}function fe(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let o=e.sub_results??[];return o.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?o.some(n=>n.passed===!0):o.every(n=>n.passed===!0)}function Z(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function me(t){let e=t.assertion_tree??{},o=e.sub_results??[],i=Z(o);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:o,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function he(t){let o=(t.action_params??{}).assertion_tree??{},i=o.sub_results??[],n=Z(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:n,composite_operator:o.composite_operator??"and",verification:"",claim:o.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function Ee(t,e,o,i){let n=t.visual_data;if(!n||n.x==null||n.y==null)return null;let r=e?`${e}/test_screenshots`:"";return{x:n.x,y:n.y,confidence:0,bbox:n.bbox??null,bbox_source:n.bbox?"accessibility_tree":"fallback",viewport_width:n.viewport_width??1280,viewport_height:n.viewport_height??800,scale_factor:null,raw_image_url:r?`${r}/untagged_screenshot/${o}.${i?.get(o)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function be(t){if(!t)return"";let e=t;return typeof t=="object"&&!Array.isArray(t)&&Array.isArray(t.frameInfo)&&(e=t.frameInfo),!Array.isArray(e)||e.length===0?"":JSON.stringify(e)}function Ie(t){return/^(android|ios)_native$/i.test(t.platform??"")}function $(t,e={},o="",i){let n=t.action_type,r=Y(n,t),s=t.action_params??{},c=t.coordinates??null,a=t.selectors??null,l=!!(a&&a.length>0),u=Ie(t),p=t.timestamp??"",d=t.duration_ms??0,_=t.variables_used??{},g=t.action_id??P(),f=P(),m=W(p,d),h="",I="";if(n==="navigate")I=s.url??"",h=I;else if(n==="type"||n==="fill")h=s.text??"";else if(n==="press_key")h=s.key??"";else if(n==="wait")h=String(s.ms??s.timeout_ms??"");else if(n==="evaluate_js")h=s.script??"";else if(n==="upload_files"){let R=C(s);R&&(h=w(R.name))}else n==="analyze"&&r==="SET_VARIABLE"&&(h=t.output_value??"");let b="";n==="go_back"?b="back":n==="go_forward"&&(b="forward");let v=T(h,e),O=T(I,e),y=T(t.action_instruction??"",e),S=ge(t,r,_);return{operation_id:g,instruction_id:f,instruction:y,intent:y,operation_start:p,operation_end:m,status:t.status??"",command:r,name:"",target:"",value:v,message:"",operation_dict:"",frame:be(t.frame_info),error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(S),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:o?`${o}/test_screenshots/untagged_screenshot/${g}.${i?.get(g)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:O,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:r==="ASSERTION"?fe(s):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(s.tab_index??""),tab_identifier:String(s.tab_identifier??""),scroll_value:s.amount??1,scroll_direction:s.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:n==="evaluate_js"?s.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:u,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:c!==null&&!l,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:l?null:c?.x??null,y_coord:l?null:c?.y??null,target_x_coord:s.target_x??null,target_y_coord:s.target_y??null,source_description:s.source_description??null,target_description:s.target_description??null,use_coordinates:c!==null&&!l,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:l?a.map(R=>({...R,type:u?R.strategy??R.type??"native":R.isXPath?"xpath":"css"})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:r==="ASSERTION"?me(s):s.expression_tree??{},assertion_tree:s.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,reprobe:t.reprobe??!1,click_modifier:(s.click_count??1)>=2?{kind:"multi_click",frequency:s.click_count}:null,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:r==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:s.source_coordinates?{x:s.source_coordinates[0],y:s.source_coordinates[1]}:{},end_coordinates:s.target_coordinates?{x:s.target_coordinates[0],y:s.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:n==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:n==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:Ee(t,o,g,i),reasoning:n==="analyze"?s.query??"":t.intent??t.action_instruction??""}}function G(t,e,o={}){let i=t.action_type,n=Y(i,t),r=t.timestamp??"",s=t.duration_ms??0,c=W(r,s),a=n==="ASSERTION"||n==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:T(t.action_instruction??"",o),command:n,error:null,parent_instruction_id:"",classification_layer_resp:n==="ASSERTION"?he(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:r,end_timestamp:c,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?pe(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:J(t)}:{},params_used:!1,hard_assertion:n==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function ve(t,e=[]){let o=t.action_params??{},i=o.branches??[],n=o.winning_index??-1,r=o.sub_results??[],s={};for(let a of r){let l=a.sub_results;if(l)for(let u of l){let p=u.store_key;p&&(s[p]=u)}}let c=i.map((a,l)=>{let u=l===n,p=(a.sub_checks??[]).map(d=>{let _=s[d.store_key];return{description:d.description,store_key:d.store_key,expected_value:d.expected_value,stored_value:_?.extracted_value??d.stored_value,operator:d.operator??_?.operator??"equals",transforms:d.transforms??_?.transforms??[]}});if(p.length===0&&a.condition&&r.length>0){let _=r.find(g=>g.branch_index===l)?.sub_results??[];_.length>0&&(p=_.map(g=>({description:g.description??a.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:l,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:a.custom_event??null,children:u?e:[],sub_checks:a.condition?p:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${P().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:n,branches:c,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Q(t,e,o){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=o)}function D(t,e={},o="",i,n){let r=[],s=0;for(;s<t.length;){let c=t[s],a=c.action_type;if(!n?.keepFailedActions&&c.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(c.until_condition&&!c.error)){s+=1;continue}if(a==="analyze"&&!X[c.action_params?.analyzer_type??""]){s+=1;continue}if(a==="child_agent_start"){let l=c.action_params?.child_id??"",u=c.action_params?.objective??"",p=[];s+=1;let d=1,_="error",g;for(;s<t.length&&d>0;){let y=t[s],S=y.action_type;if(S==="child_agent_start")d+=1;else if(S==="child_agent_end"&&(d-=1,d===0)){_=y.status??"success",g=y,s+=1;break}d>0&&p.push(y),s+=1}let f=D(p,e,o,i);Q(f,l,u);let m=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,I=g?.action_params?.error_message??null,b=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,O=_==="error";r.push({content_type:"generative_block",instruction_id:`generative_block_${l}`,generative_id:l,objective:u,status:_,children:f,error_message:O?I??null:null,error_code:O?h??null:null,result_code:m??null,bifurcation_context:[],approach_reason:H(b),one_liner:v??null});continue}else if(a==="child_agent_end"){s+=1;continue}else if(a==="if_else"){s+=1;let l=[];for(;s<t.length&&t[s].action_type==="child_agent_start";){let u=t[s],p=u.action_params?.child_id??"",d=u.action_params?.objective??"",_=[];s+=1;let g=1,f="error";for(;s<t.length&&g>0;){let h=t[s];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){f=h.status??"success",s+=1;break}g>0&&_.push(h),s+=1}let m=D(_,e,o,i);l.push(...m)}r.push(ve(c,l));continue}else if(a==="query_tool"){s+=1;continue}else if(c.until_condition){let l=$(c,e,o,i),u=G(c,l,e),p=typeof c.until_condition_met=="boolean"?c.until_condition_met:c.status==="success";r.push({content_type:"until_block",instruction_id:`until_${P().slice(0,8)}`,condition:c.until_condition,max_retries:c.until_max_retries??10,settle_ms:c.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:c.status??"success"})}else{let l=$(c,e,o,i),u=G(c,l,e);r.push(u)}s+=1}return r}function N(t,e={},o="",i,n){let r=[];for(let s of t){let c=D(s.records,e,o,i,n);if(c.length===0)continue;let a=P().replace(/-/g,"");Q(c,a,s.objective);let l=c.some(_=>"status"in _&&typeof _.status=="string"?_.status==="error"||_.status==="failed":!1),u=s.resultCode?parseInt(s.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,d=l||p?"error":"success";r.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:s.objective,status:d,children:c,error_message:d==="error"?s.errorMessage??null:null,error_code:d==="error"?s.reasonCode??null:null,result_code:s.resultCode??null,bifurcation_context:[],approach_reason:H(s.summary),one_liner:s.oneLiner??null})}return{instructions:r}}function te(t,e){let o;try{o=ee(t)}catch{return 0}let i=0,n=o.filter(r=>/^\d+$/.test(r)).sort((r,s)=>Number(r)-Number(s));for(let r of n){let s=k(t,r),c=k(s,"logs");if(!ye(c))continue;let a;try{a=ee(c)}catch{continue}let l=a.filter(d=>d.endsWith("-actions.ndjson")).sort((d,_)=>(parseInt(d,10)||0)-(parseInt(_,10)||0)),u=[];for(let d of l){let _=e.readActions(k(c,d));_.length&&u.push({objective:e.objective??"",records:_})}if(u.length===0)continue;let{instructions:p}=N(u,e.vars??{},e.screenshotBaseUrl??"",e.extMap,{keepFailedActions:!0});if(p.length!==0)try{let d=k(s,"auteur");Re(d,{recursive:!0}),Ae(k(d,"execution.json"),JSON.stringify(e.buildBlob(p),null,2)),i++,e.log?.("info","EVIDENCE_ARCHIVED_ATTEMPT_BLOB","Derived nested attempt blob",{attempt:r,instructions:p.length})}catch(d){e.log?.("debug","EVIDENCE_ARCHIVED_ATTEMPT_BLOB_FAILED","Nested attempt blob derivation failed",{attempt:r,error:d instanceof Error?d.message:String(d)})}}return i}var ie=ce(le(),1);import{createWriteStream as Pe}from"fs";import{readFile as Le}from"fs/promises";import{join as Ne,basename as ke}from"path";import{tmpdir as xe}from"os";var Oe=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function ne(t){let e=Ne(xe(),`${ke(t)}_artifacts.zip`);return new Promise((o,i)=>{let n=Pe(e),r=(0,ie.default)("zip",{zlib:{level:6}});n.on("close",()=>o(e)),r.on("error",i),r.pipe(n),r.glob("**/*",{cwd:t,ignore:Oe}),r.finalize()})}async function se(t){return Le(t)}async function we(t,e){return ae(z(t,e))}function Ce(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var re=class{config;controller;testId;constructor(e){this.config=e,this.controller=new M(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,o,i,n){this.config.log?.(e,o,i,n)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let o=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let c=this.collectNdjsonPerRun(),a=c.reduce((f,m)=>f+m.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:c.length});let l=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(l)});let{instructions:u}=c.length>0?N(c,l,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),d=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(d.length/1024).toFixed(1)});let _=E(this.config.sessionDir,"execution.json");x(_,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:_});let g=o?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let f=E(g,"auteur");U(f,{recursive:!0}),x(E(f,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(f,"execution.json")}),this.deriveArchivedAttemptBlobs(g,l)}if(e("convert","done"),o)i=d;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let f=null,m;try{f=await ne(this.config.sessionDir),m=await se(f),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(m.length/1024/1024).toFixed(1),path:f}),e("zip","done",`${(m.length/1024/1024).toFixed(1)}MB`)}finally{f&&await Te(f).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(m.length/1024/1024).toFixed(1),blob_size_kb:+(d.length/1024).toFixed(1)}),await Promise.all([A(h.urls.artifacts.upload_url,m,"application/zip"),A(h.urls.blob.upload_url,d,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let c=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:l}=c.length>0?N(c,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(l),p=E(this.config.sessionDir,"execution.json");x(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let d=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(d){let _=E(d,"auteur");U(_,{recursive:!0});let g=this.readAuthoredExecution();x(E(_,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(_,"execution.json"),source:g?"authored":"run_envelope"}),this.deriveArchivedAttemptBlobs(d,a)}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(c){let a=c instanceof Error?c.message:String(c);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),c}}else e("atomic_replace","skipped");let n,r;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let c=await this.config.onCommitLock();if(c.ok)n=c.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:n??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:c.reason,message:c.message}),e("commit_lock","failed",`${c.reason??"unknown"}: ${c.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${c.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let c=new B(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(n=(await c.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:n??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(n)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(n&&this.config.shareApiBaseUrl)try{r=await this.generateShareLink(n),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:r})}catch(c){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(c)})}if(o&&i){let c=null;e("zip","running");try{await o.sealFn({testcaseId:n,shareId:r}),c=o.sealedPackPath?await ae(o.sealedPackPath):await we(o.executionId,o.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:o.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(c.length/1024/1024).toFixed(1)})}catch(a){let l=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:o.executionId,error:l})}if(c){e("zip","done",`${(c.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Ce(o.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(c.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([A(a.urls.artifacts.upload_url,c,"application/zip"),A(a.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await A(a.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let s;if(this.config.mobile&&this.config.codeExport?.enabled)this.log("info","PIPELINE_CODE_EXPORT_SKIPPED","Code export is not supported for device runs"),e("code_export","skipped","not supported on mobile yet");else if(this.config.codeExport?.enabled&&n){let c=!1;try{await this.triggerCodeExport(n),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),c=!0}catch(a){let l=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:l}),e("code_export","failed",`trigger failed: ${l}`)}if(c){e("code_export","running","Waiting for code generation\u2026");try{s=await this.pollAndDownloadCode(n,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:s}),e("code_export","done",s)}catch(a){let l=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:l}),e("code_export","failed",l)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:n,shareId:r,codeExportDir:s}}catch(o){return{success:!1,testId:this.testId,error:o instanceof Error?o.message:String(o)}}}async runCodeExport(e,o){let i=o??this.config.onProgress,n=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),n=!0}catch(r){let s=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:s}),i("code_export","failed",`trigger failed: ${s}`)}if(n){i("code_export","running","Waiting for code generation\u2026");try{let r=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:r}),i("code_export","done",r),r}catch(r){let s=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:s}),i("code_export","failed",s);return}}}deriveArchivedAttemptBlobs(e,o){try{let i=te(e,{readActions:n=>this.readNdjsonFromFile(n),buildBlob:n=>this.buildExecutionEnvelope(n),objective:this.config.firstObjective,vars:o,screenshotBaseUrl:this.config.screenshotBaseUrl??"",extMap:this.config.screenshotExtMap,log:(n,r,s,c)=>this.log(n,r,s,c)});i>0&&this.log("info","PIPELINE_ARCHIVED_ATTEMPTS","Nested retry-attempt blobs derived",{count:i})}catch(i){this.log("debug","PIPELINE_ARCHIVED_ATTEMPTS_FAILED","Nested attempt blob pass failed",{error:i instanceof Error?i.message:String(i)})}}collectNdjsonPerRun(){let e=[],o=this.config.runObjectives??[],i=this.config.runMetadata??[],n=this.config.evidence??this.config.evidenceRead;for(let r=0;r<this.config.runDirs.length;r++){let s=this.config.runDirs[r],c=o[r]||this.config.firstObjective,a=i[r],l=n?this.readNdjsonFromFile(E(n.packTestDir,"logs",`${n.runIndices?.[r]??r}-actions.ndjson`)):this.readNdjsonFromDir(s);l.length>0&&e.push({objective:c,records:l,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let r=E(this.config.sessionDir,"runs");if(j(r))try{let c=Se(r,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of c){let l=E(r,a),u=this.readNdjsonFromDir(l);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let o=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of o)if(j(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let o=[];if(!j(e))return o;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=oe(e,"utf-8");for(let n of i.split(`
|
|
5
|
-
`)){let r=n.trim();if(r)try{o.push(JSON.parse(r))}catch{}}return o}async generateShareLink(e){let o=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:o,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},n=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:n,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let r=n?await this.config.authResolver.fetch(o,i):await L(o,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Share link API failed: ${r.status} ${await r.text()}`);let s=await r.json();if(!s.shareId)throw new Error("Share link API returned no shareId");return s.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:o,body:i}=V({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:o});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},r=this.config.authResolver?await this.config.authResolver.fetch(o,n):await L(o,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Code export failed: ${r.status} ${await r.text()}`)}async pollAndDownloadCode(e,o){let i=q({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),n=this.config.exitTimeoutMs??3e5,r=5e3,s=Date.now()+n;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:n});let c=(a,l)=>this.config.authResolver?this.config.authResolver.fetch(a,l):L(a,{...l,headers:{...l?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<s;){let a=await c(i,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let _=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:_.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let u=(await a.json()).data?.find(_=>_.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),o("code_export","running","Waiting for code generation\u2026"),await this.sleep(r);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),o("code_export","running","Generating code\u2026"),await this.sleep(r);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let d=this.config.codeExportDir??E(this.config.sessionDir,"code-export");U(d,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:d}),o("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let _ of u.url){let g=E(d,_.file_name),f=await L(_.file_url);if(!f.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:_.file_name,status:f.status});continue}let m=await f.text();
|
|
4
|
+
`).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function T(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(o,i)=>{let n=e[i];return n?n.value:o}).replace(/\$\{(.+?)\}/g,(o,i)=>{let n=e[i];return n?n.value:o})}var de={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",clear:"CLEAR",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD",device_control:"DEVICE_CONTROL",device_control_query:"DEVICE_CONTROL_QUERY"},X={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},_e=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function Y(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return X[i]}if(t==="scroll"&&e?.action_params?.into_view===!0)return"SCROLL_UNTIL_ELEMENT";let o=de[t];return o||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),o??t.toUpperCase()}function W(t,e){if(!t||!e)return"";try{let o=new Date(t);return isNaN(o.getTime())?"":new Date(o.getTime()+e).toISOString()}catch{return""}}function J(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function pe(t){let e=t.output_variable??"";if(!e)return"[]";let i={...J(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||P().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function ge(t,e,o){let i=t.action_params??{},n=_e.has(e)?"Vision Agent":"Operation Agent",r={operation_type:e};if(e==="OPEN"&&(r.url=i.url??""),e==="SET_VARIABLE"&&(r.variable_name=t.output_variable??i.key??"",r.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let m=C(i);m&&(r.value=w(m.name))}let s={},c={},a=t.action_instruction??"",l=i.text??"",u=i.url??"",p=[["intent",a],["value",l],["url",u]];for(let[m,h]of Object.entries(o)){let I=String(h);if(m.startsWith("secrets."))for(let[b,v]of p)v.includes(I)&&(c[b]=m);for(let[b,v]of p)v.includes(I)&&!(b in s)&&(s[b]=v)}let d=t.action_type,_={operation:t.action_instruction??"",agent:n,operation_dict:r,reasoning:d==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:s,secrets:c,params:{}};d==="analyze"&&typeof i.code=="string"&&i.code&&(_.code=i.code),d==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(_.code_js=i.code_js),d==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(_.condition_expression=i.condition_expression),i.uses_websocket===!0&&(_.uses_websocket=!0),i.uses_sse===!0&&(_.uses_sse=!0),d==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(_.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(_.locators=i.locators),typeof i.operator=="string"&&(_.operator=i.operator),Array.isArray(i.transforms)&&(_.transforms=i.transforms),typeof i.query=="string"&&(_.query=i.query),typeof i.expected_value=="string"&&(_.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(_.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(_.condition=i.condition));let f={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[d];return f&&i[f]!==void 0&&(_[f]=i[f]),d==="set_clipboard"&&typeof i.html=="string"&&i.html&&(_.html=i.html),_}function fe(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let o=e.sub_results??[];return o.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?o.some(n=>n.passed===!0):o.every(n=>n.passed===!0)}function Z(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function me(t){let e=t.assertion_tree??{},o=e.sub_results??[],i=Z(o);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:o,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function he(t){let o=(t.action_params??{}).assertion_tree??{},i=o.sub_results??[],n=Z(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:n,composite_operator:o.composite_operator??"and",verification:"",claim:o.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function Ee(t,e,o,i){let n=t.visual_data;if(!n||n.x==null||n.y==null)return null;let r=e?`${e}/test_screenshots`:"";return{x:n.x,y:n.y,confidence:0,bbox:n.bbox??null,bbox_source:n.bbox?"accessibility_tree":"fallback",viewport_width:n.viewport_width??1280,viewport_height:n.viewport_height??800,scale_factor:null,raw_image_url:r?`${r}/untagged_screenshot/${o}.${i?.get(o)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function be(t){if(!t)return"";let e=t;return typeof t=="object"&&!Array.isArray(t)&&Array.isArray(t.frameInfo)&&(e=t.frameInfo),!Array.isArray(e)||e.length===0?"":JSON.stringify(e)}function Ie(t){return/^(android|ios)_native$/i.test(t.platform??"")}function $(t,e={},o="",i){let n=t.action_type,r=Y(n,t),s=t.action_params??{},c=t.coordinates??null,a=t.selectors??null,l=!!(a&&a.length>0),u=Ie(t),p=t.timestamp??"",d=t.duration_ms??0,_=t.variables_used??{},g=t.action_id??P(),f=P(),m=W(p,d),h="",I="";if(n==="navigate")I=s.url??"",h=I;else if(n==="type"||n==="fill")h=s.text??"";else if(n==="press_key")h=s.key??"";else if(n==="wait")h=String(s.ms??s.timeout_ms??"");else if(n==="evaluate_js")h=s.script??"";else if(n==="upload_files"){let R=C(s);R&&(h=w(R.name))}else n==="analyze"&&r==="SET_VARIABLE"&&(h=t.output_value??"");let b="";n==="go_back"?b="back":n==="go_forward"&&(b="forward");let v=T(h,e),O=T(I,e),y=T(t.action_instruction??"",e),S=ge(t,r,_);return{operation_id:g,instruction_id:f,instruction:y,intent:y,operation_start:p,operation_end:m,status:t.status??"",command:r,name:"",target:"",value:v,message:"",operation_dict:"",frame:be(t.frame_info),error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(S),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:o?`${o}/test_screenshots/untagged_screenshot/${g}.${i?.get(g)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:O,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:r==="ASSERTION"?fe(s):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(s.tab_index??""),tab_identifier:String(s.tab_identifier??""),scroll_value:s.amount??1,scroll_direction:s.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:n==="evaluate_js"?s.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:u,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:c!==null&&!l,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:l?null:c?.x??null,y_coord:l?null:c?.y??null,target_x_coord:s.target_x??null,target_y_coord:s.target_y??null,source_description:s.source_description??null,target_description:s.target_description??null,use_coordinates:c!==null&&!l,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:l?a.map(R=>({...R,type:u?R.strategy??R.type??"native":R.isXPath?"xpath":"css"})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:r==="ASSERTION"?me(s):s.expression_tree??{},assertion_tree:s.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,reprobe:t.reprobe??!1,click_modifier:(s.click_count??1)>=2?{kind:"multi_click",frequency:s.click_count}:null,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:r==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:s.source_coordinates?{x:s.source_coordinates[0],y:s.source_coordinates[1]}:{},end_coordinates:s.target_coordinates?{x:s.target_coordinates[0],y:s.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:n==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:n==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:Ee(t,o,g,i),reasoning:n==="analyze"?s.query??"":t.intent??t.action_instruction??""}}function G(t,e,o={}){let i=t.action_type,n=Y(i,t),r=t.timestamp??"",s=t.duration_ms??0,c=W(r,s),a=n==="ASSERTION"||n==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:T(t.action_instruction??"",o),command:n,error:null,parent_instruction_id:"",classification_layer_resp:n==="ASSERTION"?he(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:r,end_timestamp:c,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?pe(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:J(t)}:{},params_used:!1,hard_assertion:n==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function ve(t,e=[]){let o=t.action_params??{},i=o.branches??[],n=o.winning_index??-1,r=o.sub_results??[],s={};for(let a of r){let l=a.sub_results;if(l)for(let u of l){let p=u.store_key;p&&(s[p]=u)}}let c=i.map((a,l)=>{let u=l===n,p=(a.sub_checks??[]).map(d=>{let _=s[d.store_key];return{description:d.description,store_key:d.store_key,expected_value:d.expected_value,stored_value:_?.extracted_value??d.stored_value,operator:d.operator??_?.operator??"equals",transforms:d.transforms??_?.transforms??[]}});if(p.length===0&&a.condition&&r.length>0){let _=r.find(g=>g.branch_index===l)?.sub_results??[];_.length>0&&(p=_.map(g=>({description:g.description??a.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:l,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:a.custom_event??null,children:u?e:[],sub_checks:a.condition?p:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${P().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:n,branches:c,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Q(t,e,o){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=o)}function D(t,e={},o="",i,n){let r=[],s=0;for(;s<t.length;){let c=t[s],a=c.action_type;if(!n?.keepFailedActions&&c.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(c.until_condition&&!c.error)){s+=1;continue}if(a==="analyze"&&(!X[c.action_params?.analyzer_type??""]||c.action_params?.analyzer_type==="textual_visual"&&c.action_params?.code)){s+=1;continue}if(a==="child_agent_start"){let l=c.action_params?.child_id??"",u=c.action_params?.objective??"",p=[];s+=1;let d=1,_="error",g;for(;s<t.length&&d>0;){let y=t[s],S=y.action_type;if(S==="child_agent_start")d+=1;else if(S==="child_agent_end"&&(d-=1,d===0)){_=y.status??"success",g=y,s+=1;break}d>0&&p.push(y),s+=1}let f=D(p,e,o,i);Q(f,l,u);let m=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,I=g?.action_params?.error_message??null,b=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,O=_==="error";r.push({content_type:"generative_block",instruction_id:`generative_block_${l}`,generative_id:l,objective:u,status:_,children:f,error_message:O?I??null:null,error_code:O?h??null:null,result_code:m??null,bifurcation_context:[],approach_reason:H(b),one_liner:v??null});continue}else if(a==="child_agent_end"){s+=1;continue}else if(a==="if_else"){s+=1;let l=[];for(;s<t.length&&t[s].action_type==="child_agent_start";){let u=t[s],p=u.action_params?.child_id??"",d=u.action_params?.objective??"",_=[];s+=1;let g=1,f="error";for(;s<t.length&&g>0;){let h=t[s];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){f=h.status??"success",s+=1;break}g>0&&_.push(h),s+=1}let m=D(_,e,o,i);l.push(...m)}r.push(ve(c,l));continue}else if(a==="query_tool"){s+=1;continue}else if(c.until_condition){let l=$(c,e,o,i),u=G(c,l,e),p=typeof c.until_condition_met=="boolean"?c.until_condition_met:c.status==="success";r.push({content_type:"until_block",instruction_id:`until_${P().slice(0,8)}`,condition:c.until_condition,max_retries:c.until_max_retries??10,settle_ms:c.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:c.status??"success"})}else{let l=$(c,e,o,i),u=G(c,l,e);r.push(u)}s+=1}return r}function N(t,e={},o="",i,n){let r=[];for(let s of t){let c=D(s.records,e,o,i,n);if(c.length===0)continue;let a=P().replace(/-/g,"");Q(c,a,s.objective);let l=c.some(_=>"status"in _&&typeof _.status=="string"?_.status==="error"||_.status==="failed":!1),u=s.resultCode?parseInt(s.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,d=l||p?"error":"success";r.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:s.objective,status:d,children:c,error_message:d==="error"?s.errorMessage??null:null,error_code:d==="error"?s.reasonCode??null:null,result_code:s.resultCode??null,bifurcation_context:[],approach_reason:H(s.summary),one_liner:s.oneLiner??null})}return{instructions:r}}function te(t,e){let o;try{o=ee(t)}catch{return 0}let i=0,n=o.filter(r=>/^\d+$/.test(r)).sort((r,s)=>Number(r)-Number(s));for(let r of n){let s=x(t,r),c=x(s,"logs");if(!ye(c))continue;let a;try{a=ee(c)}catch{continue}let l=a.filter(d=>d.endsWith("-actions.ndjson")).sort((d,_)=>(parseInt(d,10)||0)-(parseInt(_,10)||0)),u=[];for(let d of l){let _=e.readActions(x(c,d));_.length&&u.push({objective:e.objective??"",records:_})}if(u.length===0)continue;let{instructions:p}=N(u,e.vars??{},e.screenshotBaseUrl??"",e.extMap,{keepFailedActions:!0});if(p.length!==0)try{let d=x(s,"auteur");Re(d,{recursive:!0}),Ae(x(d,"execution.json"),JSON.stringify(e.buildBlob(p),null,2)),i++,e.log?.("info","EVIDENCE_ARCHIVED_ATTEMPT_BLOB","Derived nested attempt blob",{attempt:r,instructions:p.length})}catch(d){e.log?.("debug","EVIDENCE_ARCHIVED_ATTEMPT_BLOB_FAILED","Nested attempt blob derivation failed",{attempt:r,error:d instanceof Error?d.message:String(d)})}}return i}var ie=ce(le(),1);import{createWriteStream as Pe}from"fs";import{readFile as Le}from"fs/promises";import{join as Ne,basename as xe}from"path";import{tmpdir as ke}from"os";var Oe=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function ne(t){let e=Ne(ke(),`${xe(t)}_artifacts.zip`);return new Promise((o,i)=>{let n=Pe(e),r=(0,ie.default)("zip",{zlib:{level:6}});n.on("close",()=>o(e)),r.on("error",i),r.pipe(n),r.glob("**/*",{cwd:t,ignore:Oe}),r.finalize()})}async function se(t){return Le(t)}async function we(t,e){return ae(z(t,e))}function Ce(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var re=class{config;controller;testId;constructor(e){this.config=e,this.controller=new M(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,o,i,n){this.config.log?.(e,o,i,n)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let o=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let c=this.collectNdjsonPerRun(),a=c.reduce((f,m)=>f+m.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:c.length});let l=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(l)});let{instructions:u}=c.length>0?N(c,l,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),d=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(d.length/1024).toFixed(1)});let _=E(this.config.sessionDir,"execution.json");k(_,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:_});let g=o?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let f=E(g,"auteur");U(f,{recursive:!0}),k(E(f,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(f,"execution.json")}),this.deriveArchivedAttemptBlobs(g,l)}if(e("convert","done"),o)i=d;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let f=null,m;try{f=await ne(this.config.sessionDir),m=await se(f),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(m.length/1024/1024).toFixed(1),path:f}),e("zip","done",`${(m.length/1024/1024).toFixed(1)}MB`)}finally{f&&await Te(f).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(m.length/1024/1024).toFixed(1),blob_size_kb:+(d.length/1024).toFixed(1)}),await Promise.all([A(h.urls.artifacts.upload_url,m,"application/zip"),A(h.urls.blob.upload_url,d,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let c=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:l}=c.length>0?N(c,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(l),p=E(this.config.sessionDir,"execution.json");k(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let d=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(d){let _=E(d,"auteur");U(_,{recursive:!0});let g=this.readAuthoredExecution();k(E(_,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(_,"execution.json"),source:g?"authored":"run_envelope"}),this.deriveArchivedAttemptBlobs(d,a)}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(c){let a=c instanceof Error?c.message:String(c);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),c}}else e("atomic_replace","skipped");let n,r;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let c=await this.config.onCommitLock();if(c.ok)n=c.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:n??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:c.reason,message:c.message}),e("commit_lock","failed",`${c.reason??"unknown"}: ${c.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${c.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let c=new B(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(n=(await c.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:n??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(n)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(n&&this.config.shareApiBaseUrl)try{r=await this.generateShareLink(n),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:r})}catch(c){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(c)})}if(o&&i){let c=null;e("zip","running");try{await o.sealFn({testcaseId:n,shareId:r}),c=o.sealedPackPath?await ae(o.sealedPackPath):await we(o.executionId,o.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:o.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(c.length/1024/1024).toFixed(1)})}catch(a){let l=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:o.executionId,error:l})}if(c){e("zip","done",`${(c.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Ce(o.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(c.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([A(a.urls.artifacts.upload_url,c,"application/zip"),A(a.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await A(a.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let s;if(this.config.mobile&&this.config.codeExport?.enabled)this.log("info","PIPELINE_CODE_EXPORT_SKIPPED","Code export is not supported for device runs"),e("code_export","skipped","not supported on mobile yet");else if(this.config.codeExport?.enabled&&n){let c=!1;try{await this.triggerCodeExport(n),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),c=!0}catch(a){let l=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:l}),e("code_export","failed",`trigger failed: ${l}`)}if(c){e("code_export","running","Waiting for code generation\u2026");try{s=await this.pollAndDownloadCode(n,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:s}),e("code_export","done",s)}catch(a){let l=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:l}),e("code_export","failed",l)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:n,shareId:r,codeExportDir:s}}catch(o){return{success:!1,testId:this.testId,error:o instanceof Error?o.message:String(o)}}}async runCodeExport(e,o){let i=o??this.config.onProgress,n=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),n=!0}catch(r){let s=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:s}),i("code_export","failed",`trigger failed: ${s}`)}if(n){i("code_export","running","Waiting for code generation\u2026");try{let r=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:r}),i("code_export","done",r),r}catch(r){let s=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:s}),i("code_export","failed",s);return}}}deriveArchivedAttemptBlobs(e,o){try{let i=te(e,{readActions:n=>this.readNdjsonFromFile(n),buildBlob:n=>this.buildExecutionEnvelope(n),objective:this.config.firstObjective,vars:o,screenshotBaseUrl:this.config.screenshotBaseUrl??"",extMap:this.config.screenshotExtMap,log:(n,r,s,c)=>this.log(n,r,s,c)});i>0&&this.log("info","PIPELINE_ARCHIVED_ATTEMPTS","Nested retry-attempt blobs derived",{count:i})}catch(i){this.log("debug","PIPELINE_ARCHIVED_ATTEMPTS_FAILED","Nested attempt blob pass failed",{error:i instanceof Error?i.message:String(i)})}}collectNdjsonPerRun(){let e=[],o=this.config.runObjectives??[],i=this.config.runMetadata??[],n=this.config.evidence??this.config.evidenceRead;for(let r=0;r<this.config.runDirs.length;r++){let s=this.config.runDirs[r],c=o[r]||this.config.firstObjective,a=i[r],l=n?this.readNdjsonFromFile(E(n.packTestDir,"logs",`${n.runIndices?.[r]??r}-actions.ndjson`)):this.readNdjsonFromDir(s);l.length>0&&e.push({objective:c,records:l,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let r=E(this.config.sessionDir,"runs");if(j(r))try{let c=Se(r,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of c){let l=E(r,a),u=this.readNdjsonFromDir(l);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let o=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of o)if(j(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let o=[];if(!j(e))return o;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=oe(e,"utf-8");for(let n of i.split(`
|
|
5
|
+
`)){let r=n.trim();if(r)try{o.push(JSON.parse(r))}catch{}}return o}async generateShareLink(e){let o=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:o,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},n=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:n,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let r=n?await this.config.authResolver.fetch(o,i):await L(o,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Share link API failed: ${r.status} ${await r.text()}`);let s=await r.json();if(!s.shareId)throw new Error("Share link API returned no shareId");return s.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:o,body:i}=V({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:o});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},r=this.config.authResolver?await this.config.authResolver.fetch(o,n):await L(o,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Code export failed: ${r.status} ${await r.text()}`)}async pollAndDownloadCode(e,o){let i=q({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),n=this.config.exitTimeoutMs??3e5,r=5e3,s=Date.now()+n;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:n});let c=(a,l)=>this.config.authResolver?this.config.authResolver.fetch(a,l):L(a,{...l,headers:{...l?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<s;){let a=await c(i,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let _=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:_.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let u=(await a.json()).data?.find(_=>_.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),o("code_export","running","Waiting for code generation\u2026"),await this.sleep(r);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),o("code_export","running","Generating code\u2026"),await this.sleep(r);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let d=this.config.codeExportDir??E(this.config.sessionDir,"code-export");U(d,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:d}),o("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let _ of u.url){let g=E(d,_.file_name),f=await L(_.file_url);if(!f.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:_.file_name,status:f.status});continue}let m=await f.text();k(g,m,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:_.file_name,size_bytes:m.length})}return d}throw new Error("Code export timed out")}sleep(e){return new Promise(o=>setTimeout(o,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:F(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let o=oe(e,"utf8");return JSON.parse(o),o}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let o=this.config.runStatuses.every(a=>a==="passed")?"success":"error",i=this.config.variableIds??{},n=[];if(this.config.variables)for(let[a,l]of Object.entries(this.config.variables)){if(l.secret)continue;let u=a.startsWith("global.")?a.slice(7):a;n.push({id:i[u]??0,name:u,value:l.value,session_value:l.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let r=[],s=[],c=new Set;for(let a of this.collectNdjsonPerRun())for(let l of a.records)if(l.output_variable&&l.output_value!=null&&r.push({name:l.output_variable,value:String(l.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),l.action_type==="upload_files"){let u=C(l.action_params);if(u){let p=u.media_id||u.media_url;if(!c.has(p)){c.add(p),s.push({media_url:u.media_url,media_id:u.media_id,name:u.name,type:u.type});let d=w(u.name);r.push({name:K(u.name),value:d,value_type:"string",variable_description:`variable for ${d}`})}}}return{test_id:this.testId,version:"v4",auto_heal_version:this.config.apMode==="v2"?"AH2":"",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:o,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:s,test_params:[],test_level_variables:JSON.stringify(r),test_global_variables:n,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{we as a,Ce as b,re as c};
|