@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
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  readManagedExtensionState,
5
5
  runExtension
6
- } from "./chunk-KOEZCHRF.js";
6
+ } from "./chunk-QRZNCRNA.js";
7
7
  import {
8
8
  migrateItemFilesToFormat
9
9
  } from "./chunk-RC4UOUXA.js";
@@ -1359,6 +1359,6 @@ export {
1359
1359
  _testOnlyConfigCommand,
1360
1360
  runUpgrade
1361
1361
  };
1362
- //# sourceMappingURL=chunk-V7MP6YTN.js.map
1362
+ //# sourceMappingURL=chunk-IL5SPRMH.js.map
1363
1363
 
1364
1364
  //# debugId=19ae68d5-2e1a-587a-af35-75e398c30d7c
@@ -1,27 +1,6 @@
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]="fd394844-de95-5cab-9dd6-7c4ef4e52320")}catch(e){}}();
3
- import {
4
- createQueryFingerprint,
5
- encodeQueryCursor,
6
- resolveQueryCursorStart
7
- } from "./chunk-2IPNL3DR.js";
8
- import {
9
- getActiveExtensionRegistrations,
10
- isTerminalStatus,
11
- listAllItemMetadataLight,
12
- readSettings
13
- } from "./chunk-P22HGFFI.js";
14
- import {
15
- EXIT_CODE,
16
- PmCliError,
17
- getSettingsPath,
18
- pathExists,
19
- resolveItemTypeRegistry,
20
- resolvePmRoot,
21
- resolveRuntimeStatusRegistry
22
- } from "./chunk-KX62NMZC.js";
23
-
24
1
  // dist/sdk/relationships.js
2
+
3
+ !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]="8145f80d-99b5-53e4-a519-54b4549dca6c")}catch(e){}}();
25
4
  var BUILTIN_RELATIONSHIP_KINDS = [
26
5
  {
27
6
  kind: "blocked_by",
@@ -364,6 +343,14 @@ var RelationshipGraph = class _RelationshipGraph {
364
343
  nodes() {
365
344
  return this.#nodeSnapshot;
366
345
  }
346
+ /** Report whether an identifier names an indexed node. */
347
+ hasNode(id) {
348
+ return this.#nodes.has(id);
349
+ }
350
+ /** Return the registry that interprets this graph's relationship kinds. */
351
+ registry() {
352
+ return this.#registry;
353
+ }
367
354
  #assertNode(id) {
368
355
  if (!this.#nodes.has(id))
369
356
  throw new TypeError(`Relationship node not found: ${id}`);
@@ -403,6 +390,24 @@ var RelationshipGraph = class _RelationshipGraph {
403
390
  }
404
391
  };
405
392
  }
393
+ /** Return deterministic one-hop neighbor rows paired with each connecting edge. */
394
+ neighborEdges(id, options = {}) {
395
+ this.#assertNode(id);
396
+ options.signal?.throwIfAborted();
397
+ const kinds = options.kinds ? new Set(options.kinds.map((kind) => this.#registry.require(kind).kind)) : void 0;
398
+ const rows = this.#neighbors(id, options.direction ?? "outgoing", kinds);
399
+ const limit = options.limit ?? Number.POSITIVE_INFINITY;
400
+ const value = rows.slice(0, limit);
401
+ return {
402
+ value,
403
+ meta: {
404
+ visitedNodes: 1,
405
+ inspectedEdges: rows.length,
406
+ truncated: value.length < rows.length,
407
+ nextCursor: value.at(-1)?.id
408
+ }
409
+ };
410
+ }
406
411
  /** Return bounded transitive closure in breadth-first discovery order. */
407
412
  closure(id, options = {}) {
408
413
  this.#assertNode(id);
@@ -528,193 +533,7 @@ function dependencyToRelationship(source, dependency, registry = defaultRegistry
528
533
  };
529
534
  }
530
535
 
531
- // dist/sdk/relationship-context.js
532
- var tokenEncoder = new TextEncoder();
533
- function positiveInteger(value, fallback, field) {
534
- const resolved = value ?? fallback;
535
- if (!Number.isInteger(resolved) || resolved < 1)
536
- throw new TypeError(`Relationship context ${field} must be positive`);
537
- return resolved;
538
- }
539
- function estimateTokens(value) {
540
- return Math.max(1, Math.ceil(tokenEncoder.encode(JSON.stringify(value)).byteLength / 4));
541
- }
542
- function explainDirectEdge(edge, root, node, registry) {
543
- const definition = registry.require(edge.kind);
544
- if (definition.ordering) {
545
- const sourceFirst = (definition.precedence ?? "source_before_target") === "source_before_target";
546
- const before = sourceFirst ? edge.source : edge.target;
547
- return node === before ? "prerequisite" : "dependent";
548
- }
549
- if (definition.hierarchy) {
550
- const sourceIsParent = (definition.hierarchyDirection ?? "source_parent") === "source_parent";
551
- const parent = sourceIsParent ? edge.source : edge.target;
552
- return node === parent ? "ancestor" : "descendant";
553
- }
554
- if (edge.kind === "discovered_from" || edge.kind === "incident_from")
555
- return "provenance";
556
- return "related";
557
- }
558
- function directReasons(rootEdges, root, node, registry) {
559
- const reasons = rootEdges.filter((edge) => edge.source === root && edge.target === node || edge.target === root && edge.source === node).map((edge) => explainDirectEdge(edge, root, node, registry));
560
- return [...new Set(reasons)].sort();
561
- }
562
- function discoverNodes(graph, root, options) {
563
- const direction = options.direction ?? "both";
564
- const maxDepth = options.maxDepth ?? 3;
565
- if (!Number.isInteger(maxDepth) || maxDepth < 0)
566
- throw new TypeError("Relationship context maxDepth must be non-negative");
567
- const seen = /* @__PURE__ */ new Set([root]);
568
- const queue = [{ id: root, distance: 0 }];
569
- const rows = [];
570
- let inspectedEdges = 0;
571
- let depthTruncated = false;
572
- for (let index = 0; index < queue.length; index += 1) {
573
- options.signal?.throwIfAborted();
574
- const current = queue[index];
575
- if (current.distance >= maxDepth && depthTruncated)
576
- continue;
577
- const adjacent = graph.adjacency(current.id, {
578
- direction,
579
- kinds: options.kinds,
580
- signal: options.signal
581
- });
582
- inspectedEdges += adjacent.meta.inspectedEdges;
583
- if (current.distance >= maxDepth) {
584
- if (adjacent.value.some((id) => !seen.has(id)))
585
- depthTruncated = true;
586
- continue;
587
- }
588
- for (const id of adjacent.value) {
589
- if (seen.has(id))
590
- continue;
591
- seen.add(id);
592
- const row = { id, distance: current.distance + 1 };
593
- rows.push(row);
594
- queue.push(row);
595
- }
596
- }
597
- rows.sort((left, right) => left.distance - right.distance || left.id.localeCompare(right.id));
598
- return {
599
- rows,
600
- visitedNodes: queue.length,
601
- inspectedEdges,
602
- depthTruncated
603
- };
604
- }
605
- function selectContextNodes(params) {
606
- const nodes = [];
607
- let usedTokens = params.initialTokens;
608
- const rootEdges = params.graph.incidentEdges(params.rootId);
609
- for (const candidate of params.candidates) {
610
- if (nodes.length >= params.nodeLimit)
611
- break;
612
- const node = {
613
- ...params.details.get(candidate.id) ?? { id: candidate.id },
614
- distance: candidate.distance,
615
- reasons: candidate.distance === 1 ? directReasons(rootEdges, params.rootId, candidate.id, params.registry) : [`reachable at depth ${candidate.distance}`]
616
- };
617
- const cost = estimateTokens(node);
618
- if (usedTokens + cost > params.tokenBudget)
619
- break;
620
- nodes.push(node);
621
- usedTokens += cost;
622
- }
623
- if (params.candidates.length > 0 && nodes.length === 0)
624
- throw new TypeError("Relationship context tokenBudget cannot fit one node");
625
- return { nodes, usedTokens };
626
- }
627
- function selectContextEdges(params) {
628
- const candidates = params.graph.edges().filter((edge) => params.included.has(edge.source) && params.included.has(edge.target));
629
- const edges = [];
630
- let usedTokens = params.initialTokens;
631
- for (const edge of candidates) {
632
- if (edges.length >= params.edgeLimit)
633
- break;
634
- const cost = estimateTokens(edge);
635
- if (usedTokens + cost > params.tokenBudget)
636
- break;
637
- edges.push(edge);
638
- usedTokens += cost;
639
- }
640
- return { edges, usedTokens, candidateCount: candidates.length };
641
- }
642
- function buildRelationshipContext(graph, rootId, details, options = {}) {
643
- if (!graph.nodes().includes(rootId))
644
- throw new TypeError(`Relationship node not found: ${rootId}`);
645
- const nodeLimit = positiveInteger(options.nodeLimit, 20, "nodeLimit");
646
- const edgeLimit = positiveInteger(options.edgeLimit, 40, "edgeLimit");
647
- const tokenBudget = positiveInteger(options.tokenBudget, 1200, "tokenBudget");
648
- const registry = options.registry ?? createRelationshipKindRegistry();
649
- const byId = new Map(details.map((detail) => [detail.id, detail]));
650
- const rootDetails = byId.get(rootId) ?? {
651
- id: rootId
652
- };
653
- const { evidence: rootEvidence = [], ...root } = rootDetails;
654
- const evidence = [...rootEvidence];
655
- const discovery = discoverNodes(graph, rootId, options);
656
- const fingerprint = createQueryFingerprint("relationship-context", {
657
- rootId,
658
- direction: options.direction ?? "both",
659
- kinds: [...options.kinds ?? []].sort(),
660
- maxDepth: options.maxDepth ?? 3
661
- });
662
- const pageStart = resolveQueryCursorStart(discovery.rows, options.cursor, fingerprint, ({ id }) => id);
663
- const candidates = discovery.rows.slice(pageStart);
664
- const initialTokens = estimateTokens(root) + estimateTokens(evidence);
665
- if (initialTokens > tokenBudget)
666
- throw new TypeError("Relationship context tokenBudget cannot fit root and evidence");
667
- const nodeSelection = selectContextNodes({
668
- candidates,
669
- details: byId,
670
- graph,
671
- rootId,
672
- registry,
673
- nodeLimit,
674
- tokenBudget,
675
- initialTokens
676
- });
677
- const { nodes } = nodeSelection;
678
- const included = /* @__PURE__ */ new Set([rootId, ...nodes.map(({ id }) => id)]);
679
- const edgeSelection = selectContextEdges({
680
- graph,
681
- included,
682
- edgeLimit,
683
- tokenBudget,
684
- initialTokens: nodeSelection.usedTokens
685
- });
686
- const { edges, usedTokens } = edgeSelection;
687
- const consumed = pageStart + nodes.length;
688
- const hasMoreNodes = consumed < discovery.rows.length;
689
- const lastNode = nodes.at(-1);
690
- const omittedEdges = edgeSelection.candidateCount - edges.length;
691
- const truncated = discovery.depthTruncated || hasMoreNodes || omittedEdges > 0;
692
- return {
693
- root,
694
- nodes,
695
- edges,
696
- evidence,
697
- meta: {
698
- exact: true,
699
- truncated,
700
- nodeLimit,
701
- edgeLimit,
702
- tokenBudget,
703
- usedTokens,
704
- visitedNodes: discovery.visitedNodes,
705
- inspectedEdges: discovery.inspectedEdges,
706
- omittedNodes: discovery.rows.length - consumed,
707
- omittedEdges,
708
- ...hasMoreNodes && lastNode ? {
709
- nextCursor: encodeQueryCursor(fingerprint, lastNode.id, consumed - 1)
710
- } : {}
711
- }
712
- };
713
- }
714
-
715
- // dist/sdk/dependencies.js
716
- var DEPS_FORMAT_VALUES = ["tree", "graph", "context"];
717
- var DEPS_COLLAPSE_VALUES = ["none", "repeated"];
536
+ // dist/sdk/graph/assembly.js
718
537
  function normalizeDependencyReferenceTarget(target) {
719
538
  if (typeof target !== "string")
720
539
  return void 0;
@@ -728,7 +547,8 @@ function normalizeDependencyGraphTarget(target) {
728
547
  return normalized?.toLowerCase() === "no-active-blocker" ? void 0 : normalized;
729
548
  }
730
549
  function collectDanglingDependencyReferences(items, isTerminal = (status) => status === "closed" || status === "canceled") {
731
- const knownIds = new Set(items.map((item) => item.id.trim().toLowerCase()));
550
+ const safeItems = items.filter((item) => typeof item?.id === "string" && item.id.trim().length > 0);
551
+ const knownIds = new Set(safeItems.map((item) => item.id.trim().toLowerCase()));
732
552
  const rows = /* @__PURE__ */ new Map();
733
553
  const addReference = (item, target, kind, source) => {
734
554
  const normalized = normalizeDependencyReferenceTarget(target);
@@ -736,7 +556,7 @@ function collectDanglingDependencyReferences(items, isTerminal = (status) => sta
736
556
  return;
737
557
  }
738
558
  const row = {
739
- holder_id: item.id,
559
+ holder_id: item.id.trim(),
740
560
  target_id: normalized,
741
561
  kind,
742
562
  source,
@@ -746,7 +566,7 @@ function collectDanglingDependencyReferences(items, isTerminal = (status) => sta
746
566
  };
747
567
  rows.set(`${row.holder_id}::${row.target_id}::${row.kind}::${row.source}`, row);
748
568
  };
749
- for (const item of items) {
569
+ for (const item of safeItems) {
750
570
  addReference(item, item.parent, "parent", "parent");
751
571
  addReference(item, item.blocked_by, "blocked_by", "blocked_by");
752
572
  for (const dependency of item.dependencies ?? []) {
@@ -777,211 +597,14 @@ function collectMissingDependencyTargetIds(dangling) {
777
597
  }
778
598
  return [...targets.values()].sort((left, right) => left.localeCompare(right));
779
599
  }
780
- function parseFormat(raw) {
781
- const candidate = raw?.trim().toLowerCase() ?? "tree";
782
- if (DEPS_FORMAT_VALUES.includes(candidate)) {
783
- return candidate;
784
- }
785
- throw new PmCliError(`Invalid --format value "${raw}". Use "tree", "graph", or "context".`, EXIT_CODE.USAGE);
786
- }
787
- function parsePositiveInteger(raw, flag) {
788
- if (raw === void 0)
789
- return void 0;
790
- const value = typeof raw === "number" ? raw : Number(raw.trim());
791
- if (!Number.isInteger(value) || value < 1)
792
- throw new PmCliError(`Invalid --${flag} value "${raw}". Use a positive integer.`, EXIT_CODE.USAGE);
793
- return value;
794
- }
795
- function parseMaxDepth(raw) {
796
- if (raw === void 0) {
797
- return void 0;
798
- }
799
- const normalized = typeof raw === "number" ? raw : Number(raw.trim());
800
- if (!Number.isInteger(normalized) || normalized < 0) {
801
- throw new PmCliError(`Invalid --max-depth value "${raw}". Use a non-negative integer.`, EXIT_CODE.USAGE);
802
- }
803
- return normalized;
804
- }
805
- function parseCollapse(raw) {
806
- const candidate = raw?.trim().toLowerCase() ?? "none";
807
- if (DEPS_COLLAPSE_VALUES.includes(candidate)) {
808
- return candidate;
809
- }
810
- throw new PmCliError(`Invalid --collapse value "${raw}". Use "none" or "repeated".`, EXIT_CODE.USAGE);
811
- }
812
- function normalizeDependencies(dependencies) {
813
- if (!dependencies || dependencies.length === 0) {
814
- return [];
815
- }
816
- const sorted = dependencies.map(({ id, kind }) => ({
817
- id: id.trim(),
818
- kind: kind.trim().toLowerCase()
819
- })).sort((left, right) => {
820
- const byKind = left.kind.localeCompare(right.kind);
821
- if (byKind !== 0)
822
- return byKind;
823
- return left.id.localeCompare(right.id);
824
- });
825
- const deduped = /* @__PURE__ */ new Map();
826
- for (const dependency of sorted) {
827
- const key = `${dependency.kind.toLowerCase()}::${dependency.id.toLowerCase()}`;
828
- if (!deduped.has(key)) {
829
- deduped.set(key, { id: dependency.id, kind: dependency.kind });
830
- }
831
- }
832
- return [...deduped.values()];
833
- }
834
- function toIndexedItem(item) {
835
- return {
836
- id: item.id,
837
- title: item.title,
838
- type: item.type,
839
- status: item.status,
840
- dependencies: normalizeDependencies(item.dependencies)
841
- };
842
- }
843
- function toTreeNode(id, index, lineage, maxDepth, collapse, expanded, depth = 0, via) {
844
- const lookupId = id.trim().toLowerCase();
845
- const item = index.get(lookupId);
846
- const baseNode = {
847
- id: item?.id ?? id,
848
- title: item?.title,
849
- type: item?.type,
850
- status: item?.status,
851
- via,
852
- missing: !item,
853
- cycle: lineage.has(lookupId),
854
- dependencies: []
855
- };
856
- if (!item || baseNode.cycle) {
857
- return baseNode;
858
- }
859
- if (maxDepth !== void 0 && depth >= maxDepth) {
860
- if (item.dependencies.length > 0) {
861
- baseNode.truncated = true;
862
- }
863
- return baseNode;
864
- }
865
- if (collapse === "repeated" && expanded.has(lookupId)) {
866
- baseNode.collapsed = true;
867
- return baseNode;
868
- }
869
- if (collapse === "repeated") {
870
- expanded.add(lookupId);
871
- }
872
- const nextLineage = new Set(lineage);
873
- nextLineage.add(lookupId);
874
- baseNode.dependencies = item.dependencies.map((dependency) => toTreeNode(dependency.id, index, nextLineage, maxDepth, collapse, expanded, depth + 1, dependency.kind));
875
- return baseNode;
876
- }
877
- function mergeGraphNode(existing, candidate) {
878
- if (!existing) {
879
- return candidate;
880
- }
881
- if (existing.missing && !candidate.missing)
882
- return candidate;
883
- return {
884
- ...existing,
885
- title: existing.title ?? candidate.title,
886
- type: existing.type ?? candidate.type,
887
- status: existing.status ?? candidate.status
888
- };
889
- }
890
- function toGraph(root) {
891
- const nodesById = /* @__PURE__ */ new Map();
892
- const edgesByKey = /* @__PURE__ */ new Map();
893
- const visit = (node) => {
894
- nodesById.set(node.id, mergeGraphNode(nodesById.get(node.id), {
895
- id: node.id,
896
- title: node.title,
897
- type: node.type,
898
- status: node.status,
899
- missing: node.missing
900
- }));
901
- for (const child of node.dependencies) {
902
- nodesById.set(child.id, mergeGraphNode(nodesById.get(child.id), {
903
- id: child.id,
904
- title: child.title,
905
- type: child.type,
906
- status: child.status,
907
- missing: child.missing
908
- }));
909
- const relationKind = child.via ?? "related";
910
- const edgeKey = `${node.id}::${child.id}::${relationKind}`;
911
- if (!edgesByKey.has(edgeKey)) {
912
- edgesByKey.set(edgeKey, {
913
- from: node.id,
914
- to: child.id,
915
- kind: relationKind
916
- });
917
- }
918
- if (!child.cycle) {
919
- visit(child);
920
- }
921
- }
922
- };
923
- visit(root);
924
- const nodes = [...nodesById.values()].sort((left, right) => left.id.localeCompare(right.id));
925
- const edges = [...edgesByKey.values()].sort((left, right) => {
926
- const byFrom = left.from.localeCompare(right.from);
927
- if (byFrom !== 0)
928
- return byFrom;
929
- const byTo = left.to.localeCompare(right.to);
930
- if (byTo !== 0)
931
- return byTo;
932
- return left.kind.localeCompare(right.kind);
933
- });
934
- const missingIds = nodes.filter((node) => node.missing).map((node) => node.id);
935
- return {
936
- root_id: root.id,
937
- nodes,
938
- edges,
939
- missing_ids: missingIds
940
- };
941
- }
942
- function countDependencyGraph(rootId, index, maxDepth) {
943
- const nodeIds = /* @__PURE__ */ new Set();
944
- const edgeKeys = /* @__PURE__ */ new Set();
945
- const missingIds = /* @__PURE__ */ new Set();
946
- const expanded = /* @__PURE__ */ new Set();
947
- const pending = [{ id: rootId, depth: 0 }];
948
- let pendingIndex = 0;
949
- while (pendingIndex < pending.length) {
950
- const current = pending[pendingIndex++];
951
- const lookupId = current.id.trim().toLowerCase();
952
- nodeIds.add(lookupId);
953
- const item = index.get(lookupId);
954
- if (!item) {
955
- missingIds.add(lookupId);
956
- continue;
957
- }
958
- if (maxDepth !== void 0 && current.depth >= maxDepth) {
959
- continue;
960
- }
961
- if (expanded.has(lookupId)) {
962
- continue;
963
- }
964
- expanded.add(lookupId);
965
- for (const dependency of item.dependencies) {
966
- edgeKeys.add(`${lookupId}::${dependency.id.trim().toLowerCase()}::${dependency.kind}`);
967
- pending.push({ id: dependency.id, depth: current.depth + 1 });
968
- }
969
- }
970
- return {
971
- node_count: nodeIds.size,
972
- edge_count: edgeKeys.size,
973
- missing_count: missingIds.size
974
- };
975
- }
976
- function buildDepsRelationshipContext(rootId, items, options) {
977
- const maxDepth = parseMaxDepth(options.maxDepth);
978
- const nodeLimit = parsePositiveInteger(options.nodeLimit, "node-limit");
979
- const edgeLimit = parsePositiveInteger(options.edgeLimit, "edge-limit");
980
- const tokenBudget = parsePositiveInteger(options.tokenBudget, "token-budget");
981
- const canonicalIds = new Map(items.map((item) => [item.id.trim().toLowerCase(), item.id.trim()]));
982
- const dangling = collectDanglingDependencyReferences(items);
600
+ function assembleWorkspaceRelationshipGraph(items, isTerminal, registry) {
601
+ const safeItems = items.filter((item) => typeof item?.id === "string" && item.id.trim().length > 0);
602
+ const canonicalIds = new Map(safeItems.map((item) => [item.id.trim().toLowerCase(), item.id.trim()]));
603
+ const dangling = collectDanglingDependencyReferences(safeItems, isTerminal);
983
604
  const missingIds = collectMissingDependencyTargetIds(dangling);
984
- const graphItems = items.map((item) => {
605
+ for (const id of missingIds)
606
+ canonicalIds.set(id.toLowerCase(), id);
607
+ const graphItems = safeItems.map((item) => {
985
608
  const parent = normalizeDependencyGraphTarget(item.parent);
986
609
  const blocker = normalizeDependencyGraphTarget(item.blocked_by);
987
610
  const dependencies = (item.dependencies ?? []).flatMap((rawDependency) => {
@@ -991,91 +614,36 @@ function buildDepsRelationshipContext(rootId, items, options) {
991
614
  const target = normalizeDependencyGraphTarget(dependency.id);
992
615
  if (!target)
993
616
  return [];
994
- return [{
995
- id: canonicalIds.get(target.toLowerCase()) ?? target,
996
- kind: typeof dependency.kind === "string" ? dependency.kind : "related"
997
- }];
617
+ return [
618
+ {
619
+ id: canonicalIds.get(target.toLowerCase()),
620
+ kind: typeof dependency.kind === "string" ? dependency.kind : "related"
621
+ }
622
+ ];
998
623
  });
999
624
  return {
1000
- id: item.id,
1001
- ...parent ? { parent: canonicalIds.get(parent.toLowerCase()) ?? parent } : {},
1002
- ...blocker ? { blocked_by: canonicalIds.get(blocker.toLowerCase()) ?? blocker } : {},
625
+ id: item.id.trim(),
626
+ ...parent ? { parent: canonicalIds.get(parent.toLowerCase()) } : {},
627
+ ...blocker ? { blocked_by: canonicalIds.get(blocker.toLowerCase()) } : {},
1003
628
  dependencies
1004
629
  };
1005
630
  });
1006
- return buildRelationshipContext(RelationshipGraph.fromItems([...graphItems, ...missingIds.map((id) => ({ id }))]), rootId, [
1007
- ...items.map((item) => ({ id: item.id, title: item.title, status: item.status })),
1008
- ...missingIds.map((id) => ({ id, title: `[missing] ${id}`, status: "missing" }))
1009
- ], {
1010
- ...maxDepth === void 0 ? {} : { maxDepth },
1011
- ...nodeLimit === void 0 ? {} : { nodeLimit },
1012
- ...edgeLimit === void 0 ? {} : { edgeLimit },
1013
- ...tokenBudget === void 0 ? {} : { tokenBudget },
1014
- ...options.cursor?.trim() ? { cursor: options.cursor.trim() } : {}
1015
- });
1016
- }
1017
- async function runDeps(id, options, global) {
1018
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
1019
- if (!await pathExists(getSettingsPath(pmRoot))) {
1020
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1021
- }
1022
- const format = parseFormat(options.format);
1023
- const maxDepth = parseMaxDepth(options.maxDepth);
1024
- const collapse = parseCollapse(options.collapse);
1025
- const summaryOnly = options.summary === true;
1026
- const settings = await readSettings(pmRoot);
1027
- const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1028
- const items = await listAllItemMetadataLight(pmRoot, settings.item_format, typeRegistry.type_to_folder, void 0, settings.schema);
1029
- const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
1030
- const index = new Map(items.map((item) => [item.id.trim().toLowerCase(), toIndexedItem(item)]));
1031
- const dangling = collectDanglingDependencyReferences(items, (status) => isTerminalStatus(status, statusRegistry));
1032
- for (const reference of [...dangling.active, ...dangling.legacy_terminal]) {
1033
- const holder = index.get(reference.holder_id.trim().toLowerCase());
1034
- const referenceKind = reference.kind.trim().toLowerCase();
1035
- if (holder && !holder.dependencies.some((dependency) => dependency.id.trim().toLowerCase() === reference.target_id.trim().toLowerCase() && dependency.kind === referenceKind)) {
1036
- holder.dependencies.push({ id: reference.target_id, kind: referenceKind });
1037
- }
1038
- }
1039
- if (!index.has(id.trim().toLowerCase())) {
1040
- throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
1041
- }
1042
- if (format === "context") {
1043
- const canonicalId = index.get(id.trim().toLowerCase()).id;
1044
- const context = buildDepsRelationshipContext(canonicalId, items, options);
1045
- return {
1046
- id: canonicalId,
1047
- format,
1048
- node_count: context.nodes.length + 1,
1049
- edge_count: context.edges.length,
1050
- missing_count: collectMissingDependencyTargetIds(dangling).length,
1051
- ...summaryOnly ? {} : { context }
1052
- };
1053
- }
1054
- if (summaryOnly) {
1055
- return {
1056
- id,
1057
- format,
1058
- ...countDependencyGraph(id, index, maxDepth)
1059
- };
1060
- }
1061
- const tree = toTreeNode(id, index, /* @__PURE__ */ new Set(), maxDepth, collapse, /* @__PURE__ */ new Set());
1062
- const graph = toGraph(tree);
1063
- const baseResult = {
1064
- id,
1065
- format,
1066
- node_count: graph.nodes.length,
1067
- edge_count: graph.edges.length,
1068
- missing_count: graph.missing_ids.length
1069
- };
1070
- if (format === "tree") {
1071
- return {
1072
- ...baseResult,
1073
- tree
1074
- };
1075
- }
1076
631
  return {
1077
- ...baseResult,
1078
- graph
632
+ graph: RelationshipGraph.fromItems([...graphItems, ...missingIds.map((id) => ({ id }))], registry),
633
+ details: [
634
+ ...safeItems.map((item) => ({
635
+ id: item.id.trim(),
636
+ title: item.title,
637
+ status: item.status
638
+ })),
639
+ ...missingIds.map((id) => ({
640
+ id,
641
+ title: `[missing] ${id}`,
642
+ status: "missing"
643
+ }))
644
+ ],
645
+ missingIdSet: new Set(missingIds.map((id) => id.toLowerCase())),
646
+ dangling
1079
647
  };
1080
648
  }
1081
649
 
@@ -1085,13 +653,10 @@ export {
1085
653
  isOrderingRelationshipKind,
1086
654
  RelationshipGraph,
1087
655
  dependencyToRelationship,
1088
- buildRelationshipContext,
1089
- DEPS_FORMAT_VALUES,
1090
- DEPS_COLLAPSE_VALUES,
1091
656
  collectDanglingDependencyReferences,
1092
- buildDepsRelationshipContext,
1093
- runDeps
657
+ collectMissingDependencyTargetIds,
658
+ assembleWorkspaceRelationshipGraph
1094
659
  };
1095
- //# sourceMappingURL=chunk-YQCWK2MB.js.map
660
+ //# sourceMappingURL=chunk-L5BTTDU5.js.map
1096
661
 
1097
- //# debugId=fd394844-de95-5cab-9dd6-7c4ef4e52320
662
+ //# debugId=8145f80d-99b5-53e4-a519-54b4549dca6c