@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,221 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BUILTIN_ITEM_TYPE_VALUES
|
|
3
|
+
} from "./chunk-SRVKTWPR.js";
|
|
4
|
+
|
|
5
|
+
// dist/core/schema/item-types-file.js
|
|
6
|
+
!(function() {
|
|
7
|
+
try {
|
|
8
|
+
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
9
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "77a0faf1-6f19-5f27-9123-f589cf398634");
|
|
10
|
+
} catch (e2) {
|
|
11
|
+
}
|
|
12
|
+
})();
|
|
13
|
+
var BUILTIN_NAME_LOOKUP = new Map(BUILTIN_ITEM_TYPE_VALUES.map((name) => [name.toLowerCase(), name]));
|
|
14
|
+
function matchBuiltinTypeName(name) {
|
|
15
|
+
return BUILTIN_NAME_LOOKUP.get(name.trim().toLowerCase());
|
|
16
|
+
}
|
|
17
|
+
function coerceAliasArray(value) {
|
|
18
|
+
return Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : [];
|
|
19
|
+
}
|
|
20
|
+
function escapeForDoubleQuotes(value) {
|
|
21
|
+
return value.replace(/[\\"`$]/g, (char) => `\\${char}`);
|
|
22
|
+
}
|
|
23
|
+
function dedupeAliases(values) {
|
|
24
|
+
const seen = /* @__PURE__ */ new Map();
|
|
25
|
+
for (const value of values) {
|
|
26
|
+
const trimmed = value.trim();
|
|
27
|
+
if (trimmed.length === 0) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const key = trimmed.toLowerCase();
|
|
31
|
+
if (!seen.has(key)) {
|
|
32
|
+
seen.set(key, trimmed);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return [...seen.values()].sort((left, right) => left.localeCompare(right));
|
|
36
|
+
}
|
|
37
|
+
function normalizeAddTypeInput(raw) {
|
|
38
|
+
const name = (raw.name ?? "").trim();
|
|
39
|
+
if (name.length === 0) {
|
|
40
|
+
throw new Error("Type name must not be empty.");
|
|
41
|
+
}
|
|
42
|
+
const builtinMatch = matchBuiltinTypeName(name);
|
|
43
|
+
if (builtinMatch) {
|
|
44
|
+
throw new Error(`Cannot redefine built-in item type "${builtinMatch}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);
|
|
45
|
+
}
|
|
46
|
+
const description = raw.description?.trim();
|
|
47
|
+
const defaultStatus = raw.defaultStatus?.trim();
|
|
48
|
+
const folder = raw.folder?.trim();
|
|
49
|
+
const aliases = dedupeAliases(raw.aliases ?? []);
|
|
50
|
+
for (const alias of aliases) {
|
|
51
|
+
const aliasBuiltin = matchBuiltinTypeName(alias);
|
|
52
|
+
if (aliasBuiltin) {
|
|
53
|
+
throw new Error(`Alias "${alias}" collides with built-in item type "${aliasBuiltin}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
name,
|
|
58
|
+
description: description && description.length > 0 ? description : void 0,
|
|
59
|
+
defaultStatus: defaultStatus && defaultStatus.length > 0 ? defaultStatus : void 0,
|
|
60
|
+
folder: folder && folder.length > 0 ? folder : void 0,
|
|
61
|
+
aliases
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function assertAliasesAvailable(input, existing) {
|
|
65
|
+
const selfLower = input.name.toLowerCase();
|
|
66
|
+
const taken = /* @__PURE__ */ new Map();
|
|
67
|
+
for (const definition of existing.definitions) {
|
|
68
|
+
if (typeof definition.name !== "string") {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const definitionName = definition.name.trim();
|
|
72
|
+
if (definitionName.length === 0 || definitionName.toLowerCase() === selfLower) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
taken.set(definitionName.toLowerCase(), definitionName);
|
|
76
|
+
for (const alias of coerceAliasArray(definition.aliases)) {
|
|
77
|
+
if (alias.trim().length > 0) {
|
|
78
|
+
taken.set(alias.trim().toLowerCase(), definitionName);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const nameOwner = taken.get(selfLower);
|
|
83
|
+
if (nameOwner) {
|
|
84
|
+
throw new Error(`Type name "${input.name}" collides with an alias of existing item type "${nameOwner}".`);
|
|
85
|
+
}
|
|
86
|
+
for (const alias of input.aliases) {
|
|
87
|
+
const owner = taken.get(alias.toLowerCase());
|
|
88
|
+
if (owner) {
|
|
89
|
+
throw new Error(`Alias "${alias}" already maps to existing item type "${owner}".`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function parseItemTypesFile(raw) {
|
|
94
|
+
if (raw === null || raw === void 0 || raw.trim().length === 0) {
|
|
95
|
+
return { definitions: [] };
|
|
96
|
+
}
|
|
97
|
+
let parsed;
|
|
98
|
+
try {
|
|
99
|
+
parsed = JSON.parse(raw);
|
|
100
|
+
} catch {
|
|
101
|
+
throw new Error("schema/types.json contains invalid JSON.");
|
|
102
|
+
}
|
|
103
|
+
return { definitions: extractDefinitions(parsed) };
|
|
104
|
+
}
|
|
105
|
+
function extractDefinitions(parsed) {
|
|
106
|
+
const candidate = selectDefinitionsArray(parsed);
|
|
107
|
+
if (!candidate) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
const definitions = [];
|
|
111
|
+
for (const entry of candidate) {
|
|
112
|
+
if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const record = entry;
|
|
116
|
+
if (typeof record.name !== "string" || record.name.trim().length === 0) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
definitions.push(record);
|
|
120
|
+
}
|
|
121
|
+
return definitions;
|
|
122
|
+
}
|
|
123
|
+
function selectDefinitionsArray(parsed) {
|
|
124
|
+
if (Array.isArray(parsed)) {
|
|
125
|
+
return parsed;
|
|
126
|
+
}
|
|
127
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
128
|
+
return void 0;
|
|
129
|
+
}
|
|
130
|
+
const record = parsed;
|
|
131
|
+
if (Array.isArray(record.definitions)) {
|
|
132
|
+
return record.definitions;
|
|
133
|
+
}
|
|
134
|
+
if (typeof record.item_types === "object" && record.item_types !== null) {
|
|
135
|
+
const nested = record.item_types;
|
|
136
|
+
if (Array.isArray(nested.definitions)) {
|
|
137
|
+
return nested.definitions;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return void 0;
|
|
141
|
+
}
|
|
142
|
+
function upsertItemType(file, input) {
|
|
143
|
+
const lowerName = input.name.toLowerCase();
|
|
144
|
+
const definitions = file.definitions.slice();
|
|
145
|
+
const existingIndex = definitions.findIndex((definition) => typeof definition.name === "string" && definition.name.trim().toLowerCase() === lowerName);
|
|
146
|
+
const existing = existingIndex >= 0 ? definitions[existingIndex] : void 0;
|
|
147
|
+
const mergedAliases = dedupeAliases([...coerceAliasArray(existing?.aliases), ...input.aliases]);
|
|
148
|
+
const next = {
|
|
149
|
+
...existing ?? {},
|
|
150
|
+
name: input.name
|
|
151
|
+
};
|
|
152
|
+
if (input.folder !== void 0) {
|
|
153
|
+
next.folder = input.folder;
|
|
154
|
+
}
|
|
155
|
+
if (mergedAliases.length > 0) {
|
|
156
|
+
next.aliases = mergedAliases;
|
|
157
|
+
} else if (next.aliases !== void 0) {
|
|
158
|
+
delete next.aliases;
|
|
159
|
+
}
|
|
160
|
+
applyAttribute(next, "description", input.description);
|
|
161
|
+
applyAttribute(next, "default_status", input.defaultStatus);
|
|
162
|
+
if (existingIndex >= 0) {
|
|
163
|
+
definitions[existingIndex] = next;
|
|
164
|
+
} else {
|
|
165
|
+
definitions.push(next);
|
|
166
|
+
}
|
|
167
|
+
definitions.sort((left, right) => left.name.localeCompare(right.name));
|
|
168
|
+
return {
|
|
169
|
+
file: { definitions },
|
|
170
|
+
definition: next,
|
|
171
|
+
replaced: existingIndex >= 0
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function removeItemType(file, name) {
|
|
175
|
+
const trimmed = (name ?? "").trim();
|
|
176
|
+
if (trimmed.length === 0) {
|
|
177
|
+
throw new Error("Type name must not be empty.");
|
|
178
|
+
}
|
|
179
|
+
const builtinMatch = matchBuiltinTypeName(trimmed);
|
|
180
|
+
if (builtinMatch) {
|
|
181
|
+
throw new Error(`Cannot remove built-in item type "${builtinMatch}". Built-in types are reserved: ${BUILTIN_ITEM_TYPE_VALUES.join(", ")}.`);
|
|
182
|
+
}
|
|
183
|
+
const lowerName = trimmed.toLowerCase();
|
|
184
|
+
const definitions = file.definitions.slice();
|
|
185
|
+
const existingIndex = definitions.findIndex((definition2) => typeof definition2.name === "string" && definition2.name.trim().toLowerCase() === lowerName);
|
|
186
|
+
if (existingIndex < 0) {
|
|
187
|
+
return { file: { definitions }, removed: false };
|
|
188
|
+
}
|
|
189
|
+
const [definition] = definitions.splice(existingIndex, 1);
|
|
190
|
+
return { file: { definitions }, removed: true, definition };
|
|
191
|
+
}
|
|
192
|
+
function applyAttribute(definition, key, value) {
|
|
193
|
+
const record = definition;
|
|
194
|
+
if (value !== void 0) {
|
|
195
|
+
record[key] = value;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function serializeItemTypesFile(file) {
|
|
199
|
+
return `${JSON.stringify({ definitions: file.definitions }, null, 2)}
|
|
200
|
+
`;
|
|
201
|
+
}
|
|
202
|
+
function buildInvalidTypeHint(name) {
|
|
203
|
+
const safeName = name.trim().length > 0 ? name.trim() : name;
|
|
204
|
+
return `To register a custom type, run: pm schema add-type "${escapeForDoubleQuotes(safeName)}" (writes .agents/pm/schema/types.json).`;
|
|
205
|
+
}
|
|
206
|
+
function buildInvalidTypeError(name, allowedTypes) {
|
|
207
|
+
return `Invalid type value "${name}". Allowed: ${allowedTypes.join(", ")}. ${buildInvalidTypeHint(name)}`;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export {
|
|
211
|
+
escapeForDoubleQuotes,
|
|
212
|
+
normalizeAddTypeInput,
|
|
213
|
+
assertAliasesAvailable,
|
|
214
|
+
parseItemTypesFile,
|
|
215
|
+
upsertItemType,
|
|
216
|
+
removeItemType,
|
|
217
|
+
serializeItemTypesFile,
|
|
218
|
+
buildInvalidTypeHint,
|
|
219
|
+
buildInvalidTypeError
|
|
220
|
+
};
|
|
221
|
+
//# sourceMappingURL=chunk-KK6YPGH3.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../core/schema/item-types-file.ts"],
|
|
4
|
+
"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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["definition"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveAuthor
|
|
3
|
+
} from "./chunk-O7IWB35H.js";
|
|
4
|
+
import {
|
|
5
|
+
parseCsvKv
|
|
6
|
+
} from "./chunk-CJDQB2ED.js";
|
|
7
|
+
import {
|
|
8
|
+
parseLimit
|
|
9
|
+
} from "./chunk-K47WAYQV.js";
|
|
10
|
+
import {
|
|
11
|
+
locateItem,
|
|
12
|
+
mutateItem,
|
|
13
|
+
readLocatedItem
|
|
14
|
+
} from "./chunk-XG7RJYHV.js";
|
|
15
|
+
import {
|
|
16
|
+
resolveItemTypeRegistry
|
|
17
|
+
} from "./chunk-4PJQSECJ.js";
|
|
18
|
+
import {
|
|
19
|
+
nowIso
|
|
20
|
+
} from "./chunk-RANZIID5.js";
|
|
21
|
+
import {
|
|
22
|
+
EXIT_CODE,
|
|
23
|
+
PmCliError,
|
|
24
|
+
getActiveExtensionRegistrations,
|
|
25
|
+
getSettingsPath,
|
|
26
|
+
pathExists,
|
|
27
|
+
readSettings,
|
|
28
|
+
resolvePmRoot
|
|
29
|
+
} from "./chunk-SRVKTWPR.js";
|
|
30
|
+
|
|
31
|
+
// dist/cli/commands/annotation-command.js
|
|
32
|
+
!(function() {
|
|
33
|
+
try {
|
|
34
|
+
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
35
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "caaa2ed3-8a3b-566d-aa92-cfc6540d26c1");
|
|
36
|
+
} catch (e2) {
|
|
37
|
+
}
|
|
38
|
+
})();
|
|
39
|
+
function limitAnnotationEntries(values, limit) {
|
|
40
|
+
if (limit === void 0)
|
|
41
|
+
return values;
|
|
42
|
+
if (limit === 0)
|
|
43
|
+
return [];
|
|
44
|
+
return values.slice(Math.max(0, values.length - limit));
|
|
45
|
+
}
|
|
46
|
+
function readAnnotationEntries(source, collectionKey) {
|
|
47
|
+
const value = source[collectionKey];
|
|
48
|
+
return Array.isArray(value) ? value : [];
|
|
49
|
+
}
|
|
50
|
+
function parseAnnotationTextInput(raw, options = {}) {
|
|
51
|
+
const trimmed = raw.trim();
|
|
52
|
+
if (!trimmed) {
|
|
53
|
+
return "";
|
|
54
|
+
}
|
|
55
|
+
const textPrefixMatch = /^(?:[-*+]\s*)?text\s*[:=]/i.exec(trimmed);
|
|
56
|
+
if (options.stripPlainTextPrefix === true && textPrefixMatch && !trimmed.startsWith("```")) {
|
|
57
|
+
const text = trimmed.slice(textPrefixMatch[0].length).trim();
|
|
58
|
+
return text || trimmed;
|
|
59
|
+
}
|
|
60
|
+
const looksStructured = /^(?:[-*+]\s*)?text\s*[:=]/im.test(trimmed) || trimmed.startsWith("```");
|
|
61
|
+
if (!looksStructured) {
|
|
62
|
+
return trimmed;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const kv = parseCsvKv(trimmed, "--add");
|
|
66
|
+
const keys = Object.keys(kv).map((key) => key.trim().toLowerCase());
|
|
67
|
+
if (keys.some((key) => key !== "text")) {
|
|
68
|
+
return trimmed;
|
|
69
|
+
}
|
|
70
|
+
const text = kv.text?.trim();
|
|
71
|
+
return text || trimmed;
|
|
72
|
+
} catch {
|
|
73
|
+
return trimmed;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function wrapOwnershipConflict(error, guidance) {
|
|
77
|
+
if (error instanceof PmCliError && error.exitCode === EXIT_CODE.CONFLICT && error.message.includes("is assigned to") && error.message.includes("Use --force to override")) {
|
|
78
|
+
throw new PmCliError(error.message, error.exitCode, {
|
|
79
|
+
code: "ownership_conflict",
|
|
80
|
+
required: guidance.required,
|
|
81
|
+
examples: guidance.examples,
|
|
82
|
+
nextSteps: guidance.nextSteps
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
async function runAnnotationCommand(id, options, global2, config) {
|
|
88
|
+
const pmRoot = resolvePmRoot(process.cwd(), global2.path);
|
|
89
|
+
if (!await pathExists(getSettingsPath(pmRoot))) {
|
|
90
|
+
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
91
|
+
}
|
|
92
|
+
const settings = await readSettings(pmRoot);
|
|
93
|
+
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
94
|
+
const limit = parseLimit(options.limit);
|
|
95
|
+
if (config.input.mode === "list") {
|
|
96
|
+
const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
97
|
+
if (!located) {
|
|
98
|
+
throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
|
|
99
|
+
}
|
|
100
|
+
const loaded = await readLocatedItem(located, { schema: settings.schema });
|
|
101
|
+
const allEntries2 = readAnnotationEntries(loaded.document.metadata, config.collectionKey);
|
|
102
|
+
return renderAnnotationResult(located.id, config.collectionKey, allEntries2, limit, options.includeMeta === true);
|
|
103
|
+
}
|
|
104
|
+
const author = resolveAuthor(options.author, settings.author_default);
|
|
105
|
+
const text = config.parseText(config.input.value ?? "");
|
|
106
|
+
if (!text.trim()) {
|
|
107
|
+
throw new PmCliError(`${config.input.emptyFlag ?? "--add"} text cannot be empty`, EXIT_CODE.USAGE);
|
|
108
|
+
}
|
|
109
|
+
let result;
|
|
110
|
+
try {
|
|
111
|
+
result = await mutateItem({
|
|
112
|
+
pmRoot,
|
|
113
|
+
settings,
|
|
114
|
+
id,
|
|
115
|
+
op: config.op,
|
|
116
|
+
author,
|
|
117
|
+
message: options.message,
|
|
118
|
+
force: options.force,
|
|
119
|
+
bypassAssigneeConflict: config.allowAuditBypass,
|
|
120
|
+
mutate(document) {
|
|
121
|
+
const entries = readAnnotationEntries(document.metadata, config.collectionKey);
|
|
122
|
+
entries.push({
|
|
123
|
+
created_at: nowIso(),
|
|
124
|
+
author,
|
|
125
|
+
text
|
|
126
|
+
});
|
|
127
|
+
document.metadata[config.collectionKey] = entries;
|
|
128
|
+
return { changedFields: [config.collectionKey] };
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
} catch (error) {
|
|
132
|
+
wrapOwnershipConflict(error, config.conflictGuidance);
|
|
133
|
+
}
|
|
134
|
+
const allEntries = readAnnotationEntries(result.item, config.collectionKey);
|
|
135
|
+
return renderAnnotationResult(result.item.id, config.collectionKey, allEntries, limit, options.includeMeta === true);
|
|
136
|
+
}
|
|
137
|
+
function renderAnnotationResult(id, collectionKey, allEntries, limit, includeMeta) {
|
|
138
|
+
const entries = limitAnnotationEntries(allEntries, limit);
|
|
139
|
+
return {
|
|
140
|
+
id,
|
|
141
|
+
[collectionKey]: entries,
|
|
142
|
+
count: entries.length,
|
|
143
|
+
...includeMeta ? {
|
|
144
|
+
total_count: allEntries.length,
|
|
145
|
+
returned_count: entries.length,
|
|
146
|
+
has_more: entries.length < allEntries.length,
|
|
147
|
+
...limit !== void 0 ? { limit } : {}
|
|
148
|
+
} : {}
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export {
|
|
153
|
+
parseAnnotationTextInput,
|
|
154
|
+
wrapOwnershipConflict,
|
|
155
|
+
runAnnotationCommand
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=chunk-LDJK7SHN.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../cli/commands/annotation-command.ts"],
|
|
4
|
+
"sourcesContent": ["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseCsvKv } from \"../../core/item/parse.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 { nowIso } from \"../../core/shared/time.js\";\nimport { resolveAuthor } from \"../../core/shared/author.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 { parseLimit } from \"../shared-parsers.js\";\n\ninterface AnnotationEntry {\n created_at: string;\n author: string;\n text: string;\n}\n\ninterface AnnotationCommandOptions {\n limit?: string;\n author?: string;\n message?: string;\n force?: boolean;\n includeMeta?: boolean;\n}\n\ninterface AnnotationInput {\n mode: \"list\" | \"add\" | \"stdin\" | \"file\";\n value?: string;\n emptyFlag?: string;\n}\n\ninterface OwnershipConflictGuidance {\n required: string;\n examples: string[];\n nextSteps: string[];\n}\n\ninterface AnnotationCommandConfig<TKey extends string> {\n input: AnnotationInput;\n collectionKey: TKey;\n op: Parameters<typeof mutateItem>[0][\"op\"];\n parseText: (raw: string) => string;\n allowAuditBypass: boolean;\n conflictGuidance: OwnershipConflictGuidance;\n}\n\ntype AnnotationCommandResult<TKey extends string, TEntry extends AnnotationEntry> = {\n id: string;\n count: number;\n} & Record<TKey, TEntry[]> & {\n total_count?: number;\n returned_count?: number;\n has_more?: boolean;\n limit?: number;\n };\n\nexport function limitAnnotationEntries<TEntry>(values: TEntry[], limit: number | undefined): TEntry[] {\n if (limit === undefined) return values;\n if (limit === 0) return [];\n return values.slice(Math.max(0, values.length - limit));\n}\n\nexport function readAnnotationEntries<TEntry>(source: Record<string, unknown>, collectionKey: string): TEntry[] {\n const value = source[collectionKey];\n return Array.isArray(value) ? (value as TEntry[]) : [];\n}\n\nexport function parseAnnotationTextInput(raw: string, options: { stripPlainTextPrefix?: boolean } = {}): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return \"\";\n }\n const textPrefixMatch = /^(?:[-*+]\\s*)?text\\s*[:=]/i.exec(trimmed);\n if (options.stripPlainTextPrefix === true && textPrefixMatch && !trimmed.startsWith(\"```\")) {\n const text = trimmed.slice(textPrefixMatch[0].length).trim();\n return text || trimmed;\n }\n const looksStructured = /^(?:[-*+]\\s*)?text\\s*[:=]/im.test(trimmed) || trimmed.startsWith(\"```\");\n if (!looksStructured) {\n return trimmed;\n }\n try {\n const kv = parseCsvKv(trimmed, \"--add\");\n const keys = Object.keys(kv).map((key) => key.trim().toLowerCase());\n if (keys.some((key) => key !== \"text\")) {\n return trimmed;\n }\n const text = kv.text?.trim();\n return text || trimmed;\n } catch {\n return trimmed;\n }\n}\n\nexport function wrapOwnershipConflict(error: unknown, guidance: OwnershipConflictGuidance): never {\n if (\n error instanceof PmCliError &&\n error.exitCode === EXIT_CODE.CONFLICT &&\n error.message.includes(\"is assigned to\") &&\n error.message.includes(\"Use --force to override\")\n ) {\n throw new PmCliError(error.message, error.exitCode, {\n code: \"ownership_conflict\",\n required: guidance.required,\n examples: guidance.examples,\n nextSteps: guidance.nextSteps,\n });\n }\n throw error;\n}\n\nexport async function runAnnotationCommand<TKey extends string, TEntry extends AnnotationEntry>(\n id: string,\n options: AnnotationCommandOptions,\n global: GlobalOptions,\n config: AnnotationCommandConfig<TKey>,\n): Promise<AnnotationCommandResult<TKey, TEntry>> {\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 typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const limit = parseLimit(options.limit);\n\n if (config.input.mode === \"list\") {\n const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);\n if (!located) {\n throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: settings.schema });\n const allEntries = readAnnotationEntries<TEntry>(loaded.document.metadata, config.collectionKey);\n return renderAnnotationResult(located.id, config.collectionKey, allEntries, limit, options.includeMeta === true);\n }\n\n const author = resolveAuthor(options.author, settings.author_default);\n const text = config.parseText(config.input.value ?? \"\");\n if (!text.trim()) {\n throw new PmCliError(`${config.input.emptyFlag ?? \"--add\"} text cannot be empty`, EXIT_CODE.USAGE);\n }\n\n let result: Awaited<ReturnType<typeof mutateItem>>;\n try {\n result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: config.op,\n author,\n message: options.message,\n force: options.force,\n bypassAssigneeConflict: config.allowAuditBypass,\n mutate(document) {\n const entries = readAnnotationEntries<TEntry>(document.metadata, config.collectionKey);\n entries.push({\n created_at: nowIso(),\n author,\n text,\n } as TEntry);\n document.metadata[config.collectionKey] = entries as never;\n return { changedFields: [config.collectionKey] };\n },\n });\n } catch (error: unknown) {\n wrapOwnershipConflict(error, config.conflictGuidance);\n }\n\n const allEntries = readAnnotationEntries<TEntry>(result.item, config.collectionKey);\n return renderAnnotationResult(result.item.id, config.collectionKey, allEntries, limit, options.includeMeta === true);\n}\n\nfunction renderAnnotationResult<TKey extends string, TEntry extends AnnotationEntry>(\n id: string,\n collectionKey: TKey,\n allEntries: TEntry[],\n limit: number | undefined,\n includeMeta: boolean,\n): AnnotationCommandResult<TKey, TEntry> {\n const entries = limitAnnotationEntries(allEntries, limit);\n return {\n id,\n [collectionKey]: entries,\n count: entries.length,\n ...(includeMeta\n ? {\n total_count: allEntries.length,\n returned_count: entries.length,\n has_more: entries.length < allEntries.length,\n ...(limit !== undefined ? { limit } : {}),\n }\n : {}),\n } as AnnotationCommandResult<TKey, TEntry>;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["global", "allEntries"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// dist/core/shared/split-comma-list.js
|
|
2
|
+
|
|
3
|
+
!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]="e4d54002-4bc6-5fe6-b00e-c5ce7689c655")}catch(e){}}();
|
|
4
|
+
function splitCommaList(raw, options) {
|
|
5
|
+
if (raw === void 0 || raw === null) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
const separators = options?.separators ?? /,/;
|
|
9
|
+
const parts = raw.split(separators);
|
|
10
|
+
const trimmed = parts.map((entry) => entry.trim()).filter((entry) => entry.length > 0);
|
|
11
|
+
const unique = options?.unique !== false;
|
|
12
|
+
const deduped = unique ? Array.from(new Set(trimmed)) : trimmed;
|
|
13
|
+
if (options?.sort === true) {
|
|
14
|
+
return [...deduped].sort();
|
|
15
|
+
}
|
|
16
|
+
return deduped;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
splitCommaList
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=chunk-LXYVKYMQ.js.map
|
|
23
|
+
|
|
24
|
+
//# debugId=e4d54002-4bc6-5fe6-b00e-c5ce7689c655
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../core/shared/split-comma-list.ts"],"sourcesContent":["export interface SplitCommaListOptions {\n /** Separator pattern. Defaults to `/,/`. */\n separators?: RegExp | string;\n /** De-duplicate entries while preserving first-seen order. Defaults to `true`. */\n unique?: boolean;\n /** Sort entries lexicographically (default JS string sort). Defaults to `false`. */\n sort?: boolean;\n}\n\n/**\n * Split a comma-separated (or custom-separator) string into trimmed, non-empty entries.\n *\n * Default behaviour:\n * - Splits on `,`.\n * - Trims each entry and discards empty results (collapsing leading/trailing/duplicate separators).\n * - De-duplicates while preserving first-seen order.\n * - Does not sort.\n *\n * Returns `[]` for `undefined`/`null` input. Pure, dependency-free.\n */\nexport function splitCommaList(raw: string | undefined | null, options?: SplitCommaListOptions): string[] {\n if (raw === undefined || raw === null) {\n return [];\n }\n const separators = options?.separators ?? /,/;\n const parts = raw.split(separators as never);\n const trimmed = parts.map((entry) => entry.trim()).filter((entry) => entry.length > 0);\n const unique = options?.unique !== false;\n const deduped = unique ? Array.from(new Set(trimmed)) : trimmed;\n if (options?.sort === true) {\n return [...deduped].sort();\n }\n return deduped;\n}\n"],"names":[],"mappings":";;;AAoBM,SAAU,eAAe,KAAgC,SAA+B;AAC5F,MAAI,QAAQ,UAAa,QAAQ,MAAM;AACrC,WAAO,CAAA;EACT;AACA,QAAM,aAAa,SAAS,cAAc;AAC1C,QAAM,QAAQ,IAAI,MAAM,UAAmB;AAC3C,QAAM,UAAU,MAAM,IAAI,CAAC,UAAU,MAAM,KAAI,CAAE,EAAE,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AACrF,QAAM,SAAS,SAAS,WAAW;AACnC,QAAM,UAAU,SAAS,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI;AACxD,MAAI,SAAS,SAAS,MAAM;AAC1B,WAAO,CAAC,GAAG,OAAO,EAAE,KAAI;EAC1B;AACA,SAAO;AACT","debugId":"e4d54002-4bc6-5fe6-b00e-c5ce7689c655"}
|
|
@@ -0,0 +1,80 @@
|
|
|
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]="399b6987-8865-5489-b1c8-bf64257b2ad8")}catch(e){}}();
|
|
3
|
+
import {
|
|
4
|
+
EXIT_CODE,
|
|
5
|
+
PmCliError
|
|
6
|
+
} from "./chunk-4LTBNUYT.js";
|
|
7
|
+
|
|
8
|
+
// dist/core/item/parent-reference-policy.js
|
|
9
|
+
function normalizeParentReferencePolicy(value) {
|
|
10
|
+
const normalized = value?.trim().toLowerCase().replaceAll("-", "_");
|
|
11
|
+
if (normalized === "warn" || normalized === "strict_error") {
|
|
12
|
+
return normalized;
|
|
13
|
+
}
|
|
14
|
+
if (normalized === "strict") {
|
|
15
|
+
return "strict_error";
|
|
16
|
+
}
|
|
17
|
+
throw new PmCliError("Config set parent-reference-policy requires --policy with one of: warn, strict_error (alias: strict)", EXIT_CODE.USAGE);
|
|
18
|
+
}
|
|
19
|
+
function normalizeParentReferenceValue(rawValue) {
|
|
20
|
+
const value = rawValue.trim();
|
|
21
|
+
if (value.length === 0) {
|
|
22
|
+
throw new PmCliError("--parent must not be empty. Use --parent none to unset.", EXIT_CODE.USAGE);
|
|
23
|
+
}
|
|
24
|
+
const normalized = value.toLowerCase();
|
|
25
|
+
if (normalized === "none" || normalized === "null" || normalized === "undefined") {
|
|
26
|
+
throw new PmCliError(`--parent must not use placeholder token "${value}". Use --unset parent to clear this field.`, EXIT_CODE.USAGE);
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function validateMissingParentReference(parentId, policy) {
|
|
31
|
+
if (policy === "strict_error") {
|
|
32
|
+
throw new PmCliError(`Parent item "${parentId}" was not found. Create it first or use --parent none.`, EXIT_CODE.USAGE);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
warnings: [`validation_warning:parent_reference_missing:${parentId}`]
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// dist/core/item/sprint-release-format.js
|
|
40
|
+
var SPRINT_RELEASE_VALUE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._/-]*$/;
|
|
41
|
+
var SPRINT_RELEASE_MAX_LENGTH = 64;
|
|
42
|
+
function normalizeSprintReleaseFormatPolicy(value) {
|
|
43
|
+
const normalized = value?.trim().toLowerCase().replaceAll("-", "_");
|
|
44
|
+
if (normalized === "warn" || normalized === "strict_error") {
|
|
45
|
+
return normalized;
|
|
46
|
+
}
|
|
47
|
+
if (normalized === "strict") {
|
|
48
|
+
return "strict_error";
|
|
49
|
+
}
|
|
50
|
+
throw new PmCliError("Config set sprint-release-format-policy requires --policy with one of: warn, strict_error (alias: strict)", EXIT_CODE.USAGE);
|
|
51
|
+
}
|
|
52
|
+
function validateSprintOrReleaseValue(field, rawValue, policy) {
|
|
53
|
+
const value = rawValue.trim();
|
|
54
|
+
if (value.length === 0) {
|
|
55
|
+
throw new PmCliError(`--${field} must not be empty. Use --${field} none to unset.`, EXIT_CODE.USAGE);
|
|
56
|
+
}
|
|
57
|
+
const isValid = value.length <= SPRINT_RELEASE_MAX_LENGTH && SPRINT_RELEASE_VALUE_PATTERN.test(value);
|
|
58
|
+
if (isValid) {
|
|
59
|
+
return { value, warnings: [] };
|
|
60
|
+
}
|
|
61
|
+
const guidance = "Expected 1-64 characters matching [A-Za-z0-9][A-Za-z0-9._/-]* (no spaces).";
|
|
62
|
+
if (policy === "strict_error") {
|
|
63
|
+
throw new PmCliError(`Invalid --${field} value "${value}". ${guidance}`, EXIT_CODE.USAGE);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
value,
|
|
67
|
+
warnings: [`validation_warning:${field}_format:${value}`]
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export {
|
|
72
|
+
normalizeParentReferencePolicy,
|
|
73
|
+
normalizeParentReferenceValue,
|
|
74
|
+
validateMissingParentReference,
|
|
75
|
+
normalizeSprintReleaseFormatPolicy,
|
|
76
|
+
validateSprintOrReleaseValue
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=chunk-MISYRLEP.js.map
|
|
79
|
+
|
|
80
|
+
//# debugId=399b6987-8865-5489-b1c8-bf64257b2ad8
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../core/item/parent-reference-policy.ts","../../../../../../../../core/item/sprint-release-format.ts"],"sourcesContent":["import type { ParentReferencePolicy } from \"../../types/index.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\n\nexport function normalizeParentReferencePolicy(value: string | undefined): ParentReferencePolicy {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"warn\" || normalized === \"strict_error\") {\n return normalized;\n }\n if (normalized === \"strict\") {\n return \"strict_error\";\n }\n throw new PmCliError(\n \"Config set parent-reference-policy requires --policy with one of: warn, strict_error (alias: strict)\",\n EXIT_CODE.USAGE,\n );\n}\n\nexport function normalizeParentReferenceValue(rawValue: string): string {\n const value = rawValue.trim();\n if (value.length === 0) {\n throw new PmCliError(\"--parent must not be empty. Use --parent none to unset.\", EXIT_CODE.USAGE);\n }\n const normalized = value.toLowerCase();\n if (normalized === \"none\" || normalized === \"null\" || normalized === \"undefined\") {\n throw new PmCliError(\n `--parent must not use placeholder token \"${value}\". Use --unset parent to clear this field.`,\n EXIT_CODE.USAGE,\n );\n }\n return value;\n}\n\nexport function validateMissingParentReference(\n parentId: string,\n policy: ParentReferencePolicy,\n): { warnings: string[] } {\n if (policy === \"strict_error\") {\n throw new PmCliError(\n `Parent item \"${parentId}\" was not found. Create it first or use --parent none.`,\n EXIT_CODE.USAGE,\n );\n }\n return {\n warnings: [`validation_warning:parent_reference_missing:${parentId}`],\n };\n}\n","import type { SprintReleaseFormatPolicy } from \"../../types/index.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\n\nconst SPRINT_RELEASE_VALUE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._/-]*$/;\nconst SPRINT_RELEASE_MAX_LENGTH = 64;\n\nexport function normalizeSprintReleaseFormatPolicy(value: string | undefined): SprintReleaseFormatPolicy {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"warn\" || normalized === \"strict_error\") {\n return normalized;\n }\n if (normalized === \"strict\") {\n return \"strict_error\";\n }\n throw new PmCliError(\n \"Config set sprint-release-format-policy requires --policy with one of: warn, strict_error (alias: strict)\",\n EXIT_CODE.USAGE,\n );\n}\n\nexport function validateSprintOrReleaseValue(\n field: \"sprint\" | \"release\",\n rawValue: string,\n policy: SprintReleaseFormatPolicy,\n): { value: string; warnings: string[] } {\n const value = rawValue.trim();\n if (value.length === 0) {\n throw new PmCliError(`--${field} must not be empty. Use --${field} none to unset.`, EXIT_CODE.USAGE);\n }\n const isValid = value.length <= SPRINT_RELEASE_MAX_LENGTH && SPRINT_RELEASE_VALUE_PATTERN.test(value);\n if (isValid) {\n return { value, warnings: [] };\n }\n const guidance = \"Expected 1-64 characters matching [A-Za-z0-9][A-Za-z0-9._/-]* (no spaces).\";\n if (policy === \"strict_error\") {\n throw new PmCliError(`Invalid --${field} value \"${value}\". ${guidance}`, EXIT_CODE.USAGE);\n }\n return {\n value,\n warnings: [`validation_warning:${field}_format:${value}`],\n };\n}\n"],"names":[],"mappings":";;;;;;;;AAIM,SAAU,+BAA+B,OAAyB;AACtE,QAAM,aAAa,OAAO,KAAI,EAAG,YAAW,EAAG,WAAW,KAAK,GAAG;AAClE,MAAI,eAAe,UAAU,eAAe,gBAAgB;AAC1D,WAAO;EACT;AACA,MAAI,eAAe,UAAU;AAC3B,WAAO;EACT;AACA,QAAM,IAAI,WACR,wGACA,UAAU,KAAK;AAEnB;AAEM,SAAU,8BAA8B,UAAgB;AAC5D,QAAM,QAAQ,SAAS,KAAI;AAC3B,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,WAAW,2DAA2D,UAAU,KAAK;EACjG;AACA,QAAM,aAAa,MAAM,YAAW;AACpC,MAAI,eAAe,UAAU,eAAe,UAAU,eAAe,aAAa;AAChF,UAAM,IAAI,WACR,4CAA4C,KAAK,8CACjD,UAAU,KAAK;EAEnB;AACA,SAAO;AACT;AAEM,SAAU,+BACd,UACA,QAA6B;AAE7B,MAAI,WAAW,gBAAgB;AAC7B,UAAM,IAAI,WACR,gBAAgB,QAAQ,0DACxB,UAAU,KAAK;EAEnB;AACA,SAAO;IACL,UAAU,CAAC,+CAA+C,QAAQ,EAAE;;AAExE;;;AC1CA,IAAM,+BAA+B;AACrC,IAAM,4BAA4B;AAE5B,SAAU,mCAAmC,OAAyB;AAC1E,QAAM,aAAa,OAAO,KAAI,EAAG,YAAW,EAAG,WAAW,KAAK,GAAG;AAClE,MAAI,eAAe,UAAU,eAAe,gBAAgB;AAC1D,WAAO;EACT;AACA,MAAI,eAAe,UAAU;AAC3B,WAAO;EACT;AACA,QAAM,IAAI,WACR,6GACA,UAAU,KAAK;AAEnB;AAEM,SAAU,6BACd,OACA,UACA,QAAiC;AAEjC,QAAM,QAAQ,SAAS,KAAI;AAC3B,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,WAAW,KAAK,KAAK,6BAA6B,KAAK,mBAAmB,UAAU,KAAK;EACrG;AACA,QAAM,UAAU,MAAM,UAAU,6BAA6B,6BAA6B,KAAK,KAAK;AACpG,MAAI,SAAS;AACX,WAAO,EAAE,OAAO,UAAU,CAAA,EAAE;EAC9B;AACA,QAAM,WAAW;AACjB,MAAI,WAAW,gBAAgB;AAC7B,UAAM,IAAI,WAAW,aAAa,KAAK,WAAW,KAAK,MAAM,QAAQ,IAAI,UAAU,KAAK;EAC1F;AACA,SAAO;IACL;IACA,UAAU,CAAC,sBAAsB,KAAK,WAAW,KAAK,EAAE;;AAE5D","debugId":"399b6987-8865-5489-b1c8-bf64257b2ad8"}
|