@unbrained/pm-cli 2026.5.30 → 2026.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +152 -0
- package/dist/cli/argv-utils.js +7 -3
- package/dist/cli/argv-utils.js.map +1 -1
- package/dist/cli/bootstrap-args.d.ts +1 -0
- package/dist/cli/bootstrap-args.js +23 -3
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/calendar.js +96 -10
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.d.ts +63 -0
- package/dist/cli/commands/close-many.js +302 -0
- package/dist/cli/commands/close-many.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +1 -0
- package/dist/cli/commands/completion.js +241 -27
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +4 -4
- package/dist/cli/commands/config.js +115 -3
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/contracts.js +191 -162
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +1 -0
- package/dist/cli/commands/create.js +109 -116
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension/doctor.d.ts +12 -0
- package/dist/cli/commands/extension/doctor.js +97 -2
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/install-sources.d.ts +2 -0
- package/dist/cli/commands/extension/install-sources.js +11 -4
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.js +49 -48
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.js +51 -23
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/get.js +7 -7
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.js +38 -3
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.js +4 -3
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.js +107 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.js +58 -26
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/reindex.js +164 -48
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/repeatable-metadata-parsers.d.ts +15 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js +120 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -0
- package/dist/cli/commands/restore.js +25 -4
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +122 -1
- package/dist/cli/commands/schema.js +536 -6
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +18 -0
- package/dist/cli/commands/search.js +56 -12
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/test.js +4 -3
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +69 -140
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.js +138 -119
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +1 -0
- package/dist/cli/commands/validate.js +63 -33
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +26 -3
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/help-content.js +82 -3
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/main.js +377 -23
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +16 -12
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +217 -47
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +34 -25
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +8 -8
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +35 -5
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli/search-refresh.d.ts +2 -0
- package/dist/cli/search-refresh.js +13 -0
- package/dist/cli/search-refresh.js.map +1 -0
- package/dist/cli-bundle/chunks/activity-3RWRRNOW.js +20 -0
- package/dist/cli-bundle/chunks/activity-3RWRRNOW.js.map +1 -0
- package/dist/cli-bundle/chunks/activity-P5BUMWP3.js +16 -0
- package/dist/cli-bundle/chunks/activity-P5BUMWP3.js.map +7 -0
- package/dist/cli-bundle/chunks/aggregate-J35K7WZB.js +206 -0
- package/dist/cli-bundle/chunks/aggregate-J35K7WZB.js.map +1 -0
- package/dist/cli-bundle/chunks/aggregate-OOAGKWRG.js +209 -0
- package/dist/cli-bundle/chunks/aggregate-OOAGKWRG.js.map +7 -0
- package/dist/cli-bundle/chunks/append-5JE3YGXU.js +72 -0
- package/dist/cli-bundle/chunks/append-5JE3YGXU.js.map +7 -0
- package/dist/cli-bundle/chunks/append-PNN6UIBZ.js +69 -0
- package/dist/cli-bundle/chunks/append-PNN6UIBZ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-26KTVXJW.js +218 -0
- package/dist/cli-bundle/chunks/chunk-26KTVXJW.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-3HUE7XOF.js +27 -0
- package/dist/cli-bundle/chunks/chunk-3HUE7XOF.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-3OH4DAEB.js +761 -0
- package/dist/cli-bundle/chunks/chunk-3OH4DAEB.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-4LTBNUYT.js +5553 -0
- package/dist/cli-bundle/chunks/chunk-4LTBNUYT.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-4PJQSECJ.js +634 -0
- package/dist/cli-bundle/chunks/chunk-4PJQSECJ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-4QCR4QW3.js +1832 -0
- package/dist/cli-bundle/chunks/chunk-4QCR4QW3.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-5IRA6IYD.js +1891 -0
- package/dist/cli-bundle/chunks/chunk-5IRA6IYD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-5KB4X7YY.js +412 -0
- package/dist/cli-bundle/chunks/chunk-5KB4X7YY.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-5PAOPUZX.js +182 -0
- package/dist/cli-bundle/chunks/chunk-5PAOPUZX.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-7K24QB23.js +698 -0
- package/dist/cli-bundle/chunks/chunk-7K24QB23.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-A6PEXMYN.js +380 -0
- package/dist/cli-bundle/chunks/chunk-A6PEXMYN.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-ASQM3IF5.js +230 -0
- package/dist/cli-bundle/chunks/chunk-ASQM3IF5.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-ATBVS6WW.js +185 -0
- package/dist/cli-bundle/chunks/chunk-ATBVS6WW.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-AXXKLVTW.js +332 -0
- package/dist/cli-bundle/chunks/chunk-AXXKLVTW.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-B3N4TKNL.js +1681 -0
- package/dist/cli-bundle/chunks/chunk-B3N4TKNL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PB2YU2E3.js → chunk-BNL6S7QH.js} +28 -70
- package/dist/cli-bundle/chunks/chunk-BNL6S7QH.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-CCUFLH4J.js +154 -0
- package/dist/cli-bundle/chunks/chunk-CCUFLH4J.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-CJDQB2ED.js +341 -0
- package/dist/cli-bundle/chunks/chunk-CJDQB2ED.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-CWT53EYT.js +1340 -0
- package/dist/cli-bundle/chunks/chunk-CWT53EYT.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-D3WUNETC.js +349 -0
- package/dist/cli-bundle/chunks/chunk-D3WUNETC.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-D5X7N6FI.js +1714 -0
- package/dist/cli-bundle/chunks/chunk-D5X7N6FI.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-DFIZGAI5.js +550 -0
- package/dist/cli-bundle/chunks/chunk-DFIZGAI5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-DFUSXJDE.js +1704 -0
- package/dist/cli-bundle/chunks/chunk-DFUSXJDE.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-EAOG77HM.js +56 -0
- package/dist/cli-bundle/chunks/chunk-EAOG77HM.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-EHXPIKKP.js +2988 -0
- package/dist/cli-bundle/chunks/chunk-EHXPIKKP.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-FVXM3GKS.js +128 -0
- package/dist/cli-bundle/chunks/chunk-FVXM3GKS.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-G5BACLYH.js +454 -0
- package/dist/cli-bundle/chunks/chunk-G5BACLYH.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GCAVRLGE.js +383 -0
- package/dist/cli-bundle/chunks/chunk-GCAVRLGE.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-GFWHHMVV.js +57 -0
- package/dist/cli-bundle/chunks/chunk-GFWHHMVV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GNHVV4SY.js +3860 -0
- package/dist/cli-bundle/chunks/chunk-GNHVV4SY.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GPGAYASV.js +346 -0
- package/dist/cli-bundle/chunks/chunk-GPGAYASV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-HPH6X4ZZ.js +1356 -0
- package/dist/cli-bundle/chunks/chunk-HPH6X4ZZ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-HZOS2UG5.js +342 -0
- package/dist/cli-bundle/chunks/chunk-HZOS2UG5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-IUV734HF.js +17 -0
- package/dist/cli-bundle/chunks/chunk-IUV734HF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-J27KIHTG.js +15 -0
- package/dist/cli-bundle/chunks/chunk-J27KIHTG.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-JB4RGL4V.js +185 -0
- package/dist/cli-bundle/chunks/chunk-JB4RGL4V.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-JQI2HE55.js +130 -0
- package/dist/cli-bundle/chunks/chunk-JQI2HE55.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-K47WAYQV.js +60 -0
- package/dist/cli-bundle/chunks/chunk-K47WAYQV.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-KA24HME7.js +79 -0
- package/dist/cli-bundle/chunks/chunk-KA24HME7.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-KBG47ZOY.js +1325 -0
- package/dist/cli-bundle/chunks/chunk-KBG47ZOY.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-KCMIYKTA.js +242 -0
- package/dist/cli-bundle/chunks/chunk-KCMIYKTA.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-KK6YPGH3.js +221 -0
- package/dist/cli-bundle/chunks/chunk-KK6YPGH3.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-LDJK7SHN.js +157 -0
- package/dist/cli-bundle/chunks/chunk-LDJK7SHN.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-LXYVKYMQ.js +24 -0
- package/dist/cli-bundle/chunks/chunk-LXYVKYMQ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-MISYRLEP.js +80 -0
- package/dist/cli-bundle/chunks/chunk-MISYRLEP.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-N5YF3VFN.js +457 -0
- package/dist/cli-bundle/chunks/chunk-N5YF3VFN.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-NQP3ECKF.js +173 -0
- package/dist/cli-bundle/chunks/chunk-NQP3ECKF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-O5IBJE6S.js +338 -0
- package/dist/cli-bundle/chunks/chunk-O5IBJE6S.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-O7IWB35H.js +18 -0
- package/dist/cli-bundle/chunks/chunk-O7IWB35H.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-OIQIXTNB.js +3040 -0
- package/dist/cli-bundle/chunks/chunk-OIQIXTNB.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-ORTLYVA4.js +751 -0
- package/dist/cli-bundle/chunks/chunk-ORTLYVA4.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-OUF3ARDX.js +1861 -0
- package/dist/cli-bundle/chunks/chunk-OUF3ARDX.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-QAJBIGRA.js +20 -0
- package/dist/cli-bundle/chunks/chunk-QAJBIGRA.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-RANZIID5.js +176 -0
- package/dist/cli-bundle/chunks/chunk-RANZIID5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-RQAWLSUU.js +140 -0
- package/dist/cli-bundle/chunks/chunk-RQAWLSUU.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-S3CV7JGJ.js +233 -0
- package/dist/cli-bundle/chunks/chunk-S3CV7JGJ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-SRVKTWPR.js +5705 -0
- package/dist/cli-bundle/chunks/chunk-SRVKTWPR.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-SSFMJCPF.js +76 -0
- package/dist/cli-bundle/chunks/chunk-SSFMJCPF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-SZQCER6S.js +631 -0
- package/dist/cli-bundle/chunks/chunk-SZQCER6S.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-T2ORWB6D.js +540 -0
- package/dist/cli-bundle/chunks/chunk-T2ORWB6D.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-TBQVUNVH.js +422 -0
- package/dist/cli-bundle/chunks/chunk-TBQVUNVH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RJONRNXN.js → chunk-TK633IVD.js} +51 -32
- package/dist/cli-bundle/chunks/chunk-TK633IVD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-TQ3ZK6VD.js +131 -0
- package/dist/cli-bundle/chunks/chunk-TQ3ZK6VD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-UFCG3SWR.js +119 -0
- package/dist/cli-bundle/chunks/chunk-UFCG3SWR.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-UOVLWB47.js +1664 -0
- package/dist/cli-bundle/chunks/chunk-UOVLWB47.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-V3JQ4IPL.js +186 -0
- package/dist/cli-bundle/chunks/chunk-V3JQ4IPL.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-VGO2T3TY.js +182 -0
- package/dist/cli-bundle/chunks/chunk-VGO2T3TY.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-WIKR7KFL.js +189 -0
- package/dist/cli-bundle/chunks/chunk-WIKR7KFL.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-XG7RJYHV.js +1385 -0
- package/dist/cli-bundle/chunks/chunk-XG7RJYHV.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js +53 -0
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-XX5LRINW.js +90 -0
- package/dist/cli-bundle/chunks/chunk-XX5LRINW.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-Y2AKE2HS.js +252 -0
- package/dist/cli-bundle/chunks/chunk-Y2AKE2HS.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-ZQ4F6EC4.js +3898 -0
- package/dist/cli-bundle/chunks/chunk-ZQ4F6EC4.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-ZRVSMOMR.js +1809 -0
- package/dist/cli-bundle/chunks/chunk-ZRVSMOMR.js.map +1 -0
- package/dist/cli-bundle/chunks/claim-AZLP7YFO.js +132 -0
- package/dist/cli-bundle/chunks/claim-AZLP7YFO.js.map +7 -0
- package/dist/cli-bundle/chunks/claim-ZFA7HKU4.js +129 -0
- package/dist/cli-bundle/chunks/claim-ZFA7HKU4.js.map +1 -0
- package/dist/cli-bundle/chunks/close-65DFYAVS.js +17 -0
- package/dist/cli-bundle/chunks/close-65DFYAVS.js.map +1 -0
- package/dist/cli-bundle/chunks/close-RMHQ3KWH.js +13 -0
- package/dist/cli-bundle/chunks/close-RMHQ3KWH.js.map +7 -0
- package/dist/cli-bundle/chunks/close-many-AKPZNSGI.js +311 -0
- package/dist/cli-bundle/chunks/close-many-AKPZNSGI.js.map +1 -0
- package/dist/cli-bundle/chunks/close-many-UKZSQGM7.js +314 -0
- package/dist/cli-bundle/chunks/close-many-UKZSQGM7.js.map +7 -0
- package/dist/cli-bundle/chunks/comments-AGBNSJJH.js +103 -0
- package/dist/cli-bundle/chunks/comments-AGBNSJJH.js.map +7 -0
- package/dist/cli-bundle/chunks/comments-CJWXQI7X.js +100 -0
- package/dist/cli-bundle/chunks/comments-CJWXQI7X.js.map +1 -0
- package/dist/cli-bundle/chunks/config-5ON3ADRH.js +1688 -0
- package/dist/cli-bundle/chunks/config-5ON3ADRH.js.map +7 -0
- package/dist/cli-bundle/chunks/config-DDPYIA6J.js +1671 -0
- package/dist/cli-bundle/chunks/config-DDPYIA6J.js.map +1 -0
- package/dist/cli-bundle/chunks/context-E6U3DWVM.js +1471 -0
- package/dist/cli-bundle/chunks/context-E6U3DWVM.js.map +7 -0
- package/dist/cli-bundle/chunks/context-ZOJEN5VT.js +1461 -0
- package/dist/cli-bundle/chunks/context-ZOJEN5VT.js.map +1 -0
- package/dist/cli-bundle/chunks/contracts-CXSFM45B.js +1277 -0
- package/dist/cli-bundle/chunks/contracts-CXSFM45B.js.map +7 -0
- package/dist/cli-bundle/chunks/contracts-LCSX5R53.js +1274 -0
- package/dist/cli-bundle/chunks/contracts-LCSX5R53.js.map +1 -0
- package/dist/cli-bundle/chunks/create-ATONSAZW.js +27 -0
- package/dist/cli-bundle/chunks/create-ATONSAZW.js.map +7 -0
- package/dist/cli-bundle/chunks/create-WYFKN2U4.js +31 -0
- package/dist/cli-bundle/chunks/create-WYFKN2U4.js.map +1 -0
- package/dist/cli-bundle/chunks/delete-RONNH4F4.js +58 -0
- package/dist/cli-bundle/chunks/delete-RONNH4F4.js.map +7 -0
- package/dist/cli-bundle/chunks/delete-ZXWC56WO.js +55 -0
- package/dist/cli-bundle/chunks/delete-ZXWC56WO.js.map +1 -0
- package/dist/cli-bundle/chunks/deps-EHXIFOZR.js +225 -0
- package/dist/cli-bundle/chunks/deps-EHXIFOZR.js.map +1 -0
- package/dist/cli-bundle/chunks/deps-WII3O4HB.js +228 -0
- package/dist/cli-bundle/chunks/deps-WII3O4HB.js.map +7 -0
- package/dist/cli-bundle/chunks/docs-JMVCFNHH.js +34 -0
- package/dist/cli-bundle/chunks/docs-JMVCFNHH.js.map +7 -0
- package/dist/cli-bundle/chunks/docs-PDREIMLS.js +31 -0
- package/dist/cli-bundle/chunks/docs-PDREIMLS.js.map +1 -0
- package/dist/cli-bundle/chunks/extension-B4ROVWJD.js +28 -0
- package/dist/cli-bundle/chunks/extension-B4ROVWJD.js.map +1 -0
- package/dist/cli-bundle/chunks/extension-G6UXSM5S.js +24 -0
- package/dist/cli-bundle/chunks/extension-G6UXSM5S.js.map +7 -0
- package/dist/cli-bundle/chunks/files-2PN7UM2D.js +282 -0
- package/dist/cli-bundle/chunks/files-2PN7UM2D.js.map +1 -0
- package/dist/cli-bundle/chunks/files-MXYS5W4M.js +285 -0
- package/dist/cli-bundle/chunks/files-MXYS5W4M.js.map +7 -0
- package/dist/cli-bundle/chunks/gc-GT552UJH.js +178 -0
- package/dist/cli-bundle/chunks/gc-GT552UJH.js.map +1 -0
- package/dist/cli-bundle/chunks/gc-QNBRJG6H.js +181 -0
- package/dist/cli-bundle/chunks/gc-QNBRJG6H.js.map +7 -0
- package/dist/cli-bundle/chunks/get-CINFEUIY.js +197 -0
- package/dist/cli-bundle/chunks/get-CINFEUIY.js.map +7 -0
- package/dist/cli-bundle/chunks/get-WXMLRG7M.js +194 -0
- package/dist/cli-bundle/chunks/get-WXMLRG7M.js.map +1 -0
- package/dist/cli-bundle/chunks/health-5VPOJQ53.js +1258 -0
- package/dist/cli-bundle/chunks/health-5VPOJQ53.js.map +1 -0
- package/dist/cli-bundle/chunks/health-IT5DBPRJ.js +1261 -0
- package/dist/cli-bundle/chunks/health-IT5DBPRJ.js.map +7 -0
- package/dist/cli-bundle/chunks/history-6FC4H6HI.js +20 -0
- package/dist/cli-bundle/chunks/history-6FC4H6HI.js.map +7 -0
- package/dist/cli-bundle/chunks/history-FLZIP7PM.js +24 -0
- package/dist/cli-bundle/chunks/history-FLZIP7PM.js.map +1 -0
- package/dist/cli-bundle/chunks/history-redact-SSZBAD76.js +23 -0
- package/dist/cli-bundle/chunks/history-redact-SSZBAD76.js.map +1 -0
- package/dist/cli-bundle/chunks/history-redact-XKYEZDBL.js +19 -0
- package/dist/cli-bundle/chunks/history-redact-XKYEZDBL.js.map +7 -0
- package/dist/cli-bundle/chunks/history-repair-KC5ZOJRZ.js +196 -0
- package/dist/cli-bundle/chunks/history-repair-KC5ZOJRZ.js.map +7 -0
- package/dist/cli-bundle/chunks/history-repair-X7CO5JJZ.js +193 -0
- package/dist/cli-bundle/chunks/history-repair-X7CO5JJZ.js.map +1 -0
- package/dist/cli-bundle/chunks/init-6MRFVOLH.js +20 -0
- package/dist/cli-bundle/chunks/init-6MRFVOLH.js.map +1 -0
- package/dist/cli-bundle/chunks/init-KHX3FEEM.js +16 -0
- package/dist/cli-bundle/chunks/init-KHX3FEEM.js.map +7 -0
- package/dist/cli-bundle/chunks/learnings-A3CLB5CO.js +47 -0
- package/dist/cli-bundle/chunks/learnings-A3CLB5CO.js.map +7 -0
- package/dist/cli-bundle/chunks/learnings-DCX55BNX.js +44 -0
- package/dist/cli-bundle/chunks/learnings-DCX55BNX.js.map +1 -0
- package/dist/cli-bundle/chunks/list-53LZ2AEO.js +20 -0
- package/dist/cli-bundle/chunks/list-53LZ2AEO.js.map +7 -0
- package/dist/cli-bundle/chunks/list-DBRECOG4.js +24 -0
- package/dist/cli-bundle/chunks/list-DBRECOG4.js.map +1 -0
- package/dist/cli-bundle/chunks/notes-42LIC3UE.js +47 -0
- package/dist/cli-bundle/chunks/notes-42LIC3UE.js.map +7 -0
- package/dist/cli-bundle/chunks/notes-P5O3VMQ3.js +44 -0
- package/dist/cli-bundle/chunks/notes-P5O3VMQ3.js.map +1 -0
- package/dist/cli-bundle/chunks/plan-HDQXEUKD.js +1174 -0
- package/dist/cli-bundle/chunks/plan-HDQXEUKD.js.map +7 -0
- package/dist/cli-bundle/chunks/plan-IGTE3WOJ.js +1171 -0
- package/dist/cli-bundle/chunks/plan-IGTE3WOJ.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-EIVQ5FMR.js → register-list-query-AG3XKXWL.js} +25 -18
- package/dist/cli-bundle/chunks/register-list-query-AG3XKXWL.js.map +7 -0
- package/dist/cli-bundle/chunks/register-list-query-EMNSIUO4.js +227 -0
- package/dist/cli-bundle/chunks/register-list-query-EMNSIUO4.js.map +1 -0
- package/dist/cli-bundle/chunks/register-mutation-M3YS6XDO.js +813 -0
- package/dist/cli-bundle/chunks/register-mutation-M3YS6XDO.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-RSZNPSGI.js → register-mutation-RSMT6DPK.js} +160 -39
- package/dist/cli-bundle/chunks/register-mutation-RSMT6DPK.js.map +7 -0
- package/dist/cli-bundle/chunks/register-operations-KYUOOOOD.js +370 -0
- package/dist/cli-bundle/chunks/register-operations-KYUOOOOD.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-APUSYDMR.js → register-operations-Q54JQZUN.js} +50 -32
- package/dist/cli-bundle/chunks/register-operations-Q54JQZUN.js.map +7 -0
- package/dist/cli-bundle/chunks/register-setup-DI6P7X75.js +242 -0
- package/dist/cli-bundle/chunks/register-setup-DI6P7X75.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-OZOKSMPJ.js → register-setup-YJKIQRKA.js} +21 -13
- package/dist/cli-bundle/chunks/register-setup-YJKIQRKA.js.map +7 -0
- package/dist/cli-bundle/chunks/restore-2XVTBLKQ.js +21 -0
- package/dist/cli-bundle/chunks/restore-2XVTBLKQ.js.map +1 -0
- package/dist/cli-bundle/chunks/restore-JL5QIH7H.js +17 -0
- package/dist/cli-bundle/chunks/restore-JL5QIH7H.js.map +7 -0
- package/dist/cli-bundle/chunks/schema-LVXZWFGY.js +770 -0
- package/dist/cli-bundle/chunks/schema-LVXZWFGY.js.map +1 -0
- package/dist/cli-bundle/chunks/schema-V6BX65Q2.js +780 -0
- package/dist/cli-bundle/chunks/schema-V6BX65Q2.js.map +7 -0
- package/dist/cli-bundle/chunks/search-5A3BMFA7.js +1144 -0
- package/dist/cli-bundle/chunks/search-5A3BMFA7.js.map +7 -0
- package/dist/cli-bundle/chunks/search-C7NPB7G7.js +1127 -0
- package/dist/cli-bundle/chunks/search-C7NPB7G7.js.map +1 -0
- package/dist/cli-bundle/chunks/stats-FNLYVXTB.js +120 -0
- package/dist/cli-bundle/chunks/stats-FNLYVXTB.js.map +1 -0
- package/dist/cli-bundle/chunks/stats-Y2CBTZSL.js +123 -0
- package/dist/cli-bundle/chunks/stats-Y2CBTZSL.js.map +7 -0
- package/dist/cli-bundle/chunks/test-OFYONO3C.js +35 -0
- package/dist/cli-bundle/chunks/test-OFYONO3C.js.map +1 -0
- package/dist/cli-bundle/chunks/test-RJ4ZF35X.js +31 -0
- package/dist/cli-bundle/chunks/test-RJ4ZF35X.js.map +7 -0
- package/dist/cli-bundle/chunks/test-all-EEMKNTGU.js +331 -0
- package/dist/cli-bundle/chunks/test-all-EEMKNTGU.js.map +7 -0
- package/dist/cli-bundle/chunks/test-all-OJE6CIO7.js +328 -0
- package/dist/cli-bundle/chunks/test-all-OJE6CIO7.js.map +1 -0
- package/dist/cli-bundle/chunks/test-runs-IPOPFOAF.js +929 -0
- package/dist/cli-bundle/chunks/test-runs-IPOPFOAF.js.map +1 -0
- package/dist/cli-bundle/chunks/test-runs-L2M7WKH7.js +939 -0
- package/dist/cli-bundle/chunks/test-runs-L2M7WKH7.js.map +7 -0
- package/dist/cli-bundle/chunks/update-6YEHPVXH.js +25 -0
- package/dist/cli-bundle/chunks/update-6YEHPVXH.js.map +1 -0
- package/dist/cli-bundle/chunks/update-PYLVHMRD.js +21 -0
- package/dist/cli-bundle/chunks/update-PYLVHMRD.js.map +7 -0
- package/dist/cli-bundle/chunks/update-many-322CCH2L.js +608 -0
- package/dist/cli-bundle/chunks/update-many-322CCH2L.js.map +7 -0
- package/dist/cli-bundle/chunks/update-many-DYWGW57M.js +605 -0
- package/dist/cli-bundle/chunks/update-many-DYWGW57M.js.map +1 -0
- package/dist/cli-bundle/chunks/upgrade-2U727SAM.js +269 -0
- package/dist/cli-bundle/chunks/upgrade-2U727SAM.js.map +7 -0
- package/dist/cli-bundle/chunks/upgrade-3W3RVSNM.js +266 -0
- package/dist/cli-bundle/chunks/upgrade-3W3RVSNM.js.map +1 -0
- package/dist/cli-bundle/chunks/validate-GZ24NYHO.js +1120 -0
- package/dist/cli-bundle/chunks/validate-GZ24NYHO.js.map +1 -0
- package/dist/cli-bundle/chunks/validate-ZFVWPEEN.js +1123 -0
- package/dist/cli-bundle/chunks/validate-ZFVWPEEN.js.map +7 -0
- package/dist/cli-bundle/main.js +615 -121
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/checkpoint/mutation-checkpoint.d.ts +44 -0
- package/dist/core/checkpoint/mutation-checkpoint.js +119 -0
- package/dist/core/checkpoint/mutation-checkpoint.js.map +1 -0
- package/dist/core/config/positional-value.js +4 -2
- package/dist/core/config/positional-value.js.map +1 -1
- package/dist/core/diagnostics/remediation.d.ts +73 -0
- package/dist/core/diagnostics/remediation.js +328 -0
- package/dist/core/diagnostics/remediation.js.map +1 -0
- package/dist/core/extensions/extension-hook-runtime.js +9 -2
- package/dist/core/extensions/extension-hook-runtime.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +60 -4
- package/dist/core/extensions/extension-types.js +2 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +5 -1
- package/dist/core/extensions/index.js +61 -2
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/item-fields.d.ts +5 -1
- package/dist/core/extensions/item-fields.js +126 -4
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.js +283 -8
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/item/item-format.d.ts +3 -2
- package/dist/core/item/item-format.js +15 -10
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/item-type-definition.js +6 -2
- package/dist/core/item/item-type-definition.js.map +1 -1
- package/dist/core/item/status-filter.d.ts +29 -0
- package/dist/core/item/status-filter.js +97 -0
- package/dist/core/item/status-filter.js.map +1 -0
- package/dist/core/item/type-registry.d.ts +4 -0
- package/dist/core/item/type-registry.js +12 -2
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/output/output.js +17 -5
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/schema/item-types-file.d.ts +15 -0
- package/dist/core/schema/item-types-file.js +27 -2
- package/dist/core/schema/item-types-file.js.map +1 -1
- package/dist/core/schema/runtime-field-filters.js +4 -3
- package/dist/core/schema/runtime-field-filters.js.map +1 -1
- package/dist/core/schema/runtime-field-values.d.ts +1 -1
- package/dist/core/schema/runtime-field-values.js +10 -4
- package/dist/core/schema/runtime-field-values.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +75 -2
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/schema/status-defs-file.d.ts +113 -0
- package/dist/core/schema/status-defs-file.js +260 -0
- package/dist/core/schema/status-defs-file.js.map +1 -0
- package/dist/core/schema/type-workflows.d.ts +64 -0
- package/dist/core/schema/type-workflows.js +98 -0
- package/dist/core/schema/type-workflows.js.map +1 -0
- package/dist/core/search/background-refresh.d.ts +53 -0
- package/dist/core/search/background-refresh.js +286 -0
- package/dist/core/search/background-refresh.js.map +1 -0
- package/dist/core/search/cache.d.ts +23 -2
- package/dist/core/search/cache.js +135 -30
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/http-client.d.ts +2 -2
- package/dist/core/search/http-client.js +2 -2
- package/dist/core/search/http-client.js.map +1 -1
- package/dist/core/search/vector-stores.d.ts +1 -0
- package/dist/core/search/vector-stores.js +69 -15
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/search/vectorization-metadata.d.ts +13 -0
- package/dist/core/search/vectorization-metadata.js +65 -0
- package/dist/core/search/vectorization-metadata.js.map +1 -0
- package/dist/core/shared/constants.d.ts +2 -2
- package/dist/core/shared/constants.js +2 -3
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/serialization.d.ts +1 -0
- package/dist/core/shared/serialization.js +86 -2
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +14 -5
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-format-migration.js +25 -15
- package/dist/core/store/item-format-migration.js.map +1 -1
- package/dist/core/store/item-store.d.ts +2 -0
- package/dist/core/store/item-store.js +61 -6
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-validator.js +22 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +40 -5
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/consent.js +3 -3
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/telemetry/observability.js +4 -3
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.d.ts +10 -0
- package/dist/core/telemetry/runtime.js +86 -2
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/mcp/server.js +221 -12
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +16 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +7 -2
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts/enum-contracts.js +4 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -0
- package/dist/sdk/cli-contracts/tool-option-contracts.js +53 -3
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +37 -8
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +19 -1
- package/dist/sdk/cli-contracts.js +211 -18
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/errors.d.ts +22 -0
- package/dist/sdk/errors.js +46 -0
- package/dist/sdk/errors.js.map +1 -0
- package/dist/sdk/index.d.ts +2 -1
- package/dist/sdk/index.js +3 -2
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/package-import-adapters.js +14 -3
- package/dist/sdk/package-import-adapters.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 +77 -0
- package/dist/sdk/testing.js +239 -0
- package/dist/sdk/testing.js.map +1 -0
- package/dist/types.d.ts +26 -1
- package/dist/types.js +3 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +21 -2
- package/docs/COMMANDS.md +85 -5
- package/docs/CONFIGURATION.md +49 -2
- package/docs/EXTENSIONS.md +118 -6
- package/docs/QUICKSTART.md +2 -0
- package/docs/RELEASING.md +3 -3
- package/docs/SDK.md +273 -1
- package/docs/TESTING.md +17 -0
- package/docs/examples/policy-restricted-extension/manifest.json +1 -0
- package/docs/examples/starter-extension/index.js +9 -1
- package/docs/examples/starter-extension/manifest.json +1 -0
- package/package.json +12 -7
- package/packages/pm-beads/extensions/beads/index.js +2 -4
- package/packages/pm-beads/extensions/beads/index.ts +43 -33
- package/packages/pm-beads/extensions/beads/manifest.json +12 -1
- package/packages/pm-calendar/README.md +6 -0
- package/packages/pm-calendar/extensions/calendar/index.js +6 -1
- package/packages/pm-calendar/extensions/calendar/index.ts +6 -1
- package/packages/pm-calendar/extensions/calendar/manifest.json +6 -1
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +6 -1
- package/packages/pm-guide-shell/README.md +4 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +22 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +22 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +6 -1
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +74 -3
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +84 -4
- package/packages/pm-lifecycle-hooks/README.md +29 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +18 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +20 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +9 -0
- package/packages/pm-lifecycle-hooks/package.json +52 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +13 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +69 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +91 -2
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +13 -1
- package/packages/pm-templates/extensions/templates/manifest.json +6 -1
- package/packages/pm-todos/extensions/todos/index.js +3 -7
- package/packages/pm-todos/extensions/todos/index.ts +55 -42
- package/packages/pm-todos/extensions/todos/manifest.json +13 -1
- package/scripts/bundle-cli.mjs +121 -17
- package/dist/cli-bundle/chunks/chunk-PB2YU2E3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RJONRNXN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SW5BMMCU.js +0 -13864
- package/dist/cli-bundle/chunks/chunk-SW5BMMCU.js.map +0 -7
- package/dist/cli-bundle/chunks/commands-XJ4TJ5UN.js +0 -24225
- package/dist/cli-bundle/chunks/commands-XJ4TJ5UN.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-EIVQ5FMR.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-RSZNPSGI.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-APUSYDMR.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-OZOKSMPJ.js.map +0 -7
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import {
|
|
2
|
+
splitCommaList
|
|
3
|
+
} from "./chunk-3HUE7XOF.js";
|
|
4
|
+
import {
|
|
5
|
+
runList
|
|
6
|
+
} from "./chunk-N5YF3VFN.js";
|
|
7
|
+
import "./chunk-RQAWLSUU.js";
|
|
8
|
+
import "./chunk-K47WAYQV.js";
|
|
9
|
+
import "./chunk-EAOG77HM.js";
|
|
10
|
+
import "./chunk-XG7RJYHV.js";
|
|
11
|
+
import "./chunk-KA24HME7.js";
|
|
12
|
+
import {
|
|
13
|
+
normalizeStatusInput
|
|
14
|
+
} from "./chunk-HPH6X4ZZ.js";
|
|
15
|
+
import "./chunk-4PJQSECJ.js";
|
|
16
|
+
import {
|
|
17
|
+
nowIso
|
|
18
|
+
} from "./chunk-RANZIID5.js";
|
|
19
|
+
import {
|
|
20
|
+
EXIT_CODE,
|
|
21
|
+
PmCliError,
|
|
22
|
+
readSettings,
|
|
23
|
+
resolvePmRoot,
|
|
24
|
+
resolveRuntimeStatusRegistry
|
|
25
|
+
} from "./chunk-SRVKTWPR.js";
|
|
26
|
+
|
|
27
|
+
// dist/cli/commands/aggregate.js
|
|
28
|
+
!(function() {
|
|
29
|
+
try {
|
|
30
|
+
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
31
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "0c8f06f7-0f97-5ae3-ab61-12c1a053d751");
|
|
32
|
+
} catch (e2) {
|
|
33
|
+
}
|
|
34
|
+
})();
|
|
35
|
+
var AGGREGATE_GROUP_FIELDS = [
|
|
36
|
+
"parent",
|
|
37
|
+
"type",
|
|
38
|
+
"priority",
|
|
39
|
+
"status",
|
|
40
|
+
"assignee",
|
|
41
|
+
"tags",
|
|
42
|
+
"sprint",
|
|
43
|
+
"release"
|
|
44
|
+
];
|
|
45
|
+
function parseStatus(raw, statusRegistry) {
|
|
46
|
+
if (raw === void 0) {
|
|
47
|
+
return void 0;
|
|
48
|
+
}
|
|
49
|
+
const normalized = normalizeStatusInput(raw, statusRegistry);
|
|
50
|
+
if (!normalized) {
|
|
51
|
+
throw new PmCliError(`Status filter must be one of ${statusRegistry.definitions.map((definition) => definition.id).join("|")}`, EXIT_CODE.USAGE);
|
|
52
|
+
}
|
|
53
|
+
return normalized;
|
|
54
|
+
}
|
|
55
|
+
function parseGroupBy(raw) {
|
|
56
|
+
const value = raw?.trim() ?? "status";
|
|
57
|
+
if (value.length === 0) {
|
|
58
|
+
throw new PmCliError("--group-by requires at least one field name", EXIT_CODE.USAGE);
|
|
59
|
+
}
|
|
60
|
+
const requested = splitCommaList(value);
|
|
61
|
+
if (requested.length === 0) {
|
|
62
|
+
throw new PmCliError("--group-by requires a comma-separated list of fields", EXIT_CODE.USAGE);
|
|
63
|
+
}
|
|
64
|
+
for (const field of requested) {
|
|
65
|
+
if (!AGGREGATE_GROUP_FIELDS.includes(field)) {
|
|
66
|
+
throw new PmCliError(`Aggregate group fields must be one of ${AGGREGATE_GROUP_FIELDS.join("|")}; received "${field}"`, EXIT_CODE.USAGE);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return requested;
|
|
70
|
+
}
|
|
71
|
+
function normalizeTagGroupValue(tags) {
|
|
72
|
+
const normalized = [...new Set(tags.map((tag) => tag.trim().toLowerCase()).filter((tag) => tag.length > 0))].sort((left, right) => left.localeCompare(right));
|
|
73
|
+
if (normalized.length === 0) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
return normalized.join(",");
|
|
77
|
+
}
|
|
78
|
+
function resolveGroupValue(field, item) {
|
|
79
|
+
switch (field) {
|
|
80
|
+
case "parent":
|
|
81
|
+
return item.parent ?? null;
|
|
82
|
+
case "type":
|
|
83
|
+
return item.type;
|
|
84
|
+
case "priority":
|
|
85
|
+
return item.priority;
|
|
86
|
+
case "status":
|
|
87
|
+
return item.status;
|
|
88
|
+
case "assignee":
|
|
89
|
+
return item.assignee ?? null;
|
|
90
|
+
case "tags":
|
|
91
|
+
return normalizeTagGroupValue(item.tags);
|
|
92
|
+
case "sprint":
|
|
93
|
+
return item.sprint ?? null;
|
|
94
|
+
case "release":
|
|
95
|
+
return item.release ?? null;
|
|
96
|
+
default:
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function compareNullableGroupValue(left, right) {
|
|
101
|
+
const leftValue = left ?? null;
|
|
102
|
+
const rightValue = right ?? null;
|
|
103
|
+
if (leftValue === rightValue) {
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
if (leftValue === null) {
|
|
107
|
+
return 1;
|
|
108
|
+
}
|
|
109
|
+
if (rightValue === null) {
|
|
110
|
+
return -1;
|
|
111
|
+
}
|
|
112
|
+
if (typeof leftValue === "number" && typeof rightValue === "number") {
|
|
113
|
+
return leftValue - rightValue;
|
|
114
|
+
}
|
|
115
|
+
return String(leftValue).localeCompare(String(rightValue));
|
|
116
|
+
}
|
|
117
|
+
function buildGroupKey(groupBy, group) {
|
|
118
|
+
return groupBy.map((field) => `${field}:${JSON.stringify(group[field] ?? null)}`).join("|");
|
|
119
|
+
}
|
|
120
|
+
function compareAggregateRows(left, right, groupBy) {
|
|
121
|
+
for (const field of groupBy) {
|
|
122
|
+
const byField = compareNullableGroupValue(left.group[field], right.group[field]);
|
|
123
|
+
if (byField !== 0) {
|
|
124
|
+
return byField;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
async function runAggregate(options, global2) {
|
|
130
|
+
if (options.count === false) {
|
|
131
|
+
throw new PmCliError("Aggregate currently supports grouped counts only. Pass --count.", EXIT_CODE.USAGE);
|
|
132
|
+
}
|
|
133
|
+
const pmRoot = resolvePmRoot(process.cwd(), global2.path);
|
|
134
|
+
const settings = await readSettings(pmRoot);
|
|
135
|
+
const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
|
|
136
|
+
const groupBy = parseGroupBy(options.groupBy);
|
|
137
|
+
const status = parseStatus(options.status, statusRegistry);
|
|
138
|
+
const includeUnparented = options.includeUnparented === true;
|
|
139
|
+
const listed = await runList(status, {
|
|
140
|
+
type: options.type,
|
|
141
|
+
tag: options.tag,
|
|
142
|
+
priority: options.priority,
|
|
143
|
+
deadlineBefore: options.deadlineBefore,
|
|
144
|
+
deadlineAfter: options.deadlineAfter,
|
|
145
|
+
assignee: options.assignee,
|
|
146
|
+
assigneeFilter: options.assigneeFilter,
|
|
147
|
+
parent: options.parent,
|
|
148
|
+
sprint: options.sprint,
|
|
149
|
+
release: options.release
|
|
150
|
+
}, global2);
|
|
151
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
152
|
+
let skippedUnparented = 0;
|
|
153
|
+
let groupedItemCount = 0;
|
|
154
|
+
for (const listedItem of listed.items) {
|
|
155
|
+
const item = listedItem;
|
|
156
|
+
const group = {};
|
|
157
|
+
for (const field of groupBy) {
|
|
158
|
+
group[field] = resolveGroupValue(field, item);
|
|
159
|
+
}
|
|
160
|
+
if (groupBy.includes("parent") && group.parent === null && !includeUnparented) {
|
|
161
|
+
skippedUnparented += 1;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const key = buildGroupKey(groupBy, group);
|
|
165
|
+
const existing = grouped.get(key);
|
|
166
|
+
if (existing) {
|
|
167
|
+
existing.count += 1;
|
|
168
|
+
} else {
|
|
169
|
+
grouped.set(key, {
|
|
170
|
+
group,
|
|
171
|
+
count: 1
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
groupedItemCount += 1;
|
|
175
|
+
}
|
|
176
|
+
const groups = [...grouped.values()].sort((left, right) => compareAggregateRows(left, right, groupBy));
|
|
177
|
+
const warnings = listed.warnings && listed.warnings.length > 0 ? listed.warnings : void 0;
|
|
178
|
+
return {
|
|
179
|
+
groups,
|
|
180
|
+
count: groups.length,
|
|
181
|
+
totals: {
|
|
182
|
+
items_considered: listed.items.length,
|
|
183
|
+
items_grouped: groupedItemCount,
|
|
184
|
+
items_skipped_unparented: skippedUnparented
|
|
185
|
+
},
|
|
186
|
+
filters: {
|
|
187
|
+
group_by: groupBy,
|
|
188
|
+
count: true,
|
|
189
|
+
include_unparented: includeUnparented,
|
|
190
|
+
status: status ?? null,
|
|
191
|
+
type: options.type ?? null,
|
|
192
|
+
tag: options.tag ?? null,
|
|
193
|
+
priority: options.priority ?? null,
|
|
194
|
+
deadline_before: options.deadlineBefore ?? null,
|
|
195
|
+
deadline_after: options.deadlineAfter ?? null,
|
|
196
|
+
assignee: options.assignee ?? null,
|
|
197
|
+
assignee_filter: options.assigneeFilter ?? null,
|
|
198
|
+
parent: options.parent ?? null,
|
|
199
|
+
sprint: options.sprint ?? null,
|
|
200
|
+
release: options.release ?? null
|
|
201
|
+
},
|
|
202
|
+
now: nowIso(),
|
|
203
|
+
...warnings ? { warnings } : {}
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
export {
|
|
207
|
+
runAggregate
|
|
208
|
+
};
|
|
209
|
+
//# sourceMappingURL=aggregate-OOAGKWRG.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../cli/commands/aggregate.ts"],
|
|
4
|
+
"sourcesContent": ["import { 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 { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { resolveRuntimeStatusRegistry, type RuntimeStatusRegistry } from \"../../core/schema/runtime-schema.js\";\nimport { resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { type ItemStatus } from \"../../types/index.js\";\nimport { runList } from \"./list.js\";\n\ntype AggregateGroupField = \"parent\" | \"type\" | \"priority\" | \"status\" | \"assignee\" | \"tags\" | \"sprint\" | \"release\";\ntype AggregateGroupValue = string | number | null;\ntype AggregateGroupRecord = Partial<Record<AggregateGroupField, AggregateGroupValue>>;\ntype AggregateListedItem = {\n type: string;\n status: ItemStatus;\n priority: number;\n parent?: string;\n assignee?: string;\n tags: string[];\n sprint?: string;\n release?: string;\n};\n\nconst AGGREGATE_GROUP_FIELDS: AggregateGroupField[] = [\n \"parent\",\n \"type\",\n \"priority\",\n \"status\",\n \"assignee\",\n \"tags\",\n \"sprint\",\n \"release\",\n];\n\nexport interface AggregateOptions {\n groupBy?: string;\n count?: boolean;\n includeUnparented?: boolean;\n status?: string;\n type?: string;\n tag?: string;\n priority?: string;\n deadlineBefore?: string;\n deadlineAfter?: string;\n assignee?: string;\n assigneeFilter?: string;\n parent?: string;\n sprint?: string;\n release?: string;\n}\n\nexport interface AggregateRow {\n group: AggregateGroupRecord;\n count: number;\n}\n\nexport interface AggregateResult {\n groups: AggregateRow[];\n count: number;\n totals: {\n items_considered: number;\n items_grouped: number;\n items_skipped_unparented: number;\n };\n filters: {\n group_by: AggregateGroupField[];\n count: boolean;\n include_unparented: boolean;\n status: ItemStatus | null;\n type: string | null;\n tag: string | null;\n priority: string | null;\n deadline_before: string | null;\n deadline_after: string | null;\n assignee: string | null;\n assignee_filter: string | null;\n parent: string | null;\n sprint: string | null;\n release: string | null;\n };\n now: string;\n warnings?: string[];\n}\n\nfunction parseStatus(raw: string | undefined, statusRegistry: RuntimeStatusRegistry): ItemStatus | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = normalizeStatusInput(raw, statusRegistry);\n if (!normalized) {\n throw new PmCliError(\n `Status filter must be one of ${statusRegistry.definitions.map((definition) => definition.id).join(\"|\")}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n}\n\nfunction parseGroupBy(raw: string | undefined): AggregateGroupField[] {\n const value = raw?.trim() ?? \"status\";\n if (value.length === 0) {\n throw new PmCliError(\"--group-by requires at least one field name\", EXIT_CODE.USAGE);\n }\n const requested = splitCommaList(value);\n if (requested.length === 0) {\n throw new PmCliError(\"--group-by requires a comma-separated list of fields\", EXIT_CODE.USAGE);\n }\n for (const field of requested) {\n if (!AGGREGATE_GROUP_FIELDS.includes(field as AggregateGroupField)) {\n throw new PmCliError(\n `Aggregate group fields must be one of ${AGGREGATE_GROUP_FIELDS.join(\"|\")}; received \"${field}\"`,\n EXIT_CODE.USAGE,\n );\n }\n }\n return requested as AggregateGroupField[];\n}\n\nfunction normalizeTagGroupValue(tags: string[]): string | null {\n const normalized = [...new Set(tags.map((tag) => tag.trim().toLowerCase()).filter((tag) => tag.length > 0))].sort((left, right) =>\n left.localeCompare(right),\n );\n if (normalized.length === 0) {\n return null;\n }\n return normalized.join(\",\");\n}\n\nfunction resolveGroupValue(field: AggregateGroupField, item: AggregateListedItem): AggregateGroupValue {\n switch (field) {\n case \"parent\":\n return item.parent ?? null;\n case \"type\":\n return item.type;\n case \"priority\":\n return item.priority;\n case \"status\":\n return item.status;\n case \"assignee\":\n return item.assignee ?? null;\n case \"tags\":\n return normalizeTagGroupValue(item.tags);\n case \"sprint\":\n return item.sprint ?? null;\n case \"release\":\n return item.release ?? null;\n default:\n return null;\n }\n}\n\nfunction compareNullableGroupValue(left: AggregateGroupValue | undefined, right: AggregateGroupValue | undefined): number {\n const leftValue = left ?? null;\n const rightValue = right ?? null;\n if (leftValue === rightValue) {\n return 0;\n }\n if (leftValue === null) {\n return 1;\n }\n if (rightValue === null) {\n return -1;\n }\n if (typeof leftValue === \"number\" && typeof rightValue === \"number\") {\n return leftValue - rightValue;\n }\n return String(leftValue).localeCompare(String(rightValue));\n}\n\nfunction buildGroupKey(groupBy: AggregateGroupField[], group: AggregateGroupRecord): string {\n return groupBy.map((field) => `${field}:${JSON.stringify(group[field] ?? null)}`).join(\"|\");\n}\n\nfunction compareAggregateRows(\n left: AggregateRow,\n right: AggregateRow,\n groupBy: AggregateGroupField[],\n): number {\n for (const field of groupBy) {\n const byField = compareNullableGroupValue(left.group[field], right.group[field]);\n if (byField !== 0) {\n return byField;\n }\n }\n return 0;\n}\n\nexport async function runAggregate(options: AggregateOptions, global: GlobalOptions): Promise<AggregateResult> {\n if (options.count === false) {\n throw new PmCliError(\"Aggregate currently supports grouped counts only. Pass --count.\", EXIT_CODE.USAGE);\n }\n\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const groupBy = parseGroupBy(options.groupBy);\n const status = parseStatus(options.status, statusRegistry);\n const includeUnparented = options.includeUnparented === true;\n\n const listed = await runList(\n status,\n {\n type: options.type,\n tag: options.tag,\n priority: options.priority,\n deadlineBefore: options.deadlineBefore,\n deadlineAfter: options.deadlineAfter,\n assignee: options.assignee,\n assigneeFilter: options.assigneeFilter,\n parent: options.parent,\n sprint: options.sprint,\n release: options.release,\n },\n global,\n );\n\n const grouped = new Map<string, AggregateRow>();\n let skippedUnparented = 0;\n let groupedItemCount = 0;\n\n for (const listedItem of listed.items) {\n const item = listedItem as AggregateListedItem;\n const group: AggregateGroupRecord = {};\n for (const field of groupBy) {\n group[field] = resolveGroupValue(field, item);\n }\n if (groupBy.includes(\"parent\") && group.parent === null && !includeUnparented) {\n skippedUnparented += 1;\n continue;\n }\n const key = buildGroupKey(groupBy, group);\n const existing = grouped.get(key);\n if (existing) {\n existing.count += 1;\n } else {\n grouped.set(key, {\n group,\n count: 1,\n });\n }\n groupedItemCount += 1;\n }\n\n const groups = [...grouped.values()].sort((left, right) => compareAggregateRows(left, right, groupBy));\n const warnings = listed.warnings && listed.warnings.length > 0 ? listed.warnings : undefined;\n\n return {\n groups,\n count: groups.length,\n totals: {\n items_considered: listed.items.length,\n items_grouped: groupedItemCount,\n items_skipped_unparented: skippedUnparented,\n },\n filters: {\n group_by: groupBy,\n count: true,\n include_unparented: includeUnparented,\n status: status ?? null,\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n deadline_before: options.deadlineBefore ?? null,\n deadline_after: options.deadlineAfter ?? null,\n assignee: options.assignee ?? null,\n assignee_filter: options.assigneeFilter ?? null,\n parent: options.parent ?? null,\n sprint: options.sprint ?? null,\n release: options.release ?? null,\n },\n now: nowIso(),\n ...(warnings ? { warnings } : {}),\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["global"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveAuthor
|
|
3
|
+
} from "./chunk-O7IWB35H.js";
|
|
4
|
+
import {
|
|
5
|
+
createStdinTokenResolver
|
|
6
|
+
} from "./chunk-CJDQB2ED.js";
|
|
7
|
+
import {
|
|
8
|
+
mutateItem,
|
|
9
|
+
toItemRecord
|
|
10
|
+
} from "./chunk-XG7RJYHV.js";
|
|
11
|
+
import "./chunk-KA24HME7.js";
|
|
12
|
+
import "./chunk-HPH6X4ZZ.js";
|
|
13
|
+
import "./chunk-4PJQSECJ.js";
|
|
14
|
+
import "./chunk-RANZIID5.js";
|
|
15
|
+
import {
|
|
16
|
+
EXIT_CODE,
|
|
17
|
+
PmCliError,
|
|
18
|
+
getSettingsPath,
|
|
19
|
+
pathExists,
|
|
20
|
+
readSettings,
|
|
21
|
+
resolvePmRoot
|
|
22
|
+
} from "./chunk-SRVKTWPR.js";
|
|
23
|
+
|
|
24
|
+
// dist/cli/commands/append.js
|
|
25
|
+
!(function() {
|
|
26
|
+
try {
|
|
27
|
+
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
28
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "14238d29-d4c8-5988-afde-c4d3b52c450d");
|
|
29
|
+
} catch (e2) {
|
|
30
|
+
}
|
|
31
|
+
})();
|
|
32
|
+
async function runAppend(id, options, global2) {
|
|
33
|
+
if (options.body === void 0) {
|
|
34
|
+
throw new PmCliError("Missing required --body text", EXIT_CODE.USAGE);
|
|
35
|
+
}
|
|
36
|
+
const stdinResolver = createStdinTokenResolver();
|
|
37
|
+
const pmRoot = resolvePmRoot(process.cwd(), global2.path);
|
|
38
|
+
if (!await pathExists(getSettingsPath(pmRoot))) {
|
|
39
|
+
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
40
|
+
}
|
|
41
|
+
const settings = await readSettings(pmRoot);
|
|
42
|
+
const author = resolveAuthor(options.author, settings.author_default);
|
|
43
|
+
const bodyInput = await stdinResolver.resolveValue(options.body, "--body");
|
|
44
|
+
const appended = (bodyInput ?? "").trim();
|
|
45
|
+
const result = await mutateItem({
|
|
46
|
+
pmRoot,
|
|
47
|
+
settings,
|
|
48
|
+
id,
|
|
49
|
+
op: "append",
|
|
50
|
+
author,
|
|
51
|
+
message: options.message,
|
|
52
|
+
force: options.force,
|
|
53
|
+
mutate(document) {
|
|
54
|
+
if (appended.length === 0) {
|
|
55
|
+
return { changedFields: [] };
|
|
56
|
+
}
|
|
57
|
+
const spacer = document.body.trim().length > 0 ? "\n\n" : "";
|
|
58
|
+
document.body = `${document.body.replace(/\s+$/, "")}${spacer}${appended}
|
|
59
|
+
`;
|
|
60
|
+
return { changedFields: ["body"] };
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
item: toItemRecord(result.item),
|
|
65
|
+
appended: appended.length > 0 ? appended : "",
|
|
66
|
+
changed_fields: result.changedFields
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
runAppend
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=append-5JE3YGXU.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../cli/commands/append.ts"],
|
|
4
|
+
"sourcesContent": ["import { pathExists } from \"../../core/fs/fs-utils.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 { resolveAuthor } from \"../../core/shared/author.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport { createStdinTokenResolver } from \"../../core/item/parse.js\";\nimport { mutateItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\n\nexport interface AppendCommandOptions {\n body: string;\n author?: string;\n message?: string;\n force?: boolean;\n}\n\nexport interface AppendResult {\n item: Record<string, unknown>;\n appended: string;\n changed_fields: string[];\n}\n\n\nexport async function runAppend(id: string, options: AppendCommandOptions, global: GlobalOptions): Promise<AppendResult> {\n if (options.body === undefined) {\n throw new PmCliError(\"Missing required --body text\", EXIT_CODE.USAGE);\n }\n const stdinResolver = createStdinTokenResolver();\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const author = resolveAuthor(options.author, settings.author_default);\n const bodyInput = await stdinResolver.resolveValue(options.body, \"--body\");\n const appended = (bodyInput ?? \"\").trim();\n\n const result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: \"append\",\n author,\n message: options.message,\n force: options.force,\n mutate(document) {\n if (appended.length === 0) {\n return { changedFields: [] };\n }\n const spacer = document.body.trim().length > 0 ? \"\\n\\n\" : \"\";\n document.body = `${document.body.replace(/\\s+$/, \"\")}${spacer}${appended}\\n`;\n return { changedFields: [\"body\"] };\n },\n });\n\n return {\n item: toItemRecord(result.item),\n appended: appended.length > 0 ? appended : \"\",\n changed_fields: result.changedFields,\n };\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,eAAsB,UAAU,IAAY,SAA+BA,SAAqB;AAC9F,MAAI,QAAQ,SAAS,QAAW;AAC9B,UAAM,IAAI,WAAW,gCAAgC,UAAU,KAAK;EACtE;AACA,QAAM,gBAAgB,yBAAwB;AAC9C,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAIA,QAAO,IAAI;AACvD,MAAI,CAAE,MAAM,WAAW,gBAAgB,MAAM,CAAC,GAAI;AAChD,UAAM,IAAI,WAAW,iCAAiC,MAAM,wBAAwB,UAAU,SAAS;EACzG;AACA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,cAAc,QAAQ,QAAQ,SAAS,cAAc;AACpE,QAAM,YAAY,MAAM,cAAc,aAAa,QAAQ,MAAM,QAAQ;AACzE,QAAM,YAAY,aAAa,IAAI,KAAI;AAEvC,QAAM,SAAS,MAAM,WAAW;IAC9B;IACA;IACA;IACA,IAAI;IACJ;IACA,SAAS,QAAQ;IACjB,OAAO,QAAQ;IACf,OAAO,UAAQ;AACb,UAAI,SAAS,WAAW,GAAG;AACzB,eAAO,EAAE,eAAe,CAAA,EAAE;MAC5B;AACA,YAAM,SAAS,SAAS,KAAK,KAAI,EAAG,SAAS,IAAI,SAAS;AAC1D,eAAS,OAAO,GAAG,SAAS,KAAK,QAAQ,QAAQ,EAAE,CAAC,GAAG,MAAM,GAAG,QAAQ;;AACxE,aAAO,EAAE,eAAe,CAAC,MAAM,EAAC;IAClC;GACD;AAED,SAAO;IACL,MAAM,aAAa,OAAO,IAAI;IAC9B,UAAU,SAAS,SAAS,IAAI,WAAW;IAC3C,gBAAgB,OAAO;;AAE3B;",
|
|
6
|
+
"names": ["global"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d55ae411-c33e-5225-b6a5-d0d0b8006d7c")}catch(e){}}();
|
|
3
|
+
import {
|
|
4
|
+
resolveAuthor
|
|
5
|
+
} from "./chunk-J27KIHTG.js";
|
|
6
|
+
import {
|
|
7
|
+
createStdinTokenResolver
|
|
8
|
+
} from "./chunk-O5IBJE6S.js";
|
|
9
|
+
import {
|
|
10
|
+
mutateItem,
|
|
11
|
+
toItemRecord
|
|
12
|
+
} from "./chunk-CWT53EYT.js";
|
|
13
|
+
import "./chunk-SSFMJCPF.js";
|
|
14
|
+
import "./chunk-KBG47ZOY.js";
|
|
15
|
+
import "./chunk-SZQCER6S.js";
|
|
16
|
+
import "./chunk-NQP3ECKF.js";
|
|
17
|
+
import {
|
|
18
|
+
EXIT_CODE,
|
|
19
|
+
PmCliError,
|
|
20
|
+
getSettingsPath,
|
|
21
|
+
pathExists,
|
|
22
|
+
readSettings,
|
|
23
|
+
resolvePmRoot
|
|
24
|
+
} from "./chunk-4LTBNUYT.js";
|
|
25
|
+
|
|
26
|
+
// dist/cli/commands/append.js
|
|
27
|
+
async function runAppend(id, options, global) {
|
|
28
|
+
if (options.body === void 0) {
|
|
29
|
+
throw new PmCliError("Missing required --body text", EXIT_CODE.USAGE);
|
|
30
|
+
}
|
|
31
|
+
const stdinResolver = createStdinTokenResolver();
|
|
32
|
+
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
33
|
+
if (!await pathExists(getSettingsPath(pmRoot))) {
|
|
34
|
+
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
35
|
+
}
|
|
36
|
+
const settings = await readSettings(pmRoot);
|
|
37
|
+
const author = resolveAuthor(options.author, settings.author_default);
|
|
38
|
+
const bodyInput = await stdinResolver.resolveValue(options.body, "--body");
|
|
39
|
+
const appended = (bodyInput ?? "").trim();
|
|
40
|
+
const result = await mutateItem({
|
|
41
|
+
pmRoot,
|
|
42
|
+
settings,
|
|
43
|
+
id,
|
|
44
|
+
op: "append",
|
|
45
|
+
author,
|
|
46
|
+
message: options.message,
|
|
47
|
+
force: options.force,
|
|
48
|
+
mutate(document) {
|
|
49
|
+
if (appended.length === 0) {
|
|
50
|
+
return { changedFields: [] };
|
|
51
|
+
}
|
|
52
|
+
const spacer = document.body.trim().length > 0 ? "\n\n" : "";
|
|
53
|
+
document.body = `${document.body.replace(/\s+$/, "")}${spacer}${appended}
|
|
54
|
+
`;
|
|
55
|
+
return { changedFields: ["body"] };
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
item: toItemRecord(result.item),
|
|
60
|
+
appended: appended.length > 0 ? appended : "",
|
|
61
|
+
changed_fields: result.changedFields
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
runAppend
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=append-PNN6UIBZ.js.map
|
|
68
|
+
|
|
69
|
+
//# debugId=d55ae411-c33e-5225-b6a5-d0d0b8006d7c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../cli/commands/append.ts"],"sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.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 { resolveAuthor } from \"../../core/shared/author.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport { createStdinTokenResolver } from \"../../core/item/parse.js\";\nimport { mutateItem } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\n\nexport interface AppendCommandOptions {\n body: string;\n author?: string;\n message?: string;\n force?: boolean;\n}\n\nexport interface AppendResult {\n item: Record<string, unknown>;\n appended: string;\n changed_fields: string[];\n}\n\n\nexport async function runAppend(id: string, options: AppendCommandOptions, global: GlobalOptions): Promise<AppendResult> {\n if (options.body === undefined) {\n throw new PmCliError(\"Missing required --body text\", EXIT_CODE.USAGE);\n }\n const stdinResolver = createStdinTokenResolver();\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const author = resolveAuthor(options.author, settings.author_default);\n const bodyInput = await stdinResolver.resolveValue(options.body, \"--body\");\n const appended = (bodyInput ?? \"\").trim();\n\n const result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: \"append\",\n author,\n message: options.message,\n force: options.force,\n mutate(document) {\n if (appended.length === 0) {\n return { changedFields: [] };\n }\n const spacer = document.body.trim().length > 0 ? \"\\n\\n\" : \"\";\n document.body = `${document.body.replace(/\\s+$/, \"\")}${spacer}${appended}\\n`;\n return { changedFields: [\"body\"] };\n },\n });\n\n return {\n item: toItemRecord(result.item),\n appended: appended.length > 0 ? appended : \"\",\n changed_fields: result.changedFields,\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,eAAsB,UAAU,IAAY,SAA+B,QAAqB;AAC9F,MAAI,QAAQ,SAAS,QAAW;AAC9B,UAAM,IAAI,WAAW,gCAAgC,UAAU,KAAK;EACtE;AACA,QAAM,gBAAgB,yBAAwB;AAC9C,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,MAAI,CAAE,MAAM,WAAW,gBAAgB,MAAM,CAAC,GAAI;AAChD,UAAM,IAAI,WAAW,iCAAiC,MAAM,wBAAwB,UAAU,SAAS;EACzG;AACA,QAAM,WAAW,MAAM,aAAa,MAAM;AAC1C,QAAM,SAAS,cAAc,QAAQ,QAAQ,SAAS,cAAc;AACpE,QAAM,YAAY,MAAM,cAAc,aAAa,QAAQ,MAAM,QAAQ;AACzE,QAAM,YAAY,aAAa,IAAI,KAAI;AAEvC,QAAM,SAAS,MAAM,WAAW;IAC9B;IACA;IACA;IACA,IAAI;IACJ;IACA,SAAS,QAAQ;IACjB,OAAO,QAAQ;IACf,OAAO,UAAQ;AACb,UAAI,SAAS,WAAW,GAAG;AACzB,eAAO,EAAE,eAAe,CAAA,EAAE;MAC5B;AACA,YAAM,SAAS,SAAS,KAAK,KAAI,EAAG,SAAS,IAAI,SAAS;AAC1D,eAAS,OAAO,GAAG,SAAS,KAAK,QAAQ,QAAQ,EAAE,CAAC,GAAG,MAAM,GAAG,QAAQ;;AACxE,aAAO,EAAE,eAAe,CAAC,MAAM,EAAC;IAClC;GACD;AAED,SAAO;IACL,MAAM,aAAa,OAAO,IAAI;IAC9B,UAAU,SAAS,SAAS,IAAI,WAAW;IAC3C,gBAAgB,OAAO;;AAE3B","debugId":"d55ae411-c33e-5225-b6a5-d0d0b8006d7c"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9d7e4d46-ea22-536a-8a47-90006a264b88")}catch(e){}}();
|
|
3
|
+
import {
|
|
4
|
+
BUILTIN_ITEM_TYPE_VALUES
|
|
5
|
+
} from "./chunk-4LTBNUYT.js";
|
|
6
|
+
|
|
7
|
+
// dist/core/schema/item-types-file.js
|
|
8
|
+
var BUILTIN_NAME_LOOKUP = new Map(BUILTIN_ITEM_TYPE_VALUES.map((name) => [name.toLowerCase(), name]));
|
|
9
|
+
function matchBuiltinTypeName(name) {
|
|
10
|
+
return BUILTIN_NAME_LOOKUP.get(name.trim().toLowerCase());
|
|
11
|
+
}
|
|
12
|
+
function coerceAliasArray(value) {
|
|
13
|
+
return Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : [];
|
|
14
|
+
}
|
|
15
|
+
function escapeForDoubleQuotes(value) {
|
|
16
|
+
return value.replace(/[\\"`$]/g, (char) => `\\${char}`);
|
|
17
|
+
}
|
|
18
|
+
function dedupeAliases(values) {
|
|
19
|
+
const seen = /* @__PURE__ */ new Map();
|
|
20
|
+
for (const value of values) {
|
|
21
|
+
const trimmed = value.trim();
|
|
22
|
+
if (trimmed.length === 0) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const key = trimmed.toLowerCase();
|
|
26
|
+
if (!seen.has(key)) {
|
|
27
|
+
seen.set(key, trimmed);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return [...seen.values()].sort((left, right) => left.localeCompare(right));
|
|
31
|
+
}
|
|
32
|
+
function normalizeAddTypeInput(raw) {
|
|
33
|
+
const name = (raw.name ?? "").trim();
|
|
34
|
+
if (name.length === 0) {
|
|
35
|
+
throw new Error("Type name must not be empty.");
|
|
36
|
+
}
|
|
37
|
+
const builtinMatch = matchBuiltinTypeName(name);
|
|
38
|
+
if (builtinMatch) {
|
|
39
|
+
throw new Error(`Cannot redefine built-in item type "${builtinMatch}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);
|
|
40
|
+
}
|
|
41
|
+
const description = raw.description?.trim();
|
|
42
|
+
const defaultStatus = raw.defaultStatus?.trim();
|
|
43
|
+
const folder = raw.folder?.trim();
|
|
44
|
+
const aliases = dedupeAliases(raw.aliases ?? []);
|
|
45
|
+
for (const alias of aliases) {
|
|
46
|
+
const aliasBuiltin = matchBuiltinTypeName(alias);
|
|
47
|
+
if (aliasBuiltin) {
|
|
48
|
+
throw new Error(`Alias "${alias}" collides with built-in item type "${aliasBuiltin}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
name,
|
|
53
|
+
description: description && description.length > 0 ? description : void 0,
|
|
54
|
+
defaultStatus: defaultStatus && defaultStatus.length > 0 ? defaultStatus : void 0,
|
|
55
|
+
folder: folder && folder.length > 0 ? folder : void 0,
|
|
56
|
+
aliases
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function assertAliasesAvailable(input, existing) {
|
|
60
|
+
const selfLower = input.name.toLowerCase();
|
|
61
|
+
const taken = /* @__PURE__ */ new Map();
|
|
62
|
+
for (const definition of existing.definitions) {
|
|
63
|
+
if (typeof definition.name !== "string") {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const definitionName = definition.name.trim();
|
|
67
|
+
if (definitionName.length === 0 || definitionName.toLowerCase() === selfLower) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
taken.set(definitionName.toLowerCase(), definitionName);
|
|
71
|
+
for (const alias of coerceAliasArray(definition.aliases)) {
|
|
72
|
+
if (alias.trim().length > 0) {
|
|
73
|
+
taken.set(alias.trim().toLowerCase(), definitionName);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const nameOwner = taken.get(selfLower);
|
|
78
|
+
if (nameOwner) {
|
|
79
|
+
throw new Error(`Type name "${input.name}" collides with an alias of existing item type "${nameOwner}".`);
|
|
80
|
+
}
|
|
81
|
+
for (const alias of input.aliases) {
|
|
82
|
+
const owner = taken.get(alias.toLowerCase());
|
|
83
|
+
if (owner) {
|
|
84
|
+
throw new Error(`Alias "${alias}" already maps to existing item type "${owner}".`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function parseItemTypesFile(raw) {
|
|
89
|
+
if (raw === null || raw === void 0 || raw.trim().length === 0) {
|
|
90
|
+
return { definitions: [] };
|
|
91
|
+
}
|
|
92
|
+
let parsed;
|
|
93
|
+
try {
|
|
94
|
+
parsed = JSON.parse(raw);
|
|
95
|
+
} catch {
|
|
96
|
+
throw new Error("schema/types.json contains invalid JSON.");
|
|
97
|
+
}
|
|
98
|
+
return { definitions: extractDefinitions(parsed) };
|
|
99
|
+
}
|
|
100
|
+
function extractDefinitions(parsed) {
|
|
101
|
+
const candidate = selectDefinitionsArray(parsed);
|
|
102
|
+
if (!candidate) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
const definitions = [];
|
|
106
|
+
for (const entry of candidate) {
|
|
107
|
+
if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const record = entry;
|
|
111
|
+
if (typeof record.name !== "string" || record.name.trim().length === 0) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
definitions.push(record);
|
|
115
|
+
}
|
|
116
|
+
return definitions;
|
|
117
|
+
}
|
|
118
|
+
function selectDefinitionsArray(parsed) {
|
|
119
|
+
if (Array.isArray(parsed)) {
|
|
120
|
+
return parsed;
|
|
121
|
+
}
|
|
122
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
123
|
+
return void 0;
|
|
124
|
+
}
|
|
125
|
+
const record = parsed;
|
|
126
|
+
if (Array.isArray(record.definitions)) {
|
|
127
|
+
return record.definitions;
|
|
128
|
+
}
|
|
129
|
+
if (typeof record.item_types === "object" && record.item_types !== null) {
|
|
130
|
+
const nested = record.item_types;
|
|
131
|
+
if (Array.isArray(nested.definitions)) {
|
|
132
|
+
return nested.definitions;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return void 0;
|
|
136
|
+
}
|
|
137
|
+
function upsertItemType(file, input) {
|
|
138
|
+
const lowerName = input.name.toLowerCase();
|
|
139
|
+
const definitions = file.definitions.slice();
|
|
140
|
+
const existingIndex = definitions.findIndex((definition) => typeof definition.name === "string" && definition.name.trim().toLowerCase() === lowerName);
|
|
141
|
+
const existing = existingIndex >= 0 ? definitions[existingIndex] : void 0;
|
|
142
|
+
const mergedAliases = dedupeAliases([...coerceAliasArray(existing?.aliases), ...input.aliases]);
|
|
143
|
+
const next = {
|
|
144
|
+
...existing ?? {},
|
|
145
|
+
name: input.name
|
|
146
|
+
};
|
|
147
|
+
if (input.folder !== void 0) {
|
|
148
|
+
next.folder = input.folder;
|
|
149
|
+
}
|
|
150
|
+
if (mergedAliases.length > 0) {
|
|
151
|
+
next.aliases = mergedAliases;
|
|
152
|
+
} else if (next.aliases !== void 0) {
|
|
153
|
+
delete next.aliases;
|
|
154
|
+
}
|
|
155
|
+
applyAttribute(next, "description", input.description);
|
|
156
|
+
applyAttribute(next, "default_status", input.defaultStatus);
|
|
157
|
+
if (existingIndex >= 0) {
|
|
158
|
+
definitions[existingIndex] = next;
|
|
159
|
+
} else {
|
|
160
|
+
definitions.push(next);
|
|
161
|
+
}
|
|
162
|
+
definitions.sort((left, right) => left.name.localeCompare(right.name));
|
|
163
|
+
return {
|
|
164
|
+
file: { definitions },
|
|
165
|
+
definition: next,
|
|
166
|
+
replaced: existingIndex >= 0
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function removeItemType(file, name) {
|
|
170
|
+
const trimmed = (name ?? "").trim();
|
|
171
|
+
if (trimmed.length === 0) {
|
|
172
|
+
throw new Error("Type name must not be empty.");
|
|
173
|
+
}
|
|
174
|
+
const builtinMatch = matchBuiltinTypeName(trimmed);
|
|
175
|
+
if (builtinMatch) {
|
|
176
|
+
throw new Error(`Cannot remove built-in item type "${builtinMatch}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);
|
|
177
|
+
}
|
|
178
|
+
const lowerName = trimmed.toLowerCase();
|
|
179
|
+
const definitions = file.definitions.slice();
|
|
180
|
+
const existingIndex = definitions.findIndex((definition2) => typeof definition2.name === "string" && definition2.name.trim().toLowerCase() === lowerName);
|
|
181
|
+
if (existingIndex < 0) {
|
|
182
|
+
return { file: { definitions }, removed: false };
|
|
183
|
+
}
|
|
184
|
+
const [definition] = definitions.splice(existingIndex, 1);
|
|
185
|
+
return { file: { definitions }, removed: true, definition };
|
|
186
|
+
}
|
|
187
|
+
function applyAttribute(definition, key, value) {
|
|
188
|
+
const record = definition;
|
|
189
|
+
if (value !== void 0) {
|
|
190
|
+
record[key] = value;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function serializeItemTypesFile(file) {
|
|
194
|
+
return `${JSON.stringify({ definitions: file.definitions }, null, 2)}
|
|
195
|
+
`;
|
|
196
|
+
}
|
|
197
|
+
function buildInvalidTypeHint(name) {
|
|
198
|
+
const safeName = name.trim().length > 0 ? name.trim() : name;
|
|
199
|
+
return `To register a custom type, run: pm schema add-type "${escapeForDoubleQuotes(safeName)}" (writes .agents/pm/schema/types.json).`;
|
|
200
|
+
}
|
|
201
|
+
function buildInvalidTypeError(name, allowedTypes) {
|
|
202
|
+
return `Invalid type value "${name}". Allowed: ${allowedTypes.join(", ")}. ${buildInvalidTypeHint(name)}`;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export {
|
|
206
|
+
escapeForDoubleQuotes,
|
|
207
|
+
normalizeAddTypeInput,
|
|
208
|
+
assertAliasesAvailable,
|
|
209
|
+
parseItemTypesFile,
|
|
210
|
+
upsertItemType,
|
|
211
|
+
removeItemType,
|
|
212
|
+
serializeItemTypesFile,
|
|
213
|
+
buildInvalidTypeHint,
|
|
214
|
+
buildInvalidTypeError
|
|
215
|
+
};
|
|
216
|
+
//# sourceMappingURL=chunk-26KTVXJW.js.map
|
|
217
|
+
|
|
218
|
+
//# debugId=9d7e4d46-ea22-536a-8a47-90006a264b88
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../core/schema/item-types-file.ts"],"sourcesContent":["import { BUILTIN_ITEM_TYPE_VALUES } from \"../../types/index.js\";\nimport type { ItemTypeDefinition } from \"../../types/index.js\";\n\nexport type { ItemTypeDefinition } from \"../../types/index.js\";\n\n/**\n * Pure logic for the `pm schema add-type` command and the create/update\n * invalid-type discoverability hint. The CLI command file (schema.ts) handles\n * IO/governance; everything testable and side-effect-free lives here so it can\n * be coverage-gated to 100%.\n */\n\nconst BUILTIN_NAME_LOOKUP = new Map<string, string>(\n BUILTIN_ITEM_TYPE_VALUES.map((name) => [name.toLowerCase(), name]),\n);\n\n/**\n * The shape persisted at `.agents/pm/schema/types.json`.\n */\nexport interface ItemTypesFile {\n definitions: ItemTypeDefinition[];\n}\n\nexport interface NormalizedAddTypeInput {\n name: string;\n description?: string;\n defaultStatus?: string;\n folder?: string;\n aliases: string[];\n}\n\nexport interface RawAddTypeInput {\n name: string | undefined;\n description?: string;\n defaultStatus?: string;\n folder?: string;\n aliases?: string[];\n}\n\nexport interface UpsertItemTypeResult {\n file: ItemTypesFile;\n /** The definition as stored after the upsert (existing fields preserved). */\n definition: ItemTypeDefinition;\n /** True when an existing definition with the same (case-insensitive) name was replaced. */\n replaced: boolean;\n}\n\nexport interface RemoveItemTypeResult {\n file: ItemTypesFile;\n /** True when a matching definition existed and was dropped from the file. */\n removed: boolean;\n /** The removed definition, when one matched (case-insensitively) the requested name. */\n definition?: ItemTypeDefinition;\n}\n\n/**\n * Returns the canonical built-in name when `name` collides (case-insensitively)\n * with a reserved built-in item type, otherwise undefined.\n */\nexport function matchBuiltinTypeName(name: string): string | undefined {\n return BUILTIN_NAME_LOOKUP.get(name.trim().toLowerCase());\n}\n\n/**\n * Coerces a persisted `aliases` value into a string array, tolerating malformed\n * data (a non-array, or an array containing non-string entries) without throwing\n * or exploding a stray string into character aliases.\n */\nfunction coerceAliasArray(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n}\n\n/**\n * Escapes a value for safe interpolation inside a double-quoted shell string so\n * suggested copy-pasteable commands stay well-formed for names containing\n * `\"`, `` ` ``, `$`, or `\\`.\n */\nexport function escapeForDoubleQuotes(value: string): string {\n return value.replace(/[\\\\\"`$]/g, (char) => `\\\\${char}`);\n}\n\nfunction dedupeAliases(values: Iterable<string>): string[] {\n const seen = new Map<string, string>();\n for (const value of values) {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n continue;\n }\n const key = trimmed.toLowerCase();\n if (!seen.has(key)) {\n seen.set(key, trimmed);\n }\n }\n return [...seen.values()].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Validates and normalizes raw add-type CLI input. Throws a plain Error with a\n * stable message when the name is missing/empty or collides with a built-in;\n * the CLI layer maps these to PmCliError exit codes.\n */\nexport function normalizeAddTypeInput(raw: RawAddTypeInput): NormalizedAddTypeInput {\n const name = (raw.name ?? \"\").trim();\n if (name.length === 0) {\n throw new Error(\"Type name must not be empty.\");\n }\n const builtinMatch = matchBuiltinTypeName(name);\n if (builtinMatch) {\n throw new Error(\n `Cannot redefine built-in item type \"${builtinMatch}\". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(\", \")}.`,\n );\n }\n const description = raw.description?.trim();\n const defaultStatus = raw.defaultStatus?.trim();\n const folder = raw.folder?.trim();\n const aliases = dedupeAliases(raw.aliases ?? []);\n for (const alias of aliases) {\n const aliasBuiltin = matchBuiltinTypeName(alias);\n if (aliasBuiltin) {\n throw new Error(\n `Alias \"${alias}\" collides with built-in item type \"${aliasBuiltin}\". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(\", \")}.`,\n );\n }\n }\n return {\n name,\n description: description && description.length > 0 ? description : undefined,\n defaultStatus: defaultStatus && defaultStatus.length > 0 ? defaultStatus : undefined,\n folder: folder && folder.length > 0 ? folder : undefined,\n aliases,\n };\n}\n\n/**\n * Throws when the requested name or any alias collides (case-insensitively)\n * with the canonical name or an alias of a DIFFERENT existing definition.\n * Such collisions would make `pm create`/`pm update --type` resolve\n * ambiguously (the runtime registry keys a single lowercase alias map), so\n * they are rejected. Tokens belonging to the same-named definition being\n * upserted are ignored, keeping re-runs idempotent.\n */\nexport function assertAliasesAvailable(input: NormalizedAddTypeInput, existing: ItemTypesFile): void {\n const selfLower = input.name.toLowerCase();\n const taken = new Map<string, string>();\n for (const definition of existing.definitions) {\n if (typeof definition.name !== \"string\") {\n continue;\n }\n const definitionName = definition.name.trim();\n if (definitionName.length === 0 || definitionName.toLowerCase() === selfLower) {\n continue;\n }\n taken.set(definitionName.toLowerCase(), definitionName);\n for (const alias of coerceAliasArray(definition.aliases)) {\n if (alias.trim().length > 0) {\n taken.set(alias.trim().toLowerCase(), definitionName);\n }\n }\n }\n const nameOwner = taken.get(selfLower);\n if (nameOwner) {\n throw new Error(`Type name \"${input.name}\" collides with an alias of existing item type \"${nameOwner}\".`);\n }\n for (const alias of input.aliases) {\n const owner = taken.get(alias.toLowerCase());\n if (owner) {\n throw new Error(`Alias \"${alias}\" already maps to existing item type \"${owner}\".`);\n }\n }\n}\n\n/**\n * Coerces an arbitrary parsed value from types.json into an ItemTypesFile.\n * Accepts the canonical `{ definitions: [...] }` shape, a bare array of\n * definitions, or a nested `{ item_types: { definitions: [...] } }` form, and\n * tolerates a missing/invalid file by returning an empty definitions list.\n */\nexport function parseItemTypesFile(raw: string | null | undefined): ItemTypesFile {\n if (raw === null || raw === undefined || raw.trim().length === 0) {\n return { definitions: [] };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n throw new Error(\"schema/types.json contains invalid JSON.\");\n }\n return { definitions: extractDefinitions(parsed) };\n}\n\nfunction extractDefinitions(parsed: unknown): ItemTypeDefinition[] {\n const candidate = selectDefinitionsArray(parsed);\n if (!candidate) {\n return [];\n }\n const definitions: ItemTypeDefinition[] = [];\n for (const entry of candidate) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const record = entry as Record<string, unknown>;\n if (typeof record.name !== \"string\" || record.name.trim().length === 0) {\n continue;\n }\n definitions.push(record as unknown as ItemTypeDefinition);\n }\n return definitions;\n}\n\nfunction selectDefinitionsArray(parsed: unknown): unknown[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed;\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.definitions)) {\n return record.definitions;\n }\n if (typeof record.item_types === \"object\" && record.item_types !== null) {\n const nested = record.item_types as Record<string, unknown>;\n if (Array.isArray(nested.definitions)) {\n return nested.definitions;\n }\n }\n return undefined;\n}\n\n/**\n * Idempotent UPSERT of a custom item type into the parsed file. Matching is\n * case-insensitive by name. When a definition already exists, fields supplied\n * in `input` override the previous values; aliases are merged (deduped); other\n * fields not addressed by add-type flags are preserved untouched.\n */\nexport function upsertItemType(file: ItemTypesFile, input: NormalizedAddTypeInput): UpsertItemTypeResult {\n const lowerName = input.name.toLowerCase();\n const definitions = file.definitions.slice();\n const existingIndex = definitions.findIndex(\n (definition) => typeof definition.name === \"string\" && definition.name.trim().toLowerCase() === lowerName,\n );\n const existing = existingIndex >= 0 ? definitions[existingIndex] : undefined;\n\n const mergedAliases = dedupeAliases([...coerceAliasArray(existing?.aliases), ...input.aliases]);\n\n const next: ItemTypeDefinition = {\n ...(existing ?? {}),\n name: input.name,\n };\n if (input.folder !== undefined) {\n next.folder = input.folder;\n }\n if (mergedAliases.length > 0) {\n next.aliases = mergedAliases;\n } else if (next.aliases !== undefined) {\n delete next.aliases;\n }\n applyAttribute(next, \"description\", input.description);\n applyAttribute(next, \"default_status\", input.defaultStatus);\n\n if (existingIndex >= 0) {\n definitions[existingIndex] = next;\n } else {\n definitions.push(next);\n }\n definitions.sort((left, right) => left.name.localeCompare(right.name));\n\n return {\n file: { definitions },\n definition: next,\n replaced: existingIndex >= 0,\n };\n}\n\n/**\n * Removes a custom item type definition from the parsed file by name\n * (case-insensitive). Throws a plain Error when `name` is empty or collides\n * with a reserved built-in type (built-ins are not stored in the file and must\n * never be deletable). Returns `removed: false` when no matching custom\n * definition exists so the CLI layer can treat the call as an idempotent no-op.\n */\nexport function removeItemType(file: ItemTypesFile, name: string | undefined): RemoveItemTypeResult {\n const trimmed = (name ?? \"\").trim();\n if (trimmed.length === 0) {\n throw new Error(\"Type name must not be empty.\");\n }\n const builtinMatch = matchBuiltinTypeName(trimmed);\n if (builtinMatch) {\n throw new Error(\n `Cannot remove built-in item type \"${builtinMatch}\". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(\", \")}.`,\n );\n }\n const lowerName = trimmed.toLowerCase();\n const definitions = file.definitions.slice();\n const existingIndex = definitions.findIndex(\n (definition) => typeof definition.name === \"string\" && definition.name.trim().toLowerCase() === lowerName,\n );\n if (existingIndex < 0) {\n return { file: { definitions }, removed: false };\n }\n const [definition] = definitions.splice(existingIndex, 1);\n return { file: { definitions }, removed: true, definition };\n}\n\nfunction applyAttribute(definition: ItemTypeDefinition, key: string, value: string | undefined): void {\n const record = definition as unknown as Record<string, unknown>;\n if (value !== undefined) {\n record[key] = value;\n }\n}\n\n/**\n * Serializes the item types file with a trailing newline (matches the rest of\n * the schema scaffold files written by pm).\n */\nexport function serializeItemTypesFile(file: ItemTypesFile): string {\n return `${JSON.stringify({ definitions: file.definitions }, null, 2)}\\n`;\n}\n\n/**\n * Appends a discoverable hint to the \"Invalid type\" error so agents learn that\n * custom types exist and how to register one. Quotes are chosen so the printed\n * line is copy-pasteable as a shell command.\n */\nexport function buildInvalidTypeHint(name: string): string {\n const safeName = name.trim().length > 0 ? name.trim() : name;\n return `To register a custom type, run: pm schema add-type \"${escapeForDoubleQuotes(safeName)}\" (writes .agents/pm/schema/types.json).`;\n}\n\n/**\n * Builds the full invalid-type error message used by create/update: the\n * existing \"Invalid type ... Allowed: ...\" line plus the discoverable hint.\n */\nexport function buildInvalidTypeError(name: string, allowedTypes: readonly string[]): string {\n return `Invalid type value \"${name}\". Allowed: ${allowedTypes.join(\", \")}. ${buildInvalidTypeHint(name)}`;\n}\n"],"names":["definition"],"mappings":"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","debugId":"9d7e4d46-ea22-536a-8a47-90006a264b88"}
|