@unbrained/pm-cli 2026.7.18 → 2026.7.19

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 (497) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +17 -0
  3. package/dist/cli/commands/claim.js +6 -4
  4. package/dist/cli/commands/claim.js.map +1 -1
  5. package/dist/cli/commands/comments.js +5 -2
  6. package/dist/cli/commands/comments.js.map +1 -1
  7. package/dist/cli/commands/context.d.ts +10 -1
  8. package/dist/cli/commands/context.js +44 -6
  9. package/dist/cli/commands/context.js.map +1 -1
  10. package/dist/cli/commands/create.js +15 -4
  11. package/dist/cli/commands/create.js.map +1 -1
  12. package/dist/cli/commands/next.js +13 -3
  13. package/dist/cli/commands/next.js.map +1 -1
  14. package/dist/cli/commands/update.js +14 -3
  15. package/dist/cli/commands/update.js.map +1 -1
  16. package/dist/cli/error-guidance.js +23 -4
  17. package/dist/cli/error-guidance.js.map +1 -1
  18. package/dist/cli/extension-command-help.d.ts +11 -0
  19. package/dist/cli/extension-command-help.js +62 -2
  20. package/dist/cli/extension-command-help.js.map +1 -1
  21. package/dist/cli/main.d.ts +1 -0
  22. package/dist/cli/main.js +16 -11
  23. package/dist/cli/main.js.map +1 -1
  24. package/dist/cli-bundle/bundle-manifest.json +326 -350
  25. package/dist/cli-bundle/chunks/{append-5YF3TO7I.js → append-MBXHNWSX.js} +5 -5
  26. package/dist/cli-bundle/chunks/append-XUYF7NON.js +11 -0
  27. package/dist/cli-bundle/chunks/{chunk-BIRYX32V.js → chunk-2UCG5H6B.js} +3 -3
  28. package/dist/cli-bundle/chunks/{chunk-VE6ZSTQW.js → chunk-2XPDCXK5.js} +4 -4
  29. package/dist/cli-bundle/chunks/{chunk-I3INI567.js → chunk-3EZZTFL2.js} +909 -124
  30. package/dist/cli-bundle/chunks/chunk-3EZZTFL2.js.map +7 -0
  31. package/dist/cli-bundle/chunks/{chunk-GLZKZON6.js → chunk-3HSRP6T2.js} +2 -2
  32. package/dist/cli-bundle/chunks/{chunk-XWBD6DSR.js → chunk-3KPNOZOH.js} +23 -23
  33. package/dist/cli-bundle/chunks/{chunk-MR4SHYR4.js → chunk-3QNUDDY2.js} +104 -23
  34. package/dist/cli-bundle/chunks/chunk-3QNUDDY2.js.map +7 -0
  35. package/dist/cli-bundle/chunks/{chunk-SIPOACV5.js → chunk-46Z6FAVP.js} +888 -124
  36. package/dist/cli-bundle/chunks/chunk-46Z6FAVP.js.map +1 -0
  37. package/dist/cli-bundle/chunks/{chunk-HO4DLBNK.js → chunk-4M6RZJXF.js} +2 -2
  38. package/dist/cli-bundle/chunks/{chunk-RXPQ5Q23.js → chunk-4PSJVGRE.js} +11 -11
  39. package/dist/cli-bundle/chunks/{chunk-ADXDCAKP.js → chunk-5S6IZXK7.js} +146 -32
  40. package/dist/cli-bundle/chunks/{chunk-IL5SPRMH.js.map → chunk-5S6IZXK7.js.map} +7 -1
  41. package/dist/cli-bundle/chunks/chunk-66SRNEBK.js +143 -0
  42. package/dist/cli-bundle/chunks/chunk-66SRNEBK.js.map +7 -0
  43. package/dist/cli-bundle/chunks/{chunk-YFE7JHX3.js → chunk-6BNV3G6C.js} +2 -2
  44. package/dist/cli-bundle/chunks/{chunk-43UMFKCK.js → chunk-6V4T4RD3.js} +23 -23
  45. package/dist/cli-bundle/chunks/chunk-77XFQRTD.js +140 -0
  46. package/dist/cli-bundle/chunks/chunk-77XFQRTD.js.map +1 -0
  47. package/dist/cli-bundle/chunks/{chunk-EHJFUOXL.js → chunk-7B7IHMLH.js} +3 -3
  48. package/dist/cli-bundle/chunks/{chunk-I7DIDUSP.js → chunk-7CHWLT2J.js} +2 -2
  49. package/dist/cli-bundle/chunks/{chunk-L6FVNR7X.js → chunk-A3GAQLBH.js} +5 -5
  50. package/dist/cli-bundle/chunks/{chunk-B57RJHBZ.js → chunk-A4FVWFZY.js} +4 -4
  51. package/dist/cli-bundle/chunks/{chunk-D52ZN3BF.js → chunk-A5EQPNV7.js} +2 -2
  52. package/dist/cli-bundle/chunks/{chunk-TZAE66GQ.js → chunk-AGEBQRBG.js} +15 -15
  53. package/dist/cli-bundle/chunks/{chunk-WU3KAN6A.js → chunk-AQUNTB7G.js} +3 -3
  54. package/dist/cli-bundle/chunks/{chunk-OGVTB5VO.js → chunk-AR24KW26.js} +237 -36
  55. package/dist/cli-bundle/chunks/chunk-AR24KW26.js.map +7 -0
  56. package/dist/cli-bundle/chunks/{chunk-XWYQ2LT4.js → chunk-BBGR4FKQ.js} +4 -4
  57. package/dist/cli-bundle/chunks/{chunk-HTXXXF45.js → chunk-BDC4TW4B.js} +98 -24
  58. package/dist/cli-bundle/chunks/chunk-BDC4TW4B.js.map +1 -0
  59. package/dist/cli-bundle/chunks/{chunk-2FUOXSRN.js → chunk-BFJP4VYC.js} +4 -4
  60. package/dist/cli-bundle/chunks/{chunk-633PKXLT.js → chunk-BZKE2O5V.js} +3 -3
  61. package/dist/cli-bundle/chunks/{chunk-XPUTSGJU.js → chunk-CZA2DXCV.js} +230 -36
  62. package/dist/cli-bundle/chunks/chunk-CZA2DXCV.js.map +1 -0
  63. package/dist/cli-bundle/chunks/{chunk-KX62NMZC.js → chunk-D35WYXWC.js} +626 -5
  64. package/dist/cli-bundle/chunks/chunk-D35WYXWC.js.map +1 -0
  65. package/dist/cli-bundle/chunks/chunk-DOASIOQR.js +289 -0
  66. package/dist/cli-bundle/chunks/chunk-DOASIOQR.js.map +7 -0
  67. package/dist/cli-bundle/chunks/{chunk-L337QKWJ.js → chunk-DUDLSQFG.js} +5 -5
  68. package/dist/cli-bundle/chunks/{chunk-BVLOMU6O.js → chunk-E7KBMWEF.js} +2 -2
  69. package/dist/cli-bundle/chunks/{chunk-3QDR6ZLU.js → chunk-EAV3P54W.js} +9 -9
  70. package/dist/cli-bundle/chunks/{chunk-3QDR6ZLU.js.map → chunk-EAV3P54W.js.map} +2 -2
  71. package/dist/cli-bundle/chunks/{chunk-WQXRZMFN.js → chunk-EEECAV5M.js} +2 -2
  72. package/dist/cli-bundle/chunks/{chunk-35FHWD4C.js → chunk-EI3UIMZM.js} +4 -4
  73. package/dist/cli-bundle/chunks/{chunk-RGMWJLXF.js → chunk-EVAN5VJA.js} +8 -5
  74. package/dist/cli-bundle/chunks/{chunk-RGMWJLXF.js.map → chunk-EVAN5VJA.js.map} +2 -2
  75. package/dist/cli-bundle/chunks/{chunk-PT7MCCGD.js → chunk-FIUTBFC6.js} +2 -2
  76. package/dist/cli-bundle/chunks/{chunk-7H5NNCJ5.js → chunk-FQF6VVPH.js} +4 -4
  77. package/dist/cli-bundle/chunks/{chunk-6DYOZS6C.js → chunk-FQO5THHM.js} +2 -2
  78. package/dist/cli-bundle/chunks/{chunk-5HGZKQUL.js → chunk-FQODDTE7.js} +4 -4
  79. package/dist/cli-bundle/chunks/{chunk-67RO3H4N.js → chunk-G33XIMRT.js} +6 -6
  80. package/dist/cli-bundle/chunks/{chunk-D53RTYVI.js → chunk-GFZB5CLP.js} +20 -10
  81. package/dist/cli-bundle/chunks/chunk-GFZB5CLP.js.map +7 -0
  82. package/dist/cli-bundle/chunks/{chunk-QWBKN3QC.js → chunk-GKCEEXMA.js} +8 -8
  83. package/dist/cli-bundle/chunks/{chunk-DG2EQRIH.js → chunk-GRDK25BN.js} +7 -7
  84. package/dist/cli-bundle/chunks/{chunk-FXFCFL73.js → chunk-H3YKUVDR.js} +5 -5
  85. package/dist/cli-bundle/chunks/{chunk-IL5SPRMH.js → chunk-IEMXESIS.js} +123 -16
  86. package/dist/cli-bundle/chunks/chunk-IEMXESIS.js.map +1 -0
  87. package/dist/cli-bundle/chunks/{chunk-ARGDWQ4J.js → chunk-IGBBTPM5.js} +2 -2
  88. package/dist/cli-bundle/chunks/{chunk-QPGQNLPI.js → chunk-IR3GOO6E.js} +3842 -4109
  89. package/dist/cli-bundle/chunks/chunk-IR3GOO6E.js.map +1 -0
  90. package/dist/cli-bundle/chunks/{chunk-FY4RLHSC.js → chunk-IRJ6F23W.js} +2 -2
  91. package/dist/cli-bundle/chunks/{chunk-66MKH7SZ.js → chunk-IXG5CMBR.js} +4 -4
  92. package/dist/cli-bundle/chunks/{chunk-F3VC3GOV.js → chunk-JBW2S2C6.js} +2090 -253
  93. package/dist/cli-bundle/chunks/chunk-JBW2S2C6.js.map +7 -0
  94. package/dist/cli-bundle/chunks/{chunk-7UCY6DR5.js → chunk-JPWUZOMR.js} +2 -2
  95. package/dist/cli-bundle/chunks/{chunk-FVNWHUME.js → chunk-K2L6FZBX.js} +8 -8
  96. package/dist/cli-bundle/chunks/chunk-KGPLSHJD.js +286 -0
  97. package/dist/cli-bundle/chunks/chunk-KGPLSHJD.js.map +1 -0
  98. package/dist/cli-bundle/chunks/{chunk-YQEZWI3R.js → chunk-KZ5AC6B5.js} +5 -3
  99. package/dist/cli-bundle/chunks/chunk-KZ5AC6B5.js.map +7 -0
  100. package/dist/cli-bundle/chunks/{chunk-X2MGQMZO.js → chunk-LT5UWU7H.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-KH6QAHME.js → chunk-M4B4RK4J.js} +3 -3
  102. package/dist/cli-bundle/chunks/{chunk-QRZNCRNA.js → chunk-MI3346YW.js} +377 -240
  103. package/dist/cli-bundle/chunks/chunk-MI3346YW.js.map +1 -0
  104. package/dist/cli-bundle/chunks/{chunk-2XOSFSTH.js → chunk-MQOSMBWV.js} +5 -5
  105. package/dist/cli-bundle/chunks/{chunk-YIIIAKCE.js → chunk-MRXAHR4B.js} +28 -22
  106. package/dist/cli-bundle/chunks/chunk-MRXAHR4B.js.map +1 -0
  107. package/dist/cli-bundle/chunks/{chunk-7R6UIHYY.js → chunk-N2TEEOXJ.js} +5 -5
  108. package/dist/cli-bundle/chunks/{chunk-NTRQLE2R.js → chunk-N7FCFJ76.js} +2 -2
  109. package/dist/cli-bundle/chunks/{chunk-37DRDP2B.js → chunk-NPEYH6CE.js} +5 -5
  110. package/dist/cli-bundle/chunks/{chunk-GKPCTQYG.js → chunk-NTS2RKHN.js} +3942 -4216
  111. package/dist/cli-bundle/chunks/chunk-NTS2RKHN.js.map +7 -0
  112. package/dist/cli-bundle/chunks/{chunk-6VHUGVNP.js → chunk-ODEIDKGW.js} +2062 -246
  113. package/dist/cli-bundle/chunks/chunk-ODEIDKGW.js.map +1 -0
  114. package/dist/cli-bundle/chunks/{chunk-2CXL335K.js → chunk-OK7VSX3N.js} +3 -3
  115. package/dist/cli-bundle/chunks/{chunk-NNANAWFH.js → chunk-OKPZDH43.js} +3 -3
  116. package/dist/cli-bundle/chunks/{chunk-G6MYGULG.js → chunk-OKWJUL6F.js} +6 -6
  117. package/dist/cli-bundle/chunks/{chunk-HPAYDSR2.js → chunk-P24ZU5QV.js} +27 -21
  118. package/dist/cli-bundle/chunks/chunk-P24ZU5QV.js.map +7 -0
  119. package/dist/cli-bundle/chunks/{chunk-TGBTLGPX.js → chunk-Q4PSG2GV.js} +13 -4
  120. package/dist/cli-bundle/chunks/{chunk-TGBTLGPX.js.map → chunk-Q4PSG2GV.js.map} +1 -1
  121. package/dist/cli-bundle/chunks/{chunk-5UKQLQM2.js → chunk-Q5NHJ6RO.js} +6 -4
  122. package/dist/cli-bundle/chunks/chunk-Q5NHJ6RO.js.map +1 -0
  123. package/dist/cli-bundle/chunks/{chunk-D5XHO4Q7.js → chunk-Q6JPYR7I.js} +2 -2
  124. package/dist/cli-bundle/chunks/{chunk-P22HGFFI.js → chunk-QFG4MB7P.js} +5 -5
  125. package/dist/cli-bundle/chunks/{chunk-P22HGFFI.js.map → chunk-QFG4MB7P.js.map} +1 -1
  126. package/dist/cli-bundle/chunks/{chunk-IE5KRAKN.js → chunk-QQ77W23U.js} +4 -4
  127. package/dist/cli-bundle/chunks/{chunk-M7MVOKVV.js → chunk-QYGK2XQ3.js} +3 -3
  128. package/dist/cli-bundle/chunks/{chunk-646MQXFW.js → chunk-RLLOZAM2.js} +4 -4
  129. package/dist/cli-bundle/chunks/{chunk-646MQXFW.js.map → chunk-RLLOZAM2.js.map} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-X5YCTFKT.js → chunk-RWAIRGBC.js} +3 -3
  131. package/dist/cli-bundle/chunks/{chunk-W5E2UUSH.js → chunk-RX53WHFI.js} +3 -3
  132. package/dist/cli-bundle/chunks/{chunk-R5XTTZSJ.js → chunk-SBW7EQC4.js} +5 -5
  133. package/dist/cli-bundle/chunks/{chunk-TM5CIO3F.js → chunk-SGJB6PXA.js} +3 -3
  134. package/dist/cli-bundle/chunks/{chunk-DDFGYUCQ.js → chunk-STBCBDKF.js} +7 -7
  135. package/dist/cli-bundle/chunks/{chunk-EX7OQT3Y.js → chunk-SUNZKVAH.js} +10 -10
  136. package/dist/cli-bundle/chunks/{chunk-EX7OQT3Y.js.map → chunk-SUNZKVAH.js.map} +1 -1
  137. package/dist/cli-bundle/chunks/{chunk-FHOBCGQO.js → chunk-SVAWG7EE.js} +2 -2
  138. package/dist/cli-bundle/chunks/{chunk-6O44IN44.js → chunk-T6MOTLOJ.js} +2 -2
  139. package/dist/cli-bundle/chunks/{chunk-HSYV4ZYT.js → chunk-TELI67UP.js} +9 -6
  140. package/dist/cli-bundle/chunks/{chunk-HSYV4ZYT.js.map → chunk-TELI67UP.js.map} +1 -1
  141. package/dist/cli-bundle/chunks/{chunk-EWIT5WIC.js → chunk-U6RYD446.js} +11 -11
  142. package/dist/cli-bundle/chunks/{chunk-E4FXM2XB.js → chunk-UE7LK3RE.js} +5 -5
  143. package/dist/cli-bundle/chunks/{chunk-N33FD2UI.js → chunk-UNNCT5QY.js} +3 -3
  144. package/dist/cli-bundle/chunks/{chunk-2IPNL3DR.js → chunk-UOIFZ66L.js} +3 -3
  145. package/dist/cli-bundle/chunks/{chunk-LSOWTLEM.js → chunk-UU6EP25G.js} +2 -2
  146. package/dist/cli-bundle/chunks/{chunk-HYTOJW2Q.js → chunk-UW6HCMP2.js} +15 -15
  147. package/dist/cli-bundle/chunks/{chunk-47HXN6RX.js → chunk-UWAQI3B7.js} +3 -3
  148. package/dist/cli-bundle/chunks/{chunk-YKFHF37B.js → chunk-V4QHAMI5.js} +3 -3
  149. package/dist/cli-bundle/chunks/{chunk-VAHZIPWS.js → chunk-VA3H7VVC.js} +4 -4
  150. package/dist/cli-bundle/chunks/{chunk-XC2HEEOV.js → chunk-VFA5EIEN.js} +21 -11
  151. package/dist/cli-bundle/chunks/chunk-VFA5EIEN.js.map +1 -0
  152. package/dist/cli-bundle/chunks/{chunk-TLWJP5BF.js → chunk-VQOG2ETB.js} +4 -4
  153. package/dist/cli-bundle/chunks/{chunk-H5IOT54C.js → chunk-VSQE43NO.js} +8 -8
  154. package/dist/cli-bundle/chunks/{chunk-BDA35QG5.js → chunk-W6IEJXNC.js} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-WACRQ26A.js → chunk-WCBB6VI3.js} +637 -9
  156. package/dist/cli-bundle/chunks/chunk-WCBB6VI3.js.map +7 -0
  157. package/dist/cli-bundle/chunks/{chunk-OWP6QFBV.js → chunk-XDWXPG2E.js} +4 -4
  158. package/dist/cli-bundle/chunks/{chunk-CKX4WOPC.js → chunk-XKVHL3MB.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-WL3SS45P.js → chunk-XVB6BATY.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-NVZ6NVHJ.js → chunk-XXWDEQ6O.js} +4 -4
  161. package/dist/cli-bundle/chunks/{chunk-ILVOOAT4.js → chunk-Y2VSGFT4.js} +8 -8
  162. package/dist/cli-bundle/chunks/{chunk-NCVT6XEL.js → chunk-YG56M3NE.js} +11 -11
  163. package/dist/cli-bundle/chunks/{chunk-AFGKSHAM.js → chunk-YGEA4CLH.js} +4 -4
  164. package/dist/cli-bundle/chunks/{chunk-AXRT7K5V.js → chunk-YIC5NGXF.js} +11 -11
  165. package/dist/cli-bundle/chunks/{chunk-DHNG452T.js → chunk-ZF52NVRT.js} +396 -245
  166. package/dist/cli-bundle/chunks/chunk-ZF52NVRT.js.map +7 -0
  167. package/dist/cli-bundle/chunks/{chunk-XXLXJL7V.js → chunk-ZUCBPXNA.js} +4 -4
  168. package/dist/cli-bundle/chunks/{close-X3CF6FQP.js → close-7NWA3GLA.js} +5 -5
  169. package/dist/cli-bundle/chunks/close-ZZCDDWJT.js +12 -0
  170. package/dist/cli-bundle/chunks/close-many-QCZHFCON.js +23 -0
  171. package/dist/cli-bundle/chunks/{close-many-J7A5EHOQ.js → close-many-YALQ7AXS.js} +14 -14
  172. package/dist/cli-bundle/chunks/comments-FMQNYPSZ.js +13 -0
  173. package/dist/cli-bundle/chunks/{comments-TMHMALA5.js → comments-SQIQ5WYR.js} +7 -7
  174. package/dist/cli-bundle/chunks/copy-GI3RCVZP.js +9 -0
  175. package/dist/cli-bundle/chunks/{copy-FWQA5OU4.js → copy-YDAMENCP.js} +4 -4
  176. package/dist/cli-bundle/chunks/{create-AQ5SIGZC.js → create-JSL6CXU3.js} +11 -9
  177. package/dist/cli-bundle/chunks/create-LXMLYJNM.js +29 -0
  178. package/dist/cli-bundle/chunks/delete-5DFAXJNI.js +10 -0
  179. package/dist/cli-bundle/chunks/{delete-YYYFOSEA.js → delete-IGVOZEU2.js} +4 -4
  180. package/dist/cli-bundle/chunks/{deps-NIIKXLPB.js → deps-BQAXUQAK.js} +6 -6
  181. package/dist/cli-bundle/chunks/{deps-MQ4ZIGZB.js → deps-CBPPSS6J.js} +6 -6
  182. package/dist/cli-bundle/chunks/docs-KCWPLQOV.js +14 -0
  183. package/dist/cli-bundle/chunks/{docs-53NUGMIQ.js → docs-NS2AZWCN.js} +7 -7
  184. package/dist/cli-bundle/chunks/{files-3PXGXYDB.js → files-PVWEPT5J.js} +7 -7
  185. package/dist/cli-bundle/chunks/{files-EGLKHD7O.js → files-XUUBQ76I.js} +7 -7
  186. package/dist/cli-bundle/chunks/focus-3EJVFI3D.js +10 -0
  187. package/dist/cli-bundle/chunks/{focus-SRPASFTN.js → focus-DHBHKK3E.js} +5 -5
  188. package/dist/cli-bundle/chunks/{history-compact-G4DULDCX.js → history-compact-3TNPYVFG.js} +6 -6
  189. package/dist/cli-bundle/chunks/history-compact-JHYVDYLW.js +16 -0
  190. package/dist/cli-bundle/chunks/{history-redact-IUSJ6X3E.js → history-redact-ELRL73XN.js} +4 -4
  191. package/dist/cli-bundle/chunks/{history-redact-THHGRQXV.js → history-redact-KKFDICCF.js} +4 -4
  192. package/dist/cli-bundle/chunks/{history-repair-LUQWRS7X.js → history-repair-J7WKZFAG.js} +6 -6
  193. package/dist/cli-bundle/chunks/history-repair-REMI7DDI.js +16 -0
  194. package/dist/cli-bundle/chunks/learnings-O6V5WDCV.js +13 -0
  195. package/dist/cli-bundle/chunks/{learnings-2MRNBFJF.js → learnings-X4D6JCCG.js} +7 -7
  196. package/dist/cli-bundle/chunks/{notes-73JWKWUD.js → notes-UQC6VS6N.js} +7 -7
  197. package/dist/cli-bundle/chunks/notes-ZSZREWZA.js +13 -0
  198. package/dist/cli-bundle/chunks/{plan-AZPMCG37.js → plan-5GKRBJJO.js} +12 -10
  199. package/dist/cli-bundle/chunks/plan-EZW2YDDY.js +26 -0
  200. package/dist/cli-bundle/chunks/{profile-AVCIIZID.js → profile-5PQAPCLF.js} +10 -10
  201. package/dist/cli-bundle/chunks/{profile-LFYO3HHX.js → profile-CW4BD3FO.js} +10 -10
  202. package/dist/cli-bundle/chunks/{register-list-query-UKMF55FT.js → register-list-query-HTDQE6VI.js} +24 -24
  203. package/dist/cli-bundle/chunks/{register-list-query-MZUF2EEC.js → register-list-query-PHIPDFP2.js} +24 -24
  204. package/dist/cli-bundle/chunks/{register-mutation-T6RVNJC4.js → register-mutation-BLEWM5I6.js} +32 -32
  205. package/dist/cli-bundle/chunks/{register-mutation-2PBW2GEX.js → register-mutation-OTYHR7J6.js} +32 -32
  206. package/dist/cli-bundle/chunks/{register-operations-KHZYR6MG.js → register-operations-AMCUFYEW.js} +38 -40
  207. package/dist/cli-bundle/chunks/{register-operations-KHZYR6MG.js.map → register-operations-AMCUFYEW.js.map} +1 -1
  208. package/dist/cli-bundle/chunks/{register-operations-WPQ2LWZJ.js → register-operations-MRLHOZYR.js} +36 -38
  209. package/dist/cli-bundle/chunks/{register-operations-WPQ2LWZJ.js.map → register-operations-MRLHOZYR.js.map} +1 -1
  210. package/dist/cli-bundle/chunks/{register-setup-PGDNOXDQ.js → register-setup-N2FOSWAG.js} +15 -17
  211. package/dist/cli-bundle/chunks/{register-setup-PGDNOXDQ.js.map → register-setup-N2FOSWAG.js.map} +1 -1
  212. package/dist/cli-bundle/chunks/{register-setup-TDN7WAO6.js → register-setup-ZVKTDL4G.js} +17 -19
  213. package/dist/cli-bundle/chunks/{register-setup-TDN7WAO6.js.map → register-setup-ZVKTDL4G.js.map} +1 -1
  214. package/dist/cli-bundle/chunks/restore-A55MLFAI.js +14 -0
  215. package/dist/cli-bundle/chunks/{restore-E3PRGDN3.js → restore-HEQAG6EK.js} +6 -6
  216. package/dist/cli-bundle/chunks/{schema-5JNFQFUW.js → schema-MAXAIHEC.js} +6 -6
  217. package/dist/cli-bundle/chunks/{schema-TMIW4XZC.js → schema-Q5DAWJ2S.js} +6 -6
  218. package/dist/cli-bundle/chunks/update-5DTSCWVF.js +23 -0
  219. package/dist/cli-bundle/chunks/{update-SQYZA3ZW.js → update-DWFXXJKP.js} +15 -13
  220. package/dist/cli-bundle/chunks/update-many-6T4ZLZS7.js +34 -0
  221. package/dist/cli-bundle/chunks/update-many-MYRK6VBJ.js +38 -0
  222. package/dist/cli-bundle/main.js +152 -29
  223. package/dist/cli-bundle/main.js.map +3 -3
  224. package/dist/cli-bundle/sdk-runtime.js +72 -75
  225. package/dist/cli-bundle/sdk-testing.js +8 -8
  226. package/dist/cli-bundle/sdk.js +288 -642
  227. package/dist/cli-bundle/sdk.js.map +4 -4
  228. package/dist/core/extensions/activation-summary.d.ts +2 -0
  229. package/dist/core/extensions/activation-summary.js +7 -2
  230. package/dist/core/extensions/activation-summary.js.map +1 -1
  231. package/dist/core/extensions/capability-usage.d.ts +1 -1
  232. package/dist/core/extensions/capability-usage.js +5 -2
  233. package/dist/core/extensions/capability-usage.js.map +1 -1
  234. package/dist/core/extensions/extension-hook-runtime.js +3 -2
  235. package/dist/core/extensions/extension-hook-runtime.js.map +1 -1
  236. package/dist/core/extensions/extension-registries.js +3 -2
  237. package/dist/core/extensions/extension-registries.js.map +1 -1
  238. package/dist/core/extensions/extension-types.d.ts +38 -1
  239. package/dist/core/extensions/extension-types.js +3 -2
  240. package/dist/core/extensions/extension-types.js.map +1 -1
  241. package/dist/core/extensions/loader.js +36 -2
  242. package/dist/core/extensions/loader.js.map +1 -1
  243. package/dist/core/store/item-store.d.ts +4 -1
  244. package/dist/core/store/item-store.js +3 -3
  245. package/dist/core/store/item-store.js.map +1 -1
  246. package/dist/core/store/paths.d.ts +2 -0
  247. package/dist/core/store/paths.js +26 -3
  248. package/dist/core/store/paths.js.map +1 -1
  249. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  250. package/dist/sdk/compose.d.ts +3 -0
  251. package/dist/sdk/compose.js +14 -2
  252. package/dist/sdk/compose.js.map +1 -1
  253. package/dist/sdk/dependencies.js +3 -3
  254. package/dist/sdk/dependencies.js.map +1 -1
  255. package/dist/sdk/extension-command-context.d.ts +10 -0
  256. package/dist/sdk/extension-command-context.js +30 -0
  257. package/dist/sdk/extension-command-context.js.map +1 -0
  258. package/dist/sdk/graph/assembly.js +14 -4
  259. package/dist/sdk/graph/assembly.js.map +1 -1
  260. package/dist/sdk/graph/index.d.ts +1 -0
  261. package/dist/sdk/graph/index.js +3 -2
  262. package/dist/sdk/graph/index.js.map +1 -1
  263. package/dist/sdk/graph/mutation-advisory.d.ts +20 -0
  264. package/dist/sdk/graph/mutation-advisory.js +80 -0
  265. package/dist/sdk/graph/mutation-advisory.js.map +1 -0
  266. package/dist/sdk/graph/run.d.ts +5 -1
  267. package/dist/sdk/graph/run.js +11 -3
  268. package/dist/sdk/graph/run.js.map +1 -1
  269. package/dist/sdk/index.d.ts +4 -1
  270. package/dist/sdk/index.js +5 -2
  271. package/dist/sdk/index.js.map +1 -1
  272. package/dist/sdk/ownership-source.d.ts +2 -0
  273. package/dist/sdk/ownership-source.js +22 -0
  274. package/dist/sdk/ownership-source.js.map +1 -0
  275. package/dist/sdk/relationship-history.d.ts +38 -0
  276. package/dist/sdk/relationship-history.js +60 -2
  277. package/dist/sdk/relationship-history.js.map +1 -1
  278. package/dist/sdk/relationships.js +49 -8
  279. package/dist/sdk/relationships.js.map +1 -1
  280. package/dist/sdk/runtime-input.js +3 -2
  281. package/dist/sdk/runtime-input.js.map +1 -1
  282. package/dist/sdk/runtime.d.ts +2 -0
  283. package/dist/sdk/runtime.js +19 -2
  284. package/dist/sdk/runtime.js.map +1 -1
  285. package/dist/sdk/tracker-root-discovery.d.ts +6 -0
  286. package/dist/sdk/tracker-root-discovery.js +10 -0
  287. package/dist/sdk/tracker-root-discovery.js.map +1 -0
  288. package/dist/sdk/workspace-transaction.d.ts +83 -0
  289. package/dist/sdk/workspace-transaction.js +364 -0
  290. package/dist/sdk/workspace-transaction.js.map +1 -0
  291. package/docs/AGENT_UX_CONTRACTS.md +41 -0
  292. package/docs/EXTENSIONS.md +4 -4
  293. package/docs/README.md +1 -0
  294. package/docs/SDK.md +102 -1
  295. package/marketplace.json +2 -2
  296. package/package.json +1 -1
  297. package/packages/pm-beads/package.json +1 -1
  298. package/packages/pm-calendar/package.json +1 -1
  299. package/packages/pm-command-kit/package.json +1 -1
  300. package/packages/pm-governance-audit/package.json +1 -1
  301. package/packages/pm-guide-shell/package.json +1 -1
  302. package/packages/pm-kanban/package.json +1 -1
  303. package/packages/pm-lifecycle-hooks/package.json +1 -1
  304. package/packages/pm-linked-test-adapters/package.json +1 -1
  305. package/packages/pm-search-advanced/package.json +1 -1
  306. package/packages/pm-templates/package.json +1 -1
  307. package/packages/pm-todos/package.json +1 -1
  308. package/packages/pm-vcs/GAP_REPORT.md +31 -0
  309. package/packages/pm-vcs/README.md +62 -0
  310. package/packages/pm-vcs/extensions/vcs/index.ts +745 -0
  311. package/packages/pm-vcs/extensions/vcs/manifest.json +19 -0
  312. package/packages/pm-vcs/extensions/vcs/package.json +3 -0
  313. package/packages/pm-vcs/package.json +55 -0
  314. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  315. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  316. package/dist/cli-bundle/chunks/append-JHO5K6RP.js +0 -11
  317. package/dist/cli-bundle/chunks/chunk-2BX74BAS.js +0 -125
  318. package/dist/cli-bundle/chunks/chunk-2BX74BAS.js.map +0 -7
  319. package/dist/cli-bundle/chunks/chunk-3CUQZNQ6.js +0 -672
  320. package/dist/cli-bundle/chunks/chunk-3CUQZNQ6.js.map +0 -7
  321. package/dist/cli-bundle/chunks/chunk-5UKQLQM2.js.map +0 -1
  322. package/dist/cli-bundle/chunks/chunk-6VHUGVNP.js.map +0 -1
  323. package/dist/cli-bundle/chunks/chunk-74FKFFXO.js +0 -172
  324. package/dist/cli-bundle/chunks/chunk-74FKFFXO.js.map +0 -7
  325. package/dist/cli-bundle/chunks/chunk-ADXDCAKP.js.map +0 -7
  326. package/dist/cli-bundle/chunks/chunk-BAP7G3N2.js +0 -178
  327. package/dist/cli-bundle/chunks/chunk-BAP7G3N2.js.map +0 -7
  328. package/dist/cli-bundle/chunks/chunk-D53RTYVI.js.map +0 -7
  329. package/dist/cli-bundle/chunks/chunk-DHNG452T.js.map +0 -7
  330. package/dist/cli-bundle/chunks/chunk-EY7ZE3TG.js +0 -1831
  331. package/dist/cli-bundle/chunks/chunk-EY7ZE3TG.js.map +0 -1
  332. package/dist/cli-bundle/chunks/chunk-F3VC3GOV.js.map +0 -7
  333. package/dist/cli-bundle/chunks/chunk-FL4D53ND.js +0 -162
  334. package/dist/cli-bundle/chunks/chunk-FL4D53ND.js.map +0 -1
  335. package/dist/cli-bundle/chunks/chunk-GKPCTQYG.js.map +0 -7
  336. package/dist/cli-bundle/chunks/chunk-HPAYDSR2.js.map +0 -7
  337. package/dist/cli-bundle/chunks/chunk-HTXXXF45.js.map +0 -1
  338. package/dist/cli-bundle/chunks/chunk-I3INI567.js.map +0 -7
  339. package/dist/cli-bundle/chunks/chunk-KX62NMZC.js.map +0 -1
  340. package/dist/cli-bundle/chunks/chunk-L5BTTDU5.js +0 -662
  341. package/dist/cli-bundle/chunks/chunk-L5BTTDU5.js.map +0 -1
  342. package/dist/cli-bundle/chunks/chunk-MR4SHYR4.js.map +0 -7
  343. package/dist/cli-bundle/chunks/chunk-OGVTB5VO.js.map +0 -7
  344. package/dist/cli-bundle/chunks/chunk-QPGQNLPI.js.map +0 -1
  345. package/dist/cli-bundle/chunks/chunk-QRZNCRNA.js.map +0 -1
  346. package/dist/cli-bundle/chunks/chunk-RC4UOUXA.js +0 -122
  347. package/dist/cli-bundle/chunks/chunk-RC4UOUXA.js.map +0 -1
  348. package/dist/cli-bundle/chunks/chunk-RTBX3C4C.js +0 -1841
  349. package/dist/cli-bundle/chunks/chunk-RTBX3C4C.js.map +0 -7
  350. package/dist/cli-bundle/chunks/chunk-SIPOACV5.js.map +0 -1
  351. package/dist/cli-bundle/chunks/chunk-WACRQ26A.js.map +0 -7
  352. package/dist/cli-bundle/chunks/chunk-XC2HEEOV.js.map +0 -1
  353. package/dist/cli-bundle/chunks/chunk-XPUTSGJU.js.map +0 -1
  354. package/dist/cli-bundle/chunks/chunk-YIIIAKCE.js.map +0 -1
  355. package/dist/cli-bundle/chunks/chunk-YJSURTBB.js +0 -175
  356. package/dist/cli-bundle/chunks/chunk-YJSURTBB.js.map +0 -1
  357. package/dist/cli-bundle/chunks/chunk-YQEZWI3R.js.map +0 -7
  358. package/dist/cli-bundle/chunks/close-GPD7DTJV.js +0 -12
  359. package/dist/cli-bundle/chunks/close-many-NQLYGPYW.js +0 -23
  360. package/dist/cli-bundle/chunks/comments-2AOZQ5D2.js +0 -13
  361. package/dist/cli-bundle/chunks/copy-N3LCQBMC.js +0 -9
  362. package/dist/cli-bundle/chunks/create-KOGQ3JKD.js +0 -27
  363. package/dist/cli-bundle/chunks/delete-6G3MBZ6S.js +0 -10
  364. package/dist/cli-bundle/chunks/docs-OWRGDMNY.js +0 -14
  365. package/dist/cli-bundle/chunks/focus-KZLIA6WS.js +0 -10
  366. package/dist/cli-bundle/chunks/history-compact-HHIUOMZ7.js +0 -16
  367. package/dist/cli-bundle/chunks/history-repair-KG7SWXI6.js +0 -16
  368. package/dist/cli-bundle/chunks/learnings-ZVHSALJY.js +0 -13
  369. package/dist/cli-bundle/chunks/notes-BAKUL5DJ.js +0 -13
  370. package/dist/cli-bundle/chunks/plan-LEAGLPGP.js +0 -24
  371. package/dist/cli-bundle/chunks/restore-KIUYTAEJ.js +0 -14
  372. package/dist/cli-bundle/chunks/update-XZJYS5X7.js +0 -21
  373. package/dist/cli-bundle/chunks/update-many-R24B3GBK.js +0 -36
  374. package/dist/cli-bundle/chunks/update-many-WQ3R3J6N.js +0 -32
  375. /package/dist/cli-bundle/chunks/{append-5YF3TO7I.js.map → append-MBXHNWSX.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{append-JHO5K6RP.js.map → append-XUYF7NON.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-BIRYX32V.js.map → chunk-2UCG5H6B.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-VE6ZSTQW.js.map → chunk-2XPDCXK5.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-GLZKZON6.js.map → chunk-3HSRP6T2.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-XWBD6DSR.js.map → chunk-3KPNOZOH.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-HO4DLBNK.js.map → chunk-4M6RZJXF.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-RXPQ5Q23.js.map → chunk-4PSJVGRE.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{chunk-YFE7JHX3.js.map → chunk-6BNV3G6C.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{chunk-43UMFKCK.js.map → chunk-6V4T4RD3.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{chunk-EHJFUOXL.js.map → chunk-7B7IHMLH.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{chunk-I7DIDUSP.js.map → chunk-7CHWLT2J.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{chunk-L6FVNR7X.js.map → chunk-A3GAQLBH.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{chunk-B57RJHBZ.js.map → chunk-A4FVWFZY.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{chunk-D52ZN3BF.js.map → chunk-A5EQPNV7.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{chunk-TZAE66GQ.js.map → chunk-AGEBQRBG.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{chunk-WU3KAN6A.js.map → chunk-AQUNTB7G.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{chunk-XWYQ2LT4.js.map → chunk-BBGR4FKQ.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{chunk-2FUOXSRN.js.map → chunk-BFJP4VYC.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{chunk-633PKXLT.js.map → chunk-BZKE2O5V.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{chunk-L337QKWJ.js.map → chunk-DUDLSQFG.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{chunk-BVLOMU6O.js.map → chunk-E7KBMWEF.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{chunk-WQXRZMFN.js.map → chunk-EEECAV5M.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{chunk-35FHWD4C.js.map → chunk-EI3UIMZM.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{chunk-PT7MCCGD.js.map → chunk-FIUTBFC6.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{chunk-7H5NNCJ5.js.map → chunk-FQF6VVPH.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{chunk-6DYOZS6C.js.map → chunk-FQO5THHM.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{chunk-5HGZKQUL.js.map → chunk-FQODDTE7.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{chunk-67RO3H4N.js.map → chunk-G33XIMRT.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{chunk-QWBKN3QC.js.map → chunk-GKCEEXMA.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{chunk-DG2EQRIH.js.map → chunk-GRDK25BN.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{chunk-FXFCFL73.js.map → chunk-H3YKUVDR.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{chunk-ARGDWQ4J.js.map → chunk-IGBBTPM5.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{chunk-FY4RLHSC.js.map → chunk-IRJ6F23W.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{chunk-66MKH7SZ.js.map → chunk-IXG5CMBR.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{chunk-7UCY6DR5.js.map → chunk-JPWUZOMR.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{chunk-FVNWHUME.js.map → chunk-K2L6FZBX.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{chunk-X2MGQMZO.js.map → chunk-LT5UWU7H.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{chunk-KH6QAHME.js.map → chunk-M4B4RK4J.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{chunk-2XOSFSTH.js.map → chunk-MQOSMBWV.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{chunk-7R6UIHYY.js.map → chunk-N2TEEOXJ.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{chunk-NTRQLE2R.js.map → chunk-N7FCFJ76.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{chunk-37DRDP2B.js.map → chunk-NPEYH6CE.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{chunk-2CXL335K.js.map → chunk-OK7VSX3N.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{chunk-NNANAWFH.js.map → chunk-OKPZDH43.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{chunk-G6MYGULG.js.map → chunk-OKWJUL6F.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{chunk-D5XHO4Q7.js.map → chunk-Q6JPYR7I.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{chunk-IE5KRAKN.js.map → chunk-QQ77W23U.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{chunk-M7MVOKVV.js.map → chunk-QYGK2XQ3.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{chunk-X5YCTFKT.js.map → chunk-RWAIRGBC.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{chunk-W5E2UUSH.js.map → chunk-RX53WHFI.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{chunk-R5XTTZSJ.js.map → chunk-SBW7EQC4.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{chunk-TM5CIO3F.js.map → chunk-SGJB6PXA.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{chunk-DDFGYUCQ.js.map → chunk-STBCBDKF.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{chunk-FHOBCGQO.js.map → chunk-SVAWG7EE.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{chunk-6O44IN44.js.map → chunk-T6MOTLOJ.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{chunk-EWIT5WIC.js.map → chunk-U6RYD446.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{chunk-E4FXM2XB.js.map → chunk-UE7LK3RE.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{chunk-N33FD2UI.js.map → chunk-UNNCT5QY.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{chunk-2IPNL3DR.js.map → chunk-UOIFZ66L.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{chunk-LSOWTLEM.js.map → chunk-UU6EP25G.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{chunk-HYTOJW2Q.js.map → chunk-UW6HCMP2.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{chunk-47HXN6RX.js.map → chunk-UWAQI3B7.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{chunk-YKFHF37B.js.map → chunk-V4QHAMI5.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{chunk-VAHZIPWS.js.map → chunk-VA3H7VVC.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{chunk-TLWJP5BF.js.map → chunk-VQOG2ETB.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{chunk-H5IOT54C.js.map → chunk-VSQE43NO.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{chunk-BDA35QG5.js.map → chunk-W6IEJXNC.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{chunk-OWP6QFBV.js.map → chunk-XDWXPG2E.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{chunk-CKX4WOPC.js.map → chunk-XKVHL3MB.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{chunk-WL3SS45P.js.map → chunk-XVB6BATY.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{chunk-NVZ6NVHJ.js.map → chunk-XXWDEQ6O.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{chunk-ILVOOAT4.js.map → chunk-Y2VSGFT4.js.map} +0 -0
  448. /package/dist/cli-bundle/chunks/{chunk-NCVT6XEL.js.map → chunk-YG56M3NE.js.map} +0 -0
  449. /package/dist/cli-bundle/chunks/{chunk-AFGKSHAM.js.map → chunk-YGEA4CLH.js.map} +0 -0
  450. /package/dist/cli-bundle/chunks/{chunk-AXRT7K5V.js.map → chunk-YIC5NGXF.js.map} +0 -0
  451. /package/dist/cli-bundle/chunks/{chunk-XXLXJL7V.js.map → chunk-ZUCBPXNA.js.map} +0 -0
  452. /package/dist/cli-bundle/chunks/{close-X3CF6FQP.js.map → close-7NWA3GLA.js.map} +0 -0
  453. /package/dist/cli-bundle/chunks/{close-GPD7DTJV.js.map → close-ZZCDDWJT.js.map} +0 -0
  454. /package/dist/cli-bundle/chunks/{close-many-NQLYGPYW.js.map → close-many-QCZHFCON.js.map} +0 -0
  455. /package/dist/cli-bundle/chunks/{close-many-J7A5EHOQ.js.map → close-many-YALQ7AXS.js.map} +0 -0
  456. /package/dist/cli-bundle/chunks/{comments-2AOZQ5D2.js.map → comments-FMQNYPSZ.js.map} +0 -0
  457. /package/dist/cli-bundle/chunks/{comments-TMHMALA5.js.map → comments-SQIQ5WYR.js.map} +0 -0
  458. /package/dist/cli-bundle/chunks/{copy-N3LCQBMC.js.map → copy-GI3RCVZP.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{copy-FWQA5OU4.js.map → copy-YDAMENCP.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{create-AQ5SIGZC.js.map → create-JSL6CXU3.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{create-KOGQ3JKD.js.map → create-LXMLYJNM.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{delete-6G3MBZ6S.js.map → delete-5DFAXJNI.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{delete-YYYFOSEA.js.map → delete-IGVOZEU2.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{deps-NIIKXLPB.js.map → deps-BQAXUQAK.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{deps-MQ4ZIGZB.js.map → deps-CBPPSS6J.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{docs-OWRGDMNY.js.map → docs-KCWPLQOV.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{docs-53NUGMIQ.js.map → docs-NS2AZWCN.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{files-3PXGXYDB.js.map → files-PVWEPT5J.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{files-EGLKHD7O.js.map → files-XUUBQ76I.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{focus-KZLIA6WS.js.map → focus-3EJVFI3D.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{focus-SRPASFTN.js.map → focus-DHBHKK3E.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{history-compact-G4DULDCX.js.map → history-compact-3TNPYVFG.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{history-compact-HHIUOMZ7.js.map → history-compact-JHYVDYLW.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{history-redact-IUSJ6X3E.js.map → history-redact-ELRL73XN.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{history-redact-THHGRQXV.js.map → history-redact-KKFDICCF.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{history-repair-LUQWRS7X.js.map → history-repair-J7WKZFAG.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{history-repair-KG7SWXI6.js.map → history-repair-REMI7DDI.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{learnings-ZVHSALJY.js.map → learnings-O6V5WDCV.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{learnings-2MRNBFJF.js.map → learnings-X4D6JCCG.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{notes-73JWKWUD.js.map → notes-UQC6VS6N.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{notes-BAKUL5DJ.js.map → notes-ZSZREWZA.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{plan-AZPMCG37.js.map → plan-5GKRBJJO.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{plan-LEAGLPGP.js.map → plan-EZW2YDDY.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{profile-AVCIIZID.js.map → profile-5PQAPCLF.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{profile-LFYO3HHX.js.map → profile-CW4BD3FO.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{register-list-query-UKMF55FT.js.map → register-list-query-HTDQE6VI.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{register-list-query-MZUF2EEC.js.map → register-list-query-PHIPDFP2.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{register-mutation-T6RVNJC4.js.map → register-mutation-BLEWM5I6.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{register-mutation-2PBW2GEX.js.map → register-mutation-OTYHR7J6.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{restore-KIUYTAEJ.js.map → restore-A55MLFAI.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{restore-E3PRGDN3.js.map → restore-HEQAG6EK.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{schema-5JNFQFUW.js.map → schema-MAXAIHEC.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{schema-TMIW4XZC.js.map → schema-Q5DAWJ2S.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{update-XZJYS5X7.js.map → update-5DTSCWVF.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{update-SQYZA3ZW.js.map → update-DWFXXJKP.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{update-many-WQ3R3J6N.js.map → update-many-6T4ZLZS7.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{update-many-R24B3GBK.js.map → update-many-MYRK6VBJ.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"relationships.js","sources":["sdk/relationships.ts"],"sourceRoot":"/","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"],"names":[],"mappings":"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","debugId":"00588d49-70aa-59c8-bc85-d0bbd5e77d4b"}
1
+ {"version":3,"file":"relationships.js","sources":["sdk/relationships.ts"],"sourceRoot":"/","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/** Validate and normalize the stable identifier and compatibility version. */\nfunction normalizeRelationshipKindIdentifier(\n definition: RelationshipKindDefinition,\n): string {\n if (typeof definition !== \"object\" || definition === null)\n throw new TypeError(\"Relationship kind definition requires an object\");\n if (typeof definition.kind !== \"string\")\n throw new TypeError(\"Relationship kind requires a string identifier\");\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 return kind;\n}\n\n/** Validate traversal, ordering, hierarchy, cardinality, and lifecycle semantics. */\nfunction assertRelationshipKindSemantics(\n definition: RelationshipKindDefinition,\n kind: string,\n): void {\n if (![\"directed\", \"undirected\"].includes(definition.direction))\n throw new TypeError(`Invalid relationship direction for ${kind}`);\n if (typeof definition.ordering !== \"boolean\")\n throw new TypeError(`Invalid relationship ordering flag for ${kind}`);\n if (![undefined, true, false].includes(definition.hierarchy))\n throw new TypeError(`Invalid relationship hierarchy flag for ${kind}`);\n if (![\"one\", \"many\"].includes(definition.outgoing))\n throw new TypeError(`Invalid outgoing relationship cardinality for ${kind}`);\n if (![\"one\", \"many\"].includes(definition.incoming))\n throw new TypeError(`Invalid incoming relationship cardinality for ${kind}`);\n if (\n ![\"persistent\", \"supersedable\", \"ephemeral\"].includes(\n definition.lifecycle,\n )\n )\n throw new TypeError(`Invalid relationship lifecycle for ${kind}`);\n if (typeof definition.allowSelf !== \"boolean\")\n throw new TypeError(`Invalid relationship self-edge flag for ${kind}`);\n}\n\n/** Validate application payload-schema and compatibility-alias containers. */\nfunction assertRelationshipKindPayload(\n definition: RelationshipKindDefinition,\n kind: string,\n): void {\n if (\n definition.payloadSchema !== undefined &&\n (typeof definition.payloadSchema !== \"object\" ||\n definition.payloadSchema === null ||\n Array.isArray(definition.payloadSchema))\n )\n throw new TypeError(`Invalid relationship payload schema for ${kind}`);\n if (\n definition.aliases !== undefined &&\n (!Array.isArray(definition.aliases) ||\n definition.aliases.some((alias) => typeof alias !== \"string\"))\n )\n throw new TypeError(`Invalid relationship aliases for ${kind}`);\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 = normalizeRelationshipKindIdentifier(definition);\n assertRelationshipKindSemantics(definition, kind);\n assertRelationshipKindPayload(definition, 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 hierarchy: definition.hierarchy ?? false,\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"],"names":[],"mappings":"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","debugId":"d57e6d37-e489-5e57-b146-bcc9fab2e3d7"}
@@ -5,7 +5,7 @@
5
5
  * primitives are shared by native action dispatchers and MCP-specific adapters.
6
6
  */
7
7
 
8
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="52271df3-791f-5fa8-8666-c8edc31a5cbe")}catch(e){}}();
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9c53751c-01db-59ad-a024-b761d4b08030")}catch(e){}}();
9
9
  import { EXIT_CODE } from "../core/shared/constants.js";
10
10
  import { PmCliError } from "../core/shared/errors.js";
11
11
  import { asRecordClone } from "../core/shared/primitives.js";
@@ -64,6 +64,7 @@ export function actionGlobalOptions(args) {
64
64
  return {
65
65
  json: true,
66
66
  quiet: true,
67
+ author: readRuntimeString(args, "author"),
67
68
  path: readRuntimeString(args, "path"),
68
69
  noExtensions: args.noExtensions === true || args.no_extensions === true,
69
70
  noPager: true,
@@ -477,4 +478,4 @@ export function updateManyOptionsFromFlat(options) {
477
478
  };
478
479
  }
479
480
  //# sourceMappingURL=runtime-input.js.map
480
- //# debugId=52271df3-791f-5fa8-8666-c8edc31a5cbe
481
+ //# debugId=9c53751c-01db-59ad-a024-b761d4b08030
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-input.js","sources":["sdk/runtime-input.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module sdk/runtime-input\n *\n * Normalizes untyped action payload values at the SDK runtime boundary. These\n * primitives are shared by native action dispatchers and MCP-specific adapters.\n */\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../core/shared/command-types.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { asRecordClone } from \"../core/shared/primitives.js\";\nimport {\n normalizeListOptions,\n normalizeUpdateOptions,\n} from \"../cli/registration-helpers.js\";\nimport type { CloseManyCommandOptions } from \"../cli/commands/close-many.js\";\nimport type { UpdateManyCommandOptions } from \"../cli/commands/update-many.js\";\nimport { UPDATE_COMMANDER_STRING_OPTION_CONTRACTS } from \"./cli-contracts/commander-mutation-options.js\";\nimport type { GraphCommandOptions } from \"./graph/run.js\";\nimport type { ListOptions } from \"./query/list.js\";\n\n/** Read a non-empty string without altering its caller-provided whitespace. */\nexport function readRuntimeString(\n args: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = args[key];\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\n/** Normalize a non-empty string or finite number into a scalar string. */\nexport function readRuntimeScalarString(\n args: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = args[key];\n if (typeof value === \"string\") {\n return value.trim().length > 0 ? value : undefined;\n }\n return typeof value === \"number\" && Number.isFinite(value)\n ? String(value)\n : undefined;\n}\n\n/** Normalize a string, including blank text, or a finite number into text. */\nexport function readRuntimeScalarStringAllowBlank(\n args: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = args[key];\n if (typeof value === \"string\") {\n return value;\n }\n return typeof value === \"number\" && Number.isFinite(value)\n ? String(value)\n : undefined;\n}\n\n/** Narrow unknown values to plain record-shaped action payloads. */\nexport function isRuntimeRecord(\n value: unknown,\n): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Parse an integer-valued MCP option while retaining a caller-specific label. */\nexport function parseRuntimeInteger(\n value: unknown,\n label: string,\n): number | undefined {\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) {\n throw new PmCliError(\n `${label} must be a finite integer.`,\n EXIT_CODE.USAGE,\n );\n }\n return value;\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n if (!Number.isInteger(parsed)) {\n throw new PmCliError(\n `${label} must be a finite integer.`,\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n }\n return undefined;\n}\n\n/** Fixed SDK-runtime global options derived from one untyped action payload. */\nexport function actionGlobalOptions(\n args: Record<string, unknown>,\n): GlobalOptions {\n return {\n json: true,\n quiet: true,\n path: readRuntimeString(args, \"path\"),\n noExtensions: args.noExtensions === true || args.no_extensions === true,\n noPager: true,\n };\n}\n\n/** Fields whose MCP array values collapse into the CLI's CSV spelling. */\nconst ARRAY_TO_CSV_FIELDS = new Set([\n \"tags\",\n \"blockedBy\",\n \"blocked_by\",\n \"skills\",\n \"fields\",\n]);\n\n/** Fields whose scalar MCP values promote into the CLI's repeatable arrays. */\nconst SCALAR_TO_ARRAY_FIELDS = new Set([\n \"comment\",\n \"note\",\n \"learning\",\n \"reminder\",\n \"event\",\n \"dep\",\n \"depRemove\",\n \"dep_remove\",\n \"file\",\n \"doc\",\n \"test\",\n \"unset\",\n \"addGlob\",\n \"add_glob\",\n \"migrate\",\n \"envSet\",\n \"env_set\",\n \"envClear\",\n \"env_clear\",\n]);\n\n// Actions where the linked-resource fields `add` and `remove` are string[] arrays.\n// For other actions (comments/notes/learnings) `add` and `remove` are scalar strings\n// and must NOT be auto-promoted.\nconst ARRAY_ADD_REMOVE_ACTIONS = new Set([\n \"files\",\n \"files-discover\",\n \"docs\",\n \"test\",\n \"test-all\",\n]);\n\n/** Lifecycle actions where a top-level assignee argument aliases the author. */\nconst LIFECYCLE_AUTHOR_ALIAS_ACTIONS = new Set([\n \"claim\",\n \"release\",\n \"start-task\",\n \"pause-task\",\n \"close-task\",\n]);\n\n/** Reconcile MCP array/scalar option spellings with CLI flag expectations. */\nexport function normalizeMcpOptionsArrays(\n options: Record<string, unknown>,\n action?: string,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const promoteAddRemove =\n action !== undefined && ARRAY_ADD_REMOVE_ACTIONS.has(action);\n const preserveStandaloneNote =\n action === \"files\" || action === \"files-discover\" || action === \"docs\";\n for (const [key, value] of Object.entries(options)) {\n if (Array.isArray(value) && ARRAY_TO_CSV_FIELDS.has(key)) {\n result[key] = value.join(\",\");\n continue;\n }\n if (key === \"note\" && preserveStandaloneNote) {\n result[key] = value;\n continue;\n }\n if (typeof value === \"string\" && SCALAR_TO_ARRAY_FIELDS.has(key)) {\n result[key] = [value];\n continue;\n }\n if (\n typeof value === \"string\" &&\n promoteAddRemove &&\n (key === \"add\" || key === \"remove\")\n ) {\n result[key] = [value];\n continue;\n }\n result[key] = value;\n }\n return result;\n}\n\n/** Merge hoisted top-level action arguments and author aliases into options. */\nexport function optionsWithAuthor(\n args: Record<string, unknown>,\n action?: string,\n): Record<string, unknown> {\n const baseOptions = asRecordClone(args.options);\n const hoistedTopLevel: Record<string, unknown> = {};\n const hoistKey = (key: string): void => {\n if (baseOptions[key] !== undefined || args[key] === undefined) {\n return;\n }\n hoistedTopLevel[key] = args[key];\n };\n if (action === \"list\") {\n hoistKey(\"status\");\n hoistKey(\"type\");\n hoistKey(\"tag\");\n hoistKey(\"priority\");\n hoistKey(\"limit\");\n hoistKey(\"offset\");\n } else if (action === \"search\") {\n hoistKey(\"mode\");\n hoistKey(\"status\");\n hoistKey(\"type\");\n hoistKey(\"tag\");\n hoistKey(\"priority\");\n hoistKey(\"limit\");\n } else if (action === \"create\") {\n hoistKey(\"title\");\n hoistKey(\"type\");\n hoistKey(\"status\");\n hoistKey(\"description\");\n hoistKey(\"body\");\n hoistKey(\"priority\");\n hoistKey(\"tags\");\n hoistKey(\"parent\");\n hoistKey(\"createMode\");\n hoistKey(\"create_mode\");\n hoistKey(\"allowMissingParent\");\n } else if (action === \"close\") {\n hoistKey(\"duplicateOf\");\n } else if (action === \"append\") {\n // pm-7u9j: the narrow pm_append tool declares `body` top-level; runAppend\n // reads it from options, so hoist unless options.body already wins.\n // (pm_schema/pm_config top-level args are consumed directly by runAction's\n // schema/config cases, which read args before options — no hoist needed.)\n hoistKey(\"body\");\n }\n const options = normalizeMcpOptionsArrays(\n { ...hoistedTopLevel, ...baseOptions },\n action,\n );\n const author = readRuntimeString(args, \"author\");\n const authorFromAssignee =\n action !== undefined && LIFECYCLE_AUTHOR_ALIAS_ACTIONS.has(action)\n ? (readRuntimeString(args, \"assignee\") ??\n readRuntimeString(options, \"assignee\"))\n : undefined;\n if (author && options.author === undefined) {\n return { ...options, author };\n }\n if (authorFromAssignee && options.author === undefined) {\n return { ...options, author: authorFromAssignee };\n }\n return options;\n}\n\n// GH-170 (pm-pfnx): the narrow pm_files/pm_docs tools spell the CLI --note flag\n// as `addNote` (the shared `note` parameter is the array-typed create/update\n// note seed). Translate it onto the runner's `note` option; an explicit\n// options.note (pm_run callers) wins.\n/** Translate the MCP-only addNote spelling onto the runner note option. */\nexport function withAddNoteOption(\n options: Record<string, unknown>,\n): Record<string, unknown> {\n if (options.addNote === undefined) {\n return options;\n }\n const next: Record<string, unknown> = { ...options };\n if (next.note === undefined && typeof next.addNote === \"string\") {\n next.note = next.addNote;\n }\n delete next.addNote;\n return next;\n}\n\n/** Map files-discover MCP controls onto the files runner's option shape. */\nexport function withFilesDiscoveryOptions(\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const next: Record<string, unknown> = { ...options };\n if (\n next.discoveryNote !== undefined &&\n next.note === undefined &&\n typeof next.discoveryNote === \"string\"\n ) {\n next.note = next.discoveryNote;\n }\n delete next.discover;\n delete next.discoveryNote;\n return next;\n}\n\n/** Canonicalize one action name into lower-kebab-case tokens. */\nexport function normalizeActionName(value: string): string {\n const chunks: string[] = [];\n let lastWasSeparator = true;\n for (const character of value.trim().toLowerCase()) {\n const isAlphaNumeric =\n (character >= \"a\" && character <= \"z\") ||\n (character >= \"0\" && character <= \"9\");\n if (isAlphaNumeric) {\n chunks.push(character);\n lastWasSeparator = false;\n continue;\n }\n if (!lastWasSeparator) {\n chunks.push(\"-\");\n lastWasSeparator = true;\n }\n }\n if (chunks.at(-1) === \"-\") {\n chunks.pop();\n }\n return chunks.join(\"\");\n}\n\n/** Canonicalize one space-separated command path for lookup comparisons. */\nexport function normalizeCommandPath(value: string): string {\n return value.trim().toLowerCase().split(/\\s+/).filter(Boolean).join(\" \");\n}\n\n/** Coerce an unknown payload value into a non-empty string array. */\nexport function readRuntimeStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => String(entry))\n .filter((entry) => entry.length > 0);\n}\n\n/** Merge non-reserved top-level extension arguments into the options record. */\nexport function extensionOptionsFromArgs(\n args: Record<string, unknown>,\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const reserved = new Set([\n \"action\",\n \"args\",\n \"author\",\n \"cwd\",\n \"fullChangedFields\",\n \"id\",\n \"options\",\n \"path\",\n \"query\",\n \"reason\",\n \"target\",\n ]);\n const passthrough: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(args)) {\n if (!reserved.has(key)) {\n passthrough[key] = value;\n }\n }\n const normalizedOptions = { ...passthrough, ...options };\n delete normalizedOptions.args;\n return normalizedOptions;\n}\n\n/** Mutation tools (create/update/close/append/update-many) return a verbose `changed_fields` array. On the agent path we drop it to a `changed_field_count` by default for token efficiency, restoring the full array only when the caller explicitly passes the MCP-level fullChangedFields=true control. Mutation options are forwarded unchanged so runtime fields named `full` remain valid user data. */\nexport function withMutationCompaction(\n args: Record<string, unknown>,\n options?: Record<string, unknown> | null,\n): {\n changedFields: \"full\" | \"compact\";\n idOnly: boolean;\n runnerOptions: Record<string, unknown>;\n} {\n return {\n changedFields: args.fullChangedFields === true ? \"full\" : \"compact\",\n idOnly: args.idOnly === true,\n runnerOptions: { ...options },\n };\n}\n\n/** Translate flat MCP filter parameters into the shared list-option shape. */\nexport function mutationListOptions(\n options: Record<string, unknown>,\n): ListOptions {\n return {\n type: readRuntimeScalarString(options, \"filterType\"),\n tag: readRuntimeScalarString(options, \"filterTag\"),\n priority: readRuntimeScalarString(options, \"filterPriority\"),\n deadlineBefore: readRuntimeScalarString(options, \"filterDeadlineBefore\"),\n deadlineAfter: readRuntimeScalarString(options, \"filterDeadlineAfter\"),\n updatedAfter: readRuntimeScalarString(options, \"filterUpdatedAfter\"),\n updatedBefore: readRuntimeScalarString(options, \"filterUpdatedBefore\"),\n createdAfter: readRuntimeScalarString(options, \"filterCreatedAfter\"),\n createdBefore: readRuntimeScalarString(options, \"filterCreatedBefore\"),\n ids: readRuntimeScalarStringAllowBlank(options, \"ids\"),\n assignee: readRuntimeScalarString(options, \"filterAssignee\"),\n assigneeFilter:\n readRuntimeScalarString(options, \"filterAssigneeFilter\") ??\n readRuntimeScalarString(options, \"filterAssignee_filter\"),\n parent: readRuntimeScalarString(options, \"filterParent\"),\n sprint: readRuntimeScalarString(options, \"filterSprint\"),\n release: readRuntimeScalarString(options, \"filterRelease\"),\n limit: readRuntimeScalarString(options, \"limit\"),\n offset: readRuntimeScalarString(options, \"offset\"),\n };\n}\n\n/** Read one graph option that accepts scalar strings or repeatable arrays. */\nfunction readGraphIdListOption(value: unknown): string | string[] | undefined {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n if (Array.isArray(value)) return readRuntimeStringArray(value);\n return undefined;\n}\n\n/** Read one graph bound that accepts integer numbers or numeric strings. */\nfunction readGraphBoundOption(value: unknown): string | number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return undefined;\n}\n\n/** Build graph command options from one flat MCP parameter payload. */\nexport function graphOptionsFromFlat(\n options: Record<string, unknown>,\n): GraphCommandOptions {\n const kind = readGraphIdListOption(options.kind);\n const exemptIsolate = readGraphIdListOption(options.exemptIsolate);\n return {\n ...(kind === undefined ? {} : { kind }),\n maxDepth: readGraphBoundOption(options.maxDepth),\n limit: readGraphBoundOption(options.limit),\n after: readRuntimeString(options, \"after\"),\n direction: readRuntimeString(options, \"direction\"),\n maxPaths: readGraphBoundOption(options.maxPaths),\n sample: readGraphBoundOption(options.sample),\n ...(exemptIsolate === undefined ? {} : { exemptIsolate }),\n summary: options.summary === true,\n };\n}\n\n/** Build close-many command options from one flat MCP parameter payload. */\nexport function closeManyOptionsFromFlat(\n options: Record<string, unknown>,\n): CloseManyCommandOptions {\n return {\n status: readRuntimeString(options, \"filterStatus\"),\n list: isRuntimeRecord(options.list)\n ? normalizeListOptions(options.list)\n : mutationListOptions(options),\n reason: readRuntimeString(options, \"reason\"),\n resolution: readRuntimeString(options, \"resolution\"),\n expectedResult:\n readRuntimeString(options, \"expectedResult\") ??\n readRuntimeString(options, \"expected_result\") ??\n readRuntimeString(options, \"expected\"),\n actualResult:\n readRuntimeString(options, \"actualResult\") ??\n readRuntimeString(options, \"actual_result\") ??\n readRuntimeString(options, \"actual\"),\n validateClose:\n readRuntimeString(options, \"validateClose\") ??\n readRuntimeString(options, \"validate_close\"),\n author: readRuntimeString(options, \"author\"),\n message: readRuntimeString(options, \"message\"),\n force: options.force === true ? true : undefined,\n dryRun:\n options.dryRun === true || options.dry_run === true ? true : undefined,\n rollback: readRuntimeString(options, \"rollback\"),\n checkpoint:\n options.checkpoint === false ||\n options.noCheckpoint === true ||\n options.no_checkpoint === true\n ? false\n : undefined,\n };\n}\n\n/** Flat update-many parameters that steer batching instead of item fields. */\nconst UPDATE_MANY_FLAT_CONTROL_KEYS = new Set([\n \"filterStatus\",\n \"filterType\",\n \"filterTag\",\n \"filterPriority\",\n \"filterDeadlineBefore\",\n \"filterDeadlineAfter\",\n \"filterUpdatedAfter\",\n \"filterUpdatedBefore\",\n \"filterCreatedAfter\",\n \"filterCreatedBefore\",\n \"filterAssignee\",\n \"filterAssigneeFilter\",\n \"filterAssignee_filter\",\n \"filterParent\",\n \"filterSprint\",\n \"filterRelease\",\n \"ids\",\n \"list\",\n \"update\",\n \"limit\",\n \"offset\",\n \"dryRun\",\n \"dry_run\",\n \"rollback\",\n \"checkpoint\",\n \"noCheckpoint\",\n \"no_checkpoint\",\n]);\n\n/** Extract per-item update fields from one flat update-many payload. */\nexport function updateManyUpdateOptionsFromFlat(\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const update: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(options)) {\n if (UPDATE_MANY_FLAT_CONTROL_KEYS.has(key)) {\n continue;\n }\n update[key] = value;\n }\n return normalizeMcpUpdateOptions(update);\n}\n\n/** Normalize MCP update fields onto the CLI update option contract. */\nexport function normalizeMcpUpdateOptions(\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const normalizedInput: Record<string, unknown> = normalizeMcpOptionsArrays(\n options,\n \"update-many\",\n );\n for (const contract of UPDATE_COMMANDER_STRING_OPTION_CONTRACTS) {\n for (const key of contract.keys) {\n const value = normalizedInput[key];\n if (typeof value === \"number\" && Number.isFinite(value)) {\n normalizedInput[key] = String(value);\n }\n }\n }\n return normalizeUpdateOptions(normalizedInput);\n}\n\n/** Build update-many command options from one flat MCP parameter payload. */\nexport function updateManyOptionsFromFlat(\n options: Record<string, unknown>,\n): UpdateManyCommandOptions {\n if (isRuntimeRecord(options.list) || isRuntimeRecord(options.update)) {\n const updateSource = isRuntimeRecord(options.update)\n ? options.update\n : updateManyUpdateOptionsFromFlat(options);\n return {\n status: readRuntimeScalarString(options, \"filterStatus\"),\n list: isRuntimeRecord(options.list)\n ? normalizeListOptions(options.list)\n : mutationListOptions(options),\n update: normalizeMcpUpdateOptions(updateSource) as never,\n dryRun:\n options.dryRun === true || options.dry_run === true ? true : undefined,\n rollback: readRuntimeString(options, \"rollback\"),\n checkpoint:\n options.checkpoint === false ||\n options.noCheckpoint === true ||\n options.no_checkpoint === true\n ? false\n : undefined,\n };\n }\n return {\n status: readRuntimeScalarString(options, \"filterStatus\"),\n list: mutationListOptions(options),\n update: updateManyUpdateOptionsFromFlat(options) as never,\n dryRun:\n options.dryRun === true || options.dry_run === true ? true : undefined,\n rollback: readRuntimeString(options, \"rollback\"),\n checkpoint:\n options.checkpoint === false ||\n options.noCheckpoint === true ||\n options.no_checkpoint === true\n ? false\n : undefined,\n };\n}\n"],"names":[],"mappings":"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","debugId":"52271df3-791f-5fa8-8666-c8edc31a5cbe"}
1
+ {"version":3,"file":"runtime-input.js","sources":["sdk/runtime-input.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module sdk/runtime-input\n *\n * Normalizes untyped action payload values at the SDK runtime boundary. These\n * primitives are shared by native action dispatchers and MCP-specific adapters.\n */\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../core/shared/command-types.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { asRecordClone } from \"../core/shared/primitives.js\";\nimport {\n normalizeListOptions,\n normalizeUpdateOptions,\n} from \"../cli/registration-helpers.js\";\nimport type { CloseManyCommandOptions } from \"../cli/commands/close-many.js\";\nimport type { UpdateManyCommandOptions } from \"../cli/commands/update-many.js\";\nimport { UPDATE_COMMANDER_STRING_OPTION_CONTRACTS } from \"./cli-contracts/commander-mutation-options.js\";\nimport type { GraphCommandOptions } from \"./graph/run.js\";\nimport type { ListOptions } from \"./query/list.js\";\n\n/** Read a non-empty string without altering its caller-provided whitespace. */\nexport function readRuntimeString(\n args: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = args[key];\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\n/** Normalize a non-empty string or finite number into a scalar string. */\nexport function readRuntimeScalarString(\n args: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = args[key];\n if (typeof value === \"string\") {\n return value.trim().length > 0 ? value : undefined;\n }\n return typeof value === \"number\" && Number.isFinite(value)\n ? String(value)\n : undefined;\n}\n\n/** Normalize a string, including blank text, or a finite number into text. */\nexport function readRuntimeScalarStringAllowBlank(\n args: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = args[key];\n if (typeof value === \"string\") {\n return value;\n }\n return typeof value === \"number\" && Number.isFinite(value)\n ? String(value)\n : undefined;\n}\n\n/** Narrow unknown values to plain record-shaped action payloads. */\nexport function isRuntimeRecord(\n value: unknown,\n): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Parse an integer-valued MCP option while retaining a caller-specific label. */\nexport function parseRuntimeInteger(\n value: unknown,\n label: string,\n): number | undefined {\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) {\n throw new PmCliError(\n `${label} must be a finite integer.`,\n EXIT_CODE.USAGE,\n );\n }\n return value;\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n if (!Number.isInteger(parsed)) {\n throw new PmCliError(\n `${label} must be a finite integer.`,\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n }\n return undefined;\n}\n\n/** Fixed SDK-runtime global options derived from one untyped action payload. */\nexport function actionGlobalOptions(\n args: Record<string, unknown>,\n): GlobalOptions {\n return {\n json: true,\n quiet: true,\n author: readRuntimeString(args, \"author\"),\n path: readRuntimeString(args, \"path\"),\n noExtensions: args.noExtensions === true || args.no_extensions === true,\n noPager: true,\n };\n}\n\n/** Fields whose MCP array values collapse into the CLI's CSV spelling. */\nconst ARRAY_TO_CSV_FIELDS = new Set([\n \"tags\",\n \"blockedBy\",\n \"blocked_by\",\n \"skills\",\n \"fields\",\n]);\n\n/** Fields whose scalar MCP values promote into the CLI's repeatable arrays. */\nconst SCALAR_TO_ARRAY_FIELDS = new Set([\n \"comment\",\n \"note\",\n \"learning\",\n \"reminder\",\n \"event\",\n \"dep\",\n \"depRemove\",\n \"dep_remove\",\n \"file\",\n \"doc\",\n \"test\",\n \"unset\",\n \"addGlob\",\n \"add_glob\",\n \"migrate\",\n \"envSet\",\n \"env_set\",\n \"envClear\",\n \"env_clear\",\n]);\n\n// Actions where the linked-resource fields `add` and `remove` are string[] arrays.\n// For other actions (comments/notes/learnings) `add` and `remove` are scalar strings\n// and must NOT be auto-promoted.\nconst ARRAY_ADD_REMOVE_ACTIONS = new Set([\n \"files\",\n \"files-discover\",\n \"docs\",\n \"test\",\n \"test-all\",\n]);\n\n/** Lifecycle actions where a top-level assignee argument aliases the author. */\nconst LIFECYCLE_AUTHOR_ALIAS_ACTIONS = new Set([\n \"claim\",\n \"release\",\n \"start-task\",\n \"pause-task\",\n \"close-task\",\n]);\n\n/** Reconcile MCP array/scalar option spellings with CLI flag expectations. */\nexport function normalizeMcpOptionsArrays(\n options: Record<string, unknown>,\n action?: string,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const promoteAddRemove =\n action !== undefined && ARRAY_ADD_REMOVE_ACTIONS.has(action);\n const preserveStandaloneNote =\n action === \"files\" || action === \"files-discover\" || action === \"docs\";\n for (const [key, value] of Object.entries(options)) {\n if (Array.isArray(value) && ARRAY_TO_CSV_FIELDS.has(key)) {\n result[key] = value.join(\",\");\n continue;\n }\n if (key === \"note\" && preserveStandaloneNote) {\n result[key] = value;\n continue;\n }\n if (typeof value === \"string\" && SCALAR_TO_ARRAY_FIELDS.has(key)) {\n result[key] = [value];\n continue;\n }\n if (\n typeof value === \"string\" &&\n promoteAddRemove &&\n (key === \"add\" || key === \"remove\")\n ) {\n result[key] = [value];\n continue;\n }\n result[key] = value;\n }\n return result;\n}\n\n/** Merge hoisted top-level action arguments and author aliases into options. */\nexport function optionsWithAuthor(\n args: Record<string, unknown>,\n action?: string,\n): Record<string, unknown> {\n const baseOptions = asRecordClone(args.options);\n const hoistedTopLevel: Record<string, unknown> = {};\n const hoistKey = (key: string): void => {\n if (baseOptions[key] !== undefined || args[key] === undefined) {\n return;\n }\n hoistedTopLevel[key] = args[key];\n };\n if (action === \"list\") {\n hoistKey(\"status\");\n hoistKey(\"type\");\n hoistKey(\"tag\");\n hoistKey(\"priority\");\n hoistKey(\"limit\");\n hoistKey(\"offset\");\n } else if (action === \"search\") {\n hoistKey(\"mode\");\n hoistKey(\"status\");\n hoistKey(\"type\");\n hoistKey(\"tag\");\n hoistKey(\"priority\");\n hoistKey(\"limit\");\n } else if (action === \"create\") {\n hoistKey(\"title\");\n hoistKey(\"type\");\n hoistKey(\"status\");\n hoistKey(\"description\");\n hoistKey(\"body\");\n hoistKey(\"priority\");\n hoistKey(\"tags\");\n hoistKey(\"parent\");\n hoistKey(\"createMode\");\n hoistKey(\"create_mode\");\n hoistKey(\"allowMissingParent\");\n } else if (action === \"close\") {\n hoistKey(\"duplicateOf\");\n } else if (action === \"append\") {\n // pm-7u9j: the narrow pm_append tool declares `body` top-level; runAppend\n // reads it from options, so hoist unless options.body already wins.\n // (pm_schema/pm_config top-level args are consumed directly by runAction's\n // schema/config cases, which read args before options — no hoist needed.)\n hoistKey(\"body\");\n }\n const options = normalizeMcpOptionsArrays(\n { ...hoistedTopLevel, ...baseOptions },\n action,\n );\n const author = readRuntimeString(args, \"author\");\n const authorFromAssignee =\n action !== undefined && LIFECYCLE_AUTHOR_ALIAS_ACTIONS.has(action)\n ? (readRuntimeString(args, \"assignee\") ??\n readRuntimeString(options, \"assignee\"))\n : undefined;\n if (author && options.author === undefined) {\n return { ...options, author };\n }\n if (authorFromAssignee && options.author === undefined) {\n return { ...options, author: authorFromAssignee };\n }\n return options;\n}\n\n// GH-170 (pm-pfnx): the narrow pm_files/pm_docs tools spell the CLI --note flag\n// as `addNote` (the shared `note` parameter is the array-typed create/update\n// note seed). Translate it onto the runner's `note` option; an explicit\n// options.note (pm_run callers) wins.\n/** Translate the MCP-only addNote spelling onto the runner note option. */\nexport function withAddNoteOption(\n options: Record<string, unknown>,\n): Record<string, unknown> {\n if (options.addNote === undefined) {\n return options;\n }\n const next: Record<string, unknown> = { ...options };\n if (next.note === undefined && typeof next.addNote === \"string\") {\n next.note = next.addNote;\n }\n delete next.addNote;\n return next;\n}\n\n/** Map files-discover MCP controls onto the files runner's option shape. */\nexport function withFilesDiscoveryOptions(\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const next: Record<string, unknown> = { ...options };\n if (\n next.discoveryNote !== undefined &&\n next.note === undefined &&\n typeof next.discoveryNote === \"string\"\n ) {\n next.note = next.discoveryNote;\n }\n delete next.discover;\n delete next.discoveryNote;\n return next;\n}\n\n/** Canonicalize one action name into lower-kebab-case tokens. */\nexport function normalizeActionName(value: string): string {\n const chunks: string[] = [];\n let lastWasSeparator = true;\n for (const character of value.trim().toLowerCase()) {\n const isAlphaNumeric =\n (character >= \"a\" && character <= \"z\") ||\n (character >= \"0\" && character <= \"9\");\n if (isAlphaNumeric) {\n chunks.push(character);\n lastWasSeparator = false;\n continue;\n }\n if (!lastWasSeparator) {\n chunks.push(\"-\");\n lastWasSeparator = true;\n }\n }\n if (chunks.at(-1) === \"-\") {\n chunks.pop();\n }\n return chunks.join(\"\");\n}\n\n/** Canonicalize one space-separated command path for lookup comparisons. */\nexport function normalizeCommandPath(value: string): string {\n return value.trim().toLowerCase().split(/\\s+/).filter(Boolean).join(\" \");\n}\n\n/** Coerce an unknown payload value into a non-empty string array. */\nexport function readRuntimeStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => String(entry))\n .filter((entry) => entry.length > 0);\n}\n\n/** Merge non-reserved top-level extension arguments into the options record. */\nexport function extensionOptionsFromArgs(\n args: Record<string, unknown>,\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const reserved = new Set([\n \"action\",\n \"args\",\n \"author\",\n \"cwd\",\n \"fullChangedFields\",\n \"id\",\n \"options\",\n \"path\",\n \"query\",\n \"reason\",\n \"target\",\n ]);\n const passthrough: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(args)) {\n if (!reserved.has(key)) {\n passthrough[key] = value;\n }\n }\n const normalizedOptions = { ...passthrough, ...options };\n delete normalizedOptions.args;\n return normalizedOptions;\n}\n\n/** Mutation tools (create/update/close/append/update-many) return a verbose `changed_fields` array. On the agent path we drop it to a `changed_field_count` by default for token efficiency, restoring the full array only when the caller explicitly passes the MCP-level fullChangedFields=true control. Mutation options are forwarded unchanged so runtime fields named `full` remain valid user data. */\nexport function withMutationCompaction(\n args: Record<string, unknown>,\n options?: Record<string, unknown> | null,\n): {\n changedFields: \"full\" | \"compact\";\n idOnly: boolean;\n runnerOptions: Record<string, unknown>;\n} {\n return {\n changedFields: args.fullChangedFields === true ? \"full\" : \"compact\",\n idOnly: args.idOnly === true,\n runnerOptions: { ...options },\n };\n}\n\n/** Translate flat MCP filter parameters into the shared list-option shape. */\nexport function mutationListOptions(\n options: Record<string, unknown>,\n): ListOptions {\n return {\n type: readRuntimeScalarString(options, \"filterType\"),\n tag: readRuntimeScalarString(options, \"filterTag\"),\n priority: readRuntimeScalarString(options, \"filterPriority\"),\n deadlineBefore: readRuntimeScalarString(options, \"filterDeadlineBefore\"),\n deadlineAfter: readRuntimeScalarString(options, \"filterDeadlineAfter\"),\n updatedAfter: readRuntimeScalarString(options, \"filterUpdatedAfter\"),\n updatedBefore: readRuntimeScalarString(options, \"filterUpdatedBefore\"),\n createdAfter: readRuntimeScalarString(options, \"filterCreatedAfter\"),\n createdBefore: readRuntimeScalarString(options, \"filterCreatedBefore\"),\n ids: readRuntimeScalarStringAllowBlank(options, \"ids\"),\n assignee: readRuntimeScalarString(options, \"filterAssignee\"),\n assigneeFilter:\n readRuntimeScalarString(options, \"filterAssigneeFilter\") ??\n readRuntimeScalarString(options, \"filterAssignee_filter\"),\n parent: readRuntimeScalarString(options, \"filterParent\"),\n sprint: readRuntimeScalarString(options, \"filterSprint\"),\n release: readRuntimeScalarString(options, \"filterRelease\"),\n limit: readRuntimeScalarString(options, \"limit\"),\n offset: readRuntimeScalarString(options, \"offset\"),\n };\n}\n\n/** Read one graph option that accepts scalar strings or repeatable arrays. */\nfunction readGraphIdListOption(value: unknown): string | string[] | undefined {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n if (Array.isArray(value)) return readRuntimeStringArray(value);\n return undefined;\n}\n\n/** Read one graph bound that accepts integer numbers or numeric strings. */\nfunction readGraphBoundOption(value: unknown): string | number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return undefined;\n}\n\n/** Build graph command options from one flat MCP parameter payload. */\nexport function graphOptionsFromFlat(\n options: Record<string, unknown>,\n): GraphCommandOptions {\n const kind = readGraphIdListOption(options.kind);\n const exemptIsolate = readGraphIdListOption(options.exemptIsolate);\n return {\n ...(kind === undefined ? {} : { kind }),\n maxDepth: readGraphBoundOption(options.maxDepth),\n limit: readGraphBoundOption(options.limit),\n after: readRuntimeString(options, \"after\"),\n direction: readRuntimeString(options, \"direction\"),\n maxPaths: readGraphBoundOption(options.maxPaths),\n sample: readGraphBoundOption(options.sample),\n ...(exemptIsolate === undefined ? {} : { exemptIsolate }),\n summary: options.summary === true,\n };\n}\n\n/** Build close-many command options from one flat MCP parameter payload. */\nexport function closeManyOptionsFromFlat(\n options: Record<string, unknown>,\n): CloseManyCommandOptions {\n return {\n status: readRuntimeString(options, \"filterStatus\"),\n list: isRuntimeRecord(options.list)\n ? normalizeListOptions(options.list)\n : mutationListOptions(options),\n reason: readRuntimeString(options, \"reason\"),\n resolution: readRuntimeString(options, \"resolution\"),\n expectedResult:\n readRuntimeString(options, \"expectedResult\") ??\n readRuntimeString(options, \"expected_result\") ??\n readRuntimeString(options, \"expected\"),\n actualResult:\n readRuntimeString(options, \"actualResult\") ??\n readRuntimeString(options, \"actual_result\") ??\n readRuntimeString(options, \"actual\"),\n validateClose:\n readRuntimeString(options, \"validateClose\") ??\n readRuntimeString(options, \"validate_close\"),\n author: readRuntimeString(options, \"author\"),\n message: readRuntimeString(options, \"message\"),\n force: options.force === true ? true : undefined,\n dryRun:\n options.dryRun === true || options.dry_run === true ? true : undefined,\n rollback: readRuntimeString(options, \"rollback\"),\n checkpoint:\n options.checkpoint === false ||\n options.noCheckpoint === true ||\n options.no_checkpoint === true\n ? false\n : undefined,\n };\n}\n\n/** Flat update-many parameters that steer batching instead of item fields. */\nconst UPDATE_MANY_FLAT_CONTROL_KEYS = new Set([\n \"filterStatus\",\n \"filterType\",\n \"filterTag\",\n \"filterPriority\",\n \"filterDeadlineBefore\",\n \"filterDeadlineAfter\",\n \"filterUpdatedAfter\",\n \"filterUpdatedBefore\",\n \"filterCreatedAfter\",\n \"filterCreatedBefore\",\n \"filterAssignee\",\n \"filterAssigneeFilter\",\n \"filterAssignee_filter\",\n \"filterParent\",\n \"filterSprint\",\n \"filterRelease\",\n \"ids\",\n \"list\",\n \"update\",\n \"limit\",\n \"offset\",\n \"dryRun\",\n \"dry_run\",\n \"rollback\",\n \"checkpoint\",\n \"noCheckpoint\",\n \"no_checkpoint\",\n]);\n\n/** Extract per-item update fields from one flat update-many payload. */\nexport function updateManyUpdateOptionsFromFlat(\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const update: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(options)) {\n if (UPDATE_MANY_FLAT_CONTROL_KEYS.has(key)) {\n continue;\n }\n update[key] = value;\n }\n return normalizeMcpUpdateOptions(update);\n}\n\n/** Normalize MCP update fields onto the CLI update option contract. */\nexport function normalizeMcpUpdateOptions(\n options: Record<string, unknown>,\n): Record<string, unknown> {\n const normalizedInput: Record<string, unknown> = normalizeMcpOptionsArrays(\n options,\n \"update-many\",\n );\n for (const contract of UPDATE_COMMANDER_STRING_OPTION_CONTRACTS) {\n for (const key of contract.keys) {\n const value = normalizedInput[key];\n if (typeof value === \"number\" && Number.isFinite(value)) {\n normalizedInput[key] = String(value);\n }\n }\n }\n return normalizeUpdateOptions(normalizedInput);\n}\n\n/** Build update-many command options from one flat MCP parameter payload. */\nexport function updateManyOptionsFromFlat(\n options: Record<string, unknown>,\n): UpdateManyCommandOptions {\n if (isRuntimeRecord(options.list) || isRuntimeRecord(options.update)) {\n const updateSource = isRuntimeRecord(options.update)\n ? options.update\n : updateManyUpdateOptionsFromFlat(options);\n return {\n status: readRuntimeScalarString(options, \"filterStatus\"),\n list: isRuntimeRecord(options.list)\n ? normalizeListOptions(options.list)\n : mutationListOptions(options),\n update: normalizeMcpUpdateOptions(updateSource) as never,\n dryRun:\n options.dryRun === true || options.dry_run === true ? true : undefined,\n rollback: readRuntimeString(options, \"rollback\"),\n checkpoint:\n options.checkpoint === false ||\n options.noCheckpoint === true ||\n options.no_checkpoint === true\n ? false\n : undefined,\n };\n }\n return {\n status: readRuntimeScalarString(options, \"filterStatus\"),\n list: mutationListOptions(options),\n update: updateManyUpdateOptionsFromFlat(options) as never,\n dryRun:\n options.dryRun === true || options.dry_run === true ? true : undefined,\n rollback: readRuntimeString(options, \"rollback\"),\n checkpoint:\n options.checkpoint === false ||\n options.noCheckpoint === true ||\n options.no_checkpoint === true\n ? false\n : undefined,\n };\n}\n"],"names":[],"mappings":"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","debugId":"9c53751c-01db-59ad-a024-b761d4b08030"}
@@ -226,6 +226,8 @@ export declare class PmClient {
226
226
  private readonly defaults;
227
227
  /** Create a client with workspace, author, and extension-loading defaults. */
228
228
  constructor(options?: PmClientOptions);
229
+ /** Create a native-action client that reuses an extension host's active schema context. */
230
+ static forActiveExtensionHost(options: PmClientOptions): PmClient;
229
231
  /** Run any native or extension-contributed action through the SDK dispatcher. */
230
232
  run(action: PmActionName, args?: PmClientRunArgs): Promise<unknown>;
231
233
  private runTyped;
@@ -4,7 +4,7 @@
4
4
  * Defines public SDK APIs and package-author helpers for Runtime.
5
5
  */
6
6
 
7
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="eceb55d4-5d10-5d1f-b060-4ea493f70d9d")}catch(e){}}();
7
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="24d809ae-5fa7-5634-bf07-98a909167346")}catch(e){}}();
8
8
  export { PM_GITIGNORE_END, PM_GITIGNORE_START, ensurePmGitignore, getPmGitignoreBlock, } from "./workspace.js";
9
9
  import path from "node:path";
10
10
  import { createEmptyExtensionCommandRegistry, createEmptyExtensionHookRegistry, createEmptyExtensionParserRegistry, createEmptyExtensionPreflightRegistry, createEmptyExtensionRegistrationRegistry, createEmptyExtensionRendererRegistry, createEmptyExtensionServiceRegistry, } from "../core/extensions/extension-registries.js";
@@ -20,6 +20,7 @@ import { resolveRuntimeStatusRegistry } from "../core/schema/runtime-schema.js";
20
20
  import { getSettingsPath, resolvePmRoot } from "../core/store/paths.js";
21
21
  import { readSettings } from "../core/store/settings.js";
22
22
  import { clearWorkspaceContractsCache, memoizeWorkspaceExtensionRegistrations, } from "./workspace-contracts-cache.js";
23
+ import { createExtensionCommandSdk } from "./extension-command-context.js";
23
24
  export { clearWorkspaceContractsCache } from "./workspace-contracts-cache.js";
24
25
  import { runActivity, runAggregate, runAppend, runClaim, runClaimNext, runClose, runCloseMany, runComments, runContext, runCopy, runCreate, runDelete, runFocus, runGet, runHistory, runLearnings, runNext, runNotes, runPlan, runRestore, runRelease, runUpdate, runUpdateMany, runUpgrade, } from "../cli/commands/index.js";
25
26
  import { runGc, } from "./governance/gc.js";
@@ -81,6 +82,7 @@ export { runReindex, } from "../cli/commands/reindex.js";
81
82
  export { loadCreateTemplateOptions, runTemplatesList, runTemplatesSave, runTemplatesShow, } from "./templates.js";
82
83
  export { runTestRunsList, runTestRunsLogs, runTestRunsResume, runTestRunsStatus, runTestRunsStop, } from "./test/runs.js";
83
84
  export { CONFIDENCE_TEXT_VALUES, DEPENDENCY_KIND_VALUES, BUILTIN_ITEM_TYPE_VALUES, ISSUE_SEVERITY_VALUES, ITEM_TYPE_VALUES, RISK_VALUES, STATUS_VALUES, } from "../types/index.js";
85
+ const ACTIVE_EXTENSION_HOST_CONTEXT = Symbol("pm.active-extension-host-context");
84
86
  function splitFullClientMutationOptions(options) {
85
87
  return { fullChangedFields: true, options };
86
88
  }
@@ -108,6 +110,12 @@ export class PmClient {
108
110
  : { noExtensions: options.noExtensions }),
109
111
  };
110
112
  }
113
+ /** Create a native-action client that reuses an extension host's active schema context. */
114
+ static forActiveExtensionHost(options) {
115
+ const client = new PmClient({ ...options, noExtensions: true });
116
+ client.defaults[ACTIVE_EXTENSION_HOST_CONTEXT] = true;
117
+ return client;
118
+ }
111
119
  /** Run any native or extension-contributed action through the SDK dispatcher. */
112
120
  run(action, args = {}) {
113
121
  return runAction({ ...this.defaults, ...args, action });
@@ -1098,6 +1106,12 @@ async function dispatchActiveExtensionAction(action, args, options, global, acti
1098
1106
  options: extensionOptionsFromArgs(args, options),
1099
1107
  global,
1100
1108
  pm_root: active.pmRoot,
1109
+ sdk: createExtensionCommandSdk(active.pmRoot, PmClient.forActiveExtensionHost({
1110
+ pmRoot: active.pmRoot,
1111
+ author: typeof global.author === "string" && global.author.trim()
1112
+ ? global.author.trim()
1113
+ : "pm-extension",
1114
+ })),
1101
1115
  });
1102
1116
  if (!handlerResult.handled) {
1103
1117
  const suffix = handlerResult.warnings.length > 0
@@ -1278,6 +1292,9 @@ export async function runAction(args) {
1278
1292
  const explicitCwd = readString(resolved.args, "cwd");
1279
1293
  const resolutionCwd = explicitCwd ?? process.cwd();
1280
1294
  try {
1295
+ if (args[ACTIVE_EXTENSION_HOST_CONTEXT] === true) {
1296
+ return await dispatchAction(resolved.action, resolved.args, global, null);
1297
+ }
1281
1298
  return await withActiveExtensions(global, explicitCwd, resolutionCwd, (activeExtensions) => dispatchAction(resolved.action, resolved.args, global, activeExtensions));
1282
1299
  }
1283
1300
  finally {
@@ -1809,4 +1826,4 @@ async function loadWorkspaceExtensionRegistrations(pmRoot, settings, cwd) {
1809
1826
  }
1810
1827
  }
1811
1828
  //# sourceMappingURL=runtime.js.map
1812
- //# debugId=eceb55d4-5d10-5d1f-b060-4ea493f70d9d
1829
+ //# debugId=24d809ae-5fa7-5634-bf07-98a909167346