onbuzz 4.7.0 → 4.7.1

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 (952) hide show
  1. package/package.json +1 -1
  2. package/scripts/debug-balance-probe.mjs +35 -0
  3. package/src/__tests__/autoUpdateConfig.test.js +48 -12
  4. package/src/core/__tests__/messageProcessor.sourceHeader.test.js +7 -2
  5. package/src/index.js +16 -0
  6. package/src/interfaces/__tests__/accountRoutes.test.js +60 -2
  7. package/src/interfaces/accountRoutes.js +155 -7
  8. package/src/interfaces/webServer.js +41 -5
  9. package/src/services/__tests__/channelRelay.integration.test.js +49 -12
  10. package/src/services/__tests__/messageSource.test.js +6 -2
  11. package/src/services/__tests__/telegramBlockParser.test.js +183 -0
  12. package/src/services/__tests__/telegramService.test.js +838 -0
  13. package/src/services/messageSource.js +11 -11
  14. package/src/services/telegramBlockParser.js +145 -0
  15. package/src/services/telegramService.js +1273 -431
  16. package/web-ui/build/index.html +2 -2
  17. package/web-ui/build/static/1c-CuE_dLW8.js +1 -0
  18. package/web-ui/build/static/abap-LOu14tBm.js +1 -0
  19. package/web-ui/build/static/abnf-CJpfHQLV.js +1 -0
  20. package/web-ui/build/static/abnf-LdAi7OAY.js +1 -0
  21. package/web-ui/build/static/accesslog-BvrhdZIJ.js +1 -0
  22. package/web-ui/build/static/actionscript-B3NHp9II.js +1 -0
  23. package/web-ui/build/static/actionscript-DVfqv5DS.js +1 -0
  24. package/web-ui/build/static/ada-BVkvHgSu.js +1 -0
  25. package/web-ui/build/static/ada-d33rlRPC.js +1 -0
  26. package/web-ui/build/static/agda-t1mot-jT.js +1 -0
  27. package/web-ui/build/static/al-D2Aw8sYi.js +1 -0
  28. package/web-ui/build/static/angelscript-DGjq6ZLh.js +1 -0
  29. package/web-ui/build/static/antlr4-DQWExQhj.js +1 -0
  30. package/web-ui/build/static/apache-CRX2mGHA.js +1 -0
  31. package/web-ui/build/static/apacheconf-BBhhyVVR.js +1 -0
  32. package/web-ui/build/static/apex-DIJyAF3g.js +1 -0
  33. package/web-ui/build/static/apl-COGQUhmX.js +1 -0
  34. package/web-ui/build/static/applescript-DLPa_bvL.js +1 -0
  35. package/web-ui/build/static/applescript-iEepawXM.js +1 -0
  36. package/web-ui/build/static/aql-vDYotUbW.js +1 -0
  37. package/web-ui/build/static/arcade-5bpnh2Oi.js +1 -0
  38. package/web-ui/build/static/arduino-4OxI8HS8.js +1 -0
  39. package/web-ui/build/static/arduino-zJUNF7Xl.js +1 -0
  40. package/web-ui/build/static/arff-DHcdYO6-.js +1 -0
  41. package/web-ui/build/static/armasm-DVyTHmiD.js +1 -0
  42. package/web-ui/build/static/asciidoc-BRYIR6BF.js +1 -0
  43. package/web-ui/build/static/asciidoc-bd_scw1t.js +1 -0
  44. package/web-ui/build/static/asm6502-DfRcm1MU.js +1 -0
  45. package/web-ui/build/static/asmatmel--fvKJXxu.js +1 -0
  46. package/web-ui/build/static/aspectj-Cnm2Ccyg.js +1 -0
  47. package/web-ui/build/static/aspnet-BK2pQltF.js +1 -0
  48. package/web-ui/build/static/autohotkey-COkKlASn.js +1 -0
  49. package/web-ui/build/static/autohotkey-DNYipPv0.js +1 -0
  50. package/web-ui/build/static/autoit-DiwhqkEo.js +1 -0
  51. package/web-ui/build/static/autoit-DkQ_YDdk.js +1 -0
  52. package/web-ui/build/static/avisynth-DFrkQWrl.js +1 -0
  53. package/web-ui/build/static/avrasm-BbFtsKVm.js +1 -0
  54. package/web-ui/build/static/avro-idl-06_wFrxE.js +1 -0
  55. package/web-ui/build/static/awk-BNO1Hu3Y.js +1 -0
  56. package/web-ui/build/static/axapta-CW0rBEQf.js +1 -0
  57. package/web-ui/build/static/bash-DAP5H41u.js +1 -0
  58. package/web-ui/build/static/bash-DsCT4fHh.js +1 -0
  59. package/web-ui/build/static/basic-DqCcX17x.js +1 -0
  60. package/web-ui/build/static/basic-J3jqGQaz.js +1 -0
  61. package/web-ui/build/static/batch-BzKb0QuF.js +1 -0
  62. package/web-ui/build/static/bbcode-Cxys0qL9.js +1 -0
  63. package/web-ui/build/static/bicep-DPpVhf9I.js +1 -0
  64. package/web-ui/build/static/birb-BDF00uY2.js +1 -0
  65. package/web-ui/build/static/bison-DerSCeTc.js +1 -0
  66. package/web-ui/build/static/bnf--Nxb91Mj.js +1 -0
  67. package/web-ui/build/static/bnf-DKp1OqQh.js +1 -0
  68. package/web-ui/build/static/brainfuck-BgKburBi.js +1 -0
  69. package/web-ui/build/static/brainfuck-CLRabJhl.js +1 -0
  70. package/web-ui/build/static/brightscript-DJ0LrgUU.js +1 -0
  71. package/web-ui/build/static/bro-FVn3137a.js +1 -0
  72. package/web-ui/build/static/bsl-DGcfC5Qq.js +1 -0
  73. package/web-ui/build/static/c-CtBaJxj_.js +1 -0
  74. package/web-ui/build/static/c-DcJBPsOs.js +1 -0
  75. package/web-ui/build/static/c-like-BMAPMOT0.js +1 -0
  76. package/web-ui/build/static/cal-Dwvf5LQJ.js +1 -0
  77. package/web-ui/build/static/capnproto-Be5xeQu8.js +1 -0
  78. package/web-ui/build/static/ceylon-BV9kQegc.js +1 -0
  79. package/web-ui/build/static/cfscript-DqyqkqRV.js +1 -0
  80. package/web-ui/build/static/chaiscript-ab8S5sGz.js +1 -0
  81. package/web-ui/build/static/cil-DU5bEU16.js +1 -0
  82. package/web-ui/build/static/clean-CqKiC4l-.js +1 -0
  83. package/web-ui/build/static/clojure-CdaWManm.js +1 -0
  84. package/web-ui/build/static/clojure-cVIUydqy.js +1 -0
  85. package/web-ui/build/static/clojure-repl-mc7sqsOd.js +1 -0
  86. package/web-ui/build/static/cmake-D2ntzyPv.js +1 -0
  87. package/web-ui/build/static/cmake-Dt7gdCZl.js +1 -0
  88. package/web-ui/build/static/cobol-BYMIYxJY.js +1 -0
  89. package/web-ui/build/static/coffeescript-COUOYE5O.js +1 -0
  90. package/web-ui/build/static/coffeescript-FDyQzH4X.js +1 -0
  91. package/web-ui/build/static/concurnas-D8GglsJx.js +1 -0
  92. package/web-ui/build/static/coq-BvEL_B0N.js +1 -0
  93. package/web-ui/build/static/coq-C6NZeAuz.js +1 -0
  94. package/web-ui/build/static/cos-CjjeNVfD.js +1 -0
  95. package/web-ui/build/static/cpp-BdQQ9k01.js +1 -0
  96. package/web-ui/build/static/cpp-iYGopslr.js +1 -0
  97. package/web-ui/build/static/crmsh-COhOWlQB.js +1 -0
  98. package/web-ui/build/static/crystal-DqVfuZe7.js +1 -0
  99. package/web-ui/build/static/crystal-fkI7WHLA.js +1 -0
  100. package/web-ui/build/static/csharp-BKyMR69a.js +1 -0
  101. package/web-ui/build/static/csharp-KJwk5tFh.js +1 -0
  102. package/web-ui/build/static/cshtml-D-0Bd5yF.js +1 -0
  103. package/web-ui/build/static/csp-C6xrFQUZ.js +1 -0
  104. package/web-ui/build/static/csp-CKOZZjS5.js +1 -0
  105. package/web-ui/build/static/css-DhttYfIQ.js +1 -0
  106. package/web-ui/build/static/css-extras-Cwksdn14.js +1 -0
  107. package/web-ui/build/static/csv-3xOycrIm.js +1 -0
  108. package/web-ui/build/static/cypher-DIQ_IXvU.js +1 -0
  109. package/web-ui/build/static/d-CA3ONaPZ.js +1 -0
  110. package/web-ui/build/static/d-Cpj6yr1P.js +1 -0
  111. package/web-ui/build/static/dart-CStXueOh.js +1 -0
  112. package/web-ui/build/static/dart-DyyN2hCZ.js +1 -0
  113. package/web-ui/build/static/dataweave-C1Z1lf_p.js +1 -0
  114. package/web-ui/build/static/dax-Bra_xxin.js +1 -0
  115. package/web-ui/build/static/delphi-BSp32sTR.js +1 -0
  116. package/web-ui/build/static/dhall-DqULvWhD.js +1 -0
  117. package/web-ui/build/static/diff-DZWp0eai.js +1 -0
  118. package/web-ui/build/static/diff-Dl7Q9ZLJ.js +1 -0
  119. package/web-ui/build/static/django-BKb-9srn.js +1 -0
  120. package/web-ui/build/static/django-D4ZBsr7A.js +1 -0
  121. package/web-ui/build/static/dns-BIl1lqfE.js +1 -0
  122. package/web-ui/build/static/dns-zone-file-BHOpqtwv.js +1 -0
  123. package/web-ui/build/static/docker-DhYlo5KM.js +1 -0
  124. package/web-ui/build/static/dockerfile-DkKcxplU.js +1 -0
  125. package/web-ui/build/static/dos-BL8RAxlP.js +1 -0
  126. package/web-ui/build/static/dot-BLokvOTb.js +1 -0
  127. package/web-ui/build/static/dsconfig-C-HwSveF.js +1 -0
  128. package/web-ui/build/static/dts-D7N7kY9U.js +1 -0
  129. package/web-ui/build/static/dust-BDDbpTgO.js +1 -0
  130. package/web-ui/build/static/ebnf-BXq1reNT.js +1 -0
  131. package/web-ui/build/static/ebnf-DbPDw4Bq.js +1 -0
  132. package/web-ui/build/static/editorconfig-w2ZfPGuw.js +1 -0
  133. package/web-ui/build/static/eiffel-c2MQNBkW.js +1 -0
  134. package/web-ui/build/static/ejs-3QktTSvM.js +1 -0
  135. package/web-ui/build/static/elixir-BpckBbUo.js +1 -0
  136. package/web-ui/build/static/elixir-CdGx--Zx.js +1 -0
  137. package/web-ui/build/static/elm-BZQYORvs.js +1 -0
  138. package/web-ui/build/static/elm-CuB52FFf.js +1 -0
  139. package/web-ui/build/static/erb-BBShdpRp.js +1 -0
  140. package/web-ui/build/static/erb-C6oyD8uR.js +1 -0
  141. package/web-ui/build/static/erlang-CTR2NiVN.js +1 -0
  142. package/web-ui/build/static/erlang-Gyvyd8Bt.js +1 -0
  143. package/web-ui/build/static/erlang-repl-DQ9M2hTB.js +1 -0
  144. package/web-ui/build/static/etlua-WvCpEBL7.js +1 -0
  145. package/web-ui/build/static/excel-Cti8qyDh.js +1 -0
  146. package/web-ui/build/static/excel-formula-CbyjGhLT.js +1 -0
  147. package/web-ui/build/static/factor-DsS7xUlQ.js +1 -0
  148. package/web-ui/build/static/false-By7DT7NY.js +1 -0
  149. package/web-ui/build/static/firestore-security-rules-D818j5mX.js +1 -0
  150. package/web-ui/build/static/fix-Z9CNHO5B.js +1 -0
  151. package/web-ui/build/static/flix-CQ5tU7oG.js +1 -0
  152. package/web-ui/build/static/flow-TAcj5V8G.js +1 -0
  153. package/web-ui/build/static/fortran-CSo4-IB9.js +1 -0
  154. package/web-ui/build/static/fortran-D8ckpcuk.js +1 -0
  155. package/web-ui/build/static/fsharp-CX5IhzHG.js +1 -0
  156. package/web-ui/build/static/fsharp-CjgdWVzI.js +1 -0
  157. package/web-ui/build/static/ftl-BniZfpaP.js +1 -0
  158. package/web-ui/build/static/gams-Dx_Ej7b0.js +1 -0
  159. package/web-ui/build/static/gap-BW8rQPKU.js +1 -0
  160. package/web-ui/build/static/gauss-DP_j2AoM.js +1 -0
  161. package/web-ui/build/static/gcode-C_p0RHK2.js +1 -0
  162. package/web-ui/build/static/gcode-CvPzqlIr.js +1 -0
  163. package/web-ui/build/static/gdscript-BQxanI3X.js +1 -0
  164. package/web-ui/build/static/gedcom-DX22sB95.js +1 -0
  165. package/web-ui/build/static/gherkin-BuM2TN92.js +1 -0
  166. package/web-ui/build/static/gherkin-SyKtGAnl.js +1 -0
  167. package/web-ui/build/static/git-CZsBJbLj.js +1 -0
  168. package/web-ui/build/static/glsl-0gMMTGpT.js +1 -0
  169. package/web-ui/build/static/glsl-DdxyDP7O.js +1 -0
  170. package/web-ui/build/static/gml-Bmf5f_3a.js +1 -0
  171. package/web-ui/build/static/gml-DygwvUqd.js +1 -0
  172. package/web-ui/build/static/gn-CmJ9lVHR.js +1 -0
  173. package/web-ui/build/static/go-DcXIw3ql.js +1 -0
  174. package/web-ui/build/static/go-Dp-1fwju.js +1 -0
  175. package/web-ui/build/static/go-module-CVe5dTg-.js +1 -0
  176. package/web-ui/build/static/golo-Dqz3BdPW.js +1 -0
  177. package/web-ui/build/static/gradle-PY8Q_ptd.js +1 -0
  178. package/web-ui/build/static/graphql-7ynBfuuQ.js +1 -0
  179. package/web-ui/build/static/groovy-CKe3t1A3.js +1 -0
  180. package/web-ui/build/static/groovy-DK_6c_Dy.js +1 -0
  181. package/web-ui/build/static/haml-BjjIreuG.js +1 -0
  182. package/web-ui/build/static/haml-knbHtzU7.js +1 -0
  183. package/web-ui/build/static/handlebars-Bvicc2ZP.js +1 -0
  184. package/web-ui/build/static/handlebars-CWjisUes.js +1 -0
  185. package/web-ui/build/static/haskell-0vOFJmtj.js +1 -0
  186. package/web-ui/build/static/haskell-BjwWvVul.js +1 -0
  187. package/web-ui/build/static/haxe-CXIYhI9-.js +1 -0
  188. package/web-ui/build/static/haxe-Msa_nat5.js +1 -0
  189. package/web-ui/build/static/hcl-DADfqiqO.js +1 -0
  190. package/web-ui/build/static/hlsl-BoecwvZ1.js +1 -0
  191. package/web-ui/build/static/hoon-DoMcF4bN.js +1 -0
  192. package/web-ui/build/static/hpkp-DOkWWV9B.js +1 -0
  193. package/web-ui/build/static/hsp-KvanktXQ.js +1 -0
  194. package/web-ui/build/static/hsts-DP5sAe8p.js +1 -0
  195. package/web-ui/build/static/htmlbars-DpevdeqY.js +1 -0
  196. package/web-ui/build/static/http-CTyudxeK.js +1 -0
  197. package/web-ui/build/static/http-D0_pALtR.js +1 -0
  198. package/web-ui/build/static/hy-KpsNGTaA.js +1 -0
  199. package/web-ui/build/static/ichigojam-B9szb3eY.js +1 -0
  200. package/web-ui/build/static/icon-nqAgdt4t.js +1 -0
  201. package/web-ui/build/static/icu-message-format-DvgC-cKZ.js +1 -0
  202. package/web-ui/build/static/idris-D5VcDmFg.js +1 -0
  203. package/web-ui/build/static/iecst-LbbDhK7w.js +1 -0
  204. package/web-ui/build/static/ignore-rThoz4zA.js +1 -0
  205. package/web-ui/build/static/index-Cm1gK3R7.css +1 -0
  206. package/web-ui/build/static/index-D6blIL5t.js +13 -0
  207. package/web-ui/build/static/index-DqCutaVi.js +1164 -0
  208. package/web-ui/build/static/index-_UVy_UGY.js +1 -0
  209. package/web-ui/build/static/inform7-B2u0-vkK.js +1 -0
  210. package/web-ui/build/static/inform7-Cj2uMx5P.js +1 -0
  211. package/web-ui/build/static/ini-DDC_WfpB.js +1 -0
  212. package/web-ui/build/static/ini-Dafi1wkS.js +1 -0
  213. package/web-ui/build/static/io-Cs5RmCdQ.js +1 -0
  214. package/web-ui/build/static/irpf90-5KuyCx_k.js +1 -0
  215. package/web-ui/build/static/isbl-CZGAUFN3.js +1 -0
  216. package/web-ui/build/static/j-C2U5CNx3.js +1 -0
  217. package/web-ui/build/static/java-B-L3bHbG.js +1 -0
  218. package/web-ui/build/static/java-Dhfb499l.js +1 -0
  219. package/web-ui/build/static/javadoc-_ln2gn5I.js +1 -0
  220. package/web-ui/build/static/javadoclike-CnV_ddKg.js +1 -0
  221. package/web-ui/build/static/javascript-DBUUUlif.js +1 -0
  222. package/web-ui/build/static/javastacktrace-BS1l3Yf6.js +1 -0
  223. package/web-ui/build/static/jboss-cli-RdKEfNzL.js +1 -0
  224. package/web-ui/build/static/jexl-Bu5vdWnx.js +1 -0
  225. package/web-ui/build/static/jolie-LS18mxou.js +1 -0
  226. package/web-ui/build/static/jq-u9QEjWr_.js +1 -0
  227. package/web-ui/build/static/js-extras-C1cS_85G.js +1 -0
  228. package/web-ui/build/static/js-templates-DQxgBfhh.js +1 -0
  229. package/web-ui/build/static/jsdoc-DhLXAtzJ.js +1 -0
  230. package/web-ui/build/static/json-B8DgcmbV.js +1 -0
  231. package/web-ui/build/static/json-ByLJzbD8.js +1 -0
  232. package/web-ui/build/static/json5-DSnccLNQ.js +1 -0
  233. package/web-ui/build/static/jsonp-CcwF40Vu.js +1 -0
  234. package/web-ui/build/static/jsstacktrace-7YvddNWa.js +1 -0
  235. package/web-ui/build/static/jsx-DnHkAc3-.js +1 -0
  236. package/web-ui/build/static/julia-BmadVpf3.js +1 -0
  237. package/web-ui/build/static/julia-GSKCoIBJ.js +1 -0
  238. package/web-ui/build/static/julia-repl-ks3HTctE.js +1 -0
  239. package/web-ui/build/static/keepalived-CWDkM2-Z.js +1 -0
  240. package/web-ui/build/static/keyman-C9jA4-3Y.js +1 -0
  241. package/web-ui/build/static/kotlin-BqzUXT-K.js +1 -0
  242. package/web-ui/build/static/kotlin-BxhEUQAU.js +1 -0
  243. package/web-ui/build/static/kumir-BFYLWJq-.js +1 -0
  244. package/web-ui/build/static/kusto-CQRzYXm2.js +1 -0
  245. package/web-ui/build/static/lasso-D44z_uI8.js +1 -0
  246. package/web-ui/build/static/latex-BEJdTqYC.js +1 -0
  247. package/web-ui/build/static/latex-CStS4ql1.js +1 -0
  248. package/web-ui/build/static/latte-BPXasl8T.js +1 -0
  249. package/web-ui/build/static/ldif-Wxrk2-xQ.js +1 -0
  250. package/web-ui/build/static/leaf-DrTXK-pT.js +1 -0
  251. package/web-ui/build/static/less-BmoAe98U.js +1 -0
  252. package/web-ui/build/static/less-DzWEFsZj.js +1 -0
  253. package/web-ui/build/static/lilypond-C3ZnRm_L.js +1 -0
  254. package/web-ui/build/static/liquid-eXmypvP_.js +1 -0
  255. package/web-ui/build/static/lisp-DcidyoAl.js +1 -0
  256. package/web-ui/build/static/lisp-DhmUig93.js +1 -0
  257. package/web-ui/build/static/livecodeserver-D5lnfCkg.js +1 -0
  258. package/web-ui/build/static/livescript-Bpb_EpXS.js +1 -0
  259. package/web-ui/build/static/livescript-rF5whmjG.js +1 -0
  260. package/web-ui/build/static/llvm-BD9QG7T-.js +1 -0
  261. package/web-ui/build/static/llvm-CVP-jOx8.js +1 -0
  262. package/web-ui/build/static/log-DRzysjS2.js +1 -0
  263. package/web-ui/build/static/lolcode-BmKgPOwi.js +1 -0
  264. package/web-ui/build/static/lsl-DEO2mV0F.js +1 -0
  265. package/web-ui/build/static/lua-BNDDIa9F.js +1 -0
  266. package/web-ui/build/static/lua-C5n4hyV-.js +1 -0
  267. package/web-ui/build/static/magma-UZvvdXue.js +1 -0
  268. package/web-ui/build/static/makefile-BDQ4tARf.js +1 -0
  269. package/web-ui/build/static/makefile-Bjg-ueA2.js +1 -0
  270. package/web-ui/build/static/markdown-BTXvpQos.js +1 -0
  271. package/web-ui/build/static/markdown-BvMdFo1Y.js +1 -0
  272. package/web-ui/build/static/markup-templating-xSAHnnIS.js +1 -0
  273. package/web-ui/build/static/mathematica-CqNsUy6n.js +1 -0
  274. package/web-ui/build/static/matlab-D-A1WMHc.js +1 -0
  275. package/web-ui/build/static/matlab-Us_SxUWG.js +1 -0
  276. package/web-ui/build/static/maxima-BSyBp09v.js +1 -0
  277. package/web-ui/build/static/maxscript-wyb-3dgT.js +1 -0
  278. package/web-ui/build/static/mel-Bpo7JK_A.js +1 -0
  279. package/web-ui/build/static/mel-eZCDX4iS.js +1 -0
  280. package/web-ui/build/static/mercury-CEgBiaXI.js +1 -0
  281. package/web-ui/build/static/mermaid-BJIHmQsO.js +1 -0
  282. package/web-ui/build/static/mipsasm-c70dMcw9.js +1 -0
  283. package/web-ui/build/static/mizar-CeCpdHS-.js +1 -0
  284. package/web-ui/build/static/mizar-DDlOFZXr.js +1 -0
  285. package/web-ui/build/static/mojolicious-b4UGVld0.js +1 -0
  286. package/web-ui/build/static/mongodb-DwkU2uSm.js +1 -0
  287. package/web-ui/build/static/monkey-CNkGqOfo.js +1 -0
  288. package/web-ui/build/static/monkey-DwmdAwUx.js +1 -0
  289. package/web-ui/build/static/moonscript-C2vv4alq.js +1 -0
  290. package/web-ui/build/static/moonscript-GOmGojxm.js +1 -0
  291. package/web-ui/build/static/n1ql-B-uZXYG_.js +1 -0
  292. package/web-ui/build/static/n1ql-CqKgc7lF.js +1 -0
  293. package/web-ui/build/static/n4js-CLkxsn24.js +1 -0
  294. package/web-ui/build/static/nand2tetris-hdl-CAJAzliK.js +1 -0
  295. package/web-ui/build/static/naniscript-DxWjsrnl.js +1 -0
  296. package/web-ui/build/static/nasm-C-GI38un.js +1 -0
  297. package/web-ui/build/static/neon-DWKBFo--.js +1 -0
  298. package/web-ui/build/static/nevod-DGDg1w8a.js +1 -0
  299. package/web-ui/build/static/nginx-BQbAompS.js +1 -0
  300. package/web-ui/build/static/nginx-BQbgG8J2.js +1 -0
  301. package/web-ui/build/static/nim-Bf864jik.js +1 -0
  302. package/web-ui/build/static/nim-DG4Tf5sg.js +1 -0
  303. package/web-ui/build/static/nix-BBq54ypW.js +1 -0
  304. package/web-ui/build/static/nix-DiVQTSyM.js +1 -0
  305. package/web-ui/build/static/node-repl-Dg0rNxhv.js +1 -0
  306. package/web-ui/build/static/nsis-BG8Lm28v.js +1 -0
  307. package/web-ui/build/static/nsis-CwA_MNyF.js +1 -0
  308. package/web-ui/build/static/objectivec-83FM4mu0.js +1 -0
  309. package/web-ui/build/static/objectivec-CbDgPZGc.js +1 -0
  310. package/web-ui/build/static/ocaml-CXrksX9b.js +1 -0
  311. package/web-ui/build/static/ocaml-aktipfk_.js +1 -0
  312. package/web-ui/build/static/opencl-B1Wu4nP5.js +1 -0
  313. package/web-ui/build/static/openqasm-BnUjC0Rq.js +1 -0
  314. package/web-ui/build/static/openscad-CNEF75nQ.js +1 -0
  315. package/web-ui/build/static/oxygene-B5nQHVvu.js +1 -0
  316. package/web-ui/build/static/oz-Dw07HFRJ.js +1 -0
  317. package/web-ui/build/static/parigp-Dkh7PqN8.js +1 -0
  318. package/web-ui/build/static/parser-CAW1btwt.js +1 -0
  319. package/web-ui/build/static/parser3-DO4cmbnD.js +1 -0
  320. package/web-ui/build/static/pascal-B3XwEzrN.js +1 -0
  321. package/web-ui/build/static/pascaligo-CMKmAZ_B.js +1 -0
  322. package/web-ui/build/static/pcaxis-B5RrdB6p.js +1 -0
  323. package/web-ui/build/static/peoplecode-CGkgPJl9.js +1 -0
  324. package/web-ui/build/static/perl-BWBuZ5Vt.js +1 -0
  325. package/web-ui/build/static/perl-CW0_w5xG.js +1 -0
  326. package/web-ui/build/static/pf-B1aiG4iq.js +1 -0
  327. package/web-ui/build/static/pgsql-BgXadqYx.js +1 -0
  328. package/web-ui/build/static/php-BpB9heTH.js +1 -0
  329. package/web-ui/build/static/php-S3LJn70M.js +1 -0
  330. package/web-ui/build/static/php-extras-Dmblzt0I.js +1 -0
  331. package/web-ui/build/static/php-template-BS_uyUS1.js +1 -0
  332. package/web-ui/build/static/phpdoc-BqP_4LKt.js +1 -0
  333. package/web-ui/build/static/plaintext-BvDBRLjE.js +1 -0
  334. package/web-ui/build/static/plsql-DEj_qOIm.js +1 -0
  335. package/web-ui/build/static/pony-DpvrOLZf.js +1 -0
  336. package/web-ui/build/static/powerquery-C0Wobunx.js +1 -0
  337. package/web-ui/build/static/powershell-CY7ZBlTW.js +1 -0
  338. package/web-ui/build/static/powershell-DiEDDrOo.js +1 -0
  339. package/web-ui/build/static/processing-IXybgMWQ.js +1 -0
  340. package/web-ui/build/static/processing-i136WolF.js +1 -0
  341. package/web-ui/build/static/profile-guIih27Q.js +1 -0
  342. package/web-ui/build/static/prolog-CvmO0VDt.js +1 -0
  343. package/web-ui/build/static/prolog-Dmf4klwf.js +1 -0
  344. package/web-ui/build/static/promql-DObZhyF5.js +1 -0
  345. package/web-ui/build/static/properties-CK08qg7k.js +1 -0
  346. package/web-ui/build/static/properties-DmwePx7J.js +1 -0
  347. package/web-ui/build/static/protobuf-BDkUYcAx.js +1 -0
  348. package/web-ui/build/static/protobuf-CBMNyvhU.js +1 -0
  349. package/web-ui/build/static/psl-eW3BB0n6.js +1 -0
  350. package/web-ui/build/static/pug-D0LF-keh.js +1 -0
  351. package/web-ui/build/static/puppet-BUYZQfB-.js +1 -0
  352. package/web-ui/build/static/puppet-Dbo5UDT-.js +1 -0
  353. package/web-ui/build/static/pure-C5ukDHhg.js +1 -0
  354. package/web-ui/build/static/purebasic-B8eqrPTw.js +1 -0
  355. package/web-ui/build/static/purebasic-BA8g0-l-.js +1 -0
  356. package/web-ui/build/static/purescript-CKa_o5qx.js +1 -0
  357. package/web-ui/build/static/python-C-iEDsum.js +1 -0
  358. package/web-ui/build/static/python-CJcHyEGQ.js +1 -0
  359. package/web-ui/build/static/python-repl-WvDxhQ8t.js +1 -0
  360. package/web-ui/build/static/q-Ben5hioy.js +1 -0
  361. package/web-ui/build/static/q-CenUx0Za.js +1 -0
  362. package/web-ui/build/static/qml-CkUJB-7R.js +1 -0
  363. package/web-ui/build/static/qml-G6uEqbt_.js +1 -0
  364. package/web-ui/build/static/qore-CASrYvaT.js +1 -0
  365. package/web-ui/build/static/qsharp-CJMvScJV.js +1 -0
  366. package/web-ui/build/static/r-C3qOLTEa.js +1 -0
  367. package/web-ui/build/static/r-pFTIkWVX.js +1 -0
  368. package/web-ui/build/static/racket-Dj2Pnxz8.js +1 -0
  369. package/web-ui/build/static/reason-BLo81vJj.js +1 -0
  370. package/web-ui/build/static/reasonml-Uso3eiRd.js +1 -0
  371. package/web-ui/build/static/regex-CRRrWtDv.js +1 -0
  372. package/web-ui/build/static/rego-Pd9N41dQ.js +1 -0
  373. package/web-ui/build/static/renpy-B5nJRJ6W.js +1 -0
  374. package/web-ui/build/static/rest-C4KktBYV.js +1 -0
  375. package/web-ui/build/static/rib-WhwJFXjw.js +1 -0
  376. package/web-ui/build/static/rip-BRMu9y5Q.js +1 -0
  377. package/web-ui/build/static/roboconf-BC-HzyUK.js +1 -0
  378. package/web-ui/build/static/roboconf-Wo-TPzlW.js +1 -0
  379. package/web-ui/build/static/robotframework-Cvw8u8mL.js +1 -0
  380. package/web-ui/build/static/routeros-1EUCLy_j.js +1 -0
  381. package/web-ui/build/static/rsl-DcVNeKkF.js +1 -0
  382. package/web-ui/build/static/ruby-B1fqRC3j.js +1 -0
  383. package/web-ui/build/static/ruby-Bl1wXNzL.js +1 -0
  384. package/web-ui/build/static/ruleslanguage-C3rzl2Ma.js +1 -0
  385. package/web-ui/build/static/rust-4iyLrpFQ.js +1 -0
  386. package/web-ui/build/static/rust-V8MRv3os.js +1 -0
  387. package/web-ui/build/static/sas-ClkrCklD.js +1 -0
  388. package/web-ui/build/static/sas-CyFFy3mS.js +1 -0
  389. package/web-ui/build/static/sass-Cege3fu1.js +1 -0
  390. package/web-ui/build/static/scala-DNb7CDvN.js +1 -0
  391. package/web-ui/build/static/scala-c5k_CS9h.js +1 -0
  392. package/web-ui/build/static/scheme-BXrEBzXP.js +1 -0
  393. package/web-ui/build/static/scheme-COq0pstl.js +1 -0
  394. package/web-ui/build/static/scilab-CRMCfvft.js +1 -0
  395. package/web-ui/build/static/scss-C6MDSdKd.js +1 -0
  396. package/web-ui/build/static/scss-D1INSi-r.js +1 -0
  397. package/web-ui/build/static/shell-BHTFz9Xv.js +1 -0
  398. package/web-ui/build/static/shell-session-B6KXgRjz.js +1 -0
  399. package/web-ui/build/static/smali-CXGHC3zj.js +1 -0
  400. package/web-ui/build/static/smali-DFRkIqFc.js +1 -0
  401. package/web-ui/build/static/smalltalk-DWI2TbuJ.js +1 -0
  402. package/web-ui/build/static/smalltalk-jkgxBKRZ.js +1 -0
  403. package/web-ui/build/static/smarty-BPJMXwnj.js +1 -0
  404. package/web-ui/build/static/sml-BHT8CCeD.js +1 -0
  405. package/web-ui/build/static/sml-D5fkPJU1.js +1 -0
  406. package/web-ui/build/static/solidity-BfFvCWqp.js +1 -0
  407. package/web-ui/build/static/solution-file-DmSVfk_X.js +1 -0
  408. package/web-ui/build/static/soy-CXqMJVf8.js +1 -0
  409. package/web-ui/build/static/sparql-BxIpMyhJ.js +1 -0
  410. package/web-ui/build/static/splunk-spl-DMekyRuD.js +1 -0
  411. package/web-ui/build/static/sqf-DeQ-Lyaa.js +1 -0
  412. package/web-ui/build/static/sqf-hkl5BOBV.js +1 -0
  413. package/web-ui/build/static/sql-Di-rn3Od.js +1 -0
  414. package/web-ui/build/static/sql-DuF5aX9R.js +1 -0
  415. package/web-ui/build/static/sql_more-CCmzwYYA.js +1 -0
  416. package/web-ui/build/static/squirrel-fGLPlBkB.js +1 -0
  417. package/web-ui/build/static/stan-BveEpl1w.js +1 -0
  418. package/web-ui/build/static/stan-CM09XtOD.js +1 -0
  419. package/web-ui/build/static/stata-DeFUbv91.js +1 -0
  420. package/web-ui/build/static/step21-DnUE2ZTl.js +1 -0
  421. package/web-ui/build/static/stylus-Bz9XG6KK.js +1 -0
  422. package/web-ui/build/static/stylus-h33ZUR4b.js +1 -0
  423. package/web-ui/build/static/subunit-v4SRMSnP.js +1 -0
  424. package/web-ui/build/static/swift-BMCxsbHv.js +1 -0
  425. package/web-ui/build/static/swift-qFBaTSsZ.js +1 -0
  426. package/web-ui/build/static/systemd-9w7KWsst.js +1 -0
  427. package/web-ui/build/static/t4-cs-DdBrJkO9.js +1 -0
  428. package/web-ui/build/static/t4-templating-B-3iQJ4y.js +1 -0
  429. package/web-ui/build/static/t4-vb-BBuTbPK8.js +1 -0
  430. package/web-ui/build/static/taggerscript-BPvYYpaJ.js +1 -0
  431. package/web-ui/build/static/tap-DiFULuZV.js +1 -0
  432. package/web-ui/build/static/tap-Q9DMgrzh.js +1 -0
  433. package/web-ui/build/static/tcl-BZcwcRUU.js +1 -0
  434. package/web-ui/build/static/tcl-C4DHKxjE.js +1 -0
  435. package/web-ui/build/static/textile-ByLAjlo8.js +1 -0
  436. package/web-ui/build/static/thrift-C_isEMNl.js +1 -0
  437. package/web-ui/build/static/toml-C6ffwJpv.js +1 -0
  438. package/web-ui/build/static/tp-aV8nCrpp.js +1 -0
  439. package/web-ui/build/static/tremor-Bs1SSWo9.js +1 -0
  440. package/web-ui/build/static/tsx-DdryYBa4.js +1 -0
  441. package/web-ui/build/static/tt2-BeCMXvbZ.js +1 -0
  442. package/web-ui/build/static/turtle-B2FzT5Ov.js +1 -0
  443. package/web-ui/build/static/twig-fVEYqAxR.js +1 -0
  444. package/web-ui/build/static/twig-p9k58-hx.js +1 -0
  445. package/web-ui/build/static/typescript-8bhStN7p.js +1 -0
  446. package/web-ui/build/static/typescript-D2zmnuDR.js +1 -0
  447. package/web-ui/build/static/typoscript-DQePQcKL.js +1 -0
  448. package/web-ui/build/static/unrealscript-BZYSnJjB.js +1 -0
  449. package/web-ui/build/static/uorazor-CGaRtqR5.js +1 -0
  450. package/web-ui/build/static/uri-PJ3dz1qj.js +1 -0
  451. package/web-ui/build/static/v-CI9qDsYZ.js +1 -0
  452. package/web-ui/build/static/vala-B4ses542.js +1 -0
  453. package/web-ui/build/static/vala-BLxHpeKp.js +1 -0
  454. package/web-ui/build/static/vbnet-B7Dzk1rR.js +1 -0
  455. package/web-ui/build/static/vbnet-HOI9SMLZ.js +1 -0
  456. package/web-ui/build/static/vbscript-ERv5iDpi.js +1 -0
  457. package/web-ui/build/static/vbscript-html-D-mjpNAX.js +1 -0
  458. package/web-ui/build/static/velocity-B754qmeE.js +1 -0
  459. package/web-ui/build/static/verilog-3PA83Bxs.js +1 -0
  460. package/web-ui/build/static/verilog-D-lqP5ci.js +1 -0
  461. package/web-ui/build/static/vhdl-BjRYdIRF.js +1 -0
  462. package/web-ui/build/static/vhdl-DgrorvTt.js +1 -0
  463. package/web-ui/build/static/vim-3Oixnlee.js +1 -0
  464. package/web-ui/build/static/vim-BJTKcXdU.js +1 -0
  465. package/web-ui/build/static/visual-basic-BG8-3339.js +1 -0
  466. package/web-ui/build/static/warpscript-CEIgv5UG.js +1 -0
  467. package/web-ui/build/static/wasm-BJlpp9rs.js +1 -0
  468. package/web-ui/build/static/web-idl-Dlh9DutO.js +1 -0
  469. package/web-ui/build/static/wiki-CCcmRzkd.js +1 -0
  470. package/web-ui/build/static/wolfram--Xk-fAUi.js +1 -0
  471. package/web-ui/build/static/wren-B9Ajd9OC.js +1 -0
  472. package/web-ui/build/static/x86asm-DJJ72Zy-.js +1 -0
  473. package/web-ui/build/static/xeora-C0tNsSDj.js +1 -0
  474. package/web-ui/build/static/xl-CzEpyjRJ.js +1 -0
  475. package/web-ui/build/static/xml-CdtQTsBH.js +1 -0
  476. package/web-ui/build/static/xml-doc-TtPAAmc6.js +1 -0
  477. package/web-ui/build/static/xojo-B92fAnQE.js +1 -0
  478. package/web-ui/build/static/xquery-D0Z1FZVO.js +1 -0
  479. package/web-ui/build/static/xquery-DwlcRJ7Q.js +1 -0
  480. package/web-ui/build/static/yaml-DySZjPvD.js +1 -0
  481. package/web-ui/build/static/yaml-YgOVzvAS.js +1 -0
  482. package/web-ui/build/static/yang-BJokKPTo.js +1 -0
  483. package/web-ui/build/static/zephir-BWMUFIRD.js +1 -0
  484. package/web-ui/build/static/zig-Bpzj48cM.js +1 -0
  485. package/web-ui/build/static/1c-D_MLuenD.js +0 -1
  486. package/web-ui/build/static/abap-BNvFMksw.js +0 -1
  487. package/web-ui/build/static/abnf-WlnRJIp2.js +0 -1
  488. package/web-ui/build/static/abnf-mx1Wbtnp.js +0 -1
  489. package/web-ui/build/static/accesslog-CJumJuuV.js +0 -1
  490. package/web-ui/build/static/actionscript-B6CbK7n7.js +0 -1
  491. package/web-ui/build/static/actionscript-DZ5xfmPr.js +0 -1
  492. package/web-ui/build/static/ada-CCVAXM0c.js +0 -1
  493. package/web-ui/build/static/ada-DtGkgqC4.js +0 -1
  494. package/web-ui/build/static/agda-gMFRTChb.js +0 -1
  495. package/web-ui/build/static/al-88fYQh4r.js +0 -1
  496. package/web-ui/build/static/angelscript-Bibc8YWJ.js +0 -1
  497. package/web-ui/build/static/antlr4-DgibPJaJ.js +0 -1
  498. package/web-ui/build/static/apache-_pZ-s8l6.js +0 -1
  499. package/web-ui/build/static/apacheconf-YDldOH3Q.js +0 -1
  500. package/web-ui/build/static/apex-CIj23tyF.js +0 -1
  501. package/web-ui/build/static/apl-DtRSC0Xv.js +0 -1
  502. package/web-ui/build/static/applescript-CKhcPsla.js +0 -1
  503. package/web-ui/build/static/applescript-DuJeHJ1r.js +0 -1
  504. package/web-ui/build/static/aql-BgmI8Ors.js +0 -1
  505. package/web-ui/build/static/arcade-BX83978b.js +0 -1
  506. package/web-ui/build/static/arduino-BVdatcJb.js +0 -1
  507. package/web-ui/build/static/arduino-h6ifuWka.js +0 -1
  508. package/web-ui/build/static/arff-DHmbMeIA.js +0 -1
  509. package/web-ui/build/static/armasm-DiDgI5h5.js +0 -1
  510. package/web-ui/build/static/asciidoc-CBro7xXU.js +0 -1
  511. package/web-ui/build/static/asciidoc-DRC2X4bq.js +0 -1
  512. package/web-ui/build/static/asm6502-53VLu0lq.js +0 -1
  513. package/web-ui/build/static/asmatmel-DlRHdXes.js +0 -1
  514. package/web-ui/build/static/aspectj-DTSWMNl9.js +0 -1
  515. package/web-ui/build/static/aspnet-DEUO05ai.js +0 -1
  516. package/web-ui/build/static/autohotkey-3gt8xVo-.js +0 -1
  517. package/web-ui/build/static/autohotkey-BWcbMbe_.js +0 -1
  518. package/web-ui/build/static/autoit-CackGf4X.js +0 -1
  519. package/web-ui/build/static/autoit-Dyf0FSt2.js +0 -1
  520. package/web-ui/build/static/avisynth-DfCuxmn5.js +0 -1
  521. package/web-ui/build/static/avrasm-DdDiRWhx.js +0 -1
  522. package/web-ui/build/static/avro-idl-DppsvvwR.js +0 -1
  523. package/web-ui/build/static/awk-Cjk3U-Y4.js +0 -1
  524. package/web-ui/build/static/axapta-WwnY3TVf.js +0 -1
  525. package/web-ui/build/static/bash-C5Xkqken.js +0 -1
  526. package/web-ui/build/static/bash-ckPXa-RG.js +0 -1
  527. package/web-ui/build/static/basic-BCVHqHd2.js +0 -1
  528. package/web-ui/build/static/basic-D0dZbGrs.js +0 -1
  529. package/web-ui/build/static/batch-DUo60tbI.js +0 -1
  530. package/web-ui/build/static/bbcode-BVzBKrPV.js +0 -1
  531. package/web-ui/build/static/bicep-DkTjKL2N.js +0 -1
  532. package/web-ui/build/static/birb-C0rKI0h6.js +0 -1
  533. package/web-ui/build/static/bison-ChzwcDVc.js +0 -1
  534. package/web-ui/build/static/bnf-COhTgjpr.js +0 -1
  535. package/web-ui/build/static/bnf-DUYKVI2p.js +0 -1
  536. package/web-ui/build/static/brainfuck-BBJLbMxW.js +0 -1
  537. package/web-ui/build/static/brainfuck-DufOqE73.js +0 -1
  538. package/web-ui/build/static/brightscript-DXhkwfCc.js +0 -1
  539. package/web-ui/build/static/bro-BOFEsT-K.js +0 -1
  540. package/web-ui/build/static/bsl-ClV9GpNm.js +0 -1
  541. package/web-ui/build/static/c-Cl_3N1WB.js +0 -1
  542. package/web-ui/build/static/c-D0hFoAJ3.js +0 -1
  543. package/web-ui/build/static/c-like-D4BQ8VhL.js +0 -1
  544. package/web-ui/build/static/cal-CVIQ5DKG.js +0 -1
  545. package/web-ui/build/static/capnproto-l7oAqnCr.js +0 -1
  546. package/web-ui/build/static/ceylon-BEhCsFMw.js +0 -1
  547. package/web-ui/build/static/cfscript-DMh-xvVk.js +0 -1
  548. package/web-ui/build/static/chaiscript-DCvDoIGS.js +0 -1
  549. package/web-ui/build/static/cil-Ccn-j3TB.js +0 -1
  550. package/web-ui/build/static/clean-CjrEwcC-.js +0 -1
  551. package/web-ui/build/static/clojure-Dgo-8qFd.js +0 -1
  552. package/web-ui/build/static/clojure-M1AknfQi.js +0 -1
  553. package/web-ui/build/static/clojure-repl-BY1VLOSH.js +0 -1
  554. package/web-ui/build/static/cmake-CdHJ7Mp0.js +0 -1
  555. package/web-ui/build/static/cmake-DDGvi7kU.js +0 -1
  556. package/web-ui/build/static/cobol-BdrXYRxi.js +0 -1
  557. package/web-ui/build/static/coffeescript-BMDvMAy2.js +0 -1
  558. package/web-ui/build/static/coffeescript-CAYcMTRg.js +0 -1
  559. package/web-ui/build/static/concurnas-B8vcX0ec.js +0 -1
  560. package/web-ui/build/static/coq-CqvluN1S.js +0 -1
  561. package/web-ui/build/static/coq-vhnnRdWb.js +0 -1
  562. package/web-ui/build/static/cos-DY4p0y_u.js +0 -1
  563. package/web-ui/build/static/cpp-C3m_aEUX.js +0 -1
  564. package/web-ui/build/static/cpp-DRs9bbEm.js +0 -1
  565. package/web-ui/build/static/crmsh-CY6InunC.js +0 -1
  566. package/web-ui/build/static/crystal-Cwk1figA.js +0 -1
  567. package/web-ui/build/static/crystal-DeCJ5Pz7.js +0 -1
  568. package/web-ui/build/static/csharp-WmvubeKF.js +0 -1
  569. package/web-ui/build/static/csharp-zL1j7hXr.js +0 -1
  570. package/web-ui/build/static/cshtml-CbvGCaf_.js +0 -1
  571. package/web-ui/build/static/csp-BH2nxxKs.js +0 -1
  572. package/web-ui/build/static/csp-CHlC7KoB.js +0 -1
  573. package/web-ui/build/static/css-_X0ZO87y.js +0 -1
  574. package/web-ui/build/static/css-extras-wgFh56PY.js +0 -1
  575. package/web-ui/build/static/csv-momqe7r6.js +0 -1
  576. package/web-ui/build/static/cypher-hOeHFCfk.js +0 -1
  577. package/web-ui/build/static/d-B3d-tfyQ.js +0 -1
  578. package/web-ui/build/static/d-C6iyl9wX.js +0 -1
  579. package/web-ui/build/static/dart-BDKSE6LE.js +0 -1
  580. package/web-ui/build/static/dart-Bjchg8qI.js +0 -1
  581. package/web-ui/build/static/dataweave-ZgvdD-pH.js +0 -1
  582. package/web-ui/build/static/dax-yfGYNpUh.js +0 -1
  583. package/web-ui/build/static/delphi-CRLCdiTE.js +0 -1
  584. package/web-ui/build/static/dhall-yl1p1XUr.js +0 -1
  585. package/web-ui/build/static/diff-5SMtcFK7.js +0 -1
  586. package/web-ui/build/static/diff-y2RTBWsQ.js +0 -1
  587. package/web-ui/build/static/django-CtjG6w9L.js +0 -1
  588. package/web-ui/build/static/django-DNXOxI3v.js +0 -1
  589. package/web-ui/build/static/dns-D7Czwn_S.js +0 -1
  590. package/web-ui/build/static/dns-zone-file-D3yPxpjz.js +0 -1
  591. package/web-ui/build/static/docker-CWC5NqQQ.js +0 -1
  592. package/web-ui/build/static/dockerfile-CKFBVY9d.js +0 -1
  593. package/web-ui/build/static/dos-B7gYphQ-.js +0 -1
  594. package/web-ui/build/static/dot-BsisNMX4.js +0 -1
  595. package/web-ui/build/static/dsconfig-CEWwz7T6.js +0 -1
  596. package/web-ui/build/static/dts-UM5u5dMt.js +0 -1
  597. package/web-ui/build/static/dust-DlPmuh4d.js +0 -1
  598. package/web-ui/build/static/ebnf-BE6vq-fo.js +0 -1
  599. package/web-ui/build/static/ebnf-Czd8moGp.js +0 -1
  600. package/web-ui/build/static/editorconfig-Ctn83uRn.js +0 -1
  601. package/web-ui/build/static/eiffel-CZP01HVF.js +0 -1
  602. package/web-ui/build/static/ejs-BAXhrtLI.js +0 -1
  603. package/web-ui/build/static/elixir-C9PFjTwP.js +0 -1
  604. package/web-ui/build/static/elixir-DMjZPYCh.js +0 -1
  605. package/web-ui/build/static/elm-BH_KfOxJ.js +0 -1
  606. package/web-ui/build/static/elm-DRnNerE2.js +0 -1
  607. package/web-ui/build/static/erb-BhzUuTTy.js +0 -1
  608. package/web-ui/build/static/erb-DNbmX3N2.js +0 -1
  609. package/web-ui/build/static/erlang-BBPIw_V_.js +0 -1
  610. package/web-ui/build/static/erlang-BWdcSiKs.js +0 -1
  611. package/web-ui/build/static/erlang-repl-DQ9I6Dh_.js +0 -1
  612. package/web-ui/build/static/etlua-BeVNUecy.js +0 -1
  613. package/web-ui/build/static/excel-DYFvX5ms.js +0 -1
  614. package/web-ui/build/static/excel-formula-BtiqixBz.js +0 -1
  615. package/web-ui/build/static/factor-BCHyN6XZ.js +0 -1
  616. package/web-ui/build/static/false-UDWS0Dzk.js +0 -1
  617. package/web-ui/build/static/firestore-security-rules-B1-wJ42j.js +0 -1
  618. package/web-ui/build/static/fix-DrXU-V21.js +0 -1
  619. package/web-ui/build/static/flix-BjF0RPW9.js +0 -1
  620. package/web-ui/build/static/flow-DovuDACs.js +0 -1
  621. package/web-ui/build/static/fortran-DOqQP_9c.js +0 -1
  622. package/web-ui/build/static/fortran-DPASe5gH.js +0 -1
  623. package/web-ui/build/static/fsharp-Ckup0uPw.js +0 -1
  624. package/web-ui/build/static/fsharp-DyfRmGjn.js +0 -1
  625. package/web-ui/build/static/ftl-Coj24bDj.js +0 -1
  626. package/web-ui/build/static/gams-GwREZQh1.js +0 -1
  627. package/web-ui/build/static/gap-B7d6Bkmk.js +0 -1
  628. package/web-ui/build/static/gauss-DrLvPj5Z.js +0 -1
  629. package/web-ui/build/static/gcode-40iTJ2U1.js +0 -1
  630. package/web-ui/build/static/gcode-CISHXDj4.js +0 -1
  631. package/web-ui/build/static/gdscript-DmopCB0R.js +0 -1
  632. package/web-ui/build/static/gedcom-LiECv7gg.js +0 -1
  633. package/web-ui/build/static/gherkin-CYp_kcve.js +0 -1
  634. package/web-ui/build/static/gherkin-C_QgMjxf.js +0 -1
  635. package/web-ui/build/static/git-CfTT-600.js +0 -1
  636. package/web-ui/build/static/glsl-DRFMhvlG.js +0 -1
  637. package/web-ui/build/static/glsl-PNmpuSn0.js +0 -1
  638. package/web-ui/build/static/gml-3qmqfrt3.js +0 -1
  639. package/web-ui/build/static/gml-BTCmr4y5.js +0 -1
  640. package/web-ui/build/static/gn-BX0L2dQ-.js +0 -1
  641. package/web-ui/build/static/go-BXYOf5mS.js +0 -1
  642. package/web-ui/build/static/go-BnvPVHID.js +0 -1
  643. package/web-ui/build/static/go-module-BsPBvEmG.js +0 -1
  644. package/web-ui/build/static/golo-B6l7i4bX.js +0 -1
  645. package/web-ui/build/static/gradle-9DvvuDBJ.js +0 -1
  646. package/web-ui/build/static/graphql-OcCfd-Bc.js +0 -1
  647. package/web-ui/build/static/groovy-B33LZAt0.js +0 -1
  648. package/web-ui/build/static/groovy-Uyg0ruyE.js +0 -1
  649. package/web-ui/build/static/haml-D_FDAM6q.js +0 -1
  650. package/web-ui/build/static/haml-DjG31i1A.js +0 -1
  651. package/web-ui/build/static/handlebars-BKPDMksf.js +0 -1
  652. package/web-ui/build/static/handlebars-PP4M-qJ8.js +0 -1
  653. package/web-ui/build/static/haskell-HD9Gv3Wo.js +0 -1
  654. package/web-ui/build/static/haskell-nUf9ckz5.js +0 -1
  655. package/web-ui/build/static/haxe-BSsJNrQU.js +0 -1
  656. package/web-ui/build/static/haxe-D7yTwhdv.js +0 -1
  657. package/web-ui/build/static/hcl-_dqjptFs.js +0 -1
  658. package/web-ui/build/static/hlsl-DKixrsyy.js +0 -1
  659. package/web-ui/build/static/hoon-Di28eQfV.js +0 -1
  660. package/web-ui/build/static/hpkp-CXYG9zoQ.js +0 -1
  661. package/web-ui/build/static/hsp-lYl9KN6o.js +0 -1
  662. package/web-ui/build/static/hsts-CaYq9R8-.js +0 -1
  663. package/web-ui/build/static/htmlbars-eoY2PWS6.js +0 -1
  664. package/web-ui/build/static/http-2DXUmN2h.js +0 -1
  665. package/web-ui/build/static/http-Yjic3oWm.js +0 -1
  666. package/web-ui/build/static/hy-DVImg5uG.js +0 -1
  667. package/web-ui/build/static/ichigojam-Bdk-szlv.js +0 -1
  668. package/web-ui/build/static/icon-BEs9UbI_.js +0 -1
  669. package/web-ui/build/static/icu-message-format-DMfiLVs5.js +0 -1
  670. package/web-ui/build/static/idris-meksg0Ce.js +0 -1
  671. package/web-ui/build/static/iecst-DMPBiTmw.js +0 -1
  672. package/web-ui/build/static/ignore-BOQ9ZPvw.js +0 -1
  673. package/web-ui/build/static/index-BSEOP86D.js +0 -1
  674. package/web-ui/build/static/index-Be9WvMkI.js +0 -1162
  675. package/web-ui/build/static/index-Cr9q1fNq.css +0 -1
  676. package/web-ui/build/static/index-CuZ_erP9.js +0 -13
  677. package/web-ui/build/static/inform7-CNqu8FhU.js +0 -1
  678. package/web-ui/build/static/inform7-Cvfrdb0X.js +0 -1
  679. package/web-ui/build/static/ini-4DHUSW37.js +0 -1
  680. package/web-ui/build/static/ini-BgZ18Nk6.js +0 -1
  681. package/web-ui/build/static/io-c519ulw2.js +0 -1
  682. package/web-ui/build/static/irpf90-Kzq81vn5.js +0 -1
  683. package/web-ui/build/static/isbl-CeBN_o-W.js +0 -1
  684. package/web-ui/build/static/j-BmSuFx5E.js +0 -1
  685. package/web-ui/build/static/java-BezG0JQd.js +0 -1
  686. package/web-ui/build/static/java-BxBhTA1D.js +0 -1
  687. package/web-ui/build/static/javadoc-b96LRy9-.js +0 -1
  688. package/web-ui/build/static/javadoclike-BTNVp6pR.js +0 -1
  689. package/web-ui/build/static/javascript-B75gzQUI.js +0 -1
  690. package/web-ui/build/static/javastacktrace-D4xVOdoe.js +0 -1
  691. package/web-ui/build/static/jboss-cli-DH30pghK.js +0 -1
  692. package/web-ui/build/static/jexl-DF2RGmtX.js +0 -1
  693. package/web-ui/build/static/jolie-BlwO_Eyn.js +0 -1
  694. package/web-ui/build/static/jq-C7YhIw1G.js +0 -1
  695. package/web-ui/build/static/js-extras-JVZxoi4Q.js +0 -1
  696. package/web-ui/build/static/js-templates-D1CnsXgJ.js +0 -1
  697. package/web-ui/build/static/jsdoc-vf63NOxo.js +0 -1
  698. package/web-ui/build/static/json-CiKwLA5O.js +0 -1
  699. package/web-ui/build/static/json-pgLQeaes.js +0 -1
  700. package/web-ui/build/static/json5-_HMAYh1c.js +0 -1
  701. package/web-ui/build/static/jsonp-BeHQpb2r.js +0 -1
  702. package/web-ui/build/static/jsstacktrace-nw21JEtY.js +0 -1
  703. package/web-ui/build/static/jsx-Nxt_XhcW.js +0 -1
  704. package/web-ui/build/static/julia-BFczE4HB.js +0 -1
  705. package/web-ui/build/static/julia-DeDNID0K.js +0 -1
  706. package/web-ui/build/static/julia-repl-CoPTZMue.js +0 -1
  707. package/web-ui/build/static/keepalived-DP1sFl1b.js +0 -1
  708. package/web-ui/build/static/keyman-CCQVTHgo.js +0 -1
  709. package/web-ui/build/static/kotlin-CdZP58gi.js +0 -1
  710. package/web-ui/build/static/kotlin-CzNKVbXq.js +0 -1
  711. package/web-ui/build/static/kumir-lPok55sq.js +0 -1
  712. package/web-ui/build/static/kusto-oLek_zqj.js +0 -1
  713. package/web-ui/build/static/lasso-BFOYENIx.js +0 -1
  714. package/web-ui/build/static/latex-BH6YJXW6.js +0 -1
  715. package/web-ui/build/static/latex-IweVcDOS.js +0 -1
  716. package/web-ui/build/static/latte-Cmzytj93.js +0 -1
  717. package/web-ui/build/static/ldif-Bp4o5m10.js +0 -1
  718. package/web-ui/build/static/leaf-BFbMre84.js +0 -1
  719. package/web-ui/build/static/less-BVpV_iBx.js +0 -1
  720. package/web-ui/build/static/less-vdx-pGtM.js +0 -1
  721. package/web-ui/build/static/lilypond-Da6mCtwg.js +0 -1
  722. package/web-ui/build/static/liquid-RVC3EWUf.js +0 -1
  723. package/web-ui/build/static/lisp-Bgt-EmTk.js +0 -1
  724. package/web-ui/build/static/lisp-E8gUigGo.js +0 -1
  725. package/web-ui/build/static/livecodeserver-DDFQieJg.js +0 -1
  726. package/web-ui/build/static/livescript-C7FEDmfm.js +0 -1
  727. package/web-ui/build/static/livescript-Cc5SDmvx.js +0 -1
  728. package/web-ui/build/static/llvm-C22gmUEJ.js +0 -1
  729. package/web-ui/build/static/llvm-CjnVIiX4.js +0 -1
  730. package/web-ui/build/static/log-duIQICZV.js +0 -1
  731. package/web-ui/build/static/lolcode-Chrz9tTZ.js +0 -1
  732. package/web-ui/build/static/lsl-D1sdqECW.js +0 -1
  733. package/web-ui/build/static/lua-BFoJUb0S.js +0 -1
  734. package/web-ui/build/static/lua-D8RyRvqw.js +0 -1
  735. package/web-ui/build/static/magma-Cb3OhPkH.js +0 -1
  736. package/web-ui/build/static/makefile-BoVTcm8r.js +0 -1
  737. package/web-ui/build/static/makefile-LpYbnzZi.js +0 -1
  738. package/web-ui/build/static/markdown-CtQc_FZV.js +0 -1
  739. package/web-ui/build/static/markdown-DKz9qNdH.js +0 -1
  740. package/web-ui/build/static/markup-templating-D4EP19Lc.js +0 -1
  741. package/web-ui/build/static/mathematica-CIjlHVkd.js +0 -1
  742. package/web-ui/build/static/matlab-2b895p29.js +0 -1
  743. package/web-ui/build/static/matlab-BuluE4GS.js +0 -1
  744. package/web-ui/build/static/maxima-BGR8Puew.js +0 -1
  745. package/web-ui/build/static/maxscript-B429y77A.js +0 -1
  746. package/web-ui/build/static/mel-CYh_3LnF.js +0 -1
  747. package/web-ui/build/static/mel-CbYDscql.js +0 -1
  748. package/web-ui/build/static/mercury-DOee0RcU.js +0 -1
  749. package/web-ui/build/static/mermaid-Bgnlfred.js +0 -1
  750. package/web-ui/build/static/mipsasm-CB-uene8.js +0 -1
  751. package/web-ui/build/static/mizar-7qF42uX5.js +0 -1
  752. package/web-ui/build/static/mizar-Clogrskx.js +0 -1
  753. package/web-ui/build/static/mojolicious-BSIpTTKj.js +0 -1
  754. package/web-ui/build/static/mongodb--rWzrKDS.js +0 -1
  755. package/web-ui/build/static/monkey-C0lS2_fv.js +0 -1
  756. package/web-ui/build/static/monkey-DvqsFbfK.js +0 -1
  757. package/web-ui/build/static/moonscript-D6zFHk1D.js +0 -1
  758. package/web-ui/build/static/moonscript-JTxm8n_4.js +0 -1
  759. package/web-ui/build/static/n1ql-BwY55fjF.js +0 -1
  760. package/web-ui/build/static/n1ql-D8h3fDkJ.js +0 -1
  761. package/web-ui/build/static/n4js-5XIl8zQT.js +0 -1
  762. package/web-ui/build/static/nand2tetris-hdl-C4b_TExX.js +0 -1
  763. package/web-ui/build/static/naniscript-h2vnytgY.js +0 -1
  764. package/web-ui/build/static/nasm-SJmR3Ebn.js +0 -1
  765. package/web-ui/build/static/neon-B7dnnKEh.js +0 -1
  766. package/web-ui/build/static/nevod-zunhA02o.js +0 -1
  767. package/web-ui/build/static/nginx-BR_D0je7.js +0 -1
  768. package/web-ui/build/static/nginx-Cf7oQt-G.js +0 -1
  769. package/web-ui/build/static/nim-D-MjIxvw.js +0 -1
  770. package/web-ui/build/static/nim-D6YOyDC-.js +0 -1
  771. package/web-ui/build/static/nix-DCZEZqSO.js +0 -1
  772. package/web-ui/build/static/nix-Dx16U5rS.js +0 -1
  773. package/web-ui/build/static/node-repl-P-vGpiQ7.js +0 -1
  774. package/web-ui/build/static/nsis-CjyZMgjR.js +0 -1
  775. package/web-ui/build/static/nsis-X8NQeZjE.js +0 -1
  776. package/web-ui/build/static/objectivec-BejNoH7m.js +0 -1
  777. package/web-ui/build/static/objectivec-CGy2F8n6.js +0 -1
  778. package/web-ui/build/static/ocaml-C15hcRxR.js +0 -1
  779. package/web-ui/build/static/ocaml-U7N8L5Z7.js +0 -1
  780. package/web-ui/build/static/opencl-Bkm-SovU.js +0 -1
  781. package/web-ui/build/static/openqasm-BOc5975b.js +0 -1
  782. package/web-ui/build/static/openscad-CRpFnhV_.js +0 -1
  783. package/web-ui/build/static/oxygene-eHBZbxHy.js +0 -1
  784. package/web-ui/build/static/oz-B6RWw36L.js +0 -1
  785. package/web-ui/build/static/parigp-rifRy-ff.js +0 -1
  786. package/web-ui/build/static/parser-C0HBjZDk.js +0 -1
  787. package/web-ui/build/static/parser3-DSK81uS5.js +0 -1
  788. package/web-ui/build/static/pascal-BWha02r-.js +0 -1
  789. package/web-ui/build/static/pascaligo-B5sQ2hGz.js +0 -1
  790. package/web-ui/build/static/pcaxis-B1HLYPhm.js +0 -1
  791. package/web-ui/build/static/peoplecode-C4FPD4Yt.js +0 -1
  792. package/web-ui/build/static/perl-CyNx_mIa.js +0 -1
  793. package/web-ui/build/static/perl-rKxEWgtc.js +0 -1
  794. package/web-ui/build/static/pf-DbL4T2HZ.js +0 -1
  795. package/web-ui/build/static/pgsql-BKrwbRTY.js +0 -1
  796. package/web-ui/build/static/php-Cbd5TyJ-.js +0 -1
  797. package/web-ui/build/static/php-extras-DoVpsRj3.js +0 -1
  798. package/web-ui/build/static/php-template-DvdLavxo.js +0 -1
  799. package/web-ui/build/static/php-wYQJLv7J.js +0 -1
  800. package/web-ui/build/static/phpdoc-DTzZ5d0C.js +0 -1
  801. package/web-ui/build/static/plaintext-BRfzJjyj.js +0 -1
  802. package/web-ui/build/static/plsql-BLiE3aGC.js +0 -1
  803. package/web-ui/build/static/pony-CzLDxYVb.js +0 -1
  804. package/web-ui/build/static/powerquery-BdGgwM1a.js +0 -1
  805. package/web-ui/build/static/powershell-Cxl47yK_.js +0 -1
  806. package/web-ui/build/static/powershell-DrOFoqBE.js +0 -1
  807. package/web-ui/build/static/processing-9GbETrF_.js +0 -1
  808. package/web-ui/build/static/processing-M8gRGxck.js +0 -1
  809. package/web-ui/build/static/profile-CpNlvCnw.js +0 -1
  810. package/web-ui/build/static/prolog-CKZzbIr9.js +0 -1
  811. package/web-ui/build/static/prolog-mmIPeMRS.js +0 -1
  812. package/web-ui/build/static/promql-sDn1PHGN.js +0 -1
  813. package/web-ui/build/static/properties-CMFMCgWo.js +0 -1
  814. package/web-ui/build/static/properties-DQUf7KOp.js +0 -1
  815. package/web-ui/build/static/protobuf-CeY2Q-pH.js +0 -1
  816. package/web-ui/build/static/protobuf-WpfASK2n.js +0 -1
  817. package/web-ui/build/static/psl-D2GfEOkk.js +0 -1
  818. package/web-ui/build/static/pug-OMqhtHt8.js +0 -1
  819. package/web-ui/build/static/puppet-B68-xib8.js +0 -1
  820. package/web-ui/build/static/puppet-DEWzLqRg.js +0 -1
  821. package/web-ui/build/static/pure-C_CchY8g.js +0 -1
  822. package/web-ui/build/static/purebasic-D6vSqsja.js +0 -1
  823. package/web-ui/build/static/purebasic-Dy_z6LTs.js +0 -1
  824. package/web-ui/build/static/purescript-1f1OoM-A.js +0 -1
  825. package/web-ui/build/static/python-BssLWmNd.js +0 -1
  826. package/web-ui/build/static/python-CbOivp-X.js +0 -1
  827. package/web-ui/build/static/python-repl-Dsbi7aBP.js +0 -1
  828. package/web-ui/build/static/q-BC6w8B4U.js +0 -1
  829. package/web-ui/build/static/q-Brd1mf_C.js +0 -1
  830. package/web-ui/build/static/qml-BG4KN74g.js +0 -1
  831. package/web-ui/build/static/qml-BW-AE2Ma.js +0 -1
  832. package/web-ui/build/static/qore-m870d7ZA.js +0 -1
  833. package/web-ui/build/static/qsharp-BC9vEXOd.js +0 -1
  834. package/web-ui/build/static/r-BQySF8sO.js +0 -1
  835. package/web-ui/build/static/r-Cur0B9lo.js +0 -1
  836. package/web-ui/build/static/racket-CiJlajVU.js +0 -1
  837. package/web-ui/build/static/reason-C3VZcXa9.js +0 -1
  838. package/web-ui/build/static/reasonml-CpaxZwMO.js +0 -1
  839. package/web-ui/build/static/regex-bY-o17az.js +0 -1
  840. package/web-ui/build/static/rego-WPkEW7us.js +0 -1
  841. package/web-ui/build/static/renpy-DQr5LC4O.js +0 -1
  842. package/web-ui/build/static/rest-qmfCQ86m.js +0 -1
  843. package/web-ui/build/static/rib-DYzEblkc.js +0 -1
  844. package/web-ui/build/static/rip-D-NWUqHZ.js +0 -1
  845. package/web-ui/build/static/roboconf-CVmdy543.js +0 -1
  846. package/web-ui/build/static/roboconf-Ray0NGMb.js +0 -1
  847. package/web-ui/build/static/robotframework-DlxPBTF_.js +0 -1
  848. package/web-ui/build/static/routeros-S_f-nuVM.js +0 -1
  849. package/web-ui/build/static/rsl-CHtR71Pc.js +0 -1
  850. package/web-ui/build/static/ruby-ByuU-3cy.js +0 -1
  851. package/web-ui/build/static/ruby-DOin939S.js +0 -1
  852. package/web-ui/build/static/ruleslanguage-zhFrFxeU.js +0 -1
  853. package/web-ui/build/static/rust-B606UvZv.js +0 -1
  854. package/web-ui/build/static/rust-BJMuS7if.js +0 -1
  855. package/web-ui/build/static/sas-Bzk_0rOu.js +0 -1
  856. package/web-ui/build/static/sas-C-C55Hy4.js +0 -1
  857. package/web-ui/build/static/sass-DKkkoHtH.js +0 -1
  858. package/web-ui/build/static/scala-BKlnHttP.js +0 -1
  859. package/web-ui/build/static/scala-IsJjjIKA.js +0 -1
  860. package/web-ui/build/static/scheme-Bq_tfrRE.js +0 -1
  861. package/web-ui/build/static/scheme-DiXFvLKG.js +0 -1
  862. package/web-ui/build/static/scilab-DVyT87si.js +0 -1
  863. package/web-ui/build/static/scss-BtDpAVzH.js +0 -1
  864. package/web-ui/build/static/scss-D8cn4aNM.js +0 -1
  865. package/web-ui/build/static/shell-YROU1_yo.js +0 -1
  866. package/web-ui/build/static/shell-session-D06UXOLk.js +0 -1
  867. package/web-ui/build/static/smali-B1Wl_1dD.js +0 -1
  868. package/web-ui/build/static/smali-D2R-11j_.js +0 -1
  869. package/web-ui/build/static/smalltalk-M2S1lL6Z.js +0 -1
  870. package/web-ui/build/static/smalltalk-OWg84676.js +0 -1
  871. package/web-ui/build/static/smarty-l1m-zZmR.js +0 -1
  872. package/web-ui/build/static/sml-B6gSTHMm.js +0 -1
  873. package/web-ui/build/static/sml-BKURhRNM.js +0 -1
  874. package/web-ui/build/static/solidity-BcrqESJt.js +0 -1
  875. package/web-ui/build/static/solution-file-BYpCOi9k.js +0 -1
  876. package/web-ui/build/static/soy-DOQhQ7Di.js +0 -1
  877. package/web-ui/build/static/sparql-BwiIX_wO.js +0 -1
  878. package/web-ui/build/static/splunk-spl-DuIl6XxN.js +0 -1
  879. package/web-ui/build/static/sqf-8cYPidUR.js +0 -1
  880. package/web-ui/build/static/sqf-n8nRTmXc.js +0 -1
  881. package/web-ui/build/static/sql-D0WSLeXV.js +0 -1
  882. package/web-ui/build/static/sql-D8KWxFl_.js +0 -1
  883. package/web-ui/build/static/sql_more-D3ozDsf6.js +0 -1
  884. package/web-ui/build/static/squirrel-C4U4fAL5.js +0 -1
  885. package/web-ui/build/static/stan-BbFEvT-l.js +0 -1
  886. package/web-ui/build/static/stan-CJ4ny6dZ.js +0 -1
  887. package/web-ui/build/static/stata-BKEkbqzD.js +0 -1
  888. package/web-ui/build/static/step21-52PURHjy.js +0 -1
  889. package/web-ui/build/static/stylus-buszfxDg.js +0 -1
  890. package/web-ui/build/static/stylus-y0WOYXDO.js +0 -1
  891. package/web-ui/build/static/subunit-DU_iInw0.js +0 -1
  892. package/web-ui/build/static/swift-1VeEUHZi.js +0 -1
  893. package/web-ui/build/static/swift-Iw0x_Dum.js +0 -1
  894. package/web-ui/build/static/systemd-BT_5EOz8.js +0 -1
  895. package/web-ui/build/static/t4-cs-DlHeFrua.js +0 -1
  896. package/web-ui/build/static/t4-templating-Bz3RFfzp.js +0 -1
  897. package/web-ui/build/static/t4-vb-BMG0Q3qg.js +0 -1
  898. package/web-ui/build/static/taggerscript-CxwafGpT.js +0 -1
  899. package/web-ui/build/static/tap-6QugbkZA.js +0 -1
  900. package/web-ui/build/static/tap-SB1ST166.js +0 -1
  901. package/web-ui/build/static/tcl-CpV5bsKx.js +0 -1
  902. package/web-ui/build/static/tcl-Dikgd33H.js +0 -1
  903. package/web-ui/build/static/textile-aPmNtrkM.js +0 -1
  904. package/web-ui/build/static/thrift-B4Snltg5.js +0 -1
  905. package/web-ui/build/static/toml-B8SfswHQ.js +0 -1
  906. package/web-ui/build/static/tp-CdO-cn9g.js +0 -1
  907. package/web-ui/build/static/tremor-CqqCLe4A.js +0 -1
  908. package/web-ui/build/static/tsx-Ck0ZDqEy.js +0 -1
  909. package/web-ui/build/static/tt2-BrqZXSkJ.js +0 -1
  910. package/web-ui/build/static/turtle-DpnSIzmN.js +0 -1
  911. package/web-ui/build/static/twig-B5Et_eTY.js +0 -1
  912. package/web-ui/build/static/twig-C3vsy99c.js +0 -1
  913. package/web-ui/build/static/typescript-DH7tzpeO.js +0 -1
  914. package/web-ui/build/static/typescript-s1qBbHGm.js +0 -1
  915. package/web-ui/build/static/typoscript-DD8499cq.js +0 -1
  916. package/web-ui/build/static/unrealscript-C1zerCVR.js +0 -1
  917. package/web-ui/build/static/uorazor-CtRNfzg2.js +0 -1
  918. package/web-ui/build/static/uri-CAfIv8vn.js +0 -1
  919. package/web-ui/build/static/v-B6_f9ZGJ.js +0 -1
  920. package/web-ui/build/static/vala-BIpejmrf.js +0 -1
  921. package/web-ui/build/static/vala-BYLjm9ih.js +0 -1
  922. package/web-ui/build/static/vbnet-DEW7adbx.js +0 -1
  923. package/web-ui/build/static/vbnet-D_CuPCaz.js +0 -1
  924. package/web-ui/build/static/vbscript-Do9hsQ_u.js +0 -1
  925. package/web-ui/build/static/vbscript-html-4bMQ0-FJ.js +0 -1
  926. package/web-ui/build/static/velocity-CQjo2-fz.js +0 -1
  927. package/web-ui/build/static/verilog-C-Xvd__o.js +0 -1
  928. package/web-ui/build/static/verilog-Dn1ZGsRG.js +0 -1
  929. package/web-ui/build/static/vhdl-DZ-dTOLA.js +0 -1
  930. package/web-ui/build/static/vhdl-bDNJfpa7.js +0 -1
  931. package/web-ui/build/static/vim-BDAo5YHC.js +0 -1
  932. package/web-ui/build/static/vim-ClkOafc3.js +0 -1
  933. package/web-ui/build/static/visual-basic-DXIeLZZ8.js +0 -1
  934. package/web-ui/build/static/warpscript-f7veA-3J.js +0 -1
  935. package/web-ui/build/static/wasm-TToDlmNk.js +0 -1
  936. package/web-ui/build/static/web-idl-CrrjMFQT.js +0 -1
  937. package/web-ui/build/static/wiki-aicisDW2.js +0 -1
  938. package/web-ui/build/static/wolfram-C_A80rAh.js +0 -1
  939. package/web-ui/build/static/wren-DkVyeDoy.js +0 -1
  940. package/web-ui/build/static/x86asm-fx1o_ltw.js +0 -1
  941. package/web-ui/build/static/xeora-D-uaDMXn.js +0 -1
  942. package/web-ui/build/static/xl-Dnyvb9_S.js +0 -1
  943. package/web-ui/build/static/xml-BGV0zG9K.js +0 -1
  944. package/web-ui/build/static/xml-doc-DOGLcenw.js +0 -1
  945. package/web-ui/build/static/xojo-B3Qgvb5A.js +0 -1
  946. package/web-ui/build/static/xquery-C-B5-0Q9.js +0 -1
  947. package/web-ui/build/static/xquery-KbuiAVhj.js +0 -1
  948. package/web-ui/build/static/yaml-CBWBoq6m.js +0 -1
  949. package/web-ui/build/static/yaml-IghlDZf6.js +0 -1
  950. package/web-ui/build/static/yang-CArp62P5.js +0 -1
  951. package/web-ui/build/static/zephir-DMLTJ9_9.js +0 -1
  952. package/web-ui/build/static/zig-CWG2311v.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "onbuzz",
3
- "version": "4.7.0",
3
+ "version": "4.7.1",
4
4
  "description": "Loxia OnBuzz - Your AI Fleet",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -0,0 +1,35 @@
1
+ // Standalone replica of accountRoutes.proxyToBackend, to figure out
2
+ // why the in-process call fails while my curl/node-fetch from the
3
+ // same machine succeed. Run with: node scripts/debug-balance-probe.mjs
4
+ import { readFileSync } from 'fs';
5
+
6
+ const cfg = JSON.parse(readFileSync('config/default.json', 'utf8'));
7
+ const baseUrl = (cfg.backend?.baseUrl || 'https://autopilot-api.azurewebsites.net').replace(/\/$/, '');
8
+
9
+ // Pull JWT from the running server (same path /api/auth/status uses).
10
+ const jwt = await (await fetch('http://localhost:8080/api/auth/status')).json().then(d => d.jwt);
11
+ console.log('Using JWT len:', jwt?.length, 'against baseUrl:', baseUrl);
12
+ console.log();
13
+
14
+ async function proxyLike(path) {
15
+ const url = `${baseUrl}${path}`;
16
+ const t0 = Date.now();
17
+ try {
18
+ const res = await fetch(url, {
19
+ method: 'GET',
20
+ headers: {
21
+ 'Authorization': `Bearer ${jwt}`,
22
+ 'Content-Type': 'application/json',
23
+ },
24
+ });
25
+ const text = await res.text();
26
+ let parsed; try { parsed = JSON.parse(text); } catch { parsed = { raw: text.slice(0, 200) }; }
27
+ console.log(`${path}: status=${res.status} ms=${Date.now() - t0} body=${JSON.stringify(parsed).slice(0, 200)}`);
28
+ } catch (err) {
29
+ console.log(`${path}: ERR ${err.message}`);
30
+ }
31
+ }
32
+
33
+ for (const p of ['/subscription/status', '/account/profile', '/auth/me', '/auth/apikeys']) {
34
+ await proxyLike(p);
35
+ }
@@ -1,15 +1,25 @@
1
1
  /**
2
- * Tripwire for the auto-update configuration in package.json.
2
+ * Tripwire: the auto-update feature requires three things in
3
+ * package.json that are easy to lose in a dep refresh:
3
4
  *
4
- * Catches the class of regression where someone bumps deps or
5
- * re-formats the build block and accidentally drops:
6
- * - the `update-notifier` runtime dep (CLI banner stops working)
7
- * - the `electron-updater` optional dep (Electron updates stop)
8
- * - the `build.publish` block (electron-builder stops generating
9
- * latest.yml + electron-updater has nothing to read)
5
+ * 1. `update-notifier` in `dependencies` drives the npm-CLI
6
+ * banner. Missing dynamic import in updateNotifier.js
7
+ * silently no-ops (good fail-safe, but the banner disappears
8
+ * without any louder signal).
9
+ * 2. `electron-updater` in `optionalDependencies` drives the
10
+ * Electron in-app update dialog. Missing → autoUpdate.js
11
+ * silently no-ops.
12
+ * 3. `build.publish` config — pointed at the GitHub Releases the
13
+ * Electron updater reads `latest.yml` from. Missing → the
14
+ * packaged Electron app never sees updates even when
15
+ * `electron-updater` is installed.
10
16
  *
11
- * If you intentionally remove any of these, update this test in the
12
- * SAME commit and explain in the test diff why.
17
+ * Each is a silent failure on its own. Together they make the
18
+ * feature look "shipped" but actually inert. This test forces a
19
+ * loud CI signal when any of the three goes missing.
20
+ *
21
+ * If you INTENTIONALLY remove auto-update, change this test in the
22
+ * same commit and explain why in the diff. Don't just delete it.
13
23
  */
14
24
 
15
25
  import { describe, test, expect } from '@jest/globals';
@@ -33,12 +43,38 @@ describe('package.json — auto-update presence', () => {
33
43
 
34
44
  test('electron-builder has a publish provider configured', () => {
35
45
  expect(pkg.build).toBeDefined();
36
- expect(Array.isArray(pkg.build.publish) || typeof pkg.build.publish === 'object').toBe(true);
37
- const entries = Array.isArray(pkg.build.publish) ? pkg.build.publish : [pkg.build.publish];
46
+ const publishField = pkg.build.publish;
47
+ expect(Array.isArray(publishField) || (publishField && typeof publishField === 'object')).toBe(true);
48
+ const entries = Array.isArray(publishField) ? publishField : [publishField];
38
49
  expect(entries.length).toBeGreaterThan(0);
39
- // electron-updater requires a `provider` field on each publish entry.
40
50
  for (const entry of entries) {
41
51
  expect(entry.provider).toBeTruthy();
42
52
  }
43
53
  });
54
+
55
+ test('GitHub publish target points at a real owner+repo (not the boilerplate `your-org`/`your-repo`)', () => {
56
+ const entries = Array.isArray(pkg.build.publish) ? pkg.build.publish : [pkg.build.publish];
57
+ const github = entries.find(e => e.provider === 'github');
58
+ if (!github) return; // other providers (S3, etc.) are fine
59
+ expect(github.owner).toBeTruthy();
60
+ expect(github.repo).toBeTruthy();
61
+ // Common copy-paste placeholders.
62
+ expect(github.owner).not.toMatch(/^(your-org|TODO|placeholder)$/i);
63
+ expect(github.repo).not.toMatch(/^(your-repo|TODO|placeholder)$/i);
64
+ });
65
+
66
+ test('update-notifier source file exists and is referenced by the CLI entry point', () => {
67
+ // Tripwire against accidental file deletion. The runtime is
68
+ // tolerant of missing dependencies (dynamic import), but if the
69
+ // wrapper FILE goes missing the import line crashes.
70
+ expect(() => readFileSync(join(REPO_ROOT, 'src/utilities/updateNotifier.js'), 'utf8')).not.toThrow();
71
+ const cliEntry = readFileSync(join(REPO_ROOT, 'bin/cli.js'), 'utf8');
72
+ expect(cliEntry).toMatch(/from\s+['"]\.\.\/src\/utilities\/updateNotifier\.js['"]/);
73
+ });
74
+
75
+ test('electron autoUpdate source file exists and is referenced by electron/main.js', () => {
76
+ expect(() => readFileSync(join(REPO_ROOT, 'electron/autoUpdate.js'), 'utf8')).not.toThrow();
77
+ const mainEntry = readFileSync(join(REPO_ROOT, 'electron/main.js'), 'utf8');
78
+ expect(mainEntry).toMatch(/from\s+['"]\.\/autoUpdate\.js['"]/);
79
+ });
44
80
  });
@@ -102,7 +102,12 @@ describe('MessageProcessor — source header injection', () => {
102
102
  expect(queued.role).toBe('user');
103
103
  });
104
104
 
105
- test('Telegram private message → Telegram > DM attribution', async () => {
105
+ test('Telegram private message → collapsed "from Telegram" header (no user/DM noise)', async () => {
106
+ // Telegram private chats have exactly one human; the full
107
+ // "Message by alice ... > DM" header is bloat that pushes content
108
+ // out of the agent's context window. We collapse it to a 2-word
109
+ // prefix instead. Group chats keep the full attribution — see
110
+ // messageSource.test.js for the group case.
106
111
  const source = createTelegramSource({
107
112
  message_id: 1,
108
113
  chat: { id: 42, type: 'private' },
@@ -115,7 +120,7 @@ describe('MessageProcessor — source header injection', () => {
115
120
  });
116
121
 
117
122
  const [, queued] = agentPool.addUserMessage.mock.calls[0];
118
- expect(queued.content).toBe('(Message by alice from Telegram > DM)\nstatus?');
123
+ expect(queued.content).toBe('(from Telegram)\nstatus?');
119
124
  expect(queued.source).toBe(source);
120
125
  });
121
126
 
package/src/index.js CHANGED
@@ -705,6 +705,22 @@ class LoxiaApplication {
705
705
  this.telegramService.setAgentPool(this.agentPool);
706
706
  this.telegramService.setWebSocketManager(webServer);
707
707
  if (this.flowExecutor) this.telegramService.setFlowExecutor(this.flowExecutor);
708
+ // Backend URL + platform API key are needed for the voice-note
709
+ // → /llm/transcribe path. Without these, voice messages return
710
+ // a friendly "voice not configured" message and the user is
711
+ // told to type instead. Both come from the same sources the
712
+ // rest of the CLI's /api/* proxy code uses.
713
+ const backendBaseUrl = this.config?.backend?.baseUrl
714
+ || webServer?.config?.backend?.baseUrl
715
+ || null;
716
+ if (backendBaseUrl) this.telegramService.setBackendBaseUrl(backendBaseUrl);
717
+ // Pass a getter (not a snapshotted value) so the key is
718
+ // re-resolved on every transcribe call. This lets the user
719
+ // sign in AFTER boot — voice notes start working immediately
720
+ // without restarting the server.
721
+ this.telegramService.setPlatformApiKey(
722
+ () => this.apiKeyManager?.getKeysForRequest?.(null, { platformProvided: true })?.loxiaApiKey || null
723
+ );
708
724
  // Let the scheduler query bridge-state per agent so it can inject
709
725
  // the <external> routing guidance into system prompts only when the
710
726
  // agent is actually addressable from Telegram.
@@ -148,7 +148,7 @@ describe('GET /api/account/profile', () => {
148
148
  });
149
149
 
150
150
  describe('GET /api/account/balance', () => {
151
- test('proxies to /account/profile and returns the body verbatim', async () => {
151
+ test('primary path: hits /subscription/status and returns body verbatim', async () => {
152
152
  const fetchImpl = jest.fn().mockResolvedValue({
153
153
  ok: true, status: 200,
154
154
  text: async () => JSON.stringify({ balance: 12.34, plan: 'pro' }),
@@ -159,7 +159,65 @@ describe('GET /api/account/balance', () => {
159
159
  const r = await fetch(`${baseUrl}/api/account/balance`);
160
160
  const json = await r.json();
161
161
  expect(json).toEqual({ balance: 12.34, plan: 'pro' });
162
- expect(fetchImpl.mock.calls[0][0]).toBe(`${BACKEND_URL}/account/profile`);
162
+ expect(fetchImpl.mock.calls[0][0]).toBe(`${BACKEND_URL}/subscription/status`);
163
+ // Cascade short-circuits on first success — fallback endpoints
164
+ // are not contacted.
165
+ expect(fetchImpl).toHaveBeenCalledTimes(1);
166
+ } finally {
167
+ await stop(server);
168
+ }
169
+ });
170
+
171
+ test('cascade: falls back to /account/profile when /subscription/status fails', async () => {
172
+ const fetchImpl = jest.fn()
173
+ .mockResolvedValueOnce({ ok: false, status: 503, text: async () => JSON.stringify({ error: 'subs down' }) })
174
+ .mockResolvedValueOnce({ ok: true, status: 200, text: async () => JSON.stringify({ balance: 7.7, plan: 'free' }) });
175
+ const startServer = mountRouter({ fetchImpl });
176
+ const { server, baseUrl } = await startServer();
177
+ try {
178
+ const r = await fetch(`${baseUrl}/api/account/balance`);
179
+ const json = await r.json();
180
+ expect(json).toEqual({ balance: 7.7, plan: 'free' });
181
+ expect(fetchImpl.mock.calls[1][0]).toBe(`${BACKEND_URL}/account/profile`);
182
+ } finally {
183
+ await stop(server);
184
+ }
185
+ });
186
+
187
+ test('cascade: final fallback uses /auth/me when both fail; returns degraded:true', async () => {
188
+ const fetchImpl = jest.fn()
189
+ .mockResolvedValueOnce({ ok: false, status: 503, text: async () => JSON.stringify({ error: 'subs down' }) })
190
+ .mockResolvedValueOnce({ ok: false, status: 500, text: async () => JSON.stringify({ error: { message: 'ledger down', code: 'ECONNREFUSED' } }) })
191
+ .mockResolvedValueOnce({ ok: true, status: 200, text: async () => JSON.stringify({ user: { creditBalance: 5, accountType: 'free' } }) });
192
+ const startServer = mountRouter({ fetchImpl });
193
+ const { server, baseUrl } = await startServer();
194
+ try {
195
+ const r = await fetch(`${baseUrl}/api/account/balance`);
196
+ const json = await r.json();
197
+ expect(json.balance).toBe(5);
198
+ expect(json.plan).toBe('free');
199
+ expect(json.degraded).toBe(true);
200
+ // The reason field MUST be a string — not an object — so
201
+ // FE `title="..."` tooltips don't render "[object Object]".
202
+ expect(typeof json.reason).toBe('string');
203
+ expect(json.reason.length).toBeGreaterThan(0);
204
+ } finally {
205
+ await stop(server);
206
+ }
207
+ });
208
+
209
+ test('cascade: every upstream fails → returns degraded with null balance, never 5xx', async () => {
210
+ const fetchImpl = jest.fn().mockResolvedValue({
211
+ ok: false, status: 500, text: async () => JSON.stringify({ error: 'everything is broken' }),
212
+ });
213
+ const startServer = mountRouter({ fetchImpl });
214
+ const { server, baseUrl } = await startServer();
215
+ try {
216
+ const r = await fetch(`${baseUrl}/api/account/balance`);
217
+ expect(r.status).toBe(200); // ← graceful degrade, NOT 500
218
+ const json = await r.json();
219
+ expect(json.balance).toBeNull();
220
+ expect(json.degraded).toBe(true);
163
221
  } finally {
164
222
  await stop(server);
165
223
  }
@@ -106,6 +106,40 @@ export function createAccountRouter({
106
106
  const router = express.Router();
107
107
  const baseUrl = backendBaseUrl.replace(/\/$/, '');
108
108
 
109
+ // Last-known-good balance cache, per JWT (so a fast user-switch
110
+ // doesn't show the previous user's balance). Stays in memory only —
111
+ // a server restart wipes it, by design: stale-on-disk balance would
112
+ // be more dangerous than no balance.
113
+ /** @type {Map<string, { balance: number, plan: string|null, savedAt: string }>} */
114
+ const balanceCache = new Map();
115
+ function cacheKey(jwt) {
116
+ if (!jwt) return null;
117
+ // Hash the JWT to keep memory footprint sane (JWTs are ~240 chars
118
+ // each). The hash is a fingerprint, not used as auth.
119
+ let h = 0; for (let i = 0; i < jwt.length; i++) { h = ((h << 5) - h + jwt.charCodeAt(i)) | 0; }
120
+ return String(h);
121
+ }
122
+
123
+ /**
124
+ * Coerce whatever the upstream put under `body.error` into a
125
+ * human-readable string. Different upstream services use different
126
+ * envelope shapes — string, `{message,code}`, or even nested objects.
127
+ * Always returns a string so the FE's `title="..."` tooltip never
128
+ * shows `[object Object]`.
129
+ */
130
+ function extractErrorMessage(body) {
131
+ if (!body) return '';
132
+ const err = body.error;
133
+ if (typeof err === 'string') return err;
134
+ if (err && typeof err === 'object') {
135
+ if (typeof err.message === 'string') return err.message;
136
+ if (typeof err.code === 'string') return err.code;
137
+ try { return JSON.stringify(err); } catch { return ''; }
138
+ }
139
+ if (typeof body.message === 'string') return body.message;
140
+ return '';
141
+ }
142
+
109
143
  /**
110
144
  * Forward a request to the backend with the user's JWT. Returns a
111
145
  * { status, body } tuple the route handlers can hand straight back
@@ -122,11 +156,13 @@ export function createAccountRouter({
122
156
  }
123
157
  const url = `${baseUrl}${path}`;
124
158
  try {
159
+ const t0 = Date.now();
125
160
  const res = await fetchImpl(url, {
126
161
  method,
127
162
  headers: {
128
163
  'Authorization': `Bearer ${jwt}`,
129
164
  'Content-Type': 'application/json',
165
+ 'Connection': 'close',
130
166
  },
131
167
  body: body !== undefined ? JSON.stringify(body) : undefined,
132
168
  });
@@ -135,12 +171,26 @@ export function createAccountRouter({
135
171
  let parsed;
136
172
  try { parsed = text ? JSON.parse(text) : {}; } catch { parsed = { raw: text }; }
137
173
 
174
+ // Per-request debug log so a flaky upstream is diagnosable
175
+ // without reproducing in a separate process. Worth the noise
176
+ // because the account proxy currently has an unsolved
177
+ // discrepancy: standalone Node script gets 200s, the in-process
178
+ // fetch gets 5xxs against the same URL with the same JWT.
179
+ logger?.info?.('[accountRoutes] upstream', {
180
+ url,
181
+ method,
182
+ status: res.status,
183
+ ms: Date.now() - t0,
184
+ bodyPreview: typeof text === 'string' ? text.slice(0, 200) : null,
185
+ contentType: res.headers?.get?.('content-type') || null,
186
+ });
187
+
138
188
  if (!res.ok) {
139
189
  return {
140
190
  status: res.status,
141
191
  body: {
142
192
  success: false,
143
- error: parsed.error || parsed.message || `Backend returned ${res.status}`,
193
+ error: extractErrorMessage(parsed) || `Backend returned ${res.status}`,
144
194
  code: res.status === 404 ? ERROR_CODES.NOT_FOUND : ERROR_CODES.BACKEND_ERROR,
145
195
  },
146
196
  };
@@ -159,6 +209,47 @@ export function createAccountRouter({
159
209
  }
160
210
  }
161
211
 
212
+ // ── Debug ──────────────────────────────────────────────────────────
213
+ // Temporary diagnostic route. Returns the raw responses from each
214
+ // upstream call the cascade makes so we can see in the browser why
215
+ // /balance falls through to degraded when standalone fetch from the
216
+ // same machine works fine. Remove when the balance issue is closed.
217
+ router.get('/_debug', async (_req, res) => {
218
+ const jwt = getJwt();
219
+ if (!jwt) return res.status(401).json({ error: 'not signed in' });
220
+ const probe = async (path) => {
221
+ const url = `${baseUrl}${path}`;
222
+ const t0 = Date.now();
223
+ try {
224
+ const r = await fetchImpl(url, {
225
+ method: 'GET',
226
+ headers: {
227
+ 'Authorization': `Bearer ${jwt}`,
228
+ 'Content-Type': 'application/json',
229
+ 'Connection': 'close',
230
+ },
231
+ });
232
+ const text = await r.text();
233
+ return {
234
+ path, url, status: r.status, ms: Date.now() - t0,
235
+ contentType: r.headers?.get?.('content-type') || null,
236
+ bodyPreview: text.slice(0, 400),
237
+ };
238
+ } catch (err) {
239
+ return { path, url, ms: Date.now() - t0, error: err.message, errCode: err.code, errName: err.name };
240
+ }
241
+ };
242
+ res.json({
243
+ baseUrl,
244
+ jwtLen: jwt.length,
245
+ probes: await Promise.all([
246
+ probe('/subscription/status'),
247
+ probe('/account/profile'),
248
+ probe('/auth/me'),
249
+ ]),
250
+ });
251
+ });
252
+
162
253
  // ── Profile ────────────────────────────────────────────────────────
163
254
  router.get('/profile', async (_req, res) => {
164
255
  const r = await proxyToBackend('GET', '/auth/me');
@@ -172,13 +263,70 @@ export function createAccountRouter({
172
263
  });
173
264
 
174
265
  // ── Balance ────────────────────────────────────────────────────────
266
+ // Reads `{ plan, balance, ... }` from the backend.
267
+ //
268
+ // Endpoint cascade — first one that returns 2xx wins:
269
+ // 1. /subscription/status — returns { plan, balance, monthlyAllocation,
270
+ // subscriptionStatus, currentPeriodEnd }. Reads from User.creditBalance
271
+ // (cached / DB-direct) so it works even when the ledger is down.
272
+ // This is the PRIMARY because of that resilience.
273
+ // 2. /account/profile — bundles plan + balance from the ledger.
274
+ // Richer data, but 500s if LEDGER_SERVICE_URL is missing.
275
+ // 3. /auth/me — no balance, but at least we can return plan + null.
276
+ //
277
+ // The FE never sees an error here — degraded data + a `degraded: true`
278
+ // flag is the right UX, not an error toast.
175
279
  router.get('/balance', async (_req, res) => {
176
- // The backend exposes a balance read at /account/profile (which
177
- // bundles plan + balance) see autopilot-backend/routes/account.js.
178
- // Calling this single endpoint instead of /ledger/balance keeps the
179
- // local server free of ledger credentials.
180
- const r = await proxyToBackend('GET', '/account/profile');
181
- res.status(r.status).json(r.body);
280
+ // Balance is a per-user query — needs a JWT just like every other
281
+ // /api/account/* route. Early-exit with the same not_signed_in
282
+ // envelope so the FE branches the same way.
283
+ const jwt = getJwt();
284
+ if (!jwt) {
285
+ return res.status(401).json({
286
+ success: false,
287
+ error: 'Sign in to manage your account',
288
+ code: ERROR_CODES.NOT_SIGNED_IN,
289
+ });
290
+ }
291
+ const ck = cacheKey(jwt);
292
+
293
+ const subscription = await proxyToBackend('GET', '/subscription/status');
294
+ if (subscription.status >= 200 && subscription.status < 300) {
295
+ const body = subscription.body || {};
296
+ if (typeof body.balance === 'number') {
297
+ balanceCache.set(ck, { balance: body.balance, plan: body.plan || null, savedAt: new Date().toISOString() });
298
+ }
299
+ return res.status(subscription.status).json(body);
300
+ }
301
+ const profile = await proxyToBackend('GET', '/account/profile');
302
+ if (profile.status >= 200 && profile.status < 300) {
303
+ const body = profile.body || {};
304
+ if (typeof body.balance === 'number') {
305
+ balanceCache.set(ck, { balance: body.balance, plan: body.plan || body.accountType || null, savedAt: new Date().toISOString() });
306
+ }
307
+ return res.status(profile.status).json(body);
308
+ }
309
+ // Both balance-bearing endpoints failed. Hand back the last-known
310
+ // good value (if any) with a `stale: true` flag so the FE shows a
311
+ // number instead of "— CP". The user still gets a visual cue that
312
+ // it might not be current.
313
+ const cached = balanceCache.get(ck);
314
+ const me = await proxyToBackend('GET', '/auth/me');
315
+ const u = me.status >= 200 && me.status < 300 ? (me.body?.user || me.body || {}) : {};
316
+
317
+ // The internal ECONNREFUSED string is useful for debugging but
318
+ // not for users — log it once at warn, surface a friendly reason.
319
+ const technical = extractErrorMessage(subscription.body) || extractErrorMessage(profile.body) || '';
320
+ if (technical) logger?.warn?.('[accountRoutes] balance degraded', { technical });
321
+
322
+ res.json({
323
+ balance: cached ? cached.balance : (typeof u.creditBalance === 'number' ? u.creditBalance : null),
324
+ plan: cached?.plan || u.accountType || null,
325
+ degraded: true,
326
+ stale: !!cached,
327
+ lastUpdatedAt: cached?.savedAt || null,
328
+ reason: 'Balance service is temporarily unavailable',
329
+ });
182
330
  });
183
331
 
184
332
  // ── API keys list ──────────────────────────────────────────────────
@@ -961,7 +961,17 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
961
961
  });
962
962
 
963
963
  // Auth resolve — resolve user account from an existing API key by calling the remote backend
964
- // This enables "API key → account auto-link" without requiring a full OAuth login
964
+ // This enables "API key → account auto-link" without requiring a full OAuth login.
965
+ //
966
+ // Preferred path: POST /auth/mint-jwt-from-apikey, which returns
967
+ // {token, user} in one round-trip. We cache the JWT so subsequent
968
+ // /api/account/* calls (which require a JWT, not an API key) work
969
+ // without forcing the user through OAuth.
970
+ //
971
+ // Fallback path: GET /auth/me — used when the backend predates
972
+ // the mint endpoint (older deployment). User is still cached but
973
+ // no JWT is minted; /api/account/* will be unavailable until the
974
+ // user does a real OAuth login.
965
975
  this.app.get('/api/auth/resolve', async (req, res) => {
966
976
  try {
967
977
  const loxiaApiKey = this.apiKeyManager?.getKeysForRequest?.(null, { platformProvided: true })?.loxiaApiKey;
@@ -970,6 +980,34 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
970
980
  }
971
981
 
972
982
  const backendBaseUrl = this.config?.backend?.baseUrl || 'https://autopilot-api.azurewebsites.net';
983
+
984
+ // Preferred: mint a session JWT alongside the user lookup.
985
+ try {
986
+ const mintResp = await fetch(`${backendBaseUrl}/auth/mint-jwt-from-apikey`, {
987
+ method: 'POST',
988
+ headers: { 'Authorization': `Bearer ${loxiaApiKey}` },
989
+ });
990
+ if (mintResp.ok) {
991
+ const data = await mintResp.json();
992
+ const user = data.user;
993
+ const jwt = data.token;
994
+ if (user && jwt) {
995
+ await this._setLastAuthResult(recordOAuthResult({
996
+ user,
997
+ jwt,
998
+ hasApiKey: true,
999
+ }));
1000
+ return res.json({ success: true, user, mintedJwt: true });
1001
+ }
1002
+ }
1003
+ // 404 from older backends → fall through to /auth/me; other
1004
+ // non-2xx → also fall through (the user record is still
1005
+ // worth caching even if we couldn't mint a JWT).
1006
+ } catch (mintErr) {
1007
+ this.logger?.warn('mint-jwt-from-apikey failed; falling back to /auth/me', { error: mintErr.message });
1008
+ }
1009
+
1010
+ // Fallback: just identify the user, no JWT.
973
1011
  const response = await fetch(`${backendBaseUrl}/auth/me`, {
974
1012
  headers: { 'Authorization': `Bearer ${loxiaApiKey}` }
975
1013
  });
@@ -982,15 +1020,13 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
982
1020
  const user = data.user || data;
983
1021
 
984
1022
  // Cache the resolved user for subsequent /api/auth/status calls.
985
- // Preserves any JWT from a prior OAuth login (this path mints
986
- // no JWT of its own — it just links a user from an existing
987
- // API key). See utilities/authCache.js for the invariant.
1023
+ // Preserves any JWT from a prior OAuth login.
988
1024
  await this._setLastAuthResult(recordResolvedUser({
989
1025
  user,
990
1026
  prevCache: this.lastAuthResult,
991
1027
  }));
992
1028
 
993
- res.json({ success: true, user });
1029
+ res.json({ success: true, user, mintedJwt: false });
994
1030
  } catch (error) {
995
1031
  this.logger?.warn('Failed to resolve user from API key', { error: error.message });
996
1032
  res.json({ success: true, user: null, reason: 'fetch_error', error: error.message });
@@ -312,18 +312,42 @@ function makeTelegramHarness({ agentId = 'agent-y', chatId = 42 } = {}) {
312
312
  const logger = createMockLogger();
313
313
  const service = new TelegramService(logger);
314
314
  service.status = TELEGRAM_STATUS.CONNECTED;
315
- service.chatId = chatId;
316
- service.activeAgentIds.add(agentId);
315
+ // Multi-chat shape (no more global scalar `chatId`). Each chat carries
316
+ // its own activeAgentIds set + a thinking-message map. The relay
317
+ // pipeline iterates `service.chats` and only sends when the agent is
318
+ // active in that chat — same contract the production code obeys.
319
+ service.chats.set(String(chatId), {
320
+ type: 'private',
321
+ title: null,
322
+ addedAt: new Date().toISOString(),
323
+ watchEnabled: false,
324
+ lastAgentId: agentId,
325
+ activeAgentIds: new Set([agentId]),
326
+ thinkingByAgentId: new Map(),
327
+ });
317
328
  // The event handler short-circuits on `!this.bot`; populate a stub so the
318
- // relay pipeline runs. Our `_send` override is the real interception point.
319
- service.bot = { sendMessage: jest.fn() };
329
+ // relay pipeline runs. Our `_send` / sendPhoto / sendDocument overrides
330
+ // are the interception points.
331
+ service.bot = {
332
+ sendMessage: jest.fn().mockResolvedValue({ message_id: 1 }),
333
+ editMessageText: jest.fn().mockResolvedValue({ ok: true }),
334
+ deleteMessage: jest.fn().mockResolvedValue(undefined),
335
+ sendPhoto: jest.fn().mockResolvedValue({}),
336
+ sendDocument: jest.fn().mockResolvedValue({}),
337
+ sendChatAction: jest.fn().mockResolvedValue({}),
338
+ };
320
339
  service.setAgentPool({
321
340
  getAgent: jest.fn().mockResolvedValue({ id: agentId, name: 'Agent Y' }),
322
341
  });
323
342
 
324
- // Intercept the real underlying `_send` to avoid hitting node-telegram-bot-api.
343
+ // Intercept the real underlying `_sendRaw` (and its wrapper `_send`)
344
+ // to avoid hitting node-telegram-bot-api. Capturing at `_sendRaw`
345
+ // catches edit-placeholder and fresh-send paths uniformly.
325
346
  const sends = [];
326
- service._send = jest.fn(async (chatIdArg, text) => {
347
+ service._sendRaw = jest.fn(async (chatIdArg, text /* , opts */) => {
348
+ sends.push({ chatId: chatIdArg, text });
349
+ });
350
+ service._send = jest.fn(async (chatIdArg, text /* , opts */) => {
327
351
  sends.push({ chatId: chatIdArg, text });
328
352
  });
329
353
 
@@ -354,7 +378,10 @@ describe('Telegram relay — end-to-end via _handleBroadcastEvent', () => {
354
378
  },
355
379
  });
356
380
  expect(harness.sends).toHaveLength(1);
357
- expect(harness.sends[0].chatId).toBe(harness.chatId);
381
+ // The service normalises chat IDs to strings (Map keys); the
382
+ // harness factory builds with a numeric `chatId` so we coerce
383
+ // before comparing.
384
+ expect(String(harness.sends[0].chatId)).toBe(String(harness.chatId));
358
385
  expect(harness.sends[0].text).toContain('hi from agent');
359
386
  });
360
387
 
@@ -393,8 +420,13 @@ describe('Telegram relay — end-to-end via _handleBroadcastEvent', () => {
393
420
  expect(harness.sends.map(s => s.text).join('|')).toMatch(/A.*B.*C/s);
394
421
  });
395
422
 
396
- test('agent not in activeAgentIds → nothing sent', async () => {
397
- harness.service.activeAgentIds.clear();
423
+ test('agent not in any chat\'s activeAgentIds → nothing sent', async () => {
424
+ // Multi-chat refactor: activeAgentIds is now per-chat state. Drop
425
+ // the agent from every chat to simulate "user has stopped
426
+ // following this agent everywhere".
427
+ for (const state of harness.service.chats.values()) {
428
+ state.activeAgentIds.clear();
429
+ }
398
430
  await harness.service._handleBroadcastEvent({
399
431
  type: 'stream_complete',
400
432
  data: {
@@ -434,9 +466,14 @@ describe('Telegram relay — end-to-end via _handleBroadcastEvent', () => {
434
466
  expect(harness.sends[0].text).not.toContain('memory');
435
467
  });
436
468
 
437
- test('getBridgedChannels returns the telegram alias when bridged, empty otherwise', () => {
438
- expect(harness.service.getBridgedChannels(harness.agentId))
439
- .toEqual([{ alias: 'telegram', label: 'Telegram chat' }]);
469
+ test('getBridgedChannels returns per-chat aliases plus the bare "telegram" alias', () => {
470
+ // Multi-chat: one alias per chat the agent is active in, plus a
471
+ // bare `telegram` alias for agents that don't know per-chat
472
+ // addressing. With one chat registered (chatId=42), we expect:
473
+ // - `telegram:chat-42` — chat-scoped alias
474
+ // - `telegram` — broadcast-friendly fallback alias
475
+ const aliases = harness.service.getBridgedChannels(harness.agentId).map(c => c.alias);
476
+ expect(aliases).toEqual(expect.arrayContaining(['telegram:chat-42', 'telegram']));
440
477
  expect(harness.service.getBridgedChannels('other-agent')).toEqual([]);
441
478
  });
442
479
  });
@@ -271,12 +271,16 @@ describe('describeSource', () => {
271
271
  expect(describeSource(src)).toBe('Message by alice from Telegram > Ops Chat');
272
272
  });
273
273
 
274
- test('Telegram private chat', () => {
274
+ test('Telegram private chat — collapsed to "from Telegram" (no user/DM noise)', () => {
275
+ // In a private DM the chat has exactly one human; spelling out
276
+ // the username + a redundant "> DM" was just header bloat that
277
+ // pushed real content out of context. The agent still knows the
278
+ // channel is Telegram. Group chats keep the full attribution.
275
279
  const src = createTelegramSource({
276
280
  chat: { id: 1, type: 'private' },
277
281
  from: { username: 'alice' },
278
282
  });
279
- expect(describeSource(src)).toBe('Message by alice from Telegram > DM');
283
+ expect(describeSource(src)).toBe('from Telegram');
280
284
  });
281
285
 
282
286
  test('Telegram group with no title falls back to chat id', () => {