@unbrained/pm-cli 2026.6.30 → 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/AGENTS.md +2 -0
- package/CHANGELOG.md +26 -0
- package/dist/cli/bootstrap-args.js +89 -79
- package/dist/cli/bootstrap-args.js.map +1 -1
- 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 +339 -303
- 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/create.js +483 -434
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +46 -39
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/dedupe-merge.js +88 -69
- package/dist/cli/commands/dedupe-merge.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.js +59 -46
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/doctor.js +129 -78
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/managed-state.js +101 -57
- package/dist/cli/commands/extension/managed-state.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.d.ts +7 -0
- package/dist/cli/commands/extension/scaffold.js +214 -186
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +6 -1
- package/dist/cli/commands/extension.js +1034 -902
- package/dist/cli/commands/extension.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-filter-shared.js +55 -48
- package/dist/cli/commands/list-filter-shared.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 +595 -536
- 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 +530 -464
- 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 +764 -747
- 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/extension-command-options.js +48 -21
- package/dist/cli/extension-command-options.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/registration-helpers.js +117 -122
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
- package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
- package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
- package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
- package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
- package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
- package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
- package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
- package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
- package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
- package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
- package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
- package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
- package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
- package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
- package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
- package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
- package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
- package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
- package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
- package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
- package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
- package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
- package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
- package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
- package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
- package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
- package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
- package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
- package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
- package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
- package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
- package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
- package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
- package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
- package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
- package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
- package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
- package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
- package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
- package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
- package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
- package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
- package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
- package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
- package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
- package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
- package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.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-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
- package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
- package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
- package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
- package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
- package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
- package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
- package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
- package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
- package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
- package/dist/cli-bundle/chunks/{comments-MU2WMBUY.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-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
- package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
- package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
- package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
- package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
- package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
- package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
- package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
- package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
- package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
- package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
- package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
- package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
- package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
- package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
- package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
- package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
- package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
- package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
- package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
- package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
- package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
- 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-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
- package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.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-WLCQEKXS.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-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
- package/dist/cli-bundle/chunks/{history-repair-FY75IC26.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-GABSDSVD.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-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
- package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
- package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
- package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
- package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
- package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
- package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
- package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
- package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
- package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
- package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
- package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
- package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
- package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
- package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
- package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.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-KY6Z6WV7.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-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
- package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
- package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.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-YAT6FUUB.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-N7UGXYJC.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-MPANILQF.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-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
- package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
- package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
- package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
- package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
- package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
- package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
- package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
- package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
- package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
- package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
- package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
- 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-CA6K32RD.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-LANLLPVO.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-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
- package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
- package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
- package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
- package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
- package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
- package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
- package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
- package/dist/cli-bundle/main.js +986 -1500
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/config/nested-settings.js +89 -67
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/extensions/activation-summary-markdown.js +23 -12
- package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
- package/dist/core/extensions/extension-policy.d.ts +18 -3
- package/dist/core/extensions/extension-policy.js +116 -106
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/loader.js +310 -232
- package/dist/core/extensions/loader.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-format.js +523 -410
- package/dist/core/item/item-format.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/dist/mcp/server.js +387 -367
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +76 -45
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
- package/dist/sdk/compose.d.ts +4 -1
- package/dist/sdk/compose.js +181 -115
- package/dist/sdk/compose.js.map +1 -1
- package/docs/RELEASING.md +2 -3
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
- package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
- package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
- package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
- package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
- package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
- package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
- package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
- package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
- package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
- package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
- package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
- package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
- package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
- package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
- package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
- package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
- package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
- package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
- package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
- package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
- package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
- package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
- package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
- package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
- package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
- package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
- package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
- package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides CLI runtime support for Register Mutation.
|
|
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]="6581ddaf-4643-5ccc-9aff-1569d1759846")}catch(e){}}();
|
|
8
8
|
import { Option } from "commander";
|
|
9
9
|
import { resolveBodyFileContent } from "../core/io/body-file.js";
|
|
10
10
|
import { EXIT_CODE } from "../core/shared/constants.js";
|
|
@@ -399,6 +399,398 @@ function buildUpdateManyListOptions(options) {
|
|
|
399
399
|
includeBody: true,
|
|
400
400
|
};
|
|
401
401
|
}
|
|
402
|
+
function pickStringOption(...candidates) {
|
|
403
|
+
for (const candidate of candidates) {
|
|
404
|
+
if (typeof candidate === "string") {
|
|
405
|
+
return candidate;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
return undefined;
|
|
409
|
+
}
|
|
410
|
+
function readOptionString(options, key) {
|
|
411
|
+
return typeof options[key] === "string" ? options[key] : undefined;
|
|
412
|
+
}
|
|
413
|
+
function stringArrayOption(value) {
|
|
414
|
+
if (Array.isArray(value)) {
|
|
415
|
+
return value;
|
|
416
|
+
}
|
|
417
|
+
if (typeof value === "string") {
|
|
418
|
+
return [value];
|
|
419
|
+
}
|
|
420
|
+
return undefined;
|
|
421
|
+
}
|
|
422
|
+
function resolveCreatePositionals(typeOrTitle, secondTitle, options) {
|
|
423
|
+
if (typeof secondTitle === "string" && secondTitle.length > 0) {
|
|
424
|
+
return { positionalType: typeOrTitle, positionalTitle: secondTitle };
|
|
425
|
+
}
|
|
426
|
+
if (typeof typeOrTitle !== "string" || typeOrTitle.length === 0) {
|
|
427
|
+
return { positionalType: undefined, positionalTitle: undefined };
|
|
428
|
+
}
|
|
429
|
+
const explicitTitleProvided = typeof options.title === "string" && options.title.trim().length > 0;
|
|
430
|
+
return explicitTitleProvided && options.type === undefined
|
|
431
|
+
? { positionalType: typeOrTitle, positionalTitle: undefined }
|
|
432
|
+
: { positionalType: undefined, positionalTitle: typeOrTitle };
|
|
433
|
+
}
|
|
434
|
+
function assertCreatePositionalTypeHasTitle(positionalType, positionalTitle, options) {
|
|
435
|
+
if (positionalType !== undefined ||
|
|
436
|
+
typeof positionalTitle !== "string" ||
|
|
437
|
+
positionalTitle.length === 0 ||
|
|
438
|
+
options.title !== undefined ||
|
|
439
|
+
options.type !== undefined ||
|
|
440
|
+
!BUILTIN_TYPE_NAME_LOOKUP.has(positionalTitle.trim().toLowerCase())) {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
const matchedType = positionalTitle.trim();
|
|
444
|
+
throw new PmCliError(`pm create needs a title — "${matchedType}" looks like an item type, not a title. Use either: pm create ${matchedType} "<title>" or pm create "<title>" --type ${matchedType}.`, EXIT_CODE.USAGE, {
|
|
445
|
+
code: "create_positional_type_without_title",
|
|
446
|
+
why: "Without this guard the single positional is used as the title and the type defaults to Task — so the command would silently create a Task literally titled \"" + matchedType + "\".",
|
|
447
|
+
examples: [
|
|
448
|
+
`pm create ${matchedType} "Wire up SSO for the agent harness"`,
|
|
449
|
+
`pm create "Wire up SSO for the agent harness" --type ${matchedType}`,
|
|
450
|
+
],
|
|
451
|
+
nextSteps: [
|
|
452
|
+
`Re-run with both type and title: pm create ${matchedType} "<title>"`,
|
|
453
|
+
],
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
async function runCreateAction(typeOrTitle, secondTitle, options, command) {
|
|
457
|
+
const globalOptions = getGlobalOptions(command);
|
|
458
|
+
const startedAt = Date.now();
|
|
459
|
+
const positionals = resolveCreatePositionals(typeOrTitle, secondTitle, options);
|
|
460
|
+
assertCreatePositionalTypeHasTitle(positionals.positionalType, positionals.positionalTitle, options);
|
|
461
|
+
if (typeof positionals.positionalType === "string" && positionals.positionalType.length > 0 && options.type === undefined) {
|
|
462
|
+
options.type = positionals.positionalType;
|
|
463
|
+
}
|
|
464
|
+
if (typeof positionals.positionalTitle === "string" && positionals.positionalTitle.length > 0 && options.title === undefined) {
|
|
465
|
+
options.title = positionals.positionalTitle;
|
|
466
|
+
}
|
|
467
|
+
if (typeof options.bodyFile === "string") {
|
|
468
|
+
options.body = await resolveBodyFileContent(options.bodyFile, options.body !== undefined ? String(options.body) : undefined);
|
|
469
|
+
delete options.bodyFile;
|
|
470
|
+
}
|
|
471
|
+
const normalized = normalizeCreateOptions(options, { requireType: false });
|
|
472
|
+
const { runCreate } = await import("./commands/create.js");
|
|
473
|
+
const result = await runCreate(normalized, globalOptions);
|
|
474
|
+
await invalidateSearchCachesForMutation(globalOptions, result);
|
|
475
|
+
printResult(result, globalOptions);
|
|
476
|
+
if (globalOptions.profile) {
|
|
477
|
+
printError(`profile:command=create took_ms=${Date.now() - startedAt}`);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
function buildCloseManyListOptions(options) {
|
|
481
|
+
return {
|
|
482
|
+
type: readOptionString(options, "filterType"),
|
|
483
|
+
tag: readOptionString(options, "filterTag"),
|
|
484
|
+
priority: readOptionString(options, "filterPriority"),
|
|
485
|
+
deadlineBefore: readOptionString(options, "filterDeadlineBefore"),
|
|
486
|
+
deadlineAfter: readOptionString(options, "filterDeadlineAfter"),
|
|
487
|
+
updatedAfter: readOptionString(options, "filterUpdatedAfter"),
|
|
488
|
+
updatedBefore: readOptionString(options, "filterUpdatedBefore"),
|
|
489
|
+
createdAfter: readOptionString(options, "filterCreatedAfter"),
|
|
490
|
+
createdBefore: readOptionString(options, "filterCreatedBefore"),
|
|
491
|
+
ids: readOptionString(options, "ids"),
|
|
492
|
+
assignee: readOptionString(options, "filterAssignee"),
|
|
493
|
+
assigneeFilter: pickStringOption(options.filterAssigneeFilter, options.filterAssignee_filter),
|
|
494
|
+
parent: readOptionString(options, "filterParent"),
|
|
495
|
+
sprint: readOptionString(options, "filterSprint"),
|
|
496
|
+
release: readOptionString(options, "filterRelease"),
|
|
497
|
+
...mapBulkContentAndGovernanceFilters(options),
|
|
498
|
+
limit: readOptionString(options, "limit"),
|
|
499
|
+
offset: readOptionString(options, "offset"),
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
async function runCloseManyAction(options, command) {
|
|
503
|
+
const globalOptions = getGlobalOptions(command);
|
|
504
|
+
const startedAt = Date.now();
|
|
505
|
+
const { runCloseMany } = await import("./commands/close-many.js");
|
|
506
|
+
const result = await runCloseMany({
|
|
507
|
+
status: readOptionString(options, "filterStatus"),
|
|
508
|
+
list: buildCloseManyListOptions(options),
|
|
509
|
+
reason: readOptionString(options, "reason"),
|
|
510
|
+
resolution: readOptionString(options, "resolution"),
|
|
511
|
+
expectedResult: pickStringOption(options.expectedResult, options.expected_result, options.expected),
|
|
512
|
+
actualResult: pickStringOption(options.actualResult, options.actual_result, options.actual),
|
|
513
|
+
validateClose: options.validateClose === true
|
|
514
|
+
? "warn"
|
|
515
|
+
: readOptionString(options, "validateClose"),
|
|
516
|
+
author: readOptionString(options, "author"),
|
|
517
|
+
message: readOptionString(options, "message"),
|
|
518
|
+
force: Boolean(options.force),
|
|
519
|
+
dryRun: options.dryRun === true ? true : undefined,
|
|
520
|
+
rollback: readOptionString(options, "rollback"),
|
|
521
|
+
checkpoint: options.checkpoint === false ? false : undefined,
|
|
522
|
+
}, globalOptions);
|
|
523
|
+
await invalidateSearchCachesForMutation(globalOptions, result);
|
|
524
|
+
printResult(result, globalOptions);
|
|
525
|
+
if (globalOptions.profile) {
|
|
526
|
+
printError(`profile:command=close-many took_ms=${Date.now() - startedAt}`);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
function normalizePlanAliases(options) {
|
|
530
|
+
const planOptions = { ...options };
|
|
531
|
+
const aliasPairs = [
|
|
532
|
+
["blocked_by", "blockedBy"],
|
|
533
|
+
["resume_context", "resumeContext"],
|
|
534
|
+
["from_search", "fromSearch"],
|
|
535
|
+
["step_title", "stepTitle"],
|
|
536
|
+
["step_body", "stepBody"],
|
|
537
|
+
["step_owner", "stepOwner"],
|
|
538
|
+
["step_status", "stepStatus"],
|
|
539
|
+
["step_evidence", "stepEvidence"],
|
|
540
|
+
["step_blocked_reason", "stepBlockedReason"],
|
|
541
|
+
["step_replacement", "stepReplacement"],
|
|
542
|
+
["depends_on", "dependsOn"],
|
|
543
|
+
["link_kind", "linkKind"],
|
|
544
|
+
["link_note", "linkNote"],
|
|
545
|
+
["promote_to_item_dep", "promoteToItemDep"],
|
|
546
|
+
["allow_multiple_active", "allowMultipleActive"],
|
|
547
|
+
["decision_text", "decisionText"],
|
|
548
|
+
["decision_rationale", "decisionRationale"],
|
|
549
|
+
["decision_evidence", "decisionEvidence"],
|
|
550
|
+
["discovery_text", "discoveryText"],
|
|
551
|
+
["validation_text", "validationText"],
|
|
552
|
+
["validation_command", "validationCommand"],
|
|
553
|
+
["validation_expected", "validationExpected"],
|
|
554
|
+
["materialize_type", "materializeType"],
|
|
555
|
+
["materialize_parent", "materializeParent"],
|
|
556
|
+
["materialize_tags", "materializeTags"],
|
|
557
|
+
];
|
|
558
|
+
for (const [snake, camel] of aliasPairs) {
|
|
559
|
+
if (planOptions[snake] !== undefined && planOptions[camel] === undefined) {
|
|
560
|
+
planOptions[camel] = planOptions[snake];
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return planOptions;
|
|
564
|
+
}
|
|
565
|
+
function assertKnownPlanSubcommand(subcommand, normalized, allowed) {
|
|
566
|
+
if (!normalized) {
|
|
567
|
+
throw new PmCliError(`pm plan requires a subcommand. Allowed: ${allowed.join(", ")}`, EXIT_CODE.USAGE, {
|
|
568
|
+
code: "missing_required_argument",
|
|
569
|
+
examples: [
|
|
570
|
+
'pm plan create --title "Refactor lock retry"',
|
|
571
|
+
"pm plan show pm-a1b2 --depth standard",
|
|
572
|
+
'pm plan add-step pm-a1b2 --step-title "Read lock.ts"',
|
|
573
|
+
],
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
if (allowed.includes(normalized)) {
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
const examples = normalized === "list" || normalized === "ls" ? ['pm list --type Plan', 'pm list-all --type Plan'] : undefined;
|
|
580
|
+
throw new PmCliError(`Unknown pm plan subcommand "${subcommand}". Allowed: ${allowed.join(", ")}`, EXIT_CODE.USAGE, examples ? { code: "unknown_subcommand", examples } : undefined);
|
|
581
|
+
}
|
|
582
|
+
function parsePlanReorderTo(normalizedSubcommand, reorderToken) {
|
|
583
|
+
if (normalizedSubcommand !== "reorder-step" || typeof reorderToken !== "string") {
|
|
584
|
+
return undefined;
|
|
585
|
+
}
|
|
586
|
+
const parsed = Number.parseInt(reorderToken, 10);
|
|
587
|
+
if (!Number.isFinite(parsed)) {
|
|
588
|
+
throw new PmCliError(`reorder-step requires an integer new order, got "${reorderToken}"`, EXIT_CODE.USAGE);
|
|
589
|
+
}
|
|
590
|
+
return parsed;
|
|
591
|
+
}
|
|
592
|
+
async function runPlanAction(subcommand, id, stepRef, reorderToken, options, command) {
|
|
593
|
+
const globalOptions = getGlobalOptions(command);
|
|
594
|
+
const startedAt = Date.now();
|
|
595
|
+
const { runPlan, PLAN_SUBCOMMANDS } = await import("./commands/plan.js");
|
|
596
|
+
const normalizedSubcommand = (subcommand ?? "").trim().toLowerCase();
|
|
597
|
+
assertKnownPlanSubcommand(subcommand, normalizedSubcommand, PLAN_SUBCOMMANDS);
|
|
598
|
+
const planOptions = normalizePlanAliases(options);
|
|
599
|
+
const reorderTo = parsePlanReorderTo(normalizedSubcommand, reorderToken);
|
|
600
|
+
const planId = normalizedSubcommand === "create" && typeof id === "string" && id.length > 0 && planOptions.title === undefined
|
|
601
|
+
? undefined
|
|
602
|
+
: id;
|
|
603
|
+
if (planId === undefined && typeof id === "string" && id.length > 0) {
|
|
604
|
+
planOptions.title = id;
|
|
605
|
+
}
|
|
606
|
+
const result = await runPlan({
|
|
607
|
+
subcommand: normalizedSubcommand,
|
|
608
|
+
id: planId,
|
|
609
|
+
stepRef,
|
|
610
|
+
reorderTo,
|
|
611
|
+
options: planOptions,
|
|
612
|
+
global: globalOptions,
|
|
613
|
+
});
|
|
614
|
+
await invalidateSearchCachesForMutation(globalOptions, result);
|
|
615
|
+
printResult(result, globalOptions);
|
|
616
|
+
if (globalOptions.profile) {
|
|
617
|
+
printError(`profile:command=plan took_ms=${Date.now() - startedAt}`);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
function parseNonNegativeIntFlag(raw, flag) {
|
|
621
|
+
if (typeof raw !== "string") {
|
|
622
|
+
return undefined;
|
|
623
|
+
}
|
|
624
|
+
if (!/^\d+$/.test(raw.trim())) {
|
|
625
|
+
throw new PmCliError(`history-compact ${flag} must be a non-negative integer.`, EXIT_CODE.USAGE);
|
|
626
|
+
}
|
|
627
|
+
return Number.parseInt(raw, 10);
|
|
628
|
+
}
|
|
629
|
+
async function runHistoryCompactAction(id, options, command) {
|
|
630
|
+
const globalOptions = getGlobalOptions(command);
|
|
631
|
+
const startedAt = Date.now();
|
|
632
|
+
const { runHistoryCompact, runHistoryCompactBulk, assertHistoryCompactTarget } = await import("./commands/history-compact.js");
|
|
633
|
+
const ids = typeof options.ids === "string" ? splitCommaList(options.ids) : undefined;
|
|
634
|
+
const allOver = parseNonNegativeIntFlag(options.allOver, "--all-over");
|
|
635
|
+
const minEntries = parseNonNegativeIntFlag(options.minEntries, "--min-entries");
|
|
636
|
+
if (options.closed === true && options.allStreams === true) {
|
|
637
|
+
throw new PmCliError("history-compact: --closed and --all-streams are mutually exclusive; pick one lifecycle scope.", EXIT_CODE.USAGE);
|
|
638
|
+
}
|
|
639
|
+
const scope = options.closed === true ? "closed" : options.allStreams === true ? "all-streams" : undefined;
|
|
640
|
+
const isBulk = ids !== undefined || allOver !== undefined || scope !== undefined;
|
|
641
|
+
if (isBulk && typeof options.before === "string") {
|
|
642
|
+
throw new PmCliError("history-compact: --before applies only in single-id mode (bulk mode always compacts full streams).", EXIT_CODE.USAGE);
|
|
643
|
+
}
|
|
644
|
+
assertHistoryCompactTarget(id, { ids, allOver, scope });
|
|
645
|
+
if (id === undefined) {
|
|
646
|
+
const result = await runHistoryCompactBulk({
|
|
647
|
+
ids,
|
|
648
|
+
scope,
|
|
649
|
+
allOver,
|
|
650
|
+
minEntries,
|
|
651
|
+
dryRun: options.dryRun === true,
|
|
652
|
+
author: readOptionString(options, "author"),
|
|
653
|
+
message: readOptionString(options, "message"),
|
|
654
|
+
force: Boolean(options.force),
|
|
655
|
+
}, globalOptions);
|
|
656
|
+
printResult(result, globalOptions);
|
|
657
|
+
if (result.totals.items_errored > 0) {
|
|
658
|
+
process.exitCode = EXIT_CODE.GENERIC_FAILURE;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
else {
|
|
662
|
+
const result = await runHistoryCompact(id, {
|
|
663
|
+
before: readOptionString(options, "before"),
|
|
664
|
+
dryRun: options.dryRun === true,
|
|
665
|
+
author: readOptionString(options, "author"),
|
|
666
|
+
message: readOptionString(options, "message"),
|
|
667
|
+
force: Boolean(options.force),
|
|
668
|
+
}, globalOptions);
|
|
669
|
+
printResult(result, globalOptions);
|
|
670
|
+
}
|
|
671
|
+
if (globalOptions.profile) {
|
|
672
|
+
printError(`profile:command=history-compact took_ms=${Date.now() - startedAt}`);
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
function splitCollectedCommaList(raw) {
|
|
676
|
+
if (!Array.isArray(raw)) {
|
|
677
|
+
return undefined;
|
|
678
|
+
}
|
|
679
|
+
return raw
|
|
680
|
+
.flatMap((value) => value.split(","))
|
|
681
|
+
.map((value) => value.trim())
|
|
682
|
+
.filter((value) => value.length > 0);
|
|
683
|
+
}
|
|
684
|
+
async function runSchemaAction(subcommand, name, options, command) {
|
|
685
|
+
const globalOptions = getGlobalOptions(command);
|
|
686
|
+
const startedAt = Date.now();
|
|
687
|
+
const schemaModule = await import("./commands/schema.js");
|
|
688
|
+
const { SCHEMA_SUBCOMMANDS } = schemaModule;
|
|
689
|
+
let normalizedSubcommand = (subcommand ?? "").trim().toLowerCase();
|
|
690
|
+
let typeName = name;
|
|
691
|
+
assertSchemaSubcommandPresent(normalizedSubcommand, SCHEMA_SUBCOMMANDS);
|
|
692
|
+
if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand) &&
|
|
693
|
+
typeName === undefined &&
|
|
694
|
+
!looksLikeSchemaSubcommandTypo(normalizedSubcommand)) {
|
|
695
|
+
typeName = subcommand;
|
|
696
|
+
normalizedSubcommand = "add-type";
|
|
697
|
+
}
|
|
698
|
+
if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand)) {
|
|
699
|
+
throw new PmCliError(`Unknown pm schema subcommand "${subcommand}". Allowed: ${SCHEMA_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, { code: "unknown_subcommand" });
|
|
700
|
+
}
|
|
701
|
+
const result = await dispatchSchemaSubcommand(schemaModule, {
|
|
702
|
+
normalizedSubcommand,
|
|
703
|
+
typeName,
|
|
704
|
+
options,
|
|
705
|
+
aliases: stringArrayOption(options.alias),
|
|
706
|
+
roles: stringArrayOption(options.role),
|
|
707
|
+
commands: splitCollectedCommaList(options.commands),
|
|
708
|
+
requiredTypes: splitCollectedCommaList(options.requiredTypes),
|
|
709
|
+
defaultStatus: pickStringOption(options.defaultStatus, options.default_status),
|
|
710
|
+
order: parseSchemaOrderOption(options.order),
|
|
711
|
+
minCount: parseSchemaOrderOption(options.minCount),
|
|
712
|
+
author: readOptionString(options, "author"),
|
|
713
|
+
force: Boolean(options.force),
|
|
714
|
+
description: readOptionString(options, "description"),
|
|
715
|
+
globalOptions,
|
|
716
|
+
});
|
|
717
|
+
if (globalOptions.json === true || globalOptions.defaultOutputFormat === "json") {
|
|
718
|
+
printResult(result, globalOptions);
|
|
719
|
+
}
|
|
720
|
+
else if (!globalOptions.quiet) {
|
|
721
|
+
renderSchemaResultHuman(schemaModule, result);
|
|
722
|
+
}
|
|
723
|
+
if (globalOptions.profile) {
|
|
724
|
+
printError(`profile:command=schema took_ms=${Date.now() - startedAt}`);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
function assertSchemaSubcommandPresent(normalizedSubcommand, allowed) {
|
|
728
|
+
if (normalizedSubcommand) {
|
|
729
|
+
return;
|
|
730
|
+
}
|
|
731
|
+
throw new PmCliError(`pm schema requires a subcommand. Allowed: ${allowed.join(", ")}`, EXIT_CODE.USAGE, {
|
|
732
|
+
code: "missing_required_argument",
|
|
733
|
+
examples: [
|
|
734
|
+
"pm schema list",
|
|
735
|
+
"pm schema show Task",
|
|
736
|
+
"pm schema show-status open",
|
|
737
|
+
'pm schema add-type Spike --description "Time-boxed investigation" --default-status open',
|
|
738
|
+
"pm schema remove-type Spike",
|
|
739
|
+
"pm schema add-status review --role active --alias in_review",
|
|
740
|
+
"pm schema remove-status review",
|
|
741
|
+
"pm schema add-field severity_level --type string --commands create,update",
|
|
742
|
+
"pm schema list-fields",
|
|
743
|
+
"pm schema apply-preset agile",
|
|
744
|
+
"pm schema add-type --infer --min-count 10",
|
|
745
|
+
],
|
|
746
|
+
});
|
|
747
|
+
}
|
|
748
|
+
function resolveCommentSources(text, options) {
|
|
749
|
+
const editIndex = typeof options.edit === "number" ? options.edit : undefined;
|
|
750
|
+
const deleteIndex = typeof options.delete === "number" ? options.delete : undefined;
|
|
751
|
+
const addFromOption = readOptionString(options, "add");
|
|
752
|
+
const addFromPositional = typeof text === "string" ? text : undefined;
|
|
753
|
+
const readFromStdin = options.stdin === true;
|
|
754
|
+
const readFromFile = readOptionString(options, "file");
|
|
755
|
+
const sourceCount = Number(addFromOption !== undefined) +
|
|
756
|
+
Number(addFromPositional !== undefined) +
|
|
757
|
+
Number(readFromStdin) +
|
|
758
|
+
Number(readFromFile !== undefined);
|
|
759
|
+
if (sourceCount > 1) {
|
|
760
|
+
if (addFromOption !== undefined && addFromPositional !== undefined && !readFromStdin && readFromFile === undefined) {
|
|
761
|
+
throw new PmCliError("Specify comment text either as positional [text] or with --add, not both", EXIT_CODE.USAGE);
|
|
762
|
+
}
|
|
763
|
+
throw new PmCliError("Specify comment text with exactly one source: positional [text], --add, --stdin, or --file", EXIT_CODE.USAGE);
|
|
764
|
+
}
|
|
765
|
+
const add = addFromOption ?? addFromPositional;
|
|
766
|
+
const isMutation = typeof add === "string" || readFromStdin || readFromFile !== undefined || editIndex !== undefined || deleteIndex !== undefined;
|
|
767
|
+
return { add, readFromStdin, readFromFile, editIndex, deleteIndex, isMutation };
|
|
768
|
+
}
|
|
769
|
+
async function runCommentsAction(id, text, options, command) {
|
|
770
|
+
const globalOptions = getGlobalOptions(command);
|
|
771
|
+
const startedAt = Date.now();
|
|
772
|
+
const sources = resolveCommentSources(text, options);
|
|
773
|
+
const { runComments } = await import("./commands/comments.js");
|
|
774
|
+
const result = await runComments(id, {
|
|
775
|
+
add: sources.add,
|
|
776
|
+
stdin: sources.readFromStdin,
|
|
777
|
+
file: sources.readFromFile,
|
|
778
|
+
edit: sources.editIndex,
|
|
779
|
+
delete: sources.deleteIndex,
|
|
780
|
+
limit: readOptionString(options, "limit"),
|
|
781
|
+
author: readOptionString(options, "author"),
|
|
782
|
+
message: readOptionString(options, "message"),
|
|
783
|
+
allowAuditComment: Boolean(options.allowAuditComment),
|
|
784
|
+
force: Boolean(options.force),
|
|
785
|
+
}, globalOptions);
|
|
786
|
+
if (sources.isMutation) {
|
|
787
|
+
await invalidateSearchCachesForMutation(globalOptions, result);
|
|
788
|
+
}
|
|
789
|
+
printResult(result, globalOptions);
|
|
790
|
+
if (globalOptions.profile) {
|
|
791
|
+
printError(`profile:command=comments took_ms=${Date.now() - startedAt}`);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
402
794
|
/**
|
|
403
795
|
* Implements register mutation commands for the public runtime surface of this module.
|
|
404
796
|
*/
|
|
@@ -421,75 +813,7 @@ export function registerMutationCommands(program) {
|
|
|
421
813
|
.option("--clear-reminders", "Clear reminders")
|
|
422
814
|
.option("--clear-events", "Clear events")
|
|
423
815
|
.option("--clear-type-options", "Clear type options")
|
|
424
|
-
.action(
|
|
425
|
-
const globalOptions = getGlobalOptions(command);
|
|
426
|
-
const startedAt = Date.now();
|
|
427
|
-
// Support both `pm create "<title>"` and the natural subcommand-style
|
|
428
|
-
// `pm create <type> "<title>"` so agents are never blocked by argument
|
|
429
|
-
// count. When two positionals are given, the first is the item type.
|
|
430
|
-
let positionalType;
|
|
431
|
-
let positionalTitle;
|
|
432
|
-
if (typeof secondTitle === "string" && secondTitle.length > 0) {
|
|
433
|
-
positionalType = typeOrTitle;
|
|
434
|
-
positionalTitle = secondTitle;
|
|
435
|
-
}
|
|
436
|
-
else if (typeof typeOrTitle === "string" && typeOrTitle.length > 0) {
|
|
437
|
-
// Honor `pm create <type> --title ...` by treating the lone positional as
|
|
438
|
-
// type when an explicit --title is already present.
|
|
439
|
-
const explicitTitleProvided = typeof options.title === "string" && options.title.trim().length > 0;
|
|
440
|
-
if (explicitTitleProvided && options.type === undefined) {
|
|
441
|
-
positionalType = typeOrTitle;
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
positionalTitle = typeOrTitle;
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
// pm-edge #1 (2026-05-28): when the sole positional matches a known
|
|
448
|
-
// item type AND no --title was supplied, refuse early instead of
|
|
449
|
-
// silently creating a Task titled with the type name (e.g. `pm create
|
|
450
|
-
// Epic` would previously produce a Task literally titled "Epic"). The
|
|
451
|
-
// guard fires only for the ambiguous single-positional case so the
|
|
452
|
-
// documented `pm create <type> <title>` flow stays a never-block.
|
|
453
|
-
if (positionalType === undefined &&
|
|
454
|
-
typeof positionalTitle === "string" &&
|
|
455
|
-
positionalTitle.length > 0 &&
|
|
456
|
-
options.title === undefined &&
|
|
457
|
-
options.type === undefined &&
|
|
458
|
-
BUILTIN_TYPE_NAME_LOOKUP.has(positionalTitle.trim().toLowerCase())) {
|
|
459
|
-
const matchedType = positionalTitle.trim();
|
|
460
|
-
throw new PmCliError(`pm create needs a title — "${matchedType}" looks like an item type, not a title. Use either: pm create ${matchedType} "<title>" or pm create "<title>" --type ${matchedType}.`, EXIT_CODE.USAGE, {
|
|
461
|
-
code: "create_positional_type_without_title",
|
|
462
|
-
why: "Without this guard the single positional is used as the title and the type defaults to Task — so the command would silently create a Task literally titled \"" + matchedType + "\".",
|
|
463
|
-
examples: [
|
|
464
|
-
`pm create ${matchedType} "Wire up SSO for the agent harness"`,
|
|
465
|
-
`pm create "Wire up SSO for the agent harness" --type ${matchedType}`,
|
|
466
|
-
],
|
|
467
|
-
nextSteps: [
|
|
468
|
-
`Re-run with both type and title: pm create ${matchedType} "<title>"`,
|
|
469
|
-
],
|
|
470
|
-
});
|
|
471
|
-
}
|
|
472
|
-
if (typeof positionalType === "string" && positionalType.length > 0 && options.type === undefined) {
|
|
473
|
-
options.type = positionalType;
|
|
474
|
-
}
|
|
475
|
-
if (typeof positionalTitle === "string" && positionalTitle.length > 0 && options.title === undefined) {
|
|
476
|
-
options.title = positionalTitle;
|
|
477
|
-
}
|
|
478
|
-
// GH-214: resolve --body-file into the existing body field before
|
|
479
|
-
// normalization so the rest of create is unchanged. CLI-only input alias.
|
|
480
|
-
if (typeof options.bodyFile === "string") {
|
|
481
|
-
options.body = await resolveBodyFileContent(options.bodyFile, options.body !== undefined ? String(options.body) : undefined);
|
|
482
|
-
delete options.bodyFile;
|
|
483
|
-
}
|
|
484
|
-
const normalized = normalizeCreateOptions(options, { requireType: false });
|
|
485
|
-
const { runCreate } = await import("./commands/create.js");
|
|
486
|
-
const result = await runCreate(normalized, globalOptions);
|
|
487
|
-
await invalidateSearchCachesForMutation(globalOptions, result);
|
|
488
|
-
printResult(result, globalOptions);
|
|
489
|
-
if (globalOptions.profile) {
|
|
490
|
-
printError(`profile:command=create took_ms=${Date.now() - startedAt}`);
|
|
491
|
-
}
|
|
492
|
-
});
|
|
816
|
+
.action(runCreateAction);
|
|
493
817
|
program
|
|
494
818
|
.command("copy")
|
|
495
819
|
.argument("<id>", "Source item id")
|
|
@@ -822,62 +1146,7 @@ export function registerMutationCommands(program) {
|
|
|
822
1146
|
addHiddenOption(closeManyCommand, "--filter-assignee_filter <value>", "Alias for --filter-assignee-filter", false);
|
|
823
1147
|
addHiddenOption(closeManyCommand, "--expected_result <value>", "Alias for --expected-result", false);
|
|
824
1148
|
addHiddenOption(closeManyCommand, "--actual_result <value>", "Alias for --actual-result", false);
|
|
825
|
-
closeManyCommand.action(
|
|
826
|
-
const globalOptions = getGlobalOptions(command);
|
|
827
|
-
const startedAt = Date.now();
|
|
828
|
-
const pickString = (...candidates) => {
|
|
829
|
-
for (const candidate of candidates) {
|
|
830
|
-
if (typeof candidate === "string") {
|
|
831
|
-
return candidate;
|
|
832
|
-
}
|
|
833
|
-
}
|
|
834
|
-
return undefined;
|
|
835
|
-
};
|
|
836
|
-
const { runCloseMany } = await import("./commands/close-many.js");
|
|
837
|
-
const result = await runCloseMany({
|
|
838
|
-
status: typeof options.filterStatus === "string" ? options.filterStatus : undefined,
|
|
839
|
-
list: {
|
|
840
|
-
type: typeof options.filterType === "string" ? options.filterType : undefined,
|
|
841
|
-
tag: typeof options.filterTag === "string" ? options.filterTag : undefined,
|
|
842
|
-
priority: typeof options.filterPriority === "string" ? options.filterPriority : undefined,
|
|
843
|
-
deadlineBefore: typeof options.filterDeadlineBefore === "string" ? options.filterDeadlineBefore : undefined,
|
|
844
|
-
deadlineAfter: typeof options.filterDeadlineAfter === "string" ? options.filterDeadlineAfter : undefined,
|
|
845
|
-
updatedAfter: typeof options.filterUpdatedAfter === "string" ? options.filterUpdatedAfter : undefined,
|
|
846
|
-
updatedBefore: typeof options.filterUpdatedBefore === "string" ? options.filterUpdatedBefore : undefined,
|
|
847
|
-
createdAfter: typeof options.filterCreatedAfter === "string" ? options.filterCreatedAfter : undefined,
|
|
848
|
-
createdBefore: typeof options.filterCreatedBefore === "string" ? options.filterCreatedBefore : undefined,
|
|
849
|
-
ids: typeof options.ids === "string" ? options.ids : undefined,
|
|
850
|
-
assignee: typeof options.filterAssignee === "string" ? options.filterAssignee : undefined,
|
|
851
|
-
assigneeFilter: pickString(options.filterAssigneeFilter, options.filterAssignee_filter),
|
|
852
|
-
parent: typeof options.filterParent === "string" ? options.filterParent : undefined,
|
|
853
|
-
sprint: typeof options.filterSprint === "string" ? options.filterSprint : undefined,
|
|
854
|
-
release: typeof options.filterRelease === "string" ? options.filterRelease : undefined,
|
|
855
|
-
...mapBulkContentAndGovernanceFilters(options),
|
|
856
|
-
limit: typeof options.limit === "string" ? options.limit : undefined,
|
|
857
|
-
offset: typeof options.offset === "string" ? options.offset : undefined,
|
|
858
|
-
},
|
|
859
|
-
reason: typeof options.reason === "string" ? options.reason : undefined,
|
|
860
|
-
resolution: typeof options.resolution === "string" ? options.resolution : undefined,
|
|
861
|
-
expectedResult: pickString(options.expectedResult, options.expected_result, options.expected),
|
|
862
|
-
actualResult: pickString(options.actualResult, options.actual_result, options.actual),
|
|
863
|
-
validateClose: options.validateClose === true
|
|
864
|
-
? "warn"
|
|
865
|
-
: typeof options.validateClose === "string"
|
|
866
|
-
? options.validateClose
|
|
867
|
-
: undefined,
|
|
868
|
-
author: typeof options.author === "string" ? options.author : undefined,
|
|
869
|
-
message: typeof options.message === "string" ? options.message : undefined,
|
|
870
|
-
force: Boolean(options.force),
|
|
871
|
-
dryRun: options.dryRun === true ? true : undefined,
|
|
872
|
-
rollback: typeof options.rollback === "string" ? options.rollback : undefined,
|
|
873
|
-
checkpoint: options.checkpoint === false ? false : undefined,
|
|
874
|
-
}, globalOptions);
|
|
875
|
-
await invalidateSearchCachesForMutation(globalOptions, result);
|
|
876
|
-
printResult(result, globalOptions);
|
|
877
|
-
if (globalOptions.profile) {
|
|
878
|
-
printError(`profile:command=close-many took_ms=${Date.now() - startedAt}`);
|
|
879
|
-
}
|
|
880
|
-
});
|
|
1149
|
+
closeManyCommand.action(runCloseManyAction);
|
|
881
1150
|
program
|
|
882
1151
|
.command("delete")
|
|
883
1152
|
.argument("<id>", "Item id")
|
|
@@ -1063,95 +1332,7 @@ export function registerMutationCommands(program) {
|
|
|
1063
1332
|
]) {
|
|
1064
1333
|
addHiddenOption(planCommand, flags, description, true);
|
|
1065
1334
|
}
|
|
1066
|
-
planCommand
|
|
1067
|
-
.action(async (subcommand, id, stepRef, reorderToken, options, command) => {
|
|
1068
|
-
const globalOptions = getGlobalOptions(command);
|
|
1069
|
-
const startedAt = Date.now();
|
|
1070
|
-
const { runPlan, PLAN_SUBCOMMANDS } = await import("./commands/plan.js");
|
|
1071
|
-
const normalizedSubcommand = (subcommand ?? "").trim().toLowerCase();
|
|
1072
|
-
if (!normalizedSubcommand) {
|
|
1073
|
-
throw new PmCliError(`pm plan requires a subcommand. Allowed: ${PLAN_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, {
|
|
1074
|
-
code: "missing_required_argument",
|
|
1075
|
-
examples: [
|
|
1076
|
-
'pm plan create --title "Refactor lock retry"',
|
|
1077
|
-
"pm plan show pm-a1b2 --depth standard",
|
|
1078
|
-
'pm plan add-step pm-a1b2 --step-title "Read lock.ts"',
|
|
1079
|
-
],
|
|
1080
|
-
});
|
|
1081
|
-
}
|
|
1082
|
-
if (!PLAN_SUBCOMMANDS.includes(normalizedSubcommand)) {
|
|
1083
|
-
const didYouMean = normalizedSubcommand === "list" || normalizedSubcommand === "ls"
|
|
1084
|
-
? ['pm list --type Plan', 'pm list-all --type Plan']
|
|
1085
|
-
: undefined;
|
|
1086
|
-
throw new PmCliError(`Unknown pm plan subcommand "${subcommand}". Allowed: ${PLAN_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, didYouMean ? { code: "unknown_subcommand", examples: didYouMean } : undefined);
|
|
1087
|
-
}
|
|
1088
|
-
const planOptions = { ...options };
|
|
1089
|
-
// Normalize alternate-snake/camel aliases that Commander parses as different keys.
|
|
1090
|
-
const aliasPairs = [
|
|
1091
|
-
["blocked_by", "blockedBy"],
|
|
1092
|
-
["resume_context", "resumeContext"],
|
|
1093
|
-
["from_search", "fromSearch"],
|
|
1094
|
-
// pm-6mit: "step" is no longer folded into stepTitle here — it is a
|
|
1095
|
-
// first-class repeatable option normalized inside runPlan (create
|
|
1096
|
-
// accumulates ordered steps; other subcommands accept a single value
|
|
1097
|
-
// as a stepTitle alias).
|
|
1098
|
-
["step_title", "stepTitle"],
|
|
1099
|
-
["step_body", "stepBody"],
|
|
1100
|
-
["step_owner", "stepOwner"],
|
|
1101
|
-
["step_status", "stepStatus"],
|
|
1102
|
-
["step_evidence", "stepEvidence"],
|
|
1103
|
-
["step_blocked_reason", "stepBlockedReason"],
|
|
1104
|
-
["step_replacement", "stepReplacement"],
|
|
1105
|
-
["depends_on", "dependsOn"],
|
|
1106
|
-
["link_kind", "linkKind"],
|
|
1107
|
-
["link_note", "linkNote"],
|
|
1108
|
-
["promote_to_item_dep", "promoteToItemDep"],
|
|
1109
|
-
["allow_multiple_active", "allowMultipleActive"],
|
|
1110
|
-
["decision_text", "decisionText"],
|
|
1111
|
-
["decision_rationale", "decisionRationale"],
|
|
1112
|
-
["decision_evidence", "decisionEvidence"],
|
|
1113
|
-
["discovery_text", "discoveryText"],
|
|
1114
|
-
["validation_text", "validationText"],
|
|
1115
|
-
["validation_command", "validationCommand"],
|
|
1116
|
-
["validation_expected", "validationExpected"],
|
|
1117
|
-
["materialize_type", "materializeType"],
|
|
1118
|
-
["materialize_parent", "materializeParent"],
|
|
1119
|
-
["materialize_tags", "materializeTags"],
|
|
1120
|
-
];
|
|
1121
|
-
for (const [snake, camel] of aliasPairs) {
|
|
1122
|
-
if (planOptions[snake] !== undefined && planOptions[camel] === undefined) {
|
|
1123
|
-
planOptions[camel] = planOptions[snake];
|
|
1124
|
-
}
|
|
1125
|
-
}
|
|
1126
|
-
let reorderTo;
|
|
1127
|
-
if (normalizedSubcommand === "reorder-step" && typeof reorderToken === "string") {
|
|
1128
|
-
const parsed = Number.parseInt(reorderToken, 10);
|
|
1129
|
-
if (!Number.isFinite(parsed)) {
|
|
1130
|
-
throw new PmCliError(`reorder-step requires an integer new order, got "${reorderToken}"`, EXIT_CODE.USAGE);
|
|
1131
|
-
}
|
|
1132
|
-
reorderTo = parsed;
|
|
1133
|
-
}
|
|
1134
|
-
// Allow positional title for `pm plan create "Title"` (mirrors pm create UX).
|
|
1135
|
-
// Plan create never takes an id positional; the second token is the title.
|
|
1136
|
-
let planId = id;
|
|
1137
|
-
if (normalizedSubcommand === "create" && typeof id === "string" && id.length > 0 && planOptions.title === undefined) {
|
|
1138
|
-
planOptions.title = id;
|
|
1139
|
-
planId = undefined;
|
|
1140
|
-
}
|
|
1141
|
-
const result = await runPlan({
|
|
1142
|
-
subcommand: normalizedSubcommand,
|
|
1143
|
-
id: planId,
|
|
1144
|
-
stepRef,
|
|
1145
|
-
reorderTo,
|
|
1146
|
-
options: planOptions,
|
|
1147
|
-
global: globalOptions,
|
|
1148
|
-
});
|
|
1149
|
-
await invalidateSearchCachesForMutation(globalOptions, result);
|
|
1150
|
-
printResult(result, globalOptions);
|
|
1151
|
-
if (globalOptions.profile) {
|
|
1152
|
-
printError(`profile:command=plan took_ms=${Date.now() - startedAt}`);
|
|
1153
|
-
}
|
|
1154
|
-
});
|
|
1335
|
+
planCommand.action(runPlanAction);
|
|
1155
1336
|
void planCommand;
|
|
1156
1337
|
program
|
|
1157
1338
|
.command("history-redact")
|
|
@@ -1241,65 +1422,7 @@ export function registerMutationCommands(program) {
|
|
|
1241
1422
|
.option("--message <value>", "Audit history message for the compaction marker entry")
|
|
1242
1423
|
.option("--force", "Force ownership/lock override")
|
|
1243
1424
|
.description("Compact item history streams into a synthetic baseline plus retained tail entries. Pass an item id for one stream, or a bulk selector (--ids/--all-over/--closed/--all-streams) to compact many.")
|
|
1244
|
-
.action(
|
|
1245
|
-
const globalOptions = getGlobalOptions(command);
|
|
1246
|
-
const startedAt = Date.now();
|
|
1247
|
-
const { runHistoryCompact, runHistoryCompactBulk, assertHistoryCompactTarget } = await import("./commands/history-compact.js");
|
|
1248
|
-
const parseNonNegativeIntFlag = (raw, flag) => {
|
|
1249
|
-
if (typeof raw !== "string") {
|
|
1250
|
-
return undefined;
|
|
1251
|
-
}
|
|
1252
|
-
// Strict: reject "10abc"/"3.5"/"-3" that Number.parseInt would silently truncate.
|
|
1253
|
-
if (!/^\d+$/.test(raw.trim())) {
|
|
1254
|
-
throw new PmCliError(`history-compact ${flag} must be a non-negative integer.`, EXIT_CODE.USAGE);
|
|
1255
|
-
}
|
|
1256
|
-
return Number.parseInt(raw, 10);
|
|
1257
|
-
};
|
|
1258
|
-
const ids = typeof options.ids === "string" ? splitCommaList(options.ids) : undefined;
|
|
1259
|
-
const allOver = parseNonNegativeIntFlag(options.allOver, "--all-over");
|
|
1260
|
-
const minEntries = parseNonNegativeIntFlag(options.minEntries, "--min-entries");
|
|
1261
|
-
if (options.closed === true && options.allStreams === true) {
|
|
1262
|
-
throw new PmCliError("history-compact: --closed and --all-streams are mutually exclusive; pick one lifecycle scope.", EXIT_CODE.USAGE);
|
|
1263
|
-
}
|
|
1264
|
-
const scope = options.closed === true ? "closed" : options.allStreams === true ? "all-streams" : undefined;
|
|
1265
|
-
const isBulk = ids !== undefined || allOver !== undefined || scope !== undefined;
|
|
1266
|
-
if (isBulk && typeof options.before === "string") {
|
|
1267
|
-
throw new PmCliError("history-compact: --before applies only in single-id mode (bulk mode always compacts full streams).", EXIT_CODE.USAGE);
|
|
1268
|
-
}
|
|
1269
|
-
assertHistoryCompactTarget(id, { ids, allOver, scope });
|
|
1270
|
-
if (id === undefined) {
|
|
1271
|
-
const result = await runHistoryCompactBulk({
|
|
1272
|
-
ids,
|
|
1273
|
-
scope,
|
|
1274
|
-
allOver,
|
|
1275
|
-
minEntries,
|
|
1276
|
-
dryRun: options.dryRun === true,
|
|
1277
|
-
author: typeof options.author === "string" ? options.author : undefined,
|
|
1278
|
-
message: typeof options.message === "string" ? options.message : undefined,
|
|
1279
|
-
force: Boolean(options.force),
|
|
1280
|
-
}, globalOptions);
|
|
1281
|
-
printResult(result, globalOptions);
|
|
1282
|
-
if (result.totals.items_errored > 0) {
|
|
1283
|
-
// One failing stream never aborts the pass, but the command must still
|
|
1284
|
-
// fail for gating callers.
|
|
1285
|
-
process.exitCode = EXIT_CODE.GENERIC_FAILURE;
|
|
1286
|
-
}
|
|
1287
|
-
}
|
|
1288
|
-
else {
|
|
1289
|
-
const result = await runHistoryCompact(id, {
|
|
1290
|
-
before: typeof options.before === "string" ? options.before : undefined,
|
|
1291
|
-
dryRun: options.dryRun === true,
|
|
1292
|
-
author: typeof options.author === "string" ? options.author : undefined,
|
|
1293
|
-
message: typeof options.message === "string" ? options.message : undefined,
|
|
1294
|
-
force: Boolean(options.force),
|
|
1295
|
-
}, globalOptions);
|
|
1296
|
-
printResult(result, globalOptions);
|
|
1297
|
-
}
|
|
1298
|
-
// history-compact only rewrites the history stream; item content is untouched.
|
|
1299
|
-
if (globalOptions.profile) {
|
|
1300
|
-
printError(`profile:command=history-compact took_ms=${Date.now() - startedAt}`);
|
|
1301
|
-
}
|
|
1302
|
-
});
|
|
1425
|
+
.action(runHistoryCompactAction);
|
|
1303
1426
|
const schemaCommand = program
|
|
1304
1427
|
.command("schema")
|
|
1305
1428
|
.argument("[subcommand]", "Schema subcommand: list, show, show-status, add-type, remove-type, add-status, remove-status, or a custom item type name shorthand")
|
|
@@ -1326,105 +1449,7 @@ export function registerMutationCommands(program) {
|
|
|
1326
1449
|
// Hidden pure snake_case underscore-duplicate alias.
|
|
1327
1450
|
addHiddenOption(schemaCommand, "--default_status <status>", "Alias for --default-status", false);
|
|
1328
1451
|
schemaCommand
|
|
1329
|
-
.action(
|
|
1330
|
-
const globalOptions = getGlobalOptions(command);
|
|
1331
|
-
const startedAt = Date.now();
|
|
1332
|
-
const schemaModule = await import("./commands/schema.js");
|
|
1333
|
-
const { SCHEMA_SUBCOMMANDS } = schemaModule;
|
|
1334
|
-
let normalizedSubcommand = (subcommand ?? "").trim().toLowerCase();
|
|
1335
|
-
let typeName = name;
|
|
1336
|
-
if (!normalizedSubcommand) {
|
|
1337
|
-
throw new PmCliError(`pm schema requires a subcommand. Allowed: ${SCHEMA_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, {
|
|
1338
|
-
code: "missing_required_argument",
|
|
1339
|
-
examples: [
|
|
1340
|
-
"pm schema list",
|
|
1341
|
-
"pm schema show Task",
|
|
1342
|
-
"pm schema show-status open",
|
|
1343
|
-
'pm schema add-type Spike --description "Time-boxed investigation" --default-status open',
|
|
1344
|
-
"pm schema remove-type Spike",
|
|
1345
|
-
"pm schema add-status review --role active --alias in_review",
|
|
1346
|
-
"pm schema remove-status review",
|
|
1347
|
-
"pm schema add-field severity_level --type string --commands create,update",
|
|
1348
|
-
"pm schema list-fields",
|
|
1349
|
-
"pm schema apply-preset agile",
|
|
1350
|
-
"pm schema add-type --infer --min-count 10",
|
|
1351
|
-
],
|
|
1352
|
-
});
|
|
1353
|
-
}
|
|
1354
|
-
const aliases =
|
|
1355
|
-
/* c8 ignore next -- --alias is registered with commander `collect`, so it is always an array here; the string arm is a defensive guard for non-CLI (programmatic) callers */
|
|
1356
|
-
typeof options.alias === "string"
|
|
1357
|
-
? [options.alias]
|
|
1358
|
-
: Array.isArray(options.alias)
|
|
1359
|
-
? options.alias
|
|
1360
|
-
: undefined;
|
|
1361
|
-
const roles =
|
|
1362
|
-
/* c8 ignore next -- --role is registered with commander `collect`, so it is always an array here; the string arm is a defensive guard for non-CLI (programmatic) callers */
|
|
1363
|
-
typeof options.role === "string"
|
|
1364
|
-
? [options.role]
|
|
1365
|
-
: Array.isArray(options.role)
|
|
1366
|
-
? options.role
|
|
1367
|
-
: undefined;
|
|
1368
|
-
const defaultStatus = typeof options.defaultStatus === "string"
|
|
1369
|
-
? options.defaultStatus
|
|
1370
|
-
: typeof options.default_status === "string"
|
|
1371
|
-
? options.default_status
|
|
1372
|
-
: undefined;
|
|
1373
|
-
const order = parseSchemaOrderOption(options.order);
|
|
1374
|
-
// --commands/--required-types are repeatable Commander `collect` flags, so
|
|
1375
|
-
// their value is always a string[] (or undefined when omitted); each entry
|
|
1376
|
-
// may itself be a comma-list, which we split and flatten here.
|
|
1377
|
-
const splitCollectedCommaList = (raw) => {
|
|
1378
|
-
if (!Array.isArray(raw)) {
|
|
1379
|
-
return undefined;
|
|
1380
|
-
}
|
|
1381
|
-
return raw
|
|
1382
|
-
.flatMap((value) => value.split(","))
|
|
1383
|
-
.map((value) => value.trim())
|
|
1384
|
-
.filter((value) => value.length > 0);
|
|
1385
|
-
};
|
|
1386
|
-
const commands = splitCollectedCommaList(options.commands);
|
|
1387
|
-
const requiredTypes = splitCollectedCommaList(options.requiredTypes);
|
|
1388
|
-
const minCount = parseSchemaOrderOption(options.minCount);
|
|
1389
|
-
if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand) &&
|
|
1390
|
-
typeName === undefined &&
|
|
1391
|
-
!looksLikeSchemaSubcommandTypo(normalizedSubcommand)) {
|
|
1392
|
-
typeName = subcommand;
|
|
1393
|
-
normalizedSubcommand = "add-type";
|
|
1394
|
-
}
|
|
1395
|
-
if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand)) {
|
|
1396
|
-
throw new PmCliError(`Unknown pm schema subcommand "${subcommand}". Allowed: ${SCHEMA_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, { code: "unknown_subcommand" });
|
|
1397
|
-
}
|
|
1398
|
-
const author = typeof options.author === "string" ? options.author : undefined;
|
|
1399
|
-
const force = Boolean(options.force);
|
|
1400
|
-
const description = typeof options.description === "string" ? options.description : undefined;
|
|
1401
|
-
const result = await dispatchSchemaSubcommand(schemaModule, {
|
|
1402
|
-
normalizedSubcommand,
|
|
1403
|
-
typeName,
|
|
1404
|
-
options,
|
|
1405
|
-
aliases,
|
|
1406
|
-
roles,
|
|
1407
|
-
commands,
|
|
1408
|
-
requiredTypes,
|
|
1409
|
-
defaultStatus,
|
|
1410
|
-
order,
|
|
1411
|
-
minCount,
|
|
1412
|
-
author,
|
|
1413
|
-
force,
|
|
1414
|
-
description,
|
|
1415
|
-
globalOptions,
|
|
1416
|
-
});
|
|
1417
|
-
// Schema inspection and type registration do not touch item content, so search caches stay valid.
|
|
1418
|
-
if (globalOptions.json === true || globalOptions.defaultOutputFormat === "json") {
|
|
1419
|
-
printResult(result, globalOptions);
|
|
1420
|
-
}
|
|
1421
|
-
else if (!globalOptions.quiet) {
|
|
1422
|
-
renderSchemaResultHuman(schemaModule, result);
|
|
1423
|
-
}
|
|
1424
|
-
if (globalOptions.profile) {
|
|
1425
|
-
printError(`profile:command=schema took_ms=${Date.now() - startedAt}`);
|
|
1426
|
-
}
|
|
1427
|
-
});
|
|
1452
|
+
.action(runSchemaAction);
|
|
1428
1453
|
const profileCommand = program
|
|
1429
1454
|
.command("profile")
|
|
1430
1455
|
.argument("[subcommand]", "Profile subcommand: list, show, apply, or lint")
|
|
@@ -1481,48 +1506,7 @@ export function registerMutationCommands(program) {
|
|
|
1481
1506
|
.option("--allow-audit-comment", "Allow non-owner append-only comment audits (add/edit/delete) without requiring --force")
|
|
1482
1507
|
.option("--force", "Force ownership override")
|
|
1483
1508
|
.description("List, add, edit, or delete comments for an item.")
|
|
1484
|
-
.action(
|
|
1485
|
-
const globalOptions = getGlobalOptions(command);
|
|
1486
|
-
const startedAt = Date.now();
|
|
1487
|
-
const editIndex = typeof options.edit === "number" ? options.edit : undefined;
|
|
1488
|
-
const deleteIndex = typeof options.delete === "number" ? options.delete : undefined;
|
|
1489
|
-
const addFromOption = typeof options.add === "string" ? options.add : undefined;
|
|
1490
|
-
const addFromPositional = typeof text === "string" ? text : undefined;
|
|
1491
|
-
const readFromStdin = options.stdin === true;
|
|
1492
|
-
const readFromFile = typeof options.file === "string" ? options.file : undefined;
|
|
1493
|
-
const sourceCount = Number(addFromOption !== undefined) +
|
|
1494
|
-
Number(addFromPositional !== undefined) +
|
|
1495
|
-
Number(readFromStdin) +
|
|
1496
|
-
Number(readFromFile !== undefined);
|
|
1497
|
-
if (sourceCount > 1) {
|
|
1498
|
-
if (addFromOption !== undefined && addFromPositional !== undefined && !readFromStdin && readFromFile === undefined) {
|
|
1499
|
-
throw new PmCliError("Specify comment text either as positional [text] or with --add, not both", EXIT_CODE.USAGE);
|
|
1500
|
-
}
|
|
1501
|
-
throw new PmCliError("Specify comment text with exactly one source: positional [text], --add, --stdin, or --file", EXIT_CODE.USAGE);
|
|
1502
|
-
}
|
|
1503
|
-
const add = addFromOption ?? addFromPositional;
|
|
1504
|
-
const { runComments } = await import("./commands/comments.js");
|
|
1505
|
-
const result = await runComments(id, {
|
|
1506
|
-
add,
|
|
1507
|
-
stdin: readFromStdin,
|
|
1508
|
-
file: readFromFile,
|
|
1509
|
-
edit: editIndex,
|
|
1510
|
-
delete: deleteIndex,
|
|
1511
|
-
limit: typeof options.limit === "string" ? options.limit : undefined,
|
|
1512
|
-
author: typeof options.author === "string" ? options.author : undefined,
|
|
1513
|
-
message: typeof options.message === "string" ? options.message : undefined,
|
|
1514
|
-
allowAuditComment: Boolean(options.allowAuditComment),
|
|
1515
|
-
force: Boolean(options.force),
|
|
1516
|
-
}, globalOptions);
|
|
1517
|
-
const isMutation = typeof add === "string" || readFromStdin || readFromFile !== undefined || editIndex !== undefined || deleteIndex !== undefined;
|
|
1518
|
-
if (isMutation) {
|
|
1519
|
-
await invalidateSearchCachesForMutation(globalOptions, result);
|
|
1520
|
-
}
|
|
1521
|
-
printResult(result, globalOptions);
|
|
1522
|
-
if (globalOptions.profile) {
|
|
1523
|
-
printError(`profile:command=comments took_ms=${Date.now() - startedAt}`);
|
|
1524
|
-
}
|
|
1525
|
-
});
|
|
1509
|
+
.action(runCommentsAction);
|
|
1526
1510
|
program
|
|
1527
1511
|
.command("notes")
|
|
1528
1512
|
.argument("<id>", "Item id")
|
|
@@ -1753,4 +1737,4 @@ export function registerMutationCommands(program) {
|
|
|
1753
1737
|
});
|
|
1754
1738
|
}
|
|
1755
1739
|
//# sourceMappingURL=register-mutation.js.map
|
|
1756
|
-
//# debugId=
|
|
1740
|
+
//# debugId=6581ddaf-4643-5ccc-9aff-1569d1759846
|