@unbrained/pm-cli 2026.7.17 → 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 (264) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +13 -0
  3. package/dist/cli/commands/close.d.ts +1 -1
  4. package/dist/cli/commands/close.js +3 -3
  5. package/dist/cli/commands/close.js.map +1 -1
  6. package/dist/cli/commands/completion.js +47 -5
  7. package/dist/cli/commands/completion.js.map +1 -1
  8. package/dist/cli/commands/context.d.ts +2 -2
  9. package/dist/cli/commands/context.js +42 -28
  10. package/dist/cli/commands/context.js.map +1 -1
  11. package/dist/cli/commands/contracts.js +5 -3
  12. package/dist/cli/commands/contracts.js.map +1 -1
  13. package/dist/cli/commands/graph.d.ts +7 -0
  14. package/dist/cli/commands/graph.js +11 -0
  15. package/dist/cli/commands/graph.js.map +1 -0
  16. package/dist/cli/commands/index.d.ts +1 -0
  17. package/dist/cli/commands/index.js +3 -2
  18. package/dist/cli/commands/index.js.map +1 -1
  19. package/dist/cli/commands/next.d.ts +1 -1
  20. package/dist/cli/commands/next.js +3 -3
  21. package/dist/cli/commands/next.js.map +1 -1
  22. package/dist/cli/main.js +3 -2
  23. package/dist/cli/main.js.map +1 -1
  24. package/dist/cli/register-list-query.js +49 -7
  25. package/dist/cli/register-list-query.js.map +1 -1
  26. package/dist/cli/register-mutation.js +7 -3
  27. package/dist/cli/register-mutation.js.map +1 -1
  28. package/dist/cli-bundle/bundle-manifest.json +157 -149
  29. package/dist/cli-bundle/chunks/{chunk-N7I2DGLP.js → chunk-35FHWD4C.js} +4 -4
  30. package/dist/cli-bundle/chunks/{chunk-37V5MXAU.js.map → chunk-35FHWD4C.js.map} +1 -7
  31. package/dist/cli-bundle/chunks/{chunk-MSGETE6I.js → chunk-3CUQZNQ6.js} +67 -509
  32. package/dist/cli-bundle/chunks/chunk-3CUQZNQ6.js.map +7 -0
  33. package/dist/cli-bundle/chunks/chunk-3QDR6ZLU.js +800 -0
  34. package/dist/cli-bundle/chunks/chunk-3QDR6ZLU.js.map +7 -0
  35. package/dist/cli-bundle/chunks/{chunk-QNUAZYGW.js → chunk-43UMFKCK.js} +3 -3
  36. package/dist/cli-bundle/chunks/{chunk-HF63SBLC.js → chunk-6VHUGVNP.js} +39 -16
  37. package/dist/cli-bundle/chunks/chunk-6VHUGVNP.js.map +1 -0
  38. package/dist/cli-bundle/chunks/{chunk-B6SH2YNN.js → chunk-7R6UIHYY.js} +2 -2
  39. package/dist/cli-bundle/chunks/{chunk-NCAFUBJX.js → chunk-7UCY6DR5.js} +183 -12
  40. package/dist/cli-bundle/chunks/chunk-7UCY6DR5.js.map +1 -0
  41. package/dist/cli-bundle/chunks/{chunk-23TCGBRK.js → chunk-ADXDCAKP.js} +2 -2
  42. package/dist/cli-bundle/chunks/{chunk-7LTCLTRG.js → chunk-AXRT7K5V.js} +16 -3
  43. package/dist/cli-bundle/chunks/chunk-AXRT7K5V.js.map +7 -0
  44. package/dist/cli-bundle/chunks/{chunk-P56LKFQX.js → chunk-BDA35QG5.js} +34 -4
  45. package/dist/cli-bundle/chunks/chunk-BDA35QG5.js.map +7 -0
  46. package/dist/cli-bundle/chunks/{chunk-2MPMKJF2.js → chunk-DHNG452T.js} +2 -2
  47. package/dist/cli-bundle/chunks/{chunk-AFSV5HBB.js → chunk-E4FXM2XB.js} +2 -2
  48. package/dist/cli-bundle/chunks/{chunk-QKVVV6QO.js → chunk-EWIT5WIC.js} +3 -3
  49. package/dist/cli-bundle/chunks/chunk-EX7OQT3Y.js +783 -0
  50. package/dist/cli-bundle/chunks/chunk-EX7OQT3Y.js.map +1 -0
  51. package/dist/cli-bundle/chunks/{chunk-LLODAQMP.js → chunk-F3VC3GOV.js} +41 -18
  52. package/dist/cli-bundle/chunks/chunk-F3VC3GOV.js.map +7 -0
  53. package/dist/cli-bundle/chunks/{chunk-S46R2M3W.js → chunk-GKPCTQYG.js} +1709 -5
  54. package/dist/cli-bundle/chunks/chunk-GKPCTQYG.js.map +7 -0
  55. package/dist/cli-bundle/chunks/{chunk-HXVHBERL.js → chunk-HPAYDSR2.js} +2 -2
  56. package/dist/cli-bundle/chunks/{chunk-XNPMDSQQ.js → chunk-HYTOJW2Q.js} +2 -2
  57. package/dist/cli-bundle/chunks/{chunk-V3VBXQQV.js → chunk-I3INI567.js} +516 -429
  58. package/dist/cli-bundle/chunks/chunk-I3INI567.js.map +7 -0
  59. package/dist/cli-bundle/chunks/{chunk-V7MP6YTN.js → chunk-IL5SPRMH.js} +2 -2
  60. package/dist/cli-bundle/chunks/{chunk-YQCWK2MB.js → chunk-L5BTTDU5.js} +68 -503
  61. package/dist/cli-bundle/chunks/chunk-L5BTTDU5.js.map +1 -0
  62. package/dist/cli-bundle/chunks/{chunk-SIJV365F.js → chunk-NCVT6XEL.js} +17 -4
  63. package/dist/cli-bundle/chunks/chunk-NCVT6XEL.js.map +1 -0
  64. package/dist/cli-bundle/chunks/{chunk-DCC2AQBD.js → chunk-OGVTB5VO.js} +32 -31
  65. package/dist/cli-bundle/chunks/chunk-OGVTB5VO.js.map +7 -0
  66. package/dist/cli-bundle/chunks/{chunk-6XAZB6SE.js → chunk-QPGQNLPI.js} +1660 -7
  67. package/dist/cli-bundle/chunks/chunk-QPGQNLPI.js.map +1 -0
  68. package/dist/cli-bundle/chunks/{chunk-KOEZCHRF.js → chunk-QRZNCRNA.js} +2 -2
  69. package/dist/cli-bundle/chunks/{chunk-G6KM4YKY.js → chunk-RXPQ5Q23.js} +3 -3
  70. package/dist/cli-bundle/chunks/{chunk-7CTQ7WW5.js → chunk-SIPOACV5.js} +514 -427
  71. package/dist/cli-bundle/chunks/chunk-SIPOACV5.js.map +1 -0
  72. package/dist/cli-bundle/chunks/{chunk-XYJK6GIQ.js → chunk-TGBTLGPX.js} +2 -2
  73. package/dist/cli-bundle/chunks/{chunk-37V5MXAU.js → chunk-TLWJP5BF.js} +3 -3
  74. package/dist/cli-bundle/chunks/chunk-TLWJP5BF.js.map +7 -0
  75. package/dist/cli-bundle/chunks/{chunk-3D4YVTNG.js → chunk-TZAE66GQ.js} +2 -2
  76. package/dist/cli-bundle/chunks/{chunk-S6FF7VW6.js → chunk-WQXRZMFN.js} +187 -16
  77. package/dist/cli-bundle/chunks/chunk-WQXRZMFN.js.map +7 -0
  78. package/dist/cli-bundle/chunks/{chunk-SPFZV2GR.js → chunk-XPUTSGJU.js} +32 -31
  79. package/dist/cli-bundle/chunks/chunk-XPUTSGJU.js.map +1 -0
  80. package/dist/cli-bundle/chunks/{chunk-CFSUNEL7.js → chunk-XWBD6DSR.js} +3 -3
  81. package/dist/cli-bundle/chunks/{chunk-MNV226E4.js → chunk-XWYQ2LT4.js} +2 -2
  82. package/dist/cli-bundle/chunks/{chunk-I7GY4X6Y.js → chunk-YFE7JHX3.js} +26 -5
  83. package/dist/cli-bundle/chunks/chunk-YFE7JHX3.js.map +1 -0
  84. package/dist/cli-bundle/chunks/{chunk-FZGM3PNA.js → chunk-YIIIAKCE.js} +2 -2
  85. package/dist/cli-bundle/chunks/{close-BEP7MHF3.js → close-GPD7DTJV.js} +3 -3
  86. package/dist/cli-bundle/chunks/{close-Y6QFUJQN.js → close-X3CF6FQP.js} +3 -3
  87. package/dist/cli-bundle/chunks/{close-many-JJFW7KTT.js → close-many-J7A5EHOQ.js} +5 -5
  88. package/dist/cli-bundle/chunks/{close-many-QJ6FKJUE.js → close-many-NQLYGPYW.js} +5 -5
  89. package/dist/cli-bundle/chunks/{deps-EVTOQMKW.js → deps-MQ4ZIGZB.js} +13 -4
  90. package/dist/cli-bundle/chunks/{deps-5NC4IZH7.js → deps-NIIKXLPB.js} +13 -4
  91. package/dist/cli-bundle/chunks/{profile-U2B6Y7GE.js → profile-AVCIIZID.js} +3 -3
  92. package/dist/cli-bundle/chunks/{profile-AGUKS52S.js → profile-LFYO3HHX.js} +3 -3
  93. package/dist/cli-bundle/chunks/{register-list-query-A5KRJ5J2.js → register-list-query-MZUF2EEC.js} +41 -13
  94. package/dist/cli-bundle/chunks/register-list-query-MZUF2EEC.js.map +1 -0
  95. package/dist/cli-bundle/chunks/{register-list-query-NEYP3TXO.js → register-list-query-UKMF55FT.js} +40 -12
  96. package/dist/cli-bundle/chunks/register-list-query-UKMF55FT.js.map +7 -0
  97. package/dist/cli-bundle/chunks/{register-mutation-6LOPBAHC.js → register-mutation-2PBW2GEX.js} +15 -13
  98. package/dist/cli-bundle/chunks/register-mutation-2PBW2GEX.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{register-mutation-GCZOALNJ.js → register-mutation-T6RVNJC4.js} +14 -12
  100. package/dist/cli-bundle/chunks/{register-mutation-GCZOALNJ.js.map → register-mutation-T6RVNJC4.js.map} +2 -2
  101. package/dist/cli-bundle/chunks/{register-operations-6ZZIF27A.js → register-operations-KHZYR6MG.js} +11 -11
  102. package/dist/cli-bundle/chunks/{register-operations-REDIAEGI.js → register-operations-WPQ2LWZJ.js} +11 -11
  103. package/dist/cli-bundle/chunks/{register-setup-J3JS2ZVT.js → register-setup-PGDNOXDQ.js} +5 -5
  104. package/dist/cli-bundle/chunks/{register-setup-BHPMN5SK.js → register-setup-TDN7WAO6.js} +5 -5
  105. package/dist/cli-bundle/chunks/{update-SA6AG23P.js → update-SQYZA3ZW.js} +4 -4
  106. package/dist/cli-bundle/chunks/{update-PQQHLYCC.js → update-XZJYS5X7.js} +4 -4
  107. package/dist/cli-bundle/chunks/{update-many-RQVTFJPD.js → update-many-R24B3GBK.js} +6 -6
  108. package/dist/cli-bundle/chunks/{update-many-TV3L3KBX.js → update-many-WQ3R3J6N.js} +6 -6
  109. package/dist/cli-bundle/main.js +25 -9
  110. package/dist/cli-bundle/main.js.map +2 -2
  111. package/dist/cli-bundle/sdk-runtime.js +19 -16
  112. package/dist/cli-bundle/sdk.js +95 -305
  113. package/dist/cli-bundle/sdk.js.map +4 -4
  114. package/dist/core/item/actionability.d.ts +12 -0
  115. package/dist/core/item/actionability.js +39 -4
  116. package/dist/core/item/actionability.js.map +1 -1
  117. package/dist/core/sentry/instrument.d.ts +11 -0
  118. package/dist/core/sentry/instrument.js +21 -2
  119. package/dist/core/sentry/instrument.js.map +1 -1
  120. package/dist/mcp/server.d.ts +16 -18
  121. package/dist/mcp/server.js +84 -31
  122. package/dist/mcp/server.js.map +1 -1
  123. package/dist/mcp/tool-definitions.js +17 -4
  124. package/dist/mcp/tool-definitions.js.map +1 -1
  125. package/dist/sdk/actionability.d.ts +10 -0
  126. package/dist/sdk/actionability.js +14 -0
  127. package/dist/sdk/actionability.js.map +1 -0
  128. package/dist/sdk/cli-contracts/enum-contracts.d.ts +6 -2
  129. package/dist/sdk/cli-contracts/enum-contracts.js +19 -2
  130. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  131. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  132. package/dist/sdk/cli-contracts/flag-contracts.js +21 -2
  133. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  134. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +2 -0
  135. package/dist/sdk/cli-contracts/tool-option-contracts.js +16 -2
  136. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  137. package/dist/sdk/cli-contracts/tool-parameter-tables.js +80 -3
  138. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  139. package/dist/sdk/cli-contracts/tool-schema.d.ts +20 -0
  140. package/dist/sdk/cli-contracts/tool-schema.js +97 -9
  141. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  142. package/dist/sdk/cli-contracts.d.ts +2 -2
  143. package/dist/sdk/cli-contracts.js +4 -4
  144. package/dist/sdk/cli-contracts.js.map +1 -1
  145. package/dist/sdk/dependencies.d.ts +42 -53
  146. package/dist/sdk/dependencies.js +177 -125
  147. package/dist/sdk/dependencies.js.map +1 -1
  148. package/dist/sdk/governance/validate.js +3 -3
  149. package/dist/sdk/governance/validate.js.map +1 -1
  150. package/dist/sdk/graph/analytics.d.ts +124 -0
  151. package/dist/sdk/graph/analytics.js +464 -0
  152. package/dist/sdk/graph/analytics.js.map +1 -0
  153. package/dist/sdk/graph/assembly.d.ts +97 -0
  154. package/dist/sdk/graph/assembly.js +146 -0
  155. package/dist/sdk/graph/assembly.js.map +1 -0
  156. package/dist/sdk/graph/cache.d.ts +66 -0
  157. package/dist/sdk/graph/cache.js +148 -0
  158. package/dist/sdk/graph/cache.js.map +1 -0
  159. package/dist/sdk/graph/governance.d.ts +108 -0
  160. package/dist/sdk/graph/governance.js +360 -0
  161. package/dist/sdk/graph/governance.js.map +1 -0
  162. package/dist/sdk/graph/index.d.ts +16 -0
  163. package/dist/sdk/graph/index.js +20 -0
  164. package/dist/sdk/graph/index.js.map +1 -0
  165. package/dist/sdk/graph/remediation.d.ts +52 -0
  166. package/dist/sdk/graph/remediation.js +148 -0
  167. package/dist/sdk/graph/remediation.js.map +1 -0
  168. package/dist/sdk/graph/run.d.ts +295 -0
  169. package/dist/sdk/graph/run.js +468 -0
  170. package/dist/sdk/graph/run.js.map +1 -0
  171. package/dist/sdk/graph/traversal.d.ts +77 -0
  172. package/dist/sdk/graph/traversal.js +262 -0
  173. package/dist/sdk/graph/traversal.js.map +1 -0
  174. package/dist/sdk/index.d.ts +4 -2
  175. package/dist/sdk/index.js +6 -4
  176. package/dist/sdk/index.js.map +1 -1
  177. package/dist/sdk/query/list.d.ts +8 -0
  178. package/dist/sdk/query/list.js +19 -3
  179. package/dist/sdk/query/list.js.map +1 -1
  180. package/dist/sdk/relationship-context.d.ts +42 -0
  181. package/dist/sdk/relationship-context.js +99 -20
  182. package/dist/sdk/relationship-context.js.map +1 -1
  183. package/dist/sdk/relationships.d.ts +13 -0
  184. package/dist/sdk/relationships.js +30 -2
  185. package/dist/sdk/relationships.js.map +1 -1
  186. package/dist/sdk/runtime-input.d.ts +41 -0
  187. package/dist/sdk/runtime-input.js +422 -2
  188. package/dist/sdk/runtime-input.js.map +1 -1
  189. package/dist/sdk/runtime.d.ts +12 -23
  190. package/dist/sdk/runtime.js +19 -371
  191. package/dist/sdk/runtime.js.map +1 -1
  192. package/dist/sdk/test/linked-command-detection.js +12 -3
  193. package/dist/sdk/test/linked-command-detection.js.map +1 -1
  194. package/docs/AGENT_GUIDE.md +1 -0
  195. package/docs/COMMANDS.md +19 -1
  196. package/docs/RELATIONSHIP_GRAPH.md +99 -3
  197. package/docs/SDK.md +17 -3
  198. package/marketplace.json +2 -2
  199. package/package.json +1 -1
  200. package/packages/pm-beads/package.json +1 -1
  201. package/packages/pm-calendar/package.json +1 -1
  202. package/packages/pm-command-kit/package.json +1 -1
  203. package/packages/pm-governance-audit/package.json +1 -1
  204. package/packages/pm-guide-shell/package.json +1 -1
  205. package/packages/pm-kanban/package.json +1 -1
  206. package/packages/pm-lifecycle-hooks/package.json +1 -1
  207. package/packages/pm-linked-test-adapters/package.json +1 -1
  208. package/packages/pm-search-advanced/package.json +1 -1
  209. package/packages/pm-templates/package.json +1 -1
  210. package/packages/pm-todos/package.json +1 -1
  211. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  212. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  213. package/dist/cli-bundle/chunks/chunk-6XAZB6SE.js.map +0 -1
  214. package/dist/cli-bundle/chunks/chunk-7CTQ7WW5.js.map +0 -1
  215. package/dist/cli-bundle/chunks/chunk-7LTCLTRG.js.map +0 -7
  216. package/dist/cli-bundle/chunks/chunk-DCC2AQBD.js.map +0 -7
  217. package/dist/cli-bundle/chunks/chunk-HF63SBLC.js.map +0 -1
  218. package/dist/cli-bundle/chunks/chunk-I7GY4X6Y.js.map +0 -1
  219. package/dist/cli-bundle/chunks/chunk-LLODAQMP.js.map +0 -7
  220. package/dist/cli-bundle/chunks/chunk-MSGETE6I.js.map +0 -7
  221. package/dist/cli-bundle/chunks/chunk-N7I2DGLP.js.map +0 -1
  222. package/dist/cli-bundle/chunks/chunk-NCAFUBJX.js.map +0 -1
  223. package/dist/cli-bundle/chunks/chunk-P56LKFQX.js.map +0 -7
  224. package/dist/cli-bundle/chunks/chunk-S46R2M3W.js.map +0 -7
  225. package/dist/cli-bundle/chunks/chunk-S6FF7VW6.js.map +0 -7
  226. package/dist/cli-bundle/chunks/chunk-SIJV365F.js.map +0 -1
  227. package/dist/cli-bundle/chunks/chunk-SPFZV2GR.js.map +0 -1
  228. package/dist/cli-bundle/chunks/chunk-V3VBXQQV.js.map +0 -7
  229. package/dist/cli-bundle/chunks/chunk-YQCWK2MB.js.map +0 -1
  230. package/dist/cli-bundle/chunks/register-list-query-A5KRJ5J2.js.map +0 -1
  231. package/dist/cli-bundle/chunks/register-list-query-NEYP3TXO.js.map +0 -7
  232. package/dist/cli-bundle/chunks/register-mutation-6LOPBAHC.js.map +0 -1
  233. /package/dist/cli-bundle/chunks/{chunk-QNUAZYGW.js.map → chunk-43UMFKCK.js.map} +0 -0
  234. /package/dist/cli-bundle/chunks/{chunk-B6SH2YNN.js.map → chunk-7R6UIHYY.js.map} +0 -0
  235. /package/dist/cli-bundle/chunks/{chunk-23TCGBRK.js.map → chunk-ADXDCAKP.js.map} +0 -0
  236. /package/dist/cli-bundle/chunks/{chunk-2MPMKJF2.js.map → chunk-DHNG452T.js.map} +0 -0
  237. /package/dist/cli-bundle/chunks/{chunk-AFSV5HBB.js.map → chunk-E4FXM2XB.js.map} +0 -0
  238. /package/dist/cli-bundle/chunks/{chunk-QKVVV6QO.js.map → chunk-EWIT5WIC.js.map} +0 -0
  239. /package/dist/cli-bundle/chunks/{chunk-HXVHBERL.js.map → chunk-HPAYDSR2.js.map} +0 -0
  240. /package/dist/cli-bundle/chunks/{chunk-XNPMDSQQ.js.map → chunk-HYTOJW2Q.js.map} +0 -0
  241. /package/dist/cli-bundle/chunks/{chunk-V7MP6YTN.js.map → chunk-IL5SPRMH.js.map} +0 -0
  242. /package/dist/cli-bundle/chunks/{chunk-KOEZCHRF.js.map → chunk-QRZNCRNA.js.map} +0 -0
  243. /package/dist/cli-bundle/chunks/{chunk-G6KM4YKY.js.map → chunk-RXPQ5Q23.js.map} +0 -0
  244. /package/dist/cli-bundle/chunks/{chunk-XYJK6GIQ.js.map → chunk-TGBTLGPX.js.map} +0 -0
  245. /package/dist/cli-bundle/chunks/{chunk-3D4YVTNG.js.map → chunk-TZAE66GQ.js.map} +0 -0
  246. /package/dist/cli-bundle/chunks/{chunk-CFSUNEL7.js.map → chunk-XWBD6DSR.js.map} +0 -0
  247. /package/dist/cli-bundle/chunks/{chunk-MNV226E4.js.map → chunk-XWYQ2LT4.js.map} +0 -0
  248. /package/dist/cli-bundle/chunks/{chunk-FZGM3PNA.js.map → chunk-YIIIAKCE.js.map} +0 -0
  249. /package/dist/cli-bundle/chunks/{close-BEP7MHF3.js.map → close-GPD7DTJV.js.map} +0 -0
  250. /package/dist/cli-bundle/chunks/{close-Y6QFUJQN.js.map → close-X3CF6FQP.js.map} +0 -0
  251. /package/dist/cli-bundle/chunks/{close-many-JJFW7KTT.js.map → close-many-J7A5EHOQ.js.map} +0 -0
  252. /package/dist/cli-bundle/chunks/{close-many-QJ6FKJUE.js.map → close-many-NQLYGPYW.js.map} +0 -0
  253. /package/dist/cli-bundle/chunks/{deps-EVTOQMKW.js.map → deps-MQ4ZIGZB.js.map} +0 -0
  254. /package/dist/cli-bundle/chunks/{deps-5NC4IZH7.js.map → deps-NIIKXLPB.js.map} +0 -0
  255. /package/dist/cli-bundle/chunks/{profile-U2B6Y7GE.js.map → profile-AVCIIZID.js.map} +0 -0
  256. /package/dist/cli-bundle/chunks/{profile-AGUKS52S.js.map → profile-LFYO3HHX.js.map} +0 -0
  257. /package/dist/cli-bundle/chunks/{register-operations-6ZZIF27A.js.map → register-operations-KHZYR6MG.js.map} +0 -0
  258. /package/dist/cli-bundle/chunks/{register-operations-REDIAEGI.js.map → register-operations-WPQ2LWZJ.js.map} +0 -0
  259. /package/dist/cli-bundle/chunks/{register-setup-J3JS2ZVT.js.map → register-setup-PGDNOXDQ.js.map} +0 -0
  260. /package/dist/cli-bundle/chunks/{register-setup-BHPMN5SK.js.map → register-setup-TDN7WAO6.js.map} +0 -0
  261. /package/dist/cli-bundle/chunks/{update-SA6AG23P.js.map → update-SQYZA3ZW.js.map} +0 -0
  262. /package/dist/cli-bundle/chunks/{update-PQQHLYCC.js.map → update-XZJYS5X7.js.map} +0 -0
  263. /package/dist/cli-bundle/chunks/{update-many-RQVTFJPD.js.map → update-many-R24B3GBK.js.map} +0 -0
  264. /package/dist/cli-bundle/chunks/{update-many-TV3L3KBX.js.map → update-many-WQ3R3J6N.js.map} +0 -0
@@ -9,13 +9,13 @@ import {
9
9
  } from "./chunk-5HGZKQUL.js";
10
10
  import {
11
11
  runUpdate
12
- } from "./chunk-HXVHBERL.js";
12
+ } from "./chunk-HPAYDSR2.js";
13
13
  import {
14
14
  hasListFilters
15
15
  } from "./chunk-KWYX6ZIR.js";
16
16
  import {
17
17
  runList
18
- } from "./chunk-7LTCLTRG.js";
18
+ } from "./chunk-AXRT7K5V.js";
19
19
  import {
20
20
  resolveAuthor
21
21
  } from "./chunk-YRYYFGV3.js";
@@ -734,4 +734,4 @@ export {
734
734
  runUpdateMany,
735
735
  _testOnlyUpdateManyCommand
736
736
  };
737
- //# sourceMappingURL=chunk-CFSUNEL7.js.map
737
+ //# sourceMappingURL=chunk-XWBD6DSR.js.map
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  EXECUTABLE_COMMAND_ALIASES,
5
5
  resolveSubcommandFlagContractsForCommand
6
- } from "./chunk-NCAFUBJX.js";
6
+ } from "./chunk-7UCY6DR5.js";
7
7
  import {
8
8
  writeStdout
9
9
  } from "./chunk-BIRYX32V.js";
@@ -829,6 +829,6 @@ export {
829
829
  applyInvocationAuthorOverride,
830
830
  createPmCliProgram
831
831
  };
832
- //# sourceMappingURL=chunk-MNV226E4.js.map
832
+ //# sourceMappingURL=chunk-XWYQ2LT4.js.map
833
833
 
834
834
  //# debugId=40f35f26-1830-5c76-8d1b-23cc7f58d887
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2fcf91f3-1b2e-5b80-a790-93055aee4f49")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b5442b7e-9ba5-5b21-91a6-84476830c1cb")}catch(e){}}();
3
3
  import {
4
4
  isTerminalStatus,
5
5
  normalizeStatusForRegistry
@@ -7,17 +7,18 @@ import {
7
7
 
8
8
  // dist/core/item/actionability.js
9
9
  var BLOCKED_BY_DEPENDENCY_KIND = "blocked_by";
10
+ var NO_ACTIVE_BLOCKER_SENTINEL = "no-active-blocker";
10
11
  function normalizeItemId(id) {
11
12
  return id.trim().toLowerCase();
12
13
  }
13
14
  function collectBlockedByIds(item) {
14
15
  const ids = /* @__PURE__ */ new Set();
15
16
  const scalar = typeof item.blocked_by === "string" ? item.blocked_by.trim() : "";
16
- if (scalar.length > 0) {
17
+ if (scalar.length > 0 && scalar.toLowerCase() !== NO_ACTIVE_BLOCKER_SENTINEL) {
17
18
  ids.add(scalar);
18
19
  }
19
20
  for (const dependency of item.dependencies ?? []) {
20
- if (dependency.kind === BLOCKED_BY_DEPENDENCY_KIND && typeof dependency.id === "string" && dependency.id.trim().length > 0) {
21
+ if (dependency.kind === BLOCKED_BY_DEPENDENCY_KIND && typeof dependency.id === "string" && dependency.id.trim().length > 0 && dependency.id.trim().toLowerCase() !== NO_ACTIVE_BLOCKER_SENTINEL) {
21
22
  ids.add(dependency.id.trim());
22
23
  }
23
24
  }
@@ -37,6 +38,24 @@ function resolveItemBlockers(item, itemsById, statusRegistry) {
37
38
  };
38
39
  });
39
40
  }
41
+ function collectDependencyBlockedIds(corpus, statusRegistry) {
42
+ const itemsById = new Map(corpus.map((item) => [normalizeItemId(item.id), item]));
43
+ const candidateStatuses = /* @__PURE__ */ new Set([
44
+ ...resolveActiveStatusSet(statusRegistry),
45
+ ...statusRegistry.blocked_statuses
46
+ ]);
47
+ const blocked = /* @__PURE__ */ new Set();
48
+ for (const item of corpus) {
49
+ const normalizedStatus = normalizeStatusForRegistry(item.status, statusRegistry);
50
+ if (!candidateStatuses.has(normalizedStatus))
51
+ continue;
52
+ const lifecycleBlocked = statusRegistry.blocked_statuses.has(normalizedStatus);
53
+ if (lifecycleBlocked || resolveItemBlockers(item, itemsById, statusRegistry).some((blocker) => !blocker.resolved)) {
54
+ blocked.add(normalizeItemId(item.id));
55
+ }
56
+ }
57
+ return blocked;
58
+ }
40
59
  function resolveActiveStatusSet(statusRegistry) {
41
60
  return statusRegistry.active_statuses.size > 0 ? statusRegistry.active_statuses : /* @__PURE__ */ new Set([statusRegistry.open_status]);
42
61
  }
@@ -122,8 +141,10 @@ function computeActionabilityReport(candidates, corpus, statusRegistry) {
122
141
 
123
142
  export {
124
143
  collectBlockedByIds,
144
+ resolveItemBlockers,
145
+ collectDependencyBlockedIds,
125
146
  computeActionabilityReport
126
147
  };
127
- //# sourceMappingURL=chunk-I7GY4X6Y.js.map
148
+ //# sourceMappingURL=chunk-YFE7JHX3.js.map
128
149
 
129
- //# debugId=2fcf91f3-1b2e-5b80-a790-93055aee4f49
150
+ //# debugId=b5442b7e-9ba5-5b21-91a6-84476830c1cb
@@ -0,0 +1 @@
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/** Retired placeholder that explicitly means an item has no active blocker. */\nconst NO_ACTIVE_BLOCKER_SENTINEL = \"no-active-blocker\";\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 && scalar.toLowerCase() !== NO_ACTIVE_BLOCKER_SENTINEL) {\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 dependency.id.trim().toLowerCase() !== NO_ACTIVE_BLOCKER_SENTINEL\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/**\n * Collects the normalized (trimmed, lowercased) ids of every corpus item that is\n * blocked under the single shared edge-aware definition: a non-terminal item\n * whose lifecycle status is a blocked status OR that has at least one open\n * blocker (a `blocked_by` reference whose target is non-terminal or unknown).\n *\n * This is the one source of truth GH-578 mandates across read surfaces —\n * `pm next`'s blocked companion, `pm context` summary counters, and\n * `pm list-blocked` all derive blocked-ness from this set so they can never\n * silently disagree while auto-unblock keeps status-blocked items rare.\n */\nexport function collectDependencyBlockedIds(\n corpus: ItemMetadata[],\n statusRegistry: RuntimeStatusRegistry,\n): Set<string> {\n const itemsById = new Map<string, ItemMetadata>(\n corpus.map((item) => [normalizeItemId(item.id), item]),\n );\n // Same candidate gate as computeActionabilityReport: active statuses plus\n // lifecycle-blocked statuses, so the two surfaces classify identically.\n const candidateStatuses = new Set([\n ...resolveActiveStatusSet(statusRegistry),\n ...statusRegistry.blocked_statuses,\n ]);\n const blocked = new Set<string>();\n for (const item of corpus) {\n const normalizedStatus = normalizeStatusForRegistry(\n item.status,\n statusRegistry,\n );\n if (!candidateStatuses.has(normalizedStatus)) continue;\n const lifecycleBlocked =\n statusRegistry.blocked_statuses.has(normalizedStatus);\n if (\n lifecycleBlocked ||\n resolveItemBlockers(item, itemsById, statusRegistry).some(\n (blocker) => !blocker.resolved,\n )\n ) {\n blocked.add(normalizeItemId(item.id));\n }\n }\n return blocked;\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":";;;;;;;;AAgBA,IAAM,6BAA6B;AAEnC,IAAM,6BAA6B;AAQnC,SAAS,gBAAgB,IAAU;AACjC,SAAO,GAAG,KAAI,EAAG,YAAW;AAC9B;AAGM,SAAU,oBACd,MAAuD;AAEvD,QAAM,MAAM,oBAAI,IAAG;AACnB,QAAM,SACJ,OAAO,KAAK,eAAe,WAAW,KAAK,WAAW,KAAI,IAAK;AACjE,MAAI,OAAO,SAAS,KAAK,OAAO,YAAW,MAAO,4BAA4B;AAC5E,QAAI,IAAI,MAAM;EAChB;AACA,aAAW,cAAc,KAAK,gBAAgB,CAAA,GAAI;AAChD,QACE,WAAW,SAAS,8BACpB,OAAO,WAAW,OAAO,YACzB,WAAW,GAAG,KAAI,EAAG,SAAS,KAC9B,WAAW,GAAG,KAAI,EAAG,YAAW,MAAO,4BACvC;AACA,UAAI,IAAI,WAAW,GAAG,KAAI,CAAE;IAC9B;EACF;AACA,SAAO,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AACjE;AAeM,SAAU,oBACd,MACA,WACA,gBAAqC;AAErC,SAAO,oBAAoB,IAAI,EAAE,IAAI,CAAC,OAAM;AAC1C,UAAM,UAAU,UAAU,IAAI,gBAAgB,EAAE,CAAC;AACjD,QAAI,CAAC,SAAS;AACZ,aAAO,EAAE,IAAI,OAAO,MAAM,QAAQ,MAAM,UAAU,MAAK;IACzD;AACA,WAAO;MACL;MACA,OAAO,QAAQ;MACf,QAAQ,QAAQ;MAChB,UAAU,iBAAiB,QAAQ,QAAQ,cAAc;;EAE7D,CAAC;AACH;AAaM,SAAU,4BACd,QACA,gBAAqC;AAErC,QAAM,YAAY,IAAI,IACpB,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAIxD,QAAM,oBAAoB,oBAAI,IAAI;IAChC,GAAG,uBAAuB,cAAc;IACxC,GAAG,eAAe;GACnB;AACD,QAAM,UAAU,oBAAI,IAAG;AACvB,aAAW,QAAQ,QAAQ;AACzB,UAAM,mBAAmB,2BACvB,KAAK,QACL,cAAc;AAEhB,QAAI,CAAC,kBAAkB,IAAI,gBAAgB;AAAG;AAC9C,UAAM,mBACJ,eAAe,iBAAiB,IAAI,gBAAgB;AACtD,QACE,oBACA,oBAAoB,MAAM,WAAW,cAAc,EAAE,KACnD,CAAC,YAAY,CAAC,QAAQ,QAAQ,GAEhC;AACA,cAAQ,IAAI,gBAAgB,KAAK,EAAE,CAAC;IACtC;EACF;AACA,SAAO;AACT;AAyBA,SAAS,uBACP,gBAAqC;AAGrC,SAAO,eAAe,gBAAgB,OAAO,IACzC,eAAe,kBACf,oBAAI,IAAY,CAAC,eAAe,WAAW,CAAC;AAElD;AAGA,SAAS,kBACP,QACA,kBACA,gBAAqC;AAErC,QAAM,QAAQ,CAAC,gBAAgB,MAAM,CAAC;AACtC,QAAM,UAAU,oBAAI,IAAG;AACvB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,UAAU,MAAM,IAAG;AAEzB,QAAI,QAAQ,IAAI,OAAO;AAAG;AAE1B,YAAQ,IAAI,OAAO;AACnB,eAAW,SAAS,iBAAiB,IAAI,OAAO,KAAK,CAAA,GAAI;AACvD,UAAI,CAAC,iBAAiB,MAAM,QAAQ,cAAc,GAAG;AACnD,eAAO;MACT;AACA,YAAM,KAAK,gBAAgB,MAAM,EAAE,CAAC;IACtC;EACF;AACA,SAAO;AACT;AAGA,SAAS,YAAY,QAAsB;AAKzC,QAAM,YAAY,oBAAI,IAAG;AACzB,QAAM,mBAAmB,oBAAI,IAAG;AAChC,QAAM,mBAAmB,oBAAI,IAAG;AAChC,aAAW,QAAQ,QAAQ;AAGzB,cAAU,IAAI,gBAAgB,KAAK,EAAE,GAAG,IAAI;AAC5C,UAAM,SAAS,OAAO,KAAK,WAAW,WAAW,KAAK,OAAO,KAAI,IAAK;AACtE,QAAI,OAAO,SAAS,GAAG;AACrB,YAAM,YAAY,gBAAgB,MAAM;AACxC,YAAM,WAAW,iBAAiB,IAAI,SAAS,KAAK,CAAA;AACpD,eAAS,KAAK,IAAI;AAClB,uBAAiB,IAAI,WAAW,QAAQ;IAC1C;AACA,eAAW,aAAa,oBAAoB,IAAI,GAAG;AACjD,YAAM,aAAa,gBAAgB,SAAS;AAC5C,YAAM,aAAa,iBAAiB,IAAI,UAAU,KAAK,CAAA;AACvD,iBAAW,KAAK,KAAK,EAAE;AACvB,uBAAiB,IAAI,YAAY,UAAU;IAC7C;EACF;AACA,SAAO,EAAE,WAAW,kBAAkB,iBAAgB;AACxD;AAaM,SAAU,2BACd,YACA,QACA,gBAAqC;AAErC,QAAM,EAAE,WAAW,kBAAkB,iBAAgB,IAAK,YAAY,MAAM;AAC5E,QAAM,iBAAiB,oBAAI,IAAI;IAC7B,GAAG,uBAAuB,cAAc;IACxC,GAAG,eAAe;GACnB;AAGD,QAAM,iBAAiB,IAAI,IACzB,OACG,OAAO,CAAC,UAAU,CAAC,iBAAiB,MAAM,QAAQ,cAAc,CAAC,EACjE,IAAI,CAAC,UAAU,gBAAgB,MAAM,EAAE,CAAC,CAAC;AAE9C,QAAM,QAA2B,CAAA;AACjC,QAAM,UAA6B,CAAA;AACnC,MAAI,cAAc;AAClB,MAAI,iBAAiB;AACrB,aAAW,QAAQ,YAAY;AAC7B,QACE,CAAC,eAAe,IACd,2BAA2B,KAAK,QAAQ,cAAc,CAAC;AAGzD;AACF,mBAAe;AACf,QAAI,kBAAkB,KAAK,IAAI,kBAAkB,cAAc,GAAG;AAChE,wBAAkB;AAClB;IACF;AACA,UAAM,eAAe,oBACnB,MACA,WACA,cAAc,EACd,OAAO,CAAC,YAAY,CAAC,QAAQ,QAAQ;AACvC,UAAM,YAAY,iBAAiB,IAAI,gBAAgB,KAAK,EAAE,CAAC,KAAK,CAAA,GACjE,OAAO,CAAC,gBAAgB,eAAe,IAAI,gBAAgB,WAAW,CAAC,CAAC,EACxE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AAClD,UAAM,QAAyB;MAC7B;MACA,eAAe;MACf;;AAEF,UAAM,mBAAmB,eAAe,iBAAiB,IACvD,2BAA2B,KAAK,QAAQ,cAAc,CAAC;AAEzD,QAAI,aAAa,WAAW,KAAK,CAAC,kBAAkB;AAClD,YAAM,KAAK,KAAK;IAClB,OAAO;AACL,cAAQ,KAAK,KAAK;IACpB;EACF;AACA,SAAO;IACL;IACA;IACA,cAAc;IACd,iBAAiB;;AAErB","debugId":"b5442b7e-9ba5-5b21-91a6-84476830c1cb"}
@@ -54,7 +54,7 @@ import {
54
54
  } from "./chunk-ARGDWQ4J.js";
55
55
  import {
56
56
  runClose
57
- } from "./chunk-N7I2DGLP.js";
57
+ } from "./chunk-35FHWD4C.js";
58
58
  import {
59
59
  buildItemNotFoundError,
60
60
  collectRuntimeUpdateFieldValues,
@@ -1655,6 +1655,6 @@ export {
1655
1655
  runUpdate,
1656
1656
  _testOnlyUpdateCommand
1657
1657
  };
1658
- //# sourceMappingURL=chunk-FZGM3PNA.js.map
1658
+ //# sourceMappingURL=chunk-YIIIAKCE.js.map
1659
1659
 
1660
1660
  //# debugId=3aa2c8db-8ac9-5f0a-af70-d8ee2bd6f5db
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  _testOnlyCloseCommand,
3
3
  runClose
4
- } from "./chunk-37V5MXAU.js";
5
- import "./chunk-P56LKFQX.js";
4
+ } from "./chunk-TLWJP5BF.js";
5
+ import "./chunk-BDA35QG5.js";
6
6
  import "./chunk-646MQXFW.js";
7
7
  import "./chunk-WACRQ26A.js";
8
8
  export {
9
9
  _testOnlyCloseCommand,
10
10
  runClose
11
11
  };
12
- //# sourceMappingURL=close-BEP7MHF3.js.map
12
+ //# sourceMappingURL=close-GPD7DTJV.js.map
@@ -3,14 +3,14 @@
3
3
  import {
4
4
  _testOnlyCloseCommand,
5
5
  runClose
6
- } from "./chunk-N7I2DGLP.js";
7
- import "./chunk-I7GY4X6Y.js";
6
+ } from "./chunk-35FHWD4C.js";
7
+ import "./chunk-YFE7JHX3.js";
8
8
  import "./chunk-P22HGFFI.js";
9
9
  import "./chunk-KX62NMZC.js";
10
10
  export {
11
11
  _testOnlyCloseCommand,
12
12
  runClose
13
13
  };
14
- //# sourceMappingURL=close-Y6QFUJQN.js.map
14
+ //# sourceMappingURL=close-X3CF6FQP.js.map
15
15
 
16
16
  //# debugId=45eac7fa-f181-5cca-93b7-cfb58909dbb3
@@ -3,25 +3,25 @@
3
3
  import {
4
4
  _testOnly,
5
5
  runCloseMany
6
- } from "./chunk-QKVVV6QO.js";
6
+ } from "./chunk-EWIT5WIC.js";
7
7
  import "./chunk-YKFHF37B.js";
8
8
  import "./chunk-7H5NNCJ5.js";
9
9
  import "./chunk-N7V7TI6J.js";
10
- import "./chunk-SIJV365F.js";
10
+ import "./chunk-NCVT6XEL.js";
11
11
  import "./chunk-2IPNL3DR.js";
12
12
  import "./chunk-VAHZIPWS.js";
13
13
  import "./chunk-CKX4WOPC.js";
14
14
  import "./chunk-KH6QAHME.js";
15
15
  import "./chunk-PT7MCCGD.js";
16
16
  import "./chunk-CUFW7ITY.js";
17
- import "./chunk-N7I2DGLP.js";
18
- import "./chunk-I7GY4X6Y.js";
17
+ import "./chunk-35FHWD4C.js";
18
+ import "./chunk-YFE7JHX3.js";
19
19
  import "./chunk-P22HGFFI.js";
20
20
  import "./chunk-KX62NMZC.js";
21
21
  export {
22
22
  _testOnly,
23
23
  runCloseMany
24
24
  };
25
- //# sourceMappingURL=close-many-JJFW7KTT.js.map
25
+ //# sourceMappingURL=close-many-J7A5EHOQ.js.map
26
26
 
27
27
  //# debugId=45eac7fa-f181-5cca-93b7-cfb58909dbb3
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  _testOnly,
3
3
  runCloseMany
4
- } from "./chunk-G6KM4YKY.js";
4
+ } from "./chunk-RXPQ5Q23.js";
5
5
  import "./chunk-WL3SS45P.js";
6
6
  import "./chunk-5HGZKQUL.js";
7
7
  import "./chunk-KWYX6ZIR.js";
8
- import "./chunk-7LTCLTRG.js";
8
+ import "./chunk-AXRT7K5V.js";
9
9
  import "./chunk-M7MVOKVV.js";
10
10
  import "./chunk-B57RJHBZ.js";
11
11
  import "./chunk-NTRQLE2R.js";
12
12
  import "./chunk-X5YCTFKT.js";
13
13
  import "./chunk-I7DIDUSP.js";
14
14
  import "./chunk-YRYYFGV3.js";
15
- import "./chunk-37V5MXAU.js";
16
- import "./chunk-P56LKFQX.js";
15
+ import "./chunk-TLWJP5BF.js";
16
+ import "./chunk-BDA35QG5.js";
17
17
  import "./chunk-646MQXFW.js";
18
18
  import "./chunk-WACRQ26A.js";
19
19
  export {
20
20
  _testOnly,
21
21
  runCloseMany
22
22
  };
23
- //# sourceMappingURL=close-many-QJ6FKJUE.js.map
23
+ //# sourceMappingURL=close-many-NQLYGPYW.js.map
@@ -3,21 +3,30 @@
3
3
  import "./chunk-FRQ63VPB.js";
4
4
  import {
5
5
  DEPS_COLLAPSE_VALUES,
6
+ DEPS_DIRECTION_VALUES,
6
7
  DEPS_FORMAT_VALUES,
7
8
  buildDepsRelationshipContext,
8
- collectDanglingDependencyReferences,
9
+ parseDirection,
10
+ parseKinds,
11
+ parseMaxDepth,
12
+ parsePositiveInteger,
9
13
  runDeps
10
- } from "./chunk-YQCWK2MB.js";
14
+ } from "./chunk-EX7OQT3Y.js";
15
+ import "./chunk-L5BTTDU5.js";
11
16
  import "./chunk-2IPNL3DR.js";
12
17
  import "./chunk-P22HGFFI.js";
13
18
  import "./chunk-KX62NMZC.js";
14
19
  export {
15
20
  DEPS_COLLAPSE_VALUES,
21
+ DEPS_DIRECTION_VALUES,
16
22
  DEPS_FORMAT_VALUES,
17
23
  buildDepsRelationshipContext,
18
- collectDanglingDependencyReferences,
24
+ parseDirection,
25
+ parseKinds,
26
+ parseMaxDepth,
27
+ parsePositiveInteger,
19
28
  runDeps
20
29
  };
21
- //# sourceMappingURL=deps-EVTOQMKW.js.map
30
+ //# sourceMappingURL=deps-MQ4ZIGZB.js.map
22
31
 
23
32
  //# debugId=45eac7fa-f181-5cca-93b7-cfb58909dbb3
@@ -1,19 +1,28 @@
1
1
  import "./chunk-3HKUXVKV.js";
2
2
  import {
3
3
  DEPS_COLLAPSE_VALUES,
4
+ DEPS_DIRECTION_VALUES,
4
5
  DEPS_FORMAT_VALUES,
5
6
  buildDepsRelationshipContext,
6
- collectDanglingDependencyReferences,
7
+ parseDirection,
8
+ parseKinds,
9
+ parseMaxDepth,
10
+ parsePositiveInteger,
7
11
  runDeps
8
- } from "./chunk-MSGETE6I.js";
12
+ } from "./chunk-3QDR6ZLU.js";
13
+ import "./chunk-3CUQZNQ6.js";
9
14
  import "./chunk-M7MVOKVV.js";
10
15
  import "./chunk-646MQXFW.js";
11
16
  import "./chunk-WACRQ26A.js";
12
17
  export {
13
18
  DEPS_COLLAPSE_VALUES,
19
+ DEPS_DIRECTION_VALUES,
14
20
  DEPS_FORMAT_VALUES,
15
21
  buildDepsRelationshipContext,
16
- collectDanglingDependencyReferences,
22
+ parseDirection,
23
+ parseKinds,
24
+ parseMaxDepth,
25
+ parsePositiveInteger,
17
26
  runDeps
18
27
  };
19
- //# sourceMappingURL=deps-5NC4IZH7.js.map
28
+ //# sourceMappingURL=deps-NIIKXLPB.js.map
@@ -10,14 +10,14 @@ import {
10
10
  runProfileLint,
11
11
  runProfileList,
12
12
  runProfileShow
13
- } from "./chunk-XNPMDSQQ.js";
13
+ } from "./chunk-HYTOJW2Q.js";
14
14
  import "./chunk-DG2EQRIH.js";
15
15
  import "./chunk-IDUTGRDM.js";
16
16
  import "./chunk-FXFCFL73.js";
17
17
  import "./chunk-DJAGYYCQ.js";
18
18
  import "./chunk-N33FD2UI.js";
19
19
  import "./chunk-CUFW7ITY.js";
20
- import "./chunk-NCAFUBJX.js";
20
+ import "./chunk-7UCY6DR5.js";
21
21
  import "./chunk-ARGDWQ4J.js";
22
22
  import "./chunk-P22HGFFI.js";
23
23
  import "./chunk-KX62NMZC.js";
@@ -32,6 +32,6 @@ export {
32
32
  runProfileList,
33
33
  runProfileShow
34
34
  };
35
- //# sourceMappingURL=profile-U2B6Y7GE.js.map
35
+ //# sourceMappingURL=profile-AVCIIZID.js.map
36
36
 
37
37
  //# debugId=45eac7fa-f181-5cca-93b7-cfb58909dbb3
@@ -8,14 +8,14 @@ import {
8
8
  runProfileLint,
9
9
  runProfileList,
10
10
  runProfileShow
11
- } from "./chunk-3D4YVTNG.js";
11
+ } from "./chunk-TZAE66GQ.js";
12
12
  import "./chunk-DDFGYUCQ.js";
13
13
  import "./chunk-KAE727L2.js";
14
14
  import "./chunk-2XOSFSTH.js";
15
15
  import "./chunk-Q3K5XPAQ.js";
16
16
  import "./chunk-2CXL335K.js";
17
17
  import "./chunk-YRYYFGV3.js";
18
- import "./chunk-S6FF7VW6.js";
18
+ import "./chunk-WQXRZMFN.js";
19
19
  import "./chunk-HO4DLBNK.js";
20
20
  import "./chunk-646MQXFW.js";
21
21
  import "./chunk-WACRQ26A.js";
@@ -30,4 +30,4 @@ export {
30
30
  runProfileList,
31
31
  runProfileShow
32
32
  };
33
- //# sourceMappingURL=profile-AGUKS52S.js.map
33
+ //# sourceMappingURL=profile-LFYO3HHX.js.map
@@ -1,11 +1,13 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f9b71fb8-2ae3-5e94-8ee5-64ad8d1f64bf")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0164f6a4-b6b8-5fe8-bd9c-50f4cff1f814")}catch(e){}}();
3
3
  import {
4
4
  runAggregate,
5
5
  runEval,
6
6
  runGet,
7
+ runGraph,
7
8
  runSearch
8
- } from "./chunk-6XAZB6SE.js";
9
+ } from "./chunk-QPGQNLPI.js";
10
+ import "./chunk-EX7OQT3Y.js";
9
11
  import {
10
12
  renderContextMarkdown,
11
13
  renderNextMarkdown,
@@ -15,11 +17,12 @@ import {
15
17
  runContext,
16
18
  runHistory,
17
19
  runNext
18
- } from "./chunk-SPFZV2GR.js";
20
+ } from "./chunk-XPUTSGJU.js";
21
+ import "./chunk-L5BTTDU5.js";
19
22
  import "./chunk-N7V7TI6J.js";
20
23
  import {
21
24
  runList
22
- } from "./chunk-SIJV365F.js";
25
+ } from "./chunk-NCVT6XEL.js";
23
26
  import "./chunk-2IPNL3DR.js";
24
27
  import "./chunk-VAHZIPWS.js";
25
28
  import "./chunk-CKX4WOPC.js";
@@ -30,6 +33,7 @@ import "./chunk-YJSURTBB.js";
30
33
  import "./chunk-M3JN6FPW.js";
31
34
  import {
32
35
  addHiddenOption,
36
+ collect,
33
37
  getGlobalOptions,
34
38
  normalizeActivityOptions,
35
39
  normalizeAggregateOptions,
@@ -41,15 +45,15 @@ import {
41
45
  printActivityJsonStream,
42
46
  printListJsonStream,
43
47
  resolveActivityStreamMode
44
- } from "./chunk-AFSV5HBB.js";
45
- import "./chunk-NCAFUBJX.js";
48
+ } from "./chunk-E4FXM2XB.js";
49
+ import "./chunk-7UCY6DR5.js";
46
50
  import "./chunk-NETP4DY4.js";
47
51
  import {
48
52
  printError,
49
53
  printResult,
50
54
  writeStdout
51
55
  } from "./chunk-BIRYX32V.js";
52
- import "./chunk-I7GY4X6Y.js";
56
+ import "./chunk-YFE7JHX3.js";
53
57
  import "./chunk-P22HGFFI.js";
54
58
  import {
55
59
  EXIT_CODE,
@@ -174,7 +178,8 @@ async function runRegisteredListCommand(params) {
174
178
  applyDefaultBriefListMode(listOptions, params.defaultBrief);
175
179
  if (params.excludeTerminal)
176
180
  listOptions.excludeTerminal = true;
177
- const result = await runList(params.status, listOptions, globalOptions);
181
+ listOptions.dependencyBlocked = params.dependencyBlocked;
182
+ const result = await runList(params.dependencyBlocked ? void 0 : params.status, listOptions, globalOptions);
178
183
  const streamMode = params.options.stream === true;
179
184
  const listFormat = parseListFormat(params.options.format);
180
185
  const tabular = listFormat === "csv" || listFormat === "table";
@@ -202,7 +207,7 @@ async function runRegisteredListCommand(params) {
202
207
  }
203
208
  }
204
209
  function registerListCommand(program, descriptor) {
205
- const { name, description, status, excludeTerminal, allowStatusFilter, defaultBrief } = descriptor;
210
+ const { name, description, status, excludeTerminal, allowStatusFilter, defaultBrief, dependencyBlocked } = descriptor;
206
211
  const command = program.command(name).description(description);
207
212
  if (allowStatusFilter) {
208
213
  command.option("--status <value>", "Filter by status (use all for no status restriction)");
@@ -215,6 +220,7 @@ function registerListCommand(program, descriptor) {
215
220
  status,
216
221
  excludeTerminal,
217
222
  defaultBrief,
223
+ dependencyBlocked,
218
224
  options,
219
225
  actionCommand
220
226
  });
@@ -360,6 +366,25 @@ async function runActivityAction(options, command) {
360
366
  printError(`profile:command=activity took_ms=${Date.now() - startedAt}`);
361
367
  }
362
368
  }
369
+ async function runGraphAction(subcommand, id, target, options, command) {
370
+ const globalOptions = getGlobalOptions(command);
371
+ const startedAt = Date.now();
372
+ const result = await runGraph(subcommand, id, target, {
373
+ ...Array.isArray(options.kind) ? { kind: options.kind } : {},
374
+ maxDepth: typeof options.maxDepth === "string" ? options.maxDepth : void 0,
375
+ limit: typeof options.limit === "string" ? options.limit : void 0,
376
+ after: typeof options.after === "string" ? options.after : void 0,
377
+ direction: typeof options.direction === "string" ? options.direction : void 0,
378
+ maxPaths: typeof options.maxPaths === "string" ? options.maxPaths : void 0,
379
+ sample: typeof options.sample === "string" ? options.sample : void 0,
380
+ ...Array.isArray(options.exemptIsolate) ? { exemptIsolate: options.exemptIsolate } : {},
381
+ summary: options.summary === true
382
+ }, globalOptions);
383
+ printResult(result, globalOptions);
384
+ if (globalOptions.profile) {
385
+ printError(`profile:command=graph took_ms=${Date.now() - startedAt}`);
386
+ }
387
+ }
363
388
  function registerListQueryCommands(program, options) {
364
389
  const commandFilter = options?.commandFilter;
365
390
  const shouldRegister = (commandName) => shouldRegisterListQueryCommand(commandName, commandFilter);
@@ -400,8 +425,8 @@ function registerListQueryCommands(program, options) {
400
425
  },
401
426
  {
402
427
  name: "list-blocked",
403
- description: "List blocked items with optional filters.",
404
- status: "blocked",
428
+ description: "List blocked items (blocked status or open blocked_by dependencies, matching pm next) with optional filters.",
429
+ dependencyBlocked: true,
405
430
  excludeTerminal: false,
406
431
  allowStatusFilter: false,
407
432
  defaultBrief: true
@@ -462,6 +487,9 @@ function registerListQueryCommands(program, options) {
462
487
  if (shouldRegister("activity")) {
463
488
  program.command("activity").option("--id <value>", "Filter by item ID").option("--op <value>", "Filter by history operation").option("--author <value>", "Filter by history author").option("--from <value>", "Lower timestamp bound (ISO/date string or relative)").option("--to <value>", "Upper timestamp bound (ISO/date string or relative)").option("--limit <n>", "Return only the latest n activity entries").option("--compact", "Condensed output: show only id, op, ts, author, msg per entry").option("--full", "Show full activity entries with JSON Patch payloads").option("--stream [mode]", "Emit line-delimited JSON rows (requires --json). Optional mode: rows|ndjson|jsonl").description("Show recent activity across items.").action(runActivityAction);
464
489
  }
490
+ if (shouldRegister("graph")) {
491
+ program.command("graph").argument("<subcommand>", "Graph query (ancestors, descendants, predecessors, successors, paths, impact, analyze, audit, communities, redundancy, dominators, plan)").argument("[id]", "Root item id (traversals, paths, impact, and dominators)").argument("[target]", "Target item id (paths only)").option("--kind <value>", "Restrict traversal to registered relationship kinds (repeatable or comma-separated)", collect).option("--max-depth <value>", "Maximum traversal depth (non-negative integer)").option("--limit <value>", "Maximum returned rows per bounded collection").option("--after <value>", "Resume a traversal after this previously returned node id").option("--direction <value>", "Edge orientation for paths/impact (outgoing, incoming, or both)").option("--max-paths <value>", "Maximum enumerated paths (paths only)").option("--sample <value>", "Maximum evidence sample entries per audit finding (audit only)").option("--exempt-isolate <value>", "Item ids treated as explicitly valid isolates by the audit (repeatable or comma-separated)", collect).option("--summary", "Return counts-first envelopes without row collections").description("Bounded workspace relationship-graph queries, analytics, and governance audit.").action(runGraphAction);
492
+ }
465
493
  }
466
494
  var _testOnlyRegisterListQuery = {
467
495
  resolveReadCommandOutputFormat,
@@ -471,6 +499,6 @@ export {
471
499
  _testOnlyRegisterListQuery,
472
500
  registerListQueryCommands
473
501
  };
474
- //# sourceMappingURL=register-list-query-A5KRJ5J2.js.map
502
+ //# sourceMappingURL=register-list-query-MZUF2EEC.js.map
475
503
 
476
- //# debugId=f9b71fb8-2ae3-5e94-8ee5-64ad8d1f64bf
504
+ //# debugId=0164f6a4-b6b8-5fe8-bd9c-50f4cff1f814