@unbrained/pm-cli 2026.7.4 → 2026.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +1 -5
- package/dist/cli/commands/calendar.d.ts +3 -2
- package/dist/cli/commands/calendar.js +4 -4
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/claim.js +17 -3
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.js +34 -16
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/copy.js +3 -3
- package/dist/cli/commands/copy.js.map +1 -1
- package/dist/cli/commands/create.d.ts +7 -0
- package/dist/cli/commands/create.js +156 -110
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.d.ts +6 -0
- package/dist/cli/commands/extension/bundled-catalog.js +15 -2
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/describe.d.ts +6 -3
- package/dist/cli/commands/extension/describe.js +21 -9
- package/dist/cli/commands/extension/describe.js.map +1 -1
- package/dist/cli/commands/extension/doctor.d.ts +0 -4
- package/dist/cli/commands/extension/doctor.js +3 -3
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.js +7 -2
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension/shared.d.ts +2 -7
- package/dist/cli/commands/extension/shared.js +4 -10
- package/dist/cli/commands/extension/shared.js.map +1 -1
- package/dist/cli/commands/extension.js +33 -8
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/profile.js +3 -3
- package/dist/cli/commands/profile.js.map +1 -1
- package/dist/cli/commands/reindex.js +3 -3
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.js +3 -3
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.js +10 -10
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/update.js +5 -3
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/error-guidance.js +107 -7
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/main.d.ts +6 -2
- package/dist/cli/main.js +33 -12
- package/dist/cli/main.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-4XQIDNM5.js +18 -0
- package/dist/cli-bundle/chunks/{activity-OENQCYZD.js → activity-YKAKZTZ4.js} +11 -9
- package/dist/cli-bundle/chunks/{aggregate-EC4LWS3U.js → aggregate-EQX2RGB7.js} +16 -13
- package/dist/cli-bundle/chunks/{aggregate-EC4LWS3U.js.map → aggregate-EQX2RGB7.js.map} +1 -1
- package/dist/cli-bundle/chunks/{aggregate-RCB3QJJE.js → aggregate-PEGZGJXD.js} +18 -15
- package/dist/cli-bundle/chunks/{aggregate-RCB3QJJE.js.map → aggregate-PEGZGJXD.js.map} +1 -1
- package/dist/cli-bundle/chunks/{append-XLEKVVWB.js → append-CZGUZ45Q.js} +11 -8
- package/dist/cli-bundle/chunks/{append-XLEKVVWB.js.map → append-CZGUZ45Q.js.map} +1 -1
- package/dist/cli-bundle/chunks/{append-ADBOI3A6.js → append-NSQBCXZJ.js} +13 -10
- package/dist/cli-bundle/chunks/{append-ADBOI3A6.js.map → append-NSQBCXZJ.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-3JZNEQBA.js +1413 -0
- package/dist/cli-bundle/chunks/chunk-3JZNEQBA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2LRMWMZ6.js → chunk-3PL6LEKP.js} +16 -14
- package/dist/cli-bundle/chunks/{chunk-2LRMWMZ6.js.map → chunk-3PL6LEKP.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CN4OAA2G.js → chunk-3U3VEWK6.js} +277 -119
- package/dist/cli-bundle/chunks/chunk-3U3VEWK6.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EB4BBEZD.js → chunk-3Y4OESPP.js} +14 -12
- package/dist/cli-bundle/chunks/{chunk-EB4BBEZD.js.map → chunk-3Y4OESPP.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-NHDR3UCW.js → chunk-4LRVSBO6.js} +14 -12
- package/dist/cli-bundle/chunks/{chunk-NHDR3UCW.js.map → chunk-4LRVSBO6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-6YB7HG2J.js → chunk-4OFLJHX6.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-6YB7HG2J.js.map → chunk-4OFLJHX6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-SBNT6SLO.js → chunk-4QQ6PM7M.js} +45 -557
- package/dist/cli-bundle/chunks/chunk-4QQ6PM7M.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-M34MVAOP.js → chunk-53BTLLAF.js} +16 -200
- package/dist/cli-bundle/chunks/chunk-53BTLLAF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UYLA5ROU.js → chunk-57C2RLW5.js} +277 -112
- package/dist/cli-bundle/chunks/chunk-57C2RLW5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-R7EMP4JG.js → chunk-5B3X4Y22.js} +52 -63
- package/dist/cli-bundle/chunks/{chunk-R7EMP4JG.js.map → chunk-5B3X4Y22.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-XBIYI23P.js → chunk-5J2XPTAD.js} +10 -8
- package/dist/cli-bundle/chunks/{chunk-XBIYI23P.js.map → chunk-5J2XPTAD.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-4SHME4VR.js → chunk-5JE6SMYS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4KPQQ42D.js → chunk-5JZ7APJU.js} +18 -16
- package/dist/cli-bundle/chunks/{chunk-4KPQQ42D.js.map → chunk-5JZ7APJU.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-BDDYM4LH.js → chunk-5VVUKE3U.js} +424 -2228
- package/dist/cli-bundle/chunks/chunk-5VVUKE3U.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QFXFKYNQ.js → chunk-75U6M5ZD.js} +16 -14
- package/dist/cli-bundle/chunks/{chunk-QFXFKYNQ.js.map → chunk-75U6M5ZD.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-7C2O74AE.js +23 -0
- package/dist/cli-bundle/chunks/chunk-7C2O74AE.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A222YWOQ.js → chunk-7EQNAZX2.js} +14 -12
- package/dist/cli-bundle/chunks/{chunk-A222YWOQ.js.map → chunk-7EQNAZX2.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-Z4DGFQDH.js → chunk-7LQKVMPA.js} +14 -4
- package/dist/cli-bundle/chunks/chunk-7LQKVMPA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-EH23N5FX.js → chunk-7MDXZAZS.js} +29 -7
- package/dist/cli-bundle/chunks/chunk-7MDXZAZS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XQCWTSLO.js → chunk-7QH7DHUB.js} +74 -8
- package/dist/cli-bundle/chunks/chunk-7QH7DHUB.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3C5T3ZEO.js → chunk-7WYXBPYQ.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-3C5T3ZEO.js.map → chunk-7WYXBPYQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-AAEQMOC6.js +150 -0
- package/dist/cli-bundle/chunks/chunk-AAEQMOC6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CQISNF3Z.js → chunk-ABRA3BHY.js} +18 -16
- package/dist/cli-bundle/chunks/{chunk-CQISNF3Z.js.map → chunk-ABRA3BHY.js.map} +2 -2
- package/dist/cli-bundle/chunks/chunk-B5KXLBSJ.js +47 -0
- package/dist/cli-bundle/chunks/chunk-B5KXLBSJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-Y2VSCQ77.js → chunk-BFVHCAOO.js} +9 -7
- package/dist/cli-bundle/chunks/{chunk-Y2VSCQ77.js.map → chunk-BFVHCAOO.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-7ITQSEBL.js → chunk-BVEUCSH2.js} +6 -4
- package/dist/cli-bundle/chunks/{chunk-7ITQSEBL.js.map → chunk-BVEUCSH2.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-C3PMDWGX.js +160 -0
- package/dist/cli-bundle/chunks/chunk-C3PMDWGX.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HL742IBM.js → chunk-D3UCE7RW.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-HL742IBM.js.map → chunk-D3UCE7RW.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-DC3QJQWI.js +275 -0
- package/dist/cli-bundle/chunks/chunk-DC3QJQWI.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-DLQ4ZTCU.js +634 -0
- package/dist/cli-bundle/chunks/chunk-DLQ4ZTCU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-MZG6I2Q2.js → chunk-DRBV5UC2.js} +8 -23
- package/dist/cli-bundle/chunks/chunk-DRBV5UC2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DEIDJQZK.js → chunk-E2FUG6GD.js} +15 -220
- package/dist/cli-bundle/chunks/{chunk-DEIDJQZK.js.map → chunk-E2FUG6GD.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-3MLQZI3H.js → chunk-EEY54JMF.js} +5 -3
- package/dist/cli-bundle/chunks/{chunk-3MLQZI3H.js.map → chunk-EEY54JMF.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CQFZRLXQ.js → chunk-EZFKWSC7.js} +94 -16
- package/dist/cli-bundle/chunks/{chunk-CQFZRLXQ.js.map → chunk-EZFKWSC7.js.map} +4 -4
- package/dist/cli-bundle/chunks/{chunk-4PJYRA3V.js → chunk-FDBARR33.js} +17 -15
- package/dist/cli-bundle/chunks/{chunk-4PJYRA3V.js.map → chunk-FDBARR33.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NGDK3KEZ.js → chunk-FGQKEDE4.js} +36 -12
- package/dist/cli-bundle/chunks/chunk-FGQKEDE4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FMWQRMHS.js → chunk-FJRKQREY.js} +10 -18
- package/dist/cli-bundle/chunks/chunk-FJRKQREY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6QY2NA2M.js → chunk-FUM6UMY4.js} +10 -11
- package/dist/cli-bundle/chunks/{chunk-6QY2NA2M.js.map → chunk-FUM6UMY4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-UGDONITK.js → chunk-GIWXVMZ3.js} +140 -334
- package/dist/cli-bundle/chunks/chunk-GIWXVMZ3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-OTSP6UEX.js → chunk-HBYZDSK5.js} +19 -17
- package/dist/cli-bundle/chunks/{chunk-OTSP6UEX.js.map → chunk-HBYZDSK5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-D2LDM35X.js → chunk-HJE4JTKQ.js} +6 -4
- package/dist/cli-bundle/chunks/{chunk-D2LDM35X.js.map → chunk-HJE4JTKQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-AOP2EMK3.js → chunk-HK72NWAD.js} +89 -18
- package/dist/cli-bundle/chunks/chunk-HK72NWAD.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2ONH3WG6.js → chunk-IJ6CO3JV.js} +18 -16
- package/dist/cli-bundle/chunks/{chunk-2ONH3WG6.js.map → chunk-IJ6CO3JV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-J4KNRDI3.js → chunk-JFCVQXZX.js} +139 -326
- package/dist/cli-bundle/chunks/chunk-JFCVQXZX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-V655JQ5J.js → chunk-JLA7EVYV.js} +12 -10
- package/dist/cli-bundle/chunks/{chunk-V655JQ5J.js.map → chunk-JLA7EVYV.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-K32L7HZO.js +76 -0
- package/dist/cli-bundle/chunks/chunk-K32L7HZO.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-WBWRQS32.js → chunk-K3AGVXSF.js} +37 -13
- package/dist/cli-bundle/chunks/chunk-K3AGVXSF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-KDZ6K25I.js +79 -0
- package/dist/cli-bundle/chunks/chunk-KDZ6K25I.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-KGHH652T.js +44 -0
- package/dist/cli-bundle/chunks/chunk-KGHH652T.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-KL22PY6L.js +915 -0
- package/dist/cli-bundle/chunks/chunk-KL22PY6L.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JZJJEJBR.js → chunk-KLG4ZULO.js} +12 -10
- package/dist/cli-bundle/chunks/{chunk-JZJJEJBR.js.map → chunk-KLG4ZULO.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-KKHIQOTN.js → chunk-LEKT4K7I.js} +74 -8
- package/dist/cli-bundle/chunks/chunk-LEKT4K7I.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-CVBINC7C.js → chunk-MNZ7DRNC.js} +13 -10
- package/dist/cli-bundle/chunks/{contracts-CVBINC7C.js.map → chunk-MNZ7DRNC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-2VK677OA.js → chunk-MTTXDAK4.js} +176 -125
- package/dist/cli-bundle/chunks/chunk-MTTXDAK4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-Q2266G4S.js → chunk-MZ7VNEVY.js} +8 -6
- package/dist/cli-bundle/chunks/{chunk-Q2266G4S.js.map → chunk-MZ7VNEVY.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-4EVY7CQN.js → chunk-N6DNM2FA.js} +2 -2
- package/dist/cli-bundle/chunks/{test-runs-5SLLV3XU.js → chunk-N7X4WP6L.js} +11 -8
- package/dist/cli-bundle/chunks/{test-runs-5SLLV3XU.js.map → chunk-N7X4WP6L.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-AZMPKLIA.js → chunk-NBFCNJ7Q.js} +177 -126
- package/dist/cli-bundle/chunks/chunk-NBFCNJ7Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-YZR7UMZ6.js → chunk-NER3KUUS.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js +20 -0
- package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-OBA2WH65.js +918 -0
- package/dist/cli-bundle/chunks/chunk-OBA2WH65.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DJ5S2LDY.js → chunk-OESSOFJ4.js} +14 -12
- package/dist/cli-bundle/chunks/{chunk-DJ5S2LDY.js.map → chunk-OESSOFJ4.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-OK5NXCZB.js +238 -0
- package/dist/cli-bundle/chunks/chunk-OK5NXCZB.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-TUV7SIWZ.js → chunk-OWTIRHX4.js} +28 -6
- package/dist/cli-bundle/chunks/chunk-OWTIRHX4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PV5JS7MP.js → chunk-P3VRG72Q.js} +10 -8
- package/dist/cli-bundle/chunks/{chunk-PV5JS7MP.js.map → chunk-P3VRG72Q.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-P5TFTLWW.js +1423 -0
- package/dist/cli-bundle/chunks/chunk-P5TFTLWW.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-P5YORJRH.js +1977 -0
- package/dist/cli-bundle/chunks/chunk-P5YORJRH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-WTXDLBSZ.js → chunk-PDXT6Q55.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YZWXMDNH.js → chunk-PJ3A56YF.js} +46 -537
- package/dist/cli-bundle/chunks/chunk-PJ3A56YF.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-L3WKLO67.js → chunk-PPAJG4GB.js} +13 -10
- package/dist/cli-bundle/chunks/{test-runs-L3WKLO67.js.map → chunk-PPAJG4GB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-LLQLLAKU.js → chunk-PPE4YUQM.js} +1670 -1573
- package/dist/cli-bundle/chunks/chunk-PPE4YUQM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-TO4KCIOT.js → chunk-QHZO65XW.js} +8 -6
- package/dist/cli-bundle/chunks/{chunk-TO4KCIOT.js.map → chunk-QHZO65XW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-4OXNQHKQ.js → chunk-R3ZBLGTC.js} +9 -10
- package/dist/cli-bundle/chunks/{chunk-4OXNQHKQ.js.map → chunk-R3ZBLGTC.js.map} +2 -2
- package/dist/cli-bundle/chunks/chunk-RCT3YJOK.js +624 -0
- package/dist/cli-bundle/chunks/chunk-RCT3YJOK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-724VLYDJ.js → chunk-RX3HQSYG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-PUVPC5DL.js → chunk-S4APD35C.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-T5RTYLZJ.js → chunk-S5AYOUT5.js} +8 -6
- package/dist/cli-bundle/chunks/{chunk-T5RTYLZJ.js.map → chunk-S5AYOUT5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-75VMARGO.js → chunk-STPSZ2XY.js} +19 -744
- package/dist/cli-bundle/chunks/chunk-STPSZ2XY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-A2W3XKAD.js → chunk-T35XLYZF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-N2LOJUBB.js → chunk-T3ABIMGW.js} +5 -3
- package/dist/cli-bundle/chunks/{chunk-N2LOJUBB.js.map → chunk-T3ABIMGW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-FDNJMYZB.js → chunk-T3F4DF23.js} +16 -14
- package/dist/cli-bundle/chunks/{chunk-FDNJMYZB.js.map → chunk-T3F4DF23.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-T4MX77AK.js +272 -0
- package/dist/cli-bundle/chunks/chunk-T4MX77AK.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-T5Y3QSNF.js +5354 -0
- package/dist/cli-bundle/chunks/chunk-T5Y3QSNF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XFO2NJY6.js → chunk-TSPKZRRW.js} +33 -28
- package/dist/cli-bundle/chunks/chunk-TSPKZRRW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZZWMJVW2.js → chunk-TT42JUMF.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-UHKX7I75.js +165 -0
- package/dist/cli-bundle/chunks/chunk-UHKX7I75.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7745CXNI.js → chunk-UI5BJ6DO.js} +1231 -1134
- package/dist/cli-bundle/chunks/chunk-UI5BJ6DO.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-US3T3W5J.js +1932 -0
- package/dist/cli-bundle/chunks/chunk-US3T3W5J.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-UZRDBL6W.js +175 -0
- package/dist/cli-bundle/chunks/chunk-UZRDBL6W.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-B4O5S7I3.js → chunk-VUHVWI4C.js} +13 -3
- package/dist/cli-bundle/chunks/chunk-VUHVWI4C.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-NLCDIZAT.js → chunk-VZIYHZDX.js} +11 -8
- package/dist/cli-bundle/chunks/{contracts-NLCDIZAT.js.map → chunk-VZIYHZDX.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-TGYDJEJH.js → chunk-WISPVC2E.js} +9 -7
- package/dist/cli-bundle/chunks/{chunk-TGYDJEJH.js.map → chunk-WISPVC2E.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-WVSGSZ6J.js +5434 -0
- package/dist/cli-bundle/chunks/chunk-WVSGSZ6J.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-MTB4PRA3.js → chunk-XQCG2JGW.js} +17 -749
- package/dist/cli-bundle/chunks/chunk-XQCG2JGW.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-Y76TWC45.js +550 -0
- package/dist/cli-bundle/chunks/chunk-Y76TWC45.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SL2ANJSV.js → chunk-YD5FML7K.js} +418 -2173
- package/dist/cli-bundle/chunks/chunk-YD5FML7K.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NHKXOMZ5.js → chunk-YFIE7YK6.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-NHKXOMZ5.js.map → chunk-YFIE7YK6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-5FYY76HR.js → chunk-YMABYTNG.js} +32 -27
- package/dist/cli-bundle/chunks/chunk-YMABYTNG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-W5X3AHJN.js → chunk-YOF5VPKM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-M6PR5BC6.js → chunk-YPPVU5GX.js} +11 -9
- package/dist/cli-bundle/chunks/{chunk-M6PR5BC6.js.map → chunk-YPPVU5GX.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ZIEGTQCY.js → chunk-YQMMMONE.js} +6 -4
- package/dist/cli-bundle/chunks/{chunk-ZIEGTQCY.js.map → chunk-YQMMMONE.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-4IW7STMB.js → chunk-YSAH5FY5.js} +16 -14
- package/dist/cli-bundle/chunks/{chunk-4IW7STMB.js.map → chunk-YSAH5FY5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-JYLFF7GJ.js → chunk-YZIR4R3U.js} +16 -14
- package/dist/cli-bundle/chunks/{chunk-JYLFF7GJ.js.map → chunk-YZIR4R3U.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-7G5SUU6F.js → chunk-Z2CRRZYF.js} +14 -12
- package/dist/cli-bundle/chunks/{chunk-7G5SUU6F.js.map → chunk-Z2CRRZYF.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-ZAHXPXVY.js +533 -0
- package/dist/cli-bundle/chunks/chunk-ZAHXPXVY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-WOOB7PV7.js → chunk-ZCJAA3JK.js} +8 -6
- package/dist/cli-bundle/chunks/{chunk-WOOB7PV7.js.map → chunk-ZCJAA3JK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-WSDIALO4.js → chunk-ZD34OFFQ.js} +5 -3
- package/dist/cli-bundle/chunks/{chunk-WSDIALO4.js.map → chunk-ZD34OFFQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-Q3XVLRCJ.js → chunk-ZJB3UV5U.js} +54 -58
- package/dist/cli-bundle/chunks/chunk-ZJB3UV5U.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MZ4NH46V.js → chunk-ZMD35NYG.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-ZVDL32GJ.js +241 -0
- package/dist/cli-bundle/chunks/chunk-ZVDL32GJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{claim-D6L33A5Y.js → claim-4DROPSIS.js} +30 -13
- package/dist/cli-bundle/chunks/claim-4DROPSIS.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-YAFUTPVK.js → claim-VX54TV5U.js} +29 -12
- package/dist/cli-bundle/chunks/claim-VX54TV5U.js.map +7 -0
- package/dist/cli-bundle/chunks/{close-TGYXG7TV.js → close-3YRR3XY6.js} +9 -7
- package/dist/cli-bundle/chunks/close-OB2Y4QP5.js +16 -0
- package/dist/cli-bundle/chunks/{close-many-SNA6LNZH.js → close-many-AP4MWU36.js} +21 -18
- package/dist/cli-bundle/chunks/{close-many-SNA6LNZH.js.map → close-many-AP4MWU36.js.map} +1 -1
- package/dist/cli-bundle/chunks/{close-many-4QSWKCRU.js → close-many-OMZIGZB4.js} +19 -16
- package/dist/cli-bundle/chunks/{close-many-4QSWKCRU.js.map → close-many-OMZIGZB4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{comments-QC6ARR5X.js → comments-MIW5MZOX.js} +12 -9
- package/dist/cli-bundle/chunks/{comments-QC6ARR5X.js.map → comments-MIW5MZOX.js.map} +1 -1
- package/dist/cli-bundle/chunks/{comments-ZHVYGUVC.js → comments-SAG5LSKL.js} +14 -11
- package/dist/cli-bundle/chunks/{comments-ZHVYGUVC.js.map → comments-SAG5LSKL.js.map} +1 -1
- package/dist/cli-bundle/chunks/{config-O6W2EU2G.js → config-DJJKZB5R.js} +20 -17
- package/dist/cli-bundle/chunks/{config-O6W2EU2G.js.map → config-DJJKZB5R.js.map} +1 -1
- package/dist/cli-bundle/chunks/{config-XQRFJXJP.js → config-V57QD47V.js} +22 -19
- package/dist/cli-bundle/chunks/{config-XQRFJXJP.js.map → config-V57QD47V.js.map} +1 -1
- package/dist/cli-bundle/chunks/{context-IHE3IXN5.js → context-4OQGIPSO.js} +15 -12
- package/dist/cli-bundle/chunks/{context-WSYWBEUL.js → context-WLA6IAWE.js} +15 -12
- package/dist/cli-bundle/chunks/contracts-HXJLKCRI.js +12 -0
- package/dist/cli-bundle/chunks/contracts-OJEXMKVW.js +16 -0
- package/dist/cli-bundle/chunks/{copy-7MUQC44A.js → copy-LEE6P6EM.js} +17 -14
- package/dist/cli-bundle/chunks/{copy-7MUQC44A.js.map → copy-LEE6P6EM.js.map} +2 -2
- package/dist/cli-bundle/chunks/{copy-ANWXDJVC.js → copy-OTJOWFL6.js} +18 -15
- package/dist/cli-bundle/chunks/{copy-ANWXDJVC.js.map → copy-OTJOWFL6.js.map} +1 -1
- package/dist/cli-bundle/chunks/create-WKOZKPQR.js +30 -0
- package/dist/cli-bundle/chunks/{create-JIA2IFCO.js → create-XWWQFQ6S.js} +14 -12
- package/dist/cli-bundle/chunks/{delete-5OLYWQIC.js → delete-62JQTYT4.js} +10 -7
- package/dist/cli-bundle/chunks/{delete-5OLYWQIC.js.map → delete-62JQTYT4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{delete-INHKCIRN.js → delete-HQKGRNRZ.js} +12 -9
- package/dist/cli-bundle/chunks/{delete-INHKCIRN.js.map → delete-HQKGRNRZ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{deps-IYEID3QX.js → deps-55FTG6Z5.js} +12 -9
- package/dist/cli-bundle/chunks/{deps-IYEID3QX.js.map → deps-55FTG6Z5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{deps-CCSWGZW7.js → deps-L2FPIAD3.js} +10 -7
- package/dist/cli-bundle/chunks/{deps-CCSWGZW7.js.map → deps-L2FPIAD3.js.map} +1 -1
- package/dist/cli-bundle/chunks/{docs-PKO7OEIM.js → docs-6CRCSVKK.js} +11 -9
- package/dist/cli-bundle/chunks/{docs-PKO7OEIM.js.map → docs-6CRCSVKK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{docs-3XZK22WF.js → docs-S6UTOTO5.js} +9 -7
- package/dist/cli-bundle/chunks/{docs-3XZK22WF.js.map → docs-S6UTOTO5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{eval-5XYP6NMY.js → eval-N6UHFWVO.js} +15 -11
- package/dist/cli-bundle/chunks/{eval-5XYP6NMY.js.map → eval-N6UHFWVO.js.map} +1 -1
- package/dist/cli-bundle/chunks/{eval-O4WGQYDI.js → eval-PHOTWYHI.js} +17 -13
- package/dist/cli-bundle/chunks/{eval-O4WGQYDI.js.map → eval-PHOTWYHI.js.map} +1 -1
- package/dist/cli-bundle/chunks/{extension-T7JNTAAA.js → extension-NBAH62ML.js} +17 -11
- package/dist/cli-bundle/chunks/{extension-PVGRRZZG.js → extension-ZF6ZZPOU.js} +17 -11
- package/dist/cli-bundle/chunks/{files-W7HH5EOD.js → files-6P57MRKL.js} +12 -9
- package/dist/cli-bundle/chunks/{files-W7HH5EOD.js.map → files-6P57MRKL.js.map} +1 -1
- package/dist/cli-bundle/chunks/{files-7IU56S6R.js → files-JPU3FNJ7.js} +14 -11
- package/dist/cli-bundle/chunks/{files-7IU56S6R.js.map → files-JPU3FNJ7.js.map} +1 -1
- package/dist/cli-bundle/chunks/{focus-6FA5KYRY.js → focus-LFZ6IDBR.js} +15 -11
- package/dist/cli-bundle/chunks/{focus-6FA5KYRY.js.map → focus-LFZ6IDBR.js.map} +1 -1
- package/dist/cli-bundle/chunks/{focus-CQ63JFDG.js → focus-WNMYCVYA.js} +13 -9
- package/dist/cli-bundle/chunks/{focus-CQ63JFDG.js.map → focus-WNMYCVYA.js.map} +1 -1
- package/dist/cli-bundle/chunks/{gc-3BG67KTO.js → gc-AETFKZ44.js} +10 -7
- package/dist/cli-bundle/chunks/{gc-3BG67KTO.js.map → gc-AETFKZ44.js.map} +1 -1
- package/dist/cli-bundle/chunks/{gc-PEZYGNVB.js → gc-RLBP4QVN.js} +12 -9
- package/dist/cli-bundle/chunks/{gc-PEZYGNVB.js.map → gc-RLBP4QVN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{get-J6CSJ4SX.js → get-NH2MPBCI.js} +18 -15
- package/dist/cli-bundle/chunks/{get-J6CSJ4SX.js.map → get-NH2MPBCI.js.map} +1 -1
- package/dist/cli-bundle/chunks/{get-KJTKGNEQ.js → get-P4ZQXCPZ.js} +16 -13
- package/dist/cli-bundle/chunks/{get-KJTKGNEQ.js.map → get-P4ZQXCPZ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{health-32UQICEL.js → health-3GVPMQBL.js} +36 -29
- package/dist/cli-bundle/chunks/{health-32UQICEL.js.map → health-3GVPMQBL.js.map} +1 -1
- package/dist/cli-bundle/chunks/{health-ZUZG5ULV.js → health-DNTM72GJ.js} +34 -27
- package/dist/cli-bundle/chunks/{health-ZUZG5ULV.js.map → health-DNTM72GJ.js.map} +1 -1
- package/dist/cli-bundle/chunks/history-RYKLC72X.js +20 -0
- package/dist/cli-bundle/chunks/{history-W6QVR6FA.js → history-SGPYRAFT.js} +10 -8
- package/dist/cli-bundle/chunks/{history-compact-JQ6ZGYSJ.js → history-compact-3F6VELO7.js} +18 -15
- package/dist/cli-bundle/chunks/{history-compact-JQ6ZGYSJ.js.map → history-compact-3F6VELO7.js.map} +1 -1
- package/dist/cli-bundle/chunks/{history-compact-F355EGL4.js → history-compact-656Y2TN4.js} +20 -17
- package/dist/cli-bundle/chunks/{history-compact-F355EGL4.js.map → history-compact-656Y2TN4.js.map} +1 -1
- package/dist/cli-bundle/chunks/history-redact-4H3FCKF3.js +21 -0
- package/dist/cli-bundle/chunks/{history-redact-TUWOUYX5.js → history-redact-54ICFKXM.js} +11 -9
- package/dist/cli-bundle/chunks/{history-repair-ZKS3LKPV.js → history-repair-4N6SDVHK.js} +17 -14
- package/dist/cli-bundle/chunks/{history-repair-ZKS3LKPV.js.map → history-repair-4N6SDVHK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{history-repair-MPCAIKYE.js → history-repair-EVTO6LIH.js} +19 -16
- package/dist/cli-bundle/chunks/{history-repair-MPCAIKYE.js.map → history-repair-EVTO6LIH.js.map} +1 -1
- package/dist/cli-bundle/chunks/init-RPIPQUNV.js +32 -0
- package/dist/cli-bundle/chunks/init-SKQAESQS.js +28 -0
- package/dist/cli-bundle/chunks/{learnings-EYC3OKS2.js → learnings-2HTPZNGZ.js} +10 -8
- package/dist/cli-bundle/chunks/{learnings-EYC3OKS2.js.map → learnings-2HTPZNGZ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{learnings-HKJJUVTA.js → learnings-YBIHY3D6.js} +12 -10
- package/dist/cli-bundle/chunks/{learnings-HKJJUVTA.js.map → learnings-YBIHY3D6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{list-KN3TL5Y5.js → list-64LHZ3HM.js} +10 -8
- package/dist/cli-bundle/chunks/{list-HFD5737R.js → list-7LXBTEKI.js} +10 -8
- package/dist/cli-bundle/chunks/{next-DQUMFAHG.js → next-7ODPAQ4U.js} +22 -18
- package/dist/cli-bundle/chunks/{next-DQUMFAHG.js.map → next-7ODPAQ4U.js.map} +1 -1
- package/dist/cli-bundle/chunks/{next-JUEYC5HE.js → next-ODJUM4ZM.js} +24 -20
- package/dist/cli-bundle/chunks/{next-JUEYC5HE.js.map → next-ODJUM4ZM.js.map} +1 -1
- package/dist/cli-bundle/chunks/{notes-ZG6RLZXB.js → notes-72YXN5JX.js} +10 -8
- package/dist/cli-bundle/chunks/{notes-ZG6RLZXB.js.map → notes-72YXN5JX.js.map} +1 -1
- package/dist/cli-bundle/chunks/{notes-XATYT43P.js → notes-NJ7IQJX4.js} +12 -10
- package/dist/cli-bundle/chunks/{notes-XATYT43P.js.map → notes-NJ7IQJX4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{plan-DVVLX7LK.js → plan-R4NDQ27E.js} +18 -15
- package/dist/cli-bundle/chunks/{plan-DVVLX7LK.js.map → plan-R4NDQ27E.js.map} +1 -1
- package/dist/cli-bundle/chunks/{plan-5NWQL2DH.js → plan-XWY5T67S.js} +20 -17
- package/dist/cli-bundle/chunks/{plan-5NWQL2DH.js.map → plan-XWY5T67S.js.map} +1 -1
- package/dist/cli-bundle/chunks/profile-XQWEQKS3.js +397 -0
- package/dist/cli-bundle/chunks/profile-XQWEQKS3.js.map +1 -0
- package/dist/cli-bundle/chunks/profile-YRDHLMRO.js +400 -0
- package/dist/cli-bundle/chunks/profile-YRDHLMRO.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-WRS6ACUW.js → register-list-query-5H66WFYF.js} +22 -19
- package/dist/cli-bundle/chunks/{register-list-query-WRS6ACUW.js.map → register-list-query-5H66WFYF.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-list-query-PNRAHNIQ.js → register-list-query-FB3FNDLZ.js} +24 -21
- package/dist/cli-bundle/chunks/{register-list-query-PNRAHNIQ.js.map → register-list-query-FB3FNDLZ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-mutation-K2MNRWGI.js → register-mutation-UJO23C7R.js} +42 -39
- package/dist/cli-bundle/chunks/{register-mutation-K2MNRWGI.js.map → register-mutation-UJO23C7R.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-mutation-ET6E4VLE.js → register-mutation-Z2ETYHKS.js} +40 -37
- package/dist/cli-bundle/chunks/{register-mutation-ET6E4VLE.js.map → register-mutation-Z2ETYHKS.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-operations-6DQRUTIX.js → register-operations-A3XAM5J7.js} +39 -36
- package/dist/cli-bundle/chunks/{register-operations-6DQRUTIX.js.map → register-operations-A3XAM5J7.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-operations-73UDWMVB.js → register-operations-SG7HBSUP.js} +37 -34
- package/dist/cli-bundle/chunks/{register-operations-73UDWMVB.js.map → register-operations-SG7HBSUP.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-setup-LYYCMQFV.js → register-setup-I45OGJUV.js} +25 -19
- package/dist/cli-bundle/chunks/{register-setup-LYYCMQFV.js.map → register-setup-I45OGJUV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-setup-FXZJ2CEJ.js → register-setup-K6U3NVY5.js} +23 -17
- package/dist/cli-bundle/chunks/{register-setup-FXZJ2CEJ.js.map → register-setup-K6U3NVY5.js.map} +1 -1
- package/dist/cli-bundle/chunks/restore-PXOFL6AM.js +19 -0
- package/dist/cli-bundle/chunks/{restore-R6YJHQK3.js → restore-YJ2ET6AT.js} +11 -9
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-OGODPUBL.js → scheduling-shortcuts-SSC4MYWQ.js} +14 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-OGODPUBL.js.map → scheduling-shortcuts-SSC4MYWQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-LE4S7OI7.js → scheduling-shortcuts-ULRG7MNP.js} +16 -14
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-LE4S7OI7.js.map → scheduling-shortcuts-ULRG7MNP.js.map} +1 -1
- package/dist/cli-bundle/chunks/{schema-ICCD3HOP.js → schema-2PUXCZ25.js} +10 -7
- package/dist/cli-bundle/chunks/{schema-RHH23PQX.js → schema-Y6DXXK2F.js} +10 -7
- package/dist/cli-bundle/chunks/{search-Z2VGP2Q5.js → search-3S72CTD6.js} +13 -10
- package/dist/cli-bundle/chunks/{search-HDDKOPFE.js → search-WNUNBQXO.js} +13 -10
- package/dist/cli-bundle/chunks/{stats-ETFP37MB.js → stats-IJYTRQGV.js} +13 -10
- package/dist/cli-bundle/chunks/{stats-ETFP37MB.js.map → stats-IJYTRQGV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{stats-DHMRXHOB.js → stats-L2D5Y2O5.js} +15 -12
- package/dist/cli-bundle/chunks/{stats-DHMRXHOB.js.map → stats-L2D5Y2O5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{telemetry-ZRBM22QD.js → telemetry-L2CVOKVN.js} +11 -8
- package/dist/cli-bundle/chunks/{telemetry-ZRBM22QD.js.map → telemetry-L2CVOKVN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{telemetry-NUZNKDCP.js → telemetry-QBYWQA76.js} +13 -10
- package/dist/cli-bundle/chunks/{telemetry-NUZNKDCP.js.map → telemetry-QBYWQA76.js.map} +1 -1
- package/dist/cli-bundle/chunks/{test-XNKTIP4Y.js → test-DQ2QFJ7W.js} +21 -15
- package/dist/cli-bundle/chunks/test-W7QBLVJS.js +41 -0
- package/dist/cli-bundle/chunks/{test-all-APCBSXQI.js → test-all-636NTRTT.js} +26 -19
- package/dist/cli-bundle/chunks/{test-all-APCBSXQI.js.map → test-all-636NTRTT.js.map} +1 -1
- package/dist/cli-bundle/chunks/{test-all-KIK3OYBY.js → test-all-DWYK3RG6.js} +24 -17
- package/dist/cli-bundle/chunks/{test-all-KIK3OYBY.js.map → test-all-DWYK3RG6.js.map} +1 -1
- package/dist/cli-bundle/chunks/test-runs-245OINZR.js +28 -0
- package/dist/cli-bundle/chunks/test-runs-245OINZR.js.map +1 -0
- package/dist/cli-bundle/chunks/test-runs-ZRD4GCTT.js +24 -0
- package/dist/cli-bundle/chunks/test-runs-ZRD4GCTT.js.map +7 -0
- package/dist/cli-bundle/chunks/update-SFLZPJXX.js +30 -0
- package/dist/cli-bundle/chunks/update-SFLZPJXX.js.map +1 -0
- package/dist/cli-bundle/chunks/update-SJZ6S77U.js +26 -0
- package/dist/cli-bundle/chunks/update-SJZ6S77U.js.map +7 -0
- package/dist/cli-bundle/chunks/{update-many-XGTJ7QIU.js → update-many-DC7X3EWM.js} +32 -29
- package/dist/cli-bundle/chunks/{update-many-XGTJ7QIU.js.map → update-many-DC7X3EWM.js.map} +1 -1
- package/dist/cli-bundle/chunks/{update-many-GFCQG6ZQ.js → update-many-SLLAMHT7.js} +34 -31
- package/dist/cli-bundle/chunks/{update-many-GFCQG6ZQ.js.map → update-many-SLLAMHT7.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-KJ3JGELR.js → upgrade-HFFXLZJA.js} +19 -12
- package/dist/cli-bundle/chunks/{upgrade-KJ3JGELR.js.map → upgrade-HFFXLZJA.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-RBRQ7PQU.js → upgrade-UYQKM7RF.js} +21 -14
- package/dist/cli-bundle/chunks/{upgrade-RBRQ7PQU.js.map → upgrade-UYQKM7RF.js.map} +1 -1
- package/dist/cli-bundle/chunks/{validate-EW6TGC7R.js → validate-PA4FDTOV.js} +34 -27
- package/dist/cli-bundle/chunks/{validate-EW6TGC7R.js.map → validate-PA4FDTOV.js.map} +2 -2
- package/dist/cli-bundle/chunks/{validate-T6PR5WAL.js → validate-Z7L75YEJ.js} +35 -28
- package/dist/cli-bundle/chunks/{validate-T6PR5WAL.js.map → validate-Z7L75YEJ.js.map} +1 -1
- package/dist/cli-bundle/main.js +173 -57
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/cli-bundle/sdk-runtime.js +247 -0
- package/dist/cli-bundle/sdk-runtime.js.map +7 -0
- package/dist/cli-bundle/sdk-testing.js +101 -0
- package/dist/cli-bundle/sdk-testing.js.map +7 -0
- package/dist/cli-bundle/sdk.js +787 -0
- package/dist/cli-bundle/sdk.js.map +7 -0
- package/dist/core/config/nested-settings.d.ts +4 -3
- package/dist/core/config/nested-settings.js +17 -6
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/extensions/activation-summary.d.ts +6 -0
- package/dist/core/extensions/activation-summary.js +10 -4
- package/dist/core/extensions/activation-summary.js.map +1 -1
- package/dist/core/extensions/capability-usage.d.ts +6 -0
- package/dist/core/extensions/capability-usage.js +10 -4
- package/dist/core/extensions/capability-usage.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +5 -0
- package/dist/core/extensions/extension-types.js +2 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +3 -0
- package/dist/core/extensions/loader.js +11 -19
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/history/history-rewrite.js +3 -3
- package/dist/core/history/history-rewrite.js.map +1 -1
- package/dist/core/item/parent-reference-policy.d.ts +9 -1
- package/dist/core/item/parent-reference-policy.js +28 -4
- package/dist/core/item/parent-reference-policy.js.map +1 -1
- package/dist/core/lock/lock.d.ts +28 -1
- package/dist/core/lock/lock.js +254 -20
- package/dist/core/lock/lock.js.map +1 -1
- package/dist/core/search/background-refresh.js +7 -19
- package/dist/core/search/background-refresh.js.map +1 -1
- package/dist/core/search/http-client.d.ts +0 -1
- package/dist/core/search/http-client.js +3 -3
- package/dist/core/search/http-client.js.map +1 -1
- package/dist/core/shared/constants.js +3 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/errors.d.ts +1 -0
- package/dist/core/shared/errors.js +2 -2
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/shared/primitives.d.ts +12 -0
- package/dist/core/shared/primitives.js +29 -2
- package/dist/core/shared/primitives.js.map +1 -1
- package/dist/core/store/item-store.js +3 -3
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +1 -0
- package/dist/core/store/settings-validator.js +6 -3
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +3 -3
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/validate/fix-planning.d.ts +0 -2
- package/dist/core/validate/fix-planning.js +3 -3
- package/dist/core/validate/fix-planning.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +3 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +3 -2
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/errors.d.ts +21 -2
- package/dist/sdk/errors.js +8 -2
- package/dist/sdk/errors.js.map +1 -1
- package/dist/sdk/package-import-adapters.js +3 -3
- package/dist/sdk/package-import-adapters.js.map +1 -1
- package/dist/sdk/testing.js +41 -19
- package/dist/sdk/testing.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/docs/ARCHITECTURE.md +27 -0
- package/docs/CONFIGURATION.md +3 -0
- package/docs/README.md +1 -0
- package/docs/SDK_PRIMITIVE_INVENTORY.md +55 -0
- package/docs/TESTING.md +5 -1
- package/docs/examples/ci/github-actions-pm-extension-gate.yml +5 -5
- package/docs/examples/ci/gitlab-ci-pm-extension-gate.yml +1 -1
- package/docs/examples/ci/jenkins-pm-extension-gate.Jenkinsfile +1 -1
- package/package.json +11 -24
- package/packages/pm-beads/extensions/beads/package.json +3 -0
- package/packages/pm-beads/extensions/beads/runtime-loader.ts +24 -2
- package/packages/pm-calendar/extensions/calendar/package.json +3 -0
- package/packages/pm-command-kit/extensions/command-kit/package.json +3 -0
- package/packages/pm-governance-audit/extensions/governance-audit/package.json +3 -0
- package/packages/pm-guide-shell/extensions/guide-shell/package.json +3 -0
- package/packages/pm-kanban/extensions/kanban/package.json +3 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/package.json +3 -0
- package/packages/pm-search-advanced/extensions/search-advanced/package.json +3 -0
- package/packages/pm-templates/extensions/templates/package.json +3 -0
- package/packages/pm-todos/extensions/todos/package.json +3 -0
- package/packages/pm-todos/extensions/todos/runtime-loader.ts +21 -3
- package/scripts/bundle-cli.mjs +12 -2
- package/dist/cli-bundle/chunks/activity-IDS5GSYG.js +0 -16
- package/dist/cli-bundle/chunks/chunk-2VK677OA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5FYY76HR.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-75VMARGO.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7745CXNI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AOP2EMK3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-AZMPKLIA.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-B4O5S7I3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BDDYM4LH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CN4OAA2G.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EH23N5FX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FMWQRMHS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-J4KNRDI3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KKHIQOTN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LLQLLAKU.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-M34MVAOP.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-MTB4PRA3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MZG6I2Q2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NGDK3KEZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Q3XVLRCJ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SBNT6SLO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SL2ANJSV.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-TUV7SIWZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UGDONITK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UYLA5ROU.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WBWRQS32.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XFO2NJY6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XQCWTSLO.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YZWXMDNH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z4DGFQDH.js.map +0 -1
- package/dist/cli-bundle/chunks/claim-D6L33A5Y.js.map +0 -1
- package/dist/cli-bundle/chunks/claim-YAFUTPVK.js.map +0 -7
- package/dist/cli-bundle/chunks/close-KLDLHAOP.js +0 -14
- package/dist/cli-bundle/chunks/create-AJ6HUR5W.js +0 -28
- package/dist/cli-bundle/chunks/history-IOH6FKG7.js +0 -18
- package/dist/cli-bundle/chunks/history-redact-VVDOARNO.js +0 -19
- package/dist/cli-bundle/chunks/init-CZLEEE6Q.js +0 -22
- package/dist/cli-bundle/chunks/init-MAA6UMNQ.js +0 -26
- package/dist/cli-bundle/chunks/profile-54DZ4CLB.js +0 -1205
- package/dist/cli-bundle/chunks/profile-54DZ4CLB.js.map +0 -1
- package/dist/cli-bundle/chunks/profile-PLIQVEOY.js +0 -1243
- package/dist/cli-bundle/chunks/profile-PLIQVEOY.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-L27TMMCF.js +0 -17
- package/dist/cli-bundle/chunks/test-H36PM746.js +0 -35
- package/dist/cli-bundle/chunks/update-RQKI3AMW.js +0 -24
- package/dist/cli-bundle/chunks/update-ZM7NJWHY.js +0 -28
- /package/dist/cli-bundle/chunks/{activity-IDS5GSYG.js.map → activity-4XQIDNM5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-OENQCYZD.js.map → activity-YKAKZTZ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4SHME4VR.js.map → chunk-5JE6SMYS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4EVY7CQN.js.map → chunk-N6DNM2FA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YZR7UMZ6.js.map → chunk-NER3KUUS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WTXDLBSZ.js.map → chunk-PDXT6Q55.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-724VLYDJ.js.map → chunk-RX3HQSYG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PUVPC5DL.js.map → chunk-S4APD35C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A2W3XKAD.js.map → chunk-T35XLYZF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZZWMJVW2.js.map → chunk-TT42JUMF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-W5X3AHJN.js.map → chunk-YOF5VPKM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MZ4NH46V.js.map → chunk-ZMD35NYG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-TGYXG7TV.js.map → close-3YRR3XY6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-KLDLHAOP.js.map → close-OB2Y4QP5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-IHE3IXN5.js.map → context-4OQGIPSO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-WSYWBEUL.js.map → context-WLA6IAWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-AJ6HUR5W.js.map → contracts-HXJLKCRI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-JIA2IFCO.js.map → contracts-OJEXMKVW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-T7JNTAAA.js.map → create-WKOZKPQR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-PVGRRZZG.js.map → create-XWWQFQ6S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-IOH6FKG7.js.map → extension-NBAH62ML.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-W6QVR6FA.js.map → extension-ZF6ZZPOU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-VVDOARNO.js.map → history-RYKLC72X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-TUWOUYX5.js.map → history-SGPYRAFT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-CZLEEE6Q.js.map → history-redact-4H3FCKF3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-MAA6UMNQ.js.map → history-redact-54ICFKXM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-HFD5737R.js.map → init-RPIPQUNV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-KN3TL5Y5.js.map → init-SKQAESQS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-L27TMMCF.js.map → list-64LHZ3HM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-R6YJHQK3.js.map → list-7LXBTEKI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-ICCD3HOP.js.map → restore-PXOFL6AM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-RHH23PQX.js.map → restore-YJ2ET6AT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-HDDKOPFE.js.map → schema-2PUXCZ25.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-Z2VGP2Q5.js.map → schema-Y6DXXK2F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-XNKTIP4Y.js.map → search-3S72CTD6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-H36PM746.js.map → search-WNUNBQXO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-ZM7NJWHY.js.map → test-DQ2QFJ7W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-RQKI3AMW.js.map → test-W7QBLVJS.js.map} +0 -0
|
@@ -1,41 +1,44 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="96bebc83-9980-5f44-bb82-601285639daf")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
runCreate
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-NBFCNJ7Q.js";
|
|
6
|
+
import "./chunk-MZ7VNEVY.js";
|
|
7
|
+
import "./chunk-7WYXBPYQ.js";
|
|
8
|
+
import "./chunk-PDXT6Q55.js";
|
|
9
|
+
import "./chunk-4OFLJHX6.js";
|
|
10
10
|
import {
|
|
11
11
|
splitCommaList
|
|
12
12
|
} from "./chunk-P4SESZGT.js";
|
|
13
|
-
import "./chunk-YZR7UMZ6.js";
|
|
14
|
-
import "./chunk-6YB7HG2J.js";
|
|
15
13
|
import {
|
|
16
14
|
locateItem,
|
|
17
15
|
mutateItem,
|
|
18
16
|
readLocatedItem
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-57C2RLW5.js";
|
|
18
|
+
import "./chunk-7MDXZAZS.js";
|
|
19
|
+
import "./chunk-HK72NWAD.js";
|
|
21
20
|
import {
|
|
22
21
|
nowIso
|
|
23
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-FJRKQREY.js";
|
|
23
|
+
import {
|
|
24
|
+
PmCliError,
|
|
25
|
+
getActiveExtensionRegistrations,
|
|
26
|
+
readSettings
|
|
27
|
+
} from "./chunk-US3T3W5J.js";
|
|
28
|
+
import "./chunk-NER3KUUS.js";
|
|
29
|
+
import "./chunk-NNHHXJB2.js";
|
|
24
30
|
import {
|
|
25
31
|
EXIT_CODE,
|
|
26
32
|
PLAN_HARNESS_VALUES,
|
|
27
33
|
PLAN_MODE_VALUES,
|
|
28
34
|
PLAN_STEP_LINK_KIND_VALUES,
|
|
29
35
|
PLAN_STEP_STATUS_VALUES,
|
|
30
|
-
PmCliError,
|
|
31
|
-
getActiveExtensionRegistrations,
|
|
32
36
|
getSettingsPath,
|
|
33
37
|
pathExists,
|
|
34
|
-
readSettings,
|
|
35
38
|
resolveItemTypeRegistry,
|
|
36
39
|
resolvePmRoot,
|
|
37
40
|
resolveTypeName
|
|
38
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-YD5FML7K.js";
|
|
39
42
|
|
|
40
43
|
// dist/cli/commands/plan.js
|
|
41
44
|
var PLAN_SUBCOMMANDS = [
|
|
@@ -1355,6 +1358,6 @@ export {
|
|
|
1355
1358
|
resolvePlanTemplateSteps,
|
|
1356
1359
|
runPlan
|
|
1357
1360
|
};
|
|
1358
|
-
//# sourceMappingURL=plan-
|
|
1361
|
+
//# sourceMappingURL=plan-XWY5T67S.js.map
|
|
1359
1362
|
|
|
1360
|
-
//# debugId=
|
|
1363
|
+
//# debugId=96bebc83-9980-5f44-bb82-601285639daf
|
|
@@ -1 +1 @@
|
|
|
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\nfunction buildPlanCreateDependencies(options: PlanCommandOptions): string[] | undefined {\n const deps: string[] = [];\n if (options.parent) {\n deps.push(`id=${options.parent.trim()},kind=parent`);\n }\n for (const ref of toArray(options.related)) deps.push(`id=${ref},kind=related`);\n for (const ref of toArray(options.blocks)) deps.push(`id=${ref},kind=blocks`);\n for (const ref of toArray(options.blockedBy)) deps.push(`id=${ref},kind=blocked_by`);\n return deps.length > 0 ? deps : undefined;\n}\n\nfunction buildInitialValidation(options: PlanCommandOptions): PlanValidationCheck | undefined {\n const text = options.validationText?.trim();\n const command = options.validationCommand?.trim();\n const expected = options.validationExpected?.trim();\n if (!text && !command && !expected) {\n return undefined;\n }\n return {\n text: text || command || \"Validation check\",\n command: command || undefined,\n expected: expected || undefined,\n };\n}\n\nfunction hasPlanStepDetailOptions(options: PlanCommandOptions): boolean {\n return 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}\n\nfunction resolveInitialStepSeed(options: PlanCommandOptions): {\n repeatedStepTitles: string[];\n stepTitleFlag: string | undefined;\n stepTitles: string[];\n templateSteps: PlanTemplateStepSeed[];\n} {\n const stepTitleFlag = options.stepTitle?.trim() || undefined;\n const repeatedStepTitles = toOrderedStepTitles(options.step);\n const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];\n return {\n repeatedStepTitles,\n stepTitleFlag,\n stepTitles: [\n ...(stepTitleFlag ? [stepTitleFlag] : []),\n ...repeatedStepTitles,\n ...templateSteps.map((step) => step.title),\n ],\n templateSteps,\n };\n}\n\nfunction assertInitialStepSeedAllowed(\n seed: ReturnType<typeof resolveInitialStepSeed>,\n hasPerStepDetailOptions: boolean,\n): void {\n if ((seed.stepTitleFlag || seed.repeatedStepTitles.length > 0) && seed.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 (seed.stepTitles.length > 1 && hasPerStepDetailOptions) {\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}\n\nfunction buildSingleInitialStep(options: PlanCommandOptions, title: string): PlanStep {\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 return {\n id: \"plan-step-001\",\n order: 1,\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}\n\nfunction buildInitialSteps(options: PlanCommandOptions): { steps: PlanStep[]; hasPerStepDetailOptions: boolean } {\n const seed = resolveInitialStepSeed(options);\n const hasDetailOptions = hasPlanStepDetailOptions(options);\n assertInitialStepSeedAllowed(seed, hasDetailOptions);\n if (seed.stepTitles.length === 0) {\n return { steps: [], hasPerStepDetailOptions: hasDetailOptions };\n }\n if (seed.stepTitles.length === 1) {\n return { steps: [buildSingleInitialStep(options, seed.stepTitles[0])], hasPerStepDetailOptions: hasDetailOptions };\n }\n const now = nowIso();\n return {\n steps: seed.stepTitles.map((stepTitle, index) => ({\n id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, \"0\")}`,\n order: index + 1,\n title: stepTitle,\n body: seed.templateSteps[index]?.body,\n status: \"pending\" as const,\n created_at: now,\n updated_at: now,\n })),\n hasPerStepDetailOptions: hasDetailOptions,\n };\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 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: buildPlanCreateDependencies(options),\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 initialValidation = buildInitialValidation(options);\n const { steps: initialSteps, hasPerStepDetailOptions } = buildInitialSteps(options);\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 { 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 assertInProgressStepAllowed(steps, undefined, status, allowMultipleActive);\n const step = buildAddedPlanStep(steps, options, { order, title, status });\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 assertInProgressStepAllowed(\n steps: PlanStep[],\n currentStepId: string | undefined,\n desiredStatus: PlanStepStatus,\n allowMultipleActive: boolean,\n): void {\n if (desiredStatus !== \"in_progress\" || allowMultipleActive) {\n return;\n }\n const activeStep = steps.find((step) => step.id !== currentStepId && step.status === \"in_progress\");\n if (!activeStep) {\n return;\n }\n throw new PmCliError(\n `Plan already has step ${activeStep.id} in_progress. Pass --allow-multiple-active or update that step first.`,\n EXIT_CODE.CONFLICT,\n );\n}\n\nfunction buildAddedPlanStep(\n existingSteps: PlanStep[],\n options: PlanCommandOptions,\n seed: { order: number; title: string; status: PlanStepStatus },\n): PlanStep {\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 return {\n id: newStepId(existingSteps),\n order: seed.order,\n title: seed.title,\n body: options.stepBody?.trim() || undefined,\n status: seed.status,\n owner: options.stepOwner?.trim() || undefined,\n evidence: options.stepEvidence?.trim() || undefined,\n blocked_reason: seed.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: seed.status === \"completed\" ? now : undefined,\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 const allowMultipleActive = options.allowMultipleActive === true || args.allowMultipleActive === true;\n assertInProgressStepAllowed(steps, step.status === \"in_progress\" ? step.id : undefined, desiredStatus, allowMultipleActive);\n applyStepUpdates(step, options, desiredStatus, now);\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\nfunction applyStepUpdates(\n step: PlanStep,\n options: PlanCommandOptions,\n desiredStatus: PlanStepStatus,\n now: string,\n): void {\n assertBlockedStepReason(step, options, desiredStatus);\n applyStepFieldUpdates(step, options);\n step.status = desiredStatus;\n step.updated_at = now;\n applyStepCompletionTimestamp(step, desiredStatus, now);\n}\n\nfunction assertBlockedStepReason(\n step: PlanStep,\n options: PlanCommandOptions,\n desiredStatus: PlanStepStatus,\n): void {\n if (desiredStatus !== \"blocked\" || options.stepBlockedReason?.trim() || step.blocked_reason) {\n return;\n }\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\nfunction applyStepFieldUpdates(step: PlanStep, options: PlanCommandOptions): void {\n const title = options.stepTitle?.trim();\n if (title) {\n step.title = title;\n }\n if (options.stepBody !== undefined) {\n step.body = options.stepBody.trim() || undefined;\n }\n if (options.stepOwner !== undefined) {\n step.owner = options.stepOwner.trim() || undefined;\n }\n if (options.stepEvidence !== undefined) {\n step.evidence = options.stepEvidence.trim() || undefined;\n }\n if (options.stepBlockedReason !== undefined) {\n step.blocked_reason = options.stepBlockedReason.trim() || undefined;\n }\n if (options.stepReplacement !== undefined) {\n step.superseded_by = options.stepReplacement.trim() || undefined;\n }\n}\n\nfunction applyStepCompletionTimestamp(step: PlanStep, desiredStatus: PlanStepStatus, now: string): void {\n if (desiredStatus === \"completed\" && !step.completed_at) {\n step.completed_at = now;\n return;\n }\n if (desiredStatus !== \"completed\") {\n step.completed_at = undefined;\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\nfunction buildMaterializeSkippedWarnings(\n materializeSkipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[],\n): string[] {\n return materializeSkipped.map(\n (entry) =>\n `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : \"\"}`,\n );\n}\n\nfunction buildMaterializeNoopResult(\n planRead: { document: ItemDocument; itemId: string },\n materializeSkipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[],\n): PlanCommandResult {\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: buildMaterializeSkippedWarnings(materializeSkipped),\n generated_at: nowIso(),\n };\n}\n\nfunction buildMaterializeDependencies(parent: string, planItemId: string, step: PlanStep): string[] {\n const deps = [\n `id=${parent},kind=parent`,\n `id=${planItemId},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 return deps;\n}\n\nasync function createMaterializedStepItems(params: {\n targets: PlanStep[];\n parent: string;\n planItemId: string;\n resolvedTypeName: string;\n tags: string | undefined;\n options: PlanCommandOptions;\n pmRoot: string;\n}): Promise<{ id: string; type: string; from_step: string }[]> {\n const materialized: { id: string; type: string; from_step: string }[] = [];\n for (const step of params.targets) {\n const created = await runCreate(\n {\n title: step.title,\n description: step.body?.trim() || step.title,\n type: params.resolvedTypeName,\n parent: params.parent,\n tags: params.tags,\n author: params.options.author,\n message: params.options.message ?? `materialized from plan ${params.planItemId} step ${step.id}`,\n dep: buildMaterializeDependencies(params.parent, params.planItemId, step),\n },\n { ...({} as GlobalOptions), path: params.pmRoot } as GlobalOptions,\n );\n materialized.push({ id: created.item.id, type: params.resolvedTypeName, from_step: step.id });\n }\n return materialized;\n}\n\nfunction linkMaterializedStepItems(\n currentSteps: PlanStep[],\n targets: PlanStep[],\n materialized: { id: string; type: string; from_step: string }[],\n): void {\n for (const target of targets) {\n const matched = materialized.find((entry) => entry.from_step === target.id);\n if (!matched) {\n continue;\n }\n const step = currentSteps.find((entry) => entry.id === target.id);\n if (!step) {\n continue;\n }\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}\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 return buildMaterializeNoopResult(planRead, materializeSkipped);\n }\n throw new PmCliError(\"No matching plan steps found for --steps\", EXIT_CODE.NOT_FOUND);\n }\n\n const materialized = await createMaterializedStepItems({\n targets,\n parent,\n planItemId: planRead.itemId,\n resolvedTypeName,\n tags,\n options,\n pmRoot: ctx.pmRoot,\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) {\n linkMaterializedStepItems(currentSteps, targets, materialized);\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: buildMaterializeSkippedWarnings(materializeSkipped),\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\nfunction normalizePlanStepAliasInput(input: PlanDispatchInput): PlanDispatchInput {\n if (input.subcommand === \"create\") {\n return input;\n }\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 return { ...input, options: { ...input.options, stepTitle: stepValues[0] } };\n }\n return input;\n}\n\nfunction requirePlanId(input: PlanDispatchInput, label: PlanSubcommand): string {\n if (!input.id) {\n throw new PmCliError(`pm plan ${label} requires a plan id`, EXIT_CODE.USAGE);\n }\n return input.id;\n}\n\nfunction requirePlanStepRef(input: PlanDispatchInput, label: PlanSubcommand): { id: string; stepRef: string } {\n const id = requirePlanId(input, label);\n if (!input.stepRef) {\n throw new PmCliError(`pm plan ${label} requires <plan-id> <step>`, EXIT_CODE.USAGE);\n }\n return { id, stepRef: input.stepRef };\n}\n\nfunction requireReorderTarget(input: PlanDispatchInput): { id: string; stepRef: string; reorderTo: number } {\n const target = requirePlanStepRef(input, \"reorder-step\");\n if (input.reorderTo === undefined) {\n throw new PmCliError(\"pm plan reorder-step requires <plan-id> <step> <new-order>\", EXIT_CODE.USAGE);\n }\n return { ...target, reorderTo: input.reorderTo };\n}\n\ntype PlanDispatcher = (input: PlanDispatchInput, ctx: PlanWriteContext) => Promise<PlanCommandResult>;\n\nconst PLAN_DISPATCHERS: Record<PlanSubcommand, PlanDispatcher> = {\n create: (input, ctx) => planCreate(input.options, input.global, ctx),\n show: (input, ctx) => planShow(requirePlanId(input, \"show\"), input.options, ctx),\n \"add-step\": (input, ctx) => planAddStep(requirePlanId(input, \"add-step\"), input.options, ctx),\n \"update-step\": (input, ctx) => {\n const target = requirePlanStepRef(input, \"update-step\");\n return planUpdateStep(target.id, input.options, ctx, { stepRef: target.stepRef, op: \"plan_update_step\" });\n },\n \"complete-step\": (input, ctx) => {\n const target = requirePlanStepRef(input, \"complete-step\");\n return planUpdateStep(target.id, input.options, ctx, {\n stepRef: target.stepRef,\n finalStatus: \"completed\",\n op: \"plan_complete_step\",\n });\n },\n \"block-step\": (input, ctx) => {\n const target = requirePlanStepRef(input, \"block-step\");\n return planUpdateStep(target.id, input.options, ctx, {\n stepRef: target.stepRef,\n finalStatus: \"blocked\",\n op: \"plan_block_step\",\n });\n },\n \"reorder-step\": (input, ctx) => {\n const target = requireReorderTarget(input);\n return planReorderStep(target.id, input.options, ctx, target.stepRef, target.reorderTo);\n },\n \"remove-step\": (input, ctx) => {\n const target = requirePlanStepRef(input, \"remove-step\");\n return planRemoveStep(target.id, input.options, ctx, target.stepRef);\n },\n link: (input, ctx) => {\n const target = requirePlanStepRef(input, \"link\");\n return planLink(target.id, input.options, ctx, target.stepRef);\n },\n unlink: (input, ctx) => {\n const target = requirePlanStepRef(input, \"unlink\");\n return planUnlink(target.id, input.options, ctx, target.stepRef);\n },\n decision: (input, ctx) => planAppendLog(requirePlanId(input, \"decision\"), input.options, ctx, \"decision\"),\n discovery: (input, ctx) => planAppendLog(requirePlanId(input, \"discovery\"), input.options, ctx, \"discovery\"),\n validation: (input, ctx) => planAppendLog(requirePlanId(input, \"validation\"), input.options, ctx, \"validation\"),\n resume: (input, ctx) => planResume(requirePlanId(input, \"resume\"), input.options, ctx),\n approve: (input, ctx) => planApprove(requirePlanId(input, \"approve\"), input.options, ctx),\n materialize: (input, ctx) => planMaterialize(requirePlanId(input, \"materialize\"), input.options, ctx),\n};\n\nfunction resolvePlanDispatcher(subcommand: PlanSubcommand): PlanDispatcher {\n const dispatcher = PLAN_DISPATCHERS[subcommand];\n if (!dispatcher) {\n throw new PmCliError(`Unknown pm plan subcommand \"${subcommand}\"`, EXIT_CODE.USAGE);\n }\n return dispatcher;\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 const normalizedInput = normalizePlanStepAliasInput(input);\n return resolvePlanDispatcher(normalizedInput.subcommand)(normalizedInput, ctx);\n}\n"],"names":["list"],"mappings":"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","debugId":"ef3dc07a-8c97-52e0-9665-6d7daf701594"}
|
|
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\nfunction buildPlanCreateDependencies(options: PlanCommandOptions): string[] | undefined {\n const deps: string[] = [];\n if (options.parent) {\n deps.push(`id=${options.parent.trim()},kind=parent`);\n }\n for (const ref of toArray(options.related)) deps.push(`id=${ref},kind=related`);\n for (const ref of toArray(options.blocks)) deps.push(`id=${ref},kind=blocks`);\n for (const ref of toArray(options.blockedBy)) deps.push(`id=${ref},kind=blocked_by`);\n return deps.length > 0 ? deps : undefined;\n}\n\nfunction buildInitialValidation(options: PlanCommandOptions): PlanValidationCheck | undefined {\n const text = options.validationText?.trim();\n const command = options.validationCommand?.trim();\n const expected = options.validationExpected?.trim();\n if (!text && !command && !expected) {\n return undefined;\n }\n return {\n text: text || command || \"Validation check\",\n command: command || undefined,\n expected: expected || undefined,\n };\n}\n\nfunction hasPlanStepDetailOptions(options: PlanCommandOptions): boolean {\n return 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}\n\nfunction resolveInitialStepSeed(options: PlanCommandOptions): {\n repeatedStepTitles: string[];\n stepTitleFlag: string | undefined;\n stepTitles: string[];\n templateSteps: PlanTemplateStepSeed[];\n} {\n const stepTitleFlag = options.stepTitle?.trim() || undefined;\n const repeatedStepTitles = toOrderedStepTitles(options.step);\n const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];\n return {\n repeatedStepTitles,\n stepTitleFlag,\n stepTitles: [\n ...(stepTitleFlag ? [stepTitleFlag] : []),\n ...repeatedStepTitles,\n ...templateSteps.map((step) => step.title),\n ],\n templateSteps,\n };\n}\n\nfunction assertInitialStepSeedAllowed(\n seed: ReturnType<typeof resolveInitialStepSeed>,\n hasPerStepDetailOptions: boolean,\n): void {\n if ((seed.stepTitleFlag || seed.repeatedStepTitles.length > 0) && seed.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 (seed.stepTitles.length > 1 && hasPerStepDetailOptions) {\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}\n\nfunction buildSingleInitialStep(options: PlanCommandOptions, title: string): PlanStep {\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 return {\n id: \"plan-step-001\",\n order: 1,\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}\n\nfunction buildInitialSteps(options: PlanCommandOptions): { steps: PlanStep[]; hasPerStepDetailOptions: boolean } {\n const seed = resolveInitialStepSeed(options);\n const hasDetailOptions = hasPlanStepDetailOptions(options);\n assertInitialStepSeedAllowed(seed, hasDetailOptions);\n if (seed.stepTitles.length === 0) {\n return { steps: [], hasPerStepDetailOptions: hasDetailOptions };\n }\n if (seed.stepTitles.length === 1) {\n return { steps: [buildSingleInitialStep(options, seed.stepTitles[0])], hasPerStepDetailOptions: hasDetailOptions };\n }\n const now = nowIso();\n return {\n steps: seed.stepTitles.map((stepTitle, index) => ({\n id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, \"0\")}`,\n order: index + 1,\n title: stepTitle,\n body: seed.templateSteps[index]?.body,\n status: \"pending\" as const,\n created_at: now,\n updated_at: now,\n })),\n hasPerStepDetailOptions: hasDetailOptions,\n };\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 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: buildPlanCreateDependencies(options),\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 initialValidation = buildInitialValidation(options);\n const { steps: initialSteps, hasPerStepDetailOptions } = buildInitialSteps(options);\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 { 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 assertInProgressStepAllowed(steps, undefined, status, allowMultipleActive);\n const step = buildAddedPlanStep(steps, options, { order, title, status });\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 assertInProgressStepAllowed(\n steps: PlanStep[],\n currentStepId: string | undefined,\n desiredStatus: PlanStepStatus,\n allowMultipleActive: boolean,\n): void {\n if (desiredStatus !== \"in_progress\" || allowMultipleActive) {\n return;\n }\n const activeStep = steps.find((step) => step.id !== currentStepId && step.status === \"in_progress\");\n if (!activeStep) {\n return;\n }\n throw new PmCliError(\n `Plan already has step ${activeStep.id} in_progress. Pass --allow-multiple-active or update that step first.`,\n EXIT_CODE.CONFLICT,\n );\n}\n\nfunction buildAddedPlanStep(\n existingSteps: PlanStep[],\n options: PlanCommandOptions,\n seed: { order: number; title: string; status: PlanStepStatus },\n): PlanStep {\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 return {\n id: newStepId(existingSteps),\n order: seed.order,\n title: seed.title,\n body: options.stepBody?.trim() || undefined,\n status: seed.status,\n owner: options.stepOwner?.trim() || undefined,\n evidence: options.stepEvidence?.trim() || undefined,\n blocked_reason: seed.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: seed.status === \"completed\" ? now : undefined,\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 const allowMultipleActive = options.allowMultipleActive === true || args.allowMultipleActive === true;\n assertInProgressStepAllowed(steps, step.status === \"in_progress\" ? step.id : undefined, desiredStatus, allowMultipleActive);\n applyStepUpdates(step, options, desiredStatus, now);\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\nfunction applyStepUpdates(\n step: PlanStep,\n options: PlanCommandOptions,\n desiredStatus: PlanStepStatus,\n now: string,\n): void {\n assertBlockedStepReason(step, options, desiredStatus);\n applyStepFieldUpdates(step, options);\n step.status = desiredStatus;\n step.updated_at = now;\n applyStepCompletionTimestamp(step, desiredStatus, now);\n}\n\nfunction assertBlockedStepReason(\n step: PlanStep,\n options: PlanCommandOptions,\n desiredStatus: PlanStepStatus,\n): void {\n if (desiredStatus !== \"blocked\" || options.stepBlockedReason?.trim() || step.blocked_reason) {\n return;\n }\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\nfunction applyStepFieldUpdates(step: PlanStep, options: PlanCommandOptions): void {\n const title = options.stepTitle?.trim();\n if (title) {\n step.title = title;\n }\n if (options.stepBody !== undefined) {\n step.body = options.stepBody.trim() || undefined;\n }\n if (options.stepOwner !== undefined) {\n step.owner = options.stepOwner.trim() || undefined;\n }\n if (options.stepEvidence !== undefined) {\n step.evidence = options.stepEvidence.trim() || undefined;\n }\n if (options.stepBlockedReason !== undefined) {\n step.blocked_reason = options.stepBlockedReason.trim() || undefined;\n }\n if (options.stepReplacement !== undefined) {\n step.superseded_by = options.stepReplacement.trim() || undefined;\n }\n}\n\nfunction applyStepCompletionTimestamp(step: PlanStep, desiredStatus: PlanStepStatus, now: string): void {\n if (desiredStatus === \"completed\" && !step.completed_at) {\n step.completed_at = now;\n return;\n }\n if (desiredStatus !== \"completed\") {\n step.completed_at = undefined;\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\nfunction buildMaterializeSkippedWarnings(\n materializeSkipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[],\n): string[] {\n return materializeSkipped.map(\n (entry) =>\n `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : \"\"}`,\n );\n}\n\nfunction buildMaterializeNoopResult(\n planRead: { document: ItemDocument; itemId: string },\n materializeSkipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[],\n): PlanCommandResult {\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: buildMaterializeSkippedWarnings(materializeSkipped),\n generated_at: nowIso(),\n };\n}\n\nfunction buildMaterializeDependencies(parent: string, planItemId: string, step: PlanStep): string[] {\n const deps = [\n `id=${parent},kind=parent`,\n `id=${planItemId},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 return deps;\n}\n\nasync function createMaterializedStepItems(params: {\n targets: PlanStep[];\n parent: string;\n planItemId: string;\n resolvedTypeName: string;\n tags: string | undefined;\n options: PlanCommandOptions;\n pmRoot: string;\n}): Promise<{ id: string; type: string; from_step: string }[]> {\n const materialized: { id: string; type: string; from_step: string }[] = [];\n for (const step of params.targets) {\n const created = await runCreate(\n {\n title: step.title,\n description: step.body?.trim() || step.title,\n type: params.resolvedTypeName,\n parent: params.parent,\n tags: params.tags,\n author: params.options.author,\n message: params.options.message ?? `materialized from plan ${params.planItemId} step ${step.id}`,\n dep: buildMaterializeDependencies(params.parent, params.planItemId, step),\n },\n { ...({} as GlobalOptions), path: params.pmRoot } as GlobalOptions,\n );\n materialized.push({ id: created.item.id, type: params.resolvedTypeName, from_step: step.id });\n }\n return materialized;\n}\n\nfunction linkMaterializedStepItems(\n currentSteps: PlanStep[],\n targets: PlanStep[],\n materialized: { id: string; type: string; from_step: string }[],\n): void {\n for (const target of targets) {\n const matched = materialized.find((entry) => entry.from_step === target.id);\n if (!matched) {\n continue;\n }\n const step = currentSteps.find((entry) => entry.id === target.id);\n if (!step) {\n continue;\n }\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}\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 return buildMaterializeNoopResult(planRead, materializeSkipped);\n }\n throw new PmCliError(\"No matching plan steps found for --steps\", EXIT_CODE.NOT_FOUND);\n }\n\n const materialized = await createMaterializedStepItems({\n targets,\n parent,\n planItemId: planRead.itemId,\n resolvedTypeName,\n tags,\n options,\n pmRoot: ctx.pmRoot,\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) {\n linkMaterializedStepItems(currentSteps, targets, materialized);\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: buildMaterializeSkippedWarnings(materializeSkipped),\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\nfunction normalizePlanStepAliasInput(input: PlanDispatchInput): PlanDispatchInput {\n if (input.subcommand === \"create\") {\n return input;\n }\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 return { ...input, options: { ...input.options, stepTitle: stepValues[0] } };\n }\n return input;\n}\n\nfunction requirePlanId(input: PlanDispatchInput, label: PlanSubcommand): string {\n if (!input.id) {\n throw new PmCliError(`pm plan ${label} requires a plan id`, EXIT_CODE.USAGE);\n }\n return input.id;\n}\n\nfunction requirePlanStepRef(input: PlanDispatchInput, label: PlanSubcommand): { id: string; stepRef: string } {\n const id = requirePlanId(input, label);\n if (!input.stepRef) {\n throw new PmCliError(`pm plan ${label} requires <plan-id> <step>`, EXIT_CODE.USAGE);\n }\n return { id, stepRef: input.stepRef };\n}\n\nfunction requireReorderTarget(input: PlanDispatchInput): { id: string; stepRef: string; reorderTo: number } {\n const target = requirePlanStepRef(input, \"reorder-step\");\n if (input.reorderTo === undefined) {\n throw new PmCliError(\"pm plan reorder-step requires <plan-id> <step> <new-order>\", EXIT_CODE.USAGE);\n }\n return { ...target, reorderTo: input.reorderTo };\n}\n\ntype PlanDispatcher = (input: PlanDispatchInput, ctx: PlanWriteContext) => Promise<PlanCommandResult>;\n\nconst PLAN_DISPATCHERS: Record<PlanSubcommand, PlanDispatcher> = {\n create: (input, ctx) => planCreate(input.options, input.global, ctx),\n show: (input, ctx) => planShow(requirePlanId(input, \"show\"), input.options, ctx),\n \"add-step\": (input, ctx) => planAddStep(requirePlanId(input, \"add-step\"), input.options, ctx),\n \"update-step\": (input, ctx) => {\n const target = requirePlanStepRef(input, \"update-step\");\n return planUpdateStep(target.id, input.options, ctx, { stepRef: target.stepRef, op: \"plan_update_step\" });\n },\n \"complete-step\": (input, ctx) => {\n const target = requirePlanStepRef(input, \"complete-step\");\n return planUpdateStep(target.id, input.options, ctx, {\n stepRef: target.stepRef,\n finalStatus: \"completed\",\n op: \"plan_complete_step\",\n });\n },\n \"block-step\": (input, ctx) => {\n const target = requirePlanStepRef(input, \"block-step\");\n return planUpdateStep(target.id, input.options, ctx, {\n stepRef: target.stepRef,\n finalStatus: \"blocked\",\n op: \"plan_block_step\",\n });\n },\n \"reorder-step\": (input, ctx) => {\n const target = requireReorderTarget(input);\n return planReorderStep(target.id, input.options, ctx, target.stepRef, target.reorderTo);\n },\n \"remove-step\": (input, ctx) => {\n const target = requirePlanStepRef(input, \"remove-step\");\n return planRemoveStep(target.id, input.options, ctx, target.stepRef);\n },\n link: (input, ctx) => {\n const target = requirePlanStepRef(input, \"link\");\n return planLink(target.id, input.options, ctx, target.stepRef);\n },\n unlink: (input, ctx) => {\n const target = requirePlanStepRef(input, \"unlink\");\n return planUnlink(target.id, input.options, ctx, target.stepRef);\n },\n decision: (input, ctx) => planAppendLog(requirePlanId(input, \"decision\"), input.options, ctx, \"decision\"),\n discovery: (input, ctx) => planAppendLog(requirePlanId(input, \"discovery\"), input.options, ctx, \"discovery\"),\n validation: (input, ctx) => planAppendLog(requirePlanId(input, \"validation\"), input.options, ctx, \"validation\"),\n resume: (input, ctx) => planResume(requirePlanId(input, \"resume\"), input.options, ctx),\n approve: (input, ctx) => planApprove(requirePlanId(input, \"approve\"), input.options, ctx),\n materialize: (input, ctx) => planMaterialize(requirePlanId(input, \"materialize\"), input.options, ctx),\n};\n\nfunction resolvePlanDispatcher(subcommand: PlanSubcommand): PlanDispatcher {\n const dispatcher = PLAN_DISPATCHERS[subcommand];\n if (!dispatcher) {\n throw new PmCliError(`Unknown pm plan subcommand \"${subcommand}\"`, EXIT_CODE.USAGE);\n }\n return dispatcher;\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 const normalizedInput = normalizePlanStepAliasInput(input);\n return resolvePlanDispatcher(normalizedInput.subcommand)(normalizedInput, ctx);\n}\n"],"names":["list"],"mappings":"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","debugId":"96bebc83-9980-5f44-bb82-601285639daf"}
|