diffing 0.2.1 → 0.4.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 (436) hide show
  1. package/README.md +169 -3
  2. package/dist/{cli-agent-BNwY5lZE.mjs → cli-agent-B4hU6Xay.mjs} +58 -5
  3. package/dist/{cli-agent-CbzXDSSF.mjs → cli-agent-B_PHd635.mjs} +58 -5
  4. package/dist/{cli-agent-ZAkixf4c.mjs → cli-agent-KxNAFIPf.mjs} +6 -2
  5. package/dist/cli-gh-CDGSpndZ.mjs +147 -0
  6. package/dist/cli-gh-abs-IJrz.mjs +147 -0
  7. package/dist/cli.mjs +1214 -56
  8. package/dist/client/assets/{angular-html-DsssUIMZ.js → angular-html-BVFBJbbm.js} +1 -1
  9. package/dist/client/assets/{angular-ts-dTg-sJ77.js → angular-ts-CbJB4bNJ.js} +1 -1
  10. package/dist/client/assets/{apl-C1yUKbqz.js → apl-MzqTwOQT.js} +1 -1
  11. package/dist/client/assets/arc-DkYz3FVO.js +1 -0
  12. package/dist/client/assets/architecture-7EHR7CIX-BM5HxebS.js +1 -0
  13. package/dist/client/assets/architectureDiagram-3BPJPVTR-CU3k1-_g.js +36 -0
  14. package/dist/client/assets/array-CkF66D10.js +1 -0
  15. package/dist/client/assets/{astro-BI07ha2y.js → astro-DDblGxmh.js} +1 -1
  16. package/dist/client/assets/{blade-DkzUGffS.js → blade-DlgT3iuV.js} +1 -1
  17. package/dist/client/assets/blockDiagram-GPEHLZMM-1lwkHRY_.js +132 -0
  18. package/dist/client/assets/{bsl-Dx5tFn3i.js → bsl-BrHd4RA2.js} +1 -1
  19. package/dist/client/assets/{c-KkuqqOvW.js → c-BL61MF4M.js} +1 -1
  20. package/dist/client/assets/c4Diagram-AAUBKEIU-BPBjnNM8.js +10 -0
  21. package/dist/client/assets/{cairo-wCCQTdA9.js → cairo-BDZ6TRZS.js} +1 -1
  22. package/dist/client/assets/channel-BX6tZjG6.js +1 -0
  23. package/dist/client/assets/chunk-2J33WTMH-C_SASPYW.js +1 -0
  24. package/dist/client/assets/chunk-3OPIFGDE-CTcbOBts.js +62 -0
  25. package/dist/client/assets/chunk-4BX2VUAB-BipHnfY4.js +1 -0
  26. package/dist/client/assets/chunk-4EGX6M5U-C70lfA2p.js +1 -0
  27. package/dist/client/assets/chunk-55IACEB6-BzJYLlnc.js +1 -0
  28. package/dist/client/assets/chunk-5DO6E6H7-PprNUwlI.js +1 -0
  29. package/dist/client/assets/chunk-5ZQYHXKU-CorupEGf.js +2 -0
  30. package/dist/client/assets/chunk-727SXJPM-Cqjzb4FZ.js +206 -0
  31. package/dist/client/assets/chunk-AQP2D5EJ-DcaAmtSe.js +231 -0
  32. package/dist/client/assets/chunk-BR22UD5L-D8XCYMy9.js +1 -0
  33. package/dist/client/assets/chunk-BSJP7CBP-CiBjSxwv.js +1 -0
  34. package/dist/client/assets/chunk-CSCIHK7Q-BTbf6qN3.js +124 -0
  35. package/dist/client/assets/chunk-FHYWG6QK-CcHPrHH1.js +1 -0
  36. package/dist/client/assets/chunk-FMBD7UC4-BA8_ZS2e.js +15 -0
  37. package/dist/client/assets/chunk-KSCS5N6A-ChcT2GOp.js +10 -0
  38. package/dist/client/assets/chunk-L5ZTLDWV-BjzpE0xm.js +1 -0
  39. package/dist/client/assets/chunk-LZXEDZCA-Bu0azrf_.js +2 -0
  40. package/dist/client/assets/chunk-MPE355IW-Bf9yHfDS.js +1 -0
  41. package/dist/client/assets/chunk-MZUSXYTE-CnUIUKI4.js +1 -0
  42. package/dist/client/assets/chunk-N66VUXT2-ahAf9GvV.js +1 -0
  43. package/dist/client/assets/chunk-ND2GUHAM-Co55RNsd.js +1 -0
  44. package/dist/client/assets/chunk-NNHCCRGN-DHF3V75i.js +159 -0
  45. package/dist/client/assets/chunk-NZK2D7GU-CtPYeO8_.js +1 -0
  46. package/dist/client/assets/chunk-O5CBEL6O-CzRKb_Hn.js +70 -0
  47. package/dist/client/assets/chunk-PUPMXCY4-D0KKIhut.js +1 -0
  48. package/dist/client/assets/chunk-QZHKN3VN-BCSN705V.js +1 -0
  49. package/dist/client/assets/chunk-UIBZB4QT-TYsZ_c8u.js +1 -0
  50. package/dist/client/assets/chunk-WCWK7LTN-Dj8SfnMU.js +1 -0
  51. package/dist/client/assets/chunk-WU5MYG2G-xPWDnrji.js +1 -0
  52. package/dist/client/assets/chunk-XPW4576I-CYH9wUok.js +32 -0
  53. package/dist/client/assets/classDiagram-4FO5ZUOK-7xfBUC5E.js +1 -0
  54. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CFM5yYso.js +1 -0
  55. package/dist/client/assets/{cobol-DRh7-jLi.js → cobol-D37UDAkO.js} +1 -1
  56. package/dist/client/assets/{coffee-wR_ZAh9a.js → coffee-NCjhDwWZ.js} +1 -1
  57. package/dist/client/assets/cose-bilkent-S5V4N54A-B8RnQ-yF.js +1 -0
  58. package/dist/client/assets/{cpp-OD_qyywn.js → cpp-CQUNgUz4.js} +1 -1
  59. package/dist/client/assets/{crystal-E4ahAddE.js → crystal-DGHLJtZ_.js} +1 -1
  60. package/dist/client/assets/{css-2NgE_uxz.js → css-xCgEbp_3.js} +1 -1
  61. package/dist/client/assets/cytoscape.esm-B7MQoI9k.js +321 -0
  62. package/dist/client/assets/dagre-BM42HDAG-CvmQMXPT.js +4 -0
  63. package/dist/client/assets/dagre-DAhKikc0.js +1 -0
  64. package/dist/client/assets/defaultLocale-B_TxGd0k.js +1 -0
  65. package/dist/client/assets/diagram-2AECGRRQ-wIyWTlXo.js +43 -0
  66. package/dist/client/assets/diagram-5GNKFQAL-BLMMWtHj.js +10 -0
  67. package/dist/client/assets/diagram-KO2AKTUF-Duz_hHky.js +3 -0
  68. package/dist/client/assets/diagram-LMA3HP47-CftQIrJ1.js +24 -0
  69. package/dist/client/assets/diagram-OG6HWLK6-7odjt2qL.js +24 -0
  70. package/dist/client/assets/dist-PmPhNea3.js +1 -0
  71. package/dist/client/assets/{edge-8mbscxxD.js → edge-C6_UFojU.js} +1 -1
  72. package/dist/client/assets/{elixir-CJv1b3Q6.js → elixir-B12MoaTY.js} +1 -1
  73. package/dist/client/assets/{elm-DUPzqZ9H.js → elm-C80KxC_R.js} +1 -1
  74. package/dist/client/assets/erDiagram-TEJ5UH35-DOeyf617.js +85 -0
  75. package/dist/client/assets/{erb-ssvEF26z.js → erb-DqelkF7l.js} +1 -1
  76. package/dist/client/assets/{erlang-CtK0kQ6z.js → erlang-cuhwpmsu.js} +1 -1
  77. package/dist/client/assets/eventmodeling-FCH6USID-hlXE2E34.js +1 -0
  78. package/dist/client/assets/flowDiagram-I6XJVG4X-BJX7W8r0.js +162 -0
  79. package/dist/client/assets/{fortran-fixed-form-DBM4e0_k.js → fortran-fixed-form-DWr0EnJn.js} +1 -1
  80. package/dist/client/assets/{fsharp-CmzzGQLe.js → fsharp-CQ5iYSPA.js} +1 -1
  81. package/dist/client/assets/ganttDiagram-6RSMTGT7-CFWnCca0.js +292 -0
  82. package/dist/client/assets/{gdresource-B_wbPqHd.js → gdresource-CN-lsNu5.js} +1 -1
  83. package/dist/client/assets/{git-commit-1z4D6NzL.js → git-commit-6e79eN7Q.js} +1 -1
  84. package/dist/client/assets/{git-rebase-DiWIK1Oa.js → git-rebase-7L4r_tbx.js} +1 -1
  85. package/dist/client/assets/gitGraph-WXDBUCRP-D_3ZhTam.js +1 -0
  86. package/dist/client/assets/gitGraphDiagram-PVQCEYII-oNErRHPR.js +106 -0
  87. package/dist/client/assets/{glimmer-js-DrHg6AuA.js → glimmer-js-8OQAbTGs.js} +1 -1
  88. package/dist/client/assets/{glimmer-ts-wQSGOa8A.js → glimmer-ts-3IyQiCHC.js} +1 -1
  89. package/dist/client/assets/{glsl-OY27QGY0.js → glsl-Bi_bzGJK.js} +1 -1
  90. package/dist/client/assets/graphlib-DBdw4opr.js +1 -0
  91. package/dist/client/assets/{graphql-CSWSqe6f.js → graphql-YcGxsBfT.js} +1 -1
  92. package/dist/client/assets/{hack-Bi1v624Q.js → hack-C9IpUqi6.js} +1 -1
  93. package/dist/client/assets/{haml-CX94zV9m.js → haml-YWDwVGeX.js} +1 -1
  94. package/dist/client/assets/{handlebars-C1j6wnjG.js → handlebars-zyG7ocdI.js} +1 -1
  95. package/dist/client/assets/{html-BcAjMlB7.js → html-CHYhpzfH.js} +1 -1
  96. package/dist/client/assets/{html-derivative-DcEpOzdx.js → html-derivative-BhgSILdB.js} +1 -1
  97. package/dist/client/assets/{http-BBxxSc6S.js → http-BPv6bUpq.js} +1 -1
  98. package/dist/client/assets/{hurl-CpKRNTz4.js → hurl-CpohSten.js} +1 -1
  99. package/dist/client/assets/{hxml-DC4KwKt2.js → hxml-nwJci6H5.js} +1 -1
  100. package/dist/client/assets/index-BIrpcT6-.js +3922 -0
  101. package/dist/client/assets/index-CMyunQt6.css +1 -0
  102. package/dist/client/assets/info-J43DQDTF-CAllC7mK.js +1 -0
  103. package/dist/client/assets/infoDiagram-5YYISTIA-D1xM4RZP.js +2 -0
  104. package/dist/client/assets/init-Ce66tIvf.js +1 -0
  105. package/dist/client/assets/ishikawaDiagram-YF4QCWOH-7DsxXa1L.js +70 -0
  106. package/dist/client/assets/{java-CFUlLvAA.js → java-Bt4sAY2m.js} +1 -1
  107. package/dist/client/assets/{javascript-C-HnT3sE.js → javascript-DZjI42QZ.js} +1 -1
  108. package/dist/client/assets/{jinja-CPU8RwNP.js → jinja-D2zTW07t.js} +1 -1
  109. package/dist/client/assets/{jison-CW0TBQOs.js → jison-Dz-ndIM5.js} +1 -1
  110. package/dist/client/assets/journeyDiagram-JHISSGLW-C_A1TmoL.js +139 -0
  111. package/dist/client/assets/{json-qUjlNuEJ.js → json-Ykn4LhOH.js} +1 -1
  112. package/dist/client/assets/{jsx-KWeo60kf.js → jsx-Ce8SKNSt.js} +1 -1
  113. package/dist/client/assets/{julia-CnJB8y2e.js → julia-DlfibiGU.js} +1 -1
  114. package/dist/client/assets/{just-Do22d9PP.js → just-CT2PIeY2.js} +1 -1
  115. package/dist/client/assets/kanban-definition-UN3LZRKU-ccKLE8Df.js +89 -0
  116. package/dist/client/assets/katex-eRFNlMh0.js +257 -0
  117. package/dist/client/assets/{latex-CCPgzvKn.js → latex-Dkfo8_p4.js} +1 -1
  118. package/dist/client/assets/line-BbqJI7bZ.js +1 -0
  119. package/dist/client/assets/linear-B7c0dSOq.js +1 -0
  120. package/dist/client/assets/{liquid-B9btdZoI.js → liquid-dWmg5egV.js} +1 -1
  121. package/dist/client/assets/{lua-IFRifurW.js → lua-6hNhLpj8.js} +1 -1
  122. package/dist/client/assets/{marko-CCaVBFq1.js → marko-DTVuQVoJ.js} +1 -1
  123. package/dist/client/assets/{mdc-BtbnOLUc.js → mdc-LbJVW6cj.js} +1 -1
  124. package/dist/client/assets/mermaid-parser.core-f-eKVdX9.js +4 -0
  125. package/dist/client/assets/mermaid.core-ClMOD6O3.js +9 -0
  126. package/dist/client/assets/mindmap-definition-RKZ34NQL-vaLTR09L.js +96 -0
  127. package/dist/client/assets/{nextflow-CApkvBGW.js → nextflow-DSfydIxt.js} +1 -1
  128. package/dist/client/assets/{nginx-BkbFZHVt.js → nginx-BvMTgdwH.js} +1 -1
  129. package/dist/client/assets/{nim-2uCd5j65.js → nim-BdGYhiTu.js} +1 -1
  130. package/dist/client/assets/ordinal-5ziJS8mo.js +1 -0
  131. package/dist/client/assets/packet-YPE3B663-Dy58IAiO.js +1 -0
  132. package/dist/client/assets/path-g3G46IZB.js +1 -0
  133. package/dist/client/assets/{perl-C4ixqSNT.js → perl-DamEOAxn.js} +1 -1
  134. package/dist/client/assets/{php-DJ8WOtcI.js → php-DtubpAAy.js} +1 -1
  135. package/dist/client/assets/pie-LRSECV5Y-FXFFfdz2.js +1 -0
  136. package/dist/client/assets/pieDiagram-4H26LBE5-yuTkGKaM.js +30 -0
  137. package/dist/client/assets/{pug-BOaafhT5.js → pug-CMYtl1BN.js} +1 -1
  138. package/dist/client/assets/{qml-CURE-1y4.js → qml-D76DCV4U.js} +1 -1
  139. package/dist/client/assets/quadrantDiagram-W4KKPZXB-Db00tlGp.js +7 -0
  140. package/dist/client/assets/{r-CPWmgzo3.js → r-gMTLVmYP.js} +1 -1
  141. package/dist/client/assets/radar-GUYGQ44K-BKTzSQ68.js +1 -0
  142. package/dist/client/assets/{razor-DH83VP_d.js → razor-1oOg77PO.js} +1 -1
  143. package/dist/client/assets/{regexp-BXVWi-t_.js → regexp-BJzbycG8.js} +1 -1
  144. package/dist/client/assets/requirementDiagram-4Y6WPE33-CwCGFaVe.js +84 -0
  145. package/dist/client/assets/rough.esm-BBrzuQ0N.js +1 -0
  146. package/dist/client/assets/{rst-Bbxxs6E2.js → rst-Be7RtxcU.js} +1 -1
  147. package/dist/client/assets/{ruby-C-TuWES4.js → ruby-oyNd3WUZ.js} +1 -1
  148. package/dist/client/assets/sankeyDiagram-5OEKKPKP-D78nH-eA.js +40 -0
  149. package/dist/client/assets/{sas-njzNYNOq.js → sas-Bx8dCxcK.js} +1 -1
  150. package/dist/client/assets/{scss-D2i6rHB8.js → scss-DzZEPh1d.js} +1 -1
  151. package/dist/client/assets/sequenceDiagram-3UESZ5HK-CEy9mjHg.js +162 -0
  152. package/dist/client/assets/{shaderlab-DXAhMdPo.js → shaderlab-CbbQwRPF.js} +1 -1
  153. package/dist/client/assets/{shellscript-D6Bxi40C.js → shellscript-t9s0AoBc.js} +1 -1
  154. package/dist/client/assets/{shellsession-Defxq-I6.js → shellsession-NczJO6Io.js} +1 -1
  155. package/dist/client/assets/{soy-D0GKXrtT.js → soy-Dl6InSac.js} +1 -1
  156. package/dist/client/assets/{sparql-BdcL8cbr.js → sparql-DEoxFJ5d.js} +1 -1
  157. package/dist/client/assets/{sql-BRW_ADkU.js → sql-DXkZEc28.js} +1 -1
  158. package/dist/client/assets/src-DCIMHd9M.js +1 -0
  159. package/dist/client/assets/{stata-w7w59F48.js → stata-DmpUDP7M.js} +1 -1
  160. package/dist/client/assets/stateDiagram-AJRCARHV-Cz0qtN4R.js +1 -0
  161. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Dye5cILT.js +1 -0
  162. package/dist/client/assets/{surrealql-O-lLuqz7.js → surrealql-BAZp4tA6.js} +1 -1
  163. package/dist/client/assets/{svelte-DN3DR5-t.js → svelte-DXBMAgu7.js} +1 -1
  164. package/dist/client/assets/{templ-CJ2JFoia.js → templ-CF-yfRM7.js} +1 -1
  165. package/dist/client/assets/{tex-CpWrf5g9.js → tex-D5tGX-j9.js} +1 -1
  166. package/dist/client/assets/timeline-definition-PNZ67QCA-B6_u5aFI.js +120 -0
  167. package/dist/client/assets/treeView-BLDUP644-DtjHwb6x.js +1 -0
  168. package/dist/client/assets/treemap-LRROVOQU-GqTXzMFU.js +1 -0
  169. package/dist/client/assets/{ts-tags-CZ6Af6Pe.js → ts-tags-DWMVxoO1.js} +1 -1
  170. package/dist/client/assets/{tsx-gIUSpRih.js → tsx-C6QVlWvX.js} +1 -1
  171. package/dist/client/assets/{twig-DwZINhmw.js → twig-DKFN0Lvm.js} +1 -1
  172. package/dist/client/assets/{typescript-Dj2aMECR.js → typescript-DVfrnfSW.js} +1 -1
  173. package/dist/client/assets/vennDiagram-CIIHVFJN-C_-TQFos.js +34 -0
  174. package/dist/client/assets/{vue-B5K0aWrP.js → vue-BCLQ-g1T.js} +1 -1
  175. package/dist/client/assets/{vue-html-DKGgrypd.js → vue-html-Ddr0JbE-.js} +1 -1
  176. package/dist/client/assets/{vue-vine-B5iDYTCh.js → vue-vine-CX36RUs5.js} +1 -1
  177. package/dist/client/assets/wardley-L42UT6IY-pROVAAhW.js +1 -0
  178. package/dist/client/assets/wardleyDiagram-YWT4CUSO-BJQg7Pb-.js +78 -0
  179. package/dist/client/assets/{xml-CbTzxfc-.js → xml-FnMA1W8C.js} +1 -1
  180. package/dist/client/assets/{xsl-Dj-Be6nx.js → xsl-CLduN3zs.js} +1 -1
  181. package/dist/client/assets/xychartDiagram-2RQKCTM6-1Ux8tle4.js +7 -0
  182. package/dist/client/assets/{yaml-rTK8uEjh.js → yaml-B6hNfHm7.js} +1 -1
  183. package/dist/client/index.html +2 -2
  184. package/dist/{mcp-CE77qfjx.mjs → mcp-BWeWR4yd.mjs} +2 -1
  185. package/dist/{mcp-CFeE13n-.mjs → mcp-DNZQvKKF.mjs} +45 -1
  186. package/dist/{mcp-SGCrfYGo.mjs → mcp-DO4zfNZX.mjs} +45 -1
  187. package/dist/plan-format-DVnF8xrq.mjs +126 -0
  188. package/dist/plan-format-f62JWFI-.mjs +117 -0
  189. package/dist/plan-format-mSDtsPcC.mjs +132 -0
  190. package/dist/{server-lock-B4crz9-_.mjs → server-lock-D73NKKbn.mjs} +267 -133
  191. package/dist/{server-lock-DpCrvL-Z.mjs → server-lock-Dj9fG9md.mjs} +246 -122
  192. package/package.json +26 -14
  193. package/dist/cli-agent-BLPX3oOP.mjs +0 -443
  194. package/dist/cli-agent-Cfuy9fLC.mjs +0 -179
  195. package/dist/cli-agent-CtNivjQW.mjs +0 -179
  196. package/dist/cli-agent-DZBvZoXZ.mjs +0 -179
  197. package/dist/cli-agent-DsqbS3n7.mjs +0 -443
  198. package/dist/cli-agent-Vbs-ePHv.mjs +0 -443
  199. package/dist/cli-agent-WzJPMH52.mjs +0 -174
  200. package/dist/cli-agent-uYUoCA4X.mjs +0 -179
  201. package/dist/client/assets/index-Bwv7BWUp.js +0 -3959
  202. package/dist/client/assets/index-CoZyJYkw.css +0 -1
  203. package/dist/mcp-BQmH_By-.mjs +0 -119
  204. package/dist/mcp-CLgzC8_a.mjs +0 -119
  205. package/dist/mcp-D9E2HQZ9.mjs +0 -119
  206. package/dist/mcp-DKlThflu.mjs +0 -253
  207. package/dist/mcp-LVbLV17O.mjs +0 -119
  208. package/dist/mcp-nMwTAut3.mjs +0 -119
  209. package/dist/server-lock-BbiF7u3F.mjs +0 -493
  210. package/dist/server-lock-Bx9ixiF6.mjs +0 -575
  211. package/dist/server-lock-CAdqFSfl.mjs +0 -691
  212. package/dist/server-lock-DIkImokU.mjs +0 -487
  213. package/dist/server-lock-DbxpfF3j.mjs +0 -575
  214. package/dist/update-check-DJuFE9w6.mjs +0 -128
  215. package/dist/update-check-DSC02MWQ.mjs +0 -129
  216. package/dist/client/assets/{abap-CkQ0tsz-.js → abap-cWYhO34H.js} +0 -0
  217. package/dist/client/assets/{actionscript-3-DHm0ZfF4.js → actionscript-3-B80ndJsD.js} +0 -0
  218. package/dist/client/assets/{ada-DK_ua92Z.js → ada-C0C0SoYB.js} +0 -0
  219. package/dist/client/assets/{andromeeda-D2ccw8v4.js → andromeeda-Ch2kWS7s.js} +0 -0
  220. package/dist/client/assets/{apache-DXtpFu7o.js → apache-DBwBm4bB.js} +0 -0
  221. package/dist/client/assets/{apex-DlnRRWpl.js → apex-FcV7UxQi.js} +0 -0
  222. package/dist/client/assets/{applescript-CShk62ad.js → applescript-hQs8VNpS.js} +0 -0
  223. package/dist/client/assets/{ara-CWN-FDkm.js → ara-BOadBOZg.js} +0 -0
  224. package/dist/client/assets/{asciidoc-Bg-PM9Vn.js → asciidoc-BsfqiBck.js} +0 -0
  225. package/dist/client/assets/{asm-DKOhR24S.js → asm-C2vUqzqz.js} +0 -0
  226. package/dist/client/assets/{aurora-x-DpaEirL8.js → aurora-x-BHLqzt7j.js} +0 -0
  227. package/dist/client/assets/{awk-3ibKHffv.js → awk-D4e-eeZT.js} +0 -0
  228. package/dist/client/assets/{ayu-dark-ursiSH5k.js → ayu-dark-DCotN_ZT.js} +0 -0
  229. package/dist/client/assets/{ayu-light-DMjlrKmx.js → ayu-light-CKB6o_im.js} +0 -0
  230. package/dist/client/assets/{ayu-mirage-DZEMb75h.js → ayu-mirage-B38lW-C5.js} +0 -0
  231. package/dist/client/assets/{ballerina-xx7VNGxs.js → ballerina-BzvFqbha.js} +0 -0
  232. package/dist/client/assets/{bat-DGYsZ5wR.js → bat-CFyw2ERn.js} +0 -0
  233. package/dist/client/assets/{beancount-D_ATR1UV.js → beancount-a6Gsu5WX.js} +0 -0
  234. package/dist/client/assets/{berry-BqYMORfH.js → berry-C2jyz4Ah.js} +0 -0
  235. package/dist/client/assets/{bibtex-CQTBDajW.js → bibtex-Dyet-B83.js} +0 -0
  236. package/dist/client/assets/{bicep-CfNtxPrK.js → bicep-CghvUIvy.js} +0 -0
  237. package/dist/client/assets/{bird2-C0dUPe3I.js → bird2-nHigvs-R.js} +0 -0
  238. package/dist/client/assets/{c3-BUwZ5e3k.js → c3-9ZrcmAmr.js} +0 -0
  239. package/dist/client/assets/{cadence-C3OKDYrr.js → cadence-BPDgYNWy.js} +0 -0
  240. package/dist/client/assets/{catppuccin-frappe-CMnRXVZP.js → catppuccin-frappe-BY_2ofjk.js} +0 -0
  241. package/dist/client/assets/{catppuccin-latte-CqhXSjCC.js → catppuccin-latte-D6GXPBmA.js} +0 -0
  242. package/dist/client/assets/{catppuccin-macchiato-B6kneE0C.js → catppuccin-macchiato-BuW8_cyo.js} +0 -0
  243. package/dist/client/assets/{catppuccin-mocha-CP8YZpvj.js → catppuccin-mocha-znex9DPe.js} +0 -0
  244. package/dist/client/assets/{clarity-Crxe8gSr.js → clarity-Cmao5KSK.js} +0 -0
  245. package/dist/client/assets/{clojure-BuzOUPMr.js → clojure-D2dPuTkk.js} +0 -0
  246. package/dist/client/assets/{cmake-CCpZLdLI.js → cmake-DaqQuj4A.js} +0 -0
  247. package/dist/client/assets/{codeowners-Bo1VYpHz.js → codeowners-B748jmvc.js} +0 -0
  248. package/dist/client/assets/{codeql-Db01hzHE.js → codeql-CXb_8gHR.js} +0 -0
  249. package/dist/client/assets/{common-lisp-CMlJIc6Y.js → common-lisp-UZn9nc_5.js} +0 -0
  250. package/dist/client/assets/{coq-BlzBYp3f.js → coq-DtO6yBIf.js} +0 -0
  251. package/dist/client/assets/{csharp-kfNshAa7.js → csharp-C3YlYcLV.js} +0 -0
  252. package/dist/client/assets/{csv-Dr8ri5Nd.js → csv-BBwiVr0X.js} +0 -0
  253. package/dist/client/assets/{cue-jXfhyOwY.js → cue-ScBFXY5f.js} +0 -0
  254. package/dist/client/assets/{cypher-CayLeiaR.js → cypher-CGStaC1X.js} +0 -0
  255. package/dist/client/assets/{d-BMZQ0mAy.js → d-CuTCIvnX.js} +0 -0
  256. package/dist/client/assets/{dark-plus-B__q47Nr.js → dark-plus-BvePH-r3.js} +0 -0
  257. package/dist/client/assets/{dart-gMOEMyuz.js → dart-CqEodbm2.js} +0 -0
  258. package/dist/client/assets/{dax-C3t5LadU.js → dax-UdE5S0Dh.js} +0 -0
  259. package/dist/client/assets/{desktop-DmhXLwLR.js → desktop-DfmsfHJA.js} +0 -0
  260. package/dist/client/assets/{diff-togOXQX6.js → diff-CW0RWGd9.js} +0 -0
  261. package/dist/client/assets/{docker--6N01olR.js → docker-B1qtW4ha.js} +0 -0
  262. package/dist/client/assets/{dotenv-Bq930Yx8.js → dotenv-BUzOh1k8.js} +0 -0
  263. package/dist/client/assets/{dracula-CBkSghcw.js → dracula-kJQjC_Gy.js} +0 -0
  264. package/dist/client/assets/{dracula-soft-CCSYeoxL.js → dracula-soft-B3XhEjCl.js} +0 -0
  265. package/dist/client/assets/{dream-maker-BiMf3DHl.js → dream-maker-CBvk18nW.js} +0 -0
  266. package/dist/client/assets/{emacs-lisp-Dhht7he2.js → emacs-lisp-DvSgLhDc.js} +0 -0
  267. package/dist/client/assets/{everforest-dark-NqSz4oHS.js → everforest-dark-u0zLn75q.js} +0 -0
  268. package/dist/client/assets/{everforest-light-a3Yzs_lT.js → everforest-light-D3syIoAR.js} +0 -0
  269. package/dist/client/assets/{fennel-BExc9TZf.js → fennel-C-1kWlGf.js} +0 -0
  270. package/dist/client/assets/{fish-C2p-AJmZ.js → fish-CCpdtwqS.js} +0 -0
  271. package/dist/client/assets/{fluent-CeYzs8Qy.js → fluent-BLg032oD.js} +0 -0
  272. package/dist/client/assets/{fortran-free-form-BIQEK2Jw.js → fortran-free-form-Br4jRtSc.js} +0 -0
  273. package/dist/client/assets/{gdscript-B5JQPh_-.js → gdscript-hSAZM1eh.js} +0 -0
  274. package/dist/client/assets/{gdshader-vVjJ_Qr8.js → gdshader-D4XNAEs9.js} +0 -0
  275. package/dist/client/assets/{genie-DGl5rqC8.js → genie-DmN-ICAN.js} +0 -0
  276. package/dist/client/assets/{gherkin-CY_VLUnD.js → gherkin-cuHHmRcX.js} +0 -0
  277. package/dist/client/assets/{github-dark-ClO4AStc.js → github-dark-CEBLh0--.js} +0 -0
  278. package/dist/client/assets/{github-dark-default-CM0dPco8.js → github-dark-default-Dq0Z4Xai.js} +0 -0
  279. package/dist/client/assets/{github-dark-dimmed-Cb6xxpXY.js → github-dark-dimmed-D90YmS4w.js} +0 -0
  280. package/dist/client/assets/{github-dark-high-contrast-BpYtx2-M.js → github-dark-high-contrast-B6BWv1iC.js} +0 -0
  281. package/dist/client/assets/{github-light-default-BmnCWL6x.js → github-light-default-DsPWmj4v.js} +0 -0
  282. package/dist/client/assets/{github-light-high-contrast-rpagNF5O.js → github-light-high-contrast-C7aLb3kp.js} +0 -0
  283. package/dist/client/assets/{github-light-CeOVFgf_.js → github-light-lXSVSq5T.js} +0 -0
  284. package/dist/client/assets/{gleam-BarIG9kQ.js → gleam-D8VhqPDN.js} +0 -0
  285. package/dist/client/assets/{gn-DhYsTPYc.js → gn-BjGRlX27.js} +0 -0
  286. package/dist/client/assets/{gnuplot-CucLlTBc.js → gnuplot-BZCXuE4q.js} +0 -0
  287. package/dist/client/assets/{go-toi-uWvg.js → go-BJpWXZEs.js} +0 -0
  288. package/dist/client/assets/{groovy-Ds4dis_k.js → groovy-D9w3Dn-z.js} +0 -0
  289. package/dist/client/assets/{gruvbox-dark-hard-aPiW8pQh.js → gruvbox-dark-hard-_deksD0U.js} +0 -0
  290. package/dist/client/assets/{gruvbox-dark-medium-2HJCvzsS.js → gruvbox-dark-medium-CT31284j.js} +0 -0
  291. package/dist/client/assets/{gruvbox-dark-soft-Da97ODX9.js → gruvbox-dark-soft-BZuEUCbj.js} +0 -0
  292. package/dist/client/assets/{gruvbox-light-hard-BXlEipFe.js → gruvbox-light-hard-dxv4n_ZS.js} +0 -0
  293. package/dist/client/assets/{gruvbox-light-medium-Cun-GjGk.js → gruvbox-light-medium-BsW_fVfR.js} +0 -0
  294. package/dist/client/assets/{gruvbox-light-soft-Bd3qiiSw.js → gruvbox-light-soft-BiGy99gD.js} +0 -0
  295. package/dist/client/assets/{haskell-B_jvz5Po.js → haskell-DqDdKEgk.js} +0 -0
  296. package/dist/client/assets/{haxe-BRbuo5UO.js → haxe-DMg0jS3a.js} +0 -0
  297. package/dist/client/assets/{hcl-BzNUCtsK.js → hcl-SZIZUK_X.js} +0 -0
  298. package/dist/client/assets/{hjson-BxVo3sS2.js → hjson-DF1VspiE.js} +0 -0
  299. package/dist/client/assets/{hlsl-C8Wes1nf.js → hlsl-DPe9L0Dt.js} +0 -0
  300. package/dist/client/assets/{horizon-D54PjLAY.js → horizon-Ngud75Kn.js} +0 -0
  301. package/dist/client/assets/{horizon-bright-D9RccdIr.js → horizon-bright-Cnljd0XD.js} +0 -0
  302. package/dist/client/assets/{houston-CMu1N_4K.js → houston-BenZxlMr.js} +0 -0
  303. package/dist/client/assets/{hy-dMrJKKU_.js → hy-B0f-B1mH.js} +0 -0
  304. package/dist/client/assets/{imba-DG_oO8tg.js → imba-Bq3j1cW5.js} +0 -0
  305. package/dist/client/assets/{ini-geHw79Aj.js → ini-BayloP2U.js} +0 -0
  306. package/dist/client/assets/{json5-CDUsNqz6.js → json5-CRSfdIrY.js} +0 -0
  307. package/dist/client/assets/{jsonc-D48xcwyD.js → jsonc-y4g9DQPx.js} +0 -0
  308. package/dist/client/assets/{jsonl-cpIYDXEe.js → jsonl-D2paVn9r.js} +0 -0
  309. package/dist/client/assets/{jsonnet-Da1lhszN.js → jsonnet-CLH27mtz.js} +0 -0
  310. package/dist/client/assets/{jssm-B8BLrEGL.js → jssm-CPPYaqX-.js} +0 -0
  311. package/dist/client/assets/{kanagawa-dragon-2Sk8Rx83.js → kanagawa-dragon-Bt5mhLu1.js} +0 -0
  312. package/dist/client/assets/{kanagawa-lotus-CQVSWfJp.js → kanagawa-lotus-FGA3pRJk.js} +0 -0
  313. package/dist/client/assets/{kanagawa-wave-BKWNioLX.js → kanagawa-wave-DnLVZPAD.js} +0 -0
  314. package/dist/client/assets/{kdl-B-2tSRmp.js → kdl-D1BQjjnw.js} +0 -0
  315. package/dist/client/assets/{kotlin-DepsEzh3.js → kotlin-ndCaDnf0.js} +0 -0
  316. package/dist/client/assets/{kusto-BcCtXIb8.js → kusto-D-4nbkD3.js} +0 -0
  317. package/dist/client/assets/{laserwave-BUqkO46F.js → laserwave-D2qAZkaG.js} +0 -0
  318. package/dist/client/assets/{lean-CNO9ffpX.js → lean-YmtAsB0p.js} +0 -0
  319. package/dist/client/assets/{less-Dj0T9pWC.js → less-DyHub3ow.js} +0 -0
  320. package/dist/client/assets/{light-plus-C9Hnuc1T.js → light-plus-CP13QUvm.js} +0 -0
  321. package/dist/client/assets/{llvm-DbV9b66l.js → llvm-DCcqrY0D.js} +0 -0
  322. package/dist/client/assets/{log-BMblmPyH.js → log-DWAAMNbe.js} +0 -0
  323. package/dist/client/assets/{logo-B78qMxws.js → logo-ClQMGkNL.js} +0 -0
  324. package/dist/client/assets/{luau-BUd8xsdE.js → luau-CmcXFvLt.js} +0 -0
  325. package/dist/client/assets/{make-Ev-6cJrd.js → make-DcfJyUzm.js} +0 -0
  326. package/dist/client/assets/{markdown-CS4LI6sN.js → markdown-DXxotAxn.js} +0 -0
  327. package/dist/client/assets/{material-theme-5rA1zn0D.js → material-theme-JFoPTBSr.js} +0 -0
  328. package/dist/client/assets/{material-theme-darker-DGOEiL65.js → material-theme-darker-BHaqZ19v.js} +0 -0
  329. package/dist/client/assets/{material-theme-lighter-CULfFRX0.js → material-theme-lighter-CGnnS2bs.js} +0 -0
  330. package/dist/client/assets/{material-theme-ocean-LQZ9CleP.js → material-theme-ocean-Drhewjqf.js} +0 -0
  331. package/dist/client/assets/{material-theme-palenight-Di_f5oks.js → material-theme-palenight-DbUypmpb.js} +0 -0
  332. package/dist/client/assets/{matlab-C0qEtAx9.js → matlab-BlfbTznR.js} +0 -0
  333. package/dist/client/assets/{mdx-CzvnbLXb.js → mdx-H8fyPQd8.js} +0 -0
  334. package/dist/client/assets/{mermaid-BPquZaKt.js → mermaid-CWAV2dmV.js} +0 -0
  335. package/dist/client/assets/{min-dark-rkuIbtJV.js → min-dark-BEelvXUB.js} +0 -0
  336. package/dist/client/assets/{min-light-Dj_HOGsr.js → min-light-CTPBOACR.js} +0 -0
  337. package/dist/client/assets/{mipsasm-k5DQoS6j.js → mipsasm-BWYFAm2s.js} +0 -0
  338. package/dist/client/assets/{mojo-sTTDuNnR.js → mojo-DZcPJEIN.js} +0 -0
  339. package/dist/client/assets/{monokai-D5p-u2ij.js → monokai-DQlZXbkg.js} +0 -0
  340. package/dist/client/assets/{moonbit-j5ChFtBC.js → moonbit-6eslNlJL.js} +0 -0
  341. package/dist/client/assets/{move-Dj0Gmn6R.js → move-DxFc9-QU.js} +0 -0
  342. package/dist/client/assets/{narrat-DJgMz2oW.js → narrat-gv38dJOT.js} +0 -0
  343. package/dist/client/assets/{nextflow-groovy-eDLuZ_oi.js → nextflow-groovy-DV4H3hok.js} +0 -0
  344. package/dist/client/assets/{night-owl-CEdtPl3A.js → night-owl-BLcrYhaC.js} +0 -0
  345. package/dist/client/assets/{night-owl-light-GdSldewm.js → night-owl-light-BG-tBJOz.js} +0 -0
  346. package/dist/client/assets/{nix-CxIPS3pb.js → nix-NlOz3HGM.js} +0 -0
  347. package/dist/client/assets/{nord-3WFAz5H9.js → nord-Dm2F5_QB.js} +0 -0
  348. package/dist/client/assets/{nushell-GDfBmoBU.js → nushell-D86Z8aFF.js} +0 -0
  349. package/dist/client/assets/{objective-c-MFQ_MGUa.js → objective-c-iuJvUjCv.js} +0 -0
  350. package/dist/client/assets/{objective-cpp-Y83LcBE7.js → objective-cpp-C62JvfMT.js} +0 -0
  351. package/dist/client/assets/{ocaml-FxYfaJxu.js → ocaml-Rbryo9lg.js} +0 -0
  352. package/dist/client/assets/{odin-CprihY3z.js → odin-CfaOVNP_.js} +0 -0
  353. package/dist/client/assets/{one-dark-pro-BB6mpmmA.js → one-dark-pro-DC9SHdX0.js} +0 -0
  354. package/dist/client/assets/{one-light-BYLoxNtg.js → one-light-Doo39p0H.js} +0 -0
  355. package/dist/client/assets/{openscad-Bc1FbpOi.js → openscad-DCRhgheK.js} +0 -0
  356. package/dist/client/assets/{pascal-Bb4d8cUL.js → pascal-CTesTHtV.js} +0 -0
  357. package/dist/client/assets/{pierre-dark-cF19s-RM.js → pierre-dark-Gtc9M_gS.js} +0 -0
  358. package/dist/client/assets/{pierre-light-BdpX8OpD.js → pierre-light-EDxMHmhf.js} +0 -0
  359. package/dist/client/assets/{pkl-tM25Sq0w.js → pkl-BjUMjQkt.js} +0 -0
  360. package/dist/client/assets/{plastic-D3k2Xp_5.js → plastic-B3CcSpon.js} +0 -0
  361. package/dist/client/assets/{plsql-CLEfFhSj.js → plsql-BgKEZSSo.js} +0 -0
  362. package/dist/client/assets/{po-CaAzdrrh.js → po-C5s_CVt8.js} +0 -0
  363. package/dist/client/assets/{poimandres-bPTvT4Da.js → poimandres-BsK70ma5.js} +0 -0
  364. package/dist/client/assets/{polar-TG7aTGdK.js → polar-y4hX8qM0.js} +0 -0
  365. package/dist/client/assets/{postcss-8kqfa9f0.js → postcss-BHCm7Qae.js} +0 -0
  366. package/dist/client/assets/{powerquery-CtSu1Nfd.js → powerquery-C2vMt8aZ.js} +0 -0
  367. package/dist/client/assets/{powershell-87lLBHMy.js → powershell-DEcjmg1c.js} +0 -0
  368. package/dist/client/assets/{prisma-Dnf694DZ.js → prisma-Ba-Tcxy5.js} +0 -0
  369. package/dist/client/assets/{prolog-C0XbHTWa.js → prolog-B4o261Jv.js} +0 -0
  370. package/dist/client/assets/{proto-BZP-HLIb.js → proto-o3IZKiMR.js} +0 -0
  371. package/dist/client/assets/{puppet-CJYWgYC5.js → puppet-BC0dqZ31.js} +0 -0
  372. package/dist/client/assets/{purescript-B95Q6BAd.js → purescript-CLDw1y5G.js} +0 -0
  373. package/dist/client/assets/{python-CqTCsi7P.js → python-D1NFioGW.js} +0 -0
  374. package/dist/client/assets/{qmldir-DlIL4hls.js → qmldir-B7i9e9Vn.js} +0 -0
  375. package/dist/client/assets/{qss-BW72E0q_.js → qss-DIe6oKX8.js} +0 -0
  376. package/dist/client/assets/{racket-CCAimEsC.js → racket-CAOC_yyk.js} +0 -0
  377. package/dist/client/assets/{raku-mSuqElkM.js → raku-Ccua3vW6.js} +0 -0
  378. package/dist/client/assets/{red-C-DA4yBI.js → red-DtDH206x.js} +0 -0
  379. package/dist/client/assets/{reg-CGwMBJ2c.js → reg-CAYZT9kE.js} +0 -0
  380. package/dist/client/assets/{rel-JwrbYgX4.js → rel-cvB6F5nO.js} +0 -0
  381. package/dist/client/assets/{riscv-CoYyE75b.js → riscv-SYGtE4EN.js} +0 -0
  382. package/dist/client/assets/{ron-C5wrhnmJ.js → ron-CRt869SB.js} +0 -0
  383. package/dist/client/assets/{rose-pine-DlrMPYYd.js → rose-pine-CjBfSJ5b.js} +0 -0
  384. package/dist/client/assets/{rose-pine-dawn-DBHFtZD2.js → rose-pine-dawn-C0xwy7iJ.js} +0 -0
  385. package/dist/client/assets/{rose-pine-moon-BBfrpe5q.js → rose-pine-moon-BSNy9Ty0.js} +0 -0
  386. package/dist/client/assets/{rosmsg-DlimTR9t.js → rosmsg-BwrfJ66Z.js} +0 -0
  387. package/dist/client/assets/{rust-Cxnkxx3h.js → rust-DCKTTPxN.js} +0 -0
  388. package/dist/client/assets/{sass-DEyqUIpU.js → sass-CorcwySt.js} +0 -0
  389. package/dist/client/assets/{scala-i3RN3yAN.js → scala-DlI-OmYj.js} +0 -0
  390. package/dist/client/assets/{scheme-BcKdjYkO.js → scheme-CcNEGkZH.js} +0 -0
  391. package/dist/client/assets/{sdbl-Be_XWc3n.js → sdbl-AL_m-RO_.js} +0 -0
  392. package/dist/client/assets/{slack-dark-3PDtm74m.js → slack-dark-rMhrfPm6.js} +0 -0
  393. package/dist/client/assets/{slack-ochin-CwiuFRJD.js → slack-ochin-9w8X74hU.js} +0 -0
  394. package/dist/client/assets/{smalltalk-BdBlL6ks.js → smalltalk-Y2ogrfbk.js} +0 -0
  395. package/dist/client/assets/{snazzy-light-Dyqc8Is2.js → snazzy-light-DHr9ygpP.js} +0 -0
  396. package/dist/client/assets/{solarized-dark-DZiTscIX.js → solarized-dark-UPcKev9Q.js} +0 -0
  397. package/dist/client/assets/{solarized-light-DBcfxrfG.js → solarized-light-DUsjROvl.js} +0 -0
  398. package/dist/client/assets/{solidity-DH-yUSWc.js → solidity-Bfbm9QZQ.js} +0 -0
  399. package/dist/client/assets/{splunk-CIjc4kxs.js → splunk-6DJA2XFa.js} +0 -0
  400. package/dist/client/assets/{ssh-config-BKVd4drG.js → ssh-config-CbQtdF-u.js} +0 -0
  401. package/dist/client/assets/{stylus-tqAsmugv.js → stylus-B_iq45Sj.js} +0 -0
  402. package/dist/client/assets/{swift-CdDBQ3_Z.js → swift-C7KIgN-p.js} +0 -0
  403. package/dist/client/assets/{synthwave-84-CbbRs73K.js → synthwave-84-lf_Wt0K_.js} +0 -0
  404. package/dist/client/assets/{system-verilog-CBqEY-9v.js → system-verilog-C3G9wERd.js} +0 -0
  405. package/dist/client/assets/{systemd-khRP5zwK.js → systemd-CwxGrojj.js} +0 -0
  406. package/dist/client/assets/{talonscript-D_lneH-6.js → talonscript-DqnSo1EO.js} +0 -0
  407. package/dist/client/assets/{tasl-CLymawGe.js → tasl-T8ethp86.js} +0 -0
  408. package/dist/client/assets/{tcl-BRY1S87U.js → tcl-Ccl366o0.js} +0 -0
  409. package/dist/client/assets/{terraform-BqohMo2f.js → terraform-BBf6ZI_0.js} +0 -0
  410. package/dist/client/assets/{tokyo-night-BWUONxad.js → tokyo-night-BF5ata25.js} +0 -0
  411. package/dist/client/assets/{toml-C4c85Lwg.js → toml-C5Z_BR4r.js} +0 -0
  412. package/dist/client/assets/{tsv-DsZq9HBQ.js → tsv-rX8sUJs7.js} +0 -0
  413. package/dist/client/assets/{turtle-Dpr8zLlw.js → turtle-BM-MG8WY.js} +0 -0
  414. package/dist/client/assets/{typespec-DcqgATB-.js → typespec-C5gKydvR.js} +0 -0
  415. package/dist/client/assets/{typst-CeVxmuPg.js → typst--_5VchrY.js} +0 -0
  416. package/dist/client/assets/{v-C2Qsh2-1.js → v-C6PwpmTC.js} +0 -0
  417. package/dist/client/assets/{vala-CvZ3yL7c.js → vala-4pTaceSj.js} +0 -0
  418. package/dist/client/assets/{vb-B_p4qDw4.js → vb-DhoR5A6S.js} +0 -0
  419. package/dist/client/assets/{verilog-D8MGjxD7.js → verilog-B9f_1lPn.js} +0 -0
  420. package/dist/client/assets/{vesper-DossXiE1.js → vesper-CmBi_iCT.js} +0 -0
  421. package/dist/client/assets/{vhdl-MLyYh_Gz.js → vhdl-Cy4RAmOe.js} +0 -0
  422. package/dist/client/assets/{viml-BuYIArcz.js → viml-CFQW-CcD.js} +0 -0
  423. package/dist/client/assets/{vitesse-black-C3kc1227.js → vitesse-black-CE8RoBJP.js} +0 -0
  424. package/dist/client/assets/{vitesse-dark-kWOu5V36.js → vitesse-dark-BpF142p_.js} +0 -0
  425. package/dist/client/assets/{vitesse-light-DMtiL8bK.js → vitesse-light-CMwxPBrg.js} +0 -0
  426. package/dist/client/assets/{vyper-CNqG09-_.js → vyper-BW5zj9bE.js} +0 -0
  427. package/dist/client/assets/{wasm-BsQDV7Y0.js → wasm-BigxSLnm.js} +0 -0
  428. package/dist/client/assets/{wasm-DFVlQlgd.js → wasm-CSccDuAq.js} +0 -0
  429. package/dist/client/assets/{wenyan-BmOQge13.js → wenyan-BZzM1SQT.js} +0 -0
  430. package/dist/client/assets/{wgsl-CgWrmvIg.js → wgsl-xBPHbLlq.js} +0 -0
  431. package/dist/client/assets/{wikitext-DkwckXCk.js → wikitext-BXJWUNJK.js} +0 -0
  432. package/dist/client/assets/{wit-CtyVFGe7.js → wit-2GnUs67P.js} +0 -0
  433. package/dist/client/assets/{wolfram-CXE4FrKz.js → wolfram-DIFDmw-g.js} +0 -0
  434. package/dist/client/assets/{zenscript-DH15wJt0.js → zenscript-DQaUUjbx.js} +0 -0
  435. package/dist/client/assets/{zig-CqXN9brD.js → zig-BDepRvBi.js} +0 -0
  436. package/dist/{update-check-KL-2sGxE.mjs → update-check-DAPFCqpF.mjs} +1 -1
package/README.md CHANGED
@@ -22,6 +22,16 @@ diffing
22
22
  ```
23
23
  This instantly spins up a local server, establishes an active repository watcher, and opens your default browser to an interactive code review dashboard.
24
24
 
25
+ Prefer the terminal? Add `--tui` for a native-Rust terminal UI — same review flow, no browser:
26
+ ```bash
27
+ diffing --tui
28
+ ```
29
+ > [!WARNING]
30
+ > The TUI is **experimental** in v0.3.0. The interface, keymap, and
31
+ > `server.json` (`mode: "tui"`) on-disk format may change in a minor
32
+ > release. The web UI is the supported path for production workflows.
33
+ > See [Native Terminal UI (TUI)](#native-terminal-ui-tui) for the full feature set, keymap, and stability notes.
34
+
25
35
  ### 3. Update
26
36
  Check if a new version is available on npm and upgrade instantly via the CLI:
27
37
  ```bash
@@ -40,7 +50,7 @@ A local Hono-powered review server delivers a full-featured GitHub-like code rev
40
50
  - **Status Dashboard (Comment Tracker)** — Bottom panel tracking open, replied, and resolved comments with filter tabs and click-to-navigate references to the relevant file and line.
41
51
  - **Git Diff Stats** — Toolbar displays repo name, branch, file count, and additions/deletions (`+X/-Y`) computed from the patch.
42
52
  - **Server-Side State & Drafts Persistence** — No browser storage is used. All settings, UI panels sizing, session states, and comment drafts are securely stored and persisted server-side in the project's global `.diffing` directory (and global settings inside `~/.config/diffing/settings.json`).
43
- - **Dynamic Font Customization** — Dynamically load, cache, and apply any Google Fonts or local system fonts for both UI typography and monospace code rendering, easily configurable via the settings font picker.
53
+ - **Dynamic Font Customization** — Pick any [Google Fonts](https://fonts.google.com/) family or locally-installed system font for both UI typography and monospace code rendering, configurable via the settings font picker. Google-hosted families are fetched automatically as web fonts and render everywhere; local fonts are applied by name (see the [note on custom fonts](#a-note-on-custom-fonts)).
44
54
  - **Resizable Panels** — Drag-to-resize sidebar (240px–640px) and comment tracker panel (100px–600px). Panel states are instantly saved server-side for absolute consistency across browser sessions.
45
55
  - **Skeleton Loading Screen** — Full shimmer placeholder UI for toolbar, sidebar, search, tree nodes, and file diffs during initial load.
46
56
  - **Image Diff Previews** — Visual side-by-side comparison for added, changed, and deleted image files (PNG, JPEG, GIF, WebP, SVG, BMP, ICO, AVIF).
@@ -111,6 +121,7 @@ Full keyboard-driven navigation with vim-like motions and a modal status bar:
111
121
  | `n` | Toggle line numbers |
112
122
  | `i` | Cycle diff indicators |
113
123
  | `I` | Cycle inline diff type |
124
+ | `Cmd+Shift+P` | Toggle preview mode in comments |
114
125
 
115
126
  ### File Navigation & UI
116
127
  | Key | Action |
@@ -131,6 +142,52 @@ A vim-style status bar at the bottom displays the current mode (NORMAL/INSERT),
131
142
  <img width="1840" height="1196" alt="image" src="https://github.com/user-attachments/assets/d230d020-4fb2-475a-a8a0-0ae11bb271ff" />
132
143
 
133
144
 
145
+ ---
146
+
147
+ ## Native Terminal UI (TUI) — *Experimental*
148
+
149
+ > [!WARNING]
150
+ > The TUI is **experimental** in v0.3.0. The interface, keymap, and on-disk
151
+ > format of `server.json` (`mode: "tui"`) may change in a minor release
152
+ > before stabilisation. The web UI is the supported path for production
153
+ > workflows; please open an issue before depending on the TUI for CI / agent
154
+ > automation. The web review flow, plan review, and PR review are unaffected.
155
+
156
+ `diffing --tui` opens an **opt-in native-Rust terminal interface** that mirrors the web review dashboard — no browser, no Electron, no port. It's a leaf renderer in a new `crates/diffing-tui/` binary: the Node CLI is still the single source of truth for arg parsing, lockfile discovery, and agent handoff, and the TUI reads the same `~/.diffing/<repo>/*` state on disk and writes a `server.json` with `mode: "tui"`.
157
+
158
+ The default `diffing` behaviour is **byte-identical** with and without `--tui` — the TUI is strictly opt-in. If the env cannot support a TUI (piped stdin, CI, no raw mode) or the binary is missing, you get a one-line stderr note and the normal `git diff` output. The web mode is also unaffected by the TUI build; the same `diffing` install serves either.
159
+
160
+ ```bash
161
+ diffing --tui # Open the current working tree in the TUI
162
+ diffing --tui --staged # Review staged changes in the TUI
163
+ diffing --tui HEAD~3 # Review working tree vs. 3 commits ago
164
+ diffing --tui main..feature # Compare two branches in the TUI
165
+ diffing --tui -- -- src/ # Limit a TUI review to a directory
166
+ ```
167
+
168
+ **Stack** — Rust 1.78+ workspace (`crates/diffing-core/` shared lib + `crates/diffing-tui/` binary), `ratatui` + `crossterm` for rendering, `syntect` for syntax highlighting, `notify-debouncer-full` for live updates.
169
+
170
+ **Features**
171
+
172
+ - **Unified diff render** with a virtualised file card, syntect highlighter, and the same 8 Shiki-compatible colour themes as the web UI.
173
+ - **Vim-style file tree & keymap** — `j/k/gg/G/J/K/Tab/w/t/m/?/` motions, plus `c` (new comment), `e/r/x` (edit / reply / resolve), `]`/`[` (next / previous thread), `?` (help).
174
+ - **Full comment CRUD** — mirrors `src/lib/comments.ts` byte-for-byte; the comment tracker at the bottom lists open / replied / resolved threads with click-to-jump navigation.
175
+ - **Multi-line `tui-textarea` form** with markdown rendering in the preview pane.
176
+ - **Live updates** via `notify` watcher on `comments.json` and the repo working tree — write a comment in another window and it appears immediately.
177
+ - **Send review & agent handoff** — verdict radios + general-comment popover with a live XML preview. Submits via the same `format_comments` envelope as the web UI, copies to clipboard (`pbcopy` / `wl-copy` / `xclip` / `xsel` / `clip.exe`), and persists `pending-review.xml`. The agent-status indicator in the status bar mirrors the web UI's "Send to agent" connection dot.
178
+ - **Cross-platform** — macOS, Linux, and Windows are all first-class. The TUI liveness probe uses `kill(pid, 0)` on Unix and `tasklist /NH /FO CSV` on Windows. Clipboard works on Wayland (`wl-copy`), X11 (`xclip` / `xsel`), macOS (`pbcopy`), and Windows (`clip.exe` / PowerShell `Set-Clipboard`).
179
+
180
+ **Caveat** — the TUI's "Send to agent" writes the review to disk + clipboard but does not actively unblock a long-polling `diffing await-review`; that requires a Node-side change in a follow-up. The web UI's send button remains the supported native handoff path. The `pending-review.xml` is still produced and the review session is still round-incremented — only the long-poll wake-up is missing.
181
+
182
+ **Building the binary locally**
183
+
184
+ ```bash
185
+ pnpm build:tui # debug build → target/debug/diffing-tui
186
+ pnpm build:tui --release # release build → target/release/diffing-tui
187
+ ```
188
+
189
+ The CLI auto-discovers the binary in the following search order: sibling of `dist/cli.mjs`, `bin/`, `target/release/`, `target/debug/`, then `$PATH`. A `cargo build` (debug) workflow is supported out of the box; you don't need `--release` just to use the TUI.
190
+
134
191
  ---
135
192
 
136
193
  ## Console Startup Animations & Quotes
@@ -212,7 +269,8 @@ diffing url # Retrieve the active server base URL
212
269
  diffing plan submit <file> [--title T] [--model M] [--id <id>] [--wait] # Submit/resubmit a plan; prints its id
213
270
  diffing plan await [--timeout N] # Block until the human approves/rejects/requests-changes; outputs the verdict XML
214
271
  diffing plan list [--json] # List submitted plans with their verdicts
215
- diffing plan show [<id>] [--json] # Show one plan as <plan-review> XML (latest if omitted)
272
+ diffing plan show [<id>] [--json] [--version N] # Show one plan as <plan-review> XML (latest if omitted; use --version to read a historical body)
273
+ diffing plan versions <id> [--json] # List every submitted version of a plan, oldest-first (current marked with `*`)
216
274
  diffing plan reply <commentId> --body "..." # Reply to an inline plan comment
217
275
  diffing plan resolve <commentId> # Mark a plan comment resolved
218
276
  ```
@@ -230,7 +288,7 @@ If your agent supports MCP (such as Cursor, Claude Desktop, or Gemini), configur
230
288
  }
231
289
  }
232
290
  ```
233
- Exposes tools directly to your agent for both review flows — diff review: `await_review`, `list_comments`, `reply_to_comment`, `resolve_comment`; and plan review: `submit_plan`, `await_plan_review`, `list_plans`, `get_plan`, `reply_to_plan_comment`, `resolve_plan_comment`.
291
+ Exposes tools directly to your agent for both review flows — diff review: `await_review`, `list_comments`, `reply_to_comment`, `resolve_comment`; and plan review: `submit_plan`, `await_plan_review`, `list_plans`, `get_plan`, `get_plan_versions`, `get_plan_version`, `reply_to_plan_comment`, `resolve_plan_comment`.
234
292
 
235
293
  ### C. Agent Skills
236
294
  You can install diffing skills directly into your AI coding assistant:
@@ -280,6 +338,13 @@ releases" handoff, applied *before* any code is written.
280
338
  - **Three-way verdict** — Approve / Request changes / Reject, GitHub-style, with
281
339
  an optional overall comment. Resubmitting a revised plan (same id) bumps the
282
340
  version and re-opens it for review.
341
+ - **Browse plan versions** — every submitted body is kept on disk, oldest-first.
342
+ A version dropdown next to the `v{n}` chip switches the viewer to any past
343
+ version; comments are filtered to those anchored to the version you're
344
+ reading; a "viewing v{N} of v{M}" banner makes the historical context obvious.
345
+ Available from the CLI (`diffing plan versions <id>`, `diffing plan show <id> --version N`),
346
+ MCP (`get_plan_versions`, `get_plan_version`), and the HTTP API
347
+ (`GET /api/plans/:id/versions`, `GET /api/plans/:id/versions/:n`).
283
348
  - **Live "Plans" badge** — the diff toolbar shows a badge counting plans awaiting
284
349
  your review, with a green dot when an agent is connected and waiting.
285
350
  - **Same channels everywhere** — drive it from the CLI (`diffing plan …`), the
@@ -315,7 +380,79 @@ self-documenting `<plan-review>` envelope:
315
380
 
316
381
  <img width="1667" height="1087" alt="image" src="https://github.com/user-attachments/assets/00e884b5-4c90-4a9a-9e24-9ae57d80f3f2" />
317
382
 
383
+ ---
384
+
385
+ ## Reviewing a GitHub PR
386
+
387
+ `diffing` can open a GitHub PR in the same diff UI you use for the working
388
+ tree, and push your review back to GitHub when you're done. The "Send to
389
+ agent" handoff is **structurally absent** in PR mode — there's no way to
390
+ accidentally route a PR review to a coding agent.
391
+
392
+ ```text
393
+ # All of these open PR #1234 in the current repo:
394
+ diffing "gh pr 1234"
395
+ diffing --gh-pr 1234
396
+
397
+ # Full URL form:
398
+ diffing "gh pr https://github.com/ahmedragab20/diffing/pull/1234"
399
+ diffing --gh-pr https://github.com/ahmedragab20/diffing/pull/1234
400
+
401
+ # owner/repo#N shorthand (skips the cwd-repo check):
402
+ diffing "gh pr ahmedragab20/diffing#1234"
403
+ ```
404
+
405
+ The PR diff loads in the existing `<DiffViewer>` / `<FileTree>` machinery.
406
+ Existing review comments on the PR are fetched and shown as a read-only
407
+ summary strip below each file so you can see what was already said before
408
+ adding your own. Comments you write are kept visually distinct.
409
+
410
+ When you click **Submit to GitHub**, `diffing` builds a `POST
411
+ /repos/{owner}/{repo}/pulls/{pull_number}/reviews` payload and POSTs it
412
+ to GitHub. Multi-line comments are expanded to N single-line comments
413
+ with a `[part N/M]` prefix. Existing comments are **never re-POSTed** —
414
+ only the new ones you wrote in this session.
415
+
416
+ ### Headless subcommands
417
+
418
+ For CI / agent use, the same flow is exposed as a `gh` subcommand with no
419
+ UI:
420
+
421
+ ```text
422
+ # Submit the current in-progress review to GitHub.
423
+ diffing gh pr-review 1234 --decision request-changes --body "Please address the range"
424
+
425
+ # Dump PR metadata (title, owner, head SHA, existing comments) as JSON.
426
+ diffing gh pr-fetch 1234
427
+
428
+ # List the PR-mode comments in this diffing session (mirrors `diffing comments`).
429
+ diffing gh pr-list-comments
430
+
431
+ # Show the active PR session (ref, owner/repo#n, comment count, submitted status).
432
+ diffing gh status
433
+ ```
434
+
435
+ ### Authentication
436
+
437
+ The submit path uses the same precedence as the rest of the GitHub
438
+ ecosystem:
439
+
440
+ 1. **`gh` CLI** — preferred; uses your existing `gh auth login` session.
441
+ 2. **Token env var** — `$GH_TOKEN`, then `$GITHUB_TOKEN`, then
442
+ `$GITHUB_API_TOKEN` (any of the three).
443
+ 3. If neither is available, the submit fails with a clear one-line
444
+ message telling you to run `gh auth login` or set `$GITHUB_TOKEN`.
445
+
446
+ The `gh` binary is **only** used for the submit and refresh steps; the
447
+ diff itself is rendered locally, so PR review works offline once the
448
+ session is open.
449
+
450
+ ### Storage
318
451
 
452
+ PR-mode state lives in `pr-session.json` (in the per-repo
453
+ `~/.diffing/<repo>-<hash>/` directory) — a separate file from
454
+ `comments.json` and `plans.json`, so a local review and a PR review can
455
+ coexist without colliding.
319
456
 
320
457
  ---
321
458
 
@@ -354,6 +491,12 @@ Fine-grained control over how diffs are rendered:
354
491
 
355
492
  All settings persist to `~/.config/diffing/settings.json` and the UI updates are wrapped in `useTransition` for non-blocking responsiveness.
356
493
 
494
+ #### A note on custom fonts
495
+
496
+ Google-hosted families (e.g. `Fira Code`, `Source Code Pro`, `IBM Plex Mono`, `Roboto Mono`) are fetched automatically as web fonts and render in any browser. A **locally-installed** font — a Nerd Font, or a commercial font like `Dank Mono` — is applied by name and renders only if it is installed on your machine **and** your browser allows pages to use local fonts.
497
+
498
+ Privacy-hardened browsers block this: **Brave**, with Shields / "Block fingerprinting" enabled (the default), refuses to render uncommon local fonts as an anti-fingerprinting measure, so the selection silently falls back to the default monospace even though it is installed. To use a local-only font there, either pick a Google-hosted equivalent, or open **Shields** for the diffing site, set fingerprinting to *Allow all*, and reload.
499
+
357
500
  ---
358
501
 
359
502
  ## Merge Conflict Resolution
@@ -410,6 +553,23 @@ To integrate flawlessly with your existing developer shell workflows, build pipe
410
553
  > [!TIP]
411
554
  > For a full list of all git option categories (algorithms, whitespace ignoring, context lines, word-level diffs, moved/copied detection, and path filtering) supported by `diffing`, see the [CLI Reference Manual](docs/cli.md).
412
555
 
556
+ ### `diffing show` — Review a Commit's Changes (Drop-in for `git show`)
557
+
558
+ `diffing <sha>` runs `git diff <sha>`, which means "diff between `<sha>` and the working tree" — not the changes that commit introduced. If the working tree matches `<sha>`, the patch is empty and the file list renders blank.
559
+
560
+ To review the changes **of** a commit, use the new `show` subcommand. It mirrors `git show` and surfaces each commit's metadata (subject, author, date, message body) above the diff in the web UI:
561
+
562
+ ```bash
563
+ diffing show HEAD # Review the tip commit's metadata + diff
564
+ diffing show HEAD~3..HEAD # Review the last 3 commits as a series
565
+ diffing show v1.0 # The commit a tag points to
566
+ diffing show abc123 def456 # Two specific commits, oldest-first
567
+ diffing show HEAD -- src/ # Limit a commit review to a directory
568
+ diffing show HEAD~2..HEAD --terminal # Stream `git show` to your terminal
569
+ ```
570
+
571
+ `show` accepts every form `git show` understands (single commit, range, tag, branch tip, multiple SHAs) and is strictly opt-in — `diffing <sha>` keeps its current `git diff <sha>` semantics so existing muscle memory and scripts are unaffected.
572
+
413
573
  ---
414
574
 
415
575
  ## Integration & Configuration
@@ -502,6 +662,12 @@ For advanced features, internal API endpoints, sequence specifications, and conf
502
662
 
503
663
  ---
504
664
 
665
+ ## Landing Page
666
+
667
+ <img width="1287" height="6579" alt="screencapture-localhost-3000-2026-05-31-20_57_04" src="https://github.com/user-attachments/assets/a163b00e-a85a-428f-b8d5-2a33ff9fa1eb" />
668
+
669
+ ---
670
+
505
671
  👉🏻 The project was intially forked from **wong2/diffx**
506
672
 
507
673
  ## License
@@ -1,4 +1,5 @@
1
- import { c as formatComments, n as readServerLock, o as formatPlanReview, t as isLockAlive } from "./server-lock-DpCrvL-Z.mjs";
1
+ import { a as formatComments, n as readServerLock, t as isLockAlive } from "./server-lock-D73NKKbn.mjs";
2
+ import { n as formatPlanReview } from "./plan-format-mSDtsPcC.mjs";
2
3
  import { parseArgs } from "node:util";
3
4
  import { readFile } from "node:fs/promises";
4
5
  //#region src/cli-agent.ts
@@ -307,7 +308,10 @@ async function planList(args) {
307
308
  async function planShow(args) {
308
309
  const { values, positionals } = parseArgs({
309
310
  args,
310
- options: { json: { type: "boolean" } },
311
+ options: {
312
+ json: { type: "boolean" },
313
+ version: { type: "string" }
314
+ },
311
315
  allowPositionals: true
312
316
  });
313
317
  const base = baseUrl();
@@ -326,8 +330,53 @@ async function planShow(args) {
326
330
  return EXIT_NOT_FOUND;
327
331
  }
328
332
  const plan = await res.json();
333
+ const requestedVersion = values.version !== void 0 ? Number(values.version) : void 0;
334
+ if (requestedVersion !== void 0 && (!Number.isFinite(requestedVersion) || requestedVersion < 1)) {
335
+ console.error(`--version must be a positive integer.`);
336
+ return EXIT_USAGE;
337
+ }
338
+ if (requestedVersion !== void 0 && requestedVersion !== plan.version) {
339
+ if (!(plan.versions ?? []).find((v) => v.version === requestedVersion)) {
340
+ console.error(`Version ${requestedVersion} not found for plan ${planId} (current: v${plan.version}).`);
341
+ return EXIT_NOT_FOUND;
342
+ }
343
+ }
329
344
  if (values.json) process.stdout.write(JSON.stringify(plan, null, 2) + "\n");
330
- else process.stdout.write(formatPlanReview(plan) + "\n");
345
+ else process.stdout.write(formatPlanReview(plan, { viewingVersion: requestedVersion }) + "\n");
346
+ return EXIT_OK;
347
+ }
348
+ async function planVersions(args) {
349
+ const { values, positionals } = parseArgs({
350
+ args,
351
+ options: { json: { type: "boolean" } },
352
+ allowPositionals: true
353
+ });
354
+ const base = baseUrl();
355
+ let planId = positionals[0];
356
+ if (!planId) {
357
+ console.error("Usage: diffing plan versions <id> [--json]");
358
+ return EXIT_USAGE;
359
+ }
360
+ const planRes = await fetch(`${base}/api/plans/${planId}`);
361
+ if (planRes.status === 404) {
362
+ console.error(`Plan ${planId} not found.`);
363
+ return EXIT_NOT_FOUND;
364
+ }
365
+ const plan = await planRes.json();
366
+ const versions = plan.versions ?? [];
367
+ if (values.json) {
368
+ process.stdout.write(JSON.stringify(versions, null, 2) + "\n");
369
+ return EXIT_OK;
370
+ }
371
+ if (versions.length === 0) {
372
+ console.error("This plan has no recorded versions.");
373
+ return EXIT_OK;
374
+ }
375
+ for (const v of versions) {
376
+ const marker = v.version === plan.version ? "*" : " ";
377
+ const date = new Date(v.createdAt).toISOString().slice(0, 16).replace("T", " ");
378
+ process.stdout.write(`${marker} v${v.version}\t${date}\t${v.title}\n`);
379
+ }
331
380
  return EXIT_OK;
332
381
  }
333
382
  /** Locate which plan owns a given comment id (comment ids are globally unique). */
@@ -419,10 +468,11 @@ async function plan(args) {
419
468
  case "await": return planAwait(rest);
420
469
  case "list": return planList(rest);
421
470
  case "show": return planShow(rest);
471
+ case "versions": return planVersions(rest);
422
472
  case "reply": return planReply(rest);
423
473
  case "resolve": return planResolve(rest);
424
474
  default:
425
- console.error("Usage: diffing plan <submit|await|list|show|reply|resolve> [...]");
475
+ console.error("Usage: diffing plan <submit|await|list|show|versions|reply|resolve> [...]");
426
476
  return EXIT_USAGE;
427
477
  }
428
478
  }
@@ -435,8 +485,11 @@ async function runSubcommand(name, args) {
435
485
  case "url": return url();
436
486
  case "plan": return plan(args);
437
487
  case "update":
438
- const { runUpdateCommand } = await import("./update-check-KL-2sGxE.mjs");
488
+ const { runUpdateCommand } = await import("./update-check-DAPFCqpF.mjs");
439
489
  return runUpdateCommand();
490
+ case "gh":
491
+ const { runGhSubcommand } = await import("./cli-gh-abs-IJrz.mjs");
492
+ return runGhSubcommand(args);
440
493
  default:
441
494
  console.error(`Unknown subcommand: ${name}`);
442
495
  return EXIT_USAGE;
@@ -1,4 +1,5 @@
1
- import { c as formatComments, n as readServerLock, o as formatPlanReview, t as isLockAlive } from "./server-lock-DpCrvL-Z.mjs";
1
+ import { a as formatComments, n as readServerLock, t as isLockAlive } from "./server-lock-Dj9fG9md.mjs";
2
+ import { n as formatPlanReview } from "./plan-format-DVnF8xrq.mjs";
2
3
  import { parseArgs } from "node:util";
3
4
  import { readFile } from "node:fs/promises";
4
5
  //#region src/cli-agent.ts
@@ -307,7 +308,10 @@ async function planList(args) {
307
308
  async function planShow(args) {
308
309
  const { values, positionals } = parseArgs({
309
310
  args,
310
- options: { json: { type: "boolean" } },
311
+ options: {
312
+ json: { type: "boolean" },
313
+ version: { type: "string" }
314
+ },
311
315
  allowPositionals: true
312
316
  });
313
317
  const base = baseUrl();
@@ -326,8 +330,53 @@ async function planShow(args) {
326
330
  return EXIT_NOT_FOUND;
327
331
  }
328
332
  const plan = await res.json();
333
+ const requestedVersion = values.version !== void 0 ? Number(values.version) : void 0;
334
+ if (requestedVersion !== void 0 && (!Number.isFinite(requestedVersion) || requestedVersion < 1)) {
335
+ console.error(`--version must be a positive integer.`);
336
+ return EXIT_USAGE;
337
+ }
338
+ if (requestedVersion !== void 0 && requestedVersion !== plan.version) {
339
+ if (!(plan.versions ?? []).find((v) => v.version === requestedVersion)) {
340
+ console.error(`Version ${requestedVersion} not found for plan ${planId} (current: v${plan.version}).`);
341
+ return EXIT_NOT_FOUND;
342
+ }
343
+ }
329
344
  if (values.json) process.stdout.write(JSON.stringify(plan, null, 2) + "\n");
330
- else process.stdout.write(formatPlanReview(plan) + "\n");
345
+ else process.stdout.write(formatPlanReview(plan, { viewingVersion: requestedVersion }) + "\n");
346
+ return EXIT_OK;
347
+ }
348
+ async function planVersions(args) {
349
+ const { values, positionals } = parseArgs({
350
+ args,
351
+ options: { json: { type: "boolean" } },
352
+ allowPositionals: true
353
+ });
354
+ const base = baseUrl();
355
+ let planId = positionals[0];
356
+ if (!planId) {
357
+ console.error("Usage: diffing plan versions <id> [--json]");
358
+ return EXIT_USAGE;
359
+ }
360
+ const planRes = await fetch(`${base}/api/plans/${planId}`);
361
+ if (planRes.status === 404) {
362
+ console.error(`Plan ${planId} not found.`);
363
+ return EXIT_NOT_FOUND;
364
+ }
365
+ const plan = await planRes.json();
366
+ const versions = plan.versions ?? [];
367
+ if (values.json) {
368
+ process.stdout.write(JSON.stringify(versions, null, 2) + "\n");
369
+ return EXIT_OK;
370
+ }
371
+ if (versions.length === 0) {
372
+ console.error("This plan has no recorded versions.");
373
+ return EXIT_OK;
374
+ }
375
+ for (const v of versions) {
376
+ const marker = v.version === plan.version ? "*" : " ";
377
+ const date = new Date(v.createdAt).toISOString().slice(0, 16).replace("T", " ");
378
+ process.stdout.write(`${marker} v${v.version}\t${date}\t${v.title}\n`);
379
+ }
331
380
  return EXIT_OK;
332
381
  }
333
382
  /** Locate which plan owns a given comment id (comment ids are globally unique). */
@@ -419,10 +468,11 @@ async function plan(args) {
419
468
  case "await": return planAwait(rest);
420
469
  case "list": return planList(rest);
421
470
  case "show": return planShow(rest);
471
+ case "versions": return planVersions(rest);
422
472
  case "reply": return planReply(rest);
423
473
  case "resolve": return planResolve(rest);
424
474
  default:
425
- console.error("Usage: diffing plan <submit|await|list|show|reply|resolve> [...]");
475
+ console.error("Usage: diffing plan <submit|await|list|show|versions|reply|resolve> [...]");
426
476
  return EXIT_USAGE;
427
477
  }
428
478
  }
@@ -435,8 +485,11 @@ async function runSubcommand(name, args) {
435
485
  case "url": return url();
436
486
  case "plan": return plan(args);
437
487
  case "update":
438
- const { runUpdateCommand } = await import("./update-check-DSC02MWQ.mjs");
488
+ const { runUpdateCommand } = await import("./update-check-DAPFCqpF.mjs");
439
489
  return runUpdateCommand();
490
+ case "gh":
491
+ const { runGhSubcommand } = await import("./cli-gh-CDGSpndZ.mjs");
492
+ return runGhSubcommand(args);
440
493
  default:
441
494
  console.error(`Unknown subcommand: ${name}`);
442
495
  return EXIT_USAGE;
@@ -1,4 +1,5 @@
1
- import { c as formatComments, n as readServerLock, o as formatPlanReview, t as isLockAlive } from "./server-lock-DpCrvL-Z.mjs";
1
+ import { a as formatComments, n as readServerLock, t as isLockAlive } from "./server-lock-Dj9fG9md.mjs";
2
+ import { n as formatPlanReview } from "./plan-format-f62JWFI-.mjs";
2
3
  import { parseArgs } from "node:util";
3
4
  import { readFile } from "node:fs/promises";
4
5
  //#region src/cli-agent.ts
@@ -435,8 +436,11 @@ async function runSubcommand(name, args) {
435
436
  case "url": return url();
436
437
  case "plan": return plan(args);
437
438
  case "update":
438
- const { runUpdateCommand } = await import("./update-check-DJuFE9w6.mjs");
439
+ const { runUpdateCommand } = await import("./update-check-DAPFCqpF.mjs");
439
440
  return runUpdateCommand();
441
+ case "gh":
442
+ const { runGhSubcommand } = await import("./cli-gh-CDGSpndZ.mjs");
443
+ return runGhSubcommand(args);
440
444
  default:
441
445
  console.error(`Unknown subcommand: ${name}`);
442
446
  return EXIT_USAGE;
@@ -0,0 +1,147 @@
1
+ import { a as formatComments, n as readServerLock, t as isLockAlive } from "./server-lock-Dj9fG9md.mjs";
2
+ import { parseArgs } from "node:util";
3
+ //#region src/cli-gh.ts
4
+ /**
5
+ * `diffing gh …` — the headless / port-agnostic surface for the PR review
6
+ * mode. Mirrors the shape of the local review CLI: each subcommand resolves
7
+ * the running server from the per-repo lockfile and talks to it via
8
+ * localhost HTTP. No port ever leaves the lockfile.
9
+ *
10
+ * diffing gh pr-fetch <ref> → GET /api/gh/pr/init then dump
11
+ * diffing gh pr-review → POST /api/gh/submit (current session)
12
+ * diffing gh pr-list-comments → GET /api/gh/pr-session/comments (XML)
13
+ * diffing gh status → GET /api/gh/session (one-line summary)
14
+ */
15
+ const EXIT_OK = 0;
16
+ const EXIT_NO_SERVER = 3;
17
+ const EXIT_NOT_FOUND = 4;
18
+ const EXIT_USAGE = 5;
19
+ function baseUrl() {
20
+ const lock = readServerLock();
21
+ if (!lock || !isLockAlive(lock)) {
22
+ console.error("No diffing server running for this repo. Start one with `diffing \"gh pr <ref>\"`.");
23
+ process.exit(EXIT_NO_SERVER);
24
+ }
25
+ return `http://${lock.host === "0.0.0.0" || lock.host === "::" ? "127.0.0.1" : lock.host}:${lock.port}`;
26
+ }
27
+ async function ghStatus() {
28
+ const base = baseUrl();
29
+ const res = await fetch(`${base}/api/gh/session`);
30
+ if (res.status === 404) {
31
+ console.error("No active PR session. Start one with `diffing \"gh pr <ref>\"`.");
32
+ return EXIT_NOT_FOUND;
33
+ }
34
+ const s = await res.json();
35
+ const submittedLine = s.submittedAt ? `submitted at ${new Date(s.submittedAt).toISOString()} → ${s.submittedReviewUrl ?? "(no url)"}` : "not submitted yet";
36
+ console.log(`${s.owner}/${s.repo}#${s.pullNumber} ${s.title}`);
37
+ console.log(` url: ${s.url}`);
38
+ console.log(` author: ${s.author?.login ?? "(unknown)"}`);
39
+ console.log(` +${s.additions} -${s.deletions} (${s.changedFiles} files)`);
40
+ console.log(` head: ${s.headSha.slice(0, 7)}`);
41
+ console.log(` base: ${s.baseSha.slice(0, 7)}`);
42
+ console.log(` existing: ${s.existingComments?.length ?? 0} review comments (read-only context)`);
43
+ console.log(` new: ${s.comments?.length ?? 0} comments in this session`);
44
+ console.log(` status: ${submittedLine}`);
45
+ return EXIT_OK;
46
+ }
47
+ async function ghPrFetch(args) {
48
+ const { values, positionals } = parseArgs({
49
+ args,
50
+ options: { json: { type: "boolean" } },
51
+ allowPositionals: true
52
+ });
53
+ const ref = positionals[0];
54
+ if (!ref) {
55
+ console.error("Usage: diffing gh pr-fetch <ref> [--json]");
56
+ return EXIT_USAGE;
57
+ }
58
+ const base = baseUrl();
59
+ const res = await fetch(`${base}/api/gh/pr/init`, {
60
+ method: "POST",
61
+ headers: { "Content-Type": "application/json" },
62
+ body: JSON.stringify({ ref })
63
+ });
64
+ if (!res.ok) {
65
+ const err = await res.json().catch(() => ({}));
66
+ console.error(`Failed to fetch PR: ${err.error ?? res.statusText}`);
67
+ return 1;
68
+ }
69
+ const result = await res.json();
70
+ if (values.json) process.stdout.write(JSON.stringify(result, null, 2) + "\n");
71
+ else console.log(`${result.owner}/${result.repo}#${result.pullNumber} ${result.url}`);
72
+ return EXIT_OK;
73
+ }
74
+ async function ghPrListComments() {
75
+ const base = baseUrl();
76
+ const res = await fetch(`${base}/api/gh/pr-session/comments`);
77
+ if (res.status === 404) {
78
+ console.error("No active PR session.");
79
+ return EXIT_NOT_FOUND;
80
+ }
81
+ const comments = await res.json();
82
+ process.stdout.write(formatComments(comments) + "\n");
83
+ return EXIT_OK;
84
+ }
85
+ async function ghPrReview(args) {
86
+ const { values } = parseArgs({
87
+ args,
88
+ options: {
89
+ decision: {
90
+ type: "string",
91
+ short: "d"
92
+ },
93
+ body: {
94
+ type: "string",
95
+ short: "b"
96
+ },
97
+ "dry-run": { type: "boolean" },
98
+ json: { type: "boolean" }
99
+ },
100
+ allowPositionals: false
101
+ });
102
+ const decision = values.decision;
103
+ if (decision !== "approve" && decision !== "comment" && decision !== "request-changes") {
104
+ console.error("Usage: diffing gh pr-review --decision <approve|comment|request-changes> [--body <text>] [--dry-run]");
105
+ return EXIT_USAGE;
106
+ }
107
+ const base = baseUrl();
108
+ const payload = {
109
+ decision,
110
+ body: values.body ?? "",
111
+ dryRun: values["dry-run"] === true
112
+ };
113
+ const res = await fetch(`${base}/api/gh/submit`, {
114
+ method: "POST",
115
+ headers: { "Content-Type": "application/json" },
116
+ body: JSON.stringify(payload)
117
+ });
118
+ if (!res.ok) {
119
+ const err = await res.json().catch(() => ({}));
120
+ console.error(`Failed to submit review: ${err.error ?? res.statusText}`);
121
+ return 1;
122
+ }
123
+ const result = await res.json();
124
+ if (values.json) process.stdout.write(JSON.stringify(result, null, 2) + "\n");
125
+ else if (result.ok) if (result.dryRun) console.log("Dry run OK — payload would have been accepted by GitHub.");
126
+ else console.log(`Review submitted via ${result.authSource}: ${result.reviewUrl ?? `#${result.reviewId}`}`);
127
+ else {
128
+ console.error(`Submit failed (auth=${result.authSource}): ${result.error ?? "unknown error"}`);
129
+ return 1;
130
+ }
131
+ return EXIT_OK;
132
+ }
133
+ async function runGhSubcommand(args) {
134
+ const action = args[0];
135
+ const rest = args.slice(1);
136
+ switch (action) {
137
+ case "status": return ghStatus();
138
+ case "pr-fetch": return ghPrFetch(rest);
139
+ case "pr-review": return ghPrReview(rest);
140
+ case "pr-list-comments": return ghPrListComments();
141
+ default:
142
+ console.error("Usage: diffing gh <status|pr-fetch|pr-review|pr-list-comments> [...]");
143
+ return EXIT_USAGE;
144
+ }
145
+ }
146
+ //#endregion
147
+ export { runGhSubcommand };