@unbrained/pm-cli 2026.5.29 → 2026.5.31

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 (274) hide show
  1. package/CHANGELOG.md +54 -12
  2. package/dist/cli/bootstrap-args.d.ts +1 -1
  3. package/dist/cli/bootstrap-args.js +59 -9
  4. package/dist/cli/bootstrap-args.js.map +1 -1
  5. package/dist/cli/commands/activity.js +4 -4
  6. package/dist/cli/commands/activity.js.map +1 -1
  7. package/dist/cli/commands/calendar.js +83 -11
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/close.js +4 -4
  10. package/dist/cli/commands/close.js.map +1 -1
  11. package/dist/cli/commands/completion.js +4 -4
  12. package/dist/cli/commands/completion.js.map +1 -1
  13. package/dist/cli/commands/create.js +50 -7
  14. package/dist/cli/commands/create.js.map +1 -1
  15. package/dist/cli/commands/deps.js +4 -4
  16. package/dist/cli/commands/deps.js.map +1 -1
  17. package/dist/cli/commands/extension/install-sources.d.ts +3 -0
  18. package/dist/cli/commands/extension/install-sources.js +29 -4
  19. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  20. package/dist/cli/commands/extension.js +26 -5
  21. package/dist/cli/commands/extension.js.map +1 -1
  22. package/dist/cli/commands/get.js +6 -3
  23. package/dist/cli/commands/get.js.map +1 -1
  24. package/dist/cli/commands/list.js +25 -6
  25. package/dist/cli/commands/list.js.map +1 -1
  26. package/dist/cli/commands/reindex.js +3 -3
  27. package/dist/cli/commands/reindex.js.map +1 -1
  28. package/dist/cli/commands/search.d.ts +17 -0
  29. package/dist/cli/commands/search.js +40 -10
  30. package/dist/cli/commands/search.js.map +1 -1
  31. package/dist/cli/commands/stats.js +4 -4
  32. package/dist/cli/commands/stats.js.map +1 -1
  33. package/dist/cli/commands/test-all.js +4 -4
  34. package/dist/cli/commands/test-all.js.map +1 -1
  35. package/dist/cli/main.d.ts +2 -0
  36. package/dist/cli/main.js +39 -11
  37. package/dist/cli/main.js.map +1 -1
  38. package/dist/cli/register-list-query.js +10 -12
  39. package/dist/cli/register-list-query.js.map +1 -1
  40. package/dist/cli/register-mutation.js +20 -22
  41. package/dist/cli/register-mutation.js.map +1 -1
  42. package/dist/cli/register-operations.js +32 -25
  43. package/dist/cli/register-operations.js.map +1 -1
  44. package/dist/cli/register-setup.js +7 -9
  45. package/dist/cli/register-setup.js.map +1 -1
  46. package/dist/cli/registration-helpers.js +6 -3
  47. package/dist/cli/registration-helpers.js.map +1 -1
  48. package/dist/cli/search-refresh.d.ts +2 -0
  49. package/dist/cli/search-refresh.js +13 -0
  50. package/dist/cli/search-refresh.js.map +1 -0
  51. package/dist/cli-bundle/chunks/activity-OWYSUZOY.js +17 -0
  52. package/dist/cli-bundle/chunks/activity-OWYSUZOY.js.map +7 -0
  53. package/dist/cli-bundle/chunks/aggregate-ADUOSFRO.js +209 -0
  54. package/dist/cli-bundle/chunks/aggregate-ADUOSFRO.js.map +7 -0
  55. package/dist/cli-bundle/chunks/append-JD2DETU7.js +73 -0
  56. package/dist/cli-bundle/chunks/append-JD2DETU7.js.map +7 -0
  57. package/dist/cli-bundle/chunks/chunk-3HUE7XOF.js +27 -0
  58. package/dist/cli-bundle/chunks/chunk-3HUE7XOF.js.map +7 -0
  59. package/dist/cli-bundle/chunks/chunk-3M73P3G6.js +1636 -0
  60. package/dist/cli-bundle/chunks/chunk-3M73P3G6.js.map +7 -0
  61. package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js +189 -0
  62. package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js.map +7 -0
  63. package/dist/cli-bundle/chunks/chunk-5HSEP75M.js +330 -0
  64. package/dist/cli-bundle/chunks/chunk-5HSEP75M.js.map +7 -0
  65. package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js +1770 -0
  66. package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js.map +7 -0
  67. package/dist/cli-bundle/chunks/chunk-6YCV7WSL.js +552 -0
  68. package/dist/cli-bundle/chunks/chunk-6YCV7WSL.js.map +7 -0
  69. package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js +202 -0
  70. package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js.map +7 -0
  71. package/dist/cli-bundle/chunks/chunk-A7E7PUVX.js +157 -0
  72. package/dist/cli-bundle/chunks/chunk-A7E7PUVX.js.map +7 -0
  73. package/dist/cli-bundle/chunks/chunk-AKOOMO3T.js +90 -0
  74. package/dist/cli-bundle/chunks/chunk-AKOOMO3T.js.map +7 -0
  75. package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js +950 -0
  76. package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js.map +7 -0
  77. package/dist/cli-bundle/chunks/chunk-CEFIVZPG.js +79 -0
  78. package/dist/cli-bundle/chunks/chunk-CEFIVZPG.js.map +7 -0
  79. package/dist/cli-bundle/chunks/chunk-D7AOMPRH.js +349 -0
  80. package/dist/cli-bundle/chunks/chunk-D7AOMPRH.js.map +7 -0
  81. package/dist/cli-bundle/chunks/chunk-EAOG77HM.js +56 -0
  82. package/dist/cli-bundle/chunks/chunk-EAOG77HM.js.map +7 -0
  83. package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js +47 -0
  84. package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js.map +7 -0
  85. package/dist/cli-bundle/chunks/chunk-FM26RGSU.js +56 -0
  86. package/dist/cli-bundle/chunks/chunk-FM26RGSU.js.map +7 -0
  87. package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js +435 -0
  88. package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js.map +7 -0
  89. package/dist/cli-bundle/chunks/chunk-G57E5D7T.js +185 -0
  90. package/dist/cli-bundle/chunks/chunk-G57E5D7T.js.map +7 -0
  91. package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js +3621 -0
  92. package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js.map +7 -0
  93. package/dist/cli-bundle/chunks/chunk-JFWUHHS2.js +233 -0
  94. package/dist/cli-bundle/chunks/chunk-JFWUHHS2.js.map +7 -0
  95. package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js +1861 -0
  96. package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js.map +7 -0
  97. package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js +648 -0
  98. package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js.map +7 -0
  99. package/dist/cli-bundle/chunks/chunk-KBQY3YG5.js +122 -0
  100. package/dist/cli-bundle/chunks/chunk-KBQY3YG5.js.map +7 -0
  101. package/dist/cli-bundle/chunks/chunk-L2FXEKDB.js +185 -0
  102. package/dist/cli-bundle/chunks/chunk-L2FXEKDB.js.map +7 -0
  103. package/dist/cli-bundle/chunks/chunk-LRBOHPUE.js +189 -0
  104. package/dist/cli-bundle/chunks/chunk-LRBOHPUE.js.map +7 -0
  105. package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js +5153 -0
  106. package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js.map +7 -0
  107. package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js +1345 -0
  108. package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js.map +7 -0
  109. package/dist/cli-bundle/chunks/chunk-NGN7UV5K.js +341 -0
  110. package/dist/cli-bundle/chunks/chunk-NGN7UV5K.js.map +7 -0
  111. package/dist/cli-bundle/chunks/chunk-O7IWB35H.js +18 -0
  112. package/dist/cli-bundle/chunks/chunk-O7IWB35H.js.map +7 -0
  113. package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js +2929 -0
  114. package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js.map +7 -0
  115. package/dist/cli-bundle/chunks/chunk-P53TN6IA.js +674 -0
  116. package/dist/cli-bundle/chunks/chunk-P53TN6IA.js.map +7 -0
  117. package/dist/cli-bundle/chunks/chunk-PVNQLCIS.js +176 -0
  118. package/dist/cli-bundle/chunks/chunk-PVNQLCIS.js.map +7 -0
  119. package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js +1680 -0
  120. package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js.map +7 -0
  121. package/dist/cli-bundle/chunks/chunk-QAJBIGRA.js +20 -0
  122. package/dist/cli-bundle/chunks/chunk-QAJBIGRA.js.map +7 -0
  123. package/dist/cli-bundle/chunks/chunk-SEXQN4KL.js +60 -0
  124. package/dist/cli-bundle/chunks/chunk-SEXQN4KL.js.map +7 -0
  125. package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js +362 -0
  126. package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js.map +7 -0
  127. package/dist/cli-bundle/chunks/chunk-VGICHR7D.js +141 -0
  128. package/dist/cli-bundle/chunks/chunk-VGICHR7D.js.map +7 -0
  129. package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js +632 -0
  130. package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js.map +7 -0
  131. package/dist/cli-bundle/chunks/chunk-WJ2NAC37.js +252 -0
  132. package/dist/cli-bundle/chunks/chunk-WJ2NAC37.js.map +7 -0
  133. package/dist/cli-bundle/chunks/claim-EE4TKKCV.js +133 -0
  134. package/dist/cli-bundle/chunks/claim-EE4TKKCV.js.map +7 -0
  135. package/dist/cli-bundle/chunks/close-XY4CSAYF.js +14 -0
  136. package/dist/cli-bundle/chunks/close-XY4CSAYF.js.map +7 -0
  137. package/dist/cli-bundle/chunks/comments-AAKJQ6LW.js +104 -0
  138. package/dist/cli-bundle/chunks/comments-AAKJQ6LW.js.map +7 -0
  139. package/dist/cli-bundle/chunks/config-V3FZOKLI.js +1577 -0
  140. package/dist/cli-bundle/chunks/config-V3FZOKLI.js.map +7 -0
  141. package/dist/cli-bundle/chunks/context-RZ5QPNJB.js +1458 -0
  142. package/dist/cli-bundle/chunks/context-RZ5QPNJB.js.map +7 -0
  143. package/dist/cli-bundle/chunks/contracts-YLMH33VU.js +1245 -0
  144. package/dist/cli-bundle/chunks/contracts-YLMH33VU.js.map +7 -0
  145. package/dist/cli-bundle/chunks/create-PZVHRIZQ.js +28 -0
  146. package/dist/cli-bundle/chunks/create-PZVHRIZQ.js.map +7 -0
  147. package/dist/cli-bundle/chunks/delete-RHCTEORS.js +59 -0
  148. package/dist/cli-bundle/chunks/delete-RHCTEORS.js.map +7 -0
  149. package/dist/cli-bundle/chunks/deps-MZYCMLAO.js +229 -0
  150. package/dist/cli-bundle/chunks/deps-MZYCMLAO.js.map +7 -0
  151. package/dist/cli-bundle/chunks/docs-FXXUCZYU.js +35 -0
  152. package/dist/cli-bundle/chunks/docs-FXXUCZYU.js.map +7 -0
  153. package/dist/cli-bundle/chunks/extension-B4WL7BQU.js +25 -0
  154. package/dist/cli-bundle/chunks/extension-B4WL7BQU.js.map +7 -0
  155. package/dist/cli-bundle/chunks/files-WVOX67PE.js +286 -0
  156. package/dist/cli-bundle/chunks/files-WVOX67PE.js.map +7 -0
  157. package/dist/cli-bundle/chunks/gc-JWNF66EC.js +181 -0
  158. package/dist/cli-bundle/chunks/gc-JWNF66EC.js.map +7 -0
  159. package/dist/cli-bundle/chunks/get-LTK3HOCQ.js +198 -0
  160. package/dist/cli-bundle/chunks/get-LTK3HOCQ.js.map +7 -0
  161. package/dist/cli-bundle/chunks/health-TCWL55KM.js +1233 -0
  162. package/dist/cli-bundle/chunks/health-TCWL55KM.js.map +7 -0
  163. package/dist/cli-bundle/chunks/history-A2JUDXUE.js +21 -0
  164. package/dist/cli-bundle/chunks/history-A2JUDXUE.js.map +7 -0
  165. package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js +20 -0
  166. package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js.map +7 -0
  167. package/dist/cli-bundle/chunks/history-repair-ZWSTDRH2.js +198 -0
  168. package/dist/cli-bundle/chunks/history-repair-ZWSTDRH2.js.map +7 -0
  169. package/dist/cli-bundle/chunks/init-M2WUB4YH.js +16 -0
  170. package/dist/cli-bundle/chunks/init-M2WUB4YH.js.map +7 -0
  171. package/dist/cli-bundle/chunks/learnings-NXTWE3FR.js +48 -0
  172. package/dist/cli-bundle/chunks/learnings-NXTWE3FR.js.map +7 -0
  173. package/dist/cli-bundle/chunks/list-OGWQPC26.js +20 -0
  174. package/dist/cli-bundle/chunks/list-OGWQPC26.js.map +7 -0
  175. package/dist/cli-bundle/chunks/notes-DFS5ZGOO.js +48 -0
  176. package/dist/cli-bundle/chunks/notes-DFS5ZGOO.js.map +7 -0
  177. package/dist/cli-bundle/chunks/plan-67AB2PLM.js +1175 -0
  178. package/dist/cli-bundle/chunks/plan-67AB2PLM.js.map +7 -0
  179. package/dist/cli-bundle/chunks/register-list-query-UP3VRUFS.js +232 -0
  180. package/dist/cli-bundle/chunks/register-list-query-UP3VRUFS.js.map +7 -0
  181. package/dist/cli-bundle/chunks/register-mutation-YWSBF545.js +712 -0
  182. package/dist/cli-bundle/chunks/register-mutation-YWSBF545.js.map +7 -0
  183. package/dist/cli-bundle/chunks/register-operations-3BDTGSDH.js +374 -0
  184. package/dist/cli-bundle/chunks/register-operations-3BDTGSDH.js.map +7 -0
  185. package/dist/cli-bundle/chunks/register-setup-V56GDRUS.js +246 -0
  186. package/dist/cli-bundle/chunks/register-setup-V56GDRUS.js.map +7 -0
  187. package/dist/cli-bundle/chunks/restore-MB2ISME7.js +18 -0
  188. package/dist/cli-bundle/chunks/restore-MB2ISME7.js.map +7 -0
  189. package/dist/cli-bundle/chunks/schema-Q622KC46.js +119 -0
  190. package/dist/cli-bundle/chunks/schema-Q622KC46.js.map +7 -0
  191. package/dist/cli-bundle/chunks/search-HENBL456.js +1135 -0
  192. package/dist/cli-bundle/chunks/search-HENBL456.js.map +7 -0
  193. package/dist/cli-bundle/chunks/stats-N6H3YP2F.js +124 -0
  194. package/dist/cli-bundle/chunks/stats-N6H3YP2F.js.map +7 -0
  195. package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js +32 -0
  196. package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js.map +7 -0
  197. package/dist/cli-bundle/chunks/test-all-G2AZOHXI.js +332 -0
  198. package/dist/cli-bundle/chunks/test-all-G2AZOHXI.js.map +7 -0
  199. package/dist/cli-bundle/chunks/test-runs-GX5HTPSF.js +939 -0
  200. package/dist/cli-bundle/chunks/test-runs-GX5HTPSF.js.map +7 -0
  201. package/dist/cli-bundle/chunks/update-H6SCWNMA.js +22 -0
  202. package/dist/cli-bundle/chunks/update-H6SCWNMA.js.map +7 -0
  203. package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js +676 -0
  204. package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js.map +7 -0
  205. package/dist/cli-bundle/chunks/upgrade-H5HHM5UV.js +271 -0
  206. package/dist/cli-bundle/chunks/upgrade-H5HHM5UV.js.map +7 -0
  207. package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js +1110 -0
  208. package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js.map +7 -0
  209. package/dist/cli-bundle/main.js +6952 -0
  210. package/dist/cli-bundle/main.js.map +7 -0
  211. package/dist/cli.js +1 -1
  212. package/dist/core/config/nested-settings.d.ts +2 -0
  213. package/dist/core/config/nested-settings.js +17 -2
  214. package/dist/core/config/nested-settings.js.map +1 -1
  215. package/dist/core/item/item-type-definition.js +6 -2
  216. package/dist/core/item/item-type-definition.js.map +1 -1
  217. package/dist/core/item/type-registry.d.ts +4 -0
  218. package/dist/core/item/type-registry.js +10 -2
  219. package/dist/core/item/type-registry.js.map +1 -1
  220. package/dist/core/item/type-synonyms.d.ts +20 -0
  221. package/dist/core/item/type-synonyms.js +42 -0
  222. package/dist/core/item/type-synonyms.js.map +1 -0
  223. package/dist/core/search/background-refresh.d.ts +53 -0
  224. package/dist/core/search/background-refresh.js +286 -0
  225. package/dist/core/search/background-refresh.js.map +1 -0
  226. package/dist/core/search/cache.d.ts +20 -1
  227. package/dist/core/search/cache.js +76 -5
  228. package/dist/core/search/cache.js.map +1 -1
  229. package/dist/core/search/semantic-defaults.js +73 -32
  230. package/dist/core/search/semantic-defaults.js.map +1 -1
  231. package/dist/core/search/vector-stores.js +7 -3
  232. package/dist/core/search/vector-stores.js.map +1 -1
  233. package/dist/core/sentry/helpers.d.ts +1 -1
  234. package/dist/core/sentry/helpers.js +4 -4
  235. package/dist/core/sentry/helpers.js.map +1 -1
  236. package/dist/core/shared/constants.d.ts +2 -2
  237. package/dist/core/shared/constants.js +3 -3
  238. package/dist/core/shared/constants.js.map +1 -1
  239. package/dist/core/shared/html-entity-decode.d.ts +2 -1
  240. package/dist/core/shared/html-entity-decode.js +14 -9
  241. package/dist/core/shared/html-entity-decode.js.map +1 -1
  242. package/dist/core/shared/time.js +52 -2
  243. package/dist/core/shared/time.js.map +1 -1
  244. package/dist/core/store/front-matter-cache.d.ts +24 -0
  245. package/dist/core/store/front-matter-cache.js +119 -8
  246. package/dist/core/store/front-matter-cache.js.map +1 -1
  247. package/dist/core/store/item-format-migration.js +25 -15
  248. package/dist/core/store/item-format-migration.js.map +1 -1
  249. package/dist/core/store/item-store.d.ts +7 -0
  250. package/dist/core/store/item-store.js +13 -3
  251. package/dist/core/store/item-store.js.map +1 -1
  252. package/dist/core/store/settings-validator.d.ts +1 -0
  253. package/dist/core/store/settings-validator.js +7 -2
  254. package/dist/core/store/settings-validator.js.map +1 -1
  255. package/dist/core/store/settings.js +19 -3
  256. package/dist/core/store/settings.js.map +1 -1
  257. package/dist/core/telemetry/runtime.d.ts +10 -0
  258. package/dist/core/telemetry/runtime.js +86 -2
  259. package/dist/core/telemetry/runtime.js.map +1 -1
  260. package/dist/mcp/server.js +3 -3
  261. package/dist/mcp/server.js.map +1 -1
  262. package/dist/sdk/cli-contracts/tool-parameter-tables.js +4 -4
  263. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  264. package/dist/sdk/cli-contracts.js +29 -8
  265. package/dist/sdk/cli-contracts.js.map +1 -1
  266. package/dist/types.d.ts +9 -1
  267. package/dist/types.js +2 -2
  268. package/dist/types.js.map +1 -1
  269. package/docs/CONFIGURATION.md +11 -0
  270. package/docs/RELEASING.md +1 -1
  271. package/package.json +7 -5
  272. package/packages/pm-calendar/extensions/calendar/index.js +27 -2
  273. package/packages/pm-calendar/extensions/calendar/index.ts +28 -2
  274. package/scripts/bundle-cli.mjs +39 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../cli/commands/update-many.ts"],
4
+ "sourcesContent": ["import { mkdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathExists, writeFileAtomic } from \"../../core/fs/fs-utils.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport { applyTagRemovals, mergeAdditiveTags, parseTags } from \"../../core/item/parse.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { resolveRuntimeStatusRegistry, type RuntimeStatusRegistry } 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 { nowIso } from \"../../core/shared/time.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 { 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_DIRECTORY = [\"checkpoints\", \"update-many\"] as const;\n\nconst NON_MUTATION_UPDATE_OPTION_KEYS = new Set<keyof UpdateCommandOptions>([\n \"author\",\n \"message\",\n \"force\",\n \"allowAuditUpdate\",\n \"allowAuditDepUpdate\",\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<Record<keyof UpdateCommandOptions, string>> = {\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 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 UpdateManyCheckpointItem {\n id: string;\n target_updated_at: string;\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: UpdateManyCheckpointItem[];\n}\n\nexport interface UpdateManyCommandOptions {\n status?: string;\n list: ListOptions;\n update: UpdateCommandOptions;\n dryRun?: boolean;\n rollback?: string;\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\nexport interface UpdateManyResult {\n mode: \"dry_run\" | \"apply\" | \"rollback\";\n matched_count: number;\n dry_run: boolean;\n filters?: Record<string, unknown>;\n planned_update_options?: Record<string, unknown>;\n item_plans?: PlannedItemDiff[];\n checkpoint?: {\n id: string;\n created_at: string;\n path: string;\n rollback_command: string;\n };\n updated_count?: number;\n skipped_count?: number;\n failed_count?: number;\n restored_count?: number;\n rollback_checkpoint_id?: string;\n rows?: UpdateManyApplyResultRow[] | UpdateManyRollbackResultRow[];\n ids: string[];\n}\n\nfunction normalizeCheckpointId(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n throw new PmCliError(\"--rollback requires a non-empty checkpoint ID\", EXIT_CODE.USAGE);\n }\n if (!/^[a-zA-Z0-9._-]+$/.test(trimmed)) {\n throw new PmCliError(\"--rollback checkpoint ID must match [a-zA-Z0-9._-]+\", EXIT_CODE.USAGE);\n }\n return trimmed;\n}\n\nfunction sanitizeUpdateOptionsForSummary(options: UpdateCommandOptions): Record<string, unknown> {\n const summary: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(options) as Array<[keyof UpdateCommandOptions, unknown]>) {\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(optionKey: keyof UpdateCommandOptions, value: unknown): 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 (optionKey === \"estimatedMinutes\" || optionKey === \"order\" || optionKey === \"rank\") {\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 JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction normalizeCollectionBeforeValue(field: string, value: unknown): 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(row: Record<string, unknown>, update: UpdateCommandOptions): PlannedChange[] {\n const changes: PlannedChange[] = [];\n for (const definition of COLLECTION_MUTATION_PLAN_DEFINITIONS) {\n const addValues = definition.addKey ? update[definition.addKey] : undefined;\n const removeValues = definition.removeKey ? update[definition.removeKey] : undefined;\n const addCount = Array.isArray(addValues) ? addValues.length : 0;\n const removeCount = Array.isArray(removeValues) ? removeValues.length : 0;\n const clear = definition.clearKey ? update[definition.clearKey] === true : false;\n const replace = definition.replaceKey ? update[definition.replaceKey] === true : false;\n if (!clear && !replace && addCount === 0 && removeCount === 0) {\n continue;\n }\n\n const before = normalizeCollectionBeforeValue(definition.field, row[definition.field]);\n const beforeCount = collectionValueCount(definition.field, before);\n const operation = replace ? \"replace\" : clear ? \"clear_or_reset\" : removeCount > 0 ? \"merge_remove\" : \"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(row: Record<string, unknown>, update: UpdateCommandOptions): PlannedChange | undefined {\n const hasReplace = update.tags !== undefined;\n const hasAdd = Array.isArray(update.addTags) && update.addTags.length > 0;\n const hasRemove = 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 ?? \"\") : existing;\n const withAdditions = mergeAdditiveTags(baseTags, update.addTags);\n const after = applyTagRemovals(withAdditions, update.removeTags).slice().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(item: ListedItem, update: UpdateCommandOptions): PlannedItemDiff {\n const row = toItemRecord(item);\n const changes: PlannedChange[] = [];\n const tagPlan = buildTagMutationPlan(row, update);\n if (tagPlan) {\n changes.push(tagPlan);\n }\n for (const [optionKey, itemKey] of Object.entries(UPDATE_OPTION_TO_ITEM_KEY) as Array<[keyof UpdateCommandOptions, string]>) {\n const candidate = update[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, update));\n\n if (update.unset && update.unset.length > 0) {\n for (const rawUnsetField of update.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 createCheckpointId(nowValue: string): string {\n const compactTimestamp = nowValue.replace(/[-:.TZ]/g, \"\").slice(0, 14);\n const randomSuffix = Math.random().toString(36).slice(2, 8);\n return `update-many-${compactTimestamp}-${randomSuffix}`;\n}\n\nfunction checkpointDirectoryPath(pmRoot: string): string {\n return path.join(pmRoot, ...UPDATE_MANY_CHECKPOINT_DIRECTORY);\n}\n\nfunction checkpointFilePath(pmRoot: string, checkpointId: string): string {\n return path.join(checkpointDirectoryPath(pmRoot), `${checkpointId}.json`);\n}\n\nfunction normalizeStatusFilter(value: string | undefined, statusRegistry: RuntimeStatusRegistry): 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((definition) => definition.id);\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 hasListFilters(list: ListOptions, status: string | undefined): boolean {\n return (\n status !== undefined ||\n list.type !== undefined ||\n list.tag !== undefined ||\n list.priority !== undefined ||\n list.deadlineBefore !== undefined ||\n list.deadlineAfter !== undefined ||\n list.assignee !== undefined ||\n list.assigneeFilter !== undefined ||\n list.parent !== undefined ||\n list.sprint !== undefined ||\n list.release !== undefined ||\n list.limit !== undefined ||\n list.offset !== undefined\n );\n}\n\n\nfunction ensureCheckpointShape(value: unknown, checkpointId: string): UpdateManyCheckpoint {\n if (!value || typeof value !== \"object\") {\n throw new PmCliError(`Checkpoint ${checkpointId} is invalid`, EXIT_CODE.GENERIC_FAILURE);\n }\n const record = value as Record<string, unknown>;\n if (record.schema_version !== UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION) {\n throw new PmCliError(`Checkpoint ${checkpointId} has unsupported schema version`, EXIT_CODE.GENERIC_FAILURE);\n }\n if (!Array.isArray(record.items)) {\n throw new PmCliError(`Checkpoint ${checkpointId} is missing items`, EXIT_CODE.GENERIC_FAILURE);\n }\n const items = record.items.map((entry) => {\n if (!entry || typeof entry !== \"object\") {\n throw new PmCliError(`Checkpoint ${checkpointId} contains an invalid item entry`, EXIT_CODE.GENERIC_FAILURE);\n }\n const row = entry as Record<string, unknown>;\n if (typeof row.id !== \"string\" || row.id.trim().length === 0) {\n throw new PmCliError(`Checkpoint ${checkpointId} contains an item entry without ID`, EXIT_CODE.GENERIC_FAILURE);\n }\n if (typeof row.target_updated_at !== \"string\" || row.target_updated_at.trim().length === 0) {\n throw new PmCliError(`Checkpoint ${checkpointId} contains an item entry without target_updated_at`, EXIT_CODE.GENERIC_FAILURE);\n }\n return {\n id: row.id.trim(),\n target_updated_at: row.target_updated_at.trim(),\n };\n });\n return {\n schema_version: UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION,\n id: typeof record.id === \"string\" ? record.id : checkpointId,\n created_at: typeof record.created_at === \"string\" ? record.created_at : nowIso(),\n author: typeof record.author === \"string\" ? record.author : \"unknown\",\n status_filter: typeof record.status_filter === \"string\" ? record.status_filter : null,\n list_filters:\n record.list_filters && typeof record.list_filters === \"object\" && !Array.isArray(record.list_filters)\n ? (record.list_filters as Record<string, unknown>)\n : {},\n update_options:\n record.update_options && typeof record.update_options === \"object\" && !Array.isArray(record.update_options)\n ? (record.update_options as Record<string, unknown>)\n : {},\n items,\n };\n}\n\nasync function loadCheckpoint(pmRoot: string, checkpointId: string): Promise<{ checkpoint: UpdateManyCheckpoint; path: string }> {\n const normalizedId = normalizeCheckpointId(checkpointId);\n const filePath = checkpointFilePath(pmRoot, normalizedId);\n if (!(await pathExists(filePath))) {\n throw new PmCliError(`Checkpoint ${normalizedId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const raw = await readFile(filePath, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n return {\n checkpoint: ensureCheckpointShape(parsed, normalizedId),\n path: filePath,\n };\n}\n\nexport async function runUpdateMany(options: UpdateManyCommandOptions, global: GlobalOptions): Promise<UpdateManyResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n\n const dryRun = options.dryRun === true;\n const rollbackId = typeof options.rollback === \"string\" ? options.rollback : undefined;\n const updateSummary = sanitizeUpdateOptionsForSummary(options.update);\n\n if (rollbackId) {\n if (dryRun) {\n throw new PmCliError(\"--dry-run cannot be combined with --rollback\", EXIT_CODE.USAGE);\n }\n if (hasListFilters(options.list, options.status)) {\n throw new PmCliError(\"Rollback mode does not accept filter options\", EXIT_CODE.USAGE);\n }\n if (Object.keys(updateSummary).length > 0) {\n throw new PmCliError(\"Rollback mode does not accept update mutation flags\", EXIT_CODE.USAGE);\n }\n\n const { checkpoint, path: checkpointPath } = await loadCheckpoint(pmRoot, rollbackId);\n const rollbackRows: UpdateManyRollbackResultRow[] = [];\n const restoredIds: string[] = [];\n const restoreMessage = options.update.message ?? `Rollback update-many checkpoint ${checkpoint.id}`;\n for (const entry of checkpoint.items) {\n try {\n const restored = await runRestore(\n entry.id,\n entry.target_updated_at,\n {\n author: options.update.author,\n message: restoreMessage,\n force: options.update.force ?? true,\n },\n global,\n );\n rollbackRows.push({\n id: entry.id,\n status: \"restored\",\n changed_fields: restored.changed_fields,\n warnings: restored.warnings,\n });\n restoredIds.push(entry.id);\n } catch (error: unknown) {\n rollbackRows.push({\n id: entry.id,\n status: \"failed\",\n error: toErrorMessage(error),\n });\n }\n }\n const failedCount = rollbackRows.filter((row) => row.status === \"failed\").length;\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: checkpointPath,\n rollback_command: `pm update-many --rollback ${checkpoint.id}`,\n },\n restored_count: restoredIds.length,\n failed_count: failedCount,\n rows: rollbackRows,\n ids: restoredIds,\n };\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 const statusFilter = normalizeStatusFilter(options.status, statusRegistry);\n const listed = await runList(statusFilter, { ...options.list, includeBody: true }, global);\n const planned = listed.items.map((item) => buildPlannedItemDiff(item, options.update));\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(nowValue);\n const checkpointEnabled = options.checkpoint !== false;\n const checkpointItems: UpdateManyCheckpointItem[] = 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 const checkpointPayload: UpdateManyCheckpoint = {\n schema_version: UPDATE_MANY_CHECKPOINT_SCHEMA_VERSION,\n id: checkpointId,\n created_at: nowValue,\n author: resolveAuthor(options.update.author, \"unknown\"),\n status_filter: statusFilter ?? null,\n list_filters: listed.filters,\n update_options: updateSummary,\n items: checkpointItems,\n };\n const checkpointDir = checkpointDirectoryPath(pmRoot);\n await mkdir(checkpointDir, { recursive: true });\n const checkpointPath = checkpointFilePath(pmRoot, checkpointId);\n await writeFileAtomic(checkpointPath, `${JSON.stringify(checkpointPayload, null, 2)}\\n`);\n checkpointInfo = {\n id: checkpointId,\n created_at: nowValue,\n path: checkpointPath,\n rollback_command: `pm update-many --rollback ${checkpointId}`,\n };\n }\n\n const applyRows: UpdateManyApplyResultRow[] = [];\n const updatedIds: string[] = [];\n const updateMessage = 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 },\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((row) => row.status === \"updated\").length;\n const skippedCount = applyRows.filter((row) => row.status === \"skipped\").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"],
5
+ "mappings": "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",
6
+ "names": ["global", "failedCount"]
7
+ }
@@ -0,0 +1,271 @@
1
+ import {
2
+ readManagedExtensionState,
3
+ runExtension
4
+ } from "./chunk-OGZEG5TT.js";
5
+ import {
6
+ resolvePmPackageRootFromModule
7
+ } from "./chunk-EGUGFSNX.js";
8
+ import "./chunk-3HUE7XOF.js";
9
+ import "./chunk-PVNQLCIS.js";
10
+ import {
11
+ EXIT_CODE,
12
+ PmCliError,
13
+ pathExists,
14
+ resolveExtensionRoots,
15
+ resolvePmRoot
16
+ } from "./chunk-LSXGH6NE.js";
17
+
18
+ // dist/cli/commands/upgrade.js
19
+ import { execFile } from "node:child_process";
20
+ import fs from "node:fs/promises";
21
+ import path from "node:path";
22
+ import { promisify } from "node:util";
23
+ !(function() {
24
+ try {
25
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
26
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "adef1018-c477-5847-9357-11d6342b5ccf");
27
+ } catch (e2) {
28
+ }
29
+ })();
30
+ var execFileAsync = promisify(execFile);
31
+ var DEFAULT_CLI_PACKAGE = "@unbrained/pm-cli";
32
+ var DEFAULT_TAG = "latest";
33
+ function resolveScope(options) {
34
+ const projectLike = options.project === true || options.local === true;
35
+ const global2 = options.global === true;
36
+ if (projectLike && global2) {
37
+ throw new PmCliError('Options "--project/--local" and "--global" are mutually exclusive.', EXIT_CODE.USAGE);
38
+ }
39
+ return global2 ? "global" : "project";
40
+ }
41
+ function normalizeTarget(value) {
42
+ return value.trim().toLowerCase();
43
+ }
44
+ function packageRecordMatchesTarget(record, target) {
45
+ const normalizedTarget = normalizeTarget(target);
46
+ const values = [
47
+ record.name,
48
+ record.directory,
49
+ record.source.input,
50
+ record.source.location,
51
+ record.source.package,
52
+ record.source.repository,
53
+ record.source.owner && record.source.repo ? `${record.source.owner}/${record.source.repo}` : void 0
54
+ ];
55
+ return values.some((value) => typeof value === "string" && normalizeTarget(value) === normalizedTarget);
56
+ }
57
+ function resolveRoots(scope, global2) {
58
+ const pmRoot = resolvePmRoot(process.cwd(), global2.path);
59
+ const roots = resolveExtensionRoots(pmRoot, process.cwd());
60
+ return {
61
+ selected_root: scope === "global" ? roots.global : roots.project
62
+ };
63
+ }
64
+ async function defaultCommandRunner(command, args, options) {
65
+ try {
66
+ const result = await execFileAsync(command, args, {
67
+ cwd: options?.cwd,
68
+ encoding: "utf8"
69
+ });
70
+ return {
71
+ stdout: result.stdout ?? "",
72
+ stderr: result.stderr ?? ""
73
+ };
74
+ } catch (error) {
75
+ const stderr = typeof error === "object" && error !== null && "stderr" in error ? String(error.stderr ?? "") : "";
76
+ const message = stderr.trim().length > 0 ? stderr.trim() : error instanceof Error ? error.message : String(error);
77
+ throw new PmCliError(`Command failed: ${command} ${args.join(" ")}
78
+ ${message}`, EXIT_CODE.GENERIC_FAILURE);
79
+ }
80
+ }
81
+ async function readCurrentVersion() {
82
+ const packageJsonPath = path.join(resolvePmPackageRootFromModule(import.meta.url, ["../../.."]), "package.json");
83
+ try {
84
+ const parsed = JSON.parse(await fs.readFile(packageJsonPath, "utf8"));
85
+ return typeof parsed.version === "string" ? parsed.version : void 0;
86
+ } catch {
87
+ return void 0;
88
+ }
89
+ }
90
+ function resolveTag(options) {
91
+ return typeof options.tag === "string" && options.tag.trim().length > 0 ? options.tag.trim() : DEFAULT_TAG;
92
+ }
93
+ function resolveCliPackage(options) {
94
+ return typeof options.packageName === "string" && options.packageName.trim().length > 0 ? options.packageName.trim() : DEFAULT_CLI_PACKAGE;
95
+ }
96
+ async function upgradeCli(options, dryRun) {
97
+ const runner = options.commandRunner ?? defaultCommandRunner;
98
+ const packageName = resolveCliPackage(options);
99
+ const tag = resolveTag(options);
100
+ const target = `${packageName}@${tag}`;
101
+ const command = ["npm", "install", "-g", target];
102
+ if (options.repair === true) {
103
+ command.push("--force");
104
+ }
105
+ const beforeVersion = await readCurrentVersion();
106
+ const planned = {
107
+ requested: true,
108
+ status: "planned",
109
+ package: packageName,
110
+ target,
111
+ command,
112
+ before_version: beforeVersion,
113
+ repair: options.repair === true
114
+ };
115
+ if (dryRun) {
116
+ return planned;
117
+ }
118
+ try {
119
+ await runner(command[0], command.slice(1));
120
+ const verified = await runner("pm", ["--version"]);
121
+ return {
122
+ ...planned,
123
+ status: "updated",
124
+ after_version: verified.stdout.trim() || void 0
125
+ };
126
+ } catch (error) {
127
+ return {
128
+ ...planned,
129
+ status: "failed",
130
+ error: error instanceof Error ? error.message : String(error)
131
+ };
132
+ }
133
+ }
134
+ function isLocalNpmSpec(spec) {
135
+ return path.isAbsolute(spec) || spec.startsWith(".") || spec.startsWith("..") || spec.startsWith("file:");
136
+ }
137
+ function resolvePackageInstallSource(source, tag) {
138
+ if (source.kind === "npm") {
139
+ const rawSpec = source.input.startsWith("npm:") ? source.input.slice("npm:".length).trim() : source.input.trim();
140
+ if (!isLocalNpmSpec(rawSpec) && source.package && source.package.trim().length > 0) {
141
+ return `npm:${source.package.trim()}@${tag}`;
142
+ }
143
+ return source.input.startsWith("npm:") ? source.input : `npm:${source.input}`;
144
+ }
145
+ return source.input;
146
+ }
147
+ async function resolveRunnablePackageSource(source, tag) {
148
+ const installSource = resolvePackageInstallSource(source, tag);
149
+ if (source.kind !== "local") {
150
+ return installSource;
151
+ }
152
+ if (await pathExists(installSource)) {
153
+ return installSource;
154
+ }
155
+ if (await pathExists(source.location)) {
156
+ return source.location;
157
+ }
158
+ return installSource;
159
+ }
160
+ function packageCommandFor(source, installSource, scope, ref) {
161
+ const command = ["pm", "install", installSource, scope === "global" ? "--global" : "--project"];
162
+ if (source.kind === "github" && ref && ref.trim().length > 0) {
163
+ command.push("--ref", ref.trim());
164
+ }
165
+ return command;
166
+ }
167
+ async function readManagedRecords(scope, global2) {
168
+ const roots = resolveRoots(scope, global2);
169
+ const managedState = await readManagedExtensionState(roots.selected_root);
170
+ return managedState.state.entries.filter((entry) => entry.scope === scope);
171
+ }
172
+ async function refreshManagedRecord(scope, global2, record) {
173
+ const records = await readManagedRecords(scope, global2);
174
+ return records.find((candidate) => packageRecordMatchesTarget(candidate, record.name)) ?? records.find((candidate) => normalizeTarget(candidate.directory) === normalizeTarget(record.directory));
175
+ }
176
+ async function upgradePackageRecord(record, options, global2, scope, dryRun) {
177
+ const tag = resolveTag(options);
178
+ const installSource = await resolveRunnablePackageSource(record.source, tag);
179
+ const command = packageCommandFor(record.source, installSource, scope, record.source.ref);
180
+ const planned = {
181
+ name: record.name,
182
+ directory: record.directory,
183
+ scope,
184
+ source: record.source,
185
+ status: "planned",
186
+ command,
187
+ previous_version: record.manifest_version
188
+ };
189
+ if (dryRun) {
190
+ return planned;
191
+ }
192
+ try {
193
+ await runExtension(installSource, {
194
+ install: true,
195
+ project: scope === "project",
196
+ global: scope === "global",
197
+ ref: record.source.kind === "github" ? record.source.ref : void 0
198
+ }, global2);
199
+ const refreshed = await refreshManagedRecord(scope, global2, record);
200
+ return {
201
+ ...planned,
202
+ status: "updated",
203
+ installed_version: refreshed?.manifest_version
204
+ };
205
+ } catch (error) {
206
+ return {
207
+ ...planned,
208
+ status: "failed",
209
+ error: error instanceof Error ? error.message : String(error)
210
+ };
211
+ }
212
+ }
213
+ function summarize(cli, packages, includeCli, includePackages) {
214
+ const statuses = [includeCli ? cli.status : void 0, ...packages.map((entry) => entry.status)].filter((value) => typeof value === "string");
215
+ return {
216
+ requested_cli: includeCli,
217
+ requested_packages: includePackages,
218
+ planned: statuses.filter((status) => status === "planned").length,
219
+ updated: statuses.filter((status) => status === "updated").length,
220
+ skipped: statuses.filter((status) => status === "skipped").length,
221
+ failed: statuses.filter((status) => status === "failed").length
222
+ };
223
+ }
224
+ async function runUpgrade(target, options, global2) {
225
+ if (options.cliOnly === true && options.packagesOnly === true) {
226
+ throw new PmCliError('Options "--cli-only" and "--packages-only" are mutually exclusive.', EXIT_CODE.USAGE);
227
+ }
228
+ const scope = resolveScope(options);
229
+ const dryRun = options.dryRun === true;
230
+ const normalizedTarget = typeof target === "string" && target.trim().length > 0 ? target.trim() : void 0;
231
+ if (options.cliOnly === true && normalizedTarget) {
232
+ throw new PmCliError('A package target cannot be used with "--cli-only".', EXIT_CODE.USAGE);
233
+ }
234
+ const includeCli = options.packagesOnly === true || normalizedTarget ? false : true;
235
+ const includePackages = options.cliOnly === true ? false : true;
236
+ const cli = includeCli ? await upgradeCli(options, dryRun) : {
237
+ requested: false,
238
+ status: "skipped",
239
+ package: resolveCliPackage(options),
240
+ target: `${resolveCliPackage(options)}@${resolveTag(options)}`,
241
+ command: ["npm", "install", "-g", `${resolveCliPackage(options)}@${resolveTag(options)}`],
242
+ repair: options.repair === true,
243
+ reason: "not_requested"
244
+ };
245
+ let packageRecords = includePackages ? await readManagedRecords(scope, global2) : [];
246
+ if (normalizedTarget) {
247
+ packageRecords = packageRecords.filter((entry) => packageRecordMatchesTarget(entry, normalizedTarget));
248
+ if (packageRecords.length === 0) {
249
+ throw new PmCliError(`Managed package "${normalizedTarget}" was not found in ${scope} scope.`, EXIT_CODE.NOT_FOUND);
250
+ }
251
+ }
252
+ const packages = [];
253
+ for (const record of packageRecords) {
254
+ packages.push(await upgradePackageRecord(record, options, global2, scope, dryRun));
255
+ }
256
+ const summary = summarize(cli, packages, includeCli, includePackages);
257
+ return {
258
+ ok: summary.failed === 0,
259
+ action: "upgrade",
260
+ dry_run: dryRun,
261
+ scope,
262
+ target: normalizedTarget,
263
+ cli,
264
+ packages,
265
+ summary
266
+ };
267
+ }
268
+ export {
269
+ runUpgrade
270
+ };
271
+ //# sourceMappingURL=upgrade-H5HHM5UV.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../cli/commands/upgrade.ts"],
4
+ "sourcesContent": ["import { execFile } from \"node:child_process\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport {\n readManagedExtensionState,\n runExtension,\n type ExtensionScope,\n type ManagedExtensionRecord,\n type ManagedExtensionSource,\n} from \"./extension.js\";\nimport { resolveExtensionRoots } from \"../../core/extensions/loader.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { resolvePmRoot } from \"../../core/store/paths.js\";\nimport { resolvePmPackageRootFromModule } from \"../../core/packages/root.js\";\n\nconst execFileAsync = promisify(execFile);\nconst DEFAULT_CLI_PACKAGE = \"@unbrained/pm-cli\";\nconst DEFAULT_TAG = \"latest\";\n\nexport interface UpgradeCommandOptions {\n dryRun?: boolean;\n cliOnly?: boolean;\n packagesOnly?: boolean;\n project?: boolean;\n local?: boolean;\n global?: boolean;\n repair?: boolean;\n tag?: string;\n packageName?: string;\n commandRunner?: UpgradeCommandRunner;\n}\n\nexport interface UpgradeCommandRunnerResult {\n stdout: string;\n stderr: string;\n}\n\nexport type UpgradeCommandRunner = (\n command: string,\n args: string[],\n options?: { cwd?: string },\n) => Promise<UpgradeCommandRunnerResult>;\n\nexport interface UpgradeCliResult {\n requested: boolean;\n status: \"planned\" | \"updated\" | \"failed\" | \"skipped\";\n package: string;\n target: string;\n command: string[];\n before_version?: string;\n after_version?: string;\n repair: boolean;\n reason?: string;\n error?: string;\n}\n\nexport interface UpgradePackageResult {\n name: string;\n directory: string;\n scope: ExtensionScope;\n source: ManagedExtensionSource;\n status: \"planned\" | \"updated\" | \"failed\" | \"skipped\";\n command: string[];\n previous_version: string;\n installed_version?: string;\n reason?: string;\n error?: string;\n}\n\nexport interface UpgradeResult {\n ok: boolean;\n action: \"upgrade\";\n dry_run: boolean;\n scope: ExtensionScope;\n target?: string;\n cli: UpgradeCliResult;\n packages: UpgradePackageResult[];\n summary: {\n requested_cli: boolean;\n requested_packages: boolean;\n planned: number;\n updated: number;\n skipped: number;\n failed: number;\n };\n}\n\nfunction resolveScope(options: UpgradeCommandOptions): ExtensionScope {\n const projectLike = options.project === true || options.local === true;\n const global = options.global === true;\n if (projectLike && global) {\n throw new PmCliError('Options \"--project/--local\" and \"--global\" are mutually exclusive.', EXIT_CODE.USAGE);\n }\n return global ? \"global\" : \"project\";\n}\n\nfunction normalizeTarget(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction packageRecordMatchesTarget(record: ManagedExtensionRecord, target: string): boolean {\n const normalizedTarget = normalizeTarget(target);\n const values = [\n record.name,\n record.directory,\n record.source.input,\n record.source.location,\n record.source.package,\n record.source.repository,\n record.source.owner && record.source.repo ? `${record.source.owner}/${record.source.repo}` : undefined,\n ];\n return values.some((value) => typeof value === \"string\" && normalizeTarget(value) === normalizedTarget);\n}\n\nfunction resolveRoots(scope: ExtensionScope, global: GlobalOptions): {\n selected_root: string;\n} {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const roots = resolveExtensionRoots(pmRoot, process.cwd());\n return {\n selected_root: scope === \"global\" ? roots.global : roots.project,\n };\n}\n\nasync function defaultCommandRunner(\n command: string,\n args: string[],\n options?: { cwd?: string },\n): Promise<UpgradeCommandRunnerResult> {\n try {\n const result = await execFileAsync(command, args, {\n cwd: options?.cwd,\n encoding: \"utf8\",\n });\n return {\n stdout: result.stdout ?? \"\",\n stderr: result.stderr ?? \"\",\n };\n } catch (error: unknown) {\n const stderr = typeof error === \"object\" && error !== null && \"stderr\" in error\n ? String((error as { stderr?: unknown }).stderr ?? \"\")\n : \"\";\n const message = stderr.trim().length > 0 ? stderr.trim() : error instanceof Error ? error.message : String(error);\n throw new PmCliError(`Command failed: ${command} ${args.join(\" \")}\\n${message}`, EXIT_CODE.GENERIC_FAILURE);\n }\n}\n\nasync function readCurrentVersion(): Promise<string | undefined> {\n const packageJsonPath = path.join(resolvePmPackageRootFromModule(import.meta.url, [\"../../..\"]), \"package.json\");\n try {\n const parsed = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as { version?: unknown };\n return typeof parsed.version === \"string\" ? parsed.version : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction resolveTag(options: UpgradeCommandOptions): string {\n return typeof options.tag === \"string\" && options.tag.trim().length > 0 ? options.tag.trim() : DEFAULT_TAG;\n}\n\nfunction resolveCliPackage(options: UpgradeCommandOptions): string {\n return typeof options.packageName === \"string\" && options.packageName.trim().length > 0\n ? options.packageName.trim()\n : DEFAULT_CLI_PACKAGE;\n}\n\nasync function upgradeCli(options: UpgradeCommandOptions, dryRun: boolean): Promise<UpgradeCliResult> {\n const runner = options.commandRunner ?? defaultCommandRunner;\n const packageName = resolveCliPackage(options);\n const tag = resolveTag(options);\n const target = `${packageName}@${tag}`;\n const command = [\"npm\", \"install\", \"-g\", target];\n if (options.repair === true) {\n command.push(\"--force\");\n }\n const beforeVersion = await readCurrentVersion();\n const planned: UpgradeCliResult = {\n requested: true,\n status: \"planned\",\n package: packageName,\n target,\n command,\n before_version: beforeVersion,\n repair: options.repair === true,\n };\n if (dryRun) {\n return planned;\n }\n try {\n await runner(command[0]!, command.slice(1));\n const verified = await runner(\"pm\", [\"--version\"]);\n return {\n ...planned,\n status: \"updated\",\n after_version: verified.stdout.trim() || undefined,\n };\n } catch (error: unknown) {\n return {\n ...planned,\n status: \"failed\",\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nfunction isLocalNpmSpec(spec: string): boolean {\n return path.isAbsolute(spec) || spec.startsWith(\".\") || spec.startsWith(\"..\") || spec.startsWith(\"file:\");\n}\n\nfunction resolvePackageInstallSource(source: ManagedExtensionSource, tag: string): string {\n if (source.kind === \"npm\") {\n const rawSpec = source.input.startsWith(\"npm:\") ? source.input.slice(\"npm:\".length).trim() : source.input.trim();\n if (!isLocalNpmSpec(rawSpec) && source.package && source.package.trim().length > 0) {\n return `npm:${source.package.trim()}@${tag}`;\n }\n return source.input.startsWith(\"npm:\") ? source.input : `npm:${source.input}`;\n }\n return source.input;\n}\n\nasync function resolveRunnablePackageSource(source: ManagedExtensionSource, tag: string): Promise<string> {\n const installSource = resolvePackageInstallSource(source, tag);\n if (source.kind !== \"local\") {\n return installSource;\n }\n if (await pathExists(installSource)) {\n return installSource;\n }\n if (await pathExists(source.location)) {\n return source.location;\n }\n return installSource;\n}\n\nfunction packageCommandFor(source: ManagedExtensionSource, installSource: string, scope: ExtensionScope, ref?: string): string[] {\n const command = [\"pm\", \"install\", installSource, scope === \"global\" ? \"--global\" : \"--project\"];\n if (source.kind === \"github\" && ref && ref.trim().length > 0) {\n command.push(\"--ref\", ref.trim());\n }\n return command;\n}\n\nasync function readManagedRecords(scope: ExtensionScope, global: GlobalOptions): Promise<ManagedExtensionRecord[]> {\n const roots = resolveRoots(scope, global);\n const managedState = await readManagedExtensionState(roots.selected_root);\n return managedState.state.entries.filter((entry) => entry.scope === scope);\n}\n\nasync function refreshManagedRecord(\n scope: ExtensionScope,\n global: GlobalOptions,\n record: ManagedExtensionRecord,\n): Promise<ManagedExtensionRecord | undefined> {\n const records = await readManagedRecords(scope, global);\n return records.find((candidate) => packageRecordMatchesTarget(candidate, record.name)) ??\n records.find((candidate) => normalizeTarget(candidate.directory) === normalizeTarget(record.directory));\n}\n\nasync function upgradePackageRecord(\n record: ManagedExtensionRecord,\n options: UpgradeCommandOptions,\n global: GlobalOptions,\n scope: ExtensionScope,\n dryRun: boolean,\n): Promise<UpgradePackageResult> {\n const tag = resolveTag(options);\n const installSource = await resolveRunnablePackageSource(record.source, tag);\n const command = packageCommandFor(record.source, installSource, scope, record.source.ref);\n const planned: UpgradePackageResult = {\n name: record.name,\n directory: record.directory,\n scope,\n source: record.source,\n status: \"planned\",\n command,\n previous_version: record.manifest_version,\n };\n if (dryRun) {\n return planned;\n }\n try {\n await runExtension(\n installSource,\n {\n install: true,\n project: scope === \"project\",\n global: scope === \"global\",\n ref: record.source.kind === \"github\" ? record.source.ref : undefined,\n },\n global,\n );\n const refreshed = await refreshManagedRecord(scope, global, record);\n return {\n ...planned,\n status: \"updated\",\n installed_version: refreshed?.manifest_version,\n };\n } catch (error: unknown) {\n return {\n ...planned,\n status: \"failed\",\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nfunction summarize(\n cli: UpgradeCliResult,\n packages: UpgradePackageResult[],\n includeCli: boolean,\n includePackages: boolean,\n): UpgradeResult[\"summary\"] {\n const statuses = [includeCli ? cli.status : undefined, ...packages.map((entry) => entry.status)].filter(\n (value): value is UpgradeCliResult[\"status\"] => typeof value === \"string\",\n );\n return {\n requested_cli: includeCli,\n requested_packages: includePackages,\n planned: statuses.filter((status) => status === \"planned\").length,\n updated: statuses.filter((status) => status === \"updated\").length,\n skipped: statuses.filter((status) => status === \"skipped\").length,\n failed: statuses.filter((status) => status === \"failed\").length,\n };\n}\n\nexport async function runUpgrade(\n target: string | undefined,\n options: UpgradeCommandOptions,\n global: GlobalOptions,\n): Promise<UpgradeResult> {\n if (options.cliOnly === true && options.packagesOnly === true) {\n throw new PmCliError('Options \"--cli-only\" and \"--packages-only\" are mutually exclusive.', EXIT_CODE.USAGE);\n }\n\n const scope = resolveScope(options);\n const dryRun = options.dryRun === true;\n const normalizedTarget = typeof target === \"string\" && target.trim().length > 0 ? target.trim() : undefined;\n if (options.cliOnly === true && normalizedTarget) {\n throw new PmCliError('A package target cannot be used with \"--cli-only\".', EXIT_CODE.USAGE);\n }\n const includeCli = options.packagesOnly === true || normalizedTarget ? false : true;\n const includePackages = options.cliOnly === true ? false : true;\n const cli = includeCli\n ? await upgradeCli(options, dryRun)\n : {\n requested: false,\n status: \"skipped\",\n package: resolveCliPackage(options),\n target: `${resolveCliPackage(options)}@${resolveTag(options)}`,\n command: [\"npm\", \"install\", \"-g\", `${resolveCliPackage(options)}@${resolveTag(options)}`],\n repair: options.repair === true,\n reason: \"not_requested\",\n } as UpgradeCliResult;\n\n let packageRecords = includePackages ? await readManagedRecords(scope, global) : [];\n if (normalizedTarget) {\n packageRecords = packageRecords.filter((entry) => packageRecordMatchesTarget(entry, normalizedTarget));\n if (packageRecords.length === 0) {\n throw new PmCliError(`Managed package \"${normalizedTarget}\" was not found in ${scope} scope.`, EXIT_CODE.NOT_FOUND);\n }\n }\n\n const packages: UpgradePackageResult[] = [];\n for (const record of packageRecords) {\n packages.push(await upgradePackageRecord(record, options, global, scope, dryRun));\n }\n\n const summary = summarize(cli, packages, includeCli, includePackages);\n return {\n ok: summary.failed === 0,\n action: \"upgrade\",\n dry_run: dryRun,\n scope,\n target: normalizedTarget,\n cli,\n packages,\n summary,\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["global"]
7
+ }