@testmuai/kane-cli 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChatSurface-E7QKI4LA.js +8 -0
- package/dist/{ChromeProfilePicker-DK2A3NYY.js → ChromeProfilePicker-DGDWGCZD.js} +1 -1
- package/dist/{CliFeedbackPrompt-D5QDOBE2.js → CliFeedbackPrompt-SYCZXSME.js} +1 -1
- package/dist/{CliUploadProgress-AIZL7N6Z.js → CliUploadProgress-VDEAKXJY.js} +1 -1
- package/dist/{ConfigView-SDBCTYUU.js → ConfigView-HPKRQXMC.js} +1 -1
- package/dist/EvidenceViewOffer-F5YG54OC.js +2 -0
- package/dist/{FolderPicker-IVBHPPMW.js → FolderPicker-4NSDXQY5.js} +1 -1
- package/dist/{HelpView-YYYX4RKI.js → HelpView-ON6BFGJM.js} +1 -1
- package/dist/{InfoBox-MQV3XBT4.js → InfoBox-B23NZ6IG.js} +1 -1
- package/dist/{LinksBox-NCFNBUMW.js → LinksBox-TI26VFFH.js} +1 -1
- package/dist/{ProfilesView-6GXF6CP2.js → ProfilesView-CRO5AH3H.js} +1 -1
- package/dist/{ProjectPicker-W6XDGNDJ.js → ProjectPicker-3N7LJOXU.js} +1 -1
- package/dist/{SaveSessionPrompt-QF3P7ERS.js → SaveSessionPrompt-UTOEC5AW.js} +1 -1
- package/dist/SingleShotApp-Y3YDFQSD.js +2 -0
- package/dist/{SummaryBox-4SZI4XSO.js → SummaryBox-JK64EKC2.js} +1 -1
- package/dist/TestMdRunView-O6JTHV5W.js +2 -0
- package/dist/{WhoamiView-N3HAJ3TN.js → WhoamiView-6QSLPNF6.js} +1 -1
- package/dist/{auth-RXNBQZI2.js → auth-IKFVW3NX.js} +1 -1
- package/dist/bind-KCUSVJXG.js +12 -0
- package/dist/bootstrap-NFYYRGGR.js +2 -0
- package/dist/bridge-JSKEO4N3.js +2 -0
- package/dist/{changelog-MI3IPBJS.js → changelog-AAH2ZBYO.js} +1 -1
- package/dist/chat-committer-UUC6JTRJ.js +2 -0
- package/dist/chat-controller-T2FAI55V.js +2 -0
- package/dist/{chunk-CSGQIY7X.js → chunk-23VPUWBD.js} +3 -3
- package/dist/chunk-2UIHS2FH.js +2 -0
- package/dist/chunk-2WFZIQ62.js +2 -0
- package/dist/chunk-2WRBTLFN.js +13 -0
- package/dist/chunk-2YEHV2CX.js +2 -0
- package/dist/chunk-3Q6WAK6P.js +2 -0
- package/dist/{chunk-EN7NW7DU.js → chunk-4LTXE3IX.js} +1 -1
- package/dist/{chunk-NR23HZU4.js → chunk-4NFCAGRK.js} +1 -1
- package/dist/chunk-53IBTIL3.js +12 -0
- package/dist/{chunk-FCMLIK7P.js → chunk-5DBK6QNS.js} +1 -1
- package/dist/chunk-5DT7PIGB.js +5 -0
- package/dist/chunk-5FJJJNJK.js +4 -0
- package/dist/{chunk-BCH3JCND.js → chunk-5SXMV66P.js} +1 -1
- package/dist/{chunk-AV6E6WLY.js → chunk-5WXGMXGA.js} +2 -2
- package/dist/chunk-5ZQZOVWY.js +4 -0
- package/dist/{chunk-FMR2KPSK.js → chunk-6KPPGMO2.js} +1 -1
- package/dist/{chunk-77WMTCUQ.js → chunk-74HTO7K3.js} +1 -1
- package/dist/{chunk-FCHTL74E.js → chunk-7KORP5FF.js} +1 -1
- package/dist/chunk-7OYZR6JA.js +3 -0
- package/dist/chunk-7QJ75SYR.js +8 -0
- package/dist/{chunk-T7ZPMTGS.js → chunk-AECMF3T2.js} +1 -1
- package/dist/chunk-AFBKGZFG.js +2 -0
- package/dist/chunk-AFPHLUQ5.js +6 -0
- package/dist/chunk-AJ56AMT6.js +9 -0
- package/dist/{chunk-RODHDQU3.js → chunk-APPYQZFK.js} +1 -1
- package/dist/{chunk-XLKRV2JH.js → chunk-AXTGYOMK.js} +1 -1
- package/dist/{chunk-AYY7RYMK.js → chunk-B5RS2XZU.js} +2 -2
- package/dist/chunk-BB2W35TW.js +2 -0
- package/dist/chunk-BKHXPBWN.js +2 -0
- package/dist/{chunk-KCBS57IF.js → chunk-BXYWX4J3.js} +1 -1
- package/dist/chunk-C3T7TKAC.js +349 -0
- package/dist/{chunk-IQODWB32.js → chunk-CLGC7VEO.js} +1 -1
- package/dist/{chunk-6HYW5RFX.js → chunk-CUM23TLF.js} +1 -1
- package/dist/chunk-DBIBROYW.js +5 -0
- package/dist/chunk-DBKNJRJG.js +2 -0
- package/dist/chunk-DUAXZYAD.js +4 -0
- package/dist/chunk-DYW5C6II.js +2 -0
- package/dist/chunk-DZPGG4S6.js +7 -0
- package/dist/{chunk-GQ3NCBYR.js → chunk-EOLFTMWF.js} +1 -1
- package/dist/chunk-F7ISS545.js +2 -0
- package/dist/{chunk-CH3VWCRZ.js → chunk-FBHRBFHP.js} +1 -1
- package/dist/{chunk-X5P2T7MA.js → chunk-FDIPQRX4.js} +1 -1
- package/dist/chunk-GFKCTYCA.js +6 -0
- package/dist/{chunk-5WE4DHXL.js → chunk-GYNTNKNB.js} +1 -1
- package/dist/{chunk-RQYS3KGU.js → chunk-H32GM5G4.js} +1 -1
- package/dist/{chunk-4BAMZSFU.js → chunk-HYSFJSIG.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-3RZ63RBO.js → chunk-IOD3HQVW.js} +1 -1
- package/dist/{chunk-QBCS57EO.js → chunk-J5FBU425.js} +40 -40
- package/dist/chunk-JKM2PUHI.js +4 -0
- package/dist/{chunk-HOOXUO3X.js → chunk-JPWLGHPM.js} +1 -1
- package/dist/chunk-JZ26R6UL.js +2 -0
- package/dist/chunk-KBM3XHAM.js +2 -0
- package/dist/chunk-KCCSWEGA.js +4 -0
- package/dist/{chunk-J3EMJ7US.js → chunk-KQZA2QSC.js} +1 -1
- package/dist/{chunk-MV4UYTZT.js → chunk-KWIK22R6.js} +1 -1
- package/dist/chunk-L2TV4G56.js +4 -0
- package/dist/{chunk-VYMCE7UR.js → chunk-M6FKJKC6.js} +2 -2
- package/dist/{chunk-5YHVK2EO.js → chunk-MK7JUOYV.js} +1 -1
- package/dist/chunk-N2P4MI32.js +2 -0
- package/dist/{chunk-A2IQRVPR.js → chunk-O75ZHGJG.js} +1 -1
- package/dist/chunk-OR6MCL6Z.js +2 -0
- package/dist/chunk-ORQNKZ2Z.js +5 -0
- package/dist/{chunk-GRB66C5S.js → chunk-OS4VSIHT.js} +1 -1
- package/dist/{chunk-E5PWL3BG.js → chunk-OUJQVBUT.js} +3 -3
- package/dist/{chunk-SBZWFULF.js → chunk-PLOWZLG5.js} +1 -1
- package/dist/chunk-QIGPXYMF.js +19 -0
- package/dist/chunk-QOFZSHSC.js +47 -0
- package/dist/{chunk-2XMJ6YAE.js → chunk-R5T4RLF5.js} +1 -1
- package/dist/chunk-R7QAS6LZ.js +4 -0
- package/dist/{chunk-YHQFYZJ5.js → chunk-RDNFVZEB.js} +1 -1
- package/dist/{chunk-67SSEGDO.js → chunk-SFII7HPP.js} +1 -1
- package/dist/{chunk-4SJC64KQ.js → chunk-SL6PCVM2.js} +1 -1
- package/dist/{chunk-QQUZF2DZ.js → chunk-STVP2XHO.js} +1 -1
- package/dist/chunk-TH47OOBV.js +4 -0
- package/dist/chunk-TRJUD3XJ.js +5 -0
- package/dist/{chunk-XIXR63FI.js → chunk-UC7MNPIN.js} +1 -1
- package/dist/chunk-UD7KKHPW.js +5 -0
- package/dist/chunk-VAYBKR76.js +4 -0
- package/dist/chunk-VFII6C46.js +2 -0
- package/dist/chunk-VGFTNLQQ.js +2 -0
- package/dist/{chunk-AIMINJVP.js → chunk-VHZ4S57N.js} +1 -1
- package/dist/chunk-VLWMMOMF.js +6 -0
- package/dist/chunk-VMM4LC4V.js +10 -0
- package/dist/{chunk-DFDDUMG5.js → chunk-VOOPWFHW.js} +1 -1
- package/dist/{chunk-4GLYNAK7.js → chunk-VRLUNZAK.js} +1 -1
- package/dist/chunk-VRVFPMCR.js +2 -0
- package/dist/{chunk-WREVEATJ.js → chunk-VT54ARGE.js} +1 -1
- package/dist/{chunk-LGVHW4ZA.js → chunk-VWKVUOXU.js} +1 -1
- package/dist/chunk-W4B5LOEX.js +4 -0
- package/dist/{chunk-K7USHLVZ.js → chunk-W5TTF7GB.js} +3 -3
- package/dist/chunk-WXHQYYD5.js +2 -0
- package/dist/{chunk-44IWSV6L.js → chunk-XUS4WKDS.js} +1 -1
- package/dist/chunk-XWKUZJCP.js +2 -0
- package/dist/chunk-YTHQNN2L.js +3 -0
- package/dist/{chunk-K4VIM4RM.js → chunk-ZBOWFJB2.js} +2 -2
- package/dist/chunk-ZMNJBUAO.js +2 -0
- package/dist/{chunk-MTHCUBDF.js → chunk-ZRASQ63J.js} +1 -1
- package/dist/{chunk-B4LLKQTK.js → chunk-ZUGCHQFC.js} +1 -1
- package/dist/committer-SWEWEYNX.js +2 -0
- package/dist/{config-5GOFF5F4.js → config-CWZV6XPT.js} +1 -1
- package/dist/cover-cmd-NWIRJY5Z.js +3 -0
- package/dist/{credentials-GXDXVMXW.js → credentials-YHTJGKEO.js} +1 -1
- package/dist/descriptor-OEUZZCOK.js +2 -0
- package/dist/design-committer-VYT6NU3T.js +2 -0
- package/dist/dispatch-WVNXB7AD.js +2 -0
- package/dist/docx-convert-CHLJUTFH.js +2 -0
- package/dist/dossier-KTLTGT2X.js +3 -0
- package/dist/evidence-IVDNXWPL.js +2 -0
- package/dist/evolve-cmd-XBX4SX5H.js +2 -0
- package/dist/{exit-manager-MXUD7GQ7.js → exit-manager-XZL4KIJU.js} +1 -1
- package/dist/explain-UAAQWHYR.js +2 -0
- package/dist/{explain-cmd-NWIYH5MI.js → explain-cmd-75MCF2ZV.js} +1 -1
- package/dist/{explain-cmd-DBUTPZHA.js → explain-cmd-IZEHWZV5.js} +1 -1
- package/dist/extract-bind-5OWELRME.js +10 -0
- package/dist/extract-cmd-ZRYMJ6IC.js +5 -0
- package/dist/feeder-C3TOJPKK.js +2 -0
- package/dist/gaps-cmd-XBRXKXDL.js +3 -0
- package/dist/{gate-B6C6KLFA.js → gate-54BRAE7N.js} +1 -1
- package/dist/{generate-headless-LZ4HRSQ4.js → generate-headless-D6BISWDC.js} +2 -2
- package/dist/{headless-io-PWW6YKH2.js → headless-io-66RG5NN5.js} +1 -1
- package/dist/identity-ADZ4PAJF.js +2 -0
- package/dist/index.js +61 -62
- package/dist/ingest-EX72IEQT.js +2 -0
- package/dist/ingest-cmd-YTGOICTC.js +2 -0
- package/dist/interactive-bind-XSRD36MO.js +25 -0
- package/dist/lifecycle-cmd-EQSFAZG6.js +2 -0
- package/dist/list-cmd-IRJSUCM5.js +3 -0
- package/dist/{list-commands-WIVODSEL.js → list-commands-RCYHJ5Y3.js} +1 -1
- package/dist/locks-cmd-CSVSWY2Y.js +2 -0
- package/dist/logical-ids-TEBCQJGO.js +2 -0
- package/dist/login-flow-PYAPYCPY.js +2 -0
- package/dist/maintenance-cmd-MVFA6H74.js +2 -0
- package/dist/next-TRSKMBO5.js +2 -0
- package/dist/paths-JCYX6UWL.js +2 -0
- package/dist/pdf-convert-OZIRUADA.js +2 -0
- package/dist/{persist-recorded-session-J6Z2SCTT.js → persist-recorded-session-DTYCLXTQ.js} +1 -1
- package/dist/phase-seed-DIRETNU6.js +2 -0
- package/dist/pipeline-MXFOD6ES.js +2 -0
- package/dist/readmodel-XOYGGQ3S.js +2 -0
- package/dist/reconcile-cmd-EG6BOU3A.js +2 -0
- package/dist/reconcile-deps-HTT6IPHT.js +4 -0
- package/dist/reconcile-engine-JQNXALNY.js +2 -0
- package/dist/{recording-banner-IRFMIZSJ.js → recording-banner-76GCIPUN.js} +1 -1
- package/dist/records-IOZTZUZV.js +2 -0
- package/dist/{require-project-folder-XSBJGIVF.js → require-project-folder-ACRDP5ZB.js} +1 -1
- package/dist/{resolver-IDCGRPFJ.js → resolver-SRPCFW7P.js} +1 -1
- package/dist/revert-NQ7GEVSE.js +2 -0
- package/dist/review-cmd-L3V5UP5T.js +4 -0
- package/dist/run-GMZCDRDD.js +2 -0
- package/dist/run-TFRWPGXP.js +2 -0
- package/dist/run-channel-RGH4WIQX.js +2 -0
- package/dist/{run-test-md-QCERS7FQ.js → run-test-md-KEHSRMCM.js} +2 -2
- package/dist/sessions-GIEXOCE4.js +2 -0
- package/dist/sessions-cmd-ZVYGSRJ3.js +25 -0
- package/dist/{skill-installer-WAVEVCSG.js → skill-installer-HBN3A35K.js} +1 -1
- package/dist/spawner-GC5CFAJ7.js +2 -0
- package/dist/structured-answers-A43Q25CZ.js +5 -0
- package/dist/tcg-generate-V7YFNC5O.js +2 -0
- package/dist/testmd-actions-MNDOO76O.js +2 -0
- package/dist/token-refresh-3UYMCYG3.js +2 -0
- package/dist/trust-gate-EX7R2P4Y.js +2 -0
- package/dist/{validate-basic-IJKKRQRU.js → validate-basic-ZGWPBYB6.js} +1 -1
- package/dist/verdicts-SCETLY5J.js +2 -0
- package/dist/{version-check-O5GYZYTP.js → version-check-CJWKDAXV.js} +1 -1
- package/dist/{view-cmd-GQBFCPDL.js → view-cmd-SOVM64L2.js} +1 -1
- package/dist/walk-session-YUYRULPY.js +2 -0
- package/dist/with-telemetry-E7QWPGL6.js +2 -0
- package/package.json +6 -6
- package/dist/ChatSurface-PMEOJBZG.js +0 -8
- package/dist/EvidenceViewOffer-EOKJE2B6.js +0 -2
- package/dist/SingleShotApp-T673X7BS.js +0 -2
- package/dist/TestMdRunView-SNYEO6CS.js +0 -2
- package/dist/bind-NSGW5BBZ.js +0 -6
- package/dist/bootstrap-RPT3JOGD.js +0 -2
- package/dist/bridge-BTSWCJ3B.js +0 -2
- package/dist/chat-committer-OS7ULZMH.js +0 -2
- package/dist/chat-controller-QLORQWJZ.js +0 -2
- package/dist/chunk-3C5GMAM4.js +0 -2
- package/dist/chunk-3CJIMPQK.js +0 -14
- package/dist/chunk-4XSW6WZD.js +0 -5
- package/dist/chunk-5YPBPZUR.js +0 -2
- package/dist/chunk-6W6AIDLJ.js +0 -4
- package/dist/chunk-7E24OCGX.js +0 -2
- package/dist/chunk-7YPK6EDR.js +0 -4
- package/dist/chunk-DGIPQINV.js +0 -12
- package/dist/chunk-EV3EHXEI.js +0 -4
- package/dist/chunk-F7WKDMX7.js +0 -47
- package/dist/chunk-FHKDTM5L.js +0 -6
- package/dist/chunk-FPFOW6BS.js +0 -2
- package/dist/chunk-FRBYGSGJ.js +0 -4
- package/dist/chunk-GG43HSU2.js +0 -3
- package/dist/chunk-J2KSZUOO.js +0 -4
- package/dist/chunk-J44RN3FB.js +0 -2
- package/dist/chunk-JSF5JYZC.js +0 -9
- package/dist/chunk-KHQHVSZ6.js +0 -5
- package/dist/chunk-MAO5BAQI.js +0 -347
- package/dist/chunk-N4LMQR7C.js +0 -6
- package/dist/chunk-QM4S2APK.js +0 -2
- package/dist/chunk-RCTM7NGT.js +0 -2
- package/dist/chunk-RN4OSVTG.js +0 -6
- package/dist/chunk-UXPQRALY.js +0 -13
- package/dist/chunk-V3UE6RJP.js +0 -2
- package/dist/chunk-VJFFMOUA.js +0 -2
- package/dist/chunk-VOHQA2SP.js +0 -2
- package/dist/chunk-WTXHOWUP.js +0 -3
- package/dist/chunk-Y5RNCJAN.js +0 -19
- package/dist/chunk-Z2JSEL3I.js +0 -4
- package/dist/cover-cmd-SV3I23UM.js +0 -2
- package/dist/descriptor-KXDJ4XYD.js +0 -2
- package/dist/docx-convert-ZBVQO2LG.js +0 -2
- package/dist/dossier-KJSJPWOW.js +0 -3
- package/dist/evidence-VDNZ3K23.js +0 -2
- package/dist/evolve-cmd-BLSVVW4I.js +0 -2
- package/dist/explain-EBVIUS2X.js +0 -2
- package/dist/extract-bind-3SWPBZX6.js +0 -8
- package/dist/extract-cmd-HEX7F4IS.js +0 -6
- package/dist/gaps-cmd-CKCHH3HQ.js +0 -2
- package/dist/ingest-FIIO67ZN.js +0 -2
- package/dist/ingest-cmd-KRPZVB7W.js +0 -7
- package/dist/interactive-bind-PTAZVCE7.js +0 -10
- package/dist/lifecycle-cmd-32LG364Q.js +0 -2
- package/dist/list-cmd-UTZ2PQUK.js +0 -3
- package/dist/logical-ids-I7B3VJEH.js +0 -2
- package/dist/login-flow-GX7CTVWN.js +0 -2
- package/dist/maintenance-cmd-BZAGSYGI.js +0 -2
- package/dist/pdf-convert-S7VYE6AV.js +0 -2
- package/dist/pipeline-HT7FCEXA.js +0 -2
- package/dist/readmodel-S5RAQH3F.js +0 -2
- package/dist/reconcile-cmd-2VHBKFA5.js +0 -2
- package/dist/revert-RQJE56HF.js +0 -2
- package/dist/review-cmd-7LXGYHHQ.js +0 -4
- package/dist/run-4LTYFTF2.js +0 -2
- package/dist/run-YGJZ2SXX.js +0 -2
- package/dist/sessions-cmd-DTQYDZNT.js +0 -23
- package/dist/spawner-YNYB4Z7K.js +0 -2
- package/dist/tcg-generate-D35EMRMQ.js +0 -2
- package/dist/testmd-actions-NB5Z6QJ3.js +0 -2
- package/dist/token-refresh-OY3WLAKD.js +0 -2
- package/dist/walk-session-OPAEV4WR.js +0 -2
- /package/dist/{chunk-BC7UVJJB.js → chunk-CH273NAE.js} +0 -0
package/dist/chunk-MAO5BAQI.js
DELETED
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{c as je}from"./chunk-3RZ63RBO.js";import{a as Me}from"./chunk-KHU7C6EE.js";import{a as de,b as Ae,c as Te,d as Oe,g as Ie,h as Pe}from"./chunk-JSF5JYZC.js";import{b as qe,c as Le}from"./chunk-J44RN3FB.js";import{a as Ne}from"./chunk-CVOGP253.js";import{a as Be,b as Fe}from"./chunk-3C5GMAM4.js";import{a as $e}from"./chunk-GG43HSU2.js";import{c as Ce}from"./chunk-FMR2KPSK.js";import{a as De,b as Re}from"./chunk-FHKDTM5L.js";import{b as fe,c as he,d as _e,e as ae,f as ne,g as ie}from"./chunk-ZPDM6FO7.js";import{a as oe}from"./chunk-L5LI2JF4.js";import{a as Y}from"./chunk-7E24OCGX.js";import{c as xe,n as Ee}from"./chunk-6W6AIDLJ.js";import{a as we,b as ce}from"./chunk-6HYW5RFX.js";import{c as Se,e as ke}from"./chunk-J2KSZUOO.js";import{d as v,e as D,f as be,g as ye,h as ve}from"./chunk-5YPBPZUR.js";import{a as pe}from"./chunk-5EOX4MEY.js";import{mkdirSync as mt,appendFileSync as gt}from"fs";import{randomBytes as pt}from"crypto";import{dirname as ft,join as ht}from"path";import{existsSync as le,readFileSync as ue,readdirSync as nt}from"fs";import{join as Z}from"path";var Ge=`
|
|
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 Ue={"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 ze=`
|
|
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 it=["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"];function Ve(n,t){for(let e of n)if(!it.includes(e))throw new Error(`${t}: emits '${e}' is not an oracle kind`)}function He(n,t){let e=oe(n);if(!e||!Array.isArray(e.techniques))throw new Error(`${t}: expected { techniques: [...] }`);for(let i of e.techniques){if(!i.id||!i.name||!i.applies_hint||!Array.isArray(i.emits))throw new Error(`${t}: technique '${i?.id??"?"}' missing id/name/applies_hint/emits`);Ve(i.emits,`${t}: technique '${i.id}'`)}return e.techniques}function We(n,t){let e=oe(n);if(!e||!e.id||!e.name||!e.applies_when||!Array.isArray(e.candidate_checks))throw new Error(`${t}: profile missing id/name/applies_when/candidate_checks`);for(let i of e.candidate_checks){if(!i.id||!i.family||!i.measurable_example||!i.emits)throw new Error(`${t}: candidate_check '${i?.id??"?"}' missing id/family/measurable_example/emits`);Ve([i.emits],`${t}: check '${i.id}'`)}return e}function Ye(n){let t=new Map(He(Ge,"packaged techniques").map(i=>[i.id,i])),e=Z(n,"design","techniques.yaml");if(le(e))for(let i of He(ue(e,"utf8"),e))t.set(i.id,i);return[...t.values()]}function Qe(n){let t=new Map(Object.entries(Ue).map(([i,c])=>[i,We(c,`packaged profile '${i}'`)])),e=Z(n,"design","profiles");if(le(e))for(let i of nt(e).filter(c=>c.endsWith(".yaml")||c.endsWith(".yml")).sort()){let c=We(ue(Z(e,i),"utf8"),Z(e,i));t.set(c.id,c)}return[...t.values()]}function Ke(n){let t=Z(n,"design","runner-grammar.yaml");return le(t)?ue(t,"utf8"):ze}function ee(n,t){return!n.superseded.has(t)}function me(n,t,e){return{cid:t,logical_id:n.nameOf.get(t)??null,content:e}}async function Je(n,t,e,i,c){let l=await Ae(n,"search_similar",{text:t,label:e,k:i},c);return l.ok&&Array.isArray(l.result)?l.result:[]}async function Xe(n,t,e={}){let i=Y(n),c=i.resolve(t);if(!c)throw new Error(`assembleDesignContext: unknown use-case '${t}' (run designGate first)`);let l=c.tip,T=i.getNode(l);if(!T||T.label!==v.USECASE)throw new Error(`assembleDesignContext: '${t}' is not a use-case (run designGate first)`);let B=i.derivesInto(l).map(_=>({source_id:_.props.source_id??null,anchor:_.props.anchor??null})),C=[],f=new Set;for(let{cid:_,content:h}of i.byLabel(v.SCENARIO))ee(i,_)&&i.edgesFrom(_).some(o=>o.type===D.BELONGS_TO&&o.dst===l)&&(C.push(me(i,_,h)),f.add(_));let O=[];for(let{cid:_,content:h}of i.byLabel(v.AC)){if(!ee(i,_))continue;let o=i.edgesFrom(_).find(r=>r.type===D.SCOPED_TO);!o||o.dst!==l&&!f.has(o.dst)||O.push({...me(i,_,h),scoped_to:o.dst})}let w=Array.isArray(T.content.criteria)?T.content.criteria:[],S=[T.content.title,T.content.description,...w].filter(Boolean).join(`
|
|
340
|
-
`),F=(await Je(i,S,v.SCENARIO,10,e.embedSearch)).filter(_=>!f.has(_.cid)),x=[],g=new Set,N=[],j=[l],M=new Set([l]);for(;j.length>0;){let _=j.shift();for(let h of i.edgesFrom(_)){if(h.type!==D.DEPENDS_ON||i.nodeLabel.get(h.dst)!==v.USECASE)continue;let o=i.tipOf(h.dst);M.has(o)||(M.add(o),N.push(o),j.push(o))}}for(let _ of N){let h=`depends_on ${i.nameOf.get(_)??_.slice(0,19)}`;for(let{cid:o}of i.byLabel(v.SCENARIO))if(ee(i,o)&&i.edgesFrom(o).some(r=>r.type===D.BELONGS_TO&&r.dst===_))for(let r of i.edgesInto(o)){if(r.type!==D.AUTOMATES||!ee(i,r.src)||g.has(r.src))continue;g.add(r.src);let u=String(i.getNode(r.src)?.content.title??"");x.push({cid:r.src,logical_id:i.nameOf.get(r.src)??null,title:u,via:h})}}for(let _ of await Je(i,S,v.TEST,5,e.embedSearch)){let{cid:h,title:o}=_;g.has(h)||(g.add(h),x.push({cid:h,logical_id:i.nameOf.get(h)??null,title:o??"",via:"similar"}))}let I=i.byLabel(v.STYLENOTE).filter(_=>ee(i,_.cid)).sort((_,h)=>_.cid<h.cid?-1:1).slice(0,5).map(_=>`${String(_.content.statement)} [${String(_.content.learned_from_kind)}]`);return{usecase:me(i,l,T.content),cites:B,committed_acs:O,existing:{scenarios:C,reuse_candidates:F},import_candidates:x,style_notes:I,techniques:Ye(n),profiles:Qe(n),runner_grammar:Ke(n),budget:{...e.max!=null?{max_pairs:e.max}:{},...e.strength!=null?{strength_override:e.strength}:{}},design_of:(()=>{let _=Be(i,l);return _?{engine:_.engine,seq:_.seq}:null})()}}function Ze(n){let t=e=>{if(Array.isArray(e))return e.map(t);if(e!==null&&typeof e=="object"){let i={};for(let c of Object.keys(e).sort())i[c]=t(e[c]);return i}return e};return JSON.stringify(t(n),null,1)}var te=n=>({record:null,errors:n,minted:{},logicalIds:{},superseded:[],warnings:[],finalizedTests:{}});function se(n){return n.toLowerCase().trim().replace(/\s+/g," ")}function ge(n,t){let e=n.resolve(t);if(!e||n.nodeLabel.get(e.cid)!==v.USECASE||e.superseded)return[];let i=new Set;for(let{cid:c}of n.byLabel(v.SCENARIO))if(!n.superseded.has(c)&&n.edgesFrom(c).some(l=>l.type===D.BELONGS_TO&&n.tipOf(l.dst)===e.cid)){i.add(c);for(let l of n.edgesInto(c))l.type!==D.AUTOMATES||n.superseded.has(l.src)||i.add(l.src)}return[...i]}function et(n){let{contextDir:t,graph:e,sections:i,by:c}=n,l=n.engine??"design@1",T=Se(t);if(e.latestHash!==T)return te([{code:"STALE_BASIS",detail:`graph opened at ${String(e.latestHash)} but chain head is ${String(T)} \u2014 re-open and retry`}]);let B=e.resolve(n.ucRef);if(!B||e.nodeLabel.get(B.cid)!==v.USECASE||B.superseded)return te([{code:"UNKNOWN_UC",detail:`${n.ucRef} is not a live use-case`}]);let C=B.cid,f=[],O=[],w=[],S=[],F=[],x=[],g={},N={},j={},M=[],I=[],_=new Set,h=[],o=new Set,r=new Set,u=[];{let s=n.forceScope??(n.force?ge(e,n.ucRef):[]),d=new Set;n.sections.scenarios?.length&&d.add(v.SCENARIO),n.sections.tests?.length&&d.add(v.TEST);for(let a of s)e.superseded.has(a)||(d.has(e.nodeLabel.get(a)??"")?r.add(a):u.push(a))}let A=new Set,E=s=>!e.superseded.has(s)&&(!r.has(s)||A.has(s)),q=(s,d,a)=>{if(g[s])return g[s];let y=e.resolve(s),p=y?E(y.cid)?y.cid:e.tipOf(y.cid):null;return!y||!p||!E(p)?(f.push({code:"UNKNOWN_REF",detail:`${d}: '${s}' is neither in this payload nor a live committed node`}),null):a&&e.nodeLabel.get(p)!==a?(f.push({code:"ILLEGAL_EDGE",detail:`${d}: '${s}' is a ${e.nodeLabel.get(p)}, expected ${a}`}),null):p},H=(s,d,a,y)=>{if(e.nameOf.has(d)){N[y]=e.nameOf.get(d);return}let p=Ee(s,P=>_.has(P),e.names.keys());p!==null&&(_.add(p),F.push({cid:d,slug:p,by:c}),N[y]=p)},U=(s,d,a,y)=>{for(let P of be(s,a))f.push({code:P.code,detail:`${d}: ${P.detail}`});let p=we(s,a);return e.hasNode(p)&&!e.superseded.has(p)?(r.has(p)&&A.add(p),g[d]=p,p):(O.push({cid:p,label:s,content:a}),g[d]=p,H(s,p,y,d),p)},L=(s,d,a,y,p)=>{let P=ce(s,d,a,y);if(e.edgesFrom(d).some(m=>m.ecid===P&&!e.superseded.has(m.ecid))){s===D.AUTOMATES&&o.add(a);return}let Q=e.nodeLabel.get(d)??O.find(m=>m.cid===d)?.label??"(unknown)",R=e.nodeLabel.get(a)??O.find(m=>m.cid===a)?.label??"(unknown)";for(let m of ve(s,Q,R,y))f.push({code:m.code,detail:`${p}: ${m.detail}`});let $=xe(e,s,d,a,h);if($){f.push({code:$.code,detail:`${p}: ${$.detail}`});return}if(s===D.AUTOMATES){if(o.has(a)){f.push({code:"CARDINALITY_VIOLATION",detail:`${p}: two automates onto ${a} in one record (strict 1:1)`});return}if(o.add(a),!r.has(a)||A.has(a)){let m=G=>r.has(G)&&!A.has(G);if(e.edgesFrom(d).some(G=>G.type===D.AUTOMATES&&G.dst!==a&&!e.superseded.has(G.dst)&&!m(G.dst))&&e.hasNode(d)){f.push({code:"CARDINALITY_VIOLATION",detail:`${p}: automates from ${d} already has a live edge \u2014 supersede it first`});return}if(e.edgesInto(a).some(G=>G.type===D.AUTOMATES&&G.src!==d&&!e.superseded.has(G.src)&&!m(G.src))){f.push({code:"CARDINALITY_VIOLATION",detail:`${p}: automates onto ${a} already has a live edge \u2014 strict 1:1, supersede it first`});return}}}w.push({ecid:ce(s,d,a,y),type:s,src:d,dst:a,props:y}),h.push({src:d,dst:a,type:s})},W=new Set;for(let s of i.gaps??[]){let d=s.temp_ref??s.ref??"gap",a=s.question;if(!a||typeof a!="object"||!a.header||!Array.isArray(a.options)||a.options.length===0||!Number.isInteger(a.recommended_index)){f.push({code:"GAP_QUESTION_INCOMPLETE",detail:`${d}: design gaps carry a full ranked question object (header/options/recommended_index)`});continue}s.kind==="budget-evicted"&&s.ref&&W.add(s.ref);let y={kind:s.kind,question:a,derived:!0,uc:C,...s.risk?{risk:s.risk}:{},...s.risk_rationale?{risk_rationale:s.risk_rationale}:{},...s.text?{text:s.text}:{},...s.ref?{ref:s.ref}:{}};U(v.GAP,d,y,String(a.header))}let K=new Map;for(let{cid:s,content:d}of e.byLabel(v.SCENARIO))E(s)&&e.edgesFrom(s).some(a=>a.type===D.BELONGS_TO&&e.tipOf(a.dst)===C)&&K.set(se(String(d.title??"")),s);for(let s of i.scenarios??[]){let d=K.get(se(s.title));if(d){f.push({code:"DUPLICATE_SCENARIO",detail:`${s.temp_ref}: '${s.title}' duplicates live scenario ${e.nameOf.get(d)??d} \u2014 exercise/link it instead (reuse before minting)`});continue}let a={title:s.title,intent:s.intent,case_type:s.case_type,derived:!0,...s.technique_notes?{technique_notes:s.technique_notes}:{},...s.description?{description:s.description}:{},...s.parameters?{parameters:s.parameters}:{},...s.tags?{tags:s.tags}:{}};U(v.SCENARIO,s.temp_ref,a,s.title)}for(let s of i.scenarios??[]){let d=g[s.temp_ref];if(d){L(D.BELONGS_TO,d,C,{},s.temp_ref);for(let a of s.depends_on??[]){let y=q(a,`${s.temp_ref}.depends_on`,v.SCENARIO);y&&L(D.DEPENDS_ON,d,y,{},`${s.temp_ref}.depends_on`)}}}for(let s of i.acs??[]){let d={text:s.text,kind:s.kind,risk:s.risk,derived:!0,...s.expected_answer?{expected_answer:s.expected_answer}:{},...s.measurable!==void 0?{measurable:s.measurable}:{}},a=U(v.AC,s.temp_ref,d,s.text);if(!a)continue;let y=s.scope?.type==="scenario"&&s.scope.ref?q(s.scope.ref,`${s.temp_ref}.scope`,v.SCENARIO):C;y&&!e.edgesFrom(a).some(p=>p.type===D.SCOPED_TO&&!e.superseded.has(p.ecid))&&L(D.SCOPED_TO,a,y,{},`${s.temp_ref}.scope`);for(let p of s.cites??[]){let P={source_id:p.source_id,source_cid:p.source_cid,anchor:p.anchor,...p.quote?{quote:p.quote}:{}};L(D.DERIVES,p.source_cid,a,P,`${s.temp_ref}.cite`)}}for(let s of i.exercises??[]){let d=q(s.scenario,"exercises.scenario",v.SCENARIO),a=q(s.ac,"exercises.ac",v.AC);d&&a&&L(D.EXERCISES,d,a,{},`exercises ${s.scenario}\u2192${s.ac}`)}for(let s of i.scoped_to_repoints??[]){let d=q(s.ac,"scoped_to_repoints.ac",v.AC),a=q(s.to,"scoped_to_repoints.to");if(!d||!a)continue;let y=e.edgesFrom(d).find(p=>p.type===D.SCOPED_TO&&!e.superseded.has(p.ecid));y&&S.push({kind:"edge",ecid:y.ecid,reason:`re-scoped to ${s.to} by ${c.id}`,by:c}),L(D.SCOPED_TO,d,a,{},`scoped_to_repoints ${s.ac}`)}let J=new Map;if(n.finalizeTestBody)for(let[s,d]of e.nameOf)J.set(e.tipOf(s),d);let V=s=>e.nameOf.get(s)??J.get(e.tipOf(s))??null,X=s=>{let d=g[s];if(d)return N[s]??V(d);if(e.names.has(s))return e.resolve(s)?s:null;let a=e.resolve(s);return a?V(e.tipOf(a.cid)):null};for(let s of i.tests??[]){for(let R of s.reuses??[])W.has(R)&&f.push({code:"REUSES_EVICTED",detail:`${s.temp_ref}: reuses '${R}' which was budget-evicted \u2014 drop the edge; the dependent gap names the missing @import`});let d=s.test_md_blob,a=s.definitionId,y=s.objectives_blob;if(n.finalizeTestBody){let R;try{R=n.finalizeTestBody({temp_ref:s.temp_ref,test_md_blob:s.test_md_blob,verifies:s.verifies,reuses:s.reuses??[]},X)}catch($){return te([{code:"FINALIZE_BODY",detail:`${s.temp_ref}: ${$ instanceof Error?$.message:String($)}`}])}R&&(d=R.test_md_blob,a=R.definitionId,y=R.objectives_blob??y,j[s.temp_ref]=a)}let p={title:s.title,check:s.check,definitionId:a,derived:!0,...s.config?{config:s.config}:{},...d?{test_md_blob:d}:{},...y?{objectives_blob:y}:{},...s.surface_required!==void 0?{surface_required:s.surface_required}:{}},P=U(v.TEST,s.temp_ref,p,s.title);if(!P)continue;let Q=q(s.automates,`${s.temp_ref}.automates`,v.SCENARIO);Q&&L(D.AUTOMATES,P,Q,{},`${s.temp_ref}.automates`);for(let R of s.verifies){let $=q(R,`${s.temp_ref}.verifies`,v.AC);$&&L(D.VERIFIES,P,$,{},`${s.temp_ref}.verifies`)}for(let R of s.reuses??[]){if(W.has(R))continue;let $=q(R,`${s.temp_ref}.reuses`,v.TEST);$&&L(D.REUSES,P,$,{},`${s.temp_ref}.reuses`)}for(let R of s.verifies){let $=g[R]??e.resolve(R)?.cid;$&&(e.trust.get($)??"derived")==="derived"&&!O.some(m=>m.cid===$)?M.push(`${s.temp_ref}: verifies ${R} which is still DERIVED (unapproved) \u2014 committed anyway; approve it in chat or via review`):$&&g[R]===$&&(i.acs??[]).some(m=>m.temp_ref===R)&&M.push(`${s.temp_ref}: verifies ${R} minted in this same record (unapproved) \u2014 committed anyway; approve it in chat`)}if(s.verifies.length>1){let R=s.check?.verified_against;M.push(`${s.temp_ref}: verifies ${s.verifies.length} ACs but machine-asserts only 1 (check.verified_against=${R!=null?String(R):"?"}) \u2014 the rest ride prose only`)}}let re=[];{let s=(m,b)=>`${m??""}\0${se(String(b??""))}`,d=(m,b)=>n.reason?`${n.reason} \u2014 evolve by ${c.id}${b?` (${b})`:""}`:m,a=new Map;for(let m of O){if(m.label!==v.SCENARIO&&m.label!==v.TEST)continue;let b=s(m.label,m.content.title);a.set(b,[...a.get(b)??[],m.cid])}let y=new Map;for(let m of r){if(A.has(m))continue;let b=s(e.nodeLabel.get(m),e.getNode(m)?.content.title);y.set(b,[...y.get(b)??[],m])}for(let[m,b]of y){let k=a.get(m)??[],G=b.length===1&&k.length===1;for(let z of b)G?(S.push({kind:"node",old:z,new:k[0],reason:d(`--force redesign of ${n.ucRef} by ${c.id} (title-matched successor)`,"title-matched successor"),by:c}),re.push({old:z,next:k[0]})):S.push({kind:"node",old:z,new:null,reason:d(`--force redesign of ${n.ucRef} by ${c.id}`),by:c}),I.push(z)}let p=m=>e.edgesFrom(m).some(b=>b.type!==D.SCOPED_TO?!1:b.dst===C||e.tipOf(b.dst)===C?!0:e.nodeLabel.get(b.dst)===v.SCENARIO&&e.edgesFrom(b.dst).some(k=>k.type===D.BELONGS_TO&&e.tipOf(k.dst)===C)),P=new Map;for(let{cid:m,content:b}of e.byLabel(v.AC)){if(e.superseded.has(m)||!p(m))continue;let k=se(String(b.text??""));P.set(k,[...P.get(k)??[],m])}let Q=new Map;for(let m of O){if(m.label!==v.AC)continue;let b=se(String(m.content.text??""));Q.set(b,[...Q.get(b)??[],m.cid])}for(let[m,b]of P){let k=Q.get(m)??[];b.length!==1||k.length!==1||(S.push({kind:"node",old:b[0],new:k[0],reason:d(`AC re-emitted with changed content by ${c.id} (text-matched successor)`,"AC text-matched successor"),by:c}),re.push({old:b[0],next:k[0]}),I.push(b[0]))}let R=new Set(I),$=new Set;for(let m of S)m.kind==="edge"&&$.add(m.ecid);for(let{old:m,next:b}of re)for(let k of e.edgesInto(m))ye(k.type)?.pin?.comparesTo!=="dst_tip"||e.superseded.has(k.src)||R.has(k.src)||$.has(k.ecid)||(S.push({kind:"edge",ecid:k.ecid,reason:`re-blessed onto ${b} (redirect successor of ${m}) by ${c.id}`,by:c}),$.add(k.ecid),w.some(z=>z.type===k.type&&z.src===k.src&&z.dst===b)||e.edgesFrom(k.src).some(z=>z.type===k.type&&z.dst===b))||k.type===D.AUTOMATES&&o.has(b)||L(k.type,k.src,b,k.props,`rebless ${k.type} from ${e.nameOf.get(k.src)??k.src}`)}return f.length>0?te(f):O.length===0&&w.length===0&&S.length===0&&x.length===0?Object.keys(g).length>0?(M.push("everything in this phase is already current \u2014 nothing re-committed"),{record:null,errors:null,minted:g,logicalIds:N,superseded:[],warnings:M,finalizedTests:j,...n.force||n.forceScope?{forceScopeRemaining:u}:{}}):te([{code:"EMPTY_DESIGN",detail:"finalize_design produced nothing to commit"}]):{record:ke(t,{ts:new Date().toISOString(),proposal_id:null,nodes:O,edges:w,review:[],supersessions:S,source_head_moves:{},...F.length>0?{names:F}:{},...(()=>{for(let s of i.judgements??[]){let d=s.target?g[s.target]??e.resolve(s.target)?.cid??C:C;x.push({about:d,rationale:`[${s.kind}] ${s.rationale}`,by:c})}return x.length>0?{judgements:x}:{}})(),design_of:{uc_cid:C,engine:l}}).record,errors:null,minted:g,logicalIds:N,superseded:I,warnings:M,finalizedTests:j,...n.force||n.forceScope?{forceScopeRemaining:u}:{}}}import{basename as rt,dirname as ot,resolve as at}from"path";var ct=new Set(["narrative","acs","scenarios","tests","exercises","gaps","scoped_to_repoints","judgements","phase"]);function dt(n){let t=/strength=(\d+)\s*(?:—|-)?\s*(.*)/.exec(n??"");return t?{strength:Number(t[1]),reason:t[2]||n||""}:{strength:2,reason:n??""}}function lt(n,t,e=new Set,i=0){return ne(t,ie(n),e,i)}function ut(n,t,e,i){let c=t.scenarios?.find(w=>w.temp_ref===e.automates)??(()=>{let w=n.resolve(e.automates),S=w?n.getNode(w.tip)?.content:void 0;return S?{title:String(S.title??""),intent:String(S.intent??""),technique_notes:String(S.technique_notes??"")}:{}})(),l=[...(t.acs??[]).map(w=>({ref:w.temp_ref,text:w.text})),...e.verifies.filter(w=>!(t.acs??[]).some(S=>S.temp_ref===w)).map(w=>{let S=n.resolve(w);return{ref:w,text:S?String(n.getNode(S.tip)?.content.text??""):""}})],{test_md:T,objectives_yaml:B}=_e({title:e.title,steps:e.steps,check:e.check,check_prose:e.check_prose,reuses:e.reuses},{title:c.title,intent:c.intent},l),C=ae(lt(n,T)),f=e.check,O={technique:c.technique_notes??"",profile_family:t.judgements?.find(w=>w.kind==="profile_family"&&(w.target===e.temp_ref||w.target===e.automates))?.rationale??"unspecified",anchor:f.verified_against,expected_how:t.judgements?.find(w=>w.kind==="expected_how"&&w.target===f.verified_against)?.rationale??`expected_mode: ${f.expected_mode??"inferred"}`,combinatorial:dt(c.technique_notes),surface_state:"absent",deferred_bindings:f.expected_mode==="runtime-derived"?1:0};return i.push({definitionId:C,rationale:O,anchorRef:f.verified_against,tempRef:e.temp_ref}),{temp_ref:e.temp_ref,title:e.title,automates:e.automates,verifies:e.verifies,check:e.check,definitionId:C,test_md_blob:T,objectives_blob:B,...e.reuses?.length?{reuses:e.reuses}:{},...e.surface_required!==void 0?{surface_required:e.surface_required}:{}}}function tt(n){let t=0,e=n.forceScope??null;return{terminalEventType:"design",async onProposalEvent(i){let c=r=>n.steer?(n.steer(`[auto-repair] ${r} \u2014 please re-finalize with this fixed.`),{proposal:null,error:null}):{proposal:null,error:r};if(i==null||typeof i!="object")return c("finalize_design payload is not an object");let l=i,T=Object.keys(l).filter(r=>!ct.has(r));if(T.length>0)return c(`finalize_design carries ungated/unknown section(s): ${T.join(", ")} \u2014 mintable here: acs, scenarios, tests (+gaps)`);let B=new Map;for(let r of l.tests??[]){let u=B.get(r.automates);if(u)return c(`strict 1:1 violated in-payload: ${u} and ${r.temp_ref} both automate ${r.automates}`);B.set(r.automates,r.temp_ref)}let C=Y(n.contextDir);n.force&&!n.resuming&&t===0&&e===null&&(e=ge(C,n.ucRef));let f=C.resolve(n.ucRef),O=f?String(C.getNode(f.tip)?.content.risk??"med"):"med",w=[],S=new Set([n.ucRef,f?.cid,f?.tip].filter(Boolean)),F=r=>{if(S.has(r))return!0;let u=C.resolve(r);return u!=null&&(S.has(u.cid)||S.has(u.tip))},x;try{x={...l.acs?.length?{acs:l.acs.map(r=>({temp_ref:r.temp_ref,text:r.text,kind:r.kind,risk:r.risk??O,...r.expected_answer?{expected_answer:r.expected_answer}:{},...r.scoped_to&&!F(r.scoped_to)?{scope:{type:"scenario",ref:r.scoped_to}}:{}}))}:{},...l.scenarios?.length?{scenarios:l.scenarios}:{},...l.tests?.length?{tests:l.tests.map(r=>ut(C,l,r,w))}:{},...l.exercises?.length?{exercises:l.exercises}:{},...l.gaps?.length?{gaps:l.gaps}:{},...l.scoped_to_repoints?.length?{scoped_to_repoints:l.scoped_to_repoints}:{},...l.judgements?.length?{judgements:l.judgements}:{}}}catch(r){return c(r instanceof Error?r.message:String(r))}let g=et({contextDir:n.contextDir,graph:C,ucRef:n.ucRef,sections:x,by:n.by,...n.engine?{engine:n.engine}:{},...e?.length?{forceScope:e}:{},...n.because?{reason:n.because}:{},finalizeTestBody:(()=>{let r=new Map((x.tests??[]).map(E=>[E.temp_ref,E])),u=new Map,A=(E,q,H)=>{let U=r.get(E);if(!U?.test_md_blob)return null;let L=u.get(E);if(L!==void 0)return L;if(H.has(E))return U.test_md_blob;H.add(E);let W=new Map;for(let V of U.reuses??[]){A(V,q,H);let X=q(V);X!==null&&X!==V&&W.set(V,X)}let K=U.verifies.map(q).filter(V=>V!==null),J=fe(he(U.test_md_blob,W),K);return u.set(E,J),J};return(E,q)=>{if(!E.test_md_blob)return null;let H=A(E.temp_ref,q,new Set)??E.test_md_blob;if(H===E.test_md_blob)return null;let U=L=>{for(let W of r.keys())if(q(W)===L){let K=A(W,q,new Set);if(K!==null)return{body:K,cycleKey:`batch:${L}`,next:U}}return ie(C)(L)};return{test_md_blob:H,definitionId:ae(ne(H,U))}}})()});if(g.errors)return c("design commit failed: "+g.errors.map(r=>`${r.code}: ${r.detail}`).join("; "));let N=g.warnings.filter(r=>r.includes("\u2014 committed anyway; approve"));for(let r of g.warnings)(!N.includes(r)||N.length===1)&&n.note(`warning: ${r}`);N.length>1&&n.note(`warning: ${N.length} verifies edges target not-yet-approved items \u2014 committed anyway; approve them in chat or via review`);let j=(r,u)=>r?`${r} ${u}${r>1?"s":""}`:null,M=[j(l.acs?.length,"AC"),j(l.scenarios?.length,"scenario"),j(l.tests?.length,"test"),j(l.gaps?.length,"gap")].filter(Boolean);n.aliases?.(Object.entries(g.minted).map(([r,u])=>({ref:r,cid:u,...g.logicalIds[r]?{id:g.logicalIds[r]}:{}})));{let r=`saved ${M.join(" \xB7 ")||"judgements/wiring"} as drafts`;(n.commitLine??n.note)(r)}let I=Y(n.contextDir);n.onCommitted?.(I);for(let r of w){let u=g.logicalIds[r.anchorRef]??g.minted[r.anchorRef];Me(n.contextDir,g.finalizedTests[r.tempRef]??r.definitionId,{...r.rationale,anchor:u??r.rationale.anchor})}try{let r=Object.values(g.minted).filter(u=>I.getNode(u)?.label==="test");if(r.length>0){let u=ot(at(n.contextDir)),A=je({graph:I,cids:r,cwd:u});A.wrote.length>0&&n.note(`\u2692 wrote ${A.wrote.map(E=>rt(E.path)).join(" \xB7 ")}`);for(let E of A.refused)n.note(`warning: mint refused ${E.id} \u2014 ${E.reason}`)}}catch(r){n.note(`warning: file mint failed (${r instanceof Error?r.message:String(r)}) \u2014 the design commit stands`)}n.event?.({type:"commit",acs:l.acs?.length??0,scenarios:l.scenarios?.length??0,tests:l.tests?.length??0,gaps:l.gaps?.length??0,warnings:g.warnings.length,minted:Object.entries(g.minted).map(([r,u])=>({temp_ref:r,cid:u,...g.logicalIds[r]?{logical_id:g.logicalIds[r]}:{}}))}),t+=1,e!==null&&(e=g.forceScopeRemaining??e,n.onForceScope?.(e));let _=$e({verb:"design",commitN:t,ucRef:n.ucRef,phase:l.phase??(l.tests?.length?"tests":l.scenarios?.length?"scenarios":l.acs?.length?"acs":"design"),committed:Object.entries(g.minted).map(([r,u])=>({temp_ref:r,cid:u,...g.logicalIds[r]?{logical_id:g.logicalIds[r]}:{}})),warnings:g.warnings},I),h=_.event.parity?.missing??[],o=!!l.tests?.length&&h.length===0;return{proposal:g,error:null,receipt:_,...o?{sessionComplete:o}:{}}}}}function st(n,t){return{type:"run_config",version:1,session_id:t.session_id,mode:t.mode,source:{source_id:`design:${n.usecase.logical_id??t.ucCid.slice(0,19)}`,source_cid:t.ucCid,kind:"design_context",numbered_text:Ze({...n,session_mode:t.mode})},existing_use_cases:[],read_basis:t.readBasis,max_free_text_rounds:2,graph_reads:!0,verb:"design",chat:!0,design_budget:n.budget,topology:t.topology}}function _t(n,t){return{terminalEventType:"design",async onProposalEvent(e){let i=e??{},c=["acs","scenarios","tests","gaps"].map(l=>i[l]?.length?`${i[l].length} ${l}`:null).filter(Boolean).join(" \xB7 ");return n(`plan: finalize_design \u2014 ${c||"wiring/judgements only"} (nothing committed)`),n(JSON.stringify(i,null,2)),t?.({type:"plan",payload:i}),{proposal:i,error:null}}}}async function fs(n,t){let e=Y(t.contextDir),i=null,c=n.useCase;if(n.resume){try{let u=Le(t.contextDir,n.resume,e);i=u.handle,u.staleBasis.length>0&&(t.out(`note: sources changed since the pause: ${u.staleBasis.join(", ")} \u2014 the design continues against the current versions`),t.emit?.({type:"stale_basis",sources:u.staleBasis}))}catch(u){if(u instanceof De)return t.out(`error: ${u.message}`),t.emit?.({type:"error",message:`error: ${u.message}`}),u.code==="SESSION_MISSING"||u.code==="SESSION_EXPIRED"?2:1;throw u}let o=i.state;if(o.verb&&o.verb!=="design")return t.out(`error: session ${n.resume} is a ${o.verb} session \u2014 resume it with kane-cli context extract --resume ${n.resume}`),t.emit?.({type:"error",message:`error: session ${n.resume} is a ${o.verb} session \u2014 resume it with kane-cli context extract --resume ${n.resume}`}),i.release(),2;if(c=c??o.use_case,o.uc_tip&&c){let u=e.resolve(c)?.tip;u&&u!==o.uc_tip&&(t.out("note: the use-case changed since the pause \u2014 the design continues against the new version"),t.emit?.({type:"stale_basis",usecase:c}))}let r=i.state.held_receipts??[];if(r.length>0)if(t.chat?.holdReceipt)for(let u of r)t.chat.holdReceipt(u);else t={...t,initialMessage:[r.join(`
|
|
341
|
-
|
|
342
|
-
`),t.initialMessage].filter(Boolean).join(`
|
|
343
|
-
|
|
344
|
-
`)};if(!c)return t.out(`error: session ${n.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),t.emit?.({type:"error",message:`error: session ${n.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let l=!!(n.force||i?.state.force),T=!!(n.resume&&i),B=Fe(e,c,l||T);if(!B.ok)return t.out(`design: ${B.message}`),t.emit?.({type:"gate_refused",message:B.message}),i?.release(),B.code;if(t.preflightTurn){let o=await t.preflightTurn();if(!o.ok)return t.out(o.message??"error: turn-endpoint preflight failed"),t.emit?.({type:"error",message:o.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),i?.release(),2}let C={contextDir:t.contextDir,resolveAlias:o=>Te(o,{env:process.env,auth:t.auth}),embed:(o,r)=>Oe(o,r,{env:process.env,auth:t.auth})};t.chat?.setWorking?.("assembling context\u2026");let f=await Xe(t.contextDir,c,{max:n.max,strength:n.strength,embedSearch:C});n.priorDesign!==void 0&&(f.prior_design=n.priorDesign),n.changeDelta!==void 0&&(f.change_delta=n.changeDelta),n.because&&(f.because=n.because);let O=t.now?.()??new Date,w=`${O.toISOString().replace(/[-:]/g,"").slice(0,15)}-${pt(2).toString("hex")}`,S=n.mode??"interactive",F=st(f,{session_id:n.resume??`design-${w}`,mode:S,ucCid:f.usecase.cid,readBasis:e.latestHash,topology:Ne("design")});n.plan?F.chat=!1:F.chat=!0,n.resume&&i&&(F.resume={agent_state:i.state.agent_state},t.out(`resuming design session ${n.resume}`),i.state.assumed.length>0&&t.out(`note: ${i.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${n.resume} lists them`),n.message&&(t={...t,initialMessage:[t.initialMessage,n.message].filter(Boolean).join(`
|
|
345
|
-
|
|
346
|
-
`)}));let x=t.telemetry?.enabled?t.telemetry:void 0,g=x?pe(x.ids.context_instance_id??null,"design",x.ids.session_id):ht(t.contextDir,"logs",`design-${w}.log`);mt(ft(g),{recursive:!0}),t.out(`trace: ${de(g)}`),x&&t.out(x.banner()),t.emit?.({type:"run_start",mode:S,trace:g,use_case:c});let N=(o,r,u)=>{try{gt(g,JSON.stringify({ts:new Date().toISOString(),level:o==="error"?"error":"info",run_id:x?.ids.operation_id,...x?{user_session_id:x.ids.session_id}:{},kind:o,session_id:u,data:r})+`
|
|
347
|
-
`)}catch{}x?.wireTrace(o,r,u)},j=null,M={current:e};t.nested||t.chat?.attachOnCommitted?.(o=>{M.current=o});let I="";if(t.chat&&!n.plan&&!t.nested){let o=Ce({contextDir:t.contextDir,graph:Y(t.contextDir),sessionStamp:F.session_id,by:t.by??{kind:"human",id:"owner"}});o.errors===null||o.errors[0]?.code==="CONV_SOURCE_EXISTS"?(I=o.sourceId,t.chat.attachConversationSource?.(I),M.current=Y(t.contextDir)):t.out(`warning: conversation source unavailable (${o.errors[0]?.detail}) \u2014 chat adds will not land this session`)}let _=n.plan?_t(t.out,t.emit):tt({contextDir:t.contextDir,ucRef:c,by:{kind:"ai",id:"design-agent"},force:l,engine:"design@1",note:o=>t.chat?t.chat.note(o):t.out(o),commitLine:o=>t.chat?t.chat.ledger({kind:"commit",ok:!0,line:o}):t.out(o),steer:t.chat&&!t.nested?o=>t.chat.submit(o):void 0,event:t.emit,resuming:T,...i?.state.force_scope?.length?{forceScope:i.state.force_scope}:{},onForceScope:o=>{j=o},...n.because?{because:n.because}:{},aliases:t.chat?o=>t.chat.registerAliases?.(o):void 0,onCommitted:o=>{M.current=o}});t.chat||t.out(`designing: ${f.usecase.logical_id??c} (budget ${f.budget.max_pairs!=null?`${f.budget.max_pairs} pairs`:"no ceiling"}${f.budget.strength_override?`, strength ${f.budget.strength_override}`:""})`),t.chat?.setWorking?.(`designing ${f.usecase.logical_id??c}\u2026`);let h;try{h=await Ie(F,{...t,graphSlot:M},new Map,e,N,_)}catch(o){throw N("error",{message:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0},F.session_id),i?.release(),o}finally{t.chat?.setWorking?.(null)}if(h.highRisk)return t.out(`error: ${h.highRisk.length} high-risk decision${h.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),t.emit?.({type:"error",message:`error: high-risk question(s) in ci mode (fail-closed): ${h.highRisk.map(o=>o.id).join(", ")}`,code:"HIGH_RISK_CI"}),i?.release(),1;if(h.paused){let o=i;o||(o=Re(t.contextDir,{sid:F.session_id,mode:"agent",created_at:O.toISOString(),expires_at:new Date(O.getTime()+1440*60*1e3).toISOString(),agent_state:h.paused.agent_state,pending:{questions:[],proposals:[]},read_basis:Object.fromEntries((e.resolve(c)?e.edgesInto(e.resolve(c).tip):[]).filter(E=>E.type==="DERIVES"&&typeof E.props.source_id=="string").map(E=>[String(E.props.source_id),e.heads.get(String(E.props.source_id))??null])),assumed:[],corpus_cursor:{remaining:[]},conv_source:I,verb:"design",use_case:c,...e.resolve(c)?.tip?{uc_tip:e.resolve(c).tip}:{},...l?{force:!0}:{},...x?{user_session_id:x.ids.session_id}:{}})),l&&!o.state.force&&o.save({force:!0}),x&&o.state.user_session_id!==x.ids.session_id&&o.save({user_session_id:x.ids.session_id}),I&&o.state.conv_source!==I&&o.save({conv_source:I});let r=t.chat?.drainHeldReceipts?.()??[];(r.length>0||(o.state.held_receipts?.length??0)>0)&&o.save({held_receipts:r}),j!==null&&o.save({force_scope:j}),qe(o,h.paused),N("session_paused",{sid:o.state.sid},F.session_id);let u=S!=="interactive"?` --mode ${S}`:"",A=`kane-cli design tests --resume ${o.state.sid}${u}`;return t.out(`paused \u2014 resume with: ${A}`),t.emit?.({type:"session_paused",sid:o.state.sid,mode:S,resume:A,expires_at:o.state.expires_at,pending_questions:h.paused.pending.questions}),t.chat?.ledger?.({kind:"pause",sid:o.state.sid,expires_at:o.state.expires_at,resume:A,messageForm:`${A} --message "<your words>"`}),3}if(h.error)return t.out(`error: design agent failed: ${h.error}`),t.emit?.({type:"error",message:`error: design agent failed: ${h.error}`}),i?.release(),1;if(h.proposal==null&&S!=="interactive")return t.out(`error: the design agent ended without a finalize event \u2014 nothing committed (trace: ${g})`),t.emit?.({type:"error",message:`error: the design agent ended without a finalize event \u2014 nothing committed (trace: ${g})`}),i?.release(),1;if(h.proposal==null&&t.out("done \u2014 nothing designed this session (no finalize before the session ended)"),h.assumedDefaults&&t.out(`assumed: ${h.assumedDefaults} default(s) auto-taken (flagged)`),i&&t.emit?.({type:"session_complete",sid:n.resume}),x?.event("ASR_SESSION_COMPLETE",{}),i?.complete(),!t.nested){let o=t.chat?.state.ledger.filter(A=>A.kind==="answer"&&A.receipt.form==="assumed").length??0,r=(h.assumedDefaults??0)+o,u=t.chat?.state.credits?.total??h.creditsTotal;t.chat?.ledger?.({kind:"summary",lines:[`designed: ${f.usecase.logical_id??c}${h.proposal==null?" (nothing committed this session)":""}`,...r>0?[`${r} assumed default(s)`]:[],...u!==void 0?[`credits used: ${u.toFixed(1)}`]:[],`trace: ${de(g)}`]})}return n.plan||Pe(t.contextDir),0}export{fs as a};
|
package/dist/chunk-N4LMQR7C.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as c,c as p}from"./chunk-RCTM7NGT.js";import{spawn as y}from"child_process";var h=new Set(["progress","ask_user","graph_query","proposal","design","error","done","reasoning_delta","reasoning_done","tool_activity","decision_activity","text_delta","usage","receipt","chat_ops","session_paused","session_complete"]);function w(l,n={}){let a=n.spawnCmd!==void 0?n.spawnCmd:c();if(!a)throw new Error("assurance agent not found \u2014 your platform package may be missing; reinstall kane-cli (npm i -g @testmuai/kane-cli)");let f=l.source.images?.length??0;a.tier==="dev-python"&&f>0&&n.onWarn?.("warn: development agent in use \u2014 if image citations are missing, update the agent package");let t=y(a.cmd,a.args,{stdio:["pipe","pipe","pipe"],env:p(l.session_id,n.auth)});if(t.stdin.write(JSON.stringify(l)+`
|
|
3
|
-
`),n.onStderr){let e="";t.stderr.on("data",r=>{e+=r.toString("utf8");let i;for(;(i=e.indexOf(`
|
|
4
|
-
`))>=0;){let o=e.slice(0,i);e=e.slice(i+1),o.trim()&&n.onStderr(o)}})}let d=new Promise(e=>{t.on("exit",(r,i)=>e({code:r,signal:i}))});async function*m(){let e="",r=!1;for await(let i of t.stdout){e+=i.toString("utf8");let o;for(;(o=e.indexOf(`
|
|
5
|
-
`))>=0;){let g=e.slice(0,o).trim();if(e=e.slice(o+1),!g)continue;let u;try{u=JSON.parse(g)}catch{n.onWarn?.(`agent: skipping malformed line: ${g.slice(0,120)}`);continue}let s=u;if(!s||typeof s!="object"||!h.has(s.type)){n.onWarn?.(`agent: skipping unknown event type "${s&&typeof s=="object"?String(s.type??"?"):"?"}"`);continue}if(yield s,s.type==="done"){r=!0;break}}if(r)break}await d.catch(()=>{})}return{events:m(),send:e=>{t.stdin&&!t.stdin.destroyed&&t.stdin.write(JSON.stringify(e)+`
|
|
6
|
-
`)},kill:()=>{t.kill("SIGTERM")},exited:d}}export{w as a};
|
package/dist/chunk-QM4S2APK.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d,e as f}from"./chunk-5YPBPZUR.js";var G={high:3,med:2,low:1},R={create:0,evolve:1,"reuse-candidate":2},_=.75;function a(e,n){return!e.superseded.has(n)&&e.trust.get(n)!=="archived"}function E(e,n){return e.edgesInto(n).some(t=>t.type===f.VERIFIES&&a(e,t.src))}function m(e,n="med"){let t=e.risk;return t==="high"||t==="med"||t==="low"?t:n}function u(e,n){return e.displayNameOf(n)??n}function y(e,n){return`kane-cli design tests --use-case ${u(e,n)}`}function b(e,n){let t=e.edgesFrom(n).find(i=>i.type===f.SCOPED_TO&&a(e,i.dst));if(!t)return null;let s=e.nodeLabel.get(t.dst);if(s===d.USECASE)return t.dst;if(s===d.SCENARIO){let i=e.edgesFrom(t.dst).find(r=>r.type===f.BELONGS_TO&&a(e,r.dst));return i?i.dst:null}return null}function v(e,n){let t=b(e,n);return t?y(e,t):w(e,n)}function w(e,n){return`kane-cli design explain ${u(e,n)}`}function h(e,n){let t=e.edgesFrom(n).find(i=>i.type===f.AUTOMATES&&a(e,i.dst));if(!t)return null;let s=e.edgesFrom(t.dst).find(i=>i.type===f.BELONGS_TO&&a(e,i.dst));return s?s.dst:null}function x(e){let n=[];for(let{cid:t,content:s}of e.byLabel(d.AC))a(e,t)&&(E(e,t)||n.push({ref:u(e,t),kind:"no-verifies",why:"no live test verifies this acceptance criterion",risk:m(s),stage:"design",tag:"create",ready_command:v(e,t)}));return n}function S(e){let n=[];for(let{cid:t,content:s}of e.byLabel(d.USECASE)){if(!a(e,t))continue;let i=e.edgesInto(t).filter(o=>o.type===f.BELONGS_TO&&a(e,o.src));if(i.length===0){n.push({ref:u(e,t),kind:"zero-scenario",why:"use-case has no scenarios",risk:m(s),stage:"design",tag:"create",ready_command:y(e,t)});continue}i.every(o=>e.getNode(o.src)?.content.case_type==="happy")&&n.push({ref:u(e,t),kind:"happy-only",why:"use-case is exercised by happy-path scenarios only",risk:m(s),stage:"design",tag:"create",ready_command:y(e,t)})}return n}function L(e){let n=[];for(let{cid:t,content:s}of e.byLabel(d.GAP)){if(!a(e,t))continue;let i=s.ref,r=typeof i=="string"?e.resolve(i):null,o=r&&a(e,r.tip)?r.tip:null,l=o?e.nodeLabel.get(o):null,p=l===d.USECASE?y(e,o):l===d.AC?v(e,o):w(e,t),c=s.question&&typeof s.question=="object"?s.question:void 0,k=typeof s.text=="string"&&s.text||(c&&typeof c.header=="string"?c.header:"")||"design gap";n.push({ref:u(e,t),kind:String(s.kind),why:k,risk:m(s),stage:"design",tag:"create",ready_command:p,...typeof s.risk_rationale=="string"?{risk_rationale:s.risk_rationale}:{},...c?{question:c}:{}})}return n}function C(e){let n=[];for(let{cid:t,content:s}of e.byLabel(d.AC)){if(!a(e,t))continue;let i=e.stale(t);i==="fresh"||i==="superseded"||n.push({ref:u(e,t),kind:"stale-ac",why:`acceptance criterion is ${i} \u2014 its source moved since this was authored \xB7 why: kane-cli design explain ${u(e,t)}`,risk:m(s),stage:"design",tag:"evolve",ready_command:"kane-cli maintain reconcile"})}for(let{cid:t,content:s}of e.byLabel(d.TEST)){if(!a(e,t))continue;let i=e.stale(t);if(i==="fresh"||i==="superseded")continue;let r=e.edgesFrom(t).filter(g=>g.type===f.VERIFIES&&a(e,g.dst)),o=r.map(g=>m(e.getNode(g.dst)?.content??{})),l=o.includes("high")?"high":o.includes("med")?"med":o.includes("low")?"low":"med",p=r[0]?.dst??null,c=p?null:h(e,t),k=p?v(e,p):c?y(e,c):w(e,t);n.push({ref:u(e,t),kind:"stale-test",why:`test is ${i} \u2014 its source moved since this was authored`,risk:l,stage:"design",tag:"evolve",ready_command:k})}return n}async function O(e,n,t){for(let s of e)if(s.tag==="create"){if(!t){s.meta={embed_arm:"skipped"};continue}try{let i=n.resolve(s.ref),r=i?n.getNode(i.tip):null,o=r&&(String(r.content.title??"")||String(r.content.text??""))||s.why,l=r?.label===d.USECASE?"scenario":"test",c=(await t.searchSimilar(o,{label:l,k:1}))[0];c&&c.score>=_?(s.tag="reuse-candidate",s.meta={embed_arm:"used",near_hit:{ref:u(n,c.cid),score:c.score}}):s.meta={embed_arm:"used",near_hit:null}}catch{s.meta={embed_arm:"skipped"}}}}function A(e,n){let t=G[n.risk]-G[e.risk];if(t!==0)return t;let s=R[e.tag]-R[n.tag];return s!==0?s:e.ref<n.ref?-1:e.ref>n.ref?1:0}function T(e,n){let t=[],s=r=>{let o=e.resolve(r);return o&&!o.superseded?m(e.getNode(o.tip)?.content??{}):"med"},i=r=>{let o=e.resolve(r),l=o&&!o.superseded?b(e,o.tip):null;return l?u(e,l):r};for(let r of n.usecases??[])for(let o of r.acceptance_criteria??[])(o.covered_by??[]).length>0&&(o.execution==="failed"?t.push({ref:o.id,kind:"execution-failed",stage:"cover",tag:"evolve",risk:s(o.id),why:`covering test failed against this AC (tests: ${(o.covered_by??[]).join(", ")})`,ready_command:`kane-cli maintain evolve ${i(o.id)}`}):o.execution==="blocked"?t.push({ref:o.id,kind:"execution-blocked",stage:"cover",tag:"reuse-candidate",risk:s(o.id),why:"the oracle could not run (infrastructure) \u2014 the covering test exists and is reusable",ready_command:"kane-cli testrun run"}):o.execution==="not-run"&&t.push({ref:o.id,kind:"covered-not-run",stage:"cover",tag:"reuse-candidate",risk:s(o.id),why:"a covering test exists but never joined this pack \u2014 run it",ready_command:"kane-cli testrun run"}));return t}async function N(e,n,t,s){if(n!=="design"&&!s)throw new Error(`gaps-engine: stage "${n}" requires a pack's usecases doc`);let i=[];return(n==="design"||n==="all")&&i.push(...x(e),...S(e),...L(e),...C(e)),(n==="cover"||n==="all")&&i.push(...T(e,s)),await O(i,e,t),i.sort(A),i}export{a,E as b,b as c,N as d};
|
package/dist/chunk-RCTM7NGT.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{existsSync as u}from"fs";import{dirname as f,resolve as i}from"path";import{fileURLToPath as d}from"url";var g=f(d(import.meta.url));function p(){return[i(g,".."),i(g,"../../..")]}function A(o){return{"darwin-arm64":"kane-cli-darwin-arm64","darwin-x64":"kane-cli-darwin-x64","linux-x64":"kane-cli-linux-x64","linux-arm64":"kane-cli-linux-arm64","win32-x64":"kane-cli-win-x64"}[o]??null}function h(){let o=A(`${process.platform}-${process.arch}`),n=process.platform==="win32"?"assurance-agent.exe":"assurance-agent";for(let r of p()){for(let s of o?["@testmuai","@lambdatestincprivate"]:[]){let e=i(r,"node_modules",s,o,"bin",n);if(u(e))return{cmd:e,args:[],tier:"platform"}}let a=i(r,"../assurance-agent/dist",n);if(u(a))return{cmd:a,args:[],tier:"sibling"};let t=i(r,"../assurance-agent/main.py");if(u(t)){let s=i(r,"../assurance-agent/.venv/bin/python");return{cmd:u(s)?s:"python3",args:[t],tier:"dev-python"}}}return null}function v(o,n={}){return{...process.env,...n,TESTMUAI_SOURCE:"kane-cli",TESTMUAI_SESSION_ID:o,ASSURANCE_LOG_LEVEL:process.env.ASSURANCE_LOG_LEVEL??"info"}}async function w(){if(process.env.TESTMUAI_API_KEY||process.env.TESTMUAI_BASIC_AUTH)return{};try{let{CredentialsManager:o}=await import("./credentials-GXDXVMXW.js"),n=process.env.TESTMUAI_ENV==="stage"?"stage":"prod",r=new o,a=r.getActiveProfile()??"default",t={TESTMUAI_ENV:n},s=r.loadBasicAuth(a,n);if(s)return t.TESTMUAI_BASIC_AUTH=Buffer.from(`${s.username}:${s.access_key}`,"utf8").toString("base64"),t;let e=r.loadCredentials(a,n);if(e){try{let{refreshOAuthToken:l}=await import("./token-refresh-OY3WLAKD.js");await l({creds:r,profile:a,env:n,credentials:e})}catch{}let c=r.loadCredentials(a,n)??e;if(typeof c.access_token=="string"){let l=await E(n,c.access_token);return l?(t.TESTMUAI_BASIC_AUTH=l,t):(t.TESTMUAI_API_KEY=c.access_token,t)}}return{}}catch{return{}}}var _=8e3;function m(){return process.stderr.write("warn: session auth may expire during long runs \u2014 if that happens, run `kane-cli login` and retry\n"),null}async function E(o,n){if(process.env.TESTMUAI_BASE_URL)return null;try{let[{getEnvironment:r},{ControllerClient:a}]=await Promise.all([import("./config-5GOFF5F4.js"),import("./controller-client-RD2YEMAH.js")]),t=new a(r(o).controllerBaseUrl,n),s;try{let e=await Promise.race([t.getTmsCredentials().catch(()=>null),new Promise(c=>{s=setTimeout(()=>c(null),_)})]);return typeof e?.username!="string"||!e.username||typeof e.access_key!="string"||!e.access_key?m():Buffer.from(`${e.username}:${e.access_key}`,"utf8").toString("base64")}finally{clearTimeout(s)}}catch{return m()}}export{A as a,h as b,v as c,w as d};
|
package/dist/chunk-RN4OSVTG.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
var p=1;function f(e){return e==="agent"?"ndjson":"human"}function c(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}var a=/^(∷ |· |→ |✓ |✗ |… )/;function d(e){return e===0?"complete":e===2?"refused":e===3?"paused":e===130?"interrupted":"error"}function l(e,n,s={stdout:t=>process.stdout.write(t),stderr:t=>process.stderr.write(t)}){let t=!1,i=r=>{if(e!=="ndjson")return;if(r.type==="done"){if(t)return;t=!0}let{type:o,...u}=r;s.stdout(JSON.stringify({type:o,v:1,verb:n,...u})+`
|
|
3
|
-
`)};return{encoding:e,out:e==="ndjson"?r=>s.stderr(r+`
|
|
4
|
-
`):r=>s.stdout(r+`
|
|
5
|
-
`),progress:e==="ndjson"?()=>{}:r=>s.stderr(r.replace(a,"").replace(/…$/,"")+`
|
|
6
|
-
`),event:i,done:(r,o)=>(i({type:"done",status:o??d(r),exit_code:r}),r)}}var g=8*1024;function m(e,n){return e.message==null?null:e.message.trim()?e.resume?Buffer.byteLength(e.message,"utf8")>g?`${n==="extract"?"extract":"design"}: --message is over 8KB \u2014 the agent would silently drop it; shorten the statement`:null:`${n==="extract"?"extract":"design"}: --message only rides a resume \u2014 pair it with --resume <sid> (a fresh run takes its direction from the sources)`:`${n==="extract"?"extract":"design"}: --message is empty \u2014 say what you want the agent to know`}function E(e,n,s){return e.event({type:"error",message:n,...s?{code:s}:{}}),e.done(2,"refused")}function x(e,n,s){return{out:t=>{n()&&s.test(t)||e.out(t)},emit:t=>{n()&&t.type==="error"&&s.test(String(t.message??""))||e.event(t)}}}export{p as a,f as b,c,l as d,g as e,m as f,E as g,x as h};
|
package/dist/chunk-UXPQRALY.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as Qe,g as qe}from"./chunk-FCMLIK7P.js";import{b as w,c as Q,d as Ge,f as q,g as ee}from"./chunk-CJJXT5DO.js";import{a as Ke,e as P,f as j,g as We,h as H,i as D,j as Je}from"./chunk-ZPDM6FO7.js";import{a as G}from"./chunk-BC7UVJJB.js";import{d as et}from"./chunk-NVGBE2DR.js";import{a as F,b as L,d as Ye}from"./chunk-EHN5HTUD.js";import{a as R,b as y}from"./chunk-L5LI2JF4.js";import{a as b}from"./chunk-7E24OCGX.js";import{b as Y}from"./chunk-FRBYGSGJ.js";import{a as Ze}from"./chunk-6HYW5RFX.js";import{c as z,e as U}from"./chunk-J2KSZUOO.js";import{d as te,f as Xe}from"./chunk-5YPBPZUR.js";import{a as Ue}from"./chunk-A2IQRVPR.js";import{a as ze}from"./chunk-B4LLKQTK.js";function $(t){if(t===null)return"broken";let e=Math.floor(t/100);return e===1?"passed":e===7?"failed":e===2?"skipped":"broken"}var C={failed:3,broken:2,passed:1,skipped:0};function re(t){let e="skipped";for(let r of t)C[r]>C[e]&&(e=r);return e}import{createHash as Dt}from"crypto";import{basename as Ot}from"path";function ne(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return e.length>0?e:"session"}function ie(t){return Dt("sha256").update(t).digest("hex").slice(0,8)}function oe(t){let e=Ot(t).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${ne(e)}-${ie(t)}`}function se(t,e){return`${ne(t)}-${ie(e)}`}function ae(t){let e={};for(let[r,n]of Object.entries(t))typeof n=="string"&&n.length>0&&(e[r]=n);return e}var At={darwin:"macOS",linux:"Linux",win32:"Windows"};function ce(t){return At[t]??t}function de(t,e){let r={},n=(i,o)=>{o!==void 0&&o!==""&&(r[i]=o)};return n("model",e.model),n("os",t.os),n("browser",t.browser),n("browser_version",t.browser_version),n("resolution",t.resolution),n("platform",e.platform),n("platform_type",e.platform_type),n("run_kind",e.run_kind),n("os_version",t.os_version),t.device!==void 0&&t.device!==""?r.device=t.device:e.platform_type&&e.platform_type!=="web"&&(r.device=null),r}function Ft(t,e){return{pack_test_dir:t,ordinal_offset:e}}import{promises as _}from"fs";import{join as I}from"path";function ue(t){let e={evidence:"0.1",run_id:t.execution_id,status:"running",title:t.title,started:t.started,environment:{producer:{name:"kane-cli",version:t.producerVersion},...t.surfaces?{surfaces:t.surfaces}:{},run_kind:t.run_kind,origin:t.origin,pid:t.pid},...t.credits!==void 0?{metrics:{credits:{value:t.credits,type:"count"}}}:{}};return y(e,{lineWidth:-1})}async function le(t,e,r,n=process.cwd(),i){let o=i??w(t.execution_id,n),a=I(o,"tests",e);return await _.mkdir(I(o,"coverage"),{recursive:!0}),await _.writeFile(I(o,"coverage",".keep"),""),await _.mkdir(a,{recursive:!0}),await _.writeFile(I(o,"run.yaml"),ue(t)),r&&await _.writeFile(I(a,r.path),r.content),o}async function Lt(t,e=process.cwd()){let r=w(t.execution_id,e);await _.mkdir(I(r,"coverage"),{recursive:!0}),await _.writeFile(I(r,"coverage",".keep"),"");let n=R(ue(t));return n.environment&&delete n.environment.run_kind,await _.writeFile(I(r,"run.yaml"),y(n,{lineWidth:-1})),r}async function jt(t,e=process.cwd()){return L(w(t,e),new Date().toISOString())}async function pe(t,e=process.cwd()){await _.rm(w(t,e),{recursive:!0,force:!0})}import{promises as fe}from"fs";import{join as me}from"path";function ge(t){let e={evidence:"0.1",test:t.testId,status:t.status,...t.durationMs!==void 0?{duration_ms:t.durationMs}:{},...t.definitionPath?{definition:{path:t.definitionPath}}:{},...t.definitionId?{definition_id:t.definitionId}:{},...t.assuranceId?{assurance_id:t.assuranceId}:{},...Object.keys(t.externalId).length?{external_id:t.externalId}:{},...t.tags&&t.tags.length?{tags:t.tags}:{},...Object.keys(t.environment).length?{environment:t.environment}:{},steps:t.steps};return y(e,{lineWidth:-1})}function ve(t){return y({logs:t},{lineWidth:-1})}async function he(t,e,r){await fe.writeFile(me(t,"tests",e,"result.yaml"),r)}async function we(t,e,r){let n=me(t,"tests",e,"logs");await fe.mkdir(n,{recursive:!0}),await fe.writeFile(me(n,"meta.yaml"),r)}import{promises as K}from"fs";import{join as tt}from"path";function rt(t){return tt(t,".internal","meta.json")}async function nt(t){let e;try{e=await K.readFile(rt(t),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function ye(t,e){let r;try{r=await nt(t)??{}}catch(a){console.warn(`evidence: meta.json at ${t} unreadable \u2014 skipping execution-pointer append to preserve identity`,a);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(e),r.executions=n,await K.mkdir(tt(t,".internal"),{recursive:!0});let i=rt(t),o=`${i}.tmp-${process.pid}-${Date.now()}`;await K.writeFile(o,JSON.stringify(r,null,2)+`
|
|
3
|
-
`),await K.rename(o,i)}async function Tt(t){try{let e=await nt(t);return e&&Array.isArray(e.executions)?e.executions:[]}catch{return[]}}async function Nt(t,e,r=process.cwd()){let n=await q(t,r);if(!n){let o=`evidence: no pack found for "${t}"`;return e.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:t})):console.error(o),2}let i=await F(n,e.profile??"L1");return e.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${e.profile??"L1"}, status ${i.status})`),i.valid?0:1}function _e(t){let e=[];for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)e.push($(i))}return re(e)}function Vt(t){let e=null;for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(e==null||C[$(i)]>C[$(e)]||C[$(i)]===C[$(e)]&&i>e)&&(e=i)}return e}import{promises as Mt}from"fs";import{extname as it,basename as Bt}from"path";var Ht={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function xe(t){let e;try{e=await Mt.readdir(t)}catch{return[]}return e.filter(r=>r!=="meta.yaml").sort().map(r=>({name:Bt(r,it(r)),file:r,format:Ht[it(r)]??"txt"}))}import{mkdirSync as zt,appendFileSync as Ut}from"fs";import{join as ot}from"path";function ke(t,e){return ot(t,"tests",e,"logs")}function be(t,e,r,n={},i){try{i?.(e,r,r,n)}catch{}if(t)try{zt(t,{recursive:!0});let o=JSON.stringify({ts:new Date().toISOString(),level:e,event:r,...n})+`
|
|
4
|
-
`;Ut(ot(t,"diagnostics.ndjson"),o)}catch{}}import{promises as E}from"fs";import{join as O}from"path";async function Yt(t){try{let e=O(t,"tests"),r=await E.readdir(e).catch(()=>[]);for(let n of r){let i=O(e,n,"steps"),o=await E.readdir(i).catch(()=>[]);for(let a of o){let s=await E.readFile(O(i,a,"failure.yaml"),"utf8").catch(()=>null);if(s!=null)try{let c=R(s);if(c&&typeof c=="object"&&c.triage)return!0}catch{}}}}catch{}return!1}async function st(t,e,r){let n=O(t,"tests",e,"logs");if(r)try{await E.mkdir(n,{recursive:!0}),await E.copyFile(r,O(n,"tui.log"))}catch{}let i=await xe(n);i.length&&await we(t,e,ve(i))}async function Ie(t){let e=t.cwd??process.cwd(),r=t.packDir??w(t.executionId,e);if(!t.saved&&!t.packDir)return await pe(t.executionId,e),{sealed:!1};await st(r,t.testId,t.tuiLogPath);let n=O(r,"run.yaml"),i=R(await E.readFile(n,"utf8"));i.environment={...i.environment??{},saved:t.saved,run_kind:t.runKind},await E.writeFile(n,y(i,{lineWidth:-1}));let o=await E.open(n,"r+");try{await o.sync()}finally{await o.close()}let a=await Yt(r);await L(r,new Date().toISOString());let s;try{let d=await F(r,"L1");s=d.valid;let p=(d.diagnostics??[]).filter(u=>String(u?.code??"").includes("failure.status_disagrees"));if(p.length>0)if(t.expectStatusDisagrees||a){let u=t.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 ${u}`)}else console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,p);if(!d.valid){console.warn(`evidence: sealed pack ${t.executionId} failed L1 validation`,d.diagnostics);let u=String(d.diagnostics?.[0]?.code??"");be(ke(r,t.testId),"warn","EVIDENCE_INVALID",{execution_id:t.executionId,first_code:u,surface:t.surface??"testmd"},t.log)}}catch(d){console.warn(`evidence: validation error for ${t.executionId}`,d)}let c;if(t.saved&&t.packDir)try{c=await Ge(r,t.executionId,e)}catch(d){console.warn(`evidence: store install failed for ${t.executionId}`,d)}if(t.outputStemDir)try{await ye(t.outputStemDir,{execution_id:t.executionId,run_kind:t.runKind,status:t.verdict,valid:s,at:new Date().toISOString()})}catch(d){console.warn(`evidence: execution-pointer append failed for ${t.executionId} (pack is sealed)`,d)}return{sealed:!0,valid:s,storePath:c}}import{release as at}from"os";import{execFileSync as Gt}from"child_process";var ct=!1,W;function Kt(){if(!ct)if(ct=!0,process.platform==="darwin")try{W=Gt("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{W=at()||void 0}else W=at()||void 0;return W}function Ee(t){let e={os:ce(process.platform)},r=Kt();if(r&&(e.os_version=r),t.cdpBrowser){let n=/^([A-Za-z]+)\/(\d+)/.exec(t.cdpBrowser);n&&(e.browser=n[1].replace(/^Headless/,""),e.browser_version=n[2])}return t.resolution&&(e.resolution=t.resolution),e}async function dt(t){if(t)try{let e=await fetch(`${t}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!e.ok)return;let r=await e.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function Wt(t){let e;return()=>(e||(e=dt(t)),e)}import{promises as Se,existsSync as Re,readFileSync as Qt}from"fs";import{basename as qt,join as S}from"path";import{readFileSync as Jt}from"fs";import{dirname as Xt,resolve as Zt}from"path";function ut(t,e){let r=Zt(t),n=Jt(r,"utf8");return P(e?j(n,H(Xt(r),e)):n)}var T=class t{constructor(e){this.opts=e}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_packDirOverride;_attached=!1;get attached(){return this._attached}static async attach(e){let r=qt(e.packDir).replace(/\.evidence$/,""),n=new t({origin:"testrun",runKind:"author",pid:process.pid,title:e.testId,started:new Date().toISOString(),producerVersion:ze,cwd:e.cwd});n.executionId=r,n.testId=e.testId,n._packDirOverride=e.packDir,n._attached=!0;let i=S(e.packDir,"tests",e.testId);return await Se.mkdir(i,{recursive:!0}),e.definition&&(await Se.writeFile(S(i,e.definition.path),e.definition.content),n.definitionPath=e.definition.path,n.definitionContent=e.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=Q(),this.testId=this.opts.testmdRelPath?oe(this.opts.testmdRelPath):se(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let e=this.opts.definition??null;return await le({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,e,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),e&&(this.definitionPath=e.path,this.definitionContent=e.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?S(this.opts.packRootDir,`${this.executionId}.evidence`):w(this.executionId,this.opts.cwd)}get packTestDir(){return S(this.pack,"tests",this.testId)}async writeDefinition(e,r="test.md"){await Se.writeFile(S(this.packTestDir,r),e),this.definitionPath=r,this.definitionContent=e}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=S(this.opts.cwd,this.opts.testmdRelPath);if(Re(e))return D(Qt(e,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=S(this.opts.cwd,this.opts.testmdRelPath),r=S(this.opts.cwd,".context"),n=Re(r)?b(r):void 0;if(Re(e))return ut(e,n)}if(this.definitionContent!=null)return P(this.definitionContent)}catch{}}noteSpawn(e){this.accumulatedSteps.push(...e.steps),this.maxOrdinal=Math.max(this.maxOrdinal,e.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}async writeResult(e){let r=_e(e.spawns),n=this.pack;await he(n,this.testId,ge({testId:this.testId,status:r,durationMs:e.durationMs,definitionPath:this.definitionPath,definitionId:this.computeDefinitionId(),assuranceId:this.computeAssuranceId(),externalId:ae(e.externalIdInput),environment:de(e.runnerEnv,e.intentEnv),steps:e.steps,tags:e.tags}));let i=e.externalIdInput;return e.log&&(i.commit_id||i.test_id||i.testcase_id)&&e.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:i.commit_id??null,test_id:i.test_id??null,testcase_id:i.testcase_id??null,project_id:i.project_id??null,session_id:i.session_id??null,session_name:i.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function er(t,e,r=ee){try{let n=await r(t);if(n.aborted.length>0||n.removed.length>0)try{e?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as _r}from"fs";import{existsSync as $e,mkdirSync as fr,readdirSync as mr,readFileSync as gr,rmSync as vr,statSync as hr,writeFileSync as wr}from"fs";import{join as A}from"path";import{mkdirSync as tr,renameSync as rr,rmSync as nr,writeFileSync as ir}from"fs";import{join as lt}from"path";var or=5e6;function pt(t,e,r){let n=lt(t,"coverage","sources"),i=new Map,o=!1;try{for(let a of r.usecases)for(let s of a.sources){if(i.has(s.id)){s.file=i.get(s.id);continue}if(!s.cid)continue;let c=et(e,s.cid);if(c===null||c.byteLength>or)continue;o||(tr(n,{recursive:!0}),o=!0);let d=lt(n,s.id),l=`${d}.tmp-${process.pid}`;ir(l,c),rr(l,d);let p=`coverage/sources/${s.id}`;i.set(s.id,p),s.file=p}}catch{for(let a of r.usecases)for(let s of a.sources)delete s.file;if(o)try{nr(n,{recursive:!0,force:!0})}catch{}}}import{existsSync as Ce,readFileSync as N,renameSync as cr,writeFileSync as dr}from"fs";import{dirname as ht,isAbsolute as wt,resolve as yt}from"path";var sr=new Set(["inline","testmd","testrun"]),ar=new Set(["inferred","authored","runtime-derived"]),Pe=new Set(["passed","failed","broken","skipped"]);function ft(t,e,r){let n=[];if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let i=z(t);if(e.latestHash!==i)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(e.latestHash)} but chain head is ${String(i)} \u2014 re-open and retry`}]};let o=[];for(let s of r.facts){let c=`executions[${s.ref}]`,d=e.resolve(s.ref),l=d?e.tipOf(d.cid):null;if(!d||!l||e.superseded.has(l)){n.push({code:"UNKNOWN_REF",detail:`${c}: '${s.ref}' is not a live committed node`});continue}if(e.nodeLabel.get(l)!==te.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${c}: execution facts attach to tests \u2014 '${s.ref}' is a ${e.nodeLabel.get(l)}`});continue}if(!sr.has(s.mode)){n.push({code:"BAD_MODE",detail:`${c}: mode '${s.mode}' not in inline|testmd|testrun`});continue}if(!Pe.has(s.verdict)){n.push({code:"BAD_VERDICT",detail:`${c}: verdict '${s.verdict}' not in ${[...Pe].join("|")}`});continue}if(!ar.has(s.oracle_mode)){n.push({code:"BAD_ORACLE_MODE",detail:`${c}: oracle_mode '${s.oracle_mode}' not in inferred|authored|runtime-derived`});continue}if(typeof s.drift_flag!="boolean"||typeof s.stale_at_run!="boolean"){n.push({code:"MISSING_FIELD",detail:`${c}: drift_flag and stale_at_run are required booleans`});continue}if(!s.execution_id||!s.started_at||!s.definition_id_at_run){n.push({code:"MISSING_FIELD",detail:`${c}: execution_id, started_at and definition_id_at_run are required`});continue}let p=[];for(let u of s.per_ac??[]){let m=e.resolve(u.ac_ref),f=m?e.tipOf(m.cid):null;if(!m||!f||e.superseded.has(f)||e.nodeLabel.get(f)!==te.AC){n.push({code:"UNKNOWN_REF",detail:`${c}.per_ac: '${u.ac_ref}' is not a live AC`});continue}if(!Pe.has(u.verdict)){n.push({code:"BAD_VERDICT",detail:`${c}.per_ac['${u.ac_ref}']: verdict '${u.verdict}'`});continue}p.push({ac_ref:e.nameOf.get(f)??f,verdict:u.verdict})}o.push({about:l,definition_id_at_run:s.definition_id_at_run,verdict:s.verdict,...p.length?{per_ac:p}:{},drift_flag:s.drift_flag,oracle_mode:s.oracle_mode,stale_at_run:s.stale_at_run,...s.unresolved_acs?.length?{unresolved_acs:s.unresolved_acs}:{},execution_id:s.execution_id,...s.evidence_id?{evidence_id:s.evidence_id}:{},...s.duration_ms!==void 0?{duration_ms:s.duration_ms}:{},started_at:s.started_at,mode:s.mode,local:s.local,...s.via_parent?{via_parent:s.via_parent}:{}})}if(n.length>0)return{record:null,errors:n};let a=U(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:o,source_head_moves:{}});return Y(t),{record:a.record,errors:null}}function _t(t){let e={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of t)for(let i of n.verifies??[]){let o=r.get(i);(o===void 0||(e[n.status]??0)>(e[o]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function xt(t){let e=[],r=G(t.cwd);if(!Ce(r))return{synced:0,superseded:0,skipped:"no-context",warnings:e};let n=t.by??{kind:"ai",id:"exec-sync"},i=b(r),o=[],a=0,s=new Set;for(let d of t.members){let l=wt(d.path)?d.path:yt(t.cwd,d.path);for(let p of ur(l)){if(s.has(p.path))continue;s.add(p.path);let u=p.path===l?void 0:D(N(l,"utf8"))?.id,m=N(p.path,"utf8"),f=D(m);if(!f?.id)continue;let g=i.resolve(f.id),x=g?i.tipOf(g.cid):null;if(!g||!x||i.superseded.has(x)){e.push(`sync: ${f.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let k=P(j(m,H(ht(p.path),i))),v=String(i.getNode(x)?.content.test_md_blob??""),M=P(j(v,We(i))),B=!1,Z=x;if(k===M)f.base!==M&&vt(p.path,m,M,e);else if(f.base===M){let h=lr(r,i,x,m,k,n);h.error?(e.push(`sync: could not supersede ${f.id}: ${h.error}`),B=!0):(a++,Z=h.newCid,B=h.oracleTier,vt(p.path,N(p.path,"utf8"),k,e),i=b(r))}else B=!0,e.push(f.base?`sync: ${f.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${f.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);let Ve=i.getNode(Z)?.content.check,Me=p.path===l?d.acs??[]:[],Be=Me.filter(h=>mt(i,h.ref)),He=Me.filter(h=>!mt(i,h.ref)).map(h=>h.ref);o.push({ref:f.id,definition_id_at_run:k,verdict:d.verdict,...Be.length?{per_ac:Be.map(h=>({ac_ref:h.ref,verdict:h.verdict}))}:{},drift_flag:B,oracle_mode:Ve?.expected_mode??(Ke(Ve?.operand)?"runtime-derived":"inferred"),stale_at_run:i.stale(Z)!=="fresh",...He.length?{unresolved_acs:He}:{},execution_id:d.executionId,...d.evidenceId?{evidence_id:d.evidenceId}:{},...d.durationMs!==void 0?{duration_ms:d.durationMs}:{},started_at:d.startedAt,mode:d.mode,local:d.local,...u?{via_parent:u}:{}})}}if(o.length===0)return{synced:0,superseded:a,warnings:e};let c=ft(r,b(r),{facts:o,by:n});return c.errors?(e.push(...c.errors.map(d=>`sync facts: ${d.code}: ${d.detail}`)),{synced:0,superseded:a,warnings:e}):{synced:o.length,superseded:a,warnings:e}}function ur(t){let e=[],r=new Set,n=i=>{if(r.has(i)||!Ce(i))return;r.add(i);let o=N(i,"utf8");for(let a of o.split(`
|
|
5
|
-
`)){let s=/^@import\s+(\S+)\s*$/.exec(a.trim());if(!s)continue;let c=wt(s[1])?s[1]:yt(ht(i),s[1]);Ce(c)&&D(N(c,"utf8"))?.id&&n(c)}e.push({path:i})};return n(t),e}function mt(t,e){let r=t.resolve(e),n=r?t.tipOf(r.cid):null;return!!(r&&n&&!t.superseded.has(n)&&t.nodeLabel.get(n)==="ac")}function lr(t,e,r,n,i,o){let a=e.getNode(r);if(!a)return{oracleTier:!1,error:"tip unreadable"};let s=Je(n),c=String(a.content.test_md_blob??""),d=/^#\s+(.+?)\s*$/m.exec(s)?.[1]??String(a.content.title??""),l={...a.content,test_md_blob:s,definitionId:i,title:d},p=Xe("test",l);if(p.length>0)return{oracleTier:!1,error:p.map(g=>g.detail).join("; ")};let u=Ze("test",l);if(u===r)return{newCid:r,oracleTier:!1};let m=gt(c)!==gt(s),f=z(t);if(e.latestHash!==f)return{oracleTier:m,error:`store advanced under the sync (basis ${String(e.latestHash)} vs head ${String(f)}) \u2014 re-run to retry`};try{U(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:u,label:"test",content:l}],edges:[],review:[{id:u,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:o}],supersessions:[{kind:"node",old:r,new:u,reason:"edited on disk (run sync)",by:o}],source_head_moves:{}},{expectPrev:f})}catch(g){return{oracleTier:m,error:g instanceof Error?g.message:String(g)}}return Y(t),{newCid:u,oracleTier:m}}var pr=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/;function gt(t){let e=[],r=t.split(`
|
|
6
|
-
`),n=!1;for(let i of r){if(/^##\s/.test(i)){n=/\bassert\b/i.test(i);let o=pr.exec(i);o&&e.push(`v:${o[1].trim()}`);continue}n&&i.trim()!==""&&e.push(i.trim())}return e.join(`
|
|
7
|
-
`)}function vt(t,e,r,n){try{let i=e.split(`
|
|
8
|
-
`),o=-1;if(i[0]?.trim()==="---"){for(let c=1;c<i.length;c++)if(i[c].trim()==="---"){o=c;break}}if(o<0)return;let a=!1;for(let c=1;c<o;c++){if(/^\s+base:\s*sha256:[0-9a-f]+\s*$/.test(i[c])){i[c]=i[c].replace(/sha256:[0-9a-f]+/,r),a=!0;break}if(/^assurance:\s*$/.test(i[c])&&!i.slice(c,Math.min(c+3,o)).some(d=>/^\s+base:/.test(d))){i.splice(c+2,0,` base: ${r}`),a=!0;break}}if(!a)return;let s=`${t}.tmp-sync`;dr(s,i.join(`
|
|
9
|
-
`)),cr(s,t)}catch(i){n.push(`sync: pin refresh failed for ${t} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var yr={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"},kt=(t,e)=>{try{if(!$e(e))return{status:"skipped",reason:"no context store at the project root"};let r=A(t,"tests");if(!$e(r))return{status:"skipped",reason:"pack has no tests/"};let n=new Map;for(let s of mr(r)){let c=A(r,s,"result.yaml");if(!$e(c)||!hr(A(r,s)).isDirectory())continue;let d=R(gr(c,"utf8"));if(!d?.definition_id&&!d?.assurance_id)continue;let l=_t(d.steps??[]),p={testShortId:String(d.test??s),execution:yr[String(d.status)]??"not-run",...l.length?{acs:l}:{}};d.assurance_id&&n.set(`id:${d.assurance_id}`,p),d.definition_id&&n.set(`def:${d.definition_id}`,p)}let i=qe(b(e),n,{scope:"run"}),o=Qe(i);pt(t,e,i);let a=y({...i,rollup:o},{lineWidth:-1});return fr(A(t,"coverage"),{recursive:!0}),wr(A(t,"coverage","usecases.yaml"),a),{status:"written"}}catch(r){try{vr(A(t,"coverage","sources"),{recursive:!0,force:!0})}catch{}return{status:"skipped",reason:r instanceof Error?r.message:String(r)}}};async function xr(t){try{let e=new T({origin:"inline",runKind:"author",pid:t.pid,title:t.title,started:new Date().toISOString(),producerVersion:t.producerVersion,surfaces:t.surfaces,objectiveOrName:t.objectiveOrName,sessionId:t.sessionId,cwd:t.cwd,packRootDir:t.packRootDir}),r=await e.start();return{session:e,...r,packDir:e.pack,spawns:[],startedAtMs:Date.now(),cwd:t.cwd}}catch(e){return console.warn("evidence: inline pack creation failed",e),null}}function kr(t,e,r){if(!t)return;t.session.noteSpawn(e),e.resolution&&(t.resolution=e.resolution);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));t.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function br(t){if(t)return{packTestDir:t.packTestDir,ordinalOffset:t.session.nextOrdinalOffset()}}async function Ir(t,e){if(!t)return null;if(t.finalized)return t.finalized;let r=(n,i,o)=>e.log?e.log("warn",n,i,o):console.warn(`evidence: ${i}`,o??"");try{if(e.recordedTestPath)try{await t.session.writeDefinition(await _r.readFile(e.recordedTestPath,"utf8"))}catch(a){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(a)})}let n=e.cdpBrowserCapture?await e.cdpBrowserCapture():void 0,i=await t.session.writeResult({steps:t.session.steps,spawns:t.spawns.length?t.spawns:[{resultCode:null}],externalIdInput:{...e.externalIdInput,execution_id:t.executionId},runnerEnv:Ee({cdpBrowser:n,resolution:t.resolution}),intentEnv:{model:e.model,platform:"Desktop",platform_type:"web"},durationMs:e.durationMs??Date.now()-t.startedAtMs,log:e.log});try{if(e.recordedTestPath){let a=xt({cwd:e.cwd??t.cwd??process.cwd(),members:[{path:e.recordedTestPath,verdict:i,executionId:t.executionId,startedAt:new Date(t.startedAtMs).toISOString(),mode:"inline",local:e.local??!1}]});for(let s of a.warnings)r("EXEC_SYNC",s)}}catch(a){r("EXEC_SYNC","exec-sync failed",{error:String(a)})}try{let a=(e.coverageWriter??kt)(t.packDir,G(e.cwd??t.cwd??process.cwd()));a.status==="skipped"&&r("EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${a.reason}`)}catch(a){r("EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(a)})}let o=await Ie({executionId:t.executionId,testId:t.testId,saved:e.saved,runKind:"author",verdict:i,cwd:e.cwd??t.cwd,packDir:t.packDir,tuiLogPath:e.tuiLogPath,log:e.log,surface:"inline"});return t.finalized=o,e.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:t.executionId,verdict:i,valid:o.valid,pack:t.packDir,store_copy:o.storePath??null}),o}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as $r,openSync as Dr,readSync as Or,closeSync as Ar}from"fs";import{basename as Fr,resolve as Lr}from"path";import{createServer as Er}from"http";import{createReadStream as Sr,promises as Rr}from"fs";import{randomBytes as Pr}from"crypto";var J="127.0.0.1";function bt(t,e){if(!t)return null;let r=/^bytes=(\d*)-(\d*)$/.exec(t.trim());if(!r)return null;let[,n,i]=r;if(n===""&&i==="")return null;if(n===""){let s=Number(i);return s===0||e===0?"unsatisfiable":{start:Math.max(0,e-s),end:e-1}}let o=Number(n);if(o>=e)return"unsatisfiable";let a=i===""?e-1:Math.min(Number(i),e-1);return a<o?null:{start:o,end:a}}async function De(t){let e=Pr(16).toString("hex"),r=Er((i,o)=>{Cr(i,o,t,e).catch(()=>o.destroy())});await new Promise((i,o)=>{r.once("error",o),r.listen(t.port??0,J,()=>{r.removeListener("error",o),i()})});let n=r.address().port;return{port:n,urlFor:i=>`http://${J}:${n}/${e}/${encodeURIComponent(i)}`,close:()=>new Promise(i=>{r.close(()=>i()),r.closeAllConnections()})}}async function Cr(t,e,r,n){let i=t.url??"/",o=v=>{try{r.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:v,path:i})}catch{}};if(t.headers.host!==`${J}:${t.socket.localPort}`){o("host_mismatch"),e.writeHead(403).end();return}let a=t.headers.origin;if(a!==void 0&&!r.allowedOrigins.includes(a)){o("origin_denied"),e.writeHead(403).end();return}let s=a?{"Access-Control-Allow-Origin":a,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(t.method==="OPTIONS"){let v={...s,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};t.headers["access-control-request-private-network"]==="true"&&(v["Access-Control-Allow-Private-Network"]="true"),e.writeHead(204,v).end();return}if(t.method!=="GET"&&t.method!=="HEAD"){e.writeHead(405,s).end();return}let c;try{let v=new URL(t.url??"/",`http://${J}`).pathname.split("/");if(v.length!==3||v[1]!==n){o("bad_token"),e.writeHead(404,s).end();return}c=decodeURIComponent(v[2])}catch{o("not_found"),e.writeHead(404,s).end();return}let d=r.packs.get(c);if(!d){o("not_found"),e.writeHead(404,s).end();return}let l;try{let v=await Rr.stat(d);if(!v.isFile())throw new Error("not a file");l=v.size}catch{o("not_found"),e.writeHead(404,s).end();return}let p={...s,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(t.method==="HEAD"){e.writeHead(200,{...p,"Content-Length":String(l)}).end();return}let u=bt(t.headers.range,l);if(u==="unsatisfiable"){o("unsatisfiable"),e.writeHead(416,{...s,"Content-Range":`bytes */${l}`}).end();return}let[m,f,g]=u===null?[0,l-1,200]:[u.start,u.end,206],x={...p,"Content-Length":String(f-m+1)};if(g===206&&(x["Content-Range"]=`bytes ${m}-${f}/${l}`),e.writeHead(g,x),l===0){e.end();return}let k=Sr(d,{start:m,end:f});k.on("error",()=>e.destroy()),e.on("close",()=>k.destroy()),k.pipe(e)}function V(t,e){return(e??Ue(t).evidenceViewerUrl).replace(/\/+$/,"")}function Oe(t,e){return`${e}/?pack=${encodeURIComponent(t)}`}function Ae(t){return`evidence: view locally with \`kane-cli evidence serve ${t}\``}async function jr(t,e,r={}){let n=r.out??(l=>process.stdout.write(l+`
|
|
10
|
-
`)),i=l=>(n(`error: ${l}`),2);if(e.env!=="prod"&&e.env!=="stage")return i(`invalid --env: ${String(e.env)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))return i("invalid --port: expected an integer 1-65535");let o;try{o=V(e.env,e.viewerUrl),new URL(o)}catch{return i(`invalid --viewer-url: ${e.viewerUrl}`)}if(t.length===0)return i("no pack paths given");let a=new Map;for(let l of t){let p=Lr(l),u;try{u=$r(p)}catch{return i(`${l}: not found`)}if(u.isDirectory())return i(`${l}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!u.isFile())return i(`${l}: not a regular file`);let m=Buffer.alloc(2),f=Dr(p,"r");try{Or(f,m,0,2,0)}finally{Ar(f)}if(m.toString("latin1")!=="PK")return i(`${l}: not a sealed evidence pack (zip magic missing)`);let g=Fr(p);if(a.has(g))return i(`duplicate pack basename: ${g} (URL names collide \u2014 rename one)`);a.set(g,p)}let s=r.log??((l,p,u)=>process.stderr.write(`warn: ${p} reason=${u.reason} path=${u.path}
|
|
11
|
-
`)),c;try{c=await De({packs:a,allowedOrigins:[new URL(o).origin],port:e.port,log:s})}catch(l){return i(`could not bind 127.0.0.1${e.port?`:${e.port}`:""} \u2014 ${l.message}`)}n(`serving ${a.size} pack${a.size===1?"":"s"} on http://127.0.0.1:${c.port}`);for(let l of a.keys()){let p=c.urlFor(l);n(l),n(` pack ${p}`),n(` viewer ${Oe(p,o)}`)}return n("press Ctrl-C to stop"),await(r.hold??Tr)(),await c.close(),0}function Tr(){return new Promise(t=>{let e=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of e)process.on("SIGINT",r);t()})})}import{promises as X}from"fs";import{tmpdir as Br}from"os";import{join as St,resolve as Le}from"path";var Nr=["error","prefer_first","prefer_latest","discard"],Vr=["external_id.commit_id","external_id.test_id"];function It(t){let e=t.replace(/-/g,"_");return Nr.includes(e)?e:null}function Et(t){let e=t==="discard"?{on_collision:"discard"}:{on_collision:"error",identity:{keys:[...Vr],on_same:t??"nest",on_different:t?"error":"split"}};return y({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:e,rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function Fe(t){try{if(!t.isTTY){t.log(Ae(t.packPath));return}let e=V(t.env);await(t.renderPrompt??Mr)(t.packPath,e)}catch(e){try{t.log(`evidence view failed \u2014 ${e.message}`)}catch{}}}async function Mr(t,e){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-EOKJE2B6.js");await new Promise(o=>{let a=n(r.default.createElement(i,{packPath:t,viewerBase:e,onDone:()=>{a.unmount(),o()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function Hr(t,e,r=process.cwd(),n={}){let i=n.out??(u=>process.stdout.write(u+`
|
|
12
|
-
`)),o=n.err??(u=>process.stderr.write(u+`
|
|
13
|
-
`)),a=u=>(o(`evidence merge: ${u}`),2);if(!e.runId)return a("--run-id is required (merged identity is the caller's fact)");if(e.rules&&e.onCollision)return a("--rules and --on-collision are mutually exclusive");let s;if(e.onCollision!==void 0){let u=It(e.onCollision);if(!u)return a(`invalid --on-collision: ${e.onCollision} (expected error | prefer-first | prefer-latest | discard)`);s=u}let c=[];for(let u of t){let m=await zr(u,r);if(!m)return a(`no pack found for "${u}"`);c.push(m)}let d=e.out?Le(r,e.out):w(e.runId,r),l=null,p;e.rules?p=Le(r,e.rules):(l=await X.mkdtemp(St(Br(),"kane-merge-rules-")),p=St(l,"merge-rules.yaml"),await X.writeFile(p,Et(s)));try{let u=await(n.mergeFn??Ye)(c,{runId:e.runId,out:d,rulesPath:p,title:e.title,finalize:e.finalize});return e.json?i(JSON.stringify(u)):Ur(i,u),u.output.finalized&&!e.json&&await(n.offer??Fe)({packPath:d,env:e.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:o}),0}catch(u){let m=u instanceof Error?u.message:String(u);return u?.code==="ABORT"?(o(`evidence merge: aborted \u2014 ${m}`),1):a(m)}finally{l&&await X.rm(l,{recursive:!0,force:!0}).catch(()=>{})}}async function zr(t,e){let r=Le(e,t);if(await Rt(r))return r;let n=w(t,e);return await Rt(n)?n:null}async function Rt(t){try{return await X.stat(t),!0}catch{return!1}}function Ur(t,e){let{packs:r,tests:n,output:i}=e;t(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let o of r.skipped)t(` skipped ${o.runId}: ${o.rule} \u2014 ${o.reason}`);for(let o of n.collisions){let a;o.action==="nest"?a=`nested into ${o.folder}, latest ${o.winner}`:o.action==="split"?a=`split into ${o.folder}`:a=`winner ${o.winner}`,t(` collision ${o.test}: ${a} (${o.rule})`)}for(let o of n.discarded)t(` discarded ${o}`)}import{copyFileSync as Yr,existsSync as je,mkdirSync as Gr}from"fs";import{join as Pt}from"path";function Kr(t,e,r){try{let n=Pt(t,"auteur","execution.json");if(je(n))return!0;for(let i of e)if(!(!i||!je(i)))return Gr(Pt(t,"auteur"),{recursive:!0}),Yr(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:e.find(i=>i&&je(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as Wr}from"fs";import{join as Jr}from"path";function Ne(t){let e=[],r=!0,n=o=>{if(o===null||typeof o!="object")return;let a=o;if(Array.isArray(a.operations))for(let s of a.operations){let c=s?.operation_id;typeof c=="string"&&c&&e.push(c)}if(Array.isArray(a.children)){a.content_type!=="generative_block"&&(r=!1);for(let s of a.children)n(s)}if(Array.isArray(a.branches)){r=!1;for(let s of a.branches){let c=s?.children;if(Array.isArray(c))for(let d of c)n(d)}}},i=t?.instructions;if(Array.isArray(i))for(let o of i)n(o);return{ids:e,linear:r}}function Xr(t){return Ne(t).ids}function Te(t,e){let r=new Set(e.map(s=>s.action_id).filter(Boolean)),n=-1;for(let s of r){let c=t.indexOf(s);c>n&&(n=c)}let i=e.reduce((s,c)=>Math.max(s,c.ordinal),0),o=new Set,a=[];for(let s of t.slice(n+1))r.has(s)||o.has(s)||(o.add(s),a.push({id:s,ordinal:++i,status:"skipped",action_id:s}));return a}function Ct(t,e){let r=new Set(e),n=t.filter(o=>o.action_id);if(n.some(o=>r.has(o.action_id))||n.length>e.length)return null;let i=0;return t.map(o=>o.action_id?{...o,action_id:e[i++]}:o)}function Zr(t,e){if(t.length>e.length)return!1;for(let r=0;r<t.length;r++)if(e[r]!==t[r].action_id)return!1;return!0}function Qr(t,e,r,n=!0){if(e.length===0)return{steps:t,tail:[]};let i=(r&&n?Ct(t,e):null)??t,o=i.filter(s=>s.action_id),a=new Set(e);return o.length>0&&o.every(s=>a.has(s.action_id))?{steps:i,tail:Te(e,i)}:o.length>0&&!Zr(o,e)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:Te(e,i)}}function $t(t){try{let e=Wr(Jr(t,"auteur","execution.json"),"utf8");return Ne(JSON.parse(e))}catch{return{ids:[],linear:!0}}}function qr(t){return $t(t).ids}export{$ as a,re as b,ne as c,ie as d,oe as e,se as f,ae as g,ce as h,de as i,Ft as j,ue as k,le as l,Lt as m,jt as n,pe as o,ge as p,ve as q,he as r,we as s,ye as t,Tt as u,Nt as v,_e as w,Vt as x,xe as y,ke as z,be as A,st as B,Ie as C,Ee as D,dt as E,Wt as F,T as G,er as H,_t as I,xt as J,kt as K,xr as L,kr as M,br as N,Ir as O,bt as P,De as Q,V as R,Oe as S,Ae as T,jr as U,Fe as V,Hr as W,Kr as X,Ne as Y,Xr as Z,Te as _,Ct as $,Qr as aa,$t as ba,qr as ca};
|
package/dist/chunk-V3UE6RJP.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{extname as o}from"path";var s={kind:"jira",media_type:"application/x-kane-jira-envelope",extensions:[],cite:"verbatim",maxBytes:2e6},n=[{kind:"text",media_type:"text/plain",extensions:[".txt"],cite:"verbatim",maxBytes:2e6},{kind:"markdown",media_type:"text/markdown",extensions:[".md",".markdown"],cite:"verbatim",maxBytes:2e6},{kind:"image",media_type:"image/png",extensions:[".png"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/jpeg",extensions:[".jpg",".jpeg"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/webp",extensions:[".webp"],cite:"anchor-only",maxBytes:5e6},{kind:"text",media_type:"application/json",extensions:[".json"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/yaml",extensions:[".yaml",".yml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/toml",extensions:[".toml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/xml",extensions:[".xml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"text/plain",extensions:[".log"],cite:"verbatim",maxBytes:2e6},{kind:"pdf",media_type:"application/pdf",extensions:[".pdf"],cite:"verbatim",maxBytes:25e6,sniff:e=>e.subarray(0,5).toString("latin1")==="%PDF-"},{kind:"docx",media_type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",extensions:[".docx"],cite:"verbatim",maxBytes:25e6,sniff:e=>e.length>=4&&e[0]===80&&e[1]===75&&e[2]===3&&e[3]===4,sniffFail:e=>e.length>=8&&e.subarray(0,8).equals(d)?"DOCX_ENCRYPTED_OR_LEGACY: password-protected Office file (or a legacy .doc renamed .docx) \u2014 remove the password / save as .docx and re-ingest":void 0},s],d=Buffer.from([208,207,17,224,161,177,26,225]),x={pdf:"pdf",docx:"docx",jira:"jira"},r=new Set(Object.keys(x));function p(e){let a=o(e).toLowerCase(),i=n.find(t=>t.extensions.includes(a));return i?{ok:!0,media:i}:{ok:!1,code:"UNSUPPORTED_MEDIA",allowlist:n.flatMap(t=>t.extensions)}}export{s as a,x as b,r as c,p as d};
|
package/dist/chunk-VJFFMOUA.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as P}from"./chunk-YCCUBQY4.js";import{y as a}from"./chunk-B4LLKQTK.js";import{a as S}from"./chunk-HCBYKLMW.js";import{a as M,b as n,i as $,k as B}from"./chunk-C44QQJR4.js";import{a as N}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var o=b(S(),1);function Q(m){let e=m.findIndex(c=>c.free);return e>=0?e:null}var _=60,I=100;function X({headline:m,ask:e=!1,rows:c,sel:r,focused:T,legend:u,freeText:l=null,freeTextNote:x,sublines:i=[]}){let{stdout:t}=B(),f=t?.columns??80,A=f<_,s=Math.min(f-1,I),g=d=>T&&r===d?(0,o.jsx)(n,{color:a.assuranceAccent,children:"\u276F"}):" ",p=e?`? ${m}`:m,w=Math.max(4,s-3),h=i.map((d,v)=>(0,o.jsx)(n,{color:a.dim,children:` ${d.length>w?`${d.slice(0,w-1)}\u2026`:d}`},`sub-${v}`)),C=0,E=c.map((d,v)=>d.free?l?(0,o.jsxs)(M,{flexDirection:"column",children:[(0,o.jsxs)(M,{children:[(0,o.jsxs)(n,{children:[(0,o.jsx)(n,{color:a.assuranceAccent,children:"\u276F"})," ",(0,o.jsx)(n,{color:a.dim,children:"\u270E "})]}),(0,o.jsx)(P,{value:l.value,onChange:l.onChange,onSubmit:l.onSubmit,onCancel:l.onCancel,placeholder:d.label})]}),x?(0,o.jsx)(n,{color:a.muted,children:` ${x}`}):null]},d.key):(0,o.jsxs)(n,{children:[g(v)," ",(0,o.jsx)(n,{color:a.dim,children:`\u270E ${d.label}`})]},d.key):(C+=1,(0,o.jsxs)(n,{bold:T&&r===v,children:[g(v),` ${C}. ${d.label}`,d.detail?(0,o.jsx)(n,{color:a.dim,bold:!1,children:` \u2014 ${d.detail}`}):null]},d.key)));if(A)return(0,o.jsxs)(M,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsx)(n,{bold:!0,color:a.assuranceAccent,children:p}),h,E,(0,o.jsx)(n,{color:a.muted,children:u})]});let L=Math.max(2,s-(3+p.length+1)),F=Math.max(2,s-(3+u.length+1));return(0,o.jsxs)(M,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsxs)(n,{color:a.assuranceAccent,children:["\u2500\u2500 ",(0,o.jsx)(n,{bold:!0,children:p}),` ${"\u2500".repeat(L)}`]}),h,(0,o.jsx)(n,{children:" "}),E,(0,o.jsx)(n,{children:" "}),(0,o.jsxs)(n,{color:a.assuranceAccent,children:["\u2500\u2500 ",(0,o.jsx)(n,{color:a.muted,children:u}),` ${"\u2500".repeat(F)}`]})]})}var R=b(S(),1),K="ctrl+t thinking \xB7 ctrl+c exit";function D(m,e){if(m.length<=e)return m;if(e<=1)return"\u2026";let c=Math.ceil((e-1)/2),r=Math.floor((e-1)/2);return`${m.slice(0,c)}\u2026${r>0?m.slice(-r):""}`}function J({verb:m,subject:e,pendingCount:c,creditsTotal:r,state:T,hints:u=K}){let{stdout:l}=B(),x=l?.columns??80,i=[];i.push(m),T&&i.push(T),r!==void 0&&i.push(`${r.toFixed(1)} credits`);let t=c?`[${c} pending]`:null,f=" \xB7 ",s=[...i,...t?[t]:[]].join(f).length,g,p=[...i,...e?[e]:[],...t?[t]:[],u].join(f);if(p.length<=x)g=p;else{let w=x-s-(e?f.length:0)-f.length-u.length;if(e&&w>=8)g=[...i,D(e,w),...t?[t]:[],u].join(f);else{let h=x-s-(e?f.length:0);g=[...i,...e&&h>=4?[D(e,h)]:[],...t?[t]:[]].join(f)}}if(T){let w=` \xB7 ${T}`,h=g.indexOf(w);if(h>=0)return(0,R.jsxs)(n,{color:a.dim,children:[g.slice(0,h+3),(0,R.jsx)(n,{color:a.assuranceAccent,children:T}),g.slice(h+w.length)]})}return(0,R.jsx)(n,{color:a.dim,children:g})}var O=b(N(),1);function Z({onToggleThinking:m,onCtrlC:e,explorer:c,panel:r}){let u=(0,O.useRef)(null),l=(0,O.useRef)(""),x=()=>{u.current&&clearTimeout(u.current),u.current=null,l.current=""};return(0,O.useEffect)(()=>x,[]),$((i,t)=>{if(t.ctrl&&i==="t"){m();return}if(t.ctrl&&i==="c"){e();return}if(!t.ctrl&&i.includes("")){e();return}if(!t.ctrl&&i.includes("")){m();return}if(c&&c.isOpen()){let f=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{x(),c.onBack()},150)};if(u.current){if(t.upArrow||t.downArrow||t.return){x(),t.return?c.onEnter():c.onMove(t.upArrow?-1:1);return}if(l.current+=i,l.current==="["){f();return}let A=l.current;x();let s=/^\[([ABCD])/.exec(A);if(s){(s[1]==="A"||s[1]==="B")&&c.onMove(s[1]==="A"?-1:1);return}c.onBack();return}if(t.upArrow){c.onMove(-1);return}if(t.downArrow){c.onMove(1);return}if(t.return){c.onEnter();return}if(t.escape){l.current="",f();return}return}if(r&&r.isFocused()){let f=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{x(),r.onBack()},150)};if(u.current){if(t.upArrow||t.downArrow||t.return||t.leftArrow||t.rightArrow){x(),t.return?r.onSelect():t.leftArrow?r.onLeft?.():t.rightArrow?r.onRight?.():r.onMove(t.upArrow?-1:1);return}if(l.current+=i,l.current==="["){f();return}let A=l.current;x();let s=/^\[([ABCD])/.exec(A);if(s){s[1]==="A"||s[1]==="B"?r.onMove(s[1]==="A"?-1:1):s[1]==="C"?r.onRight?.():r.onLeft?.();return}r.onBack();return}if(t.upArrow){r.onMove(-1);return}if(t.downArrow){r.onMove(1);return}if(t.leftArrow){r.onLeft?.();return}if(t.rightArrow){r.onRight?.();return}if(t.return){r.onSelect();return}if(t.escape){l.current="",f();return}if(/^[1-9]$/.test(i)){r.onDigit(Number(i));return}if(t.tab){r.onTab?.();return}if(i===" "&&r.isMulti()){r.onSpace();return}if(i&&!t.ctrl&&!t.meta){r.onType(i);return}return}}),null}export{Q as a,X as b,J as c,Z as d};
|
package/dist/chunk-VOHQA2SP.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
function S(e,n){let{width:t,height:r,channels:a}=n;if(e.length!==t*r*a)throw new Error(`appearanceSignature: buffer ${e.length} bytes does not match ${t}x${r}x${a}`);let f=9,h=8,x=new Array(f*h);for(let o=0;o<h;o++){let l=Math.floor(o*r/h),d=Math.min(r,Math.max(l+1,Math.floor((o+1)*r/h)));for(let c=0;c<f;c++){let y=Math.floor(c*t/f),A=Math.min(t,Math.max(y+1,Math.floor((c+1)*t/f))),b=0,p=0;for(let u=l;u<d;u++)for(let m=y;m<A;m++){let s=(u*t+m)*a;b+=a===1?e[s]:Math.floor((e[s]*299+e[s+1]*587+e[s+2]*114)/1e3),p+=1}x[o*f+c]=Math.floor(b/p)}}let M="",i=0,g=0;for(let o=0;o<h;o++)for(let l=0;l<f-1;l++)i=i<<1|(x[o*f+l+1]>x[o*f+l]?1:0),g+=1,g===4&&(M+=i.toString(16),i=0,g=0);return M}var $=(()=>{let e=new Uint32Array(256);for(let n=0;n<256;n++){let t=n;for(let r=0;r<8;r++)t=t&1?3988292384^t>>>1:t>>>1;e[n]=t>>>0}return e})();function C(e){let n=4294967295;for(let t=0;t<e.length;t++)n=$[(n^e[t])&255]^n>>>8;return(n^4294967295)>>>0}export{S as a,C as b};
|
package/dist/chunk-WTXHOWUP.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as N}from"./chunk-FHKDTM5L.js";import{a as b,b as O,c as k}from"./chunk-2XMJ6YAE.js";import{a as L,b as M}from"./chunk-BKM2LWU2.js";import{a as y,b as R,c as T,d as m,e as I,f as w,g as r}from"./chunk-Y5RNCJAN.js";import{b as x,d as A}from"./chunk-5EOX4MEY.js";import{a as E}from"./chunk-RZ4F3BHX.js";import{a as g,j as v}from"./chunk-B4LLKQTK.js";import{platform as X,arch as $}from"os";import D from"fs";import V from"fs";import q from"path";var Y=new Set(["org_id","user_id","plan"]);function C(t){let e={machine_id:k(),env:t};try{let n=JSON.parse(V.readFileSync(A(t),"utf8"));for(let[i,s]of Object.entries(n))Y.has(i)&&typeof s=="string"&&s.length>0&&s.length<=128&&(e[i]=s)}catch{}return e}import P from"fs";import B from"path";var F=1e3,d=0,a=class t{ids;logger;opts;ended=!1;constructor(e){this.ids=e.envelope,this.logger=e.logger,this.opts=e}get enabled(){return this.logger!==null}event(e,n={}){if(!this.logger)return;let i=m(this.ids,e,n);this.logger.log(y[e],e,e,U(i))}error(e,n={}){this.logger&&(this.logger.escalate(d),this.event("ASR_ERROR",{...n,error_code:e}))}child(e,n){return new t({...this.opts,envelope:{...this.ids,operation_id:n,parent_operation_id:this.ids.operation_id,verb:"design"}})}async lateBindContext(e){if(!(!this.logger||this.ids.context_instance_id))try{let{ensureStoreIds:n}=await import("./store-id-EOSGEKVK.js"),{ids:i,cloned:s}=n(e);this.ids.context_lineage_id=i.context_lineage_id,this.ids.context_instance_id=i.context_instance_id,s&&this.event("ASR_CONTEXT_CLONED")}catch{}}agentSession(e){this.ids.agent_session_id=e}spawnEnv(){if(!this.opts.telemetryEnabled)return{};let e={TESTMUAI_USER_SESSION_ID:this.ids.session_id,TESTMUAI_OPERATION_ID:this.ids.operation_id,TESTMUAI_CLIENT_VERSION:this.opts.clientVersion,TESTMUAI_TELEMETRY_PROXY_URL:this.opts.proxyUrl};return this.ids.context_instance_id&&(e.TESTMUAI_CONTEXT_INSTANCE_ID=this.ids.context_instance_id),e}traceTee(){return e=>{if(!this.logger)return;let n=typeof e.kind=="string"?e.kind.slice(0,64):"trace",i={...U(m(this.ids,"ASR_CMD_START",{})),trace_kind:n};typeof e.code=="string"&&(i.trace_code=e.code.slice(0,64)),delete i.event,this.logger.logStep(d,`trace_${n}`,n,i)}}wireTrace(e,n,i){if(!this.logger)return;i&&this.agentSession(i);let s=n&&typeof n=="object"?n:{};switch(e){case"spawn":this.event("ASR_AGENT_SPAWN",{tier:s.tier});break;case"session_paused":this.event("ASR_SESSION_PAUSED",s);break;case"commit":this.event("ASR_COMMIT",s);break;default:this.traceTee()({kind:e,code:typeof s.code=="string"?s.code:void 0})}}banner(){return`session: ${this.ids.session_id}`}supportFooter(){return`if this keeps failing, share this id with support: ${this.ids.session_id}`}async end(e){if(!this.ended){if(this.ended=!0,this.logger)if(e.exit_code===0?this.logger.discardSteps(d):this.logger.escalate(d),this.event("ASR_CMD_END",e),this.opts.longSession)await this.logger.shutdown();else{let n=await this.logger.flushOnce(F);(n==="failed"||n==="timeout")&&I(this.logger.drainBuffer())}this.logger&&this.writeManifestLine(e.exit_code),r(null)}}writeManifestLine(e){try{let n=x(this.ids.context_instance_id??null);P.mkdirSync(B.dirname(n),{recursive:!0});let i={ts:new Date().toISOString(),session_id:this.ids.session_id,operation_id:this.ids.operation_id,agent_session_id:this.ids.agent_session_id,verb:this.ids.verb,mode:this.ids.mode,exit_code:e};P.appendFileSync(n,JSON.stringify(i)+`
|
|
3
|
-
`,{flag:"a",mode:384})}catch{}}};function U(t){let e={event:t.event,session_id:t.session_id,operation_id:t.operation_id,verb:t.verb,mode:t.mode,component:t.component,seq:t.seq,context_lineage_id:t.context_lineage_id,context_instance_id:t.context_instance_id};t.parent_operation_id&&(e.parent_operation_id=t.parent_operation_id),t.agent_session_id&&(e.agent_session_id=t.agent_session_id);for(let[n,i]of Object.entries(t.context))e[n]=i;return e}var u=process.env.KANE_TELEMETRY_URL||v;function ve(){return process.env.TESTMUAI_BASE_URL?"custom":process.env.TESTMUAI_ENV==="stage"?"stage":"prod"}function Ee(t){let e=process.env.KANE_TELEMETRY!=="0"&&(!process.env.VITEST||process.env.KANE_TELEMETRY==="1"),n=t.env??"prod",i=null;if(t.resumeSid&&t.contextRoot)try{let o=N(t.contextRoot,t.resumeSid);o?.user_session_id&&(i=o.user_session_id)}catch{}if(!i&&t.applyPlanPath)try{let o=JSON.parse(D.readFileSync(t.applyPlanPath,"utf8"));o.telemetry?.user_session_id&&(i=o.telemetry.user_session_id)}catch{}let s=i!==null;i||(i=R());let l=null,c=null,f=!1;if(t.contextRoot&&D.existsSync(t.contextRoot))if(t.write&&e){let o=M(t.contextRoot);l=o.ids.context_lineage_id,c=o.ids.context_instance_id,f=o.cloned}else{let o=L(t.contextRoot);l=o?.context_lineage_id??null,c=o?.context_instance_id??null}let h={session_id:i,operation_id:T(),context_lineage_id:l,context_instance_id:c,verb:t.verb,mode:t.mode,component:"kane-cli"},_=null;if(e){let o=C(n),S={org_id:o.org_id??"",user_id:o.user_id??"",machine_id:o.machine_id,email:null,email_domain:"",user_type:"unknown",env:o.env,plan:o.plan??"unknown"},j=t.mode==="interactive"||t.mode==="cli"?"cli":"agent";_=new b({proxyUrl:u,sessionId:i,identity:S,device:{cli_version:g,platform:X(),arch:$(),host_agent:O(),invocation_mode:j},getToken:async()=>null}),t.longSession&&_.start()}let p=new a({envelope:h,logger:_,longSession:!!t.longSession,proxyUrl:u,clientVersion:`kane-cli/${g}`,telemetryEnabled:e});return e&&(r(h),p.event("ASR_CMD_START",{resumed:s,applied_plan:!!t.applyPlanPath}),f&&p.event("ASR_CONTEXT_CLONED"),w(async o=>{try{return(await E(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)})).ok}catch{return!1}}).catch(()=>{})),p}export{ve as a,Ee as b};
|