@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
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../../../../core/governance/metadata-coverage.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Metadata governance & coverage observability primitives.\n *\n * One dependency-light module that powers the whole metadata-governance\n * surface: missing-field selection (pm list / pm update-many), coverage\n * percentages (pm stats --metadata-coverage / pm validate), and grouped\n * lifecycle breakdowns (pm stats --by-assignee/--by-tag/--by-priority,\n * pm aggregate explicit labels).\n *\n * The module is pure: it performs no IO and imports no heavy runtime\n * dependencies. Lifecycle semantics are injected via a {@link LifecycleClassifier}\n * so callers map their runtime status registry to lifecycle buckets while the\n * pure logic here stays trivially testable with a fake classifier.\n */\n\nimport { toNonEmptyStringOrUndefined } from \"../shared/primitives.js\";\n\n/** Minimal structural shape this module needs from an item's front matter. */\nexport interface CoverageItem {\n type: string;\n status: string;\n assignee?: string;\n tags?: string[];\n parent?: string;\n priority?: number;\n acceptance_criteria?: string;\n estimated_minutes?: number;\n resolution?: string;\n reviewer?: string;\n risk?: string;\n /** Confidence is a string-like enum or a numeric score depending on workspace. */\n confidence?: string | number;\n sprint?: string;\n release?: string;\n [key: string]: unknown;\n}\n\n/** Lifecycle buckets used by grouped breakdowns and distributions. */\nexport type LifecycleBucket =\n | \"open\"\n | \"in_progress\"\n | \"blocked\"\n | \"draft\"\n | \"closed\"\n | \"canceled\"\n | \"other\";\n\n/** Stable rendering order for lifecycle buckets. */\nexport const LIFECYCLE_BUCKET_ORDER: readonly LifecycleBucket[] = [\n \"open\",\n \"in_progress\",\n \"blocked\",\n \"draft\",\n \"closed\",\n \"canceled\",\n \"other\",\n] as const;\n\n/**\n * Classifies a raw status string into a lifecycle bucket and reports whether a\n * status is terminal (closed/canceled). Callers build this from their resolved\n * runtime status registry via {@link lifecycleClassifierFromStatusRegistry}.\n */\nexport interface LifecycleClassifier {\n classify(status: string): LifecycleBucket;\n isTerminal(status: string): boolean;\n}\n\n/** The subset of a resolved runtime status registry this module consumes. */\nexport interface StatusRegistryLike {\n alias_to_id: Map<string, string>;\n terminal_statuses: Set<string>;\n terminal_canceled_statuses: Set<string>;\n blocked_statuses: Set<string>;\n draft_statuses: Set<string>;\n active_statuses: Set<string>;\n open_status: string;\n}\n\nfunction normalizeStatus(status: string, registry: StatusRegistryLike): string {\n const trimmed = status.trim().toLowerCase();\n return registry.alias_to_id.get(trimmed) ?? trimmed;\n}\n\n/**\n * Adapt a resolved runtime status registry into a {@link LifecycleClassifier}.\n *\n * Precedence is deliberate and disjoint: canceled → closed → blocked → draft →\n * open → in_progress (active but not the default open status) → other.\n */\nexport function lifecycleClassifierFromStatusRegistry(registry: StatusRegistryLike): LifecycleClassifier {\n return {\n isTerminal(status: string): boolean {\n return registry.terminal_statuses.has(normalizeStatus(status, registry));\n },\n classify(status: string): LifecycleBucket {\n const id = normalizeStatus(status, registry);\n if (registry.terminal_canceled_statuses.has(id)) {\n return \"canceled\";\n }\n if (registry.terminal_statuses.has(id)) {\n return \"closed\";\n }\n if (registry.blocked_statuses.has(id)) {\n return \"blocked\";\n }\n if (registry.draft_statuses.has(id)) {\n return \"draft\";\n }\n if (id === registry.open_status) {\n return \"open\";\n }\n if (registry.active_statuses.has(id)) {\n return \"in_progress\";\n }\n return \"other\";\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Missing-metadata predicates\n// ---------------------------------------------------------------------------\n\n/** True when an item has no non-empty acceptance_criteria. */\nexport function isAcMissing(item: CoverageItem): boolean {\n return toNonEmptyStringOrUndefined(item.acceptance_criteria) === undefined;\n}\n\n/** True when an item has no finite estimated_minutes. */\nexport function isEstimateMissing(item: CoverageItem): boolean {\n return !Number.isFinite(item.estimated_minutes);\n}\n\n/**\n * True when a terminal (closed/canceled) item has no non-empty resolution.\n * Resolution is only expected on terminal items, so open items are never\n * considered \"resolution-missing\".\n */\nexport function isResolutionMissing(item: CoverageItem, classifier: LifecycleClassifier): boolean {\n if (!classifier.isTerminal(item.status)) {\n return false;\n }\n return toNonEmptyStringOrUndefined(item.resolution) === undefined;\n}\n\n/** True when an item has no non-empty reviewer. */\nexport function isReviewerMissing(item: CoverageItem): boolean {\n return toNonEmptyStringOrUndefined(item.reviewer) === undefined;\n}\n\n/** True when an item has no non-empty risk level. */\nexport function isRiskMissing(item: CoverageItem): boolean {\n return toNonEmptyStringOrUndefined(item.risk) === undefined;\n}\n\n/**\n * True when an item has no confidence value. Confidence is a string-like enum\n * or a numeric score depending on workspace, so a finite number counts as\n * present and only blank/absent values are treated as missing.\n */\nexport function isConfidenceMissing(item: CoverageItem): boolean {\n if (typeof item.confidence === \"number\") {\n return !Number.isFinite(item.confidence);\n }\n return toNonEmptyStringOrUndefined(item.confidence) === undefined;\n}\n\n/** True when an item has no non-empty sprint. */\nexport function isSprintMissing(item: CoverageItem): boolean {\n return toNonEmptyStringOrUndefined(item.sprint) === undefined;\n}\n\n/** True when an item has no non-empty release. */\nexport function isReleaseMissing(item: CoverageItem): boolean {\n return toNonEmptyStringOrUndefined(item.release) === undefined;\n}\n\n/** Selection flags for {@link filterMissingMetadata}. */\nexport interface MissingMetadataFilters {\n acMissing?: boolean;\n estimatesMissing?: boolean;\n resolutionMissing?: boolean;\n reviewerMissing?: boolean;\n riskMissing?: boolean;\n confidenceMissing?: boolean;\n sprintMissing?: boolean;\n releaseMissing?: boolean;\n /** Match items missing ANY of the tracked metadata fields (union). */\n metadataMissing?: boolean;\n}\n\n/** True when any missing-metadata filter is requested. */\nexport function hasMissingMetadataFilter(filters: MissingMetadataFilters): boolean {\n return Boolean(\n filters.acMissing ||\n filters.estimatesMissing ||\n filters.resolutionMissing ||\n filters.reviewerMissing ||\n filters.riskMissing ||\n filters.confidenceMissing ||\n filters.sprintMissing ||\n filters.releaseMissing ||\n filters.metadataMissing,\n );\n}\n\n/**\n * Does a single item satisfy the requested missing-metadata filters?\n *\n * Specific flags (acMissing/estimatesMissing/resolutionMissing plus the\n * governance flags reviewerMissing/riskMissing/confidenceMissing/sprintMissing/\n * releaseMissing) are ANDed together so callers can narrow precisely.\n * `metadataMissing` is ORed in as a union shortcut for \"missing any of the\n * core tracked fields\" (acceptance_criteria/estimated_minutes/resolution); it\n * deliberately excludes the governance fields so the long-standing flag keeps\n * its original meaning. When no filter is requested the item passes.\n */\nexport function itemMatchesMissingMetadata(\n item: CoverageItem,\n filters: MissingMetadataFilters,\n classifier: LifecycleClassifier,\n): boolean {\n if (!hasMissingMetadataFilter(filters)) {\n return true;\n }\n if (filters.acMissing && !isAcMissing(item)) {\n return false;\n }\n if (filters.estimatesMissing && !isEstimateMissing(item)) {\n return false;\n }\n if (filters.resolutionMissing && !isResolutionMissing(item, classifier)) {\n return false;\n }\n if (filters.reviewerMissing && !isReviewerMissing(item)) {\n return false;\n }\n if (filters.riskMissing && !isRiskMissing(item)) {\n return false;\n }\n if (filters.confidenceMissing && !isConfidenceMissing(item)) {\n return false;\n }\n if (filters.sprintMissing && !isSprintMissing(item)) {\n return false;\n }\n if (filters.releaseMissing && !isReleaseMissing(item)) {\n return false;\n }\n if (filters.metadataMissing) {\n const anyMissing =\n isAcMissing(item) || isEstimateMissing(item) || isResolutionMissing(item, classifier);\n if (!anyMissing) {\n return false;\n }\n }\n return true;\n}\n\n/** Filter a list of items by the requested missing-metadata predicates. */\nexport function filterMissingMetadata<T extends CoverageItem>(\n items: readonly T[],\n filters: MissingMetadataFilters,\n classifier: LifecycleClassifier,\n): T[] {\n if (!hasMissingMetadataFilter(filters)) {\n return [...items];\n }\n return items.filter((item) => itemMatchesMissingMetadata(item, filters, classifier));\n}\n\n// ---------------------------------------------------------------------------\n// Metadata coverage percentages\n// ---------------------------------------------------------------------------\n\n/** Coverage-tracked metadata fields. */\nexport type CoverageField =\n | \"acceptance_criteria\"\n | \"estimated_minutes\"\n | \"resolution\"\n | \"tags\"\n | \"parent\";\n\n/** Stable ordering of coverage fields for rendering. */\nexport const COVERAGE_FIELD_ORDER: readonly CoverageField[] = [\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"resolution\",\n \"tags\",\n \"parent\",\n] as const;\n\n/** Coverage of a single field: present vs applicable, with a rounded percent. */\nexport interface FieldCoverage {\n present: number;\n /** Items for which the field is expected (all items, except resolution = terminal only). */\n applicable: number;\n /** present/applicable * 100, rounded to one decimal; 100 when applicable is 0. */\n percent: number;\n}\n\n/**\n * Documents the metadata coverage report payload exchanged by command, SDK, and package integrations.\n */\nexport interface MetadataCoverageReport {\n overall: Record<CoverageField, FieldCoverage>;\n by_type: Record<string, Record<CoverageField, FieldCoverage>>;\n}\n\nfunction isFieldPresent(item: CoverageItem, field: CoverageField): boolean {\n switch (field) {\n case \"acceptance_criteria\":\n return !isAcMissing(item);\n case \"estimated_minutes\":\n return !isEstimateMissing(item);\n case \"resolution\":\n return toNonEmptyStringOrUndefined(item.resolution) !== undefined;\n case \"tags\":\n return Array.isArray(item.tags) && item.tags.length > 0;\n default:\n return toNonEmptyStringOrUndefined(item.parent) !== undefined;\n }\n}\n\n/** Whether a field applies to a given item (resolution only applies to terminal items). */\nfunction isFieldApplicable(item: CoverageItem, field: CoverageField, classifier: LifecycleClassifier): boolean {\n if (field === \"resolution\") {\n return classifier.isTerminal(item.status);\n }\n return true;\n}\n\nfunction roundPercent(present: number, applicable: number): number {\n if (applicable === 0) {\n return 100;\n }\n return Math.round((present / applicable) * 1000) / 10;\n}\n\nfunction emptyFieldCoverage(): Record<CoverageField, FieldCoverage> {\n const record = {} as Record<CoverageField, FieldCoverage>;\n for (const field of COVERAGE_FIELD_ORDER) {\n record[field] = { present: 0, applicable: 0, percent: 100 };\n }\n return record;\n}\n\nfunction accumulateCoverage(\n target: Record<CoverageField, FieldCoverage>,\n item: CoverageItem,\n classifier: LifecycleClassifier,\n): void {\n for (const field of COVERAGE_FIELD_ORDER) {\n if (!isFieldApplicable(item, field, classifier)) {\n continue;\n }\n const entry = target[field];\n entry.applicable += 1;\n if (isFieldPresent(item, field)) {\n entry.present += 1;\n }\n }\n}\n\nfunction finalizePercentages(record: Record<CoverageField, FieldCoverage>): void {\n for (const field of COVERAGE_FIELD_ORDER) {\n const entry = record[field];\n entry.percent = roundPercent(entry.present, entry.applicable);\n }\n}\n\n/**\n * Compute metadata coverage overall and per item type. For each tracked field\n * we report present/applicable counts and a rounded percentage. Resolution is\n * scoped to terminal items (its only applicable population).\n */\nexport function computeMetadataCoverage(\n items: readonly CoverageItem[],\n classifier: LifecycleClassifier,\n): MetadataCoverageReport {\n const overall = emptyFieldCoverage();\n const byType: Record<string, Record<CoverageField, FieldCoverage>> = {};\n for (const item of items) {\n accumulateCoverage(overall, item, classifier);\n const typeRecord = byType[item.type] ?? (byType[item.type] = emptyFieldCoverage());\n accumulateCoverage(typeRecord, item, classifier);\n }\n finalizePercentages(overall);\n for (const typeRecord of Object.values(byType)) {\n finalizePercentages(typeRecord);\n }\n return { overall, by_type: byType };\n}\n\n// ---------------------------------------------------------------------------\n// Grouped lifecycle breakdowns\n// ---------------------------------------------------------------------------\n\n/** Dimensions a breakdown can group by. */\nexport type GroupDimension = \"assignee\" | \"priority\" | \"tag\" | \"parent\" | \"type\" | \"status\";\n\n/** Explicit labels for empty/blank group keys, by dimension. */\nconst EMPTY_GROUP_LABELS: Record<GroupDimension, string> = {\n assignee: \"(unassigned)\",\n priority: \"(no priority)\",\n tag: \"(untagged)\",\n parent: \"(unparented)\",\n type: \"(untyped)\",\n status: \"(no status)\",\n};\n\n/** Explicit label for an empty/blank group value for a given dimension. */\nexport function emptyGroupLabel(dimension: GroupDimension): string {\n return EMPTY_GROUP_LABELS[dimension];\n}\n\n/**\n * Documents the group row payload exchanged by command, SDK, and package integrations.\n */\nexport interface GroupRow {\n /** Display label; explicit \"(unassigned)\"-style label for blank keys. */\n label: string;\n /** Stable structured key (null for the empty/blank group). */\n key: string | null;\n buckets: Record<LifecycleBucket, number>;\n total: number;\n}\n\n/**\n * Documents the grouped breakdown payload exchanged by command, SDK, and package integrations.\n */\nexport interface GroupedBreakdown {\n dimension: GroupDimension;\n rows: GroupRow[];\n /** Distinct items observed (an item can contribute to multiple tag rows). */\n total_items: number;\n}\n\n/**\n * Documents the group options payload exchanged by command, SDK, and package integrations.\n */\nexport interface GroupOptions {\n /** For dimension=\"tag\": only consider tags starting with this prefix. */\n tagPrefix?: string;\n}\n\nfunction emptyBuckets(): Record<LifecycleBucket, number> {\n return {\n open: 0,\n in_progress: 0,\n blocked: 0,\n draft: 0,\n closed: 0,\n canceled: 0,\n other: 0,\n };\n}\n\n/**\n * Resolve the group keys an item belongs to for a dimension. Most dimensions\n * yield exactly one key (possibly null for blank); tag yields one key per\n * matching tag (or [null] when none match), so an item can span multiple rows.\n */\nfunction groupKeysForItem(item: CoverageItem, dimension: GroupDimension, options: GroupOptions): (string | null)[] {\n switch (dimension) {\n case \"assignee\":\n return [toNonEmptyStringOrUndefined(item.assignee) ?? null];\n case \"parent\":\n return [toNonEmptyStringOrUndefined(item.parent) ?? null];\n case \"type\":\n return [toNonEmptyStringOrUndefined(item.type) ?? null];\n case \"status\":\n return [toNonEmptyStringOrUndefined(item.status) ?? null];\n case \"priority\":\n return [typeof item.priority === \"number\" ? `P${item.priority}` : null];\n default: {\n const prefix = options.tagPrefix?.trim();\n const tags = Array.isArray(item.tags) ? item.tags : [];\n const matching = tags.filter(\n (tag) => typeof tag === \"string\" && tag.length > 0 && (!prefix || tag.startsWith(prefix)),\n );\n return matching.length > 0 ? matching : [null];\n }\n }\n}\n\n/**\n * Group items by a dimension into lifecycle-bucketed rows. Blank keys render\n * with an explicit \"(unassigned)\"-style label. Rows are sorted by total\n * descending, then label ascending, with the empty group sorted last on ties.\n */\nexport function groupItemsByDimension(\n items: readonly CoverageItem[],\n dimension: GroupDimension,\n classifier: LifecycleClassifier,\n options: GroupOptions = {},\n): GroupedBreakdown {\n const rows = new Map<string, GroupRow>();\n let totalItems = 0;\n for (const item of items) {\n totalItems += 1;\n const bucket = classifier.classify(item.status);\n for (const key of groupKeysForItem(item, dimension, options)) {\n const mapKey = key ?? \"\u0000empty\";\n let row = rows.get(mapKey);\n if (!row) {\n row = {\n label: key ?? emptyGroupLabel(dimension),\n key,\n buckets: emptyBuckets(),\n total: 0,\n };\n rows.set(mapKey, row);\n }\n row.buckets[bucket] += 1;\n row.total += 1;\n }\n }\n const sorted = [...rows.values()].sort((left, right) => {\n if (right.total !== left.total) {\n return right.total - left.total;\n }\n // All blank-key items collapse into a single row per dimension, so at most\n // one row has key === null; it sorts last on ties.\n if (left.key === null) {\n return 1;\n }\n if (right.key === null) {\n return -1;\n }\n return left.label.localeCompare(right.label);\n });\n return { dimension, rows: sorted, total_items: totalItems };\n}\n\n/** Lifecycle-bucket distribution across all items (for stats lifecycle section). */\nexport function computeLifecycleDistribution(\n items: readonly CoverageItem[],\n classifier: LifecycleClassifier,\n): Record<LifecycleBucket, number> {\n const buckets = emptyBuckets();\n for (const item of items) {\n buckets[classifier.classify(item.status)] += 1;\n }\n return buckets;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../../../../core/schema/runtime-field-values.ts", "../../../../../../../../core/item/item-format-version.ts", "../../../../../../../../core/item/status.ts", "../../../../../../../../core/shared/conflict-markers.ts", "../../../../../../../../core/item/item-format.ts", "../../../../../../../../core/item/toon-decode.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @module core/schema/runtime-field-values\n *\n * Resolves configurable schema, fields, statuses, and workflows for Runtime Field Values.\n */\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { runtimeFieldOptionTarget, type RuntimeFieldDefinitionResolved, type RuntimeFieldRegistry } from \"./runtime-schema.js\";\n\nfunction toCamelToken(value: string): string {\n const segments = value\n .trim()\n .replaceAll(/[^A-Za-z0-9]+/g, \" \")\n .split(/\\s+/)\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.toLowerCase());\n if (segments.length === 0) {\n return value;\n }\n const [first, ...rest] = segments;\n return `${first}${rest.map((segment) => `${segment.slice(0, 1).toUpperCase()}${segment.slice(1)}`).join(\"\")}`;\n}\n\nfunction resolveCandidateOptionKeys(definition: RuntimeFieldDefinitionResolved): string[] {\n return [...new Set([\n runtimeFieldOptionTarget(definition),\n toCamelToken(definition.key),\n toCamelToken(definition.cli_flag),\n ...definition.cli_aliases.map((alias) => toCamelToken(alias)),\n ])];\n}\n\n/**\n * Implements read runtime field option value for the public runtime surface of this module.\n */\nexport function readRuntimeFieldOptionValue(\n options: Record<string, unknown>,\n definition: RuntimeFieldDefinitionResolved,\n): unknown {\n for (const candidateKey of resolveCandidateOptionKeys(definition)) {\n if (!Object.hasOwn(options, candidateKey)) {\n continue;\n }\n const value = options[candidateKey];\n if (value !== undefined) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction normalizeStringArrayValue(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .flatMap((entry) => normalizeStringArrayValue(entry))\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (typeof value === \"string\") {\n return value\n .split(/[,\\n|]/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (value === undefined || value === null) {\n return [];\n }\n return [String(value).trim()].filter((entry) => entry.length > 0);\n}\n\nfunction parseBooleanValue(raw: unknown, label: string): boolean {\n if (typeof raw === \"boolean\") {\n return raw;\n }\n if (typeof raw === \"number\") {\n if (raw === 1) {\n return true;\n }\n if (raw === 0) {\n return false;\n }\n }\n if (typeof raw === \"string\") {\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\" || normalized === \"no\") {\n return false;\n }\n }\n throw new PmCliError(`${label} must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);\n}\n\nfunction parseNumberValue(raw: unknown, label: string): number {\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n return raw;\n }\n const candidate = typeof raw === \"string\" ? raw.trim() : String(raw);\n const parsed = Number(candidate);\n if (!Number.isFinite(parsed)) {\n throw new PmCliError(`${label} must be a number`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\n/**\n * Implements coerce runtime field value for the public runtime surface of this module.\n */\nexport function coerceRuntimeFieldValue(\n definition: RuntimeFieldDefinitionResolved,\n rawValue: unknown,\n labelOverride?: string,\n): unknown {\n const label = labelOverride ?? `--${definition.cli_flag}`;\n if (definition.repeatable || definition.type === \"string_array\") {\n const values = normalizeStringArrayValue(rawValue);\n if (definition.type === \"number\") {\n return values.map((value) => parseNumberValue(value, label));\n }\n if (definition.type === \"boolean\") {\n return values.map((value) => parseBooleanValue(value, label));\n }\n return values;\n }\n\n const scalarRaw = Array.isArray(rawValue) ? rawValue[rawValue.length - 1] : rawValue;\n if (scalarRaw === undefined) {\n return undefined;\n }\n if (definition.type === \"number\") {\n return parseNumberValue(scalarRaw, label);\n }\n if (definition.type === \"boolean\") {\n return parseBooleanValue(scalarRaw, label);\n }\n return typeof scalarRaw === \"string\" ? scalarRaw : String(scalarRaw);\n}\n\nfunction shouldRequireFieldOnCreate(definition: RuntimeFieldDefinitionResolved, itemTypeName: string | undefined): boolean {\n if (!definition.required && !definition.required_on_create) {\n return false;\n }\n if (definition.required_types.length === 0) {\n return true;\n }\n if (!itemTypeName) {\n return false;\n }\n return definition.required_types.map((value) => value.toLowerCase()).includes(itemTypeName.trim().toLowerCase());\n}\n\n/**\n * Implements collect runtime create field values for the public runtime surface of this module.\n */\nexport function collectRuntimeCreateFieldValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n itemTypeName: string | undefined,\n): { values: Record<string, unknown>; missing_required_flags: string[] } {\n const values: Record<string, unknown> = {};\n const missingRequiredFlags: string[] = [];\n for (const definition of fieldRegistry.command_to_fields.get(\"create\") ?? []) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n if (shouldRequireFieldOnCreate(definition, itemTypeName)) {\n missingRequiredFlags.push(`--${definition.cli_flag}`);\n }\n continue;\n }\n values[definition.metadata_key] = coerceRuntimeFieldValue(definition, rawValue);\n }\n return {\n values,\n missing_required_flags: [...new Set(missingRequiredFlags)].sort((left, right) => left.localeCompare(right)),\n };\n}\n\n/**\n * Implements collect runtime update field values for the public runtime surface of this module.\n */\nexport function collectRuntimeUpdateFieldValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n commands: Array<\"update\" | \"update_many\"> | null | undefined = [\"update\"],\n): Record<string, unknown> {\n const values: Record<string, unknown> = {};\n const definitions = (commands ?? [\"update\"]).flatMap((command) => fieldRegistry.command_to_fields.get(command) ?? []);\n const seen = new Set<string>();\n for (const definition of definitions) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n continue;\n }\n if (seen.has(definition.metadata_key)) {\n continue;\n }\n seen.add(definition.metadata_key);\n values[definition.metadata_key] = coerceRuntimeFieldValue(definition, rawValue);\n }\n return values;\n}\n", "/**\n * @module core/item/item-format-version\n *\n * Tracks the on-disk item front-matter format version so a future breaking\n * storage change can tell already-current items apart from items that a staged\n * migration must rewrite, without re-parsing and structurally guessing every\n * file. The version is an explicit, monotonically increasing integer stamped in\n * front-matter as `pm_format_version`.\n *\n * Token economy is a first-class constraint here: the baseline version (1) is\n * the implicit default and is never serialized, so today's corpus gains zero\n * bytes and zero churn. The field only materializes once an item reaches\n * version 2 or higher. Absence of the field is therefore always interpreted as\n * the baseline version, both now and after future bumps. The classification\n * helpers below power the advisory `pm health` integrity surface and the\n * `pm validate` format-version check.\n */\nimport type { ItemMetadata } from \"../../types/index.js\";\n\n/**\n * The original (and implicit) item front-matter format version. Items missing a\n * `pm_format_version` field are always treated as this version, so the baseline\n * is never written to disk and adds no per-item token cost.\n */\nexport const BASELINE_ITEM_FORMAT_VERSION = 1;\n\n/**\n * The format version this runtime writes and considers current. When a breaking\n * front-matter change ships, bump this constant and add a migration that\n * rewrites items whose {@link effectiveItemFormatVersion} is lower; items at or\n * above it need no migration. It stays equal to\n * {@link BASELINE_ITEM_FORMAT_VERSION} until the first such change.\n */\nexport const CURRENT_ITEM_FORMAT_VERSION = 1;\n\n/**\n * Resolve the format version an item is effectively stored at. A present,\n * positive-integer `pm_format_version` is taken verbatim (including versions\n * ahead of this runtime, so they can be flagged rather than silently clamped);\n * an absent, malformed, or sub-baseline value resolves to\n * {@link BASELINE_ITEM_FORMAT_VERSION}.\n */\nexport function effectiveItemFormatVersion(metadata: Pick<ItemMetadata, \"pm_format_version\">): number {\n const raw = metadata.pm_format_version;\n if (typeof raw === \"number\" && Number.isInteger(raw) && raw >= BASELINE_ITEM_FORMAT_VERSION) {\n return raw;\n }\n return BASELINE_ITEM_FORMAT_VERSION;\n}\n\n/**\n * Reduce an item's `pm_format_version` to its persisted form: the baseline\n * version (and any malformed or sub-baseline value) is dropped so it is never\n * serialized, while versions at or above {@link BASELINE_ITEM_FORMAT_VERSION}\n * plus one are preserved verbatim. This keeps the field absent for the entire\n * current corpus and only writes it once an item genuinely advances past the\n * implicit baseline.\n */\nexport function normalizeItemFormatVersion(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isInteger(value) || value <= BASELINE_ITEM_FORMAT_VERSION) {\n return undefined;\n }\n return value;\n}\n\n/**\n * Relationship between an item's stored format version and the runtime's\n * current version: `outdated` (below current, a migration would rewrite it),\n * `ahead` (above current, written by a newer pm than this one), or `current`.\n */\nexport type ItemFormatVersionStatus = \"current\" | \"outdated\" | \"ahead\";\n\n/**\n * Classify a single stored format version against the runtime's current\n * version. Defaults to {@link CURRENT_ITEM_FORMAT_VERSION}; the `current`\n * parameter exists so callers (and tests) can evaluate against a hypothetical\n * future version without mutating the module constant.\n */\nexport function classifyItemFormatVersion(\n version: number,\n current: number = CURRENT_ITEM_FORMAT_VERSION,\n): ItemFormatVersionStatus {\n if (version < current) {\n return \"outdated\";\n }\n if (version > current) {\n return \"ahead\";\n }\n return \"current\";\n}\n\n/**\n * One item's reference (id or relative path) paired with the format version it\n * is stored at, used as input to {@link scanItemFormatVersions}.\n */\nexport interface ItemFormatVersionScanEntry {\n ref: string;\n version: number;\n}\n\n/**\n * Sorted references partitioned by how their stored format version compares to\n * the runtime's current version. References at the current version are omitted\n * from both lists.\n */\nexport interface ItemFormatVersionScanResult {\n outdated: string[];\n ahead: string[];\n}\n\n/**\n * Partition a set of items by format version into `outdated` (need migration)\n * and `ahead` (written by a newer pm) reference lists, each sorted for stable\n * diagnostics. Pushing all comparison branches into this pure, exhaustively\n * tested helper lets `pm health` and `pm validate` emit findings by iterating\n * the result lists, with no version-comparison branching of their own.\n */\nexport function scanItemFormatVersions(\n entries: readonly ItemFormatVersionScanEntry[],\n current: number = CURRENT_ITEM_FORMAT_VERSION,\n): ItemFormatVersionScanResult {\n const outdated: string[] = [];\n const ahead: string[] = [];\n for (const entry of entries) {\n const status = classifyItemFormatVersion(entry.version, current);\n if (status === \"outdated\") {\n outdated.push(entry.ref);\n } else if (status === \"ahead\") {\n ahead.push(entry.ref);\n }\n }\n return {\n outdated: outdated.sort((left, right) => left.localeCompare(right)),\n ahead: ahead.sort((left, right) => left.localeCompare(right)),\n };\n}\n", "/**\n * @module core/item/status\n *\n * Defines item parsing, formatting, and lifecycle helpers for Status.\n */\nimport { STATUS_VALUES } from \"../../types/index.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { normalizeStatusInputWithRegistry, type RuntimeStatusRegistry } from \"../schema/runtime-schema.js\";\n\nconst STATUS_ALIAS_MAP: Readonly<Record<string, ItemStatus>> = {\n \"in-progress\": \"in_progress\",\n cancelled: \"canceled\",\n};\n\n/**\n * Implements normalize status input for the public runtime surface of this module.\n */\nexport function normalizeStatusInput(value: unknown, registry?: RuntimeStatusRegistry): ItemStatus | undefined {\n if (registry) {\n const normalizedFromRegistry = normalizeStatusInputWithRegistry(value, registry);\n if (normalizedFromRegistry) {\n return normalizedFromRegistry;\n }\n }\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n const canonical = STATUS_ALIAS_MAP[normalized] ?? normalized;\n if (!(STATUS_VALUES as readonly string[]).includes(canonical)) {\n return undefined;\n }\n return canonical as ItemStatus;\n}\n\n/**\n * Normalize a status against the runtime registry, falling back to the original\n * value when normalization does not resolve to a known status. This preserves\n * the long-standing `normalizeStatusInput(status, registry) ?? status` pattern\n * used by query commands so that unknown/custom statuses still compare against\n * registry sets by their raw value.\n */\nexport function normalizeStatusForRegistry(status: ItemStatus, registry: RuntimeStatusRegistry): ItemStatus {\n return normalizeStatusInput(status, registry) ?? status;\n}\n\n/**\n * Determine whether a status is terminal according to the runtime status\n * registry, applying registry-aware normalization first (with raw fallback).\n */\nexport function isTerminalStatus(status: ItemStatus, registry: RuntimeStatusRegistry): boolean {\n return registry.terminal_statuses.has(normalizeStatusForRegistry(status, registry));\n}\n", "/**\n * @module core/shared/conflict-markers\n *\n * Provides shared primitives and utilities for Conflict Markers.\n */\n/**\n * Describes a detected unresolved merge-conflict marker and its source location.\n */\nexport interface ConflictMarkerMatch {\n line: number;\n marker: \"<<<<<<<\" | \"=======\" | \">>>>>>>\";\n text: string;\n}\n\nconst CONFLICT_MARKER_PATTERN = /^\\s*(<<<<<<<|=======|>>>>>>>)(?:\\s.*)?$/;\n\n/**\n * Implements find merge conflict markers for the public runtime surface of this module.\n */\nexport function findMergeConflictMarkers(content: string): ConflictMarkerMatch[] {\n if (content.length === 0) {\n return [];\n }\n const lines = content.split(/\\r?\\n/);\n const matches: ConflictMarkerMatch[] = [];\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index] ?? \"\";\n const markerMatch = line.match(CONFLICT_MARKER_PATTERN);\n if (!markerMatch) {\n continue;\n }\n const marker = markerMatch[1] as ConflictMarkerMatch[\"marker\"];\n matches.push({\n line: index + 1,\n marker,\n text: line,\n });\n }\n return matches;\n}\n\n/**\n * Implements find first merge conflict marker for the public runtime surface of this module.\n */\nexport function findFirstMergeConflictMarker(content: string): ConflictMarkerMatch | undefined {\n const matches = findMergeConflictMarkers(content);\n return matches[0];\n}\n", "/**\n * @module core/item/item-format\n *\n * Defines item parsing, formatting, and lifecycle helpers for Item Format.\n */\nimport { encode as encodeToon } from \"@toon-format/toon\";\nimport type {\n CalendarEvent,\n Comment,\n Dependency,\n ItemDocument,\n ItemMetadata,\n RuntimeSchemaSettings,\n ItemTestRunSummary,\n LinkedDoc,\n LinkedFile,\n LinkedTest,\n LogNote,\n PlanDecision,\n PlanDiscovery,\n PlanStep,\n PlanStepDoc,\n PlanStepFile,\n PlanStepLink,\n PlanStepStatus,\n PlanValidationCheck,\n RecurrenceRule,\n Reminder,\n} from \"../../types/index.js\";\nimport type { ItemFormat } from \"../../types/index.js\";\nimport {\n CONFIDENCE_TEXT_VALUES,\n ISSUE_SEVERITY_VALUES,\n RECURRENCE_FREQUENCY_VALUES,\n RECURRENCE_WEEKDAY_VALUES,\n STATUS_VALUES,\n weekdayOrderIndex,\n} from \"../../types/index.js\";\nimport { coerceRuntimeFieldValue } from \"../schema/runtime-field-values.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeFieldRegistry,\n type RuntimeStatusRegistry,\n} from \"../schema/runtime-schema.js\";\nimport { BASELINE_ITEM_FORMAT_VERSION, normalizeItemFormatVersion } from \"./item-format-version.js\";\nimport { normalizeStatusInput } from \"./status.js\";\nimport { decodeToonItemContent } from \"./toon-decode.js\";\nimport { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from \"../shared/constants.js\";\nimport { findFirstMergeConflictMarker } from \"../shared/conflict-markers.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { orderObject } from \"../shared/serialization.js\";\nimport { compareTimestampStrings, isTimestampLiteral } from \"../shared/time.js\";\n\nconst LINKED_TEST_PM_CONTEXT_MODE_VALUES = new Set([\"schema\", \"tracker\", \"auto\"]);\n\nfunction normalizePathValue(value: string): string {\n return value.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction firstNonZeroComparison(comparisons: readonly number[]): number {\n for (const comparison of comparisons) {\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n}\n\nconst REQUIRED_STRING_FIELDS = [\n \"id\",\n \"title\",\n \"description\",\n \"created_at\",\n \"updated_at\",\n] as const;\n\nconst STATIC_FRONT_MATTER_FIELD_SET = new Set(FRONT_MATTER_KEY_ORDER);\n\ninterface RuntimeSchemaValidationContext {\n statusRegistry?: RuntimeStatusRegistry;\n fieldRegistry?: RuntimeFieldRegistry;\n unknownFieldPolicy: \"allow\" | \"warn\" | \"reject\";\n extensionFieldNames: ReadonlySet<string>;\n onWarning?: (warning: string) => void;\n}\n\n/**\n * Documents the item document format options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemDocumentFormatOptions {\n format?: ItemFormat;\n schema?: RuntimeSchemaSettings;\n extensionFieldNames?: readonly string[];\n onWarning?: (warning: string) => void;\n}\n\nfunction resolveRuntimeSchemaValidationContext(\n options: ItemDocumentFormatOptions | undefined,\n): RuntimeSchemaValidationContext | undefined {\n if (!options?.schema) {\n return undefined;\n }\n return {\n statusRegistry: resolveRuntimeStatusRegistry(options.schema),\n fieldRegistry: resolveRuntimeFieldRegistry(options.schema),\n unknownFieldPolicy: options.schema.unknown_field_policy ?? \"allow\",\n extensionFieldNames: new Set(options.extensionFieldNames ?? []),\n onWarning: options.onWarning,\n };\n}\n\nfunction runtimeFieldRequiredForType(definition: RuntimeFieldRegistry[\"definitions\"][number], typeName: string): boolean {\n if (!definition.required) {\n return false;\n }\n if (definition.required_types.length === 0) {\n return true;\n }\n return definition.required_types.map((value) => value.toLowerCase()).includes(typeName.trim().toLowerCase());\n}\n\nfunction validationError(message: string): never {\n throw new PmCliError(`Invalid item front matter: ${message}`, EXIT_CODE.GENERIC_FAILURE);\n}\n\nfunction buildKnownFrontMatterKeys(runtimeContext: RuntimeSchemaValidationContext): Set<string> {\n const knownKeys = new Set(STATIC_FRONT_MATTER_FIELD_SET);\n for (const definition of runtimeContext.fieldRegistry?.definitions ?? []) {\n knownKeys.add(definition.metadata_key);\n }\n for (const fieldName of runtimeContext.extensionFieldNames) {\n knownKeys.add(fieldName);\n }\n return knownKeys;\n}\n\nfunction assertFrontMatterCondition(condition: boolean, message: string): void {\n if (!condition) {\n validationError(message);\n }\n}\n\nfunction assertTimestampField(record: Record<string, unknown>, fieldName: \"created_at\" | \"updated_at\" | \"deadline\"): void {\n const rawValue = record[fieldName];\n assertFrontMatterCondition(typeof rawValue === \"string\", `${fieldName} must be a string`);\n const timestamp = rawValue as string;\n assertFrontMatterCondition(isTimestampLiteral(timestamp), `${fieldName} must be a valid ISO timestamp`);\n}\n\nfunction assertValidRecurrenceRule(recurrence: unknown): void {\n assertFrontMatterCondition(\n typeof recurrence === \"object\" && recurrence !== null && !Array.isArray(recurrence),\n \"event.recurrence must be an object\",\n );\n const recurrenceRecord = recurrence as Record<string, unknown>;\n assertFrontMatterCondition(typeof recurrenceRecord.freq === \"string\", \"event.recurrence.freq must be a string\");\n const frequency = (recurrenceRecord.freq as string).trim().toLowerCase();\n assertFrontMatterCondition(\n RECURRENCE_FREQUENCY_VALUES.includes(frequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number]),\n `event.recurrence.freq must be one of: ${RECURRENCE_FREQUENCY_VALUES.join(\", \")}`,\n );\n\n if (recurrenceRecord.interval !== undefined) {\n assertFrontMatterCondition(\n typeof recurrenceRecord.interval === \"number\" &&\n Number.isInteger(recurrenceRecord.interval) &&\n (recurrenceRecord.interval as number) >= 1,\n \"event.recurrence.interval must be an integer >= 1\",\n );\n }\n\n if (recurrenceRecord.count !== undefined) {\n assertFrontMatterCondition(\n typeof recurrenceRecord.count === \"number\" && Number.isInteger(recurrenceRecord.count) && (recurrenceRecord.count as number) >= 1,\n \"event.recurrence.count must be an integer >= 1\",\n );\n }\n\n if (recurrenceRecord.until !== undefined) {\n assertFrontMatterCondition(typeof recurrenceRecord.until === \"string\", \"event.recurrence.until must be a string\");\n assertFrontMatterCondition(\n isTimestampLiteral(recurrenceRecord.until as string),\n \"event.recurrence.until must be a valid ISO timestamp\",\n );\n }\n\n if (recurrenceRecord.by_weekday !== undefined) {\n assertFrontMatterCondition(Array.isArray(recurrenceRecord.by_weekday), \"event.recurrence.by_weekday must be an array\");\n for (const weekday of recurrenceRecord.by_weekday as unknown[]) {\n assertFrontMatterCondition(typeof weekday === \"string\", \"event.recurrence.by_weekday entries must be strings\");\n const normalizedWeekday = (weekday as string).trim().toLowerCase();\n assertFrontMatterCondition(\n RECURRENCE_WEEKDAY_VALUES.includes(normalizedWeekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n `event.recurrence.by_weekday entries must be one of: ${RECURRENCE_WEEKDAY_VALUES.join(\", \")}`,\n );\n }\n }\n\n if (recurrenceRecord.by_month_day !== undefined) {\n assertFrontMatterCondition(Array.isArray(recurrenceRecord.by_month_day), \"event.recurrence.by_month_day must be an array\");\n for (const day of recurrenceRecord.by_month_day as unknown[]) {\n assertFrontMatterCondition(\n typeof day === \"number\" && Number.isInteger(day) && day >= 1 && day <= 31,\n \"event.recurrence.by_month_day entries must be integers 1..31\",\n );\n }\n }\n\n if (recurrenceRecord.exdates !== undefined) {\n assertFrontMatterCondition(Array.isArray(recurrenceRecord.exdates), \"event.recurrence.exdates must be an array\");\n for (const exdate of recurrenceRecord.exdates as unknown[]) {\n assertFrontMatterCondition(typeof exdate === \"string\", \"event.recurrence.exdates entries must be strings\");\n assertFrontMatterCondition(isTimestampLiteral(exdate as string), \"event.recurrence.exdates entries must be valid ISO timestamps\");\n }\n }\n}\n\nfunction assertValidFrontMatter(\n frontMatter: unknown,\n runtimeContext?: RuntimeSchemaValidationContext,\n): asserts frontMatter is ItemMetadata {\n assertFrontMatterCondition(\n typeof frontMatter === \"object\" && frontMatter !== null && !Array.isArray(frontMatter),\n \"front matter must be an object\",\n );\n\n const record = frontMatter as Record<string, unknown>;\n for (const fieldName of REQUIRED_STRING_FIELDS) {\n assertFrontMatterCondition(typeof record[fieldName] === \"string\", `${fieldName} is required and must be a string`);\n }\n\n const itemType = record.type;\n assertFrontMatterCondition(typeof itemType === \"string\" && itemType.trim().length > 0, \"type must be a non-empty string\");\n\n const formatVersion = record.pm_format_version;\n if (formatVersion !== undefined) {\n assertFrontMatterCondition(\n typeof formatVersion === \"number\" && Number.isInteger(formatVersion) && formatVersion >= BASELINE_ITEM_FORMAT_VERSION,\n `pm_format_version must be an integer >= ${BASELINE_ITEM_FORMAT_VERSION}`,\n );\n }\n\n const status = record.status;\n assertFrontMatterCondition(\n typeof status === \"string\" && status.trim().length > 0,\n \"status must be a non-empty string\",\n );\n const statusRegistry = runtimeContext?.statusRegistry;\n const normalizedStatus = normalizeStatusInput(status as string, statusRegistry);\n const statusDomain = statusRegistry\n ? statusRegistry.definitions.map((definition) => definition.id)\n : [...STATUS_VALUES];\n assertFrontMatterCondition(normalizedStatus !== undefined, `status must be one of: ${statusDomain.join(\", \")}`);\n\n const priority = record.priority;\n assertFrontMatterCondition(\n typeof priority === \"number\" && Number.isInteger(priority) && [0, 1, 2, 3, 4].includes(priority),\n \"priority must be an integer 0..4\",\n );\n\n const tags = record.tags;\n assertFrontMatterCondition(Array.isArray(tags), \"tags must be an array\");\n for (const tag of tags as unknown[]) {\n assertFrontMatterCondition(typeof tag === \"string\", \"tags entries must be strings\");\n }\n\n const confidence = record.confidence;\n if (confidence !== undefined) {\n if (typeof confidence === \"number\") {\n assertFrontMatterCondition(\n Number.isInteger(confidence) && confidence >= 0 && confidence <= 100,\n \"confidence number value must be an integer 0..100\",\n );\n } else if (typeof confidence === \"string\") {\n const normalizedConfidence = confidence.trim().toLowerCase();\n const isKnownTextConfidence =\n normalizedConfidence === \"med\" || CONFIDENCE_TEXT_VALUES.includes(normalizedConfidence as (typeof CONFIDENCE_TEXT_VALUES)[number]);\n assertFrontMatterCondition(\n isKnownTextConfidence,\n `confidence string value must be one of: ${[...CONFIDENCE_TEXT_VALUES, \"med\"].join(\", \")}`,\n );\n } else {\n assertFrontMatterCondition(false, \"confidence must be a number or string\");\n }\n }\n\n const severity = record.severity;\n if (severity !== undefined) {\n if (typeof severity !== \"string\") {\n validationError(\"severity must be a string\");\n }\n const normalizedSeverity = severity.trim().toLowerCase();\n const isKnownSeverity =\n normalizedSeverity === \"med\" || ISSUE_SEVERITY_VALUES.includes(normalizedSeverity as (typeof ISSUE_SEVERITY_VALUES)[number]);\n assertFrontMatterCondition(\n isKnownSeverity,\n `severity value must be one of: ${[...ISSUE_SEVERITY_VALUES, \"med\"].join(\", \")}`,\n );\n }\n\n const regression = record.regression;\n if (regression !== undefined) {\n if (typeof regression !== \"boolean\") {\n validationError(\"regression must be a boolean\");\n }\n }\n\n assertTimestampField(record, \"created_at\");\n assertTimestampField(record, \"updated_at\");\n if (record.deadline !== undefined) {\n assertTimestampField(record, \"deadline\");\n }\n if (record.reminders !== undefined) {\n const reminders = record.reminders;\n assertFrontMatterCondition(Array.isArray(reminders), \"reminders must be an array\");\n for (const reminder of reminders as unknown[]) {\n assertFrontMatterCondition(typeof reminder === \"object\" && reminder !== null && !Array.isArray(reminder), \"reminders entries must be objects\");\n const reminderRecord = reminder as Record<string, unknown>;\n assertFrontMatterCondition(typeof reminderRecord.at === \"string\", \"reminder.at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(reminderRecord.at as string), \"reminder.at must be a valid ISO timestamp\");\n assertFrontMatterCondition(typeof reminderRecord.text === \"string\", \"reminder.text must be a string\");\n assertFrontMatterCondition((reminderRecord.text as string).trim().length > 0, \"reminder.text must not be empty\");\n }\n }\n if (record.events !== undefined) {\n const events = record.events;\n assertFrontMatterCondition(Array.isArray(events), \"events must be an array\");\n for (const event of events as unknown[]) {\n assertFrontMatterCondition(typeof event === \"object\" && event !== null && !Array.isArray(event), \"events entries must be objects\");\n const eventRecord = event as Record<string, unknown>;\n assertFrontMatterCondition(typeof eventRecord.start_at === \"string\", \"event.start_at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(eventRecord.start_at as string), \"event.start_at must be a valid ISO timestamp\");\n\n if (eventRecord.end_at !== undefined) {\n assertFrontMatterCondition(typeof eventRecord.end_at === \"string\", \"event.end_at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(eventRecord.end_at as string), \"event.end_at must be a valid ISO timestamp\");\n assertFrontMatterCondition(\n compareTimestampStrings(eventRecord.end_at as string, eventRecord.start_at as string) > 0,\n \"event.end_at must be after event.start_at\",\n );\n }\n\n for (const stringField of [\"title\", \"description\", \"location\", \"timezone\"] as const) {\n if (eventRecord[stringField] !== undefined) {\n assertFrontMatterCondition(typeof eventRecord[stringField] === \"string\", `event.${stringField} must be a string`);\n assertFrontMatterCondition(\n (eventRecord[stringField] as string).trim().length > 0,\n `event.${stringField} must not be empty`,\n );\n }\n }\n\n if (eventRecord.all_day !== undefined) {\n assertFrontMatterCondition(typeof eventRecord.all_day === \"boolean\", \"event.all_day must be a boolean\");\n }\n\n if (eventRecord.recurrence !== undefined) {\n assertValidRecurrenceRule(eventRecord.recurrence);\n if ((eventRecord.recurrence as Record<string, unknown>).until !== undefined) {\n assertFrontMatterCondition(\n compareTimestampStrings(\n (eventRecord.recurrence as Record<string, unknown>).until as string,\n eventRecord.start_at as string,\n ) >= 0,\n \"event.recurrence.until must be at or after event.start_at\",\n );\n }\n }\n }\n }\n if (record.closed_at !== undefined) {\n const closedAt = record.closed_at;\n assertFrontMatterCondition(typeof closedAt === \"string\", \"closed_at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(closedAt as string), \"closed_at must be a valid ISO timestamp\");\n }\n for (const fieldName of [\"source_type\", \"source_owner\", \"design\", \"external_ref\"] as const) {\n const value = record[fieldName];\n if (value !== undefined) {\n assertFrontMatterCondition(typeof value === \"string\", `${fieldName} must be a string`);\n }\n }\n const typeOptions = record.type_options;\n if (typeOptions !== undefined) {\n assertFrontMatterCondition(\n typeof typeOptions === \"object\" && typeOptions !== null && !Array.isArray(typeOptions),\n \"type_options must be an object\",\n );\n for (const [optionKey, optionValue] of Object.entries(typeOptions as Record<string, unknown>)) {\n assertFrontMatterCondition(optionKey.trim().length > 0, \"type_options keys must be non-empty\");\n assertFrontMatterCondition(typeof optionValue === \"string\", \"type_options values must be strings\");\n const optionText = optionValue as string;\n assertFrontMatterCondition(optionText.trim().length > 0, \"type_options values must be non-empty strings\");\n }\n }\n\n if (runtimeContext?.fieldRegistry) {\n for (const definition of runtimeContext.fieldRegistry.definitions) {\n const fieldValue = record[definition.metadata_key];\n if (fieldValue === undefined) {\n if (runtimeFieldRequiredForType(definition, itemType as string)) {\n validationError(`missing required schema field: ${definition.metadata_key}`);\n }\n continue;\n }\n try {\n record[definition.metadata_key] = coerceRuntimeFieldValue(\n definition,\n fieldValue,\n `metadata field \"${definition.metadata_key}\"`,\n );\n } catch (error: unknown) {\n validationError(String((error as { message?: unknown })?.message).replace(/^Invalid\\s+/u, \"\"));\n }\n }\n }\n\n if (runtimeContext && runtimeContext.unknownFieldPolicy !== \"allow\") {\n const knownKeys = buildKnownFrontMatterKeys(runtimeContext);\n const unknownKeys = Object.keys(record).filter((key) => !knownKeys.has(key)).sort((left, right) => left.localeCompare(right));\n if (unknownKeys.length > 0) {\n if (runtimeContext.unknownFieldPolicy === \"reject\") {\n validationError(`unknown schema fields are not allowed: ${unknownKeys.join(\", \")}`);\n } else {\n runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(\",\")}`);\n }\n }\n }\n}\n\nfunction sortDependencies(values: Dependency[] | undefined): Dependency[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values]\n .map((value) => ({\n id: value.id.trim().toLowerCase(),\n kind: value.kind,\n created_at: value.created_at,\n author: value.author?.trim() || undefined,\n source_kind: value.source_kind?.trim() || undefined,\n }))\n .sort((a, b) => {\n const byCreated = compareTimestampStrings(a.created_at, b.created_at);\n if (byCreated !== 0) return byCreated;\n const byId = a.id.localeCompare(b.id);\n if (byId !== 0) return byId;\n const byKind = a.kind.localeCompare(b.kind);\n if (byKind !== 0) return byKind;\n return (a.source_kind ?? \"\").localeCompare(b.source_kind ?? \"\");\n });\n}\n\nfunction sortLogValues<T extends Comment | LogNote>(values: T[] | undefined): T[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values].sort((a, b) => {\n const byCreated = compareTimestampStrings(a.created_at, b.created_at);\n if (byCreated !== 0) return byCreated;\n const byText = a.text.localeCompare(b.text);\n if (byText !== 0) return byText;\n return a.author.localeCompare(b.author);\n });\n}\n\nfunction sortReminders(values: Reminder[] | undefined): Reminder[] | undefined {\n if (!values || values.length === 0) return undefined;\n const normalized = [...values]\n .map((value) => ({\n at: value.at,\n text: value.text.trim(),\n }))\n .filter((value) => value.text.length > 0)\n .sort((a, b) => {\n const byAt = compareTimestampStrings(a.at, b.at);\n if (byAt !== 0) return byAt;\n return a.text.localeCompare(b.text);\n });\n return normalized.length === 0 ? undefined : normalized;\n}\n\nfunction normalizeRecurrenceRule(value: RecurrenceRule | undefined): RecurrenceRule | undefined {\n if (!value) {\n return undefined;\n }\n const normalizedFrequency = value.freq.trim().toLowerCase();\n if (!RECURRENCE_FREQUENCY_VALUES.includes(normalizedFrequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number])) {\n return undefined;\n }\n\n const byWeekday = Array.from(\n new Set(\n (value.by_weekday ?? [])\n .map((weekday) => weekday.trim().toLowerCase())\n .filter((weekday) => RECURRENCE_WEEKDAY_VALUES.includes(weekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number])),\n ),\n ).sort(\n (a, b) =>\n weekdayOrderIndex(a as (typeof RECURRENCE_WEEKDAY_VALUES)[number]) -\n weekdayOrderIndex(b as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n );\n\n const byMonthDay = Array.from(\n new Set(\n (value.by_month_day ?? [])\n .filter((day) => Number.isInteger(day) && day >= 1 && day <= 31)\n .map((day) => day as number),\n ),\n ).sort((a, b) => a - b);\n\n const exdates = Array.from(\n new Set(\n (value.exdates ?? [])\n .map((timestamp) => timestamp.trim())\n .filter((timestamp) => isTimestampLiteral(timestamp)),\n ),\n ).sort((a, b) => compareTimestampStrings(a, b));\n\n const normalized: RecurrenceRule = {\n freq: normalizedFrequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number],\n interval: value.interval !== undefined && value.interval > 1 ? value.interval : undefined,\n count: value.count,\n until: value.until?.trim() || undefined,\n by_weekday: byWeekday.length > 0 ? (byWeekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number][]) : undefined,\n by_month_day: byMonthDay.length > 0 ? byMonthDay : undefined,\n exdates: exdates.length > 0 ? exdates : undefined,\n };\n for (const [key, fieldValue] of Object.entries(normalized)) {\n if (fieldValue === undefined) {\n delete (normalized as unknown as Record<string, unknown>)[key];\n }\n }\n return normalized;\n}\n\nfunction sortEvents(values: CalendarEvent[] | undefined): CalendarEvent[] | undefined {\n if (!values || values.length === 0) {\n return undefined;\n }\n const normalized = [...values]\n .map((value) => {\n const event: CalendarEvent = {\n start_at: value.start_at,\n end_at: value.end_at || undefined,\n title: value.title?.trim() || undefined,\n description: value.description?.trim() || undefined,\n location: value.location?.trim() || undefined,\n all_day: value.all_day,\n timezone: value.timezone?.trim() || undefined,\n recurrence: normalizeRecurrenceRule(value.recurrence),\n };\n for (const [key, fieldValue] of Object.entries(event)) {\n if (fieldValue === undefined) {\n delete (event as unknown as Record<string, unknown>)[key];\n }\n }\n return event;\n })\n .sort((a, b) => {\n const byStart = compareTimestampStrings(a.start_at, b.start_at);\n if (byStart !== 0) return byStart;\n const byEnd = (a.end_at ?? \"\").localeCompare(b.end_at ?? \"\");\n if (byEnd !== 0) return byEnd;\n const byTitle = (a.title ?? \"\").localeCompare(b.title ?? \"\");\n if (byTitle !== 0) return byTitle;\n const byAllDay = Number(Boolean(a.all_day)) - Number(Boolean(b.all_day));\n if (byAllDay !== 0) return byAllDay;\n const byTimezone = (a.timezone ?? \"\").localeCompare(b.timezone ?? \"\");\n if (byTimezone !== 0) return byTimezone;\n const byLocation = (a.location ?? \"\").localeCompare(b.location ?? \"\");\n if (byLocation !== 0) return byLocation;\n const byDescription = (a.description ?? \"\").localeCompare(b.description ?? \"\");\n if (byDescription !== 0) return byDescription;\n return JSON.stringify(a.recurrence ?? {}).localeCompare(JSON.stringify(b.recurrence ?? {}));\n });\n return normalized;\n}\n\nfunction normalizeFiles(values: LinkedFile[] | undefined): LinkedFile[] | undefined {\n if (!values || values.length === 0) return undefined;\n return values\n .map((value) => ({\n path: normalizePathValue(value.path),\n scope: value.scope,\n note: value.note?.trim() || undefined,\n }));\n}\n\nfunction normalizeTestRunSummaries(values: ItemTestRunSummary[] | undefined): ItemTestRunSummary[] | undefined {\n if (!values || values.length === 0) return undefined;\n const normalized = values\n .map((value) => {\n const runId = typeof value.run_id === \"string\" ? value.run_id.trim() : \"\";\n const kind = value.kind === \"test\" || value.kind === \"test-all\" ? value.kind : \"test\";\n const status =\n value.status === \"passed\" || value.status === \"failed\" || value.status === \"stopped\" || value.status === \"canceled\"\n ? value.status\n : \"failed\";\n const startedAt = typeof value.started_at === \"string\" ? value.started_at : \"\";\n const finishedAt = typeof value.finished_at === \"string\" ? value.finished_at : \"\";\n const recordedAt = typeof value.recorded_at === \"string\" ? value.recorded_at : \"\";\n const passed = typeof value.passed === \"number\" && Number.isFinite(value.passed) ? Math.max(0, Math.floor(value.passed)) : 0;\n const failed = typeof value.failed === \"number\" && Number.isFinite(value.failed) ? Math.max(0, Math.floor(value.failed)) : 0;\n const skipped = typeof value.skipped === \"number\" && Number.isFinite(value.skipped) ? Math.max(0, Math.floor(value.skipped)) : 0;\n return {\n run_id: runId,\n kind,\n status,\n started_at: startedAt,\n finished_at: finishedAt,\n recorded_at: recordedAt,\n attempt:\n typeof value.attempt === \"number\" && Number.isFinite(value.attempt) && value.attempt >= 1\n ? Math.floor(value.attempt)\n : undefined,\n resumed_from: value.resumed_from?.trim() || undefined,\n passed,\n failed,\n skipped,\n items:\n typeof value.items === \"number\" && Number.isFinite(value.items) && value.items >= 0\n ? Math.floor(value.items)\n : undefined,\n linked_tests:\n typeof value.linked_tests === \"number\" && Number.isFinite(value.linked_tests) && value.linked_tests >= 0\n ? Math.floor(value.linked_tests)\n : undefined,\n fail_on_skipped_triggered: value.fail_on_skipped_triggered === true ? true : undefined,\n };\n })\n .filter((value) => value.run_id.length > 0 && value.started_at.length > 0 && value.finished_at.length > 0 && value.recorded_at.length > 0)\n .sort((a, b) =>\n firstNonZeroComparison([\n compareTimestampStrings(a.recorded_at, b.recorded_at),\n a.run_id.localeCompare(b.run_id),\n a.kind.localeCompare(b.kind),\n ]),\n );\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction sortTests(values: LinkedTest[] | undefined): LinkedTest[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values]\n .map((value) => ({\n command: value.command?.trim() || undefined,\n path: value.path ? normalizePathValue(value.path) : undefined,\n scope: value.scope,\n timeout_seconds:\n typeof value.timeout_seconds === \"number\" && Number.isFinite(value.timeout_seconds) && value.timeout_seconds > 0\n ? value.timeout_seconds\n : undefined,\n pm_context_mode: (() => {\n const normalized = value.pm_context_mode?.trim().toLowerCase();\n if (!normalized || !LINKED_TEST_PM_CONTEXT_MODE_VALUES.has(normalized)) {\n return undefined;\n }\n return normalized as LinkedTest[\"pm_context_mode\"];\n })(),\n env_set: value.env_set\n ? Object.fromEntries(\n Object.entries(value.env_set)\n .map(([key, envValue]) => [key.trim(), String(envValue).trim()] as const)\n .filter(([key, envValue]) => key.length > 0 && envValue.length > 0)\n .sort(([left], [right]) => left.localeCompare(right)),\n )\n : undefined,\n env_clear: value.env_clear\n ? [...new Set(value.env_clear.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n shared_host_safe: value.shared_host_safe === true ? true : undefined,\n assert_stdout_contains: value.assert_stdout_contains\n ? [...new Set(value.assert_stdout_contains.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n assert_stdout_regex: value.assert_stdout_regex\n ? [...new Set(value.assert_stdout_regex.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n assert_stderr_contains: value.assert_stderr_contains\n ? [...new Set(value.assert_stderr_contains.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n assert_stderr_regex: value.assert_stderr_regex\n ? [...new Set(value.assert_stderr_regex.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n assert_stdout_min_lines:\n typeof value.assert_stdout_min_lines === \"number\" &&\n Number.isFinite(value.assert_stdout_min_lines) &&\n value.assert_stdout_min_lines >= 0\n ? Math.floor(value.assert_stdout_min_lines)\n : undefined,\n assert_json_field_equals: value.assert_json_field_equals\n ? Object.fromEntries(\n Object.entries(value.assert_json_field_equals)\n .map(([key, expectedValue]) => [key.trim(), String(expectedValue).trim()] as const)\n .filter(([key, expectedValue]) => key.length > 0 && expectedValue.length > 0)\n .sort(([left], [right]) => left.localeCompare(right)),\n )\n : undefined,\n assert_json_field_gte: value.assert_json_field_gte\n ? Object.fromEntries(\n Object.entries(value.assert_json_field_gte)\n .map(([key, expectedValue]) => [key.trim(), Number(expectedValue)] as const)\n .filter(([key, expectedValue]) => key.length > 0 && Number.isFinite(expectedValue))\n .sort(([left], [right]) => left.localeCompare(right)),\n )\n : undefined,\n note: value.note?.trim() || undefined,\n }))\n .sort((a, b) =>\n firstNonZeroComparison([\n a.scope.localeCompare(b.scope),\n (a.path ?? \"\").localeCompare(b.path ?? \"\"),\n (a.command ?? \"\").localeCompare(b.command ?? \"\"),\n (a.timeout_seconds ?? 0) - (b.timeout_seconds ?? 0),\n (a.pm_context_mode ?? \"\").localeCompare(b.pm_context_mode ?? \"\"),\n Number(Boolean(a.shared_host_safe)) - Number(Boolean(b.shared_host_safe)),\n JSON.stringify(a.env_clear ?? []).localeCompare(JSON.stringify(b.env_clear ?? [])),\n JSON.stringify(a.env_set ?? {}).localeCompare(JSON.stringify(b.env_set ?? {})),\n JSON.stringify(a.assert_stdout_contains ?? []).localeCompare(JSON.stringify(b.assert_stdout_contains ?? [])),\n JSON.stringify(a.assert_stdout_regex ?? []).localeCompare(JSON.stringify(b.assert_stdout_regex ?? [])),\n JSON.stringify(a.assert_stderr_contains ?? []).localeCompare(JSON.stringify(b.assert_stderr_contains ?? [])),\n JSON.stringify(a.assert_stderr_regex ?? []).localeCompare(JSON.stringify(b.assert_stderr_regex ?? [])),\n (a.assert_stdout_min_lines ?? 0) - (b.assert_stdout_min_lines ?? 0),\n JSON.stringify(a.assert_json_field_equals ?? {}).localeCompare(JSON.stringify(b.assert_json_field_equals ?? {})),\n JSON.stringify(a.assert_json_field_gte ?? {}).localeCompare(JSON.stringify(b.assert_json_field_gte ?? {})),\n (a.note ?? \"\").localeCompare(b.note ?? \"\"),\n ]),\n );\n}\n\nfunction sortDocs(values: LinkedDoc[] | undefined): LinkedDoc[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values]\n .map((value) => ({\n path: normalizePathValue(value.path),\n scope: value.scope,\n note: value.note?.trim() || undefined,\n }))\n .sort((a, b) => {\n const byScope = a.scope.localeCompare(b.scope);\n if (byScope !== 0) return byScope;\n const byPath = a.path.localeCompare(b.path);\n if (byPath !== 0) return byPath;\n return (a.note ?? \"\").localeCompare(b.note ?? \"\");\n });\n}\n\nfunction trimStringOrUndefined(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizePlanStepLinks(value: unknown): PlanStepLink[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepLink[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const id = trimStringOrUndefined(record.id);\n const kind = trimStringOrUndefined(record.kind);\n if (!id || !kind) continue;\n const link: PlanStepLink = { id, kind: kind as PlanStepLink[\"kind\"] };\n const note = trimStringOrUndefined(record.note);\n if (note) link.note = note;\n if (record.required_before_step === true) link.required_before_step = true;\n out.push(link);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepFiles(value: unknown): PlanStepFile[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepFile[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const path = trimStringOrUndefined(record.path);\n if (!path) continue;\n const file: PlanStepFile = { path: normalizePathValue(path) };\n if (record.scope === \"project\" || record.scope === \"global\") file.scope = record.scope;\n const note = trimStringOrUndefined(record.note);\n if (note) file.note = note;\n out.push(file);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepTests(value: unknown): { command?: string; path?: string; note?: string }[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: { command?: string; path?: string; note?: string }[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const command = trimStringOrUndefined(record.command);\n const path = trimStringOrUndefined(record.path);\n if (!command && !path) continue;\n const test: { command?: string; path?: string; note?: string } = {};\n if (command) test.command = command;\n if (path) test.path = normalizePathValue(path);\n const note = trimStringOrUndefined(record.note);\n if (note) test.note = note;\n out.push(test);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepDocs(value: unknown): PlanStepDoc[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepDoc[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const path = trimStringOrUndefined(record.path);\n if (!path) continue;\n const doc: PlanStepDoc = { path: normalizePathValue(path) };\n if (record.scope === \"project\" || record.scope === \"global\") doc.scope = record.scope;\n const note = trimStringOrUndefined(record.note);\n if (note) doc.note = note;\n out.push(doc);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanSteps(value: unknown): PlanStep[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStep[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const id = trimStringOrUndefined(record.id);\n const title = trimStringOrUndefined(record.title);\n const status = trimStringOrUndefined(record.status);\n const orderRaw = record.order;\n const order = typeof orderRaw === \"number\" && Number.isFinite(orderRaw) ? orderRaw : Number(orderRaw);\n if (!id || !title || !status || !Number.isFinite(order)) continue;\n const created_at = typeof record.created_at === \"string\" ? record.created_at : \"\";\n const updated_at = typeof record.updated_at === \"string\" ? record.updated_at : \"\";\n if (!created_at || !updated_at) continue;\n const step: PlanStep = {\n id,\n order,\n title,\n status: status as PlanStepStatus,\n created_at,\n updated_at,\n };\n const body = trimStringOrUndefined(record.body);\n if (body) step.body = body;\n const owner = trimStringOrUndefined(record.owner);\n if (owner) step.owner = owner;\n const evidence = trimStringOrUndefined(record.evidence);\n if (evidence) step.evidence = evidence;\n const blockedReason = trimStringOrUndefined(record.blocked_reason);\n if (blockedReason) step.blocked_reason = blockedReason;\n const supersededBy = trimStringOrUndefined(record.superseded_by);\n if (supersededBy) step.superseded_by = supersededBy;\n const completedAt = typeof record.completed_at === \"string\" ? record.completed_at : undefined;\n if (completedAt && completedAt.length > 0) step.completed_at = completedAt;\n const links = normalizePlanStepLinks(record.linked_items);\n if (links) step.linked_items = links;\n const files = normalizePlanStepFiles(record.files);\n if (files) step.files = files;\n const tests = normalizePlanStepTests(record.tests);\n if (tests) step.tests = tests;\n const docs = normalizePlanStepDocs(record.docs);\n if (docs) step.docs = docs;\n out.push(step);\n }\n out.sort((left, right) => left.order - right.order);\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanDecisions(value: unknown): PlanDecision[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanDecision[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const ts = typeof record.ts === \"string\" ? record.ts : \"\";\n const author = typeof record.author === \"string\" ? record.author : \"\";\n const decision = trimStringOrUndefined(record.decision);\n if (!ts || !author || !decision) continue;\n const item: PlanDecision = { ts, author, decision };\n const rationale = trimStringOrUndefined(record.rationale);\n if (rationale) item.rationale = rationale;\n const evidence = trimStringOrUndefined(record.evidence);\n if (evidence) item.evidence = evidence;\n const stepId = trimStringOrUndefined(record.step_id);\n if (stepId) item.step_id = stepId;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanDiscoveries(value: unknown): PlanDiscovery[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanDiscovery[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const ts = typeof record.ts === \"string\" ? record.ts : \"\";\n const author = typeof record.author === \"string\" ? record.author : \"\";\n const text = trimStringOrUndefined(record.text);\n if (!ts || !author || !text) continue;\n const item: PlanDiscovery = { ts, author, text };\n const stepId = trimStringOrUndefined(record.step_id);\n if (stepId) item.step_id = stepId;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanValidation(value: unknown): PlanValidationCheck[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanValidationCheck[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const text = trimStringOrUndefined(record.text);\n if (!text) continue;\n const item: PlanValidationCheck = { text };\n const command = trimStringOrUndefined(record.command);\n if (command) item.command = command;\n const expected = trimStringOrUndefined(record.expected);\n if (expected) item.expected = expected;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizeTypeOptions(values: Record<string, string> | undefined): Record<string, string> | undefined {\n if (!values) {\n return undefined;\n }\n const normalizedEntries = Object.entries(values)\n .map(([key, value]) => [key.trim(), value.trim()] as const)\n .filter(([key, value]) => key.length > 0 && value.length > 0)\n .sort((left, right) => left[0].localeCompare(right[0]));\n if (normalizedEntries.length === 0) {\n return undefined;\n }\n return Object.fromEntries(normalizedEntries);\n}\n\nfunction normalizeBody(body: string): string {\n let start = 0;\n while (start < body.length && body[start] === \"\\n\") {\n start += 1;\n }\n return body.slice(start).trimEnd();\n}\n\nfunction normalizeConfidenceValue(value: ItemMetadata[\"confidence\"] | undefined): ItemMetadata[\"confidence\"] | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value === \"number\") {\n return value;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"med\") {\n return \"medium\";\n }\n if (CONFIDENCE_TEXT_VALUES.includes(normalized as (typeof CONFIDENCE_TEXT_VALUES)[number])) {\n return normalized as (typeof CONFIDENCE_TEXT_VALUES)[number];\n }\n return undefined;\n}\n\nfunction normalizeSeverityValue(value: ItemMetadata[\"severity\"] | undefined): ItemMetadata[\"severity\"] | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"med\") {\n return \"medium\";\n }\n if (ISSUE_SEVERITY_VALUES.includes(normalized as (typeof ISSUE_SEVERITY_VALUES)[number])) {\n return normalized as (typeof ISSUE_SEVERITY_VALUES)[number];\n }\n return undefined;\n}\n\n/**\n * Implements normalize front matter for the public runtime surface of this module.\n */\nexport function normalizeFrontMatter(\n frontMatter: ItemMetadata,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): ItemMetadata {\n const runtimeContext = resolveRuntimeSchemaValidationContext(options);\n const normalizedStatus = normalizeStatusInput(frontMatter.status, runtimeContext?.statusRegistry) ?? frontMatter.status;\n const tags = Array.from(new Set(frontMatter.tags.map((tag) => tag.trim().toLowerCase()).filter(Boolean))).sort((a, b) =>\n a.localeCompare(b),\n );\n const normalized: ItemMetadata = {\n id: frontMatter.id,\n title: frontMatter.title,\n description: frontMatter.description,\n type: frontMatter.type,\n pm_format_version: normalizeItemFormatVersion(frontMatter.pm_format_version),\n source_type: frontMatter.source_type?.trim() || undefined,\n type_options: normalizeTypeOptions(frontMatter.type_options),\n status: normalizedStatus,\n priority: frontMatter.priority,\n tags,\n created_at: frontMatter.created_at,\n updated_at: frontMatter.updated_at,\n dependencies: sortDependencies(frontMatter.dependencies),\n comments: sortLogValues(frontMatter.comments),\n notes: sortLogValues(frontMatter.notes),\n learnings: sortLogValues(frontMatter.learnings),\n files: normalizeFiles(frontMatter.files),\n tests: sortTests(frontMatter.tests),\n test_runs: normalizeTestRunSummaries(frontMatter.test_runs),\n docs: sortDocs(frontMatter.docs),\n deadline: frontMatter.deadline || undefined,\n reminders: sortReminders(frontMatter.reminders),\n events: sortEvents(frontMatter.events),\n closed_at: frontMatter.closed_at || undefined,\n assignee: frontMatter.assignee?.trim() || undefined,\n source_owner: frontMatter.source_owner?.trim() || undefined,\n author: frontMatter.author || undefined,\n estimated_minutes: frontMatter.estimated_minutes,\n acceptance_criteria: frontMatter.acceptance_criteria ?? undefined,\n design: frontMatter.design ?? undefined,\n external_ref: frontMatter.external_ref ?? undefined,\n definition_of_ready: frontMatter.definition_of_ready?.trim() || undefined,\n order: frontMatter.order,\n goal: frontMatter.goal?.trim() || undefined,\n objective: frontMatter.objective?.trim() || undefined,\n value: frontMatter.value?.trim() || undefined,\n impact: frontMatter.impact?.trim() || undefined,\n outcome: frontMatter.outcome?.trim() || undefined,\n why_now: frontMatter.why_now?.trim() || undefined,\n parent: frontMatter.parent?.trim() || undefined,\n reviewer: frontMatter.reviewer?.trim() || undefined,\n risk: frontMatter.risk ?? undefined,\n confidence: normalizeConfidenceValue(frontMatter.confidence),\n sprint: frontMatter.sprint?.trim() || undefined,\n release: frontMatter.release?.trim() || undefined,\n blocked_by: frontMatter.blocked_by?.trim() || undefined,\n blocked_reason: frontMatter.blocked_reason?.trim() || undefined,\n unblock_note: frontMatter.unblock_note?.trim() || undefined,\n reporter: frontMatter.reporter?.trim() || undefined,\n severity: normalizeSeverityValue(frontMatter.severity),\n environment: frontMatter.environment?.trim() || undefined,\n repro_steps: frontMatter.repro_steps?.trim() || undefined,\n resolution: frontMatter.resolution?.trim() || undefined,\n expected_result: frontMatter.expected_result?.trim() || undefined,\n actual_result: frontMatter.actual_result?.trim() || undefined,\n affected_version: frontMatter.affected_version?.trim() || undefined,\n fixed_version: frontMatter.fixed_version?.trim() || undefined,\n component: frontMatter.component?.trim() || undefined,\n regression: frontMatter.regression,\n customer_impact: frontMatter.customer_impact?.trim() || undefined,\n close_reason: frontMatter.close_reason || undefined,\n plan_mode: trimStringOrUndefined(frontMatter.plan_mode) as ItemMetadata[\"plan_mode\"],\n plan_scope: trimStringOrUndefined(frontMatter.plan_scope),\n plan_harness: trimStringOrUndefined(frontMatter.plan_harness) as ItemMetadata[\"plan_harness\"],\n plan_resume_context: trimStringOrUndefined(frontMatter.plan_resume_context),\n plan_steps: normalizePlanSteps(frontMatter.plan_steps),\n plan_decisions: normalizePlanDecisions(frontMatter.plan_decisions),\n plan_discoveries: normalizePlanDiscoveries(frontMatter.plan_discoveries),\n plan_validation: normalizePlanValidation(frontMatter.plan_validation),\n };\n const sourceRecord = frontMatter as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(sourceRecord)) {\n if (Object.prototype.hasOwnProperty.call(normalized, key) || value === undefined) {\n continue;\n }\n (normalized as unknown as Record<string, unknown>)[key] = value;\n }\n\n if (runtimeContext?.fieldRegistry) {\n for (const definition of runtimeContext.fieldRegistry.definitions) {\n const currentValue = (normalized as unknown as Record<string, unknown>)[definition.metadata_key];\n if (currentValue === undefined) {\n continue;\n }\n (normalized as unknown as Record<string, unknown>)[definition.metadata_key] = coerceRuntimeFieldValue(\n definition,\n currentValue,\n `metadata field \"${definition.metadata_key}\"`,\n );\n }\n }\n\n if (runtimeContext && runtimeContext.unknownFieldPolicy !== \"allow\") {\n const knownKeys = buildKnownFrontMatterKeys(runtimeContext);\n const unknownKeys = Object.keys(normalized as unknown as Record<string, unknown>)\n .filter((key) => !knownKeys.has(key))\n .sort((left, right) => left.localeCompare(right));\n if (unknownKeys.length > 0) {\n if (runtimeContext.unknownFieldPolicy === \"reject\") {\n validationError(`unknown schema fields are not allowed: ${unknownKeys.join(\", \")}`);\n }\n }\n }\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value === undefined) {\n delete (normalized as unknown as Record<string, unknown>)[key];\n }\n }\n return normalized;\n}\n\nfunction orderFrontMatter(frontMatter: ItemMetadata): Record<string, unknown> {\n return orderObject(frontMatter as unknown as Record<string, unknown>, FRONT_MATTER_KEY_ORDER);\n}\n\nfunction findJsonObjectEnd(content: string): number {\n let depth = 0;\n let inString = false;\n let escaped = false;\n\n for (let i = 0; i < content.length; i += 1) {\n const char = content[i];\n if (inString) {\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (char === \"\\\"\") {\n inString = false;\n }\n continue;\n }\n if (char === \"\\\"\") {\n inString = true;\n continue;\n }\n if (char === \"{\") {\n depth += 1;\n continue;\n }\n if (char === \"}\") {\n depth -= 1;\n if (depth === 0) {\n return i;\n }\n }\n }\n\n return -1;\n}\n\n/**\n * Implements split front matter for the public runtime surface of this module.\n */\nexport function splitFrontMatter(content: string): { frontMatter: string; body: string } {\n if (!content.startsWith(\"{\")) {\n return { frontMatter: \"\", body: content };\n }\n const end = findJsonObjectEnd(content);\n if (end < 0) {\n return { frontMatter: \"\", body: content };\n }\n const frontMatter = content.slice(0, end + 1);\n const body = content.slice(end + 1).replace(/^\\r?\\n+/, \"\");\n return { frontMatter, body };\n}\n\nfunction stripLeadingYamlDocument(content: string): { content: string; stripped: boolean } {\n const normalizedContent = content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;\n const opener = normalizedContent.match(/^[ \\t]*---[ \\t]*(?:\\r?\\n|$)/);\n if (!opener) {\n return { content: normalizedContent, stripped: false };\n }\n\n let cursor = opener[0].length;\n while (cursor < normalizedContent.length) {\n const nextNewline = normalizedContent.indexOf(\"\\n\", cursor);\n const lineEnd = nextNewline === -1 ? normalizedContent.length : nextNewline;\n const line = normalizedContent.slice(cursor, lineEnd).replace(/\\r$/, \"\");\n const afterLine = nextNewline === -1 ? lineEnd : lineEnd + 1;\n if (line.trim() === \"---\") {\n return { content: normalizedContent.slice(afterLine).replace(/^\\s+/, \"\"), stripped: true };\n }\n cursor = afterLine;\n }\n\n return { content: normalizedContent, stripped: false };\n}\n\nfunction parseJsonMarkdownItemDocument(\n content: string,\n runtimeContext?: RuntimeSchemaValidationContext,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): ItemDocument {\n const normalized = stripLeadingYamlDocument(content);\n if (normalized.stripped) {\n options.onWarning?.(\"json_markdown_leading_yaml_frontmatter_ignored\");\n }\n const { frontMatter, body } = splitFrontMatter(normalized.content);\n if (!frontMatter) {\n const trimmed = content.trimStart();\n if (trimmed.startsWith(\"{\")) {\n validationError(\"JSON front matter is not valid JSON\");\n }\n validationError(\"missing JSON front matter\");\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(frontMatter);\n } catch {\n validationError(\"JSON front matter is not valid JSON\");\n }\n assertValidFrontMatter(parsed, runtimeContext);\n\n return {\n metadata: normalizeFrontMatter(parsed, options),\n body: normalizeBody(body),\n };\n}\n\nfunction parseToonItemDocument(\n content: string,\n runtimeContext?: RuntimeSchemaValidationContext,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): ItemDocument {\n let parsed: unknown;\n try {\n // decodeToonItemContent transparently recovers documents that the upstream\n // strict decoder rejects (bracketed-token-then-colon inside a quoted value;\n // see toon-decode.ts). The recovery is lossless, so it stays silent rather\n // than emitting a per-read warning that would perpetually flip pm health\n // red for legacy files. The behavior is pinned by toon-decode.spec.ts.\n parsed = decodeToonItemContent(content).value;\n } catch {\n validationError(\"TOON item document is not valid TOON\");\n }\n assertFrontMatterCondition(\n typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed),\n \"TOON item document must be an object\",\n );\n const record = parsed as Record<string, unknown>;\n\n if (Object.prototype.hasOwnProperty.call(record, \"front_matter\")) {\n assertValidFrontMatter(record.front_matter, runtimeContext);\n assertFrontMatterCondition(\n record.body === undefined || typeof record.body === \"string\",\n \"TOON item document body must be a string\",\n );\n return {\n metadata: normalizeFrontMatter(record.front_matter, options),\n body: normalizeBody(typeof record.body === \"string\" ? record.body : \"\"),\n };\n }\n\n const { body, ...frontMatterRecord } = record;\n assertFrontMatterCondition(\n body === undefined || typeof body === \"string\",\n \"TOON item document body must be a string\",\n );\n assertValidFrontMatter(frontMatterRecord, runtimeContext);\n return {\n metadata: normalizeFrontMatter(frontMatterRecord, options),\n body: normalizeBody(typeof body === \"string\" ? body : \"\"),\n };\n}\n\nfunction serializeJsonMarkdownItemDocument(\n document: ItemDocument,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): string {\n const normalizedFrontMatter = normalizeFrontMatter(document.metadata, options);\n const orderedFrontMatter = orderFrontMatter(normalizedFrontMatter);\n const serializedFrontMatter = JSON.stringify(orderedFrontMatter, null, 2);\n const normalizedBody = normalizeBody(document.body ?? \"\");\n if (!normalizedBody) {\n return `${serializedFrontMatter}\\n`;\n }\n return `${serializedFrontMatter}\\n\\n${normalizedBody}\\n`;\n}\n\nfunction serializeToonItemDocument(\n document: ItemDocument,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): string {\n const normalizedFrontMatter = normalizeFrontMatter(document.metadata, options);\n const orderedFrontMatter = orderFrontMatter(normalizedFrontMatter);\n const normalizedBody = normalizeBody(document.body ?? \"\");\n return `${encodeToon({ ...orderedFrontMatter, body: normalizedBody })}\\n`;\n}\n\n/**\n * Implements parse item document for the public runtime surface of this module.\n */\nexport function parseItemDocument(content: string, options: ItemDocumentFormatOptions = {}): ItemDocument {\n const conflictMarker = findFirstMergeConflictMarker(content);\n if (conflictMarker) {\n throw new PmCliError(\n `Merge conflict markers detected in item document at line ${conflictMarker.line} (${conflictMarker.marker}). Resolve <<<<<<< ======= >>>>>>> markers and retry.`,\n EXIT_CODE.GENERIC_FAILURE,\n {\n code: \"merge_conflict_markers_detected\",\n required: \"Resolve merge-conflict markers in the item file before parsing or mutation commands.\",\n why: \"Partially merged documents can corrupt item metadata and history integrity.\",\n examples: [\"git status\", \"git add <resolved-file> && git commit\"],\n nextSteps: [\"Resolve conflicts, save the file, then rerun the pm command.\"],\n },\n );\n }\n const format = options.format ?? \"toon\";\n const runtimeContext = resolveRuntimeSchemaValidationContext(options);\n return format === \"toon\"\n ? parseToonItemDocument(content, runtimeContext, options)\n : parseJsonMarkdownItemDocument(content, runtimeContext, options);\n}\n\n/**\n * Implements serialize item document for the public runtime surface of this module.\n */\nexport function serializeItemDocument(document: ItemDocument, options: ItemDocumentFormatOptions = {}): string {\n const format = options.format ?? \"toon\";\n return format === \"toon\" ? serializeToonItemDocument(document, options) : serializeJsonMarkdownItemDocument(document, options);\n}\n\n/**\n * Implements canonical document for the public runtime surface of this module.\n */\nexport function canonicalDocument(document: ItemDocument, options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {}): ItemDocument {\n return {\n metadata: normalizeFrontMatter(document.metadata, options),\n body: normalizeBody(document.body ?? \"\"),\n };\n}\n\nexport const _testOnlyItemFormat = {\n buildKnownFrontMatterKeys,\n firstNonZeroComparison,\n normalizeBody,\n normalizePlanDecisions,\n normalizePlanDiscoveries,\n normalizePlanStepDocs,\n normalizePlanStepFiles,\n normalizePlanStepLinks,\n normalizePlanSteps,\n normalizePlanStepTests,\n normalizePlanValidation,\n normalizeTestRunSummaries,\n normalizeTypeOptions,\n runtimeFieldRequiredForType,\n sortTests,\n};\n", "/**\n * @module core/item/toon-decode\n *\n * Defines item parsing, formatting, and lifecycle helpers for Toon Decode.\n */\nimport { decode as decodeToon } from \"@toon-format/toon\";\n\nexport const TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR = \"https://github.com/toon-format/toon/pull/314\" as const;\n\nexport const TOON_SCALAR_BRACKET_ESCAPE_TRACKING = {\n dependency: \"@toon-format/toon\",\n affected_versions: \"<=2.3.0\",\n upstream_pr: TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR,\n removal_condition:\n \"Remove escapeBracketsInQuotedScalars retry once the upstream strict decoder fix ships in a released @toon-format/toon version and this repository upgrades to it.\",\n} as const;\n\n/**\n * Documents the toon decode result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ToonDecodeResult {\n /** The decoded TOON document. */\n value: unknown;\n /** True when the strict decode required the scalar-bracket escape workaround. */\n usedScalarBracketEscape: boolean;\n}\n\n/**\n * Escape `[` as `\\u005b` inside quoted scalar values so the upstream\n * `@toon-format/toon` strict decoder cannot mis-read them.\n *\n * The upstream bug: the strict decoder's array-header detection scans the whole\n * line for an opening bracket when the key is unquoted, so a quoted scalar value\n * that contains a bracketed token followed (anywhere later on the line) by a\n * colon, e.g. `body: \"POST [redacted]: ok\"` or `desc: \"sntr[ysu]_ ... :\"`, is\n * mis-detected as a `key`+bracket+colon array header and throws. The library's\n * own `encode()` emits exactly this otherwise-correctly-quoted form, so strict\n * decode cannot read the encoder's own output for such values.\n *\n * A line is treated as a scalar `key: value` (not an array header) only when its\n * `\": \"` key/value separator occurs before the first `[`; array-header lines\n * (`tags[3]:`, `comments[6]{...}:`) have the bracket first and are left\n * untouched, as are non-string (unquoted) values. Within a matched quoted value\n * every `[` becomes `\\u005b`, which the decoder unescapes back to `[`, so the\n * decoded value is byte-for-byte identical. Crucially, this neutralises only the\n * bracket trigger and nothing else, so the retry stays in strict mode and every\n * other strict invariant (duplicate sibling keys, array-count mismatches, tabs\n * in indentation, ...) is still enforced.\n *\n * Upstream tracking metadata lives in {@link TOON_SCALAR_BRACKET_ESCAPE_TRACKING}.\n */\nfunction escapeBracketsInQuotedScalars(content: string): string {\n return content\n .split(\"\\n\")\n .map((line) => {\n const separatorIndex = line.indexOf(\": \");\n const bracketIndex = line.indexOf(\"[\");\n if (separatorIndex === -1 || bracketIndex === -1 || bracketIndex < separatorIndex) {\n return line;\n }\n const key = line.slice(0, separatorIndex + 2);\n const value = line.slice(separatorIndex + 2);\n if (!value.startsWith('\"')) {\n return line;\n }\n return key + value.replaceAll(\"[\", \"\\\\u005b\");\n })\n .join(\"\\n\");\n}\n\n/**\n * Decode a TOON item document, working around the upstream bracket mis-parse\n * bug described in {@link escapeBracketsInQuotedScalars}.\n *\n * Strict decode is attempted first (the fast path for all well-formed\n * documents). Only if it fails is the scalar-bracket escape applied and strict\n * decode retried, so the workaround never relaxes strict validation; it only\n * removes the specific trigger. If the escaped content is identical to the\n * original (no quoted-scalar bracket to neutralise) the original strict error is\n * surfaced unchanged; if the retry itself fails the document has a genuine\n * problem beyond the bracket bug and that error propagates.\n */\nexport function decodeToonItemContent(content: string): ToonDecodeResult {\n try {\n return { value: decodeToon(content), usedScalarBracketEscape: false };\n } catch (strictError) {\n const escaped = escapeBracketsInQuotedScalars(content);\n if (escaped === content) {\n throw strictError;\n }\n return { value: decodeToon(escaped), usedScalarBracketEscape: true };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../core/item/status-filter.ts","../../../../../../../../core/schema/runtime-field-filters.ts","../../../../../../../../cli/commands/list.ts"],"sourcesContent":["/**\n * @module core/item/status-filter\n *\n * Defines item parsing, formatting, and lifecycle helpers for Status Filter.\n */\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\nimport type { RuntimeStatusRegistry } from \"../schema/runtime-schema.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { normalizeStatusInput } from \"./status.js\";\n\n// Workflow-group aliases shared by every status-filter consumer so that the\n// agent-friendly `open`/`closed`/`canceled` shorthands resolve to whatever the\n// runtime workflow has configured as its open/close/cancel anchors, rather than\n// hardcoding the built-in status ids. `cancelled` is accepted as a spelling\n// variant of `canceled`.\nconst STATUS_GROUP_ALIASES: Readonly<Record<string, \"open_status\" | \"close_status\" | \"canceled_status\">> = {\n open: \"open_status\",\n closed: \"close_status\",\n canceled: \"canceled_status\",\n cancelled: \"canceled_status\",\n};\n\nconst STATUS_ALL_SENTINEL = \"all\";\n\n/** Return true when a status-filter input is the standalone all-status sentinel. */\nexport function isStatusAllFilterInput(raw: unknown): boolean {\n if (typeof raw !== \"string\") {\n return false;\n }\n const tokens = raw\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter((entry) => entry.length > 0);\n return tokens.length === 1 && tokens[0] === STATUS_ALL_SENTINEL;\n}\n\n/**\n * Resolve a single status-filter token to a concrete runtime status id.\n *\n * Returns `undefined` when the token is not a recognized workflow-group alias\n * (open/closed/canceled) and does not normalize to a known registry status.\n * Callers decide whether an unrecognized token is an error (strict mode) or is\n * passed through verbatim (lenient mode) — see {@link parseStatusFilterCsv}.\n */\nexport function resolveStatusFilterToken(\n token: string,\n registry: RuntimeStatusRegistry,\n): ItemStatus | undefined {\n const trimmed = token.trim().toLowerCase();\n if (trimmed.length === 0) {\n return undefined;\n }\n const group = STATUS_GROUP_ALIASES[trimmed];\n if (group) {\n return registry[group] as ItemStatus;\n }\n return normalizeStatusInput(token, registry);\n}\n\nfunction collectStatusSuggestionCandidates(registry: RuntimeStatusRegistry): string[] {\n const candidates = new Set<string>(Object.keys(STATUS_GROUP_ALIASES));\n for (const definition of registry.definitions) {\n candidates.add(definition.id);\n for (const alias of definition.aliases) {\n candidates.add(alias);\n }\n }\n return [...candidates];\n}\n\nfunction suggestClosestStatus(value: string, registry: RuntimeStatusRegistry): string | undefined {\n // Only ever called for an unresolved, already-non-empty token (parseStatusFilterCsv\n // filters blanks first), so no empty-input guard is needed here.\n const normalized = value.trim().toLowerCase();\n let best: string | undefined;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (const candidate of collectStatusSuggestionCandidates(registry)) {\n const distance = levenshteinDistanceWithinLimit(normalized, candidate.toLowerCase(), 2);\n if (distance !== null && distance < bestDistance) {\n best = candidate;\n bestDistance = distance;\n }\n }\n return best;\n}\n\n/**\n * Documents the parse status filter options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ParseStatusFilterOptions {\n /**\n * When true, an unrecognized token throws a USAGE error with a did-you-mean\n * hint. When false (default), an unrecognized token is passed through\n * verbatim so custom/unknown statuses still compare against item values by\n * their raw string — preserving the long-standing lenient `pm list` behavior.\n */\n strict?: boolean;\n /** Flag label used in error messages (default: \"--status\"). */\n flagLabel?: string;\n}\n\n/**\n * Parse a comma-separated status filter into a de-duplicated list of concrete\n * status ids. A standalone `all` sentinel intentionally resolves to no filter\n * so duplicate-discovery loops can search every lifecycle bucket with the same\n * `--status` flag shape. Shared by `pm list` (lenient) and `pm search`\n * (strict, with a did-you-mean hint on typos) so both surfaces resolve the\n * open/closed/canceled workflow-group aliases identically.\n */\nexport function parseStatusFilterCsv(\n raw: unknown,\n registry: RuntimeStatusRegistry,\n options?: ParseStatusFilterOptions,\n): ItemStatus[] | undefined {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n const strict = options?.strict === true;\n const flagLabel = options?.flagLabel ?? \"--status\";\n const tokens = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (tokens.length === 0) {\n return undefined;\n }\n const allTokenCount = tokens.filter((token) => token.trim().toLowerCase() === STATUS_ALL_SENTINEL).length;\n if (allTokenCount > 0) {\n if (tokens.length === 1) {\n return undefined;\n }\n throw new PmCliError(\n `Invalid ${flagLabel} value \"all\". Use it by itself, or omit ${flagLabel} to search every status.`,\n EXIT_CODE.USAGE,\n );\n }\n const resolved: ItemStatus[] = [];\n for (const token of tokens) {\n const status = resolveStatusFilterToken(token, registry);\n if (status === undefined) {\n if (strict) {\n const suggestion = suggestClosestStatus(token, registry);\n throw new PmCliError(\n `Invalid ${flagLabel} value \"${token}\". Use open|closed|canceled or a configured status id${\n suggestion ? `. Did you mean \"${suggestion}\"?` : \".\"\n }`,\n EXIT_CODE.USAGE,\n );\n }\n resolved.push(token as ItemStatus);\n continue;\n }\n resolved.push(status);\n }\n return [...new Set(resolved)];\n}\n","/**\n * @module core/schema/runtime-field-filters\n *\n * Resolves configurable schema, fields, statuses, and workflows for Runtime Field Filters.\n */\nimport { coerceRuntimeFieldValue, readRuntimeFieldOptionValue } from \"./runtime-field-values.js\";\nimport type { RuntimeFieldCommand, RuntimeFieldRegistry } from \"./runtime-schema.js\";\nimport { stableValueEquals } from \"../shared/serialization.js\";\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n return stableValueEquals(left, right);\n}\n\n/**\n * Implements collect runtime filter values for the public runtime surface of this module.\n */\nexport function collectRuntimeFilterValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n command: RuntimeFieldCommand,\n): Record<string, unknown> {\n const filters: Record<string, unknown> = {};\n for (const definition of fieldRegistry.command_to_fields.get(command) ?? []) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n continue;\n }\n filters[definition.metadata_key] = coerceRuntimeFieldValue(definition, rawValue);\n }\n return filters;\n}\n\n/**\n * Implements matches runtime filters for the public runtime surface of this module.\n */\nexport function matchesRuntimeFilters(item: Record<string, unknown>, filters: Record<string, unknown>): boolean {\n for (const [fieldKey, expectedValue] of Object.entries(filters)) {\n const actualValue = item[fieldKey];\n if (Array.isArray(expectedValue)) {\n if (Array.isArray(actualValue)) {\n const normalizedActual = actualValue.map((value) => String(value));\n const normalizedExpected = expectedValue.map((value) => String(value));\n if (!normalizedExpected.every((value) => normalizedActual.includes(value))) {\n return false;\n }\n continue;\n }\n if (!valuesEqual(actualValue, expectedValue[expectedValue.length - 1])) {\n return false;\n }\n continue;\n }\n if (!valuesEqual(actualValue, expectedValue)) {\n return false;\n }\n }\n return true;\n}\n","/**\n * @module cli/commands/list\n *\n * Implements the pm list command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport { isTerminalStatus } from \"../../core/item/status.js\";\nimport { isStatusAllFilterInput, parseStatusFilterCsv } from \"../../core/item/status-filter.js\";\nimport { resolveItemTypeRegistry, type ItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseIntegerLimit, parsePriority, parseType } from \"../shared-parsers.js\";\nimport { collectRuntimeFilterValues, matchesRuntimeFilters } from \"../../core/schema/runtime-field-filters.js\";\nimport {\n hasMissingMetadataFilter,\n itemMatchesMissingMetadata,\n lifecycleClassifierFromStatusRegistry,\n type MissingMetadataFilters,\n} from \"../../core/governance/metadata-coverage.js\";\nimport {\n contentFiltersNeedBody,\n contentFiltersNeedCollections,\n hasContentFieldFilter,\n itemMatchesContentFilters,\n type ContentField,\n type ContentFieldFilters,\n} from \"../../core/governance/content-fields.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { compareTimestampStrings, nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { listAllFrontMatter, listAllFrontMatterLight, listAllFrontMatterWithBody } from \"../../core/store/item-store.js\";\nimport { HEAVY_METADATA_KEYS } from \"../../core/store/front-matter-cache.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemFrontMatter, ItemStatus, ItemType } from \"../../types/index.js\";\nimport type { SharedItemFilterOptions } from \"./item-filter-options.js\";\n\n/**\n * Documents the list options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ListOptions extends SharedItemFilterOptions {\n ids?: string;\n assigneeFilter?: string;\n limit?: string;\n offset?: string;\n noTruncate?: boolean;\n includeBody?: boolean;\n compact?: boolean;\n brief?: boolean;\n full?: boolean;\n fields?: string;\n sort?: string;\n order?: string;\n tree?: boolean;\n treeDepth?: string;\n excludeTerminal?: boolean;\n filterAcMissing?: boolean;\n filterEstimatesMissing?: boolean;\n filterResolutionMissing?: boolean;\n filterMetadataMissing?: boolean;\n}\n\n/** Extract the missing-metadata selection filters from list/update-many options. */\nexport function resolveMissingMetadataFilters(options: {\n filterAcMissing?: boolean;\n filterEstimatesMissing?: boolean;\n filterResolutionMissing?: boolean;\n filterMetadataMissing?: boolean;\n filterReviewerMissing?: boolean;\n filterRiskMissing?: boolean;\n filterConfidenceMissing?: boolean;\n filterSprintMissing?: boolean;\n filterReleaseMissing?: boolean;\n}): MissingMetadataFilters {\n return {\n acMissing: options.filterAcMissing === true,\n estimatesMissing: options.filterEstimatesMissing === true,\n resolutionMissing: options.filterResolutionMissing === true,\n metadataMissing: options.filterMetadataMissing === true,\n reviewerMissing: options.filterReviewerMissing === true,\n riskMissing: options.filterRiskMissing === true,\n confidenceMissing: options.filterConfidenceMissing === true,\n sprintMissing: options.filterSprintMissing === true,\n releaseMissing: options.filterReleaseMissing === true,\n };\n}\n\n/** Per content field: the present flag and the absence flag on the options shape. */\ninterface ContentFieldFlagMapping {\n field: ContentField;\n presentKey: string;\n absentKey: string;\n /** Human flag names used in the conflict error message. */\n presentFlag: string;\n absentFlag: string;\n}\n\nconst CONTENT_FIELD_FLAG_MAPPINGS: readonly ContentFieldFlagMapping[] = [\n { field: \"notes\", presentKey: \"hasNotes\", absentKey: \"noNotes\", presentFlag: \"--has-notes\", absentFlag: \"--no-notes\" },\n { field: \"learnings\", presentKey: \"hasLearnings\", absentKey: \"noLearnings\", presentFlag: \"--has-learnings\", absentFlag: \"--no-learnings\" },\n { field: \"files\", presentKey: \"hasFiles\", absentKey: \"noFiles\", presentFlag: \"--has-files\", absentFlag: \"--no-files\" },\n { field: \"docs\", presentKey: \"hasDocs\", absentKey: \"noDocs\", presentFlag: \"--has-docs\", absentFlag: \"--no-docs\" },\n { field: \"tests\", presentKey: \"hasTests\", absentKey: \"noTests\", presentFlag: \"--has-tests\", absentFlag: \"--no-tests\" },\n { field: \"comments\", presentKey: \"hasComments\", absentKey: \"noComments\", presentFlag: \"--has-comments\", absentFlag: \"--no-comments\" },\n { field: \"deps\", presentKey: \"hasDeps\", absentKey: \"noDeps\", presentFlag: \"--has-deps\", absentFlag: \"--no-deps\" },\n { field: \"body\", presentKey: \"hasBody\", absentKey: \"emptyBody\", presentFlag: \"--has-body\", absentFlag: \"--empty-body\" },\n { field: \"linked_command\", presentKey: \"hasLinkedCommand\", absentKey: \"noLinkedCommand\", presentFlag: \"--has-linked-command\", absentFlag: \"--no-linked-command\" },\n] as const;\n\n/**\n * Resolve the content-field presence/absence selections from list/search\n * options. A field requested both present AND absent is a usage error (the two\n * selections are mutually exclusive). Returns an empty object when no\n * content-field filter is active.\n */\nexport function resolveContentFieldFilters(options: Record<string, unknown>): ContentFieldFilters {\n const filters: ContentFieldFilters = {};\n for (const mapping of CONTENT_FIELD_FLAG_MAPPINGS) {\n const present = options[mapping.presentKey] === true;\n const absent = options[mapping.absentKey] === true;\n if (present && absent) {\n throw new PmCliError(\n `Cannot combine ${mapping.presentFlag} with ${mapping.absentFlag} for the same field.`,\n EXIT_CODE.USAGE,\n );\n }\n if (present) {\n filters[mapping.field] = \"present\";\n } else if (absent) {\n filters[mapping.field] = \"absent\";\n }\n }\n return filters;\n}\n\n/**\n * Restricts listed item values accepted by command, SDK, and storage contracts.\n */\nexport type ListedItem = ItemFrontMatter | (ItemFrontMatter & { body: string });\n\ntype ListProjectionMode = \"full\" | \"compact\" | \"fields\";\n\ninterface ListProjectionConfig {\n mode: ListProjectionMode;\n fields: string[];\n}\n\nexport const LIST_SORT_FIELDS = [\"priority\", \"deadline\", \"updated_at\", \"created_at\", \"title\", \"parent\"] as const;\n/**\n * Restricts list sort field values accepted by command, SDK, and storage contracts.\n */\nexport type ListSortField = (typeof LIST_SORT_FIELDS)[number];\n\nexport const LIST_SORT_ORDER_VALUES = [\"asc\", \"desc\"] as const;\n/**\n * Restricts list sort order values accepted by command, SDK, and storage contracts.\n */\nexport type ListSortOrder = (typeof LIST_SORT_ORDER_VALUES)[number];\n\nconst DEFAULT_COMPACT_LIST_FIELDS = [\"id\", \"title\", \"status\", \"type\", \"priority\", \"parent\", \"updated_at\"] as const;\nconst BRIEF_LIST_FIELDS = [\"id\", \"status\", \"type\", \"title\"] as const;\nconst TREE_METADATA_FIELDS = [\"tree_depth\", \"tree_parent\", \"tree_children\", \"tree_title\"] as const;\n\n// A projection that selects any heavy collection field (or `--full`, which returns\n// items verbatim) must load the full metadata; everything else takes the light path.\n// Sourced from the single HEAVY_METADATA_KEYS definition in the cache layer so the\n// light/heavy split can never drift between the cache and the projection routing.\nconst HEAVY_PROJECTION_FIELDS: ReadonlySet<string> = new Set<string>(HEAVY_METADATA_KEYS);\n\ninterface ListResultBase {\n items: ListedItem[];\n count: number;\n // Total rows matched before pagination; only emitted when --limit/--offset\n // omitted rows, so agents know how many remain (GH-154).\n total?: number;\n warnings?: string[];\n}\n\n/**\n * Documents the list compact result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ListCompactResult extends ListResultBase {\n filters: Record<string, unknown>;\n projection?: undefined;\n sorting?: undefined;\n now?: undefined;\n}\n\n/**\n * Documents the list verbose result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ListVerboseResult extends ListResultBase {\n filters: Record<string, unknown>;\n projection: {\n mode: ListProjectionMode;\n fields: string[] | null;\n };\n sorting: {\n sort: ListSortField | \"default\";\n order: ListSortOrder;\n };\n now: string;\n}\n\n/**\n * Restricts list result values accepted by command, SDK, and storage contracts.\n */\nexport type ListResult = ListCompactResult | ListVerboseResult;\n\nfunction isNonEmptyRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) && Object.keys(value).length > 0;\n}\n\n// Active content-field filter flags, keyed by the options dest and the snake_case\n// summary key emitted in the filters echo (GH-242). Presence and absence are\n// distinct echo keys (has_notes vs no_notes; has_body vs empty_body).\nconst CONTENT_FILTER_ECHO_ENTRIES: ReadonlyArray<{ key: string; summaryKey: string }> = [\n { key: \"hasNotes\", summaryKey: \"has_notes\" },\n { key: \"hasLearnings\", summaryKey: \"has_learnings\" },\n { key: \"hasFiles\", summaryKey: \"has_files\" },\n { key: \"hasDocs\", summaryKey: \"has_docs\" },\n { key: \"hasTests\", summaryKey: \"has_tests\" },\n { key: \"hasComments\", summaryKey: \"has_comments\" },\n { key: \"hasDeps\", summaryKey: \"has_deps\" },\n { key: \"hasBody\", summaryKey: \"has_body\" },\n { key: \"hasLinkedCommand\", summaryKey: \"has_linked_command\" },\n { key: \"noNotes\", summaryKey: \"no_notes\" },\n { key: \"noLearnings\", summaryKey: \"no_learnings\" },\n { key: \"noFiles\", summaryKey: \"no_files\" },\n { key: \"noDocs\", summaryKey: \"no_docs\" },\n { key: \"noTests\", summaryKey: \"no_tests\" },\n { key: \"noComments\", summaryKey: \"no_comments\" },\n { key: \"noDeps\", summaryKey: \"no_deps\" },\n { key: \"emptyBody\", summaryKey: \"empty_body\" },\n { key: \"noLinkedCommand\", summaryKey: \"no_linked_command\" },\n] as const;\n\n// Active governance-missing filter flags (GH-236), keyed by options dest and the\n// snake_case summary key emitted in the filters echo.\nconst GOVERNANCE_MISSING_ECHO_ENTRIES: ReadonlyArray<{ key: string; summaryKey: string }> = [\n { key: \"filterReviewerMissing\", summaryKey: \"filter_reviewer_missing\" },\n { key: \"filterRiskMissing\", summaryKey: \"filter_risk_missing\" },\n { key: \"filterConfidenceMissing\", summaryKey: \"filter_confidence_missing\" },\n { key: \"filterSprintMissing\", summaryKey: \"filter_sprint_missing\" },\n { key: \"filterReleaseMissing\", summaryKey: \"filter_release_missing\" },\n] as const;\n\nfunction applyContentFilterEcho(filters: Record<string, unknown>, options: Record<string, unknown>): void {\n for (const entry of CONTENT_FILTER_ECHO_ENTRIES) {\n if (options[entry.key] === true) {\n filters[entry.summaryKey] = true;\n }\n }\n}\n\nfunction applyGovernanceMissingFilterEcho(filters: Record<string, unknown>, options: Record<string, unknown>): void {\n for (const entry of GOVERNANCE_MISSING_ECHO_ENTRIES) {\n if (options[entry.key] === true) {\n filters[entry.summaryKey] = true;\n }\n }\n}\n\ninterface FilterValueEchoEntry {\n optionKey: string;\n summaryKey: string;\n normalize?: (value: unknown) => unknown;\n}\n\n/**\n * Copies user-supplied option values into compact filter summaries.\n *\n * Compact list/search responses are optimized for agent context: they echo only\n * filters the caller actually supplied. Keeping this helper shared prevents the\n * list and search command summaries from drifting as new scalar filters are\n * added.\n */\nexport function applyFilterValueEcho(\n filters: Record<string, unknown>,\n options: Record<string, unknown>,\n entries: ReadonlyArray<FilterValueEchoEntry>,\n): void {\n for (const entry of entries) {\n const value = options[entry.optionKey];\n if (value !== undefined) {\n filters[entry.summaryKey] = entry.normalize ? entry.normalize(value) : value;\n }\n }\n}\n\n/**\n * Implements build content filter echo for the public runtime surface of this module.\n */\nexport function buildContentFilterEcho(options: Record<string, unknown>): Record<string, true> {\n const echo: Record<string, true> = {};\n applyContentFilterEcho(echo, options);\n return echo;\n}\n\n/**\n * Implements build governance missing filter echo for the public runtime surface of this module.\n */\nexport function buildGovernanceMissingFilterEcho(options: Record<string, unknown>): Record<string, true> {\n const echo: Record<string, true> = {};\n applyGovernanceMissingFilterEcho(echo, options);\n return echo;\n}\n\nconst COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES: ReadonlyArray<FilterValueEchoEntry> = [\n { optionKey: \"type\", summaryKey: \"type\" },\n { optionKey: \"tag\", summaryKey: \"tag\" },\n { optionKey: \"priority\", summaryKey: \"priority\" },\n { optionKey: \"deadlineBefore\", summaryKey: \"deadline_before\" },\n { optionKey: \"deadlineAfter\", summaryKey: \"deadline_after\" },\n { optionKey: \"updatedAfter\", summaryKey: \"updated_after\" },\n { optionKey: \"updatedBefore\", summaryKey: \"updated_before\" },\n { optionKey: \"createdAfter\", summaryKey: \"created_after\" },\n { optionKey: \"createdBefore\", summaryKey: \"created_before\" },\n { optionKey: \"ids\", summaryKey: \"ids\" },\n { optionKey: \"assignee\", summaryKey: \"assignee\" },\n { optionKey: \"assigneeFilter\", summaryKey: \"assignee_filter\" },\n { optionKey: \"parent\", summaryKey: \"parent\" },\n { optionKey: \"sprint\", summaryKey: \"sprint\" },\n { optionKey: \"release\", summaryKey: \"release\" },\n] as const;\n\nfunction buildCompactListFilterSummary(params: {\n filtersStatus: string | string[] | null;\n options: ListOptions;\n treeEnabled: boolean;\n treeDepth: number | undefined;\n sortField: ListSortField | undefined;\n sortOrder: ListSortOrder;\n runtimeFieldFilters: Record<string, unknown>;\n}): Record<string, unknown> {\n const {\n filtersStatus,\n options,\n treeEnabled,\n treeDepth,\n sortField,\n sortOrder,\n runtimeFieldFilters,\n } = params;\n const filters: Record<string, unknown> = {};\n if (filtersStatus !== null) {\n filters.status = filtersStatus;\n }\n applyFilterValueEcho(filters, options, COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES);\n if (options.filterAcMissing === true) {\n filters.filter_ac_missing = true;\n }\n if (options.filterEstimatesMissing === true) {\n filters.filter_estimates_missing = true;\n }\n if (options.filterResolutionMissing === true) {\n filters.filter_resolution_missing = true;\n }\n if (options.filterMetadataMissing === true) {\n filters.filter_metadata_missing = true;\n }\n applyGovernanceMissingFilterEcho(filters, options);\n applyContentFilterEcho(filters, options);\n if (options.limit !== undefined) {\n filters.limit = options.limit;\n }\n if (options.offset !== undefined) {\n filters.offset = options.offset;\n }\n if (options.includeBody === true) {\n filters.include_body = true;\n }\n if (options.fields !== undefined) {\n filters.fields = options.fields;\n }\n if (treeEnabled) {\n filters.tree = true;\n if (treeDepth !== undefined) {\n filters.tree_depth = treeDepth;\n }\n }\n if (sortField !== undefined) {\n filters.sort = sortField;\n filters.order = sortOrder;\n }\n if (isNonEmptyRecord(runtimeFieldFilters)) {\n filters.runtime_filters = runtimeFieldFilters;\n }\n return filters;\n}\n\nfunction compareDefaultSort(left: ListedItem, right: ListedItem, statusRegistry: RuntimeStatusRegistry): number {\n const leftTerminal = isTerminalStatus(left.status, statusRegistry);\n const rightTerminal = isTerminalStatus(right.status, statusRegistry);\n if (leftTerminal !== rightTerminal) {\n return leftTerminal ? 1 : -1;\n }\n const byPriority = left.priority - right.priority;\n if (byPriority !== 0) {\n return byPriority;\n }\n const byUpdated = compareTimestampStrings(right.updated_at, left.updated_at);\n if (byUpdated !== 0) {\n return byUpdated;\n }\n return (left.id ?? \"\").localeCompare(right.id ?? \"\");\n}\n\nfunction sortItemsDefault(items: ListedItem[], statusRegistry: RuntimeStatusRegistry): ListedItem[] {\n return [...items].sort((left, right) => compareDefaultSort(left, right, statusRegistry));\n}\n\nfunction parseDeadline(raw: string | undefined, fieldLabel: string): string | undefined {\n if (raw === undefined) return undefined;\n return resolveIsoOrRelative(raw, new Date(), fieldLabel);\n}\n\n// updated/created date-window filters share the deadline ISO+relative resolver\n// so agents doing incremental \"what changed since my last context window\" syncs\n// can pass either an ISO timestamp (the common case — feed back the previous\n// run's `now`) or a SIGNED relative offset where \"-2h\"/\"-7d\" reach into the\n// past and \"+1d\" into the future (units h/d/w/m, m = months — there is no\n// minutes unit, matching the deadline resolver).\nfunction parseTimestampWindow(raw: unknown, fieldLabel: string): string | undefined {\n if (raw == null) return undefined;\n const value = String(raw).trim();\n if (value.length === 0) return undefined;\n return resolveIsoOrRelative(value, new Date(), fieldLabel);\n}\n\nfunction parseIdsFilter(raw: unknown): Set<string> | undefined {\n if (raw == null) return undefined;\n const value = String(raw).trim();\n if (value.length === 0) {\n throw new PmCliError(\"--ids requires at least one non-empty item ID\", EXIT_CODE.USAGE);\n }\n const ids = value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (ids.length === 0) {\n throw new PmCliError(\"--ids requires at least one non-empty item ID\", EXIT_CODE.USAGE);\n }\n return new Set(ids);\n}\n\nfunction parseOffset(raw: string | undefined): number | undefined {\n if (raw === undefined) return undefined;\n const parsed = Number(raw);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(\"Offset filter must be a non-negative integer\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nfunction parseFieldSelectors(raw: string | undefined): string[] | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const selectors = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (selectors.length === 0) {\n throw new PmCliError(\"List --fields requires a comma-separated list of field names\", EXIT_CODE.USAGE);\n }\n return [...new Set(selectors)];\n}\n\nfunction parseProjectionConfig(options: ListOptions): ListProjectionConfig {\n const compactRequested = options.compact === true;\n const briefRequested = options.brief === true;\n const fullRequested = options.full === true;\n const fieldSelectors = parseFieldSelectors(options.fields);\n const enabledModes =\n Number(compactRequested) + Number(briefRequested) + Number(fullRequested) + Number(fieldSelectors !== undefined);\n if (enabledModes > 1) {\n throw new PmCliError(\n \"List projection options are mutually exclusive. Use one of --compact, --brief, --full, or --fields.\",\n EXIT_CODE.USAGE,\n );\n }\n if (fullRequested) {\n return {\n mode: \"full\",\n fields: [],\n };\n }\n if (briefRequested) {\n return {\n mode: \"compact\",\n fields: [...BRIEF_LIST_FIELDS],\n };\n }\n if (compactRequested) {\n return {\n mode: \"compact\",\n fields: [...DEFAULT_COMPACT_LIST_FIELDS],\n };\n }\n if (fieldSelectors) {\n return {\n mode: \"fields\",\n fields: fieldSelectors,\n };\n }\n return {\n mode: \"full\",\n fields: [],\n };\n}\n\nfunction normalizeProjectionField(field: string): string {\n return field.startsWith(\"item.\") ? field.slice(\"item.\".length) : field;\n}\n\nfunction validateListProjectionFields(projection: ListProjectionConfig, runtimeMetadataKeys: Iterable<string>): void {\n if (projection.mode !== \"fields\") {\n return;\n }\n const allowed = new Set([...FRONT_MATTER_KEY_ORDER, \"body\", ...TREE_METADATA_FIELDS, ...runtimeMetadataKeys]);\n const unknown = projection.fields.filter((field) => !allowed.has(normalizeProjectionField(field)));\n if (unknown.length > 0) {\n throw new PmCliError(`Unknown list --fields value(s): ${unknown.join(\", \")}`, EXIT_CODE.USAGE, {\n code: \"unknown_field_projection\",\n examples: [\n \"pm list-open --fields id,title,status,type,updated_at\",\n \"pm list --fields id,title,parent,priority --limit 10\",\n \"pm list-all --fields id,title,body --limit 5\",\n ],\n });\n }\n}\n\n// Convenience aliases so agents/humans who reach for the bare verb form\n// (e.g. `--sort updated`) land on the canonical timestamp fields instead of an error.\n// A Map (not a plain object) avoids prototype-chain lookups for keys like \"__proto__\".\nconst LIST_SORT_FIELD_ALIASES: ReadonlyMap<string, ListSortField> = new Map<string, ListSortField>([\n [\"updated\", \"updated_at\"],\n [\"update\", \"updated_at\"],\n [\"modified\", \"updated_at\"],\n [\"created\", \"created_at\"],\n [\"create\", \"created_at\"],\n]);\n\nfunction parseSortField(raw: string | undefined): ListSortField | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n const aliased = LIST_SORT_FIELD_ALIASES.get(normalized);\n if (aliased) {\n return aliased;\n }\n if (!LIST_SORT_FIELDS.includes(normalized as ListSortField)) {\n throw new PmCliError(\n `Sort field must be one of ${LIST_SORT_FIELDS.join(\"|\")} (aliases: updated->updated_at, created->created_at)`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized as ListSortField;\n}\n\nfunction parseSortOrder(raw: string | undefined): ListSortOrder | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!LIST_SORT_ORDER_VALUES.includes(normalized as ListSortOrder)) {\n throw new PmCliError(`Sort order must be one of ${LIST_SORT_ORDER_VALUES.join(\"|\")}`, EXIT_CODE.USAGE);\n }\n return normalized as ListSortOrder;\n}\n\nfunction parseTreeDepth(raw: string | undefined): number | undefined {\n return parseIntegerLimit(raw, \"--tree-depth\");\n}\n\nfunction parseAssigneeFilter(raw: string | undefined): \"assigned\" | \"unassigned\" | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!normalized) {\n throw new PmCliError(\"Assignee filter must be one of assigned|unassigned\", EXIT_CODE.USAGE);\n }\n if (normalized !== \"assigned\" && normalized !== \"unassigned\") {\n throw new PmCliError(`Invalid assignee filter \"${raw}\". Allowed: assigned|unassigned`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\n// `pm list` keeps lenient status parsing (an unknown token is passed through\n// verbatim and simply matches nothing) so custom/unknown statuses never error;\n// the shared CSV parser resolves the open/closed/canceled workflow-group aliases.\nfunction resolveStatusFilter(\n status: ItemStatus | undefined,\n statusRegistry: RuntimeStatusRegistry,\n): ItemStatus[] | undefined {\n return parseStatusFilterCsv(status, statusRegistry, { strict: false });\n}\n\ninterface ListFilterSet {\n idsFilter: Set<string> | undefined;\n statusSet: Set<ItemStatus> | undefined;\n excludeTerminal: boolean;\n typeFilter: ItemType | undefined;\n tagFilter: string | undefined;\n priorityFilter: number | undefined;\n deadlineBefore: string | undefined;\n deadlineAfter: string | undefined;\n updatedAfter: string | undefined;\n updatedBefore: string | undefined;\n createdAfter: string | undefined;\n createdBefore: string | undefined;\n assigneeFilter: string | undefined;\n assigneeModeFilter: \"assigned\" | \"unassigned\" | undefined;\n parentFilter: string | undefined;\n treeEnabled: boolean;\n sprintFilter: string | undefined;\n releaseFilter: string | undefined;\n missingMetadataFilters: MissingMetadataFilters;\n missingMetadataActive: boolean;\n lifecycleClassifier: ReturnType<typeof lifecycleClassifierFromStatusRegistry>;\n contentFieldFilters: ContentFieldFilters;\n contentFiltersActive: boolean;\n}\n\nfunction assertListAssigneeFilters(\n assigneeFilter: string | undefined,\n assigneeModeFilter: \"assigned\" | \"unassigned\" | undefined,\n): void {\n if (assigneeFilter && (assigneeFilter.toLowerCase() === \"none\" || assigneeFilter.toLowerCase() === \"null\")) {\n throw new PmCliError(\n '--assignee no longer accepts \"none\" or \"null\". Use --assignee-filter unassigned.',\n EXIT_CODE.USAGE,\n );\n }\n if (assigneeFilter !== undefined && assigneeModeFilter === \"unassigned\") {\n throw new PmCliError(\"Cannot combine --assignee with --assignee-filter unassigned\", EXIT_CODE.USAGE);\n }\n}\n\nfunction resolveListFilterSet(\n status: ItemStatus[] | undefined,\n options: ListOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n): ListFilterSet {\n const assigneeFilter = options.assignee?.trim();\n const assigneeModeFilter = parseAssigneeFilter(options.assigneeFilter);\n assertListAssigneeFilters(assigneeFilter, assigneeModeFilter);\n const missingMetadataFilters = resolveMissingMetadataFilters(options);\n const contentFieldFilters = resolveContentFieldFilters(options as Record<string, unknown>);\n return {\n idsFilter: parseIdsFilter(options.ids),\n statusSet: status && status.length > 0 ? new Set<ItemStatus>(status) : undefined,\n excludeTerminal: options.excludeTerminal === true,\n typeFilter: parseType(options.type, typeRegistry),\n tagFilter: options.tag?.trim().toLowerCase(),\n priorityFilter: parsePriority(options.priority),\n deadlineBefore: parseDeadline(options.deadlineBefore, \"deadline-before\"),\n deadlineAfter: parseDeadline(options.deadlineAfter, \"deadline-after\"),\n updatedAfter: parseTimestampWindow(options.updatedAfter, \"updated-after\"),\n updatedBefore: parseTimestampWindow(options.updatedBefore, \"updated-before\"),\n createdAfter: parseTimestampWindow(options.createdAfter, \"created-after\"),\n createdBefore: parseTimestampWindow(options.createdBefore, \"created-before\"),\n assigneeFilter,\n assigneeModeFilter,\n parentFilter: options.parent?.trim(),\n treeEnabled: options.tree === true,\n sprintFilter: options.sprint?.trim(),\n releaseFilter: options.release?.trim(),\n missingMetadataFilters,\n missingMetadataActive: hasMissingMetadataFilter(missingMetadataFilters),\n lifecycleClassifier: lifecycleClassifierFromStatusRegistry(statusRegistry),\n contentFieldFilters,\n contentFiltersActive: hasContentFieldFilter(contentFieldFilters),\n };\n}\n\nfunction matchesListScalarFilters(\n item: ListedItem,\n filters: ListFilterSet,\n statusRegistry: RuntimeStatusRegistry,\n): boolean {\n if (filters.idsFilter && !filters.idsFilter.has(item.id)) return false;\n if (filters.statusSet && !filters.statusSet.has(item.status)) return false;\n if (filters.excludeTerminal && isTerminalStatus(item.status, statusRegistry)) return false;\n if (filters.typeFilter && item.type !== filters.typeFilter) return false;\n if (filters.tagFilter && !item.tags.includes(filters.tagFilter)) return false;\n if (filters.priorityFilter !== undefined && item.priority !== filters.priorityFilter) return false;\n if (filters.deadlineBefore && (!item.deadline || compareTimestampStrings(item.deadline, filters.deadlineBefore) > 0)) return false;\n if (filters.deadlineAfter && (!item.deadline || compareTimestampStrings(item.deadline, filters.deadlineAfter) < 0)) return false;\n if (filters.updatedAfter && compareTimestampStrings(item.updated_at, filters.updatedAfter) < 0) return false;\n if (filters.updatedBefore && compareTimestampStrings(item.updated_at, filters.updatedBefore) > 0) return false;\n if (filters.createdAfter && compareTimestampStrings(item.created_at, filters.createdAfter) < 0) return false;\n if (filters.createdBefore && compareTimestampStrings(item.created_at, filters.createdBefore) > 0) return false;\n if (filters.assigneeModeFilter === \"assigned\" && !item.assignee) return false;\n if (filters.assigneeModeFilter === \"unassigned\" && item.assignee) return false;\n if (filters.assigneeFilter !== undefined && item.assignee !== filters.assigneeFilter) return false;\n if (filters.parentFilter !== undefined && !filters.treeEnabled && item.parent !== filters.parentFilter) return false;\n if (filters.sprintFilter !== undefined && item.sprint !== filters.sprintFilter) return false;\n if (filters.releaseFilter !== undefined && item.release !== filters.releaseFilter) return false;\n return true;\n}\n\nfunction matchesListFilterSet(\n item: ListedItem,\n filters: ListFilterSet,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): boolean {\n if (!matchesListScalarFilters(item, filters, statusRegistry)) {\n return false;\n }\n if (filters.missingMetadataActive && !itemMatchesMissingMetadata(item, filters.missingMetadataFilters, filters.lifecycleClassifier)) {\n return false;\n }\n if (filters.contentFiltersActive && !itemMatchesContentFilters(item, filters.contentFieldFilters)) {\n return false;\n }\n if (!matchesRuntimeFilters(item as Record<string, unknown>, runtimeFieldFilters)) {\n return false;\n }\n return true;\n}\n\nfunction applyFilters(\n items: ListedItem[],\n status: ItemStatus[] | undefined,\n options: ListOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): ListedItem[] {\n const filters = resolveListFilterSet(status, options, typeRegistry, statusRegistry);\n return items.filter((item) => matchesListFilterSet(item, filters, statusRegistry, runtimeFieldFilters));\n}\n\nfunction trimNonEmpty(value: string | undefined): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction withTreeMetadata(item: ListedItem, depth: number, childCount: number): ListedItem {\n const itemRecord = toItemRecord(item);\n const title = typeof itemRecord.title === \"string\" ? itemRecord.title : \"\";\n const parent = trimNonEmpty(typeof itemRecord.parent === \"string\" ? itemRecord.parent : undefined) ?? null;\n return {\n ...item,\n tree_depth: depth,\n tree_parent: parent,\n tree_children: childCount,\n tree_title: `${\" \".repeat(depth)}${title}`,\n } as ListedItem;\n}\n\nfunction orderItemsAsTree(\n sortedItems: ListedItem[],\n parentRoot: string | undefined,\n maxDepth: number | undefined,\n): ListedItem[] {\n const byId = new Map<string, ListedItem>();\n const childrenByParent = new Map<string, ListedItem[]>();\n for (const item of sortedItems) {\n byId.set(item.id, item);\n const parentId = trimNonEmpty(item.parent);\n if (!parentId) {\n continue;\n }\n const bucket = childrenByParent.get(parentId);\n if (bucket) {\n bucket.push(item);\n } else {\n childrenByParent.set(parentId, [item]);\n }\n }\n\n const roots = parentRoot\n ? [...(childrenByParent.get(parentRoot) ?? [])]\n : sortedItems.filter((item) => {\n const parentId = trimNonEmpty(item.parent);\n return !parentId || !byId.has(parentId);\n });\n const ordered: ListedItem[] = [];\n const visited = new Set<string>();\n const pushNode = (node: ListedItem, depth: number): void => {\n if (visited.has(node.id)) {\n return;\n }\n visited.add(node.id);\n const children = childrenByParent.get(node.id) ?? [];\n ordered.push(withTreeMetadata(node, depth, children.length));\n if (maxDepth !== undefined && depth >= maxDepth) {\n return;\n }\n for (const child of children) {\n pushNode(child, depth + 1);\n }\n };\n for (const root of roots) {\n pushNode(root, 0);\n }\n return ordered;\n}\n\nfunction compareNullableString(left: string | null, right: string | null): number {\n if (left === right) {\n return 0;\n }\n if (left === null) {\n return 1;\n }\n if (right === null) {\n return -1;\n }\n return left.localeCompare(right);\n}\n\nfunction compareNullableTimestamp(left: string | null, right: string | null): number {\n if (left === right) {\n return 0;\n }\n if (left === null) {\n return 1;\n }\n if (right === null) {\n return -1;\n }\n return compareTimestampStrings(left, right);\n}\n\nfunction compareBySortField(left: ListedItem, right: ListedItem, field: ListSortField): number {\n switch (field) {\n case \"priority\":\n return left.priority - right.priority;\n case \"deadline\":\n return compareNullableTimestamp(left.deadline ?? null, right.deadline ?? null);\n case \"updated_at\":\n return compareTimestampStrings(left.updated_at, right.updated_at);\n case \"created_at\":\n return compareTimestampStrings(left.created_at, right.created_at);\n case \"title\":\n return (left.title ?? \"\").localeCompare(right.title ?? \"\");\n case \"parent\":\n return compareNullableString(left.parent ?? null, right.parent ?? null);\n default:\n return 0;\n }\n}\n\nfunction sortItems(\n items: ListedItem[],\n sortField: ListSortField | undefined,\n sortOrder: ListSortOrder,\n statusRegistry: RuntimeStatusRegistry,\n): ListedItem[] {\n if (!sortField) {\n return sortItemsDefault(items, statusRegistry);\n }\n return [...items].sort((left, right) => {\n const byField = compareBySortField(left, right, sortField);\n if (byField !== 0) {\n return sortOrder === \"desc\" ? -byField : byField;\n }\n const fallback = compareDefaultSort(left, right, statusRegistry);\n return sortOrder === \"desc\" ? -fallback : fallback;\n });\n}\n\nfunction readListFieldValue(item: ListedItem, field: string, treeMode = false): unknown {\n const normalized = normalizeProjectionField(field.trim());\n if (normalized.length === 0) {\n return null;\n }\n const itemRecord = toItemRecord(item);\n if (treeMode && normalized === \"title\" && typeof itemRecord.tree_title === \"string\") {\n return itemRecord.tree_title;\n }\n if (Object.prototype.hasOwnProperty.call(itemRecord, normalized)) {\n return itemRecord[normalized] ?? null;\n }\n return null;\n}\n\nfunction projectListItems(items: ListedItem[], projection: ListProjectionConfig, treeMode = false): ListedItem[] {\n if (projection.mode === \"full\") {\n return items;\n }\n return items.map((item) => {\n const projected: Record<string, unknown> = {};\n for (const field of projection.fields) {\n projected[field] = readListFieldValue(item, field, treeMode);\n }\n return projected as unknown as ListedItem;\n });\n}\n\nfunction runtimeMetadataKeysForProjection(definitions: Array<{ metadata_key: string }>): string[] {\n const keys: string[] = [];\n for (const field of definitions) {\n keys.push(field.metadata_key);\n }\n return keys;\n}\n\n/**\n * Implements run list for the public runtime surface of this module.\n */\nexport async function runList(status: ItemStatus | undefined, options: ListOptions, global: GlobalOptions): Promise<ListResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const runtimeFieldFilters = collectRuntimeFilterValues(options as Record<string, unknown>, runtimeFieldRegistry, \"list\");\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const projection = parseProjectionConfig(options);\n const runtimeMetadataKeys = runtimeMetadataKeysForProjection(runtimeFieldRegistry.definitions);\n validateListProjectionFields(projection, runtimeMetadataKeys);\n const listWarnings: string[] = [];\n const projectionNeedsBody = projection.fields.some((field) => normalizeProjectionField(field) === \"body\");\n // The heavy collection fields are only emitted by `--full` (verbatim items) or an\n // explicit `--fields <heavy>` selection. Every other projection (default brief,\n // `--compact`, light `--fields`) reads only light scalar fields, so it takes the\n // light path that skips the large collections cache (the hot-path JSON.parse win).\n const projectionNeedsCollections =\n projection.mode === \"full\" ||\n projection.fields.some((field) => HEAVY_PROJECTION_FIELDS.has(normalizeProjectionField(field)));\n // Content-field filters (GH-242) inspect the heavy collection arrays and/or the\n // body, so they force the matching load path even when the projection alone\n // would take the light path. notes/learnings/files/docs/tests/comments/deps/\n // linked_command live in the heavy collections; body needs the body load.\n const contentFieldFilters = resolveContentFieldFilters(options as Record<string, unknown>);\n const contentNeedsCollections = contentFiltersNeedCollections(contentFieldFilters);\n const contentNeedsBody = contentFiltersNeedBody(contentFieldFilters);\n let items: ListedItem[];\n if (options.includeBody || projectionNeedsBody || contentNeedsBody) {\n items = await listAllFrontMatterWithBody(pmRoot, settings.item_format, typeRegistry.type_to_folder, listWarnings, settings.schema);\n } else if (projectionNeedsCollections || contentNeedsCollections) {\n items = await listAllFrontMatter(pmRoot, settings.item_format, typeRegistry.type_to_folder, listWarnings, settings.schema);\n } else {\n items = await listAllFrontMatterLight(pmRoot, settings.item_format, typeRegistry.type_to_folder, listWarnings, settings.schema);\n }\n const sortField = parseSortField(options.sort);\n const sortOrder = parseSortOrder(options.order) ?? \"asc\";\n const treeEnabled = options.tree === true;\n if (!treeEnabled && options.treeDepth !== undefined) {\n throw new PmCliError(\"List --tree-depth requires --tree\", EXIT_CODE.USAGE);\n }\n const treeDepth = treeEnabled ? parseTreeDepth(options.treeDepth) : undefined;\n const parentRoot = treeEnabled ? trimNonEmpty(options.parent) : undefined;\n if (!sortField && options.order !== undefined) {\n throw new PmCliError(\"List --order requires --sort\", EXIT_CODE.USAGE);\n }\n const explicitStatus = resolveStatusFilter(options.status as ItemStatus | undefined, statusRegistry);\n const resolvedStatus = explicitStatus ?? resolveStatusFilter(status, statusRegistry);\n const explicitAllStatuses = isStatusAllFilterInput(options.status);\n const effectiveOptions = explicitStatus || explicitAllStatuses ? { ...options, excludeTerminal: false } : options;\n const filtered = applyFilters(items, resolvedStatus, effectiveOptions, typeRegistry, statusRegistry, runtimeFieldFilters);\n const filtersStatus =\n explicitAllStatuses\n ? \"all\"\n : resolvedStatus === undefined\n ? null\n : resolvedStatus.length === 1\n ? resolvedStatus[0]\n : resolvedStatus;\n const sorted = sortItems(filtered, sortField, sortOrder, statusRegistry);\n const ordered = treeEnabled ? orderItemsAsTree(sorted, parentRoot, treeDepth) : sorted;\n // --no-truncate (alias --all) forces full results, overriding any --limit so an\n // agent can pull the entire matched set in one call (GH-154).\n const noTruncate = options.noTruncate === true;\n const limit = noTruncate ? undefined : parseIntegerLimit(options.limit);\n const offset = parseOffset(options.offset) ?? 0;\n const limited = limit === undefined ? ordered.slice(offset) : ordered.slice(offset, offset + limit);\n const projected = projectListItems(limited, projection, treeEnabled);\n const totalMatched = ordered.length;\n // Surface the pre-pagination total only when rows were actually omitted.\n const truncationExtras = projected.length < totalMatched ? { total: totalMatched } : {};\n const now = nowIso();\n const warnings = [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right));\n const projectionFields = projection.mode === \"full\" ? null : [...projection.fields];\n // pm-vhx6: compact-mode list output is primarily consumed by agents. Keep the\n // metadata trailer token-light by returning only active/user-supplied filters\n // and omitting projection/sorting/now boilerplate in this path.\n const compactSummaryMode = projection.mode === \"compact\" && options.compact === true;\n if (compactSummaryMode) {\n const compactFilters = buildCompactListFilterSummary({\n filtersStatus,\n options,\n treeEnabled,\n treeDepth,\n sortField,\n sortOrder,\n runtimeFieldFilters,\n });\n return {\n items: projected,\n count: projected.length,\n ...truncationExtras,\n filters: compactFilters,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n }\n return {\n items: projected,\n count: projected.length,\n ...truncationExtras,\n filters: {\n status: filtersStatus,\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n deadline_before: options.deadlineBefore ?? null,\n deadline_after: options.deadlineAfter ?? null,\n updated_after: options.updatedAfter ?? null,\n updated_before: options.updatedBefore ?? null,\n created_after: options.createdAfter ?? null,\n created_before: options.createdBefore ?? null,\n ids: options.ids ?? null,\n assignee: options.assignee ?? null,\n assignee_filter: options.assigneeFilter ?? null,\n parent: options.parent ?? null,\n sprint: options.sprint ?? null,\n release: options.release ?? null,\n ...(options.filterAcMissing === true ? { filter_ac_missing: true } : {}),\n ...(options.filterEstimatesMissing === true ? { filter_estimates_missing: true } : {}),\n ...(options.filterResolutionMissing === true ? { filter_resolution_missing: true } : {}),\n ...(options.filterMetadataMissing === true ? { filter_metadata_missing: true } : {}),\n ...buildGovernanceMissingFilterEcho(options),\n ...buildContentFilterEcho(options),\n limit: options.limit ?? null,\n offset: options.offset ?? null,\n ...(noTruncate ? { no_truncate: true } : {}),\n include_body: options.includeBody ?? null,\n compact: options.compact ?? null,\n fields: options.fields ?? null,\n ...(treeEnabled ? { tree: true, tree_depth: treeDepth ?? null } : {}),\n sort: sortField ?? null,\n order: sortField ? sortOrder : null,\n runtime_filters: runtimeFieldFilters,\n },\n projection: {\n mode: projection.mode,\n fields: projectionFields,\n },\n sorting: {\n sort: sortField ?? \"default\",\n order: sortField ? sortOrder : \"asc\",\n },\n now,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n\nexport const _testOnly = {\n applyFilters,\n buildCompactListFilterSummary,\n buildContentFilterEcho,\n buildGovernanceMissingFilterEcho,\n resolveContentFieldFilters,\n resolveMissingMetadataFilters,\n compareBySortField,\n compareDefaultSort,\n compareNullableString,\n compareNullableTimestamp,\n normalizeProjectionField,\n parseAssigneeFilter,\n parseFieldSelectors,\n parseIdsFilter,\n parseOffset,\n parseProjectionConfig,\n parseSortField,\n parseSortOrder,\n orderItemsAsTree,\n projectListItems,\n readListFieldValue,\n runtimeMetadataKeysForProjection,\n sortItems,\n trimNonEmpty,\n withTreeMetadata,\n};\n"],"names":[],"mappings":"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","debugId":"fc32c1fa-da8f-51be-8001-73668e280dd7"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
_testOnlyCloseCommand,
|
|
3
|
-
runClose
|
|
4
|
-
} from "./chunk-UFKNF23C.js";
|
|
5
|
-
import "./chunk-JJ4SG243.js";
|
|
6
|
-
import "./chunk-LBH7UYKY.js";
|
|
7
|
-
import "./chunk-ZFIEEDTJ.js";
|
|
8
|
-
import "./chunk-MLHX6DN5.js";
|
|
9
|
-
import "./chunk-SNUK7H5J.js";
|
|
10
|
-
export {
|
|
11
|
-
_testOnlyCloseCommand,
|
|
12
|
-
runClose
|
|
13
|
-
};
|
|
14
|
-
//# sourceMappingURL=close-37KEHLYM.js.map
|