@unbrained/pm-cli 2026.7.21 → 2026.7.22
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/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +25 -0
- package/dist/cli/bundle-integrity.js +3 -3
- package/dist/cli/bundle-integrity.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +5 -0
- package/dist/cli/commands/contracts.js +8 -6
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/copy.js +36 -20
- package/dist/cli/commands/copy.js.map +1 -1
- package/dist/cli/commands/create.js +48 -24
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/merge.d.ts +1 -1
- package/dist/cli/commands/merge.js +3 -3
- package/dist/cli/commands/merge.js.map +1 -1
- package/dist/cli/commands/restore.js +40 -22
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/update.js +12 -9
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/extension-command-help.js +3 -4
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/main.d.ts +3 -2
- package/dist/cli/main.js +6 -6
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +33 -21
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +63 -37
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +2 -0
- package/dist/cli/registration-helpers.js +3 -2
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/bundle-manifest.json +349 -341
- package/dist/cli-bundle/chunks/{append-7OVFYR3C.js → append-CYMA7RJT.js} +5 -5
- package/dist/cli-bundle/chunks/append-H53CAPMP.js +11 -0
- package/dist/cli-bundle/chunks/{chunk-PFNHX655.js → chunk-2P7OK4WG.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-EJDGV4GR.js → chunk-3EBGHNNQ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-DZRV2OPA.js → chunk-3EDFN3VV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZOY5K4D3.js → chunk-3PWJWLLQ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VXOOB6YX.js → chunk-3SJAR3CY.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-GTLCVJOE.js → chunk-3WVKMF2A.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-LAV26CQG.js → chunk-42SYYKA4.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-NLR32VFS.js → chunk-4IXLNV7W.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BKIAH72N.js → chunk-4LTPHDKA.js} +39 -23
- package/dist/cli-bundle/chunks/chunk-4LTPHDKA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ABWCF646.js → chunk-4YTQVO3V.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-E5XMKOSB.js → chunk-5EBRMHI6.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-IY6VZ3IW.js → chunk-5FAG2JUC.js} +320 -62
- package/dist/cli-bundle/chunks/chunk-5FAG2JUC.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GKX4NJ7U.js → chunk-5K5LHZZX.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-T6PPNM7V.js → chunk-5K7BOAB6.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-4QOB7L7I.js → chunk-5MUZ54G2.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-SF3DT5HJ.js → chunk-5QME4KX2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RMF7LMBS.js → chunk-6PDGFY3P.js} +27 -17
- package/dist/cli-bundle/chunks/{chunk-RMF7LMBS.js.map → chunk-6PDGFY3P.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TRSHFPRZ.js → chunk-6PM6CPPP.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-O4BCOJTZ.js → chunk-7AHRY3ZB.js} +21 -16
- package/dist/cli-bundle/chunks/chunk-7AHRY3ZB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-OR42SO64.js → chunk-7B36A3VT.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-QWRVBJ4D.js → chunk-7OR2YKKD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FPBMLYPI.js → chunk-7QUV54XX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-WWNL6WMH.js → chunk-7WXW6JHG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BXNDKOR2.js → chunk-A2VL5SVG.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-AXGDUXJW.js +5 -0
- package/dist/cli-bundle/chunks/{chunk-IAQE32BI.js → chunk-B2AVNGG3.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-K36WV5J6.js → chunk-B7O44UBR.js} +71 -8
- package/dist/cli-bundle/chunks/chunk-B7O44UBR.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HCEBZNC3.js → chunk-BRMPF2RM.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-Z7VWXXJM.js → chunk-BTNKMF2A.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-KH44WBAT.js → chunk-CD4643VW.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-OWXOPDHD.js → chunk-CJEEC5O4.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-PZC2FUOQ.js → chunk-CTPKCZCF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7W2UAXXT.js → chunk-D4OBQVL3.js} +10 -10
- package/dist/cli-bundle/chunks/{chunk-EWJWSNRU.js → chunk-DM4TYC2A.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-VJQG4BIM.js → chunk-DSFTAQ7T.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-AELMUANP.js → chunk-DVB6SQU7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KBLZ3AA5.js → chunk-E3ZWOFSO.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-EP25DV6P.js +9 -0
- package/dist/cli-bundle/chunks/{chunk-GTK4DTEW.js → chunk-F4VCB4WY.js} +10 -10
- package/dist/cli-bundle/chunks/{chunk-V22ZPOKN.js → chunk-F4XAQUQA.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-QOOTOD3W.js → chunk-FGR6IBAF.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-JSLT7WVE.js → chunk-FKBMT2Q6.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QIH77CAG.js → chunk-G5RLSSIX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-P7MTHPJQ.js → chunk-GEKRVH3G.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2L6ZP22J.js → chunk-GSP6IZFU.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ATBCUC7Y.js → chunk-H3MDK2VU.js} +48 -30
- package/dist/cli-bundle/chunks/chunk-H3MDK2VU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZVZGXPQ5.js → chunk-HYZZM3Q2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-XJTABV3X.js → chunk-IBWG3OSH.js} +22 -17
- package/dist/cli-bundle/chunks/chunk-IBWG3OSH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4XGJLADW.js → chunk-IHY5SX7O.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UCBDQI5E.js → chunk-IMU7JLUI.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-Z75ONV25.js → chunk-IPAQAJWB.js} +77 -7
- package/dist/cli-bundle/chunks/chunk-IPAQAJWB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7RW4JCU2.js → chunk-IQCD6OO3.js} +25 -13
- package/dist/cli-bundle/chunks/chunk-IQCD6OO3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YQWCZ5AC.js → chunk-J3ZKFEDM.js} +38 -22
- package/dist/cli-bundle/chunks/chunk-J3ZKFEDM.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PEQGTJ5Q.js → chunk-JCLXCGIL.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-GROYI4RB.js → chunk-JLTHOYR7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JHJSFOAM.js → chunk-JMPVHM44.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-MATHDCGG.js → chunk-JWYG36RV.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-ZTVA4KLN.js → chunk-KEGVMZNA.js} +28 -16
- package/dist/cli-bundle/chunks/chunk-KEGVMZNA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VLRGDBLY.js → chunk-KEHOPUHH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-K55VMLSS.js → chunk-KJ4ZF35M.js} +63 -13
- package/dist/cli-bundle/chunks/chunk-KJ4ZF35M.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CPX275C6.js → chunk-KPCZL2YK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-POG76WWZ.js → chunk-L7DZV6EZ.js} +319 -61
- package/dist/cli-bundle/chunks/chunk-L7DZV6EZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FO6OSVEN.js → chunk-LANV45W2.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-LVC72YRD.js → chunk-LC5ZUXWE.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-SY4SFZSD.js → chunk-LE522OXA.js} +55 -30
- package/dist/cli-bundle/chunks/chunk-LE522OXA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TVYYO5A7.js → chunk-MBHYQYCS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FJIFFBJX.js → chunk-MROP2RNT.js} +66 -74
- package/dist/cli-bundle/chunks/chunk-MROP2RNT.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7656MAUL.js → chunk-MUAJHL2R.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-R3P6FZJW.js → chunk-N6QCY2AX.js} +43 -25
- package/dist/cli-bundle/chunks/chunk-N6QCY2AX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7WCE6Y64.js → chunk-NUQCSV4P.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SZVB53Y3.js → chunk-O3GFE2PX.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-OY7DMU5P.js → chunk-O43LEUSD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AMJPSANK.js → chunk-O7RH6BWP.js} +103 -44
- package/dist/cli-bundle/chunks/chunk-O7RH6BWP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NUF7ROFH.js → chunk-OODR5KYF.js} +26 -27
- package/dist/cli-bundle/chunks/chunk-OODR5KYF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LZYP423P.js → chunk-OZ25YD4Q.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VZIZB6QH.js → chunk-PKYKQCTJ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UZLJOEAC.js → chunk-PMRED6QZ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ADBTSVGK.js → chunk-PPATPPI6.js} +65 -73
- package/dist/cli-bundle/chunks/chunk-PPATPPI6.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-K4CI6Y45.js → chunk-PWGJCP2V.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UVN66B3M.js → chunk-Q3Z2Y5WJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RNPZYNHS.js → chunk-Q6YZ3VCI.js} +104 -45
- package/dist/cli-bundle/chunks/chunk-Q6YZ3VCI.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7DOJC3HS.js → chunk-QE5EUHKN.js} +28 -18
- package/dist/cli-bundle/chunks/chunk-QE5EUHKN.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AS4SAZ5R.js → chunk-QKMMWESK.js} +25 -26
- package/dist/cli-bundle/chunks/chunk-QKMMWESK.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-R7QV7ICM.js → chunk-QSXN2FAN.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-5NTE36LD.js → chunk-RBECHH5K.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JXCW2TI2.js → chunk-RPNC7M63.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-ICDAQ4TD.js → chunk-S2QQNTA6.js} +26 -14
- package/dist/cli-bundle/chunks/chunk-S2QQNTA6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JFD5LPMI.js → chunk-SP3BAXFF.js} +29 -17
- package/dist/cli-bundle/chunks/chunk-SP3BAXFF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-F2LBF7XJ.js → chunk-SUSFH6F7.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-VHXHVTUU.js → chunk-TDOPC7UY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HYW67VJ5.js → chunk-TLF52ZDP.js} +30 -25
- package/dist/cli-bundle/chunks/chunk-TLF52ZDP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-FSE2IKJQ.js → chunk-TWHG646K.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OCUBRA6D.js → chunk-U7U7WGEC.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-PONKZPCJ.js → chunk-UFRVIIJ2.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-VNTCM3VW.js → chunk-VKX2VZZH.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-7AVEY74G.js → chunk-VTOCZ343.js} +29 -24
- package/dist/cli-bundle/chunks/chunk-VTOCZ343.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6JUTHVQS.js → chunk-W2JDNTN3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-PQSEQD6E.js → chunk-W35PHE44.js} +62 -12
- package/dist/cli-bundle/chunks/chunk-W35PHE44.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-4QSQ6XDK.js → chunk-WT4KXBUD.js} +68 -31
- package/dist/cli-bundle/chunks/chunk-WT4KXBUD.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RPESLSO5.js → chunk-XC5RVKHH.js} +69 -32
- package/dist/cli-bundle/chunks/chunk-XC5RVKHH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QG4GFLQ6.js → chunk-XD6UF2NB.js} +42 -24
- package/dist/cli-bundle/chunks/chunk-XD6UF2NB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-AF2CCM5U.js → chunk-XKRVX4B3.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JGUKMMRS.js → chunk-XN4NQZJK.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-3P7UJQOX.js → chunk-YKFMLQNK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YCIUJJOD.js → chunk-YKWKMGL7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TOBGV45Y.js → chunk-YUKIFPWK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-72LQ4TKV.js → chunk-YYEZEP3E.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-X3W65QK3.js → chunk-ZEY3XSZQ.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-MWQ2HC2A.js → chunk-ZKOQHLJP.js} +59 -34
- package/dist/cli-bundle/chunks/chunk-ZKOQHLJP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-QJIKE24M.js → chunk-ZQ3UMKWE.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4PUUNQDV.js → chunk-ZVVEWHWK.js} +58 -33
- package/dist/cli-bundle/chunks/chunk-ZVVEWHWK.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-OG5DVFMA.js → chunk-ZXE6SNKO.js} +5 -5
- package/dist/cli-bundle/chunks/close-GAUIGOQC.js +12 -0
- package/dist/cli-bundle/chunks/{close-QEMOYZN3.js → close-SJIEKNY4.js} +5 -5
- package/dist/cli-bundle/chunks/{close-many-RZVTUGBG.js → close-many-B6AIC5OQ.js} +15 -14
- package/dist/cli-bundle/chunks/close-many-QCINT6I2.js +24 -0
- package/dist/cli-bundle/chunks/comments-4SK5EUEJ.js +13 -0
- package/dist/cli-bundle/chunks/{comments-TPU7QRBL.js → comments-DM5KV2RS.js} +7 -7
- package/dist/cli-bundle/chunks/copy-4KCCLTYQ.js +10 -0
- package/dist/cli-bundle/chunks/{copy-DKTSSCK7.js → copy-HEP5SZHB.js} +5 -4
- package/dist/cli-bundle/chunks/create-BDKQFPRE.js +30 -0
- package/dist/cli-bundle/chunks/{create-EIFBIVNQ.js → create-VCGBCYL2.js} +11 -10
- package/dist/cli-bundle/chunks/delete-JWDXPR3H.js +10 -0
- package/dist/cli-bundle/chunks/{delete-LCS3VPDH.js → delete-ZSPBTVJD.js} +4 -4
- package/dist/cli-bundle/chunks/{deps-YG7UF3VR.js → deps-BZTWWOIE.js} +6 -6
- package/dist/cli-bundle/chunks/{deps-UH5EQQUY.js → deps-OVAJOQIE.js} +6 -6
- package/dist/cli-bundle/chunks/{docs-G32TK6XS.js → docs-3GFMSWLL.js} +6 -6
- package/dist/cli-bundle/chunks/docs-SY2NPT6Y.js +14 -0
- package/dist/cli-bundle/chunks/{files-4ALMCSKB.js → files-2SEL4QIU.js} +6 -6
- package/dist/cli-bundle/chunks/{files-3H32UQ4K.js → files-FYMMJGNN.js} +6 -6
- package/dist/cli-bundle/chunks/focus-4A27YJ2Z.js +10 -0
- package/dist/cli-bundle/chunks/{focus-7SOUT5PZ.js → focus-TEUJKTAT.js} +5 -5
- package/dist/cli-bundle/chunks/history-compact-7QOKL2NB.js +16 -0
- package/dist/cli-bundle/chunks/{history-compact-77BT2LUB.js → history-compact-U7A37VR6.js} +6 -6
- package/dist/cli-bundle/chunks/{history-redact-LJPZPNFA.js → history-redact-TNKUO4ZE.js} +4 -4
- package/dist/cli-bundle/chunks/{history-redact-PWTTJ3XS.js → history-redact-ZWRUWQY3.js} +4 -4
- package/dist/cli-bundle/chunks/{history-repair-I7CBNCV3.js → history-repair-6IU5VWHN.js} +7 -7
- package/dist/cli-bundle/chunks/history-repair-GWCGJUM2.js +17 -0
- package/dist/cli-bundle/chunks/learnings-DDFAUUX3.js +13 -0
- package/dist/cli-bundle/chunks/{learnings-KTYW3AL7.js → learnings-GOEZXMKL.js} +7 -7
- package/dist/cli-bundle/chunks/{notes-ZERD3KB2.js → notes-BZWODAEK.js} +7 -7
- package/dist/cli-bundle/chunks/notes-OBJ6FL36.js +13 -0
- package/dist/cli-bundle/chunks/{plan-OFJUBIM5.js → plan-V57VQTAG.js} +12 -11
- package/dist/cli-bundle/chunks/plan-ZMOBD6FX.js +27 -0
- package/dist/cli-bundle/chunks/{profile-3THJPIQY.js → profile-BG3N4ETA.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-XEZAMMBW.js → profile-XLM45FKV.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-BR435Q2H.js → register-list-query-EYYNTGMF.js} +48 -38
- package/dist/cli-bundle/chunks/register-list-query-EYYNTGMF.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-RWTWLOBE.js → register-list-query-WGXJPXXY.js} +47 -37
- package/dist/cli-bundle/chunks/register-list-query-WGXJPXXY.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-HLWC2WNP.js → register-mutation-3YSDDVOL.js} +131 -105
- package/dist/cli-bundle/chunks/register-mutation-3YSDDVOL.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-ZJX5AZM5.js → register-mutation-VDGUMMUY.js} +131 -105
- package/dist/cli-bundle/chunks/register-mutation-VDGUMMUY.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-744YBJMV.js → register-operations-H4URGAHX.js} +36 -35
- package/dist/cli-bundle/chunks/{register-operations-744YBJMV.js.map → register-operations-H4URGAHX.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-operations-UEBJH6AN.js → register-operations-HSO7X77D.js} +34 -33
- package/dist/cli-bundle/chunks/{register-operations-UEBJH6AN.js.map → register-operations-HSO7X77D.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-setup-5DA4UZXI.js → register-setup-HZ2KKXK4.js} +13 -13
- package/dist/cli-bundle/chunks/{register-setup-6H25M3BH.js → register-setup-WCBKJ3H3.js} +13 -13
- package/dist/cli-bundle/chunks/{restore-6TDVSATY.js → restore-3NGRFDPX.js} +7 -6
- package/dist/cli-bundle/chunks/restore-LNVNUWHE.js +15 -0
- package/dist/cli-bundle/chunks/{schema-TPVTIJPO.js → schema-LMFZ742C.js} +6 -6
- package/dist/cli-bundle/chunks/{schema-HFXFSGPG.js → schema-O34O33UW.js} +6 -6
- package/dist/cli-bundle/chunks/update-BN6VZSYX.js +24 -0
- package/dist/cli-bundle/chunks/{update-LJZCL5SI.js → update-FDLPLKOB.js} +14 -13
- package/dist/cli-bundle/chunks/update-many-WCKOPN3K.js +35 -0
- package/dist/cli-bundle/chunks/update-many-WCKOPN3K.js.map +7 -0
- package/dist/cli-bundle/chunks/update-many-X6DVGOMM.js +39 -0
- package/dist/cli-bundle/chunks/update-many-X6DVGOMM.js.map +1 -0
- package/dist/cli-bundle/main.js +65 -64
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/cli-bundle/sdk-runtime.js +53 -52
- package/dist/cli-bundle/sdk-testing.js +6 -6
- package/dist/cli-bundle/sdk.js +362 -56
- package/dist/cli-bundle/sdk.js.map +4 -4
- package/dist/cli.js +10 -4
- package/dist/cli.js.map +1 -1
- package/dist/core/diagnostics/remediation.js +7 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/search/background-refresh.d.ts +3 -1
- package/dist/core/search/background-refresh.js +34 -6
- package/dist/core/search/background-refresh.js.map +1 -1
- package/dist/core/search/cache.js +28 -5
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/shared/constants.d.ts +2 -0
- package/dist/core/shared/constants.js +29 -24
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/item-metadata-cache.d.ts +32 -1
- package/dist/core/store/item-metadata-cache.js +289 -21
- package/dist/core/store/item-metadata-cache.js.map +1 -1
- package/dist/core/store/item-store.js +71 -34
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings.js +9 -3
- package/dist/core/store/settings.js.map +1 -1
- package/dist/sdk/cli-bootstrap.js +68 -76
- package/dist/sdk/cli-bootstrap.js.map +1 -1
- package/dist/sdk/compile-cache.d.ts +16 -0
- package/dist/sdk/compile-cache.js +73 -0
- package/dist/sdk/compile-cache.js.map +1 -0
- package/dist/sdk/context-relevance.d.ts +16 -1
- package/dist/sdk/context-relevance.js +20 -8
- package/dist/sdk/context-relevance.js.map +1 -1
- package/dist/sdk/context-signal-store.d.ts +77 -0
- package/dist/sdk/context-signal-store.js +201 -0
- package/dist/sdk/context-signal-store.js.map +1 -0
- package/dist/sdk/dependency-provenance.d.ts +12 -0
- package/dist/sdk/dependency-provenance.js +38 -0
- package/dist/sdk/dependency-provenance.js.map +1 -0
- package/dist/sdk/governance/storage-integrity.d.ts +1 -1
- package/dist/sdk/governance/storage-integrity.js +47 -6
- package/dist/sdk/governance/storage-integrity.js.map +1 -1
- package/dist/sdk/graph/assembly.d.ts +2 -0
- package/dist/sdk/graph/assembly.js +51 -4
- package/dist/sdk/graph/assembly.js.map +1 -1
- package/dist/sdk/graph/run.js +12 -13
- package/dist/sdk/graph/run.js.map +1 -1
- package/dist/sdk/index.d.ts +5 -0
- package/dist/sdk/index.js +7 -2
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/item-metadata-index.d.ts +11 -0
- package/dist/sdk/item-metadata-index.js +15 -0
- package/dist/sdk/item-metadata-index.js.map +1 -0
- package/dist/sdk/merge/index.d.ts +1 -0
- package/dist/sdk/merge/index.js +3 -2
- package/dist/sdk/merge/index.js.map +1 -1
- package/dist/sdk/merge/install.js +25 -9
- package/dist/sdk/merge/install.js.map +1 -1
- package/dist/sdk/merge/reconcile.d.ts +46 -0
- package/dist/sdk/merge/reconcile.js +46 -0
- package/dist/sdk/merge/reconcile.js.map +1 -0
- package/dist/sdk/query/list.d.ts +5 -4
- package/dist/sdk/query/list.js +22 -14
- package/dist/sdk/query/list.js.map +1 -1
- package/dist/sdk/relationship-history.d.ts +30 -0
- package/dist/sdk/relationship-history.js +75 -7
- package/dist/sdk/relationship-history.js.map +1 -1
- package/dist/sdk/relationship-migration.d.ts +42 -0
- package/dist/sdk/relationship-migration.js +78 -0
- package/dist/sdk/relationship-migration.js.map +1 -0
- package/dist/sdk/structured-mutations.js +4 -25
- package/dist/sdk/structured-mutations.js.map +1 -1
- package/docs/COMMANDS.md +26 -3
- package/docs/CONFIGURATION.md +1 -1
- package/docs/MERGE_SAFETY.md +14 -5
- package/docs/PERFORMANCE.md +28 -0
- package/docs/RELATIONSHIP_GRAPH.md +47 -1
- package/docs/SDK.md +78 -5
- package/marketplace.json +2 -2
- package/package.json +2 -2
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/dist/cli-bundle/chunks/append-DFETHAZL.js +0 -11
- package/dist/cli-bundle/chunks/chunk-4PUUNQDV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4QSQ6XDK.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7AVEY74G.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7DOJC3HS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7RW4JCU2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ADBTSVGK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AMJPSANK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AS4SAZ5R.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ATBCUC7Y.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BKIAH72N.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FJIFFBJX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-HYW67VJ5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ICDAQ4TD.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IY6VZ3IW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JFD5LPMI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K36WV5J6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K55VMLSS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MWQ2HC2A.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NUF7ROFH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-O4BCOJTZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-POG76WWZ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-PQSEQD6E.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QG4GFLQ6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-R3P6FZJW.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RNPZYNHS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RPESLSO5.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SY4SFZSD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-XJTABV3X.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YQWCZ5AC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Z75ONV25.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZTVA4KLN.js.map +0 -7
- package/dist/cli-bundle/chunks/close-O5QVZ6ET.js +0 -12
- package/dist/cli-bundle/chunks/close-many-5RZXVN4J.js +0 -23
- package/dist/cli-bundle/chunks/comments-Z4KV6FU3.js +0 -13
- package/dist/cli-bundle/chunks/copy-M7DDI6LS.js +0 -9
- package/dist/cli-bundle/chunks/create-RGSPN5GD.js +0 -29
- package/dist/cli-bundle/chunks/delete-MD7YXQLH.js +0 -10
- package/dist/cli-bundle/chunks/docs-JWWNRC27.js +0 -14
- package/dist/cli-bundle/chunks/focus-DRQ6FQH6.js +0 -10
- package/dist/cli-bundle/chunks/history-compact-VCKGTX64.js +0 -16
- package/dist/cli-bundle/chunks/history-repair-YTDZRK5E.js +0 -17
- package/dist/cli-bundle/chunks/learnings-CYNOICKR.js +0 -13
- package/dist/cli-bundle/chunks/notes-FGO63FXL.js +0 -13
- package/dist/cli-bundle/chunks/plan-SGCDDTYR.js +0 -26
- package/dist/cli-bundle/chunks/register-list-query-BR435Q2H.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-RWTWLOBE.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-HLWC2WNP.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-ZJX5AZM5.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-RSL7C7LO.js +0 -14
- package/dist/cli-bundle/chunks/update-SIA7LH5Y.js +0 -23
- package/dist/cli-bundle/chunks/update-many-BDBZVGQL.js +0 -38
- package/dist/cli-bundle/chunks/update-many-MOY3A5B3.js +0 -34
- /package/dist/cli-bundle/chunks/{append-7OVFYR3C.js.map → append-CYMA7RJT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-DFETHAZL.js.map → append-H53CAPMP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PFNHX655.js.map → chunk-2P7OK4WG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EJDGV4GR.js.map → chunk-3EBGHNNQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DZRV2OPA.js.map → chunk-3EDFN3VV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZOY5K4D3.js.map → chunk-3PWJWLLQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VXOOB6YX.js.map → chunk-3SJAR3CY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GTLCVJOE.js.map → chunk-3WVKMF2A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LAV26CQG.js.map → chunk-42SYYKA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NLR32VFS.js.map → chunk-4IXLNV7W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ABWCF646.js.map → chunk-4YTQVO3V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E5XMKOSB.js.map → chunk-5EBRMHI6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GKX4NJ7U.js.map → chunk-5K5LHZZX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T6PPNM7V.js.map → chunk-5K7BOAB6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4QOB7L7I.js.map → chunk-5MUZ54G2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SF3DT5HJ.js.map → chunk-5QME4KX2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TRSHFPRZ.js.map → chunk-6PM6CPPP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OR42SO64.js.map → chunk-7B36A3VT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QWRVBJ4D.js.map → chunk-7OR2YKKD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FPBMLYPI.js.map → chunk-7QUV54XX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WWNL6WMH.js.map → chunk-7WXW6JHG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BXNDKOR2.js.map → chunk-A2VL5SVG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-QEMOYZN3.js.map → chunk-AXGDUXJW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IAQE32BI.js.map → chunk-B2AVNGG3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HCEBZNC3.js.map → chunk-BRMPF2RM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z7VWXXJM.js.map → chunk-BTNKMF2A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KH44WBAT.js.map → chunk-CD4643VW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OWXOPDHD.js.map → chunk-CJEEC5O4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PZC2FUOQ.js.map → chunk-CTPKCZCF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7W2UAXXT.js.map → chunk-D4OBQVL3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EWJWSNRU.js.map → chunk-DM4TYC2A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VJQG4BIM.js.map → chunk-DSFTAQ7T.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AELMUANP.js.map → chunk-DVB6SQU7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KBLZ3AA5.js.map → chunk-E3ZWOFSO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-O5QVZ6ET.js.map → chunk-EP25DV6P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GTK4DTEW.js.map → chunk-F4VCB4WY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-V22ZPOKN.js.map → chunk-F4XAQUQA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QOOTOD3W.js.map → chunk-FGR6IBAF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JSLT7WVE.js.map → chunk-FKBMT2Q6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QIH77CAG.js.map → chunk-G5RLSSIX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P7MTHPJQ.js.map → chunk-GEKRVH3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2L6ZP22J.js.map → chunk-GSP6IZFU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZVZGXPQ5.js.map → chunk-HYZZM3Q2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4XGJLADW.js.map → chunk-IHY5SX7O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UCBDQI5E.js.map → chunk-IMU7JLUI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PEQGTJ5Q.js.map → chunk-JCLXCGIL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GROYI4RB.js.map → chunk-JLTHOYR7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JHJSFOAM.js.map → chunk-JMPVHM44.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MATHDCGG.js.map → chunk-JWYG36RV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VLRGDBLY.js.map → chunk-KEHOPUHH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CPX275C6.js.map → chunk-KPCZL2YK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FO6OSVEN.js.map → chunk-LANV45W2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LVC72YRD.js.map → chunk-LC5ZUXWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TVYYO5A7.js.map → chunk-MBHYQYCS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7656MAUL.js.map → chunk-MUAJHL2R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7WCE6Y64.js.map → chunk-NUQCSV4P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SZVB53Y3.js.map → chunk-O3GFE2PX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OY7DMU5P.js.map → chunk-O43LEUSD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LZYP423P.js.map → chunk-OZ25YD4Q.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VZIZB6QH.js.map → chunk-PKYKQCTJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UZLJOEAC.js.map → chunk-PMRED6QZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K4CI6Y45.js.map → chunk-PWGJCP2V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UVN66B3M.js.map → chunk-Q3Z2Y5WJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-R7QV7ICM.js.map → chunk-QSXN2FAN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5NTE36LD.js.map → chunk-RBECHH5K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JXCW2TI2.js.map → chunk-RPNC7M63.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F2LBF7XJ.js.map → chunk-SUSFH6F7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VHXHVTUU.js.map → chunk-TDOPC7UY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FSE2IKJQ.js.map → chunk-TWHG646K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OCUBRA6D.js.map → chunk-U7U7WGEC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PONKZPCJ.js.map → chunk-UFRVIIJ2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VNTCM3VW.js.map → chunk-VKX2VZZH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6JUTHVQS.js.map → chunk-W2JDNTN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AF2CCM5U.js.map → chunk-XKRVX4B3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JGUKMMRS.js.map → chunk-XN4NQZJK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3P7UJQOX.js.map → chunk-YKFMLQNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YCIUJJOD.js.map → chunk-YKWKMGL7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TOBGV45Y.js.map → chunk-YUKIFPWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-72LQ4TKV.js.map → chunk-YYEZEP3E.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-X3W65QK3.js.map → chunk-ZEY3XSZQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QJIKE24M.js.map → chunk-ZQ3UMKWE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OG5DVFMA.js.map → chunk-ZXE6SNKO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-5RZXVN4J.js.map → close-GAUIGOQC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-RZVTUGBG.js.map → close-SJIEKNY4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-TPU7QRBL.js.map → close-many-B6AIC5OQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-Z4KV6FU3.js.map → close-many-QCINT6I2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-M7DDI6LS.js.map → comments-4SK5EUEJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-DKTSSCK7.js.map → comments-DM5KV2RS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-RGSPN5GD.js.map → copy-4KCCLTYQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-EIFBIVNQ.js.map → copy-HEP5SZHB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-MD7YXQLH.js.map → create-BDKQFPRE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-LCS3VPDH.js.map → create-VCGBCYL2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-YG7UF3VR.js.map → delete-JWDXPR3H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-UH5EQQUY.js.map → delete-ZSPBTVJD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-JWWNRC27.js.map → deps-BZTWWOIE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-G32TK6XS.js.map → deps-OVAJOQIE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-3H32UQ4K.js.map → docs-3GFMSWLL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-4ALMCSKB.js.map → docs-SY2NPT6Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DRQ6FQH6.js.map → files-2SEL4QIU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-7SOUT5PZ.js.map → files-FYMMJGNN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-VCKGTX64.js.map → focus-4A27YJ2Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-77BT2LUB.js.map → focus-TEUJKTAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-PWTTJ3XS.js.map → history-compact-7QOKL2NB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-LJPZPNFA.js.map → history-compact-U7A37VR6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-I7CBNCV3.js.map → history-redact-TNKUO4ZE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-YTDZRK5E.js.map → history-redact-ZWRUWQY3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-KTYW3AL7.js.map → history-repair-6IU5VWHN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-CYNOICKR.js.map → history-repair-GWCGJUM2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-FGO63FXL.js.map → learnings-DDFAUUX3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-ZERD3KB2.js.map → learnings-GOEZXMKL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-OFJUBIM5.js.map → notes-BZWODAEK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-SGCDDTYR.js.map → notes-OBJ6FL36.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-3THJPIQY.js.map → plan-V57VQTAG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-XEZAMMBW.js.map → plan-ZMOBD6FX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-6TDVSATY.js.map → profile-BG3N4ETA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-RSL7C7LO.js.map → profile-XLM45FKV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-5DA4UZXI.js.map → register-setup-HZ2KKXK4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-6H25M3BH.js.map → register-setup-WCBKJ3H3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-TPVTIJPO.js.map → restore-3NGRFDPX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-HFXFSGPG.js.map → restore-LNVNUWHE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-LJZCL5SI.js.map → schema-LMFZ742C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-SIA7LH5Y.js.map → schema-O34O33UW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-MOY3A5B3.js.map → update-BN6VZSYX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-BDBZVGQL.js.map → update-FDLPLKOB.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-metadata-cache.js","sources":["core/store/item-metadata-cache.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/store/item-metadata-cache\n *\n * Reads and writes tracker storage with format-aware helpers for the item metadata cache.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport {\n getActiveExtensionRegistrations,\n hasActiveOnReadHooks,\n runActiveOnReadHooks,\n} 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 {\n ItemDocument,\n ItemFormat,\n ItemMetadata,\n RuntimeSchemaSettings,\n} from \"../../types/index.js\";\n\nconst CACHE_VERSION = 7;\nconst DEFAULT_DERIVED_INDEX_MINIMUM_ITEMS = 10_000;\nconst CACHE_FILENAME = \"metadata-cache.json\";\nconst BODY_CACHE_FILENAME = \"metadata-cache-bodies.json\";\nconst COLLECTIONS_CACHE_FILENAME = \"metadata-cache-collections.json\";\n\n/** Heavy \"collection\" item-metadata fields. These arrays dominate the on-disk cache (e.g. a single item's comment thread can be hundreds of KB) yet the hot list path (`pm list`, stats, deps, activity, calendar, close) never reads them. They are stored in a separate collections cache that is parsed only when a caller opts in (`includeCollections`), keeping the always-loaded light cache an order of magnitude smaller and its JSON.parse correspondingly cheaper. */\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 DirectorySignature extends StatSignature {\n exists: boolean;\n}\n\ntype DirectorySignatures = Record<string, DirectorySignature>;\n\ninterface CacheEnvelope {\n version: number;\n context_fingerprint: string;\n directory_signatures: DirectorySignatures;\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/** Split parsed item-metadata into the light scalar/small fields (everything except the heavy collection arrays) and the heavy collection fields. Only keys that are actually present are moved, so an item without comments stays without comments in both tiers. */\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/** Recombine light metadata with cached heavy collection fields. Key order differs from the on-disk document, but every downstream hash/serialization canonicalizes and sorts keys (`stableStringify`), so the merged record is byte-identical once hashed. */\nfunction mergeHeavyMetadata(\n light: ItemMetadata,\n heavy: Record<string, unknown> | undefined,\n): ItemMetadata {\n if (!heavy || Object.keys(heavy).length === 0) {\n return light;\n }\n return { ...light, ...heavy } as ItemMetadata;\n}\n\n/** Documents the cached document candidate payload exchanged by command, SDK, and package integrations. */\nexport interface CachedDocumentCandidate {\n /** Value that configures or reports metadata for this contract. */\n metadata: ItemMetadata;\n /** Value that configures or reports body for this contract. */\n body?: string;\n /** Value that configures or reports item format for this contract. */\n item_format: ItemFormat;\n /** Filesystem path used for item resolution. */\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 (\n envelopeMemo.size >= ENVELOPE_MEMO_MAX_ENTRIES &&\n !envelopeMemo.has(cachePath)\n ) {\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 (\n memoized &&\n statMatches(memoized.signature, stat.mtimeMs, stat.ctimeMs, stat.size)\n ) {\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: {\n mtime_ms: stat.mtimeMs,\n ctime_ms: stat.ctimeMs,\n size: stat.size,\n },\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 clearItemMetadataEnvelopeMemo(): 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 (\n parsed.version !== CACHE_VERSION ||\n typeof parsed.entries !== \"object\" ||\n parsed.entries === null\n ) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadBodyCache(\n pmRoot: string,\n): Promise<BodyCacheEnvelope | null> {\n return await loadEnvelopeMemoized(getBodyCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as BodyCacheEnvelope;\n if (\n parsed.version !== CACHE_VERSION ||\n typeof parsed.bodies !== \"object\" ||\n parsed.bodies === null\n ) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadCollectionsCache(\n pmRoot: string,\n): Promise<CollectionsCacheEnvelope | null> {\n return await loadEnvelopeMemoized(getCollectionsCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as CollectionsCacheEnvelope;\n if (\n parsed.version !== CACHE_VERSION ||\n typeof parsed.collections !== \"object\" ||\n parsed.collections === null\n ) {\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: {\n mtime_ms: stat.mtimeMs,\n ctime_ms: stat.ctimeMs,\n size: stat.size,\n },\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 (\n candidateFormat === preferredFormat && existingFormat !== preferredFormat\n );\n }\n return candidateFormat === \"toon\" && existingFormat !== \"toon\";\n}\n\n/** Decide whether a scanned candidate should be recorded for its item id. An unseen id is always recorded; duplicate ids delegate to the deterministic cross-format preference rule. Keeping the short-circuit in this pure helper makes both outcomes testable without relying on filesystem enumeration or concurrent read completion order. */\nexport function shouldRecordCachedDocumentCandidate(\n existingFormat: ItemFormat | undefined,\n candidateFormat: ItemFormat,\n preferredFormat: ItemFormat | undefined,\n): boolean {\n return (\n existingFormat === undefined ||\n shouldReplaceCachedDocumentCandidate(\n existingFormat,\n candidateFormat,\n preferredFormat,\n )\n );\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(\n signature: StatSignature,\n mtimeMs: number,\n ctimeMs: number,\n size: number,\n): boolean {\n return (\n signature.mtime_ms === mtimeMs &&\n signature.ctime_ms === ctimeMs &&\n signature.size === size\n );\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<\n string,\n { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }\n >;\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 (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code !== \"ENOENT\"\n ) {\n appendWarning(warnings, `item_list_directory_read_failed:${folder}`);\n }\n return { folder, dirPath, files: [] };\n }\n}\n\nasync function readDirectorySignature(\n pmRoot: string,\n folder: string,\n): Promise<[string, DirectorySignature]> {\n try {\n const stat = await fs.stat(path.join(pmRoot, folder));\n return [\n folder,\n {\n exists: true,\n mtime_ms: stat.mtimeMs,\n ctime_ms: stat.ctimeMs,\n size: stat.size,\n },\n ];\n } catch {\n return [\n folder,\n { exists: false, mtime_ms: 0, ctime_ms: 0, size: 0 },\n ];\n }\n}\n\nasync function readDirectorySignatures(\n pmRoot: string,\n folders: readonly string[],\n): Promise<DirectorySignatures> {\n return Object.fromEntries(\n await Promise.all(\n folders.map(async (folder) => await readDirectorySignature(pmRoot, folder)),\n ),\n );\n}\n\nfunction directorySignaturesMatch(\n left: DirectorySignatures | undefined,\n right: DirectorySignatures,\n): boolean {\n if (!left || Object.keys(left).length !== Object.keys(right).length) {\n return false;\n }\n return Object.entries(right).every(([folder, signature]) => {\n const previous = left[folder];\n return (\n previous !== undefined &&\n previous.exists === signature.exists &&\n statMatches(\n previous,\n signature.mtime_ms,\n signature.ctime_ms,\n signature.size,\n )\n );\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({\n path: filePath,\n scope: \"project\",\n })) {\n appendWarning(warnings, warning);\n }\n}\n\nfunction selectHeavyMetadata(\n includeCollections: boolean,\n collectionsCached: boolean,\n cachedCollections: CachedCollections | undefined,\n parsedCollections: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (!includeCollections) {\n return undefined;\n }\n return collectionsCached && cachedCollections\n ? cachedCollections.collections\n : parsedCollections;\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(\n filePath,\n context.warnings,\n context.dispatchReadHooks,\n );\n\n const cachedEntry = context.previousEntries[relativePath];\n const metadataCached =\n cachedEntry !== undefined &&\n statMatches(cachedEntry, mtimeMs, ctimeMs, size);\n const cachedBody = context.previousBodies[relativePath];\n const bodyCached =\n cachedBody !== undefined && statMatches(cachedBody, mtimeMs, ctimeMs, size);\n const cachedCollections = context.previousCollections[relativePath];\n const collectionsCached =\n cachedCollections !== undefined &&\n statMatches(cachedCollections, mtimeMs, ctimeMs, size);\n const needRead =\n !metadataCached ||\n (context.includeBody && !bodyCached) ||\n (context.includeCollections && !collectionsCached);\n\n if (!needRead) {\n return {\n mtimeMs,\n ctimeMs,\n size,\n itemFormat,\n lightMetadata: cachedEntry.metadata,\n heavyMetadata: selectHeavyMetadata(\n context.includeCollections,\n collectionsCached,\n cachedCollections,\n undefined,\n ),\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: selectHeavyMetadata(\n context.includeCollections,\n collectionsCached,\n cachedCollections,\n split.heavy,\n ),\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\n ? mergeHeavyMetadata(parts.lightMetadata, parts.heavyMetadata)\n : 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 (\n shouldRecordCachedDocumentCandidate(\n existing?.itemFormat,\n parts.itemFormat,\n context.preferredFormat,\n )\n ) {\n context.state.documentsById.set(metadata.id, {\n candidate,\n itemFormat: parts.itemFormat,\n });\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(\n filePath,\n relativePath,\n context,\n );\n recordCachedDocumentCandidate(filePath, relativePath, context, parts);\n } catch {\n appendWarning(\n context.warnings,\n `item_list_item_read_failed:${folder}/${path.basename(filePath)}`,\n );\n }\n}\n\nfunction selectPreviousMetadataEntries(\n existingCache: CacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedEntry> {\n return existingCache &&\n existingCache.context_fingerprint === contextFingerprint\n ? existingCache.entries\n : {};\n}\n\nfunction selectPreviousBodyEntries(\n existingBodyCache: BodyCacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedBody> {\n return existingBodyCache &&\n existingBodyCache.context_fingerprint === contextFingerprint\n ? existingBodyCache.bodies\n : {};\n}\n\nfunction selectPreviousCollectionEntries(\n existingCollectionsCache: CollectionsCacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedCollections> {\n return existingCollectionsCache &&\n 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<\n string,\n { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }\n >(),\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(\n processCachedDocumentFile(folder, filePath, relativePath, context),\n );\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 directorySignatures: DirectorySignatures;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const metadataDirty =\n params.state.misses.metadata ||\n Object.keys(params.previousEntries).length !==\n Object.keys(params.state.newEntries).length ||\n !directorySignaturesMatch(\n params.existingCache?.directory_signatures,\n params.directorySignatures,\n );\n if (\n !metadataDirty &&\n params.existingCache !== null &&\n params.existingCache.context_fingerprint === params.contextFingerprint\n ) {\n return;\n }\n await persistCache(getCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n directory_signatures: params.directorySignatures,\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 =\n params.state.misses.body ||\n Object.keys(params.previousBodies).length !==\n 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 =\n params.state.misses.collections ||\n Object.keys(params.previousCollections).length !==\n Object.keys(params.state.newCollections).length;\n if (\n !collectionsDirty &&\n params.existingCollectionsCache !== null &&\n params.existingCollectionsCache.context_fingerprint ===\n 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(\n state: DocumentCacheMutableState,\n): CachedDocumentCandidate[] {\n return [...state.documentsById.values()]\n .sort((left, right) =>\n left.candidate.metadata.id.localeCompare(right.candidate.metadata.id),\n )\n .map((entry) => entry.candidate);\n}\n\n/** Documents the list cache options payload exchanged by command, SDK, and package integrations. */\nexport interface ListCacheOptions {\n /** When false, item bodies are neither loaded from nor written to the separate body cache. Metadata-only callers (`pm list`, stats, deps, activity, …) skip the large body cache entirely; only body consumers (search/reindex) pay for it. */\n includeBody?: boolean;\n /** When false, heavy collection fields (comments/notes/learnings/files/tests/ test_runs/docs) are neither loaded from nor written to the separate collections cache, and are absent from the returned metadata. Light-only callers (`pm list` compact, stats, deps, activity, calendar, close) skip the large collections cache entirely. Defaults to true so any caller that does read those fields stays correct. */\n includeCollections?: boolean;\n /** Force canonical item enumeration and stat validation even when a fresh derived index is available. Validation, repair, migration, and equivalence tests use this correctness path. */\n forceSourceScan?: boolean;\n /** Minimum item count required before the directory-signature derived-index fast path is used. Defaults to 10,000 so small workspaces preserve per-file external-edit detection; tests and specialized SDK hosts may lower it explicitly. */\n derivedIndexMinimumItems?: number;\n}\n\nfunction cacheTierMatchesContext(\n envelope: BodyCacheEnvelope | CollectionsCacheEnvelope | null,\n contextFingerprint: string,\n): boolean {\n return envelope?.context_fingerprint === contextFingerprint;\n}\n\nfunction hasEveryDerivedIndexPart(\n keys: readonly string[],\n includeBody: boolean,\n includeCollections: boolean,\n previousBodies: Record<string, CachedBody>,\n previousCollections: Record<string, CachedCollections>,\n): boolean {\n return keys.every(\n (key) =>\n (!includeBody || previousBodies[key] !== undefined) &&\n (!includeCollections || previousCollections[key] !== undefined),\n );\n}\n\nfunction candidatesFromDerivedIndex(params: {\n pmRoot: string;\n preferredFormat: ItemFormat | undefined;\n includeBody: boolean;\n includeCollections: boolean;\n previousEntries: Record<string, CachedEntry>;\n previousBodies: Record<string, CachedBody>;\n previousCollections: Record<string, CachedCollections>;\n}): CachedDocumentCandidate[] {\n const candidatesById = new Map<\n string,\n { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }\n >();\n for (const [relativePath, entry] of Object.entries(params.previousEntries)) {\n const itemFormat = getItemFormatFromPath(relativePath);\n if (!itemFormat) {\n continue;\n }\n const metadata = params.includeCollections\n ? mergeHeavyMetadata(\n entry.metadata,\n params.previousCollections[relativePath]?.collections,\n )\n : entry.metadata;\n const existing = candidatesById.get(metadata.id);\n if (\n shouldRecordCachedDocumentCandidate(\n existing?.itemFormat,\n itemFormat,\n params.preferredFormat,\n )\n ) {\n candidatesById.set(metadata.id, {\n itemFormat,\n candidate: {\n metadata,\n body: params.includeBody\n ? params.previousBodies[relativePath]?.body\n : undefined,\n item_format: itemFormat,\n item_path: path.join(params.pmRoot, relativePath),\n },\n });\n }\n }\n return [...candidatesById.values()]\n .sort((left, right) =>\n left.candidate.metadata.id.localeCompare(right.candidate.metadata.id),\n )\n .map((entry) => entry.candidate);\n}\n\nfunction canUseDerivedIndex(params: {\n forceSourceScan: boolean;\n contextFingerprint: string;\n existingCache: CacheEnvelope | null;\n existingBodyCache: BodyCacheEnvelope | null;\n existingCollectionsCache: CollectionsCacheEnvelope | null;\n directorySignatures: DirectorySignatures;\n entryKeys: readonly string[];\n minimumIndexedItems: number;\n includeBody: boolean;\n includeCollections: boolean;\n previousBodies: Record<string, CachedBody>;\n previousCollections: Record<string, CachedCollections>;\n}): boolean {\n if (\n params.forceSourceScan ||\n hasActiveOnReadHooks() ||\n params.existingCache?.context_fingerprint !== params.contextFingerprint ||\n params.entryKeys.length < params.minimumIndexedItems ||\n !directorySignaturesMatch(\n params.existingCache?.directory_signatures,\n params.directorySignatures,\n )\n ) {\n return false;\n }\n const requiredTiersMatch = [\n !params.includeBody ||\n cacheTierMatchesContext(\n params.existingBodyCache,\n params.contextFingerprint,\n ),\n !params.includeCollections ||\n cacheTierMatchesContext(\n params.existingCollectionsCache,\n params.contextFingerprint,\n ),\n ];\n return (\n requiredTiersMatch.every(Boolean) &&\n hasEveryDerivedIndexPart(\n params.entryKeys,\n params.includeBody,\n params.includeCollections,\n params.previousBodies,\n params.previousCollections,\n )\n );\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(\n preferredFormat,\n typeToFolder,\n schema,\n extensionFieldNames,\n );\n\n const existingCache = await loadCache(pmRoot);\n const previousEntries = selectPreviousMetadataEntries(\n existingCache,\n contextFingerprint,\n );\n\n const existingBodyCache = includeBody ? await loadBodyCache(pmRoot) : null;\n const previousBodies = selectPreviousBodyEntries(\n existingBodyCache,\n contextFingerprint,\n );\n\n const existingCollectionsCache = includeCollections\n ? await loadCollectionsCache(pmRoot)\n : null;\n const previousCollections = selectPreviousCollectionEntries(\n existingCollectionsCache,\n contextFingerprint,\n );\n\n const folders = [...new Set(Object.values(typeToFolder))];\n const directorySignaturesBefore = await readDirectorySignatures(\n pmRoot,\n folders,\n );\n const entryKeys = Object.keys(previousEntries);\n const minimumIndexedItems = Math.max(\n 1,\n Math.floor(\n options.derivedIndexMinimumItems ?? DEFAULT_DERIVED_INDEX_MINIMUM_ITEMS,\n ),\n );\n if (\n canUseDerivedIndex({\n forceSourceScan: options.forceSourceScan === true,\n contextFingerprint,\n existingCache,\n existingBodyCache,\n existingCollectionsCache,\n directorySignatures: directorySignaturesBefore,\n entryKeys,\n minimumIndexedItems,\n includeBody,\n includeCollections,\n previousBodies,\n previousCollections,\n })\n ) {\n return candidatesFromDerivedIndex({\n pmRoot,\n preferredFormat,\n includeBody,\n includeCollections,\n previousEntries,\n previousBodies,\n previousCollections,\n });\n }\n\n const dirResults = await Promise.all(\n folders.map((folder) =>\n readItemDirectoryFiles(pmRoot, folder, warnings),\n ),\n );\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 const directorySignaturesAfter = await readDirectorySignatures(\n pmRoot,\n folders,\n );\n const stableDirectorySignatures = directorySignaturesMatch(\n directorySignaturesBefore,\n directorySignaturesAfter,\n )\n ? directorySignaturesAfter\n : {};\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({\n pmRoot,\n contextFingerprint,\n existingCache,\n previousEntries,\n directorySignatures: stableDirectorySignatures,\n state,\n });\n\n if (includeBody) {\n await persistBodyCacheIfNeeded({\n pmRoot,\n contextFingerprint,\n existingBodyCache,\n previousBodies,\n state,\n });\n }\n\n if (includeCollections) {\n await persistCollectionsCacheIfNeeded({\n pmRoot,\n contextFingerprint,\n existingCollectionsCache,\n previousCollections,\n state,\n });\n }\n\n return sortedCachedDocumentCandidates(state);\n}\n\n/** Implements list all documents cached for the public runtime surface of this module. */\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(\n pmRoot,\n preferredFormat,\n typeToFolder,\n warnings,\n schema,\n {\n includeBody: false,\n },\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(\n pmRoot,\n preferredFormat,\n typeToFolder,\n warnings,\n schema,\n {\n includeBody: false,\n includeCollections: false,\n },\n );\n return candidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n"],"names":[],"mappings":"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","debugId":"9af59769-ef30-5386-a290-593fe42d119f"}
|
|
1
|
+
{"version":3,"file":"item-metadata-cache.js","sources":["core/store/item-metadata-cache.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/store/item-metadata-cache\n *\n * Reads and writes tracker storage with format-aware helpers for the item metadata cache.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport {\n getActiveExtensionRegistrations,\n hasActiveOnReadHooks,\n runActiveOnReadHooks,\n} 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 { acquireLock } from \"../lock/lock.js\";\nimport { ITEM_FILE_EXTENSIONS, getItemFormatFromPath } from \"./paths.js\";\nimport type {\n ItemDocument,\n ItemFormat,\n ItemMetadata,\n RuntimeSchemaSettings,\n} from \"../../types/index.js\";\n\nconst CACHE_VERSION = 8;\n/** Minimum item count at which derived-index mutations use cross-process locking. */\nexport const DEFAULT_DERIVED_INDEX_MINIMUM_ITEMS = 500;\nconst DERIVED_INDEX_LOCK_ID = \"metadata-derived-index\";\nconst CACHE_FILENAME = \"metadata-cache.json\";\nconst BODY_CACHE_FILENAME = \"metadata-cache-bodies.json\";\nconst COLLECTIONS_CACHE_FILENAME = \"metadata-cache-collections.json\";\nconst DELTA_CACHE_FILENAME = \"metadata-cache-delta.json\";\nconst MANIFEST_CACHE_FILENAME = \"metadata-cache-manifest.json\";\n\n/** Heavy \"collection\" item-metadata fields. These arrays dominate the on-disk cache (e.g. a single item's comment thread can be hundreds of KB) yet the hot list path (`pm list`, stats, deps, activity, calendar, close) never reads them. They are stored in a separate collections cache that is parsed only when a caller opts in (`includeCollections`), keeping the always-loaded light cache an order of magnitude smaller and its JSON.parse correspondingly cheaper. */\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 DirectorySignature extends StatSignature {\n exists: boolean;\n}\n\ntype DirectorySignatures = Record<string, DirectorySignature>;\n\ninterface CacheEnvelope {\n version: number;\n context_fingerprint: string;\n source_cursor: string;\n directory_signatures: DirectorySignatures;\n entries: Record<string, CachedEntry>;\n}\n\ninterface BodyCacheEnvelope {\n version: number;\n context_fingerprint: string;\n source_cursor: string;\n bodies: Record<string, CachedBody>;\n}\n\ninterface CollectionsCacheEnvelope {\n version: number;\n context_fingerprint: string;\n source_cursor: string;\n collections: Record<string, CachedCollections>;\n}\n\ninterface DerivedIndexDeltaChange {\n entry: CachedEntry | null;\n body: CachedBody | null;\n collections: CachedCollections | null;\n}\n\ninterface DerivedIndexDeltaEnvelope {\n version: number;\n context_fingerprint: string;\n base_source_cursor: string;\n source_cursor: string;\n directory_signatures: DirectorySignatures;\n changes: Record<string, DerivedIndexDeltaChange>;\n}\n\ninterface DerivedIndexManifest {\n version: number;\n context_fingerprint: string;\n source_cursor: string;\n entry_count: number;\n}\n\n/** Split parsed item-metadata into the light scalar/small fields (everything except the heavy collection arrays) and the heavy collection fields. Only keys that are actually present are moved, so an item without comments stays without comments in both tiers. */\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/** Recombine light metadata with cached heavy collection fields. Key order differs from the on-disk document, but every downstream hash/serialization canonicalizes and sorts keys (`stableStringify`), so the merged record is byte-identical once hashed. */\nfunction mergeHeavyMetadata(\n light: ItemMetadata,\n heavy: Record<string, unknown> | undefined,\n): ItemMetadata {\n if (!heavy || Object.keys(heavy).length === 0) {\n return light;\n }\n return { ...light, ...heavy } as ItemMetadata;\n}\n\n/** Documents the cached document candidate payload exchanged by command, SDK, and package integrations. */\nexport interface CachedDocumentCandidate {\n /** Value that configures or reports metadata for this contract. */\n metadata: ItemMetadata;\n /** Value that configures or reports body for this contract. */\n body?: string;\n /** Value that configures or reports item format for this contract. */\n item_format: ItemFormat;\n /** Filesystem path used for item resolution. */\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\nfunction getDeltaCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", DELTA_CACHE_FILENAME);\n}\n\nfunction getManifestCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", MANIFEST_CACHE_FILENAME);\n}\n\ninterface MemoizedEnvelope {\n signature: StatSignature;\n envelope:\n | CacheEnvelope\n | BodyCacheEnvelope\n | CollectionsCacheEnvelope\n | DerivedIndexDeltaEnvelope\n | DerivedIndexManifest\n | 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>();\nconst projectedBaseCursor = new WeakMap<object, string>();\n\nfunction baseCursorFor(\n envelope: CacheEnvelope | BodyCacheEnvelope | CollectionsCacheEnvelope,\n): string {\n return projectedBaseCursor.get(envelope) ?? envelope.source_cursor;\n}\n\nfunction applyMetadataDelta(\n envelope: CacheEnvelope,\n delta: DerivedIndexDeltaEnvelope,\n): void {\n const baseCursor = baseCursorFor(envelope);\n if (\n delta.base_source_cursor !== baseCursor ||\n envelope.source_cursor === delta.source_cursor\n ) {\n return;\n }\n projectedBaseCursor.set(envelope, baseCursor);\n for (const [relativePath, change] of Object.entries(delta.changes)) {\n if (change.entry) envelope.entries[relativePath] = change.entry;\n else delete envelope.entries[relativePath];\n }\n envelope.directory_signatures = delta.directory_signatures;\n envelope.source_cursor = delta.source_cursor;\n}\n\nfunction applyBodyDelta(\n envelope: BodyCacheEnvelope | null,\n delta: DerivedIndexDeltaEnvelope,\n): void {\n if (!envelope) return;\n const baseCursor = baseCursorFor(envelope);\n if (\n delta.base_source_cursor !== baseCursor ||\n envelope.source_cursor === delta.source_cursor\n ) {\n return;\n }\n projectedBaseCursor.set(envelope, baseCursor);\n for (const [relativePath, change] of Object.entries(delta.changes)) {\n if (change.body) envelope.bodies[relativePath] = change.body;\n else delete envelope.bodies[relativePath];\n }\n envelope.source_cursor = delta.source_cursor;\n}\n\nfunction applyCollectionsDelta(\n envelope: CollectionsCacheEnvelope | null,\n delta: DerivedIndexDeltaEnvelope,\n): void {\n if (!envelope) return;\n const baseCursor = baseCursorFor(envelope);\n if (\n delta.base_source_cursor !== baseCursor ||\n envelope.source_cursor === delta.source_cursor\n ) {\n return;\n }\n projectedBaseCursor.set(envelope, baseCursor);\n for (const [relativePath, change] of Object.entries(delta.changes)) {\n if (change.collections)\n envelope.collections[relativePath] = change.collections;\n else delete envelope.collections[relativePath];\n }\n envelope.source_cursor = delta.source_cursor;\n}\n\nfunction applyDerivedIndexDelta(\n metadata: CacheEnvelope | null,\n bodies: BodyCacheEnvelope | null,\n collections: CollectionsCacheEnvelope | null,\n delta: DerivedIndexDeltaEnvelope | null,\n): void {\n if (\n !metadata ||\n !delta ||\n metadata.context_fingerprint !== delta.context_fingerprint\n ) {\n return;\n }\n applyMetadataDelta(metadata, delta);\n applyBodyDelta(bodies, delta);\n applyCollectionsDelta(collections, delta);\n}\n\nfunction memoizeEnvelope(cachePath: string, entry: MemoizedEnvelope): void {\n if (\n envelopeMemo.size >= ENVELOPE_MEMO_MAX_ENTRIES &&\n !envelopeMemo.has(cachePath)\n ) {\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 (\n memoized &&\n statMatches(memoized.signature, stat.mtimeMs, stat.ctimeMs, stat.size)\n ) {\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: {\n mtime_ms: stat.mtimeMs,\n ctime_ms: stat.ctimeMs,\n size: stat.size,\n },\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 clearItemMetadataEnvelopeMemo(): 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 (\n parsed.version !== CACHE_VERSION ||\n typeof parsed.source_cursor !== \"string\" ||\n typeof parsed.entries !== \"object\" ||\n parsed.entries === null\n ) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadBodyCache(\n pmRoot: string,\n): Promise<BodyCacheEnvelope | null> {\n return await loadEnvelopeMemoized(getBodyCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as BodyCacheEnvelope;\n if (\n parsed.version !== CACHE_VERSION ||\n typeof parsed.source_cursor !== \"string\" ||\n typeof parsed.bodies !== \"object\" ||\n parsed.bodies === null\n ) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadCollectionsCache(\n pmRoot: string,\n): Promise<CollectionsCacheEnvelope | null> {\n return await loadEnvelopeMemoized(getCollectionsCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as CollectionsCacheEnvelope;\n if (\n parsed.version !== CACHE_VERSION ||\n typeof parsed.source_cursor !== \"string\" ||\n typeof parsed.collections !== \"object\" ||\n parsed.collections === null\n ) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadDerivedIndexDelta(pmRoot: string): Promise<{\n envelope: DerivedIndexDeltaEnvelope | null;\n invalid: boolean;\n}> {\n const deltaPath = getDeltaCachePath(pmRoot);\n const envelope = await loadEnvelopeMemoized(deltaPath, (raw) => {\n const parsed = JSON.parse(raw) as DerivedIndexDeltaEnvelope;\n if (\n parsed.version !== CACHE_VERSION ||\n typeof parsed.base_source_cursor !== \"string\" ||\n typeof parsed.source_cursor !== \"string\" ||\n typeof parsed.changes !== \"object\" ||\n parsed.changes === null\n ) {\n return null;\n }\n return parsed;\n });\n if (envelope) return { envelope, invalid: false };\n try {\n await fs.stat(deltaPath);\n return { envelope: null, invalid: true };\n } catch {\n return { envelope: null, invalid: false };\n }\n}\n\nasync function loadDerivedIndexManifest(\n pmRoot: string,\n): Promise<DerivedIndexManifest | null> {\n const manifestPath = getManifestCachePath(pmRoot);\n const manifest = await loadEnvelopeMemoized(manifestPath, (raw) => {\n const parsed = JSON.parse(raw) as DerivedIndexManifest;\n if (\n parsed.version !== CACHE_VERSION ||\n typeof parsed.context_fingerprint !== \"string\" ||\n typeof parsed.source_cursor !== \"string\" ||\n !Number.isInteger(parsed.entry_count) ||\n parsed.entry_count < 0\n ) {\n return null;\n }\n return parsed;\n });\n if (manifest) return manifest;\n try {\n await fs.stat(manifestPath);\n await removeDerivedIndexFiles(pmRoot);\n } catch {\n // Missing manifests are the normal pre-index and small-workspace state.\n }\n return null;\n}\n\nasync function persistCache(\n cachePath: string,\n envelope:\n | CacheEnvelope\n | BodyCacheEnvelope\n | CollectionsCacheEnvelope\n | DerivedIndexDeltaEnvelope\n | DerivedIndexManifest,\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: {\n mtime_ms: stat.mtimeMs,\n ctime_ms: stat.ctimeMs,\n size: stat.size,\n },\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 (\n candidateFormat === preferredFormat && existingFormat !== preferredFormat\n );\n }\n return candidateFormat === \"toon\" && existingFormat !== \"toon\";\n}\n\n/** Decide whether a scanned candidate should be recorded for its item id. An unseen id is always recorded; duplicate ids delegate to the deterministic cross-format preference rule. Keeping the short-circuit in this pure helper makes both outcomes testable without relying on filesystem enumeration or concurrent read completion order. */\nexport function shouldRecordCachedDocumentCandidate(\n existingFormat: ItemFormat | undefined,\n candidateFormat: ItemFormat,\n preferredFormat: ItemFormat | undefined,\n): boolean {\n return (\n existingFormat === undefined ||\n shouldReplaceCachedDocumentCandidate(\n existingFormat,\n candidateFormat,\n preferredFormat,\n )\n );\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(\n signature: StatSignature,\n mtimeMs: number,\n ctimeMs: number,\n size: number,\n): boolean {\n return (\n signature.mtime_ms === mtimeMs &&\n signature.ctime_ms === ctimeMs &&\n signature.size === size\n );\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<\n string,\n { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }\n >;\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 (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code !== \"ENOENT\"\n ) {\n appendWarning(warnings, `item_list_directory_read_failed:${folder}`);\n }\n return { folder, dirPath, files: [] };\n }\n}\n\nasync function readDirectorySignature(\n pmRoot: string,\n folder: string,\n): Promise<[string, DirectorySignature]> {\n try {\n const stat = await fs.stat(path.join(pmRoot, folder));\n return [\n folder,\n {\n exists: true,\n mtime_ms: stat.mtimeMs,\n ctime_ms: stat.ctimeMs,\n size: stat.size,\n },\n ];\n } catch {\n return [folder, { exists: false, mtime_ms: 0, ctime_ms: 0, size: 0 }];\n }\n}\n\nasync function readDirectorySignatures(\n pmRoot: string,\n folders: readonly string[],\n): Promise<DirectorySignatures> {\n return Object.fromEntries(\n await Promise.all(\n folders.map(\n async (folder) => await readDirectorySignature(pmRoot, folder),\n ),\n ),\n );\n}\n\nfunction directorySignaturesMatch(\n left: DirectorySignatures | undefined,\n right: DirectorySignatures,\n): boolean {\n if (!left || Object.keys(left).length !== Object.keys(right).length) {\n return false;\n }\n return Object.entries(right).every(([folder, signature]) => {\n const previous = left[folder];\n return (\n previous !== undefined &&\n previous.exists === signature.exists &&\n statMatches(\n previous,\n signature.mtime_ms,\n signature.ctime_ms,\n signature.size,\n )\n );\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({\n path: filePath,\n scope: \"project\",\n })) {\n appendWarning(warnings, warning);\n }\n}\n\nfunction selectHeavyMetadata(\n includeCollections: boolean,\n collectionsCached: boolean,\n cachedCollections: CachedCollections | undefined,\n parsedCollections: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (!includeCollections) {\n return undefined;\n }\n return collectionsCached && cachedCollections\n ? cachedCollections.collections\n : parsedCollections;\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(\n filePath,\n context.warnings,\n context.dispatchReadHooks,\n );\n\n const cachedEntry = context.previousEntries[relativePath];\n const metadataCached =\n cachedEntry !== undefined &&\n statMatches(cachedEntry, mtimeMs, ctimeMs, size);\n const cachedBody = context.previousBodies[relativePath];\n const bodyCached =\n cachedBody !== undefined && statMatches(cachedBody, mtimeMs, ctimeMs, size);\n const cachedCollections = context.previousCollections[relativePath];\n const collectionsCached =\n cachedCollections !== undefined &&\n statMatches(cachedCollections, mtimeMs, ctimeMs, size);\n const needRead =\n !metadataCached ||\n (context.includeBody && !bodyCached) ||\n (context.includeCollections && !collectionsCached);\n\n if (!needRead) {\n return {\n mtimeMs,\n ctimeMs,\n size,\n itemFormat,\n lightMetadata: cachedEntry.metadata,\n heavyMetadata: selectHeavyMetadata(\n context.includeCollections,\n collectionsCached,\n cachedCollections,\n undefined,\n ),\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: selectHeavyMetadata(\n context.includeCollections,\n collectionsCached,\n cachedCollections,\n split.heavy,\n ),\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\n ? mergeHeavyMetadata(parts.lightMetadata, parts.heavyMetadata)\n : 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 (\n shouldRecordCachedDocumentCandidate(\n existing?.itemFormat,\n parts.itemFormat,\n context.preferredFormat,\n )\n ) {\n context.state.documentsById.set(metadata.id, {\n candidate,\n itemFormat: parts.itemFormat,\n });\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(\n filePath,\n relativePath,\n context,\n );\n recordCachedDocumentCandidate(filePath, relativePath, context, parts);\n } catch {\n appendWarning(\n context.warnings,\n `item_list_item_read_failed:${folder}/${path.basename(filePath)}`,\n );\n }\n}\n\nfunction selectPreviousMetadataEntries(\n existingCache: CacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedEntry> {\n return existingCache &&\n existingCache.context_fingerprint === contextFingerprint\n ? existingCache.entries\n : {};\n}\n\nfunction selectPreviousBodyEntries(\n existingBodyCache: BodyCacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedBody> {\n return existingBodyCache &&\n existingBodyCache.context_fingerprint === contextFingerprint\n ? existingBodyCache.bodies\n : {};\n}\n\nfunction selectPreviousCollectionEntries(\n existingCollectionsCache: CollectionsCacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedCollections> {\n return existingCollectionsCache &&\n 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<\n string,\n { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }\n >(),\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(\n processCachedDocumentFile(folder, filePath, relativePath, context),\n );\n }\n }\n return parseTasks;\n}\n\nasync function persistMetadataCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n sourceCursor: string;\n existingCache: CacheEnvelope | null;\n previousEntries: Record<string, CachedEntry>;\n directorySignatures: DirectorySignatures;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const metadataDirty =\n params.state.misses.metadata ||\n Object.keys(params.previousEntries).length !==\n Object.keys(params.state.newEntries).length ||\n !directorySignaturesMatch(\n params.existingCache?.directory_signatures,\n params.directorySignatures,\n );\n if (\n !metadataDirty &&\n params.existingCache !== null &&\n params.existingCache.context_fingerprint === params.contextFingerprint\n ) {\n return;\n }\n try {\n await persistCache(getCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n source_cursor: params.sourceCursor,\n directory_signatures: params.directorySignatures,\n entries: params.state.newEntries,\n });\n await persistCache(getManifestCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n source_cursor: params.sourceCursor,\n entry_count: Object.keys(params.state.newEntries).length,\n });\n } catch {\n // Cache persistence is best-effort; authoritative item reads rebuild it.\n }\n}\n\nasync function persistBodyCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n sourceCursor: string;\n existingBodyCache: BodyCacheEnvelope | null;\n previousBodies: Record<string, CachedBody>;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const bodyDirty =\n params.state.misses.body ||\n Object.keys(params.previousBodies).length !==\n 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 source_cursor: params.sourceCursor,\n bodies: params.state.newBodies,\n }).catch(() => {});\n}\n\nasync function persistCollectionsCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n sourceCursor: string;\n existingCollectionsCache: CollectionsCacheEnvelope | null;\n previousCollections: Record<string, CachedCollections>;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const collectionsDirty =\n params.state.misses.collections ||\n Object.keys(params.previousCollections).length !==\n Object.keys(params.state.newCollections).length;\n if (\n !collectionsDirty &&\n params.existingCollectionsCache !== null &&\n params.existingCollectionsCache.context_fingerprint ===\n params.contextFingerprint\n ) {\n return;\n }\n await persistCache(getCollectionsCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n source_cursor: params.sourceCursor,\n collections: params.state.newCollections,\n }).catch(() => {});\n}\n\n/** Acquire the cross-process derived-index writer lock when an index exists. */\nexport async function acquireItemMetadataDerivedIndexLock(\n pmRoot: string,\n author: string,\n): Promise<() => Promise<void>> {\n const cache = await loadDerivedIndexManifest(pmRoot);\n if (\n cache === null ||\n cache.entry_count < DEFAULT_DERIVED_INDEX_MINIMUM_ITEMS\n ) {\n return async () => {};\n }\n return acquireLock(\n pmRoot,\n DERIVED_INDEX_LOCK_ID,\n 30,\n author,\n false,\n false,\n 3_000,\n );\n}\n\n/** One authoritative item commit projected into the rebuildable index. */\nexport interface ItemMetadataDerivedIndexMutation {\n /** Tracker root containing the derived cache. */\n pmRoot: string;\n /** Preferred item format folded into the cache schema fingerprint. */\n preferredFormat: ItemFormat | undefined;\n /** Runtime item-type folder mapping. */\n typeToFolder: Record<string, string>;\n /** Runtime schema folded into the cache schema fingerprint. */\n schema: RuntimeSchemaSettings | undefined;\n /** Committed item path, or deleted item path when document is null. */\n itemPath: string;\n /** Previous path removed by a format or type migration. */\n previousItemPath?: string;\n /** Committed document, or null for deletion. */\n document: ItemDocument | null;\n}\n\nfunction relativeIndexPath(pmRoot: string, itemPath: string): string | null {\n const relative = path.relative(pmRoot, itemPath);\n return relative === \"\" ||\n relative === \"..\" ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n ? null\n : relative;\n}\n\nasync function removeDerivedIndexFiles(pmRoot: string): Promise<void> {\n await Promise.all(\n [\n getCachePath(pmRoot),\n getBodyCachePath(pmRoot),\n getCollectionsCachePath(pmRoot),\n getDeltaCachePath(pmRoot),\n getManifestCachePath(pmRoot),\n ].map(async (cachePath) => {\n await fs.rm(cachePath, { force: true });\n envelopeMemo.delete(cachePath);\n }),\n );\n}\n\nasync function createDerivedIndexDeltaChange(params: {\n mutation: ItemMetadataDerivedIndexMutation;\n}): Promise<DerivedIndexDeltaChange> {\n if (params.mutation.document === null) {\n return { entry: null, body: null, collections: null };\n }\n const stat = await fs.stat(params.mutation.itemPath);\n const split = splitHeavyMetadata(params.mutation.document.metadata);\n const signature = {\n mtime_ms: stat.mtimeMs,\n ctime_ms: stat.ctimeMs,\n size: stat.size,\n };\n return {\n entry: {\n ...signature,\n metadata: split.light,\n body_length: params.mutation.document.body.length,\n },\n body: { ...signature, body: params.mutation.document.body },\n collections: {\n ...signature,\n collections: split.heavy,\n },\n };\n}\n\nfunction selectDerivedIndexDeltaChanges(\n delta: DerivedIndexDeltaEnvelope | null,\n contextFingerprint: string,\n baseSourceCursor: string,\n): Record<string, DerivedIndexDeltaChange> {\n return delta?.context_fingerprint === contextFingerprint &&\n delta.base_source_cursor === baseSourceCursor\n ? structuredClone(delta.changes)\n : {};\n}\n\n/**\n * Project one already-committed authoritative item write into every compatible\n * derived-index tier. Callers hold {@link acquireItemMetadataDerivedIndexLock}\n * from before the item write until this function finishes, so independent pm\n * mutations cannot publish a cursor that omits a concurrent write. One small\n * atomic delta carries the shared source cursor and all tier projections, so\n * mutation cost is bounded by changed items instead of total workspace size.\n * Any refresh failure deletes the rebuildable cache so the next read scans.\n */\nexport async function refreshItemMetadataDerivedIndex(\n mutation: ItemMetadataDerivedIndexMutation,\n): Promise<string[]> {\n const relativePath = relativeIndexPath(mutation.pmRoot, mutation.itemPath);\n const previousRelativePath = mutation.previousItemPath\n ? relativeIndexPath(mutation.pmRoot, mutation.previousItemPath)\n : undefined;\n if (relativePath === null || previousRelativePath === null) {\n await removeDerivedIndexFiles(mutation.pmRoot);\n return [\"metadata_derived_index_path_invalidated\"];\n }\n try {\n const contextFingerprint = computeContextFingerprint(\n mutation.preferredFormat,\n mutation.typeToFolder,\n mutation.schema,\n resolveActiveExtensionFieldNames(),\n );\n const existingCache = await loadDerivedIndexManifest(mutation.pmRoot);\n if (\n existingCache === null ||\n existingCache.context_fingerprint !== contextFingerprint\n ) {\n return [];\n }\n const baseSourceCursor = existingCache.source_cursor;\n const delta = await loadDerivedIndexDelta(mutation.pmRoot);\n if (delta.invalid) {\n await removeDerivedIndexFiles(mutation.pmRoot);\n return [\"metadata_derived_index_refresh_failed\"];\n }\n const changes = selectDerivedIndexDeltaChanges(\n delta.envelope,\n contextFingerprint,\n baseSourceCursor,\n );\n if (previousRelativePath !== undefined) {\n changes[previousRelativePath] = {\n entry: null,\n body: null,\n collections: null,\n };\n }\n changes[relativePath] = await createDerivedIndexDeltaChange({ mutation });\n await persistCache(getDeltaCachePath(mutation.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: contextFingerprint,\n base_source_cursor: baseSourceCursor,\n source_cursor: randomUUID(),\n directory_signatures: await readDirectorySignatures(mutation.pmRoot, [\n ...new Set(Object.values(mutation.typeToFolder)),\n ]),\n changes,\n });\n return [];\n } catch {\n await removeDerivedIndexFiles(mutation.pmRoot).catch(() => {});\n return [\"metadata_derived_index_refresh_failed\"];\n }\n}\n\nfunction sortedCachedDocumentCandidates(\n state: DocumentCacheMutableState,\n): CachedDocumentCandidate[] {\n return [...state.documentsById.values()]\n .sort((left, right) =>\n left.candidate.metadata.id.localeCompare(right.candidate.metadata.id),\n )\n .map((entry) => entry.candidate);\n}\n\n/** Documents the list cache options payload exchanged by command, SDK, and package integrations. */\nexport interface ListCacheOptions {\n /** When false, item bodies are neither loaded from nor written to the separate body cache. Metadata-only callers (`pm list`, stats, deps, activity, …) skip the large body cache entirely; only body consumers (search/reindex) pay for it. */\n includeBody?: boolean;\n /** When false, heavy collection fields (comments/notes/learnings/files/tests/ test_runs/docs) are neither loaded from nor written to the separate collections cache, and are absent from the returned metadata. Light-only callers (`pm list` compact, stats, deps, activity, calendar, close) skip the large collections cache entirely. Defaults to true so any caller that does read those fields stays correct. */\n includeCollections?: boolean;\n /** Force canonical item enumeration and stat validation even when a fresh derived index is available. Validation, repair, migration, and equivalence tests use this correctness path. */\n forceSourceScan?: boolean;\n /** Minimum item count required before the directory-signature derived-index fast path is used. Defaults to 500 so small workspaces preserve per-file external-edit detection; tests and specialized SDK hosts may lower it explicitly. */\n derivedIndexMinimumItems?: number;\n}\n\nfunction cacheTierMatchesContext(\n envelope: BodyCacheEnvelope | CollectionsCacheEnvelope | null,\n contextFingerprint: string,\n sourceCursor: string,\n): boolean {\n return (\n envelope?.context_fingerprint === contextFingerprint &&\n envelope.source_cursor === sourceCursor\n );\n}\n\nfunction hasEveryDerivedIndexPart(\n keys: readonly string[],\n includeBody: boolean,\n includeCollections: boolean,\n previousBodies: Record<string, CachedBody>,\n previousCollections: Record<string, CachedCollections>,\n): boolean {\n return keys.every(\n (key) =>\n (!includeBody || previousBodies[key] !== undefined) &&\n (!includeCollections || previousCollections[key] !== undefined),\n );\n}\n\nfunction candidatesFromDerivedIndex(params: {\n pmRoot: string;\n preferredFormat: ItemFormat | undefined;\n includeBody: boolean;\n includeCollections: boolean;\n previousEntries: Record<string, CachedEntry>;\n previousBodies: Record<string, CachedBody>;\n previousCollections: Record<string, CachedCollections>;\n}): CachedDocumentCandidate[] {\n const candidatesById = new Map<\n string,\n { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }\n >();\n for (const [relativePath, entry] of Object.entries(params.previousEntries)) {\n const itemFormat = getItemFormatFromPath(relativePath);\n if (!itemFormat) {\n continue;\n }\n const metadata = params.includeCollections\n ? mergeHeavyMetadata(\n entry.metadata,\n params.previousCollections[relativePath]?.collections,\n )\n : entry.metadata;\n const existing = candidatesById.get(metadata.id);\n if (\n shouldRecordCachedDocumentCandidate(\n existing?.itemFormat,\n itemFormat,\n params.preferredFormat,\n )\n ) {\n candidatesById.set(metadata.id, {\n itemFormat,\n candidate: {\n metadata,\n body: params.includeBody\n ? params.previousBodies[relativePath]?.body\n : undefined,\n item_format: itemFormat,\n item_path: path.join(params.pmRoot, relativePath),\n },\n });\n }\n }\n return [...candidatesById.values()]\n .sort((left, right) =>\n left.candidate.metadata.id.localeCompare(right.candidate.metadata.id),\n )\n .map((entry) => entry.candidate);\n}\n\nfunction canUseDerivedIndex(params: {\n forceSourceScan: boolean;\n contextFingerprint: string;\n existingCache: CacheEnvelope | null;\n existingBodyCache: BodyCacheEnvelope | null;\n existingCollectionsCache: CollectionsCacheEnvelope | null;\n directorySignatures: DirectorySignatures;\n entryKeys: readonly string[];\n minimumIndexedItems: number;\n includeBody: boolean;\n includeCollections: boolean;\n previousBodies: Record<string, CachedBody>;\n previousCollections: Record<string, CachedCollections>;\n}): boolean {\n if (\n params.forceSourceScan ||\n hasActiveOnReadHooks() ||\n params.existingCache?.context_fingerprint !== params.contextFingerprint ||\n params.entryKeys.length < params.minimumIndexedItems ||\n !directorySignaturesMatch(\n params.existingCache?.directory_signatures,\n params.directorySignatures,\n )\n ) {\n return false;\n }\n const requiredTiersMatch = [\n !params.includeBody ||\n cacheTierMatchesContext(\n params.existingBodyCache,\n params.contextFingerprint,\n params.existingCache.source_cursor,\n ),\n !params.includeCollections ||\n cacheTierMatchesContext(\n params.existingCollectionsCache,\n params.contextFingerprint,\n params.existingCache.source_cursor,\n ),\n ];\n return (\n requiredTiersMatch.every(Boolean) &&\n hasEveryDerivedIndexPart(\n params.entryKeys,\n params.includeBody,\n params.includeCollections,\n params.previousBodies,\n params.previousCollections,\n )\n );\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(\n preferredFormat,\n typeToFolder,\n schema,\n extensionFieldNames,\n );\n\n const delta = await loadDerivedIndexDelta(pmRoot);\n if (delta.invalid) await removeDerivedIndexFiles(pmRoot);\n const existingCache = await loadCache(pmRoot);\n const existingBodyCache = includeBody ? await loadBodyCache(pmRoot) : null;\n const existingCollectionsCache = includeCollections\n ? await loadCollectionsCache(pmRoot)\n : null;\n applyDerivedIndexDelta(\n existingCache,\n existingBodyCache,\n existingCollectionsCache,\n delta.envelope,\n );\n const previousEntries = selectPreviousMetadataEntries(\n existingCache,\n contextFingerprint,\n );\n const previousBodies = selectPreviousBodyEntries(\n existingBodyCache,\n contextFingerprint,\n );\n const previousCollections = selectPreviousCollectionEntries(\n existingCollectionsCache,\n contextFingerprint,\n );\n\n const folders = [...new Set(Object.values(typeToFolder))];\n const directorySignaturesBefore = await readDirectorySignatures(\n pmRoot,\n folders,\n );\n const entryKeys = Object.keys(previousEntries);\n const minimumIndexedItems = Math.max(\n 1,\n Math.floor(\n options.derivedIndexMinimumItems ?? DEFAULT_DERIVED_INDEX_MINIMUM_ITEMS,\n ),\n );\n if (\n canUseDerivedIndex({\n forceSourceScan: options.forceSourceScan === true,\n contextFingerprint,\n existingCache,\n existingBodyCache,\n existingCollectionsCache,\n directorySignatures: directorySignaturesBefore,\n entryKeys,\n minimumIndexedItems,\n includeBody,\n includeCollections,\n previousBodies,\n previousCollections,\n })\n ) {\n return candidatesFromDerivedIndex({\n pmRoot,\n preferredFormat,\n includeBody,\n includeCollections,\n previousEntries,\n previousBodies,\n previousCollections,\n });\n }\n\n const dirResults = await Promise.all(\n folders.map((folder) => readItemDirectoryFiles(pmRoot, folder, warnings)),\n );\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 const directorySignaturesAfter = await readDirectorySignatures(\n pmRoot,\n folders,\n );\n const stableDirectorySignatures = directorySignaturesMatch(\n directorySignaturesBefore,\n directorySignaturesAfter,\n )\n ? directorySignaturesAfter\n : {};\n const metadataChanged =\n state.misses.metadata ||\n Object.keys(previousEntries).length !==\n Object.keys(state.newEntries).length ||\n !directorySignaturesMatch(\n existingCache?.directory_signatures,\n stableDirectorySignatures,\n );\n const sourceCursor =\n metadataChanged || existingCache === null\n ? randomUUID()\n : existingCache.source_cursor;\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({\n pmRoot,\n contextFingerprint,\n sourceCursor,\n existingCache,\n previousEntries,\n directorySignatures: stableDirectorySignatures,\n state,\n });\n\n if (includeBody) {\n await persistBodyCacheIfNeeded({\n pmRoot,\n contextFingerprint,\n sourceCursor,\n existingBodyCache,\n previousBodies,\n state,\n });\n }\n\n if (includeCollections) {\n await persistCollectionsCacheIfNeeded({\n pmRoot,\n contextFingerprint,\n sourceCursor,\n existingCollectionsCache,\n previousCollections,\n state,\n });\n }\n\n return sortedCachedDocumentCandidates(state);\n}\n\n/** Implements list all documents cached for the public runtime surface of this module. */\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(\n pmRoot,\n preferredFormat,\n typeToFolder,\n warnings,\n schema,\n {\n includeBody: false,\n },\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(\n pmRoot,\n preferredFormat,\n typeToFolder,\n warnings,\n schema,\n {\n includeBody: false,\n includeCollections: false,\n },\n );\n return candidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n"],"names":[],"mappings":"AAAA;;;;GAIG;;;AACH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,+BAA+B,EAC/B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAQzE,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,qFAAqF;AACrF,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAG,CAAC;AACvD,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AACvD,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAC7C,MAAM,mBAAmB,GAAG,4BAA4B,CAAC;AACzD,MAAM,0BAA0B,GAAG,iCAAiC,CAAC;AACrE,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AACzD,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAE/D,idAAid;AACjd,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU;IACV,OAAO;IACP,WAAW;IACX,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM;CACE,CAAC;AAEX,SAAS,gCAAgC;IACvC,OAAO,+BAA+B,CAAC,+BAA+B,EAAE,CAAC,CAAC;AAC5E,CAAC;AAuED,sQAAsQ;AACtQ,SAAS,kBAAkB,CAAC,QAAsB;IAIhD,MAAM,KAAK,GAAG,EAAE,GAAG,QAAQ,EAA6B,CAAC;IACzD,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACjB,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAqB,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC;AAED,+PAA+P;AAC/P,SAAS,kBAAkB,CACzB,KAAmB,EACnB,KAA0C;IAE1C,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAkB,CAAC;AAChD,CAAC;AAcD,SAAS,yBAAyB,CAChC,eAAuC,EACvC,YAAoC,EACpC,MAAyC,EACzC,mBAAsC;IAEtC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,UAAU,eAAe,IAAI,SAAS,EAAE,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;SAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;SAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,IAAI,CAAC,MAAM,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC;IACrC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,qBAAqB,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;AAC/D,CAAC;AAaD;;;;;;;;;;;;GAYG;AACH,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAC;AACzD,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAkB,CAAC;AAE1D,SAAS,aAAa,CACpB,QAAsE;IAEtE,OAAO,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC;AACrE,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAuB,EACvB,KAAgC;IAEhC,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,IACE,KAAK,CAAC,kBAAkB,KAAK,UAAU;QACvC,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAC9C,CAAC;QACD,OAAO;IACT,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK;YAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;;YAC3D,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IACD,QAAQ,CAAC,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC;IAC3D,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CACrB,QAAkC,EAClC,KAAgC;IAEhC,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,IACE,KAAK,CAAC,kBAAkB,KAAK,UAAU;QACvC,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAC9C,CAAC;QACD,OAAO;IACT,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,IAAI,MAAM,CAAC,IAAI;YAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;;YACxD,OAAO,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IACD,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;AAC/C,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAAyC,EACzC,KAAgC;IAEhC,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,IACE,KAAK,CAAC,kBAAkB,KAAK,UAAU;QACvC,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,EAC9C,CAAC;QACD,OAAO;IACT,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,IAAI,MAAM,CAAC,WAAW;YACpB,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;;YACrD,OAAO,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IACD,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;AAC/C,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAA8B,EAC9B,MAAgC,EAChC,WAA4C,EAC5C,KAAuC;IAEvC,IACE,CAAC,QAAQ;QACT,CAAC,KAAK;QACN,QAAQ,CAAC,mBAAmB,KAAK,KAAK,CAAC,mBAAmB,EAC1D,CAAC;QACD,OAAO;IACT,CAAC;IACD,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,KAAuB;IACjE,IACE,YAAY,CAAC,IAAI,IAAI,yBAAyB;QAC9C,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAC5B,CAAC;QACD,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IACD,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,SAAiB,EACjB,KAAyB;IAEzB,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,IAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,IACE,QAAQ;QACR,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EACtE,CAAC;QACD,gFAAgF;QAChF,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC,QAAa,CAAC;IAChC,CAAC;IACD,IAAI,QAAW,CAAC;IAChB,IAAI,CAAC;QACH,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,IAAS,CAAC;IACvB,CAAC;IACD,eAAe,CAAC,SAAS,EAAE;QACzB,SAAS,EAAE;YACT,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;QACD,QAAQ;KACT,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B;IAC3C,YAAY,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAc;IACrC,OAAO,MAAM,oBAAoB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAChD,IACE,MAAM,CAAC,OAAO,KAAK,aAAa;YAChC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YACxC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClC,MAAM,CAAC,OAAO,KAAK,IAAI,EACvB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,MAAc;IAEd,OAAO,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;QACpD,IACE,MAAM,CAAC,OAAO,KAAK,aAAa;YAChC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YACxC,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YACjC,MAAM,CAAC,MAAM,KAAK,IAAI,EACtB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,MAAc;IAEd,OAAO,MAAM,oBAAoB,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;QAC3D,IACE,MAAM,CAAC,OAAO,KAAK,aAAa;YAChC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YACxC,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;YACtC,MAAM,CAAC,WAAW,KAAK,IAAI,EAC3B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,MAAc;IAIjD,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8B,CAAC;QAC5D,IACE,MAAM,CAAC,OAAO,KAAK,aAAa;YAChC,OAAO,MAAM,CAAC,kBAAkB,KAAK,QAAQ;YAC7C,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YACxC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClC,MAAM,CAAC,OAAO,KAAK,IAAI,EACvB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,MAAc;IAEd,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACvD,IACE,MAAM,CAAC,OAAO,KAAK,aAAa;YAChC,OAAO,MAAM,CAAC,mBAAmB,KAAK,QAAQ;YAC9C,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YACxC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;YACrC,MAAM,CAAC,WAAW,GAAG,CAAC,EACtB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;IAC1E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,SAAiB,EACjB,QAKwB;IAExB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,8EAA8E;IAC9E,+EAA+E;IAC/E,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,eAAe,CAAC,SAAS,EAAE;YACzB,SAAS,EAAE;gBACT,QAAQ,EAAE,IAAI,CAAC,OAAO;gBACtB,QAAQ,EAAE,IAAI,CAAC,OAAO;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;YACD,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oCAAoC,CAClD,cAA0B,EAC1B,eAA2B,EAC3B,eAAuC;IAEvC,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CACL,eAAe,KAAK,eAAe,IAAI,cAAc,KAAK,eAAe,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,KAAK,MAAM,IAAI,cAAc,KAAK,MAAM,CAAC;AACjE,CAAC;AAED,kVAAkV;AAClV,MAAM,UAAU,mCAAmC,CACjD,cAAsC,EACtC,eAA2B,EAC3B,eAAuC;IAEvC,OAAO,CACL,cAAc,KAAK,SAAS;QAC5B,oCAAoC,CAClC,cAAc,EACd,eAAe,EACf,eAAe,CAChB,CACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAA8B,EAAE,OAAe;IACpE,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,SAAwB,EACxB,OAAe,EACf,OAAe,EACf,IAAY;IAEZ,OAAO,CACL,SAAS,CAAC,QAAQ,KAAK,OAAO;QAC9B,SAAS,CAAC,QAAQ,KAAK,OAAO;QAC9B,SAAS,CAAC,IAAI,KAAK,IAAI,CACxB,CAAC;AACJ,CAAC;AA6CD,KAAK,UAAU,sBAAsB,CACnC,MAAc,EACd,MAAc,EACd,QAA8B;IAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACd,KAA2B,CAAC,IAAI,KAAK,QAAQ,EAC9C,CAAC;YACD,aAAa,CAAC,QAAQ,EAAE,mCAAmC,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAc,EACd,MAAc;IAEd,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,OAAO;YACL,MAAM;YACN;gBACE,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI,CAAC,OAAO;gBACtB,QAAQ,EAAE,IAAI,CAAC,OAAO;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,MAAc,EACd,OAA0B;IAE1B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CACT,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAC/D,CACF,CACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAqC,EACrC,KAA0B;IAE1B,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,CACL,QAAQ,KAAK,SAAS;YACtB,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YACpC,WAAW,CACT,QAAQ,EACR,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,IAAI,CACf,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAA8B,EAC9B,WAAoB,EACpB,kBAA2B,EAC3B,cAAuB,EACvB,UAAmB,EACnB,iBAA0B;IAE1B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,kBAAkB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,QAAgB,EAChB,QAA8B,EAC9B,iBAA0B;IAE1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,oBAAoB,CAAC;QAC/C,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS;KACjB,CAAC,EAAE,CAAC;QACH,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,kBAA2B,EAC3B,iBAA0B,EAC1B,iBAAgD,EAChD,iBAAsD;IAEtD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,iBAAiB,IAAI,iBAAiB;QAC3C,CAAC,CAAC,iBAAiB,CAAC,WAAW;QAC/B,CAAC,CAAC,iBAAiB,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,QAAgB,EAChB,YAAoB,EACpB,OAAiC;IAEjC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAe,CAAC;IAEjE,MAAM,+BAA+B,CACnC,QAAQ,EACR,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,iBAAiB,CAC1B,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,cAAc,GAClB,WAAW,KAAK,SAAS;QACzB,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,UAAU,GACd,UAAU,KAAK,SAAS,IAAI,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9E,MAAM,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,iBAAiB,GACrB,iBAAiB,KAAK,SAAS;QAC/B,WAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,QAAQ,GACZ,CAAC,cAAc;QACf,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC;QACpC,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,OAAO;YACP,OAAO;YACP,IAAI;YACJ,UAAU;YACV,aAAa,EAAE,WAAW,CAAC,QAAQ;YACnC,aAAa,EAAE,mBAAmB,CAChC,OAAO,CAAC,kBAAkB,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,CACV;YACD,UAAU,EAAE,WAAW,CAAC,WAAW;YACnC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE;QACpC,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;KACjE,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,uBAAuB,CACrB,OAAO,CAAC,KAAK,CAAC,MAAM,EACpB,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,kBAAkB,EAC1B,cAAc,EACd,UAAU,EACV,iBAAiB,CAClB,CAAC;IACF,OAAO;QACL,OAAO;QACP,OAAO;QACP,IAAI;QACJ,UAAU;QACV,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;QAClE,aAAa,EAAE,mBAAmB,CAChC,OAAO,CAAC,kBAAkB,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,CAAC,KAAK,CACZ;QACD,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;QACzE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACpC,QAAgB,EAChB,YAAoB,EACpB,OAAiC,EACjC,KAA8B;IAE9B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG;QACvC,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,aAAa;QAC7B,WAAW,EAAE,KAAK,CAAC,UAAU;KAC9B,CAAC;IACF,IAAI,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG;YACtC,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG;YAC3C,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,aAAa;SACjC,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB;QACzC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC;QAC9D,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAA4B;QACzC,QAAQ;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,UAAU;QAC7B,SAAS,EAAE,QAAQ;KACpB,CAAC;IACF,IACE,mCAAmC,CACjC,QAAQ,EAAE,UAAU,EACpB,KAAK,CAAC,UAAU,EAChB,OAAO,CAAC,eAAe,CACxB,EACD,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC3C,SAAS;YACT,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,MAAc,EACd,QAAgB,EAChB,YAAoB,EACpB,OAAiC;IAEjC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,uBAAuB,CACzC,QAAQ,EACR,YAAY,EACZ,OAAO,CACR,CAAC;QACF,6BAA6B,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,CACX,OAAO,CAAC,QAAQ,EAChB,8BAA8B,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAClE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACpC,aAAmC,EACnC,kBAA0B;IAE1B,OAAO,aAAa;QAClB,aAAa,CAAC,mBAAmB,KAAK,kBAAkB;QACxD,CAAC,CAAC,aAAa,CAAC,OAAO;QACvB,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,yBAAyB,CAChC,iBAA2C,EAC3C,kBAA0B;IAE1B,OAAO,iBAAiB;QACtB,iBAAiB,CAAC,mBAAmB,KAAK,kBAAkB;QAC5D,CAAC,CAAC,iBAAiB,CAAC,MAAM;QAC1B,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,+BAA+B,CACtC,wBAAyD,EACzD,kBAA0B;IAE1B,OAAO,wBAAwB;QAC7B,wBAAwB,CAAC,mBAAmB,KAAK,kBAAkB;QACnE,CAAC,CAAC,wBAAwB,CAAC,WAAW;QACtC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,+BAA+B;IACtC,OAAO;QACL,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,IAAI,GAAG,EAGnB;QACH,MAAM,EAAE;YACN,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,KAAK;SACnB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,UAAuE,EACvE,OAAiC;IAEjC,MAAM,UAAU,GAAyB,EAAE,CAAC;IAC5C,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,UAAU,EAAE,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7D,UAAU,CAAC,IAAI,CACb,yBAAyB,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,MAQ3C;IACC,MAAM,aAAa,GACjB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;QAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM;YACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM;QAC7C,CAAC,wBAAwB,CACvB,MAAM,CAAC,aAAa,EAAE,oBAAoB,EAC1C,MAAM,CAAC,mBAAmB,CAC3B,CAAC;IACJ,IACE,CAAC,aAAa;QACd,MAAM,CAAC,aAAa,KAAK,IAAI;QAC7B,MAAM,CAAC,aAAa,CAAC,mBAAmB,KAAK,MAAM,CAAC,kBAAkB,EACtE,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAC9C,OAAO,EAAE,aAAa;YACtB,mBAAmB,EAAE,MAAM,CAAC,kBAAkB;YAC9C,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,oBAAoB,EAAE,MAAM,CAAC,mBAAmB;YAChD,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;SACjC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACtD,OAAO,EAAE,aAAa;YACtB,mBAAmB,EAAE,MAAM,CAAC,kBAAkB;YAC9C,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM;SACzD,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,MAOvC;IACC,MAAM,SAAS,GACb,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;QACxB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM;YACvC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAC/C,IACE,CAAC,SAAS;QACV,MAAM,CAAC,iBAAiB,KAAK,IAAI;QACjC,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,KAAK,MAAM,CAAC,kBAAkB,EAC1E,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QAClD,OAAO,EAAE,aAAa;QACtB,mBAAmB,EAAE,MAAM,CAAC,kBAAkB;QAC9C,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS;KAC/B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,+BAA+B,CAAC,MAO9C;IACC,MAAM,gBAAgB,GACpB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW;QAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM;YAC5C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;IACpD,IACE,CAAC,gBAAgB;QACjB,MAAM,CAAC,wBAAwB,KAAK,IAAI;QACxC,MAAM,CAAC,wBAAwB,CAAC,mBAAmB;YACjD,MAAM,CAAC,kBAAkB,EAC3B,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,YAAY,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACzD,OAAO,EAAE,aAAa;QACtB,mBAAmB,EAAE,MAAM,CAAC,kBAAkB;QAC9C,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc;KACzC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,MAAc,EACd,MAAc;IAEd,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACrD,IACE,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,WAAW,GAAG,mCAAmC,EACvD,CAAC;QACD,OAAO,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,WAAW,CAChB,MAAM,EACN,qBAAqB,EACrB,EAAE,EACF,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,CACN,CAAC;AACJ,CAAC;AAoBD,SAAS,iBAAiB,CAAC,MAAc,EAAE,QAAgB;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO,QAAQ,KAAK,EAAE;QACpB,QAAQ,KAAK,IAAI;QACjB,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACzB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,MAAc;IACnD,MAAM,OAAO,CAAC,GAAG,CACf;QACE,YAAY,CAAC,MAAM,CAAC;QACpB,gBAAgB,CAAC,MAAM,CAAC;QACxB,uBAAuB,CAAC,MAAM,CAAC;QAC/B,iBAAiB,CAAC,MAAM,CAAC;QACzB,oBAAoB,CAAC,MAAM,CAAC;KAC7B,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QACxB,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,MAE5C;IACC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG;QAChB,QAAQ,EAAE,IAAI,CAAC,OAAO;QACtB,QAAQ,EAAE,IAAI,CAAC,OAAO;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;IACF,OAAO;QACL,KAAK,EAAE;YACL,GAAG,SAAS;YACZ,QAAQ,EAAE,KAAK,CAAC,KAAK;YACrB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM;SAClD;QACD,IAAI,EAAE,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3D,WAAW,EAAE;YACX,GAAG,SAAS;YACZ,WAAW,EAAE,KAAK,CAAC,KAAK;SACzB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAuC,EACvC,kBAA0B,EAC1B,gBAAwB;IAExB,OAAO,KAAK,EAAE,mBAAmB,KAAK,kBAAkB;QACtD,KAAK,CAAC,kBAAkB,KAAK,gBAAgB;QAC7C,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;QAChC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,QAA0C;IAE1C,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,oBAAoB,GAAG,QAAQ,CAAC,gBAAgB;QACpD,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC;QAC/D,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,YAAY,KAAK,IAAI,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;QAC3D,MAAM,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,yBAAyB,CAClD,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,MAAM,EACf,gCAAgC,EAAE,CACnC,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtE,IACE,aAAa,KAAK,IAAI;YACtB,aAAa,CAAC,mBAAmB,KAAK,kBAAkB,EACxD,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,gBAAgB,GAAG,aAAa,CAAC,aAAa,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,CAAC,uCAAuC,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,OAAO,GAAG,8BAA8B,CAC5C,KAAK,CAAC,QAAQ,EACd,kBAAkB,EAClB,gBAAgB,CACjB,CAAC;QACF,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,CAAC,oBAAoB,CAAC,GAAG;gBAC9B,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;aAClB,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,6BAA6B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1E,MAAM,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACrD,OAAO,EAAE,aAAa;YACtB,mBAAmB,EAAE,kBAAkB;YACvC,kBAAkB,EAAE,gBAAgB;YACpC,aAAa,EAAE,UAAU,EAAE;YAC3B,oBAAoB,EAAE,MAAM,uBAAuB,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACnE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;aACjD,CAAC;YACF,OAAO;SACR,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,uCAAuC,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAgC;IAEhC,OAAO,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;SACrC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CACtE;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAcD,SAAS,uBAAuB,CAC9B,QAA6D,EAC7D,kBAA0B,EAC1B,YAAoB;IAEpB,OAAO,CACL,QAAQ,EAAE,mBAAmB,KAAK,kBAAkB;QACpD,QAAQ,CAAC,aAAa,KAAK,YAAY,CACxC,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAuB,EACvB,WAAoB,EACpB,kBAA2B,EAC3B,cAA0C,EAC1C,mBAAsD;IAEtD,OAAO,IAAI,CAAC,KAAK,CACf,CAAC,GAAG,EAAE,EAAE,CACN,CAAC,CAAC,WAAW,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;QACnD,CAAC,CAAC,kBAAkB,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAClE,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,MAQnC;IACC,MAAM,cAAc,GAAG,IAAI,GAAG,EAG3B,CAAC;IACJ,KAAK,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB;YACxC,CAAC,CAAC,kBAAkB,CAChB,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,WAAW,CACtD;YACH,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjD,IACE,mCAAmC,CACjC,QAAQ,EAAE,UAAU,EACpB,UAAU,EACV,MAAM,CAAC,eAAe,CACvB,EACD,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAC9B,UAAU;gBACV,SAAS,EAAE;oBACT,QAAQ;oBACR,IAAI,EAAE,MAAM,CAAC,WAAW;wBACtB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,IAAI;wBAC3C,CAAC,CAAC,SAAS;oBACb,WAAW,EAAE,UAAU;oBACvB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;iBAClD;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;SAChC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CACtE;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,kBAAkB,CAAC,MAa3B;IACC,IACE,MAAM,CAAC,eAAe;QACtB,oBAAoB,EAAE;QACtB,MAAM,CAAC,aAAa,EAAE,mBAAmB,KAAK,MAAM,CAAC,kBAAkB;QACvE,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,mBAAmB;QACpD,CAAC,wBAAwB,CACvB,MAAM,CAAC,aAAa,EAAE,oBAAoB,EAC1C,MAAM,CAAC,mBAAmB,CAC3B,EACD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,kBAAkB,GAAG;QACzB,CAAC,MAAM,CAAC,WAAW;YACjB,uBAAuB,CACrB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,aAAa,CAAC,aAAa,CACnC;QACH,CAAC,MAAM,CAAC,kBAAkB;YACxB,uBAAuB,CACrB,MAAM,CAAC,wBAAwB,EAC/B,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,aAAa,CAAC,aAAa,CACnC;KACJ,CAAC;IACF,OAAO,CACL,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;QACjC,wBAAwB,CACtB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,mBAAmB,CAC3B,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,MAAc,EACd,eAAuC,EACvC,YAAoC,EACpC,QAA8B,EAC9B,MAAyC,EACzC,UAA4B,EAAE;IAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC;IAClD,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,KAAK,KAAK,CAAC;IAChE,MAAM,mBAAmB,GAAG,gCAAgC,EAAE,CAAC;IAC/D,MAAM,kBAAkB,GAAG,yBAAyB,CAClD,eAAe,EACf,YAAY,EACZ,MAAM,EACN,mBAAmB,CACpB,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO;QAAE,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,MAAM,wBAAwB,GAAG,kBAAkB;QACjD,CAAC,CAAC,MAAM,oBAAoB,CAAC,MAAM,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC;IACT,sBAAsB,CACpB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,CAAC,QAAQ,CACf,CAAC;IACF,MAAM,eAAe,GAAG,6BAA6B,CACnD,aAAa,EACb,kBAAkB,CACnB,CAAC;IACF,MAAM,cAAc,GAAG,yBAAyB,CAC9C,iBAAiB,EACjB,kBAAkB,CACnB,CAAC;IACF,MAAM,mBAAmB,GAAG,+BAA+B,CACzD,wBAAwB,EACxB,kBAAkB,CACnB,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,yBAAyB,GAAG,MAAM,uBAAuB,CAC7D,MAAM,EACN,OAAO,CACR,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAClC,CAAC,EACD,IAAI,CAAC,KAAK,CACR,OAAO,CAAC,wBAAwB,IAAI,mCAAmC,CACxE,CACF,CAAC;IACF,IACE,kBAAkB,CAAC;QACjB,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,IAAI;QACjD,kBAAkB;QAClB,aAAa;QACb,iBAAiB;QACjB,wBAAwB;QACxB,mBAAmB,EAAE,yBAAyB;QAC9C,SAAS;QACT,mBAAmB;QACnB,WAAW;QACX,kBAAkB;QAClB,cAAc;QACd,mBAAmB;KACpB,CAAC,EACF,CAAC;QACD,OAAO,0BAA0B,CAAC;YAChC,MAAM;YACN,eAAe;YACf,WAAW;YACX,kBAAkB;YAClB,eAAe;YACf,cAAc;YACd,mBAAmB;SACpB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAC1E,CAAC;IAEF,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,+BAA+B,EAAE,CAAC;IAChD,MAAM,OAAO,GAA6B;QACxC,MAAM;QACN,eAAe;QACf,QAAQ;QACR,MAAM;QACN,mBAAmB;QACnB,WAAW;QACX,kBAAkB;QAClB,iBAAiB;QACjB,eAAe;QACf,cAAc;QACd,mBAAmB;QACnB,KAAK;KACN,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAExE,MAAM,wBAAwB,GAAG,MAAM,uBAAuB,CAC5D,MAAM,EACN,OAAO,CACR,CAAC;IACF,MAAM,yBAAyB,GAAG,wBAAwB,CACxD,yBAAyB,EACzB,wBAAwB,CACzB;QACC,CAAC,CAAC,wBAAwB;QAC1B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,eAAe,GACnB,KAAK,CAAC,MAAM,CAAC,QAAQ;QACrB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM;QACtC,CAAC,wBAAwB,CACvB,aAAa,EAAE,oBAAoB,EACnC,yBAAyB,CAC1B,CAAC;IACJ,MAAM,YAAY,GAChB,eAAe,IAAI,aAAa,KAAK,IAAI;QACvC,CAAC,CAAC,UAAU,EAAE;QACd,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC;IAElC,iFAAiF;IACjF,kEAAkE;IAClE,MAAM,4BAA4B,CAAC;QACjC,MAAM;QACN,kBAAkB;QAClB,YAAY;QACZ,aAAa;QACb,eAAe;QACf,mBAAmB,EAAE,yBAAyB;QAC9C,KAAK;KACN,CAAC,CAAC;IAEH,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,wBAAwB,CAAC;YAC7B,MAAM;YACN,kBAAkB;YAClB,YAAY;YACZ,iBAAiB;YACjB,cAAc;YACd,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,+BAA+B,CAAC;YACpC,MAAM;YACN,kBAAkB;YAClB,YAAY;YACZ,wBAAwB;YACxB,mBAAmB;YACnB,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,eAAuC,EACvC,YAAoC,EACpC,QAA8B,EAC9B,MAAyC;IAEzC,MAAM,UAAU,GAAG,MAAM,+BAA+B,CACtD,MAAM,EACN,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,MAAM,EACN;QACE,WAAW,EAAE,KAAK;KACnB,CACF,CAAC;IACF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACpC,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAc,EACd,eAAuC,EACvC,YAAoC,EACpC,QAA8B,EAC9B,MAAyC;IAEzC,MAAM,UAAU,GAAG,MAAM,+BAA+B,CACtD,MAAM,EACN,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,MAAM,EACN;QACE,WAAW,EAAE,KAAK;QAClB,kBAAkB,EAAE,KAAK;KAC1B,CACF,CAAC;IACF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACpC,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC","debugId":"b956bd21-1ad5-5d38-a03c-fe613b5a8aab"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Reads and writes tracker storage with format-aware helpers for Item Store.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
7
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d3ae3183-69f2-5329-a5a8-f17ee29b4a5f")}catch(e){}}();
|
|
8
8
|
import fs from "node:fs/promises";
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import { getActiveExtensionRegistrations, projectAfterCommandItemSnapshot, recordAfterCommandAffectedItem, runActiveOnReadHooks, runActiveOnWriteHooks, runActiveServiceOverride, } from "../extensions/index.js";
|
|
@@ -19,7 +19,7 @@ import { resolveItemTypeRegistry } from "../item/type-registry.js";
|
|
|
19
19
|
import { acquireLock } from "../lock/lock.js";
|
|
20
20
|
import { writeFileAtomic } from "../fs/fs-utils.js";
|
|
21
21
|
import { normalizeItemId, normalizeRawItemId } from "../item/id.js";
|
|
22
|
-
import { listAllDocumentCandidatesCached, listAllDocumentsCached, listAllDocumentsCachedLight, } from "./item-metadata-cache.js";
|
|
22
|
+
import { acquireItemMetadataDerivedIndexLock, listAllDocumentCandidatesCached, listAllDocumentsCached, listAllDocumentsCachedLight, refreshItemMetadataDerivedIndex, } from "./item-metadata-cache.js";
|
|
23
23
|
import { getHistoryPath, getItemPath, ITEM_FILE_EXTENSIONS, } from "./paths.js";
|
|
24
24
|
import { resolveGovernanceKnobs } from "./settings.js";
|
|
25
25
|
import { nowIso } from "../shared/time.js";
|
|
@@ -331,31 +331,49 @@ export async function mutateItem(params) {
|
|
|
331
331
|
contents: serializedAfter,
|
|
332
332
|
});
|
|
333
333
|
const { effectiveTargetItemPath, effectiveSerializedAfter, skipItemWrite } = resolveItemStoreWriteOverride(serviceWriteOverride, targetItemPath, serializedAfter);
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
}
|
|
337
|
-
if (!skipItemWrite && effectiveTargetItemPath !== located.itemPath) {
|
|
338
|
-
await fs.rm(located.itemPath);
|
|
339
|
-
}
|
|
340
|
-
const entry = createHistoryEntry({
|
|
341
|
-
nowIso: afterDocument.metadata.updated_at,
|
|
342
|
-
author: params.author,
|
|
343
|
-
op: params.op,
|
|
344
|
-
before: beforeDocument,
|
|
345
|
-
after: afterDocument,
|
|
346
|
-
message: params.message,
|
|
347
|
-
});
|
|
334
|
+
const releaseDerivedIndexLock = await acquireItemMetadataDerivedIndexLock(params.pmRoot, params.author);
|
|
335
|
+
let derivedIndexWarnings = [];
|
|
348
336
|
try {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
337
|
+
if (!skipItemWrite) {
|
|
338
|
+
await writeFileAtomic(effectiveTargetItemPath, effectiveSerializedAfter);
|
|
339
|
+
}
|
|
340
|
+
if (!skipItemWrite && effectiveTargetItemPath !== located.itemPath) {
|
|
341
|
+
await fs.rm(located.itemPath);
|
|
342
|
+
}
|
|
343
|
+
const entry = createHistoryEntry({
|
|
344
|
+
nowIso: afterDocument.metadata.updated_at,
|
|
345
|
+
author: params.author,
|
|
346
|
+
op: params.op,
|
|
347
|
+
before: beforeDocument,
|
|
348
|
+
after: afterDocument,
|
|
349
|
+
message: params.message,
|
|
357
350
|
});
|
|
358
|
-
|
|
351
|
+
try {
|
|
352
|
+
await appendHistoryEntry(historyPath, entry);
|
|
353
|
+
}
|
|
354
|
+
catch (error) {
|
|
355
|
+
await rollbackMutatedItemWrite({
|
|
356
|
+
skipItemWrite,
|
|
357
|
+
effectiveTargetItemPath,
|
|
358
|
+
originalItemPath: located.itemPath,
|
|
359
|
+
originalRaw,
|
|
360
|
+
});
|
|
361
|
+
throw error;
|
|
362
|
+
}
|
|
363
|
+
if (!skipItemWrite) {
|
|
364
|
+
derivedIndexWarnings = await refreshItemMetadataDerivedIndex({
|
|
365
|
+
pmRoot: params.pmRoot,
|
|
366
|
+
preferredFormat: params.settings.item_format,
|
|
367
|
+
typeToFolder,
|
|
368
|
+
schema: params.settings.schema,
|
|
369
|
+
itemPath: effectiveTargetItemPath,
|
|
370
|
+
previousItemPath: located.itemPath,
|
|
371
|
+
document: afterDocument,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
finally {
|
|
376
|
+
await releaseDerivedIndexLock();
|
|
359
377
|
}
|
|
360
378
|
const hookWarnings = [
|
|
361
379
|
...(await runActiveOnWriteHooks({
|
|
@@ -398,6 +416,7 @@ export async function mutateItem(params) {
|
|
|
398
416
|
...(mutation.warnings ?? []),
|
|
399
417
|
...historyPolicy.warnings,
|
|
400
418
|
...serviceWriteOverride.warnings,
|
|
419
|
+
...derivedIndexWarnings,
|
|
401
420
|
...hookWarnings,
|
|
402
421
|
],
|
|
403
422
|
};
|
|
@@ -479,17 +498,34 @@ export async function deleteItem(params) {
|
|
|
479
498
|
],
|
|
480
499
|
};
|
|
481
500
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
}
|
|
501
|
+
const releaseDerivedIndexLock = await acquireItemMetadataDerivedIndexLock(params.pmRoot, params.author);
|
|
502
|
+
let derivedIndexWarnings = [];
|
|
485
503
|
try {
|
|
486
|
-
await appendHistoryEntry(historyPath, historyEntry);
|
|
487
|
-
}
|
|
488
|
-
catch (error) {
|
|
489
504
|
if (!skipDelete) {
|
|
490
|
-
await
|
|
505
|
+
await fs.rm(effectiveItemPath);
|
|
491
506
|
}
|
|
492
|
-
|
|
507
|
+
try {
|
|
508
|
+
await appendHistoryEntry(historyPath, historyEntry);
|
|
509
|
+
}
|
|
510
|
+
catch (error) {
|
|
511
|
+
if (!skipDelete) {
|
|
512
|
+
await writeFileAtomic(effectiveItemPath, originalRaw);
|
|
513
|
+
}
|
|
514
|
+
throw error;
|
|
515
|
+
}
|
|
516
|
+
if (!skipDelete) {
|
|
517
|
+
derivedIndexWarnings = await refreshItemMetadataDerivedIndex({
|
|
518
|
+
pmRoot: params.pmRoot,
|
|
519
|
+
preferredFormat: params.settings.item_format,
|
|
520
|
+
typeToFolder: prepared.typeToFolder,
|
|
521
|
+
schema: params.settings.schema,
|
|
522
|
+
itemPath: effectiveItemPath,
|
|
523
|
+
document: null,
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
finally {
|
|
528
|
+
await releaseDerivedIndexLock();
|
|
493
529
|
}
|
|
494
530
|
const hookWarnings = [
|
|
495
531
|
...(await runActiveOnWriteHooks({
|
|
@@ -528,6 +564,7 @@ export async function deleteItem(params) {
|
|
|
528
564
|
...parseWarnings,
|
|
529
565
|
...historyPolicy.warnings,
|
|
530
566
|
...serviceDeleteOverride.warnings,
|
|
567
|
+
...derivedIndexWarnings,
|
|
531
568
|
...hookWarnings,
|
|
532
569
|
],
|
|
533
570
|
};
|
|
@@ -537,4 +574,4 @@ export async function deleteItem(params) {
|
|
|
537
574
|
}
|
|
538
575
|
}
|
|
539
576
|
//# sourceMappingURL=item-store.js.map
|
|
540
|
-
//# debugId=
|
|
577
|
+
//# debugId=d3ae3183-69f2-5329-a5a8-f17ee29b4a5f
|