@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/registration-helpers.ts"],
4
+ "sourcesContent": ["import type { Command } from \"commander\";\nimport { pathExists } from \"../core/fs/fs-utils.js\";\nimport { normalizeStatusInput } from \"../core/item/status.js\";\nimport { refreshSearchArtifactsForMutation } from \"../core/search/cache.js\";\nimport { shouldRunSearchRefreshInForeground } from \"../core/search/background-refresh.js\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { printError, printResult, writeStdout } from \"../core/output/output.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../core/store/paths.js\";\nimport { readSettings } from \"../core/store/settings.js\";\nimport {\n setActiveCommandResult,\n} from \"../core/extensions/index.js\";\nimport type { GlobalOptions } from \"../core/shared/command-types.js\";\nimport type { ItemStatus } from \"../types/index.js\";\nimport {\n ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS,\n CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS,\n CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,\n CREATE_COMMANDER_STRING_OPTION_CONTRACTS,\n LIST_COMMANDER_STRING_OPTION_CONTRACTS,\n SEARCH_COMMANDER_STRING_OPTION_CONTRACTS,\n UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,\n UPDATE_COMMANDER_STRING_OPTION_CONTRACTS,\n readFirstStringFromCommanderOptions,\n readStringArrayFromCommanderOptions,\n} from \"../sdk/cli-contracts.js\";\nimport type {\n ContextOptions,\n CreateCommandOptions,\n AggregateOptions,\n ListOptions,\n} from \"./commands/index.js\";\nimport type { runList, runActivity } from \"./commands/index.js\";\n\nexport {\n printError,\n printResult,\n writeStdout,\n};\n\nconst RESOLVED_GLOBAL_OPTIONS = Symbol(\"pm.resolvedGlobalOptions\");\n\ntype CommandWithResolvedGlobals = Command & {\n [RESOLVED_GLOBAL_OPTIONS]?: GlobalOptions;\n};\n\ninterface CommandOptionsReader {\n optsWithGlobals?: () => Record<string, unknown>;\n opts?: () => Record<string, unknown>;\n}\n\nfunction commandOptionsReader(command: unknown): CommandOptionsReader {\n return typeof command === \"object\" && command !== null ? command as CommandOptionsReader : {};\n}\n\nexport function setResolvedGlobalOptions(command: Command, globalOptions: GlobalOptions): void {\n (command as CommandWithResolvedGlobals)[RESOLVED_GLOBAL_OPTIONS] = { ...globalOptions };\n}\n\nexport function clearResolvedGlobalOptions(command: Command): void {\n delete (command as CommandWithResolvedGlobals)[RESOLVED_GLOBAL_OPTIONS];\n}\n\nexport function getGlobalOptions(command: Command): GlobalOptions {\n const resolved = (command as CommandWithResolvedGlobals)[RESOLVED_GLOBAL_OPTIONS];\n if (resolved) {\n return { ...resolved };\n }\n const reader = commandOptionsReader(command);\n const opts = typeof reader.optsWithGlobals === \"function\"\n ? reader.optsWithGlobals()\n : typeof reader.opts === \"function\"\n ? reader.opts()\n : {};\n return {\n json: opts.json === true ? true : undefined,\n quiet: Boolean(opts.quiet),\n noChangedFields: opts.changedFields === false,\n path: typeof opts.path === \"string\" ? opts.path : undefined,\n noExtensions: opts.extensions === false,\n noPager: Boolean(opts.noPager),\n profile: Boolean(opts.profile),\n };\n}\n\nexport function getCommandPath(command: Command): string {\n const parts: string[] = [];\n let current: Command | null = command;\n while (current?.parent) {\n parts.unshift(current.name());\n current = current.parent;\n }\n return parts.join(\" \");\n}\n\nexport async function applyDefaultOutputFormat(globalOptions: GlobalOptions): Promise<GlobalOptions> {\n if (globalOptions.json === true) {\n return globalOptions;\n }\n const pmRoot = resolvePmRoot(process.cwd(), globalOptions.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n return globalOptions;\n }\n const settings = await readSettings(pmRoot);\n return {\n ...globalOptions,\n defaultOutputFormat: settings.output.default_format,\n };\n}\n\nexport function collect(value: string, previous: string[] | undefined): string[] {\n const next = previous ?? [];\n next.push(value);\n return next;\n}\n\nfunction pushOptionalValueFlag(args: string[], flag: string, value: unknown): void {\n if (typeof value !== \"string\") {\n return;\n }\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return;\n }\n args.push(flag, trimmed);\n}\n\nfunction pushOptionalBooleanFlag(args: string[], flag: string, value: unknown): void {\n if (value === true) {\n args.push(flag);\n }\n}\n\nfunction pushRepeatableValueFlag(args: string[], flag: string, values: unknown): void {\n if (!Array.isArray(values)) {\n return;\n }\n for (const value of values) {\n if (typeof value !== \"string\") {\n continue;\n }\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n continue;\n }\n args.push(flag, trimmed);\n }\n}\n\nexport function buildBackgroundTestCommandArgs(id: string, options: Record<string, unknown>): string[] {\n const args: string[] = [\"test\", id, \"--run\", \"--json\", \"--progress\"];\n pushRepeatableValueFlag(args, \"--add\", options.add);\n pushRepeatableValueFlag(args, \"--remove\", options.remove);\n pushOptionalValueFlag(args, \"--timeout\", options.timeout);\n pushRepeatableValueFlag(args, \"--env-set\", options.envSet);\n pushRepeatableValueFlag(args, \"--env-clear\", options.envClear);\n pushOptionalBooleanFlag(args, \"--shared-host-safe\", options.sharedHostSafe);\n pushOptionalValueFlag(args, \"--pm-context\", options.pmContext);\n pushOptionalBooleanFlag(args, \"--override-linked-pm-context\", options.overrideLinkedPmContext);\n pushOptionalBooleanFlag(args, \"--fail-on-context-mismatch\", options.failOnContextMismatch);\n pushOptionalBooleanFlag(args, \"--fail-on-skipped\", options.failOnSkipped);\n pushOptionalBooleanFlag(args, \"--fail-on-empty-test-run\", options.failOnEmptyTestRun);\n pushOptionalBooleanFlag(args, \"--require-assertions-for-pm\", options.requireAssertionsForPm);\n pushOptionalBooleanFlag(args, \"--check-context\", options.checkContext);\n pushOptionalBooleanFlag(args, \"--auto-pm-context\", options.autoPmContext);\n pushOptionalValueFlag(args, \"--author\", options.author);\n pushOptionalValueFlag(args, \"--message\", options.message);\n pushOptionalBooleanFlag(args, \"--force\", options.force);\n return args;\n}\n\nexport function buildBackgroundTestAllCommandArgs(options: Record<string, unknown>): string[] {\n const args: string[] = [\"test-all\", \"--json\", \"--progress\"];\n pushOptionalValueFlag(args, \"--status\", options.status);\n pushOptionalValueFlag(args, \"--limit\", options.limit);\n pushOptionalValueFlag(args, \"--offset\", options.offset);\n pushOptionalValueFlag(args, \"--timeout\", options.timeout);\n pushRepeatableValueFlag(args, \"--env-set\", options.envSet);\n pushRepeatableValueFlag(args, \"--env-clear\", options.envClear);\n pushOptionalBooleanFlag(args, \"--shared-host-safe\", options.sharedHostSafe);\n pushOptionalValueFlag(args, \"--pm-context\", options.pmContext);\n pushOptionalBooleanFlag(args, \"--override-linked-pm-context\", options.overrideLinkedPmContext);\n pushOptionalBooleanFlag(args, \"--fail-on-context-mismatch\", options.failOnContextMismatch);\n pushOptionalBooleanFlag(args, \"--fail-on-skipped\", options.failOnSkipped);\n pushOptionalBooleanFlag(args, \"--fail-on-empty-test-run\", options.failOnEmptyTestRun);\n pushOptionalBooleanFlag(args, \"--require-assertions-for-pm\", options.requireAssertionsForPm);\n pushOptionalBooleanFlag(args, \"--check-context\", options.checkContext);\n pushOptionalBooleanFlag(args, \"--auto-pm-context\", options.autoPmContext);\n return args;\n}\n\nexport function formatHookWarnings(warnings: string[]): string {\n return warnings.join(\",\");\n}\n\nexport function normalizeCreateOptions(\n commandOptions: Record<string, unknown>,\n options: { requireType?: boolean } = {},\n): CreateCommandOptions {\n const readCreateString = (target: string): string | undefined =>\n readFirstStringFromCommanderOptions(\n commandOptions,\n CREATE_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {\n target,\n keys: [target],\n },\n );\n const readCreateList = (target: string): string[] | undefined =>\n readStringArrayFromCommanderOptions(\n commandOptions,\n CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {\n target,\n keys: [target],\n },\n );\n\n const type = readCreateString(\"type\");\n if (options.requireType !== false && type === undefined) {\n throw new PmCliError(\n \"Missing required option --type <value>. Why required: create resolves runtime schema fields/workflow from item type. Retry: add --type <built-in or configured custom type> (example: --type Task).\",\n EXIT_CODE.USAGE,\n );\n }\n\n const normalized: Record<string, unknown> = {\n title: readCreateString(\"title\"),\n description: readCreateString(\"description\"),\n type,\n template: readCreateString(\"template\"),\n createMode: readCreateString(\"createMode\"),\n schedulePreset: readCreateString(\"schedulePreset\"),\n status: readCreateString(\"status\"),\n priority: readCreateString(\"priority\"),\n tags: readCreateString(\"tags\"),\n addTags: readCreateList(\"addTags\"),\n body: readCreateString(\"body\"),\n deadline: readCreateString(\"deadline\"),\n estimatedMinutes: readCreateString(\"estimatedMinutes\"),\n acceptanceCriteria: readCreateString(\"acceptanceCriteria\"),\n definitionOfReady: readCreateString(\"definitionOfReady\"),\n order: readCreateString(\"order\"),\n rank: readCreateString(\"rank\"),\n goal: readCreateString(\"goal\"),\n objective: readCreateString(\"objective\"),\n value: readCreateString(\"value\"),\n impact: readCreateString(\"impact\"),\n outcome: readCreateString(\"outcome\"),\n whyNow: readCreateString(\"whyNow\"),\n author: readCreateString(\"author\"),\n message: readCreateString(\"message\"),\n assignee: readCreateString(\"assignee\"),\n parent: readCreateString(\"parent\"),\n reviewer: readCreateString(\"reviewer\"),\n risk: readCreateString(\"risk\"),\n confidence: readCreateString(\"confidence\"),\n sprint: readCreateString(\"sprint\"),\n release: readCreateString(\"release\"),\n blockedBy: readCreateString(\"blockedBy\"),\n blockedReason: readCreateString(\"blockedReason\"),\n unblockNote: readCreateString(\"unblockNote\"),\n reporter: readCreateString(\"reporter\"),\n severity: readCreateString(\"severity\"),\n environment: readCreateString(\"environment\"),\n reproSteps: readCreateString(\"reproSteps\"),\n resolution: readCreateString(\"resolution\"),\n expectedResult: readCreateString(\"expectedResult\"),\n actualResult: readCreateString(\"actualResult\"),\n affectedVersion: readCreateString(\"affectedVersion\"),\n fixedVersion: readCreateString(\"fixedVersion\"),\n component: readCreateString(\"component\"),\n regression: readCreateString(\"regression\"),\n customerImpact: readCreateString(\"customerImpact\"),\n dep: readCreateList(\"dep\"),\n comment: readCreateList(\"comment\"),\n note: readCreateList(\"note\"),\n learning: readCreateList(\"learning\"),\n file: readCreateList(\"file\"),\n test: readCreateList(\"test\"),\n doc: readCreateList(\"doc\"),\n reminder: readCreateList(\"reminder\"),\n event: readCreateList(\"event\"),\n typeOption: readCreateList(\"typeOption\"),\n unset: readCreateList(\"unset\"),\n clearDeps: commandOptions.clearDeps === true ? true : undefined,\n clearComments: commandOptions.clearComments === true ? true : undefined,\n clearNotes: commandOptions.clearNotes === true ? true : undefined,\n clearLearnings: commandOptions.clearLearnings === true ? true : undefined,\n clearFiles: commandOptions.clearFiles === true ? true : undefined,\n clearTests: commandOptions.clearTests === true ? true : undefined,\n clearDocs: commandOptions.clearDocs === true ? true : undefined,\n clearReminders: commandOptions.clearReminders === true ? true : undefined,\n clearEvents: commandOptions.clearEvents === true ? true : undefined,\n clearTypeOptions: commandOptions.clearTypeOptions === true ? true : undefined,\n };\n for (const [key, value] of Object.entries(commandOptions)) {\n if (Object.hasOwn(normalized, key)) {\n continue;\n }\n normalized[key] = value;\n }\n return normalized as CreateCommandOptions;\n}\n\nexport function normalizeUpdateOptions(commandOptions: Record<string, unknown>): Record<string, unknown> {\n const readUpdateString = (target: string): string | undefined =>\n readFirstStringFromCommanderOptions(\n commandOptions,\n UPDATE_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {\n target,\n keys: [target],\n },\n );\n const readUpdateList = (target: string): string[] | undefined =>\n readStringArrayFromCommanderOptions(\n commandOptions,\n UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {\n target,\n keys: [target],\n },\n );\n\n const normalized: Record<string, unknown> = {\n title: readUpdateString(\"title\"),\n description: readUpdateString(\"description\"),\n body: readUpdateString(\"body\"),\n status: readUpdateString(\"status\"),\n closeReason: readUpdateString(\"closeReason\"),\n priority: readUpdateString(\"priority\"),\n type: readUpdateString(\"type\"),\n tags: readUpdateString(\"tags\"),\n addTags: readUpdateList(\"addTags\"),\n removeTags: readUpdateList(\"removeTags\"),\n deadline: readUpdateString(\"deadline\"),\n estimatedMinutes: readUpdateString(\"estimatedMinutes\"),\n acceptanceCriteria: readUpdateString(\"acceptanceCriteria\"),\n definitionOfReady: readUpdateString(\"definitionOfReady\"),\n order: readUpdateString(\"order\"),\n rank: readUpdateString(\"rank\"),\n goal: readUpdateString(\"goal\"),\n objective: readUpdateString(\"objective\"),\n value: readUpdateString(\"value\"),\n impact: readUpdateString(\"impact\"),\n outcome: readUpdateString(\"outcome\"),\n whyNow: readUpdateString(\"whyNow\"),\n author: readUpdateString(\"author\"),\n message: readUpdateString(\"message\"),\n force: Boolean(commandOptions.force),\n allowAuditUpdate:\n commandOptions.allowAuditUpdate === true || commandOptions.allow_audit_update === true ? true : undefined,\n allowAuditDepUpdate:\n commandOptions.allowAuditDepUpdate === true || commandOptions.allow_audit_dep_update === true ? true : undefined,\n assignee: readUpdateString(\"assignee\"),\n parent: readUpdateString(\"parent\"),\n reviewer: readUpdateString(\"reviewer\"),\n risk: readUpdateString(\"risk\"),\n confidence: readUpdateString(\"confidence\"),\n sprint: readUpdateString(\"sprint\"),\n release: readUpdateString(\"release\"),\n blockedBy: readUpdateString(\"blockedBy\"),\n blockedReason: readUpdateString(\"blockedReason\"),\n unblockNote: readUpdateString(\"unblockNote\"),\n reporter: readUpdateString(\"reporter\"),\n severity: readUpdateString(\"severity\"),\n environment: readUpdateString(\"environment\"),\n reproSteps: readUpdateString(\"reproSteps\"),\n resolution: readUpdateString(\"resolution\"),\n expectedResult: readUpdateString(\"expectedResult\"),\n actualResult: readUpdateString(\"actualResult\"),\n affectedVersion: readUpdateString(\"affectedVersion\"),\n fixedVersion: readUpdateString(\"fixedVersion\"),\n component: readUpdateString(\"component\"),\n regression: readUpdateString(\"regression\"),\n customerImpact: readUpdateString(\"customerImpact\"),\n dep: readUpdateList(\"dep\"),\n depRemove: readUpdateList(\"depRemove\"),\n replaceDeps: commandOptions.replaceDeps === true ? true : undefined,\n replaceTests: commandOptions.replaceTests === true ? true : undefined,\n comment: readUpdateList(\"comment\"),\n note: readUpdateList(\"note\"),\n learning: readUpdateList(\"learning\"),\n file: readUpdateList(\"file\"),\n test: readUpdateList(\"test\"),\n doc: readUpdateList(\"doc\"),\n reminder: readUpdateList(\"reminder\"),\n event: readUpdateList(\"event\"),\n typeOption: readUpdateList(\"typeOption\"),\n unset: readUpdateList(\"unset\"),\n clearDeps: commandOptions.clearDeps === true ? true : undefined,\n clearComments: commandOptions.clearComments === true ? true : undefined,\n clearNotes: commandOptions.clearNotes === true ? true : undefined,\n clearLearnings: commandOptions.clearLearnings === true ? true : undefined,\n clearFiles: commandOptions.clearFiles === true ? true : undefined,\n clearTests: commandOptions.clearTests === true ? true : undefined,\n clearDocs: commandOptions.clearDocs === true ? true : undefined,\n clearReminders: commandOptions.clearReminders === true ? true : undefined,\n clearEvents: commandOptions.clearEvents === true ? true : undefined,\n clearTypeOptions: commandOptions.clearTypeOptions === true ? true : undefined,\n };\n for (const [key, value] of Object.entries(commandOptions)) {\n if (Object.hasOwn(normalized, key)) {\n continue;\n }\n normalized[key] = value;\n }\n return normalized;\n}\n\nconst UPDATE_MANY_CONTROL_OPTION_KEYS = new Set<string>([\n \"filterStatus\",\n \"filterType\",\n \"filterTag\",\n \"filterPriority\",\n \"filterDeadlineBefore\",\n \"filterDeadlineAfter\",\n \"filterAssignee\",\n \"filterAssigneeFilter\",\n \"filterAssignee_filter\",\n \"filterParent\",\n \"filterSprint\",\n \"filterRelease\",\n \"limit\",\n \"offset\",\n \"dryRun\",\n \"rollback\",\n \"checkpoint\",\n]);\n\nexport function extractUpdateManyMutationOptionSource(commandOptions: Record<string, unknown>): Record<string, unknown> {\n const mutationOptions: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(commandOptions)) {\n if (UPDATE_MANY_CONTROL_OPTION_KEYS.has(key)) {\n continue;\n }\n mutationOptions[key] = value;\n }\n return mutationOptions;\n}\n\nfunction readListOptionString(options: Record<string, unknown>, target: string): string | undefined {\n return readFirstStringFromCommanderOptions(\n options,\n LIST_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {\n target,\n keys: [target],\n },\n );\n}\n\nexport function normalizeListOptions(options: Record<string, unknown>): ListOptions {\n const normalized: Record<string, unknown> = {\n status: readListOptionString(options, \"status\"),\n type: readListOptionString(options, \"type\"),\n tag: readListOptionString(options, \"tag\"),\n priority: readListOptionString(options, \"priority\"),\n deadlineBefore: readListOptionString(options, \"deadlineBefore\"),\n deadlineAfter: readListOptionString(options, \"deadlineAfter\"),\n assignee: readListOptionString(options, \"assignee\"),\n assigneeFilter: readListOptionString(options, \"assigneeFilter\"),\n parent: readListOptionString(options, \"parent\"),\n sprint: readListOptionString(options, \"sprint\"),\n release: readListOptionString(options, \"release\"),\n limit: readListOptionString(options, \"limit\"),\n offset: readListOptionString(options, \"offset\"),\n includeBody: options.includeBody === true ? true : undefined,\n compact: options.compact === true ? true : undefined,\n brief: options.brief === true ? true : undefined,\n full: options.full === true ? true : undefined,\n fields: readListOptionString(options, \"fields\"),\n sort: readListOptionString(options, \"sort\"),\n order: readListOptionString(options, \"order\"),\n };\n for (const [key, value] of Object.entries(options)) {\n if (Object.hasOwn(normalized, key)) {\n continue;\n }\n normalized[key] = value;\n }\n return normalized as ListOptions;\n}\n\nexport function normalizeAggregateOptions(options: Record<string, unknown>): AggregateOptions {\n return {\n groupBy: typeof options.groupBy === \"string\" ? options.groupBy : undefined,\n count: options.count === true ? true : undefined,\n includeUnparented: options.includeUnparented === true || options.include_unparented === true,\n status: typeof options.status === \"string\" ? options.status : undefined,\n type: readListOptionString(options, \"type\"),\n tag: readListOptionString(options, \"tag\"),\n priority: readListOptionString(options, \"priority\"),\n deadlineBefore: readListOptionString(options, \"deadlineBefore\"),\n deadlineAfter: readListOptionString(options, \"deadlineAfter\"),\n assignee: readListOptionString(options, \"assignee\"),\n assigneeFilter: readListOptionString(options, \"assigneeFilter\"),\n parent: readListOptionString(options, \"parent\"),\n sprint: readListOptionString(options, \"sprint\"),\n release: readListOptionString(options, \"release\"),\n };\n}\n\ntype ListCommandResult = Awaited<ReturnType<typeof runList>>;\n\nexport function printListJsonStream(commandName: string, result: ListCommandResult, globalOptions: GlobalOptions): void {\n setActiveCommandResult(result);\n if (globalOptions.quiet) {\n return;\n }\n const warnings = Array.isArray(result.warnings) ? result.warnings : [];\n const metaPayload: Record<string, unknown> = {\n type: \"meta\",\n command: commandName,\n count: result.count,\n now: result.now,\n filters: result.filters,\n };\n if (warnings.length > 0) {\n metaPayload.warnings = warnings;\n }\n if (!writeStdout(`${JSON.stringify(metaPayload)}\\n`)) {\n return;\n }\n for (const item of result.items) {\n if (!writeStdout(`${JSON.stringify({ type: \"item\", command: commandName, item })}\\n`)) {\n return;\n }\n }\n writeStdout(`${JSON.stringify({ type: \"end\", command: commandName, count: result.count })}\\n`);\n}\n\ntype ActivityCommandResult = Awaited<ReturnType<typeof runActivity>>;\n\nexport function printActivityJsonStream(\n result: ActivityCommandResult,\n options: {\n id?: string;\n op?: string;\n author?: string;\n from?: string;\n to?: string;\n limit?: string;\n },\n globalOptions: GlobalOptions,\n): void {\n setActiveCommandResult(result);\n if (globalOptions.quiet) {\n return;\n }\n const metaPayload = {\n type: \"meta\",\n command: \"activity\",\n count: result.count,\n filters: {\n id: options.id ?? null,\n op: options.op ?? null,\n author: options.author ?? null,\n from: options.from ?? null,\n to: options.to ?? null,\n limit: options.limit ?? null,\n },\n };\n if (!writeStdout(`${JSON.stringify(metaPayload)}\\n`)) {\n return;\n }\n const entries = result.compact && result.compact_activity ? result.compact_activity : result.activity;\n for (const entry of entries) {\n if (!writeStdout(`${JSON.stringify({ type: \"entry\", command: \"activity\", entry })}\\n`)) {\n return;\n }\n }\n writeStdout(`${JSON.stringify({ type: \"end\", command: \"activity\", count: result.count })}\\n`);\n}\n\nexport function normalizeSearchOptions(options: Record<string, unknown>): Record<string, unknown> {\n const readSearchString = (target: string): string | undefined =>\n readFirstStringFromCommanderOptions(\n options,\n SEARCH_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {\n target,\n keys: [target],\n },\n );\n const fields = readSearchString(\"fields\");\n const compactRequested = options.compact === true;\n const fullRequested = options.full === true;\n const defaultCompact = !compactRequested && !fullRequested && fields === undefined;\n const mode = options.semantic === true ? \"semantic\"\n : options.hybrid === true ? \"hybrid\"\n : readSearchString(\"mode\");\n const normalized: Record<string, unknown> = {\n mode,\n includeLinked: options.includeLinked === true ? true : undefined,\n titleExact: options.titleExact === true ? true : undefined,\n phraseExact: options.phraseExact === true ? true : undefined,\n type: readSearchString(\"type\"),\n tag: readSearchString(\"tag\"),\n priority: readSearchString(\"priority\"),\n deadlineBefore: readSearchString(\"deadlineBefore\"),\n deadlineAfter: readSearchString(\"deadlineAfter\"),\n limit: readSearchString(\"limit\"),\n fields,\n compact: compactRequested || defaultCompact ? true : undefined,\n full: fullRequested ? true : undefined,\n };\n for (const [key, value] of Object.entries(options)) {\n if (Object.hasOwn(normalized, key)) {\n continue;\n }\n normalized[key] = value;\n }\n return normalized;\n}\n\nexport function normalizeSearchKeywordsInput(keywords: string[]): string {\n const query = keywords\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n .join(\" \");\n if (query.length === 0) {\n throw new PmCliError(\"Search query must not be empty\", EXIT_CODE.USAGE);\n }\n return query;\n}\n\n\nexport function normalizeActivityOptions(options: Record<string, unknown>): {\n id?: string;\n op?: string;\n author?: string;\n from?: string;\n to?: string;\n limit?: string;\n compact?: boolean;\n} {\n const readActivityString = (target: string): string | undefined =>\n readFirstStringFromCommanderOptions(\n options,\n ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {\n target,\n keys: [target],\n },\n );\n return {\n id: readActivityString(\"id\"),\n op: readActivityString(\"op\"),\n author: readActivityString(\"author\"),\n from: readActivityString(\"from\"),\n to: readActivityString(\"to\"),\n limit: readActivityString(\"limit\"),\n compact: options.full === true ? false : options.compact === false ? false : true,\n };\n}\n\nexport function resolveActivityStreamMode(raw: unknown): boolean {\n if (raw === true) {\n return true;\n }\n if (raw === false || raw === undefined || raw === null) {\n return false;\n }\n if (typeof raw === \"string\") {\n const normalized = raw.trim().toLowerCase();\n if (\n normalized.length === 0 ||\n normalized === \"rows\" ||\n normalized === \"ndjson\" ||\n normalized === \"jsonl\" ||\n normalized === \"true\" ||\n normalized === \"1\" ||\n normalized === \"yes\" ||\n normalized === \"on\"\n ) {\n return true;\n }\n if (normalized === \"false\" || normalized === \"off\" || normalized === \"none\" || normalized === \"0\") {\n return false;\n }\n }\n throw new PmCliError(\"Activity --stream accepts rows|ndjson|jsonl (or no value)\", EXIT_CODE.USAGE);\n}\n\nexport function normalizeContextOptions(options: Record<string, unknown>): ContextOptions {\n const readContextString = (target: string): string | undefined =>\n readFirstStringFromCommanderOptions(\n options,\n CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {\n target,\n keys: [target],\n },\n );\n const sectionRaw = options.section;\n const section: string[] | undefined = Array.isArray(sectionRaw)\n ? (sectionRaw as string[]).filter((v) => typeof v === \"string\" && v.trim().length > 0)\n : typeof sectionRaw === \"string\" && sectionRaw.trim().length > 0\n ? [sectionRaw]\n : undefined;\n const normalized: Record<string, unknown> = {\n date: readContextString(\"date\"),\n from: readContextString(\"from\"),\n to: readContextString(\"to\"),\n past: options.past === true ? true : undefined,\n type: readContextString(\"type\"),\n tag: readContextString(\"tag\"),\n priority: readContextString(\"priority\"),\n assignee: readContextString(\"assignee\"),\n assigneeFilter: readContextString(\"assigneeFilter\"),\n sprint: readContextString(\"sprint\"),\n release: readContextString(\"release\"),\n limit: readContextString(\"limit\"),\n format: readContextString(\"format\"),\n depth: readContextString(\"depth\"),\n section: section && section.length > 0 ? section : undefined,\n activityLimit: readContextString(\"activityLimit\"),\n staleThreshold: readContextString(\"staleThreshold\"),\n };\n for (const [key, value] of Object.entries(options)) {\n if (Object.hasOwn(normalized, key)) {\n continue;\n }\n normalized[key] = value;\n }\n return normalized as ContextOptions;\n}\n\nfunction collectMutationItemIds(result: unknown): string[] {\n if (!result || typeof result !== \"object\") {\n return [];\n }\n const record = result as Record<string, unknown>;\n const ids = new Set<string>();\n const pushId = (value: unknown): void => {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n if (normalized.length === 0) {\n return;\n }\n ids.add(normalized);\n };\n\n pushId(record.id);\n\n const item = record.item;\n if (item && typeof item === \"object\") {\n pushId((item as { id?: unknown }).id);\n }\n\n const explicitIds = record.ids;\n if (Array.isArray(explicitIds)) {\n for (const candidate of explicitIds) {\n pushId(candidate);\n }\n }\n\n const items = record.items;\n if (Array.isArray(items)) {\n for (const candidate of items) {\n if (!candidate || typeof candidate !== \"object\") {\n continue;\n }\n pushId((candidate as { id?: unknown }).id);\n }\n }\n\n return [...ids].sort((left, right) => left.localeCompare(right));\n}\n\nexport async function invalidateSearchCachesForMutation(globalOptions: GlobalOptions, result?: unknown): Promise<void> {\n const pmRoot = resolvePmRoot(process.cwd(), globalOptions.path);\n const refreshResult = await refreshSearchArtifactsForMutation(pmRoot, collectMutationItemIds(result), {\n background: !shouldRunSearchRefreshInForeground(),\n });\n if (globalOptions.profile && refreshResult.warnings.length > 0) {\n printError(`profile:search_refresh_warnings=${formatHookWarnings(refreshResult.warnings)}`);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,176 @@
1
+ import {
2
+ EXIT_CODE,
3
+ PmCliError
4
+ } from "./chunk-LSXGH6NE.js";
5
+
6
+ // dist/core/shared/time.js
7
+ !(function() {
8
+ try {
9
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
10
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "b41467c9-6c80-5391-b9eb-3d13f170a105");
11
+ } catch (e2) {
12
+ }
13
+ })();
14
+ var RELATIVE_DEADLINE = /^([+-]?)(\d+)([hdwm])$/i;
15
+ var COMPOUND_RELATIVE_DEADLINE = /^[+-]?\d+[hdwm](?:[+-]\d+[hdwm])+$/i;
16
+ var COMPACT_DATE = /^(\d{4})(\d{2})(\d{2})$/;
17
+ var COMPACT_DATETIME = /^(\d{4})(\d{2})(\d{2})(?:[T\s]?)(\d{2})(\d{2})(\d{2})?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
18
+ var HYPHEN_TIME = /^(\d{4}-\d{2}-\d{2})[T\s](\d{2})-(\d{2})(?:-(\d{2}))?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
19
+ var COMPACT_TIME = /^(\d{4}-\d{2}-\d{2})[T\s](\d{2})(\d{2})(\d{2})?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
20
+ function nowIso() {
21
+ return (/* @__PURE__ */ new Date()).toISOString();
22
+ }
23
+ function isTimestampLiteral(input) {
24
+ return Number.isFinite(Date.parse(input));
25
+ }
26
+ function compareTimestampStrings(left, right) {
27
+ const leftMs = Date.parse(left);
28
+ const rightMs = Date.parse(right);
29
+ if (Number.isFinite(leftMs) && Number.isFinite(rightMs) && leftMs !== rightMs) {
30
+ return leftMs - rightMs;
31
+ }
32
+ return left.localeCompare(right);
33
+ }
34
+ function normalizeFraction(raw) {
35
+ if (!raw)
36
+ return "";
37
+ const digits = raw.slice(1);
38
+ return `.${digits.padEnd(3, "0").slice(0, 3)}`;
39
+ }
40
+ function normalizeOffset(raw) {
41
+ if (!raw)
42
+ return "";
43
+ if (raw.toUpperCase() === "Z")
44
+ return "Z";
45
+ const compact = /^([+-]\d{2})(\d{2})$/.exec(raw);
46
+ if (compact)
47
+ return `${compact[1]}:${compact[2]}`;
48
+ return raw;
49
+ }
50
+ function normalizeTimestampCandidates(input) {
51
+ const candidates = [];
52
+ const push = (value) => {
53
+ if (!value || value === input || candidates.includes(value))
54
+ return;
55
+ candidates.push(value);
56
+ };
57
+ const compactDate = COMPACT_DATE.exec(input);
58
+ if (compactDate) {
59
+ const [, year, month, day] = compactDate;
60
+ push(`${year}-${month}-${day}`);
61
+ }
62
+ const compactDateTime = COMPACT_DATETIME.exec(input);
63
+ if (compactDateTime) {
64
+ const [, year, month, day, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactDateTime;
65
+ const second = secondRaw ? `:${secondRaw}` : "";
66
+ push(`${year}-${month}-${day}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
67
+ }
68
+ const hyphenTime = HYPHEN_TIME.exec(input);
69
+ if (hyphenTime) {
70
+ const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = hyphenTime;
71
+ const second = secondRaw ? `:${secondRaw}` : "";
72
+ push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
73
+ }
74
+ const compactTime = COMPACT_TIME.exec(input);
75
+ if (compactTime) {
76
+ const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactTime;
77
+ const second = secondRaw ? `:${secondRaw}` : "";
78
+ push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
79
+ }
80
+ const spaceDateTime = /^(\d{4}-\d{2}-\d{2})\s+(.+)$/.exec(input);
81
+ if (spaceDateTime) {
82
+ const [, datePart, timePart] = spaceDateTime;
83
+ push(`${datePart}T${timePart}`);
84
+ }
85
+ return candidates;
86
+ }
87
+ function parseTimestampWithFallbacks(input) {
88
+ const direct = Date.parse(input);
89
+ if (Number.isFinite(direct))
90
+ return direct;
91
+ for (const candidate of normalizeTimestampCandidates(input)) {
92
+ const parsed = Date.parse(candidate);
93
+ if (Number.isFinite(parsed))
94
+ return parsed;
95
+ }
96
+ return Number.NaN;
97
+ }
98
+ function daysInUtcMonth(year, monthIndex) {
99
+ return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();
100
+ }
101
+ var MONTH_NAMES = [
102
+ "January",
103
+ "February",
104
+ "March",
105
+ "April",
106
+ "May",
107
+ "June",
108
+ "July",
109
+ "August",
110
+ "September",
111
+ "October",
112
+ "November",
113
+ "December"
114
+ ];
115
+ var LEADING_HYPHEN_DATE = /^(\d{4})-(\d{2})-(\d{2})/;
116
+ var LEADING_COMPACT_DATE = /^(\d{4})(\d{2})(\d{2})(?:[T ]?\d{2}|$)/;
117
+ function assertRealCalendarDate(originalInput, trimmed, fieldLabel) {
118
+ const match = LEADING_HYPHEN_DATE.exec(trimmed) ?? LEADING_COMPACT_DATE.exec(trimmed);
119
+ if (!match) {
120
+ return;
121
+ }
122
+ const year = Number.parseInt(match[1], 10);
123
+ const month = Number.parseInt(match[2], 10);
124
+ const day = Number.parseInt(match[3], 10);
125
+ const label = fieldLabel?.trim() || "deadline";
126
+ if (month < 1 || month > 12) {
127
+ throw new PmCliError(`Invalid ${label} value "${originalInput}". Month "${match[2]}" is out of range \u2014 use a month between 01 and 12.`, EXIT_CODE.USAGE);
128
+ }
129
+ const maxDay = daysInUtcMonth(year, month - 1);
130
+ if (day < 1 || day > maxDay) {
131
+ throw new PmCliError(`Invalid ${label} value "${originalInput}". ${MONTH_NAMES[month - 1]} ${year} has ${maxDay} days, so day "${match[3]}" does not exist. Use a real YYYY-MM-DD calendar date.`, EXIT_CODE.USAGE);
132
+ }
133
+ }
134
+ function addUtcMonths(now, amount) {
135
+ const result = new Date(now.getTime());
136
+ const startDay = result.getUTCDate();
137
+ const targetMonthIndex = result.getUTCMonth() + amount;
138
+ const targetYear = result.getUTCFullYear() + Math.floor(targetMonthIndex / 12);
139
+ const targetMonth = (targetMonthIndex % 12 + 12) % 12;
140
+ const day = Math.min(startDay, daysInUtcMonth(targetYear, targetMonth));
141
+ result.setUTCFullYear(targetYear, targetMonth, day);
142
+ return result;
143
+ }
144
+ function resolveIsoOrRelative(input, now = /* @__PURE__ */ new Date(), fieldLabel = "deadline") {
145
+ const trimmed = input.trim();
146
+ if (trimmed.toLowerCase() === "now") {
147
+ return now.toISOString();
148
+ }
149
+ const relative = RELATIVE_DEADLINE.exec(trimmed);
150
+ if (relative) {
151
+ const sign = relative[1] === "-" ? -1 : 1;
152
+ const amount = Number.parseInt(relative[2], 10) * sign;
153
+ const unit = relative[3].toLowerCase();
154
+ if (unit === "m") {
155
+ return addUtcMonths(now, amount).toISOString();
156
+ }
157
+ const msPerUnit = unit === "h" ? 60 * 60 * 1e3 : unit === "d" ? 24 * 60 * 60 * 1e3 : 7 * 24 * 60 * 60 * 1e3;
158
+ return new Date(now.getTime() + amount * msPerUnit).toISOString();
159
+ }
160
+ assertRealCalendarDate(input, trimmed, fieldLabel);
161
+ const timestamp = parseTimestampWithFallbacks(trimmed);
162
+ if (!Number.isFinite(timestamp)) {
163
+ const normalizedLabel = fieldLabel.trim().length > 0 ? fieldLabel.trim() : "deadline";
164
+ const guidance = COMPOUND_RELATIVE_DEADLINE.test(trimmed) ? "Compound relative expressions like +3d+1h are not supported; use a single relative token (for example +3d) or an ISO/date string." : 'Use ISO/date string input, "now", or relative +6h/-6h/+1d/-1d/+2w/-2w/+6m/-6m.';
165
+ throw new PmCliError(`Invalid ${normalizedLabel} value "${input}". ${guidance}`, EXIT_CODE.USAGE);
166
+ }
167
+ return new Date(timestamp).toISOString();
168
+ }
169
+
170
+ export {
171
+ nowIso,
172
+ isTimestampLiteral,
173
+ compareTimestampStrings,
174
+ resolveIsoOrRelative
175
+ };
176
+ //# sourceMappingURL=chunk-PVNQLCIS.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../core/shared/time.ts"],
4
+ "sourcesContent": ["import { PmCliError } from \"./errors.js\";\nimport { EXIT_CODE } from \"./constants.js\";\n\nconst RELATIVE_DEADLINE = /^([+-]?)(\\d+)([hdwm])$/i;\nconst COMPOUND_RELATIVE_DEADLINE = /^[+-]?\\d+[hdwm](?:[+-]\\d+[hdwm])+$/i;\nconst COMPACT_DATE = /^(\\d{4})(\\d{2})(\\d{2})$/;\nconst COMPACT_DATETIME = /^(\\d{4})(\\d{2})(\\d{2})(?:[T\\s]?)(\\d{2})(\\d{2})(\\d{2})?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\nconst HYPHEN_TIME = /^(\\d{4}-\\d{2}-\\d{2})[T\\s](\\d{2})-(\\d{2})(?:-(\\d{2}))?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\nconst COMPACT_TIME = /^(\\d{4}-\\d{2}-\\d{2})[T\\s](\\d{2})(\\d{2})(\\d{2})?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\nexport function isTimestampLiteral(input: string): boolean {\n return Number.isFinite(Date.parse(input));\n}\n\nexport function compareTimestampStrings(left: string, right: string): number {\n const leftMs = Date.parse(left);\n const rightMs = Date.parse(right);\n if (Number.isFinite(leftMs) && Number.isFinite(rightMs) && leftMs !== rightMs) {\n return leftMs - rightMs;\n }\n return left.localeCompare(right);\n}\n\nfunction normalizeFraction(raw: string | undefined): string {\n if (!raw) return \"\";\n const digits = raw.slice(1);\n return `.${digits.padEnd(3, \"0\").slice(0, 3)}`;\n}\n\nfunction normalizeOffset(raw: string | undefined): string {\n if (!raw) return \"\";\n if (raw.toUpperCase() === \"Z\") return \"Z\";\n const compact = /^([+-]\\d{2})(\\d{2})$/.exec(raw);\n if (compact) return `${compact[1]}:${compact[2]}`;\n return raw;\n}\n\nfunction normalizeTimestampCandidates(input: string): string[] {\n const candidates: string[] = [];\n const push = (value: string | undefined): void => {\n if (!value || value === input || candidates.includes(value)) return;\n candidates.push(value);\n };\n\n const compactDate = COMPACT_DATE.exec(input);\n if (compactDate) {\n const [, year, month, day] = compactDate;\n push(`${year}-${month}-${day}`);\n }\n\n const compactDateTime = COMPACT_DATETIME.exec(input);\n if (compactDateTime) {\n const [, year, month, day, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactDateTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(\n `${year}-${month}-${day}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`,\n );\n }\n\n const hyphenTime = HYPHEN_TIME.exec(input);\n if (hyphenTime) {\n const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = hyphenTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);\n }\n\n const compactTime = COMPACT_TIME.exec(input);\n if (compactTime) {\n const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);\n }\n\n const spaceDateTime = /^(\\d{4}-\\d{2}-\\d{2})\\s+(.+)$/.exec(input);\n if (spaceDateTime) {\n const [, datePart, timePart] = spaceDateTime;\n push(`${datePart}T${timePart}`);\n }\n\n return candidates;\n}\n\nfunction parseTimestampWithFallbacks(input: string): number {\n const direct = Date.parse(input);\n if (Number.isFinite(direct)) return direct;\n for (const candidate of normalizeTimestampCandidates(input)) {\n const parsed = Date.parse(candidate);\n if (Number.isFinite(parsed)) return parsed;\n }\n return Number.NaN;\n}\n\nfunction daysInUtcMonth(year: number, monthIndex: number): number {\n return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();\n}\n\nconst MONTH_NAMES = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\n// Leading literal calendar date in either hyphenated (`2026-02-30`) or compact\n// (`20260230`) form, optionally followed by any time/zone component. We validate\n// the digits the caller actually typed — not the parsed instant — so timezone\n// offsets never produce a false \"impossible date\" rejection. The hyphenated form\n// is unambiguous, so anything may follow (`T`/space time, `Z`, `+/-` offset). The\n// compact form must be followed by end-of-string or a time digit (with an optional\n// `T`/space separator) so a no-separator compact datetime like `20260230135900Z`\n// is still guarded and a 7-digit non-date is not misread as a date.\nconst LEADING_HYPHEN_DATE = /^(\\d{4})-(\\d{2})-(\\d{2})/;\nconst LEADING_COMPACT_DATE = /^(\\d{4})(\\d{2})(\\d{2})(?:[T ]?\\d{2}|$)/;\n\n/**\n * Reject literal calendar dates whose day cannot exist (e.g. `2026-02-30`, which JS\n * `Date` silently rolls forward to March 2). Without this, agents that pass an\n * impossible deadline get a silently-wrong stored date instead of an actionable\n * error. Only triggers on a leading literal date; relative tokens, \"now\", and pure\n * times are untouched. Month 00 / >12 is also rejected with a clear message rather\n * than falling through to the generic \"invalid value\" path.\n */\nfunction assertRealCalendarDate(originalInput: string, trimmed: string, fieldLabel: string): void {\n const match = LEADING_HYPHEN_DATE.exec(trimmed) ?? LEADING_COMPACT_DATE.exec(trimmed);\n if (!match) {\n return;\n }\n const year = Number.parseInt(match[1], 10);\n const month = Number.parseInt(match[2], 10);\n const day = Number.parseInt(match[3], 10);\n const label = fieldLabel?.trim() || \"deadline\";\n if (month < 1 || month > 12) {\n throw new PmCliError(\n `Invalid ${label} value \"${originalInput}\". Month \"${match[2]}\" is out of range — use a month between 01 and 12.`,\n EXIT_CODE.USAGE,\n );\n }\n const maxDay = daysInUtcMonth(year, month - 1);\n if (day < 1 || day > maxDay) {\n throw new PmCliError(\n `Invalid ${label} value \"${originalInput}\". ${MONTH_NAMES[month - 1]} ${year} has ${maxDay} days, so day \"${match[3]}\" does not exist. Use a real YYYY-MM-DD calendar date.`,\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction addUtcMonths(now: Date, amount: number): Date {\n const result = new Date(now.getTime());\n const startDay = result.getUTCDate();\n const targetMonthIndex = result.getUTCMonth() + amount;\n const targetYear = result.getUTCFullYear() + Math.floor(targetMonthIndex / 12);\n const targetMonth = ((targetMonthIndex % 12) + 12) % 12;\n const day = Math.min(startDay, daysInUtcMonth(targetYear, targetMonth));\n result.setUTCFullYear(targetYear, targetMonth, day);\n return result;\n}\n\nexport function resolveIsoOrRelative(\n input: string,\n now: Date = new Date(),\n fieldLabel = \"deadline\",\n): string {\n const trimmed = input.trim();\n if (trimmed.toLowerCase() === \"now\") {\n return now.toISOString();\n }\n const relative = RELATIVE_DEADLINE.exec(trimmed);\n if (relative) {\n const sign = relative[1] === \"-\" ? -1 : 1;\n const amount = Number.parseInt(relative[2], 10) * sign;\n const unit = relative[3].toLowerCase();\n if (unit === \"m\") {\n return addUtcMonths(now, amount).toISOString();\n }\n const msPerUnit = unit === \"h\" ? 60 * 60 * 1000 : unit === \"d\" ? 24 * 60 * 60 * 1000 : 7 * 24 * 60 * 60 * 1000;\n return new Date(now.getTime() + amount * msPerUnit).toISOString();\n }\n\n assertRealCalendarDate(input, trimmed, fieldLabel);\n\n const timestamp = parseTimestampWithFallbacks(trimmed);\n if (!Number.isFinite(timestamp)) {\n const normalizedLabel = fieldLabel.trim().length > 0 ? fieldLabel.trim() : \"deadline\";\n const guidance = COMPOUND_RELATIVE_DEADLINE.test(trimmed)\n ? \"Compound relative expressions like +3d+1h are not supported; use a single relative token (for example +3d) or an ISO/date string.\"\n : 'Use ISO/date string input, \"now\", or relative +6h/-6h/+1d/-1d/+2w/-2w/+6m/-6m.';\n throw new PmCliError(\n `Invalid ${normalizedLabel} value \"${input}\". ${guidance}`,\n EXIT_CODE.USAGE,\n );\n }\n return new Date(timestamp).toISOString();\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }