@unbrained/pm-cli 2026.7.6 → 2026.7.7
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 +32 -0
- package/dist/cli/commands/annotation-command.d.ts +1 -0
- package/dist/cli/commands/annotation-command.js +29 -2
- package/dist/cli/commands/annotation-command.js.map +1 -1
- package/dist/cli/commands/comments.js +3 -4
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.d.ts +3 -0
- package/dist/cli/commands/extension/bundled-catalog.js +38 -28
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/install-sources.js +81 -18
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/health.js +9 -5
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/learnings.js +5 -3
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/notes.js +5 -3
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/reindex.js +4 -3
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/search.js +3 -3
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/test.d.ts +9 -0
- package/dist/cli/commands/test.js +144 -105
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/extension-command-help.js +10 -2
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/register-list-query.d.ts +1 -1
- package/dist/cli/register-list-query.js +18 -27
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-operations.d.ts +0 -8
- package/dist/cli/register-operations.js +41 -46
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +113 -13
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +5 -1
- package/dist/cli/registration-helpers.js +14 -2
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/append-F7WPGIQL.js +11 -0
- package/dist/cli-bundle/chunks/{gc-2DNMPXMC.js → append-PVCTBVJG.js} +8 -9
- package/dist/cli-bundle/chunks/{chunk-EGAP5OWD.js → chunk-2APXX4TZ.js} +16 -14
- package/dist/cli-bundle/chunks/chunk-2APXX4TZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-R5BMJX33.js → chunk-2LEJGRQ7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AZYGZGGI.js → chunk-2TILG6F2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-SMB7RV23.js → chunk-3G6UMXT3.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-SMB7RV23.js.map → chunk-3G6UMXT3.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-GJ7QC5DJ.js → chunk-3TYOW6RR.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-B6DUFX6H.js → chunk-3X542TEY.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-B6XS3R3O.js → chunk-42LXP4VO.js} +12 -16
- package/dist/cli-bundle/chunks/{chunk-B6XS3R3O.js.map → chunk-42LXP4VO.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CL36D4PC.js → chunk-43SIHQND.js} +36 -15
- package/dist/cli-bundle/chunks/chunk-43SIHQND.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7D7OOEYG.js → chunk-43UQN754.js} +10 -14
- package/dist/cli-bundle/chunks/{chunk-7D7OOEYG.js.map → chunk-43UQN754.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ALFPSEWO.js → chunk-43YSKY75.js} +4 -6
- package/dist/cli-bundle/chunks/{chunk-ALFPSEWO.js.map → chunk-43YSKY75.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-NO442GWJ.js → chunk-4BKDAEDF.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-NO442GWJ.js.map → chunk-4BKDAEDF.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4LELACOL.js → chunk-4IQKDKGE.js} +15 -23
- package/dist/cli-bundle/chunks/{chunk-4LELACOL.js.map → chunk-4IQKDKGE.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-F3K4JGFD.js → chunk-4MZOKTI2.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-F3K4JGFD.js.map → chunk-4MZOKTI2.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-D2XRLB55.js → chunk-52NS7JDP.js} +14 -20
- package/dist/cli-bundle/chunks/{chunk-D2XRLB55.js.map → chunk-52NS7JDP.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-IX5BXEMX.js → chunk-565WYS5W.js} +12 -16
- package/dist/cli-bundle/chunks/{chunk-IX5BXEMX.js.map → chunk-565WYS5W.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-UH7T2DAX.js → chunk-5FIQ4EX3.js} +12 -18
- package/dist/cli-bundle/chunks/{chunk-UH7T2DAX.js.map → chunk-5FIQ4EX3.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-DMRNBQOI.js → chunk-6G6O3OPQ.js} +256 -36
- package/dist/cli-bundle/chunks/chunk-6G6O3OPQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-G64OCSKU.js → chunk-6LCJRGPD.js} +9 -13
- package/dist/cli-bundle/chunks/{chunk-G64OCSKU.js.map → chunk-6LCJRGPD.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-7WBAJSS6.js → chunk-6UQCNWFV.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-7WBAJSS6.js.map → chunk-6UQCNWFV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ZSUS2OD3.js → chunk-6XTSYPPO.js} +1216 -387
- package/dist/cli-bundle/chunks/chunk-6XTSYPPO.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-7ML7JONU.js +5434 -0
- package/dist/cli-bundle/chunks/chunk-7ML7JONU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZZD4J5XY.js → chunk-7PNQA24K.js} +30 -36
- package/dist/cli-bundle/chunks/{chunk-ZZD4J5XY.js.map → chunk-7PNQA24K.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-JJP45OEI.js → chunk-7VQ3JJN5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OGWQ2IEP.js → chunk-7Y5N34HX.js} +8 -12
- package/dist/cli-bundle/chunks/{chunk-OGWQ2IEP.js.map → chunk-7Y5N34HX.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MWMVPCIE.js → chunk-AGAVEDIE.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-22KBU3MW.js → chunk-AJUON7E6.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ZJ262CED.js → chunk-ARKHKYYS.js} +13 -21
- package/dist/cli-bundle/chunks/{chunk-ZJ262CED.js.map → chunk-ARKHKYYS.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-46CUF5L6.js → chunk-C5ACVMOI.js} +99 -51
- package/dist/cli-bundle/chunks/chunk-C5ACVMOI.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-LPSSSDJR.js → chunk-CJQM7O7R.js} +16 -20
- package/dist/cli-bundle/chunks/{chunk-LPSSSDJR.js.map → chunk-CJQM7O7R.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-GBAX2ZAQ.js → chunk-D2DCTFTL.js} +10 -12
- package/dist/cli-bundle/chunks/{chunk-GBAX2ZAQ.js.map → chunk-D2DCTFTL.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-XHET7YUZ.js → chunk-DDDWVPID.js} +8 -10
- package/dist/cli-bundle/chunks/{chunk-XHET7YUZ.js.map → chunk-DDDWVPID.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-HIHMT6WS.js → chunk-DG6BSXZ7.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-HIHMT6WS.js.map → chunk-DG6BSXZ7.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IWVU4C2F.js → chunk-DR2V5OIV.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ZGK4L4JM.js → chunk-E3LWJUGF.js} +4 -6
- package/dist/cli-bundle/chunks/{chunk-ZGK4L4JM.js.map → chunk-E3LWJUGF.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-XUC7PI2H.js → chunk-E3YQFSFE.js} +6 -10
- package/dist/cli-bundle/chunks/{chunk-XUC7PI2H.js.map → chunk-E3YQFSFE.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-XG625QP4.js → chunk-EDO7VXSO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MA4SM3QZ.js → chunk-EIUBK2LT.js} +12 -18
- package/dist/cli-bundle/chunks/{chunk-MA4SM3QZ.js.map → chunk-EIUBK2LT.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-YN7Y6DQZ.js → chunk-EMXPI36L.js} +14 -20
- package/dist/cli-bundle/chunks/{chunk-YN7Y6DQZ.js.map → chunk-EMXPI36L.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MLIYFOE7.js → chunk-EOUVR7JN.js} +12 -8
- package/dist/cli-bundle/chunks/chunk-EOUVR7JN.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-Y4M7CPQP.js → chunk-EVEPHNXJ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-M7JNBQAD.js → chunk-F6MT7KKE.js} +4 -6
- package/dist/cli-bundle/chunks/{chunk-M7JNBQAD.js.map → chunk-F6MT7KKE.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-W3DSJQIO.js → chunk-F6YC2A6X.js} +7 -11
- package/dist/cli-bundle/chunks/{chunk-W3DSJQIO.js.map → chunk-F6YC2A6X.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-FILL6BB2.js +5514 -0
- package/dist/cli-bundle/chunks/chunk-FILL6BB2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JDDLOQAE.js → chunk-FN6SB4HU.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-GH73UOSJ.js +5359 -0
- package/dist/cli-bundle/chunks/chunk-GH73UOSJ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-EKFNL33R.js → chunk-GLS6VMWI.js} +37 -16
- package/dist/cli-bundle/chunks/chunk-GLS6VMWI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HOVCGJSD.js → chunk-GPIDUMMN.js} +9 -11
- package/dist/cli-bundle/chunks/{chunk-HOVCGJSD.js.map → chunk-GPIDUMMN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-SQOIV3OQ.js → chunk-GTM5HQL4.js} +11 -15
- package/dist/cli-bundle/chunks/{chunk-SQOIV3OQ.js.map → chunk-GTM5HQL4.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-24YG75HI.js → chunk-H2SMKL2N.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-QLMX7SRD.js → chunk-HHEWQXPD.js} +6 -6
- package/dist/cli-bundle/chunks/chunk-HHEWQXPD.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EGY6JBQ3.js → chunk-HX6QXV5P.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4ZBE5GUN.js → chunk-I74FMIWA.js} +10 -16
- package/dist/cli-bundle/chunks/{chunk-4ZBE5GUN.js.map → chunk-I74FMIWA.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-3N6RRO2Q.js → chunk-IDIBF4E2.js} +20 -24
- package/dist/cli-bundle/chunks/{chunk-3N6RRO2Q.js.map → chunk-IDIBF4E2.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-6QBJLYBP.js → chunk-II7R6KD4.js} +8 -7
- package/dist/cli-bundle/chunks/{chunk-6QBJLYBP.js.map → chunk-II7R6KD4.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-J2VGADNG.js +10320 -0
- package/dist/cli-bundle/chunks/chunk-J2VGADNG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FT3QTERD.js → chunk-J7BOLHAV.js} +5 -7
- package/dist/cli-bundle/chunks/{chunk-FT3QTERD.js.map → chunk-J7BOLHAV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-GANUTS7W.js → chunk-KTGJ2CBU.js} +4 -6
- package/dist/cli-bundle/chunks/{chunk-GANUTS7W.js.map → chunk-KTGJ2CBU.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-LK6XLOGP.js → chunk-LCFJ7XAM.js} +22 -2
- package/dist/cli-bundle/chunks/{chunk-LK6XLOGP.js.map → chunk-LCFJ7XAM.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-3UJRFJ5R.js → chunk-LZQU6XJG.js} +28 -34
- package/dist/cli-bundle/chunks/{chunk-3UJRFJ5R.js.map → chunk-LZQU6XJG.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-L5PSPMZ4.js → chunk-M62RO3XK.js} +10 -14
- package/dist/cli-bundle/chunks/{chunk-L5PSPMZ4.js.map → chunk-M62RO3XK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CFB33L7W.js → chunk-MCEUKJKW.js} +12 -14
- package/dist/cli-bundle/chunks/{chunk-CFB33L7W.js.map → chunk-MCEUKJKW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-TKD5VCTD.js → chunk-MHNMCDWR.js} +343 -195
- package/dist/cli-bundle/chunks/chunk-MHNMCDWR.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-O6AWCQRQ.js → chunk-MRFWUSVA.js} +4 -6
- package/dist/cli-bundle/chunks/{chunk-O6AWCQRQ.js.map → chunk-MRFWUSVA.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-SQYJ4HF2.js → chunk-N6ZHDLUY.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-SQYJ4HF2.js.map → chunk-N6ZHDLUY.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ZWBEPGD7.js → chunk-NWWL22C7.js} +7 -9
- package/dist/cli-bundle/chunks/{chunk-ZWBEPGD7.js.map → chunk-NWWL22C7.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-Y46GD4IX.js → chunk-P3MJJW7P.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MVYWGY2A.js → chunk-PDXJXEZJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SGMFPXKR.js → chunk-Q64AYQYW.js} +10 -12
- package/dist/cli-bundle/chunks/{chunk-SGMFPXKR.js.map → chunk-Q64AYQYW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-EBRZZ54H.js → chunk-QDABF2RB.js} +26 -34
- package/dist/cli-bundle/chunks/{chunk-EBRZZ54H.js.map → chunk-QDABF2RB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-TULGS6X6.js → chunk-QFBSP3NI.js} +529 -46
- package/dist/cli-bundle/chunks/chunk-QFBSP3NI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-GDDAGPWJ.js → chunk-RB3KLPAH.js} +10 -14
- package/dist/cli-bundle/chunks/{chunk-GDDAGPWJ.js.map → chunk-RB3KLPAH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-3VHSI5FL.js → chunk-RY7PTTUB.js} +94 -53
- package/dist/cli-bundle/chunks/chunk-RY7PTTUB.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-COSPOP7H.js → chunk-S547WBYG.js} +343 -195
- package/dist/cli-bundle/chunks/chunk-S547WBYG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NZEHECMW.js → chunk-S5BNGFN5.js} +24 -32
- package/dist/cli-bundle/chunks/{chunk-NZEHECMW.js.map → chunk-S5BNGFN5.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MVSP7WGJ.js → chunk-S6VC2A2K.js} +8 -12
- package/dist/cli-bundle/chunks/{chunk-MVSP7WGJ.js.map → chunk-S6VC2A2K.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-45FYNUFJ.js → chunk-SIM5JDON.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-45FYNUFJ.js.map → chunk-SIM5JDON.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-VPIM42PC.js → chunk-SY75LYXR.js} +11 -7
- package/dist/cli-bundle/chunks/chunk-SY75LYXR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-K46RF36U.js → chunk-TEISGNSH.js} +7 -7
- package/dist/cli-bundle/chunks/chunk-TEISGNSH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AGHMOTGM.js → chunk-TEKZOS7M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-W572BIEB.js → chunk-TGUK6XN6.js} +14 -18
- package/dist/cli-bundle/chunks/{chunk-W572BIEB.js.map → chunk-TGUK6XN6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-E42XTBSP.js → chunk-TNC6MZUD.js} +8 -12
- package/dist/cli-bundle/chunks/{chunk-E42XTBSP.js.map → chunk-TNC6MZUD.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-TZLYO4PP.js +10498 -0
- package/dist/cli-bundle/chunks/chunk-TZLYO4PP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-57NWPFF2.js → chunk-UO7XAZK6.js} +17 -4
- package/dist/cli-bundle/chunks/chunk-UO7XAZK6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JVH7QBVV.js → chunk-V5ZWKJNY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-I36Y7PCE.js → chunk-VGO73OCK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-I36Y7PCE.js.map → chunk-VGO73OCK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-KUOOJR35.js → chunk-VLEA2UTQ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RCQZK2GO.js → chunk-W5HXHC7C.js} +7 -9
- package/dist/cli-bundle/chunks/{chunk-RCQZK2GO.js.map → chunk-W5HXHC7C.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MUH7A3FD.js → chunk-WCWVEXGA.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-X47MKQXU.js +6690 -0
- package/dist/cli-bundle/chunks/chunk-X47MKQXU.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NB7RLQFW.js → chunk-XBX5CBRQ.js} +5 -7
- package/dist/cli-bundle/chunks/{chunk-NB7RLQFW.js.map → chunk-XBX5CBRQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-SCUR7K7N.js → chunk-XC3X7BQR.js} +541 -44
- package/dist/cli-bundle/chunks/chunk-XC3X7BQR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CRVYGJUI.js → chunk-XHCVAZGM.js} +13 -17
- package/dist/cli-bundle/chunks/{chunk-CRVYGJUI.js.map → chunk-XHCVAZGM.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-XB7KFVFI.js → chunk-XPMXPR7K.js} +7 -9
- package/dist/cli-bundle/chunks/{chunk-XB7KFVFI.js.map → chunk-XPMXPR7K.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-4CJFCTLM.js → chunk-XS2TMNXR.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-4CJFCTLM.js.map → chunk-XS2TMNXR.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-HFDADVJZ.js → chunk-XXIYUTLK.js} +10 -14
- package/dist/cli-bundle/chunks/{chunk-HFDADVJZ.js.map → chunk-XXIYUTLK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-EOKXK3R3.js → chunk-XZWL7VNE.js} +1220 -398
- package/dist/cli-bundle/chunks/chunk-XZWL7VNE.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-Y5IKRUEM.js +6624 -0
- package/dist/cli-bundle/chunks/chunk-Y5IKRUEM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6LLVNJXT.js → chunk-Y7KYVCZM.js} +12 -18
- package/dist/cli-bundle/chunks/{chunk-6LLVNJXT.js.map → chunk-Y7KYVCZM.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-VIIUS6N6.js → chunk-YCVWWIKY.js} +16 -14
- package/dist/cli-bundle/chunks/chunk-YCVWWIKY.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CFNGIXZP.js → chunk-YH5NBDFA.js} +22 -26
- package/dist/cli-bundle/chunks/{chunk-CFNGIXZP.js.map → chunk-YH5NBDFA.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-YNCFP5AR.js +5509 -0
- package/dist/cli-bundle/chunks/chunk-YNCFP5AR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NC33K5ZS.js → chunk-YPD7SQ5P.js} +7 -6
- package/dist/cli-bundle/chunks/{chunk-NC33K5ZS.js.map → chunk-YPD7SQ5P.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NGXQ3PFT.js → chunk-YPMZMKN7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KGFUY7WN.js → chunk-YTD5GICJ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-W6DYWXPQ.js → chunk-ZNEG2UDO.js} +261 -34
- package/dist/cli-bundle/chunks/{chunk-W6DYWXPQ.js.map → chunk-ZNEG2UDO.js.map} +4 -4
- package/dist/cli-bundle/chunks/{chunk-7DT4WSH2.js → chunk-ZO7CLOY2.js} +3 -3
- package/dist/cli-bundle/chunks/{close-2SSSHHUZ.js → close-3YYQ5OG2.js} +5 -9
- package/dist/cli-bundle/chunks/close-Z3Q4U7TS.js +12 -0
- package/dist/cli-bundle/chunks/close-many-3L2RXH3M.js +22 -0
- package/dist/cli-bundle/chunks/close-many-D366FTIG.js +26 -0
- package/dist/cli-bundle/chunks/comments-54XDJNFE.js +17 -0
- package/dist/cli-bundle/chunks/comments-HGHC2PN6.js +13 -0
- package/dist/cli-bundle/chunks/{copy-32ROBIDL.js → copy-44RT5GDW.js} +4 -8
- package/dist/cli-bundle/chunks/copy-UGMUGHZA.js +9 -0
- package/dist/cli-bundle/chunks/{create-E77SDCUP.js → create-4GWJWPXG.js} +9 -14
- package/dist/cli-bundle/chunks/create-AZXCUYKP.js +25 -0
- package/dist/cli-bundle/chunks/delete-Y6SXIQ4X.js +10 -0
- package/dist/cli-bundle/chunks/{delete-RA5KTCLB.js → delete-YQ2VPXNF.js} +4 -8
- package/dist/cli-bundle/chunks/{deps-32SU7HO5.js → deps-BU5EBJDU.js} +4 -8
- package/dist/cli-bundle/chunks/deps-FMANWFRP.js +13 -0
- package/dist/cli-bundle/chunks/{docs-RRUPT7O2.js → docs-OQBSJNIA.js} +6 -10
- package/dist/cli-bundle/chunks/docs-VNPBZXEL.js +14 -0
- package/dist/cli-bundle/chunks/files-72HZEBOE.js +18 -0
- package/dist/cli-bundle/chunks/{files-PYKR2UUG.js → files-HTSB2KJG.js} +6 -10
- package/dist/cli-bundle/chunks/{contracts-NYPEW2G4.js → focus-FOG4ALC2.js} +7 -9
- package/dist/cli-bundle/chunks/focus-SUTMKXGX.js +10 -0
- package/dist/cli-bundle/chunks/{history-compact-3MNXLKAT.js → history-compact-M6IFAMBP.js} +9 -13
- package/dist/cli-bundle/chunks/history-compact-NEXRPP2O.js +21 -0
- package/dist/cli-bundle/chunks/{history-redact-P6DYF55G.js → history-redact-NQX3OGZP.js} +7 -11
- package/dist/cli-bundle/chunks/history-redact-WQJBZ3PX.js +17 -0
- package/dist/cli-bundle/chunks/history-repair-CBHMHAJO.js +19 -0
- package/dist/cli-bundle/chunks/{history-repair-ZJQFMWPD.js → history-repair-NHOJG7WO.js} +9 -13
- package/dist/cli-bundle/chunks/learnings-M64NTSOR.js +13 -0
- package/dist/cli-bundle/chunks/{append-BGML6VLD.js → learnings-T63JGKKN.js} +9 -11
- package/dist/cli-bundle/chunks/notes-73WE2UV2.js +13 -0
- package/dist/cli-bundle/chunks/notes-U7L6HQQ2.js +17 -0
- package/dist/cli-bundle/chunks/plan-OSCNYFGC.js +24 -0
- package/dist/cli-bundle/chunks/{plan-CHVE7PBR.js → plan-TN537L24.js} +10 -15
- package/dist/cli-bundle/chunks/{profile-ZXGSKBJD.js → profile-MHAMXMHQ.js} +9 -13
- package/dist/cli-bundle/chunks/{profile-LD23PSI6.js → profile-TIGLAKJ7.js} +9 -13
- package/dist/cli-bundle/chunks/{register-list-query-OEYQHFXO.js → register-list-query-OHXD7G5N.js} +41 -33
- package/dist/cli-bundle/chunks/register-list-query-OHXD7G5N.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-B42JCCOI.js → register-list-query-ZCRABAPN.js} +42 -34
- package/dist/cli-bundle/chunks/register-list-query-ZCRABAPN.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-IAEST26S.js → register-mutation-P3G4XP6Q.js} +36 -41
- package/dist/cli-bundle/chunks/{register-mutation-IAEST26S.js.map → register-mutation-P3G4XP6Q.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-mutation-3QXIHCQG.js → register-mutation-XX4H56PE.js} +34 -39
- package/dist/cli-bundle/chunks/{register-mutation-3QXIHCQG.js.map → register-mutation-XX4H56PE.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-5BMM6XQY.js → register-operations-V6PIYEDU.js} +79 -46
- package/dist/cli-bundle/chunks/register-operations-V6PIYEDU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-Z3U3U5KD.js → register-operations-V6VKTG54.js} +78 -45
- package/dist/cli-bundle/chunks/register-operations-V6VKTG54.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-3ZVVX2VN.js → register-setup-6RVAWT6W.js} +129 -29
- package/dist/cli-bundle/chunks/register-setup-6RVAWT6W.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-Q6KFNIOZ.js → register-setup-6YVUSQYD.js} +130 -30
- package/dist/cli-bundle/chunks/register-setup-6YVUSQYD.js.map +1 -0
- package/dist/cli-bundle/chunks/{restore-5RQHAPMA.js → restore-HC3YSWF7.js} +7 -11
- package/dist/cli-bundle/chunks/restore-LFAMMRYZ.js +15 -0
- package/dist/cli-bundle/chunks/{schema-HBORFC6B.js → schema-DAGSYO6E.js} +6 -10
- package/dist/cli-bundle/chunks/{schema-245WW4G2.js → schema-UBXJCQAC.js} +6 -10
- package/dist/cli-bundle/chunks/update-CJGG5WMV.js +21 -0
- package/dist/cli-bundle/chunks/update-LKD64AFP.js +25 -0
- package/dist/cli-bundle/chunks/update-many-G4SM7BHC.js +31 -0
- package/dist/cli-bundle/chunks/update-many-VLIV3D7R.js +35 -0
- package/dist/cli-bundle/main.js +29 -31
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/cli-bundle/sdk-runtime.js +129 -107
- package/dist/cli-bundle/sdk-testing.js +7 -8
- package/dist/cli-bundle/sdk.js +122 -117
- package/dist/cli-bundle/sdk.js.map +2 -2
- package/dist/core/history/drift-scan.js +3 -8
- package/dist/core/history/drift-scan.js.map +1 -1
- package/dist/core/output/mutation-projection.js +11 -5
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/search/cache.js +3 -3
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/semantic-defaults.d.ts +2 -0
- package/dist/core/search/semantic-defaults.js +11 -4
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.d.ts +1 -1
- package/dist/core/search/vector-stores.js +33 -7
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +7 -7
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +9 -7
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.js +3 -3
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +151 -8
- package/dist/sdk/runtime.js +255 -14
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/start-task-status.d.ts +13 -0
- package/dist/sdk/start-task-status.js +19 -0
- package/dist/sdk/start-task-status.js.map +1 -0
- package/docs/COMMANDS.md +10 -1
- package/docs/SDK.md +35 -0
- package/docs/TESTING.md +3 -0
- package/package.json +1 -1
- package/dist/cli-bundle/chunks/activity-WJCGCYPU.js +0 -18
- package/dist/cli-bundle/chunks/activity-Z6QUAUSG.js +0 -22
- package/dist/cli-bundle/chunks/aggregate-BDM6EIAR.js +0 -25
- package/dist/cli-bundle/chunks/aggregate-VQ2DHU3S.js +0 -21
- package/dist/cli-bundle/chunks/append-RKJYPU74.js +0 -15
- package/dist/cli-bundle/chunks/chunk-2XG4IZON.js +0 -218
- package/dist/cli-bundle/chunks/chunk-2XG4IZON.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-37E72CNS.js +0 -217
- package/dist/cli-bundle/chunks/chunk-37E72CNS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js +0 -228
- package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js +0 -2330
- package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3VHSI5FL.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-425E4QL5.js +0 -278
- package/dist/cli-bundle/chunks/chunk-425E4QL5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-46CUF5L6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +0 -87
- package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js +0 -249
- package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js +0 -819
- package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js +0 -279
- package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-57NWPFF2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js +0 -268
- package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5BMM6XQY.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js +0 -1868
- package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js +0 -1749
- package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-64YKRTSV.js +0 -1961
- package/dist/cli-bundle/chunks/chunk-64YKRTSV.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7C2O74AE.js +0 -23
- package/dist/cli-bundle/chunks/chunk-7C2O74AE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js +0 -421
- package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js +0 -1985
- package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-CL36D4PC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-COSPOP7H.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-COWTDV6B.js +0 -3461
- package/dist/cli-bundle/chunks/chunk-COWTDV6B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js +0 -1858
- package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DMRNBQOI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js +0 -1932
- package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EGAP5OWD.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EKFNL33R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js +0 -1704
- package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EOKXK3R3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js +0 -231
- package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js +0 -2090
- package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js +0 -1570
- package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js +0 -239
- package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js +0 -530
- package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GZRDYONU.js +0 -1005
- package/dist/cli-bundle/chunks/chunk-GZRDYONU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js +0 -277
- package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js +0 -309
- package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JINYH2DB.js +0 -371
- package/dist/cli-bundle/chunks/chunk-JINYH2DB.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js +0 -2257
- package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-K46RF36U.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KERMZVY5.js +0 -371
- package/dist/cli-bundle/chunks/chunk-KERMZVY5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js +0 -76
- package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js +0 -140
- package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js +0 -1601
- package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js +0 -1031
- package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js +0 -995
- package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js +0 -296
- package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-MLIYFOE7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js +0 -2043
- package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js +0 -2033
- package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-N745W3B3.js +0 -1604
- package/dist/cli-bundle/chunks/chunk-N745W3B3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js +0 -1615
- package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js +0 -20
- package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js +0 -143
- package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QLMX7SRD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QX6HM775.js +0 -398
- package/dist/cli-bundle/chunks/chunk-QX6HM775.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QZ342C63.js +0 -220
- package/dist/cli-bundle/chunks/chunk-QZ342C63.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js +0 -368
- package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RFNYTESG.js +0 -520
- package/dist/cli-bundle/chunks/chunk-RFNYTESG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js +0 -79
- package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js +0 -282
- package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js +0 -274
- package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SCUR7K7N.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js +0 -1977
- package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js +0 -1041
- package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-T42JWV3F.js +0 -822
- package/dist/cli-bundle/chunks/chunk-T42JWV3F.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TKD5VCTD.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-TULGS6X6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js +0 -2306
- package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VIIUS6N6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-VPIM42PC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-VQRSPVME.js +0 -368
- package/dist/cli-bundle/chunks/chunk-VQRSPVME.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +0 -84
- package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js +0 -3423
- package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WLSM645P.js +0 -2247
- package/dist/cli-bundle/chunks/chunk-WLSM645P.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WRTENIX3.js +0 -215
- package/dist/cli-bundle/chunks/chunk-WRTENIX3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js +0 -388
- package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XC5BURG2.js +0 -306
- package/dist/cli-bundle/chunks/chunk-XC5BURG2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js +0 -424
- package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js +0 -2128
- package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Z3U3U5KD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js +0 -299
- package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZSUS2OD3.js.map +0 -7
- package/dist/cli-bundle/chunks/claim-RFS7BROJ.js +0 -19
- package/dist/cli-bundle/chunks/claim-XP5AWZ5H.js +0 -23
- package/dist/cli-bundle/chunks/close-GEANHQ2J.js +0 -16
- package/dist/cli-bundle/chunks/close-many-CMZW7ITN.js +0 -31
- package/dist/cli-bundle/chunks/close-many-ZFDIG6M7.js +0 -27
- package/dist/cli-bundle/chunks/comments-MFSYVNNU.js +0 -21
- package/dist/cli-bundle/chunks/comments-XUBPXDYX.js +0 -17
- package/dist/cli-bundle/chunks/config-D7XQMONX.js +0 -18
- package/dist/cli-bundle/chunks/config-T4FHBSYN.js +0 -22
- package/dist/cli-bundle/chunks/context-DIU275XI.js +0 -48
- package/dist/cli-bundle/chunks/context-JCOYB4LZ.js +0 -44
- package/dist/cli-bundle/chunks/contracts-BVO7CSLK.js +0 -12
- package/dist/cli-bundle/chunks/copy-NAGLGMHZ.js +0 -13
- package/dist/cli-bundle/chunks/create-4V7SWNBB.js +0 -30
- package/dist/cli-bundle/chunks/delete-NQI5OSKN.js +0 -14
- package/dist/cli-bundle/chunks/deps-T7SCWXEX.js +0 -17
- package/dist/cli-bundle/chunks/docs-WL2IWGWV.js +0 -18
- package/dist/cli-bundle/chunks/eval-NF2J5SHR.js +0 -23
- package/dist/cli-bundle/chunks/eval-SKDT3MZU.js +0 -27
- package/dist/cli-bundle/chunks/extension-LAXKCAYE.js +0 -42
- package/dist/cli-bundle/chunks/extension-ZISPBRBC.js +0 -38
- package/dist/cli-bundle/chunks/files-EWRQHGIS.js +0 -22
- package/dist/cli-bundle/chunks/focus-4T7TM4MT.js +0 -18
- package/dist/cli-bundle/chunks/focus-L3YUASOD.js +0 -14
- package/dist/cli-bundle/chunks/gc-2PCTYYRI.js +0 -12
- package/dist/cli-bundle/chunks/get-7DMITJ3G.js +0 -23
- package/dist/cli-bundle/chunks/get-VKQXCXLL.js +0 -19
- package/dist/cli-bundle/chunks/health-CVSTAR2F.js +0 -31
- package/dist/cli-bundle/chunks/health-TV3GKTFN.js +0 -35
- package/dist/cli-bundle/chunks/history-D4JUX5XV.js +0 -20
- package/dist/cli-bundle/chunks/history-D4JUX5XV.js.map +0 -7
- package/dist/cli-bundle/chunks/history-LQ2UWZTE.js +0 -24
- package/dist/cli-bundle/chunks/history-LQ2UWZTE.js.map +0 -1
- package/dist/cli-bundle/chunks/history-compact-3MNXLKAT.js.map +0 -1
- package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js +0 -25
- package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js.map +0 -7
- package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js +0 -21
- package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js.map +0 -7
- package/dist/cli-bundle/chunks/history-redact-P6DYF55G.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js +0 -23
- package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js.map +0 -7
- package/dist/cli-bundle/chunks/history-repair-ZJQFMWPD.js.map +0 -1
- package/dist/cli-bundle/chunks/init-C3LJPWQZ.js +0 -30
- package/dist/cli-bundle/chunks/init-C3LJPWQZ.js.map +0 -1
- package/dist/cli-bundle/chunks/init-J3DPGWQI.js +0 -26
- package/dist/cli-bundle/chunks/init-J3DPGWQI.js.map +0 -7
- package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js +0 -21
- package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js.map +0 -1
- package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js +0 -17
- package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js.map +0 -7
- package/dist/cli-bundle/chunks/list-O5NZVSPN.js +0 -36
- package/dist/cli-bundle/chunks/list-O5NZVSPN.js.map +0 -1
- package/dist/cli-bundle/chunks/list-Z55YCNTC.js +0 -32
- package/dist/cli-bundle/chunks/list-Z55YCNTC.js.map +0 -7
- package/dist/cli-bundle/chunks/next-GBNTGXFC.js +0 -28
- package/dist/cli-bundle/chunks/next-GBNTGXFC.js.map +0 -7
- package/dist/cli-bundle/chunks/next-QKW7PTKE.js +0 -32
- package/dist/cli-bundle/chunks/next-QKW7PTKE.js.map +0 -1
- package/dist/cli-bundle/chunks/notes-R5FZTKWF.js +0 -17
- package/dist/cli-bundle/chunks/notes-R5FZTKWF.js.map +0 -7
- package/dist/cli-bundle/chunks/notes-WCGIULVG.js +0 -21
- package/dist/cli-bundle/chunks/notes-WCGIULVG.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-ADISFYH4.js +0 -29
- package/dist/cli-bundle/chunks/plan-ADISFYH4.js.map +0 -7
- package/dist/cli-bundle/chunks/plan-CHVE7PBR.js.map +0 -1
- package/dist/cli-bundle/chunks/profile-LD23PSI6.js.map +0 -7
- package/dist/cli-bundle/chunks/profile-ZXGSKBJD.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-B42JCCOI.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-OEYQHFXO.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js +0 -19
- package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js +0 -23
- package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-3ZVVX2VN.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-Q6KFNIOZ.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-5RQHAPMA.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-PNEIBBLW.js +0 -19
- package/dist/cli-bundle/chunks/restore-PNEIBBLW.js.map +0 -7
- package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js +0 -29
- package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js.map +0 -1
- package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js +0 -25
- package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js.map +0 -7
- package/dist/cli-bundle/chunks/schema-245WW4G2.js.map +0 -1
- package/dist/cli-bundle/chunks/schema-HBORFC6B.js.map +0 -7
- package/dist/cli-bundle/chunks/search-AOZC5SIK.js +0 -34
- package/dist/cli-bundle/chunks/search-AOZC5SIK.js.map +0 -7
- package/dist/cli-bundle/chunks/search-DRXPGHD7.js +0 -38
- package/dist/cli-bundle/chunks/search-DRXPGHD7.js.map +0 -1
- package/dist/cli-bundle/chunks/stats-NJG4NLHG.js +0 -21
- package/dist/cli-bundle/chunks/stats-NJG4NLHG.js.map +0 -1
- package/dist/cli-bundle/chunks/stats-RG6AG4N2.js +0 -17
- package/dist/cli-bundle/chunks/stats-RG6AG4N2.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js +0 -14
- package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js.map +0 -7
- package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js +0 -18
- package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js.map +0 -1
- package/dist/cli-bundle/chunks/test-6CMOCWUC.js +0 -39
- package/dist/cli-bundle/chunks/test-6CMOCWUC.js.map +0 -7
- package/dist/cli-bundle/chunks/test-RI7XHBZL.js +0 -43
- package/dist/cli-bundle/chunks/test-RI7XHBZL.js.map +0 -1
- package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js +0 -29
- package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js.map +0 -7
- package/dist/cli-bundle/chunks/test-all-QEIORFYW.js +0 -33
- package/dist/cli-bundle/chunks/test-all-QEIORFYW.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js +0 -28
- package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js.map +0 -1
- package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js +0 -24
- package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js.map +0 -7
- package/dist/cli-bundle/chunks/update-QVJDFEAP.js +0 -30
- package/dist/cli-bundle/chunks/update-QVJDFEAP.js.map +0 -1
- package/dist/cli-bundle/chunks/update-VQVHAY6X.js +0 -26
- package/dist/cli-bundle/chunks/update-VQVHAY6X.js.map +0 -7
- package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js +0 -37
- package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js.map +0 -7
- package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js +0 -41
- package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js.map +0 -1
- package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js +0 -24
- package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js.map +0 -7
- package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js +0 -28
- package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js.map +0 -1
- package/dist/cli-bundle/chunks/validate-4NTXSB62.js +0 -36
- package/dist/cli-bundle/chunks/validate-4NTXSB62.js.map +0 -1
- package/dist/cli-bundle/chunks/validate-MUFXQZMI.js +0 -32
- package/dist/cli-bundle/chunks/validate-MUFXQZMI.js.map +0 -7
- /package/dist/cli-bundle/chunks/{activity-WJCGCYPU.js.map → append-F7WPGIQL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-Z6QUAUSG.js.map → append-PVCTBVJG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-R5BMJX33.js.map → chunk-2LEJGRQ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AZYGZGGI.js.map → chunk-2TILG6F2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GJ7QC5DJ.js.map → chunk-3TYOW6RR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-B6DUFX6H.js.map → chunk-3X542TEY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JJP45OEI.js.map → chunk-7VQ3JJN5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MWMVPCIE.js.map → chunk-AGAVEDIE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-22KBU3MW.js.map → chunk-AJUON7E6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IWVU4C2F.js.map → chunk-DR2V5OIV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XG625QP4.js.map → chunk-EDO7VXSO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Y4M7CPQP.js.map → chunk-EVEPHNXJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JDDLOQAE.js.map → chunk-FN6SB4HU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-24YG75HI.js.map → chunk-H2SMKL2N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EGY6JBQ3.js.map → chunk-HX6QXV5P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Y46GD4IX.js.map → chunk-P3MJJW7P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MVYWGY2A.js.map → chunk-PDXJXEZJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AGHMOTGM.js.map → chunk-TEKZOS7M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JVH7QBVV.js.map → chunk-V5ZWKJNY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KUOOJR35.js.map → chunk-VLEA2UTQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MUH7A3FD.js.map → chunk-WCWVEXGA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NGXQ3PFT.js.map → chunk-YPMZMKN7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KGFUY7WN.js.map → chunk-YTD5GICJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7DT4WSH2.js.map → chunk-ZO7CLOY2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-BDM6EIAR.js.map → close-3YYQ5OG2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-VQ2DHU3S.js.map → close-Z3Q4U7TS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-RKJYPU74.js.map → close-many-3L2RXH3M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-BGML6VLD.js.map → close-many-D366FTIG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-XP5AWZ5H.js.map → comments-54XDJNFE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-RFS7BROJ.js.map → comments-HGHC2PN6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-2SSSHHUZ.js.map → copy-44RT5GDW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-GEANHQ2J.js.map → copy-UGMUGHZA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-CMZW7ITN.js.map → create-4GWJWPXG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-ZFDIG6M7.js.map → create-AZXCUYKP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-XUBPXDYX.js.map → delete-Y6SXIQ4X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-MFSYVNNU.js.map → delete-YQ2VPXNF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-T4FHBSYN.js.map → deps-BU5EBJDU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-D7XQMONX.js.map → deps-FMANWFRP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-DIU275XI.js.map → docs-OQBSJNIA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-JCOYB4LZ.js.map → docs-VNPBZXEL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-BVO7CSLK.js.map → files-72HZEBOE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-NYPEW2G4.js.map → files-HTSB2KJG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-32ROBIDL.js.map → focus-FOG4ALC2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-NAGLGMHZ.js.map → focus-SUTMKXGX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-E77SDCUP.js.map → history-compact-M6IFAMBP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-4V7SWNBB.js.map → history-compact-NEXRPP2O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-RA5KTCLB.js.map → history-redact-NQX3OGZP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-NQI5OSKN.js.map → history-redact-WQJBZ3PX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-T7SCWXEX.js.map → history-repair-CBHMHAJO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-32SU7HO5.js.map → history-repair-NHOJG7WO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-WL2IWGWV.js.map → learnings-M64NTSOR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-RRUPT7O2.js.map → learnings-T63JGKKN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-NF2J5SHR.js.map → notes-73WE2UV2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{eval-SKDT3MZU.js.map → notes-U7L6HQQ2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-ZISPBRBC.js.map → plan-OSCNYFGC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-LAXKCAYE.js.map → plan-TN537L24.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-PYKR2UUG.js.map → profile-MHAMXMHQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-EWRQHGIS.js.map → profile-TIGLAKJ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-4T7TM4MT.js.map → restore-HC3YSWF7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-L3YUASOD.js.map → restore-LFAMMRYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-2PCTYYRI.js.map → schema-DAGSYO6E.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-2DNMPXMC.js.map → schema-UBXJCQAC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-VKQXCXLL.js.map → update-CJGG5WMV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-7DMITJ3G.js.map → update-LKD64AFP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{health-CVSTAR2F.js.map → update-many-G4SM7BHC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{health-TV3GKTFN.js.map → update-many-VLIV3D7R.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../core/extensions/item-fields.ts","../../../../../../../../core/item/item-record.ts","../../../../../../../../core/history/history.ts","../../../../../../../../core/history/history-stream-policy.ts","../../../../../../../../core/lock/lock.ts","../../../../../../../../core/store/front-matter-cache.ts","../../../../../../../../core/store/item-store.ts"],"sourcesContent":["/**\n * @module core/extensions/item-fields\n *\n * Implements extension runtime contracts and governance for Item Fields.\n */\nimport type { ExtensionRegistrationRegistry } from \"./loader.js\";\nimport { normalizeItemFieldType, type KnownItemFieldType } from \"./item-field-types.js\";\nimport { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\n\nconst RESERVED_ITEM_FIELD_NAMES = new Set(FRONT_MATTER_KEY_ORDER);\n\nfunction normalizeFieldName(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction normalizeFieldType(value: unknown): KnownItemFieldType | null {\n if (typeof value !== \"string\") {\n return null;\n }\n return normalizeItemFieldType(value);\n}\n\nfunction cloneFieldValue<T>(value: T): T {\n try {\n return structuredClone(value);\n } catch {\n return value;\n }\n}\n\nfunction parseFieldAssignment(raw: string): { key: string; value: string } {\n const trimmed = raw.trim();\n const separatorIndex = trimmed.indexOf(\"=\");\n if (separatorIndex <= 0) {\n throw new PmCliError(`--field entries must use name=value syntax, received: ${raw}`, EXIT_CODE.USAGE);\n }\n // `separatorIndex > 0` guarantees a non-`=` first character on the already\n // trimmed string, so the trimmed key is always non-empty here.\n const key = trimmed.slice(0, separatorIndex).trim();\n const value = trimmed.slice(separatorIndex + 1);\n return { key, value };\n}\n\nfunction parseJsonFieldValue(raw: string, fieldName: string, expectedType: \"array\" | \"object\"): unknown {\n try {\n const parsed = JSON.parse(raw);\n if (expectedType === \"array\" && Array.isArray(parsed)) {\n return parsed;\n }\n if (expectedType === \"object\" && typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Fall through to the typed usage error below.\n }\n throw new PmCliError(`--field ${fieldName}=... must be valid JSON ${expectedType}`, EXIT_CODE.USAGE);\n}\n\nfunction coerceRegisteredFieldValue(fieldName: string, fieldType: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\", raw: string): unknown {\n if (fieldType === \"string\") {\n return raw;\n }\n if (fieldType === \"number\") {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n throw new PmCliError(`--field ${fieldName}=... must be a number`, EXIT_CODE.USAGE);\n }\n const parsed = Number(trimmed);\n if (!Number.isFinite(parsed)) {\n throw new PmCliError(`--field ${fieldName}=... must be a number`, EXIT_CODE.USAGE);\n }\n return parsed;\n }\n if (fieldType === \"boolean\") {\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\" || normalized === \"no\") {\n return false;\n }\n throw new PmCliError(`--field ${fieldName}=... must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);\n }\n return parseJsonFieldValue(raw, fieldName, fieldType);\n}\n\nfunction collectRegisteredFieldDefinitions(\n registrations: ExtensionRegistrationRegistry | null,\n): Map<string, { name: string; type: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\" }> {\n const definitions = new Map<string, { name: string; type: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\" }>();\n if (!registrations) {\n return definitions;\n }\n for (const registration of registrations.item_fields) {\n for (const definition of registration.fields) {\n const fieldName = normalizeFieldName(definition.name);\n const fieldType = normalizeFieldType(definition.type);\n if (!fieldName || !fieldType) {\n continue;\n }\n const existing = definitions.get(fieldName);\n if (existing && existing.type !== fieldType) {\n throw new PmCliError(\n `Extension item field \"${fieldName}\" is declared with conflicting types: ${existing.type}, ${fieldType}`,\n EXIT_CODE.USAGE,\n {\n code: \"extension_item_field_type_conflict\",\n nextSteps: [\"Make every active extension declaration for this field use the same type.\"],\n },\n );\n }\n definitions.set(fieldName, { name: fieldName, type: fieldType });\n }\n }\n return definitions;\n}\n\nfunction assertNotReservedItemFieldName(fieldName: string): void {\n if (!RESERVED_ITEM_FIELD_NAMES.has(fieldName)) {\n return;\n }\n throw new PmCliError(`Extension item field \"${fieldName}\" collides with reserved item metadata`, EXIT_CODE.USAGE, {\n code: \"extension_item_field_reserved\",\n nextSteps: [\"Rename the extension item field, preferably with an extension-specific prefix.\"],\n });\n}\n\n/**\n * Implements collect registered item field names for the public runtime surface of this module.\n */\nexport function collectRegisteredItemFieldNames(registrations: ExtensionRegistrationRegistry | null): string[] {\n return [...collectRegisteredFieldDefinitions(registrations).keys()].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Implements parse registered item field assignments for the public runtime surface of this module.\n */\nexport function parseRegisteredItemFieldAssignments(\n rawFields: string[] | undefined,\n registrations: ExtensionRegistrationRegistry | null,\n): Record<string, unknown> {\n if (!rawFields || rawFields.length === 0) {\n return {};\n }\n const definitions = collectRegisteredFieldDefinitions(registrations);\n const values: Record<string, unknown> = {};\n for (const raw of rawFields) {\n const { key, value } = parseFieldAssignment(raw);\n const definition = definitions.get(key);\n if (!definition) {\n const known = [...definitions.keys()].sort((left, right) => left.localeCompare(right));\n throw new PmCliError(`--field ${key} is not declared by an active extension item-field registration`, EXIT_CODE.USAGE, {\n code: \"extension_item_field_unknown\",\n recovery: { provided_fields: known },\n nextSteps: known.length > 0\n ? [`Use one of the declared fields: ${known.join(\", \")}`]\n : [\"Activate an extension that calls registerItemFields before setting extension fields.\"],\n });\n }\n assertNotReservedItemFieldName(definition.name);\n values[definition.name] = coerceRegisteredFieldValue(definition.name, definition.type, value);\n }\n return values;\n}\n\nfunction isValidFieldType(value: unknown, expectedType: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\"): boolean {\n if (expectedType === \"string\") {\n return typeof value === \"string\";\n }\n if (expectedType === \"number\") {\n return typeof value === \"number\" && Number.isFinite(value);\n }\n if (expectedType === \"boolean\") {\n return typeof value === \"boolean\";\n }\n if (expectedType === \"array\") {\n return Array.isArray(value);\n }\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isAllowedFieldValue(value: unknown, allowed: unknown[] | undefined): boolean {\n if (!allowed || allowed.length === 0) {\n return true;\n }\n return allowed.some((candidate) => Object.is(candidate, value));\n}\n\n/**\n * Implements apply registered item field defaults and validation for the public runtime surface of this module.\n */\nexport function applyRegisteredItemFieldDefaultsAndValidation(\n frontMatter: Record<string, unknown>,\n registrations: ExtensionRegistrationRegistry | null,\n options: { skipDefaultFields?: ReadonlySet<string> } = {},\n): void {\n if (!registrations) {\n return;\n }\n collectRegisteredFieldDefinitions(registrations);\n for (const registration of registrations.item_fields) {\n for (const definition of registration.fields) {\n const fieldName = normalizeFieldName(definition.name);\n if (!fieldName) {\n continue;\n }\n assertNotReservedItemFieldName(fieldName);\n if (\n !(fieldName in frontMatter) &&\n !options.skipDefaultFields?.has(fieldName) &&\n Object.prototype.hasOwnProperty.call(definition, \"default\")\n ) {\n frontMatter[fieldName] = cloneFieldValue(definition.default);\n }\n\n const currentValue = frontMatter[fieldName];\n if (currentValue === undefined) {\n continue;\n }\n const expectedType = normalizeFieldType(definition.type);\n if (expectedType && !isValidFieldType(currentValue, expectedType)) {\n throw new TypeError(`Item field \"${fieldName}\" must be of type ${expectedType}`);\n }\n\n const allowedValues = Array.isArray(definition.values) ? definition.values : undefined;\n if (!isAllowedFieldValue(currentValue, allowedValues)) {\n throw new TypeError(`Item field \"${fieldName}\" must match one of the configured allowed values`);\n }\n }\n }\n}\n","/**\n * @module core/item/item-record\n *\n * Defines item parsing, formatting, and lifecycle helpers for Item Record.\n */\nimport type { ItemMetadata } from \"../../types/index.js\";\n\n/**\n * Bridge a typed item record into the generic `Record<string, unknown>` shape\n * consumed by formatters, field projections, history canonicalization, and\n * JSON output paths.\n *\n * `ItemMetadata` carries an index signature, but the structural mismatch on its\n * concretely-typed fields means TypeScript still requires a double cast to widen\n * it. Centralizing that `as unknown as Record<string, unknown>` widening here\n * gives the type bridge a single, named, documented home instead of scattering\n * the cast across command and core modules.\n *\n * This is a compile-time-only widening: the returned value is the very same\n * object reference, with no runtime transformation. (It is intentionally\n * distinct from the runtime `asRecord*` guards in `core/shared/primitives.ts`,\n * which validate `typeof` at runtime.) `ItemFrontMatter` is an alias of\n * `ItemMetadata`, so front-matter values are accepted as-is.\n */\nexport function toItemRecord(item: ItemMetadata): Record<string, unknown> {\n return item as unknown as Record<string, unknown>;\n}\n","/**\n * @module core/history/history\n *\n * Implements append-only history and replay behavior for History.\n */\nimport jsonPatch from \"fast-json-patch\";\nimport { FRONT_MATTER_KEY_ORDER } from \"../shared/constants.js\";\nimport { runActiveServiceOverride } from \"../extensions/index.js\";\nimport { appendLineAtomic } from \"../fs/fs-utils.js\";\nimport { canonicalDocument } from \"../item/item-format.js\";\nimport { toItemRecord } from \"../item/item-record.js\";\nimport { orderObject, sha256Hex, stableStringify } from \"../shared/serialization.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport type { HistoryEntry, HistoryPatchOp, ItemDocument } from \"../../types/index.js\";\n\nconst EMPTY_LEGACY_HASH_DOCUMENT = {\n front_matter: {},\n body: \"\",\n};\n\nfunction decodeJsonPointer(path: string): string[] {\n if (!path || path === \"/\") {\n return [];\n }\n if (!path.startsWith(\"/\")) {\n return [];\n }\n return path\n .slice(1)\n .split(\"/\")\n .map((segment) => segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\"));\n}\n\nfunction isDefinedPointerPath(document: unknown, path: string): boolean {\n const segments = decodeJsonPointer(path);\n if (segments.length === 0) {\n return true;\n }\n let cursor: unknown = document;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n if (segment === \"-\" || !/^(0|[1-9]\\d*)$/.test(segment)) {\n return false;\n }\n const index = Number(segment);\n if (!Number.isInteger(index) || index < 0 || index >= cursor.length) {\n return false;\n }\n const next = cursor[index];\n if (next === undefined) {\n return false;\n }\n cursor = next;\n continue;\n }\n if (typeof cursor !== \"object\" || cursor === null) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(cursor, segment)) {\n return false;\n }\n const next = (cursor as Record<string, unknown>)[segment];\n if (next === undefined) {\n return false;\n }\n cursor = next;\n }\n return true;\n}\n\nfunction normalizeHistoryPatchOps(\n beforeDocument: { metadata: Record<string, unknown>; body: string },\n patch: HistoryPatchOp[],\n): HistoryPatchOp[] {\n const normalized: HistoryPatchOp[] = [];\n let replayCursor: unknown = structuredClone(beforeDocument);\n for (const operation of patch) {\n const normalizedOperation =\n operation.op === \"replace\" && !isDefinedPointerPath(replayCursor, operation.path)\n ? ({ ...operation, op: \"add\" } as HistoryPatchOp)\n : operation;\n normalized.push(normalizedOperation);\n replayCursor = jsonPatch.applyPatch(\n replayCursor,\n [normalizedOperation as jsonPatch.Operation],\n true,\n true,\n ).newDocument as unknown;\n }\n return normalized;\n}\n\nfunction canonicalHashDocument(document: ItemDocument): { front_matter: Record<string, unknown>; body: string } {\n const hasMetadata = document.metadata && Object.keys(document.metadata).length > 0;\n if (!hasMetadata) {\n return {\n front_matter: {},\n body: document.body ?? \"\",\n };\n }\n const canonical = canonicalDocument(document);\n const orderedFrontMatter = orderObject(toItemRecord(canonical.metadata), FRONT_MATTER_KEY_ORDER);\n return {\n front_matter: orderedFrontMatter,\n body: canonical.body,\n };\n}\n\nfunction canonicalPatchDocument(document: ItemDocument): { metadata: Record<string, unknown>; body: string } {\n const hasMetadata = document.metadata && Object.keys(document.metadata).length > 0;\n if (!hasMetadata) {\n return {\n metadata: {},\n body: document.body ?? \"\",\n };\n }\n const canonical = canonicalDocument(document);\n const orderedMetadata = orderObject(toItemRecord(canonical.metadata), FRONT_MATTER_KEY_ORDER);\n return {\n metadata: orderedMetadata,\n body: canonical.body,\n };\n}\n\n/**\n * Implements hash document for the public runtime surface of this module.\n */\nexport function hashDocument(document: ItemDocument): string {\n return sha256Hex(stableStringify(canonicalHashDocument(document)));\n}\n\n/**\n * Implements hash empty document for the public runtime surface of this module.\n */\nexport function hashEmptyDocument(): string {\n return sha256Hex(stableStringify(EMPTY_LEGACY_HASH_DOCUMENT));\n}\n\n/**\n * Implements create history entry for the public runtime surface of this module.\n */\nexport function createHistoryEntry(params: {\n nowIso: string;\n author: string;\n op: string;\n before: ItemDocument;\n after: ItemDocument;\n message?: string;\n}): HistoryEntry {\n const beforeHashCanonical = canonicalHashDocument(params.before);\n const afterHashCanonical = canonicalHashDocument(params.after);\n const beforePatchCanonical = canonicalPatchDocument(params.before);\n const afterPatchCanonical = canonicalPatchDocument(params.after);\n const rawPatch = jsonPatch.compare(beforePatchCanonical, afterPatchCanonical) as HistoryPatchOp[];\n const patch = normalizeHistoryPatchOps(beforePatchCanonical, rawPatch);\n\n return {\n ts: params.nowIso,\n author: params.author,\n op: params.op,\n patch,\n before_hash: sha256Hex(stableStringify(beforeHashCanonical)),\n after_hash: sha256Hex(stableStringify(afterHashCanonical)),\n message: params.message === undefined ? undefined : params.message,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction fallbackHistoryTimestamp(entry: Pick<HistoryEntry, \"ts\">): string {\n const ts = entry.ts.trim();\n return ts.length > 0 ? ts : nowIso();\n}\n\nfunction withHistoryTimestamp(value: Record<string, unknown>, fallbackTs: string): Record<string, unknown> {\n const ts = value.ts;\n if (typeof ts === \"string\" && ts.trim().length > 0) {\n return value;\n }\n return { ...value, ts: fallbackTs };\n}\n\nfunction serializeHistoryLine(value: unknown, fallbackEntry: Pick<HistoryEntry, \"ts\">): string {\n const fallbackTs = fallbackHistoryTimestamp(fallbackEntry);\n if (typeof value === \"string\") {\n try {\n const parsed = JSON.parse(value) as unknown;\n if (isRecord(parsed)) {\n return JSON.stringify(withHistoryTimestamp(parsed, fallbackTs));\n }\n } catch {\n // Non-JSON extension lines are preserved for compatibility.\n }\n return value;\n }\n if (isRecord(value)) {\n return JSON.stringify(withHistoryTimestamp(value, fallbackTs));\n }\n return JSON.stringify(value);\n}\n\n/**\n * Implements append history entry for the public runtime surface of this module.\n */\nexport async function appendHistoryEntry(historyPath: string, entry: HistoryEntry): Promise<void> {\n const override = await runActiveServiceOverride(\"history_append\", {\n history_path: historyPath,\n entry,\n });\n if (override.handled) {\n if (override.result === false) {\n return;\n }\n if (typeof override.result === \"string\") {\n await appendLineAtomic(historyPath, serializeHistoryLine(override.result, entry));\n return;\n }\n if (typeof override.result === \"object\" && override.result !== null) {\n const record = override.result as {\n history_path?: unknown;\n entry?: unknown;\n line?: unknown;\n skip?: unknown;\n };\n if (record.skip === true) {\n return;\n }\n const nextHistoryPath = typeof record.history_path === \"string\" ? record.history_path : historyPath;\n if (typeof record.line === \"string\") {\n await appendLineAtomic(nextHistoryPath, serializeHistoryLine(record.line, entry));\n return;\n }\n await appendLineAtomic(nextHistoryPath, serializeHistoryLine(record.entry ?? entry, entry));\n return;\n }\n }\n await appendLineAtomic(historyPath, serializeHistoryLine(entry, entry));\n}\n\nexport const _testOnly = {\n decodeJsonPointer,\n isDefinedPointerPath,\n};\n","/**\n * @module core/history/history-stream-policy\n *\n * Implements append-only history and replay behavior for History Stream Policy.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { runActiveOnWriteHooks } from \"../extensions/index.js\";\nimport { ensureDir, pathExists } from \"../fs/fs-utils.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { getHistoryPath } from \"../store/paths.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n\ninterface HistoryStreamPolicyParams {\n pmRoot: string;\n settings: PmSettings;\n itemId: string;\n commandLabel: string;\n}\n\ninterface HistoryStreamPolicyManyParams {\n pmRoot: string;\n settings: PmSettings;\n itemIds: string[];\n commandLabel: string;\n}\n\n/**\n * Documents the history stream policy result payload exchanged by command, SDK, and package integrations.\n */\nexport interface HistoryStreamPolicyResult {\n auto_created_ids: string[];\n warnings: string[];\n}\n\nfunction toSortedUniqueItemIds(itemIds: string[]): string[] {\n return [...new Set(itemIds.filter((value) => value.trim().length > 0))].sort((left, right) => left.localeCompare(right));\n}\n\nfunction strictMissingStreamError(itemId: string, commandLabel: string): PmCliError {\n return new PmCliError(\n `Missing history stream for ${itemId}. ${commandLabel} requires history streams when settings.history.missing_stream is strict_error.`,\n EXIT_CODE.NOT_FOUND,\n );\n}\n\nasync function createStream(historyPath: string, commandLabel: string): Promise<string[]> {\n await ensureDir(path.dirname(historyPath));\n const handle = await fs.open(historyPath, \"a\");\n await handle.close();\n return runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: `${commandLabel}:history:auto_create`,\n });\n}\n\n/**\n * Implements enforce history stream policy for item for the public runtime surface of this module.\n */\nexport async function enforceHistoryStreamPolicyForItem(params: HistoryStreamPolicyParams): Promise<HistoryStreamPolicyResult> {\n return enforceHistoryStreamPolicyForItems({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemIds: [params.itemId],\n commandLabel: params.commandLabel,\n });\n}\n\n/**\n * Implements enforce history stream policy for items for the public runtime surface of this module.\n */\nexport async function enforceHistoryStreamPolicyForItems(\n params: HistoryStreamPolicyManyParams,\n): Promise<HistoryStreamPolicyResult> {\n const ids = toSortedUniqueItemIds(params.itemIds);\n const autoCreated: string[] = [];\n const warnings: string[] = [];\n\n for (const itemId of ids) {\n const historyPath = getHistoryPath(params.pmRoot, itemId);\n if (await pathExists(historyPath)) {\n continue;\n }\n if (params.settings.history.missing_stream === \"strict_error\") {\n throw strictMissingStreamError(itemId, params.commandLabel);\n }\n warnings.push(...(await createStream(historyPath, params.commandLabel)));\n warnings.push(`history_stream_auto_created:${itemId}`);\n autoCreated.push(itemId);\n }\n\n return {\n auto_created_ids: autoCreated,\n warnings,\n };\n}\n","/**\n * @module core/lock/lock\n *\n * Coordinates tracker lock ownership and cleanup for Lock.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { runActiveOnReadHooks, runActiveOnWriteHooks, runActiveServiceOverride } from \"../extensions/index.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { toErrorMessage } from \"../shared/primitives.js\";\nimport { getLockPath } from \"../store/paths.js\";\nimport { nowIso } from \"../shared/time.js\";\n\ninterface LockInfo {\n id: string;\n pid: number;\n owner: string;\n created_at: string;\n ttl_seconds: number;\n}\n\ntype LockWriteOp = \"lock:create\" | \"lock:release\" | \"lock:stale_remove\";\n\ninterface LockReadResult {\n info: LockInfo | null;\n warnings: string[];\n}\n\ninterface StaleLockRemovalResult {\n lockInfo: LockReadResult;\n shouldRetryCreate: boolean;\n staleRemovalCounted: boolean;\n}\n\ninterface StaleCleanupGateOwner {\n pid: number;\n token: string;\n}\n\nfunction parseLockInfo(raw: string): LockReadResult {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return {\n info: null,\n warnings: [\"lock_info_invalid_json\"],\n };\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {\n info: null,\n warnings: [\"lock_info_invalid_shape\"],\n };\n }\n const candidate = parsed as Record<string, unknown>;\n const id = candidate.id;\n const pid = candidate.pid;\n const owner = candidate.owner;\n const createdAt = candidate.created_at;\n const ttlSeconds = candidate.ttl_seconds;\n if (\n typeof id !== \"string\" ||\n typeof pid !== \"number\" ||\n !Number.isFinite(pid) ||\n typeof owner !== \"string\" ||\n typeof createdAt !== \"string\" ||\n typeof ttlSeconds !== \"number\" ||\n !Number.isFinite(ttlSeconds)\n ) {\n return {\n info: null,\n warnings: [\"lock_info_invalid_shape\"],\n };\n }\n return {\n info: {\n id,\n pid,\n owner,\n created_at: createdAt,\n ttl_seconds: ttlSeconds,\n },\n warnings: [],\n };\n}\n\nasync function readLockInfo(lockPath: string): Promise<LockReadResult> {\n try {\n const raw = await fs.readFile(lockPath, \"utf8\");\n await runActiveOnReadHooks({\n path: lockPath,\n scope: \"project\",\n });\n return parseLockInfo(raw);\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n return {\n info: null,\n warnings: [],\n };\n }\n return {\n info: null,\n warnings: [\"lock_info_read_failed\"],\n };\n }\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === code;\n}\n\nasync function emitLockWriteHook(lockPath: string, op: LockWriteOp): Promise<void> {\n await runActiveOnWriteHooks({\n path: lockPath,\n scope: \"project\",\n op,\n });\n}\n\nfunction buildLockPayload(id: string, owner: string, ttlSeconds: number): LockInfo {\n return {\n id,\n pid: process.pid,\n owner,\n created_at: nowIso(),\n ttl_seconds: ttlSeconds,\n };\n}\n\nasync function createLockFile(lockPath: string, id: string, owner: string, ttlSeconds: number): Promise<void> {\n await fs.mkdir(path.dirname(lockPath), { recursive: true });\n const handle = await fs.open(lockPath, \"wx\");\n try {\n await handle.writeFile(`${JSON.stringify(buildLockPayload(id, owner, ttlSeconds), null, 2)}\\n`, \"utf8\");\n } finally {\n await handle.close();\n }\n await emitLockWriteHook(lockPath, \"lock:create\");\n}\n\nasync function unlinkLockWithHook(lockPath: string, op: \"lock:release\" | \"lock:stale_remove\"): Promise<boolean> {\n try {\n await fs.unlink(lockPath);\n await emitLockWriteHook(lockPath, op);\n return true;\n } catch {\n // Lock cleanup is best-effort.\n return false;\n }\n}\n\nfunction isStaleLock(info: LockInfo | null, ttlSeconds: number): boolean {\n const createdAtMs = info?.created_at ? Date.parse(info.created_at) : Number.NaN;\n const ageMs = Number.isFinite(createdAtMs) ? Date.now() - createdAtMs : Number.POSITIVE_INFINITY;\n return ageMs > ttlSeconds * 1000;\n}\n\nfunction lockOwnerSuffix(info: LockInfo | null): string {\n return info?.owner ? ` (owner ${info.owner})` : \"\";\n}\n\nconst LOCK_WAIT_INITIAL_DELAY_MS = 25;\nconst LOCK_WAIT_MAX_DELAY_MS = 200;\nconst LOCK_CONFLICT_RETRY_HINT_MS = 250;\nconst MAX_STALE_LOCK_REMOVALS = 3;\nconst STALE_CLEANUP_GATE_SUFFIX = \".stale-cleanup\";\nconst STALE_CLEANUP_GATE_OWNER_FILE = \"owner.json\";\nconst STALE_CLEANUP_GATE_STALE_MS = 10_000;\n// Bounds PID-reuse false positives: a live recycled PID can delay cleanup, but not indefinitely.\nconst STALE_CLEANUP_GATE_MAX_ACTIVE_MS = 5 * 60_000;\n\nfunction parseNonNegativeIntegerWaitMs(value: string | number | undefined): number | undefined {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n return undefined;\n }\n const parsed = Number(trimmed);\n return Number.isSafeInteger(parsed) ? parsed : undefined;\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return Math.trunc(value);\n }\n return undefined;\n}\n\n/**\n * Resolves the effective bounded wait budget for a contended lock: the\n * PM_LOCK_WAIT_MS environment override wins when it parses as a non-negative\n * integer, then the caller-provided budget (settings `locks.wait_ms`), then 0\n * (fail-fast, the pre-wait behavior).\n */\nfunction resolveLockWaitMs(waitMs: number | undefined): number {\n const envRaw = process.env.PM_LOCK_WAIT_MS;\n const envParsed = parseNonNegativeIntegerWaitMs(envRaw);\n if (envParsed !== undefined) {\n return envParsed;\n }\n const callerParsed = parseNonNegativeIntegerWaitMs(waitMs);\n if (callerParsed !== undefined) {\n return callerParsed;\n }\n return 0;\n}\n\nfunction sleepWithJitter(baseDelayMs: number): Promise<void> {\n const jitteredMs = Math.max(1, Math.round(baseDelayMs * (0.5 + Math.random())));\n return new Promise((resolve) => setTimeout(resolve, jitteredMs));\n}\n\nfunction buildLockConflictError(id: string, info: LockInfo | null, waitedMs: number): PmCliError {\n const waitedSuffix = waitedMs > 0 ? ` after waiting ${waitedMs}ms` : \"\";\n return new PmCliError(`Item ${id} is locked${lockOwnerSuffix(info)}${waitedSuffix}`, EXIT_CODE.CONFLICT, {\n code: \"lock_conflict\",\n recovery: {\n retry_after_ms: LOCK_CONFLICT_RETRY_HINT_MS,\n },\n });\n}\n\ntype LockReleaseOverride = () => Promise<void> | void;\n\nfunction resolveLockOverrideRelease(result: unknown): LockReleaseOverride | null {\n if (typeof result === \"function\") {\n return result as LockReleaseOverride;\n }\n if (typeof result === \"object\" && result !== null && \"release\" in result) {\n const release = (result as { release?: unknown }).release;\n return typeof release === \"function\" ? (release as LockReleaseOverride) : null;\n }\n return null;\n}\n\nfunction throwIfStaleLockNeedsForce(id: string, lockInfo: LockReadResult, force: boolean, forceRequired: boolean): void {\n if (!force && forceRequired) {\n const warningSuffix = lockInfo.warnings.length > 0 ? ` (${lockInfo.warnings.join(\",\")})` : \"\";\n throw new PmCliError(\n `Item ${id} lock is stale${warningSuffix}; rerun with --force when supported for this command`,\n EXIT_CODE.CONFLICT,\n );\n }\n}\n\nfunction parseStaleCleanupGateOwner(raw: string): StaleCleanupGateOwner | null {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return null;\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return null;\n }\n const candidate = parsed as Record<string, unknown>;\n const pid = candidate.pid;\n const token = candidate.token;\n if (typeof pid !== \"number\" || !Number.isInteger(pid) || pid <= 0 || typeof token !== \"string\" || token.length === 0) {\n return null;\n }\n return { pid, token };\n}\n\nasync function readStaleCleanupGateOwner(gatePath: string): Promise<StaleCleanupGateOwner | null> {\n try {\n return parseStaleCleanupGateOwner(await fs.readFile(path.join(gatePath, STALE_CLEANUP_GATE_OWNER_FILE), \"utf8\"));\n } catch {\n return null;\n }\n}\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error: unknown) {\n if (isErrno(error, \"ESRCH\")) {\n return false;\n }\n return true;\n }\n}\n\nasync function removeStaleCleanupGateDirectory(gatePath: string): Promise<boolean> {\n try {\n await fs.rm(gatePath, { recursive: true, force: true });\n return true;\n } catch {\n return false;\n }\n}\n\nasync function releaseStaleCleanupGate(gatePath: string, token: string): Promise<void> {\n const owner = await readStaleCleanupGateOwner(gatePath);\n if (owner === null || owner.token !== token) {\n return;\n }\n await removeStaleCleanupGateDirectory(gatePath);\n}\n\nasync function tryCreateStaleCleanupGate(gatePath: string): Promise<StaleCleanupGateOwner | null> {\n try {\n await fs.mkdir(gatePath);\n } catch (error: unknown) {\n if (isErrno(error, \"EEXIST\")) {\n return null;\n }\n return null;\n }\n const owner = { pid: process.pid, token: randomUUID() };\n try {\n await fs.writeFile(path.join(gatePath, STALE_CLEANUP_GATE_OWNER_FILE), `${JSON.stringify(owner)}\\n`, \"utf8\");\n } catch {\n await removeStaleCleanupGateDirectory(gatePath);\n return null;\n }\n return owner;\n}\n\nasync function removeExpiredStaleCleanupGate(gatePath: string): Promise<boolean> {\n let gateAgeMs: number;\n try {\n const stats = await fs.stat(gatePath);\n gateAgeMs = Date.now() - stats.mtimeMs;\n if (gateAgeMs <= STALE_CLEANUP_GATE_STALE_MS) {\n return false;\n }\n } catch (error: unknown) {\n return isErrno(error, \"ENOENT\");\n }\n const owner = await readStaleCleanupGateOwner(gatePath);\n if (owner !== null && isProcessAlive(owner.pid) && gateAgeMs <= STALE_CLEANUP_GATE_MAX_ACTIVE_MS) {\n return false;\n }\n return removeStaleCleanupGateDirectory(gatePath);\n}\n\nasync function acquireStaleCleanupGate(lockPath: string, _id: string): Promise<(() => Promise<void>) | null> {\n const gatePath = `${lockPath}${STALE_CLEANUP_GATE_SUFFIX}`;\n const owner = await tryCreateStaleCleanupGate(gatePath);\n if (owner !== null) {\n return async () => releaseStaleCleanupGate(gatePath, owner.token);\n }\n if (!(await removeExpiredStaleCleanupGate(gatePath))) {\n return null;\n }\n const recoveredOwner = await tryCreateStaleCleanupGate(gatePath);\n if (recoveredOwner === null) {\n return null;\n }\n return async () => releaseStaleCleanupGate(gatePath, recoveredOwner.token);\n}\n\nasync function removeConfirmedStaleLock(params: {\n lockPath: string;\n id: string;\n ttlSeconds: number;\n force: boolean;\n forceRequiredForStaleLock: boolean;\n staleRemovals: number;\n waitBudgetMs: number;\n startedAtMs: number;\n fallbackLockInfo: LockReadResult;\n}): Promise<StaleLockRemovalResult> {\n const releaseCleanupGate = await acquireStaleCleanupGate(params.lockPath, params.id);\n if (releaseCleanupGate === null) {\n return {\n lockInfo: params.fallbackLockInfo,\n shouldRetryCreate: false,\n staleRemovalCounted: false,\n };\n }\n try {\n const currentLockInfo = await readLockInfo(params.lockPath);\n if (currentLockInfo.info === null && currentLockInfo.warnings.length === 0) {\n return {\n lockInfo: currentLockInfo,\n shouldRetryCreate: true,\n staleRemovalCounted: false,\n };\n }\n if (!isStaleLock(currentLockInfo.info, params.ttlSeconds)) {\n return {\n lockInfo: currentLockInfo,\n shouldRetryCreate: false,\n staleRemovalCounted: false,\n };\n }\n throwIfStaleLockNeedsForce(params.id, currentLockInfo, params.force, params.forceRequiredForStaleLock);\n if (params.staleRemovals >= MAX_STALE_LOCK_REMOVALS) {\n throw buildLockConflictError(params.id, currentLockInfo.info, Date.now() - params.startedAtMs);\n }\n return {\n lockInfo: currentLockInfo,\n shouldRetryCreate: await unlinkLockWithHook(params.lockPath, \"lock:stale_remove\"),\n staleRemovalCounted: true,\n };\n } finally {\n await releaseCleanupGate();\n }\n}\n\nexport const _testOnly = {\n parseLockInfo,\n readLockInfo,\n isErrno,\n buildLockPayload,\n isStaleLock,\n lockOwnerSuffix,\n resolveLockWaitMs,\n acquireStaleCleanupGate,\n removeConfirmedStaleLock,\n};\n\n\n/**\n * Implements acquire lock for the public runtime surface of this module.\n */\nexport async function acquireLock(\n pmRoot: string,\n id: string,\n ttlSeconds: number,\n owner: string,\n force = false,\n forceRequiredForStaleLock = true,\n waitMs?: number,\n): Promise<() => Promise<void>> {\n const lockOverride = await runActiveServiceOverride(\"lock_acquire\", {\n pm_root: pmRoot,\n id,\n ttl_seconds: ttlSeconds,\n owner,\n force,\n force_required_for_stale_lock: forceRequiredForStaleLock,\n });\n if (lockOverride.handled) {\n const release = resolveLockOverrideRelease(lockOverride.result);\n if (release) {\n return async () => {\n await Promise.resolve(release());\n await runActiveServiceOverride(\"lock_release\", {\n pm_root: pmRoot,\n id,\n owner,\n });\n };\n }\n }\n\n const lockPath = getLockPath(pmRoot, id);\n const waitBudgetMs = resolveLockWaitMs(waitMs);\n const startedAtMs = Date.now();\n let staleRemovals = 0;\n let backoffMs = LOCK_WAIT_INITIAL_DELAY_MS;\n\n for (;;) {\n try {\n await createLockFile(lockPath, id, owner, ttlSeconds);\n return async () => {\n await unlinkLockWithHook(lockPath, \"lock:release\");\n await runActiveServiceOverride(\"lock_release\", {\n pm_root: pmRoot,\n id,\n owner,\n });\n };\n } catch (error: unknown) {\n if (!isErrno(error, \"EEXIST\")) {\n throw new PmCliError(`Failed to acquire lock for ${id}: ${toErrorMessage(error)}`, EXIT_CODE.GENERIC_FAILURE);\n }\n let lockInfo = await readLockInfo(lockPath);\n if (isStaleLock(lockInfo.info, ttlSeconds)) {\n const staleRemoval = await removeConfirmedStaleLock({\n lockPath,\n id,\n ttlSeconds,\n force,\n forceRequiredForStaleLock,\n staleRemovals,\n waitBudgetMs,\n startedAtMs,\n fallbackLockInfo: lockInfo,\n });\n lockInfo = staleRemoval.lockInfo;\n if (staleRemoval.staleRemovalCounted) {\n staleRemovals += 1;\n }\n if (staleRemoval.shouldRetryCreate) {\n continue;\n }\n }\n const elapsedMs = Date.now() - startedAtMs;\n if (waitBudgetMs === 0 || elapsedMs >= waitBudgetMs) {\n throw buildLockConflictError(id, lockInfo.info, waitBudgetMs === 0 ? 0 : elapsedMs);\n }\n await sleepWithJitter(Math.min(backoffMs, waitBudgetMs - elapsedMs));\n backoffMs = Math.min(backoffMs * 2, LOCK_WAIT_MAX_DELAY_MS);\n }\n }\n}\n","/**\n * @module core/store/front-matter-cache\n *\n * Reads and writes tracker storage with format-aware helpers for Front Matter Cache.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { getActiveExtensionRegistrations, hasActiveOnReadHooks, runActiveOnReadHooks } from \"../extensions/index.js\";\nimport { collectRegisteredItemFieldNames } from \"../extensions/item-fields.js\";\nimport { parseItemDocument } from \"../item/item-format.js\";\nimport { evictOldestMemoEntries } from \"../shared/memo.js\";\nimport { writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { ITEM_FILE_EXTENSIONS, getItemFormatFromPath } from \"./paths.js\";\nimport type { ItemDocument, ItemFormat, ItemMetadata, ItemType, RuntimeSchemaSettings } from \"../../types/index.js\";\n\nconst CACHE_VERSION = 6;\nconst CACHE_FILENAME = \"metadata-cache.json\";\nconst BODY_CACHE_FILENAME = \"metadata-cache-bodies.json\";\nconst COLLECTIONS_CACHE_FILENAME = \"metadata-cache-collections.json\";\n\n/**\n * Heavy \"collection\" front-matter fields. These arrays dominate the on-disk cache\n * (e.g. a single item's comment thread can be hundreds of KB) yet the hot list path\n * (`pm list`, stats, deps, activity, calendar, close) never reads them. They are\n * stored in a separate collections cache that is parsed only when a caller opts in\n * (`includeCollections`), keeping the always-loaded light cache an order of magnitude\n * smaller and its JSON.parse correspondingly cheaper.\n */\nexport const HEAVY_METADATA_KEYS = [\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"tests\",\n \"test_runs\",\n \"docs\",\n] as const;\n\nfunction resolveActiveExtensionFieldNames(): readonly string[] {\n return collectRegisteredItemFieldNames(getActiveExtensionRegistrations());\n}\n\ninterface StatSignature {\n mtime_ms: number;\n ctime_ms: number;\n size: number;\n}\n\ninterface CachedEntry extends StatSignature {\n metadata: ItemMetadata;\n body_length: number;\n}\n\ninterface CachedBody extends StatSignature {\n body: string;\n}\n\ninterface CachedCollections extends StatSignature {\n collections: Record<string, unknown>;\n}\n\ninterface CacheEnvelope {\n version: number;\n context_fingerprint: string;\n entries: Record<string, CachedEntry>;\n}\n\ninterface BodyCacheEnvelope {\n version: number;\n context_fingerprint: string;\n bodies: Record<string, CachedBody>;\n}\n\ninterface CollectionsCacheEnvelope {\n version: number;\n context_fingerprint: string;\n collections: Record<string, CachedCollections>;\n}\n\n/**\n * Split parsed front-matter into the light scalar/small fields (everything except the\n * heavy collection arrays) and the heavy collection fields. Only keys that are actually\n * present are moved, so an item without comments stays without comments in both tiers.\n */\nfunction splitHeavyMetadata(metadata: ItemMetadata): {\n light: ItemMetadata;\n heavy: Record<string, unknown>;\n} {\n const light = { ...metadata } as Record<string, unknown>;\n const heavy: Record<string, unknown> = {};\n for (const key of HEAVY_METADATA_KEYS) {\n if (key in light) {\n heavy[key] = light[key];\n delete light[key];\n }\n }\n return { light: light as ItemMetadata, heavy };\n}\n\n/**\n * Recombine light metadata with cached heavy collection fields. Key order differs from\n * the on-disk document, but every downstream hash/serialization canonicalizes and\n * sorts keys (`stableStringify`), so the merged record is byte-identical once hashed.\n */\nfunction mergeHeavyMetadata(light: ItemMetadata, heavy: Record<string, unknown> | undefined): ItemMetadata {\n if (!heavy || Object.keys(heavy).length === 0) {\n return light;\n }\n return { ...light, ...heavy } as ItemMetadata;\n}\n\n/**\n * Documents the cached document candidate payload exchanged by command, SDK, and package integrations.\n */\nexport interface CachedDocumentCandidate {\n metadata: ItemMetadata;\n body?: string;\n item_format: ItemFormat;\n item_path: string;\n}\n\nfunction computeContextFingerprint(\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n schema: RuntimeSchemaSettings | undefined,\n extensionFieldNames: readonly string[],\n): string {\n const hash = createHash(\"sha256\");\n hash.update(`format:${preferredFormat ?? \"default\"}`);\n const sortedTypes = Object.entries(typeToFolder)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([type, folder]) => `${type}=${folder}`)\n .join(\",\");\n hash.update(`|types:${sortedTypes}`);\n if (schema) {\n hash.update(`|schema:${JSON.stringify(schema)}`);\n }\n if (extensionFieldNames.length > 0) {\n hash.update(`|extension_fields:${extensionFieldNames.join(\",\")}`);\n }\n return hash.digest(\"hex\").slice(0, 16);\n}\n\nfunction getCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", CACHE_FILENAME);\n}\n\nfunction getBodyCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", BODY_CACHE_FILENAME);\n}\n\nfunction getCollectionsCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", COLLECTIONS_CACHE_FILENAME);\n}\n\ninterface MemoizedEnvelope {\n signature: StatSignature;\n envelope: CacheEnvelope | BodyCacheEnvelope | CollectionsCacheEnvelope | null;\n}\n\n/**\n * In-process memo of parsed cache envelopes keyed by cache file path and validated\n * against the file's stat signature on every load. Commands that scan the corpus more\n * than once per invocation (`pm next`, `pm context`) and long-lived in-process hosts\n * (the MCP server) would otherwise re-read and re-parse multi-megabyte JSON on every\n * scan. Envelopes handed out from the memo are shared, so they must be treated as\n * read-only — the write path always goes through `mutateItem` on a `structuredClone`d\n * document parsed fresh from the item file, never through listed cache metadata.\n *\n * The cap bounds memory when one long-lived process serves many project roots\n * (3 envelopes per root). Hits re-insert their entry so Map insertion order tracks\n * recency, making the half-eviction drop the least-recently-used roots.\n */\nconst ENVELOPE_MEMO_MAX_ENTRIES = 24;\nconst envelopeMemo = new Map<string, MemoizedEnvelope>();\n\nfunction memoizeEnvelope(cachePath: string, entry: MemoizedEnvelope): void {\n if (envelopeMemo.size >= ENVELOPE_MEMO_MAX_ENTRIES && !envelopeMemo.has(cachePath)) {\n evictOldestMemoEntries(envelopeMemo);\n }\n envelopeMemo.set(cachePath, entry);\n}\n\nasync function loadEnvelopeMemoized<T extends MemoizedEnvelope[\"envelope\"]>(\n cachePath: string,\n parse: (raw: string) => T,\n): Promise<T> {\n let stat;\n try {\n stat = await fs.stat(cachePath);\n } catch {\n envelopeMemo.delete(cachePath);\n return null as T;\n }\n const memoized = envelopeMemo.get(cachePath);\n if (memoized && statMatches(memoized.signature, stat.mtimeMs, stat.ctimeMs, stat.size)) {\n // Re-insert on hit so insertion order tracks recency for the LRU half-eviction.\n envelopeMemo.delete(cachePath);\n envelopeMemo.set(cachePath, memoized);\n return memoized.envelope as T;\n }\n let envelope: T;\n try {\n envelope = parse(await fs.readFile(cachePath, \"utf8\"));\n } catch {\n envelope = null as T;\n }\n memoizeEnvelope(cachePath, {\n signature: { mtime_ms: stat.mtimeMs, ctime_ms: stat.ctimeMs, size: stat.size },\n envelope,\n });\n return envelope;\n}\n\n/**\n * Drop memoized envelopes. Exposed for tests; production invalidation is stat-driven\n * plus the explicit delete in {@link persistCache} after a rewrite.\n */\nexport function clearFrontMatterEnvelopeMemo(): void {\n envelopeMemo.clear();\n}\n\nasync function loadCache(pmRoot: string): Promise<CacheEnvelope | null> {\n return await loadEnvelopeMemoized(getCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as CacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.entries !== \"object\" || parsed.entries === null) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadBodyCache(pmRoot: string): Promise<BodyCacheEnvelope | null> {\n return await loadEnvelopeMemoized(getBodyCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as BodyCacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.bodies !== \"object\" || parsed.bodies === null) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadCollectionsCache(pmRoot: string): Promise<CollectionsCacheEnvelope | null> {\n return await loadEnvelopeMemoized(getCollectionsCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as CollectionsCacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.collections !== \"object\" || parsed.collections === null) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function persistCache(\n cachePath: string,\n envelope: CacheEnvelope | BodyCacheEnvelope | CollectionsCacheEnvelope,\n): Promise<void> {\n await fs.mkdir(path.dirname(cachePath), { recursive: true });\n await writeFileAtomic(cachePath, JSON.stringify(envelope));\n // Repopulate the memo with the just-written envelope so the next read after a\n // write skips the cold re-read; fall back to plain invalidation when the fresh\n // stat signature cannot be captured.\n try {\n const stat = await fs.stat(cachePath);\n memoizeEnvelope(cachePath, {\n signature: { mtime_ms: stat.mtimeMs, ctime_ms: stat.ctimeMs, size: stat.size },\n envelope,\n });\n } catch {\n envelopeMemo.delete(cachePath);\n }\n}\n\n/**\n * Decide whether a freshly parsed document candidate should replace the one\n * already recorded for the same item id when both an explicit-format file and a\n * fallback-format file exist (e.g. `pm-x.toon` and `pm-x.md`). An explicit\n * `preferredFormat` wins; otherwise `toon` wins over any non-toon format.\n *\n * This is a pure decision so the winner is fully deterministic regardless of the\n * order in which the concurrent per-file reads resolve — the inline call site\n * populates the map as each async read completes, so without a pure rule the\n * branch taken (and thus its coverage) would race. Keep this exported and\n * unit-tested across every format combination.\n */\nexport function shouldReplaceCachedDocumentCandidate(\n existingFormat: ItemFormat,\n candidateFormat: ItemFormat,\n preferredFormat: ItemFormat | undefined,\n): boolean {\n if (preferredFormat) {\n return candidateFormat === preferredFormat && existingFormat !== preferredFormat;\n }\n return candidateFormat === \"toon\" && existingFormat !== \"toon\";\n}\n\nfunction appendWarning(warnings: string[] | undefined, warning: string): void {\n if (warnings && !warnings.includes(warning)) {\n warnings.push(warning);\n }\n}\n\nfunction statMatches(signature: StatSignature, mtimeMs: number, ctimeMs: number, size: number): boolean {\n return signature.mtime_ms === mtimeMs && signature.ctime_ms === ctimeMs && signature.size === size;\n}\n\ninterface DocumentCacheMissState {\n metadata: boolean;\n body: boolean;\n collections: boolean;\n}\n\ninterface DocumentCacheMutableState {\n newEntries: Record<string, CachedEntry>;\n newBodies: Record<string, CachedBody>;\n newCollections: Record<string, CachedCollections>;\n documentsById: Map<string, { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }>;\n misses: DocumentCacheMissState;\n}\n\ninterface DocumentCacheReadContext {\n pmRoot: string;\n preferredFormat: ItemFormat | undefined;\n warnings: string[] | undefined;\n schema: RuntimeSchemaSettings | undefined;\n extensionFieldNames: readonly string[];\n includeBody: boolean;\n includeCollections: boolean;\n dispatchReadHooks: boolean;\n previousEntries: Record<string, CachedEntry>;\n previousBodies: Record<string, CachedBody>;\n previousCollections: Record<string, CachedCollections>;\n state: DocumentCacheMutableState;\n}\n\ninterface CachedDocumentReadParts {\n mtimeMs: number;\n ctimeMs: number;\n size: number;\n itemFormat: ItemFormat;\n lightMetadata: ItemMetadata;\n heavyMetadata: Record<string, unknown> | undefined;\n bodyLength: number;\n body: string | undefined;\n}\n\nasync function readItemDirectoryFiles(\n pmRoot: string,\n folder: string,\n warnings: string[] | undefined,\n): Promise<{ folder: string; dirPath: string; files: string[] }> {\n const dirPath = path.join(pmRoot, folder);\n try {\n const files = await fs.readdir(dirPath);\n return { folder, dirPath, files };\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code !== \"ENOENT\") {\n appendWarning(warnings, `item_list_directory_read_failed:${folder}`);\n }\n return { folder, dirPath, files: [] };\n }\n}\n\nfunction isItemDocumentFile(file: string): boolean {\n return ITEM_FILE_EXTENSIONS.some((ext) => file.toLowerCase().endsWith(ext));\n}\n\nfunction markDocumentCacheMisses(\n misses: DocumentCacheMissState,\n includeBody: boolean,\n includeCollections: boolean,\n metadataCached: boolean,\n bodyCached: boolean,\n collectionsCached: boolean,\n): void {\n if (!metadataCached) {\n misses.metadata = true;\n }\n if (includeBody && !bodyCached) {\n misses.body = true;\n }\n if (includeCollections && !collectionsCached) {\n misses.collections = true;\n }\n}\n\nasync function dispatchCachedDocumentReadHooks(\n filePath: string,\n warnings: string[] | undefined,\n dispatchReadHooks: boolean,\n): Promise<void> {\n if (!dispatchReadHooks) {\n return;\n }\n for (const warning of await runActiveOnReadHooks({ path: filePath, scope: \"project\" })) {\n appendWarning(warnings, warning);\n }\n}\n\nasync function readCachedDocumentParts(\n filePath: string,\n relativePath: string,\n context: DocumentCacheReadContext,\n): Promise<CachedDocumentReadParts> {\n const stat = await fs.stat(filePath);\n const mtimeMs = stat.mtimeMs;\n const ctimeMs = stat.ctimeMs;\n const { size } = stat;\n const itemFormat = getItemFormatFromPath(filePath) as ItemFormat;\n\n await dispatchCachedDocumentReadHooks(filePath, context.warnings, context.dispatchReadHooks);\n\n const cachedEntry = context.previousEntries[relativePath];\n const metadataCached = cachedEntry !== undefined && statMatches(cachedEntry, mtimeMs, ctimeMs, size);\n const cachedBody = context.previousBodies[relativePath];\n const bodyCached = cachedBody !== undefined && statMatches(cachedBody, mtimeMs, ctimeMs, size);\n const cachedCollections = context.previousCollections[relativePath];\n const collectionsCached = cachedCollections !== undefined && statMatches(cachedCollections, mtimeMs, ctimeMs, size);\n const needRead =\n !metadataCached || (context.includeBody && !bodyCached) || (context.includeCollections && !collectionsCached);\n\n if (!needRead) {\n return {\n mtimeMs,\n ctimeMs,\n size,\n itemFormat,\n lightMetadata: cachedEntry.metadata,\n heavyMetadata: context.includeCollections && cachedCollections ? cachedCollections.collections : undefined,\n bodyLength: cachedEntry.body_length,\n body: context.includeBody ? cachedBody.body : undefined,\n };\n }\n\n const raw = await fs.readFile(filePath, \"utf8\");\n const parsed = parseItemDocument(raw, {\n format: itemFormat,\n schema: context.schema,\n extensionFieldNames: context.extensionFieldNames,\n onWarning: (warning) => appendWarning(context.warnings, warning),\n });\n const split = splitHeavyMetadata(parsed.metadata);\n markDocumentCacheMisses(\n context.state.misses,\n context.includeBody,\n context.includeCollections,\n metadataCached,\n bodyCached,\n collectionsCached,\n );\n return {\n mtimeMs,\n ctimeMs,\n size,\n itemFormat,\n lightMetadata: metadataCached ? cachedEntry.metadata : split.light,\n heavyMetadata: context.includeCollections\n ? collectionsCached\n ? cachedCollections.collections\n : split.heavy\n : undefined,\n bodyLength: metadataCached ? cachedEntry.body_length : parsed.body.length,\n body: context.includeBody ? parsed.body : undefined,\n };\n}\n\nfunction recordCachedDocumentCandidate(\n filePath: string,\n relativePath: string,\n context: DocumentCacheReadContext,\n parts: CachedDocumentReadParts,\n): void {\n context.state.newEntries[relativePath] = {\n mtime_ms: parts.mtimeMs,\n ctime_ms: parts.ctimeMs,\n size: parts.size,\n metadata: parts.lightMetadata,\n body_length: parts.bodyLength,\n };\n if (context.includeBody && parts.body !== undefined) {\n context.state.newBodies[relativePath] = {\n mtime_ms: parts.mtimeMs,\n ctime_ms: parts.ctimeMs,\n size: parts.size,\n body: parts.body,\n };\n }\n if (context.includeCollections && parts.heavyMetadata !== undefined) {\n context.state.newCollections[relativePath] = {\n mtime_ms: parts.mtimeMs,\n ctime_ms: parts.ctimeMs,\n size: parts.size,\n collections: parts.heavyMetadata,\n };\n }\n\n const metadata = context.includeCollections ? mergeHeavyMetadata(parts.lightMetadata, parts.heavyMetadata) : parts.lightMetadata;\n const existing = context.state.documentsById.get(metadata.id);\n const candidate: CachedDocumentCandidate = {\n metadata,\n body: parts.body,\n item_format: parts.itemFormat,\n item_path: filePath,\n };\n if (!existing || shouldReplaceCachedDocumentCandidate(existing.itemFormat, parts.itemFormat, context.preferredFormat)) {\n context.state.documentsById.set(metadata.id, { candidate, itemFormat: parts.itemFormat });\n }\n}\n\nasync function processCachedDocumentFile(\n folder: string,\n filePath: string,\n relativePath: string,\n context: DocumentCacheReadContext,\n): Promise<void> {\n try {\n const parts = await readCachedDocumentParts(filePath, relativePath, context);\n recordCachedDocumentCandidate(filePath, relativePath, context, parts);\n } catch {\n appendWarning(context.warnings, `item_list_item_read_failed:${folder}/${path.basename(filePath)}`);\n }\n}\n\nfunction selectPreviousMetadataEntries(\n existingCache: CacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedEntry> {\n return existingCache && existingCache.context_fingerprint === contextFingerprint ? existingCache.entries : {};\n}\n\nfunction selectPreviousBodyEntries(\n existingBodyCache: BodyCacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedBody> {\n return existingBodyCache && existingBodyCache.context_fingerprint === contextFingerprint ? existingBodyCache.bodies : {};\n}\n\nfunction selectPreviousCollectionEntries(\n existingCollectionsCache: CollectionsCacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedCollections> {\n return existingCollectionsCache && existingCollectionsCache.context_fingerprint === contextFingerprint\n ? existingCollectionsCache.collections\n : {};\n}\n\nfunction createDocumentCacheMutableState(): DocumentCacheMutableState {\n return {\n newEntries: {},\n newBodies: {},\n newCollections: {},\n documentsById: new Map<string, { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }>(),\n misses: {\n metadata: false,\n body: false,\n collections: false,\n },\n };\n}\n\nfunction collectCachedDocumentParseTasks(\n dirResults: Array<{ folder: string; dirPath: string; files: string[] }>,\n context: DocumentCacheReadContext,\n): Array<Promise<void>> {\n const parseTasks: Array<Promise<void>> = [];\n for (const { folder, dirPath, files } of dirResults) {\n for (const file of files) {\n if (!isItemDocumentFile(file)) {\n continue;\n }\n const filePath = path.join(dirPath, file);\n const relativePath = path.relative(context.pmRoot, filePath);\n parseTasks.push(processCachedDocumentFile(folder, filePath, relativePath, context));\n }\n }\n return parseTasks;\n}\n\nasync function persistMetadataCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n existingCache: CacheEnvelope | null;\n previousEntries: Record<string, CachedEntry>;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const metadataDirty = params.state.misses.metadata ||\n Object.keys(params.previousEntries).length !== Object.keys(params.state.newEntries).length;\n if (!metadataDirty && params.existingCache !== null && params.existingCache.context_fingerprint === params.contextFingerprint) {\n return;\n }\n await persistCache(getCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n entries: params.state.newEntries,\n }).catch(() => {});\n}\n\nasync function persistBodyCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n existingBodyCache: BodyCacheEnvelope | null;\n previousBodies: Record<string, CachedBody>;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const bodyDirty = params.state.misses.body ||\n Object.keys(params.previousBodies).length !== Object.keys(params.state.newBodies).length;\n if (\n !bodyDirty &&\n params.existingBodyCache !== null &&\n params.existingBodyCache.context_fingerprint === params.contextFingerprint\n ) {\n return;\n }\n await persistCache(getBodyCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n bodies: params.state.newBodies,\n }).catch(() => {});\n}\n\nasync function persistCollectionsCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n existingCollectionsCache: CollectionsCacheEnvelope | null;\n previousCollections: Record<string, CachedCollections>;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const collectionsDirty = params.state.misses.collections ||\n Object.keys(params.previousCollections).length !== Object.keys(params.state.newCollections).length;\n if (\n !collectionsDirty &&\n params.existingCollectionsCache !== null &&\n params.existingCollectionsCache.context_fingerprint === params.contextFingerprint\n ) {\n return;\n }\n await persistCache(getCollectionsCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n collections: params.state.newCollections,\n }).catch(() => {});\n}\n\nfunction sortedCachedDocumentCandidates(state: DocumentCacheMutableState): CachedDocumentCandidate[] {\n return [...state.documentsById.values()]\n .sort((left, right) => left.candidate.metadata.id.localeCompare(right.candidate.metadata.id))\n .map((entry) => entry.candidate);\n}\n\n/**\n * Documents the list cache options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ListCacheOptions {\n /**\n * When false, item bodies are neither loaded from nor written to the separate\n * body cache. Metadata-only callers (`pm list`, stats, deps, activity, …) skip\n * the large body cache entirely; only body consumers (search/reindex) pay for it.\n */\n includeBody?: boolean;\n /**\n * When false, heavy collection fields (comments/notes/learnings/files/tests/\n * test_runs/docs) are neither loaded from nor written to the separate collections\n * cache, and are absent from the returned metadata. Light-only callers (`pm list`\n * compact, stats, deps, activity, calendar, close) skip the large collections cache\n * entirely. Defaults to true so any caller that does read those fields stays correct.\n */\n includeCollections?: boolean;\n}\n\n/**\n * List all item documents using a persistent on-disk metadata cache.\n *\n * Metadata and bodies are stored in two separate cache files so the hot path\n * (`pm list` and friends, which discard bodies) never loads or rewrites the much\n * larger body payload. Each file is rewritten only when its contents actually\n * change, and per-file onRead hooks are dispatched only when an extension\n * registers one. Only files whose mtime/ctime/size changed since the last run are\n * re-parsed.\n */\nexport async function listAllDocumentCandidatesCached(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n options: ListCacheOptions = {},\n): Promise<CachedDocumentCandidate[]> {\n const includeBody = options.includeBody !== false;\n const includeCollections = options.includeCollections !== false;\n const extensionFieldNames = resolveActiveExtensionFieldNames();\n const contextFingerprint = computeContextFingerprint(preferredFormat, typeToFolder, schema, extensionFieldNames);\n\n const existingCache = await loadCache(pmRoot);\n const previousEntries = selectPreviousMetadataEntries(existingCache, contextFingerprint);\n\n const existingBodyCache = includeBody ? await loadBodyCache(pmRoot) : null;\n const previousBodies = selectPreviousBodyEntries(existingBodyCache, contextFingerprint);\n\n const existingCollectionsCache = includeCollections ? await loadCollectionsCache(pmRoot) : null;\n const previousCollections = selectPreviousCollectionEntries(existingCollectionsCache, contextFingerprint);\n\n const entries = Object.entries(typeToFolder) as Array<[ItemType, string]>;\n const dirResults = await Promise.all(entries.map(([, folder]) => readItemDirectoryFiles(pmRoot, folder, warnings)));\n\n const dispatchReadHooks = hasActiveOnReadHooks();\n const state = createDocumentCacheMutableState();\n const context: DocumentCacheReadContext = {\n pmRoot,\n preferredFormat,\n warnings,\n schema,\n extensionFieldNames,\n includeBody,\n includeCollections,\n dispatchReadHooks,\n previousEntries,\n previousBodies,\n previousCollections,\n state,\n };\n\n await Promise.all(collectCachedDocumentParseTasks(dirResults, context));\n\n // Rewrite a cache file only when its contents changed: any re-parsed (missing or\n // stale) entry, or a different set of keys (additions/deletions).\n await persistMetadataCacheIfNeeded({ pmRoot, contextFingerprint, existingCache, previousEntries, state });\n\n if (includeBody) {\n await persistBodyCacheIfNeeded({ pmRoot, contextFingerprint, existingBodyCache, previousBodies, state });\n }\n\n if (includeCollections) {\n await persistCollectionsCacheIfNeeded({ pmRoot, contextFingerprint, existingCollectionsCache, previousCollections, state });\n }\n\n return sortedCachedDocumentCandidates(state);\n}\n\n/**\n * Implements list all documents cached for the public runtime surface of this module.\n */\nexport async function listAllDocumentsCached(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n): Promise<ItemDocument[]> {\n const candidates = await listAllDocumentCandidatesCached(pmRoot, preferredFormat, typeToFolder, warnings, schema, {\n includeBody: false,\n });\n return candidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n\n/**\n * Light variant of {@link listAllDocumentsCached}: returns metadata WITHOUT the heavy\n * collection fields (comments/notes/learnings/files/tests/test_runs/docs), skipping the\n * large collections cache entirely. Only safe for callers that read just the light\n * scalar/small fields (id/title/status/type/priority/parent/tags/dates/dependencies/…).\n */\nexport async function listAllDocumentsCachedLight(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n): Promise<ItemDocument[]> {\n const candidates = await listAllDocumentCandidatesCached(pmRoot, preferredFormat, typeToFolder, warnings, schema, {\n includeBody: false,\n includeCollections: false,\n });\n return candidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n","/**\n * @module core/store/item-store\n *\n * Reads and writes tracker storage with format-aware helpers for Item Store.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n getActiveExtensionRegistrations,\n projectAfterCommandItemSnapshot,\n recordAfterCommandAffectedItem,\n runActiveOnReadHooks,\n runActiveOnWriteHooks,\n runActiveServiceOverride,\n} from \"../extensions/index.js\";\nimport { collectRegisteredItemFieldNames } from \"../extensions/item-fields.js\";\nimport { EMPTY_CANONICAL_DOCUMENT, EXIT_CODE, TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\nimport { appendHistoryEntry, createHistoryEntry } from \"../history/history.js\";\nimport { enforceHistoryStreamPolicyForItem } from \"../history/history-stream-policy.js\";\nimport { canonicalDocument, parseItemDocument, serializeItemDocument } from \"../item/item-format.js\";\nimport { resolveItemTypeRegistry } from \"../item/type-registry.js\";\nimport { acquireLock } from \"../lock/lock.js\";\nimport { writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { normalizeItemId, normalizeRawItemId } from \"../item/id.js\";\nimport { listAllDocumentCandidatesCached, listAllDocumentsCached, listAllDocumentsCachedLight } from \"./front-matter-cache.js\";\nimport { getHistoryPath, getItemFormatFromPath, getItemPath, ITEM_FILE_EXTENSIONS } from \"./paths.js\";\nimport { resolveGovernanceKnobs } from \"./settings.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport type { ItemDocument, ItemFormat, ItemFrontMatter, ItemType, PmSettings, RuntimeSchemaSettings } from \"../../types/index.js\";\n\n/**\n * Documents the located item payload exchanged by command, SDK, and package integrations.\n */\nexport interface LocatedItem {\n id: string;\n type: ItemType;\n itemPath: string;\n item_format: ItemFormat;\n}\n\nasync function fileExists(targetPath: string): Promise<boolean> {\n try {\n await fs.access(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === code;\n}\n\nfunction appendWarning(warnings: string[] | undefined, warning: string): void {\n if (!warnings) {\n return;\n }\n if (!warnings.includes(warning)) {\n warnings.push(warning);\n }\n}\n\nfunction resolveActiveExtensionFieldNames(explicit: readonly string[] | undefined): readonly string[] {\n return explicit ?? collectRegisteredItemFieldNames(getActiveExtensionRegistrations());\n}\n\nfunction resolveItemFormatSearchOrder(preferredFormat?: ItemFormat): ItemFormat[] {\n if (preferredFormat === \"toon\") {\n return [\"toon\", \"json_markdown\"];\n }\n if (preferredFormat === \"json_markdown\") {\n return [\"json_markdown\", \"toon\"];\n }\n return [\"toon\", \"json_markdown\"];\n}\n\n/**\n * Implements locate item for the public runtime surface of this module.\n */\nexport async function locateItem(\n pmRoot: string,\n rawId: string,\n idPrefix = \"pm-\",\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n): Promise<LocatedItem | null> {\n const normalizedId = normalizeItemId(rawId, idPrefix);\n const rawNormalizedId = normalizeRawItemId(rawId);\n const candidateIds = normalizedId === rawNormalizedId ? [normalizedId] : [normalizedId, rawNormalizedId];\n const entries = Object.entries(typeToFolder) as Array<[ItemType, string]>;\n const searchOrder = resolveItemFormatSearchOrder(preferredFormat);\n for (const candidateId of candidateIds) {\n for (const [type] of entries) {\n for (const itemFormat of searchOrder) {\n const itemPath = getItemPath(pmRoot, type, candidateId, itemFormat, typeToFolder);\n if (await fileExists(itemPath)) {\n return {\n id: candidateId,\n type,\n itemPath,\n item_format: itemFormat,\n };\n }\n }\n }\n }\n return null;\n}\n\n/**\n * Implements read located item for the public runtime surface of this module.\n */\nexport async function readLocatedItem(\n item: LocatedItem,\n options: { schema?: RuntimeSchemaSettings; extensionFieldNames?: readonly string[]; warnings?: string[] } = {},\n): Promise<{ raw: string; document: ItemDocument }> {\n const raw = await fs.readFile(item.itemPath, \"utf8\");\n await runActiveOnReadHooks({\n path: item.itemPath,\n scope: \"project\",\n });\n const document = parseItemDocument(raw, {\n format: item.item_format,\n schema: options.schema,\n extensionFieldNames: resolveActiveExtensionFieldNames(options.extensionFieldNames),\n onWarning: (warning) => appendWarning(options.warnings, warning),\n });\n return { raw, document };\n}\n\n/**\n * Implements list all front matter for the public runtime surface of this module.\n */\nexport async function listAllFrontMatter(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<ItemFrontMatter[]> {\n const documents = await listAllDocumentsCached(pmRoot, preferredFormat, typeToFolder, warnings, schema);\n return documents.map((document) => document.metadata);\n}\n\n/**\n * Light variant of {@link listAllFrontMatter}: returns front-matter WITHOUT the heavy\n * collection fields (comments/notes/learnings/files/tests/test_runs/docs). Skips the\n * large collections cache so the hot list path stays cheap. Only use for callers that\n * read just the light scalar/small fields — see {@link listAllDocumentsCachedLight}.\n */\nexport async function listAllFrontMatterLight(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<ItemFrontMatter[]> {\n const documents = await listAllDocumentsCachedLight(pmRoot, preferredFormat, typeToFolder, warnings, schema);\n return documents.map((document) => document.metadata);\n}\n\n/**\n * Implements list all front matter with body for the public runtime surface of this module.\n */\nexport async function listAllFrontMatterWithBody(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<Array<ItemFrontMatter & { body: string }>> {\n const candidates = await listAllDocumentCandidatesCached(\n pmRoot,\n preferredFormat,\n typeToFolder,\n warnings,\n schema,\n { includeBody: true },\n );\n return candidates.map((candidate) => ({\n ...candidate.metadata,\n // includeBody:true guarantees candidate bodies are materialized.\n body: candidate.body!,\n }));\n}\n\nasync function listKnownItemIds(\n pmRoot: string,\n typeToFolder: Record<string, string>,\n): Promise<string[]> {\n const folders = new Set(Object.values(typeToFolder));\n const allIds: string[] = [];\n await Promise.all(\n [...folders].map(async (folder) => {\n try {\n const entries = await fs.readdir(path.join(pmRoot, folder));\n for (const entry of entries) {\n for (const ext of ITEM_FILE_EXTENSIONS) {\n if (entry.toLowerCase().endsWith(ext)) {\n allIds.push(entry.slice(0, -ext.length));\n break;\n }\n }\n }\n } catch {\n // ignore missing folders\n }\n }),\n );\n return allIds;\n}\n\nasync function buildDidYouMeanSuggestions(\n pmRoot: string,\n badId: string,\n idPrefix: string,\n typeToFolder: Record<string, string>,\n): Promise<string[]> {\n const normalized = normalizeItemId(badId, idPrefix);\n const ids = await listKnownItemIds(pmRoot, typeToFolder);\n if (ids.length === 0) return [];\n const limit = Math.max(3, Math.floor(normalized.length / 2));\n const scored = ids\n .map((id) => ({ id, distance: levenshteinDistanceWithinLimit(id, normalized, limit) }))\n .filter((entry): entry is { id: string; distance: number } => entry.distance !== null)\n .sort((left, right) => left.distance - right.distance)\n .slice(0, 3)\n .map((entry) => entry.id);\n return scored;\n}\n\n/**\n * Implements build item not found error for the public runtime surface of this module.\n */\nexport async function buildItemNotFoundError(\n pmRoot: string,\n badId: string,\n idPrefix: string,\n typeToFolder: Record<string, string>,\n): Promise<PmCliError> {\n const suggestions = await buildDidYouMeanSuggestions(pmRoot, badId, idPrefix, typeToFolder);\n const nextSteps: string[] = [\"Confirm the active --path/PM_PATH scope, then retry with a valid id.\"];\n if (suggestions.length > 0) {\n nextSteps.unshift(`Did you mean one of: ${suggestions.join(\", \")}?`);\n }\n return new PmCliError(`Item ${badId} not found`, EXIT_CODE.NOT_FOUND, { nextSteps });\n}\n\nfunction bypassesAssigneeConflict(\n op: string,\n bypassAssigneeConflict?: boolean,\n): boolean {\n return (\n op === \"claim\" ||\n (bypassAssigneeConflict === true &&\n (op === \"comment_add\" ||\n op === \"comment_edit\" ||\n op === \"comment_delete\" ||\n op === \"note_add\" ||\n op === \"learning_add\" ||\n op === \"release\" ||\n op === \"update\" ||\n op === \"update_audit\"))\n );\n}\n\nasync function prepareLockedItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n op: string;\n author: string;\n force?: boolean;\n bypassAssigneeConflict?: boolean;\n extensionFieldNames?: readonly string[];\n typeToFolder?: Record<string, string>;\n}): Promise<{\n typeToFolder: Record<string, string>;\n located: LocatedItem;\n originalRaw: string;\n document: ItemDocument;\n warnings: string[];\n releaseLock: () => Promise<void>;\n}> {\n const typeToFolder =\n params.typeToFolder ??\n resolveItemTypeRegistry(params.settings, getActiveExtensionRegistrations())\n .type_to_folder;\n const located = await locateItem(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n params.settings.item_format,\n typeToFolder,\n );\n if (!located) {\n throw await buildItemNotFoundError(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n typeToFolder,\n );\n }\n\n const releaseLock = await acquireLock(\n params.pmRoot,\n located.id,\n params.settings.locks.ttl_seconds,\n params.author,\n Boolean(params.force),\n params.settings.governance.force_required_for_stale_lock,\n params.settings.locks.wait_ms,\n );\n\n try {\n const warnings: string[] = [];\n const { raw: originalRaw, document } = await readLocatedItem(located, {\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n warnings,\n });\n\n const assigned = document.metadata.assignee?.trim();\n const governance = resolveGovernanceKnobs(params.settings);\n const hasOwnershipConflict =\n assigned &&\n assigned !== params.author &&\n !params.force &&\n !bypassesAssigneeConflict(params.op, params.bypassAssigneeConflict);\n if (hasOwnershipConflict) {\n if (governance.ownership_enforcement === \"strict\") {\n throw new PmCliError(\n `Item ${located.id} is assigned to ${assigned}. Use --force to override.`,\n EXIT_CODE.CONFLICT,\n );\n }\n if (governance.ownership_enforcement === \"warn\") {\n warnings.push(\n `ownership_warning:assignee_conflict:${located.id}:${assigned}`,\n );\n }\n }\n\n return {\n typeToFolder,\n located,\n originalRaw,\n document,\n warnings,\n releaseLock,\n };\n } catch (error: unknown) {\n await releaseLock();\n throw error;\n }\n}\n\nfunction resolveItemStoreWriteOverride(\n serviceWriteOverride: { handled: boolean; result?: unknown },\n targetItemPath: string,\n serializedAfter: string,\n): {\n effectiveTargetItemPath: string;\n effectiveSerializedAfter: string;\n skipItemWrite: boolean;\n} {\n if (!serviceWriteOverride.handled || typeof serviceWriteOverride.result !== \"object\" || serviceWriteOverride.result === null) {\n return { effectiveTargetItemPath: targetItemPath, effectiveSerializedAfter: serializedAfter, skipItemWrite: false };\n }\n const overrideRecord = serviceWriteOverride.result as {\n target_item_path?: unknown;\n contents?: unknown;\n skip_write?: unknown;\n };\n return {\n effectiveTargetItemPath:\n typeof overrideRecord.target_item_path === \"string\" && overrideRecord.target_item_path.trim().length > 0\n ? overrideRecord.target_item_path\n : targetItemPath,\n effectiveSerializedAfter: typeof overrideRecord.contents === \"string\" ? overrideRecord.contents : serializedAfter,\n skipItemWrite: overrideRecord.skip_write === true,\n };\n}\n\nasync function rollbackMutatedItemWrite(params: {\n skipItemWrite: boolean;\n effectiveTargetItemPath: string;\n originalItemPath: string;\n originalRaw: string;\n}): Promise<void> {\n if (params.skipItemWrite) {\n return;\n }\n if (params.effectiveTargetItemPath !== params.originalItemPath) {\n await writeFileAtomic(params.originalItemPath, params.originalRaw);\n await fs.rm(params.effectiveTargetItemPath, { force: true });\n return;\n }\n await writeFileAtomic(params.originalItemPath, params.originalRaw);\n}\n\n/**\n * Implements mutate item for the public runtime surface of this module.\n */\nexport async function mutateItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n op: string;\n author: string;\n message?: string;\n force?: boolean;\n bypassAssigneeConflict?: boolean;\n skipNoop?: boolean;\n extensionFieldNames?: readonly string[];\n typeToFolder?: Record<string, string>;\n mutate: (document: ItemDocument) => {\n changedFields: string[];\n warnings?: string[];\n };\n}): Promise<{\n item: ItemFrontMatter;\n body: string;\n changedFields: string[];\n warnings: string[];\n}> {\n const prepared = await prepareLockedItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n id: params.id,\n op: params.op,\n author: params.author,\n force: params.force,\n bypassAssigneeConflict: params.bypassAssigneeConflict,\n extensionFieldNames: params.extensionFieldNames,\n typeToFolder: params.typeToFolder,\n });\n const {\n typeToFolder,\n located,\n originalRaw,\n document,\n warnings: parseWarnings,\n releaseLock,\n } = prepared;\n\n try {\n const beforeDocument = canonicalDocument(document, {\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n });\n const mutableDocument = canonicalDocument(structuredClone(document), {\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n });\n const mutation = params.mutate(mutableDocument);\n if (params.skipNoop === true && mutation.changedFields.length === 0) {\n return {\n item: beforeDocument.metadata,\n body: beforeDocument.body,\n changedFields: [],\n warnings: [...parseWarnings, ...(mutation.warnings ?? [])],\n };\n }\n const historyPolicy = await enforceHistoryStreamPolicyForItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemId: located.id,\n commandLabel: params.op,\n });\n mutableDocument.metadata.updated_at = nowIso();\n const afterDocument = canonicalDocument(mutableDocument, {\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n });\n const targetItemFormat: ItemFormat = \"toon\";\n const serializedAfter = serializeItemDocument(afterDocument, {\n format: targetItemFormat,\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n });\n const targetItemPath = getItemPath(\n params.pmRoot,\n afterDocument.metadata.type,\n located.id,\n targetItemFormat,\n typeToFolder,\n );\n const historyPath = getHistoryPath(params.pmRoot, located.id);\n const serviceWriteOverride = await runActiveServiceOverride(\"item_store_write\", {\n op: params.op,\n pm_root: params.pmRoot,\n item_id: located.id,\n source_item_path: located.itemPath,\n target_item_path: targetItemPath,\n history_path: historyPath,\n item_format: targetItemFormat,\n before: beforeDocument,\n after: afterDocument,\n contents: serializedAfter,\n });\n const { effectiveTargetItemPath, effectiveSerializedAfter, skipItemWrite } = resolveItemStoreWriteOverride(\n serviceWriteOverride,\n targetItemPath,\n serializedAfter,\n );\n\n if (!skipItemWrite) {\n await writeFileAtomic(effectiveTargetItemPath, effectiveSerializedAfter);\n }\n if (!skipItemWrite && effectiveTargetItemPath !== located.itemPath) {\n await fs.rm(located.itemPath);\n }\n const entry = createHistoryEntry({\n nowIso: afterDocument.metadata.updated_at,\n author: params.author,\n op: params.op,\n before: beforeDocument,\n after: afterDocument,\n message: params.message,\n });\n\n try {\n await appendHistoryEntry(historyPath, entry);\n } catch (error: unknown) {\n await rollbackMutatedItemWrite({\n skipItemWrite,\n effectiveTargetItemPath,\n originalItemPath: located.itemPath,\n originalRaw,\n });\n throw error;\n }\n const hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: effectiveTargetItemPath,\n scope: \"project\",\n op: params.op,\n item_id: afterDocument.metadata.id,\n item_type: afterDocument.metadata.type,\n before: beforeDocument,\n after: afterDocument,\n changed_fields: mutation.changedFields,\n })),\n ...(await runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: `${params.op}:history`,\n item_id: afterDocument.metadata.id,\n item_type: afterDocument.metadata.type,\n before: beforeDocument,\n after: afterDocument,\n changed_fields: mutation.changedFields,\n })),\n ];\n\n recordAfterCommandAffectedItem({\n id: afterDocument.metadata.id,\n op: params.op,\n item_type: afterDocument.metadata.type,\n previous_status: beforeDocument.metadata.status,\n status: afterDocument.metadata.status,\n previous: projectAfterCommandItemSnapshot(beforeDocument.metadata, mutation.changedFields),\n current: projectAfterCommandItemSnapshot(afterDocument.metadata, mutation.changedFields),\n changed_fields: mutation.changedFields,\n });\n\n return {\n item: afterDocument.metadata,\n body: afterDocument.body,\n changedFields: mutation.changedFields,\n warnings: [\n ...parseWarnings,\n ...(mutation.warnings ?? []),\n ...historyPolicy.warnings,\n ...serviceWriteOverride.warnings,\n ...hookWarnings,\n ],\n };\n } finally {\n await releaseLock();\n }\n}\n\nexport const itemStoreTestOnly = {\n appendWarning,\n bypassesAssigneeConflict,\n buildDidYouMeanSuggestions,\n isErrno,\n};\n\n/**\n * Implements delete item for the public runtime surface of this module.\n */\nexport async function deleteItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n author: string;\n message?: string;\n force?: boolean;\n dryRun?: boolean;\n}): Promise<{ item: ItemFrontMatter; changedFields: string[]; warnings: string[]; targetPath?: string }> {\n const prepared = await prepareLockedItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n id: params.id,\n op: \"delete\",\n author: params.author,\n force: params.force,\n });\n const { located, originalRaw, document, warnings: parseWarnings, releaseLock } = prepared;\n\n try {\n const historyPolicy = await enforceHistoryStreamPolicyForItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemId: located.id,\n commandLabel: \"delete\",\n });\n\n const beforeDocument = canonicalDocument(document, { schema: params.settings.schema });\n const deletionTimestamp = nowIso();\n const tombstoneDocument = EMPTY_CANONICAL_DOCUMENT as unknown as ItemDocument;\n const historyEntry = createHistoryEntry({\n nowIso: deletionTimestamp,\n author: params.author,\n op: \"delete\",\n before: beforeDocument,\n after: tombstoneDocument,\n message: params.message,\n });\n const historyPath = getHistoryPath(params.pmRoot, located.id);\n const serviceDeleteOverride = await runActiveServiceOverride(\"item_store_delete\", {\n op: \"delete\",\n pm_root: params.pmRoot,\n item_id: located.id,\n item_path: located.itemPath,\n history_path: historyPath,\n before: beforeDocument,\n });\n let effectiveItemPath = located.itemPath;\n let skipDelete = false;\n if (\n serviceDeleteOverride.handled &&\n typeof serviceDeleteOverride.result === \"object\" &&\n serviceDeleteOverride.result !== null\n ) {\n const overrideRecord = serviceDeleteOverride.result as {\n item_path?: unknown;\n skip_delete?: unknown;\n };\n if (typeof overrideRecord.item_path === \"string\" && overrideRecord.item_path.trim().length > 0) {\n effectiveItemPath = overrideRecord.item_path;\n }\n if (overrideRecord.skip_delete === true) {\n skipDelete = true;\n }\n }\n\n if (params.dryRun === true) {\n return {\n item: beforeDocument.metadata,\n changedFields: [\"deleted\"],\n targetPath: effectiveItemPath,\n warnings: [...parseWarnings, ...historyPolicy.warnings, ...serviceDeleteOverride.warnings],\n };\n }\n\n if (!skipDelete) {\n await fs.rm(effectiveItemPath);\n }\n try {\n await appendHistoryEntry(historyPath, historyEntry);\n } catch (error: unknown) {\n if (!skipDelete) {\n await writeFileAtomic(effectiveItemPath, originalRaw);\n }\n throw error;\n }\n\n const hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: effectiveItemPath,\n scope: \"project\",\n op: \"delete\",\n item_id: beforeDocument.metadata.id,\n item_type: beforeDocument.metadata.type,\n before: beforeDocument,\n after: tombstoneDocument,\n changed_fields: [\"deleted\"],\n })),\n ...(await runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: \"delete:history\",\n item_id: beforeDocument.metadata.id,\n item_type: beforeDocument.metadata.type,\n before: beforeDocument,\n after: tombstoneDocument,\n changed_fields: [\"deleted\"],\n })),\n ];\n\n recordAfterCommandAffectedItem({\n id: beforeDocument.metadata.id,\n op: \"delete\",\n item_type: beforeDocument.metadata.type,\n previous_status: beforeDocument.metadata.status,\n previous: projectAfterCommandItemSnapshot(beforeDocument.metadata, Object.keys(beforeDocument.metadata)),\n changed_fields: [\"deleted\"],\n });\n\n return {\n item: beforeDocument.metadata,\n changedFields: [\"deleted\"],\n warnings: [...parseWarnings, ...historyPolicy.warnings, ...serviceDeleteOverride.warnings, ...hookWarnings],\n };\n } finally {\n await releaseLock();\n }\n}\n"],"names":["path","next","fs","path","fs","path","fs","path","path","fs","fs","path","fs","path","fs","appendWarning","resolveActiveExtensionFieldNames","fs","path","fs"],"mappings":"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","debugId":"c9a5ce7b-7b83-549d-bddc-c6f8ce8564b8"}
|