@unbrained/pm-cli 2026.7.16 → 2026.7.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +30 -2
  3. package/CONTRIBUTING.md +2 -2
  4. package/dist/cli/bootstrap-args.d.ts +2 -115
  5. package/dist/cli/bootstrap-args.js +4 -831
  6. package/dist/cli/bootstrap-args.js.map +1 -1
  7. package/dist/cli/commands/close.d.ts +1 -1
  8. package/dist/cli/commands/close.js +3 -3
  9. package/dist/cli/commands/close.js.map +1 -1
  10. package/dist/cli/commands/completion.js +47 -5
  11. package/dist/cli/commands/completion.js.map +1 -1
  12. package/dist/cli/commands/context.d.ts +2 -2
  13. package/dist/cli/commands/context.js +42 -28
  14. package/dist/cli/commands/context.js.map +1 -1
  15. package/dist/cli/commands/contracts.js +5 -3
  16. package/dist/cli/commands/contracts.js.map +1 -1
  17. package/dist/cli/commands/eval.d.ts +4 -64
  18. package/dist/cli/commands/eval.js +4 -153
  19. package/dist/cli/commands/eval.js.map +1 -1
  20. package/dist/cli/commands/graph.d.ts +7 -0
  21. package/dist/cli/commands/graph.js +11 -0
  22. package/dist/cli/commands/graph.js.map +1 -0
  23. package/dist/cli/commands/index.d.ts +1 -0
  24. package/dist/cli/commands/index.js +3 -2
  25. package/dist/cli/commands/index.js.map +1 -1
  26. package/dist/cli/commands/linked-test-entry.d.ts +6 -6
  27. package/dist/cli/commands/linked-test-entry.js +4 -65
  28. package/dist/cli/commands/linked-test-entry.js.map +1 -1
  29. package/dist/cli/commands/linked-test-parsers.d.ts +3 -45
  30. package/dist/cli/commands/linked-test-parsers.js +4 -516
  31. package/dist/cli/commands/linked-test-parsers.js.map +1 -1
  32. package/dist/cli/commands/list.d.ts +3 -210
  33. package/dist/cli/commands/list.js +4 -1068
  34. package/dist/cli/commands/list.js.map +1 -1
  35. package/dist/cli/commands/next.d.ts +1 -1
  36. package/dist/cli/commands/next.js +3 -3
  37. package/dist/cli/commands/next.js.map +1 -1
  38. package/dist/cli/commands/search.d.ts +3 -464
  39. package/dist/cli/commands/search.js +4 -2236
  40. package/dist/cli/commands/search.js.map +1 -1
  41. package/dist/cli/commands/stats.d.ts +6 -66
  42. package/dist/cli/commands/stats.js +4 -157
  43. package/dist/cli/commands/stats.js.map +1 -1
  44. package/dist/cli/commands/telemetry.d.ts +6 -14
  45. package/dist/cli/commands/telemetry.js +4 -349
  46. package/dist/cli/commands/telemetry.js.map +1 -1
  47. package/dist/cli/commands/test-all.d.ts +6 -95
  48. package/dist/cli/commands/test-all.js +4 -439
  49. package/dist/cli/commands/test-all.js.map +1 -1
  50. package/dist/cli/commands/test-runs.d.ts +6 -92
  51. package/dist/cli/commands/test-runs.js +4 -189
  52. package/dist/cli/commands/test-runs.js.map +1 -1
  53. package/dist/cli/commands/test.d.ts +6 -244
  54. package/dist/cli/commands/test.js +4 -1780
  55. package/dist/cli/commands/test.js.map +1 -1
  56. package/dist/cli/commands/update-many.d.ts +15 -29
  57. package/dist/cli/commands/update-many.js +355 -259
  58. package/dist/cli/commands/update-many.js.map +1 -1
  59. package/dist/cli/main.js +141 -133
  60. package/dist/cli/main.js.map +1 -1
  61. package/dist/cli/register-list-query.js +49 -7
  62. package/dist/cli/register-list-query.js.map +1 -1
  63. package/dist/cli/register-mutation.js +7 -3
  64. package/dist/cli/register-mutation.js.map +1 -1
  65. package/dist/cli/search-refresh.js +4 -9
  66. package/dist/cli/search-refresh.js.map +1 -1
  67. package/dist/cli/shared-parsers.d.ts +6 -9
  68. package/dist/cli/shared-parsers.js +4 -37
  69. package/dist/cli/shared-parsers.js.map +1 -1
  70. package/dist/cli/telemetry-flush.js +4 -4
  71. package/dist/cli/telemetry-flush.js.map +1 -1
  72. package/dist/cli-bundle/bundle-manifest.json +334 -326
  73. package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js → append-5YF3TO7I.js} +5 -5
  74. package/dist/cli-bundle/chunks/append-JHO5K6RP.js +11 -0
  75. package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js → chunk-2BX74BAS.js} +3 -3
  76. package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js → chunk-2CXL335K.js} +3 -3
  77. package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js → chunk-2FUOXSRN.js} +4 -4
  78. package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js → chunk-2IPNL3DR.js} +3 -3
  79. package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js → chunk-2XOSFSTH.js} +5 -5
  80. package/dist/cli-bundle/chunks/{chunk-UFXU44HV.js → chunk-35FHWD4C.js} +6 -6
  81. package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js.map → chunk-35FHWD4C.js.map} +1 -7
  82. package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js → chunk-37DRDP2B.js} +5 -5
  83. package/dist/cli-bundle/chunks/{chunk-BKVG6XOA.js → chunk-3CUQZNQ6.js} +67 -509
  84. package/dist/cli-bundle/chunks/chunk-3CUQZNQ6.js.map +7 -0
  85. package/dist/cli-bundle/chunks/chunk-3QDR6ZLU.js +800 -0
  86. package/dist/cli-bundle/chunks/chunk-3QDR6ZLU.js.map +7 -0
  87. package/dist/cli-bundle/chunks/{chunk-5JLUII3O.js → chunk-43UMFKCK.js} +321 -240
  88. package/dist/cli-bundle/chunks/chunk-43UMFKCK.js.map +1 -0
  89. package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js → chunk-47HXN6RX.js} +3 -3
  90. package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js → chunk-5HGZKQUL.js} +4 -4
  91. package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js → chunk-5UKQLQM2.js} +2 -2
  92. package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js → chunk-633PKXLT.js} +3 -3
  93. package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js → chunk-646MQXFW.js} +2 -2
  94. package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js → chunk-66MKH7SZ.js} +4 -4
  95. package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js → chunk-67RO3H4N.js} +4 -4
  96. package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js → chunk-6DYOZS6C.js} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js → chunk-6O44IN44.js} +2 -2
  98. package/dist/cli-bundle/chunks/{chunk-5ZSLZLDN.js → chunk-6VHUGVNP.js} +608 -456
  99. package/dist/cli-bundle/chunks/chunk-6VHUGVNP.js.map +1 -0
  100. package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js → chunk-74FKFFXO.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js → chunk-7H5NNCJ5.js} +4 -4
  102. package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js → chunk-7R6UIHYY.js} +75 -5
  103. package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js.map → chunk-7R6UIHYY.js.map} +1 -1
  104. package/dist/cli-bundle/chunks/{chunk-3S5QVM5H.js → chunk-7UCY6DR5.js} +193 -22
  105. package/dist/cli-bundle/chunks/chunk-7UCY6DR5.js.map +1 -0
  106. package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js → chunk-ADXDCAKP.js} +16 -7
  107. package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js.map → chunk-ADXDCAKP.js.map} +1 -1
  108. package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js → chunk-AFGKSHAM.js} +4 -4
  109. package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js → chunk-ARGDWQ4J.js} +2 -2
  110. package/dist/cli-bundle/chunks/{chunk-XXXF6PAQ.js → chunk-AXRT7K5V.js} +83 -62
  111. package/dist/cli-bundle/chunks/chunk-AXRT7K5V.js.map +7 -0
  112. package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js → chunk-B57RJHBZ.js} +4 -4
  113. package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js → chunk-BAP7G3N2.js} +2 -2
  114. package/dist/cli-bundle/chunks/{chunk-NLDFBC6J.js → chunk-BDA35QG5.js} +35 -5
  115. package/dist/cli-bundle/chunks/chunk-BDA35QG5.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js → chunk-BIRYX32V.js} +3 -3
  117. package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js → chunk-BVLOMU6O.js} +2 -2
  118. package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js → chunk-CKX4WOPC.js} +2 -2
  119. package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js → chunk-D52ZN3BF.js} +2 -2
  120. package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js → chunk-D53RTYVI.js} +4 -4
  121. package/dist/cli-bundle/chunks/{chunk-ODALILG3.js → chunk-D5XHO4Q7.js} +2 -2
  122. package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js → chunk-DDFGYUCQ.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js → chunk-DG2EQRIH.js} +4 -4
  124. package/dist/cli-bundle/chunks/{chunk-J6364LFM.js → chunk-DHNG452T.js} +9 -18
  125. package/dist/cli-bundle/chunks/{chunk-J6364LFM.js.map → chunk-DHNG452T.js.map} +1 -1
  126. package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js → chunk-E4FXM2XB.js} +77 -7
  127. package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js.map → chunk-E4FXM2XB.js.map} +1 -1
  128. package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js → chunk-EHJFUOXL.js} +3 -3
  129. package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js → chunk-EWIT5WIC.js} +7 -7
  130. package/dist/cli-bundle/chunks/chunk-EX7OQT3Y.js +783 -0
  131. package/dist/cli-bundle/chunks/chunk-EX7OQT3Y.js.map +1 -0
  132. package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js → chunk-EY7ZE3TG.js} +3 -3
  133. package/dist/cli-bundle/chunks/{chunk-ILX33QXL.js → chunk-F3VC3GOV.js} +669 -472
  134. package/dist/cli-bundle/chunks/chunk-F3VC3GOV.js.map +7 -0
  135. package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js → chunk-FHOBCGQO.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js → chunk-FL4D53ND.js} +2 -2
  137. package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js → chunk-FVNWHUME.js} +4 -4
  138. package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js → chunk-FXFCFL73.js} +5 -5
  139. package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js → chunk-FY4RLHSC.js} +2 -2
  140. package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js → chunk-G6MYGULG.js} +4 -4
  141. package/dist/cli-bundle/chunks/{chunk-HYB5AZ63.js → chunk-GKPCTQYG.js} +1822 -72
  142. package/dist/cli-bundle/chunks/chunk-GKPCTQYG.js.map +7 -0
  143. package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js → chunk-GLZKZON6.js} +2 -2
  144. package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js → chunk-H5IOT54C.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js → chunk-HO4DLBNK.js} +2 -2
  146. package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js → chunk-HPAYDSR2.js} +8 -8
  147. package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js → chunk-HSYV4ZYT.js} +4 -4
  148. package/dist/cli-bundle/chunks/{chunk-EH2OPHBI.js → chunk-HTXXXF45.js} +23 -19
  149. package/dist/cli-bundle/chunks/chunk-HTXXXF45.js.map +1 -0
  150. package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js → chunk-HYTOJW2Q.js} +8 -8
  151. package/dist/cli-bundle/chunks/{chunk-4XQ3BDV4.js → chunk-I3INI567.js} +536 -449
  152. package/dist/cli-bundle/chunks/chunk-I3INI567.js.map +7 -0
  153. package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js → chunk-I7DIDUSP.js} +2 -2
  154. package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js → chunk-IE5KRAKN.js} +4 -4
  155. package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js → chunk-IL5SPRMH.js} +7 -7
  156. package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js → chunk-ILVOOAT4.js} +5 -5
  157. package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js → chunk-KH6QAHME.js} +3 -3
  158. package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js → chunk-KX62NMZC.js} +3 -3
  159. package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js.map → chunk-KX62NMZC.js.map} +1 -1
  160. package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js → chunk-L337QKWJ.js} +5 -5
  161. package/dist/cli-bundle/chunks/{chunk-JFTKLTEF.js → chunk-L5BTTDU5.js} +68 -503
  162. package/dist/cli-bundle/chunks/chunk-L5BTTDU5.js.map +1 -0
  163. package/dist/cli-bundle/chunks/{chunk-LSG2U345.js → chunk-L6FVNR7X.js} +5 -5
  164. package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js → chunk-LSOWTLEM.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-4223PVZT.js → chunk-M7MVOKVV.js} +3 -3
  166. package/dist/cli-bundle/chunks/{chunk-UMOPHQSU.js → chunk-MR4SHYR4.js} +41 -19
  167. package/dist/cli-bundle/chunks/chunk-MR4SHYR4.js.map +7 -0
  168. package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js → chunk-N33FD2UI.js} +3 -3
  169. package/dist/cli-bundle/chunks/{chunk-UXONS674.js → chunk-NCVT6XEL.js} +68 -56
  170. package/dist/cli-bundle/chunks/chunk-NCVT6XEL.js.map +1 -0
  171. package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js → chunk-NNANAWFH.js} +3 -3
  172. package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js → chunk-NTRQLE2R.js} +2 -2
  173. package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js → chunk-NVZ6NVHJ.js} +4 -4
  174. package/dist/cli-bundle/chunks/{chunk-E2OJMKML.js → chunk-OGVTB5VO.js} +47 -37
  175. package/dist/cli-bundle/chunks/chunk-OGVTB5VO.js.map +7 -0
  176. package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js → chunk-OWP6QFBV.js} +4 -4
  177. package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js → chunk-P22HGFFI.js} +2 -2
  178. package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js → chunk-PT7MCCGD.js} +2 -2
  179. package/dist/cli-bundle/chunks/{chunk-ONG5V5CI.js → chunk-QPGQNLPI.js} +1751 -70
  180. package/dist/cli-bundle/chunks/chunk-QPGQNLPI.js.map +1 -0
  181. package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js → chunk-QRZNCRNA.js} +9 -9
  182. package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js → chunk-QWBKN3QC.js} +5 -5
  183. package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js → chunk-R5XTTZSJ.js} +5 -5
  184. package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js → chunk-RC4UOUXA.js} +3 -3
  185. package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js → chunk-RGMWJLXF.js} +4 -4
  186. package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js → chunk-RTBX3C4C.js} +3 -3
  187. package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js → chunk-RXPQ5Q23.js} +7 -7
  188. package/dist/cli-bundle/chunks/{chunk-LPYWLWDS.js → chunk-SIPOACV5.js} +534 -447
  189. package/dist/cli-bundle/chunks/chunk-SIPOACV5.js.map +1 -0
  190. package/dist/cli-bundle/chunks/chunk-TGBTLGPX.js +851 -0
  191. package/dist/cli-bundle/chunks/chunk-TGBTLGPX.js.map +7 -0
  192. package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js → chunk-TLWJP5BF.js} +5 -5
  193. package/dist/cli-bundle/chunks/chunk-TLWJP5BF.js.map +7 -0
  194. package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js → chunk-TM5CIO3F.js} +3 -3
  195. package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js → chunk-TZAE66GQ.js} +8 -8
  196. package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js → chunk-VAHZIPWS.js} +4 -4
  197. package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js → chunk-VE6ZSTQW.js} +4 -4
  198. package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js → chunk-W5E2UUSH.js} +3 -3
  199. package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js → chunk-WACRQ26A.js} +2 -2
  200. package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js.map → chunk-WACRQ26A.js.map} +1 -1
  201. package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js → chunk-WL3SS45P.js} +3 -3
  202. package/dist/cli-bundle/chunks/{chunk-H5APFTHZ.js → chunk-WQXRZMFN.js} +204 -33
  203. package/dist/cli-bundle/chunks/chunk-WQXRZMFN.js.map +7 -0
  204. package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js → chunk-WU3KAN6A.js} +3 -3
  205. package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js → chunk-X2MGQMZO.js} +2 -2
  206. package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js → chunk-X5YCTFKT.js} +3 -3
  207. package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js → chunk-XC2HEEOV.js} +4 -4
  208. package/dist/cli-bundle/chunks/{chunk-7Z4LKRS4.js → chunk-XPUTSGJU.js} +38 -37
  209. package/dist/cli-bundle/chunks/chunk-XPUTSGJU.js.map +1 -0
  210. package/dist/cli-bundle/chunks/{chunk-YBLZ2VE7.js → chunk-XWBD6DSR.js} +320 -239
  211. package/dist/cli-bundle/chunks/chunk-XWBD6DSR.js.map +7 -0
  212. package/dist/cli-bundle/chunks/chunk-XWYQ2LT4.js +834 -0
  213. package/dist/cli-bundle/chunks/chunk-XWYQ2LT4.js.map +1 -0
  214. package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js → chunk-XXLXJL7V.js} +4 -4
  215. package/dist/cli-bundle/chunks/{chunk-2NCIPMQP.js → chunk-YFE7JHX3.js} +27 -6
  216. package/dist/cli-bundle/chunks/chunk-YFE7JHX3.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js → chunk-YIIIAKCE.js} +8 -8
  218. package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js → chunk-YJSURTBB.js} +2 -2
  219. package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js → chunk-YKFHF37B.js} +3 -3
  220. package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js → chunk-YQEZWI3R.js} +2 -2
  221. package/dist/cli-bundle/chunks/close-GPD7DTJV.js +12 -0
  222. package/dist/cli-bundle/chunks/{close-CWODTPKG.js → close-X3CF6FQP.js} +5 -5
  223. package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js → close-many-J7A5EHOQ.js} +14 -14
  224. package/dist/cli-bundle/chunks/close-many-NQLYGPYW.js +23 -0
  225. package/dist/cli-bundle/chunks/comments-2AOZQ5D2.js +13 -0
  226. package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js → comments-TMHMALA5.js} +7 -7
  227. package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js → copy-FWQA5OU4.js} +4 -4
  228. package/dist/cli-bundle/chunks/copy-N3LCQBMC.js +9 -0
  229. package/dist/cli-bundle/chunks/{create-LBVCYMEG.js → create-AQ5SIGZC.js} +9 -9
  230. package/dist/cli-bundle/chunks/{create-J5U6ND4K.js → create-KOGQ3JKD.js} +9 -9
  231. package/dist/cli-bundle/chunks/delete-6G3MBZ6S.js +10 -0
  232. package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js → delete-YYYFOSEA.js} +4 -4
  233. package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js → deps-MQ4ZIGZB.js} +16 -7
  234. package/dist/cli-bundle/chunks/deps-NIIKXLPB.js +28 -0
  235. package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js → docs-53NUGMIQ.js} +6 -6
  236. package/dist/cli-bundle/chunks/docs-OWRGDMNY.js +14 -0
  237. package/dist/cli-bundle/chunks/{files-EFIWKFTM.js → files-3PXGXYDB.js} +6 -6
  238. package/dist/cli-bundle/chunks/{files-6YFBJRBG.js → files-EGLKHD7O.js} +6 -6
  239. package/dist/cli-bundle/chunks/focus-KZLIA6WS.js +10 -0
  240. package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js → focus-SRPASFTN.js} +5 -5
  241. package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js → history-compact-G4DULDCX.js} +6 -6
  242. package/dist/cli-bundle/chunks/history-compact-HHIUOMZ7.js +16 -0
  243. package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js → history-redact-IUSJ6X3E.js} +4 -4
  244. package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js → history-redact-THHGRQXV.js} +4 -4
  245. package/dist/cli-bundle/chunks/history-repair-KG7SWXI6.js +16 -0
  246. package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js → history-repair-LUQWRS7X.js} +6 -6
  247. package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js → learnings-2MRNBFJF.js} +7 -7
  248. package/dist/cli-bundle/chunks/learnings-ZVHSALJY.js +13 -0
  249. package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js → notes-73JWKWUD.js} +7 -7
  250. package/dist/cli-bundle/chunks/notes-BAKUL5DJ.js +13 -0
  251. package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js → plan-AZPMCG37.js} +10 -10
  252. package/dist/cli-bundle/chunks/plan-LEAGLPGP.js +24 -0
  253. package/dist/cli-bundle/chunks/{profile-FAU7NZML.js → profile-AVCIIZID.js} +9 -9
  254. package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js → profile-LFYO3HHX.js} +9 -9
  255. package/dist/cli-bundle/chunks/{register-list-query-UL4UKBBN.js → register-list-query-MZUF2EEC.js} +50 -22
  256. package/dist/cli-bundle/chunks/register-list-query-MZUF2EEC.js.map +1 -0
  257. package/dist/cli-bundle/chunks/{register-list-query-DKA3EH5D.js → register-list-query-UKMF55FT.js} +49 -21
  258. package/dist/cli-bundle/chunks/register-list-query-UKMF55FT.js.map +7 -0
  259. package/dist/cli-bundle/chunks/{register-mutation-RBBJ52DK.js → register-mutation-2PBW2GEX.js} +35 -33
  260. package/dist/cli-bundle/chunks/register-mutation-2PBW2GEX.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js → register-mutation-T6RVNJC4.js} +34 -32
  262. package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js.map → register-mutation-T6RVNJC4.js.map} +2 -2
  263. package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js → register-operations-KHZYR6MG.js} +35 -35
  264. package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js → register-operations-WPQ2LWZJ.js} +35 -35
  265. package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js → register-setup-PGDNOXDQ.js} +15 -15
  266. package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js → register-setup-TDN7WAO6.js} +15 -15
  267. package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js → restore-E3PRGDN3.js} +6 -6
  268. package/dist/cli-bundle/chunks/restore-KIUYTAEJ.js +14 -0
  269. package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js → schema-5JNFQFUW.js} +6 -6
  270. package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js → schema-TMIW4XZC.js} +6 -6
  271. package/dist/cli-bundle/chunks/{update-XHSIAIXE.js → update-SQYZA3ZW.js} +12 -12
  272. package/dist/cli-bundle/chunks/update-XZJYS5X7.js +21 -0
  273. package/dist/cli-bundle/chunks/update-many-R24B3GBK.js +36 -0
  274. package/dist/cli-bundle/chunks/update-many-WQ3R3J6N.js +32 -0
  275. package/dist/cli-bundle/main.js +170 -856
  276. package/dist/cli-bundle/main.js.map +4 -4
  277. package/dist/cli-bundle/sdk-runtime.js +57 -54
  278. package/dist/cli-bundle/sdk-testing.js +6 -6
  279. package/dist/cli-bundle/sdk.js +266 -340
  280. package/dist/cli-bundle/sdk.js.map +4 -4
  281. package/dist/core/extensions/item-fields.js +2 -2
  282. package/dist/core/extensions/item-fields.js.map +1 -1
  283. package/dist/core/item/actionability.d.ts +12 -0
  284. package/dist/core/item/actionability.js +39 -4
  285. package/dist/core/item/actionability.js.map +1 -1
  286. package/dist/core/sentry/instrument.d.ts +11 -0
  287. package/dist/core/sentry/instrument.js +21 -2
  288. package/dist/core/sentry/instrument.js.map +1 -1
  289. package/dist/mcp/server.d.ts +16 -18
  290. package/dist/mcp/server.js +84 -31
  291. package/dist/mcp/server.js.map +1 -1
  292. package/dist/mcp/tool-definitions.js +17 -4
  293. package/dist/mcp/tool-definitions.js.map +1 -1
  294. package/dist/sdk/actionability.d.ts +10 -0
  295. package/dist/sdk/actionability.js +14 -0
  296. package/dist/sdk/actionability.js.map +1 -0
  297. package/dist/sdk/cli-bootstrap.d.ts +122 -0
  298. package/dist/sdk/cli-bootstrap.js +879 -0
  299. package/dist/sdk/cli-bootstrap.js.map +1 -0
  300. package/dist/sdk/cli-contracts/enum-contracts.d.ts +6 -2
  301. package/dist/sdk/cli-contracts/enum-contracts.js +19 -2
  302. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  303. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  304. package/dist/sdk/cli-contracts/flag-contracts.js +21 -2
  305. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  306. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +2 -0
  307. package/dist/sdk/cli-contracts/tool-option-contracts.js +16 -2
  308. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  309. package/dist/sdk/cli-contracts/tool-parameter-tables.js +80 -3
  310. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  311. package/dist/sdk/cli-contracts/tool-schema.d.ts +20 -0
  312. package/dist/sdk/cli-contracts/tool-schema.js +97 -9
  313. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  314. package/dist/sdk/cli-contracts.d.ts +2 -2
  315. package/dist/sdk/cli-contracts.js +4 -4
  316. package/dist/sdk/cli-contracts.js.map +1 -1
  317. package/dist/sdk/dependencies.d.ts +42 -53
  318. package/dist/sdk/dependencies.js +177 -125
  319. package/dist/sdk/dependencies.js.map +1 -1
  320. package/dist/sdk/eval.d.ts +66 -0
  321. package/dist/sdk/eval.js +186 -0
  322. package/dist/sdk/eval.js.map +1 -0
  323. package/dist/sdk/governance/validate.js +3 -3
  324. package/dist/sdk/governance/validate.js.map +1 -1
  325. package/dist/sdk/graph/analytics.d.ts +124 -0
  326. package/dist/sdk/graph/analytics.js +464 -0
  327. package/dist/sdk/graph/analytics.js.map +1 -0
  328. package/dist/sdk/graph/assembly.d.ts +97 -0
  329. package/dist/sdk/graph/assembly.js +146 -0
  330. package/dist/sdk/graph/assembly.js.map +1 -0
  331. package/dist/sdk/graph/cache.d.ts +66 -0
  332. package/dist/sdk/graph/cache.js +148 -0
  333. package/dist/sdk/graph/cache.js.map +1 -0
  334. package/dist/sdk/graph/governance.d.ts +108 -0
  335. package/dist/sdk/graph/governance.js +360 -0
  336. package/dist/sdk/graph/governance.js.map +1 -0
  337. package/dist/sdk/graph/index.d.ts +16 -0
  338. package/dist/sdk/graph/index.js +20 -0
  339. package/dist/sdk/graph/index.js.map +1 -0
  340. package/dist/sdk/graph/remediation.d.ts +52 -0
  341. package/dist/sdk/graph/remediation.js +148 -0
  342. package/dist/sdk/graph/remediation.js.map +1 -0
  343. package/dist/sdk/graph/run.d.ts +295 -0
  344. package/dist/sdk/graph/run.js +468 -0
  345. package/dist/sdk/graph/run.js.map +1 -0
  346. package/dist/sdk/graph/traversal.d.ts +77 -0
  347. package/dist/sdk/graph/traversal.js +262 -0
  348. package/dist/sdk/graph/traversal.js.map +1 -0
  349. package/dist/sdk/index.d.ts +19 -5
  350. package/dist/sdk/index.js +21 -7
  351. package/dist/sdk/index.js.map +1 -1
  352. package/dist/{cli/commands → sdk/query}/item-filter-options.d.ts +1 -1
  353. package/dist/{cli/commands → sdk/query}/item-filter-options.js +3 -3
  354. package/dist/sdk/query/item-filter-options.js.map +1 -0
  355. package/dist/sdk/query/list.d.ts +262 -0
  356. package/dist/sdk/query/list.js +1089 -0
  357. package/dist/sdk/query/list.js.map +1 -0
  358. package/dist/sdk/query/parsers.d.ts +9 -0
  359. package/dist/sdk/query/parsers.js +45 -0
  360. package/dist/sdk/query/parsers.js.map +1 -0
  361. package/dist/{cli/commands → sdk/query}/search-pagination.js +4 -4
  362. package/dist/sdk/query/search-pagination.js.map +1 -0
  363. package/dist/{cli/commands → sdk/query}/search-rendering.js +3 -3
  364. package/dist/sdk/query/search-rendering.js.map +1 -0
  365. package/dist/sdk/query/search.d.ts +469 -0
  366. package/dist/sdk/query/search.js +2247 -0
  367. package/dist/sdk/query/search.js.map +1 -0
  368. package/dist/sdk/relationship-context.d.ts +42 -0
  369. package/dist/sdk/relationship-context.js +99 -20
  370. package/dist/sdk/relationship-context.js.map +1 -1
  371. package/dist/sdk/relationships.d.ts +13 -0
  372. package/dist/sdk/relationships.js +30 -2
  373. package/dist/sdk/relationships.js.map +1 -1
  374. package/dist/sdk/runtime-input.d.ts +41 -0
  375. package/dist/sdk/runtime-input.js +422 -2
  376. package/dist/sdk/runtime-input.js.map +1 -1
  377. package/dist/sdk/runtime.d.ts +19 -30
  378. package/dist/sdk/runtime.js +30 -376
  379. package/dist/sdk/runtime.js.map +1 -1
  380. package/dist/sdk/search-refresh-worker.d.ts +2 -0
  381. package/dist/sdk/search-refresh-worker.js +19 -0
  382. package/dist/sdk/search-refresh-worker.js.map +1 -0
  383. package/dist/sdk/stats.d.ts +66 -0
  384. package/dist/sdk/stats.js +151 -0
  385. package/dist/sdk/stats.js.map +1 -0
  386. package/dist/sdk/telemetry-flush.d.ts +2 -0
  387. package/dist/sdk/telemetry-flush.js +14 -0
  388. package/dist/sdk/telemetry-flush.js.map +1 -0
  389. package/dist/sdk/telemetry.d.ts +14 -0
  390. package/dist/sdk/telemetry.js +398 -0
  391. package/dist/sdk/telemetry.js.map +1 -0
  392. package/dist/sdk/test/batch.d.ts +94 -0
  393. package/dist/sdk/test/batch.js +492 -0
  394. package/dist/sdk/test/batch.js.map +1 -0
  395. package/dist/sdk/test/entry.d.ts +6 -0
  396. package/dist/sdk/test/entry.js +74 -0
  397. package/dist/sdk/test/entry.js.map +1 -0
  398. package/dist/sdk/test/execution.d.ts +282 -0
  399. package/dist/sdk/test/execution.js +1817 -0
  400. package/dist/sdk/test/execution.js.map +1 -0
  401. package/dist/sdk/test/linked-command-detection.js +12 -3
  402. package/dist/sdk/test/linked-command-detection.js.map +1 -1
  403. package/dist/sdk/test/parsers.d.ts +48 -0
  404. package/dist/sdk/test/parsers.js +522 -0
  405. package/dist/sdk/test/parsers.js.map +1 -0
  406. package/dist/sdk/test/runs.d.ts +92 -0
  407. package/dist/sdk/test/runs.js +195 -0
  408. package/dist/sdk/test/runs.js.map +1 -0
  409. package/docs/AGENT_GUIDE.md +1 -0
  410. package/docs/COMMANDS.md +19 -1
  411. package/docs/RELATIONSHIP_GRAPH.md +99 -3
  412. package/docs/SDK.md +139 -3
  413. package/docs/SDK_PRIMITIVE_INVENTORY.md +5 -3
  414. package/docs/examples/sdk-custom-tool/README.md +27 -0
  415. package/docs/examples/sdk-custom-tool/package.json +13 -0
  416. package/docs/examples/sdk-custom-tool/src/cli.ts +36 -0
  417. package/docs/examples/sdk-custom-tool/src/entry.ts +15 -0
  418. package/docs/examples/sdk-custom-tool/src/index.ts +223 -0
  419. package/marketplace.json +2 -2
  420. package/package.json +4 -4
  421. package/packages/pm-beads/package.json +1 -1
  422. package/packages/pm-calendar/package.json +1 -1
  423. package/packages/pm-command-kit/package.json +1 -1
  424. package/packages/pm-governance-audit/extensions/governance-audit/comments-audit.ts +77 -57
  425. package/packages/pm-governance-audit/extensions/governance-audit/dedupe-audit.ts +202 -194
  426. package/packages/pm-governance-audit/extensions/governance-audit/dedupe-merge.ts +227 -153
  427. package/packages/pm-governance-audit/extensions/governance-audit/normalize.ts +169 -125
  428. package/packages/pm-governance-audit/extensions/governance-audit/runtime-utils.ts +130 -81
  429. package/packages/pm-governance-audit/extensions/governance-audit/sdk.ts +53 -4
  430. package/packages/pm-governance-audit/package.json +1 -1
  431. package/packages/pm-guide-shell/package.json +1 -1
  432. package/packages/pm-kanban/package.json +1 -1
  433. package/packages/pm-lifecycle-hooks/package.json +1 -1
  434. package/packages/pm-linked-test-adapters/package.json +1 -1
  435. package/packages/pm-search-advanced/package.json +1 -1
  436. package/packages/pm-templates/package.json +1 -1
  437. package/packages/pm-todos/package.json +1 -1
  438. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  439. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  440. package/dist/cli/commands/item-filter-options.js.map +0 -1
  441. package/dist/cli/commands/search-pagination.js.map +0 -1
  442. package/dist/cli/commands/search-rendering.js.map +0 -1
  443. package/dist/cli-bundle/chunks/append-UZVHUO74.js +0 -11
  444. package/dist/cli-bundle/chunks/chunk-2NCIPMQP.js.map +0 -1
  445. package/dist/cli-bundle/chunks/chunk-3S5QVM5H.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-4XQ3BDV4.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-5JLUII3O.js.map +0 -1
  448. package/dist/cli-bundle/chunks/chunk-5ZSLZLDN.js.map +0 -1
  449. package/dist/cli-bundle/chunks/chunk-7Z4LKRS4.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-BKVG6XOA.js.map +0 -7
  451. package/dist/cli-bundle/chunks/chunk-E2OJMKML.js.map +0 -7
  452. package/dist/cli-bundle/chunks/chunk-EH2OPHBI.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-H5APFTHZ.js.map +0 -7
  454. package/dist/cli-bundle/chunks/chunk-HYB5AZ63.js.map +0 -7
  455. package/dist/cli-bundle/chunks/chunk-ILX33QXL.js.map +0 -7
  456. package/dist/cli-bundle/chunks/chunk-JFTKLTEF.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-LPYWLWDS.js.map +0 -1
  458. package/dist/cli-bundle/chunks/chunk-NLDFBC6J.js.map +0 -7
  459. package/dist/cli-bundle/chunks/chunk-ONG5V5CI.js.map +0 -1
  460. package/dist/cli-bundle/chunks/chunk-UFXU44HV.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-UMOPHQSU.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-UXONS674.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-XXXF6PAQ.js.map +0 -7
  464. package/dist/cli-bundle/chunks/chunk-YBLZ2VE7.js.map +0 -7
  465. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js +0 -58
  466. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js.map +0 -1
  467. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js +0 -68
  468. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js.map +0 -7
  469. package/dist/cli-bundle/chunks/close-W6LI2PKM.js +0 -12
  470. package/dist/cli-bundle/chunks/close-many-DLDDVSH5.js +0 -23
  471. package/dist/cli-bundle/chunks/comments-E3TNTK24.js +0 -13
  472. package/dist/cli-bundle/chunks/copy-Q5ZJPUKR.js +0 -9
  473. package/dist/cli-bundle/chunks/delete-WNHB3LYW.js +0 -10
  474. package/dist/cli-bundle/chunks/deps-OA26IS25.js +0 -19
  475. package/dist/cli-bundle/chunks/docs-HA2AIDBB.js +0 -14
  476. package/dist/cli-bundle/chunks/focus-POIW5LTJ.js +0 -10
  477. package/dist/cli-bundle/chunks/history-compact-FWG2C7FZ.js +0 -16
  478. package/dist/cli-bundle/chunks/history-repair-6GEAM7HE.js +0 -16
  479. package/dist/cli-bundle/chunks/learnings-RSNLSWDC.js +0 -13
  480. package/dist/cli-bundle/chunks/notes-2WDH6DXU.js +0 -13
  481. package/dist/cli-bundle/chunks/plan-DOVI2VMW.js +0 -24
  482. package/dist/cli-bundle/chunks/register-list-query-DKA3EH5D.js.map +0 -7
  483. package/dist/cli-bundle/chunks/register-list-query-UL4UKBBN.js.map +0 -1
  484. package/dist/cli-bundle/chunks/register-mutation-RBBJ52DK.js.map +0 -1
  485. package/dist/cli-bundle/chunks/restore-YPMVUUEX.js +0 -14
  486. package/dist/cli-bundle/chunks/update-WWBYOPXO.js +0 -21
  487. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js +0 -32
  488. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js +0 -36
  489. /package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js.map → append-5YF3TO7I.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{append-UZVHUO74.js.map → append-JHO5K6RP.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js.map → chunk-2BX74BAS.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js.map → chunk-2CXL335K.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js.map → chunk-2FUOXSRN.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js.map → chunk-2IPNL3DR.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js.map → chunk-2XOSFSTH.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js.map → chunk-37DRDP2B.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js.map → chunk-47HXN6RX.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js.map → chunk-5HGZKQUL.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js.map → chunk-5UKQLQM2.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js.map → chunk-633PKXLT.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js.map → chunk-646MQXFW.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js.map → chunk-66MKH7SZ.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js.map → chunk-67RO3H4N.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js.map → chunk-6DYOZS6C.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js.map → chunk-6O44IN44.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js.map → chunk-74FKFFXO.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js.map → chunk-7H5NNCJ5.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js.map → chunk-AFGKSHAM.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js.map → chunk-ARGDWQ4J.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js.map → chunk-B57RJHBZ.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js.map → chunk-BAP7G3N2.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js.map → chunk-BIRYX32V.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js.map → chunk-BVLOMU6O.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js.map → chunk-CKX4WOPC.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js.map → chunk-D52ZN3BF.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js.map → chunk-D53RTYVI.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{chunk-ODALILG3.js.map → chunk-D5XHO4Q7.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js.map → chunk-DDFGYUCQ.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js.map → chunk-DG2EQRIH.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js.map → chunk-EHJFUOXL.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js.map → chunk-EWIT5WIC.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js.map → chunk-EY7ZE3TG.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js.map → chunk-FHOBCGQO.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js.map → chunk-FL4D53ND.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js.map → chunk-FVNWHUME.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js.map → chunk-FXFCFL73.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js.map → chunk-FY4RLHSC.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js.map → chunk-G6MYGULG.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js.map → chunk-GLZKZON6.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js.map → chunk-H5IOT54C.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js.map → chunk-HO4DLBNK.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js.map → chunk-HPAYDSR2.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js.map → chunk-HSYV4ZYT.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js.map → chunk-HYTOJW2Q.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js.map → chunk-I7DIDUSP.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js.map → chunk-IE5KRAKN.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js.map → chunk-IL5SPRMH.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js.map → chunk-ILVOOAT4.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js.map → chunk-KH6QAHME.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js.map → chunk-L337QKWJ.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-LSG2U345.js.map → chunk-L6FVNR7X.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js.map → chunk-LSOWTLEM.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-4223PVZT.js.map → chunk-M7MVOKVV.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js.map → chunk-N33FD2UI.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js.map → chunk-NNANAWFH.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js.map → chunk-NTRQLE2R.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js.map → chunk-NVZ6NVHJ.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js.map → chunk-OWP6QFBV.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js.map → chunk-P22HGFFI.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js.map → chunk-PT7MCCGD.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js.map → chunk-QRZNCRNA.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js.map → chunk-QWBKN3QC.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js.map → chunk-R5XTTZSJ.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js.map → chunk-RC4UOUXA.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js.map → chunk-RGMWJLXF.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js.map → chunk-RTBX3C4C.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js.map → chunk-RXPQ5Q23.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js.map → chunk-TM5CIO3F.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js.map → chunk-TZAE66GQ.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js.map → chunk-VAHZIPWS.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js.map → chunk-VE6ZSTQW.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js.map → chunk-W5E2UUSH.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js.map → chunk-WL3SS45P.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js.map → chunk-WU3KAN6A.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js.map → chunk-X2MGQMZO.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js.map → chunk-X5YCTFKT.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js.map → chunk-XC2HEEOV.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js.map → chunk-XXLXJL7V.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js.map → chunk-YIIIAKCE.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js.map → chunk-YJSURTBB.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js.map → chunk-YKFHF37B.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js.map → chunk-YQEZWI3R.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{close-W6LI2PKM.js.map → close-GPD7DTJV.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{close-CWODTPKG.js.map → close-X3CF6FQP.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js.map → close-many-J7A5EHOQ.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{close-many-DLDDVSH5.js.map → close-many-NQLYGPYW.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{comments-E3TNTK24.js.map → comments-2AOZQ5D2.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js.map → comments-TMHMALA5.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js.map → copy-FWQA5OU4.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{copy-Q5ZJPUKR.js.map → copy-N3LCQBMC.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{create-LBVCYMEG.js.map → create-AQ5SIGZC.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{create-J5U6ND4K.js.map → create-KOGQ3JKD.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{delete-WNHB3LYW.js.map → delete-6G3MBZ6S.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js.map → delete-YYYFOSEA.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js.map → deps-MQ4ZIGZB.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{deps-OA26IS25.js.map → deps-NIIKXLPB.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js.map → docs-53NUGMIQ.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{docs-HA2AIDBB.js.map → docs-OWRGDMNY.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{files-EFIWKFTM.js.map → files-3PXGXYDB.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{files-6YFBJRBG.js.map → files-EGLKHD7O.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{focus-POIW5LTJ.js.map → focus-KZLIA6WS.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js.map → focus-SRPASFTN.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js.map → history-compact-G4DULDCX.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{history-compact-FWG2C7FZ.js.map → history-compact-HHIUOMZ7.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js.map → history-redact-IUSJ6X3E.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js.map → history-redact-THHGRQXV.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{history-repair-6GEAM7HE.js.map → history-repair-KG7SWXI6.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js.map → history-repair-LUQWRS7X.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js.map → learnings-2MRNBFJF.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{learnings-RSNLSWDC.js.map → learnings-ZVHSALJY.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js.map → notes-73JWKWUD.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{notes-2WDH6DXU.js.map → notes-BAKUL5DJ.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js.map → plan-AZPMCG37.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{plan-DOVI2VMW.js.map → plan-LEAGLPGP.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{profile-FAU7NZML.js.map → profile-AVCIIZID.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js.map → profile-LFYO3HHX.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js.map → register-operations-KHZYR6MG.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js.map → register-operations-WPQ2LWZJ.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js.map → register-setup-PGDNOXDQ.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js.map → register-setup-TDN7WAO6.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js.map → restore-E3PRGDN3.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{restore-YPMVUUEX.js.map → restore-KIUYTAEJ.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js.map → schema-5JNFQFUW.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js.map → schema-TMIW4XZC.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{update-XHSIAIXE.js.map → update-SQYZA3ZW.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{update-WWBYOPXO.js.map → update-XZJYS5X7.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{update-many-TA7NGQBO.js.map → update-many-R24B3GBK.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{update-many-OUGIU5SF.js.map → update-many-WQ3R3J6N.js.map} +0 -0
  619. /package/dist/{cli/commands → sdk/query}/search-pagination.d.ts +0 -0
  620. /package/dist/{cli/commands → sdk/query}/search-rendering.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../sdk/relationships.ts","../../../../../../../../sdk/graph/assembly.ts"],"sourcesContent":["/**\n * @module sdk/relationships\n *\n * Provides the dependency-free relationship ontology and bounded graph-query\n * kernel shared by the SDK, CLI, MCP adapters, extensions, and non-PM apps.\n */\nimport type { Dependency, ItemMetadata } from \"../types/index.js\";\n\n/** Direction exposed by a relationship kind. */\nexport type RelationshipDirection = \"directed\" | \"undirected\";\n/** Cardinality constraint applied independently to outgoing and incoming edges. */\nexport type RelationshipCardinality = \"one\" | \"many\";\n/** Lifecycle policy for a relationship kind. */\nexport type RelationshipLifecycle = \"persistent\" | \"supersedable\" | \"ephemeral\";\n/** Direction in which an ordering edge contributes to execution precedence. */\nexport type RelationshipPrecedence =\n | \"source_before_target\"\n | \"target_before_source\";\n/** Endpoint that represents the structural parent for hierarchy kinds. */\nexport type RelationshipHierarchyDirection = \"source_parent\" | \"target_parent\";\n\n/** Versioned semantic definition for a built-in or application-defined edge kind. */\nexport interface RelationshipKindDefinition {\n /** Canonical, case-insensitive kind identifier. */\n kind: string;\n /** Whether traversing source to target has distinct meaning from the reverse. */\n direction: RelationshipDirection;\n /** Optional canonical kind used when traversing a directed edge in reverse. */\n inverse?: string;\n /** Whether the kind participates in execution-order cycle checks. */\n ordering: boolean;\n /** Execution direction for ordering kinds; defaults to source before target. */\n precedence?: RelationshipPrecedence;\n /** Whether the kind contributes to structural ancestry. */\n hierarchy: boolean;\n /** Endpoint that represents the parent; defaults to source for custom kinds. */\n hierarchyDirection?: RelationshipHierarchyDirection;\n /** Maximum logical outgoing edges of this kind from one node. */\n outgoing: RelationshipCardinality;\n /** Maximum logical incoming edges of this kind to one node. */\n incoming: RelationshipCardinality;\n /** Edge replacement and retention behavior. */\n lifecycle: RelationshipLifecycle;\n /** JSON Schema for optional application-owned payloads. */\n payloadSchema?: Readonly<Record<string, unknown>>;\n /** Legacy spellings normalized to this definition. */\n aliases?: readonly string[];\n /** Compatibility version of this semantic contract. */\n compatibilityVersion: number;\n /** Whether source and target may be the same node. */\n allowSelf: boolean;\n}\n\n/** One normalized relationship edge indexed by the graph kernel. */\nexport interface RelationshipEdge {\n /** Source node identifier. */\n source: string;\n /** Target node identifier. */\n target: string;\n /** Canonical relationship kind. */\n kind: string;\n /** Optional creation timestamp retained from storage. */\n createdAt?: string;\n /** Optional author retained from storage. */\n author?: string;\n /** Optional application-owned edge payload. */\n payload?: Readonly<Record<string, unknown>>;\n}\n\n/** Direction used by adjacency, closure, and path traversal. */\nexport type RelationshipTraversalDirection = \"outgoing\" | \"incoming\" | \"both\";\n\n/** Shared bounded-query controls. */\nexport interface RelationshipQueryOptions {\n /** Edge kinds to traverse after alias normalization. */\n kinds?: readonly string[];\n /** Traversal direction relative to each visited node. */\n direction?: RelationshipTraversalDirection;\n /** Maximum number of returned nodes, excluding the starting node. */\n limit?: number;\n /** Maximum traversal depth. */\n maxDepth?: number;\n /** Abort signal checked throughout traversal. */\n signal?: AbortSignal;\n}\n\n/** Cost and truncation metadata returned by every graph query. */\nexport interface RelationshipQueryMeta {\n /** Number of nodes removed from the traversal frontier. */\n visitedNodes: number;\n /** Number of candidate edges inspected. */\n inspectedEdges: number;\n /** Whether a configured bound stopped traversal. */\n truncated: boolean;\n /** Deterministic continuation cursor for the final returned node. */\n nextCursor?: string;\n}\n\n/** Generic bounded graph query result. */\nexport interface RelationshipQueryResult<T> {\n /** Deterministically ordered query value. */\n value: T;\n /** Explicit query work and truncation metadata. */\n meta: RelationshipQueryMeta;\n}\n\n/** One neighbor row pairing an adjacent node with the edge that connects it. */\nexport interface RelationshipNeighborEdge {\n /** Adjacent node identifier. */\n id: string;\n /** Edge connecting the queried node to this neighbor. */\n edge: RelationshipEdge;\n}\n\n/** Induced subgraph returned by bounded traversal. */\nexport interface RelationshipSubgraph {\n /** Deterministically ordered node identifiers. */\n nodes: string[];\n /** Deterministically ordered edges whose endpoints are both present. */\n edges: RelationshipEdge[];\n}\n\nconst BUILTIN_RELATIONSHIP_KINDS: readonly RelationshipKindDefinition[] = [\n {\n kind: \"blocked_by\",\n direction: \"directed\",\n inverse: \"blocks\",\n ordering: true,\n precedence: \"target_before_source\",\n hierarchy: false,\n outgoing: \"many\",\n incoming: \"many\",\n lifecycle: \"persistent\",\n aliases: [\"depends_on\"],\n compatibilityVersion: 1,\n allowSelf: false,\n },\n {\n kind: \"blocks\",\n direction: \"directed\",\n inverse: \"blocked_by\",\n ordering: true,\n precedence: \"source_before_target\",\n hierarchy: false,\n outgoing: \"many\",\n incoming: \"many\",\n lifecycle: \"persistent\",\n compatibilityVersion: 1,\n allowSelf: false,\n },\n {\n kind: \"parent\",\n direction: \"directed\",\n inverse: \"child\",\n ordering: false,\n hierarchy: true,\n hierarchyDirection: \"target_parent\",\n outgoing: \"one\",\n incoming: \"many\",\n lifecycle: \"supersedable\",\n aliases: [\"child_of\", \"epic\"],\n compatibilityVersion: 1,\n allowSelf: false,\n },\n {\n kind: \"child\",\n direction: \"directed\",\n inverse: \"parent\",\n ordering: false,\n hierarchy: true,\n hierarchyDirection: \"source_parent\",\n outgoing: \"many\",\n incoming: \"one\",\n lifecycle: \"supersedable\",\n aliases: [\"parent_child\", \"task\"],\n compatibilityVersion: 1,\n allowSelf: false,\n },\n {\n kind: \"related\",\n direction: \"undirected\",\n ordering: false,\n hierarchy: false,\n outgoing: \"many\",\n incoming: \"many\",\n lifecycle: \"persistent\",\n aliases: [\"related_to\"],\n compatibilityVersion: 1,\n allowSelf: false,\n },\n {\n kind: \"discovered_from\",\n direction: \"directed\",\n ordering: false,\n hierarchy: false,\n outgoing: \"many\",\n incoming: \"many\",\n lifecycle: \"persistent\",\n compatibilityVersion: 1,\n allowSelf: false,\n },\n {\n kind: \"incident_from\",\n direction: \"directed\",\n ordering: false,\n hierarchy: false,\n outgoing: \"many\",\n incoming: \"many\",\n lifecycle: \"persistent\",\n compatibilityVersion: 1,\n allowSelf: false,\n },\n {\n kind: \"supersedes\",\n direction: \"directed\",\n ordering: false,\n hierarchy: false,\n outgoing: \"many\",\n incoming: \"many\",\n lifecycle: \"supersedable\",\n compatibilityVersion: 1,\n allowSelf: false,\n },\n] as const;\n\nfunction normalizeKind(kind: string): string {\n return kind.trim().toLowerCase().replaceAll(\"-\", \"_\");\n}\n\nfunction normalizeInverseKind(inverse: string | undefined): string | undefined {\n if (inverse === undefined) return undefined;\n const normalized = normalizeKind(inverse);\n if (!/^[a-z][a-z0-9_]*$/.test(normalized))\n throw new TypeError(`Invalid inverse relationship kind: ${inverse}`);\n return normalized;\n}\n\nfunction freezeValue(value: unknown, visited = new Set<object>()): unknown {\n if (value === null || typeof value !== \"object\") return value;\n if (visited.has(value)) return value;\n visited.add(value);\n if (Array.isArray(value)) {\n for (const entry of value) freezeValue(entry, visited);\n return Object.freeze(value);\n }\n for (const entry of Object.values(value)) freezeValue(entry, visited);\n return Object.freeze(value);\n}\n\nfunction assertRelationshipPrecedence(\n definition: RelationshipKindDefinition,\n kind: string,\n): void {\n if (\n definition.precedence !== undefined &&\n definition.precedence !== \"source_before_target\" &&\n definition.precedence !== \"target_before_source\"\n )\n throw new TypeError(`Invalid relationship precedence for ${kind}`);\n if (!definition.ordering && definition.precedence !== undefined)\n throw new TypeError(\n `Non-ordering relationship kind cannot declare precedence: ${kind}`,\n );\n}\n\nfunction assertRelationshipHierarchyDirection(\n definition: RelationshipKindDefinition,\n kind: string,\n): void {\n if (\n definition.hierarchyDirection !== undefined &&\n definition.hierarchyDirection !== \"source_parent\" &&\n definition.hierarchyDirection !== \"target_parent\"\n )\n throw new TypeError(`Invalid relationship hierarchy direction for ${kind}`);\n if (!definition.hierarchy && definition.hierarchyDirection !== undefined)\n throw new TypeError(\n `Non-hierarchy relationship kind cannot declare hierarchy direction: ${kind}`,\n );\n}\n\n/** Mutable registry with immutable snapshots and collision-safe extension registration. */\nexport class RelationshipKindRegistry {\n readonly #definitions = new Map<string, RelationshipKindDefinition>();\n readonly #aliases = new Map<string, string>();\n\n /** Create a registry initialized with the stable built-in ontology by default. */\n public constructor(\n definitions: readonly RelationshipKindDefinition[] = BUILTIN_RELATIONSHIP_KINDS,\n ) {\n for (const definition of definitions) this.register(definition);\n }\n\n /** Register one definition after validating its identifier, version, and aliases. */\n public register(definition: RelationshipKindDefinition): this {\n const kind = normalizeKind(definition.kind);\n if (!/^[a-z][a-z0-9_]*$/.test(kind))\n throw new TypeError(`Invalid relationship kind: ${definition.kind}`);\n if (\n !Number.isInteger(definition.compatibilityVersion) ||\n definition.compatibilityVersion < 1\n )\n throw new TypeError(`Invalid compatibility version for ${kind}`);\n assertRelationshipPrecedence(definition, kind);\n assertRelationshipHierarchyDirection(definition, kind);\n if (this.#definitions.has(kind) || this.#aliases.has(kind))\n throw new TypeError(`Relationship kind already registered: ${kind}`);\n const inverse = normalizeInverseKind(definition.inverse);\n const aliases = [\n ...new Set((definition.aliases ?? []).map(normalizeKind)),\n ].sort();\n for (const alias of aliases) {\n if (!/^[a-z][a-z0-9_]*$/.test(alias))\n throw new TypeError(`Invalid relationship alias: ${alias}`);\n if (\n alias === kind ||\n this.#definitions.has(alias) ||\n this.#aliases.has(alias)\n )\n throw new TypeError(`Relationship alias already registered: ${alias}`);\n }\n const normalized = Object.freeze({\n ...definition,\n kind,\n inverse,\n aliases: Object.freeze(aliases),\n payloadSchema: definition.payloadSchema\n ? (freezeValue(structuredClone(definition.payloadSchema)) as Readonly<\n Record<string, unknown>\n >)\n : undefined,\n });\n this.#definitions.set(kind, normalized);\n for (const alias of aliases) this.#aliases.set(alias, kind);\n return this;\n }\n\n /** Resolve a canonical kind or compatibility alias. */\n public resolve(kind: unknown): RelationshipKindDefinition | undefined {\n if (typeof kind !== \"string\") return undefined;\n const normalized = normalizeKind(kind);\n return this.#definitions.get(this.#aliases.get(normalized) ?? normalized);\n }\n\n /** Resolve a kind or throw a precise error suitable for command adapters. */\n public require(kind: string): RelationshipKindDefinition {\n const definition = this.resolve(kind);\n if (!definition) throw new TypeError(`Unknown relationship kind: ${kind}`);\n return definition;\n }\n\n /** Return a deterministic immutable registry snapshot. */\n public list(): readonly RelationshipKindDefinition[] {\n return Object.freeze(\n [...this.#definitions.values()].sort((left, right) =>\n left.kind.localeCompare(right.kind),\n ),\n );\n }\n}\n\n/** Create a registry containing the built-in relationship ontology. */\nexport function createRelationshipKindRegistry(): RelationshipKindRegistry {\n return new RelationshipKindRegistry();\n}\n\nconst defaultRegistry = createRelationshipKindRegistry();\n\n/** Report whether a kind participates in execution-order cycle detection. */\nexport function isOrderingRelationshipKind(\n kind: string,\n registry: RelationshipKindRegistry = defaultRegistry,\n): boolean {\n return registry.resolve(kind)?.ordering === true;\n}\n\nfunction compareEdges(left: RelationshipEdge, right: RelationshipEdge): number {\n return (\n left.source.localeCompare(right.source) ||\n left.target.localeCompare(right.target) ||\n left.kind.localeCompare(right.kind)\n );\n}\n\nfunction normalizeRelationshipEdge(\n candidate: RelationshipEdge,\n nodes: ReadonlySet<string>,\n registry: RelationshipKindRegistry,\n): { edge: RelationshipEdge; identity: string } {\n const source =\n typeof candidate.source === \"string\" ? candidate.source.trim() : \"\";\n const target =\n typeof candidate.target === \"string\" ? candidate.target.trim() : \"\";\n const definition = registry.require(candidate.kind);\n if (!nodes.has(source) || !nodes.has(target))\n throw new TypeError(\n `Relationship endpoint not found: ${source} -> ${target}`,\n );\n if (source === target && !definition.allowSelf)\n throw new TypeError(\n `Self relationship is not allowed for ${definition.kind}`,\n );\n const edge = Object.freeze({\n ...candidate,\n source,\n target,\n kind: definition.kind,\n });\n const endpoints =\n definition.direction === \"undirected\"\n ? [source, target].sort().join(\"\\u0000\")\n : `${source}\\u0000${target}`;\n return { edge, identity: `${definition.kind}\\u0000${endpoints}` };\n}\n\nfunction appendIndexedEdge(\n index: Map<string, RelationshipEdge[]>,\n node: string,\n edge: RelationshipEdge,\n): void {\n const indexed = index.get(node);\n if (indexed) indexed.push(edge);\n else index.set(node, [edge]);\n}\n\nfunction normalizeNodeId(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction resolveExistingNodeId(\n value: unknown,\n ids: ReadonlySet<string>,\n): string | undefined {\n const id = normalizeNodeId(value);\n return id && ids.has(id) ? id : undefined;\n}\n\nfunction reconstructPath(\n source: string,\n target: string,\n parents: ReadonlyMap<string, string>,\n): string[] {\n const path = [target];\n let cursor = target;\n while (cursor !== source) {\n cursor = parents.get(cursor)!;\n path.push(cursor);\n }\n return path.reverse();\n}\n\n/** Build an immutable, deterministic in-memory relationship index. */\nexport class RelationshipGraph {\n readonly #registry: RelationshipKindRegistry;\n readonly #nodes: Set<string>;\n readonly #nodeSnapshot: readonly string[];\n readonly #edges: readonly RelationshipEdge[];\n readonly #outgoing = new Map<string, RelationshipEdge[]>();\n readonly #incoming = new Map<string, RelationshipEdge[]>();\n\n /** Validate and index nodes and edges without reading tracker storage. */\n public constructor(\n nodes: Iterable<string>,\n edges: Iterable<RelationshipEdge>,\n registry: RelationshipKindRegistry = defaultRegistry,\n ) {\n this.#registry = registry;\n this.#nodes = new Set(\n [...nodes]\n .filter((id): id is string => typeof id === \"string\")\n .map((id) => id.trim())\n .filter(Boolean),\n );\n this.#nodeSnapshot = Object.freeze([...this.#nodes].sort());\n const deduped = new Map<string, RelationshipEdge>();\n for (const candidate of edges) {\n const { edge, identity } = normalizeRelationshipEdge(\n candidate,\n this.#nodes,\n registry,\n );\n deduped.set(identity, edge);\n }\n this.#edges = Object.freeze([...deduped.values()].sort(compareEdges));\n for (const edge of this.#edges) {\n appendIndexedEdge(this.#outgoing, edge.source, edge);\n appendIndexedEdge(this.#incoming, edge.target, edge);\n if (registry.require(edge.kind).direction === \"undirected\") {\n appendIndexedEdge(this.#outgoing, edge.target, edge);\n appendIndexedEdge(this.#incoming, edge.source, edge);\n }\n }\n }\n\n /** Build the graph directly from item metadata, including hierarchy and legacy blocker fields. */\n public static fromItems(\n items: readonly Pick<\n ItemMetadata,\n \"id\" | \"parent\" | \"blocked_by\" | \"dependencies\"\n >[],\n registry: RelationshipKindRegistry = defaultRegistry,\n ): RelationshipGraph {\n const ids = new Set(\n items.map((item) => normalizeNodeId(item.id)).filter(Boolean),\n );\n const edges: RelationshipEdge[] = [];\n for (const item of items) {\n const source = normalizeNodeId(item.id);\n if (!source) continue;\n const parent = resolveExistingNodeId(item.parent, ids);\n if (parent) edges.push({ source, target: parent, kind: \"parent\" });\n const blockedBy = resolveExistingNodeId(item.blocked_by, ids);\n if (blockedBy)\n edges.push({\n source,\n target: blockedBy,\n kind: \"blocked_by\",\n });\n for (const dependency of item.dependencies ?? []) {\n const dependencyId = resolveExistingNodeId(dependency.id, ids);\n if (dependencyId && registry.resolve(dependency.kind))\n edges.push({\n source,\n target: dependencyId,\n kind: dependency.kind,\n createdAt: dependency.created_at,\n author: dependency.author,\n });\n }\n }\n return new RelationshipGraph(ids, edges, registry);\n }\n\n /** Return the deterministic immutable edge snapshot. */\n public edges(): readonly RelationshipEdge[] {\n return this.#edges;\n }\n\n /** Return the deterministic immutable edges incident to one node. */\n public incidentEdges(id: string): readonly RelationshipEdge[] {\n this.#assertNode(id);\n // Preserve empty fallbacks for legacy indexes and JSON-derived graph state.\n const outgoing = this.#outgoing.get(id) ?? [];\n const incoming = this.#incoming.get(id) ?? [];\n if (outgoing.length === 0) return Object.freeze([...incoming]);\n if (incoming.length === 0) return Object.freeze([...outgoing]);\n const edges: RelationshipEdge[] = [];\n let outgoingIndex = 0;\n let incomingIndex = 0;\n while (outgoingIndex < outgoing.length || incomingIndex < incoming.length) {\n const outgoingEdge = outgoing[outgoingIndex];\n const incomingEdge = incoming[incomingIndex];\n const edge =\n outgoingEdge === undefined\n ? incomingEdge!\n : incomingEdge === undefined ||\n compareEdges(outgoingEdge, incomingEdge) <= 0\n ? outgoingEdge\n : incomingEdge;\n if (edges.at(-1) !== edge) edges.push(edge);\n if (outgoingEdge === edge) outgoingIndex += 1;\n if (incomingEdge === edge) incomingIndex += 1;\n }\n return Object.freeze(edges);\n }\n\n /** Return the deterministic immutable node snapshot. */\n public nodes(): readonly string[] {\n return this.#nodeSnapshot;\n }\n\n /** Report whether an identifier names an indexed node. */\n public hasNode(id: string): boolean {\n return this.#nodes.has(id);\n }\n\n /** Return the registry that interprets this graph's relationship kinds. */\n public registry(): RelationshipKindRegistry {\n return this.#registry;\n }\n\n #assertNode(id: string): void {\n if (!this.#nodes.has(id))\n throw new TypeError(`Relationship node not found: ${id}`);\n }\n\n #matchesKinds(\n edge: RelationshipEdge,\n kinds: ReadonlySet<string> | undefined,\n ): boolean {\n if (!kinds) return true;\n const definition = this.#registry.require(edge.kind);\n return (\n kinds.has(edge.kind) ||\n (definition.inverse !== undefined && kinds.has(definition.inverse))\n );\n }\n\n #neighbors(\n id: string,\n direction: RelationshipTraversalDirection,\n kinds: ReadonlySet<string> | undefined,\n ): { id: string; edge: RelationshipEdge }[] {\n const candidates = [\n ...(direction === \"incoming\" ? [] : (this.#outgoing.get(id) ?? [])),\n ...(direction === \"outgoing\" ? [] : (this.#incoming.get(id) ?? [])),\n ];\n return [...new Set(candidates)]\n .filter((edge) => this.#matchesKinds(edge, kinds))\n .map((edge) => ({\n id: edge.source === id ? edge.target : edge.source,\n edge,\n }))\n .sort(\n (left, right) =>\n left.id.localeCompare(right.id) ||\n compareEdges(left.edge, right.edge),\n );\n }\n\n /** Return one-hop adjacent node identifiers. */\n public adjacency(\n id: string,\n options: RelationshipQueryOptions = {},\n ): RelationshipQueryResult<string[]> {\n this.#assertNode(id);\n options.signal?.throwIfAborted();\n const kinds = options.kinds\n ? new Set(options.kinds.map((kind) => this.#registry.require(kind).kind))\n : undefined;\n const rows = this.#neighbors(id, options.direction ?? \"outgoing\", kinds);\n const limit = options.limit ?? Number.POSITIVE_INFINITY;\n const uniqueNeighbors = [...new Set(rows.map((row) => row.id))];\n const value = uniqueNeighbors.slice(0, limit);\n return {\n value,\n meta: {\n visitedNodes: 1,\n inspectedEdges: rows.length,\n truncated: value.length < uniqueNeighbors.length,\n nextCursor: value.at(-1),\n },\n };\n }\n\n /** Return deterministic one-hop neighbor rows paired with each connecting edge. */\n public neighborEdges(\n id: string,\n options: RelationshipQueryOptions = {},\n ): RelationshipQueryResult<RelationshipNeighborEdge[]> {\n this.#assertNode(id);\n options.signal?.throwIfAborted();\n const kinds = options.kinds\n ? new Set(options.kinds.map((kind) => this.#registry.require(kind).kind))\n : undefined;\n const rows = this.#neighbors(id, options.direction ?? \"outgoing\", kinds);\n const limit = options.limit ?? Number.POSITIVE_INFINITY;\n const value = rows.slice(0, limit);\n return {\n value,\n meta: {\n visitedNodes: 1,\n inspectedEdges: rows.length,\n truncated: value.length < rows.length,\n nextCursor: value.at(-1)?.id,\n },\n };\n }\n\n /** Return bounded transitive closure in breadth-first discovery order. */\n public closure(\n id: string,\n options: RelationshipQueryOptions = {},\n ): RelationshipQueryResult<string[]> {\n this.#assertNode(id);\n const kinds = options.kinds\n ? new Set(options.kinds.map((kind) => this.#registry.require(kind).kind))\n : undefined;\n const direction = options.direction ?? \"outgoing\";\n const limit = options.limit ?? Number.POSITIVE_INFINITY;\n const maxDepth = options.maxDepth ?? Number.POSITIVE_INFINITY;\n const seen = new Set([id]);\n const value: string[] = [];\n const queue = [{ id, depth: 0 }];\n let visitedNodes = 0;\n let inspectedEdges = 0;\n let truncated = false;\n traversal: for (let index = 0; index < queue.length; index += 1) {\n options.signal?.throwIfAborted();\n const current = queue[index]!;\n visitedNodes += 1;\n const neighbors = this.#neighbors(current.id, direction, kinds);\n inspectedEdges += neighbors.length;\n if (current.depth >= maxDepth) {\n if (neighbors.some((neighbor) => !seen.has(neighbor.id)))\n truncated = true;\n continue;\n }\n for (const neighbor of neighbors) {\n if (seen.has(neighbor.id)) continue;\n if (value.length >= limit) {\n truncated = true;\n break traversal;\n }\n seen.add(neighbor.id);\n value.push(neighbor.id);\n queue.push({ id: neighbor.id, depth: current.depth + 1 });\n }\n }\n return {\n value,\n meta: {\n visitedNodes,\n inspectedEdges,\n truncated,\n nextCursor: value.at(-1),\n },\n };\n }\n\n /** Return a deterministic shortest path, or an empty array when disconnected. */\n public shortestPath(\n source: string,\n target: string,\n options: RelationshipQueryOptions = {},\n ): RelationshipQueryResult<string[]> {\n this.#assertNode(source);\n this.#assertNode(target);\n if (source === target)\n return {\n value: [source],\n meta: { visitedNodes: 1, inspectedEdges: 0, truncated: false },\n };\n const kinds = options.kinds\n ? new Set(options.kinds.map((kind) => this.#registry.require(kind).kind))\n : undefined;\n const direction = options.direction ?? \"outgoing\";\n const maxDepth = options.maxDepth ?? Number.POSITIVE_INFINITY;\n const queue = [{ id: source, depth: 0 }];\n const parents = new Map<string, string>();\n const seen = new Set([source]);\n let visitedNodes = 0;\n let inspectedEdges = 0;\n let truncated = false;\n for (let index = 0; index < queue.length; index += 1) {\n options.signal?.throwIfAborted();\n const current = queue[index]!;\n visitedNodes += 1;\n const neighbors = this.#neighbors(current.id, direction, kinds);\n inspectedEdges += neighbors.length;\n if (current.depth >= maxDepth) {\n if (neighbors.some((neighbor) => !seen.has(neighbor.id)))\n truncated = true;\n continue;\n }\n for (const neighbor of neighbors) {\n if (seen.has(neighbor.id)) continue;\n parents.set(neighbor.id, current.id);\n if (neighbor.id === target)\n return {\n value: reconstructPath(source, target, parents),\n meta: { visitedNodes, inspectedEdges, truncated: false },\n };\n seen.add(neighbor.id);\n queue.push({ id: neighbor.id, depth: current.depth + 1 });\n }\n }\n return {\n value: [],\n meta: { visitedNodes, inspectedEdges, truncated },\n };\n }\n\n /** Return the induced subgraph over a bounded closure including the root. */\n public subgraph(\n id: string,\n options: RelationshipQueryOptions = {},\n ): RelationshipQueryResult<RelationshipSubgraph> {\n const closure = this.closure(id, options);\n const nodes = [id, ...closure.value].sort();\n const included = new Set(nodes);\n const kinds = options.kinds\n ? new Set(options.kinds.map((kind) => this.#registry.require(kind).kind))\n : undefined;\n const edges = new Set<RelationshipEdge>();\n for (const node of nodes) {\n for (const edge of this.#outgoing.get(node) ?? []) {\n if (\n included.has(edge.source) &&\n included.has(edge.target) &&\n this.#matchesKinds(edge, kinds)\n )\n edges.add(edge);\n }\n }\n return {\n value: {\n nodes,\n edges: [...edges].sort(compareEdges),\n },\n meta: closure.meta,\n };\n }\n}\n\n/** Convert one stored dependency into the public relationship edge contract. */\nexport function dependencyToRelationship(\n source: string,\n dependency: Dependency,\n registry: RelationshipKindRegistry = defaultRegistry,\n): RelationshipEdge {\n return {\n source,\n target: dependency.id,\n kind: registry.require(dependency.kind).kind,\n createdAt: dependency.created_at,\n author: dependency.author,\n };\n}\n","/**\n * @module sdk/graph/assembly\n *\n * Builds the shared workspace relationship graph consumed by dependency\n * queries, bounded context packets, impact analysis, and governance audits.\n * Assembly normalizes hierarchy, legacy scalar blockers, and structured\n * dependency edges into one deterministic {@link RelationshipGraph}, classifies\n * dangling references without mutating their holders, and materializes missing\n * endpoints as placeholder nodes so bounded traversals can explain absent work\n * instead of silently dropping it.\n */\nimport type { Dependency, ItemStatus } from \"../../types/index.js\";\nimport {\n RelationshipGraph,\n type RelationshipKindRegistry,\n} from \"../relationships.js\";\n\n/** Minimal item shape inspected by dependency-reference governance. */\nexport interface DependencyReferenceHolder {\n /** Stable item identifier. */\n id: string;\n /** Lifecycle status used to separate actionable work from historical debt. */\n status: ItemStatus;\n /** Optional hierarchy parent reference. */\n parent?: string;\n /** Optional legacy scalar blocker reference. */\n blocked_by?: string;\n /** Structured dependency edges. */\n dependencies?: Dependency[];\n}\n\n/** Storage surface that contributed a normalized dependency reference. */\nexport type DependencyReferenceSource = \"parent\" | \"blocked_by\" | \"dependency\";\n\n/** One normalized dependency reference whose target is absent from the tracker. */\nexport interface DanglingDependencyReference {\n /** Item that owns the reference. */\n holder_id: string;\n /** Missing referenced item id or legacy sentinel. */\n target_id: string;\n /** Relationship field or dependency kind. */\n kind: string;\n /** Storage surface that owns the reference and determines its remediation. */\n source: DependencyReferenceSource;\n /** Current lifecycle status of the holder. */\n holder_status: ItemStatus;\n /** Whether the holder is terminal and therefore historical, non-actionable debt. */\n legacy_terminal: boolean;\n /** Whether the target is the pre-structured-dependency `no-active-blocker` sentinel. */\n no_active_blocker_sentinel: boolean;\n}\n\n/** Actionable and historical partitions returned by dependency-reference governance. */\nexport interface DanglingDependencyReferenceSummary {\n /** Missing references held by active items; these may affect scheduling and should gate validation. */\n active: DanglingDependencyReference[];\n /** Missing references held only by terminal items; retained as informational history debt. */\n legacy_terminal: DanglingDependencyReference[];\n /** Legacy sentinel rows across active and terminal holders, called out separately from typo-like ids. */\n no_active_blocker_sentinels: DanglingDependencyReference[];\n}\n\n/** Normalize a decoded reference target and reject empty legacy placeholders. */\nfunction normalizeDependencyReferenceTarget(\n target: unknown,\n): string | undefined {\n if (typeof target !== \"string\") return undefined;\n const normalized = target.trim();\n if (\n !normalized ||\n [\"none\", \"null\", \"n/a\", \"na\"].includes(normalized.toLowerCase())\n )\n return undefined;\n return normalized;\n}\n\n/** Normalize a graph target while removing the historical no-blocker marker. */\nfunction normalizeDependencyGraphTarget(target: unknown): string | undefined {\n const normalized = normalizeDependencyReferenceTarget(target);\n return normalized?.toLowerCase() === \"no-active-blocker\"\n ? undefined\n : normalized;\n}\n\n/**\n * Classify missing hierarchy and dependency targets without mutating their holders.\n *\n * Consumers provide the workspace's terminal-status predicate so custom lifecycle\n * schemas receive the same active-versus-historical behavior as the built-in\n * closed/canceled statuses.\n */\nexport function collectDanglingDependencyReferences(\n items: readonly DependencyReferenceHolder[],\n isTerminal: (status: ItemStatus) => boolean = (status) =>\n status === \"closed\" || status === \"canceled\",\n): DanglingDependencyReferenceSummary {\n const safeItems = items.filter(\n (item) => typeof item?.id === \"string\" && item.id.trim().length > 0,\n );\n const knownIds = new Set(\n safeItems.map((item) => item.id.trim().toLowerCase()),\n );\n const rows = new Map<string, DanglingDependencyReference>();\n const addReference = (\n item: DependencyReferenceHolder,\n target: unknown,\n kind: string,\n source: DependencyReferenceSource,\n ): void => {\n const normalized = normalizeDependencyReferenceTarget(target);\n if (!normalized || knownIds.has(normalized.toLowerCase())) {\n return;\n }\n const row: DanglingDependencyReference = {\n holder_id: item.id.trim(),\n target_id: normalized,\n kind,\n source,\n holder_status: item.status,\n legacy_terminal: isTerminal(item.status),\n no_active_blocker_sentinel:\n normalized.toLowerCase() === \"no-active-blocker\",\n };\n rows.set(\n `${row.holder_id}::${row.target_id}::${row.kind}::${row.source}`,\n row,\n );\n };\n for (const item of safeItems) {\n addReference(item, item.parent, \"parent\", \"parent\");\n addReference(item, item.blocked_by, \"blocked_by\", \"blocked_by\");\n for (const dependency of item.dependencies ?? []) {\n // Public SDK callers may supply legacy or JSON-decoded payloads that do\n // not yet satisfy the current structured dependency contract.\n if (typeof dependency !== \"object\" || dependency === null) {\n continue;\n }\n const legacyDependency = dependency as Partial<Dependency>;\n addReference(\n item,\n legacyDependency.id,\n typeof legacyDependency.kind === \"string\"\n ? legacyDependency.kind\n : \"related\",\n \"dependency\",\n );\n }\n }\n const sorted = [...rows.values()].sort(\n (left, right) =>\n left.holder_id.localeCompare(right.holder_id) ||\n left.target_id.localeCompare(right.target_id) ||\n left.kind.localeCompare(right.kind) ||\n left.source.localeCompare(right.source),\n );\n const legacyTerminal = sorted.filter((row) => row.legacy_terminal);\n return {\n active: sorted.filter((row) => !row.legacy_terminal),\n legacy_terminal: legacyTerminal,\n no_active_blocker_sentinels: sorted.filter(\n (row) => row.no_active_blocker_sentinel,\n ),\n };\n}\n\n/** Return unique real missing targets while excluding the legacy no-blocker sentinel. */\nexport function collectMissingDependencyTargetIds(\n dangling: DanglingDependencyReferenceSummary,\n): string[] {\n const targets = new Map<string, string>();\n for (const reference of [...dangling.active, ...dangling.legacy_terminal]) {\n if (reference.no_active_blocker_sentinel) continue;\n const target = reference.target_id.trim();\n const key = target.toLowerCase();\n if (!targets.has(key)) targets.set(key, target);\n }\n return [...targets.values()].sort((left, right) => left.localeCompare(right));\n}\n\n/** Item shape accepted by workspace relationship-graph assembly. */\nexport interface WorkspaceRelationshipItem extends DependencyReferenceHolder {\n /** Human-readable title projected into per-node details. */\n title: string;\n}\n\n/** Compact node projection paired with the assembled graph. */\nexport interface WorkspaceRelationshipNodeDetails {\n /** Stable node identifier. */\n id: string;\n /** Human-readable node title, or a `[missing]` marker for absent endpoints. */\n title: string;\n /** Lifecycle status, or the `missing` marker status for absent endpoints. */\n status: string;\n}\n\n/** Assembled workspace relationship graph with governance side-products. */\nexport interface WorkspaceRelationshipAssembly {\n /** Deterministic relationship graph including missing placeholder nodes. */\n graph: RelationshipGraph;\n /** Per-node compact details covering real and missing nodes. */\n details: WorkspaceRelationshipNodeDetails[];\n /** Lowercased identifiers of materialized missing endpoints. */\n missingIdSet: Set<string>;\n /** Dangling-reference classification computed during assembly. */\n dangling: DanglingDependencyReferenceSummary;\n}\n\n/**\n * Build the shared workspace relationship graph including missing placeholder\n * nodes. One assembly serves every bounded query in an invocation — dependency\n * trees, context packets, impact analysis, path enumeration, and governance\n * audits — so the full-workspace normalization cost is paid once instead of\n * once per query surface.\n */\nexport function assembleWorkspaceRelationshipGraph(\n items: readonly WorkspaceRelationshipItem[],\n isTerminal?: (status: ItemStatus) => boolean,\n registry?: RelationshipKindRegistry,\n): WorkspaceRelationshipAssembly {\n const safeItems = items.filter(\n (item) => typeof item?.id === \"string\" && item.id.trim().length > 0,\n );\n const canonicalIds = new Map(\n safeItems.map((item) => [item.id.trim().toLowerCase(), item.id.trim()]),\n );\n const dangling = collectDanglingDependencyReferences(safeItems, isTerminal);\n const missingIds = collectMissingDependencyTargetIds(dangling);\n for (const id of missingIds) canonicalIds.set(id.toLowerCase(), id);\n const graphItems = safeItems.map((item) => {\n const parent = normalizeDependencyGraphTarget(item.parent);\n const blocker = normalizeDependencyGraphTarget(item.blocked_by);\n const dependencies = (item.dependencies ?? []).flatMap((rawDependency) => {\n if (typeof rawDependency !== \"object\" || rawDependency === null)\n return [];\n const dependency = rawDependency as Partial<Dependency>;\n const target = normalizeDependencyGraphTarget(dependency.id);\n if (!target) return [];\n return [\n {\n id: canonicalIds.get(target.toLowerCase())!,\n kind:\n typeof dependency.kind === \"string\" ? dependency.kind : \"related\",\n },\n ];\n });\n return {\n id: item.id.trim(),\n ...(parent ? { parent: canonicalIds.get(parent.toLowerCase())! } : {}),\n ...(blocker\n ? { blocked_by: canonicalIds.get(blocker.toLowerCase())! }\n : {}),\n dependencies,\n };\n });\n return {\n graph: RelationshipGraph.fromItems(\n [...graphItems, ...missingIds.map((id) => ({ id }))],\n registry,\n ),\n details: [\n ...safeItems.map((item) => ({\n id: item.id.trim(),\n title: item.title,\n status: item.status,\n })),\n ...missingIds.map((id) => ({\n id,\n title: `[missing] ${id}`,\n status: \"missing\",\n })),\n ],\n missingIdSet: new Set(missingIds.map((id) => id.toLowerCase())),\n dangling,\n };\n}\n"],"names":[],"mappings":";;;AA0HA,IAAM,6BAAoE;EACxE;IACE,MAAM;IACN,WAAW;IACX,SAAS;IACT,UAAU;IACV,YAAY;IACZ,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,SAAS,CAAC,YAAY;IACtB,sBAAsB;IACtB,WAAW;;EAEb;IACE,MAAM;IACN,WAAW;IACX,SAAS;IACT,UAAU;IACV,YAAY;IACZ,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,WAAW;;EAEb;IACE,MAAM;IACN,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,oBAAoB;IACpB,UAAU;IACV,UAAU;IACV,WAAW;IACX,SAAS,CAAC,YAAY,MAAM;IAC5B,sBAAsB;IACtB,WAAW;;EAEb;IACE,MAAM;IACN,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,oBAAoB;IACpB,UAAU;IACV,UAAU;IACV,WAAW;IACX,SAAS,CAAC,gBAAgB,MAAM;IAChC,sBAAsB;IACtB,WAAW;;EAEb;IACE,MAAM;IACN,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,SAAS,CAAC,YAAY;IACtB,sBAAsB;IACtB,WAAW;;EAEb;IACE,MAAM;IACN,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,WAAW;;EAEb;IACE,MAAM;IACN,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,WAAW;;EAEb;IACE,MAAM;IACN,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,WAAW;;;AAIf,SAAS,cAAc,MAAY;AACjC,SAAO,KAAK,KAAI,EAAG,YAAW,EAAG,WAAW,KAAK,GAAG;AACtD;AAEA,SAAS,qBAAqB,SAA2B;AACvD,MAAI,YAAY;AAAW,WAAO;AAClC,QAAM,aAAa,cAAc,OAAO;AACxC,MAAI,CAAC,oBAAoB,KAAK,UAAU;AACtC,UAAM,IAAI,UAAU,sCAAsC,OAAO,EAAE;AACrE,SAAO;AACT;AAEA,SAAS,YAAY,OAAgB,UAAU,oBAAI,IAAG,GAAU;AAC9D,MAAI,UAAU,QAAQ,OAAO,UAAU;AAAU,WAAO;AACxD,MAAI,QAAQ,IAAI,KAAK;AAAG,WAAO;AAC/B,UAAQ,IAAI,KAAK;AACjB,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAW,SAAS;AAAO,kBAAY,OAAO,OAAO;AACrD,WAAO,OAAO,OAAO,KAAK;EAC5B;AACA,aAAW,SAAS,OAAO,OAAO,KAAK;AAAG,gBAAY,OAAO,OAAO;AACpE,SAAO,OAAO,OAAO,KAAK;AAC5B;AAEA,SAAS,6BACP,YACA,MAAY;AAEZ,MACE,WAAW,eAAe,UAC1B,WAAW,eAAe,0BAC1B,WAAW,eAAe;AAE1B,UAAM,IAAI,UAAU,uCAAuC,IAAI,EAAE;AACnE,MAAI,CAAC,WAAW,YAAY,WAAW,eAAe;AACpD,UAAM,IAAI,UACR,6DAA6D,IAAI,EAAE;AAEzE;AAEA,SAAS,qCACP,YACA,MAAY;AAEZ,MACE,WAAW,uBAAuB,UAClC,WAAW,uBAAuB,mBAClC,WAAW,uBAAuB;AAElC,UAAM,IAAI,UAAU,gDAAgD,IAAI,EAAE;AAC5E,MAAI,CAAC,WAAW,aAAa,WAAW,uBAAuB;AAC7D,UAAM,IAAI,UACR,uEAAuE,IAAI,EAAE;AAEnF;AAGM,IAAO,2BAAP,MAA+B;EAC1B,eAAe,oBAAI,IAAG;EACtB,WAAW,oBAAI,IAAG;;EAG3B,YACE,cAAqD,4BAA0B;AAE/E,eAAW,cAAc;AAAa,WAAK,SAAS,UAAU;EAChE;;EAGO,SAAS,YAAsC;AACpD,UAAM,OAAO,cAAc,WAAW,IAAI;AAC1C,QAAI,CAAC,oBAAoB,KAAK,IAAI;AAChC,YAAM,IAAI,UAAU,8BAA8B,WAAW,IAAI,EAAE;AACrE,QACE,CAAC,OAAO,UAAU,WAAW,oBAAoB,KACjD,WAAW,uBAAuB;AAElC,YAAM,IAAI,UAAU,qCAAqC,IAAI,EAAE;AACjE,iCAA6B,YAAY,IAAI;AAC7C,yCAAqC,YAAY,IAAI;AACrD,QAAI,KAAK,aAAa,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI;AACvD,YAAM,IAAI,UAAU,yCAAyC,IAAI,EAAE;AACrE,UAAM,UAAU,qBAAqB,WAAW,OAAO;AACvD,UAAM,UAAU;MACd,GAAG,IAAI,KAAK,WAAW,WAAW,CAAA,GAAI,IAAI,aAAa,CAAC;MACxD,KAAI;AACN,eAAW,SAAS,SAAS;AAC3B,UAAI,CAAC,oBAAoB,KAAK,KAAK;AACjC,cAAM,IAAI,UAAU,+BAA+B,KAAK,EAAE;AAC5D,UACE,UAAU,QACV,KAAK,aAAa,IAAI,KAAK,KAC3B,KAAK,SAAS,IAAI,KAAK;AAEvB,cAAM,IAAI,UAAU,0CAA0C,KAAK,EAAE;IACzE;AACA,UAAM,aAAa,OAAO,OAAO;MAC/B,GAAG;MACH;MACA;MACA,SAAS,OAAO,OAAO,OAAO;MAC9B,eAAe,WAAW,gBACrB,YAAY,gBAAgB,WAAW,aAAa,CAAC,IAGtD;KACL;AACD,SAAK,aAAa,IAAI,MAAM,UAAU;AACtC,eAAW,SAAS;AAAS,WAAK,SAAS,IAAI,OAAO,IAAI;AAC1D,WAAO;EACT;;EAGO,QAAQ,MAAa;AAC1B,QAAI,OAAO,SAAS;AAAU,aAAO;AACrC,UAAM,aAAa,cAAc,IAAI;AACrC,WAAO,KAAK,aAAa,IAAI,KAAK,SAAS,IAAI,UAAU,KAAK,UAAU;EAC1E;;EAGO,QAAQ,MAAY;AACzB,UAAM,aAAa,KAAK,QAAQ,IAAI;AACpC,QAAI,CAAC;AAAY,YAAM,IAAI,UAAU,8BAA8B,IAAI,EAAE;AACzE,WAAO;EACT;;EAGO,OAAI;AACT,WAAO,OAAO,OACZ,CAAC,GAAG,KAAK,aAAa,OAAM,CAAE,EAAE,KAAK,CAAC,MAAM,UAC1C,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC,CACpC;EAEL;;AAII,SAAU,iCAA8B;AAC5C,SAAO,IAAI,yBAAwB;AACrC;AAEA,IAAM,kBAAkB,+BAA8B;AAGhD,SAAU,2BACd,MACA,WAAqC,iBAAe;AAEpD,SAAO,SAAS,QAAQ,IAAI,GAAG,aAAa;AAC9C;AAEA,SAAS,aAAa,MAAwB,OAAuB;AACnE,SACE,KAAK,OAAO,cAAc,MAAM,MAAM,KACtC,KAAK,OAAO,cAAc,MAAM,MAAM,KACtC,KAAK,KAAK,cAAc,MAAM,IAAI;AAEtC;AAEA,SAAS,0BACP,WACA,OACA,UAAkC;AAElC,QAAM,SACJ,OAAO,UAAU,WAAW,WAAW,UAAU,OAAO,KAAI,IAAK;AACnE,QAAM,SACJ,OAAO,UAAU,WAAW,WAAW,UAAU,OAAO,KAAI,IAAK;AACnE,QAAM,aAAa,SAAS,QAAQ,UAAU,IAAI;AAClD,MAAI,CAAC,MAAM,IAAI,MAAM,KAAK,CAAC,MAAM,IAAI,MAAM;AACzC,UAAM,IAAI,UACR,oCAAoC,MAAM,OAAO,MAAM,EAAE;AAE7D,MAAI,WAAW,UAAU,CAAC,WAAW;AACnC,UAAM,IAAI,UACR,wCAAwC,WAAW,IAAI,EAAE;AAE7D,QAAM,OAAO,OAAO,OAAO;IACzB,GAAG;IACH;IACA;IACA,MAAM,WAAW;GAClB;AACD,QAAM,YACJ,WAAW,cAAc,eACrB,CAAC,QAAQ,MAAM,EAAE,KAAI,EAAG,KAAK,IAAQ,IACrC,GAAG,MAAM,KAAS,MAAM;AAC9B,SAAO,EAAE,MAAM,UAAU,GAAG,WAAW,IAAI,KAAS,SAAS,GAAE;AACjE;AAEA,SAAS,kBACP,OACA,MACA,MAAsB;AAEtB,QAAM,UAAU,MAAM,IAAI,IAAI;AAC9B,MAAI;AAAS,YAAQ,KAAK,IAAI;;AACzB,UAAM,IAAI,MAAM,CAAC,IAAI,CAAC;AAC7B;AAEA,SAAS,gBAAgB,OAAc;AACrC,SAAO,OAAO,UAAU,WAAW,MAAM,KAAI,IAAK;AACpD;AAEA,SAAS,sBACP,OACA,KAAwB;AAExB,QAAM,KAAK,gBAAgB,KAAK;AAChC,SAAO,MAAM,IAAI,IAAI,EAAE,IAAI,KAAK;AAClC;AAEA,SAAS,gBACP,QACA,QACA,SAAoC;AAEpC,QAAM,OAAO,CAAC,MAAM;AACpB,MAAI,SAAS;AACb,SAAO,WAAW,QAAQ;AACxB,aAAS,QAAQ,IAAI,MAAM;AAC3B,SAAK,KAAK,MAAM;EAClB;AACA,SAAO,KAAK,QAAO;AACrB;AAGM,IAAO,oBAAP,MAAO,mBAAiB;EACnB;EACA;EACA;EACA;EACA,YAAY,oBAAI,IAAG;EACnB,YAAY,oBAAI,IAAG;;EAG5B,YACE,OACA,OACA,WAAqC,iBAAe;AAEpD,SAAK,YAAY;AACjB,SAAK,SAAS,IAAI,IAChB,CAAC,GAAG,KAAK,EACN,OAAO,CAAC,OAAqB,OAAO,OAAO,QAAQ,EACnD,IAAI,CAAC,OAAO,GAAG,KAAI,CAAE,EACrB,OAAO,OAAO,CAAC;AAEpB,SAAK,gBAAgB,OAAO,OAAO,CAAC,GAAG,KAAK,MAAM,EAAE,KAAI,CAAE;AAC1D,UAAM,UAAU,oBAAI,IAAG;AACvB,eAAW,aAAa,OAAO;AAC7B,YAAM,EAAE,MAAM,SAAQ,IAAK,0BACzB,WACA,KAAK,QACL,QAAQ;AAEV,cAAQ,IAAI,UAAU,IAAI;IAC5B;AACA,SAAK,SAAS,OAAO,OAAO,CAAC,GAAG,QAAQ,OAAM,CAAE,EAAE,KAAK,YAAY,CAAC;AACpE,eAAW,QAAQ,KAAK,QAAQ;AAC9B,wBAAkB,KAAK,WAAW,KAAK,QAAQ,IAAI;AACnD,wBAAkB,KAAK,WAAW,KAAK,QAAQ,IAAI;AACnD,UAAI,SAAS,QAAQ,KAAK,IAAI,EAAE,cAAc,cAAc;AAC1D,0BAAkB,KAAK,WAAW,KAAK,QAAQ,IAAI;AACnD,0BAAkB,KAAK,WAAW,KAAK,QAAQ,IAAI;MACrD;IACF;EACF;;EAGO,OAAO,UACZ,OAIA,WAAqC,iBAAe;AAEpD,UAAM,MAAM,IAAI,IACd,MAAM,IAAI,CAAC,SAAS,gBAAgB,KAAK,EAAE,CAAC,EAAE,OAAO,OAAO,CAAC;AAE/D,UAAM,QAA4B,CAAA;AAClC,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAS,gBAAgB,KAAK,EAAE;AACtC,UAAI,CAAC;AAAQ;AACb,YAAM,SAAS,sBAAsB,KAAK,QAAQ,GAAG;AACrD,UAAI;AAAQ,cAAM,KAAK,EAAE,QAAQ,QAAQ,QAAQ,MAAM,SAAQ,CAAE;AACjE,YAAM,YAAY,sBAAsB,KAAK,YAAY,GAAG;AAC5D,UAAI;AACF,cAAM,KAAK;UACT;UACA,QAAQ;UACR,MAAM;SACP;AACH,iBAAW,cAAc,KAAK,gBAAgB,CAAA,GAAI;AAChD,cAAM,eAAe,sBAAsB,WAAW,IAAI,GAAG;AAC7D,YAAI,gBAAgB,SAAS,QAAQ,WAAW,IAAI;AAClD,gBAAM,KAAK;YACT;YACA,QAAQ;YACR,MAAM,WAAW;YACjB,WAAW,WAAW;YACtB,QAAQ,WAAW;WACpB;MACL;IACF;AACA,WAAO,IAAI,mBAAkB,KAAK,OAAO,QAAQ;EACnD;;EAGO,QAAK;AACV,WAAO,KAAK;EACd;;EAGO,cAAc,IAAU;AAC7B,SAAK,YAAY,EAAE;AAEnB,UAAM,WAAW,KAAK,UAAU,IAAI,EAAE,KAAK,CAAA;AAC3C,UAAM,WAAW,KAAK,UAAU,IAAI,EAAE,KAAK,CAAA;AAC3C,QAAI,SAAS,WAAW;AAAG,aAAO,OAAO,OAAO,CAAC,GAAG,QAAQ,CAAC;AAC7D,QAAI,SAAS,WAAW;AAAG,aAAO,OAAO,OAAO,CAAC,GAAG,QAAQ,CAAC;AAC7D,UAAM,QAA4B,CAAA;AAClC,QAAI,gBAAgB;AACpB,QAAI,gBAAgB;AACpB,WAAO,gBAAgB,SAAS,UAAU,gBAAgB,SAAS,QAAQ;AACzE,YAAM,eAAe,SAAS,aAAa;AAC3C,YAAM,eAAe,SAAS,aAAa;AAC3C,YAAM,OACJ,iBAAiB,SACb,eACA,iBAAiB,UACf,aAAa,cAAc,YAAY,KAAK,IAC5C,eACA;AACR,UAAI,MAAM,GAAG,EAAE,MAAM;AAAM,cAAM,KAAK,IAAI;AAC1C,UAAI,iBAAiB;AAAM,yBAAiB;AAC5C,UAAI,iBAAiB;AAAM,yBAAiB;IAC9C;AACA,WAAO,OAAO,OAAO,KAAK;EAC5B;;EAGO,QAAK;AACV,WAAO,KAAK;EACd;;EAGO,QAAQ,IAAU;AACvB,WAAO,KAAK,OAAO,IAAI,EAAE;EAC3B;;EAGO,WAAQ;AACb,WAAO,KAAK;EACd;EAEA,YAAY,IAAU;AACpB,QAAI,CAAC,KAAK,OAAO,IAAI,EAAE;AACrB,YAAM,IAAI,UAAU,gCAAgC,EAAE,EAAE;EAC5D;EAEA,cACE,MACA,OAAsC;AAEtC,QAAI,CAAC;AAAO,aAAO;AACnB,UAAM,aAAa,KAAK,UAAU,QAAQ,KAAK,IAAI;AACnD,WACE,MAAM,IAAI,KAAK,IAAI,KAClB,WAAW,YAAY,UAAa,MAAM,IAAI,WAAW,OAAO;EAErE;EAEA,WACE,IACA,WACA,OAAsC;AAEtC,UAAM,aAAa;MACjB,GAAI,cAAc,aAAa,CAAA,IAAM,KAAK,UAAU,IAAI,EAAE,KAAK,CAAA;MAC/D,GAAI,cAAc,aAAa,CAAA,IAAM,KAAK,UAAU,IAAI,EAAE,KAAK,CAAA;;AAEjE,WAAO,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,EAC3B,OAAO,CAAC,SAAS,KAAK,cAAc,MAAM,KAAK,CAAC,EAChD,IAAI,CAAC,UAAU;MACd,IAAI,KAAK,WAAW,KAAK,KAAK,SAAS,KAAK;MAC5C;MACA,EACD,KACC,CAAC,MAAM,UACL,KAAK,GAAG,cAAc,MAAM,EAAE,KAC9B,aAAa,KAAK,MAAM,MAAM,IAAI,CAAC;EAE3C;;EAGO,UACL,IACA,UAAoC,CAAA,GAAE;AAEtC,SAAK,YAAY,EAAE;AACnB,YAAQ,QAAQ,eAAc;AAC9B,UAAM,QAAQ,QAAQ,QAClB,IAAI,IAAI,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,UAAU,QAAQ,IAAI,EAAE,IAAI,CAAC,IACtE;AACJ,UAAM,OAAO,KAAK,WAAW,IAAI,QAAQ,aAAa,YAAY,KAAK;AACvE,UAAM,QAAQ,QAAQ,SAAS,OAAO;AACtC,UAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;AAC9D,UAAM,QAAQ,gBAAgB,MAAM,GAAG,KAAK;AAC5C,WAAO;MACL;MACA,MAAM;QACJ,cAAc;QACd,gBAAgB,KAAK;QACrB,WAAW,MAAM,SAAS,gBAAgB;QAC1C,YAAY,MAAM,GAAG,EAAE;;;EAG7B;;EAGO,cACL,IACA,UAAoC,CAAA,GAAE;AAEtC,SAAK,YAAY,EAAE;AACnB,YAAQ,QAAQ,eAAc;AAC9B,UAAM,QAAQ,QAAQ,QAClB,IAAI,IAAI,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,UAAU,QAAQ,IAAI,EAAE,IAAI,CAAC,IACtE;AACJ,UAAM,OAAO,KAAK,WAAW,IAAI,QAAQ,aAAa,YAAY,KAAK;AACvE,UAAM,QAAQ,QAAQ,SAAS,OAAO;AACtC,UAAM,QAAQ,KAAK,MAAM,GAAG,KAAK;AACjC,WAAO;MACL;MACA,MAAM;QACJ,cAAc;QACd,gBAAgB,KAAK;QACrB,WAAW,MAAM,SAAS,KAAK;QAC/B,YAAY,MAAM,GAAG,EAAE,GAAG;;;EAGhC;;EAGO,QACL,IACA,UAAoC,CAAA,GAAE;AAEtC,SAAK,YAAY,EAAE;AACnB,UAAM,QAAQ,QAAQ,QAClB,IAAI,IAAI,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,UAAU,QAAQ,IAAI,EAAE,IAAI,CAAC,IACtE;AACJ,UAAM,YAAY,QAAQ,aAAa;AACvC,UAAM,QAAQ,QAAQ,SAAS,OAAO;AACtC,UAAM,WAAW,QAAQ,YAAY,OAAO;AAC5C,UAAM,OAAO,oBAAI,IAAI,CAAC,EAAE,CAAC;AACzB,UAAM,QAAkB,CAAA;AACxB,UAAM,QAAQ,CAAC,EAAE,IAAI,OAAO,EAAC,CAAE;AAC/B,QAAI,eAAe;AACnB,QAAI,iBAAiB;AACrB,QAAI,YAAY;AAChB,cAAW,UAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AAC/D,cAAQ,QAAQ,eAAc;AAC9B,YAAM,UAAU,MAAM,KAAK;AAC3B,sBAAgB;AAChB,YAAM,YAAY,KAAK,WAAW,QAAQ,IAAI,WAAW,KAAK;AAC9D,wBAAkB,UAAU;AAC5B,UAAI,QAAQ,SAAS,UAAU;AAC7B,YAAI,UAAU,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;AACrD,sBAAY;AACd;MACF;AACA,iBAAW,YAAY,WAAW;AAChC,YAAI,KAAK,IAAI,SAAS,EAAE;AAAG;AAC3B,YAAI,MAAM,UAAU,OAAO;AACzB,sBAAY;AACZ,gBAAM;QACR;AACA,aAAK,IAAI,SAAS,EAAE;AACpB,cAAM,KAAK,SAAS,EAAE;AACtB,cAAM,KAAK,EAAE,IAAI,SAAS,IAAI,OAAO,QAAQ,QAAQ,EAAC,CAAE;MAC1D;IACF;AACA,WAAO;MACL;MACA,MAAM;QACJ;QACA;QACA;QACA,YAAY,MAAM,GAAG,EAAE;;;EAG7B;;EAGO,aACL,QACA,QACA,UAAoC,CAAA,GAAE;AAEtC,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,QAAI,WAAW;AACb,aAAO;QACL,OAAO,CAAC,MAAM;QACd,MAAM,EAAE,cAAc,GAAG,gBAAgB,GAAG,WAAW,MAAK;;AAEhE,UAAM,QAAQ,QAAQ,QAClB,IAAI,IAAI,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,UAAU,QAAQ,IAAI,EAAE,IAAI,CAAC,IACtE;AACJ,UAAM,YAAY,QAAQ,aAAa;AACvC,UAAM,WAAW,QAAQ,YAAY,OAAO;AAC5C,UAAM,QAAQ,CAAC,EAAE,IAAI,QAAQ,OAAO,EAAC,CAAE;AACvC,UAAM,UAAU,oBAAI,IAAG;AACvB,UAAM,OAAO,oBAAI,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAI,eAAe;AACnB,QAAI,iBAAiB;AACrB,QAAI,YAAY;AAChB,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,cAAQ,QAAQ,eAAc;AAC9B,YAAM,UAAU,MAAM,KAAK;AAC3B,sBAAgB;AAChB,YAAM,YAAY,KAAK,WAAW,QAAQ,IAAI,WAAW,KAAK;AAC9D,wBAAkB,UAAU;AAC5B,UAAI,QAAQ,SAAS,UAAU;AAC7B,YAAI,UAAU,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;AACrD,sBAAY;AACd;MACF;AACA,iBAAW,YAAY,WAAW;AAChC,YAAI,KAAK,IAAI,SAAS,EAAE;AAAG;AAC3B,gBAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE;AACnC,YAAI,SAAS,OAAO;AAClB,iBAAO;YACL,OAAO,gBAAgB,QAAQ,QAAQ,OAAO;YAC9C,MAAM,EAAE,cAAc,gBAAgB,WAAW,MAAK;;AAE1D,aAAK,IAAI,SAAS,EAAE;AACpB,cAAM,KAAK,EAAE,IAAI,SAAS,IAAI,OAAO,QAAQ,QAAQ,EAAC,CAAE;MAC1D;IACF;AACA,WAAO;MACL,OAAO,CAAA;MACP,MAAM,EAAE,cAAc,gBAAgB,UAAS;;EAEnD;;EAGO,SACL,IACA,UAAoC,CAAA,GAAE;AAEtC,UAAM,UAAU,KAAK,QAAQ,IAAI,OAAO;AACxC,UAAM,QAAQ,CAAC,IAAI,GAAG,QAAQ,KAAK,EAAE,KAAI;AACzC,UAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAM,QAAQ,QAAQ,QAClB,IAAI,IAAI,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,UAAU,QAAQ,IAAI,EAAE,IAAI,CAAC,IACtE;AACJ,UAAM,QAAQ,oBAAI,IAAG;AACrB,eAAW,QAAQ,OAAO;AACxB,iBAAW,QAAQ,KAAK,UAAU,IAAI,IAAI,KAAK,CAAA,GAAI;AACjD,YACE,SAAS,IAAI,KAAK,MAAM,KACxB,SAAS,IAAI,KAAK,MAAM,KACxB,KAAK,cAAc,MAAM,KAAK;AAE9B,gBAAM,IAAI,IAAI;MAClB;IACF;AACA,WAAO;MACL,OAAO;QACL;QACA,OAAO,CAAC,GAAG,KAAK,EAAE,KAAK,YAAY;;MAErC,MAAM,QAAQ;;EAElB;;AAII,SAAU,yBACd,QACA,YACA,WAAqC,iBAAe;AAEpD,SAAO;IACL;IACA,QAAQ,WAAW;IACnB,MAAM,SAAS,QAAQ,WAAW,IAAI,EAAE;IACxC,WAAW,WAAW;IACtB,QAAQ,WAAW;;AAEvB;;;ACnvBA,SAAS,mCACP,QAAe;AAEf,MAAI,OAAO,WAAW;AAAU,WAAO;AACvC,QAAM,aAAa,OAAO,KAAI;AAC9B,MACE,CAAC,cACD,CAAC,QAAQ,QAAQ,OAAO,IAAI,EAAE,SAAS,WAAW,YAAW,CAAE;AAE/D,WAAO;AACT,SAAO;AACT;AAGA,SAAS,+BAA+B,QAAe;AACrD,QAAM,aAAa,mCAAmC,MAAM;AAC5D,SAAO,YAAY,YAAW,MAAO,sBACjC,SACA;AACN;AASM,SAAU,oCACd,OACA,aAA8C,CAAC,WAC7C,WAAW,YAAY,WAAW,YAAU;AAE9C,QAAM,YAAY,MAAM,OACtB,CAAC,SAAS,OAAO,MAAM,OAAO,YAAY,KAAK,GAAG,KAAI,EAAG,SAAS,CAAC;AAErE,QAAM,WAAW,IAAI,IACnB,UAAU,IAAI,CAAC,SAAS,KAAK,GAAG,KAAI,EAAG,YAAW,CAAE,CAAC;AAEvD,QAAM,OAAO,oBAAI,IAAG;AACpB,QAAM,eAAe,CACnB,MACA,QACA,MACA,WACQ;AACR,UAAM,aAAa,mCAAmC,MAAM;AAC5D,QAAI,CAAC,cAAc,SAAS,IAAI,WAAW,YAAW,CAAE,GAAG;AACzD;IACF;AACA,UAAM,MAAmC;MACvC,WAAW,KAAK,GAAG,KAAI;MACvB,WAAW;MACX;MACA;MACA,eAAe,KAAK;MACpB,iBAAiB,WAAW,KAAK,MAAM;MACvC,4BACE,WAAW,YAAW,MAAO;;AAEjC,SAAK,IACH,GAAG,IAAI,SAAS,KAAK,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,IAAI,MAAM,IAC9D,GAAG;EAEP;AACA,aAAW,QAAQ,WAAW;AAC5B,iBAAa,MAAM,KAAK,QAAQ,UAAU,QAAQ;AAClD,iBAAa,MAAM,KAAK,YAAY,cAAc,YAAY;AAC9D,eAAW,cAAc,KAAK,gBAAgB,CAAA,GAAI;AAGhD,UAAI,OAAO,eAAe,YAAY,eAAe,MAAM;AACzD;MACF;AACA,YAAM,mBAAmB;AACzB,mBACE,MACA,iBAAiB,IACjB,OAAO,iBAAiB,SAAS,WAC7B,iBAAiB,OACjB,WACJ,YAAY;IAEhB;EACF;AACA,QAAM,SAAS,CAAC,GAAG,KAAK,OAAM,CAAE,EAAE,KAChC,CAAC,MAAM,UACL,KAAK,UAAU,cAAc,MAAM,SAAS,KAC5C,KAAK,UAAU,cAAc,MAAM,SAAS,KAC5C,KAAK,KAAK,cAAc,MAAM,IAAI,KAClC,KAAK,OAAO,cAAc,MAAM,MAAM,CAAC;AAE3C,QAAM,iBAAiB,OAAO,OAAO,CAAC,QAAQ,IAAI,eAAe;AACjE,SAAO;IACL,QAAQ,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,eAAe;IACnD,iBAAiB;IACjB,6BAA6B,OAAO,OAClC,CAAC,QAAQ,IAAI,0BAA0B;;AAG7C;AAGM,SAAU,kCACd,UAA4C;AAE5C,QAAM,UAAU,oBAAI,IAAG;AACvB,aAAW,aAAa,CAAC,GAAG,SAAS,QAAQ,GAAG,SAAS,eAAe,GAAG;AACzE,QAAI,UAAU;AAA4B;AAC1C,UAAM,SAAS,UAAU,UAAU,KAAI;AACvC,UAAM,MAAM,OAAO,YAAW;AAC9B,QAAI,CAAC,QAAQ,IAAI,GAAG;AAAG,cAAQ,IAAI,KAAK,MAAM;EAChD;AACA,SAAO,CAAC,GAAG,QAAQ,OAAM,CAAE,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AAC9E;AAqCM,SAAU,mCACd,OACA,YACA,UAAmC;AAEnC,QAAM,YAAY,MAAM,OACtB,CAAC,SAAS,OAAO,MAAM,OAAO,YAAY,KAAK,GAAG,KAAI,EAAG,SAAS,CAAC;AAErE,QAAM,eAAe,IAAI,IACvB,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAI,EAAG,YAAW,GAAI,KAAK,GAAG,KAAI,CAAE,CAAC,CAAC;AAEzE,QAAM,WAAW,oCAAoC,WAAW,UAAU;AAC1E,QAAM,aAAa,kCAAkC,QAAQ;AAC7D,aAAW,MAAM;AAAY,iBAAa,IAAI,GAAG,YAAW,GAAI,EAAE;AAClE,QAAM,aAAa,UAAU,IAAI,CAAC,SAAQ;AACxC,UAAM,SAAS,+BAA+B,KAAK,MAAM;AACzD,UAAM,UAAU,+BAA+B,KAAK,UAAU;AAC9D,UAAM,gBAAgB,KAAK,gBAAgB,CAAA,GAAI,QAAQ,CAAC,kBAAiB;AACvE,UAAI,OAAO,kBAAkB,YAAY,kBAAkB;AACzD,eAAO,CAAA;AACT,YAAM,aAAa;AACnB,YAAM,SAAS,+BAA+B,WAAW,EAAE;AAC3D,UAAI,CAAC;AAAQ,eAAO,CAAA;AACpB,aAAO;QACL;UACE,IAAI,aAAa,IAAI,OAAO,YAAW,CAAE;UACzC,MACE,OAAO,WAAW,SAAS,WAAW,WAAW,OAAO;;;IAGhE,CAAC;AACD,WAAO;MACL,IAAI,KAAK,GAAG,KAAI;MAChB,GAAI,SAAS,EAAE,QAAQ,aAAa,IAAI,OAAO,YAAW,CAAE,EAAE,IAAK,CAAA;MACnE,GAAI,UACA,EAAE,YAAY,aAAa,IAAI,QAAQ,YAAW,CAAE,EAAE,IACtD,CAAA;MACJ;;EAEJ,CAAC;AACD,SAAO;IACL,OAAO,kBAAkB,UACvB,CAAC,GAAG,YAAY,GAAG,WAAW,IAAI,CAAC,QAAQ,EAAE,GAAE,EAAG,CAAC,GACnD,QAAQ;IAEV,SAAS;MACP,GAAG,UAAU,IAAI,CAAC,UAAU;QAC1B,IAAI,KAAK,GAAG,KAAI;QAChB,OAAO,KAAK;QACZ,QAAQ,KAAK;QACb;MACF,GAAG,WAAW,IAAI,CAAC,QAAQ;QACzB;QACA,OAAO,aAAa,EAAE;QACtB,QAAQ;QACR;;IAEJ,cAAc,IAAI,IAAI,WAAW,IAAI,CAAC,OAAO,GAAG,YAAW,CAAE,CAAC;IAC9D;;AAEJ","debugId":"8145f80d-99b5-53e4-a519-54b4549dca6c"}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  scanHistoryDrift
3
- } from "./chunk-KG44YSKD.js";
3
+ } from "./chunk-2FUOXSRN.js";
4
4
  import {
5
5
  executeHistoryRewrite,
6
6
  historyEntriesToRaw,
@@ -11,7 +11,7 @@ import {
11
11
  toReplayDocument,
12
12
  verifyHistoryChain,
13
13
  writeHistoryRawWithRollback
14
- } from "./chunk-TD3LVC7D.js";
14
+ } from "./chunk-X5YCTFKT.js";
15
15
  import {
16
16
  getActiveExtensionRegistrations,
17
17
  listAllItemMetadataWithBody,
@@ -19,7 +19,7 @@ import {
19
19
  readLocatedItem,
20
20
  readSettings,
21
21
  runActiveOnWriteHooks
22
- } from "./chunk-XSJUSQAE.js";
22
+ } from "./chunk-646MQXFW.js";
23
23
  import {
24
24
  EXIT_CODE,
25
25
  PmCliError,
@@ -28,7 +28,7 @@ import {
28
28
  readFileIfExists,
29
29
  resolveItemTypeRegistry,
30
30
  resolvePmRoot
31
- } from "./chunk-BSEQUTQP.js";
31
+ } from "./chunk-WACRQ26A.js";
32
32
 
33
33
  // dist/sdk/history-repair.js
34
34
  import jsonPatch from "fast-json-patch";
@@ -276,4 +276,4 @@ export {
276
276
  assertHistoryRepairTarget,
277
277
  runHistoryRepairAll
278
278
  };
279
- //# sourceMappingURL=chunk-LSG2U345.js.map
279
+ //# sourceMappingURL=chunk-L6FVNR7X.js.map
@@ -2,7 +2,7 @@ import {
2
2
  parseAnnotationTextInput,
3
3
  resolveAnnotationInput,
4
4
  runAnnotationCommand
5
- } from "./chunk-QIPLHNP7.js";
5
+ } from "./chunk-QWBKN3QC.js";
6
6
 
7
7
  // dist/cli/commands/notes.js
8
8
  !(function() {
@@ -35,4 +35,4 @@ async function runNotes(id, options, global2) {
35
35
  export {
36
36
  runNotes
37
37
  };
38
- //# sourceMappingURL=chunk-FMBNM2EN.js.map
38
+ //# sourceMappingURL=chunk-LSOWTLEM.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  stableStringify
3
- } from "./chunk-XSJUSQAE.js";
3
+ } from "./chunk-646MQXFW.js";
4
4
  import {
5
5
  EXIT_CODE,
6
6
  PmCliError
7
- } from "./chunk-BSEQUTQP.js";
7
+ } from "./chunk-WACRQ26A.js";
8
8
 
9
9
  // dist/sdk/pagination.js
10
10
  import { createHash } from "node:crypto";
@@ -118,4 +118,4 @@ export {
118
118
  paginateQueryRows,
119
119
  QUERY_CURSOR_CONTRACT
120
120
  };
121
- //# sourceMappingURL=chunk-4223PVZT.js.map
121
+ //# sourceMappingURL=chunk-M7MVOKVV.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getFocusedItem
3
- } from "./chunk-RMLWNPH2.js";
3
+ } from "./chunk-BVLOMU6O.js";
4
4
  import {
5
5
  assertNoUnknownCsvKeys,
6
6
  createStdinTokenResolver,
@@ -10,23 +10,23 @@ import {
10
10
  parseOptionalNonNegativeInteger,
11
11
  parseOptionalNumber,
12
12
  parseTags
13
- } from "./chunk-TKOVBP6C.js";
13
+ } from "./chunk-D52ZN3BF.js";
14
14
  import {
15
15
  assertParentReferenceIsNotSelf,
16
16
  isPlaceholderReferenceToken,
17
17
  normalizeParentReferenceValue,
18
18
  validateMissingParentReference,
19
19
  validateSprintOrReleaseValue
20
- } from "./chunk-ULTHRDBP.js";
20
+ } from "./chunk-TM5CIO3F.js";
21
21
  import {
22
22
  buildInvalidTypeError
23
- } from "./chunk-SELVXEZK.js";
23
+ } from "./chunk-HO4DLBNK.js";
24
24
  import {
25
25
  splitCommaList
26
26
  } from "./chunk-D6HZN36B.js";
27
27
  import {
28
28
  printError
29
- } from "./chunk-IG3SWA4A.js";
29
+ } from "./chunk-EHJFUOXL.js";
30
30
  import {
31
31
  acquireLock,
32
32
  appendHistoryEntry,
@@ -47,7 +47,7 @@ import {
47
47
  runActiveCommandHandler,
48
48
  runActiveOnWriteHooks,
49
49
  serializeItemDocument
50
- } from "./chunk-XSJUSQAE.js";
50
+ } from "./chunk-646MQXFW.js";
51
51
  import {
52
52
  CONFIDENCE_TEXT_VALUES,
53
53
  CREATE_DIRECT_CLOSE_REASON_DEFAULT,
@@ -82,7 +82,7 @@ import {
82
82
  validateTypeOptions,
83
83
  weekdayOrderIndex,
84
84
  writeFileAtomic
85
- } from "./chunk-BSEQUTQP.js";
85
+ } from "./chunk-WACRQ26A.js";
86
86
 
87
87
  // dist/core/item/priority.js
88
88
  !(function() {
@@ -354,11 +354,11 @@ function suggestNextLifecycleTransition(id, type, status, statusRegistry) {
354
354
  return { command: `pm start-task ${id}`, to_status: inProgress };
355
355
  }
356
356
 
357
- // dist/cli/commands/linked-test-entry.js
357
+ // dist/sdk/test/entry.js
358
358
  !(function() {
359
359
  try {
360
360
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
361
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "05d23afb-e548-56ab-b2ab-462486bb34ad");
361
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "8d0ef3ea-da0f-5a01-9867-e870faaec0c7");
362
362
  } catch (e2) {
363
363
  }
364
364
  })();
@@ -400,6 +400,9 @@ function normalizeStructuredLinkedTestEntry(kv, optionName) {
400
400
  unknownKeys.push(key);
401
401
  continue;
402
402
  }
403
+ if (Object.hasOwn(normalizedKv, normalizedKey)) {
404
+ throw new PmCliError(`${optionName} provides key "${key}" more than once after case normalization`, EXIT_CODE.USAGE);
405
+ }
403
406
  normalizedKv[normalizedKey] = value;
404
407
  }
405
408
  if (unknownKeys.length > 0) {
@@ -415,11 +418,11 @@ function normalizeStructuredLinkedTestEntry(kv, optionName) {
415
418
  return normalizedKv;
416
419
  }
417
420
 
418
- // dist/cli/commands/linked-test-parsers.js
421
+ // dist/sdk/test/parsers.js
419
422
  !(function() {
420
423
  try {
421
424
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
422
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "c8616682-3a0d-570f-bff0-fc842c7a9e3f");
425
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "070a3dbc-d028-5ce9-a1ed-41010c72d9ab");
423
426
  } catch (e2) {
424
427
  }
425
428
  })();
@@ -442,7 +445,7 @@ function parseLinkedTestEnvSet(raw, optionName) {
442
445
  if (assignments.length === 0) {
443
446
  throw new PmCliError(`${optionName} env_set must include at least one KEY=VALUE assignment`, EXIT_CODE.USAGE);
444
447
  }
445
- const envSet = {};
448
+ const envSet = /* @__PURE__ */ Object.create(null);
446
449
  for (const assignment of assignments) {
447
450
  const separatorIndex = assignment.indexOf("=");
448
451
  if (separatorIndex <= 0) {
@@ -544,7 +547,7 @@ function parseLinkedTestAssertionEqualsMap(raw, optionName) {
544
547
  if (assignments.length === 0) {
545
548
  throw new PmCliError(`${optionName} assert_json_field_equals must include at least one path=value assignment`, EXIT_CODE.USAGE);
546
549
  }
547
- const values = {};
550
+ const values = /* @__PURE__ */ Object.create(null);
548
551
  for (const assignment of assignments) {
549
552
  const separatorIndex = assignment.indexOf("=");
550
553
  if (separatorIndex <= 0) {
@@ -567,7 +570,7 @@ function parseLinkedTestAssertionGteMap(raw, optionName) {
567
570
  if (assignments.length === 0) {
568
571
  throw new PmCliError(`${optionName} assert_json_field_gte must include at least one path=value assignment`, EXIT_CODE.USAGE);
569
572
  }
570
- const values = {};
573
+ const values = /* @__PURE__ */ Object.create(null);
571
574
  for (const assignment of assignments) {
572
575
  const separatorIndex = assignment.indexOf("=");
573
576
  if (separatorIndex <= 0) {
@@ -578,7 +581,7 @@ function parseLinkedTestAssertionGteMap(raw, optionName) {
578
581
  if (key.length === 0 || valueRaw.length === 0) {
579
582
  throw new PmCliError(`${optionName} assert_json_field_gte entries must include non-empty path and value`, EXIT_CODE.USAGE);
580
583
  }
581
- const value = Number.parseFloat(valueRaw);
584
+ const value = Number(valueRaw);
582
585
  if (!Number.isFinite(value)) {
583
586
  throw new PmCliError(`${optionName} assert_json_field_gte value for "${key}" must be numeric`, EXIT_CODE.USAGE);
584
587
  }
@@ -699,7 +702,7 @@ function readJsonEntryEnvSet(entry, fail) {
699
702
  if (!isPlainObject(value)) {
700
703
  throw fail('field "env_set" must be a JSON object mapping environment names to string values');
701
704
  }
702
- const envSet = {};
705
+ const envSet = /* @__PURE__ */ Object.create(null);
703
706
  for (const [key, entryValue] of Object.entries(value)) {
704
707
  if (typeof entryValue !== "string") {
705
708
  throw fail(`field "env_set" value for "${key}" must be a string`);
@@ -767,7 +770,7 @@ function readJsonEntryEqualsMap(entry, fail) {
767
770
  if (!isPlainObject(value)) {
768
771
  throw fail('field "assert_json_field_equals" must be a JSON object mapping field paths to expected values');
769
772
  }
770
- const values = {};
773
+ const values = /* @__PURE__ */ Object.create(null);
771
774
  for (const [key, entryValue] of Object.entries(value)) {
772
775
  if (key.trim().length === 0) {
773
776
  throw fail('field "assert_json_field_equals" keys must be non-empty field paths');
@@ -790,7 +793,7 @@ function readJsonEntryGteMap(entry, fail) {
790
793
  if (!isPlainObject(value)) {
791
794
  throw fail('field "assert_json_field_gte" must be a JSON object mapping field paths to numeric minimums');
792
795
  }
793
- const values = {};
796
+ const values = /* @__PURE__ */ Object.create(null);
794
797
  for (const [key, entryValue] of Object.entries(value)) {
795
798
  if (key.trim().length === 0) {
796
799
  throw fail('field "assert_json_field_gte" keys must be non-empty field paths');
@@ -861,6 +864,24 @@ function parseLinkedTestJsonEntries(raw, optionName) {
861
864
  return entries.map((entry, index) => parseLinkedTestJsonEntry(entry, entries.length > 1 ? `entry ${index + 1}` : "entry", optionName));
862
865
  }
863
866
 
867
+ // dist/cli/commands/linked-test-parsers.js
868
+ !(function() {
869
+ try {
870
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
871
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "a1c484f7-3e7b-5540-b3dc-df3131d0120b");
872
+ } catch (e2) {
873
+ }
874
+ })();
875
+
876
+ // dist/cli/commands/linked-test-entry.js
877
+ !(function() {
878
+ try {
879
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
880
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "8f351dfe-4fdc-5f20-b969-e29cca6c9cd4");
881
+ } catch (e2) {
882
+ }
883
+ })();
884
+
864
885
  // dist/cli/commands/shared-unset-fields.js
865
886
  !(function() {
866
887
  try {
@@ -3022,6 +3043,7 @@ export {
3022
3043
  looksLikeStructuredLinkedTestEntry,
3023
3044
  normalizeStructuredLinkedTestEntry,
3024
3045
  LINKED_TEST_PROTECTED_ENV_KEYS,
3046
+ LINKED_TEST_ENV_NAME_PATTERN,
3025
3047
  LINKED_TEST_PM_CONTEXT_MODE_VALUES,
3026
3048
  parseLinkedTestEnvSet,
3027
3049
  parseLinkedTestEnvClear,
@@ -3051,4 +3073,4 @@ export {
3051
3073
  runCreate,
3052
3074
  _testOnlyCreateCommand
3053
3075
  };
3054
- //# sourceMappingURL=chunk-UMOPHQSU.js.map
3076
+ //# sourceMappingURL=chunk-MR4SHYR4.js.map