@unbrained/pm-cli 2026.7.5 → 2026.7.6
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 +10 -0
- package/dist/cli-bundle/chunks/activity-WJCGCYPU.js +18 -0
- package/dist/cli-bundle/chunks/activity-Z6QUAUSG.js +22 -0
- package/dist/cli-bundle/chunks/aggregate-BDM6EIAR.js +25 -0
- package/dist/cli-bundle/chunks/aggregate-VQ2DHU3S.js +21 -0
- package/dist/cli-bundle/chunks/append-BGML6VLD.js +19 -0
- package/dist/cli-bundle/chunks/append-RKJYPU74.js +15 -0
- package/dist/cli-bundle/chunks/chunk-22KBU3MW.js +57 -0
- package/dist/cli-bundle/chunks/chunk-24YG75HI.js +634 -0
- package/dist/cli-bundle/chunks/chunk-2XG4IZON.js +218 -0
- package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js +228 -0
- package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js +2330 -0
- package/dist/cli-bundle/chunks/chunk-3N6RRO2Q.js +808 -0
- package/dist/cli-bundle/chunks/chunk-3N6RRO2Q.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-3UJRFJ5R.js +1573 -0
- package/dist/cli-bundle/chunks/chunk-3VHSI5FL.js +1001 -0
- package/dist/cli-bundle/chunks/chunk-425E4QL5.js +278 -0
- package/dist/cli-bundle/chunks/chunk-425E4QL5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-45FYNUFJ.js +38 -0
- package/dist/cli-bundle/chunks/chunk-45FYNUFJ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-46CUF5L6.js +1018 -0
- package/dist/cli-bundle/chunks/chunk-4CJFCTLM.js +222 -0
- package/dist/cli-bundle/chunks/chunk-4CJFCTLM.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js +249 -0
- package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js +819 -0
- package/dist/cli-bundle/chunks/chunk-4LELACOL.js +391 -0
- package/dist/cli-bundle/chunks/chunk-4LELACOL.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js +279 -0
- package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-4ZBE5GUN.js +184 -0
- package/dist/cli-bundle/chunks/chunk-4ZBE5GUN.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-57NWPFF2.js +5640 -0
- package/dist/cli-bundle/chunks/chunk-57NWPFF2.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js +268 -0
- package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-5BMM6XQY.js +508 -0
- package/dist/cli-bundle/chunks/chunk-5BMM6XQY.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js +1868 -0
- package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js +1749 -0
- package/dist/cli-bundle/chunks/chunk-64YKRTSV.js +1961 -0
- package/dist/cli-bundle/chunks/chunk-6LLVNJXT.js +429 -0
- package/dist/cli-bundle/chunks/chunk-6QBJLYBP.js +120 -0
- package/dist/cli-bundle/chunks/chunk-6QBJLYBP.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-7D7OOEYG.js +278 -0
- package/dist/cli-bundle/chunks/chunk-7D7OOEYG.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-7DT4WSH2.js +60 -0
- package/dist/cli-bundle/chunks/chunk-7WBAJSS6.js +102 -0
- package/dist/cli-bundle/chunks/chunk-AGHMOTGM.js +150 -0
- package/dist/cli-bundle/chunks/chunk-ALFPSEWO.js +112 -0
- package/dist/cli-bundle/chunks/chunk-AZYGZGGI.js +361 -0
- package/dist/cli-bundle/chunks/chunk-B6DUFX6H.js +1413 -0
- package/dist/cli-bundle/chunks/chunk-B6XS3R3O.js +275 -0
- package/dist/cli-bundle/chunks/chunk-B6XS3R3O.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js +421 -0
- package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js +1985 -0
- package/dist/cli-bundle/chunks/chunk-CFB33L7W.js +398 -0
- package/dist/cli-bundle/chunks/chunk-CFNGIXZP.js +784 -0
- package/dist/cli-bundle/chunks/chunk-CFNGIXZP.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-CL36D4PC.js +225 -0
- package/dist/cli-bundle/chunks/chunk-COSPOP7H.js +6677 -0
- package/dist/cli-bundle/chunks/chunk-COSPOP7H.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-COWTDV6B.js +3461 -0
- package/dist/cli-bundle/chunks/chunk-COWTDV6B.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-CRVYGJUI.js +553 -0
- package/dist/cli-bundle/chunks/chunk-CRVYGJUI.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-D2XRLB55.js +645 -0
- package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js +1858 -0
- package/dist/cli-bundle/chunks/chunk-DMRNBQOI.js +1063 -0
- package/dist/cli-bundle/chunks/chunk-DMRNBQOI.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js +1932 -0
- package/dist/cli-bundle/chunks/chunk-E42XTBSP.js +1359 -0
- package/dist/cli-bundle/chunks/chunk-E42XTBSP.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-EBRZZ54H.js +655 -0
- package/dist/cli-bundle/chunks/chunk-EBRZZ54H.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-EGAP5OWD.js +4712 -0
- package/dist/cli-bundle/chunks/chunk-EGAP5OWD.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-EGY6JBQ3.js +160 -0
- package/dist/cli-bundle/chunks/chunk-EKFNL33R.js +222 -0
- package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js +1704 -0
- package/dist/cli-bundle/chunks/chunk-EOKXK3R3.js +2046 -0
- package/dist/cli-bundle/chunks/chunk-F3K4JGFD.js +121 -0
- package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js +231 -0
- package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js +2090 -0
- package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-FT3QTERD.js +550 -0
- package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js +1570 -0
- package/dist/cli-bundle/chunks/chunk-G64OCSKU.js +444 -0
- package/dist/cli-bundle/chunks/chunk-GANUTS7W.js +1775 -0
- package/dist/cli-bundle/chunks/chunk-GBAX2ZAQ.js +401 -0
- package/dist/cli-bundle/chunks/chunk-GDDAGPWJ.js +105 -0
- package/dist/cli-bundle/chunks/chunk-GDDAGPWJ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js +239 -0
- package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GJ7QC5DJ.js +624 -0
- package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js +530 -0
- package/dist/cli-bundle/chunks/chunk-GZRDYONU.js +1005 -0
- package/dist/cli-bundle/chunks/chunk-HFDADVJZ.js +1356 -0
- package/dist/cli-bundle/chunks/chunk-HFDADVJZ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-HIHMT6WS.js +41 -0
- package/dist/cli-bundle/chunks/chunk-HIHMT6WS.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js +277 -0
- package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-HOVCGJSD.js +293 -0
- package/dist/cli-bundle/chunks/chunk-HOVCGJSD.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-I36Y7PCE.js +38 -0
- package/dist/cli-bundle/chunks/chunk-I36Y7PCE.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js +309 -0
- package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-IWVU4C2F.js +358 -0
- package/dist/cli-bundle/chunks/chunk-IX5BXEMX.js +267 -0
- package/dist/cli-bundle/chunks/chunk-JDDLOQAE.js +265 -0
- package/dist/cli-bundle/chunks/chunk-JJP45OEI.js +119 -0
- package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js +2257 -0
- package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-JVH7QBVV.js +24 -0
- package/dist/cli-bundle/chunks/chunk-JVH7QBVV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-K46RF36U.js +207 -0
- package/dist/cli-bundle/chunks/chunk-KERMZVY5.js +371 -0
- package/dist/cli-bundle/chunks/chunk-KERMZVY5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-KGFUY7WN.js +814 -0
- package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js +76 -0
- package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-KUOOJR35.js +260 -0
- package/dist/cli-bundle/chunks/chunk-L5PSPMZ4.js +277 -0
- package/dist/cli-bundle/chunks/chunk-LK6XLOGP.js +5799 -0
- package/dist/cli-bundle/chunks/chunk-LK6XLOGP.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js +140 -0
- package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-LPSSSDJR.js +1239 -0
- package/dist/cli-bundle/chunks/chunk-M7JNBQAD.js +225 -0
- package/dist/cli-bundle/chunks/chunk-M7JNBQAD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-MA4SM3QZ.js +655 -0
- package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js +1601 -0
- package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js +1031 -0
- package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js +995 -0
- package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js +296 -0
- package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-MLIYFOE7.js +357 -0
- package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js +2043 -0
- package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-MUH7A3FD.js +61 -0
- package/dist/cli-bundle/chunks/chunk-MVSP7WGJ.js +108 -0
- package/dist/cli-bundle/chunks/chunk-MVSP7WGJ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-MVYWGY2A.js +262 -0
- package/dist/cli-bundle/chunks/chunk-MWMVPCIE.js +1423 -0
- package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js +2033 -0
- package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-N745W3B3.js +1604 -0
- package/dist/cli-bundle/chunks/chunk-N745W3B3.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-NB7RLQFW.js +57 -0
- package/dist/cli-bundle/chunks/chunk-NB7RLQFW.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-NC33K5ZS.js +123 -0
- package/dist/cli-bundle/chunks/chunk-NC33K5ZS.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-NGXQ3PFT.js +263 -0
- package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js +1615 -0
- package/dist/cli-bundle/chunks/chunk-NO442GWJ.js +41 -0
- package/dist/cli-bundle/chunks/chunk-NO442GWJ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-NZEHECMW.js +658 -0
- package/dist/cli-bundle/chunks/chunk-NZEHECMW.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-O6AWCQRQ.js +124 -0
- package/dist/cli-bundle/chunks/chunk-OGWQ2IEP.js +240 -0
- package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js +143 -0
- package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-QLMX7SRD.js +210 -0
- package/dist/cli-bundle/chunks/chunk-QX6HM775.js +398 -0
- package/dist/cli-bundle/chunks/chunk-QX6HM775.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-R5BMJX33.js +27 -0
- package/dist/cli-bundle/chunks/chunk-R5BMJX33.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-RCQZK2GO.js +296 -0
- package/dist/cli-bundle/chunks/chunk-RCQZK2GO.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-RFNYTESG.js +520 -0
- package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js +79 -0
- package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js +282 -0
- package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js +274 -0
- package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-SCUR7K7N.js +2198 -0
- package/dist/cli-bundle/chunks/chunk-SGMFPXKR.js +68 -0
- package/dist/cli-bundle/chunks/chunk-SGMFPXKR.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js +1977 -0
- package/dist/cli-bundle/chunks/chunk-SMB7RV23.js +130 -0
- package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js +1041 -0
- package/dist/cli-bundle/chunks/chunk-SQOIV3OQ.js +563 -0
- package/dist/cli-bundle/chunks/chunk-SQOIV3OQ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-SQYJ4HF2.js +1765 -0
- package/dist/cli-bundle/chunks/chunk-T42JWV3F.js +822 -0
- package/dist/cli-bundle/chunks/chunk-TKD5VCTD.js +6567 -0
- package/dist/cli-bundle/chunks/chunk-TKD5VCTD.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-TULGS6X6.js +2132 -0
- package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js +2306 -0
- package/dist/cli-bundle/chunks/chunk-UH7T2DAX.js +181 -0
- package/dist/cli-bundle/chunks/chunk-UH7T2DAX.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-VIIUS6N6.js +4773 -0
- package/dist/cli-bundle/chunks/chunk-VIIUS6N6.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-VPIM42PC.js +367 -0
- package/dist/cli-bundle/chunks/chunk-VQRSPVME.js +368 -0
- package/dist/cli-bundle/chunks/chunk-VQRSPVME.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-W3DSJQIO.js +447 -0
- package/dist/cli-bundle/chunks/chunk-W572BIEB.js +1249 -0
- package/dist/cli-bundle/chunks/chunk-W6DYWXPQ.js +1073 -0
- package/dist/cli-bundle/chunks/chunk-W6DYWXPQ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js +3423 -0
- package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-WLSM645P.js +2247 -0
- package/dist/cli-bundle/chunks/chunk-WLSM645P.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-WRTENIX3.js +215 -0
- package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js +388 -0
- package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-XB7KFVFI.js +533 -0
- package/dist/cli-bundle/chunks/chunk-XC5BURG2.js +306 -0
- package/dist/cli-bundle/chunks/chunk-XC5BURG2.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js +424 -0
- package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-XG625QP4.js +58 -0
- package/dist/cli-bundle/chunks/chunk-XHET7YUZ.js +71 -0
- package/dist/cli-bundle/chunks/chunk-XHET7YUZ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-XUC7PI2H.js +243 -0
- package/dist/cli-bundle/chunks/chunk-Y46GD4IX.js +116 -0
- package/dist/cli-bundle/chunks/chunk-Y4M7CPQP.js +804 -0
- package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js +2128 -0
- package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-YN7Y6DQZ.js +426 -0
- package/dist/cli-bundle/chunks/chunk-Z3U3U5KD.js +511 -0
- package/dist/cli-bundle/chunks/chunk-Z3U3U5KD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-ZGK4L4JM.js +133 -0
- package/dist/cli-bundle/chunks/chunk-ZJ262CED.js +394 -0
- package/dist/cli-bundle/chunks/chunk-ZJ262CED.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js +299 -0
- package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-ZSUS2OD3.js +2105 -0
- package/dist/cli-bundle/chunks/chunk-ZWBEPGD7.js +54 -0
- package/dist/cli-bundle/chunks/chunk-ZWBEPGD7.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-ZZD4J5XY.js +1570 -0
- package/dist/cli-bundle/chunks/claim-RFS7BROJ.js +19 -0
- package/dist/cli-bundle/chunks/claim-XP5AWZ5H.js +23 -0
- package/dist/cli-bundle/chunks/close-2SSSHHUZ.js +20 -0
- package/dist/cli-bundle/chunks/close-GEANHQ2J.js +16 -0
- package/dist/cli-bundle/chunks/close-many-CMZW7ITN.js +31 -0
- package/dist/cli-bundle/chunks/close-many-ZFDIG6M7.js +27 -0
- package/dist/cli-bundle/chunks/comments-MFSYVNNU.js +21 -0
- package/dist/cli-bundle/chunks/comments-XUBPXDYX.js +17 -0
- package/dist/cli-bundle/chunks/config-D7XQMONX.js +18 -0
- package/dist/cli-bundle/chunks/config-T4FHBSYN.js +22 -0
- package/dist/cli-bundle/chunks/context-DIU275XI.js +48 -0
- package/dist/cli-bundle/chunks/context-JCOYB4LZ.js +44 -0
- package/dist/cli-bundle/chunks/contracts-BVO7CSLK.js +12 -0
- package/dist/cli-bundle/chunks/contracts-NYPEW2G4.js +16 -0
- package/dist/cli-bundle/chunks/copy-32ROBIDL.js +17 -0
- package/dist/cli-bundle/chunks/copy-NAGLGMHZ.js +13 -0
- package/dist/cli-bundle/chunks/create-4V7SWNBB.js +30 -0
- package/dist/cli-bundle/chunks/create-E77SDCUP.js +34 -0
- package/dist/cli-bundle/chunks/delete-NQI5OSKN.js +14 -0
- package/dist/cli-bundle/chunks/delete-RA5KTCLB.js +18 -0
- package/dist/cli-bundle/chunks/deps-32SU7HO5.js +21 -0
- package/dist/cli-bundle/chunks/deps-T7SCWXEX.js +17 -0
- package/dist/cli-bundle/chunks/docs-RRUPT7O2.js +22 -0
- package/dist/cli-bundle/chunks/docs-WL2IWGWV.js +18 -0
- package/dist/cli-bundle/chunks/eval-NF2J5SHR.js +23 -0
- package/dist/cli-bundle/chunks/eval-SKDT3MZU.js +27 -0
- package/dist/cli-bundle/chunks/extension-LAXKCAYE.js +42 -0
- package/dist/cli-bundle/chunks/extension-LAXKCAYE.js.map +1 -0
- package/dist/cli-bundle/chunks/extension-ZISPBRBC.js +38 -0
- package/dist/cli-bundle/chunks/extension-ZISPBRBC.js.map +7 -0
- package/dist/cli-bundle/chunks/files-EWRQHGIS.js +22 -0
- package/dist/cli-bundle/chunks/files-EWRQHGIS.js.map +7 -0
- package/dist/cli-bundle/chunks/files-PYKR2UUG.js +26 -0
- package/dist/cli-bundle/chunks/files-PYKR2UUG.js.map +1 -0
- package/dist/cli-bundle/chunks/focus-4T7TM4MT.js +18 -0
- package/dist/cli-bundle/chunks/focus-4T7TM4MT.js.map +1 -0
- package/dist/cli-bundle/chunks/focus-L3YUASOD.js +14 -0
- package/dist/cli-bundle/chunks/focus-L3YUASOD.js.map +7 -0
- package/dist/cli-bundle/chunks/gc-2DNMPXMC.js +16 -0
- package/dist/cli-bundle/chunks/gc-2DNMPXMC.js.map +1 -0
- package/dist/cli-bundle/chunks/gc-2PCTYYRI.js +12 -0
- package/dist/cli-bundle/chunks/gc-2PCTYYRI.js.map +7 -0
- package/dist/cli-bundle/chunks/get-7DMITJ3G.js +23 -0
- package/dist/cli-bundle/chunks/get-7DMITJ3G.js.map +1 -0
- package/dist/cli-bundle/chunks/get-VKQXCXLL.js +19 -0
- package/dist/cli-bundle/chunks/get-VKQXCXLL.js.map +7 -0
- package/dist/cli-bundle/chunks/health-CVSTAR2F.js +31 -0
- package/dist/cli-bundle/chunks/health-CVSTAR2F.js.map +7 -0
- package/dist/cli-bundle/chunks/health-TV3GKTFN.js +35 -0
- package/dist/cli-bundle/chunks/health-TV3GKTFN.js.map +1 -0
- package/dist/cli-bundle/chunks/history-D4JUX5XV.js +20 -0
- package/dist/cli-bundle/chunks/history-D4JUX5XV.js.map +7 -0
- package/dist/cli-bundle/chunks/history-LQ2UWZTE.js +24 -0
- package/dist/cli-bundle/chunks/history-LQ2UWZTE.js.map +1 -0
- package/dist/cli-bundle/chunks/history-compact-3MNXLKAT.js +29 -0
- package/dist/cli-bundle/chunks/history-compact-3MNXLKAT.js.map +1 -0
- package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js +25 -0
- package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js.map +7 -0
- package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js +21 -0
- package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js.map +7 -0
- package/dist/cli-bundle/chunks/history-redact-P6DYF55G.js +25 -0
- package/dist/cli-bundle/chunks/history-redact-P6DYF55G.js.map +1 -0
- package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js +23 -0
- package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js.map +7 -0
- package/dist/cli-bundle/chunks/history-repair-ZJQFMWPD.js +27 -0
- package/dist/cli-bundle/chunks/history-repair-ZJQFMWPD.js.map +1 -0
- package/dist/cli-bundle/chunks/init-C3LJPWQZ.js +30 -0
- package/dist/cli-bundle/chunks/init-C3LJPWQZ.js.map +1 -0
- package/dist/cli-bundle/chunks/init-J3DPGWQI.js +26 -0
- package/dist/cli-bundle/chunks/init-J3DPGWQI.js.map +7 -0
- package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js +21 -0
- package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js.map +1 -0
- package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js +17 -0
- package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js.map +7 -0
- package/dist/cli-bundle/chunks/list-O5NZVSPN.js +36 -0
- package/dist/cli-bundle/chunks/list-O5NZVSPN.js.map +1 -0
- package/dist/cli-bundle/chunks/list-Z55YCNTC.js +32 -0
- package/dist/cli-bundle/chunks/list-Z55YCNTC.js.map +7 -0
- package/dist/cli-bundle/chunks/next-GBNTGXFC.js +28 -0
- package/dist/cli-bundle/chunks/next-GBNTGXFC.js.map +7 -0
- package/dist/cli-bundle/chunks/next-QKW7PTKE.js +32 -0
- package/dist/cli-bundle/chunks/next-QKW7PTKE.js.map +1 -0
- package/dist/cli-bundle/chunks/notes-R5FZTKWF.js +17 -0
- package/dist/cli-bundle/chunks/notes-R5FZTKWF.js.map +7 -0
- package/dist/cli-bundle/chunks/notes-WCGIULVG.js +21 -0
- package/dist/cli-bundle/chunks/notes-WCGIULVG.js.map +1 -0
- package/dist/cli-bundle/chunks/plan-ADISFYH4.js +29 -0
- package/dist/cli-bundle/chunks/plan-ADISFYH4.js.map +7 -0
- package/dist/cli-bundle/chunks/plan-CHVE7PBR.js +33 -0
- package/dist/cli-bundle/chunks/plan-CHVE7PBR.js.map +1 -0
- package/dist/cli-bundle/chunks/profile-LD23PSI6.js +37 -0
- package/dist/cli-bundle/chunks/profile-LD23PSI6.js.map +7 -0
- package/dist/cli-bundle/chunks/profile-ZXGSKBJD.js +41 -0
- package/dist/cli-bundle/chunks/profile-ZXGSKBJD.js.map +1 -0
- package/dist/cli-bundle/chunks/register-list-query-B42JCCOI.js +409 -0
- package/dist/cli-bundle/chunks/register-list-query-OEYQHFXO.js +419 -0
- package/dist/cli-bundle/chunks/register-mutation-3QXIHCQG.js +1273 -0
- package/dist/cli-bundle/chunks/register-mutation-IAEST26S.js +1256 -0
- package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js +19 -0
- package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js.map +7 -0
- package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js +23 -0
- package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js.map +1 -0
- package/dist/cli-bundle/chunks/register-setup-3ZVVX2VN.js +324 -0
- package/dist/cli-bundle/chunks/register-setup-3ZVVX2VN.js.map +7 -0
- package/dist/cli-bundle/chunks/register-setup-Q6KFNIOZ.js +321 -0
- package/dist/cli-bundle/chunks/register-setup-Q6KFNIOZ.js.map +1 -0
- package/dist/cli-bundle/chunks/restore-5RQHAPMA.js +23 -0
- package/dist/cli-bundle/chunks/restore-5RQHAPMA.js.map +1 -0
- package/dist/cli-bundle/chunks/restore-PNEIBBLW.js +19 -0
- package/dist/cli-bundle/chunks/restore-PNEIBBLW.js.map +7 -0
- package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js +29 -0
- package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js.map +1 -0
- package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js +25 -0
- package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js.map +7 -0
- package/dist/cli-bundle/chunks/schema-245WW4G2.js +78 -0
- package/dist/cli-bundle/chunks/schema-245WW4G2.js.map +1 -0
- package/dist/cli-bundle/chunks/schema-HBORFC6B.js +74 -0
- package/dist/cli-bundle/chunks/schema-HBORFC6B.js.map +7 -0
- package/dist/cli-bundle/chunks/search-AOZC5SIK.js +34 -0
- package/dist/cli-bundle/chunks/search-AOZC5SIK.js.map +7 -0
- package/dist/cli-bundle/chunks/search-DRXPGHD7.js +38 -0
- package/dist/cli-bundle/chunks/search-DRXPGHD7.js.map +1 -0
- package/dist/cli-bundle/chunks/stats-NJG4NLHG.js +21 -0
- package/dist/cli-bundle/chunks/stats-NJG4NLHG.js.map +1 -0
- package/dist/cli-bundle/chunks/stats-RG6AG4N2.js +17 -0
- package/dist/cli-bundle/chunks/stats-RG6AG4N2.js.map +7 -0
- package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js +14 -0
- package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js.map +7 -0
- package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js +18 -0
- package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js.map +1 -0
- package/dist/cli-bundle/chunks/test-6CMOCWUC.js +39 -0
- package/dist/cli-bundle/chunks/test-6CMOCWUC.js.map +7 -0
- package/dist/cli-bundle/chunks/test-RI7XHBZL.js +43 -0
- package/dist/cli-bundle/chunks/test-RI7XHBZL.js.map +1 -0
- package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js +29 -0
- package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js.map +7 -0
- package/dist/cli-bundle/chunks/test-all-QEIORFYW.js +33 -0
- package/dist/cli-bundle/chunks/test-all-QEIORFYW.js.map +1 -0
- package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js +28 -0
- package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js.map +1 -0
- package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js +24 -0
- package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js.map +7 -0
- package/dist/cli-bundle/chunks/update-QVJDFEAP.js +30 -0
- package/dist/cli-bundle/chunks/update-QVJDFEAP.js.map +1 -0
- package/dist/cli-bundle/chunks/update-VQVHAY6X.js +26 -0
- package/dist/cli-bundle/chunks/update-VQVHAY6X.js.map +7 -0
- package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js +37 -0
- package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js.map +7 -0
- package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js +41 -0
- package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js.map +1 -0
- package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js +24 -0
- package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js.map +7 -0
- package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js +28 -0
- package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js.map +1 -0
- package/dist/cli-bundle/chunks/validate-4NTXSB62.js +36 -0
- package/dist/cli-bundle/chunks/validate-4NTXSB62.js.map +1 -0
- package/dist/cli-bundle/chunks/validate-MUFXQZMI.js +32 -0
- package/dist/cli-bundle/chunks/validate-MUFXQZMI.js.map +7 -0
- package/dist/cli-bundle/main.js +16 -16
- package/dist/cli-bundle/sdk-runtime.js +88 -28
- package/dist/cli-bundle/sdk-testing.js +6 -6
- package/dist/cli-bundle/sdk.js +92 -49
- package/dist/cli-bundle/sdk.js.map +2 -2
- package/dist/mcp/server.d.ts +22 -50
- package/dist/mcp/server.js +62 -916
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/index.d.ts +4 -2
- package/dist/sdk/index.js +4 -4
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +168 -4
- package/dist/sdk/runtime.js +1149 -25
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/workspace-contracts-cache.d.ts +17 -0
- package/dist/sdk/workspace-contracts-cache.js +36 -0
- package/dist/sdk/workspace-contracts-cache.js.map +1 -0
- package/docs/RELEASING.md +3 -1
- package/docs/SDK.md +46 -0
- package/docs/examples/sdk-app-embedding/run-embedded-pm.mjs +16 -2
- package/docs/examples/sdk-contract-consumer/inspect-contracts.mjs +16 -1
- package/package.json +1 -1
- package/dist/cli-bundle/chunks/activity-4XQIDNM5.js +0 -18
- package/dist/cli-bundle/chunks/activity-YKAKZTZ4.js +0 -22
- package/dist/cli-bundle/chunks/aggregate-EQX2RGB7.js +0 -375
- package/dist/cli-bundle/chunks/aggregate-EQX2RGB7.js.map +0 -7
- package/dist/cli-bundle/chunks/aggregate-PEGZGJXD.js +0 -372
- package/dist/cli-bundle/chunks/aggregate-PEGZGJXD.js.map +0 -1
- package/dist/cli-bundle/chunks/append-CZGUZ45Q.js +0 -73
- package/dist/cli-bundle/chunks/append-CZGUZ45Q.js.map +0 -7
- package/dist/cli-bundle/chunks/append-NSQBCXZJ.js +0 -70
- package/dist/cli-bundle/chunks/append-NSQBCXZJ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3JZNEQBA.js +0 -1413
- package/dist/cli-bundle/chunks/chunk-3PL6LEKP.js +0 -1961
- package/dist/cli-bundle/chunks/chunk-3U3VEWK6.js +0 -1749
- package/dist/cli-bundle/chunks/chunk-3Y4OESPP.js +0 -277
- package/dist/cli-bundle/chunks/chunk-4LRVSBO6.js +0 -822
- package/dist/cli-bundle/chunks/chunk-4OFLJHX6.js +0 -356
- package/dist/cli-bundle/chunks/chunk-4QQ6PM7M.js +0 -1249
- package/dist/cli-bundle/chunks/chunk-53BTLLAF.js +0 -2181
- package/dist/cli-bundle/chunks/chunk-53BTLLAF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-57C2RLW5.js +0 -1704
- package/dist/cli-bundle/chunks/chunk-5B3X4Y22.js +0 -2330
- package/dist/cli-bundle/chunks/chunk-5J2XPTAD.js +0 -225
- package/dist/cli-bundle/chunks/chunk-5JE6SMYS.js +0 -262
- package/dist/cli-bundle/chunks/chunk-5JZ7APJU.js +0 -995
- package/dist/cli-bundle/chunks/chunk-5VVUKE3U.js +0 -5789
- package/dist/cli-bundle/chunks/chunk-5VVUKE3U.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-75U6M5ZD.js +0 -819
- package/dist/cli-bundle/chunks/chunk-7EQNAZX2.js +0 -1018
- package/dist/cli-bundle/chunks/chunk-7MDXZAZS.js +0 -102
- package/dist/cli-bundle/chunks/chunk-7QH7DHUB.js +0 -2046
- package/dist/cli-bundle/chunks/chunk-7WYXBPYQ.js +0 -358
- package/dist/cli-bundle/chunks/chunk-AAEQMOC6.js +0 -150
- package/dist/cli-bundle/chunks/chunk-ABRA3BHY.js +0 -429
- package/dist/cli-bundle/chunks/chunk-BFVHCAOO.js +0 -240
- package/dist/cli-bundle/chunks/chunk-BVEUCSH2.js +0 -530
- package/dist/cli-bundle/chunks/chunk-C3PMDWGX.js +0 -160
- package/dist/cli-bundle/chunks/chunk-D3UCE7RW.js +0 -243
- package/dist/cli-bundle/chunks/chunk-DC3QJQWI.js +0 -275
- package/dist/cli-bundle/chunks/chunk-DC3QJQWI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DLQ4ZTCU.js +0 -634
- package/dist/cli-bundle/chunks/chunk-DRBV5UC2.js +0 -231
- package/dist/cli-bundle/chunks/chunk-E2FUG6GD.js +0 -2184
- package/dist/cli-bundle/chunks/chunk-E2FUG6GD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EEY54JMF.js +0 -60
- package/dist/cli-bundle/chunks/chunk-EZFKWSC7.js +0 -1615
- package/dist/cli-bundle/chunks/chunk-FDBARR33.js +0 -655
- package/dist/cli-bundle/chunks/chunk-FGQKEDE4.js +0 -447
- package/dist/cli-bundle/chunks/chunk-FJRKQREY.js +0 -228
- package/dist/cli-bundle/chunks/chunk-FUM6UMY4.js +0 -804
- package/dist/cli-bundle/chunks/chunk-GIWXVMZ3.js +0 -3237
- package/dist/cli-bundle/chunks/chunk-GIWXVMZ3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HBYZDSK5.js +0 -426
- package/dist/cli-bundle/chunks/chunk-HJE4JTKQ.js +0 -124
- package/dist/cli-bundle/chunks/chunk-HK72NWAD.js +0 -1570
- package/dist/cli-bundle/chunks/chunk-IJ6CO3JV.js +0 -645
- package/dist/cli-bundle/chunks/chunk-JFCVQXZX.js +0 -3206
- package/dist/cli-bundle/chunks/chunk-JFCVQXZX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JLA7EVYV.js +0 -222
- package/dist/cli-bundle/chunks/chunk-K32L7HZO.js +0 -76
- package/dist/cli-bundle/chunks/chunk-K32L7HZO.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K3AGVXSF.js +0 -444
- package/dist/cli-bundle/chunks/chunk-KDZ6K25I.js +0 -79
- package/dist/cli-bundle/chunks/chunk-KDZ6K25I.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KL22PY6L.js +0 -915
- package/dist/cli-bundle/chunks/chunk-KL22PY6L.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KLG4ZULO.js +0 -218
- package/dist/cli-bundle/chunks/chunk-LEKT4K7I.js +0 -2105
- package/dist/cli-bundle/chunks/chunk-MNZ7DRNC.js +0 -1858
- package/dist/cli-bundle/chunks/chunk-MTTXDAK4.js +0 -2198
- package/dist/cli-bundle/chunks/chunk-MZ7VNEVY.js +0 -520
- package/dist/cli-bundle/chunks/chunk-N6DNM2FA.js +0 -116
- package/dist/cli-bundle/chunks/chunk-N7X4WP6L.js +0 -1041
- package/dist/cli-bundle/chunks/chunk-NBFCNJ7Q.js +0 -2132
- package/dist/cli-bundle/chunks/chunk-NER3KUUS.js +0 -260
- package/dist/cli-bundle/chunks/chunk-OBA2WH65.js +0 -918
- package/dist/cli-bundle/chunks/chunk-OBA2WH65.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-OESSOFJ4.js +0 -1985
- package/dist/cli-bundle/chunks/chunk-OK5NXCZB.js +0 -238
- package/dist/cli-bundle/chunks/chunk-OK5NXCZB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-OWTIRHX4.js +0 -112
- package/dist/cli-bundle/chunks/chunk-P3VRG72Q.js +0 -1765
- package/dist/cli-bundle/chunks/chunk-P5TFTLWW.js +0 -1423
- package/dist/cli-bundle/chunks/chunk-P5YORJRH.js +0 -1977
- package/dist/cli-bundle/chunks/chunk-PDXT6Q55.js +0 -58
- package/dist/cli-bundle/chunks/chunk-PJ3A56YF.js +0 -1239
- package/dist/cli-bundle/chunks/chunk-PPAJG4GB.js +0 -1031
- package/dist/cli-bundle/chunks/chunk-PPE4YUQM.js +0 -4725
- package/dist/cli-bundle/chunks/chunk-PPE4YUQM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QHZO65XW.js +0 -1775
- package/dist/cli-bundle/chunks/chunk-R3ZBLGTC.js +0 -814
- package/dist/cli-bundle/chunks/chunk-RCT3YJOK.js +0 -624
- package/dist/cli-bundle/chunks/chunk-RX3HQSYG.js +0 -265
- package/dist/cli-bundle/chunks/chunk-S4APD35C.js +0 -210
- package/dist/cli-bundle/chunks/chunk-S5AYOUT5.js +0 -130
- package/dist/cli-bundle/chunks/chunk-STPSZ2XY.js +0 -1149
- package/dist/cli-bundle/chunks/chunk-STPSZ2XY.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-T35XLYZF.js +0 -263
- package/dist/cli-bundle/chunks/chunk-T3ABIMGW.js +0 -361
- package/dist/cli-bundle/chunks/chunk-T3F4DF23.js +0 -267
- package/dist/cli-bundle/chunks/chunk-T4MX77AK.js +0 -272
- package/dist/cli-bundle/chunks/chunk-T4MX77AK.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-T5Y3QSNF.js +0 -5354
- package/dist/cli-bundle/chunks/chunk-T5Y3QSNF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-TSPKZRRW.js +0 -1570
- package/dist/cli-bundle/chunks/chunk-TT42JUMF.js +0 -207
- package/dist/cli-bundle/chunks/chunk-UHKX7I75.js +0 -165
- package/dist/cli-bundle/chunks/chunk-UHKX7I75.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UI5BJ6DO.js +0 -4786
- package/dist/cli-bundle/chunks/chunk-UI5BJ6DO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-US3T3W5J.js +0 -1932
- package/dist/cli-bundle/chunks/chunk-UZRDBL6W.js +0 -175
- package/dist/cli-bundle/chunks/chunk-UZRDBL6W.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-VZIYHZDX.js +0 -1868
- package/dist/cli-bundle/chunks/chunk-WISPVC2E.js +0 -401
- package/dist/cli-bundle/chunks/chunk-WVSGSZ6J.js +0 -5434
- package/dist/cli-bundle/chunks/chunk-WVSGSZ6J.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-XQCG2JGW.js +0 -1152
- package/dist/cli-bundle/chunks/chunk-XQCG2JGW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Y76TWC45.js +0 -550
- package/dist/cli-bundle/chunks/chunk-YD5FML7K.js +0 -5630
- package/dist/cli-bundle/chunks/chunk-YD5FML7K.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YFIE7YK6.js +0 -57
- package/dist/cli-bundle/chunks/chunk-YMABYTNG.js +0 -1573
- package/dist/cli-bundle/chunks/chunk-YOF5VPKM.js +0 -119
- package/dist/cli-bundle/chunks/chunk-YPPVU5GX.js +0 -398
- package/dist/cli-bundle/chunks/chunk-YQMMMONE.js +0 -133
- package/dist/cli-bundle/chunks/chunk-YSAH5FY5.js +0 -1001
- package/dist/cli-bundle/chunks/chunk-YZIR4R3U.js +0 -1005
- package/dist/cli-bundle/chunks/chunk-Z2CRRZYF.js +0 -215
- package/dist/cli-bundle/chunks/chunk-ZAHXPXVY.js +0 -533
- package/dist/cli-bundle/chunks/chunk-ZCJAA3JK.js +0 -121
- package/dist/cli-bundle/chunks/chunk-ZD34OFFQ.js +0 -366
- package/dist/cli-bundle/chunks/chunk-ZJB3UV5U.js +0 -2306
- package/dist/cli-bundle/chunks/chunk-ZMD35NYG.js +0 -61
- package/dist/cli-bundle/chunks/chunk-ZVDL32GJ.js +0 -241
- package/dist/cli-bundle/chunks/chunk-ZVDL32GJ.js.map +0 -7
- package/dist/cli-bundle/chunks/claim-4DROPSIS.js +0 -144
- package/dist/cli-bundle/chunks/claim-4DROPSIS.js.map +0 -1
- package/dist/cli-bundle/chunks/claim-VX54TV5U.js +0 -147
- package/dist/cli-bundle/chunks/claim-VX54TV5U.js.map +0 -7
- package/dist/cli-bundle/chunks/close-3YRR3XY6.js +0 -20
- package/dist/cli-bundle/chunks/close-OB2Y4QP5.js +0 -16
- package/dist/cli-bundle/chunks/close-many-AP4MWU36.js +0 -397
- package/dist/cli-bundle/chunks/close-many-AP4MWU36.js.map +0 -1
- package/dist/cli-bundle/chunks/close-many-OMZIGZB4.js +0 -400
- package/dist/cli-bundle/chunks/close-many-OMZIGZB4.js.map +0 -7
- package/dist/cli-bundle/chunks/comments-MIW5MZOX.js +0 -128
- package/dist/cli-bundle/chunks/comments-MIW5MZOX.js.map +0 -7
- package/dist/cli-bundle/chunks/comments-SAG5LSKL.js +0 -125
- package/dist/cli-bundle/chunks/comments-SAG5LSKL.js.map +0 -1
- package/dist/cli-bundle/chunks/config-DJJKZB5R.js +0 -1075
- package/dist/cli-bundle/chunks/config-DJJKZB5R.js.map +0 -7
- package/dist/cli-bundle/chunks/config-V57QD47V.js +0 -1065
- package/dist/cli-bundle/chunks/config-V57QD47V.js.map +0 -1
- package/dist/cli-bundle/chunks/context-4OQGIPSO.js +0 -45
- package/dist/cli-bundle/chunks/context-WLA6IAWE.js +0 -49
- package/dist/cli-bundle/chunks/contracts-HXJLKCRI.js +0 -12
- package/dist/cli-bundle/chunks/contracts-OJEXMKVW.js +0 -16
- package/dist/cli-bundle/chunks/copy-LEE6P6EM.js +0 -184
- package/dist/cli-bundle/chunks/copy-LEE6P6EM.js.map +0 -7
- package/dist/cli-bundle/chunks/copy-OTJOWFL6.js +0 -181
- package/dist/cli-bundle/chunks/copy-OTJOWFL6.js.map +0 -1
- package/dist/cli-bundle/chunks/create-WKOZKPQR.js +0 -30
- package/dist/cli-bundle/chunks/create-XWWQFQ6S.js +0 -34
- package/dist/cli-bundle/chunks/delete-62JQTYT4.js +0 -59
- package/dist/cli-bundle/chunks/delete-62JQTYT4.js.map +0 -7
- package/dist/cli-bundle/chunks/delete-HQKGRNRZ.js +0 -56
- package/dist/cli-bundle/chunks/delete-HQKGRNRZ.js.map +0 -1
- package/dist/cli-bundle/chunks/deps-55FTG6Z5.js +0 -224
- package/dist/cli-bundle/chunks/deps-55FTG6Z5.js.map +0 -1
- package/dist/cli-bundle/chunks/deps-L2FPIAD3.js +0 -227
- package/dist/cli-bundle/chunks/deps-L2FPIAD3.js.map +0 -7
- package/dist/cli-bundle/chunks/docs-6CRCSVKK.js +0 -33
- package/dist/cli-bundle/chunks/docs-6CRCSVKK.js.map +0 -1
- package/dist/cli-bundle/chunks/docs-S6UTOTO5.js +0 -36
- package/dist/cli-bundle/chunks/docs-S6UTOTO5.js.map +0 -7
- package/dist/cli-bundle/chunks/eval-N6UHFWVO.js +0 -288
- package/dist/cli-bundle/chunks/eval-N6UHFWVO.js.map +0 -7
- package/dist/cli-bundle/chunks/eval-PHOTWYHI.js +0 -278
- package/dist/cli-bundle/chunks/eval-PHOTWYHI.js.map +0 -1
- package/dist/cli-bundle/chunks/extension-NBAH62ML.js +0 -40
- package/dist/cli-bundle/chunks/extension-ZF6ZZPOU.js +0 -44
- package/dist/cli-bundle/chunks/files-6P57MRKL.js +0 -301
- package/dist/cli-bundle/chunks/files-6P57MRKL.js.map +0 -7
- package/dist/cli-bundle/chunks/files-JPU3FNJ7.js +0 -298
- package/dist/cli-bundle/chunks/files-JPU3FNJ7.js.map +0 -1
- package/dist/cli-bundle/chunks/focus-LFZ6IDBR.js +0 -106
- package/dist/cli-bundle/chunks/focus-LFZ6IDBR.js.map +0 -1
- package/dist/cli-bundle/chunks/focus-WNMYCVYA.js +0 -109
- package/dist/cli-bundle/chunks/focus-WNMYCVYA.js.map +0 -7
- package/dist/cli-bundle/chunks/gc-AETFKZ44.js +0 -398
- package/dist/cli-bundle/chunks/gc-AETFKZ44.js.map +0 -7
- package/dist/cli-bundle/chunks/gc-RLBP4QVN.js +0 -388
- package/dist/cli-bundle/chunks/gc-RLBP4QVN.js.map +0 -1
- package/dist/cli-bundle/chunks/get-NH2MPBCI.js +0 -283
- package/dist/cli-bundle/chunks/get-NH2MPBCI.js.map +0 -1
- package/dist/cli-bundle/chunks/get-P4ZQXCPZ.js +0 -286
- package/dist/cli-bundle/chunks/get-P4ZQXCPZ.js.map +0 -7
- package/dist/cli-bundle/chunks/health-3GVPMQBL.js +0 -1612
- package/dist/cli-bundle/chunks/health-3GVPMQBL.js.map +0 -1
- package/dist/cli-bundle/chunks/health-DNTM72GJ.js +0 -1615
- package/dist/cli-bundle/chunks/health-DNTM72GJ.js.map +0 -7
- package/dist/cli-bundle/chunks/history-RYKLC72X.js +0 -20
- package/dist/cli-bundle/chunks/history-SGPYRAFT.js +0 -24
- package/dist/cli-bundle/chunks/history-compact-3F6VELO7.js +0 -565
- package/dist/cli-bundle/chunks/history-compact-3F6VELO7.js.map +0 -7
- package/dist/cli-bundle/chunks/history-compact-656Y2TN4.js +0 -555
- package/dist/cli-bundle/chunks/history-compact-656Y2TN4.js.map +0 -1
- package/dist/cli-bundle/chunks/history-redact-4H3FCKF3.js +0 -21
- package/dist/cli-bundle/chunks/history-redact-54ICFKXM.js +0 -25
- package/dist/cli-bundle/chunks/history-repair-4N6SDVHK.js +0 -281
- package/dist/cli-bundle/chunks/history-repair-4N6SDVHK.js.map +0 -7
- package/dist/cli-bundle/chunks/history-repair-EVTO6LIH.js +0 -278
- package/dist/cli-bundle/chunks/history-repair-EVTO6LIH.js.map +0 -1
- package/dist/cli-bundle/chunks/init-RPIPQUNV.js +0 -32
- package/dist/cli-bundle/chunks/init-SKQAESQS.js +0 -28
- package/dist/cli-bundle/chunks/learnings-2HTPZNGZ.js +0 -48
- package/dist/cli-bundle/chunks/learnings-2HTPZNGZ.js.map +0 -7
- package/dist/cli-bundle/chunks/learnings-YBIHY3D6.js +0 -45
- package/dist/cli-bundle/chunks/learnings-YBIHY3D6.js.map +0 -1
- package/dist/cli-bundle/chunks/list-64LHZ3HM.js +0 -32
- package/dist/cli-bundle/chunks/list-7LXBTEKI.js +0 -36
- package/dist/cli-bundle/chunks/next-7ODPAQ4U.js +0 -306
- package/dist/cli-bundle/chunks/next-7ODPAQ4U.js.map +0 -7
- package/dist/cli-bundle/chunks/next-ODJUM4ZM.js +0 -303
- package/dist/cli-bundle/chunks/next-ODJUM4ZM.js.map +0 -1
- package/dist/cli-bundle/chunks/notes-72YXN5JX.js +0 -48
- package/dist/cli-bundle/chunks/notes-72YXN5JX.js.map +0 -7
- package/dist/cli-bundle/chunks/notes-NJ7IQJX4.js +0 -45
- package/dist/cli-bundle/chunks/notes-NJ7IQJX4.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-R4NDQ27E.js +0 -1366
- package/dist/cli-bundle/chunks/plan-R4NDQ27E.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-XWY5T67S.js +0 -1363
- package/dist/cli-bundle/chunks/plan-XWY5T67S.js.map +0 -1
- package/dist/cli-bundle/chunks/profile-XQWEQKS3.js +0 -397
- package/dist/cli-bundle/chunks/profile-XQWEQKS3.js.map +0 -1
- package/dist/cli-bundle/chunks/profile-YRDHLMRO.js +0 -400
- package/dist/cli-bundle/chunks/profile-YRDHLMRO.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-5H66WFYF.js +0 -419
- package/dist/cli-bundle/chunks/register-list-query-FB3FNDLZ.js +0 -409
- package/dist/cli-bundle/chunks/register-mutation-UJO23C7R.js +0 -1256
- package/dist/cli-bundle/chunks/register-mutation-Z2ETYHKS.js +0 -1273
- package/dist/cli-bundle/chunks/register-operations-A3XAM5J7.js +0 -513
- package/dist/cli-bundle/chunks/register-operations-A3XAM5J7.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-SG7HBSUP.js +0 -516
- package/dist/cli-bundle/chunks/register-operations-SG7HBSUP.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-I45OGJUV.js +0 -323
- package/dist/cli-bundle/chunks/register-setup-I45OGJUV.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-K6U3NVY5.js +0 -326
- package/dist/cli-bundle/chunks/register-setup-K6U3NVY5.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-PXOFL6AM.js +0 -19
- package/dist/cli-bundle/chunks/restore-YJ2ET6AT.js +0 -23
- package/dist/cli-bundle/chunks/scheduling-shortcuts-SSC4MYWQ.js +0 -91
- package/dist/cli-bundle/chunks/scheduling-shortcuts-SSC4MYWQ.js.map +0 -7
- package/dist/cli-bundle/chunks/scheduling-shortcuts-ULRG7MNP.js +0 -88
- package/dist/cli-bundle/chunks/scheduling-shortcuts-ULRG7MNP.js.map +0 -1
- package/dist/cli-bundle/chunks/schema-2PUXCZ25.js +0 -74
- package/dist/cli-bundle/chunks/schema-Y6DXXK2F.js +0 -78
- package/dist/cli-bundle/chunks/search-3S72CTD6.js +0 -38
- package/dist/cli-bundle/chunks/search-WNUNBQXO.js +0 -34
- package/dist/cli-bundle/chunks/stats-IJYTRQGV.js +0 -250
- package/dist/cli-bundle/chunks/stats-IJYTRQGV.js.map +0 -7
- package/dist/cli-bundle/chunks/stats-L2D5Y2O5.js +0 -240
- package/dist/cli-bundle/chunks/stats-L2D5Y2O5.js.map +0 -1
- package/dist/cli-bundle/chunks/telemetry-L2CVOKVN.js +0 -309
- package/dist/cli-bundle/chunks/telemetry-L2CVOKVN.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-QBYWQA76.js +0 -306
- package/dist/cli-bundle/chunks/telemetry-QBYWQA76.js.map +0 -1
- package/dist/cli-bundle/chunks/test-DQ2QFJ7W.js +0 -45
- package/dist/cli-bundle/chunks/test-W7QBLVJS.js +0 -41
- package/dist/cli-bundle/chunks/test-all-636NTRTT.js +0 -434
- package/dist/cli-bundle/chunks/test-all-636NTRTT.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-DWYK3RG6.js +0 -437
- package/dist/cli-bundle/chunks/test-all-DWYK3RG6.js.map +0 -7
- package/dist/cli-bundle/chunks/test-runs-245OINZR.js +0 -28
- package/dist/cli-bundle/chunks/test-runs-ZRD4GCTT.js +0 -24
- package/dist/cli-bundle/chunks/update-SFLZPJXX.js +0 -30
- package/dist/cli-bundle/chunks/update-SJZ6S77U.js +0 -26
- package/dist/cli-bundle/chunks/update-many-DC7X3EWM.js +0 -671
- package/dist/cli-bundle/chunks/update-many-DC7X3EWM.js.map +0 -7
- package/dist/cli-bundle/chunks/update-many-SLLAMHT7.js +0 -668
- package/dist/cli-bundle/chunks/update-many-SLLAMHT7.js.map +0 -1
- package/dist/cli-bundle/chunks/upgrade-HFFXLZJA.js +0 -290
- package/dist/cli-bundle/chunks/upgrade-HFFXLZJA.js.map +0 -7
- package/dist/cli-bundle/chunks/upgrade-UYQKM7RF.js +0 -287
- package/dist/cli-bundle/chunks/upgrade-UYQKM7RF.js.map +0 -1
- package/dist/cli-bundle/chunks/validate-PA4FDTOV.js +0 -2143
- package/dist/cli-bundle/chunks/validate-PA4FDTOV.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-Z7L75YEJ.js +0 -2105
- package/dist/cli-bundle/chunks/validate-Z7L75YEJ.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-4XQIDNM5.js.map → activity-WJCGCYPU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-YKAKZTZ4.js.map → activity-Z6QUAUSG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-3YRR3XY6.js.map → aggregate-BDM6EIAR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-OB2Y4QP5.js.map → aggregate-VQ2DHU3S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-WLA6IAWE.js.map → append-BGML6VLD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-4OQGIPSO.js.map → append-RKJYPU74.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YFIE7YK6.js.map → chunk-22KBU3MW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DLQ4ZTCU.js.map → chunk-24YG75HI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KLG4ZULO.js.map → chunk-2XG4IZON.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FJRKQREY.js.map → chunk-3GCS5SKL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5B3X4Y22.js.map → chunk-3KTN6IBA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YMABYTNG.js.map → chunk-3UJRFJ5R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YSAH5FY5.js.map → chunk-3VHSI5FL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7EQNAZX2.js.map → chunk-46CUF5L6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-75U6M5ZD.js.map → chunk-4IWYTWGF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VZIYHZDX.js.map → chunk-5GZ7TDD6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3U3VEWK6.js.map → chunk-5VAA4YHR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3PL6LEKP.js.map → chunk-64YKRTSV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ABRA3BHY.js.map → chunk-6LLVNJXT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EEY54JMF.js.map → chunk-7DT4WSH2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7MDXZAZS.js.map → chunk-7WBAJSS6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AAEQMOC6.js.map → chunk-AGHMOTGM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OWTIRHX4.js.map → chunk-ALFPSEWO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T3ABIMGW.js.map → chunk-AZYGZGGI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3JZNEQBA.js.map → chunk-B6DUFX6H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OESSOFJ4.js.map → chunk-C5JBZRPU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YPPVU5GX.js.map → chunk-CFB33L7W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5J2XPTAD.js.map → chunk-CL36D4PC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IJ6CO3JV.js.map → chunk-D2XRLB55.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MNZ7DRNC.js.map → chunk-DEWEK6AN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-US3T3W5J.js.map → chunk-E3SZTQ4K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-C3PMDWGX.js.map → chunk-EGY6JBQ3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JLA7EVYV.js.map → chunk-EKFNL33R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-57C2RLW5.js.map → chunk-ENGQOEUY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7QH7DHUB.js.map → chunk-EOKXK3R3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZCJAA3JK.js.map → chunk-F3K4JGFD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DRBV5UC2.js.map → chunk-FLZSGSQR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Y76TWC45.js.map → chunk-FT3QTERD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HK72NWAD.js.map → chunk-G24G7ZAV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K3AGVXSF.js.map → chunk-G64OCSKU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QHZO65XW.js.map → chunk-GANUTS7W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WISPVC2E.js.map → chunk-GBAX2ZAQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RCT3YJOK.js.map → chunk-GJ7QC5DJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BVEUCSH2.js.map → chunk-GPLPTGOV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YZIR4R3U.js.map → chunk-GZRDYONU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7WYXBPYQ.js.map → chunk-IWVU4C2F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T3F4DF23.js.map → chunk-IX5BXEMX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RX3HQSYG.js.map → chunk-JDDLOQAE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YOF5VPKM.js.map → chunk-JJP45OEI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TT42JUMF.js.map → chunk-K46RF36U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-R3ZBLGTC.js.map → chunk-KGFUY7WN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NER3KUUS.js.map → chunk-KUOOJR35.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3Y4OESPP.js.map → chunk-L5PSPMZ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PJ3A56YF.js.map → chunk-LPSSSDJR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FDBARR33.js.map → chunk-MA4SM3QZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PPAJG4GB.js.map → chunk-MFAZSEM5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5JZ7APJU.js.map → chunk-MFSCBT5Q.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4OFLJHX6.js.map → chunk-MLIYFOE7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZMD35NYG.js.map → chunk-MUH7A3FD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5JE6SMYS.js.map → chunk-MVYWGY2A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P5TFTLWW.js.map → chunk-MWMVPCIE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T35XLYZF.js.map → chunk-NGXQ3PFT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EZFKWSC7.js.map → chunk-NMP5I3I5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HJE4JTKQ.js.map → chunk-O6AWCQRQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BFVHCAOO.js.map → chunk-OGWQ2IEP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-S4APD35C.js.map → chunk-QLMX7SRD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MZ7VNEVY.js.map → chunk-RFNYTESG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MTTXDAK4.js.map → chunk-SCUR7K7N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P5YORJRH.js.map → chunk-SHQY2IDC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-S5AYOUT5.js.map → chunk-SMB7RV23.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N7X4WP6L.js.map → chunk-SPZ6DOGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P3VRG72Q.js.map → chunk-SQYJ4HF2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4LRVSBO6.js.map → chunk-T42JWV3F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NBFCNJ7Q.js.map → chunk-TULGS6X6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZJB3UV5U.js.map → chunk-TZXRBVAM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZD34OFFQ.js.map → chunk-VPIM42PC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FGQKEDE4.js.map → chunk-W3DSJQIO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4QQ6PM7M.js.map → chunk-W572BIEB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z2CRRZYF.js.map → chunk-WRTENIX3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZAHXPXVY.js.map → chunk-XB7KFVFI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PDXT6Q55.js.map → chunk-XG625QP4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D3UCE7RW.js.map → chunk-XUC7PI2H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N6DNM2FA.js.map → chunk-Y46GD4IX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FUM6UMY4.js.map → chunk-Y4M7CPQP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HBYZDSK5.js.map → chunk-YN7Y6DQZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YQMMMONE.js.map → chunk-ZGK4L4JM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LEKT4K7I.js.map → chunk-ZSUS2OD3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TSPKZRRW.js.map → chunk-ZZD4J5XY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-HXJLKCRI.js.map → claim-RFS7BROJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-OJEXMKVW.js.map → claim-XP5AWZ5H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-XWWQFQ6S.js.map → close-2SSSHHUZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-WKOZKPQR.js.map → close-GEANHQ2J.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-ZF6ZZPOU.js.map → close-many-CMZW7ITN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-NBAH62ML.js.map → close-many-ZFDIG6M7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-SGPYRAFT.js.map → comments-MFSYVNNU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-RYKLC72X.js.map → comments-XUBPXDYX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-4H3FCKF3.js.map → config-D7XQMONX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-54ICFKXM.js.map → config-T4FHBSYN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-RPIPQUNV.js.map → context-DIU275XI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-SKQAESQS.js.map → context-JCOYB4LZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-64LHZ3HM.js.map → contracts-BVO7CSLK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-7LXBTEKI.js.map → contracts-NYPEW2G4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-YJ2ET6AT.js.map → copy-32ROBIDL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-PXOFL6AM.js.map → copy-NAGLGMHZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-2PUXCZ25.js.map → create-4V7SWNBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-Y6DXXK2F.js.map → create-E77SDCUP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-WNUNBQXO.js.map → delete-NQI5OSKN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-3S72CTD6.js.map → delete-RA5KTCLB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-DQ2QFJ7W.js.map → deps-32SU7HO5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-W7QBLVJS.js.map → deps-T7SCWXEX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-245OINZR.js.map → docs-RRUPT7O2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-ZRD4GCTT.js.map → docs-WL2IWGWV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-SJZ6S77U.js.map → eval-NF2J5SHR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-SFLZPJXX.js.map → eval-SKDT3MZU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-FB3FNDLZ.js.map → register-list-query-B42JCCOI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-5H66WFYF.js.map → register-list-query-OEYQHFXO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-Z2ETYHKS.js.map → register-mutation-3QXIHCQG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-UJO23C7R.js.map → register-mutation-IAEST26S.js.map} +0 -0
|
@@ -1,2132 +0,0 @@
|
|
|
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]="3b2e2c0b-d9a3-51c6-ba51-0bad9aa69284")}catch(e){}}();
|
|
3
|
-
import {
|
|
4
|
-
looksLikeStructuredLinkedTestEntry,
|
|
5
|
-
normalizeStructuredLinkedTestEntry,
|
|
6
|
-
parseLinkedTestAssertionEqualsMap,
|
|
7
|
-
parseLinkedTestAssertionGteMap,
|
|
8
|
-
parseLinkedTestBoolean,
|
|
9
|
-
parseLinkedTestContextMode,
|
|
10
|
-
parseLinkedTestEnvClear,
|
|
11
|
-
parseLinkedTestEnvSet,
|
|
12
|
-
parseLinkedTestMinLines,
|
|
13
|
-
parseLinkedTestRegexList,
|
|
14
|
-
parseLinkedTestStringList
|
|
15
|
-
} from "./chunk-MZ7VNEVY.js";
|
|
16
|
-
import {
|
|
17
|
-
assertNoUnknownCsvKeys,
|
|
18
|
-
createStdinTokenResolver,
|
|
19
|
-
looksLikeGenericKeyValueEntry,
|
|
20
|
-
mergeAdditiveTags,
|
|
21
|
-
parseCsvKv,
|
|
22
|
-
parseOptionalNumber,
|
|
23
|
-
parseTags
|
|
24
|
-
} from "./chunk-7WYXBPYQ.js";
|
|
25
|
-
import {
|
|
26
|
-
getFocusedItem
|
|
27
|
-
} from "./chunk-PDXT6Q55.js";
|
|
28
|
-
import {
|
|
29
|
-
printError
|
|
30
|
-
} from "./chunk-4OFLJHX6.js";
|
|
31
|
-
import {
|
|
32
|
-
acquireLock,
|
|
33
|
-
appendHistoryEntry,
|
|
34
|
-
applyRegisteredItemFieldDefaultsAndValidation,
|
|
35
|
-
collectRegisteredItemFieldNames,
|
|
36
|
-
createHistoryEntry,
|
|
37
|
-
locateItem,
|
|
38
|
-
parseRegisteredItemFieldAssignments
|
|
39
|
-
} from "./chunk-57C2RLW5.js";
|
|
40
|
-
import {
|
|
41
|
-
assertParentReferenceIsNotSelf,
|
|
42
|
-
isPlaceholderReferenceToken,
|
|
43
|
-
normalizeParentReferenceValue,
|
|
44
|
-
validateMissingParentReference,
|
|
45
|
-
validateSprintOrReleaseValue
|
|
46
|
-
} from "./chunk-7MDXZAZS.js";
|
|
47
|
-
import {
|
|
48
|
-
canonicalDocument,
|
|
49
|
-
collectRuntimeCreateFieldValues,
|
|
50
|
-
generateItemId,
|
|
51
|
-
normalizeFrontMatter,
|
|
52
|
-
normalizeItemId,
|
|
53
|
-
normalizeStatusInput,
|
|
54
|
-
serializeItemDocument
|
|
55
|
-
} from "./chunk-HK72NWAD.js";
|
|
56
|
-
import {
|
|
57
|
-
nowIso,
|
|
58
|
-
resolveIsoOrRelative
|
|
59
|
-
} from "./chunk-FJRKQREY.js";
|
|
60
|
-
import {
|
|
61
|
-
PmCliError,
|
|
62
|
-
getActiveExtensionRegistrations,
|
|
63
|
-
projectAfterCommandItemSnapshot,
|
|
64
|
-
readSettings,
|
|
65
|
-
recordAfterCommandAffectedItem,
|
|
66
|
-
runActiveCommandHandler,
|
|
67
|
-
runActiveOnWriteHooks
|
|
68
|
-
} from "./chunk-US3T3W5J.js";
|
|
69
|
-
import {
|
|
70
|
-
buildInvalidTypeError
|
|
71
|
-
} from "./chunk-NER3KUUS.js";
|
|
72
|
-
import {
|
|
73
|
-
CONFIDENCE_TEXT_VALUES,
|
|
74
|
-
CREATE_DIRECT_CLOSE_REASON_DEFAULT,
|
|
75
|
-
DEPENDENCY_KIND_VALUES,
|
|
76
|
-
EXIT_CODE,
|
|
77
|
-
FRONT_MATTER_KEY_ORDER,
|
|
78
|
-
ISSUE_SEVERITY_VALUES,
|
|
79
|
-
RECURRENCE_FREQUENCY_VALUES,
|
|
80
|
-
RECURRENCE_WEEKDAY_VALUES,
|
|
81
|
-
RISK_VALUES,
|
|
82
|
-
SCOPE_VALUES,
|
|
83
|
-
canonicalizeCommandOptionKey,
|
|
84
|
-
commandOptionFlagLabel,
|
|
85
|
-
getHistoryPath,
|
|
86
|
-
getItemPath,
|
|
87
|
-
getSettingsPath,
|
|
88
|
-
normalizeStatusInputWithRegistry,
|
|
89
|
-
pathExists,
|
|
90
|
-
removeFileIfExists,
|
|
91
|
-
resolveCommandOptionPolicyState,
|
|
92
|
-
resolveItemTypeRegistry,
|
|
93
|
-
resolveItemTypesFilePath,
|
|
94
|
-
resolvePmRoot,
|
|
95
|
-
resolveRuntimeFieldRegistry,
|
|
96
|
-
resolveRuntimeStatusRegistry,
|
|
97
|
-
resolveTypeDefinition,
|
|
98
|
-
resolveTypeName,
|
|
99
|
-
validateTypeOptions,
|
|
100
|
-
weekdayOrderIndex,
|
|
101
|
-
writeFileAtomic
|
|
102
|
-
} from "./chunk-YD5FML7K.js";
|
|
103
|
-
|
|
104
|
-
// dist/core/item/priority.js
|
|
105
|
-
var PRIORITY_NAME_TO_VALUE = {
|
|
106
|
-
critical: 0,
|
|
107
|
-
high: 1,
|
|
108
|
-
medium: 2,
|
|
109
|
-
low: 3,
|
|
110
|
-
minimal: 4
|
|
111
|
-
};
|
|
112
|
-
var PRIORITY_NAME_LIST = Object.keys(PRIORITY_NAME_TO_VALUE);
|
|
113
|
-
var PRIORITY_ACCEPTED_FORMS_HINT = `numbers 0..4 (0=critical, 1=high, 2=medium, 3=low, 4=minimal) or names (${PRIORITY_NAME_LIST.join(", ")}), case-insensitive`;
|
|
114
|
-
function priorityUsageError(raw) {
|
|
115
|
-
return new PmCliError(`Invalid priority "${raw}". Accepted values: ${PRIORITY_ACCEPTED_FORMS_HINT}.`, EXIT_CODE.USAGE);
|
|
116
|
-
}
|
|
117
|
-
function resolvePriority(raw) {
|
|
118
|
-
if (typeof raw === "number") {
|
|
119
|
-
if (Number.isInteger(raw) && raw >= 0 && raw <= 4) {
|
|
120
|
-
return raw;
|
|
121
|
-
}
|
|
122
|
-
throw priorityUsageError(String(raw));
|
|
123
|
-
}
|
|
124
|
-
if (typeof raw !== "string") {
|
|
125
|
-
throw priorityUsageError(String(raw));
|
|
126
|
-
}
|
|
127
|
-
const trimmed = raw.trim();
|
|
128
|
-
if (trimmed.length === 0) {
|
|
129
|
-
throw priorityUsageError(raw);
|
|
130
|
-
}
|
|
131
|
-
const normalizedName = trimmed.toLowerCase();
|
|
132
|
-
if (Object.prototype.hasOwnProperty.call(PRIORITY_NAME_TO_VALUE, normalizedName)) {
|
|
133
|
-
return PRIORITY_NAME_TO_VALUE[normalizedName];
|
|
134
|
-
}
|
|
135
|
-
if (/^[0-4]$/.test(trimmed)) {
|
|
136
|
-
return Number(trimmed);
|
|
137
|
-
}
|
|
138
|
-
throw priorityUsageError(raw);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// dist/core/item/type-synonyms.js
|
|
142
|
-
var TYPE_SYNONYMS = {
|
|
143
|
-
bug: "Issue",
|
|
144
|
-
bugfix: "Issue",
|
|
145
|
-
defect: "Issue",
|
|
146
|
-
incident: "Issue",
|
|
147
|
-
enhancement: "Feature",
|
|
148
|
-
story: "Feature",
|
|
149
|
-
userstory: "Feature",
|
|
150
|
-
"user-story": "Feature",
|
|
151
|
-
"user story": "Feature",
|
|
152
|
-
change: "Chore",
|
|
153
|
-
ticket: "Task",
|
|
154
|
-
todo: "Task"
|
|
155
|
-
};
|
|
156
|
-
function resolveTypeSynonym(rawType) {
|
|
157
|
-
if (rawType === void 0) {
|
|
158
|
-
return void 0;
|
|
159
|
-
}
|
|
160
|
-
return TYPE_SYNONYMS[rawType.trim().toLowerCase()];
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// dist/cli/commands/metadata-normalizers.js
|
|
164
|
-
function normalizeRiskInput(value) {
|
|
165
|
-
const trimmed = value.trim();
|
|
166
|
-
return trimmed.toLowerCase() === "med" ? "medium" : trimmed;
|
|
167
|
-
}
|
|
168
|
-
function normalizeSeverityInput(value) {
|
|
169
|
-
const trimmed = value.trim();
|
|
170
|
-
return trimmed.toLowerCase() === "med" ? "medium" : trimmed;
|
|
171
|
-
}
|
|
172
|
-
function parseConfidenceInput(value) {
|
|
173
|
-
const trimmed = value.trim().toLowerCase();
|
|
174
|
-
if (trimmed === "med") {
|
|
175
|
-
return "medium";
|
|
176
|
-
}
|
|
177
|
-
if (CONFIDENCE_TEXT_VALUES.includes(trimmed)) {
|
|
178
|
-
return trimmed;
|
|
179
|
-
}
|
|
180
|
-
const parsed = parseOptionalNumber(value, "confidence");
|
|
181
|
-
if (!Number.isInteger(parsed) || parsed < 0 || parsed > 100) {
|
|
182
|
-
throw new PmCliError("Confidence must be an integer 0..100 or one of low|med|medium|high", EXIT_CODE.USAGE);
|
|
183
|
-
}
|
|
184
|
-
return parsed;
|
|
185
|
-
}
|
|
186
|
-
function parseRegressionInput(value) {
|
|
187
|
-
const normalized = value.trim().toLowerCase();
|
|
188
|
-
if (normalized === "true" || normalized === "1") {
|
|
189
|
-
return true;
|
|
190
|
-
}
|
|
191
|
-
if (normalized === "false" || normalized === "0") {
|
|
192
|
-
return false;
|
|
193
|
-
}
|
|
194
|
-
throw new PmCliError("Regression must be one of true|false|1|0", EXIT_CODE.USAGE);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// dist/cli/commands/legacy-none-tokens.js
|
|
198
|
-
var LEGACY_NONE_TOKENS = /* @__PURE__ */ new Set(["none", "null"]);
|
|
199
|
-
function isLegacyNoneToken(value) {
|
|
200
|
-
if (value === void 0) {
|
|
201
|
-
return false;
|
|
202
|
-
}
|
|
203
|
-
return LEGACY_NONE_TOKENS.has(value.trim().toLowerCase());
|
|
204
|
-
}
|
|
205
|
-
function assertNoLegacyNoneToken(value, flag, replacementHint) {
|
|
206
|
-
if (!isLegacyNoneToken(value)) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
const suffix = replacementHint ? ` ${replacementHint}` : "";
|
|
210
|
-
throw new PmCliError(`${flag} no longer accepts "none" or "null".${suffix}`.trim(), EXIT_CODE.USAGE);
|
|
211
|
-
}
|
|
212
|
-
function assertNoLegacyNoneTokens(values, flag, replacementHint) {
|
|
213
|
-
if (!values || values.length === 0) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const hasLegacyToken = values.some((value) => isLegacyNoneToken(value));
|
|
217
|
-
if (!hasLegacyToken) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
const suffix = replacementHint ? ` ${replacementHint}` : "";
|
|
221
|
-
throw new PmCliError(`${flag} no longer accepts "none" or "null".${suffix}`.trim(), EXIT_CODE.USAGE);
|
|
222
|
-
}
|
|
223
|
-
function applyLegacyNoneCollectionNormalizers(normalized, definitions) {
|
|
224
|
-
for (const definition of definitions) {
|
|
225
|
-
const candidate = normalized[definition.optionKey];
|
|
226
|
-
if (!Array.isArray(candidate) || candidate.length === 0) {
|
|
227
|
-
continue;
|
|
228
|
-
}
|
|
229
|
-
if (!candidate.every((entry) => typeof entry === "string")) {
|
|
230
|
-
throw new PmCliError(`${definition.valueFlag} entries must be strings.`, EXIT_CODE.USAGE);
|
|
231
|
-
}
|
|
232
|
-
const entries = candidate;
|
|
233
|
-
const hasLegacy = entries.some((entry) => isLegacyNoneToken(entry));
|
|
234
|
-
if (!hasLegacy) {
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
const concreteEntries = entries.filter((entry) => !isLegacyNoneToken(entry));
|
|
238
|
-
if (concreteEntries.length > 0) {
|
|
239
|
-
throw new PmCliError(`Cannot mix legacy clear token "none"/"null" with concrete ${definition.valueFlag} entries. Use ${definition.clearFlag} to clear or provide explicit entries.`, EXIT_CODE.USAGE);
|
|
240
|
-
}
|
|
241
|
-
normalized[definition.optionKey] = void 0;
|
|
242
|
-
normalized[definition.clearFlagKey] = true;
|
|
243
|
-
if (definition.disableFlagKey) {
|
|
244
|
-
normalized[definition.disableFlagKey] = false;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
return normalized;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// dist/cli/commands/lifecycle-transitions.js
|
|
251
|
-
var NON_WORKABLE_TYPES = /* @__PURE__ */ new Set([
|
|
252
|
-
"event",
|
|
253
|
-
"meeting",
|
|
254
|
-
"reminder",
|
|
255
|
-
"milestone",
|
|
256
|
-
"decision",
|
|
257
|
-
"adr"
|
|
258
|
-
]);
|
|
259
|
-
function suggestNextLifecycleTransition(id, type, status, statusRegistry) {
|
|
260
|
-
if (NON_WORKABLE_TYPES.has(type.trim().toLowerCase())) {
|
|
261
|
-
return void 0;
|
|
262
|
-
}
|
|
263
|
-
if (status !== statusRegistry.open_status) {
|
|
264
|
-
return void 0;
|
|
265
|
-
}
|
|
266
|
-
const inProgress = normalizeStatusInputWithRegistry("in_progress", statusRegistry);
|
|
267
|
-
if (inProgress === void 0 || inProgress === statusRegistry.open_status) {
|
|
268
|
-
return void 0;
|
|
269
|
-
}
|
|
270
|
-
return { command: `pm start-task ${id}`, to_status: inProgress };
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// dist/cli/commands/shared-unset-fields.js
|
|
274
|
-
var COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON = [
|
|
275
|
-
{ canonical: "tags", aliases: ["tags"], optionKey: "tags", frontMatterKey: "tags" }
|
|
276
|
-
];
|
|
277
|
-
var COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR = [
|
|
278
|
-
{ canonical: "deadline", aliases: ["deadline"], optionKey: "deadline", frontMatterKey: "deadline" },
|
|
279
|
-
{
|
|
280
|
-
canonical: "estimate",
|
|
281
|
-
aliases: ["estimate", "estimated_minutes", "estimated-minutes"],
|
|
282
|
-
optionKey: "estimatedMinutes",
|
|
283
|
-
frontMatterKey: "estimated_minutes"
|
|
284
|
-
},
|
|
285
|
-
{
|
|
286
|
-
canonical: "acceptance-criteria",
|
|
287
|
-
aliases: ["acceptance_criteria", "acceptance-criteria", "ac"],
|
|
288
|
-
optionKey: "acceptanceCriteria",
|
|
289
|
-
frontMatterKey: "acceptance_criteria"
|
|
290
|
-
},
|
|
291
|
-
{
|
|
292
|
-
canonical: "definition-of-ready",
|
|
293
|
-
aliases: ["definition_of_ready", "definition-of-ready"],
|
|
294
|
-
optionKey: "definitionOfReady",
|
|
295
|
-
frontMatterKey: "definition_of_ready"
|
|
296
|
-
},
|
|
297
|
-
{ canonical: "order", aliases: ["order", "rank"], optionKey: "order", frontMatterKey: "order" },
|
|
298
|
-
{ canonical: "goal", aliases: ["goal"], optionKey: "goal", frontMatterKey: "goal" },
|
|
299
|
-
{ canonical: "objective", aliases: ["objective"], optionKey: "objective", frontMatterKey: "objective" },
|
|
300
|
-
{ canonical: "value", aliases: ["value"], optionKey: "value", frontMatterKey: "value" },
|
|
301
|
-
{ canonical: "impact", aliases: ["impact"], optionKey: "impact", frontMatterKey: "impact" },
|
|
302
|
-
{ canonical: "outcome", aliases: ["outcome"], optionKey: "outcome", frontMatterKey: "outcome" },
|
|
303
|
-
{ canonical: "why-now", aliases: ["why_now", "why-now"], optionKey: "whyNow", frontMatterKey: "why_now" }
|
|
304
|
-
];
|
|
305
|
-
var COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR = [
|
|
306
|
-
...COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON,
|
|
307
|
-
...COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR
|
|
308
|
-
];
|
|
309
|
-
var COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR = [
|
|
310
|
-
{ canonical: "assignee", aliases: ["assignee"], optionKey: "assignee", frontMatterKey: "assignee" },
|
|
311
|
-
{ canonical: "parent", aliases: ["parent"], optionKey: "parent", frontMatterKey: "parent" },
|
|
312
|
-
{ canonical: "reviewer", aliases: ["reviewer"], optionKey: "reviewer", frontMatterKey: "reviewer" },
|
|
313
|
-
{ canonical: "risk", aliases: ["risk"], optionKey: "risk", frontMatterKey: "risk" },
|
|
314
|
-
{ canonical: "confidence", aliases: ["confidence"], optionKey: "confidence", frontMatterKey: "confidence" },
|
|
315
|
-
{ canonical: "sprint", aliases: ["sprint"], optionKey: "sprint", frontMatterKey: "sprint" },
|
|
316
|
-
{ canonical: "release", aliases: ["release"], optionKey: "release", frontMatterKey: "release" },
|
|
317
|
-
{
|
|
318
|
-
canonical: "blocked-by",
|
|
319
|
-
aliases: ["blocked_by", "blocked-by"],
|
|
320
|
-
optionKey: "blockedBy",
|
|
321
|
-
frontMatterKey: "blocked_by"
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
canonical: "blocked-reason",
|
|
325
|
-
aliases: ["blocked_reason", "blocked-reason"],
|
|
326
|
-
optionKey: "blockedReason",
|
|
327
|
-
frontMatterKey: "blocked_reason"
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
canonical: "unblock-note",
|
|
331
|
-
aliases: ["unblock_note", "unblock-note"],
|
|
332
|
-
optionKey: "unblockNote",
|
|
333
|
-
frontMatterKey: "unblock_note"
|
|
334
|
-
},
|
|
335
|
-
{ canonical: "reporter", aliases: ["reporter"], optionKey: "reporter", frontMatterKey: "reporter" },
|
|
336
|
-
{ canonical: "severity", aliases: ["severity"], optionKey: "severity", frontMatterKey: "severity" },
|
|
337
|
-
{
|
|
338
|
-
canonical: "environment",
|
|
339
|
-
aliases: ["environment"],
|
|
340
|
-
optionKey: "environment",
|
|
341
|
-
frontMatterKey: "environment"
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
canonical: "repro-steps",
|
|
345
|
-
aliases: ["repro_steps", "repro-steps"],
|
|
346
|
-
optionKey: "reproSteps",
|
|
347
|
-
frontMatterKey: "repro_steps"
|
|
348
|
-
},
|
|
349
|
-
{
|
|
350
|
-
canonical: "resolution",
|
|
351
|
-
aliases: ["resolution"],
|
|
352
|
-
optionKey: "resolution",
|
|
353
|
-
frontMatterKey: "resolution"
|
|
354
|
-
},
|
|
355
|
-
{
|
|
356
|
-
canonical: "expected-result",
|
|
357
|
-
aliases: ["expected_result", "expected-result"],
|
|
358
|
-
optionKey: "expectedResult",
|
|
359
|
-
frontMatterKey: "expected_result"
|
|
360
|
-
},
|
|
361
|
-
{
|
|
362
|
-
canonical: "actual-result",
|
|
363
|
-
aliases: ["actual_result", "actual-result"],
|
|
364
|
-
optionKey: "actualResult",
|
|
365
|
-
frontMatterKey: "actual_result"
|
|
366
|
-
},
|
|
367
|
-
{
|
|
368
|
-
canonical: "affected-version",
|
|
369
|
-
aliases: ["affected_version", "affected-version"],
|
|
370
|
-
optionKey: "affectedVersion",
|
|
371
|
-
frontMatterKey: "affected_version"
|
|
372
|
-
},
|
|
373
|
-
{
|
|
374
|
-
canonical: "fixed-version",
|
|
375
|
-
aliases: ["fixed_version", "fixed-version"],
|
|
376
|
-
optionKey: "fixedVersion",
|
|
377
|
-
frontMatterKey: "fixed_version"
|
|
378
|
-
},
|
|
379
|
-
{ canonical: "component", aliases: ["component"], optionKey: "component", frontMatterKey: "component" },
|
|
380
|
-
{ canonical: "regression", aliases: ["regression"], optionKey: "regression", frontMatterKey: "regression" },
|
|
381
|
-
{
|
|
382
|
-
canonical: "customer-impact",
|
|
383
|
-
aliases: ["customer_impact", "customer-impact"],
|
|
384
|
-
optionKey: "customerImpact",
|
|
385
|
-
frontMatterKey: "customer_impact"
|
|
386
|
-
}
|
|
387
|
-
];
|
|
388
|
-
function parseCommandUnsetTargets(options) {
|
|
389
|
-
const frontMatterKeys = /* @__PURE__ */ new Set();
|
|
390
|
-
const optionKeys = /* @__PURE__ */ new Set();
|
|
391
|
-
if (!options.raw || options.raw.length === 0) {
|
|
392
|
-
return { frontMatterKeys, optionKeys };
|
|
393
|
-
}
|
|
394
|
-
for (const entry of options.raw) {
|
|
395
|
-
const trimmed = entry.trim().toLowerCase();
|
|
396
|
-
if (!trimmed) {
|
|
397
|
-
throw new PmCliError("--unset values must not be empty", EXIT_CODE.USAGE);
|
|
398
|
-
}
|
|
399
|
-
if (isLegacyNoneToken(trimmed)) {
|
|
400
|
-
throw new PmCliError('--unset no longer accepts "none" or "null". Specify concrete field names such as --unset deadline', EXIT_CODE.USAGE);
|
|
401
|
-
}
|
|
402
|
-
const definition = options.resolveDefinition(trimmed);
|
|
403
|
-
if (!definition) {
|
|
404
|
-
throw new PmCliError(`Unsupported --unset field "${entry}". Supported fields: ${options.supportedFields}`, EXIT_CODE.USAGE);
|
|
405
|
-
}
|
|
406
|
-
frontMatterKeys.add(definition.frontMatterKey);
|
|
407
|
-
optionKeys.add(definition.optionKey);
|
|
408
|
-
}
|
|
409
|
-
return { frontMatterKeys, optionKeys };
|
|
410
|
-
}
|
|
411
|
-
function resolveRuntimeUnsetFieldDefinition(token, command, runtimeFieldRegistry) {
|
|
412
|
-
const normalizedToken = token.trim().toLowerCase();
|
|
413
|
-
if (!runtimeFieldRegistry) {
|
|
414
|
-
return void 0;
|
|
415
|
-
}
|
|
416
|
-
const definitions = runtimeFieldRegistry.command_to_fields?.get(command) ?? [];
|
|
417
|
-
for (const definition of definitions) {
|
|
418
|
-
if (definition.allow_unset === false) {
|
|
419
|
-
continue;
|
|
420
|
-
}
|
|
421
|
-
const candidates = /* @__PURE__ */ new Set();
|
|
422
|
-
if (typeof definition.key === "string" && definition.key.length > 0) {
|
|
423
|
-
candidates.add(definition.key.toLowerCase());
|
|
424
|
-
}
|
|
425
|
-
if (typeof definition.metadata_key === "string" && definition.metadata_key.length > 0) {
|
|
426
|
-
candidates.add(definition.metadata_key.toLowerCase());
|
|
427
|
-
}
|
|
428
|
-
if (typeof definition.cli_flag === "string" && definition.cli_flag.length > 0) {
|
|
429
|
-
candidates.add(definition.cli_flag.replaceAll("-", "_").toLowerCase());
|
|
430
|
-
candidates.add(definition.cli_flag.toLowerCase());
|
|
431
|
-
}
|
|
432
|
-
if (Array.isArray(definition.cli_aliases)) {
|
|
433
|
-
for (const alias of definition.cli_aliases) {
|
|
434
|
-
if (typeof alias !== "string" || alias.length === 0) {
|
|
435
|
-
continue;
|
|
436
|
-
}
|
|
437
|
-
candidates.add(alias.replaceAll("-", "_").toLowerCase());
|
|
438
|
-
candidates.add(alias.toLowerCase());
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
if (!candidates.has(normalizedToken)) {
|
|
442
|
-
continue;
|
|
443
|
-
}
|
|
444
|
-
return {
|
|
445
|
-
optionKey: definition.key,
|
|
446
|
-
frontMatterKey: definition.metadata_key
|
|
447
|
-
};
|
|
448
|
-
}
|
|
449
|
-
return void 0;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
// dist/cli/commands/recurrence-parsers.js
|
|
453
|
-
function parseEventBoolean(value, flag) {
|
|
454
|
-
const normalized = value.trim().toLowerCase();
|
|
455
|
-
if (normalized === "true" || normalized === "1" || normalized === "yes") {
|
|
456
|
-
return true;
|
|
457
|
-
}
|
|
458
|
-
if (normalized === "false" || normalized === "0" || normalized === "no") {
|
|
459
|
-
return false;
|
|
460
|
-
}
|
|
461
|
-
throw new PmCliError(`${flag} must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);
|
|
462
|
-
}
|
|
463
|
-
function parseDelimitedList(raw) {
|
|
464
|
-
if (!raw) {
|
|
465
|
-
return [];
|
|
466
|
-
}
|
|
467
|
-
return raw.split("|").map((value) => value.trim()).filter((value) => value.length > 0);
|
|
468
|
-
}
|
|
469
|
-
function ensureEnumValue(value, allowed, label) {
|
|
470
|
-
if (!allowed.includes(value)) {
|
|
471
|
-
throw new PmCliError(`Invalid ${label} value "${value}". Allowed: ${allowed.join(", ")}`, EXIT_CODE.USAGE);
|
|
472
|
-
}
|
|
473
|
-
return value;
|
|
474
|
-
}
|
|
475
|
-
var RECURRENCE_CSV_KEYS = [
|
|
476
|
-
"recur_freq",
|
|
477
|
-
"recur_interval",
|
|
478
|
-
"recur_count",
|
|
479
|
-
"recur_until",
|
|
480
|
-
"recur_by_weekday",
|
|
481
|
-
"recur_by_month_day",
|
|
482
|
-
"recur_exdates"
|
|
483
|
-
];
|
|
484
|
-
function numericRecurrenceValueProvided(raw, guard) {
|
|
485
|
-
return guard === "defined" ? raw !== void 0 : Boolean(raw);
|
|
486
|
-
}
|
|
487
|
-
function parsePositiveRecurrenceInteger(raw, label, guard) {
|
|
488
|
-
if (!numericRecurrenceValueProvided(raw, guard)) {
|
|
489
|
-
return void 0;
|
|
490
|
-
}
|
|
491
|
-
const parsed = parseOptionalNumber(raw, `event ${label}`);
|
|
492
|
-
if (!Number.isInteger(parsed) || parsed < 1) {
|
|
493
|
-
throw new PmCliError(`--event ${label} must be an integer >= 1`, EXIT_CODE.USAGE);
|
|
494
|
-
}
|
|
495
|
-
return parsed;
|
|
496
|
-
}
|
|
497
|
-
function parseRecurrenceUntil(untilRaw, startAt, nowValue) {
|
|
498
|
-
const until = untilRaw ? resolveIsoOrRelative(untilRaw, nowValue, "event.recur_until") : void 0;
|
|
499
|
-
if (until && until < startAt) {
|
|
500
|
-
throw new PmCliError("--event recur_until must be at or after start", EXIT_CODE.USAGE);
|
|
501
|
-
}
|
|
502
|
-
return until;
|
|
503
|
-
}
|
|
504
|
-
function parseRecurrenceWeekdays(raw) {
|
|
505
|
-
return Array.from(new Set(parseDelimitedList(raw).map((value) => ensureEnumValue(value.toLowerCase(), RECURRENCE_WEEKDAY_VALUES, "event weekday")))).sort((left, right) => weekdayOrderIndex(left) - weekdayOrderIndex(right));
|
|
506
|
-
}
|
|
507
|
-
function parseRecurrenceMonthDays(raw) {
|
|
508
|
-
return Array.from(new Set(parseDelimitedList(raw).map((value) => {
|
|
509
|
-
const day = parseOptionalNumber(value, "event recur_by_month_day");
|
|
510
|
-
if (!Number.isInteger(day) || day < 1 || day > 31) {
|
|
511
|
-
throw new PmCliError("--event recur_by_month_day values must be integers 1..31", EXIT_CODE.USAGE);
|
|
512
|
-
}
|
|
513
|
-
return day;
|
|
514
|
-
}))).sort((left, right) => left - right);
|
|
515
|
-
}
|
|
516
|
-
function parseRecurrenceExdates(raw, nowValue) {
|
|
517
|
-
return Array.from(new Set(parseDelimitedList(raw).map((value) => resolveIsoOrRelative(value, nowValue, "event.recur_exdates")))).sort((left, right) => left.localeCompare(right));
|
|
518
|
-
}
|
|
519
|
-
function parseRecurrenceRule(kv, startAt, nowValue, emptyNumericGuard) {
|
|
520
|
-
const freqRaw = kv.recur_freq?.trim();
|
|
521
|
-
const intervalRaw = kv.recur_interval?.trim();
|
|
522
|
-
const countRaw = kv.recur_count?.trim();
|
|
523
|
-
const untilRaw = kv.recur_until?.trim();
|
|
524
|
-
const byWeekdayRaw = kv.recur_by_weekday?.trim();
|
|
525
|
-
const byMonthDayRaw = kv.recur_by_month_day?.trim();
|
|
526
|
-
const exdatesRaw = kv.recur_exdates?.trim();
|
|
527
|
-
const recurrenceInputsProvided = [freqRaw, intervalRaw, countRaw, untilRaw, byWeekdayRaw, byMonthDayRaw, exdatesRaw].some((value) => value !== void 0);
|
|
528
|
-
if (!recurrenceInputsProvided) {
|
|
529
|
-
return void 0;
|
|
530
|
-
}
|
|
531
|
-
if (!freqRaw) {
|
|
532
|
-
throw new PmCliError("--event recurrence fields require recur_freq=<daily|weekly|monthly|yearly>", EXIT_CODE.USAGE);
|
|
533
|
-
}
|
|
534
|
-
const freq = ensureEnumValue(freqRaw.toLowerCase(), RECURRENCE_FREQUENCY_VALUES, "event recurrence frequency");
|
|
535
|
-
const interval = parsePositiveRecurrenceInteger(intervalRaw, "recur_interval", emptyNumericGuard);
|
|
536
|
-
const count = parsePositiveRecurrenceInteger(countRaw, "recur_count", emptyNumericGuard);
|
|
537
|
-
const until = parseRecurrenceUntil(untilRaw, startAt, nowValue);
|
|
538
|
-
const byWeekday = parseRecurrenceWeekdays(byWeekdayRaw);
|
|
539
|
-
const byMonthDay = parseRecurrenceMonthDays(byMonthDayRaw);
|
|
540
|
-
const exdates = parseRecurrenceExdates(exdatesRaw, nowValue);
|
|
541
|
-
return {
|
|
542
|
-
freq,
|
|
543
|
-
interval,
|
|
544
|
-
count,
|
|
545
|
-
until,
|
|
546
|
-
by_weekday: byWeekday.length > 0 ? byWeekday : void 0,
|
|
547
|
-
by_month_day: byMonthDay.length > 0 ? byMonthDay : void 0,
|
|
548
|
-
exdates: exdates.length > 0 ? exdates : void 0
|
|
549
|
-
};
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
// dist/cli/commands/event-validation-messages.js
|
|
553
|
-
var EVENT_END_AFTER_START_MESSAGE = "--event end must be strictly after start. Equal start/end timestamps are treated as an instant event (end is dropped); an end earlier than start is rejected. Omit end for an instant event or set end later than start.";
|
|
554
|
-
var EVENT_END_DURATION_MUTUALLY_EXCLUSIVE_MESSAGE = "--event end and duration are mutually exclusive; provide only one (use duration=<relative> like duration=2h, duration=30min, or duration=PT30M, or set an explicit end).";
|
|
555
|
-
var MINUTE_DURATION = /^([+-]?)(\d+)(min|mins|minute|minutes)$/i;
|
|
556
|
-
var ISO_8601_TIME_DURATION = /^([+-]?)[Pp][Tt](?:(\d+)[Hh])?(?:(\d+)[Mm])?(?:(\d+)[Ss])?$/;
|
|
557
|
-
var MILLIS_PER_SECOND = 1e3;
|
|
558
|
-
var MILLIS_PER_MINUTE = 60 * MILLIS_PER_SECOND;
|
|
559
|
-
var MILLIS_PER_HOUR = 60 * MILLIS_PER_MINUTE;
|
|
560
|
-
function toIsoTimestampOrThrow(timestampMs, durationRaw) {
|
|
561
|
-
const resolved = new Date(timestampMs);
|
|
562
|
-
if (!Number.isFinite(resolved.getTime())) {
|
|
563
|
-
throw new PmCliError(`Invalid event.duration value "${durationRaw}". Duration is out of supported timestamp range.`, EXIT_CODE.USAGE);
|
|
564
|
-
}
|
|
565
|
-
return resolved.toISOString();
|
|
566
|
-
}
|
|
567
|
-
function resolveDurationAgainstStart(startAt, durationRaw) {
|
|
568
|
-
const start = new Date(startAt);
|
|
569
|
-
const trimmedDuration = durationRaw.trim();
|
|
570
|
-
const minuteDuration = MINUTE_DURATION.exec(trimmedDuration);
|
|
571
|
-
if (minuteDuration) {
|
|
572
|
-
const sign = minuteDuration[1] === "-" ? -1 : 1;
|
|
573
|
-
const amount = Number.parseInt(minuteDuration[2], 10) * sign;
|
|
574
|
-
return toIsoTimestampOrThrow(start.getTime() + amount * MILLIS_PER_MINUTE, trimmedDuration);
|
|
575
|
-
}
|
|
576
|
-
const isoDuration = ISO_8601_TIME_DURATION.exec(trimmedDuration);
|
|
577
|
-
if (isoDuration) {
|
|
578
|
-
const [, signToken, hoursToken, minutesToken, secondsToken] = isoDuration;
|
|
579
|
-
const hasComponent = hoursToken || minutesToken || secondsToken;
|
|
580
|
-
if (hasComponent) {
|
|
581
|
-
const sign = signToken === "-" ? -1 : 1;
|
|
582
|
-
const hours = Number.parseInt(hoursToken ?? "0", 10);
|
|
583
|
-
const minutes = Number.parseInt(minutesToken ?? "0", 10);
|
|
584
|
-
const seconds = Number.parseInt(secondsToken ?? "0", 10);
|
|
585
|
-
const totalMillis = hours * MILLIS_PER_HOUR + minutes * MILLIS_PER_MINUTE + seconds * MILLIS_PER_SECOND;
|
|
586
|
-
return toIsoTimestampOrThrow(start.getTime() + sign * totalMillis, trimmedDuration);
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
const normalizedDuration = trimmedDuration.startsWith("+") || trimmedDuration.startsWith("-") ? trimmedDuration : `+${trimmedDuration}`;
|
|
590
|
-
return resolveIsoOrRelative(normalizedDuration, start, "event.duration");
|
|
591
|
-
}
|
|
592
|
-
function resolveEventEndAt(startAt, endRaw, durationRaw, referenceDate) {
|
|
593
|
-
if (endRaw && durationRaw) {
|
|
594
|
-
throw new PmCliError(EVENT_END_DURATION_MUTUALLY_EXCLUSIVE_MESSAGE, EXIT_CODE.USAGE);
|
|
595
|
-
}
|
|
596
|
-
if (durationRaw) {
|
|
597
|
-
const endAt2 = resolveDurationAgainstStart(startAt, durationRaw);
|
|
598
|
-
if (endAt2 < startAt) {
|
|
599
|
-
throw new PmCliError(EVENT_END_AFTER_START_MESSAGE, EXIT_CODE.USAGE);
|
|
600
|
-
}
|
|
601
|
-
if (endAt2 === startAt) {
|
|
602
|
-
return void 0;
|
|
603
|
-
}
|
|
604
|
-
return endAt2;
|
|
605
|
-
}
|
|
606
|
-
if (!endRaw) {
|
|
607
|
-
return void 0;
|
|
608
|
-
}
|
|
609
|
-
const endAt = resolveIsoOrRelative(endRaw, referenceDate, "event.end");
|
|
610
|
-
if (endAt < startAt) {
|
|
611
|
-
throw new PmCliError(EVENT_END_AFTER_START_MESSAGE, EXIT_CODE.USAGE);
|
|
612
|
-
}
|
|
613
|
-
if (endAt === startAt) {
|
|
614
|
-
return void 0;
|
|
615
|
-
}
|
|
616
|
-
return endAt;
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
// dist/cli/commands/repeatable-metadata-parsers.js
|
|
620
|
-
var REMINDER_KEYS = ["at", "date", "text", "title"];
|
|
621
|
-
var EVENT_KEYS = [
|
|
622
|
-
"start",
|
|
623
|
-
"date",
|
|
624
|
-
"end",
|
|
625
|
-
"duration",
|
|
626
|
-
"title",
|
|
627
|
-
"description",
|
|
628
|
-
"location",
|
|
629
|
-
"timezone",
|
|
630
|
-
"all_day",
|
|
631
|
-
...RECURRENCE_CSV_KEYS
|
|
632
|
-
];
|
|
633
|
-
var TYPE_OPTION_KEYS = ["key", "value"];
|
|
634
|
-
function optionalString(value, mode) {
|
|
635
|
-
return mode === "trimmed" ? value?.trim() : value;
|
|
636
|
-
}
|
|
637
|
-
function isProvided(value, guard) {
|
|
638
|
-
return guard === "defined" ? value !== void 0 : Boolean(value);
|
|
639
|
-
}
|
|
640
|
-
function parseReminderEntries(raw, nowValue, options) {
|
|
641
|
-
return raw.map((entry) => {
|
|
642
|
-
const kv = parseCsvKv(entry, "--reminder");
|
|
643
|
-
assertNoUnknownCsvKeys(kv, "--reminder", REMINDER_KEYS);
|
|
644
|
-
const atRaw = optionalString(kv.at ?? kv.date, options.valueMode);
|
|
645
|
-
const textRaw = optionalString(kv.text ?? kv.title, options.valueMode);
|
|
646
|
-
if (!atRaw || !textRaw) {
|
|
647
|
-
throw new PmCliError("--reminder requires at=<iso|relative> or date=<iso|relative>, plus text=<value> or title=<value>", EXIT_CODE.USAGE);
|
|
648
|
-
}
|
|
649
|
-
const text = textRaw.trim();
|
|
650
|
-
if (!text) {
|
|
651
|
-
throw new PmCliError("--reminder text must not be empty", EXIT_CODE.USAGE);
|
|
652
|
-
}
|
|
653
|
-
return {
|
|
654
|
-
at: resolveIsoOrRelative(atRaw, nowValue, "reminder.at"),
|
|
655
|
-
text
|
|
656
|
-
};
|
|
657
|
-
});
|
|
658
|
-
}
|
|
659
|
-
function parseEventEntries(raw, nowValue, options) {
|
|
660
|
-
return raw.map((entry) => {
|
|
661
|
-
const kv = parseCsvKv(entry, "--event");
|
|
662
|
-
assertNoUnknownCsvKeys(kv, "--event", EVENT_KEYS);
|
|
663
|
-
const startRaw = (kv.start ?? kv.date)?.trim();
|
|
664
|
-
if (!startRaw) {
|
|
665
|
-
throw new PmCliError("--event requires start=<iso|relative> or date=<iso|relative>", EXIT_CODE.USAGE);
|
|
666
|
-
}
|
|
667
|
-
const startAt = resolveIsoOrRelative(startRaw, nowValue, "event.start");
|
|
668
|
-
const endRaw = kv.end?.trim();
|
|
669
|
-
const durationRaw = kv.duration?.trim();
|
|
670
|
-
const endAt = resolveEventEndAt(startAt, endRaw, durationRaw, nowValue);
|
|
671
|
-
const titleRaw = kv.title;
|
|
672
|
-
const descriptionRaw = kv.description;
|
|
673
|
-
const locationRaw = kv.location;
|
|
674
|
-
const timezoneRaw = kv.timezone;
|
|
675
|
-
const title = titleRaw?.trim();
|
|
676
|
-
const description = descriptionRaw?.trim();
|
|
677
|
-
const location = locationRaw?.trim();
|
|
678
|
-
const timezone = timezoneRaw?.trim();
|
|
679
|
-
const optionalTextFields = [
|
|
680
|
-
["title", titleRaw, title],
|
|
681
|
-
["description", descriptionRaw, description],
|
|
682
|
-
["location", locationRaw, location],
|
|
683
|
-
["timezone", timezoneRaw, timezone]
|
|
684
|
-
];
|
|
685
|
-
for (const [fieldLabel, rawValue, trimmedValue] of optionalTextFields) {
|
|
686
|
-
if (rawValue !== void 0 && !trimmedValue) {
|
|
687
|
-
throw new PmCliError(`--event ${fieldLabel} must not be empty`, EXIT_CODE.USAGE);
|
|
688
|
-
}
|
|
689
|
-
}
|
|
690
|
-
const allDayRaw = kv.all_day?.trim();
|
|
691
|
-
const recurrence = parseRecurrenceRule(kv, startAt, nowValue, options.recurrenceEmptyNumericGuard);
|
|
692
|
-
const allDay = isProvided(allDayRaw, options.allDayEmptyGuard) ? parseEventBoolean(allDayRaw, "--event all_day") : void 0;
|
|
693
|
-
return {
|
|
694
|
-
start_at: startAt,
|
|
695
|
-
end_at: endAt,
|
|
696
|
-
title,
|
|
697
|
-
description,
|
|
698
|
-
location,
|
|
699
|
-
all_day: allDay,
|
|
700
|
-
timezone,
|
|
701
|
-
recurrence
|
|
702
|
-
};
|
|
703
|
-
});
|
|
704
|
-
}
|
|
705
|
-
function parseTypeOptionEntries(raw) {
|
|
706
|
-
const values = {};
|
|
707
|
-
for (const entry of raw) {
|
|
708
|
-
const trimmedEntry = entry.trim();
|
|
709
|
-
if (trimmedEntry.length === 0) {
|
|
710
|
-
throw new PmCliError("--type-option values must not be empty", EXIT_CODE.USAGE);
|
|
711
|
-
}
|
|
712
|
-
let key;
|
|
713
|
-
let value;
|
|
714
|
-
const prefersStructuredKv = trimmedEntry.includes(",") || trimmedEntry.includes("\n") || trimmedEntry.startsWith("```") || /^(?:[-*+]\s+)?(?:key|value)\s*[:=]/i.test(trimmedEntry);
|
|
715
|
-
if (prefersStructuredKv) {
|
|
716
|
-
const kv = parseCsvKv(trimmedEntry, "--type-option");
|
|
717
|
-
assertNoUnknownCsvKeys(kv, "--type-option", TYPE_OPTION_KEYS);
|
|
718
|
-
key = kv.key?.trim();
|
|
719
|
-
value = kv.value?.trim();
|
|
720
|
-
} else {
|
|
721
|
-
const equalsIndex = trimmedEntry.indexOf("=");
|
|
722
|
-
const colonIndex = trimmedEntry.indexOf(":");
|
|
723
|
-
let separatorIndex = equalsIndex;
|
|
724
|
-
if (equalsIndex <= 0 && colonIndex > 0) {
|
|
725
|
-
separatorIndex = colonIndex;
|
|
726
|
-
}
|
|
727
|
-
if (separatorIndex <= 0 || separatorIndex === trimmedEntry.length - 1) {
|
|
728
|
-
throw new PmCliError("--type-option requires key=value or key=<name>,value=<value> entries", EXIT_CODE.USAGE);
|
|
729
|
-
}
|
|
730
|
-
key = trimmedEntry.slice(0, separatorIndex).trim();
|
|
731
|
-
value = trimmedEntry.slice(separatorIndex + 1).trim();
|
|
732
|
-
}
|
|
733
|
-
if (!key || !value) {
|
|
734
|
-
throw new PmCliError("--type-option requires key and value", EXIT_CODE.USAGE);
|
|
735
|
-
}
|
|
736
|
-
values[key] = value;
|
|
737
|
-
}
|
|
738
|
-
return Object.fromEntries(Object.entries(values).sort((left, right) => left[0].localeCompare(right[0])));
|
|
739
|
-
}
|
|
740
|
-
|
|
741
|
-
// dist/cli/commands/create.js
|
|
742
|
-
var CREATE_MODE_VALUES = ["strict", "progressive"];
|
|
743
|
-
var SCHEDULE_CREATE_PRESET_VALUES = ["lightweight"];
|
|
744
|
-
var SCHEDULE_CREATE_PRESET_TYPES = /* @__PURE__ */ new Set(["Reminder", "Meeting", "Event"]);
|
|
745
|
-
var LOG_SEED_ALLOWED_KEYS = /* @__PURE__ */ new Set(["author", "created_at", "text"]);
|
|
746
|
-
var CREATE_UNSET_FIELD_DEFINITIONS = [
|
|
747
|
-
...COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_AUTHOR,
|
|
748
|
-
{ canonical: "author", aliases: ["author"], optionKey: "author", frontMatterKey: "author" },
|
|
749
|
-
...COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR
|
|
750
|
-
];
|
|
751
|
-
var CREATE_UNSET_ALIAS_MAP = (() => {
|
|
752
|
-
const map = /* @__PURE__ */ new Map();
|
|
753
|
-
for (const definition of CREATE_UNSET_FIELD_DEFINITIONS) {
|
|
754
|
-
for (const alias of definition.aliases) {
|
|
755
|
-
map.set(alias, {
|
|
756
|
-
optionKey: definition.optionKey,
|
|
757
|
-
frontMatterKey: definition.frontMatterKey
|
|
758
|
-
});
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
return map;
|
|
762
|
-
})();
|
|
763
|
-
var CREATE_OPTION_KEY_TO_UNSET_CANONICAL = new Map(CREATE_UNSET_FIELD_DEFINITIONS.map((definition) => [definition.optionKey, definition.canonical]));
|
|
764
|
-
var CREATE_UNSET_SUPPORTED_CANONICAL_FIELDS = CREATE_UNSET_FIELD_DEFINITIONS.map((definition) => definition.canonical).sort((left, right) => left.localeCompare(right)).join(", ");
|
|
765
|
-
function buildInvalidLogSeedKeysMessage(optionName, unsupportedKeys) {
|
|
766
|
-
const sortedUnsupported = [...unsupportedKeys].sort((left, right) => left.localeCompare(right));
|
|
767
|
-
const keyLabel = sortedUnsupported.length === 1 ? "key" : "keys";
|
|
768
|
-
return `${optionName} supports only author, created_at, and text seed fields. Found unsupported ${keyLabel}: ${sortedUnsupported.join(", ")}. If text contains comma-separated key:value-like fragments, wrap text in quotes (for example text="first,scope:project"), use markdown-style key/value input, or pass ${optionName} - with piped stdin.`;
|
|
769
|
-
}
|
|
770
|
-
function parseStatusValue(value, statusRegistry) {
|
|
771
|
-
const normalized = normalizeStatusInput(value, statusRegistry);
|
|
772
|
-
if (!normalized) {
|
|
773
|
-
const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);
|
|
774
|
-
throw new PmCliError(`Invalid status value "${value}". Allowed: ${allowedStatuses.join(", ")}`, EXIT_CODE.USAGE);
|
|
775
|
-
}
|
|
776
|
-
return normalized;
|
|
777
|
-
}
|
|
778
|
-
function resolveCreateDefaultStatus(typeDefinition, statusRegistry) {
|
|
779
|
-
const configured = typeDefinition.default_status;
|
|
780
|
-
if (configured !== void 0) {
|
|
781
|
-
const normalized = normalizeStatusInput(configured, statusRegistry);
|
|
782
|
-
if (normalized) {
|
|
783
|
-
return normalized;
|
|
784
|
-
}
|
|
785
|
-
}
|
|
786
|
-
return statusRegistry.open_status;
|
|
787
|
-
}
|
|
788
|
-
function parseCreatedAt(value, currentIso) {
|
|
789
|
-
if (!value || value.trim() === "" || value.trim().toLowerCase() === "now") {
|
|
790
|
-
return currentIso;
|
|
791
|
-
}
|
|
792
|
-
const parsed = Date.parse(value);
|
|
793
|
-
if (!Number.isFinite(parsed)) {
|
|
794
|
-
throw new PmCliError(`Invalid created_at timestamp "${value}"`, EXIT_CODE.USAGE);
|
|
795
|
-
}
|
|
796
|
-
return new Date(parsed).toISOString();
|
|
797
|
-
}
|
|
798
|
-
var CREATE_LEGACY_NONE_COLLECTION_NORMALIZERS = [
|
|
799
|
-
{ optionKey: "dep", clearFlagKey: "clearDeps", valueFlag: "--dep", clearFlag: "--clear-deps" },
|
|
800
|
-
{ optionKey: "comment", clearFlagKey: "clearComments", valueFlag: "--comment", clearFlag: "--clear-comments" },
|
|
801
|
-
{ optionKey: "note", clearFlagKey: "clearNotes", valueFlag: "--note", clearFlag: "--clear-notes" },
|
|
802
|
-
{ optionKey: "learning", clearFlagKey: "clearLearnings", valueFlag: "--learning", clearFlag: "--clear-learnings" },
|
|
803
|
-
{ optionKey: "file", clearFlagKey: "clearFiles", valueFlag: "--file", clearFlag: "--clear-files" },
|
|
804
|
-
{ optionKey: "test", clearFlagKey: "clearTests", valueFlag: "--test", clearFlag: "--clear-tests" },
|
|
805
|
-
{ optionKey: "doc", clearFlagKey: "clearDocs", valueFlag: "--doc", clearFlag: "--clear-docs" },
|
|
806
|
-
{ optionKey: "reminder", clearFlagKey: "clearReminders", valueFlag: "--reminder", clearFlag: "--clear-reminders" },
|
|
807
|
-
{ optionKey: "event", clearFlagKey: "clearEvents", valueFlag: "--event", clearFlag: "--clear-events" },
|
|
808
|
-
{ optionKey: "typeOption", clearFlagKey: "clearTypeOptions", valueFlag: "--type-option", clearFlag: "--clear-type-options" }
|
|
809
|
-
];
|
|
810
|
-
function normalizeLegacyNoneCreateOptions(options) {
|
|
811
|
-
const normalized = {
|
|
812
|
-
...options,
|
|
813
|
-
unset: options.unset ? [...options.unset] : void 0
|
|
814
|
-
};
|
|
815
|
-
const appendUnsetTarget = (value) => {
|
|
816
|
-
const current = normalized.unset ? [...normalized.unset] : [];
|
|
817
|
-
if (!current.includes(value)) {
|
|
818
|
-
current.push(value);
|
|
819
|
-
}
|
|
820
|
-
normalized.unset = current;
|
|
821
|
-
};
|
|
822
|
-
if (isLegacyNoneToken(normalized.template)) {
|
|
823
|
-
normalized.template = void 0;
|
|
824
|
-
}
|
|
825
|
-
const scalarOptionKeys = /* @__PURE__ */ new Set([...CREATE_OPTION_KEY_TO_UNSET_CANONICAL.keys(), "rank"]);
|
|
826
|
-
for (const optionKey of scalarOptionKeys) {
|
|
827
|
-
const candidate = normalized[optionKey];
|
|
828
|
-
if (typeof candidate !== "string" || !isLegacyNoneToken(candidate)) {
|
|
829
|
-
continue;
|
|
830
|
-
}
|
|
831
|
-
const canonicalUnset = optionKey === "rank" ? "order" : CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey) ?? optionKey;
|
|
832
|
-
appendUnsetTarget(canonicalUnset);
|
|
833
|
-
normalized[optionKey] = void 0;
|
|
834
|
-
}
|
|
835
|
-
return applyLegacyNoneCollectionNormalizers(normalized, CREATE_LEGACY_NONE_COLLECTION_NORMALIZERS);
|
|
836
|
-
}
|
|
837
|
-
function parseOptionalString(value) {
|
|
838
|
-
if (value === void 0)
|
|
839
|
-
return void 0;
|
|
840
|
-
return value;
|
|
841
|
-
}
|
|
842
|
-
function parseCreateUnsetTargets(raw, runtimeFieldRegistry) {
|
|
843
|
-
return parseCommandUnsetTargets({
|
|
844
|
-
raw,
|
|
845
|
-
supportedFields: CREATE_UNSET_SUPPORTED_CANONICAL_FIELDS,
|
|
846
|
-
resolveDefinition: (trimmed) => CREATE_UNSET_ALIAS_MAP.get(trimmed) ?? resolveRuntimeUnsetFieldDefinition(trimmed, "create", runtimeFieldRegistry)
|
|
847
|
-
});
|
|
848
|
-
}
|
|
849
|
-
var DEP_SEED_KEYS = ["id", "kind", "type", "author", "created_at"];
|
|
850
|
-
var LINKED_ARTIFACT_SEED_KEYS = ["path", "scope", "note"];
|
|
851
|
-
function parseDependencies(raw, nowValue, prefix) {
|
|
852
|
-
if (!raw || raw.length === 0)
|
|
853
|
-
return { values: void 0, explicitEmpty: false };
|
|
854
|
-
assertNoLegacyNoneTokens(raw, "--dep", "Use --clear-deps to clear dependencies.");
|
|
855
|
-
const values = raw.map((entry) => {
|
|
856
|
-
const trimmedEntry = entry.trim();
|
|
857
|
-
const isStructured = looksLikeStructuredEntry(trimmedEntry, DEP_SEED_KEYS);
|
|
858
|
-
const kv = isStructured ? parseCsvKv(entry, "--dep") : { id: trimmedEntry, kind: "related" };
|
|
859
|
-
if (isStructured) {
|
|
860
|
-
assertNoUnknownCsvKeys(kv, "--dep", DEP_SEED_KEYS);
|
|
861
|
-
}
|
|
862
|
-
const id = parseOptionalString(kv.id);
|
|
863
|
-
const kind = normalizeDependencyKindInput(parseOptionalString(kv.kind ?? kv.type));
|
|
864
|
-
if (!id || !kind) {
|
|
865
|
-
throw new PmCliError("--dep requires id and kind, or a bare item id to create a related dependency", EXIT_CODE.USAGE);
|
|
866
|
-
}
|
|
867
|
-
if (id.trim().toLowerCase() === "undefined") {
|
|
868
|
-
throw new PmCliError(`--dep id must not use placeholder token "${id}". Use --clear-deps to clear dependencies.`, EXIT_CODE.USAGE);
|
|
869
|
-
}
|
|
870
|
-
return {
|
|
871
|
-
id: normalizeItemId(id, prefix),
|
|
872
|
-
kind: ensureEnumValue(kind, DEPENDENCY_KIND_VALUES, "dependency kind"),
|
|
873
|
-
created_at: parseCreatedAt(kv.created_at, nowValue),
|
|
874
|
-
author: parseOptionalString(kv.author)
|
|
875
|
-
};
|
|
876
|
-
});
|
|
877
|
-
return { values, explicitEmpty: false };
|
|
878
|
-
}
|
|
879
|
-
var DEPENDENCY_KIND_INPUT_ALIASES = {
|
|
880
|
-
"blocked-by": "blocked_by",
|
|
881
|
-
depends_on: "blocked_by",
|
|
882
|
-
"depends-on": "blocked_by"
|
|
883
|
-
};
|
|
884
|
-
function normalizeDependencyKindInput(raw) {
|
|
885
|
-
if (typeof raw !== "string") {
|
|
886
|
-
return raw;
|
|
887
|
-
}
|
|
888
|
-
const alias = DEPENDENCY_KIND_INPUT_ALIASES[raw.toLowerCase()];
|
|
889
|
-
return alias ?? raw;
|
|
890
|
-
}
|
|
891
|
-
function looksLikeStructuredEntry(raw, keys) {
|
|
892
|
-
if (raw.startsWith("```") || raw.includes("\n")) {
|
|
893
|
-
return true;
|
|
894
|
-
}
|
|
895
|
-
const keyPattern = keys.map((key) => key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|");
|
|
896
|
-
if (new RegExp(`^(?:[-*+]\\s+)?(?:${keyPattern})\\s*[:=]`, "i").test(raw)) {
|
|
897
|
-
return true;
|
|
898
|
-
}
|
|
899
|
-
return looksLikeGenericKeyValueEntry(raw);
|
|
900
|
-
}
|
|
901
|
-
function parseLogSeed(optionName, raw, nowValue, fallbackAuthor) {
|
|
902
|
-
if (!raw || raw.length === 0)
|
|
903
|
-
return { values: void 0, explicitEmpty: false };
|
|
904
|
-
const clearHint = optionName === "--comment" ? "Use --clear-comments to clear comments." : optionName === "--note" ? "Use --clear-notes to clear notes." : "Use --clear-learnings to clear learnings.";
|
|
905
|
-
assertNoLegacyNoneTokens(raw, optionName, clearHint);
|
|
906
|
-
const values = raw.map((entry) => {
|
|
907
|
-
const trimmedEntry = entry.trim();
|
|
908
|
-
const buildPlainTextCommentSeed = () => {
|
|
909
|
-
if (trimmedEntry.length === 0) {
|
|
910
|
-
throw new PmCliError(`${optionName} requires text=<value>`, EXIT_CODE.USAGE);
|
|
911
|
-
}
|
|
912
|
-
return {
|
|
913
|
-
created_at: nowValue,
|
|
914
|
-
author: fallbackAuthor,
|
|
915
|
-
text: trimmedEntry
|
|
916
|
-
};
|
|
917
|
-
};
|
|
918
|
-
let kv;
|
|
919
|
-
try {
|
|
920
|
-
kv = parseCsvKv(entry, optionName);
|
|
921
|
-
} catch (error) {
|
|
922
|
-
if (optionName === "--comment" || optionName === "--note" || optionName === "--learning") {
|
|
923
|
-
return buildPlainTextCommentSeed();
|
|
924
|
-
}
|
|
925
|
-
throw error;
|
|
926
|
-
}
|
|
927
|
-
const unsupportedKeys = Object.keys(kv).filter((key) => !LOG_SEED_ALLOWED_KEYS.has(key));
|
|
928
|
-
if (unsupportedKeys.length > 0) {
|
|
929
|
-
return {
|
|
930
|
-
created_at: parseCreatedAt(kv.created_at, nowValue),
|
|
931
|
-
author: parseOptionalString(kv.author) ?? fallbackAuthor,
|
|
932
|
-
text: trimmedEntry
|
|
933
|
-
};
|
|
934
|
-
}
|
|
935
|
-
const text = kv.text ?? "";
|
|
936
|
-
if (text === "") {
|
|
937
|
-
throw new PmCliError(`${optionName} requires text=<value>`, EXIT_CODE.USAGE);
|
|
938
|
-
}
|
|
939
|
-
return {
|
|
940
|
-
created_at: parseCreatedAt(kv.created_at, nowValue),
|
|
941
|
-
author: parseOptionalString(kv.author) ?? fallbackAuthor,
|
|
942
|
-
text
|
|
943
|
-
};
|
|
944
|
-
});
|
|
945
|
-
return { values, explicitEmpty: false };
|
|
946
|
-
}
|
|
947
|
-
function parseFiles(raw) {
|
|
948
|
-
if (!raw || raw.length === 0)
|
|
949
|
-
return { values: void 0, explicitEmpty: false };
|
|
950
|
-
assertNoLegacyNoneTokens(raw, "--file", "Use --clear-files to clear linked files.");
|
|
951
|
-
const values = raw.map((entry) => {
|
|
952
|
-
const trimmedEntry = entry.trim();
|
|
953
|
-
const isStructured = looksLikeStructuredEntry(trimmedEntry, LINKED_ARTIFACT_SEED_KEYS);
|
|
954
|
-
const kv = isStructured ? parseCsvKv(entry, "--file") : { path: trimmedEntry };
|
|
955
|
-
if (isStructured) {
|
|
956
|
-
assertNoUnknownCsvKeys(kv, "--file", LINKED_ARTIFACT_SEED_KEYS);
|
|
957
|
-
}
|
|
958
|
-
if (!kv.path) {
|
|
959
|
-
throw new PmCliError("--file requires path=<value> or a bare file path", EXIT_CODE.USAGE);
|
|
960
|
-
}
|
|
961
|
-
return {
|
|
962
|
-
path: kv.path,
|
|
963
|
-
scope: ensureEnumValue(kv.scope ?? "project", SCOPE_VALUES, "file scope"),
|
|
964
|
-
note: parseOptionalString(kv.note)
|
|
965
|
-
};
|
|
966
|
-
});
|
|
967
|
-
return { values, explicitEmpty: false };
|
|
968
|
-
}
|
|
969
|
-
function parseTests(raw) {
|
|
970
|
-
if (!raw || raw.length === 0)
|
|
971
|
-
return { values: void 0, explicitEmpty: false };
|
|
972
|
-
assertNoLegacyNoneTokens(raw, "--test", "Use --clear-tests to clear linked tests.");
|
|
973
|
-
const values = raw.map((entry) => {
|
|
974
|
-
const trimmedEntry = entry.trim();
|
|
975
|
-
const kv = looksLikeStructuredLinkedTestEntry(trimmedEntry) ? normalizeStructuredLinkedTestEntry(parseCsvKv(entry, "--test"), "--test") : { command: trimmedEntry };
|
|
976
|
-
const command = parseOptionalString(kv.command);
|
|
977
|
-
const filePath = parseOptionalString(kv.path);
|
|
978
|
-
if (!command) {
|
|
979
|
-
throw new PmCliError("--test requires command=<value> or a bare command (path=<value> is optional metadata)", EXIT_CODE.USAGE);
|
|
980
|
-
}
|
|
981
|
-
const timeoutSecondsRaw = parseOptionalString(kv.timeout_seconds);
|
|
982
|
-
const timeoutAliasRaw = parseOptionalString(kv.timeout);
|
|
983
|
-
if (timeoutSecondsRaw && timeoutAliasRaw && timeoutSecondsRaw !== timeoutAliasRaw) {
|
|
984
|
-
throw new PmCliError("--test timeout and timeout_seconds must match when both are provided", EXIT_CODE.USAGE);
|
|
985
|
-
}
|
|
986
|
-
const timeoutRaw = timeoutSecondsRaw ?? timeoutAliasRaw;
|
|
987
|
-
return {
|
|
988
|
-
command,
|
|
989
|
-
path: filePath,
|
|
990
|
-
scope: ensureEnumValue(kv.scope ?? "project", SCOPE_VALUES, "test scope"),
|
|
991
|
-
timeout_seconds: timeoutRaw ? parseOptionalNumber(timeoutRaw, "timeout_seconds") : void 0,
|
|
992
|
-
pm_context_mode: parseLinkedTestContextMode(kv.pm_context_mode, "--test"),
|
|
993
|
-
env_set: parseLinkedTestEnvSet(kv.env_set, "--test"),
|
|
994
|
-
env_clear: parseLinkedTestEnvClear(kv.env_clear, "--test"),
|
|
995
|
-
shared_host_safe: parseLinkedTestBoolean(kv.shared_host_safe, "--test", "shared_host_safe"),
|
|
996
|
-
assert_stdout_contains: parseLinkedTestStringList(kv.assert_stdout_contains),
|
|
997
|
-
assert_stdout_regex: parseLinkedTestRegexList(kv.assert_stdout_regex, "--test", "assert_stdout_regex"),
|
|
998
|
-
assert_stderr_contains: parseLinkedTestStringList(kv.assert_stderr_contains),
|
|
999
|
-
assert_stderr_regex: parseLinkedTestRegexList(kv.assert_stderr_regex, "--test", "assert_stderr_regex"),
|
|
1000
|
-
assert_stdout_min_lines: parseLinkedTestMinLines(kv.assert_stdout_min_lines, "--test"),
|
|
1001
|
-
assert_json_field_equals: parseLinkedTestAssertionEqualsMap(kv.assert_json_field_equals, "--test"),
|
|
1002
|
-
assert_json_field_gte: parseLinkedTestAssertionGteMap(kv.assert_json_field_gte, "--test"),
|
|
1003
|
-
note: parseOptionalString(kv.note)
|
|
1004
|
-
};
|
|
1005
|
-
});
|
|
1006
|
-
return { values, explicitEmpty: false };
|
|
1007
|
-
}
|
|
1008
|
-
function parseDocs(raw) {
|
|
1009
|
-
if (!raw || raw.length === 0)
|
|
1010
|
-
return { values: void 0, explicitEmpty: false };
|
|
1011
|
-
assertNoLegacyNoneTokens(raw, "--doc", "Use --clear-docs to clear linked docs.");
|
|
1012
|
-
const values = raw.map((entry) => {
|
|
1013
|
-
const trimmedEntry = entry.trim();
|
|
1014
|
-
const isStructured = looksLikeStructuredEntry(trimmedEntry, LINKED_ARTIFACT_SEED_KEYS);
|
|
1015
|
-
const kv = isStructured ? parseCsvKv(entry, "--doc") : { path: trimmedEntry };
|
|
1016
|
-
if (isStructured) {
|
|
1017
|
-
assertNoUnknownCsvKeys(kv, "--doc", LINKED_ARTIFACT_SEED_KEYS);
|
|
1018
|
-
}
|
|
1019
|
-
if (!kv.path) {
|
|
1020
|
-
throw new PmCliError("--doc requires path=<value> or a bare doc path", EXIT_CODE.USAGE);
|
|
1021
|
-
}
|
|
1022
|
-
return {
|
|
1023
|
-
path: kv.path,
|
|
1024
|
-
scope: ensureEnumValue(kv.scope ?? "project", SCOPE_VALUES, "doc scope"),
|
|
1025
|
-
note: parseOptionalString(kv.note)
|
|
1026
|
-
};
|
|
1027
|
-
});
|
|
1028
|
-
return { values, explicitEmpty: false };
|
|
1029
|
-
}
|
|
1030
|
-
function parseReminders(raw, nowValue) {
|
|
1031
|
-
if (!raw || raw.length === 0)
|
|
1032
|
-
return { values: void 0, explicitEmpty: false };
|
|
1033
|
-
assertNoLegacyNoneTokens(raw, "--reminder", "Use --clear-reminders to clear reminders.");
|
|
1034
|
-
return {
|
|
1035
|
-
values: parseReminderEntries(raw, new Date(nowValue), { valueMode: "raw" }),
|
|
1036
|
-
explicitEmpty: false
|
|
1037
|
-
};
|
|
1038
|
-
}
|
|
1039
|
-
function parseEvents(raw, nowValue) {
|
|
1040
|
-
if (!raw || raw.length === 0)
|
|
1041
|
-
return { values: void 0, explicitEmpty: false };
|
|
1042
|
-
assertNoLegacyNoneTokens(raw, "--event", "Use --clear-events to clear linked events.");
|
|
1043
|
-
return {
|
|
1044
|
-
values: parseEventEntries(raw, new Date(nowValue), {
|
|
1045
|
-
allDayEmptyGuard: "defined",
|
|
1046
|
-
recurrenceEmptyNumericGuard: "defined"
|
|
1047
|
-
}),
|
|
1048
|
-
explicitEmpty: false
|
|
1049
|
-
};
|
|
1050
|
-
}
|
|
1051
|
-
function buildChangedFields(frontMatter, body, explicitUnsets, additionalFrontMatterKeys = []) {
|
|
1052
|
-
const changed = [
|
|
1053
|
-
...FRONT_MATTER_KEY_ORDER.filter((key) => frontMatter[key] !== void 0),
|
|
1054
|
-
...additionalFrontMatterKeys.filter((key) => frontMatter[key] !== void 0),
|
|
1055
|
-
...body.length > 0 ? ["body"] : [],
|
|
1056
|
-
...explicitUnsets.map((key) => `unset:${key}`)
|
|
1057
|
-
];
|
|
1058
|
-
return Array.from(new Set(changed));
|
|
1059
|
-
}
|
|
1060
|
-
function buildHistoryMessage(baseMessage, explicitUnsets) {
|
|
1061
|
-
const trimmed = baseMessage ?? "";
|
|
1062
|
-
if (explicitUnsets.length === 0) {
|
|
1063
|
-
return trimmed;
|
|
1064
|
-
}
|
|
1065
|
-
const suffix = `explicit_unset=${explicitUnsets.join(",")}`;
|
|
1066
|
-
return trimmed ? `${trimmed} | ${suffix}` : suffix;
|
|
1067
|
-
}
|
|
1068
|
-
function normalizeCreatePolicyOptionKey(raw, typeName, sourceLabel) {
|
|
1069
|
-
const canonical = canonicalizeCommandOptionKey("create", raw);
|
|
1070
|
-
if (!canonical) {
|
|
1071
|
-
throw new PmCliError(`Unsupported ${sourceLabel} entry "${raw}" for type "${typeName}"`, EXIT_CODE.CONFLICT);
|
|
1072
|
-
}
|
|
1073
|
-
return canonical;
|
|
1074
|
-
}
|
|
1075
|
-
function buildCreateOptionValueLookup(options) {
|
|
1076
|
-
return {
|
|
1077
|
-
scalarValues: {
|
|
1078
|
-
title: options.title,
|
|
1079
|
-
description: options.description,
|
|
1080
|
-
type: options.type,
|
|
1081
|
-
status: options.status,
|
|
1082
|
-
priority: options.priority,
|
|
1083
|
-
tags: options.tags,
|
|
1084
|
-
body: options.body,
|
|
1085
|
-
deadline: options.deadline,
|
|
1086
|
-
estimatedMinutes: options.estimatedMinutes,
|
|
1087
|
-
acceptanceCriteria: options.acceptanceCriteria,
|
|
1088
|
-
definitionOfReady: options.definitionOfReady,
|
|
1089
|
-
order: options.order ?? options.rank,
|
|
1090
|
-
goal: options.goal,
|
|
1091
|
-
objective: options.objective,
|
|
1092
|
-
value: options.value,
|
|
1093
|
-
impact: options.impact,
|
|
1094
|
-
outcome: options.outcome,
|
|
1095
|
-
whyNow: options.whyNow,
|
|
1096
|
-
author: options.author,
|
|
1097
|
-
message: options.message,
|
|
1098
|
-
assignee: options.assignee,
|
|
1099
|
-
parent: options.parent,
|
|
1100
|
-
reviewer: options.reviewer,
|
|
1101
|
-
risk: options.risk,
|
|
1102
|
-
confidence: options.confidence,
|
|
1103
|
-
sprint: options.sprint,
|
|
1104
|
-
release: options.release,
|
|
1105
|
-
blockedBy: options.blockedBy,
|
|
1106
|
-
blockedReason: options.blockedReason,
|
|
1107
|
-
unblockNote: options.unblockNote,
|
|
1108
|
-
reporter: options.reporter,
|
|
1109
|
-
severity: options.severity,
|
|
1110
|
-
environment: options.environment,
|
|
1111
|
-
reproSteps: options.reproSteps,
|
|
1112
|
-
resolution: options.resolution,
|
|
1113
|
-
expectedResult: options.expectedResult,
|
|
1114
|
-
actualResult: options.actualResult,
|
|
1115
|
-
affectedVersion: options.affectedVersion,
|
|
1116
|
-
fixedVersion: options.fixedVersion,
|
|
1117
|
-
component: options.component,
|
|
1118
|
-
regression: options.regression,
|
|
1119
|
-
customerImpact: options.customerImpact
|
|
1120
|
-
},
|
|
1121
|
-
repeatableValues: {
|
|
1122
|
-
dep: options.dep,
|
|
1123
|
-
comment: options.comment,
|
|
1124
|
-
note: options.note,
|
|
1125
|
-
learning: options.learning,
|
|
1126
|
-
file: options.file,
|
|
1127
|
-
test: options.test,
|
|
1128
|
-
doc: options.doc,
|
|
1129
|
-
reminder: options.reminder,
|
|
1130
|
-
event: options.event,
|
|
1131
|
-
typeOption: options.typeOption,
|
|
1132
|
-
field: options.field
|
|
1133
|
-
},
|
|
1134
|
-
addTags: options.addTags
|
|
1135
|
-
};
|
|
1136
|
-
}
|
|
1137
|
-
function hasCreateOptionValue(lookup, optionKey) {
|
|
1138
|
-
if (optionKey === "tags") {
|
|
1139
|
-
return lookup.scalarValues.tags !== void 0 || Array.isArray(lookup.addTags) && lookup.addTags.length > 0;
|
|
1140
|
-
}
|
|
1141
|
-
if (Object.prototype.hasOwnProperty.call(lookup.scalarValues, optionKey)) {
|
|
1142
|
-
return lookup.scalarValues[optionKey] !== void 0;
|
|
1143
|
-
}
|
|
1144
|
-
if (Object.prototype.hasOwnProperty.call(lookup.repeatableValues, optionKey)) {
|
|
1145
|
-
const value = lookup.repeatableValues[optionKey];
|
|
1146
|
-
return Array.isArray(value) && value.length > 0;
|
|
1147
|
-
}
|
|
1148
|
-
return false;
|
|
1149
|
-
}
|
|
1150
|
-
function buildRequiredCreateOptions(typeDefinition, createMode) {
|
|
1151
|
-
const requiredOptions = /* @__PURE__ */ new Set(["title", "type"]);
|
|
1152
|
-
if (createMode !== "strict") {
|
|
1153
|
-
return requiredOptions;
|
|
1154
|
-
}
|
|
1155
|
-
for (const field of typeDefinition.required_create_fields) {
|
|
1156
|
-
requiredOptions.add(normalizeCreatePolicyOptionKey(field, typeDefinition.name, "required_create_fields"));
|
|
1157
|
-
}
|
|
1158
|
-
for (const field of typeDefinition.required_create_repeatables) {
|
|
1159
|
-
requiredOptions.add(normalizeCreatePolicyOptionKey(field, typeDefinition.name, "required_create_repeatables"));
|
|
1160
|
-
}
|
|
1161
|
-
return requiredOptions;
|
|
1162
|
-
}
|
|
1163
|
-
function assertNoDisabledCreateOptions(disabledOptions, lookup, clearOptionKeys, typeName) {
|
|
1164
|
-
for (const option of disabledOptions) {
|
|
1165
|
-
if (!hasCreateOptionValue(lookup, option) && !clearOptionKeys.has(option)) {
|
|
1166
|
-
continue;
|
|
1167
|
-
}
|
|
1168
|
-
throw new PmCliError(`Option ${commandOptionFlagLabel("create", option)} is disabled for type "${typeName}" by command_option_policies`, EXIT_CODE.USAGE);
|
|
1169
|
-
}
|
|
1170
|
-
}
|
|
1171
|
-
function assertNoStrictRequiredOptionClears(requiredOptions, createMode, clearOptionKeys) {
|
|
1172
|
-
if (createMode !== "strict") {
|
|
1173
|
-
return;
|
|
1174
|
-
}
|
|
1175
|
-
const strictRequiredClears = requiredOptions.filter((required) => clearOptionKeys.has(required));
|
|
1176
|
-
if (strictRequiredClears.length === 0) {
|
|
1177
|
-
return;
|
|
1178
|
-
}
|
|
1179
|
-
const requiredFlags = [...new Set(strictRequiredClears.map((required) => commandOptionFlagLabel("create", required)))].sort((left, right) => left.localeCompare(right));
|
|
1180
|
-
throw new PmCliError(`Strict create mode requires concrete values for ${requiredFlags.join(", ")}; --unset/--clear-* directives cannot satisfy required options`, EXIT_CODE.USAGE);
|
|
1181
|
-
}
|
|
1182
|
-
function parseTypeOptions(raw) {
|
|
1183
|
-
if (!raw || raw.length === 0) {
|
|
1184
|
-
return { values: void 0, explicitEmpty: false };
|
|
1185
|
-
}
|
|
1186
|
-
assertNoLegacyNoneTokens(raw, "--type-option", "Use --clear-type-options to clear existing type options.");
|
|
1187
|
-
return {
|
|
1188
|
-
values: parseTypeOptionEntries(raw),
|
|
1189
|
-
explicitEmpty: false
|
|
1190
|
-
};
|
|
1191
|
-
}
|
|
1192
|
-
async function resolveCreateStdinInputs(options) {
|
|
1193
|
-
const stdinResolver = createStdinTokenResolver();
|
|
1194
|
-
return {
|
|
1195
|
-
...options,
|
|
1196
|
-
body: await stdinResolver.resolveValue(options.body, "--body"),
|
|
1197
|
-
dep: await stdinResolver.resolveList(options.dep, "--dep"),
|
|
1198
|
-
comment: await stdinResolver.resolveList(options.comment, "--comment"),
|
|
1199
|
-
note: await stdinResolver.resolveList(options.note, "--note"),
|
|
1200
|
-
learning: await stdinResolver.resolveList(options.learning, "--learning"),
|
|
1201
|
-
file: await stdinResolver.resolveList(options.file, "--file"),
|
|
1202
|
-
test: await stdinResolver.resolveList(options.test, "--test"),
|
|
1203
|
-
doc: await stdinResolver.resolveList(options.doc, "--doc"),
|
|
1204
|
-
reminder: await stdinResolver.resolveList(options.reminder, "--reminder"),
|
|
1205
|
-
event: await stdinResolver.resolveList(options.event, "--event"),
|
|
1206
|
-
typeOption: await stdinResolver.resolveList(options.typeOption, "--type-option"),
|
|
1207
|
-
field: await stdinResolver.resolveList(options.field, "--field")
|
|
1208
|
-
};
|
|
1209
|
-
}
|
|
1210
|
-
function resolveCreateMode(createMode, defaultMode) {
|
|
1211
|
-
if (createMode === void 0) {
|
|
1212
|
-
return defaultMode;
|
|
1213
|
-
}
|
|
1214
|
-
const normalized = createMode.trim().toLowerCase();
|
|
1215
|
-
if (normalized.length === 0) {
|
|
1216
|
-
return defaultMode;
|
|
1217
|
-
}
|
|
1218
|
-
if (normalized === "strict" || normalized === "progressive") {
|
|
1219
|
-
return normalized;
|
|
1220
|
-
}
|
|
1221
|
-
throw new PmCliError(`Invalid --create-mode value "${createMode}". Allowed: ${CREATE_MODE_VALUES.join(", ")}`, EXIT_CODE.USAGE);
|
|
1222
|
-
}
|
|
1223
|
-
function resolveScheduleCreatePreset(raw) {
|
|
1224
|
-
if (raw === void 0) {
|
|
1225
|
-
return void 0;
|
|
1226
|
-
}
|
|
1227
|
-
const normalized = raw.trim().toLowerCase();
|
|
1228
|
-
if (normalized.length === 0) {
|
|
1229
|
-
throw new PmCliError("--schedule-preset must not be empty", EXIT_CODE.USAGE);
|
|
1230
|
-
}
|
|
1231
|
-
if (normalized === "lightweight" || normalized === "lite" || normalized === "schedule-lite") {
|
|
1232
|
-
return "lightweight";
|
|
1233
|
-
}
|
|
1234
|
-
throw new PmCliError(`Invalid --schedule-preset value "${raw}". Allowed: ${SCHEDULE_CREATE_PRESET_VALUES.join(", ")}`, EXIT_CODE.USAGE);
|
|
1235
|
-
}
|
|
1236
|
-
function resolveEffectiveCreateMode(createMode, schedulePreset, defaultMode) {
|
|
1237
|
-
const resolvedMode = resolveCreateMode(createMode, defaultMode);
|
|
1238
|
-
if (schedulePreset === void 0) {
|
|
1239
|
-
return resolvedMode;
|
|
1240
|
-
}
|
|
1241
|
-
const createModeWasExplicit = typeof createMode === "string" && createMode.trim().length > 0;
|
|
1242
|
-
if (createModeWasExplicit && resolvedMode === "strict") {
|
|
1243
|
-
throw new PmCliError("--schedule-preset lightweight cannot be combined with --create-mode strict. Use --create-mode progressive or omit --create-mode.", EXIT_CODE.USAGE);
|
|
1244
|
-
}
|
|
1245
|
-
return "progressive";
|
|
1246
|
-
}
|
|
1247
|
-
function requireCreateOptionByType(typeDefinition, options, createMode, clearOptionKeys) {
|
|
1248
|
-
const typeName = typeDefinition.name;
|
|
1249
|
-
const optionLookup = buildCreateOptionValueLookup(options);
|
|
1250
|
-
const baseRequiredOptions = buildRequiredCreateOptions(typeDefinition, createMode);
|
|
1251
|
-
const policyState = resolveCommandOptionPolicyState(typeDefinition, "create", baseRequiredOptions);
|
|
1252
|
-
if (policyState.errors.length > 0) {
|
|
1253
|
-
throw new PmCliError(policyState.errors.join("; "), EXIT_CODE.CONFLICT);
|
|
1254
|
-
}
|
|
1255
|
-
assertNoDisabledCreateOptions(policyState.disabled, optionLookup, clearOptionKeys, typeName);
|
|
1256
|
-
assertNoStrictRequiredOptionClears(policyState.required, createMode, clearOptionKeys);
|
|
1257
|
-
const satisfiesRequiredOption = (optionKey) => {
|
|
1258
|
-
if (optionKey === "status" && typeDefinition.default_status !== void 0) {
|
|
1259
|
-
return true;
|
|
1260
|
-
}
|
|
1261
|
-
return hasCreateOptionValue(optionLookup, optionKey);
|
|
1262
|
-
};
|
|
1263
|
-
const missingRequiredOptions = policyState.required.filter((required) => !satisfiesRequiredOption(required));
|
|
1264
|
-
return [...new Set(missingRequiredOptions.map((required) => commandOptionFlagLabel("create", required)))].sort((left, right) => left.localeCompare(right));
|
|
1265
|
-
}
|
|
1266
|
-
var MISSING_REQUIRED_TYPE_OPTION_PATTERN = /^Missing required type option "([^"]+)" for type "([^"]+)"$/;
|
|
1267
|
-
function collectMissingRequiredTypeOptionKeys(errors, typeName) {
|
|
1268
|
-
const missingKeys = [];
|
|
1269
|
-
for (const error of errors) {
|
|
1270
|
-
const match = error.match(MISSING_REQUIRED_TYPE_OPTION_PATTERN);
|
|
1271
|
-
if (!match) {
|
|
1272
|
-
continue;
|
|
1273
|
-
}
|
|
1274
|
-
if (match[2] !== typeName) {
|
|
1275
|
-
continue;
|
|
1276
|
-
}
|
|
1277
|
-
missingKeys.push(match[1]);
|
|
1278
|
-
}
|
|
1279
|
-
return [...new Set(missingKeys)].sort((left, right) => left.localeCompare(right));
|
|
1280
|
-
}
|
|
1281
|
-
function filterNonMissingTypeOptionErrors(errors, typeName) {
|
|
1282
|
-
return errors.filter((error) => {
|
|
1283
|
-
const match = error.match(MISSING_REQUIRED_TYPE_OPTION_PATTERN);
|
|
1284
|
-
return !match || match[2] !== typeName;
|
|
1285
|
-
});
|
|
1286
|
-
}
|
|
1287
|
-
function assertNoInvalidTypeOptions(errors, type, typeDefinition, statusRegistry) {
|
|
1288
|
-
const nonMissingTypeOptionErrors = filterNonMissingTypeOptionErrors(errors, type);
|
|
1289
|
-
if (nonMissingTypeOptionErrors.length === 0) {
|
|
1290
|
-
return;
|
|
1291
|
-
}
|
|
1292
|
-
const nextValidExample = buildTypeSpecificCreateExample(typeDefinition, [], [], statusRegistry.open_status);
|
|
1293
|
-
throw new PmCliError(nonMissingTypeOptionErrors.join("; "), EXIT_CODE.USAGE, {
|
|
1294
|
-
code: "invalid_argument_value",
|
|
1295
|
-
required: `Provide valid --type-option key/value pairs for type "${type}".`,
|
|
1296
|
-
examples: [nextValidExample],
|
|
1297
|
-
nextSteps: [`Run "pm create --help --type ${type}" to review allowed type-option keys and values.`]
|
|
1298
|
-
});
|
|
1299
|
-
}
|
|
1300
|
-
function typeOptionExampleValue(typeDefinition, key) {
|
|
1301
|
-
const optionDefinition = typeDefinition.options.find((option) => option.key === key);
|
|
1302
|
-
const firstAllowed = optionDefinition?.values[0];
|
|
1303
|
-
if (typeof firstAllowed === "string" && firstAllowed.trim().length > 0) {
|
|
1304
|
-
return firstAllowed;
|
|
1305
|
-
}
|
|
1306
|
-
return "<value>";
|
|
1307
|
-
}
|
|
1308
|
-
function createExampleTokensForFlag(flag, typeName, openStatus) {
|
|
1309
|
-
switch (flag) {
|
|
1310
|
-
case "--title":
|
|
1311
|
-
return ["--title", `"${typeName} example title"`];
|
|
1312
|
-
case "--description":
|
|
1313
|
-
return ["--description", `"${typeName} example description"`];
|
|
1314
|
-
case "--type":
|
|
1315
|
-
return ["--type", typeName];
|
|
1316
|
-
case "--status":
|
|
1317
|
-
return ["--status", openStatus];
|
|
1318
|
-
case "--priority":
|
|
1319
|
-
return ["--priority", "1"];
|
|
1320
|
-
case "--message":
|
|
1321
|
-
return ["--message", `"Create ${typeName} item"`];
|
|
1322
|
-
case "--dep":
|
|
1323
|
-
return ["--dep", '"id=pm-xxxx,kind=related,author=maintainer,created_at=now"'];
|
|
1324
|
-
case "--comment":
|
|
1325
|
-
return ["--comment", '"author=maintainer,created_at=now,text=Implementation context"'];
|
|
1326
|
-
case "--note":
|
|
1327
|
-
return ["--note", '"author=maintainer,created_at=now,text=Design note"'];
|
|
1328
|
-
case "--learning":
|
|
1329
|
-
return ["--learning", '"author=maintainer,created_at=now,text=Durable lesson"'];
|
|
1330
|
-
case "--file":
|
|
1331
|
-
return ["--file", '"path=src/example.ts,note=implementation file"'];
|
|
1332
|
-
case "--test":
|
|
1333
|
-
return ["--test", '"command=node scripts/run-tests.mjs test,timeout_seconds=240"'];
|
|
1334
|
-
case "--doc":
|
|
1335
|
-
return ["--doc", '"path=README.md,note=reference doc"'];
|
|
1336
|
-
default:
|
|
1337
|
-
return [flag, '"<value>"'];
|
|
1338
|
-
}
|
|
1339
|
-
}
|
|
1340
|
-
function buildTypeSpecificCreateExample(typeDefinition, missingCreateFlags, missingTypeOptionKeys, openStatus) {
|
|
1341
|
-
const tokens = ["pm", "create", "--title", `"${typeDefinition.name} example title"`, "--description", `"${typeDefinition.name} example description"`, "--type", typeDefinition.name];
|
|
1342
|
-
const optionalRecommendationFlags = ["--status", "--priority", "--message"];
|
|
1343
|
-
const orderedFlags = [.../* @__PURE__ */ new Set([...optionalRecommendationFlags, ...missingCreateFlags])];
|
|
1344
|
-
const includedFlags = /* @__PURE__ */ new Set(["--title", "--description", "--type"]);
|
|
1345
|
-
for (const flag of orderedFlags) {
|
|
1346
|
-
if (includedFlags.has(flag)) {
|
|
1347
|
-
continue;
|
|
1348
|
-
}
|
|
1349
|
-
tokens.push(...createExampleTokensForFlag(flag, typeDefinition.name, openStatus));
|
|
1350
|
-
includedFlags.add(flag);
|
|
1351
|
-
}
|
|
1352
|
-
for (const key of missingTypeOptionKeys) {
|
|
1353
|
-
const value = typeOptionExampleValue(typeDefinition, key);
|
|
1354
|
-
tokens.push("--type-option", `${key}=${value}`);
|
|
1355
|
-
}
|
|
1356
|
-
return tokens.join(" ");
|
|
1357
|
-
}
|
|
1358
|
-
function requireStringOption(value, flag) {
|
|
1359
|
-
if (value === void 0) {
|
|
1360
|
-
if (flag === "--title") {
|
|
1361
|
-
throw new PmCliError('Missing required option --title. Why required: every item needs a human-readable title for lookup, search, and reporting. Retry: pass the title as the first positional argument (example: pm create "Fix login bug" --type Issue) or with --title.', EXIT_CODE.USAGE);
|
|
1362
|
-
}
|
|
1363
|
-
throw new PmCliError(`Missing required option ${flag}`, EXIT_CODE.USAGE);
|
|
1364
|
-
}
|
|
1365
|
-
return value;
|
|
1366
|
-
}
|
|
1367
|
-
function selectAuthor(explicitAuthor, settingsAuthor) {
|
|
1368
|
-
const candidate = parseOptionalString(explicitAuthor) ?? process.env.PM_AUTHOR ?? settingsAuthor;
|
|
1369
|
-
const trimmed = candidate.trim();
|
|
1370
|
-
return trimmed || "unknown";
|
|
1371
|
-
}
|
|
1372
|
-
function ensurePriority(rawPriority) {
|
|
1373
|
-
return resolvePriority(rawPriority);
|
|
1374
|
-
}
|
|
1375
|
-
function mergeCreateOptionsWithTemplate(templateOptions, explicitOptions) {
|
|
1376
|
-
const merged = {};
|
|
1377
|
-
for (const [key, value] of Object.entries(templateOptions)) {
|
|
1378
|
-
merged[key] = Array.isArray(value) ? [...value] : value;
|
|
1379
|
-
}
|
|
1380
|
-
for (const [key, value] of Object.entries(explicitOptions)) {
|
|
1381
|
-
if (value !== void 0) {
|
|
1382
|
-
merged[key] = Array.isArray(value) ? [...value] : value;
|
|
1383
|
-
}
|
|
1384
|
-
}
|
|
1385
|
-
return merged;
|
|
1386
|
-
}
|
|
1387
|
-
function normalizeExtensionCommandPath(command) {
|
|
1388
|
-
return command.trim().toLowerCase().split(/\s+/).filter((part) => part.length > 0).join(" ");
|
|
1389
|
-
}
|
|
1390
|
-
function hasTemplatesShowHandler() {
|
|
1391
|
-
const registrations = getActiveExtensionRegistrations();
|
|
1392
|
-
if (!registrations) {
|
|
1393
|
-
return false;
|
|
1394
|
-
}
|
|
1395
|
-
return registrations.commands.some((entry) => {
|
|
1396
|
-
return entry.action === "templates-show" || normalizeExtensionCommandPath(entry.command) === "templates show";
|
|
1397
|
-
});
|
|
1398
|
-
}
|
|
1399
|
-
function readTemplateOptionsFromRuntimeResult(result, templateName) {
|
|
1400
|
-
if (typeof result !== "object" || result === null || !("options" in result)) {
|
|
1401
|
-
throw new PmCliError(`Templates package returned invalid payload for template "${templateName}". Expected an options object.`, EXIT_CODE.GENERIC_FAILURE);
|
|
1402
|
-
}
|
|
1403
|
-
const options = result.options;
|
|
1404
|
-
if (typeof options !== "object" || options === null || Array.isArray(options)) {
|
|
1405
|
-
throw new PmCliError(`Templates package returned invalid options for template "${templateName}".`, EXIT_CODE.GENERIC_FAILURE);
|
|
1406
|
-
}
|
|
1407
|
-
const normalized = {};
|
|
1408
|
-
for (const [key, value] of Object.entries(options)) {
|
|
1409
|
-
if (typeof value === "string") {
|
|
1410
|
-
normalized[key] = value;
|
|
1411
|
-
continue;
|
|
1412
|
-
}
|
|
1413
|
-
if (Array.isArray(value) && value.every((entry) => typeof entry === "string")) {
|
|
1414
|
-
normalized[key] = [...value];
|
|
1415
|
-
continue;
|
|
1416
|
-
}
|
|
1417
|
-
throw new PmCliError(`Templates package returned unsupported option value for "${key}" in template "${templateName}".`, EXIT_CODE.GENERIC_FAILURE);
|
|
1418
|
-
}
|
|
1419
|
-
return normalized;
|
|
1420
|
-
}
|
|
1421
|
-
async function loadCreateTemplateOptionsFromRuntime(templateName, global, pmRoot) {
|
|
1422
|
-
if (!hasTemplatesShowHandler()) {
|
|
1423
|
-
throw new PmCliError(`--template requires the templates package. Install it first (for example: pm install templates --project).`, EXIT_CODE.USAGE);
|
|
1424
|
-
}
|
|
1425
|
-
const handlerResult = await runActiveCommandHandler({
|
|
1426
|
-
command: "templates show",
|
|
1427
|
-
args: [templateName],
|
|
1428
|
-
options: {},
|
|
1429
|
-
global,
|
|
1430
|
-
pm_root: pmRoot
|
|
1431
|
-
});
|
|
1432
|
-
if (!handlerResult.handled) {
|
|
1433
|
-
const warningSuffix = handlerResult.warnings.length > 0 ? ` (${handlerResult.warnings.join(", ")})` : "";
|
|
1434
|
-
throw new PmCliError(`Unable to resolve template "${templateName}" via templates package. Run "pm templates show ${templateName}" for details.${warningSuffix}`, EXIT_CODE.USAGE);
|
|
1435
|
-
}
|
|
1436
|
-
return readTemplateOptionsFromRuntimeResult(handlerResult.result, templateName);
|
|
1437
|
-
}
|
|
1438
|
-
function ensureInitHasRun(pmRoot) {
|
|
1439
|
-
return pathExists(getSettingsPath(pmRoot)).then((exists) => {
|
|
1440
|
-
if (!exists) {
|
|
1441
|
-
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
1442
|
-
}
|
|
1443
|
-
});
|
|
1444
|
-
}
|
|
1445
|
-
function resolveUnsettableOptionalString(unsetKeys, frontMatterKey, raw) {
|
|
1446
|
-
return unsetKeys.has(frontMatterKey) || raw === void 0 ? void 0 : parseOptionalString(raw);
|
|
1447
|
-
}
|
|
1448
|
-
function resolveUnsettableTransformed(unsetKeys, frontMatterKey, raw, transform) {
|
|
1449
|
-
return unsetKeys.has(frontMatterKey) || raw === void 0 ? void 0 : transform(raw);
|
|
1450
|
-
}
|
|
1451
|
-
var CALENDAR_RELEVANT_CREATE_TYPES = /* @__PURE__ */ new Set(["milestone", "meeting", "reminder", "event"]);
|
|
1452
|
-
function createItemLacksSchedule(type, deadline, reminders, events) {
|
|
1453
|
-
const hasDeadline = deadline !== void 0;
|
|
1454
|
-
const hasReminders = reminders !== void 0 && reminders.length > 0;
|
|
1455
|
-
const hasEvents = events !== void 0 && events.length > 0;
|
|
1456
|
-
return CALENDAR_RELEVANT_CREATE_TYPES.has(type.toLowerCase()) && !hasDeadline && !hasReminders && !hasEvents;
|
|
1457
|
-
}
|
|
1458
|
-
function collectCreateScheduleWarnings(type, id, deadline, reminders, events) {
|
|
1459
|
-
const warnings = [];
|
|
1460
|
-
if (type.toLowerCase() === "event" && (events === void 0 || events.length === 0)) {
|
|
1461
|
-
warnings.push(`event_without_schedule:${id}:no_time_set`);
|
|
1462
|
-
}
|
|
1463
|
-
if (createItemLacksSchedule(type, deadline, reminders, events)) {
|
|
1464
|
-
warnings.push(`calendar_item_without_schedule:${id}:no_deadline_or_reminder_or_event (hint: set --deadline <ISO> or --reminder "<when>", or link an Event via --event "start=<ISO>,end=<ISO>"; otherwise this item never appears on pm calendar)`);
|
|
1465
|
-
}
|
|
1466
|
-
return warnings;
|
|
1467
|
-
}
|
|
1468
|
-
async function inheritFocusedParent(parent, resolvedOptions, unsetKeys, pmRoot) {
|
|
1469
|
-
if (parent !== void 0 || unsetKeys.has("parent") || resolvedOptions.parent !== void 0) {
|
|
1470
|
-
return { parent, parentSource: void 0 };
|
|
1471
|
-
}
|
|
1472
|
-
const focused = await getFocusedItem(pmRoot);
|
|
1473
|
-
if (focused === void 0) {
|
|
1474
|
-
return { parent, parentSource: void 0 };
|
|
1475
|
-
}
|
|
1476
|
-
return { parent: focused, parentSource: "focus" };
|
|
1477
|
-
}
|
|
1478
|
-
async function validateCreateParentReference(pmRoot, settings, typeRegistry, itemId, parent, policy) {
|
|
1479
|
-
const normalized = normalizeParentReferenceValue(parent);
|
|
1480
|
-
assertParentReferenceIsNotSelf(itemId, normalized, settings.id_prefix);
|
|
1481
|
-
const parentLocated = await locateItem(pmRoot, normalized, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
1482
|
-
if (parentLocated) {
|
|
1483
|
-
return { parent: normalized, warnings: [] };
|
|
1484
|
-
}
|
|
1485
|
-
const normalizedParentId = normalizeItemId(normalized, settings.id_prefix);
|
|
1486
|
-
return { parent: normalized, warnings: validateMissingParentReference(normalizedParentId, policy).warnings };
|
|
1487
|
-
}
|
|
1488
|
-
async function resolveCreateParentWithWarnings(params) {
|
|
1489
|
-
if (params.parent === void 0) {
|
|
1490
|
-
return { parent: void 0, warnings: [] };
|
|
1491
|
-
}
|
|
1492
|
-
const parentValidation = await validateCreateParentReference(params.pmRoot, params.settings, params.typeRegistry, params.itemId, params.parent, params.policy);
|
|
1493
|
-
return parentValidation;
|
|
1494
|
-
}
|
|
1495
|
-
async function resolveCreateItemId(params) {
|
|
1496
|
-
if (params.explicitId === void 0) {
|
|
1497
|
-
return generateItemId(params.pmRoot, params.settings.id_prefix);
|
|
1498
|
-
}
|
|
1499
|
-
if (typeof params.explicitId !== "string") {
|
|
1500
|
-
throw new PmCliError("--id must be a string", EXIT_CODE.USAGE);
|
|
1501
|
-
}
|
|
1502
|
-
const trimmedId = params.explicitId.trim();
|
|
1503
|
-
if (trimmedId.length === 0 || isPlaceholderReferenceToken(trimmedId)) {
|
|
1504
|
-
throw new PmCliError("--id must not be empty or use a placeholder token", EXIT_CODE.USAGE);
|
|
1505
|
-
}
|
|
1506
|
-
const normalizedId = normalizeItemId(trimmedId, params.settings.id_prefix);
|
|
1507
|
-
if (!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(normalizedId)) {
|
|
1508
|
-
throw new PmCliError("--id must contain only letters, numbers, and dashes after normalization", EXIT_CODE.USAGE);
|
|
1509
|
-
}
|
|
1510
|
-
return normalizedId;
|
|
1511
|
-
}
|
|
1512
|
-
function resolveCreateSprintOrRelease(unsetKeys, frontMatterKey, raw, field, policy) {
|
|
1513
|
-
const resolved = resolveUnsettableOptionalString(unsetKeys, frontMatterKey, raw);
|
|
1514
|
-
if (resolved === void 0) {
|
|
1515
|
-
return { value: void 0, warnings: [] };
|
|
1516
|
-
}
|
|
1517
|
-
const validation = validateSprintOrReleaseValue(field, resolved, policy);
|
|
1518
|
-
return { value: validation.value, warnings: validation.warnings };
|
|
1519
|
-
}
|
|
1520
|
-
async function resolveCreateBlockedByDependency(params) {
|
|
1521
|
-
const { pmRoot, settings, typeRegistry, statusRegistry, blockedBy, status, statusExplicit, nowValue, author } = params;
|
|
1522
|
-
let dependencyValues = params.dependencyValues;
|
|
1523
|
-
if (blockedBy === void 0) {
|
|
1524
|
-
return { dependencyValues, status };
|
|
1525
|
-
}
|
|
1526
|
-
const normalizedBlockedBy = normalizeItemId(blockedBy, settings.id_prefix);
|
|
1527
|
-
const blockedByLocated = await locateItem(pmRoot, normalizedBlockedBy, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
1528
|
-
if (!blockedByLocated) {
|
|
1529
|
-
return { dependencyValues, status };
|
|
1530
|
-
}
|
|
1531
|
-
const hasBlockedByDependency = (dependencyValues ?? []).some((dependency) => dependency.id === blockedByLocated.id && dependency.kind === "blocked_by");
|
|
1532
|
-
if (!hasBlockedByDependency) {
|
|
1533
|
-
dependencyValues = [
|
|
1534
|
-
...dependencyValues ?? [],
|
|
1535
|
-
{ id: blockedByLocated.id, kind: "blocked_by", created_at: nowValue, author }
|
|
1536
|
-
];
|
|
1537
|
-
}
|
|
1538
|
-
if (statusExplicit) {
|
|
1539
|
-
return { dependencyValues, status };
|
|
1540
|
-
}
|
|
1541
|
-
const blockedStatus = statusRegistry.blocked_statuses.has("blocked") ? "blocked" : [...statusRegistry.blocked_statuses].sort((left, right) => left.localeCompare(right))[0] ?? statusRegistry.open_status;
|
|
1542
|
-
return { dependencyValues, status: blockedStatus };
|
|
1543
|
-
}
|
|
1544
|
-
function applyCreateDefaultType(resolvedOptions, settings, typeRegistry) {
|
|
1545
|
-
const explicitStrictMode = typeof resolvedOptions.createMode === "string" && resolvedOptions.createMode.trim().toLowerCase() === "strict";
|
|
1546
|
-
if (explicitStrictMode) {
|
|
1547
|
-
return;
|
|
1548
|
-
}
|
|
1549
|
-
const defaultType = settings.governance.create_default_type?.trim();
|
|
1550
|
-
if (defaultType && defaultType.length > 0 && resolveTypeName(defaultType, typeRegistry)) {
|
|
1551
|
-
resolvedOptions.type = defaultType;
|
|
1552
|
-
return;
|
|
1553
|
-
}
|
|
1554
|
-
if (resolveTypeName("Task", typeRegistry)) {
|
|
1555
|
-
resolvedOptions.type = "Task";
|
|
1556
|
-
}
|
|
1557
|
-
}
|
|
1558
|
-
async function resolveCreateTypeSelection(options, global, pmRoot, settings, typeRegistry) {
|
|
1559
|
-
let resolvedOptions = options;
|
|
1560
|
-
if (resolvedOptions.template !== void 0) {
|
|
1561
|
-
const templateName = resolvedOptions.template.trim();
|
|
1562
|
-
if (templateName.length === 0) {
|
|
1563
|
-
throw new PmCliError("--template must not be empty. Omit --template to disable template usage.", EXIT_CODE.USAGE);
|
|
1564
|
-
}
|
|
1565
|
-
const templateOptions = await loadCreateTemplateOptionsFromRuntime(templateName, global, pmRoot);
|
|
1566
|
-
resolvedOptions = normalizeLegacyNoneCreateOptions(mergeCreateOptionsWithTemplate(templateOptions, resolvedOptions));
|
|
1567
|
-
}
|
|
1568
|
-
if (resolvedOptions.type === void 0) {
|
|
1569
|
-
applyCreateDefaultType(resolvedOptions, settings, typeRegistry);
|
|
1570
|
-
}
|
|
1571
|
-
if (resolvedOptions.type === void 0) {
|
|
1572
|
-
throw new PmCliError("Missing required option --type <value>", EXIT_CODE.USAGE);
|
|
1573
|
-
}
|
|
1574
|
-
let resolvedTypeName = resolveTypeName(resolvedOptions.type, typeRegistry);
|
|
1575
|
-
if (!resolvedTypeName) {
|
|
1576
|
-
const synonymCanonical = resolveTypeSynonym(resolvedOptions.type);
|
|
1577
|
-
const synonymResolved = synonymCanonical ? resolveTypeName(synonymCanonical, typeRegistry) : void 0;
|
|
1578
|
-
if (synonymResolved) {
|
|
1579
|
-
printError(`[pm] note: type '${resolvedOptions.type.trim()}' is not defined; using closest match '${synonymResolved}'. Run 'pm schema add-type "${resolvedOptions.type.trim()}"' to track it as a distinct type.`);
|
|
1580
|
-
resolvedOptions.type = synonymResolved;
|
|
1581
|
-
resolvedTypeName = synonymResolved;
|
|
1582
|
-
} else {
|
|
1583
|
-
throw new PmCliError(buildInvalidTypeError(resolvedOptions.type, typeRegistry.types, resolveItemTypesFilePath(pmRoot, settings.schema)), EXIT_CODE.USAGE);
|
|
1584
|
-
}
|
|
1585
|
-
}
|
|
1586
|
-
const typeDefinition = resolveTypeDefinition(resolvedTypeName, typeRegistry);
|
|
1587
|
-
if (!typeDefinition) {
|
|
1588
|
-
throw new PmCliError(`Invalid type value "${resolvedOptions.type}"`, EXIT_CODE.USAGE);
|
|
1589
|
-
}
|
|
1590
|
-
const type = typeDefinition.name;
|
|
1591
|
-
const schedulePreset = resolveScheduleCreatePreset(resolvedOptions.schedulePreset);
|
|
1592
|
-
if (schedulePreset !== void 0 && !SCHEDULE_CREATE_PRESET_TYPES.has(type)) {
|
|
1593
|
-
throw new PmCliError(`--schedule-preset ${schedulePreset} is only supported for Reminder, Meeting, or Event types`, EXIT_CODE.USAGE);
|
|
1594
|
-
}
|
|
1595
|
-
const createMode = resolveEffectiveCreateMode(resolvedOptions.createMode, schedulePreset, settings.governance.create_mode_default);
|
|
1596
|
-
return { resolvedOptions, typeDefinition, type, schedulePreset, createMode };
|
|
1597
|
-
}
|
|
1598
|
-
function collectCreateClearTargets(resolvedOptions, unsetTargets) {
|
|
1599
|
-
const explicitUnsets = new Set(unsetTargets.frontMatterKeys);
|
|
1600
|
-
const clearOptionKeys = new Set(unsetTargets.optionKeys);
|
|
1601
|
-
const clearCollectionDefinitions = [
|
|
1602
|
-
{ enabled: resolvedOptions.clearDeps, optionKey: "dep", clearFlag: "--clear-deps", valueFlag: "--dep", values: resolvedOptions.dep, frontMatterKey: "dependencies" },
|
|
1603
|
-
{ enabled: resolvedOptions.clearComments, optionKey: "comment", clearFlag: "--clear-comments", valueFlag: "--comment", values: resolvedOptions.comment, frontMatterKey: "comments" },
|
|
1604
|
-
{ enabled: resolvedOptions.clearNotes, optionKey: "note", clearFlag: "--clear-notes", valueFlag: "--note", values: resolvedOptions.note, frontMatterKey: "notes" },
|
|
1605
|
-
{ enabled: resolvedOptions.clearLearnings, optionKey: "learning", clearFlag: "--clear-learnings", valueFlag: "--learning", values: resolvedOptions.learning, frontMatterKey: "learnings" },
|
|
1606
|
-
{ enabled: resolvedOptions.clearFiles, optionKey: "file", clearFlag: "--clear-files", valueFlag: "--file", values: resolvedOptions.file, frontMatterKey: "files" },
|
|
1607
|
-
{ enabled: resolvedOptions.clearTests, optionKey: "test", clearFlag: "--clear-tests", valueFlag: "--test", values: resolvedOptions.test, frontMatterKey: "tests" },
|
|
1608
|
-
{ enabled: resolvedOptions.clearDocs, optionKey: "doc", clearFlag: "--clear-docs", valueFlag: "--doc", values: resolvedOptions.doc, frontMatterKey: "docs" },
|
|
1609
|
-
{ enabled: resolvedOptions.clearReminders, optionKey: "reminder", clearFlag: "--clear-reminders", valueFlag: "--reminder", values: resolvedOptions.reminder, frontMatterKey: "reminders" },
|
|
1610
|
-
{ enabled: resolvedOptions.clearEvents, optionKey: "event", clearFlag: "--clear-events", valueFlag: "--event", values: resolvedOptions.event, frontMatterKey: "events" },
|
|
1611
|
-
{ enabled: resolvedOptions.clearTypeOptions, optionKey: "typeOption", clearFlag: "--clear-type-options", valueFlag: "--type-option", values: resolvedOptions.typeOption, frontMatterKey: "type_options" }
|
|
1612
|
-
];
|
|
1613
|
-
for (const definition of clearCollectionDefinitions) {
|
|
1614
|
-
if (!definition.enabled) {
|
|
1615
|
-
continue;
|
|
1616
|
-
}
|
|
1617
|
-
if (definition.values && definition.values.length > 0) {
|
|
1618
|
-
throw new PmCliError(`Cannot combine ${definition.clearFlag} with ${definition.valueFlag}`, EXIT_CODE.USAGE);
|
|
1619
|
-
}
|
|
1620
|
-
explicitUnsets.add(definition.frontMatterKey);
|
|
1621
|
-
clearOptionKeys.add(definition.optionKey);
|
|
1622
|
-
}
|
|
1623
|
-
return { explicitUnsets, clearOptionKeys };
|
|
1624
|
-
}
|
|
1625
|
-
function assertNoCreateScalarUnsetConflicts(resolvedOptions, unsetTargets) {
|
|
1626
|
-
const scalarOptionPresence = {
|
|
1627
|
-
tags: resolvedOptions.tags !== void 0,
|
|
1628
|
-
deadline: resolvedOptions.deadline !== void 0,
|
|
1629
|
-
estimatedMinutes: resolvedOptions.estimatedMinutes !== void 0,
|
|
1630
|
-
acceptanceCriteria: resolvedOptions.acceptanceCriteria !== void 0,
|
|
1631
|
-
/* c8 ignore next -- definitionOfReady option presence is covered by legacy migration tests. */
|
|
1632
|
-
definitionOfReady: resolvedOptions.definitionOfReady !== void 0,
|
|
1633
|
-
order: resolvedOptions.order !== void 0 || resolvedOptions.rank !== void 0,
|
|
1634
|
-
goal: resolvedOptions.goal !== void 0,
|
|
1635
|
-
objective: resolvedOptions.objective !== void 0,
|
|
1636
|
-
value: resolvedOptions.value !== void 0,
|
|
1637
|
-
impact: resolvedOptions.impact !== void 0,
|
|
1638
|
-
outcome: resolvedOptions.outcome !== void 0,
|
|
1639
|
-
whyNow: resolvedOptions.whyNow !== void 0,
|
|
1640
|
-
author: resolvedOptions.author !== void 0,
|
|
1641
|
-
assignee: resolvedOptions.assignee !== void 0,
|
|
1642
|
-
parent: resolvedOptions.parent !== void 0,
|
|
1643
|
-
reviewer: resolvedOptions.reviewer !== void 0,
|
|
1644
|
-
risk: resolvedOptions.risk !== void 0,
|
|
1645
|
-
confidence: resolvedOptions.confidence !== void 0,
|
|
1646
|
-
sprint: resolvedOptions.sprint !== void 0,
|
|
1647
|
-
release: resolvedOptions.release !== void 0,
|
|
1648
|
-
blockedBy: resolvedOptions.blockedBy !== void 0,
|
|
1649
|
-
blockedReason: resolvedOptions.blockedReason !== void 0,
|
|
1650
|
-
unblockNote: resolvedOptions.unblockNote !== void 0,
|
|
1651
|
-
reporter: resolvedOptions.reporter !== void 0,
|
|
1652
|
-
severity: resolvedOptions.severity !== void 0,
|
|
1653
|
-
environment: resolvedOptions.environment !== void 0,
|
|
1654
|
-
reproSteps: resolvedOptions.reproSteps !== void 0,
|
|
1655
|
-
resolution: resolvedOptions.resolution !== void 0,
|
|
1656
|
-
expectedResult: resolvedOptions.expectedResult !== void 0,
|
|
1657
|
-
actualResult: resolvedOptions.actualResult !== void 0,
|
|
1658
|
-
affectedVersion: resolvedOptions.affectedVersion !== void 0,
|
|
1659
|
-
fixedVersion: resolvedOptions.fixedVersion !== void 0,
|
|
1660
|
-
component: resolvedOptions.component !== void 0,
|
|
1661
|
-
regression: resolvedOptions.regression !== void 0,
|
|
1662
|
-
customerImpact: resolvedOptions.customerImpact !== void 0
|
|
1663
|
-
};
|
|
1664
|
-
for (const [optionKey, hasValue] of Object.entries(scalarOptionPresence)) {
|
|
1665
|
-
if (!hasValue || !unsetTargets.optionKeys.has(optionKey)) {
|
|
1666
|
-
continue;
|
|
1667
|
-
}
|
|
1668
|
-
const unsetField = CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey) ?? optionKey;
|
|
1669
|
-
throw new PmCliError(`Cannot combine --unset ${unsetField} with ${commandOptionFlagLabel("create", optionKey)}`, EXIT_CODE.USAGE);
|
|
1670
|
-
}
|
|
1671
|
-
}
|
|
1672
|
-
function assertNoLegacyCreateScalarTokens(resolvedOptions) {
|
|
1673
|
-
const assertNoLegacyScalarToken = (value, optionKey) => {
|
|
1674
|
-
const unsetField = CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey);
|
|
1675
|
-
const hint = unsetField ? `Use --unset ${unsetField} to clear this field.` : void 0;
|
|
1676
|
-
assertNoLegacyNoneToken(value, commandOptionFlagLabel("create", optionKey), hint);
|
|
1677
|
-
};
|
|
1678
|
-
assertNoLegacyScalarToken(resolvedOptions.tags, "tags");
|
|
1679
|
-
assertNoLegacyScalarToken(resolvedOptions.deadline, "deadline");
|
|
1680
|
-
assertNoLegacyScalarToken(resolvedOptions.estimatedMinutes, "estimatedMinutes");
|
|
1681
|
-
assertNoLegacyScalarToken(resolvedOptions.acceptanceCriteria, "acceptanceCriteria");
|
|
1682
|
-
assertNoLegacyScalarToken(resolvedOptions.definitionOfReady, "definitionOfReady");
|
|
1683
|
-
assertNoLegacyScalarToken(resolvedOptions.order ?? resolvedOptions.rank, "order");
|
|
1684
|
-
assertNoLegacyScalarToken(resolvedOptions.goal, "goal");
|
|
1685
|
-
assertNoLegacyScalarToken(resolvedOptions.objective, "objective");
|
|
1686
|
-
assertNoLegacyScalarToken(resolvedOptions.value, "value");
|
|
1687
|
-
assertNoLegacyScalarToken(resolvedOptions.impact, "impact");
|
|
1688
|
-
assertNoLegacyScalarToken(resolvedOptions.outcome, "outcome");
|
|
1689
|
-
assertNoLegacyScalarToken(resolvedOptions.whyNow, "whyNow");
|
|
1690
|
-
assertNoLegacyScalarToken(resolvedOptions.author, "author");
|
|
1691
|
-
assertNoLegacyScalarToken(resolvedOptions.assignee, "assignee");
|
|
1692
|
-
assertNoLegacyScalarToken(resolvedOptions.parent, "parent");
|
|
1693
|
-
assertNoLegacyScalarToken(resolvedOptions.reviewer, "reviewer");
|
|
1694
|
-
assertNoLegacyScalarToken(resolvedOptions.risk, "risk");
|
|
1695
|
-
assertNoLegacyScalarToken(resolvedOptions.confidence, "confidence");
|
|
1696
|
-
assertNoLegacyScalarToken(resolvedOptions.sprint, "sprint");
|
|
1697
|
-
assertNoLegacyScalarToken(resolvedOptions.release, "release");
|
|
1698
|
-
assertNoLegacyScalarToken(resolvedOptions.blockedBy, "blockedBy");
|
|
1699
|
-
assertNoLegacyScalarToken(resolvedOptions.blockedReason, "blockedReason");
|
|
1700
|
-
assertNoLegacyScalarToken(resolvedOptions.unblockNote, "unblockNote");
|
|
1701
|
-
assertNoLegacyScalarToken(resolvedOptions.reporter, "reporter");
|
|
1702
|
-
assertNoLegacyScalarToken(resolvedOptions.severity, "severity");
|
|
1703
|
-
assertNoLegacyScalarToken(resolvedOptions.environment, "environment");
|
|
1704
|
-
assertNoLegacyScalarToken(resolvedOptions.reproSteps, "reproSteps");
|
|
1705
|
-
assertNoLegacyScalarToken(resolvedOptions.resolution, "resolution");
|
|
1706
|
-
assertNoLegacyScalarToken(resolvedOptions.expectedResult, "expectedResult");
|
|
1707
|
-
assertNoLegacyScalarToken(resolvedOptions.actualResult, "actualResult");
|
|
1708
|
-
assertNoLegacyScalarToken(resolvedOptions.affectedVersion, "affectedVersion");
|
|
1709
|
-
assertNoLegacyScalarToken(resolvedOptions.fixedVersion, "fixedVersion");
|
|
1710
|
-
assertNoLegacyScalarToken(resolvedOptions.component, "component");
|
|
1711
|
-
assertNoLegacyScalarToken(resolvedOptions.regression, "regression");
|
|
1712
|
-
assertNoLegacyScalarToken(resolvedOptions.customerImpact, "customerImpact");
|
|
1713
|
-
}
|
|
1714
|
-
function assertNoCreateFieldUnsetConflicts(registeredItemFieldValues, runtimeCreateFieldValues, unsetTargets) {
|
|
1715
|
-
for (const fieldKey of Object.keys(registeredItemFieldValues)) {
|
|
1716
|
-
if (!unsetTargets.frontMatterKeys.has(fieldKey)) {
|
|
1717
|
-
continue;
|
|
1718
|
-
}
|
|
1719
|
-
throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_", "-")} with --field ${fieldKey}=...`, EXIT_CODE.USAGE);
|
|
1720
|
-
}
|
|
1721
|
-
for (const fieldKey of Object.keys(runtimeCreateFieldValues.values ?? {})) {
|
|
1722
|
-
if (!unsetTargets.frontMatterKeys.has(fieldKey)) {
|
|
1723
|
-
continue;
|
|
1724
|
-
}
|
|
1725
|
-
throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_", "-")} with its value flag`, EXIT_CODE.USAGE);
|
|
1726
|
-
}
|
|
1727
|
-
}
|
|
1728
|
-
function assertNoMissingRequiredCreateOptions(params) {
|
|
1729
|
-
const { combinedMissingFlags, typeDefinition, missingRequiredCreateFlags, missingRequiredTypeOptionKeys, openStatus, type, createMode } = params;
|
|
1730
|
-
if (combinedMissingFlags.length === 0) {
|
|
1731
|
-
return;
|
|
1732
|
-
}
|
|
1733
|
-
const nextValidExample = buildTypeSpecificCreateExample(typeDefinition, missingRequiredCreateFlags, missingRequiredTypeOptionKeys, openStatus);
|
|
1734
|
-
const nextSteps = [`Run "pm create --help --type ${type}" for type-aware required option guidance.`];
|
|
1735
|
-
if (combinedMissingFlags.includes("--title")) {
|
|
1736
|
-
nextSteps.push('Title can also be passed as the first positional argument (example: pm create "Your title" --type ' + type + ").");
|
|
1737
|
-
}
|
|
1738
|
-
if (createMode === "strict") {
|
|
1739
|
-
nextSteps.push('For staged onboarding, retry with "--create-mode progressive".');
|
|
1740
|
-
if (SCHEDULE_CREATE_PRESET_TYPES.has(type)) {
|
|
1741
|
-
nextSteps.push('For minimal scheduling inputs, try "--schedule-preset lightweight".');
|
|
1742
|
-
}
|
|
1743
|
-
}
|
|
1744
|
-
const errorMessage = combinedMissingFlags.length === 1 ? `Missing required option ${combinedMissingFlags[0]} for type "${type}"` : `Missing required options ${combinedMissingFlags.join(", ")} for type "${type}"`;
|
|
1745
|
-
throw new PmCliError(errorMessage, EXIT_CODE.USAGE, {
|
|
1746
|
-
code: "missing_required_option",
|
|
1747
|
-
required: `Provide all required create options and type options for type "${type}" in one invocation.`,
|
|
1748
|
-
examples: [nextValidExample],
|
|
1749
|
-
nextSteps,
|
|
1750
|
-
recovery: createMode === "strict" ? {
|
|
1751
|
-
recovery_mode: "compact",
|
|
1752
|
-
missing_required_fields: combinedMissingFlags,
|
|
1753
|
-
suggested_flags: ["--create-mode progressive", ...combinedMissingFlags]
|
|
1754
|
-
} : void 0
|
|
1755
|
-
});
|
|
1756
|
-
}
|
|
1757
|
-
function resolveCreateTags(unsetKeys, resolvedOptions) {
|
|
1758
|
-
if (unsetKeys.has("tags") && Array.isArray(resolvedOptions.addTags) && resolvedOptions.addTags.length > 0) {
|
|
1759
|
-
throw new PmCliError("Cannot combine --unset tags with --add-tags", EXIT_CODE.USAGE);
|
|
1760
|
-
}
|
|
1761
|
-
const baseTags = unsetKeys.has("tags") ? [] : resolvedOptions.tags !== void 0 ? parseTags(resolvedOptions.tags) : [];
|
|
1762
|
-
return mergeAdditiveTags(baseTags, resolvedOptions.addTags);
|
|
1763
|
-
}
|
|
1764
|
-
function resolveCreateOrder(unsetKeys, resolvedOptions) {
|
|
1765
|
-
if (resolvedOptions.order !== void 0 && resolvedOptions.rank !== void 0 && resolvedOptions.order !== resolvedOptions.rank) {
|
|
1766
|
-
throw new PmCliError("--order and --rank must match when both are provided", EXIT_CODE.USAGE);
|
|
1767
|
-
}
|
|
1768
|
-
const orderRaw = resolvedOptions.order ?? resolvedOptions.rank;
|
|
1769
|
-
const order = resolveUnsettableTransformed(unsetKeys, "order", orderRaw, (raw) => parseOptionalNumber(raw, "order"));
|
|
1770
|
-
if (order !== void 0 && !Number.isInteger(order)) {
|
|
1771
|
-
throw new PmCliError("Order must be an integer", EXIT_CODE.USAGE);
|
|
1772
|
-
}
|
|
1773
|
-
return order;
|
|
1774
|
-
}
|
|
1775
|
-
function resolveCreateCloseReason(status, statusRegistry, settings, resolvedOptions, resolution) {
|
|
1776
|
-
if (status !== statusRegistry.close_status || !settings.governance.require_close_reason) {
|
|
1777
|
-
return { closeReason: void 0, warnings: [] };
|
|
1778
|
-
}
|
|
1779
|
-
const messageText = typeof resolvedOptions.message === "string" ? resolvedOptions.message.trim() : "";
|
|
1780
|
-
const resolutionText = typeof resolution === "string" ? resolution.trim() : "";
|
|
1781
|
-
const closeReason = messageText || resolutionText || CREATE_DIRECT_CLOSE_REASON_DEFAULT;
|
|
1782
|
-
const warnings = messageText.length === 0 && resolutionText.length === 0 ? ["close_reason_defaulted"] : [];
|
|
1783
|
-
return { closeReason, warnings };
|
|
1784
|
-
}
|
|
1785
|
-
async function writeCreatedItem(params) {
|
|
1786
|
-
const { pmRoot, type, id, settings, typeRegistry, author, extensionFieldNames, afterDocument, beforeDocument, historyMessage, changedFields, nowValue } = params;
|
|
1787
|
-
const itemPath = getItemPath(pmRoot, type, id, settings.item_format, typeRegistry.type_to_folder);
|
|
1788
|
-
const historyPath = getHistoryPath(pmRoot, id);
|
|
1789
|
-
const lockRelease = await acquireLock(pmRoot, id, settings.locks.ttl_seconds, author, false, settings.governance.force_required_for_stale_lock, settings.locks.wait_ms);
|
|
1790
|
-
let hookWarnings = [];
|
|
1791
|
-
try {
|
|
1792
|
-
const existing = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
1793
|
-
if (existing) {
|
|
1794
|
-
throw new PmCliError(`Item "${id}" already exists`, EXIT_CODE.CONFLICT);
|
|
1795
|
-
}
|
|
1796
|
-
await writeFileAtomic(itemPath, serializeItemDocument(afterDocument, { format: settings.item_format, schema: settings.schema, extensionFieldNames }));
|
|
1797
|
-
try {
|
|
1798
|
-
const entry = createHistoryEntry({ nowIso: nowValue, author, op: "create", before: beforeDocument, after: afterDocument, message: historyMessage });
|
|
1799
|
-
await appendHistoryEntry(historyPath, entry);
|
|
1800
|
-
} catch (error) {
|
|
1801
|
-
await removeFileIfExists(itemPath);
|
|
1802
|
-
throw error;
|
|
1803
|
-
}
|
|
1804
|
-
hookWarnings = [
|
|
1805
|
-
...await runActiveOnWriteHooks({
|
|
1806
|
-
path: itemPath,
|
|
1807
|
-
scope: "project",
|
|
1808
|
-
op: "create",
|
|
1809
|
-
item_id: afterDocument.metadata.id,
|
|
1810
|
-
item_type: afterDocument.metadata.type,
|
|
1811
|
-
before: beforeDocument,
|
|
1812
|
-
after: afterDocument,
|
|
1813
|
-
changed_fields: changedFields
|
|
1814
|
-
}),
|
|
1815
|
-
...await runActiveOnWriteHooks({
|
|
1816
|
-
path: historyPath,
|
|
1817
|
-
scope: "project",
|
|
1818
|
-
op: "create:history",
|
|
1819
|
-
item_id: afterDocument.metadata.id,
|
|
1820
|
-
item_type: afterDocument.metadata.type,
|
|
1821
|
-
before: beforeDocument,
|
|
1822
|
-
after: afterDocument,
|
|
1823
|
-
changed_fields: changedFields
|
|
1824
|
-
})
|
|
1825
|
-
];
|
|
1826
|
-
recordAfterCommandAffectedItem({
|
|
1827
|
-
id: afterDocument.metadata.id,
|
|
1828
|
-
op: "create",
|
|
1829
|
-
item_type: afterDocument.metadata.type,
|
|
1830
|
-
status: afterDocument.metadata.status,
|
|
1831
|
-
current: projectAfterCommandItemSnapshot(afterDocument.metadata, changedFields),
|
|
1832
|
-
changed_fields: changedFields
|
|
1833
|
-
});
|
|
1834
|
-
} finally {
|
|
1835
|
-
await lockRelease();
|
|
1836
|
-
}
|
|
1837
|
-
return hookWarnings;
|
|
1838
|
-
}
|
|
1839
|
-
async function runCreate(options, global) {
|
|
1840
|
-
let resolvedOptions = normalizeLegacyNoneCreateOptions(await resolveCreateStdinInputs(options));
|
|
1841
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
1842
|
-
await ensureInitHasRun(pmRoot);
|
|
1843
|
-
const settings = await readSettings(pmRoot);
|
|
1844
|
-
const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
|
|
1845
|
-
const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
|
|
1846
|
-
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
1847
|
-
const typeSelection = await resolveCreateTypeSelection(resolvedOptions, global, pmRoot, settings, typeRegistry);
|
|
1848
|
-
resolvedOptions = typeSelection.resolvedOptions;
|
|
1849
|
-
const { typeDefinition, type, createMode } = typeSelection;
|
|
1850
|
-
const unsetTargets = parseCreateUnsetTargets(resolvedOptions.unset, runtimeFieldRegistry);
|
|
1851
|
-
const { explicitUnsets, clearOptionKeys } = collectCreateClearTargets(resolvedOptions, unsetTargets);
|
|
1852
|
-
assertNoCreateScalarUnsetConflicts(resolvedOptions, unsetTargets);
|
|
1853
|
-
assertNoLegacyCreateScalarTokens(resolvedOptions);
|
|
1854
|
-
const missingRequiredCreateFlags = requireCreateOptionByType(typeDefinition, resolvedOptions, createMode, clearOptionKeys);
|
|
1855
|
-
const nowValue = nowIso();
|
|
1856
|
-
const author = selectAuthor(resolvedOptions.author, settings.author_default);
|
|
1857
|
-
const dependencies = parseDependencies(resolvedOptions.dep, nowValue, settings.id_prefix);
|
|
1858
|
-
const comments = parseLogSeed("--comment", resolvedOptions.comment, nowValue, author);
|
|
1859
|
-
const notes = parseLogSeed("--note", resolvedOptions.note, nowValue, author);
|
|
1860
|
-
const learnings = parseLogSeed("--learning", resolvedOptions.learning, nowValue, author);
|
|
1861
|
-
const files = parseFiles(resolvedOptions.file);
|
|
1862
|
-
const tests = parseTests(resolvedOptions.test);
|
|
1863
|
-
const docs = parseDocs(resolvedOptions.doc);
|
|
1864
|
-
const reminders = parseReminders(resolvedOptions.reminder, nowValue);
|
|
1865
|
-
const events = parseEvents(resolvedOptions.event, nowValue);
|
|
1866
|
-
const typeOptions = parseTypeOptions(resolvedOptions.typeOption);
|
|
1867
|
-
const validatedTypeOptions = validateTypeOptions(type, typeOptions.values, typeRegistry);
|
|
1868
|
-
const extensionRegistrations = getActiveExtensionRegistrations();
|
|
1869
|
-
const extensionFieldNames = collectRegisteredItemFieldNames(extensionRegistrations);
|
|
1870
|
-
const registeredItemFieldValues = parseRegisteredItemFieldAssignments(resolvedOptions.field, extensionRegistrations);
|
|
1871
|
-
const runtimeCreateFieldValues = collectRuntimeCreateFieldValues(resolvedOptions, runtimeFieldRegistry, type);
|
|
1872
|
-
assertNoCreateFieldUnsetConflicts(registeredItemFieldValues, runtimeCreateFieldValues, unsetTargets);
|
|
1873
|
-
const missingRequiredTypeOptionKeys = collectMissingRequiredTypeOptionKeys(validatedTypeOptions.errors, type);
|
|
1874
|
-
const missingRequiredTypeOptionFlags = missingRequiredTypeOptionKeys.map((key) => `--type-option ${key}=<value>`);
|
|
1875
|
-
const combinedMissingFlags = [
|
|
1876
|
-
.../* @__PURE__ */ new Set([
|
|
1877
|
-
...missingRequiredCreateFlags,
|
|
1878
|
-
...missingRequiredTypeOptionFlags,
|
|
1879
|
-
/* c8 ignore next -- runtime-required flag aggregation is covered in runtime schema create tests. */
|
|
1880
|
-
...runtimeCreateFieldValues.missing_required_flags
|
|
1881
|
-
])
|
|
1882
|
-
].sort((left, right) => left.localeCompare(right));
|
|
1883
|
-
assertNoMissingRequiredCreateOptions({
|
|
1884
|
-
combinedMissingFlags,
|
|
1885
|
-
typeDefinition,
|
|
1886
|
-
missingRequiredCreateFlags,
|
|
1887
|
-
missingRequiredTypeOptionKeys,
|
|
1888
|
-
openStatus: statusRegistry.open_status,
|
|
1889
|
-
type,
|
|
1890
|
-
createMode
|
|
1891
|
-
});
|
|
1892
|
-
assertNoInvalidTypeOptions(validatedTypeOptions.errors, type, typeDefinition, statusRegistry);
|
|
1893
|
-
const id = await resolveCreateItemId({
|
|
1894
|
-
pmRoot,
|
|
1895
|
-
settings,
|
|
1896
|
-
explicitId: resolvedOptions.id
|
|
1897
|
-
});
|
|
1898
|
-
let status = resolvedOptions.status !== void 0 ? parseStatusValue(resolvedOptions.status, statusRegistry) : resolveCreateDefaultStatus(typeDefinition, statusRegistry);
|
|
1899
|
-
const priority = resolvedOptions.priority !== void 0 ? ensurePriority(resolvedOptions.priority) : 2;
|
|
1900
|
-
const unsetKeys = unsetTargets.frontMatterKeys;
|
|
1901
|
-
const tags = resolveCreateTags(unsetKeys, resolvedOptions);
|
|
1902
|
-
const deadline = resolveUnsettableTransformed(unsetKeys, "deadline", resolvedOptions.deadline, (raw) => resolveIsoOrRelative(raw, new Date(nowValue), "deadline"));
|
|
1903
|
-
const estimatedMinutes = resolveUnsettableTransformed(unsetKeys, "estimated_minutes", resolvedOptions.estimatedMinutes, (raw) => parseOptionalNumber(raw, "estimated-minutes"));
|
|
1904
|
-
const acceptanceCriteria = resolveUnsettableOptionalString(unsetKeys, "acceptance_criteria", resolvedOptions.acceptanceCriteria);
|
|
1905
|
-
const definitionOfReady = resolveUnsettableOptionalString(unsetKeys, "definition_of_ready", resolvedOptions.definitionOfReady);
|
|
1906
|
-
const order = resolveCreateOrder(unsetKeys, resolvedOptions);
|
|
1907
|
-
const goal = resolveUnsettableOptionalString(unsetKeys, "goal", resolvedOptions.goal);
|
|
1908
|
-
const objective = resolveUnsettableOptionalString(unsetKeys, "objective", resolvedOptions.objective);
|
|
1909
|
-
const value = resolveUnsettableOptionalString(unsetKeys, "value", resolvedOptions.value);
|
|
1910
|
-
const impact = resolveUnsettableOptionalString(unsetKeys, "impact", resolvedOptions.impact);
|
|
1911
|
-
const outcome = resolveUnsettableOptionalString(unsetKeys, "outcome", resolvedOptions.outcome);
|
|
1912
|
-
const whyNow = resolveUnsettableOptionalString(unsetKeys, "why_now", resolvedOptions.whyNow);
|
|
1913
|
-
const assignee = resolveUnsettableOptionalString(unsetKeys, "assignee", resolvedOptions.assignee);
|
|
1914
|
-
const authorValue = unsetKeys.has("author") ? void 0 : parseOptionalString(resolvedOptions.author) ?? author;
|
|
1915
|
-
const initialParent = resolveUnsettableOptionalString(unsetKeys, "parent", resolvedOptions.parent);
|
|
1916
|
-
const inheritedParent = await inheritFocusedParent(initialParent, resolvedOptions, unsetKeys, pmRoot);
|
|
1917
|
-
let parent = inheritedParent.parent;
|
|
1918
|
-
const parentSource = inheritedParent.parentSource;
|
|
1919
|
-
const reviewer = resolveUnsettableOptionalString(unsetKeys, "reviewer", resolvedOptions.reviewer);
|
|
1920
|
-
const risk = resolveUnsettableTransformed(unsetKeys, "risk", resolvedOptions.risk, (raw) => ensureEnumValue(normalizeRiskInput(raw), RISK_VALUES, "risk"));
|
|
1921
|
-
const confidence = resolveUnsettableTransformed(unsetKeys, "confidence", resolvedOptions.confidence, (raw) => parseConfidenceInput(raw));
|
|
1922
|
-
const parentReferencePolicy = resolvedOptions.allowMissingParent === true && settings.validation.parent_reference === "strict_error" ? "warn" : settings.validation.parent_reference;
|
|
1923
|
-
const sprintReleasePolicy = settings.validation.sprint_release_format;
|
|
1924
|
-
const validationWarnings = collectCreateScheduleWarnings(type, id, deadline, reminders.values, events.values);
|
|
1925
|
-
const parentValidation = await resolveCreateParentWithWarnings({
|
|
1926
|
-
itemId: id,
|
|
1927
|
-
parent,
|
|
1928
|
-
pmRoot,
|
|
1929
|
-
settings,
|
|
1930
|
-
typeRegistry,
|
|
1931
|
-
policy: parentReferencePolicy
|
|
1932
|
-
});
|
|
1933
|
-
parent = parentValidation.parent;
|
|
1934
|
-
validationWarnings.push(...parentValidation.warnings);
|
|
1935
|
-
const sprintResolved = resolveCreateSprintOrRelease(unsetKeys, "sprint", resolvedOptions.sprint, "sprint", sprintReleasePolicy);
|
|
1936
|
-
const sprint = sprintResolved.value;
|
|
1937
|
-
validationWarnings.push(...sprintResolved.warnings);
|
|
1938
|
-
const releaseResolved = resolveCreateSprintOrRelease(unsetKeys, "release", resolvedOptions.release, "release", sprintReleasePolicy);
|
|
1939
|
-
const release = releaseResolved.value;
|
|
1940
|
-
validationWarnings.push(...releaseResolved.warnings);
|
|
1941
|
-
const blockedBy = resolveUnsettableOptionalString(unsetKeys, "blocked_by", resolvedOptions.blockedBy);
|
|
1942
|
-
const blockedByResolution = await resolveCreateBlockedByDependency({
|
|
1943
|
-
pmRoot,
|
|
1944
|
-
settings,
|
|
1945
|
-
typeRegistry,
|
|
1946
|
-
statusRegistry,
|
|
1947
|
-
blockedBy,
|
|
1948
|
-
dependencyValues: dependencies.values,
|
|
1949
|
-
status,
|
|
1950
|
-
statusExplicit: resolvedOptions.status !== void 0,
|
|
1951
|
-
nowValue,
|
|
1952
|
-
author
|
|
1953
|
-
});
|
|
1954
|
-
const dependencyValues = blockedByResolution.dependencyValues;
|
|
1955
|
-
status = blockedByResolution.status;
|
|
1956
|
-
const blockedReason = resolveUnsettableOptionalString(unsetKeys, "blocked_reason", resolvedOptions.blockedReason);
|
|
1957
|
-
const unblockNote = resolveUnsettableOptionalString(unsetKeys, "unblock_note", resolvedOptions.unblockNote);
|
|
1958
|
-
const reporter = resolveUnsettableOptionalString(unsetKeys, "reporter", resolvedOptions.reporter);
|
|
1959
|
-
const severity = resolveUnsettableTransformed(unsetKeys, "severity", resolvedOptions.severity, (raw) => ensureEnumValue(normalizeSeverityInput(raw), ISSUE_SEVERITY_VALUES, "severity"));
|
|
1960
|
-
const environment = resolveUnsettableOptionalString(unsetKeys, "environment", resolvedOptions.environment);
|
|
1961
|
-
const reproSteps = resolveUnsettableOptionalString(unsetKeys, "repro_steps", resolvedOptions.reproSteps);
|
|
1962
|
-
const resolution = resolveUnsettableOptionalString(unsetKeys, "resolution", resolvedOptions.resolution);
|
|
1963
|
-
const expectedResult = resolveUnsettableOptionalString(unsetKeys, "expected_result", resolvedOptions.expectedResult);
|
|
1964
|
-
const actualResult = resolveUnsettableOptionalString(unsetKeys, "actual_result", resolvedOptions.actualResult);
|
|
1965
|
-
const affectedVersion = resolveUnsettableOptionalString(unsetKeys, "affected_version", resolvedOptions.affectedVersion);
|
|
1966
|
-
const fixedVersion = resolveUnsettableOptionalString(unsetKeys, "fixed_version", resolvedOptions.fixedVersion);
|
|
1967
|
-
const component = resolveUnsettableOptionalString(unsetKeys, "component", resolvedOptions.component);
|
|
1968
|
-
const regression = resolveUnsettableTransformed(unsetKeys, "regression", resolvedOptions.regression, (raw) => parseRegressionInput(raw));
|
|
1969
|
-
const customerImpact = resolveUnsettableOptionalString(unsetKeys, "customer_impact", resolvedOptions.customerImpact);
|
|
1970
|
-
const title = requireStringOption(resolvedOptions.title, "--title");
|
|
1971
|
-
const description = resolvedOptions.description ?? "";
|
|
1972
|
-
const body = resolvedOptions.body ?? "";
|
|
1973
|
-
const closeReasonResolution = resolveCreateCloseReason(status, statusRegistry, settings, resolvedOptions, resolution);
|
|
1974
|
-
const closeReason = closeReasonResolution.closeReason;
|
|
1975
|
-
validationWarnings.push(...closeReasonResolution.warnings);
|
|
1976
|
-
const frontMatter = normalizeFrontMatter({
|
|
1977
|
-
id,
|
|
1978
|
-
title,
|
|
1979
|
-
description,
|
|
1980
|
-
type,
|
|
1981
|
-
type_options: validatedTypeOptions.normalized,
|
|
1982
|
-
status,
|
|
1983
|
-
close_reason: closeReason,
|
|
1984
|
-
priority,
|
|
1985
|
-
tags,
|
|
1986
|
-
created_at: nowValue,
|
|
1987
|
-
updated_at: nowValue,
|
|
1988
|
-
deadline,
|
|
1989
|
-
assignee,
|
|
1990
|
-
author: authorValue,
|
|
1991
|
-
estimated_minutes: estimatedMinutes,
|
|
1992
|
-
acceptance_criteria: acceptanceCriteria,
|
|
1993
|
-
definition_of_ready: definitionOfReady,
|
|
1994
|
-
order,
|
|
1995
|
-
goal,
|
|
1996
|
-
objective,
|
|
1997
|
-
value,
|
|
1998
|
-
impact,
|
|
1999
|
-
outcome,
|
|
2000
|
-
why_now: whyNow,
|
|
2001
|
-
parent,
|
|
2002
|
-
reviewer,
|
|
2003
|
-
risk,
|
|
2004
|
-
confidence,
|
|
2005
|
-
sprint,
|
|
2006
|
-
release,
|
|
2007
|
-
blocked_by: blockedBy,
|
|
2008
|
-
blocked_reason: blockedReason,
|
|
2009
|
-
unblock_note: unblockNote,
|
|
2010
|
-
reporter,
|
|
2011
|
-
severity,
|
|
2012
|
-
environment,
|
|
2013
|
-
repro_steps: reproSteps,
|
|
2014
|
-
resolution,
|
|
2015
|
-
expected_result: expectedResult,
|
|
2016
|
-
actual_result: actualResult,
|
|
2017
|
-
affected_version: affectedVersion,
|
|
2018
|
-
fixed_version: fixedVersion,
|
|
2019
|
-
component,
|
|
2020
|
-
regression,
|
|
2021
|
-
customer_impact: customerImpact,
|
|
2022
|
-
dependencies: dependencyValues,
|
|
2023
|
-
comments: comments.values,
|
|
2024
|
-
notes: notes.values,
|
|
2025
|
-
learnings: learnings.values,
|
|
2026
|
-
files: files.values,
|
|
2027
|
-
tests: tests.values,
|
|
2028
|
-
docs: docs.values,
|
|
2029
|
-
reminders: reminders.values,
|
|
2030
|
-
events: events.values,
|
|
2031
|
-
...registeredItemFieldValues,
|
|
2032
|
-
...runtimeCreateFieldValues.values
|
|
2033
|
-
});
|
|
2034
|
-
try {
|
|
2035
|
-
applyRegisteredItemFieldDefaultsAndValidation(frontMatter, extensionRegistrations);
|
|
2036
|
-
} catch (error) {
|
|
2037
|
-
throw new PmCliError(error instanceof Error ? error.message : "Invalid extension item field values", EXIT_CODE.USAGE);
|
|
2038
|
-
}
|
|
2039
|
-
const afterDocument = canonicalDocument({
|
|
2040
|
-
metadata: frontMatter,
|
|
2041
|
-
body
|
|
2042
|
-
}, { schema: settings.schema, extensionFieldNames });
|
|
2043
|
-
const beforeDocument = {
|
|
2044
|
-
metadata: {},
|
|
2045
|
-
body: ""
|
|
2046
|
-
};
|
|
2047
|
-
const explicitUnsetKeys = [...explicitUnsets].sort((left, right) => left.localeCompare(right));
|
|
2048
|
-
const historyMessage = buildHistoryMessage(resolvedOptions.message, explicitUnsetKeys);
|
|
2049
|
-
const changedFields = buildChangedFields(frontMatter, body, explicitUnsetKeys, [
|
|
2050
|
-
...Object.keys(registeredItemFieldValues),
|
|
2051
|
-
/* c8 ignore start -- collectRuntimeCreateFieldValues always returns a `values` object, so the `?? {}` fallback is unreachable. */
|
|
2052
|
-
...Object.keys(runtimeCreateFieldValues.values ?? {})
|
|
2053
|
-
/* c8 ignore stop */
|
|
2054
|
-
]);
|
|
2055
|
-
const hookWarnings = await writeCreatedItem({
|
|
2056
|
-
pmRoot,
|
|
2057
|
-
type,
|
|
2058
|
-
id,
|
|
2059
|
-
settings,
|
|
2060
|
-
typeRegistry,
|
|
2061
|
-
author,
|
|
2062
|
-
extensionFieldNames,
|
|
2063
|
-
afterDocument,
|
|
2064
|
-
beforeDocument,
|
|
2065
|
-
historyMessage,
|
|
2066
|
-
changedFields,
|
|
2067
|
-
nowValue
|
|
2068
|
-
});
|
|
2069
|
-
const outputItem = structuredClone(frontMatter);
|
|
2070
|
-
const nextTransition = suggestNextLifecycleTransition(id, type, status, statusRegistry);
|
|
2071
|
-
if (createItemLacksSchedule(type, deadline, reminders.values, events.values)) {
|
|
2072
|
-
printError(`[pm] warning: ${type} '${id}' has no deadline/reminder/event \u2014 it will not appear on the calendar. Add one via 'pm update ${id} --deadline <ISO>' or 'pm update ${id} --event "start=<ISO>,end=<ISO>"'.`);
|
|
2073
|
-
}
|
|
2074
|
-
return {
|
|
2075
|
-
item: outputItem,
|
|
2076
|
-
changed_fields: changedFields,
|
|
2077
|
-
warnings: [...validationWarnings, ...hookWarnings],
|
|
2078
|
-
...parentSource !== void 0 ? { parent_source: parentSource } : {},
|
|
2079
|
-
...nextTransition !== void 0 ? { next_transition: nextTransition } : {}
|
|
2080
|
-
};
|
|
2081
|
-
}
|
|
2082
|
-
var _testOnlyCreateCommand = {
|
|
2083
|
-
buildHistoryMessage,
|
|
2084
|
-
buildInvalidLogSeedKeysMessage,
|
|
2085
|
-
buildTypeSpecificCreateExample,
|
|
2086
|
-
collectMissingRequiredTypeOptionKeys,
|
|
2087
|
-
createExampleTokensForFlag,
|
|
2088
|
-
filterNonMissingTypeOptionErrors,
|
|
2089
|
-
hasTemplatesShowHandler,
|
|
2090
|
-
hasCreateOptionValue,
|
|
2091
|
-
loadCreateTemplateOptionsFromRuntime,
|
|
2092
|
-
looksLikeStructuredEntry,
|
|
2093
|
-
mergeCreateOptionsWithTemplate,
|
|
2094
|
-
normalizeCreatePolicyOptionKey,
|
|
2095
|
-
normalizeDependencyKindInput,
|
|
2096
|
-
normalizeExtensionCommandPath,
|
|
2097
|
-
parseCreateUnsetTargets,
|
|
2098
|
-
requireStringOption,
|
|
2099
|
-
readTemplateOptionsFromRuntimeResult,
|
|
2100
|
-
resolveRuntimeCreateUnsetDefinition: (token, registry) => resolveRuntimeUnsetFieldDefinition(token, "create", registry),
|
|
2101
|
-
typeOptionExampleValue
|
|
2102
|
-
};
|
|
2103
|
-
|
|
2104
|
-
export {
|
|
2105
|
-
resolvePriority,
|
|
2106
|
-
normalizeRiskInput,
|
|
2107
|
-
normalizeSeverityInput,
|
|
2108
|
-
parseConfidenceInput,
|
|
2109
|
-
parseRegressionInput,
|
|
2110
|
-
isLegacyNoneToken,
|
|
2111
|
-
assertNoLegacyNoneToken,
|
|
2112
|
-
assertNoLegacyNoneTokens,
|
|
2113
|
-
applyLegacyNoneCollectionNormalizers,
|
|
2114
|
-
COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON,
|
|
2115
|
-
COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR,
|
|
2116
|
-
COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR,
|
|
2117
|
-
parseCommandUnsetTargets,
|
|
2118
|
-
resolveRuntimeUnsetFieldDefinition,
|
|
2119
|
-
ensureEnumValue,
|
|
2120
|
-
parseReminderEntries,
|
|
2121
|
-
parseEventEntries,
|
|
2122
|
-
parseTypeOptionEntries,
|
|
2123
|
-
parseLogSeed,
|
|
2124
|
-
parseFiles,
|
|
2125
|
-
parseTests,
|
|
2126
|
-
parseDocs,
|
|
2127
|
-
runCreate,
|
|
2128
|
-
_testOnlyCreateCommand
|
|
2129
|
-
};
|
|
2130
|
-
//# sourceMappingURL=chunk-NBFCNJ7Q.js.map
|
|
2131
|
-
|
|
2132
|
-
//# debugId=3b2e2c0b-d9a3-51c6-ba51-0bad9aa69284
|