@unbrained/pm-cli 2026.7.6 → 2026.7.7

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 (666) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/cli/commands/annotation-command.d.ts +1 -0
  3. package/dist/cli/commands/annotation-command.js +29 -2
  4. package/dist/cli/commands/annotation-command.js.map +1 -1
  5. package/dist/cli/commands/comments.js +3 -4
  6. package/dist/cli/commands/comments.js.map +1 -1
  7. package/dist/cli/commands/extension/bundled-catalog.d.ts +3 -0
  8. package/dist/cli/commands/extension/bundled-catalog.js +38 -28
  9. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  10. package/dist/cli/commands/extension/install-sources.js +81 -18
  11. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  12. package/dist/cli/commands/health.js +9 -5
  13. package/dist/cli/commands/health.js.map +1 -1
  14. package/dist/cli/commands/learnings.js +5 -3
  15. package/dist/cli/commands/learnings.js.map +1 -1
  16. package/dist/cli/commands/notes.js +5 -3
  17. package/dist/cli/commands/notes.js.map +1 -1
  18. package/dist/cli/commands/reindex.js +4 -3
  19. package/dist/cli/commands/reindex.js.map +1 -1
  20. package/dist/cli/commands/search.js +3 -3
  21. package/dist/cli/commands/search.js.map +1 -1
  22. package/dist/cli/commands/test.d.ts +9 -0
  23. package/dist/cli/commands/test.js +144 -105
  24. package/dist/cli/commands/test.js.map +1 -1
  25. package/dist/cli/extension-command-help.js +10 -2
  26. package/dist/cli/extension-command-help.js.map +1 -1
  27. package/dist/cli/register-list-query.d.ts +1 -1
  28. package/dist/cli/register-list-query.js +18 -27
  29. package/dist/cli/register-list-query.js.map +1 -1
  30. package/dist/cli/register-operations.d.ts +0 -8
  31. package/dist/cli/register-operations.js +41 -46
  32. package/dist/cli/register-operations.js.map +1 -1
  33. package/dist/cli/register-setup.js +113 -13
  34. package/dist/cli/register-setup.js.map +1 -1
  35. package/dist/cli/registration-helpers.d.ts +5 -1
  36. package/dist/cli/registration-helpers.js +14 -2
  37. package/dist/cli/registration-helpers.js.map +1 -1
  38. package/dist/cli-bundle/chunks/append-F7WPGIQL.js +11 -0
  39. package/dist/cli-bundle/chunks/{gc-2DNMPXMC.js → append-PVCTBVJG.js} +8 -9
  40. package/dist/cli-bundle/chunks/{chunk-EGAP5OWD.js → chunk-2APXX4TZ.js} +16 -14
  41. package/dist/cli-bundle/chunks/chunk-2APXX4TZ.js.map +1 -0
  42. package/dist/cli-bundle/chunks/{chunk-R5BMJX33.js → chunk-2LEJGRQ7.js} +2 -2
  43. package/dist/cli-bundle/chunks/{chunk-AZYGZGGI.js → chunk-2TILG6F2.js} +3 -3
  44. package/dist/cli-bundle/chunks/{chunk-SMB7RV23.js → chunk-3G6UMXT3.js} +6 -8
  45. package/dist/cli-bundle/chunks/{chunk-SMB7RV23.js.map → chunk-3G6UMXT3.js.map} +1 -1
  46. package/dist/cli-bundle/chunks/{chunk-GJ7QC5DJ.js → chunk-3TYOW6RR.js} +8 -8
  47. package/dist/cli-bundle/chunks/{chunk-B6DUFX6H.js → chunk-3X542TEY.js} +7 -7
  48. package/dist/cli-bundle/chunks/{chunk-B6XS3R3O.js → chunk-42LXP4VO.js} +12 -16
  49. package/dist/cli-bundle/chunks/{chunk-B6XS3R3O.js.map → chunk-42LXP4VO.js.map} +1 -1
  50. package/dist/cli-bundle/chunks/{chunk-CL36D4PC.js → chunk-43SIHQND.js} +36 -15
  51. package/dist/cli-bundle/chunks/chunk-43SIHQND.js.map +7 -0
  52. package/dist/cli-bundle/chunks/{chunk-7D7OOEYG.js → chunk-43UQN754.js} +10 -14
  53. package/dist/cli-bundle/chunks/{chunk-7D7OOEYG.js.map → chunk-43UQN754.js.map} +1 -1
  54. package/dist/cli-bundle/chunks/{chunk-ALFPSEWO.js → chunk-43YSKY75.js} +4 -6
  55. package/dist/cli-bundle/chunks/{chunk-ALFPSEWO.js.map → chunk-43YSKY75.js.map} +1 -1
  56. package/dist/cli-bundle/chunks/{chunk-NO442GWJ.js → chunk-4BKDAEDF.js} +5 -5
  57. package/dist/cli-bundle/chunks/{chunk-NO442GWJ.js.map → chunk-4BKDAEDF.js.map} +2 -2
  58. package/dist/cli-bundle/chunks/{chunk-4LELACOL.js → chunk-4IQKDKGE.js} +15 -23
  59. package/dist/cli-bundle/chunks/{chunk-4LELACOL.js.map → chunk-4IQKDKGE.js.map} +1 -1
  60. package/dist/cli-bundle/chunks/{chunk-F3K4JGFD.js → chunk-4MZOKTI2.js} +6 -8
  61. package/dist/cli-bundle/chunks/{chunk-F3K4JGFD.js.map → chunk-4MZOKTI2.js.map} +1 -1
  62. package/dist/cli-bundle/chunks/{chunk-D2XRLB55.js → chunk-52NS7JDP.js} +14 -20
  63. package/dist/cli-bundle/chunks/{chunk-D2XRLB55.js.map → chunk-52NS7JDP.js.map} +1 -1
  64. package/dist/cli-bundle/chunks/{chunk-IX5BXEMX.js → chunk-565WYS5W.js} +12 -16
  65. package/dist/cli-bundle/chunks/{chunk-IX5BXEMX.js.map → chunk-565WYS5W.js.map} +1 -1
  66. package/dist/cli-bundle/chunks/{chunk-UH7T2DAX.js → chunk-5FIQ4EX3.js} +12 -18
  67. package/dist/cli-bundle/chunks/{chunk-UH7T2DAX.js.map → chunk-5FIQ4EX3.js.map} +1 -1
  68. package/dist/cli-bundle/chunks/{chunk-DMRNBQOI.js → chunk-6G6O3OPQ.js} +256 -36
  69. package/dist/cli-bundle/chunks/chunk-6G6O3OPQ.js.map +1 -0
  70. package/dist/cli-bundle/chunks/{chunk-G64OCSKU.js → chunk-6LCJRGPD.js} +9 -13
  71. package/dist/cli-bundle/chunks/{chunk-G64OCSKU.js.map → chunk-6LCJRGPD.js.map} +1 -1
  72. package/dist/cli-bundle/chunks/{chunk-7WBAJSS6.js → chunk-6UQCNWFV.js} +6 -8
  73. package/dist/cli-bundle/chunks/{chunk-7WBAJSS6.js.map → chunk-6UQCNWFV.js.map} +1 -1
  74. package/dist/cli-bundle/chunks/{chunk-ZSUS2OD3.js → chunk-6XTSYPPO.js} +1216 -387
  75. package/dist/cli-bundle/chunks/chunk-6XTSYPPO.js.map +7 -0
  76. package/dist/cli-bundle/chunks/chunk-7ML7JONU.js +5434 -0
  77. package/dist/cli-bundle/chunks/chunk-7ML7JONU.js.map +1 -0
  78. package/dist/cli-bundle/chunks/{chunk-ZZD4J5XY.js → chunk-7PNQA24K.js} +30 -36
  79. package/dist/cli-bundle/chunks/{chunk-ZZD4J5XY.js.map → chunk-7PNQA24K.js.map} +1 -1
  80. package/dist/cli-bundle/chunks/{chunk-JJP45OEI.js → chunk-7VQ3JJN5.js} +2 -2
  81. package/dist/cli-bundle/chunks/{chunk-OGWQ2IEP.js → chunk-7Y5N34HX.js} +8 -12
  82. package/dist/cli-bundle/chunks/{chunk-OGWQ2IEP.js.map → chunk-7Y5N34HX.js.map} +1 -1
  83. package/dist/cli-bundle/chunks/{chunk-MWMVPCIE.js → chunk-AGAVEDIE.js} +7 -7
  84. package/dist/cli-bundle/chunks/{chunk-22KBU3MW.js → chunk-AJUON7E6.js} +3 -3
  85. package/dist/cli-bundle/chunks/{chunk-ZJ262CED.js → chunk-ARKHKYYS.js} +13 -21
  86. package/dist/cli-bundle/chunks/{chunk-ZJ262CED.js.map → chunk-ARKHKYYS.js.map} +1 -1
  87. package/dist/cli-bundle/chunks/{chunk-46CUF5L6.js → chunk-C5ACVMOI.js} +99 -51
  88. package/dist/cli-bundle/chunks/chunk-C5ACVMOI.js.map +7 -0
  89. package/dist/cli-bundle/chunks/{chunk-LPSSSDJR.js → chunk-CJQM7O7R.js} +16 -20
  90. package/dist/cli-bundle/chunks/{chunk-LPSSSDJR.js.map → chunk-CJQM7O7R.js.map} +1 -1
  91. package/dist/cli-bundle/chunks/{chunk-GBAX2ZAQ.js → chunk-D2DCTFTL.js} +10 -12
  92. package/dist/cli-bundle/chunks/{chunk-GBAX2ZAQ.js.map → chunk-D2DCTFTL.js.map} +1 -1
  93. package/dist/cli-bundle/chunks/{chunk-XHET7YUZ.js → chunk-DDDWVPID.js} +8 -10
  94. package/dist/cli-bundle/chunks/{chunk-XHET7YUZ.js.map → chunk-DDDWVPID.js.map} +1 -1
  95. package/dist/cli-bundle/chunks/{chunk-HIHMT6WS.js → chunk-DG6BSXZ7.js} +5 -5
  96. package/dist/cli-bundle/chunks/{chunk-HIHMT6WS.js.map → chunk-DG6BSXZ7.js.map} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-IWVU4C2F.js → chunk-DR2V5OIV.js} +3 -3
  98. package/dist/cli-bundle/chunks/{chunk-ZGK4L4JM.js → chunk-E3LWJUGF.js} +4 -6
  99. package/dist/cli-bundle/chunks/{chunk-ZGK4L4JM.js.map → chunk-E3LWJUGF.js.map} +1 -1
  100. package/dist/cli-bundle/chunks/{chunk-XUC7PI2H.js → chunk-E3YQFSFE.js} +6 -10
  101. package/dist/cli-bundle/chunks/{chunk-XUC7PI2H.js.map → chunk-E3YQFSFE.js.map} +1 -1
  102. package/dist/cli-bundle/chunks/{chunk-XG625QP4.js → chunk-EDO7VXSO.js} +2 -2
  103. package/dist/cli-bundle/chunks/{chunk-MA4SM3QZ.js → chunk-EIUBK2LT.js} +12 -18
  104. package/dist/cli-bundle/chunks/{chunk-MA4SM3QZ.js.map → chunk-EIUBK2LT.js.map} +1 -1
  105. package/dist/cli-bundle/chunks/{chunk-YN7Y6DQZ.js → chunk-EMXPI36L.js} +14 -20
  106. package/dist/cli-bundle/chunks/{chunk-YN7Y6DQZ.js.map → chunk-EMXPI36L.js.map} +1 -1
  107. package/dist/cli-bundle/chunks/{chunk-MLIYFOE7.js → chunk-EOUVR7JN.js} +12 -8
  108. package/dist/cli-bundle/chunks/chunk-EOUVR7JN.js.map +1 -0
  109. package/dist/cli-bundle/chunks/{chunk-Y4M7CPQP.js → chunk-EVEPHNXJ.js} +4 -4
  110. package/dist/cli-bundle/chunks/{chunk-M7JNBQAD.js → chunk-F6MT7KKE.js} +4 -6
  111. package/dist/cli-bundle/chunks/{chunk-M7JNBQAD.js.map → chunk-F6MT7KKE.js.map} +1 -1
  112. package/dist/cli-bundle/chunks/{chunk-W3DSJQIO.js → chunk-F6YC2A6X.js} +7 -11
  113. package/dist/cli-bundle/chunks/{chunk-W3DSJQIO.js.map → chunk-F6YC2A6X.js.map} +1 -1
  114. package/dist/cli-bundle/chunks/chunk-FILL6BB2.js +5514 -0
  115. package/dist/cli-bundle/chunks/chunk-FILL6BB2.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-JDDLOQAE.js → chunk-FN6SB4HU.js} +2 -2
  117. package/dist/cli-bundle/chunks/chunk-GH73UOSJ.js +5359 -0
  118. package/dist/cli-bundle/chunks/chunk-GH73UOSJ.js.map +1 -0
  119. package/dist/cli-bundle/chunks/{chunk-EKFNL33R.js → chunk-GLS6VMWI.js} +37 -16
  120. package/dist/cli-bundle/chunks/chunk-GLS6VMWI.js.map +1 -0
  121. package/dist/cli-bundle/chunks/{chunk-HOVCGJSD.js → chunk-GPIDUMMN.js} +9 -11
  122. package/dist/cli-bundle/chunks/{chunk-HOVCGJSD.js.map → chunk-GPIDUMMN.js.map} +1 -1
  123. package/dist/cli-bundle/chunks/{chunk-SQOIV3OQ.js → chunk-GTM5HQL4.js} +11 -15
  124. package/dist/cli-bundle/chunks/{chunk-SQOIV3OQ.js.map → chunk-GTM5HQL4.js.map} +1 -1
  125. package/dist/cli-bundle/chunks/{chunk-24YG75HI.js → chunk-H2SMKL2N.js} +8 -8
  126. package/dist/cli-bundle/chunks/{chunk-QLMX7SRD.js → chunk-HHEWQXPD.js} +6 -6
  127. package/dist/cli-bundle/chunks/chunk-HHEWQXPD.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-EGY6JBQ3.js → chunk-HX6QXV5P.js} +2 -2
  129. package/dist/cli-bundle/chunks/{chunk-4ZBE5GUN.js → chunk-I74FMIWA.js} +10 -16
  130. package/dist/cli-bundle/chunks/{chunk-4ZBE5GUN.js.map → chunk-I74FMIWA.js.map} +1 -1
  131. package/dist/cli-bundle/chunks/{chunk-3N6RRO2Q.js → chunk-IDIBF4E2.js} +20 -24
  132. package/dist/cli-bundle/chunks/{chunk-3N6RRO2Q.js.map → chunk-IDIBF4E2.js.map} +1 -1
  133. package/dist/cli-bundle/chunks/{chunk-6QBJLYBP.js → chunk-II7R6KD4.js} +8 -7
  134. package/dist/cli-bundle/chunks/{chunk-6QBJLYBP.js.map → chunk-II7R6KD4.js.map} +1 -1
  135. package/dist/cli-bundle/chunks/chunk-J2VGADNG.js +10320 -0
  136. package/dist/cli-bundle/chunks/chunk-J2VGADNG.js.map +1 -0
  137. package/dist/cli-bundle/chunks/{chunk-FT3QTERD.js → chunk-J7BOLHAV.js} +5 -7
  138. package/dist/cli-bundle/chunks/{chunk-FT3QTERD.js.map → chunk-J7BOLHAV.js.map} +1 -1
  139. package/dist/cli-bundle/chunks/{chunk-GANUTS7W.js → chunk-KTGJ2CBU.js} +4 -6
  140. package/dist/cli-bundle/chunks/{chunk-GANUTS7W.js.map → chunk-KTGJ2CBU.js.map} +1 -1
  141. package/dist/cli-bundle/chunks/{chunk-LK6XLOGP.js → chunk-LCFJ7XAM.js} +22 -2
  142. package/dist/cli-bundle/chunks/{chunk-LK6XLOGP.js.map → chunk-LCFJ7XAM.js.map} +3 -3
  143. package/dist/cli-bundle/chunks/{chunk-3UJRFJ5R.js → chunk-LZQU6XJG.js} +28 -34
  144. package/dist/cli-bundle/chunks/{chunk-3UJRFJ5R.js.map → chunk-LZQU6XJG.js.map} +1 -1
  145. package/dist/cli-bundle/chunks/{chunk-L5PSPMZ4.js → chunk-M62RO3XK.js} +10 -14
  146. package/dist/cli-bundle/chunks/{chunk-L5PSPMZ4.js.map → chunk-M62RO3XK.js.map} +1 -1
  147. package/dist/cli-bundle/chunks/{chunk-CFB33L7W.js → chunk-MCEUKJKW.js} +12 -14
  148. package/dist/cli-bundle/chunks/{chunk-CFB33L7W.js.map → chunk-MCEUKJKW.js.map} +1 -1
  149. package/dist/cli-bundle/chunks/{chunk-TKD5VCTD.js → chunk-MHNMCDWR.js} +343 -195
  150. package/dist/cli-bundle/chunks/chunk-MHNMCDWR.js.map +1 -0
  151. package/dist/cli-bundle/chunks/{chunk-O6AWCQRQ.js → chunk-MRFWUSVA.js} +4 -6
  152. package/dist/cli-bundle/chunks/{chunk-O6AWCQRQ.js.map → chunk-MRFWUSVA.js.map} +1 -1
  153. package/dist/cli-bundle/chunks/{chunk-SQYJ4HF2.js → chunk-N6ZHDLUY.js} +6 -8
  154. package/dist/cli-bundle/chunks/{chunk-SQYJ4HF2.js.map → chunk-N6ZHDLUY.js.map} +1 -1
  155. package/dist/cli-bundle/chunks/{chunk-ZWBEPGD7.js → chunk-NWWL22C7.js} +7 -9
  156. package/dist/cli-bundle/chunks/{chunk-ZWBEPGD7.js.map → chunk-NWWL22C7.js.map} +1 -1
  157. package/dist/cli-bundle/chunks/{chunk-Y46GD4IX.js → chunk-P3MJJW7P.js} +2 -2
  158. package/dist/cli-bundle/chunks/{chunk-MVYWGY2A.js → chunk-PDXJXEZJ.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-SGMFPXKR.js → chunk-Q64AYQYW.js} +10 -12
  160. package/dist/cli-bundle/chunks/{chunk-SGMFPXKR.js.map → chunk-Q64AYQYW.js.map} +1 -1
  161. package/dist/cli-bundle/chunks/{chunk-EBRZZ54H.js → chunk-QDABF2RB.js} +26 -34
  162. package/dist/cli-bundle/chunks/{chunk-EBRZZ54H.js.map → chunk-QDABF2RB.js.map} +1 -1
  163. package/dist/cli-bundle/chunks/{chunk-TULGS6X6.js → chunk-QFBSP3NI.js} +529 -46
  164. package/dist/cli-bundle/chunks/chunk-QFBSP3NI.js.map +1 -0
  165. package/dist/cli-bundle/chunks/{chunk-GDDAGPWJ.js → chunk-RB3KLPAH.js} +10 -14
  166. package/dist/cli-bundle/chunks/{chunk-GDDAGPWJ.js.map → chunk-RB3KLPAH.js.map} +1 -1
  167. package/dist/cli-bundle/chunks/{chunk-3VHSI5FL.js → chunk-RY7PTTUB.js} +94 -53
  168. package/dist/cli-bundle/chunks/chunk-RY7PTTUB.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{chunk-COSPOP7H.js → chunk-S547WBYG.js} +343 -195
  170. package/dist/cli-bundle/chunks/chunk-S547WBYG.js.map +7 -0
  171. package/dist/cli-bundle/chunks/{chunk-NZEHECMW.js → chunk-S5BNGFN5.js} +24 -32
  172. package/dist/cli-bundle/chunks/{chunk-NZEHECMW.js.map → chunk-S5BNGFN5.js.map} +1 -1
  173. package/dist/cli-bundle/chunks/{chunk-MVSP7WGJ.js → chunk-S6VC2A2K.js} +8 -12
  174. package/dist/cli-bundle/chunks/{chunk-MVSP7WGJ.js.map → chunk-S6VC2A2K.js.map} +1 -1
  175. package/dist/cli-bundle/chunks/{chunk-45FYNUFJ.js → chunk-SIM5JDON.js} +6 -6
  176. package/dist/cli-bundle/chunks/{chunk-45FYNUFJ.js.map → chunk-SIM5JDON.js.map} +1 -1
  177. package/dist/cli-bundle/chunks/{chunk-VPIM42PC.js → chunk-SY75LYXR.js} +11 -7
  178. package/dist/cli-bundle/chunks/chunk-SY75LYXR.js.map +7 -0
  179. package/dist/cli-bundle/chunks/{chunk-K46RF36U.js → chunk-TEISGNSH.js} +7 -7
  180. package/dist/cli-bundle/chunks/chunk-TEISGNSH.js.map +1 -0
  181. package/dist/cli-bundle/chunks/{chunk-AGHMOTGM.js → chunk-TEKZOS7M.js} +2 -2
  182. package/dist/cli-bundle/chunks/{chunk-W572BIEB.js → chunk-TGUK6XN6.js} +14 -18
  183. package/dist/cli-bundle/chunks/{chunk-W572BIEB.js.map → chunk-TGUK6XN6.js.map} +1 -1
  184. package/dist/cli-bundle/chunks/{chunk-E42XTBSP.js → chunk-TNC6MZUD.js} +8 -12
  185. package/dist/cli-bundle/chunks/{chunk-E42XTBSP.js.map → chunk-TNC6MZUD.js.map} +1 -1
  186. package/dist/cli-bundle/chunks/chunk-TZLYO4PP.js +10498 -0
  187. package/dist/cli-bundle/chunks/chunk-TZLYO4PP.js.map +7 -0
  188. package/dist/cli-bundle/chunks/{chunk-57NWPFF2.js → chunk-UO7XAZK6.js} +17 -4
  189. package/dist/cli-bundle/chunks/chunk-UO7XAZK6.js.map +1 -0
  190. package/dist/cli-bundle/chunks/{chunk-JVH7QBVV.js → chunk-V5ZWKJNY.js} +2 -2
  191. package/dist/cli-bundle/chunks/{chunk-I36Y7PCE.js → chunk-VGO73OCK.js} +6 -6
  192. package/dist/cli-bundle/chunks/{chunk-I36Y7PCE.js.map → chunk-VGO73OCK.js.map} +1 -1
  193. package/dist/cli-bundle/chunks/{chunk-KUOOJR35.js → chunk-VLEA2UTQ.js} +2 -2
  194. package/dist/cli-bundle/chunks/{chunk-RCQZK2GO.js → chunk-W5HXHC7C.js} +7 -9
  195. package/dist/cli-bundle/chunks/{chunk-RCQZK2GO.js.map → chunk-W5HXHC7C.js.map} +1 -1
  196. package/dist/cli-bundle/chunks/{chunk-MUH7A3FD.js → chunk-WCWVEXGA.js} +2 -2
  197. package/dist/cli-bundle/chunks/chunk-X47MKQXU.js +6690 -0
  198. package/dist/cli-bundle/chunks/chunk-X47MKQXU.js.map +7 -0
  199. package/dist/cli-bundle/chunks/{chunk-NB7RLQFW.js → chunk-XBX5CBRQ.js} +5 -7
  200. package/dist/cli-bundle/chunks/{chunk-NB7RLQFW.js.map → chunk-XBX5CBRQ.js.map} +1 -1
  201. package/dist/cli-bundle/chunks/{chunk-SCUR7K7N.js → chunk-XC3X7BQR.js} +541 -44
  202. package/dist/cli-bundle/chunks/chunk-XC3X7BQR.js.map +7 -0
  203. package/dist/cli-bundle/chunks/{chunk-CRVYGJUI.js → chunk-XHCVAZGM.js} +13 -17
  204. package/dist/cli-bundle/chunks/{chunk-CRVYGJUI.js.map → chunk-XHCVAZGM.js.map} +1 -1
  205. package/dist/cli-bundle/chunks/{chunk-XB7KFVFI.js → chunk-XPMXPR7K.js} +7 -9
  206. package/dist/cli-bundle/chunks/{chunk-XB7KFVFI.js.map → chunk-XPMXPR7K.js.map} +1 -1
  207. package/dist/cli-bundle/chunks/{chunk-4CJFCTLM.js → chunk-XS2TMNXR.js} +6 -8
  208. package/dist/cli-bundle/chunks/{chunk-4CJFCTLM.js.map → chunk-XS2TMNXR.js.map} +1 -1
  209. package/dist/cli-bundle/chunks/{chunk-HFDADVJZ.js → chunk-XXIYUTLK.js} +10 -14
  210. package/dist/cli-bundle/chunks/{chunk-HFDADVJZ.js.map → chunk-XXIYUTLK.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{chunk-EOKXK3R3.js → chunk-XZWL7VNE.js} +1220 -398
  212. package/dist/cli-bundle/chunks/chunk-XZWL7VNE.js.map +1 -0
  213. package/dist/cli-bundle/chunks/chunk-Y5IKRUEM.js +6624 -0
  214. package/dist/cli-bundle/chunks/chunk-Y5IKRUEM.js.map +1 -0
  215. package/dist/cli-bundle/chunks/{chunk-6LLVNJXT.js → chunk-Y7KYVCZM.js} +12 -18
  216. package/dist/cli-bundle/chunks/{chunk-6LLVNJXT.js.map → chunk-Y7KYVCZM.js.map} +1 -1
  217. package/dist/cli-bundle/chunks/{chunk-VIIUS6N6.js → chunk-YCVWWIKY.js} +16 -14
  218. package/dist/cli-bundle/chunks/chunk-YCVWWIKY.js.map +7 -0
  219. package/dist/cli-bundle/chunks/{chunk-CFNGIXZP.js → chunk-YH5NBDFA.js} +22 -26
  220. package/dist/cli-bundle/chunks/{chunk-CFNGIXZP.js.map → chunk-YH5NBDFA.js.map} +1 -1
  221. package/dist/cli-bundle/chunks/chunk-YNCFP5AR.js +5509 -0
  222. package/dist/cli-bundle/chunks/chunk-YNCFP5AR.js.map +7 -0
  223. package/dist/cli-bundle/chunks/{chunk-NC33K5ZS.js → chunk-YPD7SQ5P.js} +7 -6
  224. package/dist/cli-bundle/chunks/{chunk-NC33K5ZS.js.map → chunk-YPD7SQ5P.js.map} +2 -2
  225. package/dist/cli-bundle/chunks/{chunk-NGXQ3PFT.js → chunk-YPMZMKN7.js} +2 -2
  226. package/dist/cli-bundle/chunks/{chunk-KGFUY7WN.js → chunk-YTD5GICJ.js} +4 -4
  227. package/dist/cli-bundle/chunks/{chunk-W6DYWXPQ.js → chunk-ZNEG2UDO.js} +261 -34
  228. package/dist/cli-bundle/chunks/{chunk-W6DYWXPQ.js.map → chunk-ZNEG2UDO.js.map} +4 -4
  229. package/dist/cli-bundle/chunks/{chunk-7DT4WSH2.js → chunk-ZO7CLOY2.js} +3 -3
  230. package/dist/cli-bundle/chunks/{close-2SSSHHUZ.js → close-3YYQ5OG2.js} +5 -9
  231. package/dist/cli-bundle/chunks/close-Z3Q4U7TS.js +12 -0
  232. package/dist/cli-bundle/chunks/close-many-3L2RXH3M.js +22 -0
  233. package/dist/cli-bundle/chunks/close-many-D366FTIG.js +26 -0
  234. package/dist/cli-bundle/chunks/comments-54XDJNFE.js +17 -0
  235. package/dist/cli-bundle/chunks/comments-HGHC2PN6.js +13 -0
  236. package/dist/cli-bundle/chunks/{copy-32ROBIDL.js → copy-44RT5GDW.js} +4 -8
  237. package/dist/cli-bundle/chunks/copy-UGMUGHZA.js +9 -0
  238. package/dist/cli-bundle/chunks/{create-E77SDCUP.js → create-4GWJWPXG.js} +9 -14
  239. package/dist/cli-bundle/chunks/create-AZXCUYKP.js +25 -0
  240. package/dist/cli-bundle/chunks/delete-Y6SXIQ4X.js +10 -0
  241. package/dist/cli-bundle/chunks/{delete-RA5KTCLB.js → delete-YQ2VPXNF.js} +4 -8
  242. package/dist/cli-bundle/chunks/{deps-32SU7HO5.js → deps-BU5EBJDU.js} +4 -8
  243. package/dist/cli-bundle/chunks/deps-FMANWFRP.js +13 -0
  244. package/dist/cli-bundle/chunks/{docs-RRUPT7O2.js → docs-OQBSJNIA.js} +6 -10
  245. package/dist/cli-bundle/chunks/docs-VNPBZXEL.js +14 -0
  246. package/dist/cli-bundle/chunks/files-72HZEBOE.js +18 -0
  247. package/dist/cli-bundle/chunks/{files-PYKR2UUG.js → files-HTSB2KJG.js} +6 -10
  248. package/dist/cli-bundle/chunks/{contracts-NYPEW2G4.js → focus-FOG4ALC2.js} +7 -9
  249. package/dist/cli-bundle/chunks/focus-SUTMKXGX.js +10 -0
  250. package/dist/cli-bundle/chunks/{history-compact-3MNXLKAT.js → history-compact-M6IFAMBP.js} +9 -13
  251. package/dist/cli-bundle/chunks/history-compact-NEXRPP2O.js +21 -0
  252. package/dist/cli-bundle/chunks/{history-redact-P6DYF55G.js → history-redact-NQX3OGZP.js} +7 -11
  253. package/dist/cli-bundle/chunks/history-redact-WQJBZ3PX.js +17 -0
  254. package/dist/cli-bundle/chunks/history-repair-CBHMHAJO.js +19 -0
  255. package/dist/cli-bundle/chunks/{history-repair-ZJQFMWPD.js → history-repair-NHOJG7WO.js} +9 -13
  256. package/dist/cli-bundle/chunks/learnings-M64NTSOR.js +13 -0
  257. package/dist/cli-bundle/chunks/{append-BGML6VLD.js → learnings-T63JGKKN.js} +9 -11
  258. package/dist/cli-bundle/chunks/notes-73WE2UV2.js +13 -0
  259. package/dist/cli-bundle/chunks/notes-U7L6HQQ2.js +17 -0
  260. package/dist/cli-bundle/chunks/plan-OSCNYFGC.js +24 -0
  261. package/dist/cli-bundle/chunks/{plan-CHVE7PBR.js → plan-TN537L24.js} +10 -15
  262. package/dist/cli-bundle/chunks/{profile-ZXGSKBJD.js → profile-MHAMXMHQ.js} +9 -13
  263. package/dist/cli-bundle/chunks/{profile-LD23PSI6.js → profile-TIGLAKJ7.js} +9 -13
  264. package/dist/cli-bundle/chunks/{register-list-query-OEYQHFXO.js → register-list-query-OHXD7G5N.js} +41 -33
  265. package/dist/cli-bundle/chunks/register-list-query-OHXD7G5N.js.map +7 -0
  266. package/dist/cli-bundle/chunks/{register-list-query-B42JCCOI.js → register-list-query-ZCRABAPN.js} +42 -34
  267. package/dist/cli-bundle/chunks/register-list-query-ZCRABAPN.js.map +1 -0
  268. package/dist/cli-bundle/chunks/{register-mutation-IAEST26S.js → register-mutation-P3G4XP6Q.js} +36 -41
  269. package/dist/cli-bundle/chunks/{register-mutation-IAEST26S.js.map → register-mutation-P3G4XP6Q.js.map} +1 -1
  270. package/dist/cli-bundle/chunks/{register-mutation-3QXIHCQG.js → register-mutation-XX4H56PE.js} +34 -39
  271. package/dist/cli-bundle/chunks/{register-mutation-3QXIHCQG.js.map → register-mutation-XX4H56PE.js.map} +1 -1
  272. package/dist/cli-bundle/chunks/{chunk-5BMM6XQY.js → register-operations-V6PIYEDU.js} +79 -46
  273. package/dist/cli-bundle/chunks/register-operations-V6PIYEDU.js.map +1 -0
  274. package/dist/cli-bundle/chunks/{chunk-Z3U3U5KD.js → register-operations-V6VKTG54.js} +78 -45
  275. package/dist/cli-bundle/chunks/register-operations-V6VKTG54.js.map +7 -0
  276. package/dist/cli-bundle/chunks/{register-setup-3ZVVX2VN.js → register-setup-6RVAWT6W.js} +129 -29
  277. package/dist/cli-bundle/chunks/register-setup-6RVAWT6W.js.map +7 -0
  278. package/dist/cli-bundle/chunks/{register-setup-Q6KFNIOZ.js → register-setup-6YVUSQYD.js} +130 -30
  279. package/dist/cli-bundle/chunks/register-setup-6YVUSQYD.js.map +1 -0
  280. package/dist/cli-bundle/chunks/{restore-5RQHAPMA.js → restore-HC3YSWF7.js} +7 -11
  281. package/dist/cli-bundle/chunks/restore-LFAMMRYZ.js +15 -0
  282. package/dist/cli-bundle/chunks/{schema-HBORFC6B.js → schema-DAGSYO6E.js} +6 -10
  283. package/dist/cli-bundle/chunks/{schema-245WW4G2.js → schema-UBXJCQAC.js} +6 -10
  284. package/dist/cli-bundle/chunks/update-CJGG5WMV.js +21 -0
  285. package/dist/cli-bundle/chunks/update-LKD64AFP.js +25 -0
  286. package/dist/cli-bundle/chunks/update-many-G4SM7BHC.js +31 -0
  287. package/dist/cli-bundle/chunks/update-many-VLIV3D7R.js +35 -0
  288. package/dist/cli-bundle/main.js +29 -31
  289. package/dist/cli-bundle/main.js.map +2 -2
  290. package/dist/cli-bundle/sdk-runtime.js +129 -107
  291. package/dist/cli-bundle/sdk-testing.js +7 -8
  292. package/dist/cli-bundle/sdk.js +122 -117
  293. package/dist/cli-bundle/sdk.js.map +2 -2
  294. package/dist/core/history/drift-scan.js +3 -8
  295. package/dist/core/history/drift-scan.js.map +1 -1
  296. package/dist/core/output/mutation-projection.js +11 -5
  297. package/dist/core/output/mutation-projection.js.map +1 -1
  298. package/dist/core/search/cache.js +3 -3
  299. package/dist/core/search/cache.js.map +1 -1
  300. package/dist/core/search/semantic-defaults.d.ts +2 -0
  301. package/dist/core/search/semantic-defaults.js +11 -4
  302. package/dist/core/search/semantic-defaults.js.map +1 -1
  303. package/dist/core/search/vector-stores.d.ts +1 -1
  304. package/dist/core/search/vector-stores.js +33 -7
  305. package/dist/core/search/vector-stores.js.map +1 -1
  306. package/dist/mcp/server.d.ts +1 -1
  307. package/dist/sdk/cli-contracts/flag-contracts.js +7 -7
  308. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  309. package/dist/sdk/cli-contracts/tool-schema.js +9 -7
  310. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  311. package/dist/sdk/index.d.ts +1 -1
  312. package/dist/sdk/index.js +3 -3
  313. package/dist/sdk/index.js.map +1 -1
  314. package/dist/sdk/runtime.d.ts +151 -8
  315. package/dist/sdk/runtime.js +255 -14
  316. package/dist/sdk/runtime.js.map +1 -1
  317. package/dist/sdk/start-task-status.d.ts +13 -0
  318. package/dist/sdk/start-task-status.js +19 -0
  319. package/dist/sdk/start-task-status.js.map +1 -0
  320. package/docs/COMMANDS.md +10 -1
  321. package/docs/SDK.md +35 -0
  322. package/docs/TESTING.md +3 -0
  323. package/package.json +1 -1
  324. package/dist/cli-bundle/chunks/activity-WJCGCYPU.js +0 -18
  325. package/dist/cli-bundle/chunks/activity-Z6QUAUSG.js +0 -22
  326. package/dist/cli-bundle/chunks/aggregate-BDM6EIAR.js +0 -25
  327. package/dist/cli-bundle/chunks/aggregate-VQ2DHU3S.js +0 -21
  328. package/dist/cli-bundle/chunks/append-RKJYPU74.js +0 -15
  329. package/dist/cli-bundle/chunks/chunk-2XG4IZON.js +0 -218
  330. package/dist/cli-bundle/chunks/chunk-2XG4IZON.js.map +0 -7
  331. package/dist/cli-bundle/chunks/chunk-37E72CNS.js +0 -217
  332. package/dist/cli-bundle/chunks/chunk-37E72CNS.js.map +0 -1
  333. package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js +0 -228
  334. package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js.map +0 -1
  335. package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js +0 -2330
  336. package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js.map +0 -7
  337. package/dist/cli-bundle/chunks/chunk-3VHSI5FL.js.map +0 -1
  338. package/dist/cli-bundle/chunks/chunk-425E4QL5.js +0 -278
  339. package/dist/cli-bundle/chunks/chunk-425E4QL5.js.map +0 -7
  340. package/dist/cli-bundle/chunks/chunk-46CUF5L6.js.map +0 -7
  341. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +0 -87
  342. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +0 -7
  343. package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js +0 -249
  344. package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js.map +0 -7
  345. package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js +0 -819
  346. package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js.map +0 -1
  347. package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js +0 -279
  348. package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js.map +0 -1
  349. package/dist/cli-bundle/chunks/chunk-57NWPFF2.js.map +0 -1
  350. package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js +0 -268
  351. package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js.map +0 -1
  352. package/dist/cli-bundle/chunks/chunk-5BMM6XQY.js.map +0 -1
  353. package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js +0 -1868
  354. package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js.map +0 -7
  355. package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js +0 -1749
  356. package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js.map +0 -7
  357. package/dist/cli-bundle/chunks/chunk-64YKRTSV.js +0 -1961
  358. package/dist/cli-bundle/chunks/chunk-64YKRTSV.js.map +0 -1
  359. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js +0 -23
  360. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js.map +0 -7
  361. package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js +0 -421
  362. package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js.map +0 -1
  363. package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js +0 -1985
  364. package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js.map +0 -7
  365. package/dist/cli-bundle/chunks/chunk-CL36D4PC.js.map +0 -7
  366. package/dist/cli-bundle/chunks/chunk-COSPOP7H.js.map +0 -7
  367. package/dist/cli-bundle/chunks/chunk-COWTDV6B.js +0 -3461
  368. package/dist/cli-bundle/chunks/chunk-COWTDV6B.js.map +0 -7
  369. package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js +0 -1858
  370. package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js.map +0 -1
  371. package/dist/cli-bundle/chunks/chunk-DMRNBQOI.js.map +0 -1
  372. package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js +0 -1932
  373. package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js.map +0 -1
  374. package/dist/cli-bundle/chunks/chunk-EGAP5OWD.js.map +0 -1
  375. package/dist/cli-bundle/chunks/chunk-EKFNL33R.js.map +0 -1
  376. package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js +0 -1704
  377. package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js.map +0 -1
  378. package/dist/cli-bundle/chunks/chunk-EOKXK3R3.js.map +0 -1
  379. package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js +0 -231
  380. package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js.map +0 -7
  381. package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js +0 -2090
  382. package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js.map +0 -1
  383. package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js +0 -1570
  384. package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js.map +0 -1
  385. package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js +0 -239
  386. package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js.map +0 -1
  387. package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js +0 -530
  388. package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js.map +0 -7
  389. package/dist/cli-bundle/chunks/chunk-GZRDYONU.js +0 -1005
  390. package/dist/cli-bundle/chunks/chunk-GZRDYONU.js.map +0 -7
  391. package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js +0 -277
  392. package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js.map +0 -7
  393. package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js +0 -309
  394. package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js.map +0 -7
  395. package/dist/cli-bundle/chunks/chunk-JINYH2DB.js +0 -371
  396. package/dist/cli-bundle/chunks/chunk-JINYH2DB.js.map +0 -7
  397. package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js +0 -2257
  398. package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js.map +0 -7
  399. package/dist/cli-bundle/chunks/chunk-K46RF36U.js.map +0 -1
  400. package/dist/cli-bundle/chunks/chunk-KERMZVY5.js +0 -371
  401. package/dist/cli-bundle/chunks/chunk-KERMZVY5.js.map +0 -7
  402. package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js +0 -76
  403. package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js.map +0 -1
  404. package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js +0 -140
  405. package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js.map +0 -1
  406. package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js +0 -1601
  407. package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js.map +0 -1
  408. package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js +0 -1031
  409. package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js.map +0 -1
  410. package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js +0 -995
  411. package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js.map +0 -1
  412. package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js +0 -296
  413. package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js.map +0 -1
  414. package/dist/cli-bundle/chunks/chunk-MLIYFOE7.js.map +0 -1
  415. package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js +0 -2043
  416. package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js.map +0 -7
  417. package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js +0 -2033
  418. package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js.map +0 -1
  419. package/dist/cli-bundle/chunks/chunk-N745W3B3.js +0 -1604
  420. package/dist/cli-bundle/chunks/chunk-N745W3B3.js.map +0 -7
  421. package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js +0 -1615
  422. package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js.map +0 -7
  423. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js +0 -20
  424. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js.map +0 -1
  425. package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js +0 -143
  426. package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js.map +0 -7
  427. package/dist/cli-bundle/chunks/chunk-QLMX7SRD.js.map +0 -7
  428. package/dist/cli-bundle/chunks/chunk-QX6HM775.js +0 -398
  429. package/dist/cli-bundle/chunks/chunk-QX6HM775.js.map +0 -7
  430. package/dist/cli-bundle/chunks/chunk-QZ342C63.js +0 -220
  431. package/dist/cli-bundle/chunks/chunk-QZ342C63.js.map +0 -7
  432. package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js +0 -368
  433. package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js.map +0 -1
  434. package/dist/cli-bundle/chunks/chunk-RFNYTESG.js +0 -520
  435. package/dist/cli-bundle/chunks/chunk-RFNYTESG.js.map +0 -1
  436. package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js +0 -79
  437. package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js.map +0 -7
  438. package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js +0 -282
  439. package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js.map +0 -7
  440. package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js +0 -274
  441. package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js.map +0 -1
  442. package/dist/cli-bundle/chunks/chunk-SCUR7K7N.js.map +0 -7
  443. package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js +0 -1977
  444. package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js +0 -1041
  446. package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-T42JWV3F.js +0 -822
  448. package/dist/cli-bundle/chunks/chunk-T42JWV3F.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-TKD5VCTD.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-TULGS6X6.js.map +0 -1
  451. package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js +0 -2306
  452. package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-VIIUS6N6.js.map +0 -7
  454. package/dist/cli-bundle/chunks/chunk-VPIM42PC.js.map +0 -7
  455. package/dist/cli-bundle/chunks/chunk-VQRSPVME.js +0 -368
  456. package/dist/cli-bundle/chunks/chunk-VQRSPVME.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +0 -84
  458. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +0 -1
  459. package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js +0 -3423
  460. package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-WLSM645P.js +0 -2247
  462. package/dist/cli-bundle/chunks/chunk-WLSM645P.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-WRTENIX3.js +0 -215
  464. package/dist/cli-bundle/chunks/chunk-WRTENIX3.js.map +0 -1
  465. package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js +0 -388
  466. package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js.map +0 -1
  467. package/dist/cli-bundle/chunks/chunk-XC5BURG2.js +0 -306
  468. package/dist/cli-bundle/chunks/chunk-XC5BURG2.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js +0 -424
  470. package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js.map +0 -7
  471. package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js +0 -2128
  472. package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js.map +0 -7
  473. package/dist/cli-bundle/chunks/chunk-Z3U3U5KD.js.map +0 -7
  474. package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js +0 -299
  475. package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js.map +0 -7
  476. package/dist/cli-bundle/chunks/chunk-ZSUS2OD3.js.map +0 -7
  477. package/dist/cli-bundle/chunks/claim-RFS7BROJ.js +0 -19
  478. package/dist/cli-bundle/chunks/claim-XP5AWZ5H.js +0 -23
  479. package/dist/cli-bundle/chunks/close-GEANHQ2J.js +0 -16
  480. package/dist/cli-bundle/chunks/close-many-CMZW7ITN.js +0 -31
  481. package/dist/cli-bundle/chunks/close-many-ZFDIG6M7.js +0 -27
  482. package/dist/cli-bundle/chunks/comments-MFSYVNNU.js +0 -21
  483. package/dist/cli-bundle/chunks/comments-XUBPXDYX.js +0 -17
  484. package/dist/cli-bundle/chunks/config-D7XQMONX.js +0 -18
  485. package/dist/cli-bundle/chunks/config-T4FHBSYN.js +0 -22
  486. package/dist/cli-bundle/chunks/context-DIU275XI.js +0 -48
  487. package/dist/cli-bundle/chunks/context-JCOYB4LZ.js +0 -44
  488. package/dist/cli-bundle/chunks/contracts-BVO7CSLK.js +0 -12
  489. package/dist/cli-bundle/chunks/copy-NAGLGMHZ.js +0 -13
  490. package/dist/cli-bundle/chunks/create-4V7SWNBB.js +0 -30
  491. package/dist/cli-bundle/chunks/delete-NQI5OSKN.js +0 -14
  492. package/dist/cli-bundle/chunks/deps-T7SCWXEX.js +0 -17
  493. package/dist/cli-bundle/chunks/docs-WL2IWGWV.js +0 -18
  494. package/dist/cli-bundle/chunks/eval-NF2J5SHR.js +0 -23
  495. package/dist/cli-bundle/chunks/eval-SKDT3MZU.js +0 -27
  496. package/dist/cli-bundle/chunks/extension-LAXKCAYE.js +0 -42
  497. package/dist/cli-bundle/chunks/extension-ZISPBRBC.js +0 -38
  498. package/dist/cli-bundle/chunks/files-EWRQHGIS.js +0 -22
  499. package/dist/cli-bundle/chunks/focus-4T7TM4MT.js +0 -18
  500. package/dist/cli-bundle/chunks/focus-L3YUASOD.js +0 -14
  501. package/dist/cli-bundle/chunks/gc-2PCTYYRI.js +0 -12
  502. package/dist/cli-bundle/chunks/get-7DMITJ3G.js +0 -23
  503. package/dist/cli-bundle/chunks/get-VKQXCXLL.js +0 -19
  504. package/dist/cli-bundle/chunks/health-CVSTAR2F.js +0 -31
  505. package/dist/cli-bundle/chunks/health-TV3GKTFN.js +0 -35
  506. package/dist/cli-bundle/chunks/history-D4JUX5XV.js +0 -20
  507. package/dist/cli-bundle/chunks/history-D4JUX5XV.js.map +0 -7
  508. package/dist/cli-bundle/chunks/history-LQ2UWZTE.js +0 -24
  509. package/dist/cli-bundle/chunks/history-LQ2UWZTE.js.map +0 -1
  510. package/dist/cli-bundle/chunks/history-compact-3MNXLKAT.js.map +0 -1
  511. package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js +0 -25
  512. package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js.map +0 -7
  513. package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js +0 -21
  514. package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js.map +0 -7
  515. package/dist/cli-bundle/chunks/history-redact-P6DYF55G.js.map +0 -1
  516. package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js +0 -23
  517. package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js.map +0 -7
  518. package/dist/cli-bundle/chunks/history-repair-ZJQFMWPD.js.map +0 -1
  519. package/dist/cli-bundle/chunks/init-C3LJPWQZ.js +0 -30
  520. package/dist/cli-bundle/chunks/init-C3LJPWQZ.js.map +0 -1
  521. package/dist/cli-bundle/chunks/init-J3DPGWQI.js +0 -26
  522. package/dist/cli-bundle/chunks/init-J3DPGWQI.js.map +0 -7
  523. package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js +0 -21
  524. package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js.map +0 -1
  525. package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js +0 -17
  526. package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js.map +0 -7
  527. package/dist/cli-bundle/chunks/list-O5NZVSPN.js +0 -36
  528. package/dist/cli-bundle/chunks/list-O5NZVSPN.js.map +0 -1
  529. package/dist/cli-bundle/chunks/list-Z55YCNTC.js +0 -32
  530. package/dist/cli-bundle/chunks/list-Z55YCNTC.js.map +0 -7
  531. package/dist/cli-bundle/chunks/next-GBNTGXFC.js +0 -28
  532. package/dist/cli-bundle/chunks/next-GBNTGXFC.js.map +0 -7
  533. package/dist/cli-bundle/chunks/next-QKW7PTKE.js +0 -32
  534. package/dist/cli-bundle/chunks/next-QKW7PTKE.js.map +0 -1
  535. package/dist/cli-bundle/chunks/notes-R5FZTKWF.js +0 -17
  536. package/dist/cli-bundle/chunks/notes-R5FZTKWF.js.map +0 -7
  537. package/dist/cli-bundle/chunks/notes-WCGIULVG.js +0 -21
  538. package/dist/cli-bundle/chunks/notes-WCGIULVG.js.map +0 -1
  539. package/dist/cli-bundle/chunks/plan-ADISFYH4.js +0 -29
  540. package/dist/cli-bundle/chunks/plan-ADISFYH4.js.map +0 -7
  541. package/dist/cli-bundle/chunks/plan-CHVE7PBR.js.map +0 -1
  542. package/dist/cli-bundle/chunks/profile-LD23PSI6.js.map +0 -7
  543. package/dist/cli-bundle/chunks/profile-ZXGSKBJD.js.map +0 -1
  544. package/dist/cli-bundle/chunks/register-list-query-B42JCCOI.js.map +0 -1
  545. package/dist/cli-bundle/chunks/register-list-query-OEYQHFXO.js.map +0 -7
  546. package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js +0 -19
  547. package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js.map +0 -7
  548. package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js +0 -23
  549. package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js.map +0 -1
  550. package/dist/cli-bundle/chunks/register-setup-3ZVVX2VN.js.map +0 -7
  551. package/dist/cli-bundle/chunks/register-setup-Q6KFNIOZ.js.map +0 -1
  552. package/dist/cli-bundle/chunks/restore-5RQHAPMA.js.map +0 -1
  553. package/dist/cli-bundle/chunks/restore-PNEIBBLW.js +0 -19
  554. package/dist/cli-bundle/chunks/restore-PNEIBBLW.js.map +0 -7
  555. package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js +0 -29
  556. package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js.map +0 -1
  557. package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js +0 -25
  558. package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js.map +0 -7
  559. package/dist/cli-bundle/chunks/schema-245WW4G2.js.map +0 -1
  560. package/dist/cli-bundle/chunks/schema-HBORFC6B.js.map +0 -7
  561. package/dist/cli-bundle/chunks/search-AOZC5SIK.js +0 -34
  562. package/dist/cli-bundle/chunks/search-AOZC5SIK.js.map +0 -7
  563. package/dist/cli-bundle/chunks/search-DRXPGHD7.js +0 -38
  564. package/dist/cli-bundle/chunks/search-DRXPGHD7.js.map +0 -1
  565. package/dist/cli-bundle/chunks/stats-NJG4NLHG.js +0 -21
  566. package/dist/cli-bundle/chunks/stats-NJG4NLHG.js.map +0 -1
  567. package/dist/cli-bundle/chunks/stats-RG6AG4N2.js +0 -17
  568. package/dist/cli-bundle/chunks/stats-RG6AG4N2.js.map +0 -7
  569. package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js +0 -14
  570. package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js.map +0 -7
  571. package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js +0 -18
  572. package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js.map +0 -1
  573. package/dist/cli-bundle/chunks/test-6CMOCWUC.js +0 -39
  574. package/dist/cli-bundle/chunks/test-6CMOCWUC.js.map +0 -7
  575. package/dist/cli-bundle/chunks/test-RI7XHBZL.js +0 -43
  576. package/dist/cli-bundle/chunks/test-RI7XHBZL.js.map +0 -1
  577. package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js +0 -29
  578. package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js.map +0 -7
  579. package/dist/cli-bundle/chunks/test-all-QEIORFYW.js +0 -33
  580. package/dist/cli-bundle/chunks/test-all-QEIORFYW.js.map +0 -1
  581. package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js +0 -28
  582. package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js.map +0 -1
  583. package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js +0 -24
  584. package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js.map +0 -7
  585. package/dist/cli-bundle/chunks/update-QVJDFEAP.js +0 -30
  586. package/dist/cli-bundle/chunks/update-QVJDFEAP.js.map +0 -1
  587. package/dist/cli-bundle/chunks/update-VQVHAY6X.js +0 -26
  588. package/dist/cli-bundle/chunks/update-VQVHAY6X.js.map +0 -7
  589. package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js +0 -37
  590. package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js.map +0 -7
  591. package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js +0 -41
  592. package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js.map +0 -1
  593. package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js +0 -24
  594. package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js.map +0 -7
  595. package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js +0 -28
  596. package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js.map +0 -1
  597. package/dist/cli-bundle/chunks/validate-4NTXSB62.js +0 -36
  598. package/dist/cli-bundle/chunks/validate-4NTXSB62.js.map +0 -1
  599. package/dist/cli-bundle/chunks/validate-MUFXQZMI.js +0 -32
  600. package/dist/cli-bundle/chunks/validate-MUFXQZMI.js.map +0 -7
  601. /package/dist/cli-bundle/chunks/{activity-WJCGCYPU.js.map → append-F7WPGIQL.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{activity-Z6QUAUSG.js.map → append-PVCTBVJG.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{chunk-R5BMJX33.js.map → chunk-2LEJGRQ7.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{chunk-AZYGZGGI.js.map → chunk-2TILG6F2.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{chunk-GJ7QC5DJ.js.map → chunk-3TYOW6RR.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{chunk-B6DUFX6H.js.map → chunk-3X542TEY.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{chunk-JJP45OEI.js.map → chunk-7VQ3JJN5.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{chunk-MWMVPCIE.js.map → chunk-AGAVEDIE.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{chunk-22KBU3MW.js.map → chunk-AJUON7E6.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{chunk-IWVU4C2F.js.map → chunk-DR2V5OIV.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{chunk-XG625QP4.js.map → chunk-EDO7VXSO.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{chunk-Y4M7CPQP.js.map → chunk-EVEPHNXJ.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{chunk-JDDLOQAE.js.map → chunk-FN6SB4HU.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{chunk-24YG75HI.js.map → chunk-H2SMKL2N.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{chunk-EGY6JBQ3.js.map → chunk-HX6QXV5P.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{chunk-Y46GD4IX.js.map → chunk-P3MJJW7P.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{chunk-MVYWGY2A.js.map → chunk-PDXJXEZJ.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{chunk-AGHMOTGM.js.map → chunk-TEKZOS7M.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{chunk-JVH7QBVV.js.map → chunk-V5ZWKJNY.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{chunk-KUOOJR35.js.map → chunk-VLEA2UTQ.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{chunk-MUH7A3FD.js.map → chunk-WCWVEXGA.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{chunk-NGXQ3PFT.js.map → chunk-YPMZMKN7.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{chunk-KGFUY7WN.js.map → chunk-YTD5GICJ.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{chunk-7DT4WSH2.js.map → chunk-ZO7CLOY2.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{aggregate-BDM6EIAR.js.map → close-3YYQ5OG2.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{aggregate-VQ2DHU3S.js.map → close-Z3Q4U7TS.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{append-RKJYPU74.js.map → close-many-3L2RXH3M.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{append-BGML6VLD.js.map → close-many-D366FTIG.js.map} +0 -0
  629. /package/dist/cli-bundle/chunks/{claim-XP5AWZ5H.js.map → comments-54XDJNFE.js.map} +0 -0
  630. /package/dist/cli-bundle/chunks/{claim-RFS7BROJ.js.map → comments-HGHC2PN6.js.map} +0 -0
  631. /package/dist/cli-bundle/chunks/{close-2SSSHHUZ.js.map → copy-44RT5GDW.js.map} +0 -0
  632. /package/dist/cli-bundle/chunks/{close-GEANHQ2J.js.map → copy-UGMUGHZA.js.map} +0 -0
  633. /package/dist/cli-bundle/chunks/{close-many-CMZW7ITN.js.map → create-4GWJWPXG.js.map} +0 -0
  634. /package/dist/cli-bundle/chunks/{close-many-ZFDIG6M7.js.map → create-AZXCUYKP.js.map} +0 -0
  635. /package/dist/cli-bundle/chunks/{comments-XUBPXDYX.js.map → delete-Y6SXIQ4X.js.map} +0 -0
  636. /package/dist/cli-bundle/chunks/{comments-MFSYVNNU.js.map → delete-YQ2VPXNF.js.map} +0 -0
  637. /package/dist/cli-bundle/chunks/{config-T4FHBSYN.js.map → deps-BU5EBJDU.js.map} +0 -0
  638. /package/dist/cli-bundle/chunks/{config-D7XQMONX.js.map → deps-FMANWFRP.js.map} +0 -0
  639. /package/dist/cli-bundle/chunks/{context-DIU275XI.js.map → docs-OQBSJNIA.js.map} +0 -0
  640. /package/dist/cli-bundle/chunks/{context-JCOYB4LZ.js.map → docs-VNPBZXEL.js.map} +0 -0
  641. /package/dist/cli-bundle/chunks/{contracts-BVO7CSLK.js.map → files-72HZEBOE.js.map} +0 -0
  642. /package/dist/cli-bundle/chunks/{contracts-NYPEW2G4.js.map → files-HTSB2KJG.js.map} +0 -0
  643. /package/dist/cli-bundle/chunks/{copy-32ROBIDL.js.map → focus-FOG4ALC2.js.map} +0 -0
  644. /package/dist/cli-bundle/chunks/{copy-NAGLGMHZ.js.map → focus-SUTMKXGX.js.map} +0 -0
  645. /package/dist/cli-bundle/chunks/{create-E77SDCUP.js.map → history-compact-M6IFAMBP.js.map} +0 -0
  646. /package/dist/cli-bundle/chunks/{create-4V7SWNBB.js.map → history-compact-NEXRPP2O.js.map} +0 -0
  647. /package/dist/cli-bundle/chunks/{delete-RA5KTCLB.js.map → history-redact-NQX3OGZP.js.map} +0 -0
  648. /package/dist/cli-bundle/chunks/{delete-NQI5OSKN.js.map → history-redact-WQJBZ3PX.js.map} +0 -0
  649. /package/dist/cli-bundle/chunks/{deps-T7SCWXEX.js.map → history-repair-CBHMHAJO.js.map} +0 -0
  650. /package/dist/cli-bundle/chunks/{deps-32SU7HO5.js.map → history-repair-NHOJG7WO.js.map} +0 -0
  651. /package/dist/cli-bundle/chunks/{docs-WL2IWGWV.js.map → learnings-M64NTSOR.js.map} +0 -0
  652. /package/dist/cli-bundle/chunks/{docs-RRUPT7O2.js.map → learnings-T63JGKKN.js.map} +0 -0
  653. /package/dist/cli-bundle/chunks/{eval-NF2J5SHR.js.map → notes-73WE2UV2.js.map} +0 -0
  654. /package/dist/cli-bundle/chunks/{eval-SKDT3MZU.js.map → notes-U7L6HQQ2.js.map} +0 -0
  655. /package/dist/cli-bundle/chunks/{extension-ZISPBRBC.js.map → plan-OSCNYFGC.js.map} +0 -0
  656. /package/dist/cli-bundle/chunks/{extension-LAXKCAYE.js.map → plan-TN537L24.js.map} +0 -0
  657. /package/dist/cli-bundle/chunks/{files-PYKR2UUG.js.map → profile-MHAMXMHQ.js.map} +0 -0
  658. /package/dist/cli-bundle/chunks/{files-EWRQHGIS.js.map → profile-TIGLAKJ7.js.map} +0 -0
  659. /package/dist/cli-bundle/chunks/{focus-4T7TM4MT.js.map → restore-HC3YSWF7.js.map} +0 -0
  660. /package/dist/cli-bundle/chunks/{focus-L3YUASOD.js.map → restore-LFAMMRYZ.js.map} +0 -0
  661. /package/dist/cli-bundle/chunks/{gc-2PCTYYRI.js.map → schema-DAGSYO6E.js.map} +0 -0
  662. /package/dist/cli-bundle/chunks/{gc-2DNMPXMC.js.map → schema-UBXJCQAC.js.map} +0 -0
  663. /package/dist/cli-bundle/chunks/{get-VKQXCXLL.js.map → update-CJGG5WMV.js.map} +0 -0
  664. /package/dist/cli-bundle/chunks/{get-7DMITJ3G.js.map → update-LKD64AFP.js.map} +0 -0
  665. /package/dist/cli-bundle/chunks/{health-CVSTAR2F.js.map → update-many-G4SM7BHC.js.map} +0 -0
  666. /package/dist/cli-bundle/chunks/{health-TV3GKTFN.js.map → update-many-VLIV3D7R.js.map} +0 -0
@@ -1,268 +0,0 @@
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]="c66b65a0-87e0-508e-b2b4-7e8c39a560eb")}catch(e){}}();
3
- import {
4
- runSearch
5
- } from "./chunk-TZXRBVAM.js";
6
- import {
7
- PmCliError
8
- } from "./chunk-E3SZTQ4K.js";
9
- import {
10
- EXIT_CODE,
11
- coercePositiveInteger,
12
- getSettingsPath,
13
- pathExists,
14
- resolvePmRoot
15
- } from "./chunk-57NWPFF2.js";
16
-
17
- // dist/cli/commands/eval.js
18
- import fs from "node:fs/promises";
19
- import path from "node:path";
20
-
21
- // dist/core/search/eval.js
22
- var DEFAULT_EVAL_K = 10;
23
- var EvalQuerySetError = class extends Error {
24
- /** Construct an error describing why a golden-query set failed validation. */
25
- constructor(message) {
26
- super(message);
27
- this.name = "EvalQuerySetError";
28
- }
29
- };
30
- var VALID_EVAL_MODES = /* @__PURE__ */ new Set(["keyword", "semantic", "hybrid"]);
31
- function dcgAtK(relevanceGains, k) {
32
- let dcg = 0;
33
- const limit = Math.min(k, relevanceGains.length);
34
- for (let index = 0; index < limit; index += 1) {
35
- dcg += relevanceGains[index] / Math.log2(index + 2);
36
- }
37
- return dcg;
38
- }
39
- function ndcgAtK(rankedIds, relevantIds, k) {
40
- if (relevantIds.size === 0) {
41
- return 0;
42
- }
43
- const gains = rankedIds.map((id) => relevantIds.has(id) ? 1 : 0);
44
- const dcg = dcgAtK(gains, k);
45
- const idealGains = Array.from({ length: relevantIds.size }, () => 1);
46
- const idealDcg = dcgAtK(idealGains, k);
47
- return idealDcg === 0 ? 0 : dcg / idealDcg;
48
- }
49
- function reciprocalRankAtK(rankedIds, relevantIds, k) {
50
- const limit = Math.min(k, rankedIds.length);
51
- for (let index = 0; index < limit; index += 1) {
52
- if (relevantIds.has(rankedIds[index])) {
53
- return 1 / (index + 1);
54
- }
55
- }
56
- return 0;
57
- }
58
- function countRelevantInTopK(rankedIds, relevantIds, k) {
59
- const limit = Math.min(k, rankedIds.length);
60
- let hits = 0;
61
- for (let index = 0; index < limit; index += 1) {
62
- if (relevantIds.has(rankedIds[index])) {
63
- hits += 1;
64
- }
65
- }
66
- return hits;
67
- }
68
- function precisionAtK(rankedIds, relevantIds, k) {
69
- if (k <= 0) {
70
- return 0;
71
- }
72
- return countRelevantInTopK(rankedIds, relevantIds, k) / k;
73
- }
74
- function recallAtK(rankedIds, relevantIds, k) {
75
- if (relevantIds.size === 0) {
76
- return 0;
77
- }
78
- return countRelevantInTopK(rankedIds, relevantIds, k) / relevantIds.size;
79
- }
80
- function evaluateRanking(rankedIds, relevantIds, k) {
81
- return {
82
- ndcg: ndcgAtK(rankedIds, relevantIds, k),
83
- mrr: reciprocalRankAtK(rankedIds, relevantIds, k),
84
- precision: precisionAtK(rankedIds, relevantIds, k),
85
- recall: recallAtK(rankedIds, relevantIds, k),
86
- relevant_total: relevantIds.size,
87
- retrieved_relevant: countRelevantInTopK(rankedIds, relevantIds, k)
88
- };
89
- }
90
- function aggregateEvalMetrics(perQuery) {
91
- const queryCount = perQuery.length;
92
- if (queryCount === 0) {
93
- return { ndcg: 0, mrr: 0, precision: 0, recall: 0, query_count: 0 };
94
- }
95
- const sum = perQuery.reduce((accumulator, metrics) => ({
96
- ndcg: accumulator.ndcg + metrics.ndcg,
97
- mrr: accumulator.mrr + metrics.mrr,
98
- precision: accumulator.precision + metrics.precision,
99
- recall: accumulator.recall + metrics.recall
100
- }), { ndcg: 0, mrr: 0, precision: 0, recall: 0 });
101
- return {
102
- ndcg: sum.ndcg / queryCount,
103
- mrr: sum.mrr / queryCount,
104
- precision: sum.precision / queryCount,
105
- recall: sum.recall / queryCount,
106
- query_count: queryCount
107
- };
108
- }
109
- function parseEvalQueryEntry(raw, index) {
110
- if (typeof raw !== "object" || raw === null) {
111
- throw new EvalQuerySetError(`Eval query at index ${index} must be an object`);
112
- }
113
- const entry = raw;
114
- const query = typeof entry.query === "string" ? entry.query.trim() : "";
115
- if (query.length === 0) {
116
- throw new EvalQuerySetError(`Eval query at index ${index} must have a non-empty "query" string`);
117
- }
118
- if (!Array.isArray(entry.relevant_ids)) {
119
- throw new EvalQuerySetError(`Eval query at index ${index} must have a "relevant_ids" array`);
120
- }
121
- if (entry.relevant_ids.some((value) => typeof value !== "string")) {
122
- throw new EvalQuerySetError(`Eval query at index ${index} must have a "relevant_ids" array of strings`);
123
- }
124
- const relevantIds = [
125
- ...new Set(entry.relevant_ids.map((value) => value.trim()).filter((value) => value.length > 0))
126
- ];
127
- if (relevantIds.length === 0) {
128
- throw new EvalQuerySetError(`Eval query at index ${index} must list at least one relevant id`);
129
- }
130
- if (entry.mode !== void 0 && (typeof entry.mode !== "string" || !VALID_EVAL_MODES.has(entry.mode))) {
131
- throw new EvalQuerySetError(`Eval query at index ${index} has an invalid mode (expected keyword|semantic|hybrid)`);
132
- }
133
- return {
134
- query,
135
- relevant_ids: relevantIds,
136
- ...entry.mode !== void 0 ? { mode: entry.mode } : {},
137
- ...typeof entry.description === "string" && entry.description.trim().length > 0 ? { description: entry.description.trim() } : {}
138
- };
139
- }
140
- function parseEvalQuerySet(raw) {
141
- const rawQueries = Array.isArray(raw) ? raw : typeof raw === "object" && raw !== null ? raw.queries : void 0;
142
- if (!Array.isArray(rawQueries)) {
143
- throw new EvalQuerySetError('Eval query set must be an array of queries or an object with a "queries" array');
144
- }
145
- if (rawQueries.length === 0) {
146
- throw new EvalQuerySetError("Eval query set must contain at least one query");
147
- }
148
- return {
149
- queries: rawQueries.map((entry, index) => parseEvalQueryEntry(entry, index))
150
- };
151
- }
152
-
153
- // dist/cli/commands/eval.js
154
- var DEFAULT_EVAL_QUERIES_RELATIVE_PATH = path.join("search", "eval-queries.json");
155
- var VALID_EVAL_MODES2 = /* @__PURE__ */ new Set(["keyword", "semantic", "hybrid"]);
156
- function parseEvalMode(raw) {
157
- if (raw === void 0) {
158
- return "keyword";
159
- }
160
- const normalized = raw.trim().toLowerCase();
161
- if (!VALID_EVAL_MODES2.has(normalized)) {
162
- throw new PmCliError("Eval --mode must be one of keyword|semantic|hybrid", EXIT_CODE.USAGE);
163
- }
164
- return normalized;
165
- }
166
- function parseEvalK(raw) {
167
- if (raw === void 0 || raw === "") {
168
- return DEFAULT_EVAL_K;
169
- }
170
- const parsed = coercePositiveInteger(raw);
171
- if (parsed === null) {
172
- throw new PmCliError("Eval --k must be a positive integer", EXIT_CODE.USAGE);
173
- }
174
- return parsed;
175
- }
176
- function parseFailUnder(raw) {
177
- if (raw === void 0 || raw === "") {
178
- return void 0;
179
- }
180
- const parsed = typeof raw === "number" ? raw : Number(String(raw).trim());
181
- if (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {
182
- throw new PmCliError("Eval --fail-under must be a number in the range [0, 1]", EXIT_CODE.USAGE);
183
- }
184
- return parsed;
185
- }
186
- function roundMetric(value) {
187
- return Math.round(value * 1e4) / 1e4;
188
- }
189
- async function loadEvalQuerySet(queriesPath) {
190
- let raw;
191
- try {
192
- raw = await fs.readFile(queriesPath, "utf8");
193
- } catch {
194
- throw new PmCliError(`Eval query set not found at ${queriesPath}`, EXIT_CODE.NOT_FOUND, {
195
- examples: [
196
- `echo '[{"query":"offline search","relevant_ids":["pm-75k9"]}]' > ` + queriesPath,
197
- "pm eval --queries ./my-eval.json"
198
- ],
199
- nextSteps: [
200
- "Create a git-tracked golden-query JSON file (an array of {query, relevant_ids, mode?} objects), then re-run pm eval."
201
- ]
202
- });
203
- }
204
- let parsed;
205
- try {
206
- parsed = JSON.parse(raw);
207
- } catch (error) {
208
- throw new PmCliError(`Eval query set at ${queriesPath} is not valid JSON: ${error.message}`, EXIT_CODE.USAGE);
209
- }
210
- try {
211
- return parseEvalQuerySet(parsed);
212
- } catch (error) {
213
- throw new PmCliError(error.message, EXIT_CODE.USAGE);
214
- }
215
- }
216
- async function runEval(options, global) {
217
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
218
- if (!await pathExists(getSettingsPath(pmRoot))) {
219
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
220
- }
221
- const k = parseEvalK(options.k);
222
- const defaultMode = parseEvalMode(options.mode);
223
- const failUnder = parseFailUnder(options.failUnder);
224
- const queriesPath = options.queries ? path.resolve(process.cwd(), options.queries) : path.join(pmRoot, DEFAULT_EVAL_QUERIES_RELATIVE_PATH);
225
- const querySet = await loadEvalQuerySet(queriesPath);
226
- const reports = [];
227
- const rawMetrics = [];
228
- for (const evalQuery of querySet.queries) {
229
- const mode = evalQuery.mode ?? defaultMode;
230
- const searchResult = await runSearch(evalQuery.query, { mode, limit: String(k), fields: "id" }, global);
231
- const rankedIds = searchResult.items.map((item) => item.id).filter((id) => typeof id === "string");
232
- const metrics = evaluateRanking(rankedIds, new Set(evalQuery.relevant_ids), k);
233
- rawMetrics.push(metrics);
234
- reports.push({
235
- query: evalQuery.query,
236
- mode,
237
- relevant_total: metrics.relevant_total,
238
- retrieved_relevant: metrics.retrieved_relevant,
239
- ndcg: roundMetric(metrics.ndcg),
240
- mrr: roundMetric(metrics.mrr),
241
- precision: roundMetric(metrics.precision),
242
- recall: roundMetric(metrics.recall)
243
- });
244
- }
245
- const aggregate = aggregateEvalMetrics(rawMetrics);
246
- const passed = failUnder === void 0 || aggregate.ndcg >= failUnder;
247
- return {
248
- k,
249
- query_count: querySet.queries.length,
250
- aggregate: {
251
- ndcg: roundMetric(aggregate.ndcg),
252
- mrr: roundMetric(aggregate.mrr),
253
- precision: roundMetric(aggregate.precision),
254
- recall: roundMetric(aggregate.recall)
255
- },
256
- queries: reports,
257
- ...failUnder !== void 0 ? { fail_under: failUnder } : {},
258
- passed
259
- };
260
- }
261
-
262
- export {
263
- DEFAULT_EVAL_QUERIES_RELATIVE_PATH,
264
- runEval
265
- };
266
- //# sourceMappingURL=chunk-5AJXHQM7.js.map
267
-
268
- //# debugId=c66b65a0-87e0-508e-b2b4-7e8c39a560eb
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../cli/commands/eval.ts","../../../../../../../../core/search/eval.ts"],"sourcesContent":["/**\n * @module cli/commands/eval\n *\n * Implements the `pm eval` command surface (pm-u8n5): a search-relevance\n * evaluation runner that scores a human-curated golden-query set against the\n * live retrieval path and reports nDCG@k, MRR@k, precision@k, and recall@k per\n * query plus the macro average. With `--fail-under` it doubles as a CI gate so\n * relevance regressions — from corpus changes, hybrid-weight changes, or\n * provider swaps (including the offline BM25 provider, pm-75k9) — fail the build\n * instead of silently degrading retrieval quality.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n aggregateEvalMetrics,\n DEFAULT_EVAL_K,\n evaluateRanking,\n parseEvalQuerySet,\n type EvalSearchMode,\n type QueryEvalMetrics,\n} from \"../../core/search/eval.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 { coercePositiveInteger } from \"../../core/shared/primitives.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { runSearch } from \"./search.js\";\n\n/**\n * Relative location (under the pm root) of the default golden-query set. A\n * git-tracked, human-curated file so relevance ground truth lives alongside the\n * tracker it evaluates.\n */\nexport const DEFAULT_EVAL_QUERIES_RELATIVE_PATH = path.join(\"search\", \"eval-queries.json\");\n\n/**\n * Documents the eval command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface EvalOptions {\n /** Default retrieval mode for queries that do not set their own (keyword|semantic|hybrid). */\n mode?: string;\n /** Metric cutoff (`@k`); positive integer, defaults to {@link DEFAULT_EVAL_K}. */\n k?: string | number;\n /** Gate threshold: exit non-zero when the aggregate nDCG@k falls below this `[0,1]` value. */\n failUnder?: string | number;\n /** Override path to the golden-query JSON file (defaults to `<pmRoot>/search/eval-queries.json`). */\n queries?: string;\n /** Output format override: json|toon. */\n format?: string;\n}\n\n/** Per-query relevance report row emitted by {@link runEval}. */\nexport interface EvalQueryReport {\n query: string;\n mode: EvalSearchMode;\n relevant_total: number;\n retrieved_relevant: number;\n ndcg: number;\n mrr: number;\n precision: number;\n recall: number;\n}\n\n/**\n * Documents the eval result payload exchanged by command, SDK, and package integrations.\n */\nexport interface EvalResult {\n k: number;\n query_count: number;\n aggregate: {\n ndcg: number;\n mrr: number;\n precision: number;\n recall: number;\n };\n queries: EvalQueryReport[];\n /** Present only when `--fail-under` was supplied. */\n fail_under?: number;\n /** Whether the aggregate nDCG met the gate (always true when no gate is set). */\n passed: boolean;\n}\n\nconst VALID_EVAL_MODES: ReadonlySet<string> = new Set<EvalSearchMode>([\"keyword\", \"semantic\", \"hybrid\"]);\n\nfunction parseEvalMode(raw: string | undefined): EvalSearchMode {\n if (raw === undefined) {\n return \"keyword\";\n }\n const normalized = raw.trim().toLowerCase();\n if (!VALID_EVAL_MODES.has(normalized)) {\n throw new PmCliError(\"Eval --mode must be one of keyword|semantic|hybrid\", EXIT_CODE.USAGE);\n }\n return normalized as EvalSearchMode;\n}\n\nfunction parseEvalK(raw: string | number | undefined): number {\n if (raw === undefined || raw === \"\") {\n return DEFAULT_EVAL_K;\n }\n const parsed = coercePositiveInteger(raw);\n if (parsed === null) {\n throw new PmCliError(\"Eval --k must be a positive integer\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nfunction parseFailUnder(raw: string | number | undefined): number | undefined {\n if (raw === undefined || raw === \"\") {\n return undefined;\n }\n const parsed = typeof raw === \"number\" ? raw : Number(String(raw).trim());\n if (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {\n throw new PmCliError(\"Eval --fail-under must be a number in the range [0, 1]\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\n/** Round a metric to four decimals to keep the JSON output compact and stable. */\nfunction roundMetric(value: number): number {\n return Math.round(value * 10_000) / 10_000;\n}\n\nasync function loadEvalQuerySet(queriesPath: string): Promise<ReturnType<typeof parseEvalQuerySet>> {\n let raw: string;\n try {\n raw = await fs.readFile(queriesPath, \"utf8\");\n } catch {\n throw new PmCliError(`Eval query set not found at ${queriesPath}`, EXIT_CODE.NOT_FOUND, {\n examples: [\n 'echo \\'[{\"query\":\"offline search\",\"relevant_ids\":[\"pm-75k9\"]}]\\' > ' + queriesPath,\n \"pm eval --queries ./my-eval.json\",\n ],\n nextSteps: [\n \"Create a git-tracked golden-query JSON file (an array of {query, relevant_ids, mode?} objects), then re-run pm eval.\",\n ],\n });\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error: unknown) {\n // JSON.parse only ever throws a SyntaxError (an Error subclass).\n throw new PmCliError(\n `Eval query set at ${queriesPath} is not valid JSON: ${(error as Error).message}`,\n EXIT_CODE.USAGE,\n );\n }\n try {\n return parseEvalQuerySet(parsed);\n } catch (error: unknown) {\n // parseEvalQuerySet only ever throws EvalQuerySetError (an Error subclass\n // with a precise, author-actionable message) — surface it as a usage error.\n throw new PmCliError((error as Error).message, EXIT_CODE.USAGE);\n }\n}\n\n/**\n * Run the search-relevance evaluation (pm-u8n5). Loads the golden-query set\n * (default `<pmRoot>/search/eval-queries.json`, overridable via `--queries`),\n * runs each query through {@link runSearch} at the resolved mode, scores the\n * returned ranking with the nDCG/MRR/precision/recall metrics, and macro-averages\n * across queries. When `--fail-under` is supplied, `passed` reflects whether the\n * aggregate nDCG@k cleared the threshold; the CLI layer maps a failed gate to a\n * non-zero exit code.\n */\nexport async function runEval(options: EvalOptions, global: GlobalOptions): Promise<EvalResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const k = parseEvalK(options.k);\n const defaultMode = parseEvalMode(options.mode);\n const failUnder = parseFailUnder(options.failUnder);\n const queriesPath = options.queries\n ? path.resolve(process.cwd(), options.queries)\n : path.join(pmRoot, DEFAULT_EVAL_QUERIES_RELATIVE_PATH);\n const querySet = await loadEvalQuerySet(queriesPath);\n\n const reports: EvalQueryReport[] = [];\n // Aggregate and gate on the UNROUNDED metrics; rounding is applied only to the\n // emitted report values so display precision never flips a --fail-under decision.\n const rawMetrics: QueryEvalMetrics[] = [];\n for (const evalQuery of querySet.queries) {\n const mode = evalQuery.mode ?? defaultMode;\n const searchResult = await runSearch(\n evalQuery.query,\n { mode, limit: String(k), fields: \"id\" },\n global,\n );\n const rankedIds = searchResult.items\n .map((item) => (item as { id?: unknown }).id)\n .filter((id): id is string => typeof id === \"string\");\n const metrics = evaluateRanking(rankedIds, new Set(evalQuery.relevant_ids), k);\n rawMetrics.push(metrics);\n reports.push({\n query: evalQuery.query,\n mode,\n relevant_total: metrics.relevant_total,\n retrieved_relevant: metrics.retrieved_relevant,\n ndcg: roundMetric(metrics.ndcg),\n mrr: roundMetric(metrics.mrr),\n precision: roundMetric(metrics.precision),\n recall: roundMetric(metrics.recall),\n });\n }\n\n const aggregate = aggregateEvalMetrics(rawMetrics);\n const passed = failUnder === undefined || aggregate.ndcg >= failUnder;\n return {\n k,\n query_count: querySet.queries.length,\n aggregate: {\n ndcg: roundMetric(aggregate.ndcg),\n mrr: roundMetric(aggregate.mrr),\n precision: roundMetric(aggregate.precision),\n recall: roundMetric(aggregate.recall),\n },\n queries: reports,\n ...(failUnder !== undefined ? { fail_under: failUnder } : {}),\n passed,\n };\n}\n","/**\n * @module core/search/eval\n *\n * Search relevance evaluation primitives (pm-u8n5). Implements the standard\n * offline ranking metrics — nDCG@k, MRR@k, precision@k, recall@k — over a\n * human-curated golden-query set, plus the loader/validator for that set. The\n * `pm eval` command (src/cli/commands/eval.ts) runs each golden query through\n * the live retrieval path and feeds the ranked ids here, so relevance\n * regressions from corpus changes, hybrid-weight changes, or provider swaps are\n * measurable and gateable in CI.\n *\n * Relevance is binary: an id is either in a query's `relevant_ids` set or it is\n * not. This keeps the golden set cheap to curate while still supporting the\n * graded-discount behavior of DCG (earlier hits are worth more).\n */\n\n/**\n * Retrieval mode a golden query is evaluated under. Mirrors the `pm search`\n * mode surface; omitting it on a query defers to the eval run's default mode.\n */\nexport type EvalSearchMode = \"keyword\" | \"semantic\" | \"hybrid\";\n\n/** Default cutoff (`@k`) used for every metric when the caller does not override it. */\nexport const DEFAULT_EVAL_K = 10;\n\n/**\n * One curated golden query: the query text, the set of item ids considered\n * relevant, an optional per-query retrieval mode override, and an optional\n * human-readable description of the relevance intent.\n */\nexport interface EvalQuery {\n query: string;\n relevant_ids: string[];\n mode?: EvalSearchMode;\n description?: string;\n}\n\n/** A parsed, validated golden-query set. */\nexport interface EvalQuerySet {\n queries: EvalQuery[];\n}\n\n/**\n * Thrown by {@link parseEvalQuerySet} when the raw golden-query payload is\n * structurally invalid. Carries a precise, human-actionable message naming the\n * offending query index/field so an author can fix the JSON directly.\n */\nexport class EvalQuerySetError extends Error {\n /** Construct an error describing why a golden-query set failed validation. */\n constructor(message: string) {\n super(message);\n this.name = \"EvalQuerySetError\";\n }\n}\n\nconst VALID_EVAL_MODES: ReadonlySet<string> = new Set<EvalSearchMode>([\"keyword\", \"semantic\", \"hybrid\"]);\n\n/**\n * Compute Discounted Cumulative Gain at cutoff `k` for an ordered list of binary\n * relevance gains (`1` relevant, `0` not). Position `i` (1-based) contributes\n * `gain / log2(i + 1)`, so a relevant hit ranked first is worth `1` and later\n * hits are progressively discounted. Gains beyond `k` are ignored.\n */\nexport function dcgAtK(relevanceGains: number[], k: number): number {\n let dcg = 0;\n const limit = Math.min(k, relevanceGains.length);\n for (let index = 0; index < limit; index += 1) {\n dcg += relevanceGains[index] / Math.log2(index + 2);\n }\n return dcg;\n}\n\n/**\n * Normalized DCG at cutoff `k`: the ranking's DCG divided by the DCG of the\n * ideal ranking (all relevant ids first). Returns `0` when the query has no\n * relevant ids (the ideal DCG is `0` and the score is undefined), giving a\n * stable lower bound for aggregation. Result is in `[0, 1]`.\n */\nexport function ndcgAtK(rankedIds: string[], relevantIds: ReadonlySet<string>, k: number): number {\n if (relevantIds.size === 0) {\n return 0;\n }\n const gains = rankedIds.map((id) => (relevantIds.has(id) ? 1 : 0));\n const dcg = dcgAtK(gains, k);\n const idealGains = Array.from({ length: relevantIds.size }, () => 1);\n const idealDcg = dcgAtK(idealGains, k);\n return idealDcg === 0 ? 0 : dcg / idealDcg;\n}\n\n/**\n * Reciprocal rank of the first relevant id within the top `k` results: `1/rank`\n * (rank is 1-based), or `0` when no relevant id appears in the cutoff. Averaged\n * across queries this is Mean Reciprocal Rank (MRR@k).\n */\nexport function reciprocalRankAtK(rankedIds: string[], relevantIds: ReadonlySet<string>, k: number): number {\n const limit = Math.min(k, rankedIds.length);\n for (let index = 0; index < limit; index += 1) {\n if (relevantIds.has(rankedIds[index])) {\n return 1 / (index + 1);\n }\n }\n return 0;\n}\n\n/**\n * Count relevant ids within the top `k` results (shared by precision and\n * recall).\n */\nfunction countRelevantInTopK(rankedIds: string[], relevantIds: ReadonlySet<string>, k: number): number {\n const limit = Math.min(k, rankedIds.length);\n let hits = 0;\n for (let index = 0; index < limit; index += 1) {\n if (relevantIds.has(rankedIds[index])) {\n hits += 1;\n }\n }\n return hits;\n}\n\n/**\n * Precision at cutoff `k`: relevant ids retrieved in the top `k` divided by `k`.\n * Returns `0` for a non-positive `k`.\n */\nexport function precisionAtK(rankedIds: string[], relevantIds: ReadonlySet<string>, k: number): number {\n if (k <= 0) {\n return 0;\n }\n return countRelevantInTopK(rankedIds, relevantIds, k) / k;\n}\n\n/**\n * Recall at cutoff `k`: relevant ids retrieved in the top `k` divided by the\n * total number of relevant ids. Returns `0` when the query has no relevant ids.\n */\nexport function recallAtK(rankedIds: string[], relevantIds: ReadonlySet<string>, k: number): number {\n if (relevantIds.size === 0) {\n return 0;\n }\n return countRelevantInTopK(rankedIds, relevantIds, k) / relevantIds.size;\n}\n\n/** The four ranking metrics computed for a single query, plus match counts. */\nexport interface QueryEvalMetrics {\n ndcg: number;\n mrr: number;\n precision: number;\n recall: number;\n relevant_total: number;\n retrieved_relevant: number;\n}\n\n/**\n * Evaluate one ranking against its relevant-id set at cutoff `k`, returning all\n * four metrics together so callers compute the document ranking once and read\n * every score off the result.\n */\nexport function evaluateRanking(rankedIds: string[], relevantIds: ReadonlySet<string>, k: number): QueryEvalMetrics {\n return {\n ndcg: ndcgAtK(rankedIds, relevantIds, k),\n mrr: reciprocalRankAtK(rankedIds, relevantIds, k),\n precision: precisionAtK(rankedIds, relevantIds, k),\n recall: recallAtK(rankedIds, relevantIds, k),\n relevant_total: relevantIds.size,\n retrieved_relevant: countRelevantInTopK(rankedIds, relevantIds, k),\n };\n}\n\n/** Macro-averaged metrics across all evaluated queries. */\nexport interface AggregateEvalMetrics {\n ndcg: number;\n mrr: number;\n precision: number;\n recall: number;\n query_count: number;\n}\n\n/**\n * Macro-average per-query metrics (each query weighted equally). Returns all\n * zeros with `query_count: 0` for an empty input so the gate path has a stable\n * shape to compare against.\n */\nexport function aggregateEvalMetrics(perQuery: QueryEvalMetrics[]): AggregateEvalMetrics {\n const queryCount = perQuery.length;\n if (queryCount === 0) {\n return { ndcg: 0, mrr: 0, precision: 0, recall: 0, query_count: 0 };\n }\n const sum = perQuery.reduce(\n (accumulator, metrics) => ({\n ndcg: accumulator.ndcg + metrics.ndcg,\n mrr: accumulator.mrr + metrics.mrr,\n precision: accumulator.precision + metrics.precision,\n recall: accumulator.recall + metrics.recall,\n }),\n { ndcg: 0, mrr: 0, precision: 0, recall: 0 },\n );\n return {\n ndcg: sum.ndcg / queryCount,\n mrr: sum.mrr / queryCount,\n precision: sum.precision / queryCount,\n recall: sum.recall / queryCount,\n query_count: queryCount,\n };\n}\n\n/**\n * Validate one raw golden-query entry, returning a typed {@link EvalQuery}.\n * Throws {@link EvalQuerySetError} (with the entry index) for a missing/empty\n * `query`, a `relevant_ids` that is not a non-empty string array, or an invalid\n * `mode`. `relevant_ids` are trimmed and de-duplicated; `description` is kept\n * only when it is a non-empty string.\n */\nfunction parseEvalQueryEntry(raw: unknown, index: number): EvalQuery {\n if (typeof raw !== \"object\" || raw === null) {\n throw new EvalQuerySetError(`Eval query at index ${index} must be an object`);\n }\n const entry = raw as { query?: unknown; relevant_ids?: unknown; mode?: unknown; description?: unknown };\n const query = typeof entry.query === \"string\" ? entry.query.trim() : \"\";\n if (query.length === 0) {\n throw new EvalQuerySetError(`Eval query at index ${index} must have a non-empty \"query\" string`);\n }\n if (!Array.isArray(entry.relevant_ids)) {\n throw new EvalQuerySetError(`Eval query at index ${index} must have a \"relevant_ids\" array`);\n }\n if (entry.relevant_ids.some((value) => typeof value !== \"string\")) {\n // Reject (rather than silently drop) non-string members: malformed golden\n // data must fail loudly so it can never quietly change relevance judgments.\n throw new EvalQuerySetError(`Eval query at index ${index} must have a \"relevant_ids\" array of strings`);\n }\n const relevantIds = [\n ...new Set((entry.relevant_ids as string[]).map((value) => value.trim()).filter((value) => value.length > 0)),\n ];\n if (relevantIds.length === 0) {\n throw new EvalQuerySetError(`Eval query at index ${index} must list at least one relevant id`);\n }\n if (entry.mode !== undefined && (typeof entry.mode !== \"string\" || !VALID_EVAL_MODES.has(entry.mode))) {\n throw new EvalQuerySetError(`Eval query at index ${index} has an invalid mode (expected keyword|semantic|hybrid)`);\n }\n return {\n query,\n relevant_ids: relevantIds,\n ...(entry.mode !== undefined ? { mode: entry.mode as EvalSearchMode } : {}),\n ...(typeof entry.description === \"string\" && entry.description.trim().length > 0\n ? { description: entry.description.trim() }\n : {}),\n };\n}\n\n/**\n * Parse and validate a raw golden-query payload (typically `JSON.parse` of\n * `.agents/pm/search/eval-queries.json`). Accepts either a bare array of query\n * entries or an object with a `queries` array. Throws {@link EvalQuerySetError}\n * with a precise message when the payload is not an array/object, when\n * `queries` is missing/not an array, when the set is empty, or when any entry\n * fails {@link parseEvalQueryEntry}.\n */\nexport function parseEvalQuerySet(raw: unknown): EvalQuerySet {\n const rawQueries = Array.isArray(raw)\n ? raw\n : typeof raw === \"object\" && raw !== null\n ? (raw as { queries?: unknown }).queries\n : undefined;\n if (!Array.isArray(rawQueries)) {\n throw new EvalQuerySetError('Eval query set must be an array of queries or an object with a \"queries\" array');\n }\n if (rawQueries.length === 0) {\n throw new EvalQuerySetError(\"Eval query set must contain at least one query\");\n }\n return {\n queries: rawQueries.map((entry, index) => parseEvalQueryEntry(entry, index)),\n };\n}\n"],"names":["VALID_EVAL_MODES"],"mappings":";;;;;;;;;;;;;;;;;AAWA,OAAO,QAAQ;AACf,OAAO,UAAU;;;ACWV,IAAM,iBAAiB;AAwBxB,IAAO,oBAAP,cAAiC,MAAK;;EAE1C,YAAY,SAAe;AACzB,UAAM,OAAO;AACb,SAAK,OAAO;EACd;;AAGF,IAAM,mBAAwC,oBAAI,IAAoB,CAAC,WAAW,YAAY,QAAQ,CAAC;AAQjG,SAAU,OAAO,gBAA0B,GAAS;AACxD,MAAI,MAAM;AACV,QAAM,QAAQ,KAAK,IAAI,GAAG,eAAe,MAAM;AAC/C,WAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS,GAAG;AAC7C,WAAO,eAAe,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC;EACpD;AACA,SAAO;AACT;AAQM,SAAU,QAAQ,WAAqB,aAAkC,GAAS;AACtF,MAAI,YAAY,SAAS,GAAG;AAC1B,WAAO;EACT;AACA,QAAM,QAAQ,UAAU,IAAI,CAAC,OAAQ,YAAY,IAAI,EAAE,IAAI,IAAI,CAAE;AACjE,QAAM,MAAM,OAAO,OAAO,CAAC;AAC3B,QAAM,aAAa,MAAM,KAAK,EAAE,QAAQ,YAAY,KAAI,GAAI,MAAM,CAAC;AACnE,QAAM,WAAW,OAAO,YAAY,CAAC;AACrC,SAAO,aAAa,IAAI,IAAI,MAAM;AACpC;AAOM,SAAU,kBAAkB,WAAqB,aAAkC,GAAS;AAChG,QAAM,QAAQ,KAAK,IAAI,GAAG,UAAU,MAAM;AAC1C,WAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS,GAAG;AAC7C,QAAI,YAAY,IAAI,UAAU,KAAK,CAAC,GAAG;AACrC,aAAO,KAAK,QAAQ;IACtB;EACF;AACA,SAAO;AACT;AAMA,SAAS,oBAAoB,WAAqB,aAAkC,GAAS;AAC3F,QAAM,QAAQ,KAAK,IAAI,GAAG,UAAU,MAAM;AAC1C,MAAI,OAAO;AACX,WAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS,GAAG;AAC7C,QAAI,YAAY,IAAI,UAAU,KAAK,CAAC,GAAG;AACrC,cAAQ;IACV;EACF;AACA,SAAO;AACT;AAMM,SAAU,aAAa,WAAqB,aAAkC,GAAS;AAC3F,MAAI,KAAK,GAAG;AACV,WAAO;EACT;AACA,SAAO,oBAAoB,WAAW,aAAa,CAAC,IAAI;AAC1D;AAMM,SAAU,UAAU,WAAqB,aAAkC,GAAS;AACxF,MAAI,YAAY,SAAS,GAAG;AAC1B,WAAO;EACT;AACA,SAAO,oBAAoB,WAAW,aAAa,CAAC,IAAI,YAAY;AACtE;AAiBM,SAAU,gBAAgB,WAAqB,aAAkC,GAAS;AAC9F,SAAO;IACL,MAAM,QAAQ,WAAW,aAAa,CAAC;IACvC,KAAK,kBAAkB,WAAW,aAAa,CAAC;IAChD,WAAW,aAAa,WAAW,aAAa,CAAC;IACjD,QAAQ,UAAU,WAAW,aAAa,CAAC;IAC3C,gBAAgB,YAAY;IAC5B,oBAAoB,oBAAoB,WAAW,aAAa,CAAC;;AAErE;AAgBM,SAAU,qBAAqB,UAA4B;AAC/D,QAAM,aAAa,SAAS;AAC5B,MAAI,eAAe,GAAG;AACpB,WAAO,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,EAAC;EACnE;AACA,QAAM,MAAM,SAAS,OACnB,CAAC,aAAa,aAAa;IACzB,MAAM,YAAY,OAAO,QAAQ;IACjC,KAAK,YAAY,MAAM,QAAQ;IAC/B,WAAW,YAAY,YAAY,QAAQ;IAC3C,QAAQ,YAAY,SAAS,QAAQ;MAEvC,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,EAAC,CAAE;AAE9C,SAAO;IACL,MAAM,IAAI,OAAO;IACjB,KAAK,IAAI,MAAM;IACf,WAAW,IAAI,YAAY;IAC3B,QAAQ,IAAI,SAAS;IACrB,aAAa;;AAEjB;AASA,SAAS,oBAAoB,KAAc,OAAa;AACtD,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,UAAM,IAAI,kBAAkB,uBAAuB,KAAK,oBAAoB;EAC9E;AACA,QAAM,QAAQ;AACd,QAAM,QAAQ,OAAO,MAAM,UAAU,WAAW,MAAM,MAAM,KAAI,IAAK;AACrE,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,kBAAkB,uBAAuB,KAAK,uCAAuC;EACjG;AACA,MAAI,CAAC,MAAM,QAAQ,MAAM,YAAY,GAAG;AACtC,UAAM,IAAI,kBAAkB,uBAAuB,KAAK,mCAAmC;EAC7F;AACA,MAAI,MAAM,aAAa,KAAK,CAAC,UAAU,OAAO,UAAU,QAAQ,GAAG;AAGjE,UAAM,IAAI,kBAAkB,uBAAuB,KAAK,8CAA8C;EACxG;AACA,QAAM,cAAc;IAClB,GAAG,IAAI,IAAK,MAAM,aAA0B,IAAI,CAAC,UAAU,MAAM,KAAI,CAAE,EAAE,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC,CAAC;;AAE9G,MAAI,YAAY,WAAW,GAAG;AAC5B,UAAM,IAAI,kBAAkB,uBAAuB,KAAK,qCAAqC;EAC/F;AACA,MAAI,MAAM,SAAS,WAAc,OAAO,MAAM,SAAS,YAAY,CAAC,iBAAiB,IAAI,MAAM,IAAI,IAAI;AACrG,UAAM,IAAI,kBAAkB,uBAAuB,KAAK,yDAAyD;EACnH;AACA,SAAO;IACL;IACA,cAAc;IACd,GAAI,MAAM,SAAS,SAAY,EAAE,MAAM,MAAM,KAAsB,IAAK,CAAA;IACxE,GAAI,OAAO,MAAM,gBAAgB,YAAY,MAAM,YAAY,KAAI,EAAG,SAAS,IAC3E,EAAE,aAAa,MAAM,YAAY,KAAI,EAAE,IACvC,CAAA;;AAER;AAUM,SAAU,kBAAkB,KAAY;AAC5C,QAAM,aAAa,MAAM,QAAQ,GAAG,IAChC,MACA,OAAO,QAAQ,YAAY,QAAQ,OAChC,IAA8B,UAC/B;AACN,MAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC9B,UAAM,IAAI,kBAAkB,gFAAgF;EAC9G;AACA,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,IAAI,kBAAkB,gDAAgD;EAC9E;AACA,SAAO;IACL,SAAS,WAAW,IAAI,CAAC,OAAO,UAAU,oBAAoB,OAAO,KAAK,CAAC;;AAE/E;;;AD5OO,IAAM,qCAAqC,KAAK,KAAK,UAAU,mBAAmB;AAiDzF,IAAMA,oBAAwC,oBAAI,IAAoB,CAAC,WAAW,YAAY,QAAQ,CAAC;AAEvG,SAAS,cAAc,KAAuB;AAC5C,MAAI,QAAQ,QAAW;AACrB,WAAO;EACT;AACA,QAAM,aAAa,IAAI,KAAI,EAAG,YAAW;AACzC,MAAI,CAACA,kBAAiB,IAAI,UAAU,GAAG;AACrC,UAAM,IAAI,WAAW,sDAAsD,UAAU,KAAK;EAC5F;AACA,SAAO;AACT;AAEA,SAAS,WAAW,KAAgC;AAClD,MAAI,QAAQ,UAAa,QAAQ,IAAI;AACnC,WAAO;EACT;AACA,QAAM,SAAS,sBAAsB,GAAG;AACxC,MAAI,WAAW,MAAM;AACnB,UAAM,IAAI,WAAW,uCAAuC,UAAU,KAAK;EAC7E;AACA,SAAO;AACT;AAEA,SAAS,eAAe,KAAgC;AACtD,MAAI,QAAQ,UAAa,QAAQ,IAAI;AACnC,WAAO;EACT;AACA,QAAM,SAAS,OAAO,QAAQ,WAAW,MAAM,OAAO,OAAO,GAAG,EAAE,KAAI,CAAE;AACxE,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,KAAK,SAAS,GAAG;AACxD,UAAM,IAAI,WAAW,0DAA0D,UAAU,KAAK;EAChG;AACA,SAAO;AACT;AAGA,SAAS,YAAY,OAAa;AAChC,SAAO,KAAK,MAAM,QAAQ,GAAM,IAAI;AACtC;AAEA,eAAe,iBAAiB,aAAmB;AACjD,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,GAAG,SAAS,aAAa,MAAM;EAC7C,QAAQ;AACN,UAAM,IAAI,WAAW,+BAA+B,WAAW,IAAI,UAAU,WAAW;MACtF,UAAU;QACR,sEAAwE;QACxE;;MAEF,WAAW;QACT;;KAEH;EACH;AACA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,GAAG;EACzB,SAAS,OAAgB;AAEvB,UAAM,IAAI,WACR,qBAAqB,WAAW,uBAAwB,MAAgB,OAAO,IAC/E,UAAU,KAAK;EAEnB;AACA,MAAI;AACF,WAAO,kBAAkB,MAAM;EACjC,SAAS,OAAgB;AAGvB,UAAM,IAAI,WAAY,MAAgB,SAAS,UAAU,KAAK;EAChE;AACF;AAWA,eAAsB,QAAQ,SAAsB,QAAqB;AACvE,QAAM,SAAS,cAAc,QAAQ,IAAG,GAAI,OAAO,IAAI;AACvD,MAAI,CAAE,MAAM,WAAW,gBAAgB,MAAM,CAAC,GAAI;AAChD,UAAM,IAAI,WAAW,iCAAiC,MAAM,wBAAwB,UAAU,SAAS;EACzG;AACA,QAAM,IAAI,WAAW,QAAQ,CAAC;AAC9B,QAAM,cAAc,cAAc,QAAQ,IAAI;AAC9C,QAAM,YAAY,eAAe,QAAQ,SAAS;AAClD,QAAM,cAAc,QAAQ,UACxB,KAAK,QAAQ,QAAQ,IAAG,GAAI,QAAQ,OAAO,IAC3C,KAAK,KAAK,QAAQ,kCAAkC;AACxD,QAAM,WAAW,MAAM,iBAAiB,WAAW;AAEnD,QAAM,UAA6B,CAAA;AAGnC,QAAM,aAAiC,CAAA;AACvC,aAAW,aAAa,SAAS,SAAS;AACxC,UAAM,OAAO,UAAU,QAAQ;AAC/B,UAAM,eAAe,MAAM,UACzB,UAAU,OACV,EAAE,MAAM,OAAO,OAAO,CAAC,GAAG,QAAQ,KAAI,GACtC,MAAM;AAER,UAAM,YAAY,aAAa,MAC5B,IAAI,CAAC,SAAU,KAA0B,EAAE,EAC3C,OAAO,CAAC,OAAqB,OAAO,OAAO,QAAQ;AACtD,UAAM,UAAU,gBAAgB,WAAW,IAAI,IAAI,UAAU,YAAY,GAAG,CAAC;AAC7E,eAAW,KAAK,OAAO;AACvB,YAAQ,KAAK;MACX,OAAO,UAAU;MACjB;MACA,gBAAgB,QAAQ;MACxB,oBAAoB,QAAQ;MAC5B,MAAM,YAAY,QAAQ,IAAI;MAC9B,KAAK,YAAY,QAAQ,GAAG;MAC5B,WAAW,YAAY,QAAQ,SAAS;MACxC,QAAQ,YAAY,QAAQ,MAAM;KACnC;EACH;AAEA,QAAM,YAAY,qBAAqB,UAAU;AACjD,QAAM,SAAS,cAAc,UAAa,UAAU,QAAQ;AAC5D,SAAO;IACL;IACA,aAAa,SAAS,QAAQ;IAC9B,WAAW;MACT,MAAM,YAAY,UAAU,IAAI;MAChC,KAAK,YAAY,UAAU,GAAG;MAC9B,WAAW,YAAY,UAAU,SAAS;MAC1C,QAAQ,YAAY,UAAU,MAAM;;IAEtC,SAAS;IACT,GAAI,cAAc,SAAY,EAAE,YAAY,UAAS,IAAK,CAAA;IAC1D;;AAEJ","debugId":"c66b65a0-87e0-508e-b2b4-7e8c39a560eb"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../cli/register-operations.ts"],"sourcesContent":["/**\n * @module cli/register-operations\n *\n * Provides CLI runtime support for Register Operations.\n */\nimport type { Command } from \"commander\";\nimport {\n normalizeStatusInputWithRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../core/schema/runtime-schema.js\";\nimport { setActiveCommandResult } from \"../core/extensions/index.js\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { resolvePmRoot } from \"../core/store/paths.js\";\nimport { readSettings } from \"../core/store/settings.js\";\nimport {\n buildBackgroundTestAllCommandArgs,\n buildBackgroundTestCommandArgs,\n collect,\n getGlobalOptions,\n invalidateSearchCachesForMutation,\n printError,\n printResult,\n readOptionString,\n} from \"./registration-helpers.js\";\n\n/**\n * Resolve the status the `start-task` lifecycle alias should move an item to.\n * Resolves `in_progress` strictly through the workspace registry so a custom\n * workflow that omits in_progress falls back to its open status instead of\n * setting a status the workflow does not define.\n */\nexport function resolveStartTaskInProgressStatus(statusRegistry: RuntimeStatusRegistry): string {\n return normalizeStatusInputWithRegistry(\"in_progress\", statusRegistry) ?? statusRegistry.open_status;\n}\n\nfunction resolveTelemetrySubcommand(namespaceOrSubcommand: string | undefined, subcommand: string | undefined): string | undefined {\n const normalizedNamespace = namespaceOrSubcommand?.trim().toLowerCase();\n const normalizedSubcommand = subcommand?.trim().toLowerCase();\n if (normalizedNamespace === undefined || normalizedNamespace.length === 0) {\n return normalizedSubcommand;\n }\n if (normalizedNamespace === \"local-analytics\") {\n return normalizedSubcommand && normalizedSubcommand.length > 0 ? normalizedSubcommand : \"status\";\n }\n if (normalizedSubcommand !== undefined && normalizedSubcommand.length > 0) {\n throw new PmCliError(\n `Unknown pm telemetry path \"${namespaceOrSubcommand} ${subcommand}\". Use \"pm telemetry ${namespaceOrSubcommand}\" or legacy alias \"pm telemetry local-analytics ${normalizedSubcommand}\".`,\n EXIT_CODE.USAGE,\n {\n code: \"unknown_subcommand\",\n examples: [\n \"pm telemetry status\",\n \"pm telemetry flush\",\n \"pm telemetry stats --limit 10\",\n \"pm telemetry clear\",\n \"pm telemetry local-analytics status --json\",\n ],\n },\n );\n }\n return normalizedNamespace;\n}\n\nfunction collectTestMutationValues(options: Record<string, unknown>): {\n addValues: string[];\n addJsonValues: string[];\n removeValues: string[];\n} {\n return {\n addValues: Array.isArray(options.add) ? (options.add as string[]) : [],\n addJsonValues: Array.isArray(options.addJson) ? (options.addJson as string[]) : [],\n removeValues: Array.isArray(options.remove) ? (options.remove as string[]) : [],\n };\n}\n\nfunction validateBackgroundTestOptions(\n options: Record<string, unknown>,\n values: { addValues: string[]; addJsonValues: string[]; removeValues: string[] },\n): void {\n if (options.background !== true) {\n return;\n }\n if (options.run !== true) {\n throw new PmCliError(\"--background requires --run\", EXIT_CODE.USAGE);\n }\n if (values.addValues.length > 0 || values.addJsonValues.length > 0 || values.removeValues.length > 0) {\n throw new PmCliError(\"--background does not support --add/--add-json/--remove; update linked tests first, then run in background\", EXIT_CODE.USAGE);\n }\n}\n\nasync function runBackgroundLinkedTests(\n id: string,\n options: Record<string, unknown>,\n globalOptions: ReturnType<typeof getGlobalOptions>,\n values: { addValues: string[]; addJsonValues: string[]; removeValues: string[] },\n): Promise<void> {\n const { runStartBackgroundRun } = await import(\"./commands/test-runs.js\");\n const result = await runStartBackgroundRun({\n kind: \"test\",\n commandArgs: buildBackgroundTestCommandArgs(id, { ...options, add: values.addValues, addJson: values.addJsonValues, remove: values.removeValues }),\n targetId: id,\n author: typeof options.author === \"string\" ? options.author : undefined,\n noExtensions: globalOptions.noExtensions === true,\n }, globalOptions);\n printResult(result, globalOptions);\n}\n\nfunction buildRunTestOptions(\n options: Record<string, unknown>,\n values: { addValues: string[]; addJsonValues: string[]; removeValues: string[] },\n) {\n return {\n add: values.addValues,\n addJson: values.addJsonValues,\n remove: values.removeValues,\n list: Boolean(options.list),\n run: Boolean(options.run),\n match: typeof options.match === \"string\" ? options.match : undefined,\n onlyIndex: typeof options.onlyIndex === \"string\" || typeof options.onlyIndex === \"number\" ? options.onlyIndex : undefined,\n onlyLast: Boolean(options.onlyLast),\n timeout: typeof options.timeout === \"string\" ? options.timeout : undefined,\n progress: Boolean(options.progress),\n envSet: Array.isArray(options.envSet) ? (options.envSet as string[]) : [],\n envClear: Array.isArray(options.envClear) ? (options.envClear as string[]) : [],\n sharedHostSafe: Boolean(options.sharedHostSafe),\n pmContext: typeof options.pmContext === \"string\" ? options.pmContext : undefined,\n overrideLinkedPmContext: Boolean(options.overrideLinkedPmContext),\n failOnContextMismatch: Boolean(options.failOnContextMismatch),\n failOnSkipped: Boolean(options.failOnSkipped),\n failOnEmptyTestRun: Boolean(options.failOnEmptyTestRun),\n requireAssertionsForPm: Boolean(options.requireAssertionsForPm),\n checkContext: Boolean(options.checkContext),\n autoPmContext: Boolean(options.autoPmContext),\n author: typeof options.author === \"string\" ? options.author : undefined,\n message: typeof options.message === \"string\" ? options.message : undefined,\n force: Boolean(options.force),\n };\n}\n\nasync function runForegroundLinkedTests(\n id: string,\n options: Record<string, unknown>,\n globalOptions: ReturnType<typeof getGlobalOptions>,\n values: { addValues: string[]; addJsonValues: string[]; removeValues: string[] },\n): Promise<void> {\n const { runTest } = await import(\"./commands/test.js\");\n const result = await runTest(id, buildRunTestOptions(options, values), globalOptions);\n if (values.addValues.length > 0 || values.addJsonValues.length > 0 || values.removeValues.length > 0 || options.run === true) {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (result.run_results.some((entry) => entry.status === \"failed\") || result.fail_on_skipped_triggered === true) {\n process.exitCode = EXIT_CODE.DEPENDENCY_FAILED;\n }\n}\n\nasync function runTestCommandAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const values = collectTestMutationValues(options);\n validateBackgroundTestOptions(options, values);\n if (options.background === true) {\n await runBackgroundLinkedTests(id, options, globalOptions, values);\n } else {\n await runForegroundLinkedTests(id, options, globalOptions, values);\n }\n if (globalOptions.profile) {\n printError(`profile:command=test took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction buildLifecycleMutationOptions(options: Record<string, unknown>): {\n author: string | undefined;\n message: string | undefined;\n} {\n return {\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n };\n}\n\nasync function runTestAllAction(options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const runInBackground = options.background === true;\n if (runInBackground) {\n const { runStartBackgroundRun } = await import(\"./commands/test-runs.js\");\n const result = await runStartBackgroundRun({\n kind: \"test-all\",\n commandArgs: buildBackgroundTestAllCommandArgs(options),\n statusFilter: readOptionString(options, \"status\"),\n noExtensions: globalOptions.noExtensions === true,\n }, globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=test-all took_ms=${Date.now() - startedAt}`);\n }\n return;\n }\n const { runTestAll } = await import(\"./commands/test-all.js\");\n const result = await runTestAll({\n status: readOptionString(options, \"status\"),\n limit: readOptionString(options, \"limit\"),\n offset: readOptionString(options, \"offset\"),\n timeout: readOptionString(options, \"timeout\"),\n progress: Boolean(options.progress),\n envSet: Array.isArray(options.envSet) ? (options.envSet as string[]) : [],\n envClear: Array.isArray(options.envClear) ? (options.envClear as string[]) : [],\n sharedHostSafe: Boolean(options.sharedHostSafe),\n pmContext: readOptionString(options, \"pmContext\"),\n overrideLinkedPmContext: Boolean(options.overrideLinkedPmContext),\n failOnContextMismatch: Boolean(options.failOnContextMismatch),\n failOnSkipped: Boolean(options.failOnSkipped),\n failOnEmptyTestRun: Boolean(options.failOnEmptyTestRun),\n requireAssertionsForPm: Boolean(options.requireAssertionsForPm),\n checkContext: Boolean(options.checkContext),\n autoPmContext: Boolean(options.autoPmContext),\n }, globalOptions);\n await invalidateSearchCachesForMutation(globalOptions, { ids: result.results.map((entry) => entry.id) });\n printResult(result, globalOptions);\n if (result.failed > 0 || result.fail_on_skipped_triggered === true) {\n process.exitCode = EXIT_CODE.DEPENDENCY_FAILED;\n }\n if (globalOptions.profile) {\n printError(`profile:command=test-all took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runTelemetryAction(\n namespaceOrSubcommand: string | undefined,\n subcommand: string | undefined,\n options: Record<string, unknown>,\n command: Command,\n): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runTelemetry } = await import(\"./commands/telemetry.js\");\n const result = await runTelemetry(\n {\n subcommand: resolveTelemetrySubcommand(namespaceOrSubcommand, subcommand),\n // Commander always parses `--limit <n>` to a string (or leaves it\n // undefined), so a string passthrough covers every CLI-reachable input.\n limit: readOptionString(options, \"limit\"),\n },\n globalOptions,\n );\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=telemetry took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runStatsAction(options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runStats } = await import(\"./commands/stats.js\");\n const result = await runStats(globalOptions, {\n storage: options.storage === true,\n metadataCoverage: options.metadataCoverage === true,\n byAssignee: options.byAssignee === true,\n byTag: options.byTag === true,\n byPriority: options.byPriority === true,\n tagPrefix: readOptionString(options, \"tagPrefix\"),\n fieldUtilization: options.fieldUtilization === true,\n });\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=stats took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runHealthAction(options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runHealth } = await import(\"./commands/health.js\");\n const result = await runHealth(globalOptions, {\n strictDirectories: Boolean(options.strictDirectories),\n checkOnly: Boolean(options.checkOnly),\n checkTelemetry: Boolean(options.checkTelemetry),\n noRefresh: Boolean(options.noRefresh),\n refreshVectors: Boolean(options.refreshVectors),\n verboseStaleItems: Boolean(options.verboseStaleItems),\n brief: Boolean(options.brief),\n summary: Boolean(options.summary),\n skipVectors: Boolean(options.skipVectors),\n skipIntegrity: Boolean(options.skipIntegrity),\n skipDrift: Boolean(options.skipDrift),\n full: Boolean(options.full),\n });\n printResult(result, globalOptions);\n const strictExit = Boolean(options.strictExit) || Boolean(options.failOnWarn);\n if (strictExit && !result.ok) {\n setActiveCommandResult({\n ...result,\n exit_code: EXIT_CODE.GENERIC_FAILURE,\n error_code: \"health_findings\",\n error_category: \"validation\",\n command_resolution: \"health_findings\",\n resolution_stage: \"execute\",\n });\n process.exitCode = EXIT_CODE.GENERIC_FAILURE;\n }\n if (globalOptions.profile) {\n printError(`profile:command=health took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runValidateAction(options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runValidate } = await import(\"./commands/validate.js\");\n const result = await runValidate({\n checkMetadata: Boolean(options.checkMetadata),\n metadataProfile: readOptionString(options, \"metadataProfile\"),\n checkResolution: Boolean(options.checkResolution),\n checkLifecycle: Boolean(options.checkLifecycle),\n checkStaleBlockers: Boolean(options.checkStaleBlockers),\n dependencyCycleSeverity: readOptionString(options, \"dependencyCycleSeverity\"),\n parentCycleSeverity: readOptionString(options, \"parentCycleSeverity\"),\n checkFiles: Boolean(options.checkFiles),\n checkCommandReferences: Boolean(options.checkCommandReferences),\n scanMode: readOptionString(options, \"scanMode\"),\n includePmInternals: Boolean(options.includePmInternals),\n verboseFileLists: Boolean(options.verboseFileLists),\n verboseDiagnostics: Boolean(options.verboseDiagnostics),\n allAffectedIds: Boolean(options.allAffectedIds),\n checkHistoryDrift: Boolean(options.checkHistoryDrift),\n fixHints: Boolean(options.fixHints),\n autoFix: Boolean(options.autoFix),\n dryRun: Boolean(options.dryRun),\n fixScope: Array.isArray(options.fixScope) ? (options.fixScope as string[]) : undefined,\n pruneMissing: Boolean(options.pruneMissing),\n }, globalOptions);\n printResult(result, globalOptions);\n const strictExit = Boolean(options.strictExit) || Boolean(options.failOnWarn);\n if (strictExit && (result.has_warnings || !result.ok)) {\n setActiveCommandResult({\n ...result,\n exit_code: EXIT_CODE.GENERIC_FAILURE,\n error_code: \"validation_findings\",\n error_category: \"validation\",\n command_resolution: \"validation_findings\",\n resolution_stage: \"execute\",\n });\n process.exitCode = EXIT_CODE.GENERIC_FAILURE;\n }\n if (globalOptions.profile) {\n printError(`profile:command=validate took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runGcAction(options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runGc } = await import(\"./commands/gc.js\");\n const result = await runGc(globalOptions, {\n dryRun: options.dryRun === true,\n scope: Array.isArray(options.scope) ? (options.scope as string[]) : [],\n });\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=gc took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runContractsAction(options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runContracts } = await import(\"./commands/contracts.js\");\n const result = await runContracts({\n action: readOptionString(options, \"action\"),\n command: readOptionString(options, \"command\"),\n schemaOnly: Boolean(options.schemaOnly),\n flagsOnly: Boolean(options.flagsOnly),\n availabilityOnly: Boolean(options.availabilityOnly),\n runtimeOnly: Boolean(options.runtimeOnly) || Boolean(options.activeOnly),\n full: Boolean(options.full),\n }, globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=contracts took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runClaimAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runClaim } = await import(\"./commands/claim.js\");\n const result = await runClaim(id, Boolean(options.force), globalOptions, {\n ...buildLifecycleMutationOptions(options),\n ifAvailable: options.ifAvailable === true,\n });\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=claim took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runReleaseAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runRelease } = await import(\"./commands/claim.js\");\n const result = await runRelease(id, Boolean(options.force), globalOptions, {\n ...buildLifecycleMutationOptions(options),\n allowAuditRelease: options.allowAuditRelease === true,\n });\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=release took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runStartTaskAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const pmRoot = resolvePmRoot(process.cwd(), globalOptions.path);\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const inProgressStatus = resolveStartTaskInProgressStatus(statusRegistry);\n const force = Boolean(options.force);\n const mutationOptions = buildLifecycleMutationOptions(options);\n const [{ runClaim }, { runUpdate }] = await Promise.all([\n import(\"./commands/claim.js\"),\n import(\"./commands/update.js\"),\n ]);\n const claimResult = await runClaim(id, force, globalOptions, mutationOptions);\n await invalidateSearchCachesForMutation(globalOptions, claimResult);\n const updateResult = await runUpdate(id, { ...mutationOptions, status: inProgressStatus, force }, globalOptions);\n await invalidateSearchCachesForMutation(globalOptions, updateResult);\n printResult({ id, action: \"start_task\", claim: claimResult, update: updateResult }, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=start-task took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runPauseTaskAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const pmRoot = resolvePmRoot(process.cwd(), globalOptions.path);\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const force = Boolean(options.force);\n const mutationOptions = buildLifecycleMutationOptions(options);\n const [{ runUpdate }, { runRelease }] = await Promise.all([\n import(\"./commands/update.js\"),\n import(\"./commands/claim.js\"),\n ]);\n const updateResult = await runUpdate(id, { ...mutationOptions, status: statusRegistry.open_status, force }, globalOptions);\n await invalidateSearchCachesForMutation(globalOptions, updateResult);\n const releaseResult = await runRelease(id, force, globalOptions, mutationOptions);\n await invalidateSearchCachesForMutation(globalOptions, releaseResult);\n printResult({ id, action: \"pause_task\", update: updateResult, release: releaseResult }, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=pause-task took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runCloseTaskAction(\n id: string,\n reason: string | undefined,\n options: Record<string, unknown>,\n command: Command,\n): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const force = Boolean(options.force);\n const mutationOptions = buildLifecycleMutationOptions(options);\n const [{ runClose }, { runRelease }] = await Promise.all([\n import(\"./commands/close.js\"),\n import(\"./commands/claim.js\"),\n ]);\n const closeResult = await runClose(id, reason, {\n ...mutationOptions,\n validateClose: readOptionString(options, \"validateClose\"),\n force,\n }, globalOptions);\n await invalidateSearchCachesForMutation(globalOptions, closeResult);\n const releaseResult = await runRelease(id, force, globalOptions, mutationOptions);\n await invalidateSearchCachesForMutation(globalOptions, releaseResult);\n printResult({ id, action: \"close_task\", close: closeResult, release: releaseResult }, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=close-task took_ms=${Date.now() - startedAt}`);\n }\n}\n\n\n\n/**\n * Implements register operation commands for the public runtime surface of this module.\n */\nexport function registerOperationCommands(program: Command): void {\n program\n .command(\"test\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--add <value>\", \"Add linked test entry (CSV/markdown pairs or - for stdin)\", collect)\n .option(\"--add-json <value>\", \"Add linked test entry from JSON object/array (or - for stdin)\", collect)\n .option(\"--remove <value>\", \"Remove linked test entry by command/path (command=<value>, path=<value>, markdown pairs, plain value, or - for stdin)\", collect)\n .option(\"--list\", \"List linked tests without mutating\")\n .option(\"--run\", \"Run linked test commands\")\n .option(\"--match <value>\", \"Run only linked tests whose command/path contains this substring\")\n .option(\"--only-index <n>\", \"Run only the 1-based linked-test index from --list order\")\n .option(\"--only-last\", \"Run only the most recently added linked test\")\n .option(\"--background\", \"Run linked tests in managed background mode\")\n .option(\"--timeout <seconds>\", \"Default run timeout in seconds\")\n .option(\"--progress\", \"Emit linked-test progress to stderr (always shown in TTY, opt-in for non-TTY)\")\n .option(\"--env-set <value>\", \"Set environment variable(s) for linked-test runs (KEY=VALUE, repeatable)\", collect)\n .option(\"--env-clear <value>\", \"Clear environment variable(s) for linked-test runs (NAME, repeatable)\", collect)\n .option(\"--shared-host-safe\", \"Apply additive shared-host-safe runtime defaults for linked-test runs\")\n .option(\"--pm-context <mode>\", \"PM linked-test context mode: schema|tracker|auto (default: schema)\")\n .option(\"--override-linked-pm-context\", \"Force run-level --pm-context to override per-linked-test pm_context_mode metadata\")\n .option(\"--fail-on-context-mismatch\", \"Fail linked PM commands when context item counts differ\")\n .option(\"--fail-on-skipped\", \"Treat skipped linked tests as dependency failures\")\n .option(\"--fail-on-empty-test-run\", \"Treat successful linked-test commands that report zero executed tests as failures\")\n .option(\"--require-assertions-for-pm\", \"Require assertion metadata for linked PM command tests\")\n .option(\"--check-context\", \"Preflight linked PM command context diagnostics before executing commands\")\n .option(\"--auto-pm-context\", \"Auto-remediate PM tracker-read context mismatches by routing those linked commands through tracker context\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force ownership override\")\n .description(\"Manage tests linked to an item and optionally run them.\")\n .action(runTestCommandAction);\n\n program\n .command(\"test-all\")\n .description(\"Run linked tests across matching items.\")\n .option(\"--status <value>\", \"Filter items by status before running tests\")\n .option(\"--limit <n>\", \"Limit matching items before running linked tests\")\n .option(\"--offset <n>\", \"Skip matching items before running linked tests\")\n .option(\"--background\", \"Run linked tests in managed background mode\")\n .option(\"--timeout <seconds>\", \"Default run timeout in seconds\")\n .option(\"--progress\", \"Emit linked-test progress to stderr (always shown in TTY, opt-in for non-TTY)\")\n .option(\"--env-set <value>\", \"Set environment variable(s) for linked-test runs (KEY=VALUE, repeatable)\", collect)\n .option(\"--env-clear <value>\", \"Clear environment variable(s) for linked-test runs (NAME, repeatable)\", collect)\n .option(\"--shared-host-safe\", \"Apply additive shared-host-safe runtime defaults for linked-test runs\")\n .option(\"--pm-context <mode>\", \"PM linked-test context mode: schema|tracker|auto (default: schema)\")\n .option(\"--override-linked-pm-context\", \"Force run-level --pm-context to override per-linked-test pm_context_mode metadata\")\n .option(\"--fail-on-context-mismatch\", \"Fail linked PM commands when context item counts differ\")\n .option(\"--fail-on-skipped\", \"Treat skipped linked tests as dependency failures\")\n .option(\"--fail-on-empty-test-run\", \"Treat successful linked-test commands that report zero executed tests as failures\")\n .option(\"--require-assertions-for-pm\", \"Require assertion metadata for linked PM command tests\")\n .option(\"--check-context\", \"Preflight linked PM command context diagnostics before executing commands\")\n .option(\"--auto-pm-context\", \"Auto-remediate PM tracker-read context mismatches by routing those linked commands through tracker context\")\n .action(runTestAllAction);\n\n program\n .command(\"test-runs-worker\", { hidden: true })\n .argument(\"<runId>\", \"Background run id\")\n .description(\"Internal background worker command.\")\n .action(async (runId: string, _options: Record<string, unknown>, command: Command) => {\n const globalOptions = getGlobalOptions(command);\n const { runTestRunsWorker } = await import(\"./commands/test-runs.js\");\n await runTestRunsWorker(runId, globalOptions);\n });\n\n program\n .command(\"telemetry\")\n .argument(\"[namespaceOrSubcommand]\", \"Telemetry subcommand: status, flush, stats, clear (default: status)\")\n .argument(\"[subcommand]\", \"Compatibility alias target for local-analytics: status, flush, stats, clear\")\n .option(\"--limit <n>\", \"Maximum command groups returned by telemetry stats\")\n .description(\"Inspect and manage local telemetry queue/runtime state.\")\n .action(runTelemetryAction);\n\n program\n .command(\"stats\")\n .description(\"Show project tracker statistics.\")\n .option(\n \"--storage\",\n \"Include aggregate history-stream storage metrics (total streams/lines/bytes, largest + deepest streams, oldest/newest entries)\",\n )\n .option(\n \"--metadata-coverage\",\n \"Include metadata coverage % (acceptance_criteria, estimated_minutes, resolution, tags, parent) overall and by type\",\n )\n .option(\"--by-assignee\", \"Include a lifecycle-bucketed item breakdown grouped by assignee\")\n .option(\"--by-tag\", \"Include a lifecycle-bucketed item breakdown grouped by tag\")\n .option(\"--by-priority\", \"Include a lifecycle-bucketed item breakdown grouped by priority\")\n .option(\"--tag-prefix <value>\", \"With --by-tag: only count tags starting with this prefix (e.g. domain:)\")\n .option(\n \"--field-utilization\",\n \"Report content-field utilization rates (notes/learnings/files/docs/tests/comments/deps/body) for governance audits\",\n )\n .action(runStatsAction);\n\n program\n .command(\"health\")\n .description(\"Show project tracker health checks.\")\n .option(\"--strict-directories\", \"Treat optional item-type directories as required failures\")\n .option(\"--check-only\", \"Run read-only health diagnostics without refreshing vectors\")\n .option(\"--check-telemetry\", \"Probe telemetry endpoint health and include network diagnostics\")\n .option(\"--no-refresh\", \"Disable automatic vector refresh attempts during health checks\")\n .option(\"--refresh-vectors\", \"Explicitly enable vector refresh attempts during health checks\")\n .option(\"--verbose-stale-items\", \"Include full stale vectorization ID lists in health output\")\n .option(\"--brief\", \"Emit compact health details for low-token agent checks\")\n .option(\"--summary\", \"Emit one-line-style health status with check names and warning count\")\n .option(\"--skip-vectors\", \"Skip vectorization check for a faster run\")\n .option(\"--skip-integrity\", \"Skip item/history file integrity check for a faster run\")\n .option(\"--skip-drift\", \"Skip history drift hash check for a faster run\")\n .option(\"--full\", \"Run all checks including slow integrity, drift, and vectorization checks\")\n .option(\n \"--strict-exit\",\n \"Return non-zero exit when health is not ok (advisory telemetry warnings are excluded; see warnings[])\",\n )\n .option(\"--fail-on-warn\", \"Alias for --strict-exit\")\n .action(runHealthAction);\n\n program\n .command(\"validate\")\n .description(\"Run standalone metadata, resolution, lifecycle, files, linked-command reference, and history drift validation checks.\")\n .option(\"--check-metadata\", \"Run metadata completeness checks\")\n .option(\"--metadata-profile <value>\", \"Select metadata validation profile for --check-metadata (core|strict|custom)\")\n .option(\"--check-resolution\", \"Run closed-item resolution metadata checks\")\n .option(\"--check-lifecycle\", \"Run active-item lifecycle governance drift checks\")\n .option(\"--check-stale-blockers\", \"Include stale blocker-pattern diagnostics in lifecycle checks\")\n .option(\"--dependency-cycle-severity <value>\", \"Set dependency-cycle warning policy for lifecycle checks (off|warn|error)\")\n .option(\"--parent-cycle-severity <value>\", \"Set parent-hierarchy cycle warning policy for lifecycle checks (off|warn|error)\")\n .option(\"--check-files\", \"Run linked-file and orphaned-file checks\")\n .option(\"--check-command-references\", \"Run linked-command PM-ID reference checks\")\n .option(\"--scan-mode <value>\", \"Select file candidate scan mode for --check-files (default|tracked-all|tracked-all-strict)\")\n .option(\"--include-pm-internals\", \"Include PM storage internals in tracked-all candidate scans\")\n .option(\"--verbose-file-lists\", \"Include full file-path lists for validate --check-files details\")\n .option(\"--verbose-diagnostics\", \"Include full validate diagnostic ID lists instead of compact summaries\")\n .option(\"--all-affected-ids\", \"Emit complete missing_* affected-ID lists with no truncation (implied by --json)\")\n .option(\"--strict-exit\", \"Return non-zero exit when validation warnings are present\")\n .option(\"--fail-on-warn\", \"Alias for --strict-exit\")\n .option(\"--fix-hints\", \"Add a machine-executable fix_hints[] of pm commands to each failing check's details\")\n .option(\"--auto-fix\", \"Apply the safe, deterministic subset of fix-hint remediations (field backfills) automatically\")\n .option(\"--dry-run\", \"Preview planned --auto-fix/--prune-missing fixes without applying them\")\n .option(\"--fix-scope <scope>\", \"Grant --auto-fix scopes (metadata, resolution, lifecycle; comma-separated or repeatable). Default: metadata, resolution; lifecycle must be named explicitly\", collect)\n .option(\"--prune-missing\", \"Remove stale linked-file/doc LINKS whose paths classified as deleted (never touches real files)\")\n .option(\"--check-history-drift\", \"Run item/history hash drift checks\")\n .action(runValidateAction);\n\n program\n .command(\"gc\")\n .option(\"--dry-run\", \"Preview cleanup targets without deleting files; without this flag, pm gc deletes matched artifacts\")\n .option(\"--scope <value>\", \"Limit cleanup to one or more scopes (comma-separated or repeatable): index, embeddings, runtime, locks, checkpoints\", collect)\n .description(\"Delete optional cache artifacts by default (including expired lock debris) and show a summary.\")\n .action(runGcAction);\n\n program\n .command(\"contracts\")\n .description(\"Show machine-readable command and schema contracts for agents.\")\n .option(\"--action <value>\", \"Filter tool schema branches to a specific action\")\n .option(\"--command <value>\", \"Scope contracts output to one CLI command (narrow-by-default)\")\n .option(\"--schema-only\", \"Return schema-focused output only\")\n .option(\"--flags-only\", \"Return command flag contracts only\")\n .option(\"--availability-only\", \"Return action availability surface only\")\n .option(\"--runtime-only\", \"Include only actions invocable in the current runtime\")\n .option(\"--active-only\", \"Alias for --runtime-only\")\n .option(\n \"--full\",\n \"Include full schema and command-flag surfaces (large; default brief output omits heavy sections for unfiltered queries)\",\n )\n .action(runContractsAction);\n\n program\n .command(\"claim\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force claim override\")\n .option(\"--if-available\", \"Skip silently when the item is already claimed by another author (returns skipped=true)\")\n .description(\"Claim an item for active work.\")\n .action(runClaimAction);\n\n program\n .command(\"release\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--allow-audit-release\", \"Allow non-owner release handoffs without requiring --force\")\n .option(\"--force\", \"Force release override\")\n .description(\"Release an item's active claim.\")\n .action(runReleaseAction);\n\n program\n .command(\"start-task\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force ownership or terminal override when required\")\n .description(\"Lifecycle alias: claim an item and move it to in_progress.\")\n .action(runStartTaskAction);\n\n program\n .command(\"pause-task\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force ownership override when required\")\n .description(\"Lifecycle alias: move an item to open and release its claim.\")\n .action(runPauseTaskAction);\n\n program\n .command(\"close-task\")\n .argument(\"<id>\", \"Item id\")\n .argument(\"[reason]\", \"Close reason text\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--validate-close <value>\", \"Close-time validation mode: off|warn|strict\")\n .option(\"--force\", \"Force ownership or terminal override when required\")\n .description(\"Lifecycle alias: close an item and release assignment metadata.\")\n .action(runCloseTaskAction);\n\n registerSchedulingShortcutCommands(program);\n}\n\n/**\n * Optional string accessor for loosely-typed commander option bags.\n */\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\n/**\n * Common create-passthrough options shared by every scheduling shortcut.\n */\nfunction buildShortcutCommonOptions(options: Record<string, unknown>): {\n parent?: string;\n allowMissingParent?: boolean;\n tags?: string;\n priority?: string;\n body?: string;\n description?: string;\n author?: string;\n message?: string;\n} {\n return {\n parent: optionalString(options.parent),\n allowMissingParent: options.allowMissingParent === true ? true : undefined,\n tags: optionalString(options.tags),\n priority: optionalString(options.priority),\n body: optionalString(options.body),\n description: optionalString(options.description),\n author: optionalString(options.author),\n message: optionalString(options.message),\n };\n}\n\n/**\n * GH-217: register the `pm meet`/`pm event`/`pm remind` scheduling shortcuts.\n * Each is a thin friendly-flag wrapper over `runCreate` for an otherwise-unused\n * scheduling type.\n */\nfunction registerSchedulingShortcutCommands(program: Command): void {\n for (const { name, describe } of [\n { name: \"meet\", describe: \"Shortcut: create a Meeting with a start time and duration.\" },\n { name: \"event\", describe: \"Shortcut: create an Event with a start time and duration.\" },\n ] as const) {\n program\n .command(name)\n .argument(\"<title>\", \"Item title\")\n .option(\"--start <when>\", \"Start time (ISO, 'now', or relative like +1h/+2d); defaults to now\")\n .option(\"--duration <span>\", \"Duration from start (relative like 1h/2d); defaults to 1h when --end is omitted\")\n .option(\"--end <when>\", \"End time (ISO or relative); overrides --duration\")\n .option(\"--location <value>\", \"Location\")\n .option(\"--timezone <value>\", \"IANA timezone (for example America/New_York)\")\n .option(\"--all-day\", \"Mark as an all-day event\")\n .option(\"--parent <id>\", \"Parent item id\")\n .option(\"--allow-missing-parent\", \"Permit a parent id that does not exist yet\")\n .option(\"--tags <list>\", \"Comma-separated tags\")\n .option(\"--priority <value>\", \"Priority\")\n .option(\"--body <text>\", \"Body/markdown content\")\n .option(\"--description <text>\", \"Short description\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .description(describe)\n .action(async (title: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runMeet, runEvent } = await import(\"./commands/scheduling-shortcuts.js\");\n const run = name === \"meet\" ? runMeet : runEvent;\n const result = await run(\n title,\n {\n ...buildShortcutCommonOptions(options),\n start: optionalString(options.start),\n duration: optionalString(options.duration),\n end: optionalString(options.end),\n location: optionalString(options.location),\n timezone: optionalString(options.timezone),\n allDay: options.allDay === true ? true : undefined,\n },\n globalOptions,\n );\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=${name} took_ms=${Date.now() - startedAt}`);\n }\n });\n }\n\n program\n .command(\"remind\")\n .argument(\"<title>\", \"Item title\")\n .option(\"--at <when>\", \"Reminder time (ISO, 'now', or relative like +2d); defaults to +1d\")\n .option(\"--text <value>\", \"Reminder text; defaults to the title\")\n .option(\"--parent <id>\", \"Parent item id\")\n .option(\"--allow-missing-parent\", \"Permit a parent id that does not exist yet\")\n .option(\"--tags <list>\", \"Comma-separated tags\")\n .option(\"--priority <value>\", \"Priority\")\n .option(\"--body <text>\", \"Body/markdown content\")\n .option(\"--description <text>\", \"Short description\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .description(\"Shortcut: create a Reminder from a single point in time.\")\n .action(async (title: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runRemind } = await import(\"./commands/scheduling-shortcuts.js\");\n const result = await runRemind(\n title,\n {\n ...buildShortcutCommonOptions(options),\n at: optionalString(options.at),\n text: optionalString(options.text),\n },\n globalOptions,\n );\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=remind took_ms=${Date.now() - startedAt}`);\n }\n });\n}\n"],"names":["result"],"mappings":"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","debugId":"7db94c3b-606d-5012-ae73-2bd8f2fcc921"}