@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
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../../../../cli/commands/plan.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @module cli/commands/plan\n *\n * Implements the pm plan command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry, resolveTypeName } from \"../../core/item/type-registry.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { splitCommaList } from \"../../core/shared/split-comma-list.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { locateItem, mutateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type {\n DependencyKind,\n ItemDocument,\n ItemMetadata,\n PlanDecision,\n PlanDiscovery,\n PlanHarness,\n PlanMode,\n PlanStep,\n PlanStepDoc,\n PlanStepFile,\n PlanStepLink,\n PlanStepLinkKind,\n PlanStepStatus,\n PlanStepTest,\n PlanValidationCheck,\n} from \"../../types/index.js\";\nimport {\n PLAN_HARNESS_VALUES,\n PLAN_MODE_VALUES,\n PLAN_STEP_LINK_KIND_VALUES,\n PLAN_STEP_STATUS_VALUES,\n} from \"../../types/index.js\";\nimport { runCreate, type CreateCommandOptions, type CreateResult } from \"./create.js\";\n\nexport const PLAN_SUBCOMMANDS = [\n \"create\",\n \"show\",\n \"add-step\",\n \"update-step\",\n \"complete-step\",\n \"block-step\",\n \"reorder-step\",\n \"remove-step\",\n \"link\",\n \"unlink\",\n \"decision\",\n \"discovery\",\n \"validation\",\n \"resume\",\n \"approve\",\n \"materialize\",\n] as const;\n/**\n * Restricts plan subcommand values accepted by command, SDK, and storage contracts.\n */\nexport type PlanSubcommand = (typeof PLAN_SUBCOMMANDS)[number];\n\nexport const PLAN_SHOW_DEPTH_VALUES = [\"brief\", \"standard\", \"deep\"] as const;\n/**\n * Restricts plan show depth values accepted by command, SDK, and storage contracts.\n */\nexport type PlanShowDepth = (typeof PLAN_SHOW_DEPTH_VALUES)[number];\n\n/**\n * Documents the plan command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanCommandOptions {\n title?: string;\n description?: string;\n scope?: string;\n parent?: string;\n related?: string | string[];\n blocks?: string | string[];\n blockedBy?: string | string[];\n harness?: string;\n mode?: string;\n resumeContext?: string;\n tags?: string;\n priority?: string;\n body?: string;\n claim?: boolean;\n fromSearch?: string;\n stepTitle?: string;\n /**\n * pm-6mit: repeatable --step values. On create each value seeds one ordered\n * step (argv order; values are never comma-split so titles may contain\n * commas). On other subcommands a single value aliases stepTitle.\n */\n step?: string | string[];\n stepBody?: string;\n stepOwner?: string;\n stepStatus?: string;\n stepEvidence?: string;\n stepBlockedReason?: string;\n stepReplacement?: string;\n dependsOn?: string | string[];\n link?: string | string[];\n linkKind?: string;\n linkNote?: string;\n promoteToItemDep?: boolean;\n allowMultipleActive?: boolean;\n file?: string | string[];\n test?: string | string[];\n doc?: string | string[];\n decisionText?: string;\n decision?: string;\n decisionRationale?: string;\n decisionEvidence?: string;\n discoveryText?: string;\n discovery?: string;\n validationText?: string;\n validation?: string;\n validationCommand?: string;\n validationExpected?: string;\n depth?: string;\n fields?: string;\n steps?: string;\n template?: string;\n materializeType?: string;\n materializeParent?: string;\n materializeTags?: string;\n author?: string;\n message?: string;\n force?: boolean;\n}\n\n/**\n * Documents the plan command result payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanCommandResult {\n action: PlanSubcommand;\n plan: PlanResultPlan;\n step?: PlanStep;\n current_step?: PlanStep | undefined;\n next_actions?: string[];\n materialized?: { id: string; type: string; from_step: string }[];\n // pm-fl0c #10 (2026-05-28): steps that pm plan materialize intentionally\n // skipped (already-completed or already-materialized via an `implements`\n // link). Surfacing these makes `--steps all` idempotent without users\n // having to read history to find out what was done.\n materialize_skipped?: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[];\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the plan result plan payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanResultPlan {\n id: string;\n title: string;\n status: string;\n mode: PlanMode;\n scope?: string;\n harness?: PlanHarness;\n parent?: string;\n resume_context?: string;\n steps_summary: PlanStepSummary;\n current_step?: { id: string; order: number; title: string; status: PlanStepStatus } | undefined;\n blocked_steps?: { id: string; order: number; title: string; blocked_reason?: string }[];\n steps?: PlanStep[];\n decisions?: PlanDecision[];\n discoveries?: PlanDiscovery[];\n validation?: PlanValidationCheck[];\n linked_items?: { id: string; kind: DependencyKind }[];\n}\n\n/**\n * Documents the plan step summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepSummary {\n total: number;\n pending: number;\n in_progress: number;\n blocked: number;\n completed: number;\n skipped: number;\n superseded: number;\n /**\n * Whole-percent step-completion progress (`round(completed / total * 100)`),\n * surfaced so agents see plan progress without recomputing it (GH-158 #5).\n */\n completion_pct: number;\n}\n\nconst STEP_ID_PREFIX = \"plan-step-\";\nconst DEFAULT_PLAN_MODE: PlanMode = \"draft\";\n\nexport const PLAN_TEMPLATE_NAMES = [\"bug-investigation\", \"feature-implementation\", \"refactoring-sprint\"] as const;\n/**\n * Restricts plan template names accepted by `pm plan create --template` (GH-158 #2).\n */\nexport type PlanTemplateName = (typeof PLAN_TEMPLATE_NAMES)[number];\n\ninterface PlanTemplateStepSeed {\n title: string;\n body: string;\n}\n\n// Built-in step scaffolds for the most common agent workflows. Each seeds an\n// ordered list of pending steps so `pm plan create --template <name>` produces a\n// ready-to-execute plan instead of an empty shell (GH-158 #2).\nconst PLAN_TEMPLATES: Record<PlanTemplateName, PlanTemplateStepSeed[]> = {\n \"bug-investigation\": [\n { title: \"Reproduce the bug\", body: \"Capture exact steps, inputs, and the observed vs expected behavior.\" },\n { title: \"Locate the root cause\", body: \"Trace the failure to the responsible code path with evidence.\" },\n { title: \"Write a failing test\", body: \"Add a regression test that fails for the current bug.\" },\n { title: \"Implement the fix\", body: \"Apply the minimal change that makes the failing test pass.\" },\n { title: \"Verify and document\", body: \"Run the full suite and record the resolution and verification.\" },\n ],\n \"feature-implementation\": [\n { title: \"Clarify requirements & acceptance criteria\", body: \"Confirm scope, edge cases, and done-conditions.\" },\n { title: \"Design the approach\", body: \"Decide the data model, interfaces, and integration points.\" },\n { title: \"Implement the change\", body: \"Build the feature behind the agreed design.\" },\n { title: \"Add tests\", body: \"Cover the new behavior and its edge cases.\" },\n { title: \"Update docs & changelog\", body: \"Document the feature and surface it to users.\" },\n ],\n \"refactoring-sprint\": [\n { title: \"Map the current structure & risks\", body: \"Inventory the code to change and its blast radius.\" },\n { title: \"Add characterization tests\", body: \"Lock in current behavior before refactoring.\" },\n { title: \"Refactor incrementally\", body: \"Apply small, reversible steps keeping tests green.\" },\n { title: \"Verify behavior is unchanged\", body: \"Run the full suite and compare against the baseline.\" },\n { title: \"Clean up & document\", body: \"Remove dead code and record the new structure.\" },\n ],\n};\n\n/**\n * Resolves the ordered step seeds for a built-in plan template, rejecting\n * unknown names with the allowed set so agents can self-correct.\n */\nexport function resolvePlanTemplateSteps(raw: string): PlanTemplateStepSeed[] {\n const normalized = raw.trim().toLowerCase();\n const template = Object.prototype.hasOwnProperty.call(PLAN_TEMPLATES, normalized)\n ? PLAN_TEMPLATES[normalized as PlanTemplateName]\n : undefined;\n if (!template) {\n throw new PmCliError(`Unknown plan template \"${raw}\". Allowed: ${PLAN_TEMPLATE_NAMES.join(\", \")}`, EXIT_CODE.USAGE, {\n code: \"unknown_plan_template\",\n examples: [`pm plan create --title \"Fix login crash\" --template ${PLAN_TEMPLATE_NAMES[0]}`],\n });\n }\n return template.map((step) => ({ ...step }));\n}\n\n/**\n * Computes whole-percent step completion (`round(completed / total * 100)`),\n * returning 0 for an empty plan so the field is always a stable number.\n */\nfunction planCompletionPct(completed: number, total: number): number {\n return total > 0 ? Math.round((completed / total) * 100) : 0;\n}\n\n/* c8 ignore start -- detailed plan helper branches are validated through broader plan workflow integration tests. */\nfunction resolveAuthor(candidate: string | undefined, fallback: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;\n const trimmed = resolved.trim();\n return trimmed.length > 0 ? trimmed : \"unknown\";\n}\n\n/**\n * pm-6mit: ordered step titles from repeated --step values. Unlike toArray\n * this NEVER comma-splits — each --step value is one full step title, so\n * titles containing commas survive intact (also why --step must not be\n * list:true in contracts: the bootstrap coalescer would comma-join values).\n */\nfunction toOrderedStepTitles(value: unknown): string[] {\n const values = Array.isArray(value) ? value : value === undefined || value === null ? [] : [value];\n return values\n .filter((entry) => entry !== undefined && entry !== null)\n .map((entry) => (typeof entry === \"string\" ? entry : String(entry)).trim())\n .filter((entry) => entry.length > 0);\n}\n\nfunction toArray(value: string | string[] | undefined): string[] {\n if (Array.isArray(value)) return value.flatMap((entry) => splitCommaList(entry, { unique: false }));\n if (typeof value === \"string\" && value.trim().length > 0) {\n return splitCommaList(value, { unique: false });\n }\n return [];\n}\n\nfunction toSpecArray(value: string | string[] | undefined): string[] {\n if (Array.isArray(value)) return value.map((entry) => entry.trim()).filter(Boolean);\n if (typeof value === \"string\" && value.trim().length > 0) return [value.trim()];\n return [];\n}\n\nfunction asPlanMode(value: string | undefined, fallback: PlanMode = DEFAULT_PLAN_MODE): PlanMode {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_MODE_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid plan mode \"${value}\". Allowed: ${PLAN_MODE_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asStepStatus(value: string | undefined, fallback: PlanStepStatus = \"pending\"): PlanStepStatus {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_STEP_STATUS_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid step status \"${value}\". Allowed: ${PLAN_STEP_STATUS_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asLinkKind(value: string | undefined, fallback: PlanStepLinkKind = \"related\"): PlanStepLinkKind {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_STEP_LINK_KIND_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid step link kind \"${value}\". Allowed: ${PLAN_STEP_LINK_KIND_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asHarness(value: string | undefined): PlanHarness | undefined {\n if (value === undefined) return undefined;\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) return undefined;\n const found = PLAN_HARNESS_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid plan harness \"${value}\". Allowed: ${PLAN_HARNESS_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asDepth(value: string | undefined): PlanShowDepth {\n if (value === undefined) return \"brief\";\n const normalized = value.trim().toLowerCase();\n const found = PLAN_SHOW_DEPTH_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid --depth \"${value}\". Allowed: ${PLAN_SHOW_DEPTH_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction parsePlanFields(raw: string | undefined): string[] | null {\n if (raw === undefined) {\n return null;\n }\n const fields = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (fields.length === 0) {\n throw new PmCliError(\"Plan --fields requires a comma-separated list of plan field names\", EXIT_CODE.USAGE);\n }\n return fields;\n}\n\nconst PLAN_FIELD_KEYS = new Set<keyof PlanResultPlan>([\n \"id\",\n \"title\",\n \"status\",\n \"mode\",\n \"scope\",\n \"harness\",\n \"parent\",\n \"resume_context\",\n \"steps_summary\",\n \"current_step\",\n \"blocked_steps\",\n \"steps\",\n \"decisions\",\n \"discoveries\",\n \"validation\",\n \"linked_items\",\n]);\n\nfunction projectPlanForFields(plan: PlanResultPlan, fields: string[]): PlanResultPlan {\n const source = plan as unknown as Record<string, unknown>;\n const projected: Record<string, unknown> = {};\n const unknownFields: string[] = [];\n for (const field of fields) {\n const normalized = field.startsWith(\"plan.\") ? field.slice(\"plan.\".length) : field;\n if (normalized.length === 0) {\n continue;\n }\n if (!PLAN_FIELD_KEYS.has(normalized as keyof PlanResultPlan)) {\n unknownFields.push(field);\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(source, normalized)) {\n projected[normalized] = source[normalized];\n }\n }\n if (unknownFields.length > 0) {\n throw new PmCliError(`Unknown Plan --fields value(s): ${unknownFields.join(\", \")}`, EXIT_CODE.USAGE, {\n nextSteps: [\n `Use --fields ${[...PLAN_FIELD_KEYS].join(\",\")}`,\n \"Run pm plan show <id> --depth brief for compact default fields.\",\n ],\n recovery: {\n provided_fields: unknownFields,\n suggested_retry: `pm plan show <id> --fields ${[...PLAN_FIELD_KEYS].join(\",\")}`,\n },\n });\n }\n return projected as unknown as PlanResultPlan;\n}\n\nfunction parsePairList(raw: string, label: string): Record<string, string> {\n const out: Record<string, string> = {};\n for (const entry of raw.split(\",\")) {\n const trimmed = entry.trim();\n if (trimmed.length === 0) continue;\n const equalsIndex = trimmed.indexOf(\"=\");\n if (equalsIndex <= 0) {\n throw new PmCliError(`Invalid ${label} entry \"${trimmed}\"; expected key=value`, EXIT_CODE.USAGE);\n }\n out[trimmed.slice(0, equalsIndex).trim().toLowerCase()] = trimmed.slice(equalsIndex + 1).trim();\n }\n return out;\n}\n\nfunction parseStepFile(spec: string): PlanStepFile {\n const fields = parsePairList(spec, \"--file\");\n if (!fields.path) {\n throw new PmCliError(\"--file requires path=<value>\", EXIT_CODE.USAGE);\n }\n const file: PlanStepFile = { path: fields.path };\n if (fields.scope === \"global\" || fields.scope === \"project\") file.scope = fields.scope;\n if (fields.note) file.note = fields.note;\n return file;\n}\n\nfunction parseStepTest(spec: string): PlanStepTest {\n const fields = parsePairList(spec, \"--test\");\n if (!fields.command && !fields.path) {\n throw new PmCliError(\"--test requires at least command=<value> or path=<value>\", EXIT_CODE.USAGE);\n }\n const test: PlanStepTest = {};\n if (fields.command) test.command = fields.command;\n if (fields.path) test.path = fields.path;\n if (fields.note) test.note = fields.note;\n return test;\n}\n\nfunction parseStepDoc(spec: string): PlanStepDoc {\n const fields = parsePairList(spec, \"--doc\");\n if (!fields.path) {\n throw new PmCliError(\"--doc requires path=<value>\", EXIT_CODE.USAGE);\n }\n const doc: PlanStepDoc = { path: fields.path };\n if (fields.scope === \"global\" || fields.scope === \"project\") doc.scope = fields.scope;\n if (fields.note) doc.note = fields.note;\n return doc;\n}\n\nfunction summarizeSteps(steps: PlanStep[]): PlanStepSummary {\n const summary: PlanStepSummary = {\n total: steps.length,\n pending: 0,\n in_progress: 0,\n blocked: 0,\n completed: 0,\n skipped: 0,\n superseded: 0,\n completion_pct: 0,\n };\n for (const step of steps) {\n summary[step.status] += 1;\n }\n summary.completion_pct = planCompletionPct(summary.completed, summary.total);\n return summary;\n}\n\nfunction newStepId(existing: PlanStep[]): string {\n const used = new Set(existing.map((step) => step.id));\n for (let cursor = existing.length + 1; cursor < existing.length + 1024; cursor += 1) {\n const candidate = `${STEP_ID_PREFIX}${String(cursor).padStart(3, \"0\")}`;\n if (!used.has(candidate)) return candidate;\n }\n /* c8 ignore next -- step id allocation only fails if 1024 consecutive ids are taken. */\n throw new PmCliError(\"Could not allocate step id (limit reached)\", EXIT_CODE.GENERIC_FAILURE);\n}\n\nfunction resolveStepRef(steps: PlanStep[], ref: string): PlanStep {\n const trimmed = ref.trim();\n if (trimmed.length === 0) {\n throw new PmCliError(\"Step reference cannot be empty\", EXIT_CODE.USAGE);\n }\n const direct = steps.find((step) => step.id === trimmed);\n if (direct) return direct;\n if (/^\\d+$/.test(trimmed)) {\n const order = Number.parseInt(trimmed, 10);\n const byOrder = steps.find((step) => step.order === order);\n if (byOrder) return byOrder;\n }\n throw new PmCliError(`Step \"${ref}\" not found in plan`, EXIT_CODE.NOT_FOUND);\n}\n\ninterface MaterializeTargetResolution {\n targets: PlanStep[];\n skipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[];\n}\n\n// pm-fl0c #10 (2026-05-28): skip steps whose status is \"completed\" and steps\n// that already have an `implements` link from a prior materialize run, so\n// `pm plan materialize --steps all` is idempotent and never re-creates fresh\n// Tasks for work already tracked. Explicit step refs are still allowed\n// through (the user asked by ID) but the skip-reason is recorded.\nfunction classifyMaterializeSkip(\n step: PlanStep,\n): { reason: \"already_completed\" | \"already_materialized\"; existing_id?: string } | undefined {\n if (step.status === \"completed\") {\n return { reason: \"already_completed\" };\n }\n const existingImplements = (step.linked_items ?? []).find((link) => link.kind === \"implements\");\n if (existingImplements) {\n return { reason: \"already_materialized\", existing_id: existingImplements.id };\n }\n return undefined;\n}\n\nfunction resolveMaterializeTargets(steps: PlanStep[], refs: string[]): MaterializeTargetResolution {\n const allRefs = refs.filter((ref) => ref.trim().toLowerCase() === \"all\");\n const targets: PlanStep[] = [];\n const skipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[] = [];\n if (allRefs.length > 0) {\n if (refs.length > allRefs.length) {\n throw new PmCliError(\"pm plan materialize --steps all cannot be combined with other step refs\", EXIT_CODE.USAGE);\n }\n for (const step of steps.slice().sort((left, right) => left.order - right.order)) {\n const skip = classifyMaterializeSkip(step);\n if (skip) {\n skipped.push({ from_step: step.id, ...skip });\n continue;\n }\n targets.push(step);\n }\n return { targets, skipped };\n }\n const seen = new Set<string>();\n for (const ref of refs) {\n const step = resolveStepRef(steps, ref);\n if (seen.has(step.id)) continue;\n seen.add(step.id);\n const skip = classifyMaterializeSkip(step);\n if (skip) {\n skipped.push({ from_step: step.id, ...skip });\n continue;\n }\n targets.push(step);\n }\n return { targets, skipped };\n}\n\nfunction resolvePlanLogText(kind: \"decision\" | \"discovery\" | \"validation\", options: PlanCommandOptions): string | undefined {\n const canonical =\n kind === \"decision\"\n ? options.decisionText\n : kind === \"discovery\"\n ? options.discoveryText\n : options.validationText;\n const shorthand =\n kind === \"decision\"\n ? options.decision\n : kind === \"discovery\"\n ? options.discovery\n : options.validation;\n return canonical?.trim() || shorthand?.trim() || undefined;\n}\n\nfunction findCurrentStep(steps: PlanStep[]): PlanStep | undefined {\n return steps.find((step) => step.status === \"in_progress\")\n ?? steps.find((step) => step.status === \"pending\");\n}\n\nfunction blockedSteps(steps: PlanStep[]): { id: string; order: number; title: string; blocked_reason?: string }[] {\n return steps\n .filter((step) => step.status === \"blocked\")\n .map((step) => ({ id: step.id, order: step.order, title: step.title, blocked_reason: step.blocked_reason }));\n}\n\nfunction projectPlan(item: ItemMetadata, depth: PlanShowDepth = \"brief\"): PlanResultPlan {\n const steps = (item.plan_steps ?? []).slice().sort((left, right) => left.order - right.order);\n const summary = summarizeSteps(steps);\n const current = findCurrentStep(steps);\n const projection: PlanResultPlan = {\n id: item.id,\n title: item.title,\n status: item.status,\n mode: (item.plan_mode ?? DEFAULT_PLAN_MODE) as PlanMode,\n scope: item.plan_scope,\n harness: item.plan_harness,\n parent: item.parent,\n resume_context: item.plan_resume_context,\n steps_summary: summary,\n current_step: current\n ? { id: current.id, order: current.order, title: current.title, status: current.status }\n : undefined,\n blocked_steps: blockedSteps(steps),\n linked_items: (item.dependencies ?? []).map((dep) => ({ id: dep.id, kind: dep.kind })),\n };\n if (depth === \"standard\" || depth === \"deep\") {\n projection.steps = steps;\n }\n if (depth === \"deep\") {\n projection.decisions = item.plan_decisions ?? [];\n projection.discoveries = item.plan_discoveries ?? [];\n projection.validation = item.plan_validation ?? [];\n }\n return projection;\n}\n\nfunction nextActionsFor(planId: string, plan: PlanResultPlan): string[] {\n const tips: string[] = [];\n if (plan.steps_summary.total === 0) {\n tips.push(`pm plan add-step ${planId} --step-title \"First step\"`);\n }\n if (plan.current_step) {\n tips.push(\n `pm plan update-step ${planId} ${plan.current_step.id} --step-status in_progress`,\n `pm plan complete-step ${planId} ${plan.current_step.id} --step-evidence \"...\"`,\n );\n }\n if (plan.steps_summary.blocked > 0) {\n tips.push(`pm plan show ${planId} --depth standard`);\n }\n if (plan.mode === \"draft\" || plan.mode === \"research\") {\n tips.push(`pm plan approve ${planId} --message \"ready to execute\"`);\n }\n if (plan.steps_summary.completed === plan.steps_summary.total && plan.steps_summary.total > 0) {\n tips.push(`pm close ${planId} \"plan complete\"`);\n }\n return tips;\n}\n\nfunction ensurePlanItem(item: ItemMetadata): void {\n const normalizedType = (item.type ?? \"\").trim().toLowerCase();\n if (normalizedType !== \"plan\") {\n throw new PmCliError(\n `Item ${item.id} is type ${item.type}; pm plan commands require type=Plan. Use pm plan create or pm create --type Plan first.`,\n EXIT_CODE.USAGE,\n {\n code: \"wrong_item_type\",\n required: \"Use pm plan commands only with items whose type is Plan.\",\n why: \"Plan commands read and mutate Plan-specific step, decision, discovery, and validation fields.\",\n examples: [\n `pm get ${item.id} --depth brief`,\n 'pm plan create --title \"Execution plan\" --scope \"<goal>\"',\n ],\n },\n );\n }\n}\n\ninterface PlanWriteContext {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n}\n\nasync function loadContext(global: GlobalOptions): Promise<PlanWriteContext> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n return { pmRoot, settings };\n}\n\nasync function readPlanItem(ctx: PlanWriteContext, id: string): Promise<{ document: ItemDocument; itemId: string }> {\n const typeRegistry = resolveItemTypeRegistry(ctx.settings, getActiveExtensionRegistrations());\n const located = await locateItem(ctx.pmRoot, id, ctx.settings.id_prefix, ctx.settings.item_format, typeRegistry.type_to_folder);\n if (!located) {\n throw new PmCliError(`Plan ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: ctx.settings.schema });\n ensurePlanItem(loaded.document.metadata);\n return { document: loaded.document, itemId: located.id };\n}\n\nasync function planCreate(\n options: PlanCommandOptions,\n global: GlobalOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const title = options.title?.trim();\n if (!title) {\n throw new PmCliError(\"pm plan create requires --title\", EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: ['pm plan create --title \"Refactor lock retry\" --scope pm-a1b2'],\n });\n }\n const mode = asPlanMode(options.mode, DEFAULT_PLAN_MODE);\n const harness = asHarness(options.harness);\n const fromSearch = options.fromSearch?.trim();\n\n const related = toArray(options.related);\n const blocks = toArray(options.blocks);\n const blockedBy = toArray(options.blockedBy);\n\n const deps: string[] = [];\n if (options.parent) {\n deps.push(`id=${options.parent.trim()},kind=parent`);\n }\n for (const ref of related) deps.push(`id=${ref},kind=related`);\n for (const ref of blocks) deps.push(`id=${ref},kind=blocks`);\n for (const ref of blockedBy) deps.push(`id=${ref},kind=blocked_by`);\n\n const description = options.description?.trim() ?? options.scope?.trim() ?? title;\n const createOptions: CreateCommandOptions = {\n title,\n description,\n type: \"Plan\",\n body: options.body,\n tags: options.tags,\n priority: options.priority,\n parent: options.parent,\n dep: deps.length > 0 ? deps : undefined,\n author: options.author,\n message: options.message ?? (fromSearch ? `plan create (search: ${fromSearch})` : `plan create`),\n };\n\n const createResult: CreateResult = await runCreate(createOptions, global);\n\n // The create command stores type_options. To use real metadata keys, run a follow-up mutate.\n const seedResult = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_metadata\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"seed plan metadata\",\n mutate(doc) {\n const changed: string[] = [];\n doc.metadata.plan_mode = mode;\n changed.push(\"plan_mode\");\n if (harness) {\n doc.metadata.plan_harness = harness;\n changed.push(\"plan_harness\");\n }\n if (options.scope?.trim()) {\n doc.metadata.plan_scope = options.scope.trim();\n changed.push(\"plan_scope\");\n }\n if (options.resumeContext?.trim()) {\n doc.metadata.plan_resume_context = options.resumeContext.trim();\n changed.push(\"plan_resume_context\");\n }\n doc.metadata.plan_steps = doc.metadata.plan_steps ?? [];\n return { changedFields: changed };\n },\n });\n\n let finalMetadata: ItemMetadata = seedResult.item;\n let initialStep: PlanStep | undefined;\n const initialValidationText = options.validationText?.trim();\n const initialValidationCommand = options.validationCommand?.trim();\n const initialValidationExpected = options.validationExpected?.trim();\n const initialValidation =\n initialValidationText || initialValidationCommand || initialValidationExpected\n ? ({\n text: initialValidationText || initialValidationCommand || \"Validation check\",\n command: initialValidationCommand || undefined,\n expected: initialValidationExpected || undefined,\n } satisfies PlanValidationCheck)\n : undefined;\n // pm-6mit: collect ordered initial-step titles. Mixed-usage semantics\n // (documented on pm-6mit): --step-title (when present) is the FIRST step,\n // followed by each repeated --step value in argv order.\n const stepTitleFlag = options.stepTitle?.trim();\n const repeatedStepTitles = toOrderedStepTitles(options.step);\n const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];\n const stepTitles = [\n ...(stepTitleFlag ? [stepTitleFlag] : []),\n ...repeatedStepTitles,\n ...templateSteps.map((step) => step.title),\n ];\n const hasPerStepDetailOptions =\n Boolean(options.stepBody?.trim()) ||\n Boolean(options.stepOwner?.trim()) ||\n Boolean(options.stepStatus?.trim()) ||\n Boolean(options.stepEvidence?.trim()) ||\n Boolean(options.stepBlockedReason?.trim()) ||\n Boolean(options.stepReplacement?.trim()) ||\n toArray(options.dependsOn).length > 0 ||\n toArray(options.link).length > 0 ||\n toSpecArray(options.file).length > 0 ||\n toSpecArray(options.test).length > 0 ||\n toSpecArray(options.doc).length > 0;\n if ((stepTitleFlag || repeatedStepTitles.length > 0) && templateSteps.length > 0) {\n throw new PmCliError(\n \"pm plan create --template cannot be combined with --step-title or --step; choose one step seeding source\",\n EXIT_CODE.USAGE,\n {\n code: \"ambiguous_option_combination\",\n examples: [\n `pm plan create --title \"Fix login crash\" --template ${PLAN_TEMPLATE_NAMES[0]}`,\n 'pm plan create --title \"Custom plan\" --step \"Read the code\" --step \"Write the fix\"',\n ],\n },\n );\n }\n if (stepTitles.length > 1 && hasPerStepDetailOptions) {\n // Per-step detail flags target exactly one step; silently attaching them to\n // the first (or all) of several seeded steps would be unpredictable.\n throw new PmCliError(\n \"pm plan create per-step options apply to a single initial step; with multiple --step values create the plan first, then refine steps individually\",\n EXIT_CODE.USAGE,\n {\n code: \"ambiguous_option_combination\",\n examples: [\n 'pm plan create --title \"Execution plan\" --step \"Read the code\" --step \"Write the fix\"',\n 'pm plan update-step <plan-id> plan-step-001 --step-body \"Inspect retry path\"',\n ],\n },\n );\n }\n let initialSteps: PlanStep[] = [];\n if (stepTitles.length === 1) {\n const status = asStepStatus(options.stepStatus, \"pending\");\n const linkedItems = buildLinkInputs(options, \"depends_on\");\n const files = toSpecArray(options.file).map(parseStepFile);\n const tests = toSpecArray(options.test).map(parseStepTest);\n const docs = toSpecArray(options.doc).map(parseStepDoc);\n const now = nowIso();\n initialSteps = [{\n id: \"plan-step-001\",\n order: 1,\n title: stepTitles[0],\n body: options.stepBody?.trim() || undefined,\n status,\n owner: options.stepOwner?.trim() || undefined,\n evidence: options.stepEvidence?.trim() || undefined,\n blocked_reason: status === \"blocked\" ? options.stepBlockedReason?.trim() || \"\" : undefined,\n linked_items: linkedItems.length > 0 ? linkedItems : undefined,\n files: files.length > 0 ? files : undefined,\n tests: tests.length > 0 ? tests : undefined,\n docs: docs.length > 0 ? docs : undefined,\n created_at: now,\n updated_at: now,\n completed_at: status === \"completed\" ? now : undefined,\n }];\n } else if (stepTitles.length > 1) {\n const now = nowIso();\n initialSteps = stepTitles.map((stepTitle, index) => ({\n id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, \"0\")}`,\n order: index + 1,\n title: stepTitle,\n body: templateSteps[index]?.body,\n status: \"pending\" as const,\n created_at: now,\n updated_at: now,\n }));\n }\n if (initialSteps.length > 0) {\n initialStep = initialSteps[0];\n const stepped = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_initial_step\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message:\n initialSteps.length === 1\n ? `plan create initial step \"${initialSteps[0].title}\"`\n : `plan create ${initialSteps.length} initial steps`,\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n doc.metadata.plan_steps = initialSteps;\n if (initialValidation) {\n doc.metadata.plan_validation = [...(doc.metadata.plan_validation ?? []), initialValidation];\n }\n return { changedFields: initialValidation ? [\"plan_steps\", \"plan_validation\"] : [\"plan_steps\"] };\n },\n });\n finalMetadata = stepped.item;\n } else if (initialValidation) {\n const validated = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_initial_validation\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"plan create initial validation\",\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n doc.metadata.plan_validation = [...(doc.metadata.plan_validation ?? []), initialValidation];\n return { changedFields: [\"plan_validation\"] };\n },\n });\n finalMetadata = validated.item;\n } else if (hasPerStepDetailOptions) {\n throw new PmCliError(\"pm plan create step options require --step-title (or a single --step)\", EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: ['pm plan create --title \"Execution plan\" --step-title \"Read the code\"'],\n });\n }\n if (options.claim) {\n const claimed = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"claim\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"plan claim by author\",\n mutate(doc) {\n doc.metadata.assignee = resolveAuthor(options.author, ctx.settings.author_default);\n return { changedFields: [\"assignee\"] };\n },\n });\n finalMetadata = claimed.item;\n }\n\n const plan = projectPlan(finalMetadata, \"brief\");\n return {\n action: \"create\",\n plan,\n step: initialStep,\n next_actions: nextActionsFor(createResult.item.id, plan),\n warnings: [...createResult.warnings],\n generated_at: nowIso(),\n };\n}\n\nasync function planShow(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const depth = asDepth(options.depth);\n const fields = parsePlanFields(options.fields);\n const { document, itemId } = await readPlanItem(ctx, id);\n const fullPlan = projectPlan(document.metadata, fields === null ? depth : \"deep\");\n const plan = fields === null ? fullPlan : projectPlanForFields(fullPlan, fields);\n return {\n action: \"show\",\n plan,\n next_actions: nextActionsFor(itemId, fullPlan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\ninterface MutateStepArgs {\n id: string;\n options: PlanCommandOptions;\n ctx: PlanWriteContext;\n op: string;\n message: string;\n mutator(steps: PlanStep[], doc: ItemDocument): { changedSteps: string[]; current?: PlanStep; resultStep?: PlanStep };\n}\n\nasync function mutatePlanSteps(args: MutateStepArgs): Promise<{ document: ItemDocument; resultStep?: PlanStep; itemId: string }> {\n const author = resolveAuthor(args.options.author, args.ctx.settings.author_default);\n let resultStep: PlanStep | undefined;\n const result = await mutateItem({\n pmRoot: args.ctx.pmRoot,\n settings: args.ctx.settings,\n id: args.id,\n op: args.op,\n author,\n message: args.options.message ?? args.message,\n force: args.options.force,\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n const steps = (doc.metadata.plan_steps ?? []).slice();\n const before = JSON.stringify(steps);\n const outcome = args.mutator(steps, doc);\n resultStep = outcome.resultStep;\n const sorted = steps\n .slice()\n .sort((left, right) => left.order - right.order)\n .map((step, index) => ({ ...step, order: index + 1 }));\n doc.metadata.plan_steps = sorted;\n const after = JSON.stringify(sorted);\n const changedFields = before === after ? [] : [\"plan_steps\"];\n if (changedFields.length === 0 && outcome.changedSteps.length === 0) {\n return { changedFields: [] };\n }\n return { changedFields: changedFields.length > 0 ? changedFields : [\"plan_steps\"] };\n },\n });\n return {\n document: { metadata: result.item, body: result.body },\n resultStep,\n itemId: result.item.id,\n };\n}\n\nasync function planAddStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const title = options.stepTitle?.trim();\n if (!title) {\n throw new PmCliError(\"pm plan add-step requires --step-title\", EXIT_CODE.USAGE);\n }\n const status = asStepStatus(options.stepStatus, \"pending\");\n const allowMultipleActive = options.allowMultipleActive === true;\n\n const linkedItems = buildLinkInputs(options, \"depends_on\");\n\n const files = toSpecArray(options.file).map(parseStepFile);\n const tests = toSpecArray(options.test).map(parseStepTest);\n const docs = toSpecArray(options.doc).map(parseStepDoc);\n\n const { document, resultStep, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_add_step\",\n message: `plan add-step \"${title}\"`,\n mutator(steps) {\n const order = steps.length + 1;\n if (status === \"in_progress\" && !allowMultipleActive) {\n for (const step of steps) {\n if (step.status === \"in_progress\") {\n throw new PmCliError(\n `Plan already has step ${step.id} in_progress. Pass --allow-multiple-active or update that step first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n }\n }\n const now = nowIso();\n const step: PlanStep = {\n id: newStepId(steps),\n order,\n title,\n body: options.stepBody?.trim() || undefined,\n status,\n owner: options.stepOwner?.trim() || undefined,\n evidence: options.stepEvidence?.trim() || undefined,\n blocked_reason: status === \"blocked\" ? options.stepBlockedReason?.trim() || \"\" : undefined,\n linked_items: linkedItems.length > 0 ? linkedItems : undefined,\n files: files.length > 0 ? files : undefined,\n tests: tests.length > 0 ? tests : undefined,\n docs: docs.length > 0 ? docs : undefined,\n created_at: now,\n updated_at: now,\n completed_at: status === \"completed\" ? now : undefined,\n };\n steps.push(step);\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"add-step\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nfunction buildLinkInputs(options: PlanCommandOptions, fallbackKind: PlanStepLinkKind): PlanStepLink[] {\n const dependsOn = toArray(options.dependsOn).map((id) => ({ id, kind: fallbackKind } as PlanStepLink));\n const related = toArray(options.related).map((id) => ({ id, kind: \"related\" } as PlanStepLink));\n const blocks = toArray(options.blocks).map((id) => ({ id, kind: \"blocks\" } as PlanStepLink));\n const blockedBy = toArray(options.blockedBy).map((id) => ({ id, kind: \"blocked_by\" } as PlanStepLink));\n const explicit = toArray(options.link);\n const explicitKind = asLinkKind(options.linkKind, fallbackKind);\n const note = options.linkNote?.trim();\n const explicitLinks = explicit.map((id) => {\n const link: PlanStepLink = { id, kind: explicitKind };\n if (note) link.note = note;\n return link;\n });\n return [...dependsOn, ...related, ...blocks, ...blockedBy, ...explicitLinks];\n}\n\nasync function planUpdateStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n args: { stepRef: string; finalStatus?: PlanStepStatus; op: string; allowMultipleActive?: boolean },\n): Promise<PlanCommandResult> {\n const { document, resultStep, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: args.op,\n message: options.message ?? `${args.op} ${args.stepRef}`,\n mutator(steps, doc) {\n const step = resolveStepRef(steps, args.stepRef);\n const now = nowIso();\n const desiredStatus = args.finalStatus ?? asStepStatus(options.stepStatus, step.status);\n if (desiredStatus === \"in_progress\" && step.status !== \"in_progress\" && !options.allowMultipleActive && !args.allowMultipleActive) {\n for (const other of steps) {\n if (other.id !== step.id && other.status === \"in_progress\") {\n throw new PmCliError(\n `Plan already has step ${other.id} in_progress. Pass --allow-multiple-active or update that step first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n }\n }\n if (desiredStatus === \"blocked\" && !options.stepBlockedReason?.trim() && !step.blocked_reason) {\n throw new PmCliError(\n \"Blocking a step requires --step-blocked-reason or an already-recorded blocked_reason.\",\n EXIT_CODE.USAGE,\n );\n }\n if (options.stepTitle?.trim()) step.title = options.stepTitle.trim();\n if (options.stepBody !== undefined) step.body = options.stepBody.trim() || undefined;\n if (options.stepOwner !== undefined) step.owner = options.stepOwner.trim() || undefined;\n if (options.stepEvidence !== undefined) step.evidence = options.stepEvidence.trim() || undefined;\n if (options.stepBlockedReason !== undefined) step.blocked_reason = options.stepBlockedReason.trim() || undefined;\n if (options.stepReplacement !== undefined) step.superseded_by = options.stepReplacement.trim() || undefined;\n step.status = desiredStatus;\n step.updated_at = now;\n if (desiredStatus === \"completed\" && !step.completed_at) {\n step.completed_at = now;\n } else if (desiredStatus !== \"completed\") {\n step.completed_at = undefined;\n }\n doc.metadata.updated_at = now;\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: args.op === \"plan_complete_step\" ? \"complete-step\" : args.op === \"plan_block_step\" ? \"block-step\" : \"update-step\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planReorderStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n newOrder: number,\n): Promise<PlanCommandResult> {\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_reorder_step\",\n message: options.message ?? `plan reorder-step ${stepRef} -> ${newOrder}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const filtered = steps.filter((entry) => entry.id !== step.id);\n const clamped = Math.max(1, Math.min(newOrder, filtered.length + 1));\n filtered.splice(clamped - 1, 0, step);\n filtered.forEach((entry, index) => {\n entry.order = index + 1;\n entry.updated_at = nowIso();\n });\n steps.length = 0;\n steps.push(...filtered);\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"reorder-step\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planRemoveStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_remove_step\",\n message: options.message ?? `plan remove-step ${stepRef}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const remaining = steps.filter((entry) => entry.id !== step.id);\n remaining.forEach((entry, index) => {\n entry.order = index + 1;\n });\n steps.length = 0;\n steps.push(...remaining);\n return { changedSteps: [step.id] };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"remove-step\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planLink(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const newLinks = buildLinkInputs(options, asLinkKind(options.linkKind, \"related\"));\n if (newLinks.length === 0) {\n throw new PmCliError(\"pm plan link requires at least one --link/--related/--blocks/--blocked-by/--depends-on id\", EXIT_CODE.USAGE);\n }\n const promoteToItemDep = options.promoteToItemDep === true;\n const { document, itemId, resultStep } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_link_step\",\n message: options.message ?? `plan link ${stepRef}`,\n mutator(steps, doc) {\n const step = resolveStepRef(steps, stepRef);\n const existing = step.linked_items ?? [];\n const dedupKey = (link: PlanStepLink) => `${link.kind}:${link.id}`;\n const seen = new Set(existing.map(dedupKey));\n for (const link of newLinks) {\n const key = dedupKey(link);\n if (seen.has(key)) continue;\n existing.push(link);\n seen.add(key);\n }\n step.linked_items = existing;\n step.updated_at = nowIso();\n if (promoteToItemDep) {\n const deps = doc.metadata.dependencies ?? [];\n const depKey = (dep: { id: string; kind: string }) => `${dep.kind}:${dep.id}`;\n const seenDeps = new Set(deps.map(depKey));\n for (const link of newLinks) {\n const candidate = {\n id: link.id,\n kind: link.kind as DependencyKind,\n created_at: nowIso(),\n author: resolveAuthor(options.author, ctx.settings.author_default),\n };\n if (seenDeps.has(depKey(candidate))) continue;\n deps.push(candidate);\n seenDeps.add(depKey(candidate));\n }\n doc.metadata.dependencies = deps;\n }\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"link\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planUnlink(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const removeIds = toArray(options.link);\n if (removeIds.length === 0) {\n throw new PmCliError(\"pm plan unlink requires --link <id> to remove\", EXIT_CODE.USAGE);\n }\n const { document, itemId, resultStep } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_unlink_step\",\n message: options.message ?? `plan unlink ${stepRef}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const filtered = (step.linked_items ?? []).filter((link) => !removeIds.includes(link.id));\n step.linked_items = filtered.length > 0 ? filtered : undefined;\n step.updated_at = nowIso();\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"unlink\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planAppendLog(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n kind: \"decision\" | \"discovery\" | \"validation\",\n): Promise<PlanCommandResult> {\n const logText = resolvePlanLogText(kind, options);\n if (!logText) {\n const canonical = `--${kind}-text`;\n const shorthand = `--${kind}`;\n throw new PmCliError(`pm plan ${kind} requires ${canonical}`, EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: [\n `pm plan ${kind} <plan-id> ${canonical} \"...\"`,\n `pm plan ${kind} <plan-id> ${shorthand} \"...\"`,\n ],\n recovery: {\n suggested_retry: `pm plan ${kind} <plan-id> ${canonical} <value>`,\n },\n });\n }\n const author = resolveAuthor(options.author, ctx.settings.author_default);\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: `plan_append_${kind}`,\n message: options.message ?? `plan ${kind} append`,\n mutator(_steps, doc) {\n const now = nowIso();\n if (kind === \"decision\") {\n const list = doc.metadata.plan_decisions ?? [];\n list.push({\n ts: now,\n author,\n decision: logText,\n rationale: options.decisionRationale?.trim() || undefined,\n evidence: options.decisionEvidence?.trim() || undefined,\n });\n doc.metadata.plan_decisions = list;\n return { changedSteps: [] };\n }\n if (kind === \"discovery\") {\n const list = doc.metadata.plan_discoveries ?? [];\n list.push({ ts: now, author, text: logText });\n doc.metadata.plan_discoveries = list;\n return { changedSteps: [] };\n }\n const list = doc.metadata.plan_validation ?? [];\n list.push({\n text: logText,\n command: options.validationCommand?.trim() || undefined,\n expected: options.validationExpected?.trim() || undefined,\n });\n doc.metadata.plan_validation = list;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"deep\");\n return {\n action: kind,\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planResume(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const text = options.resumeContext?.trim();\n if (!text) {\n throw new PmCliError(\"pm plan resume requires --resume-context <text>\", EXIT_CODE.USAGE);\n }\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_resume\",\n message: options.message ?? \"plan resume context update\",\n mutator(_steps, doc) {\n doc.metadata.plan_resume_context = text;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"brief\");\n return {\n action: \"resume\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planApprove(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const mode = asPlanMode(options.mode ?? \"approved\", \"approved\");\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_approve\",\n message: options.message ?? `plan approve mode=${mode}`,\n mutator(_steps, doc) {\n doc.metadata.plan_mode = mode;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"brief\");\n return {\n action: \"approve\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planMaterialize(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const stepRefs = toArray(options.steps);\n if (stepRefs.length === 0) {\n throw new PmCliError(\"pm plan materialize requires --steps <ids|orders|all>\", EXIT_CODE.USAGE);\n }\n const targetType = options.materializeType?.trim() || \"Task\";\n const typeRegistry = resolveItemTypeRegistry(ctx.settings, getActiveExtensionRegistrations());\n const resolvedTypeName = resolveTypeName(targetType, typeRegistry);\n if (!resolvedTypeName) {\n throw new PmCliError(`Invalid --materialize-type \"${targetType}\"`, EXIT_CODE.USAGE);\n }\n const parent = options.materializeParent?.trim() || id;\n const tags = options.materializeTags;\n\n const planRead = await readPlanItem(ctx, id);\n const steps = (planRead.document.metadata.plan_steps ?? []).slice();\n const { targets, skipped: materializeSkipped } = resolveMaterializeTargets(steps, stepRefs);\n if (targets.length === 0) {\n if (materializeSkipped.length > 0) {\n // PR #78 / Gemini medium follow-up: when every selected step was\n // already materialized or completed, return a successful no-op\n // result (exit 0) instead of throwing NOT_FOUND. This makes\n // `pm plan materialize --steps all` truly idempotent for CI/agent\n // workflows; the skip reasons + warnings still surface what was\n // intentionally not redone.\n const plan = projectPlan(planRead.document.metadata, \"standard\");\n return {\n action: \"materialize\",\n plan,\n materialized: [],\n materialize_skipped: materializeSkipped,\n next_actions: nextActionsFor(planRead.itemId, plan),\n warnings: materializeSkipped.map(\n (entry) =>\n `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : \"\"}`,\n ),\n generated_at: nowIso(),\n };\n }\n throw new PmCliError(\"No matching plan steps found for --steps\", EXIT_CODE.NOT_FOUND);\n }\n\n const materialized: { id: string; type: string; from_step: string }[] = [];\n for (const step of targets) {\n const deps = [\n `id=${parent},kind=parent`,\n `id=${planRead.itemId},kind=discovered_from`,\n ];\n for (const link of step.linked_items ?? []) {\n const realKind: DependencyKind =\n link.kind === \"blocked_by\" || link.kind === \"blocks\" || link.kind === \"related\" || link.kind === \"discovered_from\"\n ? link.kind\n : \"related\";\n deps.push(`id=${link.id},kind=${realKind}`);\n }\n const created = await runCreate(\n {\n title: step.title,\n description: step.body?.trim() || step.title,\n type: resolvedTypeName,\n parent,\n tags,\n author: options.author,\n message: options.message ?? `materialized from plan ${planRead.itemId} step ${step.id}`,\n dep: deps,\n },\n ctx.settings ? { ...({} as GlobalOptions), path: ctx.pmRoot } as GlobalOptions : ({} as GlobalOptions),\n );\n materialized.push({ id: created.item.id, type: resolvedTypeName, from_step: step.id });\n }\n\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_materialize\",\n message: options.message ?? `plan materialize ${stepRefs.join(\",\")}`,\n mutator(currentSteps, doc) {\n for (const target of targets) {\n const matched = materialized.find((entry) => entry.from_step === target.id);\n if (!matched) continue;\n const step = currentSteps.find((entry) => entry.id === target.id);\n if (!step) continue;\n const links = step.linked_items ?? [];\n links.push({ id: matched.id, kind: \"implements\", note: `materialized as ${matched.type}` });\n step.linked_items = links;\n step.updated_at = nowIso();\n }\n return { changedSteps: targets.map((entry) => entry.id) };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"materialize\",\n plan,\n materialized,\n ...(materializeSkipped.length > 0 ? { materialize_skipped: materializeSkipped } : {}),\n next_actions: nextActionsFor(itemId, plan),\n warnings: materializeSkipped.map(\n (entry) =>\n `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : \"\"}`,\n ),\n generated_at: nowIso(),\n };\n}\n\n/* c8 ignore stop */\n/**\n * Documents the plan dispatch input payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanDispatchInput {\n subcommand: PlanSubcommand;\n id?: string;\n stepRef?: string;\n reorderTo?: number;\n options: PlanCommandOptions;\n global: GlobalOptions;\n}\n\n/**\n * Implements run plan for the public runtime surface of this module.\n */\nexport async function runPlan(input: PlanDispatchInput): Promise<PlanCommandResult> {\n const ctx = await loadContext(input.global);\n // pm-6mit: --step accumulates ordered step titles on create. For every other\n // subcommand a single --step value keeps its historical alias-of---step-title\n // behavior; multiple values would be ambiguous there (one step is targeted),\n // so they are rejected instead of silently dropping all but the last.\n if (input.subcommand !== \"create\") {\n const stepValues = toOrderedStepTitles(input.options.step);\n if (stepValues.length > 1) {\n throw new PmCliError(\n `pm plan ${input.subcommand} accepts a single --step/--step-title value (repeated --step seeds ordered steps only on pm plan create)`,\n EXIT_CODE.USAGE,\n );\n }\n if (stepValues.length === 1 && !input.options.stepTitle?.trim()) {\n input = { ...input, options: { ...input.options, stepTitle: stepValues[0] } };\n }\n }\n switch (input.subcommand) {\n case \"create\":\n return planCreate(input.options, input.global, ctx);\n case \"show\":\n if (!input.id) throw new PmCliError(\"pm plan show requires a plan id\", EXIT_CODE.USAGE);\n return planShow(input.id, input.options, ctx);\n case \"add-step\":\n if (!input.id) throw new PmCliError(\"pm plan add-step requires a plan id\", EXIT_CODE.USAGE);\n return planAddStep(input.id, input.options, ctx);\n case \"update-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan update-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, op: \"plan_update_step\" });\n case \"complete-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan complete-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: \"completed\", op: \"plan_complete_step\" });\n case \"block-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan block-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: \"blocked\", op: \"plan_block_step\" });\n case \"reorder-step\":\n if (!input.id || !input.stepRef || input.reorderTo === undefined)\n throw new PmCliError(\"pm plan reorder-step requires <plan-id> <step> <new-order>\", EXIT_CODE.USAGE);\n return planReorderStep(input.id, input.options, ctx, input.stepRef, input.reorderTo);\n case \"remove-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan remove-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planRemoveStep(input.id, input.options, ctx, input.stepRef);\n case \"link\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan link requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planLink(input.id, input.options, ctx, input.stepRef);\n case \"unlink\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan unlink requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUnlink(input.id, input.options, ctx, input.stepRef);\n case \"decision\":\n if (!input.id) throw new PmCliError(\"pm plan decision requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"decision\");\n case \"discovery\":\n if (!input.id) throw new PmCliError(\"pm plan discovery requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"discovery\");\n case \"validation\":\n if (!input.id) throw new PmCliError(\"pm plan validation requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"validation\");\n case \"resume\":\n if (!input.id) throw new PmCliError(\"pm plan resume requires a plan id\", EXIT_CODE.USAGE);\n return planResume(input.id, input.options, ctx);\n case \"approve\":\n if (!input.id) throw new PmCliError(\"pm plan approve requires a plan id\", EXIT_CODE.USAGE);\n return planApprove(input.id, input.options, ctx);\n case \"materialize\":\n if (!input.id) throw new PmCliError(\"pm plan materialize requires a plan id\", EXIT_CODE.USAGE);\n return planMaterialize(input.id, input.options, ctx);\n default:\n throw new PmCliError(`Unknown pm plan subcommand \"${input.subcommand}\"`, EXIT_CODE.USAGE);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["global", "step", "list", "plan"]
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../cli/commands/plan.ts"],"sourcesContent":["/**\n * @module cli/commands/plan\n *\n * Implements the pm plan command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry, resolveTypeName } from \"../../core/item/type-registry.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { splitCommaList } from \"../../core/shared/split-comma-list.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { locateItem, mutateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type {\n DependencyKind,\n ItemDocument,\n ItemMetadata,\n PlanDecision,\n PlanDiscovery,\n PlanHarness,\n PlanMode,\n PlanStep,\n PlanStepDoc,\n PlanStepFile,\n PlanStepLink,\n PlanStepLinkKind,\n PlanStepStatus,\n PlanStepTest,\n PlanValidationCheck,\n} from \"../../types/index.js\";\nimport {\n PLAN_HARNESS_VALUES,\n PLAN_MODE_VALUES,\n PLAN_STEP_LINK_KIND_VALUES,\n PLAN_STEP_STATUS_VALUES,\n} from \"../../types/index.js\";\nimport { runCreate, type CreateCommandOptions, type CreateResult } from \"./create.js\";\n\nexport const PLAN_SUBCOMMANDS = [\n \"create\",\n \"show\",\n \"add-step\",\n \"update-step\",\n \"complete-step\",\n \"block-step\",\n \"reorder-step\",\n \"remove-step\",\n \"link\",\n \"unlink\",\n \"decision\",\n \"discovery\",\n \"validation\",\n \"resume\",\n \"approve\",\n \"materialize\",\n] as const;\n/**\n * Restricts plan subcommand values accepted by command, SDK, and storage contracts.\n */\nexport type PlanSubcommand = (typeof PLAN_SUBCOMMANDS)[number];\n\nexport const PLAN_SHOW_DEPTH_VALUES = [\"brief\", \"standard\", \"deep\"] as const;\n/**\n * Restricts plan show depth values accepted by command, SDK, and storage contracts.\n */\nexport type PlanShowDepth = (typeof PLAN_SHOW_DEPTH_VALUES)[number];\n\n/**\n * Documents the plan command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanCommandOptions {\n title?: string;\n description?: string;\n scope?: string;\n parent?: string;\n related?: string | string[];\n blocks?: string | string[];\n blockedBy?: string | string[];\n harness?: string;\n mode?: string;\n resumeContext?: string;\n tags?: string;\n priority?: string;\n body?: string;\n claim?: boolean;\n fromSearch?: string;\n stepTitle?: string;\n /**\n * pm-6mit: repeatable --step values. On create each value seeds one ordered\n * step (argv order; values are never comma-split so titles may contain\n * commas). On other subcommands a single value aliases stepTitle.\n */\n step?: string | string[];\n stepBody?: string;\n stepOwner?: string;\n stepStatus?: string;\n stepEvidence?: string;\n stepBlockedReason?: string;\n stepReplacement?: string;\n dependsOn?: string | string[];\n link?: string | string[];\n linkKind?: string;\n linkNote?: string;\n promoteToItemDep?: boolean;\n allowMultipleActive?: boolean;\n file?: string | string[];\n test?: string | string[];\n doc?: string | string[];\n decisionText?: string;\n decision?: string;\n decisionRationale?: string;\n decisionEvidence?: string;\n discoveryText?: string;\n discovery?: string;\n validationText?: string;\n validation?: string;\n validationCommand?: string;\n validationExpected?: string;\n depth?: string;\n fields?: string;\n steps?: string;\n template?: string;\n materializeType?: string;\n materializeParent?: string;\n materializeTags?: string;\n author?: string;\n message?: string;\n force?: boolean;\n}\n\n/**\n * Documents the plan command result payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanCommandResult {\n action: PlanSubcommand;\n plan: PlanResultPlan;\n step?: PlanStep;\n current_step?: PlanStep | undefined;\n next_actions?: string[];\n materialized?: { id: string; type: string; from_step: string }[];\n // pm-fl0c #10 (2026-05-28): steps that pm plan materialize intentionally\n // skipped (already-completed or already-materialized via an `implements`\n // link). Surfacing these makes `--steps all` idempotent without users\n // having to read history to find out what was done.\n materialize_skipped?: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[];\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the plan result plan payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanResultPlan {\n id: string;\n title: string;\n status: string;\n mode: PlanMode;\n scope?: string;\n harness?: PlanHarness;\n parent?: string;\n resume_context?: string;\n steps_summary: PlanStepSummary;\n current_step?: { id: string; order: number; title: string; status: PlanStepStatus } | undefined;\n blocked_steps?: { id: string; order: number; title: string; blocked_reason?: string }[];\n steps?: PlanStep[];\n decisions?: PlanDecision[];\n discoveries?: PlanDiscovery[];\n validation?: PlanValidationCheck[];\n linked_items?: { id: string; kind: DependencyKind }[];\n}\n\n/**\n * Documents the plan step summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepSummary {\n total: number;\n pending: number;\n in_progress: number;\n blocked: number;\n completed: number;\n skipped: number;\n superseded: number;\n /**\n * Whole-percent step-completion progress (`round(completed / total * 100)`),\n * surfaced so agents see plan progress without recomputing it (GH-158 #5).\n */\n completion_pct: number;\n}\n\nconst STEP_ID_PREFIX = \"plan-step-\";\nconst DEFAULT_PLAN_MODE: PlanMode = \"draft\";\n\nexport const PLAN_TEMPLATE_NAMES = [\"bug-investigation\", \"feature-implementation\", \"refactoring-sprint\"] as const;\n/**\n * Restricts plan template names accepted by `pm plan create --template` (GH-158 #2).\n */\nexport type PlanTemplateName = (typeof PLAN_TEMPLATE_NAMES)[number];\n\ninterface PlanTemplateStepSeed {\n title: string;\n body: string;\n}\n\n// Built-in step scaffolds for the most common agent workflows. Each seeds an\n// ordered list of pending steps so `pm plan create --template <name>` produces a\n// ready-to-execute plan instead of an empty shell (GH-158 #2).\nconst PLAN_TEMPLATES: Record<PlanTemplateName, PlanTemplateStepSeed[]> = {\n \"bug-investigation\": [\n { title: \"Reproduce the bug\", body: \"Capture exact steps, inputs, and the observed vs expected behavior.\" },\n { title: \"Locate the root cause\", body: \"Trace the failure to the responsible code path with evidence.\" },\n { title: \"Write a failing test\", body: \"Add a regression test that fails for the current bug.\" },\n { title: \"Implement the fix\", body: \"Apply the minimal change that makes the failing test pass.\" },\n { title: \"Verify and document\", body: \"Run the full suite and record the resolution and verification.\" },\n ],\n \"feature-implementation\": [\n { title: \"Clarify requirements & acceptance criteria\", body: \"Confirm scope, edge cases, and done-conditions.\" },\n { title: \"Design the approach\", body: \"Decide the data model, interfaces, and integration points.\" },\n { title: \"Implement the change\", body: \"Build the feature behind the agreed design.\" },\n { title: \"Add tests\", body: \"Cover the new behavior and its edge cases.\" },\n { title: \"Update docs & changelog\", body: \"Document the feature and surface it to users.\" },\n ],\n \"refactoring-sprint\": [\n { title: \"Map the current structure & risks\", body: \"Inventory the code to change and its blast radius.\" },\n { title: \"Add characterization tests\", body: \"Lock in current behavior before refactoring.\" },\n { title: \"Refactor incrementally\", body: \"Apply small, reversible steps keeping tests green.\" },\n { title: \"Verify behavior is unchanged\", body: \"Run the full suite and compare against the baseline.\" },\n { title: \"Clean up & document\", body: \"Remove dead code and record the new structure.\" },\n ],\n};\n\n/**\n * Resolves the ordered step seeds for a built-in plan template, rejecting\n * unknown names with the allowed set so agents can self-correct.\n */\nexport function resolvePlanTemplateSteps(raw: string): PlanTemplateStepSeed[] {\n const normalized = raw.trim().toLowerCase();\n const template = Object.prototype.hasOwnProperty.call(PLAN_TEMPLATES, normalized)\n ? PLAN_TEMPLATES[normalized as PlanTemplateName]\n : undefined;\n if (!template) {\n throw new PmCliError(`Unknown plan template \"${raw}\". Allowed: ${PLAN_TEMPLATE_NAMES.join(\", \")}`, EXIT_CODE.USAGE, {\n code: \"unknown_plan_template\",\n examples: [`pm plan create --title \"Fix login crash\" --template ${PLAN_TEMPLATE_NAMES[0]}`],\n });\n }\n return template.map((step) => ({ ...step }));\n}\n\n/**\n * Computes whole-percent step completion (`round(completed / total * 100)`),\n * returning 0 for an empty plan so the field is always a stable number.\n */\nfunction planCompletionPct(completed: number, total: number): number {\n return total > 0 ? Math.round((completed / total) * 100) : 0;\n}\n\n/* c8 ignore start -- detailed plan helper branches are validated through broader plan workflow integration tests. */\nfunction resolveAuthor(candidate: string | undefined, fallback: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;\n const trimmed = resolved.trim();\n return trimmed.length > 0 ? trimmed : \"unknown\";\n}\n\n/**\n * pm-6mit: ordered step titles from repeated --step values. Unlike toArray\n * this NEVER comma-splits — each --step value is one full step title, so\n * titles containing commas survive intact (also why --step must not be\n * list:true in contracts: the bootstrap coalescer would comma-join values).\n */\nfunction toOrderedStepTitles(value: unknown): string[] {\n const values = Array.isArray(value) ? value : value === undefined || value === null ? [] : [value];\n return values\n .filter((entry) => entry !== undefined && entry !== null)\n .map((entry) => (typeof entry === \"string\" ? entry : String(entry)).trim())\n .filter((entry) => entry.length > 0);\n}\n\nfunction toArray(value: string | string[] | undefined): string[] {\n if (Array.isArray(value)) return value.flatMap((entry) => splitCommaList(entry, { unique: false }));\n if (typeof value === \"string\" && value.trim().length > 0) {\n return splitCommaList(value, { unique: false });\n }\n return [];\n}\n\nfunction toSpecArray(value: string | string[] | undefined): string[] {\n if (Array.isArray(value)) return value.map((entry) => entry.trim()).filter(Boolean);\n if (typeof value === \"string\" && value.trim().length > 0) return [value.trim()];\n return [];\n}\n\nfunction asPlanMode(value: string | undefined, fallback: PlanMode = DEFAULT_PLAN_MODE): PlanMode {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_MODE_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid plan mode \"${value}\". Allowed: ${PLAN_MODE_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asStepStatus(value: string | undefined, fallback: PlanStepStatus = \"pending\"): PlanStepStatus {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_STEP_STATUS_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid step status \"${value}\". Allowed: ${PLAN_STEP_STATUS_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asLinkKind(value: string | undefined, fallback: PlanStepLinkKind = \"related\"): PlanStepLinkKind {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_STEP_LINK_KIND_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid step link kind \"${value}\". Allowed: ${PLAN_STEP_LINK_KIND_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asHarness(value: string | undefined): PlanHarness | undefined {\n if (value === undefined) return undefined;\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) return undefined;\n const found = PLAN_HARNESS_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid plan harness \"${value}\". Allowed: ${PLAN_HARNESS_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asDepth(value: string | undefined): PlanShowDepth {\n if (value === undefined) return \"brief\";\n const normalized = value.trim().toLowerCase();\n const found = PLAN_SHOW_DEPTH_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid --depth \"${value}\". Allowed: ${PLAN_SHOW_DEPTH_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction parsePlanFields(raw: string | undefined): string[] | null {\n if (raw === undefined) {\n return null;\n }\n const fields = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (fields.length === 0) {\n throw new PmCliError(\"Plan --fields requires a comma-separated list of plan field names\", EXIT_CODE.USAGE);\n }\n return fields;\n}\n\nconst PLAN_FIELD_KEYS = new Set<keyof PlanResultPlan>([\n \"id\",\n \"title\",\n \"status\",\n \"mode\",\n \"scope\",\n \"harness\",\n \"parent\",\n \"resume_context\",\n \"steps_summary\",\n \"current_step\",\n \"blocked_steps\",\n \"steps\",\n \"decisions\",\n \"discoveries\",\n \"validation\",\n \"linked_items\",\n]);\n\nfunction projectPlanForFields(plan: PlanResultPlan, fields: string[]): PlanResultPlan {\n const source = plan as unknown as Record<string, unknown>;\n const projected: Record<string, unknown> = {};\n const unknownFields: string[] = [];\n for (const field of fields) {\n const normalized = field.startsWith(\"plan.\") ? field.slice(\"plan.\".length) : field;\n if (normalized.length === 0) {\n continue;\n }\n if (!PLAN_FIELD_KEYS.has(normalized as keyof PlanResultPlan)) {\n unknownFields.push(field);\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(source, normalized)) {\n projected[normalized] = source[normalized];\n }\n }\n if (unknownFields.length > 0) {\n throw new PmCliError(`Unknown Plan --fields value(s): ${unknownFields.join(\", \")}`, EXIT_CODE.USAGE, {\n nextSteps: [\n `Use --fields ${[...PLAN_FIELD_KEYS].join(\",\")}`,\n \"Run pm plan show <id> --depth brief for compact default fields.\",\n ],\n recovery: {\n provided_fields: unknownFields,\n suggested_retry: `pm plan show <id> --fields ${[...PLAN_FIELD_KEYS].join(\",\")}`,\n },\n });\n }\n return projected as unknown as PlanResultPlan;\n}\n\nfunction parsePairList(raw: string, label: string): Record<string, string> {\n const out: Record<string, string> = {};\n for (const entry of raw.split(\",\")) {\n const trimmed = entry.trim();\n if (trimmed.length === 0) continue;\n const equalsIndex = trimmed.indexOf(\"=\");\n if (equalsIndex <= 0) {\n throw new PmCliError(`Invalid ${label} entry \"${trimmed}\"; expected key=value`, EXIT_CODE.USAGE);\n }\n out[trimmed.slice(0, equalsIndex).trim().toLowerCase()] = trimmed.slice(equalsIndex + 1).trim();\n }\n return out;\n}\n\nfunction parseStepFile(spec: string): PlanStepFile {\n const fields = parsePairList(spec, \"--file\");\n if (!fields.path) {\n throw new PmCliError(\"--file requires path=<value>\", EXIT_CODE.USAGE);\n }\n const file: PlanStepFile = { path: fields.path };\n if (fields.scope === \"global\" || fields.scope === \"project\") file.scope = fields.scope;\n if (fields.note) file.note = fields.note;\n return file;\n}\n\nfunction parseStepTest(spec: string): PlanStepTest {\n const fields = parsePairList(spec, \"--test\");\n if (!fields.command && !fields.path) {\n throw new PmCliError(\"--test requires at least command=<value> or path=<value>\", EXIT_CODE.USAGE);\n }\n const test: PlanStepTest = {};\n if (fields.command) test.command = fields.command;\n if (fields.path) test.path = fields.path;\n if (fields.note) test.note = fields.note;\n return test;\n}\n\nfunction parseStepDoc(spec: string): PlanStepDoc {\n const fields = parsePairList(spec, \"--doc\");\n if (!fields.path) {\n throw new PmCliError(\"--doc requires path=<value>\", EXIT_CODE.USAGE);\n }\n const doc: PlanStepDoc = { path: fields.path };\n if (fields.scope === \"global\" || fields.scope === \"project\") doc.scope = fields.scope;\n if (fields.note) doc.note = fields.note;\n return doc;\n}\n\nfunction summarizeSteps(steps: PlanStep[]): PlanStepSummary {\n const summary: PlanStepSummary = {\n total: steps.length,\n pending: 0,\n in_progress: 0,\n blocked: 0,\n completed: 0,\n skipped: 0,\n superseded: 0,\n completion_pct: 0,\n };\n for (const step of steps) {\n summary[step.status] += 1;\n }\n summary.completion_pct = planCompletionPct(summary.completed, summary.total);\n return summary;\n}\n\nfunction newStepId(existing: PlanStep[]): string {\n const used = new Set(existing.map((step) => step.id));\n for (let cursor = existing.length + 1; cursor < existing.length + 1024; cursor += 1) {\n const candidate = `${STEP_ID_PREFIX}${String(cursor).padStart(3, \"0\")}`;\n if (!used.has(candidate)) return candidate;\n }\n /* c8 ignore next -- step id allocation only fails if 1024 consecutive ids are taken. */\n throw new PmCliError(\"Could not allocate step id (limit reached)\", EXIT_CODE.GENERIC_FAILURE);\n}\n\nfunction resolveStepRef(steps: PlanStep[], ref: string): PlanStep {\n const trimmed = ref.trim();\n if (trimmed.length === 0) {\n throw new PmCliError(\"Step reference cannot be empty\", EXIT_CODE.USAGE);\n }\n const direct = steps.find((step) => step.id === trimmed);\n if (direct) return direct;\n if (/^\\d+$/.test(trimmed)) {\n const order = Number.parseInt(trimmed, 10);\n const byOrder = steps.find((step) => step.order === order);\n if (byOrder) return byOrder;\n }\n throw new PmCliError(`Step \"${ref}\" not found in plan`, EXIT_CODE.NOT_FOUND);\n}\n\ninterface MaterializeTargetResolution {\n targets: PlanStep[];\n skipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[];\n}\n\n// pm-fl0c #10 (2026-05-28): skip steps whose status is \"completed\" and steps\n// that already have an `implements` link from a prior materialize run, so\n// `pm plan materialize --steps all` is idempotent and never re-creates fresh\n// Tasks for work already tracked. Explicit step refs are still allowed\n// through (the user asked by ID) but the skip-reason is recorded.\nfunction classifyMaterializeSkip(\n step: PlanStep,\n): { reason: \"already_completed\" | \"already_materialized\"; existing_id?: string } | undefined {\n if (step.status === \"completed\") {\n return { reason: \"already_completed\" };\n }\n const existingImplements = (step.linked_items ?? []).find((link) => link.kind === \"implements\");\n if (existingImplements) {\n return { reason: \"already_materialized\", existing_id: existingImplements.id };\n }\n return undefined;\n}\n\nfunction resolveMaterializeTargets(steps: PlanStep[], refs: string[]): MaterializeTargetResolution {\n const allRefs = refs.filter((ref) => ref.trim().toLowerCase() === \"all\");\n const targets: PlanStep[] = [];\n const skipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[] = [];\n if (allRefs.length > 0) {\n if (refs.length > allRefs.length) {\n throw new PmCliError(\"pm plan materialize --steps all cannot be combined with other step refs\", EXIT_CODE.USAGE);\n }\n for (const step of steps.slice().sort((left, right) => left.order - right.order)) {\n const skip = classifyMaterializeSkip(step);\n if (skip) {\n skipped.push({ from_step: step.id, ...skip });\n continue;\n }\n targets.push(step);\n }\n return { targets, skipped };\n }\n const seen = new Set<string>();\n for (const ref of refs) {\n const step = resolveStepRef(steps, ref);\n if (seen.has(step.id)) continue;\n seen.add(step.id);\n const skip = classifyMaterializeSkip(step);\n if (skip) {\n skipped.push({ from_step: step.id, ...skip });\n continue;\n }\n targets.push(step);\n }\n return { targets, skipped };\n}\n\nfunction resolvePlanLogText(kind: \"decision\" | \"discovery\" | \"validation\", options: PlanCommandOptions): string | undefined {\n const canonical =\n kind === \"decision\"\n ? options.decisionText\n : kind === \"discovery\"\n ? options.discoveryText\n : options.validationText;\n const shorthand =\n kind === \"decision\"\n ? options.decision\n : kind === \"discovery\"\n ? options.discovery\n : options.validation;\n return canonical?.trim() || shorthand?.trim() || undefined;\n}\n\nfunction findCurrentStep(steps: PlanStep[]): PlanStep | undefined {\n return steps.find((step) => step.status === \"in_progress\")\n ?? steps.find((step) => step.status === \"pending\");\n}\n\nfunction blockedSteps(steps: PlanStep[]): { id: string; order: number; title: string; blocked_reason?: string }[] {\n return steps\n .filter((step) => step.status === \"blocked\")\n .map((step) => ({ id: step.id, order: step.order, title: step.title, blocked_reason: step.blocked_reason }));\n}\n\nfunction projectPlan(item: ItemMetadata, depth: PlanShowDepth = \"brief\"): PlanResultPlan {\n const steps = (item.plan_steps ?? []).slice().sort((left, right) => left.order - right.order);\n const summary = summarizeSteps(steps);\n const current = findCurrentStep(steps);\n const projection: PlanResultPlan = {\n id: item.id,\n title: item.title,\n status: item.status,\n mode: (item.plan_mode ?? DEFAULT_PLAN_MODE) as PlanMode,\n scope: item.plan_scope,\n harness: item.plan_harness,\n parent: item.parent,\n resume_context: item.plan_resume_context,\n steps_summary: summary,\n current_step: current\n ? { id: current.id, order: current.order, title: current.title, status: current.status }\n : undefined,\n blocked_steps: blockedSteps(steps),\n linked_items: (item.dependencies ?? []).map((dep) => ({ id: dep.id, kind: dep.kind })),\n };\n if (depth === \"standard\" || depth === \"deep\") {\n projection.steps = steps;\n }\n if (depth === \"deep\") {\n projection.decisions = item.plan_decisions ?? [];\n projection.discoveries = item.plan_discoveries ?? [];\n projection.validation = item.plan_validation ?? [];\n }\n return projection;\n}\n\nfunction nextActionsFor(planId: string, plan: PlanResultPlan): string[] {\n const tips: string[] = [];\n if (plan.steps_summary.total === 0) {\n tips.push(`pm plan add-step ${planId} --step-title \"First step\"`);\n }\n if (plan.current_step) {\n tips.push(\n `pm plan update-step ${planId} ${plan.current_step.id} --step-status in_progress`,\n `pm plan complete-step ${planId} ${plan.current_step.id} --step-evidence \"...\"`,\n );\n }\n if (plan.steps_summary.blocked > 0) {\n tips.push(`pm plan show ${planId} --depth standard`);\n }\n if (plan.mode === \"draft\" || plan.mode === \"research\") {\n tips.push(`pm plan approve ${planId} --message \"ready to execute\"`);\n }\n if (plan.steps_summary.completed === plan.steps_summary.total && plan.steps_summary.total > 0) {\n tips.push(`pm close ${planId} \"plan complete\"`);\n }\n return tips;\n}\n\nfunction ensurePlanItem(item: ItemMetadata): void {\n const normalizedType = (item.type ?? \"\").trim().toLowerCase();\n if (normalizedType !== \"plan\") {\n throw new PmCliError(\n `Item ${item.id} is type ${item.type}; pm plan commands require type=Plan. Use pm plan create or pm create --type Plan first.`,\n EXIT_CODE.USAGE,\n {\n code: \"wrong_item_type\",\n required: \"Use pm plan commands only with items whose type is Plan.\",\n why: \"Plan commands read and mutate Plan-specific step, decision, discovery, and validation fields.\",\n examples: [\n `pm get ${item.id} --depth brief`,\n 'pm plan create --title \"Execution plan\" --scope \"<goal>\"',\n ],\n },\n );\n }\n}\n\ninterface PlanWriteContext {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n}\n\nasync function loadContext(global: GlobalOptions): Promise<PlanWriteContext> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n return { pmRoot, settings };\n}\n\nasync function readPlanItem(ctx: PlanWriteContext, id: string): Promise<{ document: ItemDocument; itemId: string }> {\n const typeRegistry = resolveItemTypeRegistry(ctx.settings, getActiveExtensionRegistrations());\n const located = await locateItem(ctx.pmRoot, id, ctx.settings.id_prefix, ctx.settings.item_format, typeRegistry.type_to_folder);\n if (!located) {\n throw new PmCliError(`Plan ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: ctx.settings.schema });\n ensurePlanItem(loaded.document.metadata);\n return { document: loaded.document, itemId: located.id };\n}\n\nasync function planCreate(\n options: PlanCommandOptions,\n global: GlobalOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const title = options.title?.trim();\n if (!title) {\n throw new PmCliError(\"pm plan create requires --title\", EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: ['pm plan create --title \"Refactor lock retry\" --scope pm-a1b2'],\n });\n }\n const mode = asPlanMode(options.mode, DEFAULT_PLAN_MODE);\n const harness = asHarness(options.harness);\n const fromSearch = options.fromSearch?.trim();\n\n const related = toArray(options.related);\n const blocks = toArray(options.blocks);\n const blockedBy = toArray(options.blockedBy);\n\n const deps: string[] = [];\n if (options.parent) {\n deps.push(`id=${options.parent.trim()},kind=parent`);\n }\n for (const ref of related) deps.push(`id=${ref},kind=related`);\n for (const ref of blocks) deps.push(`id=${ref},kind=blocks`);\n for (const ref of blockedBy) deps.push(`id=${ref},kind=blocked_by`);\n\n const description = options.description?.trim() ?? options.scope?.trim() ?? title;\n const createOptions: CreateCommandOptions = {\n title,\n description,\n type: \"Plan\",\n body: options.body,\n tags: options.tags,\n priority: options.priority,\n parent: options.parent,\n dep: deps.length > 0 ? deps : undefined,\n author: options.author,\n message: options.message ?? (fromSearch ? `plan create (search: ${fromSearch})` : `plan create`),\n };\n\n const createResult: CreateResult = await runCreate(createOptions, global);\n\n // The create command stores type_options. To use real metadata keys, run a follow-up mutate.\n const seedResult = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_metadata\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"seed plan metadata\",\n mutate(doc) {\n const changed: string[] = [];\n doc.metadata.plan_mode = mode;\n changed.push(\"plan_mode\");\n if (harness) {\n doc.metadata.plan_harness = harness;\n changed.push(\"plan_harness\");\n }\n if (options.scope?.trim()) {\n doc.metadata.plan_scope = options.scope.trim();\n changed.push(\"plan_scope\");\n }\n if (options.resumeContext?.trim()) {\n doc.metadata.plan_resume_context = options.resumeContext.trim();\n changed.push(\"plan_resume_context\");\n }\n doc.metadata.plan_steps = doc.metadata.plan_steps ?? [];\n return { changedFields: changed };\n },\n });\n\n let finalMetadata: ItemMetadata = seedResult.item;\n let initialStep: PlanStep | undefined;\n const initialValidationText = options.validationText?.trim();\n const initialValidationCommand = options.validationCommand?.trim();\n const initialValidationExpected = options.validationExpected?.trim();\n const initialValidation =\n initialValidationText || initialValidationCommand || initialValidationExpected\n ? ({\n text: initialValidationText || initialValidationCommand || \"Validation check\",\n command: initialValidationCommand || undefined,\n expected: initialValidationExpected || undefined,\n } satisfies PlanValidationCheck)\n : undefined;\n // pm-6mit: collect ordered initial-step titles. Mixed-usage semantics\n // (documented on pm-6mit): --step-title (when present) is the FIRST step,\n // followed by each repeated --step value in argv order.\n const stepTitleFlag = options.stepTitle?.trim();\n const repeatedStepTitles = toOrderedStepTitles(options.step);\n const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];\n const stepTitles = [\n ...(stepTitleFlag ? [stepTitleFlag] : []),\n ...repeatedStepTitles,\n ...templateSteps.map((step) => step.title),\n ];\n const hasPerStepDetailOptions =\n Boolean(options.stepBody?.trim()) ||\n Boolean(options.stepOwner?.trim()) ||\n Boolean(options.stepStatus?.trim()) ||\n Boolean(options.stepEvidence?.trim()) ||\n Boolean(options.stepBlockedReason?.trim()) ||\n Boolean(options.stepReplacement?.trim()) ||\n toArray(options.dependsOn).length > 0 ||\n toArray(options.link).length > 0 ||\n toSpecArray(options.file).length > 0 ||\n toSpecArray(options.test).length > 0 ||\n toSpecArray(options.doc).length > 0;\n if ((stepTitleFlag || repeatedStepTitles.length > 0) && templateSteps.length > 0) {\n throw new PmCliError(\n \"pm plan create --template cannot be combined with --step-title or --step; choose one step seeding source\",\n EXIT_CODE.USAGE,\n {\n code: \"ambiguous_option_combination\",\n examples: [\n `pm plan create --title \"Fix login crash\" --template ${PLAN_TEMPLATE_NAMES[0]}`,\n 'pm plan create --title \"Custom plan\" --step \"Read the code\" --step \"Write the fix\"',\n ],\n },\n );\n }\n if (stepTitles.length > 1 && hasPerStepDetailOptions) {\n // Per-step detail flags target exactly one step; silently attaching them to\n // the first (or all) of several seeded steps would be unpredictable.\n throw new PmCliError(\n \"pm plan create per-step options apply to a single initial step; with multiple --step values create the plan first, then refine steps individually\",\n EXIT_CODE.USAGE,\n {\n code: \"ambiguous_option_combination\",\n examples: [\n 'pm plan create --title \"Execution plan\" --step \"Read the code\" --step \"Write the fix\"',\n 'pm plan update-step <plan-id> plan-step-001 --step-body \"Inspect retry path\"',\n ],\n },\n );\n }\n let initialSteps: PlanStep[] = [];\n if (stepTitles.length === 1) {\n const status = asStepStatus(options.stepStatus, \"pending\");\n const linkedItems = buildLinkInputs(options, \"depends_on\");\n const files = toSpecArray(options.file).map(parseStepFile);\n const tests = toSpecArray(options.test).map(parseStepTest);\n const docs = toSpecArray(options.doc).map(parseStepDoc);\n const now = nowIso();\n initialSteps = [{\n id: \"plan-step-001\",\n order: 1,\n title: stepTitles[0],\n body: options.stepBody?.trim() || undefined,\n status,\n owner: options.stepOwner?.trim() || undefined,\n evidence: options.stepEvidence?.trim() || undefined,\n blocked_reason: status === \"blocked\" ? options.stepBlockedReason?.trim() || \"\" : undefined,\n linked_items: linkedItems.length > 0 ? linkedItems : undefined,\n files: files.length > 0 ? files : undefined,\n tests: tests.length > 0 ? tests : undefined,\n docs: docs.length > 0 ? docs : undefined,\n created_at: now,\n updated_at: now,\n completed_at: status === \"completed\" ? now : undefined,\n }];\n } else if (stepTitles.length > 1) {\n const now = nowIso();\n initialSteps = stepTitles.map((stepTitle, index) => ({\n id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, \"0\")}`,\n order: index + 1,\n title: stepTitle,\n body: templateSteps[index]?.body,\n status: \"pending\" as const,\n created_at: now,\n updated_at: now,\n }));\n }\n if (initialSteps.length > 0) {\n initialStep = initialSteps[0];\n const stepped = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_initial_step\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message:\n initialSteps.length === 1\n ? `plan create initial step \"${initialSteps[0].title}\"`\n : `plan create ${initialSteps.length} initial steps`,\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n doc.metadata.plan_steps = initialSteps;\n if (initialValidation) {\n doc.metadata.plan_validation = [...(doc.metadata.plan_validation ?? []), initialValidation];\n }\n return { changedFields: initialValidation ? [\"plan_steps\", \"plan_validation\"] : [\"plan_steps\"] };\n },\n });\n finalMetadata = stepped.item;\n } else if (initialValidation) {\n const validated = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_initial_validation\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"plan create initial validation\",\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n doc.metadata.plan_validation = [...(doc.metadata.plan_validation ?? []), initialValidation];\n return { changedFields: [\"plan_validation\"] };\n },\n });\n finalMetadata = validated.item;\n } else if (hasPerStepDetailOptions) {\n throw new PmCliError(\"pm plan create step options require --step-title (or a single --step)\", EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: ['pm plan create --title \"Execution plan\" --step-title \"Read the code\"'],\n });\n }\n if (options.claim) {\n const claimed = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"claim\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"plan claim by author\",\n mutate(doc) {\n doc.metadata.assignee = resolveAuthor(options.author, ctx.settings.author_default);\n return { changedFields: [\"assignee\"] };\n },\n });\n finalMetadata = claimed.item;\n }\n\n const plan = projectPlan(finalMetadata, \"brief\");\n return {\n action: \"create\",\n plan,\n step: initialStep,\n next_actions: nextActionsFor(createResult.item.id, plan),\n warnings: [...createResult.warnings],\n generated_at: nowIso(),\n };\n}\n\nasync function planShow(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const depth = asDepth(options.depth);\n const fields = parsePlanFields(options.fields);\n const { document, itemId } = await readPlanItem(ctx, id);\n const fullPlan = projectPlan(document.metadata, fields === null ? depth : \"deep\");\n const plan = fields === null ? fullPlan : projectPlanForFields(fullPlan, fields);\n return {\n action: \"show\",\n plan,\n next_actions: nextActionsFor(itemId, fullPlan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\ninterface MutateStepArgs {\n id: string;\n options: PlanCommandOptions;\n ctx: PlanWriteContext;\n op: string;\n message: string;\n mutator(steps: PlanStep[], doc: ItemDocument): { changedSteps: string[]; current?: PlanStep; resultStep?: PlanStep };\n}\n\nasync function mutatePlanSteps(args: MutateStepArgs): Promise<{ document: ItemDocument; resultStep?: PlanStep; itemId: string }> {\n const author = resolveAuthor(args.options.author, args.ctx.settings.author_default);\n let resultStep: PlanStep | undefined;\n const result = await mutateItem({\n pmRoot: args.ctx.pmRoot,\n settings: args.ctx.settings,\n id: args.id,\n op: args.op,\n author,\n message: args.options.message ?? args.message,\n force: args.options.force,\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n const steps = (doc.metadata.plan_steps ?? []).slice();\n const before = JSON.stringify(steps);\n const outcome = args.mutator(steps, doc);\n resultStep = outcome.resultStep;\n const sorted = steps\n .slice()\n .sort((left, right) => left.order - right.order)\n .map((step, index) => ({ ...step, order: index + 1 }));\n doc.metadata.plan_steps = sorted;\n const after = JSON.stringify(sorted);\n const changedFields = before === after ? [] : [\"plan_steps\"];\n if (changedFields.length === 0 && outcome.changedSteps.length === 0) {\n return { changedFields: [] };\n }\n return { changedFields: changedFields.length > 0 ? changedFields : [\"plan_steps\"] };\n },\n });\n return {\n document: { metadata: result.item, body: result.body },\n resultStep,\n itemId: result.item.id,\n };\n}\n\nasync function planAddStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const title = options.stepTitle?.trim();\n if (!title) {\n throw new PmCliError(\"pm plan add-step requires --step-title\", EXIT_CODE.USAGE);\n }\n const status = asStepStatus(options.stepStatus, \"pending\");\n const allowMultipleActive = options.allowMultipleActive === true;\n\n const linkedItems = buildLinkInputs(options, \"depends_on\");\n\n const files = toSpecArray(options.file).map(parseStepFile);\n const tests = toSpecArray(options.test).map(parseStepTest);\n const docs = toSpecArray(options.doc).map(parseStepDoc);\n\n const { document, resultStep, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_add_step\",\n message: `plan add-step \"${title}\"`,\n mutator(steps) {\n const order = steps.length + 1;\n if (status === \"in_progress\" && !allowMultipleActive) {\n for (const step of steps) {\n if (step.status === \"in_progress\") {\n throw new PmCliError(\n `Plan already has step ${step.id} in_progress. Pass --allow-multiple-active or update that step first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n }\n }\n const now = nowIso();\n const step: PlanStep = {\n id: newStepId(steps),\n order,\n title,\n body: options.stepBody?.trim() || undefined,\n status,\n owner: options.stepOwner?.trim() || undefined,\n evidence: options.stepEvidence?.trim() || undefined,\n blocked_reason: status === \"blocked\" ? options.stepBlockedReason?.trim() || \"\" : undefined,\n linked_items: linkedItems.length > 0 ? linkedItems : undefined,\n files: files.length > 0 ? files : undefined,\n tests: tests.length > 0 ? tests : undefined,\n docs: docs.length > 0 ? docs : undefined,\n created_at: now,\n updated_at: now,\n completed_at: status === \"completed\" ? now : undefined,\n };\n steps.push(step);\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"add-step\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nfunction buildLinkInputs(options: PlanCommandOptions, fallbackKind: PlanStepLinkKind): PlanStepLink[] {\n const dependsOn = toArray(options.dependsOn).map((id) => ({ id, kind: fallbackKind } as PlanStepLink));\n const related = toArray(options.related).map((id) => ({ id, kind: \"related\" } as PlanStepLink));\n const blocks = toArray(options.blocks).map((id) => ({ id, kind: \"blocks\" } as PlanStepLink));\n const blockedBy = toArray(options.blockedBy).map((id) => ({ id, kind: \"blocked_by\" } as PlanStepLink));\n const explicit = toArray(options.link);\n const explicitKind = asLinkKind(options.linkKind, fallbackKind);\n const note = options.linkNote?.trim();\n const explicitLinks = explicit.map((id) => {\n const link: PlanStepLink = { id, kind: explicitKind };\n if (note) link.note = note;\n return link;\n });\n return [...dependsOn, ...related, ...blocks, ...blockedBy, ...explicitLinks];\n}\n\nasync function planUpdateStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n args: { stepRef: string; finalStatus?: PlanStepStatus; op: string; allowMultipleActive?: boolean },\n): Promise<PlanCommandResult> {\n const { document, resultStep, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: args.op,\n message: options.message ?? `${args.op} ${args.stepRef}`,\n mutator(steps, doc) {\n const step = resolveStepRef(steps, args.stepRef);\n const now = nowIso();\n const desiredStatus = args.finalStatus ?? asStepStatus(options.stepStatus, step.status);\n if (desiredStatus === \"in_progress\" && step.status !== \"in_progress\" && !options.allowMultipleActive && !args.allowMultipleActive) {\n for (const other of steps) {\n if (other.id !== step.id && other.status === \"in_progress\") {\n throw new PmCliError(\n `Plan already has step ${other.id} in_progress. Pass --allow-multiple-active or update that step first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n }\n }\n if (desiredStatus === \"blocked\" && !options.stepBlockedReason?.trim() && !step.blocked_reason) {\n throw new PmCliError(\n \"Blocking a step requires --step-blocked-reason or an already-recorded blocked_reason.\",\n EXIT_CODE.USAGE,\n );\n }\n if (options.stepTitle?.trim()) step.title = options.stepTitle.trim();\n if (options.stepBody !== undefined) step.body = options.stepBody.trim() || undefined;\n if (options.stepOwner !== undefined) step.owner = options.stepOwner.trim() || undefined;\n if (options.stepEvidence !== undefined) step.evidence = options.stepEvidence.trim() || undefined;\n if (options.stepBlockedReason !== undefined) step.blocked_reason = options.stepBlockedReason.trim() || undefined;\n if (options.stepReplacement !== undefined) step.superseded_by = options.stepReplacement.trim() || undefined;\n step.status = desiredStatus;\n step.updated_at = now;\n if (desiredStatus === \"completed\" && !step.completed_at) {\n step.completed_at = now;\n } else if (desiredStatus !== \"completed\") {\n step.completed_at = undefined;\n }\n doc.metadata.updated_at = now;\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: args.op === \"plan_complete_step\" ? \"complete-step\" : args.op === \"plan_block_step\" ? \"block-step\" : \"update-step\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planReorderStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n newOrder: number,\n): Promise<PlanCommandResult> {\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_reorder_step\",\n message: options.message ?? `plan reorder-step ${stepRef} -> ${newOrder}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const filtered = steps.filter((entry) => entry.id !== step.id);\n const clamped = Math.max(1, Math.min(newOrder, filtered.length + 1));\n filtered.splice(clamped - 1, 0, step);\n filtered.forEach((entry, index) => {\n entry.order = index + 1;\n entry.updated_at = nowIso();\n });\n steps.length = 0;\n steps.push(...filtered);\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"reorder-step\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planRemoveStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_remove_step\",\n message: options.message ?? `plan remove-step ${stepRef}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const remaining = steps.filter((entry) => entry.id !== step.id);\n remaining.forEach((entry, index) => {\n entry.order = index + 1;\n });\n steps.length = 0;\n steps.push(...remaining);\n return { changedSteps: [step.id] };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"remove-step\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planLink(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const newLinks = buildLinkInputs(options, asLinkKind(options.linkKind, \"related\"));\n if (newLinks.length === 0) {\n throw new PmCliError(\"pm plan link requires at least one --link/--related/--blocks/--blocked-by/--depends-on id\", EXIT_CODE.USAGE);\n }\n const promoteToItemDep = options.promoteToItemDep === true;\n const { document, itemId, resultStep } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_link_step\",\n message: options.message ?? `plan link ${stepRef}`,\n mutator(steps, doc) {\n const step = resolveStepRef(steps, stepRef);\n const existing = step.linked_items ?? [];\n const dedupKey = (link: PlanStepLink) => `${link.kind}:${link.id}`;\n const seen = new Set(existing.map(dedupKey));\n for (const link of newLinks) {\n const key = dedupKey(link);\n if (seen.has(key)) continue;\n existing.push(link);\n seen.add(key);\n }\n step.linked_items = existing;\n step.updated_at = nowIso();\n if (promoteToItemDep) {\n const deps = doc.metadata.dependencies ?? [];\n const depKey = (dep: { id: string; kind: string }) => `${dep.kind}:${dep.id}`;\n const seenDeps = new Set(deps.map(depKey));\n for (const link of newLinks) {\n const candidate = {\n id: link.id,\n kind: link.kind as DependencyKind,\n created_at: nowIso(),\n author: resolveAuthor(options.author, ctx.settings.author_default),\n };\n if (seenDeps.has(depKey(candidate))) continue;\n deps.push(candidate);\n seenDeps.add(depKey(candidate));\n }\n doc.metadata.dependencies = deps;\n }\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"link\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planUnlink(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const removeIds = toArray(options.link);\n if (removeIds.length === 0) {\n throw new PmCliError(\"pm plan unlink requires --link <id> to remove\", EXIT_CODE.USAGE);\n }\n const { document, itemId, resultStep } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_unlink_step\",\n message: options.message ?? `plan unlink ${stepRef}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const filtered = (step.linked_items ?? []).filter((link) => !removeIds.includes(link.id));\n step.linked_items = filtered.length > 0 ? filtered : undefined;\n step.updated_at = nowIso();\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"unlink\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planAppendLog(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n kind: \"decision\" | \"discovery\" | \"validation\",\n): Promise<PlanCommandResult> {\n const logText = resolvePlanLogText(kind, options);\n if (!logText) {\n const canonical = `--${kind}-text`;\n const shorthand = `--${kind}`;\n throw new PmCliError(`pm plan ${kind} requires ${canonical}`, EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: [\n `pm plan ${kind} <plan-id> ${canonical} \"...\"`,\n `pm plan ${kind} <plan-id> ${shorthand} \"...\"`,\n ],\n recovery: {\n suggested_retry: `pm plan ${kind} <plan-id> ${canonical} <value>`,\n },\n });\n }\n const author = resolveAuthor(options.author, ctx.settings.author_default);\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: `plan_append_${kind}`,\n message: options.message ?? `plan ${kind} append`,\n mutator(_steps, doc) {\n const now = nowIso();\n if (kind === \"decision\") {\n const list = doc.metadata.plan_decisions ?? [];\n list.push({\n ts: now,\n author,\n decision: logText,\n rationale: options.decisionRationale?.trim() || undefined,\n evidence: options.decisionEvidence?.trim() || undefined,\n });\n doc.metadata.plan_decisions = list;\n return { changedSteps: [] };\n }\n if (kind === \"discovery\") {\n const list = doc.metadata.plan_discoveries ?? [];\n list.push({ ts: now, author, text: logText });\n doc.metadata.plan_discoveries = list;\n return { changedSteps: [] };\n }\n const list = doc.metadata.plan_validation ?? [];\n list.push({\n text: logText,\n command: options.validationCommand?.trim() || undefined,\n expected: options.validationExpected?.trim() || undefined,\n });\n doc.metadata.plan_validation = list;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"deep\");\n return {\n action: kind,\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planResume(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const text = options.resumeContext?.trim();\n if (!text) {\n throw new PmCliError(\"pm plan resume requires --resume-context <text>\", EXIT_CODE.USAGE);\n }\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_resume\",\n message: options.message ?? \"plan resume context update\",\n mutator(_steps, doc) {\n doc.metadata.plan_resume_context = text;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"brief\");\n return {\n action: \"resume\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planApprove(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const mode = asPlanMode(options.mode ?? \"approved\", \"approved\");\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_approve\",\n message: options.message ?? `plan approve mode=${mode}`,\n mutator(_steps, doc) {\n doc.metadata.plan_mode = mode;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"brief\");\n return {\n action: \"approve\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planMaterialize(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const stepRefs = toArray(options.steps);\n if (stepRefs.length === 0) {\n throw new PmCliError(\"pm plan materialize requires --steps <ids|orders|all>\", EXIT_CODE.USAGE);\n }\n const targetType = options.materializeType?.trim() || \"Task\";\n const typeRegistry = resolveItemTypeRegistry(ctx.settings, getActiveExtensionRegistrations());\n const resolvedTypeName = resolveTypeName(targetType, typeRegistry);\n if (!resolvedTypeName) {\n throw new PmCliError(`Invalid --materialize-type \"${targetType}\"`, EXIT_CODE.USAGE);\n }\n const parent = options.materializeParent?.trim() || id;\n const tags = options.materializeTags;\n\n const planRead = await readPlanItem(ctx, id);\n const steps = (planRead.document.metadata.plan_steps ?? []).slice();\n const { targets, skipped: materializeSkipped } = resolveMaterializeTargets(steps, stepRefs);\n if (targets.length === 0) {\n if (materializeSkipped.length > 0) {\n // PR #78 / Gemini medium follow-up: when every selected step was\n // already materialized or completed, return a successful no-op\n // result (exit 0) instead of throwing NOT_FOUND. This makes\n // `pm plan materialize --steps all` truly idempotent for CI/agent\n // workflows; the skip reasons + warnings still surface what was\n // intentionally not redone.\n const plan = projectPlan(planRead.document.metadata, \"standard\");\n return {\n action: \"materialize\",\n plan,\n materialized: [],\n materialize_skipped: materializeSkipped,\n next_actions: nextActionsFor(planRead.itemId, plan),\n warnings: materializeSkipped.map(\n (entry) =>\n `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : \"\"}`,\n ),\n generated_at: nowIso(),\n };\n }\n throw new PmCliError(\"No matching plan steps found for --steps\", EXIT_CODE.NOT_FOUND);\n }\n\n const materialized: { id: string; type: string; from_step: string }[] = [];\n for (const step of targets) {\n const deps = [\n `id=${parent},kind=parent`,\n `id=${planRead.itemId},kind=discovered_from`,\n ];\n for (const link of step.linked_items ?? []) {\n const realKind: DependencyKind =\n link.kind === \"blocked_by\" || link.kind === \"blocks\" || link.kind === \"related\" || link.kind === \"discovered_from\"\n ? link.kind\n : \"related\";\n deps.push(`id=${link.id},kind=${realKind}`);\n }\n const created = await runCreate(\n {\n title: step.title,\n description: step.body?.trim() || step.title,\n type: resolvedTypeName,\n parent,\n tags,\n author: options.author,\n message: options.message ?? `materialized from plan ${planRead.itemId} step ${step.id}`,\n dep: deps,\n },\n ctx.settings ? { ...({} as GlobalOptions), path: ctx.pmRoot } as GlobalOptions : ({} as GlobalOptions),\n );\n materialized.push({ id: created.item.id, type: resolvedTypeName, from_step: step.id });\n }\n\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_materialize\",\n message: options.message ?? `plan materialize ${stepRefs.join(\",\")}`,\n mutator(currentSteps, doc) {\n for (const target of targets) {\n const matched = materialized.find((entry) => entry.from_step === target.id);\n if (!matched) continue;\n const step = currentSteps.find((entry) => entry.id === target.id);\n if (!step) continue;\n const links = step.linked_items ?? [];\n links.push({ id: matched.id, kind: \"implements\", note: `materialized as ${matched.type}` });\n step.linked_items = links;\n step.updated_at = nowIso();\n }\n return { changedSteps: targets.map((entry) => entry.id) };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"materialize\",\n plan,\n materialized,\n ...(materializeSkipped.length > 0 ? { materialize_skipped: materializeSkipped } : {}),\n next_actions: nextActionsFor(itemId, plan),\n warnings: materializeSkipped.map(\n (entry) =>\n `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : \"\"}`,\n ),\n generated_at: nowIso(),\n };\n}\n\n/* c8 ignore stop */\n/**\n * Documents the plan dispatch input payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanDispatchInput {\n subcommand: PlanSubcommand;\n id?: string;\n stepRef?: string;\n reorderTo?: number;\n options: PlanCommandOptions;\n global: GlobalOptions;\n}\n\n/**\n * Implements run plan for the public runtime surface of this module.\n */\nexport async function runPlan(input: PlanDispatchInput): Promise<PlanCommandResult> {\n const ctx = await loadContext(input.global);\n // pm-6mit: --step accumulates ordered step titles on create. For every other\n // subcommand a single --step value keeps its historical alias-of---step-title\n // behavior; multiple values would be ambiguous there (one step is targeted),\n // so they are rejected instead of silently dropping all but the last.\n if (input.subcommand !== \"create\") {\n const stepValues = toOrderedStepTitles(input.options.step);\n if (stepValues.length > 1) {\n throw new PmCliError(\n `pm plan ${input.subcommand} accepts a single --step/--step-title value (repeated --step seeds ordered steps only on pm plan create)`,\n EXIT_CODE.USAGE,\n );\n }\n if (stepValues.length === 1 && !input.options.stepTitle?.trim()) {\n input = { ...input, options: { ...input.options, stepTitle: stepValues[0] } };\n }\n }\n switch (input.subcommand) {\n case \"create\":\n return planCreate(input.options, input.global, ctx);\n case \"show\":\n if (!input.id) throw new PmCliError(\"pm plan show requires a plan id\", EXIT_CODE.USAGE);\n return planShow(input.id, input.options, ctx);\n case \"add-step\":\n if (!input.id) throw new PmCliError(\"pm plan add-step requires a plan id\", EXIT_CODE.USAGE);\n return planAddStep(input.id, input.options, ctx);\n case \"update-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan update-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, op: \"plan_update_step\" });\n case \"complete-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan complete-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: \"completed\", op: \"plan_complete_step\" });\n case \"block-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan block-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: \"blocked\", op: \"plan_block_step\" });\n case \"reorder-step\":\n if (!input.id || !input.stepRef || input.reorderTo === undefined)\n throw new PmCliError(\"pm plan reorder-step requires <plan-id> <step> <new-order>\", EXIT_CODE.USAGE);\n return planReorderStep(input.id, input.options, ctx, input.stepRef, input.reorderTo);\n case \"remove-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan remove-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planRemoveStep(input.id, input.options, ctx, input.stepRef);\n case \"link\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan link requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planLink(input.id, input.options, ctx, input.stepRef);\n case \"unlink\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan unlink requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUnlink(input.id, input.options, ctx, input.stepRef);\n case \"decision\":\n if (!input.id) throw new PmCliError(\"pm plan decision requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"decision\");\n case \"discovery\":\n if (!input.id) throw new PmCliError(\"pm plan discovery requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"discovery\");\n case \"validation\":\n if (!input.id) throw new PmCliError(\"pm plan validation requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"validation\");\n case \"resume\":\n if (!input.id) throw new PmCliError(\"pm plan resume requires a plan id\", EXIT_CODE.USAGE);\n return planResume(input.id, input.options, ctx);\n case \"approve\":\n if (!input.id) throw new PmCliError(\"pm plan approve requires a plan id\", EXIT_CODE.USAGE);\n return planApprove(input.id, input.options, ctx);\n case \"materialize\":\n if (!input.id) throw new PmCliError(\"pm plan materialize requires a plan id\", EXIT_CODE.USAGE);\n return planMaterialize(input.id, input.options, ctx);\n default:\n throw new PmCliError(`Unknown pm plan subcommand \"${input.subcommand}\"`, EXIT_CODE.USAGE);\n }\n}\n"],"names":["step","list","plan"],"mappings":"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","debugId":"29e74621-056d-50a2-8168-18b5c3a20a97"}
|