@unbrained/pm-cli 2026.6.19 → 2026.6.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +328 -258
- package/README.md +1 -1
- package/dist/cli/bootstrap-args.d.ts +12 -1
- package/dist/cli/bootstrap-args.js +20 -9
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.js +31 -25
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/completion.js +3 -3
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/contracts.js +4 -3
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +62 -0
- package/dist/cli/commands/eval.js +158 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/extension/install-sources.d.ts +12 -0
- package/dist/cli/commands/extension/install-sources.js +77 -10
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.js +49 -3
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.js +9 -2
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/gc.d.ts +12 -1
- package/dist/cli/commands/gc.js +53 -6
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/health.js +27 -9
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +3 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/linked-artifacts.js +13 -3
- package/dist/cli/commands/linked-artifacts.js.map +1 -1
- package/dist/cli/commands/list.js +12 -9
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/plan.js +2 -2
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/restore.js +5 -11
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/search.d.ts +39 -1
- package/dist/cli/commands/search.js +89 -12
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/update.js +96 -58
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +1 -1
- package/dist/cli/commands/validate.js +44 -2
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/extension-command-help.d.ts +9 -0
- package/dist/cli/extension-command-help.js +13 -2
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.d.ts +8 -0
- package/dist/cli/extension-command-options.js +27 -2
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/help-content.js +15 -2
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/main.d.ts +12 -0
- package/dist/cli/main.js +49 -9
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +34 -4
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-operations.js +3 -3
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-CIHV64UC.js +18 -0
- package/dist/cli-bundle/chunks/{activity-XJ7WRNWS.js → activity-KW3IRP44.js} +11 -11
- package/dist/cli-bundle/chunks/{aggregate-LBCWF6UJ.js → aggregate-3ZKQG5SW.js} +10 -10
- package/dist/cli-bundle/chunks/{aggregate-OFT4YVB6.js → aggregate-FIGQEIL3.js} +10 -10
- package/dist/cli-bundle/chunks/{append-BP2ARHOK.js → append-EWJYJ7CH.js} +8 -8
- package/dist/cli-bundle/chunks/{append-5U3XR5SD.js → append-QEOLX3XB.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-CSRFOIHG.js → chunk-2EIMPCE4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MAKOMXVM.js → chunk-2GCDRRIF.js} +106 -67
- package/dist/cli-bundle/chunks/chunk-2GCDRRIF.js.map +1 -0
- package/dist/cli-bundle/chunks/{search-AZR2JITW.js → chunk-2PKHRP6G.js} +190 -22
- package/dist/cli-bundle/chunks/chunk-2PKHRP6G.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YWAYOWDQ.js → chunk-32R4PIC6.js} +118 -15
- package/dist/cli-bundle/chunks/chunk-32R4PIC6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-II3WDRCM.js → chunk-37QXHBIB.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UCNEPMPY.js → chunk-3EWSGA7N.js} +105 -66
- package/dist/cli-bundle/chunks/chunk-3EWSGA7N.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UMTPQMEG.js → chunk-3MDHREEV.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-I2VJM36R.js → chunk-434HM6Z5.js} +21 -21
- package/dist/cli-bundle/chunks/chunk-434HM6Z5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-Y4IBSEQ2.js → chunk-52OCIDPG.js} +20 -8
- package/dist/cli-bundle/chunks/chunk-52OCIDPG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DJ3YYLHG.js → chunk-5FIEHKEX.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-OURX4WVG.js → chunk-5IDI42VV.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-UA4ANRJY.js → chunk-5PCI3UBT.js} +119 -16
- package/dist/cli-bundle/chunks/chunk-5PCI3UBT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RVG3WLY3.js → chunk-5QICDWMV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LIVRA6VG.js → chunk-6CJWZAN7.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-AVMSP2HH.js → chunk-6H4LF7AO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-B2NEFANY.js → chunk-6M4RJS4M.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4BFNWAMQ.js → chunk-6ZXM2XNF.js} +29 -12
- package/dist/cli-bundle/chunks/chunk-6ZXM2XNF.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A5JPMD4Q.js → chunk-76Z3YSHV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5NS6TJ2F.js → chunk-7D3SAQXM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-DVUU3AHP.js → chunk-A4Z7ZOL5.js} +17 -6
- package/dist/cli-bundle/chunks/chunk-A4Z7ZOL5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2E3KSWFG.js → chunk-AIS5PGI3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-47BYN6CA.js → chunk-AZMOLBN3.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-DYZKSIVX.js → chunk-B473GZWW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RNWE2HZR.js → chunk-C3AZ5ZML.js} +15 -15
- package/dist/cli-bundle/chunks/{chunk-S673PVHD.js → chunk-C4N5I7ZW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-TYQBGXH2.js → chunk-CF55WVVS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4EOS35RL.js → chunk-CZPXY7UW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MPEWACTG.js → chunk-CZUB4XWO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-22YA6GCA.js → chunk-D7FYS6PG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5SRID7DV.js → chunk-EBH56IXK.js} +29 -12
- package/dist/cli-bundle/chunks/chunk-EBH56IXK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UIMLAFOE.js → chunk-F5NZWFSW.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-PSWSQHM7.js → chunk-F7K5GWP3.js} +15 -19
- package/dist/cli-bundle/chunks/chunk-F7K5GWP3.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-H3DP6OUM.js → chunk-FKBDKV7Y.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-SO2IOH37.js → chunk-FRUFKWNK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7R5YKVKO.js → chunk-FWPDUYEY.js} +7 -7
- package/dist/cli-bundle/chunks/{search-2JX776KX.js → chunk-GMHPNNYG.js} +184 -23
- package/dist/cli-bundle/chunks/chunk-GMHPNNYG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-USVOBLGB.js → chunk-GOZUHWFD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZBVYKWT2.js → chunk-H7NJZWG2.js} +15 -15
- package/dist/cli-bundle/chunks/{chunk-FPQA4ZMA.js → chunk-HC4AWIKT.js} +18 -7
- package/dist/cli-bundle/chunks/chunk-HC4AWIKT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4L7Q4OVT.js → chunk-HCU6WUSY.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-2RI3BDFK.js → chunk-HIP7WVTL.js} +10 -9
- package/dist/cli-bundle/chunks/chunk-HIP7WVTL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-5QLHQK7V.js → chunk-HMOADQVT.js} +26 -26
- package/dist/cli-bundle/chunks/chunk-HMOADQVT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-K5TD74VU.js → chunk-J4MYYSOL.js} +19 -7
- package/dist/cli-bundle/chunks/chunk-J4MYYSOL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GDOTTY2S.js → chunk-JINYH2DB.js} +40 -2
- package/dist/cli-bundle/chunks/chunk-JINYH2DB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EMFDZ7N3.js → chunk-LEU5GHRC.js} +55 -5
- package/dist/cli-bundle/chunks/chunk-LEU5GHRC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-PRUB7RI4.js → chunk-LUWW7L4B.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-N7LDJRB4.js → chunk-M5XALUSL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NPNNW5TU.js → chunk-N5ZJACJ6.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-NNMBNN6Q.js → chunk-NB3PYLQ6.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-USKTNI7P.js → chunk-NIGXMNNI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GL3QKIET.js → chunk-NIUEXCFS.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-OUG4CL4H.js → chunk-NJHMAJ6N.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-2K56AWDP.js → chunk-NJN7LL7U.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-5P2LQV2F.js → chunk-NSBZ2CKF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZZEM2PH7.js → chunk-NXS7ZKAK.js} +19 -14
- package/dist/cli-bundle/chunks/chunk-NXS7ZKAK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XV6N3QND.js → chunk-O47BPOPC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X26ODPU4.js → chunk-OFYMIDF2.js} +14 -18
- package/dist/cli-bundle/chunks/chunk-OFYMIDF2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QCHNPN24.js → chunk-OTHIWLMB.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-YVYJQR6S.js → chunk-PFSRUHDH.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-M35R7LFX.js → chunk-PP2U4NMT.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-ZGEWEO7B.js → chunk-PUH4D67U.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LEC57E7K.js → chunk-Q2J2HJUN.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QSH34DSQ.js → chunk-QGG32QHW.js} +61 -4
- package/dist/cli-bundle/chunks/chunk-QGG32QHW.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QG6M6XQE.js → chunk-QQHISQBJ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-BQVESTOG.js → chunk-QZTWBFXJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-COHNQLB2.js → chunk-R2EMWY7Q.js} +41 -3
- package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5LZPDRFW.js → chunk-RLK7P77C.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-QTWWHFI3.js → chunk-RVHYI7SL.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-FVZSUIN5.js → chunk-SBGXDO7A.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VP4Z36GO.js → chunk-SRYYRVPB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X7RKOJXL.js → chunk-SX75ADBK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-MTDEEUGV.js → chunk-TKBHZPKD.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HMQMRHQJ.js → chunk-UEMNL33O.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-SDUZTZ55.js → chunk-UPE3CDD7.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-VG3B2CYD.js → chunk-UV6IYE5U.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YOGXK3ON.js → chunk-WQ7NIVDK.js} +18 -13
- package/dist/cli-bundle/chunks/chunk-WQ7NIVDK.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-MTGMNUMJ.js → chunk-YCJX76PW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FP7YLQ52.js → chunk-Z6T4PQI2.js} +11 -10
- package/dist/cli-bundle/chunks/chunk-Z6T4PQI2.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-2BSYPJTJ.js → claim-RC56YUWG.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-EZ6JKY5X.js → claim-THOJ6CMV.js} +10 -10
- package/dist/cli-bundle/chunks/close-DNMHGOCX.js +15 -0
- package/dist/cli-bundle/chunks/{close-3TSX6BYF.js → close-SG5MNCVQ.js} +8 -8
- package/dist/cli-bundle/chunks/{close-many-HB4UFCS3.js → close-many-3L3AQZBU.js} +15 -15
- package/dist/cli-bundle/chunks/{close-many-B7DBVA46.js → close-many-DKQLBGLV.js} +15 -15
- package/dist/cli-bundle/chunks/{comments-M7PAINZT.js → comments-M7ZOZNBX.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-X7M7XM6I.js → comments-SKWMDWCW.js} +10 -10
- package/dist/cli-bundle/chunks/{config-YICACPHA.js → config-7CK62S7T.js} +30 -10
- package/dist/cli-bundle/chunks/config-7CK62S7T.js.map +1 -0
- package/dist/cli-bundle/chunks/{config-UWF3KRP5.js → config-OZCUABPB.js} +29 -9
- package/dist/cli-bundle/chunks/config-OZCUABPB.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-EGUGU4K7.js → context-OEC366TO.js} +13 -13
- package/dist/cli-bundle/chunks/{context-V32ZAPL6.js → context-PUG2A7RC.js} +13 -13
- package/dist/cli-bundle/chunks/{contracts-B2YWYUV5.js → contracts-3THOLA7L.js} +10 -8
- package/dist/cli-bundle/chunks/contracts-3THOLA7L.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-7G553BHP.js → contracts-N65FXEOL.js} +10 -8
- package/dist/cli-bundle/chunks/contracts-N65FXEOL.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-NWFFRYWM.js → copy-6QLHILAC.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-RMLXLZOL.js → copy-JPX7VZCH.js} +7 -7
- package/dist/cli-bundle/chunks/create-NNP6TSFO.js +30 -0
- package/dist/cli-bundle/chunks/{create-GK4MX2LJ.js → create-Y54ZVVZH.js} +14 -14
- package/dist/cli-bundle/chunks/{delete-RMGNIL2S.js → delete-63PCMQAJ.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-EFQLVEAS.js → delete-GDSMGAGJ.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-WKHUPVD3.js → deps-T4ZF5G54.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-K2I7QV4Y.js → deps-XYQ73XRH.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-3FXRDYA7.js → docs-C75YIXHC.js} +10 -9
- package/dist/cli-bundle/chunks/{docs-3FXRDYA7.js.map → docs-C75YIXHC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{docs-2H2UGIT6.js → docs-EHNPDWUL.js} +12 -11
- package/dist/cli-bundle/chunks/{docs-2H2UGIT6.js.map → docs-EHNPDWUL.js.map} +1 -1
- package/dist/cli-bundle/chunks/eval-3WKDTRMH.js +276 -0
- package/dist/cli-bundle/chunks/eval-3WKDTRMH.js.map +1 -0
- package/dist/cli-bundle/chunks/eval-GTENKE24.js +286 -0
- package/dist/cli-bundle/chunks/eval-GTENKE24.js.map +7 -0
- package/dist/cli-bundle/chunks/{extension-4LPTFTV4.js → extension-46NWACO3.js} +5 -5
- package/dist/cli-bundle/chunks/{extension-ASUPTDCC.js → extension-D5FDZ2CO.js} +5 -5
- package/dist/cli-bundle/chunks/{files-TXEQOA7C.js → files-DSZBOSSN.js} +12 -11
- package/dist/cli-bundle/chunks/{files-TXEQOA7C.js.map → files-DSZBOSSN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{files-UAZFB3EA.js → files-X3H7CCBQ.js} +10 -9
- package/dist/cli-bundle/chunks/{files-UAZFB3EA.js.map → files-X3H7CCBQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{focus-UGROAMAX.js → focus-5STQXDPU.js} +8 -8
- package/dist/cli-bundle/chunks/{focus-ELOPN2SR.js → focus-MDVPOWB5.js} +8 -8
- package/dist/cli-bundle/chunks/gc-ZC7JHBG7.js +395 -0
- package/dist/cli-bundle/chunks/gc-ZC7JHBG7.js.map +7 -0
- package/dist/cli-bundle/chunks/gc-ZMST3WQP.js +385 -0
- package/dist/cli-bundle/chunks/gc-ZMST3WQP.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-OTXPLWYW.js → get-J2IPJRZW.js} +11 -11
- package/dist/cli-bundle/chunks/{get-IWZ7IMPS.js → get-NT7L2HUZ.js} +11 -11
- package/dist/cli-bundle/chunks/{health-PPTJ7XKW.js → health-IVMA3XQC.js} +38 -26
- package/dist/cli-bundle/chunks/health-IVMA3XQC.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-JEBESKID.js → health-WOYBR3KU.js} +37 -25
- package/dist/cli-bundle/chunks/health-WOYBR3KU.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-HNWBUDMI.js → history-RLH2QCRO.js} +10 -10
- package/dist/cli-bundle/chunks/history-WX3MGFS2.js +20 -0
- package/dist/cli-bundle/chunks/{history-compact-MMQC7MCW.js → history-compact-UXDIFC33.js} +12 -12
- package/dist/cli-bundle/chunks/{history-compact-EQXVPK3V.js → history-compact-ZBEBGJM7.js} +12 -12
- package/dist/cli-bundle/chunks/{history-redact-UBDHBEJE.js → history-redact-P7I7AWMB.js} +11 -11
- package/dist/cli-bundle/chunks/history-redact-YQGU3XRA.js +21 -0
- package/dist/cli-bundle/chunks/{history-repair-GMMHFAGH.js → history-repair-52KINVIK.js} +12 -12
- package/dist/cli-bundle/chunks/{history-repair-7DSDRPMX.js → history-repair-RM5ITLU5.js} +12 -12
- package/dist/cli-bundle/chunks/{init-QGK4JFF6.js → init-2BNZOO6F.js} +10 -10
- package/dist/cli-bundle/chunks/init-SC2P6CHP.js +20 -0
- package/dist/cli-bundle/chunks/{learnings-DR53TWRA.js → learnings-W6F3FIPL.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-A6DGBMG3.js → learnings-YGYVHWJK.js} +10 -10
- package/dist/cli-bundle/chunks/{list-LJ5DBXC3.js → list-K6FPV4J4.js} +10 -10
- package/dist/cli-bundle/chunks/{list-KOJN23UL.js → list-KPAYU5KZ.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-7VLTHKPW.js → notes-PU74EPKV.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-K5I3TAYR.js → notes-YTD6ZILW.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-X3STKLED.js → plan-FNXHXRCI.js} +15 -15
- package/dist/cli-bundle/chunks/plan-FNXHXRCI.js.map +7 -0
- package/dist/cli-bundle/chunks/{plan-BK3OMLGP.js → plan-GEQYUCBW.js} +16 -16
- package/dist/cli-bundle/chunks/plan-GEQYUCBW.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-XDLFESU7.js → register-list-query-PHWYHENI.js} +43 -22
- package/dist/cli-bundle/chunks/register-list-query-PHWYHENI.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-FUMXPWZ4.js → register-list-query-QI45RMKN.js} +42 -21
- package/dist/cli-bundle/chunks/register-list-query-QI45RMKN.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-RXRX4P7D.js → register-mutation-X3BUOQEL.js} +33 -33
- package/dist/cli-bundle/chunks/{register-mutation-ZAGVKMBQ.js → register-mutation-YINRTS7L.js} +33 -33
- package/dist/cli-bundle/chunks/{register-operations-DGSHCS75.js → register-operations-E5JEASRK.js} +35 -35
- package/dist/cli-bundle/chunks/register-operations-E5JEASRK.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-6UURPZN5.js → register-operations-MIDTRW7S.js} +34 -34
- package/dist/cli-bundle/chunks/{register-operations-6UURPZN5.js.map → register-operations-MIDTRW7S.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-LTJG52WP.js → register-setup-DYBFLEZX.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-2FEGSFLM.js → register-setup-EG2U6CEU.js} +15 -15
- package/dist/cli-bundle/chunks/restore-5KHR2YYQ.js +19 -0
- package/dist/cli-bundle/chunks/{restore-SJUWYOCK.js → restore-XQYSWBV7.js} +11 -11
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-VWAMP2S2.js → scheduling-shortcuts-HJMTEXKE.js} +14 -14
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-W4F2LKHW.js → scheduling-shortcuts-NNT5ASZR.js} +14 -14
- package/dist/cli-bundle/chunks/{schema-N5ETYD4P.js → schema-263RI4WW.js} +9 -9
- package/dist/cli-bundle/chunks/{schema-DXQRIEFM.js → schema-TZXW6XWD.js} +9 -9
- package/dist/cli-bundle/chunks/search-LECJYSXE.js +33 -0
- package/dist/cli-bundle/chunks/search-SFRJOVDG.js +37 -0
- package/dist/cli-bundle/chunks/{stats-ZFESFVQC.js → stats-N7ER2PNK.js} +8 -8
- package/dist/cli-bundle/chunks/{stats-J563NJBY.js → stats-VPBGSRQH.js} +8 -8
- package/dist/cli-bundle/chunks/{telemetry-BNGLIFEM.js → telemetry-L6K3BUIQ.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-SC7HPRXX.js → telemetry-PP3FUNBU.js} +4 -4
- package/dist/cli-bundle/chunks/{test-47UQGEXE.js → test-3EGNS3T5.js} +15 -15
- package/dist/cli-bundle/chunks/{test-55RJCGRU.js → test-RQCTSWUK.js} +15 -15
- package/dist/cli-bundle/chunks/{test-all-DN6KG4FX.js → test-all-NJ5V2QFS.js} +15 -15
- package/dist/cli-bundle/chunks/{test-all-5SFTTRNL.js → test-all-ZHFAWNC3.js} +15 -15
- package/dist/cli-bundle/chunks/{test-runs-NHRBT7SN.js → test-runs-AJHR6IQF.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-DZEDJ4GH.js → test-runs-GN3C6GOI.js} +5 -5
- package/dist/cli-bundle/chunks/update-6YXOGHRT.js +24 -0
- package/dist/cli-bundle/chunks/update-6YXOGHRT.js.map +7 -0
- package/dist/cli-bundle/chunks/update-V33YUBRP.js +28 -0
- package/dist/cli-bundle/chunks/update-V33YUBRP.js.map +1 -0
- package/dist/cli-bundle/chunks/{update-many-IRNV3OTG.js → update-many-N2AN6ZDH.js} +23 -23
- package/dist/cli-bundle/chunks/{update-many-OKYWFCBO.js → update-many-RYQ64CFW.js} +23 -23
- package/dist/cli-bundle/chunks/{upgrade-KP4I45V5.js → upgrade-TJXFLZIX.js} +5 -5
- package/dist/cli-bundle/chunks/{upgrade-3RIAFQIK.js → upgrade-VPCIYAVW.js} +5 -5
- package/dist/cli-bundle/chunks/{validate-GVY4VE43.js → validate-JMNWEUYF.js} +62 -24
- package/dist/cli-bundle/chunks/validate-JMNWEUYF.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-ADKGN37M.js → validate-PHKIYGSY.js} +61 -23
- package/dist/cli-bundle/chunks/validate-PHKIYGSY.js.map +7 -0
- package/dist/cli-bundle/main.js +133 -55
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/checkpoint/checkpoint-gc.d.ts +69 -0
- package/dist/core/checkpoint/checkpoint-gc.js +175 -0
- package/dist/core/checkpoint/checkpoint-gc.js.map +1 -0
- package/dist/core/config/nested-settings.js +22 -2
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/diagnostics/remediation.js +40 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +0 -9
- package/dist/core/extensions/extension-types.js +2 -27
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/fs/fs-utils.d.ts +17 -1
- package/dist/core/fs/fs-utils.js +19 -3
- package/dist/core/fs/fs-utils.js.map +1 -1
- package/dist/core/history/drift-scan.d.ts +17 -5
- package/dist/core/history/drift-scan.js +22 -14
- package/dist/core/history/drift-scan.js.map +1 -1
- package/dist/core/history/replay.d.ts +7 -0
- package/dist/core/history/replay.js +11 -6
- package/dist/core/history/replay.js.map +1 -1
- package/dist/core/item/item-format-version.d.ts +87 -0
- package/dist/core/item/item-format-version.js +85 -0
- package/dist/core/item/item-format-version.js.map +1 -0
- package/dist/core/item/item-format.js +8 -2
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/status-filter.d.ts +7 -3
- package/dist/core/item/status-filter.js +26 -5
- package/dist/core/item/status-filter.js.map +1 -1
- package/dist/core/search/bm25.d.ts +113 -0
- package/dist/core/search/bm25.js +178 -0
- package/dist/core/search/bm25.js.map +1 -0
- package/dist/core/search/eval.d.ts +114 -0
- package/dist/core/search/eval.js +217 -0
- package/dist/core/search/eval.js.map +1 -0
- package/dist/core/sentry/instrument.d.ts +14 -0
- package/dist/core/sentry/instrument.js +43 -3
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/shared/constants.js +6 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/paths.js +4 -3
- package/dist/core/store/paths.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +7 -0
- package/dist/core/store/settings-validator.js +10 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +6 -2
- package/dist/core/store/settings.js.map +1 -1
- package/dist/mcp/tool-definitions.js +4 -3
- package/dist/mcp/tool-definitions.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +3 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +4 -4
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +1 -0
- package/dist/sdk/cli-contracts.js +11 -2
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.d.ts +2 -2
- package/dist/sdk/index.js +3 -3
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +1 -0
- package/dist/sdk/runtime.js +3 -2
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/testing.d.ts +48 -1
- package/dist/sdk/testing.js +98 -2
- package/dist/sdk/testing.js.map +1 -1
- package/dist/types.d.ts +26 -0
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +1 -0
- package/docs/ARCHITECTURE.md +126 -11
- package/docs/CLAUDE_CODE_PLUGIN.md +5 -13
- package/docs/COMMANDS.md +57 -5
- package/docs/CONFIGURATION.md +39 -0
- package/docs/EXTENSIONS.md +2 -2
- package/docs/MIGRATION_CLI_SIMPLIFICATION.md +9 -2
- package/docs/QUICKSTART.md +2 -0
- package/docs/README.md +2 -0
- package/docs/RELEASING.md +2 -1
- package/docs/SDK.md +80 -1
- package/docs/TESTING.md +18 -0
- package/package.json +4 -3
- package/packages/pm-command-kit/README.md +4 -0
- package/packages/pm-todos/extensions/todos/index.js +2 -0
- package/packages/pm-todos/extensions/todos/index.ts +2 -0
- package/packages/pm-todos/extensions/todos/runtime.js +192 -9
- package/packages/pm-todos/extensions/todos/runtime.ts +211 -8
- package/dist/cli-bundle/chunks/activity-62I26XZB.js +0 -18
- package/dist/cli-bundle/chunks/chunk-2RI3BDFK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4BFNWAMQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5QLHQK7V.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5SRID7DV.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-COHNQLB2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DVUU3AHP.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EMFDZ7N3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FP7YLQ52.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FPQA4ZMA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GDOTTY2S.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-I2VJM36R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K5TD74VU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MAKOMXVM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-PSWSQHM7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QSH34DSQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UA4ANRJY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UCNEPMPY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-X26ODPU4.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Y4IBSEQ2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YOGXK3ON.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YWAYOWDQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ZZEM2PH7.js.map +0 -1
- package/dist/cli-bundle/chunks/close-TQZK43Z5.js +0 -15
- package/dist/cli-bundle/chunks/config-UWF3KRP5.js.map +0 -7
- package/dist/cli-bundle/chunks/config-YICACPHA.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-7G553BHP.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-B2YWYUV5.js.map +0 -7
- package/dist/cli-bundle/chunks/create-UZLJXHLA.js +0 -30
- package/dist/cli-bundle/chunks/gc-5RTYXLQU.js +0 -211
- package/dist/cli-bundle/chunks/gc-5RTYXLQU.js.map +0 -7
- package/dist/cli-bundle/chunks/gc-FK5732EK.js +0 -208
- package/dist/cli-bundle/chunks/gc-FK5732EK.js.map +0 -1
- package/dist/cli-bundle/chunks/health-JEBESKID.js.map +0 -7
- package/dist/cli-bundle/chunks/health-PPTJ7XKW.js.map +0 -1
- package/dist/cli-bundle/chunks/history-TKTULEVE.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-SPIFIXVY.js +0 -21
- package/dist/cli-bundle/chunks/init-A6FTZ5UC.js +0 -20
- package/dist/cli-bundle/chunks/plan-BK3OMLGP.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-X3STKLED.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-FUMXPWZ4.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-XDLFESU7.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-DGSHCS75.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-PI3WM4GK.js +0 -19
- package/dist/cli-bundle/chunks/search-2JX776KX.js.map +0 -1
- package/dist/cli-bundle/chunks/search-AZR2JITW.js.map +0 -7
- package/dist/cli-bundle/chunks/update-2BZEAI7B.js +0 -24
- package/dist/cli-bundle/chunks/update-GCNLER2H.js +0 -28
- package/dist/cli-bundle/chunks/validate-ADKGN37M.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-GVY4VE43.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-62I26XZB.js.map → activity-CIHV64UC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-XJ7WRNWS.js.map → activity-KW3IRP44.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-LBCWF6UJ.js.map → aggregate-3ZKQG5SW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-OFT4YVB6.js.map → aggregate-FIGQEIL3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-BP2ARHOK.js.map → append-EWJYJ7CH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-5U3XR5SD.js.map → append-QEOLX3XB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CSRFOIHG.js.map → chunk-2EIMPCE4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-II3WDRCM.js.map → chunk-37QXHBIB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UMTPQMEG.js.map → chunk-3MDHREEV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DJ3YYLHG.js.map → chunk-5FIEHKEX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OURX4WVG.js.map → chunk-5IDI42VV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RVG3WLY3.js.map → chunk-5QICDWMV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LIVRA6VG.js.map → chunk-6CJWZAN7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AVMSP2HH.js.map → chunk-6H4LF7AO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-B2NEFANY.js.map → chunk-6M4RJS4M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A5JPMD4Q.js.map → chunk-76Z3YSHV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5NS6TJ2F.js.map → chunk-7D3SAQXM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2E3KSWFG.js.map → chunk-AIS5PGI3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-47BYN6CA.js.map → chunk-AZMOLBN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DYZKSIVX.js.map → chunk-B473GZWW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RNWE2HZR.js.map → chunk-C3AZ5ZML.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-S673PVHD.js.map → chunk-C4N5I7ZW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TYQBGXH2.js.map → chunk-CF55WVVS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4EOS35RL.js.map → chunk-CZPXY7UW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MPEWACTG.js.map → chunk-CZUB4XWO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-22YA6GCA.js.map → chunk-D7FYS6PG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UIMLAFOE.js.map → chunk-F5NZWFSW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-H3DP6OUM.js.map → chunk-FKBDKV7Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SO2IOH37.js.map → chunk-FRUFKWNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7R5YKVKO.js.map → chunk-FWPDUYEY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-USVOBLGB.js.map → chunk-GOZUHWFD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZBVYKWT2.js.map → chunk-H7NJZWG2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4L7Q4OVT.js.map → chunk-HCU6WUSY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PRUB7RI4.js.map → chunk-LUWW7L4B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N7LDJRB4.js.map → chunk-M5XALUSL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NPNNW5TU.js.map → chunk-N5ZJACJ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NNMBNN6Q.js.map → chunk-NB3PYLQ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-USKTNI7P.js.map → chunk-NIGXMNNI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GL3QKIET.js.map → chunk-NIUEXCFS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OUG4CL4H.js.map → chunk-NJHMAJ6N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2K56AWDP.js.map → chunk-NJN7LL7U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5P2LQV2F.js.map → chunk-NSBZ2CKF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XV6N3QND.js.map → chunk-O47BPOPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QCHNPN24.js.map → chunk-OTHIWLMB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YVYJQR6S.js.map → chunk-PFSRUHDH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-M35R7LFX.js.map → chunk-PP2U4NMT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZGEWEO7B.js.map → chunk-PUH4D67U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LEC57E7K.js.map → chunk-Q2J2HJUN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QG6M6XQE.js.map → chunk-QQHISQBJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BQVESTOG.js.map → chunk-QZTWBFXJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5LZPDRFW.js.map → chunk-RLK7P77C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QTWWHFI3.js.map → chunk-RVHYI7SL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FVZSUIN5.js.map → chunk-SBGXDO7A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VP4Z36GO.js.map → chunk-SRYYRVPB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-X7RKOJXL.js.map → chunk-SX75ADBK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MTDEEUGV.js.map → chunk-TKBHZPKD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HMQMRHQJ.js.map → chunk-UEMNL33O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SDUZTZ55.js.map → chunk-UPE3CDD7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VG3B2CYD.js.map → chunk-UV6IYE5U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MTGMNUMJ.js.map → chunk-YCJX76PW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-2BSYPJTJ.js.map → claim-RC56YUWG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-EZ6JKY5X.js.map → claim-THOJ6CMV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-TQZK43Z5.js.map → close-DNMHGOCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-3TSX6BYF.js.map → close-SG5MNCVQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-HB4UFCS3.js.map → close-many-3L3AQZBU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-B7DBVA46.js.map → close-many-DKQLBGLV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-M7PAINZT.js.map → comments-M7ZOZNBX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-X7M7XM6I.js.map → comments-SKWMDWCW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-EGUGU4K7.js.map → context-OEC366TO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-V32ZAPL6.js.map → context-PUG2A7RC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-NWFFRYWM.js.map → copy-6QLHILAC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-RMLXLZOL.js.map → copy-JPX7VZCH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-UZLJXHLA.js.map → create-NNP6TSFO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-GK4MX2LJ.js.map → create-Y54ZVVZH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-RMGNIL2S.js.map → delete-63PCMQAJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-EFQLVEAS.js.map → delete-GDSMGAGJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-WKHUPVD3.js.map → deps-T4ZF5G54.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-K2I7QV4Y.js.map → deps-XYQ73XRH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-4LPTFTV4.js.map → extension-46NWACO3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-ASUPTDCC.js.map → extension-D5FDZ2CO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-UGROAMAX.js.map → focus-5STQXDPU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-ELOPN2SR.js.map → focus-MDVPOWB5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-OTXPLWYW.js.map → get-J2IPJRZW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-IWZ7IMPS.js.map → get-NT7L2HUZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-HNWBUDMI.js.map → history-RLH2QCRO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-TKTULEVE.js.map → history-WX3MGFS2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-MMQC7MCW.js.map → history-compact-UXDIFC33.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-EQXVPK3V.js.map → history-compact-ZBEBGJM7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-UBDHBEJE.js.map → history-redact-P7I7AWMB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-SPIFIXVY.js.map → history-redact-YQGU3XRA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-GMMHFAGH.js.map → history-repair-52KINVIK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-7DSDRPMX.js.map → history-repair-RM5ITLU5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-QGK4JFF6.js.map → init-2BNZOO6F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-A6FTZ5UC.js.map → init-SC2P6CHP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-DR53TWRA.js.map → learnings-W6F3FIPL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-A6DGBMG3.js.map → learnings-YGYVHWJK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-LJ5DBXC3.js.map → list-K6FPV4J4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-KOJN23UL.js.map → list-KPAYU5KZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-7VLTHKPW.js.map → notes-PU74EPKV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-K5I3TAYR.js.map → notes-YTD6ZILW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-RXRX4P7D.js.map → register-mutation-X3BUOQEL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-ZAGVKMBQ.js.map → register-mutation-YINRTS7L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-LTJG52WP.js.map → register-setup-DYBFLEZX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-2FEGSFLM.js.map → register-setup-EG2U6CEU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-PI3WM4GK.js.map → restore-5KHR2YYQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-SJUWYOCK.js.map → restore-XQYSWBV7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-VWAMP2S2.js.map → scheduling-shortcuts-HJMTEXKE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-W4F2LKHW.js.map → scheduling-shortcuts-NNT5ASZR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-N5ETYD4P.js.map → schema-263RI4WW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-DXQRIEFM.js.map → schema-TZXW6XWD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-55RJCGRU.js.map → search-LECJYSXE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-47UQGEXE.js.map → search-SFRJOVDG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-ZFESFVQC.js.map → stats-N7ER2PNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-J563NJBY.js.map → stats-VPBGSRQH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-BNGLIFEM.js.map → telemetry-L6K3BUIQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-SC7HPRXX.js.map → telemetry-PP3FUNBU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-GCNLER2H.js.map → test-3EGNS3T5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-2BZEAI7B.js.map → test-RQCTSWUK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-DN6KG4FX.js.map → test-all-NJ5V2QFS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-5SFTTRNL.js.map → test-all-ZHFAWNC3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-NHRBT7SN.js.map → test-runs-AJHR6IQF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-DZEDJ4GH.js.map → test-runs-GN3C6GOI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-IRNV3OTG.js.map → update-many-N2AN6ZDH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-OKYWFCBO.js.map → update-many-RYQ64CFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-KP4I45V5.js.map → upgrade-TJXFLZIX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-3RIAFQIK.js.map → upgrade-VPCIYAVW.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../../../../cli/commands/plan.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @module cli/commands/plan\n *\n * Implements the pm plan command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry, resolveTypeName } from \"../../core/item/type-registry.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { splitCommaList } from \"../../core/shared/split-comma-list.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { locateItem, mutateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type {\n DependencyKind,\n ItemDocument,\n ItemMetadata,\n PlanDecision,\n PlanDiscovery,\n PlanHarness,\n PlanMode,\n PlanStep,\n PlanStepDoc,\n PlanStepFile,\n PlanStepLink,\n PlanStepLinkKind,\n PlanStepStatus,\n PlanStepTest,\n PlanValidationCheck,\n} from \"../../types/index.js\";\nimport {\n PLAN_HARNESS_VALUES,\n PLAN_MODE_VALUES,\n PLAN_STEP_LINK_KIND_VALUES,\n PLAN_STEP_STATUS_VALUES,\n} from \"../../types/index.js\";\nimport { runCreate, type CreateCommandOptions, type CreateResult } from \"./create.js\";\n\nexport const PLAN_SUBCOMMANDS = [\n \"create\",\n \"show\",\n \"add-step\",\n \"update-step\",\n \"complete-step\",\n \"block-step\",\n \"reorder-step\",\n \"remove-step\",\n \"link\",\n \"unlink\",\n \"decision\",\n \"discovery\",\n \"validation\",\n \"resume\",\n \"approve\",\n \"materialize\",\n] as const;\n/**\n * Restricts plan subcommand values accepted by command, SDK, and storage contracts.\n */\nexport type PlanSubcommand = (typeof PLAN_SUBCOMMANDS)[number];\n\nexport const PLAN_SHOW_DEPTH_VALUES = [\"brief\", \"standard\", \"deep\"] as const;\n/**\n * Restricts plan show depth values accepted by command, SDK, and storage contracts.\n */\nexport type PlanShowDepth = (typeof PLAN_SHOW_DEPTH_VALUES)[number];\n\n/**\n * Documents the plan command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanCommandOptions {\n title?: string;\n description?: string;\n scope?: string;\n parent?: string;\n related?: string | string[];\n blocks?: string | string[];\n blockedBy?: string | string[];\n harness?: string;\n mode?: string;\n resumeContext?: string;\n tags?: string;\n priority?: string;\n body?: string;\n claim?: boolean;\n fromSearch?: string;\n stepTitle?: string;\n /**\n * pm-6mit: repeatable --step values. On create each value seeds one ordered\n * step (argv order; values are never comma-split so titles may contain\n * commas). On other subcommands a single value aliases stepTitle.\n */\n step?: string | string[];\n stepBody?: string;\n stepOwner?: string;\n stepStatus?: string;\n stepEvidence?: string;\n stepBlockedReason?: string;\n stepReplacement?: string;\n dependsOn?: string | string[];\n link?: string | string[];\n linkKind?: string;\n linkNote?: string;\n promoteToItemDep?: boolean;\n allowMultipleActive?: boolean;\n file?: string | string[];\n test?: string | string[];\n doc?: string | string[];\n decisionText?: string;\n decision?: string;\n decisionRationale?: string;\n decisionEvidence?: string;\n discoveryText?: string;\n discovery?: string;\n validationText?: string;\n validation?: string;\n validationCommand?: string;\n validationExpected?: string;\n depth?: string;\n fields?: string;\n steps?: string;\n template?: string;\n materializeType?: string;\n materializeParent?: string;\n materializeTags?: string;\n author?: string;\n message?: string;\n force?: boolean;\n}\n\n/**\n * Documents the plan command result payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanCommandResult {\n action: PlanSubcommand;\n plan: PlanResultPlan;\n step?: PlanStep;\n current_step?: PlanStep | undefined;\n next_actions?: string[];\n materialized?: { id: string; type: string; from_step: string }[];\n // pm-fl0c #10 (2026-05-28): steps that pm plan materialize intentionally\n // skipped (already-completed or already-materialized via an `implements`\n // link). Surfacing these makes `--steps all` idempotent without users\n // having to read history to find out what was done.\n materialize_skipped?: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[];\n warnings: string[];\n generated_at: string;\n}\n\n/**\n * Documents the plan result plan payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanResultPlan {\n id: string;\n title: string;\n status: string;\n mode: PlanMode;\n scope?: string;\n harness?: PlanHarness;\n parent?: string;\n resume_context?: string;\n steps_summary: PlanStepSummary;\n current_step?: { id: string; order: number; title: string; status: PlanStepStatus } | undefined;\n blocked_steps?: { id: string; order: number; title: string; blocked_reason?: string }[];\n steps?: PlanStep[];\n decisions?: PlanDecision[];\n discoveries?: PlanDiscovery[];\n validation?: PlanValidationCheck[];\n linked_items?: { id: string; kind: DependencyKind }[];\n}\n\n/**\n * Documents the plan step summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepSummary {\n total: number;\n pending: number;\n in_progress: number;\n blocked: number;\n completed: number;\n skipped: number;\n superseded: number;\n /**\n * Whole-percent step-completion progress (`round(completed / total * 100)`),\n * surfaced so agents see plan progress without recomputing it (GH-158 #5).\n */\n completion_pct: number;\n}\n\nconst STEP_ID_PREFIX = \"plan-step-\";\nconst DEFAULT_PLAN_MODE: PlanMode = \"draft\";\n\nexport const PLAN_TEMPLATE_NAMES = [\"bug-investigation\", \"feature-implementation\", \"refactoring-sprint\"] as const;\n/**\n * Restricts plan template names accepted by `pm plan create --template` (GH-158 #2).\n */\nexport type PlanTemplateName = (typeof PLAN_TEMPLATE_NAMES)[number];\n\ninterface PlanTemplateStepSeed {\n title: string;\n body: string;\n}\n\n// Built-in step scaffolds for the most common agent workflows. Each seeds an\n// ordered list of pending steps so `pm plan create --template <name>` produces a\n// ready-to-execute plan instead of an empty shell (GH-158 #2).\nconst PLAN_TEMPLATES: Record<PlanTemplateName, PlanTemplateStepSeed[]> = {\n \"bug-investigation\": [\n { title: \"Reproduce the bug\", body: \"Capture exact steps, inputs, and the observed vs expected behavior.\" },\n { title: \"Locate the root cause\", body: \"Trace the failure to the responsible code path with evidence.\" },\n { title: \"Write a failing test\", body: \"Add a regression test that fails for the current bug.\" },\n { title: \"Implement the fix\", body: \"Apply the minimal change that makes the failing test pass.\" },\n { title: \"Verify and document\", body: \"Run the full suite and record the resolution and verification.\" },\n ],\n \"feature-implementation\": [\n { title: \"Clarify requirements & acceptance criteria\", body: \"Confirm scope, edge cases, and done-conditions.\" },\n { title: \"Design the approach\", body: \"Decide the data model, interfaces, and integration points.\" },\n { title: \"Implement the change\", body: \"Build the feature behind the agreed design.\" },\n { title: \"Add tests\", body: \"Cover the new behavior and its edge cases.\" },\n { title: \"Update docs & changelog\", body: \"Document the feature and surface it to users.\" },\n ],\n \"refactoring-sprint\": [\n { title: \"Map the current structure & risks\", body: \"Inventory the code to change and its blast radius.\" },\n { title: \"Add characterization tests\", body: \"Lock in current behavior before refactoring.\" },\n { title: \"Refactor incrementally\", body: \"Apply small, reversible steps keeping tests green.\" },\n { title: \"Verify behavior is unchanged\", body: \"Run the full suite and compare against the baseline.\" },\n { title: \"Clean up & document\", body: \"Remove dead code and record the new structure.\" },\n ],\n};\n\n/**\n * Resolves the ordered step seeds for a built-in plan template, rejecting\n * unknown names with the allowed set so agents can self-correct.\n */\nexport function resolvePlanTemplateSteps(raw: string): PlanTemplateStepSeed[] {\n const normalized = raw.trim().toLowerCase();\n const template = Object.prototype.hasOwnProperty.call(PLAN_TEMPLATES, normalized)\n ? PLAN_TEMPLATES[normalized as PlanTemplateName]\n : undefined;\n if (!template) {\n throw new PmCliError(`Unknown plan template \"${raw}\". Allowed: ${PLAN_TEMPLATE_NAMES.join(\", \")}`, EXIT_CODE.USAGE, {\n code: \"unknown_plan_template\",\n examples: [`pm plan create --title \"Fix login crash\" --template ${PLAN_TEMPLATE_NAMES[0]}`],\n });\n }\n return template.map((step) => ({ ...step }));\n}\n\n/**\n * Computes whole-percent step completion (`round(completed / total * 100)`),\n * returning 0 for an empty plan so the field is always a stable number.\n */\nfunction planCompletionPct(completed: number, total: number): number {\n return total > 0 ? Math.round((completed / total) * 100) : 0;\n}\n\n/* c8 ignore start -- detailed plan helper branches are validated through broader plan workflow integration tests. */\nfunction resolveAuthor(candidate: string | undefined, fallback: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;\n const trimmed = resolved.trim();\n return trimmed.length > 0 ? trimmed : \"unknown\";\n}\n\n/**\n * pm-6mit: ordered step titles from repeated --step values. Unlike toArray\n * this NEVER comma-splits — each --step value is one full step title, so\n * titles containing commas survive intact (also why --step must not be\n * list:true in contracts: the bootstrap coalescer would comma-join values).\n */\nfunction toOrderedStepTitles(value: unknown): string[] {\n const values = Array.isArray(value) ? value : value === undefined || value === null ? [] : [value];\n return values\n .filter((entry) => entry !== undefined && entry !== null)\n .map((entry) => (typeof entry === \"string\" ? entry : String(entry)).trim())\n .filter((entry) => entry.length > 0);\n}\n\nfunction toArray(value: string | string[] | undefined): string[] {\n if (Array.isArray(value)) return value.flatMap((entry) => splitCommaList(entry, { unique: false }));\n if (typeof value === \"string\" && value.trim().length > 0) {\n return splitCommaList(value, { unique: false });\n }\n return [];\n}\n\nfunction toSpecArray(value: string | string[] | undefined): string[] {\n if (Array.isArray(value)) return value.map((entry) => entry.trim()).filter(Boolean);\n if (typeof value === \"string\" && value.trim().length > 0) return [value.trim()];\n return [];\n}\n\nfunction asPlanMode(value: string | undefined, fallback: PlanMode = DEFAULT_PLAN_MODE): PlanMode {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_MODE_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid plan mode \"${value}\". Allowed: ${PLAN_MODE_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asStepStatus(value: string | undefined, fallback: PlanStepStatus = \"pending\"): PlanStepStatus {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_STEP_STATUS_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid step status \"${value}\". Allowed: ${PLAN_STEP_STATUS_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asLinkKind(value: string | undefined, fallback: PlanStepLinkKind = \"related\"): PlanStepLinkKind {\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n const found = PLAN_STEP_LINK_KIND_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid step link kind \"${value}\". Allowed: ${PLAN_STEP_LINK_KIND_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asHarness(value: string | undefined): PlanHarness | undefined {\n if (value === undefined) return undefined;\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) return undefined;\n const found = PLAN_HARNESS_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid plan harness \"${value}\". Allowed: ${PLAN_HARNESS_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction asDepth(value: string | undefined): PlanShowDepth {\n if (value === undefined) return \"brief\";\n const normalized = value.trim().toLowerCase();\n const found = PLAN_SHOW_DEPTH_VALUES.find((entry) => entry === normalized);\n if (!found) {\n throw new PmCliError(\n `Invalid --depth \"${value}\". Allowed: ${PLAN_SHOW_DEPTH_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return found;\n}\n\nfunction parsePlanFields(raw: string | undefined): string[] | null {\n if (raw === undefined) {\n return null;\n }\n const fields = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (fields.length === 0) {\n throw new PmCliError(\"Plan --fields requires a comma-separated list of plan field names\", EXIT_CODE.USAGE);\n }\n return fields;\n}\n\nconst PLAN_FIELD_KEYS = new Set<keyof PlanResultPlan>([\n \"id\",\n \"title\",\n \"status\",\n \"mode\",\n \"scope\",\n \"harness\",\n \"parent\",\n \"resume_context\",\n \"steps_summary\",\n \"current_step\",\n \"blocked_steps\",\n \"steps\",\n \"decisions\",\n \"discoveries\",\n \"validation\",\n \"linked_items\",\n]);\n\nfunction projectPlanForFields(plan: PlanResultPlan, fields: string[]): PlanResultPlan {\n const source = plan as unknown as Record<string, unknown>;\n const projected: Record<string, unknown> = {};\n const unknownFields: string[] = [];\n for (const field of fields) {\n const normalized = field.startsWith(\"plan.\") ? field.slice(\"plan.\".length) : field;\n if (normalized.length === 0) {\n continue;\n }\n if (!PLAN_FIELD_KEYS.has(normalized as keyof PlanResultPlan)) {\n unknownFields.push(field);\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(source, normalized)) {\n projected[normalized] = source[normalized];\n }\n }\n if (unknownFields.length > 0) {\n throw new PmCliError(`Unknown Plan --fields value(s): ${unknownFields.join(\", \")}`, EXIT_CODE.USAGE, {\n nextSteps: [\n `Use --fields ${[...PLAN_FIELD_KEYS].join(\",\")}`,\n \"Run pm plan show <id> --depth brief for compact default fields.\",\n ],\n recovery: {\n provided_fields: unknownFields,\n suggested_retry: `pm plan show <id> --fields ${[...PLAN_FIELD_KEYS].join(\",\")}`,\n },\n });\n }\n return projected as unknown as PlanResultPlan;\n}\n\nfunction parsePairList(raw: string, label: string): Record<string, string> {\n const out: Record<string, string> = {};\n for (const entry of raw.split(\",\")) {\n const trimmed = entry.trim();\n if (trimmed.length === 0) continue;\n const equalsIndex = trimmed.indexOf(\"=\");\n if (equalsIndex <= 0) {\n throw new PmCliError(`Invalid ${label} entry \"${trimmed}\"; expected key=value`, EXIT_CODE.USAGE);\n }\n out[trimmed.slice(0, equalsIndex).trim().toLowerCase()] = trimmed.slice(equalsIndex + 1).trim();\n }\n return out;\n}\n\nfunction parseStepFile(spec: string): PlanStepFile {\n const fields = parsePairList(spec, \"--file\");\n if (!fields.path) {\n throw new PmCliError(\"--file requires path=<value>\", EXIT_CODE.USAGE);\n }\n const file: PlanStepFile = { path: fields.path };\n if (fields.scope === \"global\" || fields.scope === \"project\") file.scope = fields.scope;\n if (fields.note) file.note = fields.note;\n return file;\n}\n\nfunction parseStepTest(spec: string): PlanStepTest {\n const fields = parsePairList(spec, \"--test\");\n if (!fields.command && !fields.path) {\n throw new PmCliError(\"--test requires at least command=<value> or path=<value>\", EXIT_CODE.USAGE);\n }\n const test: PlanStepTest = {};\n if (fields.command) test.command = fields.command;\n if (fields.path) test.path = fields.path;\n if (fields.note) test.note = fields.note;\n return test;\n}\n\nfunction parseStepDoc(spec: string): PlanStepDoc {\n const fields = parsePairList(spec, \"--doc\");\n if (!fields.path) {\n throw new PmCliError(\"--doc requires path=<value>\", EXIT_CODE.USAGE);\n }\n const doc: PlanStepDoc = { path: fields.path };\n if (fields.scope === \"global\" || fields.scope === \"project\") doc.scope = fields.scope;\n if (fields.note) doc.note = fields.note;\n return doc;\n}\n\nfunction summarizeSteps(steps: PlanStep[]): PlanStepSummary {\n const summary: PlanStepSummary = {\n total: steps.length,\n pending: 0,\n in_progress: 0,\n blocked: 0,\n completed: 0,\n skipped: 0,\n superseded: 0,\n completion_pct: 0,\n };\n for (const step of steps) {\n summary[step.status] += 1;\n }\n summary.completion_pct = planCompletionPct(summary.completed, summary.total);\n return summary;\n}\n\nfunction newStepId(existing: PlanStep[]): string {\n const used = new Set(existing.map((step) => step.id));\n for (let cursor = existing.length + 1; cursor < existing.length + 1024; cursor += 1) {\n const candidate = `${STEP_ID_PREFIX}${String(cursor).padStart(3, \"0\")}`;\n if (!used.has(candidate)) return candidate;\n }\n /* c8 ignore next -- step id allocation only fails if 1024 consecutive ids are taken. */\n throw new PmCliError(\"Could not allocate step id (limit reached)\", EXIT_CODE.GENERIC_FAILURE);\n}\n\nfunction resolveStepRef(steps: PlanStep[], ref: string): PlanStep {\n const trimmed = ref.trim();\n if (trimmed.length === 0) {\n throw new PmCliError(\"Step reference cannot be empty\", EXIT_CODE.USAGE);\n }\n const direct = steps.find((step) => step.id === trimmed);\n if (direct) return direct;\n if (/^\\d+$/.test(trimmed)) {\n const order = Number.parseInt(trimmed, 10);\n const byOrder = steps.find((step) => step.order === order);\n if (byOrder) return byOrder;\n }\n throw new PmCliError(`Step \"${ref}\" not found in plan`, EXIT_CODE.NOT_FOUND);\n}\n\ninterface MaterializeTargetResolution {\n targets: PlanStep[];\n skipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[];\n}\n\n// pm-fl0c #10 (2026-05-28): skip steps whose status is \"completed\" and steps\n// that already have an `implements` link from a prior materialize run, so\n// `pm plan materialize --steps all` is idempotent and never re-creates fresh\n// Tasks for work already tracked. Explicit step refs are still allowed\n// through (the user asked by ID) but the skip-reason is recorded.\nfunction classifyMaterializeSkip(\n step: PlanStep,\n): { reason: \"already_completed\" | \"already_materialized\"; existing_id?: string } | undefined {\n if (step.status === \"completed\") {\n return { reason: \"already_completed\" };\n }\n const existingImplements = (step.linked_items ?? []).find((link) => link.kind === \"implements\");\n if (existingImplements) {\n return { reason: \"already_materialized\", existing_id: existingImplements.id };\n }\n return undefined;\n}\n\nfunction resolveMaterializeTargets(steps: PlanStep[], refs: string[]): MaterializeTargetResolution {\n const allRefs = refs.filter((ref) => ref.trim().toLowerCase() === \"all\");\n const targets: PlanStep[] = [];\n const skipped: { from_step: string; reason: \"already_completed\" | \"already_materialized\"; existing_id?: string }[] = [];\n if (allRefs.length > 0) {\n if (refs.length > allRefs.length) {\n throw new PmCliError(\"pm plan materialize --steps all cannot be combined with other step refs\", EXIT_CODE.USAGE);\n }\n for (const step of steps.slice().sort((left, right) => left.order - right.order)) {\n const skip = classifyMaterializeSkip(step);\n if (skip) {\n skipped.push({ from_step: step.id, ...skip });\n continue;\n }\n targets.push(step);\n }\n return { targets, skipped };\n }\n const seen = new Set<string>();\n for (const ref of refs) {\n const step = resolveStepRef(steps, ref);\n if (seen.has(step.id)) continue;\n seen.add(step.id);\n const skip = classifyMaterializeSkip(step);\n if (skip) {\n skipped.push({ from_step: step.id, ...skip });\n continue;\n }\n targets.push(step);\n }\n return { targets, skipped };\n}\n\nfunction resolvePlanLogText(kind: \"decision\" | \"discovery\" | \"validation\", options: PlanCommandOptions): string | undefined {\n const canonical =\n kind === \"decision\"\n ? options.decisionText\n : kind === \"discovery\"\n ? options.discoveryText\n : options.validationText;\n const shorthand =\n kind === \"decision\"\n ? options.decision\n : kind === \"discovery\"\n ? options.discovery\n : options.validation;\n return canonical?.trim() || shorthand?.trim() || undefined;\n}\n\nfunction findCurrentStep(steps: PlanStep[]): PlanStep | undefined {\n return steps.find((step) => step.status === \"in_progress\")\n ?? steps.find((step) => step.status === \"pending\");\n}\n\nfunction blockedSteps(steps: PlanStep[]): { id: string; order: number; title: string; blocked_reason?: string }[] {\n return steps\n .filter((step) => step.status === \"blocked\")\n .map((step) => ({ id: step.id, order: step.order, title: step.title, blocked_reason: step.blocked_reason }));\n}\n\nfunction projectPlan(item: ItemMetadata, depth: PlanShowDepth = \"brief\"): PlanResultPlan {\n const steps = (item.plan_steps ?? []).slice().sort((left, right) => left.order - right.order);\n const summary = summarizeSteps(steps);\n const current = findCurrentStep(steps);\n const projection: PlanResultPlan = {\n id: item.id,\n title: item.title,\n status: item.status,\n mode: (item.plan_mode ?? DEFAULT_PLAN_MODE) as PlanMode,\n scope: item.plan_scope,\n harness: item.plan_harness,\n parent: item.parent,\n resume_context: item.plan_resume_context,\n steps_summary: summary,\n current_step: current\n ? { id: current.id, order: current.order, title: current.title, status: current.status }\n : undefined,\n blocked_steps: blockedSteps(steps),\n linked_items: (item.dependencies ?? []).map((dep) => ({ id: dep.id, kind: dep.kind })),\n };\n if (depth === \"standard\" || depth === \"deep\") {\n projection.steps = steps;\n }\n if (depth === \"deep\") {\n projection.decisions = item.plan_decisions ?? [];\n projection.discoveries = item.plan_discoveries ?? [];\n projection.validation = item.plan_validation ?? [];\n }\n return projection;\n}\n\nfunction nextActionsFor(planId: string, plan: PlanResultPlan): string[] {\n const tips: string[] = [];\n if (plan.steps_summary.total === 0) {\n tips.push(`pm plan add-step ${planId} --step-title \"First step\"`);\n }\n if (plan.current_step) {\n tips.push(\n `pm plan update-step ${planId} ${plan.current_step.id} --step-status in_progress`,\n `pm plan complete-step ${planId} ${plan.current_step.id} --step-evidence \"...\"`,\n );\n }\n if (plan.steps_summary.blocked > 0) {\n tips.push(`pm plan show ${planId} --depth standard`);\n }\n if (plan.mode === \"draft\" || plan.mode === \"research\") {\n tips.push(`pm plan approve ${planId} --message \"ready to execute\"`);\n }\n if (plan.steps_summary.completed === plan.steps_summary.total && plan.steps_summary.total > 0) {\n tips.push(`pm close ${planId} \"plan complete\"`);\n }\n return tips;\n}\n\nfunction ensurePlanItem(item: ItemMetadata): void {\n const normalizedType = (item.type ?? \"\").trim().toLowerCase();\n if (normalizedType !== \"plan\") {\n throw new PmCliError(\n `Item ${item.id} is type ${item.type}; pm plan commands require type=Plan. Use pm plan create or pm create --type Plan first.`,\n EXIT_CODE.USAGE,\n {\n code: \"wrong_item_type\",\n required: \"Use pm plan commands only with items whose type is Plan.\",\n why: \"Plan commands read and mutate Plan-specific step, decision, discovery, and validation fields.\",\n examples: [\n `pm get ${item.id} --depth brief`,\n 'pm plan create --title \"Execution plan\" --scope \"<goal>\"',\n ],\n },\n );\n }\n}\n\ninterface PlanWriteContext {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n}\n\nasync function loadContext(global: GlobalOptions): Promise<PlanWriteContext> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n return { pmRoot, settings };\n}\n\nasync function readPlanItem(ctx: PlanWriteContext, id: string): Promise<{ document: ItemDocument; itemId: string }> {\n const typeRegistry = resolveItemTypeRegistry(ctx.settings, getActiveExtensionRegistrations());\n const located = await locateItem(ctx.pmRoot, id, ctx.settings.id_prefix, ctx.settings.item_format, typeRegistry.type_to_folder);\n if (!located) {\n throw new PmCliError(`Plan ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: ctx.settings.schema });\n ensurePlanItem(loaded.document.metadata);\n return { document: loaded.document, itemId: located.id };\n}\n\nasync function planCreate(\n options: PlanCommandOptions,\n global: GlobalOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const title = options.title?.trim();\n if (!title) {\n throw new PmCliError(\"pm plan create requires --title\", EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: ['pm plan create --title \"Refactor lock retry\" --scope pm-a1b2'],\n });\n }\n const mode = asPlanMode(options.mode, DEFAULT_PLAN_MODE);\n const harness = asHarness(options.harness);\n const fromSearch = options.fromSearch?.trim();\n\n const related = toArray(options.related);\n const blocks = toArray(options.blocks);\n const blockedBy = toArray(options.blockedBy);\n\n const deps: string[] = [];\n if (options.parent) {\n deps.push(`id=${options.parent.trim()},kind=parent`);\n }\n for (const ref of related) deps.push(`id=${ref},kind=related`);\n for (const ref of blocks) deps.push(`id=${ref},kind=blocks`);\n for (const ref of blockedBy) deps.push(`id=${ref},kind=blocked_by`);\n\n const description = options.description?.trim() ?? options.scope?.trim() ?? title;\n const createOptions: CreateCommandOptions = {\n title,\n description,\n type: \"Plan\",\n body: options.body,\n tags: options.tags,\n priority: options.priority,\n parent: options.parent,\n dep: deps.length > 0 ? deps : undefined,\n author: options.author,\n message: options.message ?? (fromSearch ? `plan create (search: ${fromSearch})` : `plan create`),\n };\n\n const createResult: CreateResult = await runCreate(createOptions, global);\n\n // The create command stores type_options. To use real metadata keys, run a follow-up mutate.\n const seedResult = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_metadata\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"seed plan metadata\",\n mutate(doc) {\n const changed: string[] = [];\n doc.metadata.plan_mode = mode;\n changed.push(\"plan_mode\");\n if (harness) {\n doc.metadata.plan_harness = harness;\n changed.push(\"plan_harness\");\n }\n if (options.scope?.trim()) {\n doc.metadata.plan_scope = options.scope.trim();\n changed.push(\"plan_scope\");\n }\n if (options.resumeContext?.trim()) {\n doc.metadata.plan_resume_context = options.resumeContext.trim();\n changed.push(\"plan_resume_context\");\n }\n doc.metadata.plan_steps = doc.metadata.plan_steps ?? [];\n return { changedFields: changed };\n },\n });\n\n let finalMetadata: ItemMetadata = seedResult.item as unknown as ItemMetadata;\n let initialStep: PlanStep | undefined;\n const initialValidationText = options.validationText?.trim();\n const initialValidationCommand = options.validationCommand?.trim();\n const initialValidationExpected = options.validationExpected?.trim();\n const initialValidation =\n initialValidationText || initialValidationCommand || initialValidationExpected\n ? ({\n text: initialValidationText || initialValidationCommand || \"Validation check\",\n command: initialValidationCommand || undefined,\n expected: initialValidationExpected || undefined,\n } satisfies PlanValidationCheck)\n : undefined;\n // pm-6mit: collect ordered initial-step titles. Mixed-usage semantics\n // (documented on pm-6mit): --step-title (when present) is the FIRST step,\n // followed by each repeated --step value in argv order.\n const stepTitleFlag = options.stepTitle?.trim();\n const repeatedStepTitles = toOrderedStepTitles(options.step);\n const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];\n const stepTitles = [\n ...(stepTitleFlag ? [stepTitleFlag] : []),\n ...repeatedStepTitles,\n ...templateSteps.map((step) => step.title),\n ];\n const hasPerStepDetailOptions =\n Boolean(options.stepBody?.trim()) ||\n Boolean(options.stepOwner?.trim()) ||\n Boolean(options.stepStatus?.trim()) ||\n Boolean(options.stepEvidence?.trim()) ||\n Boolean(options.stepBlockedReason?.trim()) ||\n Boolean(options.stepReplacement?.trim()) ||\n toArray(options.dependsOn).length > 0 ||\n toArray(options.link).length > 0 ||\n toSpecArray(options.file).length > 0 ||\n toSpecArray(options.test).length > 0 ||\n toSpecArray(options.doc).length > 0;\n if ((stepTitleFlag || repeatedStepTitles.length > 0) && templateSteps.length > 0) {\n throw new PmCliError(\n \"pm plan create --template cannot be combined with --step-title or --step; choose one step seeding source\",\n EXIT_CODE.USAGE,\n {\n code: \"ambiguous_option_combination\",\n examples: [\n `pm plan create --title \"Fix login crash\" --template ${PLAN_TEMPLATE_NAMES[0]}`,\n 'pm plan create --title \"Custom plan\" --step \"Read the code\" --step \"Write the fix\"',\n ],\n },\n );\n }\n if (stepTitles.length > 1 && hasPerStepDetailOptions) {\n // Per-step detail flags target exactly one step; silently attaching them to\n // the first (or all) of several seeded steps would be unpredictable.\n throw new PmCliError(\n \"pm plan create per-step options apply to a single initial step; with multiple --step values create the plan first, then refine steps individually\",\n EXIT_CODE.USAGE,\n {\n code: \"ambiguous_option_combination\",\n examples: [\n 'pm plan create --title \"Execution plan\" --step \"Read the code\" --step \"Write the fix\"',\n 'pm plan update-step <plan-id> plan-step-001 --step-body \"Inspect retry path\"',\n ],\n },\n );\n }\n let initialSteps: PlanStep[] = [];\n if (stepTitles.length === 1) {\n const status = asStepStatus(options.stepStatus, \"pending\");\n const linkedItems = buildLinkInputs(options, \"depends_on\");\n const files = toSpecArray(options.file).map(parseStepFile);\n const tests = toSpecArray(options.test).map(parseStepTest);\n const docs = toSpecArray(options.doc).map(parseStepDoc);\n const now = nowIso();\n initialSteps = [{\n id: \"plan-step-001\",\n order: 1,\n title: stepTitles[0],\n body: options.stepBody?.trim() || undefined,\n status,\n owner: options.stepOwner?.trim() || undefined,\n evidence: options.stepEvidence?.trim() || undefined,\n blocked_reason: status === \"blocked\" ? options.stepBlockedReason?.trim() || \"\" : undefined,\n linked_items: linkedItems.length > 0 ? linkedItems : undefined,\n files: files.length > 0 ? files : undefined,\n tests: tests.length > 0 ? tests : undefined,\n docs: docs.length > 0 ? docs : undefined,\n created_at: now,\n updated_at: now,\n completed_at: status === \"completed\" ? now : undefined,\n }];\n } else if (stepTitles.length > 1) {\n const now = nowIso();\n initialSteps = stepTitles.map((stepTitle, index) => ({\n id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, \"0\")}`,\n order: index + 1,\n title: stepTitle,\n body: templateSteps[index]?.body,\n status: \"pending\" as const,\n created_at: now,\n updated_at: now,\n }));\n }\n if (initialSteps.length > 0) {\n initialStep = initialSteps[0];\n const stepped = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_initial_step\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message:\n initialSteps.length === 1\n ? `plan create initial step \"${initialSteps[0].title}\"`\n : `plan create ${initialSteps.length} initial steps`,\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n doc.metadata.plan_steps = initialSteps;\n if (initialValidation) {\n doc.metadata.plan_validation = [...(doc.metadata.plan_validation ?? []), initialValidation];\n }\n return { changedFields: initialValidation ? [\"plan_steps\", \"plan_validation\"] : [\"plan_steps\"] };\n },\n });\n finalMetadata = stepped.item as unknown as ItemMetadata;\n } else if (initialValidation) {\n const validated = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"plan_create_initial_validation\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"plan create initial validation\",\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n doc.metadata.plan_validation = [...(doc.metadata.plan_validation ?? []), initialValidation];\n return { changedFields: [\"plan_validation\"] };\n },\n });\n finalMetadata = validated.item as unknown as ItemMetadata;\n } else if (hasPerStepDetailOptions) {\n throw new PmCliError(\"pm plan create step options require --step-title (or a single --step)\", EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: ['pm plan create --title \"Execution plan\" --step-title \"Read the code\"'],\n });\n }\n if (options.claim) {\n const claimed = await mutateItem({\n pmRoot: ctx.pmRoot,\n settings: ctx.settings,\n id: createResult.item.id,\n op: \"claim\",\n author: resolveAuthor(options.author, ctx.settings.author_default),\n message: \"plan claim by author\",\n mutate(doc) {\n doc.metadata.assignee = resolveAuthor(options.author, ctx.settings.author_default);\n return { changedFields: [\"assignee\"] };\n },\n });\n finalMetadata = claimed.item as unknown as ItemMetadata;\n }\n\n const plan = projectPlan(finalMetadata, \"brief\");\n return {\n action: \"create\",\n plan,\n step: initialStep,\n next_actions: nextActionsFor(createResult.item.id, plan),\n warnings: [...createResult.warnings],\n generated_at: nowIso(),\n };\n}\n\nasync function planShow(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const depth = asDepth(options.depth);\n const fields = parsePlanFields(options.fields);\n const { document, itemId } = await readPlanItem(ctx, id);\n const fullPlan = projectPlan(document.metadata, fields === null ? depth : \"deep\");\n const plan = fields === null ? fullPlan : projectPlanForFields(fullPlan, fields);\n return {\n action: \"show\",\n plan,\n next_actions: nextActionsFor(itemId, fullPlan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\ninterface MutateStepArgs {\n id: string;\n options: PlanCommandOptions;\n ctx: PlanWriteContext;\n op: string;\n message: string;\n mutator(steps: PlanStep[], doc: ItemDocument): { changedSteps: string[]; current?: PlanStep; resultStep?: PlanStep };\n}\n\nasync function mutatePlanSteps(args: MutateStepArgs): Promise<{ document: ItemDocument; resultStep?: PlanStep; itemId: string }> {\n const author = resolveAuthor(args.options.author, args.ctx.settings.author_default);\n let resultStep: PlanStep | undefined;\n const result = await mutateItem({\n pmRoot: args.ctx.pmRoot,\n settings: args.ctx.settings,\n id: args.id,\n op: args.op,\n author,\n message: args.options.message ?? args.message,\n force: args.options.force,\n mutate(doc) {\n ensurePlanItem(doc.metadata);\n const steps = (doc.metadata.plan_steps ?? []).slice();\n const before = JSON.stringify(steps);\n const outcome = args.mutator(steps, doc);\n resultStep = outcome.resultStep;\n const sorted = steps\n .slice()\n .sort((left, right) => left.order - right.order)\n .map((step, index) => ({ ...step, order: index + 1 }));\n doc.metadata.plan_steps = sorted;\n const after = JSON.stringify(sorted);\n const changedFields = before === after ? [] : [\"plan_steps\"];\n if (changedFields.length === 0 && outcome.changedSteps.length === 0) {\n return { changedFields: [] };\n }\n return { changedFields: changedFields.length > 0 ? changedFields : [\"plan_steps\"] };\n },\n });\n return {\n document: { metadata: result.item as unknown as ItemMetadata, body: result.body },\n resultStep,\n itemId: result.item.id,\n };\n}\n\nasync function planAddStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const title = options.stepTitle?.trim();\n if (!title) {\n throw new PmCliError(\"pm plan add-step requires --step-title\", EXIT_CODE.USAGE);\n }\n const status = asStepStatus(options.stepStatus, \"pending\");\n const allowMultipleActive = options.allowMultipleActive === true;\n\n const linkedItems = buildLinkInputs(options, \"depends_on\");\n\n const files = toSpecArray(options.file).map(parseStepFile);\n const tests = toSpecArray(options.test).map(parseStepTest);\n const docs = toSpecArray(options.doc).map(parseStepDoc);\n\n const { document, resultStep, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_add_step\",\n message: `plan add-step \"${title}\"`,\n mutator(steps) {\n const order = steps.length + 1;\n if (status === \"in_progress\" && !allowMultipleActive) {\n for (const step of steps) {\n if (step.status === \"in_progress\") {\n throw new PmCliError(\n `Plan already has step ${step.id} in_progress. Pass --allow-multiple-active or update that step first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n }\n }\n const now = nowIso();\n const step: PlanStep = {\n id: newStepId(steps),\n order,\n title,\n body: options.stepBody?.trim() || undefined,\n status,\n owner: options.stepOwner?.trim() || undefined,\n evidence: options.stepEvidence?.trim() || undefined,\n blocked_reason: status === \"blocked\" ? options.stepBlockedReason?.trim() || \"\" : undefined,\n linked_items: linkedItems.length > 0 ? linkedItems : undefined,\n files: files.length > 0 ? files : undefined,\n tests: tests.length > 0 ? tests : undefined,\n docs: docs.length > 0 ? docs : undefined,\n created_at: now,\n updated_at: now,\n completed_at: status === \"completed\" ? now : undefined,\n };\n steps.push(step);\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"add-step\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nfunction buildLinkInputs(options: PlanCommandOptions, fallbackKind: PlanStepLinkKind): PlanStepLink[] {\n const dependsOn = toArray(options.dependsOn).map((id) => ({ id, kind: fallbackKind } as PlanStepLink));\n const related = toArray(options.related).map((id) => ({ id, kind: \"related\" } as PlanStepLink));\n const blocks = toArray(options.blocks).map((id) => ({ id, kind: \"blocks\" } as PlanStepLink));\n const blockedBy = toArray(options.blockedBy).map((id) => ({ id, kind: \"blocked_by\" } as PlanStepLink));\n const explicit = toArray(options.link);\n const explicitKind = asLinkKind(options.linkKind, fallbackKind);\n const note = options.linkNote?.trim();\n const explicitLinks = explicit.map((id) => {\n const link: PlanStepLink = { id, kind: explicitKind };\n if (note) link.note = note;\n return link;\n });\n return [...dependsOn, ...related, ...blocks, ...blockedBy, ...explicitLinks];\n}\n\nasync function planUpdateStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n args: { stepRef: string; finalStatus?: PlanStepStatus; op: string; allowMultipleActive?: boolean },\n): Promise<PlanCommandResult> {\n const { document, resultStep, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: args.op,\n message: options.message ?? `${args.op} ${args.stepRef}`,\n mutator(steps, doc) {\n const step = resolveStepRef(steps, args.stepRef);\n const now = nowIso();\n const desiredStatus = args.finalStatus ?? asStepStatus(options.stepStatus, step.status);\n if (desiredStatus === \"in_progress\" && step.status !== \"in_progress\" && !options.allowMultipleActive && !args.allowMultipleActive) {\n for (const other of steps) {\n if (other.id !== step.id && other.status === \"in_progress\") {\n throw new PmCliError(\n `Plan already has step ${other.id} in_progress. Pass --allow-multiple-active or update that step first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n }\n }\n if (desiredStatus === \"blocked\" && !options.stepBlockedReason?.trim() && !step.blocked_reason) {\n throw new PmCliError(\n \"Blocking a step requires --step-blocked-reason or an already-recorded blocked_reason.\",\n EXIT_CODE.USAGE,\n );\n }\n if (options.stepTitle?.trim()) step.title = options.stepTitle.trim();\n if (options.stepBody !== undefined) step.body = options.stepBody.trim() || undefined;\n if (options.stepOwner !== undefined) step.owner = options.stepOwner.trim() || undefined;\n if (options.stepEvidence !== undefined) step.evidence = options.stepEvidence.trim() || undefined;\n if (options.stepBlockedReason !== undefined) step.blocked_reason = options.stepBlockedReason.trim() || undefined;\n if (options.stepReplacement !== undefined) step.superseded_by = options.stepReplacement.trim() || undefined;\n step.status = desiredStatus;\n step.updated_at = now;\n if (desiredStatus === \"completed\" && !step.completed_at) {\n step.completed_at = now;\n } else if (desiredStatus !== \"completed\") {\n step.completed_at = undefined;\n }\n doc.metadata.updated_at = now;\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: args.op === \"plan_complete_step\" ? \"complete-step\" : args.op === \"plan_block_step\" ? \"block-step\" : \"update-step\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planReorderStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n newOrder: number,\n): Promise<PlanCommandResult> {\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_reorder_step\",\n message: options.message ?? `plan reorder-step ${stepRef} -> ${newOrder}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const filtered = steps.filter((entry) => entry.id !== step.id);\n const clamped = Math.max(1, Math.min(newOrder, filtered.length + 1));\n filtered.splice(clamped - 1, 0, step);\n filtered.forEach((entry, index) => {\n entry.order = index + 1;\n entry.updated_at = nowIso();\n });\n steps.length = 0;\n steps.push(...filtered);\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"reorder-step\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planRemoveStep(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_remove_step\",\n message: options.message ?? `plan remove-step ${stepRef}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const remaining = steps.filter((entry) => entry.id !== step.id);\n remaining.forEach((entry, index) => {\n entry.order = index + 1;\n });\n steps.length = 0;\n steps.push(...remaining);\n return { changedSteps: [step.id] };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"remove-step\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planLink(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const newLinks = buildLinkInputs(options, asLinkKind(options.linkKind, \"related\"));\n if (newLinks.length === 0) {\n throw new PmCliError(\"pm plan link requires at least one --link/--related/--blocks/--blocked-by/--depends-on id\", EXIT_CODE.USAGE);\n }\n const promoteToItemDep = options.promoteToItemDep === true;\n const { document, itemId, resultStep } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_link_step\",\n message: options.message ?? `plan link ${stepRef}`,\n mutator(steps, doc) {\n const step = resolveStepRef(steps, stepRef);\n const existing = step.linked_items ?? [];\n const dedupKey = (link: PlanStepLink) => `${link.kind}:${link.id}`;\n const seen = new Set(existing.map(dedupKey));\n for (const link of newLinks) {\n const key = dedupKey(link);\n if (seen.has(key)) continue;\n existing.push(link);\n seen.add(key);\n }\n step.linked_items = existing;\n step.updated_at = nowIso();\n if (promoteToItemDep) {\n const deps = doc.metadata.dependencies ?? [];\n const depKey = (dep: { id: string; kind: string }) => `${dep.kind}:${dep.id}`;\n const seenDeps = new Set(deps.map(depKey));\n for (const link of newLinks) {\n const candidate = {\n id: link.id,\n kind: link.kind as DependencyKind,\n created_at: nowIso(),\n author: resolveAuthor(options.author, ctx.settings.author_default),\n };\n if (seenDeps.has(depKey(candidate))) continue;\n deps.push(candidate);\n seenDeps.add(depKey(candidate));\n }\n doc.metadata.dependencies = deps;\n }\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"link\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planUnlink(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n stepRef: string,\n): Promise<PlanCommandResult> {\n const removeIds = toArray(options.link);\n if (removeIds.length === 0) {\n throw new PmCliError(\"pm plan unlink requires --link <id> to remove\", EXIT_CODE.USAGE);\n }\n const { document, itemId, resultStep } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_unlink_step\",\n message: options.message ?? `plan unlink ${stepRef}`,\n mutator(steps) {\n const step = resolveStepRef(steps, stepRef);\n const filtered = (step.linked_items ?? []).filter((link) => !removeIds.includes(link.id));\n step.linked_items = filtered.length > 0 ? filtered : undefined;\n step.updated_at = nowIso();\n return { changedSteps: [step.id], resultStep: step };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"unlink\",\n plan,\n step: resultStep,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planAppendLog(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n kind: \"decision\" | \"discovery\" | \"validation\",\n): Promise<PlanCommandResult> {\n const logText = resolvePlanLogText(kind, options);\n if (!logText) {\n const canonical = `--${kind}-text`;\n const shorthand = `--${kind}`;\n throw new PmCliError(`pm plan ${kind} requires ${canonical}`, EXIT_CODE.USAGE, {\n code: \"missing_required_option\",\n examples: [\n `pm plan ${kind} <plan-id> ${canonical} \"...\"`,\n `pm plan ${kind} <plan-id> ${shorthand} \"...\"`,\n ],\n recovery: {\n suggested_retry: `pm plan ${kind} <plan-id> ${canonical} <value>`,\n },\n });\n }\n const author = resolveAuthor(options.author, ctx.settings.author_default);\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: `plan_append_${kind}`,\n message: options.message ?? `plan ${kind} append`,\n mutator(_steps, doc) {\n const now = nowIso();\n if (kind === \"decision\") {\n const list = doc.metadata.plan_decisions ?? [];\n list.push({\n ts: now,\n author,\n decision: logText,\n rationale: options.decisionRationale?.trim() || undefined,\n evidence: options.decisionEvidence?.trim() || undefined,\n });\n doc.metadata.plan_decisions = list;\n return { changedSteps: [] };\n }\n if (kind === \"discovery\") {\n const list = doc.metadata.plan_discoveries ?? [];\n list.push({ ts: now, author, text: logText });\n doc.metadata.plan_discoveries = list;\n return { changedSteps: [] };\n }\n const list = doc.metadata.plan_validation ?? [];\n list.push({\n text: logText,\n command: options.validationCommand?.trim() || undefined,\n expected: options.validationExpected?.trim() || undefined,\n });\n doc.metadata.plan_validation = list;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"deep\");\n return {\n action: kind,\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planResume(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const text = options.resumeContext?.trim();\n if (!text) {\n throw new PmCliError(\"pm plan resume requires --resume-context <text>\", EXIT_CODE.USAGE);\n }\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_resume\",\n message: options.message ?? \"plan resume context update\",\n mutator(_steps, doc) {\n doc.metadata.plan_resume_context = text;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"brief\");\n return {\n action: \"resume\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planApprove(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const mode = asPlanMode(options.mode ?? \"approved\", \"approved\");\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_approve\",\n message: options.message ?? `plan approve mode=${mode}`,\n mutator(_steps, doc) {\n doc.metadata.plan_mode = mode;\n return { changedSteps: [] };\n },\n });\n const plan = projectPlan(document.metadata, \"brief\");\n return {\n action: \"approve\",\n plan,\n next_actions: nextActionsFor(itemId, plan),\n warnings: [],\n generated_at: nowIso(),\n };\n}\n\nasync function planMaterialize(\n id: string,\n options: PlanCommandOptions,\n ctx: PlanWriteContext,\n): Promise<PlanCommandResult> {\n const stepRefs = toArray(options.steps);\n if (stepRefs.length === 0) {\n throw new PmCliError(\"pm plan materialize requires --steps <ids|orders|all>\", EXIT_CODE.USAGE);\n }\n const targetType = options.materializeType?.trim() || \"Task\";\n const typeRegistry = resolveItemTypeRegistry(ctx.settings, getActiveExtensionRegistrations());\n const resolvedTypeName = resolveTypeName(targetType, typeRegistry);\n if (!resolvedTypeName) {\n throw new PmCliError(`Invalid --materialize-type \"${targetType}\"`, EXIT_CODE.USAGE);\n }\n const parent = options.materializeParent?.trim() || id;\n const tags = options.materializeTags;\n\n const planRead = await readPlanItem(ctx, id);\n const steps = (planRead.document.metadata.plan_steps ?? []).slice();\n const { targets, skipped: materializeSkipped } = resolveMaterializeTargets(steps, stepRefs);\n if (targets.length === 0) {\n if (materializeSkipped.length > 0) {\n // PR #78 / Gemini medium follow-up: when every selected step was\n // already materialized or completed, return a successful no-op\n // result (exit 0) instead of throwing NOT_FOUND. This makes\n // `pm plan materialize --steps all` truly idempotent for CI/agent\n // workflows; the skip reasons + warnings still surface what was\n // intentionally not redone.\n const plan = projectPlan(planRead.document.metadata, \"standard\");\n return {\n action: \"materialize\",\n plan,\n materialized: [],\n materialize_skipped: materializeSkipped,\n next_actions: nextActionsFor(planRead.itemId, plan),\n warnings: materializeSkipped.map(\n (entry) =>\n `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : \"\"}`,\n ),\n generated_at: nowIso(),\n };\n }\n throw new PmCliError(\"No matching plan steps found for --steps\", EXIT_CODE.NOT_FOUND);\n }\n\n const materialized: { id: string; type: string; from_step: string }[] = [];\n for (const step of targets) {\n const deps = [\n `id=${parent},kind=parent`,\n `id=${planRead.itemId},kind=discovered_from`,\n ];\n for (const link of step.linked_items ?? []) {\n const realKind: DependencyKind =\n link.kind === \"blocked_by\" || link.kind === \"blocks\" || link.kind === \"related\" || link.kind === \"discovered_from\"\n ? link.kind\n : \"related\";\n deps.push(`id=${link.id},kind=${realKind}`);\n }\n const created = await runCreate(\n {\n title: step.title,\n description: step.body?.trim() || step.title,\n type: resolvedTypeName,\n parent,\n tags,\n author: options.author,\n message: options.message ?? `materialized from plan ${planRead.itemId} step ${step.id}`,\n dep: deps,\n },\n ctx.settings ? { ...({} as GlobalOptions), path: ctx.pmRoot } as GlobalOptions : ({} as GlobalOptions),\n );\n materialized.push({ id: created.item.id, type: resolvedTypeName, from_step: step.id });\n }\n\n const { document, itemId } = await mutatePlanSteps({\n id,\n options,\n ctx,\n op: \"plan_materialize\",\n message: options.message ?? `plan materialize ${stepRefs.join(\",\")}`,\n mutator(currentSteps, doc) {\n for (const target of targets) {\n const matched = materialized.find((entry) => entry.from_step === target.id);\n if (!matched) continue;\n const step = currentSteps.find((entry) => entry.id === target.id);\n if (!step) continue;\n const links = step.linked_items ?? [];\n links.push({ id: matched.id, kind: \"implements\", note: `materialized as ${matched.type}` });\n step.linked_items = links;\n step.updated_at = nowIso();\n }\n return { changedSteps: targets.map((entry) => entry.id) };\n },\n });\n const plan = projectPlan(document.metadata, \"standard\");\n return {\n action: \"materialize\",\n plan,\n materialized,\n ...(materializeSkipped.length > 0 ? { materialize_skipped: materializeSkipped } : {}),\n next_actions: nextActionsFor(itemId, plan),\n warnings: materializeSkipped.map(\n (entry) =>\n `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : \"\"}`,\n ),\n generated_at: nowIso(),\n };\n}\n\n/* c8 ignore stop */\n/**\n * Documents the plan dispatch input payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanDispatchInput {\n subcommand: PlanSubcommand;\n id?: string;\n stepRef?: string;\n reorderTo?: number;\n options: PlanCommandOptions;\n global: GlobalOptions;\n}\n\n/**\n * Implements run plan for the public runtime surface of this module.\n */\nexport async function runPlan(input: PlanDispatchInput): Promise<PlanCommandResult> {\n const ctx = await loadContext(input.global);\n // pm-6mit: --step accumulates ordered step titles on create. For every other\n // subcommand a single --step value keeps its historical alias-of---step-title\n // behavior; multiple values would be ambiguous there (one step is targeted),\n // so they are rejected instead of silently dropping all but the last.\n if (input.subcommand !== \"create\") {\n const stepValues = toOrderedStepTitles(input.options.step);\n if (stepValues.length > 1) {\n throw new PmCliError(\n `pm plan ${input.subcommand} accepts a single --step/--step-title value (repeated --step seeds ordered steps only on pm plan create)`,\n EXIT_CODE.USAGE,\n );\n }\n if (stepValues.length === 1 && !input.options.stepTitle?.trim()) {\n input = { ...input, options: { ...input.options, stepTitle: stepValues[0] } };\n }\n }\n switch (input.subcommand) {\n case \"create\":\n return planCreate(input.options, input.global, ctx);\n case \"show\":\n if (!input.id) throw new PmCliError(\"pm plan show requires a plan id\", EXIT_CODE.USAGE);\n return planShow(input.id, input.options, ctx);\n case \"add-step\":\n if (!input.id) throw new PmCliError(\"pm plan add-step requires a plan id\", EXIT_CODE.USAGE);\n return planAddStep(input.id, input.options, ctx);\n case \"update-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan update-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, op: \"plan_update_step\" });\n case \"complete-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan complete-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: \"completed\", op: \"plan_complete_step\" });\n case \"block-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan block-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: \"blocked\", op: \"plan_block_step\" });\n case \"reorder-step\":\n if (!input.id || !input.stepRef || input.reorderTo === undefined)\n throw new PmCliError(\"pm plan reorder-step requires <plan-id> <step> <new-order>\", EXIT_CODE.USAGE);\n return planReorderStep(input.id, input.options, ctx, input.stepRef, input.reorderTo);\n case \"remove-step\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan remove-step requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planRemoveStep(input.id, input.options, ctx, input.stepRef);\n case \"link\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan link requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planLink(input.id, input.options, ctx, input.stepRef);\n case \"unlink\":\n if (!input.id || !input.stepRef) throw new PmCliError(\"pm plan unlink requires <plan-id> <step>\", EXIT_CODE.USAGE);\n return planUnlink(input.id, input.options, ctx, input.stepRef);\n case \"decision\":\n if (!input.id) throw new PmCliError(\"pm plan decision requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"decision\");\n case \"discovery\":\n if (!input.id) throw new PmCliError(\"pm plan discovery requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"discovery\");\n case \"validation\":\n if (!input.id) throw new PmCliError(\"pm plan validation requires a plan id\", EXIT_CODE.USAGE);\n return planAppendLog(input.id, input.options, ctx, \"validation\");\n case \"resume\":\n if (!input.id) throw new PmCliError(\"pm plan resume requires a plan id\", EXIT_CODE.USAGE);\n return planResume(input.id, input.options, ctx);\n case \"approve\":\n if (!input.id) throw new PmCliError(\"pm plan approve requires a plan id\", EXIT_CODE.USAGE);\n return planApprove(input.id, input.options, ctx);\n case \"materialize\":\n if (!input.id) throw new PmCliError(\"pm plan materialize requires a plan id\", EXIT_CODE.USAGE);\n return planMaterialize(input.id, input.options, ctx);\n default:\n throw new PmCliError(`Unknown pm plan subcommand \"${input.subcommand}\"`, EXIT_CODE.USAGE);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["global", "step", "list", "plan"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../../../../cli/register-list-query.ts", "../../../../../../../../core/output/tabular.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @module cli/register-list-query\n *\n * Provides CLI runtime support for Register List Query.\n */\nimport { Option, type Command } from \"commander\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { renderRowsAsCsv, renderRowsAsTable } from \"../core/output/tabular.js\";\nimport type { ItemStatus } from \"../types/index.js\";\nimport {\n getGlobalOptions,\n normalizeAggregateOptions,\n normalizeActivityOptions,\n normalizeContextOptions,\n normalizeListOptions,\n normalizeSearchKeywordsInput,\n normalizeSearchOptions,\n printActivityJsonStream,\n printError,\n printListJsonStream,\n printResult,\n resolveActivityStreamMode,\n writeStdout,\n} from \"./registration-helpers.js\";\n\n\n\n/**\n * Documents the register list query commands options payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisterListQueryCommandsOptions {\n commandFilter?: Set<string>;\n}\n\nfunction shouldRegisterListQueryCommand(commandName: string, commandFilter?: Set<string>): boolean {\n if (!commandFilter || commandFilter.size === 0) {\n return true;\n }\n if (commandName === \"context\") {\n return commandFilter.has(\"context\") || commandFilter.has(\"ctx\");\n }\n return commandFilter.has(commandName);\n}\n\ntype ReadCommandOutputFormat = \"json\" | \"toon\";\n\ntype ListOutputFormat = \"csv\" | \"table\" | \"json\" | \"toon\";\n\n/**\n * Parses the `pm list --format` value into a supported render mode. csv/table\n * are human export modes; json/toon override the machine output format. Returns\n * undefined when no `--format` was supplied so the global output format applies.\n */\nfunction parseListFormat(rawFormat: unknown): ListOutputFormat | undefined {\n if (rawFormat === undefined) {\n return undefined;\n }\n if (typeof rawFormat !== \"string\") {\n throw new PmCliError(\"List --format must be one of csv|table|json|toon\", EXIT_CODE.USAGE);\n }\n const normalized = rawFormat.trim().toLowerCase();\n if (normalized === \"csv\" || normalized === \"table\" || normalized === \"json\" || normalized === \"toon\") {\n return normalized;\n }\n throw new PmCliError(\"List --format must be one of csv|table|json|toon\", EXIT_CODE.USAGE);\n}\n\nfunction resolveReadCommandOutputFormat(\n commandLabel: string,\n rawFormat: unknown,\n globalOptions: ReturnType<typeof getGlobalOptions>,\n): ReturnType<typeof getGlobalOptions> {\n if (rawFormat === undefined) {\n return globalOptions;\n }\n if (typeof rawFormat !== \"string\") {\n throw new PmCliError(`${commandLabel} --format must be one of json|toon`, EXIT_CODE.USAGE);\n }\n const normalized = rawFormat.trim().toLowerCase() as ReadCommandOutputFormat;\n if (normalized !== \"json\" && normalized !== \"toon\") {\n throw new PmCliError(`${commandLabel} --format must be one of json|toon`, EXIT_CODE.USAGE);\n }\n if (globalOptions.json === true && normalized === \"toon\") {\n throw new PmCliError(`${commandLabel} cannot combine --json with --format toon`, EXIT_CODE.USAGE);\n }\n return {\n ...globalOptions,\n json: normalized === \"json\",\n };\n}\n\n/**\n * Implements register list query commands for the public runtime surface of this module.\n */\nexport function registerListQueryCommands(program: Command, options?: RegisterListQueryCommandsOptions): void {\n const commandFilter = options?.commandFilter;\n const shouldRegister = (commandName: string): boolean => shouldRegisterListQueryCommand(commandName, commandFilter);\n // Register a flag and hide it from --help text while keeping it functional as\n // a parse-time alias. Used for pure snake_case underscore-duplicate aliases\n // (e.g. --assignee_filter for --assignee-filter) so they no longer bloat\n // --help output. The option still appears in command.options, so JSON help\n // and completion are unchanged.\n function addHiddenOption(command: Command, flags: string, description: string): void {\n command.addOption(new Option(flags, description).hideHelp());\n }\n\n // Register the content-field presence/absence filters (GH-242) and the\n // governance-missing filters (GH-236) on a list-family or search command.\n // Presence flags are plain booleans; absence flags use commander negation\n // (`--no-notes` stores notes=false) except `--empty-body` which is its own\n // dest so it composes with a future `--has-body`. linked_command tracks\n // whether a linked test carries a runnable command.\n function registerContentAndGovernanceFilters(command: Command): void {\n command\n .option(\"--has-notes\", \"Show only items that have notes\")\n .option(\"--has-learnings\", \"Show only items that have learnings\")\n .option(\"--has-files\", \"Show only items that have linked files\")\n .option(\"--has-docs\", \"Show only items that have linked docs\")\n .option(\"--has-tests\", \"Show only items that have linked tests\")\n .option(\"--has-comments\", \"Show only items that have comments\")\n .option(\"--has-deps\", \"Show only items that have dependencies\")\n .option(\"--has-body\", \"Show only items that have a non-empty body\")\n .option(\"--has-linked-command\", \"Show only items whose linked tests carry a runnable command\")\n .option(\"--no-notes\", \"Show only items that have no notes\")\n .option(\"--no-learnings\", \"Show only items that have no learnings\")\n .option(\"--no-files\", \"Show only items that have no linked files\")\n .option(\"--no-docs\", \"Show only items that have no linked docs\")\n .option(\"--no-tests\", \"Show only items that have no linked tests\")\n .option(\"--no-comments\", \"Show only items that have no comments\")\n .option(\"--no-deps\", \"Show only items that have no dependencies\")\n .option(\"--empty-body\", \"Show only items with an empty body\")\n .option(\"--no-linked-command\", \"Show only items whose linked tests carry no runnable command\")\n .option(\"--filter-reviewer-missing\", \"Show only items missing reviewer\")\n .option(\"--filter-risk-missing\", \"Show only items missing risk\")\n .option(\"--filter-confidence-missing\", \"Show only items missing confidence\")\n .option(\"--filter-sprint-missing\", \"Show only items missing sprint\")\n .option(\"--filter-release-missing\", \"Show only items missing release\");\n }\n\n function registerListCommand(\n name: string,\n description: string,\n status?: ItemStatus,\n excludeTerminal?: boolean,\n allowStatusFilter?: boolean,\n defaultBrief?: boolean,\n ): void {\n const command = program.command(name).description(description);\n if (allowStatusFilter) {\n command.option(\"--status <value>\", \"Filter by status\");\n }\n command\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--updated-after <value>\", 'Filter by updated_at lower bound: ISO timestamp or signed relative (e.g. \"-2h\"/\"-7d\" for the past). \"Changed since my last window\" → --updated-after <ISO>')\n .option(\"--updated-before <value>\", \"Filter by updated_at upper bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--created-after <value>\", \"Filter by created_at lower bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--created-before <value>\", \"Filter by created_at upper bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--ids <value>\", \"Filter by explicit item IDs (comma-separated or repeatable)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--filter-ac-missing\", \"Show only items missing acceptance_criteria\")\n .option(\"--filter-estimates-missing\", \"Show only items missing estimated_minutes\")\n .option(\"--filter-resolution-missing\", \"Show only terminal items missing resolution\")\n .option(\"--filter-metadata-missing\", \"Show only items missing any tracked metadata (AC, estimate, or resolution)\")\n .option(\"--limit <n>\", \"Limit returned item count\")\n .option(\"--offset <n>\", \"Skip the first n matching rows before limit is applied\")\n .option(\"--no-truncate\", \"Return every matched row, overriding any --limit (alias: --all)\")\n .option(\"--include-body\", \"Include item body in each returned list row\")\n .option(\"--compact\", \"Render compact list projection fields (mutually exclusive with --brief/--full/--fields)\")\n .option(\"--brief\", \"Ultra-compact output: id, status, type, title only (agent-optimized, mutually exclusive with --compact/--full/--fields)\")\n .option(\"--full\", \"Render full list projection fields (mutually exclusive with --compact/--brief/--fields)\")\n .option(\n \"--fields <value>\",\n \"Render custom comma-separated list fields (mutually exclusive with --compact/--brief/--full; valid: --fields id,title)\",\n )\n .option(\"--sort <value>\", \"Sort field: priority|deadline|updated_at|created_at|title|parent (aliases: updated, created)\")\n .option(\"--order <value>\", \"Sort order: asc|desc (requires --sort)\")\n .option(\"--tree\", \"Render rows in parent/child tree order\")\n .option(\"--tree-depth <n>\", \"Maximum recursion depth with --tree (0 keeps root rows only)\")\n .option(\"--format <value>\", \"Output render mode: csv|table (human export) or json|toon (machine output override)\")\n .option(\"--stream\", \"Emit line-delimited JSON rows (requires --json)\");\n registerContentAndGovernanceFilters(command);\n command\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const listOptions = normalizeListOptions(options);\n if (\n defaultBrief === true &&\n listOptions.includeBody !== true &&\n listOptions.compact !== true &&\n listOptions.brief !== true &&\n listOptions.full !== true &&\n listOptions.fields === undefined\n ) {\n listOptions.brief = true;\n }\n if (excludeTerminal) listOptions.excludeTerminal = true;\n const { runList } = await import(\"./commands/list.js\");\n const result = await runList(status, listOptions, globalOptions);\n const streamMode = options.stream === true;\n const listFormat = parseListFormat(options.format);\n const tabular = listFormat === \"csv\" || listFormat === \"table\";\n // json|toon reuse the shared read-command override (honours the\n // --json + --format toon conflict); csv|table are human render modes.\n const effectiveGlobal =\n listFormat === \"json\" || listFormat === \"toon\"\n ? resolveReadCommandOutputFormat(\"List\", options.format, globalOptions)\n : globalOptions;\n if (streamMode && !effectiveGlobal.json) {\n throw new PmCliError(\"--stream requires --json output mode.\", EXIT_CODE.USAGE);\n }\n if (tabular && streamMode) {\n throw new PmCliError(\"--format csv|table cannot be combined with --stream (line-delimited JSON).\", EXIT_CODE.USAGE);\n }\n if (tabular) {\n const rows = result.items as Array<Record<string, unknown>>;\n const rendered = listFormat === \"csv\" ? renderRowsAsCsv(rows) : renderRowsAsTable(rows);\n if (!effectiveGlobal.quiet && rendered.length > 0) {\n writeStdout(`${rendered}\\n`);\n }\n } else if (streamMode) {\n printListJsonStream(name, result, effectiveGlobal);\n } else {\n printResult(result, effectiveGlobal);\n }\n if (globalOptions.profile) {\n printError(`profile:command=${name} took_ms=${Date.now() - startedAt}`);\n }\n });\n // Positive alias for --no-truncate (Commander stores the negation as truncate=false).\n addHiddenOption(command, \"--all\", \"Alias for --no-truncate\");\n // Hidden pure snake_case underscore-duplicate alias (kept parse-functional).\n addHiddenOption(command, \"--tags <value>\", \"Alias for --tag\");\n addHiddenOption(command, \"--assignee_filter <value>\", \"Alias for --assignee-filter\");\n addHiddenOption(command, \"--tree_depth <n>\", \"Alias for --tree-depth\");\n // Singular alias so `--filter-estimate-missing` works (matches update-many spelling).\n addHiddenOption(command, \"--filter-estimate-missing\", \"Alias for --filter-estimates-missing\");\n }\n\n if (shouldRegister(\"list\")) {\n registerListCommand(\"list\", \"List active items with optional filters.\", undefined, true, true, true);\n }\n if (shouldRegister(\"list-all\")) {\n registerListCommand(\"list-all\", \"List all items with optional filters.\", undefined, false, true);\n }\n if (shouldRegister(\"list-draft\")) {\n registerListCommand(\"list-draft\", \"List draft items with optional filters.\", \"draft\");\n }\n if (shouldRegister(\"list-open\")) {\n registerListCommand(\"list-open\", \"List open items with optional filters.\", \"open\", false, false, true);\n }\n if (shouldRegister(\"list-in-progress\")) {\n registerListCommand(\"list-in-progress\", \"List in-progress items with optional filters.\", \"in_progress\", false, false, true);\n }\n if (shouldRegister(\"list-blocked\")) {\n registerListCommand(\"list-blocked\", \"List blocked items with optional filters.\", \"blocked\", false, false, true);\n }\n if (shouldRegister(\"list-closed\")) {\n registerListCommand(\"list-closed\", \"List closed items with optional filters.\", \"closed\");\n }\n if (shouldRegister(\"list-canceled\")) {\n registerListCommand(\"list-canceled\", \"List canceled items with optional filters.\", \"canceled\");\n }\n\n if (shouldRegister(\"aggregate\")) {\n const aggregateCommand = program\n .command(\"aggregate\")\n .description(\"Aggregate grouped item counts for governance queries.\")\n .option(\n \"--group-by <value>\",\n \"Comma-separated group-by fields (supported: parent,type,priority,status,assignee,tags,sprint,release)\",\n )\n .option(\"--count\", \"Return grouped counts (default behavior)\")\n .option(\"--completion\", \"Add open/in_progress/closed/other counts and completion_pct per group\")\n .option(\"--sum <field>\", \"Sum a numeric field per group\")\n .option(\"--avg <field>\", \"Average a numeric field per group\")\n .option(\"--include-unparented\", \"Include unparented rows when grouping by parent\")\n .option(\"--status <value>\", \"Filter by item status\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\");\n // Hidden pure snake_case underscore-duplicate aliases (kept parse-functional).\n addHiddenOption(aggregateCommand, \"--include_unparented\", \"Alias for --include-unparented\");\n addHiddenOption(aggregateCommand, \"--assignee_filter <value>\", \"Alias for --assignee-filter\");\n aggregateCommand\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runAggregate } = await import(\"./commands/aggregate.js\");\n const result = await runAggregate(normalizeAggregateOptions(options), globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=aggregate took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n if (shouldRegister(\"context\")) {\n const contextCommand = program\n .command(\"context\")\n .alias(\"ctx\")\n .description(\"Show a token-efficient project context snapshot for next-work decisions.\")\n .option(\"--date <value>\", \"Anchor date/time for agenda window calculations (ISO/date string or relative)\")\n .option(\"--from <value>\", \"Agenda lower bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Agenda upper bound (ISO/date string or relative)\")\n .option(\"--past\", \"Include past agenda entries in bounded windows\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--parent <id>\", \"Scope the snapshot to one item's subtree (the item plus all descendants)\")\n .option(\"--limit <n>\", \"Limit focus and agenda rows per section\")\n .option(\"--format <value>\", \"Context output format override: markdown|toon|json\")\n .option(\"--depth <value>\", \"Context depth: brief|standard|deep|full (full = every section, no per-section cap)\")\n .option(\"--section <value...>\", \"Include specific sections (repeatable; overrides --depth)\")\n .option(\"--fields <value>\", \"Project focus rows to a comma-separated field subset (e.g. id,title,priority)\")\n .option(\"--activity-limit <n>\", \"Limit recent activity entries (default: settings or 10)\")\n .option(\"--stale-threshold <value>\", \"Staleness cutoff in days (e.g. 7 or 7d; default: settings or 7)\");\n // Hidden pure snake_case underscore-duplicate alias (kept parse-functional).\n addHiddenOption(contextCommand, \"--assignee_filter <value>\", \"Alias for --assignee-filter\");\n contextCommand\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const normalized = normalizeContextOptions(options);\n const commands = await import(\"./commands/context.js\");\n const result = await commands.runContext(normalized, globalOptions);\n const outputFormat = commands.resolveContextOutputFormat(normalized, globalOptions);\n if (outputFormat === \"markdown\") {\n if (!globalOptions.quiet) {\n writeStdout(`${commands.renderContextMarkdown(result)}\\n`);\n }\n } else {\n printResult(result, {\n ...globalOptions,\n json: outputFormat === \"json\",\n });\n }\n if (globalOptions.profile) {\n printError(`profile:command=context took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n if (shouldRegister(\"search\")) {\n const searchCommand = program\n .command(\"search\")\n .argument(\"<keywords...>\", \"Keyword query tokens\")\n .description(\n \"Search items with keyword, semantic, or hybrid retrieval. Inline field:value tokens \" +\n \"(tag:/status:/type:/priority:) in the query are parsed as filters, e.g. 'auth tag:area:search status:open'.\",\n )\n .option(\"--mode <value>\", \"Search mode: keyword|semantic|hybrid (default: keyword)\")\n .option(\"--semantic\", \"Shorthand for --mode semantic\")\n .option(\"--hybrid\", \"Shorthand for --mode hybrid\")\n .option(\n \"--match-mode <value>\",\n \"Token match mode: and|or|exact (default: or with all-terms ranking bonus; and = hard-require every token; exact = exact phrase)\",\n )\n .option(\n \"--min-score <value>\",\n \"Per-query minimum score threshold (finite number >= 0); overrides settings search.score_threshold for this query only\",\n )\n .option(\"--count\", \"Return only the count of matching items (post-filter/threshold, pre-limit); skips hit rows\")\n .option(\n \"--semantic-weight <value>\",\n \"Override hybrid semantic weight for this query (0..1); invalid values fall back to settings\",\n )\n .option(\"--include-linked\", \"Include linked files, docs, and tests in the searchable corpus\")\n .option(\"--title-exact\", \"Require exact normalized title match for the full query string\")\n .option(\"--phrase-exact\", \"Require exact normalized phrase match in searchable text\")\n .option(\"--highlight\", \"Emit per-field matched-text snippets (wrapped in «…») on each hit; off by default\")\n .option(\"--status <value>\", \"Filter by status before query (open/closed/canceled aliases or configured status id; CSV)\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--updated-after <value>\", 'Filter by updated_at lower bound: ISO timestamp or signed relative (e.g. \"-2h\"/\"-7d\" for the past)')\n .option(\"--updated-before <value>\", \"Filter by updated_at upper bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--created-after <value>\", \"Filter by created_at lower bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--created-before <value>\", \"Filter by created_at upper bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--compact\", \"Render compact search hits (default; mutually exclusive with --full/--fields)\")\n .option(\"--full\", \"Render full search hits with nested item payloads (mutually exclusive with --compact/--fields)\")\n .option(\n \"--fields <value>\",\n \"Render custom comma-separated search hit fields (mutually exclusive with --compact/--full; valid: --fields id,title,score; invalid: --full --fields id,title)\",\n )\n .option(\"--format <value>\", \"Search output format override: json|toon\")\n .option(\"--limit <n>\", \"Limit returned item count\");\n registerContentAndGovernanceFilters(searchCommand);\n searchCommand\n .action(async (keywords: string[], options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runSearch } = await import(\"./commands/search.js\");\n const searchOptions = normalizeSearchOptions(options);\n const result = await runSearch(\n normalizeSearchKeywordsInput(keywords),\n {\n ...searchOptions,\n mode:\n typeof searchOptions.mode === \"string\" && searchOptions.mode.trim().length > 0\n ? searchOptions.mode\n : \"keyword\",\n },\n globalOptions,\n );\n printResult(result, resolveReadCommandOutputFormat(\"Search\", options.format, globalOptions));\n if (globalOptions.profile) {\n printError(`profile:command=search took_ms=${Date.now() - startedAt}`);\n }\n });\n addHiddenOption(searchCommand, \"--tags <value>\", \"Alias for --tag\");\n }\n\n if (shouldRegister(\"get\")) {\n const getCommand = program\n .command(\"get\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--depth <value>\", \"Detail depth: brief|standard|deep|full (full aliases deep; default: standard)\")\n .option(\"--full\", \"Explicit full item read; equivalent to --depth deep (mutually exclusive with --depth/--fields)\")\n .option(\"--fields <value>\", \"Render custom comma-separated item metadata fields (for example: --fields id,title,status,parent,type)\")\n .option(\"--tree\", \"Include descendants rooted at the requested item\")\n .option(\"--tree-depth <n>\", \"Maximum subtree depth for --tree descendants\")\n .option(\"--format <value>\", \"Get output format override: json|toon\")\n .description(\"Show item details by ID.\")\n .action(async (id: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runGet } = await import(\"./commands/get.js\");\n const result = await runGet(\n id,\n globalOptions,\n {\n depth: typeof options.depth === \"string\" ? options.depth : undefined,\n fields: typeof options.fields === \"string\" ? options.fields : undefined,\n full: Boolean(options.full),\n tree: options.tree === true,\n treeDepth:\n typeof options.treeDepth === \"string\"\n ? options.treeDepth\n : typeof options.tree_depth === \"string\"\n ? options.tree_depth\n : undefined,\n },\n );\n printResult(result, resolveReadCommandOutputFormat(\"Get\", options.format, globalOptions));\n if (globalOptions.profile) {\n printError(`profile:command=get took_ms=${Date.now() - startedAt}`);\n }\n });\n addHiddenOption(getCommand, \"--tree_depth <n>\", \"Alias for --tree-depth\");\n }\n\n if (shouldRegister(\"history\")) {\n program\n .command(\"history\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--limit <n>\", \"Return only the latest n history entries\")\n .option(\"--compact\", \"Condensed output: show entry index, timestamp, op, author, patch count, and changed fields\")\n .option(\"--full\", \"Show full history entries with JSON Patch payloads\")\n .option(\"--diff\", \"Include per-entry field-level before/after value diffs computed by replaying the history chain\")\n .option(\"--field <name>\", \"With --diff, show only entries that changed this field (implies --diff)\")\n .option(\"--verify\", \"Verify hash chain and replay integrity for the full history stream\")\n .option(\"--format <value>\", \"History output format override: json|toon\")\n .description(\"Show item history entries.\")\n .action(async (id: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n if (options.compact === true && options.full === true) {\n throw new PmCliError(\"History projection options are mutually exclusive. Use either --compact or --full.\", EXIT_CODE.USAGE);\n }\n const field = typeof options.field === \"string\" ? options.field : undefined;\n const { runHistory } = await import(\"./commands/history.js\");\n const result = await runHistory(\n id,\n {\n limit: typeof options.limit === \"string\" ? options.limit : undefined,\n compact: options.full === true ? false : true,\n diff: Boolean(options.diff) || field !== undefined,\n field,\n verify: Boolean(options.verify),\n },\n globalOptions,\n );\n printResult(result, resolveReadCommandOutputFormat(\"History\", options.format, globalOptions));\n if (globalOptions.profile) {\n printError(`profile:command=history took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n if (shouldRegister(\"activity\")) {\n program\n .command(\"activity\")\n .option(\"--id <value>\", \"Filter by item ID\")\n .option(\"--op <value>\", \"Filter by history operation\")\n .option(\"--author <value>\", \"Filter by history author\")\n .option(\"--from <value>\", \"Lower timestamp bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Upper timestamp bound (ISO/date string or relative)\")\n .option(\"--limit <n>\", \"Return only the latest n activity entries\")\n .option(\"--compact\", \"Condensed output: show only id, op, ts, author, msg per entry\")\n .option(\"--full\", \"Show full activity entries with JSON Patch payloads\")\n .option(\"--stream [mode]\", \"Emit line-delimited JSON rows (requires --json). Optional mode: rows|ndjson|jsonl\")\n .description(\"Show recent activity across items.\")\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n if (options.compact === true && options.full === true) {\n throw new PmCliError(\"Activity projection options are mutually exclusive. Use either --compact or --full.\", EXIT_CODE.USAGE);\n }\n const normalized = normalizeActivityOptions(options);\n const { runActivity } = await import(\"./commands/activity.js\");\n const result = await runActivity(normalized, globalOptions);\n const streamMode = resolveActivityStreamMode(options.stream);\n if (streamMode && !globalOptions.json) {\n throw new PmCliError(\"--stream requires --json output mode.\", EXIT_CODE.USAGE);\n }\n if (streamMode) {\n printActivityJsonStream(result, normalized, globalOptions);\n } else {\n printResult(result, globalOptions);\n }\n if (globalOptions.profile) {\n printError(`profile:command=activity took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n}\n\nexport const _testOnlyRegisterListQuery = {\n resolveReadCommandOutputFormat,\n parseListFormat,\n};\n", "/**\n * @module core/output/tabular\n *\n * Renders projected item rows as CSV or fixed-width text tables for human\n * export. These are presentation-only modes (GH-154): agents continue to read\n * the structured `--json`/TOON output, while humans piping `pm list` into a\n * spreadsheet or terminal get a directly consumable shape.\n */\n\n/** A projected row: a flat map of column name to scalar/collection cell value. */\nexport type TabularRow = Record<string, unknown>;\n\n/**\n * Collects the ordered union of column names across every row, preserving the\n * order in which each key is first encountered so the rendered columns mirror\n * the projection field order rather than an arbitrary object-key order.\n */\nfunction resolveColumns(rows: TabularRow[]): string[] {\n const columns: string[] = [];\n const seen = new Set<string>();\n for (const row of rows) {\n for (const key of Object.keys(row)) {\n if (!seen.has(key)) {\n seen.add(key);\n columns.push(key);\n }\n }\n }\n return columns;\n}\n\n/**\n * Converts a single cell value to its flat string form. Arrays join with `;`\n * (spreadsheet-friendly and unambiguous against the CSV `,` delimiter), objects\n * serialize to compact JSON, and null/undefined render as an empty cell.\n */\nfunction renderCell(value: unknown): string {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.map((entry) => renderCell(entry)).join(\";\");\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return String(value);\n}\n\n/**\n * Escapes a CSV field per RFC 4180: values containing the delimiter, a quote,\n * or a line break are wrapped in double quotes with embedded quotes doubled.\n */\nfunction escapeCsvField(value: string): string {\n if (/[\",\\r\\n]/.test(value)) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\n/**\n * Renders rows as RFC 4180 CSV with a header row of column names. Returns an\n * empty string when there are no rows so callers emit nothing rather than a\n * stray blank line.\n */\nexport function renderRowsAsCsv(rows: TabularRow[]): string {\n if (rows.length === 0) {\n return \"\";\n }\n const columns = resolveColumns(rows);\n const lines = [columns.map((column) => escapeCsvField(column)).join(\",\")];\n for (const row of rows) {\n lines.push(columns.map((column) => escapeCsvField(renderCell(row[column]))).join(\",\"));\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Renders rows as a fixed-width text table: a header row, a dashed separator,\n * and one padded row per item. Columns are widened to fit their widest cell so\n * the output stays aligned in a monospace terminal. Returns an empty string\n * when there are no rows.\n */\nexport function renderRowsAsTable(rows: TabularRow[]): string {\n if (rows.length === 0) {\n return \"\";\n }\n const columns = resolveColumns(rows);\n const cells = rows.map((row) => columns.map((column) => renderCell(row[column])));\n const widths = columns.map((column, index) =>\n Math.max(column.length, ...cells.map((rowCells) => rowCells[index].length)),\n );\n const pad = (value: string, index: number): string => value.padEnd(widths[index]);\n const lines = [columns.map((column, index) => pad(column, index)).join(\" | \")];\n lines.push(widths.map((width) => \"-\".repeat(width)).join(\"-+-\"));\n for (const rowCells of cells) {\n lines.push(rowCells.map((value, index) => pad(value, index)).join(\" | \"));\n }\n return lines.join(\"\\n\");\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["options"]
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../cli/register-list-query.ts","../../../../../../../../core/output/tabular.ts"],"sourcesContent":["/**\n * @module cli/register-list-query\n *\n * Provides CLI runtime support for Register List Query.\n */\nimport { Option, type Command } from \"commander\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { renderRowsAsCsv, renderRowsAsTable } from \"../core/output/tabular.js\";\nimport type { ItemStatus } from \"../types/index.js\";\nimport {\n getGlobalOptions,\n normalizeAggregateOptions,\n normalizeActivityOptions,\n normalizeContextOptions,\n normalizeListOptions,\n normalizeSearchKeywordsInput,\n normalizeSearchOptions,\n printActivityJsonStream,\n printError,\n printListJsonStream,\n printResult,\n resolveActivityStreamMode,\n writeStdout,\n} from \"./registration-helpers.js\";\n\n\n\n/**\n * Documents the register list query commands options payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisterListQueryCommandsOptions {\n commandFilter?: Set<string>;\n}\n\nfunction shouldRegisterListQueryCommand(commandName: string, commandFilter?: Set<string>): boolean {\n if (!commandFilter || commandFilter.size === 0) {\n return true;\n }\n if (commandName === \"context\") {\n return commandFilter.has(\"context\") || commandFilter.has(\"ctx\");\n }\n return commandFilter.has(commandName);\n}\n\ntype ReadCommandOutputFormat = \"json\" | \"toon\";\n\ntype ListOutputFormat = \"csv\" | \"table\" | \"json\" | \"toon\";\n\n/**\n * Parses the `pm list --format` value into a supported render mode. csv/table\n * are human export modes; json/toon override the machine output format. Returns\n * undefined when no `--format` was supplied so the global output format applies.\n */\nfunction parseListFormat(rawFormat: unknown): ListOutputFormat | undefined {\n if (rawFormat === undefined) {\n return undefined;\n }\n if (typeof rawFormat !== \"string\") {\n throw new PmCliError(\"List --format must be one of csv|table|json|toon\", EXIT_CODE.USAGE);\n }\n const normalized = rawFormat.trim().toLowerCase();\n if (normalized === \"csv\" || normalized === \"table\" || normalized === \"json\" || normalized === \"toon\") {\n return normalized;\n }\n throw new PmCliError(\"List --format must be one of csv|table|json|toon\", EXIT_CODE.USAGE);\n}\n\nfunction resolveReadCommandOutputFormat(\n commandLabel: string,\n rawFormat: unknown,\n globalOptions: ReturnType<typeof getGlobalOptions>,\n): ReturnType<typeof getGlobalOptions> {\n if (rawFormat === undefined) {\n return globalOptions;\n }\n if (typeof rawFormat !== \"string\") {\n throw new PmCliError(`${commandLabel} --format must be one of json|toon`, EXIT_CODE.USAGE);\n }\n const normalized = rawFormat.trim().toLowerCase() as ReadCommandOutputFormat;\n if (normalized !== \"json\" && normalized !== \"toon\") {\n throw new PmCliError(`${commandLabel} --format must be one of json|toon`, EXIT_CODE.USAGE);\n }\n if (globalOptions.json === true && normalized === \"toon\") {\n throw new PmCliError(`${commandLabel} cannot combine --json with --format toon`, EXIT_CODE.USAGE);\n }\n return {\n ...globalOptions,\n json: normalized === \"json\",\n };\n}\n\n/**\n * Implements register list query commands for the public runtime surface of this module.\n */\nexport function registerListQueryCommands(program: Command, options?: RegisterListQueryCommandsOptions): void {\n const commandFilter = options?.commandFilter;\n const shouldRegister = (commandName: string): boolean => shouldRegisterListQueryCommand(commandName, commandFilter);\n // Register a flag and hide it from --help text while keeping it functional as\n // a parse-time alias. Used for pure snake_case underscore-duplicate aliases\n // (e.g. --assignee_filter for --assignee-filter) so they no longer bloat\n // --help output. The option still appears in command.options, so JSON help\n // and completion are unchanged.\n function addHiddenOption(command: Command, flags: string, description: string): void {\n command.addOption(new Option(flags, description).hideHelp());\n }\n\n // Register the content-field presence/absence filters (GH-242) and the\n // governance-missing filters (GH-236) on a list-family or search command.\n // Presence flags are plain booleans; absence flags use commander negation\n // (`--no-notes` stores notes=false) except `--empty-body` which is its own\n // dest so it composes with a future `--has-body`. linked_command tracks\n // whether a linked test carries a runnable command.\n function registerContentAndGovernanceFilters(command: Command): void {\n command\n .option(\"--has-notes\", \"Show only items that have notes\")\n .option(\"--has-learnings\", \"Show only items that have learnings\")\n .option(\"--has-files\", \"Show only items that have linked files\")\n .option(\"--has-docs\", \"Show only items that have linked docs\")\n .option(\"--has-tests\", \"Show only items that have linked tests\")\n .option(\"--has-comments\", \"Show only items that have comments\")\n .option(\"--has-deps\", \"Show only items that have dependencies\")\n .option(\"--has-body\", \"Show only items that have a non-empty body\")\n .option(\"--has-linked-command\", \"Show only items whose linked tests carry a runnable command\")\n .option(\"--no-notes\", \"Show only items that have no notes\")\n .option(\"--no-learnings\", \"Show only items that have no learnings\")\n .option(\"--no-files\", \"Show only items that have no linked files\")\n .option(\"--no-docs\", \"Show only items that have no linked docs\")\n .option(\"--no-tests\", \"Show only items that have no linked tests\")\n .option(\"--no-comments\", \"Show only items that have no comments\")\n .option(\"--no-deps\", \"Show only items that have no dependencies\")\n .option(\"--empty-body\", \"Show only items with an empty body\")\n .option(\"--no-linked-command\", \"Show only items whose linked tests carry no runnable command\")\n .option(\"--filter-reviewer-missing\", \"Show only items missing reviewer\")\n .option(\"--filter-risk-missing\", \"Show only items missing risk\")\n .option(\"--filter-confidence-missing\", \"Show only items missing confidence\")\n .option(\"--filter-sprint-missing\", \"Show only items missing sprint\")\n .option(\"--filter-release-missing\", \"Show only items missing release\");\n }\n\n function registerListCommand(\n name: string,\n description: string,\n status?: ItemStatus,\n excludeTerminal?: boolean,\n allowStatusFilter?: boolean,\n defaultBrief?: boolean,\n ): void {\n const command = program.command(name).description(description);\n if (allowStatusFilter) {\n command.option(\"--status <value>\", \"Filter by status\");\n }\n command\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--updated-after <value>\", 'Filter by updated_at lower bound: ISO timestamp or signed relative (e.g. \"-2h\"/\"-7d\" for the past). \"Changed since my last window\" → --updated-after <ISO>')\n .option(\"--updated-before <value>\", \"Filter by updated_at upper bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--created-after <value>\", \"Filter by created_at lower bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--created-before <value>\", \"Filter by created_at upper bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--ids <value>\", \"Filter by explicit item IDs (comma-separated or repeatable)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--filter-ac-missing\", \"Show only items missing acceptance_criteria\")\n .option(\"--filter-estimates-missing\", \"Show only items missing estimated_minutes\")\n .option(\"--filter-resolution-missing\", \"Show only terminal items missing resolution\")\n .option(\"--filter-metadata-missing\", \"Show only items missing any tracked metadata (AC, estimate, or resolution)\")\n .option(\"--limit <n>\", \"Limit returned item count\")\n .option(\"--offset <n>\", \"Skip the first n matching rows before limit is applied\")\n .option(\"--no-truncate\", \"Return every matched row, overriding any --limit (alias: --all)\")\n .option(\"--include-body\", \"Include item body in each returned list row\")\n .option(\"--compact\", \"Render compact list projection fields (mutually exclusive with --brief/--full/--fields)\")\n .option(\"--brief\", \"Ultra-compact output: id, status, type, title only (agent-optimized, mutually exclusive with --compact/--full/--fields)\")\n .option(\"--full\", \"Render full list projection fields (mutually exclusive with --compact/--brief/--fields)\")\n .option(\n \"--fields <value>\",\n \"Render custom comma-separated list fields (mutually exclusive with --compact/--brief/--full; valid: --fields id,title)\",\n )\n .option(\"--sort <value>\", \"Sort field: priority|deadline|updated_at|created_at|title|parent (aliases: updated, created)\")\n .option(\"--order <value>\", \"Sort order: asc|desc (requires --sort)\")\n .option(\"--tree\", \"Render rows in parent/child tree order\")\n .option(\"--tree-depth <n>\", \"Maximum recursion depth with --tree (0 keeps root rows only)\")\n .option(\"--format <value>\", \"Output render mode: csv|table (human export) or json|toon (machine output override)\")\n .option(\"--stream\", \"Emit line-delimited JSON rows (requires --json)\");\n registerContentAndGovernanceFilters(command);\n command\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const listOptions = normalizeListOptions(options);\n if (\n defaultBrief === true &&\n listOptions.includeBody !== true &&\n listOptions.compact !== true &&\n listOptions.brief !== true &&\n listOptions.full !== true &&\n listOptions.fields === undefined\n ) {\n listOptions.brief = true;\n }\n if (excludeTerminal) listOptions.excludeTerminal = true;\n const { runList } = await import(\"./commands/list.js\");\n const result = await runList(status, listOptions, globalOptions);\n const streamMode = options.stream === true;\n const listFormat = parseListFormat(options.format);\n const tabular = listFormat === \"csv\" || listFormat === \"table\";\n // json|toon reuse the shared read-command override (honours the\n // --json + --format toon conflict); csv|table are human render modes.\n const effectiveGlobal =\n listFormat === \"json\" || listFormat === \"toon\"\n ? resolveReadCommandOutputFormat(\"List\", options.format, globalOptions)\n : globalOptions;\n if (streamMode && !effectiveGlobal.json) {\n throw new PmCliError(\"--stream requires --json output mode.\", EXIT_CODE.USAGE);\n }\n if (tabular && streamMode) {\n throw new PmCliError(\"--format csv|table cannot be combined with --stream (line-delimited JSON).\", EXIT_CODE.USAGE);\n }\n if (tabular) {\n const rows = result.items as Array<Record<string, unknown>>;\n const rendered = listFormat === \"csv\" ? renderRowsAsCsv(rows) : renderRowsAsTable(rows);\n if (!effectiveGlobal.quiet && rendered.length > 0) {\n writeStdout(`${rendered}\\n`);\n }\n } else if (streamMode) {\n printListJsonStream(name, result, effectiveGlobal);\n } else {\n printResult(result, effectiveGlobal);\n }\n if (globalOptions.profile) {\n printError(`profile:command=${name} took_ms=${Date.now() - startedAt}`);\n }\n });\n // Positive alias for --no-truncate (Commander stores the negation as truncate=false).\n addHiddenOption(command, \"--all\", \"Alias for --no-truncate\");\n // Hidden pure snake_case underscore-duplicate alias (kept parse-functional).\n addHiddenOption(command, \"--tags <value>\", \"Alias for --tag\");\n addHiddenOption(command, \"--assignee_filter <value>\", \"Alias for --assignee-filter\");\n addHiddenOption(command, \"--tree_depth <n>\", \"Alias for --tree-depth\");\n // Singular alias so `--filter-estimate-missing` works (matches update-many spelling).\n addHiddenOption(command, \"--filter-estimate-missing\", \"Alias for --filter-estimates-missing\");\n }\n\n if (shouldRegister(\"list\")) {\n registerListCommand(\"list\", \"List active items with optional filters.\", undefined, true, true, true);\n }\n if (shouldRegister(\"list-all\")) {\n registerListCommand(\"list-all\", \"List all items with optional filters.\", undefined, false, true);\n }\n if (shouldRegister(\"list-draft\")) {\n registerListCommand(\"list-draft\", \"List draft items with optional filters.\", \"draft\");\n }\n if (shouldRegister(\"list-open\")) {\n registerListCommand(\"list-open\", \"List open items with optional filters.\", \"open\", false, false, true);\n }\n if (shouldRegister(\"list-in-progress\")) {\n registerListCommand(\"list-in-progress\", \"List in-progress items with optional filters.\", \"in_progress\", false, false, true);\n }\n if (shouldRegister(\"list-blocked\")) {\n registerListCommand(\"list-blocked\", \"List blocked items with optional filters.\", \"blocked\", false, false, true);\n }\n if (shouldRegister(\"list-closed\")) {\n registerListCommand(\"list-closed\", \"List closed items with optional filters.\", \"closed\");\n }\n if (shouldRegister(\"list-canceled\")) {\n registerListCommand(\"list-canceled\", \"List canceled items with optional filters.\", \"canceled\");\n }\n\n if (shouldRegister(\"aggregate\")) {\n const aggregateCommand = program\n .command(\"aggregate\")\n .description(\"Aggregate grouped item counts for governance queries.\")\n .option(\n \"--group-by <value>\",\n \"Comma-separated group-by fields (supported: parent,type,priority,status,assignee,tags,sprint,release)\",\n )\n .option(\"--count\", \"Return grouped counts (default behavior)\")\n .option(\"--completion\", \"Add open/in_progress/closed/other counts and completion_pct per group\")\n .option(\"--sum <field>\", \"Sum a numeric field per group\")\n .option(\"--avg <field>\", \"Average a numeric field per group\")\n .option(\"--include-unparented\", \"Include unparented rows when grouping by parent\")\n .option(\"--status <value>\", \"Filter by item status\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\");\n // Hidden pure snake_case underscore-duplicate aliases (kept parse-functional).\n addHiddenOption(aggregateCommand, \"--include_unparented\", \"Alias for --include-unparented\");\n addHiddenOption(aggregateCommand, \"--assignee_filter <value>\", \"Alias for --assignee-filter\");\n aggregateCommand\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runAggregate } = await import(\"./commands/aggregate.js\");\n const result = await runAggregate(normalizeAggregateOptions(options), globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=aggregate took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n if (shouldRegister(\"context\")) {\n const contextCommand = program\n .command(\"context\")\n .alias(\"ctx\")\n .description(\"Show a token-efficient project context snapshot for next-work decisions.\")\n .option(\"--date <value>\", \"Anchor date/time for agenda window calculations (ISO/date string or relative)\")\n .option(\"--from <value>\", \"Agenda lower bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Agenda upper bound (ISO/date string or relative)\")\n .option(\"--past\", \"Include past agenda entries in bounded windows\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--parent <id>\", \"Scope the snapshot to one item's subtree (the item plus all descendants)\")\n .option(\"--limit <n>\", \"Limit focus and agenda rows per section\")\n .option(\"--format <value>\", \"Context output format override: markdown|toon|json\")\n .option(\"--depth <value>\", \"Context depth: brief|standard|deep|full (full = every section, no per-section cap)\")\n .option(\"--section <value...>\", \"Include specific sections (repeatable; overrides --depth)\")\n .option(\"--fields <value>\", \"Project focus rows to a comma-separated field subset (e.g. id,title,priority)\")\n .option(\"--activity-limit <n>\", \"Limit recent activity entries (default: settings or 10)\")\n .option(\"--stale-threshold <value>\", \"Staleness cutoff in days (e.g. 7 or 7d; default: settings or 7)\");\n // Hidden pure snake_case underscore-duplicate alias (kept parse-functional).\n addHiddenOption(contextCommand, \"--assignee_filter <value>\", \"Alias for --assignee-filter\");\n contextCommand\n .action(async (options: Record<string, unknown>, actionCommand) => {\n const globalOptions = getGlobalOptions(actionCommand);\n const startedAt = Date.now();\n const normalized = normalizeContextOptions(options);\n const commands = await import(\"./commands/context.js\");\n const result = await commands.runContext(normalized, globalOptions);\n const outputFormat = commands.resolveContextOutputFormat(normalized, globalOptions);\n if (outputFormat === \"markdown\") {\n if (!globalOptions.quiet) {\n writeStdout(`${commands.renderContextMarkdown(result)}\\n`);\n }\n } else {\n printResult(result, {\n ...globalOptions,\n json: outputFormat === \"json\",\n });\n }\n if (globalOptions.profile) {\n printError(`profile:command=context took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n if (shouldRegister(\"search\")) {\n const searchCommand = program\n .command(\"search\")\n .argument(\"<keywords...>\", \"Keyword query tokens\")\n .description(\n \"Search items with keyword, semantic, or hybrid retrieval. Inline field:value tokens \" +\n \"(tag:/status:/type:/priority:) in the query are parsed as filters, e.g. 'auth tag:area:search status:open'.\",\n )\n .option(\"--mode <value>\", \"Search mode: keyword|semantic|hybrid (default: keyword)\")\n .option(\"--semantic\", \"Shorthand for --mode semantic\")\n .option(\"--hybrid\", \"Shorthand for --mode hybrid\")\n .option(\n \"--match-mode <value>\",\n \"Token match mode: and|or|exact (default: or with all-terms ranking bonus; and = hard-require every token; exact = exact phrase)\",\n )\n .option(\n \"--min-score <value>\",\n \"Per-query minimum score threshold (finite number >= 0); overrides settings search.score_threshold for this query only\",\n )\n .option(\"--count\", \"Return only the count of matching items (post-filter/threshold, pre-limit); skips hit rows\")\n .option(\n \"--semantic-weight <value>\",\n \"Override hybrid semantic weight for this query (0..1); invalid values fall back to settings\",\n )\n .option(\"--include-linked\", \"Include linked files, docs, and tests in the searchable corpus\")\n .option(\"--title-exact\", \"Require exact normalized title match for the full query string\")\n .option(\"--phrase-exact\", \"Require exact normalized phrase match in searchable text\")\n .option(\"--highlight\", \"Emit per-field matched-text snippets (wrapped in «…») on each hit; off by default\")\n .option(\"--status <value>\", \"Filter by status before query (open/closed/canceled aliases or configured status id; CSV)\")\n .option(\"--type <value>\", \"Filter by item type\")\n .option(\"--tag <value>\", \"Filter by tag\")\n .option(\"--priority <value>\", \"Filter by priority\")\n .option(\"--deadline-before <value>\", \"Filter by deadline upper bound (ISO/date string or relative)\")\n .option(\"--deadline-after <value>\", \"Filter by deadline lower bound (ISO/date string or relative)\")\n .option(\"--updated-after <value>\", 'Filter by updated_at lower bound: ISO timestamp or signed relative (e.g. \"-2h\"/\"-7d\" for the past)')\n .option(\"--updated-before <value>\", \"Filter by updated_at upper bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--created-after <value>\", \"Filter by created_at lower bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--created-before <value>\", \"Filter by created_at upper bound: ISO timestamp or signed relative (-2h/+1d)\")\n .option(\"--assignee <value>\", \"Filter by assignee\")\n .option(\"--sprint <value>\", \"Filter by sprint\")\n .option(\"--release <value>\", \"Filter by release\")\n .option(\"--parent <value>\", \"Filter by parent item ID\")\n .option(\"--compact\", \"Render compact search hits (default; mutually exclusive with --full/--fields)\")\n .option(\"--full\", \"Render full search hits with nested item payloads (mutually exclusive with --compact/--fields)\")\n .option(\n \"--fields <value>\",\n \"Render custom comma-separated search hit fields (mutually exclusive with --compact/--full; valid: --fields id,title,score; invalid: --full --fields id,title)\",\n )\n .option(\"--format <value>\", \"Search output format override: json|toon\")\n .option(\"--limit <n>\", \"Limit returned item count\");\n registerContentAndGovernanceFilters(searchCommand);\n searchCommand\n .action(async (keywords: string[], options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runSearch } = await import(\"./commands/search.js\");\n const searchOptions = normalizeSearchOptions(options);\n const result = await runSearch(\n normalizeSearchKeywordsInput(keywords),\n {\n ...searchOptions,\n mode:\n typeof searchOptions.mode === \"string\" && searchOptions.mode.trim().length > 0\n ? searchOptions.mode\n : \"keyword\",\n },\n globalOptions,\n );\n printResult(result, resolveReadCommandOutputFormat(\"Search\", options.format, globalOptions));\n if (globalOptions.profile) {\n printError(`profile:command=search took_ms=${Date.now() - startedAt}`);\n }\n });\n addHiddenOption(searchCommand, \"--tags <value>\", \"Alias for --tag\");\n }\n\n if (shouldRegister(\"get\")) {\n const getCommand = program\n .command(\"get\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--depth <value>\", \"Detail depth: brief|standard|deep|full (full aliases deep; default: standard)\")\n .option(\"--full\", \"Explicit full item read; equivalent to --depth deep (mutually exclusive with --depth/--fields)\")\n .option(\"--fields <value>\", \"Render custom comma-separated item metadata fields (for example: --fields id,title,status,parent,type)\")\n .option(\"--tree\", \"Include descendants rooted at the requested item\")\n .option(\"--tree-depth <n>\", \"Maximum subtree depth for --tree descendants\")\n .option(\"--format <value>\", \"Get output format override: json|toon\")\n .description(\"Show item details by ID.\")\n .action(async (id: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runGet } = await import(\"./commands/get.js\");\n const result = await runGet(\n id,\n globalOptions,\n {\n depth: typeof options.depth === \"string\" ? options.depth : undefined,\n fields: typeof options.fields === \"string\" ? options.fields : undefined,\n full: Boolean(options.full),\n tree: options.tree === true,\n treeDepth:\n typeof options.treeDepth === \"string\"\n ? options.treeDepth\n : typeof options.tree_depth === \"string\"\n ? options.tree_depth\n : undefined,\n },\n );\n printResult(result, resolveReadCommandOutputFormat(\"Get\", options.format, globalOptions));\n if (globalOptions.profile) {\n printError(`profile:command=get took_ms=${Date.now() - startedAt}`);\n }\n });\n addHiddenOption(getCommand, \"--tree_depth <n>\", \"Alias for --tree-depth\");\n }\n\n if (shouldRegister(\"history\")) {\n program\n .command(\"history\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--limit <n>\", \"Return only the latest n history entries\")\n .option(\"--compact\", \"Condensed output: show entry index, timestamp, op, author, patch count, and changed fields\")\n .option(\"--full\", \"Show full history entries with JSON Patch payloads\")\n .option(\"--diff\", \"Include per-entry field-level before/after value diffs computed by replaying the history chain\")\n .option(\"--field <name>\", \"With --diff, show only entries that changed this field (implies --diff)\")\n .option(\"--verify\", \"Verify hash chain and replay integrity for the full history stream\")\n .option(\"--format <value>\", \"History output format override: json|toon\")\n .description(\"Show item history entries.\")\n .action(async (id: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n if (options.compact === true && options.full === true) {\n throw new PmCliError(\"History projection options are mutually exclusive. Use either --compact or --full.\", EXIT_CODE.USAGE);\n }\n const field = typeof options.field === \"string\" ? options.field : undefined;\n const { runHistory } = await import(\"./commands/history.js\");\n const result = await runHistory(\n id,\n {\n limit: typeof options.limit === \"string\" ? options.limit : undefined,\n compact: options.full === true ? false : true,\n diff: Boolean(options.diff) || field !== undefined,\n field,\n verify: Boolean(options.verify),\n },\n globalOptions,\n );\n printResult(result, resolveReadCommandOutputFormat(\"History\", options.format, globalOptions));\n if (globalOptions.profile) {\n printError(`profile:command=history took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n if (shouldRegister(\"activity\")) {\n program\n .command(\"activity\")\n .option(\"--id <value>\", \"Filter by item ID\")\n .option(\"--op <value>\", \"Filter by history operation\")\n .option(\"--author <value>\", \"Filter by history author\")\n .option(\"--from <value>\", \"Lower timestamp bound (ISO/date string or relative)\")\n .option(\"--to <value>\", \"Upper timestamp bound (ISO/date string or relative)\")\n .option(\"--limit <n>\", \"Return only the latest n activity entries\")\n .option(\"--compact\", \"Condensed output: show only id, op, ts, author, msg per entry\")\n .option(\"--full\", \"Show full activity entries with JSON Patch payloads\")\n .option(\"--stream [mode]\", \"Emit line-delimited JSON rows (requires --json). Optional mode: rows|ndjson|jsonl\")\n .description(\"Show recent activity across items.\")\n .action(async (options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n if (options.compact === true && options.full === true) {\n throw new PmCliError(\"Activity projection options are mutually exclusive. Use either --compact or --full.\", EXIT_CODE.USAGE);\n }\n const normalized = normalizeActivityOptions(options);\n const { runActivity } = await import(\"./commands/activity.js\");\n const result = await runActivity(normalized, globalOptions);\n const streamMode = resolveActivityStreamMode(options.stream);\n if (streamMode && !globalOptions.json) {\n throw new PmCliError(\"--stream requires --json output mode.\", EXIT_CODE.USAGE);\n }\n if (streamMode) {\n printActivityJsonStream(result, normalized, globalOptions);\n } else {\n printResult(result, globalOptions);\n }\n if (globalOptions.profile) {\n printError(`profile:command=activity took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n}\n\nexport const _testOnlyRegisterListQuery = {\n resolveReadCommandOutputFormat,\n parseListFormat,\n};\n","/**\n * @module core/output/tabular\n *\n * Renders projected item rows as CSV or fixed-width text tables for human\n * export. These are presentation-only modes (GH-154): agents continue to read\n * the structured `--json`/TOON output, while humans piping `pm list` into a\n * spreadsheet or terminal get a directly consumable shape.\n */\n\n/** A projected row: a flat map of column name to scalar/collection cell value. */\nexport type TabularRow = Record<string, unknown>;\n\n/**\n * Collects the ordered union of column names across every row, preserving the\n * order in which each key is first encountered so the rendered columns mirror\n * the projection field order rather than an arbitrary object-key order.\n */\nfunction resolveColumns(rows: TabularRow[]): string[] {\n const columns: string[] = [];\n const seen = new Set<string>();\n for (const row of rows) {\n for (const key of Object.keys(row)) {\n if (!seen.has(key)) {\n seen.add(key);\n columns.push(key);\n }\n }\n }\n return columns;\n}\n\n/**\n * Converts a single cell value to its flat string form. Arrays join with `;`\n * (spreadsheet-friendly and unambiguous against the CSV `,` delimiter), objects\n * serialize to compact JSON, and null/undefined render as an empty cell.\n */\nfunction renderCell(value: unknown): string {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.map((entry) => renderCell(entry)).join(\";\");\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return String(value);\n}\n\n/**\n * Escapes a CSV field per RFC 4180: values containing the delimiter, a quote,\n * or a line break are wrapped in double quotes with embedded quotes doubled.\n */\nfunction escapeCsvField(value: string): string {\n if (/[\",\\r\\n]/.test(value)) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\n/**\n * Renders rows as RFC 4180 CSV with a header row of column names. Returns an\n * empty string when there are no rows so callers emit nothing rather than a\n * stray blank line.\n */\nexport function renderRowsAsCsv(rows: TabularRow[]): string {\n if (rows.length === 0) {\n return \"\";\n }\n const columns = resolveColumns(rows);\n const lines = [columns.map((column) => escapeCsvField(column)).join(\",\")];\n for (const row of rows) {\n lines.push(columns.map((column) => escapeCsvField(renderCell(row[column]))).join(\",\"));\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Renders rows as a fixed-width text table: a header row, a dashed separator,\n * and one padded row per item. Columns are widened to fit their widest cell so\n * the output stays aligned in a monospace terminal. Returns an empty string\n * when there are no rows.\n */\nexport function renderRowsAsTable(rows: TabularRow[]): string {\n if (rows.length === 0) {\n return \"\";\n }\n const columns = resolveColumns(rows);\n const cells = rows.map((row) => columns.map((column) => renderCell(row[column])));\n const widths = columns.map((column, index) =>\n Math.max(column.length, ...cells.map((rowCells) => rowCells[index].length)),\n );\n const pad = (value: string, index: number): string => value.padEnd(widths[index]);\n const lines = [columns.map((column, index) => pad(column, index)).join(\" | \")];\n lines.push(widths.map((width) => \"-\".repeat(width)).join(\"-+-\"));\n for (const rowCells of cells) {\n lines.push(rowCells.map((value, index) => pad(value, index)).join(\" | \"));\n }\n return lines.join(\"\\n\");\n}\n"],"names":["options"],"mappings":"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","debugId":"f966b797-e3cf-577c-8aa9-8a316b78746a"}
|