@unbrained/pm-cli 2026.7.16 → 2026.7.18

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 (620) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +30 -2
  3. package/CONTRIBUTING.md +2 -2
  4. package/dist/cli/bootstrap-args.d.ts +2 -115
  5. package/dist/cli/bootstrap-args.js +4 -831
  6. package/dist/cli/bootstrap-args.js.map +1 -1
  7. package/dist/cli/commands/close.d.ts +1 -1
  8. package/dist/cli/commands/close.js +3 -3
  9. package/dist/cli/commands/close.js.map +1 -1
  10. package/dist/cli/commands/completion.js +47 -5
  11. package/dist/cli/commands/completion.js.map +1 -1
  12. package/dist/cli/commands/context.d.ts +2 -2
  13. package/dist/cli/commands/context.js +42 -28
  14. package/dist/cli/commands/context.js.map +1 -1
  15. package/dist/cli/commands/contracts.js +5 -3
  16. package/dist/cli/commands/contracts.js.map +1 -1
  17. package/dist/cli/commands/eval.d.ts +4 -64
  18. package/dist/cli/commands/eval.js +4 -153
  19. package/dist/cli/commands/eval.js.map +1 -1
  20. package/dist/cli/commands/graph.d.ts +7 -0
  21. package/dist/cli/commands/graph.js +11 -0
  22. package/dist/cli/commands/graph.js.map +1 -0
  23. package/dist/cli/commands/index.d.ts +1 -0
  24. package/dist/cli/commands/index.js +3 -2
  25. package/dist/cli/commands/index.js.map +1 -1
  26. package/dist/cli/commands/linked-test-entry.d.ts +6 -6
  27. package/dist/cli/commands/linked-test-entry.js +4 -65
  28. package/dist/cli/commands/linked-test-entry.js.map +1 -1
  29. package/dist/cli/commands/linked-test-parsers.d.ts +3 -45
  30. package/dist/cli/commands/linked-test-parsers.js +4 -516
  31. package/dist/cli/commands/linked-test-parsers.js.map +1 -1
  32. package/dist/cli/commands/list.d.ts +3 -210
  33. package/dist/cli/commands/list.js +4 -1068
  34. package/dist/cli/commands/list.js.map +1 -1
  35. package/dist/cli/commands/next.d.ts +1 -1
  36. package/dist/cli/commands/next.js +3 -3
  37. package/dist/cli/commands/next.js.map +1 -1
  38. package/dist/cli/commands/search.d.ts +3 -464
  39. package/dist/cli/commands/search.js +4 -2236
  40. package/dist/cli/commands/search.js.map +1 -1
  41. package/dist/cli/commands/stats.d.ts +6 -66
  42. package/dist/cli/commands/stats.js +4 -157
  43. package/dist/cli/commands/stats.js.map +1 -1
  44. package/dist/cli/commands/telemetry.d.ts +6 -14
  45. package/dist/cli/commands/telemetry.js +4 -349
  46. package/dist/cli/commands/telemetry.js.map +1 -1
  47. package/dist/cli/commands/test-all.d.ts +6 -95
  48. package/dist/cli/commands/test-all.js +4 -439
  49. package/dist/cli/commands/test-all.js.map +1 -1
  50. package/dist/cli/commands/test-runs.d.ts +6 -92
  51. package/dist/cli/commands/test-runs.js +4 -189
  52. package/dist/cli/commands/test-runs.js.map +1 -1
  53. package/dist/cli/commands/test.d.ts +6 -244
  54. package/dist/cli/commands/test.js +4 -1780
  55. package/dist/cli/commands/test.js.map +1 -1
  56. package/dist/cli/commands/update-many.d.ts +15 -29
  57. package/dist/cli/commands/update-many.js +355 -259
  58. package/dist/cli/commands/update-many.js.map +1 -1
  59. package/dist/cli/main.js +141 -133
  60. package/dist/cli/main.js.map +1 -1
  61. package/dist/cli/register-list-query.js +49 -7
  62. package/dist/cli/register-list-query.js.map +1 -1
  63. package/dist/cli/register-mutation.js +7 -3
  64. package/dist/cli/register-mutation.js.map +1 -1
  65. package/dist/cli/search-refresh.js +4 -9
  66. package/dist/cli/search-refresh.js.map +1 -1
  67. package/dist/cli/shared-parsers.d.ts +6 -9
  68. package/dist/cli/shared-parsers.js +4 -37
  69. package/dist/cli/shared-parsers.js.map +1 -1
  70. package/dist/cli/telemetry-flush.js +4 -4
  71. package/dist/cli/telemetry-flush.js.map +1 -1
  72. package/dist/cli-bundle/bundle-manifest.json +334 -326
  73. package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js → append-5YF3TO7I.js} +5 -5
  74. package/dist/cli-bundle/chunks/append-JHO5K6RP.js +11 -0
  75. package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js → chunk-2BX74BAS.js} +3 -3
  76. package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js → chunk-2CXL335K.js} +3 -3
  77. package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js → chunk-2FUOXSRN.js} +4 -4
  78. package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js → chunk-2IPNL3DR.js} +3 -3
  79. package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js → chunk-2XOSFSTH.js} +5 -5
  80. package/dist/cli-bundle/chunks/{chunk-UFXU44HV.js → chunk-35FHWD4C.js} +6 -6
  81. package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js.map → chunk-35FHWD4C.js.map} +1 -7
  82. package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js → chunk-37DRDP2B.js} +5 -5
  83. package/dist/cli-bundle/chunks/{chunk-BKVG6XOA.js → chunk-3CUQZNQ6.js} +67 -509
  84. package/dist/cli-bundle/chunks/chunk-3CUQZNQ6.js.map +7 -0
  85. package/dist/cli-bundle/chunks/chunk-3QDR6ZLU.js +800 -0
  86. package/dist/cli-bundle/chunks/chunk-3QDR6ZLU.js.map +7 -0
  87. package/dist/cli-bundle/chunks/{chunk-5JLUII3O.js → chunk-43UMFKCK.js} +321 -240
  88. package/dist/cli-bundle/chunks/chunk-43UMFKCK.js.map +1 -0
  89. package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js → chunk-47HXN6RX.js} +3 -3
  90. package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js → chunk-5HGZKQUL.js} +4 -4
  91. package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js → chunk-5UKQLQM2.js} +2 -2
  92. package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js → chunk-633PKXLT.js} +3 -3
  93. package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js → chunk-646MQXFW.js} +2 -2
  94. package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js → chunk-66MKH7SZ.js} +4 -4
  95. package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js → chunk-67RO3H4N.js} +4 -4
  96. package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js → chunk-6DYOZS6C.js} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js → chunk-6O44IN44.js} +2 -2
  98. package/dist/cli-bundle/chunks/{chunk-5ZSLZLDN.js → chunk-6VHUGVNP.js} +608 -456
  99. package/dist/cli-bundle/chunks/chunk-6VHUGVNP.js.map +1 -0
  100. package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js → chunk-74FKFFXO.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js → chunk-7H5NNCJ5.js} +4 -4
  102. package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js → chunk-7R6UIHYY.js} +75 -5
  103. package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js.map → chunk-7R6UIHYY.js.map} +1 -1
  104. package/dist/cli-bundle/chunks/{chunk-3S5QVM5H.js → chunk-7UCY6DR5.js} +193 -22
  105. package/dist/cli-bundle/chunks/chunk-7UCY6DR5.js.map +1 -0
  106. package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js → chunk-ADXDCAKP.js} +16 -7
  107. package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js.map → chunk-ADXDCAKP.js.map} +1 -1
  108. package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js → chunk-AFGKSHAM.js} +4 -4
  109. package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js → chunk-ARGDWQ4J.js} +2 -2
  110. package/dist/cli-bundle/chunks/{chunk-XXXF6PAQ.js → chunk-AXRT7K5V.js} +83 -62
  111. package/dist/cli-bundle/chunks/chunk-AXRT7K5V.js.map +7 -0
  112. package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js → chunk-B57RJHBZ.js} +4 -4
  113. package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js → chunk-BAP7G3N2.js} +2 -2
  114. package/dist/cli-bundle/chunks/{chunk-NLDFBC6J.js → chunk-BDA35QG5.js} +35 -5
  115. package/dist/cli-bundle/chunks/chunk-BDA35QG5.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js → chunk-BIRYX32V.js} +3 -3
  117. package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js → chunk-BVLOMU6O.js} +2 -2
  118. package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js → chunk-CKX4WOPC.js} +2 -2
  119. package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js → chunk-D52ZN3BF.js} +2 -2
  120. package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js → chunk-D53RTYVI.js} +4 -4
  121. package/dist/cli-bundle/chunks/{chunk-ODALILG3.js → chunk-D5XHO4Q7.js} +2 -2
  122. package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js → chunk-DDFGYUCQ.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js → chunk-DG2EQRIH.js} +4 -4
  124. package/dist/cli-bundle/chunks/{chunk-J6364LFM.js → chunk-DHNG452T.js} +9 -18
  125. package/dist/cli-bundle/chunks/{chunk-J6364LFM.js.map → chunk-DHNG452T.js.map} +1 -1
  126. package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js → chunk-E4FXM2XB.js} +77 -7
  127. package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js.map → chunk-E4FXM2XB.js.map} +1 -1
  128. package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js → chunk-EHJFUOXL.js} +3 -3
  129. package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js → chunk-EWIT5WIC.js} +7 -7
  130. package/dist/cli-bundle/chunks/chunk-EX7OQT3Y.js +783 -0
  131. package/dist/cli-bundle/chunks/chunk-EX7OQT3Y.js.map +1 -0
  132. package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js → chunk-EY7ZE3TG.js} +3 -3
  133. package/dist/cli-bundle/chunks/{chunk-ILX33QXL.js → chunk-F3VC3GOV.js} +669 -472
  134. package/dist/cli-bundle/chunks/chunk-F3VC3GOV.js.map +7 -0
  135. package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js → chunk-FHOBCGQO.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js → chunk-FL4D53ND.js} +2 -2
  137. package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js → chunk-FVNWHUME.js} +4 -4
  138. package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js → chunk-FXFCFL73.js} +5 -5
  139. package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js → chunk-FY4RLHSC.js} +2 -2
  140. package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js → chunk-G6MYGULG.js} +4 -4
  141. package/dist/cli-bundle/chunks/{chunk-HYB5AZ63.js → chunk-GKPCTQYG.js} +1822 -72
  142. package/dist/cli-bundle/chunks/chunk-GKPCTQYG.js.map +7 -0
  143. package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js → chunk-GLZKZON6.js} +2 -2
  144. package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js → chunk-H5IOT54C.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js → chunk-HO4DLBNK.js} +2 -2
  146. package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js → chunk-HPAYDSR2.js} +8 -8
  147. package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js → chunk-HSYV4ZYT.js} +4 -4
  148. package/dist/cli-bundle/chunks/{chunk-EH2OPHBI.js → chunk-HTXXXF45.js} +23 -19
  149. package/dist/cli-bundle/chunks/chunk-HTXXXF45.js.map +1 -0
  150. package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js → chunk-HYTOJW2Q.js} +8 -8
  151. package/dist/cli-bundle/chunks/{chunk-4XQ3BDV4.js → chunk-I3INI567.js} +536 -449
  152. package/dist/cli-bundle/chunks/chunk-I3INI567.js.map +7 -0
  153. package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js → chunk-I7DIDUSP.js} +2 -2
  154. package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js → chunk-IE5KRAKN.js} +4 -4
  155. package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js → chunk-IL5SPRMH.js} +7 -7
  156. package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js → chunk-ILVOOAT4.js} +5 -5
  157. package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js → chunk-KH6QAHME.js} +3 -3
  158. package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js → chunk-KX62NMZC.js} +3 -3
  159. package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js.map → chunk-KX62NMZC.js.map} +1 -1
  160. package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js → chunk-L337QKWJ.js} +5 -5
  161. package/dist/cli-bundle/chunks/{chunk-JFTKLTEF.js → chunk-L5BTTDU5.js} +68 -503
  162. package/dist/cli-bundle/chunks/chunk-L5BTTDU5.js.map +1 -0
  163. package/dist/cli-bundle/chunks/{chunk-LSG2U345.js → chunk-L6FVNR7X.js} +5 -5
  164. package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js → chunk-LSOWTLEM.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-4223PVZT.js → chunk-M7MVOKVV.js} +3 -3
  166. package/dist/cli-bundle/chunks/{chunk-UMOPHQSU.js → chunk-MR4SHYR4.js} +41 -19
  167. package/dist/cli-bundle/chunks/chunk-MR4SHYR4.js.map +7 -0
  168. package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js → chunk-N33FD2UI.js} +3 -3
  169. package/dist/cli-bundle/chunks/{chunk-UXONS674.js → chunk-NCVT6XEL.js} +68 -56
  170. package/dist/cli-bundle/chunks/chunk-NCVT6XEL.js.map +1 -0
  171. package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js → chunk-NNANAWFH.js} +3 -3
  172. package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js → chunk-NTRQLE2R.js} +2 -2
  173. package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js → chunk-NVZ6NVHJ.js} +4 -4
  174. package/dist/cli-bundle/chunks/{chunk-E2OJMKML.js → chunk-OGVTB5VO.js} +47 -37
  175. package/dist/cli-bundle/chunks/chunk-OGVTB5VO.js.map +7 -0
  176. package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js → chunk-OWP6QFBV.js} +4 -4
  177. package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js → chunk-P22HGFFI.js} +2 -2
  178. package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js → chunk-PT7MCCGD.js} +2 -2
  179. package/dist/cli-bundle/chunks/{chunk-ONG5V5CI.js → chunk-QPGQNLPI.js} +1751 -70
  180. package/dist/cli-bundle/chunks/chunk-QPGQNLPI.js.map +1 -0
  181. package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js → chunk-QRZNCRNA.js} +9 -9
  182. package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js → chunk-QWBKN3QC.js} +5 -5
  183. package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js → chunk-R5XTTZSJ.js} +5 -5
  184. package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js → chunk-RC4UOUXA.js} +3 -3
  185. package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js → chunk-RGMWJLXF.js} +4 -4
  186. package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js → chunk-RTBX3C4C.js} +3 -3
  187. package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js → chunk-RXPQ5Q23.js} +7 -7
  188. package/dist/cli-bundle/chunks/{chunk-LPYWLWDS.js → chunk-SIPOACV5.js} +534 -447
  189. package/dist/cli-bundle/chunks/chunk-SIPOACV5.js.map +1 -0
  190. package/dist/cli-bundle/chunks/chunk-TGBTLGPX.js +851 -0
  191. package/dist/cli-bundle/chunks/chunk-TGBTLGPX.js.map +7 -0
  192. package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js → chunk-TLWJP5BF.js} +5 -5
  193. package/dist/cli-bundle/chunks/chunk-TLWJP5BF.js.map +7 -0
  194. package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js → chunk-TM5CIO3F.js} +3 -3
  195. package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js → chunk-TZAE66GQ.js} +8 -8
  196. package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js → chunk-VAHZIPWS.js} +4 -4
  197. package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js → chunk-VE6ZSTQW.js} +4 -4
  198. package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js → chunk-W5E2UUSH.js} +3 -3
  199. package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js → chunk-WACRQ26A.js} +2 -2
  200. package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js.map → chunk-WACRQ26A.js.map} +1 -1
  201. package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js → chunk-WL3SS45P.js} +3 -3
  202. package/dist/cli-bundle/chunks/{chunk-H5APFTHZ.js → chunk-WQXRZMFN.js} +204 -33
  203. package/dist/cli-bundle/chunks/chunk-WQXRZMFN.js.map +7 -0
  204. package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js → chunk-WU3KAN6A.js} +3 -3
  205. package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js → chunk-X2MGQMZO.js} +2 -2
  206. package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js → chunk-X5YCTFKT.js} +3 -3
  207. package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js → chunk-XC2HEEOV.js} +4 -4
  208. package/dist/cli-bundle/chunks/{chunk-7Z4LKRS4.js → chunk-XPUTSGJU.js} +38 -37
  209. package/dist/cli-bundle/chunks/chunk-XPUTSGJU.js.map +1 -0
  210. package/dist/cli-bundle/chunks/{chunk-YBLZ2VE7.js → chunk-XWBD6DSR.js} +320 -239
  211. package/dist/cli-bundle/chunks/chunk-XWBD6DSR.js.map +7 -0
  212. package/dist/cli-bundle/chunks/chunk-XWYQ2LT4.js +834 -0
  213. package/dist/cli-bundle/chunks/chunk-XWYQ2LT4.js.map +1 -0
  214. package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js → chunk-XXLXJL7V.js} +4 -4
  215. package/dist/cli-bundle/chunks/{chunk-2NCIPMQP.js → chunk-YFE7JHX3.js} +27 -6
  216. package/dist/cli-bundle/chunks/chunk-YFE7JHX3.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js → chunk-YIIIAKCE.js} +8 -8
  218. package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js → chunk-YJSURTBB.js} +2 -2
  219. package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js → chunk-YKFHF37B.js} +3 -3
  220. package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js → chunk-YQEZWI3R.js} +2 -2
  221. package/dist/cli-bundle/chunks/close-GPD7DTJV.js +12 -0
  222. package/dist/cli-bundle/chunks/{close-CWODTPKG.js → close-X3CF6FQP.js} +5 -5
  223. package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js → close-many-J7A5EHOQ.js} +14 -14
  224. package/dist/cli-bundle/chunks/close-many-NQLYGPYW.js +23 -0
  225. package/dist/cli-bundle/chunks/comments-2AOZQ5D2.js +13 -0
  226. package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js → comments-TMHMALA5.js} +7 -7
  227. package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js → copy-FWQA5OU4.js} +4 -4
  228. package/dist/cli-bundle/chunks/copy-N3LCQBMC.js +9 -0
  229. package/dist/cli-bundle/chunks/{create-LBVCYMEG.js → create-AQ5SIGZC.js} +9 -9
  230. package/dist/cli-bundle/chunks/{create-J5U6ND4K.js → create-KOGQ3JKD.js} +9 -9
  231. package/dist/cli-bundle/chunks/delete-6G3MBZ6S.js +10 -0
  232. package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js → delete-YYYFOSEA.js} +4 -4
  233. package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js → deps-MQ4ZIGZB.js} +16 -7
  234. package/dist/cli-bundle/chunks/deps-NIIKXLPB.js +28 -0
  235. package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js → docs-53NUGMIQ.js} +6 -6
  236. package/dist/cli-bundle/chunks/docs-OWRGDMNY.js +14 -0
  237. package/dist/cli-bundle/chunks/{files-EFIWKFTM.js → files-3PXGXYDB.js} +6 -6
  238. package/dist/cli-bundle/chunks/{files-6YFBJRBG.js → files-EGLKHD7O.js} +6 -6
  239. package/dist/cli-bundle/chunks/focus-KZLIA6WS.js +10 -0
  240. package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js → focus-SRPASFTN.js} +5 -5
  241. package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js → history-compact-G4DULDCX.js} +6 -6
  242. package/dist/cli-bundle/chunks/history-compact-HHIUOMZ7.js +16 -0
  243. package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js → history-redact-IUSJ6X3E.js} +4 -4
  244. package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js → history-redact-THHGRQXV.js} +4 -4
  245. package/dist/cli-bundle/chunks/history-repair-KG7SWXI6.js +16 -0
  246. package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js → history-repair-LUQWRS7X.js} +6 -6
  247. package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js → learnings-2MRNBFJF.js} +7 -7
  248. package/dist/cli-bundle/chunks/learnings-ZVHSALJY.js +13 -0
  249. package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js → notes-73JWKWUD.js} +7 -7
  250. package/dist/cli-bundle/chunks/notes-BAKUL5DJ.js +13 -0
  251. package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js → plan-AZPMCG37.js} +10 -10
  252. package/dist/cli-bundle/chunks/plan-LEAGLPGP.js +24 -0
  253. package/dist/cli-bundle/chunks/{profile-FAU7NZML.js → profile-AVCIIZID.js} +9 -9
  254. package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js → profile-LFYO3HHX.js} +9 -9
  255. package/dist/cli-bundle/chunks/{register-list-query-UL4UKBBN.js → register-list-query-MZUF2EEC.js} +50 -22
  256. package/dist/cli-bundle/chunks/register-list-query-MZUF2EEC.js.map +1 -0
  257. package/dist/cli-bundle/chunks/{register-list-query-DKA3EH5D.js → register-list-query-UKMF55FT.js} +49 -21
  258. package/dist/cli-bundle/chunks/register-list-query-UKMF55FT.js.map +7 -0
  259. package/dist/cli-bundle/chunks/{register-mutation-RBBJ52DK.js → register-mutation-2PBW2GEX.js} +35 -33
  260. package/dist/cli-bundle/chunks/register-mutation-2PBW2GEX.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js → register-mutation-T6RVNJC4.js} +34 -32
  262. package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js.map → register-mutation-T6RVNJC4.js.map} +2 -2
  263. package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js → register-operations-KHZYR6MG.js} +35 -35
  264. package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js → register-operations-WPQ2LWZJ.js} +35 -35
  265. package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js → register-setup-PGDNOXDQ.js} +15 -15
  266. package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js → register-setup-TDN7WAO6.js} +15 -15
  267. package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js → restore-E3PRGDN3.js} +6 -6
  268. package/dist/cli-bundle/chunks/restore-KIUYTAEJ.js +14 -0
  269. package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js → schema-5JNFQFUW.js} +6 -6
  270. package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js → schema-TMIW4XZC.js} +6 -6
  271. package/dist/cli-bundle/chunks/{update-XHSIAIXE.js → update-SQYZA3ZW.js} +12 -12
  272. package/dist/cli-bundle/chunks/update-XZJYS5X7.js +21 -0
  273. package/dist/cli-bundle/chunks/update-many-R24B3GBK.js +36 -0
  274. package/dist/cli-bundle/chunks/update-many-WQ3R3J6N.js +32 -0
  275. package/dist/cli-bundle/main.js +170 -856
  276. package/dist/cli-bundle/main.js.map +4 -4
  277. package/dist/cli-bundle/sdk-runtime.js +57 -54
  278. package/dist/cli-bundle/sdk-testing.js +6 -6
  279. package/dist/cli-bundle/sdk.js +266 -340
  280. package/dist/cli-bundle/sdk.js.map +4 -4
  281. package/dist/core/extensions/item-fields.js +2 -2
  282. package/dist/core/extensions/item-fields.js.map +1 -1
  283. package/dist/core/item/actionability.d.ts +12 -0
  284. package/dist/core/item/actionability.js +39 -4
  285. package/dist/core/item/actionability.js.map +1 -1
  286. package/dist/core/sentry/instrument.d.ts +11 -0
  287. package/dist/core/sentry/instrument.js +21 -2
  288. package/dist/core/sentry/instrument.js.map +1 -1
  289. package/dist/mcp/server.d.ts +16 -18
  290. package/dist/mcp/server.js +84 -31
  291. package/dist/mcp/server.js.map +1 -1
  292. package/dist/mcp/tool-definitions.js +17 -4
  293. package/dist/mcp/tool-definitions.js.map +1 -1
  294. package/dist/sdk/actionability.d.ts +10 -0
  295. package/dist/sdk/actionability.js +14 -0
  296. package/dist/sdk/actionability.js.map +1 -0
  297. package/dist/sdk/cli-bootstrap.d.ts +122 -0
  298. package/dist/sdk/cli-bootstrap.js +879 -0
  299. package/dist/sdk/cli-bootstrap.js.map +1 -0
  300. package/dist/sdk/cli-contracts/enum-contracts.d.ts +6 -2
  301. package/dist/sdk/cli-contracts/enum-contracts.js +19 -2
  302. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  303. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  304. package/dist/sdk/cli-contracts/flag-contracts.js +21 -2
  305. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  306. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +2 -0
  307. package/dist/sdk/cli-contracts/tool-option-contracts.js +16 -2
  308. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  309. package/dist/sdk/cli-contracts/tool-parameter-tables.js +80 -3
  310. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  311. package/dist/sdk/cli-contracts/tool-schema.d.ts +20 -0
  312. package/dist/sdk/cli-contracts/tool-schema.js +97 -9
  313. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  314. package/dist/sdk/cli-contracts.d.ts +2 -2
  315. package/dist/sdk/cli-contracts.js +4 -4
  316. package/dist/sdk/cli-contracts.js.map +1 -1
  317. package/dist/sdk/dependencies.d.ts +42 -53
  318. package/dist/sdk/dependencies.js +177 -125
  319. package/dist/sdk/dependencies.js.map +1 -1
  320. package/dist/sdk/eval.d.ts +66 -0
  321. package/dist/sdk/eval.js +186 -0
  322. package/dist/sdk/eval.js.map +1 -0
  323. package/dist/sdk/governance/validate.js +3 -3
  324. package/dist/sdk/governance/validate.js.map +1 -1
  325. package/dist/sdk/graph/analytics.d.ts +124 -0
  326. package/dist/sdk/graph/analytics.js +464 -0
  327. package/dist/sdk/graph/analytics.js.map +1 -0
  328. package/dist/sdk/graph/assembly.d.ts +97 -0
  329. package/dist/sdk/graph/assembly.js +146 -0
  330. package/dist/sdk/graph/assembly.js.map +1 -0
  331. package/dist/sdk/graph/cache.d.ts +66 -0
  332. package/dist/sdk/graph/cache.js +148 -0
  333. package/dist/sdk/graph/cache.js.map +1 -0
  334. package/dist/sdk/graph/governance.d.ts +108 -0
  335. package/dist/sdk/graph/governance.js +360 -0
  336. package/dist/sdk/graph/governance.js.map +1 -0
  337. package/dist/sdk/graph/index.d.ts +16 -0
  338. package/dist/sdk/graph/index.js +20 -0
  339. package/dist/sdk/graph/index.js.map +1 -0
  340. package/dist/sdk/graph/remediation.d.ts +52 -0
  341. package/dist/sdk/graph/remediation.js +148 -0
  342. package/dist/sdk/graph/remediation.js.map +1 -0
  343. package/dist/sdk/graph/run.d.ts +295 -0
  344. package/dist/sdk/graph/run.js +468 -0
  345. package/dist/sdk/graph/run.js.map +1 -0
  346. package/dist/sdk/graph/traversal.d.ts +77 -0
  347. package/dist/sdk/graph/traversal.js +262 -0
  348. package/dist/sdk/graph/traversal.js.map +1 -0
  349. package/dist/sdk/index.d.ts +19 -5
  350. package/dist/sdk/index.js +21 -7
  351. package/dist/sdk/index.js.map +1 -1
  352. package/dist/{cli/commands → sdk/query}/item-filter-options.d.ts +1 -1
  353. package/dist/{cli/commands → sdk/query}/item-filter-options.js +3 -3
  354. package/dist/sdk/query/item-filter-options.js.map +1 -0
  355. package/dist/sdk/query/list.d.ts +262 -0
  356. package/dist/sdk/query/list.js +1089 -0
  357. package/dist/sdk/query/list.js.map +1 -0
  358. package/dist/sdk/query/parsers.d.ts +9 -0
  359. package/dist/sdk/query/parsers.js +45 -0
  360. package/dist/sdk/query/parsers.js.map +1 -0
  361. package/dist/{cli/commands → sdk/query}/search-pagination.js +4 -4
  362. package/dist/sdk/query/search-pagination.js.map +1 -0
  363. package/dist/{cli/commands → sdk/query}/search-rendering.js +3 -3
  364. package/dist/sdk/query/search-rendering.js.map +1 -0
  365. package/dist/sdk/query/search.d.ts +469 -0
  366. package/dist/sdk/query/search.js +2247 -0
  367. package/dist/sdk/query/search.js.map +1 -0
  368. package/dist/sdk/relationship-context.d.ts +42 -0
  369. package/dist/sdk/relationship-context.js +99 -20
  370. package/dist/sdk/relationship-context.js.map +1 -1
  371. package/dist/sdk/relationships.d.ts +13 -0
  372. package/dist/sdk/relationships.js +30 -2
  373. package/dist/sdk/relationships.js.map +1 -1
  374. package/dist/sdk/runtime-input.d.ts +41 -0
  375. package/dist/sdk/runtime-input.js +422 -2
  376. package/dist/sdk/runtime-input.js.map +1 -1
  377. package/dist/sdk/runtime.d.ts +19 -30
  378. package/dist/sdk/runtime.js +30 -376
  379. package/dist/sdk/runtime.js.map +1 -1
  380. package/dist/sdk/search-refresh-worker.d.ts +2 -0
  381. package/dist/sdk/search-refresh-worker.js +19 -0
  382. package/dist/sdk/search-refresh-worker.js.map +1 -0
  383. package/dist/sdk/stats.d.ts +66 -0
  384. package/dist/sdk/stats.js +151 -0
  385. package/dist/sdk/stats.js.map +1 -0
  386. package/dist/sdk/telemetry-flush.d.ts +2 -0
  387. package/dist/sdk/telemetry-flush.js +14 -0
  388. package/dist/sdk/telemetry-flush.js.map +1 -0
  389. package/dist/sdk/telemetry.d.ts +14 -0
  390. package/dist/sdk/telemetry.js +398 -0
  391. package/dist/sdk/telemetry.js.map +1 -0
  392. package/dist/sdk/test/batch.d.ts +94 -0
  393. package/dist/sdk/test/batch.js +492 -0
  394. package/dist/sdk/test/batch.js.map +1 -0
  395. package/dist/sdk/test/entry.d.ts +6 -0
  396. package/dist/sdk/test/entry.js +74 -0
  397. package/dist/sdk/test/entry.js.map +1 -0
  398. package/dist/sdk/test/execution.d.ts +282 -0
  399. package/dist/sdk/test/execution.js +1817 -0
  400. package/dist/sdk/test/execution.js.map +1 -0
  401. package/dist/sdk/test/linked-command-detection.js +12 -3
  402. package/dist/sdk/test/linked-command-detection.js.map +1 -1
  403. package/dist/sdk/test/parsers.d.ts +48 -0
  404. package/dist/sdk/test/parsers.js +522 -0
  405. package/dist/sdk/test/parsers.js.map +1 -0
  406. package/dist/sdk/test/runs.d.ts +92 -0
  407. package/dist/sdk/test/runs.js +195 -0
  408. package/dist/sdk/test/runs.js.map +1 -0
  409. package/docs/AGENT_GUIDE.md +1 -0
  410. package/docs/COMMANDS.md +19 -1
  411. package/docs/RELATIONSHIP_GRAPH.md +99 -3
  412. package/docs/SDK.md +139 -3
  413. package/docs/SDK_PRIMITIVE_INVENTORY.md +5 -3
  414. package/docs/examples/sdk-custom-tool/README.md +27 -0
  415. package/docs/examples/sdk-custom-tool/package.json +13 -0
  416. package/docs/examples/sdk-custom-tool/src/cli.ts +36 -0
  417. package/docs/examples/sdk-custom-tool/src/entry.ts +15 -0
  418. package/docs/examples/sdk-custom-tool/src/index.ts +223 -0
  419. package/marketplace.json +2 -2
  420. package/package.json +4 -4
  421. package/packages/pm-beads/package.json +1 -1
  422. package/packages/pm-calendar/package.json +1 -1
  423. package/packages/pm-command-kit/package.json +1 -1
  424. package/packages/pm-governance-audit/extensions/governance-audit/comments-audit.ts +77 -57
  425. package/packages/pm-governance-audit/extensions/governance-audit/dedupe-audit.ts +202 -194
  426. package/packages/pm-governance-audit/extensions/governance-audit/dedupe-merge.ts +227 -153
  427. package/packages/pm-governance-audit/extensions/governance-audit/normalize.ts +169 -125
  428. package/packages/pm-governance-audit/extensions/governance-audit/runtime-utils.ts +130 -81
  429. package/packages/pm-governance-audit/extensions/governance-audit/sdk.ts +53 -4
  430. package/packages/pm-governance-audit/package.json +1 -1
  431. package/packages/pm-guide-shell/package.json +1 -1
  432. package/packages/pm-kanban/package.json +1 -1
  433. package/packages/pm-lifecycle-hooks/package.json +1 -1
  434. package/packages/pm-linked-test-adapters/package.json +1 -1
  435. package/packages/pm-search-advanced/package.json +1 -1
  436. package/packages/pm-templates/package.json +1 -1
  437. package/packages/pm-todos/package.json +1 -1
  438. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  439. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  440. package/dist/cli/commands/item-filter-options.js.map +0 -1
  441. package/dist/cli/commands/search-pagination.js.map +0 -1
  442. package/dist/cli/commands/search-rendering.js.map +0 -1
  443. package/dist/cli-bundle/chunks/append-UZVHUO74.js +0 -11
  444. package/dist/cli-bundle/chunks/chunk-2NCIPMQP.js.map +0 -1
  445. package/dist/cli-bundle/chunks/chunk-3S5QVM5H.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-4XQ3BDV4.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-5JLUII3O.js.map +0 -1
  448. package/dist/cli-bundle/chunks/chunk-5ZSLZLDN.js.map +0 -1
  449. package/dist/cli-bundle/chunks/chunk-7Z4LKRS4.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-BKVG6XOA.js.map +0 -7
  451. package/dist/cli-bundle/chunks/chunk-E2OJMKML.js.map +0 -7
  452. package/dist/cli-bundle/chunks/chunk-EH2OPHBI.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-H5APFTHZ.js.map +0 -7
  454. package/dist/cli-bundle/chunks/chunk-HYB5AZ63.js.map +0 -7
  455. package/dist/cli-bundle/chunks/chunk-ILX33QXL.js.map +0 -7
  456. package/dist/cli-bundle/chunks/chunk-JFTKLTEF.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-LPYWLWDS.js.map +0 -1
  458. package/dist/cli-bundle/chunks/chunk-NLDFBC6J.js.map +0 -7
  459. package/dist/cli-bundle/chunks/chunk-ONG5V5CI.js.map +0 -1
  460. package/dist/cli-bundle/chunks/chunk-UFXU44HV.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-UMOPHQSU.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-UXONS674.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-XXXF6PAQ.js.map +0 -7
  464. package/dist/cli-bundle/chunks/chunk-YBLZ2VE7.js.map +0 -7
  465. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js +0 -58
  466. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js.map +0 -1
  467. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js +0 -68
  468. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js.map +0 -7
  469. package/dist/cli-bundle/chunks/close-W6LI2PKM.js +0 -12
  470. package/dist/cli-bundle/chunks/close-many-DLDDVSH5.js +0 -23
  471. package/dist/cli-bundle/chunks/comments-E3TNTK24.js +0 -13
  472. package/dist/cli-bundle/chunks/copy-Q5ZJPUKR.js +0 -9
  473. package/dist/cli-bundle/chunks/delete-WNHB3LYW.js +0 -10
  474. package/dist/cli-bundle/chunks/deps-OA26IS25.js +0 -19
  475. package/dist/cli-bundle/chunks/docs-HA2AIDBB.js +0 -14
  476. package/dist/cli-bundle/chunks/focus-POIW5LTJ.js +0 -10
  477. package/dist/cli-bundle/chunks/history-compact-FWG2C7FZ.js +0 -16
  478. package/dist/cli-bundle/chunks/history-repair-6GEAM7HE.js +0 -16
  479. package/dist/cli-bundle/chunks/learnings-RSNLSWDC.js +0 -13
  480. package/dist/cli-bundle/chunks/notes-2WDH6DXU.js +0 -13
  481. package/dist/cli-bundle/chunks/plan-DOVI2VMW.js +0 -24
  482. package/dist/cli-bundle/chunks/register-list-query-DKA3EH5D.js.map +0 -7
  483. package/dist/cli-bundle/chunks/register-list-query-UL4UKBBN.js.map +0 -1
  484. package/dist/cli-bundle/chunks/register-mutation-RBBJ52DK.js.map +0 -1
  485. package/dist/cli-bundle/chunks/restore-YPMVUUEX.js +0 -14
  486. package/dist/cli-bundle/chunks/update-WWBYOPXO.js +0 -21
  487. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js +0 -32
  488. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js +0 -36
  489. /package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js.map → append-5YF3TO7I.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{append-UZVHUO74.js.map → append-JHO5K6RP.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js.map → chunk-2BX74BAS.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js.map → chunk-2CXL335K.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js.map → chunk-2FUOXSRN.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js.map → chunk-2IPNL3DR.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js.map → chunk-2XOSFSTH.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js.map → chunk-37DRDP2B.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js.map → chunk-47HXN6RX.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js.map → chunk-5HGZKQUL.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js.map → chunk-5UKQLQM2.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js.map → chunk-633PKXLT.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js.map → chunk-646MQXFW.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js.map → chunk-66MKH7SZ.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js.map → chunk-67RO3H4N.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js.map → chunk-6DYOZS6C.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js.map → chunk-6O44IN44.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js.map → chunk-74FKFFXO.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js.map → chunk-7H5NNCJ5.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js.map → chunk-AFGKSHAM.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js.map → chunk-ARGDWQ4J.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js.map → chunk-B57RJHBZ.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js.map → chunk-BAP7G3N2.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js.map → chunk-BIRYX32V.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js.map → chunk-BVLOMU6O.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js.map → chunk-CKX4WOPC.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js.map → chunk-D52ZN3BF.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js.map → chunk-D53RTYVI.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{chunk-ODALILG3.js.map → chunk-D5XHO4Q7.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js.map → chunk-DDFGYUCQ.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js.map → chunk-DG2EQRIH.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js.map → chunk-EHJFUOXL.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js.map → chunk-EWIT5WIC.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js.map → chunk-EY7ZE3TG.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js.map → chunk-FHOBCGQO.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js.map → chunk-FL4D53ND.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js.map → chunk-FVNWHUME.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js.map → chunk-FXFCFL73.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js.map → chunk-FY4RLHSC.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js.map → chunk-G6MYGULG.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js.map → chunk-GLZKZON6.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js.map → chunk-H5IOT54C.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js.map → chunk-HO4DLBNK.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js.map → chunk-HPAYDSR2.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js.map → chunk-HSYV4ZYT.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js.map → chunk-HYTOJW2Q.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js.map → chunk-I7DIDUSP.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js.map → chunk-IE5KRAKN.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js.map → chunk-IL5SPRMH.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js.map → chunk-ILVOOAT4.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js.map → chunk-KH6QAHME.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js.map → chunk-L337QKWJ.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-LSG2U345.js.map → chunk-L6FVNR7X.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js.map → chunk-LSOWTLEM.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-4223PVZT.js.map → chunk-M7MVOKVV.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js.map → chunk-N33FD2UI.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js.map → chunk-NNANAWFH.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js.map → chunk-NTRQLE2R.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js.map → chunk-NVZ6NVHJ.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js.map → chunk-OWP6QFBV.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js.map → chunk-P22HGFFI.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js.map → chunk-PT7MCCGD.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js.map → chunk-QRZNCRNA.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js.map → chunk-QWBKN3QC.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js.map → chunk-R5XTTZSJ.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js.map → chunk-RC4UOUXA.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js.map → chunk-RGMWJLXF.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js.map → chunk-RTBX3C4C.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js.map → chunk-RXPQ5Q23.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js.map → chunk-TM5CIO3F.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js.map → chunk-TZAE66GQ.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js.map → chunk-VAHZIPWS.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js.map → chunk-VE6ZSTQW.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js.map → chunk-W5E2UUSH.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js.map → chunk-WL3SS45P.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js.map → chunk-WU3KAN6A.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js.map → chunk-X2MGQMZO.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js.map → chunk-X5YCTFKT.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js.map → chunk-XC2HEEOV.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js.map → chunk-XXLXJL7V.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js.map → chunk-YIIIAKCE.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js.map → chunk-YJSURTBB.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js.map → chunk-YKFHF37B.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js.map → chunk-YQEZWI3R.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{close-W6LI2PKM.js.map → close-GPD7DTJV.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{close-CWODTPKG.js.map → close-X3CF6FQP.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js.map → close-many-J7A5EHOQ.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{close-many-DLDDVSH5.js.map → close-many-NQLYGPYW.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{comments-E3TNTK24.js.map → comments-2AOZQ5D2.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js.map → comments-TMHMALA5.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js.map → copy-FWQA5OU4.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{copy-Q5ZJPUKR.js.map → copy-N3LCQBMC.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{create-LBVCYMEG.js.map → create-AQ5SIGZC.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{create-J5U6ND4K.js.map → create-KOGQ3JKD.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{delete-WNHB3LYW.js.map → delete-6G3MBZ6S.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js.map → delete-YYYFOSEA.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js.map → deps-MQ4ZIGZB.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{deps-OA26IS25.js.map → deps-NIIKXLPB.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js.map → docs-53NUGMIQ.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{docs-HA2AIDBB.js.map → docs-OWRGDMNY.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{files-EFIWKFTM.js.map → files-3PXGXYDB.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{files-6YFBJRBG.js.map → files-EGLKHD7O.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{focus-POIW5LTJ.js.map → focus-KZLIA6WS.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js.map → focus-SRPASFTN.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js.map → history-compact-G4DULDCX.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{history-compact-FWG2C7FZ.js.map → history-compact-HHIUOMZ7.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js.map → history-redact-IUSJ6X3E.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js.map → history-redact-THHGRQXV.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{history-repair-6GEAM7HE.js.map → history-repair-KG7SWXI6.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js.map → history-repair-LUQWRS7X.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js.map → learnings-2MRNBFJF.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{learnings-RSNLSWDC.js.map → learnings-ZVHSALJY.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js.map → notes-73JWKWUD.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{notes-2WDH6DXU.js.map → notes-BAKUL5DJ.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js.map → plan-AZPMCG37.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{plan-DOVI2VMW.js.map → plan-LEAGLPGP.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{profile-FAU7NZML.js.map → profile-AVCIIZID.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js.map → profile-LFYO3HHX.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js.map → register-operations-KHZYR6MG.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js.map → register-operations-WPQ2LWZJ.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js.map → register-setup-PGDNOXDQ.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js.map → register-setup-TDN7WAO6.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js.map → restore-E3PRGDN3.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{restore-YPMVUUEX.js.map → restore-KIUYTAEJ.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js.map → schema-5JNFQFUW.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js.map → schema-TMIW4XZC.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{update-XHSIAIXE.js.map → update-SQYZA3ZW.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{update-WWBYOPXO.js.map → update-XZJYS5X7.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{update-many-TA7NGQBO.js.map → update-many-R24B3GBK.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{update-many-OUGIU5SF.js.map → update-many-WQ3R3J6N.js.map} +0 -0
  619. /package/dist/{cli/commands → sdk/query}/search-pagination.d.ts +0 -0
  620. /package/dist/{cli/commands → sdk/query}/search-rendering.d.ts +0 -0
@@ -7,7 +7,7 @@
7
7
  import { EXIT_CODE, PmCliError, PmClient, type ListOptions } from "./sdk.ts";
8
8
 
9
9
  /** Retain only list filters that the package-owned audit queries may forward. */
10
- export function buildListQueryFilters(
10
+ export const buildListQueryFilters = (
11
11
  filters: Pick<
12
12
  ListOptions,
13
13
  | "type"
@@ -21,7 +21,7 @@ export function buildListQueryFilters(
21
21
  | "sprint"
22
22
  | "release"
23
23
  >,
24
- ): ListOptions {
24
+ ): ListOptions => {
25
25
  const {
26
26
  type,
27
27
  tag,
@@ -46,48 +46,50 @@ export function buildListQueryFilters(
46
46
  sprint,
47
47
  release,
48
48
  };
49
- }
49
+ };
50
50
 
51
51
  /** Order valid timestamps chronologically and malformed values lexicographically. */
52
- export function compareTimestampStrings(left: string, right: string): number {
52
+ export const compareTimestampStrings = (
53
+ left: string,
54
+ right: string,
55
+ ): number => {
53
56
  const leftMs = Date.parse(left);
54
57
  const rightMs = Date.parse(right);
55
58
  if (Number.isFinite(leftMs) && Number.isFinite(rightMs) && leftMs !== rightMs)
56
59
  return leftMs - rightMs;
57
60
  return left.localeCompare(right);
58
- }
61
+ };
59
62
 
60
63
  /** Measure set overlap between two token lists on the inclusive zero-to-one scale. */
61
- export function jaccardSimilarity(
64
+ export const jaccardSimilarity = (
62
65
  leftTokens: string[],
63
66
  rightTokens: string[],
64
- ): number {
65
- if (leftTokens.length === 0 && rightTokens.length === 0) return 1;
66
- if (leftTokens.length === 0 || rightTokens.length === 0) return 0;
67
+ ): number => {
67
68
  const left = new Set(leftTokens);
68
69
  const right = new Set(rightTokens);
69
- let intersection = 0;
70
- for (const token of left) if (right.has(token)) intersection += 1;
71
- return intersection / new Set([...left, ...right]).size;
72
- }
70
+ const union = new Set([...left, ...right]);
71
+ if (union.size === 0) return 1;
72
+ const intersection = [...left].filter((token) => right.has(token)).length;
73
+ return intersection / union.size;
74
+ };
73
75
 
74
76
  /** Trim, lowercase, and collapse internal whitespace for stable audit comparisons. */
75
- export function normalizeLowercaseWhitespace(value: string): string {
77
+ export const normalizeLowercaseWhitespace = (value: string): string => {
76
78
  return value.trim().toLowerCase().replace(/\s+/g, " ");
77
- }
79
+ };
78
80
 
79
81
  /** Split normalized text into non-empty lowercase ASCII alphanumeric tokens. */
80
- export function tokenizeAlphaNumeric(value: string): string[] {
82
+ export const tokenizeAlphaNumeric = (value: string): string[] => {
81
83
  return normalizeLowercaseWhitespace(value)
82
84
  .split(/[^a-z0-9]+/)
83
85
  .filter((token) => token.length > 0);
84
- }
86
+ };
85
87
 
86
88
  /** Parse an optional non-negative integer limit with package-specific error context. */
87
- export function parseIntegerLimit(
89
+ export const parseIntegerLimit = (
88
90
  raw: string | undefined,
89
91
  label = "--limit",
90
- ): number | undefined {
92
+ ): number | undefined => {
91
93
  if (raw === undefined) return undefined;
92
94
  const parsed = Number(raw);
93
95
  if (!Number.isInteger(parsed) || parsed < 0)
@@ -96,31 +98,31 @@ export function parseIntegerLimit(
96
98
  EXIT_CODE.USAGE,
97
99
  );
98
100
  return parsed;
99
- }
101
+ };
100
102
 
101
103
  /** Normalize an optional comma-separated value into trimmed non-empty entries. */
102
- export function splitCommaList(raw: string | undefined | null): string[] {
104
+ export const splitCommaList = (raw: string | undefined | null): string[] => {
103
105
  if (raw == null) return [];
104
106
  return raw
105
107
  .split(",")
106
108
  .map((entry) => entry.trim())
107
109
  .filter(Boolean);
108
- }
110
+ };
109
111
 
110
112
  /** Convert thrown values to a concise message suitable for audit result envelopes. */
111
- export function toErrorMessage(error: unknown): string {
113
+ export const toErrorMessage = (error: unknown): string => {
112
114
  if (error instanceof Error) return error.message.trim() || error.name;
113
115
  return String(error);
114
- }
116
+ };
115
117
 
116
118
  /** Return trimmed non-empty text while rejecting non-string and blank values. */
117
- export function toNonEmptyStringOrUndefined(
119
+ export const toNonEmptyStringOrUndefined = (
118
120
  value: unknown,
119
- ): string | undefined {
121
+ ): string | undefined => {
120
122
  if (typeof value !== "string") return undefined;
121
123
  const normalized = value.trim();
122
124
  return normalized.length > 0 ? normalized : undefined;
123
- }
125
+ };
124
126
 
125
127
  /** Inputs used to attribute linked paths to every item that references them. */
126
128
  export interface LinkedArtifactAuditPayload {
@@ -141,18 +143,22 @@ export interface LinkedArtifactAuditEntry {
141
143
  }
142
144
 
143
145
  /** Build sorted, duplicate-free reverse attribution for requested artifact paths. */
144
- export function buildLinkedArtifactAudit(
146
+ export const buildLinkedArtifactAudit = (
145
147
  input: LinkedArtifactAuditPayload,
146
- ): LinkedArtifactAuditEntry[] {
148
+ ): LinkedArtifactAuditEntry[] => {
149
+ /** Build a stable reverse index over optional item and path collections. */
150
+ /** Normalize an optional read-only collection into an iterable array. */
151
+ const optionalArray = <Value>(values: readonly Value[] | undefined) =>
152
+ values ?? [];
147
153
  const index = new Map<string, Set<string>>();
148
- for (const item of input.items ?? []) {
149
- for (const artifact of item.artifacts ?? []) {
154
+ for (const item of optionalArray(input.items)) {
155
+ for (const artifact of optionalArray(item.artifacts)) {
150
156
  const ids = index.get(artifact.path) ?? new Set<string>();
151
157
  ids.add(item.id);
152
158
  index.set(artifact.path, ids);
153
159
  }
154
160
  }
155
- return [...new Set(input.paths ?? [])]
161
+ return [...new Set(optionalArray(input.paths))]
156
162
  .sort((left, right) => left.localeCompare(right))
157
163
  .map((linkedPath) => {
158
164
  const linkedItemIds = [...(index.get(linkedPath) ?? [])].sort(
@@ -164,7 +170,7 @@ export function buildLinkedArtifactAudit(
164
170
  linked_item_ids: linkedItemIds,
165
171
  };
166
172
  });
167
- }
173
+ };
168
174
 
169
175
  interface CommandResultPayload {
170
176
  command?: string;
@@ -174,80 +180,123 @@ interface CommandResultPayload {
174
180
  result?: unknown;
175
181
  }
176
182
 
177
- function asRecord(value: unknown): Record<string, unknown> | undefined {
183
+ const asRecord = (value: unknown): Record<string, unknown> | undefined => {
184
+ /** Narrow an unknown payload to a non-null object record. */
178
185
  return typeof value === "object" && value !== null
179
186
  ? (value as Record<string, unknown>)
180
187
  : undefined;
181
- }
188
+ };
182
189
 
183
- function hasUpdateAuditBypass(options: Record<string, unknown>): boolean {
190
+ const hasUpdateAuditBypass = (
191
+ options: Record<string, unknown> | undefined,
192
+ ): boolean => {
193
+ /** Detect every supported update-audit bypass alias. */
194
+ const resolved = options ?? {};
184
195
  return (
185
- options.allowAuditUpdate === true ||
186
- options.allow_audit_update === true ||
187
- options.allowAuditDepUpdate === true ||
188
- options.allow_audit_dep_update === true
196
+ resolved.allowAuditUpdate === true ||
197
+ resolved.allow_audit_update === true ||
198
+ resolved.allowAuditDepUpdate === true ||
199
+ resolved.allow_audit_dep_update === true
189
200
  );
190
- }
201
+ };
202
+
203
+ const resolveLinkedArtifactAuditKey = (
204
+ payload: CommandResultPayload,
205
+ ): "files" | "docs" | undefined => {
206
+ /** Resolve the supported linked-artifact result key for an eligible audit request. */
207
+ const artifactKey = (["files", "docs"] as const).find(
208
+ (candidate) => candidate === payload.command,
209
+ );
210
+ if (artifactKey === undefined) return undefined;
211
+ if (payload.options?.audit !== true) return undefined;
212
+ if (!payload.pm_root) return undefined;
213
+ return artifactKey;
214
+ };
191
215
 
192
- async function decorateLinkedArtifactResult(
216
+ const decorateLinkedArtifactResult = async (
193
217
  payload: CommandResultPayload,
194
218
  result: Record<string, unknown>,
195
- ): Promise<Record<string, unknown> | undefined> {
196
- if (
197
- (payload.command !== "files" && payload.command !== "docs") ||
198
- payload.options?.audit !== true ||
199
- !payload.pm_root
200
- ) {
201
- return undefined;
202
- }
203
- const artifactKey = payload.command;
219
+ ): Promise<Record<string, unknown> | undefined> => {
220
+ /** Add reverse linked-artifact attribution to eligible files/docs results. */
221
+ const artifactKey = resolveLinkedArtifactAuditKey(payload);
222
+ if (artifactKey === undefined) return undefined;
204
223
  const artifacts = Array.isArray(result[artifactKey])
205
- ? (result[artifactKey] as Array<{ path?: unknown }>)
224
+ ? result[artifactKey]
206
225
  : [];
207
- const paths = artifacts.flatMap((entry) =>
208
- typeof entry.path === "string" ? [entry.path] : [],
209
- );
226
+ const paths = artifacts.flatMap((entry) => {
227
+ const artifact = asRecord(entry);
228
+ return typeof artifact?.path === "string" ? [artifact.path] : [];
229
+ });
210
230
  const listed = await new PmClient({ pmRoot: payload.pm_root }).list({
211
231
  status: "all",
212
232
  noTruncate: true,
213
233
  fields: `id,${artifactKey}`,
214
234
  });
215
- const items = listed.items.map((item) => ({
216
- id: item.id,
217
- artifacts: Array.isArray(item[artifactKey])
218
- ? (item[artifactKey] as Array<{ path: string }>)
219
- : undefined,
220
- }));
235
+ const items = listed.items.flatMap((item) =>
236
+ typeof item.id === "string"
237
+ ? [
238
+ {
239
+ id: item.id,
240
+ artifacts: Array.isArray(item[artifactKey])
241
+ ? item[artifactKey].flatMap((entry) => {
242
+ const artifact = asRecord(entry);
243
+ return typeof artifact?.path === "string"
244
+ ? [{ path: artifact.path }]
245
+ : [];
246
+ })
247
+ : undefined,
248
+ },
249
+ ]
250
+ : [],
251
+ );
221
252
  return {
222
253
  ...result,
223
254
  audit: buildLinkedArtifactAudit({ paths, items }),
224
255
  };
225
- }
256
+ };
257
+
258
+ const decorateUpdateAuditBypassResult = (
259
+ payload: CommandResultPayload,
260
+ result: Record<string, unknown>,
261
+ ): Record<string, unknown> | undefined => {
262
+ /** Add the package-owned audit marker for an explicit update bypass. */
263
+ const isUpdate = ["update", "update-many"].includes(String(payload.command));
264
+ if (isUpdate && hasUpdateAuditBypass(payload.options)) {
265
+ return { ...result, audit_update: true };
266
+ }
267
+ return undefined;
268
+ };
269
+
270
+ const decorateReleaseAuditBypassResult = (
271
+ payload: CommandResultPayload,
272
+ result: Record<string, unknown>,
273
+ ): Record<string, unknown> | undefined => {
274
+ /** Add the package-owned audit marker for an explicit release bypass. */
275
+ if (
276
+ payload.command === "release" &&
277
+ payload.options?.allowAuditRelease === true
278
+ ) {
279
+ return { ...result, audit_release: true };
280
+ }
281
+ return undefined;
282
+ };
226
283
 
227
284
  /** Add package-owned fields to a completed core command result. */
228
- export async function decorateGovernanceCommandResult(
285
+ export const decorateGovernanceCommandResult = async (
229
286
  raw: unknown,
230
- ): Promise<unknown> {
287
+ ): Promise<unknown> => {
231
288
  const payload = asRecord(raw) as CommandResultPayload | undefined;
232
- const result = asRecord(payload?.result);
233
- const options = payload?.options ?? {};
234
- if (!payload || !result) return payload?.result;
289
+ if (!payload) return undefined;
290
+ const result = asRecord(payload.result);
291
+ if (!result) return payload.result;
235
292
  const linkedArtifactResult = await decorateLinkedArtifactResult(
236
293
  payload,
237
294
  result,
238
295
  );
239
296
  if (linkedArtifactResult) return linkedArtifactResult;
240
-
241
- if (
242
- (payload.command === "update" || payload.command === "update-many") &&
243
- hasUpdateAuditBypass(options)
244
- ) {
245
- return { ...result, audit_update: true };
246
- }
247
-
248
- if (payload.command === "release" && options.allowAuditRelease === true) {
249
- return { ...result, audit_release: true };
250
- }
251
-
252
- return result;
253
- }
297
+ const bypassResult = [
298
+ decorateUpdateAuditBypassResult(payload, result),
299
+ decorateReleaseAuditBypassResult(payload, result),
300
+ ].find((candidate) => candidate !== undefined);
301
+ return bypassResult ?? result;
302
+ };
@@ -6,16 +6,63 @@
6
6
  */
7
7
  import path from "node:path";
8
8
  import { pathToFileURL } from "node:url";
9
- import type * as RuntimeSdk from "@unbrained/pm-cli/sdk/runtime";
9
+ import type {
10
+ EXIT_CODE as RuntimeExitCode,
11
+ PmCliError as RuntimePmCliError,
12
+ PmClient as RuntimePmClient,
13
+ getActiveExtensionRegistrations as runtimeGetActiveExtensionRegistrations,
14
+ getSettingsPath as runtimeGetSettingsPath,
15
+ isTerminalStatus as runtimeIsTerminalStatus,
16
+ locateItem as runtimeLocateItem,
17
+ normalizeStatusInput as runtimeNormalizeStatusInput,
18
+ nowIso as runtimeNowIso,
19
+ pathExists as runtimePathExists,
20
+ readBooleanOption as runtimeReadBooleanOption,
21
+ readCsvListOption as runtimeReadCsvListOption,
22
+ readLocatedItem as runtimeReadLocatedItem,
23
+ readSettings as runtimeReadSettings,
24
+ readStringOption as runtimeReadStringOption,
25
+ resolveItemTypeRegistry as runtimeResolveItemTypeRegistry,
26
+ resolvePmRoot as runtimeResolvePmRoot,
27
+ resolveRuntimeStatusRegistry as runtimeResolveRuntimeStatusRegistry,
28
+ runClose as runtimeRunClose,
29
+ runList as runtimeRunList,
30
+ runUpdate as runtimeRunUpdate,
31
+ } from "@unbrained/pm-cli/sdk/runtime";
32
+
33
+ /** Typed host-runtime values consumed through the package's dynamic boundary. */
34
+ interface RuntimeSdkModule {
35
+ EXIT_CODE: typeof RuntimeExitCode;
36
+ PmCliError: typeof RuntimePmCliError;
37
+ PmClient: typeof RuntimePmClient;
38
+ getActiveExtensionRegistrations: typeof runtimeGetActiveExtensionRegistrations;
39
+ getSettingsPath: typeof runtimeGetSettingsPath;
40
+ isTerminalStatus: typeof runtimeIsTerminalStatus;
41
+ locateItem: typeof runtimeLocateItem;
42
+ normalizeStatusInput: typeof runtimeNormalizeStatusInput;
43
+ nowIso: typeof runtimeNowIso;
44
+ pathExists: typeof runtimePathExists;
45
+ readBooleanOption: typeof runtimeReadBooleanOption;
46
+ readCsvListOption: typeof runtimeReadCsvListOption;
47
+ readLocatedItem: typeof runtimeReadLocatedItem;
48
+ readSettings: typeof runtimeReadSettings;
49
+ readStringOption: typeof runtimeReadStringOption;
50
+ resolveItemTypeRegistry: typeof runtimeResolveItemTypeRegistry;
51
+ resolvePmRoot: typeof runtimeResolvePmRoot;
52
+ resolveRuntimeStatusRegistry: typeof runtimeResolveRuntimeStatusRegistry;
53
+ runClose: typeof runtimeRunClose;
54
+ runList: typeof runtimeRunList;
55
+ runUpdate: typeof runtimeRunUpdate;
56
+ }
10
57
 
11
58
  const packageRoot = process.env.PM_CLI_PACKAGE_ROOT?.trim();
12
- let loadedRuntime: typeof RuntimeSdk;
59
+ let loadedRuntime: RuntimeSdkModule;
13
60
  /* c8 ignore start -- copied installs exercise PM_CLI_PACKAGE_ROOT in subprocess integration coverage. */
14
61
  try {
15
62
  if (packageRoot) {
16
63
  loadedRuntime = (await import(
17
64
  pathToFileURL(path.join(packageRoot, "dist", "sdk", "runtime.js")).href
18
- )) as typeof RuntimeSdk;
65
+ )) as RuntimeSdkModule;
19
66
  } else {
20
67
  loadedRuntime = await import("@unbrained/pm-cli/sdk/runtime");
21
68
  }
@@ -50,10 +97,12 @@ export const {
50
97
  resolvePmRoot,
51
98
  resolveRuntimeStatusRegistry,
52
99
  runClose,
53
- runList,
54
100
  runUpdate,
55
101
  } = runtime;
56
102
 
103
+ /** Preserve the host SDK list overloads across the dynamic runtime boundary. */
104
+ export const runList: typeof runtimeRunList = runtime.runList;
105
+
57
106
  /** Runtime status registry inferred from the host SDK's schema resolver. */
58
107
  export type RuntimeStatusRegistry = ReturnType<
59
108
  typeof resolveRuntimeStatusRegistry
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for governance audit and normalization workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-guide-shell",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for guide and shell completion workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-kanban",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-lifecycle-hooks",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package demonstrating safe lifecycle hook registration.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-linked-test-adapters",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for optional linked-test run management adapters and reporters.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-search-advanced",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for semantic, hybrid, and reindex search workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-templates",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for reusable create templates.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-todos",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for Todo markdown import and export.",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pm-claude",
3
3
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
4
- "version": "2026.7.16",
4
+ "version": "2026.7.18",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-codex",
3
- "version": "2026.7.16",
3
+ "version": "2026.7.18",
4
4
  "description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
5
5
  "author": {
6
6
  "name": "unbrained",
@@ -1 +0,0 @@
1
- {"version":3,"file":"item-filter-options.js","sources":["cli/commands/item-filter-options.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/item-filter-options\n *\n * Shared item-filter option contracts used by command implementations and SDK-facing types.\n */\n\n/** Common scalar item filters accepted by list/search-style commands. */\nexport interface SharedItemScalarFilterOptions {\n /** Lifecycle state reported for status. */\n status?: string;\n /** Schema type that determines the shape and validation rules for this value. */\n type?: string;\n /** Value that configures or reports tag for this contract. */\n tag?: string;\n /** Value that configures or reports priority for this contract. */\n priority?: string;\n /** Value that configures or reports deadline before for this contract. */\n deadlineBefore?: string;\n /** Value that configures or reports deadline after for this contract. */\n deadlineAfter?: string;\n /** Value that configures or reports updated after for this contract. */\n updatedAfter?: string;\n /** Value that configures or reports updated before for this contract. */\n updatedBefore?: string;\n /** Value that configures or reports created after for this contract. */\n createdAfter?: string;\n /** Value that configures or reports created before for this contract. */\n createdBefore?: string;\n /** Value that configures or reports assignee for this contract. */\n assignee?: string;\n /** Value that configures or reports parent for this contract. */\n parent?: string;\n /** Value that configures or reports sprint for this contract. */\n sprint?: string;\n /** Value that configures or reports release for this contract. */\n release?: string;\n}\n\n/** Common governance-metadata presence filters accepted by item query commands. */\nexport interface SharedGovernanceMissingFilterOptions {\n /** Value that configures or reports filter reviewer missing for this contract. */\n filterReviewerMissing?: boolean;\n /** Value that configures or reports filter risk missing for this contract. */\n filterRiskMissing?: boolean;\n /** Value that configures or reports filter confidence missing for this contract. */\n filterConfidenceMissing?: boolean;\n /** Value that configures or reports filter sprint missing for this contract. */\n filterSprintMissing?: boolean;\n /** Value that configures or reports filter release missing for this contract. */\n filterReleaseMissing?: boolean;\n}\n\n/** Common content-field presence filters accepted by item query commands. */\nexport interface SharedContentFieldFilterOptions {\n /** Whether notes applies to this operation. */\n hasNotes?: boolean;\n /** Whether learnings applies to this operation. */\n hasLearnings?: boolean;\n /** Whether files applies to this operation. */\n hasFiles?: boolean;\n /** Whether docs applies to this operation. */\n hasDocs?: boolean;\n /** Whether tests applies to this operation. */\n hasTests?: boolean;\n /** Whether comments applies to this operation. */\n hasComments?: boolean;\n /** Whether deps applies to this operation. */\n hasDeps?: boolean;\n /** Whether body applies to this operation. */\n hasBody?: boolean;\n /** Whether linked command applies to this operation. */\n hasLinkedCommand?: boolean;\n /** Value that configures or reports no notes for this contract. */\n noNotes?: boolean;\n /** Value that configures or reports no learnings for this contract. */\n noLearnings?: boolean;\n /** Value that configures or reports no files for this contract. */\n noFiles?: boolean;\n /** Value that configures or reports filter files missing for this contract. */\n filterFilesMissing?: boolean;\n /** Value that configures or reports no docs for this contract. */\n noDocs?: boolean;\n /** Value that configures or reports filter docs missing for this contract. */\n filterDocsMissing?: boolean;\n /** Value that configures or reports no tests for this contract. */\n noTests?: boolean;\n /** Value that configures or reports no comments for this contract. */\n noComments?: boolean;\n /** Value that configures or reports no deps for this contract. */\n noDeps?: boolean;\n /** Value that configures or reports empty body for this contract. */\n emptyBody?: boolean;\n /** Value that configures or reports no linked command for this contract. */\n noLinkedCommand?: boolean;\n}\n\n/** Base option shape for item query commands with schema/runtime extension flags. */\nexport interface SharedItemFilterOptions\n extends\n SharedItemScalarFilterOptions,\n SharedGovernanceMissingFilterOptions,\n SharedContentFieldFilterOptions {\n [key: string]: unknown;\n}\n"],"names":[],"mappings":"AAAA;;;;GAIG","debugId":"e9715bcc-aec2-557d-8ccd-13d3d0262792"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-pagination.js","sources":["cli/commands/search-pagination.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/search-pagination\n *\n * Applies the shared SDK cursor contract to ranked search results.\n */\nimport {\n createQueryFingerprint,\n paginateQueryRows,\n} from \"../../sdk/pagination.js\";\nimport type { SearchHit, SearchOptions } from \"./search.js\";\nimport type { SearchMode } from \"./search-rendering.js\";\n\n/** Build the query-only fingerprint shared by search retrieval and paging. */\nexport function createSearchCursorFingerprint(options: {\n query: string;\n mode: SearchMode;\n searchOptions: SearchOptions;\n}): string {\n const normalizedOptions: Record<string, unknown> = {\n ...options.searchOptions,\n };\n delete normalizedOptions.after;\n delete normalizedOptions.limit;\n delete normalizedOptions.compact;\n delete normalizedOptions.full;\n delete normalizedOptions.fields;\n delete normalizedOptions.highlight;\n delete normalizedOptions.format;\n return createQueryFingerprint(\"search\", {\n query: options.query.trim(),\n mode: options.mode,\n options: normalizedOptions,\n });\n}\n\n/** Page ranked search hits without coupling cursor mechanics to search scoring. */\nexport function resolveSearchPage(options: {\n sorted: SearchHit[];\n query: string;\n mode: SearchMode;\n searchOptions: SearchOptions;\n limit: number;\n}): {\n limited: SearchHit[];\n pageExtras: {\n has_more?: boolean;\n next_cursor?: string;\n applied_limit: number;\n truncated?: true;\n };\n} {\n const page = paginateQueryRows(options.sorted, {\n cursor: options.searchOptions.after,\n fingerprint: createSearchCursorFingerprint(options),\n limit: options.limit,\n readId: (hit) => hit.item.id,\n });\n return {\n limited: page.rows,\n pageExtras: {\n applied_limit: options.limit,\n ...(page.has_more ? { has_more: true, truncated: true } : {}),\n ...(page.next_cursor ? { next_cursor: page.next_cursor } : {}),\n },\n };\n}\n"],"names":[],"mappings":"AAAA;;;;GAIG;;;AACH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAIjC,8EAA8E;AAC9E,MAAM,UAAU,6BAA6B,CAAC,OAI7C;IACC,MAAM,iBAAiB,GAA4B;QACjD,GAAG,OAAO,CAAC,aAAa;KACzB,CAAC;IACF,OAAO,iBAAiB,CAAC,KAAK,CAAC;IAC/B,OAAO,iBAAiB,CAAC,KAAK,CAAC;IAC/B,OAAO,iBAAiB,CAAC,OAAO,CAAC;IACjC,OAAO,iBAAiB,CAAC,IAAI,CAAC;IAC9B,OAAO,iBAAiB,CAAC,MAAM,CAAC;IAChC,OAAO,iBAAiB,CAAC,SAAS,CAAC;IACnC,OAAO,iBAAiB,CAAC,MAAM,CAAC;IAChC,OAAO,sBAAsB,CAAC,QAAQ,EAAE;QACtC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;QAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,iBAAiB;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,OAMjC;IASC,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE;QAC7C,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK;QACnC,WAAW,EAAE,6BAA6B,CAAC,OAAO,CAAC;QACnD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;KAC7B,CAAC,CAAC;IACH,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,IAAI;QAClB,UAAU,EAAE;YACV,aAAa,EAAE,OAAO,CAAC,KAAK;YAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D;KACF,CAAC;AACJ,CAAC","debugId":"39599b41-97b7-53e2-9318-db5e3724bf2e"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-rendering.js","sources":["cli/commands/search-rendering.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/search-rendering\n *\n * Builds stable compact and verbose filter projections for search responses.\n */\nimport {\n applyFilterValueEcho,\n buildContentFilterEcho,\n buildGovernanceMissingFilterEcho,\n} from \"./list.js\";\nimport type { SearchMatchMode, SearchOptions } from \"./search.js\";\n\n/** Search execution modes represented in response metadata. */\nexport type SearchMode = \"keyword\" | \"semantic\" | \"hybrid\";\n\ninterface SearchRenderingQueryExpansion {\n enabled: boolean;\n provider: string | null;\n}\n\ninterface SearchRenderingRerank {\n enabled: boolean;\n model: string;\n top_k: number;\n}\n\nfunction isAllStatuses(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n const tokens = value\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter(Boolean);\n return tokens.length === 1 && tokens[0] === \"all\";\n}\n\nconst COMPACT_SEARCH_VALUE_FILTER_ECHO_ENTRIES = [\n {\n optionKey: \"status\",\n summaryKey: \"status\",\n normalize: (value: unknown) => (isAllStatuses(value) ? \"all\" : value),\n },\n { optionKey: \"type\", summaryKey: \"type\" },\n { optionKey: \"tag\", summaryKey: \"tag\" },\n { optionKey: \"priority\", summaryKey: \"priority\" },\n { optionKey: \"deadlineBefore\", summaryKey: \"deadline_before\" },\n { optionKey: \"deadlineAfter\", summaryKey: \"deadline_after\" },\n { optionKey: \"updatedAfter\", summaryKey: \"updated_after\" },\n { optionKey: \"updatedBefore\", summaryKey: \"updated_before\" },\n { optionKey: \"createdAfter\", summaryKey: \"created_after\" },\n { optionKey: \"createdBefore\", summaryKey: \"created_before\" },\n { optionKey: \"assignee\", summaryKey: \"assignee\" },\n { optionKey: \"sprint\", summaryKey: \"sprint\" },\n { optionKey: \"release\", summaryKey: \"release\" },\n { optionKey: \"parent\", summaryKey: \"parent\" },\n] as const;\n\n/** Builds the token-efficient filter echo used by compact search results. */\nexport function buildCompactSearchFilterSummary(params: {\n mode: SearchMode;\n matchMode: SearchMatchMode;\n options: SearchOptions;\n includeLinked: boolean;\n titleExact: boolean;\n phraseExact: boolean;\n scoreThreshold: number;\n hybridSemanticWeight: number;\n runtimeFieldFilters?: Record<string, unknown>;\n}): Record<string, unknown> {\n const { mode, matchMode, options, includeLinked, titleExact, phraseExact, scoreThreshold, hybridSemanticWeight, runtimeFieldFilters } = params;\n const filters: Record<string, unknown> = {};\n applyFilterValueEcho(filters, options, COMPACT_SEARCH_VALUE_FILTER_ECHO_ENTRIES);\n Object.assign(filters, buildGovernanceMissingFilterEcho(options as Record<string, unknown>));\n Object.assign(filters, buildContentFilterEcho(options as Record<string, unknown>));\n if (matchMode !== \"or\") filters.match_mode = matchMode;\n if (includeLinked) filters.include_linked = true;\n if (titleExact) filters.title_exact = true;\n if (phraseExact) filters.phrase_exact = true;\n if (scoreThreshold > 0) filters.score_threshold = scoreThreshold;\n if (mode === \"hybrid\" && options.semanticWeight !== undefined) {\n filters.hybrid_semantic_weight = hybridSemanticWeight;\n }\n if (options.limit !== undefined) filters.limit = options.limit;\n if (runtimeFieldFilters && Object.keys(runtimeFieldFilters).length > 0) {\n filters.runtime_filters = runtimeFieldFilters;\n }\n return filters;\n}\n\n/** Builds the complete filter echo shared by verbose search response paths. */\nexport function buildVerboseSearchFilters(params: {\n effectiveMode: SearchMode;\n matchMode: SearchMatchMode;\n options: SearchOptions;\n includeLinked: boolean;\n titleExact: boolean;\n phraseExact: boolean;\n scoreThreshold: number;\n hybridSemanticWeight: number;\n queryExpansion: SearchRenderingQueryExpansion;\n rerank: SearchRenderingRerank;\n runtimeFieldFilters: Record<string, unknown>;\n}): Record<string, unknown> {\n const { effectiveMode, matchMode, options, includeLinked, titleExact, phraseExact, scoreThreshold, hybridSemanticWeight, queryExpansion, rerank, runtimeFieldFilters } = params;\n const valueOrNull = (value: unknown): unknown => value ?? null;\n return {\n mode: effectiveMode,\n match_mode: matchMode,\n status: isAllStatuses(options.status) ? \"all\" : valueOrNull(options.status),\n type: valueOrNull(options.type),\n tag: valueOrNull(options.tag),\n priority: valueOrNull(options.priority),\n deadline_before: valueOrNull(options.deadlineBefore),\n deadline_after: valueOrNull(options.deadlineAfter),\n updated_after: valueOrNull(options.updatedAfter),\n updated_before: valueOrNull(options.updatedBefore),\n created_after: valueOrNull(options.createdAfter),\n created_before: valueOrNull(options.createdBefore),\n assignee: valueOrNull(options.assignee),\n sprint: valueOrNull(options.sprint),\n release: valueOrNull(options.release),\n parent: valueOrNull(options.parent),\n ...buildGovernanceMissingFilterEcho(options as Record<string, unknown>),\n ...buildContentFilterEcho(options as Record<string, unknown>),\n include_linked: includeLinked,\n title_exact: titleExact,\n phrase_exact: phraseExact,\n score_threshold: scoreThreshold,\n hybrid_semantic_weight: effectiveMode === \"hybrid\" ? hybridSemanticWeight : null,\n query_expansion_enabled: queryExpansion.enabled,\n query_expansion_provider: queryExpansion.provider,\n rerank_enabled: rerank.enabled,\n rerank_model: rerank.model,\n rerank_top_k: rerank.top_k,\n limit: valueOrNull(options.limit),\n runtime_filters: runtimeFieldFilters,\n };\n}\n"],"names":[],"mappings":"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","debugId":"4445c28d-0c05-583a-8b92-9dbe60e8b467"}
@@ -1,11 +0,0 @@
1
- import {
2
- runAppend
3
- } from "./chunk-AHVTB5I5.js";
4
- import "./chunk-YRYYFGV3.js";
5
- import "./chunk-TKOVBP6C.js";
6
- import "./chunk-XSJUSQAE.js";
7
- import "./chunk-BSEQUTQP.js";
8
- export {
9
- runAppend
10
- };
11
- //# sourceMappingURL=append-UZVHUO74.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../core/item/actionability.ts"],"sourcesContent":["/**\n * @module core/item/actionability\n *\n * Pure, dependency-aware actionability model shared by the `pm next` command and\n * the close-time auto-unblock sweep. It answers \"what is ready to work on now?\"\n * without any I/O: given a candidate set and the surrounding corpus it partitions\n * work into READY items (active, leaf, no open blockers) and BLOCKED items (active\n * leaf waiting on at least one open blocker). Keeping the logic here — rather than\n * inside a CLI command — makes it trivially testable and reusable, and gives the\n * `blocked_by` resolution a single source of truth.\n */\nimport { isTerminalStatus, normalizeStatusForRegistry } from \"./status.js\";\nimport type { RuntimeStatusRegistry } from \"../schema/runtime-schema.js\";\nimport type { ItemMetadata, ItemStatus } from \"../../types/index.js\";\n\n/** Dependency kind that marks \"this item is blocked by the referenced item\". */\nconst BLOCKED_BY_DEPENDENCY_KIND = \"blocked_by\";\n\n/**\n * Normalizes an item id / parent reference / blocker id to its canonical\n * comparison key (trimmed, lowercased). pm ids are canonically lowercase, but\n * resolving case-insensitively — as {@link collectSubtreeIds} does — keeps a\n * hand-edited mixed-case reference from being silently treated as missing.\n */\nfunction normalizeItemId(id: string): string {\n return id.trim().toLowerCase();\n}\n\n/** Collects the blocker item ids declared by an item: the legacy scalar `blocked_by` field plus every `blocked_by` dependency edge. Ids are trimmed, de-duplicated, and returned in stable lexicographic order. This is the single source of truth for \"what must close before this item can proceed\", shared by `pm next` readiness classification and the close-time auto-unblock sweep. */\nexport function collectBlockedByIds(\n item: Pick<ItemMetadata, \"blocked_by\" | \"dependencies\">,\n): string[] {\n const ids = new Set<string>();\n const scalar =\n typeof item.blocked_by === \"string\" ? item.blocked_by.trim() : \"\";\n if (scalar.length > 0) {\n ids.add(scalar);\n }\n for (const dependency of item.dependencies ?? []) {\n if (\n dependency.kind === BLOCKED_BY_DEPENDENCY_KIND &&\n typeof dependency.id === \"string\" &&\n dependency.id.trim().length > 0\n ) {\n ids.add(dependency.id.trim());\n }\n }\n return [...ids].sort((left, right) => left.localeCompare(right));\n}\n\n/** A blocker reference resolved against the corpus and annotated with its state. */\nexport interface ResolvedBlocker {\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Value that configures or reports title for this contract. */\n title: string | null;\n /** Lifecycle state reported for status. */\n status: ItemStatus | null;\n /** True when the blocker no longer gates work because the referenced item is terminal. */\n resolved: boolean;\n}\n\n/** Resolves an item's declared blockers against a corpus index, annotating each with the blocker's title/status and whether it still gates work. Unknown ids remain unresolved: silently treating a typo as satisfied would dispatch work whose prerequisite was never completed. Terminal referenced items alone are resolved. */\nexport function resolveItemBlockers(\n item: Pick<ItemMetadata, \"blocked_by\" | \"dependencies\">,\n itemsById: Map<string, ItemMetadata>,\n statusRegistry: RuntimeStatusRegistry,\n): ResolvedBlocker[] {\n return collectBlockedByIds(item).map((id) => {\n const blocker = itemsById.get(normalizeItemId(id));\n if (!blocker) {\n return { id, title: null, status: null, resolved: false };\n }\n return {\n id,\n title: blocker.title,\n status: blocker.status,\n resolved: isTerminalStatus(blocker.status, statusRegistry),\n };\n });\n}\n\n/** A classified actionable item plus the context an agent needs to act on it. */\nexport interface ActionableEntry {\n /** Value that configures or reports item for this contract. */\n item: ItemMetadata;\n /** Blockers that still gate the item (resolved blockers are filtered out). */\n open_blockers: ResolvedBlocker[];\n /** Ids of non-terminal items whose `blocked_by` points at this item. */\n unblocks: string[];\n}\n\n/** Result of partitioning a candidate set into ready vs blocked leaf work. */\nexport interface ActionabilityReport {\n /** Active leaves with no open blockers — ready to work on now. */\n ready: ActionableEntry[];\n /** Active leaves with at least one open blocker — waiting to become ready. */\n blocked: ActionableEntry[];\n /** Active candidates considered before the leaf/blocker split. */\n active_count: number;\n /** Active candidates skipped because they still have open descendants. */\n container_count: number;\n}\n\n/** Resolves the registry's active status set, falling back to just the canonical open status when a custom schema declares none — the same safety net `pm context` applies so the report never misclassifies every item as inactive. */\nfunction resolveActiveStatusSet(\n statusRegistry: RuntimeStatusRegistry,\n): Set<string> {\n /* c8 ignore start -- fallback applies only to custom schemas that intentionally define zero active statuses */\n return statusRegistry.active_statuses.size > 0\n ? statusRegistry.active_statuses\n : new Set<string>([statusRegistry.open_status]);\n /* c8 ignore stop */\n}\n\n/** Returns whether an item has any non-terminal descendant by walking the parent→children index depth-first, short-circuiting on the first one found. Such an item is a container (its real work lives in its children), so `pm next` skips it and recommends a leaf instead. Cycle-safe via a visited set. */\nfunction hasOpenDescendant(\n rootId: string,\n childrenByParent: Map<string, ItemMetadata[]>,\n statusRegistry: RuntimeStatusRegistry,\n): boolean {\n const stack = [normalizeItemId(rootId)];\n const visited = new Set<string>();\n while (stack.length > 0) {\n const current = stack.pop() as string;\n /* c8 ignore start -- defensive cycle-guard: unreachable for active roots (an open child returns before any node is revisited, and single-parent graphs cannot form a root-reachable cycle excluding the root), retained for safety */\n if (visited.has(current)) continue;\n /* c8 ignore stop */\n visited.add(current);\n for (const child of childrenByParent.get(current) ?? []) {\n if (!isTerminalStatus(child.status, statusRegistry)) {\n return true;\n }\n stack.push(normalizeItemId(child.id));\n }\n }\n return false;\n}\n\n/** Indexes the corpus into a by-id map, a parent→children map, and a reverse blocker map (blocker id → ids of items it blocks). Built once per report so blocker resolution, descendant counting, and downstream \"unblocks\" lookups share the same passes over the corpus. */\nfunction indexCorpus(corpus: ItemMetadata[]): {\n itemsById: Map<string, ItemMetadata>;\n childrenByParent: Map<string, ItemMetadata[]>;\n blockedByReverse: Map<string, string[]>;\n} {\n const itemsById = new Map<string, ItemMetadata>();\n const childrenByParent = new Map<string, ItemMetadata[]>();\n const blockedByReverse = new Map<string, string[]>();\n for (const item of corpus) {\n // Index keys are normalized (lowercased) for case-insensitive resolution;\n // stored values keep the item's original-case id for display.\n itemsById.set(normalizeItemId(item.id), item);\n const parent = typeof item.parent === \"string\" ? item.parent.trim() : \"\";\n if (parent.length > 0) {\n const parentKey = normalizeItemId(parent);\n const siblings = childrenByParent.get(parentKey) ?? [];\n siblings.push(item);\n childrenByParent.set(parentKey, siblings);\n }\n for (const blockerId of collectBlockedByIds(item)) {\n const blockerKey = normalizeItemId(blockerId);\n const dependents = blockedByReverse.get(blockerKey) ?? [];\n dependents.push(item.id);\n blockedByReverse.set(blockerKey, dependents);\n }\n }\n return { itemsById, childrenByParent, blockedByReverse };\n}\n\n/**\n * Partitions a candidate set into ready vs blocked leaf work using the corpus to\n * resolve blockers, descendants, and downstream dependents.\n *\n * An item qualifies when its status is active. Containers — items with at least\n * one non-terminal descendant — are excluded from both lists because the real\n * work is the leaf beneath them. A leaf with no open blockers is READY; a leaf\n * with one or more open blockers is BLOCKED, annotated with the unresolved\n * blockers and the non-terminal items it would unblock. Returned lists preserve\n * the candidate order so the caller can apply its own ranking.\n */\nexport function computeActionabilityReport(\n candidates: ItemMetadata[],\n corpus: ItemMetadata[],\n statusRegistry: RuntimeStatusRegistry,\n): ActionabilityReport {\n const { itemsById, childrenByParent, blockedByReverse } = indexCorpus(corpus);\n const activeStatuses = new Set([\n ...resolveActiveStatusSet(statusRegistry),\n ...statusRegistry.blocked_statuses,\n ]);\n // Ids of corpus items still in flight, used to keep only the non-terminal\n // dependents in each item's downstream \"unblocks\" list.\n const nonTerminalIds = new Set(\n corpus\n .filter((entry) => !isTerminalStatus(entry.status, statusRegistry))\n .map((entry) => normalizeItemId(entry.id)),\n );\n const ready: ActionableEntry[] = [];\n const blocked: ActionableEntry[] = [];\n let activeCount = 0;\n let containerCount = 0;\n for (const item of candidates) {\n if (\n !activeStatuses.has(\n normalizeStatusForRegistry(item.status, statusRegistry),\n )\n )\n continue;\n activeCount += 1;\n if (hasOpenDescendant(item.id, childrenByParent, statusRegistry)) {\n containerCount += 1;\n continue;\n }\n const openBlockers = resolveItemBlockers(\n item,\n itemsById,\n statusRegistry,\n ).filter((blocker) => !blocker.resolved);\n const unblocks = (blockedByReverse.get(normalizeItemId(item.id)) ?? [])\n .filter((dependentId) => nonTerminalIds.has(normalizeItemId(dependentId)))\n .sort((left, right) => left.localeCompare(right));\n const entry: ActionableEntry = {\n item,\n open_blockers: openBlockers,\n unblocks,\n };\n const lifecycleBlocked = statusRegistry.blocked_statuses.has(\n normalizeStatusForRegistry(item.status, statusRegistry),\n );\n if (openBlockers.length === 0 && !lifecycleBlocked) {\n ready.push(entry);\n } else {\n blocked.push(entry);\n }\n }\n return {\n ready,\n blocked,\n active_count: activeCount,\n container_count: containerCount,\n };\n}\n"],"names":[],"mappings":"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","debugId":"2fcf91f3-1b2e-5b80-a790-93055aee4f49"}