@unbrained/pm-cli 2026.7.19 → 2026.7.20
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/AGENTS.md +2 -0
- package/CHANGELOG.md +36 -0
- package/dist/cli/commands/append.js +13 -6
- package/dist/cli/commands/append.js.map +1 -1
- package/dist/cli/commands/calendar.d.ts +1 -1
- package/dist/cli/commands/calendar.js +2 -2
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/comments.js +2 -5
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.js +11 -3
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/context.d.ts +1 -1
- package/dist/cli/commands/context.js +2 -2
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.js +4 -3
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/copy.js +5 -3
- package/dist/cli/commands/copy.js.map +1 -1
- package/dist/cli/commands/create.d.ts +3 -1
- package/dist/cli/commands/create.js +5 -3
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/merge.d.ts +8 -0
- package/dist/cli/commands/merge.js +12 -0
- package/dist/cli/commands/merge.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +1 -1
- package/dist/cli/commands/plan.js +2 -2
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/update-many.d.ts +5 -0
- package/dist/cli/commands/update-many.js +81 -6
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +5 -1
- package/dist/cli/commands/update.js +50 -4
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/register-list-query.js +14 -2
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +61 -2
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +5 -3
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/registration-helpers.js +4 -2
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/bundle-manifest.json +365 -333
- package/dist/cli-bundle/chunks/{append-MBXHNWSX.js → append-E6V54WOQ.js} +5 -5
- package/dist/cli-bundle/chunks/append-NNJ3EFIT.js +11 -0
- package/dist/cli-bundle/chunks/{chunk-M4B4RK4J.js → chunk-2BO4CA46.js} +14 -238
- package/dist/cli-bundle/chunks/{chunk-M4B4RK4J.js.map → chunk-2BO4CA46.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-MQOSMBWV.js → chunk-3AO5VSDR.js} +25 -6
- package/dist/cli-bundle/chunks/chunk-3AO5VSDR.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-ODEIDKGW.js → chunk-3LPFHE3P.js} +596 -154
- package/dist/cli-bundle/chunks/chunk-3LPFHE3P.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-YGEA4CLH.js → chunk-3MCTMJXI.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-N7FCFJ76.js → chunk-3P7UJQOX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7B7IHMLH.js → chunk-3VY6MIEO.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-3EZZTFL2.js → chunk-4F6BWJ4J.js} +51 -43
- package/dist/cli-bundle/chunks/chunk-4F6BWJ4J.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VA3H7VVC.js → chunk-4L23AGQ7.js} +9 -7
- package/dist/cli-bundle/chunks/chunk-4L23AGQ7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5S6IZXK7.js → chunk-4U4Z6AHI.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-UOIFZ66L.js → chunk-4XGJLADW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-SUNZKVAH.js → chunk-5IZJWSDB.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-QQ77W23U.js → chunk-5NTE36LD.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-EVAN5VJA.js → chunk-5OK4UGFV.js} +5 -8
- package/dist/cli-bundle/chunks/{chunk-EVAN5VJA.js.map → chunk-5OK4UGFV.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-H3YKUVDR.js → chunk-5UX66S6U.js} +26 -7
- package/dist/cli-bundle/chunks/chunk-5UX66S6U.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KGPLSHJD.js → chunk-6C2ZZX5Z.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-Q5NHJ6RO.js → chunk-6JUTHVQS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NTS2RKHN.js → chunk-6VIJ7UA5.js} +15 -15
- package/dist/cli-bundle/chunks/{chunk-BBGR4FKQ.js → chunk-6XMUURSS.js} +6 -6
- package/dist/cli-bundle/chunks/chunk-6XMUURSS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XVB6BATY.js → chunk-72LQ4TKV.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WCBB6VI3.js → chunk-7AVEY74G.js} +8 -5
- package/dist/cli-bundle/chunks/chunk-7AVEY74G.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YG56M3NE.js → chunk-7DOJC3HS.js} +8 -8
- package/dist/cli-bundle/chunks/chunk-7DOJC3HS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KZ5AC6B5.js → chunk-7WCE6Y64.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VQOG2ETB.js → chunk-AF2CCM5U.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-P24ZU5QV.js → chunk-AOEOYL3S.js} +49 -12
- package/dist/cli-bundle/chunks/chunk-AOEOYL3S.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BZKE2O5V.js → chunk-BKIAH72N.js} +8 -6
- package/dist/cli-bundle/chunks/chunk-BKIAH72N.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RWAIRGBC.js → chunk-C3KD7U3T.js} +12 -243
- package/dist/cli-bundle/chunks/chunk-C3KD7U3T.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-CFHAODHQ.js +334 -0
- package/dist/cli-bundle/chunks/chunk-CFHAODHQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-TELI67UP.js → chunk-CQTQKUUV.js} +6 -9
- package/dist/cli-bundle/chunks/{chunk-TELI67UP.js.map → chunk-CQTQKUUV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ZUCBPXNA.js → chunk-D6NXDNP3.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-D6NXDNP3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EAV3P54W.js → chunk-DAQ45GCS.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-6V4T4RD3.js → chunk-DVDBQA3B.js} +79 -22
- package/dist/cli-bundle/chunks/chunk-DVDBQA3B.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-E6LEMURX.js +249 -0
- package/dist/cli-bundle/chunks/chunk-E6LEMURX.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-ZF52NVRT.js → chunk-E7ICD63T.js} +131 -179
- package/dist/cli-bundle/chunks/chunk-E7ICD63T.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RX53WHFI.js → chunk-EJDGV4GR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-IXG5CMBR.js → chunk-FDHPAVVB.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-KAE727L2.js → chunk-FSRHYUDA.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FSRHYUDA.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-46Z6FAVP.js → chunk-G3COA6GS.js} +51 -43
- package/dist/cli-bundle/chunks/chunk-G3COA6GS.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-A4FVWFZY.js → chunk-GFQP7HAZ.js} +8 -6
- package/dist/cli-bundle/chunks/chunk-GFQP7HAZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-2XPDCXK5.js → chunk-GIQSU6S2.js} +6 -6
- package/dist/cli-bundle/chunks/chunk-GIQSU6S2.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-V4QHAMI5.js → chunk-GROYI4RB.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-77XFQRTD.js → chunk-GSJSM5BJ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QYGK2XQ3.js → chunk-GTLCVJOE.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VSQE43NO.js → chunk-GV2262OF.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-N2TEEOXJ.js → chunk-GVI6FAFG.js} +8 -6
- package/dist/cli-bundle/chunks/chunk-GVI6FAFG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A5EQPNV7.js → chunk-GVT754PX.js} +44 -3
- package/dist/cli-bundle/chunks/chunk-GVT754PX.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-Y2VSGFT4.js → chunk-HB3P4M52.js} +22 -7
- package/dist/cli-bundle/chunks/chunk-HB3P4M52.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-STBCBDKF.js → chunk-HCEBZNC3.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-EEECAV5M.js → chunk-HEWM6CEN.js} +80 -25
- package/dist/cli-bundle/chunks/chunk-HEWM6CEN.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GKCEEXMA.js → chunk-HQ3SB4CN.js} +21 -6
- package/dist/cli-bundle/chunks/{chunk-GKCEEXMA.js.map → chunk-HQ3SB4CN.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-U6RYD446.js → chunk-HRW7GF6T.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-D35WYXWC.js → chunk-HYW67VJ5.js} +6 -3
- package/dist/cli-bundle/chunks/chunk-HYW67VJ5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OKWJUL6F.js → chunk-I577UHC7.js} +16 -9
- package/dist/cli-bundle/chunks/{chunk-OKWJUL6F.js.map → chunk-I577UHC7.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-XDWXPG2E.js → chunk-IAQE32BI.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-66SRNEBK.js → chunk-IJNK6WW2.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-INSTSQNZ.js +623 -0
- package/dist/cli-bundle/chunks/chunk-INSTSQNZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A3GAQLBH.js → chunk-IX677TRO.js} +75 -12
- package/dist/cli-bundle/chunks/chunk-IX677TRO.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RLLOZAM2.js → chunk-IY6VZ3IW.js} +29 -8
- package/dist/cli-bundle/chunks/chunk-IY6VZ3IW.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SVAWG7EE.js → chunk-J4FBIFU6.js} +45 -4
- package/dist/cli-bundle/chunks/chunk-J4FBIFU6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AGEBQRBG.js → chunk-JAPE62Y5.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-UWAQI3B7.js → chunk-JGUKMMRS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UU6EP25G.js → chunk-JH2ZSLO3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GRDK25BN.js → chunk-JHJSFOAM.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-FQO5THHM.js → chunk-JM6YAXTR.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-E7KBMWEF.js → chunk-JSLT7WVE.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FIUTBFC6.js → chunk-K4CI6Y45.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IEMXESIS.js → chunk-KSPWRNVP.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-3QNUDDY2.js → chunk-KZEANWJS.js} +14 -12
- package/dist/cli-bundle/chunks/{chunk-3QNUDDY2.js.map → chunk-KZEANWJS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BFJP4VYC.js → chunk-L7BH7IWU.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-2UCG5H6B.js → chunk-LPEYZRUR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-FQF6VVPH.js → chunk-MYSS5H2A.js} +9 -7
- package/dist/cli-bundle/chunks/{chunk-FQF6VVPH.js.map → chunk-MYSS5H2A.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-IR3GOO6E.js → chunk-NHT3F4WZ.js} +15 -15
- package/dist/cli-bundle/chunks/{chunk-6BNV3G6C.js → chunk-NLR32VFS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BDC4TW4B.js → chunk-OV7MSW3I.js} +15 -13
- package/dist/cli-bundle/chunks/chunk-OV7MSW3I.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-EI3UIMZM.js → chunk-OWXOPDHD.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-P7JTWYLH.js +246 -0
- package/dist/cli-bundle/chunks/chunk-P7JTWYLH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AQUNTB7G.js → chunk-PEQGTJ5Q.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QFG4MB7P.js → chunk-POG76WWZ.js} +28 -7
- package/dist/cli-bundle/chunks/chunk-POG76WWZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MI3346YW.js → chunk-QANSTTC7.js} +129 -170
- package/dist/cli-bundle/chunks/chunk-QANSTTC7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-T6MOTLOJ.js → chunk-QJKL5PHS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SBW7EQC4.js → chunk-QLZ643FM.js} +76 -13
- package/dist/cli-bundle/chunks/chunk-QLZ643FM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XKVHL3MB.js → chunk-QWRVBJ4D.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-R3EWPG4A.js +106 -0
- package/dist/cli-bundle/chunks/chunk-R3EWPG4A.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-R5U2VZ3K.js +344 -0
- package/dist/cli-bundle/chunks/chunk-R5U2VZ3K.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VFA5EIEN.js → chunk-R7QV7ICM.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-NPEYH6CE.js → chunk-RDV4ZFYS.js} +12 -10
- package/dist/cli-bundle/chunks/{chunk-NPEYH6CE.js.map → chunk-RDV4ZFYS.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-K2L6FZBX.js → chunk-RJO3YAFM.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-YIC5NGXF.js → chunk-RMF7LMBS.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-YIC5NGXF.js.map → chunk-RMF7LMBS.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MRXAHR4B.js → chunk-RZJLNXFG.js} +50 -13
- package/dist/cli-bundle/chunks/chunk-RZJLNXFG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DJAGYYCQ.js → chunk-SC2HMDGB.js} +19 -3
- package/dist/cli-bundle/chunks/chunk-SC2HMDGB.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SGJB6PXA.js → chunk-SF3DT5HJ.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-SG74J6MV.js +604 -0
- package/dist/cli-bundle/chunks/chunk-SG74J6MV.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-Q3K5XPAQ.js → chunk-SR3JOATZ.js} +18 -2
- package/dist/cli-bundle/chunks/chunk-SR3JOATZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DUDLSQFG.js → chunk-SSKOQNMS.js} +14 -12
- package/dist/cli-bundle/chunks/{chunk-DUDLSQFG.js.map → chunk-SSKOQNMS.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-UNNCT5QY.js → chunk-SZVB53Y3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JBW2S2C6.js → chunk-T44FMVRL.js} +613 -157
- package/dist/cli-bundle/chunks/chunk-T44FMVRL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GFZB5CLP.js → chunk-T6PPNM7V.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UE7LK3RE.js → chunk-THAOZG4U.js} +9 -7
- package/dist/cli-bundle/chunks/chunk-THAOZG4U.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-IGBBTPM5.js → chunk-TOBGV45Y.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-TOBGV45Y.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-W6IEJXNC.js → chunk-TVYYO5A7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-TYHJDFYW.js +109 -0
- package/dist/cli-bundle/chunks/chunk-TYHJDFYW.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DOASIOQR.js → chunk-UQLXSG72.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IDUTGRDM.js → chunk-URXVHN3L.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-URXVHN3L.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7CHWLT2J.js → chunk-UVN66B3M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-Q6JPYR7I.js → chunk-UX6SSO2I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JPWUZOMR.js → chunk-UZDQXNUB.js} +75 -20
- package/dist/cli-bundle/chunks/chunk-UZDQXNUB.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OK7VSX3N.js → chunk-UZLJOEAC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4PSJVGRE.js → chunk-VDO2JMD4.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-IRJ6F23W.js → chunk-VQIHNHMJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FQODDTE7.js → chunk-WUVEBQW6.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-FQODDTE7.js.map → chunk-WUVEBQW6.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-Q4PSG2GV.js → chunk-WVA4DVNV.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-Q4PSG2GV.js.map → chunk-WVA4DVNV.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-4M6RZJXF.js → chunk-WWNL6WMH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-WWNL6WMH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-3KPNOZOH.js → chunk-X6K5XTTN.js} +78 -21
- package/dist/cli-bundle/chunks/chunk-X6K5XTTN.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-G33XIMRT.js → chunk-XJF7CDNH.js} +17 -10
- package/dist/cli-bundle/chunks/{chunk-G33XIMRT.js.map → chunk-XJF7CDNH.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-AR24KW26.js → chunk-YBT7O4KT.js} +17 -112
- package/dist/cli-bundle/chunks/chunk-YBT7O4KT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CZA2DXCV.js → chunk-YQQNAKW3.js} +17 -105
- package/dist/cli-bundle/chunks/chunk-YQQNAKW3.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OKPZDH43.js → chunk-YQWCZ5AC.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-OKPZDH43.js.map → chunk-YQWCZ5AC.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LT5UWU7H.js → chunk-ZOJ3LR7O.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3HSRP6T2.js → chunk-ZOY5K4D3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-XXWDEQ6O.js → chunk-ZV2NTVMJ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UW6HCMP2.js → chunk-ZYPFOO3L.js} +9 -9
- package/dist/cli-bundle/chunks/close-O5QVZ6ET.js +12 -0
- package/dist/cli-bundle/chunks/{close-7NWA3GLA.js → close-QEMOYZN3.js} +5 -5
- package/dist/cli-bundle/chunks/close-many-SDA426VT.js +24 -0
- package/dist/cli-bundle/chunks/{close-many-YALQ7AXS.js → close-many-UTZANOCQ.js} +15 -14
- package/dist/cli-bundle/chunks/{comments-SQIQ5WYR.js → comments-LZN6FXXC.js} +7 -7
- package/dist/cli-bundle/chunks/comments-VBQ345ND.js +13 -0
- package/dist/cli-bundle/chunks/{copy-YDAMENCP.js → copy-DKTSSCK7.js} +4 -4
- package/dist/cli-bundle/chunks/copy-M7DDI6LS.js +9 -0
- package/dist/cli-bundle/chunks/{create-JSL6CXU3.js → create-GG4RBCGC.js} +11 -11
- package/dist/cli-bundle/chunks/create-JBC5KUW6.js +29 -0
- package/dist/cli-bundle/chunks/{delete-IGVOZEU2.js → delete-LCS3VPDH.js} +4 -4
- package/dist/cli-bundle/chunks/delete-MD7YXQLH.js +10 -0
- package/dist/cli-bundle/chunks/{deps-BQAXUQAK.js → deps-DELOO4TL.js} +6 -6
- package/dist/cli-bundle/chunks/{deps-CBPPSS6J.js → deps-FI4O6NQS.js} +6 -6
- package/dist/cli-bundle/chunks/docs-2UYBP5D6.js +14 -0
- package/dist/cli-bundle/chunks/{docs-NS2AZWCN.js → docs-6Z2MP526.js} +6 -6
- package/dist/cli-bundle/chunks/{files-XUUBQ76I.js → files-HEUGSJZL.js} +6 -6
- package/dist/cli-bundle/chunks/{files-PVWEPT5J.js → files-HKEAN5MA.js} +6 -6
- package/dist/cli-bundle/chunks/{focus-DHBHKK3E.js → focus-7SOUT5PZ.js} +5 -5
- package/dist/cli-bundle/chunks/focus-DRQ6FQH6.js +10 -0
- package/dist/cli-bundle/chunks/history-compact-65YVN5DB.js +17 -0
- package/dist/cli-bundle/chunks/{history-compact-3TNPYVFG.js → history-compact-7NDVP3PT.js} +7 -6
- package/dist/cli-bundle/chunks/{history-redact-KKFDICCF.js → history-redact-7YBL4XSG.js} +5 -4
- package/dist/cli-bundle/chunks/{history-redact-ELRL73XN.js → history-redact-IZGNJBU4.js} +5 -4
- package/dist/cli-bundle/chunks/{history-repair-J7WKZFAG.js → history-repair-7M4PYQUH.js} +8 -6
- package/dist/cli-bundle/chunks/history-repair-GNGETJLI.js +18 -0
- package/dist/cli-bundle/chunks/learnings-3YXDRWFT.js +13 -0
- package/dist/cli-bundle/chunks/{learnings-X4D6JCCG.js → learnings-ALC6IMNL.js} +7 -7
- package/dist/cli-bundle/chunks/notes-7JMLQ447.js +13 -0
- package/dist/cli-bundle/chunks/{notes-UQC6VS6N.js → notes-JFCLTC5C.js} +7 -7
- package/dist/cli-bundle/chunks/plan-KOIPWVOZ.js +26 -0
- package/dist/cli-bundle/chunks/{plan-5GKRBJJO.js → plan-T3XB3WTK.js} +12 -12
- package/dist/cli-bundle/chunks/{profile-5PQAPCLF.js → profile-OILJHKUW.js} +12 -11
- package/dist/cli-bundle/chunks/{profile-CW4BD3FO.js → profile-RJXA7PGS.js} +12 -11
- package/dist/cli-bundle/chunks/{register-list-query-PHIPDFP2.js → register-list-query-CFVG75P3.js} +30 -21
- package/dist/cli-bundle/chunks/{register-list-query-PHIPDFP2.js.map → register-list-query-CFVG75P3.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-list-query-HTDQE6VI.js → register-list-query-E7UVY4TN.js} +29 -20
- package/dist/cli-bundle/chunks/{register-list-query-HTDQE6VI.js.map → register-list-query-E7UVY4TN.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-BLEWM5I6.js → register-mutation-4VJTXBZW.js} +86 -32
- package/dist/cli-bundle/chunks/register-mutation-4VJTXBZW.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-OTYHR7J6.js → register-mutation-IQ55E25C.js} +78 -33
- package/dist/cli-bundle/chunks/register-mutation-IQ55E25C.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-AMCUFYEW.js → register-operations-AR7RMX4W.js} +42 -38
- package/dist/cli-bundle/chunks/register-operations-AR7RMX4W.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-MRLHOZYR.js → register-operations-NOLZGORC.js} +41 -37
- package/dist/cli-bundle/chunks/register-operations-NOLZGORC.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-ZVKTDL4G.js → register-setup-BB77VUEE.js} +17 -16
- package/dist/cli-bundle/chunks/{register-setup-ZVKTDL4G.js.map → register-setup-BB77VUEE.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-setup-N2FOSWAG.js → register-setup-EYZ7VTPZ.js} +15 -14
- package/dist/cli-bundle/chunks/{register-setup-N2FOSWAG.js.map → register-setup-EYZ7VTPZ.js.map} +1 -1
- package/dist/cli-bundle/chunks/restore-L6IAGOD7.js +15 -0
- package/dist/cli-bundle/chunks/{restore-HEQAG6EK.js → restore-ZH65GZFB.js} +7 -6
- package/dist/cli-bundle/chunks/{schema-Q5DAWJ2S.js → schema-4ERWM5QJ.js} +7 -6
- package/dist/cli-bundle/chunks/{schema-MAXAIHEC.js → schema-55DL3Q52.js} +7 -6
- package/dist/cli-bundle/chunks/{update-DWFXXJKP.js → update-FW6FKDOP.js} +15 -15
- package/dist/cli-bundle/chunks/update-TJHSPRPT.js +23 -0
- package/dist/cli-bundle/chunks/update-many-NNALYQCN.js +35 -0
- package/dist/cli-bundle/chunks/update-many-PWXX5WHO.js +39 -0
- package/dist/cli-bundle/main.js +62 -59
- package/dist/cli-bundle/main.js.map +1 -1
- package/dist/cli-bundle/sdk-runtime.js +62 -59
- package/dist/cli-bundle/sdk-testing.js +8 -8
- package/dist/cli-bundle/sdk.js +327 -57
- package/dist/cli-bundle/sdk.js.map +4 -4
- package/dist/core/config/nested-settings.d.ts +2 -0
- package/dist/core/config/nested-settings.js +18 -2
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/diagnostics/remediation.js +38 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +1 -1
- package/dist/core/extensions/extension-types.js +2 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/item/id.d.ts +19 -2
- package/dist/core/item/id.js +27 -6
- package/dist/core/item/id.js.map +1 -1
- package/dist/core/item/parse.d.ts +7 -0
- package/dist/core/item/parse.js +48 -2
- package/dist/core/item/parse.js.map +1 -1
- package/dist/core/schema/item-types-file.d.ts +2 -2
- package/dist/core/schema/item-types-file.js +2 -2
- package/dist/core/schema/item-types-file.js.map +1 -1
- package/dist/core/schema/runtime-schema.d.ts +3 -3
- package/dist/core/schema/runtime-schema.js +2 -2
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/schema/type-workflows.d.ts +2 -2
- package/dist/core/schema/type-workflows.js +2 -2
- package/dist/core/schema/type-workflows.js.map +1 -1
- package/dist/core/shared/constants.js +5 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +4 -0
- package/dist/core/store/settings-validator.js +8 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +8 -2
- package/dist/core/store/settings.js.map +1 -1
- package/dist/sdk/annotations.js +24 -2
- package/dist/sdk/annotations.js.map +1 -1
- package/dist/sdk/cli-bootstrap.d.ts +1 -1
- package/dist/sdk/cli-bootstrap.js +3 -3
- package/dist/sdk/cli-bootstrap.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +22 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +3 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
- package/dist/sdk/cli-contracts/flag-contracts.js +17 -2
- package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +512 -0
- package/dist/sdk/cli-contracts/tool-option-contracts.js +21 -11
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +13 -3
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -0
- package/dist/sdk/cli-contracts/tool-schema.js +14 -10
- package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
- package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +69 -0
- package/dist/sdk/cli-contracts/typed-action-inputs.js +5 -0
- package/dist/sdk/cli-contracts/typed-action-inputs.js.map +1 -0
- package/dist/sdk/cli-contracts.d.ts +4 -3
- package/dist/sdk/cli-contracts.js +5 -5
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/extension/describe.d.ts +1 -1
- package/dist/sdk/extension/describe.js +2 -2
- package/dist/sdk/extension/describe.js.map +1 -1
- package/dist/sdk/extension/install-runtime.js +5 -3
- package/dist/sdk/extension/install-runtime.js.map +1 -1
- package/dist/sdk/extension.d.ts +2 -2
- package/dist/sdk/extension.js +2 -2
- package/dist/sdk/extension.js.map +1 -1
- package/dist/sdk/governance/gc.d.ts +14 -1
- package/dist/sdk/governance/gc.js +38 -2
- package/dist/sdk/governance/gc.js.map +1 -1
- package/dist/sdk/governance/storage-integrity.d.ts +84 -0
- package/dist/sdk/governance/storage-integrity.js +240 -0
- package/dist/sdk/governance/storage-integrity.js.map +1 -0
- package/dist/sdk/governance/validate.d.ts +3 -1
- package/dist/sdk/governance/validate.js +56 -2
- package/dist/sdk/governance/validate.js.map +1 -1
- package/dist/sdk/history-read.d.ts +1 -1
- package/dist/sdk/history-read.js +2 -2
- package/dist/sdk/history-read.js.map +1 -1
- package/dist/sdk/history-repair.d.ts +36 -0
- package/dist/sdk/history-repair.js +69 -4
- package/dist/sdk/history-repair.js.map +1 -1
- package/dist/sdk/index.d.ts +5 -2
- package/dist/sdk/index.js +5 -2
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/init.js +3 -3
- package/dist/sdk/init.js.map +1 -1
- package/dist/sdk/item-transaction.d.ts +131 -0
- package/dist/sdk/item-transaction.js +280 -0
- package/dist/sdk/item-transaction.js.map +1 -0
- package/dist/sdk/merge/driver.d.ts +75 -0
- package/dist/sdk/merge/driver.js +166 -0
- package/dist/sdk/merge/driver.js.map +1 -0
- package/dist/sdk/merge/index.d.ts +11 -0
- package/dist/sdk/merge/index.js +15 -0
- package/dist/sdk/merge/index.js.map +1 -0
- package/dist/sdk/merge/install.d.ts +90 -0
- package/dist/sdk/merge/install.js +318 -0
- package/dist/sdk/merge/install.js.map +1 -0
- package/dist/sdk/merge/three-way.d.ts +126 -0
- package/dist/sdk/merge/three-way.js +545 -0
- package/dist/sdk/merge/three-way.js.map +1 -0
- package/dist/sdk/query/list.d.ts +19 -2
- package/dist/sdk/query/list.js +5 -2
- package/dist/sdk/query/list.js.map +1 -1
- package/dist/sdk/runtime.d.ts +17 -14
- package/dist/sdk/runtime.js +5 -5
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/schema.d.ts +2 -2
- package/dist/sdk/schema.js +29 -2
- package/dist/sdk/schema.js.map +1 -1
- package/dist/sdk/stats.d.ts +1 -1
- package/dist/sdk/stats.js +2 -2
- package/dist/sdk/stats.js.map +1 -1
- package/dist/sdk/workspace-transaction-gc.d.ts +46 -0
- package/dist/sdk/workspace-transaction-gc.js +155 -0
- package/dist/sdk/workspace-transaction-gc.js.map +1 -0
- package/dist/sdk/workspace.d.ts +28 -4
- package/dist/sdk/workspace.js +61 -15
- package/dist/sdk/workspace.js.map +1 -1
- package/dist/types.d.ts +11 -7
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +58 -47
- package/docs/COMMANDS.md +7 -0
- package/docs/CONFIGURATION.md +2 -0
- package/docs/MERGE_SAFETY.md +99 -0
- package/docs/README.md +1 -0
- package/docs/SDK.md +56 -0
- package/marketplace.json +2 -2
- package/package.json +3 -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-XUYF7NON.js +0 -11
- package/dist/cli-bundle/chunks/chunk-2XPDCXK5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3EZZTFL2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3KPNOZOH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-46Z6FAVP.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4M6RZJXF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6V4T4RD3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-A3GAQLBH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-A4FVWFZY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-A5EQPNV7.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-AR24KW26.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BBGR4FKQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BDC4TW4B.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BZKE2O5V.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-CZA2DXCV.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-D35WYXWC.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DJAGYYCQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EEECAV5M.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-H3YKUVDR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IDUTGRDM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-IGBBTPM5.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JBW2S2C6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JPWUZOMR.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KAE727L2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MI3346YW.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-MQOSMBWV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MRXAHR4B.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-N2TEEOXJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ODEIDKGW.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-P24ZU5QV.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Q3K5XPAQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QFG4MB7P.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-RLLOZAM2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RWAIRGBC.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SBW7EQC4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-SVAWG7EE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UE7LK3RE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-VA3H7VVC.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WCBB6VI3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Y2VSGFT4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YG56M3NE.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ZF52NVRT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZUCBPXNA.js.map +0 -7
- package/dist/cli-bundle/chunks/close-ZZCDDWJT.js +0 -12
- package/dist/cli-bundle/chunks/close-many-QCZHFCON.js +0 -23
- package/dist/cli-bundle/chunks/comments-FMQNYPSZ.js +0 -13
- package/dist/cli-bundle/chunks/copy-GI3RCVZP.js +0 -9
- package/dist/cli-bundle/chunks/create-LXMLYJNM.js +0 -29
- package/dist/cli-bundle/chunks/delete-5DFAXJNI.js +0 -10
- package/dist/cli-bundle/chunks/docs-KCWPLQOV.js +0 -14
- package/dist/cli-bundle/chunks/focus-3EJVFI3D.js +0 -10
- package/dist/cli-bundle/chunks/history-compact-JHYVDYLW.js +0 -16
- package/dist/cli-bundle/chunks/history-repair-REMI7DDI.js +0 -16
- package/dist/cli-bundle/chunks/learnings-O6V5WDCV.js +0 -13
- package/dist/cli-bundle/chunks/notes-ZSZREWZA.js +0 -13
- package/dist/cli-bundle/chunks/plan-EZW2YDDY.js +0 -26
- package/dist/cli-bundle/chunks/register-mutation-BLEWM5I6.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-OTYHR7J6.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-AMCUFYEW.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-MRLHOZYR.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-A55MLFAI.js +0 -14
- package/dist/cli-bundle/chunks/update-5DTSCWVF.js +0 -23
- package/dist/cli-bundle/chunks/update-many-6T4ZLZS7.js +0 -34
- package/dist/cli-bundle/chunks/update-many-MYRK6VBJ.js +0 -38
- /package/dist/cli-bundle/chunks/{append-MBXHNWSX.js.map → append-E6V54WOQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-XUYF7NON.js.map → append-NNJ3EFIT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YGEA4CLH.js.map → chunk-3MCTMJXI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N7FCFJ76.js.map → chunk-3P7UJQOX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7B7IHMLH.js.map → chunk-3VY6MIEO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5S6IZXK7.js.map → chunk-4U4Z6AHI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UOIFZ66L.js.map → chunk-4XGJLADW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SUNZKVAH.js.map → chunk-5IZJWSDB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QQ77W23U.js.map → chunk-5NTE36LD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KGPLSHJD.js.map → chunk-6C2ZZX5Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Q5NHJ6RO.js.map → chunk-6JUTHVQS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NTS2RKHN.js.map → chunk-6VIJ7UA5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XVB6BATY.js.map → chunk-72LQ4TKV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KZ5AC6B5.js.map → chunk-7WCE6Y64.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VQOG2ETB.js.map → chunk-AF2CCM5U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EAV3P54W.js.map → chunk-DAQ45GCS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RX53WHFI.js.map → chunk-EJDGV4GR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IXG5CMBR.js.map → chunk-FDHPAVVB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-V4QHAMI5.js.map → chunk-GROYI4RB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-77XFQRTD.js.map → chunk-GSJSM5BJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QYGK2XQ3.js.map → chunk-GTLCVJOE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VSQE43NO.js.map → chunk-GV2262OF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-STBCBDKF.js.map → chunk-HCEBZNC3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-U6RYD446.js.map → chunk-HRW7GF6T.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XDWXPG2E.js.map → chunk-IAQE32BI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-66SRNEBK.js.map → chunk-IJNK6WW2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AGEBQRBG.js.map → chunk-JAPE62Y5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UWAQI3B7.js.map → chunk-JGUKMMRS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UU6EP25G.js.map → chunk-JH2ZSLO3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GRDK25BN.js.map → chunk-JHJSFOAM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FQO5THHM.js.map → chunk-JM6YAXTR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E7KBMWEF.js.map → chunk-JSLT7WVE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FIUTBFC6.js.map → chunk-K4CI6Y45.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IEMXESIS.js.map → chunk-KSPWRNVP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BFJP4VYC.js.map → chunk-L7BH7IWU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2UCG5H6B.js.map → chunk-LPEYZRUR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IR3GOO6E.js.map → chunk-NHT3F4WZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6BNV3G6C.js.map → chunk-NLR32VFS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EI3UIMZM.js.map → chunk-OWXOPDHD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AQUNTB7G.js.map → chunk-PEQGTJ5Q.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T6MOTLOJ.js.map → chunk-QJKL5PHS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XKVHL3MB.js.map → chunk-QWRVBJ4D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VFA5EIEN.js.map → chunk-R7QV7ICM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K2L6FZBX.js.map → chunk-RJO3YAFM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SGJB6PXA.js.map → chunk-SF3DT5HJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UNNCT5QY.js.map → chunk-SZVB53Y3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GFZB5CLP.js.map → chunk-T6PPNM7V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-W6IEJXNC.js.map → chunk-TVYYO5A7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DOASIOQR.js.map → chunk-UQLXSG72.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7CHWLT2J.js.map → chunk-UVN66B3M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Q6JPYR7I.js.map → chunk-UX6SSO2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OK7VSX3N.js.map → chunk-UZLJOEAC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4PSJVGRE.js.map → chunk-VDO2JMD4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IRJ6F23W.js.map → chunk-VQIHNHMJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LT5UWU7H.js.map → chunk-ZOJ3LR7O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3HSRP6T2.js.map → chunk-ZOY5K4D3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XXWDEQ6O.js.map → chunk-ZV2NTVMJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UW6HCMP2.js.map → chunk-ZYPFOO3L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-ZZCDDWJT.js.map → close-O5QVZ6ET.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-7NWA3GLA.js.map → close-QEMOYZN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-QCZHFCON.js.map → close-many-SDA426VT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-YALQ7AXS.js.map → close-many-UTZANOCQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-SQIQ5WYR.js.map → comments-LZN6FXXC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-FMQNYPSZ.js.map → comments-VBQ345ND.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-YDAMENCP.js.map → copy-DKTSSCK7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-GI3RCVZP.js.map → copy-M7DDI6LS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-JSL6CXU3.js.map → create-GG4RBCGC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-LXMLYJNM.js.map → create-JBC5KUW6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-IGVOZEU2.js.map → delete-LCS3VPDH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-5DFAXJNI.js.map → delete-MD7YXQLH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-BQAXUQAK.js.map → deps-DELOO4TL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-CBPPSS6J.js.map → deps-FI4O6NQS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-KCWPLQOV.js.map → docs-2UYBP5D6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-NS2AZWCN.js.map → docs-6Z2MP526.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-XUUBQ76I.js.map → files-HEUGSJZL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-PVWEPT5J.js.map → files-HKEAN5MA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-DHBHKK3E.js.map → focus-7SOUT5PZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-3EJVFI3D.js.map → focus-DRQ6FQH6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-JHYVDYLW.js.map → history-compact-65YVN5DB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-3TNPYVFG.js.map → history-compact-7NDVP3PT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-KKFDICCF.js.map → history-redact-7YBL4XSG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-ELRL73XN.js.map → history-redact-IZGNJBU4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-J7WKZFAG.js.map → history-repair-7M4PYQUH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-REMI7DDI.js.map → history-repair-GNGETJLI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-O6V5WDCV.js.map → learnings-3YXDRWFT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-X4D6JCCG.js.map → learnings-ALC6IMNL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-ZSZREWZA.js.map → notes-7JMLQ447.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-UQC6VS6N.js.map → notes-JFCLTC5C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-EZW2YDDY.js.map → plan-KOIPWVOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-5GKRBJJO.js.map → plan-T3XB3WTK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-5PQAPCLF.js.map → profile-OILJHKUW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-CW4BD3FO.js.map → profile-RJXA7PGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-A55MLFAI.js.map → restore-L6IAGOD7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-HEQAG6EK.js.map → restore-ZH65GZFB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-Q5DAWJ2S.js.map → schema-4ERWM5QJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-MAXAIHEC.js.map → schema-55DL3Q52.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-DWFXXJKP.js.map → update-FW6FKDOP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-5DTSCWVF.js.map → update-TJHSPRPT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-6T4ZLZS7.js.map → update-many-NNALYQCN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-MYRK6VBJ.js.map → update-many-PWXX5WHO.js.map} +0 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="85f534fd-62b4-5641-8729-6dcd58b50e94")}catch(e){}}();
|
|
3
|
+
import {
|
|
4
|
+
acquireLock,
|
|
5
|
+
getActiveExtensionRegistrations,
|
|
6
|
+
nowIso,
|
|
7
|
+
readSettings,
|
|
8
|
+
resolveGovernanceKnobs
|
|
9
|
+
} from "./chunk-POG76WWZ.js";
|
|
10
|
+
import {
|
|
11
|
+
EXIT_CODE,
|
|
12
|
+
PmCliError,
|
|
13
|
+
getSettingsPath,
|
|
14
|
+
pathExists,
|
|
15
|
+
resolveItemTypeRegistry,
|
|
16
|
+
resolvePmRoot
|
|
17
|
+
} from "./chunk-HYW67VJ5.js";
|
|
18
|
+
|
|
19
|
+
// dist/sdk/workspace.js
|
|
20
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
21
|
+
import path from "node:path";
|
|
22
|
+
var PM_GITIGNORE_START = "# pm-cli:runtime-cache:start";
|
|
23
|
+
var PM_GITIGNORE_END = "# pm-cli:runtime-cache:end";
|
|
24
|
+
var PM_GITIGNORE_DEFAULT_TRACKER_ROOT = ".agents/pm";
|
|
25
|
+
var PM_GITIGNORE_RUNTIME_DIRECTORIES = [
|
|
26
|
+
"runtime/",
|
|
27
|
+
"search/",
|
|
28
|
+
"locks/",
|
|
29
|
+
"transactions/",
|
|
30
|
+
"checkpoints/"
|
|
31
|
+
];
|
|
32
|
+
function normalizeTrackerRelativeRoot(trackerRelativeRoot) {
|
|
33
|
+
return trackerRelativeRoot.replaceAll("\\", "/").replace(/^\.\/+/, "").replace(/\/+$/, "");
|
|
34
|
+
}
|
|
35
|
+
function isPathOutsideRoot(relativePath) {
|
|
36
|
+
const normalized = relativePath.replaceAll("\\", "/");
|
|
37
|
+
return path.isAbsolute(relativePath) || normalized === ".." || normalized.startsWith("../");
|
|
38
|
+
}
|
|
39
|
+
function getPmGitignoreBlock(trackerRelativeRoot = PM_GITIGNORE_DEFAULT_TRACKER_ROOT) {
|
|
40
|
+
const root = normalizeTrackerRelativeRoot(trackerRelativeRoot);
|
|
41
|
+
return [
|
|
42
|
+
PM_GITIGNORE_START,
|
|
43
|
+
...PM_GITIGNORE_RUNTIME_DIRECTORIES.map((directory) => `${root}/${directory}`),
|
|
44
|
+
PM_GITIGNORE_END
|
|
45
|
+
].join("\n");
|
|
46
|
+
}
|
|
47
|
+
async function ensurePmGitignore(workspaceRoot, options = {}) {
|
|
48
|
+
const gitignorePath = path.join(workspaceRoot, ".gitignore");
|
|
49
|
+
let trackerRelativeRoot = PM_GITIGNORE_DEFAULT_TRACKER_ROOT;
|
|
50
|
+
if (options.pmRoot !== void 0) {
|
|
51
|
+
const relative = normalizeTrackerRelativeRoot(path.relative(path.resolve(workspaceRoot), path.resolve(options.pmRoot)));
|
|
52
|
+
if (isPathOutsideRoot(relative)) {
|
|
53
|
+
return { path: gitignorePath, changed: false };
|
|
54
|
+
}
|
|
55
|
+
if (relative.length > 0) {
|
|
56
|
+
trackerRelativeRoot = relative;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
let current = "";
|
|
60
|
+
try {
|
|
61
|
+
current = await readFile(gitignorePath, "utf8");
|
|
62
|
+
} catch (error) {
|
|
63
|
+
if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const start = current.indexOf(PM_GITIGNORE_START);
|
|
68
|
+
const end = current.indexOf(PM_GITIGNORE_END);
|
|
69
|
+
const withoutManagedBlock = start >= 0 && end >= start ? `${current.slice(0, start)}${current.slice(end + PM_GITIGNORE_END.length)}` : current;
|
|
70
|
+
const prefix = withoutManagedBlock.trimEnd();
|
|
71
|
+
const next = `${prefix.length > 0 ? `${prefix}
|
|
72
|
+
|
|
73
|
+
` : ""}${getPmGitignoreBlock(trackerRelativeRoot)}
|
|
74
|
+
`;
|
|
75
|
+
if (next === current) {
|
|
76
|
+
return { path: gitignorePath, changed: false };
|
|
77
|
+
}
|
|
78
|
+
await writeFile(gitignorePath, next, "utf8");
|
|
79
|
+
return { path: gitignorePath, changed: true };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// dist/sdk/merge/install.js
|
|
83
|
+
import { readFile as readFile2, writeFile as writeFile2 } from "node:fs/promises";
|
|
84
|
+
import { execFile } from "node:child_process";
|
|
85
|
+
import path2 from "node:path";
|
|
86
|
+
import { promisify } from "node:util";
|
|
87
|
+
var execFileAsync = promisify(execFile);
|
|
88
|
+
var PM_GITATTRIBUTES_START = "# pm-cli:merge-drivers:start";
|
|
89
|
+
var PM_GITATTRIBUTES_END = "# pm-cli:merge-drivers:end";
|
|
90
|
+
var MERGE_FENCE_LOCK_ID = "merge-fence";
|
|
91
|
+
var MERGE_DRIVER_DEFINITIONS = [
|
|
92
|
+
{
|
|
93
|
+
key: "pm-item-toon",
|
|
94
|
+
name: "pm field-aware TOON item document merge",
|
|
95
|
+
artifact: "item",
|
|
96
|
+
itemPath: "item.toon"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
key: "pm-item-markdown",
|
|
100
|
+
name: "pm field-aware JSON-markdown item document merge",
|
|
101
|
+
artifact: "item",
|
|
102
|
+
itemPath: "item.md"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
key: "pm-history",
|
|
106
|
+
name: "pm append-only history stream merge",
|
|
107
|
+
artifact: "history",
|
|
108
|
+
itemPath: void 0
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
key: "pm-relationship",
|
|
112
|
+
name: "pm append-only relationship event store merge",
|
|
113
|
+
artifact: "relationship",
|
|
114
|
+
itemPath: void 0
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
key: "pm-json",
|
|
118
|
+
name: "pm key-level JSON config merge",
|
|
119
|
+
artifact: "json",
|
|
120
|
+
itemPath: void 0
|
|
121
|
+
}
|
|
122
|
+
];
|
|
123
|
+
async function resolveGitWorkspaceRoot(cwd) {
|
|
124
|
+
try {
|
|
125
|
+
const { stdout } = await execFileAsync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8", windowsHide: true, timeout: 1e4 });
|
|
126
|
+
return stdout.trim();
|
|
127
|
+
} catch {
|
|
128
|
+
throw new PmCliError("pm merge install requires a git repository (merge drivers are git configuration).", EXIT_CODE.USAGE);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function toPosixRelative(fromPath, toPath) {
|
|
132
|
+
return path2.relative(fromPath, toPath).replaceAll("\\", "/");
|
|
133
|
+
}
|
|
134
|
+
function quoteGitAttributePattern(value) {
|
|
135
|
+
return `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
|
|
136
|
+
}
|
|
137
|
+
function buildMergeAttributePatterns(trackerRelativeRoot, typeFolders) {
|
|
138
|
+
const prefix = trackerRelativeRoot.length > 0 ? `${trackerRelativeRoot}/` : "";
|
|
139
|
+
const patterns = [];
|
|
140
|
+
for (const folder of typeFolders) {
|
|
141
|
+
patterns.push(`${quoteGitAttributePattern(`${prefix}${folder}/*.toon`)} merge=pm-item-toon`);
|
|
142
|
+
patterns.push(`${quoteGitAttributePattern(`${prefix}${folder}/*.md`)} merge=pm-item-markdown`);
|
|
143
|
+
}
|
|
144
|
+
patterns.push(`${quoteGitAttributePattern(`${prefix}**/*.jsonl`)} merge=pm-relationship`);
|
|
145
|
+
patterns.push(`${quoteGitAttributePattern(`${prefix}history/*.jsonl`)} merge=pm-history`);
|
|
146
|
+
patterns.push(`${quoteGitAttributePattern(`${prefix}settings.json`)} merge=pm-json`);
|
|
147
|
+
patterns.push(`${quoteGitAttributePattern(`${prefix}schema/*.json`)} merge=pm-json`);
|
|
148
|
+
return patterns;
|
|
149
|
+
}
|
|
150
|
+
async function reconcileGitattributesBlock(workspaceRoot, patterns, dryRun) {
|
|
151
|
+
const gitattributesPath = path2.join(workspaceRoot, ".gitattributes");
|
|
152
|
+
let current = "";
|
|
153
|
+
try {
|
|
154
|
+
current = await readFile2(gitattributesPath, "utf8");
|
|
155
|
+
} catch (error) {
|
|
156
|
+
if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const block = [
|
|
161
|
+
PM_GITATTRIBUTES_START,
|
|
162
|
+
...patterns,
|
|
163
|
+
PM_GITATTRIBUTES_END
|
|
164
|
+
].join("\n");
|
|
165
|
+
const start = current.indexOf(PM_GITATTRIBUTES_START);
|
|
166
|
+
const end = current.indexOf(PM_GITATTRIBUTES_END);
|
|
167
|
+
const withoutManagedBlock = start >= 0 && end > start ? `${current.slice(0, start)}${current.slice(end + PM_GITATTRIBUTES_END.length)}` : current.replace(PM_GITATTRIBUTES_START, "").replace(PM_GITATTRIBUTES_END, "");
|
|
168
|
+
const prefix = withoutManagedBlock.trimEnd();
|
|
169
|
+
const next = `${prefix.length > 0 ? `${prefix}
|
|
170
|
+
|
|
171
|
+
` : ""}${block}
|
|
172
|
+
`;
|
|
173
|
+
if (next === current) {
|
|
174
|
+
return { path: gitattributesPath, changed: false };
|
|
175
|
+
}
|
|
176
|
+
if (!dryRun) {
|
|
177
|
+
await writeFile2(gitattributesPath, next, "utf8");
|
|
178
|
+
}
|
|
179
|
+
return { path: gitattributesPath, changed: true };
|
|
180
|
+
}
|
|
181
|
+
async function auditMergeAttributeFence(pmRoot, typeFolders) {
|
|
182
|
+
const resolvedRoot = path2.resolve(pmRoot);
|
|
183
|
+
let fenceDirectory = null;
|
|
184
|
+
let fenceContent = "";
|
|
185
|
+
let directory = resolvedRoot;
|
|
186
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
187
|
+
const candidate = path2.join(directory, ".gitattributes");
|
|
188
|
+
try {
|
|
189
|
+
const raw = await readFile2(candidate, "utf8");
|
|
190
|
+
if (raw.includes(PM_GITATTRIBUTES_START)) {
|
|
191
|
+
fenceDirectory = directory;
|
|
192
|
+
fenceContent = raw;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
} catch {
|
|
196
|
+
}
|
|
197
|
+
const parent = path2.dirname(directory);
|
|
198
|
+
if (parent === directory) {
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
directory = parent;
|
|
202
|
+
}
|
|
203
|
+
if (fenceDirectory === null) {
|
|
204
|
+
return { status: "not_installed", missing_patterns: [], stale_patterns: [] };
|
|
205
|
+
}
|
|
206
|
+
const fencePath = path2.join(fenceDirectory, ".gitattributes");
|
|
207
|
+
const start = fenceContent.indexOf(PM_GITATTRIBUTES_START);
|
|
208
|
+
const end = fenceContent.indexOf(PM_GITATTRIBUTES_END);
|
|
209
|
+
const committed = end > start ? fenceContent.slice(start + PM_GITATTRIBUTES_START.length, end).split("\n").map((line) => line.trim()).filter((line) => line.length > 0) : [];
|
|
210
|
+
const expected = buildMergeAttributePatterns(toPosixRelative(fenceDirectory, resolvedRoot), typeFolders);
|
|
211
|
+
const committedSet = new Set(committed);
|
|
212
|
+
const expectedSet = new Set(expected);
|
|
213
|
+
const missing = expected.filter((line) => !committedSet.has(line));
|
|
214
|
+
const stale = committed.filter((line) => !expectedSet.has(line));
|
|
215
|
+
return {
|
|
216
|
+
status: missing.length > 0 || stale.length > 0 ? "drift" : "ok",
|
|
217
|
+
path: fencePath,
|
|
218
|
+
missing_patterns: missing,
|
|
219
|
+
stale_patterns: stale
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
async function refreshMergeAttributeFenceIfInstalled(pmRoot) {
|
|
223
|
+
let workspaceRoot;
|
|
224
|
+
try {
|
|
225
|
+
workspaceRoot = await resolveGitWorkspaceRoot(path2.resolve(pmRoot));
|
|
226
|
+
} catch {
|
|
227
|
+
return { status: "no_git" };
|
|
228
|
+
}
|
|
229
|
+
const trackerRelativeRoot = toPosixRelative(workspaceRoot, path2.resolve(pmRoot));
|
|
230
|
+
const lockSettings = await readSettings(pmRoot);
|
|
231
|
+
const owner = (process.env.PM_AUTHOR ?? lockSettings.author_default).trim();
|
|
232
|
+
const releaseLock = await acquireLock(pmRoot, MERGE_FENCE_LOCK_ID, lockSettings.locks.ttl_seconds, owner.length > 0 ? owner : "unknown", false, resolveGovernanceKnobs(lockSettings).force_required_for_stale_lock, lockSettings.locks.wait_ms);
|
|
233
|
+
try {
|
|
234
|
+
const gitattributesPath = path2.join(workspaceRoot, ".gitattributes");
|
|
235
|
+
let current;
|
|
236
|
+
try {
|
|
237
|
+
current = await readFile2(gitattributesPath, "utf8");
|
|
238
|
+
} catch (error) {
|
|
239
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
240
|
+
return { status: "not_installed", path: gitattributesPath };
|
|
241
|
+
}
|
|
242
|
+
throw error;
|
|
243
|
+
}
|
|
244
|
+
if (!current.includes(PM_GITATTRIBUTES_START)) {
|
|
245
|
+
return { status: "not_installed", path: gitattributesPath };
|
|
246
|
+
}
|
|
247
|
+
const settings = await readSettings(pmRoot);
|
|
248
|
+
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
249
|
+
const typeFolders = [
|
|
250
|
+
...new Set(Object.values(typeRegistry.type_to_folder))
|
|
251
|
+
].sort((left, right) => left.localeCompare(right));
|
|
252
|
+
const outcome = await reconcileGitattributesBlock(workspaceRoot, buildMergeAttributePatterns(trackerRelativeRoot, typeFolders), false);
|
|
253
|
+
return {
|
|
254
|
+
status: outcome.changed ? "refreshed" : "unchanged",
|
|
255
|
+
path: outcome.path
|
|
256
|
+
};
|
|
257
|
+
} finally {
|
|
258
|
+
await releaseLock();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
async function runMergeInstall(options, global) {
|
|
262
|
+
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
263
|
+
if (!await pathExists(getSettingsPath(pmRoot))) {
|
|
264
|
+
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
265
|
+
}
|
|
266
|
+
const dryRun = options.dryRun === true;
|
|
267
|
+
const workspaceRoot = await resolveGitWorkspaceRoot(process.cwd());
|
|
268
|
+
const trackerRelativeRoot = toPosixRelative(workspaceRoot, path2.resolve(pmRoot));
|
|
269
|
+
if (isPathOutsideRoot(trackerRelativeRoot)) {
|
|
270
|
+
throw new PmCliError(`Tracker root ${pmRoot} is outside the git repository ${workspaceRoot}; there is nothing to configure for this repository.`, EXIT_CODE.USAGE);
|
|
271
|
+
}
|
|
272
|
+
const settings = await readSettings(pmRoot);
|
|
273
|
+
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
274
|
+
const typeFolders = [
|
|
275
|
+
...new Set(Object.values(typeRegistry.type_to_folder))
|
|
276
|
+
].sort((left, right) => left.localeCompare(right));
|
|
277
|
+
const patterns = buildMergeAttributePatterns(trackerRelativeRoot, typeFolders);
|
|
278
|
+
const gitattributes = await reconcileGitattributesBlock(workspaceRoot, patterns, dryRun);
|
|
279
|
+
const gitConfigEntries = [];
|
|
280
|
+
for (const definition of MERGE_DRIVER_DEFINITIONS) {
|
|
281
|
+
gitConfigEntries.push({
|
|
282
|
+
key: `merge.${definition.key}.name`,
|
|
283
|
+
value: definition.name
|
|
284
|
+
});
|
|
285
|
+
gitConfigEntries.push({
|
|
286
|
+
key: `merge.${definition.key}.driver`,
|
|
287
|
+
value: `pm merge driver ${definition.artifact} "%O" "%A" "%B"${definition.itemPath === void 0 ? "" : ` --item-path ${definition.itemPath}`}`
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
if (!dryRun) {
|
|
291
|
+
for (const entry of gitConfigEntries) {
|
|
292
|
+
await execFileAsync("git", ["config", entry.key, entry.value], {
|
|
293
|
+
cwd: workspaceRoot,
|
|
294
|
+
encoding: "utf8",
|
|
295
|
+
windowsHide: true,
|
|
296
|
+
timeout: 1e4
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
ok: true,
|
|
302
|
+
dry_run: dryRun,
|
|
303
|
+
workspace_root: workspaceRoot,
|
|
304
|
+
gitattributes: {
|
|
305
|
+
path: gitattributes.path,
|
|
306
|
+
changed: gitattributes.changed,
|
|
307
|
+
patterns
|
|
308
|
+
},
|
|
309
|
+
git_config: gitConfigEntries,
|
|
310
|
+
guidance: [
|
|
311
|
+
"Commit .gitattributes so every branch and collaborator shares the merge mapping.",
|
|
312
|
+
'git config is per-clone: each collaborator (and each fresh worktree/clone) runs "pm merge install" once.',
|
|
313
|
+
'After merging branches, run "pm validate" and, if history drift is reported, "pm history-repair --all" to reconcile item state with merged history.',
|
|
314
|
+
"Custom item types registered later refresh this fence automatically (pm schema add-type/remove-type); rerun pm merge install only after out-of-band type-folder edits."
|
|
315
|
+
],
|
|
316
|
+
generated_at: nowIso()
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export {
|
|
321
|
+
PM_GITIGNORE_START,
|
|
322
|
+
PM_GITIGNORE_END,
|
|
323
|
+
getPmGitignoreBlock,
|
|
324
|
+
ensurePmGitignore,
|
|
325
|
+
PM_GITATTRIBUTES_START,
|
|
326
|
+
PM_GITATTRIBUTES_END,
|
|
327
|
+
buildMergeAttributePatterns,
|
|
328
|
+
auditMergeAttributeFence,
|
|
329
|
+
refreshMergeAttributeFenceIfInstalled,
|
|
330
|
+
runMergeInstall
|
|
331
|
+
};
|
|
332
|
+
//# sourceMappingURL=chunk-CFHAODHQ.js.map
|
|
333
|
+
|
|
334
|
+
//# debugId=85f534fd-62b4-5641-8729-6dcd58b50e94
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../sdk/workspace.ts","../../../../../../../../sdk/merge/install.ts"],"sourcesContent":["/**\n * @module sdk/workspace\n *\n * Maintains repository-scaffold contracts shared by the public SDK and CLI.\n */\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\n/** Opening marker for the init-owned ignore block. */\nexport const PM_GITIGNORE_START = \"# pm-cli:runtime-cache:start\";\n/** Closing marker for the init-owned ignore block. */\nexport const PM_GITIGNORE_END = \"# pm-cli:runtime-cache:end\";\n\n/** Default workspace-relative tracker root used when no custom root is resolved. */\nexport const PM_GITIGNORE_DEFAULT_TRACKER_ROOT = \".agents/pm\";\n\n/**\n * Tracker-relative directories that hold per-clone runtime state (caches,\n * search indexes, locks, crash-recovery receipts). They must never be\n * committed: they churn on every command and conflict on every concurrent\n * branch merge. `transactions/` (SDK workspace-transaction journals) and\n * `checkpoints/` (bulk-mutation rollback receipts) are per-branch recovery\n * state with their own GC (`pm gc --scope transactions|checkpoints`), so\n * keeping them untracked is the recorded merge-safety disposition.\n */\nexport const PM_GITIGNORE_RUNTIME_DIRECTORIES = [\n \"runtime/\",\n \"search/\",\n \"locks/\",\n \"transactions/\",\n \"checkpoints/\",\n] as const;\n\n/** Result of reconciling the init-owned repository ignore block. */\nexport interface EnsurePmGitignoreResult {\n /** Absolute path to the reconciled file. */\n path: string;\n /** Whether the file content changed. */\n changed: boolean;\n}\n\nfunction normalizeTrackerRelativeRoot(trackerRelativeRoot: string): string {\n return trackerRelativeRoot\n .replaceAll(\"\\\\\", \"/\")\n .replace(/^\\.\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n}\n\n/** Return whether a relative path escapes its owning root, without rejecting valid names such as `..pm`. */\nexport function isPathOutsideRoot(relativePath: string): boolean {\n const normalized = relativePath.replaceAll(\"\\\\\", \"/\");\n return (\n path.isAbsolute(relativePath) ||\n normalized === \"..\" ||\n normalized.startsWith(\"../\")\n );\n}\n\n/** Return the canonical pm ignore block rendered for the given workspace-relative tracker root (defaults to `.agents/pm`), primarily for documentation and tests. */\nexport function getPmGitignoreBlock(\n trackerRelativeRoot: string = PM_GITIGNORE_DEFAULT_TRACKER_ROOT,\n): string {\n const root = normalizeTrackerRelativeRoot(trackerRelativeRoot);\n return [\n PM_GITIGNORE_START,\n ...PM_GITIGNORE_RUNTIME_DIRECTORIES.map(\n (directory) => `${root}/${directory}`,\n ),\n PM_GITIGNORE_END,\n ].join(\"\\n\");\n}\n\n/**\n * Idempotently create or replace the fenced pm cache block in a workspace\n * `.gitignore`. When `pmRoot` is provided the ignored runtime directories are\n * rendered under the resolved workspace-relative tracker root, so custom-root\n * workspaces (`--pm-path`/`PM_PATH`) stop committing runtime caches (GH-598).\n * A tracker root outside the workspace needs no ignore rules here, so the\n * file is left untouched.\n */\nexport async function ensurePmGitignore(\n workspaceRoot: string,\n options: {\n /** Absolute tracker root; rendered relative to the workspace root. */\n pmRoot?: string;\n } = {},\n): Promise<EnsurePmGitignoreResult> {\n const gitignorePath = path.join(workspaceRoot, \".gitignore\");\n let trackerRelativeRoot = PM_GITIGNORE_DEFAULT_TRACKER_ROOT;\n if (options.pmRoot !== undefined) {\n const relative = normalizeTrackerRelativeRoot(\n path.relative(path.resolve(workspaceRoot), path.resolve(options.pmRoot)),\n );\n if (isPathOutsideRoot(relative)) {\n return { path: gitignorePath, changed: false };\n }\n if (relative.length > 0) {\n trackerRelativeRoot = relative;\n }\n }\n let current = \"\";\n try {\n current = await readFile(gitignorePath, \"utf8\");\n } catch (error: unknown) {\n if (\n !(error instanceof Error && \"code\" in error && error.code === \"ENOENT\")\n ) {\n throw error;\n }\n }\n const start = current.indexOf(PM_GITIGNORE_START);\n const end = current.indexOf(PM_GITIGNORE_END);\n const withoutManagedBlock =\n start >= 0 && end >= start\n ? `${current.slice(0, start)}${current.slice(end + PM_GITIGNORE_END.length)}`\n : current;\n const prefix = withoutManagedBlock.trimEnd();\n const next = `${prefix.length > 0 ? `${prefix}\\n\\n` : \"\"}${getPmGitignoreBlock(trackerRelativeRoot)}\\n`;\n if (next === current) {\n return { path: gitignorePath, changed: false };\n }\n await writeFile(gitignorePath, next, \"utf8\");\n return { path: gitignorePath, changed: true };\n}\n","/**\n * @module sdk/merge/install\n *\n * Installs the tracker's git merge configuration into a repository: a fenced\n * `.gitattributes` block mapping every mergeable tracker artifact class to a\n * pm merge driver, plus the local `git config` driver definitions that make\n * those attributes effective. Idempotent and re-runnable; schema type\n * mutations refresh the fenced block automatically once it is installed.\n */\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { execFile } from \"node:child_process\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { acquireLock } from \"../../core/lock/lock.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport {\n readSettings,\n resolveGovernanceKnobs,\n} from \"../../core/store/settings.js\";\nimport { isPathOutsideRoot } from \"../workspace.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/** Opening marker for the pm-owned merge-driver `.gitattributes` block. */\nexport const PM_GITATTRIBUTES_START = \"# pm-cli:merge-drivers:start\";\n/** Closing marker for the pm-owned merge-driver `.gitattributes` block. */\nexport const PM_GITATTRIBUTES_END = \"# pm-cli:merge-drivers:end\";\n\nconst MERGE_FENCE_LOCK_ID = \"merge-fence\";\n\nconst MERGE_DRIVER_DEFINITIONS = [\n {\n key: \"pm-item-toon\",\n name: \"pm field-aware TOON item document merge\",\n artifact: \"item\",\n itemPath: \"item.toon\",\n },\n {\n key: \"pm-item-markdown\",\n name: \"pm field-aware JSON-markdown item document merge\",\n artifact: \"item\",\n itemPath: \"item.md\",\n },\n {\n key: \"pm-history\",\n name: \"pm append-only history stream merge\",\n artifact: \"history\",\n itemPath: undefined,\n },\n {\n key: \"pm-relationship\",\n name: \"pm append-only relationship event store merge\",\n artifact: \"relationship\",\n itemPath: undefined,\n },\n {\n key: \"pm-json\",\n name: \"pm key-level JSON config merge\",\n artifact: \"json\",\n itemPath: undefined,\n },\n] as const;\n\n/** Documents the merge install options payload exchanged by command, SDK, and package integrations. */\nexport interface MergeInstallOptions {\n /** Preview the `.gitattributes` and `git config` changes without writing anything. */\n dryRun?: boolean;\n}\n\n/** Documents the merge install result payload exchanged by command, SDK, and package integrations. */\nexport interface MergeInstallResult {\n /** Whether the installation completed (or, for dry runs, would complete) without errors. */\n ok: boolean;\n /** Whether this run was a preview only. */\n dry_run: boolean;\n /** Repository root the merge configuration was installed into. */\n workspace_root: string;\n /** `.gitattributes` reconciliation outcome. */\n gitattributes: {\n path: string;\n changed: boolean;\n patterns: string[];\n };\n /** Local `git config` merge-driver definitions applied (or previewed). */\n git_config: Array<{ key: string; value: string }>;\n /** Guidance for completing the multi-branch workflow setup. */\n guidance: string[];\n /** ISO 8601 timestamp recording when generated occurred. */\n generated_at: string;\n}\n\nasync function resolveGitWorkspaceRoot(cwd: string): Promise<string> {\n try {\n const { stdout } = await execFileAsync(\n \"git\",\n [\"rev-parse\", \"--show-toplevel\"],\n { cwd, encoding: \"utf8\", windowsHide: true, timeout: 10_000 },\n );\n return stdout.trim();\n } catch {\n throw new PmCliError(\n \"pm merge install requires a git repository (merge drivers are git configuration).\",\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction toPosixRelative(fromPath: string, toPath: string): string {\n return path.relative(fromPath, toPath).replaceAll(\"\\\\\", \"/\");\n}\n\n/** Encode one Git attributes pattern with C-style quoting so whitespace, backslashes, and quotation marks remain part of the repository path instead of being parsed as attribute separators. */\nfunction quoteGitAttributePattern(value: string): string {\n return `\"${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"')}\"`;\n}\n\n/**\n * Build the complete fenced `.gitattributes` pattern list for a tracker rooted\n * at `trackerRelativeRoot` (git-root-relative POSIX path, empty when the\n * tracker root IS the git root). This is the single coverage contract shared\n * by `pm merge install` (which writes the fence) and the validate\n * merge-fence-drift detection (which compares the committed fence against the\n * active schema's type folders), so schema-added custom types can never\n * silently diverge from the installed fence without a warning.\n */\nexport function buildMergeAttributePatterns(\n trackerRelativeRoot: string,\n typeFolders: string[],\n): string[] {\n const prefix =\n trackerRelativeRoot.length > 0 ? `${trackerRelativeRoot}/` : \"\";\n const patterns: string[] = [];\n for (const folder of typeFolders) {\n patterns.push(\n `${quoteGitAttributePattern(`${prefix}${folder}/*.toon`)} merge=pm-item-toon`,\n );\n patterns.push(\n `${quoteGitAttributePattern(`${prefix}${folder}/*.md`)} merge=pm-item-markdown`,\n );\n }\n // RelationshipEventStore deliberately accepts a caller-chosen relativePath\n // anywhere below the tracker root. Cover all tracker JSONL first, then let\n // the more-specific history rule below override it. This keeps custom event\n // stores protected without guessing package-owned paths.\n patterns.push(\n `${quoteGitAttributePattern(`${prefix}**/*.jsonl`)} merge=pm-relationship`,\n );\n patterns.push(\n `${quoteGitAttributePattern(`${prefix}history/*.jsonl`)} merge=pm-history`,\n );\n patterns.push(\n `${quoteGitAttributePattern(`${prefix}settings.json`)} merge=pm-json`,\n );\n patterns.push(\n `${quoteGitAttributePattern(`${prefix}schema/*.json`)} merge=pm-json`,\n );\n return patterns;\n}\n\nasync function reconcileGitattributesBlock(\n workspaceRoot: string,\n patterns: string[],\n dryRun: boolean,\n): Promise<{ path: string; changed: boolean }> {\n const gitattributesPath = path.join(workspaceRoot, \".gitattributes\");\n let current = \"\";\n try {\n current = await readFile(gitattributesPath, \"utf8\");\n } catch (error: unknown) {\n if (\n !(error instanceof Error && \"code\" in error && error.code === \"ENOENT\")\n ) {\n throw error;\n }\n }\n const block = [\n PM_GITATTRIBUTES_START,\n ...patterns,\n PM_GITATTRIBUTES_END,\n ].join(\"\\n\");\n const start = current.indexOf(PM_GITATTRIBUTES_START);\n const end = current.indexOf(PM_GITATTRIBUTES_END);\n const withoutManagedBlock =\n start >= 0 && end > start\n ? `${current.slice(0, start)}${current.slice(end + PM_GITATTRIBUTES_END.length)}`\n : current\n .replace(PM_GITATTRIBUTES_START, \"\")\n .replace(PM_GITATTRIBUTES_END, \"\");\n const prefix = withoutManagedBlock.trimEnd();\n const next = `${prefix.length > 0 ? `${prefix}\\n\\n` : \"\"}${block}\\n`;\n if (next === current) {\n return { path: gitattributesPath, changed: false };\n }\n if (!dryRun) {\n await writeFile(gitattributesPath, next, \"utf8\");\n }\n return { path: gitattributesPath, changed: true };\n}\n\n/** Result of comparing the committed merge-fence block against the coverage the active schema requires. */\nexport interface MergeFenceAuditResult {\n /** Audit outcome: no fence installed (nothing to audit), fence matches, or fence drifted from the active schema/type folders. */\n status: \"not_installed\" | \"ok\" | \"drift\";\n /** `.gitattributes` file containing the fence, when one was found. */\n path?: string;\n /** Expected attribute lines absent from the committed fence (for example a schema-added type folder). */\n missing_patterns: string[];\n /** Committed fence lines no longer produced by the coverage contract (for example a removed type folder). */\n stale_patterns: string[];\n}\n\n/**\n * Audit the committed `.gitattributes` merge fence against the coverage the\n * active schema requires, without touching git configuration. The fence file\n * is discovered by walking up from the tracker root (bounded), so the audit\n * stays filesystem-only and safe to run inside `pm validate`. A `drift`\n * result means items of some type folder (or a tracker JSONL store) would\n * merge under git's default text driver despite the fence being installed.\n */\nexport async function auditMergeAttributeFence(\n pmRoot: string,\n typeFolders: string[],\n): Promise<MergeFenceAuditResult> {\n const resolvedRoot = path.resolve(pmRoot);\n let fenceDirectory: string | null = null;\n let fenceContent = \"\";\n let directory = resolvedRoot;\n for (let depth = 0; depth < 8; depth += 1) {\n const candidate = path.join(directory, \".gitattributes\");\n try {\n const raw = await readFile(candidate, \"utf8\");\n if (raw.includes(PM_GITATTRIBUTES_START)) {\n fenceDirectory = directory;\n fenceContent = raw;\n break;\n }\n } catch {\n // No .gitattributes at this level; keep walking up.\n }\n const parent = path.dirname(directory);\n if (parent === directory) {\n break;\n }\n directory = parent;\n }\n if (fenceDirectory === null) {\n return { status: \"not_installed\", missing_patterns: [], stale_patterns: [] };\n }\n const fencePath = path.join(fenceDirectory, \".gitattributes\");\n const start = fenceContent.indexOf(PM_GITATTRIBUTES_START);\n const end = fenceContent.indexOf(PM_GITATTRIBUTES_END);\n const committed =\n end > start\n ? fenceContent\n .slice(start + PM_GITATTRIBUTES_START.length, end)\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n : [];\n const expected = buildMergeAttributePatterns(\n toPosixRelative(fenceDirectory, resolvedRoot),\n typeFolders,\n );\n const committedSet = new Set(committed);\n const expectedSet = new Set(expected);\n const missing = expected.filter((line) => !committedSet.has(line));\n const stale = committed.filter((line) => !expectedSet.has(line));\n return {\n status: missing.length > 0 || stale.length > 0 ? \"drift\" : \"ok\",\n path: fencePath,\n missing_patterns: missing,\n stale_patterns: stale,\n };\n}\n\n/** Outcome of an automatic merge-fence refresh attempted after a schema type mutation. */\nexport interface MergeFenceRefreshOutcome {\n /** What happened: the fence was rewritten, already matched, was never installed (actionable hint), or there is no git repository to configure. */\n status: \"refreshed\" | \"unchanged\" | \"not_installed\" | \"no_git\";\n /** `.gitattributes` path examined, when a git repository was found. */\n path?: string;\n}\n\n/**\n * Refresh the fenced `.gitattributes` merge-driver block after a schema type\n * mutation, but only when `pm merge install` already ran (the fence markers\n * are present). Without this, custom item types registered after install\n * would write items into folders with no merge attribute — silently\n * reintroducing the whole-file conflict class for exactly those items. Repos\n * that never installed the fence get a `not_installed` outcome so callers can\n * surface an actionable hint instead of mutating git configuration nobody\n * asked for.\n */\nexport async function refreshMergeAttributeFenceIfInstalled(\n pmRoot: string,\n): Promise<MergeFenceRefreshOutcome> {\n let workspaceRoot: string;\n try {\n workspaceRoot = await resolveGitWorkspaceRoot(path.resolve(pmRoot));\n } catch {\n return { status: \"no_git\" };\n }\n const trackerRelativeRoot = toPosixRelative(\n workspaceRoot,\n path.resolve(pmRoot),\n );\n const lockSettings = await readSettings(pmRoot);\n const owner = (process.env.PM_AUTHOR ?? lockSettings.author_default).trim();\n const releaseLock = await acquireLock(\n pmRoot,\n MERGE_FENCE_LOCK_ID,\n lockSettings.locks.ttl_seconds,\n owner.length > 0 ? owner : \"unknown\",\n false,\n resolveGovernanceKnobs(lockSettings).force_required_for_stale_lock,\n lockSettings.locks.wait_ms,\n );\n try {\n const gitattributesPath = path.join(workspaceRoot, \".gitattributes\");\n let current: string;\n try {\n current = await readFile(gitattributesPath, \"utf8\");\n } catch (error: unknown) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return { status: \"not_installed\", path: gitattributesPath };\n }\n throw error;\n }\n if (!current.includes(PM_GITATTRIBUTES_START)) {\n return { status: \"not_installed\", path: gitattributesPath };\n }\n // Re-read after acquiring the dedicated fence lock so every concurrent\n // refresher computes from the latest committed type registry.\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(\n settings,\n getActiveExtensionRegistrations(),\n );\n const typeFolders = [\n ...new Set(Object.values(typeRegistry.type_to_folder)),\n ].sort((left, right) => left.localeCompare(right));\n const outcome = await reconcileGitattributesBlock(\n workspaceRoot,\n buildMergeAttributePatterns(trackerRelativeRoot, typeFolders),\n false,\n );\n return {\n status: outcome.changed ? \"refreshed\" : \"unchanged\",\n path: outcome.path,\n };\n } finally {\n await releaseLock();\n }\n}\n\n/**\n * Install (or preview) the repository merge configuration for tracker data:\n * writes the fenced merge-driver block into `.gitattributes` (committed and\n * shared with every branch) and defines the `merge.pm-*.driver` entries in the\n * repository-local git config (per-clone, so every collaborator runs this once\n * per checkout). Requires an initialized tracker and a git repository.\n */\nexport async function runMergeInstall(\n options: MergeInstallOptions,\n global: GlobalOptions,\n): Promise<MergeInstallResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(\n `Tracker is not initialized at ${pmRoot}. Run pm init first.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n const dryRun = options.dryRun === true;\n const workspaceRoot = await resolveGitWorkspaceRoot(process.cwd());\n const trackerRelativeRoot = toPosixRelative(\n workspaceRoot,\n path.resolve(pmRoot),\n );\n if (isPathOutsideRoot(trackerRelativeRoot)) {\n throw new PmCliError(\n `Tracker root ${pmRoot} is outside the git repository ${workspaceRoot}; there is nothing to configure for this repository.`,\n EXIT_CODE.USAGE,\n );\n }\n\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(\n settings,\n getActiveExtensionRegistrations(),\n );\n const typeFolders = [\n ...new Set(Object.values(typeRegistry.type_to_folder)),\n ].sort((left, right) => left.localeCompare(right));\n const patterns = buildMergeAttributePatterns(\n trackerRelativeRoot,\n typeFolders,\n );\n const gitattributes = await reconcileGitattributesBlock(\n workspaceRoot,\n patterns,\n dryRun,\n );\n\n const gitConfigEntries: Array<{ key: string; value: string }> = [];\n for (const definition of MERGE_DRIVER_DEFINITIONS) {\n gitConfigEntries.push({\n key: `merge.${definition.key}.name`,\n value: definition.name,\n });\n gitConfigEntries.push({\n key: `merge.${definition.key}.driver`,\n value: `pm merge driver ${definition.artifact} \"%O\" \"%A\" \"%B\"${definition.itemPath === undefined ? \"\" : ` --item-path ${definition.itemPath}`}`,\n });\n }\n if (!dryRun) {\n for (const entry of gitConfigEntries) {\n await execFileAsync(\"git\", [\"config\", entry.key, entry.value], {\n cwd: workspaceRoot,\n encoding: \"utf8\",\n windowsHide: true,\n timeout: 10_000,\n });\n }\n }\n\n return {\n ok: true,\n dry_run: dryRun,\n workspace_root: workspaceRoot,\n gitattributes: {\n path: gitattributes.path,\n changed: gitattributes.changed,\n patterns,\n },\n git_config: gitConfigEntries,\n guidance: [\n \"Commit .gitattributes so every branch and collaborator shares the merge mapping.\",\n 'git config is per-clone: each collaborator (and each fresh worktree/clone) runs \"pm merge install\" once.',\n 'After merging branches, run \"pm validate\" and, if history drift is reported, \"pm history-repair --all\" to reconcile item state with merged history.',\n \"Custom item types registered later refresh this fence automatically (pm schema add-type/remove-type); rerun pm merge install only after out-of-band type-folder edits.\",\n ],\n generated_at: nowIso(),\n };\n}\n"],"names":["readFile","writeFile","path","path","readFile","writeFile"],"mappings":"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","debugId":"85f534fd-62b4-5641-8729-6dcd58b50e94"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="81f07347-d5fa-5f79-8f92-bd1939a0b091")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
isErrnoError,
|
|
5
5
|
parseAnnotationTextInput,
|
|
6
6
|
runAnnotationCommand
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-HB3P4M52.js";
|
|
8
8
|
import {
|
|
9
9
|
createStdinTokenResolver
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-J4FBIFU6.js";
|
|
11
11
|
import {
|
|
12
12
|
EXIT_CODE,
|
|
13
13
|
PmCliError
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-HYW67VJ5.js";
|
|
15
15
|
|
|
16
16
|
// dist/cli/commands/comments.js
|
|
17
17
|
import { readFile } from "node:fs/promises";
|
|
@@ -92,9 +92,6 @@ async function resolveCommentInput(options, stdinResolver) {
|
|
|
92
92
|
async function runComments(id, options, global) {
|
|
93
93
|
const stdinResolver = createStdinTokenResolver();
|
|
94
94
|
const commentInput = await resolveCommentInput(options, stdinResolver);
|
|
95
|
-
if (commentInput.mode === "list" && options.message !== void 0) {
|
|
96
|
-
throw new PmCliError("--message labels a comment mutation but does not provide comment text. Pass text positionally or with --add, --stdin, or --file.", EXIT_CODE.USAGE);
|
|
97
|
-
}
|
|
98
95
|
const shouldParseText = commentInput.mode === "add" || commentInput.mode === "edit";
|
|
99
96
|
const rawValue = commentInput.value ?? "";
|
|
100
97
|
return runAnnotationCommand(id, options, global, {
|
|
@@ -123,6 +120,6 @@ async function runComments(id, options, global) {
|
|
|
123
120
|
export {
|
|
124
121
|
runComments
|
|
125
122
|
};
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
123
|
+
//# sourceMappingURL=chunk-CQTQKUUV.js.map
|
|
127
124
|
|
|
128
|
-
//# debugId=
|
|
125
|
+
//# debugId=81f07347-d5fa-5f79-8f92-bd1939a0b091
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../cli/commands/comments.ts"],"sourcesContent":["/**\n * @module cli/commands/comments\n *\n * Implements the pm comments command surface and its agent-facing runtime behavior.\n */\nimport { readFile } from \"node:fs/promises\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { createStdinTokenResolver } from \"../../core/item/parse.js\";\nimport type { Comment } from \"../../types/index.js\";\nimport {\n isErrnoError,\n parseAnnotationTextInput,\n runAnnotationCommand,\n} from \"../../sdk/annotations.js\";\n\n/** Documents the comments command options payload exchanged by command, SDK, and package integrations. */\nexport interface CommentsCommandOptions {\n /** Value that configures or reports add for this contract. */\n add?: string;\n /** Value that configures or reports stdin for this contract. */\n stdin?: boolean;\n /** Value that configures or reports file for this contract. */\n file?: string;\n /** Value that configures or reports edit for this contract. */\n edit?: number;\n /** Value that configures or reports delete for this contract. */\n delete?: number;\n /** Value that configures or reports limit for this contract. */\n limit?: string;\n /** Value that configures or reports include meta for this contract. */\n includeMeta?: boolean;\n /** Value that configures or reports author for this contract. */\n author?: string;\n /** Human-readable explanation suitable for logs and agent-facing output. */\n message?: string;\n /** Value that configures or reports force for this contract. */\n force?: boolean;\n}\n\n/** Documents the comments result payload exchanged by command, SDK, and package integrations. */\nexport interface CommentsResult {\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Value that configures or reports comments for this contract. */\n comments: Comment[];\n /** Value that configures or reports count for this contract. */\n count: number;\n /** Number of total entries represented by this result. */\n total_count?: number;\n /** Number of returned entries represented by this result. */\n returned_count?: number;\n /** Whether more applies to this operation. */\n has_more?: boolean;\n /** Value that configures or reports limit for this contract. */\n limit?: number;\n}\n\ninterface ResolvedCommentInput {\n mode: \"list\" | \"add\" | \"stdin\" | \"file\" | \"edit\" | \"delete\";\n value?: string;\n emptyFlag?: string;\n index?: number;\n}\n\nasync function resolveCommentTextSource(\n options: CommentsCommandOptions,\n stdinResolver: ReturnType<typeof createStdinTokenResolver>,\n): Promise<{ value: string; emptyFlag: string } | undefined> {\n const hasAdd = options.add !== undefined;\n const hasStdin = options.stdin === true;\n const hasFile = typeof options.file === \"string\";\n const sourceCount = Number(hasAdd) + Number(hasStdin) + Number(hasFile);\n if (sourceCount === 0) {\n return undefined;\n }\n if (sourceCount > 1) {\n throw new PmCliError(\n \"Specify comment text using only one input source: --add, --stdin, or --file\",\n EXIT_CODE.USAGE,\n );\n }\n if (hasAdd) {\n const addInput = await stdinResolver.resolveValue(options.add, \"--add\");\n return { value: addInput ?? \"\", emptyFlag: \"--add\" };\n }\n if (hasStdin) {\n const stdinInput = await stdinResolver.resolveValue(\"-\", \"--stdin\");\n return { value: stdinInput ?? \"\", emptyFlag: \"--stdin\" };\n }\n const filePath = (options.file as string).trim();\n if (!filePath) {\n throw new PmCliError(\"--file path cannot be empty\", EXIT_CODE.USAGE);\n }\n try {\n const fileInput = await readFile(filePath, \"utf8\");\n return { value: fileInput, emptyFlag: \"--file\" };\n } catch (error: unknown) {\n if (isErrnoError(error) && error.code === \"ENOENT\") {\n throw new PmCliError(\n `--file path not found: ${filePath}`,\n EXIT_CODE.USAGE,\n );\n }\n const detail = error instanceof Error ? error.message : String(error);\n throw new PmCliError(\n `Failed to read --file path \"${filePath}\": ${detail}`,\n EXIT_CODE.USAGE,\n );\n }\n}\n\nasync function resolveCommentInput(\n options: CommentsCommandOptions,\n stdinResolver: ReturnType<typeof createStdinTokenResolver>,\n): Promise<ResolvedCommentInput> {\n const editIndex = options.edit;\n const deleteIndex = options.delete;\n const hasEdit = editIndex !== undefined;\n const hasDelete = deleteIndex !== undefined;\n if (hasEdit && hasDelete) {\n throw new PmCliError(\n \"Specify only one of --edit or --delete\",\n EXIT_CODE.USAGE,\n );\n }\n if (editIndex !== undefined && (!Number.isInteger(editIndex) || editIndex < 1)) {\n throw new PmCliError(\"--edit must be a positive integer\", EXIT_CODE.USAGE);\n }\n if (deleteIndex !== undefined && (!Number.isInteger(deleteIndex) || deleteIndex < 1)) {\n throw new PmCliError(\"--delete must be a positive integer\", EXIT_CODE.USAGE);\n }\n\n if (hasDelete) {\n const textSource = await resolveCommentTextSource(options, stdinResolver);\n if (textSource !== undefined) {\n throw new PmCliError(\n \"--delete does not take comment text\",\n EXIT_CODE.USAGE,\n );\n }\n return { mode: \"delete\", index: deleteIndex };\n }\n\n if (hasEdit) {\n const textSource = await resolveCommentTextSource(options, stdinResolver);\n if (textSource === undefined) {\n throw new PmCliError(\n \"--edit requires replacement text via positional [text], --add, --stdin, or --file\",\n EXIT_CODE.USAGE,\n );\n }\n return {\n mode: \"edit\",\n index: editIndex,\n value: textSource.value,\n emptyFlag: textSource.emptyFlag,\n };\n }\n\n const textSource = await resolveCommentTextSource(options, stdinResolver);\n if (textSource === undefined) {\n return { mode: \"list\" };\n }\n // Map the single resolved input source back to its add/stdin/file mode so the\n // caller still knows whether to run plain-text markdown parsing (add-only).\n const mode =\n textSource.emptyFlag === \"--add\"\n ? \"add\"\n : textSource.emptyFlag === \"--stdin\"\n ? \"stdin\"\n : \"file\";\n return { mode, value: textSource.value, emptyFlag: textSource.emptyFlag };\n}\n\n/** Implements run comments for the public runtime surface of this module. */\nexport async function runComments(\n id: string,\n options: CommentsCommandOptions,\n global: GlobalOptions,\n): Promise<CommentsResult> {\n const stdinResolver = createStdinTokenResolver();\n const commentInput = await resolveCommentInput(options, stdinResolver);\n if (commentInput.mode === \"list\" && options.message !== undefined) {\n throw new PmCliError(\n \"--message labels a comment mutation but does not provide comment text. Pass text positionally or with --add, --stdin, or --file.\",\n EXIT_CODE.USAGE,\n );\n }\n\n const shouldParseText =\n commentInput.mode === \"add\" || commentInput.mode === \"edit\";\n const rawValue = commentInput.value ?? \"\";\n return runAnnotationCommand<\"comments\", Comment>(id, options, global, {\n input: {\n ...commentInput,\n rawValue: options.add ?? rawValue,\n value: shouldParseText\n ? parseAnnotationTextInput(rawValue, { stripPlainTextPrefix: true })\n : rawValue,\n },\n collectionKey: \"comments\",\n op: \"comment_add\",\n editOp: \"comment_edit\",\n deleteOp: \"comment_delete\",\n parseText: (raw) => raw,\n bypassOwnershipConflict: Boolean(\n commentInput.mode === \"add\" &&\n (options as CommentsCommandOptions & {\n ownershipAppendBypass?: boolean;\n }).ownershipAppendBypass,\n ),\n conflictGuidance: {\n required:\n \"For an approved append-only handoff on another owner's item, use the package-provided ownership bypass before considering --force.\",\n examples: ['pm comments pm-a1b2 --add \"review note\" --author \"reviewer\" --force'],\n nextSteps: [\n \"Use an installed package's narrow append-only ownership bypass when available.\",\n \"Use --force only when an ownership override is explicitly approved.\",\n ],\n },\n });\n}\n"],"names":["textSource"],"mappings":"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","debugId":"cbfdae67-6c63-5c92-8320-1617c5fcb471"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../cli/commands/comments.ts"],"sourcesContent":["/**\n * @module cli/commands/comments\n *\n * Implements the pm comments command surface and its agent-facing runtime behavior.\n */\nimport { readFile } from \"node:fs/promises\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { createStdinTokenResolver } from \"../../core/item/parse.js\";\nimport type { Comment } from \"../../types/index.js\";\nimport {\n isErrnoError,\n parseAnnotationTextInput,\n runAnnotationCommand,\n} from \"../../sdk/annotations.js\";\n\n/** Documents the comments command options payload exchanged by command, SDK, and package integrations. */\nexport interface CommentsCommandOptions {\n /** Value that configures or reports add for this contract. */\n add?: string;\n /** Value that configures or reports stdin for this contract. */\n stdin?: boolean;\n /** Value that configures or reports file for this contract. */\n file?: string;\n /** Value that configures or reports edit for this contract. */\n edit?: number;\n /** Value that configures or reports delete for this contract. */\n delete?: number;\n /** Value that configures or reports limit for this contract. */\n limit?: string;\n /** Value that configures or reports include meta for this contract. */\n includeMeta?: boolean;\n /** Value that configures or reports author for this contract. */\n author?: string;\n /** Human-readable explanation suitable for logs and agent-facing output. */\n message?: string;\n /** Value that configures or reports force for this contract. */\n force?: boolean;\n}\n\n/** Documents the comments result payload exchanged by command, SDK, and package integrations. */\nexport interface CommentsResult {\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Value that configures or reports comments for this contract. */\n comments: Comment[];\n /** Value that configures or reports count for this contract. */\n count: number;\n /** Number of total entries represented by this result. */\n total_count?: number;\n /** Number of returned entries represented by this result. */\n returned_count?: number;\n /** Whether more applies to this operation. */\n has_more?: boolean;\n /** Value that configures or reports limit for this contract. */\n limit?: number;\n}\n\ninterface ResolvedCommentInput {\n mode: \"list\" | \"add\" | \"stdin\" | \"file\" | \"edit\" | \"delete\";\n value?: string;\n emptyFlag?: string;\n index?: number;\n}\n\nasync function resolveCommentTextSource(\n options: CommentsCommandOptions,\n stdinResolver: ReturnType<typeof createStdinTokenResolver>,\n): Promise<{ value: string; emptyFlag: string } | undefined> {\n const hasAdd = options.add !== undefined;\n const hasStdin = options.stdin === true;\n const hasFile = typeof options.file === \"string\";\n const sourceCount = Number(hasAdd) + Number(hasStdin) + Number(hasFile);\n if (sourceCount === 0) {\n return undefined;\n }\n if (sourceCount > 1) {\n throw new PmCliError(\n \"Specify comment text using only one input source: --add, --stdin, or --file\",\n EXIT_CODE.USAGE,\n );\n }\n if (hasAdd) {\n const addInput = await stdinResolver.resolveValue(options.add, \"--add\");\n return { value: addInput ?? \"\", emptyFlag: \"--add\" };\n }\n if (hasStdin) {\n const stdinInput = await stdinResolver.resolveValue(\"-\", \"--stdin\");\n return { value: stdinInput ?? \"\", emptyFlag: \"--stdin\" };\n }\n const filePath = (options.file as string).trim();\n if (!filePath) {\n throw new PmCliError(\"--file path cannot be empty\", EXIT_CODE.USAGE);\n }\n try {\n const fileInput = await readFile(filePath, \"utf8\");\n return { value: fileInput, emptyFlag: \"--file\" };\n } catch (error: unknown) {\n if (isErrnoError(error) && error.code === \"ENOENT\") {\n throw new PmCliError(\n `--file path not found: ${filePath}`,\n EXIT_CODE.USAGE,\n );\n }\n const detail = error instanceof Error ? error.message : String(error);\n throw new PmCliError(\n `Failed to read --file path \"${filePath}\": ${detail}`,\n EXIT_CODE.USAGE,\n );\n }\n}\n\nasync function resolveCommentInput(\n options: CommentsCommandOptions,\n stdinResolver: ReturnType<typeof createStdinTokenResolver>,\n): Promise<ResolvedCommentInput> {\n const editIndex = options.edit;\n const deleteIndex = options.delete;\n const hasEdit = editIndex !== undefined;\n const hasDelete = deleteIndex !== undefined;\n if (hasEdit && hasDelete) {\n throw new PmCliError(\n \"Specify only one of --edit or --delete\",\n EXIT_CODE.USAGE,\n );\n }\n if (editIndex !== undefined && (!Number.isInteger(editIndex) || editIndex < 1)) {\n throw new PmCliError(\"--edit must be a positive integer\", EXIT_CODE.USAGE);\n }\n if (deleteIndex !== undefined && (!Number.isInteger(deleteIndex) || deleteIndex < 1)) {\n throw new PmCliError(\"--delete must be a positive integer\", EXIT_CODE.USAGE);\n }\n\n if (hasDelete) {\n const textSource = await resolveCommentTextSource(options, stdinResolver);\n if (textSource !== undefined) {\n throw new PmCliError(\n \"--delete does not take comment text\",\n EXIT_CODE.USAGE,\n );\n }\n return { mode: \"delete\", index: deleteIndex };\n }\n\n if (hasEdit) {\n const textSource = await resolveCommentTextSource(options, stdinResolver);\n if (textSource === undefined) {\n throw new PmCliError(\n \"--edit requires replacement text via positional [text], --add, --stdin, or --file\",\n EXIT_CODE.USAGE,\n );\n }\n return {\n mode: \"edit\",\n index: editIndex,\n value: textSource.value,\n emptyFlag: textSource.emptyFlag,\n };\n }\n\n const textSource = await resolveCommentTextSource(options, stdinResolver);\n if (textSource === undefined) {\n return { mode: \"list\" };\n }\n // Map the single resolved input source back to its add/stdin/file mode so the\n // caller still knows whether to run plain-text markdown parsing (add-only).\n const mode =\n textSource.emptyFlag === \"--add\"\n ? \"add\"\n : textSource.emptyFlag === \"--stdin\"\n ? \"stdin\"\n : \"file\";\n return { mode, value: textSource.value, emptyFlag: textSource.emptyFlag };\n}\n\n/** Implements run comments for the public runtime surface of this module. */\nexport async function runComments(\n id: string,\n options: CommentsCommandOptions,\n global: GlobalOptions,\n): Promise<CommentsResult> {\n const stdinResolver = createStdinTokenResolver();\n const commentInput = await resolveCommentInput(options, stdinResolver);\n const shouldParseText =\n commentInput.mode === \"add\" || commentInput.mode === \"edit\";\n const rawValue = commentInput.value ?? \"\";\n return runAnnotationCommand<\"comments\", Comment>(id, options, global, {\n input: {\n ...commentInput,\n rawValue: options.add ?? rawValue,\n value: shouldParseText\n ? parseAnnotationTextInput(rawValue, { stripPlainTextPrefix: true })\n : rawValue,\n },\n collectionKey: \"comments\",\n op: \"comment_add\",\n editOp: \"comment_edit\",\n deleteOp: \"comment_delete\",\n parseText: (raw) => raw,\n bypassOwnershipConflict: Boolean(\n commentInput.mode === \"add\" &&\n (options as CommentsCommandOptions & {\n ownershipAppendBypass?: boolean;\n }).ownershipAppendBypass,\n ),\n conflictGuidance: {\n required:\n \"For an approved append-only handoff on another owner's item, use the package-provided ownership bypass before considering --force.\",\n examples: ['pm comments pm-a1b2 --add \"review note\" --author \"reviewer\" --force'],\n nextSteps: [\n \"Use an installed package's narrow append-only ownership bypass when available.\",\n \"Use --force only when an ownership override is explicitly approved.\",\n ],\n },\n });\n}\n"],"names":["textSource"],"mappings":"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","debugId":"81f07347-d5fa-5f79-8f92-bd1939a0b091"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runCreate
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-KZEANWJS.js";
|
|
4
4
|
import {
|
|
5
5
|
splitCommaList
|
|
6
6
|
} from "./chunk-D6HZN36B.js";
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
nowIso,
|
|
12
12
|
readLocatedItem,
|
|
13
13
|
readSettings
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-IY6VZ3IW.js";
|
|
15
15
|
import {
|
|
16
16
|
EXIT_CODE,
|
|
17
17
|
PLAN_HARNESS_VALUES,
|
|
@@ -24,13 +24,13 @@ import {
|
|
|
24
24
|
resolveItemTypeRegistry,
|
|
25
25
|
resolvePmRoot,
|
|
26
26
|
resolveTypeName
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-7AVEY74G.js";
|
|
28
28
|
|
|
29
29
|
// dist/cli/commands/plan.js
|
|
30
30
|
!(function() {
|
|
31
31
|
try {
|
|
32
32
|
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
33
|
-
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "
|
|
33
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "f86441d5-65b5-52e7-83f4-beb6ac484e6d");
|
|
34
34
|
} catch (e2) {
|
|
35
35
|
}
|
|
36
36
|
})();
|
|
@@ -1493,4 +1493,4 @@ export {
|
|
|
1493
1493
|
resolvePlanTemplateSteps,
|
|
1494
1494
|
runPlan
|
|
1495
1495
|
};
|
|
1496
|
-
//# sourceMappingURL=chunk-
|
|
1496
|
+
//# sourceMappingURL=chunk-D6NXDNP3.js.map
|