diffing 0.4.1 → 0.5.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 (178) hide show
  1. package/README.md +41 -7
  2. package/dist/cli-agent-BatQgghr.mjs +499 -0
  3. package/dist/cli-agent-BwZE05CQ.mjs +499 -0
  4. package/dist/cli-agent-CLvCYpmH.mjs +499 -0
  5. package/dist/cli-agent-CX8Fa1Ph.mjs +499 -0
  6. package/dist/cli-agent-SILzesQP.mjs +513 -0
  7. package/dist/cli-agent-USzLoAit.mjs +499 -0
  8. package/dist/cli-gh-BV5az425.mjs +147 -0
  9. package/dist/cli-gh-Bo6fOHQR.mjs +147 -0
  10. package/dist/cli-gh-D1LoWJl-.mjs +147 -0
  11. package/dist/cli-gh-DROAJlHi.mjs +147 -0
  12. package/dist/cli-gh-DiT8BWwu.mjs +147 -0
  13. package/dist/cli.mjs +97 -3381
  14. package/dist/client/assets/{angular-html-DIKVmS-w.js → angular-html-BENRjrvE.js} +1 -1
  15. package/dist/client/assets/{angular-ts-DK13mfBQ.js → angular-ts-BkliueKG.js} +1 -1
  16. package/dist/client/assets/{apl-NVZUxqwo.js → apl-KTyp4w2D.js} +1 -1
  17. package/dist/client/assets/{arc-kijUuucY.js → arc-C_OSvkyP.js} +1 -1
  18. package/dist/client/assets/{architectureDiagram-3BPJPVTR-Dup-CzBS.js → architectureDiagram-3BPJPVTR-mnE1gNyZ.js} +1 -1
  19. package/dist/client/assets/{astro-RPdCumat.js → astro-yRj4to-g.js} +1 -1
  20. package/dist/client/assets/{blade-_ubz_KMD.js → blade-C9-yC6OZ.js} +1 -1
  21. package/dist/client/assets/{blockDiagram-GPEHLZMM-Cl0-G1MY.js → blockDiagram-GPEHLZMM-CRvSVyKN.js} +1 -1
  22. package/dist/client/assets/{c-IEKcSTtW.js → c-Ct9jvrYE.js} +1 -1
  23. package/dist/client/assets/{c4Diagram-AAUBKEIU-C3T6FV-K.js → c4Diagram-AAUBKEIU-DjKSb2e1.js} +1 -1
  24. package/dist/client/assets/channel-C-4se7DL.js +1 -0
  25. package/dist/client/assets/{chunk-2J33WTMH-B5MFxFjX.js → chunk-2J33WTMH-qCKs_d3h.js} +1 -1
  26. package/dist/client/assets/{chunk-3OPIFGDE-DWxCOZgI.js → chunk-3OPIFGDE-CKlSXswq.js} +1 -1
  27. package/dist/client/assets/{chunk-4BX2VUAB-DWdovlBC.js → chunk-4BX2VUAB-hTW5Y0Nd.js} +1 -1
  28. package/dist/client/assets/{chunk-55IACEB6-CFSaZijP.js → chunk-55IACEB6-s0GqpI90.js} +1 -1
  29. package/dist/client/assets/{chunk-5ZQYHXKU-BH_cLkIj.js → chunk-5ZQYHXKU-udG-lpX4.js} +1 -1
  30. package/dist/client/assets/{chunk-727SXJPM-BbsJC2PT.js → chunk-727SXJPM-DVxTc02y.js} +1 -1
  31. package/dist/client/assets/{chunk-AQP2D5EJ-tFAP6fC1.js → chunk-AQP2D5EJ-B3tUnmo8.js} +1 -1
  32. package/dist/client/assets/{chunk-BSJP7CBP-BGuhsdwy.js → chunk-BSJP7CBP-kRRlTujo.js} +1 -1
  33. package/dist/client/assets/{chunk-CSCIHK7Q-DXSJWhsY.js → chunk-CSCIHK7Q-DCuKIUBq.js} +1 -1
  34. package/dist/client/assets/{chunk-FMBD7UC4-6vBylg_I.js → chunk-FMBD7UC4-ubdx7k5v.js} +1 -1
  35. package/dist/client/assets/{chunk-KSCS5N6A-C7iBFsUg.js → chunk-KSCS5N6A-DQL7OmPt.js} +1 -1
  36. package/dist/client/assets/{chunk-L5ZTLDWV-CRU3nvaK.js → chunk-L5ZTLDWV-CiL1m8Rv.js} +1 -1
  37. package/dist/client/assets/{chunk-LZXEDZCA-6ppA-_4h.js → chunk-LZXEDZCA-CCM9Cjch.js} +2 -2
  38. package/dist/client/assets/{chunk-ND2GUHAM-D1cTmgHe.js → chunk-ND2GUHAM-CwaTnKF0.js} +1 -1
  39. package/dist/client/assets/{chunk-NZK2D7GU-CpUab6v7.js → chunk-NZK2D7GU-B7fSEZrX.js} +1 -1
  40. package/dist/client/assets/{chunk-O5CBEL6O-cDxBycWe.js → chunk-O5CBEL6O-B6YFcOS-.js} +1 -1
  41. package/dist/client/assets/chunk-QZHKN3VN-AyjK8EAt.js +1 -0
  42. package/dist/client/assets/chunk-WU5MYG2G-9-4Xqnl2.js +1 -0
  43. package/dist/client/assets/{chunk-XPW4576I-CI9GEEdy.js → chunk-XPW4576I-CXr3zzSB.js} +1 -1
  44. package/dist/client/assets/classDiagram-4FO5ZUOK-BTJ4Aj_7.js +1 -0
  45. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-D0haGZVz.js +1 -0
  46. package/dist/client/assets/{cobol-BVhbHJgp.js → cobol-DsFmMC48.js} +1 -1
  47. package/dist/client/assets/{coffee-gY6asS_B.js → coffee-C2yB8Qe3.js} +1 -1
  48. package/dist/client/assets/{cose-bilkent-S5V4N54A-BOs7zxZa.js → cose-bilkent-S5V4N54A-GMtsBHu-.js} +1 -1
  49. package/dist/client/assets/{cpp-el3R6exS.js → cpp-BaQo5sKT.js} +1 -1
  50. package/dist/client/assets/{crystal-D2_0btIo.js → crystal-DqA_S2VB.js} +1 -1
  51. package/dist/client/assets/{css-DtPe7dg4.js → css-Dx2FXpZT.js} +1 -1
  52. package/dist/client/assets/{dagre-BM42HDAG-CR_0cBOz.js → dagre-BM42HDAG-BsXOZT1Y.js} +1 -1
  53. package/dist/client/assets/{diagram-2AECGRRQ-D9um0wp2.js → diagram-2AECGRRQ-CR6siaeN.js} +1 -1
  54. package/dist/client/assets/{diagram-5GNKFQAL-Dx0TEfBJ.js → diagram-5GNKFQAL-CDZR1QcC.js} +1 -1
  55. package/dist/client/assets/{diagram-KO2AKTUF-DjBHOuUD.js → diagram-KO2AKTUF-Di30mzpa.js} +1 -1
  56. package/dist/client/assets/{diagram-LMA3HP47-CK2MO5Gx.js → diagram-LMA3HP47-gAYk3RNx.js} +1 -1
  57. package/dist/client/assets/{diagram-OG6HWLK6-CANQancN.js → diagram-OG6HWLK6-CJquOKkB.js} +1 -1
  58. package/dist/client/assets/{dist-DGlwcsQQ.js → dist-Dt4KwfbE.js} +1 -1
  59. package/dist/client/assets/{edge-Ch_PYBsB.js → edge-CQpty0x5.js} +1 -1
  60. package/dist/client/assets/{elixir-DEJrJATq.js → elixir-BcaGdZXN.js} +1 -1
  61. package/dist/client/assets/{elm-Brlko4-d.js → elm-CP76VjNp.js} +1 -1
  62. package/dist/client/assets/{erDiagram-TEJ5UH35-Dnfrs6yk.js → erDiagram-TEJ5UH35-Bn7AKn4C.js} +1 -1
  63. package/dist/client/assets/{erb-DQPphNua.js → erb-5-RC0m2F.js} +1 -1
  64. package/dist/client/assets/{flowDiagram-I6XJVG4X-BNMdFtjG.js → flowDiagram-I6XJVG4X-0xHUbQwP.js} +1 -1
  65. package/dist/client/assets/{ganttDiagram-6RSMTGT7-X-fPXz_A.js → ganttDiagram-6RSMTGT7-DPMd_wXW.js} +1 -1
  66. package/dist/client/assets/{git-rebase-BpS915SI.js → git-rebase-Bqj-6hRc.js} +1 -1
  67. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CRN_dRXM.js → gitGraphDiagram-PVQCEYII-B3-X4FvC.js} +1 -1
  68. package/dist/client/assets/{glimmer-js-DZDngVuD.js → glimmer-js-B9DDu9wr.js} +1 -1
  69. package/dist/client/assets/{glimmer-ts-DKNjJvyp.js → glimmer-ts-C67nh0lS.js} +1 -1
  70. package/dist/client/assets/{glsl-C-Y1tHoU.js → glsl-4_qCLsUA.js} +1 -1
  71. package/dist/client/assets/{graphql-DYVBNazO.js → graphql-BPnYvj3r.js} +1 -1
  72. package/dist/client/assets/{hack-DewKAtLe.js → hack-lddqozaa.js} +1 -1
  73. package/dist/client/assets/{haml-CIA_AeXu.js → haml-ap0ZMUQp.js} +1 -1
  74. package/dist/client/assets/{handlebars-Bade6JXX.js → handlebars-DzkaM9As.js} +1 -1
  75. package/dist/client/assets/{html-C4hhbuGp.js → html-CokHrq1C.js} +1 -1
  76. package/dist/client/assets/{html-derivative-BXfztBtv.js → html-derivative-C_RIVbdg.js} +1 -1
  77. package/dist/client/assets/{http-Cq90-CTl.js → http-Ch6kOrN2.js} +1 -1
  78. package/dist/client/assets/{hurl-DklQHYoa.js → hurl-C10trGis.js} +1 -1
  79. package/dist/client/assets/{index-j9gqGQit.js → index-HMLOzXE5.js} +72 -72
  80. package/dist/client/assets/{index-CMyunQt6.css → index-tBAqyUGu.css} +1 -1
  81. package/dist/client/assets/{infoDiagram-5YYISTIA-Ht-AcvP4.js → infoDiagram-5YYISTIA-CrNF878y.js} +1 -1
  82. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-k_l70iFb.js → ishikawaDiagram-YF4QCWOH-KGxvlsNl.js} +1 -1
  83. package/dist/client/assets/{java-BMUwLm1h.js → java-CRDLxWFu.js} +1 -1
  84. package/dist/client/assets/{javascript-B8nPCUVp.js → javascript-BJrijFXZ.js} +1 -1
  85. package/dist/client/assets/{jinja-CkxiRcB3.js → jinja-Dq3vAj4T.js} +1 -1
  86. package/dist/client/assets/{jison-CFnN5uQs.js → jison-PSOWkXj1.js} +1 -1
  87. package/dist/client/assets/{journeyDiagram-JHISSGLW-C98PUC9Y.js → journeyDiagram-JHISSGLW-CtS0cOcB.js} +1 -1
  88. package/dist/client/assets/{json-B7HNnjIx.js → json-Ue4paT4d.js} +1 -1
  89. package/dist/client/assets/{jsx-BfVPuW3i.js → jsx-D60Fd_vz.js} +1 -1
  90. package/dist/client/assets/{julia-Bj0ETGjT.js → julia-7UqDDEkb.js} +1 -1
  91. package/dist/client/assets/{just-CqIe_c9k.js → just-2Nqw-G9g.js} +1 -1
  92. package/dist/client/assets/{kanban-definition-UN3LZRKU-BE-uvH7w.js → kanban-definition-UN3LZRKU-iXUnaPci.js} +1 -1
  93. package/dist/client/assets/{latex-Cvy8E64e.js → latex-CAORCICD.js} +1 -1
  94. package/dist/client/assets/{line-BpooNUgm.js → line-BvDfaxy7.js} +1 -1
  95. package/dist/client/assets/{linear-CM6ZoyCp.js → linear-BPNP_vs-.js} +1 -1
  96. package/dist/client/assets/{liquid-x09l8QqE.js → liquid-B1dMHpLg.js} +1 -1
  97. package/dist/client/assets/{lua-BSlDLjt5.js → lua-CVg9faio.js} +1 -1
  98. package/dist/client/assets/{marko-CoNMQlTn.js → marko-CIj0-gvZ.js} +1 -1
  99. package/dist/client/assets/{mdc-BSzVESPu.js → mdc-Dcm42qXg.js} +1 -1
  100. package/dist/client/assets/{mermaid-parser.core-BDXJMxHu.js → mermaid-parser.core-akPZ8Xt7.js} +1 -1
  101. package/dist/client/assets/{mermaid.core-Dw-_vXTc.js → mermaid.core-DTef5PVY.js} +3 -3
  102. package/dist/client/assets/{mindmap-definition-RKZ34NQL-BTxGT8rM.js → mindmap-definition-RKZ34NQL-jM52CcWE.js} +1 -1
  103. package/dist/client/assets/{nginx-CBhJTj0i.js → nginx-zzgwPZum.js} +1 -1
  104. package/dist/client/assets/{nim-CtHbOBlO.js → nim-Au_jXrfv.js} +1 -1
  105. package/dist/client/assets/{perl-DLMzG3tu.js → perl-CAllCqkR.js} +1 -1
  106. package/dist/client/assets/{php-KomVR3Hz.js → php-CgM1w-IE.js} +1 -1
  107. package/dist/client/assets/{pieDiagram-4H26LBE5-BBUObAJW.js → pieDiagram-4H26LBE5-BdI8P976.js} +1 -1
  108. package/dist/client/assets/{pug-T4SRLx8P.js → pug-uy7R6gmf.js} +1 -1
  109. package/dist/client/assets/{qml-DJdSRUmU.js → qml-XvGkfj7l.js} +1 -1
  110. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-B7vvauZv.js → quadrantDiagram-W4KKPZXB-CTUrE6VT.js} +1 -1
  111. package/dist/client/assets/{r-CwuTg9lK.js → r-DFRLw0D7.js} +1 -1
  112. package/dist/client/assets/{razor-Ch4dgsGY.js → razor-e63ackHA.js} +1 -1
  113. package/dist/client/assets/{regexp-D2GTwJE0.js → regexp-BmysD-wZ.js} +1 -1
  114. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DpcNiR3Y.js → requirementDiagram-4Y6WPE33-oNojoZNX.js} +1 -1
  115. package/dist/client/assets/{rst-D78f0DyR.js → rst-BdbFuh_U.js} +1 -1
  116. package/dist/client/assets/{ruby-BUcw6ITs.js → ruby-CSdAL4us.js} +1 -1
  117. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-ChzSQD2O.js → sankeyDiagram-5OEKKPKP-Dj7lZz55.js} +1 -1
  118. package/dist/client/assets/{sas-DoT2JDsj.js → sas-JtqALwix.js} +1 -1
  119. package/dist/client/assets/{scss-B6G_d-6b.js → scss-BKQrDG10.js} +1 -1
  120. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CzkdL8s7.js → sequenceDiagram-3UESZ5HK-BNpcmJ78.js} +1 -1
  121. package/dist/client/assets/{shellscript-DI252Bga.js → shellscript-jk-NKrK3.js} +1 -1
  122. package/dist/client/assets/{shellsession-BuO_s8FQ.js → shellsession-C_OxJCjJ.js} +1 -1
  123. package/dist/client/assets/{soy-DZTZJTEE.js → soy-6C-zhFL7.js} +1 -1
  124. package/dist/client/assets/{sql-C4isoJr_.js → sql-N-x_YojG.js} +1 -1
  125. package/dist/client/assets/{src-BMvz5HE8.js → src-i7-w__4l.js} +1 -1
  126. package/dist/client/assets/{stata-Dhu6qITh.js → stata-Dkub6QBh.js} +1 -1
  127. package/dist/client/assets/{stateDiagram-AJRCARHV-DvYcrdap.js → stateDiagram-AJRCARHV-D30q2ZVZ.js} +1 -1
  128. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CyrdNaut.js +1 -0
  129. package/dist/client/assets/{surrealql-CSDpq5j3.js → surrealql-2pOLFG_P.js} +1 -1
  130. package/dist/client/assets/{svelte-C4ITAvxr.js → svelte-CuvADzyi.js} +1 -1
  131. package/dist/client/assets/{templ-BTgKA9-7.js → templ-DtOxTonk.js} +1 -1
  132. package/dist/client/assets/{tex-Dg4N9ndP.js → tex-BwPRGOZW.js} +1 -1
  133. package/dist/client/assets/{timeline-definition-PNZ67QCA-Djt5Lwk2.js → timeline-definition-PNZ67QCA-7FTcWUjq.js} +1 -1
  134. package/dist/client/assets/{ts-tags-BufYnYos.js → ts-tags-Cn_Y5EDf.js} +1 -1
  135. package/dist/client/assets/{tsx-DmkFP0sw.js → tsx-RC8FAazO.js} +1 -1
  136. package/dist/client/assets/{twig-BJv_IWYK.js → twig-DtQFIjP0.js} +1 -1
  137. package/dist/client/assets/{typescript-BKp05Qme.js → typescript-DX6qUod4.js} +1 -1
  138. package/dist/client/assets/{vennDiagram-CIIHVFJN-DDVADTIa.js → vennDiagram-CIIHVFJN-B4eT2YKy.js} +1 -1
  139. package/dist/client/assets/{vue-BsHXCXzh.js → vue-D8H1bCQ7.js} +1 -1
  140. package/dist/client/assets/{vue-html-CCsH-lmo.js → vue-html-B0YmCSWB.js} +1 -1
  141. package/dist/client/assets/{vue-vine-B5P1JXxo.js → vue-vine-Buj2gfKi.js} +1 -1
  142. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-yeVKWvtX.js → wardleyDiagram-YWT4CUSO-_PA_cSF5.js} +1 -1
  143. package/dist/client/assets/{xml-CFkhYff0.js → xml-KzFmzaXc.js} +1 -1
  144. package/dist/client/assets/{xsl-Dc5XRzm6.js → xsl-x0R4ZCXO.js} +1 -1
  145. package/dist/client/assets/{xychartDiagram-2RQKCTM6--8Ik-9v0.js → xychartDiagram-2RQKCTM6-g1emmBmb.js} +1 -1
  146. package/dist/client/assets/{yaml-BTCCxCxi.js → yaml-BCE-GuGS.js} +1 -1
  147. package/dist/client/index.html +2 -2
  148. package/dist/mcp-BMTZLQuB.mjs +758 -0
  149. package/dist/mcp-BUF2nEL7.mjs +1036 -0
  150. package/dist/mcp-Bpx76OGU.mjs +945 -0
  151. package/dist/mcp-C1T7LI0H.mjs +1036 -0
  152. package/dist/mcp-C4Bjmf9m.mjs +1047 -0
  153. package/dist/mcp-CFxcdEcJ.mjs +733 -0
  154. package/dist/mcp-CwjThGi2.mjs +913 -0
  155. package/dist/mcp-D4OsB9lt.mjs +1047 -0
  156. package/dist/mcp-DJ2batvt.mjs +913 -0
  157. package/dist/mcp-Ds_lPX_o.mjs +913 -0
  158. package/dist/plan-format-B6nbAw_c.mjs +132 -0
  159. package/dist/server-95UE5bgh.mjs +3367 -0
  160. package/dist/server-B0cS95Lf.mjs +3488 -0
  161. package/dist/server-Bj-6KlK5.mjs +3367 -0
  162. package/dist/server-Bpf84Il0.mjs +3367 -0
  163. package/dist/server-CYSpLbdA.mjs +3360 -0
  164. package/dist/server-Dov7jbV3.mjs +3367 -0
  165. package/dist/server-eQ2E4Axo.mjs +3367 -0
  166. package/dist/server-lock-C_wPtEsH.mjs +909 -0
  167. package/dist/server-lock-Cbu3qHdu.mjs +924 -0
  168. package/dist/server-lock-D32inEn9.mjs +924 -0
  169. package/dist/server-lock-Ddcat0HF.mjs +851 -0
  170. package/dist/server-lock-Ujbcgq28.mjs +954 -0
  171. package/dist/update-check-CXeSZANo.mjs +129 -0
  172. package/package.json +3 -2
  173. package/dist/client/assets/channel-CpWSvbvQ.js +0 -1
  174. package/dist/client/assets/chunk-QZHKN3VN-HhMIifwl.js +0 -1
  175. package/dist/client/assets/chunk-WU5MYG2G-CvIzXEms.js +0 -1
  176. package/dist/client/assets/classDiagram-4FO5ZUOK-DFu-dNVy.js +0 -1
  177. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-D7Xcgo6q.js +0 -1
  178. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-D5igY81I.js +0 -1
@@ -0,0 +1,129 @@
1
+ import { spawn } from "node:child_process";
2
+ import { fileURLToPath } from "node:url";
3
+ import { dirname, resolve } from "node:path";
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ //#region src/lib/update-check.ts
6
+ /**
7
+ * Strips ANSI escape sequences from a string to compute its visible/display length.
8
+ */
9
+ function stripAnsi(str) {
10
+ return str.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, "");
11
+ }
12
+ /**
13
+ * Compare two semver version strings to see if the latest version is newer.
14
+ */
15
+ function isNewerVersion(current, latest) {
16
+ const clean = (v) => v.replace(/^v/, "");
17
+ const cParts = clean(current).split(".").map(Number);
18
+ const lParts = clean(latest).split(".").map(Number);
19
+ for (let i = 0; i < 3; i++) {
20
+ const cVal = cParts[i] ?? 0;
21
+ const lVal = lParts[i] ?? 0;
22
+ if (Number.isNaN(cVal) || Number.isNaN(lVal)) continue;
23
+ if (lVal > cVal) return true;
24
+ if (lVal < cVal) return false;
25
+ }
26
+ return false;
27
+ }
28
+ /**
29
+ * Queries the npm registry asynchronously with a 1-second timeout.
30
+ */
31
+ async function checkForUpdates(currentVersion) {
32
+ try {
33
+ const controller = new AbortController();
34
+ const id = setTimeout(() => controller.abort(), 1e3);
35
+ const res = await fetch("https://registry.npmjs.org/diffing/latest", { signal: controller.signal });
36
+ clearTimeout(id);
37
+ if (!res.ok) return null;
38
+ const data = await res.json();
39
+ if (!data.version) return null;
40
+ return {
41
+ hasUpdate: isNewerVersion(currentVersion, data.version),
42
+ latestVersion: data.version
43
+ };
44
+ } catch {
45
+ return null;
46
+ }
47
+ }
48
+ /**
49
+ * Prints a beautifully styled console box letting the user know a new version is available.
50
+ */
51
+ function printUpdateDisclaimer(current, latest) {
52
+ const borderCol = "\x1B[38;5;220m";
53
+ const bold = "\x1B[1m";
54
+ const reset = "\x1B[0m";
55
+ const boxWidth = 66;
56
+ const top = borderCol + "╭" + "─".repeat(boxWidth) + "╮\x1B[0m";
57
+ const bottom = borderCol + "╰" + "─".repeat(boxWidth) + "╯\x1B[0m";
58
+ const side = borderCol + "│\x1B[0m";
59
+ const l1 = `🚀 ${bold}Update available!${reset} v${current} → \x1b[38;5;82mv${latest}${reset}`;
60
+ const l2 = `Run ${bold}diffing update${reset} to easily upgrade to the latest version.`;
61
+ const printRow = (content) => {
62
+ const displayLength = stripAnsi(content).length + (content.includes("🚀") ? 1 : 0);
63
+ const totalPadding = boxWidth - 4 - displayLength;
64
+ const pad = " ".repeat(Math.max(0, totalPadding));
65
+ console.log(`${side} ${content}${pad} ${side}`);
66
+ };
67
+ console.log();
68
+ console.log(top);
69
+ printRow("");
70
+ printRow(l1);
71
+ printRow(l2);
72
+ printRow("");
73
+ console.log(bottom);
74
+ console.log();
75
+ }
76
+ /**
77
+ * Executes the update command process.
78
+ */
79
+ async function runUpdateCommand() {
80
+ const __dirname = dirname(fileURLToPath(import.meta.url));
81
+ const pkgPath = existsSync(resolve(__dirname, "..", "package.json")) ? resolve(__dirname, "..", "package.json") : resolve(__dirname, "..", "..", "package.json");
82
+ const currentVersion = JSON.parse(readFileSync(pkgPath, "utf-8")).version;
83
+ console.log("Checking for updates...");
84
+ const updateInfo = await checkForUpdates(currentVersion);
85
+ if (!updateInfo || !updateInfo.hasUpdate) {
86
+ console.log(`\x1b[38;5;82mYou are already on the latest version of diffing (v${currentVersion})!\x1b[0m`);
87
+ return 0;
88
+ }
89
+ const latest = updateInfo.latestVersion;
90
+ console.log(`\n\x1b[38;5;75mUpdating diffing: v${currentVersion} → v${latest}...\x1b[0m\n`);
91
+ let cmd = "npm";
92
+ let args = [
93
+ "install",
94
+ "-g",
95
+ "diffing@latest"
96
+ ];
97
+ try {
98
+ const { execSync } = await import("node:child_process");
99
+ execSync("pnpm --version", { stdio: "ignore" });
100
+ cmd = "pnpm";
101
+ args = [
102
+ "add",
103
+ "-g",
104
+ "diffing@latest"
105
+ ];
106
+ } catch {}
107
+ console.log(`Running: ${cmd} ${args.join(" ")}\n`);
108
+ const exitCode = await new Promise((res) => {
109
+ const child = spawn(cmd, args, {
110
+ stdio: "inherit",
111
+ shell: true
112
+ });
113
+ child.on("close", (code) => {
114
+ res(code ?? 0);
115
+ });
116
+ child.on("error", (err) => {
117
+ console.error(`Failed to start update process: ${err.message}`);
118
+ res(1);
119
+ });
120
+ });
121
+ if (exitCode === 0) console.log(`\n\x1b[38;5;82mSuccessfully updated diffing to v${latest}!\x1b[0m\n`);
122
+ else {
123
+ console.error(`\n\x1b[38;5;196mFailed to update diffing. Please try running the command manually with sudo if required:\x1b[0m`);
124
+ console.error(` sudo ${cmd} ${args.join(" ")}\n`);
125
+ }
126
+ return exitCode;
127
+ }
128
+ //#endregion
129
+ export { checkForUpdates, printUpdateDisclaimer, runUpdateCommand };
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "diffing",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "local-first CLI for reviewing, navigating, and discussing git diffs with AI",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
- "packageManager": "pnpm@10.32.1",
7
+ "packageManager": "pnpm@11.6.0",
8
8
  "homepage": "https://github.com/ahmedragab20/diffing",
9
9
  "repository": {
10
10
  "type": "git",
@@ -71,6 +71,7 @@
71
71
  "@pierre/diffs": "^1.1.11",
72
72
  "@testing-library/jest-dom": "^6.9.1",
73
73
  "@testing-library/react": "^16.3.2",
74
+ "@testing-library/user-event": "^14.6.1",
74
75
  "@types/node": "^25.5.2",
75
76
  "@types/react": "^19.1.2",
76
77
  "@types/react-dom": "^19.1.2",
@@ -1 +0,0 @@
1
- import{at as e,ot as t}from"./chunk-CSCIHK7Q-DXSJWhsY.js";var n=(n,r)=>t.lang.round(e.parse(n)[r]);export{n as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-BMvz5HE8.js";var t=class{constructor(e){this.init=e,this.records=this.init()}static{e(this,`ImperativeState`)}reset(){this.records=this.init()}};export{t};
@@ -1 +0,0 @@
1
- import{h as e,p as t}from"./src-BMvz5HE8.js";import{x as n}from"./chunk-CSCIHK7Q-DXSJWhsY.js";var r=e(e=>{let{securityLevel:r}=n(),i=t(`body`);return r===`sandbox`&&(i=t((t(`#i${e}`).node()?.contentDocument??document).body)),i.select(`#${e}`)},`selectSvgElement`);export{r as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-BMvz5HE8.js";import"./chunk-CSCIHK7Q-DXSJWhsY.js";import"./chunk-5ZQYHXKU-BH_cLkIj.js";import"./chunk-O5CBEL6O-cDxBycWe.js";import"./chunk-FMBD7UC4-6vBylg_I.js";import"./chunk-BSJP7CBP-BGuhsdwy.js";import"./chunk-L5ZTLDWV-CRU3nvaK.js";import"./chunk-ND2GUHAM-D1cTmgHe.js";import"./chunk-55IACEB6-CFSaZijP.js";import"./chunk-2J33WTMH-B5MFxFjX.js";import"./chunk-NZK2D7GU-CpUab6v7.js";import"./chunk-3OPIFGDE-DWxCOZgI.js";import"./chunk-KSCS5N6A-C7iBFsUg.js";import"./chunk-LZXEDZCA-6ppA-_4h.js";import{i as t,n,r,t as i}from"./chunk-727SXJPM-BbsJC2PT.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-BMvz5HE8.js";import"./chunk-CSCIHK7Q-DXSJWhsY.js";import"./chunk-5ZQYHXKU-BH_cLkIj.js";import"./chunk-O5CBEL6O-cDxBycWe.js";import"./chunk-FMBD7UC4-6vBylg_I.js";import"./chunk-BSJP7CBP-BGuhsdwy.js";import"./chunk-L5ZTLDWV-CRU3nvaK.js";import"./chunk-ND2GUHAM-D1cTmgHe.js";import"./chunk-55IACEB6-CFSaZijP.js";import"./chunk-2J33WTMH-B5MFxFjX.js";import"./chunk-NZK2D7GU-CpUab6v7.js";import"./chunk-3OPIFGDE-DWxCOZgI.js";import"./chunk-KSCS5N6A-C7iBFsUg.js";import"./chunk-LZXEDZCA-6ppA-_4h.js";import{i as t,n,r,t as i}from"./chunk-727SXJPM-BbsJC2PT.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-BMvz5HE8.js";import"./chunk-CSCIHK7Q-DXSJWhsY.js";import"./chunk-5ZQYHXKU-BH_cLkIj.js";import"./chunk-O5CBEL6O-cDxBycWe.js";import"./chunk-BSJP7CBP-BGuhsdwy.js";import"./chunk-L5ZTLDWV-CRU3nvaK.js";import"./chunk-55IACEB6-CFSaZijP.js";import"./chunk-2J33WTMH-B5MFxFjX.js";import"./chunk-NZK2D7GU-CpUab6v7.js";import"./chunk-3OPIFGDE-DWxCOZgI.js";import"./chunk-KSCS5N6A-C7iBFsUg.js";import"./chunk-LZXEDZCA-6ppA-_4h.js";import{i as t,n,r,t as i}from"./chunk-AQP2D5EJ-tFAP6fC1.js";var a={parser:n,get db(){return new i(2)},renderer:r,styles:t,init:e(e=>{e.state||={},e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};