@unbrained/pm-cli 2026.6.9 → 2026.6.10

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 (506) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/cli/bootstrap-args.js +4 -2
  3. package/dist/cli/bootstrap-args.js.map +1 -1
  4. package/dist/cli/commands/aggregate.d.ts +7 -0
  5. package/dist/cli/commands/aggregate.js +53 -12
  6. package/dist/cli/commands/aggregate.js.map +1 -1
  7. package/dist/cli/commands/close.d.ts +1 -0
  8. package/dist/cli/commands/close.js +106 -3
  9. package/dist/cli/commands/close.js.map +1 -1
  10. package/dist/cli/commands/completion.js +20 -7
  11. package/dist/cli/commands/completion.js.map +1 -1
  12. package/dist/cli/commands/context.d.ts +9 -0
  13. package/dist/cli/commands/context.js +149 -20
  14. package/dist/cli/commands/context.js.map +1 -1
  15. package/dist/cli/commands/create.d.ts +1 -0
  16. package/dist/cli/commands/create.js +5 -3
  17. package/dist/cli/commands/create.js.map +1 -1
  18. package/dist/cli/commands/extension.js +4 -2
  19. package/dist/cli/commands/extension.js.map +1 -1
  20. package/dist/cli/commands/health.js +44 -6
  21. package/dist/cli/commands/health.js.map +1 -1
  22. package/dist/cli/commands/history.js +6 -5
  23. package/dist/cli/commands/history.js.map +1 -1
  24. package/dist/cli/commands/linked-test-parsers.d.ts +1 -0
  25. package/dist/cli/commands/linked-test-parsers.js +289 -2
  26. package/dist/cli/commands/linked-test-parsers.js.map +1 -1
  27. package/dist/cli/commands/reindex.d.ts +1 -0
  28. package/dist/cli/commands/reindex.js +33 -4
  29. package/dist/cli/commands/reindex.js.map +1 -1
  30. package/dist/cli/commands/test.d.ts +6 -0
  31. package/dist/cli/commands/test.js +46 -5
  32. package/dist/cli/commands/test.js.map +1 -1
  33. package/dist/cli/extension-command-help.d.ts +1 -0
  34. package/dist/cli/extension-command-help.js +42 -2
  35. package/dist/cli/extension-command-help.js.map +1 -1
  36. package/dist/cli/extension-command-options.d.ts +2 -0
  37. package/dist/cli/extension-command-options.js +51 -2
  38. package/dist/cli/extension-command-options.js.map +1 -1
  39. package/dist/cli/main.js +26 -26
  40. package/dist/cli/main.js.map +1 -1
  41. package/dist/cli/register-list-query.js +3 -2
  42. package/dist/cli/register-list-query.js.map +1 -1
  43. package/dist/cli/register-mutation.js +4 -2
  44. package/dist/cli/register-mutation.js.map +1 -1
  45. package/dist/cli/register-operations.js +15 -6
  46. package/dist/cli/register-operations.js.map +1 -1
  47. package/dist/cli/registration-helpers.js +9 -2
  48. package/dist/cli/registration-helpers.js.map +1 -1
  49. package/dist/cli-bundle/chunks/activity-5QLX6DHN.js +16 -0
  50. package/dist/cli-bundle/chunks/{activity-RUJATACW.js → activity-W6TS5F2L.js} +11 -11
  51. package/dist/cli-bundle/chunks/{aggregate-IQ27NFBI.js → aggregate-NNJLKGEK.js} +64 -23
  52. package/dist/cli-bundle/chunks/aggregate-NNJLKGEK.js.map +7 -0
  53. package/dist/cli-bundle/chunks/{aggregate-TT7OCHHT.js → aggregate-UK2WJ4Z3.js} +65 -24
  54. package/dist/cli-bundle/chunks/aggregate-UK2WJ4Z3.js.map +1 -0
  55. package/dist/cli-bundle/chunks/{append-CWQZBUWV.js → append-7BS36Z2L.js} +8 -8
  56. package/dist/cli-bundle/chunks/{append-E7AJ5RTR.js → append-DHGTLUZW.js} +8 -8
  57. package/dist/cli-bundle/chunks/{chunk-FHUI7AXS.js → chunk-2MKBPWMK.js} +3 -3
  58. package/dist/cli-bundle/chunks/{chunk-42IULX44.js → chunk-344GDQTH.js} +2 -2
  59. package/dist/cli-bundle/chunks/{chunk-5MMLINZB.js → chunk-3VTWCBXL.js} +3 -3
  60. package/dist/cli-bundle/chunks/{chunk-NUGAWYEN.js → chunk-4CYHWHZU.js} +2 -2
  61. package/dist/cli-bundle/chunks/{chunk-T7NWFVOA.js → chunk-4H2NDEGJ.js} +7 -7
  62. package/dist/cli-bundle/chunks/{chunk-FKH7K6YP.js → chunk-5HH6QRH5.js} +9 -9
  63. package/dist/cli-bundle/chunks/{chunk-OPYA2HIU.js → chunk-5OMABP7I.js} +7 -7
  64. package/dist/cli-bundle/chunks/{chunk-RKCJ2JMA.js → chunk-6ADVKPVV.js} +7 -7
  65. package/dist/cli-bundle/chunks/{chunk-EFRHTZO4.js → chunk-6KQS23TX.js} +8 -8
  66. package/dist/cli-bundle/chunks/{chunk-YX5LAKFJ.js → chunk-6N46IM44.js} +2 -2
  67. package/dist/cli-bundle/chunks/{chunk-WQZCEEQN.js → chunk-6OSG3EMX.js} +157 -12
  68. package/dist/cli-bundle/chunks/chunk-6OSG3EMX.js.map +1 -0
  69. package/dist/cli-bundle/chunks/{chunk-CAXUGAAF.js → chunk-73PSHEMT.js} +8 -8
  70. package/dist/cli-bundle/chunks/{chunk-RE2JQJZJ.js → chunk-7DUVDW7C.js} +3 -3
  71. package/dist/cli-bundle/chunks/{chunk-U3Z4OCZC.js → chunk-7GYMMDDW.js} +2 -2
  72. package/dist/cli-bundle/chunks/{chunk-SAUXUI6U.js → chunk-7TW64BS5.js} +2 -2
  73. package/dist/cli-bundle/chunks/{chunk-T7B5VAKD.js → chunk-A6XVYNQJ.js} +13 -6
  74. package/dist/cli-bundle/chunks/chunk-A6XVYNQJ.js.map +7 -0
  75. package/dist/cli-bundle/chunks/{chunk-E7LOIIFP.js → chunk-ANVZCNL5.js} +3 -3
  76. package/dist/cli-bundle/chunks/{chunk-NJRZIJ4N.js → chunk-BE5G7HEL.js} +14 -8
  77. package/dist/cli-bundle/chunks/chunk-BE5G7HEL.js.map +1 -0
  78. package/dist/cli-bundle/chunks/{chunk-RLVI7KDW.js → chunk-CMEHZD6G.js} +163 -11
  79. package/dist/cli-bundle/chunks/chunk-CMEHZD6G.js.map +7 -0
  80. package/dist/cli-bundle/chunks/{chunk-D5D7VKIC.js → chunk-CTW7QAHM.js} +6 -5
  81. package/dist/cli-bundle/chunks/chunk-CTW7QAHM.js.map +1 -0
  82. package/dist/cli-bundle/chunks/{chunk-KTVXLI54.js → chunk-D6JZBUZ6.js} +7 -7
  83. package/dist/cli-bundle/chunks/{chunk-I26E6XA7.js → chunk-DEYNERFX.js} +8 -6
  84. package/dist/cli-bundle/chunks/chunk-DEYNERFX.js.map +1 -0
  85. package/dist/cli-bundle/chunks/{chunk-YI6W2DBN.js → chunk-DMDEC4QP.js} +6 -6
  86. package/dist/cli-bundle/chunks/{chunk-AM2AXVFS.js → chunk-DTRIVUTN.js} +5 -5
  87. package/dist/cli-bundle/chunks/{chunk-I4FGL3K2.js → chunk-EAQLLID6.js} +16 -6
  88. package/dist/cli-bundle/chunks/chunk-EAQLLID6.js.map +1 -0
  89. package/dist/cli-bundle/chunks/{chunk-JEGFLKSI.js → chunk-EIS32UA4.js} +2 -2
  90. package/dist/cli-bundle/chunks/chunk-F2PVV7IX.js +528 -0
  91. package/dist/cli-bundle/chunks/chunk-F2PVV7IX.js.map +7 -0
  92. package/dist/cli-bundle/chunks/{chunk-4LRVXVJK.js → chunk-GF5XIBUH.js} +70 -9
  93. package/dist/cli-bundle/chunks/chunk-GF5XIBUH.js.map +7 -0
  94. package/dist/cli-bundle/chunks/{chunk-PUSOAQCR.js → chunk-GP6SHEAI.js} +5 -5
  95. package/dist/cli-bundle/chunks/{chunk-I3UILOUU.js → chunk-GRHPU6EM.js} +2 -2
  96. package/dist/cli-bundle/chunks/{chunk-WCWIDJII.js → chunk-I2FM2SMO.js} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-ANKG2JKL.js → chunk-IEQ3N7WP.js} +12 -5
  98. package/dist/cli-bundle/chunks/chunk-IEQ3N7WP.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{chunk-JN3BT7UY.js → chunk-K45NAJV2.js} +9 -9
  100. package/dist/cli-bundle/chunks/{chunk-23WNCJBA.js → chunk-K7SXBA75.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-FJNJEWU4.js → chunk-KHBRV5JU.js} +14 -12
  102. package/dist/cli-bundle/chunks/chunk-KHBRV5JU.js.map +1 -0
  103. package/dist/cli-bundle/chunks/{chunk-7YTWXGE3.js → chunk-KMMUDSSB.js} +112 -7
  104. package/dist/cli-bundle/chunks/chunk-KMMUDSSB.js.map +1 -0
  105. package/dist/cli-bundle/chunks/{chunk-JVMAOD54.js → chunk-KRZQGRVL.js} +14 -7
  106. package/dist/cli-bundle/chunks/chunk-KRZQGRVL.js.map +1 -0
  107. package/dist/cli-bundle/chunks/{chunk-BACSNVWE.js → chunk-LUJQJR7G.js} +71 -69
  108. package/dist/cli-bundle/chunks/{chunk-BACSNVWE.js.map → chunk-LUJQJR7G.js.map} +1 -1
  109. package/dist/cli-bundle/chunks/{chunk-P2NVFE4L.js → chunk-LYL32FT6.js} +3 -3
  110. package/dist/cli-bundle/chunks/{chunk-AVGOVJGV.js → chunk-MF6KSSMF.js} +9 -9
  111. package/dist/cli-bundle/chunks/{chunk-AVGOVJGV.js.map → chunk-MF6KSSMF.js.map} +1 -1
  112. package/dist/cli-bundle/chunks/{chunk-ZPXDD6RQ.js → chunk-O64EYNHF.js} +6 -6
  113. package/dist/cli-bundle/chunks/{chunk-C72IQIBT.js → chunk-OQGJSCZZ.js} +301 -30
  114. package/dist/cli-bundle/chunks/chunk-OQGJSCZZ.js.map +7 -0
  115. package/dist/cli-bundle/chunks/{chunk-44JP4PYY.js → chunk-OROMGSBP.js} +2 -2
  116. package/dist/cli-bundle/chunks/{chunk-LU54Z4QI.js → chunk-OSGWBWLK.js} +76 -74
  117. package/dist/cli-bundle/chunks/{chunk-LU54Z4QI.js.map → chunk-OSGWBWLK.js.map} +3 -3
  118. package/dist/cli-bundle/chunks/{chunk-OT6XAMO5.js → chunk-OVNSQHDG.js} +7 -5
  119. package/dist/cli-bundle/chunks/{chunk-OT6XAMO5.js.map → chunk-OVNSQHDG.js.map} +2 -2
  120. package/dist/cli-bundle/chunks/{chunk-PW7C262O.js → chunk-PYULT32I.js} +2 -2
  121. package/dist/cli-bundle/chunks/{chunk-NHRZSYAA.js → chunk-Q6PSD5DZ.js} +3 -3
  122. package/dist/cli-bundle/chunks/{chunk-A5342JVL.js → chunk-QGIWURY3.js} +12 -12
  123. package/dist/cli-bundle/chunks/{chunk-GPOSGWCN.js → chunk-QJ2OIEOC.js} +68 -7
  124. package/dist/cli-bundle/chunks/chunk-QJ2OIEOC.js.map +1 -0
  125. package/dist/cli-bundle/chunks/{chunk-5ATRWEZO.js → chunk-SNASEDXB.js} +3 -3
  126. package/dist/cli-bundle/chunks/{chunk-KDX6VC3P.js → chunk-T6QLB34N.js} +3 -3
  127. package/dist/cli-bundle/chunks/{chunk-6IGTNFE3.js → chunk-TALBUVWF.js} +2 -2
  128. package/dist/cli-bundle/chunks/{chunk-VDVVOLR6.js → chunk-TV6FZGVK.js} +3 -3
  129. package/dist/cli-bundle/chunks/{chunk-H37YPWLM.js → chunk-TXWMLDMG.js} +13 -7
  130. package/dist/cli-bundle/chunks/chunk-TXWMLDMG.js.map +7 -0
  131. package/dist/cli-bundle/chunks/{chunk-TLD3UYGY.js → chunk-TZLGCTA5.js} +5 -4
  132. package/dist/cli-bundle/chunks/chunk-TZLGCTA5.js.map +7 -0
  133. package/dist/cli-bundle/chunks/{chunk-7CR4GAYN.js → chunk-UDWUDUJI.js} +2 -2
  134. package/dist/cli-bundle/chunks/{chunk-YSANBZAE.js → chunk-UMWF6ZAS.js} +12 -5
  135. package/dist/cli-bundle/chunks/chunk-UMWF6ZAS.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-F2REA7VW.js → chunk-UNH3KSHG.js} +3 -3
  137. package/dist/cli-bundle/chunks/{chunk-4TJWRPIH.js → chunk-UY26RIBR.js} +2 -2
  138. package/dist/cli-bundle/chunks/{chunk-MNXJ6YDO.js → chunk-VSS3CSTF.js} +9 -9
  139. package/dist/cli-bundle/chunks/{chunk-EQ6N6IDR.js → chunk-WBU257Z4.js} +13 -11
  140. package/dist/cli-bundle/chunks/chunk-WBU257Z4.js.map +7 -0
  141. package/dist/cli-bundle/chunks/{chunk-5JF76OJF.js → chunk-WNMRICXH.js} +289 -25
  142. package/dist/cli-bundle/chunks/chunk-WNMRICXH.js.map +1 -0
  143. package/dist/cli-bundle/chunks/chunk-WSWOQP3Z.js +518 -0
  144. package/dist/cli-bundle/chunks/chunk-WSWOQP3Z.js.map +1 -0
  145. package/dist/cli-bundle/chunks/{chunk-ENCVPOID.js → chunk-WWEFBBVF.js} +12 -12
  146. package/dist/cli-bundle/chunks/{chunk-XEOO6K5J.js → chunk-X3IPJU2O.js} +9 -9
  147. package/dist/cli-bundle/chunks/{chunk-RMTI5R76.js → chunk-X5YC5DZM.js} +111 -6
  148. package/dist/cli-bundle/chunks/chunk-X5YC5DZM.js.map +7 -0
  149. package/dist/cli-bundle/chunks/{chunk-3RHE76G6.js → chunk-XH6RA5A5.js} +15 -15
  150. package/dist/cli-bundle/chunks/chunk-XH6RA5A5.js.map +1 -0
  151. package/dist/cli-bundle/chunks/{chunk-LF2VNLEZ.js → chunk-XRE4CTNP.js} +8 -8
  152. package/dist/cli-bundle/chunks/{chunk-LF2VNLEZ.js.map → chunk-XRE4CTNP.js.map} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-SD6H3RLA.js → chunk-XSCGU4WT.js} +15 -5
  154. package/dist/cli-bundle/chunks/{chunk-SD6H3RLA.js.map → chunk-XSCGU4WT.js.map} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-BIRVSIM2.js → chunk-ZH7C7ZVX.js} +14 -14
  156. package/dist/cli-bundle/chunks/chunk-ZH7C7ZVX.js.map +7 -0
  157. package/dist/cli-bundle/chunks/{claim-UXFGCF3P.js → claim-3TY5LE54.js} +10 -10
  158. package/dist/cli-bundle/chunks/{claim-RV6WYUF7.js → claim-LM4YY6QQ.js} +10 -10
  159. package/dist/cli-bundle/chunks/{close-O4JK2JKD.js → close-CSD4LEMT.js} +8 -8
  160. package/dist/cli-bundle/chunks/close-SIQCDOBR.js +13 -0
  161. package/dist/cli-bundle/chunks/{close-many-EQO4TPIE.js → close-many-B5SHDX6W.js} +15 -15
  162. package/dist/cli-bundle/chunks/{close-many-SRDBV3SI.js → close-many-WRXB5KVY.js} +15 -15
  163. package/dist/cli-bundle/chunks/{comments-OMB7YE27.js → comments-A5ALOYTG.js} +10 -10
  164. package/dist/cli-bundle/chunks/{comments-TTZUIB2O.js → comments-BDDEK3VW.js} +10 -10
  165. package/dist/cli-bundle/chunks/{config-5VPR42A6.js → config-W2NHDNQT.js} +8 -8
  166. package/dist/cli-bundle/chunks/{config-NNLXVGVC.js → config-YUYBMJOW.js} +8 -8
  167. package/dist/cli-bundle/chunks/{context-4QK6GRXO.js → context-LRJ74NSU.js} +146 -33
  168. package/dist/cli-bundle/chunks/{context-4QK6GRXO.js.map → context-LRJ74NSU.js.map} +2 -2
  169. package/dist/cli-bundle/chunks/{context-4N7GYTVQ.js → context-R2QLOJCK.js} +147 -34
  170. package/dist/cli-bundle/chunks/context-R2QLOJCK.js.map +1 -0
  171. package/dist/cli-bundle/chunks/{contracts-AOBNEBVT.js → contracts-47X7RYUF.js} +4 -4
  172. package/dist/cli-bundle/chunks/{contracts-DXCWXOSP.js → contracts-HJHR4NCD.js} +4 -4
  173. package/dist/cli-bundle/chunks/{copy-XSYEQTLA.js → copy-B7HFOWFB.js} +7 -7
  174. package/dist/cli-bundle/chunks/{copy-5NM3SVJA.js → copy-P4UVYZ7M.js} +7 -7
  175. package/dist/cli-bundle/chunks/{create-FCCAATQV.js → create-5ERJF64D.js} +13 -13
  176. package/dist/cli-bundle/chunks/create-TXNRPS4K.js +27 -0
  177. package/dist/cli-bundle/chunks/{delete-5JFP6OG7.js → delete-LX3LGBCH.js} +7 -7
  178. package/dist/cli-bundle/chunks/{delete-PQXJQXQ7.js → delete-S3WVK6LP.js} +7 -7
  179. package/dist/cli-bundle/chunks/{deps-XXKBOQUA.js → deps-GWSNH7OZ.js} +7 -7
  180. package/dist/cli-bundle/chunks/{deps-S5322EOQ.js → deps-YSM4LZQD.js} +7 -7
  181. package/dist/cli-bundle/chunks/{docs-DZRPAW5S.js → docs-7RYFBHQD.js} +9 -9
  182. package/dist/cli-bundle/chunks/{docs-C7CCVWAJ.js → docs-TG6JMVMY.js} +9 -9
  183. package/dist/cli-bundle/chunks/{extension-CSHP6FZX.js → extension-R3LUKMX7.js} +5 -5
  184. package/dist/cli-bundle/chunks/{extension-XNNVUVAY.js → extension-VNMRKIHI.js} +5 -5
  185. package/dist/cli-bundle/chunks/{files-OBWYYPKM.js → files-KAKU57OT.js} +9 -9
  186. package/dist/cli-bundle/chunks/{files-UPCNKEIZ.js → files-QB3EYPMO.js} +9 -9
  187. package/dist/cli-bundle/chunks/{gc-KXK6KBRN.js → gc-B747VM4M.js} +3 -3
  188. package/dist/cli-bundle/chunks/{gc-FA2ONELT.js → gc-KNUPLPSW.js} +3 -3
  189. package/dist/cli-bundle/chunks/{get-PNTSONGB.js → get-GMGLIQ5I.js} +11 -11
  190. package/dist/cli-bundle/chunks/{get-FLHYTOBA.js → get-SBL6NHYQ.js} +11 -11
  191. package/dist/cli-bundle/chunks/{health-CS5RNTJX.js → health-IG43Z4KL.js} +47 -19
  192. package/dist/cli-bundle/chunks/health-IG43Z4KL.js.map +1 -0
  193. package/dist/cli-bundle/chunks/{health-KCRVYIYY.js → health-WWZJ5KJS.js} +46 -18
  194. package/dist/cli-bundle/chunks/health-WWZJ5KJS.js.map +7 -0
  195. package/dist/cli-bundle/chunks/history-6UKSZTRT.js +20 -0
  196. package/dist/cli-bundle/chunks/{history-COQTPBEU.js → history-XCWRXBXC.js} +10 -10
  197. package/dist/cli-bundle/chunks/{history-compact-66PSRYL3.js → history-compact-IDH7E7VN.js} +11 -11
  198. package/dist/cli-bundle/chunks/{history-compact-PVS2A3FS.js → history-compact-KICKUCR7.js} +11 -11
  199. package/dist/cli-bundle/chunks/history-redact-HKYBTK6X.js +19 -0
  200. package/dist/cli-bundle/chunks/{history-redact-DCXAWGTF.js → history-redact-JJWH3QWK.js} +11 -11
  201. package/dist/cli-bundle/chunks/{history-repair-TA3NRIFO.js → history-repair-7HWBZKXN.js} +11 -11
  202. package/dist/cli-bundle/chunks/{history-repair-SEQDFTGW.js → history-repair-N5HXKJOI.js} +11 -11
  203. package/dist/cli-bundle/chunks/init-27JLDUO2.js +17 -0
  204. package/dist/cli-bundle/chunks/{init-IQJE3EKJ.js → init-OQA3TWIS.js} +9 -9
  205. package/dist/cli-bundle/chunks/{learnings-XC6EMW5E.js → learnings-L7VQUSVI.js} +10 -10
  206. package/dist/cli-bundle/chunks/{learnings-RJPGH2ME.js → learnings-Z4GAIZQ5.js} +10 -10
  207. package/dist/cli-bundle/chunks/list-6U3CJVXS.js +19 -0
  208. package/dist/cli-bundle/chunks/{list-NJV6WBT4.js → list-W5ROBC5U.js} +10 -10
  209. package/dist/cli-bundle/chunks/{notes-2KWHADK3.js → notes-JJDOEDFK.js} +10 -10
  210. package/dist/cli-bundle/chunks/{notes-FNCDMZW2.js → notes-SDCK7BEN.js} +10 -10
  211. package/dist/cli-bundle/chunks/{plan-MQO5JTSV.js → plan-H5HYHMBB.js} +13 -13
  212. package/dist/cli-bundle/chunks/{plan-CYK2P5PD.js → plan-W2B5RYR3.js} +13 -13
  213. package/dist/cli-bundle/chunks/{register-list-query-IO3RR5K6.js → register-list-query-QGRFMDWA.js} +20 -20
  214. package/dist/cli-bundle/chunks/register-list-query-QGRFMDWA.js.map +7 -0
  215. package/dist/cli-bundle/chunks/{register-list-query-6RA24SIZ.js → register-list-query-V4S23735.js} +21 -21
  216. package/dist/cli-bundle/chunks/register-list-query-V4S23735.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{register-mutation-VV2SC2KL.js → register-mutation-I57PLUHA.js} +36 -35
  218. package/dist/cli-bundle/chunks/register-mutation-I57PLUHA.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{register-mutation-KVFUXCAZ.js → register-mutation-ZPZNJXSA.js} +35 -34
  220. package/dist/cli-bundle/chunks/register-mutation-ZPZNJXSA.js.map +7 -0
  221. package/dist/cli-bundle/chunks/{register-operations-DFNVRSJ5.js → register-operations-KAMLXAF5.js} +42 -37
  222. package/dist/cli-bundle/chunks/register-operations-KAMLXAF5.js.map +1 -0
  223. package/dist/cli-bundle/chunks/{register-operations-TAUUTRJ4.js → register-operations-YEN4YEZ2.js} +41 -36
  224. package/dist/cli-bundle/chunks/register-operations-YEN4YEZ2.js.map +7 -0
  225. package/dist/cli-bundle/chunks/{register-setup-GAQZZRUA.js → register-setup-BZ3TNE3G.js} +15 -15
  226. package/dist/cli-bundle/chunks/{register-setup-X2R5CFDV.js → register-setup-WLFL3OUF.js} +15 -15
  227. package/dist/cli-bundle/chunks/restore-GNI2W5CN.js +17 -0
  228. package/dist/cli-bundle/chunks/{restore-E3GZKRRK.js → restore-RGFSPG4K.js} +11 -11
  229. package/dist/cli-bundle/chunks/{schema-3CPFLDAY.js → schema-CCDU3RLC.js} +8 -8
  230. package/dist/cli-bundle/chunks/{schema-7EHBPNXM.js → schema-KZASL323.js} +8 -8
  231. package/dist/cli-bundle/chunks/{search-OBZVYJJ2.js → search-7KSOLI2E.js} +10 -10
  232. package/dist/cli-bundle/chunks/{search-2T3NCCUR.js → search-DTL7CO22.js} +10 -10
  233. package/dist/cli-bundle/chunks/{stats-ULGQACF7.js → stats-IOXQMGI6.js} +7 -7
  234. package/dist/cli-bundle/chunks/{stats-6LVK4JER.js → stats-QNV7B2CE.js} +7 -7
  235. package/dist/cli-bundle/chunks/{telemetry-6G27FLCP.js → telemetry-IV5C6JOM.js} +4 -4
  236. package/dist/cli-bundle/chunks/{telemetry-HHKRTMZA.js → telemetry-NHR5RFXT.js} +4 -4
  237. package/dist/cli-bundle/chunks/test-4Z37CXW4.js +32 -0
  238. package/dist/cli-bundle/chunks/{test-2PP4YBV6.js → test-PIL2CEEB.js} +14 -14
  239. package/dist/cli-bundle/chunks/{test-all-NETGVNM6.js → test-all-GRLYHBNP.js} +14 -14
  240. package/dist/cli-bundle/chunks/{test-all-6Z272JRI.js → test-all-MFN4MYCV.js} +14 -14
  241. package/dist/cli-bundle/chunks/{test-runs-CRPQVMMG.js → test-runs-7LRFWWCA.js} +5 -5
  242. package/dist/cli-bundle/chunks/{test-runs-M24WA6TI.js → test-runs-7WCSC3TY.js} +5 -5
  243. package/dist/cli-bundle/chunks/update-I4G34LKJ.js +21 -0
  244. package/dist/cli-bundle/chunks/update-VI5DBZ3G.js +25 -0
  245. package/dist/cli-bundle/chunks/{update-many-JSRF5EH5.js → update-many-LOTAYUTN.js} +22 -22
  246. package/dist/cli-bundle/chunks/{update-many-Y3HOL7WA.js → update-many-UYMTVF42.js} +22 -22
  247. package/dist/cli-bundle/chunks/{upgrade-ECB6GH3M.js → upgrade-LT2MLLPS.js} +5 -5
  248. package/dist/cli-bundle/chunks/{upgrade-5RTQVKKE.js → upgrade-ZZSC7CLV.js} +5 -5
  249. package/dist/cli-bundle/chunks/{validate-J6Q444SD.js → validate-3XRORNMP.js} +16 -16
  250. package/dist/cli-bundle/chunks/{validate-MCNMAXVA.js → validate-IQIQSKUX.js} +16 -16
  251. package/dist/cli-bundle/main.js +132 -44
  252. package/dist/cli-bundle/main.js.map +2 -2
  253. package/dist/core/diagnostics/remediation.js +12 -2
  254. package/dist/core/diagnostics/remediation.js.map +1 -1
  255. package/dist/core/extensions/extension-policy.d.ts +14 -1
  256. package/dist/core/extensions/extension-policy.js +38 -3
  257. package/dist/core/extensions/extension-policy.js.map +1 -1
  258. package/dist/core/extensions/extension-types.d.ts +40 -1
  259. package/dist/core/extensions/extension-types.js +28 -2
  260. package/dist/core/extensions/extension-types.js.map +1 -1
  261. package/dist/core/extensions/loader.d.ts +6 -4
  262. package/dist/core/extensions/loader.js +67 -14
  263. package/dist/core/extensions/loader.js.map +1 -1
  264. package/dist/core/history/replay.d.ts +1 -1
  265. package/dist/core/history/replay.js +13 -4
  266. package/dist/core/history/replay.js.map +1 -1
  267. package/dist/core/output/mutation-projection.d.ts +2 -0
  268. package/dist/core/output/mutation-projection.js +9 -2
  269. package/dist/core/output/mutation-projection.js.map +1 -1
  270. package/dist/core/output/output.d.ts +2 -0
  271. package/dist/core/output/output.js +7 -3
  272. package/dist/core/output/output.js.map +1 -1
  273. package/dist/core/shared/command-types.d.ts +1 -0
  274. package/dist/core/shared/command-types.js +2 -2
  275. package/dist/core/shared/command-types.js.map +1 -1
  276. package/dist/core/shared/constants.js +7 -4
  277. package/dist/core/shared/constants.js.map +1 -1
  278. package/dist/core/store/item-store.d.ts +1 -1
  279. package/dist/core/store/item-store.js +3 -3
  280. package/dist/core/store/item-store.js.map +1 -1
  281. package/dist/core/store/settings-read-cache.d.ts +15 -0
  282. package/dist/core/store/settings-read-cache.js +72 -0
  283. package/dist/core/store/settings-read-cache.js.map +1 -0
  284. package/dist/core/store/settings-validator.d.ts +4 -1
  285. package/dist/core/store/settings-validator.js +14 -2
  286. package/dist/core/store/settings-validator.js.map +1 -1
  287. package/dist/core/store/settings.js +166 -16
  288. package/dist/core/store/settings.js.map +1 -1
  289. package/dist/core/telemetry/runtime.d.ts +1 -0
  290. package/dist/core/telemetry/runtime.js +3 -3
  291. package/dist/core/telemetry/runtime.js.map +1 -1
  292. package/dist/core/test/run-selectors.d.ts +27 -0
  293. package/dist/core/test/run-selectors.js +110 -0
  294. package/dist/core/test/run-selectors.js.map +1 -0
  295. package/dist/mcp/server.js +50 -11
  296. package/dist/mcp/server.js.map +1 -1
  297. package/dist/sdk/cli-contracts/commander-mutation-options.js +3 -2
  298. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
  299. package/dist/sdk/cli-contracts/tool-option-contracts.js +3 -2
  300. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  301. package/dist/sdk/cli-contracts/tool-parameter-tables.js +29 -2
  302. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  303. package/dist/sdk/cli-contracts.js +37 -5
  304. package/dist/sdk/cli-contracts.js.map +1 -1
  305. package/dist/sdk/index.d.ts +1 -1
  306. package/dist/sdk/index.js +2 -2
  307. package/dist/sdk/index.js.map +1 -1
  308. package/dist/sdk/runtime.d.ts +6 -0
  309. package/dist/sdk/runtime.js +51 -3
  310. package/dist/sdk/runtime.js.map +1 -1
  311. package/dist/types.d.ts +4 -1
  312. package/dist/types.js +4 -2
  313. package/dist/types.js.map +1 -1
  314. package/docs/AGENT_GUIDE.md +7 -1
  315. package/docs/ARCHITECTURE.md +7 -0
  316. package/docs/COMMANDS.md +37 -3
  317. package/docs/CONFIGURATION.md +1 -1
  318. package/docs/EXTENSIONS.md +55 -53
  319. package/docs/SDK.md +8 -2
  320. package/docs/TESTING.md +60 -0
  321. package/docs/schemas/extension-manifest.schema.json +120 -0
  322. package/package.json +2 -2
  323. package/packages/pm-beads/extensions/beads/manifest.json +10 -0
  324. package/packages/pm-calendar/extensions/calendar/manifest.json +10 -0
  325. package/packages/pm-command-kit/README.md +72 -0
  326. package/packages/pm-command-kit/extensions/command-kit/index.js +181 -0
  327. package/packages/pm-command-kit/extensions/command-kit/index.ts +176 -0
  328. package/packages/pm-command-kit/extensions/command-kit/manifest.json +22 -0
  329. package/packages/pm-command-kit/package.json +53 -0
  330. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +10 -0
  331. package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +10 -0
  332. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +10 -0
  333. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +10 -0
  334. package/packages/pm-search-advanced/extensions/search-advanced/index.js +6 -0
  335. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +6 -0
  336. package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +10 -0
  337. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +1 -0
  338. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -0
  339. package/packages/pm-templates/extensions/templates/manifest.json +10 -0
  340. package/packages/pm-todos/extensions/todos/manifest.json +10 -0
  341. package/dist/cli-bundle/chunks/activity-HF3VJYKH.js +0 -16
  342. package/dist/cli-bundle/chunks/aggregate-IQ27NFBI.js.map +0 -7
  343. package/dist/cli-bundle/chunks/aggregate-TT7OCHHT.js.map +0 -1
  344. package/dist/cli-bundle/chunks/chunk-3RHE76G6.js.map +0 -1
  345. package/dist/cli-bundle/chunks/chunk-4LRVXVJK.js.map +0 -7
  346. package/dist/cli-bundle/chunks/chunk-5JF76OJF.js.map +0 -1
  347. package/dist/cli-bundle/chunks/chunk-7YTWXGE3.js.map +0 -1
  348. package/dist/cli-bundle/chunks/chunk-ANKG2JKL.js.map +0 -1
  349. package/dist/cli-bundle/chunks/chunk-BIRVSIM2.js.map +0 -7
  350. package/dist/cli-bundle/chunks/chunk-C72IQIBT.js.map +0 -7
  351. package/dist/cli-bundle/chunks/chunk-D5D7VKIC.js.map +0 -1
  352. package/dist/cli-bundle/chunks/chunk-EQ6N6IDR.js.map +0 -7
  353. package/dist/cli-bundle/chunks/chunk-FJNJEWU4.js.map +0 -1
  354. package/dist/cli-bundle/chunks/chunk-GPOSGWCN.js.map +0 -1
  355. package/dist/cli-bundle/chunks/chunk-H37YPWLM.js.map +0 -7
  356. package/dist/cli-bundle/chunks/chunk-I26E6XA7.js.map +0 -1
  357. package/dist/cli-bundle/chunks/chunk-I4FGL3K2.js.map +0 -1
  358. package/dist/cli-bundle/chunks/chunk-JVMAOD54.js.map +0 -1
  359. package/dist/cli-bundle/chunks/chunk-LU2HE272.js +0 -242
  360. package/dist/cli-bundle/chunks/chunk-LU2HE272.js.map +0 -1
  361. package/dist/cli-bundle/chunks/chunk-NJRZIJ4N.js.map +0 -1
  362. package/dist/cli-bundle/chunks/chunk-O4L7Z6LB.js +0 -252
  363. package/dist/cli-bundle/chunks/chunk-O4L7Z6LB.js.map +0 -7
  364. package/dist/cli-bundle/chunks/chunk-RLVI7KDW.js.map +0 -7
  365. package/dist/cli-bundle/chunks/chunk-RMTI5R76.js.map +0 -7
  366. package/dist/cli-bundle/chunks/chunk-T7B5VAKD.js.map +0 -7
  367. package/dist/cli-bundle/chunks/chunk-TLD3UYGY.js.map +0 -7
  368. package/dist/cli-bundle/chunks/chunk-WQZCEEQN.js.map +0 -1
  369. package/dist/cli-bundle/chunks/chunk-YSANBZAE.js.map +0 -7
  370. package/dist/cli-bundle/chunks/close-JTTGW7TS.js +0 -13
  371. package/dist/cli-bundle/chunks/context-4N7GYTVQ.js.map +0 -1
  372. package/dist/cli-bundle/chunks/create-JAPLFDGJ.js +0 -27
  373. package/dist/cli-bundle/chunks/health-CS5RNTJX.js.map +0 -1
  374. package/dist/cli-bundle/chunks/health-KCRVYIYY.js.map +0 -7
  375. package/dist/cli-bundle/chunks/history-6624XISO.js +0 -20
  376. package/dist/cli-bundle/chunks/history-redact-ZRQTI7NB.js +0 -19
  377. package/dist/cli-bundle/chunks/init-ZVE2HMKK.js +0 -17
  378. package/dist/cli-bundle/chunks/list-OO5P472O.js +0 -19
  379. package/dist/cli-bundle/chunks/register-list-query-6RA24SIZ.js.map +0 -1
  380. package/dist/cli-bundle/chunks/register-list-query-IO3RR5K6.js.map +0 -7
  381. package/dist/cli-bundle/chunks/register-mutation-KVFUXCAZ.js.map +0 -7
  382. package/dist/cli-bundle/chunks/register-mutation-VV2SC2KL.js.map +0 -1
  383. package/dist/cli-bundle/chunks/register-operations-DFNVRSJ5.js.map +0 -1
  384. package/dist/cli-bundle/chunks/register-operations-TAUUTRJ4.js.map +0 -7
  385. package/dist/cli-bundle/chunks/restore-F4ALFV4D.js +0 -17
  386. package/dist/cli-bundle/chunks/test-PPOLRIBA.js +0 -32
  387. package/dist/cli-bundle/chunks/update-MCPCPMHV.js +0 -25
  388. package/dist/cli-bundle/chunks/update-O7TBOUVQ.js +0 -21
  389. /package/dist/cli-bundle/chunks/{activity-HF3VJYKH.js.map → activity-5QLX6DHN.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{activity-RUJATACW.js.map → activity-W6TS5F2L.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{append-CWQZBUWV.js.map → append-7BS36Z2L.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{append-E7AJ5RTR.js.map → append-DHGTLUZW.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{chunk-FHUI7AXS.js.map → chunk-2MKBPWMK.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{chunk-42IULX44.js.map → chunk-344GDQTH.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{chunk-5MMLINZB.js.map → chunk-3VTWCBXL.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{chunk-NUGAWYEN.js.map → chunk-4CYHWHZU.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{chunk-T7NWFVOA.js.map → chunk-4H2NDEGJ.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{chunk-FKH7K6YP.js.map → chunk-5HH6QRH5.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{chunk-OPYA2HIU.js.map → chunk-5OMABP7I.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{chunk-RKCJ2JMA.js.map → chunk-6ADVKPVV.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{chunk-EFRHTZO4.js.map → chunk-6KQS23TX.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{chunk-YX5LAKFJ.js.map → chunk-6N46IM44.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{chunk-CAXUGAAF.js.map → chunk-73PSHEMT.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{chunk-RE2JQJZJ.js.map → chunk-7DUVDW7C.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{chunk-U3Z4OCZC.js.map → chunk-7GYMMDDW.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{chunk-SAUXUI6U.js.map → chunk-7TW64BS5.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{chunk-E7LOIIFP.js.map → chunk-ANVZCNL5.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{chunk-KTVXLI54.js.map → chunk-D6JZBUZ6.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{chunk-YI6W2DBN.js.map → chunk-DMDEC4QP.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{chunk-AM2AXVFS.js.map → chunk-DTRIVUTN.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{chunk-JEGFLKSI.js.map → chunk-EIS32UA4.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{chunk-PUSOAQCR.js.map → chunk-GP6SHEAI.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{chunk-I3UILOUU.js.map → chunk-GRHPU6EM.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{chunk-WCWIDJII.js.map → chunk-I2FM2SMO.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{chunk-JN3BT7UY.js.map → chunk-K45NAJV2.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{chunk-23WNCJBA.js.map → chunk-K7SXBA75.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{chunk-P2NVFE4L.js.map → chunk-LYL32FT6.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{chunk-ZPXDD6RQ.js.map → chunk-O64EYNHF.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{chunk-44JP4PYY.js.map → chunk-OROMGSBP.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{chunk-PW7C262O.js.map → chunk-PYULT32I.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{chunk-NHRZSYAA.js.map → chunk-Q6PSD5DZ.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{chunk-A5342JVL.js.map → chunk-QGIWURY3.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{chunk-5ATRWEZO.js.map → chunk-SNASEDXB.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{chunk-KDX6VC3P.js.map → chunk-T6QLB34N.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{chunk-6IGTNFE3.js.map → chunk-TALBUVWF.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{chunk-VDVVOLR6.js.map → chunk-TV6FZGVK.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{chunk-7CR4GAYN.js.map → chunk-UDWUDUJI.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{chunk-F2REA7VW.js.map → chunk-UNH3KSHG.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{chunk-4TJWRPIH.js.map → chunk-UY26RIBR.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{chunk-MNXJ6YDO.js.map → chunk-VSS3CSTF.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{chunk-ENCVPOID.js.map → chunk-WWEFBBVF.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{chunk-XEOO6K5J.js.map → chunk-X3IPJU2O.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{claim-UXFGCF3P.js.map → claim-3TY5LE54.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{claim-RV6WYUF7.js.map → claim-LM4YY6QQ.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{close-O4JK2JKD.js.map → close-CSD4LEMT.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{close-JTTGW7TS.js.map → close-SIQCDOBR.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{close-many-EQO4TPIE.js.map → close-many-B5SHDX6W.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{close-many-SRDBV3SI.js.map → close-many-WRXB5KVY.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{comments-OMB7YE27.js.map → comments-A5ALOYTG.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{comments-TTZUIB2O.js.map → comments-BDDEK3VW.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{config-5VPR42A6.js.map → config-W2NHDNQT.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{config-NNLXVGVC.js.map → config-YUYBMJOW.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{contracts-AOBNEBVT.js.map → contracts-47X7RYUF.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{contracts-DXCWXOSP.js.map → contracts-HJHR4NCD.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{copy-XSYEQTLA.js.map → copy-B7HFOWFB.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{copy-5NM3SVJA.js.map → copy-P4UVYZ7M.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{create-FCCAATQV.js.map → create-5ERJF64D.js.map} +0 -0
  448. /package/dist/cli-bundle/chunks/{create-JAPLFDGJ.js.map → create-TXNRPS4K.js.map} +0 -0
  449. /package/dist/cli-bundle/chunks/{delete-5JFP6OG7.js.map → delete-LX3LGBCH.js.map} +0 -0
  450. /package/dist/cli-bundle/chunks/{delete-PQXJQXQ7.js.map → delete-S3WVK6LP.js.map} +0 -0
  451. /package/dist/cli-bundle/chunks/{deps-XXKBOQUA.js.map → deps-GWSNH7OZ.js.map} +0 -0
  452. /package/dist/cli-bundle/chunks/{deps-S5322EOQ.js.map → deps-YSM4LZQD.js.map} +0 -0
  453. /package/dist/cli-bundle/chunks/{docs-DZRPAW5S.js.map → docs-7RYFBHQD.js.map} +0 -0
  454. /package/dist/cli-bundle/chunks/{docs-C7CCVWAJ.js.map → docs-TG6JMVMY.js.map} +0 -0
  455. /package/dist/cli-bundle/chunks/{extension-CSHP6FZX.js.map → extension-R3LUKMX7.js.map} +0 -0
  456. /package/dist/cli-bundle/chunks/{extension-XNNVUVAY.js.map → extension-VNMRKIHI.js.map} +0 -0
  457. /package/dist/cli-bundle/chunks/{files-OBWYYPKM.js.map → files-KAKU57OT.js.map} +0 -0
  458. /package/dist/cli-bundle/chunks/{files-UPCNKEIZ.js.map → files-QB3EYPMO.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{gc-KXK6KBRN.js.map → gc-B747VM4M.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{gc-FA2ONELT.js.map → gc-KNUPLPSW.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{get-PNTSONGB.js.map → get-GMGLIQ5I.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{get-FLHYTOBA.js.map → get-SBL6NHYQ.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{history-6624XISO.js.map → history-6UKSZTRT.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{history-COQTPBEU.js.map → history-XCWRXBXC.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{history-compact-66PSRYL3.js.map → history-compact-IDH7E7VN.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{history-compact-PVS2A3FS.js.map → history-compact-KICKUCR7.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{history-redact-ZRQTI7NB.js.map → history-redact-HKYBTK6X.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{history-redact-DCXAWGTF.js.map → history-redact-JJWH3QWK.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{history-repair-TA3NRIFO.js.map → history-repair-7HWBZKXN.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{history-repair-SEQDFTGW.js.map → history-repair-N5HXKJOI.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{init-ZVE2HMKK.js.map → init-27JLDUO2.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{init-IQJE3EKJ.js.map → init-OQA3TWIS.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{learnings-XC6EMW5E.js.map → learnings-L7VQUSVI.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{learnings-RJPGH2ME.js.map → learnings-Z4GAIZQ5.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{list-OO5P472O.js.map → list-6U3CJVXS.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{list-NJV6WBT4.js.map → list-W5ROBC5U.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{notes-2KWHADK3.js.map → notes-JJDOEDFK.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{notes-FNCDMZW2.js.map → notes-SDCK7BEN.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{plan-MQO5JTSV.js.map → plan-H5HYHMBB.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{plan-CYK2P5PD.js.map → plan-W2B5RYR3.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{register-setup-GAQZZRUA.js.map → register-setup-BZ3TNE3G.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{register-setup-X2R5CFDV.js.map → register-setup-WLFL3OUF.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{restore-F4ALFV4D.js.map → restore-GNI2W5CN.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{restore-E3GZKRRK.js.map → restore-RGFSPG4K.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{schema-3CPFLDAY.js.map → schema-CCDU3RLC.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{schema-7EHBPNXM.js.map → schema-KZASL323.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{search-OBZVYJJ2.js.map → search-7KSOLI2E.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{search-2T3NCCUR.js.map → search-DTL7CO22.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{stats-ULGQACF7.js.map → stats-IOXQMGI6.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{stats-6LVK4JER.js.map → stats-QNV7B2CE.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{telemetry-6G27FLCP.js.map → telemetry-IV5C6JOM.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{telemetry-HHKRTMZA.js.map → telemetry-NHR5RFXT.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{test-PPOLRIBA.js.map → test-4Z37CXW4.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{test-2PP4YBV6.js.map → test-PIL2CEEB.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{test-all-NETGVNM6.js.map → test-all-GRLYHBNP.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{test-all-6Z272JRI.js.map → test-all-MFN4MYCV.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{test-runs-CRPQVMMG.js.map → test-runs-7LRFWWCA.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{test-runs-M24WA6TI.js.map → test-runs-7WCSC3TY.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{update-O7TBOUVQ.js.map → update-I4G34LKJ.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{update-MCPCPMHV.js.map → update-VI5DBZ3G.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{update-many-JSRF5EH5.js.map → update-many-LOTAYUTN.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{update-many-Y3HOL7WA.js.map → update-many-UYMTVF42.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{upgrade-ECB6GH3M.js.map → upgrade-LT2MLLPS.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{upgrade-5RTQVKKE.js.map → upgrade-ZZSC7CLV.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{validate-J6Q444SD.js.map → validate-3XRORNMP.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{validate-MCNMAXVA.js.map → validate-IQIQSKUX.js.map} +0 -0
@@ -1,39 +1,39 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="366bac21-4289-5e3b-983b-9fe9e908a7c8")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f5840753-1879-5c26-b87c-c5b6456b9f3b")}catch(e){}}();
3
3
  import {
4
4
  runActivity
5
- } from "./chunk-T7NWFVOA.js";
6
- import "./chunk-FJNJEWU4.js";
7
- import "./chunk-NJRZIJ4N.js";
5
+ } from "./chunk-4H2NDEGJ.js";
6
+ import "./chunk-KHBRV5JU.js";
7
+ import "./chunk-BE5G7HEL.js";
8
8
  import {
9
9
  runList
10
- } from "./chunk-EFRHTZO4.js";
10
+ } from "./chunk-6KQS23TX.js";
11
11
  import {
12
12
  collectRuntimeFilterValues,
13
13
  matchesRuntimeFilters
14
- } from "./chunk-FHUI7AXS.js";
14
+ } from "./chunk-2MKBPWMK.js";
15
15
  import {
16
16
  parseIntegerLimit,
17
17
  parsePriority,
18
18
  parseType
19
- } from "./chunk-P2NVFE4L.js";
19
+ } from "./chunk-LYL32FT6.js";
20
20
  import {
21
21
  listAllFrontMatterLight
22
- } from "./chunk-AVGOVJGV.js";
23
- import "./chunk-7CR4GAYN.js";
22
+ } from "./chunk-MF6KSSMF.js";
23
+ import "./chunk-UDWUDUJI.js";
24
24
  import {
25
25
  isTerminalStatus,
26
26
  normalizeStatusForRegistry,
27
27
  normalizeStatusInput
28
- } from "./chunk-5ATRWEZO.js";
28
+ } from "./chunk-SNASEDXB.js";
29
29
  import {
30
30
  resolveItemTypeRegistry
31
- } from "./chunk-42IULX44.js";
31
+ } from "./chunk-344GDQTH.js";
32
32
  import {
33
33
  compareTimestampStrings,
34
34
  nowIso,
35
35
  resolveIsoOrRelative
36
- } from "./chunk-PW7C262O.js";
36
+ } from "./chunk-PYULT32I.js";
37
37
  import {
38
38
  CONTEXT_DEPTH_VALUES,
39
39
  CONTEXT_SECTION_VALUES,
@@ -49,7 +49,7 @@ import {
49
49
  resolveRuntimeFieldRegistry,
50
50
  resolveRuntimeStatusRegistry,
51
51
  weekdayOrderIndex
52
- } from "./chunk-5JF76OJF.js";
52
+ } from "./chunk-WNMRICXH.js";
53
53
 
54
54
  // dist/cli/commands/calendar.js
55
55
  import { encode as encodeToon } from "@toon-format/toon";
@@ -734,7 +734,7 @@ async function runCalendar(options, global) {
734
734
  var CONTEXT_OUTPUT_VALUES = ["markdown", "toon", "json"];
735
735
  var HIGH_LEVEL_TYPES = /* @__PURE__ */ new Set(["Epic", "Feature"]);
736
736
  var DEFAULT_CONTEXT_LIMIT = 10;
737
- var STANDARD_SECTIONS = ["hierarchy", "activity", "progress", "workload"];
737
+ var STANDARD_SECTIONS = ["hierarchy", "activity", "progress", "recently_created", "unparented", "workload"];
738
738
  var DEEP_SECTIONS = [
739
739
  ...STANDARD_SECTIONS,
740
740
  "blockers",
@@ -742,6 +742,10 @@ var DEEP_SECTIONS = [
742
742
  "staleness",
743
743
  "tests"
744
744
  ];
745
+ var LEADING_HYPHEN_DATE = /^(\d{4})-(\d{2})-(\d{2})/;
746
+ var LEADING_COMPACT_DATE = /^(\d{4})(\d{2})(\d{2})(?:[T ]?\d{2}|$)/;
747
+ var COMPACT_DATE = /^(\d{4})(\d{2})(\d{2})$/;
748
+ var COMPACT_DATETIME = /^(\d{4})(\d{2})(\d{2})(?:[T\s]?)(\d{2})(\d{2})(\d{2})?(Z|[+-]\d{2}:?\d{2})?$/i;
745
749
  function parseOutputFormat(raw) {
746
750
  if (!raw)
747
751
  return void 0;
@@ -878,6 +882,59 @@ function compareOptionalDeadline(left, right) {
878
882
  return -1;
879
883
  return compareTimestampStrings(leftValue, rightValue);
880
884
  }
885
+ function daysInUtcMonth(year, monthIndex) {
886
+ return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();
887
+ }
888
+ function hasNoInvalidDatePrefix(value) {
889
+ const match = LEADING_HYPHEN_DATE.exec(value) ?? LEADING_COMPACT_DATE.exec(value);
890
+ if (!match) {
891
+ return true;
892
+ }
893
+ const year = Number.parseInt(match[1], 10);
894
+ const month = Number.parseInt(match[2], 10);
895
+ const day = Number.parseInt(match[3], 10);
896
+ return month >= 1 && month <= 12 && day >= 1 && day <= daysInUtcMonth(year, month - 1);
897
+ }
898
+ function normalizeTimestampCandidate(value) {
899
+ const compactDate = COMPACT_DATE.exec(value);
900
+ if (compactDate) {
901
+ return `${compactDate[1]}-${compactDate[2]}-${compactDate[3]}`;
902
+ }
903
+ const compactDateTime = COMPACT_DATETIME.exec(value);
904
+ if (compactDateTime) {
905
+ const [, year, month, day, hour, minute, secondRaw, offsetRaw] = compactDateTime;
906
+ const second = secondRaw ? `:${secondRaw}` : "";
907
+ const offset = offsetRaw && offsetRaw.length === 5 && offsetRaw !== "Z" ? `${offsetRaw.slice(0, 3)}:${offsetRaw.slice(3)}` : offsetRaw ?? "";
908
+ return `${year}-${month}-${day}T${hour}:${minute}${second}${offset}`;
909
+ }
910
+ return value;
911
+ }
912
+ function parseContextTimestampMs(value) {
913
+ if (typeof value !== "string") {
914
+ return Number.NaN;
915
+ }
916
+ const trimmed = value.trim();
917
+ if (trimmed.length === 0 || !hasNoInvalidDatePrefix(trimmed)) {
918
+ return Number.NaN;
919
+ }
920
+ const parsed = Date.parse(normalizeTimestampCandidate(trimmed));
921
+ return Number.isFinite(parsed) ? parsed : Number.NaN;
922
+ }
923
+ function sortableTimestamp(value) {
924
+ const parsed = parseContextTimestampMs(value);
925
+ return Number.isFinite(parsed) ? new Date(parsed).toISOString() : "";
926
+ }
927
+ function dateTokenForTimestamp(value) {
928
+ const parsed = parseContextTimestampMs(value);
929
+ return Number.isFinite(parsed) ? new Date(parsed).toISOString().slice(0, 10) : "unknown";
930
+ }
931
+ function normalizedParentId(value) {
932
+ if (typeof value !== "string") {
933
+ return null;
934
+ }
935
+ const trimmed = value.trim();
936
+ return trimmed.length > 0 ? trimmed : null;
937
+ }
881
938
  function compareCriticalItems(left, right, statusRegistry) {
882
939
  const byStatus = statusRank(left.status, statusRegistry) - statusRank(right.status, statusRegistry);
883
940
  if (byStatus !== 0)
@@ -891,12 +948,27 @@ function compareCriticalItems(left, right, statusRegistry) {
891
948
  const byDeadline = compareOptionalDeadline(left.deadline, right.deadline);
892
949
  if (byDeadline !== 0)
893
950
  return byDeadline;
894
- const byUpdated = compareTimestampStrings(right.updated_at, left.updated_at);
951
+ const byUpdated = compareTimestampStrings(sortableTimestamp(right.updated_at), sortableTimestamp(left.updated_at));
895
952
  const byId = left.id.localeCompare(right.id);
896
953
  return byUpdated !== 0 ? byUpdated : byId;
897
954
  }
898
- function toContextFocusItem(item) {
899
- return {
955
+ function completionPct(closed, total) {
956
+ return total > 0 ? Math.round(closed / total * 100) : 0;
957
+ }
958
+ function buildChildrenByParent(allItems) {
959
+ const childrenByParent = /* @__PURE__ */ new Map();
960
+ for (const item of allItems) {
961
+ const parent = normalizedParentId(item.parent);
962
+ if (!parent)
963
+ continue;
964
+ const children = childrenByParent.get(parent) ?? [];
965
+ children.push(item);
966
+ childrenByParent.set(parent, children);
967
+ }
968
+ return childrenByParent;
969
+ }
970
+ function toContextFocusItem(item, statusRegistry, childrenByParent) {
971
+ const focus = {
900
972
  id: item.id,
901
973
  title: item.title,
902
974
  type: item.type,
@@ -906,8 +978,20 @@ function toContextFocusItem(item) {
906
978
  deadline: item.deadline ?? null,
907
979
  assignee: item.assignee ?? null,
908
980
  tags: Array.isArray(item.tags) ? [...item.tags] : [],
909
- updated_at: item.updated_at
981
+ updated_at: item.updated_at,
982
+ parent: normalizedParentId(item.parent)
910
983
  };
984
+ if (statusRegistry && childrenByParent) {
985
+ const descendants = collectDescendants(item.id, childrenByParent);
986
+ const total = descendants.length;
987
+ if (total > 0) {
988
+ const closed = descendants.filter((desc) => isClosedStatus(desc.status, statusRegistry)).length;
989
+ focus.children_total = total;
990
+ focus.children_closed = closed;
991
+ focus.completion_pct = completionPct(closed, total);
992
+ }
993
+ }
994
+ return focus;
911
995
  }
912
996
  function summarizeAgenda(events) {
913
997
  let deadlines = 0;
@@ -942,14 +1026,7 @@ function buildHierarchy(allItems, activeItems, statusRegistry, limit) {
942
1026
  for (const item of allItems) {
943
1027
  itemMap.set(item.id, item);
944
1028
  }
945
- const childrenByParent = /* @__PURE__ */ new Map();
946
- for (const item of allItems) {
947
- if (!item.parent)
948
- continue;
949
- const children = childrenByParent.get(item.parent) ?? [];
950
- children.push(item);
951
- childrenByParent.set(item.parent, children);
952
- }
1029
+ const childrenByParent = buildChildrenByParent(allItems);
953
1030
  const activeHighLevelIds = new Set(activeItems.filter((item) => HIGH_LEVEL_TYPES.has(item.type)).map((item) => item.id));
954
1031
  const nodes = [];
955
1032
  for (const parentId of activeHighLevelIds) {
@@ -1063,7 +1140,7 @@ function buildProgress(allItems, activeItems, statusRegistry, limit) {
1063
1140
  open,
1064
1141
  in_progress: inProgress,
1065
1142
  blocked,
1066
- completion_pct: total > 0 ? Math.round(closed / total * 100) : 0
1143
+ completion_pct: completionPct(closed, total)
1067
1144
  });
1068
1145
  }
1069
1146
  return entries.sort((a, b) => a.completion_pct - b.completion_pct).slice(0, limit);
@@ -1122,6 +1199,18 @@ function buildStaleness(allNonTerminal, staleThresholdDays, now, limit) {
1122
1199
  stale_days: Math.floor((new Date(now).getTime() - new Date(item.updated_at).getTime()) / (24 * 60 * 60 * 1e3))
1123
1200
  })).sort((a, b) => b.stale_days - a.stale_days).slice(0, limit);
1124
1201
  }
1202
+ function buildRecentlyCreated(allNonTerminal, statusRegistry, childrenByParent, limit) {
1203
+ return allNonTerminal.map((item) => ({ item, sortKey: sortableTimestamp(item.created_at) })).sort((left, right) => {
1204
+ const byCreated = compareTimestampStrings(right.sortKey, left.sortKey);
1205
+ return byCreated !== 0 ? byCreated : left.item.id.localeCompare(right.item.id);
1206
+ }).slice(0, limit).map(({ item }) => ({
1207
+ ...toContextFocusItem(item, statusRegistry, childrenByParent),
1208
+ created_at: item.created_at
1209
+ }));
1210
+ }
1211
+ function buildUnparented(allNonTerminal, statusRegistry, childrenByParent, limit) {
1212
+ return allNonTerminal.filter((item) => !normalizedParentId(item.parent) && !HIGH_LEVEL_TYPES.has(item.type)).sort((left, right) => compareCriticalItems(left, right, statusRegistry)).slice(0, limit).map((item) => toContextFocusItem(item, statusRegistry, childrenByParent));
1213
+ }
1125
1214
  function buildTestHealth(activeItems) {
1126
1215
  let itemsWithTests = 0;
1127
1216
  let itemsWithRecentRuns = 0;
@@ -1163,7 +1252,9 @@ function formatClock(timestamp) {
1163
1252
  function formatFocusLine(item) {
1164
1253
  const orderToken = item.order === null ? "-" : String(item.order);
1165
1254
  const deadlineToken = item.deadline ?? "-";
1166
- return `${item.id} p${item.priority} ${item.status} ${item.type} order:${orderToken} deadline:${deadlineToken} ${item.title}`;
1255
+ const parentToken = item.parent ? ` parent:${item.parent}` : "";
1256
+ const progressToken = item.children_total !== void 0 && item.children_closed !== void 0 && item.completion_pct !== void 0 ? ` children:${item.children_closed}/${item.children_total} done:${item.completion_pct}%` : "";
1257
+ return `${item.id} p${item.priority} ${item.status} ${item.type} order:${orderToken} deadline:${deadlineToken}${parentToken}${progressToken} ${item.title}`;
1167
1258
  }
1168
1259
  function formatAgendaLine(event) {
1169
1260
  const base = `${formatClock(event.at)} [${event.kind}] ${event.item_id} p${event.item_priority} ${event.item_status} ${event.item_title}`;
@@ -1247,6 +1338,20 @@ function renderContextMarkdown(result) {
1247
1338
  }
1248
1339
  lines.push("");
1249
1340
  }
1341
+ if (result.recently_created && result.recently_created.length > 0) {
1342
+ lines.push("## Recently created");
1343
+ for (const item of result.recently_created) {
1344
+ lines.push(`- ${dateTokenForTimestamp(item.created_at)} ${formatFocusLine(item)}`);
1345
+ }
1346
+ lines.push("");
1347
+ }
1348
+ if (result.unparented && result.unparented.length > 0) {
1349
+ lines.push("## Unparented");
1350
+ for (const item of result.unparented) {
1351
+ lines.push(`- ${formatFocusLine(item)}`);
1352
+ }
1353
+ lines.push("");
1354
+ }
1250
1355
  if (result.activity && result.activity.length > 0) {
1251
1356
  lines.push("## Recent activity");
1252
1357
  for (const entry of result.activity) {
@@ -1318,7 +1423,7 @@ async function runContext(options, global) {
1318
1423
  const sectionsIncluded = parseContextSections(options.section, depth, contextSettings);
1319
1424
  const activityLimit = parseActivityLimit(options.activityLimit, contextSettings);
1320
1425
  const staleThresholdDays = parseStaleThresholdDays(options.staleThreshold, contextSettings);
1321
- const needsAllItems = sectionsIncluded.some((s) => ["hierarchy", "progress", "blockers", "staleness"].includes(s));
1426
+ const needsAllItems = sectionsIncluded.some((s) => ["hierarchy", "progress", "blockers", "staleness", "recently_created", "unparented"].includes(s));
1322
1427
  const baseListOptions = stripListProjectionFlags(options);
1323
1428
  const listOptions = { ...baseListOptions, excludeTerminal: true };
1324
1429
  const listed = await runList(void 0, listOptions, global);
@@ -1334,10 +1439,12 @@ async function runContext(options, global) {
1334
1439
  const blockedStatuses = statusRegistry.blocked_statuses;
1335
1440
  const activeItems = ranked.filter((item) => activeStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)));
1336
1441
  const blockedItems = ranked.filter((item) => blockedStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)));
1337
- const highLevel = activeItems.filter((item) => HIGH_LEVEL_TYPES.has(item.type)).slice(0, limit).map(toContextFocusItem);
1338
- const lowLevel = activeItems.filter((item) => !HIGH_LEVEL_TYPES.has(item.type)).slice(0, limit).map(toContextFocusItem);
1442
+ const childrenByParent = buildChildrenByParent(allItems);
1443
+ const focusChildrenByParent = needsAllItems ? childrenByParent : void 0;
1444
+ const highLevel = activeItems.filter((item) => HIGH_LEVEL_TYPES.has(item.type)).slice(0, limit).map((item) => toContextFocusItem(item, statusRegistry, focusChildrenByParent));
1445
+ const lowLevel = activeItems.filter((item) => !HIGH_LEVEL_TYPES.has(item.type)).slice(0, limit).map((item) => toContextFocusItem(item, statusRegistry, focusChildrenByParent));
1339
1446
  const blockedFallbackUsed = activeItems.length === 0;
1340
- const blockedFallback = blockedFallbackUsed ? blockedItems.slice(0, limit).map(toContextFocusItem) : [];
1447
+ const blockedFallback = blockedFallbackUsed ? blockedItems.slice(0, limit).map((item) => toContextFocusItem(item, statusRegistry, focusChildrenByParent)) : [];
1341
1448
  const calendarOptions = {
1342
1449
  ...baseListOptions,
1343
1450
  view: "agenda",
@@ -1363,6 +1470,8 @@ async function runContext(options, global) {
1363
1470
  const activity = has("activity") ? await buildActivity(activityLimit, global) : void 0;
1364
1471
  const progress = has("progress") ? buildProgress(allItems, activeItems, statusRegistry, limit) : void 0;
1365
1472
  const blockersSection = has("blockers") ? buildBlockers(blockedItems, itemMap, limit) : void 0;
1473
+ const recentlyCreated = has("recently_created") ? buildRecentlyCreated(allNonTerminal, statusRegistry, childrenByParent, limit) : void 0;
1474
+ const unparented = has("unparented") ? buildUnparented(allNonTerminal, statusRegistry, childrenByParent, limit) : void 0;
1366
1475
  const filesSection = has("files") ? buildHotFiles(activeItems, limit) : void 0;
1367
1476
  const workload = has("workload") ? buildWorkload(activeItems, statusRegistry, limit) : void 0;
1368
1477
  const staleness = has("staleness") ? buildStaleness(allNonTerminal, staleThresholdDays, now, limit) : void 0;
@@ -1426,6 +1535,10 @@ async function runContext(options, global) {
1426
1535
  result.progress = progress;
1427
1536
  if (blockersSection)
1428
1537
  result.blockers = blockersSection;
1538
+ if (recentlyCreated)
1539
+ result.recently_created = recentlyCreated;
1540
+ if (unparented)
1541
+ result.unparented = unparented;
1429
1542
  if (filesSection)
1430
1543
  result.files = filesSection;
1431
1544
  if (workload)
@@ -1454,6 +1567,6 @@ export {
1454
1567
  resolveContextOutputFormat,
1455
1568
  runContext
1456
1569
  };
1457
- //# sourceMappingURL=context-4N7GYTVQ.js.map
1570
+ //# sourceMappingURL=context-R2QLOJCK.js.map
1458
1571
 
1459
- //# debugId=366bac21-4289-5e3b-983b-9fe9e908a7c8
1572
+ //# debugId=f5840753-1879-5c26-b87c-c5b6456b9f3b
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../cli/commands/calendar.ts","../../../../../../../../cli/commands/context.ts"],"sourcesContent":["import { encode as encodeToon } from \"@toon-format/toon\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry, type ItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseIntegerLimit, parsePriority, parseType } from \"../shared-parsers.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { collectRuntimeFilterValues, matchesRuntimeFilters } from \"../../core/schema/runtime-field-filters.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { levenshteinDistanceWithinLimit } from \"../../core/shared/levenshtein.js\";\nimport { compareTimestampStrings, nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { listAllFrontMatterLight } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemFrontMatter, ItemStatus, ItemType, RecurrenceRule } from \"../../types/index.js\";\nimport { RECURRENCE_WEEKDAY_VALUES, weekdayOrderIndex } from \"../../types/index.js\";\n\nexport const CALENDAR_VIEW_VALUES = [\"agenda\", \"day\", \"week\", \"month\"] as const;\nexport type CalendarView = (typeof CALENDAR_VIEW_VALUES)[number];\n\nexport const CALENDAR_OUTPUT_VALUES = [\"markdown\", \"toon\", \"json\"] as const;\nexport type CalendarOutputFormat = (typeof CALENDAR_OUTPUT_VALUES)[number];\n\nexport interface CalendarOptions {\n view?: string;\n date?: string;\n from?: string;\n to?: string;\n past?: boolean;\n fullPeriod?: boolean;\n limit?: string;\n type?: string;\n tag?: string;\n priority?: string;\n status?: string;\n assignee?: string;\n assigneeFilter?: string;\n sprint?: string;\n release?: string;\n include?: string;\n recurrenceLookaheadDays?: string;\n recurrenceLookbackDays?: string;\n occurrenceLimit?: string;\n format?: string;\n [key: string]: unknown;\n}\n\nexport interface CalendarRow {\n at: string;\n date: string;\n kind: \"deadline\" | \"reminder\" | \"event\";\n reminder_text: string | null;\n event_title: string | null;\n event_end: string | null;\n event_location: string | null;\n event_all_day: boolean | null;\n event_timezone: string | null;\n event_recurring: boolean | null;\n event_recurrence_rule: string | null;\n item_id: string;\n item_title: string;\n item_type: ItemType;\n item_status: ItemStatus;\n item_priority: number;\n item_assignee: string | null;\n item_deadline: string | null;\n item_tags: string[];\n}\n\nexport interface CalendarDayBucket {\n date: string;\n count: number;\n events: CalendarRow[];\n}\n\nexport interface CalendarResult {\n view: CalendarView;\n output_default: \"markdown\";\n now: string;\n anchor: string;\n range: {\n start: string | null;\n end: string | null;\n period_start: string | null;\n period_end: string | null;\n full_period: boolean;\n past: boolean;\n from: string | null;\n to: string | null;\n };\n filters: {\n type: string | null;\n tag: string | null;\n priority: string | null;\n status: string | null;\n assignee: string | null;\n assignee_filter: string | null;\n sprint: string | null;\n release: string | null;\n runtime_filters?: Record<string, unknown>;\n limit: string | null;\n include: string | null;\n full_period: string | null;\n recurrence_lookahead_days: string | null;\n recurrence_lookback_days: string | null;\n occurrence_limit: string | null;\n };\n summary: {\n events: number;\n items: number;\n deadlines: number;\n reminders: number;\n scheduled: number;\n by_kind: {\n deadline: number;\n reminder: number;\n event: number;\n };\n by_type: Record<string, number>;\n by_status: Record<string, number>;\n recurring_events: number;\n };\n events: CalendarRow[];\n days: CalendarDayBucket[];\n warnings?: string[];\n}\n\nconst UTC_DAY_TO_WEEKDAY = [\"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\"] as const;\nconst DEFAULT_RECURRENCE_LOOKAHEAD_DAYS = 365;\nconst DEFAULT_RECURRENCE_LOOKBACK_DAYS = 365;\nconst DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS = 28;\nconst MAX_RECURRENCE_OCCURRENCES = 1000;\n\nfunction parseNonNegativeInteger(raw: string | undefined, label: string): number | undefined {\n if (raw === undefined) return undefined;\n const parsed = Number(raw);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(`${label} must be a non-negative integer`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\ntype CalendarIncludeKind = \"deadlines\" | \"reminders\" | \"events\";\n\nfunction parseIncludeSources(raw: string | undefined): Set<CalendarIncludeKind> {\n if (!raw) {\n return new Set([\"deadlines\", \"reminders\", \"events\"]);\n }\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"all\") {\n return new Set([\"deadlines\", \"reminders\", \"events\"]);\n }\n const values = normalized\n .split(/[\\|,]/)\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n if (values.length === 0) {\n throw new PmCliError(\"Calendar include filter must not be empty\", EXIT_CODE.USAGE);\n }\n const include = new Set<CalendarIncludeKind>();\n for (const value of values) {\n if (value === \"deadlines\" || value === \"deadline\") {\n include.add(\"deadlines\");\n continue;\n }\n if (value === \"reminders\" || value === \"reminder\") {\n include.add(\"reminders\");\n continue;\n }\n if (value === \"events\" || value === \"event\" || value === \"scheduled\") {\n include.add(\"events\");\n continue;\n }\n throw new PmCliError(\"Calendar include filter must be deadlines|reminders|events|scheduled|all\", EXIT_CODE.USAGE);\n }\n return include;\n}\n\n/**\n * Suggest the closest valid choice for a mistyped enum value (within edit\n * distance 2) so an agent gets an actionable \"did you mean\" hint instead of just\n * a list of choices (never-block UX).\n */\nfunction suggestClosestChoice(value: string, choices: readonly string[]): string | undefined {\n let best: { choice: string; distance: number } | undefined;\n for (const choice of choices) {\n const distance = levenshteinDistanceWithinLimit(value, choice, 2);\n if (distance !== null && (best === undefined || distance < best.distance)) {\n best = { choice, distance };\n }\n }\n return best?.choice;\n}\n\nfunction parseView(raw: string | undefined): CalendarView {\n if (!raw) return \"agenda\";\n const normalized = raw.trim().toLowerCase();\n if (!CALENDAR_VIEW_VALUES.includes(normalized as CalendarView)) {\n const suggestion = suggestClosestChoice(normalized, CALENDAR_VIEW_VALUES);\n throw new PmCliError(\n `Calendar view must be one of ${CALENDAR_VIEW_VALUES.join(\"|\")}${suggestion ? `. Did you mean \"${suggestion}\"?` : \".\"}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized as CalendarView;\n}\n\nfunction parseOutputFormat(raw: string | undefined): CalendarOutputFormat | undefined {\n if (!raw) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (!CALENDAR_OUTPUT_VALUES.includes(normalized as CalendarOutputFormat)) {\n const suggestion = suggestClosestChoice(normalized, CALENDAR_OUTPUT_VALUES);\n throw new PmCliError(\n `Calendar format must be one of ${CALENDAR_OUTPUT_VALUES.join(\"|\")}${suggestion ? `. Did you mean \"${suggestion}\"?` : \".\"}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized as CalendarOutputFormat;\n}\n\nexport function resolveCalendarOutputFormat(options: CalendarOptions, global: GlobalOptions): CalendarOutputFormat {\n const commandFormat = parseOutputFormat(options.format);\n if (global.json && commandFormat && commandFormat !== \"json\") {\n throw new PmCliError(\"Cannot combine --json with --format markdown|toon\", EXIT_CODE.USAGE);\n }\n if (global.json) {\n return \"json\";\n }\n return commandFormat ?? \"markdown\";\n}\n\nfunction parseStatus(raw: string | undefined, statusRegistry: RuntimeStatusRegistry): ItemStatus | undefined {\n if (raw === undefined) return undefined;\n const normalized = normalizeStatusInput(raw, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);\n throw new PmCliError(`Calendar status filter must be one of ${allowedStatuses.join(\"|\")}`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction parseAssigneeFilter(raw: string | undefined): \"assigned\" | \"unassigned\" | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!normalized) {\n throw new PmCliError(\"Calendar assignee filter must be one of assigned|unassigned\", EXIT_CODE.USAGE);\n }\n if (normalized !== \"assigned\" && normalized !== \"unassigned\") {\n throw new PmCliError(`Invalid calendar assignee filter \"${raw}\". Allowed: assigned|unassigned`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction toUtcDayKey(timestamp: string): string {\n return new Date(timestamp).toISOString().slice(0, 10);\n}\n\n/**\n * Calendar day (YYYY-MM-DD) the instant falls on in the given IANA timezone.\n * Events carry an optional `timezone`; bucketing and clock rendering use it so a\n * 23:30Z instant tagged Asia/Tokyo correctly lands on the next local day rather\n * than the UTC day. Falls back to the UTC day when no/invalid timezone is given,\n * so existing UTC behavior is unchanged. Uses Intl (no timezone dependency).\n */\nfunction toLocalDayKey(timestamp: string, timezone?: string | null): string {\n if (!timezone || timezone === \"UTC\") {\n return toUtcDayKey(timestamp);\n }\n try {\n const parts = new Intl.DateTimeFormat(\"en-CA\", {\n timeZone: timezone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n }).formatToParts(new Date(timestamp));\n const year = parts.find((part) => part.type === \"year\")?.value;\n const month = parts.find((part) => part.type === \"month\")?.value;\n const day = parts.find((part) => part.type === \"day\")?.value;\n if (year && month && day) {\n return `${year}-${month}-${day}`;\n }\n } catch {\n // Invalid IANA zone — fall back to the UTC day key below.\n }\n return toUtcDayKey(timestamp);\n}\n\nfunction startOfUtcDay(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, 0)).toISOString();\n}\n\nfunction addUtcDays(timestamp: string, days: number): string {\n const date = new Date(timestamp);\n return new Date(date.getTime() + days * 24 * 60 * 60 * 1000).toISOString();\n}\n\nfunction startOfUtcWeekMonday(timestamp: string): string {\n const base = new Date(startOfUtcDay(timestamp));\n const day = base.getUTCDay();\n const delta = day === 0 ? -6 : 1 - day;\n return addUtcDays(base.toISOString(), delta);\n}\n\nfunction startOfUtcMonth(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1, 0, 0, 0, 0)).toISOString();\n}\n\nfunction startOfNextUtcMonth(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 1, 0, 0, 0, 0)).toISOString();\n}\n\nfunction maxTimestamp(left: string, right: string): string {\n return compareTimestampStrings(left, right) >= 0 ? left : right;\n}\n\nfunction toSortedCountRecord(values: Map<string, number>): Record<string, number> {\n return Object.fromEntries([...values.entries()].sort(([left], [right]) => left.localeCompare(right)));\n}\n\nfunction incrementCount(values: Map<string, number>, key: string): void {\n values.set(key, (values.get(key) ?? 0) + 1);\n}\n\nfunction formatRecurrenceRuleForSummary(rule: RecurrenceRule | undefined): string | null {\n if (!rule) {\n return null;\n }\n const parts: string[] = [`freq=${rule.freq}`];\n if (rule.interval !== undefined) {\n parts.push(`interval=${rule.interval}`);\n }\n if (rule.count !== undefined) {\n parts.push(`count=${rule.count}`);\n }\n if (rule.until) {\n parts.push(`until=${rule.until}`);\n }\n if (rule.by_weekday && rule.by_weekday.length > 0) {\n const weekdays = [...rule.by_weekday].sort((left, right) => weekdayOrderIndex(left) - weekdayOrderIndex(right));\n parts.push(`by_weekday=${weekdays.join(\"|\")}`);\n }\n if (rule.by_month_day && rule.by_month_day.length > 0) {\n const monthDays = [...rule.by_month_day].sort((left, right) => left - right);\n parts.push(`by_month_day=${monthDays.join(\"|\")}`);\n }\n if (rule.exdates && rule.exdates.length > 0) {\n const exdates = [...rule.exdates].sort((left, right) => left.localeCompare(right));\n parts.push(`exdates=${exdates.join(\"|\")}`);\n }\n return parts.join(\",\");\n}\n\nfunction buildUtcTimestamp(year: number, month: number, day: number, timeSource: Date): string | undefined {\n const candidate = new Date(\n Date.UTC(\n year,\n month,\n day,\n timeSource.getUTCHours(),\n timeSource.getUTCMinutes(),\n timeSource.getUTCSeconds(),\n timeSource.getUTCMilliseconds(),\n ),\n );\n if (candidate.getUTCFullYear() !== year || candidate.getUTCMonth() !== month || candidate.getUTCDate() !== day) {\n return undefined;\n }\n return candidate.toISOString();\n}\n\nfunction weekdayToken(timestamp: string): (typeof UTC_DAY_TO_WEEKDAY)[number] {\n return UTC_DAY_TO_WEEKDAY[new Date(timestamp).getUTCDay()];\n}\n\nfunction normalizeInstantKey(timestamp: string): string | null {\n const parsed = Date.parse(timestamp);\n return Number.isFinite(parsed) ? new Date(parsed).toISOString() : null;\n}\n\nfunction buildExcludedInstantSet(exdates: readonly string[] | undefined): Set<string> {\n const excluded = new Set<string>();\n for (const exdate of exdates ?? []) {\n const instantKey = normalizeInstantKey(exdate);\n if (instantKey) {\n excluded.add(instantKey);\n }\n }\n return excluded;\n}\n\nfunction buildRecurringEventWindow(\n start: string | undefined,\n end: string | undefined,\n nowValue: string,\n lookbackDays: number | undefined,\n lookaheadDays: number | undefined,\n): { start: string; end: string } {\n const windowStart = start ?? addUtcDays(nowValue, -(lookbackDays ?? DEFAULT_RECURRENCE_LOOKBACK_DAYS));\n const windowEnd = end ?? addUtcDays(start ?? nowValue, lookaheadDays ?? DEFAULT_RECURRENCE_LOOKAHEAD_DAYS);\n return {\n start: windowStart,\n end: compareTimestampStrings(windowEnd, windowStart) > 0 ? windowEnd : addUtcDays(windowStart, 1),\n };\n}\n\nfunction expandRecurringOccurrences(\n startAt: string,\n recurrence: RecurrenceRule,\n window: { start: string; end: string },\n occurrenceLimit: number | undefined,\n): string[] {\n const maxOccurrences = occurrenceLimit ?? MAX_RECURRENCE_OCCURRENCES;\n const interval = recurrence.interval ?? 1;\n const countLimit = recurrence.count ?? Number.POSITIVE_INFINITY;\n const until = recurrence.until;\n const excluded = buildExcludedInstantSet(recurrence.exdates);\n const recurrenceWeekdays =\n recurrence.by_weekday && recurrence.by_weekday.length > 0 ? [...recurrence.by_weekday] : [weekdayToken(startAt)];\n const recurrenceMonthDays =\n recurrence.by_month_day && recurrence.by_month_day.length > 0 ? [...recurrence.by_month_day] : [new Date(startAt).getUTCDate()];\n const weekdayFilter = recurrence.by_weekday ? new Set(recurrence.by_weekday) : undefined;\n const monthDayFilter = recurrence.by_month_day ? new Set(recurrence.by_month_day) : undefined;\n const sortedWeekdays = [...new Set(recurrenceWeekdays)].sort(\n (left, right) =>\n weekdayOrderIndex(left as (typeof RECURRENCE_WEEKDAY_VALUES)[number]) -\n weekdayOrderIndex(right as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n );\n const sortedMonthDays = [...new Set(recurrenceMonthDays)].sort((left, right) => left - right);\n\n const occurrences: string[] = [];\n let produced = 0;\n const consumeCandidate = (candidateAt: string): \"continue\" | \"stop\" => {\n if (compareTimestampStrings(candidateAt, startAt) < 0) {\n return \"continue\";\n }\n if (until && compareTimestampStrings(candidateAt, until) > 0) {\n return \"stop\";\n }\n if (compareTimestampStrings(candidateAt, window.end) >= 0) {\n return \"stop\";\n }\n if (excluded.has(candidateAt)) {\n return \"continue\";\n }\n produced += 1;\n if (compareTimestampStrings(candidateAt, window.start) >= 0) {\n occurrences.push(candidateAt);\n }\n if (produced >= countLimit) {\n return \"stop\";\n }\n return \"continue\";\n };\n\n const startDate = new Date(startAt);\n if (recurrence.freq === \"daily\") {\n let candidateAt = startAt;\n for (let iteration = 0; iteration < maxOccurrences; iteration += 1) {\n const candidateWeekday = weekdayToken(candidateAt);\n const candidateMonthDay = new Date(candidateAt).getUTCDate();\n const weekdayMatches = !weekdayFilter || weekdayFilter.has(candidateWeekday);\n const monthDayMatches = !monthDayFilter || monthDayFilter.has(candidateMonthDay);\n if (weekdayMatches && monthDayMatches && consumeCandidate(candidateAt) === \"stop\") {\n break;\n }\n candidateAt = addUtcDays(candidateAt, interval);\n }\n return occurrences;\n }\n\n if (recurrence.freq === \"weekly\") {\n const weekStart = startOfUtcWeekMonday(startAt);\n for (let step = 0; step < maxOccurrences; step += 1) {\n const candidateWeekStart = addUtcDays(weekStart, step * interval * 7);\n for (const weekday of sortedWeekdays) {\n const dayOffset = weekdayOrderIndex(weekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number]);\n const candidateDay = addUtcDays(candidateWeekStart, dayOffset);\n const dayDate = new Date(candidateDay);\n const candidateAt = new Date(\n Date.UTC(\n dayDate.getUTCFullYear(),\n dayDate.getUTCMonth(),\n dayDate.getUTCDate(),\n startDate.getUTCHours(),\n startDate.getUTCMinutes(),\n startDate.getUTCSeconds(),\n startDate.getUTCMilliseconds(),\n ),\n ).toISOString();\n const candidateMonthDay = dayDate.getUTCDate();\n if (monthDayFilter && !monthDayFilter.has(candidateMonthDay)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n return occurrences;\n }\n\n if (recurrence.freq === \"monthly\") {\n const startYear = startDate.getUTCFullYear();\n const startMonth = startDate.getUTCMonth();\n for (let step = 0; step < maxOccurrences; step += 1) {\n const monthAnchor = new Date(Date.UTC(startYear, startMonth + step * interval, 1, 0, 0, 0, 0));\n const year = monthAnchor.getUTCFullYear();\n const month = monthAnchor.getUTCMonth();\n for (const monthDay of sortedMonthDays) {\n const candidateAt = buildUtcTimestamp(year, month, monthDay, startDate);\n if (!candidateAt) {\n continue;\n }\n const candidateWeekday = weekdayToken(candidateAt);\n if (weekdayFilter && !weekdayFilter.has(candidateWeekday)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n return occurrences;\n }\n\n const year = startDate.getUTCFullYear();\n const month = startDate.getUTCMonth();\n for (let step = 0; step < maxOccurrences; step += 1) {\n const candidateYear = year + step * interval;\n for (const monthDay of sortedMonthDays) {\n const candidateAt = buildUtcTimestamp(candidateYear, month, monthDay, startDate);\n if (!candidateAt) {\n continue;\n }\n const candidateWeekday = weekdayToken(candidateAt);\n if (weekdayFilter && !weekdayFilter.has(candidateWeekday)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n\n return occurrences;\n}\n\nfunction sortEvents(values: CalendarRow[]): CalendarRow[] {\n return [...values].sort((a, b) => {\n const byAt = compareTimestampStrings(a.at, b.at);\n if (byAt !== 0) return byAt;\n const byPriority = a.item_priority - b.item_priority;\n if (byPriority !== 0) return byPriority;\n const byId = a.item_id.localeCompare(b.item_id);\n if (byId !== 0) return byId;\n const byKind = a.kind.localeCompare(b.kind);\n if (byKind !== 0) return byKind;\n const byEventTitle = String(a.event_title).localeCompare(String(b.event_title));\n if (byEventTitle !== 0) return byEventTitle;\n return String(a.reminder_text).localeCompare(String(b.reminder_text));\n });\n}\n\nfunction buildEventSeed(\n items: ItemFrontMatter[],\n recurringWindow: { start: string; end: string },\n includeSources: Set<CalendarIncludeKind>,\n occurrenceLimit: number | undefined,\n): CalendarRow[] {\n const events: CalendarRow[] = [];\n for (const item of items) {\n if (includeSources.has(\"deadlines\") && item.deadline) {\n events.push({\n at: item.deadline,\n date: toUtcDayKey(item.deadline),\n kind: \"deadline\",\n reminder_text: null,\n event_title: null,\n event_end: null,\n event_location: null,\n event_all_day: null,\n event_timezone: null,\n event_recurring: null,\n event_recurrence_rule: null,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline,\n item_tags: item.tags,\n });\n }\n for (const reminder of includeSources.has(\"reminders\") ? (item.reminders ?? []) : []) {\n events.push({\n at: reminder.at,\n date: toUtcDayKey(reminder.at),\n kind: \"reminder\",\n reminder_text: reminder.text,\n event_title: null,\n event_end: null,\n event_location: null,\n event_all_day: null,\n event_timezone: null,\n event_recurring: null,\n event_recurrence_rule: null,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline ?? null,\n item_tags: item.tags,\n });\n }\n for (const event of includeSources.has(\"events\") ? (item.events ?? []) : []) {\n const recurrenceRuleSummary = formatRecurrenceRuleForSummary(event.recurrence);\n const recurringDurationMs = (() => {\n if (!event.end_at) {\n return null;\n }\n const duration = Date.parse(event.end_at) - Date.parse(event.start_at);\n return Number.isFinite(duration) && duration > 0 ? duration : null;\n })();\n const occurrences = event.recurrence\n ? expandRecurringOccurrences(event.start_at, event.recurrence, recurringWindow, occurrenceLimit)\n : [event.start_at];\n for (const occurrenceAt of occurrences) {\n const occurrenceEnd =\n event.recurrence && recurringDurationMs !== null\n ? new Date(new Date(occurrenceAt).getTime() + recurringDurationMs).toISOString()\n : (event.end_at ?? null);\n events.push({\n at: occurrenceAt,\n // All-day events are timezone-agnostic calendar dates: bucket by the\n // literal start date. Timed events bucket by their local day in the\n // event's timezone (defaults to UTC when unset).\n date:\n event.all_day === true\n ? occurrenceAt.slice(0, 10)\n : toLocalDayKey(occurrenceAt, event.timezone),\n kind: \"event\",\n reminder_text: event.description ?? null,\n event_title: event.title ?? item.title,\n event_end: occurrenceEnd,\n event_location: event.location ?? null,\n event_all_day: event.all_day ?? null,\n event_timezone: event.timezone ?? null,\n event_recurring: event.recurrence ? true : false,\n event_recurrence_rule: recurrenceRuleSummary,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline ?? null,\n item_tags: item.tags,\n });\n }\n }\n }\n return sortEvents(events);\n}\n\nfunction filterItems(\n items: ItemFrontMatter[],\n options: CalendarOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): ItemFrontMatter[] {\n const typeFilter = parseType(options.type, typeRegistry);\n const tagFilter = options.tag?.trim().toLowerCase();\n const priorityFilter = parsePriority(options.priority);\n const statusFilter = parseStatus(options.status, statusRegistry);\n const assigneeFilter = options.assignee?.trim();\n const assigneeModeFilter = parseAssigneeFilter(options.assigneeFilter);\n const sprintFilter = options.sprint?.trim();\n const releaseFilter = options.release?.trim();\n\n if (assigneeFilter && (assigneeFilter.toLowerCase() === \"none\" || assigneeFilter.toLowerCase() === \"null\")) {\n throw new PmCliError(\n '--assignee no longer accepts \"none\" or \"null\". Use --assignee-filter unassigned.',\n EXIT_CODE.USAGE,\n );\n }\n if (assigneeFilter !== undefined && assigneeModeFilter === \"unassigned\") {\n throw new PmCliError(\"Cannot combine --assignee with --assignee-filter unassigned\", EXIT_CODE.USAGE);\n }\n\n return items.filter((item) => {\n if (typeFilter && item.type !== typeFilter) return false;\n if (tagFilter && !item.tags.some((tag) => tag.trim().toLowerCase() === tagFilter)) return false;\n if (priorityFilter !== undefined && item.priority !== priorityFilter) return false;\n if (statusFilter && item.status !== statusFilter) return false;\n if (assigneeModeFilter === \"assigned\" && !item.assignee) return false;\n if (assigneeModeFilter === \"unassigned\" && item.assignee) return false;\n if (assigneeFilter !== undefined && item.assignee !== assigneeFilter) {\n return false;\n }\n if (sprintFilter !== undefined && item.sprint !== sprintFilter) return false;\n if (releaseFilter !== undefined && item.release !== releaseFilter) return false;\n if (!matchesRuntimeFilters(item as Record<string, unknown>, runtimeFieldFilters)) return false;\n return true;\n });\n}\n\nfunction includeEventInWindow(event: CalendarRow, start: string | undefined, end: string | undefined): boolean {\n if (start && compareTimestampStrings(event.at, start) < 0) {\n return false;\n }\n if (end && compareTimestampStrings(event.at, end) >= 0) {\n return false;\n }\n return true;\n}\n\nfunction resolveCalendarBoundaryInput(raw: string, nowValue: string, fieldLabel: \"--date\" | \"--from\" | \"--to\"): string {\n if (raw.trim().toLowerCase() === \"today\") {\n return startOfUtcDay(nowValue);\n }\n return resolveIsoOrRelative(raw, new Date(nowValue), fieldLabel);\n}\n\nfunction buildRange(\n view: CalendarView,\n options: CalendarOptions,\n nowValue: string,\n): {\n anchor: string;\n start?: string;\n end?: string;\n periodStart?: string;\n periodEnd?: string;\n fullPeriod: boolean;\n} {\n const anchor = options.date ? resolveCalendarBoundaryInput(options.date, nowValue, \"--date\") : nowValue;\n const includePast = options.past === true;\n const fullPeriodRequested = options.fullPeriod === true;\n\n const from = options.from ? resolveCalendarBoundaryInput(options.from, nowValue, \"--from\") : undefined;\n const to = options.to ? resolveCalendarBoundaryInput(options.to, nowValue, \"--to\") : undefined;\n if (from && to && compareTimestampStrings(from, to) >= 0) {\n throw new PmCliError(\"Calendar --from must be before --to\", EXIT_CODE.USAGE);\n }\n\n if (view !== \"agenda\" && (options.from !== undefined || options.to !== undefined)) {\n throw new PmCliError(\"--from and --to are only supported for --view agenda\", EXIT_CODE.USAGE);\n }\n\n if (view === \"agenda\") {\n if (fullPeriodRequested) {\n throw new PmCliError(\n \"--full-period is only supported for --view day|week|month. For agenda windows, use --from and --to.\",\n EXIT_CODE.USAGE,\n );\n }\n const start = from ?? (options.date ? anchor : includePast ? undefined : nowValue);\n return {\n anchor,\n start,\n end: to,\n fullPeriod: false,\n };\n }\n\n if (view === \"day\") {\n const dayStart = startOfUtcDay(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? dayStart : maxTimestamp(dayStart, nowValue);\n return {\n anchor,\n start,\n end: addUtcDays(dayStart, 1),\n periodStart: dayStart,\n periodEnd: addUtcDays(dayStart, 1),\n fullPeriod,\n };\n }\n\n if (view === \"week\") {\n const weekStart = startOfUtcWeekMonday(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? weekStart : maxTimestamp(weekStart, nowValue);\n return {\n anchor,\n start,\n end: addUtcDays(weekStart, 7),\n periodStart: weekStart,\n periodEnd: addUtcDays(weekStart, 7),\n fullPeriod,\n };\n }\n\n const monthStart = startOfUtcMonth(anchor);\n const monthEnd = startOfNextUtcMonth(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? monthStart : maxTimestamp(monthStart, nowValue);\n return {\n anchor,\n start,\n end: monthEnd,\n periodStart: monthStart,\n periodEnd: monthEnd,\n fullPeriod,\n };\n}\n\nfunction bucketEventsByDay(events: CalendarRow[]): CalendarDayBucket[] {\n const dayMap = new Map<string, CalendarRow[]>();\n for (const event of events) {\n const list = dayMap.get(event.date) ?? [];\n list.push(event);\n dayMap.set(event.date, list);\n }\n return [...dayMap.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([date, dayEvents]) => ({\n date,\n count: dayEvents.length,\n events: sortEvents(dayEvents),\n }));\n}\n\nfunction summarize(events: CalendarRow[]): CalendarResult[\"summary\"] {\n const itemIds = new Set<string>();\n const byType = new Map<string, number>();\n const byStatus = new Map<string, number>();\n let deadlines = 0;\n let reminders = 0;\n let scheduled = 0;\n let recurringEvents = 0;\n for (const event of events) {\n itemIds.add(event.item_id);\n incrementCount(byType, event.item_type);\n incrementCount(byStatus, event.item_status);\n if (event.kind === \"deadline\") {\n deadlines += 1;\n } else if (event.kind === \"reminder\") {\n reminders += 1;\n } else {\n scheduled += 1;\n if (event.event_recurring === true) {\n recurringEvents += 1;\n }\n }\n }\n return {\n events: events.length,\n items: itemIds.size,\n deadlines,\n reminders,\n scheduled,\n by_kind: {\n deadline: deadlines,\n reminder: reminders,\n event: scheduled,\n },\n by_type: toSortedCountRecord(byType),\n by_status: toSortedCountRecord(byStatus),\n recurring_events: recurringEvents,\n };\n}\n\nfunction formatWindow(range: CalendarResult[\"range\"]): string {\n const start = range.start ?? \"unbounded\";\n const end = range.end ?? \"unbounded\";\n return `${start} -> ${end}`;\n}\n\nfunction formatClock(timestamp: string, timezone?: string | null): string {\n if (timezone && timezone !== \"UTC\") {\n try {\n const parts = new Intl.DateTimeFormat(\"en-GB\", {\n timeZone: timezone,\n hour: \"2-digit\",\n minute: \"2-digit\",\n hourCycle: \"h23\",\n }).formatToParts(new Date(timestamp));\n const hour = parts.find((part) => part.type === \"hour\")?.value;\n const minute = parts.find((part) => part.type === \"minute\")?.value;\n if (hour && minute) {\n // Local wall-clock time; the event line already prints `timezone=<zone>`.\n return `${hour}:${minute}`;\n }\n } catch {\n // Invalid IANA zone — fall back to the UTC clock below.\n }\n }\n return `${new Date(timestamp).toISOString().slice(11, 16)}Z`;\n}\n\nfunction formatSummaryCountRecord(values: Record<string, number>): string {\n const entries = Object.entries(values);\n if (entries.length === 0) {\n return \"empty\";\n }\n return entries.map(([key, value]) => `${key}=${value}`).join(\", \");\n}\n\nfunction formatEventEnd(event: CalendarRow): string | null {\n if (!event.event_end) {\n return null;\n }\n if (event.event_all_day === true) {\n return event.event_end.slice(0, 10);\n }\n if (event.date === toLocalDayKey(event.event_end, event.event_timezone)) {\n return formatClock(event.event_end, event.event_timezone);\n }\n return event.event_end;\n}\n\nfunction formatEventLine(event: CalendarRow): string {\n const core = `${formatClock(event.at, event.event_timezone)} [${event.kind}] ${event.item_id} type=${event.item_type} p${event.item_priority} ${event.item_status} ${event.item_title}`;\n if (event.kind === \"reminder\") {\n const reminderText = event.reminder_text ?? \"\";\n return `${core} — ${reminderText} reminder=${JSON.stringify(reminderText)}`;\n }\n if (event.kind === \"event\") {\n const details: string[] = [];\n const title = event.event_title ?? event.item_title;\n const titleDiffers = event.event_title !== null && event.event_title !== event.item_title;\n if (titleDiffers) {\n details.push(title);\n details.push(`title=${JSON.stringify(title)}`);\n }\n if (event.event_recurring) {\n details.push(\"(recurring)\");\n details.push(\"recurring=true\");\n }\n const end = formatEventEnd(event);\n if (end) {\n details.push(`end=${end}`);\n }\n if (event.event_all_day !== null) {\n details.push(`all_day=${event.event_all_day ? \"true\" : \"false\"}`);\n }\n if (event.event_timezone) {\n details.push(`timezone=${event.event_timezone}`);\n }\n if (event.event_location) {\n details.push(`@ ${event.event_location}`);\n details.push(`location=${JSON.stringify(event.event_location)}`);\n }\n if (event.event_recurrence_rule) {\n details.push(`recurrence=${event.event_recurrence_rule}`);\n }\n if (event.reminder_text) {\n details.push(`description=${JSON.stringify(event.reminder_text)}`);\n }\n return `${core} — ${details.join(\" \")}`;\n }\n return core;\n}\n\nexport function renderCalendarMarkdown(result: CalendarResult): string {\n const lines: string[] = [];\n lines.push(`# pm calendar (${result.view})`);\n lines.push(\"\");\n lines.push(`- now: ${result.now}`);\n lines.push(`- window: ${formatWindow(result.range)}`);\n if (result.range.period_start && result.range.period_end) {\n lines.push(`- period: ${result.range.period_start} -> ${result.range.period_end}`);\n lines.push(`- period-mode: ${result.range.full_period ? \"full-period\" : \"active-window\"}`);\n }\n lines.push(\n `- events: ${result.summary.events} (deadlines: ${result.summary.deadlines}, reminders: ${result.summary.reminders}, scheduled: ${result.summary.scheduled})`,\n );\n lines.push(`- items: ${result.summary.items}`);\n lines.push(`- by-kind: ${formatSummaryCountRecord(result.summary.by_kind)}`);\n lines.push(`- by-type: ${formatSummaryCountRecord(result.summary.by_type)}`);\n lines.push(`- by-status: ${formatSummaryCountRecord(result.summary.by_status)}`);\n lines.push(`- recurring-events: ${result.summary.recurring_events}`);\n lines.push(\"\");\n\n if (result.events.length === 0) {\n lines.push(\"No calendar events matched the selected filters.\");\n return lines.join(\"\\n\");\n }\n\n for (const day of result.days) {\n lines.push(`## ${day.date} (${day.count})`);\n for (const event of day.events) {\n lines.push(`- ${formatEventLine(event)}`);\n }\n lines.push(\"\");\n }\n if (result.warnings && result.warnings.length > 0) {\n lines.push(\"### warnings\");\n for (const warning of result.warnings) {\n lines.push(`- ${warning}`);\n }\n lines.push(\"\");\n }\n return trimTrailingNewlines(lines.join(\"\\n\"));\n}\n\n/**\n * Serializes a CalendarResult as TOON (the project's structured output format).\n *\n * The calendar result is JSON-serializable end-to-end (only strings, numbers,\n * booleans, null, plain objects, and arrays), so the value is fed directly to\n * `@toon-format/toon`'s encoder.\n */\nexport function renderCalendarToon(result: CalendarResult): string {\n return encodeToon(result as unknown as Parameters<typeof encodeToon>[0]);\n}\n\nfunction trimTrailingNewlines(value: string): string {\n let end = value.length;\n while (end > 0 && value[end - 1] === \"\\n\") {\n end -= 1;\n }\n return value.slice(0, end);\n}\n\nexport async function runCalendar(options: CalendarOptions, global: GlobalOptions): Promise<CalendarResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const nowValue = nowIso();\n const view = parseView(options.view);\n const rangeBounds = buildRange(view, options, nowValue);\n const limit = parseIntegerLimit(options.limit);\n const includeSources = parseIncludeSources(options.include);\n const explicitLookahead = parseNonNegativeInteger(options.recurrenceLookaheadDays, \"Calendar recurrence lookahead days\");\n const recurrenceLookbackDays = parseNonNegativeInteger(options.recurrenceLookbackDays, \"Calendar recurrence lookback days\");\n const occurrenceLimit = parseNonNegativeInteger(options.occurrenceLimit, \"Calendar occurrence limit\");\n if (occurrenceLimit !== undefined && occurrenceLimit < 1) {\n throw new PmCliError(\"Calendar occurrence limit must be >= 1\", EXIT_CODE.USAGE);\n }\n\n const eventsOnly = includeSources.has(\"events\") && !includeSources.has(\"deadlines\") && !includeSources.has(\"reminders\");\n const hasExplicitBounds = options.to !== undefined || explicitLookahead !== undefined || occurrenceLimit !== undefined;\n const eventsOnlyCapApplied = eventsOnly && !hasExplicitBounds;\n const recurrenceLookaheadDays = eventsOnlyCapApplied ? DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS : explicitLookahead;\n const recurrenceLookbackWindowDays =\n eventsOnlyCapApplied && recurrenceLookbackDays === undefined\n ? 0\n : recurrenceLookbackDays;\n\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const runtimeFieldFilters = collectRuntimeFilterValues(options as Record<string, unknown>, runtimeFieldRegistry, \"calendar\");\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const listWarnings: string[] = [];\n if (eventsOnlyCapApplied) {\n listWarnings.push(\n `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`,\n );\n }\n const items = await listAllFrontMatterLight(pmRoot, settings.item_format, typeRegistry.type_to_folder, listWarnings, settings.schema);\n const filteredItems = filterItems(items, options, typeRegistry, statusRegistry, runtimeFieldFilters);\n const recurringWindow = buildRecurringEventWindow(\n rangeBounds.start,\n rangeBounds.end,\n nowValue,\n recurrenceLookbackWindowDays,\n recurrenceLookaheadDays,\n );\n const seededEvents = buildEventSeed(filteredItems, recurringWindow, includeSources, occurrenceLimit);\n const rangedEvents = seededEvents.filter((event) => includeEventInWindow(event, rangeBounds.start, rangeBounds.end));\n const limitedEvents = limit === undefined ? rangedEvents : rangedEvents.slice(0, limit);\n const days = bucketEventsByDay(limitedEvents);\n const warnings = [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right));\n\n return {\n view,\n output_default: \"markdown\",\n now: nowValue,\n anchor: rangeBounds.anchor,\n range: {\n start: rangeBounds.start ?? null,\n end: rangeBounds.end ?? null,\n period_start: rangeBounds.periodStart ?? null,\n period_end: rangeBounds.periodEnd ?? null,\n full_period: rangeBounds.fullPeriod,\n past: options.past === true,\n from: options.from ?? null,\n to: options.to ?? null,\n },\n filters: {\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n status: options.status ?? null,\n assignee: options.assignee ?? null,\n assignee_filter: options.assigneeFilter ?? null,\n sprint: options.sprint ?? null,\n release: options.release ?? null,\n runtime_filters: runtimeFieldFilters,\n limit: options.limit ?? null,\n include: options.include ?? null,\n full_period: options.fullPeriod === true ? \"true\" : null,\n recurrence_lookahead_days: options.recurrenceLookaheadDays ?? null,\n recurrence_lookback_days: options.recurrenceLookbackDays ?? null,\n occurrence_limit: options.occurrenceLimit ?? null,\n },\n summary: summarize(limitedEvents),\n events: limitedEvents,\n days,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n","import { SETTINGS_DEFAULTS, EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { compareTimestampStrings, nowIso } from \"../../core/shared/time.js\";\nimport { isTerminalStatus, normalizeStatusForRegistry, normalizeStatusInput } from \"../../core/item/status.js\";\nimport { resolveRuntimeStatusRegistry, type RuntimeStatusRegistry } from \"../../core/schema/runtime-schema.js\";\nimport { resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type {\n ContextDepth,\n ContextSectionName,\n ContextSettings,\n ItemFrontMatter,\n ItemStatus,\n PmSettings,\n} from \"../../types/index.js\";\nimport { CONTEXT_DEPTH_VALUES, CONTEXT_SECTION_VALUES } from \"../../types/index.js\";\nimport { parseIntegerLimit } from \"../shared-parsers.js\";\nimport { runCalendar, type CalendarOptions, type CalendarRow } from \"./calendar.js\";\nimport { runList, type ListOptions } from \"./list.js\";\nimport { runActivity, type CompactActivityEntry } from \"./activity.js\";\n\n// ---------------------------------------------------------------------------\n// Output format\n// ---------------------------------------------------------------------------\n\nexport const CONTEXT_OUTPUT_VALUES = [\"markdown\", \"toon\", \"json\"] as const;\nexport type ContextOutputFormat = (typeof CONTEXT_OUTPUT_VALUES)[number];\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface ContextOptions {\n date?: string;\n from?: string;\n to?: string;\n past?: boolean;\n type?: string;\n tag?: string;\n priority?: string;\n assignee?: string;\n assigneeFilter?: string;\n sprint?: string;\n release?: string;\n limit?: string;\n format?: string;\n depth?: string;\n section?: string[];\n activityLimit?: string;\n staleThreshold?: string;\n [key: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Focus item (unchanged from original)\n// ---------------------------------------------------------------------------\n\nexport interface ContextFocusItem {\n id: string;\n title: string;\n type: string;\n status: ItemStatus;\n priority: number;\n order: number | null;\n deadline: string | null;\n assignee: string | null;\n tags: string[];\n updated_at: string;\n parent: string | null;\n children_total?: number;\n children_closed?: number;\n completion_pct?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Section data types\n// ---------------------------------------------------------------------------\n\nexport interface HierarchyChild {\n id: string;\n title: string;\n type: string;\n status: ItemStatus;\n children_total: number;\n children_closed: number;\n}\n\nexport interface HierarchyNode {\n id: string;\n title: string;\n type: string;\n status: ItemStatus;\n children_total: number;\n children_closed: number;\n children_open: number;\n children_in_progress: number;\n children_blocked: number;\n children: HierarchyChild[];\n}\n\nexport interface ProgressEntry {\n id: string;\n title: string;\n type: string;\n total: number;\n closed: number;\n open: number;\n in_progress: number;\n blocked: number;\n completion_pct: number;\n}\n\nexport interface BlockerEntry {\n id: string;\n title: string;\n blocked_by: string | null;\n blocked_by_title: string | null;\n blocked_by_status: ItemStatus | null;\n blocked_reason: string | null;\n unblock_note: string | null;\n}\n\nexport interface HotFile {\n path: string;\n references: number;\n items: string[];\n}\n\nexport interface WorkloadEntry {\n assignee: string | null;\n active: number;\n in_progress: number;\n items: string[];\n}\n\nexport interface StaleEntry {\n id: string;\n title: string;\n status: ItemStatus;\n updated_at: string;\n stale_days: number;\n}\n\nexport interface RecentContextItem extends ContextFocusItem {\n created_at?: string;\n}\n\nexport interface TestHealthSummary {\n items_with_tests: number;\n items_with_recent_runs: number;\n recent_runs: {\n passed: number;\n failed: number;\n skipped: number;\n };\n items_failing: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Agenda / summary (unchanged)\n// ---------------------------------------------------------------------------\n\ninterface ContextAgendaSummary {\n events: number;\n items: number;\n deadlines: number;\n reminders: number;\n scheduled: number;\n}\n\ninterface ContextSummary {\n active_items: number;\n in_progress: number;\n open: number;\n blocked: number;\n blocked_fallback_used: boolean;\n high_level: number;\n low_level: number;\n agenda_events: number;\n total_items?: number;\n closed?: number;\n canceled?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Result\n// ---------------------------------------------------------------------------\n\nexport interface ContextResult {\n output_default: \"toon\";\n now: string;\n depth: ContextDepth;\n sections_included: ContextSectionName[];\n window: {\n anchor: string;\n start: string | null;\n end: string | null;\n past: boolean;\n from: string | null;\n to: string | null;\n };\n filters: {\n type: string | null;\n tag: string | null;\n priority: string | null;\n assignee: string | null;\n assignee_filter: string | null;\n sprint: string | null;\n release: string | null;\n limit: string | null;\n runtime_filters?: Record<string, unknown>;\n };\n summary: ContextSummary;\n high_level: ContextFocusItem[];\n low_level: ContextFocusItem[];\n blocked_fallback: ContextFocusItem[];\n agenda: {\n summary: ContextAgendaSummary;\n events: CalendarRow[];\n };\n hierarchy?: HierarchyNode[];\n activity?: CompactActivityEntry[];\n progress?: ProgressEntry[];\n blockers?: BlockerEntry[];\n recently_created?: RecentContextItem[];\n unparented?: ContextFocusItem[];\n files?: HotFile[];\n workload?: WorkloadEntry[];\n staleness?: StaleEntry[];\n tests?: TestHealthSummary;\n suggestions?: string[];\n warnings?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst HIGH_LEVEL_TYPES = new Set<string>([\"Epic\", \"Feature\"]);\nconst DEFAULT_CONTEXT_LIMIT = 10;\n\nconst STANDARD_SECTIONS: ContextSectionName[] = [\"hierarchy\", \"activity\", \"progress\", \"recently_created\", \"unparented\", \"workload\"];\nconst DEEP_SECTIONS: ContextSectionName[] = [\n ...STANDARD_SECTIONS,\n \"blockers\",\n \"files\",\n \"staleness\",\n \"tests\",\n];\nconst LEADING_HYPHEN_DATE = /^(\\d{4})-(\\d{2})-(\\d{2})/;\nconst LEADING_COMPACT_DATE = /^(\\d{4})(\\d{2})(\\d{2})(?:[T ]?\\d{2}|$)/;\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})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\n\n// ---------------------------------------------------------------------------\n// Parsers\n// ---------------------------------------------------------------------------\n\nfunction parseOutputFormat(raw: string | undefined): ContextOutputFormat | undefined {\n if (!raw) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (!CONTEXT_OUTPUT_VALUES.includes(normalized as ContextOutputFormat)) {\n throw new PmCliError(\"Context format must be one of markdown|toon|json\", EXIT_CODE.USAGE);\n }\n return normalized as ContextOutputFormat;\n}\n\nexport function resolveContextOutputFormat(options: ContextOptions, global: GlobalOptions): ContextOutputFormat {\n const commandFormat = parseOutputFormat(options.format);\n if (global.json && commandFormat && commandFormat !== \"json\") {\n throw new PmCliError(\"Cannot combine --json with --format markdown|toon\", EXIT_CODE.USAGE);\n }\n if (global.json) {\n return \"json\";\n }\n return commandFormat ?? \"toon\";\n}\n\nfunction parseContextLimit(raw: string | undefined): number {\n return parseIntegerLimit(raw, \"--limit\") ?? DEFAULT_CONTEXT_LIMIT;\n}\n\nexport function parseContextDepth(raw: string | undefined, settings: ContextSettings): ContextDepth {\n if (!raw) return settings.default_depth;\n const normalized = raw.trim().toLowerCase();\n if (!CONTEXT_DEPTH_VALUES.includes(normalized as ContextDepth)) {\n throw new PmCliError(`Context --depth must be one of ${CONTEXT_DEPTH_VALUES.join(\"|\")}`, EXIT_CODE.USAGE);\n }\n return normalized as ContextDepth;\n}\n\nexport function parseContextSections(\n raw: string[] | undefined,\n depth: ContextDepth,\n settings: ContextSettings,\n): ContextSectionName[] {\n if (raw && raw.length > 0) {\n const sections: ContextSectionName[] = [];\n for (const value of raw) {\n const normalized = value.trim().toLowerCase();\n if (!CONTEXT_SECTION_VALUES.includes(normalized as ContextSectionName)) {\n throw new PmCliError(\n `Context --section must be one of ${CONTEXT_SECTION_VALUES.join(\"|\")}`,\n EXIT_CODE.USAGE,\n );\n }\n if (!sections.includes(normalized as ContextSectionName)) {\n sections.push(normalized as ContextSectionName);\n }\n }\n return sections;\n }\n if (depth === \"brief\") return [];\n const pool = depth === \"deep\" ? DEEP_SECTIONS : STANDARD_SECTIONS;\n return pool.filter((section) => settings.sections[section]);\n}\n\nfunction parseActivityLimit(raw: string | undefined, settings: ContextSettings): number {\n if (!raw) return settings.activity_limit;\n return parseIntegerLimit(raw, \"--activity-limit\") ?? settings.activity_limit;\n}\n\nfunction parseStaleThresholdDays(raw: string | undefined, settings: ContextSettings): number {\n if (!raw) return settings.stale_threshold_days;\n const trimmed = raw.trim().toLowerCase();\n const match = /^(\\d+)d?$/.exec(trimmed);\n if (!match) {\n throw new PmCliError(\"--stale-threshold must be a number of days (e.g. 7 or 7d)\", EXIT_CODE.USAGE);\n }\n const days = parseInt(match[1], 10);\n if (days <= 0) {\n throw new PmCliError(\"--stale-threshold must be positive\", EXIT_CODE.USAGE);\n }\n return days;\n}\n\n// ---------------------------------------------------------------------------\n// Status helpers\n// ---------------------------------------------------------------------------\n\nfunction statusRank(status: ItemStatus, statusRegistry: RuntimeStatusRegistry): number {\n const normalizedStatus = normalizeStatusForRegistry(status, statusRegistry);\n const inProgressStatus = normalizeStatusInput(\"in_progress\", statusRegistry);\n const openStatus = normalizeStatusInput(\"open\", statusRegistry) ?? statusRegistry.open_status;\n const blockedStatus = normalizeStatusInput(\"blocked\", statusRegistry);\n const draftStatus = normalizeStatusInput(\"draft\", statusRegistry);\n if (inProgressStatus && normalizedStatus === inProgressStatus) return 0;\n if (openStatus && normalizedStatus === openStatus) return 1;\n if (blockedStatus && normalizedStatus === blockedStatus) return 2;\n if (draftStatus && normalizedStatus === draftStatus) return 3;\n if (statusRegistry.active_statuses.has(normalizedStatus)) return 4;\n if (statusRegistry.blocked_statuses.has(normalizedStatus)) return 5;\n if (statusRegistry.terminal_statuses.has(normalizedStatus)) return 7;\n return 6;\n}\n\nfunction isClosedStatus(status: ItemStatus, statusRegistry: RuntimeStatusRegistry): boolean {\n const closeStatus = normalizeStatusInput(\"closed\", statusRegistry);\n return closeStatus ? normalizeStatusForRegistry(status, statusRegistry) === closeStatus : false;\n}\n\nfunction isInProgressStatus(status: ItemStatus, statusRegistry: RuntimeStatusRegistry): boolean {\n const inProgressStatus = normalizeStatusInput(\"in_progress\", statusRegistry);\n return inProgressStatus ? normalizeStatusForRegistry(status, statusRegistry) === inProgressStatus : false;\n}\n\nfunction isOpenStatus(status: ItemStatus, statusRegistry: RuntimeStatusRegistry): boolean {\n const openStatus = normalizeStatusInput(\"open\", statusRegistry) ?? statusRegistry.open_status;\n return normalizeStatusForRegistry(status, statusRegistry) === openStatus;\n}\n\nfunction isBlockedStatus(status: ItemStatus, statusRegistry: RuntimeStatusRegistry): boolean {\n return statusRegistry.blocked_statuses.has(normalizeStatusForRegistry(status, statusRegistry));\n}\n\n// Projection flags belong to list/calendar/activity output shaping and must not\n// leak into runContext's downstream calls, which need full ItemFrontMatter rows.\nconst LIST_PROJECTION_FLAGS = [\"compact\", \"brief\", \"fields\", \"includeBody\", \"include_body\"] as const;\n\nfunction stripListProjectionFlags(options: ContextOptions): Record<string, unknown> {\n const copy: Record<string, unknown> = { ...(options as Record<string, unknown>) };\n for (const key of LIST_PROJECTION_FLAGS) {\n delete copy[key];\n }\n return copy;\n}\n\n// ---------------------------------------------------------------------------\n// Sorting / mapping helpers (unchanged from original)\n// ---------------------------------------------------------------------------\n\nfunction compareOptionalOrder(left: number | null | undefined, right: number | null | undefined): number {\n const leftValue = left ?? null;\n const rightValue = right ?? null;\n if (leftValue === null && rightValue === null) return 0;\n if (leftValue === null) return 1;\n if (rightValue === null) return -1;\n return leftValue - rightValue;\n}\n\nfunction compareOptionalDeadline(left: string | null | undefined, right: string | null | undefined): number {\n const leftValue = left ?? null;\n const rightValue = right ?? null;\n if (leftValue === null && rightValue === null) return 0;\n if (leftValue === null) return 1;\n if (rightValue === null) return -1;\n return compareTimestampStrings(leftValue, rightValue);\n}\n\nfunction daysInUtcMonth(year: number, monthIndex: number): number {\n return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();\n}\n\nfunction hasNoInvalidDatePrefix(value: string): boolean {\n const match = LEADING_HYPHEN_DATE.exec(value) ?? LEADING_COMPACT_DATE.exec(value);\n if (!match) {\n return true;\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 return month >= 1 && month <= 12 && day >= 1 && day <= daysInUtcMonth(year, month - 1);\n}\n\nfunction normalizeTimestampCandidate(value: string): string {\n const compactDate = COMPACT_DATE.exec(value);\n if (compactDate) {\n return `${compactDate[1]}-${compactDate[2]}-${compactDate[3]}`;\n }\n const compactDateTime = COMPACT_DATETIME.exec(value);\n if (compactDateTime) {\n const [, year, month, day, hour, minute, secondRaw, offsetRaw] = compactDateTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n const offset = offsetRaw && offsetRaw.length === 5 && offsetRaw !== \"Z\" ? `${offsetRaw.slice(0, 3)}:${offsetRaw.slice(3)}` : offsetRaw ?? \"\";\n return `${year}-${month}-${day}T${hour}:${minute}${second}${offset}`;\n }\n return value;\n}\n\nfunction parseContextTimestampMs(value: unknown): number {\n if (typeof value !== \"string\") {\n return Number.NaN;\n }\n const trimmed = value.trim();\n if (trimmed.length === 0 || !hasNoInvalidDatePrefix(trimmed)) {\n return Number.NaN;\n }\n const parsed = Date.parse(normalizeTimestampCandidate(trimmed));\n return Number.isFinite(parsed) ? parsed : Number.NaN;\n}\n\nfunction sortableTimestamp(value: unknown): string {\n const parsed = parseContextTimestampMs(value);\n return Number.isFinite(parsed) ? new Date(parsed).toISOString() : \"\";\n}\n\nfunction dateTokenForTimestamp(value: unknown): string {\n const parsed = parseContextTimestampMs(value);\n return Number.isFinite(parsed) ? new Date(parsed).toISOString().slice(0, 10) : \"unknown\";\n}\n\nfunction normalizedParentId(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction compareCriticalItems(left: ItemFrontMatter, right: ItemFrontMatter, statusRegistry: RuntimeStatusRegistry): number {\n const byStatus = statusRank(left.status, statusRegistry) - statusRank(right.status, statusRegistry);\n if (byStatus !== 0) return byStatus;\n const byPriority = left.priority - right.priority;\n if (byPriority !== 0) return byPriority;\n const byOrder = compareOptionalOrder(left.order, right.order);\n if (byOrder !== 0) return byOrder;\n const byDeadline = compareOptionalDeadline(left.deadline, right.deadline);\n if (byDeadline !== 0) return byDeadline;\n const byUpdated = compareTimestampStrings(sortableTimestamp(right.updated_at), sortableTimestamp(left.updated_at));\n const byId = left.id.localeCompare(right.id);\n return byUpdated !== 0 ? byUpdated : byId;\n}\n\nfunction completionPct(closed: number, total: number): number {\n return total > 0 ? Math.round((closed / total) * 100) : 0;\n}\n\nfunction buildChildrenByParent(allItems: ItemFrontMatter[]): Map<string, ItemFrontMatter[]> {\n const childrenByParent = new Map<string, ItemFrontMatter[]>();\n for (const item of allItems) {\n const parent = normalizedParentId(item.parent);\n if (!parent) continue;\n const children = childrenByParent.get(parent) ?? [];\n children.push(item);\n childrenByParent.set(parent, children);\n }\n return childrenByParent;\n}\n\nfunction toContextFocusItem(\n item: ItemFrontMatter,\n statusRegistry?: RuntimeStatusRegistry,\n childrenByParent?: Map<string, ItemFrontMatter[]>,\n): ContextFocusItem {\n const focus: ContextFocusItem = {\n id: item.id,\n title: item.title,\n type: item.type,\n status: item.status,\n priority: item.priority,\n order: item.order ?? null,\n deadline: item.deadline ?? null,\n assignee: item.assignee ?? null,\n tags: Array.isArray(item.tags) ? [...item.tags] : [],\n updated_at: item.updated_at,\n parent: normalizedParentId(item.parent),\n };\n if (statusRegistry && childrenByParent) {\n const descendants = collectDescendants(item.id, childrenByParent);\n const total = descendants.length;\n if (total > 0) {\n const closed = descendants.filter((desc) => isClosedStatus(desc.status, statusRegistry)).length;\n focus.children_total = total;\n focus.children_closed = closed;\n focus.completion_pct = completionPct(closed, total);\n }\n }\n return focus;\n}\n\nfunction summarizeAgenda(events: CalendarRow[]): ContextAgendaSummary {\n let deadlines = 0;\n let reminders = 0;\n let scheduled = 0;\n const itemIds = new Set<string>();\n for (const event of events) {\n itemIds.add(event.item_id);\n if (event.kind === \"deadline\") {\n deadlines += 1;\n continue;\n }\n if (event.kind === \"reminder\") {\n reminders += 1;\n continue;\n }\n scheduled += 1;\n }\n return {\n events: events.length,\n items: itemIds.size,\n deadlines,\n reminders,\n scheduled,\n };\n}\n\nfunction filterTerminalCalendarEvents(events: CalendarRow[], statusRegistry: RuntimeStatusRegistry): CalendarRow[] {\n return events.filter((event) => !statusRegistry.terminal_statuses.has(normalizeStatusForRegistry(event.item_status, statusRegistry)));\n}\n\n// ---------------------------------------------------------------------------\n// Section builders\n// ---------------------------------------------------------------------------\n\nfunction buildHierarchy(\n allItems: ItemFrontMatter[],\n activeItems: ItemFrontMatter[],\n statusRegistry: RuntimeStatusRegistry,\n limit: number,\n): HierarchyNode[] {\n const itemMap = new Map<string, ItemFrontMatter>();\n for (const item of allItems) {\n itemMap.set(item.id, item);\n }\n\n const childrenByParent = buildChildrenByParent(allItems);\n\n const activeHighLevelIds = new Set(\n activeItems.filter((item) => HIGH_LEVEL_TYPES.has(item.type)).map((item) => item.id),\n );\n\n const nodes: HierarchyNode[] = [];\n for (const parentId of activeHighLevelIds) {\n const parent = itemMap.get(parentId);\n if (!parent) continue;\n const allDescendants = collectDescendants(parentId, childrenByParent);\n const childItems = childrenByParent.get(parentId) ?? [];\n\n let closedCount = 0;\n let openCount = 0;\n let inProgressCount = 0;\n let blockedCount = 0;\n for (const desc of allDescendants) {\n if (isClosedStatus(desc.status, statusRegistry)) closedCount++;\n else if (isInProgressStatus(desc.status, statusRegistry)) inProgressCount++;\n else if (isBlockedStatus(desc.status, statusRegistry)) blockedCount++;\n else if (isOpenStatus(desc.status, statusRegistry)) openCount++;\n }\n\n const children: HierarchyChild[] = childItems\n .sort((a, b) => compareCriticalItems(a, b, statusRegistry))\n .slice(0, limit)\n .map((child) => {\n const grandchildren = collectDescendants(child.id, childrenByParent);\n const gcClosed = grandchildren.filter((gc) => isClosedStatus(gc.status, statusRegistry)).length;\n return {\n id: child.id,\n title: child.title,\n type: child.type,\n status: child.status,\n children_total: grandchildren.length,\n children_closed: gcClosed,\n };\n });\n\n nodes.push({\n id: parent.id,\n title: parent.title,\n type: parent.type,\n status: parent.status,\n children_total: allDescendants.length,\n children_closed: closedCount,\n children_open: openCount,\n children_in_progress: inProgressCount,\n children_blocked: blockedCount,\n children,\n });\n }\n\n return nodes\n .sort((a, b) => {\n const aParent = itemMap.get(a.id)!;\n const bParent = itemMap.get(b.id)!;\n return compareCriticalItems(aParent, bParent, statusRegistry);\n })\n .slice(0, limit);\n}\n\nfunction collectDescendants(\n parentId: string,\n childrenByParent: Map<string, ItemFrontMatter[]>,\n): ItemFrontMatter[] {\n const result: ItemFrontMatter[] = [];\n const stack = [parentId];\n const visited = new Set<string>();\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (visited.has(current)) continue;\n visited.add(current);\n const children = childrenByParent.get(current) ?? [];\n for (const child of children) {\n result.push(child);\n stack.push(child.id);\n }\n }\n return result;\n}\n\nasync function buildActivity(\n activityLimit: number,\n global: GlobalOptions,\n): Promise<CompactActivityEntry[]> {\n const result = await runActivity({ compact: true, limit: String(activityLimit) }, global);\n return result.compact_activity ?? [];\n}\n\nfunction buildProgress(\n allItems: ItemFrontMatter[],\n activeItems: ItemFrontMatter[],\n statusRegistry: RuntimeStatusRegistry,\n limit: number,\n): ProgressEntry[] {\n const childrenByParent = new Map<string, ItemFrontMatter[]>();\n for (const item of allItems) {\n if (!item.parent) continue;\n const children = childrenByParent.get(item.parent) ?? [];\n children.push(item);\n childrenByParent.set(item.parent, children);\n }\n\n const activeHighLevel = activeItems.filter((item) => HIGH_LEVEL_TYPES.has(item.type));\n const entries: ProgressEntry[] = [];\n for (const parent of activeHighLevel) {\n const descendants = collectDescendants(parent.id, childrenByParent);\n const total = descendants.length;\n if (total === 0) continue;\n\n let closed = 0;\n let open = 0;\n let inProgress = 0;\n let blocked = 0;\n for (const desc of descendants) {\n if (isClosedStatus(desc.status, statusRegistry)) closed++;\n else if (isInProgressStatus(desc.status, statusRegistry)) inProgress++;\n else if (isBlockedStatus(desc.status, statusRegistry)) blocked++;\n else if (isOpenStatus(desc.status, statusRegistry)) open++;\n }\n\n entries.push({\n id: parent.id,\n title: parent.title,\n type: parent.type,\n total,\n closed,\n open,\n in_progress: inProgress,\n blocked,\n completion_pct: completionPct(closed, total),\n });\n }\n\n return entries\n .sort((a, b) => a.completion_pct - b.completion_pct)\n .slice(0, limit);\n}\n\nfunction buildBlockers(\n blockedItems: ItemFrontMatter[],\n itemMap: Map<string, ItemFrontMatter>,\n limit: number,\n): BlockerEntry[] {\n return blockedItems.slice(0, limit).map((item) => {\n const blockerItem = item.blocked_by ? itemMap.get(item.blocked_by) : undefined;\n return {\n id: item.id,\n title: item.title,\n blocked_by: item.blocked_by ?? null,\n blocked_by_title: blockerItem?.title ?? null,\n blocked_by_status: blockerItem?.status ?? null,\n blocked_reason: item.blocked_reason ?? null,\n unblock_note: item.unblock_note ?? null,\n };\n });\n}\n\nfunction buildHotFiles(\n activeItems: ItemFrontMatter[],\n limit: number,\n): HotFile[] {\n const fileMap = new Map<string, Set<string>>();\n for (const item of activeItems) {\n for (const file of item.files ?? []) {\n const existing = fileMap.get(file.path) ?? new Set<string>();\n existing.add(item.id);\n fileMap.set(file.path, existing);\n }\n }\n\n return [...fileMap.entries()]\n .map(([filePath, itemIds]) => ({\n path: filePath,\n references: itemIds.size,\n items: [...itemIds].sort(),\n }))\n .sort((a, b) => b.references - a.references)\n .slice(0, limit);\n}\n\nfunction buildWorkload(\n activeItems: ItemFrontMatter[],\n statusRegistry: RuntimeStatusRegistry,\n limit: number,\n): WorkloadEntry[] {\n const groups = new Map<string | null, ItemFrontMatter[]>();\n for (const item of activeItems) {\n const key = item.assignee ?? null;\n const existing = groups.get(key) ?? [];\n existing.push(item);\n groups.set(key, existing);\n }\n\n return [...groups.entries()]\n .map(([assignee, items]) => ({\n assignee,\n active: items.length,\n in_progress: items.filter((item) => isInProgressStatus(item.status, statusRegistry)).length,\n items: items.map((item) => item.id).sort(),\n }))\n .sort((a, b) => b.active - a.active)\n .slice(0, limit);\n}\n\nfunction buildStaleness(\n allNonTerminal: ItemFrontMatter[],\n staleThresholdDays: number,\n now: string,\n limit: number,\n): StaleEntry[] {\n const cutoffMs = new Date(now).getTime() - staleThresholdDays * 24 * 60 * 60 * 1000;\n\n return allNonTerminal\n .filter((item) => new Date(item.updated_at).getTime() < cutoffMs)\n .map((item) => ({\n id: item.id,\n title: item.title,\n status: item.status,\n updated_at: item.updated_at,\n stale_days: Math.floor((new Date(now).getTime() - new Date(item.updated_at).getTime()) / (24 * 60 * 60 * 1000)),\n }))\n .sort((a, b) => b.stale_days - a.stale_days)\n .slice(0, limit);\n}\n\nfunction buildRecentlyCreated(\n allNonTerminal: ItemFrontMatter[],\n statusRegistry: RuntimeStatusRegistry,\n childrenByParent: Map<string, ItemFrontMatter[]>,\n limit: number,\n): RecentContextItem[] {\n return allNonTerminal\n .map((item) => ({ item, sortKey: sortableTimestamp(item.created_at) }))\n .sort((left, right) => {\n const byCreated = compareTimestampStrings(right.sortKey, left.sortKey);\n return byCreated !== 0 ? byCreated : left.item.id.localeCompare(right.item.id);\n })\n .slice(0, limit)\n .map(({ item }) => ({\n ...toContextFocusItem(item, statusRegistry, childrenByParent),\n created_at: item.created_at,\n }));\n}\n\nfunction buildUnparented(\n allNonTerminal: ItemFrontMatter[],\n statusRegistry: RuntimeStatusRegistry,\n childrenByParent: Map<string, ItemFrontMatter[]>,\n limit: number,\n): ContextFocusItem[] {\n return allNonTerminal\n .filter((item) => !normalizedParentId(item.parent) && !HIGH_LEVEL_TYPES.has(item.type))\n .sort((left, right) => compareCriticalItems(left, right, statusRegistry))\n .slice(0, limit)\n .map((item) => toContextFocusItem(item, statusRegistry, childrenByParent));\n}\n\nfunction buildTestHealth(\n activeItems: ItemFrontMatter[],\n): TestHealthSummary {\n let itemsWithTests = 0;\n let itemsWithRecentRuns = 0;\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n const itemsFailing: string[] = [];\n\n for (const item of activeItems) {\n if ((item.tests ?? []).length > 0) {\n itemsWithTests++;\n }\n const runs = item.test_runs ?? [];\n if (runs.length > 0) {\n itemsWithRecentRuns++;\n let itemHasFailure = false;\n for (const run of runs) {\n passed += run.passed ?? 0;\n failed += run.failed ?? 0;\n skipped += run.skipped ?? 0;\n if ((run.failed ?? 0) > 0) {\n itemHasFailure = true;\n }\n }\n if (itemHasFailure) {\n itemsFailing.push(item.id);\n }\n }\n }\n\n return {\n items_with_tests: itemsWithTests,\n items_with_recent_runs: itemsWithRecentRuns,\n recent_runs: { passed, failed, skipped },\n items_failing: itemsFailing.sort(),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Markdown formatting\n// ---------------------------------------------------------------------------\n\nfunction formatClock(timestamp: string): string {\n return `${new Date(timestamp).toISOString().slice(11, 16)}Z`;\n}\n\nfunction formatFocusLine(item: ContextFocusItem): string {\n const orderToken = item.order === null ? \"-\" : String(item.order);\n const deadlineToken = item.deadline ?? \"-\";\n const parentToken = item.parent ? ` parent:${item.parent}` : \"\";\n const progressToken =\n item.children_total !== undefined && item.children_closed !== undefined && item.completion_pct !== undefined\n ? ` children:${item.children_closed}/${item.children_total} done:${item.completion_pct}%`\n : \"\";\n return `${item.id} p${item.priority} ${item.status} ${item.type} order:${orderToken} deadline:${deadlineToken}${parentToken}${progressToken} ${item.title}`;\n}\n\nfunction formatAgendaLine(event: CalendarRow): string {\n const base = `${formatClock(event.at)} [${event.kind}] ${event.item_id} p${event.item_priority} ${event.item_status} ${event.item_title}`;\n if (event.kind === \"reminder\") {\n return `${base} — ${event.reminder_text}`;\n }\n if (event.kind === \"event\") {\n const recurringSuffix = event.event_recurring ? \" (recurring)\" : \"\";\n const title = event.event_title ?? event.item_title;\n return `${base} — ${title}${recurringSuffix}`;\n }\n return base;\n}\n\nexport function renderContextMarkdown(result: ContextResult): string {\n const lines: string[] = [];\n lines.push(\"# pm context\");\n lines.push(\"\");\n lines.push(`- now: ${result.now}`);\n lines.push(`- depth: ${result.depth}`);\n lines.push(`- active_items: ${result.summary.active_items} (in_progress: ${result.summary.in_progress}, open: ${result.summary.open})`);\n if (result.summary.total_items !== undefined) {\n lines.push(`- total_items: ${result.summary.total_items} (closed: ${result.summary.closed ?? 0}, canceled: ${result.summary.canceled ?? 0})`);\n }\n lines.push(`- agenda_events: ${result.summary.agenda_events}`);\n lines.push(`- blocked_fallback_used: ${result.summary.blocked_fallback_used}`);\n if (result.sections_included.length > 0) {\n lines.push(`- sections: ${result.sections_included.join(\", \")}`);\n }\n lines.push(\"\");\n\n lines.push(\"## High-level focus\");\n if (result.high_level.length === 0) {\n lines.push(\"No high-level active items.\");\n } else {\n for (const item of result.high_level) {\n lines.push(`- ${formatFocusLine(item)}`);\n }\n }\n lines.push(\"\");\n\n lines.push(\"## Low-level focus\");\n if (result.low_level.length === 0) {\n lines.push(\"No low-level active items.\");\n } else {\n for (const item of result.low_level) {\n lines.push(`- ${formatFocusLine(item)}`);\n }\n }\n lines.push(\"\");\n\n if (result.blocked_fallback.length > 0) {\n lines.push(\"## Blocked fallback\");\n for (const item of result.blocked_fallback) {\n lines.push(`- ${formatFocusLine(item)}`);\n }\n lines.push(\"\");\n }\n\n lines.push(\"## Agenda\");\n lines.push(\n `- events: ${result.agenda.summary.events} (deadlines: ${result.agenda.summary.deadlines}, reminders: ${result.agenda.summary.reminders}, scheduled: ${result.agenda.summary.scheduled})`,\n );\n if (result.agenda.events.length === 0) {\n lines.push(\"No agenda events matched the selected filters.\");\n } else {\n for (const event of result.agenda.events) {\n lines.push(`- ${formatAgendaLine(event)}`);\n }\n }\n lines.push(\"\");\n\n if (result.hierarchy && result.hierarchy.length > 0) {\n lines.push(\"## Hierarchy\");\n for (const node of result.hierarchy) {\n const pct = node.children_total > 0 ? Math.round((node.children_closed / node.children_total) * 100) : 0;\n lines.push(`- ${node.id} ${node.type} ${node.status} \"${node.title}\" [${node.children_closed}/${node.children_total} done ${pct}%]`);\n for (const child of node.children) {\n const cpct = child.children_total > 0 ? Math.round((child.children_closed / child.children_total) * 100) : 0;\n lines.push(` - ${child.id} ${child.type} ${child.status} \"${child.title}\" [${child.children_closed}/${child.children_total} done ${cpct}%]`);\n }\n }\n lines.push(\"\");\n }\n\n if (result.progress && result.progress.length > 0) {\n lines.push(\"## Progress\");\n for (const entry of result.progress) {\n lines.push(`- ${entry.id} \"${entry.title}\" ${entry.completion_pct}% (${entry.closed}/${entry.total} closed, ${entry.in_progress} wip, ${entry.open} open, ${entry.blocked} blocked)`);\n }\n lines.push(\"\");\n }\n\n if (result.recently_created && result.recently_created.length > 0) {\n lines.push(\"## Recently created\");\n for (const item of result.recently_created) {\n lines.push(`- ${dateTokenForTimestamp(item.created_at)} ${formatFocusLine(item)}`);\n }\n lines.push(\"\");\n }\n\n if (result.unparented && result.unparented.length > 0) {\n lines.push(\"## Unparented\");\n for (const item of result.unparented) {\n lines.push(`- ${formatFocusLine(item)}`);\n }\n lines.push(\"\");\n }\n\n if (result.activity && result.activity.length > 0) {\n lines.push(\"## Recent activity\");\n for (const entry of result.activity) {\n const msg = entry.msg ? ` ${entry.msg}` : \"\";\n lines.push(`- ${entry.ts.slice(0, 16)}Z ${entry.id} ${entry.op} by:${entry.author}${msg}`);\n }\n lines.push(\"\");\n }\n\n if (result.blockers && result.blockers.length > 0) {\n lines.push(\"## Blockers\");\n for (const entry of result.blockers) {\n const by = entry.blocked_by ? `blocked_by:${entry.blocked_by}(${entry.blocked_by_status ?? \"?\"})` : \"blocked_by:-\";\n const reason = entry.blocked_reason ? ` reason:\"${entry.blocked_reason}\"` : \"\";\n const note = entry.unblock_note ? ` unblock:\"${entry.unblock_note}\"` : \"\";\n lines.push(`- ${entry.id} \"${entry.title}\" ${by}${reason}${note}`);\n }\n lines.push(\"\");\n }\n\n if (result.files && result.files.length > 0) {\n lines.push(\"## Hot files\");\n for (const file of result.files) {\n lines.push(`- ${file.path} refs:${file.references} items:[${file.items.join(\",\")}]`);\n }\n lines.push(\"\");\n }\n\n if (result.workload && result.workload.length > 0) {\n lines.push(\"## Workload\");\n for (const entry of result.workload) {\n const who = entry.assignee ?? \"(unassigned)\";\n lines.push(`- ${who} active:${entry.active} wip:${entry.in_progress} items:[${entry.items.join(\",\")}]`);\n }\n lines.push(\"\");\n }\n\n if (result.staleness && result.staleness.length > 0) {\n lines.push(\"## Stale items\");\n for (const entry of result.staleness) {\n lines.push(`- ${entry.id} ${entry.status} stale:${entry.stale_days}d last:${entry.updated_at.slice(0, 10)} \"${entry.title}\"`);\n }\n lines.push(\"\");\n }\n\n if (result.tests) {\n lines.push(\"## Test health\");\n lines.push(`- items_with_tests: ${result.tests.items_with_tests}`);\n lines.push(`- items_with_recent_runs: ${result.tests.items_with_recent_runs}`);\n lines.push(`- passed: ${result.tests.recent_runs.passed}, failed: ${result.tests.recent_runs.failed}, skipped: ${result.tests.recent_runs.skipped}`);\n if (result.tests.items_failing.length > 0) {\n lines.push(`- items_failing: [${result.tests.items_failing.join(\",\")}]`);\n }\n lines.push(\"\");\n }\n\n const isEmpty =\n result.summary.active_items === 0 &&\n result.summary.blocked === 0 &&\n result.agenda.summary.events === 0;\n if (isEmpty) {\n lines.push(\"## Suggestions\");\n lines.push(\"No active work items or upcoming events. Consider:\");\n lines.push(\"- `pm create --type Task --title \\\"...\\\"` to add a new work item\");\n lines.push(\"- `pm list --status closed --limit 5` to review recent completions\");\n lines.push(\"- `pm search <keywords>` to find related past work\");\n lines.push(\"- `pm aggregate` for a full project status overview\");\n }\n\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Main runner\n// ---------------------------------------------------------------------------\n\nexport async function runContext(options: ContextOptions, global: GlobalOptions): Promise<ContextResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const settings = await readSettings(pmRoot);\n const contextSettings = settings.context ?? SETTINGS_DEFAULTS.context;\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const limit = parseContextLimit(options.limit);\n\n const depth = parseContextDepth(options.depth, contextSettings);\n const sectionsIncluded = parseContextSections(options.section, depth, contextSettings);\n const activityLimit = parseActivityLimit(options.activityLimit, contextSettings);\n const staleThresholdDays = parseStaleThresholdDays(options.staleThreshold, contextSettings);\n\n const needsAllItems = sectionsIncluded.some((s) =>\n [\"hierarchy\", \"progress\", \"blockers\", \"staleness\", \"recently_created\", \"unparented\"].includes(s),\n );\n\n const baseListOptions = stripListProjectionFlags(options);\n const listOptions: ListOptions = { ...baseListOptions, excludeTerminal: true };\n const listed = await runList(undefined, listOptions, global);\n const listedFrontMatter = listed.items as ItemFrontMatter[];\n\n let allItems: ItemFrontMatter[] = listedFrontMatter;\n if (needsAllItems) {\n const allListOptions: ListOptions = { ...baseListOptions, excludeTerminal: false };\n const allListed = await runList(undefined, allListOptions, global);\n allItems = allListed.items as ItemFrontMatter[];\n }\n\n const ranked = [...listedFrontMatter].sort((left, right) => compareCriticalItems(left, right, statusRegistry));\n const activeStatuses =\n statusRegistry.active_statuses.size > 0\n ? statusRegistry.active_statuses\n : new Set<ItemStatus>([statusRegistry.open_status]);\n const blockedStatuses = statusRegistry.blocked_statuses;\n const activeItems = ranked.filter((item) => activeStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)));\n const blockedItems = ranked.filter((item) =>\n blockedStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)),\n );\n\n const childrenByParent = buildChildrenByParent(allItems);\n const focusChildrenByParent = needsAllItems ? childrenByParent : undefined;\n\n const highLevel = activeItems\n .filter((item) => HIGH_LEVEL_TYPES.has(item.type))\n .slice(0, limit)\n .map((item) => toContextFocusItem(item, statusRegistry, focusChildrenByParent));\n const lowLevel = activeItems\n .filter((item) => !HIGH_LEVEL_TYPES.has(item.type))\n .slice(0, limit)\n .map((item) => toContextFocusItem(item, statusRegistry, focusChildrenByParent));\n\n const blockedFallbackUsed = activeItems.length === 0;\n const blockedFallback = blockedFallbackUsed\n ? blockedItems.slice(0, limit).map((item) => toContextFocusItem(item, statusRegistry, focusChildrenByParent))\n : [];\n\n const calendarOptions: CalendarOptions = {\n ...baseListOptions,\n view: \"agenda\",\n include: \"all\",\n limit: String(limit),\n };\n const agenda = await runCalendar(calendarOptions, global);\n const agendaEvents = filterTerminalCalendarEvents(agenda.events, statusRegistry).slice(0, limit);\n const agendaSummary = summarizeAgenda(agendaEvents);\n const warnings = [...new Set([...(listed.warnings ?? []), ...(agenda.warnings ?? [])])].sort((left, right) =>\n left.localeCompare(right),\n );\n\n const inProgressStatus = normalizeStatusInput(\"in_progress\", statusRegistry);\n const openStatus = normalizeStatusInput(\"open\", statusRegistry) ?? statusRegistry.open_status;\n const inProgressCount = inProgressStatus\n ? activeItems.filter((item) => normalizeStatusForRegistry(item.status, statusRegistry) === inProgressStatus).length\n : 0;\n const openCount = activeItems.filter((item) => normalizeStatusForRegistry(item.status, statusRegistry) === openStatus).length;\n\n const now = agenda.now;\n\n const itemMap = new Map<string, ItemFrontMatter>();\n for (const item of allItems) {\n itemMap.set(item.id, item);\n }\n\n const allNonTerminal = allItems.filter((item) => !isTerminalStatus(item.status, statusRegistry));\n\n const has = (section: ContextSectionName) => sectionsIncluded.includes(section);\n\n const hierarchy = has(\"hierarchy\") ? buildHierarchy(allItems, activeItems, statusRegistry, limit) : undefined;\n const activity = has(\"activity\") ? await buildActivity(activityLimit, global) : undefined;\n const progress = has(\"progress\") ? buildProgress(allItems, activeItems, statusRegistry, limit) : undefined;\n const blockersSection = has(\"blockers\") ? buildBlockers(blockedItems, itemMap, limit) : undefined;\n const recentlyCreated = has(\"recently_created\")\n ? buildRecentlyCreated(allNonTerminal, statusRegistry, childrenByParent, limit)\n : undefined;\n const unparented = has(\"unparented\")\n ? buildUnparented(allNonTerminal, statusRegistry, childrenByParent, limit)\n : undefined;\n const filesSection = has(\"files\") ? buildHotFiles(activeItems, limit) : undefined;\n const workload = has(\"workload\") ? buildWorkload(activeItems, statusRegistry, limit) : undefined;\n const staleness = has(\"staleness\") ? buildStaleness(allNonTerminal, staleThresholdDays, now, limit) : undefined;\n const tests = has(\"tests\") ? buildTestHealth(activeItems) : undefined;\n\n const summaryExtras: Pick<ContextSummary, \"total_items\" | \"closed\" | \"canceled\"> =\n needsAllItems\n ? {\n total_items: allItems.length,\n closed: allItems.filter((i) => isClosedStatus(i.status, statusRegistry)).length,\n canceled: allItems.filter((i) => {\n const canceledStatus = normalizeStatusInput(\"canceled\", statusRegistry);\n return canceledStatus ? normalizeStatusForRegistry(i.status, statusRegistry) === canceledStatus : false;\n }).length,\n }\n : {};\n\n const result: ContextResult = {\n output_default: \"toon\",\n now,\n depth,\n sections_included: sectionsIncluded,\n window: {\n anchor: agenda.anchor,\n start: agenda.range.start,\n end: agenda.range.end,\n past: agenda.range.past,\n from: agenda.range.from,\n to: agenda.range.to,\n },\n filters: {\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n assignee: options.assignee ?? null,\n assignee_filter: options.assigneeFilter ?? null,\n sprint: options.sprint ?? null,\n release: options.release ?? null,\n limit: options.limit ?? null,\n runtime_filters: (listed.filters.runtime_filters ?? agenda.filters.runtime_filters ?? {}) as Record<string, unknown>,\n },\n summary: {\n active_items: activeItems.length,\n in_progress: inProgressCount,\n open: openCount,\n blocked: blockedItems.length,\n blocked_fallback_used: blockedFallbackUsed,\n high_level: highLevel.length,\n low_level: lowLevel.length,\n agenda_events: agendaSummary.events,\n ...summaryExtras,\n },\n high_level: highLevel,\n low_level: lowLevel,\n blocked_fallback: blockedFallback,\n agenda: {\n summary: agendaSummary,\n events: agendaEvents,\n },\n };\n\n if (hierarchy) result.hierarchy = hierarchy;\n if (activity) result.activity = activity;\n if (progress) result.progress = progress;\n if (blockersSection) result.blockers = blockersSection;\n if (recentlyCreated) result.recently_created = recentlyCreated;\n if (unparented) result.unparented = unparented;\n if (filesSection) result.files = filesSection;\n if (workload) result.workload = workload;\n if (staleness) result.staleness = staleness;\n if (tests) result.tests = tests;\n if (warnings.length > 0) result.warnings = warnings;\n if (activeItems.length === 0 && blockedItems.length === 0 && agendaEvents.length === 0) {\n result.suggestions = [\n 'pm create --type Task --title \"...\" to add a new work item',\n \"pm list --status closed --limit 5 to review recent completions\",\n \"pm search <keywords> to find related past work\",\n \"pm aggregate for a full project status overview\",\n ];\n }\n\n return result;\n}\n"],"names":["year","month","start","fullPeriod"],"mappings":"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","debugId":"f5840753-1879-5c26-b87c-c5b6456b9f3b"}