@unbrained/pm-cli 2026.7.14 → 2026.7.16

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 (708) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +54 -0
  3. package/README.md +14 -11
  4. package/dist/cli/argv-utils.d.ts +1 -4
  5. package/dist/cli/argv-utils.js +3 -13
  6. package/dist/cli/argv-utils.js.map +1 -1
  7. package/dist/cli/bootstrap-args.d.ts +6 -4
  8. package/dist/cli/bootstrap-args.js +51 -16
  9. package/dist/cli/bootstrap-args.js.map +1 -1
  10. package/dist/cli/bundle-integrity.d.ts +49 -0
  11. package/dist/cli/bundle-integrity.js +111 -0
  12. package/dist/cli/bundle-integrity.js.map +1 -0
  13. package/dist/cli/commands/completion.js +7 -2
  14. package/dist/cli/commands/completion.js.map +1 -1
  15. package/dist/cli/commands/config.d.ts +6 -163
  16. package/dist/cli/commands/config.js +4 -1133
  17. package/dist/cli/commands/config.js.map +1 -1
  18. package/dist/cli/commands/context.d.ts +2 -4
  19. package/dist/cli/commands/context.js +10 -85
  20. package/dist/cli/commands/context.js.map +1 -1
  21. package/dist/cli/commands/create.d.ts +1 -0
  22. package/dist/cli/commands/create.js +3 -2
  23. package/dist/cli/commands/create.js.map +1 -1
  24. package/dist/cli/commands/extension/describe.d.ts +2 -91
  25. package/dist/cli/commands/extension/describe.js +4 -142
  26. package/dist/cli/commands/extension/describe.js.map +1 -1
  27. package/dist/cli/commands/extension/scaffold.d.ts +2 -36
  28. package/dist/cli/commands/extension/scaffold.js +4 -2435
  29. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  30. package/dist/cli/commands/extension/shared.d.ts +2 -28
  31. package/dist/cli/commands/extension/shared.js +4 -130
  32. package/dist/cli/commands/extension/shared.js.map +1 -1
  33. package/dist/cli/commands/extension.d.ts +3 -400
  34. package/dist/cli/commands/extension.js +4 -2183
  35. package/dist/cli/commands/extension.js.map +1 -1
  36. package/dist/cli/commands/gc.d.ts +6 -56
  37. package/dist/cli/commands/gc.js +4 -270
  38. package/dist/cli/commands/gc.js.map +1 -1
  39. package/dist/cli/commands/get.d.ts +18 -5
  40. package/dist/cli/commands/get.js +117 -58
  41. package/dist/cli/commands/get.js.map +1 -1
  42. package/dist/cli/commands/health.d.ts +6 -184
  43. package/dist/cli/commands/health.js +4 -1747
  44. package/dist/cli/commands/health.js.map +1 -1
  45. package/dist/cli/commands/history-compact.d.ts +4 -139
  46. package/dist/cli/commands/history-compact.js +5 -510
  47. package/dist/cli/commands/history-compact.js.map +1 -1
  48. package/dist/cli/commands/history-redact.d.ts +8 -120
  49. package/dist/cli/commands/history-redact.js +6 -581
  50. package/dist/cli/commands/history-redact.js.map +1 -1
  51. package/dist/cli/commands/history-repair.d.ts +7 -89
  52. package/dist/cli/commands/history-repair.js +5 -257
  53. package/dist/cli/commands/history-repair.js.map +1 -1
  54. package/dist/cli/commands/history.d.ts +1 -2
  55. package/dist/cli/commands/history.js +6 -48
  56. package/dist/cli/commands/history.js.map +1 -1
  57. package/dist/cli/commands/index.d.ts +1 -0
  58. package/dist/cli/commands/index.js +3 -2
  59. package/dist/cli/commands/index.js.map +1 -1
  60. package/dist/cli/commands/init-agent-guidance.d.ts +6 -113
  61. package/dist/cli/commands/init-agent-guidance.js +4 -431
  62. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  63. package/dist/cli/commands/init.d.ts +6 -181
  64. package/dist/cli/commands/init.js +4 -690
  65. package/dist/cli/commands/init.js.map +1 -1
  66. package/dist/cli/commands/next.js +3 -3
  67. package/dist/cli/commands/next.js.map +1 -1
  68. package/dist/cli/commands/profile.d.ts +4 -174
  69. package/dist/cli/commands/profile.js +4 -425
  70. package/dist/cli/commands/profile.js.map +1 -1
  71. package/dist/cli/commands/restore.d.ts +4 -19
  72. package/dist/cli/commands/restore.js +9 -158
  73. package/dist/cli/commands/restore.js.map +1 -1
  74. package/dist/cli/commands/schema.d.ts +7 -507
  75. package/dist/cli/commands/schema.js +5 -1254
  76. package/dist/cli/commands/schema.js.map +1 -1
  77. package/dist/cli/commands/test.d.ts +2 -4
  78. package/dist/cli/commands/test.js +7 -97
  79. package/dist/cli/commands/test.js.map +1 -1
  80. package/dist/cli/commands/validate.d.ts +9 -249
  81. package/dist/cli/commands/validate.js +9 -2150
  82. package/dist/cli/commands/validate.js.map +1 -1
  83. package/dist/cli/extension-command-help.js +18 -4
  84. package/dist/cli/extension-command-help.js.map +1 -1
  85. package/dist/cli/extension-command-options.js +3 -3
  86. package/dist/cli/extension-command-options.js.map +1 -1
  87. package/dist/cli/help-content.js +7 -3
  88. package/dist/cli/help-content.js.map +1 -1
  89. package/dist/cli/main.js +20 -30
  90. package/dist/cli/main.js.map +1 -1
  91. package/dist/cli/register-list-query.js +4 -2
  92. package/dist/cli/register-list-query.js.map +1 -1
  93. package/dist/cli/register-mutation.js +11 -3
  94. package/dist/cli/register-mutation.js.map +1 -1
  95. package/dist/cli/register-setup.js +4 -2
  96. package/dist/cli/register-setup.js.map +1 -1
  97. package/dist/cli/registration-helpers.js +3 -2
  98. package/dist/cli/registration-helpers.js.map +1 -1
  99. package/dist/cli-bundle/bundle-manifest.json +782 -0
  100. package/dist/cli-bundle/chunks/{append-PVZJDM6J.js → append-OJQFUQ4T.js} +5 -5
  101. package/dist/cli-bundle/chunks/append-UZVHUO74.js +11 -0
  102. package/dist/cli-bundle/chunks/{chunk-MQZ3PLCF.js → chunk-2IFFUZLC.js} +2 -2
  103. package/dist/cli-bundle/chunks/{chunk-P6MYFH6K.js → chunk-2JKGO6QX.js} +4 -4
  104. package/dist/cli-bundle/chunks/{chunk-X3GYR4P2.js → chunk-2NCIPMQP.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-Q7E6OYZK.js → chunk-2VPAVL7O.js} +2 -2
  106. package/dist/cli-bundle/chunks/{chunk-DRNJPEPQ.js → chunk-2WSE6PO2.js} +4 -4
  107. package/dist/cli-bundle/chunks/{chunk-FDSBDNYE.js → chunk-34L5OT3Y.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-TH7U4KLY.js → chunk-3AUGG2DP.js} +3 -3
  109. package/dist/cli-bundle/chunks/{chunk-NKW36AMT.js → chunk-3CLU2XZO.js} +4 -4
  110. package/dist/cli-bundle/chunks/{chunk-N3CMP4NI.js → chunk-3S5QVM5H.js} +43 -7
  111. package/dist/cli-bundle/chunks/chunk-3S5QVM5H.js.map +1 -0
  112. package/dist/cli-bundle/chunks/chunk-3U7ZR6M4.js +64 -0
  113. package/dist/cli-bundle/chunks/chunk-3U7ZR6M4.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-ABRCOSDC.js → chunk-3WM75PWC.js} +3 -3
  115. package/dist/cli-bundle/chunks/chunk-4223PVZT.js +121 -0
  116. package/dist/cli-bundle/chunks/chunk-4223PVZT.js.map +7 -0
  117. package/dist/cli-bundle/chunks/{chunk-5URI7TPJ.js → chunk-4XQ3BDV4.js} +281 -164
  118. package/dist/cli-bundle/chunks/chunk-4XQ3BDV4.js.map +7 -0
  119. package/dist/cli-bundle/chunks/{chunk-X6BVXQ52.js → chunk-5JLUII3O.js} +13 -13
  120. package/dist/cli-bundle/chunks/{chunk-MKL4CP2I.js → chunk-5ZSLZLDN.js} +631 -246
  121. package/dist/cli-bundle/chunks/chunk-5ZSLZLDN.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-Q37E63AM.js → chunk-6CFNAVTF.js} +21 -141
  123. package/dist/cli-bundle/chunks/chunk-6CFNAVTF.js.map +7 -0
  124. package/dist/cli-bundle/chunks/{chunk-3TL7WOEF.js → chunk-6N2VXVTQ.js} +2 -2
  125. package/dist/cli-bundle/chunks/{chunk-ERL2YFJ2.js → chunk-6S3YSUYG.js} +3 -3
  126. package/dist/cli-bundle/chunks/{chunk-ZUKSZVBW.js → chunk-7B67ZL4N.js} +8 -7
  127. package/dist/cli-bundle/chunks/chunk-7B67ZL4N.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-IA3YFTXT.js → chunk-7PIWCHTW.js} +11 -13
  129. package/dist/cli-bundle/chunks/chunk-7PIWCHTW.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-BPD26E3P.js → chunk-7Z4LKRS4.js} +291 -81
  131. package/dist/cli-bundle/chunks/chunk-7Z4LKRS4.js.map +1 -0
  132. package/dist/cli-bundle/chunks/{chunk-IFZA4VB5.js → chunk-AHVTB5I5.js} +4 -4
  133. package/dist/cli-bundle/chunks/{chunk-DO5RGJXT.js → chunk-APRVSW2O.js} +3 -3
  134. package/dist/cli-bundle/chunks/{chunk-NAQYVWSQ.js → chunk-B7PE22W6.js} +4 -4
  135. package/dist/cli-bundle/chunks/{chunk-MD6ULIPJ.js → chunk-BCOFWYW4.js} +3 -3
  136. package/dist/cli-bundle/chunks/{chunk-KADLSPIU.js → chunk-BEP7WJA2.js} +4 -4
  137. package/dist/cli-bundle/chunks/chunk-BKVG6XOA.js +1114 -0
  138. package/dist/cli-bundle/chunks/chunk-BKVG6XOA.js.map +7 -0
  139. package/dist/cli-bundle/chunks/{chunk-AFWZRL7M.js → chunk-BSEQUTQP.js} +2 -2
  140. package/dist/cli-bundle/chunks/{chunk-AFWZRL7M.js.map → chunk-BSEQUTQP.js.map} +2 -2
  141. package/dist/cli-bundle/chunks/{chunk-OBDLEQG5.js → chunk-CRVF2JDM.js} +10 -10
  142. package/dist/cli-bundle/chunks/{chunk-FJZDA6MS.js → chunk-DM4H7FP4.js} +3 -3
  143. package/dist/cli-bundle/chunks/chunk-DUT67M43.js +5 -0
  144. package/dist/cli-bundle/chunks/{chunk-44LNIULG.js → chunk-DYH63FX7.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-LWTIRS3Y.js → chunk-E2OJMKML.js} +306 -82
  146. package/dist/cli-bundle/chunks/chunk-E2OJMKML.js.map +7 -0
  147. package/dist/cli-bundle/chunks/{chunk-HAMLIWAF.js → chunk-EAB64KLB.js} +4 -4
  148. package/dist/cli-bundle/chunks/{chunk-CIOZ376P.js → chunk-EACOH7AU.js} +10 -10
  149. package/dist/cli-bundle/chunks/{chunk-HL7V2PHX.js → chunk-EH2OPHBI.js} +10 -10
  150. package/dist/cli-bundle/chunks/{chunk-HL7V2PHX.js.map → chunk-EH2OPHBI.js.map} +1 -1
  151. package/dist/cli-bundle/chunks/{chunk-QK2ZN6UL.js → chunk-EJEXHTY5.js} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-WQUEHPZB.js → chunk-EYLCSJAI.js} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-655STMGA.js → chunk-FMBNM2EN.js} +2 -2
  154. package/dist/cli-bundle/chunks/{chunk-RMF3IOYQ.js → chunk-FNSPG7MU.js} +12 -12
  155. package/dist/cli-bundle/chunks/{chunk-5CT5BW6E.js → chunk-GM5QHQU6.js} +46 -40
  156. package/dist/cli-bundle/chunks/chunk-GM5QHQU6.js.map +7 -0
  157. package/dist/cli-bundle/chunks/{chunk-FTQLW4JD.js → chunk-GOSLKLFE.js} +418 -24
  158. package/dist/cli-bundle/chunks/chunk-GOSLKLFE.js.map +1 -0
  159. package/dist/cli-bundle/chunks/{chunk-KB726FMH.js → chunk-H2Z3FYXQ.js} +4 -4
  160. package/dist/cli-bundle/chunks/chunk-H3EIEWGR.js +162 -0
  161. package/dist/cli-bundle/chunks/chunk-H3EIEWGR.js.map +1 -0
  162. package/dist/cli-bundle/chunks/{chunk-2QIQGYPW.js → chunk-H5APFTHZ.js} +53 -10
  163. package/dist/cli-bundle/chunks/chunk-H5APFTHZ.js.map +7 -0
  164. package/dist/cli-bundle/chunks/chunk-HDH3JUGG.js +118 -0
  165. package/dist/cli-bundle/chunks/chunk-HDH3JUGG.js.map +1 -0
  166. package/dist/cli-bundle/chunks/{chunk-ZAYYDNB3.js → chunk-HO4KXD6I.js} +22 -142
  167. package/dist/cli-bundle/chunks/chunk-HO4KXD6I.js.map +1 -0
  168. package/dist/cli-bundle/chunks/{chunk-ILLUE5DI.js → chunk-HYB5AZ63.js} +203 -62
  169. package/dist/cli-bundle/chunks/{chunk-ILLUE5DI.js.map → chunk-HYB5AZ63.js.map} +3 -3
  170. package/dist/cli-bundle/chunks/{chunk-BN62TO2S.js → chunk-IA5FKNII.js} +2 -2
  171. package/dist/cli-bundle/chunks/{chunk-JL7WZ4O2.js → chunk-IG3SWA4A.js} +33 -9
  172. package/dist/cli-bundle/chunks/chunk-IG3SWA4A.js.map +7 -0
  173. package/dist/cli-bundle/chunks/{chunk-W6HZ55JO.js → chunk-IJIICKVW.js} +2 -2
  174. package/dist/cli-bundle/chunks/{chunk-IGED7NH2.js → chunk-ILX33QXL.js} +668 -251
  175. package/dist/cli-bundle/chunks/chunk-ILX33QXL.js.map +7 -0
  176. package/dist/cli-bundle/chunks/{chunk-UGTVWL3E.js → chunk-INU6DKT5.js} +47 -41
  177. package/dist/cli-bundle/chunks/chunk-INU6DKT5.js.map +1 -0
  178. package/dist/cli-bundle/chunks/{chunk-UB2QYSTO.js → chunk-J5AOEGDC.js} +26 -18
  179. package/dist/cli-bundle/chunks/chunk-J5AOEGDC.js.map +1 -0
  180. package/dist/cli-bundle/chunks/{chunk-4DY4KPQI.js → chunk-J6364LFM.js} +1330 -937
  181. package/dist/cli-bundle/chunks/chunk-J6364LFM.js.map +7 -0
  182. package/dist/cli-bundle/chunks/{chunk-DVOLZJ3C.js → chunk-J6EY5V4N.js} +1295 -939
  183. package/dist/cli-bundle/chunks/chunk-J6EY5V4N.js.map +1 -0
  184. package/dist/cli-bundle/chunks/chunk-JFTKLTEF.js +1097 -0
  185. package/dist/cli-bundle/chunks/chunk-JFTKLTEF.js.map +1 -0
  186. package/dist/cli-bundle/chunks/{chunk-M7EWN4TF.js → chunk-JOUQZENX.js} +3 -3
  187. package/dist/cli-bundle/chunks/{chunk-J4NZOP3I.js → chunk-JXQUXVMI.js} +9 -8
  188. package/dist/cli-bundle/chunks/chunk-JXQUXVMI.js.map +1 -0
  189. package/dist/cli-bundle/chunks/{chunk-2FNWQXZ2.js → chunk-JYFOV7FC.js} +4 -4
  190. package/dist/cli-bundle/chunks/{chunk-HLHSQ5CA.js → chunk-K2X6U4UA.js} +4 -4
  191. package/dist/cli-bundle/chunks/{chunk-6OTZMORS.js → chunk-K3WII2ME.js} +27 -27
  192. package/dist/cli-bundle/chunks/chunk-K3WII2ME.js.map +7 -0
  193. package/dist/cli-bundle/chunks/{chunk-M6ASXYCU.js → chunk-KG44YSKD.js} +4 -4
  194. package/dist/cli-bundle/chunks/{chunk-YVKE5ZDM.js → chunk-KPMKHGEA.js} +4 -4
  195. package/dist/cli-bundle/chunks/{chunk-QASRVKUQ.js → chunk-LPYWLWDS.js} +257 -163
  196. package/dist/cli-bundle/chunks/chunk-LPYWLWDS.js.map +1 -0
  197. package/dist/cli-bundle/chunks/{chunk-RGXD5JJR.js → chunk-LSG2U345.js} +19 -12
  198. package/dist/cli-bundle/chunks/chunk-LSG2U345.js.map +7 -0
  199. package/dist/cli-bundle/chunks/chunk-MIQDDLB5.js +5 -0
  200. package/dist/cli-bundle/chunks/{chunk-UJ4HJYWL.js → chunk-NLDFBC6J.js} +2 -2
  201. package/dist/cli-bundle/chunks/{chunk-WRKB56FC.js → chunk-NP22ERDF.js} +3 -3
  202. package/dist/cli-bundle/chunks/{chunk-YQYG2V23.js → chunk-NU3IMIEA.js} +2 -2
  203. package/dist/cli-bundle/chunks/{chunk-3I3LRT2G.js → chunk-NVPZIJVR.js} +2 -2
  204. package/dist/cli-bundle/chunks/{chunk-JAF4TUQ7.js → chunk-ODALILG3.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-CDJYP7OQ.js → chunk-ONG5V5CI.js} +190 -63
  206. package/dist/cli-bundle/chunks/chunk-ONG5V5CI.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-QZ7LT3XE.js → chunk-ONREO4ST.js} +3 -3
  208. package/dist/cli-bundle/chunks/chunk-OW4JWD5M.js +61 -0
  209. package/dist/cli-bundle/chunks/chunk-OW4JWD5M.js.map +1 -0
  210. package/dist/cli-bundle/chunks/{chunk-3CMRNVTO.js → chunk-P74IZQ7A.js} +12 -12
  211. package/dist/cli-bundle/chunks/chunk-PENXZX3U.js +172 -0
  212. package/dist/cli-bundle/chunks/chunk-PENXZX3U.js.map +7 -0
  213. package/dist/cli-bundle/chunks/{chunk-ZTRBSABY.js → chunk-PGY23YTC.js} +3 -3
  214. package/dist/cli-bundle/chunks/{chunk-H2QBAKLQ.js → chunk-PMOSXADO.js} +3 -3
  215. package/dist/cli-bundle/chunks/chunk-PNTULOGU.js +9 -0
  216. package/dist/cli-bundle/chunks/{chunk-GSEADLRH.js → chunk-Q7A43DS4.js} +2 -2
  217. package/dist/cli-bundle/chunks/{chunk-QSPARJWF.js → chunk-QEHQ2GVG.js} +2 -2
  218. package/dist/cli-bundle/chunks/{chunk-VJTAEIPC.js → chunk-QIPLHNP7.js} +7 -7
  219. package/dist/cli-bundle/chunks/{chunk-GXXC7QSK.js → chunk-QKECXBBG.js} +3 -3
  220. package/dist/cli-bundle/chunks/{chunk-GXXC7QSK.js.map → chunk-QKECXBBG.js.map} +1 -1
  221. package/dist/cli-bundle/chunks/{chunk-K7WNZ7KD.js → chunk-QKJGPFAF.js} +3 -3
  222. package/dist/cli-bundle/chunks/{chunk-F7PSHRNO.js → chunk-QKXHFPYM.js} +27 -10
  223. package/dist/cli-bundle/chunks/chunk-QKXHFPYM.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-ZNP64HOW.js → chunk-RLCHOOHC.js} +2 -2
  225. package/dist/cli-bundle/chunks/{chunk-IAPHYPRL.js → chunk-RMLWNPH2.js} +2 -2
  226. package/dist/cli-bundle/chunks/{chunk-UVBA6F5A.js → chunk-RRM5JYJC.js} +2 -2
  227. package/dist/cli-bundle/chunks/{chunk-6IIVBC56.js → chunk-S6MQESFR.js} +4 -4
  228. package/dist/cli-bundle/chunks/{chunk-QABYZYLU.js → chunk-SDQLJWBO.js} +4 -4
  229. package/dist/cli-bundle/chunks/{chunk-ANSJHDOZ.js → chunk-SELVXEZK.js} +2 -2
  230. package/dist/cli-bundle/chunks/{chunk-DYEX6NFH.js → chunk-TD3LVC7D.js} +438 -23
  231. package/dist/cli-bundle/chunks/chunk-TD3LVC7D.js.map +7 -0
  232. package/dist/cli-bundle/chunks/{chunk-WD6MSYMP.js → chunk-TKOVBP6C.js} +2 -2
  233. package/dist/cli-bundle/chunks/{chunk-TZ2PSLLT.js → chunk-TQSZFPIS.js} +4 -4
  234. package/dist/cli-bundle/chunks/{chunk-WPAWZW7S.js → chunk-TSMHDIW4.js} +2 -2
  235. package/dist/cli-bundle/chunks/{chunk-TZRTLMWM.js → chunk-UFXU44HV.js} +4 -4
  236. package/dist/cli-bundle/chunks/{chunk-TWLDBKQU.js → chunk-ULTHRDBP.js} +3 -3
  237. package/dist/cli-bundle/chunks/{chunk-OI4S4KCI.js → chunk-UMOPHQSU.js} +9 -9
  238. package/dist/cli-bundle/chunks/{chunk-OI4S4KCI.js.map → chunk-UMOPHQSU.js.map} +2 -2
  239. package/dist/cli-bundle/chunks/{chunk-RA5AIAMP.js → chunk-UOHFKBUV.js} +3 -3
  240. package/dist/cli-bundle/chunks/{chunk-PHKP3AGR.js → chunk-UWQHLMEB.js} +35 -18
  241. package/dist/cli-bundle/chunks/chunk-UWQHLMEB.js.map +7 -0
  242. package/dist/cli-bundle/chunks/{chunk-6TTOHMTB.js → chunk-UXONS674.js} +45 -112
  243. package/dist/cli-bundle/chunks/chunk-UXONS674.js.map +1 -0
  244. package/dist/cli-bundle/chunks/{chunk-4RXTMU57.js → chunk-UY2ACEMF.js} +7 -7
  245. package/dist/cli-bundle/chunks/{chunk-6PKA3SJQ.js → chunk-WQPUU7XD.js} +19 -28
  246. package/dist/cli-bundle/chunks/chunk-WQPUU7XD.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{chunk-7TQMR6LK.js → chunk-WT3ZEOGH.js} +70 -20
  248. package/dist/cli-bundle/chunks/chunk-WT3ZEOGH.js.map +7 -0
  249. package/dist/cli-bundle/chunks/{chunk-FIGXOCEQ.js → chunk-WUJQK4YV.js} +4 -4
  250. package/dist/cli-bundle/chunks/{chunk-T4BRCB6Z.js → chunk-XSJUSQAE.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-6MHSBDGD.js → chunk-XXXF6PAQ.js} +50 -117
  252. package/dist/cli-bundle/chunks/chunk-XXXF6PAQ.js.map +7 -0
  253. package/dist/cli-bundle/chunks/{chunk-UKUIIBDW.js → chunk-YAQEBNY7.js} +4 -4
  254. package/dist/cli-bundle/chunks/{chunk-7QDSYUMF.js → chunk-YAROI3PD.js} +44 -21
  255. package/dist/cli-bundle/chunks/chunk-YAROI3PD.js.map +1 -0
  256. package/dist/cli-bundle/chunks/{chunk-E2WC6S4P.js → chunk-YBLZ2VE7.js} +13 -13
  257. package/dist/cli-bundle/chunks/{chunk-Y72FV7RM.js → chunk-YCQET3OT.js} +2 -2
  258. package/dist/cli-bundle/chunks/chunk-YUSOJDWM.js +9 -0
  259. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js +58 -0
  260. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{chunk-FS6UM5WH.js → chunk-ZI6VQWQ7.js} +4 -4
  262. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js +68 -0
  263. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js.map +7 -0
  264. package/dist/cli-bundle/chunks/{close-LZECOMHO.js → close-CWODTPKG.js} +5 -5
  265. package/dist/cli-bundle/chunks/close-W6LI2PKM.js +12 -0
  266. package/dist/cli-bundle/chunks/{close-many-ZHI6A5TN.js → close-many-CQFUY7MR.js} +15 -13
  267. package/dist/cli-bundle/chunks/close-many-DLDDVSH5.js +23 -0
  268. package/dist/cli-bundle/chunks/comments-E3TNTK24.js +13 -0
  269. package/dist/cli-bundle/chunks/{comments-AJWRTFZ5.js → comments-WGLHR7LB.js} +7 -7
  270. package/dist/cli-bundle/chunks/{copy-GMXYKBXT.js → copy-LXVDXH7B.js} +4 -4
  271. package/dist/cli-bundle/chunks/copy-Q5ZJPUKR.js +9 -0
  272. package/dist/cli-bundle/chunks/{create-F53OBTOU.js → create-J5U6ND4K.js} +9 -9
  273. package/dist/cli-bundle/chunks/{create-HU4Q7RJX.js → create-LBVCYMEG.js} +9 -9
  274. package/dist/cli-bundle/chunks/{delete-GSDZLTRC.js → delete-PMJBNY5G.js} +4 -4
  275. package/dist/cli-bundle/chunks/delete-WNHB3LYW.js +10 -0
  276. package/dist/cli-bundle/chunks/{deps-WWB7P2GT.js → deps-JZ7TMVCB.js} +7 -4
  277. package/dist/cli-bundle/chunks/{deps-U57I7EAK.js → deps-OA26IS25.js} +7 -4
  278. package/dist/cli-bundle/chunks/{docs-MQIY2ZQS.js → docs-FEWB2DQB.js} +6 -6
  279. package/dist/cli-bundle/chunks/docs-HA2AIDBB.js +14 -0
  280. package/dist/cli-bundle/chunks/{files-TBZD7V6H.js → files-6YFBJRBG.js} +6 -6
  281. package/dist/cli-bundle/chunks/{files-TTY6N2AV.js → files-EFIWKFTM.js} +6 -6
  282. package/dist/cli-bundle/chunks/{focus-XT6YVFFX.js → focus-4QJR7FOQ.js} +5 -5
  283. package/dist/cli-bundle/chunks/focus-POIW5LTJ.js +10 -0
  284. package/dist/cli-bundle/chunks/{history-compact-KKVUWB4V.js → history-compact-CKRPDTJN.js} +6 -10
  285. package/dist/cli-bundle/chunks/history-compact-FWG2C7FZ.js +16 -0
  286. package/dist/cli-bundle/chunks/history-redact-BB3TGDAE.js +15 -0
  287. package/dist/cli-bundle/chunks/{history-redact-3DVZOILD.js → history-redact-D225BHOZ.js} +5 -6
  288. package/dist/cli-bundle/chunks/history-repair-6GEAM7HE.js +16 -0
  289. package/dist/cli-bundle/chunks/{history-repair-ITDUMK4N.js → history-repair-RQXKQHL4.js} +6 -8
  290. package/dist/cli-bundle/chunks/{learnings-FGO3NSFW.js → learnings-JLNLCOL5.js} +7 -7
  291. package/dist/cli-bundle/chunks/learnings-RSNLSWDC.js +13 -0
  292. package/dist/cli-bundle/chunks/notes-2WDH6DXU.js +13 -0
  293. package/dist/cli-bundle/chunks/{notes-NQ6RXVW6.js → notes-GB47XXQQ.js} +7 -7
  294. package/dist/cli-bundle/chunks/plan-DOVI2VMW.js +24 -0
  295. package/dist/cli-bundle/chunks/{plan-2NNEO46V.js → plan-VDCJ2PCN.js} +10 -10
  296. package/dist/cli-bundle/chunks/{profile-AAQUU6T3.js → profile-FAU7NZML.js} +10 -10
  297. package/dist/cli-bundle/chunks/{profile-U725ATWZ.js → profile-IVXQEL3D.js} +10 -10
  298. package/dist/cli-bundle/chunks/{register-list-query-BUWCYHBT.js → register-list-query-DKA3EH5D.js} +22 -19
  299. package/dist/cli-bundle/chunks/register-list-query-DKA3EH5D.js.map +7 -0
  300. package/dist/cli-bundle/chunks/{register-list-query-KTZ6AGE7.js → register-list-query-UL4UKBBN.js} +23 -20
  301. package/dist/cli-bundle/chunks/register-list-query-UL4UKBBN.js.map +1 -0
  302. package/dist/cli-bundle/chunks/{register-mutation-UELYYOR7.js → register-mutation-ARFHRW55.js} +36 -32
  303. package/dist/cli-bundle/chunks/{register-mutation-UELYYOR7.js.map → register-mutation-ARFHRW55.js.map} +2 -2
  304. package/dist/cli-bundle/chunks/{register-mutation-4FMGJJF7.js → register-mutation-RBBJ52DK.js} +37 -33
  305. package/dist/cli-bundle/chunks/register-mutation-RBBJ52DK.js.map +1 -0
  306. package/dist/cli-bundle/chunks/{register-operations-JVW24J2Y.js → register-operations-ZIBBRSED.js} +41 -39
  307. package/dist/cli-bundle/chunks/{register-operations-JVW24J2Y.js.map → register-operations-ZIBBRSED.js.map} +1 -1
  308. package/dist/cli-bundle/chunks/{register-operations-ISUX6LY5.js → register-operations-ZUJ5JWPE.js} +39 -37
  309. package/dist/cli-bundle/chunks/{register-operations-ISUX6LY5.js.map → register-operations-ZUJ5JWPE.js.map} +1 -1
  310. package/dist/cli-bundle/chunks/{register-setup-5XNGKJ22.js → register-setup-BCVLFEYS.js} +29 -17
  311. package/dist/cli-bundle/chunks/{register-setup-5XNGKJ22.js.map → register-setup-BCVLFEYS.js.map} +2 -2
  312. package/dist/cli-bundle/chunks/{register-setup-ZTNY6S7R.js → register-setup-TDCGWIOS.js} +19 -18
  313. package/dist/cli-bundle/chunks/{register-setup-ZTNY6S7R.js.map → register-setup-TDCGWIOS.js.map} +1 -1
  314. package/dist/cli-bundle/chunks/{restore-B3BAB6X2.js → restore-25DLT2Q2.js} +6 -6
  315. package/dist/cli-bundle/chunks/restore-YPMVUUEX.js +14 -0
  316. package/dist/cli-bundle/chunks/{schema-U7IM2DXV.js → schema-FNU3WE4O.js} +7 -6
  317. package/dist/cli-bundle/chunks/{schema-LZNUYHDB.js → schema-NBCM3RAD.js} +7 -6
  318. package/dist/cli-bundle/chunks/update-WWBYOPXO.js +21 -0
  319. package/dist/cli-bundle/chunks/update-WWBYOPXO.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{update-Q3UCILNR.js → update-XHSIAIXE.js} +12 -12
  321. package/dist/cli-bundle/chunks/update-XHSIAIXE.js.map +1 -0
  322. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js +32 -0
  323. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js.map +7 -0
  324. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js +36 -0
  325. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js.map +1 -0
  326. package/dist/cli-bundle/main.js +826 -43
  327. package/dist/cli-bundle/main.js.map +4 -4
  328. package/dist/cli-bundle/sdk-runtime.js +70 -57
  329. package/dist/cli-bundle/sdk-testing.js +6 -6
  330. package/dist/cli-bundle/sdk.js +876 -74
  331. package/dist/cli-bundle/sdk.js.map +4 -4
  332. package/dist/cli.js +5 -4
  333. package/dist/cli.js.map +1 -1
  334. package/dist/core/diagnostics/remediation.js +12 -2
  335. package/dist/core/diagnostics/remediation.js.map +1 -1
  336. package/dist/core/history/projection.d.ts +39 -0
  337. package/dist/core/history/projection.js +164 -0
  338. package/dist/core/history/projection.js.map +1 -0
  339. package/dist/core/history/read.d.ts +3 -0
  340. package/dist/core/history/read.js +55 -0
  341. package/dist/core/history/read.js.map +1 -0
  342. package/dist/core/output/output-control.d.ts +18 -0
  343. package/dist/core/output/output-control.js +26 -0
  344. package/dist/core/output/output-control.js.map +1 -0
  345. package/dist/core/output/output.js +20 -8
  346. package/dist/core/output/output.js.map +1 -1
  347. package/dist/core/sentry/helpers.js +10 -2
  348. package/dist/core/sentry/helpers.js.map +1 -1
  349. package/dist/core/shared/command-types.d.ts +2 -0
  350. package/dist/core/shared/command-types.js +2 -2
  351. package/dist/core/shared/command-types.js.map +1 -1
  352. package/dist/core/shared/errors.d.ts +11 -0
  353. package/dist/core/shared/errors.js +2 -2
  354. package/dist/core/shared/errors.js.map +1 -1
  355. package/dist/mcp/server.d.ts +2 -2
  356. package/dist/mcp/tool-definitions.js +5 -5
  357. package/dist/mcp/tool-definitions.js.map +1 -1
  358. package/dist/sdk/author-attribution.d.ts +35 -0
  359. package/dist/sdk/author-attribution.js +118 -0
  360. package/dist/sdk/author-attribution.js.map +1 -0
  361. package/dist/sdk/cli-contracts/command-aliases.d.ts +7 -0
  362. package/dist/sdk/cli-contracts/command-aliases.js +17 -0
  363. package/dist/sdk/cli-contracts/command-aliases.js.map +1 -0
  364. package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
  365. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  366. package/dist/sdk/cli-contracts/tool-option-contracts.js +6 -2
  367. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  368. package/dist/sdk/cli-contracts/tool-parameter-tables.js +21 -2
  369. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  370. package/dist/sdk/cli-contracts/tool-schema.js +3 -3
  371. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  372. package/dist/sdk/cli-contracts.d.ts +1 -0
  373. package/dist/sdk/cli-contracts.js +3 -2
  374. package/dist/sdk/cli-contracts.js.map +1 -1
  375. package/dist/sdk/cli-program.d.ts +8 -0
  376. package/dist/sdk/cli-program.js +39 -0
  377. package/dist/sdk/cli-program.js.map +1 -0
  378. package/dist/sdk/command-line.d.ts +11 -0
  379. package/dist/sdk/command-line.js +40 -0
  380. package/dist/sdk/command-line.js.map +1 -0
  381. package/dist/sdk/config.d.ts +163 -0
  382. package/dist/sdk/config.js +1087 -0
  383. package/dist/sdk/config.js.map +1 -0
  384. package/dist/sdk/context-relevance.d.ts +21 -0
  385. package/dist/sdk/context-relevance.js +70 -2
  386. package/dist/sdk/context-relevance.js.map +1 -1
  387. package/dist/sdk/dependencies.d.ts +15 -2
  388. package/dist/sdk/dependencies.js +97 -8
  389. package/dist/sdk/dependencies.js.map +1 -1
  390. package/dist/{cli/commands → sdk}/extension/bundled-catalog.d.ts +1 -1
  391. package/dist/{cli/commands → sdk}/extension/bundled-catalog.js +12 -12
  392. package/dist/sdk/extension/bundled-catalog.js.map +1 -0
  393. package/dist/sdk/extension/concurrency.d.ts +7 -0
  394. package/dist/sdk/extension/concurrency.js +26 -0
  395. package/dist/sdk/extension/concurrency.js.map +1 -0
  396. package/dist/sdk/extension/describe.d.ts +91 -0
  397. package/dist/sdk/extension/describe.js +144 -0
  398. package/dist/sdk/extension/describe.js.map +1 -0
  399. package/dist/{cli/commands → sdk}/extension/doctor.d.ts +3 -3
  400. package/dist/{cli/commands → sdk}/extension/doctor.js +7 -7
  401. package/dist/sdk/extension/doctor.js.map +1 -0
  402. package/dist/sdk/extension/install-runtime.d.ts +26 -0
  403. package/dist/sdk/extension/install-runtime.js +269 -0
  404. package/dist/sdk/extension/install-runtime.js.map +1 -0
  405. package/dist/sdk/extension/install-snapshot.d.ts +23 -0
  406. package/dist/sdk/extension/install-snapshot.js +66 -0
  407. package/dist/sdk/extension/install-snapshot.js.map +1 -0
  408. package/dist/{cli/commands → sdk}/extension/install-sources.d.ts +3 -3
  409. package/dist/{cli/commands → sdk}/extension/install-sources.js +15 -12
  410. package/dist/sdk/extension/install-sources.js.map +1 -0
  411. package/dist/{cli/commands → sdk}/extension/managed-state.js +6 -6
  412. package/dist/sdk/extension/managed-state.js.map +1 -0
  413. package/dist/sdk/extension/scaffold.d.ts +36 -0
  414. package/dist/sdk/extension/scaffold.js +2436 -0
  415. package/dist/sdk/extension/scaffold.js.map +1 -0
  416. package/dist/sdk/extension/shared.d.ts +28 -0
  417. package/dist/sdk/extension/shared.js +140 -0
  418. package/dist/sdk/extension/shared.js.map +1 -0
  419. package/dist/sdk/extension/update-check.d.ts +15 -0
  420. package/dist/sdk/extension/update-check.js +68 -0
  421. package/dist/sdk/extension/update-check.js.map +1 -0
  422. package/dist/sdk/extension.d.ts +367 -0
  423. package/dist/sdk/extension.js +2174 -0
  424. package/dist/sdk/extension.js.map +1 -0
  425. package/dist/sdk/governance/gc.d.ts +56 -0
  426. package/dist/sdk/governance/gc.js +276 -0
  427. package/dist/sdk/governance/gc.js.map +1 -0
  428. package/dist/sdk/governance/health.d.ts +187 -0
  429. package/dist/sdk/governance/health.js +1796 -0
  430. package/dist/sdk/governance/health.js.map +1 -0
  431. package/dist/sdk/governance/validate.d.ts +255 -0
  432. package/dist/sdk/governance/validate.js +2175 -0
  433. package/dist/sdk/governance/validate.js.map +1 -0
  434. package/dist/sdk/history-compact.d.ts +142 -0
  435. package/dist/sdk/history-compact.js +508 -0
  436. package/dist/sdk/history-compact.js.map +1 -0
  437. package/dist/sdk/history-mcp.d.ts +17 -0
  438. package/dist/sdk/history-mcp.js +68 -0
  439. package/dist/sdk/history-mcp.js.map +1 -0
  440. package/dist/sdk/history-read.d.ts +31 -0
  441. package/dist/sdk/history-read.js +58 -0
  442. package/dist/sdk/history-read.js.map +1 -0
  443. package/dist/sdk/history-redact.d.ts +120 -0
  444. package/dist/sdk/history-redact.js +577 -0
  445. package/dist/sdk/history-redact.js.map +1 -0
  446. package/dist/sdk/history-repair.d.ts +89 -0
  447. package/dist/sdk/history-repair.js +263 -0
  448. package/dist/sdk/history-repair.js.map +1 -0
  449. package/dist/sdk/index.d.ts +25 -1
  450. package/dist/sdk/index.js +27 -3
  451. package/dist/sdk/index.js.map +1 -1
  452. package/dist/sdk/init-agent-guidance.d.ts +113 -0
  453. package/dist/sdk/init-agent-guidance.js +437 -0
  454. package/dist/sdk/init-agent-guidance.js.map +1 -0
  455. package/dist/sdk/init.d.ts +186 -0
  456. package/dist/sdk/init.js +733 -0
  457. package/dist/sdk/init.js.map +1 -0
  458. package/dist/sdk/invocation-author.d.ts +2 -0
  459. package/dist/sdk/invocation-author.js +39 -0
  460. package/dist/sdk/invocation-author.js.map +1 -0
  461. package/dist/sdk/item-children.d.ts +45 -0
  462. package/dist/sdk/item-children.js +75 -0
  463. package/dist/sdk/item-children.js.map +1 -0
  464. package/dist/sdk/item-schedule.d.ts +26 -0
  465. package/dist/sdk/item-schedule.js +28 -0
  466. package/dist/sdk/item-schedule.js.map +1 -0
  467. package/dist/sdk/output.d.ts +7 -0
  468. package/dist/sdk/output.js +11 -0
  469. package/dist/sdk/output.js.map +1 -0
  470. package/dist/sdk/pagination.d.ts +4 -1
  471. package/dist/sdk/pagination.js +13 -5
  472. package/dist/sdk/pagination.js.map +1 -1
  473. package/dist/sdk/profile.d.ts +176 -0
  474. package/dist/sdk/profile.js +431 -0
  475. package/dist/sdk/profile.js.map +1 -0
  476. package/dist/sdk/relationship-analytics.d.ts +108 -0
  477. package/dist/sdk/relationship-analytics.js +292 -0
  478. package/dist/sdk/relationship-analytics.js.map +1 -0
  479. package/dist/sdk/relationship-context.d.ts +67 -0
  480. package/dist/sdk/relationship-context.js +207 -0
  481. package/dist/sdk/relationship-context.js.map +1 -0
  482. package/dist/sdk/relationship-history.d.ts +109 -0
  483. package/dist/sdk/relationship-history.js +401 -0
  484. package/dist/sdk/relationship-history.js.map +1 -0
  485. package/dist/sdk/relationships.d.ts +145 -0
  486. package/dist/sdk/relationships.js +551 -0
  487. package/dist/sdk/relationships.js.map +1 -0
  488. package/dist/sdk/runtime-input.d.ts +10 -0
  489. package/dist/sdk/runtime-input.js +60 -0
  490. package/dist/sdk/runtime-input.js.map +1 -0
  491. package/dist/sdk/runtime.d.ts +31 -8
  492. package/dist/sdk/runtime.js +61 -57
  493. package/dist/sdk/runtime.js.map +1 -1
  494. package/dist/sdk/schema.d.ts +507 -0
  495. package/dist/sdk/schema.js +1269 -0
  496. package/dist/sdk/schema.js.map +1 -0
  497. package/dist/{cli/commands → sdk}/templates.d.ts +1 -1
  498. package/dist/{cli/commands → sdk}/templates.js +9 -9
  499. package/dist/sdk/templates.js.map +1 -0
  500. package/dist/{cli/commands → sdk}/test/linked-command-detection.d.ts +10 -2
  501. package/dist/sdk/test/linked-command-detection.js +525 -0
  502. package/dist/sdk/test/linked-command-detection.js.map +1 -0
  503. package/docs/COMMANDS.md +58 -40
  504. package/docs/EXTENSIONS.md +10 -1
  505. package/docs/RELATIONSHIP_GRAPH.md +113 -0
  506. package/docs/RELEASING.md +2 -0
  507. package/docs/SDK.md +156 -9
  508. package/docs/SDK_CUSTOMIZATION_PRIMITIVES.md +79 -0
  509. package/marketplace.json +2 -2
  510. package/package.json +3 -2
  511. package/packages/pm-beads/package.json +1 -1
  512. package/packages/pm-calendar/package.json +1 -1
  513. package/packages/pm-command-kit/package.json +1 -1
  514. package/packages/pm-governance-audit/extensions/governance-audit/runtime-utils.ts +76 -16
  515. package/packages/pm-governance-audit/extensions/governance-audit/sdk.ts +8 -0
  516. package/packages/pm-governance-audit/package.json +1 -1
  517. package/packages/pm-guide-shell/package.json +1 -1
  518. package/packages/pm-kanban/package.json +1 -1
  519. package/packages/pm-lifecycle-hooks/package.json +1 -1
  520. package/packages/pm-linked-test-adapters/package.json +1 -1
  521. package/packages/pm-search-advanced/package.json +1 -1
  522. package/packages/pm-templates/package.json +1 -1
  523. package/packages/pm-todos/package.json +1 -1
  524. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  525. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  526. package/scripts/bundle-cli.mjs +66 -23
  527. package/dist/cli/commands/extension/bundled-catalog.js.map +0 -1
  528. package/dist/cli/commands/extension/doctor.js.map +0 -1
  529. package/dist/cli/commands/extension/install-sources.js.map +0 -1
  530. package/dist/cli/commands/extension/managed-state.js.map +0 -1
  531. package/dist/cli/commands/templates.js.map +0 -1
  532. package/dist/cli/commands/test/linked-command-detection.js +0 -248
  533. package/dist/cli/commands/test/linked-command-detection.js.map +0 -1
  534. package/dist/cli-bundle/chunks/append-DYQWQK2J.js +0 -11
  535. package/dist/cli-bundle/chunks/chunk-2GA3NK35.js +0 -530
  536. package/dist/cli-bundle/chunks/chunk-2GA3NK35.js.map +0 -1
  537. package/dist/cli-bundle/chunks/chunk-2QIQGYPW.js.map +0 -7
  538. package/dist/cli-bundle/chunks/chunk-4DY4KPQI.js.map +0 -7
  539. package/dist/cli-bundle/chunks/chunk-4WREH7RT.js +0 -554
  540. package/dist/cli-bundle/chunks/chunk-4WREH7RT.js.map +0 -7
  541. package/dist/cli-bundle/chunks/chunk-5CT5BW6E.js.map +0 -7
  542. package/dist/cli-bundle/chunks/chunk-5URI7TPJ.js.map +0 -7
  543. package/dist/cli-bundle/chunks/chunk-6MHSBDGD.js.map +0 -7
  544. package/dist/cli-bundle/chunks/chunk-6OTZMORS.js.map +0 -7
  545. package/dist/cli-bundle/chunks/chunk-6PKA3SJQ.js.map +0 -1
  546. package/dist/cli-bundle/chunks/chunk-6TTOHMTB.js.map +0 -1
  547. package/dist/cli-bundle/chunks/chunk-7QDSYUMF.js.map +0 -1
  548. package/dist/cli-bundle/chunks/chunk-7TQMR6LK.js.map +0 -7
  549. package/dist/cli-bundle/chunks/chunk-B5DZYTT3.js +0 -312
  550. package/dist/cli-bundle/chunks/chunk-B5DZYTT3.js.map +0 -7
  551. package/dist/cli-bundle/chunks/chunk-BPD26E3P.js.map +0 -1
  552. package/dist/cli-bundle/chunks/chunk-CDJYP7OQ.js.map +0 -1
  553. package/dist/cli-bundle/chunks/chunk-DBZVUJTK.js +0 -858
  554. package/dist/cli-bundle/chunks/chunk-DBZVUJTK.js.map +0 -1
  555. package/dist/cli-bundle/chunks/chunk-DVOLZJ3C.js.map +0 -1
  556. package/dist/cli-bundle/chunks/chunk-DYEX6NFH.js.map +0 -7
  557. package/dist/cli-bundle/chunks/chunk-F7PSHRNO.js.map +0 -1
  558. package/dist/cli-bundle/chunks/chunk-FO7GMJKG.js +0 -875
  559. package/dist/cli-bundle/chunks/chunk-FO7GMJKG.js.map +0 -7
  560. package/dist/cli-bundle/chunks/chunk-FTQLW4JD.js.map +0 -1
  561. package/dist/cli-bundle/chunks/chunk-IA3YFTXT.js.map +0 -1
  562. package/dist/cli-bundle/chunks/chunk-IGED7NH2.js.map +0 -7
  563. package/dist/cli-bundle/chunks/chunk-J4NZOP3I.js.map +0 -1
  564. package/dist/cli-bundle/chunks/chunk-JL7WZ4O2.js.map +0 -7
  565. package/dist/cli-bundle/chunks/chunk-L24HCJFC.js +0 -309
  566. package/dist/cli-bundle/chunks/chunk-L24HCJFC.js.map +0 -1
  567. package/dist/cli-bundle/chunks/chunk-LWTIRS3Y.js.map +0 -7
  568. package/dist/cli-bundle/chunks/chunk-MKL4CP2I.js.map +0 -1
  569. package/dist/cli-bundle/chunks/chunk-N3CMP4NI.js.map +0 -1
  570. package/dist/cli-bundle/chunks/chunk-PHKP3AGR.js.map +0 -7
  571. package/dist/cli-bundle/chunks/chunk-Q37E63AM.js.map +0 -7
  572. package/dist/cli-bundle/chunks/chunk-QASRVKUQ.js.map +0 -1
  573. package/dist/cli-bundle/chunks/chunk-RGXD5JJR.js.map +0 -7
  574. package/dist/cli-bundle/chunks/chunk-UB2QYSTO.js.map +0 -1
  575. package/dist/cli-bundle/chunks/chunk-UGTVWL3E.js.map +0 -1
  576. package/dist/cli-bundle/chunks/chunk-ZAYYDNB3.js.map +0 -1
  577. package/dist/cli-bundle/chunks/chunk-ZUKSZVBW.js.map +0 -7
  578. package/dist/cli-bundle/chunks/close-RI4JQQHU.js +0 -12
  579. package/dist/cli-bundle/chunks/close-many-LY2XJ52M.js +0 -21
  580. package/dist/cli-bundle/chunks/comments-35M273DN.js +0 -13
  581. package/dist/cli-bundle/chunks/copy-NPYM7M7U.js +0 -9
  582. package/dist/cli-bundle/chunks/delete-ODRWJWAM.js +0 -10
  583. package/dist/cli-bundle/chunks/docs-G7N4E2JO.js +0 -14
  584. package/dist/cli-bundle/chunks/focus-U5TRVCRS.js +0 -10
  585. package/dist/cli-bundle/chunks/history-compact-M7GHYVFN.js +0 -20
  586. package/dist/cli-bundle/chunks/history-redact-JIHZLHDP.js +0 -16
  587. package/dist/cli-bundle/chunks/history-repair-NAFCHLH7.js +0 -18
  588. package/dist/cli-bundle/chunks/learnings-SONGPSHI.js +0 -13
  589. package/dist/cli-bundle/chunks/notes-BSD53H2W.js +0 -13
  590. package/dist/cli-bundle/chunks/plan-AWLYGBNV.js +0 -24
  591. package/dist/cli-bundle/chunks/register-list-query-BUWCYHBT.js.map +0 -7
  592. package/dist/cli-bundle/chunks/register-list-query-KTZ6AGE7.js.map +0 -1
  593. package/dist/cli-bundle/chunks/register-mutation-4FMGJJF7.js.map +0 -1
  594. package/dist/cli-bundle/chunks/restore-66GLMHIX.js +0 -14
  595. package/dist/cli-bundle/chunks/update-2XGHIVQ2.js +0 -21
  596. package/dist/cli-bundle/chunks/update-many-75K57FS3.js +0 -34
  597. package/dist/cli-bundle/chunks/update-many-U42YA445.js +0 -30
  598. /package/dist/cli-bundle/chunks/{append-PVZJDM6J.js.map → append-OJQFUQ4T.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{append-DYQWQK2J.js.map → append-UZVHUO74.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{chunk-MQZ3PLCF.js.map → chunk-2IFFUZLC.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{chunk-P6MYFH6K.js.map → chunk-2JKGO6QX.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{chunk-X3GYR4P2.js.map → chunk-2NCIPMQP.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{chunk-Q7E6OYZK.js.map → chunk-2VPAVL7O.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{chunk-DRNJPEPQ.js.map → chunk-2WSE6PO2.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{chunk-FDSBDNYE.js.map → chunk-34L5OT3Y.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{chunk-TH7U4KLY.js.map → chunk-3AUGG2DP.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{chunk-NKW36AMT.js.map → chunk-3CLU2XZO.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{chunk-ABRCOSDC.js.map → chunk-3WM75PWC.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{chunk-X6BVXQ52.js.map → chunk-5JLUII3O.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{chunk-3TL7WOEF.js.map → chunk-6N2VXVTQ.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{chunk-ERL2YFJ2.js.map → chunk-6S3YSUYG.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{chunk-IFZA4VB5.js.map → chunk-AHVTB5I5.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{chunk-DO5RGJXT.js.map → chunk-APRVSW2O.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{chunk-NAQYVWSQ.js.map → chunk-B7PE22W6.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{chunk-MD6ULIPJ.js.map → chunk-BCOFWYW4.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{chunk-KADLSPIU.js.map → chunk-BEP7WJA2.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{chunk-OBDLEQG5.js.map → chunk-CRVF2JDM.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{chunk-FJZDA6MS.js.map → chunk-DM4H7FP4.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{close-LZECOMHO.js.map → chunk-DUT67M43.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{chunk-44LNIULG.js.map → chunk-DYH63FX7.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{chunk-HAMLIWAF.js.map → chunk-EAB64KLB.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{chunk-CIOZ376P.js.map → chunk-EACOH7AU.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{chunk-QK2ZN6UL.js.map → chunk-EJEXHTY5.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{chunk-WQUEHPZB.js.map → chunk-EYLCSJAI.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{chunk-655STMGA.js.map → chunk-FMBNM2EN.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{chunk-RMF3IOYQ.js.map → chunk-FNSPG7MU.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{chunk-KB726FMH.js.map → chunk-H2Z3FYXQ.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{chunk-BN62TO2S.js.map → chunk-IA5FKNII.js.map} +0 -0
  629. /package/dist/cli-bundle/chunks/{chunk-W6HZ55JO.js.map → chunk-IJIICKVW.js.map} +0 -0
  630. /package/dist/cli-bundle/chunks/{chunk-M7EWN4TF.js.map → chunk-JOUQZENX.js.map} +0 -0
  631. /package/dist/cli-bundle/chunks/{chunk-2FNWQXZ2.js.map → chunk-JYFOV7FC.js.map} +0 -0
  632. /package/dist/cli-bundle/chunks/{chunk-HLHSQ5CA.js.map → chunk-K2X6U4UA.js.map} +0 -0
  633. /package/dist/cli-bundle/chunks/{chunk-M6ASXYCU.js.map → chunk-KG44YSKD.js.map} +0 -0
  634. /package/dist/cli-bundle/chunks/{chunk-YVKE5ZDM.js.map → chunk-KPMKHGEA.js.map} +0 -0
  635. /package/dist/cli-bundle/chunks/{close-many-ZHI6A5TN.js.map → chunk-MIQDDLB5.js.map} +0 -0
  636. /package/dist/cli-bundle/chunks/{chunk-UJ4HJYWL.js.map → chunk-NLDFBC6J.js.map} +0 -0
  637. /package/dist/cli-bundle/chunks/{chunk-WRKB56FC.js.map → chunk-NP22ERDF.js.map} +0 -0
  638. /package/dist/cli-bundle/chunks/{chunk-YQYG2V23.js.map → chunk-NU3IMIEA.js.map} +0 -0
  639. /package/dist/cli-bundle/chunks/{chunk-3I3LRT2G.js.map → chunk-NVPZIJVR.js.map} +0 -0
  640. /package/dist/cli-bundle/chunks/{chunk-JAF4TUQ7.js.map → chunk-ODALILG3.js.map} +0 -0
  641. /package/dist/cli-bundle/chunks/{chunk-QZ7LT3XE.js.map → chunk-ONREO4ST.js.map} +0 -0
  642. /package/dist/cli-bundle/chunks/{chunk-3CMRNVTO.js.map → chunk-P74IZQ7A.js.map} +0 -0
  643. /package/dist/cli-bundle/chunks/{chunk-ZTRBSABY.js.map → chunk-PGY23YTC.js.map} +0 -0
  644. /package/dist/cli-bundle/chunks/{chunk-H2QBAKLQ.js.map → chunk-PMOSXADO.js.map} +0 -0
  645. /package/dist/cli-bundle/chunks/{close-RI4JQQHU.js.map → chunk-PNTULOGU.js.map} +0 -0
  646. /package/dist/cli-bundle/chunks/{chunk-GSEADLRH.js.map → chunk-Q7A43DS4.js.map} +0 -0
  647. /package/dist/cli-bundle/chunks/{chunk-QSPARJWF.js.map → chunk-QEHQ2GVG.js.map} +0 -0
  648. /package/dist/cli-bundle/chunks/{chunk-VJTAEIPC.js.map → chunk-QIPLHNP7.js.map} +0 -0
  649. /package/dist/cli-bundle/chunks/{chunk-K7WNZ7KD.js.map → chunk-QKJGPFAF.js.map} +0 -0
  650. /package/dist/cli-bundle/chunks/{chunk-ZNP64HOW.js.map → chunk-RLCHOOHC.js.map} +0 -0
  651. /package/dist/cli-bundle/chunks/{chunk-IAPHYPRL.js.map → chunk-RMLWNPH2.js.map} +0 -0
  652. /package/dist/cli-bundle/chunks/{chunk-UVBA6F5A.js.map → chunk-RRM5JYJC.js.map} +0 -0
  653. /package/dist/cli-bundle/chunks/{chunk-6IIVBC56.js.map → chunk-S6MQESFR.js.map} +0 -0
  654. /package/dist/cli-bundle/chunks/{chunk-QABYZYLU.js.map → chunk-SDQLJWBO.js.map} +0 -0
  655. /package/dist/cli-bundle/chunks/{chunk-ANSJHDOZ.js.map → chunk-SELVXEZK.js.map} +0 -0
  656. /package/dist/cli-bundle/chunks/{chunk-WD6MSYMP.js.map → chunk-TKOVBP6C.js.map} +0 -0
  657. /package/dist/cli-bundle/chunks/{chunk-TZ2PSLLT.js.map → chunk-TQSZFPIS.js.map} +0 -0
  658. /package/dist/cli-bundle/chunks/{chunk-WPAWZW7S.js.map → chunk-TSMHDIW4.js.map} +0 -0
  659. /package/dist/cli-bundle/chunks/{chunk-TZRTLMWM.js.map → chunk-UFXU44HV.js.map} +0 -0
  660. /package/dist/cli-bundle/chunks/{chunk-TWLDBKQU.js.map → chunk-ULTHRDBP.js.map} +0 -0
  661. /package/dist/cli-bundle/chunks/{chunk-RA5AIAMP.js.map → chunk-UOHFKBUV.js.map} +0 -0
  662. /package/dist/cli-bundle/chunks/{chunk-4RXTMU57.js.map → chunk-UY2ACEMF.js.map} +0 -0
  663. /package/dist/cli-bundle/chunks/{chunk-FIGXOCEQ.js.map → chunk-WUJQK4YV.js.map} +0 -0
  664. /package/dist/cli-bundle/chunks/{chunk-T4BRCB6Z.js.map → chunk-XSJUSQAE.js.map} +0 -0
  665. /package/dist/cli-bundle/chunks/{chunk-UKUIIBDW.js.map → chunk-YAQEBNY7.js.map} +0 -0
  666. /package/dist/cli-bundle/chunks/{chunk-E2WC6S4P.js.map → chunk-YBLZ2VE7.js.map} +0 -0
  667. /package/dist/cli-bundle/chunks/{chunk-Y72FV7RM.js.map → chunk-YCQET3OT.js.map} +0 -0
  668. /package/dist/cli-bundle/chunks/{close-many-LY2XJ52M.js.map → chunk-YUSOJDWM.js.map} +0 -0
  669. /package/dist/cli-bundle/chunks/{chunk-FS6UM5WH.js.map → chunk-ZI6VQWQ7.js.map} +0 -0
  670. /package/dist/cli-bundle/chunks/{comments-AJWRTFZ5.js.map → close-CWODTPKG.js.map} +0 -0
  671. /package/dist/cli-bundle/chunks/{comments-35M273DN.js.map → close-W6LI2PKM.js.map} +0 -0
  672. /package/dist/cli-bundle/chunks/{copy-GMXYKBXT.js.map → close-many-CQFUY7MR.js.map} +0 -0
  673. /package/dist/cli-bundle/chunks/{copy-NPYM7M7U.js.map → close-many-DLDDVSH5.js.map} +0 -0
  674. /package/dist/cli-bundle/chunks/{create-F53OBTOU.js.map → comments-E3TNTK24.js.map} +0 -0
  675. /package/dist/cli-bundle/chunks/{create-HU4Q7RJX.js.map → comments-WGLHR7LB.js.map} +0 -0
  676. /package/dist/cli-bundle/chunks/{delete-GSDZLTRC.js.map → copy-LXVDXH7B.js.map} +0 -0
  677. /package/dist/cli-bundle/chunks/{delete-ODRWJWAM.js.map → copy-Q5ZJPUKR.js.map} +0 -0
  678. /package/dist/cli-bundle/chunks/{deps-U57I7EAK.js.map → create-J5U6ND4K.js.map} +0 -0
  679. /package/dist/cli-bundle/chunks/{deps-WWB7P2GT.js.map → create-LBVCYMEG.js.map} +0 -0
  680. /package/dist/cli-bundle/chunks/{docs-MQIY2ZQS.js.map → delete-PMJBNY5G.js.map} +0 -0
  681. /package/dist/cli-bundle/chunks/{docs-G7N4E2JO.js.map → delete-WNHB3LYW.js.map} +0 -0
  682. /package/dist/cli-bundle/chunks/{files-TTY6N2AV.js.map → deps-JZ7TMVCB.js.map} +0 -0
  683. /package/dist/cli-bundle/chunks/{files-TBZD7V6H.js.map → deps-OA26IS25.js.map} +0 -0
  684. /package/dist/cli-bundle/chunks/{focus-XT6YVFFX.js.map → docs-FEWB2DQB.js.map} +0 -0
  685. /package/dist/cli-bundle/chunks/{focus-U5TRVCRS.js.map → docs-HA2AIDBB.js.map} +0 -0
  686. /package/dist/cli-bundle/chunks/{history-compact-M7GHYVFN.js.map → files-6YFBJRBG.js.map} +0 -0
  687. /package/dist/cli-bundle/chunks/{history-compact-KKVUWB4V.js.map → files-EFIWKFTM.js.map} +0 -0
  688. /package/dist/cli-bundle/chunks/{history-redact-3DVZOILD.js.map → focus-4QJR7FOQ.js.map} +0 -0
  689. /package/dist/cli-bundle/chunks/{history-redact-JIHZLHDP.js.map → focus-POIW5LTJ.js.map} +0 -0
  690. /package/dist/cli-bundle/chunks/{history-repair-ITDUMK4N.js.map → history-compact-CKRPDTJN.js.map} +0 -0
  691. /package/dist/cli-bundle/chunks/{history-repair-NAFCHLH7.js.map → history-compact-FWG2C7FZ.js.map} +0 -0
  692. /package/dist/cli-bundle/chunks/{learnings-SONGPSHI.js.map → history-redact-BB3TGDAE.js.map} +0 -0
  693. /package/dist/cli-bundle/chunks/{learnings-FGO3NSFW.js.map → history-redact-D225BHOZ.js.map} +0 -0
  694. /package/dist/cli-bundle/chunks/{notes-BSD53H2W.js.map → history-repair-6GEAM7HE.js.map} +0 -0
  695. /package/dist/cli-bundle/chunks/{notes-NQ6RXVW6.js.map → history-repair-RQXKQHL4.js.map} +0 -0
  696. /package/dist/cli-bundle/chunks/{plan-2NNEO46V.js.map → learnings-JLNLCOL5.js.map} +0 -0
  697. /package/dist/cli-bundle/chunks/{plan-AWLYGBNV.js.map → learnings-RSNLSWDC.js.map} +0 -0
  698. /package/dist/cli-bundle/chunks/{profile-U725ATWZ.js.map → notes-2WDH6DXU.js.map} +0 -0
  699. /package/dist/cli-bundle/chunks/{profile-AAQUU6T3.js.map → notes-GB47XXQQ.js.map} +0 -0
  700. /package/dist/cli-bundle/chunks/{restore-66GLMHIX.js.map → plan-DOVI2VMW.js.map} +0 -0
  701. /package/dist/cli-bundle/chunks/{restore-B3BAB6X2.js.map → plan-VDCJ2PCN.js.map} +0 -0
  702. /package/dist/cli-bundle/chunks/{schema-U7IM2DXV.js.map → profile-FAU7NZML.js.map} +0 -0
  703. /package/dist/cli-bundle/chunks/{schema-LZNUYHDB.js.map → profile-IVXQEL3D.js.map} +0 -0
  704. /package/dist/cli-bundle/chunks/{update-Q3UCILNR.js.map → restore-25DLT2Q2.js.map} +0 -0
  705. /package/dist/cli-bundle/chunks/{update-2XGHIVQ2.js.map → restore-YPMVUUEX.js.map} +0 -0
  706. /package/dist/cli-bundle/chunks/{update-many-75K57FS3.js.map → schema-FNU3WE4O.js.map} +0 -0
  707. /package/dist/cli-bundle/chunks/{update-many-U42YA445.js.map → schema-NBCM3RAD.js.map} +0 -0
  708. /package/dist/{cli/commands → sdk}/extension/managed-state.d.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-templates",
3
- "version": "2026.7.14",
3
+ "version": "2026.7.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for reusable create templates.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-todos",
3
- "version": "2026.7.14",
3
+ "version": "2026.7.16",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for Todo markdown import and export.",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pm-claude",
3
3
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
4
- "version": "2026.7.14",
4
+ "version": "2026.7.16",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-codex",
3
- "version": "2026.7.14",
3
+ "version": "2026.7.16",
4
4
  "description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
5
5
  "author": {
6
6
  "name": "unbrained",
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import { createHash } from "node:crypto";
3
4
  import { lstat, mkdir, readdir, readFile, rename, rm, stat, unlink, writeFile } from "node:fs/promises";
4
5
  import path from "node:path";
5
6
  import { fileURLToPath } from "node:url";
@@ -24,11 +25,44 @@ const lockRetryMs = 250;
24
25
  const lockTimeoutMs = 120_000;
25
26
  const staleLockMs = 10 * 60_000;
26
27
  const bundleStaleRetentionMs = 10 * 60_000;
28
+ const bundleManifestPath = path.join(outputDir, "bundle-manifest.json");
27
29
 
28
30
  export function sleep(ms) {
29
31
  return new Promise((resolve) => setTimeout(resolve, ms));
30
32
  }
31
33
 
34
+ export function hasErrorCode(error, codes) {
35
+ return Boolean(
36
+ error &&
37
+ typeof error === "object" &&
38
+ "code" in error &&
39
+ codes.includes(String(error.code)),
40
+ );
41
+ }
42
+
43
+ async function readBundleBuildLockStats() {
44
+ try {
45
+ return await stat(lockDir);
46
+ } catch (error) {
47
+ if (hasErrorCode(error, ["ENOENT"])) {
48
+ return null;
49
+ }
50
+ throw error;
51
+ }
52
+ }
53
+
54
+ async function reclaimStaleBundleBuildLock() {
55
+ const staleCandidateDir = `${lockDir}.stale.${Date.now()}.${Math.random().toString(36).slice(2)}`;
56
+ try {
57
+ await rename(lockDir, staleCandidateDir);
58
+ await rm(staleCandidateDir, { recursive: true, force: true });
59
+ } catch (error) {
60
+ if (!hasErrorCode(error, ["ENOENT", "EEXIST", "ENOTEMPTY"])) {
61
+ throw error;
62
+ }
63
+ }
64
+ }
65
+
32
66
  export async function acquireBundleBuildLock() {
33
67
  await mkdir(path.dirname(lockDir), { recursive: true });
34
68
  const startedAt = Date.now();
@@ -39,33 +73,15 @@ export async function acquireBundleBuildLock() {
39
73
  await rm(lockDir, { recursive: true, force: true });
40
74
  };
41
75
  } catch (error) {
42
- if (!error || typeof error !== "object" || !("code" in error) || error.code !== "EEXIST") {
76
+ if (!hasErrorCode(error, ["EEXIST"])) {
43
77
  throw error;
44
78
  }
45
- const lockStats = await stat(lockDir).catch((statError) => {
46
- if (statError && typeof statError === "object" && "code" in statError && statError.code === "ENOENT") {
47
- return null;
48
- }
49
- throw statError;
50
- });
79
+ const lockStats = await readBundleBuildLockStats();
51
80
  if (!lockStats) {
52
81
  continue;
53
82
  }
54
83
  if (Date.now() - lockStats.mtimeMs > staleLockMs) {
55
- const staleCandidateDir = `${lockDir}.stale.${Date.now()}.${Math.random().toString(36).slice(2)}`;
56
- try {
57
- await rename(lockDir, staleCandidateDir);
58
- await rm(staleCandidateDir, { recursive: true, force: true });
59
- } catch (staleError) {
60
- if (
61
- !staleError ||
62
- typeof staleError !== "object" ||
63
- !("code" in staleError) ||
64
- !["ENOENT", "EEXIST", "ENOTEMPTY"].includes(String(staleError.code))
65
- ) {
66
- throw staleError;
67
- }
68
- }
84
+ await reclaimStaleBundleBuildLock();
69
85
  continue;
70
86
  }
71
87
  if (Date.now() - startedAt > lockTimeoutMs) {
@@ -116,6 +132,32 @@ export async function removeStaleBundleFiles(outputs) {
116
132
  );
117
133
  }
118
134
 
135
+ export async function writeBundleManifest(outputs) {
136
+ const files = [];
137
+ for (const outputPath of Object.keys(outputs).sort((left, right) => left.localeCompare(right))) {
138
+ const absolutePath = path.resolve(repoRoot, outputPath);
139
+ if (!absolutePath.startsWith(`${outputDir}${path.sep}`)) {
140
+ continue;
141
+ }
142
+ const relativePath = path.relative(outputDir, absolutePath).split(path.sep).join("/");
143
+ const contents = await readFile(absolutePath);
144
+ files.push({
145
+ path: relativePath,
146
+ sha256: createHash("sha256").update(contents).digest("hex"),
147
+ });
148
+ }
149
+ const generation = createHash("sha256")
150
+ .update(files.map((entry) => `${entry.path}:${entry.sha256}`).join("\n"))
151
+ .digest("hex");
152
+ const temporaryPath = `${bundleManifestPath}.tmp-${process.pid}`;
153
+ await writeFile(
154
+ temporaryPath,
155
+ `${JSON.stringify({ schema_version: 1, generation, files }, null, 2)}\n`,
156
+ "utf8",
157
+ );
158
+ await rename(temporaryPath, bundleManifestPath);
159
+ }
160
+
119
161
  export async function main() {
120
162
  // Do not delete the live bundle before rebuilding. Agents often run docs,
121
163
  // dogfood, and build gates concurrently in one checkout; removing this folder
@@ -138,13 +180,14 @@ export async function main() {
138
180
  logLevel: "warning",
139
181
  });
140
182
  await removeStaleBundleFiles(buildResult.metafile.outputs);
183
+ await writeBundleManifest(buildResult.metafile.outputs);
141
184
  } finally {
142
185
  await releaseBundleBuildLock();
143
186
  }
144
187
 
145
188
  const binSource = await readFile(binPath, "utf8");
146
- const sourceImport = 'await import("./cli/main.js")';
147
- const bundledImport = 'await import("./cli-bundle/main.js")';
189
+ const sourceImport = '"./cli/main.js"';
190
+ const bundledImport = '"./cli-bundle/main.js"';
148
191
  if (binSource.includes(bundledImport)) {
149
192
  process.exit(0);
150
193
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundled-catalog.js","sources":["cli/commands/extension/bundled-catalog.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/extension/bundled-catalog\n *\n * Implements extension package-management support for Bundled Catalog.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n collectPackageExtensionDirectories,\n PM_PACKAGE_RESOURCE_KINDS,\n readPmPackageManifest,\n} from \"../../../core/packages/manifest.js\";\nimport { resolvePmPackageRootFromModule } from \"../../../core/packages/root.js\";\nimport { pathExists } 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 { splitCommaList } from \"../../../core/shared/split-comma-list.js\";\nimport { resolveExtensionRoots } from \"../../../core/extensions/loader.js\";\nimport { resolvePmRoot } from \"../../../core/store/paths.js\";\nimport { validateExtensionDirectory } from \"./shared.js\";\nimport { readManagedExtensionState } from \"./managed-state.js\";\nimport type { ExtensionCommandOptions, ExtensionScope } from \"../extension.js\";\n\nconst PM_PACKAGE_ROOT_ENV = \"PM_CLI_PACKAGE_ROOT\";\nconst LEGACY_BUNDLED_PACKAGE_ALIASES: Record<\n string,\n { package_directory: string; legacy_extension_directory: string }\n> = {\n beads: {\n package_directory: \"pm-beads\",\n legacy_extension_directory: \"beads\",\n },\n todos: {\n package_directory: \"pm-todos\",\n legacy_extension_directory: \"todos\",\n },\n};\nconst BUNDLED_PACKAGE_INSTALL_ALL_TARGETS = new Set([\"*\", \"all\"]);\n\ninterface BundledPackageEntry {\n alias: string;\n package_directory: string;\n package_root: string;\n package_name: string | null;\n}\n\nfunction resolvePackageRootCandidates(): string[] {\n const candidates: string[] = [];\n const envRoot = process.env[PM_PACKAGE_ROOT_ENV];\n /* c8 ignore start -- env-root override branch is exercised by package-root integration tests */\n if (typeof envRoot === \"string\" && envRoot.trim().length > 0) {\n candidates.push(path.resolve(envRoot.trim()));\n }\n /* c8 ignore stop */\n candidates.push(\n resolvePmPackageRootFromModule(import.meta.url, [\"../../../..\"]),\n );\n return [...new Set(candidates)];\n}\n\n/** Implements resolve bundled extension alias source for the public runtime surface of this module. */\nexport async function resolveBundledExtensionAliasSource(\n input: string,\n): Promise<string | null> {\n const normalized = input.trim().toLowerCase();\n const packageRoot = await resolveBundledPackageRoot(normalized);\n if (packageRoot) {\n return packageRoot;\n }\n\n const alias = LEGACY_BUNDLED_PACKAGE_ALIASES[normalized];\n /* c8 ignore start -- known aliases resolve through package manifests in normal runtime */\n if (!alias) {\n return null;\n }\n /* c8 ignore stop */\n /* c8 ignore start -- exercised only when legacy extension paths exist without package manifests */\n for (const packageRoot of resolvePackageRootCandidates()) {\n const legacyExtensionPath = path.join(\n packageRoot,\n \".agents\",\n \"pm\",\n \"extensions\",\n alias.legacy_extension_directory,\n );\n if (await pathExists(path.join(legacyExtensionPath, \"manifest.json\"))) {\n return legacyExtensionPath;\n }\n }\n return null;\n /* c8 ignore stop */\n}\n\n/** Implements check whether bundled package install all target for the public runtime surface of this module. */\nexport function isBundledPackageInstallAllTarget(input: string): boolean {\n return BUNDLED_PACKAGE_INSTALL_ALL_TARGETS.has(input.trim().toLowerCase());\n}\n\nfunction derivePackageAlias(packageDirectory: string): string {\n return packageDirectory.replace(/^pm-/i, \"\").trim().toLowerCase();\n}\n\nasync function collectManifestPackageEntries(\n packagesRoot: string,\n entriesByAlias: Map<string, BundledPackageEntry>,\n): Promise<void> {\n const entries = await fs.readdir(packagesRoot, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory() || !entry.name.startsWith(\"pm-\")) {\n continue;\n }\n const candidateRoot = path.join(packagesRoot, entry.name);\n if (!(await pathExists(path.join(candidateRoot, \"package.json\")))) {\n continue;\n }\n const manifest = await readPmPackageManifest(candidateRoot);\n const aliases =\n manifest.aliases && manifest.aliases.length > 0\n ? manifest.aliases\n : [derivePackageAlias(entry.name)];\n for (const alias of aliases) {\n const normalizedAlias = alias.trim().toLowerCase();\n if (normalizedAlias.length === 0 || entriesByAlias.has(normalizedAlias)) {\n continue;\n }\n entriesByAlias.set(normalizedAlias, {\n alias: normalizedAlias,\n package_directory: entry.name,\n package_root: candidateRoot,\n package_name: manifest.package_name ?? null,\n });\n }\n }\n}\n\nasync function collectBundledPackageEntries(): Promise<BundledPackageEntry[]> {\n const entriesByAlias = new Map<string, BundledPackageEntry>();\n for (const packageRoot of resolvePackageRootCandidates()) {\n const packagesRoot = path.join(packageRoot, \"packages\");\n if (!(await pathExists(packagesRoot))) {\n continue;\n }\n await collectManifestPackageEntries(packagesRoot, entriesByAlias);\n }\n\n for (const [alias, legacy] of Object.entries(\n LEGACY_BUNDLED_PACKAGE_ALIASES,\n )) {\n /* c8 ignore start -- canonical aliases are present in bundled package manifests */\n if (entriesByAlias.has(alias)) {\n continue;\n }\n /* c8 ignore stop */\n /* c8 ignore start -- compatibility fallback when only legacy package layout exists */\n for (const packageRoot of resolvePackageRootCandidates()) {\n const packagePath = path.join(\n packageRoot,\n \"packages\",\n legacy.package_directory,\n );\n if (await pathExists(path.join(packagePath, \"package.json\"))) {\n entriesByAlias.set(alias, {\n alias,\n package_directory: legacy.package_directory,\n package_root: packagePath,\n package_name: null,\n });\n break;\n }\n }\n /* c8 ignore stop */\n }\n\n return [...entriesByAlias.values()].sort((left, right) =>\n left.alias.localeCompare(right.alias),\n );\n}\n\n/** Implements list bundled package aliases for the public runtime surface of this module. */\nexport async function listBundledPackageAliases(): Promise<string[]> {\n return (await collectBundledPackageEntries()).map((entry) => entry.alias);\n}\n\n/**\n * Implements resolve bundled package root for the public runtime surface of this module.\n * Accepts every spelling agents naturally reach for: the catalog alias\n * (\"kanban\"), the package directory (\"pm-kanban\"), and the published npm name\n * (\"@unbrained/pm-kanban\").\n */\nexport async function resolveBundledPackageRoot(\n alias: string,\n): Promise<string | null> {\n const normalized = alias.trim().toLowerCase();\n const entry = (await collectBundledPackageEntries()).find(\n (candidate) =>\n candidate.alias === normalized ||\n candidate.package_directory.toLowerCase() === normalized ||\n candidate.package_name?.toLowerCase() === normalized,\n );\n return entry?.package_root ?? null;\n}\n\n/** Resolve the published npm package name for a bundled alias so install flows can persist it as managed-source provenance (`source.package`). Returns null when the alias is unknown or the bundled package manifest lacks a name. */\nexport async function resolveBundledPackageNpmName(\n alias: string,\n): Promise<string | null> {\n const packageRoot = await resolveBundledPackageRoot(alias);\n if (!packageRoot) {\n return null;\n }\n const manifest = await readPmPackageManifest(packageRoot);\n return manifest.package_name ?? null;\n}\n\n/** Implements resolve bundled alias manifest name for the public runtime surface of this module. */\nexport async function resolveBundledAliasManifestName(\n input: string,\n): Promise<string | null> {\n const bundledAliasSource = await resolveBundledExtensionAliasSource(input);\n if (!bundledAliasSource) {\n return null;\n }\n try {\n const extensionDirectories =\n await collectPackageExtensionDirectories(bundledAliasSource);\n if (extensionDirectories.length !== 1) {\n return null;\n }\n const validated = await validateExtensionDirectory(extensionDirectories[0]);\n return validated.manifest.name;\n } catch {\n return null;\n }\n}\n\n/** Resolve the catalog link block for a bundled package, preferring the explicit `catalog.links.*` manifest fields and falling back to the package's repository/bugs/homepage/npm metadata. The npm link is synthesized from the package name unless the package is private or unnamed. */\nfunction buildBundledCatalogLinks(\n manifest: Awaited<ReturnType<typeof readPmPackageManifest>>,\n): {\n docs: string | undefined;\n npm: string | undefined;\n repository: string | undefined;\n report: string | undefined;\n} {\n return {\n docs: manifest.catalog?.links?.docs ?? manifest.package_homepage,\n npm:\n manifest.catalog?.links?.npm ??\n (manifest.package_name && manifest.package_private !== true\n ? `https://www.npmjs.com/package/${encodeURIComponent(manifest.package_name)}`\n : undefined),\n repository:\n manifest.catalog?.links?.repository ?? manifest.package_repository_url,\n report: manifest.catalog?.links?.report ?? manifest.package_bugs_url,\n };\n}\n\n/** Build one bundled-package catalog entry from its manifest, marking it `installed` when the managed state for `scope` already records the package by built-in alias or resolved location, and projecting the metadata-only resource kinds (everything except installable `extensions`) that the package ships. */\nfunction buildBundledCatalogPackageEntry(\n manifest: Awaited<ReturnType<typeof readPmPackageManifest>>,\n bundledEntry: BundledPackageEntry,\n scope: ExtensionScope,\n installedBuiltinAliases: Set<string>,\n installedLocations: Set<string>,\n): Record<string, unknown> {\n const installScopeFlag = scope === \"global\" ? \"--global\" : \"--project\";\n const metadataOnlyResources = Object.fromEntries(\n PM_PACKAGE_RESOURCE_KINDS.filter(\n (resourceKind) => resourceKind !== \"extensions\",\n )\n .map((resourceKind) => [\n resourceKind,\n manifest.resources[resourceKind] ?? [],\n ])\n .filter(([, entries]) => Array.isArray(entries) && entries.length > 0),\n );\n return {\n alias: bundledEntry.alias,\n bundled: true,\n available: true,\n installed:\n installedBuiltinAliases.has(bundledEntry.alias) ||\n installedLocations.has(path.resolve(bundledEntry.package_root)),\n install_target: bundledEntry.alias,\n install_command: `pm install ${bundledEntry.alias} ${installScopeFlag}`,\n package_name: manifest.package_name,\n package_version: manifest.package_version,\n description: manifest.catalog?.summary ?? manifest.package_description,\n keywords: manifest.package_keywords ?? [],\n resources: manifest.resources,\n installable_resources: {\n extensions: manifest.resources.extensions ?? [],\n },\n metadata_only_resources: metadataOnlyResources,\n catalog: {\n display_name: manifest.catalog?.display_name,\n category: manifest.catalog?.category,\n tags: manifest.catalog?.tags ?? manifest.package_keywords ?? [],\n links: buildBundledCatalogLinks(manifest),\n media: manifest.catalog?.media,\n },\n };\n}\n\n/** Implements build bundled package catalog for the public runtime surface of this module. */\nexport async function buildBundledPackageCatalog(\n scope: ExtensionScope,\n global: GlobalOptions,\n options: ExtensionCommandOptions = {},\n): Promise<{\n total: number;\n scope: ExtensionScope;\n installable_resource_kinds: string[];\n metadata_only_resource_kinds: string[];\n packages: Array<Record<string, unknown>>;\n}> {\n const roots = resolveExtensionRoots(\n resolvePmRoot(process.cwd(), global.path),\n process.cwd(),\n );\n const selectedRoot = scope === \"global\" ? roots.global : roots.project;\n const managedStateRead = await readManagedExtensionState(selectedRoot);\n const installedLocations = new Set(\n managedStateRead.state.entries\n .filter((entry) => entry.scope === scope)\n .filter((entry) => entry.source.kind !== \"builtin\")\n .map((entry) => path.resolve(entry.source.location)),\n );\n const installedBuiltinAliases = new Set(\n managedStateRead.state.entries\n .filter(\n (entry) => entry.scope === scope && entry.source.kind === \"builtin\",\n )\n .flatMap((entry) => [\n entry.source.name,\n entry.source.input,\n entry.source.location,\n ])\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value.trim().length > 0,\n )\n .map((value) => value.trim().toLowerCase()),\n );\n const packages: Array<Record<string, unknown>> = [];\n\n for (const bundledEntry of await collectBundledPackageEntries()) {\n const manifest = await readPmPackageManifest(bundledEntry.package_root);\n packages.push(\n buildBundledCatalogPackageEntry(\n manifest,\n bundledEntry,\n scope,\n installedBuiltinAliases,\n installedLocations,\n ),\n );\n }\n\n const fields = parsePackageCatalogFields(options.fields);\n const outputPackages = fields\n ? packages.map((entry) => projectPackageCatalogEntry(entry, fields))\n : packages;\n return {\n total: outputPackages.length,\n scope,\n installable_resource_kinds: [\"extensions\"],\n metadata_only_resource_kinds: PM_PACKAGE_RESOURCE_KINDS.filter(\n (resourceKind) => resourceKind !== \"extensions\",\n ),\n packages: outputPackages,\n };\n}\n\nconst PACKAGE_CATALOG_FIELD_KEYS = new Set([\n \"alias\",\n \"bundled\",\n \"available\",\n \"installed\",\n \"install_target\",\n \"install_command\",\n \"package_name\",\n \"package_version\",\n \"description\",\n \"keywords\",\n \"resources\",\n \"installable_resources\",\n \"metadata_only_resources\",\n \"catalog\",\n \"category\",\n \"display_name\",\n]);\n\nfunction parsePackageCatalogFields(\n raw: string | undefined,\n): string[] | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const fields = splitCommaList(raw);\n if (fields.length === 0) {\n throw new PmCliError(\n \"Package catalog --fields requires a comma-separated list of field names\",\n EXIT_CODE.USAGE,\n );\n }\n const unknown = fields.filter(\n (field) => !PACKAGE_CATALOG_FIELD_KEYS.has(field),\n );\n if (unknown.length > 0) {\n throw new PmCliError(\n `Unknown package catalog --fields value(s): ${unknown.join(\", \")}`,\n EXIT_CODE.USAGE,\n {\n examples: [\n \"pm package list --project --fields alias,installed,install_command\",\n \"pm package catalog --project --fields alias,package_name,category\",\n ],\n },\n );\n }\n return fields;\n}\n\nfunction projectPackageCatalogEntry(\n entry: Record<string, unknown>,\n fields: string[],\n): Record<string, unknown> {\n const projected: Record<string, unknown> = {};\n for (const field of fields) {\n if (field === \"category\") {\n projected[field] =\n (entry.catalog as { category?: unknown } | undefined)?.category ?? null;\n } else if (field === \"display_name\") {\n projected[field] =\n (entry.catalog as { display_name?: unknown } | undefined)\n ?.display_name ?? null;\n } else {\n projected[field] = entry[field] ?? null;\n }\n }\n return projected;\n}\n\n/** Public contract for test only bundled catalog, shared by SDK and presentation-layer consumers. */\nexport const _testOnlyBundledCatalog = {\n parsePackageCatalogFields,\n projectPackageCatalogEntry,\n};\n"],"names":[],"mappings":"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","debugId":"e3441a0b-643a-5177-a64c-351ff82cde0c"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sources":["cli/commands/extension/doctor.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/extension/doctor\n *\n * Implements extension package-management support for Doctor.\n */\nimport {\n activateExtensions,\n loadExtensions,\n reconcileExtensionCapabilityUsage,\n} from \"../../../core/extensions/index.js\";\nimport {\n EXTENSION_CAPABILITY_CONTRACT,\n KNOWN_EXTENSION_CAPABILITIES,\n parseLegacyExtensionCapabilityAliasWarning,\n parseUnknownExtensionCapabilityWarning,\n type UnknownExtensionCapabilityWarningDetails,\n} from \"../../../core/extensions/loader.js\";\nimport { EXIT_CODE } from \"../../../core/shared/constants.js\";\nimport { PmCliError } from \"../../../core/shared/errors.js\";\nimport { normalizeExtensionNameForMatch } from \"./shared.js\";\nimport type {\n ExtensionCollisionPlan,\n ExtensionCommandOptions,\n ExtensionDoctorDetailMode,\n ExtensionScope,\n ExtensionTriageSummary,\n ExtensionUpdateCheckStatus,\n ManagedExtensionSummary,\n} from \"../extension.js\";\n\ninterface RuntimeActivationPaths {\n commandPathsByExtension: Map<string, Set<string>>;\n actionPathsByExtension: Map<string, Set<string>>;\n}\n\nfunction addRuntimePath(\n pathsByExtension: Map<string, Set<string>>,\n extensionName: string,\n pathValue: string,\n): void {\n const normalizedName = normalizeExtensionNameForMatch(extensionName);\n const normalizedPath = pathValue.trim();\n if (normalizedName.length === 0 || normalizedPath.length === 0) {\n return;\n }\n const existing = pathsByExtension.get(normalizedName) ?? new Set<string>();\n existing.add(normalizedPath);\n pathsByExtension.set(normalizedName, existing);\n}\n\nfunction collectRuntimeActivationPaths(\n activationResult: Awaited<ReturnType<typeof activateExtensions>>,\n): RuntimeActivationPaths {\n const commandPathsByExtension = new Map<string, Set<string>>();\n const actionPathsByExtension = new Map<string, Set<string>>();\n for (const registration of activationResult.registrations.commands) {\n addRuntimePath(\n commandPathsByExtension,\n registration.name,\n registration.command,\n );\n addRuntimePath(\n actionPathsByExtension,\n registration.name,\n registration.action,\n );\n }\n for (const handler of activationResult.commands.handlers) {\n addRuntimePath(commandPathsByExtension, handler.name, handler.command);\n }\n for (const override of activationResult.commands.overrides) {\n addRuntimePath(commandPathsByExtension, override.name, override.command);\n }\n return { commandPathsByExtension, actionPathsByExtension };\n}\n\nfunction sortedRuntimePaths(\n values: Set<string> | undefined,\n): string[] | undefined {\n if (!values || values.size === 0) {\n return undefined;\n }\n return [...values].sort((left, right) => left.localeCompare(right));\n}\n\nfunction resolveDoctorActivationStatus(params: {\n enabled: boolean;\n normalizedName: string;\n loadedNames: Set<string>;\n loadFailedNames: Set<string>;\n activationFailedNames: Set<string>;\n}): Pick<ManagedExtensionSummary, \"runtime_active\" | \"activation_status\"> {\n const {\n enabled,\n normalizedName,\n loadedNames,\n loadFailedNames,\n activationFailedNames,\n } = params;\n if (!enabled) {\n return { runtime_active: false, activation_status: \"not_loaded\" };\n }\n if (\n loadFailedNames.has(normalizedName) ||\n activationFailedNames.has(normalizedName)\n ) {\n return { runtime_active: false, activation_status: \"failed\" };\n }\n if (loadedNames.has(normalizedName)) {\n return { runtime_active: true, activation_status: \"ok\" };\n }\n return { runtime_active: false, activation_status: \"not_loaded\" };\n}\n\n/** Implements apply doctor runtime activation state for the public runtime surface of this module. */\nexport function applyDoctorRuntimeActivationState(\n extensions: ManagedExtensionSummary[],\n loadResult: Awaited<ReturnType<typeof loadExtensions>>,\n activationResult: Awaited<ReturnType<typeof activateExtensions>>,\n): ManagedExtensionSummary[] {\n const loadedNames = new Set(\n loadResult.loaded.map((entry) =>\n normalizeExtensionNameForMatch(entry.name),\n ),\n );\n const loadFailedNames = new Set(\n loadResult.failed.map((entry) =>\n normalizeExtensionNameForMatch(entry.name),\n ),\n );\n const activationFailedNames = new Set(\n activationResult.failed.map((entry) =>\n normalizeExtensionNameForMatch(entry.name),\n ),\n );\n const { commandPathsByExtension, actionPathsByExtension } =\n collectRuntimeActivationPaths(activationResult);\n\n return extensions.map((entry) => {\n const normalizedName = normalizeExtensionNameForMatch(entry.name);\n const commandPaths = sortedRuntimePaths(\n commandPathsByExtension.get(normalizedName),\n );\n const actionPaths = sortedRuntimePaths(\n actionPathsByExtension.get(normalizedName),\n );\n const runtimeMetadata = {\n ...(commandPaths ? { command_paths: commandPaths } : {}),\n ...(actionPaths ? { action_paths: actionPaths } : {}),\n };\n const activationStatus = resolveDoctorActivationStatus({\n enabled: entry.enabled,\n normalizedName,\n loadedNames,\n loadFailedNames,\n activationFailedNames,\n });\n return {\n ...entry,\n ...activationStatus,\n ...runtimeMetadata,\n };\n });\n}\n\nfunction summarizePolicyWarnings(warnings: string[]): {\n warning_count: number;\n violation_count: number;\n blocked_count: number;\n} {\n let warningCount = 0;\n let violationCount = 0;\n let blockedCount = 0;\n for (const warning of warnings) {\n if (!warning.startsWith(\"extension_policy_\")) {\n continue;\n }\n warningCount += 1;\n if (warning.startsWith(\"extension_policy_violation_\")) {\n violationCount += 1;\n continue;\n }\n if (warning.startsWith(\"extension_policy_blocked_\")) {\n blockedCount += 1;\n }\n }\n return {\n warning_count: warningCount,\n violation_count: violationCount,\n blocked_count: blockedCount,\n };\n}\n\nfunction lifecycleFlagCommand(\n options: ExtensionCommandOptions,\n action: string,\n): string {\n return options.vocabulary === \"package\"\n ? `pm package --${action}`\n : `pm extension --${action}`;\n}\n\nconst REGISTRATION_COLLISION_WARNING_CODES = new Set([\n \"extension_command_handler_collision\",\n \"extension_command_override_collision\",\n \"extension_command_override_handler_overlap\",\n \"extension_parser_override_collision\",\n \"extension_preflight_override_collision\",\n \"extension_renderer_collision\",\n \"extension_service_override_collision\",\n]);\n\n/** Implements check whether registration collision warning for the public runtime surface of this module. */\nfunction isRegistrationCollisionWarning(warning: string): boolean {\n return REGISTRATION_COLLISION_WARNING_CODES.has(warningCode(warning));\n}\n\nfunction isExtensionLayer(\n value: string | undefined,\n): value is \"project\" | \"global\" {\n return value === \"project\" || value === \"global\";\n}\n\ninterface RegistrationCollisionWarningParts {\n code: string;\n surface: string;\n winner: { layer: \"project\" | \"global\"; name: string };\n displaced: { layer: \"project\" | \"global\"; name: string };\n}\n\nfunction parseRegistrationCollisionWarning(\n warning: string,\n): RegistrationCollisionWarningParts | null {\n const parts = warning.split(\":\");\n const code = parts[0];\n if (!code || !REGISTRATION_COLLISION_WARNING_CODES.has(code)) {\n return null;\n }\n // Collision warnings end with winnerLayer:winnerName:displacedLayer:displacedName.\n // Surface identifiers before that suffix may contain colons, so parse from the right.\n const winnerLayer = parts.at(-4);\n const winnerName = parts.at(-3)?.trim();\n const displacedLayer = parts.at(-2);\n const displacedName = parts.at(-1)?.trim();\n if (\n !isExtensionLayer(winnerLayer) ||\n !isExtensionLayer(displacedLayer) ||\n !winnerName ||\n !displacedName\n ) {\n return null;\n }\n return {\n code,\n surface: parts.slice(1, -4).join(\":\") || \"global\",\n winner: { layer: winnerLayer, name: winnerName },\n displaced: { layer: displacedLayer, name: displacedName },\n };\n}\n\nfunction collectRegistrationCollisionExtensionNames(\n warnings: string[],\n): string[] {\n const names = new Set<string>();\n for (const warning of warnings) {\n const parsed = parseRegistrationCollisionWarning(warning);\n if (!parsed) {\n continue;\n }\n names.add(parsed.winner.name);\n names.add(parsed.displaced.name);\n }\n return [...names].sort((left, right) => left.localeCompare(right));\n}\n\n/** Implements build registration collision remediation for the public runtime surface of this module. */\nexport function buildRegistrationCollisionRemediation(\n warnings: string[],\n commands: { deactivate: string; doctor: string },\n): string | null {\n const registrationCollisionWarnings = warnings.filter(\n isRegistrationCollisionWarning,\n );\n if (registrationCollisionWarnings.length === 0) {\n return null;\n }\n const collisionNames = collectRegistrationCollisionExtensionNames(\n registrationCollisionWarnings,\n );\n const collisionNameText =\n collisionNames.length > 0\n ? ` Conflicting extensions: ${collisionNames.join(\", \")}.`\n : \"\";\n return (\n `Extension registration collisions or handler/override overlaps detected.${collisionNameText} Single-winner surfaces can hide earlier package behavior. ` +\n `Deactivate one conflicting package with ${commands.deactivate}, ` +\n `or scope registration surfaces in extensions.policy.extension_overrides, then rerun ${commands.doctor}.`\n );\n}\n\nfunction buildRegistrationCollisionPlan(\n scope: ExtensionScope,\n warnings: string[],\n extensions: ManagedExtensionSummary[],\n options: ExtensionCommandOptions,\n): ExtensionCollisionPlan | undefined {\n const collisions = warnings\n .map((warning) => parseRegistrationCollisionWarning(warning))\n .filter(\n (entry): entry is RegistrationCollisionWarningParts => entry !== null,\n )\n .sort((left, right) =>\n `${left.code}:${left.surface}:${left.winner.name}:${left.displaced.name}`.localeCompare(\n `${right.code}:${right.surface}:${right.winner.name}:${right.displaced.name}`,\n ),\n );\n if (collisions.length === 0) {\n return undefined;\n }\n const scopeFlag = scope === \"global\" ? \"--global\" : \"--project\";\n const deactivatePrefix = lifecycleFlagCommand(options, \"deactivate\");\n const doctorCommand = `${lifecycleFlagCommand(options, \"doctor\")} ${scopeFlag} --detail deep --trace`;\n const extensionByName = new Map(\n extensions.map((entry) => [\n normalizeExtensionNameForMatch(entry.name),\n entry,\n ]),\n );\n const affectedByName = new Map<string, number>();\n for (const collision of collisions) {\n for (const name of [collision.winner.name, collision.displaced.name]) {\n const normalizedName = normalizeExtensionNameForMatch(name);\n affectedByName.set(\n normalizedName,\n (affectedByName.get(normalizedName) ?? 0) + 1,\n );\n }\n }\n const remediationCandidates = [...affectedByName.entries()]\n .map(([normalizedName, affectedCollisions]) => {\n const extension = extensionByName.get(normalizedName);\n const extensionName = extension?.name ?? normalizedName;\n const commandPaths = extension?.command_paths ?? [];\n const actionPaths = extension?.action_paths ?? [];\n return {\n action: \"deactivate\" as const,\n extension: extensionName,\n command: `${deactivatePrefix} ${extensionName} ${scopeFlag}`,\n affected_collisions: affectedCollisions,\n feature_loss: {\n command_paths: [...commandPaths].sort((left, right) =>\n left.localeCompare(right),\n ),\n action_paths: [...actionPaths].sort((left, right) =>\n left.localeCompare(right),\n ),\n },\n };\n })\n .sort((left, right) => {\n const affectedDelta =\n right.affected_collisions - left.affected_collisions;\n if (affectedDelta !== 0) {\n return affectedDelta;\n }\n const leftSurfaceCount =\n left.feature_loss.command_paths.length +\n left.feature_loss.action_paths.length;\n const rightSurfaceCount =\n right.feature_loss.command_paths.length +\n right.feature_loss.action_paths.length;\n if (leftSurfaceCount !== rightSurfaceCount) {\n return leftSurfaceCount - rightSurfaceCount;\n }\n return left.extension.localeCompare(right.extension);\n });\n\n return {\n status: \"conflicts_detected\",\n collision_count: collisions.length,\n extension_count: affectedByName.size,\n next_best_command: doctorCommand,\n collisions,\n remediation_candidates: remediationCandidates,\n };\n}\n\n/** Implements classify doctor load failure warnings for the public runtime surface of this module. */\nexport function classifyDoctorLoadFailureWarnings(\n loadFailures: Array<{ name: string; error: string }>,\n): string[] {\n const warnings: string[] = [];\n for (const failure of loadFailures) {\n const normalizedError = failure.error.toLowerCase();\n if (\n normalizedError.includes(\"cannot find package '@unbrained/pm-cli'\") ||\n normalizedError.includes('cannot find module \"@unbrained/pm-cli\"') ||\n normalizedError.includes(\"cannot find module '@unbrained/pm-cli'\")\n ) {\n warnings.push(\n `extension_load_failed_sdk_dependency_missing:${failure.name}`,\n );\n }\n if (\n normalizedError.includes(\n \"cannot use import statement outside a module\",\n ) ||\n normalizedError.includes(\"to load an es module\") ||\n normalizedError.includes(\"must use import to load es module\")\n ) {\n warnings.push(\n `extension_load_failed_module_mode_mismatch:${failure.name}`,\n );\n }\n }\n return [...new Set(warnings)].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\n/** Implements classify doctor activation failure warnings for the public runtime surface of this module. */\nexport function classifyDoctorActivationFailureWarnings(\n activationFailures: Array<{\n name: string;\n trace?: { missing_capability?: string; capability?: string };\n }> = [],\n): string[] {\n const failures = Array.isArray(activationFailures) ? activationFailures : [];\n const warnings: string[] = [];\n for (const failure of failures) {\n if (!failure || typeof failure.name !== \"string\") {\n continue;\n }\n const missingCapability =\n failure.trace?.missing_capability ?? failure.trace?.capability;\n if (\n typeof missingCapability === \"string\" &&\n missingCapability.trim().length > 0\n ) {\n warnings.push(\n `extension_capability_missing:${failure.name}:${missingCapability.trim().toLowerCase()}`,\n );\n }\n }\n return [...new Set(warnings)].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\n/**\n * Classify advisory least-privilege warnings for capabilities each loaded\n * extension declares in its manifest but never registers against.\n *\n * Emits one `extension_capability_unused:<layer>:<name>:<capability>` token per\n * over-broad grant. These are advisory hygiene hints — they never block — that\n * tell an author to trim the manifest (or add the missing registration). The\n * inverse failure (registering a surface whose capability is undeclared) is the\n * blocking `extension_capability_missing` warning emitted during activation.\n */\nexport function classifyUnusedCapabilityWarnings(\n loadResult: Awaited<ReturnType<typeof loadExtensions>>,\n activationResult: Awaited<ReturnType<typeof activateExtensions>>,\n): string[] {\n const warnings: string[] = [];\n for (const entry of reconcileExtensionCapabilityUsage(\n loadResult.loaded,\n activationResult,\n )) {\n for (const capability of entry.unused) {\n warnings.push(\n `extension_capability_unused:${entry.layer}:${entry.name}:${capability}`,\n );\n }\n }\n return [...new Set(warnings)].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\n/** Inputs every triage remediation message can reference: the lifecycle command options and resolved `scopeFlag`/`scope`, plus the two numeric totals (`updateCheckFailedTotal`, `policyWarningCount`) whose own warning-driven rules fire purely on a count rather than a warning prefix. */\ninterface TriageRemediationContext {\n options: ExtensionCommandOptions;\n scope: ExtensionScope;\n scopeFlag: string;\n updateCheckFailedTotal: number;\n policyWarningCount: number;\n}\n\n/**\n * One warning-driven remediation rule: `matches` decides whether the emitted\n * warning set (or a {@link TriageRemediationContext} count) warrants the hint,\n * and `build` renders the scope-aware message. Replacing the former\n * if-prefix ladder with this table keeps {@link buildExtensionTriageSummary}\n * under the complexity ceiling while preserving message order and content.\n */\ninterface TriageRemediationRule {\n matches: (\n warnings: readonly string[],\n ctx: TriageRemediationContext,\n ) => boolean;\n build: (ctx: TriageRemediationContext) => string;\n}\n\n/** Ordered remediation rules evaluated while at least one warning is present. The order is load-bearing — it is the order remediation hints appear in doctor output — so new rules must be inserted at the intended position rather than appended. */\nconst TRIAGE_REMEDIATION_RULES: readonly TriageRemediationRule[] = [\n {\n matches: (warnings) =>\n warnings.some((warning) => warning.startsWith(\"extension_manifest_\")),\n build: (ctx) =>\n `Run ${lifecycleFlagCommand(ctx.options, \"explore\")} ${ctx.scopeFlag} to inspect discovered manifests and directories.`,\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\"extension_capability_unknown:\"),\n ),\n build: () =>\n `Unknown extension capabilities detected. Allowed capabilities: ${KNOWN_EXTENSION_CAPABILITIES.join(\", \")}. ` +\n \"Review extension_capability_unknown warning details for suggested replacements.\",\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\"extension_capability_legacy_alias:\"),\n ),\n build: () =>\n \"Legacy extension capability aliases were auto-remapped to canonical capabilities. \" +\n \"Update manifests to canonical names (migration/validation -> schema).\",\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\"extension_capability_missing:\"),\n ),\n build: (ctx) =>\n `Extension activation failed because code registered a surface missing from manifest capabilities. ` +\n `Run ${lifecycleFlagCommand(ctx.options, \"doctor\")} ${ctx.scopeFlag} --detail deep --trace and add the reported missing_capability to manifest.json before publishing.`,\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\"extension_capability_unused:\"),\n ),\n build: (ctx) =>\n \"Extension manifests declare capabilities that are never registered against. \" +\n `Remove each reported unused capability from manifest.json to keep least privilege, or add the matching registration. Run ${lifecycleFlagCommand(ctx.options, \"doctor\")} ${ctx.scopeFlag} --detail deep --trace for per-extension registration counts.`,\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\n \"extension_command_definition_legacy_handler_alias:\",\n ),\n ),\n build: () =>\n \"Extension command definitions using legacy handler were auto-remapped. \" +\n \"Update command definitions to use run: (context) => ... for forward compatibility.\",\n },\n {\n matches: (warnings) =>\n warnings.some(\n (warning) =>\n warning.startsWith(\"extension_output_service_override_global:\") ||\n warning.startsWith(\"extension_output_renderer_override_global:\"),\n ),\n build: () =>\n \"Global output service/renderer overrides are active. For output_format, return context.payload/null/undefined unless the extension owns the command. For renderers, return null for unrelated payloads so pm falls back to native rendering.\",\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\"extension_schema_narrow_activation:\"),\n ),\n build: () =>\n \"A package registers custom item types/fields (a GLOBAL schema contribution) but also declares narrow activation.commands, so it never activates for built-in commands like pm create <type> and the custom type silently fails to register. Remove activation.commands from manifest.json so pm activates the package for every command, or — if the schema is intentionally command-scoped — knowingly ignore this advisory.\",\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\"extension_load_failed_sdk_dependency_missing:\"),\n ),\n build: (ctx) =>\n `Detected extension load failures caused by missing SDK dependency resolution. ` +\n `Ensure extension package dependencies include \"@unbrained/pm-cli\" and reinstall dependencies before running ${lifecycleFlagCommand(ctx.options, \"doctor\")} ${ctx.scopeFlag}.`,\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\"extension_load_failed_module_mode_mismatch:\"),\n ),\n build: (ctx) =>\n `Detected extension module-mode mismatches. For ESM-based extension entries/imports, set package.json \"type\": \"module\" ` +\n `or use an explicit .mjs entry and rerun ${lifecycleFlagCommand(ctx.options, \"doctor\")} ${ctx.scopeFlag}.`,\n },\n {\n matches: (warnings) =>\n warnings.some(\n (warning) =>\n warning.startsWith(\"extension_pm_min_version_\") ||\n warning.startsWith(\"extension_pm_max_version_\"),\n ),\n build: (ctx) =>\n \"Extension pm version-bound warnings detected. Align each package manifest's pm_min_version/pm_max_version \" +\n `with the installed pm CLI version (see the warning's required/allowed=...:current=... details), or upgrade/downgrade the pm CLI to satisfy the declared bounds, then rerun ${lifecycleFlagCommand(ctx.options, \"doctor\")} ${ctx.scopeFlag}.`,\n },\n {\n matches: (_warnings, ctx) => ctx.updateCheckFailedTotal > 0,\n build: (ctx) =>\n `Run ${lifecycleFlagCommand(ctx.options, \"manage\")} ${ctx.scopeFlag} after validating network and repository access.`,\n },\n {\n matches: (warnings) =>\n warnings.some((warning) =>\n warning.startsWith(\"extension_manager_state_\"),\n ),\n build: (ctx) =>\n `Review and repair ${ctx.scope} managed extension state file if schema/read warnings persist.`,\n },\n {\n matches: (_warnings, ctx) => ctx.policyWarningCount > 0,\n build: () =>\n \"Extension governance policy warnings detected. Review settings.extensions.policy mode and allow/block lists to confirm intended capabilities and registration surfaces.\",\n },\n];\n\n/**\n * Build the ordered remediation hints for a triage summary. Warning-driven rules\n * (collision remediation first, then {@link TRIAGE_REMEDIATION_RULES}) only run\n * when at least one warning is present; the update-health coverage and\n * availability hints always run; and a \"no immediate action\" fallback is\n * appended when nothing else applied.\n */\nfunction buildExtensionTriageRemediation(params: {\n normalizedWarnings: string[];\n options: ExtensionCommandOptions;\n scope: ExtensionScope;\n scopeFlag: string;\n updateCheckFailedTotal: number;\n policyWarningCount: number;\n updateHealthPartial: boolean;\n skippedUnmanagedTotal: number;\n skippedNonGithubTotal: number;\n updateAvailableTotal: number;\n}): string[] {\n const {\n normalizedWarnings,\n options,\n scope,\n scopeFlag,\n updateCheckFailedTotal,\n policyWarningCount,\n updateHealthPartial,\n skippedUnmanagedTotal,\n skippedNonGithubTotal,\n updateAvailableTotal,\n } = params;\n const remediation: string[] = [];\n const ctx: TriageRemediationContext = {\n options,\n scope,\n scopeFlag,\n updateCheckFailedTotal,\n policyWarningCount,\n };\n if (normalizedWarnings.length > 0) {\n const registrationCollisionRemediation =\n buildRegistrationCollisionRemediation(normalizedWarnings, {\n deactivate: `${lifecycleFlagCommand(options, \"deactivate\")} <name> ${scopeFlag}`,\n doctor: `${lifecycleFlagCommand(options, \"doctor\")} ${scopeFlag} --detail deep --trace`,\n });\n if (registrationCollisionRemediation) {\n remediation.push(registrationCollisionRemediation);\n }\n for (const rule of TRIAGE_REMEDIATION_RULES) {\n if (rule.matches(normalizedWarnings, ctx)) {\n remediation.push(rule.build(ctx));\n }\n }\n }\n if (updateHealthPartial) {\n remediation.push(\n `Update-check coverage is partial because unmanaged extensions need adoption. Adopt existing installs via ${lifecycleFlagCommand(options, \"manage\")} ${scopeFlag} --fix-managed-state (or ${lifecycleFlagCommand(options, \"adopt-all\")} ${scopeFlag}, ${lifecycleFlagCommand(options, \"adopt\")} <name> ${scopeFlag}, or reinstall via ${lifecycleFlagCommand(options, \"install\")} ${scopeFlag} <source>).`,\n );\n } else if (skippedUnmanagedTotal > 0) {\n remediation.push(\n `Loaded unmanaged extensions are currently treated as informational. Use ${lifecycleFlagCommand(options, \"manage\")} ${scopeFlag} --fix-managed-state to adopt them for update checks.`,\n );\n }\n if (skippedNonGithubTotal > 0) {\n remediation.push(\n `Non-GitHub managed extensions are skipped by update checks. Use doctor output for non-update diagnostics.`,\n );\n }\n if (updateAvailableTotal > 0) {\n remediation.push(\n `Update available managed extensions via ${lifecycleFlagCommand(options, \"install\")} ${scopeFlag} <source>.`,\n );\n }\n if (remediation.length === 0) {\n remediation.push(\n `No immediate action required. Re-run ${lifecycleFlagCommand(options, \"manage\")} ${scopeFlag} after extension changes.`,\n );\n }\n return remediation;\n}\n\n/** Implements build extension triage summary for the public runtime surface of this module. */\nexport function buildExtensionTriageSummary(\n scope: ExtensionScope,\n warnings: string[],\n extensions: ManagedExtensionSummary[],\n options: ExtensionCommandOptions = {},\n): ExtensionTriageSummary {\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) =>\n left.localeCompare(right),\n );\n const managedTotal = extensions.filter((entry) => entry.managed).length;\n const enabledTotal = extensions.filter((entry) => entry.enabled).length;\n const activeTotal = extensions.filter((entry) => entry.active).length;\n const updateAvailableTotal = extensions.filter(\n (entry) => entry.update_available === true,\n ).length;\n const unmanagedExtensions = extensions.filter(\n (entry) => entry.managed === false,\n );\n const unmanagedExpectedExtensions = unmanagedExtensions\n .filter((entry) => isExpectedUnmanagedExtension(entry))\n .map((entry) => entry.name)\n .sort((left, right) => left.localeCompare(right));\n const unmanagedActionRequiredExtensions = unmanagedExtensions\n .filter((entry) => !isExpectedUnmanagedExtension(entry))\n .map((entry) => entry.name)\n .sort((left, right) => left.localeCompare(right));\n const updateCheckStatusTotals: Record<ExtensionUpdateCheckStatus, number> = {\n checked: 0,\n skipped_unmanaged: 0,\n skipped_non_github: 0,\n failed: 0,\n not_checked: 0,\n };\n for (const entry of extensions) {\n updateCheckStatusTotals[entry.update_check_status] += 1;\n }\n const updateCheckFailedTotal = updateCheckStatusTotals.failed;\n const skippedUnmanagedTotal = updateCheckStatusTotals.skipped_unmanaged;\n const skippedNonGithubTotal = updateCheckStatusTotals.skipped_non_github;\n const updateHealthPartial = unmanagedActionRequiredExtensions.length > 0;\n const updateHealthCoverage = updateHealthPartial ? \"partial\" : \"full\";\n const partialCoverageWarnings = updateHealthPartial\n ? [\n `extension_update_health_partial_coverage:skipped_unmanaged:${unmanagedActionRequiredExtensions.length}`,\n ]\n : [];\n const effectiveWarnings = [\n ...new Set([...normalizedWarnings, ...partialCoverageWarnings]),\n ].sort((left, right) => left.localeCompare(right));\n const warningCodes = [\n ...new Set(effectiveWarnings.map((value) => warningCode(value))),\n ].sort((left, right) => left.localeCompare(right));\n const policyWarnings = summarizePolicyWarnings(effectiveWarnings);\n const scopeFlag = scope === \"global\" ? \"--global\" : \"--project\";\n const collisionPlan = buildRegistrationCollisionPlan(\n scope,\n normalizedWarnings,\n extensions,\n options,\n );\n const remediation = buildExtensionTriageRemediation({\n normalizedWarnings,\n options,\n scope,\n scopeFlag,\n updateCheckFailedTotal,\n policyWarningCount: policyWarnings.warning_count,\n updateHealthPartial,\n skippedUnmanagedTotal,\n skippedNonGithubTotal,\n updateAvailableTotal,\n });\n return {\n status: effectiveWarnings.length === 0 ? \"ok\" : \"warn\",\n warning_count: effectiveWarnings.length,\n warning_codes: warningCodes,\n warnings: effectiveWarnings,\n policy_warning_count: policyWarnings.warning_count,\n policy_violation_count: policyWarnings.violation_count,\n policy_blocked_count: policyWarnings.blocked_count,\n total_extensions: extensions.length,\n managed_total: managedTotal,\n enabled_total: enabledTotal,\n active_total: activeTotal,\n update_available_total: updateAvailableTotal,\n update_health_coverage: updateHealthCoverage,\n update_health_partial: updateHealthPartial,\n unmanaged_loaded_extension_count: unmanagedExtensions.length,\n unmanaged_loaded_extensions: unmanagedExtensions\n .map((entry) => entry.name)\n .sort((left, right) => left.localeCompare(right)),\n unmanaged_expected_extension_count: unmanagedExpectedExtensions.length,\n unmanaged_expected_extensions: unmanagedExpectedExtensions,\n unmanaged_action_required_extension_count:\n unmanagedActionRequiredExtensions.length,\n unmanaged_action_required_extensions: unmanagedActionRequiredExtensions,\n update_check_status_totals: updateCheckStatusTotals,\n update_check_failed_total: updateCheckFailedTotal,\n top_warnings: effectiveWarnings.slice(0, 8),\n remediation,\n ...(collisionPlan ? { collision_plan: collisionPlan } : {}),\n };\n}\n\n/** Implements parse doctor detail mode for the public runtime surface of this module. */\nexport function parseDoctorDetailMode(\n raw: string | undefined,\n): ExtensionDoctorDetailMode {\n if (!raw || raw.trim().length === 0) {\n return \"summary\";\n }\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"summary\" || normalized === \"deep\") {\n return normalized;\n }\n throw new PmCliError(\n `Invalid --detail value \"${raw}\". Expected summary or deep.`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction warningCode(value: string): string {\n const normalized = value.trim();\n const separator = normalized.indexOf(\":\");\n if (separator === -1) {\n return normalized;\n }\n return normalized.slice(0, separator);\n}\n\n/** Implements collect unknown capability guidance for the public runtime surface of this module. */\nexport function collectUnknownCapabilityGuidance(\n warnings: string[],\n): UnknownExtensionCapabilityWarningDetails[] {\n const seen = new Set<string>();\n const guidance: UnknownExtensionCapabilityWarningDetails[] = [];\n for (const warning of warnings) {\n const parsedDetails = (() => {\n const unknownWarning = parseUnknownExtensionCapabilityWarning(warning);\n if (unknownWarning) {\n return [unknownWarning];\n }\n return parseLegacyExtensionCapabilityAliasWarning(warning);\n })();\n for (const parsed of parsedDetails) {\n const key = `${parsed.layer}:${parsed.name}:${parsed.capability}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n guidance.push(parsed);\n }\n }\n return guidance;\n}\n\n/** Implements build capability contract metadata for the public runtime surface of this module. */\nexport function buildCapabilityContractMetadata(): {\n version: number;\n capabilities: string[];\n legacy_aliases: Record<string, string>;\n} {\n return {\n version: EXTENSION_CAPABILITY_CONTRACT.version,\n capabilities: [...EXTENSION_CAPABILITY_CONTRACT.capabilities],\n legacy_aliases: { ...EXTENSION_CAPABILITY_CONTRACT.legacy_aliases },\n };\n}\n\nfunction isExpectedUnmanagedExtension(entry: ManagedExtensionSummary): boolean {\n const normalizedName = normalizeExtensionNameForMatch(entry.name);\n const normalizedDirectory = normalizeExtensionNameForMatch(entry.directory);\n if (normalizedName.startsWith(\"builtin-\")) {\n return true;\n }\n return normalizedDirectory === \"beads\" || normalizedDirectory === \"todos\";\n}\n\n/** Implements build doctor consistency summary for the public runtime surface of this module. */\nexport function buildDoctorConsistencySummary(\n scope: ExtensionScope,\n installedExtensions: ManagedExtensionSummary[],\n loadedExtensions: Array<{ layer: string; name: string }>,\n failedLoads: Array<{ name: string }>,\n disabledByFlag: boolean,\n): {\n warnings: string[];\n summary: {\n active_project_count: number;\n loaded_project_count: number;\n active_project_names: string[];\n loaded_project_names: string[];\n missing_active_project_names: string[];\n };\n} {\n if (scope !== \"project\" || disabledByFlag) {\n return {\n warnings: [],\n summary: {\n active_project_count: 0,\n loaded_project_count: 0,\n active_project_names: [],\n loaded_project_names: [],\n missing_active_project_names: [],\n },\n };\n }\n\n const activeProjectNames = [\n ...new Set(\n installedExtensions\n .filter((entry) => entry.active)\n .map((entry) => normalizeExtensionNameForMatch(entry.name)),\n ),\n ].sort((left, right) => left.localeCompare(right));\n const loadedProjectNames = [\n ...new Set(\n loadedExtensions\n .filter((entry) => entry.layer === \"project\")\n .map((entry) => normalizeExtensionNameForMatch(entry.name)),\n ),\n ].sort((left, right) => left.localeCompare(right));\n const failedLoadNames = new Set(\n failedLoads.map((entry) => normalizeExtensionNameForMatch(entry.name)),\n );\n const missingActiveProjectNames = activeProjectNames\n .filter(\n (name) =>\n !loadedProjectNames.includes(name) && !failedLoadNames.has(name),\n )\n .sort((left, right) => left.localeCompare(right));\n\n const warnings =\n missingActiveProjectNames.length > 0\n ? [\n `extension_doctor_consistency_active_not_loaded:${missingActiveProjectNames.join(\",\")}`,\n ]\n : [];\n\n return {\n warnings,\n summary: {\n active_project_count: activeProjectNames.length,\n loaded_project_count: loadedProjectNames.length,\n active_project_names: activeProjectNames,\n loaded_project_names: loadedProjectNames,\n missing_active_project_names: missingActiveProjectNames,\n },\n };\n}\n"],"names":[],"mappings":"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","debugId":"0b238802-1fb9-5d09-aa23-2c3d3e8b0ced"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-sources.js","sources":["cli/commands/extension/install-sources.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/extension/install-sources\n *\n * Implements extension package-management support for Install Sources.\n */\nimport { execFile } from \"node:child_process\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { promisify } from \"node:util\";\nimport { collectPackageExtensionDirectories } from \"../../../core/packages/manifest.js\";\nimport { resolvePmPackageRootFromModule } from \"../../../core/packages/root.js\";\nimport { pathExists } from \"../../../core/fs/fs-utils.js\";\nimport { isPathWithinDirectory } from \"../../../core/fs/path-utils.js\";\nimport { EXIT_CODE } from \"../../../core/shared/constants.js\";\nimport {\n PmCliError,\n type PmCliErrorContext,\n} from \"../../../core/shared/errors.js\";\nimport { listBundledPackageAliases } from \"./bundled-catalog.js\";\n\nconst execFileAsync = promisify(execFile);\nconst PM_CLI_PACKAGE_NAME = \"@unbrained/pm-cli\";\nlet bundledPackageAliasesCache: { key: string; aliases: string[] } | undefined;\n\ninterface LocalInstallSource {\n kind: \"local\";\n input: string;\n absolute_path: string;\n}\n\ninterface GithubInstallSource {\n kind: \"github\";\n input: string;\n owner: string;\n repo: string;\n repository: string;\n ref?: string;\n subpath?: string;\n}\n\ninterface NpmInstallSource {\n kind: \"npm\";\n input: string;\n spec: string;\n}\n\ntype InstallSource =\n | LocalInstallSource\n | GithubInstallSource\n | NpmInstallSource;\n\ninterface ResolvedInstallSource {\n source: InstallSource;\n directory: string;\n resolved_subpath?: string;\n commit?: string;\n npm_package?: string;\n npm_version?: string;\n cleanup?: () => Promise<void>;\n}\n\nfunction parseGithubPathSpec(\n pathSpec: string,\n input: string,\n refOverride?: string,\n): GithubInstallSource | null {\n const segments = pathSpec\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0);\n if (segments.length < 2) {\n return null;\n }\n const owner = segments[0];\n const repo = segments[1].replace(/\\.git$/i, \"\");\n if (owner.length === 0 || repo.length === 0) {\n return null;\n }\n const tail = segments.slice(2);\n let ref: string | undefined;\n let subpath: string | undefined;\n if (tail[0] === \"tree\" && tail.length >= 2) {\n ref = tail[1];\n subpath = tail.slice(2).join(\"/\");\n } else if (tail.length > 0) {\n subpath = tail.join(\"/\");\n }\n if (typeof refOverride === \"string\" && refOverride.trim().length > 0) {\n ref = refOverride.trim();\n }\n return {\n kind: \"github\",\n input,\n owner,\n repo,\n repository: `https://github.com/${owner}/${repo}.git`,\n ref,\n subpath: subpath && subpath.length > 0 ? subpath : undefined,\n };\n}\n\nfunction parseNpmInstallSource(\n normalizedInput: string,\n forceGithub: boolean,\n refOverride: string | undefined,\n): InstallSource {\n const spec = normalizedInput.slice(\"npm:\".length).trim();\n if (spec.length === 0) {\n throw new PmCliError(\n 'npm package source must include a package spec after \"npm:\".',\n EXIT_CODE.USAGE,\n );\n }\n if (forceGithub) {\n throw new PmCliError(\n 'Options \"--gh/--github\" cannot be combined with npm: package sources.',\n EXIT_CODE.USAGE,\n );\n }\n if (refOverride) {\n throw new PmCliError(\n 'Option \"--ref\" cannot be combined with npm: package sources.',\n EXIT_CODE.USAGE,\n );\n }\n return {\n kind: \"npm\",\n input: normalizedInput,\n spec,\n };\n}\n\n/** Implements parse extension install source for the public runtime surface of this module. */\nexport function parseExtensionInstallSource(\n input: string,\n options: { forceGithub?: boolean; ref?: string } = {},\n): InstallSource {\n const normalizedInput = input.trim();\n if (normalizedInput.length === 0) {\n throw new PmCliError(\n \"Extension source is required for --install.\",\n EXIT_CODE.USAGE,\n );\n }\n const refOverride =\n typeof options.ref === \"string\" && options.ref.trim().length > 0\n ? options.ref.trim()\n : undefined;\n\n if (normalizedInput.startsWith(\"npm:\")) {\n return parseNpmInstallSource(\n normalizedInput,\n options.forceGithub === true,\n refOverride,\n );\n }\n\n const maybeGithubByUrl = (() => {\n try {\n const parsed = new URL(normalizedInput);\n if (parsed.hostname !== \"github.com\") {\n return null;\n }\n const pathSpec = parsed.pathname.replace(/^\\/+/, \"\");\n return parseGithubPathSpec(pathSpec, normalizedInput, refOverride);\n } catch {\n return null;\n }\n })();\n if (maybeGithubByUrl) {\n return maybeGithubByUrl;\n }\n\n const strippedDomainInput = normalizedInput.startsWith(\"github.com/\")\n ? normalizedInput.slice(\"github.com/\".length)\n : null;\n if (strippedDomainInput) {\n const parsed = parseGithubPathSpec(\n strippedDomainInput,\n normalizedInput,\n refOverride,\n );\n if (!parsed) {\n throw new PmCliError(\n `Invalid GitHub source \"${normalizedInput}\".`,\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n }\n\n if (options.forceGithub) {\n const parsed = parseGithubPathSpec(\n normalizedInput,\n normalizedInput,\n refOverride,\n );\n if (!parsed) {\n throw new PmCliError(\n `Invalid GitHub shorthand \"${normalizedInput}\".`,\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n }\n\n if (/^https?:\\/\\//i.test(normalizedInput)) {\n throw new PmCliError(\n `Unsupported extension source URL \"${normalizedInput}\". Supported remote source host: github.com.`,\n EXIT_CODE.USAGE,\n );\n }\n\n return {\n kind: \"local\",\n input: normalizedInput,\n absolute_path: path.resolve(process.cwd(), normalizedInput),\n };\n}\n\n/** Implements run git command for the public runtime surface of this module. */\nexport async function runGitCommand(\n args: string[],\n execRunner: typeof execFileAsync = execFileAsync,\n): Promise<string> {\n try {\n const result = await execRunner(\"git\", args, { encoding: \"utf8\" });\n return (result.stdout ?? \"\").trim();\n } catch (error: unknown) {\n /* c8 ignore start -- stderr-vs-error-message precedence is validated in integration command-runner paths */\n const stderr =\n typeof error === \"object\" && error !== null && \"stderr\" in error\n ? String((error as { stderr: unknown }).stderr)\n : \"\";\n const message =\n stderr.trim().length > 0\n ? stderr.trim()\n : error instanceof Error\n ? error.message\n : String(error);\n /* c8 ignore stop */\n throw new PmCliError(\n `Git command failed: git ${args.join(\" \")}\\n${message}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n}\n\n/** Implements resolve npm command name for the public runtime surface of this module. */\nexport function resolveNpmCommandName(\n platform: NodeJS.Platform = process.platform,\n): \"npm\" | \"npm.cmd\" {\n return platform === \"win32\" ? \"npm.cmd\" : \"npm\";\n}\n\n/** Implements should run npm command in shell for the public runtime surface of this module. */\nexport function shouldRunNpmCommandInShell(\n platform: NodeJS.Platform = process.platform,\n): boolean {\n return platform === \"win32\";\n}\n\nasync function runNpmCommand(\n args: string[],\n cwd?: string,\n execRunner: typeof execFileAsync = execFileAsync,\n): Promise<string> {\n const npmCommand = resolveNpmCommandName();\n try {\n const result = await execRunner(npmCommand, args, {\n cwd,\n encoding: \"utf8\",\n shell: shouldRunNpmCommandInShell(),\n });\n return (result.stdout ?? \"\").trim();\n } catch (error: unknown) {\n const stderr =\n typeof error === \"object\" && error !== null && \"stderr\" in error\n ? String((error as { stderr: unknown }).stderr)\n : \"\";\n const message =\n stderr.trim().length > 0\n ? stderr.trim()\n : error instanceof Error\n ? error.message\n : String(error);\n throw new PmCliError(\n `npm command failed: ${npmCommand} ${args.join(\" \")}\\n${message}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n}\n\nfunction npmPackageNameFromSpec(spec: string): string {\n const trimmed = spec.trim();\n const withoutAlias = trimmed.includes(\"@file:\")\n ? trimmed.slice(0, trimmed.lastIndexOf(\"@file:\"))\n : trimmed;\n if (withoutAlias.startsWith(\"@\")) {\n const scoped = withoutAlias.match(/^(@[^/@\\s]+\\/[^/@\\s]+)/);\n return scoped?.[1] ?? withoutAlias;\n }\n const unscoped = withoutAlias.match(/^([^/@\\s]+)/);\n return unscoped?.[1] ?? withoutAlias;\n}\n\n/** Implements check whether npm not found error for the public runtime surface of this module. */\nexport function isNpmNotFoundError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n const normalized = message.toLowerCase();\n return (\n normalized.includes(\"npm err! code e404\") ||\n normalized.includes(\"404 not found\") ||\n normalized.includes(\"is not in this registry\")\n );\n}\n\n/** Implements check whether npm pack not found error for the public runtime surface of this module. */\nexport function isNpmPackNotFoundError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n const normalized = message.toLowerCase();\n return isNpmNotFoundError(error) || normalized.includes(\"not found\");\n}\n\nfunction isFirstPartyPmPackageName(packageName: string): boolean {\n const normalized = packageName.trim().toLowerCase();\n return (\n normalized.startsWith(\"@unbrained/pm-\") || normalized.startsWith(\"pm-\")\n );\n}\n\n/** Implements build npm not found recovery for the public runtime surface of this module. */\nexport function buildNpmNotFoundRecovery(spec: string): {\n message: string;\n context: PmCliErrorContext;\n} {\n const packageName = npmPackageNameFromSpec(spec);\n const isFirstPartyPackage = isFirstPartyPmPackageName(packageName);\n const repoName = packageName.replace(/^.*\\//, \"\");\n const githubSource = isFirstPartyPackage\n ? `github.com/unbraind/${repoName}`\n : undefined;\n const nextBestCommand = githubSource\n ? `pm install --project ${githubSource}`\n : undefined;\n return {\n message: isFirstPartyPackage\n ? `npm package \"${spec}\" was not found in the registry. If this is an unpublished first-party pm package, install its GitHub repository instead.`\n : `npm package \"${spec}\" was not found in the registry.`,\n context: {\n code: \"npm_package_not_found\",\n required:\n \"Use an install source that exists, or publish the npm package before installing it with npm:<name>.\",\n why: \"Classifying npm 404s avoids repeated registry retries and gives agents a deterministic fallback path.\",\n examples: nextBestCommand\n ? [nextBestCommand, `pm package catalog --project --json`]\n : [`npm view ${packageName}`, `pm package catalog --project --json`],\n nextSteps: nextBestCommand\n ? [\n `Try ${nextBestCommand} if the repository exists.`,\n \"Use pm package catalog --project --json to inspect bundled package aliases before installing.\",\n ]\n : [\n `Verify ${packageName} exists in the npm registry and that you have access to it.`,\n \"Use pm package catalog --project --json to inspect bundled package aliases before installing.\",\n ],\n recovery: {\n attempted_command: `pm install --project npm:${spec}`,\n normalized_args: [\"install\", \"--project\", `npm:${spec}`],\n ...(githubSource && nextBestCommand\n ? {\n fallback_candidates: [\n {\n source: githubSource,\n command: nextBestCommand,\n reason:\n \"canonical first-party GitHub repository fallback for unpublished pm packages\",\n },\n ],\n next_best_command: nextBestCommand,\n }\n : {}),\n },\n },\n };\n}\n\n/** Implements wrap npm pack resolution error for the public runtime surface of this module. */\nexport function wrapNpmPackResolutionError(\n spec: string,\n error: unknown,\n): PmCliError | null {\n if (!isNpmPackNotFoundError(error)) {\n return null;\n }\n const recovery = buildNpmNotFoundRecovery(spec);\n return new PmCliError(\n recovery.message,\n EXIT_CODE.NOT_FOUND,\n recovery.context,\n );\n}\n\nasync function resolveLocalNpmPackagePath(\n spec: string,\n): Promise<string | null> {\n if (path.isAbsolute(spec) || spec.startsWith(\".\") || spec.startsWith(\"..\")) {\n const absolutePath = path.resolve(process.cwd(), spec);\n return (await pathExists(absolutePath)) ? absolutePath : null;\n }\n\n try {\n const parsed = new URL(spec);\n if (parsed.protocol === \"file:\") {\n const absolutePath = fileURLToPath(parsed);\n return (await pathExists(absolutePath)) ? absolutePath : null;\n }\n } catch {\n // Registry package specs are not URLs.\n }\n\n if (!/^[a-z][a-z0-9+.-]*:/i.test(spec)) {\n const absolutePath = path.resolve(process.cwd(), spec);\n if (await pathExists(absolutePath)) {\n return absolutePath;\n }\n }\n\n return null;\n}\n\nasync function resolveNpmPackSpec(spec: string): Promise<string> {\n const localPath = await resolveLocalNpmPackagePath(spec);\n if (localPath) {\n // Hand npm pack a NATIVE filesystem path, never a percent-encoded file URL:\n // npm opens the spec literally, so spaces (`%20`) or a Windows 8.3 `~` short\n // name (`%7E`) escaped by pathToFileURL make pack fail ENOENT on every\n // platform (GH-363). resolveLocalNpmPackagePath already decoded the path.\n return localPath;\n }\n\n const localFileAlias = normalizeNpmLocalFileAliasSpec(spec);\n if (localFileAlias !== spec) {\n return localFileAlias;\n }\n\n if (/^[a-z][a-z0-9+.-]*:/i.test(spec)) {\n return spec;\n }\n\n return spec;\n}\n\n/** Implements normalize npm local file alias spec for the public runtime surface of this module. */\nexport function normalizeNpmLocalFileAliasSpec(\n spec: string,\n cwd: string = process.cwd(),\n): string {\n const marker = \"@file:\";\n const markerIndex = spec.lastIndexOf(marker);\n if (markerIndex <= 0) {\n return spec;\n }\n const packageName = spec.slice(0, markerIndex);\n const target = spec.slice(markerIndex + marker.length);\n if (packageName.trim().length === 0 || target.trim().length === 0) {\n return spec;\n }\n // `file://host/share` (exactly two leading slashes) is a UNC / network spec,\n // not a local path — leave it for npm to resolve.\n if (target.startsWith(\"//\") && !target.startsWith(\"///\")) {\n return spec;\n }\n // A bare relative target resolves against cwd.\n if (!target.startsWith(\"/\")) {\n return `${packageName}@${path.resolve(cwd, target)}`;\n }\n // Resolve an absolute `file:` URL target to a NATIVE, percent-DECODED path\n // (never an encoded file URL): npm opens the alias target literally, so an\n // escaped path — spaces (`%20`) or a Windows 8.3 `~` short name escaped to\n // `%7E` — fails ENOENT on every platform (GH-363). Decode via URL +\n // decodeURIComponent rather than fileURLToPath, which throws\n // ERR_INVALID_FILE_URL_PATH for a driveless absolute path supplied on Windows;\n // strip the leading slash before a Windows drive letter (`/C:/x` -> `C:/x`).\n let decodedPath: string;\n try {\n decodedPath = decodeURIComponent(new URL(`file:${target}`).pathname);\n } catch {\n // Malformed percent-encoding (e.g. `%ZZ`) makes decodeURIComponent throw a\n // URIError; leave the spec untouched so npm surfaces a clear error instead\n // of crashing the CLI on an uncaught exception.\n return spec;\n }\n const nativePath = /^\\/[A-Za-z]:/.test(decodedPath)\n ? decodedPath.slice(1)\n : decodedPath;\n return `${packageName}@${nativePath}`;\n}\n\nfunction parsePackedNpmPackage(\n stdout: string,\n packDirectory: string,\n): { tarball: string; package?: string; version?: string } {\n try {\n const parsed = JSON.parse(stdout) as Array<{\n filename?: unknown;\n name?: unknown;\n version?: unknown;\n }>;\n const first = Array.isArray(parsed) ? parsed[0] : undefined;\n if (\n first &&\n typeof first.filename === \"string\" &&\n first.filename.trim().length > 0\n ) {\n return {\n tarball: path.resolve(packDirectory, first.filename),\n package: typeof first.name === \"string\" ? first.name : undefined,\n version: typeof first.version === \"string\" ? first.version : undefined,\n };\n }\n } catch {\n // Fall back to the last stdout line for older npm output.\n }\n const lastLine = stdout\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .at(-1);\n if (!lastLine) {\n throw new PmCliError(\n \"npm pack did not report a tarball filename.\",\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n return {\n tarball: path.resolve(packDirectory, lastLine),\n };\n}\n\nasync function resolveNpmSourceDirectory(source: NpmInstallSource): Promise<{\n directory: string;\n package?: string;\n version?: string;\n cleanup: () => Promise<void>;\n}> {\n return resolveNpmSourceDirectoryWithRunner(source, runNpmCommand);\n}\n\nasync function resolveNpmSourceDirectoryWithRunner(\n source: NpmInstallSource,\n npmRunner: typeof runNpmCommand,\n): Promise<{\n directory: string;\n package?: string;\n version?: string;\n cleanup: () => Promise<void>;\n}> {\n const localPackageRoot = await resolveLocalNpmPackagePath(source.spec);\n if (localPackageRoot) {\n const packageJsonPath = path.join(localPackageRoot, \"package.json\");\n const packageJson = (await pathExists(packageJsonPath))\n ? (JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as {\n name?: unknown;\n version?: unknown;\n })\n : {};\n return {\n directory: await resolvePackageExtensionDirectory(\n localPackageRoot,\n source.input,\n ),\n package:\n typeof packageJson.name === \"string\" ? packageJson.name : undefined,\n version:\n typeof packageJson.version === \"string\"\n ? packageJson.version\n : undefined,\n cleanup: async () => {},\n };\n }\n\n const tempRoot = await fs.mkdtemp(\n path.join(os.tmpdir(), \"pm-npm-package-source-\"),\n );\n const packDirectory = path.join(tempRoot, \"pack\");\n const extractDirectory = path.join(tempRoot, \"extract\");\n await fs.mkdir(packDirectory, { recursive: true });\n await fs.mkdir(extractDirectory, { recursive: true });\n\n try {\n const packSpec = await resolveNpmPackSpec(source.spec);\n const packStdout = await npmRunner([\n \"pack\",\n packSpec,\n \"--json\",\n \"--pack-destination\",\n packDirectory,\n ]);\n const packed = parsePackedNpmPackage(packStdout, packDirectory);\n await execFileAsync(\n \"tar\",\n [\"-xzf\", packed.tarball, \"-C\", extractDirectory],\n { encoding: \"utf8\" },\n );\n const packageRoot = path.join(extractDirectory, \"package\");\n await installNpmPackageRuntimeDependencies(packageRoot);\n const directory = await resolvePackageExtensionDirectory(\n packageRoot,\n source.input,\n );\n return {\n directory,\n package: packed.package,\n version: packed.version,\n cleanup: async () => {\n await fs.rm(tempRoot, { recursive: true, force: true });\n },\n };\n } catch (error: unknown) {\n await fs.rm(tempRoot, { recursive: true, force: true });\n const wrappedError = wrapNpmPackResolutionError(source.spec, error);\n if (wrappedError) {\n throw wrappedError;\n }\n throw error;\n }\n}\n\nasync function installNpmPackageRuntimeDependencies(\n packageRoot: string,\n): Promise<void> {\n const packageJsonPath = path.join(packageRoot, \"package.json\");\n if (!(await pathExists(packageJsonPath))) {\n return;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as unknown;\n } catch {\n return;\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return;\n }\n\n const manifest = parsed as {\n dependencies?: unknown;\n optionalDependencies?: unknown;\n peerDependencies?: unknown;\n };\n const dependencySpecs = runtimeDependencyInstallSpecs(manifest);\n const shouldLinkHostedPmCli = hasHostedPmCliDependency(manifest);\n if (dependencySpecs.length === 0 && !shouldLinkHostedPmCli) {\n return;\n }\n\n const runtimeOnlyManifest = { ...(parsed as Record<string, unknown>) };\n delete runtimeOnlyManifest.devDependencies;\n const installManifest = { ...runtimeOnlyManifest };\n removeHostedPmCliDependency(installManifest);\n await fs.writeFile(\n packageJsonPath,\n `${JSON.stringify(installManifest, null, 2)}\\n`,\n \"utf8\",\n );\n try {\n await Promise.all([\n fs.rm(path.join(packageRoot, \"package-lock.json\"), { force: true }),\n fs.rm(path.join(packageRoot, \"npm-shrinkwrap.json\"), { force: true }),\n ]);\n\n if (dependencySpecs.length > 0) {\n await runNpmCommand(\n [\n \"install\",\n \"--ignore-scripts\",\n \"--no-audit\",\n \"--fund=false\",\n \"--package-lock=false\",\n \"--no-save\",\n \"--omit=peer\",\n ...dependencySpecs,\n ],\n packageRoot,\n );\n }\n\n if (shouldLinkHostedPmCli) {\n await linkHostedPmCliDependency(packageRoot);\n }\n } finally {\n await fs.writeFile(\n packageJsonPath,\n `${JSON.stringify(runtimeOnlyManifest, null, 2)}\\n`,\n \"utf8\",\n );\n }\n}\n\nfunction hasHostedPmCliDependency(manifest: {\n dependencies?: unknown;\n optionalDependencies?: unknown;\n peerDependencies?: unknown;\n}): boolean {\n for (const dependencyMap of [\n manifest.dependencies,\n manifest.optionalDependencies,\n manifest.peerDependencies,\n ]) {\n if (\n typeof dependencyMap === \"object\" &&\n dependencyMap !== null &&\n PM_CLI_PACKAGE_NAME in dependencyMap\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction removeHostedPmCliDependency(manifest: Record<string, unknown>): void {\n for (const field of [\n \"dependencies\",\n \"optionalDependencies\",\n \"peerDependencies\",\n ] as const) {\n const dependencyMap = manifest[field];\n if (typeof dependencyMap !== \"object\" || dependencyMap === null) {\n continue;\n }\n const nextMap = { ...(dependencyMap as Record<string, unknown>) };\n delete nextMap[PM_CLI_PACKAGE_NAME];\n if (Object.keys(nextMap).length === 0) {\n delete manifest[field];\n } else {\n manifest[field] = nextMap;\n }\n }\n}\n\nasync function linkHostedPmCliDependency(packageRoot: string): Promise<void> {\n const hostPackageRoot = resolvePmPackageRootFromModule(import.meta.url, [\n \"../../../..\",\n ]);\n const [scope, packageName] = PM_CLI_PACKAGE_NAME.split(\"/\");\n const scopedDirectory = path.join(packageRoot, \"node_modules\", scope);\n const linkPath = path.join(scopedDirectory, packageName);\n await fs.mkdir(scopedDirectory, { recursive: true });\n await fs.rm(linkPath, { recursive: true, force: true });\n await fs.symlink(\n hostPackageRoot,\n linkPath,\n resolveDirectorySymlinkType(process.platform),\n );\n}\n\nfunction resolveDirectorySymlinkType(\n platform: NodeJS.Platform,\n): \"dir\" | \"junction\" {\n return platform === \"win32\" ? \"junction\" : \"dir\";\n}\n\nfunction runtimeDependencyInstallSpecs(manifest: {\n dependencies?: unknown;\n optionalDependencies?: unknown;\n peerDependencies?: unknown;\n}): string[] {\n const specs = new Map<string, string>();\n for (const dependencyMap of [\n manifest.dependencies,\n manifest.optionalDependencies,\n manifest.peerDependencies,\n ]) {\n if (typeof dependencyMap !== \"object\" || dependencyMap === null) {\n continue;\n }\n for (const [name, version] of Object.entries(dependencyMap)) {\n if (\n name === PM_CLI_PACKAGE_NAME ||\n typeof version !== \"string\" ||\n version.trim().length === 0 ||\n specs.has(name)\n ) {\n continue;\n }\n specs.set(name, `${name}@${version.trim()}`);\n }\n }\n return [...specs.values()];\n}\n\nasync function resolvePackageExtensionDirectory(\n packageRoot: string,\n sourceLabel: string,\n): Promise<string> {\n const discovered = await collectPackageExtensionDirectories(packageRoot);\n if (discovered.length === 1) {\n return discovered[0];\n }\n if (discovered.length > 1) {\n const choices = discovered\n .map((entry) =>\n path.relative(packageRoot, entry).replaceAll(path.sep, \"/\"),\n )\n .sort((left, right) => left.localeCompare(right));\n throw new PmCliError(\n `Package source \"${sourceLabel}\" contains multiple extension manifests. Provide an explicit extension path. Candidates: ${choices.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n throw new PmCliError(\n `Unable to locate a pm extension manifest in package source \"${sourceLabel}\". Package installs currently activate only extension resources, so add package.json pm.extensions or an extensions/ directory. Metadata-only resources like pm.docs/pm.examples are catalog metadata and do not activate commands.`,\n EXIT_CODE.USAGE,\n );\n}\n\nasync function resolveGithubSourceDirectory(\n cloneDirectory: string,\n source: GithubInstallSource,\n): Promise<{ directory: string; resolved_subpath?: string }> {\n const candidatePaths: string[] = [];\n /* c8 ignore start -- subpath candidate expansion permutations are covered by source-resolution integration suites */\n if (source.subpath) {\n candidatePaths.push(source.subpath);\n candidatePaths.push(\n path.posix.join(\".agents/pm/extensions\", source.subpath),\n );\n candidatePaths.push(\n path.posix.join(\".custom/pm-extensions\", source.subpath),\n );\n candidatePaths.push(\n path.posix.join(\".custom/pm-extension\", source.subpath),\n );\n }\n /* c8 ignore stop */\n\n for (const candidate of candidatePaths) {\n const absolute = path.resolve(cloneDirectory, candidate);\n if (!isPathWithinDirectory(cloneDirectory, absolute)) {\n // source.subpath is user-controlled; never resolve a manifest outside the\n // cloned repository (path-traversal guard).\n continue;\n }\n if (await pathExists(path.join(absolute, \"manifest.json\"))) {\n return { directory: absolute, resolved_subpath: candidate };\n }\n }\n\n if (await pathExists(path.join(cloneDirectory, \"manifest.json\"))) {\n return { directory: cloneDirectory, resolved_subpath: \".\" };\n }\n\n const discoveredDirectory = await resolvePackageExtensionDirectory(\n cloneDirectory,\n source.input,\n );\n return {\n directory: discoveredDirectory,\n resolved_subpath: path\n .relative(cloneDirectory, discoveredDirectory)\n .replaceAll(path.sep, \"/\"),\n };\n}\n\n/** Bare package-ish names (no path separators, or a single-scope npm name) that miss local resolution are almost always intended as npm or bundled installs, so the not-found error must route agents to those sources instead of dead-ending. */\nfunction looksLikeBarePackageName(input: string): boolean {\n const trimmed = input.trim();\n if (\n trimmed.length === 0 ||\n trimmed.startsWith(\".\") ||\n trimmed.startsWith(\"~\")\n ) {\n return false;\n }\n if (trimmed.startsWith(\"@\")) {\n return trimmed.split(\"/\").length === 2;\n }\n return !trimmed.includes(\"/\") && !trimmed.includes(\"\\\\\");\n}\n\nasync function buildLocalSourceNotFoundError(\n source: LocalInstallSource,\n): Promise<PmCliError> {\n const baseMessage = `Local extension source does not exist: \"${source.absolute_path}\".`;\n const input = source.input.trim();\n if (!looksLikeBarePackageName(input)) {\n return new PmCliError(baseMessage, EXIT_CODE.NOT_FOUND);\n }\n let bundledAliases: string[] = [];\n try {\n const envPackageRoot = process.env.PM_CLI_PACKAGE_ROOT;\n const cacheKey =\n typeof envPackageRoot === \"string\" && envPackageRoot.trim().length > 0\n ? path.resolve(envPackageRoot.trim())\n : \"\";\n if (bundledPackageAliasesCache?.key !== cacheKey) {\n bundledPackageAliasesCache = {\n key: cacheKey,\n aliases: await listBundledPackageAliases(),\n };\n }\n bundledAliases = bundledPackageAliasesCache.aliases;\n } catch {\n // Alias discovery is best-effort; the npm: hint alone still unblocks agents.\n }\n const nextSteps = [\n `Retry with pm install npm:${input} if the package is published to npm.`,\n `Or inspect bundled packages with pm package catalog --project --json before installing by alias. Known aliases (blank means none found): ${bundledAliases.join(\", \")}`,\n ];\n return new PmCliError(\n `${baseMessage} \"${input}\" did not match a local directory, bundled package alias, or bundled package name; if you meant an npm package, install it as \"npm:${input}\".`,\n EXIT_CODE.NOT_FOUND,\n {\n code: \"local_source_not_found_bare_name\",\n required: `Use \"npm:${input}\" for npm registry packages, a bundled catalog alias, or an existing local directory path.`,\n why: \"Bare names resolve as local paths only after bundled aliases, so unmatched names need an explicit npm: source.\",\n examples: [\n `pm install npm:${input}`,\n \"pm package catalog --project --json\",\n ],\n nextSteps,\n recovery: {\n attempted_command: `pm install ${input}`,\n normalized_args: [\"install\", input],\n next_best_command: `pm install npm:${input}`,\n },\n },\n );\n}\n\n/** Implements resolve install source for the public runtime surface of this module. */\nexport async function resolveInstallSource(\n source: InstallSource,\n): Promise<ResolvedInstallSource> {\n if (source.kind === \"local\") {\n let localStats;\n try {\n localStats = await fs.stat(source.absolute_path);\n } catch {\n throw await buildLocalSourceNotFoundError(source);\n }\n if (!localStats.isDirectory()) {\n throw new PmCliError(\n `Local extension source must be a directory: \"${source.absolute_path}\".`,\n EXIT_CODE.USAGE,\n );\n }\n const directory = await resolvePackageExtensionDirectory(\n source.absolute_path,\n source.input,\n );\n return {\n source,\n directory,\n };\n }\n\n if (source.kind === \"npm\") {\n const resolved = await resolveNpmSourceDirectory(source);\n return {\n source,\n directory: resolved.directory,\n cleanup: resolved.cleanup,\n resolved_subpath: path\n .relative(path.dirname(resolved.directory), resolved.directory)\n .replaceAll(path.sep, \"/\"),\n npm_package: resolved.package,\n npm_version: resolved.version,\n };\n }\n\n const cloneDirectory = await fs.mkdtemp(\n path.join(os.tmpdir(), \"pm-extension-source-\"),\n );\n const cloneArgs = [\"clone\", \"--depth\", \"1\"];\n if (source.ref) {\n cloneArgs.push(\"--branch\", source.ref);\n }\n cloneArgs.push(source.repository, cloneDirectory);\n\n try {\n await runGitCommand(cloneArgs);\n const commit = await runGitCommand([\n \"-C\",\n cloneDirectory,\n \"rev-parse\",\n \"HEAD\",\n ]);\n const resolved = await resolveGithubSourceDirectory(cloneDirectory, source);\n return {\n source,\n directory: resolved.directory,\n resolved_subpath: resolved.resolved_subpath,\n commit,\n cleanup: async () => {\n await fs.rm(cloneDirectory, { recursive: true, force: true });\n },\n };\n } catch (error: unknown) {\n await fs.rm(cloneDirectory, { recursive: true, force: true });\n throw error;\n }\n}\n\n/** Implements are directories equivalent for the public runtime surface of this module. */\nexport async function areDirectoriesEquivalent(\n left: string,\n right: string,\n): Promise<boolean> {\n if (!(await pathExists(left)) || !(await pathExists(right))) {\n return false;\n }\n const [leftRealPath, rightRealPath] = await Promise.all([\n fs.realpath(left),\n fs.realpath(right),\n ]);\n return leftRealPath === rightRealPath;\n}\n\n/** Public contract for test only install sources, shared by SDK and presentation-layer consumers. */\nexport const _testOnlyInstallSources = {\n installNpmPackageRuntimeDependencies,\n npmPackageNameFromSpec,\n parsePackedNpmPackage,\n resolveNpmSourceDirectoryWithRunner,\n resolveNpmSourceDirectory,\n resolveNpmPackSpec,\n resolvePackageExtensionDirectory,\n runtimeDependencyInstallSpecs,\n hasHostedPmCliDependency,\n removeHostedPmCliDependency,\n linkHostedPmCliDependency,\n resolveDirectorySymlinkType,\n runNpmCommand,\n};\n"],"names":[],"mappings":"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","debugId":"6e45b979-29e4-52c4-a8de-9d7dcd31f857"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-state.js","sources":["cli/commands/extension/managed-state.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/extension/managed-state\n *\n * Implements extension package-management support for Managed State.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { EXIT_CODE } from \"../../../core/shared/constants.js\";\nimport { PmCliError } from \"../../../core/shared/errors.js\";\nimport { nowIso } from \"../../../core/shared/time.js\";\nimport {\n normalizeExtensionNameForMatch,\n normalizeStringList,\n} from \"./shared.js\";\nimport type { ExtensionScope } from \"../extension.js\";\n\nconst MANAGED_EXTENSION_STATE_FILENAME = \".managed-extensions.json\";\nconst MANAGED_EXTENSION_STATE_VERSION = 1;\n\n/** Documents the managed extension source payload exchanged by command, SDK, and package integrations. */\nexport interface ManagedExtensionSource {\n /** Value that configures or reports kind for this contract. */\n kind: \"local\" | \"github\" | \"npm\" | \"builtin\";\n /** Value that configures or reports input for this contract. */\n input: string;\n /** Value that configures or reports location for this contract. */\n location: string;\n /** Value that configures or reports name for this contract. */\n name?: string;\n /** Value that configures or reports package for this contract. */\n package?: string;\n /** Value that configures or reports version for this contract. */\n version?: string;\n /** Value that configures or reports repository for this contract. */\n repository?: string;\n /** Value that configures or reports owner for this contract. */\n owner?: string;\n /** Value that configures or reports repo for this contract. */\n repo?: string;\n /** Value that configures or reports ref for this contract. */\n ref?: string;\n /** Value that configures or reports subpath for this contract. */\n subpath?: string;\n /** Value that configures or reports commit for this contract. */\n commit?: string;\n}\n\n/** Documents the managed extension record payload exchanged by command, SDK, and package integrations. */\nexport interface ManagedExtensionRecord {\n /** Value that configures or reports name for this contract. */\n name: string;\n /** Value that configures or reports directory for this contract. */\n directory: string;\n /** Value that configures or reports scope for this contract. */\n scope: ExtensionScope;\n /** Value that configures or reports manifest version for this contract. */\n manifest_version: string;\n /** Value that configures or reports manifest entry for this contract. */\n manifest_entry: string;\n /** Value that configures or reports capabilities for this contract. */\n capabilities: string[];\n /** ISO 8601 timestamp recording when installed occurred. */\n installed_at: string;\n /** ISO 8601 timestamp recording when updated occurred. */\n updated_at: string;\n /** Value that configures or reports source for this contract. */\n source: ManagedExtensionSource;\n /** ISO 8601 timestamp recording when last update check occurred. */\n last_update_check_at?: string;\n /** Value that configures or reports last update remote commit for this contract. */\n last_update_remote_commit?: string;\n /** Value that configures or reports update available for this contract. */\n update_available?: boolean | null;\n /** Value that configures or reports update error for this contract. */\n update_error?: string;\n}\n\n/** Documents the managed extension state payload exchanged by command, SDK, and package integrations. */\nexport interface ManagedExtensionState {\n /** Value that configures or reports version for this contract. */\n version: number;\n /** ISO 8601 timestamp recording when updated occurred. */\n updated_at: string;\n /** Value that configures or reports entries for this contract. */\n entries: ManagedExtensionRecord[];\n}\n\n/** Documents the managed extension state read result payload exchanged by command, SDK, and package integrations. */\nexport interface ManagedExtensionStateReadResult {\n /** Filesystem path used for path resolution. */\n path: string;\n /** Value that configures or reports state for this contract. */\n state: ManagedExtensionState;\n /** Value that configures or reports warnings for this contract. */\n warnings: string[];\n}\n\n/** Implements resolve managed extension state path for the public runtime surface of this module. */\nexport function resolveManagedExtensionStatePath(\n extensionsRoot: string,\n): string {\n return path.join(extensionsRoot, MANAGED_EXTENSION_STATE_FILENAME);\n}\n\n/** Implements create empty managed extension state for the public runtime surface of this module. */\nexport function createEmptyManagedExtensionState(): ManagedExtensionState {\n return {\n version: MANAGED_EXTENSION_STATE_VERSION,\n updated_at: nowIso(),\n entries: [],\n };\n}\n\n/** Implements sort managed entries for the public runtime surface of this module. */\nexport function sortManagedEntries(\n entries: ManagedExtensionRecord[],\n): ManagedExtensionRecord[] {\n return [...entries].sort((left, right) => {\n const byScope = left.scope.localeCompare(right.scope);\n if (byScope !== 0) {\n return byScope;\n }\n const byName = left.name.localeCompare(right.name);\n if (byName !== 0) {\n return byName;\n }\n return left.directory.localeCompare(right.directory);\n });\n}\n\n/** Implements managed extension sources equivalent for the public runtime surface of this module. */\nexport function managedExtensionSourcesEquivalent(\n left: ManagedExtensionSource,\n right: ManagedExtensionSource,\n): boolean {\n if (\n left.kind !== right.kind ||\n left.input !== right.input ||\n left.location !== right.location\n ) {\n return false;\n }\n if (left.kind === \"npm\" && right.kind === \"npm\") {\n return left.package === right.package && left.version === right.version;\n }\n if (left.kind === \"github\" && right.kind === \"github\") {\n return (\n left.repository === right.repository &&\n left.ref === right.ref &&\n left.subpath === right.subpath &&\n left.commit === right.commit\n );\n }\n if (left.kind === \"builtin\" && right.kind === \"builtin\") {\n return left.name === right.name;\n }\n return true;\n}\n\n/** Narrow `value` to a string, or `undefined` for any other type — the normalization applied to every optional managed-state string field so an absent or malformed value is dropped rather than carried through as `unknown`. */\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\n/**\n * Type guard asserting `entry` carries every always-present managed-record field\n * with the right primitive type: a non-empty `name`/`directory`, a known\n * {@link ExtensionScope}, string manifest metadata, a `string[]` capability\n * list, and string `installed_at`/`updated_at` timestamps. The optional columns\n * (`source` plus the update-check fields) are validated separately by the\n * caller, so this guard narrows only the required columns.\n */\nfunction hasRequiredManagedRecordFields(\n entry: Record<string, unknown>,\n): entry is Record<string, unknown> &\n Pick<\n ManagedExtensionRecord,\n | \"name\"\n | \"directory\"\n | \"scope\"\n | \"manifest_version\"\n | \"manifest_entry\"\n | \"capabilities\"\n | \"installed_at\"\n | \"updated_at\"\n > {\n return (\n typeof entry.name === \"string\" &&\n entry.name.trim().length > 0 &&\n typeof entry.directory === \"string\" &&\n entry.directory.trim().length > 0 &&\n (entry.scope === \"project\" || entry.scope === \"global\") &&\n typeof entry.manifest_version === \"string\" &&\n typeof entry.manifest_entry === \"string\" &&\n Array.isArray(entry.capabilities) &&\n entry.capabilities.every(\n (value): value is string => typeof value === \"string\",\n ) &&\n typeof entry.installed_at === \"string\" &&\n typeof entry.updated_at === \"string\"\n );\n}\n\n/** Normalize one persisted managed-extension source object, returning `null` when the discriminant (`kind`) or the required `input`/`location` strings are missing or malformed so the caller can skip the owning record. */\nfunction normalizeManagedSource(raw: unknown): ManagedExtensionSource | null {\n if (typeof raw !== \"object\" || raw === null) {\n return null;\n }\n const source = raw as Record<string, unknown>;\n if (\n (source.kind !== \"local\" &&\n source.kind !== \"github\" &&\n source.kind !== \"npm\" &&\n source.kind !== \"builtin\") ||\n typeof source.input !== \"string\" ||\n typeof source.location !== \"string\"\n ) {\n return null;\n }\n return {\n kind: source.kind,\n input: source.input,\n location: source.location,\n name: optionalString(source.name),\n package: optionalString(source.package),\n version: optionalString(source.version),\n repository: optionalString(source.repository),\n owner: optionalString(source.owner),\n repo: optionalString(source.repo),\n ref: optionalString(source.ref),\n subpath: optionalString(source.subpath),\n commit: optionalString(source.commit),\n };\n}\n\n/**\n * Normalize one persisted managed-extension record, returning `null` when any\n * required field or its `source` is missing or malformed so {@link\n * normalizeManagedState} can drop the entry without discarding the rest of the\n * file.\n */\nfunction normalizeManagedRecord(raw: unknown): ManagedExtensionRecord | null {\n if (typeof raw !== \"object\" || raw === null) {\n return null;\n }\n const entry = raw as Record<string, unknown>;\n if (!hasRequiredManagedRecordFields(entry)) {\n return null;\n }\n const source = normalizeManagedSource(entry.source);\n if (!source) {\n return null;\n }\n return {\n name: entry.name.trim(),\n directory: entry.directory.trim(),\n scope: entry.scope,\n manifest_version: entry.manifest_version,\n manifest_entry: entry.manifest_entry,\n capabilities: normalizeStringList(entry.capabilities),\n installed_at: entry.installed_at,\n updated_at: entry.updated_at,\n source,\n last_update_check_at: optionalString(entry.last_update_check_at),\n last_update_remote_commit: optionalString(entry.last_update_remote_commit),\n update_available:\n typeof entry.update_available === \"boolean\" ||\n entry.update_available === null\n ? entry.update_available\n : undefined,\n update_error: optionalString(entry.update_error),\n };\n}\n\n/** Implements normalize managed state for the public runtime surface of this module. */\nexport function normalizeManagedState(\n raw: unknown,\n): ManagedExtensionState | null {\n if (typeof raw !== \"object\" || raw === null) {\n return null;\n }\n const candidate = raw as Record<string, unknown>;\n if (\n candidate.version !== MANAGED_EXTENSION_STATE_VERSION ||\n !Array.isArray(candidate.entries)\n ) {\n return null;\n }\n\n const entries: ManagedExtensionRecord[] = [];\n for (const rawEntry of candidate.entries) {\n const record = normalizeManagedRecord(rawEntry);\n if (record) {\n entries.push(record);\n }\n }\n return {\n version: MANAGED_EXTENSION_STATE_VERSION,\n updated_at: optionalString(candidate.updated_at) ?? nowIso(),\n entries: sortManagedEntries(entries),\n };\n}\n\n/** Implements read managed extension state for the public runtime surface of this module. */\nexport async function readManagedExtensionState(\n extensionsRoot: string,\n): Promise<ManagedExtensionStateReadResult> {\n const statePath = resolveManagedExtensionStatePath(extensionsRoot);\n const fallback = createEmptyManagedExtensionState();\n try {\n const raw = await fs.readFile(statePath, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n const normalized = normalizeManagedState(parsed);\n if (!normalized) {\n throw new PmCliError(\n `Managed extension state file \"${statePath}\" has an invalid schema. Repair or remove it before mutating extension state.`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n return {\n path: statePath,\n state: normalized,\n warnings: [],\n };\n } catch (error: unknown) {\n if (error instanceof PmCliError) {\n throw error;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code === \"ENOENT\"\n ) {\n return {\n path: statePath,\n state: fallback,\n warnings: [],\n };\n }\n throw new PmCliError(\n `Managed extension state file \"${statePath}\" could not be read. Repair or remove it before mutating extension state.`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n}\n\n/** Implements write managed extension state for the public runtime surface of this module. */\nexport async function writeManagedExtensionState(\n extensionsRoot: string,\n state: ManagedExtensionState,\n): Promise<void> {\n const statePath = resolveManagedExtensionStatePath(extensionsRoot);\n const normalized: ManagedExtensionState = {\n version: MANAGED_EXTENSION_STATE_VERSION,\n updated_at: nowIso(),\n entries: sortManagedEntries(state.entries),\n };\n await fs.mkdir(extensionsRoot, { recursive: true });\n await fs.writeFile(\n statePath,\n `${JSON.stringify(normalized, null, 2)}\\n`,\n \"utf8\",\n );\n}\n\n/** Implements upsert managed entry for the public runtime surface of this module. */\nexport function upsertManagedEntry(\n state: ManagedExtensionState,\n entry: ManagedExtensionRecord,\n): ManagedExtensionState {\n const updatedEntries = state.entries.filter(\n (candidate) =>\n normalizeExtensionNameForMatch(candidate.name) !==\n normalizeExtensionNameForMatch(entry.name) &&\n normalizeExtensionNameForMatch(candidate.directory) !==\n normalizeExtensionNameForMatch(entry.directory),\n );\n updatedEntries.push(entry);\n return {\n ...state,\n updated_at: nowIso(),\n entries: sortManagedEntries(updatedEntries),\n };\n}\n"],"names":[],"mappings":"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","debugId":"a0286c96-941d-587e-b4a6-19f4248823ab"}