diffing 0.2.0 → 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 (421) hide show
  1. package/README.md +185 -4
  2. package/dist/{cli-agent-Vbs-ePHv.mjs → cli-agent-KxNAFIPf.mjs} +8 -1
  3. package/dist/cli-gh-CDGSpndZ.mjs +147 -0
  4. package/dist/cli.mjs +1594 -68
  5. package/dist/client/assets/{angular-html-fdYbuxHF.js → angular-html-DbbrJavS.js} +1 -1
  6. package/dist/client/assets/{angular-ts-D3iFqR-R.js → angular-ts-tCrxb1ht.js} +1 -1
  7. package/dist/client/assets/{apl-MnBV-iQN.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-BrpK01E7.js → astro-DIyGTFXc.js} +1 -1
  13. package/dist/client/assets/{blade-CGmyBuwD.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-xQnwtG9Y.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-ypVzOIQu.js → cobol-BylylR2x.js} +1 -1
  53. package/dist/client/assets/{coffee-CrtE1uj2.js → coffee-DCKfk8xx.js} +1 -1
  54. package/dist/client/assets/cose-bilkent-S5V4N54A-Cm0BD5CS.js +1 -0
  55. package/dist/client/assets/{cpp-DLd4XEKA.js → cpp-CfKCIrGK.js} +1 -1
  56. package/dist/client/assets/{crystal-CJYvpLt_.js → crystal-v-9RIu3l.js} +1 -1
  57. package/dist/client/assets/{css-DrX2B9os.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-BsQYk9OW.js → edge-Cwh953i8.js} +1 -1
  69. package/dist/client/assets/{elixir-DU_VfGYR.js → elixir-C4MgLzTj.js} +1 -1
  70. package/dist/client/assets/{elm-W4eOLEDv.js → elm-CFBu8r7i.js} +1 -1
  71. package/dist/client/assets/erDiagram-TEJ5UH35-_03Fb9RH.js +85 -0
  72. package/dist/client/assets/{erb-D9FdIJ2e.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-BtPCXjbS.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-BVfUGMUb.js → glimmer-js-wjBSKaMu.js} +1 -1
  85. package/dist/client/assets/{glimmer-ts-BZEaHDZL.js → glimmer-ts-CyjMXDgZ.js} +1 -1
  86. package/dist/client/assets/{glsl-CSiNDuwt.js → glsl-CWOoN8or.js} +1 -1
  87. package/dist/client/assets/graphlib-DBdw4opr.js +1 -0
  88. package/dist/client/assets/{graphql-Crf08Rhb.js → graphql-DI5CB58U.js} +1 -1
  89. package/dist/client/assets/{hack-DUiQuO20.js → hack-Ct_Cm7Pr.js} +1 -1
  90. package/dist/client/assets/{haml-BtvVTDRG.js → haml-DzAjli8d.js} +1 -1
  91. package/dist/client/assets/{handlebars-Bu_cdZA_.js → handlebars-BfJB0RYx.js} +1 -1
  92. package/dist/client/assets/{html-C4cun3zD.js → html-CK8auhK8.js} +1 -1
  93. package/dist/client/assets/{html-derivative-CQnD80KV.js → html-derivative-B7VntYnF.js} +1 -1
  94. package/dist/client/assets/{http-DuOJF9Kg.js → http-_Zy71Sv3.js} +1 -1
  95. package/dist/client/assets/{hurl-DgrdYsYh.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-C3p7VKOX.css +1 -0
  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-D-vtFiv8.js → java-0CC2DnK9.js} +1 -1
  104. package/dist/client/assets/{javascript-CFYFXvdN.js → javascript-DKSTP7rz.js} +1 -1
  105. package/dist/client/assets/{jinja-fZvIg2_s.js → jinja-DoGBHNJ6.js} +1 -1
  106. package/dist/client/assets/{jison-DEzxLq5g.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-QM4VBqMC.js → json-BQ3Ddj6g.js} +1 -1
  109. package/dist/client/assets/{jsx-DLzUM_cC.js → jsx-C_aFDuFZ.js} +1 -1
  110. package/dist/client/assets/{julia-Dwt1SIpn.js → julia-nIjp5yMR.js} +1 -1
  111. package/dist/client/assets/{just-Dwp-hLcL.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-CMF1JViz.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-czkpOZWY.js → liquid-DglQpTge.js} +1 -1
  118. package/dist/client/assets/{lua-DE5PD0Vh.js → lua-BcbliFeR.js} +1 -1
  119. package/dist/client/assets/{marko-DHeEvZiW.js → marko-BPm4M8j-.js} +1 -1
  120. package/dist/client/assets/{mdc-B941liUQ.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-Pb9t8c-r.js → nginx-CSSJwkd6.js} +1 -1
  126. package/dist/client/assets/{nim-MMUvW_R1.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-DXwXRmuC.js → perl-CtH8xYH6.js} +1 -1
  131. package/dist/client/assets/{php-D42kv59r.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-v0iesski.js → pug-BCLaymlV.js} +1 -1
  135. package/dist/client/assets/{qml-spxQQ-ei.js → qml-BpKydcOi.js} +1 -1
  136. package/dist/client/assets/quadrantDiagram-W4KKPZXB-CJY6un0-.js +7 -0
  137. package/dist/client/assets/{r-CobWTBG9.js → r-BzCB9dpd.js} +1 -1
  138. package/dist/client/assets/radar-GUYGQ44K-BKTzSQ68.js +1 -0
  139. package/dist/client/assets/{razor-B-_Ww3MB.js → razor-BWmujqiQ.js} +1 -1
  140. package/dist/client/assets/{regexp-BJMVs8R0.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-BHcaWsY0.js → rst-YTDC9H6u.js} +1 -1
  144. package/dist/client/assets/{ruby-BCMT6kog.js → ruby-v1IXQAFZ.js} +1 -1
  145. package/dist/client/assets/sankeyDiagram-5OEKKPKP-DJRPEO_F.js +40 -0
  146. package/dist/client/assets/{sas-DHfZnd3R.js → sas-KDUG3BSk.js} +1 -1
  147. package/dist/client/assets/{scss-DjDsJvDO.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-B6qaIiU-.js → shellscript-B5ZTyEsK.js} +1 -1
  151. package/dist/client/assets/{shellsession-ByCeir2b.js → shellsession-DVK3bw4p.js} +1 -1
  152. package/dist/client/assets/{soy-C6WpnMSF.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-BIvSNLV_.js → sql-G2vZCmw6.js} +1 -1
  155. package/dist/client/assets/src-D9zkqEEX.js +1 -0
  156. package/dist/client/assets/{stata-PG9iZ--I.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-CmvCzG09.js → surrealql-Bf8gsTcP.js} +1 -1
  160. package/dist/client/assets/{svelte-ChumG88s.js → svelte-C1oIyl9t.js} +1 -1
  161. package/dist/client/assets/{templ-CmzuRY_a.js → templ-PJcWUuTF.js} +1 -1
  162. package/dist/client/assets/{tex-DL8t-_eJ.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-BFfE0Egm.js → ts-tags-CAAsFnUt.js} +1 -1
  167. package/dist/client/assets/{tsx-C1bFyHcE.js → tsx-DAKyTsWW.js} +1 -1
  168. package/dist/client/assets/{twig-DkIluZEQ.js → twig-Bd4dieZF.js} +1 -1
  169. package/dist/client/assets/{typescript-Gc86Bc3j.js → typescript-8myByDGd.js} +1 -1
  170. package/dist/client/assets/vennDiagram-CIIHVFJN-CMjBZNs2.js +34 -0
  171. package/dist/client/assets/{vue-C88JmL53.js → vue-fBA2B-QU.js} +1 -1
  172. package/dist/client/assets/{vue-html-Cry4aksC.js → vue-html-DEZECpsR.js} +1 -1
  173. package/dist/client/assets/{vue-vine-zlDkA3Ui.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-NvwpIFDy.js → xml-DbXNss3s.js} +1 -1
  177. package/dist/client/assets/{xsl-CDjXvY9w.js → xsl-B7_dgqqc.js} +1 -1
  178. package/dist/client/assets/xychartDiagram-2RQKCTM6-NN2Et7YL.js +7 -0
  179. package/dist/client/assets/{yaml-Bh-LPjcH.js → yaml-DSyIApdJ.js} +1 -1
  180. package/dist/client/index.html +2 -5
  181. package/dist/{mcp-DKlThflu.mjs → mcp-BWeWR4yd.mjs} +3 -1
  182. package/dist/plan-format-f62JWFI-.mjs +117 -0
  183. package/dist/{server-lock-CAdqFSfl.mjs → server-lock-Dj9fG9md.mjs} +279 -132
  184. package/dist/update-check-DAPFCqpF.mjs +129 -0
  185. package/package.json +15 -5
  186. package/dist/cli-agent-Cfuy9fLC.mjs +0 -179
  187. package/dist/cli-agent-CtNivjQW.mjs +0 -179
  188. package/dist/cli-agent-DZBvZoXZ.mjs +0 -179
  189. package/dist/cli-agent-WzJPMH52.mjs +0 -174
  190. package/dist/cli-agent-uYUoCA4X.mjs +0 -179
  191. package/dist/client/assets/index-CZZd7iTh.js +0 -3887
  192. package/dist/client/assets/index-CkC-EvWo.css +0 -1
  193. package/dist/mcp-BQmH_By-.mjs +0 -119
  194. package/dist/mcp-CLgzC8_a.mjs +0 -119
  195. package/dist/mcp-D9E2HQZ9.mjs +0 -119
  196. package/dist/mcp-LVbLV17O.mjs +0 -119
  197. package/dist/mcp-nMwTAut3.mjs +0 -119
  198. package/dist/server-lock-BbiF7u3F.mjs +0 -493
  199. package/dist/server-lock-Bx9ixiF6.mjs +0 -575
  200. package/dist/server-lock-DIkImokU.mjs +0 -487
  201. package/dist/server-lock-DbxpfF3j.mjs +0 -575
  202. /package/dist/client/assets/{abap-CkQ0tsz-.js → abap-cWYhO34H.js} +0 -0
  203. /package/dist/client/assets/{actionscript-3-DHm0ZfF4.js → actionscript-3-B80ndJsD.js} +0 -0
  204. /package/dist/client/assets/{ada-DK_ua92Z.js → ada-C0C0SoYB.js} +0 -0
  205. /package/dist/client/assets/{andromeeda-D2ccw8v4.js → andromeeda-Ch2kWS7s.js} +0 -0
  206. /package/dist/client/assets/{apache-DXtpFu7o.js → apache-DBwBm4bB.js} +0 -0
  207. /package/dist/client/assets/{apex-DlnRRWpl.js → apex-FcV7UxQi.js} +0 -0
  208. /package/dist/client/assets/{applescript-CShk62ad.js → applescript-hQs8VNpS.js} +0 -0
  209. /package/dist/client/assets/{ara-CWN-FDkm.js → ara-BOadBOZg.js} +0 -0
  210. /package/dist/client/assets/{asciidoc-Bg-PM9Vn.js → asciidoc-BsfqiBck.js} +0 -0
  211. /package/dist/client/assets/{asm-DKOhR24S.js → asm-C2vUqzqz.js} +0 -0
  212. /package/dist/client/assets/{aurora-x-DpaEirL8.js → aurora-x-BHLqzt7j.js} +0 -0
  213. /package/dist/client/assets/{awk-3ibKHffv.js → awk-D4e-eeZT.js} +0 -0
  214. /package/dist/client/assets/{ayu-dark-ursiSH5k.js → ayu-dark-DCotN_ZT.js} +0 -0
  215. /package/dist/client/assets/{ayu-light-DMjlrKmx.js → ayu-light-CKB6o_im.js} +0 -0
  216. /package/dist/client/assets/{ayu-mirage-DZEMb75h.js → ayu-mirage-B38lW-C5.js} +0 -0
  217. /package/dist/client/assets/{ballerina-xx7VNGxs.js → ballerina-BzvFqbha.js} +0 -0
  218. /package/dist/client/assets/{bat-DGYsZ5wR.js → bat-CFyw2ERn.js} +0 -0
  219. /package/dist/client/assets/{beancount-D_ATR1UV.js → beancount-a6Gsu5WX.js} +0 -0
  220. /package/dist/client/assets/{berry-BqYMORfH.js → berry-C2jyz4Ah.js} +0 -0
  221. /package/dist/client/assets/{bibtex-CQTBDajW.js → bibtex-Dyet-B83.js} +0 -0
  222. /package/dist/client/assets/{bicep-CfNtxPrK.js → bicep-CghvUIvy.js} +0 -0
  223. /package/dist/client/assets/{bird2-C0dUPe3I.js → bird2-nHigvs-R.js} +0 -0
  224. /package/dist/client/assets/{c3-BUwZ5e3k.js → c3-9ZrcmAmr.js} +0 -0
  225. /package/dist/client/assets/{cadence-C3OKDYrr.js → cadence-BPDgYNWy.js} +0 -0
  226. /package/dist/client/assets/{catppuccin-frappe-CMnRXVZP.js → catppuccin-frappe-BY_2ofjk.js} +0 -0
  227. /package/dist/client/assets/{catppuccin-latte-CqhXSjCC.js → catppuccin-latte-D6GXPBmA.js} +0 -0
  228. /package/dist/client/assets/{catppuccin-macchiato-B6kneE0C.js → catppuccin-macchiato-BuW8_cyo.js} +0 -0
  229. /package/dist/client/assets/{catppuccin-mocha-CP8YZpvj.js → catppuccin-mocha-znex9DPe.js} +0 -0
  230. /package/dist/client/assets/{clarity-Crxe8gSr.js → clarity-Cmao5KSK.js} +0 -0
  231. /package/dist/client/assets/{clojure-BuzOUPMr.js → clojure-D2dPuTkk.js} +0 -0
  232. /package/dist/client/assets/{cmake-CCpZLdLI.js → cmake-DaqQuj4A.js} +0 -0
  233. /package/dist/client/assets/{codeowners-Bo1VYpHz.js → codeowners-B748jmvc.js} +0 -0
  234. /package/dist/client/assets/{codeql-Db01hzHE.js → codeql-CXb_8gHR.js} +0 -0
  235. /package/dist/client/assets/{common-lisp-CMlJIc6Y.js → common-lisp-UZn9nc_5.js} +0 -0
  236. /package/dist/client/assets/{coq-BlzBYp3f.js → coq-DtO6yBIf.js} +0 -0
  237. /package/dist/client/assets/{csharp-kfNshAa7.js → csharp-C3YlYcLV.js} +0 -0
  238. /package/dist/client/assets/{csv-Dr8ri5Nd.js → csv-BBwiVr0X.js} +0 -0
  239. /package/dist/client/assets/{cue-jXfhyOwY.js → cue-ScBFXY5f.js} +0 -0
  240. /package/dist/client/assets/{cypher-CayLeiaR.js → cypher-CGStaC1X.js} +0 -0
  241. /package/dist/client/assets/{d-BMZQ0mAy.js → d-CuTCIvnX.js} +0 -0
  242. /package/dist/client/assets/{dark-plus-B__q47Nr.js → dark-plus-BvePH-r3.js} +0 -0
  243. /package/dist/client/assets/{dart-gMOEMyuz.js → dart-CqEodbm2.js} +0 -0
  244. /package/dist/client/assets/{dax-C3t5LadU.js → dax-UdE5S0Dh.js} +0 -0
  245. /package/dist/client/assets/{desktop-DmhXLwLR.js → desktop-DfmsfHJA.js} +0 -0
  246. /package/dist/client/assets/{diff-togOXQX6.js → diff-CW0RWGd9.js} +0 -0
  247. /package/dist/client/assets/{docker--6N01olR.js → docker-B1qtW4ha.js} +0 -0
  248. /package/dist/client/assets/{dotenv-Bq930Yx8.js → dotenv-BUzOh1k8.js} +0 -0
  249. /package/dist/client/assets/{dracula-CBkSghcw.js → dracula-kJQjC_Gy.js} +0 -0
  250. /package/dist/client/assets/{dracula-soft-CCSYeoxL.js → dracula-soft-B3XhEjCl.js} +0 -0
  251. /package/dist/client/assets/{dream-maker-BiMf3DHl.js → dream-maker-CBvk18nW.js} +0 -0
  252. /package/dist/client/assets/{emacs-lisp-Dhht7he2.js → emacs-lisp-DvSgLhDc.js} +0 -0
  253. /package/dist/client/assets/{everforest-dark-NqSz4oHS.js → everforest-dark-u0zLn75q.js} +0 -0
  254. /package/dist/client/assets/{everforest-light-a3Yzs_lT.js → everforest-light-D3syIoAR.js} +0 -0
  255. /package/dist/client/assets/{fennel-BExc9TZf.js → fennel-C-1kWlGf.js} +0 -0
  256. /package/dist/client/assets/{fish-C2p-AJmZ.js → fish-CCpdtwqS.js} +0 -0
  257. /package/dist/client/assets/{fluent-CeYzs8Qy.js → fluent-BLg032oD.js} +0 -0
  258. /package/dist/client/assets/{fortran-free-form-BIQEK2Jw.js → fortran-free-form-Br4jRtSc.js} +0 -0
  259. /package/dist/client/assets/{gdscript-B5JQPh_-.js → gdscript-hSAZM1eh.js} +0 -0
  260. /package/dist/client/assets/{gdshader-vVjJ_Qr8.js → gdshader-D4XNAEs9.js} +0 -0
  261. /package/dist/client/assets/{genie-DGl5rqC8.js → genie-DmN-ICAN.js} +0 -0
  262. /package/dist/client/assets/{gherkin-CY_VLUnD.js → gherkin-cuHHmRcX.js} +0 -0
  263. /package/dist/client/assets/{github-dark-ClO4AStc.js → github-dark-CEBLh0--.js} +0 -0
  264. /package/dist/client/assets/{github-dark-default-CM0dPco8.js → github-dark-default-Dq0Z4Xai.js} +0 -0
  265. /package/dist/client/assets/{github-dark-dimmed-Cb6xxpXY.js → github-dark-dimmed-D90YmS4w.js} +0 -0
  266. /package/dist/client/assets/{github-dark-high-contrast-BpYtx2-M.js → github-dark-high-contrast-B6BWv1iC.js} +0 -0
  267. /package/dist/client/assets/{github-light-default-BmnCWL6x.js → github-light-default-DsPWmj4v.js} +0 -0
  268. /package/dist/client/assets/{github-light-high-contrast-rpagNF5O.js → github-light-high-contrast-C7aLb3kp.js} +0 -0
  269. /package/dist/client/assets/{github-light-CeOVFgf_.js → github-light-lXSVSq5T.js} +0 -0
  270. /package/dist/client/assets/{gleam-BarIG9kQ.js → gleam-D8VhqPDN.js} +0 -0
  271. /package/dist/client/assets/{gn-DhYsTPYc.js → gn-BjGRlX27.js} +0 -0
  272. /package/dist/client/assets/{gnuplot-CucLlTBc.js → gnuplot-BZCXuE4q.js} +0 -0
  273. /package/dist/client/assets/{go-toi-uWvg.js → go-BJpWXZEs.js} +0 -0
  274. /package/dist/client/assets/{groovy-Ds4dis_k.js → groovy-D9w3Dn-z.js} +0 -0
  275. /package/dist/client/assets/{gruvbox-dark-hard-aPiW8pQh.js → gruvbox-dark-hard-_deksD0U.js} +0 -0
  276. /package/dist/client/assets/{gruvbox-dark-medium-2HJCvzsS.js → gruvbox-dark-medium-CT31284j.js} +0 -0
  277. /package/dist/client/assets/{gruvbox-dark-soft-Da97ODX9.js → gruvbox-dark-soft-BZuEUCbj.js} +0 -0
  278. /package/dist/client/assets/{gruvbox-light-hard-BXlEipFe.js → gruvbox-light-hard-dxv4n_ZS.js} +0 -0
  279. /package/dist/client/assets/{gruvbox-light-medium-Cun-GjGk.js → gruvbox-light-medium-BsW_fVfR.js} +0 -0
  280. /package/dist/client/assets/{gruvbox-light-soft-Bd3qiiSw.js → gruvbox-light-soft-BiGy99gD.js} +0 -0
  281. /package/dist/client/assets/{haskell-B_jvz5Po.js → haskell-DqDdKEgk.js} +0 -0
  282. /package/dist/client/assets/{haxe-BRbuo5UO.js → haxe-DMg0jS3a.js} +0 -0
  283. /package/dist/client/assets/{hcl-BzNUCtsK.js → hcl-SZIZUK_X.js} +0 -0
  284. /package/dist/client/assets/{hjson-BxVo3sS2.js → hjson-DF1VspiE.js} +0 -0
  285. /package/dist/client/assets/{hlsl-C8Wes1nf.js → hlsl-DPe9L0Dt.js} +0 -0
  286. /package/dist/client/assets/{horizon-D54PjLAY.js → horizon-Ngud75Kn.js} +0 -0
  287. /package/dist/client/assets/{horizon-bright-D9RccdIr.js → horizon-bright-Cnljd0XD.js} +0 -0
  288. /package/dist/client/assets/{houston-CMu1N_4K.js → houston-BenZxlMr.js} +0 -0
  289. /package/dist/client/assets/{hy-dMrJKKU_.js → hy-B0f-B1mH.js} +0 -0
  290. /package/dist/client/assets/{imba-DG_oO8tg.js → imba-Bq3j1cW5.js} +0 -0
  291. /package/dist/client/assets/{ini-geHw79Aj.js → ini-BayloP2U.js} +0 -0
  292. /package/dist/client/assets/{json5-CDUsNqz6.js → json5-CRSfdIrY.js} +0 -0
  293. /package/dist/client/assets/{jsonc-D48xcwyD.js → jsonc-y4g9DQPx.js} +0 -0
  294. /package/dist/client/assets/{jsonl-cpIYDXEe.js → jsonl-D2paVn9r.js} +0 -0
  295. /package/dist/client/assets/{jsonnet-Da1lhszN.js → jsonnet-CLH27mtz.js} +0 -0
  296. /package/dist/client/assets/{jssm-B8BLrEGL.js → jssm-CPPYaqX-.js} +0 -0
  297. /package/dist/client/assets/{kanagawa-dragon-2Sk8Rx83.js → kanagawa-dragon-Bt5mhLu1.js} +0 -0
  298. /package/dist/client/assets/{kanagawa-lotus-CQVSWfJp.js → kanagawa-lotus-FGA3pRJk.js} +0 -0
  299. /package/dist/client/assets/{kanagawa-wave-BKWNioLX.js → kanagawa-wave-DnLVZPAD.js} +0 -0
  300. /package/dist/client/assets/{kdl-B-2tSRmp.js → kdl-D1BQjjnw.js} +0 -0
  301. /package/dist/client/assets/{kotlin-DepsEzh3.js → kotlin-ndCaDnf0.js} +0 -0
  302. /package/dist/client/assets/{kusto-BcCtXIb8.js → kusto-D-4nbkD3.js} +0 -0
  303. /package/dist/client/assets/{laserwave-BUqkO46F.js → laserwave-D2qAZkaG.js} +0 -0
  304. /package/dist/client/assets/{lean-CNO9ffpX.js → lean-YmtAsB0p.js} +0 -0
  305. /package/dist/client/assets/{less-Dj0T9pWC.js → less-DyHub3ow.js} +0 -0
  306. /package/dist/client/assets/{light-plus-C9Hnuc1T.js → light-plus-CP13QUvm.js} +0 -0
  307. /package/dist/client/assets/{llvm-DbV9b66l.js → llvm-DCcqrY0D.js} +0 -0
  308. /package/dist/client/assets/{log-BMblmPyH.js → log-DWAAMNbe.js} +0 -0
  309. /package/dist/client/assets/{logo-B78qMxws.js → logo-ClQMGkNL.js} +0 -0
  310. /package/dist/client/assets/{luau-BUd8xsdE.js → luau-CmcXFvLt.js} +0 -0
  311. /package/dist/client/assets/{make-Ev-6cJrd.js → make-DcfJyUzm.js} +0 -0
  312. /package/dist/client/assets/{markdown-CS4LI6sN.js → markdown-DXxotAxn.js} +0 -0
  313. /package/dist/client/assets/{material-theme-5rA1zn0D.js → material-theme-JFoPTBSr.js} +0 -0
  314. /package/dist/client/assets/{material-theme-darker-DGOEiL65.js → material-theme-darker-BHaqZ19v.js} +0 -0
  315. /package/dist/client/assets/{material-theme-lighter-CULfFRX0.js → material-theme-lighter-CGnnS2bs.js} +0 -0
  316. /package/dist/client/assets/{material-theme-ocean-LQZ9CleP.js → material-theme-ocean-Drhewjqf.js} +0 -0
  317. /package/dist/client/assets/{material-theme-palenight-Di_f5oks.js → material-theme-palenight-DbUypmpb.js} +0 -0
  318. /package/dist/client/assets/{matlab-C0qEtAx9.js → matlab-BlfbTznR.js} +0 -0
  319. /package/dist/client/assets/{mdx-CzvnbLXb.js → mdx-H8fyPQd8.js} +0 -0
  320. /package/dist/client/assets/{mermaid-BPquZaKt.js → mermaid-CWAV2dmV.js} +0 -0
  321. /package/dist/client/assets/{min-dark-rkuIbtJV.js → min-dark-BEelvXUB.js} +0 -0
  322. /package/dist/client/assets/{min-light-Dj_HOGsr.js → min-light-CTPBOACR.js} +0 -0
  323. /package/dist/client/assets/{mipsasm-k5DQoS6j.js → mipsasm-BWYFAm2s.js} +0 -0
  324. /package/dist/client/assets/{mojo-sTTDuNnR.js → mojo-DZcPJEIN.js} +0 -0
  325. /package/dist/client/assets/{monokai-D5p-u2ij.js → monokai-DQlZXbkg.js} +0 -0
  326. /package/dist/client/assets/{moonbit-j5ChFtBC.js → moonbit-6eslNlJL.js} +0 -0
  327. /package/dist/client/assets/{move-Dj0Gmn6R.js → move-DxFc9-QU.js} +0 -0
  328. /package/dist/client/assets/{narrat-DJgMz2oW.js → narrat-gv38dJOT.js} +0 -0
  329. /package/dist/client/assets/{nextflow-groovy-eDLuZ_oi.js → nextflow-groovy-DV4H3hok.js} +0 -0
  330. /package/dist/client/assets/{night-owl-CEdtPl3A.js → night-owl-BLcrYhaC.js} +0 -0
  331. /package/dist/client/assets/{night-owl-light-GdSldewm.js → night-owl-light-BG-tBJOz.js} +0 -0
  332. /package/dist/client/assets/{nix-CxIPS3pb.js → nix-NlOz3HGM.js} +0 -0
  333. /package/dist/client/assets/{nord-3WFAz5H9.js → nord-Dm2F5_QB.js} +0 -0
  334. /package/dist/client/assets/{nushell-GDfBmoBU.js → nushell-D86Z8aFF.js} +0 -0
  335. /package/dist/client/assets/{objective-c-MFQ_MGUa.js → objective-c-iuJvUjCv.js} +0 -0
  336. /package/dist/client/assets/{objective-cpp-Y83LcBE7.js → objective-cpp-C62JvfMT.js} +0 -0
  337. /package/dist/client/assets/{ocaml-FxYfaJxu.js → ocaml-Rbryo9lg.js} +0 -0
  338. /package/dist/client/assets/{odin-CprihY3z.js → odin-CfaOVNP_.js} +0 -0
  339. /package/dist/client/assets/{one-dark-pro-BB6mpmmA.js → one-dark-pro-DC9SHdX0.js} +0 -0
  340. /package/dist/client/assets/{one-light-BYLoxNtg.js → one-light-Doo39p0H.js} +0 -0
  341. /package/dist/client/assets/{openscad-Bc1FbpOi.js → openscad-DCRhgheK.js} +0 -0
  342. /package/dist/client/assets/{pascal-Bb4d8cUL.js → pascal-CTesTHtV.js} +0 -0
  343. /package/dist/client/assets/{pierre-dark-cF19s-RM.js → pierre-dark-Gtc9M_gS.js} +0 -0
  344. /package/dist/client/assets/{pierre-light-BdpX8OpD.js → pierre-light-EDxMHmhf.js} +0 -0
  345. /package/dist/client/assets/{pkl-tM25Sq0w.js → pkl-BjUMjQkt.js} +0 -0
  346. /package/dist/client/assets/{plastic-D3k2Xp_5.js → plastic-B3CcSpon.js} +0 -0
  347. /package/dist/client/assets/{plsql-CLEfFhSj.js → plsql-BgKEZSSo.js} +0 -0
  348. /package/dist/client/assets/{po-CaAzdrrh.js → po-C5s_CVt8.js} +0 -0
  349. /package/dist/client/assets/{poimandres-bPTvT4Da.js → poimandres-BsK70ma5.js} +0 -0
  350. /package/dist/client/assets/{polar-TG7aTGdK.js → polar-y4hX8qM0.js} +0 -0
  351. /package/dist/client/assets/{postcss-8kqfa9f0.js → postcss-BHCm7Qae.js} +0 -0
  352. /package/dist/client/assets/{powerquery-CtSu1Nfd.js → powerquery-C2vMt8aZ.js} +0 -0
  353. /package/dist/client/assets/{powershell-87lLBHMy.js → powershell-DEcjmg1c.js} +0 -0
  354. /package/dist/client/assets/{prisma-Dnf694DZ.js → prisma-Ba-Tcxy5.js} +0 -0
  355. /package/dist/client/assets/{prolog-C0XbHTWa.js → prolog-B4o261Jv.js} +0 -0
  356. /package/dist/client/assets/{proto-BZP-HLIb.js → proto-o3IZKiMR.js} +0 -0
  357. /package/dist/client/assets/{puppet-CJYWgYC5.js → puppet-BC0dqZ31.js} +0 -0
  358. /package/dist/client/assets/{purescript-B95Q6BAd.js → purescript-CLDw1y5G.js} +0 -0
  359. /package/dist/client/assets/{python-CqTCsi7P.js → python-D1NFioGW.js} +0 -0
  360. /package/dist/client/assets/{qmldir-DlIL4hls.js → qmldir-B7i9e9Vn.js} +0 -0
  361. /package/dist/client/assets/{qss-BW72E0q_.js → qss-DIe6oKX8.js} +0 -0
  362. /package/dist/client/assets/{racket-CCAimEsC.js → racket-CAOC_yyk.js} +0 -0
  363. /package/dist/client/assets/{raku-mSuqElkM.js → raku-Ccua3vW6.js} +0 -0
  364. /package/dist/client/assets/{red-C-DA4yBI.js → red-DtDH206x.js} +0 -0
  365. /package/dist/client/assets/{reg-CGwMBJ2c.js → reg-CAYZT9kE.js} +0 -0
  366. /package/dist/client/assets/{rel-JwrbYgX4.js → rel-cvB6F5nO.js} +0 -0
  367. /package/dist/client/assets/{riscv-CoYyE75b.js → riscv-SYGtE4EN.js} +0 -0
  368. /package/dist/client/assets/{ron-C5wrhnmJ.js → ron-CRt869SB.js} +0 -0
  369. /package/dist/client/assets/{rose-pine-DlrMPYYd.js → rose-pine-CjBfSJ5b.js} +0 -0
  370. /package/dist/client/assets/{rose-pine-dawn-DBHFtZD2.js → rose-pine-dawn-C0xwy7iJ.js} +0 -0
  371. /package/dist/client/assets/{rose-pine-moon-BBfrpe5q.js → rose-pine-moon-BSNy9Ty0.js} +0 -0
  372. /package/dist/client/assets/{rosmsg-DlimTR9t.js → rosmsg-BwrfJ66Z.js} +0 -0
  373. /package/dist/client/assets/{rust-Cxnkxx3h.js → rust-DCKTTPxN.js} +0 -0
  374. /package/dist/client/assets/{sass-DEyqUIpU.js → sass-CorcwySt.js} +0 -0
  375. /package/dist/client/assets/{scala-i3RN3yAN.js → scala-DlI-OmYj.js} +0 -0
  376. /package/dist/client/assets/{scheme-BcKdjYkO.js → scheme-CcNEGkZH.js} +0 -0
  377. /package/dist/client/assets/{sdbl-Be_XWc3n.js → sdbl-AL_m-RO_.js} +0 -0
  378. /package/dist/client/assets/{slack-dark-3PDtm74m.js → slack-dark-rMhrfPm6.js} +0 -0
  379. /package/dist/client/assets/{slack-ochin-CwiuFRJD.js → slack-ochin-9w8X74hU.js} +0 -0
  380. /package/dist/client/assets/{smalltalk-BdBlL6ks.js → smalltalk-Y2ogrfbk.js} +0 -0
  381. /package/dist/client/assets/{snazzy-light-Dyqc8Is2.js → snazzy-light-DHr9ygpP.js} +0 -0
  382. /package/dist/client/assets/{solarized-dark-DZiTscIX.js → solarized-dark-UPcKev9Q.js} +0 -0
  383. /package/dist/client/assets/{solarized-light-DBcfxrfG.js → solarized-light-DUsjROvl.js} +0 -0
  384. /package/dist/client/assets/{solidity-DH-yUSWc.js → solidity-Bfbm9QZQ.js} +0 -0
  385. /package/dist/client/assets/{splunk-CIjc4kxs.js → splunk-6DJA2XFa.js} +0 -0
  386. /package/dist/client/assets/{ssh-config-BKVd4drG.js → ssh-config-CbQtdF-u.js} +0 -0
  387. /package/dist/client/assets/{stylus-tqAsmugv.js → stylus-B_iq45Sj.js} +0 -0
  388. /package/dist/client/assets/{swift-CdDBQ3_Z.js → swift-C7KIgN-p.js} +0 -0
  389. /package/dist/client/assets/{synthwave-84-CbbRs73K.js → synthwave-84-lf_Wt0K_.js} +0 -0
  390. /package/dist/client/assets/{system-verilog-CBqEY-9v.js → system-verilog-C3G9wERd.js} +0 -0
  391. /package/dist/client/assets/{systemd-khRP5zwK.js → systemd-CwxGrojj.js} +0 -0
  392. /package/dist/client/assets/{talonscript-D_lneH-6.js → talonscript-DqnSo1EO.js} +0 -0
  393. /package/dist/client/assets/{tasl-CLymawGe.js → tasl-T8ethp86.js} +0 -0
  394. /package/dist/client/assets/{tcl-BRY1S87U.js → tcl-Ccl366o0.js} +0 -0
  395. /package/dist/client/assets/{terraform-BqohMo2f.js → terraform-BBf6ZI_0.js} +0 -0
  396. /package/dist/client/assets/{tokyo-night-BWUONxad.js → tokyo-night-BF5ata25.js} +0 -0
  397. /package/dist/client/assets/{toml-C4c85Lwg.js → toml-C5Z_BR4r.js} +0 -0
  398. /package/dist/client/assets/{tsv-DsZq9HBQ.js → tsv-rX8sUJs7.js} +0 -0
  399. /package/dist/client/assets/{turtle-Dpr8zLlw.js → turtle-BM-MG8WY.js} +0 -0
  400. /package/dist/client/assets/{typespec-DcqgATB-.js → typespec-C5gKydvR.js} +0 -0
  401. /package/dist/client/assets/{typst-CeVxmuPg.js → typst--_5VchrY.js} +0 -0
  402. /package/dist/client/assets/{v-C2Qsh2-1.js → v-C6PwpmTC.js} +0 -0
  403. /package/dist/client/assets/{vala-CvZ3yL7c.js → vala-4pTaceSj.js} +0 -0
  404. /package/dist/client/assets/{vb-B_p4qDw4.js → vb-DhoR5A6S.js} +0 -0
  405. /package/dist/client/assets/{verilog-D8MGjxD7.js → verilog-B9f_1lPn.js} +0 -0
  406. /package/dist/client/assets/{vesper-DossXiE1.js → vesper-CmBi_iCT.js} +0 -0
  407. /package/dist/client/assets/{vhdl-MLyYh_Gz.js → vhdl-Cy4RAmOe.js} +0 -0
  408. /package/dist/client/assets/{viml-BuYIArcz.js → viml-CFQW-CcD.js} +0 -0
  409. /package/dist/client/assets/{vitesse-black-C3kc1227.js → vitesse-black-CE8RoBJP.js} +0 -0
  410. /package/dist/client/assets/{vitesse-dark-kWOu5V36.js → vitesse-dark-BpF142p_.js} +0 -0
  411. /package/dist/client/assets/{vitesse-light-DMtiL8bK.js → vitesse-light-CMwxPBrg.js} +0 -0
  412. /package/dist/client/assets/{vyper-CNqG09-_.js → vyper-BW5zj9bE.js} +0 -0
  413. /package/dist/client/assets/{wasm-BsQDV7Y0.js → wasm-BigxSLnm.js} +0 -0
  414. /package/dist/client/assets/{wasm-DFVlQlgd.js → wasm-CSccDuAq.js} +0 -0
  415. /package/dist/client/assets/{wenyan-BmOQge13.js → wenyan-BZzM1SQT.js} +0 -0
  416. /package/dist/client/assets/{wgsl-CgWrmvIg.js → wgsl-xBPHbLlq.js} +0 -0
  417. /package/dist/client/assets/{wikitext-DkwckXCk.js → wikitext-BXJWUNJK.js} +0 -0
  418. /package/dist/client/assets/{wit-CtyVFGe7.js → wit-2GnUs67P.js} +0 -0
  419. /package/dist/client/assets/{wolfram-CXE4FrKz.js → wolfram-DIFDmw-g.js} +0 -0
  420. /package/dist/client/assets/{zenscript-DH15wJt0.js → zenscript-DQaUUjbx.js} +0 -0
  421. /package/dist/client/assets/{zig-CqXN9brD.js → zig-BDepRvBi.js} +0 -0
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A local-first code review tool and double-sided bridge designed for the modern AI coding agent workflow. Review AI-generated changes in a high-fidelity, GitHub-like web UI, leave inline comments, and hand them back to your coding agent to fix in real time — and review the agent's **plan** the same way *before* it writes any code, approving, rejecting, or requesting changes on specific lines and sections.
4
4
 
5
- <img width="1840" height="1196" alt="image" src="https://github.com/user-attachments/assets/767d42ed-a497-4b21-aca7-35be8b9a7006" />
5
+ <img width="1667" height="1087" alt="image" src="https://github.com/user-attachments/assets/52dcd2af-fc85-44ba-a679-4609e667c6f4" />
6
6
 
7
7
 
8
8
  ---
@@ -22,6 +22,22 @@ 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
+
35
+ ### 3. Update
36
+ Check if a new version is available on npm and upgrade instantly via the CLI:
37
+ ```bash
38
+ diffing update
39
+ ```
40
+
25
41
  ---
26
42
 
27
43
  ## Web UI Review Dashboard
@@ -33,7 +49,9 @@ A local Hono-powered review server delivers a full-featured GitHub-like code rev
33
49
  - **Interactive File Tree** — Hierarchical file navigation sidebar with collapsible folders, viewed/unviewed tracking, and change-type indicators (added, modified, deleted).
34
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.
35
51
  - **Git Diff Stats** — Toolbar displays repo name, branch, file count, and additions/deletions (`+X/-Y`) computed from the patch.
36
- - **Resizable Panels** — Drag-to-resize sidebar (240px–640px) and comment tracker panel (100px–600px). Widths and heights persist in localStorage.
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`).
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)).
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.
37
55
  - **Skeleton Loading Screen** — Full shimmer placeholder UI for toolbar, sidebar, search, tree nodes, and file diffs during initial load.
38
56
  - **Image Diff Previews** — Visual side-by-side comparison for added, changed, and deleted image files (PNG, JPEG, GIF, WebP, SVG, BMP, ICO, AVIF).
39
57
 
@@ -61,7 +79,8 @@ A local Hono-powered review server delivers a full-featured GitHub-like code rev
61
79
  - **Instant Switching** — CSS transitions suppressed during theme changes for a snappy, lag-free experience.
62
80
  - **Persistent Setting** — Theme choice saved to `~/.config/diffing/settings.json` and restored on next launch.
63
81
 
64
- <img width="1840" height="1196" alt="image" src="https://github.com/user-attachments/assets/d4905604-e156-4c9b-998e-9015a7c36019" />
82
+ <img width="1667" height="1087" alt="image" src="https://github.com/user-attachments/assets/6e4a4552-fef2-4002-8b8f-b544c95c4c26" />
83
+
65
84
 
66
85
 
67
86
  ---
@@ -122,6 +141,61 @@ A vim-style status bar at the bottom displays the current mode (NORMAL/INSERT),
122
141
  <img width="1840" height="1196" alt="image" src="https://github.com/user-attachments/assets/d230d020-4fb2-475a-a8a0-0ae11bb271ff" />
123
142
 
124
143
 
144
+ ---
145
+
146
+ ## Native Terminal UI (TUI) — *Experimental*
147
+
148
+ > [!WARNING]
149
+ > The TUI is **experimental** in v0.3.0. The interface, keymap, and on-disk
150
+ > format of `server.json` (`mode: "tui"`) may change in a minor release
151
+ > before stabilisation. The web UI is the supported path for production
152
+ > workflows; please open an issue before depending on the TUI for CI / agent
153
+ > automation. The web review flow, plan review, and PR review are unaffected.
154
+
155
+ `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"`.
156
+
157
+ 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.
158
+
159
+ ```bash
160
+ diffing --tui # Open the current working tree in the TUI
161
+ diffing --tui --staged # Review staged changes in the TUI
162
+ diffing --tui HEAD~3 # Review working tree vs. 3 commits ago
163
+ diffing --tui main..feature # Compare two branches in the TUI
164
+ diffing --tui -- -- src/ # Limit a TUI review to a directory
165
+ ```
166
+
167
+ **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.
168
+
169
+ **Features**
170
+
171
+ - **Unified diff render** with a virtualised file card, syntect highlighter, and the same 8 Shiki-compatible colour themes as the web UI.
172
+ - **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).
173
+ - **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.
174
+ - **Multi-line `tui-textarea` form** with markdown rendering in the preview pane.
175
+ - **Live updates** via `notify` watcher on `comments.json` and the repo working tree — write a comment in another window and it appears immediately.
176
+ - **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.
177
+ - **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`).
178
+
179
+ **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.
180
+
181
+ **Building the binary locally**
182
+
183
+ ```bash
184
+ pnpm build:tui # debug build → target/debug/diffing-tui
185
+ pnpm build:tui --release # release build → target/release/diffing-tui
186
+ ```
187
+
188
+ 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.
189
+
190
+ ---
191
+
192
+ ## Console Startup Animations & Quotes
193
+
194
+ Every time you launch `diffing` in the terminal, it serves a highly polished, interactive greeting before the browser opens:
195
+ - **256-Color Monochromatic Palettes** — Beautifully rendered box outlines across 6 monochromatic themes (Cyan, Green, Magenta, Yellow, Blue, Orange) with custom faint, base, glow, and text hues.
196
+ - **Dynamic Startup Animations** — Instantly runs one of 6 terminal-based micro-animations (Typewriter, Wave Reveal, Slide-In, Pulse Border, Glitch Noise, Matrix Rain) underneath the local server URL.
197
+ - **Motivational Developer Quotes** — Settles to display one of 30 curated, funny, philosophical, or motivational developer quotes to kick off your review session.
198
+
125
199
  ---
126
200
 
127
201
  ## Performance & Speed
@@ -295,6 +369,82 @@ self-documenting `<plan-review>` envelope:
295
369
  </plan-review>
296
370
  ```
297
371
 
372
+ <img width="1667" height="1087" alt="image" src="https://github.com/user-attachments/assets/00e884b5-4c90-4a9a-9e24-9ae57d80f3f2" />
373
+
374
+ ---
375
+
376
+ ## Reviewing a GitHub PR
377
+
378
+ `diffing` can open a GitHub PR in the same diff UI you use for the working
379
+ tree, and push your review back to GitHub when you're done. The "Send to
380
+ agent" handoff is **structurally absent** in PR mode — there's no way to
381
+ accidentally route a PR review to a coding agent.
382
+
383
+ ```text
384
+ # All of these open PR #1234 in the current repo:
385
+ diffing "gh pr 1234"
386
+ diffing --gh-pr 1234
387
+
388
+ # Full URL form:
389
+ diffing "gh pr https://github.com/ahmedragab20/diffing/pull/1234"
390
+ diffing --gh-pr https://github.com/ahmedragab20/diffing/pull/1234
391
+
392
+ # owner/repo#N shorthand (skips the cwd-repo check):
393
+ diffing "gh pr ahmedragab20/diffing#1234"
394
+ ```
395
+
396
+ The PR diff loads in the existing `<DiffViewer>` / `<FileTree>` machinery.
397
+ Existing review comments on the PR are fetched and shown as a read-only
398
+ summary strip below each file so you can see what was already said before
399
+ adding your own. Comments you write are kept visually distinct.
400
+
401
+ When you click **Submit to GitHub**, `diffing` builds a `POST
402
+ /repos/{owner}/{repo}/pulls/{pull_number}/reviews` payload and POSTs it
403
+ to GitHub. Multi-line comments are expanded to N single-line comments
404
+ with a `[part N/M]` prefix. Existing comments are **never re-POSTed** —
405
+ only the new ones you wrote in this session.
406
+
407
+ ### Headless subcommands
408
+
409
+ For CI / agent use, the same flow is exposed as a `gh` subcommand with no
410
+ UI:
411
+
412
+ ```text
413
+ # Submit the current in-progress review to GitHub.
414
+ diffing gh pr-review 1234 --decision request-changes --body "Please address the range"
415
+
416
+ # Dump PR metadata (title, owner, head SHA, existing comments) as JSON.
417
+ diffing gh pr-fetch 1234
418
+
419
+ # List the PR-mode comments in this diffing session (mirrors `diffing comments`).
420
+ diffing gh pr-list-comments
421
+
422
+ # Show the active PR session (ref, owner/repo#n, comment count, submitted status).
423
+ diffing gh status
424
+ ```
425
+
426
+ ### Authentication
427
+
428
+ The submit path uses the same precedence as the rest of the GitHub
429
+ ecosystem:
430
+
431
+ 1. **`gh` CLI** — preferred; uses your existing `gh auth login` session.
432
+ 2. **Token env var** — `$GH_TOKEN`, then `$GITHUB_TOKEN`, then
433
+ `$GITHUB_API_TOKEN` (any of the three).
434
+ 3. If neither is available, the submit fails with a clear one-line
435
+ message telling you to run `gh auth login` or set `$GITHUB_TOKEN`.
436
+
437
+ The `gh` binary is **only** used for the submit and refresh steps; the
438
+ diff itself is rendered locally, so PR review works offline once the
439
+ session is open.
440
+
441
+ ### Storage
442
+
443
+ PR-mode state lives in `pr-session.json` (in the per-repo
444
+ `~/.diffing/<repo>-<hash>/` directory) — a separate file from
445
+ `comments.json` and `plans.json`, so a local review and a PR review can
446
+ coexist without colliding.
447
+
298
448
  ---
299
449
 
300
450
  ## Inline Comment System
@@ -304,7 +454,7 @@ Rich, real-time comment threads directly on diff lines:
304
454
  - **Inline Threads** — Hover and click the `+` button on any addition or deletion line to start a thread. Supports markdown (GFM + line breaks) with syntax-highlighted fenced code blocks.
305
455
  - **Multi-Line Comments** — Select a line range to comment on an entire block of code.
306
456
  - **File-Level Comments** — Add general comments scoped to the entire file without targeting a specific line.
307
- - **Comment Drafts** — LocalStorage-based draft system (`diffing-draft-*` keys) with 7-day TTL, so drafts survive page refreshes.
457
+ - **Comment Drafts** — Draft system (`diffing-draft-*` keys) with 7-day TTL, stored in the global `.diffing` folder so drafts survive page refreshes without any browser storage footprint.
308
458
  - **Agent Attribution** — Replies carry `role` (`user`/`agent`) and the agent's `model` name for clear attribution.
309
459
  - **Suggestion Application** — Parse `` ```suggestion `` code blocks from comment bodies and apply them to the file in one click via `POST /api/comments/:id/apply-suggestion`.
310
460
  - **Full CRUD API** — REST endpoints for creating, reading, updating, and deleting comments and replies.
@@ -324,12 +474,20 @@ Fine-grained control over how diffs are rendered:
324
474
  | **Hunk Separators** | `simple`, `metadata`, `line-info`, `line-info-basic` | Style of the separator bar between diff hunks |
325
475
  | **Line Hover Highlight** | `both`, `line`, `number`, `disabled` | Which element highlights on hover |
326
476
  | **Font Size** | 11px – 16px | Configure globally |
477
+ | **UI Font** | Any system or Google font (default Geist Mono) | Customize typography for the Web UI layout |
478
+ | **Mono Font** | Any system or Google font (default JetBrains Mono) | Customize typography for code/diff block displays |
327
479
  | **Tab Size** | 2 / 4 / 8 | Default tab width (overridden per-file by EditorConfig) |
328
480
  | **Expandable Context** | `expandContextByDefault`, `collapsedContextThreshold` (default 10 lines), `expansionLineCount` (default 20) | Control how collapsed context regions behave |
329
481
  | **Haptic & Sound Feedback** | on / off | Tactile feedback via `web-haptics` and synthesized audio cues (click, toggle, navigate, open, close, resolve, send, error) |
330
482
 
331
483
  All settings persist to `~/.config/diffing/settings.json` and the UI updates are wrapped in `useTransition` for non-blocking responsiveness.
332
484
 
485
+ #### A note on custom fonts
486
+
487
+ 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.
488
+
489
+ 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.
490
+
333
491
  ---
334
492
 
335
493
  ## Merge Conflict Resolution
@@ -386,6 +544,23 @@ To integrate flawlessly with your existing developer shell workflows, build pipe
386
544
  > [!TIP]
387
545
  > 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).
388
546
 
547
+ ### `diffing show` — Review a Commit's Changes (Drop-in for `git show`)
548
+
549
+ `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.
550
+
551
+ 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:
552
+
553
+ ```bash
554
+ diffing show HEAD # Review the tip commit's metadata + diff
555
+ diffing show HEAD~3..HEAD # Review the last 3 commits as a series
556
+ diffing show v1.0 # The commit a tag points to
557
+ diffing show abc123 def456 # Two specific commits, oldest-first
558
+ diffing show HEAD -- src/ # Limit a commit review to a directory
559
+ diffing show HEAD~2..HEAD --terminal # Stream `git show` to your terminal
560
+ ```
561
+
562
+ `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.
563
+
389
564
  ---
390
565
 
391
566
  ## Integration & Configuration
@@ -478,6 +653,12 @@ For advanced features, internal API endpoints, sequence specifications, and conf
478
653
 
479
654
  ---
480
655
 
656
+ ## Landing Page
657
+
658
+ <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" />
659
+
660
+ ---
661
+
481
662
  👉🏻 The project was intially forked from **wong2/diffx**
482
663
 
483
664
  ## License
@@ -1,4 +1,5 @@
1
- import { c as formatComments, n as readServerLock, o as formatPlanReview, t as isLockAlive } from "./server-lock-CAdqFSfl.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
@@ -434,6 +435,12 @@ async function runSubcommand(name, args) {
434
435
  case "comments": return comments(args);
435
436
  case "url": return url();
436
437
  case "plan": return plan(args);
438
+ case "update":
439
+ const { runUpdateCommand } = await import("./update-check-DAPFCqpF.mjs");
440
+ return runUpdateCommand();
441
+ case "gh":
442
+ const { runGhSubcommand } = await import("./cli-gh-CDGSpndZ.mjs");
443
+ return runGhSubcommand(args);
437
444
  default:
438
445
  console.error(`Unknown subcommand: ${name}`);
439
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 };