@unbrained/pm-cli 2026.6.30 → 2026.7.2

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 (628) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +26 -0
  3. package/dist/cli/bootstrap-args.js +89 -79
  4. package/dist/cli/bootstrap-args.js.map +1 -1
  5. package/dist/cli/commander-usage.d.ts +2 -0
  6. package/dist/cli/commander-usage.js +58 -47
  7. package/dist/cli/commander-usage.js.map +1 -1
  8. package/dist/cli/commands/aggregate.js +102 -79
  9. package/dist/cli/commands/aggregate.js.map +1 -1
  10. package/dist/cli/commands/calendar.js +339 -303
  11. package/dist/cli/commands/calendar.js.map +1 -1
  12. package/dist/cli/commands/close-many.js +89 -68
  13. package/dist/cli/commands/close-many.js.map +1 -1
  14. package/dist/cli/commands/close.js +157 -129
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/comments-audit.js +50 -42
  17. package/dist/cli/commands/comments-audit.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +2 -0
  19. package/dist/cli/commands/config.js +443 -879
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/context.js +365 -287
  22. package/dist/cli/commands/context.js.map +1 -1
  23. package/dist/cli/commands/contracts.js +352 -238
  24. package/dist/cli/commands/contracts.js.map +1 -1
  25. package/dist/cli/commands/create.js +483 -434
  26. package/dist/cli/commands/create.js.map +1 -1
  27. package/dist/cli/commands/dedupe-audit.js +46 -39
  28. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  29. package/dist/cli/commands/dedupe-merge.js +88 -69
  30. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  31. package/dist/cli/commands/extension/bundled-catalog.js +59 -46
  32. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  33. package/dist/cli/commands/extension/doctor.js +129 -78
  34. package/dist/cli/commands/extension/doctor.js.map +1 -1
  35. package/dist/cli/commands/extension/managed-state.js +101 -57
  36. package/dist/cli/commands/extension/managed-state.js.map +1 -1
  37. package/dist/cli/commands/extension/scaffold.d.ts +7 -0
  38. package/dist/cli/commands/extension/scaffold.js +214 -186
  39. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  40. package/dist/cli/commands/extension.d.ts +6 -1
  41. package/dist/cli/commands/extension.js +1034 -902
  42. package/dist/cli/commands/extension.js.map +1 -1
  43. package/dist/cli/commands/get.js +114 -81
  44. package/dist/cli/commands/get.js.map +1 -1
  45. package/dist/cli/commands/health.d.ts +17 -0
  46. package/dist/cli/commands/health.js +446 -307
  47. package/dist/cli/commands/health.js.map +1 -1
  48. package/dist/cli/commands/history-compact.js +209 -140
  49. package/dist/cli/commands/history-compact.js.map +1 -1
  50. package/dist/cli/commands/history-redact.js +162 -119
  51. package/dist/cli/commands/history-redact.js.map +1 -1
  52. package/dist/cli/commands/history-repair.js +120 -85
  53. package/dist/cli/commands/history-repair.js.map +1 -1
  54. package/dist/cli/commands/init.d.ts +8 -2
  55. package/dist/cli/commands/init.js +263 -162
  56. package/dist/cli/commands/init.js.map +1 -1
  57. package/dist/cli/commands/list-filter-shared.js +55 -48
  58. package/dist/cli/commands/list-filter-shared.js.map +1 -1
  59. package/dist/cli/commands/list.js +152 -102
  60. package/dist/cli/commands/list.js.map +1 -1
  61. package/dist/cli/commands/next.js +49 -32
  62. package/dist/cli/commands/next.js.map +1 -1
  63. package/dist/cli/commands/plan.js +373 -298
  64. package/dist/cli/commands/plan.js.map +1 -1
  65. package/dist/cli/commands/recurrence-parsers.js +43 -25
  66. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  67. package/dist/cli/commands/reindex.d.ts +21 -5
  68. package/dist/cli/commands/reindex.js +345 -205
  69. package/dist/cli/commands/reindex.js.map +1 -1
  70. package/dist/cli/commands/restore.d.ts +8 -7
  71. package/dist/cli/commands/restore.js +105 -69
  72. package/dist/cli/commands/restore.js.map +1 -1
  73. package/dist/cli/commands/schema.js +33 -30
  74. package/dist/cli/commands/schema.js.map +1 -1
  75. package/dist/cli/commands/search.d.ts +10 -2
  76. package/dist/cli/commands/search.js +595 -536
  77. package/dist/cli/commands/search.js.map +1 -1
  78. package/dist/cli/commands/telemetry.js +98 -87
  79. package/dist/cli/commands/telemetry.js.map +1 -1
  80. package/dist/cli/commands/test-all.js +237 -168
  81. package/dist/cli/commands/test-all.js.map +1 -1
  82. package/dist/cli/commands/test.d.ts +6 -5
  83. package/dist/cli/commands/test.js +530 -464
  84. package/dist/cli/commands/test.js.map +1 -1
  85. package/dist/cli/commands/update-many.js +57 -42
  86. package/dist/cli/commands/update-many.js.map +1 -1
  87. package/dist/cli/commands/update.d.ts +1 -1
  88. package/dist/cli/commands/update.js +764 -747
  89. package/dist/cli/commands/update.js.map +1 -1
  90. package/dist/cli/commands/validate.d.ts +18 -1
  91. package/dist/cli/commands/validate.js +466 -343
  92. package/dist/cli/commands/validate.js.map +1 -1
  93. package/dist/cli/error-guidance.js +399 -357
  94. package/dist/cli/error-guidance.js.map +1 -1
  95. package/dist/cli/extension-command-options.js +48 -21
  96. package/dist/cli/extension-command-options.js.map +1 -1
  97. package/dist/cli/main.d.ts +47 -0
  98. package/dist/cli/main.js +428 -341
  99. package/dist/cli/main.js.map +1 -1
  100. package/dist/cli/migration-gates.js +22 -45
  101. package/dist/cli/migration-gates.js.map +1 -1
  102. package/dist/cli/register-list-query.js +94 -105
  103. package/dist/cli/register-list-query.js.map +1 -1
  104. package/dist/cli/register-mutation.js +400 -416
  105. package/dist/cli/register-mutation.js.map +1 -1
  106. package/dist/cli/register-operations.js +86 -66
  107. package/dist/cli/register-operations.js.map +1 -1
  108. package/dist/cli/register-setup.js +120 -101
  109. package/dist/cli/register-setup.js.map +1 -1
  110. package/dist/cli/registration-helpers.js +117 -122
  111. package/dist/cli/registration-helpers.js.map +1 -1
  112. package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
  113. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  114. package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
  115. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  116. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
  117. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  118. package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
  119. package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
  120. package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
  121. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
  124. package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
  125. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
  127. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
  129. package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
  131. package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
  132. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
  133. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
  134. package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
  135. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
  137. package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
  138. package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
  139. package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
  140. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  141. package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
  142. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  143. package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
  144. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
  146. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  147. package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
  148. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  149. package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
  150. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  151. package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
  152. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  153. package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
  154. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  155. package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
  156. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
  158. package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
  160. package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
  161. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  162. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  163. package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
  164. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
  165. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
  166. package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
  167. package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
  168. package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
  169. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  170. package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
  171. package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
  172. package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
  173. package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
  174. package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
  176. package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
  177. package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
  178. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  179. package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
  180. package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
  182. package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
  184. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
  185. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
  186. package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
  187. package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
  189. package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
  190. package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
  191. package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
  192. package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
  193. package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
  194. package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
  195. package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
  196. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  197. package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
  198. package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
  199. package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
  200. package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
  201. package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
  202. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  203. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
  204. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
  206. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
  208. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  209. package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
  210. package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
  211. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  212. package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
  213. package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
  214. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  215. package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
  216. package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
  217. package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
  218. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
  220. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
  222. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  223. package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
  224. package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
  225. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  226. package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
  227. package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
  228. package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
  229. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  230. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
  231. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
  232. package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
  233. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  234. package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
  235. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  236. package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
  237. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  238. package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
  239. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  240. package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
  241. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  242. package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
  243. package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
  244. package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
  245. package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
  246. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-YPKFV2JR.js} +6 -6
  248. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  249. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  250. package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
  252. package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
  253. package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
  254. package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
  255. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  256. package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
  257. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  258. package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
  259. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  260. package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
  261. package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-7YS5MY5X.js} +8 -8
  262. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  263. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  264. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  265. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  266. package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
  267. package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
  268. package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
  269. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  270. package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
  271. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  272. package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
  273. package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
  274. package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
  275. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  276. package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
  277. package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
  278. package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
  279. package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
  280. package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
  281. package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
  282. package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
  283. package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
  284. package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
  285. package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
  286. package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
  287. package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
  288. package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
  289. package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
  290. package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
  291. package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
  292. package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
  293. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  294. package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
  295. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  296. package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
  297. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  298. package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
  299. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  300. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  301. package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
  302. package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HALOTOU7.js} +214 -135
  303. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  304. package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-MV25P7DM.js} +213 -134
  305. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  306. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  307. package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
  308. package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-44MODPQF.js} +124 -84
  309. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  310. package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-CPNAOCNF.js} +123 -83
  311. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  312. package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
  313. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  314. package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
  315. package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
  316. package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
  317. package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
  318. package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
  319. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
  321. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  322. package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
  323. package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
  324. package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
  325. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  326. package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
  327. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  328. package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
  329. package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
  330. package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-ROSNIL52.js} +80 -83
  331. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  332. package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-XN4ZRHSV.js} +79 -82
  333. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  334. package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
  335. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  336. package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
  337. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  338. package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-4PASGJDB.js} +112 -93
  339. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  340. package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-MBN4KGUM.js} +113 -94
  341. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  342. package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-VIAWYFP5.js} +129 -104
  343. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  344. package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZCGKHDKL.js} +128 -103
  345. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  346. package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
  347. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  348. package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  349. package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  350. package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
  351. package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
  352. package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
  353. package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
  354. package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
  355. package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
  356. package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
  357. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  358. package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
  359. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  360. package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
  361. package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
  362. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  363. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  364. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  365. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  366. package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-FK5E75AA.js} +185 -147
  367. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  368. package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-H4TGWGRN.js} +184 -146
  369. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  370. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  371. package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
  372. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
  373. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
  374. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
  375. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  376. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
  377. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
  378. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
  379. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
  380. package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
  381. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  382. package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
  383. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  384. package/dist/cli-bundle/main.js +986 -1500
  385. package/dist/cli-bundle/main.js.map +4 -4
  386. package/dist/core/config/nested-settings.js +89 -67
  387. package/dist/core/config/nested-settings.js.map +1 -1
  388. package/dist/core/extensions/activation-summary-markdown.js +23 -12
  389. package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
  390. package/dist/core/extensions/extension-policy.d.ts +18 -3
  391. package/dist/core/extensions/extension-policy.js +116 -106
  392. package/dist/core/extensions/extension-policy.js.map +1 -1
  393. package/dist/core/extensions/loader.js +310 -232
  394. package/dist/core/extensions/loader.js.map +1 -1
  395. package/dist/core/governance/metadata-coverage.js +20 -28
  396. package/dist/core/governance/metadata-coverage.js.map +1 -1
  397. package/dist/core/history/drift-scan.js +93 -81
  398. package/dist/core/history/drift-scan.js.map +1 -1
  399. package/dist/core/item/item-format.js +523 -410
  400. package/dist/core/item/item-format.js.map +1 -1
  401. package/dist/core/item/item-type-definition.js +14 -14
  402. package/dist/core/item/item-type-definition.js.map +1 -1
  403. package/dist/core/item/type-registry.js +87 -82
  404. package/dist/core/item/type-registry.js.map +1 -1
  405. package/dist/core/output/mutation-projection.js +42 -26
  406. package/dist/core/output/mutation-projection.js.map +1 -1
  407. package/dist/core/schema/runtime-schema.js +34 -28
  408. package/dist/core/schema/runtime-schema.js.map +1 -1
  409. package/dist/core/search/semantic-defaults.js +64 -37
  410. package/dist/core/search/semantic-defaults.js.map +1 -1
  411. package/dist/core/search/vector-stores.js +32 -17
  412. package/dist/core/search/vector-stores.js.map +1 -1
  413. package/dist/core/sentry/helpers.js +31 -28
  414. package/dist/core/sentry/helpers.js.map +1 -1
  415. package/dist/core/sentry/instrument.js +54 -43
  416. package/dist/core/sentry/instrument.js.map +1 -1
  417. package/dist/core/store/front-matter-cache.js +239 -153
  418. package/dist/core/store/front-matter-cache.js.map +1 -1
  419. package/dist/core/store/item-store.js +33 -26
  420. package/dist/core/store/item-store.js.map +1 -1
  421. package/dist/core/store/settings.js +247 -203
  422. package/dist/core/store/settings.js.map +1 -1
  423. package/dist/core/test/background-runs.js +189 -160
  424. package/dist/core/test/background-runs.js.map +1 -1
  425. package/dist/mcp/server.js +387 -367
  426. package/dist/mcp/server.js.map +1 -1
  427. package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
  428. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  429. package/dist/sdk/cli-contracts/tool-schema.js +76 -45
  430. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  431. package/dist/sdk/compose.d.ts +4 -1
  432. package/dist/sdk/compose.js +181 -115
  433. package/dist/sdk/compose.js.map +1 -1
  434. package/docs/RELEASING.md +2 -3
  435. package/package.json +2 -2
  436. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  437. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  438. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  439. package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
  440. package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
  441. package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
  442. package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
  443. package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
  444. package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
  451. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
  453. package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
  456. package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
  457. package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
  458. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
  459. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
  460. package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
  465. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
  470. package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
  471. package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
  472. package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
  473. package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
  475. package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
  476. package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
  478. package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
  479. package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
  480. package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
  481. package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
  482. package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
  483. package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
  484. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
  485. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
  486. package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
  487. package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
  488. package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
  489. package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
  490. package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
  491. package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
  492. package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
  493. package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
  494. package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
  495. package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
  496. package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
  497. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
  498. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
  499. package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
  500. package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
  501. package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
  502. package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
  503. package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
  504. package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
  505. package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
  506. package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
  507. package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
  508. package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
  509. package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
  510. package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
  511. package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
  512. package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
  513. package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
  514. package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
  515. package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
  516. package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
  517. package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
  518. package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
  519. package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
  520. package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
  521. package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
  522. package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
  523. package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
  524. package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
  525. package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
  526. package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
  527. package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
  528. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
  529. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
  530. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
  531. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
  532. package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
  533. package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
  534. package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
  535. package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
  536. package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
  537. /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
@@ -4,7 +4,7 @@
4
4
  * Implements the pm calendar command surface and its agent-facing runtime behavior.
5
5
  */
6
6
 
7
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6c196179-0593-5629-926f-6e0143fb9da2")}catch(e){}}();
7
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="16039cc1-59c0-510f-9ae1-d452ba30096c")}catch(e){}}();
8
8
  import { encode as encodeToon } from "@toon-format/toon";
9
9
  import { pathExists } from "../../core/fs/fs-utils.js";
10
10
  import { getActiveExtensionRegistrations } from "../../core/extensions/index.js";
@@ -265,123 +265,131 @@ function buildRecurringEventWindow(start, end, nowValue, lookbackDays, lookahead
265
265
  end: compareTimestampStrings(windowEnd, windowStart) > 0 ? windowEnd : addUtcDays(windowStart, 1),
266
266
  };
267
267
  }
268
- function expandRecurringOccurrences(startAt, recurrence, window, occurrenceLimit) {
269
- const maxOccurrences = occurrenceLimit ?? MAX_RECURRENCE_OCCURRENCES;
270
- const interval = recurrence.interval ?? 1;
271
- const countLimit = recurrence.count ?? Number.POSITIVE_INFINITY;
272
- const until = recurrence.until;
273
- const excluded = buildExcludedInstantSet(recurrence.exdates);
274
- const recurrenceWeekdays = recurrence.by_weekday && recurrence.by_weekday.length > 0 ? [...recurrence.by_weekday] : [weekdayToken(startAt)];
275
- const recurrenceMonthDays = recurrence.by_month_day && recurrence.by_month_day.length > 0 ? [...recurrence.by_month_day] : [new Date(startAt).getUTCDate()];
276
- const weekdayFilter = recurrence.by_weekday ? new Set(recurrence.by_weekday) : undefined;
277
- const monthDayFilter = recurrence.by_month_day ? new Set(recurrence.by_month_day) : undefined;
278
- const sortedWeekdays = [...new Set(recurrenceWeekdays)].sort((left, right) => weekdayOrderIndex(left) -
279
- weekdayOrderIndex(right));
280
- const sortedMonthDays = [...new Set(recurrenceMonthDays)].sort((left, right) => left - right);
281
- const occurrences = [];
282
- let produced = 0;
283
- const consumeCandidate = (candidateAt) => {
284
- if (compareTimestampStrings(candidateAt, startAt) < 0) {
285
- return "continue";
286
- }
287
- if (until && compareTimestampStrings(candidateAt, until) > 0) {
288
- return "stop";
289
- }
290
- if (compareTimestampStrings(candidateAt, window.end) >= 0) {
291
- return "stop";
292
- }
293
- if (excluded.has(candidateAt)) {
294
- return "continue";
295
- }
296
- produced += 1;
297
- if (compareTimestampStrings(candidateAt, window.start) >= 0) {
298
- occurrences.push(candidateAt);
299
- }
300
- if (produced >= countLimit) {
301
- return "stop";
302
- }
303
- return "continue";
268
+ function buildRecurrenceExpansionContext(startAt, recurrence, window, occurrenceLimit) {
269
+ // Omitted filters default to the series start; explicit empty filters intentionally match no occurrences.
270
+ const recurrenceWeekdays = recurrence.by_weekday !== undefined ? [...recurrence.by_weekday] : [weekdayToken(startAt)];
271
+ const recurrenceMonthDays = recurrence.by_month_day !== undefined ? [...recurrence.by_month_day] : [new Date(startAt).getUTCDate()];
272
+ return {
273
+ startAt,
274
+ startDate: new Date(startAt),
275
+ window,
276
+ maxOccurrences: occurrenceLimit ?? MAX_RECURRENCE_OCCURRENCES,
277
+ interval: recurrence.interval ?? 1,
278
+ countLimit: recurrence.count ?? Number.POSITIVE_INFINITY,
279
+ until: recurrence.until,
280
+ excluded: buildExcludedInstantSet(recurrence.exdates),
281
+ weekdayFilter: recurrence.by_weekday !== undefined ? new Set(recurrence.by_weekday) : undefined,
282
+ monthDayFilter: recurrence.by_month_day !== undefined ? new Set(recurrence.by_month_day) : undefined,
283
+ sortedWeekdays: [...new Set(recurrenceWeekdays)].sort((left, right) => weekdayOrderIndex(left) - weekdayOrderIndex(right)),
284
+ sortedMonthDays: [...new Set(recurrenceMonthDays)].sort((left, right) => left - right),
285
+ occurrences: [],
286
+ produced: 0,
304
287
  };
305
- const startDate = new Date(startAt);
306
- if (recurrence.freq === "daily") {
307
- let candidateAt = startAt;
308
- for (let iteration = 0; iteration < maxOccurrences; iteration += 1) {
309
- const candidateWeekday = weekdayToken(candidateAt);
310
- const candidateMonthDay = new Date(candidateAt).getUTCDate();
311
- const weekdayMatches = !weekdayFilter || weekdayFilter.has(candidateWeekday);
312
- const monthDayMatches = !monthDayFilter || monthDayFilter.has(candidateMonthDay);
313
- if (weekdayMatches && monthDayMatches && consumeCandidate(candidateAt) === "stop") {
314
- break;
315
- }
316
- candidateAt = addUtcDays(candidateAt, interval);
317
- }
318
- return occurrences;
288
+ }
289
+ function consumeRecurrenceCandidate(context, candidateAt) {
290
+ if (compareTimestampStrings(candidateAt, context.startAt) < 0) {
291
+ return "continue";
319
292
  }
320
- if (recurrence.freq === "weekly") {
321
- const weekStart = startOfUtcWeekMonday(startAt);
322
- for (let step = 0; step < maxOccurrences; step += 1) {
323
- const candidateWeekStart = addUtcDays(weekStart, step * interval * 7);
324
- for (const weekday of sortedWeekdays) {
325
- const dayOffset = weekdayOrderIndex(weekday);
326
- const candidateDay = addUtcDays(candidateWeekStart, dayOffset);
327
- const dayDate = new Date(candidateDay);
328
- const candidateAt = new Date(Date.UTC(dayDate.getUTCFullYear(), dayDate.getUTCMonth(), dayDate.getUTCDate(), startDate.getUTCHours(), startDate.getUTCMinutes(), startDate.getUTCSeconds(), startDate.getUTCMilliseconds())).toISOString();
329
- const candidateMonthDay = dayDate.getUTCDate();
330
- if (monthDayFilter && !monthDayFilter.has(candidateMonthDay)) {
331
- continue;
332
- }
333
- const consumed = consumeCandidate(candidateAt);
334
- if (consumed === "stop") {
335
- return occurrences;
336
- }
337
- }
338
- }
339
- return occurrences;
293
+ if (context.until && compareTimestampStrings(candidateAt, context.until) > 0) {
294
+ return "stop";
340
295
  }
341
- if (recurrence.freq === "monthly") {
342
- const startYear = startDate.getUTCFullYear();
343
- const startMonth = startDate.getUTCMonth();
344
- for (let step = 0; step < maxOccurrences; step += 1) {
345
- const monthAnchor = new Date(Date.UTC(startYear, startMonth + step * interval, 1, 0, 0, 0, 0));
346
- const year = monthAnchor.getUTCFullYear();
347
- const month = monthAnchor.getUTCMonth();
348
- for (const monthDay of sortedMonthDays) {
349
- const candidateAt = buildUtcTimestamp(year, month, monthDay, startDate);
350
- if (!candidateAt) {
351
- continue;
352
- }
353
- const candidateWeekday = weekdayToken(candidateAt);
354
- if (weekdayFilter && !weekdayFilter.has(candidateWeekday)) {
355
- continue;
356
- }
357
- const consumed = consumeCandidate(candidateAt);
358
- if (consumed === "stop") {
359
- return occurrences;
360
- }
296
+ if (compareTimestampStrings(candidateAt, context.window.end) >= 0) {
297
+ return "stop";
298
+ }
299
+ if (context.excluded.has(candidateAt)) {
300
+ return "continue";
301
+ }
302
+ context.produced += 1;
303
+ if (compareTimestampStrings(candidateAt, context.window.start) >= 0) {
304
+ context.occurrences.push(candidateAt);
305
+ }
306
+ return context.produced >= context.countLimit || context.occurrences.length >= context.maxOccurrences ? "stop" : "continue";
307
+ }
308
+ function recurrenceDayMatchesFilters(context, candidateAt) {
309
+ const candidateWeekday = weekdayToken(candidateAt);
310
+ const candidateMonthDay = new Date(candidateAt).getUTCDate();
311
+ const weekdayMatches = !context.weekdayFilter || context.weekdayFilter.has(candidateWeekday);
312
+ const monthDayMatches = !context.monthDayFilter || context.monthDayFilter.has(candidateMonthDay);
313
+ return weekdayMatches && monthDayMatches;
314
+ }
315
+ function expandDailyOccurrences(context) {
316
+ let candidateAt = context.startAt;
317
+ for (let iteration = 0; iteration < context.maxOccurrences; iteration += 1) {
318
+ if (recurrenceDayMatchesFilters(context, candidateAt) && consumeRecurrenceCandidate(context, candidateAt) === "stop") {
319
+ break;
320
+ }
321
+ candidateAt = addUtcDays(candidateAt, context.interval);
322
+ }
323
+ return context.occurrences;
324
+ }
325
+ function buildWeeklyCandidateAt(context, candidateWeekStart, weekday) {
326
+ const dayOffset = weekdayOrderIndex(weekday);
327
+ const candidateDay = addUtcDays(candidateWeekStart, dayOffset);
328
+ const dayDate = new Date(candidateDay);
329
+ return new Date(Date.UTC(dayDate.getUTCFullYear(), dayDate.getUTCMonth(), dayDate.getUTCDate(), context.startDate.getUTCHours(), context.startDate.getUTCMinutes(), context.startDate.getUTCSeconds(), context.startDate.getUTCMilliseconds())).toISOString();
330
+ }
331
+ function expandWeeklyOccurrences(context) {
332
+ const weekStart = startOfUtcWeekMonday(context.startAt);
333
+ for (let step = 0; step < context.maxOccurrences; step += 1) {
334
+ const candidateWeekStart = addUtcDays(weekStart, step * context.interval * 7);
335
+ for (const weekday of context.sortedWeekdays) {
336
+ const candidateAt = buildWeeklyCandidateAt(context, candidateWeekStart, weekday);
337
+ if (!recurrenceDayMatchesFilters(context, candidateAt)) {
338
+ continue;
339
+ }
340
+ if (consumeRecurrenceCandidate(context, candidateAt) === "stop") {
341
+ return context.occurrences;
361
342
  }
362
343
  }
363
- return occurrences;
364
- }
365
- const year = startDate.getUTCFullYear();
366
- const month = startDate.getUTCMonth();
367
- for (let step = 0; step < maxOccurrences; step += 1) {
368
- const candidateYear = year + step * interval;
369
- for (const monthDay of sortedMonthDays) {
370
- const candidateAt = buildUtcTimestamp(candidateYear, month, monthDay, startDate);
371
- if (!candidateAt) {
344
+ }
345
+ return context.occurrences;
346
+ }
347
+ function expandMonthlyOccurrences(context) {
348
+ const startYear = context.startDate.getUTCFullYear();
349
+ const startMonth = context.startDate.getUTCMonth();
350
+ for (let step = 0; step < context.maxOccurrences; step += 1) {
351
+ const monthAnchor = new Date(Date.UTC(startYear, startMonth + step * context.interval, 1, 0, 0, 0, 0));
352
+ for (const monthDay of context.sortedMonthDays) {
353
+ const candidateAt = buildUtcTimestamp(monthAnchor.getUTCFullYear(), monthAnchor.getUTCMonth(), monthDay, context.startDate);
354
+ if (!candidateAt || !recurrenceDayMatchesFilters(context, candidateAt)) {
372
355
  continue;
373
356
  }
374
- const candidateWeekday = weekdayToken(candidateAt);
375
- if (weekdayFilter && !weekdayFilter.has(candidateWeekday)) {
357
+ if (consumeRecurrenceCandidate(context, candidateAt) === "stop") {
358
+ return context.occurrences;
359
+ }
360
+ }
361
+ }
362
+ return context.occurrences;
363
+ }
364
+ function expandYearlyOccurrences(context) {
365
+ const year = context.startDate.getUTCFullYear();
366
+ const month = context.startDate.getUTCMonth();
367
+ for (let step = 0; step < context.maxOccurrences; step += 1) {
368
+ const candidateYear = year + step * context.interval;
369
+ for (const monthDay of context.sortedMonthDays) {
370
+ const candidateAt = buildUtcTimestamp(candidateYear, month, monthDay, context.startDate);
371
+ if (!candidateAt || !recurrenceDayMatchesFilters(context, candidateAt)) {
376
372
  continue;
377
373
  }
378
- const consumed = consumeCandidate(candidateAt);
379
- if (consumed === "stop") {
380
- return occurrences;
374
+ if (consumeRecurrenceCandidate(context, candidateAt) === "stop") {
375
+ return context.occurrences;
381
376
  }
382
377
  }
383
378
  }
384
- return occurrences;
379
+ return context.occurrences;
380
+ }
381
+ function expandRecurringOccurrences(startAt, recurrence, window, occurrenceLimit) {
382
+ const context = buildRecurrenceExpansionContext(startAt, recurrence, window, occurrenceLimit);
383
+ if (recurrence.freq === "daily") {
384
+ return expandDailyOccurrences(context);
385
+ }
386
+ if (recurrence.freq === "weekly") {
387
+ return expandWeeklyOccurrences(context);
388
+ }
389
+ if (recurrence.freq === "monthly") {
390
+ return expandMonthlyOccurrences(context);
391
+ }
392
+ return expandYearlyOccurrences(context);
385
393
  }
386
394
  function sortEvents(values) {
387
395
  return [...values].sort((a, b) => {
@@ -403,98 +411,102 @@ function sortEvents(values) {
403
411
  return String(a.reminder_text).localeCompare(String(b.reminder_text));
404
412
  });
405
413
  }
414
+ function buildItemCalendarRowBase(item) {
415
+ return {
416
+ item_id: item.id,
417
+ item_title: item.title,
418
+ item_type: item.type,
419
+ item_status: item.status,
420
+ item_priority: item.priority,
421
+ item_assignee: item.assignee ?? null,
422
+ item_deadline: item.deadline ?? null,
423
+ item_tags: item.tags,
424
+ };
425
+ }
426
+ function buildDeadlineRow(item) {
427
+ if (!item.deadline) {
428
+ return null;
429
+ }
430
+ return {
431
+ at: item.deadline,
432
+ date: toUtcDayKey(item.deadline),
433
+ kind: "deadline",
434
+ reminder_text: null,
435
+ event_title: null,
436
+ event_end: null,
437
+ event_location: null,
438
+ event_all_day: null,
439
+ event_timezone: null,
440
+ event_recurring: null,
441
+ event_recurrence_rule: null,
442
+ ...buildItemCalendarRowBase(item),
443
+ item_deadline: item.deadline,
444
+ };
445
+ }
446
+ function buildReminderRows(item) {
447
+ return (item.reminders ?? []).map((reminder) => ({
448
+ at: reminder.at,
449
+ date: toUtcDayKey(reminder.at),
450
+ kind: "reminder",
451
+ reminder_text: reminder.text,
452
+ event_title: null,
453
+ event_end: null,
454
+ event_location: null,
455
+ event_all_day: null,
456
+ event_timezone: null,
457
+ event_recurring: null,
458
+ event_recurrence_rule: null,
459
+ ...buildItemCalendarRowBase(item),
460
+ }));
461
+ }
462
+ function recurringDurationMs(startAt, endAt) {
463
+ if (!endAt) {
464
+ return null;
465
+ }
466
+ const duration = Date.parse(endAt) - Date.parse(startAt);
467
+ return Number.isFinite(duration) && duration > 0 ? duration : null;
468
+ }
469
+ function eventOccurrenceEnd(occurrenceAt, event, durationMs) {
470
+ return event.recurrence && durationMs !== null
471
+ ? new Date(new Date(occurrenceAt).getTime() + durationMs).toISOString()
472
+ : (event.end_at ?? null);
473
+ }
474
+ function buildScheduledEventRows(item, event, recurringWindow, occurrenceLimit) {
475
+ const recurrenceRuleSummary = formatRecurrenceRuleForSummary(event.recurrence);
476
+ const durationMs = recurringDurationMs(event.start_at, event.end_at);
477
+ const occurrences = event.recurrence
478
+ ? expandRecurringOccurrences(event.start_at, event.recurrence, recurringWindow, occurrenceLimit)
479
+ : [event.start_at];
480
+ return occurrences.map((occurrenceAt) => ({
481
+ at: occurrenceAt,
482
+ // All-day events are timezone-agnostic calendar dates: bucket by the
483
+ // literal start date. Timed events bucket by their local day in the
484
+ // event's timezone (defaults to UTC when unset).
485
+ date: event.all_day === true ? occurrenceAt.slice(0, 10) : toLocalDayKey(occurrenceAt, event.timezone),
486
+ kind: "event",
487
+ reminder_text: event.description ?? null,
488
+ event_title: event.title ?? item.title,
489
+ event_end: eventOccurrenceEnd(occurrenceAt, event, durationMs),
490
+ event_location: event.location ?? null,
491
+ event_all_day: event.all_day ?? null,
492
+ event_timezone: event.timezone ?? null,
493
+ event_recurring: event.recurrence ? true : false,
494
+ event_recurrence_rule: recurrenceRuleSummary,
495
+ ...buildItemCalendarRowBase(item),
496
+ }));
497
+ }
406
498
  function buildEventSeed(items, recurringWindow, includeSources, occurrenceLimit) {
407
499
  const events = [];
408
500
  for (const item of items) {
409
- if (includeSources.has("deadlines") && item.deadline) {
410
- events.push({
411
- at: item.deadline,
412
- date: toUtcDayKey(item.deadline),
413
- kind: "deadline",
414
- reminder_text: null,
415
- event_title: null,
416
- event_end: null,
417
- event_location: null,
418
- event_all_day: null,
419
- event_timezone: null,
420
- event_recurring: null,
421
- event_recurrence_rule: null,
422
- item_id: item.id,
423
- item_title: item.title,
424
- item_type: item.type,
425
- item_status: item.status,
426
- item_priority: item.priority,
427
- item_assignee: item.assignee ?? null,
428
- item_deadline: item.deadline,
429
- item_tags: item.tags,
430
- });
501
+ const deadlineRow = includeSources.has("deadlines") ? buildDeadlineRow(item) : null;
502
+ if (deadlineRow) {
503
+ events.push(deadlineRow);
431
504
  }
432
- for (const reminder of includeSources.has("reminders") ? (item.reminders ?? []) : []) {
433
- events.push({
434
- at: reminder.at,
435
- date: toUtcDayKey(reminder.at),
436
- kind: "reminder",
437
- reminder_text: reminder.text,
438
- event_title: null,
439
- event_end: null,
440
- event_location: null,
441
- event_all_day: null,
442
- event_timezone: null,
443
- event_recurring: null,
444
- event_recurrence_rule: null,
445
- item_id: item.id,
446
- item_title: item.title,
447
- item_type: item.type,
448
- item_status: item.status,
449
- item_priority: item.priority,
450
- item_assignee: item.assignee ?? null,
451
- item_deadline: item.deadline ?? null,
452
- item_tags: item.tags,
453
- });
505
+ if (includeSources.has("reminders")) {
506
+ events.push(...buildReminderRows(item));
454
507
  }
455
508
  for (const event of includeSources.has("events") ? (item.events ?? []) : []) {
456
- const recurrenceRuleSummary = formatRecurrenceRuleForSummary(event.recurrence);
457
- const recurringDurationMs = (() => {
458
- if (!event.end_at) {
459
- return null;
460
- }
461
- const duration = Date.parse(event.end_at) - Date.parse(event.start_at);
462
- return Number.isFinite(duration) && duration > 0 ? duration : null;
463
- })();
464
- const occurrences = event.recurrence
465
- ? expandRecurringOccurrences(event.start_at, event.recurrence, recurringWindow, occurrenceLimit)
466
- : [event.start_at];
467
- for (const occurrenceAt of occurrences) {
468
- const occurrenceEnd = event.recurrence && recurringDurationMs !== null
469
- ? new Date(new Date(occurrenceAt).getTime() + recurringDurationMs).toISOString()
470
- : (event.end_at ?? null);
471
- events.push({
472
- at: occurrenceAt,
473
- // All-day events are timezone-agnostic calendar dates: bucket by the
474
- // literal start date. Timed events bucket by their local day in the
475
- // event's timezone (defaults to UTC when unset).
476
- date: event.all_day === true
477
- ? occurrenceAt.slice(0, 10)
478
- : toLocalDayKey(occurrenceAt, event.timezone),
479
- kind: "event",
480
- reminder_text: event.description ?? null,
481
- event_title: event.title ?? item.title,
482
- event_end: occurrenceEnd,
483
- event_location: event.location ?? null,
484
- event_all_day: event.all_day ?? null,
485
- event_timezone: event.timezone ?? null,
486
- event_recurring: event.recurrence ? true : false,
487
- event_recurrence_rule: recurrenceRuleSummary,
488
- item_id: item.id,
489
- item_title: item.title,
490
- item_type: item.type,
491
- item_status: item.status,
492
- item_priority: item.priority,
493
- item_assignee: item.assignee ?? null,
494
- item_deadline: item.deadline ?? null,
495
- item_tags: item.tags,
496
- });
497
- }
509
+ events.push(...buildScheduledEventRows(item, event, recurringWindow, occurrenceLimit));
498
510
  }
499
511
  }
500
512
  return sortEvents(events);
@@ -514,30 +526,46 @@ function filterItems(items, options, typeRegistry, statusRegistry, runtimeFieldF
514
526
  if (assigneeFilter !== undefined && assigneeModeFilter === "unassigned") {
515
527
  throw new PmCliError("Cannot combine --assignee with --assignee-filter unassigned", EXIT_CODE.USAGE);
516
528
  }
517
- return items.filter((item) => {
518
- if (typeFilter && item.type !== typeFilter)
519
- return false;
520
- if (tagFilter && !item.tags.some((tag) => tag.trim().toLowerCase() === tagFilter))
521
- return false;
522
- if (priorityFilter !== undefined && item.priority !== priorityFilter)
523
- return false;
524
- if (statusFilter && item.status !== statusFilter)
525
- return false;
526
- if (assigneeModeFilter === "assigned" && !item.assignee)
527
- return false;
528
- if (assigneeModeFilter === "unassigned" && item.assignee)
529
- return false;
530
- if (assigneeFilter !== undefined && item.assignee !== assigneeFilter) {
531
- return false;
532
- }
533
- if (sprintFilter !== undefined && item.sprint !== sprintFilter)
534
- return false;
535
- if (releaseFilter !== undefined && item.release !== releaseFilter)
536
- return false;
537
- if (!matchesRuntimeFilters(item, runtimeFieldFilters))
538
- return false;
539
- return true;
540
- });
529
+ return items.filter((item) => itemMatchesCalendarFilters(item, {
530
+ typeFilter,
531
+ tagFilter,
532
+ priorityFilter,
533
+ statusFilter,
534
+ assigneeFilter,
535
+ assigneeModeFilter,
536
+ sprintFilter,
537
+ releaseFilter,
538
+ runtimeFieldFilters,
539
+ }));
540
+ }
541
+ function itemMatchesCalendarFilters(item, filters) {
542
+ return (itemMatchesCalendarIdentityFilters(item, filters) &&
543
+ itemMatchesCalendarOwnerFilters(item, filters) &&
544
+ matchesRuntimeFilters(item, filters.runtimeFieldFilters));
545
+ }
546
+ function itemMatchesCalendarIdentityFilters(item, filters) {
547
+ if (filters.typeFilter && item.type !== filters.typeFilter)
548
+ return false;
549
+ if (filters.tagFilter && !item.tags.some((tag) => tag.trim().toLowerCase() === filters.tagFilter))
550
+ return false;
551
+ if (filters.priorityFilter !== undefined && item.priority !== filters.priorityFilter)
552
+ return false;
553
+ if (filters.statusFilter && item.status !== filters.statusFilter)
554
+ return false;
555
+ return true;
556
+ }
557
+ function itemMatchesCalendarOwnerFilters(item, filters) {
558
+ if (filters.assigneeModeFilter === "assigned" && !item.assignee)
559
+ return false;
560
+ if (filters.assigneeModeFilter === "unassigned" && item.assignee)
561
+ return false;
562
+ if (filters.assigneeFilter !== undefined && item.assignee !== filters.assigneeFilter)
563
+ return false;
564
+ if (filters.sprintFilter !== undefined && item.sprint !== filters.sprintFilter)
565
+ return false;
566
+ if (filters.releaseFilter !== undefined && item.release !== filters.releaseFilter)
567
+ return false;
568
+ return true;
541
569
  }
542
570
  function includeEventInWindow(event, start, end) {
543
571
  if (start && compareTimestampStrings(event.at, start) < 0) {
@@ -567,53 +595,38 @@ function buildRange(view, options, nowValue) {
567
595
  throw new PmCliError("--from and --to are only supported for --view agenda", EXIT_CODE.USAGE);
568
596
  }
569
597
  if (view === "agenda") {
570
- if (fullPeriodRequested) {
571
- throw new PmCliError("--full-period is only supported for --view day|week|month. For agenda windows, use --from and --to.", EXIT_CODE.USAGE);
572
- }
573
- const start = from ?? (options.date ? anchor : includePast ? undefined : nowValue);
574
- return {
575
- anchor,
576
- start,
577
- end: to,
578
- fullPeriod: false,
579
- };
598
+ return buildAgendaRange(anchor, options, nowValue, includePast, fullPeriodRequested, from, to);
580
599
  }
581
600
  if (view === "day") {
582
601
  const dayStart = startOfUtcDay(anchor);
583
- const fullPeriod = includePast || fullPeriodRequested;
584
- const start = fullPeriod ? dayStart : maxTimestamp(dayStart, nowValue);
585
- return {
586
- anchor,
587
- start,
588
- end: addUtcDays(dayStart, 1),
589
- periodStart: dayStart,
590
- periodEnd: addUtcDays(dayStart, 1),
591
- fullPeriod,
592
- };
602
+ return buildFixedPeriodRange(anchor, nowValue, includePast, fullPeriodRequested, dayStart, addUtcDays(dayStart, 1));
593
603
  }
594
604
  if (view === "week") {
595
605
  const weekStart = startOfUtcWeekMonday(anchor);
596
- const fullPeriod = includePast || fullPeriodRequested;
597
- const start = fullPeriod ? weekStart : maxTimestamp(weekStart, nowValue);
598
- return {
599
- anchor,
600
- start,
601
- end: addUtcDays(weekStart, 7),
602
- periodStart: weekStart,
603
- periodEnd: addUtcDays(weekStart, 7),
604
- fullPeriod,
605
- };
606
+ return buildFixedPeriodRange(anchor, nowValue, includePast, fullPeriodRequested, weekStart, addUtcDays(weekStart, 7));
606
607
  }
607
608
  const monthStart = startOfUtcMonth(anchor);
608
- const monthEnd = startOfNextUtcMonth(anchor);
609
+ return buildFixedPeriodRange(anchor, nowValue, includePast, fullPeriodRequested, monthStart, startOfNextUtcMonth(anchor));
610
+ }
611
+ function buildAgendaRange(anchor, options, nowValue, includePast, fullPeriodRequested, from, to) {
612
+ if (fullPeriodRequested) {
613
+ throw new PmCliError("--full-period is only supported for --view day|week|month. For agenda windows, use --from and --to.", EXIT_CODE.USAGE);
614
+ }
615
+ return {
616
+ anchor,
617
+ start: from ?? (options.date ? anchor : includePast ? undefined : nowValue),
618
+ end: to,
619
+ fullPeriod: false,
620
+ };
621
+ }
622
+ function buildFixedPeriodRange(anchor, nowValue, includePast, fullPeriodRequested, periodStart, periodEnd) {
609
623
  const fullPeriod = includePast || fullPeriodRequested;
610
- const start = fullPeriod ? monthStart : maxTimestamp(monthStart, nowValue);
611
624
  return {
612
625
  anchor,
613
- start,
614
- end: monthEnd,
615
- periodStart: monthStart,
616
- periodEnd: monthEnd,
626
+ start: fullPeriod ? periodStart : maxTimestamp(periodStart, nowValue),
627
+ end: periodEnd,
628
+ periodStart,
629
+ periodEnd,
617
630
  fullPeriod,
618
631
  };
619
632
  }
@@ -818,14 +831,7 @@ function trimTrailingNewlines(value) {
818
831
  }
819
832
  return value.slice(0, end);
820
833
  }
821
- /**
822
- * Implements run calendar for the public runtime surface of this module.
823
- */
824
- export async function runCalendar(options, global) {
825
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
826
- if (!(await pathExists(getSettingsPath(pmRoot)))) {
827
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
828
- }
834
+ function resolveCalendarExecutionInputs(options) {
829
835
  const nowValue = nowIso();
830
836
  const view = parseView(options.view);
831
837
  const rangeBounds = buildRange(view, options, nowValue);
@@ -838,61 +844,91 @@ export async function runCalendar(options, global) {
838
844
  throw new PmCliError("Calendar occurrence limit must be >= 1", EXIT_CODE.USAGE);
839
845
  }
840
846
  const eventsOnly = includeSources.has("events") && !includeSources.has("deadlines") && !includeSources.has("reminders");
841
- const hasExplicitBounds = options.to !== undefined || explicitLookahead !== undefined || occurrenceLimit !== undefined;
847
+ const hasExplicitBounds = options.to !== undefined ||
848
+ explicitLookahead !== undefined ||
849
+ recurrenceLookbackDays !== undefined ||
850
+ occurrenceLimit !== undefined;
842
851
  const eventsOnlyCapApplied = eventsOnly && !hasExplicitBounds;
843
- const recurrenceLookaheadDays = eventsOnlyCapApplied ? DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS : explicitLookahead;
844
- const recurrenceLookbackWindowDays = eventsOnlyCapApplied && recurrenceLookbackDays === undefined
845
- ? 0
846
- : recurrenceLookbackDays;
852
+ return {
853
+ nowValue,
854
+ view,
855
+ rangeBounds,
856
+ limit,
857
+ includeSources,
858
+ occurrenceLimit,
859
+ recurrenceLookaheadDays: eventsOnlyCapApplied ? DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS : explicitLookahead,
860
+ recurrenceLookbackWindowDays: eventsOnlyCapApplied && recurrenceLookbackDays === undefined ? 0 : recurrenceLookbackDays,
861
+ eventsOnlyCapApplied,
862
+ };
863
+ }
864
+ function appendCalendarCapWarning(warnings, capApplied) {
865
+ if (!capApplied) {
866
+ return;
867
+ }
868
+ warnings.push(`recurring_events_default_cap_applied:lookback=0d,lookahead=${DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS}d -- use --recurrence-lookback-days/--recurrence-lookahead-days or --to for wider range`);
869
+ }
870
+ function buildCalendarFiltersResult(options, runtimeFieldFilters) {
871
+ return {
872
+ type: options.type ?? null,
873
+ tag: options.tag ?? null,
874
+ priority: options.priority ?? null,
875
+ status: options.status ?? null,
876
+ assignee: options.assignee ?? null,
877
+ assignee_filter: options.assigneeFilter ?? null,
878
+ sprint: options.sprint ?? null,
879
+ release: options.release ?? null,
880
+ runtime_filters: runtimeFieldFilters,
881
+ limit: options.limit ?? null,
882
+ include: options.include ?? null,
883
+ full_period: options.fullPeriod === true ? "true" : null,
884
+ recurrence_lookahead_days: options.recurrenceLookaheadDays ?? null,
885
+ recurrence_lookback_days: options.recurrenceLookbackDays ?? null,
886
+ occurrence_limit: options.occurrenceLimit ?? null,
887
+ };
888
+ }
889
+ function buildCalendarRangeResult(options, rangeBounds) {
890
+ return {
891
+ start: rangeBounds.start ?? null,
892
+ end: rangeBounds.end ?? null,
893
+ period_start: rangeBounds.periodStart ?? null,
894
+ period_end: rangeBounds.periodEnd ?? null,
895
+ full_period: rangeBounds.fullPeriod,
896
+ past: options.past === true,
897
+ from: options.from ?? null,
898
+ to: options.to ?? null,
899
+ };
900
+ }
901
+ /**
902
+ * Implements run calendar for the public runtime surface of this module.
903
+ */
904
+ export async function runCalendar(options, global) {
905
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
906
+ if (!(await pathExists(getSettingsPath(pmRoot)))) {
907
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
908
+ }
909
+ const inputs = resolveCalendarExecutionInputs(options);
847
910
  const settings = await readSettings(pmRoot);
848
911
  const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
849
912
  const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
850
913
  const runtimeFieldFilters = collectRuntimeFilterValues(options, runtimeFieldRegistry, "calendar");
851
914
  const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
852
915
  const listWarnings = [];
853
- if (eventsOnlyCapApplied) {
854
- listWarnings.push(`recurring_events_default_cap_applied:lookback=0d,lookahead=${DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS}d -- use --recurrence-lookback-days/--recurrence-lookahead-days or --to for wider range`);
855
- }
916
+ appendCalendarCapWarning(listWarnings, inputs.eventsOnlyCapApplied);
856
917
  const items = await listAllFrontMatterLight(pmRoot, settings.item_format, typeRegistry.type_to_folder, listWarnings, settings.schema);
857
918
  const filteredItems = filterItems(items, options, typeRegistry, statusRegistry, runtimeFieldFilters);
858
- const recurringWindow = buildRecurringEventWindow(rangeBounds.start, rangeBounds.end, nowValue, recurrenceLookbackWindowDays, recurrenceLookaheadDays);
859
- const seededEvents = buildEventSeed(filteredItems, recurringWindow, includeSources, occurrenceLimit);
860
- const rangedEvents = seededEvents.filter((event) => includeEventInWindow(event, rangeBounds.start, rangeBounds.end));
861
- const limitedEvents = limit === undefined ? rangedEvents : rangedEvents.slice(0, limit);
919
+ const recurringWindow = buildRecurringEventWindow(inputs.rangeBounds.start, inputs.rangeBounds.end, inputs.nowValue, inputs.recurrenceLookbackWindowDays, inputs.recurrenceLookaheadDays);
920
+ const seededEvents = buildEventSeed(filteredItems, recurringWindow, inputs.includeSources, inputs.occurrenceLimit);
921
+ const rangedEvents = seededEvents.filter((event) => includeEventInWindow(event, inputs.rangeBounds.start, inputs.rangeBounds.end));
922
+ const limitedEvents = inputs.limit === undefined ? rangedEvents : rangedEvents.slice(0, inputs.limit);
862
923
  const days = bucketEventsByDay(limitedEvents);
863
924
  const warnings = [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right));
864
925
  return {
865
- view,
926
+ view: inputs.view,
866
927
  output_default: "markdown",
867
- now: nowValue,
868
- anchor: rangeBounds.anchor,
869
- range: {
870
- start: rangeBounds.start ?? null,
871
- end: rangeBounds.end ?? null,
872
- period_start: rangeBounds.periodStart ?? null,
873
- period_end: rangeBounds.periodEnd ?? null,
874
- full_period: rangeBounds.fullPeriod,
875
- past: options.past === true,
876
- from: options.from ?? null,
877
- to: options.to ?? null,
878
- },
879
- filters: {
880
- type: options.type ?? null,
881
- tag: options.tag ?? null,
882
- priority: options.priority ?? null,
883
- status: options.status ?? null,
884
- assignee: options.assignee ?? null,
885
- assignee_filter: options.assigneeFilter ?? null,
886
- sprint: options.sprint ?? null,
887
- release: options.release ?? null,
888
- runtime_filters: runtimeFieldFilters,
889
- limit: options.limit ?? null,
890
- include: options.include ?? null,
891
- full_period: options.fullPeriod === true ? "true" : null,
892
- recurrence_lookahead_days: options.recurrenceLookaheadDays ?? null,
893
- recurrence_lookback_days: options.recurrenceLookbackDays ?? null,
894
- occurrence_limit: options.occurrenceLimit ?? null,
895
- },
928
+ now: inputs.nowValue,
929
+ anchor: inputs.rangeBounds.anchor,
930
+ range: buildCalendarRangeResult(options, inputs.rangeBounds),
931
+ filters: buildCalendarFiltersResult(options, runtimeFieldFilters),
896
932
  summary: summarize(limitedEvents),
897
933
  events: limitedEvents,
898
934
  days,
@@ -900,4 +936,4 @@ export async function runCalendar(options, global) {
900
936
  };
901
937
  }
902
938
  //# sourceMappingURL=calendar.js.map
903
- //# debugId=6c196179-0593-5629-926f-6e0143fb9da2
939
+ //# debugId=16039cc1-59c0-510f-9ae1-d452ba30096c