diffing 0.2.1 → 0.3.0

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 (432) hide show
  1. package/README.md +158 -1
  2. package/dist/{cli-agent-ZAkixf4c.mjs → cli-agent-KxNAFIPf.mjs} +6 -2
  3. package/dist/cli-gh-CDGSpndZ.mjs +147 -0
  4. package/dist/cli.mjs +1064 -44
  5. package/dist/client/assets/{angular-html-DsssUIMZ.js → angular-html-DbbrJavS.js} +1 -1
  6. package/dist/client/assets/{angular-ts-dTg-sJ77.js → angular-ts-tCrxb1ht.js} +1 -1
  7. package/dist/client/assets/{apl-C1yUKbqz.js → apl-DawII0w7.js} +1 -1
  8. package/dist/client/assets/arc-DIRV7ZXr.js +1 -0
  9. package/dist/client/assets/architecture-7EHR7CIX-BM5HxebS.js +1 -0
  10. package/dist/client/assets/architectureDiagram-3BPJPVTR-3IoH78OV.js +36 -0
  11. package/dist/client/assets/array-CkF66D10.js +1 -0
  12. package/dist/client/assets/{astro-BI07ha2y.js → astro-DIyGTFXc.js} +1 -1
  13. package/dist/client/assets/{blade-DkzUGffS.js → blade-CuF4Z1mP.js} +1 -1
  14. package/dist/client/assets/blockDiagram-GPEHLZMM-CFxPndC0.js +132 -0
  15. package/dist/client/assets/{bsl-Dx5tFn3i.js → bsl-BrHd4RA2.js} +1 -1
  16. package/dist/client/assets/{c-KkuqqOvW.js → c-DUrjo9T5.js} +1 -1
  17. package/dist/client/assets/c4Diagram-AAUBKEIU-CGMBnkiv.js +10 -0
  18. package/dist/client/assets/{cairo-wCCQTdA9.js → cairo-BDZ6TRZS.js} +1 -1
  19. package/dist/client/assets/channel-D5AdjEWX.js +1 -0
  20. package/dist/client/assets/chunk-2J33WTMH-CJMBLaXy.js +1 -0
  21. package/dist/client/assets/chunk-3OPIFGDE-C9HQWVLl.js +62 -0
  22. package/dist/client/assets/chunk-4BX2VUAB-Qqg72GQd.js +1 -0
  23. package/dist/client/assets/chunk-4EGX6M5U-C70lfA2p.js +1 -0
  24. package/dist/client/assets/chunk-55IACEB6-DZF8brTR.js +1 -0
  25. package/dist/client/assets/chunk-5DO6E6H7-PprNUwlI.js +1 -0
  26. package/dist/client/assets/chunk-5ZQYHXKU-BflVFV5z.js +2 -0
  27. package/dist/client/assets/chunk-727SXJPM-COn6BRLY.js +206 -0
  28. package/dist/client/assets/chunk-AQP2D5EJ-CNOjODUR.js +231 -0
  29. package/dist/client/assets/chunk-BR22UD5L-D8XCYMy9.js +1 -0
  30. package/dist/client/assets/chunk-BSJP7CBP-PQX4ASCI.js +1 -0
  31. package/dist/client/assets/chunk-CSCIHK7Q-BfmUvL-L.js +124 -0
  32. package/dist/client/assets/chunk-FHYWG6QK-CcHPrHH1.js +1 -0
  33. package/dist/client/assets/chunk-FMBD7UC4-DorfwLnQ.js +15 -0
  34. package/dist/client/assets/chunk-KSCS5N6A-CXY93mId.js +10 -0
  35. package/dist/client/assets/chunk-L5ZTLDWV-BjMrSVmH.js +1 -0
  36. package/dist/client/assets/chunk-LZXEDZCA-q8jj6Nyb.js +2 -0
  37. package/dist/client/assets/chunk-MPE355IW-Bf9yHfDS.js +1 -0
  38. package/dist/client/assets/chunk-MZUSXYTE-CnUIUKI4.js +1 -0
  39. package/dist/client/assets/chunk-N66VUXT2-ahAf9GvV.js +1 -0
  40. package/dist/client/assets/chunk-ND2GUHAM-BRRQbYHl.js +1 -0
  41. package/dist/client/assets/chunk-NNHCCRGN-DHF3V75i.js +159 -0
  42. package/dist/client/assets/chunk-NZK2D7GU-Czt1qHrO.js +1 -0
  43. package/dist/client/assets/chunk-O5CBEL6O-DEopURak.js +70 -0
  44. package/dist/client/assets/chunk-PUPMXCY4-D0KKIhut.js +1 -0
  45. package/dist/client/assets/chunk-QZHKN3VN-BE917fn9.js +1 -0
  46. package/dist/client/assets/chunk-UIBZB4QT-TYsZ_c8u.js +1 -0
  47. package/dist/client/assets/chunk-WCWK7LTN-Dj8SfnMU.js +1 -0
  48. package/dist/client/assets/chunk-WU5MYG2G-DdoWnPla.js +1 -0
  49. package/dist/client/assets/chunk-XPW4576I-DocCoKUT.js +32 -0
  50. package/dist/client/assets/classDiagram-4FO5ZUOK-CxjhKO7s.js +1 -0
  51. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CSScAAQ4.js +1 -0
  52. package/dist/client/assets/{cobol-DRh7-jLi.js → cobol-BylylR2x.js} +1 -1
  53. package/dist/client/assets/{coffee-wR_ZAh9a.js → coffee-DCKfk8xx.js} +1 -1
  54. package/dist/client/assets/cose-bilkent-S5V4N54A-Cm0BD5CS.js +1 -0
  55. package/dist/client/assets/{cpp-OD_qyywn.js → cpp-CfKCIrGK.js} +1 -1
  56. package/dist/client/assets/{crystal-E4ahAddE.js → crystal-v-9RIu3l.js} +1 -1
  57. package/dist/client/assets/{css-2NgE_uxz.js → css-XjlXeGmZ.js} +1 -1
  58. package/dist/client/assets/cytoscape.esm-B7MQoI9k.js +321 -0
  59. package/dist/client/assets/dagre-BM42HDAG-kqgFUaF1.js +4 -0
  60. package/dist/client/assets/dagre-DAhKikc0.js +1 -0
  61. package/dist/client/assets/defaultLocale-B_TxGd0k.js +1 -0
  62. package/dist/client/assets/diagram-2AECGRRQ-B3hBvGUc.js +43 -0
  63. package/dist/client/assets/diagram-5GNKFQAL-r8zU8C-Y.js +10 -0
  64. package/dist/client/assets/diagram-KO2AKTUF-CDWD5zkZ.js +3 -0
  65. package/dist/client/assets/diagram-LMA3HP47-CRRfS6RD.js +24 -0
  66. package/dist/client/assets/diagram-OG6HWLK6-ChBS6E-K.js +24 -0
  67. package/dist/client/assets/dist-DUTeKbN7.js +1 -0
  68. package/dist/client/assets/{edge-8mbscxxD.js → edge-Cwh953i8.js} +1 -1
  69. package/dist/client/assets/{elixir-CJv1b3Q6.js → elixir-C4MgLzTj.js} +1 -1
  70. package/dist/client/assets/{elm-DUPzqZ9H.js → elm-CFBu8r7i.js} +1 -1
  71. package/dist/client/assets/erDiagram-TEJ5UH35-_03Fb9RH.js +85 -0
  72. package/dist/client/assets/{erb-ssvEF26z.js → erb-CrCna7R1.js} +1 -1
  73. package/dist/client/assets/{erlang-CtK0kQ6z.js → erlang-cuhwpmsu.js} +1 -1
  74. package/dist/client/assets/eventmodeling-FCH6USID-hlXE2E34.js +1 -0
  75. package/dist/client/assets/flowDiagram-I6XJVG4X-D9pSaH_8.js +162 -0
  76. package/dist/client/assets/{fortran-fixed-form-DBM4e0_k.js → fortran-fixed-form-DWr0EnJn.js} +1 -1
  77. package/dist/client/assets/{fsharp-CmzzGQLe.js → fsharp-CQ5iYSPA.js} +1 -1
  78. package/dist/client/assets/ganttDiagram-6RSMTGT7-DKBfXY9D.js +292 -0
  79. package/dist/client/assets/{gdresource-B_wbPqHd.js → gdresource-CN-lsNu5.js} +1 -1
  80. package/dist/client/assets/{git-commit-1z4D6NzL.js → git-commit-6e79eN7Q.js} +1 -1
  81. package/dist/client/assets/{git-rebase-DiWIK1Oa.js → git-rebase-CExLk2dD.js} +1 -1
  82. package/dist/client/assets/gitGraph-WXDBUCRP-D_3ZhTam.js +1 -0
  83. package/dist/client/assets/gitGraphDiagram-PVQCEYII-BPQ2kpJA.js +106 -0
  84. package/dist/client/assets/{glimmer-js-DrHg6AuA.js → glimmer-js-wjBSKaMu.js} +1 -1
  85. package/dist/client/assets/{glimmer-ts-wQSGOa8A.js → glimmer-ts-CyjMXDgZ.js} +1 -1
  86. package/dist/client/assets/{glsl-OY27QGY0.js → glsl-CWOoN8or.js} +1 -1
  87. package/dist/client/assets/graphlib-DBdw4opr.js +1 -0
  88. package/dist/client/assets/{graphql-CSWSqe6f.js → graphql-DI5CB58U.js} +1 -1
  89. package/dist/client/assets/{hack-Bi1v624Q.js → hack-Ct_Cm7Pr.js} +1 -1
  90. package/dist/client/assets/{haml-CX94zV9m.js → haml-DzAjli8d.js} +1 -1
  91. package/dist/client/assets/{handlebars-C1j6wnjG.js → handlebars-BfJB0RYx.js} +1 -1
  92. package/dist/client/assets/{html-BcAjMlB7.js → html-CK8auhK8.js} +1 -1
  93. package/dist/client/assets/{html-derivative-DcEpOzdx.js → html-derivative-B7VntYnF.js} +1 -1
  94. package/dist/client/assets/{http-BBxxSc6S.js → http-_Zy71Sv3.js} +1 -1
  95. package/dist/client/assets/{hurl-CpKRNTz4.js → hurl-VbL4I95z.js} +1 -1
  96. package/dist/client/assets/{hxml-DC4KwKt2.js → hxml-nwJci6H5.js} +1 -1
  97. package/dist/client/assets/{index-CoZyJYkw.css → index-C3p7VKOX.css} +1 -1
  98. package/dist/client/assets/index-Dv9jPmOc.js +3921 -0
  99. package/dist/client/assets/info-J43DQDTF-CAllC7mK.js +1 -0
  100. package/dist/client/assets/infoDiagram-5YYISTIA-B5RN-4Ke.js +2 -0
  101. package/dist/client/assets/init-Ce66tIvf.js +1 -0
  102. package/dist/client/assets/ishikawaDiagram-YF4QCWOH-DpbSX3Zy.js +70 -0
  103. package/dist/client/assets/{java-CFUlLvAA.js → java-0CC2DnK9.js} +1 -1
  104. package/dist/client/assets/{javascript-C-HnT3sE.js → javascript-DKSTP7rz.js} +1 -1
  105. package/dist/client/assets/{jinja-CPU8RwNP.js → jinja-DoGBHNJ6.js} +1 -1
  106. package/dist/client/assets/{jison-CW0TBQOs.js → jison-Bnl3lPA2.js} +1 -1
  107. package/dist/client/assets/journeyDiagram-JHISSGLW-B_X4_qPO.js +139 -0
  108. package/dist/client/assets/{json-qUjlNuEJ.js → json-BQ3Ddj6g.js} +1 -1
  109. package/dist/client/assets/{jsx-KWeo60kf.js → jsx-C_aFDuFZ.js} +1 -1
  110. package/dist/client/assets/{julia-CnJB8y2e.js → julia-nIjp5yMR.js} +1 -1
  111. package/dist/client/assets/{just-Do22d9PP.js → just-zc4yJ46n.js} +1 -1
  112. package/dist/client/assets/kanban-definition-UN3LZRKU-BSs4C5DW.js +89 -0
  113. package/dist/client/assets/katex-eRFNlMh0.js +257 -0
  114. package/dist/client/assets/{latex-CCPgzvKn.js → latex-BszBC80j.js} +1 -1
  115. package/dist/client/assets/line-C9HWVwPi.js +1 -0
  116. package/dist/client/assets/linear-DatJfpKY.js +1 -0
  117. package/dist/client/assets/{liquid-B9btdZoI.js → liquid-DglQpTge.js} +1 -1
  118. package/dist/client/assets/{lua-IFRifurW.js → lua-BcbliFeR.js} +1 -1
  119. package/dist/client/assets/{marko-CCaVBFq1.js → marko-BPm4M8j-.js} +1 -1
  120. package/dist/client/assets/{mdc-BtbnOLUc.js → mdc-BNUj07UF.js} +1 -1
  121. package/dist/client/assets/mermaid-parser.core-BVEKlqQr.js +4 -0
  122. package/dist/client/assets/mermaid.core-DVis21V_.js +9 -0
  123. package/dist/client/assets/mindmap-definition-RKZ34NQL-Cuo7KewF.js +96 -0
  124. package/dist/client/assets/{nextflow-CApkvBGW.js → nextflow-DSfydIxt.js} +1 -1
  125. package/dist/client/assets/{nginx-BkbFZHVt.js → nginx-CSSJwkd6.js} +1 -1
  126. package/dist/client/assets/{nim-2uCd5j65.js → nim-nQAskwTR.js} +1 -1
  127. package/dist/client/assets/ordinal-5ziJS8mo.js +1 -0
  128. package/dist/client/assets/packet-YPE3B663-Dy58IAiO.js +1 -0
  129. package/dist/client/assets/path-g3G46IZB.js +1 -0
  130. package/dist/client/assets/{perl-C4ixqSNT.js → perl-CtH8xYH6.js} +1 -1
  131. package/dist/client/assets/{php-DJ8WOtcI.js → php-Dcc3T2PH.js} +1 -1
  132. package/dist/client/assets/pie-LRSECV5Y-FXFFfdz2.js +1 -0
  133. package/dist/client/assets/pieDiagram-4H26LBE5-BfpvCRmo.js +30 -0
  134. package/dist/client/assets/{pug-BOaafhT5.js → pug-BCLaymlV.js} +1 -1
  135. package/dist/client/assets/{qml-CURE-1y4.js → qml-BpKydcOi.js} +1 -1
  136. package/dist/client/assets/quadrantDiagram-W4KKPZXB-CJY6un0-.js +7 -0
  137. package/dist/client/assets/{r-CPWmgzo3.js → r-BzCB9dpd.js} +1 -1
  138. package/dist/client/assets/radar-GUYGQ44K-BKTzSQ68.js +1 -0
  139. package/dist/client/assets/{razor-DH83VP_d.js → razor-BWmujqiQ.js} +1 -1
  140. package/dist/client/assets/{regexp-BXVWi-t_.js → regexp-urCI3YiZ.js} +1 -1
  141. package/dist/client/assets/requirementDiagram-4Y6WPE33-DIHWguS0.js +84 -0
  142. package/dist/client/assets/rough.esm-BBrzuQ0N.js +1 -0
  143. package/dist/client/assets/{rst-Bbxxs6E2.js → rst-YTDC9H6u.js} +1 -1
  144. package/dist/client/assets/{ruby-C-TuWES4.js → ruby-v1IXQAFZ.js} +1 -1
  145. package/dist/client/assets/sankeyDiagram-5OEKKPKP-DJRPEO_F.js +40 -0
  146. package/dist/client/assets/{sas-njzNYNOq.js → sas-KDUG3BSk.js} +1 -1
  147. package/dist/client/assets/{scss-D2i6rHB8.js → scss-pLIGFpjD.js} +1 -1
  148. package/dist/client/assets/sequenceDiagram-3UESZ5HK-DX0jVCOU.js +162 -0
  149. package/dist/client/assets/{shaderlab-DXAhMdPo.js → shaderlab-CbbQwRPF.js} +1 -1
  150. package/dist/client/assets/{shellscript-D6Bxi40C.js → shellscript-B5ZTyEsK.js} +1 -1
  151. package/dist/client/assets/{shellsession-Defxq-I6.js → shellsession-DVK3bw4p.js} +1 -1
  152. package/dist/client/assets/{soy-D0GKXrtT.js → soy-BXgyj2-T.js} +1 -1
  153. package/dist/client/assets/{sparql-BdcL8cbr.js → sparql-DEoxFJ5d.js} +1 -1
  154. package/dist/client/assets/{sql-BRW_ADkU.js → sql-G2vZCmw6.js} +1 -1
  155. package/dist/client/assets/src-D9zkqEEX.js +1 -0
  156. package/dist/client/assets/{stata-w7w59F48.js → stata-C4mEnygx.js} +1 -1
  157. package/dist/client/assets/stateDiagram-AJRCARHV-AMtMxKgQ.js +1 -0
  158. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-C89CM-_4.js +1 -0
  159. package/dist/client/assets/{surrealql-O-lLuqz7.js → surrealql-Bf8gsTcP.js} +1 -1
  160. package/dist/client/assets/{svelte-DN3DR5-t.js → svelte-C1oIyl9t.js} +1 -1
  161. package/dist/client/assets/{templ-CJ2JFoia.js → templ-PJcWUuTF.js} +1 -1
  162. package/dist/client/assets/{tex-CpWrf5g9.js → tex-B7Fnujsi.js} +1 -1
  163. package/dist/client/assets/timeline-definition-PNZ67QCA-BZJSqcAg.js +120 -0
  164. package/dist/client/assets/treeView-BLDUP644-DtjHwb6x.js +1 -0
  165. package/dist/client/assets/treemap-LRROVOQU-GqTXzMFU.js +1 -0
  166. package/dist/client/assets/{ts-tags-CZ6Af6Pe.js → ts-tags-CAAsFnUt.js} +1 -1
  167. package/dist/client/assets/{tsx-gIUSpRih.js → tsx-DAKyTsWW.js} +1 -1
  168. package/dist/client/assets/{twig-DwZINhmw.js → twig-Bd4dieZF.js} +1 -1
  169. package/dist/client/assets/{typescript-Dj2aMECR.js → typescript-8myByDGd.js} +1 -1
  170. package/dist/client/assets/vennDiagram-CIIHVFJN-CMjBZNs2.js +34 -0
  171. package/dist/client/assets/{vue-B5K0aWrP.js → vue-fBA2B-QU.js} +1 -1
  172. package/dist/client/assets/{vue-html-DKGgrypd.js → vue-html-DEZECpsR.js} +1 -1
  173. package/dist/client/assets/{vue-vine-B5iDYTCh.js → vue-vine-B_gG939R.js} +1 -1
  174. package/dist/client/assets/wardley-L42UT6IY-pROVAAhW.js +1 -0
  175. package/dist/client/assets/wardleyDiagram-YWT4CUSO-qeHmPLyL.js +78 -0
  176. package/dist/client/assets/{xml-CbTzxfc-.js → xml-DbXNss3s.js} +1 -1
  177. package/dist/client/assets/{xsl-Dj-Be6nx.js → xsl-B7_dgqqc.js} +1 -1
  178. package/dist/client/assets/xychartDiagram-2RQKCTM6-NN2Et7YL.js +7 -0
  179. package/dist/client/assets/{yaml-rTK8uEjh.js → yaml-DSyIApdJ.js} +1 -1
  180. package/dist/client/index.html +2 -2
  181. package/dist/{mcp-CE77qfjx.mjs → mcp-BWeWR4yd.mjs} +2 -1
  182. package/dist/plan-format-f62JWFI-.mjs +117 -0
  183. package/dist/{server-lock-DpCrvL-Z.mjs → server-lock-Dj9fG9md.mjs} +246 -122
  184. package/package.json +26 -14
  185. package/dist/cli-agent-BLPX3oOP.mjs +0 -443
  186. package/dist/cli-agent-BNwY5lZE.mjs +0 -446
  187. package/dist/cli-agent-CbzXDSSF.mjs +0 -446
  188. package/dist/cli-agent-Cfuy9fLC.mjs +0 -179
  189. package/dist/cli-agent-CtNivjQW.mjs +0 -179
  190. package/dist/cli-agent-DZBvZoXZ.mjs +0 -179
  191. package/dist/cli-agent-DsqbS3n7.mjs +0 -443
  192. package/dist/cli-agent-Vbs-ePHv.mjs +0 -443
  193. package/dist/cli-agent-WzJPMH52.mjs +0 -174
  194. package/dist/cli-agent-uYUoCA4X.mjs +0 -179
  195. package/dist/client/assets/index-Bwv7BWUp.js +0 -3959
  196. package/dist/mcp-BQmH_By-.mjs +0 -119
  197. package/dist/mcp-CFeE13n-.mjs +0 -254
  198. package/dist/mcp-CLgzC8_a.mjs +0 -119
  199. package/dist/mcp-D9E2HQZ9.mjs +0 -119
  200. package/dist/mcp-DKlThflu.mjs +0 -253
  201. package/dist/mcp-LVbLV17O.mjs +0 -119
  202. package/dist/mcp-SGCrfYGo.mjs +0 -254
  203. package/dist/mcp-nMwTAut3.mjs +0 -119
  204. package/dist/server-lock-B4crz9-_.mjs +0 -708
  205. package/dist/server-lock-BbiF7u3F.mjs +0 -493
  206. package/dist/server-lock-Bx9ixiF6.mjs +0 -575
  207. package/dist/server-lock-CAdqFSfl.mjs +0 -691
  208. package/dist/server-lock-DIkImokU.mjs +0 -487
  209. package/dist/server-lock-DbxpfF3j.mjs +0 -575
  210. package/dist/update-check-DJuFE9w6.mjs +0 -128
  211. package/dist/update-check-DSC02MWQ.mjs +0 -129
  212. package/dist/client/assets/{abap-CkQ0tsz-.js → abap-cWYhO34H.js} +0 -0
  213. package/dist/client/assets/{actionscript-3-DHm0ZfF4.js → actionscript-3-B80ndJsD.js} +0 -0
  214. package/dist/client/assets/{ada-DK_ua92Z.js → ada-C0C0SoYB.js} +0 -0
  215. package/dist/client/assets/{andromeeda-D2ccw8v4.js → andromeeda-Ch2kWS7s.js} +0 -0
  216. package/dist/client/assets/{apache-DXtpFu7o.js → apache-DBwBm4bB.js} +0 -0
  217. package/dist/client/assets/{apex-DlnRRWpl.js → apex-FcV7UxQi.js} +0 -0
  218. package/dist/client/assets/{applescript-CShk62ad.js → applescript-hQs8VNpS.js} +0 -0
  219. package/dist/client/assets/{ara-CWN-FDkm.js → ara-BOadBOZg.js} +0 -0
  220. package/dist/client/assets/{asciidoc-Bg-PM9Vn.js → asciidoc-BsfqiBck.js} +0 -0
  221. package/dist/client/assets/{asm-DKOhR24S.js → asm-C2vUqzqz.js} +0 -0
  222. package/dist/client/assets/{aurora-x-DpaEirL8.js → aurora-x-BHLqzt7j.js} +0 -0
  223. package/dist/client/assets/{awk-3ibKHffv.js → awk-D4e-eeZT.js} +0 -0
  224. package/dist/client/assets/{ayu-dark-ursiSH5k.js → ayu-dark-DCotN_ZT.js} +0 -0
  225. package/dist/client/assets/{ayu-light-DMjlrKmx.js → ayu-light-CKB6o_im.js} +0 -0
  226. package/dist/client/assets/{ayu-mirage-DZEMb75h.js → ayu-mirage-B38lW-C5.js} +0 -0
  227. package/dist/client/assets/{ballerina-xx7VNGxs.js → ballerina-BzvFqbha.js} +0 -0
  228. package/dist/client/assets/{bat-DGYsZ5wR.js → bat-CFyw2ERn.js} +0 -0
  229. package/dist/client/assets/{beancount-D_ATR1UV.js → beancount-a6Gsu5WX.js} +0 -0
  230. package/dist/client/assets/{berry-BqYMORfH.js → berry-C2jyz4Ah.js} +0 -0
  231. package/dist/client/assets/{bibtex-CQTBDajW.js → bibtex-Dyet-B83.js} +0 -0
  232. package/dist/client/assets/{bicep-CfNtxPrK.js → bicep-CghvUIvy.js} +0 -0
  233. package/dist/client/assets/{bird2-C0dUPe3I.js → bird2-nHigvs-R.js} +0 -0
  234. package/dist/client/assets/{c3-BUwZ5e3k.js → c3-9ZrcmAmr.js} +0 -0
  235. package/dist/client/assets/{cadence-C3OKDYrr.js → cadence-BPDgYNWy.js} +0 -0
  236. package/dist/client/assets/{catppuccin-frappe-CMnRXVZP.js → catppuccin-frappe-BY_2ofjk.js} +0 -0
  237. package/dist/client/assets/{catppuccin-latte-CqhXSjCC.js → catppuccin-latte-D6GXPBmA.js} +0 -0
  238. package/dist/client/assets/{catppuccin-macchiato-B6kneE0C.js → catppuccin-macchiato-BuW8_cyo.js} +0 -0
  239. package/dist/client/assets/{catppuccin-mocha-CP8YZpvj.js → catppuccin-mocha-znex9DPe.js} +0 -0
  240. package/dist/client/assets/{clarity-Crxe8gSr.js → clarity-Cmao5KSK.js} +0 -0
  241. package/dist/client/assets/{clojure-BuzOUPMr.js → clojure-D2dPuTkk.js} +0 -0
  242. package/dist/client/assets/{cmake-CCpZLdLI.js → cmake-DaqQuj4A.js} +0 -0
  243. package/dist/client/assets/{codeowners-Bo1VYpHz.js → codeowners-B748jmvc.js} +0 -0
  244. package/dist/client/assets/{codeql-Db01hzHE.js → codeql-CXb_8gHR.js} +0 -0
  245. package/dist/client/assets/{common-lisp-CMlJIc6Y.js → common-lisp-UZn9nc_5.js} +0 -0
  246. package/dist/client/assets/{coq-BlzBYp3f.js → coq-DtO6yBIf.js} +0 -0
  247. package/dist/client/assets/{csharp-kfNshAa7.js → csharp-C3YlYcLV.js} +0 -0
  248. package/dist/client/assets/{csv-Dr8ri5Nd.js → csv-BBwiVr0X.js} +0 -0
  249. package/dist/client/assets/{cue-jXfhyOwY.js → cue-ScBFXY5f.js} +0 -0
  250. package/dist/client/assets/{cypher-CayLeiaR.js → cypher-CGStaC1X.js} +0 -0
  251. package/dist/client/assets/{d-BMZQ0mAy.js → d-CuTCIvnX.js} +0 -0
  252. package/dist/client/assets/{dark-plus-B__q47Nr.js → dark-plus-BvePH-r3.js} +0 -0
  253. package/dist/client/assets/{dart-gMOEMyuz.js → dart-CqEodbm2.js} +0 -0
  254. package/dist/client/assets/{dax-C3t5LadU.js → dax-UdE5S0Dh.js} +0 -0
  255. package/dist/client/assets/{desktop-DmhXLwLR.js → desktop-DfmsfHJA.js} +0 -0
  256. package/dist/client/assets/{diff-togOXQX6.js → diff-CW0RWGd9.js} +0 -0
  257. package/dist/client/assets/{docker--6N01olR.js → docker-B1qtW4ha.js} +0 -0
  258. package/dist/client/assets/{dotenv-Bq930Yx8.js → dotenv-BUzOh1k8.js} +0 -0
  259. package/dist/client/assets/{dracula-CBkSghcw.js → dracula-kJQjC_Gy.js} +0 -0
  260. package/dist/client/assets/{dracula-soft-CCSYeoxL.js → dracula-soft-B3XhEjCl.js} +0 -0
  261. package/dist/client/assets/{dream-maker-BiMf3DHl.js → dream-maker-CBvk18nW.js} +0 -0
  262. package/dist/client/assets/{emacs-lisp-Dhht7he2.js → emacs-lisp-DvSgLhDc.js} +0 -0
  263. package/dist/client/assets/{everforest-dark-NqSz4oHS.js → everforest-dark-u0zLn75q.js} +0 -0
  264. package/dist/client/assets/{everforest-light-a3Yzs_lT.js → everforest-light-D3syIoAR.js} +0 -0
  265. package/dist/client/assets/{fennel-BExc9TZf.js → fennel-C-1kWlGf.js} +0 -0
  266. package/dist/client/assets/{fish-C2p-AJmZ.js → fish-CCpdtwqS.js} +0 -0
  267. package/dist/client/assets/{fluent-CeYzs8Qy.js → fluent-BLg032oD.js} +0 -0
  268. package/dist/client/assets/{fortran-free-form-BIQEK2Jw.js → fortran-free-form-Br4jRtSc.js} +0 -0
  269. package/dist/client/assets/{gdscript-B5JQPh_-.js → gdscript-hSAZM1eh.js} +0 -0
  270. package/dist/client/assets/{gdshader-vVjJ_Qr8.js → gdshader-D4XNAEs9.js} +0 -0
  271. package/dist/client/assets/{genie-DGl5rqC8.js → genie-DmN-ICAN.js} +0 -0
  272. package/dist/client/assets/{gherkin-CY_VLUnD.js → gherkin-cuHHmRcX.js} +0 -0
  273. package/dist/client/assets/{github-dark-ClO4AStc.js → github-dark-CEBLh0--.js} +0 -0
  274. package/dist/client/assets/{github-dark-default-CM0dPco8.js → github-dark-default-Dq0Z4Xai.js} +0 -0
  275. package/dist/client/assets/{github-dark-dimmed-Cb6xxpXY.js → github-dark-dimmed-D90YmS4w.js} +0 -0
  276. package/dist/client/assets/{github-dark-high-contrast-BpYtx2-M.js → github-dark-high-contrast-B6BWv1iC.js} +0 -0
  277. package/dist/client/assets/{github-light-default-BmnCWL6x.js → github-light-default-DsPWmj4v.js} +0 -0
  278. package/dist/client/assets/{github-light-high-contrast-rpagNF5O.js → github-light-high-contrast-C7aLb3kp.js} +0 -0
  279. package/dist/client/assets/{github-light-CeOVFgf_.js → github-light-lXSVSq5T.js} +0 -0
  280. package/dist/client/assets/{gleam-BarIG9kQ.js → gleam-D8VhqPDN.js} +0 -0
  281. package/dist/client/assets/{gn-DhYsTPYc.js → gn-BjGRlX27.js} +0 -0
  282. package/dist/client/assets/{gnuplot-CucLlTBc.js → gnuplot-BZCXuE4q.js} +0 -0
  283. package/dist/client/assets/{go-toi-uWvg.js → go-BJpWXZEs.js} +0 -0
  284. package/dist/client/assets/{groovy-Ds4dis_k.js → groovy-D9w3Dn-z.js} +0 -0
  285. package/dist/client/assets/{gruvbox-dark-hard-aPiW8pQh.js → gruvbox-dark-hard-_deksD0U.js} +0 -0
  286. package/dist/client/assets/{gruvbox-dark-medium-2HJCvzsS.js → gruvbox-dark-medium-CT31284j.js} +0 -0
  287. package/dist/client/assets/{gruvbox-dark-soft-Da97ODX9.js → gruvbox-dark-soft-BZuEUCbj.js} +0 -0
  288. package/dist/client/assets/{gruvbox-light-hard-BXlEipFe.js → gruvbox-light-hard-dxv4n_ZS.js} +0 -0
  289. package/dist/client/assets/{gruvbox-light-medium-Cun-GjGk.js → gruvbox-light-medium-BsW_fVfR.js} +0 -0
  290. package/dist/client/assets/{gruvbox-light-soft-Bd3qiiSw.js → gruvbox-light-soft-BiGy99gD.js} +0 -0
  291. package/dist/client/assets/{haskell-B_jvz5Po.js → haskell-DqDdKEgk.js} +0 -0
  292. package/dist/client/assets/{haxe-BRbuo5UO.js → haxe-DMg0jS3a.js} +0 -0
  293. package/dist/client/assets/{hcl-BzNUCtsK.js → hcl-SZIZUK_X.js} +0 -0
  294. package/dist/client/assets/{hjson-BxVo3sS2.js → hjson-DF1VspiE.js} +0 -0
  295. package/dist/client/assets/{hlsl-C8Wes1nf.js → hlsl-DPe9L0Dt.js} +0 -0
  296. package/dist/client/assets/{horizon-D54PjLAY.js → horizon-Ngud75Kn.js} +0 -0
  297. package/dist/client/assets/{horizon-bright-D9RccdIr.js → horizon-bright-Cnljd0XD.js} +0 -0
  298. package/dist/client/assets/{houston-CMu1N_4K.js → houston-BenZxlMr.js} +0 -0
  299. package/dist/client/assets/{hy-dMrJKKU_.js → hy-B0f-B1mH.js} +0 -0
  300. package/dist/client/assets/{imba-DG_oO8tg.js → imba-Bq3j1cW5.js} +0 -0
  301. package/dist/client/assets/{ini-geHw79Aj.js → ini-BayloP2U.js} +0 -0
  302. package/dist/client/assets/{json5-CDUsNqz6.js → json5-CRSfdIrY.js} +0 -0
  303. package/dist/client/assets/{jsonc-D48xcwyD.js → jsonc-y4g9DQPx.js} +0 -0
  304. package/dist/client/assets/{jsonl-cpIYDXEe.js → jsonl-D2paVn9r.js} +0 -0
  305. package/dist/client/assets/{jsonnet-Da1lhszN.js → jsonnet-CLH27mtz.js} +0 -0
  306. package/dist/client/assets/{jssm-B8BLrEGL.js → jssm-CPPYaqX-.js} +0 -0
  307. package/dist/client/assets/{kanagawa-dragon-2Sk8Rx83.js → kanagawa-dragon-Bt5mhLu1.js} +0 -0
  308. package/dist/client/assets/{kanagawa-lotus-CQVSWfJp.js → kanagawa-lotus-FGA3pRJk.js} +0 -0
  309. package/dist/client/assets/{kanagawa-wave-BKWNioLX.js → kanagawa-wave-DnLVZPAD.js} +0 -0
  310. package/dist/client/assets/{kdl-B-2tSRmp.js → kdl-D1BQjjnw.js} +0 -0
  311. package/dist/client/assets/{kotlin-DepsEzh3.js → kotlin-ndCaDnf0.js} +0 -0
  312. package/dist/client/assets/{kusto-BcCtXIb8.js → kusto-D-4nbkD3.js} +0 -0
  313. package/dist/client/assets/{laserwave-BUqkO46F.js → laserwave-D2qAZkaG.js} +0 -0
  314. package/dist/client/assets/{lean-CNO9ffpX.js → lean-YmtAsB0p.js} +0 -0
  315. package/dist/client/assets/{less-Dj0T9pWC.js → less-DyHub3ow.js} +0 -0
  316. package/dist/client/assets/{light-plus-C9Hnuc1T.js → light-plus-CP13QUvm.js} +0 -0
  317. package/dist/client/assets/{llvm-DbV9b66l.js → llvm-DCcqrY0D.js} +0 -0
  318. package/dist/client/assets/{log-BMblmPyH.js → log-DWAAMNbe.js} +0 -0
  319. package/dist/client/assets/{logo-B78qMxws.js → logo-ClQMGkNL.js} +0 -0
  320. package/dist/client/assets/{luau-BUd8xsdE.js → luau-CmcXFvLt.js} +0 -0
  321. package/dist/client/assets/{make-Ev-6cJrd.js → make-DcfJyUzm.js} +0 -0
  322. package/dist/client/assets/{markdown-CS4LI6sN.js → markdown-DXxotAxn.js} +0 -0
  323. package/dist/client/assets/{material-theme-5rA1zn0D.js → material-theme-JFoPTBSr.js} +0 -0
  324. package/dist/client/assets/{material-theme-darker-DGOEiL65.js → material-theme-darker-BHaqZ19v.js} +0 -0
  325. package/dist/client/assets/{material-theme-lighter-CULfFRX0.js → material-theme-lighter-CGnnS2bs.js} +0 -0
  326. package/dist/client/assets/{material-theme-ocean-LQZ9CleP.js → material-theme-ocean-Drhewjqf.js} +0 -0
  327. package/dist/client/assets/{material-theme-palenight-Di_f5oks.js → material-theme-palenight-DbUypmpb.js} +0 -0
  328. package/dist/client/assets/{matlab-C0qEtAx9.js → matlab-BlfbTznR.js} +0 -0
  329. package/dist/client/assets/{mdx-CzvnbLXb.js → mdx-H8fyPQd8.js} +0 -0
  330. package/dist/client/assets/{mermaid-BPquZaKt.js → mermaid-CWAV2dmV.js} +0 -0
  331. package/dist/client/assets/{min-dark-rkuIbtJV.js → min-dark-BEelvXUB.js} +0 -0
  332. package/dist/client/assets/{min-light-Dj_HOGsr.js → min-light-CTPBOACR.js} +0 -0
  333. package/dist/client/assets/{mipsasm-k5DQoS6j.js → mipsasm-BWYFAm2s.js} +0 -0
  334. package/dist/client/assets/{mojo-sTTDuNnR.js → mojo-DZcPJEIN.js} +0 -0
  335. package/dist/client/assets/{monokai-D5p-u2ij.js → monokai-DQlZXbkg.js} +0 -0
  336. package/dist/client/assets/{moonbit-j5ChFtBC.js → moonbit-6eslNlJL.js} +0 -0
  337. package/dist/client/assets/{move-Dj0Gmn6R.js → move-DxFc9-QU.js} +0 -0
  338. package/dist/client/assets/{narrat-DJgMz2oW.js → narrat-gv38dJOT.js} +0 -0
  339. package/dist/client/assets/{nextflow-groovy-eDLuZ_oi.js → nextflow-groovy-DV4H3hok.js} +0 -0
  340. package/dist/client/assets/{night-owl-CEdtPl3A.js → night-owl-BLcrYhaC.js} +0 -0
  341. package/dist/client/assets/{night-owl-light-GdSldewm.js → night-owl-light-BG-tBJOz.js} +0 -0
  342. package/dist/client/assets/{nix-CxIPS3pb.js → nix-NlOz3HGM.js} +0 -0
  343. package/dist/client/assets/{nord-3WFAz5H9.js → nord-Dm2F5_QB.js} +0 -0
  344. package/dist/client/assets/{nushell-GDfBmoBU.js → nushell-D86Z8aFF.js} +0 -0
  345. package/dist/client/assets/{objective-c-MFQ_MGUa.js → objective-c-iuJvUjCv.js} +0 -0
  346. package/dist/client/assets/{objective-cpp-Y83LcBE7.js → objective-cpp-C62JvfMT.js} +0 -0
  347. package/dist/client/assets/{ocaml-FxYfaJxu.js → ocaml-Rbryo9lg.js} +0 -0
  348. package/dist/client/assets/{odin-CprihY3z.js → odin-CfaOVNP_.js} +0 -0
  349. package/dist/client/assets/{one-dark-pro-BB6mpmmA.js → one-dark-pro-DC9SHdX0.js} +0 -0
  350. package/dist/client/assets/{one-light-BYLoxNtg.js → one-light-Doo39p0H.js} +0 -0
  351. package/dist/client/assets/{openscad-Bc1FbpOi.js → openscad-DCRhgheK.js} +0 -0
  352. package/dist/client/assets/{pascal-Bb4d8cUL.js → pascal-CTesTHtV.js} +0 -0
  353. package/dist/client/assets/{pierre-dark-cF19s-RM.js → pierre-dark-Gtc9M_gS.js} +0 -0
  354. package/dist/client/assets/{pierre-light-BdpX8OpD.js → pierre-light-EDxMHmhf.js} +0 -0
  355. package/dist/client/assets/{pkl-tM25Sq0w.js → pkl-BjUMjQkt.js} +0 -0
  356. package/dist/client/assets/{plastic-D3k2Xp_5.js → plastic-B3CcSpon.js} +0 -0
  357. package/dist/client/assets/{plsql-CLEfFhSj.js → plsql-BgKEZSSo.js} +0 -0
  358. package/dist/client/assets/{po-CaAzdrrh.js → po-C5s_CVt8.js} +0 -0
  359. package/dist/client/assets/{poimandres-bPTvT4Da.js → poimandres-BsK70ma5.js} +0 -0
  360. package/dist/client/assets/{polar-TG7aTGdK.js → polar-y4hX8qM0.js} +0 -0
  361. package/dist/client/assets/{postcss-8kqfa9f0.js → postcss-BHCm7Qae.js} +0 -0
  362. package/dist/client/assets/{powerquery-CtSu1Nfd.js → powerquery-C2vMt8aZ.js} +0 -0
  363. package/dist/client/assets/{powershell-87lLBHMy.js → powershell-DEcjmg1c.js} +0 -0
  364. package/dist/client/assets/{prisma-Dnf694DZ.js → prisma-Ba-Tcxy5.js} +0 -0
  365. package/dist/client/assets/{prolog-C0XbHTWa.js → prolog-B4o261Jv.js} +0 -0
  366. package/dist/client/assets/{proto-BZP-HLIb.js → proto-o3IZKiMR.js} +0 -0
  367. package/dist/client/assets/{puppet-CJYWgYC5.js → puppet-BC0dqZ31.js} +0 -0
  368. package/dist/client/assets/{purescript-B95Q6BAd.js → purescript-CLDw1y5G.js} +0 -0
  369. package/dist/client/assets/{python-CqTCsi7P.js → python-D1NFioGW.js} +0 -0
  370. package/dist/client/assets/{qmldir-DlIL4hls.js → qmldir-B7i9e9Vn.js} +0 -0
  371. package/dist/client/assets/{qss-BW72E0q_.js → qss-DIe6oKX8.js} +0 -0
  372. package/dist/client/assets/{racket-CCAimEsC.js → racket-CAOC_yyk.js} +0 -0
  373. package/dist/client/assets/{raku-mSuqElkM.js → raku-Ccua3vW6.js} +0 -0
  374. package/dist/client/assets/{red-C-DA4yBI.js → red-DtDH206x.js} +0 -0
  375. package/dist/client/assets/{reg-CGwMBJ2c.js → reg-CAYZT9kE.js} +0 -0
  376. package/dist/client/assets/{rel-JwrbYgX4.js → rel-cvB6F5nO.js} +0 -0
  377. package/dist/client/assets/{riscv-CoYyE75b.js → riscv-SYGtE4EN.js} +0 -0
  378. package/dist/client/assets/{ron-C5wrhnmJ.js → ron-CRt869SB.js} +0 -0
  379. package/dist/client/assets/{rose-pine-DlrMPYYd.js → rose-pine-CjBfSJ5b.js} +0 -0
  380. package/dist/client/assets/{rose-pine-dawn-DBHFtZD2.js → rose-pine-dawn-C0xwy7iJ.js} +0 -0
  381. package/dist/client/assets/{rose-pine-moon-BBfrpe5q.js → rose-pine-moon-BSNy9Ty0.js} +0 -0
  382. package/dist/client/assets/{rosmsg-DlimTR9t.js → rosmsg-BwrfJ66Z.js} +0 -0
  383. package/dist/client/assets/{rust-Cxnkxx3h.js → rust-DCKTTPxN.js} +0 -0
  384. package/dist/client/assets/{sass-DEyqUIpU.js → sass-CorcwySt.js} +0 -0
  385. package/dist/client/assets/{scala-i3RN3yAN.js → scala-DlI-OmYj.js} +0 -0
  386. package/dist/client/assets/{scheme-BcKdjYkO.js → scheme-CcNEGkZH.js} +0 -0
  387. package/dist/client/assets/{sdbl-Be_XWc3n.js → sdbl-AL_m-RO_.js} +0 -0
  388. package/dist/client/assets/{slack-dark-3PDtm74m.js → slack-dark-rMhrfPm6.js} +0 -0
  389. package/dist/client/assets/{slack-ochin-CwiuFRJD.js → slack-ochin-9w8X74hU.js} +0 -0
  390. package/dist/client/assets/{smalltalk-BdBlL6ks.js → smalltalk-Y2ogrfbk.js} +0 -0
  391. package/dist/client/assets/{snazzy-light-Dyqc8Is2.js → snazzy-light-DHr9ygpP.js} +0 -0
  392. package/dist/client/assets/{solarized-dark-DZiTscIX.js → solarized-dark-UPcKev9Q.js} +0 -0
  393. package/dist/client/assets/{solarized-light-DBcfxrfG.js → solarized-light-DUsjROvl.js} +0 -0
  394. package/dist/client/assets/{solidity-DH-yUSWc.js → solidity-Bfbm9QZQ.js} +0 -0
  395. package/dist/client/assets/{splunk-CIjc4kxs.js → splunk-6DJA2XFa.js} +0 -0
  396. package/dist/client/assets/{ssh-config-BKVd4drG.js → ssh-config-CbQtdF-u.js} +0 -0
  397. package/dist/client/assets/{stylus-tqAsmugv.js → stylus-B_iq45Sj.js} +0 -0
  398. package/dist/client/assets/{swift-CdDBQ3_Z.js → swift-C7KIgN-p.js} +0 -0
  399. package/dist/client/assets/{synthwave-84-CbbRs73K.js → synthwave-84-lf_Wt0K_.js} +0 -0
  400. package/dist/client/assets/{system-verilog-CBqEY-9v.js → system-verilog-C3G9wERd.js} +0 -0
  401. package/dist/client/assets/{systemd-khRP5zwK.js → systemd-CwxGrojj.js} +0 -0
  402. package/dist/client/assets/{talonscript-D_lneH-6.js → talonscript-DqnSo1EO.js} +0 -0
  403. package/dist/client/assets/{tasl-CLymawGe.js → tasl-T8ethp86.js} +0 -0
  404. package/dist/client/assets/{tcl-BRY1S87U.js → tcl-Ccl366o0.js} +0 -0
  405. package/dist/client/assets/{terraform-BqohMo2f.js → terraform-BBf6ZI_0.js} +0 -0
  406. package/dist/client/assets/{tokyo-night-BWUONxad.js → tokyo-night-BF5ata25.js} +0 -0
  407. package/dist/client/assets/{toml-C4c85Lwg.js → toml-C5Z_BR4r.js} +0 -0
  408. package/dist/client/assets/{tsv-DsZq9HBQ.js → tsv-rX8sUJs7.js} +0 -0
  409. package/dist/client/assets/{turtle-Dpr8zLlw.js → turtle-BM-MG8WY.js} +0 -0
  410. package/dist/client/assets/{typespec-DcqgATB-.js → typespec-C5gKydvR.js} +0 -0
  411. package/dist/client/assets/{typst-CeVxmuPg.js → typst--_5VchrY.js} +0 -0
  412. package/dist/client/assets/{v-C2Qsh2-1.js → v-C6PwpmTC.js} +0 -0
  413. package/dist/client/assets/{vala-CvZ3yL7c.js → vala-4pTaceSj.js} +0 -0
  414. package/dist/client/assets/{vb-B_p4qDw4.js → vb-DhoR5A6S.js} +0 -0
  415. package/dist/client/assets/{verilog-D8MGjxD7.js → verilog-B9f_1lPn.js} +0 -0
  416. package/dist/client/assets/{vesper-DossXiE1.js → vesper-CmBi_iCT.js} +0 -0
  417. package/dist/client/assets/{vhdl-MLyYh_Gz.js → vhdl-Cy4RAmOe.js} +0 -0
  418. package/dist/client/assets/{viml-BuYIArcz.js → viml-CFQW-CcD.js} +0 -0
  419. package/dist/client/assets/{vitesse-black-C3kc1227.js → vitesse-black-CE8RoBJP.js} +0 -0
  420. package/dist/client/assets/{vitesse-dark-kWOu5V36.js → vitesse-dark-BpF142p_.js} +0 -0
  421. package/dist/client/assets/{vitesse-light-DMtiL8bK.js → vitesse-light-CMwxPBrg.js} +0 -0
  422. package/dist/client/assets/{vyper-CNqG09-_.js → vyper-BW5zj9bE.js} +0 -0
  423. package/dist/client/assets/{wasm-BsQDV7Y0.js → wasm-BigxSLnm.js} +0 -0
  424. package/dist/client/assets/{wasm-DFVlQlgd.js → wasm-CSccDuAq.js} +0 -0
  425. package/dist/client/assets/{wenyan-BmOQge13.js → wenyan-BZzM1SQT.js} +0 -0
  426. package/dist/client/assets/{wgsl-CgWrmvIg.js → wgsl-xBPHbLlq.js} +0 -0
  427. package/dist/client/assets/{wikitext-DkwckXCk.js → wikitext-BXJWUNJK.js} +0 -0
  428. package/dist/client/assets/{wit-CtyVFGe7.js → wit-2GnUs67P.js} +0 -0
  429. package/dist/client/assets/{wolfram-CXE4FrKz.js → wolfram-DIFDmw-g.js} +0 -0
  430. package/dist/client/assets/{zenscript-DH15wJt0.js → zenscript-DQaUUjbx.js} +0 -0
  431. package/dist/client/assets/{zig-CqXN9brD.js → zig-BDepRvBi.js} +0 -0
  432. package/dist/{update-check-KL-2sGxE.mjs → update-check-DAPFCqpF.mjs} +1 -1
@@ -1,253 +0,0 @@
1
- import { c as formatComments, n as readServerLock, o as formatPlanReview, t as isLockAlive } from "./server-lock-CAdqFSfl.mjs";
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { z } from "zod";
5
- //#region src/mcp.ts
6
- /**
7
- * MCP server exposing diffing's review handoff as cross-vendor tools, so any
8
- * MCP-capable agent (Claude, Cursor, Codex, Gemini, …) can drive the same loop
9
- * the CLI does. Launched via `diffing mcp` over stdio. The port is discovered
10
- * per call from the per-repo lockfile, so the MCP server works whether it
11
- * starts before or after the diffing web server.
12
- *
13
- * Client config (no port needed):
14
- * { "mcpServers": { "diffing": { "command": "diffing", "args": ["mcp"] } } }
15
- */
16
- /** Resolve the running server's base URL, throwing a tool-friendly error. */
17
- function baseUrl() {
18
- const lock = readServerLock();
19
- if (!lock || !isLockAlive(lock)) throw new Error("No diffing server running for this repo. Start one with `diffing` in the repository, then retry.");
20
- return `http://${lock.host === "0.0.0.0" || lock.host === "::" ? "127.0.0.1" : lock.host}:${lock.port}`;
21
- }
22
- function textResult(text, structuredContent) {
23
- return {
24
- content: [{
25
- type: "text",
26
- text
27
- }],
28
- ...structuredContent ? { structuredContent } : {}
29
- };
30
- }
31
- async function startMcpServer() {
32
- const server = new McpServer({
33
- name: "diffing",
34
- version: "0.1.0"
35
- });
36
- server.registerTool("await_review", {
37
- title: "Await review",
38
- description: "Block until the human clicks \"Send to agent\" in the diffing UI, then return the review comments as XML. Re-poll-safe: returns the next review batch.",
39
- inputSchema: { timeoutSeconds: z.number().optional() }
40
- }, async ({ timeoutSeconds }, extra) => {
41
- const base = baseUrl();
42
- const totalBudgetMs = (timeoutSeconds ?? 570) * 1e3;
43
- const progressToken = extra?._meta?.progressToken;
44
- let sinceRound = 0;
45
- try {
46
- sinceRound = (await fetch(`${base}/api/review/status`).then((r) => r.json())).round ?? 0;
47
- } catch {}
48
- const deadline = Date.now() + totalBudgetMs;
49
- let cycle = 0;
50
- while (Date.now() < deadline) {
51
- const result = await (await fetch(`${base}/api/review/await?timeoutMs=25000&sinceRound=${sinceRound}`, { signal: extra?.signal })).json();
52
- if (result.status === "released") return textResult(result.payload.commentXml, {
53
- round: result.payload.round,
54
- openCount: result.payload.openCount,
55
- comments: result.payload.comments
56
- });
57
- sinceRound = result.round ?? sinceRound;
58
- cycle += 1;
59
- if (progressToken !== void 0) await extra?.sendNotification?.({
60
- method: "notifications/progress",
61
- params: {
62
- progressToken,
63
- progress: cycle,
64
- message: "Waiting for the human to send their review…"
65
- }
66
- }).catch(() => {});
67
- }
68
- return textResult("No review was sent within the timeout. Call await_review again to keep waiting.");
69
- });
70
- server.registerTool("list_comments", {
71
- title: "List comments",
72
- description: "Fetch the current review comments as XML (and structured data). Set openOnly to skip resolved comments.",
73
- inputSchema: { openOnly: z.boolean().optional() }
74
- }, async ({ openOnly }) => {
75
- const all = await fetch(`${baseUrl()}/api/comments`).then((r) => r.json());
76
- const selected = openOnly ? all.filter((c) => c.status === "open") : all;
77
- return textResult(formatComments(selected), { comments: selected });
78
- });
79
- server.registerTool("reply_to_comment", {
80
- title: "Reply to comment",
81
- description: "Post an agent reply to a review comment. Shows up in the diffing UI in real time.",
82
- inputSchema: {
83
- commentId: z.string(),
84
- body: z.string(),
85
- model: z.string().optional()
86
- }
87
- }, async ({ commentId, body, model }) => {
88
- const res = await fetch(`${baseUrl()}/api/comments/${commentId}/replies`, {
89
- method: "POST",
90
- headers: { "Content-Type": "application/json" },
91
- body: JSON.stringify({
92
- body,
93
- role: "agent",
94
- model
95
- })
96
- });
97
- if (res.status === 404) throw new Error(`Comment ${commentId} not found.`);
98
- if (!res.ok) throw new Error(`Failed to reply: HTTP ${res.status}`);
99
- return textResult(`Replied to ${commentId}.`);
100
- });
101
- server.registerTool("resolve_comment", {
102
- title: "Resolve comment",
103
- description: "Mark a review comment as resolved.",
104
- inputSchema: { commentId: z.string() }
105
- }, async ({ commentId }) => {
106
- const res = await fetch(`${baseUrl()}/api/comments/${commentId}`, {
107
- method: "PUT",
108
- headers: { "Content-Type": "application/json" },
109
- body: JSON.stringify({ status: "resolved" })
110
- });
111
- if (res.status === 404) throw new Error(`Comment ${commentId} not found.`);
112
- if (!res.ok) throw new Error(`Failed to resolve: HTTP ${res.status}`);
113
- return textResult(`Resolved ${commentId}.`);
114
- });
115
- server.registerTool("submit_plan", {
116
- title: "Submit plan for review",
117
- description: "Submit a markdown plan for the human to review in the diffing UI. Returns the plan id and review URL. Pass an existing planId to resubmit a revised version for another review round.",
118
- inputSchema: {
119
- title: z.string().optional(),
120
- body: z.string(),
121
- source: z.string().optional(),
122
- model: z.string().optional(),
123
- planId: z.string().optional()
124
- }
125
- }, async ({ title, body, source, model, planId }) => {
126
- const base = baseUrl();
127
- const res = await fetch(`${base}/api/plans`, {
128
- method: "POST",
129
- headers: { "Content-Type": "application/json" },
130
- body: JSON.stringify({
131
- id: planId,
132
- title,
133
- body,
134
- source,
135
- model
136
- })
137
- });
138
- if (!res.ok) throw new Error(`Failed to submit plan: HTTP ${res.status}`);
139
- const plan = await res.json();
140
- return textResult(`Submitted plan ${plan.id} (v${plan.version}). The human can review it at ${base}/plan/${plan.id}. Call await_plan_review to block until they decide.`, {
141
- planId: plan.id,
142
- version: plan.version,
143
- url: `${base}/plan/${plan.id}`
144
- });
145
- });
146
- server.registerTool("await_plan_review", {
147
- title: "Await plan review",
148
- description: "Block until the human approves, rejects, or requests changes on a plan in the diffing UI, then return the verdict and inline comments as XML. Re-poll-safe.",
149
- inputSchema: { timeoutSeconds: z.number().optional() }
150
- }, async ({ timeoutSeconds }, extra) => {
151
- const base = baseUrl();
152
- const totalBudgetMs = (timeoutSeconds ?? 570) * 1e3;
153
- const progressToken = extra?._meta?.progressToken;
154
- let sinceRound = 0;
155
- try {
156
- sinceRound = (await fetch(`${base}/api/plan-review/status`).then((r) => r.json())).round ?? 0;
157
- } catch {}
158
- const deadline = Date.now() + totalBudgetMs;
159
- let cycle = 0;
160
- while (Date.now() < deadline) {
161
- const result = await (await fetch(`${base}/api/plan-review/await?timeoutMs=25000&sinceRound=${sinceRound}`, { signal: extra?.signal })).json();
162
- if (result.status === "released") return textResult(result.payload.reviewXml, {
163
- round: result.payload.round,
164
- planId: result.payload.planId,
165
- decision: result.payload.decision,
166
- decisionComment: result.payload.decisionComment,
167
- openCommentCount: result.payload.openCommentCount,
168
- plan: result.payload.plan
169
- });
170
- sinceRound = result.round ?? sinceRound;
171
- cycle += 1;
172
- if (progressToken !== void 0) await extra?.sendNotification?.({
173
- method: "notifications/progress",
174
- params: {
175
- progressToken,
176
- progress: cycle,
177
- message: "Waiting for the human to review the plan…"
178
- }
179
- }).catch(() => {});
180
- }
181
- return textResult("No plan decision within the timeout. Call await_plan_review again to keep waiting.");
182
- });
183
- server.registerTool("list_plans", {
184
- title: "List plans",
185
- description: "Fetch all submitted plans with their current decision and open-comment counts.",
186
- inputSchema: {}
187
- }, async () => {
188
- const all = await fetch(`${baseUrl()}/api/plans`).then((r) => r.json());
189
- return textResult(all.map((p) => {
190
- const open = (p.comments ?? []).filter((c) => c.status === "open").length;
191
- return `${p.id} [${p.decision}] v${p.version} — ${open} open comment(s) — ${p.title}`;
192
- }).join("\n") || "No plans submitted yet.", { plans: all });
193
- });
194
- server.registerTool("get_plan", {
195
- title: "Get plan",
196
- description: "Fetch a single plan as the <plan-review> XML (and structured data), including its decision and inline comments.",
197
- inputSchema: { planId: z.string() }
198
- }, async ({ planId }) => {
199
- const res = await fetch(`${baseUrl()}/api/plans/${planId}`);
200
- if (res.status === 404) throw new Error(`Plan ${planId} not found.`);
201
- if (!res.ok) throw new Error(`Failed to fetch plan: HTTP ${res.status}`);
202
- const plan = await res.json();
203
- return textResult(formatPlanReview(plan), { plan });
204
- });
205
- /** Resolve which plan owns a comment id, for the reply/resolve tools. */
206
- async function findPlanForComment(base, commentId) {
207
- return (await fetch(`${base}/api/plans`).then((r) => r.json())).find((p) => (p.comments ?? []).some((c) => c.id === commentId)) ?? null;
208
- }
209
- server.registerTool("reply_to_plan_comment", {
210
- title: "Reply to plan comment",
211
- description: "Post an agent reply to a plan review comment. Shows up in the diffing UI in real time.",
212
- inputSchema: {
213
- commentId: z.string(),
214
- body: z.string(),
215
- model: z.string().optional()
216
- }
217
- }, async ({ commentId, body, model }) => {
218
- const base = baseUrl();
219
- const plan = await findPlanForComment(base, commentId);
220
- if (!plan) throw new Error(`Plan comment ${commentId} not found.`);
221
- const res = await fetch(`${base}/api/plans/${plan.id}/comments/${commentId}/replies`, {
222
- method: "POST",
223
- headers: { "Content-Type": "application/json" },
224
- body: JSON.stringify({
225
- body,
226
- role: "agent",
227
- model
228
- })
229
- });
230
- if (!res.ok) throw new Error(`Failed to reply: HTTP ${res.status}`);
231
- return textResult(`Replied to plan comment ${commentId}.`);
232
- });
233
- server.registerTool("resolve_plan_comment", {
234
- title: "Resolve plan comment",
235
- description: "Mark a plan review comment as resolved.",
236
- inputSchema: { commentId: z.string() }
237
- }, async ({ commentId }) => {
238
- const base = baseUrl();
239
- const plan = await findPlanForComment(base, commentId);
240
- if (!plan) throw new Error(`Plan comment ${commentId} not found.`);
241
- const res = await fetch(`${base}/api/plans/${plan.id}/comments/${commentId}`, {
242
- method: "PUT",
243
- headers: { "Content-Type": "application/json" },
244
- body: JSON.stringify({ status: "resolved" })
245
- });
246
- if (!res.ok) throw new Error(`Failed to resolve: HTTP ${res.status}`);
247
- return textResult(`Resolved plan comment ${commentId}.`);
248
- });
249
- const transport = new StdioServerTransport();
250
- await server.connect(transport);
251
- }
252
- //#endregion
253
- export { startMcpServer };
@@ -1,119 +0,0 @@
1
- import { a as formatComments, n as readServerLock, t as isLockAlive } from "./server-lock-DIkImokU.mjs";
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { z } from "zod";
5
- //#region src/mcp.ts
6
- /**
7
- * MCP server exposing diffit's review handoff as cross-vendor tools, so any
8
- * MCP-capable agent (Claude, Cursor, Codex, Gemini, …) can drive the same loop
9
- * the CLI does. Launched via `diffit mcp` over stdio. The port is discovered
10
- * per call from the per-repo lockfile, so the MCP server works whether it
11
- * starts before or after the diffit web server.
12
- *
13
- * Client config (no port needed):
14
- * { "mcpServers": { "diffit": { "command": "diffit", "args": ["mcp"] } } }
15
- */
16
- /** Resolve the running server's base URL, throwing a tool-friendly error. */
17
- function baseUrl() {
18
- const lock = readServerLock();
19
- if (!lock || !isLockAlive(lock)) throw new Error("No diffit server running for this repo. Start one with `diffit` in the repository, then retry.");
20
- return `http://${lock.host === "0.0.0.0" || lock.host === "::" ? "127.0.0.1" : lock.host}:${lock.port}`;
21
- }
22
- function textResult(text, structuredContent) {
23
- return {
24
- content: [{
25
- type: "text",
26
- text
27
- }],
28
- ...structuredContent ? { structuredContent } : {}
29
- };
30
- }
31
- async function startMcpServer() {
32
- const server = new McpServer({
33
- name: "diffit",
34
- version: "0.12.1"
35
- });
36
- server.registerTool("await_review", {
37
- title: "Await review",
38
- description: "Block until the human clicks \"Send to agent\" in the diffit UI, then return the review comments as XML. Re-poll-safe: returns the next review batch.",
39
- inputSchema: { timeoutSeconds: z.number().optional() }
40
- }, async ({ timeoutSeconds }, extra) => {
41
- const base = baseUrl();
42
- const totalBudgetMs = (timeoutSeconds ?? 570) * 1e3;
43
- const progressToken = extra?._meta?.progressToken;
44
- let sinceRound = 0;
45
- try {
46
- sinceRound = (await fetch(`${base}/api/review/status`).then((r) => r.json())).round ?? 0;
47
- } catch {}
48
- const deadline = Date.now() + totalBudgetMs;
49
- let cycle = 0;
50
- while (Date.now() < deadline) {
51
- const result = await (await fetch(`${base}/api/review/await?timeoutMs=25000&sinceRound=${sinceRound}`, { signal: extra?.signal })).json();
52
- if (result.status === "released") return textResult(result.payload.commentXml, {
53
- round: result.payload.round,
54
- openCount: result.payload.openCount,
55
- comments: result.payload.comments
56
- });
57
- sinceRound = result.round ?? sinceRound;
58
- cycle += 1;
59
- if (progressToken !== void 0) await extra?.sendNotification?.({
60
- method: "notifications/progress",
61
- params: {
62
- progressToken,
63
- progress: cycle,
64
- message: "Waiting for the human to send their review…"
65
- }
66
- }).catch(() => {});
67
- }
68
- return textResult("No review was sent within the timeout. Call await_review again to keep waiting.");
69
- });
70
- server.registerTool("list_comments", {
71
- title: "List comments",
72
- description: "Fetch the current review comments as XML (and structured data). Set openOnly to skip resolved comments.",
73
- inputSchema: { openOnly: z.boolean().optional() }
74
- }, async ({ openOnly }) => {
75
- const all = await fetch(`${baseUrl()}/api/comments`).then((r) => r.json());
76
- const selected = openOnly ? all.filter((c) => c.status === "open") : all;
77
- return textResult(formatComments(selected), { comments: selected });
78
- });
79
- server.registerTool("reply_to_comment", {
80
- title: "Reply to comment",
81
- description: "Post an agent reply to a review comment. Shows up in the diffit UI in real time.",
82
- inputSchema: {
83
- commentId: z.string(),
84
- body: z.string(),
85
- model: z.string().optional()
86
- }
87
- }, async ({ commentId, body, model }) => {
88
- const res = await fetch(`${baseUrl()}/api/comments/${commentId}/replies`, {
89
- method: "POST",
90
- headers: { "Content-Type": "application/json" },
91
- body: JSON.stringify({
92
- body,
93
- role: "agent",
94
- model
95
- })
96
- });
97
- if (res.status === 404) throw new Error(`Comment ${commentId} not found.`);
98
- if (!res.ok) throw new Error(`Failed to reply: HTTP ${res.status}`);
99
- return textResult(`Replied to ${commentId}.`);
100
- });
101
- server.registerTool("resolve_comment", {
102
- title: "Resolve comment",
103
- description: "Mark a review comment as resolved.",
104
- inputSchema: { commentId: z.string() }
105
- }, async ({ commentId }) => {
106
- const res = await fetch(`${baseUrl()}/api/comments/${commentId}`, {
107
- method: "PUT",
108
- headers: { "Content-Type": "application/json" },
109
- body: JSON.stringify({ status: "resolved" })
110
- });
111
- if (res.status === 404) throw new Error(`Comment ${commentId} not found.`);
112
- if (!res.ok) throw new Error(`Failed to resolve: HTTP ${res.status}`);
113
- return textResult(`Resolved ${commentId}.`);
114
- });
115
- const transport = new StdioServerTransport();
116
- await server.connect(transport);
117
- }
118
- //#endregion
119
- export { startMcpServer };
@@ -1,254 +0,0 @@
1
- import { c as formatComments, n as readServerLock, o as formatPlanReview, t as isLockAlive } from "./server-lock-DpCrvL-Z.mjs";
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { z } from "zod";
5
- //#region src/mcp.ts
6
- /**
7
- * MCP server exposing diffing's review handoff as cross-vendor tools, so any
8
- * MCP-capable agent (Claude, Cursor, Codex, Gemini, …) can drive the same loop
9
- * the CLI does. Launched via `diffing mcp` over stdio. The port is discovered
10
- * per call from the per-repo lockfile, so the MCP server works whether it
11
- * starts before or after the diffing web server.
12
- *
13
- * Client config (no port needed):
14
- * { "mcpServers": { "diffing": { "command": "diffing", "args": ["mcp"] } } }
15
- */
16
- /** Resolve the running server's base URL, throwing a tool-friendly error. */
17
- function baseUrl() {
18
- const lock = readServerLock();
19
- if (!lock || !isLockAlive(lock)) throw new Error("No diffing server running for this repo. Start one with `diffing` in the repository, then retry.");
20
- return `http://${lock.host === "0.0.0.0" || lock.host === "::" ? "127.0.0.1" : lock.host}:${lock.port}`;
21
- }
22
- function textResult(text, structuredContent) {
23
- return {
24
- content: [{
25
- type: "text",
26
- text
27
- }],
28
- ...structuredContent ? { structuredContent } : {}
29
- };
30
- }
31
- async function startMcpServer() {
32
- const server = new McpServer({
33
- name: "diffing",
34
- version: "0.1.0"
35
- });
36
- server.registerTool("await_review", {
37
- title: "Await review",
38
- description: "Block until the human clicks \"Send to agent\" in the diffing UI, then return the review comments as XML. Re-poll-safe: returns the next review batch.",
39
- inputSchema: { timeoutSeconds: z.number().optional() }
40
- }, async ({ timeoutSeconds }, extra) => {
41
- const base = baseUrl();
42
- const totalBudgetMs = (timeoutSeconds ?? 570) * 1e3;
43
- const progressToken = extra?._meta?.progressToken;
44
- let sinceRound = 0;
45
- try {
46
- sinceRound = (await fetch(`${base}/api/review/status`).then((r) => r.json())).round ?? 0;
47
- } catch {}
48
- const deadline = Date.now() + totalBudgetMs;
49
- let cycle = 0;
50
- while (Date.now() < deadline) {
51
- const result = await (await fetch(`${base}/api/review/await?timeoutMs=25000&sinceRound=${sinceRound}`, { signal: extra?.signal })).json();
52
- if (result.status === "released") return textResult(result.payload.commentXml, {
53
- round: result.payload.round,
54
- openCount: result.payload.openCount,
55
- decision: result.payload.decision,
56
- comments: result.payload.comments
57
- });
58
- sinceRound = result.round ?? sinceRound;
59
- cycle += 1;
60
- if (progressToken !== void 0) await extra?.sendNotification?.({
61
- method: "notifications/progress",
62
- params: {
63
- progressToken,
64
- progress: cycle,
65
- message: "Waiting for the human to send their review…"
66
- }
67
- }).catch(() => {});
68
- }
69
- return textResult("No review was sent within the timeout. Call await_review again to keep waiting.");
70
- });
71
- server.registerTool("list_comments", {
72
- title: "List comments",
73
- description: "Fetch the current review comments as XML (and structured data). Set openOnly to skip resolved comments.",
74
- inputSchema: { openOnly: z.boolean().optional() }
75
- }, async ({ openOnly }) => {
76
- const all = await fetch(`${baseUrl()}/api/comments`).then((r) => r.json());
77
- const selected = openOnly ? all.filter((c) => c.status === "open") : all;
78
- return textResult(formatComments(selected), { comments: selected });
79
- });
80
- server.registerTool("reply_to_comment", {
81
- title: "Reply to comment",
82
- description: "Post an agent reply to a review comment. Shows up in the diffing UI in real time.",
83
- inputSchema: {
84
- commentId: z.string(),
85
- body: z.string(),
86
- model: z.string().optional()
87
- }
88
- }, async ({ commentId, body, model }) => {
89
- const res = await fetch(`${baseUrl()}/api/comments/${commentId}/replies`, {
90
- method: "POST",
91
- headers: { "Content-Type": "application/json" },
92
- body: JSON.stringify({
93
- body,
94
- role: "agent",
95
- model
96
- })
97
- });
98
- if (res.status === 404) throw new Error(`Comment ${commentId} not found.`);
99
- if (!res.ok) throw new Error(`Failed to reply: HTTP ${res.status}`);
100
- return textResult(`Replied to ${commentId}.`);
101
- });
102
- server.registerTool("resolve_comment", {
103
- title: "Resolve comment",
104
- description: "Mark a review comment as resolved.",
105
- inputSchema: { commentId: z.string() }
106
- }, async ({ commentId }) => {
107
- const res = await fetch(`${baseUrl()}/api/comments/${commentId}`, {
108
- method: "PUT",
109
- headers: { "Content-Type": "application/json" },
110
- body: JSON.stringify({ status: "resolved" })
111
- });
112
- if (res.status === 404) throw new Error(`Comment ${commentId} not found.`);
113
- if (!res.ok) throw new Error(`Failed to resolve: HTTP ${res.status}`);
114
- return textResult(`Resolved ${commentId}.`);
115
- });
116
- server.registerTool("submit_plan", {
117
- title: "Submit plan for review",
118
- description: "Submit a markdown plan for the human to review in the diffing UI. Returns the plan id and review URL. Pass an existing planId to resubmit a revised version for another review round.",
119
- inputSchema: {
120
- title: z.string().optional(),
121
- body: z.string(),
122
- source: z.string().optional(),
123
- model: z.string().optional(),
124
- planId: z.string().optional()
125
- }
126
- }, async ({ title, body, source, model, planId }) => {
127
- const base = baseUrl();
128
- const res = await fetch(`${base}/api/plans`, {
129
- method: "POST",
130
- headers: { "Content-Type": "application/json" },
131
- body: JSON.stringify({
132
- id: planId,
133
- title,
134
- body,
135
- source,
136
- model
137
- })
138
- });
139
- if (!res.ok) throw new Error(`Failed to submit plan: HTTP ${res.status}`);
140
- const plan = await res.json();
141
- return textResult(`Submitted plan ${plan.id} (v${plan.version}). The human can review it at ${base}/plan/${plan.id}. Call await_plan_review to block until they decide.`, {
142
- planId: plan.id,
143
- version: plan.version,
144
- url: `${base}/plan/${plan.id}`
145
- });
146
- });
147
- server.registerTool("await_plan_review", {
148
- title: "Await plan review",
149
- description: "Block until the human approves, rejects, or requests changes on a plan in the diffing UI, then return the verdict and inline comments as XML. Re-poll-safe.",
150
- inputSchema: { timeoutSeconds: z.number().optional() }
151
- }, async ({ timeoutSeconds }, extra) => {
152
- const base = baseUrl();
153
- const totalBudgetMs = (timeoutSeconds ?? 570) * 1e3;
154
- const progressToken = extra?._meta?.progressToken;
155
- let sinceRound = 0;
156
- try {
157
- sinceRound = (await fetch(`${base}/api/plan-review/status`).then((r) => r.json())).round ?? 0;
158
- } catch {}
159
- const deadline = Date.now() + totalBudgetMs;
160
- let cycle = 0;
161
- while (Date.now() < deadline) {
162
- const result = await (await fetch(`${base}/api/plan-review/await?timeoutMs=25000&sinceRound=${sinceRound}`, { signal: extra?.signal })).json();
163
- if (result.status === "released") return textResult(result.payload.reviewXml, {
164
- round: result.payload.round,
165
- planId: result.payload.planId,
166
- decision: result.payload.decision,
167
- decisionComment: result.payload.decisionComment,
168
- openCommentCount: result.payload.openCommentCount,
169
- plan: result.payload.plan
170
- });
171
- sinceRound = result.round ?? sinceRound;
172
- cycle += 1;
173
- if (progressToken !== void 0) await extra?.sendNotification?.({
174
- method: "notifications/progress",
175
- params: {
176
- progressToken,
177
- progress: cycle,
178
- message: "Waiting for the human to review the plan…"
179
- }
180
- }).catch(() => {});
181
- }
182
- return textResult("No plan decision within the timeout. Call await_plan_review again to keep waiting.");
183
- });
184
- server.registerTool("list_plans", {
185
- title: "List plans",
186
- description: "Fetch all submitted plans with their current decision and open-comment counts.",
187
- inputSchema: {}
188
- }, async () => {
189
- const all = await fetch(`${baseUrl()}/api/plans`).then((r) => r.json());
190
- return textResult(all.map((p) => {
191
- const open = (p.comments ?? []).filter((c) => c.status === "open").length;
192
- return `${p.id} [${p.decision}] v${p.version} — ${open} open comment(s) — ${p.title}`;
193
- }).join("\n") || "No plans submitted yet.", { plans: all });
194
- });
195
- server.registerTool("get_plan", {
196
- title: "Get plan",
197
- description: "Fetch a single plan as the <plan-review> XML (and structured data), including its decision and inline comments.",
198
- inputSchema: { planId: z.string() }
199
- }, async ({ planId }) => {
200
- const res = await fetch(`${baseUrl()}/api/plans/${planId}`);
201
- if (res.status === 404) throw new Error(`Plan ${planId} not found.`);
202
- if (!res.ok) throw new Error(`Failed to fetch plan: HTTP ${res.status}`);
203
- const plan = await res.json();
204
- return textResult(formatPlanReview(plan), { plan });
205
- });
206
- /** Resolve which plan owns a comment id, for the reply/resolve tools. */
207
- async function findPlanForComment(base, commentId) {
208
- return (await fetch(`${base}/api/plans`).then((r) => r.json())).find((p) => (p.comments ?? []).some((c) => c.id === commentId)) ?? null;
209
- }
210
- server.registerTool("reply_to_plan_comment", {
211
- title: "Reply to plan comment",
212
- description: "Post an agent reply to a plan review comment. Shows up in the diffing UI in real time.",
213
- inputSchema: {
214
- commentId: z.string(),
215
- body: z.string(),
216
- model: z.string().optional()
217
- }
218
- }, async ({ commentId, body, model }) => {
219
- const base = baseUrl();
220
- const plan = await findPlanForComment(base, commentId);
221
- if (!plan) throw new Error(`Plan comment ${commentId} not found.`);
222
- const res = await fetch(`${base}/api/plans/${plan.id}/comments/${commentId}/replies`, {
223
- method: "POST",
224
- headers: { "Content-Type": "application/json" },
225
- body: JSON.stringify({
226
- body,
227
- role: "agent",
228
- model
229
- })
230
- });
231
- if (!res.ok) throw new Error(`Failed to reply: HTTP ${res.status}`);
232
- return textResult(`Replied to plan comment ${commentId}.`);
233
- });
234
- server.registerTool("resolve_plan_comment", {
235
- title: "Resolve plan comment",
236
- description: "Mark a plan review comment as resolved.",
237
- inputSchema: { commentId: z.string() }
238
- }, async ({ commentId }) => {
239
- const base = baseUrl();
240
- const plan = await findPlanForComment(base, commentId);
241
- if (!plan) throw new Error(`Plan comment ${commentId} not found.`);
242
- const res = await fetch(`${base}/api/plans/${plan.id}/comments/${commentId}`, {
243
- method: "PUT",
244
- headers: { "Content-Type": "application/json" },
245
- body: JSON.stringify({ status: "resolved" })
246
- });
247
- if (!res.ok) throw new Error(`Failed to resolve: HTTP ${res.status}`);
248
- return textResult(`Resolved plan comment ${commentId}.`);
249
- });
250
- const transport = new StdioServerTransport();
251
- await server.connect(transport);
252
- }
253
- //#endregion
254
- export { startMcpServer };