@testmuai/kane-cli 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChatSurface-U37VZDCW.js +8 -0
- package/dist/{ChromeProfilePicker-4CDSPBWL.js → ChromeProfilePicker-AUU7JF6F.js} +1 -1
- package/dist/{CliFeedbackPrompt-TLRVBA4E.js → CliFeedbackPrompt-4W74Y3UF.js} +1 -1
- package/dist/{CliUploadProgress-WGGFLUSF.js → CliUploadProgress-6HL7WTEX.js} +1 -1
- package/dist/ConfigView-6BSCZP5Y.js +2 -0
- package/dist/EvidenceViewOffer-62XHEEGW.js +2 -0
- package/dist/FolderPicker-S7U2EN2M.js +2 -0
- package/dist/{HelpView-FBCX32U7.js → HelpView-TU7ED43J.js} +1 -1
- package/dist/{InfoBox-KK2ICVS4.js → InfoBox-JLTMKVDE.js} +1 -1
- package/dist/{LinksBox-KKRANMR3.js → LinksBox-LREUUJDV.js} +1 -1
- package/dist/{ProfilesView-DGPXSAQN.js → ProfilesView-W3GX2N2E.js} +1 -1
- package/dist/{ProjectPicker-ESQSL4TT.js → ProjectPicker-SYQUJK2J.js} +1 -1
- package/dist/{SaveSessionPrompt-AQGP5W6E.js → SaveSessionPrompt-MR5NJMRP.js} +1 -1
- package/dist/SingleShotApp-XOKVOM7C.js +2 -0
- package/dist/{SummaryBox-BFZJW2KK.js → SummaryBox-UAYSVFB7.js} +1 -1
- package/dist/TestMdRunView-7UVSDAF4.js +2 -0
- package/dist/{WhoamiView-JABY3I5Q.js → WhoamiView-2YU76ASQ.js} +1 -1
- package/dist/adbkit-apkreader-ORZBGCJQ.js +184 -0
- package/dist/app-client-OEXESV4U.js +2 -0
- package/dist/app-download-AEEFQ63M.js +2 -0
- package/dist/{auth-76LVI6B5.js → auth-HET3TBRI.js} +1 -1
- package/dist/bind-STKXOUYI.js +12 -0
- package/dist/bootstrap-44YKVWWE.js +2 -0
- package/dist/bridge-5Z3BIB77.js +2 -0
- package/dist/{changelog-PSWPPOAF.js → changelog-7OWRHFHZ.js} +1 -1
- package/dist/chat-committer-ZWWCLJFD.js +2 -0
- package/dist/chat-controller-T2FAI55V.js +2 -0
- package/dist/{chunk-C4G7RVJ6.js → chunk-27U4PLPX.js} +1 -1
- package/dist/{chunk-V36ATG7A.js → chunk-2BGUUWNF.js} +2 -2
- package/dist/chunk-2KDGIZED.js +4 -0
- package/dist/chunk-2UIHS2FH.js +2 -0
- package/dist/chunk-2YEHV2CX.js +2 -0
- package/dist/{chunk-NRTHYROA.js → chunk-3LJWYRAA.js} +1 -1
- package/dist/chunk-3PECJD6S.js +11 -0
- package/dist/chunk-3POR47RC.js +8 -0
- package/dist/{chunk-KVQOBPAZ.js → chunk-3Q6WAK6P.js} +1 -1
- package/dist/chunk-4JOD47QI.js +2 -0
- package/dist/chunk-56PAQAX5.js +19 -0
- package/dist/{chunk-FCMLIK7P.js → chunk-5DBK6QNS.js} +1 -1
- package/dist/chunk-5DT7PIGB.js +5 -0
- package/dist/chunk-65ZTD5SJ.js +7 -0
- package/dist/chunk-6IA6QMPH.js +2 -0
- package/dist/{chunk-5KFS3GAZ.js → chunk-6KPPGMO2.js} +1 -1
- package/dist/{chunk-F6ZOJXYU.js → chunk-6O3DDOP2.js} +1 -1
- package/dist/chunk-6XX4LEVJ.js +2 -0
- package/dist/{chunk-KT6G7AF2.js → chunk-766WGMBU.js} +1 -1
- package/dist/chunk-7BZSCUPP.js +10 -0
- package/dist/{chunk-UBFKZEX3.js → chunk-7JWKHKFU.js} +2 -2
- package/dist/{chunk-PMHJRT3A.js → chunk-7KORP5FF.js} +1 -1
- package/dist/chunk-7Q6M6P4X.js +26 -0
- package/dist/{chunk-AM5S4KG4.js → chunk-AFPHLUQ5.js} +1 -1
- package/dist/chunk-AW2XUHH4.js +2 -0
- package/dist/chunk-BKHXPBWN.js +2 -0
- package/dist/chunk-BRHNRCEZ.js +3 -0
- package/dist/chunk-BRIEBB2U.js +2 -0
- package/dist/{chunk-NJPTOKW5.js → chunk-C7HSWZP6.js} +1 -1
- package/dist/{chunk-JEUA4UWK.js → chunk-CLGC7VEO.js} +1 -1
- package/dist/chunk-CTW2VQKS.js +6 -0
- package/dist/{chunk-L4JIMNKW.js → chunk-CUM23TLF.js} +1 -1
- package/dist/chunk-DBIBROYW.js +5 -0
- package/dist/{chunk-L7VREJTG.js → chunk-DCY6R5DP.js} +1 -1
- package/dist/{chunk-X3ICV5M5.js → chunk-DO5HAO3H.js} +1 -1
- package/dist/chunk-DPUV6OSP.js +2 -0
- package/dist/{chunk-M7WQM4UA.js → chunk-DUAXZYAD.js} +1 -1
- package/dist/{chunk-HPMS5KO6.js → chunk-DZGCXKKI.js} +3 -3
- package/dist/chunk-EDSZJZFG.js +4 -0
- package/dist/{chunk-OIYGGEUL.js → chunk-ELM6MXGJ.js} +1 -1
- package/dist/{chunk-R2RGSO4B.js → chunk-EWCAFKLX.js} +1 -1
- package/dist/chunk-EYOCNMUM.js +2 -0
- package/dist/{chunk-73C4PRYU.js → chunk-FEJXWJ3L.js} +1 -1
- package/dist/{chunk-BAL64WSI.js → chunk-FMRSMN34.js} +1 -1
- package/dist/chunk-FNH55WSR.js +19 -0
- package/dist/chunk-FQLIW3LM.js +2 -0
- package/dist/{chunk-JRMDGLLT.js → chunk-G7VQCS4J.js} +1 -1
- package/dist/chunk-GCBKDX2J.js +2 -0
- package/dist/{chunk-AAONIIQV.js → chunk-GFKCTYCA.js} +1 -1
- package/dist/chunk-GKYPNSQP.js +26 -0
- package/dist/chunk-GPG3FIN3.js +21 -0
- package/dist/chunk-GZPK6FRP.js +7 -0
- package/dist/{chunk-NOCIMJSN.js → chunk-HCKH44I2.js} +1 -1
- package/dist/chunk-HEAIJCGZ.js +2 -0
- package/dist/{chunk-3FN5VJMV.js → chunk-HMYMSRA4.js} +1 -1
- package/dist/chunk-I7TIGB7K.js +2 -0
- package/dist/chunk-IDX3TOPY.js +6 -0
- package/dist/{chunk-CVOGP253.js → chunk-IMR64OCZ.js} +1 -1
- package/dist/{chunk-IBNC444G.js → chunk-IOD3HQVW.js} +1 -1
- package/dist/chunk-IOFZSQAA.js +2 -0
- package/dist/chunk-IP2O264K.js +3 -0
- package/dist/{chunk-CSQ46PJ7.js → chunk-JJHG3BWO.js} +1 -1
- package/dist/{chunk-5JTUL6XL.js → chunk-JZ26R6UL.js} +1 -1
- package/dist/chunk-KBM3XHAM.js +2 -0
- package/dist/{chunk-SY3HLQMV.js → chunk-KCCSWEGA.js} +1 -1
- package/dist/chunk-KFSUPQAG.js +66 -0
- package/dist/chunk-KRKGZ2ZW.js +47 -0
- package/dist/chunk-KU6IXFGZ.js +9 -0
- package/dist/chunk-L7MXYCD7.js +2 -0
- package/dist/chunk-MA34UWKX.js +4 -0
- package/dist/chunk-MBF3FP5P.js +5 -0
- package/dist/chunk-MSGW4JDG.js +2 -0
- package/dist/chunk-MXHHMIO2.js +349 -0
- package/dist/chunk-N2P4MI32.js +2 -0
- package/dist/{chunk-CDQX6HGJ.js → chunk-NX7TM662.js} +1 -1
- package/dist/chunk-OMQCD3KR.js +2 -0
- package/dist/{chunk-QROUKGKU.js → chunk-OS4VSIHT.js} +1 -1
- package/dist/chunk-OTTGS2TE.js +2 -0
- package/dist/chunk-QGKPLOUI.js +2 -0
- package/dist/{chunk-JKTFTF24.js → chunk-QRZRSAZH.js} +1 -1
- package/dist/{chunk-WJ5HDEVH.js → chunk-QSDH5P7C.js} +1 -1
- package/dist/{chunk-322JEJEH.js → chunk-QW6EZC53.js} +1 -1
- package/dist/{chunk-2XMJ6YAE.js → chunk-R5T4RLF5.js} +1 -1
- package/dist/chunk-R7QAS6LZ.js +4 -0
- package/dist/{chunk-LR5XO2KD.js → chunk-RC52N7PC.js} +1 -1
- package/dist/{chunk-33QXD75Y.js → chunk-RFR4ZKIC.js} +3 -3
- package/dist/{chunk-3LWTUMDG.js → chunk-RLRNLIRS.js} +1 -1
- package/dist/{chunk-XDHZMCTA.js → chunk-SDPRO2LE.js} +2 -2
- package/dist/chunk-T5Y6MOLM.js +4 -0
- package/dist/{chunk-4OPQJ7PE.js → chunk-TFPPEOAK.js} +1 -1
- package/dist/chunk-TH47OOBV.js +4 -0
- package/dist/{chunk-XVDJ423L.js → chunk-TKGUT425.js} +1 -1
- package/dist/{chunk-OHRS3H7Z.js → chunk-TRJUD3XJ.js} +1 -1
- package/dist/chunk-TYLYFERW.js +10 -0
- package/dist/chunk-TZXXJWHA.js +2 -0
- package/dist/chunk-UD7KKHPW.js +5 -0
- package/dist/{chunk-APAIWBIH.js → chunk-UDIQOJEL.js} +1 -1
- package/dist/chunk-UV462FZR.js +2 -0
- package/dist/{chunk-323MLBYA.js → chunk-UXDL4XDL.js} +1 -1
- package/dist/chunk-V2R3LCA3.js +12 -0
- package/dist/chunk-VAYBKR76.js +4 -0
- package/dist/{chunk-AH7ZZIZY.js → chunk-VRVFPMCR.js} +1 -1
- package/dist/chunk-W2JFDDIB.js +2 -0
- package/dist/chunk-W4B5LOEX.js +4 -0
- package/dist/{chunk-36OC3TFE.js → chunk-W5TTF7GB.js} +2 -2
- package/dist/chunk-WXHQYYD5.js +2 -0
- package/dist/{chunk-6HEGD6H2.js → chunk-XO5ZH3ZR.js} +1 -1
- package/dist/chunk-XWKUZJCP.js +2 -0
- package/dist/{chunk-2KBD6JZX.js → chunk-YFYCCTSL.js} +1 -1
- package/dist/{chunk-ZM5PVRJK.js → chunk-YJELGSKJ.js} +1 -1
- package/dist/chunk-YRFMPIU2.js +4 -0
- package/dist/{chunk-2XGDWUJ5.js → chunk-ZGBSGZZM.js} +1 -1
- package/dist/{chunk-NBKQT7LJ.js → chunk-ZIUAOEUC.js} +1 -1
- package/dist/chunk-ZMNJBUAO.js +2 -0
- package/dist/chunk-ZVHCQMJ6.js +13 -0
- package/dist/committer-SWEWEYNX.js +2 -0
- package/dist/{config-R3GF2FZA.js → config-RS47F5SC.js} +1 -1
- package/dist/{controller-client-RD2YEMAH.js → controller-client-OB4WD2C4.js} +1 -1
- package/dist/{cover-cmd-TXICWHUU.js → cover-cmd-HDZZWJXG.js} +1 -1
- package/dist/{credentials-XN4ROCQ3.js → credentials-OH6AVI6N.js} +1 -1
- package/dist/deps-resolve-XC5S53DG.js +2 -0
- package/dist/descriptor-OEUZZCOK.js +2 -0
- package/dist/design-committer-VYT6NU3T.js +2 -0
- package/dist/dispatch-SE5GY3Z2.js +2 -0
- package/dist/doctor-FSECFZUU.js +2 -0
- package/dist/docx-convert-JMUMT5C4.js +2 -0
- package/dist/{dossier-QZV74XOS.js → dossier-KTLTGT2X.js} +1 -1
- package/dist/evidence-OYPHZUKI.js +2 -0
- package/dist/evolve-cmd-BCPNXAMV.js +2 -0
- package/dist/exec-P2IKJRRR.js +2 -0
- package/dist/exit-manager-3FVBTNYR.js +2 -0
- package/dist/explain-UAAQWHYR.js +2 -0
- package/dist/{explain-cmd-X7JZLSZZ.js → explain-cmd-3GEKR7O5.js} +1 -1
- package/dist/{explain-cmd-RZW6QJYM.js → explain-cmd-EX24XKD6.js} +1 -1
- package/dist/extract-bind-LLEASZAK.js +10 -0
- package/dist/extract-cmd-UZMEZMGP.js +5 -0
- package/dist/feeder-C3TOJPKK.js +2 -0
- package/dist/{gaps-cmd-BWCRLLBK.js → gaps-cmd-IVXFPFAQ.js} +1 -1
- package/dist/{gate-YHBPWEM5.js → gate-54BRAE7N.js} +1 -1
- package/dist/{generate-headless-BSTDLZZY.js → generate-headless-D3SVQ2AI.js} +3 -3
- package/dist/{headless-io-BL3TEAX5.js → headless-io-66RG5NN5.js} +1 -1
- package/dist/host-7GZPBA74.js +2 -0
- package/dist/identity-ADZ4PAJF.js +2 -0
- package/dist/index.js +85 -69
- package/dist/ingest-EX72IEQT.js +2 -0
- package/dist/ingest-cmd-EAE7N5RC.js +2 -0
- package/dist/{interactive-bind-43HGDF5K.js → interactive-bind-ORMN2REX.js} +7 -6
- package/dist/{lifecycle-cmd-D6TVTYRK.js → lifecycle-cmd-O2324GN6.js} +1 -1
- package/dist/{list-cmd-XCAV2FKA.js → list-cmd-N4KMA34H.js} +1 -1
- package/dist/list-commands-MRXL5HGS.js +2 -0
- package/dist/locks-cmd-CSVSWY2Y.js +2 -0
- package/dist/logical-ids-TEBCQJGO.js +2 -0
- package/dist/login-flow-QJQM3RHT.js +2 -0
- package/dist/maintenance-cmd-6XSVO6FO.js +2 -0
- package/dist/mobile-prompts-TOX35ER6.js +2 -0
- package/dist/pdf-convert-OZIRUADA.js +2 -0
- package/dist/persist-recorded-session-TLDQ5HKP.js +3 -0
- package/dist/phase-seed-VFHIH6FL.js +2 -0
- package/dist/pipeline-UOM4LNAI.js +2 -0
- package/dist/prepare-target-QYWIJIVQ.js +2 -0
- package/dist/readmodel-XOYGGQ3S.js +2 -0
- package/dist/reconcile-cmd-3H34KVVD.js +2 -0
- package/dist/reconcile-deps-XIH75ZLY.js +4 -0
- package/dist/reconcile-engine-UKWPG2LV.js +2 -0
- package/dist/{recording-banner-TALO7PUR.js → recording-banner-4M7XHVGI.js} +1 -1
- package/dist/records-IOZTZUZV.js +2 -0
- package/dist/registry-PYOTKZYZ.js +2 -0
- package/dist/{require-project-folder-R347LFDQ.js → require-project-folder-4UPQNEBJ.js} +1 -1
- package/dist/resolve-run-intent-X72V3KJA.js +7 -0
- package/dist/{resolver-IDCGRPFJ.js → resolver-UBOZLFFE.js} +1 -1
- package/dist/revert-NQ7GEVSE.js +2 -0
- package/dist/review-cmd-DQRKQUMG.js +4 -0
- package/dist/run-2COODVX2.js +2 -0
- package/dist/run-URPGHOQM.js +2 -0
- package/dist/run-channel-RGH4WIQX.js +2 -0
- package/dist/{run-test-md-DFNIGYB7.js → run-test-md-76ZPKXO6.js} +3 -3
- package/dist/session-target-UWROGOCY.js +2 -0
- package/dist/sessions-GIEXOCE4.js +2 -0
- package/dist/{sessions-cmd-AQWLL5ZN.js → sessions-cmd-ZZIZN2VB.js} +4 -4
- package/dist/{skill-installer-ANXTCXQV.js → skill-installer-CIS6GAYF.js} +1 -1
- package/dist/spawner-J67QR4QP.js +2 -0
- package/dist/structured-answers-5EY2AZN7.js +5 -0
- package/dist/tcg-generate-BDTRKY2A.js +2 -0
- package/dist/testmd-actions-77ELR5UU.js +2 -0
- package/dist/token-refresh-4BPAPXKK.js +2 -0
- package/dist/types-6E2HTDKJ.js +2 -0
- package/dist/{validate-basic-O2DP2XJL.js → validate-basic-2GVSQ2R5.js} +1 -1
- package/dist/verdicts-TRSTJLCL.js +2 -0
- package/dist/{version-check-RNR3JCQ5.js → version-check-O6PYTI4T.js} +1 -1
- package/dist/{view-cmd-YSEGA5PI.js → view-cmd-KPJTP4DI.js} +1 -1
- package/dist/walk-session-CHJXHZMO.js +2 -0
- package/dist/with-telemetry-CQCWLVOC.js +2 -0
- package/package.json +12 -6
- package/dist/ChatSurface-D66CACLX.js +0 -8
- package/dist/ConfigView-DBANTBXC.js +0 -2
- package/dist/EvidenceViewOffer-DNCQ3A6R.js +0 -2
- package/dist/FolderPicker-W7RCIFEL.js +0 -2
- package/dist/SingleShotApp-SMCAIKCE.js +0 -2
- package/dist/TestMdRunView-FMKZJ3A3.js +0 -2
- package/dist/bind-AACBTSAA.js +0 -12
- package/dist/bootstrap-CNOZ5VRB.js +0 -2
- package/dist/bridge-T4HL4TG7.js +0 -2
- package/dist/chat-committer-4BQBOKI4.js +0 -2
- package/dist/chat-controller-NNTMKEPG.js +0 -2
- package/dist/chunk-2SREGETM.js +0 -4
- package/dist/chunk-3STZLM5J.js +0 -4
- package/dist/chunk-5YPBPZUR.js +0 -2
- package/dist/chunk-6UJDOAYR.js +0 -26
- package/dist/chunk-BQHKBOSF.js +0 -11
- package/dist/chunk-DQ54MH7F.js +0 -13
- package/dist/chunk-DXV6MBTD.js +0 -8
- package/dist/chunk-EV3EHXEI.js +0 -4
- package/dist/chunk-F7WKDMX7.js +0 -47
- package/dist/chunk-FPFOW6BS.js +0 -2
- package/dist/chunk-GVIPTX6T.js +0 -6
- package/dist/chunk-GW5DWAXY.js +0 -2
- package/dist/chunk-HJERKSBK.js +0 -349
- package/dist/chunk-IQDWBTRJ.js +0 -3
- package/dist/chunk-IXVOXJP6.js +0 -6
- package/dist/chunk-KNDSQ4PS.js +0 -2
- package/dist/chunk-KRXSXQBU.js +0 -12
- package/dist/chunk-LQZ2BU7Q.js +0 -2
- package/dist/chunk-NAC7SFBE.js +0 -5
- package/dist/chunk-NAE7MBR2.js +0 -23
- package/dist/chunk-NRC2G4Y5.js +0 -5
- package/dist/chunk-O56PUUNL.js +0 -9
- package/dist/chunk-QM4S2APK.js +0 -2
- package/dist/chunk-RKWJG3WW.js +0 -19
- package/dist/chunk-RNSSM2BK.js +0 -11
- package/dist/chunk-SE6WNCYU.js +0 -4
- package/dist/chunk-SRDHPKJT.js +0 -2
- package/dist/chunk-SWESH2J7.js +0 -10
- package/dist/chunk-T63R6QT4.js +0 -4
- package/dist/chunk-UI7KULSI.js +0 -7
- package/dist/chunk-UPPEOQJQ.js +0 -3
- package/dist/chunk-URQUQWGW.js +0 -62
- package/dist/chunk-UX2B7L6K.js +0 -2
- package/dist/chunk-VOHQA2SP.js +0 -2
- package/dist/chunk-W5DOU2DV.js +0 -2
- package/dist/chunk-W6VD2XFO.js +0 -19
- package/dist/chunk-WAOCHXJ5.js +0 -2
- package/dist/chunk-WWNSD6FA.js +0 -6
- package/dist/chunk-ZLCZDAEX.js +0 -6
- package/dist/committer-2EJPVVCQ.js +0 -2
- package/dist/descriptor-KXDJ4XYD.js +0 -2
- package/dist/design-committer-BQUWD6AC.js +0 -2
- package/dist/docx-convert-ZBVQO2LG.js +0 -2
- package/dist/evidence-V23FPVXQ.js +0 -2
- package/dist/evolve-cmd-PZCPXDMR.js +0 -2
- package/dist/exit-manager-HNFATGSM.js +0 -2
- package/dist/explain-UE4IACQH.js +0 -2
- package/dist/extract-bind-BFY7IRL4.js +0 -10
- package/dist/extract-cmd-U3MGK2LP.js +0 -6
- package/dist/feeder-XGTFV7TZ.js +0 -2
- package/dist/ingest-AL6CABJT.js +0 -2
- package/dist/ingest-cmd-O6OWWZT4.js +0 -2
- package/dist/list-commands-747UTUSS.js +0 -2
- package/dist/locks-cmd-QAULI5LV.js +0 -2
- package/dist/logical-ids-4G4FAHNJ.js +0 -2
- package/dist/login-flow-CV76ENHV.js +0 -2
- package/dist/maintenance-cmd-ZRB4NTGG.js +0 -2
- package/dist/pdf-convert-S7VYE6AV.js +0 -2
- package/dist/persist-recorded-session-MDPWWUA7.js +0 -3
- package/dist/phase-seed-52LRE3LH.js +0 -2
- package/dist/pipeline-LM5JAK7F.js +0 -2
- package/dist/readmodel-X7L7W2BA.js +0 -2
- package/dist/reconcile-cmd-DGCSDML6.js +0 -2
- package/dist/records-5SVUXJBW.js +0 -2
- package/dist/revert-DXXYXJGN.js +0 -2
- package/dist/review-cmd-2QF5HTI7.js +0 -4
- package/dist/run-52UIBPXD.js +0 -2
- package/dist/run-VRVH4VO3.js +0 -2
- package/dist/sessions-BLXZVK5U.js +0 -2
- package/dist/spawner-AH5FTUYU.js +0 -2
- package/dist/structured-answers-QHFGZPSS.js +0 -5
- package/dist/tcg-generate-WKCBBKI5.js +0 -2
- package/dist/testmd-actions-RPYG6TJG.js +0 -2
- package/dist/token-refresh-NIDUOTRM.js +0 -2
- package/dist/verdicts-TJH3O5UW.js +0 -2
- package/dist/walk-session-HXW4OSA2.js +0 -2
- package/dist/with-telemetry-PNP6CAVM.js +0 -2
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{j as we,k as ie,l as oe,m as ye,n as ke,o as se}from"./chunk-3POR47RC.js";import{a as ne,c as te,d as ve,f as re}from"./chunk-RLRNLIRS.js";import{a as E,b as ge,d as he}from"./chunk-OS4VSIHT.js";import{a as H}from"./chunk-CLGC7VEO.js";import{a as Q,b as K,c as X,d as N,e as pe,g as C,h as ee}from"./chunk-W5TTF7GB.js";import{a as me}from"./chunk-JFAFKHDX.js";import{b as z,c as Z,d as J}from"./chunk-7BZSCUPP.js";import{e as ue,g as fe}from"./chunk-W4B5LOEX.js";import{A as S}from"./chunk-TH47OOBV.js";import{f as F}from"./chunk-DUAXZYAD.js";import{existsSync as De,statSync as xe}from"fs";import{basename as W,resolve as G}from"path";var _e=new Set(["interactive","agent","ci","override"]);function Se(e,n){if(e.mode!==void 0&&!_e.has(e.mode))return{error:`--mode must be interactive | agent | ci | override, got '${e.mode}'`,code:"MODE_USAGE"};let t=e.mode,r="reconcile without a TTY needs an explicit mode \u2014 pass --mode agent|ci|override, or --plan for a preview";return t==="interactive"&&!n?{error:r}:t||(n?"interactive":e.plan?"override":{error:r})}async function Re(e){let{makeHeadlessIO:n,agentRefusal:t}=await import("./headless-io-66RG5NN5.js");return t(n("ndjson","reconcile"),e,"MODE_USAGE")}function Oe(e,n,t,r){if(Z(t)){let v=J(t),a=v?.sourceIdFor(t)??null;if(v===null||a===null)return{error:`--from '${t}' is not a supported remote URL \u2014 supported: ${z.map(u=>u.hint).join("; ")}`};if(r!==void 0&&r!==a)return{error:`--source-id '${r}' does not match this URL's own identity '${a}' \u2014 re-run without --source-id. A source adopted with --as updates by re-running context ingest with the same --as; reconcile follows only the URL's own id`};let c=S(e);if(!c.heads.has(a))return{error:`unknown source '${a}' \u2014 see \`kane-cli context list --type source\`. If this URL was ingested under a custom id, update it by re-running context ingest with the same --as`};if(c.heads.get(a)==null)return{error:`source '${a}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let $=q(e,a,{remoteUrl:t});return $!==null?{error:$}:{sourceId:a,remoteUrl:t}}if(r===void 0)return{error:"reconcile needs --from <file> AND --source-id <id> \u2014 see `kane-cli context list --type source` for ids"};let i=G(n,t);if(!De(i)||!xe(i).isFile())return{error:`--from '${t}' is not a file \u2014 pass the changed source document`};let l=ue(i);if(!l.ok)return{error:`--from '${t}' is not an ingestable document \u2014 allowed: ${l.allowlist.join(", ")}`};let o=S(e);if(!o.heads.has(r))return{error:`unknown source '${r}' \u2014 see \`kane-cli context list --type source\``};if(o.heads.get(r)==null)return{error:`source '${r}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let w=q(e,r,{filePath:i});if(w!==null)return{error:w};let d=null;try{d=fe(i)}catch{}return d!==null&&d!==r&&o.heads.get(d)!=null?{error:`'${W(i)}' already backs live source '${d}' \u2014 did you mean --source-id ${d}? To truly move these bytes under '${r}', retire '${d}' first`}:{sourceId:r,filePath:i}}function O(e){return e==null?"(none)":e.slice(0,19)}function j(e,n,t,r=!1,i){if(e.out(`reconcile ${n.source_id}: head ${n.head.status} \u2014 ${O(n.head.before)} \u2192 ${O(n.head.after)}`),r||(e.out(`note: ${n.note}`),e.out(`skipped arms: ${n.skipped_arms}`)),n.changed&&(e.out(n.held?`extract ran in override mode; ${t?.defaultsTaken??0} default(s) auto-taken; matched-but-changed and new proposals HELD for your verdict (staged \u2014 nothing committed)`:`extract ran in override mode; ${t?.defaultsTaken??0} default(s) auto-taken; matched-but-changed proposals auto-committed as edits`),i?.({type:"defaults_taken",count:t?.defaultsTaken??0})),r){let l=n.changeset??[],o=(d,v)=>{let a=l.filter(c=>c.kind===d).length;return a>0?`${a} ${v}`:null},w=[o("ADD","add"),o("MODIFY","modify"),o("ARCHIVE","archive")].filter(Boolean);n.changed&&e.out(`changeset: ${l.length} item(s)${w.length?` \u2014 ${w.join(" \xB7 ")}`:""}`),e.out(`plan: ${n.rows.length} row(s) \u2014 each gets a card below`);return}if(n.changed){let l=n.changeset??[];e.out(`changeset: ${l.length} item(s)`);for(let o of l)if(o.kind==="MODIFY")e.out(` [MODIFY] ${H(o.ref)} \u2014 ${o.summary} (${O(o.old_cid)} \u2192 ${o.new_cid===null?"(staged)":O(o.new_cid)})`);else if(o.kind==="ADD")e.out(` [ADD] ${H(o.ref)}`);else{e.out(` [ARCHIVE] ${H(o.ref)} \u2014 ${o.why}`);let w=ae(o.impact,"retiring drops");w&&e.out(` ${w}`)}}e.out(`plan: ${n.rows.length} row(s)`);for(let l of n.rows){e.out(` [${l.kind}] ${H(l.ref)} \u2014 ${l.reason}`);let o=ae(l.impact,"approving marks");o&&e.out(` ${o}`),e.out(` provenance: ${l.provenance}`),e.out(` action: ${l.action}`)}}function ae(e,n){if(!e||e.stale_refs.length===0)return null;let t=e.direct_refs??[];return`impact: ${n} ${e.stale_refs.length} item(s) stale`+(t.length>0?` \u2014 ${t.length} directly touched: ${t.join(", ")}`:"")}function x(e){return e==="interactive"?"override":e}async function A(e,n,t,r,i,l,o=[],w="override",d,v,a,c,$){let u;try{u=ee(e)}catch(R){return E(r,R instanceof Error?R.message:String(R)),1}try{if(!t){let{runWalkSession:R}=await import("./walk-session-CHJXHZMO.js");return await R({dir:e,rows:n,archive:o,held:d??null,childMode:w,runDesign:c??null,mark:l,markA:a,...v?{archiveState:v}:{},signals:m=>I(e,m.ref,m.verdict,m.reason),...$?{script:$}:{}})}return await Ie(e,n,t,r,i,l,o,w,d,v)}finally{u()}}var L=e=>`${e} high-risk item(s) need a human \u2014 ci mode won't guess. Walk interactively or use --mode agent.`;function M(e,n,t){let r=n.rows;e({type:"reconcile_plan",source_id:n.source_id,plan_path:t,rows:r.map(i=>({kind:i.kind,ref:i.ref,why:i.reason})),archive:n.changeset.filter(i=>i.kind==="ARCHIVE").map(i=>({ref:i.ref,why:i.why}))})}function ce(e={}){return{type:"reconcile_summary",applied:0,skipped:0,deferred:0,plan_only:0,failed:0,paused:0,stale_created:0,...e}}var V=ce();async function B(e,n,t,r,i,l,o,w,d){M(i,n,t);let v=n.changeset.filter($=>$.kind==="ARCHIVE"&&d?.[$.ref]===void 0),a=n.rows,c;try{c=ee(e)}catch($){return i({type:"error",message:$ instanceof Error?$.message:String($)}),i(ce()),2}try{return await Ce(e,n,t,r,i,l,o,a,v,w)}finally{c()}}async function Ce(e,n,t,r,i,l,o,w,d,v){let a=0,c=0,$=0,u=0,R=0,m=0,f=0,P=new Set,b=(g,p)=>{try{v?.(g,p)}catch{}};for(let[g,p]of w.entries()){i({type:"reconcile_row_start",kind:p.kind,ref:p.ref,...p.impact?{stale:p.impact.stale_refs.length,direct:p.impact.direct_refs?.length??0}:{}});let h=(s,_,D)=>i({type:"reconcile_row_end",kind:p.kind,ref:p.ref,outcome:s,..._!==void 0?{exit_code:_}:{},...D?{detail:D}:{}});if(p.applied){c++,h("skipped");continue}if(p.kind==="REMOVE"){R++,h("plan-only");continue}if(p.held_ref&&n.held){let s=new Set;if(p.kind==="MODIFY"&&p.impact){let D=S(e);for(let U of p.impact.stale_refs){let Y=D.resolve(U);Y&&D.stale(Y.tip)==="fresh"&&s.add(U)}}let _=ie(e,n.held,p.held_ref,le);if(!_.ok){$++,f===0&&(f=1),h("failed",1,_.message);continue}if(_.kind==="ADD"){let D=await r(_.ref,{yes:!0,mode:o});if(D!==0){D===3?(u++,f===0&&(f=3),h("paused",3)):($++,f===0&&(f=1),h("failed",D));continue}}a++,_.kind!=="ADD"&&p.impact&&(m+=s.size),b(g,"approved"),I(e,p.ref,_.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve"),h("applied");continue}let k=ne(S(e),p.ref);if(!k.ok){c++,h("skipped");continue}let y=k.target;if(P.has(y.ucTip)){c++,h("skipped");continue}if(p.kind==="ADD"){let s=await r(y.seamRef,{yes:!0,mode:o});if(s===3){u++,f===0&&(f=3),h("paused",3);continue}if(s!==0){$++,f===0&&(f=1),h("failed",s);continue}P.add(y.ucTip),a++,b(g,"approved"),I(e,p.ref,"gap-resolved-create"),h("applied")}else{let s=await te(e,y,{yes:!0,mode:o},l,r,"batch");s.outcome==="evolved"?(P.add(y.ucTip),a++,b(g,"approved"),I(e,p.ref,"gap-resolved-evolve"),h("applied")):s.outcome==="paused"?(u++,f===0&&(f=s.code),h("paused",s.code)):s.outcome==="failed"?($++,f===0&&(f=1),h("failed",s.code)):(c++,h("skipped"))}}return d.length>0&&(i({type:"reconcile_paused",plan_path:t,pending:d.map(g=>({ref:g.ref,why:g.why}))}),u+=d.length,f===0&&(f=3)),i(ce({applied:a,skipped:c,plan_only:R,failed:$,paused:u,stale_created:m})),f}var le={kind:"human",id:process.env.USER??"operator"};function I(e,n,t,r){me(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:n,verdict:t,polarity:"preference",by:le,target:n,...r!==void 0?{reason:r}:{}})}async function Ie(e,n,t,r,i,l,o=[],w="override",d,v){let a=0,c=0,$=0,u=0,R=0,m=0,f=0,P=new Set;for(let[b,g]of n.entries()){if(g.applied){r.out(`skipped ${g.ref} \u2014 already applied (${g.applied.outcome} at ${g.applied.at})`),c++;continue}let p=s=>{try{l?.(b,s)}catch(_){E(r,`could not record applied state for ${g.ref}: ${_ instanceof Error?_.message:String(_)}`)}};if(g.kind==="REMOVE"){r.out(`REMOVE ${g.ref} \u2014 plan-only in this release (not executed)`),u++;continue}if(g.held_ref&&d){let s=ie(e,d,g.held_ref,le);if(!s.ok){E(r,`held ${g.ref}: ${s.message}`),R++,f===0&&(f=1);continue}if(r.out(`committed ${s.ref} (${g.kind==="ADD"?"minted":"updated \u2014 old\u2192new redirect"})`),s.kind==="ADD"){let _=await i(s.ref,{yes:t,mode:w});if(_===3){r.out(`design session for ${s.ref} paused \u2014 resume with the "kane-cli design tests --resume <session>" command printed above`),m++,f===0&&(f=3),p("approved");continue}if(_!==0){E(r,`design run for ${s.ref} ended with exit code ${_}`),R++,f===0&&(f=1),p("approved");continue}}a++,p("approved"),I(e,g.ref,g.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve");continue}let h=S(e),k=ne(h,g.ref);if(!k.ok){r.out(`skipped ${g.ref} \u2014 ${k.message}`),c++;continue}let y=k.target;if(P.has(y.ucTip)){r.out(`skipped ${g.ref} \u2014 use-case ${y.display} already handled in this walk`),c++;continue}if(g.kind==="ADD"){let s=await i(y.seamRef,{yes:t,mode:w});if(s===3){r.out(`design session for ${y.display} paused \u2014 resume with the "kane-cli design tests --resume <session>" command printed above; this row lands when that session completes`),m++,f===0&&(f=3);continue}if(s!==0){E(r,`design run for ${y.display} ended with exit code ${s}`),R++,f===0&&(f=1);continue}P.add(y.ucTip),a++,p("approved"),I(e,g.ref,"gap-resolved-create")}else{let s=await te(e,y,{yes:!0,mode:w},r,i,"batch");s.outcome==="evolved"?(P.add(y.ucTip),a++,p("approved"),I(e,g.ref,"gap-resolved-evolve")):s.outcome==="paused"?(m++,f===0&&(f=s.code)):s.outcome==="failed"?(R++,f===0&&(f=s.code)):c++}}for(let b of o)if(b.kind==="ARCHIVE"&&v?.[b.ref]===void 0){r.out(`[ARCHIVE] ${b.ref} \u2014 ${b.why}`);{let g=ae(b.impact,"retiring drops");g&&r.out(` ${g}`)}r.out(" plan-only \u2014 retire belongs to the interactive session (never headless)"),u++}return r.out(`reconcile walk: ${a} applied, ${c} skipped, ${$} deferred, ${u} plan-only`+(R>0?`, ${R} failed`:"")+(m>0?`, ${m} paused`:"")),f}var Ue=new Set(z.map(e=>e.name));function q(e,n,t){let r=S(e),i=r.heads.get(n);if(i==null)return null;let l=r.mediaOf(i);if("remoteUrl"in t){let o=J(t.remoteUrl)?.name??"remote";return l.format!==o?`source '${n}' is backed by ${l.format} content, not a ${o} source \u2014 reconcile it with the --from it was originally ingested from`:null}return Ue.has(l.format)?`source '${n}' is a remote ${l.format} source \u2014 pass its URL to --from, not a file`:null}function de(e,n,t,r){return"remoteUrl"in n?ke(e,n.remoteUrl,{out:t.out,err:t.err},r.remoteFindProvider):ye(e,n.filePath)}function Ee(e){return e.remote_url!==void 0?{remoteUrl:e.remote_url}:e.backing_path!==void 0?{filePath:e.backing_path}:null}async function Pe(e,n,t,r,i,l=!1,o=!1){let w=i.seams??{reingest:de(e,t,r,i),reextract:se(e,{stage:l,hostOut:c=>r.out(c),hostEmit:c=>{c.type!=="run_start"&&i.emitEvent?.(c)},...i.emitEvent?{}:{hostProgress:c=>process.stderr.write(c+`
|
|
3
|
+
`)}})},d=null,v={reingest:w.reingest,reextract:async c=>d=await w.reextract(c)},a;try{r.out(`reconciling ${n}: re-reading the source and comparing against the graph\u2026`),a=await(i.buildPlan??oe)(e,n,v)}catch(c){return E(r,`reconcile failed: ${c instanceof Error?c.message:String(c)}`),null}return a.changed&&j(r,a,d,o,i.emitEvent),a}async function Ae(e){let[{render:n},t,{ScrollbackProvider:r},{ChatSurface:i},{makeChatController:l},{makeReconcileDeps:o}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-U37VZDCW.js"),import("./chat-controller-T2FAI55V.js"),import("./reconcile-deps-XIH75ZLY.js")]),w=t.default??t,d=l(),v=o({contextDir:e,note:a=>d.note(a)});return new Promise(a=>{let c=n(w.createElement(r,null,w.createElement(i,{controller:d,verb:"extract",reconcile:v,autoReview:!0,onReviewExit:()=>{c.unmount(),a(0)},onCtrlC:()=>{c.unmount(),a(v.pending()?3:0)}})),{exitOnCtrlC:!1})})}async function Me(e,n,t,r,i){let l=K(e,n);if("error"in l)return E(r,l.error),2;let{plan:o,path:w}=l,d=t==="override"||t==="ci";if(n===void 0&&t==="interactive"&&r.isTTY&&!await r.confirm(`apply plan ${W(w)} for ${o.source_id} (created ${o.created})?`))return r.out(`not applying ${W(w)}`),0;let v=i.runDesignForUc??re,a=i.runDesignForUc??null,c=i.sessionScript,$=(g,p)=>C(w,g,p),u=(g,p)=>N(w,g,p),R=F(e);if(R===o.head_pin){if(t==="agent"){let p=i.emitEvent??(()=>{});return B(e,T(o),w,v,p,r,x(t),$,o.archive_state)}let g=X(o);return t==="ci"&&g.length>0?(E(r,L(g.length)),2):(r.out(`applying stored plan ${W(w)} for ${o.source_id} (${o.rows.length} row(s))`),A(e,o.rows,d,r,v,$,o.changeset??[],x(t),o.held,o.archive_state,u,a,c))}if(r.out(`graph moved since this plan (${O(o.head_pin)} \u2192 ${O(R)}) \u2014 recomputing`),o.held)return be(e,o,r,i,t,v,!1);let m=Ee(o);if(m===null)return E(r,`stored plan for ${o.source_id} names no backing file or URL \u2014 re-run reconcile --from`),2;let f=q(e,o.source_id,m);if(f!==null)return E(r,`stored plan cannot replay: ${f}`),2;let P=await Pe(e,o.source_id,m,r,i,!1,t==="interactive");if(!P)return 1;if(!P.changed)return j(r,P,null,!1,i.emitEvent),0;if(t==="agent"){let g=i.emitEvent??(()=>{});return B(e,P,null,v,g,r,x(t))}let b=P.changeset.filter(g=>g.kind==="ARCHIVE");return t==="ci"&&b.length>0?(E(r,L(b.length)),2):A(e,P.rows,d,r,v,void 0,P.changeset,x(t),P.held,void 0,void 0,a,c)}function T(e,n=!1){return{source_id:e.source_id,changed:!0,head:{status:"unchanged",before:e.head_pin,after:e.head_pin},note:e.note,skipped_arms:e.skipped_arms,changeset:e.changeset??[],rows:n?e.rows.filter(t=>t.applied===void 0):e.rows,...e.held?{held:e.held}:{}}}async function Fe(e,n,t,r,i,l,o){let w=r.runDesignForUc??null,d=r.sessionScript,v=pe(e,n);if(v===null)return null;if("error"in v)return E(t,v.error),2;let{plan:a,path:c}=v,$=a.rows.filter(f=>f.applied===void 0),u=X(a),R=r.emitEvent??(()=>{});if($.length===0&&u.length===0){t.out(`already reconciled \u2014 plan ${a.created} applied ${a.rows.length} row(s)`);let f=ve(S(e)).staleCount;return f>0&&(t.out(`${f} item(s) still stale \u2014 kane-cli maintain evolve --from-stale`),R({type:"stale_debt",count:f})),i==="agent"&&(M(R,T(a),c),R({...V})),0}let m=F(e);return m!==a.head_pin?(t.out(`plan ${a.created} superseded \u2014 graph moved (${O(a.head_pin)} \u2192 ${O(m)}); recomputing`),be(e,a,t,r,i,l,o)):(t.out(`resuming plan ${a.created} \u2014 ${$.length} pending row(s)${u.length>0?`, ${u.length} undecided archive item(s)`:""}`),o?(j(t,T(a),null,!1,r.emitEvent),t.out(`plan stored: ${c}`),i==="agent"&&(M(R,T(a),c),R({...V})),0):i==="agent"?B(e,T(a),c,l,R,t,x(i),(f,P)=>C(c,f,P),a.archive_state):i==="ci"&&u.length>0?(E(t,L(u.length)),2):A(e,a.rows,i==="override"||i==="ci",t,l,(f,P)=>C(c,f,P),a.changeset??[],x(i),a.held,a.archive_state,(f,P)=>N(c,f,P),w,d))}async function be(e,n,t,r,i,l,o){let w=r.runDesignForUc??null,d=r.sessionScript,v;if(n.held){let h=S(e),k=new Set(n.rows.filter(s=>s.held_ref!==void 0&&s.applied!==void 0).map(s=>s.held_ref)),y=[];for(let s of n.held.rows){if(k.has(s.temp_ref))continue;if(!s.matched_cid){y.push(s);continue}let _=h.tipOf(s.matched_cid);if(h.superseded.get(_)===null){t.out(`dropped held "${s.title}" \u2014 its use-case was retired meanwhile`),r.emitEvent?.({type:"held_dropped",ref:s.temp_ref,title:s.title,reason:"target_retired"});continue}y.push(_===s.matched_cid?s:{...s,matched_cid:_,uc:{...s.uc,matches_existing:{cid:_}}})}v={source_id:n.held.source_id,rows:y}}let a=Ee(n);if(a===null)return E(t,`stored plan for ${n.source_id} names no backing file or URL \u2014 re-run reconcile --from`),2;let c=q(e,n.source_id,a);if(c!==null)return E(t,`stored plan cannot replay: ${c}`),2;let $=r.seams??{reingest:de(e,a,t,r),reextract:se(e,{stage:v!==void 0,hostOut:h=>t.out(h),hostEmit:h=>{h.type!=="run_start"&&r.emitEvent?.(h)},...r.emitEvent?{}:{hostProgress:h=>process.stderr.write(h+`
|
|
4
|
+
`)}})},u;try{u=await(r.buildPlan??oe)(e,n.source_id,$,{resumeHeld:v})}catch(h){return E(t,`reconcile failed: ${h instanceof Error?h.message:String(h)}`),1}j(t,u,null,i==="interactive"&&!o,r.emitEvent);let R=F(e),m=null;if(R!=null){let h={},k=new Set(u.changeset.filter(y=>y.kind==="ARCHIVE").map(y=>y.ref));for(let[y,s]of Object.entries(n.archive_state??{}))k.has(y)&&(h[y]=s);m=Q(e,{version:2,source_id:u.source_id,...n.remote_url!==void 0?{remote_url:n.remote_url}:{backing_path:n.backing_path},head_pin:R,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:u.skipped_arms,note:u.note,changeset:u.changeset,rows:u.rows,...u.held?{held:u.held}:{},...Object.keys(h).length>0?{archive_state:h}:{}}),t.out(`plan stored: ${m}`)}if(o){if(i==="agent"){let h=r.emitEvent??(()=>{});M(h,u,m),h({...V})}return 0}let f=r.emitEvent??(()=>{}),P=m?K(e,m).plan.archive_state:void 0,b=m?(h,k)=>C(m,h,k):void 0,g=m?(h,k)=>N(m,h,k):void 0;if(i==="agent")return B(e,u,m,l,f,t,x(i),b,P);let p=u.changeset.filter(h=>h.kind==="ARCHIVE"&&P?.[h.ref]===void 0);return i==="ci"&&p.length>0?(E(t,L(p.length)),2):A(e,u.rows,i==="override"||i==="ci",t,l,b,u.changeset,x(i),u.held,P,g,w,d)}async function $e(e,n,t={},r=process.cwd()){let{telemetryBootstrap:i,telemetryEnvName:l}=await import("./bootstrap-44YKVWWE.js"),o=i({verb:"reconcile",mode:typeof e.mode=="string"?e.mode:"interactive",contextRoot:G(r,".context"),env:l(),applyPlanPath:typeof e.apply=="string"?G(r,e.apply):void 0,write:!0,longSession:!0});e.mode==="agent"&&t.emitEvent?.({type:"run_start",session:o.ids.session_id});let w=await He(e,n,t,r);return w===1&&e.mode!=="agent"&&(n.err??n.out)(o.supportFooter()),await o.end({exit_code:w}),w}async function He(e,n,t={},r=process.cwd()){let i=e.apply!==void 0&&e.apply!==!1,l=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&i)return E(n,"pass --plan OR --apply, not both"),2;let o=e.from!==void 0||!i,w=e.from!==void 0&&Z(e.from);if(o&&(!e.from||!e.sourceId&&!w))return E(n,"reconcile needs --from <file|url> AND --source-id <id> (files only \u2014 a URL derives its own id) \u2014 see `kane-cli context list --type source` for ids"),2;if(e.from&&l!==void 0)return E(n,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let d=ge(r,n);if(!d)return 2;if(e.mode!==void 0&&!_e.has(e.mode))return Re(`--mode must be interactive | agent | ci | override, got '${e.mode}'`);let v=e.mode==="agent"||e.mode==="ci"||e.mode==="override";if(i&&!v&&!n.isTTY)return E(n,"refusing to apply without a TTY to confirm \u2014 pass --mode override|ci"),2;let a=!e.plan,c="override";if(e.from){let k=Se(e,n.isTTY);if(typeof k=="object")return k.code==="MODE_USAGE"?Re(k.error):(E(n,k.error),2);c=k}let $=c==="override"||c==="ci";if(i&&!e.from){let{makeReconcileDeps:k}=await import("./reconcile-deps-XIH75ZLY.js"),y=l===void 0?k({contextDir:d}).pending():null;if(y?.kind==="cards"){let _=e.mode??"interactive";return!n.isTTY||_!=="interactive"?(E(n,`a held changeset for ${y.source} awaits review (${y.count} change(s)) \u2014 resume in a terminal: kane-cli maintain reconcile --apply [HELD_REVIEW]`),2):(t.cardApplyMount??Ae)(d)}let s=e.mode??"interactive";return Me(d,l===void 0?void 0:G(r,l),s,n,t)}let u=Oe(d,r,e.from,e.sourceId);if("error"in u)return E(n,u.error),2;if(!i){let{sessionsHoldingSource:k}=await import("./sessions-GIEXOCE4.js"),{holders:y,corrupt:s}=k(d,u.sourceId);if(s>0)return E(n,`cannot verify review holds \u2014 ${s} session file(s) unreadable; inspect with kane-cli context sessions list, clean with kane-cli context sessions clean, then retry [SESSIONS_UNREADABLE]`),2;if(y.length>0)return E(n,`session ${y[0]} holds item(s) for review pinned to ${u.sourceId} \u2014 finish that review first: kane-cli context extract --resume ${y[0]} [SOURCE_HELD]`),2}if(c==="interactive"&&!e.plan&&!i){let k=t.seams?.reingest??de(d,u,n,t),y;try{y=await k(u.sourceId)}catch(_){return E(n,_ instanceof Error?_.message:String(_)),1}let s=y.status==="unchanged"?null:we(d,u.sourceId);if(y.status!=="unchanged"&&!s)return n.out(`${u.sourceId} landed for the first time \u2014 extract it: kane-cli context extract --source ${u.sourceId}`),0;if(s){let D=await(t.chatMount??(async U=>{let{bindExtractInteractive:Y}=await import("./extract-bind-LLEASZAK.js");return Y(U)}))({mode:"interactive",posture:"reconcile",source:u.sourceId,changeContext:s});if(D===3){let{sessionsHoldingSource:U}=await import("./sessions-GIEXOCE4.js");if(U(d,u.sourceId).holders.length===0)return 0}return D}}let R="remoteUrl"in u?{remoteUrl:u.remoteUrl}:{filePath:u.filePath},m=await Pe(d,u.sourceId,R,n,t,!!e.plan||c==="interactive",c==="interactive"&&!e.plan);if(!m)return 1;let f=t.runDesignForUc??re,P=t.runDesignForUc??null,b=t.sessionScript;if(!m.changed){let k=await Fe(d,u.sourceId,n,t,c,f,!!e.plan);if(k!==null)return k;if(j(n,m,null,!1,t.emitEvent),c==="agent"){let y=t.emitEvent??(()=>{});M(y,m,null),y({...V})}return 0}let g=F(d),p=null;if(g!=null?p=Q(d,{version:2,source_id:m.source_id,..."remoteUrl"in R?{remote_url:R.remoteUrl}:{backing_path:R.filePath},head_pin:g,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:m.skipped_arms,note:m.note,changeset:m.changeset,rows:m.rows,...m.held?{held:m.held}:{}}):E(n,"no chain head after extract \u2014 plan not stored"),c==="agent"){let k=t.emitEvent??(()=>{});if(!a)return M(k,m,p),k({...V}),0;let y=p?(s,_)=>C(p,s,_):void 0;return B(d,m,p,f,k,n,x(c),y)}if(!a)return p&&n.out(`plan stored: ${p}`),0;let h=m.changeset.filter(k=>k.kind==="ARCHIVE");if(c==="ci"&&h.length>0)return p&&n.out(`plan stored: ${p}`),E(n,L(h.length)),2;if(p){n.out(`plan stored: ${p}`);let k=p;return A(d,Te(d,k)??m.rows,$,n,f,(y,s)=>C(k,y,s),m.changeset,x(c),m.held,void 0,void 0,P,b)}return A(d,m.rows,$,n,f,void 0,m.changeset,x(c),m.held,void 0,void 0,P,b)}function Te(e,n){let t=K(e,n);return"error"in t?null:t.plan.rows}async function Xe(e,n={},t,r=process.cwd()){if(e.mode==="agent"){let{makeHeadlessIO:i}=await import("./headless-io-66RG5NN5.js"),l=t?i("ndjson","reconcile",t):i("ndjson","reconcile"),o={out:l.out,err:v=>l.event({type:"error",message:v}),isTTY:!1,confirm:async()=>!1,ask:async()=>""},{runWithChannel:w}=await import("./run-channel-RGH4WIQX.js"),d=2;try{d=await w({event:v=>l.event(v)},()=>$e(e,o,{...n,emitEvent:v=>l.event(v)},r))}catch(v){d=1,l.event({type:"error",message:v instanceof Error?v.message:String(v)})}return l.done(d)}return $e(e,he(),n,r)}export{Se as a,Oe as b,x as c,I as d,$e as e,Xe as f};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as V,b as $,c as ce,d as R}from"./chunk-2YQ6TW77.js";import{b as z}from"./chunk-CJJXT5DO.js";import{a as B}from"./chunk-2WVKOZ6W.js";import{a as M}from"./chunk-DPUV6OSP.js";import{a as F}from"./chunk-NLCCBXXV.js";import{a as x}from"./chunk-RZ4F3BHX.js";import{e as le}from"./chunk-UR6MHSHU.js";import{readFileSync as oe,existsSync as j,readdirSync as Se,mkdirSync as U,writeFileSync as k}from"fs";import{readFile as ae,unlink as Te}from"fs/promises";import{join as E}from"path";import{existsSync as ye,mkdirSync as Ae,readdirSync as ee,writeFileSync as Re}from"fs";import{join as L}from"path";import{randomUUID as P}from"crypto";var ue="/home/kaneai/Downloads";function w(t){return`${ue}/${t}`}function K(t){return"FILE__"+t.replace(/[^A-Za-z0-9]/g,"_")}function C(t){let e=t?.media;return!e||!e.name||!e.media_url?null:{media_id:e.media_id??"",name:e.name,media_url:e.media_url,type:e.type??"doc"}}function H(t){return t?t.includes(`
|
|
3
|
+
`)?t.split(`
|
|
4
|
+
`).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function T(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(s,i)=>{let n=e[i];return n?n.value:s}).replace(/\$\{(.+?)\}/g,(s,i)=>{let n=e[i];return n?n.value:s})}var de={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",clear:"CLEAR",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD"},X={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},_e=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function W(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return X[i]}let s=de[t];return s||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),s??t.toUpperCase()}function Y(t,e){if(!t||!e)return"";try{let s=new Date(t);return isNaN(s.getTime())?"":new Date(s.getTime()+e).toISOString()}catch{return""}}function J(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function pe(t){let e=t.output_variable??"";if(!e)return"[]";let i={...J(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||P().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function ge(t,e,s){let i=t.action_params??{},n=_e.has(e)?"Vision Agent":"Operation Agent",r={operation_type:e};if(e==="OPEN"&&(r.url=i.url??""),e==="SET_VARIABLE"&&(r.variable_name=t.output_variable??i.key??"",r.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let m=C(i);m&&(r.value=w(m.name))}let o={},l={},a=t.action_instruction??"",c=i.text??"",u=i.url??"",p=[["intent",a],["value",c],["url",u]];for(let[m,h]of Object.entries(s)){let I=String(h);if(m.startsWith("secrets."))for(let[b,v]of p)v.includes(I)&&(l[b]=m);for(let[b,v]of p)v.includes(I)&&!(b in o)&&(o[b]=v)}let d=t.action_type,_={operation:t.action_instruction??"",agent:n,operation_dict:r,reasoning:d==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:o,secrets:l,params:{}};d==="analyze"&&typeof i.code=="string"&&i.code&&(_.code=i.code),d==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(_.code_js=i.code_js),d==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(_.condition_expression=i.condition_expression),i.uses_websocket===!0&&(_.uses_websocket=!0),i.uses_sse===!0&&(_.uses_sse=!0),d==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(_.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(_.locators=i.locators),typeof i.operator=="string"&&(_.operator=i.operator),Array.isArray(i.transforms)&&(_.transforms=i.transforms),typeof i.query=="string"&&(_.query=i.query),typeof i.expected_value=="string"&&(_.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(_.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(_.condition=i.condition));let f={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[d];return f&&i[f]!==void 0&&(_[f]=i[f]),d==="set_clipboard"&&typeof i.html=="string"&&i.html&&(_.html=i.html),_}function fe(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let s=e.sub_results??[];return s.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?s.some(n=>n.passed===!0):s.every(n=>n.passed===!0)}function Z(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function me(t){let e=t.assertion_tree??{},s=e.sub_results??[],i=Z(s);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:s,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function he(t){let s=(t.action_params??{}).assertion_tree??{},i=s.sub_results??[],n=Z(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:n,composite_operator:s.composite_operator??"and",verification:"",claim:s.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function Ee(t,e,s,i){let n=t.visual_data;if(!n||n.x==null||n.y==null)return null;let r=e?`${e}/test_screenshots`:"";return{x:n.x,y:n.y,confidence:0,bbox:n.bbox??null,bbox_source:n.bbox?"accessibility_tree":"fallback",viewport_width:n.viewport_width??1280,viewport_height:n.viewport_height??800,scale_factor:null,raw_image_url:r?`${r}/untagged_screenshot/${s}.${i?.get(s)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function be(t){if(!t)return"";let e=t;return typeof t=="object"&&!Array.isArray(t)&&Array.isArray(t.frameInfo)&&(e=t.frameInfo),!Array.isArray(e)||e.length===0?"":JSON.stringify(e)}function Ie(t){return/^(android|ios)_native$/i.test(t.platform??"")}function q(t,e={},s="",i){let n=t.action_type,r=W(n,t),o=t.action_params??{},l=t.coordinates??null,a=t.selectors??null,c=!!(a&&a.length>0),u=Ie(t),p=t.timestamp??"",d=t.duration_ms??0,_=t.variables_used??{},g=t.action_id??P(),f=P(),m=Y(p,d),h="",I="";if(n==="navigate")I=o.url??"",h=I;else if(n==="type"||n==="fill")h=o.text??"";else if(n==="press_key")h=o.key??"";else if(n==="wait")h=String(o.ms??o.timeout_ms??"");else if(n==="evaluate_js")h=o.script??"";else if(n==="upload_files"){let A=C(o);A&&(h=w(A.name))}else n==="analyze"&&r==="SET_VARIABLE"&&(h=t.output_value??"");let b="";n==="go_back"?b="back":n==="go_forward"&&(b="forward");let v=T(h,e),O=T(I,e),y=T(t.action_instruction??"",e),S=ge(t,r,_);return{operation_id:g,instruction_id:f,instruction:y,intent:y,operation_start:p,operation_end:m,status:t.status??"",command:r,name:"",target:"",value:v,message:"",operation_dict:"",frame:be(t.frame_info),error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(S),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:s?`${s}/test_screenshots/untagged_screenshot/${g}.${i?.get(g)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:O,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:r==="ASSERTION"?fe(o):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(o.tab_index??""),tab_identifier:String(o.tab_identifier??""),scroll_value:o.amount??1,scroll_direction:o.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:n==="evaluate_js"?o.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:u,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:l!==null&&!c,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:c?null:l?.x??null,y_coord:c?null:l?.y??null,target_x_coord:o.target_x??null,target_y_coord:o.target_y??null,source_description:o.source_description??null,target_description:o.target_description??null,use_coordinates:l!==null&&!c,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:c?a.map(A=>({...A,type:u?A.strategy??A.type??"native":A.isXPath?"xpath":"css"})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:r==="ASSERTION"?me(o):o.expression_tree??{},assertion_tree:o.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:r==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:o.source_coordinates?{x:o.source_coordinates[0],y:o.source_coordinates[1]}:{},end_coordinates:o.target_coordinates?{x:o.target_coordinates[0],y:o.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:n==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:n==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:Ee(t,s,g,i),reasoning:n==="analyze"?o.query??"":t.intent??t.action_instruction??""}}function G(t,e,s={}){let i=t.action_type,n=W(i,t),r=t.timestamp??"",o=t.duration_ms??0,l=Y(r,o),a=n==="ASSERTION"||n==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:T(t.action_instruction??"",s),command:n,error:null,parent_instruction_id:"",classification_layer_resp:n==="ASSERTION"?he(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:r,end_timestamp:l,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?pe(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:J(t)}:{},params_used:!1,hard_assertion:n==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function ve(t,e=[]){let s=t.action_params??{},i=s.branches??[],n=s.winning_index??-1,r=s.sub_results??[],o={};for(let a of r){let c=a.sub_results;if(c)for(let u of c){let p=u.store_key;p&&(o[p]=u)}}let l=i.map((a,c)=>{let u=c===n,p=(a.sub_checks??[]).map(d=>{let _=o[d.store_key];return{description:d.description,store_key:d.store_key,expected_value:d.expected_value,stored_value:_?.extracted_value??d.stored_value,operator:d.operator??_?.operator??"equals",transforms:d.transforms??_?.transforms??[]}});if(p.length===0&&a.condition&&r.length>0){let _=r.find(g=>g.branch_index===c)?.sub_results??[];_.length>0&&(p=_.map(g=>({description:g.description??a.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:c,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:a.custom_event??null,children:u?e:[],sub_checks:a.condition?p:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${P().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:n,branches:l,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Q(t,e,s){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=s)}function D(t,e={},s="",i,n){let r=[],o=0;for(;o<t.length;){let l=t[o],a=l.action_type;if(!n?.keepFailedActions&&l.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(l.until_condition&&!l.error)){o+=1;continue}if(a==="analyze"&&!X[l.action_params?.analyzer_type??""]){o+=1;continue}if(a==="child_agent_start"){let c=l.action_params?.child_id??"",u=l.action_params?.objective??"",p=[];o+=1;let d=1,_="error",g;for(;o<t.length&&d>0;){let y=t[o],S=y.action_type;if(S==="child_agent_start")d+=1;else if(S==="child_agent_end"&&(d-=1,d===0)){_=y.status??"success",g=y,o+=1;break}d>0&&p.push(y),o+=1}let f=D(p,e,s,i);Q(f,c,u);let m=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,I=g?.action_params?.error_message??null,b=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,O=_==="error";r.push({content_type:"generative_block",instruction_id:`generative_block_${c}`,generative_id:c,objective:u,status:_,children:f,error_message:O?I??null:null,error_code:O?h??null:null,result_code:m??null,bifurcation_context:[],approach_reason:H(b),one_liner:v??null});continue}else if(a==="child_agent_end"){o+=1;continue}else if(a==="if_else"){o+=1;let c=[];for(;o<t.length&&t[o].action_type==="child_agent_start";){let u=t[o],p=u.action_params?.child_id??"",d=u.action_params?.objective??"",_=[];o+=1;let g=1,f="error";for(;o<t.length&&g>0;){let h=t[o];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){f=h.status??"success",o+=1;break}g>0&&_.push(h),o+=1}let m=D(_,e,s,i);c.push(...m)}r.push(ve(l,c));continue}else if(a==="query_tool"){o+=1;continue}else if(l.until_condition){let c=q(l,e,s,i),u=G(l,c,e),p=typeof l.until_condition_met=="boolean"?l.until_condition_met:l.status==="success";r.push({content_type:"until_block",instruction_id:`until_${P().slice(0,8)}`,condition:l.until_condition,max_retries:l.until_max_retries??10,settle_ms:l.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:l.status??"success"})}else{let c=q(l,e,s,i),u=G(l,c,e);r.push(u)}o+=1}return r}function N(t,e={},s="",i,n){let r=[];for(let o of t){let l=D(o.records,e,s,i,n);if(l.length===0)continue;let a=P().replace(/-/g,"");Q(l,a,o.objective);let c=l.some(_=>"status"in _&&typeof _.status=="string"?_.status==="error"||_.status==="failed":!1),u=o.resultCode?parseInt(o.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,d=c||p?"error":"success";r.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:o.objective,status:d,children:l,error_message:d==="error"?o.errorMessage??null:null,error_code:d==="error"?o.reasonCode??null:null,result_code:o.resultCode??null,bifurcation_context:[],approach_reason:H(o.summary),one_liner:o.oneLiner??null})}return{instructions:r}}function te(t,e){let s;try{s=ee(t)}catch{return 0}let i=0,n=s.filter(r=>/^\d+$/.test(r)).sort((r,o)=>Number(r)-Number(o));for(let r of n){let o=L(t,r),l=L(o,"logs");if(!ye(l))continue;let a;try{a=ee(l)}catch{continue}let c=a.filter(d=>d.endsWith("-actions.ndjson")).sort((d,_)=>(parseInt(d,10)||0)-(parseInt(_,10)||0)),u=[];for(let d of c){let _=e.readActions(L(l,d));_.length&&u.push({objective:e.objective??"",records:_})}if(u.length===0)continue;let{instructions:p}=N(u,e.vars??{},e.screenshotBaseUrl??"",e.extMap,{keepFailedActions:!0});if(p.length!==0)try{let d=L(o,"auteur");Ae(d,{recursive:!0}),Re(L(d,"execution.json"),JSON.stringify(e.buildBlob(p),null,2)),i++,e.log?.("info","EVIDENCE_ARCHIVED_ATTEMPT_BLOB","Derived nested attempt blob",{attempt:r,instructions:p.length})}catch(d){e.log?.("debug","EVIDENCE_ARCHIVED_ATTEMPT_BLOB_FAILED","Nested attempt blob derivation failed",{attempt:r,error:d instanceof Error?d.message:String(d)})}}return i}var ie=le(ce(),1);import{createWriteStream as Pe}from"fs";import{readFile as xe}from"fs/promises";import{join as Ne,basename as Le}from"path";import{tmpdir as ke}from"os";var Oe=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function ne(t){let e=Ne(ke(),`${Le(t)}_artifacts.zip`);return new Promise((s,i)=>{let n=Pe(e),r=(0,ie.default)("zip",{zlib:{level:6}});n.on("close",()=>s(e)),r.on("error",i),r.pipe(n),r.glob("**/*",{cwd:t,ignore:Oe}),r.finalize()})}async function se(t){return xe(t)}async function we(t,e){return ae(z(t,e))}function Ce(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var re=class{config;controller;testId;constructor(e){this.config=e,this.controller=new M(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,s,i,n){this.config.log?.(e,s,i,n)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let s=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let l=this.collectNdjsonPerRun(),a=l.reduce((f,m)=>f+m.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:l.length});let c=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(c)});let{instructions:u}=l.length>0?N(l,c,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),d=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(d.length/1024).toFixed(1)});let _=E(this.config.sessionDir,"execution.json");k(_,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:_});let g=s?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let f=E(g,"auteur");U(f,{recursive:!0}),k(E(f,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(f,"execution.json")}),this.deriveArchivedAttemptBlobs(g,c)}if(e("convert","done"),s)i=d;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let f=null,m;try{f=await ne(this.config.sessionDir),m=await se(f),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(m.length/1024/1024).toFixed(1),path:f}),e("zip","done",`${(m.length/1024/1024).toFixed(1)}MB`)}finally{f&&await Te(f).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(m.length/1024/1024).toFixed(1),blob_size_kb:+(d.length/1024).toFixed(1)}),await Promise.all([R(h.urls.artifacts.upload_url,m,"application/zip"),R(h.urls.blob.upload_url,d,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let l=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:c}=l.length>0?N(l,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(c),p=E(this.config.sessionDir,"execution.json");k(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let d=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(d){let _=E(d,"auteur");U(_,{recursive:!0});let g=this.readAuthoredExecution();k(E(_,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(_,"execution.json"),source:g?"authored":"run_envelope"}),this.deriveArchivedAttemptBlobs(d,a)}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(l){let a=l instanceof Error?l.message:String(l);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),l}}else e("atomic_replace","skipped");let n,r;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let l=await this.config.onCommitLock();if(l.ok)n=l.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:n??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:l.reason,message:l.message}),e("commit_lock","failed",`${l.reason??"unknown"}: ${l.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${l.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let l=new B(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(n=(await l.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:n??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(n)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(n&&this.config.shareApiBaseUrl)try{r=await this.generateShareLink(n),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:r})}catch(l){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(l)})}if(s&&i){let l=null;e("zip","running");try{await s.sealFn({testcaseId:n,shareId:r}),l=s.sealedPackPath?await ae(s.sealedPackPath):await we(s.executionId,s.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:s.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(l.length/1024/1024).toFixed(1)})}catch(a){let c=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:s.executionId,error:c})}if(l){e("zip","done",`${(l.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Ce(s.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(l.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([R(a.urls.artifacts.upload_url,l,"application/zip"),R(a.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await R(a.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let o;if(this.config.mobile&&this.config.codeExport?.enabled)this.log("info","PIPELINE_CODE_EXPORT_SKIPPED","Code export is not supported for device runs"),e("code_export","skipped","not supported on mobile yet");else if(this.config.codeExport?.enabled&&n){let l=!1;try{await this.triggerCodeExport(n),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),l=!0}catch(a){let c=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:c}),e("code_export","failed",`trigger failed: ${c}`)}if(l){e("code_export","running","Waiting for code generation\u2026");try{o=await this.pollAndDownloadCode(n,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:o}),e("code_export","done",o)}catch(a){let c=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:c}),e("code_export","failed",c)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:n,shareId:r,codeExportDir:o}}catch(s){return{success:!1,testId:this.testId,error:s instanceof Error?s.message:String(s)}}}async runCodeExport(e,s){let i=s??this.config.onProgress,n=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),n=!0}catch(r){let o=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:o}),i("code_export","failed",`trigger failed: ${o}`)}if(n){i("code_export","running","Waiting for code generation\u2026");try{let r=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:r}),i("code_export","done",r),r}catch(r){let o=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:o}),i("code_export","failed",o);return}}}deriveArchivedAttemptBlobs(e,s){try{let i=te(e,{readActions:n=>this.readNdjsonFromFile(n),buildBlob:n=>this.buildExecutionEnvelope(n),objective:this.config.firstObjective,vars:s,screenshotBaseUrl:this.config.screenshotBaseUrl??"",extMap:this.config.screenshotExtMap,log:(n,r,o,l)=>this.log(n,r,o,l)});i>0&&this.log("info","PIPELINE_ARCHIVED_ATTEMPTS","Nested retry-attempt blobs derived",{count:i})}catch(i){this.log("debug","PIPELINE_ARCHIVED_ATTEMPTS_FAILED","Nested attempt blob pass failed",{error:i instanceof Error?i.message:String(i)})}}collectNdjsonPerRun(){let e=[],s=this.config.runObjectives??[],i=this.config.runMetadata??[],n=this.config.evidence??this.config.evidenceRead;for(let r=0;r<this.config.runDirs.length;r++){let o=this.config.runDirs[r],l=s[r]||this.config.firstObjective,a=i[r],c=n?this.readNdjsonFromFile(E(n.packTestDir,"logs",`${n.runIndices?.[r]??r}-actions.ndjson`)):this.readNdjsonFromDir(o);c.length>0&&e.push({objective:l,records:c,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let r=E(this.config.sessionDir,"runs");if(j(r))try{let l=Se(r,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of l){let c=E(r,a),u=this.readNdjsonFromDir(c);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let s=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of s)if(j(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let s=[];if(!j(e))return s;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=oe(e,"utf-8");for(let n of i.split(`
|
|
5
|
+
`)){let r=n.trim();if(r)try{s.push(JSON.parse(r))}catch{}}return s}async generateShareLink(e){let s=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:s,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},n=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:n,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let r=n?await this.config.authResolver.fetch(s,i):await x(s,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Share link API failed: ${r.status} ${await r.text()}`);let o=await r.json();if(!o.shareId)throw new Error("Share link API returned no shareId");return o.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:s,body:i}=V({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:s});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},r=this.config.authResolver?await this.config.authResolver.fetch(s,n):await x(s,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Code export failed: ${r.status} ${await r.text()}`)}async pollAndDownloadCode(e,s){let i=$({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),n=this.config.exitTimeoutMs??3e5,r=5e3,o=Date.now()+n;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:n});let l=(a,c)=>this.config.authResolver?this.config.authResolver.fetch(a,c):x(a,{...c,headers:{...c?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<o;){let a=await l(i,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let _=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:_.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let u=(await a.json()).data?.find(_=>_.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),s("code_export","running","Waiting for code generation\u2026"),await this.sleep(r);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),s("code_export","running","Generating code\u2026"),await this.sleep(r);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let d=this.config.codeExportDir??E(this.config.sessionDir,"code-export");U(d,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:d}),s("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let _ of u.url){let g=E(d,_.file_name),f=await x(_.file_url);if(!f.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:_.file_name,status:f.status});continue}let m=await f.text();k(g,m,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:_.file_name,size_bytes:m.length})}return d}throw new Error("Code export timed out")}sleep(e){return new Promise(s=>setTimeout(s,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:F(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let s=oe(e,"utf8");return JSON.parse(s),s}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let s=this.config.runStatuses.every(a=>a==="passed")?"success":"error",i=this.config.variableIds??{},n=[];if(this.config.variables)for(let[a,c]of Object.entries(this.config.variables)){if(c.secret)continue;let u=a.startsWith("global.")?a.slice(7):a;n.push({id:i[u]??0,name:u,value:c.value,session_value:c.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let r=[],o=[],l=new Set;for(let a of this.collectNdjsonPerRun())for(let c of a.records)if(c.output_variable&&c.output_value!=null&&r.push({name:c.output_variable,value:String(c.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),c.action_type==="upload_files"){let u=C(c.action_params);if(u){let p=u.media_id||u.media_url;if(!l.has(p)){l.add(p),o.push({media_url:u.media_url,media_id:u.media_id,name:u.name,type:u.type});let d=w(u.name);r.push({name:K(u.name),value:d,value_type:"string",variable_description:`variable for ${d}`})}}}return{test_id:this.testId,version:"v4",auto_heal_version:this.config.apMode==="v2"?"AH2":"",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:s,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:o,test_params:[],test_level_variables:JSON.stringify(r),test_global_variables:n,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{we as a,Ce as b,re as c};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{createRequire as Sr}from"module";var Ur=Sr("/"),H,Fr,Cr;try{H=Ur("worker_threads"),Fr=H.Worker,Cr=H.isMarkedAsUntransferable}catch{}var g=Uint8Array,k=Uint16Array,Dr=Int32Array,cr=new g([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),pr=new g([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Tr=new g([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),gr=function(n,r){for(var t=new k(31),e=0;e<31;++e)t[e]=r+=1<<n[e-1];for(var i=new Dr(t[30]),e=1;e<30;++e)for(var l=t[e];l<t[e+1];++l)i[l]=l-t[e]<<5|e;return{b:t,r:i}},H=gr(cr,2),yr=H.b,Ir=H.r;yr[28]=258,Ir[258]=28;var wr=gr(pr,0),Br=wr.b,Rr=wr.r,or=new k(32768);for(f=0;f<32768;++f)B=(f&43690)>>1|(f&21845)<<1,B=(B&52428)>>2|(B&13107)<<2,B=(B&61680)>>4|(B&3855)<<4,or[f]=((B&65280)>>8|(B&255)<<8)>>1;var B,f,Q=(function(n,r,t){for(var e=n.length,i=0,l=new k(r);i<e;++i)n[i]&&++l[n[i]-1];var u=new k(r);for(i=1;i<r;++i)u[i]=u[i-1]+l[i-1]<<1;var o;if(t){o=new k(1<<r);var v=15-r;for(i=0;i<e;++i)if(n[i])for(var s=i<<4|n[i],c=r-n[i],a=u[n[i]-1]++<<c,h=a|(1<<c)-1;a<=h;++a)o[or[a]>>v]=s}else for(o=new k(e),i=0;i<e;++i)n[i]&&(o[i]=or[u[n[i]-1]++]>>15-n[i]);return o}),X=new g(288);for(f=0;f<144;++f)X[f]=8;var f;for(f=144;f<256;++f)X[f]=9;var f;for(f=256;f<280;++f)X[f]=7;var f;for(f=280;f<288;++f)X[f]=8;var f,mr=new g(32);for(f=0;f<32;++f)mr[f]=5;var f;var Zr=Q(X,9,1);var Er=Q(mr,5,1),er=function(n){for(var r=n[0],t=1;t<n.length;++t)n[t]>r&&(r=n[t]);return r},C=function(n,r,t){var e=r/8|0;return(n[e]|n[e+1]<<8)>>(r&7)&t},ir=function(n,r){var t=r/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(r&7)},qr=function(n){return(n+7)/8|0},L=function(n,r,t){return(r==null||r<0)&&(r=0),(t==null||t>n.length)&&(t=n.length),new g(n.subarray(r,t))};var Gr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],p=function(n,r,t){var e=new Error(r||Gr[n]);if(e.code=n,Error.captureStackTrace&&Error.captureStackTrace(e,p),!t)throw e;return e},xr=function(n,r,t,e){var i=n.length,l=e?e.length:0;if(!i||r.f&&!r.l)return t||new g(0);var u=!t,o=u||r.i!=2,v=r.i;u&&(t=new g(i*3));var s=function(ur){var lr=t.length;if(ur>lr){var vr=new g(Math.max(lr*2,ur));vr.set(t),t=vr}},c=r.f||0,a=r.p||0,h=r.b||0,M=r.l,y=r.d,T=r.m,D=r.n,S=i*8;do{if(!M){c=C(n,a,1);var q=C(n,a+1,3);if(a+=3,q)if(q==1)M=Zr,y=Er,T=9,D=5;else if(q==2){var G=C(n,a,31)+257,O=C(n,a+10,15)+4,P=G+C(n,a+5,31)+1;a+=14;for(var E=new g(P),V=new g(19),w=0;w<O;++w)V[Tr[w]]=C(n,a+w*3,7);a+=O*3;for(var N=er(V),I=(1<<N)-1,$=Q(V,N,1),w=0;w<P;){var j=$[C(n,a,I)];a+=j&15;var z=j>>4;if(z<16)E[w++]=z;else{var x=0,U=0;for(z==16?(U=3+C(n,a,3),a+=2,x=E[w-1]):z==17?(U=3+C(n,a,7),a+=3):z==18&&(U=11+C(n,a,127),a+=7);U--;)E[w++]=x}}var d=E.subarray(0,G),F=E.subarray(G);T=er(d),D=er(F),M=Q(d,T,1),y=Q(F,D,1)}else p(1);else{var z=qr(a)+4,W=n[z-4]|n[z-3]<<8,R=z+W;if(R>i){v&&p(0);break}o&&s(h+W),t.set(n.subarray(z,R),h),r.b=h+=W,r.p=a=R*8,r.f=c;continue}if(a>S){v&&p(0);break}}o&&s(h+131072);for(var b=(1<<T)-1,rr=(1<<D)-1,Y=a;;Y=a){var x=M[ir(n,a)&b],Z=x>>4;if(a+=x&15,a>S){v&&p(0);break}if(x||p(2),Z<256)t[h++]=Z;else if(Z==256){Y=a,M=null;break}else{var _=Z-254;if(Z>264){var w=Z-257,J=cr[w];_=C(n,a,(1<<J)-1)+yr[w],a+=J}var nr=y[ir(n,a)&rr],tr=nr>>4;nr||p(3),a+=nr&15;var F=Br[tr];if(tr>3){var J=pr[tr];F+=ir(n,a)&(1<<J)-1,a+=J}if(a>S){v&&p(0);break}o&&s(h+131072);var fr=h+_;if(h<F){var hr=l-F,Mr=Math.min(F,fr);for(hr+h<0&&p(3);h<Mr;++h)t[h]=e[hr+h]}for(;h<fr;++h)t[h]=t[h-F]}}r.l=M,r.p=Y,r.b=h,r.f=c,M&&(c=1,r.m=T,r.d=y,r.n=D)}while(!c);return h!=t.length&&u?L(t,0,h):t.subarray(0,h)};var K=new g(0);var A=function(n,r){return n[r]|n[r+1]<<8},m=function(n,r){return(n[r]|n[r+1]<<8|n[r+2]<<16|n[r+3]<<24)>>>0},ar=function(n,r){return m(n,r)+m(n,r+4)*4294967296};var Or=(function(){function n(r,t){typeof r=="function"&&(t=r,r={}),this.ondata=t;var e=r&&r.dictionary&&r.dictionary.subarray(-32768);this.s={i:0,b:e?e.length:0},this.o=new g(32768),this.p=new g(0),e&&this.o.set(e)}return n.prototype.e=function(r){if(this.ondata||p(5),this.d&&p(4),!this.p.length)this.p=r;else if(r.length){var t=new g(this.p.length+r.length);t.set(this.p),t.set(r,this.p.length),this.p=t}},n.prototype.c=function(r){this.s.i=+(this.d=r||!1);var t=this.s.b,e=xr(this.p,this.s,this.o);this.ondata(L(e,t,this.s.b),this.d),this.o=L(e,this.s.b-32768),this.s.b=this.o.length,this.p=L(this.p,this.s.p/8|0),this.s.p&=7},n.prototype.push=function(r,t){this.e(r),this.c(t)},n})();function Pr(n,r){return xr(n,{i:2},r&&r.out,r&&r.dictionary)}var sr=typeof TextDecoder<"u"&&new TextDecoder,Nr=0;try{sr.decode(K,{stream:!0}),Nr=1}catch{}var dr=function(n){for(var r="",t=0;;){var e=n[t++],i=(e>127)+(e>223)+(e>239);if(t+i>n.length)return{s:r,r:L(n,t-1)};i?i==3?(e=((e&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,r+=String.fromCharCode(55296|e>>10,56320|e&1023)):i&1?r+=String.fromCharCode((e&31)<<6|n[t++]&63):r+=String.fromCharCode((e&15)<<12|(n[t++]&63)<<6|n[t++]&63):r+=String.fromCharCode(e)}};function zr(n,r){if(r){for(var t="",e=0;e<n.length;e+=16384)t+=String.fromCharCode.apply(null,n.subarray(e,e+16384));return t}else{if(sr)return sr.decode(n);var i=dr(n),l=i.s,t=i.r;return t.length&&p(8),l}}var kr=function(n,r){return r+30+A(n,r+26)+A(n,r+28)},Hr=function(n,r,t){var e=A(n,r+28),i=A(n,r+30),l=zr(n.subarray(r+46,r+46+e),!(A(n,r+8)&2048)),u=r+46+e,o=Ar(n,u,i,t,m(n,r+20),m(n,r+24),m(n,r+42)),v=o[0],s=o[1],c=o[2];return[A(n,r+10),v,s,l,u+i+A(n,r+32),c]},Ar=function(n,r,t,e,i,l,u){var o=i==4294967295,v=l==4294967295,s=u==4294967295,c=r+t,a=o+v+s;if(e&&a){for(;r+4<c;r+=4+A(n,r+2))if(A(n,r)==1)return[o?ar(n,r+4+8*v):i,v?ar(n,r+4):l,s?ar(n,r+4+8*(v+o)):u,1];e<2&&p(13)}return[i,l,u,0]};var Lr=(function(){function n(){}return n.prototype.push=function(r,t){this.ondata(null,r,t)},n.compression=0,n})();var Vr=(function(){function n(){var r=this;this.i=new Or(function(t,e){r.ondata(null,t,e)})}return n.prototype.push=function(r,t){try{this.i.push(r,t)}catch(e){this.ondata(e,null,t)}},n.compression=8,n})();var Yr=(function(){function n(r){this.onfile=r,this.k=[],this.o={0:Lr},this.p=K}return n.prototype.push=function(r,t){var e=this;if(this.onfile||p(5),this.p||p(4),this.c>0){var i=Math.min(this.c,r.length),l=r.subarray(0,i);if(this.c-=i,this.d?this.d.push(l,!this.c):this.k[0].push(l),r=r.subarray(i),r.length)return this.push(r,t)}else{var u=0,o=0,v=void 0,s=void 0;this.p.length?r.length?(s=new g(this.p.length+r.length),s.set(this.p),s.set(r,this.p.length)):s=this.p:s=r;for(var c=s.length,a=this.c,h=a&&this.d,M=function(){var S=m(s,o);if(S==67324752){u=1,v=o,y.d=null,y.c=0;var q=A(s,o+6),z=A(s,o+8),W=q&2048,R=q&8,G=A(s,o+26),O=A(s,o+28);if(c>o+30+G+O){var P=[];y.k.unshift(P),u=2;var E=m(s,o+18),V=m(s,o+22),w=zr(s.subarray(o+30,o+=30+G),!W),N=Ar(s,o,O,2,E,V,0),I=N[0],$=N[1],j=N[3];R&&(I=-1-j),o+=O,y.c=I;var x,U={name:w,compression:z,start:function(){if(U.ondata||p(5),!I)U.ondata(null,K,!0);else{var d=e.o[z];d||U.ondata(p(14,"unknown compression type "+z,1),null,!1),x=I<0?new d(w):new d(w,I,$),x.ondata=function(Y,Z,_){U.ondata(Y,Z,_)};for(var F=0,b=P;F<b.length;F++){var rr=b[F];x.push(rr,!1)}e.k[0]==P&&e.c?e.d=x:x.push(K,!0)}},terminate:function(){x&&x.terminate&&x.terminate()}};I>=0&&(U.size=I,U.originalSize=$),y.onfile(U)}return"break"}else if(a){if(S==134695760)return v=o+=12+(a==-2&&8),u=3,y.c=0,"break";if(S==33639248)return v=o-=4,u=3,y.c=0,"break"}},y=this;o<c-4;++o){var T=M();if(T==="break")break}if(this.p=K,a<0){var D=u?s.subarray(0,v-12-(a==-2&&8)-(m(s,v-16)==134695760&&4)):s.subarray(0,o);h?h.push(D,!!u):this.k[+(u==2)].push(D)}if(u&2)return this.push(s.subarray(o),t);this.p=s.subarray(o)}t&&(this.c&&p(13),this.p=null)},n.prototype.register=function(r){this.o[r.compression]=r},n})();function Jr(n,r){for(var t={},e=n.length-22;m(n,e)!=101010256;--e)(!e||n.length-e>65558)&&p(13);var i=A(n,e+8);if(!i)return{};var l=m(n,e+16),u=m(n,e-20)==117853008;if(u){var o=m(n,e-12);u=m(n,o)==101075792,u&&(i=m(n,o+32),l=m(n,o+48))}for(var v=r&&r.filter,s=0;s<i;++s){var c=Hr(n,l,u),a=c[0],h=c[1],M=c[2],y=c[3],T=c[4],D=c[5],S=kr(n,D);l=T,(!v||v({name:y,size:h,originalSize:M,compression:a}))&&(a?a==8?t[y]=Pr(n.subarray(S,S+h),{out:new g(M)}):p(14,"unknown compression type "+a):t[y]=L(n,S,S+h))}return t}export{Lr as a,Vr as b,Yr as c,Jr as d};
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as Ve}from"./chunk-KHU7C6EE.js";import{c as We}from"./chunk-IOD3HQVW.js";import{a as ze,b as me}from"./chunk-3Q6WAK6P.js";import{a as te,b as Ne,e as ce,f as le,g as je,h as Ge}from"./chunk-KU6IXFGZ.js";import{a as qe,c as Me,d as Fe,e as de,f as Be}from"./chunk-ZGBSGZZM.js";import{a as Te,b as Ae,c as Ie}from"./chunk-BRHNRCEZ.js";import{a as $e,b as Ee,c as Ce}from"./chunk-BB2W35TW.js";import{a as Oe}from"./chunk-L2TV4G56.js";import{c as Pe}from"./chunk-6KPPGMO2.js";import{a as De,e as Re}from"./chunk-GFKCTYCA.js";import{a as Le}from"./chunk-IMR64OCZ.js";import{a as He,b as Ue}from"./chunk-JZ26R6UL.js";import{b as ye,c as be,d as we,e as re,f as oe,g as ae}from"./chunk-ZPDM6FO7.js";import{a as ie}from"./chunk-L5LI2JF4.js";import{a as _e,b as ne}from"./chunk-IDX3TOPY.js";import{A as G}from"./chunk-TH47OOBV.js";import{f as Se}from"./chunk-DUAXZYAD.js";import{a as ve,e as ke,f as xe}from"./chunk-DBIBROYW.js";import{d as V,e as J}from"./chunk-WXHQYYD5.js";import{a as he}from"./chunk-5EOX4MEY.js";import{mkdirSync as xt,appendFileSync as St,rmdirSync as lt}from"fs";import{randomBytes as Dt}from"crypto";import{dirname as dt,join as fe}from"path";function Ke(t,e){let n=[];for(let i of e??[]){let g=t.resolve(i.ref)?.tip??null;g!==i.cid&&n.push({ref:i.ref,pinned:i.cid,now:g})}return n}import{existsSync as ue,readFileSync as ge,readdirSync as gt}from"fs";import{join as Z}from"path";var Qe=`
|
|
3
|
+
version: 1
|
|
4
|
+
techniques:
|
|
5
|
+
- id: eqp
|
|
6
|
+
name: "Equivalence partitioning"
|
|
7
|
+
applies_hint: "any constrained input"
|
|
8
|
+
emits: [absolute, forbidden-presence]
|
|
9
|
+
- id: bva
|
|
10
|
+
name: "Boundary value analysis"
|
|
11
|
+
applies_hint: "input has an ordered range or length"
|
|
12
|
+
emits: [absolute, forbidden-presence]
|
|
13
|
+
- id: negative
|
|
14
|
+
name: "Negative / error"
|
|
15
|
+
applies_hint: "any input or action that can fail"
|
|
16
|
+
emits: [forbidden-presence]
|
|
17
|
+
- id: state_flow
|
|
18
|
+
name: "State / flow"
|
|
19
|
+
applies_hint: "the AC sits in a multi-step flow"
|
|
20
|
+
emits: [state-transition]
|
|
21
|
+
- id: crud
|
|
22
|
+
name: "CRUD round-trip"
|
|
23
|
+
applies_hint: "AC touches a persisted resource"
|
|
24
|
+
emits: [delta, presence, forbidden-presence]
|
|
25
|
+
- id: auth
|
|
26
|
+
name: "Auth / permission"
|
|
27
|
+
applies_hint: "AC is behind a gate or role"
|
|
28
|
+
emits: [forbidden-presence, presence]
|
|
29
|
+
- id: api_contract
|
|
30
|
+
name: "API-contract"
|
|
31
|
+
applies_hint: "surface is REST/GraphQL"
|
|
32
|
+
emits: [absolute]
|
|
33
|
+
- id: concurrency
|
|
34
|
+
name: "Concurrency / race"
|
|
35
|
+
applies_hint: "high-risk (money / data-loss) or shared-resource AC"
|
|
36
|
+
emits: [state-transition, forbidden-presence]
|
|
37
|
+
- id: idempotency
|
|
38
|
+
name: "Idempotency / retry"
|
|
39
|
+
applies_hint: "money or write operations"
|
|
40
|
+
emits: [delta]
|
|
41
|
+
- id: i18n
|
|
42
|
+
name: "i18n / l10n"
|
|
43
|
+
applies_hint: "AC renders user text or formats numbers/dates/currency"
|
|
44
|
+
emits: [presence, absolute]
|
|
45
|
+
- id: a11y
|
|
46
|
+
name: "a11y"
|
|
47
|
+
applies_hint: "any rendered surface"
|
|
48
|
+
emits: [presence, absolute]
|
|
49
|
+
- id: responsiveness
|
|
50
|
+
name: "Responsiveness / layout"
|
|
51
|
+
applies_hint: "rendered surface"
|
|
52
|
+
emits: [presence, forbidden-presence]
|
|
53
|
+
- id: empty_state
|
|
54
|
+
name: "Empty / null / zero state"
|
|
55
|
+
applies_hint: "list / search / collection AC"
|
|
56
|
+
emits: [presence]
|
|
57
|
+
- id: overflow_underflow
|
|
58
|
+
name: "Overflow / underflow"
|
|
59
|
+
applies_hint: "numeric or quantity AC (R9: explicit underflow/overflow)"
|
|
60
|
+
emits: [forbidden-presence]
|
|
61
|
+
- id: persistence
|
|
62
|
+
name: "Persistence / refresh"
|
|
63
|
+
applies_hint: "AC asserts durable state"
|
|
64
|
+
emits: [absolute]
|
|
65
|
+
- id: temporal
|
|
66
|
+
name: "Time / timezone / expiry"
|
|
67
|
+
applies_hint: "AC involves dates, TTLs, schedules"
|
|
68
|
+
emits: [state-transition, forbidden-presence]
|
|
69
|
+
- id: currency
|
|
70
|
+
name: "Currency / rounding"
|
|
71
|
+
applies_hint: "money AC"
|
|
72
|
+
emits: [absolute]
|
|
73
|
+
- id: pagination
|
|
74
|
+
name: "Pagination / sort / filter"
|
|
75
|
+
applies_hint: "list / search AC"
|
|
76
|
+
emits: [absolute, presence]
|
|
77
|
+
- id: file_media
|
|
78
|
+
name: "File / media"
|
|
79
|
+
applies_hint: "upload surface"
|
|
80
|
+
emits: [forbidden-presence]
|
|
81
|
+
- id: notification
|
|
82
|
+
name: "Notification / async-effect"
|
|
83
|
+
applies_hint: "AC produces an out-of-band effect (email/SMS/push)"
|
|
84
|
+
emits: [presence, delta]
|
|
85
|
+
`;var Ye={"web-form":`
|
|
86
|
+
id: web-form
|
|
87
|
+
name: "Web form"
|
|
88
|
+
version: 1
|
|
89
|
+
applies_when: >
|
|
90
|
+
The AC concerns a data-entry form: input fields, required fields, submit,
|
|
91
|
+
validation messages.
|
|
92
|
+
candidate_checks:
|
|
93
|
+
- id: field-validation
|
|
94
|
+
family: negative
|
|
95
|
+
measurable_example: "Enter 'abc' in a numeric quantity field \u2192 inline error 'must be a number', value not accepted"
|
|
96
|
+
emits: forbidden-presence
|
|
97
|
+
- id: required-fields
|
|
98
|
+
family: negative
|
|
99
|
+
measurable_example: "Submit with a required field empty \u2192 submit blocked, field flagged"
|
|
100
|
+
emits: forbidden-presence
|
|
101
|
+
- id: formats
|
|
102
|
+
family: negative
|
|
103
|
+
measurable_example: "Email without @ rejected; valid accepted"
|
|
104
|
+
emits: forbidden-presence
|
|
105
|
+
- id: empty-state
|
|
106
|
+
family: empty_state
|
|
107
|
+
measurable_example: "First load: no stale values, placeholders shown"
|
|
108
|
+
emits: presence
|
|
109
|
+
- id: error-messages
|
|
110
|
+
family: negative
|
|
111
|
+
measurable_example: "Each error is specific and tied to its field"
|
|
112
|
+
emits: presence
|
|
113
|
+
- id: a11y
|
|
114
|
+
family: a11y
|
|
115
|
+
measurable_example: "Every input has a programmatic label; keyboard-only submit works"
|
|
116
|
+
emits: presence
|
|
117
|
+
- id: responsiveness
|
|
118
|
+
family: responsiveness
|
|
119
|
+
measurable_example: "No field overlap at 1280/768/375 px"
|
|
120
|
+
emits: forbidden-presence
|
|
121
|
+
`,"rest-graphql-api":`
|
|
122
|
+
id: rest-graphql-api
|
|
123
|
+
name: "REST / GraphQL API"
|
|
124
|
+
version: 1
|
|
125
|
+
applies_when: >
|
|
126
|
+
The surface is an HTTP/GraphQL endpoint.
|
|
127
|
+
candidate_checks:
|
|
128
|
+
- id: response-shape
|
|
129
|
+
family: api_contract
|
|
130
|
+
measurable_example: "Body validates against the declared schema"
|
|
131
|
+
emits: absolute
|
|
132
|
+
- id: status-codes
|
|
133
|
+
family: api_contract
|
|
134
|
+
measurable_example: "GET 200, POST 201, missing 404, bad 400, unauth 401"
|
|
135
|
+
emits: absolute
|
|
136
|
+
- id: verbs
|
|
137
|
+
family: idempotency
|
|
138
|
+
measurable_example: "PUT is idempotent, POST is not"
|
|
139
|
+
emits: delta
|
|
140
|
+
- id: bad-payloads
|
|
141
|
+
family: negative
|
|
142
|
+
measurable_example: "Malformed JSON \u2192 400, never 500"
|
|
143
|
+
emits: absolute
|
|
144
|
+
- id: idempotency
|
|
145
|
+
family: idempotency
|
|
146
|
+
measurable_example: "Same POST with idempotency-key twice \u2192 one effect"
|
|
147
|
+
emits: delta
|
|
148
|
+
- id: pagination
|
|
149
|
+
family: pagination
|
|
150
|
+
measurable_example: "Page beyond last \u2192 empty list, not error; cursor stable"
|
|
151
|
+
emits: absolute
|
|
152
|
+
- id: versioning
|
|
153
|
+
family: api_contract
|
|
154
|
+
measurable_example: "v1 contract unchanged after v2 ships"
|
|
155
|
+
emits: absolute
|
|
156
|
+
- id: rate-limits
|
|
157
|
+
family: api_contract
|
|
158
|
+
measurable_example: "Over the limit \u2192 429 with retry-after"
|
|
159
|
+
emits: absolute
|
|
160
|
+
`,"mobile-native":`
|
|
161
|
+
id: mobile-native
|
|
162
|
+
name: "Mobile native"
|
|
163
|
+
version: 1
|
|
164
|
+
applies_when: >
|
|
165
|
+
iOS/Android native surface.
|
|
166
|
+
candidate_checks:
|
|
167
|
+
- id: interruptions
|
|
168
|
+
family: state_flow
|
|
169
|
+
measurable_example: "Incoming call mid-flow \u2192 state preserved on return"
|
|
170
|
+
emits: state-transition
|
|
171
|
+
- id: network-transitions
|
|
172
|
+
family: state_flow
|
|
173
|
+
measurable_example: "wifi\u2192cellular\u21924G drop: no data loss, graceful retry"
|
|
174
|
+
emits: state-transition
|
|
175
|
+
- id: permissions
|
|
176
|
+
family: negative
|
|
177
|
+
measurable_example: "Deny camera \u2192 feature degrades, no crash"
|
|
178
|
+
emits: forbidden-presence
|
|
179
|
+
- id: orientation
|
|
180
|
+
family: persistence
|
|
181
|
+
measurable_example: "Rotate mid-form \u2192 input preserved"
|
|
182
|
+
emits: absolute
|
|
183
|
+
- id: deep-links
|
|
184
|
+
family: state_flow
|
|
185
|
+
measurable_example: "Cold-start deep link lands on the right screen with auth"
|
|
186
|
+
emits: state-transition
|
|
187
|
+
- id: state-persistence
|
|
188
|
+
family: persistence
|
|
189
|
+
measurable_example: "Kill + relaunch \u2192 resume where left off"
|
|
190
|
+
emits: absolute
|
|
191
|
+
- id: localization
|
|
192
|
+
family: i18n
|
|
193
|
+
measurable_example: "Device locale switch reformats and re-translates"
|
|
194
|
+
emits: presence
|
|
195
|
+
`,"stateful-flow":`
|
|
196
|
+
id: stateful-flow
|
|
197
|
+
name: "Stateful flow"
|
|
198
|
+
version: 1
|
|
199
|
+
applies_when: >
|
|
200
|
+
Multi-step wizard / checkout / onboarding.
|
|
201
|
+
candidate_checks:
|
|
202
|
+
- id: valid-transitions
|
|
203
|
+
family: state_flow
|
|
204
|
+
measurable_example: "Each step advances only when its precondition is met"
|
|
205
|
+
emits: state-transition
|
|
206
|
+
- id: invalid-transitions
|
|
207
|
+
family: state_flow
|
|
208
|
+
measurable_example: "Can't jump to step 3 with step 2 incomplete"
|
|
209
|
+
emits: forbidden-presence
|
|
210
|
+
- id: back-and-abandon
|
|
211
|
+
family: state_flow
|
|
212
|
+
measurable_example: "Back from step 3, then abandon \u2192 no partial commit"
|
|
213
|
+
emits: forbidden-presence
|
|
214
|
+
- id: refresh-persistence
|
|
215
|
+
family: persistence
|
|
216
|
+
measurable_example: "Reload at step 2 \u2192 still at step 2 with data"
|
|
217
|
+
emits: absolute
|
|
218
|
+
- id: resume
|
|
219
|
+
family: persistence
|
|
220
|
+
measurable_example: "Return later \u2192 resume the saved flow"
|
|
221
|
+
emits: absolute
|
|
222
|
+
- id: double-submission
|
|
223
|
+
family: idempotency
|
|
224
|
+
measurable_example: "Double-click submit \u2192 exactly one submission"
|
|
225
|
+
emits: delta
|
|
226
|
+
`,"data-crud":`
|
|
227
|
+
id: data-crud
|
|
228
|
+
name: "Data CRUD"
|
|
229
|
+
version: 1
|
|
230
|
+
applies_when: >
|
|
231
|
+
A persisted record.
|
|
232
|
+
candidate_checks:
|
|
233
|
+
- id: crud-round-trip
|
|
234
|
+
family: crud
|
|
235
|
+
measurable_example: "Create \u2192 read shows it \u2192 update \u2192 read shows the change \u2192 delete \u2192 read 404"
|
|
236
|
+
emits: state-transition
|
|
237
|
+
- id: retry-safety
|
|
238
|
+
family: idempotency
|
|
239
|
+
measurable_example: "Retried create with same key \u2192 one row"
|
|
240
|
+
emits: delta
|
|
241
|
+
- id: concurrency-lost-update
|
|
242
|
+
family: concurrency
|
|
243
|
+
measurable_example: "Two writers, last must not silently clobber \u2192 conflict surfaced"
|
|
244
|
+
emits: forbidden-presence
|
|
245
|
+
- id: delete-cascade
|
|
246
|
+
family: crud
|
|
247
|
+
measurable_example: "Delete parent \u2192 children handled per rule"
|
|
248
|
+
emits: state-transition
|
|
249
|
+
- id: referential-consistency
|
|
250
|
+
family: crud
|
|
251
|
+
measurable_example: "Can't create a child for a missing parent"
|
|
252
|
+
emits: forbidden-presence
|
|
253
|
+
`,"auth-gated":`
|
|
254
|
+
id: auth-gated
|
|
255
|
+
name: "Auth gated"
|
|
256
|
+
version: 1
|
|
257
|
+
applies_when: >
|
|
258
|
+
Behind login/role.
|
|
259
|
+
candidate_checks:
|
|
260
|
+
- id: login-gate
|
|
261
|
+
family: auth
|
|
262
|
+
measurable_example: "Anonymous \u2192 redirected to login, not the resource"
|
|
263
|
+
emits: forbidden-presence
|
|
264
|
+
- id: role-permission-matrix
|
|
265
|
+
family: auth
|
|
266
|
+
measurable_example: "For each role \xD7 action: allowed/denied as specified"
|
|
267
|
+
emits: absolute
|
|
268
|
+
- id: cross-user-record
|
|
269
|
+
family: auth
|
|
270
|
+
measurable_example: "User A cannot read/edit user B's record by id"
|
|
271
|
+
emits: forbidden-presence
|
|
272
|
+
- id: token-session-expiry
|
|
273
|
+
family: auth
|
|
274
|
+
measurable_example: "Expired token \u2192 401/redirect, no stale access"
|
|
275
|
+
emits: forbidden-presence
|
|
276
|
+
- id: privilege-escalation
|
|
277
|
+
family: auth
|
|
278
|
+
measurable_example: "Non-admin cannot reach an admin action by direct URL/API"
|
|
279
|
+
emits: forbidden-presence
|
|
280
|
+
`,"search-list":`
|
|
281
|
+
id: search-list
|
|
282
|
+
name: "Search / list"
|
|
283
|
+
version: 1
|
|
284
|
+
applies_when: >
|
|
285
|
+
Search results / list views.
|
|
286
|
+
candidate_checks:
|
|
287
|
+
- id: pagination
|
|
288
|
+
family: pagination
|
|
289
|
+
measurable_example: "First/last/empty page correct; total accurate"
|
|
290
|
+
emits: absolute
|
|
291
|
+
- id: sorting
|
|
292
|
+
family: pagination
|
|
293
|
+
measurable_example: "Sort asc/desc actually orders; ties stable"
|
|
294
|
+
emits: absolute
|
|
295
|
+
- id: filtering
|
|
296
|
+
family: pagination
|
|
297
|
+
measurable_example: "Each filter narrows correctly; combined filters AND"
|
|
298
|
+
emits: absolute
|
|
299
|
+
- id: empty-state
|
|
300
|
+
family: empty_state
|
|
301
|
+
measurable_example: "No results \u2192 friendly empty state, not blank/error"
|
|
302
|
+
emits: presence
|
|
303
|
+
- id: invalid-input
|
|
304
|
+
family: negative
|
|
305
|
+
measurable_example: "Garbage query \u2192 no crash, sane result"
|
|
306
|
+
emits: forbidden-presence
|
|
307
|
+
- id: length-limits
|
|
308
|
+
family: bva
|
|
309
|
+
measurable_example: "Max-length query handled"
|
|
310
|
+
emits: absolute
|
|
311
|
+
- id: locale
|
|
312
|
+
family: i18n
|
|
313
|
+
measurable_example: "Locale-correct collation/casing"
|
|
314
|
+
emits: presence
|
|
315
|
+
`};var Je=`
|
|
316
|
+
version: 1
|
|
317
|
+
principles:
|
|
318
|
+
- "Each step is one complete OBJECTIVE the browser agent achieves autonomously \u2014 state the goal and the path, never low-level actions (the agent emits its own actions)."
|
|
319
|
+
- "One objective (or tightly-related items of one goal) per step; unrelated goals split."
|
|
320
|
+
- "Verbose path: name site, page, section, panel, control, state \u2014 'On the search results page for Noida, in the filter panel's Budget section, set min to 50L and max to 1Cr'."
|
|
321
|
+
- "Self-contained: concrete values inline; never 'as defined in the scenario' \u2014 the agent cannot see the graph."
|
|
322
|
+
- "Browser-only: the agent authors/runs BROWSER tests. Direct API calls and the page's own network traffic ARE in scope; native-app-only behavior, out-of-band email/SMS, backend state with no browser surface are NOT."
|
|
323
|
+
verification:
|
|
324
|
+
- "Phrase checks against the analyzer that observes them:"
|
|
325
|
+
- "Visual \u2014 visible text, labels, counts, prices ('verify the price is 29.99', 'the Sold out label is shown')."
|
|
326
|
+
- "Textual/DOM \u2014 element states/attributes ('the Add button is disabled', 'the placeholder of the search box is \u2026')."
|
|
327
|
+
- "URL \u2014 'URL contains /checkout', 'redirected to /login'. Title \u2014 'page title contains \u2026'."
|
|
328
|
+
- "DevTools/Network \u2014 'no API calls returned 5xx', 'the POST /api/login returned 200' (covers direct API calls too)."
|
|
329
|
+
- "DevTools/Console \u2014 'no console errors'. Performance \u2014 'LCP under 2500ms'. Cookies/localStorage \u2014 'a cookie named session_id exists'."
|
|
330
|
+
- "Assertions: 'Assert/Verify/Confirm \u2026'. Extractions: 'Store \u2026 as name' \u2014 vague verbs (read/tell/report) do NOT persist values."
|
|
331
|
+
- "Baselines/deltas are EXTRACTIONS: 'store the result count as baseline_count' BEFORE the action; compare after. Never an abstract 'capture the state'."
|
|
332
|
+
variables:
|
|
333
|
+
- "Credentials and environment values are {{name}} variables; concrete domain values from the source stay literal."
|
|
334
|
+
- "A value no evidence supplies (start URL, test account, seed data) is ASKED for \u2014 actual value or a variable name \u2014 never invented."
|
|
335
|
+
pitfalls:
|
|
336
|
+
- "A test without a starting URL cannot run \u2014 the first step names it."
|
|
337
|
+
- "'Test the checkout flow' has no end state \u2014 state what done looks like."
|
|
338
|
+
- "Do not cram many unrelated operations into one step; do not reference data outside the step."
|
|
339
|
+
`;var pt=["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"];function et(t,e){for(let n of t)if(!pt.includes(n))throw new Error(`${e}: emits '${n}' is not an oracle kind`)}function Xe(t,e){let n=ie(t);if(!n||!Array.isArray(n.techniques))throw new Error(`${e}: expected { techniques: [...] }`);for(let i of n.techniques){if(!i.id||!i.name||!i.applies_hint||!Array.isArray(i.emits))throw new Error(`${e}: technique '${i?.id??"?"}' missing id/name/applies_hint/emits`);et(i.emits,`${e}: technique '${i.id}'`)}return n.techniques}function Ze(t,e){let n=ie(t);if(!n||!n.id||!n.name||!n.applies_when||!Array.isArray(n.candidate_checks))throw new Error(`${e}: profile missing id/name/applies_when/candidate_checks`);for(let i of n.candidate_checks){if(!i.id||!i.family||!i.measurable_example||!i.emits)throw new Error(`${e}: candidate_check '${i?.id??"?"}' missing id/family/measurable_example/emits`);et([i.emits],`${e}: check '${i.id}'`)}return n}function tt(t){let e=new Map(Xe(Qe,"packaged techniques").map(i=>[i.id,i])),n=Z(t,"design","techniques.yaml");if(ue(n))for(let i of Xe(ge(n,"utf8"),n))e.set(i.id,i);return[...e.values()]}function st(t){let e=new Map(Object.entries(Ye).map(([i,g])=>[i,Ze(g,`packaged profile '${i}'`)])),n=Z(t,"design","profiles");if(ue(n))for(let i of gt(n).filter(g=>g.endsWith(".yaml")||g.endsWith(".yml")).sort()){let g=Ze(ge(Z(n,i),"utf8"),Z(n,i));e.set(g.id,g)}return[...e.values()]}function it(t){let e=Z(t,"design","runner-grammar.yaml");return ue(e)?ge(e,"utf8"):Je}function ee(t,e){return!t.superseded.has(e)}function pe(t,e,n){return{cid:e,logical_id:t.nameOf.get(e)??null,content:n}}async function nt(t,e,n,i,g){let r=await Ne(t,"search_similar",{text:e,label:n,k:i},g);return r.ok&&Array.isArray(r.result)?r.result:[]}async function rt(t,e,n={}){let i=G(t),g=i.resolve(e);if(!g)throw new Error(`assembleDesignContext: unknown use-case '${e}' (run designGate first)`);let r=g.tip,x=i.getNode(r);if(!x||x.label!==V.USECASE)throw new Error(`assembleDesignContext: '${e}' is not a use-case (run designGate first)`);let O=i.derivesInto(r).map(d=>({source_id:d.props.source_id??null,anchor:d.props.anchor??null})),S=[],E=new Set;for(let{cid:d,content:k}of i.byLabel(V.SCENARIO))ee(i,d)&&i.edgesFrom(d).some(y=>y.type===J.BELONGS_TO&&y.dst===r)&&(S.push(pe(i,d,k)),E.add(d));let D=[];for(let{cid:d,content:k}of i.byLabel(V.AC)){if(!ee(i,d))continue;let y=i.edgesFrom(d).find(T=>T.type===J.SCOPED_TO);!y||y.dst!==r&&!E.has(y.dst)||D.push({...pe(i,d,k),scoped_to:y.dst})}let w=Array.isArray(x.content.criteria)?x.content.criteria:[],_=[x.content.title,x.content.description,...w].filter(Boolean).join(`
|
|
340
|
+
`),F=(await nt(i,_,V.SCENARIO,10,n.embedSearch)).filter(d=>!E.has(d.cid)),B=[],R=new Set,p=[],f=[r],v=new Set([r]);for(;f.length>0;){let d=f.shift();for(let k of i.edgesFrom(d)){if(k.type!==J.DEPENDS_ON||i.nodeLabel.get(k.dst)!==V.USECASE)continue;let y=i.tipOf(k.dst);v.has(y)||(v.add(y),p.push(y),f.push(y))}}for(let d of p){let k=`depends_on ${i.nameOf.get(d)??d.slice(0,19)}`;for(let{cid:y}of i.byLabel(V.SCENARIO))if(ee(i,y)&&i.edgesFrom(y).some(T=>T.type===J.BELONGS_TO&&T.dst===d))for(let T of i.edgesInto(y)){if(T.type!==J.AUTOMATES||!ee(i,T.src)||R.has(T.src))continue;R.add(T.src);let Q=String(i.getNode(T.src)?.content.title??"");B.push({cid:T.src,logical_id:i.nameOf.get(T.src)??null,title:Q,via:k})}}for(let d of await nt(i,_,V.TEST,5,n.embedSearch)){let{cid:k,title:y}=d;R.has(k)||(R.add(k),B.push({cid:k,logical_id:i.nameOf.get(k)??null,title:y??"",via:"similar"}))}let P=i.byLabel(V.STYLENOTE).filter(d=>ee(i,d.cid)).sort((d,k)=>d.cid<k.cid?-1:1).slice(0,5).map(d=>`${String(d.content.statement)} [${String(d.content.learned_from_kind)}]`);return{usecase:pe(i,r,x.content),cites:O,committed_acs:D,existing:{scenarios:S,reuse_candidates:F},import_candidates:B,style_notes:P,techniques:tt(t),profiles:st(t),runner_grammar:it(t),budget:{...n.max!=null?{max_pairs:n.max}:{},...n.strength!=null?{strength_override:n.strength}:{}},design_of:(()=>{let d=He(i,r);return d?{engine:d.engine,seq:d.seq}:null})()}}function ot(t){let e=n=>{if(Array.isArray(n))return n.map(e);if(n!==null&&typeof n=="object"){let i={};for(let g of Object.keys(n).sort())i[g]=e(n[g]);return i}return n};return JSON.stringify(e(t),null,1)}import{basename as ht,dirname as _t,resolve as yt}from"path";var ft=oe,bt=new Set(["narrative","acs","scenarios","tests","exercises","gaps","scoped_to_repoints","judgements","phase"]);function wt(t){let e=/strength=(\d+)\s*(?:—|-)?\s*(.*)/.exec(t??"");return e?{strength:Number(e[1]),reason:e[2]||t||""}:{strength:2,reason:t??""}}function vt(t,e,n=new Set,i=0){return ft(e,ae(t),n,i)}function kt(t,e,n,i){let g=e.scenarios?.find(w=>w.temp_ref===n.automates)??(()=>{let w=t.resolve(n.automates),_=w?t.getNode(w.tip)?.content:void 0;return _?{title:String(_.title??""),intent:String(_.intent??""),technique_notes:String(_.technique_notes??"")}:{}})(),r=[...(e.acs??[]).map(w=>({ref:w.temp_ref,text:w.text})),...n.verifies.filter(w=>!(e.acs??[]).some(_=>_.temp_ref===w)).map(w=>{let _=t.resolve(w);return{ref:w,text:_?String(t.getNode(_.tip)?.content.text??""):""}})],{test_md:x,objectives_yaml:O}=we({title:n.title,steps:n.steps,check:n.check,check_prose:n.check_prose,reuses:n.reuses},{title:g.title,intent:g.intent},r),S=re(vt(t,x)),E=n.check,D={technique:g.technique_notes??"",profile_family:e.judgements?.find(w=>w.kind==="profile_family"&&(w.target===n.temp_ref||w.target===n.automates))?.rationale??"unspecified",anchor:E.verified_against,expected_how:e.judgements?.find(w=>w.kind==="expected_how"&&w.target===E.verified_against)?.rationale??`expected_mode: ${E.expected_mode??"inferred"}`,combinatorial:wt(g.technique_notes),surface_state:"absent",deferred_bindings:E.expected_mode==="runtime-derived"?1:0};return i.push({definitionId:S,rationale:D,anchorRef:E.verified_against,tempRef:n.temp_ref}),{temp_ref:n.temp_ref,title:n.title,automates:n.automates,verifies:n.verifies,check:n.check,definitionId:S,test_md_blob:x,objectives_blob:O,...n.reuses?.length?{reuses:n.reuses}:{},...n.surface_required!==void 0?{surface_required:n.surface_required}:{}}}function at(t){let e=0,n=t.forceScope??null;return{terminalEventType:"design",async onProposalEvent(i){let g=o=>t.steer?(t.steer(`[auto-repair] ${o} \u2014 please re-finalize with this fixed.`),{proposal:null,error:null}):{proposal:null,error:o};if(i==null||typeof i!="object")return g("finalize_design payload is not an object");let r=i,x=Object.keys(r).filter(o=>!bt.has(o));if(x.length>0)return g(`finalize_design carries ungated/unknown section(s): ${x.join(", ")} \u2014 mintable here: acs, scenarios, tests (+gaps)`);let O=new Map;for(let o of r.tests??[]){let u=O.get(o.automates);if(u)return g(`strict 1:1 violated in-payload: ${u} and ${o.temp_ref} both automate ${o.automates}`);O.set(o.automates,o.temp_ref)}let S=G(t.contextDir);t.force&&!t.resuming&&e===0&&n===null&&(n=ze(S,t.ucRef));let E=S.resolve(t.ucRef),D=E?String(S.getNode(E.tip)?.content.risk??"med"):"med",w=[],_=new Set([t.ucRef,E?.cid,E?.tip].filter(Boolean)),F=o=>{if(_.has(o))return!0;let u=S.resolve(o);return u!=null&&(_.has(u.cid)||_.has(u.tip))},B;try{B={...r.acs?.length?{acs:r.acs.map(o=>({temp_ref:o.temp_ref,text:o.text,kind:o.kind,risk:o.risk??D,...o.expected_answer?{expected_answer:o.expected_answer}:{},...o.scoped_to&&!F(o.scoped_to)?{scope:{type:"scenario",ref:o.scoped_to}}:{}}))}:{},...r.scenarios?.length?{scenarios:r.scenarios}:{},...r.tests?.length?{tests:r.tests.map(o=>kt(S,r,o,w))}:{},...r.exercises?.length?{exercises:r.exercises}:{},...r.gaps?.length?{gaps:r.gaps}:{},...r.scoped_to_repoints?.length?{scoped_to_repoints:r.scoped_to_repoints}:{},...r.judgements?.length?{judgements:r.judgements}:{}}}catch(o){return g(o instanceof Error?o.message:String(o))}let R=r.phase??(r.tests?.length?"tests":r.scenarios?.length?"scenarios":r.acs?.length?"acs":"design"),p=(o,u={})=>({contextDir:t.contextDir,graph:o,ucRef:t.ucRef,sections:B,by:t.by,phase:R,...u,...t.templateVersion?{templateVersion:t.templateVersion()}:{},...t.engine?{engine:t.engine}:{},...n?.length?{forceScope:n}:{},...t.because?{reason:t.because}:{},finalizeTestBody:(()=>{let A=new Map((B.tests??[]).map(I=>[I.temp_ref,I])),C=new Map,Y=(I,q,H)=>{let j=A.get(I);if(!j?.test_md_blob)return null;let U=C.get(I);if(U!==void 0)return U;if(H.has(I))return j.test_md_blob;H.add(I);let z=new Map;for(let W of j.reuses??[]){Y(W,q,H);let b=q(W);b!==null&&b!==W&&z.set(W,b)}let N=j.verifies.map(q).filter(W=>W!==null),K=ye(be(j.test_md_blob,z),N);return C.set(I,K),K};return(I,q)=>{if(!I.test_md_blob)return null;let H=Y(I.temp_ref,q,new Set)??I.test_md_blob;if(H===I.test_md_blob)return null;let j=U=>{for(let z of A.keys())if(q(z)===U){let N=Y(z,q,new Set);if(N!==null)return{body:N,cycleKey:`batch:${U}`,next:j}}return ae(S)(U)};return{test_md_blob:H,definitionId:re(oe(H,j))}}})()}),f;if(t.protocol){let o=t.generationTicket,u=await Te(t.protocol,{verb:"design",ucTargets:[{ref:t.ucRef}],newBuCandidates:[],sourcePins:[],readBasis:S.latestHash,...o?{generationTicket:o}:{}},A=>{let C=me(p(A.graph,{eventIds:A.eventIds("design",1),sid:A.sid,...o&&!t.generationStamped?{generationTicket:o}:{}}));return C.errors!==null?{errors:C.errors}:{result:C,record:C.record}});u.ok&&"result"in u?(f=u.result,o&&!t.generationStamped&&(t.generationStamped=!0,t.generationTicket={...o,expected_prev_gen:o.next_gen})):u.ok?f={record:null,errors:null,minted:{},logicalIds:{},superseded:[],warnings:["commit already applied (recommit)"],finalizedTests:{}}:f={record:null,errors:u.kind==="validation"?u.errors:u.kind==="contended"?[{code:u.err.code,detail:`${t.ucRef} is held by ${u.err.holder?.owner_sid??"another session"}${u.err.holder?.alive?" (live)":" (stale)"} \u2014 try another use-case or wait for it to free`}]:u.kind==="drifted"?u.asks.map(C=>({code:"DRIFTED",detail:C.detail})):[{code:"UNSETTLED",detail:`concurrent activity kept moving the store (${u.attempts} attempts) \u2014 retry when the store is quieter`}],minted:{},logicalIds:{},superseded:[],warnings:[],finalizedTests:{}}}else f=me(p(S));if(f.errors)return g("design commit failed: "+f.errors.map(o=>`${o.code}: ${o.detail}`).join("; "));let v=f.warnings.filter(o=>o.includes("\u2014 committed anyway; approve"));for(let o of f.warnings)(!v.includes(o)||v.length===1)&&t.note(`warning: ${o}`);v.length>1&&t.note(`warning: ${v.length} test link(s) refer to items still awaiting approval \u2014 saved anyway; review and approve those items in chat or via kane-cli context review`);let P=(o,u)=>o?`${o} ${u}${o>1?"s":""}`:null,d=[P(r.acs?.length,"AC"),P(r.scenarios?.length,"scenario"),P(r.tests?.length,"test"),P(r.gaps?.length,"gap")].filter(Boolean);t.aliases?.(Object.entries(f.minted).map(([o,u])=>({ref:o,cid:u,...f.logicalIds[o]?{id:f.logicalIds[o]}:{}})));{let o=`saved ${d.join(" \xB7 ")||"judgements/wiring"} as drafts`;(t.commitLine??t.note)(o)}let k=G(t.contextDir);t.onCommitted?.(k);for(let o of w){let u=f.logicalIds[o.anchorRef]??f.minted[o.anchorRef];Ve(t.contextDir,f.finalizedTests[o.tempRef]??o.definitionId,{...o.rationale,anchor:u??o.rationale.anchor})}try{let o=Object.values(f.minted).filter(u=>k.getNode(u)?.label==="test");if(o.length>0){let u=_t(yt(t.contextDir)),A=We({graph:k,cids:o,cwd:u});A.wrote.length>0&&t.note(`\u2692 wrote ${A.wrote.map(C=>ht(C.path)).join(" \xB7 ")}`);for(let C of A.refused)t.note(`warning: could not create the test file for ${C.id} \u2014 ${C.reason}`)}}catch(o){t.note(`warning: the design was saved, but its test file could not be created (${o instanceof Error?o.message:String(o)})`)}t.event?.({type:"commit",acs:r.acs?.length??0,scenarios:r.scenarios?.length??0,tests:r.tests?.length??0,gaps:r.gaps?.length??0,warnings:f.warnings.length,minted:Object.entries(f.minted).map(([o,u])=>({temp_ref:o,cid:u,...f.logicalIds[o]?{logical_id:f.logicalIds[o]}:{}}))}),e+=1,n!==null&&(n=f.forceScopeRemaining??n,t.onForceScope?.(n));let y=Oe({verb:"design",commitN:e,ucRef:t.ucRef,phase:R,committed:Object.entries(f.minted).map(([o,u])=>({temp_ref:o,cid:u,...f.logicalIds[o]?{logical_id:f.logicalIds[o]}:{}})),warnings:f.warnings},k),T=y.event.parity?.missing??[],Q=!!r.tests?.length&&T.length===0;return{proposal:f,error:null,receipt:y,...Q?{sessionComplete:Q}:{}}}}}function ct(t,e){return{type:"run_config",version:1,session_id:e.session_id,mode:e.mode,source:{source_id:`design:${t.usecase.logical_id??e.ucCid.slice(0,19)}`,source_cid:e.ucCid,kind:"design_context",numbered_text:ot({...t,session_mode:e.mode})},existing_use_cases:[],read_basis:e.readBasis,max_free_text_rounds:2,graph_reads:!0,verb:"design",chat:!0,design_budget:t.budget,topology:e.topology}}var mt=Symbol("design-out-tee");function Rt(t,e,n,i){return{terminalEventType:"design",async onProposalEvent(g){let r=g??{},x=["acs","scenarios","tests","gaps"].map(O=>r[O]?.length?`${r[O].length} ${O}`:null).filter(Boolean).join(" \xB7 ");return n?.("plan_payload",{payload:r}),t(`plan: finalize_design \u2014 ${x||"wiring/judgements only"} (nothing committed${i?`; full payload: ${te(i)}`:""})`),e?.({type:"plan",payload:r}),{proposal:r,error:null}}}}async function Rs(t,e){let n=G(e.contextDir),i=null,g=null,r=t.useCase;if(t.resume){try{{let m=await Be(e.contextDir,t.resume,n,{deps:{onWarn:h=>e.out(`note: ${h}`)}});g=m,i=m.handle,m.drift.length>0&&(e.out(`note: sources changed since the pause: ${m.drift.map(h=>h.subject).join(", ")} \u2014 the design continues against the current versions`),e.emit?.({type:"stale_basis",sources:m.drift.map(h=>h.subject)}))}}catch(m){if(m instanceof _e||m instanceof de)return e.out(`error: ${m.message}`),e.emit?.({type:"error",message:`error: ${m.message}`}),m instanceof de||m.code==="SESSION_MISSING"||m.code==="SESSION_EXPIRED"?2:1;throw m}let s=i.state,c=qe(s.verb,"design",t.resume);if(c)return e.out(c.message),e.emit?.({type:"error",message:c.message,code:c.code}),i.release(),2;if(r&&s.use_case&&r!==s.use_case){let m=`session ${t.resume} was designing ${s.use_case}; --use-case ${r} RETARGETS it`;if(!(t.confirmRetarget?await t.confirmRetarget(`${m} \u2014 continue with the new target?`):!1))return e.out(`error: ${m} \u2014 resume without --use-case to continue ${s.use_case}, or start a fresh session on ${r}`),e.emit?.({type:"error",code:"RETARGET_MISMATCH",message:m}),i.release(),2}if(r=r??s.use_case,s.uc_tip&&r){let m=n.resolve(r)?.tip;if(m&&m!==s.uc_tip){let h=`the use-case changed since the pause (${s.uc_tip.slice(0,19)}\u2026 \u2192 ${m.slice(0,19)}\u2026)`;if(!(t.confirmRetarget?await t.confirmRetarget(`${h} \u2014 re-ground and continue against the new version?`):!1))return e.out(`error: ${h} \u2014 resume interactively to re-ground, or abandon this session`),e.emit?.({type:"error",code:"UC_TIP_MOVED",message:h}),i.release(),2;e.emit?.({type:"stale_basis",usecase:r})}}let l=Ke(n,s.target_pins);if(l.length>0){let m=`items this session pinned have changed since it paused: ${l.map($=>`${$.ref}${$.now===null?" (now gone)":""}`).join(", ")}`;if(!(t.confirmRetarget?await t.confirmRetarget(`${m} \u2014 re-ground and continue?`):!1))return e.out(`error: ${m} \u2014 resume interactively to re-ground, or abandon`),e.emit?.({type:"error",code:"TARGET_PIN_MOVED",message:m}),i.release(),2;i.save({target_pins:(s.target_pins??[]).map($=>({ref:$.ref,cid:n.resolve($.ref)?.tip??$.cid}))})}let a=[...new Set([...i.state.held_receipts??[],...g?.view.kane?.held_receipts??[]])];if(a.length>0)if(e.chat?.holdReceipt)for(let m of a)e.chat.holdReceipt(m);else e={...e,initialMessage:[a.join(`
|
|
341
|
+
|
|
342
|
+
`),e.initialMessage].filter(Boolean).join(`
|
|
343
|
+
|
|
344
|
+
`)};if(!r)return e.out(`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),e.emit?.({type:"error",message:`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let x=t.resume?void 0:t.phase,O=!1;if(x!==void 0){let{checkPhaseEntry:s,phaseEntryCmd:c,phaseLadderFor:l}=await import("./phase-seed-VFHIH6FL.js");O=l(e.contextDir,n,r).length>0;let a=s(e.contextDir,n,r,x);if(!a.ok&&a.code==="UNKNOWN_PHASE")return e.out(`error: ${a.message}`),e.emit?.({type:"error",code:"UNKNOWN_PHASE",message:a.message}),i?.release(),2;if(!a.ok&&a.code==="PHASE_ORDER"){let m=t.askPhaseEntry?await t.askPhaseEntry({message:a.message,earliest:a.earliest}):"cancel";if(m==="earliest")e.out(`starting at ${a.earliest} instead (${a.missing.join(", ")} not committed yet)`),x=a.earliest;else if(m==="proceed")e.out(`note: entering at ${x} with ${a.missing.join(", ")} uncommitted \u2014 proceeding on your say-so`),e.emit?.({type:"phase_entry_override",phase:x,missing:a.missing});else{let h=(t.mode??"interactive")==="agent",$=c(r,a.earliest,h);return e.out(`error: ${a.message}`),e.emit?.({type:"error",code:"PHASE_ORDER",message:a.message,next:[{cmd:$,why:`${a.earliest} is the earliest uncommitted phase for ${r}`,title:`Start at ${a.earliest}`}]}),i?.release(),2}}}let S=!!(t.force||i?.state.force),E=!!(t.resume&&i),D=Ue(n,r,S||E||O);if(!D.ok){let s=(t.mode??"interactive")==="interactive";if(D.wall&&s&&t.askDesignEntry){let{captureForceScope:c}=await import("./design-committer-VYT6NU3T.js"),l=c(n,r).length,a=await t.askDesignEntry({wall:D.wall.kind,message:D.message,display:D.wall.display,impactPairs:l});if(a.pick==="redesign"||a.pick==="proceed"){if(!a.because.trim())return e.out("a redesign needs a reason (--because) \u2014 nothing executed"),i?.release(),2;e.out(a.pick==="redesign"?`redesigning ${D.wall.display} (${l} pair(s) superseded) \u2014 because: ${a.because.trim()}`:`proceeding against the stale design (noted) \u2014 because: ${a.because.trim()}`),t={...t,force:!0,because:t.because??a.because.trim()},S=!0}else return a.pick==="view"?(e.out(`view the existing design: kane-cli context view ${D.wall.display}`),i?.release(),0):a.pick==="refresh"?(e.out(`refresh it first: kane-cli maintain evolve ${D.wall.display}`),i?.release(),0):(e.out("nothing executed \u2014 list use-cases: kane-cli context list"),i?.release(),0)}else{e.out(`design: ${D.message}`);let c=D.wall&&t.mode==="agent"?[{cmd:`kane-cli context view ${D.wall.display}`,why:"view the existing design",title:"View the design"},...D.wall.kind==="designed-stale"?[{cmd:`kane-cli maintain evolve ${D.wall.display}`,why:"the use-case moved since the design \u2014 evolve refreshes it",title:"Evolve the design"}]:[],{cmd:`kane-cli design tests --use-case ${D.wall.display} --force --mode agent`,why:"redesign \u2014 supersedes the live scenario+test pairs",title:"Redesign"}]:void 0;return e.emit?.({type:"gate_refused",message:D.message,...c?{next:c}:{}}),i?.release(),D.code}}if(e.preflightTurn){let s=await e.preflightTurn();if(!s.ok)return e.out(s.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:s.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),i?.release(),2}let w={contextDir:e.contextDir,resolveAlias:s=>Ae(s,{env:process.env,auth:e.auth}),embed:(s,c)=>Ie(s,c,{env:process.env,auth:e.auth})};e.chat?.setWorking?.("assembling context\u2026");let _=await rt(e.contextDir,r,{max:t.max,strength:t.strength,embedSearch:w});if(t.priorDesign!==void 0&&(_.prior_design=t.priorDesign),t.changeDelta!==void 0&&(_.change_delta=t.changeDelta),t.because&&(_.because=t.because),x!==void 0){let{buildPhaseSeed:s}=await import("./phase-seed-VFHIH6FL.js"),c=s(e.contextDir,n,r,x);_.prior_design===void 0&&c.priorDesign!==void 0&&(_.prior_design=c.priorDesign),_.entry_phase=x,c.phaseLadder.length>0&&(_.phase_ladder=c.phaseLadder)}let F=e.now?.()??new Date,B=`${F.toISOString().replace(/[-:]/g,"").slice(0,15)}-${Dt(2).toString("hex")}`,R=t.mode??"interactive",p=g?{...g.spawnConfig,mode:R}:ct(_,{session_id:t.resume??`design-${B}`,mode:R,ucCid:_.usecase.cid,readBasis:n.latestHash,topology:Le("design")}),f={current:null};if(p.resume&&"schema"in p.resume){let s=p.resume.binding?.template_version;typeof s=="string"&&(f.current=s)}t.plan?p.chat=!1:p.chat=!0;let v=e.telemetry?.enabled?e.telemetry:void 0,P=v?he(v.ids.context_instance_id??null,"design",v.ids.session_id):fe(e.contextDir,"logs",`design-${B}.log`);xt(dt(P),{recursive:!0}),e.out(`trace: ${te(P)}`),e.emit?.({type:"run_start",mode:R,trace:P,use_case:r,...v?{session:v.ids.session_id}:{}});let d=(s,c,l)=>{try{St(P,JSON.stringify({ts:new Date().toISOString(),level:s==="error"?"error":"info",run_id:v?.ids.operation_id,...v?{user_session_id:v.ids.session_id}:{},kind:s,session_id:l,data:c})+`
|
|
345
|
+
`)}catch{}v?.wireTrace(s,c,l)};{let s=e.out;if(s[mt]!==!0){let c=l=>{d("transcript",{line:l}),s(l)};c[mt]=!0,e.out=c}}if(t.resume&&i){g||(p.resume={agent_state:i.state.agent_state}),e.out(`resuming design session ${t.resume}`),i.state.assumed.length>0&&e.out(`note: ${i.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${t.resume} lists them`);try{let{readRecords:s}=await import("./records-IOZTZUZV.js"),c=s(e.contextDir).records.filter(l=>l.sid===t.resume).map(l=>l.design_phase).filter(l=>l!=null&&typeof l.phase=="string");if(c.length>0){let l=c.map(m=>`${m.phase}${m.completeness==="partial"?" (partial)":""}`).join(" \u2192 "),a=`[kane] durable record for this session (${t.resume}) on ${r}: design phases already COMMITTED \u2014 ${l}. Those finalizes landed; do not re-send them. Continue from the next uncommitted phase, or finish if the design is complete.`;e={...e,initialMessage:[e.initialMessage,a].filter(Boolean).join(`
|
|
346
|
+
|
|
347
|
+
`)}}}catch{}t.message&&(e={...e,initialMessage:[e.initialMessage,t.message].filter(Boolean).join(`
|
|
348
|
+
|
|
349
|
+
`)})}let k=null,y={current:n},T={detach:null},Q=()=>{let s=T.detach;T.detach=null,s&&s()},o=(s,c)=>{let l=i;if(!l)return{};let a=s.ask,m=je({contextDir:s.contextDir,cwd:dt(s.contextDir),handle:l,note:h=>s.chat?s.chat.note(h):s.out(h),graphSlot:c,...s.now?{now:s.now}:{}});if(s.chat?.attachIngest){let h=s.chat;T.detach=h.attachIngest(async $=>{try{l.save({ingest_registry:le(l.state.ingest_registry,$,s.now?.()??new Date)});let L=await m({id:`attach-${l.state.sid}-${(l.state.ingest_registry??[]).length}`,ref:$,purpose:null});return L.ok?(h.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 h=>{let $=await a(h);if(Array.isArray($)){let L=$.filter(M=>{if(M.free_text==null||M.free_text.trim()==="")return!1;let se=h.find(ut=>ut.id===M.id);return M.selected_index!=null&&se?.options[M.selected_index]?.input===!0}).map(M=>M.free_text.trim());if(L.length>0){let M=l.state.ingest_registry;for(let se of L)M=le(M,se,s.now?.()??new Date);l.save({ingest_registry:M})}}return $},ingest:m}};e.nested||e.chat?.attachOnCommitted?.(s=>{y.current=s});let u="";if(e.chat&&!t.plan&&!e.nested){let s=Pe({contextDir:e.contextDir,graph:G(e.contextDir),sessionStamp:p.session_id,by:e.by??{kind:"human",id:"owner"}});s.errors===null||s.errors[0]?.code==="CONV_SOURCE_EXISTS"?(u=s.sourceId,e.chat.attachConversationSource?.(u),y.current=G(e.contextDir)):e.out(`warning: notes you add in chat can't be saved to the context this session (${s.errors[0]?.detail})`)}let A=G(e.contextDir),C;if(!t.plan){let s=Ee(A,r);if(E&&s!==null&&s.live){let c=A.resolve(r);C={uc_root:$e(A,c.cid),next_gen:s.gen,expected_prev_gen:s.gen}}else{let c=Ce(A,r,{...S?{force:!0}:{},because:t.because??(S?"forced redesign (--force)":void 0)});if("error"in c)return e.out(`design: ${c.error.detail}`),e.emit?.({type:"gate_refused",message:c.error.detail,code:c.error.code}),i?.release(),2;C=c}}let Y=ke(e.contextDir,p.session_id),I=null,q=()=>{try{I?.release()}catch{}};if(!t.plan)try{I=Y.acquire([xe(A,r).key],{hold:"session",verb:"design"})}catch(s){if(s instanceof ve&&s.code==="UC_HELD"){let c=s.holder,l=`design: ${r} is being designed by another session${c?.alive===!1?` \u2014 that session looks stopped; resume it with kane-cli design tests --resume ${c?.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 H={contextDir:e.contextDir,rootSid:p.session_id,locks:Y,probe:{batchSimilar:async()=>({hits:[],degraded:!1,probeBasis:null}),recheckLocal:()=>({hits:[],uncachedNewNodes:[]})}},j=!t.plan&&R!=="ci",U=()=>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])),z=!1;j&&!i&&(z=!0,i=ne(e.contextDir,{sid:p.session_id,mode:"agent",created_at:F.toISOString(),expires_at:new Date(F.getTime()+1440*60*1e3).toISOString(),agent_state:{schema:2,items:[],provider_state:""},pending:{questions:[],proposals:[]},read_basis:U(),assumed:[],corpus_cursor:{remaining:[]},conv_source:u,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}:{},...S?{force:!0}:{},...v?{user_session_id:v.ids.session_id}:{}}));let N;if(j&&i){let{resume:s,...c}=p;Re(e.contextDir,p.session_id,{schema:De,kind:"base",sid:p.session_id,verb:"design",mode:R,created_at:F.toISOString(),run_config:c,conv_source:u||i.state.conv_source||"",...r?{use_case:r}:{},...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},store_watermark:Se(e.contextDir)}),p.checkpoints=!0,t.resume&&d("resume_kind",{kind:g?g.view.pointer===null?"bare-base":g.view.pointer.at==="final"?"pause":"crash":"v1-shim"},p.session_id);let l=g?0:i.state.checkpoint?.seq??0,a=i;N=Fe({contextDir:e.contextDir,handle:a,seqBase:()=>l,peekHeldReceipts:()=>e.chat?.peekHeldReceipts?.()??[],readBasis:()=>U(),corpusCursor:()=>({remaining:[]}),onSoftCap:h=>e.out(h),onStat:h=>d("ckpt_stat",h,p.session_id),...e.now?{now:e.now}:{}});let m=N;N={...m,persist:h=>{let $=h.binding?.template_version;return typeof $=="string"&&$&&(f.current=$),m.persist(h)}}}let K=()=>{if(!i)return;let s=i.state.checkpoint;if(s){let c=R!=="interactive"?` --mode ${R}`:"";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}${c}`),i.release()}else if(z){try{i.complete()}catch{i.release()}try{lt(fe(e.contextDir,"sessions"))}catch{}}else i.release();i=null},W=t.plan?Rt(e.out,e.emit,d,P):at({templateVersion:()=>f.current,contextDir:e.contextDir,ucRef:r,by:{kind:"ai",id:"design-agent"},force:S,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:E,...i?.state.force_scope?.length?{forceScope:i.state.force_scope}:{},onForceScope:s=>{k=s},...t.because?{because:t.because}:{},aliases:e.chat?s=>e.chat.registerAliases?.(s):void 0,onCommitted:s=>{y.current=s},protocol:H,...C?{generationTicket:C}:{},...E?{generationStamped:!0}:{}});e.chat||(d("design_budget",{max_pairs:_.budget.max_pairs??null,strength:_.budget.strength_override??null}),e.out(`designing: ${_.usecase.logical_id??r}`)),e.chat?.setWorking?.(`designing ${_.usecase.logical_id??r}\u2026`);let b;try{b=await ce(p,{...e,graphSlot:y,...o(e,y),...N?{checkpoint:N}:{}},new Map,n,d,W)}catch(s){throw d("error",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack:void 0},p.session_id),K(),s}finally{e.chat?.setWorking?.(null),Q()}if(b.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(a=>a.id==="binding-mismatch"):void 0)?.selected_index!==0){let a=`resume abandoned: binding mismatch on session ${p.session_id} \u2014 the session is preserved`;return e.out(a),e.emit?.({type:"error",message:a,code:"BINDING_MISMATCH"}),i?.release(),2}d("binding_migrate",{sid:p.session_id},p.session_id);let l=p.resume&&"schema"in p.resume?{...p.resume,binding:{}}:void 0;try{b=await ce({...p,...l?{resume:l}:{}},{...e,graphSlot:y,...o(e,y),...N?{checkpoint:N}:{}},new Map,n,d,W)}catch(a){throw d("error",{message:a instanceof Error?a.message:String(a),stack:a instanceof Error?a.stack:void 0},p.session_id),K(),a}finally{e.chat?.setWorking?.(null),Q()}}if(b.highRisk)return e.out(`error: ${b.highRisk.length} high-risk decision${b.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): ${b.highRisk.map(s=>s.id).join(", ")}`,code:"HIGH_RISK_CI"}),K(),q(),1;if(b.paused){let s=i;s||(s=ne(e.contextDir,{sid:p.session_id,mode:"agent",created_at:F.toISOString(),expires_at:new Date(F.getTime()+1440*60*1e3).toISOString(),agent_state:b.paused.agent_state,pending:{questions:[],proposals:[]},read_basis:Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(a=>a.type==="DERIVES"&&typeof a.props.source_id=="string").map(a=>[String(a.props.source_id),n.heads.get(String(a.props.source_id))??null])),assumed:[],corpus_cursor:{remaining:[]},conv_source:u,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}:{},...S?{force:!0}:{},...v?{user_session_id:v.ids.session_id}:{}}));try{S&&!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}),u&&s.state.conv_source!==u&&s.save({conv_source:u});let a=e.chat?.drainHeldReceipts?.()??[];(a.length>0||(s.state.held_receipts?.length??0)>0)&&s.save({held_receipts:a}),k!==null&&s.save({force_scope:k}),Me(s,b.paused)}catch(a){let m=s.state.checkpoint,h=`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")+` (${a instanceof Error?a.message:String(a)})`;return e.out(h),e.emit?.({type:"error",message:h,code:"PAUSE_PERSIST_FAILED",sid:s.state.sid}),1}d("session_paused",{sid:s.state.sid},p.session_id);let c=R!=="interactive"?` --mode ${R}`:"",l=`kane-cli design tests --resume ${s.state.sid}${c}`;return e.out(`paused \u2014 resume with: ${l}`),e.emit?.({type:"session_paused",sid:s.state.sid,mode:R,resume:l,expires_at:s.state.expires_at,pending_questions:b.paused.pending.questions}),e.chat?.ledger?.({kind:"pause",sid:s.state.sid,expires_at:s.state.expires_at,resume:l,messageForm:`${l} --message "<your words>"`}),q(),3}if(b.crashed&&i?.state.checkpoint){let s=i.state.checkpoint,c=R!=="interactive"?` --mode ${R}`:"",l=`kane-cli design tests --resume ${i.state.sid}${c}`;return d("agent_crashed_resumable",{sid:i.state.sid,seq:s.seq},p.session_id),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:R,resume:l,expires_at:i.state.expires_at,crashed:!0}),i.release(),i=null,3}if(b.error)return e.out(`error: design agent failed: ${b.error}`),e.emit?.({type:"error",message:`error: design agent failed: ${b.error}`}),K(),q(),1;if(b.proposal==null&&R!=="interactive")return e.out(`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${P})`),e.emit?.({type:"error",message:`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${P})`}),K(),q(),1;let X=0;if(b.proposal==null)try{let{readRecords:s}=await import("./records-IOZTZUZV.js"),c=t.resume??p.session_id;X=s(e.contextDir).records.filter(l=>l.sid===c).reduce((l,a)=>l+a.nodes.filter(m=>m.label!=="source").length,0)}catch{}if(b.proposal==null&&e.out(X>0?`done \u2014 ${X} 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)"),b.assumedDefaults&&e.out(`assumed: ${b.assumedDefaults} default(s) taken while unattended`),i&&e.emit?.({type:"session_complete",sid:t.resume??p.session_id}),v?.event("ASR_SESSION_COMPLETE",{}),i?.complete(),z)try{lt(fe(e.contextDir,"sessions"))}catch{}if(!e.nested){let s=e.chat?.state.ledger.filter(a=>a.kind==="answer"&&a.receipt.form==="assumed").length??0,c=(b.assumedDefaults??0)+s,l=e.chat?.state.credits?.total??b.creditsTotal;e.chat?.ledger?.({kind:"summary",lines:[`designed: ${_.usecase.logical_id??r}${b.proposal==null?X>0?` (${X} item(s) committed across this session)`:" (nothing committed this session)":""}`,...c>0?[`${c} assumed default(s)`]:[],...l!==void 0?[`credits used: ${l.toFixed(1)}`]:[],`trace: ${te(P)}`]})}return t.plan||Ge(e.contextDir),q(),0}export{Rs as a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
function S(n,p){let{width:r,height:h,channels:f}=p;if(n.length!==r*h*f)throw new Error(`appearanceSignature: buffer ${n.length} bytes does not match ${r}x${h}x${f}`);let e=9,l=8,s=new Array(e*l);for(let t=0;t<l;t++){let o=Math.floor(t*h/l),d=Math.min(h,Math.max(o+1,Math.floor((t+1)*h/l)));for(let a=0;a<e;a++){let m=Math.floor(a*r/e),$=Math.min(r,Math.max(m+1,Math.floor((a+1)*r/e))),y=0,b=0;for(let u=o;u<d;u++)for(let x=m;x<$;x++){let i=(u*r+x)*f;y+=f===1?n[i]:Math.floor((n[i]*299+n[i+1]*587+n[i+2]*114)/1e3),b+=1}s[t*e+a]=Math.floor(y/b)}}let M="",c=0,g=0;for(let t=0;t<l;t++)for(let o=0;o<e-1;o++)c=c<<1|(s[t*e+o+1]>s[t*e+o]?1:0),g+=1,g===4&&(M+=c.toString(16),c=0,g=0);return M}export{S as a};
|