@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,7 +9,7 @@
9
9
  // normalized command string. Kept in core so SDK governance and CLI test
10
10
  // execution share one dependency-direction-safe parser.
11
11
 
12
- !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]="3b8460ce-e579-5c5a-94ca-b6cc616c088b")}catch(e){}}();
12
+ !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]="b5ce9338-c375-5964-a4e9-2fa13a34b9f8")}catch(e){}}();
13
13
  const PM_SUBCOMMANDS_WITH_ITEM_REFERENCE = new Set([
14
14
  "get",
15
15
  "history",
@@ -216,6 +216,8 @@ export const PM_ITEM_REFERENCE_FLAGS_WITH_VALUE = {
216
216
  "--edge-limit",
217
217
  "--token-budget",
218
218
  "--cursor",
219
+ "--direction",
220
+ "--kind",
219
221
  ]),
220
222
  test: new Set([
221
223
  "--add",
@@ -301,7 +303,14 @@ export function extractPmInvocationArgsFromSegment(segment) {
301
303
  }
302
304
  /** Extract referenced item IDs from pm CLI invocations embedded in one command. */
303
305
  export const extractReferencedPmItemIdsFromCommand = (command, idPrefix = "pm") => {
304
- const normalizedPrefix = idPrefix.trim().toLowerCase().replace(/-+$/, "");
306
+ // Trim trailing dashes with an index scan: the prefix flows from workspace
307
+ // settings, and a /-+$/ regex backtracks polynomially on hostile dash runs
308
+ // (CodeQL js/polynomial-redos, alert 27).
309
+ const lowered = idPrefix.trim().toLowerCase();
310
+ let prefixEnd = lowered.length;
311
+ while (prefixEnd > 0 && lowered[prefixEnd - 1] === "-")
312
+ prefixEnd -= 1;
313
+ const normalizedPrefix = lowered.slice(0, prefixEnd);
305
314
  if (normalizedPrefix.length === 0)
306
315
  return [];
307
316
  const normalizedCommand = command
@@ -522,4 +531,4 @@ export function firstPositionalToken(tokens, flagsWithValue = new Set()) {
522
531
  return undefined;
523
532
  }
524
533
  //# sourceMappingURL=linked-command-detection.js.map
525
- //# debugId=3b8460ce-e579-5c5a-94ca-b6cc616c088b
534
+ //# debugId=b5ce9338-c375-5964-a4e9-2fa13a34b9f8
@@ -1 +1 @@
1
- {"version":3,"file":"linked-command-detection.js","sources":["sdk/test/linked-command-detection.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module sdk/test/linked-command-detection\n *\n * Parses linked-test command invocations for sandbox and context-safety checks.\n */\n// Pure, leaf-level helpers for detecting how linked-test shell commands invoke\n// the pm CLI (directly, via npx/pnpm/npm exec, or a launcher subcommand) and for\n// pulling structured context (subcommand, referenced item ids, runner) out of a\n// normalized command string. Kept in core so SDK governance and CLI test\n// execution share one dependency-direction-safe parser.\n\nconst PM_SUBCOMMANDS_WITH_ITEM_REFERENCE = new Set([\n \"get\",\n \"history\",\n \"restore\",\n \"update\",\n \"close\",\n \"delete\",\n \"append\",\n \"claim\",\n \"release\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"docs\",\n \"deps\",\n \"test\",\n]);\n\n/** Public contract for pm global flags with value, shared by SDK and presentation-layer consumers. */\nexport const PM_GLOBAL_FLAGS_WITH_VALUE = new Set([\n \"--pm-path\",\n \"--path\",\n \"--author\",\n]);\n/** Value-bearing flags accepted before item positionals by item-referencing commands. */\nexport const PM_ITEM_REFERENCE_FLAGS_WITH_VALUE: Readonly<\n Record<string, ReadonlySet<string>>\n> = {\n get: new Set([\n \"--depth\",\n \"--fields\",\n \"--tree-depth\",\n \"--tree_depth\",\n \"--at\",\n \"--format\",\n ]),\n history: new Set([\"--limit\", \"--field\", \"--format\"]),\n restore: new Set([\"--message\"]),\n update: new Set([\n \"--title\",\n \"-t\",\n \"--description\",\n \"-d\",\n \"--body\",\n \"-b\",\n \"--status\",\n \"-s\",\n \"--close-reason\",\n \"--close_reason\",\n \"--priority\",\n \"-p\",\n \"--type\",\n \"--tags\",\n \"--add-tags\",\n \"--add_tags\",\n \"--remove-tags\",\n \"--remove_tags\",\n \"--deadline\",\n \"--estimated-minutes\",\n \"--estimate\",\n \"--estimated_minutes\",\n \"--acceptance-criteria\",\n \"--ac\",\n \"--acceptance_criteria\",\n \"--definition-of-ready\",\n \"--definition_of_ready\",\n \"--order\",\n \"--rank\",\n \"--goal\",\n \"--objective\",\n \"--value\",\n \"--impact\",\n \"--outcome\",\n \"--why-now\",\n \"--why_now\",\n \"--message\",\n \"--assignee\",\n \"--parent\",\n \"--reviewer\",\n \"--risk\",\n \"--confidence\",\n \"--sprint\",\n \"--release\",\n \"--blocked-by\",\n \"--blocked_by\",\n \"--blocked-reason\",\n \"--blocked_reason\",\n \"--unblock-note\",\n \"--unblock_note\",\n \"--reporter\",\n \"--severity\",\n \"--environment\",\n \"--repro-steps\",\n \"--repro_steps\",\n \"--resolution\",\n \"--expected-result\",\n \"--expected_result\",\n \"--expected\",\n \"--actual-result\",\n \"--actual_result\",\n \"--actual\",\n \"--affected-version\",\n \"--affected_version\",\n \"--fixed-version\",\n \"--fixed_version\",\n \"--component\",\n \"--regression\",\n \"--customer-impact\",\n \"--customer_impact\",\n \"--dep\",\n \"--dep-remove\",\n \"--dep_remove\",\n \"--comment\",\n \"--note\",\n \"--learning\",\n \"--file\",\n \"--test\",\n \"--doc\",\n \"--reminder\",\n \"--event\",\n \"--type-option\",\n \"--type_option\",\n \"--field\",\n \"--unset\",\n \"--body-file\",\n ]),\n close: new Set([\n \"--reason\",\n \"-r\",\n \"--close-reason\",\n \"--duplicate-of\",\n \"-d\",\n \"--message\",\n \"-m\",\n \"--validate-close\",\n \"--resolution\",\n \"--expected-result\",\n \"--expected_result\",\n \"--expected\",\n \"--actual-result\",\n \"--actual_result\",\n \"--actual\",\n ]),\n delete: new Set([\"--message\"]),\n append: new Set([\"--body\", \"--text\", \"--message\"]),\n claim: new Set([\n \"--assignee\",\n \"--message\",\n \"--type\",\n \"--tag\",\n \"--priority\",\n \"--assignee-filter\",\n \"--parent\",\n \"--sprint\",\n \"--release\",\n \"--max-attempts\",\n ]),\n release: new Set([\"--assignee\", \"--message\"]),\n comments: new Set([\n \"--add\",\n \"--body\",\n \"--comment\",\n \"--file\",\n \"--edit\",\n \"--delete\",\n \"--limit\",\n \"--message\",\n ]),\n notes: new Set([\n \"--add\",\n \"--file\",\n \"--edit\",\n \"--delete\",\n \"--limit\",\n \"--message\",\n ]),\n learnings: new Set([\n \"--add\",\n \"--file\",\n \"--edit\",\n \"--delete\",\n \"--limit\",\n \"--message\",\n ]),\n files: new Set([\n \"--add\",\n \"--add-glob\",\n \"--remove\",\n \"--migrate\",\n \"--note\",\n \"--message\",\n ]),\n docs: new Set([\n \"--add\",\n \"--add-glob\",\n \"--remove\",\n \"--migrate\",\n \"--note\",\n \"--message\",\n ]),\n deps: new Set([\n \"--format\",\n \"--max-depth\",\n \"--collapse\",\n \"--node-limit\",\n \"--edge-limit\",\n \"--token-budget\",\n \"--cursor\",\n ]),\n test: new Set([\n \"--add\",\n \"--add-json\",\n \"--remove\",\n \"--match\",\n \"--only-index\",\n \"--timeout\",\n \"--env-set\",\n \"--env-clear\",\n \"--pm-context\",\n \"--message\",\n ]),\n};\n/** Public contract for npx flags with value, shared by SDK and presentation-layer consumers. */\nexport const NPX_FLAGS_WITH_VALUE = new Set([\"-p\", \"--package\"]);\n/** Public contract for npx flags whose value is the command string itself. */\nexport const NPX_COMMAND_STRING_FLAGS = new Set([\"-c\", \"--call\"]);\n/** Public contract for pnpm global flags with value, shared by SDK and presentation-layer consumers. */\nexport const PNPM_GLOBAL_FLAGS_WITH_VALUE = new Set([\n \"-c\",\n \"-C\",\n \"--config\",\n \"--dir\",\n \"--filter\",\n \"--workspace-dir\",\n]);\n/** Public contract for npm global flags with value, shared by SDK and presentation-layer consumers. */\nexport const NPM_GLOBAL_FLAGS_WITH_VALUE = new Set([\n \"-C\",\n \"--prefix\",\n \"--userconfig\",\n \"--cache\",\n]);\n/** Public contract for yarn global flags with value, shared by SDK and presentation-layer consumers. */\nexport const YARN_GLOBAL_FLAGS_WITH_VALUE = new Set([\"--cwd\"]);\n/** Public contract for bun global flags with value, shared by SDK and presentation-layer consumers. */\nexport const BUN_GLOBAL_FLAGS_WITH_VALUE = new Set([\"--cwd\"]);\n/** Public contract for npm exec subcommands, shared by SDK and presentation-layer consumers. */\nexport const NPM_EXEC_SUBCOMMANDS = new Set([\"exec\", \"x\"]);\n/** Public contract for script run subcommands, shared by SDK and presentation-layer consumers. */\nexport const SCRIPT_RUN_SUBCOMMANDS = new Set([\"run\", \"run-script\"]);\n/** Public contract for script run flags with value, shared by SDK and presentation-layer consumers. */\nexport const SCRIPT_RUN_FLAGS_WITH_VALUE = new Set([\n \"-C\",\n \"--dir\",\n \"--cwd\",\n \"-w\",\n \"--workspace\",\n \"--filter\",\n]);\n\n/** Implements split normalized command segments for the public runtime surface of this module. */\nexport function splitNormalizedCommandSegments(\n normalizedCommand: string,\n): string[] {\n return normalizedCommand\n .split(/&&|\\|\\||\\||;/)\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0);\n}\n\n/** Extract pm CLI arguments from one normalized shell-command segment. */\nexport function extractPmInvocationArgsFromSegment(\n segment: string,\n): string[] | null {\n const tokens = stripLeadingEnvAssignments(\n segment.split(\" \").filter((token) => token.length > 0),\n );\n if (tokens.length === 0) return null;\n const [executable, ...args] = tokens;\n if (isPmExecutableToken(executable) || isPmCliScriptToken(executable)) {\n return args;\n }\n if (executable === \"node\" && args[0] && isPmCliScriptToken(args[0])) {\n return args.slice(1);\n }\n const invocation =\n executable === \"npx\" || executable === \"bunx\"\n ? parseNpxCommand(args)\n : executable === \"pnpm\"\n ? parsePnpmDlxCommand(args)\n : executable === \"npm\"\n ? parseNpmExecCommand(args)\n : null;\n return invocation &&\n (isPmExecutableToken(invocation.command) ||\n isPmCliPackageToken(invocation.command))\n ? invocation.args\n : null;\n}\n\n/** Extract referenced item IDs from pm CLI invocations embedded in one command. */\nexport const extractReferencedPmItemIdsFromCommand = (\n command: string,\n idPrefix = \"pm\",\n): string[] => {\n const normalizedPrefix = idPrefix.trim().toLowerCase().replace(/-+$/, \"\");\n if (normalizedPrefix.length === 0) return [];\n const normalizedCommand = command\n .trim()\n .replaceAll(\"\\\\\", \"/\")\n .replaceAll('\"', \"\")\n .replaceAll(\"'\", \"\")\n .replaceAll(/\\s+/g, \" \")\n .toLowerCase();\n const ids = new Set<string>();\n for (const segment of splitNormalizedCommandSegments(normalizedCommand)) {\n const invocationArgs = extractPmInvocationArgsFromSegment(segment);\n const context = invocationArgs\n ? resolvePmSubcommandContext(invocationArgs)\n : null;\n const candidate =\n context && PM_SUBCOMMANDS_WITH_ITEM_REFERENCE.has(context.subcommand)\n ? firstPositionalToken(\n context.remaining,\n PM_ITEM_REFERENCE_FLAGS_WITH_VALUE[context.subcommand],\n )\n : undefined;\n const normalizedCandidate = candidate?.trim().toLowerCase();\n if (\n normalizedCandidate?.startsWith(`${normalizedPrefix}-`) === true &&\n normalizedCandidate.length > normalizedPrefix.length + 1\n ) {\n ids.add(candidate as string);\n }\n }\n return [...ids].sort((left, right) => left.localeCompare(right));\n};\n\n/** Implements strip leading env assignments for the public runtime surface of this module. */\nexport function stripLeadingEnvAssignments(tokens: string[]): string[] {\n let start = 0;\n if (tokens[start] === \"env\") {\n start += 1;\n }\n while (start < tokens.length) {\n const token = tokens[start];\n if (/^(?:[a-z_][a-z0-9_]*|\\$env:[a-z_][a-z0-9_]*)=.*/.test(token)) {\n start += 1;\n continue;\n }\n break;\n }\n return tokens.slice(start);\n}\n\n/** Implements first pm subcommand for the public runtime surface of this module. */\nexport function firstPmSubcommand(args: string[]): string | undefined {\n let index = 0;\n while (index < args.length) {\n const token = args[index];\n if (token === \"--\") {\n index += 1;\n continue;\n }\n if (token.startsWith(\"-\")) {\n if (PM_GLOBAL_FLAGS_WITH_VALUE.has(token)) {\n index += 2;\n continue;\n }\n index += 1;\n continue;\n }\n return token;\n }\n return undefined;\n}\n\n/** Implements check whether pm executable token for the public runtime surface of this module. */\nexport function isPmExecutableToken(token: string): boolean {\n return (\n token === \"pm\" ||\n token === \"pm.cmd\" ||\n token === \"pm.exe\" ||\n token.endsWith(\"/pm\") ||\n token.endsWith(\"/pm.cmd\") ||\n token.endsWith(\"/pm.exe\")\n );\n}\n\n/** Implements normalize package specifier for the public runtime surface of this module. */\nexport function normalizePackageSpecifier(token: string): string {\n const trimmed = token.trim();\n if (!trimmed.startsWith(\"@\")) {\n const versionSeparator = trimmed.indexOf(\"@\");\n return versionSeparator === -1\n ? trimmed\n : trimmed.slice(0, versionSeparator);\n }\n const scopeSeparator = trimmed.indexOf(\"/\");\n if (scopeSeparator === -1) {\n return trimmed;\n }\n const versionSeparator = trimmed.indexOf(\"@\", scopeSeparator + 1);\n return versionSeparator === -1 ? trimmed : trimmed.slice(0, versionSeparator);\n}\n\n/** Implements check whether pm cli package token for the public runtime surface of this module. */\nexport function isPmCliPackageToken(token: string): boolean {\n const normalizedSpecifier = normalizePackageSpecifier(token);\n return (\n normalizedSpecifier === \"pm-cli\" ||\n normalizedSpecifier.endsWith(\"/pm-cli\") ||\n token === \"pm-cli\" ||\n token.endsWith(\"/pm-cli\")\n );\n}\n\n/** Implements check whether pm cli script token for the public runtime surface of this module. */\nexport function isPmCliScriptToken(token: string): boolean {\n return (\n token === \"dist/cli.js\" ||\n token === \"./dist/cli.js\" ||\n token.endsWith(\"/dist/cli.js\")\n );\n}\n\n/** Implements parse npx command for the public runtime surface of this module. */\nexport function parseNpxCommand(\n tokens: string[],\n): { command: string; args: string[] } | null {\n let index = 0;\n while (index < tokens.length) {\n const token = tokens[index];\n if (token === \"--\") {\n index += 1;\n break;\n }\n if (!token.startsWith(\"-\")) {\n break;\n }\n const inlineCommandMatch = /^(?:-c|--call)=(.*)$/.exec(token);\n if (inlineCommandMatch) {\n const command = inlineCommandMatch[1];\n return command ? { command, args: tokens.slice(index + 1) } : null;\n }\n if (NPX_COMMAND_STRING_FLAGS.has(token)) {\n index += 1;\n break;\n }\n index += NPX_FLAGS_WITH_VALUE.has(token) && !token.includes(\"=\") ? 2 : 1;\n }\n const command = tokens[index];\n if (!command) {\n return null;\n }\n return {\n command,\n args: tokens.slice(index + 1),\n };\n}\n\n/** Implements parse launcher subcommand for the public runtime surface of this module. */\nexport function parseLauncherSubcommand(\n tokens: string[],\n flagsWithValue: Set<string>,\n): { subcommand: string; args: string[] } | null {\n let index = 0;\n while (index < tokens.length) {\n const token = tokens[index];\n if (token === \"--\") {\n index += 1;\n continue;\n }\n if (token.startsWith(\"-\")) {\n if (token.includes(\"=\")) {\n index += 1;\n continue;\n }\n if (flagsWithValue.has(token)) {\n index += 2;\n continue;\n }\n index += 1;\n continue;\n }\n return {\n subcommand: token,\n args: tokens.slice(index + 1),\n };\n }\n return null;\n}\n\n/** Implements parse pnpm dlx command for the public runtime surface of this module. */\nexport function parsePnpmDlxCommand(\n tokens: string[],\n): { command: string; args: string[] } | null {\n const parsed = parseLauncherSubcommand(tokens, PNPM_GLOBAL_FLAGS_WITH_VALUE);\n if (parsed?.subcommand !== \"dlx\") {\n return null;\n }\n return parseNpxCommand(parsed.args);\n}\n\n/** Implements parse npm exec command for the public runtime surface of this module. */\nexport function parseNpmExecCommand(\n tokens: string[],\n): { command: string; args: string[] } | null {\n const parsed = parseLauncherSubcommand(tokens, NPM_GLOBAL_FLAGS_WITH_VALUE);\n if (!parsed || !NPM_EXEC_SUBCOMMANDS.has(parsed.subcommand)) {\n return null;\n }\n return parseNpxCommand(parsed.args);\n}\n\n/** Implements resolve pm subcommand context for the public runtime surface of this module. */\nexport function resolvePmSubcommandContext(\n args: string[],\n): { subcommand: string; remaining: string[] } | null {\n let index = 0;\n while (index < args.length) {\n const token = args[index];\n if (token === \"--\") {\n index += 1;\n continue;\n }\n if (token.startsWith(\"-\")) {\n if (PM_GLOBAL_FLAGS_WITH_VALUE.has(token)) {\n index += 2;\n continue;\n }\n index += 1;\n continue;\n }\n return {\n subcommand: token,\n remaining: args.slice(index + 1),\n };\n }\n return null;\n}\n\n/** Implements first positional token for the public runtime surface of this module. */\nexport function firstPositionalToken(\n tokens: string[],\n flagsWithValue: ReadonlySet<string> = new Set(),\n): string | undefined {\n for (let index = 0; index < tokens.length; index += 1) {\n const token = tokens[index];\n if (token === \"--\") {\n return tokens[index + 1];\n }\n if (!token.startsWith(\"-\")) {\n return token;\n }\n if (\n !token.includes(\"=\") &&\n (PM_GLOBAL_FLAGS_WITH_VALUE.has(token) || flagsWithValue.has(token))\n ) {\n index += 1;\n }\n }\n return undefined;\n}\n"],"names":[],"mappings":"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","debugId":"3b8460ce-e579-5c5a-94ca-b6cc616c088b"}
1
+ {"version":3,"file":"linked-command-detection.js","sources":["sdk/test/linked-command-detection.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module sdk/test/linked-command-detection\n *\n * Parses linked-test command invocations for sandbox and context-safety checks.\n */\n// Pure, leaf-level helpers for detecting how linked-test shell commands invoke\n// the pm CLI (directly, via npx/pnpm/npm exec, or a launcher subcommand) and for\n// pulling structured context (subcommand, referenced item ids, runner) out of a\n// normalized command string. Kept in core so SDK governance and CLI test\n// execution share one dependency-direction-safe parser.\n\nconst PM_SUBCOMMANDS_WITH_ITEM_REFERENCE = new Set([\n \"get\",\n \"history\",\n \"restore\",\n \"update\",\n \"close\",\n \"delete\",\n \"append\",\n \"claim\",\n \"release\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"docs\",\n \"deps\",\n \"test\",\n]);\n\n/** Public contract for pm global flags with value, shared by SDK and presentation-layer consumers. */\nexport const PM_GLOBAL_FLAGS_WITH_VALUE = new Set([\n \"--pm-path\",\n \"--path\",\n \"--author\",\n]);\n/** Value-bearing flags accepted before item positionals by item-referencing commands. */\nexport const PM_ITEM_REFERENCE_FLAGS_WITH_VALUE: Readonly<\n Record<string, ReadonlySet<string>>\n> = {\n get: new Set([\n \"--depth\",\n \"--fields\",\n \"--tree-depth\",\n \"--tree_depth\",\n \"--at\",\n \"--format\",\n ]),\n history: new Set([\"--limit\", \"--field\", \"--format\"]),\n restore: new Set([\"--message\"]),\n update: new Set([\n \"--title\",\n \"-t\",\n \"--description\",\n \"-d\",\n \"--body\",\n \"-b\",\n \"--status\",\n \"-s\",\n \"--close-reason\",\n \"--close_reason\",\n \"--priority\",\n \"-p\",\n \"--type\",\n \"--tags\",\n \"--add-tags\",\n \"--add_tags\",\n \"--remove-tags\",\n \"--remove_tags\",\n \"--deadline\",\n \"--estimated-minutes\",\n \"--estimate\",\n \"--estimated_minutes\",\n \"--acceptance-criteria\",\n \"--ac\",\n \"--acceptance_criteria\",\n \"--definition-of-ready\",\n \"--definition_of_ready\",\n \"--order\",\n \"--rank\",\n \"--goal\",\n \"--objective\",\n \"--value\",\n \"--impact\",\n \"--outcome\",\n \"--why-now\",\n \"--why_now\",\n \"--message\",\n \"--assignee\",\n \"--parent\",\n \"--reviewer\",\n \"--risk\",\n \"--confidence\",\n \"--sprint\",\n \"--release\",\n \"--blocked-by\",\n \"--blocked_by\",\n \"--blocked-reason\",\n \"--blocked_reason\",\n \"--unblock-note\",\n \"--unblock_note\",\n \"--reporter\",\n \"--severity\",\n \"--environment\",\n \"--repro-steps\",\n \"--repro_steps\",\n \"--resolution\",\n \"--expected-result\",\n \"--expected_result\",\n \"--expected\",\n \"--actual-result\",\n \"--actual_result\",\n \"--actual\",\n \"--affected-version\",\n \"--affected_version\",\n \"--fixed-version\",\n \"--fixed_version\",\n \"--component\",\n \"--regression\",\n \"--customer-impact\",\n \"--customer_impact\",\n \"--dep\",\n \"--dep-remove\",\n \"--dep_remove\",\n \"--comment\",\n \"--note\",\n \"--learning\",\n \"--file\",\n \"--test\",\n \"--doc\",\n \"--reminder\",\n \"--event\",\n \"--type-option\",\n \"--type_option\",\n \"--field\",\n \"--unset\",\n \"--body-file\",\n ]),\n close: new Set([\n \"--reason\",\n \"-r\",\n \"--close-reason\",\n \"--duplicate-of\",\n \"-d\",\n \"--message\",\n \"-m\",\n \"--validate-close\",\n \"--resolution\",\n \"--expected-result\",\n \"--expected_result\",\n \"--expected\",\n \"--actual-result\",\n \"--actual_result\",\n \"--actual\",\n ]),\n delete: new Set([\"--message\"]),\n append: new Set([\"--body\", \"--text\", \"--message\"]),\n claim: new Set([\n \"--assignee\",\n \"--message\",\n \"--type\",\n \"--tag\",\n \"--priority\",\n \"--assignee-filter\",\n \"--parent\",\n \"--sprint\",\n \"--release\",\n \"--max-attempts\",\n ]),\n release: new Set([\"--assignee\", \"--message\"]),\n comments: new Set([\n \"--add\",\n \"--body\",\n \"--comment\",\n \"--file\",\n \"--edit\",\n \"--delete\",\n \"--limit\",\n \"--message\",\n ]),\n notes: new Set([\n \"--add\",\n \"--file\",\n \"--edit\",\n \"--delete\",\n \"--limit\",\n \"--message\",\n ]),\n learnings: new Set([\n \"--add\",\n \"--file\",\n \"--edit\",\n \"--delete\",\n \"--limit\",\n \"--message\",\n ]),\n files: new Set([\n \"--add\",\n \"--add-glob\",\n \"--remove\",\n \"--migrate\",\n \"--note\",\n \"--message\",\n ]),\n docs: new Set([\n \"--add\",\n \"--add-glob\",\n \"--remove\",\n \"--migrate\",\n \"--note\",\n \"--message\",\n ]),\n deps: new Set([\n \"--format\",\n \"--max-depth\",\n \"--collapse\",\n \"--node-limit\",\n \"--edge-limit\",\n \"--token-budget\",\n \"--cursor\",\n \"--direction\",\n \"--kind\",\n ]),\n test: new Set([\n \"--add\",\n \"--add-json\",\n \"--remove\",\n \"--match\",\n \"--only-index\",\n \"--timeout\",\n \"--env-set\",\n \"--env-clear\",\n \"--pm-context\",\n \"--message\",\n ]),\n};\n/** Public contract for npx flags with value, shared by SDK and presentation-layer consumers. */\nexport const NPX_FLAGS_WITH_VALUE = new Set([\"-p\", \"--package\"]);\n/** Public contract for npx flags whose value is the command string itself. */\nexport const NPX_COMMAND_STRING_FLAGS = new Set([\"-c\", \"--call\"]);\n/** Public contract for pnpm global flags with value, shared by SDK and presentation-layer consumers. */\nexport const PNPM_GLOBAL_FLAGS_WITH_VALUE = new Set([\n \"-c\",\n \"-C\",\n \"--config\",\n \"--dir\",\n \"--filter\",\n \"--workspace-dir\",\n]);\n/** Public contract for npm global flags with value, shared by SDK and presentation-layer consumers. */\nexport const NPM_GLOBAL_FLAGS_WITH_VALUE = new Set([\n \"-C\",\n \"--prefix\",\n \"--userconfig\",\n \"--cache\",\n]);\n/** Public contract for yarn global flags with value, shared by SDK and presentation-layer consumers. */\nexport const YARN_GLOBAL_FLAGS_WITH_VALUE = new Set([\"--cwd\"]);\n/** Public contract for bun global flags with value, shared by SDK and presentation-layer consumers. */\nexport const BUN_GLOBAL_FLAGS_WITH_VALUE = new Set([\"--cwd\"]);\n/** Public contract for npm exec subcommands, shared by SDK and presentation-layer consumers. */\nexport const NPM_EXEC_SUBCOMMANDS = new Set([\"exec\", \"x\"]);\n/** Public contract for script run subcommands, shared by SDK and presentation-layer consumers. */\nexport const SCRIPT_RUN_SUBCOMMANDS = new Set([\"run\", \"run-script\"]);\n/** Public contract for script run flags with value, shared by SDK and presentation-layer consumers. */\nexport const SCRIPT_RUN_FLAGS_WITH_VALUE = new Set([\n \"-C\",\n \"--dir\",\n \"--cwd\",\n \"-w\",\n \"--workspace\",\n \"--filter\",\n]);\n\n/** Implements split normalized command segments for the public runtime surface of this module. */\nexport function splitNormalizedCommandSegments(\n normalizedCommand: string,\n): string[] {\n return normalizedCommand\n .split(/&&|\\|\\||\\||;/)\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0);\n}\n\n/** Extract pm CLI arguments from one normalized shell-command segment. */\nexport function extractPmInvocationArgsFromSegment(\n segment: string,\n): string[] | null {\n const tokens = stripLeadingEnvAssignments(\n segment.split(\" \").filter((token) => token.length > 0),\n );\n if (tokens.length === 0) return null;\n const [executable, ...args] = tokens;\n if (isPmExecutableToken(executable) || isPmCliScriptToken(executable)) {\n return args;\n }\n if (executable === \"node\" && args[0] && isPmCliScriptToken(args[0])) {\n return args.slice(1);\n }\n const invocation =\n executable === \"npx\" || executable === \"bunx\"\n ? parseNpxCommand(args)\n : executable === \"pnpm\"\n ? parsePnpmDlxCommand(args)\n : executable === \"npm\"\n ? parseNpmExecCommand(args)\n : null;\n return invocation &&\n (isPmExecutableToken(invocation.command) ||\n isPmCliPackageToken(invocation.command))\n ? invocation.args\n : null;\n}\n\n/** Extract referenced item IDs from pm CLI invocations embedded in one command. */\nexport const extractReferencedPmItemIdsFromCommand = (\n command: string,\n idPrefix = \"pm\",\n): string[] => {\n // Trim trailing dashes with an index scan: the prefix flows from workspace\n // settings, and a /-+$/ regex backtracks polynomially on hostile dash runs\n // (CodeQL js/polynomial-redos, alert 27).\n const lowered = idPrefix.trim().toLowerCase();\n let prefixEnd = lowered.length;\n while (prefixEnd > 0 && lowered[prefixEnd - 1] === \"-\") prefixEnd -= 1;\n const normalizedPrefix = lowered.slice(0, prefixEnd);\n if (normalizedPrefix.length === 0) return [];\n const normalizedCommand = command\n .trim()\n .replaceAll(\"\\\\\", \"/\")\n .replaceAll('\"', \"\")\n .replaceAll(\"'\", \"\")\n .replaceAll(/\\s+/g, \" \")\n .toLowerCase();\n const ids = new Set<string>();\n for (const segment of splitNormalizedCommandSegments(normalizedCommand)) {\n const invocationArgs = extractPmInvocationArgsFromSegment(segment);\n const context = invocationArgs\n ? resolvePmSubcommandContext(invocationArgs)\n : null;\n const candidate =\n context && PM_SUBCOMMANDS_WITH_ITEM_REFERENCE.has(context.subcommand)\n ? firstPositionalToken(\n context.remaining,\n PM_ITEM_REFERENCE_FLAGS_WITH_VALUE[context.subcommand],\n )\n : undefined;\n const normalizedCandidate = candidate?.trim().toLowerCase();\n if (\n normalizedCandidate?.startsWith(`${normalizedPrefix}-`) === true &&\n normalizedCandidate.length > normalizedPrefix.length + 1\n ) {\n ids.add(candidate as string);\n }\n }\n return [...ids].sort((left, right) => left.localeCompare(right));\n};\n\n/** Implements strip leading env assignments for the public runtime surface of this module. */\nexport function stripLeadingEnvAssignments(tokens: string[]): string[] {\n let start = 0;\n if (tokens[start] === \"env\") {\n start += 1;\n }\n while (start < tokens.length) {\n const token = tokens[start];\n if (/^(?:[a-z_][a-z0-9_]*|\\$env:[a-z_][a-z0-9_]*)=.*/.test(token)) {\n start += 1;\n continue;\n }\n break;\n }\n return tokens.slice(start);\n}\n\n/** Implements first pm subcommand for the public runtime surface of this module. */\nexport function firstPmSubcommand(args: string[]): string | undefined {\n let index = 0;\n while (index < args.length) {\n const token = args[index];\n if (token === \"--\") {\n index += 1;\n continue;\n }\n if (token.startsWith(\"-\")) {\n if (PM_GLOBAL_FLAGS_WITH_VALUE.has(token)) {\n index += 2;\n continue;\n }\n index += 1;\n continue;\n }\n return token;\n }\n return undefined;\n}\n\n/** Implements check whether pm executable token for the public runtime surface of this module. */\nexport function isPmExecutableToken(token: string): boolean {\n return (\n token === \"pm\" ||\n token === \"pm.cmd\" ||\n token === \"pm.exe\" ||\n token.endsWith(\"/pm\") ||\n token.endsWith(\"/pm.cmd\") ||\n token.endsWith(\"/pm.exe\")\n );\n}\n\n/** Implements normalize package specifier for the public runtime surface of this module. */\nexport function normalizePackageSpecifier(token: string): string {\n const trimmed = token.trim();\n if (!trimmed.startsWith(\"@\")) {\n const versionSeparator = trimmed.indexOf(\"@\");\n return versionSeparator === -1\n ? trimmed\n : trimmed.slice(0, versionSeparator);\n }\n const scopeSeparator = trimmed.indexOf(\"/\");\n if (scopeSeparator === -1) {\n return trimmed;\n }\n const versionSeparator = trimmed.indexOf(\"@\", scopeSeparator + 1);\n return versionSeparator === -1 ? trimmed : trimmed.slice(0, versionSeparator);\n}\n\n/** Implements check whether pm cli package token for the public runtime surface of this module. */\nexport function isPmCliPackageToken(token: string): boolean {\n const normalizedSpecifier = normalizePackageSpecifier(token);\n return (\n normalizedSpecifier === \"pm-cli\" ||\n normalizedSpecifier.endsWith(\"/pm-cli\") ||\n token === \"pm-cli\" ||\n token.endsWith(\"/pm-cli\")\n );\n}\n\n/** Implements check whether pm cli script token for the public runtime surface of this module. */\nexport function isPmCliScriptToken(token: string): boolean {\n return (\n token === \"dist/cli.js\" ||\n token === \"./dist/cli.js\" ||\n token.endsWith(\"/dist/cli.js\")\n );\n}\n\n/** Implements parse npx command for the public runtime surface of this module. */\nexport function parseNpxCommand(\n tokens: string[],\n): { command: string; args: string[] } | null {\n let index = 0;\n while (index < tokens.length) {\n const token = tokens[index];\n if (token === \"--\") {\n index += 1;\n break;\n }\n if (!token.startsWith(\"-\")) {\n break;\n }\n const inlineCommandMatch = /^(?:-c|--call)=(.*)$/.exec(token);\n if (inlineCommandMatch) {\n const command = inlineCommandMatch[1];\n return command ? { command, args: tokens.slice(index + 1) } : null;\n }\n if (NPX_COMMAND_STRING_FLAGS.has(token)) {\n index += 1;\n break;\n }\n index += NPX_FLAGS_WITH_VALUE.has(token) && !token.includes(\"=\") ? 2 : 1;\n }\n const command = tokens[index];\n if (!command) {\n return null;\n }\n return {\n command,\n args: tokens.slice(index + 1),\n };\n}\n\n/** Implements parse launcher subcommand for the public runtime surface of this module. */\nexport function parseLauncherSubcommand(\n tokens: string[],\n flagsWithValue: Set<string>,\n): { subcommand: string; args: string[] } | null {\n let index = 0;\n while (index < tokens.length) {\n const token = tokens[index];\n if (token === \"--\") {\n index += 1;\n continue;\n }\n if (token.startsWith(\"-\")) {\n if (token.includes(\"=\")) {\n index += 1;\n continue;\n }\n if (flagsWithValue.has(token)) {\n index += 2;\n continue;\n }\n index += 1;\n continue;\n }\n return {\n subcommand: token,\n args: tokens.slice(index + 1),\n };\n }\n return null;\n}\n\n/** Implements parse pnpm dlx command for the public runtime surface of this module. */\nexport function parsePnpmDlxCommand(\n tokens: string[],\n): { command: string; args: string[] } | null {\n const parsed = parseLauncherSubcommand(tokens, PNPM_GLOBAL_FLAGS_WITH_VALUE);\n if (parsed?.subcommand !== \"dlx\") {\n return null;\n }\n return parseNpxCommand(parsed.args);\n}\n\n/** Implements parse npm exec command for the public runtime surface of this module. */\nexport function parseNpmExecCommand(\n tokens: string[],\n): { command: string; args: string[] } | null {\n const parsed = parseLauncherSubcommand(tokens, NPM_GLOBAL_FLAGS_WITH_VALUE);\n if (!parsed || !NPM_EXEC_SUBCOMMANDS.has(parsed.subcommand)) {\n return null;\n }\n return parseNpxCommand(parsed.args);\n}\n\n/** Implements resolve pm subcommand context for the public runtime surface of this module. */\nexport function resolvePmSubcommandContext(\n args: string[],\n): { subcommand: string; remaining: string[] } | null {\n let index = 0;\n while (index < args.length) {\n const token = args[index];\n if (token === \"--\") {\n index += 1;\n continue;\n }\n if (token.startsWith(\"-\")) {\n if (PM_GLOBAL_FLAGS_WITH_VALUE.has(token)) {\n index += 2;\n continue;\n }\n index += 1;\n continue;\n }\n return {\n subcommand: token,\n remaining: args.slice(index + 1),\n };\n }\n return null;\n}\n\n/** Implements first positional token for the public runtime surface of this module. */\nexport function firstPositionalToken(\n tokens: string[],\n flagsWithValue: ReadonlySet<string> = new Set(),\n): string | undefined {\n for (let index = 0; index < tokens.length; index += 1) {\n const token = tokens[index];\n if (token === \"--\") {\n return tokens[index + 1];\n }\n if (!token.startsWith(\"-\")) {\n return token;\n }\n if (\n !token.includes(\"=\") &&\n (PM_GLOBAL_FLAGS_WITH_VALUE.has(token) || flagsWithValue.has(token))\n ) {\n index += 1;\n }\n }\n return undefined;\n}\n"],"names":[],"mappings":"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","debugId":"b5ce9338-c375-5964-a4e9-2fa13a34b9f8"}
@@ -137,6 +137,7 @@ pm release <item-id>
137
137
  | Agent plan read | `pm plan show <plan-id> --depth brief` (or `--fields id,title,steps_summary`) |
138
138
  | Materialize plan steps | `pm plan materialize <plan-id> --steps plan-step-002 --materialize-type Task` |
139
139
  | Dependencies | `pm deps <id> --format tree` |
140
+ | Graph queries | `pm graph successors <id> --limit 20` (also `ancestors`, `paths`, `impact`, `analyze`, `audit`, `communities`, `redundancy`, `dominators`, `plan`) |
140
141
  | Bulk update by id allowlist | `pm update-many --ids pm-a,pm-b --priority 1 --dry-run` (preview, then drop `--dry-run`) |
141
142
  | Audited bulk close (sprint closeout) | `pm close-many --filter-sprint <s> --reason "<text>" --dry-run` (full `pm close` semantics per item; `--rollback <id>` to undo) |
142
143
  | Local docs routing | `pm install guide-shell --project`, then `pm guide <topic>` |
package/docs/COMMANDS.md CHANGED
@@ -548,12 +548,30 @@ pm files <id> --add-glob "src/cli/**/*.ts"
548
548
  pm docs <id> --add path=docs/COMMANDS.md,note="public command docs"
549
549
  pm docs <id> --add docs/COMMANDS.md --note "public command docs"
550
550
  pm deps <id> --format tree
551
+ pm deps <id> --format context --direction both --kind blocked_by,parent --token-budget 800
551
552
  ```
552
553
 
553
- Linked files and docs keep reviews reproducible. `deps` is read-only and projects item relationships. The standalone `--note <text>` flag annotates every link added by `--add`/`--add-glob` in the same invocation (a per-entry embedded `note=` wins); `--note` without an add is a usage error.
554
+ Linked files and docs keep reviews reproducible. `deps` is read-only and projects item relationships. `--format context` returns one bounded, explainable relationship packet: a counts-first summary, per-node `role`/`via`/`reasons`, root evidence pointers, enumerated `missing_references` with active-versus-legacy classification, `meta.completeness`, and cursor continuation; `--direction`, repeatable or comma-separated `--kind`, `--max-depth`, `--node-limit`, `--edge-limit`, `--token-budget`, and `--cursor` control the traversal (see [Relationship Graph](RELATIONSHIP_GRAPH.md)). `--edge-limit` caps both returned graph edges and enumerated `missing_references`; `missing_reference_count` retains the total when rows are omitted. The standalone `--note <text>` flag annotates every link added by `--add`/`--add-glob` in the same invocation (a per-entry embedded `note=` wins); `--note` without an add is a usage error.
554
555
 
555
556
  Structured key/value forms reject unrecognized keys with an `Allowed keys: …` error (matching `test --add`), so a typoed key (`lable=` instead of `label=`) fails fast instead of being silently dropped: `--add`/`--file`/`--doc` accept `path,scope,note`; `--add-glob` accepts `pattern,glob,path,scope,note`; `--remove` accepts `path`; `--migrate` accepts `from,to`; `--dep` accepts `id,kind,type,author,created_at` (plus `source_kind` on update); `--reminder` accepts `at,date,text,title`; `--event` accepts `start,date,end,duration,title,description,location,timezone,all_day` and the `recur_*` recurrence keys. Bare values (`--add src/cli/main.ts`) skip key validation.
556
557
 
558
+ ## Graph Queries
559
+
560
+ ```bash
561
+ pm graph ancestors <id> --max-depth 3
562
+ pm graph successors <id> --kind blocked_by --limit 20
563
+ pm graph paths <id> <target> --direction outgoing --max-paths 5
564
+ pm graph impact <id> --direction incoming --summary
565
+ pm graph analyze --limit 10
566
+ pm graph audit --sample 5 --exempt-isolate pm-root
567
+ pm graph communities --kind blocked_by --limit 5
568
+ pm graph redundancy --max-depth 6 --limit 20
569
+ pm graph dominators <id> --direction outgoing --limit 10
570
+ pm graph plan --sample 5 --limit 20
571
+ ```
572
+
573
+ `graph` is read-only and answers workspace-wide relationship questions through the public SDK graph toolkit. `ancestors`/`descendants` walk registered hierarchy kinds, `predecessors`/`successors` walk order-bearing kinds, `paths` enumerates bounded simple paths between two items with per-edge kinds, and `impact` reports the bounded blast radius with an explaining path per affected item. `analyze` returns workspace execution analytics (topological layers, prerequisite frontier, critical path, genuine ordering cycles) plus knowledge-graph structure (components, orphans, hubs), and `audit` runs the policy-aware governance audit with counts-first findings, severities, and bounded evidence samples. Audit severity gates on lifecycle: ordering cycles and duplicated edge spellings confined to closed/canceled items downgrade to informational `legacy_ordering_cycle`/`legacy_duplicate_edge` findings (history debt, never repaired ad hoc), while `ordering_cycle` errors and `duplicate_edge` findings are reserved for subjects touching at least one active item; `duplicate_edge` reports parallel same-family spellings — including reciprocal inverse pairs such as `A blocked_by B` plus `B blocks A` — that transitive-reduction redundancy deliberately cannot see. `communities` clusters the undirected structure with deterministic label propagation (reporting `iterations` and `converged`), `redundancy` finds stored edges implied by a longer path of the same semantic family (`blocked_by`/`blocks` and hierarchy spellings witness each other, each row carrying its witness path), and `dominators` reports the structural bottlenecks of one item's reachable subgraph — nodes every path from the root must pass through, ranked by how much work they gate (`dominated_count`). `plan` derives a dry-run remediation plan from the audit plus the redundancy scan: exact `remove`/`retype`/`supersede`/`waive`/`investigate` proposals with per-step policy code, evidence, rationale, and confidence — nothing is ever applied automatically and no proposal invents an edge. Every envelope is counts-first with explicit `truncated`, `cost` (visited nodes, inspected edges), and `cache` (workspace fingerprint plus assembly/result hit-or-miss) metadata; repeated identical queries in long-lived hosts such as the MCP server are answered from a fingerprint-keyed snapshot cache that invalidates on any relationship-relevant item change. `--summary` suppresses row collections entirely. `--kind` accepts registered relationship kinds (repeatable or comma-separated) and fails fast on unknown values (`redundancy` additionally requires directed ordering or hierarchy kinds); `--after` resumes hierarchy/ordering walks after a previously returned node id (see [Relationship Graph](RELATIONSHIP_GRAPH.md)).
574
+
557
575
  ## Linked Tests
558
576
 
559
577
  ```bash
@@ -67,15 +67,22 @@ Every analytics result identifies its algorithm and edge family. Exact algorithm
67
67
 
68
68
  ## Bounded agent context
69
69
 
70
- `buildRelationshipContext` joins caller-owned compact node details with the graph kernel in one request. The packet includes the root, shortest-distance related nodes, semantic selection reasons (`prerequisite`, `dependent`, `ancestor`, `descendant`, `provenance`, or bounded reachability), root evidence pointers, included edges, explicit work counts, token accounting, omitted counts, and an opaque continuation cursor.
70
+ `buildRelationshipContext` joins caller-owned compact node details with the graph kernel in one request. The packet opens with a counts-first `summary` (root identity and status, root-incident edge counts per semantic family, discovered/returned/omitted node and edge counts, evidence count, and a continuation marker) followed by the root, shortest-distance related nodes, included edges, root evidence pointers, and the cost envelope.
71
+
72
+ Every returned node is explainable: `role` names its semantic family (`prerequisite`, `dependent`, `ancestor`, `descendant`, `provenance`, or `related`), `via` names the node through which bounded traversal first discovered it, and `reasons` lists the direct classifications for depth-1 nodes or a `"<role> via <node> (depth N)"` chain explanation for deeper nodes. When a node matches several families, `role` picks the deterministic priority order `prerequisite > dependent > ancestor > descendant > provenance > related`.
73
+
74
+ `meta.completeness` reports result quality: the exact in-memory kernel emits `complete` or `truncated`, and the contract reserves `sampled`, `approximate`, `stale_index`, and `redacted` for index-backed or policy-filtered providers so consumers can branch on one field.
71
75
 
72
76
  Node, edge, depth, kind, direction, and token bounds are independent. The cursor fingerprint covers semantic filters and traversal shape, so it is rejected when reused for a different root or query. Output remains a plain object suitable for TOON, JSON, JSONL, MCP, or a custom UI; adapters own rendering and do not reimplement traversal.
73
77
 
74
- The native adapter is `pm deps <id> --format context`. It is also available through `PmClient.deps`, `runAction({ action: "deps" })`, and the MCP `pm_deps` tool. `--max-depth`, `--node-limit`, `--edge-limit`, `--token-budget`, and `--cursor` map directly to the public SDK context options; `--summary` keeps only counts. Tree and graph formats remain compatible.
78
+ The native adapter is `pm deps <id> --format context`. It is also available through `PmClient.deps`, `runAction({ action: "deps" })`, and the MCP `pm_deps` tool. `--max-depth`, `--node-limit`, `--edge-limit`, `--token-budget`, `--cursor`, `--direction`, and repeatable or comma-separated `--kind` map directly to the public SDK context options; `--summary` keeps only counts. Unknown `--kind` values fail fast with the registered-kind list instead of silently matching nothing. Tree and graph formats remain compatible.
79
+
80
+ The context result also enumerates broken references instead of reporting a bare count: `missing_count` counts missing nodes reachable within the same bounded traversal that produced the packet (so it agrees with tree/graph semantics for equal traversal parameters and is documented by `missing_scope: "traversal"`), and `missing_references` lists each dangling declaration inside the packet with its declaring holder, dangling target, kind, source surface, and `legacy_terminal` classification so agents can separate repairable typos on active items from ignorable historical debt. `--edge-limit` caps both returned graph edges and enumerated missing-reference rows; `missing_reference_count` preserves the untruncated declaration total. The root's linked files, tests, docs, and annotation counts are promoted into `evidence` as bounded pointers.
75
81
 
76
82
  ```bash
77
83
  pm deps pm-example --format context --max-depth 3 \
78
- --node-limit 20 --edge-limit 40 --token-budget 800
84
+ --node-limit 20 --edge-limit 40 --token-budget 800 \
85
+ --direction both --kind blocked_by,parent
79
86
  ```
80
87
 
81
88
  ```ts
@@ -102,6 +109,95 @@ const packet = buildRelationshipContext(
102
109
  );
103
110
  ```
104
111
 
112
+ ## Semantic traversal and governance
113
+
114
+ The `@unbrained/pm-cli/sdk` barrel exports registry-aware traversal primitives
115
+ for domain packages that need more than generic adjacency:
116
+
117
+ - `hierarchyAncestors` and `hierarchyDescendants` follow only hierarchy kinds
118
+ and honor each kind's declared parent endpoint.
119
+ - `orderingPredecessors` and `orderingSuccessors` follow only order-bearing
120
+ kinds and honor declared precedence, so inverse spellings agree.
121
+ - `enumerateRelationshipPaths` returns bounded simple paths with edge evidence,
122
+ cost metadata, cancellation, direction/kind filters, and explicit truncation.
123
+
124
+ All semantic walks are breadth-first and deterministic. `limit`, `maxDepth`,
125
+ and `after` provide bounded continuation for hierarchy and ordering walks;
126
+ path enumeration separately bounds returned paths and expanded partial paths.
127
+ Unknown kinds and cursors fail fast instead of silently degrading context.
128
+
129
+ `assembleWorkspaceRelationshipGraph` is the shared normalization seam for
130
+ dependency-shaped workspaces. It folds parent links, the legacy scalar
131
+ `blocked_by`, and structured dependency edges into one graph, materializes
132
+ missing endpoints as explainable placeholder nodes, and returns active versus
133
+ terminal dangling-reference partitions. Domain adapters pass their
134
+ `RelationshipKindRegistry` as the optional third argument so custom VCS,
135
+ company, or package-defined edges survive assembly with their registered
136
+ semantics. `auditWorkspaceRelationshipGraph`
137
+ consumes that assembly and emits counts-first findings for active/terminal
138
+ missing references, retired sentinels, ordering cycles, stale lifecycle blocks,
139
+ and sparse or isolated active nodes. Findings include stable codes, severity,
140
+ bounded deterministic samples, truncation, policy text, and safe remediation;
141
+ the audit never invents an edge. Explicit isolate exemptions suppress policy
142
+ findings without changing structural coverage metrics.
143
+
144
+ ```ts
145
+ import {
146
+ assembleWorkspaceRelationshipGraph,
147
+ auditWorkspaceRelationshipGraph,
148
+ orderingPredecessors,
149
+ } from "@unbrained/pm-cli/sdk";
150
+
151
+ const assembly = assembleWorkspaceRelationshipGraph(items, isTerminalStatus);
152
+ const prerequisites = orderingPredecessors(assembly.graph, "deploy", {
153
+ limit: 20,
154
+ maxDepth: 4,
155
+ });
156
+ const governance = auditWorkspaceRelationshipGraph(assembly, {
157
+ isTerminal: isTerminalStatus,
158
+ exemptIsolates: ["company-root"],
159
+ maxSampleSize: 25,
160
+ });
161
+ ```
162
+
163
+ The three layers are intentionally separate: assembly owns storage-shape
164
+ normalization, traversal owns semantic graph algorithms, and governance owns
165
+ policy findings. A VCS, company operating model, digital twin, or other
166
+ non-project domain can replace the assembly adapter while reusing the same
167
+ registry, traversal, event, context, and audit contracts.
168
+
169
+ The native workspace adapter is `pm graph <subcommand>`, also available as
170
+ `PmClient.graph`, `runAction({ action: "graph" })`, and the MCP `pm_graph`
171
+ tool. `ancestors`/`descendants`/`predecessors`/`successors` expose the
172
+ semantic walks, `paths` exposes bounded simple-path enumeration, `impact`
173
+ exposes reverse-reachability blast radius from `analyzeGraphImpact`,
174
+ `analyze` combines `analyzeRelationshipExecution` and `analyzeKnowledgeGraph`
175
+ into one counts-first workspace projection, and `audit` runs
176
+ `auditWorkspaceRelationshipGraph` with `--sample` and `--exempt-isolate`
177
+ policy controls. `communities` exposes `detectRelationshipCommunities`
178
+ (deterministic asynchronous label propagation with lexicographic
179
+ tie-breaking), `redundancy` exposes `findRedundantRelationshipEdges`
180
+ (transitive-reduction scan over ordering and hierarchy families in semantic
181
+ orientation, each finding carrying a bounded witness path), and `dominators`
182
+ exposes `computeRelationshipDominators` (Cooper–Harvey–Kennedy immediate
183
+ dominators over the root's reachable subgraph, ranking structural
184
+ bottlenecks by gated work), and `plan` exposes `planRelationshipRemediation`
185
+ (dry-run remediation proposals derived from audit findings and witnessed
186
+ redundancy rows, each carrying an exact operation, policy code, evidence,
187
+ rationale, and confidence — never auto-applied). The audit gates finding
188
+ severity on lifecycle: contradictions confined to terminal items report as
189
+ informational `legacy_ordering_cycle`/`legacy_duplicate_edge` history debt,
190
+ while `ordering_cycle` errors and `duplicate_edge` findings require at least
191
+ one active subject; `duplicate_edge` covers parallel same-family spellings,
192
+ reciprocal inverse pairs included, which transitive-reduction redundancy
193
+ deliberately skips. All subcommands resolve the workspace assembly through
194
+ the shared fingerprint-keyed graph cache (`WorkspaceGraphCache`): the
195
+ fingerprint digests every relationship-relevant item field, so unchanged
196
+ workspaces in long-lived hosts reuse the assembled graph and memoized query
197
+ results, and every envelope reports `cache` hit/miss observability next to
198
+ its explicit `truncated` and `cost` metadata. Ids resolve
199
+ case-insensitively; `--summary` returns envelopes without row collections.
200
+
105
201
  ## Compatibility and migration
106
202
 
107
203
  Aliases normalize at registry boundaries; stored values are not silently rewritten. Imports must carry or select a compatible registry version. Federation merges definitions before edges and rejects identifier or alias collisions. Rollback removes the custom definition and its derived index only after application-owned edges have been exported or superseded; immutable history is retained.
package/docs/SDK.md CHANGED
@@ -38,8 +38,17 @@ Source of truth:
38
38
  - [`src/sdk/files.ts`](../src/sdk/files.ts)
39
39
  - [`src/sdk/docs.ts`](../src/sdk/docs.ts)
40
40
  - [`src/sdk/dependencies.ts`](../src/sdk/dependencies.ts)
41
+ - [`src/sdk/actionability.ts`](../src/sdk/actionability.ts)
41
42
  - [`src/sdk/schema.ts`](../src/sdk/schema.ts)
42
43
  - [`src/sdk/relationships.ts`](../src/sdk/relationships.ts)
44
+ - [`src/sdk/graph/index.ts`](../src/sdk/graph/index.ts)
45
+ - [`src/sdk/graph/assembly.ts`](../src/sdk/graph/assembly.ts)
46
+ - [`src/sdk/graph/traversal.ts`](../src/sdk/graph/traversal.ts)
47
+ - [`src/sdk/graph/analytics.ts`](../src/sdk/graph/analytics.ts)
48
+ - [`src/sdk/graph/governance.ts`](../src/sdk/graph/governance.ts)
49
+ - [`src/sdk/graph/remediation.ts`](../src/sdk/graph/remediation.ts)
50
+ - [`src/sdk/graph/cache.ts`](../src/sdk/graph/cache.ts)
51
+ - [`src/sdk/graph/run.ts`](../src/sdk/graph/run.ts)
43
52
  - [`src/sdk/relationship-history.ts`](../src/sdk/relationship-history.ts)
44
53
  - [`src/sdk/relationship-context.ts`](../src/sdk/relationship-context.ts)
45
54
  - [`src/sdk/governance/validate.ts`](../src/sdk/governance/validate.ts)
@@ -139,12 +148,17 @@ Command/action contract exports:
139
148
  - Context relevance primitives: `buildItemContextRelevanceCandidates`, `defaultScoreContextCandidates`, `scoreContextCandidates`, `scoreContextCandidatesWithActiveExtensions`, `evaluateContextRanking`, `runContextEvaluationScenario`, `runContextEvaluationCorpus`, and `summarizeContextEvaluationReports`
140
149
  - Context relevance contracts: `ContextRelevanceCandidate`, `ContextRelevanceSignals`, `ContextRelevanceScorer`, `ContextRelevanceReport`, `ContextEvaluationReader`, `ContextEvaluationScenario`, `ContextEvaluationScenarioReport`, `ContextEvaluationThresholds`, and `ContextEvaluationCorpusReport`
141
150
  - Context packing and feedback primitives: `packContextCandidates`, `recordContextUsageServing`, `recordContextUsageTouch`, `recordContextUsageTouches`, and `readContextUsageAffinity`
142
- - Typed annotation and relationship primitives on `PmClient`: `comments`, `notes`, `learnings`, `files`, `filesDiscover`, `docs`, `deps`, and `append`
151
+ - Typed annotation and relationship primitives on `PmClient`: `comments`, `notes`, `learnings`, `files`, `filesDiscover`, `docs`, `deps`, `graph`, and `append`
152
+ - Workspace graph-query runner: `runGraph` (with `GraphCommandOptions`, `GraphResult`, and per-subcommand envelopes) resolves the workspace relationship graph through the shared fingerprint-keyed cache and dispatches bounded `ancestors`/`descendants`/`predecessors`/`successors`/`paths`/`impact`/`analyze`/`audit`/`communities`/`redundancy`/`dominators`/`plan` queries with counts-first cost, truncation, and cache metadata; the `pm graph` CLI command and `pm_graph` MCP tool are thin adapters over it.
153
+ - Structural graph analytics: `detectRelationshipCommunities` (deterministic label-propagation clustering with `maxIterations`/`minSize` bounds and convergence reporting), `findRedundantRelationshipEdges` (transitive-reduction scan that joins each directed ordering or hierarchy kind with its inverse spelling and returns witness paths), and `computeRelationshipDominators` (Cooper–Harvey–Kennedy immediate dominators with per-node gating weights for bottleneck ranking) — all deterministic, cancellable, and cost-metered like every other graph query.
154
+ - Incremental graph cache: `WorkspaceGraphCache`, `workspaceGraphCache`, `resetWorkspaceGraphCache`, and `computeWorkspaceGraphFingerprint` reuse the assembled workspace graph and memoize deterministic query results under a fingerprint that digests every relationship-relevant item field (id, title, status and terminal classification, parent, legacy blocker, structured dependencies), so long-lived hosts stop paying full-workspace assembly per bounded query; `GraphCacheMetadata` reports assembly/result hit-or-miss on every `runGraph` envelope.
155
+ - Remediation planning: `planRelationshipRemediation` (with `RelationshipRemediationPlan`, `RelationshipRemediationStep`, and operation/confidence/code contracts) derives exact dry-run `remove`/`retype`/`supersede`/`waive`/`investigate` proposals from governance-audit findings and witnessed redundancy rows — evidence-backed, confidence-rated, and never auto-applied.
143
156
  - Annotation and relationship option/result contracts: `CommentsCommandOptions` / `CommentsResult`, `NotesCommandOptions` / `NotesResult`, `LearningsCommandOptions` / `LearningsResult`, `FilesCommandOptions` / `FilesResult`, `FilesDiscoverOptions` / `FilesDiscoverResult`, `DocsCommandOptions` / `DocsResult`, `DepsCommandOptions` / `DepsResult`, `AppendCommandOptions` / `AppendResult`
144
157
  - Annotation kernel primitives: `resolveAnnotationInput`, `runAnnotationCommand`, `resolveAnnotationIndex`, `parseAnnotationTextInput`, `limitAnnotationEntries`, `readAnnotationEntries`, `wrapOwnershipConflict`, `isErrnoError`, and their typed input/config/result contracts
145
158
  - Linked-resource kernel primitives: `runFiles`, `runFilesDiscover`, `runDocs`, `runDeps`, `runLinkedArtifacts`, parsing/normalization/path-validation helpers, and their typed contracts. The CLI files/docs/deps modules are presentation-only re-exports of these SDK implementations.
146
- - Dependency-governance primitive: `collectDanglingDependencyReferences` partitions missing targets into actionable active holders, informational terminal-history holders, and the legacy `no-active-blocker` sentinel without mutating stored history.
147
- - Relationship graph primitives: `RelationshipKindRegistry`, `createRelationshipKindRegistry`, `RelationshipGraph`, `RelationshipEventLog`, `RelationshipEventStore`, `buildRelationshipContext`, `buildDepsRelationshipContext`, `isOrderingRelationshipKind`, and `dependencyToRelationship` provide application-defined edge semantics, durable replay, and bounded adjacency, closure, reverse-impact, shortest-path, induced-subgraph, and explainable context queries. See [Relationship graph semantics](RELATIONSHIP_GRAPH.md).
159
+ - Actionability primitives: `collectBlockedByIds`, `resolveItemBlockers`, `collectDependencyBlockedIds`, and `computeActionabilityReport` expose the same edge-aware blocked/ready definition used by `pm next`, `pm context`, and `pm list-blocked`. Embedded schedulers can therefore classify custom lifecycle schemas without importing CLI or core modules.
160
+ - Dependency-governance primitives: `collectDanglingDependencyReferences`, `collectMissingDependencyTargetIds`, and `assembleWorkspaceRelationshipGraph` normalize hierarchy, scalar blockers, and structured dependencies into one graph while partitioning missing targets into actionable active holders, informational terminal-history holders, and the legacy `no-active-blocker` sentinel without mutating stored history.
161
+ - Relationship graph primitives: `RelationshipKindRegistry`, `createRelationshipKindRegistry`, `RelationshipGraph`, `RelationshipEventLog`, `RelationshipEventStore`, `buildRelationshipContext`, `buildDepsRelationshipContext`, `hierarchyAncestors`, `hierarchyDescendants`, `orderingPredecessors`, `orderingSuccessors`, `enumerateRelationshipPaths`, `auditWorkspaceRelationshipGraph`, `isOrderingRelationshipKind`, and `dependencyToRelationship` provide application-defined edge semantics, durable replay, bounded semantic traversal, policy-aware governance, and explainable context queries. See [Relationship graph semantics](RELATIONSHIP_GRAPH.md).
148
162
  - Typed customization primitives on `PmClient`: `init`, `config`, `schema`, `schemaList`, `schemaShow`, `schemaAddType`, `schemaRemoveType`, `schemaAddStatus`, `schemaRemoveStatus`, `schemaAddField`, `schemaRemoveField`, `schemaListFields`, `schemaShowField`, `schemaApplyPreset`, `schemaInferTypes`, `schemaShowStatus`, `profile`, `profileList`, `profileShow`, `profileApply`, and `profileLint`
149
163
  - Workspace-scaffold primitives: `ensurePmGitignore` and `getPmGitignoreBlock` let custom tools apply the same idempotent runtime/search cache policy as `pm init` without importing CLI internals.
150
164
  - Customization primitive option/result contracts: `InitCommandOptions` / `InitResult`, `ConfigCommandOptions` / `ConfigResult`, `SchemaSubcommand` / `SchemaResult` / `SchemaInspectResult`, `SchemaListResult`, `SchemaShowResult`, `SchemaAddTypeResult`, `SchemaRemoveTypeResult`, `SchemaAddStatusResult`, `SchemaRemoveStatusResult`, `SchemaAddFieldResult`, `SchemaRemoveFieldResult`, `SchemaListFieldsResult`, `SchemaShowFieldResult`, `SchemaApplyPresetResult`, `SchemaAddTypeInferResult`, `SchemaShowStatusResult`, `ProfileSubcommand` / `ProfileResult`, `ProfileListResult`, `ProfileShowResult`, `ProfileApplyResult`, `ProfileLintResult`
package/marketplace.json CHANGED
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
9
- "version": "2026.7.17"
9
+ "version": "2026.7.18"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "pm-claude",
14
14
  "source": "./plugins/pm-claude",
15
15
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
16
- "version": "2026.7.17",
16
+ "version": "2026.7.18",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.7.17",
3
+ "version": "2026.7.18",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.7.17",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for importing Beads JSONL records.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-calendar",
3
- "version": "2026.7.17",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for calendar and agenda views.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-command-kit",
3
- "version": "2026.7.17",
3
+ "version": "2026.7.18",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.7.17",
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.17",
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.17",
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.17",
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.17",
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.17",
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.17",
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.17",
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.17",
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.17",
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",