@unbrained/pm-cli 2026.7.1 → 2026.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/cli/commander-usage.d.ts +2 -0
- package/dist/cli/commander-usage.js +58 -47
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/aggregate.js +102 -79
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/calendar.js +278 -243
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.js +89 -68
- package/dist/cli/commands/close-many.js.map +1 -1
- package/dist/cli/commands/close.js +157 -129
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +50 -42
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +443 -879
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.js +365 -287
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.js +352 -238
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +46 -39
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/dedupe-merge.js +88 -69
- package/dist/cli/commands/dedupe-merge.js.map +1 -1
- package/dist/cli/commands/get.js +114 -81
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.d.ts +17 -0
- package/dist/cli/commands/health.js +446 -307
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-compact.js +209 -140
- package/dist/cli/commands/history-compact.js.map +1 -1
- package/dist/cli/commands/history-redact.js +162 -119
- package/dist/cli/commands/history-redact.js.map +1 -1
- package/dist/cli/commands/history-repair.js +120 -85
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/init.d.ts +8 -2
- package/dist/cli/commands/init.js +263 -162
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.js +152 -102
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/next.js +49 -32
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/plan.js +373 -298
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/recurrence-parsers.js +43 -25
- package/dist/cli/commands/recurrence-parsers.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +21 -5
- package/dist/cli/commands/reindex.js +345 -205
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +8 -7
- package/dist/cli/commands/restore.js +105 -69
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.js +33 -30
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +10 -2
- package/dist/cli/commands/search.js +503 -470
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/telemetry.js +98 -87
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/test-all.js +237 -168
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -5
- package/dist/cli/commands/test.js +424 -344
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +57 -42
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +1 -1
- package/dist/cli/commands/update.js +738 -671
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +18 -1
- package/dist/cli/commands/validate.js +466 -343
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +399 -357
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/main.d.ts +47 -0
- package/dist/cli/main.js +428 -341
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.js +22 -45
- package/dist/cli/migration-gates.js.map +1 -1
- package/dist/cli/register-list-query.js +94 -105
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +400 -416
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +86 -66
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +120 -101
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-CUC4JY3U.js} +9 -9
- package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-DKUTRY6R.js} +108 -84
- package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-SW5PNGCS.js} +107 -83
- package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-SW5PNGCS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-H32VOR2Y.js} +6 -6
- package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-UBM632FK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-2227673O.js} +158 -114
- package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-2ASNV4DH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-2CHRYUXL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-2KWL5NPW.js} +42 -27
- package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-36UGKF4O.js} +21 -29
- package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-3AZUFQK6.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-3LCUASYG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-3Q2HBMTI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-4NUOWFBT.js} +109 -72
- package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-55XRYWEG.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-5GVTFFTC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-5PGBHRY3.js} +41 -26
- package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-66Z3X7ZG.js} +261 -161
- package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-6ITZLD4T.js} +712 -612
- package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-6YCYF2AI.js} +262 -162
- package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-6ZMBJRDJ.js} +492 -403
- package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-7MYWF4ZX.js} +110 -73
- package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-7NSPKJUS.js} +356 -285
- package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-7TH5NMVB.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-7W4H4K26.js} +713 -613
- package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-A6VOGKBA.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AIAIXG7I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-AJEBCRIY.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-BTX5MIQF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-BVZZN2LH.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-CYBDUHNO.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-CZPVDLD2.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-EMPGXBUF.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-EUKTMRN3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-FFOQHGNH.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-GFMSLORL.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-GRRG3MCT.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-H4GRLYJS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-HQTPRV4D.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-I66WE2HE.js} +354 -283
- package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-IEEJQCZ4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-IG5JYZGU.js} +390 -312
- package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-IG5JYZGU.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-JMK5GCK2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-JXAUVO6X.js} +258 -169
- package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js.map → chunk-JXAUVO6X.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-K2VYLVX4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KCO2EAN5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-KIYCOJ63.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-KLXF7NCC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-KN3URLKS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-LRKMWUUV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-LTRAF2D7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-MNBPX5JS.js} +55 -36
- package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-MRD4T5LF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-N2JSWVWG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-N3QCJS4M.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-NRZS637N.js} +258 -169
- package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-OTUJZKGI.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-Q6K2OACU.js} +153 -90
- package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-Q6NXOHS6.js} +391 -313
- package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-QH3FSKRJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-RM37OPYK.js} +56 -37
- package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-S62UANU7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-SPM2XLWI.js} +37 -28
- package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-SYNKD3ZG.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-SYVUU7EK.js} +493 -404
- package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-TPOFWBMY.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-TTHCEV5Q.js} +92 -77
- package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-U2BEEM2X.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-UGLU6Q2I.js} +91 -76
- package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UT73HUPC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-UTSH5GWX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-UWKEJMZU.js} +157 -113
- package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-W47SML5B.js} +152 -89
- package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WJAMWAHZ.js} +157 -118
- package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-XCHUVHKU.js} +626 -484
- package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-XEWQKDYZ.js} +626 -484
- package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-XTHQWXVC.js} +158 -119
- package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-XWGEMNBR.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-Y4NRKBFW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-YLZZ6T54.js} +38 -29
- package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-YPKFV2JR.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
- package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-ZNHEYCDD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-ZNT7KEWE.js} +2 -2
- package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-SENTPZBN.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-Z7MEQCBT.js} +8 -8
- package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-424MX4CU.js} +7 -7
- package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
- package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-2IV4J2TR.js} +102 -81
- package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
- package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-SWY34BII.js} +101 -80
- package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-4FGNTSNV.js} +8 -8
- package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-7YS5MY5X.js} +8 -8
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
- package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
- package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-LHVKJSPJ.js} +12 -12
- package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-ZQY54JNS.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-CP2EZJC7.js} +320 -199
- package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-FIZLMP7O.js} +321 -200
- package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-GYNQQPW2.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-TLW7JTQT.js} +5 -5
- package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-VSKYSOCD.js} +12 -12
- package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
- package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-4W5JYCEG.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-ANTOTI2I.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-HPPE6MJN.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-ZQZN54EZ.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-RPOVFMP3.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-XJNYBJGE.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-DM6JBZTS.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-RFBI5FGS.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-B3YY4WY5.js} +11 -11
- package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-TTSEFQTS.js} +11 -11
- package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-5D65CHGE.js} +7 -7
- package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-GPIG77EN.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-C3PEJV2C.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-ZHN7WIGX.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-D4JQ6OWN.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-VZIXDL32.js} +3 -3
- package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-GIBRUUOP.js} +121 -81
- package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-IOVAN6RU.js} +120 -80
- package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-L2U3AFKV.js} +437 -265
- package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-MM7AWXYF.js} +436 -264
- package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
- package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
- package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-IL7XCEX2.js} +8 -8
- package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-HALOTOU7.js} +214 -135
- package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-MV25P7DM.js} +213 -134
- package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
- package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-VYCWQFK7.js} +9 -9
- package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-44MODPQF.js} +124 -84
- package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-CPNAOCNF.js} +123 -83
- package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
- package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-F27NHENZ.js} +12 -12
- package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-HJVDQIGY.js} +8 -8
- package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-XSFSUUWK.js} +8 -8
- package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-HPMEKCAA.js} +8 -8
- package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-VMPWTURB.js} +8 -8
- package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-ETXF2ZCN.js} +59 -37
- package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
- package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-QM6YJIIS.js} +60 -38
- package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-GDZIKGR6.js} +8 -8
- package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-WDDBPC4D.js} +8 -8
- package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-BGDR73Z6.js} +373 -279
- package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-C5IMM335.js} +372 -278
- package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-CCOKZ2IQ.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-HUCENIEQ.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-7LV46VAU.js → register-list-query-ROSNIL52.js} +80 -83
- package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-SNG5PGA4.js → register-list-query-XN4ZRHSV.js} +79 -82
- package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-CFSB2MS3.js} +403 -382
- package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-KRLAHEL2.js} +402 -381
- package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-4PASGJDB.js} +112 -93
- package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-C6OWLDSH.js → register-operations-MBN4KGUM.js} +113 -94
- package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-VIAWYFP5.js} +129 -104
- package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-ZCGKHDKL.js} +128 -103
- package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
- package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-4CBWUMCX.js} +9 -9
- package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-TDGK6N3I.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-UE5KKAUX.js} +7 -7
- package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-FP7MEU4S.js} +10 -10
- package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-K4CFLQ5S.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-NJJCALEZ.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-XT6QRKQY.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-5SQ5UDXC.js} +84 -70
- package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-HVXFZA2U.js} +85 -71
- package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-UFSJ5YIO.js} +15 -15
- package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-YCDAUBWF.js} +15 -15
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
- package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
- package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
- package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-FK5E75AA.js} +185 -147
- package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-H4TGWGRN.js} +184 -146
- package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
- package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
- package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-Y5WQVT5O.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-6YAYYRLE.js} +82 -67
- package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-6YAYYRLE.js.map} +2 -2
- package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-JTKKSA7Y.js} +83 -68
- package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-JTKKSA7Y.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-DTAHZ236.js} +11 -11
- package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-JUDU7YL4.js} +11 -11
- package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-732RWS5W.js} +440 -320
- package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
- package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-W7H5TEDC.js} +441 -321
- package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
- package/dist/cli-bundle/main.js +945 -812
- package/dist/cli-bundle/main.js.map +3 -3
- package/dist/core/config/nested-settings.js +89 -67
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/governance/metadata-coverage.js +20 -28
- package/dist/core/governance/metadata-coverage.js.map +1 -1
- package/dist/core/history/drift-scan.js +93 -81
- package/dist/core/history/drift-scan.js.map +1 -1
- package/dist/core/item/item-type-definition.js +14 -14
- package/dist/core/item/item-type-definition.js.map +1 -1
- package/dist/core/item/type-registry.js +87 -82
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/output/mutation-projection.js +42 -26
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +34 -28
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +64 -37
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.js +32 -17
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.js +31 -28
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.js +54 -43
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +239 -153
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.js +33 -26
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings.js +247 -203
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/test/background-runs.js +189 -160
- package/dist/core/test/background-runs.js.map +1 -1
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
- package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
- package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4DSGXSBL.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UYUYDGIB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
- package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
- package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
- package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
- package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
- package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
- package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
- package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
- package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
- package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
- package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
- package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
- package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
- package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
- package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
- package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
- package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
- package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
- package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
- package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
- package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
- package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
- package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
- package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
- package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
- package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
- package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
- package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
- package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-CUC4JY3U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-WEIEMM73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-H32VOR2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-UBM632FK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-2ASNV4DH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-2CHRYUXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-3AZUFQK6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-3LCUASYG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-3Q2HBMTI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-55XRYWEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js.map → chunk-5GVTFFTC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-A6VOGKBA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js.map → chunk-AIAIXG7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js.map → chunk-AJEBCRIY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-BTX5MIQF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-BVZZN2LH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-CYBDUHNO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-CZPVDLD2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-EUKTMRN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-FFOQHGNH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js.map → chunk-GFMSLORL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-GRRG3MCT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-H4GRLYJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-HQTPRV4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-IEEJQCZ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-JMK5GCK2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js.map → chunk-K2VYLVX4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KCO2EAN5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-KIYCOJ63.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-KLXF7NCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-KN3URLKS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-LRKMWUUV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-LTRAF2D7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-MRD4T5LF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-N2JSWVWG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-N3QCJS4M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-OTUJZKGI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-QH3FSKRJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-S62UANU7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js.map → chunk-SYNKD3ZG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-U2BEEM2X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UT73HUPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-UTSH5GWX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js.map → chunk-XWGEMNBR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-Y4NRKBFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js.map → chunk-YPKFV2JR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-ZNHEYCDD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-SENTPZBN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-Z7MEQCBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-424MX4CU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-YCWQQPDS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-4FGNTSNV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-7YS5MY5X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-LHVKJSPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-ZQY54JNS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-GYNQQPW2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-TLW7JTQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-VSKYSOCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-XTMAPS7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-4W5JYCEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-ANTOTI2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-HPPE6MJN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-ZQZN54EZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-RPOVFMP3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-XJNYBJGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-DM6JBZTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-RFBI5FGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-B3YY4WY5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-TTSEFQTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-5D65CHGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-GPIG77EN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-C3PEJV2C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-ZHN7WIGX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-D4JQ6OWN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-VZIXDL32.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-DD7L7BNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-IL7XCEX2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-IX4YEWMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-VYCWQFK7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-F27NHENZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-HHVQQP6C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-HJVDQIGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-XSFSUUWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-HPMEKCAA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-VMPWTURB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-GDZIKGR6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-WDDBPC4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-QLER5ENE.js.map → profile-CCOKZ2IQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-4OMM32CD.js.map → profile-HUCENIEQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-4CBWUMCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-5UEAGG3W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-TDGK6N3I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-UE5KKAUX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-FP7MEU4S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-K4CFLQ5S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-NJJCALEZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-XT6QRKQY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-UFSJ5YIO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-YCDAUBWF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-MTCFES6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-Y5WQVT5O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-DTAHZ236.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-JUDU7YL4.js.map} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Implements the pm plan command surface and its agent-facing runtime behavior.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
7
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1e64f96b-b7e3-5228-839a-65a187cb7020")}catch(e){}}();
|
|
8
8
|
import { pathExists } from "../../core/fs/fs-utils.js";
|
|
9
9
|
import { getActiveExtensionRegistrations } from "../../core/extensions/index.js";
|
|
10
10
|
import { resolveItemTypeRegistry, resolveTypeName } from "../../core/item/type-registry.js";
|
|
@@ -483,6 +483,129 @@ async function readPlanItem(ctx, id) {
|
|
|
483
483
|
ensurePlanItem(loaded.document.metadata);
|
|
484
484
|
return { document: loaded.document, itemId: located.id };
|
|
485
485
|
}
|
|
486
|
+
function buildPlanCreateDependencies(options) {
|
|
487
|
+
const deps = [];
|
|
488
|
+
if (options.parent) {
|
|
489
|
+
deps.push(`id=${options.parent.trim()},kind=parent`);
|
|
490
|
+
}
|
|
491
|
+
for (const ref of toArray(options.related))
|
|
492
|
+
deps.push(`id=${ref},kind=related`);
|
|
493
|
+
for (const ref of toArray(options.blocks))
|
|
494
|
+
deps.push(`id=${ref},kind=blocks`);
|
|
495
|
+
for (const ref of toArray(options.blockedBy))
|
|
496
|
+
deps.push(`id=${ref},kind=blocked_by`);
|
|
497
|
+
return deps.length > 0 ? deps : undefined;
|
|
498
|
+
}
|
|
499
|
+
function buildInitialValidation(options) {
|
|
500
|
+
const text = options.validationText?.trim();
|
|
501
|
+
const command = options.validationCommand?.trim();
|
|
502
|
+
const expected = options.validationExpected?.trim();
|
|
503
|
+
if (!text && !command && !expected) {
|
|
504
|
+
return undefined;
|
|
505
|
+
}
|
|
506
|
+
return {
|
|
507
|
+
text: text || command || "Validation check",
|
|
508
|
+
command: command || undefined,
|
|
509
|
+
expected: expected || undefined,
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
function hasPlanStepDetailOptions(options) {
|
|
513
|
+
return Boolean(options.stepBody?.trim()) ||
|
|
514
|
+
Boolean(options.stepOwner?.trim()) ||
|
|
515
|
+
Boolean(options.stepStatus?.trim()) ||
|
|
516
|
+
Boolean(options.stepEvidence?.trim()) ||
|
|
517
|
+
Boolean(options.stepBlockedReason?.trim()) ||
|
|
518
|
+
Boolean(options.stepReplacement?.trim()) ||
|
|
519
|
+
toArray(options.dependsOn).length > 0 ||
|
|
520
|
+
toArray(options.link).length > 0 ||
|
|
521
|
+
toSpecArray(options.file).length > 0 ||
|
|
522
|
+
toSpecArray(options.test).length > 0 ||
|
|
523
|
+
toSpecArray(options.doc).length > 0;
|
|
524
|
+
}
|
|
525
|
+
function resolveInitialStepSeed(options) {
|
|
526
|
+
const stepTitleFlag = options.stepTitle?.trim() || undefined;
|
|
527
|
+
const repeatedStepTitles = toOrderedStepTitles(options.step);
|
|
528
|
+
const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];
|
|
529
|
+
return {
|
|
530
|
+
repeatedStepTitles,
|
|
531
|
+
stepTitleFlag,
|
|
532
|
+
stepTitles: [
|
|
533
|
+
...(stepTitleFlag ? [stepTitleFlag] : []),
|
|
534
|
+
...repeatedStepTitles,
|
|
535
|
+
...templateSteps.map((step) => step.title),
|
|
536
|
+
],
|
|
537
|
+
templateSteps,
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
function assertInitialStepSeedAllowed(seed, hasPerStepDetailOptions) {
|
|
541
|
+
if ((seed.stepTitleFlag || seed.repeatedStepTitles.length > 0) && seed.templateSteps.length > 0) {
|
|
542
|
+
throw new PmCliError("pm plan create --template cannot be combined with --step-title or --step; choose one step seeding source", EXIT_CODE.USAGE, {
|
|
543
|
+
code: "ambiguous_option_combination",
|
|
544
|
+
examples: [
|
|
545
|
+
`pm plan create --title "Fix login crash" --template ${PLAN_TEMPLATE_NAMES[0]}`,
|
|
546
|
+
'pm plan create --title "Custom plan" --step "Read the code" --step "Write the fix"',
|
|
547
|
+
],
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
if (seed.stepTitles.length > 1 && hasPerStepDetailOptions) {
|
|
551
|
+
throw new PmCliError("pm plan create per-step options apply to a single initial step; with multiple --step values create the plan first, then refine steps individually", EXIT_CODE.USAGE, {
|
|
552
|
+
code: "ambiguous_option_combination",
|
|
553
|
+
examples: [
|
|
554
|
+
'pm plan create --title "Execution plan" --step "Read the code" --step "Write the fix"',
|
|
555
|
+
'pm plan update-step <plan-id> plan-step-001 --step-body "Inspect retry path"',
|
|
556
|
+
],
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
function buildSingleInitialStep(options, title) {
|
|
561
|
+
const status = asStepStatus(options.stepStatus, "pending");
|
|
562
|
+
const linkedItems = buildLinkInputs(options, "depends_on");
|
|
563
|
+
const files = toSpecArray(options.file).map(parseStepFile);
|
|
564
|
+
const tests = toSpecArray(options.test).map(parseStepTest);
|
|
565
|
+
const docs = toSpecArray(options.doc).map(parseStepDoc);
|
|
566
|
+
const now = nowIso();
|
|
567
|
+
return {
|
|
568
|
+
id: "plan-step-001",
|
|
569
|
+
order: 1,
|
|
570
|
+
title,
|
|
571
|
+
body: options.stepBody?.trim() || undefined,
|
|
572
|
+
status,
|
|
573
|
+
owner: options.stepOwner?.trim() || undefined,
|
|
574
|
+
evidence: options.stepEvidence?.trim() || undefined,
|
|
575
|
+
blocked_reason: status === "blocked" ? options.stepBlockedReason?.trim() || "" : undefined,
|
|
576
|
+
linked_items: linkedItems.length > 0 ? linkedItems : undefined,
|
|
577
|
+
files: files.length > 0 ? files : undefined,
|
|
578
|
+
tests: tests.length > 0 ? tests : undefined,
|
|
579
|
+
docs: docs.length > 0 ? docs : undefined,
|
|
580
|
+
created_at: now,
|
|
581
|
+
updated_at: now,
|
|
582
|
+
completed_at: status === "completed" ? now : undefined,
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
function buildInitialSteps(options) {
|
|
586
|
+
const seed = resolveInitialStepSeed(options);
|
|
587
|
+
const hasDetailOptions = hasPlanStepDetailOptions(options);
|
|
588
|
+
assertInitialStepSeedAllowed(seed, hasDetailOptions);
|
|
589
|
+
if (seed.stepTitles.length === 0) {
|
|
590
|
+
return { steps: [], hasPerStepDetailOptions: hasDetailOptions };
|
|
591
|
+
}
|
|
592
|
+
if (seed.stepTitles.length === 1) {
|
|
593
|
+
return { steps: [buildSingleInitialStep(options, seed.stepTitles[0])], hasPerStepDetailOptions: hasDetailOptions };
|
|
594
|
+
}
|
|
595
|
+
const now = nowIso();
|
|
596
|
+
return {
|
|
597
|
+
steps: seed.stepTitles.map((stepTitle, index) => ({
|
|
598
|
+
id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, "0")}`,
|
|
599
|
+
order: index + 1,
|
|
600
|
+
title: stepTitle,
|
|
601
|
+
body: seed.templateSteps[index]?.body,
|
|
602
|
+
status: "pending",
|
|
603
|
+
created_at: now,
|
|
604
|
+
updated_at: now,
|
|
605
|
+
})),
|
|
606
|
+
hasPerStepDetailOptions: hasDetailOptions,
|
|
607
|
+
};
|
|
608
|
+
}
|
|
486
609
|
async function planCreate(options, global, ctx) {
|
|
487
610
|
const title = options.title?.trim();
|
|
488
611
|
if (!title) {
|
|
@@ -494,19 +617,6 @@ async function planCreate(options, global, ctx) {
|
|
|
494
617
|
const mode = asPlanMode(options.mode, DEFAULT_PLAN_MODE);
|
|
495
618
|
const harness = asHarness(options.harness);
|
|
496
619
|
const fromSearch = options.fromSearch?.trim();
|
|
497
|
-
const related = toArray(options.related);
|
|
498
|
-
const blocks = toArray(options.blocks);
|
|
499
|
-
const blockedBy = toArray(options.blockedBy);
|
|
500
|
-
const deps = [];
|
|
501
|
-
if (options.parent) {
|
|
502
|
-
deps.push(`id=${options.parent.trim()},kind=parent`);
|
|
503
|
-
}
|
|
504
|
-
for (const ref of related)
|
|
505
|
-
deps.push(`id=${ref},kind=related`);
|
|
506
|
-
for (const ref of blocks)
|
|
507
|
-
deps.push(`id=${ref},kind=blocks`);
|
|
508
|
-
for (const ref of blockedBy)
|
|
509
|
-
deps.push(`id=${ref},kind=blocked_by`);
|
|
510
620
|
const description = options.description?.trim() ?? options.scope?.trim() ?? title;
|
|
511
621
|
const createOptions = {
|
|
512
622
|
title,
|
|
@@ -516,7 +626,7 @@ async function planCreate(options, global, ctx) {
|
|
|
516
626
|
tags: options.tags,
|
|
517
627
|
priority: options.priority,
|
|
518
628
|
parent: options.parent,
|
|
519
|
-
dep:
|
|
629
|
+
dep: buildPlanCreateDependencies(options),
|
|
520
630
|
author: options.author,
|
|
521
631
|
message: options.message ?? (fromSearch ? `plan create (search: ${fromSearch})` : `plan create`),
|
|
522
632
|
};
|
|
@@ -551,96 +661,8 @@ async function planCreate(options, global, ctx) {
|
|
|
551
661
|
});
|
|
552
662
|
let finalMetadata = seedResult.item;
|
|
553
663
|
let initialStep;
|
|
554
|
-
const
|
|
555
|
-
const
|
|
556
|
-
const initialValidationExpected = options.validationExpected?.trim();
|
|
557
|
-
const initialValidation = initialValidationText || initialValidationCommand || initialValidationExpected
|
|
558
|
-
? {
|
|
559
|
-
text: initialValidationText || initialValidationCommand || "Validation check",
|
|
560
|
-
command: initialValidationCommand || undefined,
|
|
561
|
-
expected: initialValidationExpected || undefined,
|
|
562
|
-
}
|
|
563
|
-
: undefined;
|
|
564
|
-
// pm-6mit: collect ordered initial-step titles. Mixed-usage semantics
|
|
565
|
-
// (documented on pm-6mit): --step-title (when present) is the FIRST step,
|
|
566
|
-
// followed by each repeated --step value in argv order.
|
|
567
|
-
const stepTitleFlag = options.stepTitle?.trim();
|
|
568
|
-
const repeatedStepTitles = toOrderedStepTitles(options.step);
|
|
569
|
-
const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];
|
|
570
|
-
const stepTitles = [
|
|
571
|
-
...(stepTitleFlag ? [stepTitleFlag] : []),
|
|
572
|
-
...repeatedStepTitles,
|
|
573
|
-
...templateSteps.map((step) => step.title),
|
|
574
|
-
];
|
|
575
|
-
const hasPerStepDetailOptions = Boolean(options.stepBody?.trim()) ||
|
|
576
|
-
Boolean(options.stepOwner?.trim()) ||
|
|
577
|
-
Boolean(options.stepStatus?.trim()) ||
|
|
578
|
-
Boolean(options.stepEvidence?.trim()) ||
|
|
579
|
-
Boolean(options.stepBlockedReason?.trim()) ||
|
|
580
|
-
Boolean(options.stepReplacement?.trim()) ||
|
|
581
|
-
toArray(options.dependsOn).length > 0 ||
|
|
582
|
-
toArray(options.link).length > 0 ||
|
|
583
|
-
toSpecArray(options.file).length > 0 ||
|
|
584
|
-
toSpecArray(options.test).length > 0 ||
|
|
585
|
-
toSpecArray(options.doc).length > 0;
|
|
586
|
-
if ((stepTitleFlag || repeatedStepTitles.length > 0) && templateSteps.length > 0) {
|
|
587
|
-
throw new PmCliError("pm plan create --template cannot be combined with --step-title or --step; choose one step seeding source", EXIT_CODE.USAGE, {
|
|
588
|
-
code: "ambiguous_option_combination",
|
|
589
|
-
examples: [
|
|
590
|
-
`pm plan create --title "Fix login crash" --template ${PLAN_TEMPLATE_NAMES[0]}`,
|
|
591
|
-
'pm plan create --title "Custom plan" --step "Read the code" --step "Write the fix"',
|
|
592
|
-
],
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
if (stepTitles.length > 1 && hasPerStepDetailOptions) {
|
|
596
|
-
// Per-step detail flags target exactly one step; silently attaching them to
|
|
597
|
-
// the first (or all) of several seeded steps would be unpredictable.
|
|
598
|
-
throw new PmCliError("pm plan create per-step options apply to a single initial step; with multiple --step values create the plan first, then refine steps individually", EXIT_CODE.USAGE, {
|
|
599
|
-
code: "ambiguous_option_combination",
|
|
600
|
-
examples: [
|
|
601
|
-
'pm plan create --title "Execution plan" --step "Read the code" --step "Write the fix"',
|
|
602
|
-
'pm plan update-step <plan-id> plan-step-001 --step-body "Inspect retry path"',
|
|
603
|
-
],
|
|
604
|
-
});
|
|
605
|
-
}
|
|
606
|
-
let initialSteps = [];
|
|
607
|
-
if (stepTitles.length === 1) {
|
|
608
|
-
const status = asStepStatus(options.stepStatus, "pending");
|
|
609
|
-
const linkedItems = buildLinkInputs(options, "depends_on");
|
|
610
|
-
const files = toSpecArray(options.file).map(parseStepFile);
|
|
611
|
-
const tests = toSpecArray(options.test).map(parseStepTest);
|
|
612
|
-
const docs = toSpecArray(options.doc).map(parseStepDoc);
|
|
613
|
-
const now = nowIso();
|
|
614
|
-
initialSteps = [{
|
|
615
|
-
id: "plan-step-001",
|
|
616
|
-
order: 1,
|
|
617
|
-
title: stepTitles[0],
|
|
618
|
-
body: options.stepBody?.trim() || undefined,
|
|
619
|
-
status,
|
|
620
|
-
owner: options.stepOwner?.trim() || undefined,
|
|
621
|
-
evidence: options.stepEvidence?.trim() || undefined,
|
|
622
|
-
blocked_reason: status === "blocked" ? options.stepBlockedReason?.trim() || "" : undefined,
|
|
623
|
-
linked_items: linkedItems.length > 0 ? linkedItems : undefined,
|
|
624
|
-
files: files.length > 0 ? files : undefined,
|
|
625
|
-
tests: tests.length > 0 ? tests : undefined,
|
|
626
|
-
docs: docs.length > 0 ? docs : undefined,
|
|
627
|
-
created_at: now,
|
|
628
|
-
updated_at: now,
|
|
629
|
-
completed_at: status === "completed" ? now : undefined,
|
|
630
|
-
}];
|
|
631
|
-
}
|
|
632
|
-
else if (stepTitles.length > 1) {
|
|
633
|
-
const now = nowIso();
|
|
634
|
-
initialSteps = stepTitles.map((stepTitle, index) => ({
|
|
635
|
-
id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, "0")}`,
|
|
636
|
-
order: index + 1,
|
|
637
|
-
title: stepTitle,
|
|
638
|
-
body: templateSteps[index]?.body,
|
|
639
|
-
status: "pending",
|
|
640
|
-
created_at: now,
|
|
641
|
-
updated_at: now,
|
|
642
|
-
}));
|
|
643
|
-
}
|
|
664
|
+
const initialValidation = buildInitialValidation(options);
|
|
665
|
+
const { steps: initialSteps, hasPerStepDetailOptions } = buildInitialSteps(options);
|
|
644
666
|
if (initialSteps.length > 0) {
|
|
645
667
|
initialStep = initialSteps[0];
|
|
646
668
|
const stepped = await mutateItem({
|
|
@@ -767,10 +789,6 @@ async function planAddStep(id, options, ctx) {
|
|
|
767
789
|
}
|
|
768
790
|
const status = asStepStatus(options.stepStatus, "pending");
|
|
769
791
|
const allowMultipleActive = options.allowMultipleActive === true;
|
|
770
|
-
const linkedItems = buildLinkInputs(options, "depends_on");
|
|
771
|
-
const files = toSpecArray(options.file).map(parseStepFile);
|
|
772
|
-
const tests = toSpecArray(options.test).map(parseStepTest);
|
|
773
|
-
const docs = toSpecArray(options.doc).map(parseStepDoc);
|
|
774
792
|
const { document, resultStep, itemId } = await mutatePlanSteps({
|
|
775
793
|
id,
|
|
776
794
|
options,
|
|
@@ -779,31 +797,8 @@ async function planAddStep(id, options, ctx) {
|
|
|
779
797
|
message: `plan add-step "${title}"`,
|
|
780
798
|
mutator(steps) {
|
|
781
799
|
const order = steps.length + 1;
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
if (step.status === "in_progress") {
|
|
785
|
-
throw new PmCliError(`Plan already has step ${step.id} in_progress. Pass --allow-multiple-active or update that step first.`, EXIT_CODE.CONFLICT);
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
const now = nowIso();
|
|
790
|
-
const step = {
|
|
791
|
-
id: newStepId(steps),
|
|
792
|
-
order,
|
|
793
|
-
title,
|
|
794
|
-
body: options.stepBody?.trim() || undefined,
|
|
795
|
-
status,
|
|
796
|
-
owner: options.stepOwner?.trim() || undefined,
|
|
797
|
-
evidence: options.stepEvidence?.trim() || undefined,
|
|
798
|
-
blocked_reason: status === "blocked" ? options.stepBlockedReason?.trim() || "" : undefined,
|
|
799
|
-
linked_items: linkedItems.length > 0 ? linkedItems : undefined,
|
|
800
|
-
files: files.length > 0 ? files : undefined,
|
|
801
|
-
tests: tests.length > 0 ? tests : undefined,
|
|
802
|
-
docs: docs.length > 0 ? docs : undefined,
|
|
803
|
-
created_at: now,
|
|
804
|
-
updated_at: now,
|
|
805
|
-
completed_at: status === "completed" ? now : undefined,
|
|
806
|
-
};
|
|
800
|
+
assertInProgressStepAllowed(steps, undefined, status, allowMultipleActive);
|
|
801
|
+
const step = buildAddedPlanStep(steps, options, { order, title, status });
|
|
807
802
|
steps.push(step);
|
|
808
803
|
return { changedSteps: [step.id], resultStep: step };
|
|
809
804
|
},
|
|
@@ -818,6 +813,40 @@ async function planAddStep(id, options, ctx) {
|
|
|
818
813
|
generated_at: nowIso(),
|
|
819
814
|
};
|
|
820
815
|
}
|
|
816
|
+
function assertInProgressStepAllowed(steps, currentStepId, desiredStatus, allowMultipleActive) {
|
|
817
|
+
if (desiredStatus !== "in_progress" || allowMultipleActive) {
|
|
818
|
+
return;
|
|
819
|
+
}
|
|
820
|
+
const activeStep = steps.find((step) => step.id !== currentStepId && step.status === "in_progress");
|
|
821
|
+
if (!activeStep) {
|
|
822
|
+
return;
|
|
823
|
+
}
|
|
824
|
+
throw new PmCliError(`Plan already has step ${activeStep.id} in_progress. Pass --allow-multiple-active or update that step first.`, EXIT_CODE.CONFLICT);
|
|
825
|
+
}
|
|
826
|
+
function buildAddedPlanStep(existingSteps, options, seed) {
|
|
827
|
+
const linkedItems = buildLinkInputs(options, "depends_on");
|
|
828
|
+
const files = toSpecArray(options.file).map(parseStepFile);
|
|
829
|
+
const tests = toSpecArray(options.test).map(parseStepTest);
|
|
830
|
+
const docs = toSpecArray(options.doc).map(parseStepDoc);
|
|
831
|
+
const now = nowIso();
|
|
832
|
+
return {
|
|
833
|
+
id: newStepId(existingSteps),
|
|
834
|
+
order: seed.order,
|
|
835
|
+
title: seed.title,
|
|
836
|
+
body: options.stepBody?.trim() || undefined,
|
|
837
|
+
status: seed.status,
|
|
838
|
+
owner: options.stepOwner?.trim() || undefined,
|
|
839
|
+
evidence: options.stepEvidence?.trim() || undefined,
|
|
840
|
+
blocked_reason: seed.status === "blocked" ? options.stepBlockedReason?.trim() || "" : undefined,
|
|
841
|
+
linked_items: linkedItems.length > 0 ? linkedItems : undefined,
|
|
842
|
+
files: files.length > 0 ? files : undefined,
|
|
843
|
+
tests: tests.length > 0 ? tests : undefined,
|
|
844
|
+
docs: docs.length > 0 ? docs : undefined,
|
|
845
|
+
created_at: now,
|
|
846
|
+
updated_at: now,
|
|
847
|
+
completed_at: seed.status === "completed" ? now : undefined,
|
|
848
|
+
};
|
|
849
|
+
}
|
|
821
850
|
function buildLinkInputs(options, fallbackKind) {
|
|
822
851
|
const dependsOn = toArray(options.dependsOn).map((id) => ({ id, kind: fallbackKind }));
|
|
823
852
|
const related = toArray(options.related).map((id) => ({ id, kind: "related" }));
|
|
@@ -845,36 +874,9 @@ async function planUpdateStep(id, options, ctx, args) {
|
|
|
845
874
|
const step = resolveStepRef(steps, args.stepRef);
|
|
846
875
|
const now = nowIso();
|
|
847
876
|
const desiredStatus = args.finalStatus ?? asStepStatus(options.stepStatus, step.status);
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
throw new PmCliError(`Plan already has step ${other.id} in_progress. Pass --allow-multiple-active or update that step first.`, EXIT_CODE.CONFLICT);
|
|
852
|
-
}
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
if (desiredStatus === "blocked" && !options.stepBlockedReason?.trim() && !step.blocked_reason) {
|
|
856
|
-
throw new PmCliError("Blocking a step requires --step-blocked-reason or an already-recorded blocked_reason.", EXIT_CODE.USAGE);
|
|
857
|
-
}
|
|
858
|
-
if (options.stepTitle?.trim())
|
|
859
|
-
step.title = options.stepTitle.trim();
|
|
860
|
-
if (options.stepBody !== undefined)
|
|
861
|
-
step.body = options.stepBody.trim() || undefined;
|
|
862
|
-
if (options.stepOwner !== undefined)
|
|
863
|
-
step.owner = options.stepOwner.trim() || undefined;
|
|
864
|
-
if (options.stepEvidence !== undefined)
|
|
865
|
-
step.evidence = options.stepEvidence.trim() || undefined;
|
|
866
|
-
if (options.stepBlockedReason !== undefined)
|
|
867
|
-
step.blocked_reason = options.stepBlockedReason.trim() || undefined;
|
|
868
|
-
if (options.stepReplacement !== undefined)
|
|
869
|
-
step.superseded_by = options.stepReplacement.trim() || undefined;
|
|
870
|
-
step.status = desiredStatus;
|
|
871
|
-
step.updated_at = now;
|
|
872
|
-
if (desiredStatus === "completed" && !step.completed_at) {
|
|
873
|
-
step.completed_at = now;
|
|
874
|
-
}
|
|
875
|
-
else if (desiredStatus !== "completed") {
|
|
876
|
-
step.completed_at = undefined;
|
|
877
|
-
}
|
|
877
|
+
const allowMultipleActive = options.allowMultipleActive === true || args.allowMultipleActive === true;
|
|
878
|
+
assertInProgressStepAllowed(steps, step.status === "in_progress" ? step.id : undefined, desiredStatus, allowMultipleActive);
|
|
879
|
+
applyStepUpdates(step, options, desiredStatus, now);
|
|
878
880
|
doc.metadata.updated_at = now;
|
|
879
881
|
return { changedSteps: [step.id], resultStep: step };
|
|
880
882
|
},
|
|
@@ -889,6 +891,49 @@ async function planUpdateStep(id, options, ctx, args) {
|
|
|
889
891
|
generated_at: nowIso(),
|
|
890
892
|
};
|
|
891
893
|
}
|
|
894
|
+
function applyStepUpdates(step, options, desiredStatus, now) {
|
|
895
|
+
assertBlockedStepReason(step, options, desiredStatus);
|
|
896
|
+
applyStepFieldUpdates(step, options);
|
|
897
|
+
step.status = desiredStatus;
|
|
898
|
+
step.updated_at = now;
|
|
899
|
+
applyStepCompletionTimestamp(step, desiredStatus, now);
|
|
900
|
+
}
|
|
901
|
+
function assertBlockedStepReason(step, options, desiredStatus) {
|
|
902
|
+
if (desiredStatus !== "blocked" || options.stepBlockedReason?.trim() || step.blocked_reason) {
|
|
903
|
+
return;
|
|
904
|
+
}
|
|
905
|
+
throw new PmCliError("Blocking a step requires --step-blocked-reason or an already-recorded blocked_reason.", EXIT_CODE.USAGE);
|
|
906
|
+
}
|
|
907
|
+
function applyStepFieldUpdates(step, options) {
|
|
908
|
+
const title = options.stepTitle?.trim();
|
|
909
|
+
if (title) {
|
|
910
|
+
step.title = title;
|
|
911
|
+
}
|
|
912
|
+
if (options.stepBody !== undefined) {
|
|
913
|
+
step.body = options.stepBody.trim() || undefined;
|
|
914
|
+
}
|
|
915
|
+
if (options.stepOwner !== undefined) {
|
|
916
|
+
step.owner = options.stepOwner.trim() || undefined;
|
|
917
|
+
}
|
|
918
|
+
if (options.stepEvidence !== undefined) {
|
|
919
|
+
step.evidence = options.stepEvidence.trim() || undefined;
|
|
920
|
+
}
|
|
921
|
+
if (options.stepBlockedReason !== undefined) {
|
|
922
|
+
step.blocked_reason = options.stepBlockedReason.trim() || undefined;
|
|
923
|
+
}
|
|
924
|
+
if (options.stepReplacement !== undefined) {
|
|
925
|
+
step.superseded_by = options.stepReplacement.trim() || undefined;
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
function applyStepCompletionTimestamp(step, desiredStatus, now) {
|
|
929
|
+
if (desiredStatus === "completed" && !step.completed_at) {
|
|
930
|
+
step.completed_at = now;
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
933
|
+
if (desiredStatus !== "completed") {
|
|
934
|
+
step.completed_at = undefined;
|
|
935
|
+
}
|
|
936
|
+
}
|
|
892
937
|
async function planReorderStep(id, options, ctx, stepRef, newOrder) {
|
|
893
938
|
const { document, itemId } = await mutatePlanSteps({
|
|
894
939
|
id,
|
|
@@ -1141,6 +1186,67 @@ async function planApprove(id, options, ctx) {
|
|
|
1141
1186
|
generated_at: nowIso(),
|
|
1142
1187
|
};
|
|
1143
1188
|
}
|
|
1189
|
+
function buildMaterializeSkippedWarnings(materializeSkipped) {
|
|
1190
|
+
return materializeSkipped.map((entry) => `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : ""}`);
|
|
1191
|
+
}
|
|
1192
|
+
function buildMaterializeNoopResult(planRead, materializeSkipped) {
|
|
1193
|
+
const plan = projectPlan(planRead.document.metadata, "standard");
|
|
1194
|
+
return {
|
|
1195
|
+
action: "materialize",
|
|
1196
|
+
plan,
|
|
1197
|
+
materialized: [],
|
|
1198
|
+
materialize_skipped: materializeSkipped,
|
|
1199
|
+
next_actions: nextActionsFor(planRead.itemId, plan),
|
|
1200
|
+
warnings: buildMaterializeSkippedWarnings(materializeSkipped),
|
|
1201
|
+
generated_at: nowIso(),
|
|
1202
|
+
};
|
|
1203
|
+
}
|
|
1204
|
+
function buildMaterializeDependencies(parent, planItemId, step) {
|
|
1205
|
+
const deps = [
|
|
1206
|
+
`id=${parent},kind=parent`,
|
|
1207
|
+
`id=${planItemId},kind=discovered_from`,
|
|
1208
|
+
];
|
|
1209
|
+
for (const link of step.linked_items ?? []) {
|
|
1210
|
+
const realKind = link.kind === "blocked_by" || link.kind === "blocks" || link.kind === "related" || link.kind === "discovered_from"
|
|
1211
|
+
? link.kind
|
|
1212
|
+
: "related";
|
|
1213
|
+
deps.push(`id=${link.id},kind=${realKind}`);
|
|
1214
|
+
}
|
|
1215
|
+
return deps;
|
|
1216
|
+
}
|
|
1217
|
+
async function createMaterializedStepItems(params) {
|
|
1218
|
+
const materialized = [];
|
|
1219
|
+
for (const step of params.targets) {
|
|
1220
|
+
const created = await runCreate({
|
|
1221
|
+
title: step.title,
|
|
1222
|
+
description: step.body?.trim() || step.title,
|
|
1223
|
+
type: params.resolvedTypeName,
|
|
1224
|
+
parent: params.parent,
|
|
1225
|
+
tags: params.tags,
|
|
1226
|
+
author: params.options.author,
|
|
1227
|
+
message: params.options.message ?? `materialized from plan ${params.planItemId} step ${step.id}`,
|
|
1228
|
+
dep: buildMaterializeDependencies(params.parent, params.planItemId, step),
|
|
1229
|
+
}, { ...{}, path: params.pmRoot });
|
|
1230
|
+
materialized.push({ id: created.item.id, type: params.resolvedTypeName, from_step: step.id });
|
|
1231
|
+
}
|
|
1232
|
+
return materialized;
|
|
1233
|
+
}
|
|
1234
|
+
function linkMaterializedStepItems(currentSteps, targets, materialized) {
|
|
1235
|
+
for (const target of targets) {
|
|
1236
|
+
const matched = materialized.find((entry) => entry.from_step === target.id);
|
|
1237
|
+
if (!matched) {
|
|
1238
|
+
continue;
|
|
1239
|
+
}
|
|
1240
|
+
const step = currentSteps.find((entry) => entry.id === target.id);
|
|
1241
|
+
if (!step) {
|
|
1242
|
+
continue;
|
|
1243
|
+
}
|
|
1244
|
+
const links = step.linked_items ?? [];
|
|
1245
|
+
links.push({ id: matched.id, kind: "implements", note: `materialized as ${matched.type}` });
|
|
1246
|
+
step.linked_items = links;
|
|
1247
|
+
step.updated_at = nowIso();
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1144
1250
|
async function planMaterialize(id, options, ctx) {
|
|
1145
1251
|
const stepRefs = toArray(options.steps);
|
|
1146
1252
|
if (stepRefs.length === 0) {
|
|
@@ -1159,68 +1265,27 @@ async function planMaterialize(id, options, ctx) {
|
|
|
1159
1265
|
const { targets, skipped: materializeSkipped } = resolveMaterializeTargets(steps, stepRefs);
|
|
1160
1266
|
if (targets.length === 0) {
|
|
1161
1267
|
if (materializeSkipped.length > 0) {
|
|
1162
|
-
|
|
1163
|
-
// already materialized or completed, return a successful no-op
|
|
1164
|
-
// result (exit 0) instead of throwing NOT_FOUND. This makes
|
|
1165
|
-
// `pm plan materialize --steps all` truly idempotent for CI/agent
|
|
1166
|
-
// workflows; the skip reasons + warnings still surface what was
|
|
1167
|
-
// intentionally not redone.
|
|
1168
|
-
const plan = projectPlan(planRead.document.metadata, "standard");
|
|
1169
|
-
return {
|
|
1170
|
-
action: "materialize",
|
|
1171
|
-
plan,
|
|
1172
|
-
materialized: [],
|
|
1173
|
-
materialize_skipped: materializeSkipped,
|
|
1174
|
-
next_actions: nextActionsFor(planRead.itemId, plan),
|
|
1175
|
-
warnings: materializeSkipped.map((entry) => `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : ""}`),
|
|
1176
|
-
generated_at: nowIso(),
|
|
1177
|
-
};
|
|
1268
|
+
return buildMaterializeNoopResult(planRead, materializeSkipped);
|
|
1178
1269
|
}
|
|
1179
1270
|
throw new PmCliError("No matching plan steps found for --steps", EXIT_CODE.NOT_FOUND);
|
|
1180
1271
|
}
|
|
1181
|
-
const materialized =
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
: "related";
|
|
1191
|
-
deps.push(`id=${link.id},kind=${realKind}`);
|
|
1192
|
-
}
|
|
1193
|
-
const created = await runCreate({
|
|
1194
|
-
title: step.title,
|
|
1195
|
-
description: step.body?.trim() || step.title,
|
|
1196
|
-
type: resolvedTypeName,
|
|
1197
|
-
parent,
|
|
1198
|
-
tags,
|
|
1199
|
-
author: options.author,
|
|
1200
|
-
message: options.message ?? `materialized from plan ${planRead.itemId} step ${step.id}`,
|
|
1201
|
-
dep: deps,
|
|
1202
|
-
}, ctx.settings ? { ...{}, path: ctx.pmRoot } : {});
|
|
1203
|
-
materialized.push({ id: created.item.id, type: resolvedTypeName, from_step: step.id });
|
|
1204
|
-
}
|
|
1272
|
+
const materialized = await createMaterializedStepItems({
|
|
1273
|
+
targets,
|
|
1274
|
+
parent,
|
|
1275
|
+
planItemId: planRead.itemId,
|
|
1276
|
+
resolvedTypeName,
|
|
1277
|
+
tags,
|
|
1278
|
+
options,
|
|
1279
|
+
pmRoot: ctx.pmRoot,
|
|
1280
|
+
});
|
|
1205
1281
|
const { document, itemId } = await mutatePlanSteps({
|
|
1206
1282
|
id,
|
|
1207
1283
|
options,
|
|
1208
1284
|
ctx,
|
|
1209
1285
|
op: "plan_materialize",
|
|
1210
1286
|
message: options.message ?? `plan materialize ${stepRefs.join(",")}`,
|
|
1211
|
-
mutator(currentSteps
|
|
1212
|
-
|
|
1213
|
-
const matched = materialized.find((entry) => entry.from_step === target.id);
|
|
1214
|
-
if (!matched)
|
|
1215
|
-
continue;
|
|
1216
|
-
const step = currentSteps.find((entry) => entry.id === target.id);
|
|
1217
|
-
if (!step)
|
|
1218
|
-
continue;
|
|
1219
|
-
const links = step.linked_items ?? [];
|
|
1220
|
-
links.push({ id: matched.id, kind: "implements", note: `materialized as ${matched.type}` });
|
|
1221
|
-
step.linked_items = links;
|
|
1222
|
-
step.updated_at = nowIso();
|
|
1223
|
-
}
|
|
1287
|
+
mutator(currentSteps) {
|
|
1288
|
+
linkMaterializedStepItems(currentSteps, targets, materialized);
|
|
1224
1289
|
return { changedSteps: targets.map((entry) => entry.id) };
|
|
1225
1290
|
},
|
|
1226
1291
|
});
|
|
@@ -1231,94 +1296,104 @@ async function planMaterialize(id, options, ctx) {
|
|
|
1231
1296
|
materialized,
|
|
1232
1297
|
...(materializeSkipped.length > 0 ? { materialize_skipped: materializeSkipped } : {}),
|
|
1233
1298
|
next_actions: nextActionsFor(itemId, plan),
|
|
1234
|
-
warnings: materializeSkipped
|
|
1299
|
+
warnings: buildMaterializeSkippedWarnings(materializeSkipped),
|
|
1235
1300
|
generated_at: nowIso(),
|
|
1236
1301
|
};
|
|
1237
1302
|
}
|
|
1303
|
+
function normalizePlanStepAliasInput(input) {
|
|
1304
|
+
if (input.subcommand === "create") {
|
|
1305
|
+
return input;
|
|
1306
|
+
}
|
|
1307
|
+
const stepValues = toOrderedStepTitles(input.options.step);
|
|
1308
|
+
if (stepValues.length > 1) {
|
|
1309
|
+
throw new PmCliError(`pm plan ${input.subcommand} accepts a single --step/--step-title value (repeated --step seeds ordered steps only on pm plan create)`, EXIT_CODE.USAGE);
|
|
1310
|
+
}
|
|
1311
|
+
if (stepValues.length === 1 && !input.options.stepTitle?.trim()) {
|
|
1312
|
+
return { ...input, options: { ...input.options, stepTitle: stepValues[0] } };
|
|
1313
|
+
}
|
|
1314
|
+
return input;
|
|
1315
|
+
}
|
|
1316
|
+
function requirePlanId(input, label) {
|
|
1317
|
+
if (!input.id) {
|
|
1318
|
+
throw new PmCliError(`pm plan ${label} requires a plan id`, EXIT_CODE.USAGE);
|
|
1319
|
+
}
|
|
1320
|
+
return input.id;
|
|
1321
|
+
}
|
|
1322
|
+
function requirePlanStepRef(input, label) {
|
|
1323
|
+
const id = requirePlanId(input, label);
|
|
1324
|
+
if (!input.stepRef) {
|
|
1325
|
+
throw new PmCliError(`pm plan ${label} requires <plan-id> <step>`, EXIT_CODE.USAGE);
|
|
1326
|
+
}
|
|
1327
|
+
return { id, stepRef: input.stepRef };
|
|
1328
|
+
}
|
|
1329
|
+
function requireReorderTarget(input) {
|
|
1330
|
+
const target = requirePlanStepRef(input, "reorder-step");
|
|
1331
|
+
if (input.reorderTo === undefined) {
|
|
1332
|
+
throw new PmCliError("pm plan reorder-step requires <plan-id> <step> <new-order>", EXIT_CODE.USAGE);
|
|
1333
|
+
}
|
|
1334
|
+
return { ...target, reorderTo: input.reorderTo };
|
|
1335
|
+
}
|
|
1336
|
+
const PLAN_DISPATCHERS = {
|
|
1337
|
+
create: (input, ctx) => planCreate(input.options, input.global, ctx),
|
|
1338
|
+
show: (input, ctx) => planShow(requirePlanId(input, "show"), input.options, ctx),
|
|
1339
|
+
"add-step": (input, ctx) => planAddStep(requirePlanId(input, "add-step"), input.options, ctx),
|
|
1340
|
+
"update-step": (input, ctx) => {
|
|
1341
|
+
const target = requirePlanStepRef(input, "update-step");
|
|
1342
|
+
return planUpdateStep(target.id, input.options, ctx, { stepRef: target.stepRef, op: "plan_update_step" });
|
|
1343
|
+
},
|
|
1344
|
+
"complete-step": (input, ctx) => {
|
|
1345
|
+
const target = requirePlanStepRef(input, "complete-step");
|
|
1346
|
+
return planUpdateStep(target.id, input.options, ctx, {
|
|
1347
|
+
stepRef: target.stepRef,
|
|
1348
|
+
finalStatus: "completed",
|
|
1349
|
+
op: "plan_complete_step",
|
|
1350
|
+
});
|
|
1351
|
+
},
|
|
1352
|
+
"block-step": (input, ctx) => {
|
|
1353
|
+
const target = requirePlanStepRef(input, "block-step");
|
|
1354
|
+
return planUpdateStep(target.id, input.options, ctx, {
|
|
1355
|
+
stepRef: target.stepRef,
|
|
1356
|
+
finalStatus: "blocked",
|
|
1357
|
+
op: "plan_block_step",
|
|
1358
|
+
});
|
|
1359
|
+
},
|
|
1360
|
+
"reorder-step": (input, ctx) => {
|
|
1361
|
+
const target = requireReorderTarget(input);
|
|
1362
|
+
return planReorderStep(target.id, input.options, ctx, target.stepRef, target.reorderTo);
|
|
1363
|
+
},
|
|
1364
|
+
"remove-step": (input, ctx) => {
|
|
1365
|
+
const target = requirePlanStepRef(input, "remove-step");
|
|
1366
|
+
return planRemoveStep(target.id, input.options, ctx, target.stepRef);
|
|
1367
|
+
},
|
|
1368
|
+
link: (input, ctx) => {
|
|
1369
|
+
const target = requirePlanStepRef(input, "link");
|
|
1370
|
+
return planLink(target.id, input.options, ctx, target.stepRef);
|
|
1371
|
+
},
|
|
1372
|
+
unlink: (input, ctx) => {
|
|
1373
|
+
const target = requirePlanStepRef(input, "unlink");
|
|
1374
|
+
return planUnlink(target.id, input.options, ctx, target.stepRef);
|
|
1375
|
+
},
|
|
1376
|
+
decision: (input, ctx) => planAppendLog(requirePlanId(input, "decision"), input.options, ctx, "decision"),
|
|
1377
|
+
discovery: (input, ctx) => planAppendLog(requirePlanId(input, "discovery"), input.options, ctx, "discovery"),
|
|
1378
|
+
validation: (input, ctx) => planAppendLog(requirePlanId(input, "validation"), input.options, ctx, "validation"),
|
|
1379
|
+
resume: (input, ctx) => planResume(requirePlanId(input, "resume"), input.options, ctx),
|
|
1380
|
+
approve: (input, ctx) => planApprove(requirePlanId(input, "approve"), input.options, ctx),
|
|
1381
|
+
materialize: (input, ctx) => planMaterialize(requirePlanId(input, "materialize"), input.options, ctx),
|
|
1382
|
+
};
|
|
1383
|
+
function resolvePlanDispatcher(subcommand) {
|
|
1384
|
+
const dispatcher = PLAN_DISPATCHERS[subcommand];
|
|
1385
|
+
if (!dispatcher) {
|
|
1386
|
+
throw new PmCliError(`Unknown pm plan subcommand "${subcommand}"`, EXIT_CODE.USAGE);
|
|
1387
|
+
}
|
|
1388
|
+
return dispatcher;
|
|
1389
|
+
}
|
|
1238
1390
|
/**
|
|
1239
1391
|
* Implements run plan for the public runtime surface of this module.
|
|
1240
1392
|
*/
|
|
1241
1393
|
export async function runPlan(input) {
|
|
1242
1394
|
const ctx = await loadContext(input.global);
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
// behavior; multiple values would be ambiguous there (one step is targeted),
|
|
1246
|
-
// so they are rejected instead of silently dropping all but the last.
|
|
1247
|
-
if (input.subcommand !== "create") {
|
|
1248
|
-
const stepValues = toOrderedStepTitles(input.options.step);
|
|
1249
|
-
if (stepValues.length > 1) {
|
|
1250
|
-
throw new PmCliError(`pm plan ${input.subcommand} accepts a single --step/--step-title value (repeated --step seeds ordered steps only on pm plan create)`, EXIT_CODE.USAGE);
|
|
1251
|
-
}
|
|
1252
|
-
if (stepValues.length === 1 && !input.options.stepTitle?.trim()) {
|
|
1253
|
-
input = { ...input, options: { ...input.options, stepTitle: stepValues[0] } };
|
|
1254
|
-
}
|
|
1255
|
-
}
|
|
1256
|
-
switch (input.subcommand) {
|
|
1257
|
-
case "create":
|
|
1258
|
-
return planCreate(input.options, input.global, ctx);
|
|
1259
|
-
case "show":
|
|
1260
|
-
if (!input.id)
|
|
1261
|
-
throw new PmCliError("pm plan show requires a plan id", EXIT_CODE.USAGE);
|
|
1262
|
-
return planShow(input.id, input.options, ctx);
|
|
1263
|
-
case "add-step":
|
|
1264
|
-
if (!input.id)
|
|
1265
|
-
throw new PmCliError("pm plan add-step requires a plan id", EXIT_CODE.USAGE);
|
|
1266
|
-
return planAddStep(input.id, input.options, ctx);
|
|
1267
|
-
case "update-step":
|
|
1268
|
-
if (!input.id || !input.stepRef)
|
|
1269
|
-
throw new PmCliError("pm plan update-step requires <plan-id> <step>", EXIT_CODE.USAGE);
|
|
1270
|
-
return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, op: "plan_update_step" });
|
|
1271
|
-
case "complete-step":
|
|
1272
|
-
if (!input.id || !input.stepRef)
|
|
1273
|
-
throw new PmCliError("pm plan complete-step requires <plan-id> <step>", EXIT_CODE.USAGE);
|
|
1274
|
-
return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: "completed", op: "plan_complete_step" });
|
|
1275
|
-
case "block-step":
|
|
1276
|
-
if (!input.id || !input.stepRef)
|
|
1277
|
-
throw new PmCliError("pm plan block-step requires <plan-id> <step>", EXIT_CODE.USAGE);
|
|
1278
|
-
return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: "blocked", op: "plan_block_step" });
|
|
1279
|
-
case "reorder-step":
|
|
1280
|
-
if (!input.id || !input.stepRef || input.reorderTo === undefined)
|
|
1281
|
-
throw new PmCliError("pm plan reorder-step requires <plan-id> <step> <new-order>", EXIT_CODE.USAGE);
|
|
1282
|
-
return planReorderStep(input.id, input.options, ctx, input.stepRef, input.reorderTo);
|
|
1283
|
-
case "remove-step":
|
|
1284
|
-
if (!input.id || !input.stepRef)
|
|
1285
|
-
throw new PmCliError("pm plan remove-step requires <plan-id> <step>", EXIT_CODE.USAGE);
|
|
1286
|
-
return planRemoveStep(input.id, input.options, ctx, input.stepRef);
|
|
1287
|
-
case "link":
|
|
1288
|
-
if (!input.id || !input.stepRef)
|
|
1289
|
-
throw new PmCliError("pm plan link requires <plan-id> <step>", EXIT_CODE.USAGE);
|
|
1290
|
-
return planLink(input.id, input.options, ctx, input.stepRef);
|
|
1291
|
-
case "unlink":
|
|
1292
|
-
if (!input.id || !input.stepRef)
|
|
1293
|
-
throw new PmCliError("pm plan unlink requires <plan-id> <step>", EXIT_CODE.USAGE);
|
|
1294
|
-
return planUnlink(input.id, input.options, ctx, input.stepRef);
|
|
1295
|
-
case "decision":
|
|
1296
|
-
if (!input.id)
|
|
1297
|
-
throw new PmCliError("pm plan decision requires a plan id", EXIT_CODE.USAGE);
|
|
1298
|
-
return planAppendLog(input.id, input.options, ctx, "decision");
|
|
1299
|
-
case "discovery":
|
|
1300
|
-
if (!input.id)
|
|
1301
|
-
throw new PmCliError("pm plan discovery requires a plan id", EXIT_CODE.USAGE);
|
|
1302
|
-
return planAppendLog(input.id, input.options, ctx, "discovery");
|
|
1303
|
-
case "validation":
|
|
1304
|
-
if (!input.id)
|
|
1305
|
-
throw new PmCliError("pm plan validation requires a plan id", EXIT_CODE.USAGE);
|
|
1306
|
-
return planAppendLog(input.id, input.options, ctx, "validation");
|
|
1307
|
-
case "resume":
|
|
1308
|
-
if (!input.id)
|
|
1309
|
-
throw new PmCliError("pm plan resume requires a plan id", EXIT_CODE.USAGE);
|
|
1310
|
-
return planResume(input.id, input.options, ctx);
|
|
1311
|
-
case "approve":
|
|
1312
|
-
if (!input.id)
|
|
1313
|
-
throw new PmCliError("pm plan approve requires a plan id", EXIT_CODE.USAGE);
|
|
1314
|
-
return planApprove(input.id, input.options, ctx);
|
|
1315
|
-
case "materialize":
|
|
1316
|
-
if (!input.id)
|
|
1317
|
-
throw new PmCliError("pm plan materialize requires a plan id", EXIT_CODE.USAGE);
|
|
1318
|
-
return planMaterialize(input.id, input.options, ctx);
|
|
1319
|
-
default:
|
|
1320
|
-
throw new PmCliError(`Unknown pm plan subcommand "${input.subcommand}"`, EXIT_CODE.USAGE);
|
|
1321
|
-
}
|
|
1395
|
+
const normalizedInput = normalizePlanStepAliasInput(input);
|
|
1396
|
+
return resolvePlanDispatcher(normalizedInput.subcommand)(normalizedInput, ctx);
|
|
1322
1397
|
}
|
|
1323
1398
|
//# sourceMappingURL=plan.js.map
|
|
1324
|
-
//# debugId=
|
|
1399
|
+
//# debugId=1e64f96b-b7e3-5228-839a-65a187cb7020
|