@unbrained/pm-cli 2026.7.1 → 2026.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/CHANGELOG.md +6 -0
- package/dist/cli/commander-usage.d.ts +2 -0
- package/dist/cli/commander-usage.js +58 -47
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/aggregate.js +102 -79
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/calendar.js +278 -243
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.js +89 -68
- package/dist/cli/commands/close-many.js.map +1 -1
- package/dist/cli/commands/close.js +157 -129
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +50 -42
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +443 -879
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.js +365 -287
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.js +352 -238
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +46 -39
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/dedupe-merge.js +88 -69
- package/dist/cli/commands/dedupe-merge.js.map +1 -1
- package/dist/cli/commands/get.js +114 -81
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.d.ts +17 -0
- package/dist/cli/commands/health.js +446 -307
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-compact.js +209 -140
- package/dist/cli/commands/history-compact.js.map +1 -1
- package/dist/cli/commands/history-redact.js +162 -119
- package/dist/cli/commands/history-redact.js.map +1 -1
- package/dist/cli/commands/history-repair.js +120 -85
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/init.d.ts +8 -2
- package/dist/cli/commands/init.js +263 -162
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.js +152 -102
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/next.js +49 -32
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/plan.js +373 -298
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/recurrence-parsers.js +43 -25
- package/dist/cli/commands/recurrence-parsers.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +21 -5
- package/dist/cli/commands/reindex.js +345 -205
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +8 -7
- package/dist/cli/commands/restore.js +105 -69
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.js +33 -30
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +10 -2
- package/dist/cli/commands/search.js +503 -470
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/telemetry.js +98 -87
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/test-all.js +237 -168
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -5
- package/dist/cli/commands/test.js +424 -344
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +57 -42
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +1 -1
- package/dist/cli/commands/update.js +738 -671
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +18 -1
- package/dist/cli/commands/validate.js +466 -343
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +399 -357
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/main.d.ts +47 -0
- package/dist/cli/main.js +428 -341
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.js +22 -45
- package/dist/cli/migration-gates.js.map +1 -1
- package/dist/cli/register-list-query.js +94 -105
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +400 -416
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +86 -66
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +120 -101
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-CUC4JY3U.js} +9 -9
- package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-DKUTRY6R.js} +108 -84
- package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-SW5PNGCS.js} +107 -83
- package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-SW5PNGCS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-H32VOR2Y.js} +6 -6
- package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-UBM632FK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-2227673O.js} +158 -114
- package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-2ASNV4DH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-2CHRYUXL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-2KWL5NPW.js} +42 -27
- package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-36UGKF4O.js} +21 -29
- package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-3AZUFQK6.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-3LCUASYG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-3Q2HBMTI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-4NUOWFBT.js} +109 -72
- package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-55XRYWEG.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-5GVTFFTC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-5PGBHRY3.js} +41 -26
- package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-66Z3X7ZG.js} +261 -161
- package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-6ITZLD4T.js} +712 -612
- package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-6YCYF2AI.js} +262 -162
- package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-6ZMBJRDJ.js} +492 -403
- package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-7MYWF4ZX.js} +110 -73
- package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-7NSPKJUS.js} +356 -285
- package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-7TH5NMVB.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-7W4H4K26.js} +713 -613
- package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-A6VOGKBA.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AIAIXG7I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-AJEBCRIY.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-BTX5MIQF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-BVZZN2LH.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-CYBDUHNO.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-CZPVDLD2.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-EMPGXBUF.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-EUKTMRN3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-FFOQHGNH.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-GFMSLORL.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-GRRG3MCT.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-H4GRLYJS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-HQTPRV4D.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-I66WE2HE.js} +354 -283
- package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-IEEJQCZ4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-IG5JYZGU.js} +390 -312
- package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-IG5JYZGU.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-JMK5GCK2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-JXAUVO6X.js} +258 -169
- package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js.map → chunk-JXAUVO6X.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-K2VYLVX4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KCO2EAN5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-KIYCOJ63.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-KLXF7NCC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-KN3URLKS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-LRKMWUUV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-LTRAF2D7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-MNBPX5JS.js} +55 -36
- package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-MRD4T5LF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-N2JSWVWG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-N3QCJS4M.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-NRZS637N.js} +258 -169
- package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-OTUJZKGI.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-Q6K2OACU.js} +153 -90
- package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-Q6NXOHS6.js} +391 -313
- package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-QH3FSKRJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-RM37OPYK.js} +56 -37
- package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-S62UANU7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-SPM2XLWI.js} +37 -28
- package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-SYNKD3ZG.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-SYVUU7EK.js} +493 -404
- package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-TPOFWBMY.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-TTHCEV5Q.js} +92 -77
- package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-U2BEEM2X.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-UGLU6Q2I.js} +91 -76
- package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UT73HUPC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-UTSH5GWX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-UWKEJMZU.js} +157 -113
- package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-W47SML5B.js} +152 -89
- package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WJAMWAHZ.js} +157 -118
- package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-XCHUVHKU.js} +626 -484
- package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-XEWQKDYZ.js} +626 -484
- package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-XTHQWXVC.js} +158 -119
- package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-XWGEMNBR.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-Y4NRKBFW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-YLZZ6T54.js} +38 -29
- package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-YPKFV2JR.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-ZNHEYCDD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-ZNT7KEWE.js} +2 -2
- package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-SENTPZBN.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-Z7MEQCBT.js} +8 -8
- package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-424MX4CU.js} +7 -7
- package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
- package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-2IV4J2TR.js} +102 -81
- package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
- package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-SWY34BII.js} +101 -80
- package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-4FGNTSNV.js} +8 -8
- package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-7YS5MY5X.js} +8 -8
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-LHVKJSPJ.js} +12 -12
- package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-ZQY54JNS.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-CP2EZJC7.js} +320 -199
- package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-FIZLMP7O.js} +321 -200
- package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-GYNQQPW2.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-TLW7JTQT.js} +5 -5
- package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-VSKYSOCD.js} +12 -12
- package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
- package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-4W5JYCEG.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-ANTOTI2I.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-HPPE6MJN.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-ZQZN54EZ.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-RPOVFMP3.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-XJNYBJGE.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-DM6JBZTS.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-RFBI5FGS.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-B3YY4WY5.js} +11 -11
- package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-TTSEFQTS.js} +11 -11
- package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-5D65CHGE.js} +7 -7
- package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-GPIG77EN.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-C3PEJV2C.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-ZHN7WIGX.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-D4JQ6OWN.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-VZIXDL32.js} +3 -3
- package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-GIBRUUOP.js} +121 -81
- package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-IOVAN6RU.js} +120 -80
- package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-L2U3AFKV.js} +437 -265
- package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-MM7AWXYF.js} +436 -264
- package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
- package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
- package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-IL7XCEX2.js} +8 -8
- package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-HALOTOU7.js} +214 -135
- package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-MV25P7DM.js} +213 -134
- package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
- package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-VYCWQFK7.js} +9 -9
- package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-44MODPQF.js} +124 -84
- package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-CPNAOCNF.js} +123 -83
- package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
- package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-F27NHENZ.js} +12 -12
- package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-HJVDQIGY.js} +8 -8
- package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-XSFSUUWK.js} +8 -8
- package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-HPMEKCAA.js} +8 -8
- package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-VMPWTURB.js} +8 -8
- package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-ETXF2ZCN.js} +59 -37
- package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
- package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-QM6YJIIS.js} +60 -38
- package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-GDZIKGR6.js} +8 -8
- package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-WDDBPC4D.js} +8 -8
- package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-BGDR73Z6.js} +373 -279
- package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-C5IMM335.js} +372 -278
- package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-CCOKZ2IQ.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-HUCENIEQ.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-7LV46VAU.js → register-list-query-ROSNIL52.js} +80 -83
- package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-SNG5PGA4.js → register-list-query-XN4ZRHSV.js} +79 -82
- package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-CFSB2MS3.js} +403 -382
- package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-KRLAHEL2.js} +402 -381
- package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-4PASGJDB.js} +112 -93
- package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-C6OWLDSH.js → register-operations-MBN4KGUM.js} +113 -94
- package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-VIAWYFP5.js} +129 -104
- package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-ZCGKHDKL.js} +128 -103
- package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
- package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-4CBWUMCX.js} +9 -9
- package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-TDGK6N3I.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-UE5KKAUX.js} +7 -7
- package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-FP7MEU4S.js} +10 -10
- package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-K4CFLQ5S.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-NJJCALEZ.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-XT6QRKQY.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-5SQ5UDXC.js} +84 -70
- package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-HVXFZA2U.js} +85 -71
- package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-UFSJ5YIO.js} +15 -15
- package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-YCDAUBWF.js} +15 -15
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
- package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-FK5E75AA.js} +185 -147
- package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-H4TGWGRN.js} +184 -146
- package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
- package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
- package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-Y5WQVT5O.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-6YAYYRLE.js} +82 -67
- package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-6YAYYRLE.js.map} +2 -2
- package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-JTKKSA7Y.js} +83 -68
- package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-JTKKSA7Y.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-DTAHZ236.js} +11 -11
- package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-JUDU7YL4.js} +11 -11
- package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-732RWS5W.js} +440 -320
- package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
- package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-W7H5TEDC.js} +441 -321
- package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
- package/dist/cli-bundle/main.js +945 -812
- package/dist/cli-bundle/main.js.map +3 -3
- package/dist/core/config/nested-settings.js +89 -67
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/governance/metadata-coverage.js +20 -28
- package/dist/core/governance/metadata-coverage.js.map +1 -1
- package/dist/core/history/drift-scan.js +93 -81
- package/dist/core/history/drift-scan.js.map +1 -1
- package/dist/core/item/item-type-definition.js +14 -14
- package/dist/core/item/item-type-definition.js.map +1 -1
- package/dist/core/item/type-registry.js +87 -82
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/output/mutation-projection.js +42 -26
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +34 -28
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +64 -37
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.js +32 -17
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.js +31 -28
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.js +54 -43
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +239 -153
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.js +33 -26
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings.js +247 -203
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/test/background-runs.js +189 -160
- package/dist/core/test/background-runs.js.map +1 -1
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
- package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
- package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4DSGXSBL.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UYUYDGIB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
- package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
- package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
- package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
- package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
- package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
- package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
- package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
- package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
- package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
- package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
- package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
- package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
- package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
- package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
- package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
- package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
- package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
- package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
- package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
- package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
- package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
- package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
- package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
- package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
- package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
- package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
- package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
- package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-CUC4JY3U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-WEIEMM73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-H32VOR2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-UBM632FK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-2ASNV4DH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-2CHRYUXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-3AZUFQK6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-3LCUASYG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-3Q2HBMTI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-55XRYWEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js.map → chunk-5GVTFFTC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-A6VOGKBA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js.map → chunk-AIAIXG7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js.map → chunk-AJEBCRIY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-BTX5MIQF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-BVZZN2LH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-CYBDUHNO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-CZPVDLD2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-EUKTMRN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-FFOQHGNH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js.map → chunk-GFMSLORL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-GRRG3MCT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-H4GRLYJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-HQTPRV4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-IEEJQCZ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-JMK5GCK2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js.map → chunk-K2VYLVX4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KCO2EAN5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-KIYCOJ63.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-KLXF7NCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-KN3URLKS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-LRKMWUUV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-LTRAF2D7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-MRD4T5LF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-N2JSWVWG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-N3QCJS4M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-OTUJZKGI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-QH3FSKRJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-S62UANU7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js.map → chunk-SYNKD3ZG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-U2BEEM2X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UT73HUPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-UTSH5GWX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js.map → chunk-XWGEMNBR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-Y4NRKBFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js.map → chunk-YPKFV2JR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-ZNHEYCDD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-SENTPZBN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-Z7MEQCBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-424MX4CU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-YCWQQPDS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-4FGNTSNV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-7YS5MY5X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-LHVKJSPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-ZQY54JNS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-GYNQQPW2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-TLW7JTQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-VSKYSOCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-XTMAPS7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-4W5JYCEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-ANTOTI2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-HPPE6MJN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-ZQZN54EZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-RPOVFMP3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-XJNYBJGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-DM6JBZTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-RFBI5FGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-B3YY4WY5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-TTSEFQTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-5D65CHGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-GPIG77EN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-C3PEJV2C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-ZHN7WIGX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-D4JQ6OWN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-VZIXDL32.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-DD7L7BNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-IL7XCEX2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-IX4YEWMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-VYCWQFK7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-F27NHENZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-HHVQQP6C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-HJVDQIGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-XSFSUUWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-HPMEKCAA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-VMPWTURB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-GDZIKGR6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-WDDBPC4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-QLER5ENE.js.map → profile-CCOKZ2IQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-4OMM32CD.js.map → profile-HUCENIEQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-4CBWUMCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-5UEAGG3W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-TDGK6N3I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-UE5KKAUX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-FP7MEU4S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-K4CFLQ5S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-NJJCALEZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-XT6QRKQY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-UFSJ5YIO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-YCDAUBWF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-MTCFES6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-Y5WQVT5O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-DTAHZ236.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-JUDU7YL4.js.map} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Implements the pm test command surface and its agent-facing runtime behavior.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
7
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="caa941ed-c848-506c-9a3c-3d4959be0246")}catch(e){}}();
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
9
9
|
import { cp, mkdir, mkdtemp, readdir, rm } from "node:fs/promises";
|
|
10
10
|
import { tmpdir } from "node:os";
|
|
@@ -1206,303 +1206,283 @@ function detectEmptyLinkedTestRun(stdout, stderr) {
|
|
|
1206
1206
|
}
|
|
1207
1207
|
return null;
|
|
1208
1208
|
}
|
|
1209
|
-
|
|
1209
|
+
function createLinkedTestSandboxLayout(sandboxRoot) {
|
|
1210
|
+
return {
|
|
1211
|
+
root: sandboxRoot,
|
|
1212
|
+
schemaProjectPmPath: path.join(sandboxRoot, "schema", "project", ".agents", "pm"),
|
|
1213
|
+
schemaGlobalPmPath: path.join(sandboxRoot, "schema", "global"),
|
|
1214
|
+
trackerProjectPmPath: path.join(sandboxRoot, "tracker", "project", ".agents", "pm"),
|
|
1215
|
+
trackerGlobalPmPath: path.join(sandboxRoot, "tracker", "global"),
|
|
1216
|
+
};
|
|
1217
|
+
}
|
|
1218
|
+
async function initializeLinkedTestSandboxes(layout) {
|
|
1219
|
+
await runInit(undefined, { path: layout.schemaProjectPmPath });
|
|
1220
|
+
await runInit(undefined, { path: layout.schemaGlobalPmPath });
|
|
1221
|
+
await runInit(undefined, { path: layout.trackerProjectPmPath });
|
|
1222
|
+
await runInit(undefined, { path: layout.trackerGlobalPmPath });
|
|
1223
|
+
}
|
|
1224
|
+
async function seedLinkedTestSandboxesFromSource(layout, sourceRoots) {
|
|
1225
|
+
if (!sourceRoots) {
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1228
|
+
await seedLinkedTestSandbox(layout.schemaProjectPmPath, layout.schemaGlobalPmPath, sourceRoots);
|
|
1229
|
+
await seedLinkedTestSandbox(layout.trackerProjectPmPath, layout.trackerGlobalPmPath, sourceRoots);
|
|
1230
|
+
await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, layout.trackerProjectPmPath);
|
|
1231
|
+
await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, layout.trackerGlobalPmPath);
|
|
1232
|
+
}
|
|
1233
|
+
async function countLinkedTestSandboxItems(layout, sourceRoots) {
|
|
1234
|
+
return {
|
|
1235
|
+
sourceProjectItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.projectPmRoot) : 0,
|
|
1236
|
+
sourceGlobalItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.globalPmRoot) : 0,
|
|
1237
|
+
schemaProjectItemCount: await countLinkedTestItemFiles(layout.schemaProjectPmPath),
|
|
1238
|
+
schemaGlobalItemCount: await countLinkedTestItemFiles(layout.schemaGlobalPmPath),
|
|
1239
|
+
trackerProjectItemCount: await countLinkedTestItemFiles(layout.trackerProjectPmPath),
|
|
1240
|
+
trackerGlobalItemCount: await countLinkedTestItemFiles(layout.trackerGlobalPmPath),
|
|
1241
|
+
};
|
|
1242
|
+
}
|
|
1243
|
+
function buildLinkedTestExecutionContext(params) {
|
|
1244
|
+
const trackerMode = params.effectivePmContextMode === "tracker";
|
|
1245
|
+
const selectedSandboxProjectPmPath = trackerMode ? params.layout.trackerProjectPmPath : params.layout.schemaProjectPmPath;
|
|
1246
|
+
const selectedSandboxGlobalPmPath = trackerMode ? params.layout.trackerGlobalPmPath : params.layout.schemaGlobalPmPath;
|
|
1247
|
+
const selectedSandboxProjectItemCount = trackerMode ? params.counts.trackerProjectItemCount : params.counts.schemaProjectItemCount;
|
|
1248
|
+
const selectedSandboxGlobalItemCount = trackerMode ? params.counts.trackerGlobalItemCount : params.counts.schemaGlobalItemCount;
|
|
1249
|
+
return {
|
|
1250
|
+
requested_pm_context_mode: params.requestedPmContextMode,
|
|
1251
|
+
pm_context_mode: params.effectivePmContextMode,
|
|
1252
|
+
auto_pm_context_applied: params.autoPmContextApplied,
|
|
1253
|
+
is_pm_command: params.isPmCommand,
|
|
1254
|
+
is_pm_tracker_read_command: params.isPmTrackerReadCommand,
|
|
1255
|
+
source_project_pm_path: params.sourceRoots?.projectPmRoot ?? "",
|
|
1256
|
+
sandbox_project_pm_path: selectedSandboxProjectPmPath,
|
|
1257
|
+
source_global_pm_path: params.sourceRoots?.globalPmRoot ?? "",
|
|
1258
|
+
sandbox_global_pm_path: selectedSandboxGlobalPmPath,
|
|
1259
|
+
source_project_item_count: params.counts.sourceProjectItemCount,
|
|
1260
|
+
sandbox_project_item_count: selectedSandboxProjectItemCount,
|
|
1261
|
+
source_global_item_count: params.counts.sourceGlobalItemCount,
|
|
1262
|
+
sandbox_global_item_count: selectedSandboxGlobalItemCount,
|
|
1263
|
+
mismatch_detected: params.isPmCommand && params.counts.sourceProjectItemCount !== selectedSandboxProjectItemCount,
|
|
1264
|
+
project_extensions_seeded: Boolean(params.sourceRoots),
|
|
1265
|
+
global_extensions_seeded: Boolean(params.sourceRoots),
|
|
1266
|
+
};
|
|
1267
|
+
}
|
|
1268
|
+
function resolveLinkedTestCommandContext(params) {
|
|
1269
|
+
const linkedOverridePmContextMode = typeof params.linkedTest.pm_context_mode === "string" && params.linkedTest.pm_context_mode.trim().length > 0
|
|
1270
|
+
? parsePmContextMode(params.linkedTest.pm_context_mode)
|
|
1271
|
+
: undefined;
|
|
1272
|
+
const command = typeof params.linkedTest.command === "string" && params.linkedTest.command.length > 0
|
|
1273
|
+
? params.linkedTest.command
|
|
1274
|
+
: undefined;
|
|
1275
|
+
const isPmCommand = command ? commandInvokesPmCli(command) : false;
|
|
1276
|
+
const isPmTrackerReadCommand = isPmCommand && command ? commandInvokesPmTrackerReadCommand(command) : false;
|
|
1277
|
+
const autoPmContextApplied = params.options?.autoPmContext === true && isPmTrackerReadCommand;
|
|
1278
|
+
const requestedPmContextMode = autoPmContextApplied
|
|
1279
|
+
? "auto"
|
|
1280
|
+
: resolveLinkedTestRequestedContextMode(params.linkedTest, params.runLevelPmContextMode, params.options?.overrideLinkedPmContext === true);
|
|
1281
|
+
const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
|
|
1282
|
+
return {
|
|
1283
|
+
linkedOverridePmContextMode,
|
|
1284
|
+
executionContext: buildLinkedTestExecutionContext({
|
|
1285
|
+
layout: params.layout,
|
|
1286
|
+
counts: params.counts,
|
|
1287
|
+
sourceRoots: params.sourceRoots,
|
|
1288
|
+
isPmCommand,
|
|
1289
|
+
isPmTrackerReadCommand,
|
|
1290
|
+
requestedPmContextMode,
|
|
1291
|
+
effectivePmContextMode,
|
|
1292
|
+
autoPmContextApplied,
|
|
1293
|
+
}),
|
|
1294
|
+
};
|
|
1295
|
+
}
|
|
1296
|
+
function buildLinkedTestSkippedResult(linkedTest, executionContext, error) {
|
|
1297
|
+
return {
|
|
1298
|
+
command: linkedTest.command,
|
|
1299
|
+
path: linkedTest.path,
|
|
1300
|
+
status: "skipped",
|
|
1301
|
+
execution_context: executionContext,
|
|
1302
|
+
error,
|
|
1303
|
+
};
|
|
1304
|
+
}
|
|
1305
|
+
function buildLinkedTestAssertionFailureResult(linkedTest, executionContext, error, output) {
|
|
1306
|
+
return {
|
|
1307
|
+
command: linkedTest.command,
|
|
1308
|
+
path: linkedTest.path,
|
|
1309
|
+
status: "failed",
|
|
1310
|
+
exit_code: 1,
|
|
1311
|
+
failure_category: "assertion_failure",
|
|
1312
|
+
execution_context: executionContext,
|
|
1313
|
+
...(output ? { stdout: output.stdout, stderr: output.stderr } : {}),
|
|
1314
|
+
error,
|
|
1315
|
+
};
|
|
1316
|
+
}
|
|
1317
|
+
function resolveLinkedTestPreflightResult(params) {
|
|
1318
|
+
if (!params.linkedTest.command) {
|
|
1319
|
+
return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, "No command configured for this linked test.");
|
|
1320
|
+
}
|
|
1321
|
+
const runtimeSafetySkipReason = getRuntimeSafetySkipReason(params.linkedTest.command);
|
|
1322
|
+
if (runtimeSafetySkipReason) {
|
|
1323
|
+
return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, runtimeSafetySkipReason);
|
|
1324
|
+
}
|
|
1325
|
+
const failOnMismatchByDefault = params.executionContext.pm_context_mode === "schema" &&
|
|
1326
|
+
params.executionContext.is_pm_tracker_read_command &&
|
|
1327
|
+
params.executionContext.mismatch_detected;
|
|
1328
|
+
const failOnMismatchByFlag = params.options?.failOnContextMismatch === true &&
|
|
1329
|
+
params.executionContext.is_pm_command &&
|
|
1330
|
+
params.executionContext.mismatch_detected;
|
|
1331
|
+
if (failOnMismatchByDefault || failOnMismatchByFlag) {
|
|
1332
|
+
const mismatchHint = buildPmContextMismatchHint({
|
|
1333
|
+
executionContext: params.executionContext,
|
|
1334
|
+
runLevelPmContextMode: params.runLevelPmContextMode,
|
|
1335
|
+
linkedOverridePmContextMode: params.linkedOverridePmContextMode,
|
|
1336
|
+
});
|
|
1337
|
+
const mismatchPrefix = params.options?.checkContext === true
|
|
1338
|
+
? "Linked test preflight PM context mismatch detected"
|
|
1339
|
+
: "Linked test PM context mismatch detected";
|
|
1340
|
+
return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `${mismatchPrefix} (source_project_items=${params.executionContext.source_project_item_count}, ` +
|
|
1341
|
+
`sandbox_project_items=${params.executionContext.sandbox_project_item_count}).${mismatchHint}`);
|
|
1342
|
+
}
|
|
1343
|
+
if (params.options?.requireAssertionsForPm === true &&
|
|
1344
|
+
params.executionContext.is_pm_command &&
|
|
1345
|
+
!hasLinkedTestAssertions(params.linkedTest)) {
|
|
1346
|
+
return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, "Linked PM command requires assertions when --require-assertions-for-pm is enabled.");
|
|
1347
|
+
}
|
|
1348
|
+
return null;
|
|
1349
|
+
}
|
|
1350
|
+
function buildLinkedTestExecutionEnv(params) {
|
|
1351
|
+
const effectiveDirectives = resolveEffectiveLinkedTestDirectives(params.runtimeDirectives, params.linkedTest);
|
|
1352
|
+
const executionEnv = { ...process.env };
|
|
1353
|
+
applyEnvDirectiveStage(executionEnv, params.runtimeDirectives);
|
|
1354
|
+
applyEnvDirectiveStage(executionEnv, {
|
|
1355
|
+
env_set: params.linkedTest.env_set ?? {},
|
|
1356
|
+
env_clear: params.linkedTest.env_clear ?? [],
|
|
1357
|
+
});
|
|
1358
|
+
if (effectiveDirectives.shared_host_safe) {
|
|
1359
|
+
applySharedHostSafeDefaults(executionEnv);
|
|
1360
|
+
}
|
|
1361
|
+
executionEnv.FORCE_COLOR = "0";
|
|
1362
|
+
executionEnv.PM_PATH = params.executionContext.sandbox_project_pm_path;
|
|
1363
|
+
executionEnv.PM_GLOBAL_PATH = params.executionContext.sandbox_global_pm_path;
|
|
1364
|
+
return executionEnv;
|
|
1365
|
+
}
|
|
1366
|
+
function buildLinkedTestPassedResult(linkedTest, executionContext, execution) {
|
|
1367
|
+
return {
|
|
1368
|
+
command: linkedTest.command,
|
|
1369
|
+
path: linkedTest.path,
|
|
1370
|
+
status: "passed",
|
|
1371
|
+
exit_code: 0,
|
|
1372
|
+
execution_context: executionContext,
|
|
1373
|
+
stdout: execution.stdout,
|
|
1374
|
+
stderr: execution.stderr,
|
|
1375
|
+
};
|
|
1376
|
+
}
|
|
1377
|
+
function buildLinkedTestEmptyRunResult(params) {
|
|
1378
|
+
return {
|
|
1379
|
+
command: params.linkedTest.command,
|
|
1380
|
+
path: params.linkedTest.path,
|
|
1381
|
+
status: "failed",
|
|
1382
|
+
exit_code: 1,
|
|
1383
|
+
failure_category: "empty_run",
|
|
1384
|
+
execution_context: params.executionContext,
|
|
1385
|
+
stdout: params.execution.stdout,
|
|
1386
|
+
stderr: params.execution.stderr,
|
|
1387
|
+
error: `Linked test reported an empty test run (${params.emptyRunSignal}) while --fail-on-empty-test-run is enabled. ` +
|
|
1388
|
+
"Update test selection or disable --fail-on-empty-test-run for this run.",
|
|
1389
|
+
};
|
|
1390
|
+
}
|
|
1391
|
+
function buildLinkedTestCommandFailureResult(params) {
|
|
1392
|
+
return {
|
|
1393
|
+
command: params.linkedTest.command,
|
|
1394
|
+
path: params.linkedTest.path,
|
|
1395
|
+
status: "failed",
|
|
1396
|
+
exit_code: resolveLinkedTestFailureExitCode(params.execution),
|
|
1397
|
+
failure_category: classifyLinkedTestFailure(params.execution),
|
|
1398
|
+
execution_context: params.executionContext,
|
|
1399
|
+
stdout: params.execution.stdout,
|
|
1400
|
+
stderr: params.execution.stderr,
|
|
1401
|
+
error: formatLinkedTestExecutionError(params.execution, params.timeoutMs),
|
|
1402
|
+
};
|
|
1403
|
+
}
|
|
1404
|
+
function buildLinkedTestPassedExecutionResult(params) {
|
|
1405
|
+
if (params.options?.failOnEmptyTestRun === true) {
|
|
1406
|
+
const emptyRunSignal = detectEmptyLinkedTestRun(params.execution.stdout, params.execution.stderr);
|
|
1407
|
+
if (emptyRunSignal) {
|
|
1408
|
+
return buildLinkedTestEmptyRunResult({ ...params, emptyRunSignal });
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
const assertionFailures = evaluateLinkedTestAssertions(params.linkedTest, params.execution.stdout, params.execution.stderr);
|
|
1412
|
+
if (assertionFailures.length > 0) {
|
|
1413
|
+
return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`, params.execution);
|
|
1414
|
+
}
|
|
1415
|
+
return buildLinkedTestPassedResult(params.linkedTest, params.executionContext, params.execution);
|
|
1416
|
+
}
|
|
1417
|
+
async function runSingleLinkedTest(params) {
|
|
1418
|
+
const command = params.linkedTest.command ?? "";
|
|
1419
|
+
const timeoutMs = (params.linkedTest.timeout_seconds ?? params.defaultTimeoutSeconds ?? 120) * 1000;
|
|
1420
|
+
const execution = await runLinkedTestCommand(command, timeoutMs, buildLinkedTestExecutionEnv(params), {
|
|
1421
|
+
index: params.index + 1,
|
|
1422
|
+
total: params.total,
|
|
1423
|
+
timeoutMs,
|
|
1424
|
+
command,
|
|
1425
|
+
}, params.progressMode);
|
|
1426
|
+
const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
|
|
1427
|
+
return passed
|
|
1428
|
+
? buildLinkedTestPassedExecutionResult({ ...params, execution })
|
|
1429
|
+
: buildLinkedTestCommandFailureResult({ ...params, execution, timeoutMs });
|
|
1430
|
+
}
|
|
1210
1431
|
/**
|
|
1211
1432
|
* Implements run linked tests for the public runtime surface of this module.
|
|
1212
1433
|
*/
|
|
1213
1434
|
export async function runLinkedTests(tests, defaultTimeoutSeconds, options) {
|
|
1214
1435
|
const results = [];
|
|
1215
1436
|
const sandboxRoot = await mkdtemp(path.join(tmpdir(), "pm-linked-test-"));
|
|
1216
|
-
const
|
|
1217
|
-
const schemaSandboxGlobalPath = path.join(sandboxRoot, "schema", "global");
|
|
1218
|
-
const trackerSandboxPmPath = path.join(sandboxRoot, "tracker", "project", ".agents", "pm");
|
|
1219
|
-
const trackerSandboxGlobalPath = path.join(sandboxRoot, "tracker", "global");
|
|
1437
|
+
const layout = createLinkedTestSandboxLayout(sandboxRoot);
|
|
1220
1438
|
const runLevelPmContextMode = parsePmContextMode(options?.pmContext);
|
|
1221
1439
|
const progressMode = options?.progress === true ? "always" : "auto";
|
|
1222
1440
|
const runtimeDirectives = resolveRuntimeDirectives(options?.envSet, options?.envClear, options?.sharedHostSafe);
|
|
1223
|
-
let sourceProjectItemCount = 0;
|
|
1224
|
-
let sourceGlobalItemCount = 0;
|
|
1225
|
-
let schemaSandboxProjectItemCount = 0;
|
|
1226
|
-
let schemaSandboxGlobalItemCount = 0;
|
|
1227
|
-
let trackerSandboxProjectItemCount = 0;
|
|
1228
|
-
let trackerSandboxGlobalItemCount = 0;
|
|
1229
1441
|
const sourceRoots = options?.sourceRoots;
|
|
1230
|
-
const projectExtensionsSeeded = Boolean(sourceRoots);
|
|
1231
|
-
const globalExtensionsSeeded = Boolean(sourceRoots);
|
|
1232
1442
|
try {
|
|
1233
|
-
await
|
|
1234
|
-
await
|
|
1235
|
-
await
|
|
1236
|
-
await runInit(undefined, { path: trackerSandboxGlobalPath });
|
|
1237
|
-
if (sourceRoots) {
|
|
1238
|
-
await seedLinkedTestSandbox(schemaSandboxPmPath, schemaSandboxGlobalPath, sourceRoots);
|
|
1239
|
-
await seedLinkedTestSandbox(trackerSandboxPmPath, trackerSandboxGlobalPath, sourceRoots);
|
|
1240
|
-
await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, trackerSandboxPmPath);
|
|
1241
|
-
await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, trackerSandboxGlobalPath);
|
|
1242
|
-
sourceProjectItemCount = await countLinkedTestItemFiles(sourceRoots.projectPmRoot);
|
|
1243
|
-
sourceGlobalItemCount = await countLinkedTestItemFiles(sourceRoots.globalPmRoot);
|
|
1244
|
-
}
|
|
1245
|
-
schemaSandboxProjectItemCount = await countLinkedTestItemFiles(schemaSandboxPmPath);
|
|
1246
|
-
schemaSandboxGlobalItemCount = await countLinkedTestItemFiles(schemaSandboxGlobalPath);
|
|
1247
|
-
trackerSandboxProjectItemCount = await countLinkedTestItemFiles(trackerSandboxPmPath);
|
|
1248
|
-
trackerSandboxGlobalItemCount = await countLinkedTestItemFiles(trackerSandboxGlobalPath);
|
|
1249
|
-
const buildExecutionContext = (isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied) => {
|
|
1250
|
-
const selectedSandboxProjectPmPath = effectivePmContextMode === "tracker" ? trackerSandboxPmPath : schemaSandboxPmPath;
|
|
1251
|
-
const selectedSandboxGlobalPmPath = effectivePmContextMode === "tracker" ? trackerSandboxGlobalPath : schemaSandboxGlobalPath;
|
|
1252
|
-
const selectedSandboxProjectItemCount = effectivePmContextMode === "tracker" ? trackerSandboxProjectItemCount : schemaSandboxProjectItemCount;
|
|
1253
|
-
const selectedSandboxGlobalItemCount = effectivePmContextMode === "tracker" ? trackerSandboxGlobalItemCount : schemaSandboxGlobalItemCount;
|
|
1254
|
-
const mismatchDetected = isPmCommand && sourceProjectItemCount !== selectedSandboxProjectItemCount;
|
|
1255
|
-
return {
|
|
1256
|
-
requested_pm_context_mode: requestedPmContextMode,
|
|
1257
|
-
pm_context_mode: effectivePmContextMode,
|
|
1258
|
-
auto_pm_context_applied: autoPmContextApplied,
|
|
1259
|
-
is_pm_command: isPmCommand,
|
|
1260
|
-
is_pm_tracker_read_command: isPmTrackerReadCommand,
|
|
1261
|
-
source_project_pm_path: sourceRoots?.projectPmRoot ?? "",
|
|
1262
|
-
sandbox_project_pm_path: selectedSandboxProjectPmPath,
|
|
1263
|
-
source_global_pm_path: sourceRoots?.globalPmRoot ?? "",
|
|
1264
|
-
sandbox_global_pm_path: selectedSandboxGlobalPmPath,
|
|
1265
|
-
source_project_item_count: sourceProjectItemCount,
|
|
1266
|
-
sandbox_project_item_count: selectedSandboxProjectItemCount,
|
|
1267
|
-
source_global_item_count: sourceGlobalItemCount,
|
|
1268
|
-
sandbox_global_item_count: selectedSandboxGlobalItemCount,
|
|
1269
|
-
mismatch_detected: mismatchDetected,
|
|
1270
|
-
project_extensions_seeded: projectExtensionsSeeded,
|
|
1271
|
-
global_extensions_seeded: globalExtensionsSeeded,
|
|
1272
|
-
};
|
|
1273
|
-
};
|
|
1443
|
+
await initializeLinkedTestSandboxes(layout);
|
|
1444
|
+
await seedLinkedTestSandboxesFromSource(layout, sourceRoots);
|
|
1445
|
+
const counts = await countLinkedTestSandboxItems(layout, sourceRoots);
|
|
1274
1446
|
for (let index = 0; index < tests.length; index += 1) {
|
|
1275
1447
|
const linkedTest = tests[index];
|
|
1276
|
-
const
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
? commandInvokesPmTrackerReadCommand(linkedTest.command)
|
|
1284
|
-
: false;
|
|
1285
|
-
const autoPmContextApplied = options?.autoPmContext === true && isPmTrackerReadCommand;
|
|
1286
|
-
const requestedPmContextMode = autoPmContextApplied
|
|
1287
|
-
? "auto"
|
|
1288
|
-
: resolveLinkedTestRequestedContextMode(linkedTest, runLevelPmContextMode, options?.overrideLinkedPmContext === true);
|
|
1289
|
-
const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
|
|
1290
|
-
const executionContext = buildExecutionContext(isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied);
|
|
1291
|
-
if (!linkedTest.command) {
|
|
1292
|
-
results.push({
|
|
1293
|
-
command: linkedTest.command,
|
|
1294
|
-
path: linkedTest.path,
|
|
1295
|
-
status: "skipped",
|
|
1296
|
-
execution_context: executionContext,
|
|
1297
|
-
error: "No command configured for this linked test.",
|
|
1298
|
-
});
|
|
1299
|
-
continue;
|
|
1300
|
-
}
|
|
1301
|
-
const runtimeSafetySkipReason = getRuntimeSafetySkipReason(linkedTest.command);
|
|
1302
|
-
if (runtimeSafetySkipReason) {
|
|
1303
|
-
results.push({
|
|
1304
|
-
command: linkedTest.command,
|
|
1305
|
-
path: linkedTest.path,
|
|
1306
|
-
status: "skipped",
|
|
1307
|
-
execution_context: executionContext,
|
|
1308
|
-
error: runtimeSafetySkipReason,
|
|
1309
|
-
});
|
|
1310
|
-
continue;
|
|
1311
|
-
}
|
|
1312
|
-
const failOnMismatchByDefault = executionContext.pm_context_mode === "schema" &&
|
|
1313
|
-
executionContext.is_pm_tracker_read_command &&
|
|
1314
|
-
executionContext.mismatch_detected;
|
|
1315
|
-
const failOnMismatchByFlag = options?.failOnContextMismatch === true && executionContext.is_pm_command && executionContext.mismatch_detected;
|
|
1316
|
-
if (failOnMismatchByDefault || failOnMismatchByFlag) {
|
|
1317
|
-
const mismatchHint = buildPmContextMismatchHint({
|
|
1318
|
-
executionContext,
|
|
1319
|
-
runLevelPmContextMode,
|
|
1320
|
-
linkedOverridePmContextMode,
|
|
1321
|
-
});
|
|
1322
|
-
const mismatchPrefix = options?.checkContext === true ? "Linked test preflight PM context mismatch detected" : "Linked test PM context mismatch detected";
|
|
1323
|
-
results.push({
|
|
1324
|
-
command: linkedTest.command,
|
|
1325
|
-
path: linkedTest.path,
|
|
1326
|
-
status: "failed",
|
|
1327
|
-
exit_code: 1,
|
|
1328
|
-
failure_category: "assertion_failure",
|
|
1329
|
-
execution_context: executionContext,
|
|
1330
|
-
error: `${mismatchPrefix} (source_project_items=${executionContext.source_project_item_count}, ` +
|
|
1331
|
-
`sandbox_project_items=${executionContext.sandbox_project_item_count}).${mismatchHint}`,
|
|
1332
|
-
});
|
|
1333
|
-
continue;
|
|
1334
|
-
}
|
|
1335
|
-
if (options?.requireAssertionsForPm === true && executionContext.is_pm_command && !hasLinkedTestAssertions(linkedTest)) {
|
|
1336
|
-
results.push({
|
|
1337
|
-
command: linkedTest.command,
|
|
1338
|
-
path: linkedTest.path,
|
|
1339
|
-
status: "failed",
|
|
1340
|
-
exit_code: 1,
|
|
1341
|
-
failure_category: "assertion_failure",
|
|
1342
|
-
execution_context: executionContext,
|
|
1343
|
-
error: "Linked PM command requires assertions when --require-assertions-for-pm is enabled.",
|
|
1344
|
-
});
|
|
1345
|
-
continue;
|
|
1346
|
-
}
|
|
1347
|
-
const timeoutMs = ((linkedTest.timeout_seconds ?? defaultTimeoutSeconds ?? 120) * 1000);
|
|
1348
|
-
const effectiveDirectives = resolveEffectiveLinkedTestDirectives(runtimeDirectives, linkedTest);
|
|
1349
|
-
const executionEnv = { ...process.env };
|
|
1350
|
-
applyEnvDirectiveStage(executionEnv, runtimeDirectives);
|
|
1351
|
-
applyEnvDirectiveStage(executionEnv, {
|
|
1352
|
-
env_set: linkedTest.env_set ?? {},
|
|
1353
|
-
env_clear: linkedTest.env_clear ?? [],
|
|
1448
|
+
const commandContext = resolveLinkedTestCommandContext({
|
|
1449
|
+
linkedTest,
|
|
1450
|
+
layout,
|
|
1451
|
+
counts,
|
|
1452
|
+
sourceRoots,
|
|
1453
|
+
runLevelPmContextMode,
|
|
1454
|
+
options,
|
|
1354
1455
|
});
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
timeoutMs,
|
|
1365
|
-
command: linkedTest.command,
|
|
1366
|
-
}, progressMode);
|
|
1367
|
-
const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
|
|
1368
|
-
if (passed) {
|
|
1369
|
-
if (options?.failOnEmptyTestRun === true) {
|
|
1370
|
-
const emptyRunSignal = detectEmptyLinkedTestRun(execution.stdout, execution.stderr);
|
|
1371
|
-
if (emptyRunSignal) {
|
|
1372
|
-
results.push({
|
|
1373
|
-
command: linkedTest.command,
|
|
1374
|
-
path: linkedTest.path,
|
|
1375
|
-
status: "failed",
|
|
1376
|
-
exit_code: 1,
|
|
1377
|
-
failure_category: "empty_run",
|
|
1378
|
-
execution_context: executionContext,
|
|
1379
|
-
stdout: execution.stdout,
|
|
1380
|
-
stderr: execution.stderr,
|
|
1381
|
-
error: `Linked test reported an empty test run (${emptyRunSignal}) while --fail-on-empty-test-run is enabled. ` +
|
|
1382
|
-
"Update test selection or disable --fail-on-empty-test-run for this run.",
|
|
1383
|
-
});
|
|
1384
|
-
continue;
|
|
1385
|
-
}
|
|
1386
|
-
}
|
|
1387
|
-
const assertionFailures = evaluateLinkedTestAssertions(linkedTest, execution.stdout, execution.stderr);
|
|
1388
|
-
if (assertionFailures.length > 0) {
|
|
1389
|
-
results.push({
|
|
1390
|
-
command: linkedTest.command,
|
|
1391
|
-
path: linkedTest.path,
|
|
1392
|
-
status: "failed",
|
|
1393
|
-
exit_code: 1,
|
|
1394
|
-
failure_category: "assertion_failure",
|
|
1395
|
-
execution_context: executionContext,
|
|
1396
|
-
stdout: execution.stdout,
|
|
1397
|
-
stderr: execution.stderr,
|
|
1398
|
-
error: `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`,
|
|
1399
|
-
});
|
|
1400
|
-
continue;
|
|
1401
|
-
}
|
|
1402
|
-
results.push({
|
|
1403
|
-
command: linkedTest.command,
|
|
1404
|
-
path: linkedTest.path,
|
|
1405
|
-
status: "passed",
|
|
1406
|
-
exit_code: 0,
|
|
1407
|
-
execution_context: executionContext,
|
|
1408
|
-
stdout: execution.stdout,
|
|
1409
|
-
stderr: execution.stderr,
|
|
1410
|
-
});
|
|
1456
|
+
const preflightResult = resolveLinkedTestPreflightResult({
|
|
1457
|
+
linkedTest,
|
|
1458
|
+
executionContext: commandContext.executionContext,
|
|
1459
|
+
runLevelPmContextMode,
|
|
1460
|
+
linkedOverridePmContextMode: commandContext.linkedOverridePmContextMode,
|
|
1461
|
+
options,
|
|
1462
|
+
});
|
|
1463
|
+
if (preflightResult) {
|
|
1464
|
+
results.push(preflightResult);
|
|
1411
1465
|
continue;
|
|
1412
1466
|
}
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
error: formatLinkedTestExecutionError(execution, timeoutMs),
|
|
1424
|
-
});
|
|
1467
|
+
results.push(await runSingleLinkedTest({
|
|
1468
|
+
linkedTest,
|
|
1469
|
+
index,
|
|
1470
|
+
total: tests.length,
|
|
1471
|
+
defaultTimeoutSeconds,
|
|
1472
|
+
runtimeDirectives,
|
|
1473
|
+
progressMode,
|
|
1474
|
+
executionContext: commandContext.executionContext,
|
|
1475
|
+
options,
|
|
1476
|
+
}));
|
|
1425
1477
|
}
|
|
1426
1478
|
}
|
|
1427
1479
|
finally {
|
|
1428
|
-
await rm(
|
|
1480
|
+
await rm(layout.root, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
|
|
1429
1481
|
}
|
|
1430
1482
|
return results;
|
|
1431
1483
|
}
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
*/
|
|
1435
|
-
export async function runTest(id, options, global) {
|
|
1436
|
-
const stdinResolver = createStdinTokenResolver();
|
|
1437
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
1438
|
-
if (!(await pathExists(getSettingsPath(pmRoot)))) {
|
|
1439
|
-
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
1440
|
-
}
|
|
1441
|
-
const settings = await readSettings(pmRoot);
|
|
1442
|
-
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
1443
|
-
const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
|
|
1444
|
-
const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
|
|
1445
|
-
const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
|
|
1446
|
-
const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
|
|
1447
|
-
const removes = parseRemoveEntries(resolvedRemoves);
|
|
1448
|
-
const shouldMutate = adds.length > 0 || removes.length > 0;
|
|
1449
|
-
let tests = [];
|
|
1450
|
-
let itemId;
|
|
1451
|
-
let changed = false;
|
|
1452
|
-
if (shouldMutate) {
|
|
1453
|
-
const author = resolveAuthor(options.author, settings.author_default);
|
|
1454
|
-
const result = await mutateItem({
|
|
1455
|
-
pmRoot,
|
|
1456
|
-
settings,
|
|
1457
|
-
id,
|
|
1458
|
-
op: "tests_add",
|
|
1459
|
-
author,
|
|
1460
|
-
message: options.message,
|
|
1461
|
-
force: options.force,
|
|
1462
|
-
skipNoop: true,
|
|
1463
|
-
mutate(document) {
|
|
1464
|
-
const previous = document.metadata.tests ?? [];
|
|
1465
|
-
const next = [...(document.metadata.tests ?? [])];
|
|
1466
|
-
for (const add of adds) {
|
|
1467
|
-
const exists = next.some((entry) => entry.command === add.command &&
|
|
1468
|
-
entry.path === add.path &&
|
|
1469
|
-
entry.scope === add.scope &&
|
|
1470
|
-
entry.pm_context_mode === add.pm_context_mode);
|
|
1471
|
-
if (!exists) {
|
|
1472
|
-
next.push(add);
|
|
1473
|
-
}
|
|
1474
|
-
}
|
|
1475
|
-
if (removes.length > 0) {
|
|
1476
|
-
for (let i = next.length - 1; i >= 0; i -= 1) {
|
|
1477
|
-
const entry = next[i];
|
|
1478
|
-
if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
|
|
1479
|
-
next.splice(i, 1);
|
|
1480
|
-
}
|
|
1481
|
-
}
|
|
1482
|
-
}
|
|
1483
|
-
document.metadata.tests = next;
|
|
1484
|
-
return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
|
|
1485
|
-
},
|
|
1486
|
-
});
|
|
1487
|
-
tests = result.item.tests ?? [];
|
|
1488
|
-
itemId = result.item.id;
|
|
1489
|
-
changed = result.changedFields.length > 0;
|
|
1490
|
-
}
|
|
1491
|
-
else {
|
|
1492
|
-
const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
1493
|
-
if (!located) {
|
|
1494
|
-
throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
|
|
1495
|
-
}
|
|
1496
|
-
itemId = located.id;
|
|
1497
|
-
const loaded = await readLocatedItem(located, { schema: settings.schema });
|
|
1498
|
-
tests = loaded.document.metadata.tests ?? [];
|
|
1499
|
-
}
|
|
1500
|
-
let defaultTimeoutSeconds;
|
|
1501
|
-
if (options.timeout !== undefined) {
|
|
1502
|
-
defaultTimeoutSeconds = parseOptionalNumber(options.timeout, "timeout");
|
|
1503
|
-
}
|
|
1504
|
-
const pmContextMode = parsePmContextMode(options.pmContext);
|
|
1505
|
-
const hasRuntimeDirectiveFlags = (options.envSet?.length ?? 0) > 0 ||
|
|
1484
|
+
function hasTestRuntimeDirectiveFlags(options) {
|
|
1485
|
+
return ((options.envSet?.length ?? 0) > 0 ||
|
|
1506
1486
|
(options.envClear?.length ?? 0) > 0 ||
|
|
1507
1487
|
options.sharedHostSafe === true ||
|
|
1508
1488
|
options.pmContext !== undefined ||
|
|
@@ -1512,43 +1492,105 @@ export async function runTest(id, options, global) {
|
|
|
1512
1492
|
options.failOnEmptyTestRun === true ||
|
|
1513
1493
|
options.requireAssertionsForPm === true ||
|
|
1514
1494
|
options.checkContext === true ||
|
|
1515
|
-
options.autoPmContext === true;
|
|
1516
|
-
|
|
1495
|
+
options.autoPmContext === true);
|
|
1496
|
+
}
|
|
1497
|
+
function assertTestRunFlagUsage(options) {
|
|
1498
|
+
if (hasTestRuntimeDirectiveFlags(options) && options.run !== true) {
|
|
1517
1499
|
throw new PmCliError("--env-set, --env-clear, --shared-host-safe, --pm-context, --override-linked-pm-context, --fail-on-context-mismatch, --fail-on-skipped, --fail-on-empty-test-run, --require-assertions-for-pm, --check-context, and --auto-pm-context require --run", EXIT_CODE.USAGE);
|
|
1518
1500
|
}
|
|
1519
1501
|
const hasSelectorFlags = options.match !== undefined || options.onlyIndex !== undefined || options.onlyLast === true;
|
|
1520
1502
|
if (hasSelectorFlags && options.run !== true) {
|
|
1521
1503
|
throw new PmCliError("--match, --only-index, and --only-last require --run", EXIT_CODE.USAGE);
|
|
1522
1504
|
}
|
|
1505
|
+
}
|
|
1506
|
+
async function resolveLinkedTestItem(params) {
|
|
1507
|
+
const { id, options, pmRoot, settings, typeToFolder, adds, removes } = params;
|
|
1508
|
+
if (adds.length === 0 && removes.length === 0) {
|
|
1509
|
+
const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeToFolder);
|
|
1510
|
+
if (!located) {
|
|
1511
|
+
throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
|
|
1512
|
+
}
|
|
1513
|
+
const loaded = await readLocatedItem(located, { schema: settings.schema });
|
|
1514
|
+
return { itemId: located.id, tests: loaded.document.metadata.tests ?? [], changed: false };
|
|
1515
|
+
}
|
|
1516
|
+
const result = await mutateItem({
|
|
1517
|
+
pmRoot,
|
|
1518
|
+
settings,
|
|
1519
|
+
id,
|
|
1520
|
+
op: "tests_add",
|
|
1521
|
+
author: resolveAuthor(options.author, settings.author_default),
|
|
1522
|
+
message: options.message,
|
|
1523
|
+
force: options.force,
|
|
1524
|
+
skipNoop: true,
|
|
1525
|
+
mutate(document) {
|
|
1526
|
+
const previous = document.metadata.tests ?? [];
|
|
1527
|
+
const next = [...previous];
|
|
1528
|
+
for (const add of adds) {
|
|
1529
|
+
const exists = next.some((entry) => entry.command === add.command &&
|
|
1530
|
+
entry.path === add.path &&
|
|
1531
|
+
entry.scope === add.scope &&
|
|
1532
|
+
entry.pm_context_mode === add.pm_context_mode);
|
|
1533
|
+
if (!exists) {
|
|
1534
|
+
next.push(add);
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
if (removes.length > 0) {
|
|
1538
|
+
for (let i = next.length - 1; i >= 0; i -= 1) {
|
|
1539
|
+
const entry = next[i];
|
|
1540
|
+
if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
|
|
1541
|
+
next.splice(i, 1);
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
document.metadata.tests = next;
|
|
1546
|
+
return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
|
|
1547
|
+
},
|
|
1548
|
+
});
|
|
1549
|
+
return {
|
|
1550
|
+
itemId: result.item.id,
|
|
1551
|
+
tests: result.item.tests ?? [],
|
|
1552
|
+
changed: result.changedFields.length > 0,
|
|
1553
|
+
};
|
|
1554
|
+
}
|
|
1555
|
+
function resolveTestRunOptions(options, tests) {
|
|
1556
|
+
assertTestRunFlagUsage(options);
|
|
1523
1557
|
const selectorInput = {
|
|
1524
1558
|
match: options.match,
|
|
1525
1559
|
onlyIndex: options.onlyIndex === undefined ? undefined : parseOnlyIndexValue(options.onlyIndex),
|
|
1526
1560
|
onlyLast: options.onlyLast,
|
|
1527
1561
|
};
|
|
1528
1562
|
const runSelection = options.run === true ? resolveLinkedTestRunSelection(tests, selectorInput) : undefined;
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
:
|
|
1550
|
-
|
|
1551
|
-
|
|
1563
|
+
return {
|
|
1564
|
+
defaultTimeoutSeconds: options.timeout === undefined ? undefined : parseOptionalNumber(options.timeout, "timeout"),
|
|
1565
|
+
pmContextMode: parsePmContextMode(options.pmContext),
|
|
1566
|
+
runSelection,
|
|
1567
|
+
testsToRun: runSelection?.selected ?? tests,
|
|
1568
|
+
};
|
|
1569
|
+
}
|
|
1570
|
+
async function executeSelectedLinkedTests(params) {
|
|
1571
|
+
const { options, runOptions, pmRoot } = params;
|
|
1572
|
+
if (options.run !== true) {
|
|
1573
|
+
return [];
|
|
1574
|
+
}
|
|
1575
|
+
return await runLinkedTests(runOptions.testsToRun, runOptions.defaultTimeoutSeconds, {
|
|
1576
|
+
progress: options.progress,
|
|
1577
|
+
envSet: options.envSet,
|
|
1578
|
+
envClear: options.envClear,
|
|
1579
|
+
sharedHostSafe: options.sharedHostSafe,
|
|
1580
|
+
pmContext: runOptions.pmContextMode,
|
|
1581
|
+
overrideLinkedPmContext: options.overrideLinkedPmContext,
|
|
1582
|
+
failOnContextMismatch: options.failOnContextMismatch,
|
|
1583
|
+
failOnEmptyTestRun: options.failOnEmptyTestRun,
|
|
1584
|
+
requireAssertionsForPm: options.requireAssertionsForPm,
|
|
1585
|
+
checkContext: options.checkContext,
|
|
1586
|
+
autoPmContext: options.autoPmContext,
|
|
1587
|
+
sourceRoots: {
|
|
1588
|
+
projectPmRoot: pmRoot,
|
|
1589
|
+
globalPmRoot: resolveGlobalPmRoot(process.cwd()),
|
|
1590
|
+
},
|
|
1591
|
+
});
|
|
1592
|
+
}
|
|
1593
|
+
function buildTestWarnings(options, runSelection, runResults) {
|
|
1552
1594
|
const warnings = [];
|
|
1553
1595
|
if (runSelection && runSelection.selector !== null) {
|
|
1554
1596
|
warnings.push(`linked_test_selection:${runSelection.selector}=${runSelection.requested};selected=${runSelection.selected_count};skipped=${runSelection.skipped_count};indexes=${runSelection.selected_indexes.join(",")}`);
|
|
@@ -1560,58 +1602,96 @@ export async function runTest(id, options, global) {
|
|
|
1560
1602
|
`mismatches=${preflight.mismatches};` +
|
|
1561
1603
|
`auto_remediated=${preflight.auto_remediated}`);
|
|
1562
1604
|
}
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
try {
|
|
1570
|
-
await appendTrackedTestRunSummary({
|
|
1571
|
-
pmRoot,
|
|
1572
|
-
settings,
|
|
1573
|
-
itemId,
|
|
1574
|
-
author: resolveAuthor(options.author, settings.author_default),
|
|
1575
|
-
message: `Track test run summary (${trackedRunId})`,
|
|
1576
|
-
entry: {
|
|
1577
|
-
run_id: trackedRunId,
|
|
1578
|
-
kind: "test",
|
|
1579
|
-
status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
|
|
1580
|
-
started_at: runStartedAt,
|
|
1581
|
-
finished_at: nowIso(),
|
|
1582
|
-
recorded_at: nowIso(),
|
|
1583
|
-
attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : undefined,
|
|
1584
|
-
resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : undefined,
|
|
1585
|
-
passed: summary.passed,
|
|
1586
|
-
failed: summary.failed,
|
|
1587
|
-
skipped: summary.skipped,
|
|
1588
|
-
fail_on_skipped_triggered: failOnSkippedTriggered ? true : undefined,
|
|
1589
|
-
},
|
|
1590
|
-
});
|
|
1591
|
-
}
|
|
1592
|
-
catch (error) {
|
|
1593
|
-
warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
|
|
1594
|
-
}
|
|
1605
|
+
return warnings;
|
|
1606
|
+
}
|
|
1607
|
+
async function recordTestRunSummary(params) {
|
|
1608
|
+
const { options, pmRoot, settings, itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings } = params;
|
|
1609
|
+
if (options.run !== true || !runStartedAt || settings.testing.record_results_to_items !== true) {
|
|
1610
|
+
return;
|
|
1595
1611
|
}
|
|
1612
|
+
const summary = summarizeRunResultStatuses(runResults);
|
|
1613
|
+
const trackedRunId = resolveTrackedRunId("test");
|
|
1614
|
+
const attemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
|
|
1615
|
+
const parsedAttempt = attemptRaw ? Number.parseInt(attemptRaw, 10) : Number.NaN;
|
|
1616
|
+
const resumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
|
|
1617
|
+
try {
|
|
1618
|
+
await appendTrackedTestRunSummary({
|
|
1619
|
+
pmRoot,
|
|
1620
|
+
settings,
|
|
1621
|
+
itemId,
|
|
1622
|
+
author: resolveAuthor(options.author, settings.author_default),
|
|
1623
|
+
message: `Track test run summary (${trackedRunId})`,
|
|
1624
|
+
entry: {
|
|
1625
|
+
run_id: trackedRunId,
|
|
1626
|
+
kind: "test",
|
|
1627
|
+
status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
|
|
1628
|
+
started_at: runStartedAt,
|
|
1629
|
+
finished_at: nowIso(),
|
|
1630
|
+
recorded_at: nowIso(),
|
|
1631
|
+
attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : undefined,
|
|
1632
|
+
resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : undefined,
|
|
1633
|
+
passed: summary.passed,
|
|
1634
|
+
failed: summary.failed,
|
|
1635
|
+
skipped: summary.skipped,
|
|
1636
|
+
fail_on_skipped_triggered: failOnSkippedTriggered ? true : undefined,
|
|
1637
|
+
},
|
|
1638
|
+
});
|
|
1639
|
+
}
|
|
1640
|
+
catch (error) {
|
|
1641
|
+
warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1644
|
+
/**
|
|
1645
|
+
* Implements run test for the public runtime surface of this module.
|
|
1646
|
+
*/
|
|
1647
|
+
export async function runTest(id, options, global) {
|
|
1648
|
+
const stdinResolver = createStdinTokenResolver();
|
|
1649
|
+
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
1650
|
+
if (!(await pathExists(getSettingsPath(pmRoot)))) {
|
|
1651
|
+
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
1652
|
+
}
|
|
1653
|
+
const settings = await readSettings(pmRoot);
|
|
1654
|
+
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
1655
|
+
const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
|
|
1656
|
+
const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
|
|
1657
|
+
const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
|
|
1658
|
+
const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
|
|
1659
|
+
const removes = parseRemoveEntries(resolvedRemoves);
|
|
1660
|
+
const item = await resolveLinkedTestItem({
|
|
1661
|
+
id,
|
|
1662
|
+
options,
|
|
1663
|
+
pmRoot,
|
|
1664
|
+
settings,
|
|
1665
|
+
typeToFolder: typeRegistry.type_to_folder,
|
|
1666
|
+
adds,
|
|
1667
|
+
removes,
|
|
1668
|
+
});
|
|
1669
|
+
const runOptions = resolveTestRunOptions(options, item.tests);
|
|
1670
|
+
const runStartedAt = options.run === true ? nowIso() : undefined;
|
|
1671
|
+
const runResults = await executeSelectedLinkedTests({ options, runOptions, pmRoot });
|
|
1672
|
+
const failureCategories = countFailureCategories(runResults);
|
|
1673
|
+
const failOnSkippedTriggered = options.run === true && options.failOnSkipped === true && runResults.some((entry) => entry.status === "skipped");
|
|
1674
|
+
const warnings = buildTestWarnings(options, runOptions.runSelection, runResults);
|
|
1675
|
+
await recordTestRunSummary({ options, pmRoot, settings, itemId: item.itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings });
|
|
1596
1676
|
return {
|
|
1597
1677
|
ok: runResults.every((entry) => entry.status !== "failed") && failOnSkippedTriggered !== true,
|
|
1598
|
-
id: itemId,
|
|
1599
|
-
tests,
|
|
1678
|
+
id: item.itemId,
|
|
1679
|
+
tests: item.tests,
|
|
1600
1680
|
run_results: runResults,
|
|
1601
1681
|
failure_categories: failureCategories,
|
|
1602
|
-
selection: runSelection
|
|
1682
|
+
selection: runOptions.runSelection
|
|
1603
1683
|
? {
|
|
1604
|
-
selector: runSelection.selector,
|
|
1605
|
-
requested: runSelection.requested,
|
|
1606
|
-
selected_indexes: runSelection.selected_indexes,
|
|
1607
|
-
selected_count: runSelection.selected_count,
|
|
1608
|
-
skipped_count: runSelection.skipped_count,
|
|
1684
|
+
selector: runOptions.runSelection.selector,
|
|
1685
|
+
requested: runOptions.runSelection.requested,
|
|
1686
|
+
selected_indexes: runOptions.runSelection.selected_indexes,
|
|
1687
|
+
selected_count: runOptions.runSelection.selected_count,
|
|
1688
|
+
skipped_count: runOptions.runSelection.skipped_count,
|
|
1609
1689
|
}
|
|
1610
1690
|
: undefined,
|
|
1611
1691
|
fail_on_skipped_triggered: failOnSkippedTriggered ? true : undefined,
|
|
1612
1692
|
warnings: warnings.length > 0 ? warnings : undefined,
|
|
1613
|
-
changed,
|
|
1614
|
-
count: tests.length,
|
|
1693
|
+
changed: item.changed,
|
|
1694
|
+
count: item.tests.length,
|
|
1615
1695
|
};
|
|
1616
1696
|
}
|
|
1617
1697
|
/* c8 ignore stop */
|
|
@@ -1642,4 +1722,4 @@ export const _testOnlyTestCommand = {
|
|
|
1642
1722
|
summarizeRunResultStatuses,
|
|
1643
1723
|
};
|
|
1644
1724
|
//# sourceMappingURL=test.js.map
|
|
1645
|
-
//# debugId=
|
|
1725
|
+
//# debugId=caa941ed-c848-506c-9a3c-3d4959be0246
|