@unbrained/pm-cli 2026.7.13 → 2026.7.14

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 (487) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +28 -0
  3. package/dist/cli/commands/aggregate.d.ts +1 -1
  4. package/dist/cli/commands/aggregate.js +18 -6
  5. package/dist/cli/commands/aggregate.js.map +1 -1
  6. package/dist/cli/commands/context.d.ts +16 -1
  7. package/dist/cli/commands/context.js +98 -16
  8. package/dist/cli/commands/context.js.map +1 -1
  9. package/dist/cli/commands/create.d.ts +1 -1
  10. package/dist/cli/commands/create.js +11 -7
  11. package/dist/cli/commands/create.js.map +1 -1
  12. package/dist/cli/commands/deps.d.ts +6 -96
  13. package/dist/cli/commands/deps.js +4 -214
  14. package/dist/cli/commands/deps.js.map +1 -1
  15. package/dist/cli/commands/docs.d.ts +2 -44
  16. package/dist/cli/commands/docs.js +8 -13
  17. package/dist/cli/commands/docs.js.map +1 -1
  18. package/dist/cli/commands/files.d.ts +6 -134
  19. package/dist/cli/commands/files.js +4 -294
  20. package/dist/cli/commands/files.js.map +1 -1
  21. package/dist/cli/commands/get.js +15 -2
  22. package/dist/cli/commands/get.js.map +1 -1
  23. package/dist/cli/commands/list.js +5 -6
  24. package/dist/cli/commands/list.js.map +1 -1
  25. package/dist/cli/commands/next.d.ts +3 -1
  26. package/dist/cli/commands/next.js +77 -20
  27. package/dist/cli/commands/next.js.map +1 -1
  28. package/dist/cli/commands/update-many.js +6 -3
  29. package/dist/cli/commands/update-many.js.map +1 -1
  30. package/dist/cli/commands/update.js +14 -7
  31. package/dist/cli/commands/update.js.map +1 -1
  32. package/dist/cli/commands/validate.d.ts +1 -1
  33. package/dist/cli/commands/validate.js +32 -35
  34. package/dist/cli/commands/validate.js.map +1 -1
  35. package/dist/cli/main.d.ts +2 -14
  36. package/dist/cli/main.js +27 -8
  37. package/dist/cli/main.js.map +1 -1
  38. package/dist/cli-bundle/chunks/append-DYQWQK2J.js +11 -0
  39. package/dist/cli-bundle/chunks/{append-2FS6MVG7.js → append-PVZJDM6J.js} +5 -5
  40. package/dist/cli-bundle/chunks/{chunk-J2WAWP4U.js → chunk-2FNWQXZ2.js} +4 -4
  41. package/dist/cli-bundle/chunks/{chunk-YFGYDZRP.js → chunk-2GA3NK35.js} +4 -4
  42. package/dist/cli-bundle/chunks/{chunk-XFEIASAC.js → chunk-2QIQGYPW.js} +2 -2
  43. package/dist/cli-bundle/chunks/{chunk-3WCGYH5Q.js → chunk-3CMRNVTO.js} +7 -7
  44. package/dist/cli-bundle/chunks/chunk-3HKUXVKV.js +9 -0
  45. package/dist/cli-bundle/chunks/{chunk-VDAZPPRU.js → chunk-3I3LRT2G.js} +2 -2
  46. package/dist/cli-bundle/chunks/{chunk-3P3RFJIQ.js → chunk-3TL7WOEF.js} +2 -2
  47. package/dist/cli-bundle/chunks/{chunk-4SHJ5JS3.js → chunk-44LNIULG.js} +4 -4
  48. package/dist/cli-bundle/chunks/{chunk-QFOAWBOB.js → chunk-4DY4KPQI.js} +11 -10
  49. package/dist/cli-bundle/chunks/{chunk-QFOAWBOB.js.map → chunk-4DY4KPQI.js.map} +2 -2
  50. package/dist/cli-bundle/chunks/{chunk-BVCF4ULV.js → chunk-4RXTMU57.js} +5 -5
  51. package/dist/cli-bundle/chunks/{chunk-XMI2TRY5.js → chunk-4WREH7RT.js} +4 -4
  52. package/dist/cli-bundle/chunks/{chunk-JYUGUXFW.js → chunk-5CT5BW6E.js} +5 -5
  53. package/dist/cli-bundle/chunks/{chunk-NA5SBIB4.js → chunk-5URI7TPJ.js} +44 -44
  54. package/dist/cli-bundle/chunks/chunk-5URI7TPJ.js.map +7 -0
  55. package/dist/cli-bundle/chunks/{chunk-QGH6WL6L.js → chunk-655STMGA.js} +2 -2
  56. package/dist/cli-bundle/chunks/{chunk-DGKBWCMA.js → chunk-6IIVBC56.js} +4 -4
  57. package/dist/cli-bundle/chunks/{chunk-SRQLQUO6.js → chunk-6MHSBDGD.js} +7 -7
  58. package/dist/cli-bundle/chunks/{chunk-SRQLQUO6.js.map → chunk-6MHSBDGD.js.map} +2 -2
  59. package/dist/cli-bundle/chunks/{chunk-D4GPNYYP.js → chunk-6OTZMORS.js} +6 -6
  60. package/dist/cli-bundle/chunks/{chunk-JVRVXO6M.js → chunk-6PKA3SJQ.js} +6 -6
  61. package/dist/cli-bundle/chunks/{chunk-2PR4ZTRO.js → chunk-6TTOHMTB.js} +8 -8
  62. package/dist/cli-bundle/chunks/{chunk-2PR4ZTRO.js.map → chunk-6TTOHMTB.js.map} +1 -1
  63. package/dist/cli-bundle/chunks/chunk-6X5MZ5R2.js +9 -0
  64. package/dist/cli-bundle/chunks/chunk-76UBY2EE.js +5 -0
  65. package/dist/cli-bundle/chunks/{chunk-ZS2KPCJN.js → chunk-7QDSYUMF.js} +7 -7
  66. package/dist/cli-bundle/chunks/{chunk-Z7TFPIJ6.js → chunk-7TQMR6LK.js} +7 -7
  67. package/dist/cli-bundle/chunks/{chunk-AHA4POA6.js → chunk-ABRCOSDC.js} +3 -3
  68. package/dist/cli-bundle/chunks/{chunk-XY3CC3EM.js → chunk-AFWZRL7M.js} +59 -53
  69. package/dist/cli-bundle/chunks/chunk-AFWZRL7M.js.map +7 -0
  70. package/dist/cli-bundle/chunks/{chunk-KQJVTQVK.js → chunk-ANSJHDOZ.js} +2 -2
  71. package/dist/cli-bundle/chunks/{chunk-OMT4NO7T.js → chunk-B5DZYTT3.js} +113 -24
  72. package/dist/cli-bundle/chunks/chunk-B5DZYTT3.js.map +7 -0
  73. package/dist/cli-bundle/chunks/chunk-B7SWOIP6.js +5 -0
  74. package/dist/cli-bundle/chunks/{chunk-D2LXG7WX.js → chunk-BN62TO2S.js} +5 -5
  75. package/dist/cli-bundle/chunks/chunk-BN62TO2S.js.map +1 -0
  76. package/dist/cli-bundle/chunks/{chunk-ZTSV7P2T.js → chunk-BPD26E3P.js} +357 -42
  77. package/dist/cli-bundle/chunks/chunk-BPD26E3P.js.map +1 -0
  78. package/dist/cli-bundle/chunks/{chunk-RKGFUC4O.js → chunk-CDJYP7OQ.js} +36 -14
  79. package/dist/cli-bundle/chunks/chunk-CDJYP7OQ.js.map +1 -0
  80. package/dist/cli-bundle/chunks/{chunk-VLFLRFJP.js → chunk-CIOZ376P.js} +20 -13
  81. package/dist/cli-bundle/chunks/chunk-CIOZ376P.js.map +1 -0
  82. package/dist/cli-bundle/chunks/{chunk-HXTCZSAI.js → chunk-DBZVUJTK.js} +3 -3
  83. package/dist/cli-bundle/chunks/{chunk-2QNOWOIB.js → chunk-DO5RGJXT.js} +3 -3
  84. package/dist/cli-bundle/chunks/{chunk-MKONZ4UO.js → chunk-DRNJPEPQ.js} +4 -4
  85. package/dist/cli-bundle/chunks/{chunk-XDT2PSXA.js → chunk-DVOLZJ3C.js} +12 -11
  86. package/dist/cli-bundle/chunks/{chunk-XDT2PSXA.js.map → chunk-DVOLZJ3C.js.map} +1 -1
  87. package/dist/cli-bundle/chunks/{chunk-H36FXA7B.js → chunk-DYEX6NFH.js} +4 -4
  88. package/dist/cli-bundle/chunks/{chunk-G3IB5GTD.js → chunk-E2WC6S4P.js} +15 -11
  89. package/dist/cli-bundle/chunks/chunk-E2WC6S4P.js.map +7 -0
  90. package/dist/cli-bundle/chunks/{chunk-GAJ7U7B4.js → chunk-ERL2YFJ2.js} +3 -3
  91. package/dist/cli-bundle/chunks/{chunk-FPEYOFEF.js → chunk-F7PSHRNO.js} +3 -3
  92. package/dist/cli-bundle/chunks/{chunk-UH7OLT6F.js → chunk-FDSBDNYE.js} +2 -2
  93. package/dist/cli-bundle/chunks/{chunk-DGJF32JF.js → chunk-FIGXOCEQ.js} +66 -21
  94. package/dist/cli-bundle/chunks/chunk-FIGXOCEQ.js.map +7 -0
  95. package/dist/cli-bundle/chunks/{chunk-RQAY7C5T.js → chunk-FJZDA6MS.js} +3 -3
  96. package/dist/cli-bundle/chunks/{chunk-B4TVNGRX.js → chunk-FO7GMJKG.js} +3 -3
  97. package/dist/cli-bundle/chunks/chunk-FRQ63VPB.js +5 -0
  98. package/dist/cli-bundle/chunks/{chunk-UTYNQ2WH.js → chunk-FS6UM5WH.js} +48 -27
  99. package/dist/cli-bundle/chunks/chunk-FS6UM5WH.js.map +7 -0
  100. package/dist/cli-bundle/chunks/{chunk-U252II47.js → chunk-FTQLW4JD.js} +4 -4
  101. package/dist/cli-bundle/chunks/{chunk-TNGLCRKS.js → chunk-GSEADLRH.js} +1821 -1809
  102. package/dist/cli-bundle/chunks/chunk-GSEADLRH.js.map +1 -0
  103. package/dist/cli-bundle/chunks/{chunk-TGG7YGMC.js → chunk-GXXC7QSK.js} +53 -47
  104. package/dist/cli-bundle/chunks/chunk-GXXC7QSK.js.map +1 -0
  105. package/dist/cli-bundle/chunks/{chunk-AGD4VZXH.js → chunk-H2QBAKLQ.js} +3 -3
  106. package/dist/cli-bundle/chunks/{chunk-CJVQ4XIG.js → chunk-HAMLIWAF.js} +4 -4
  107. package/dist/cli-bundle/chunks/{chunk-56DX6QYG.js → chunk-HL7V2PHX.js} +19 -13
  108. package/dist/cli-bundle/chunks/chunk-HL7V2PHX.js.map +1 -0
  109. package/dist/cli-bundle/chunks/{chunk-7QOIQTPB.js → chunk-HLHSQ5CA.js} +4 -4
  110. package/dist/cli-bundle/chunks/{chunk-AHC7J6XD.js → chunk-IA3YFTXT.js} +6 -6
  111. package/dist/cli-bundle/chunks/{chunk-5ZCVF4WF.js → chunk-IAPHYPRL.js} +2 -2
  112. package/dist/cli-bundle/chunks/{chunk-OCSQWIOW.js → chunk-IFZA4VB5.js} +4 -4
  113. package/dist/cli-bundle/chunks/{chunk-6O2HJENY.js → chunk-IGED7NH2.js} +61 -48
  114. package/dist/cli-bundle/chunks/chunk-IGED7NH2.js.map +7 -0
  115. package/dist/cli-bundle/chunks/{chunk-RPCCQDG2.js → chunk-ILLUE5DI.js} +36 -14
  116. package/dist/cli-bundle/chunks/chunk-ILLUE5DI.js.map +7 -0
  117. package/dist/cli-bundle/chunks/{chunk-4WMFM77X.js → chunk-J4NZOP3I.js} +5 -5
  118. package/dist/cli-bundle/chunks/{chunk-57JVERX3.js → chunk-JAF4TUQ7.js} +4 -4
  119. package/dist/cli-bundle/chunks/chunk-JAF4TUQ7.js.map +7 -0
  120. package/dist/cli-bundle/chunks/{chunk-MTNKSSSO.js → chunk-JL7WZ4O2.js} +3 -3
  121. package/dist/cli-bundle/chunks/{chunk-AZ52LTCY.js → chunk-K7WNZ7KD.js} +3 -3
  122. package/dist/cli-bundle/chunks/{chunk-2OLSXXIV.js → chunk-KADLSPIU.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-RQKORMM4.js → chunk-KB726FMH.js} +4 -4
  124. package/dist/cli-bundle/chunks/{chunk-WKSFBBZT.js → chunk-L24HCJFC.js} +114 -25
  125. package/dist/cli-bundle/chunks/chunk-L24HCJFC.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-LDO24J5I.js → chunk-LWTIRS3Y.js} +365 -43
  127. package/dist/cli-bundle/chunks/chunk-LWTIRS3Y.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-TZTQ4TVV.js → chunk-M6ASXYCU.js} +4 -4
  129. package/dist/cli-bundle/chunks/{chunk-WDDOAU7Z.js → chunk-M7EWN4TF.js} +3 -3
  130. package/dist/cli-bundle/chunks/{chunk-327DSGW2.js → chunk-MD6ULIPJ.js} +3 -3
  131. package/dist/cli-bundle/chunks/{chunk-OKDBHOON.js → chunk-MKL4CP2I.js} +61 -48
  132. package/dist/cli-bundle/chunks/chunk-MKL4CP2I.js.map +1 -0
  133. package/dist/cli-bundle/chunks/{chunk-M52DG2QJ.js → chunk-MQZ3PLCF.js} +2 -2
  134. package/dist/cli-bundle/chunks/{chunk-GQ2CQNGI.js → chunk-N3CMP4NI.js} +2 -2
  135. package/dist/cli-bundle/chunks/{chunk-J7SBFUZC.js → chunk-NAQYVWSQ.js} +4 -4
  136. package/dist/cli-bundle/chunks/{chunk-U2GMYP3L.js → chunk-NKW36AMT.js} +4 -4
  137. package/dist/cli-bundle/chunks/{chunk-5WEYOVZ7.js → chunk-OBDLEQG5.js} +19 -12
  138. package/dist/cli-bundle/chunks/chunk-OBDLEQG5.js.map +7 -0
  139. package/dist/cli-bundle/chunks/{chunk-VL4LYTJN.js → chunk-OI4S4KCI.js} +18 -12
  140. package/dist/cli-bundle/chunks/chunk-OI4S4KCI.js.map +7 -0
  141. package/dist/cli-bundle/chunks/{chunk-FCVVMAEX.js → chunk-P6MYFH6K.js} +60 -22
  142. package/dist/cli-bundle/chunks/chunk-P6MYFH6K.js.map +1 -0
  143. package/dist/cli-bundle/chunks/{chunk-FTQQAPRX.js → chunk-PHKP3AGR.js} +8 -8
  144. package/dist/cli-bundle/chunks/{chunk-WVUXNIYO.js → chunk-Q37E63AM.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-JVXV7ANV.js → chunk-Q7E6OYZK.js} +2 -2
  146. package/dist/cli-bundle/chunks/{chunk-WVUYATII.js → chunk-QABYZYLU.js} +4 -4
  147. package/dist/cli-bundle/chunks/{chunk-QRRUGIJN.js → chunk-QASRVKUQ.js} +45 -45
  148. package/dist/cli-bundle/chunks/chunk-QASRVKUQ.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-L4262MFB.js → chunk-QK2ZN6UL.js} +14 -5
  150. package/dist/cli-bundle/chunks/{chunk-L4262MFB.js.map → chunk-QK2ZN6UL.js.map} +1 -1
  151. package/dist/cli-bundle/chunks/{chunk-7TQPV7HR.js → chunk-QSPARJWF.js} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-GTKILM6F.js → chunk-QZ7LT3XE.js} +3 -3
  153. package/dist/cli-bundle/chunks/{chunk-L3VKY6R6.js → chunk-RA5AIAMP.js} +3 -3
  154. package/dist/cli-bundle/chunks/{chunk-BJS27ALI.js → chunk-RGXD5JJR.js} +6 -6
  155. package/dist/cli-bundle/chunks/{chunk-TSEPW2P6.js → chunk-RMF3IOYQ.js} +7 -7
  156. package/dist/cli-bundle/chunks/{chunk-QXYKH56X.js → chunk-T4BRCB6Z.js} +1894 -1875
  157. package/dist/cli-bundle/chunks/chunk-T4BRCB6Z.js.map +7 -0
  158. package/dist/cli-bundle/chunks/{chunk-TGGTXC52.js → chunk-TH7U4KLY.js} +3 -3
  159. package/dist/cli-bundle/chunks/{chunk-LP4UATP6.js → chunk-TWLDBKQU.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-OTZ3C2NE.js → chunk-TZ2PSLLT.js} +49 -28
  161. package/dist/cli-bundle/chunks/chunk-TZ2PSLLT.js.map +1 -0
  162. package/dist/cli-bundle/chunks/{chunk-UK222BHQ.js → chunk-TZRTLMWM.js} +4 -4
  163. package/dist/cli-bundle/chunks/{chunk-6E6S2X6S.js → chunk-UB2QYSTO.js} +8 -8
  164. package/dist/cli-bundle/chunks/{chunk-S6CXUSYC.js → chunk-UGTVWL3E.js} +5 -5
  165. package/dist/cli-bundle/chunks/{chunk-BNS6QHTZ.js → chunk-UJ4HJYWL.js} +2 -2
  166. package/dist/cli-bundle/chunks/{chunk-BYVOEJPQ.js → chunk-UKUIIBDW.js} +4 -4
  167. package/dist/cli-bundle/chunks/{chunk-SGDBVR7X.js → chunk-UVBA6F5A.js} +2 -2
  168. package/dist/cli-bundle/chunks/{chunk-DZRZMBBF.js → chunk-VJTAEIPC.js} +5 -5
  169. package/dist/cli-bundle/chunks/{chunk-74PWVJON.js → chunk-W6HZ55JO.js} +2 -2
  170. package/dist/cli-bundle/chunks/{chunk-HR2MQAO5.js → chunk-WD6MSYMP.js} +13 -4
  171. package/dist/cli-bundle/chunks/{chunk-HR2MQAO5.js.map → chunk-WD6MSYMP.js.map} +2 -2
  172. package/dist/cli-bundle/chunks/{chunk-P7IFURWH.js → chunk-WPAWZW7S.js} +2 -2
  173. package/dist/cli-bundle/chunks/{chunk-36LEOWSX.js → chunk-WQUEHPZB.js} +2 -2
  174. package/dist/cli-bundle/chunks/{chunk-FCKJF7G2.js → chunk-WRKB56FC.js} +3 -3
  175. package/dist/cli-bundle/chunks/{chunk-KR5EHAN4.js → chunk-X3GYR4P2.js} +2 -2
  176. package/dist/cli-bundle/chunks/{chunk-J567OZJY.js → chunk-X6BVXQ52.js} +16 -12
  177. package/dist/cli-bundle/chunks/chunk-X6BVXQ52.js.map +1 -0
  178. package/dist/cli-bundle/chunks/chunk-Y72FV7RM.js +178 -0
  179. package/dist/cli-bundle/chunks/chunk-Y72FV7RM.js.map +7 -0
  180. package/dist/cli-bundle/chunks/{chunk-OWW2KXOV.js → chunk-YQYG2V23.js} +2 -2
  181. package/dist/cli-bundle/chunks/{chunk-G2SCT7BC.js → chunk-YVKE5ZDM.js} +4 -4
  182. package/dist/cli-bundle/chunks/{chunk-QHIN4UTF.js → chunk-ZAYYDNB3.js} +4 -4
  183. package/dist/cli-bundle/chunks/chunk-ZHBI2AP7.js +9 -0
  184. package/dist/cli-bundle/chunks/chunk-ZNP64HOW.js +175 -0
  185. package/dist/cli-bundle/chunks/chunk-ZNP64HOW.js.map +1 -0
  186. package/dist/cli-bundle/chunks/{chunk-GNVBUNJQ.js → chunk-ZTRBSABY.js} +3 -3
  187. package/dist/cli-bundle/chunks/{chunk-PY32KGQU.js → chunk-ZUKSZVBW.js} +5 -5
  188. package/dist/cli-bundle/chunks/{close-CU56F47E.js → close-LZECOMHO.js} +5 -5
  189. package/dist/cli-bundle/chunks/close-RI4JQQHU.js +12 -0
  190. package/dist/cli-bundle/chunks/close-many-LY2XJ52M.js +21 -0
  191. package/dist/cli-bundle/chunks/{close-many-ZQ2WP67J.js → close-many-ZHI6A5TN.js} +12 -12
  192. package/dist/cli-bundle/chunks/comments-35M273DN.js +13 -0
  193. package/dist/cli-bundle/chunks/{comments-UDUMKXL6.js → comments-AJWRTFZ5.js} +7 -7
  194. package/dist/cli-bundle/chunks/{copy-VFHECFBV.js → copy-GMXYKBXT.js} +4 -4
  195. package/dist/cli-bundle/chunks/copy-NPYM7M7U.js +9 -0
  196. package/dist/cli-bundle/chunks/create-F53OBTOU.js +27 -0
  197. package/dist/cli-bundle/chunks/{create-CE2X3SGF.js → create-HU4Q7RJX.js} +11 -9
  198. package/dist/cli-bundle/chunks/{delete-2JXQCHHT.js → delete-GSDZLTRC.js} +4 -4
  199. package/dist/cli-bundle/chunks/delete-ODRWJWAM.js +10 -0
  200. package/dist/cli-bundle/chunks/deps-U57I7EAK.js +16 -0
  201. package/dist/cli-bundle/chunks/{deps-FPXNLO6C.js → deps-WWB7P2GT.js} +7 -4
  202. package/dist/cli-bundle/chunks/docs-G7N4E2JO.js +14 -0
  203. package/dist/cli-bundle/chunks/{docs-AMAR4OHU.js → docs-MQIY2ZQS.js} +7 -7
  204. package/dist/cli-bundle/chunks/files-TBZD7V6H.js +18 -0
  205. package/dist/cli-bundle/chunks/{files-JFHN7DYM.js → files-TTY6N2AV.js} +7 -7
  206. package/dist/cli-bundle/chunks/focus-U5TRVCRS.js +10 -0
  207. package/dist/cli-bundle/chunks/{focus-QFN2RRZ7.js → focus-XT6YVFFX.js} +5 -5
  208. package/dist/cli-bundle/chunks/{history-compact-G34XMABV.js → history-compact-KKVUWB4V.js} +8 -8
  209. package/dist/cli-bundle/chunks/{history-compact-SAHT5D46.js → history-compact-M7GHYVFN.js} +8 -8
  210. package/dist/cli-bundle/chunks/{history-redact-IFJDNKLZ.js → history-redact-3DVZOILD.js} +6 -6
  211. package/dist/cli-bundle/chunks/history-redact-JIHZLHDP.js +16 -0
  212. package/dist/cli-bundle/chunks/{history-repair-NXLQTCVN.js → history-repair-ITDUMK4N.js} +8 -8
  213. package/dist/cli-bundle/chunks/history-repair-NAFCHLH7.js +18 -0
  214. package/dist/cli-bundle/chunks/{learnings-5CZKAMBS.js → learnings-FGO3NSFW.js} +7 -7
  215. package/dist/cli-bundle/chunks/learnings-SONGPSHI.js +13 -0
  216. package/dist/cli-bundle/chunks/notes-BSD53H2W.js +13 -0
  217. package/dist/cli-bundle/chunks/{notes-POMK37UI.js → notes-NQ6RXVW6.js} +7 -7
  218. package/dist/cli-bundle/chunks/{plan-YBNYNT3A.js → plan-2NNEO46V.js} +10 -10
  219. package/dist/cli-bundle/chunks/plan-AWLYGBNV.js +24 -0
  220. package/dist/cli-bundle/chunks/{profile-JNKSU6EQ.js → profile-AAQUU6T3.js} +9 -9
  221. package/dist/cli-bundle/chunks/{profile-A2WPVG6I.js → profile-U725ATWZ.js} +9 -9
  222. package/dist/cli-bundle/chunks/{register-list-query-UG4ZA5AU.js → register-list-query-BUWCYHBT.js} +14 -13
  223. package/dist/cli-bundle/chunks/{register-list-query-UG4ZA5AU.js.map → register-list-query-BUWCYHBT.js.map} +1 -1
  224. package/dist/cli-bundle/chunks/{register-list-query-KJULL4W3.js → register-list-query-KTZ6AGE7.js} +16 -15
  225. package/dist/cli-bundle/chunks/{register-list-query-KJULL4W3.js.map → register-list-query-KTZ6AGE7.js.map} +1 -1
  226. package/dist/cli-bundle/chunks/{register-mutation-3OXYXBKH.js → register-mutation-4FMGJJF7.js} +29 -29
  227. package/dist/cli-bundle/chunks/{register-mutation-WK265BM7.js → register-mutation-UELYYOR7.js} +29 -29
  228. package/dist/cli-bundle/chunks/{register-operations-C5SQH3FJ.js → register-operations-ISUX6LY5.js} +33 -29
  229. package/dist/cli-bundle/chunks/{register-operations-C5SQH3FJ.js.map → register-operations-ISUX6LY5.js.map} +1 -1
  230. package/dist/cli-bundle/chunks/{register-operations-FH3PBHYN.js → register-operations-JVW24J2Y.js} +35 -31
  231. package/dist/cli-bundle/chunks/{register-operations-FH3PBHYN.js.map → register-operations-JVW24J2Y.js.map} +1 -1
  232. package/dist/cli-bundle/chunks/{register-setup-CCK7CJVR.js → register-setup-5XNGKJ22.js} +15 -15
  233. package/dist/cli-bundle/chunks/{register-setup-CPZBGSOJ.js → register-setup-ZTNY6S7R.js} +15 -15
  234. package/dist/cli-bundle/chunks/restore-66GLMHIX.js +14 -0
  235. package/dist/cli-bundle/chunks/{restore-IVS5XGYR.js → restore-B3BAB6X2.js} +6 -6
  236. package/dist/cli-bundle/chunks/{schema-P2MF23JO.js → schema-LZNUYHDB.js} +6 -6
  237. package/dist/cli-bundle/chunks/schema-LZNUYHDB.js.map +7 -0
  238. package/dist/cli-bundle/chunks/{schema-R3U2REY4.js → schema-U7IM2DXV.js} +6 -6
  239. package/dist/cli-bundle/chunks/schema-U7IM2DXV.js.map +1 -0
  240. package/dist/cli-bundle/chunks/update-2XGHIVQ2.js +21 -0
  241. package/dist/cli-bundle/chunks/update-2XGHIVQ2.js.map +7 -0
  242. package/dist/cli-bundle/chunks/{update-YBIQESMH.js → update-Q3UCILNR.js} +12 -12
  243. package/dist/cli-bundle/chunks/update-Q3UCILNR.js.map +1 -0
  244. package/dist/cli-bundle/chunks/{update-many-F3CIV5SQ.js → update-many-75K57FS3.js} +19 -19
  245. package/dist/cli-bundle/chunks/update-many-75K57FS3.js.map +1 -0
  246. package/dist/cli-bundle/chunks/update-many-U42YA445.js +30 -0
  247. package/dist/cli-bundle/chunks/update-many-U42YA445.js.map +7 -0
  248. package/dist/cli-bundle/main.js +39 -16
  249. package/dist/cli-bundle/main.js.map +2 -2
  250. package/dist/cli-bundle/sdk-runtime.js +56 -53
  251. package/dist/cli-bundle/sdk-testing.js +6 -6
  252. package/dist/cli-bundle/sdk.js +115 -55
  253. package/dist/cli-bundle/sdk.js.map +2 -2
  254. package/dist/core/extensions/command-hook-context.d.ts +40 -0
  255. package/dist/core/extensions/command-hook-context.js +14 -0
  256. package/dist/core/extensions/command-hook-context.js.map +1 -0
  257. package/dist/core/extensions/index.d.ts +1 -0
  258. package/dist/core/extensions/index.js +4 -3
  259. package/dist/core/extensions/index.js.map +1 -1
  260. package/dist/core/item/parse.d.ts +2 -0
  261. package/dist/core/item/parse.js +11 -2
  262. package/dist/core/item/parse.js.map +1 -1
  263. package/dist/core/store/paths.d.ts +2 -0
  264. package/dist/core/store/paths.js +10 -2
  265. package/dist/core/store/paths.js.map +1 -1
  266. package/dist/mcp/tool-definitions.js +12 -2
  267. package/dist/mcp/tool-definitions.js.map +1 -1
  268. package/dist/sdk/context-packing.d.ts +114 -0
  269. package/dist/sdk/context-packing.js +219 -0
  270. package/dist/sdk/context-packing.js.map +1 -0
  271. package/dist/sdk/context-relevance.d.ts +1 -1
  272. package/dist/sdk/context-relevance.js +4 -2
  273. package/dist/sdk/context-relevance.js.map +1 -1
  274. package/dist/sdk/context-usage.d.ts +79 -0
  275. package/dist/sdk/context-usage.js +193 -0
  276. package/dist/sdk/context-usage.js.map +1 -0
  277. package/dist/sdk/dependencies.d.ts +145 -0
  278. package/dist/sdk/dependencies.js +327 -0
  279. package/dist/sdk/dependencies.js.map +1 -0
  280. package/dist/sdk/docs.d.ts +48 -0
  281. package/dist/sdk/docs.js +15 -0
  282. package/dist/sdk/docs.js.map +1 -0
  283. package/dist/sdk/files.d.ts +135 -0
  284. package/dist/sdk/files.js +320 -0
  285. package/dist/sdk/files.js.map +1 -0
  286. package/dist/sdk/index.d.ts +6 -0
  287. package/dist/sdk/index.js +8 -2
  288. package/dist/sdk/index.js.map +1 -1
  289. package/dist/{cli/commands → sdk}/linked-artifacts.d.ts +11 -5
  290. package/dist/{cli/commands → sdk}/linked-artifacts.js +49 -25
  291. package/dist/sdk/linked-artifacts.js.map +1 -0
  292. package/dist/sdk/runtime.d.ts +4 -4
  293. package/dist/sdk/runtime.js +7 -4
  294. package/dist/sdk/runtime.js.map +1 -1
  295. package/dist/sdk/workspace.js +3 -2
  296. package/dist/sdk/workspace.js.map +1 -1
  297. package/docs/AGENT_GUIDE.md +1 -1
  298. package/docs/CONFIGURATION.md +1 -0
  299. package/docs/PR_REVIEW_LOOP.md +21 -11
  300. package/docs/SDK.md +94 -0
  301. package/marketplace.json +2 -2
  302. package/package.json +1 -1
  303. package/packages/pm-beads/package.json +1 -1
  304. package/packages/pm-calendar/package.json +1 -1
  305. package/packages/pm-command-kit/package.json +1 -1
  306. package/packages/pm-governance-audit/package.json +1 -1
  307. package/packages/pm-guide-shell/package.json +1 -1
  308. package/packages/pm-kanban/package.json +1 -1
  309. package/packages/pm-lifecycle-hooks/package.json +1 -1
  310. package/packages/pm-linked-test-adapters/package.json +1 -1
  311. package/packages/pm-search-advanced/package.json +1 -1
  312. package/packages/pm-templates/package.json +1 -1
  313. package/packages/pm-todos/package.json +1 -1
  314. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  315. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  316. package/dist/cli/commands/linked-artifacts.js.map +0 -1
  317. package/dist/cli-bundle/chunks/append-CTKFDEAX.js +0 -11
  318. package/dist/cli-bundle/chunks/chunk-56DX6QYG.js.map +0 -1
  319. package/dist/cli-bundle/chunks/chunk-57JVERX3.js.map +0 -7
  320. package/dist/cli-bundle/chunks/chunk-5WEYOVZ7.js.map +0 -7
  321. package/dist/cli-bundle/chunks/chunk-6O2HJENY.js.map +0 -7
  322. package/dist/cli-bundle/chunks/chunk-CCAGZCZK.js +0 -17
  323. package/dist/cli-bundle/chunks/chunk-CCAGZCZK.js.map +0 -7
  324. package/dist/cli-bundle/chunks/chunk-D2LXG7WX.js.map +0 -1
  325. package/dist/cli-bundle/chunks/chunk-DGJF32JF.js.map +0 -7
  326. package/dist/cli-bundle/chunks/chunk-FCVVMAEX.js.map +0 -1
  327. package/dist/cli-bundle/chunks/chunk-FUOK7JZ6.js +0 -14
  328. package/dist/cli-bundle/chunks/chunk-FUOK7JZ6.js.map +0 -1
  329. package/dist/cli-bundle/chunks/chunk-G3IB5GTD.js.map +0 -7
  330. package/dist/cli-bundle/chunks/chunk-J567OZJY.js.map +0 -1
  331. package/dist/cli-bundle/chunks/chunk-LDO24J5I.js.map +0 -7
  332. package/dist/cli-bundle/chunks/chunk-NA5SBIB4.js.map +0 -7
  333. package/dist/cli-bundle/chunks/chunk-OKDBHOON.js.map +0 -1
  334. package/dist/cli-bundle/chunks/chunk-OMT4NO7T.js.map +0 -7
  335. package/dist/cli-bundle/chunks/chunk-OTZ3C2NE.js.map +0 -1
  336. package/dist/cli-bundle/chunks/chunk-QRRUGIJN.js.map +0 -1
  337. package/dist/cli-bundle/chunks/chunk-QXYKH56X.js.map +0 -7
  338. package/dist/cli-bundle/chunks/chunk-RKGFUC4O.js.map +0 -1
  339. package/dist/cli-bundle/chunks/chunk-RPCCQDG2.js.map +0 -7
  340. package/dist/cli-bundle/chunks/chunk-TGG7YGMC.js.map +0 -1
  341. package/dist/cli-bundle/chunks/chunk-TNGLCRKS.js.map +0 -1
  342. package/dist/cli-bundle/chunks/chunk-UTYNQ2WH.js.map +0 -7
  343. package/dist/cli-bundle/chunks/chunk-VL4LYTJN.js.map +0 -7
  344. package/dist/cli-bundle/chunks/chunk-VLFLRFJP.js.map +0 -1
  345. package/dist/cli-bundle/chunks/chunk-WKSFBBZT.js.map +0 -1
  346. package/dist/cli-bundle/chunks/chunk-XY3CC3EM.js.map +0 -7
  347. package/dist/cli-bundle/chunks/chunk-ZTSV7P2T.js.map +0 -1
  348. package/dist/cli-bundle/chunks/close-BWM7FTF4.js +0 -12
  349. package/dist/cli-bundle/chunks/close-many-AUHTVFUQ.js +0 -21
  350. package/dist/cli-bundle/chunks/comments-7D5VPBZI.js +0 -13
  351. package/dist/cli-bundle/chunks/copy-QJ6ZVWZV.js +0 -9
  352. package/dist/cli-bundle/chunks/create-FGMTTYOI.js +0 -25
  353. package/dist/cli-bundle/chunks/delete-L2GMMMPR.js +0 -10
  354. package/dist/cli-bundle/chunks/deps-KTFI4RWD.js +0 -13
  355. package/dist/cli-bundle/chunks/docs-VNURA275.js +0 -14
  356. package/dist/cli-bundle/chunks/files-UNFPZLTG.js +0 -18
  357. package/dist/cli-bundle/chunks/focus-MI2UHBP4.js +0 -10
  358. package/dist/cli-bundle/chunks/history-redact-VAHGBUHI.js +0 -16
  359. package/dist/cli-bundle/chunks/history-repair-DDYQXR43.js +0 -18
  360. package/dist/cli-bundle/chunks/learnings-VWJEKHEO.js +0 -13
  361. package/dist/cli-bundle/chunks/notes-NGVJJJQO.js +0 -13
  362. package/dist/cli-bundle/chunks/plan-U6SQJUFI.js +0 -24
  363. package/dist/cli-bundle/chunks/restore-AX6ZMGHZ.js +0 -14
  364. package/dist/cli-bundle/chunks/update-XYHF3YZF.js +0 -21
  365. package/dist/cli-bundle/chunks/update-many-5HKVHFUL.js +0 -30
  366. /package/dist/cli-bundle/chunks/{append-CTKFDEAX.js.map → append-DYQWQK2J.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{append-2FS6MVG7.js.map → append-PVZJDM6J.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{chunk-J2WAWP4U.js.map → chunk-2FNWQXZ2.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{chunk-YFGYDZRP.js.map → chunk-2GA3NK35.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{chunk-XFEIASAC.js.map → chunk-2QIQGYPW.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{chunk-3WCGYH5Q.js.map → chunk-3CMRNVTO.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{close-BWM7FTF4.js.map → chunk-3HKUXVKV.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{chunk-VDAZPPRU.js.map → chunk-3I3LRT2G.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{chunk-3P3RFJIQ.js.map → chunk-3TL7WOEF.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{chunk-4SHJ5JS3.js.map → chunk-44LNIULG.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{chunk-BVCF4ULV.js.map → chunk-4RXTMU57.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-XMI2TRY5.js.map → chunk-4WREH7RT.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-JYUGUXFW.js.map → chunk-5CT5BW6E.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-QGH6WL6L.js.map → chunk-655STMGA.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-DGKBWCMA.js.map → chunk-6IIVBC56.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-D4GPNYYP.js.map → chunk-6OTZMORS.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-JVRVXO6M.js.map → chunk-6PKA3SJQ.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{close-many-AUHTVFUQ.js.map → chunk-6X5MZ5R2.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{close-CU56F47E.js.map → chunk-76UBY2EE.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{chunk-ZS2KPCJN.js.map → chunk-7QDSYUMF.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{chunk-Z7TFPIJ6.js.map → chunk-7TQMR6LK.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{chunk-AHA4POA6.js.map → chunk-ABRCOSDC.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{chunk-KQJVTQVK.js.map → chunk-ANSJHDOZ.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{close-many-ZQ2WP67J.js.map → chunk-B7SWOIP6.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{chunk-HXTCZSAI.js.map → chunk-DBZVUJTK.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{chunk-2QNOWOIB.js.map → chunk-DO5RGJXT.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{chunk-MKONZ4UO.js.map → chunk-DRNJPEPQ.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{chunk-H36FXA7B.js.map → chunk-DYEX6NFH.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{chunk-GAJ7U7B4.js.map → chunk-ERL2YFJ2.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{chunk-FPEYOFEF.js.map → chunk-F7PSHRNO.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{chunk-UH7OLT6F.js.map → chunk-FDSBDNYE.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{chunk-RQAY7C5T.js.map → chunk-FJZDA6MS.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{chunk-B4TVNGRX.js.map → chunk-FO7GMJKG.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{comments-UDUMKXL6.js.map → chunk-FRQ63VPB.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{chunk-U252II47.js.map → chunk-FTQLW4JD.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{chunk-AGD4VZXH.js.map → chunk-H2QBAKLQ.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{chunk-CJVQ4XIG.js.map → chunk-HAMLIWAF.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{chunk-7QOIQTPB.js.map → chunk-HLHSQ5CA.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{chunk-AHC7J6XD.js.map → chunk-IA3YFTXT.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{chunk-5ZCVF4WF.js.map → chunk-IAPHYPRL.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{chunk-OCSQWIOW.js.map → chunk-IFZA4VB5.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{chunk-4WMFM77X.js.map → chunk-J4NZOP3I.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{chunk-MTNKSSSO.js.map → chunk-JL7WZ4O2.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{chunk-AZ52LTCY.js.map → chunk-K7WNZ7KD.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{chunk-2OLSXXIV.js.map → chunk-KADLSPIU.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{chunk-RQKORMM4.js.map → chunk-KB726FMH.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{chunk-TZTQ4TVV.js.map → chunk-M6ASXYCU.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{chunk-WDDOAU7Z.js.map → chunk-M7EWN4TF.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{chunk-327DSGW2.js.map → chunk-MD6ULIPJ.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{chunk-M52DG2QJ.js.map → chunk-MQZ3PLCF.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{chunk-GQ2CQNGI.js.map → chunk-N3CMP4NI.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{chunk-J7SBFUZC.js.map → chunk-NAQYVWSQ.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{chunk-U2GMYP3L.js.map → chunk-NKW36AMT.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{chunk-FTQQAPRX.js.map → chunk-PHKP3AGR.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{chunk-WVUXNIYO.js.map → chunk-Q37E63AM.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{chunk-JVXV7ANV.js.map → chunk-Q7E6OYZK.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{chunk-WVUYATII.js.map → chunk-QABYZYLU.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{chunk-7TQPV7HR.js.map → chunk-QSPARJWF.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{chunk-GTKILM6F.js.map → chunk-QZ7LT3XE.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{chunk-L3VKY6R6.js.map → chunk-RA5AIAMP.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{chunk-BJS27ALI.js.map → chunk-RGXD5JJR.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{chunk-TSEPW2P6.js.map → chunk-RMF3IOYQ.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{chunk-TGGTXC52.js.map → chunk-TH7U4KLY.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{chunk-LP4UATP6.js.map → chunk-TWLDBKQU.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{chunk-UK222BHQ.js.map → chunk-TZRTLMWM.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{chunk-6E6S2X6S.js.map → chunk-UB2QYSTO.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{chunk-S6CXUSYC.js.map → chunk-UGTVWL3E.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{chunk-BNS6QHTZ.js.map → chunk-UJ4HJYWL.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{chunk-BYVOEJPQ.js.map → chunk-UKUIIBDW.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{chunk-SGDBVR7X.js.map → chunk-UVBA6F5A.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{chunk-DZRZMBBF.js.map → chunk-VJTAEIPC.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{chunk-74PWVJON.js.map → chunk-W6HZ55JO.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{chunk-P7IFURWH.js.map → chunk-WPAWZW7S.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{chunk-36LEOWSX.js.map → chunk-WQUEHPZB.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{chunk-FCKJF7G2.js.map → chunk-WRKB56FC.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{chunk-KR5EHAN4.js.map → chunk-X3GYR4P2.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{chunk-OWW2KXOV.js.map → chunk-YQYG2V23.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{chunk-G2SCT7BC.js.map → chunk-YVKE5ZDM.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{chunk-QHIN4UTF.js.map → chunk-ZAYYDNB3.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{comments-7D5VPBZI.js.map → chunk-ZHBI2AP7.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{chunk-GNVBUNJQ.js.map → chunk-ZTRBSABY.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{chunk-PY32KGQU.js.map → chunk-ZUKSZVBW.js.map} +0 -0
  448. /package/dist/cli-bundle/chunks/{copy-VFHECFBV.js.map → close-LZECOMHO.js.map} +0 -0
  449. /package/dist/cli-bundle/chunks/{copy-QJ6ZVWZV.js.map → close-RI4JQQHU.js.map} +0 -0
  450. /package/dist/cli-bundle/chunks/{create-FGMTTYOI.js.map → close-many-LY2XJ52M.js.map} +0 -0
  451. /package/dist/cli-bundle/chunks/{create-CE2X3SGF.js.map → close-many-ZHI6A5TN.js.map} +0 -0
  452. /package/dist/cli-bundle/chunks/{delete-L2GMMMPR.js.map → comments-35M273DN.js.map} +0 -0
  453. /package/dist/cli-bundle/chunks/{delete-2JXQCHHT.js.map → comments-AJWRTFZ5.js.map} +0 -0
  454. /package/dist/cli-bundle/chunks/{deps-FPXNLO6C.js.map → copy-GMXYKBXT.js.map} +0 -0
  455. /package/dist/cli-bundle/chunks/{deps-KTFI4RWD.js.map → copy-NPYM7M7U.js.map} +0 -0
  456. /package/dist/cli-bundle/chunks/{docs-VNURA275.js.map → create-F53OBTOU.js.map} +0 -0
  457. /package/dist/cli-bundle/chunks/{docs-AMAR4OHU.js.map → create-HU4Q7RJX.js.map} +0 -0
  458. /package/dist/cli-bundle/chunks/{files-JFHN7DYM.js.map → delete-GSDZLTRC.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{files-UNFPZLTG.js.map → delete-ODRWJWAM.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{focus-MI2UHBP4.js.map → deps-U57I7EAK.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{focus-QFN2RRZ7.js.map → deps-WWB7P2GT.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{history-compact-SAHT5D46.js.map → docs-G7N4E2JO.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{history-compact-G34XMABV.js.map → docs-MQIY2ZQS.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{history-redact-VAHGBUHI.js.map → files-TBZD7V6H.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{history-redact-IFJDNKLZ.js.map → files-TTY6N2AV.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{history-repair-DDYQXR43.js.map → focus-U5TRVCRS.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{history-repair-NXLQTCVN.js.map → focus-XT6YVFFX.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{learnings-5CZKAMBS.js.map → history-compact-KKVUWB4V.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{learnings-VWJEKHEO.js.map → history-compact-M7GHYVFN.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{notes-POMK37UI.js.map → history-redact-3DVZOILD.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{notes-NGVJJJQO.js.map → history-redact-JIHZLHDP.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{plan-YBNYNT3A.js.map → history-repair-ITDUMK4N.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{plan-U6SQJUFI.js.map → history-repair-NAFCHLH7.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{profile-JNKSU6EQ.js.map → learnings-FGO3NSFW.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{profile-A2WPVG6I.js.map → learnings-SONGPSHI.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{restore-AX6ZMGHZ.js.map → notes-BSD53H2W.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{restore-IVS5XGYR.js.map → notes-NQ6RXVW6.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{schema-R3U2REY4.js.map → plan-2NNEO46V.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{schema-P2MF23JO.js.map → plan-AWLYGBNV.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{update-YBIQESMH.js.map → profile-AAQUU6T3.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{update-XYHF3YZF.js.map → profile-U725ATWZ.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{register-mutation-3OXYXBKH.js.map → register-mutation-4FMGJJF7.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{register-mutation-WK265BM7.js.map → register-mutation-UELYYOR7.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{register-setup-CCK7CJVR.js.map → register-setup-5XNGKJ22.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{register-setup-CPZBGSOJ.js.map → register-setup-ZTNY6S7R.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{update-many-5HKVHFUL.js.map → restore-66GLMHIX.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{update-many-F3CIV5SQ.js.map → restore-B3BAB6X2.js.map} +0 -0
@@ -9,7 +9,7 @@ import {
9
9
  replayToItemDocument,
10
10
  tryApplyReplayPatch,
11
11
  verifyHistoryChain
12
- } from "./chunk-XMI2TRY5.js";
12
+ } from "./chunk-4WREH7RT.js";
13
13
  import {
14
14
  acquireLock,
15
15
  canonicalDocument,
@@ -24,7 +24,7 @@ import {
24
24
  resolveGovernanceKnobs,
25
25
  runActiveOnWriteHooks,
26
26
  serializeItemDocument
27
- } from "./chunk-QXYKH56X.js";
27
+ } from "./chunk-T4BRCB6Z.js";
28
28
  import {
29
29
  EXIT_CODE,
30
30
  PmCliError,
@@ -36,7 +36,7 @@ import {
36
36
  resolveItemTypeRegistry,
37
37
  resolvePmRoot,
38
38
  writeFileAtomic
39
- } from "./chunk-XY3CC3EM.js";
39
+ } from "./chunk-AFWZRL7M.js";
40
40
 
41
41
  // dist/cli/commands/history-redact.js
42
42
  import fs2 from "node:fs/promises";
@@ -656,4 +656,4 @@ export {
656
656
  runHistoryRedact,
657
657
  _testOnly
658
658
  };
659
- //# sourceMappingURL=chunk-H36FXA7B.js.map
659
+ //# sourceMappingURL=chunk-DYEX6NFH.js.map
@@ -3,13 +3,13 @@ import {
3
3
  loadMutationCheckpoint,
4
4
  restoreCheckpointItems,
5
5
  writeMutationCheckpoint
6
- } from "./chunk-L3VKY6R6.js";
6
+ } from "./chunk-RA5AIAMP.js";
7
7
  import {
8
8
  runRestore
9
- } from "./chunk-WVUXNIYO.js";
9
+ } from "./chunk-Q37E63AM.js";
10
10
  import {
11
11
  runUpdate
12
- } from "./chunk-5WEYOVZ7.js";
12
+ } from "./chunk-OBDLEQG5.js";
13
13
  import {
14
14
  resolveAuthor
15
15
  } from "./chunk-YRYYFGV3.js";
@@ -18,18 +18,19 @@ import {
18
18
  } from "./chunk-KWYX6ZIR.js";
19
19
  import {
20
20
  runList
21
- } from "./chunk-SRQLQUO6.js";
21
+ } from "./chunk-6MHSBDGD.js";
22
22
  import {
23
23
  resolvePriority
24
- } from "./chunk-VL4LYTJN.js";
24
+ } from "./chunk-OI4S4KCI.js";
25
25
  import {
26
26
  applyTagRemovals,
27
27
  mergeAdditiveTags,
28
+ parseOptionalNonNegativeInteger,
28
29
  parseTags
29
- } from "./chunk-HR2MQAO5.js";
30
+ } from "./chunk-WD6MSYMP.js";
30
31
  import {
31
32
  buildInvalidTypeError
32
- } from "./chunk-KQJVTQVK.js";
33
+ } from "./chunk-ANSJHDOZ.js";
33
34
  import {
34
35
  collectRuntimeUpdateFieldValues,
35
36
  getActiveExtensionRegistrations,
@@ -39,7 +40,7 @@ import {
39
40
  resolveIsoOrRelative,
40
41
  stableValueEquals,
41
42
  toItemRecord
42
- } from "./chunk-QXYKH56X.js";
43
+ } from "./chunk-T4BRCB6Z.js";
43
44
  import {
44
45
  EXIT_CODE,
45
46
  PmCliError,
@@ -52,13 +53,13 @@ import {
52
53
  resolveRuntimeStatusRegistry,
53
54
  resolveTypeName,
54
55
  toErrorMessage
55
- } from "./chunk-XY3CC3EM.js";
56
+ } from "./chunk-AFWZRL7M.js";
56
57
 
57
58
  // dist/cli/commands/update-many.js
58
59
  !(function() {
59
60
  try {
60
61
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
61
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "aee29c00-c350-5f1d-9ad7-129538e5cf1a");
62
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "66fd8f1d-25f8-55fc-85ea-ea3000479f01");
62
63
  } catch (e2) {
63
64
  }
64
65
  })();
@@ -456,6 +457,9 @@ function assertPlannedUpdateValuesValid(update, settings, statusRegistry, pmRoot
456
457
  if (update.deadline !== void 0) {
457
458
  resolveIsoOrRelative(update.deadline, /* @__PURE__ */ new Date(), "deadline");
458
459
  }
460
+ if (update.estimatedMinutes !== void 0) {
461
+ parseOptionalNonNegativeInteger(update.estimatedMinutes, "estimated-minutes");
462
+ }
459
463
  }
460
464
  async function runUpdateManyRollback(params) {
461
465
  const checkpoint = await loadMutationCheckpoint(params.pmRoot, UPDATE_MANY_CHECKPOINT_SUBDIR, params.rollbackId, UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION);
@@ -649,4 +653,4 @@ export {
649
653
  runUpdateMany,
650
654
  _testOnlyUpdateManyCommand
651
655
  };
652
- //# sourceMappingURL=chunk-G3IB5GTD.js.map
656
+ //# sourceMappingURL=chunk-E2WC6S4P.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../cli/commands/update-many.ts"],
4
+ "sourcesContent": ["/**\n * @module cli/commands/update-many\n *\n * Implements the pm update many command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport {\n createCheckpointId,\n loadMutationCheckpoint,\n restoreCheckpointItems,\n writeMutationCheckpoint,\n type MutationCheckpointItem,\n} from \"../../core/checkpoint/mutation-checkpoint.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport {\n applyTagRemovals,\n mergeAdditiveTags,\n parseOptionalNonNegativeInteger,\n parseTags,\n} from \"../../core/item/parse.js\";\nimport { resolvePriority } from \"../../core/item/priority.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport {\n resolveItemTypeRegistry,\n resolveTypeName,\n} from \"../../core/item/type-registry.js\";\nimport { collectRuntimeUpdateFieldValues } from \"../../core/schema/runtime-field-values.js\";\nimport { buildInvalidTypeError } from \"../../core/schema/item-types-file.js\";\nimport {\n resolveItemTypesFilePath,\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeFieldRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.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 { toErrorMessage } from \"../../core/shared/primitives.js\";\nimport { stableValueEquals } from \"../../core/shared/serialization.js\";\nimport { nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport type { PmSettings } from \"../../types/index.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { resolveAuthor } from \"../../core/shared/author.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { hasListFilters } from \"./list-filter-shared.js\";\nimport { runList, type ListOptions, type ListedItem } from \"./list.js\";\nimport { runRestore } from \"./restore.js\";\nimport { runUpdate, type UpdateCommandOptions } from \"./update.js\";\n\nconst UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION = 1;\nconst UPDATE_MANY_CHECKPOINT_SUBDIR = \"update-many\";\n\nconst NON_MUTATION_UPDATE_OPTION_KEYS = new Set<PropertyKey>([\n \"author\",\n \"message\",\n \"force\",\n \"ownershipMetadataBypass\",\n \"ownershipDependencyBypass\",\n]);\n\nconst UPDATE_MANY_MUTATION_FLAG_GUIDANCE = [\n \"--status\",\n \"--priority\",\n \"--type\",\n \"--tags\",\n \"--description\",\n \"--body\",\n \"--deadline\",\n \"--estimate\",\n \"--assignee\",\n \"--dep\",\n \"--dep-remove\",\n \"--comment\",\n \"--note\",\n \"--learning\",\n \"--file\",\n \"--test\",\n \"--doc\",\n \"--replace-deps\",\n \"--replace-tests\",\n \"--unset\",\n \"--clear-*\",\n].join(\", \");\n\nconst UPDATE_OPTION_TO_ITEM_KEY: Partial<\n Record<keyof UpdateCommandOptions, string>\n> = {\n title: \"title\",\n description: \"description\",\n body: \"body\",\n status: \"status\",\n closeReason: \"close_reason\",\n priority: \"priority\",\n type: \"type\",\n deadline: \"deadline\",\n estimatedMinutes: \"estimated_minutes\",\n acceptanceCriteria: \"acceptance_criteria\",\n definitionOfReady: \"definition_of_ready\",\n order: \"order\",\n goal: \"goal\",\n objective: \"objective\",\n value: \"value\",\n impact: \"impact\",\n outcome: \"outcome\",\n whyNow: \"why_now\",\n assignee: \"assignee\",\n parent: \"parent\",\n reviewer: \"reviewer\",\n risk: \"risk\",\n confidence: \"confidence\",\n sprint: \"sprint\",\n release: \"release\",\n blockedBy: \"blocked_by\",\n blockedReason: \"blocked_reason\",\n unblockNote: \"unblock_note\",\n reporter: \"reporter\",\n severity: \"severity\",\n environment: \"environment\",\n reproSteps: \"repro_steps\",\n resolution: \"resolution\",\n expectedResult: \"expected_result\",\n actualResult: \"actual_result\",\n affectedVersion: \"affected_version\",\n fixedVersion: \"fixed_version\",\n component: \"component\",\n regression: \"regression\",\n customerImpact: \"customer_impact\",\n};\n\ninterface CollectionMutationPlanDefinition {\n field: string;\n addKey: keyof UpdateCommandOptions;\n removeKey?: keyof UpdateCommandOptions;\n clearKey: keyof UpdateCommandOptions;\n replaceKey?: keyof UpdateCommandOptions;\n}\n\nconst COLLECTION_MUTATION_PLAN_DEFINITIONS: CollectionMutationPlanDefinition[] =\n [\n {\n field: \"dependencies\",\n addKey: \"dep\",\n removeKey: \"depRemove\",\n clearKey: \"clearDeps\",\n replaceKey: \"replaceDeps\",\n },\n {\n field: \"comments\",\n addKey: \"comment\",\n clearKey: \"clearComments\",\n },\n {\n field: \"notes\",\n addKey: \"note\",\n clearKey: \"clearNotes\",\n },\n {\n field: \"learnings\",\n addKey: \"learning\",\n clearKey: \"clearLearnings\",\n },\n {\n field: \"files\",\n addKey: \"file\",\n clearKey: \"clearFiles\",\n },\n {\n field: \"tests\",\n addKey: \"test\",\n clearKey: \"clearTests\",\n replaceKey: \"replaceTests\",\n },\n {\n field: \"docs\",\n addKey: \"doc\",\n clearKey: \"clearDocs\",\n },\n {\n field: \"reminders\",\n addKey: \"reminder\",\n clearKey: \"clearReminders\",\n },\n {\n field: \"events\",\n addKey: \"event\",\n clearKey: \"clearEvents\",\n },\n {\n field: \"type_options\",\n addKey: \"typeOption\",\n clearKey: \"clearTypeOptions\",\n },\n ];\n\nconst UNSET_FIELD_ALIASES: Record<string, string> = {\n close_reason: \"close_reason\",\n \"close-reason\": \"close_reason\",\n deadline: \"deadline\",\n estimate: \"estimated_minutes\",\n estimated_minutes: \"estimated_minutes\",\n \"estimated-minutes\": \"estimated_minutes\",\n acceptance_criteria: \"acceptance_criteria\",\n \"acceptance-criteria\": \"acceptance_criteria\",\n ac: \"acceptance_criteria\",\n definition_of_ready: \"definition_of_ready\",\n \"definition-of-ready\": \"definition_of_ready\",\n order: \"order\",\n rank: \"order\",\n goal: \"goal\",\n objective: \"objective\",\n value: \"value\",\n impact: \"impact\",\n outcome: \"outcome\",\n why_now: \"why_now\",\n \"why-now\": \"why_now\",\n assignee: \"assignee\",\n parent: \"parent\",\n reviewer: \"reviewer\",\n risk: \"risk\",\n confidence: \"confidence\",\n sprint: \"sprint\",\n release: \"release\",\n blocked_by: \"blocked_by\",\n \"blocked-by\": \"blocked_by\",\n blocked_reason: \"blocked_reason\",\n \"blocked-reason\": \"blocked_reason\",\n unblock_note: \"unblock_note\",\n \"unblock-note\": \"unblock_note\",\n reporter: \"reporter\",\n severity: \"severity\",\n environment: \"environment\",\n repro_steps: \"repro_steps\",\n \"repro-steps\": \"repro_steps\",\n resolution: \"resolution\",\n expected_result: \"expected_result\",\n \"expected-result\": \"expected_result\",\n actual_result: \"actual_result\",\n \"actual-result\": \"actual_result\",\n affected_version: \"affected_version\",\n \"affected-version\": \"affected_version\",\n fixed_version: \"fixed_version\",\n \"fixed-version\": \"fixed_version\",\n component: \"component\",\n regression: \"regression\",\n customer_impact: \"customer_impact\",\n \"customer-impact\": \"customer_impact\",\n type_options: \"type_options\",\n \"type-options\": \"type_options\",\n tags: \"tags\",\n};\n\ninterface UpdateManyCheckpoint {\n schema_version: number;\n id: string;\n created_at: string;\n author: string;\n status_filter: string | null;\n list_filters: Record<string, unknown>;\n update_options: Record<string, unknown>;\n items: MutationCheckpointItem[];\n}\n\n/** Documents the update many command options payload exchanged by command, SDK, and package integrations. */\nexport interface UpdateManyCommandOptions {\n /** Lifecycle state reported for status. */\n status?: string;\n /** Value that configures or reports list for this contract. */\n list: ListOptions;\n /** Value that configures or reports update for this contract. */\n update: UpdateCommandOptions;\n /** Value that configures or reports dry run for this contract. */\n dryRun?: boolean;\n /** Value that configures or reports rollback for this contract. */\n rollback?: string;\n /** Value that configures or reports checkpoint for this contract. */\n checkpoint?: boolean;\n}\n\ninterface PlannedChange {\n field: string;\n before: unknown;\n after: unknown;\n}\n\ninterface PlannedItemDiff {\n id: string;\n changes: PlannedChange[];\n}\n\ninterface UpdateManyApplyResultRow {\n id: string;\n status: \"updated\" | \"failed\" | \"skipped\";\n changed_fields?: string[];\n warnings?: string[];\n error?: string;\n}\n\ninterface UpdateManyRollbackResultRow {\n id: string;\n status: \"restored\" | \"failed\";\n changed_fields?: string[];\n warnings?: string[];\n error?: string;\n}\n\n/** Documents the update many result payload exchanged by command, SDK, and package integrations. */\nexport interface UpdateManyResult {\n /** Value that configures or reports mode for this contract. */\n mode: \"dry_run\" | \"apply\" | \"rollback\";\n /** Number of matched entries represented by this result. */\n matched_count: number;\n /** Value that configures or reports dry run for this contract. */\n dry_run: boolean;\n /** Value that configures or reports filters for this contract. */\n filters?: Record<string, unknown>;\n /** Inputs that customize the planned update operation. */\n planned_update_options?: Record<string, unknown>;\n /** Value that configures or reports item plans for this contract. */\n item_plans?: PlannedItemDiff[];\n /** Value that configures or reports checkpoint for this contract. */\n checkpoint?: {\n id: string;\n created_at: string;\n path: string;\n rollback_command: string;\n };\n /** Number of updated entries represented by this result. */\n updated_count?: number;\n /** Number of skipped entries represented by this result. */\n skipped_count?: number;\n /** Number of failed entries represented by this result. */\n failed_count?: number;\n /** Number of restored entries represented by this result. */\n restored_count?: number;\n /** Value that configures or reports rollback checkpoint id for this contract. */\n rollback_checkpoint_id?: string;\n /** Value that configures or reports rows for this contract. */\n rows?: UpdateManyApplyResultRow[] | UpdateManyRollbackResultRow[];\n /** Value that configures or reports ids for this contract. */\n ids: string[];\n}\n\nfunction sanitizeUpdateOptionsForSummary(\n options: UpdateCommandOptions,\n): Record<string, unknown> {\n const summary: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(options) as Array<\n [keyof UpdateCommandOptions, unknown]\n >) {\n if (NON_MUTATION_UPDATE_OPTION_KEYS.has(key)) {\n continue;\n }\n if (value === undefined) {\n continue;\n }\n summary[key] = value;\n }\n return summary;\n}\n\nfunction hasAnyUpdateMutationInput(options: UpdateCommandOptions): boolean {\n return Object.keys(sanitizeUpdateOptionsForSummary(options)).length > 0;\n}\n\nfunction toComparablePreviewValue(\n optionKey: keyof UpdateCommandOptions,\n value: unknown,\n): unknown {\n if (value === undefined) {\n return undefined;\n }\n if (optionKey === \"priority\") {\n const parsed = Number(String(value).trim());\n return Number.isInteger(parsed) ? parsed : String(value).trim();\n }\n if (\n optionKey === \"estimatedMinutes\" ||\n optionKey === \"order\" ||\n optionKey === \"rank\"\n ) {\n const parsed = Number(String(value).trim());\n return Number.isFinite(parsed) ? parsed : String(value).trim();\n }\n if (optionKey === \"regression\") {\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n }\n if (typeof value === \"string\") {\n return value.trim();\n }\n return value;\n}\n\nfunction normalizeUnsetField(rawField: string): string {\n const normalized = rawField.trim().toLowerCase().replaceAll(\"-\", \"_\");\n return UNSET_FIELD_ALIASES[normalized] ?? normalized;\n}\n\nfunction areValuesEqual(left: unknown, right: unknown): boolean {\n return stableValueEquals(left, right);\n}\n\nfunction normalizeCollectionBeforeValue(\n field: string,\n value: unknown,\n): unknown {\n if (value !== undefined) {\n return value;\n }\n if (field === \"type_options\") {\n return {};\n }\n return [];\n}\n\nfunction collectionValueCount(field: string, value: unknown): number {\n if (Array.isArray(value)) {\n return value.length;\n }\n if (field === \"type_options\" && value && typeof value === \"object\") {\n return Object.keys(value as Record<string, unknown>).length;\n }\n return 0;\n}\n\nfunction buildCollectionMutationPlans(\n row: Record<string, unknown>,\n update: UpdateCommandOptions,\n): PlannedChange[] {\n const changes: PlannedChange[] = [];\n for (const definition of COLLECTION_MUTATION_PLAN_DEFINITIONS) {\n const addValues = update[definition.addKey];\n const removeValues = definition.removeKey\n ? update[definition.removeKey]\n : undefined;\n const addCount = Array.isArray(addValues) ? addValues.length : 0;\n const removeCount = Array.isArray(removeValues) ? removeValues.length : 0;\n const clear = update[definition.clearKey] === true;\n const replace = definition.replaceKey\n ? update[definition.replaceKey] === true\n : false;\n if (!clear && !replace && addCount === 0 && removeCount === 0) {\n continue;\n }\n\n const before = normalizeCollectionBeforeValue(\n definition.field,\n row[definition.field],\n );\n const beforeCount = collectionValueCount(definition.field, before);\n const operation = replace\n ? \"replace\"\n : clear\n ? \"clear_or_reset\"\n : removeCount > 0\n ? \"merge_remove\"\n : \"append\";\n changes.push({\n field: definition.field,\n before,\n after: {\n operation,\n clear,\n replace,\n add_count: addCount,\n remove_count: removeCount,\n before_count: beforeCount,\n },\n });\n }\n return changes;\n}\n\nfunction normalizeExistingTags(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter((tag): tag is string => typeof tag === \"string\");\n}\n\n// Tags support three mutation modes that compose: --tags replaces, --add-tags\n// extends, --remove-tags prunes. Replicate runUpdate's resolution order so the\n// dry-run preview and the apply-mode actionable detection both account for\n// additive/subtractive tag mutations (a --add-tags-only update must NOT be\n// treated as a no-op skip).\nfunction buildTagMutationPlan(\n row: Record<string, unknown>,\n update: UpdateCommandOptions,\n): PlannedChange | undefined {\n const hasReplace = update.tags !== undefined;\n const hasAdd = Array.isArray(update.addTags) && update.addTags.length > 0;\n const hasRemove =\n Array.isArray(update.removeTags) && update.removeTags.length > 0;\n if (!hasReplace && !hasAdd && !hasRemove) {\n return undefined;\n }\n const existing = normalizeExistingTags(row.tags);\n const baseTags = hasReplace ? parseTags(update.tags as string) : existing;\n const withAdditions = mergeAdditiveTags(baseTags, update.addTags);\n const after = applyTagRemovals(withAdditions, update.removeTags)\n .slice()\n .sort((a, b) => a.localeCompare(b));\n const before = existing.slice().sort((a, b) => a.localeCompare(b));\n if (areValuesEqual(before, after)) {\n return undefined;\n }\n return { field: \"tags\", before: existing, after };\n}\n\nfunction buildPlannedItemDiff(\n item: ListedItem,\n update: UpdateCommandOptions = {},\n runtimeFieldRegistry: RuntimeFieldRegistry,\n): PlannedItemDiff {\n const safeUpdate = update;\n const row = toItemRecord(item);\n const changes: PlannedChange[] = [];\n const tagPlan = buildTagMutationPlan(row, safeUpdate);\n if (tagPlan) {\n changes.push(tagPlan);\n }\n for (const [optionKey, itemKey] of Object.entries(\n UPDATE_OPTION_TO_ITEM_KEY,\n ) as Array<[keyof UpdateCommandOptions, string]>) {\n const candidate = safeUpdate[optionKey];\n if (candidate === undefined) {\n continue;\n }\n const before = row[itemKey];\n const after = toComparablePreviewValue(optionKey, candidate);\n if (areValuesEqual(before, after)) {\n continue;\n }\n changes.push({\n field: itemKey,\n before,\n after,\n });\n }\n changes.push(...buildCollectionMutationPlans(row, safeUpdate));\n\n const runtimeFieldUpdates = collectRuntimeUpdateFieldValues(\n safeUpdate as Record<string, unknown>,\n runtimeFieldRegistry,\n [\"update_many\"],\n );\n for (const [fieldKey, fieldValue] of Object.entries(runtimeFieldUpdates)) {\n const before = row[fieldKey];\n if (areValuesEqual(before, fieldValue)) {\n continue;\n }\n changes.push({\n field: fieldKey,\n before,\n after: fieldValue,\n });\n }\n\n if (safeUpdate.unset && safeUpdate.unset.length > 0) {\n for (const rawUnsetField of safeUpdate.unset) {\n const field = normalizeUnsetField(rawUnsetField);\n const before = row[field];\n if (before === undefined) {\n continue;\n }\n changes.push({\n field,\n before,\n after: null,\n });\n }\n }\n\n return {\n id: item.id,\n changes,\n };\n}\n\nfunction normalizeStatusFilter(\n value: string | undefined,\n statusRegistry: RuntimeStatusRegistry,\n): ItemStatus | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = normalizeStatusInput(value, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map(\n (definition) => definition.id,\n );\n throw new PmCliError(\n `Invalid --filter-status value \"${value}\". Allowed: ${allowedStatuses.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n}\n\nfunction rejectBlankIdsFilter(list: ListOptions | undefined): void {\n if (list?.ids != null && String(list.ids).trim().length === 0) {\n throw new PmCliError(\n \"--ids requires at least one non-empty item ID\",\n EXIT_CODE.USAGE,\n );\n }\n}\n\n// GH-256: validate planned scalar enum/format fields up front so a `--dry-run`\n// preview rejects globally-invalid values exactly as apply would (true\n// preview==apply parity), and so apply itself fails fast before creating an\n// orphan checkpoint. Only VALUE/ENUM/FORMAT correctness is checked here — these\n// are invalid regardless of the matched item. Per-item governance and\n// workflow-transition rules stay in the apply path (runUpdate). Each field is\n// validated only when the caller actually provided it, reusing the exact same\n// resolvers and error messages runUpdate raises so single/bulk/dry-run stay\n// consistent.\nfunction assertPlannedUpdateValuesValid(\n update: UpdateCommandOptions,\n settings: PmSettings,\n statusRegistry: RuntimeStatusRegistry,\n pmRoot: string,\n): void {\n if (update.priority !== undefined) {\n resolvePriority(update.priority);\n }\n if (update.type !== undefined) {\n const typeRegistry = resolveItemTypeRegistry(\n settings,\n getActiveExtensionRegistrations(),\n );\n if (!resolveTypeName(update.type, typeRegistry)) {\n throw new PmCliError(\n buildInvalidTypeError(\n update.type,\n typeRegistry.types,\n resolveItemTypesFilePath(pmRoot, settings.schema),\n ),\n EXIT_CODE.USAGE,\n );\n }\n }\n if (\n update.status !== undefined &&\n !normalizeStatusInput(update.status, statusRegistry)\n ) {\n const allowedStatuses = statusRegistry.definitions.map(\n (definition) => definition.id,\n );\n throw new PmCliError(\n `Invalid --status value \"${update.status}\". Allowed: ${allowedStatuses.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n if (update.deadline !== undefined) {\n resolveIsoOrRelative(update.deadline, new Date(), \"deadline\");\n }\n if (update.estimatedMinutes !== undefined) {\n parseOptionalNonNegativeInteger(\n update.estimatedMinutes,\n \"estimated-minutes\",\n );\n }\n}\n\nasync function runUpdateManyRollback(params: {\n pmRoot: string;\n rollbackId: string;\n options: UpdateManyCommandOptions;\n global: GlobalOptions;\n}): Promise<UpdateManyResult> {\n const checkpoint = await loadMutationCheckpoint(\n params.pmRoot,\n UPDATE_MANY_CHECKPOINT_SUBDIR,\n params.rollbackId,\n UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION,\n );\n const restoreMessage =\n params.options.update?.message ??\n `Rollback update-many checkpoint ${checkpoint.id}`;\n const rollback = await restoreCheckpointItems(\n checkpoint.items,\n (id, targetUpdatedAt) =>\n runRestore(\n id,\n targetUpdatedAt,\n {\n author: params.options.update?.author,\n message: restoreMessage,\n force: params.options.update?.force ?? true,\n },\n params.global,\n ),\n );\n return {\n mode: \"rollback\",\n matched_count: checkpoint.items.length,\n dry_run: false,\n rollback_checkpoint_id: checkpoint.id,\n checkpoint: {\n id: checkpoint.id,\n created_at: checkpoint.created_at,\n path: checkpoint.path,\n rollback_command: `pm update-many --rollback ${checkpoint.id}`,\n },\n restored_count: rollback.restored_ids.length,\n failed_count: rollback.failed_count,\n rows: rollback.rows,\n ids: rollback.restored_ids,\n };\n}\n\nasync function writeUpdateManyCheckpoint(params: {\n pmRoot: string;\n checkpointId: string;\n nowValue: string;\n options: UpdateManyCommandOptions;\n statusFilter: string | undefined;\n filters: Record<string, unknown>;\n updateSummary: Record<string, unknown>;\n checkpointItems: MutationCheckpointItem[];\n}): Promise<UpdateManyResult[\"checkpoint\"]> {\n const checkpointPayload: UpdateManyCheckpoint = {\n schema_version: UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION,\n id: params.checkpointId,\n created_at: params.nowValue,\n author: resolveAuthor(params.options.update?.author, \"unknown\"),\n status_filter: params.statusFilter ?? null,\n list_filters: params.filters,\n update_options: params.updateSummary,\n items: params.checkpointItems,\n };\n const checkpointPath = await writeMutationCheckpoint(\n params.pmRoot,\n UPDATE_MANY_CHECKPOINT_SUBDIR,\n params.checkpointId,\n checkpointPayload,\n );\n return {\n id: params.checkpointId,\n created_at: params.nowValue,\n path: checkpointPath,\n rollback_command: `pm update-many --rollback ${params.checkpointId}`,\n };\n}\n\n/** Implements run update many for the public runtime surface of this module. */\nexport async function runUpdateMany(\n options: UpdateManyCommandOptions,\n global: GlobalOptions,\n): Promise<UpdateManyResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(\n `Tracker is not initialized at ${pmRoot}. Run pm init first.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n\n const dryRun = options.dryRun === true;\n const rollbackId =\n typeof options.rollback === \"string\" ? options.rollback : undefined;\n const updateSummary = sanitizeUpdateOptionsForSummary(options.update);\n rejectBlankIdsFilter(options.list);\n\n if (rollbackId) {\n if (dryRun) {\n throw new PmCliError(\n \"--dry-run cannot be combined with --rollback\",\n EXIT_CODE.USAGE,\n );\n }\n if (hasListFilters(options.list, options.status)) {\n throw new PmCliError(\n \"Rollback mode does not accept filter options\",\n EXIT_CODE.USAGE,\n );\n }\n if (Object.keys(updateSummary).length > 0) {\n throw new PmCliError(\n \"Rollback mode does not accept update mutation flags\",\n EXIT_CODE.USAGE,\n );\n }\n return runUpdateManyRollback({ pmRoot, rollbackId, options, global });\n }\n\n if (!hasAnyUpdateMutationInput(options.update)) {\n throw new PmCliError(\n `No update-many mutation flags provided. Add at least one mutation flag (for example: ${UPDATE_MANY_MUTATION_FLAG_GUIDANCE}).`,\n EXIT_CODE.USAGE,\n );\n }\n\n // GH-256: validate planned scalar values before listing/checkpointing so\n // dry-run previews and apply both reject globally-invalid enum/format input.\n assertPlannedUpdateValuesValid(\n options.update,\n settings,\n statusRegistry,\n pmRoot,\n );\n\n const statusFilter = normalizeStatusFilter(options.status, statusRegistry);\n const listed = await runList(\n statusFilter,\n { ...options.list, includeBody: true },\n global,\n );\n const planned = listed.items.map((item) =>\n buildPlannedItemDiff(item, options.update, runtimeFieldRegistry),\n );\n const actionable = planned.filter((row) => row.changes.length > 0);\n if (dryRun) {\n return {\n mode: \"dry_run\",\n matched_count: listed.items.length,\n dry_run: true,\n filters: listed.filters,\n planned_update_options: updateSummary,\n item_plans: planned,\n ids: [],\n };\n }\n\n if (actionable.length === 0) {\n return {\n mode: \"apply\",\n matched_count: listed.items.length,\n dry_run: false,\n filters: listed.filters,\n planned_update_options: updateSummary,\n updated_count: 0,\n skipped_count: listed.items.length,\n failed_count: 0,\n rows: planned.map((row) => ({\n id: row.id,\n status: \"skipped\" as const,\n })),\n ids: [],\n };\n }\n\n const nowValue = nowIso();\n const checkpointId = createCheckpointId(\n UPDATE_MANY_CHECKPOINT_SUBDIR,\n nowValue,\n );\n const checkpointEnabled = options.checkpoint !== false;\n const checkpointItems: MutationCheckpointItem[] = listed.items\n .filter((item) => actionable.some((candidate) => candidate.id === item.id))\n .map((item) => ({\n id: item.id,\n target_updated_at: item.updated_at,\n }));\n\n let checkpointInfo: UpdateManyResult[\"checkpoint\"] | undefined;\n if (checkpointEnabled) {\n checkpointInfo = await writeUpdateManyCheckpoint({\n pmRoot,\n checkpointId,\n nowValue,\n options,\n statusFilter,\n filters: listed.filters,\n updateSummary,\n checkpointItems,\n });\n }\n\n const applyRows: UpdateManyApplyResultRow[] = [];\n const updatedIds: string[] = [];\n const updateMessage =\n options.update.message ?? `update-many apply ${checkpointId}`;\n const actionableById = new Set(actionable.map((row) => row.id));\n for (const item of listed.items) {\n if (!actionableById.has(item.id)) {\n applyRows.push({ id: item.id, status: \"skipped\" });\n continue;\n }\n try {\n const result = await runUpdate(\n item.id,\n {\n ...options.update,\n message: updateMessage,\n runtimeFieldCommands: [\"update_many\"],\n },\n global,\n );\n applyRows.push({\n id: item.id,\n status: \"updated\",\n changed_fields: result.changed_fields,\n warnings: result.warnings,\n });\n updatedIds.push(item.id);\n } catch (error: unknown) {\n applyRows.push({\n id: item.id,\n status: \"failed\",\n error: toErrorMessage(error),\n });\n }\n }\n\n const updatedCount = applyRows.filter(\n (row) => row.status === \"updated\",\n ).length;\n const skippedCount = applyRows.filter(\n (row) => row.status === \"skipped\",\n ).length;\n const failedCount = applyRows.filter((row) => row.status === \"failed\").length;\n\n return {\n mode: \"apply\",\n matched_count: listed.items.length,\n dry_run: false,\n filters: listed.filters,\n planned_update_options: updateSummary,\n ...(checkpointInfo ? { checkpoint: checkpointInfo } : {}),\n updated_count: updatedCount,\n skipped_count: skippedCount,\n failed_count: failedCount,\n rows: applyRows,\n ids: updatedIds,\n };\n}\n\n/** Public contract for test only update many command, shared by SDK and presentation-layer consumers. */\nexport const _testOnlyUpdateManyCommand = {\n assertPlannedUpdateValuesValid,\n buildCollectionMutationPlans,\n buildPlannedItemDiff,\n buildTagMutationPlan,\n collectionValueCount,\n hasAnyUpdateMutationInput,\n hasListFilters,\n normalizeStatusFilter,\n normalizeCollectionBeforeValue,\n normalizeExistingTags,\n normalizeUnsetField,\n rejectBlankIdsFilter,\n sanitizeUpdateOptionsForSummary,\n toComparablePreviewValue,\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["global"]
7
+ }
@@ -14,7 +14,7 @@ import {
14
14
  recordAfterCommandAffectedItem,
15
15
  runActiveOnWriteHooks,
16
16
  serializeItemDocument
17
- } from "./chunk-QXYKH56X.js";
17
+ } from "./chunk-T4BRCB6Z.js";
18
18
  import {
19
19
  EXIT_CODE,
20
20
  ITEM_METADATA_KEY_ORDER,
@@ -29,7 +29,7 @@ import {
29
29
  resolvePmRoot,
30
30
  resolveRuntimeStatusRegistry,
31
31
  writeFileAtomic
32
- } from "./chunk-XY3CC3EM.js";
32
+ } from "./chunk-AFWZRL7M.js";
33
33
 
34
34
  // dist/cli/commands/copy.js
35
35
  !(function() {
@@ -177,4 +177,4 @@ async function runCopy(sourceId, options, global2) {
177
177
  export {
178
178
  runCopy
179
179
  };
180
- //# sourceMappingURL=chunk-GAJ7U7B4.js.map
180
+ //# sourceMappingURL=chunk-ERL2YFJ2.js.map
@@ -5,10 +5,10 @@ import {
5
5
  runActiveRendererOverride,
6
6
  runActiveServiceOverrideSync,
7
7
  setActiveCommandResult
8
- } from "./chunk-TNGLCRKS.js";
8
+ } from "./chunk-GSEADLRH.js";
9
9
  import {
10
10
  EXIT_CODE
11
- } from "./chunk-TGG7YGMC.js";
11
+ } from "./chunk-GXXC7QSK.js";
12
12
 
13
13
  // dist/core/output/mutation-projection.js
14
14
  var CHANGED_FIELDS_KEY = "changed_fields";
@@ -356,6 +356,6 @@ export {
356
356
  printResult,
357
357
  printError
358
358
  };
359
- //# sourceMappingURL=chunk-FPEYOFEF.js.map
359
+ //# sourceMappingURL=chunk-F7PSHRNO.js.map
360
360
 
361
361
  //# debugId=346ad418-c2a4-5490-b54b-15e643b443b8
@@ -2,7 +2,7 @@ import {
2
2
  parseAnnotationTextInput,
3
3
  resolveAnnotationInput,
4
4
  runAnnotationCommand
5
- } from "./chunk-DZRZMBBF.js";
5
+ } from "./chunk-VJTAEIPC.js";
6
6
 
7
7
  // dist/cli/commands/learnings.js
8
8
  !(function() {
@@ -35,4 +35,4 @@ async function runLearnings(id, options, global2) {
35
35
  export {
36
36
  runLearnings
37
37
  };
38
- //# sourceMappingURL=chunk-UH7OLT6F.js.map
38
+ //# sourceMappingURL=chunk-FDSBDNYE.js.map
@@ -1,6 +1,3 @@
1
- import {
2
- isRemoteLinkedArtifactReference
3
- } from "./chunk-CCAGZCZK.js";
4
1
  import {
5
2
  resolveAuthor
6
3
  } from "./chunk-YRYYFGV3.js";
@@ -9,7 +6,7 @@ import {
9
6
  createStdinTokenResolver,
10
7
  looksLikeGenericKeyValueEntry,
11
8
  parseCsvKv
12
- } from "./chunk-HR2MQAO5.js";
9
+ } from "./chunk-WD6MSYMP.js";
13
10
  import {
14
11
  splitCommaList
15
12
  } from "./chunk-D6HZN36B.js";
@@ -19,7 +16,7 @@ import {
19
16
  mutateItem,
20
17
  readLocatedItem,
21
18
  readSettings
22
- } from "./chunk-QXYKH56X.js";
19
+ } from "./chunk-T4BRCB6Z.js";
23
20
  import {
24
21
  EXIT_CODE,
25
22
  PmCliError,
@@ -27,17 +24,33 @@ import {
27
24
  getSettingsPath,
28
25
  pathExists,
29
26
  resolveItemTypeRegistry,
30
- resolvePmRoot
31
- } from "./chunk-XY3CC3EM.js";
27
+ resolvePmRoot,
28
+ resolveWorkspaceRoot
29
+ } from "./chunk-AFWZRL7M.js";
32
30
 
33
- // dist/cli/commands/linked-artifacts.js
31
+ // dist/sdk/linked-artifacts.js
34
32
  import fs from "node:fs/promises";
35
33
  import path from "node:path";
36
34
  import fg from "fast-glob";
35
+
36
+ // dist/core/validate/linked-artifact-reference.js
37
37
  !(function() {
38
38
  try {
39
39
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
40
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "9a1727bc-f5d7-59f4-82e1-96af39fe11d2");
40
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "410cbb40-6054-5dfa-88ee-4a425c0dbb56");
41
+ } catch (e2) {
42
+ }
43
+ })();
44
+ var REMOTE_ARTIFACT_REFERENCE_PATTERN = /^[a-z][a-z0-9+.-]+:\/\//i;
45
+ function isRemoteLinkedArtifactReference(path2) {
46
+ return REMOTE_ARTIFACT_REFERENCE_PATTERN.test(path2.trim());
47
+ }
48
+
49
+ // dist/sdk/linked-artifacts.js
50
+ !(function() {
51
+ try {
52
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
53
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "839f67ed-2046-53b0-ba73-39d48038f2c9");
41
54
  } catch (e2) {
42
55
  }
43
56
  })();
@@ -173,12 +186,26 @@ function applyPathMigrations(artifactPath, migrations) {
173
186
  function normalizeLinkedPath(value) {
174
187
  return value.split(path.sep).join("/");
175
188
  }
176
- async function expandAddGlobEntries(entries) {
189
+ function anchorLinkedPath(value, workspaceRoot, invocationRoot = process.cwd()) {
190
+ const trimmed = value.trim();
191
+ if (isRemoteLinkedArtifactReference(trimmed)) {
192
+ return trimmed;
193
+ }
194
+ if (path.isAbsolute(trimmed) || /^[A-Za-z]:[\\/]/.test(trimmed)) {
195
+ return normalizeLinkedPath(trimmed.replaceAll("\\", path.sep));
196
+ }
197
+ const invocationRelativeToWorkspace = path.relative(workspaceRoot, invocationRoot);
198
+ if (invocationRelativeToWorkspace.startsWith(`..${path.sep}`) || invocationRelativeToWorkspace === ".." || path.isAbsolute(invocationRelativeToWorkspace)) {
199
+ return normalizeLinkedPath(path.normalize(trimmed));
200
+ }
201
+ return normalizeLinkedPath(path.relative(workspaceRoot, path.resolve(invocationRoot, trimmed)));
202
+ }
203
+ async function expandAddGlobEntries(entries, workspaceRoot = process.cwd(), invocationRoot = process.cwd()) {
177
204
  const expanded = [];
178
205
  for (const entry of entries) {
179
206
  const absolutePattern = path.isAbsolute(entry.pattern);
180
207
  const matches = await fg(entry.pattern, {
181
- cwd: process.cwd(),
208
+ cwd: invocationRoot,
182
209
  absolute: absolutePattern,
183
210
  onlyFiles: true,
184
211
  dot: true,
@@ -186,7 +213,7 @@ async function expandAddGlobEntries(entries) {
186
213
  followSymbolicLinks: true
187
214
  });
188
215
  const sortedMatches = [
189
- ...new Set(matches.map((match) => normalizeLinkedPath(path.normalize(match))))
216
+ ...new Set(matches.map((match) => anchorLinkedPath(match, workspaceRoot, invocationRoot)))
190
217
  ].sort((left, right) => left.localeCompare(right));
191
218
  for (const matchedPath of sortedMatches) {
192
219
  expanded.push({
@@ -230,7 +257,7 @@ function dedupeLinkedArtifacts(artifacts) {
230
257
  note: entry.note?.trim() || void 0
231
258
  }));
232
259
  }
233
- async function validateLinkedPaths(paths) {
260
+ async function validateLinkedPaths(paths, workspaceRoot = process.cwd()) {
234
261
  const uniquePaths = [...new Set(paths)].sort((left, right) => left.localeCompare(right));
235
262
  const existingFiles = [];
236
263
  const missingPaths = [];
@@ -241,7 +268,7 @@ async function validateLinkedPaths(paths) {
241
268
  remoteReferences.push(relativePath.trim());
242
269
  continue;
243
270
  }
244
- const resolvedPath = path.isAbsolute(relativePath) ? relativePath : path.resolve(process.cwd(), relativePath);
271
+ const resolvedPath = path.isAbsolute(relativePath) ? relativePath : path.resolve(workspaceRoot, relativePath);
245
272
  try {
246
273
  const stats = await fs.stat(resolvedPath);
247
274
  if (stats.isFile()) {
@@ -309,13 +336,15 @@ async function buildLinkedArtifactResult(params) {
309
336
  changed: params.changed,
310
337
  count: params.artifacts.length,
311
338
  migrations_applied: params.migrationsApplied && params.migrationsApplied > 0 ? params.migrationsApplied : void 0,
312
- validation: params.options.validatePaths ? await validateLinkedPaths(paths) : void 0
339
+ validation: params.options.validatePaths ? await validateLinkedPaths(paths, params.workspaceRoot) : void 0
313
340
  };
314
341
  }
315
342
  async function runLinkedArtifacts(id, options, global2, config) {
316
343
  const { metadataKey } = config;
317
344
  const stdinResolver = createStdinTokenResolver();
318
345
  const pmRoot = resolvePmRoot(process.cwd(), global2.path);
346
+ const workspaceRoot = resolveWorkspaceRoot(pmRoot);
347
+ const invocationRoot = process.cwd();
319
348
  if (!await pathExists(getSettingsPath(pmRoot))) {
320
349
  throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
321
350
  }
@@ -325,11 +354,14 @@ async function runLinkedArtifacts(id, options, global2, config) {
325
354
  const resolvedAddGlobs = await stdinResolver.resolveList(options.addGlob, "--add-glob");
326
355
  const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
327
356
  const resolvedMigrations = await stdinResolver.resolveList(options.migrate, "--migrate");
328
- const parsedAdds = parseAddEntries(resolvedAdds, config.bareNoun);
357
+ const parsedAdds = parseAddEntries(resolvedAdds, config.bareNoun).map((entry) => ({
358
+ ...entry,
359
+ path: anchorLinkedPath(entry.path, workspaceRoot, invocationRoot)
360
+ }));
329
361
  const addGlobs = parseAddGlobEntries(resolvedAddGlobs);
330
- const expandedGlobAdds = await expandAddGlobEntries(addGlobs);
362
+ const expandedGlobAdds = await expandAddGlobEntries(addGlobs, workspaceRoot, invocationRoot);
331
363
  const adds = applyStandaloneNote([...parsedAdds, ...expandedGlobAdds], options.note, parsedAdds.length > 0 || addGlobs.length > 0);
332
- const removes = parseRemoveEntries(resolvedRemoves);
364
+ const removes = parseRemoveEntries(resolvedRemoves).map((entry) => anchorLinkedPath(entry, workspaceRoot, invocationRoot));
333
365
  const migrations = parseMigrateEntries(resolvedMigrations);
334
366
  const shouldMutate = adds.length > 0 || removes.length > 0 || migrations.length > 0;
335
367
  if (!shouldMutate) {
@@ -343,7 +375,8 @@ async function runLinkedArtifacts(id, options, global2, config) {
343
375
  id: located.id,
344
376
  artifacts: artifacts2,
345
377
  changed: false,
346
- options
378
+ options,
379
+ workspaceRoot
347
380
  });
348
381
  }
349
382
  const author = resolveAuthor(options.author, settings.author_default);
@@ -381,7 +414,8 @@ async function runLinkedArtifacts(id, options, global2, config) {
381
414
  artifacts,
382
415
  changed: true,
383
416
  migrationsApplied: migrationCount,
384
- options
417
+ options,
418
+ workspaceRoot
385
419
  });
386
420
  }
387
421
  function renameArtifactsResultKey(result, key) {
@@ -393,10 +427,21 @@ function renameArtifactsResultKey(result, key) {
393
427
  }
394
428
 
395
429
  export {
430
+ isRemoteLinkedArtifactReference,
431
+ ensureScope,
432
+ parseAddEntries,
433
+ parseAddGlobEntries,
434
+ parseRemoveEntries,
435
+ parseMigrateEntries,
436
+ applyPathMigrations,
396
437
  normalizeLinkedPath,
438
+ expandAddGlobEntries,
439
+ applyStandaloneNote,
440
+ artifactKey,
397
441
  sortLinkedArtifacts,
398
442
  dedupeLinkedArtifacts,
443
+ validateLinkedPaths,
399
444
  runLinkedArtifacts,
400
445
  renameArtifactsResultKey
401
446
  };
402
- //# sourceMappingURL=chunk-DGJF32JF.js.map
447
+ //# sourceMappingURL=chunk-FIGXOCEQ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../sdk/linked-artifacts.ts", "../../../../../../../../core/validate/linked-artifact-reference.ts"],
4
+ "sourcesContent": ["/**\n * @module sdk/linked-artifacts\n *\n * Implements the pm linked artifacts command surface and its agent-facing runtime behavior.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport fg from \"fast-glob\";\nimport { pathExists } from \"../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../core/extensions/index.js\";\nimport {\n assertNoUnknownCsvKeys,\n createStdinTokenResolver,\n looksLikeGenericKeyValueEntry,\n parseCsvKv,\n} from \"../core/item/parse.js\";\nimport { resolveItemTypeRegistry } from \"../core/item/type-registry.js\";\nimport { isRemoteLinkedArtifactReference } from \"../core/validate/linked-artifact-reference.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 {\n locateItem,\n mutateItem,\n readLocatedItem,\n} from \"../core/store/item-store.js\";\nimport {\n getSettingsPath,\n resolvePmRoot,\n resolveWorkspaceRoot,\n} from \"../core/store/paths.js\";\nimport { readSettings } from \"../core/store/settings.js\";\nimport { SCOPE_VALUES } from \"../types/index.js\";\nimport { resolveAuthor } from \"../core/shared/author.js\";\nimport type { LinkScope } from \"../types/index.js\";\n\n/** Restricts linked artifact values accepted by command, SDK, and storage contracts. */\nexport type LinkedArtifact = {\n /** Filesystem path used for path resolution. */\n path: string;\n /** Value that configures or reports scope for this contract. */\n scope: LinkScope;\n /** Value that configures or reports note for this contract. */\n note?: string;\n};\n\n/** Allowed CSV/markdown keys for each structured linked-artifact option (GH-258). */\nexport const LINKED_ARTIFACT_ADD_KEYS = [\"path\", \"scope\", \"note\"] as const;\n/** Public contract for linked artifact add glob keys, shared by SDK and presentation-layer consumers. */\nexport const LINKED_ARTIFACT_ADD_GLOB_KEYS = [\n \"pattern\",\n \"glob\",\n \"path\",\n \"scope\",\n \"note\",\n] as const;\n/** Public contract for linked artifact remove keys, shared by SDK and presentation-layer consumers. */\nexport const LINKED_ARTIFACT_REMOVE_KEYS = [\"path\"] as const;\n/** Public contract for linked artifact migrate keys, shared by SDK and presentation-layer consumers. */\nexport const LINKED_ARTIFACT_MIGRATE_KEYS = [\"from\", \"to\"] as const;\n/** Keys that are valid on --add but meaningless on --remove (GH-277). Rejected with audit-trail guidance (--message) rather than the generic unknown-key error so agents are not left believing a removal note was recorded. */\nconst LINKED_ARTIFACT_REMOVE_UNSUPPORTED_KEYS: ReadonlySet<string> = new Set([\n \"note\",\n \"scope\",\n]);\n\n/** Documents the linked artifact command options payload exchanged by command, SDK, and package integrations. */\nexport interface LinkedArtifactCommandOptions {\n /** Value that configures or reports add for this contract. */\n add?: string[];\n /** Value that configures or reports add glob for this contract. */\n addGlob?: string[];\n /** Value that configures or reports remove for this contract. */\n remove?: string[];\n /** Value that configures or reports migrate for this contract. */\n migrate?: string[];\n /** GH-170 (pm-pfnx): standalone note applied to every link added by --add / --add-glob in the same invocation. A per-entry embedded note (the `path=...,note=...` pair syntax) takes precedence over this flag. Requires at least one --add/--add-glob; rejected otherwise. */\n note?: string;\n /** Value that configures or reports list for this contract. */\n list?: boolean;\n /** Value that configures or reports append stable for this contract. */\n appendStable?: boolean;\n /** Value that configures or reports validate paths for this contract. */\n validatePaths?: boolean;\n /** Value that configures or reports author for this contract. */\n author?: string;\n /** Human-readable explanation suitable for logs and agent-facing output. */\n message?: string;\n /** Value that configures or reports force for this contract. */\n force?: boolean;\n}\n\n/** Documents the path migration payload exchanged by command, SDK, and package integrations. */\nexport interface PathMigration {\n /** Value that configures or reports from for this contract. */\n from: string;\n /** Value that configures or reports to for this contract. */\n to: string;\n}\n\n/** Documents the add glob entry payload exchanged by command, SDK, and package integrations. */\nexport interface AddGlobEntry {\n /** Value that configures or reports pattern for this contract. */\n pattern: string;\n /** Value that configures or reports scope for this contract. */\n scope: LinkScope;\n /** Value that configures or reports note for this contract. */\n note?: string;\n}\n\n/** Documents the linked path validation payload exchanged by command, SDK, and package integrations. */\nexport interface LinkedPathValidation {\n /** Value that configures or reports checked for this contract. */\n checked: number;\n /** Value that configures or reports existing files for this contract. */\n existing_files: string[];\n /** Value that configures or reports missing paths for this contract. */\n missing_paths: string[];\n /** Value that configures or reports non file paths for this contract. */\n non_file_paths: string[];\n /** Remote references (https:// URLs and other `scheme://` paths) recorded as links — most often a PR/issue/design-doc URL added via `pm docs --add`. These are not local files, so they bypass the existence probe and are reported here rather than counted as missing. */\n remote_references: string[];\n}\n\n/** Documents the linked artifact result payload exchanged by command, SDK, and package integrations. */\nexport interface LinkedArtifactResult {\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Value that configures or reports changed for this contract. */\n changed: boolean;\n /** Value that configures or reports count for this contract. */\n count: number;\n /** Value that configures or reports migrations applied for this contract. */\n migrations_applied?: number;\n /** Value that configures or reports validation for this contract. */\n validation?: LinkedPathValidation;\n /** Value that configures or reports artifacts for this contract. */\n artifacts: LinkedArtifact[];\n}\n\n/** Replaces the generic artifacts field with a resource-specific result key while retaining the remaining result contract. */\nexport type RenamedLinkedArtifactResult<\n Result extends LinkedArtifactResult,\n Key extends \"files\" | \"docs\",\n> = Omit<Result, \"artifacts\"> & { [Field in Key]: Result[\"artifacts\"] };\n\n/** Configuration that adapts the shared linked-artifact command core to a specific resource kind (files or docs) while preserving every behavioral detail of the original twin implementations. */\nexport interface LinkedArtifactKindConfig {\n /** Metadata key under which the artifacts are stored (e.g. \"files\" | \"docs\"). */\n metadataKey: \"files\" | \"docs\";\n /** Mutation op recorded in history (e.g. \"files_add\" | \"docs_add\"). */\n op: \"files_add\" | \"docs_add\";\n /** Noun used in the \"bare <noun> path\" --add usage error (e.g. \"file\" | \"doc\"). */\n bareNoun: \"file\" | \"doc\";\n /** Whether this kind honors the append-stable option. files supports it; docs always sorts and must never expose append-stable behavior. */\n supportsAppendStable: boolean;\n}\n\n/** Implements ensure scope for the public runtime surface of this module. */\nexport function ensureScope(raw: string | undefined): LinkScope {\n const value = (raw ?? \"project\") as LinkScope;\n if (!SCOPE_VALUES.includes(value)) {\n throw new PmCliError(\n `Invalid scope \"${raw}\". Valid scopes: ${SCOPE_VALUES.join(\", \")} (default: project).`,\n EXIT_CODE.USAGE,\n );\n }\n return value;\n}\n\n/** Implements looks like structured path entry for the public runtime surface of this module. */\nexport function looksLikeStructuredPathEntry(raw: string): boolean {\n if (raw.startsWith(\"```\") || raw.includes(\"\\n\")) {\n return true;\n }\n if (/^(?:[-*+]\\s+)?(?:path|scope|note)\\s*[:=]/i.test(raw)) {\n return true;\n }\n // A first-key typo (e.g. `lable=main,path=…`) must still be parsed so the\n // unknown key is rejected rather than swallowed as a bare path (GH-258).\n return looksLikeGenericKeyValueEntry(raw);\n}\n\nfunction expandBareCommaSeparatedAddEntries(raw: string[]): string[] {\n return raw.flatMap((entry) => {\n const trimmed = entry.trim();\n if (\n trimmed.length === 0 ||\n looksLikeStructuredPathEntry(trimmed) ||\n !trimmed.includes(\",\")\n ) {\n return [entry];\n }\n return splitCommaList(trimmed);\n });\n}\n\n/** Implements parse add entries for the public runtime surface of this module. */\nexport function parseAddEntries(\n raw: string[] | undefined,\n bareNoun: \"file\" | \"doc\",\n): LinkedArtifact[] {\n if (!raw) return [];\n return expandBareCommaSeparatedAddEntries(raw).map((entry) => {\n const trimmed = entry.trim();\n const kv = looksLikeStructuredPathEntry(trimmed)\n ? parseCsvKv(entry, \"--add\")\n : { path: trimmed };\n assertNoUnknownCsvKeys(kv, \"--add\", LINKED_ARTIFACT_ADD_KEYS);\n if (!kv.path) {\n throw new PmCliError(\n `--add requires path=<value> or a bare ${bareNoun} path`,\n EXIT_CODE.USAGE,\n );\n }\n return {\n path: kv.path,\n scope: ensureScope(kv.scope),\n note: kv.note?.trim() || undefined,\n };\n });\n}\n\n/** Implements parse add glob entries for the public runtime surface of this module. */\nexport function parseAddGlobEntries(raw: string[] | undefined): AddGlobEntry[] {\n if (!raw) return [];\n return raw.map((entry) => {\n const trimmed = entry.trim();\n if (!trimmed) {\n throw new PmCliError(\n \"--add-glob requires a glob pattern value\",\n EXIT_CODE.USAGE,\n );\n }\n if (\n trimmed.includes(\"=\") ||\n /^(?:[-*+]\\s+)?(?:pattern|glob|path)\\s*[:=]/i.test(trimmed) ||\n trimmed.startsWith(\"```\")\n ) {\n const kv = parseCsvKv(trimmed, \"--add-glob\");\n assertNoUnknownCsvKeys(kv, \"--add-glob\", LINKED_ARTIFACT_ADD_GLOB_KEYS);\n const pattern = kv.pattern?.trim() || kv.glob?.trim() || kv.path?.trim();\n if (!pattern) {\n throw new PmCliError(\n \"--add-glob key/value form requires pattern=<glob>\",\n EXIT_CODE.USAGE,\n );\n }\n return {\n pattern,\n scope: ensureScope(kv.scope),\n note: kv.note?.trim() || undefined,\n };\n }\n return {\n pattern: trimmed,\n scope: \"project\",\n };\n });\n}\n\n/** Implements parse remove entries for the public runtime surface of this module. */\nexport function parseRemoveEntries(raw: string[] | undefined): string[] {\n if (!raw) return [];\n return raw.map((entry) => {\n const trimmed = entry.trim();\n if (!trimmed) {\n throw new PmCliError(\"--remove requires a path value\", EXIT_CODE.USAGE);\n }\n if (\n trimmed.includes(\"=\") ||\n /^(?:[-*+]\\s+)?path\\s*[:=]/i.test(trimmed) ||\n trimmed.startsWith(\"```\")\n ) {\n const kv = parseCsvKv(trimmed, \"--remove\");\n // GH-277: --remove identifies an existing link by path only; it does not\n // attach per-link metadata. Reject the --add-only keys with guidance toward\n // the audit-trail path (--message) rather than the generic \"unrecognized\n // key\" error, which left agents believing they had recorded a removal note.\n const unsupportedRemoveKeys = Object.keys(kv).filter((key) =>\n LINKED_ARTIFACT_REMOVE_UNSUPPORTED_KEYS.has(key.toLowerCase()),\n );\n if (unsupportedRemoveKeys.length > 0) {\n throw new PmCliError(\n `--remove identifies a linked artifact by path only and does not accept ${unsupportedRemoveKeys\n .map((key) => `\"${key}\"`)\n .join(\n \", \",\n )}. Pass just the path (path=<value>, path:<value>, or a bare path); record removal context with --message \"<why removed>\".`,\n EXIT_CODE.USAGE,\n );\n }\n assertNoUnknownCsvKeys(kv, \"--remove\", LINKED_ARTIFACT_REMOVE_KEYS);\n if (!kv.path) {\n throw new PmCliError(\n \"--remove key/value form requires path=<value>\",\n EXIT_CODE.USAGE,\n );\n }\n return kv.path;\n }\n return trimmed;\n });\n}\n\n/** Implements parse migrate entries for the public runtime surface of this module. */\nexport function parseMigrateEntries(\n raw: string[] | undefined,\n): PathMigration[] {\n if (!raw) return [];\n return raw.map((entry) => {\n const kv = parseCsvKv(entry, \"--migrate\");\n assertNoUnknownCsvKeys(kv, \"--migrate\", LINKED_ARTIFACT_MIGRATE_KEYS);\n const from = kv.from?.trim();\n const to = kv.to?.trim();\n if (!from || !to) {\n throw new PmCliError(\n \"--migrate requires from=<value> and to=<value>\",\n EXIT_CODE.USAGE,\n );\n }\n return { from, to };\n });\n}\n\n/** Implements apply path migrations for the public runtime surface of this module. */\nexport function applyPathMigrations(\n artifactPath: string,\n migrations: PathMigration[],\n): string {\n let next = artifactPath;\n for (const migration of migrations) {\n if (next.startsWith(migration.from)) {\n next = `${migration.to}${next.slice(migration.from.length)}`;\n }\n }\n return next;\n}\n\n/** Implements normalize linked path for the public runtime surface of this module. */\nexport function normalizeLinkedPath(value: string): string {\n return value.split(path.sep).join(\"/\");\n}\n\n/** Anchor a local linked path to the project workspace while preserving remote references and absolute paths. */\nexport function anchorLinkedPath(\n value: string,\n workspaceRoot: string,\n invocationRoot: string = process.cwd(),\n): string {\n const trimmed = value.trim();\n if (isRemoteLinkedArtifactReference(trimmed)) {\n return trimmed;\n }\n if (path.isAbsolute(trimmed) || /^[A-Za-z]:[\\\\/]/.test(trimmed)) {\n return normalizeLinkedPath(trimmed.replaceAll(\"\\\\\", path.sep));\n }\n const invocationRelativeToWorkspace = path.relative(\n workspaceRoot,\n invocationRoot,\n );\n if (\n invocationRelativeToWorkspace.startsWith(`..${path.sep}`) ||\n invocationRelativeToWorkspace === \"..\" ||\n path.isAbsolute(invocationRelativeToWorkspace)\n ) {\n return normalizeLinkedPath(path.normalize(trimmed));\n }\n return normalizeLinkedPath(\n path.relative(workspaceRoot, path.resolve(invocationRoot, trimmed)),\n );\n}\n\n/** Implements expand add glob entries for the public runtime surface of this module. */\nexport async function expandAddGlobEntries(\n entries: AddGlobEntry[],\n workspaceRoot: string = process.cwd(),\n invocationRoot: string = process.cwd(),\n): Promise<LinkedArtifact[]> {\n const expanded: LinkedArtifact[] = [];\n for (const entry of entries) {\n const absolutePattern = path.isAbsolute(entry.pattern);\n const matches = await fg(entry.pattern, {\n cwd: invocationRoot,\n absolute: absolutePattern,\n onlyFiles: true,\n dot: true,\n unique: true,\n followSymbolicLinks: true,\n });\n const sortedMatches = [\n ...new Set(\n matches.map((match) =>\n anchorLinkedPath(match, workspaceRoot, invocationRoot),\n ),\n ),\n ].sort((left, right) => left.localeCompare(right));\n for (const matchedPath of sortedMatches) {\n expanded.push({\n path: matchedPath,\n scope: entry.scope,\n note: entry.note,\n });\n }\n }\n return expanded;\n}\n\n/** GH-170 (pm-pfnx): apply a standalone --note to the links added in this invocation. Semantics (documented on pm-pfnx): the note is attached to EVERY entry added via --add/--add-glob so a single flag annotates the whole batch predictably; a per-entry embedded `note=` wins over the standalone flag; and --note without any --add/--add-glob flag is a usage error because there is nothing to annotate (it never retro-edits existing links). `hasAddFlags` reflects flag presence, not match count, so a glob that legitimately matches zero files is not an error. */\nexport function applyStandaloneNote(\n adds: LinkedArtifact[],\n note: string | undefined,\n hasAddFlags: boolean,\n): LinkedArtifact[] {\n if (note === undefined) {\n return adds;\n }\n if (!hasAddFlags) {\n throw new PmCliError(\n \"--note requires --add or --add-glob in the same invocation (the note annotates the links being added)\",\n EXIT_CODE.USAGE,\n );\n }\n const trimmed = note.trim();\n if (trimmed.length === 0) {\n return adds;\n }\n return adds.map((entry) =>\n entry.note === undefined ? { ...entry, note: trimmed } : entry,\n );\n}\n\n/** Implements artifact key for the public runtime surface of this module. */\nexport function artifactKey(\n value: Pick<LinkedArtifact, \"path\" | \"scope\">,\n): string {\n return `${value.path}::${value.scope}`;\n}\n\n/** Implements sort linked artifacts for the public runtime surface of this module. */\nexport function sortLinkedArtifacts(\n artifacts: LinkedArtifact[],\n): LinkedArtifact[] {\n return [...artifacts].sort((left, right) => {\n const byPath = left.path.localeCompare(right.path);\n if (byPath !== 0) return byPath;\n return left.scope.localeCompare(right.scope);\n });\n}\n\n/** Implements dedupe linked artifacts for the public runtime surface of this module. */\nexport function dedupeLinkedArtifacts(\n artifacts: LinkedArtifact[],\n): LinkedArtifact[] {\n return [\n ...new Map(artifacts.map((entry) => [artifactKey(entry), entry])).values(),\n ].map((entry) => ({\n ...entry,\n note: entry.note?.trim() || undefined,\n }));\n}\n\n/** Implements validate linked paths for the public runtime surface of this module. */\nexport async function validateLinkedPaths(\n paths: string[],\n workspaceRoot: string = process.cwd(),\n): Promise<LinkedPathValidation> {\n const uniquePaths = [...new Set(paths)].sort((left, right) =>\n left.localeCompare(right),\n );\n const existingFiles: string[] = [];\n const missingPaths: string[] = [];\n const nonFilePaths: string[] = [];\n const remoteReferences: string[] = [];\n for (const relativePath of uniquePaths) {\n // Remote references (https:// PR/issue/design-doc URLs) are not local\n // files; report them separately (trimmed, to match buildFilesCheck's\n // output shape) instead of probing a meaningless path.\n if (isRemoteLinkedArtifactReference(relativePath)) {\n remoteReferences.push(relativePath.trim());\n continue;\n }\n const resolvedPath = path.isAbsolute(relativePath)\n ? relativePath\n : path.resolve(workspaceRoot, relativePath);\n try {\n const stats = await fs.stat(resolvedPath);\n if (stats.isFile()) {\n existingFiles.push(relativePath);\n } else {\n nonFilePaths.push(relativePath);\n }\n } catch (error: unknown) {\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code === \"ENOENT\"\n ) {\n missingPaths.push(relativePath);\n continue;\n }\n nonFilePaths.push(relativePath);\n }\n }\n return {\n checked: uniquePaths.length,\n existing_files: existingFiles,\n missing_paths: missingPaths,\n non_file_paths: nonFilePaths,\n remote_references: remoteReferences,\n };\n}\n\nfunction applyLinkedArtifactMigrations(\n current: LinkedArtifact[],\n adds: LinkedArtifact[],\n removes: string[],\n migrations: PathMigration[],\n): { adds: LinkedArtifact[]; removes: string[]; count: number } {\n let count = 0;\n for (let index = 0; index < current.length; index += 1) {\n const migratedPath = applyPathMigrations(current[index].path, migrations);\n if (migratedPath !== current[index].path) {\n current[index] = { ...current[index], path: migratedPath };\n count += 1;\n }\n }\n const migratedAdds = adds.map((entry) => {\n const migratedPath = applyPathMigrations(entry.path, migrations);\n if (migratedPath !== entry.path) count += 1;\n return { ...entry, path: migratedPath };\n });\n return {\n adds: migratedAdds,\n removes: removes.map((entry) => applyPathMigrations(entry, migrations)),\n count,\n };\n}\n\nfunction mergeLinkedArtifactChanges(\n current: LinkedArtifact[],\n adds: LinkedArtifact[],\n removes: string[],\n appendStable: boolean,\n): LinkedArtifact[] {\n for (const add of adds) {\n if (\n !current.some(\n (entry) => entry.path === add.path && entry.scope === add.scope,\n )\n ) {\n current.push(add);\n }\n }\n if (removes.length > 0) {\n for (let index = current.length - 1; index >= 0; index -= 1) {\n if (removes.includes(current[index].path)) current.splice(index, 1);\n }\n }\n const deduped = dedupeLinkedArtifacts(current);\n return appendStable ? deduped : sortLinkedArtifacts(deduped);\n}\n\nasync function buildLinkedArtifactResult(params: {\n id: string;\n artifacts: LinkedArtifact[];\n changed: boolean;\n migrationsApplied?: number;\n options: LinkedArtifactCommandOptions;\n workspaceRoot: string;\n}): Promise<LinkedArtifactResult> {\n const paths = params.artifacts.map((entry) => entry.path);\n return {\n id: params.id,\n artifacts: params.artifacts,\n changed: params.changed,\n count: params.artifacts.length,\n migrations_applied:\n params.migrationsApplied && params.migrationsApplied > 0\n ? params.migrationsApplied\n : undefined,\n validation: params.options.validatePaths\n ? await validateLinkedPaths(paths, params.workspaceRoot)\n : undefined,\n };\n}\n\n/** Shared linked-artifact list/mutate command core used by runFiles and runDocs. The kind config selects metadata key, op, bare-path noun, and whether append-stable ordering is honored, preserving each twin's exact semantics. */\nexport async function runLinkedArtifacts(\n id: string,\n options: LinkedArtifactCommandOptions,\n global: GlobalOptions,\n config: LinkedArtifactKindConfig,\n): Promise<LinkedArtifactResult> {\n const { metadataKey } = config;\n const stdinResolver = createStdinTokenResolver();\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const workspaceRoot = resolveWorkspaceRoot(pmRoot);\n const invocationRoot = process.cwd();\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(\n `Tracker is not initialized at ${pmRoot}. Run pm init first.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(\n settings,\n getActiveExtensionRegistrations(),\n );\n const resolvedAdds = await stdinResolver.resolveList(options.add, \"--add\");\n const resolvedAddGlobs = await stdinResolver.resolveList(\n options.addGlob,\n \"--add-glob\",\n );\n const resolvedRemoves = await stdinResolver.resolveList(\n options.remove,\n \"--remove\",\n );\n const resolvedMigrations = await stdinResolver.resolveList(\n options.migrate,\n \"--migrate\",\n );\n const parsedAdds = parseAddEntries(resolvedAdds, config.bareNoun).map(\n (entry) => ({\n ...entry,\n path: anchorLinkedPath(entry.path, workspaceRoot, invocationRoot),\n }),\n );\n const addGlobs = parseAddGlobEntries(resolvedAddGlobs);\n const expandedGlobAdds = await expandAddGlobEntries(\n addGlobs,\n workspaceRoot,\n invocationRoot,\n );\n const adds = applyStandaloneNote(\n [...parsedAdds, ...expandedGlobAdds],\n options.note,\n parsedAdds.length > 0 || addGlobs.length > 0,\n );\n const removes = parseRemoveEntries(resolvedRemoves).map((entry) =>\n anchorLinkedPath(entry, workspaceRoot, invocationRoot),\n );\n const migrations = parseMigrateEntries(resolvedMigrations);\n const shouldMutate =\n adds.length > 0 || removes.length > 0 || migrations.length > 0;\n\n if (!shouldMutate) {\n const located = await locateItem(\n pmRoot,\n id,\n settings.id_prefix,\n settings.item_format,\n typeRegistry.type_to_folder,\n );\n if (!located) {\n throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n const loaded = await readLocatedItem(located, { schema: settings.schema });\n const artifacts =\n ((loaded.document.metadata as Record<string, unknown>)[metadataKey] as\n | LinkedArtifact[]\n | undefined) ?? [];\n return buildLinkedArtifactResult({\n id: located.id,\n artifacts,\n changed: false,\n options,\n workspaceRoot,\n });\n }\n\n const author = resolveAuthor(options.author, settings.author_default);\n const result = await mutateItem({\n pmRoot,\n settings,\n id,\n op: config.op,\n author,\n message: options.message,\n force: options.force,\n mutate(document) {\n const metadata = document.metadata as Record<string, unknown>;\n const next = [\n ...((metadata[metadataKey] as LinkedArtifact[] | undefined) ?? []),\n ];\n const migrated = applyLinkedArtifactMigrations(\n next,\n adds,\n removes,\n migrations,\n );\n const normalized = mergeLinkedArtifactChanges(\n next,\n migrated.adds,\n migrated.removes,\n config.supportsAppendStable && options.appendStable === true,\n );\n if (normalized.length > 0) {\n metadata[metadataKey] = normalized;\n } else {\n delete metadata[metadataKey];\n }\n return {\n changedFields: [metadataKey],\n warnings:\n migrated.count > 0\n ? [`path_migrations_applied:${migrated.count}`]\n : [],\n };\n },\n });\n\n const artifacts =\n ((result.item as Record<string, unknown>)[metadataKey] as\n | LinkedArtifact[]\n | undefined) ?? [];\n const migrationWarning = result.warnings.find((warning) =>\n warning.startsWith(\"path_migrations_applied:\"),\n );\n const migrationCount = migrationWarning\n ? Number(migrationWarning.slice(\"path_migrations_applied:\".length))\n : 0;\n return buildLinkedArtifactResult({\n id: result.item.id,\n artifacts,\n changed: true,\n migrationsApplied: migrationCount,\n options,\n workspaceRoot,\n });\n}\n\n/** Re-key the generic `artifacts` field to the resource-specific name (files/docs) while preserving the original key order and presence so kind-specific result shapes (and their deterministic JSON key ordering) stay byte-identical. */\nexport function renameArtifactsResultKey<\n Result extends LinkedArtifactResult,\n const Key extends \"files\" | \"docs\",\n>(result: Result, key: Key): RenamedLinkedArtifactResult<Result, Key> {\n const out: Record<string, unknown> = {};\n for (const [field, value] of Object.entries(result)) {\n out[field === \"artifacts\" ? key : field] = value;\n }\n return out as RenamedLinkedArtifactResult<Result, Key>;\n}\n", "/**\n * Remote-reference detection for linked artifacts (`pm files` / `pm docs`\n * `path` values).\n *\n * A linked artifact path is normally a workspace-relative or absolute local\n * filesystem path, but `pm docs --add` legitimately records *remote*\n * references too — most commonly an `https://` URL to a pull request, issue, or\n * external design doc. Such references are not local files, so they must never\n * be:\n * - probed with `fs.stat` for existence (the resolved path is meaningless),\n * - classified as `moved`/`deleted` by the stale-path classifier,\n * - counted among `missing_linked_paths` in `pm validate --check-files`, or\n * - pruned by `pm validate --prune-missing` — which would silently destroy an\n * intentionally-recorded reference (project management = context management).\n *\n * Pure module: no filesystem or network access — callers pass the stored path\n * string and branch on the boolean result.\n */\n\n/**\n * Matches an RFC 3986 URI that carries an authority component\n * (`scheme://…`) — e.g. `https://`, `http://`, `ftp://`, `ssh://`, `file://`.\n *\n * The scheme is required to be at least two characters so a Windows drive\n * prefix (`C:/…`, which is a single letter followed by a single slash and never\n * `://`) can never be mistaken for a remote reference. A relative or absolute\n * POSIX path (`src/api.ts`, `/dev/null`) and a UNC path (`//server/share`) all\n * lack the `scheme://` shape and are correctly treated as local.\n */\nconst REMOTE_ARTIFACT_REFERENCE_PATTERN = /^[a-z][a-z0-9+.-]+:\\/\\//i;\n\n/** Return `true` when a linked-artifact path is a remote reference (a URL with a `scheme://` authority) rather than a local filesystem path. Whitespace is trimmed before matching so a stored `\" https://…\"` is still recognized. */\nexport function isRemoteLinkedArtifactReference(path: string): boolean {\n return REMOTE_ARTIFACT_REFERENCE_PATTERN.test(path.trim());\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["path", "global", "artifacts"]
7
+ }
@@ -16,7 +16,7 @@ import {
16
16
  recordAfterCommandAffectedItem,
17
17
  runActiveOnWriteHooks,
18
18
  serializeItemDocument
19
- } from "./chunk-TNGLCRKS.js";
19
+ } from "./chunk-GSEADLRH.js";
20
20
  import {
21
21
  EXIT_CODE,
22
22
  ITEM_METADATA_KEY_ORDER,
@@ -31,7 +31,7 @@ import {
31
31
  resolvePmRoot,
32
32
  resolveRuntimeStatusRegistry,
33
33
  writeFileAtomic
34
- } from "./chunk-TGG7YGMC.js";
34
+ } from "./chunk-GXXC7QSK.js";
35
35
 
36
36
  // dist/cli/commands/copy.js
37
37
  function selectAuthor(explicitAuthor, settingsAuthor) {
@@ -172,6 +172,6 @@ async function runCopy(sourceId, options, global) {
172
172
  export {
173
173
  runCopy
174
174
  };
175
- //# sourceMappingURL=chunk-RQAY7C5T.js.map
175
+ //# sourceMappingURL=chunk-FJZDA6MS.js.map
176
176
 
177
177
  //# debugId=10297567-d434-5182-abfd-6c340c9fde5c
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveSubcommandFlagContractsForCommand
3
- } from "./chunk-XFEIASAC.js";
3
+ } from "./chunk-2QIQGYPW.js";
4
4
  import {
5
5
  DEFAULT_EXTENSION_PRIORITY,
6
6
  EXIT_CODE,
@@ -9,7 +9,7 @@ import {
9
9
  isPathWithinDirectory,
10
10
  levenshteinDistanceWithinLimit,
11
11
  pathExists
12
- } from "./chunk-XY3CC3EM.js";
12
+ } from "./chunk-AFWZRL7M.js";
13
13
 
14
14
  // dist/cli/argv-utils.js
15
15
  !(function() {
@@ -872,4 +872,4 @@ export {
872
872
  parseExtensionManifest,
873
873
  validateExtensionDirectory
874
874
  };
875
- //# sourceMappingURL=chunk-B4TVNGRX.js.map
875
+ //# sourceMappingURL=chunk-FO7GMJKG.js.map
@@ -0,0 +1,5 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="45eac7fa-f181-5cca-93b7-cfb58909dbb3")}catch(e){}}();
3
+ //# sourceMappingURL=chunk-FRQ63VPB.js.map
4
+
5
+ //# debugId=45eac7fa-f181-5cca-93b7-cfb58909dbb3