@unbrained/pm-cli 2026.7.1 → 2026.7.3
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/.claude-plugin/marketplace.json +3 -3
- package/CHANGELOG.md +25 -0
- package/CONTRIBUTING.md +2 -2
- package/README.md +1 -1
- package/dist/cli/commander-usage.d.ts +2 -0
- package/dist/cli/commander-usage.js +110 -86
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.js +79 -57
- package/dist/cli/commands/activity.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 +176 -114
- 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/create.js +32 -17
- package/dist/cli/commands/create.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/extension/doctor.js +56 -67
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/shared.js +21 -15
- package/dist/cli/commands/extension/shared.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 +545 -417
- 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-agent-guidance.js +32 -19
- package/dist/cli/commands/init-agent-guidance.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 +60 -40
- 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/profile.js +23 -15
- package/dist/cli/commands/profile.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 +20 -1
- package/dist/cli/commands/validate.js +478 -343
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +406 -361
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-help.js +27 -19
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/help-json-payload.js +57 -49
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.d.ts +47 -0
- package/dist/cli/main.js +474 -371
- 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 +299 -310
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +763 -779
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +386 -362
- 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/registration-helpers.d.ts +4 -0
- package/dist/cli/registration-helpers.js +45 -56
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-5YWLSPGE.js} +9 -9
- package/dist/cli-bundle/chunks/activity-BIML7K2D.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-2V2M3JZU.js} +107 -83
- package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-2V2M3JZU.js.map} +2 -2
- package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-EK7DXML7.js} +108 -84
- package/dist/cli-bundle/chunks/aggregate-EK7DXML7.js.map +1 -0
- package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-EZESUVJT.js} +8 -8
- package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-JFG4WQMG.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-32IUNTG4.js} +158 -119
- package/dist/cli-bundle/chunks/chunk-32IUNTG4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-3W2HJKJX.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-4EXFFP7T.js} +86 -52
- package/dist/cli-bundle/chunks/chunk-4EXFFP7T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-4PFVUUYV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-4WB6S4YX.js} +308 -184
- package/dist/cli-bundle/chunks/chunk-4WB6S4YX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-572FKBRL.js} +61 -102
- package/dist/cli-bundle/chunks/chunk-572FKBRL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-5E7N4T2Z.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-5IZUBZBR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-5JIWFWOZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-67LARBDL.js} +493 -404
- package/dist/cli-bundle/chunks/chunk-67LARBDL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-6CDCWKSX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-6KRFL33E.js} +308 -184
- package/dist/cli-bundle/chunks/chunk-6KRFL33E.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-6NYJGMTY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-7CLLC75T.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-7LYO6S5A.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-A3OQ7TFW.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-AIKU3IIL.js} +153 -90
- package/dist/cli-bundle/chunks/chunk-AIKU3IIL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AJHYQCBJ.js} +39 -5
- package/dist/cli-bundle/chunks/chunk-AJHYQCBJ.js.map +7 -0
- 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-OTUHB4HS.js → chunk-BE2SR6QL.js} +92 -77
- package/dist/cli-bundle/chunks/chunk-BE2SR6QL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-BI4R7HI2.js} +75 -53
- package/dist/cli-bundle/chunks/chunk-BI4R7HI2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-CXR3CMBQ.js} +33 -6
- package/dist/cli-bundle/chunks/chunk-CXR3CMBQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-ECU6MMTQ.js} +713 -613
- package/dist/cli-bundle/chunks/chunk-ECU6MMTQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-EJ2OCBHF.js} +54 -30
- package/dist/cli-bundle/chunks/chunk-EJ2OCBHF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-EQURFOMH.js} +41 -26
- package/dist/cli-bundle/chunks/chunk-EQURFOMH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-ER4ME5U2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-ERG65A2L.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-F6WNBITZ.js} +157 -113
- package/dist/cli-bundle/chunks/chunk-F6WNBITZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-FH2H3CBD.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-FUFFPIYA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-FZJM2TXF.js} +110 -73
- package/dist/cli-bundle/chunks/chunk-FZJM2TXF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-GUYNUXQT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-GVJE5T7Q.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-HB4FAT3O.js} +42 -60
- package/dist/cli-bundle/chunks/chunk-HB4FAT3O.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-HQAF23Q2.js} +626 -484
- package/dist/cli-bundle/chunks/chunk-HQAF23Q2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-JBZ2NTKX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-JPATY4SE.js} +54 -30
- package/dist/cli-bundle/chunks/chunk-JPATY4SE.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-K5DT2YKM.js} +109 -72
- package/dist/cli-bundle/chunks/chunk-K5DT2YKM.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KEZOIPCR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-KHVGM5CS.js} +466 -365
- package/dist/cli-bundle/chunks/chunk-KHVGM5CS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-KS6ATO47.js} +288 -175
- package/dist/cli-bundle/chunks/chunk-KS6ATO47.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-L4SLHV6G.js} +463 -362
- package/dist/cli-bundle/chunks/chunk-L4SLHV6G.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-LBE5QFMZ.js} +158 -114
- package/dist/cli-bundle/chunks/chunk-LBE5QFMZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-LCWQP6NM.js} +76 -54
- package/dist/cli-bundle/chunks/chunk-LCWQP6NM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-LOWVNZBZ.js} +91 -76
- package/dist/cli-bundle/chunks/chunk-LOWVNZBZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-MDHWWBNZ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-MEZZZBYX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-MHRS5FUX.js} +288 -175
- package/dist/cli-bundle/chunks/chunk-MHRS5FUX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-NOIEVOK5.js} +391 -313
- package/dist/cli-bundle/chunks/chunk-NOIEVOK5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-NZ7QIUP5.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-OGLGI22K.js} +115 -67
- package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js.map → chunk-OGLGI22K.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-P5L7Z2O6.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-PULUSQAV.js} +492 -403
- package/dist/cli-bundle/chunks/chunk-PULUSQAV.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-QCDTQCMW.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-QCDTQCMW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-QNNQAAZ5.js} +24 -18
- package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-QNNQAAZ5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-RAHINBVP.js} +60 -101
- package/dist/cli-bundle/chunks/chunk-RAHINBVP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-RJH5VQHW.js} +43 -61
- package/dist/cli-bundle/chunks/chunk-RJH5VQHW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-SU2E4AWU.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-SU3TB4NS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-SYE6WMV6.js} +626 -484
- package/dist/cli-bundle/chunks/chunk-SYE6WMV6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-T3P7PMZP.js} +42 -27
- package/dist/cli-bundle/chunks/chunk-T3P7PMZP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-T4XBKJ3F.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-T6AXEBOP.js} +23 -17
- package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-T6AXEBOP.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-TQ6AX5SQ.js} +58 -69
- package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-TQ6AX5SQ.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-U3S2B7TA.js} +86 -52
- package/dist/cli-bundle/chunks/chunk-U3S2B7TA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-U5TR4N7J.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UMNQZS4H.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-WJA3PXW7.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WRYERRZX.js} +157 -118
- package/dist/cli-bundle/chunks/chunk-WRYERRZX.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-WYOIIFSE.js} +712 -612
- package/dist/cli-bundle/chunks/chunk-WYOIIFSE.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-XRYSCRZR.js} +116 -68
- package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js.map → chunk-XRYSCRZR.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-YF746GTH.js} +59 -70
- package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-YF746GTH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-YPWUSH72.js} +390 -312
- package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-YPWUSH72.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-YSDFIY7N.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-YSGTMDWC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-YVKZ3ANP.js} +21 -29
- package/dist/cli-bundle/chunks/chunk-YVKZ3ANP.js.map +7 -0
- 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-64HNBBFQ.js → chunk-Z5F6XZXE.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-Z7RPDF2Y.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-ZFTKYWIF.js} +152 -89
- package/dist/cli-bundle/chunks/chunk-ZFTKYWIF.js.map +7 -0
- package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-2BGBGSVI.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-5GU7OE67.js} +8 -8
- package/dist/cli-bundle/chunks/close-6YODBUIV.js +14 -0
- package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-AFVKPR57.js} +7 -7
- package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-7KLOSYLP.js} +186 -122
- package/dist/cli-bundle/chunks/close-many-7KLOSYLP.js.map +7 -0
- package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-JKUJMHLG.js} +187 -123
- package/dist/cli-bundle/chunks/close-many-JKUJMHLG.js.map +1 -0
- package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-DNWHEBOS.js} +9 -9
- package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-RW23R3VE.js} +9 -9
- package/dist/cli-bundle/chunks/config-AUM5WBYA.js +1072 -0
- package/dist/cli-bundle/chunks/config-AUM5WBYA.js.map +7 -0
- package/dist/cli-bundle/chunks/config-OZWSA2NP.js +1062 -0
- package/dist/cli-bundle/chunks/config-OZWSA2NP.js.map +1 -0
- package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-OYXRGY7S.js} +12 -12
- package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-PKCEHQY3.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-L6ODXNUM.js} +320 -199
- package/dist/cli-bundle/chunks/contracts-L6ODXNUM.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-X74F2GSM.js} +321 -200
- package/dist/cli-bundle/chunks/contracts-X74F2GSM.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-6XOR3HKN.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-I4NCLBR4.js} +5 -5
- package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-PM45M6PE.js} +12 -12
- package/dist/cli-bundle/chunks/create-Z7YCH3BE.js +28 -0
- package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-7YXHYG67.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-LPISP43T.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-N2T26FME.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-WATKQDE3.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-6LQ3GLM7.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-Z3X6JZLT.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-6DCLG52D.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-Y3ZCUTHK.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-BNINIMT7.js} +11 -11
- package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-QWE4YYK5.js} +11 -11
- package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-6SGKHS6O.js} +7 -7
- package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-FUYPSOFJ.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-2Q3K76G2.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-ATLBWXXD.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-RUYEMNRF.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-TDWSDR66.js} +3 -3
- package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-2WGLX74N.js} +120 -80
- package/dist/cli-bundle/chunks/get-2WGLX74N.js.map +7 -0
- package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-LY6M2JIM.js} +121 -81
- package/dist/cli-bundle/chunks/get-LY6M2JIM.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-4RKHYS3T.js} +535 -371
- package/dist/cli-bundle/chunks/health-4RKHYS3T.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-TMFVNYRA.js} +534 -370
- package/dist/cli-bundle/chunks/health-TMFVNYRA.js.map +7 -0
- package/dist/cli-bundle/chunks/history-CGNQJXFE.js +18 -0
- package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-SGRRS72R.js} +8 -8
- package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-LOED43R3.js} +213 -134
- package/dist/cli-bundle/chunks/history-compact-LOED43R3.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-V5DNAQHH.js} +214 -135
- package/dist/cli-bundle/chunks/history-compact-V5DNAQHH.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-IRL7WJ3E.js} +9 -9
- package/dist/cli-bundle/chunks/history-redact-N3JK7VBW.js +19 -0
- package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-4WVBVHFR.js} +124 -84
- package/dist/cli-bundle/chunks/history-repair-4WVBVHFR.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-PGYQJMGD.js} +123 -83
- package/dist/cli-bundle/chunks/history-repair-PGYQJMGD.js.map +7 -0
- package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-4GESW7RM.js} +12 -12
- package/dist/cli-bundle/chunks/init-XIDPABA4.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-4BHWFFUV.js} +9 -9
- package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-4FJY7WIW.js} +9 -9
- package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-472TIOVK.js} +8 -8
- package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-D7BF5CL2.js} +8 -8
- package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-D5STGWI2.js} +71 -46
- package/dist/cli-bundle/chunks/next-D5STGWI2.js.map +1 -0
- package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-SFQZVX2B.js} +70 -45
- package/dist/cli-bundle/chunks/next-SFQZVX2B.js.map +7 -0
- package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-6KNOSLIT.js} +9 -9
- package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-W4UEICGF.js} +9 -9
- package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-JO6V7BXO.js} +373 -279
- package/dist/cli-bundle/chunks/plan-JO6V7BXO.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-MJQW5XK3.js} +372 -278
- package/dist/cli-bundle/chunks/plan-MJQW5XK3.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-3TOTMUR4.js} +27 -19
- package/dist/cli-bundle/chunks/profile-3TOTMUR4.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-WIQY2KCV.js} +28 -20
- package/dist/cli-bundle/chunks/profile-WIQY2KCV.js.map +1 -0
- package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js +416 -0
- package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js.map +7 -0
- package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js +406 -0
- package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-ROFE2YPC.js} +729 -702
- package/dist/cli-bundle/chunks/register-mutation-ROFE2YPC.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-SJWMVIJ2.js} +730 -703
- package/dist/cli-bundle/chunks/register-mutation-SJWMVIJ2.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-IADFVH53.js} +389 -365
- package/dist/cli-bundle/chunks/register-operations-IADFVH53.js.map +7 -0
- package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js +510 -0
- package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-3QJY43CY.js} +128 -103
- package/dist/cli-bundle/chunks/register-setup-3QJY43CY.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-AJWUSSQX.js} +129 -104
- package/dist/cli-bundle/chunks/register-setup-AJWUSSQX.js.map +1 -0
- package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-44IHMMZZ.js} +9 -9
- package/dist/cli-bundle/chunks/restore-EXHU34EU.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-OLHNLAZY.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-TSBK4AY5.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-IB2NZZWD.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-VBCELP5G.js} +7 -7
- package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-7UBETML4.js} +10 -10
- package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-R227JOL6.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-FAG7COEH.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-MCK7PLYS.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-DRPDZMAO.js} +84 -70
- package/dist/cli-bundle/chunks/telemetry-DRPDZMAO.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-GVVUQSJQ.js} +85 -71
- package/dist/cli-bundle/chunks/telemetry-GVVUQSJQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-QY44WAMR.js} +15 -15
- package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-SY76DZTO.js} +15 -15
- package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js +430 -0
- package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js.map +7 -0
- package/dist/cli-bundle/chunks/test-all-USPJHXFR.js +427 -0
- package/dist/cli-bundle/chunks/test-all-USPJHXFR.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-MG5VIGSK.js} +185 -147
- package/dist/cli-bundle/chunks/test-runs-MG5VIGSK.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-QIR5MJPL.js} +184 -146
- package/dist/cli-bundle/chunks/test-runs-QIR5MJPL.js.map +7 -0
- package/dist/cli-bundle/chunks/update-A7EICML6.js +24 -0
- package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-IKJZWLQC.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-BEMTDA2X.js} +84 -69
- package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-BEMTDA2X.js.map} +1 -1
- package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-RATAARHU.js} +83 -68
- package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-RATAARHU.js.map} +2 -2
- package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-NWMR3VQL.js} +11 -11
- package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-VU46BLJZ.js} +11 -11
- package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-GAJ6FUSI.js} +451 -321
- package/dist/cli-bundle/chunks/validate-GAJ6FUSI.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-NRY6MFXN.js} +450 -320
- package/dist/cli-bundle/chunks/validate-NRY6MFXN.js.map +7 -0
- package/dist/cli-bundle/main.js +1107 -916
- 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 +114 -99
- 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 +97 -80
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/schema/status-defs-file.js +26 -3
- package/dist/core/schema/status-defs-file.js.map +1 -1
- package/dist/core/search/corpus.js +25 -19
- package/dist/core/search/corpus.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/shared/memo.d.ts +12 -0
- package/dist/core/shared/memo.js +25 -0
- package/dist/core/shared/memo.js.map +1 -0
- package/dist/core/shared/serialization.js +24 -14
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/shared/time.js +26 -4
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/front-matter-cache.d.ts +5 -0
- package/dist/core/store/front-matter-cache.js +316 -171
- 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/dist/sdk/cli-contracts/flag-contracts.js +71 -99
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/compose.js +51 -42
- package/dist/sdk/compose.js.map +1 -1
- package/docs/AGENT_GUIDE.md +2 -2
- package/docs/ARCHITECTURE.md +2 -2
- package/docs/COMMANDS.md +8 -4
- package/docs/CONFIGURATION.md +1 -1
- package/docs/EXTENSIONS.md +12 -12
- package/docs/ONBOARDING.md +4 -2
- package/docs/README.md +2 -0
- package/docs/examples/starter-extension/README.md +11 -10
- package/marketplace.json +3 -3
- 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/plugins/pm-claude/.claude-plugin/plugin.json +2 -2
- package/plugins/pm-claude/README.md +6 -3
- package/plugins/pm-claude/commands/pm-init.md +1 -1
- 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-22WKIL3H.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3J6JRJ3I.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3K2M5OYU.js.map +0 -7
- 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-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-AXIDKKAT.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-CWFNTKQJ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-HXTQJXWT.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-JLM7BHI7.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-MDPEOIGN.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-V3NOKJF2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WYDHYJPO.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/profile-4OMM32CD.js.map +0 -7
- package/dist/cli-bundle/chunks/profile-QLER5ENE.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js +0 -400
- package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js +0 -410
- 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 +0 -486
- 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-5YWLSPGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-BIML7K2D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-EZESUVJT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-JFG4WQMG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-3W2HJKJX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-4PFVUUYV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-5E7N4T2Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-5IZUBZBR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-5JIWFWOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-6CDCWKSX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-6NYJGMTY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-7CLLC75T.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-7LYO6S5A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-A3OQ7TFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-ER4ME5U2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-ERG65A2L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-FH2H3CBD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-FUFFPIYA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-GUYNUXQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-GVJE5T7Q.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-JBZ2NTKX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KEZOIPCR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-MDHWWBNZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-MEZZZBYX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-NZ7QIUP5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-P5L7Z2O6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-SU2E4AWU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-SU3TB4NS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-T4XBKJ3F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-U5TR4N7J.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UMNQZS4H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-WJA3PXW7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-YSDFIY7N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-YSGTMDWC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-Z5F6XZXE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-Z7RPDF2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-2BGBGSVI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-5GU7OE67.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-6YODBUIV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-AFVKPR57.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-DNWHEBOS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-RW23R3VE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-OYXRGY7S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-PKCEHQY3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-6XOR3HKN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-I4NCLBR4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-PM45M6PE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-Z7YCH3BE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-7YXHYG67.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-LPISP43T.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-N2T26FME.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-WATKQDE3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-6LQ3GLM7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-Z3X6JZLT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-6DCLG52D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-Y3ZCUTHK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-BNINIMT7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-QWE4YYK5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-6SGKHS6O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-FUYPSOFJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-2Q3K76G2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-ATLBWXXD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-RUYEMNRF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-TDWSDR66.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-CGNQJXFE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-SGRRS72R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-IRL7WJ3E.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-N3JK7VBW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-4GESW7RM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-XIDPABA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-4BHWFFUV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-4FJY7WIW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-472TIOVK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-D7BF5CL2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-6KNOSLIT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-W4UEICGF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-44IHMMZZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-EXHU34EU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-OLHNLAZY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-TSBK4AY5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-IB2NZZWD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-VBCELP5G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-7UBETML4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-R227JOL6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-FAG7COEH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-MCK7PLYS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-QY44WAMR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-SY76DZTO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-A7EICML6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-IKJZWLQC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-NWMR3VQL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-VU46BLJZ.js.map} +0 -0
|
@@ -13,24 +13,24 @@ import {
|
|
|
13
13
|
parseLinkedTestMinLines,
|
|
14
14
|
parseLinkedTestRegexList,
|
|
15
15
|
parseLinkedTestStringList
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-MDHWWBNZ.js";
|
|
17
17
|
import {
|
|
18
18
|
createStdinTokenResolver,
|
|
19
19
|
parseCsvKv,
|
|
20
20
|
parseOptionalNumber
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-P5L7Z2O6.js";
|
|
22
22
|
import {
|
|
23
23
|
runInit
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-KS6ATO47.js";
|
|
25
25
|
import {
|
|
26
26
|
locateItem,
|
|
27
27
|
mutateItem,
|
|
28
28
|
readLocatedItem
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-6KRFL33E.js";
|
|
30
30
|
import {
|
|
31
31
|
compareTimestampStrings,
|
|
32
32
|
nowIso
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-AJHYQCBJ.js";
|
|
34
34
|
import {
|
|
35
35
|
EXIT_CODE,
|
|
36
36
|
ITEM_FILE_EXTENSIONS,
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
resolveItemTypeRegistry,
|
|
45
45
|
resolvePmRoot,
|
|
46
46
|
stableValueEquals
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-KHVGM5CS.js";
|
|
48
48
|
|
|
49
49
|
// dist/cli/commands/test.js
|
|
50
50
|
import { spawn } from "node:child_process";
|
|
@@ -408,7 +408,7 @@ function firstPositionalToken(tokens) {
|
|
|
408
408
|
!(function() {
|
|
409
409
|
try {
|
|
410
410
|
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
411
|
-
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "
|
|
411
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "caa941ed-c848-506c-9a3c-3d4959be0246");
|
|
412
412
|
} catch (e2) {
|
|
413
413
|
}
|
|
414
414
|
})();
|
|
@@ -1498,300 +1498,343 @@ ${stderr}`;
|
|
|
1498
1498
|
}
|
|
1499
1499
|
return null;
|
|
1500
1500
|
}
|
|
1501
|
+
function createLinkedTestSandboxLayout(sandboxRoot) {
|
|
1502
|
+
return {
|
|
1503
|
+
root: sandboxRoot,
|
|
1504
|
+
schemaProjectPmPath: path.join(sandboxRoot, "schema", "project", ".agents", "pm"),
|
|
1505
|
+
schemaGlobalPmPath: path.join(sandboxRoot, "schema", "global"),
|
|
1506
|
+
trackerProjectPmPath: path.join(sandboxRoot, "tracker", "project", ".agents", "pm"),
|
|
1507
|
+
trackerGlobalPmPath: path.join(sandboxRoot, "tracker", "global")
|
|
1508
|
+
};
|
|
1509
|
+
}
|
|
1510
|
+
async function initializeLinkedTestSandboxes(layout) {
|
|
1511
|
+
await runInit(void 0, { path: layout.schemaProjectPmPath });
|
|
1512
|
+
await runInit(void 0, { path: layout.schemaGlobalPmPath });
|
|
1513
|
+
await runInit(void 0, { path: layout.trackerProjectPmPath });
|
|
1514
|
+
await runInit(void 0, { path: layout.trackerGlobalPmPath });
|
|
1515
|
+
}
|
|
1516
|
+
async function seedLinkedTestSandboxesFromSource(layout, sourceRoots) {
|
|
1517
|
+
if (!sourceRoots) {
|
|
1518
|
+
return;
|
|
1519
|
+
}
|
|
1520
|
+
await seedLinkedTestSandbox(layout.schemaProjectPmPath, layout.schemaGlobalPmPath, sourceRoots);
|
|
1521
|
+
await seedLinkedTestSandbox(layout.trackerProjectPmPath, layout.trackerGlobalPmPath, sourceRoots);
|
|
1522
|
+
await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, layout.trackerProjectPmPath);
|
|
1523
|
+
await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, layout.trackerGlobalPmPath);
|
|
1524
|
+
}
|
|
1525
|
+
async function countLinkedTestSandboxItems(layout, sourceRoots) {
|
|
1526
|
+
return {
|
|
1527
|
+
sourceProjectItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.projectPmRoot) : 0,
|
|
1528
|
+
sourceGlobalItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.globalPmRoot) : 0,
|
|
1529
|
+
schemaProjectItemCount: await countLinkedTestItemFiles(layout.schemaProjectPmPath),
|
|
1530
|
+
schemaGlobalItemCount: await countLinkedTestItemFiles(layout.schemaGlobalPmPath),
|
|
1531
|
+
trackerProjectItemCount: await countLinkedTestItemFiles(layout.trackerProjectPmPath),
|
|
1532
|
+
trackerGlobalItemCount: await countLinkedTestItemFiles(layout.trackerGlobalPmPath)
|
|
1533
|
+
};
|
|
1534
|
+
}
|
|
1535
|
+
function buildLinkedTestExecutionContext(params) {
|
|
1536
|
+
const trackerMode = params.effectivePmContextMode === "tracker";
|
|
1537
|
+
const selectedSandboxProjectPmPath = trackerMode ? params.layout.trackerProjectPmPath : params.layout.schemaProjectPmPath;
|
|
1538
|
+
const selectedSandboxGlobalPmPath = trackerMode ? params.layout.trackerGlobalPmPath : params.layout.schemaGlobalPmPath;
|
|
1539
|
+
const selectedSandboxProjectItemCount = trackerMode ? params.counts.trackerProjectItemCount : params.counts.schemaProjectItemCount;
|
|
1540
|
+
const selectedSandboxGlobalItemCount = trackerMode ? params.counts.trackerGlobalItemCount : params.counts.schemaGlobalItemCount;
|
|
1541
|
+
return {
|
|
1542
|
+
requested_pm_context_mode: params.requestedPmContextMode,
|
|
1543
|
+
pm_context_mode: params.effectivePmContextMode,
|
|
1544
|
+
auto_pm_context_applied: params.autoPmContextApplied,
|
|
1545
|
+
is_pm_command: params.isPmCommand,
|
|
1546
|
+
is_pm_tracker_read_command: params.isPmTrackerReadCommand,
|
|
1547
|
+
source_project_pm_path: params.sourceRoots?.projectPmRoot ?? "",
|
|
1548
|
+
sandbox_project_pm_path: selectedSandboxProjectPmPath,
|
|
1549
|
+
source_global_pm_path: params.sourceRoots?.globalPmRoot ?? "",
|
|
1550
|
+
sandbox_global_pm_path: selectedSandboxGlobalPmPath,
|
|
1551
|
+
source_project_item_count: params.counts.sourceProjectItemCount,
|
|
1552
|
+
sandbox_project_item_count: selectedSandboxProjectItemCount,
|
|
1553
|
+
source_global_item_count: params.counts.sourceGlobalItemCount,
|
|
1554
|
+
sandbox_global_item_count: selectedSandboxGlobalItemCount,
|
|
1555
|
+
mismatch_detected: params.isPmCommand && params.counts.sourceProjectItemCount !== selectedSandboxProjectItemCount,
|
|
1556
|
+
project_extensions_seeded: Boolean(params.sourceRoots),
|
|
1557
|
+
global_extensions_seeded: Boolean(params.sourceRoots)
|
|
1558
|
+
};
|
|
1559
|
+
}
|
|
1560
|
+
function resolveLinkedTestCommandContext(params) {
|
|
1561
|
+
const linkedOverridePmContextMode = typeof params.linkedTest.pm_context_mode === "string" && params.linkedTest.pm_context_mode.trim().length > 0 ? parsePmContextMode(params.linkedTest.pm_context_mode) : void 0;
|
|
1562
|
+
const command = typeof params.linkedTest.command === "string" && params.linkedTest.command.length > 0 ? params.linkedTest.command : void 0;
|
|
1563
|
+
const isPmCommand = command ? commandInvokesPmCli(command) : false;
|
|
1564
|
+
const isPmTrackerReadCommand = isPmCommand && command ? commandInvokesPmTrackerReadCommand(command) : false;
|
|
1565
|
+
const autoPmContextApplied = params.options?.autoPmContext === true && isPmTrackerReadCommand;
|
|
1566
|
+
const requestedPmContextMode = autoPmContextApplied ? "auto" : resolveLinkedTestRequestedContextMode(params.linkedTest, params.runLevelPmContextMode, params.options?.overrideLinkedPmContext === true);
|
|
1567
|
+
const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
|
|
1568
|
+
return {
|
|
1569
|
+
linkedOverridePmContextMode,
|
|
1570
|
+
executionContext: buildLinkedTestExecutionContext({
|
|
1571
|
+
layout: params.layout,
|
|
1572
|
+
counts: params.counts,
|
|
1573
|
+
sourceRoots: params.sourceRoots,
|
|
1574
|
+
isPmCommand,
|
|
1575
|
+
isPmTrackerReadCommand,
|
|
1576
|
+
requestedPmContextMode,
|
|
1577
|
+
effectivePmContextMode,
|
|
1578
|
+
autoPmContextApplied
|
|
1579
|
+
})
|
|
1580
|
+
};
|
|
1581
|
+
}
|
|
1582
|
+
function buildLinkedTestSkippedResult(linkedTest, executionContext, error) {
|
|
1583
|
+
return {
|
|
1584
|
+
command: linkedTest.command,
|
|
1585
|
+
path: linkedTest.path,
|
|
1586
|
+
status: "skipped",
|
|
1587
|
+
execution_context: executionContext,
|
|
1588
|
+
error
|
|
1589
|
+
};
|
|
1590
|
+
}
|
|
1591
|
+
function buildLinkedTestAssertionFailureResult(linkedTest, executionContext, error, output) {
|
|
1592
|
+
return {
|
|
1593
|
+
command: linkedTest.command,
|
|
1594
|
+
path: linkedTest.path,
|
|
1595
|
+
status: "failed",
|
|
1596
|
+
exit_code: 1,
|
|
1597
|
+
failure_category: "assertion_failure",
|
|
1598
|
+
execution_context: executionContext,
|
|
1599
|
+
...output ? { stdout: output.stdout, stderr: output.stderr } : {},
|
|
1600
|
+
error
|
|
1601
|
+
};
|
|
1602
|
+
}
|
|
1603
|
+
function resolveLinkedTestPreflightResult(params) {
|
|
1604
|
+
if (!params.linkedTest.command) {
|
|
1605
|
+
return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, "No command configured for this linked test.");
|
|
1606
|
+
}
|
|
1607
|
+
const runtimeSafetySkipReason = getRuntimeSafetySkipReason(params.linkedTest.command);
|
|
1608
|
+
if (runtimeSafetySkipReason) {
|
|
1609
|
+
return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, runtimeSafetySkipReason);
|
|
1610
|
+
}
|
|
1611
|
+
const failOnMismatchByDefault = params.executionContext.pm_context_mode === "schema" && params.executionContext.is_pm_tracker_read_command && params.executionContext.mismatch_detected;
|
|
1612
|
+
const failOnMismatchByFlag = params.options?.failOnContextMismatch === true && params.executionContext.is_pm_command && params.executionContext.mismatch_detected;
|
|
1613
|
+
if (failOnMismatchByDefault || failOnMismatchByFlag) {
|
|
1614
|
+
const mismatchHint = buildPmContextMismatchHint({
|
|
1615
|
+
executionContext: params.executionContext,
|
|
1616
|
+
runLevelPmContextMode: params.runLevelPmContextMode,
|
|
1617
|
+
linkedOverridePmContextMode: params.linkedOverridePmContextMode
|
|
1618
|
+
});
|
|
1619
|
+
const mismatchPrefix = params.options?.checkContext === true ? "Linked test preflight PM context mismatch detected" : "Linked test PM context mismatch detected";
|
|
1620
|
+
return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `${mismatchPrefix} (source_project_items=${params.executionContext.source_project_item_count}, sandbox_project_items=${params.executionContext.sandbox_project_item_count}).${mismatchHint}`);
|
|
1621
|
+
}
|
|
1622
|
+
if (params.options?.requireAssertionsForPm === true && params.executionContext.is_pm_command && !hasLinkedTestAssertions(params.linkedTest)) {
|
|
1623
|
+
return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, "Linked PM command requires assertions when --require-assertions-for-pm is enabled.");
|
|
1624
|
+
}
|
|
1625
|
+
return null;
|
|
1626
|
+
}
|
|
1627
|
+
function buildLinkedTestExecutionEnv(params) {
|
|
1628
|
+
const effectiveDirectives = resolveEffectiveLinkedTestDirectives(params.runtimeDirectives, params.linkedTest);
|
|
1629
|
+
const executionEnv = { ...process.env };
|
|
1630
|
+
applyEnvDirectiveStage(executionEnv, params.runtimeDirectives);
|
|
1631
|
+
applyEnvDirectiveStage(executionEnv, {
|
|
1632
|
+
env_set: params.linkedTest.env_set ?? {},
|
|
1633
|
+
env_clear: params.linkedTest.env_clear ?? []
|
|
1634
|
+
});
|
|
1635
|
+
if (effectiveDirectives.shared_host_safe) {
|
|
1636
|
+
applySharedHostSafeDefaults(executionEnv);
|
|
1637
|
+
}
|
|
1638
|
+
executionEnv.FORCE_COLOR = "0";
|
|
1639
|
+
executionEnv.PM_PATH = params.executionContext.sandbox_project_pm_path;
|
|
1640
|
+
executionEnv.PM_GLOBAL_PATH = params.executionContext.sandbox_global_pm_path;
|
|
1641
|
+
return executionEnv;
|
|
1642
|
+
}
|
|
1643
|
+
function buildLinkedTestPassedResult(linkedTest, executionContext, execution) {
|
|
1644
|
+
return {
|
|
1645
|
+
command: linkedTest.command,
|
|
1646
|
+
path: linkedTest.path,
|
|
1647
|
+
status: "passed",
|
|
1648
|
+
exit_code: 0,
|
|
1649
|
+
execution_context: executionContext,
|
|
1650
|
+
stdout: execution.stdout,
|
|
1651
|
+
stderr: execution.stderr
|
|
1652
|
+
};
|
|
1653
|
+
}
|
|
1654
|
+
function buildLinkedTestEmptyRunResult(params) {
|
|
1655
|
+
return {
|
|
1656
|
+
command: params.linkedTest.command,
|
|
1657
|
+
path: params.linkedTest.path,
|
|
1658
|
+
status: "failed",
|
|
1659
|
+
exit_code: 1,
|
|
1660
|
+
failure_category: "empty_run",
|
|
1661
|
+
execution_context: params.executionContext,
|
|
1662
|
+
stdout: params.execution.stdout,
|
|
1663
|
+
stderr: params.execution.stderr,
|
|
1664
|
+
error: `Linked test reported an empty test run (${params.emptyRunSignal}) while --fail-on-empty-test-run is enabled. Update test selection or disable --fail-on-empty-test-run for this run.`
|
|
1665
|
+
};
|
|
1666
|
+
}
|
|
1667
|
+
function buildLinkedTestCommandFailureResult(params) {
|
|
1668
|
+
return {
|
|
1669
|
+
command: params.linkedTest.command,
|
|
1670
|
+
path: params.linkedTest.path,
|
|
1671
|
+
status: "failed",
|
|
1672
|
+
exit_code: resolveLinkedTestFailureExitCode(params.execution),
|
|
1673
|
+
failure_category: classifyLinkedTestFailure(params.execution),
|
|
1674
|
+
execution_context: params.executionContext,
|
|
1675
|
+
stdout: params.execution.stdout,
|
|
1676
|
+
stderr: params.execution.stderr,
|
|
1677
|
+
error: formatLinkedTestExecutionError(params.execution, params.timeoutMs)
|
|
1678
|
+
};
|
|
1679
|
+
}
|
|
1680
|
+
function buildLinkedTestPassedExecutionResult(params) {
|
|
1681
|
+
if (params.options?.failOnEmptyTestRun === true) {
|
|
1682
|
+
const emptyRunSignal = detectEmptyLinkedTestRun(params.execution.stdout, params.execution.stderr);
|
|
1683
|
+
if (emptyRunSignal) {
|
|
1684
|
+
return buildLinkedTestEmptyRunResult({ ...params, emptyRunSignal });
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
const assertionFailures = evaluateLinkedTestAssertions(params.linkedTest, params.execution.stdout, params.execution.stderr);
|
|
1688
|
+
if (assertionFailures.length > 0) {
|
|
1689
|
+
return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`, params.execution);
|
|
1690
|
+
}
|
|
1691
|
+
return buildLinkedTestPassedResult(params.linkedTest, params.executionContext, params.execution);
|
|
1692
|
+
}
|
|
1693
|
+
async function runSingleLinkedTest(params) {
|
|
1694
|
+
const command = params.linkedTest.command ?? "";
|
|
1695
|
+
const timeoutMs = (params.linkedTest.timeout_seconds ?? params.defaultTimeoutSeconds ?? 120) * 1e3;
|
|
1696
|
+
const execution = await runLinkedTestCommand(command, timeoutMs, buildLinkedTestExecutionEnv(params), {
|
|
1697
|
+
index: params.index + 1,
|
|
1698
|
+
total: params.total,
|
|
1699
|
+
timeoutMs,
|
|
1700
|
+
command
|
|
1701
|
+
}, params.progressMode);
|
|
1702
|
+
const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
|
|
1703
|
+
return passed ? buildLinkedTestPassedExecutionResult({ ...params, execution }) : buildLinkedTestCommandFailureResult({ ...params, execution, timeoutMs });
|
|
1704
|
+
}
|
|
1501
1705
|
async function runLinkedTests(tests, defaultTimeoutSeconds, options) {
|
|
1502
1706
|
const results = [];
|
|
1503
1707
|
const sandboxRoot = await mkdtemp(path.join(tmpdir(), "pm-linked-test-"));
|
|
1504
|
-
const
|
|
1505
|
-
const schemaSandboxGlobalPath = path.join(sandboxRoot, "schema", "global");
|
|
1506
|
-
const trackerSandboxPmPath = path.join(sandboxRoot, "tracker", "project", ".agents", "pm");
|
|
1507
|
-
const trackerSandboxGlobalPath = path.join(sandboxRoot, "tracker", "global");
|
|
1708
|
+
const layout = createLinkedTestSandboxLayout(sandboxRoot);
|
|
1508
1709
|
const runLevelPmContextMode = parsePmContextMode(options?.pmContext);
|
|
1509
1710
|
const progressMode = options?.progress === true ? "always" : "auto";
|
|
1510
1711
|
const runtimeDirectives = resolveRuntimeDirectives(options?.envSet, options?.envClear, options?.sharedHostSafe);
|
|
1511
|
-
let sourceProjectItemCount = 0;
|
|
1512
|
-
let sourceGlobalItemCount = 0;
|
|
1513
|
-
let schemaSandboxProjectItemCount = 0;
|
|
1514
|
-
let schemaSandboxGlobalItemCount = 0;
|
|
1515
|
-
let trackerSandboxProjectItemCount = 0;
|
|
1516
|
-
let trackerSandboxGlobalItemCount = 0;
|
|
1517
1712
|
const sourceRoots = options?.sourceRoots;
|
|
1518
|
-
const projectExtensionsSeeded = Boolean(sourceRoots);
|
|
1519
|
-
const globalExtensionsSeeded = Boolean(sourceRoots);
|
|
1520
1713
|
try {
|
|
1521
|
-
await
|
|
1522
|
-
await
|
|
1523
|
-
await
|
|
1524
|
-
await runInit(void 0, { path: trackerSandboxGlobalPath });
|
|
1525
|
-
if (sourceRoots) {
|
|
1526
|
-
await seedLinkedTestSandbox(schemaSandboxPmPath, schemaSandboxGlobalPath, sourceRoots);
|
|
1527
|
-
await seedLinkedTestSandbox(trackerSandboxPmPath, trackerSandboxGlobalPath, sourceRoots);
|
|
1528
|
-
await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, trackerSandboxPmPath);
|
|
1529
|
-
await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, trackerSandboxGlobalPath);
|
|
1530
|
-
sourceProjectItemCount = await countLinkedTestItemFiles(sourceRoots.projectPmRoot);
|
|
1531
|
-
sourceGlobalItemCount = await countLinkedTestItemFiles(sourceRoots.globalPmRoot);
|
|
1532
|
-
}
|
|
1533
|
-
schemaSandboxProjectItemCount = await countLinkedTestItemFiles(schemaSandboxPmPath);
|
|
1534
|
-
schemaSandboxGlobalItemCount = await countLinkedTestItemFiles(schemaSandboxGlobalPath);
|
|
1535
|
-
trackerSandboxProjectItemCount = await countLinkedTestItemFiles(trackerSandboxPmPath);
|
|
1536
|
-
trackerSandboxGlobalItemCount = await countLinkedTestItemFiles(trackerSandboxGlobalPath);
|
|
1537
|
-
const buildExecutionContext = (isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied) => {
|
|
1538
|
-
const selectedSandboxProjectPmPath = effectivePmContextMode === "tracker" ? trackerSandboxPmPath : schemaSandboxPmPath;
|
|
1539
|
-
const selectedSandboxGlobalPmPath = effectivePmContextMode === "tracker" ? trackerSandboxGlobalPath : schemaSandboxGlobalPath;
|
|
1540
|
-
const selectedSandboxProjectItemCount = effectivePmContextMode === "tracker" ? trackerSandboxProjectItemCount : schemaSandboxProjectItemCount;
|
|
1541
|
-
const selectedSandboxGlobalItemCount = effectivePmContextMode === "tracker" ? trackerSandboxGlobalItemCount : schemaSandboxGlobalItemCount;
|
|
1542
|
-
const mismatchDetected = isPmCommand && sourceProjectItemCount !== selectedSandboxProjectItemCount;
|
|
1543
|
-
return {
|
|
1544
|
-
requested_pm_context_mode: requestedPmContextMode,
|
|
1545
|
-
pm_context_mode: effectivePmContextMode,
|
|
1546
|
-
auto_pm_context_applied: autoPmContextApplied,
|
|
1547
|
-
is_pm_command: isPmCommand,
|
|
1548
|
-
is_pm_tracker_read_command: isPmTrackerReadCommand,
|
|
1549
|
-
source_project_pm_path: sourceRoots?.projectPmRoot ?? "",
|
|
1550
|
-
sandbox_project_pm_path: selectedSandboxProjectPmPath,
|
|
1551
|
-
source_global_pm_path: sourceRoots?.globalPmRoot ?? "",
|
|
1552
|
-
sandbox_global_pm_path: selectedSandboxGlobalPmPath,
|
|
1553
|
-
source_project_item_count: sourceProjectItemCount,
|
|
1554
|
-
sandbox_project_item_count: selectedSandboxProjectItemCount,
|
|
1555
|
-
source_global_item_count: sourceGlobalItemCount,
|
|
1556
|
-
sandbox_global_item_count: selectedSandboxGlobalItemCount,
|
|
1557
|
-
mismatch_detected: mismatchDetected,
|
|
1558
|
-
project_extensions_seeded: projectExtensionsSeeded,
|
|
1559
|
-
global_extensions_seeded: globalExtensionsSeeded
|
|
1560
|
-
};
|
|
1561
|
-
};
|
|
1714
|
+
await initializeLinkedTestSandboxes(layout);
|
|
1715
|
+
await seedLinkedTestSandboxesFromSource(layout, sourceRoots);
|
|
1716
|
+
const counts = await countLinkedTestSandboxItems(layout, sourceRoots);
|
|
1562
1717
|
for (let index = 0; index < tests.length; index += 1) {
|
|
1563
1718
|
const linkedTest = tests[index];
|
|
1564
|
-
const
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
if (!linkedTest.command) {
|
|
1572
|
-
results.push({
|
|
1573
|
-
command: linkedTest.command,
|
|
1574
|
-
path: linkedTest.path,
|
|
1575
|
-
status: "skipped",
|
|
1576
|
-
execution_context: executionContext,
|
|
1577
|
-
error: "No command configured for this linked test."
|
|
1578
|
-
});
|
|
1579
|
-
continue;
|
|
1580
|
-
}
|
|
1581
|
-
const runtimeSafetySkipReason = getRuntimeSafetySkipReason(linkedTest.command);
|
|
1582
|
-
if (runtimeSafetySkipReason) {
|
|
1583
|
-
results.push({
|
|
1584
|
-
command: linkedTest.command,
|
|
1585
|
-
path: linkedTest.path,
|
|
1586
|
-
status: "skipped",
|
|
1587
|
-
execution_context: executionContext,
|
|
1588
|
-
error: runtimeSafetySkipReason
|
|
1589
|
-
});
|
|
1590
|
-
continue;
|
|
1591
|
-
}
|
|
1592
|
-
const failOnMismatchByDefault = executionContext.pm_context_mode === "schema" && executionContext.is_pm_tracker_read_command && executionContext.mismatch_detected;
|
|
1593
|
-
const failOnMismatchByFlag = options?.failOnContextMismatch === true && executionContext.is_pm_command && executionContext.mismatch_detected;
|
|
1594
|
-
if (failOnMismatchByDefault || failOnMismatchByFlag) {
|
|
1595
|
-
const mismatchHint = buildPmContextMismatchHint({
|
|
1596
|
-
executionContext,
|
|
1597
|
-
runLevelPmContextMode,
|
|
1598
|
-
linkedOverridePmContextMode
|
|
1599
|
-
});
|
|
1600
|
-
const mismatchPrefix = options?.checkContext === true ? "Linked test preflight PM context mismatch detected" : "Linked test PM context mismatch detected";
|
|
1601
|
-
results.push({
|
|
1602
|
-
command: linkedTest.command,
|
|
1603
|
-
path: linkedTest.path,
|
|
1604
|
-
status: "failed",
|
|
1605
|
-
exit_code: 1,
|
|
1606
|
-
failure_category: "assertion_failure",
|
|
1607
|
-
execution_context: executionContext,
|
|
1608
|
-
error: `${mismatchPrefix} (source_project_items=${executionContext.source_project_item_count}, sandbox_project_items=${executionContext.sandbox_project_item_count}).${mismatchHint}`
|
|
1609
|
-
});
|
|
1610
|
-
continue;
|
|
1611
|
-
}
|
|
1612
|
-
if (options?.requireAssertionsForPm === true && executionContext.is_pm_command && !hasLinkedTestAssertions(linkedTest)) {
|
|
1613
|
-
results.push({
|
|
1614
|
-
command: linkedTest.command,
|
|
1615
|
-
path: linkedTest.path,
|
|
1616
|
-
status: "failed",
|
|
1617
|
-
exit_code: 1,
|
|
1618
|
-
failure_category: "assertion_failure",
|
|
1619
|
-
execution_context: executionContext,
|
|
1620
|
-
error: "Linked PM command requires assertions when --require-assertions-for-pm is enabled."
|
|
1621
|
-
});
|
|
1622
|
-
continue;
|
|
1623
|
-
}
|
|
1624
|
-
const timeoutMs = (linkedTest.timeout_seconds ?? defaultTimeoutSeconds ?? 120) * 1e3;
|
|
1625
|
-
const effectiveDirectives = resolveEffectiveLinkedTestDirectives(runtimeDirectives, linkedTest);
|
|
1626
|
-
const executionEnv = { ...process.env };
|
|
1627
|
-
applyEnvDirectiveStage(executionEnv, runtimeDirectives);
|
|
1628
|
-
applyEnvDirectiveStage(executionEnv, {
|
|
1629
|
-
env_set: linkedTest.env_set ?? {},
|
|
1630
|
-
env_clear: linkedTest.env_clear ?? []
|
|
1719
|
+
const commandContext = resolveLinkedTestCommandContext({
|
|
1720
|
+
linkedTest,
|
|
1721
|
+
layout,
|
|
1722
|
+
counts,
|
|
1723
|
+
sourceRoots,
|
|
1724
|
+
runLevelPmContextMode,
|
|
1725
|
+
options
|
|
1631
1726
|
});
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
timeoutMs,
|
|
1642
|
-
command: linkedTest.command
|
|
1643
|
-
}, progressMode);
|
|
1644
|
-
const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
|
|
1645
|
-
if (passed) {
|
|
1646
|
-
if (options?.failOnEmptyTestRun === true) {
|
|
1647
|
-
const emptyRunSignal = detectEmptyLinkedTestRun(execution.stdout, execution.stderr);
|
|
1648
|
-
if (emptyRunSignal) {
|
|
1649
|
-
results.push({
|
|
1650
|
-
command: linkedTest.command,
|
|
1651
|
-
path: linkedTest.path,
|
|
1652
|
-
status: "failed",
|
|
1653
|
-
exit_code: 1,
|
|
1654
|
-
failure_category: "empty_run",
|
|
1655
|
-
execution_context: executionContext,
|
|
1656
|
-
stdout: execution.stdout,
|
|
1657
|
-
stderr: execution.stderr,
|
|
1658
|
-
error: `Linked test reported an empty test run (${emptyRunSignal}) while --fail-on-empty-test-run is enabled. Update test selection or disable --fail-on-empty-test-run for this run.`
|
|
1659
|
-
});
|
|
1660
|
-
continue;
|
|
1661
|
-
}
|
|
1662
|
-
}
|
|
1663
|
-
const assertionFailures = evaluateLinkedTestAssertions(linkedTest, execution.stdout, execution.stderr);
|
|
1664
|
-
if (assertionFailures.length > 0) {
|
|
1665
|
-
results.push({
|
|
1666
|
-
command: linkedTest.command,
|
|
1667
|
-
path: linkedTest.path,
|
|
1668
|
-
status: "failed",
|
|
1669
|
-
exit_code: 1,
|
|
1670
|
-
failure_category: "assertion_failure",
|
|
1671
|
-
execution_context: executionContext,
|
|
1672
|
-
stdout: execution.stdout,
|
|
1673
|
-
stderr: execution.stderr,
|
|
1674
|
-
error: `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`
|
|
1675
|
-
});
|
|
1676
|
-
continue;
|
|
1677
|
-
}
|
|
1678
|
-
results.push({
|
|
1679
|
-
command: linkedTest.command,
|
|
1680
|
-
path: linkedTest.path,
|
|
1681
|
-
status: "passed",
|
|
1682
|
-
exit_code: 0,
|
|
1683
|
-
execution_context: executionContext,
|
|
1684
|
-
stdout: execution.stdout,
|
|
1685
|
-
stderr: execution.stderr
|
|
1686
|
-
});
|
|
1727
|
+
const preflightResult = resolveLinkedTestPreflightResult({
|
|
1728
|
+
linkedTest,
|
|
1729
|
+
executionContext: commandContext.executionContext,
|
|
1730
|
+
runLevelPmContextMode,
|
|
1731
|
+
linkedOverridePmContextMode: commandContext.linkedOverridePmContextMode,
|
|
1732
|
+
options
|
|
1733
|
+
});
|
|
1734
|
+
if (preflightResult) {
|
|
1735
|
+
results.push(preflightResult);
|
|
1687
1736
|
continue;
|
|
1688
1737
|
}
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
error: formatLinkedTestExecutionError(execution, timeoutMs)
|
|
1700
|
-
});
|
|
1738
|
+
results.push(await runSingleLinkedTest({
|
|
1739
|
+
linkedTest,
|
|
1740
|
+
index,
|
|
1741
|
+
total: tests.length,
|
|
1742
|
+
defaultTimeoutSeconds,
|
|
1743
|
+
runtimeDirectives,
|
|
1744
|
+
progressMode,
|
|
1745
|
+
executionContext: commandContext.executionContext,
|
|
1746
|
+
options
|
|
1747
|
+
}));
|
|
1701
1748
|
}
|
|
1702
1749
|
} finally {
|
|
1703
|
-
await rm(
|
|
1750
|
+
await rm(layout.root, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
|
|
1704
1751
|
}
|
|
1705
1752
|
return results;
|
|
1706
1753
|
}
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
}
|
|
1713
|
-
const settings = await readSettings(pmRoot);
|
|
1714
|
-
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
1715
|
-
const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
|
|
1716
|
-
const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
|
|
1717
|
-
const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
|
|
1718
|
-
const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
|
|
1719
|
-
const removes = parseRemoveEntries(resolvedRemoves);
|
|
1720
|
-
const shouldMutate = adds.length > 0 || removes.length > 0;
|
|
1721
|
-
let tests = [];
|
|
1722
|
-
let itemId;
|
|
1723
|
-
let changed = false;
|
|
1724
|
-
if (shouldMutate) {
|
|
1725
|
-
const author = resolveAuthor(options.author, settings.author_default);
|
|
1726
|
-
const result = await mutateItem({
|
|
1727
|
-
pmRoot,
|
|
1728
|
-
settings,
|
|
1729
|
-
id,
|
|
1730
|
-
op: "tests_add",
|
|
1731
|
-
author,
|
|
1732
|
-
message: options.message,
|
|
1733
|
-
force: options.force,
|
|
1734
|
-
skipNoop: true,
|
|
1735
|
-
mutate(document) {
|
|
1736
|
-
const previous = document.metadata.tests ?? [];
|
|
1737
|
-
const next = [...document.metadata.tests ?? []];
|
|
1738
|
-
for (const add of adds) {
|
|
1739
|
-
const exists = next.some((entry) => entry.command === add.command && entry.path === add.path && entry.scope === add.scope && entry.pm_context_mode === add.pm_context_mode);
|
|
1740
|
-
if (!exists) {
|
|
1741
|
-
next.push(add);
|
|
1742
|
-
}
|
|
1743
|
-
}
|
|
1744
|
-
if (removes.length > 0) {
|
|
1745
|
-
for (let i = next.length - 1; i >= 0; i -= 1) {
|
|
1746
|
-
const entry = next[i];
|
|
1747
|
-
if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
|
|
1748
|
-
next.splice(i, 1);
|
|
1749
|
-
}
|
|
1750
|
-
}
|
|
1751
|
-
}
|
|
1752
|
-
document.metadata.tests = next;
|
|
1753
|
-
return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
|
|
1754
|
-
}
|
|
1755
|
-
});
|
|
1756
|
-
tests = result.item.tests ?? [];
|
|
1757
|
-
itemId = result.item.id;
|
|
1758
|
-
changed = result.changedFields.length > 0;
|
|
1759
|
-
} else {
|
|
1760
|
-
const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
1761
|
-
if (!located) {
|
|
1762
|
-
throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
|
|
1763
|
-
}
|
|
1764
|
-
itemId = located.id;
|
|
1765
|
-
const loaded = await readLocatedItem(located, { schema: settings.schema });
|
|
1766
|
-
tests = loaded.document.metadata.tests ?? [];
|
|
1767
|
-
}
|
|
1768
|
-
let defaultTimeoutSeconds;
|
|
1769
|
-
if (options.timeout !== void 0) {
|
|
1770
|
-
defaultTimeoutSeconds = parseOptionalNumber(options.timeout, "timeout");
|
|
1771
|
-
}
|
|
1772
|
-
const pmContextMode = parsePmContextMode(options.pmContext);
|
|
1773
|
-
const hasRuntimeDirectiveFlags = (options.envSet?.length ?? 0) > 0 || (options.envClear?.length ?? 0) > 0 || options.sharedHostSafe === true || options.pmContext !== void 0 || options.overrideLinkedPmContext === true || options.failOnContextMismatch === true || options.failOnSkipped === true || options.failOnEmptyTestRun === true || options.requireAssertionsForPm === true || options.checkContext === true || options.autoPmContext === true;
|
|
1774
|
-
if (hasRuntimeDirectiveFlags && options.run !== true) {
|
|
1754
|
+
function hasTestRuntimeDirectiveFlags(options) {
|
|
1755
|
+
return (options.envSet?.length ?? 0) > 0 || (options.envClear?.length ?? 0) > 0 || options.sharedHostSafe === true || options.pmContext !== void 0 || options.overrideLinkedPmContext === true || options.failOnContextMismatch === true || options.failOnSkipped === true || options.failOnEmptyTestRun === true || options.requireAssertionsForPm === true || options.checkContext === true || options.autoPmContext === true;
|
|
1756
|
+
}
|
|
1757
|
+
function assertTestRunFlagUsage(options) {
|
|
1758
|
+
if (hasTestRuntimeDirectiveFlags(options) && options.run !== true) {
|
|
1775
1759
|
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);
|
|
1776
1760
|
}
|
|
1777
1761
|
const hasSelectorFlags = options.match !== void 0 || options.onlyIndex !== void 0 || options.onlyLast === true;
|
|
1778
1762
|
if (hasSelectorFlags && options.run !== true) {
|
|
1779
1763
|
throw new PmCliError("--match, --only-index, and --only-last require --run", EXIT_CODE.USAGE);
|
|
1780
1764
|
}
|
|
1765
|
+
}
|
|
1766
|
+
async function resolveLinkedTestItem(params) {
|
|
1767
|
+
const { id, options, pmRoot, settings, typeToFolder, adds, removes } = params;
|
|
1768
|
+
if (adds.length === 0 && removes.length === 0) {
|
|
1769
|
+
const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeToFolder);
|
|
1770
|
+
if (!located) {
|
|
1771
|
+
throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
|
|
1772
|
+
}
|
|
1773
|
+
const loaded = await readLocatedItem(located, { schema: settings.schema });
|
|
1774
|
+
return { itemId: located.id, tests: loaded.document.metadata.tests ?? [], changed: false };
|
|
1775
|
+
}
|
|
1776
|
+
const result = await mutateItem({
|
|
1777
|
+
pmRoot,
|
|
1778
|
+
settings,
|
|
1779
|
+
id,
|
|
1780
|
+
op: "tests_add",
|
|
1781
|
+
author: resolveAuthor(options.author, settings.author_default),
|
|
1782
|
+
message: options.message,
|
|
1783
|
+
force: options.force,
|
|
1784
|
+
skipNoop: true,
|
|
1785
|
+
mutate(document) {
|
|
1786
|
+
const previous = document.metadata.tests ?? [];
|
|
1787
|
+
const next = [...previous];
|
|
1788
|
+
for (const add of adds) {
|
|
1789
|
+
const exists = next.some((entry) => entry.command === add.command && entry.path === add.path && entry.scope === add.scope && entry.pm_context_mode === add.pm_context_mode);
|
|
1790
|
+
if (!exists) {
|
|
1791
|
+
next.push(add);
|
|
1792
|
+
}
|
|
1793
|
+
}
|
|
1794
|
+
if (removes.length > 0) {
|
|
1795
|
+
for (let i = next.length - 1; i >= 0; i -= 1) {
|
|
1796
|
+
const entry = next[i];
|
|
1797
|
+
if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
|
|
1798
|
+
next.splice(i, 1);
|
|
1799
|
+
}
|
|
1800
|
+
}
|
|
1801
|
+
}
|
|
1802
|
+
document.metadata.tests = next;
|
|
1803
|
+
return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
|
|
1804
|
+
}
|
|
1805
|
+
});
|
|
1806
|
+
return {
|
|
1807
|
+
itemId: result.item.id,
|
|
1808
|
+
tests: result.item.tests ?? [],
|
|
1809
|
+
changed: result.changedFields.length > 0
|
|
1810
|
+
};
|
|
1811
|
+
}
|
|
1812
|
+
function resolveTestRunOptions(options, tests) {
|
|
1813
|
+
assertTestRunFlagUsage(options);
|
|
1781
1814
|
const selectorInput = {
|
|
1782
1815
|
match: options.match,
|
|
1783
1816
|
onlyIndex: options.onlyIndex === void 0 ? void 0 : parseOnlyIndexValue(options.onlyIndex),
|
|
1784
1817
|
onlyLast: options.onlyLast
|
|
1785
1818
|
};
|
|
1786
1819
|
const runSelection = options.run === true ? resolveLinkedTestRunSelection(tests, selectorInput) : void 0;
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1820
|
+
return {
|
|
1821
|
+
defaultTimeoutSeconds: options.timeout === void 0 ? void 0 : parseOptionalNumber(options.timeout, "timeout"),
|
|
1822
|
+
pmContextMode: parsePmContextMode(options.pmContext),
|
|
1823
|
+
runSelection,
|
|
1824
|
+
testsToRun: runSelection?.selected ?? tests
|
|
1825
|
+
};
|
|
1826
|
+
}
|
|
1827
|
+
async function executeSelectedLinkedTests(params) {
|
|
1828
|
+
const { options, runOptions, pmRoot } = params;
|
|
1829
|
+
if (options.run !== true) {
|
|
1830
|
+
return [];
|
|
1831
|
+
}
|
|
1832
|
+
return await runLinkedTests(runOptions.testsToRun, runOptions.defaultTimeoutSeconds, {
|
|
1790
1833
|
progress: options.progress,
|
|
1791
1834
|
envSet: options.envSet,
|
|
1792
1835
|
envClear: options.envClear,
|
|
1793
1836
|
sharedHostSafe: options.sharedHostSafe,
|
|
1794
|
-
pmContext: pmContextMode,
|
|
1837
|
+
pmContext: runOptions.pmContextMode,
|
|
1795
1838
|
overrideLinkedPmContext: options.overrideLinkedPmContext,
|
|
1796
1839
|
failOnContextMismatch: options.failOnContextMismatch,
|
|
1797
1840
|
failOnEmptyTestRun: options.failOnEmptyTestRun,
|
|
@@ -1802,9 +1845,9 @@ async function runTest(id, options, global2) {
|
|
|
1802
1845
|
projectPmRoot: pmRoot,
|
|
1803
1846
|
globalPmRoot: resolveGlobalPmRoot(process.cwd())
|
|
1804
1847
|
}
|
|
1805
|
-
})
|
|
1806
|
-
|
|
1807
|
-
|
|
1848
|
+
});
|
|
1849
|
+
}
|
|
1850
|
+
function buildTestWarnings(options, runSelection, runResults) {
|
|
1808
1851
|
const warnings = [];
|
|
1809
1852
|
if (runSelection && runSelection.selector !== null) {
|
|
1810
1853
|
warnings.push(`linked_test_selection:${runSelection.selector}=${runSelection.requested};selected=${runSelection.selected_count};skipped=${runSelection.skipped_count};indexes=${runSelection.selected_indexes.join(",")}`);
|
|
@@ -1813,55 +1856,90 @@ async function runTest(id, options, global2) {
|
|
|
1813
1856
|
const preflight = summarizeContextPreflight(runResults);
|
|
1814
1857
|
warnings.push(`context_preflight:checked_pm_commands=${preflight.checked_pm_commands};tracker_read_commands=${preflight.tracker_read_commands};mismatches=${preflight.mismatches};auto_remediated=${preflight.auto_remediated}`);
|
|
1815
1858
|
}
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1859
|
+
return warnings;
|
|
1860
|
+
}
|
|
1861
|
+
async function recordTestRunSummary(params) {
|
|
1862
|
+
const { options, pmRoot, settings, itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings } = params;
|
|
1863
|
+
if (options.run !== true || !runStartedAt || settings.testing.record_results_to_items !== true) {
|
|
1864
|
+
return;
|
|
1865
|
+
}
|
|
1866
|
+
const summary = summarizeRunResultStatuses(runResults);
|
|
1867
|
+
const trackedRunId = resolveTrackedRunId("test");
|
|
1868
|
+
const attemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
|
|
1869
|
+
const parsedAttempt = attemptRaw ? Number.parseInt(attemptRaw, 10) : Number.NaN;
|
|
1870
|
+
const resumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
|
|
1871
|
+
try {
|
|
1872
|
+
await appendTrackedTestRunSummary({
|
|
1873
|
+
pmRoot,
|
|
1874
|
+
settings,
|
|
1875
|
+
itemId,
|
|
1876
|
+
author: resolveAuthor(options.author, settings.author_default),
|
|
1877
|
+
message: `Track test run summary (${trackedRunId})`,
|
|
1878
|
+
entry: {
|
|
1879
|
+
run_id: trackedRunId,
|
|
1880
|
+
kind: "test",
|
|
1881
|
+
status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
|
|
1882
|
+
started_at: runStartedAt,
|
|
1883
|
+
finished_at: nowIso(),
|
|
1884
|
+
recorded_at: nowIso(),
|
|
1885
|
+
attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : void 0,
|
|
1886
|
+
resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : void 0,
|
|
1887
|
+
passed: summary.passed,
|
|
1888
|
+
failed: summary.failed,
|
|
1889
|
+
skipped: summary.skipped,
|
|
1890
|
+
fail_on_skipped_triggered: failOnSkippedTriggered ? true : void 0
|
|
1891
|
+
}
|
|
1892
|
+
});
|
|
1893
|
+
} catch (error) {
|
|
1894
|
+
warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
|
|
1847
1895
|
}
|
|
1896
|
+
}
|
|
1897
|
+
async function runTest(id, options, global2) {
|
|
1898
|
+
const stdinResolver = createStdinTokenResolver();
|
|
1899
|
+
const pmRoot = resolvePmRoot(process.cwd(), global2.path);
|
|
1900
|
+
if (!await pathExists(getSettingsPath(pmRoot))) {
|
|
1901
|
+
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
1902
|
+
}
|
|
1903
|
+
const settings = await readSettings(pmRoot);
|
|
1904
|
+
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
1905
|
+
const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
|
|
1906
|
+
const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
|
|
1907
|
+
const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
|
|
1908
|
+
const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
|
|
1909
|
+
const removes = parseRemoveEntries(resolvedRemoves);
|
|
1910
|
+
const item = await resolveLinkedTestItem({
|
|
1911
|
+
id,
|
|
1912
|
+
options,
|
|
1913
|
+
pmRoot,
|
|
1914
|
+
settings,
|
|
1915
|
+
typeToFolder: typeRegistry.type_to_folder,
|
|
1916
|
+
adds,
|
|
1917
|
+
removes
|
|
1918
|
+
});
|
|
1919
|
+
const runOptions = resolveTestRunOptions(options, item.tests);
|
|
1920
|
+
const runStartedAt = options.run === true ? nowIso() : void 0;
|
|
1921
|
+
const runResults = await executeSelectedLinkedTests({ options, runOptions, pmRoot });
|
|
1922
|
+
const failureCategories = countFailureCategories(runResults);
|
|
1923
|
+
const failOnSkippedTriggered = options.run === true && options.failOnSkipped === true && runResults.some((entry) => entry.status === "skipped");
|
|
1924
|
+
const warnings = buildTestWarnings(options, runOptions.runSelection, runResults);
|
|
1925
|
+
await recordTestRunSummary({ options, pmRoot, settings, itemId: item.itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings });
|
|
1848
1926
|
return {
|
|
1849
1927
|
ok: runResults.every((entry) => entry.status !== "failed") && failOnSkippedTriggered !== true,
|
|
1850
|
-
id: itemId,
|
|
1851
|
-
tests,
|
|
1928
|
+
id: item.itemId,
|
|
1929
|
+
tests: item.tests,
|
|
1852
1930
|
run_results: runResults,
|
|
1853
1931
|
failure_categories: failureCategories,
|
|
1854
|
-
selection: runSelection ? {
|
|
1855
|
-
selector: runSelection.selector,
|
|
1856
|
-
requested: runSelection.requested,
|
|
1857
|
-
selected_indexes: runSelection.selected_indexes,
|
|
1858
|
-
selected_count: runSelection.selected_count,
|
|
1859
|
-
skipped_count: runSelection.skipped_count
|
|
1932
|
+
selection: runOptions.runSelection ? {
|
|
1933
|
+
selector: runOptions.runSelection.selector,
|
|
1934
|
+
requested: runOptions.runSelection.requested,
|
|
1935
|
+
selected_indexes: runOptions.runSelection.selected_indexes,
|
|
1936
|
+
selected_count: runOptions.runSelection.selected_count,
|
|
1937
|
+
skipped_count: runOptions.runSelection.skipped_count
|
|
1860
1938
|
} : void 0,
|
|
1861
1939
|
fail_on_skipped_triggered: failOnSkippedTriggered ? true : void 0,
|
|
1862
1940
|
warnings: warnings.length > 0 ? warnings : void 0,
|
|
1863
|
-
changed,
|
|
1864
|
-
count: tests.length
|
|
1941
|
+
changed: item.changed,
|
|
1942
|
+
count: item.tests.length
|
|
1865
1943
|
};
|
|
1866
1944
|
}
|
|
1867
1945
|
var _testOnlyTestCommand = {
|
|
@@ -1902,4 +1980,4 @@ export {
|
|
|
1902
1980
|
runTest,
|
|
1903
1981
|
_testOnlyTestCommand
|
|
1904
1982
|
};
|
|
1905
|
-
//# sourceMappingURL=chunk-
|
|
1983
|
+
//# sourceMappingURL=chunk-YPWUSH72.js.map
|