@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.
Files changed (600) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/AGENTS.md +2 -0
  3. package/CHANGELOG.md +36 -0
  4. package/dist/cli/commands/append.js +13 -6
  5. package/dist/cli/commands/append.js.map +1 -1
  6. package/dist/cli/commands/calendar.d.ts +1 -1
  7. package/dist/cli/commands/calendar.js +2 -2
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/comments.js +2 -5
  10. package/dist/cli/commands/comments.js.map +1 -1
  11. package/dist/cli/commands/completion.js +11 -3
  12. package/dist/cli/commands/completion.js.map +1 -1
  13. package/dist/cli/commands/context.d.ts +1 -1
  14. package/dist/cli/commands/context.js +2 -2
  15. package/dist/cli/commands/context.js.map +1 -1
  16. package/dist/cli/commands/contracts.js +4 -3
  17. package/dist/cli/commands/contracts.js.map +1 -1
  18. package/dist/cli/commands/copy.js +5 -3
  19. package/dist/cli/commands/copy.js.map +1 -1
  20. package/dist/cli/commands/create.d.ts +3 -1
  21. package/dist/cli/commands/create.js +5 -3
  22. package/dist/cli/commands/create.js.map +1 -1
  23. package/dist/cli/commands/merge.d.ts +8 -0
  24. package/dist/cli/commands/merge.js +12 -0
  25. package/dist/cli/commands/merge.js.map +1 -0
  26. package/dist/cli/commands/plan.d.ts +1 -1
  27. package/dist/cli/commands/plan.js +2 -2
  28. package/dist/cli/commands/plan.js.map +1 -1
  29. package/dist/cli/commands/update-many.d.ts +5 -0
  30. package/dist/cli/commands/update-many.js +81 -6
  31. package/dist/cli/commands/update-many.js.map +1 -1
  32. package/dist/cli/commands/update.d.ts +5 -1
  33. package/dist/cli/commands/update.js +50 -4
  34. package/dist/cli/commands/update.js.map +1 -1
  35. package/dist/cli/register-list-query.js +14 -2
  36. package/dist/cli/register-list-query.js.map +1 -1
  37. package/dist/cli/register-mutation.js +61 -2
  38. package/dist/cli/register-mutation.js.map +1 -1
  39. package/dist/cli/register-operations.js +5 -3
  40. package/dist/cli/register-operations.js.map +1 -1
  41. package/dist/cli/registration-helpers.js +4 -2
  42. package/dist/cli/registration-helpers.js.map +1 -1
  43. package/dist/cli-bundle/bundle-manifest.json +365 -333
  44. package/dist/cli-bundle/chunks/{append-MBXHNWSX.js → append-E6V54WOQ.js} +5 -5
  45. package/dist/cli-bundle/chunks/append-NNJ3EFIT.js +11 -0
  46. package/dist/cli-bundle/chunks/{chunk-M4B4RK4J.js → chunk-2BO4CA46.js} +14 -238
  47. package/dist/cli-bundle/chunks/{chunk-M4B4RK4J.js.map → chunk-2BO4CA46.js.map} +1 -1
  48. package/dist/cli-bundle/chunks/{chunk-MQOSMBWV.js → chunk-3AO5VSDR.js} +25 -6
  49. package/dist/cli-bundle/chunks/chunk-3AO5VSDR.js.map +7 -0
  50. package/dist/cli-bundle/chunks/{chunk-ODEIDKGW.js → chunk-3LPFHE3P.js} +596 -154
  51. package/dist/cli-bundle/chunks/chunk-3LPFHE3P.js.map +1 -0
  52. package/dist/cli-bundle/chunks/{chunk-YGEA4CLH.js → chunk-3MCTMJXI.js} +4 -4
  53. package/dist/cli-bundle/chunks/{chunk-N7FCFJ76.js → chunk-3P7UJQOX.js} +2 -2
  54. package/dist/cli-bundle/chunks/{chunk-7B7IHMLH.js → chunk-3VY6MIEO.js} +3 -3
  55. package/dist/cli-bundle/chunks/{chunk-3EZZTFL2.js → chunk-4F6BWJ4J.js} +51 -43
  56. package/dist/cli-bundle/chunks/chunk-4F6BWJ4J.js.map +7 -0
  57. package/dist/cli-bundle/chunks/{chunk-VA3H7VVC.js → chunk-4L23AGQ7.js} +9 -7
  58. package/dist/cli-bundle/chunks/chunk-4L23AGQ7.js.map +1 -0
  59. package/dist/cli-bundle/chunks/{chunk-5S6IZXK7.js → chunk-4U4Z6AHI.js} +7 -7
  60. package/dist/cli-bundle/chunks/{chunk-UOIFZ66L.js → chunk-4XGJLADW.js} +3 -3
  61. package/dist/cli-bundle/chunks/{chunk-SUNZKVAH.js → chunk-5IZJWSDB.js} +5 -5
  62. package/dist/cli-bundle/chunks/{chunk-QQ77W23U.js → chunk-5NTE36LD.js} +4 -4
  63. package/dist/cli-bundle/chunks/{chunk-EVAN5VJA.js → chunk-5OK4UGFV.js} +5 -8
  64. package/dist/cli-bundle/chunks/{chunk-EVAN5VJA.js.map → chunk-5OK4UGFV.js.map} +2 -2
  65. package/dist/cli-bundle/chunks/{chunk-H3YKUVDR.js → chunk-5UX66S6U.js} +26 -7
  66. package/dist/cli-bundle/chunks/chunk-5UX66S6U.js.map +1 -0
  67. package/dist/cli-bundle/chunks/{chunk-KGPLSHJD.js → chunk-6C2ZZX5Z.js} +2 -2
  68. package/dist/cli-bundle/chunks/{chunk-Q5NHJ6RO.js → chunk-6JUTHVQS.js} +2 -2
  69. package/dist/cli-bundle/chunks/{chunk-NTS2RKHN.js → chunk-6VIJ7UA5.js} +15 -15
  70. package/dist/cli-bundle/chunks/{chunk-BBGR4FKQ.js → chunk-6XMUURSS.js} +6 -6
  71. package/dist/cli-bundle/chunks/chunk-6XMUURSS.js.map +1 -0
  72. package/dist/cli-bundle/chunks/{chunk-XVB6BATY.js → chunk-72LQ4TKV.js} +3 -3
  73. package/dist/cli-bundle/chunks/{chunk-WCBB6VI3.js → chunk-7AVEY74G.js} +8 -5
  74. package/dist/cli-bundle/chunks/chunk-7AVEY74G.js.map +7 -0
  75. package/dist/cli-bundle/chunks/{chunk-YG56M3NE.js → chunk-7DOJC3HS.js} +8 -8
  76. package/dist/cli-bundle/chunks/chunk-7DOJC3HS.js.map +1 -0
  77. package/dist/cli-bundle/chunks/{chunk-KZ5AC6B5.js → chunk-7WCE6Y64.js} +2 -2
  78. package/dist/cli-bundle/chunks/{chunk-VQOG2ETB.js → chunk-AF2CCM5U.js} +4 -4
  79. package/dist/cli-bundle/chunks/{chunk-P24ZU5QV.js → chunk-AOEOYL3S.js} +49 -12
  80. package/dist/cli-bundle/chunks/chunk-AOEOYL3S.js.map +7 -0
  81. package/dist/cli-bundle/chunks/{chunk-BZKE2O5V.js → chunk-BKIAH72N.js} +8 -6
  82. package/dist/cli-bundle/chunks/chunk-BKIAH72N.js.map +1 -0
  83. package/dist/cli-bundle/chunks/{chunk-RWAIRGBC.js → chunk-C3KD7U3T.js} +12 -243
  84. package/dist/cli-bundle/chunks/chunk-C3KD7U3T.js.map +7 -0
  85. package/dist/cli-bundle/chunks/chunk-CFHAODHQ.js +334 -0
  86. package/dist/cli-bundle/chunks/chunk-CFHAODHQ.js.map +1 -0
  87. package/dist/cli-bundle/chunks/{chunk-TELI67UP.js → chunk-CQTQKUUV.js} +6 -9
  88. package/dist/cli-bundle/chunks/{chunk-TELI67UP.js.map → chunk-CQTQKUUV.js.map} +1 -1
  89. package/dist/cli-bundle/chunks/{chunk-ZUCBPXNA.js → chunk-D6NXDNP3.js} +5 -5
  90. package/dist/cli-bundle/chunks/chunk-D6NXDNP3.js.map +7 -0
  91. package/dist/cli-bundle/chunks/{chunk-EAV3P54W.js → chunk-DAQ45GCS.js} +5 -5
  92. package/dist/cli-bundle/chunks/{chunk-6V4T4RD3.js → chunk-DVDBQA3B.js} +79 -22
  93. package/dist/cli-bundle/chunks/chunk-DVDBQA3B.js.map +1 -0
  94. package/dist/cli-bundle/chunks/chunk-E6LEMURX.js +249 -0
  95. package/dist/cli-bundle/chunks/chunk-E6LEMURX.js.map +7 -0
  96. package/dist/cli-bundle/chunks/{chunk-ZF52NVRT.js → chunk-E7ICD63T.js} +131 -179
  97. package/dist/cli-bundle/chunks/chunk-E7ICD63T.js.map +7 -0
  98. package/dist/cli-bundle/chunks/{chunk-RX53WHFI.js → chunk-EJDGV4GR.js} +3 -3
  99. package/dist/cli-bundle/chunks/{chunk-IXG5CMBR.js → chunk-FDHPAVVB.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-KAE727L2.js → chunk-FSRHYUDA.js} +2 -2
  101. package/dist/cli-bundle/chunks/chunk-FSRHYUDA.js.map +7 -0
  102. package/dist/cli-bundle/chunks/{chunk-46Z6FAVP.js → chunk-G3COA6GS.js} +51 -43
  103. package/dist/cli-bundle/chunks/chunk-G3COA6GS.js.map +1 -0
  104. package/dist/cli-bundle/chunks/{chunk-A4FVWFZY.js → chunk-GFQP7HAZ.js} +8 -6
  105. package/dist/cli-bundle/chunks/chunk-GFQP7HAZ.js.map +7 -0
  106. package/dist/cli-bundle/chunks/{chunk-2XPDCXK5.js → chunk-GIQSU6S2.js} +6 -6
  107. package/dist/cli-bundle/chunks/chunk-GIQSU6S2.js.map +1 -0
  108. package/dist/cli-bundle/chunks/{chunk-V4QHAMI5.js → chunk-GROYI4RB.js} +3 -3
  109. package/dist/cli-bundle/chunks/{chunk-77XFQRTD.js → chunk-GSJSM5BJ.js} +3 -3
  110. package/dist/cli-bundle/chunks/{chunk-QYGK2XQ3.js → chunk-GTLCVJOE.js} +3 -3
  111. package/dist/cli-bundle/chunks/{chunk-VSQE43NO.js → chunk-GV2262OF.js} +4 -4
  112. package/dist/cli-bundle/chunks/{chunk-N2TEEOXJ.js → chunk-GVI6FAFG.js} +8 -6
  113. package/dist/cli-bundle/chunks/chunk-GVI6FAFG.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-A5EQPNV7.js → chunk-GVT754PX.js} +44 -3
  115. package/dist/cli-bundle/chunks/chunk-GVT754PX.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-Y2VSGFT4.js → chunk-HB3P4M52.js} +22 -7
  117. package/dist/cli-bundle/chunks/chunk-HB3P4M52.js.map +1 -0
  118. package/dist/cli-bundle/chunks/{chunk-STBCBDKF.js → chunk-HCEBZNC3.js} +6 -6
  119. package/dist/cli-bundle/chunks/{chunk-EEECAV5M.js → chunk-HEWM6CEN.js} +80 -25
  120. package/dist/cli-bundle/chunks/chunk-HEWM6CEN.js.map +7 -0
  121. package/dist/cli-bundle/chunks/{chunk-GKCEEXMA.js → chunk-HQ3SB4CN.js} +21 -6
  122. package/dist/cli-bundle/chunks/{chunk-GKCEEXMA.js.map → chunk-HQ3SB4CN.js.map} +2 -2
  123. package/dist/cli-bundle/chunks/{chunk-U6RYD446.js → chunk-HRW7GF6T.js} +7 -7
  124. package/dist/cli-bundle/chunks/{chunk-D35WYXWC.js → chunk-HYW67VJ5.js} +6 -3
  125. package/dist/cli-bundle/chunks/chunk-HYW67VJ5.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-OKWJUL6F.js → chunk-I577UHC7.js} +16 -9
  127. package/dist/cli-bundle/chunks/{chunk-OKWJUL6F.js.map → chunk-I577UHC7.js.map} +2 -2
  128. package/dist/cli-bundle/chunks/{chunk-XDWXPG2E.js → chunk-IAQE32BI.js} +4 -4
  129. package/dist/cli-bundle/chunks/{chunk-66SRNEBK.js → chunk-IJNK6WW2.js} +3 -3
  130. package/dist/cli-bundle/chunks/chunk-INSTSQNZ.js +623 -0
  131. package/dist/cli-bundle/chunks/chunk-INSTSQNZ.js.map +7 -0
  132. package/dist/cli-bundle/chunks/{chunk-A3GAQLBH.js → chunk-IX677TRO.js} +75 -12
  133. package/dist/cli-bundle/chunks/chunk-IX677TRO.js.map +7 -0
  134. package/dist/cli-bundle/chunks/{chunk-RLLOZAM2.js → chunk-IY6VZ3IW.js} +29 -8
  135. package/dist/cli-bundle/chunks/chunk-IY6VZ3IW.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-SVAWG7EE.js → chunk-J4FBIFU6.js} +45 -4
  137. package/dist/cli-bundle/chunks/chunk-J4FBIFU6.js.map +1 -0
  138. package/dist/cli-bundle/chunks/{chunk-AGEBQRBG.js → chunk-JAPE62Y5.js} +9 -9
  139. package/dist/cli-bundle/chunks/{chunk-UWAQI3B7.js → chunk-JGUKMMRS.js} +3 -3
  140. package/dist/cli-bundle/chunks/{chunk-UU6EP25G.js → chunk-JH2ZSLO3.js} +2 -2
  141. package/dist/cli-bundle/chunks/{chunk-GRDK25BN.js → chunk-JHJSFOAM.js} +6 -6
  142. package/dist/cli-bundle/chunks/{chunk-FQO5THHM.js → chunk-JM6YAXTR.js} +2 -2
  143. package/dist/cli-bundle/chunks/{chunk-E7KBMWEF.js → chunk-JSLT7WVE.js} +2 -2
  144. package/dist/cli-bundle/chunks/{chunk-FIUTBFC6.js → chunk-K4CI6Y45.js} +2 -2
  145. package/dist/cli-bundle/chunks/{chunk-IEMXESIS.js → chunk-KSPWRNVP.js} +7 -7
  146. package/dist/cli-bundle/chunks/{chunk-3QNUDDY2.js → chunk-KZEANWJS.js} +14 -12
  147. package/dist/cli-bundle/chunks/{chunk-3QNUDDY2.js.map → chunk-KZEANWJS.js.map} +2 -2
  148. package/dist/cli-bundle/chunks/{chunk-BFJP4VYC.js → chunk-L7BH7IWU.js} +4 -4
  149. package/dist/cli-bundle/chunks/{chunk-2UCG5H6B.js → chunk-LPEYZRUR.js} +3 -3
  150. package/dist/cli-bundle/chunks/{chunk-FQF6VVPH.js → chunk-MYSS5H2A.js} +9 -7
  151. package/dist/cli-bundle/chunks/{chunk-FQF6VVPH.js.map → chunk-MYSS5H2A.js.map} +1 -1
  152. package/dist/cli-bundle/chunks/{chunk-IR3GOO6E.js → chunk-NHT3F4WZ.js} +15 -15
  153. package/dist/cli-bundle/chunks/{chunk-6BNV3G6C.js → chunk-NLR32VFS.js} +2 -2
  154. package/dist/cli-bundle/chunks/{chunk-BDC4TW4B.js → chunk-OV7MSW3I.js} +15 -13
  155. package/dist/cli-bundle/chunks/chunk-OV7MSW3I.js.map +1 -0
  156. package/dist/cli-bundle/chunks/{chunk-EI3UIMZM.js → chunk-OWXOPDHD.js} +4 -4
  157. package/dist/cli-bundle/chunks/chunk-P7JTWYLH.js +246 -0
  158. package/dist/cli-bundle/chunks/chunk-P7JTWYLH.js.map +1 -0
  159. package/dist/cli-bundle/chunks/{chunk-AQUNTB7G.js → chunk-PEQGTJ5Q.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-QFG4MB7P.js → chunk-POG76WWZ.js} +28 -7
  161. package/dist/cli-bundle/chunks/chunk-POG76WWZ.js.map +1 -0
  162. package/dist/cli-bundle/chunks/{chunk-MI3346YW.js → chunk-QANSTTC7.js} +129 -170
  163. package/dist/cli-bundle/chunks/chunk-QANSTTC7.js.map +1 -0
  164. package/dist/cli-bundle/chunks/{chunk-T6MOTLOJ.js → chunk-QJKL5PHS.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-SBW7EQC4.js → chunk-QLZ643FM.js} +76 -13
  166. package/dist/cli-bundle/chunks/chunk-QLZ643FM.js.map +1 -0
  167. package/dist/cli-bundle/chunks/{chunk-XKVHL3MB.js → chunk-QWRVBJ4D.js} +2 -2
  168. package/dist/cli-bundle/chunks/chunk-R3EWPG4A.js +106 -0
  169. package/dist/cli-bundle/chunks/chunk-R3EWPG4A.js.map +1 -0
  170. package/dist/cli-bundle/chunks/chunk-R5U2VZ3K.js +344 -0
  171. package/dist/cli-bundle/chunks/chunk-R5U2VZ3K.js.map +7 -0
  172. package/dist/cli-bundle/chunks/{chunk-VFA5EIEN.js → chunk-R7QV7ICM.js} +4 -4
  173. package/dist/cli-bundle/chunks/{chunk-NPEYH6CE.js → chunk-RDV4ZFYS.js} +12 -10
  174. package/dist/cli-bundle/chunks/{chunk-NPEYH6CE.js.map → chunk-RDV4ZFYS.js.map} +1 -1
  175. package/dist/cli-bundle/chunks/{chunk-K2L6FZBX.js → chunk-RJO3YAFM.js} +4 -4
  176. package/dist/cli-bundle/chunks/{chunk-YIC5NGXF.js → chunk-RMF7LMBS.js} +7 -7
  177. package/dist/cli-bundle/chunks/{chunk-YIC5NGXF.js.map → chunk-RMF7LMBS.js.map} +2 -2
  178. package/dist/cli-bundle/chunks/{chunk-MRXAHR4B.js → chunk-RZJLNXFG.js} +50 -13
  179. package/dist/cli-bundle/chunks/chunk-RZJLNXFG.js.map +1 -0
  180. package/dist/cli-bundle/chunks/{chunk-DJAGYYCQ.js → chunk-SC2HMDGB.js} +19 -3
  181. package/dist/cli-bundle/chunks/chunk-SC2HMDGB.js.map +1 -0
  182. package/dist/cli-bundle/chunks/{chunk-SGJB6PXA.js → chunk-SF3DT5HJ.js} +3 -3
  183. package/dist/cli-bundle/chunks/chunk-SG74J6MV.js +604 -0
  184. package/dist/cli-bundle/chunks/chunk-SG74J6MV.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-Q3K5XPAQ.js → chunk-SR3JOATZ.js} +18 -2
  186. package/dist/cli-bundle/chunks/chunk-SR3JOATZ.js.map +7 -0
  187. package/dist/cli-bundle/chunks/{chunk-DUDLSQFG.js → chunk-SSKOQNMS.js} +14 -12
  188. package/dist/cli-bundle/chunks/{chunk-DUDLSQFG.js.map → chunk-SSKOQNMS.js.map} +1 -1
  189. package/dist/cli-bundle/chunks/{chunk-UNNCT5QY.js → chunk-SZVB53Y3.js} +3 -3
  190. package/dist/cli-bundle/chunks/{chunk-JBW2S2C6.js → chunk-T44FMVRL.js} +613 -157
  191. package/dist/cli-bundle/chunks/chunk-T44FMVRL.js.map +7 -0
  192. package/dist/cli-bundle/chunks/{chunk-GFZB5CLP.js → chunk-T6PPNM7V.js} +4 -4
  193. package/dist/cli-bundle/chunks/{chunk-UE7LK3RE.js → chunk-THAOZG4U.js} +9 -7
  194. package/dist/cli-bundle/chunks/chunk-THAOZG4U.js.map +1 -0
  195. package/dist/cli-bundle/chunks/{chunk-IGBBTPM5.js → chunk-TOBGV45Y.js} +4 -4
  196. package/dist/cli-bundle/chunks/chunk-TOBGV45Y.js.map +1 -0
  197. package/dist/cli-bundle/chunks/{chunk-W6IEJXNC.js → chunk-TVYYO5A7.js} +2 -2
  198. package/dist/cli-bundle/chunks/chunk-TYHJDFYW.js +109 -0
  199. package/dist/cli-bundle/chunks/chunk-TYHJDFYW.js.map +7 -0
  200. package/dist/cli-bundle/chunks/{chunk-DOASIOQR.js → chunk-UQLXSG72.js} +2 -2
  201. package/dist/cli-bundle/chunks/{chunk-IDUTGRDM.js → chunk-URXVHN3L.js} +3 -3
  202. package/dist/cli-bundle/chunks/chunk-URXVHN3L.js.map +1 -0
  203. package/dist/cli-bundle/chunks/{chunk-7CHWLT2J.js → chunk-UVN66B3M.js} +2 -2
  204. package/dist/cli-bundle/chunks/{chunk-Q6JPYR7I.js → chunk-UX6SSO2I.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-JPWUZOMR.js → chunk-UZDQXNUB.js} +75 -20
  206. package/dist/cli-bundle/chunks/chunk-UZDQXNUB.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-OK7VSX3N.js → chunk-UZLJOEAC.js} +3 -3
  208. package/dist/cli-bundle/chunks/{chunk-4PSJVGRE.js → chunk-VDO2JMD4.js} +7 -7
  209. package/dist/cli-bundle/chunks/{chunk-IRJ6F23W.js → chunk-VQIHNHMJ.js} +2 -2
  210. package/dist/cli-bundle/chunks/{chunk-FQODDTE7.js → chunk-WUVEBQW6.js} +7 -5
  211. package/dist/cli-bundle/chunks/{chunk-FQODDTE7.js.map → chunk-WUVEBQW6.js.map} +1 -1
  212. package/dist/cli-bundle/chunks/{chunk-Q4PSG2GV.js → chunk-WVA4DVNV.js} +5 -5
  213. package/dist/cli-bundle/chunks/{chunk-Q4PSG2GV.js.map → chunk-WVA4DVNV.js.map} +1 -1
  214. package/dist/cli-bundle/chunks/{chunk-4M6RZJXF.js → chunk-WWNL6WMH.js} +3 -3
  215. package/dist/cli-bundle/chunks/chunk-WWNL6WMH.js.map +7 -0
  216. package/dist/cli-bundle/chunks/{chunk-3KPNOZOH.js → chunk-X6K5XTTN.js} +78 -21
  217. package/dist/cli-bundle/chunks/chunk-X6K5XTTN.js.map +7 -0
  218. package/dist/cli-bundle/chunks/{chunk-G33XIMRT.js → chunk-XJF7CDNH.js} +17 -10
  219. package/dist/cli-bundle/chunks/{chunk-G33XIMRT.js.map → chunk-XJF7CDNH.js.map} +1 -1
  220. package/dist/cli-bundle/chunks/{chunk-AR24KW26.js → chunk-YBT7O4KT.js} +17 -112
  221. package/dist/cli-bundle/chunks/chunk-YBT7O4KT.js.map +7 -0
  222. package/dist/cli-bundle/chunks/{chunk-CZA2DXCV.js → chunk-YQQNAKW3.js} +17 -105
  223. package/dist/cli-bundle/chunks/chunk-YQQNAKW3.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-OKPZDH43.js → chunk-YQWCZ5AC.js} +7 -5
  225. package/dist/cli-bundle/chunks/{chunk-OKPZDH43.js.map → chunk-YQWCZ5AC.js.map} +2 -2
  226. package/dist/cli-bundle/chunks/{chunk-LT5UWU7H.js → chunk-ZOJ3LR7O.js} +2 -2
  227. package/dist/cli-bundle/chunks/{chunk-3HSRP6T2.js → chunk-ZOY5K4D3.js} +2 -2
  228. package/dist/cli-bundle/chunks/{chunk-XXWDEQ6O.js → chunk-ZV2NTVMJ.js} +4 -4
  229. package/dist/cli-bundle/chunks/{chunk-UW6HCMP2.js → chunk-ZYPFOO3L.js} +9 -9
  230. package/dist/cli-bundle/chunks/close-O5QVZ6ET.js +12 -0
  231. package/dist/cli-bundle/chunks/{close-7NWA3GLA.js → close-QEMOYZN3.js} +5 -5
  232. package/dist/cli-bundle/chunks/close-many-SDA426VT.js +24 -0
  233. package/dist/cli-bundle/chunks/{close-many-YALQ7AXS.js → close-many-UTZANOCQ.js} +15 -14
  234. package/dist/cli-bundle/chunks/{comments-SQIQ5WYR.js → comments-LZN6FXXC.js} +7 -7
  235. package/dist/cli-bundle/chunks/comments-VBQ345ND.js +13 -0
  236. package/dist/cli-bundle/chunks/{copy-YDAMENCP.js → copy-DKTSSCK7.js} +4 -4
  237. package/dist/cli-bundle/chunks/copy-M7DDI6LS.js +9 -0
  238. package/dist/cli-bundle/chunks/{create-JSL6CXU3.js → create-GG4RBCGC.js} +11 -11
  239. package/dist/cli-bundle/chunks/create-JBC5KUW6.js +29 -0
  240. package/dist/cli-bundle/chunks/{delete-IGVOZEU2.js → delete-LCS3VPDH.js} +4 -4
  241. package/dist/cli-bundle/chunks/delete-MD7YXQLH.js +10 -0
  242. package/dist/cli-bundle/chunks/{deps-BQAXUQAK.js → deps-DELOO4TL.js} +6 -6
  243. package/dist/cli-bundle/chunks/{deps-CBPPSS6J.js → deps-FI4O6NQS.js} +6 -6
  244. package/dist/cli-bundle/chunks/docs-2UYBP5D6.js +14 -0
  245. package/dist/cli-bundle/chunks/{docs-NS2AZWCN.js → docs-6Z2MP526.js} +6 -6
  246. package/dist/cli-bundle/chunks/{files-XUUBQ76I.js → files-HEUGSJZL.js} +6 -6
  247. package/dist/cli-bundle/chunks/{files-PVWEPT5J.js → files-HKEAN5MA.js} +6 -6
  248. package/dist/cli-bundle/chunks/{focus-DHBHKK3E.js → focus-7SOUT5PZ.js} +5 -5
  249. package/dist/cli-bundle/chunks/focus-DRQ6FQH6.js +10 -0
  250. package/dist/cli-bundle/chunks/history-compact-65YVN5DB.js +17 -0
  251. package/dist/cli-bundle/chunks/{history-compact-3TNPYVFG.js → history-compact-7NDVP3PT.js} +7 -6
  252. package/dist/cli-bundle/chunks/{history-redact-KKFDICCF.js → history-redact-7YBL4XSG.js} +5 -4
  253. package/dist/cli-bundle/chunks/{history-redact-ELRL73XN.js → history-redact-IZGNJBU4.js} +5 -4
  254. package/dist/cli-bundle/chunks/{history-repair-J7WKZFAG.js → history-repair-7M4PYQUH.js} +8 -6
  255. package/dist/cli-bundle/chunks/history-repair-GNGETJLI.js +18 -0
  256. package/dist/cli-bundle/chunks/learnings-3YXDRWFT.js +13 -0
  257. package/dist/cli-bundle/chunks/{learnings-X4D6JCCG.js → learnings-ALC6IMNL.js} +7 -7
  258. package/dist/cli-bundle/chunks/notes-7JMLQ447.js +13 -0
  259. package/dist/cli-bundle/chunks/{notes-UQC6VS6N.js → notes-JFCLTC5C.js} +7 -7
  260. package/dist/cli-bundle/chunks/plan-KOIPWVOZ.js +26 -0
  261. package/dist/cli-bundle/chunks/{plan-5GKRBJJO.js → plan-T3XB3WTK.js} +12 -12
  262. package/dist/cli-bundle/chunks/{profile-5PQAPCLF.js → profile-OILJHKUW.js} +12 -11
  263. package/dist/cli-bundle/chunks/{profile-CW4BD3FO.js → profile-RJXA7PGS.js} +12 -11
  264. package/dist/cli-bundle/chunks/{register-list-query-PHIPDFP2.js → register-list-query-CFVG75P3.js} +30 -21
  265. package/dist/cli-bundle/chunks/{register-list-query-PHIPDFP2.js.map → register-list-query-CFVG75P3.js.map} +1 -1
  266. package/dist/cli-bundle/chunks/{register-list-query-HTDQE6VI.js → register-list-query-E7UVY4TN.js} +29 -20
  267. package/dist/cli-bundle/chunks/{register-list-query-HTDQE6VI.js.map → register-list-query-E7UVY4TN.js.map} +2 -2
  268. package/dist/cli-bundle/chunks/{register-mutation-BLEWM5I6.js → register-mutation-4VJTXBZW.js} +86 -32
  269. package/dist/cli-bundle/chunks/register-mutation-4VJTXBZW.js.map +7 -0
  270. package/dist/cli-bundle/chunks/{register-mutation-OTYHR7J6.js → register-mutation-IQ55E25C.js} +78 -33
  271. package/dist/cli-bundle/chunks/register-mutation-IQ55E25C.js.map +1 -0
  272. package/dist/cli-bundle/chunks/{register-operations-AMCUFYEW.js → register-operations-AR7RMX4W.js} +42 -38
  273. package/dist/cli-bundle/chunks/register-operations-AR7RMX4W.js.map +1 -0
  274. package/dist/cli-bundle/chunks/{register-operations-MRLHOZYR.js → register-operations-NOLZGORC.js} +41 -37
  275. package/dist/cli-bundle/chunks/register-operations-NOLZGORC.js.map +7 -0
  276. package/dist/cli-bundle/chunks/{register-setup-ZVKTDL4G.js → register-setup-BB77VUEE.js} +17 -16
  277. package/dist/cli-bundle/chunks/{register-setup-ZVKTDL4G.js.map → register-setup-BB77VUEE.js.map} +1 -1
  278. package/dist/cli-bundle/chunks/{register-setup-N2FOSWAG.js → register-setup-EYZ7VTPZ.js} +15 -14
  279. package/dist/cli-bundle/chunks/{register-setup-N2FOSWAG.js.map → register-setup-EYZ7VTPZ.js.map} +1 -1
  280. package/dist/cli-bundle/chunks/restore-L6IAGOD7.js +15 -0
  281. package/dist/cli-bundle/chunks/{restore-HEQAG6EK.js → restore-ZH65GZFB.js} +7 -6
  282. package/dist/cli-bundle/chunks/{schema-Q5DAWJ2S.js → schema-4ERWM5QJ.js} +7 -6
  283. package/dist/cli-bundle/chunks/{schema-MAXAIHEC.js → schema-55DL3Q52.js} +7 -6
  284. package/dist/cli-bundle/chunks/{update-DWFXXJKP.js → update-FW6FKDOP.js} +15 -15
  285. package/dist/cli-bundle/chunks/update-TJHSPRPT.js +23 -0
  286. package/dist/cli-bundle/chunks/update-many-NNALYQCN.js +35 -0
  287. package/dist/cli-bundle/chunks/update-many-PWXX5WHO.js +39 -0
  288. package/dist/cli-bundle/main.js +62 -59
  289. package/dist/cli-bundle/main.js.map +1 -1
  290. package/dist/cli-bundle/sdk-runtime.js +62 -59
  291. package/dist/cli-bundle/sdk-testing.js +8 -8
  292. package/dist/cli-bundle/sdk.js +327 -57
  293. package/dist/cli-bundle/sdk.js.map +4 -4
  294. package/dist/core/config/nested-settings.d.ts +2 -0
  295. package/dist/core/config/nested-settings.js +18 -2
  296. package/dist/core/config/nested-settings.js.map +1 -1
  297. package/dist/core/diagnostics/remediation.js +38 -2
  298. package/dist/core/diagnostics/remediation.js.map +1 -1
  299. package/dist/core/extensions/extension-types.d.ts +1 -1
  300. package/dist/core/extensions/extension-types.js +2 -2
  301. package/dist/core/extensions/extension-types.js.map +1 -1
  302. package/dist/core/item/id.d.ts +19 -2
  303. package/dist/core/item/id.js +27 -6
  304. package/dist/core/item/id.js.map +1 -1
  305. package/dist/core/item/parse.d.ts +7 -0
  306. package/dist/core/item/parse.js +48 -2
  307. package/dist/core/item/parse.js.map +1 -1
  308. package/dist/core/schema/item-types-file.d.ts +2 -2
  309. package/dist/core/schema/item-types-file.js +2 -2
  310. package/dist/core/schema/item-types-file.js.map +1 -1
  311. package/dist/core/schema/runtime-schema.d.ts +3 -3
  312. package/dist/core/schema/runtime-schema.js +2 -2
  313. package/dist/core/schema/runtime-schema.js.map +1 -1
  314. package/dist/core/schema/type-workflows.d.ts +2 -2
  315. package/dist/core/schema/type-workflows.js +2 -2
  316. package/dist/core/schema/type-workflows.js.map +1 -1
  317. package/dist/core/shared/constants.js +5 -2
  318. package/dist/core/shared/constants.js.map +1 -1
  319. package/dist/core/store/settings-validator.d.ts +4 -0
  320. package/dist/core/store/settings-validator.js +8 -2
  321. package/dist/core/store/settings-validator.js.map +1 -1
  322. package/dist/core/store/settings.js +8 -2
  323. package/dist/core/store/settings.js.map +1 -1
  324. package/dist/sdk/annotations.js +24 -2
  325. package/dist/sdk/annotations.js.map +1 -1
  326. package/dist/sdk/cli-bootstrap.d.ts +1 -1
  327. package/dist/sdk/cli-bootstrap.js +3 -3
  328. package/dist/sdk/cli-bootstrap.js.map +1 -1
  329. package/dist/sdk/cli-contracts/commander-mutation-options.js +22 -2
  330. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
  331. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  332. package/dist/sdk/cli-contracts/enum-contracts.js +3 -2
  333. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  334. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  335. package/dist/sdk/cli-contracts/flag-contracts.js +17 -2
  336. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  337. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +512 -0
  338. package/dist/sdk/cli-contracts/tool-option-contracts.js +21 -11
  339. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  340. package/dist/sdk/cli-contracts/tool-parameter-tables.js +13 -3
  341. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  342. package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -0
  343. package/dist/sdk/cli-contracts/tool-schema.js +14 -10
  344. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  345. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +69 -0
  346. package/dist/sdk/cli-contracts/typed-action-inputs.js +5 -0
  347. package/dist/sdk/cli-contracts/typed-action-inputs.js.map +1 -0
  348. package/dist/sdk/cli-contracts.d.ts +4 -3
  349. package/dist/sdk/cli-contracts.js +5 -5
  350. package/dist/sdk/cli-contracts.js.map +1 -1
  351. package/dist/sdk/extension/describe.d.ts +1 -1
  352. package/dist/sdk/extension/describe.js +2 -2
  353. package/dist/sdk/extension/describe.js.map +1 -1
  354. package/dist/sdk/extension/install-runtime.js +5 -3
  355. package/dist/sdk/extension/install-runtime.js.map +1 -1
  356. package/dist/sdk/extension.d.ts +2 -2
  357. package/dist/sdk/extension.js +2 -2
  358. package/dist/sdk/extension.js.map +1 -1
  359. package/dist/sdk/governance/gc.d.ts +14 -1
  360. package/dist/sdk/governance/gc.js +38 -2
  361. package/dist/sdk/governance/gc.js.map +1 -1
  362. package/dist/sdk/governance/storage-integrity.d.ts +84 -0
  363. package/dist/sdk/governance/storage-integrity.js +240 -0
  364. package/dist/sdk/governance/storage-integrity.js.map +1 -0
  365. package/dist/sdk/governance/validate.d.ts +3 -1
  366. package/dist/sdk/governance/validate.js +56 -2
  367. package/dist/sdk/governance/validate.js.map +1 -1
  368. package/dist/sdk/history-read.d.ts +1 -1
  369. package/dist/sdk/history-read.js +2 -2
  370. package/dist/sdk/history-read.js.map +1 -1
  371. package/dist/sdk/history-repair.d.ts +36 -0
  372. package/dist/sdk/history-repair.js +69 -4
  373. package/dist/sdk/history-repair.js.map +1 -1
  374. package/dist/sdk/index.d.ts +5 -2
  375. package/dist/sdk/index.js +5 -2
  376. package/dist/sdk/index.js.map +1 -1
  377. package/dist/sdk/init.js +3 -3
  378. package/dist/sdk/init.js.map +1 -1
  379. package/dist/sdk/item-transaction.d.ts +131 -0
  380. package/dist/sdk/item-transaction.js +280 -0
  381. package/dist/sdk/item-transaction.js.map +1 -0
  382. package/dist/sdk/merge/driver.d.ts +75 -0
  383. package/dist/sdk/merge/driver.js +166 -0
  384. package/dist/sdk/merge/driver.js.map +1 -0
  385. package/dist/sdk/merge/index.d.ts +11 -0
  386. package/dist/sdk/merge/index.js +15 -0
  387. package/dist/sdk/merge/index.js.map +1 -0
  388. package/dist/sdk/merge/install.d.ts +90 -0
  389. package/dist/sdk/merge/install.js +318 -0
  390. package/dist/sdk/merge/install.js.map +1 -0
  391. package/dist/sdk/merge/three-way.d.ts +126 -0
  392. package/dist/sdk/merge/three-way.js +545 -0
  393. package/dist/sdk/merge/three-way.js.map +1 -0
  394. package/dist/sdk/query/list.d.ts +19 -2
  395. package/dist/sdk/query/list.js +5 -2
  396. package/dist/sdk/query/list.js.map +1 -1
  397. package/dist/sdk/runtime.d.ts +17 -14
  398. package/dist/sdk/runtime.js +5 -5
  399. package/dist/sdk/runtime.js.map +1 -1
  400. package/dist/sdk/schema.d.ts +2 -2
  401. package/dist/sdk/schema.js +29 -2
  402. package/dist/sdk/schema.js.map +1 -1
  403. package/dist/sdk/stats.d.ts +1 -1
  404. package/dist/sdk/stats.js +2 -2
  405. package/dist/sdk/stats.js.map +1 -1
  406. package/dist/sdk/workspace-transaction-gc.d.ts +46 -0
  407. package/dist/sdk/workspace-transaction-gc.js +155 -0
  408. package/dist/sdk/workspace-transaction-gc.js.map +1 -0
  409. package/dist/sdk/workspace.d.ts +28 -4
  410. package/dist/sdk/workspace.js +61 -15
  411. package/dist/sdk/workspace.js.map +1 -1
  412. package/dist/types.d.ts +11 -7
  413. package/dist/types.js +2 -2
  414. package/dist/types.js.map +1 -1
  415. package/docs/AGENT_GUIDE.md +58 -47
  416. package/docs/COMMANDS.md +7 -0
  417. package/docs/CONFIGURATION.md +2 -0
  418. package/docs/MERGE_SAFETY.md +99 -0
  419. package/docs/README.md +1 -0
  420. package/docs/SDK.md +56 -0
  421. package/marketplace.json +2 -2
  422. package/package.json +3 -2
  423. package/packages/pm-beads/package.json +1 -1
  424. package/packages/pm-calendar/package.json +1 -1
  425. package/packages/pm-command-kit/package.json +1 -1
  426. package/packages/pm-governance-audit/package.json +1 -1
  427. package/packages/pm-guide-shell/package.json +1 -1
  428. package/packages/pm-kanban/package.json +1 -1
  429. package/packages/pm-lifecycle-hooks/package.json +1 -1
  430. package/packages/pm-linked-test-adapters/package.json +1 -1
  431. package/packages/pm-search-advanced/package.json +1 -1
  432. package/packages/pm-templates/package.json +1 -1
  433. package/packages/pm-todos/package.json +1 -1
  434. package/packages/pm-vcs/package.json +1 -1
  435. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  436. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  437. package/dist/cli-bundle/chunks/append-XUYF7NON.js +0 -11
  438. package/dist/cli-bundle/chunks/chunk-2XPDCXK5.js.map +0 -1
  439. package/dist/cli-bundle/chunks/chunk-3EZZTFL2.js.map +0 -7
  440. package/dist/cli-bundle/chunks/chunk-3KPNOZOH.js.map +0 -7
  441. package/dist/cli-bundle/chunks/chunk-46Z6FAVP.js.map +0 -1
  442. package/dist/cli-bundle/chunks/chunk-4M6RZJXF.js.map +0 -7
  443. package/dist/cli-bundle/chunks/chunk-6V4T4RD3.js.map +0 -1
  444. package/dist/cli-bundle/chunks/chunk-A3GAQLBH.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-A4FVWFZY.js.map +0 -7
  446. package/dist/cli-bundle/chunks/chunk-A5EQPNV7.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-AR24KW26.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-BBGR4FKQ.js.map +0 -1
  449. package/dist/cli-bundle/chunks/chunk-BDC4TW4B.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-BZKE2O5V.js.map +0 -1
  451. package/dist/cli-bundle/chunks/chunk-CZA2DXCV.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-D35WYXWC.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-DJAGYYCQ.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-EEECAV5M.js.map +0 -7
  455. package/dist/cli-bundle/chunks/chunk-H3YKUVDR.js.map +0 -1
  456. package/dist/cli-bundle/chunks/chunk-IDUTGRDM.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-IGBBTPM5.js.map +0 -1
  458. package/dist/cli-bundle/chunks/chunk-JBW2S2C6.js.map +0 -7
  459. package/dist/cli-bundle/chunks/chunk-JPWUZOMR.js.map +0 -1
  460. package/dist/cli-bundle/chunks/chunk-KAE727L2.js.map +0 -7
  461. package/dist/cli-bundle/chunks/chunk-MI3346YW.js.map +0 -1
  462. package/dist/cli-bundle/chunks/chunk-MQOSMBWV.js.map +0 -7
  463. package/dist/cli-bundle/chunks/chunk-MRXAHR4B.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-N2TEEOXJ.js.map +0 -7
  465. package/dist/cli-bundle/chunks/chunk-ODEIDKGW.js.map +0 -1
  466. package/dist/cli-bundle/chunks/chunk-P24ZU5QV.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-Q3K5XPAQ.js.map +0 -7
  468. package/dist/cli-bundle/chunks/chunk-QFG4MB7P.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-RLLOZAM2.js.map +0 -7
  470. package/dist/cli-bundle/chunks/chunk-RWAIRGBC.js.map +0 -7
  471. package/dist/cli-bundle/chunks/chunk-SBW7EQC4.js.map +0 -1
  472. package/dist/cli-bundle/chunks/chunk-SVAWG7EE.js.map +0 -1
  473. package/dist/cli-bundle/chunks/chunk-UE7LK3RE.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-VA3H7VVC.js.map +0 -1
  475. package/dist/cli-bundle/chunks/chunk-WCBB6VI3.js.map +0 -7
  476. package/dist/cli-bundle/chunks/chunk-Y2VSGFT4.js.map +0 -1
  477. package/dist/cli-bundle/chunks/chunk-YG56M3NE.js.map +0 -1
  478. package/dist/cli-bundle/chunks/chunk-ZF52NVRT.js.map +0 -7
  479. package/dist/cli-bundle/chunks/chunk-ZUCBPXNA.js.map +0 -7
  480. package/dist/cli-bundle/chunks/close-ZZCDDWJT.js +0 -12
  481. package/dist/cli-bundle/chunks/close-many-QCZHFCON.js +0 -23
  482. package/dist/cli-bundle/chunks/comments-FMQNYPSZ.js +0 -13
  483. package/dist/cli-bundle/chunks/copy-GI3RCVZP.js +0 -9
  484. package/dist/cli-bundle/chunks/create-LXMLYJNM.js +0 -29
  485. package/dist/cli-bundle/chunks/delete-5DFAXJNI.js +0 -10
  486. package/dist/cli-bundle/chunks/docs-KCWPLQOV.js +0 -14
  487. package/dist/cli-bundle/chunks/focus-3EJVFI3D.js +0 -10
  488. package/dist/cli-bundle/chunks/history-compact-JHYVDYLW.js +0 -16
  489. package/dist/cli-bundle/chunks/history-repair-REMI7DDI.js +0 -16
  490. package/dist/cli-bundle/chunks/learnings-O6V5WDCV.js +0 -13
  491. package/dist/cli-bundle/chunks/notes-ZSZREWZA.js +0 -13
  492. package/dist/cli-bundle/chunks/plan-EZW2YDDY.js +0 -26
  493. package/dist/cli-bundle/chunks/register-mutation-BLEWM5I6.js.map +0 -7
  494. package/dist/cli-bundle/chunks/register-mutation-OTYHR7J6.js.map +0 -1
  495. package/dist/cli-bundle/chunks/register-operations-AMCUFYEW.js.map +0 -1
  496. package/dist/cli-bundle/chunks/register-operations-MRLHOZYR.js.map +0 -7
  497. package/dist/cli-bundle/chunks/restore-A55MLFAI.js +0 -14
  498. package/dist/cli-bundle/chunks/update-5DTSCWVF.js +0 -23
  499. package/dist/cli-bundle/chunks/update-many-6T4ZLZS7.js +0 -34
  500. package/dist/cli-bundle/chunks/update-many-MYRK6VBJ.js +0 -38
  501. /package/dist/cli-bundle/chunks/{append-MBXHNWSX.js.map → append-E6V54WOQ.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{append-XUYF7NON.js.map → append-NNJ3EFIT.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-YGEA4CLH.js.map → chunk-3MCTMJXI.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-N7FCFJ76.js.map → chunk-3P7UJQOX.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-7B7IHMLH.js.map → chunk-3VY6MIEO.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{chunk-5S6IZXK7.js.map → chunk-4U4Z6AHI.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{chunk-UOIFZ66L.js.map → chunk-4XGJLADW.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{chunk-SUNZKVAH.js.map → chunk-5IZJWSDB.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{chunk-QQ77W23U.js.map → chunk-5NTE36LD.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{chunk-KGPLSHJD.js.map → chunk-6C2ZZX5Z.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{chunk-Q5NHJ6RO.js.map → chunk-6JUTHVQS.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{chunk-NTS2RKHN.js.map → chunk-6VIJ7UA5.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{chunk-XVB6BATY.js.map → chunk-72LQ4TKV.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{chunk-KZ5AC6B5.js.map → chunk-7WCE6Y64.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{chunk-VQOG2ETB.js.map → chunk-AF2CCM5U.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{chunk-EAV3P54W.js.map → chunk-DAQ45GCS.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{chunk-RX53WHFI.js.map → chunk-EJDGV4GR.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{chunk-IXG5CMBR.js.map → chunk-FDHPAVVB.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{chunk-V4QHAMI5.js.map → chunk-GROYI4RB.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{chunk-77XFQRTD.js.map → chunk-GSJSM5BJ.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{chunk-QYGK2XQ3.js.map → chunk-GTLCVJOE.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{chunk-VSQE43NO.js.map → chunk-GV2262OF.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{chunk-STBCBDKF.js.map → chunk-HCEBZNC3.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{chunk-U6RYD446.js.map → chunk-HRW7GF6T.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{chunk-XDWXPG2E.js.map → chunk-IAQE32BI.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{chunk-66SRNEBK.js.map → chunk-IJNK6WW2.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{chunk-AGEBQRBG.js.map → chunk-JAPE62Y5.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{chunk-UWAQI3B7.js.map → chunk-JGUKMMRS.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{chunk-UU6EP25G.js.map → chunk-JH2ZSLO3.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{chunk-GRDK25BN.js.map → chunk-JHJSFOAM.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{chunk-FQO5THHM.js.map → chunk-JM6YAXTR.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{chunk-E7KBMWEF.js.map → chunk-JSLT7WVE.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{chunk-FIUTBFC6.js.map → chunk-K4CI6Y45.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{chunk-IEMXESIS.js.map → chunk-KSPWRNVP.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{chunk-BFJP4VYC.js.map → chunk-L7BH7IWU.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{chunk-2UCG5H6B.js.map → chunk-LPEYZRUR.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{chunk-IR3GOO6E.js.map → chunk-NHT3F4WZ.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{chunk-6BNV3G6C.js.map → chunk-NLR32VFS.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{chunk-EI3UIMZM.js.map → chunk-OWXOPDHD.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{chunk-AQUNTB7G.js.map → chunk-PEQGTJ5Q.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-T6MOTLOJ.js.map → chunk-QJKL5PHS.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-XKVHL3MB.js.map → chunk-QWRVBJ4D.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-VFA5EIEN.js.map → chunk-R7QV7ICM.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-K2L6FZBX.js.map → chunk-RJO3YAFM.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-SGJB6PXA.js.map → chunk-SF3DT5HJ.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-UNNCT5QY.js.map → chunk-SZVB53Y3.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-GFZB5CLP.js.map → chunk-T6PPNM7V.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-W6IEJXNC.js.map → chunk-TVYYO5A7.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-DOASIOQR.js.map → chunk-UQLXSG72.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-7CHWLT2J.js.map → chunk-UVN66B3M.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-Q6JPYR7I.js.map → chunk-UX6SSO2I.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-OK7VSX3N.js.map → chunk-UZLJOEAC.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-4PSJVGRE.js.map → chunk-VDO2JMD4.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-IRJ6F23W.js.map → chunk-VQIHNHMJ.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-LT5UWU7H.js.map → chunk-ZOJ3LR7O.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-3HSRP6T2.js.map → chunk-ZOY5K4D3.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-XXWDEQ6O.js.map → chunk-ZV2NTVMJ.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-UW6HCMP2.js.map → chunk-ZYPFOO3L.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{close-ZZCDDWJT.js.map → close-O5QVZ6ET.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{close-7NWA3GLA.js.map → close-QEMOYZN3.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{close-many-QCZHFCON.js.map → close-many-SDA426VT.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{close-many-YALQ7AXS.js.map → close-many-UTZANOCQ.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{comments-SQIQ5WYR.js.map → comments-LZN6FXXC.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{comments-FMQNYPSZ.js.map → comments-VBQ345ND.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{copy-YDAMENCP.js.map → copy-DKTSSCK7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{copy-GI3RCVZP.js.map → copy-M7DDI6LS.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{create-JSL6CXU3.js.map → create-GG4RBCGC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{create-LXMLYJNM.js.map → create-JBC5KUW6.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{delete-IGVOZEU2.js.map → delete-LCS3VPDH.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{delete-5DFAXJNI.js.map → delete-MD7YXQLH.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{deps-BQAXUQAK.js.map → deps-DELOO4TL.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{deps-CBPPSS6J.js.map → deps-FI4O6NQS.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{docs-KCWPLQOV.js.map → docs-2UYBP5D6.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{docs-NS2AZWCN.js.map → docs-6Z2MP526.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{files-XUUBQ76I.js.map → files-HEUGSJZL.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{files-PVWEPT5J.js.map → files-HKEAN5MA.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{focus-DHBHKK3E.js.map → focus-7SOUT5PZ.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{focus-3EJVFI3D.js.map → focus-DRQ6FQH6.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{history-compact-JHYVDYLW.js.map → history-compact-65YVN5DB.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{history-compact-3TNPYVFG.js.map → history-compact-7NDVP3PT.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{history-redact-KKFDICCF.js.map → history-redact-7YBL4XSG.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{history-redact-ELRL73XN.js.map → history-redact-IZGNJBU4.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{history-repair-J7WKZFAG.js.map → history-repair-7M4PYQUH.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{history-repair-REMI7DDI.js.map → history-repair-GNGETJLI.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{learnings-O6V5WDCV.js.map → learnings-3YXDRWFT.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{learnings-X4D6JCCG.js.map → learnings-ALC6IMNL.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{notes-ZSZREWZA.js.map → notes-7JMLQ447.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{notes-UQC6VS6N.js.map → notes-JFCLTC5C.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{plan-EZW2YDDY.js.map → plan-KOIPWVOZ.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{plan-5GKRBJJO.js.map → plan-T3XB3WTK.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{profile-5PQAPCLF.js.map → profile-OILJHKUW.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{profile-CW4BD3FO.js.map → profile-RJXA7PGS.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{restore-A55MLFAI.js.map → restore-L6IAGOD7.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{restore-HEQAG6EK.js.map → restore-ZH65GZFB.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{schema-Q5DAWJ2S.js.map → schema-4ERWM5QJ.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{schema-MAXAIHEC.js.map → schema-55DL3Q52.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{update-DWFXXJKP.js.map → update-FW6FKDOP.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{update-5DTSCWVF.js.map → update-TJHSPRPT.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{update-many-6T4ZLZS7.js.map → update-many-NNALYQCN.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{update-many-MYRK6VBJ.js.map → update-many-PWXX5WHO.js.map} +0 -0
@@ -0,0 +1,344 @@
1
+ import {
2
+ acquireLock,
3
+ getActiveExtensionRegistrations,
4
+ nowIso,
5
+ readSettings,
6
+ resolveGovernanceKnobs
7
+ } from "./chunk-IY6VZ3IW.js";
8
+ import {
9
+ EXIT_CODE,
10
+ PmCliError,
11
+ getSettingsPath,
12
+ pathExists,
13
+ resolveItemTypeRegistry,
14
+ resolvePmRoot
15
+ } from "./chunk-7AVEY74G.js";
16
+
17
+ // dist/sdk/workspace.js
18
+ import { readFile, writeFile } from "node:fs/promises";
19
+ import path from "node:path";
20
+ !(function() {
21
+ try {
22
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
23
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "2ebcdfcf-c29b-50d6-940d-299d7699059a");
24
+ } catch (e2) {
25
+ }
26
+ })();
27
+ var PM_GITIGNORE_START = "# pm-cli:runtime-cache:start";
28
+ var PM_GITIGNORE_END = "# pm-cli:runtime-cache:end";
29
+ var PM_GITIGNORE_DEFAULT_TRACKER_ROOT = ".agents/pm";
30
+ var PM_GITIGNORE_RUNTIME_DIRECTORIES = [
31
+ "runtime/",
32
+ "search/",
33
+ "locks/",
34
+ "transactions/",
35
+ "checkpoints/"
36
+ ];
37
+ function normalizeTrackerRelativeRoot(trackerRelativeRoot) {
38
+ return trackerRelativeRoot.replaceAll("\\", "/").replace(/^\.\/+/, "").replace(/\/+$/, "");
39
+ }
40
+ function isPathOutsideRoot(relativePath) {
41
+ const normalized = relativePath.replaceAll("\\", "/");
42
+ return path.isAbsolute(relativePath) || normalized === ".." || normalized.startsWith("../");
43
+ }
44
+ function getPmGitignoreBlock(trackerRelativeRoot = PM_GITIGNORE_DEFAULT_TRACKER_ROOT) {
45
+ const root = normalizeTrackerRelativeRoot(trackerRelativeRoot);
46
+ return [
47
+ PM_GITIGNORE_START,
48
+ ...PM_GITIGNORE_RUNTIME_DIRECTORIES.map((directory) => `${root}/${directory}`),
49
+ PM_GITIGNORE_END
50
+ ].join("\n");
51
+ }
52
+ async function ensurePmGitignore(workspaceRoot, options = {}) {
53
+ const gitignorePath = path.join(workspaceRoot, ".gitignore");
54
+ let trackerRelativeRoot = PM_GITIGNORE_DEFAULT_TRACKER_ROOT;
55
+ if (options.pmRoot !== void 0) {
56
+ const relative = normalizeTrackerRelativeRoot(path.relative(path.resolve(workspaceRoot), path.resolve(options.pmRoot)));
57
+ if (isPathOutsideRoot(relative)) {
58
+ return { path: gitignorePath, changed: false };
59
+ }
60
+ if (relative.length > 0) {
61
+ trackerRelativeRoot = relative;
62
+ }
63
+ }
64
+ let current = "";
65
+ try {
66
+ current = await readFile(gitignorePath, "utf8");
67
+ } catch (error) {
68
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
69
+ throw error;
70
+ }
71
+ }
72
+ const start = current.indexOf(PM_GITIGNORE_START);
73
+ const end = current.indexOf(PM_GITIGNORE_END);
74
+ const withoutManagedBlock = start >= 0 && end >= start ? `${current.slice(0, start)}${current.slice(end + PM_GITIGNORE_END.length)}` : current;
75
+ const prefix = withoutManagedBlock.trimEnd();
76
+ const next = `${prefix.length > 0 ? `${prefix}
77
+
78
+ ` : ""}${getPmGitignoreBlock(trackerRelativeRoot)}
79
+ `;
80
+ if (next === current) {
81
+ return { path: gitignorePath, changed: false };
82
+ }
83
+ await writeFile(gitignorePath, next, "utf8");
84
+ return { path: gitignorePath, changed: true };
85
+ }
86
+
87
+ // dist/sdk/merge/install.js
88
+ import { readFile as readFile2, writeFile as writeFile2 } from "node:fs/promises";
89
+ import { execFile } from "node:child_process";
90
+ import path2 from "node:path";
91
+ import { promisify } from "node:util";
92
+ !(function() {
93
+ try {
94
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
95
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "86f1b43a-3b30-5791-ba03-fc362dfe5585");
96
+ } catch (e2) {
97
+ }
98
+ })();
99
+ var execFileAsync = promisify(execFile);
100
+ var PM_GITATTRIBUTES_START = "# pm-cli:merge-drivers:start";
101
+ var PM_GITATTRIBUTES_END = "# pm-cli:merge-drivers:end";
102
+ var MERGE_FENCE_LOCK_ID = "merge-fence";
103
+ var MERGE_DRIVER_DEFINITIONS = [
104
+ {
105
+ key: "pm-item-toon",
106
+ name: "pm field-aware TOON item document merge",
107
+ artifact: "item",
108
+ itemPath: "item.toon"
109
+ },
110
+ {
111
+ key: "pm-item-markdown",
112
+ name: "pm field-aware JSON-markdown item document merge",
113
+ artifact: "item",
114
+ itemPath: "item.md"
115
+ },
116
+ {
117
+ key: "pm-history",
118
+ name: "pm append-only history stream merge",
119
+ artifact: "history",
120
+ itemPath: void 0
121
+ },
122
+ {
123
+ key: "pm-relationship",
124
+ name: "pm append-only relationship event store merge",
125
+ artifact: "relationship",
126
+ itemPath: void 0
127
+ },
128
+ {
129
+ key: "pm-json",
130
+ name: "pm key-level JSON config merge",
131
+ artifact: "json",
132
+ itemPath: void 0
133
+ }
134
+ ];
135
+ async function resolveGitWorkspaceRoot(cwd) {
136
+ try {
137
+ const { stdout } = await execFileAsync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8", windowsHide: true, timeout: 1e4 });
138
+ return stdout.trim();
139
+ } catch {
140
+ throw new PmCliError("pm merge install requires a git repository (merge drivers are git configuration).", EXIT_CODE.USAGE);
141
+ }
142
+ }
143
+ function toPosixRelative(fromPath, toPath) {
144
+ return path2.relative(fromPath, toPath).replaceAll("\\", "/");
145
+ }
146
+ function quoteGitAttributePattern(value) {
147
+ return `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
148
+ }
149
+ function buildMergeAttributePatterns(trackerRelativeRoot, typeFolders) {
150
+ const prefix = trackerRelativeRoot.length > 0 ? `${trackerRelativeRoot}/` : "";
151
+ const patterns = [];
152
+ for (const folder of typeFolders) {
153
+ patterns.push(`${quoteGitAttributePattern(`${prefix}${folder}/*.toon`)} merge=pm-item-toon`);
154
+ patterns.push(`${quoteGitAttributePattern(`${prefix}${folder}/*.md`)} merge=pm-item-markdown`);
155
+ }
156
+ patterns.push(`${quoteGitAttributePattern(`${prefix}**/*.jsonl`)} merge=pm-relationship`);
157
+ patterns.push(`${quoteGitAttributePattern(`${prefix}history/*.jsonl`)} merge=pm-history`);
158
+ patterns.push(`${quoteGitAttributePattern(`${prefix}settings.json`)} merge=pm-json`);
159
+ patterns.push(`${quoteGitAttributePattern(`${prefix}schema/*.json`)} merge=pm-json`);
160
+ return patterns;
161
+ }
162
+ async function reconcileGitattributesBlock(workspaceRoot, patterns, dryRun) {
163
+ const gitattributesPath = path2.join(workspaceRoot, ".gitattributes");
164
+ let current = "";
165
+ try {
166
+ current = await readFile2(gitattributesPath, "utf8");
167
+ } catch (error) {
168
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
169
+ throw error;
170
+ }
171
+ }
172
+ const block = [
173
+ PM_GITATTRIBUTES_START,
174
+ ...patterns,
175
+ PM_GITATTRIBUTES_END
176
+ ].join("\n");
177
+ const start = current.indexOf(PM_GITATTRIBUTES_START);
178
+ const end = current.indexOf(PM_GITATTRIBUTES_END);
179
+ 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, "");
180
+ const prefix = withoutManagedBlock.trimEnd();
181
+ const next = `${prefix.length > 0 ? `${prefix}
182
+
183
+ ` : ""}${block}
184
+ `;
185
+ if (next === current) {
186
+ return { path: gitattributesPath, changed: false };
187
+ }
188
+ if (!dryRun) {
189
+ await writeFile2(gitattributesPath, next, "utf8");
190
+ }
191
+ return { path: gitattributesPath, changed: true };
192
+ }
193
+ async function auditMergeAttributeFence(pmRoot, typeFolders) {
194
+ const resolvedRoot = path2.resolve(pmRoot);
195
+ let fenceDirectory = null;
196
+ let fenceContent = "";
197
+ let directory = resolvedRoot;
198
+ for (let depth = 0; depth < 8; depth += 1) {
199
+ const candidate = path2.join(directory, ".gitattributes");
200
+ try {
201
+ const raw = await readFile2(candidate, "utf8");
202
+ if (raw.includes(PM_GITATTRIBUTES_START)) {
203
+ fenceDirectory = directory;
204
+ fenceContent = raw;
205
+ break;
206
+ }
207
+ } catch {
208
+ }
209
+ const parent = path2.dirname(directory);
210
+ if (parent === directory) {
211
+ break;
212
+ }
213
+ directory = parent;
214
+ }
215
+ if (fenceDirectory === null) {
216
+ return { status: "not_installed", missing_patterns: [], stale_patterns: [] };
217
+ }
218
+ const fencePath = path2.join(fenceDirectory, ".gitattributes");
219
+ const start = fenceContent.indexOf(PM_GITATTRIBUTES_START);
220
+ const end = fenceContent.indexOf(PM_GITATTRIBUTES_END);
221
+ const committed = end > start ? fenceContent.slice(start + PM_GITATTRIBUTES_START.length, end).split("\n").map((line) => line.trim()).filter((line) => line.length > 0) : [];
222
+ const expected = buildMergeAttributePatterns(toPosixRelative(fenceDirectory, resolvedRoot), typeFolders);
223
+ const committedSet = new Set(committed);
224
+ const expectedSet = new Set(expected);
225
+ const missing = expected.filter((line) => !committedSet.has(line));
226
+ const stale = committed.filter((line) => !expectedSet.has(line));
227
+ return {
228
+ status: missing.length > 0 || stale.length > 0 ? "drift" : "ok",
229
+ path: fencePath,
230
+ missing_patterns: missing,
231
+ stale_patterns: stale
232
+ };
233
+ }
234
+ async function refreshMergeAttributeFenceIfInstalled(pmRoot) {
235
+ let workspaceRoot;
236
+ try {
237
+ workspaceRoot = await resolveGitWorkspaceRoot(path2.resolve(pmRoot));
238
+ } catch {
239
+ return { status: "no_git" };
240
+ }
241
+ const trackerRelativeRoot = toPosixRelative(workspaceRoot, path2.resolve(pmRoot));
242
+ const lockSettings = await readSettings(pmRoot);
243
+ const owner = (process.env.PM_AUTHOR ?? lockSettings.author_default).trim();
244
+ 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);
245
+ try {
246
+ const gitattributesPath = path2.join(workspaceRoot, ".gitattributes");
247
+ let current;
248
+ try {
249
+ current = await readFile2(gitattributesPath, "utf8");
250
+ } catch (error) {
251
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
252
+ return { status: "not_installed", path: gitattributesPath };
253
+ }
254
+ throw error;
255
+ }
256
+ if (!current.includes(PM_GITATTRIBUTES_START)) {
257
+ return { status: "not_installed", path: gitattributesPath };
258
+ }
259
+ const settings = await readSettings(pmRoot);
260
+ const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
261
+ const typeFolders = [
262
+ ...new Set(Object.values(typeRegistry.type_to_folder))
263
+ ].sort((left, right) => left.localeCompare(right));
264
+ const outcome = await reconcileGitattributesBlock(workspaceRoot, buildMergeAttributePatterns(trackerRelativeRoot, typeFolders), false);
265
+ return {
266
+ status: outcome.changed ? "refreshed" : "unchanged",
267
+ path: outcome.path
268
+ };
269
+ } finally {
270
+ await releaseLock();
271
+ }
272
+ }
273
+ async function runMergeInstall(options, global2) {
274
+ const pmRoot = resolvePmRoot(process.cwd(), global2.path);
275
+ if (!await pathExists(getSettingsPath(pmRoot))) {
276
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
277
+ }
278
+ const dryRun = options.dryRun === true;
279
+ const workspaceRoot = await resolveGitWorkspaceRoot(process.cwd());
280
+ const trackerRelativeRoot = toPosixRelative(workspaceRoot, path2.resolve(pmRoot));
281
+ if (isPathOutsideRoot(trackerRelativeRoot)) {
282
+ throw new PmCliError(`Tracker root ${pmRoot} is outside the git repository ${workspaceRoot}; there is nothing to configure for this repository.`, EXIT_CODE.USAGE);
283
+ }
284
+ const settings = await readSettings(pmRoot);
285
+ const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
286
+ const typeFolders = [
287
+ ...new Set(Object.values(typeRegistry.type_to_folder))
288
+ ].sort((left, right) => left.localeCompare(right));
289
+ const patterns = buildMergeAttributePatterns(trackerRelativeRoot, typeFolders);
290
+ const gitattributes = await reconcileGitattributesBlock(workspaceRoot, patterns, dryRun);
291
+ const gitConfigEntries = [];
292
+ for (const definition of MERGE_DRIVER_DEFINITIONS) {
293
+ gitConfigEntries.push({
294
+ key: `merge.${definition.key}.name`,
295
+ value: definition.name
296
+ });
297
+ gitConfigEntries.push({
298
+ key: `merge.${definition.key}.driver`,
299
+ value: `pm merge driver ${definition.artifact} "%O" "%A" "%B"${definition.itemPath === void 0 ? "" : ` --item-path ${definition.itemPath}`}`
300
+ });
301
+ }
302
+ if (!dryRun) {
303
+ for (const entry of gitConfigEntries) {
304
+ await execFileAsync("git", ["config", entry.key, entry.value], {
305
+ cwd: workspaceRoot,
306
+ encoding: "utf8",
307
+ windowsHide: true,
308
+ timeout: 1e4
309
+ });
310
+ }
311
+ }
312
+ return {
313
+ ok: true,
314
+ dry_run: dryRun,
315
+ workspace_root: workspaceRoot,
316
+ gitattributes: {
317
+ path: gitattributes.path,
318
+ changed: gitattributes.changed,
319
+ patterns
320
+ },
321
+ git_config: gitConfigEntries,
322
+ guidance: [
323
+ "Commit .gitattributes so every branch and collaborator shares the merge mapping.",
324
+ 'git config is per-clone: each collaborator (and each fresh worktree/clone) runs "pm merge install" once.',
325
+ 'After merging branches, run "pm validate" and, if history drift is reported, "pm history-repair --all" to reconcile item state with merged history.',
326
+ "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."
327
+ ],
328
+ generated_at: nowIso()
329
+ };
330
+ }
331
+
332
+ export {
333
+ PM_GITIGNORE_START,
334
+ PM_GITIGNORE_END,
335
+ getPmGitignoreBlock,
336
+ ensurePmGitignore,
337
+ PM_GITATTRIBUTES_START,
338
+ PM_GITATTRIBUTES_END,
339
+ buildMergeAttributePatterns,
340
+ auditMergeAttributeFence,
341
+ refreshMergeAttributeFenceIfInstalled,
342
+ runMergeInstall
343
+ };
344
+ //# sourceMappingURL=chunk-R5U2VZ3K.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../sdk/workspace.ts", "../../../../../../../../sdk/merge/install.ts"],
4
+ "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"],
5
+ "mappings": "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",
6
+ "names": ["readFile", "writeFile", "path", "path", "readFile", "writeFile", "global"]
7
+ }
@@ -8,10 +8,10 @@ import {
8
8
  import {
9
9
  describeExtensionActivation,
10
10
  renderExtensionSurfaceMarkdown
11
- } from "./chunk-Q5NHJ6RO.js";
11
+ } from "./chunk-6JUTHVQS.js";
12
12
  import {
13
13
  lintProjectProfile
14
- } from "./chunk-GRDK25BN.js";
14
+ } from "./chunk-JHJSFOAM.js";
15
15
  import {
16
16
  RESERVED_ITEM_FIELD_NAMES,
17
17
  activateExtensions,
@@ -36,7 +36,7 @@ import {
36
36
  runPreflightOverride,
37
37
  runRendererOverride,
38
38
  runServiceOverride
39
- } from "./chunk-D35WYXWC.js";
39
+ } from "./chunk-HYW67VJ5.js";
40
40
 
41
41
  // dist/sdk/compose.js
42
42
  function defineExtension(module) {
@@ -1464,6 +1464,6 @@ export {
1464
1464
  assertExtensionPreflight,
1465
1465
  createExtensionTestHarness
1466
1466
  };
1467
- //# sourceMappingURL=chunk-VFA5EIEN.js.map
1467
+ //# sourceMappingURL=chunk-R7QV7ICM.js.map
1468
1468
 
1469
1469
  //# debugId=43264edf-a482-50c9-a2cd-c1d4a830505c
@@ -1,19 +1,21 @@
1
1
  import {
2
2
  lifecycleClassifierFromStatusRegistry
3
- } from "./chunk-N7FCFJ76.js";
3
+ } from "./chunk-3P7UJQOX.js";
4
4
  import {
5
5
  applyHistoryPatch,
6
- cloneEmptyReplayDocument,
7
6
  executeHistoryRewrite,
8
- historyEntriesToRaw,
9
7
  readHistoryEntries,
8
+ resolveHistorySubject,
9
+ writeHistoryRawWithRollback
10
+ } from "./chunk-C3KD7U3T.js";
11
+ import {
12
+ cloneEmptyReplayDocument,
13
+ historyEntriesToRaw,
10
14
  replayHash,
11
15
  replayToItemDocument,
12
- resolveHistorySubject,
13
16
  toReplayDocument,
14
- verifyHistoryChain,
15
- writeHistoryRawWithRollback
16
- } from "./chunk-RWAIRGBC.js";
17
+ verifyHistoryChain
18
+ } from "./chunk-E6LEMURX.js";
17
19
  import {
18
20
  resolveAuthor
19
21
  } from "./chunk-YRYYFGV3.js";
@@ -26,7 +28,7 @@ import {
26
28
  readSettings,
27
29
  runActiveOnReadHooks,
28
30
  runActiveOnWriteHooks
29
- } from "./chunk-RLLOZAM2.js";
31
+ } from "./chunk-IY6VZ3IW.js";
30
32
  import {
31
33
  EXIT_CODE,
32
34
  PmCliError,
@@ -36,7 +38,7 @@ import {
36
38
  resolveItemTypeRegistry,
37
39
  resolvePmRoot,
38
40
  resolveRuntimeStatusRegistry
39
- } from "./chunk-WCBB6VI3.js";
41
+ } from "./chunk-7AVEY74G.js";
40
42
 
41
43
  // dist/sdk/history-compact.js
42
44
  import fs from "node:fs/promises";
@@ -605,4 +607,4 @@ export {
605
607
  assertHistoryCompactTarget,
606
608
  runHistoryCompactBulk
607
609
  };
608
- //# sourceMappingURL=chunk-NPEYH6CE.js.map
610
+ //# sourceMappingURL=chunk-RDV4ZFYS.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../../sdk/history-compact.ts", "../../../../../../../../core/history/history-compact-bulk.ts"],
4
4
  "sourcesContent": ["/**\n * @module sdk/history-compact\n *\n * Implements the pm history compact command surface and its agent-facing runtime behavior.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHistoryEntry } from \"../core/history/history.js\";\nimport {\n selectHistoryCompactBulkTargets,\n type HistoryCompactBulkCandidate,\n type HistoryCompactBulkSkipReason,\n type HistoryCompactScope,\n} from \"../core/history/history-compact-bulk.js\";\nimport {\n executeHistoryRewrite,\n writeHistoryRawWithRollback,\n} from \"../core/history/history-rewrite.js\";\nimport {\n cloneEmptyReplayDocument,\n historyEntriesToRaw,\n replayHash,\n replayToItemDocument,\n toReplayDocument,\n verifyHistoryChain,\n type ReplayDocument,\n} from \"../core/history/replay.js\";\nimport { applyHistoryPatch } from \"../core/history/projection.js\";\nimport { readHistoryEntries } from \"../core/history/read.js\";\nimport { resolveItemTypeRegistry } from \"../core/item/type-registry.js\";\nimport { lifecycleClassifierFromStatusRegistry } from \"../core/governance/metadata-coverage.js\";\nimport { resolveRuntimeStatusRegistry } from \"../core/schema/runtime-schema.js\";\nimport { listAllItemMetadataLight } from \"../core/store/item-store.js\";\nimport { pathExists, readFileIfExists } from \"../core/fs/fs-utils.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 {\n getActiveExtensionRegistrations,\n runActiveOnReadHooks,\n runActiveOnWriteHooks,\n} from \"../core/extensions/index.js\";\nimport { readLocatedItem } from \"../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../core/store/paths.js\";\nimport { readSettings } from \"../core/store/settings.js\";\nimport { resolveAuthor } from \"../core/shared/author.js\";\nimport type { HistoryEntry } from \"../types/index.js\";\nimport { resolveHistorySubject } from \"./history-redact.js\";\n\n/** Documents the history compact command options payload exchanged by command, SDK, and package integrations. */\nexport interface HistoryCompactCommandOptions {\n /** Value that configures or reports before for this contract. */\n before?: string;\n /** Value that configures or reports dry run for this contract. */\n dryRun?: 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\ntype HistoryCompactBoundaryKind = \"default\" | \"version\" | \"timestamp\";\n\ninterface HistoryCompactBoundary {\n kind: HistoryCompactBoundaryKind;\n raw: string | null;\n compactCount: number;\n retainedCount: number;\n}\n\ninterface HistoryCompactCurrentItem {\n loadedItem: Awaited<ReturnType<typeof readLocatedItem>> | null;\n currentItemRawBeforeLock: string | null;\n matchedChainBefore: boolean | null;\n}\n\n/** Documents the history compact result payload exchanged by command, SDK, and package integrations. */\nexport interface HistoryCompactResult {\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Value that configures or reports dry run for this contract. */\n dry_run: boolean;\n /** Value that configures or reports changed for this contract. */\n changed: boolean;\n /** Value that configures or reports compact boundary for this contract. */\n compact_boundary: {\n kind: HistoryCompactBoundaryKind;\n before: string | null;\n entries_compacted: number;\n entries_retained: number;\n first_retained_entry: number | null;\n };\n /** Value that configures or reports history for this contract. */\n history: {\n path: string;\n entries_scanned: number;\n entries_after: number;\n baseline_entry_added: boolean;\n audit_entry_added: boolean;\n verify_ok: boolean;\n verify_errors: string[];\n };\n /** Value that configures or reports item for this contract. */\n item: {\n exists: boolean;\n path: string | null;\n matched_chain_before: boolean | null;\n };\n /** Value that configures or reports warnings for this contract. */\n warnings: string[];\n /** ISO 8601 timestamp recording when generated occurred. */\n generated_at: string;\n}\n\nfunction parseBeforeBoundary(\n before: string | undefined,\n entries: HistoryEntry[],\n): HistoryCompactBoundary {\n if (before === undefined) {\n return {\n kind: \"default\",\n raw: null,\n compactCount: entries.length,\n retainedCount: 0,\n };\n }\n\n const raw = before.trim();\n if (raw.length === 0) {\n throw new PmCliError(\n \"history-compact --before requires a non-empty value.\",\n EXIT_CODE.USAGE,\n );\n }\n\n if (/^\\d+$/.test(raw)) {\n const version = Number.parseInt(raw, 10);\n if (\n !Number.isSafeInteger(version) ||\n version < 1 ||\n version > entries.length + 1\n ) {\n throw new PmCliError(\n `history-compact --before version must be between 1 and ${entries.length + 1}.`,\n EXIT_CODE.USAGE,\n );\n }\n const compactCount = Math.max(0, Math.min(entries.length, version - 1));\n return {\n kind: \"version\",\n raw,\n compactCount,\n retainedCount: entries.length - compactCount,\n };\n }\n\n const beforeTs = Date.parse(raw);\n if (!Number.isFinite(beforeTs)) {\n throw new PmCliError(\n `Invalid history-compact --before value \"${before}\". Use a version number or ISO timestamp.`,\n EXIT_CODE.USAGE,\n );\n }\n\n let compactCount = 0;\n for (const [index, entry] of entries.entries()) {\n const entryTs = Date.parse(entry.ts);\n if (!Number.isFinite(entryTs)) {\n throw new PmCliError(\n `History for this item contains invalid timestamp at entry ${index + 1}.`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n if (entryTs >= beforeTs) {\n break;\n }\n compactCount += 1;\n }\n\n return {\n kind: \"timestamp\",\n raw,\n compactCount,\n retainedCount: entries.length - compactCount,\n };\n}\n\nfunction replayHistoryAndResolveCheckpoint(\n entries: HistoryEntry[],\n compactCount: number,\n): {\n checkpoint: ReplayDocument;\n finalReplay: ReplayDocument;\n} {\n let replay = cloneEmptyReplayDocument();\n let checkpoint = cloneEmptyReplayDocument();\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index];\n if (replayHash(replay) !== entry.before_hash) {\n throw new PmCliError(\n `history-compact detected before-hash drift at entry ${index + 1}; run pm history-repair first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n replay = applyHistoryPatch(replay, entry.patch, index + 1, entry.op);\n if (replayHash(replay) !== entry.after_hash) {\n throw new PmCliError(\n `history-compact detected after-hash drift at entry ${index + 1}; run pm history-repair first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n if (index + 1 === compactCount) {\n checkpoint = structuredClone(replay);\n }\n }\n return {\n checkpoint,\n finalReplay: replay,\n };\n}\n\nfunction reanchorRetainedEntries(\n retainedEntries: HistoryEntry[],\n seed: ReplayDocument,\n retainedEntryOffset: number,\n): {\n entries: HistoryEntry[];\n finalReplay: ReplayDocument;\n} {\n let replay = structuredClone(seed);\n const rewritten: HistoryEntry[] = [];\n for (const [index, entry] of retainedEntries.entries()) {\n const beforeHash = replayHash(replay);\n replay = applyHistoryPatch(\n replay,\n entry.patch,\n retainedEntryOffset + index + 1,\n entry.op,\n );\n rewritten.push({\n ...entry,\n before_hash: beforeHash,\n after_hash: replayHash(replay),\n });\n }\n return {\n entries: rewritten,\n finalReplay: replay,\n };\n}\n\nasync function loadHistoryCompactCurrentItem(\n subject: Awaited<ReturnType<typeof resolveHistorySubject>>,\n settings: Awaited<ReturnType<typeof readSettings>>,\n historyEntries: HistoryEntry[],\n): Promise<HistoryCompactCurrentItem> {\n const loadedItem = subject.located\n ? await readLocatedItem(subject.located, { schema: settings.schema })\n : null;\n if (!loadedItem) {\n return {\n loadedItem: null,\n currentItemRawBeforeLock: null,\n matchedChainBefore: null,\n };\n }\n return {\n loadedItem,\n currentItemRawBeforeLock: loadedItem.raw,\n matchedChainBefore:\n replayHash(toReplayDocument(loadedItem.document)) ===\n historyEntries[historyEntries.length - 1]?.after_hash,\n };\n}\n\nfunction buildHistoryCompactMessage(\n options: HistoryCompactCommandOptions,\n boundary: HistoryCompactBoundary,\n): string {\n if (\n typeof options.message === \"string\" &&\n options.message.trim().length > 0\n ) {\n return options.message;\n }\n if (boundary.raw === null) {\n return `history-compact compacted full stream (${boundary.compactCount} entr${\n boundary.compactCount === 1 ? \"y\" : \"ies\"\n }).`;\n }\n return `history-compact compacted ${boundary.compactCount} entr${\n boundary.compactCount === 1 ? \"y\" : \"ies\"\n } before ${boundary.raw}.`;\n}\n\nfunction buildHistoryCompactBaselineMessage(\n boundary: HistoryCompactBoundary,\n): string {\n if (boundary.raw === null) {\n return `history-compact baseline snapshot after compacting ${boundary.compactCount} entr${\n boundary.compactCount === 1 ? \"y\" : \"ies\"\n }.`;\n }\n return `history-compact baseline snapshot before ${boundary.raw}.`;\n}\n\nfunction buildHistoryCompactEntries(params: {\n historyEntries: HistoryEntry[];\n boundary: HistoryCompactBoundary;\n changed: boolean;\n dryRun: boolean;\n author: string;\n options: HistoryCompactCommandOptions;\n}): {\n rewrittenEntries: HistoryEntry[];\n baselineEntryAdded: boolean;\n auditEntryAdded: boolean;\n} {\n if (!params.changed) {\n return {\n rewrittenEntries: params.historyEntries,\n baselineEntryAdded: false,\n auditEntryAdded: false,\n };\n }\n const { checkpoint, finalReplay } = replayHistoryAndResolveCheckpoint(\n params.historyEntries,\n params.boundary.compactCount,\n );\n const retained = params.historyEntries.slice(params.boundary.compactCount);\n const reanchored = reanchorRetainedEntries(\n retained,\n checkpoint,\n params.boundary.compactCount,\n );\n const baselineEntry = createHistoryEntry({\n nowIso: nowIso(),\n author: params.author,\n op: \"history_compact_baseline\",\n before: replayToItemDocument(cloneEmptyReplayDocument()),\n after: replayToItemDocument(checkpoint),\n message: buildHistoryCompactBaselineMessage(params.boundary),\n });\n const rewrittenEntries = [baselineEntry, ...reanchored.entries];\n if (!params.dryRun) {\n rewrittenEntries.push(\n createHistoryEntry({\n nowIso: nowIso(),\n author: params.author,\n op: \"history_compact\",\n before: replayToItemDocument(finalReplay),\n after: replayToItemDocument(finalReplay),\n message: buildHistoryCompactMessage(params.options, params.boundary),\n }),\n );\n }\n return {\n rewrittenEntries,\n baselineEntryAdded: true,\n auditEntryAdded: !params.dryRun,\n };\n}\n\nasync function applyHistoryCompactRewrite(params: {\n pmRoot: string;\n subject: Awaited<ReturnType<typeof resolveHistorySubject>>;\n settings: Awaited<ReturnType<typeof readSettings>>;\n typeRegistry: ReturnType<typeof resolveItemTypeRegistry>;\n historyRawBeforeLock: string;\n currentItemRawBeforeLock: string | null;\n author: string;\n force: boolean | undefined;\n loadedItem: Awaited<ReturnType<typeof readLocatedItem>> | null;\n historyPath: string;\n rewrittenEntries: HistoryEntry[];\n}): Promise<string[]> {\n return executeHistoryRewrite({\n pmRoot: params.pmRoot,\n subject: params.subject,\n settings: params.settings,\n typeRegistry: params.typeRegistry,\n historyRawBeforeLock: params.historyRawBeforeLock,\n currentItemRawBeforeLock: params.currentItemRawBeforeLock,\n operation: \"history-compact\",\n author: params.author,\n force: params.force,\n itemDocument: params.loadedItem?.document ?? null,\n applyRewrite: async ({ historyRawUnderLock }) =>\n writeHistoryRawWithRollback({\n historyPath: params.historyPath,\n nextHistoryRaw: historyEntriesToRaw(params.rewrittenEntries),\n historyRawUnderLock,\n }),\n applyPostRewrite: async () =>\n runActiveOnWriteHooks({\n path: params.historyPath,\n scope: \"project\",\n op: \"history_compact:history\",\n }),\n });\n}\n\n/** Implements run history compact for the public runtime surface of this module. */\nexport async function runHistoryCompact(\n id: string,\n options: HistoryCompactCommandOptions,\n global: GlobalOptions,\n): Promise<HistoryCompactResult> {\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\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(\n settings,\n getActiveExtensionRegistrations(),\n );\n const subject = await resolveHistorySubject(\n pmRoot,\n id,\n settings,\n typeRegistry.type_to_folder,\n );\n const historyPath = subject.historyPath;\n const historyRawBeforeLock = await readFileIfExists(historyPath);\n if (historyRawBeforeLock === null) {\n throw new PmCliError(\n `No history stream exists for ${subject.id}.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n const historyEntries = await readHistoryEntries(historyPath, subject.id);\n if (historyEntries.length === 0) {\n throw new PmCliError(\n `No history entries exist for ${subject.id}; nothing to compact.`,\n EXIT_CODE.USAGE,\n );\n }\n\n const chainVerification = verifyHistoryChain(historyEntries);\n if (!chainVerification.ok) {\n throw new PmCliError(\n `history-compact requires a valid history chain (${chainVerification.errors.join(\", \")}). Run pm history-repair ${subject.id} first.`,\n EXIT_CODE.CONFLICT,\n );\n }\n\n const boundary = parseBeforeBoundary(options.before, historyEntries);\n const changed = boundary.compactCount > 0;\n const dryRun = Boolean(options.dryRun);\n const author = resolveAuthor(options.author, settings.author_default);\n const warnings: string[] = [];\n if (!changed) {\n warnings.push(\"history_compact_noop_before_boundary\");\n }\n\n const currentItem = await loadHistoryCompactCurrentItem(\n subject,\n settings,\n historyEntries,\n );\n if (currentItem.matchedChainBefore === false) {\n warnings.push(\"history_compact_item_chain_mismatch\");\n }\n\n const { rewrittenEntries, baselineEntryAdded, auditEntryAdded } =\n buildHistoryCompactEntries({\n historyEntries,\n boundary,\n changed,\n dryRun,\n author,\n options,\n });\n\n const rewrittenVerify = verifyHistoryChain(rewrittenEntries);\n if (!rewrittenVerify.ok) {\n throw new PmCliError(\n `history-compact produced an invalid rewritten chain (${rewrittenVerify.errors.join(\", \")}).`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n\n if (changed && !dryRun) {\n warnings.push(\n ...(await applyHistoryCompactRewrite({\n pmRoot,\n subject,\n settings,\n typeRegistry,\n historyRawBeforeLock,\n currentItemRawBeforeLock: currentItem.currentItemRawBeforeLock,\n author,\n force: options.force,\n loadedItem: currentItem.loadedItem,\n historyPath,\n rewrittenEntries,\n })),\n );\n }\n\n const firstRetainedEntry =\n boundary.retainedCount > 0 ? boundary.compactCount + 1 : null;\n return {\n id: subject.id,\n dry_run: dryRun,\n changed,\n compact_boundary: {\n kind: boundary.kind,\n before: boundary.raw,\n entries_compacted: boundary.compactCount,\n entries_retained: boundary.retainedCount,\n first_retained_entry: firstRetainedEntry,\n },\n history: {\n path: historyPath,\n entries_scanned: historyEntries.length,\n entries_after: rewrittenEntries.length,\n baseline_entry_added: baselineEntryAdded,\n audit_entry_added: auditEntryAdded,\n verify_ok: rewrittenVerify.ok,\n verify_errors: rewrittenVerify.errors,\n },\n item: {\n exists: subject.located !== null,\n path: subject.located?.itemPath ?? null,\n matched_chain_before: currentItem.matchedChainBefore,\n },\n warnings: [...new Set(warnings)].sort((left, right) =>\n left.localeCompare(right),\n ),\n generated_at: nowIso(),\n };\n}\n\n/** Default entry floor below which a stream is treated as already compact. */\nexport const HISTORY_COMPACT_BULK_DEFAULT_MIN_ENTRIES = 3;\n\n/** Documents the bulk history compact command options payload exchanged by command, SDK, and package integrations. */\nexport interface HistoryCompactBulkCommandOptions {\n /** Value that configures or reports ids for this contract. */\n ids?: string[];\n /** Value that configures or reports scope for this contract. */\n scope?: HistoryCompactScope;\n /** Value that configures or reports all over for this contract. */\n allOver?: number;\n /** Value that configures or reports min entries for this contract. */\n minEntries?: number;\n /** Value that configures or reports dry run for this contract. */\n dryRun?: 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/** Per-item outcome row in a bulk compaction pass. */\nexport interface HistoryCompactBulkItemResult {\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Value that configures or reports outcome for this contract. */\n outcome: \"compacted\" | \"skipped\" | \"errored\";\n /** Value that configures or reports entries before for this contract. */\n entries_before: number;\n /** Value that configures or reports entries after for this contract. */\n entries_after: number | null;\n /** Value that configures or reports skip reason for this contract. */\n skip_reason: HistoryCompactBulkSkipReason | null;\n /** Value that configures or reports changed for this contract. */\n changed: boolean;\n /** Value that configures or reports error for this contract. */\n error: string | null;\n}\n\n/** Documents the bulk history compact result payload exchanged by command, SDK, and package integrations. */\nexport interface HistoryCompactBulkResult {\n /** Value that configures or reports bulk for this contract. */\n bulk: true;\n /** Value that configures or reports dry run for this contract. */\n dry_run: boolean;\n /** Value that configures or reports mode for this contract. */\n mode: \"ids\" | \"scan\";\n /** Value that configures or reports scope for this contract. */\n scope: HistoryCompactScope | null;\n /** Value that configures or reports criteria for this contract. */\n criteria: {\n min_entries: number;\n all_over: number | null;\n policy_threshold_applied: boolean;\n };\n /** Value that configures or reports totals for this contract. */\n totals: {\n streams_considered: number;\n selected: number;\n items_compacted: number;\n items_skipped: number;\n items_errored: number;\n };\n /** Value that configures or reports results for this contract. */\n results: HistoryCompactBulkItemResult[];\n /** ISO 8601 timestamp recording when generated occurred. */\n generated_at: string;\n}\n\n/** Enforce the `pm history-compact` target contract shared by the CLI and MCP surfaces: exactly one selection mode — a single item `<id>`, an explicit `--ids` list, or a scan selector (`--all-over` / `--closed` / `--all-streams`). */\nexport function assertHistoryCompactTarget(\n id: string | undefined,\n bulk: { ids?: string[]; allOver?: number; scope?: HistoryCompactScope },\n): void {\n const hasIds = bulk.ids !== undefined && bulk.ids.length > 0;\n const hasScan = bulk.allOver !== undefined || bulk.scope !== undefined;\n const selectorCount =\n (id !== undefined ? 1 : 0) + (hasIds ? 1 : 0) + (hasScan ? 1 : 0);\n if (selectorCount === 0) {\n throw new PmCliError(\n \"history-compact: provide an item <id>, or a bulk selector (--ids, --all-over <N>, --closed, or --all-streams).\",\n EXIT_CODE.USAGE,\n );\n }\n if (id !== undefined && (hasIds || hasScan)) {\n throw new PmCliError(\n \"history-compact: <id> and bulk selectors (--ids/--all-over/--closed/--all-streams) are mutually exclusive; pass one item id, or use bulk mode without a positional id.\",\n EXIT_CODE.USAGE,\n );\n }\n if (hasIds && hasScan) {\n throw new PmCliError(\n \"history-compact: --ids is mutually exclusive with --all-over/--closed/--all-streams; pass an explicit id list or a scan selector, not both.\",\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction countHistoryStreamEntries(raw: string): number {\n let count = 0;\n for (const line of raw.split(/\\r?\\n/)) {\n if (line.trim().length > 0) {\n count += 1;\n }\n }\n return count;\n}\n\nasync function collectHistoryCompactBulkCandidates(params: {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n typeToFolder: Record<string, string>;\n}): Promise<{\n candidates: HistoryCompactBulkCandidate[];\n preselectionErrors: HistoryCompactBulkItemResult[];\n}> {\n const statusRegistry = resolveRuntimeStatusRegistry(params.settings.schema);\n const classifier = lifecycleClassifierFromStatusRegistry(statusRegistry);\n const items = await listAllItemMetadataLight(\n params.pmRoot,\n params.settings.item_format,\n params.typeToFolder,\n undefined,\n params.settings.schema,\n );\n const bucketById = new Map(\n items.map((item) => [item.id, classifier.classify(item.status)] as const),\n );\n const historyDir = path.join(params.pmRoot, \"history\");\n const candidates: HistoryCompactBulkCandidate[] = [];\n const preselectionErrors: HistoryCompactBulkItemResult[] = [];\n if (!(await pathExists(historyDir))) {\n return { candidates, preselectionErrors };\n }\n const historyFiles = (await fs.readdir(historyDir))\n .filter((entry) => entry.endsWith(\".jsonl\"))\n .sort((left, right) => left.localeCompare(right));\n for (const fileName of historyFiles) {\n const historyPath = path.join(historyDir, fileName);\n const id = fileName.slice(0, -\".jsonl\".length);\n try {\n const raw = await fs.readFile(historyPath, \"utf8\");\n await runActiveOnReadHooks({ path: historyPath, scope: \"project\" });\n candidates.push({\n id,\n entries: countHistoryStreamEntries(raw),\n bucket: bucketById.get(id) ?? null,\n });\n } catch (error) {\n preselectionErrors.push({\n id,\n outcome: \"errored\",\n entries_before: 0,\n entries_after: null,\n skip_reason: null,\n changed: false,\n /* c8 ignore next -- non-Error throws are normalized in defensive fallback. */\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return { candidates, preselectionErrors };\n}\n\nasync function runHistoryCompactBulkRow(params: {\n row: ReturnType<typeof selectHistoryCompactBulkTargets>[number];\n options: HistoryCompactBulkCommandOptions;\n dryRun: boolean;\n global: GlobalOptions;\n}): Promise<{\n result: HistoryCompactBulkItemResult;\n selected: boolean;\n compacted: boolean;\n errored: boolean;\n}> {\n if (!params.row.selected) {\n return {\n selected: false,\n compacted: false,\n errored: false,\n result: {\n id: params.row.id,\n outcome: \"skipped\",\n entries_before: params.row.entries,\n entries_after: null,\n skip_reason: params.row.skip_reason,\n changed: false,\n error: null,\n },\n };\n }\n try {\n const result = await runHistoryCompact(\n params.row.id,\n {\n dryRun: params.dryRun,\n author: params.options.author,\n message: params.options.message,\n force: params.options.force,\n },\n params.global,\n );\n return {\n selected: true,\n compacted: true,\n errored: false,\n result: {\n id: params.row.id,\n outcome: \"compacted\",\n entries_before: params.row.entries,\n entries_after: result.history.entries_after,\n skip_reason: null,\n changed: result.changed,\n error: null,\n },\n };\n } catch (error) {\n return {\n selected: true,\n compacted: false,\n errored: true,\n result: {\n id: params.row.id,\n outcome: \"errored\",\n entries_before: params.row.entries,\n entries_after: null,\n skip_reason: null,\n changed: false,\n /* c8 ignore next -- non-Error throws are normalized in defensive fallback. */\n error: error instanceof Error ? error.message : String(error),\n },\n };\n }\n}\n\n/**\n * Bulk history compaction: compact every history stream matching the requested\n * selection (explicit `--ids`, a `--scope` lifecycle filter, and/or an\n * `--all-over <N>` entry threshold) in one audited pass. Each selected stream is\n * compacted with the same single-item logic ({@link runHistoryCompact}); one\n * failing stream never aborts the rest, and the caller decides the exit code\n * from `totals.items_errored`.\n *\n * When `history.compact_policy` is enabled and no explicit `--all-over` is\n * given, the policy's `max_entries` is used as the scan threshold so the\n * configured policy drives the sweep.\n */\nexport async function runHistoryCompactBulk(\n options: HistoryCompactBulkCommandOptions,\n global: GlobalOptions,\n): Promise<HistoryCompactBulkResult> {\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\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(\n settings,\n getActiveExtensionRegistrations(),\n );\n const { candidates, preselectionErrors } =\n await collectHistoryCompactBulkCandidates({\n pmRoot,\n settings,\n typeToFolder: typeRegistry.type_to_folder,\n });\n\n const mode: \"ids\" | \"scan\" =\n options.ids !== undefined && options.ids.length > 0 ? \"ids\" : \"scan\";\n const minEntries =\n options.minEntries ?? HISTORY_COMPACT_BULK_DEFAULT_MIN_ENTRIES;\n const policy = settings.history.compact_policy;\n const policyThresholdApplied =\n mode === \"scan\" && options.allOver === undefined && policy.enabled;\n const allOver =\n options.allOver ??\n (policyThresholdApplied ? policy.max_entries : undefined);\n\n const selection = selectHistoryCompactBulkTargets(candidates, {\n ids: options.ids,\n scope: options.scope,\n minEntries,\n allOver,\n });\n\n const dryRun = Boolean(options.dryRun);\n const results: HistoryCompactBulkItemResult[] = [...preselectionErrors];\n const totals = {\n streams_considered: candidates.length + preselectionErrors.length,\n selected: 0,\n items_compacted: 0,\n items_skipped: 0,\n items_errored: preselectionErrors.length,\n };\n for (const row of selection) {\n const outcome = await runHistoryCompactBulkRow({\n row,\n options,\n dryRun,\n global,\n });\n results.push(outcome.result);\n if (!outcome.selected) {\n totals.items_skipped += 1;\n continue;\n }\n totals.selected += 1;\n if (outcome.compacted) {\n totals.items_compacted += 1;\n }\n if (outcome.errored) {\n totals.items_errored += 1;\n }\n }\n\n return {\n bulk: true,\n dry_run: dryRun,\n mode,\n scope: options.scope ?? null,\n criteria: {\n min_entries: minEntries,\n all_over: allOver ?? null,\n policy_threshold_applied: policyThresholdApplied,\n },\n totals,\n results,\n generated_at: nowIso(),\n };\n}\n", "/**\n * @module core/history/history-compact-bulk\n *\n * Pure selection logic for bulk history-stream compaction. Given a set of\n * history-stream candidates (id, entry count, and lifecycle bucket of the\n * owning item) plus the requested selection criteria, this module decides which\n * streams should be compacted and which are skipped (and why).\n *\n * The module performs no filesystem access and imports no heavy runtime\n * dependencies — the command layer reads streams and item statuses, hands the\n * resolved candidates here, then executes per-item compaction on the selection\n * this module returns. Keeping selection pure makes the matrix of scope /\n * threshold / explicit-id rules trivially testable without touching disk.\n */\n\nimport type { LifecycleBucket } from \"../governance/metadata-coverage.js\";\n\n/** Bulk-compaction scope: only closed items, or every history stream. */\nexport type HistoryCompactScope = \"closed\" | \"all-streams\";\n\n/** Why a candidate stream was not selected for compaction. */\nexport type HistoryCompactBulkSkipReason =\n | \"no_stream\"\n | \"already_compact\"\n | \"scope_mismatch\"\n | \"below_threshold\";\n\n/**\n * One history stream considered for bulk compaction.\n *\n * `bucket` is the lifecycle bucket of the owning item, or `null` when no item\n * matches the stream (an orphan history file). Orphan streams never satisfy a\n * `closed` scope filter but are eligible under `all-streams`.\n */\nexport interface HistoryCompactBulkCandidate {\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Value that configures or reports entries for this contract. */\n entries: number;\n /** Value that configures or reports bucket for this contract. */\n bucket: LifecycleBucket | null;\n}\n\n/** Selection criteria resolved from the command flags + policy defaults. */\nexport interface HistoryCompactBulkCriteria {\n /** Explicit, ordered list of item ids to compact. When non-empty the selection runs in \"ids\" mode: scope/allOver are ignored and only the `minEntries` floor applies. Duplicates are collapsed, preserving first-seen order. */\n ids?: string[];\n /** Lifecycle scope filter for scan mode (ignored in ids mode). */\n scope?: HistoryCompactScope;\n /** Streams with at most this many entries are skipped as `already_compact` (compaction collapses a stream to a 2-entry baseline+audit pair, so smaller streams gain nothing). Applies in both modes. */\n minEntries: number;\n /** Scan mode only: when set, only streams with strictly more entries than this are selected. Streams above `minEntries` but at/below `allOver` are skipped as `below_threshold`. */\n allOver?: number;\n}\n\n/** Per-candidate selection outcome. */\nexport interface HistoryCompactBulkSelectionRow {\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Value that configures or reports entries for this contract. */\n entries: number;\n /** Value that configures or reports selected for this contract. */\n selected: boolean;\n /** Value that configures or reports skip reason for this contract. */\n skip_reason: HistoryCompactBulkSkipReason | null;\n}\n\nfunction selectIdsMode(\n ids: string[],\n byId: ReadonlyMap<string, HistoryCompactBulkCandidate>,\n minEntries: number,\n): HistoryCompactBulkSelectionRow[] {\n const seen = new Set<string>();\n const rows: HistoryCompactBulkSelectionRow[] = [];\n for (const rawId of ids) {\n const id = rawId.trim();\n if (id.length === 0 || seen.has(id)) {\n continue;\n }\n seen.add(id);\n const candidate = byId.get(id);\n if (candidate === undefined) {\n rows.push({ id, entries: 0, selected: false, skip_reason: \"no_stream\" });\n continue;\n }\n if (candidate.entries <= minEntries) {\n rows.push({\n id,\n entries: candidate.entries,\n selected: false,\n skip_reason: \"already_compact\",\n });\n continue;\n }\n rows.push({\n id,\n entries: candidate.entries,\n selected: true,\n skip_reason: null,\n });\n }\n return rows;\n}\n\nfunction selectScanMode(\n candidates: HistoryCompactBulkCandidate[],\n criteria: HistoryCompactBulkCriteria,\n): HistoryCompactBulkSelectionRow[] {\n const ordered = [...candidates].sort(\n (a, b) => b.entries - a.entries || a.id.localeCompare(b.id),\n );\n const rows: HistoryCompactBulkSelectionRow[] = [];\n for (const candidate of ordered) {\n if (criteria.scope === \"closed\" && candidate.bucket !== \"closed\") {\n rows.push({\n id: candidate.id,\n entries: candidate.entries,\n selected: false,\n skip_reason: \"scope_mismatch\",\n });\n continue;\n }\n if (candidate.entries <= criteria.minEntries) {\n rows.push({\n id: candidate.id,\n entries: candidate.entries,\n selected: false,\n skip_reason: \"already_compact\",\n });\n continue;\n }\n if (\n criteria.allOver !== undefined &&\n candidate.entries <= criteria.allOver\n ) {\n rows.push({\n id: candidate.id,\n entries: candidate.entries,\n selected: false,\n skip_reason: \"below_threshold\",\n });\n continue;\n }\n rows.push({\n id: candidate.id,\n entries: candidate.entries,\n selected: true,\n skip_reason: null,\n });\n }\n return rows;\n}\n\n/**\n * Decide which history streams to compact.\n *\n * Runs in \"ids\" mode when `criteria.ids` is non-empty (exact, ordered set,\n * honouring only the `minEntries` floor) and \"scan\" mode otherwise (every\n * candidate, filtered by scope and entry thresholds, ordered deepest-first).\n */\nexport function selectHistoryCompactBulkTargets(\n candidates: HistoryCompactBulkCandidate[],\n criteria: HistoryCompactBulkCriteria,\n): HistoryCompactBulkSelectionRow[] {\n if (criteria.ids !== undefined && criteria.ids.length > 0) {\n const byId = new Map(\n candidates.map((candidate) => [candidate.id, candidate]),\n );\n return selectIdsMode(criteria.ids, byId, criteria.minEntries);\n }\n return selectScanMode(candidates, criteria);\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["compactCount", "global"]
7
7
  }