onbuzz 3.9.10 → 4.0.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 (955) hide show
  1. package/package.json +1 -1
  2. package/src/core/__tests__/agentScheduler.test.js +129 -0
  3. package/src/core/agentScheduler.js +554 -64
  4. package/src/index.js +8 -0
  5. package/src/interfaces/webServer.js +288 -0
  6. package/src/services/__tests__/channelFilter.test.js +264 -0
  7. package/src/services/__tests__/channelRelay.integration.test.js +496 -0
  8. package/src/services/__tests__/discordService.integration.test.js +10 -10
  9. package/src/services/__tests__/discordService.test.js +14 -7
  10. package/src/services/aiService.js +10 -3
  11. package/src/services/channelFilter.js +137 -0
  12. package/src/services/discordService.js +103 -19
  13. package/src/services/telegramService.js +58 -1
  14. package/src/tools/fileSystemTool.js +27 -3
  15. package/src/tools/openaiFunctionSchemas.js +270 -0
  16. package/src/tools/taskManagerTool.js +35 -2
  17. package/src/tools/terminalTool.js +23 -2
  18. package/src/utilities/constants.js +9 -0
  19. package/web-ui/build/index.html +2 -2
  20. package/web-ui/build/static/1c-D0gS3Hso.js +1 -0
  21. package/web-ui/build/static/abap-CyCKEEhS.js +1 -0
  22. package/web-ui/build/static/abnf-BZBn0pag.js +1 -0
  23. package/web-ui/build/static/abnf-BpCrg_Bf.js +1 -0
  24. package/web-ui/build/static/accesslog-DuTggsRZ.js +1 -0
  25. package/web-ui/build/static/actionscript-Ba9yLObR.js +1 -0
  26. package/web-ui/build/static/actionscript-C_BTnWxb.js +1 -0
  27. package/web-ui/build/static/ada-B69_itVh.js +1 -0
  28. package/web-ui/build/static/ada-DoeTM_BQ.js +1 -0
  29. package/web-ui/build/static/agda-jCpnVEpX.js +1 -0
  30. package/web-ui/build/static/al-CakFGn97.js +1 -0
  31. package/web-ui/build/static/angelscript-CnSUNIGj.js +1 -0
  32. package/web-ui/build/static/antlr4-Cn-R7SWD.js +1 -0
  33. package/web-ui/build/static/apache-jWzYeO33.js +1 -0
  34. package/web-ui/build/static/apacheconf-Qf6ccteC.js +1 -0
  35. package/web-ui/build/static/apex-BBFeLnmZ.js +1 -0
  36. package/web-ui/build/static/apl-Id4G-9pR.js +1 -0
  37. package/web-ui/build/static/applescript-Cndkqqg_.js +1 -0
  38. package/web-ui/build/static/applescript-De2uOrG8.js +1 -0
  39. package/web-ui/build/static/aql-Bx0hBEFP.js +1 -0
  40. package/web-ui/build/static/arcade-kv3B2d64.js +1 -0
  41. package/web-ui/build/static/arduino-Di5etN7-.js +1 -0
  42. package/web-ui/build/static/arduino-dzzVGXPJ.js +1 -0
  43. package/web-ui/build/static/arff-vVmlJyxT.js +1 -0
  44. package/web-ui/build/static/armasm-CLLemW4j.js +1 -0
  45. package/web-ui/build/static/asciidoc-5N0GIB1H.js +1 -0
  46. package/web-ui/build/static/asciidoc-BUQcC9k5.js +1 -0
  47. package/web-ui/build/static/asm6502-DrvbjZqg.js +1 -0
  48. package/web-ui/build/static/asmatmel-DXaAmo9p.js +1 -0
  49. package/web-ui/build/static/aspectj-QEbU6lqv.js +1 -0
  50. package/web-ui/build/static/aspnet-D1DOd55H.js +1 -0
  51. package/web-ui/build/static/autohotkey-CeN6Nxl7.js +1 -0
  52. package/web-ui/build/static/autohotkey-DK33Y-ag.js +1 -0
  53. package/web-ui/build/static/autoit-Ce15EHmT.js +1 -0
  54. package/web-ui/build/static/autoit-Du48dS3x.js +1 -0
  55. package/web-ui/build/static/avisynth-CTNNDQJu.js +1 -0
  56. package/web-ui/build/static/avrasm-U3bAmy_8.js +1 -0
  57. package/web-ui/build/static/avro-idl-hdYq5Y_G.js +1 -0
  58. package/web-ui/build/static/awk-D_y_Ybkz.js +1 -0
  59. package/web-ui/build/static/axapta-BtorzWAb.js +1 -0
  60. package/web-ui/build/static/bash-C7jHPzRr.js +1 -0
  61. package/web-ui/build/static/bash-C8rx4ZX7.js +1 -0
  62. package/web-ui/build/static/basic-BnB1QbT9.js +1 -0
  63. package/web-ui/build/static/basic-C3lmrCJn.js +1 -0
  64. package/web-ui/build/static/batch-D3zfZMkE.js +1 -0
  65. package/web-ui/build/static/bbcode-CcaWY4r6.js +1 -0
  66. package/web-ui/build/static/bicep-BTSNjNeE.js +1 -0
  67. package/web-ui/build/static/birb-FlitQ-CB.js +1 -0
  68. package/web-ui/build/static/bison-BwUeAPik.js +1 -0
  69. package/web-ui/build/static/bnf-BO0epnqT.js +1 -0
  70. package/web-ui/build/static/bnf-Dr7Yhkhf.js +1 -0
  71. package/web-ui/build/static/brainfuck-CQXtVvdr.js +1 -0
  72. package/web-ui/build/static/brainfuck-DBI8WFED.js +1 -0
  73. package/web-ui/build/static/brightscript-DMCw9cpk.js +1 -0
  74. package/web-ui/build/static/bro-DLuuGrl1.js +1 -0
  75. package/web-ui/build/static/bsl-YJucc4YV.js +1 -0
  76. package/web-ui/build/static/c-DhDv7jSS.js +1 -0
  77. package/web-ui/build/static/c-DxhyzKko.js +1 -0
  78. package/web-ui/build/static/c-like-DlgSkBV0.js +1 -0
  79. package/web-ui/build/static/cal-l1d2rfZn.js +1 -0
  80. package/web-ui/build/static/capnproto-dj8ChcGe.js +1 -0
  81. package/web-ui/build/static/ceylon-D54yMfbT.js +1 -0
  82. package/web-ui/build/static/cfscript-D6rZc4oz.js +1 -0
  83. package/web-ui/build/static/chaiscript-C5TnPhY1.js +1 -0
  84. package/web-ui/build/static/cil-OfdzNvKT.js +1 -0
  85. package/web-ui/build/static/clean-CIKWd5m_.js +1 -0
  86. package/web-ui/build/static/clojure-DPPjCSD9.js +1 -0
  87. package/web-ui/build/static/clojure-E4hINJlB.js +1 -0
  88. package/web-ui/build/static/clojure-repl-ByPwVP0v.js +1 -0
  89. package/web-ui/build/static/cmake-EmgODR4I.js +1 -0
  90. package/web-ui/build/static/cmake-FzVdKoPQ.js +1 -0
  91. package/web-ui/build/static/cobol-BCywZ9YX.js +1 -0
  92. package/web-ui/build/static/coffeescript-B3PJfOGT.js +1 -0
  93. package/web-ui/build/static/coffeescript-Cn6ayg_l.js +1 -0
  94. package/web-ui/build/static/concurnas-CDZuVXuU.js +1 -0
  95. package/web-ui/build/static/coq-CmxamUdH.js +1 -0
  96. package/web-ui/build/static/coq-OIzJsY4F.js +1 -0
  97. package/web-ui/build/static/cos-DGL5rP0B.js +1 -0
  98. package/web-ui/build/static/cpp-6bJ9ZCLp.js +1 -0
  99. package/web-ui/build/static/cpp-CnpCPPE0.js +1 -0
  100. package/web-ui/build/static/crmsh-UqfNCx22.js +1 -0
  101. package/web-ui/build/static/crystal-BZPfo8wh.js +1 -0
  102. package/web-ui/build/static/crystal-BmnmtxvU.js +1 -0
  103. package/web-ui/build/static/csharp-Ddd4cQJM.js +1 -0
  104. package/web-ui/build/static/csharp-Ozmwd4H7.js +1 -0
  105. package/web-ui/build/static/cshtml-CKUifIKv.js +1 -0
  106. package/web-ui/build/static/csp-DIKKHabm.js +1 -0
  107. package/web-ui/build/static/csp-DVNj8KoC.js +1 -0
  108. package/web-ui/build/static/css-C5xXuaIa.js +1 -0
  109. package/web-ui/build/static/css-extras-BcO-SjvT.js +1 -0
  110. package/web-ui/build/static/csv-Ckfvef5r.js +1 -0
  111. package/web-ui/build/static/cypher-nFX3ujhC.js +1 -0
  112. package/web-ui/build/static/d-C51vBcAN.js +1 -0
  113. package/web-ui/build/static/d-C5Zzmfpj.js +1 -0
  114. package/web-ui/build/static/dart-DTgXq_zq.js +1 -0
  115. package/web-ui/build/static/dart-nEf62Xtl.js +1 -0
  116. package/web-ui/build/static/dataweave-BBu_SXNo.js +1 -0
  117. package/web-ui/build/static/dax-BgSY6VXv.js +1 -0
  118. package/web-ui/build/static/delphi-BsEFn1Dg.js +1 -0
  119. package/web-ui/build/static/dhall-DZLoRbRq.js +1 -0
  120. package/web-ui/build/static/diff-BigjWm8-.js +1 -0
  121. package/web-ui/build/static/diff-GaoenF5U.js +1 -0
  122. package/web-ui/build/static/django-BHquQxg_.js +1 -0
  123. package/web-ui/build/static/django-BklTsfN1.js +1 -0
  124. package/web-ui/build/static/dns-Fye2v3C_.js +1 -0
  125. package/web-ui/build/static/dns-zone-file-Cl9DxAn6.js +1 -0
  126. package/web-ui/build/static/docker-ByXHv0Ly.js +1 -0
  127. package/web-ui/build/static/dockerfile-C3JvS7wx.js +1 -0
  128. package/web-ui/build/static/dos-DZjvZtlb.js +1 -0
  129. package/web-ui/build/static/dot-Ce9RBw-P.js +1 -0
  130. package/web-ui/build/static/dsconfig-CqzyFCWR.js +1 -0
  131. package/web-ui/build/static/dts-CzmHan27.js +1 -0
  132. package/web-ui/build/static/dust-ooMZaltT.js +1 -0
  133. package/web-ui/build/static/ebnf-BQTW3VN9.js +1 -0
  134. package/web-ui/build/static/ebnf-BWQPIMhj.js +1 -0
  135. package/web-ui/build/static/editorconfig-ChULEndb.js +1 -0
  136. package/web-ui/build/static/eiffel-DNf4Lf6d.js +1 -0
  137. package/web-ui/build/static/ejs-BN91k0H9.js +1 -0
  138. package/web-ui/build/static/elixir-BsUN2TJ3.js +1 -0
  139. package/web-ui/build/static/elixir-DowOmwjw.js +1 -0
  140. package/web-ui/build/static/elm-BR0-AOlB.js +1 -0
  141. package/web-ui/build/static/elm-CyQ-Tu1y.js +1 -0
  142. package/web-ui/build/static/erb-C3-ICRZC.js +1 -0
  143. package/web-ui/build/static/erb-CDwwnVfP.js +1 -0
  144. package/web-ui/build/static/erlang-CkKAvBqC.js +1 -0
  145. package/web-ui/build/static/erlang-b8hjzYg_.js +1 -0
  146. package/web-ui/build/static/erlang-repl-gGfh3Gx4.js +1 -0
  147. package/web-ui/build/static/etlua-DD1BETje.js +1 -0
  148. package/web-ui/build/static/excel-BHUhNjbb.js +1 -0
  149. package/web-ui/build/static/excel-formula-pygAkTSb.js +1 -0
  150. package/web-ui/build/static/factor-DGtAXbeO.js +1 -0
  151. package/web-ui/build/static/false-CmwPZZMx.js +1 -0
  152. package/web-ui/build/static/firestore-security-rules-BPVh7g3V.js +1 -0
  153. package/web-ui/build/static/fix-D0X2IrLW.js +1 -0
  154. package/web-ui/build/static/flix-B_K9PtSC.js +1 -0
  155. package/web-ui/build/static/flow-Bj8UDWFS.js +1 -0
  156. package/web-ui/build/static/fortran-CVjlvxYP.js +1 -0
  157. package/web-ui/build/static/fortran-CeuwkeSi.js +1 -0
  158. package/web-ui/build/static/fsharp-7ZnhHRI2.js +1 -0
  159. package/web-ui/build/static/fsharp-Dg0zkEUM.js +1 -0
  160. package/web-ui/build/static/ftl-DTiv91OH.js +1 -0
  161. package/web-ui/build/static/gams-mzIliqa9.js +1 -0
  162. package/web-ui/build/static/gap-CZy17Yrg.js +1 -0
  163. package/web-ui/build/static/gauss-eN8ZSPsu.js +1 -0
  164. package/web-ui/build/static/gcode-BilRDZ1d.js +1 -0
  165. package/web-ui/build/static/gcode-DgLXH4R9.js +1 -0
  166. package/web-ui/build/static/gdscript-ZYuV2APS.js +1 -0
  167. package/web-ui/build/static/gedcom-0kGxJiZ9.js +1 -0
  168. package/web-ui/build/static/gherkin-CCSGpV3s.js +1 -0
  169. package/web-ui/build/static/gherkin-DGxXFCBT.js +1 -0
  170. package/web-ui/build/static/git-CdLGzlwT.js +1 -0
  171. package/web-ui/build/static/glsl-BtFVLAdf.js +1 -0
  172. package/web-ui/build/static/glsl-pOLV_i61.js +1 -0
  173. package/web-ui/build/static/gml-BvRYdpYB.js +1 -0
  174. package/web-ui/build/static/gml-kixDldbq.js +1 -0
  175. package/web-ui/build/static/gn-B0j6r1ZR.js +1 -0
  176. package/web-ui/build/static/go-0gVqv26H.js +1 -0
  177. package/web-ui/build/static/go-hMMVdAxn.js +1 -0
  178. package/web-ui/build/static/go-module-nQEPOPuc.js +1 -0
  179. package/web-ui/build/static/golo-Dm43VBu7.js +1 -0
  180. package/web-ui/build/static/gradle-CHC1_Cae.js +1 -0
  181. package/web-ui/build/static/graphql-0VBsLded.js +1 -0
  182. package/web-ui/build/static/groovy-D8pgT7Gh.js +1 -0
  183. package/web-ui/build/static/groovy-LYh6lufY.js +1 -0
  184. package/web-ui/build/static/haml-D7TlUCYV.js +1 -0
  185. package/web-ui/build/static/haml-DM_YbLsX.js +1 -0
  186. package/web-ui/build/static/handlebars-C6s9z8yY.js +1 -0
  187. package/web-ui/build/static/handlebars-MmYUBbhF.js +1 -0
  188. package/web-ui/build/static/haskell-WDNKcSr-.js +1 -0
  189. package/web-ui/build/static/haskell-uN4RNceQ.js +1 -0
  190. package/web-ui/build/static/haxe-BfngEDpC.js +1 -0
  191. package/web-ui/build/static/haxe-Di7jSobz.js +1 -0
  192. package/web-ui/build/static/hcl-CCY9WaU5.js +1 -0
  193. package/web-ui/build/static/hlsl-BZeRODlS.js +1 -0
  194. package/web-ui/build/static/hoon-CYgEwHo6.js +1 -0
  195. package/web-ui/build/static/hpkp-CDGRQT6H.js +1 -0
  196. package/web-ui/build/static/hsp-Bd3e6SwQ.js +1 -0
  197. package/web-ui/build/static/hsts-BOUlTJ6c.js +1 -0
  198. package/web-ui/build/static/htmlbars-BPiYH0_n.js +1 -0
  199. package/web-ui/build/static/http-BX5oUCxR.js +1 -0
  200. package/web-ui/build/static/http-DVroDmj6.js +1 -0
  201. package/web-ui/build/static/hy-BCcF_QHP.js +1 -0
  202. package/web-ui/build/static/ichigojam-BiISBr0y.js +1 -0
  203. package/web-ui/build/static/icon-ClvK1B41.js +1 -0
  204. package/web-ui/build/static/icu-message-format-DbYDqmui.js +1 -0
  205. package/web-ui/build/static/idris-DUkwgVYa.js +1 -0
  206. package/web-ui/build/static/iecst-Dsthm7u9.js +1 -0
  207. package/web-ui/build/static/ignore-C6sD6BBI.js +1 -0
  208. package/web-ui/build/static/index-BJi0QI4y.js +13 -0
  209. package/web-ui/build/static/index-BUtXAjd5.css +1 -0
  210. package/web-ui/build/static/index-C0yagaf_.js +1 -0
  211. package/web-ui/build/static/index-rmQCMu11.js +834 -0
  212. package/web-ui/build/static/inform7-BhpCpaCI.js +1 -0
  213. package/web-ui/build/static/inform7-CypdUZ2H.js +1 -0
  214. package/web-ui/build/static/ini-D3bMjLFy.js +1 -0
  215. package/web-ui/build/static/ini-mZ4DmMFa.js +1 -0
  216. package/web-ui/build/static/io-CAPenDjW.js +1 -0
  217. package/web-ui/build/static/irpf90-DMLZfHOl.js +1 -0
  218. package/web-ui/build/static/isbl-C-heO4bo.js +1 -0
  219. package/web-ui/build/static/j-CYnuDyva.js +1 -0
  220. package/web-ui/build/static/java-BwxvO1xU.js +1 -0
  221. package/web-ui/build/static/java-DrS-TIOG.js +1 -0
  222. package/web-ui/build/static/javadoc-C7g1nvf0.js +1 -0
  223. package/web-ui/build/static/javadoclike-BccMcxyJ.js +1 -0
  224. package/web-ui/build/static/javascript-BTLBzg4X.js +1 -0
  225. package/web-ui/build/static/javastacktrace-DMfJDkdg.js +1 -0
  226. package/web-ui/build/static/jboss-cli-Bod2dA9a.js +1 -0
  227. package/web-ui/build/static/jexl-N6nsHGWj.js +1 -0
  228. package/web-ui/build/static/jolie-CsrX6xYs.js +1 -0
  229. package/web-ui/build/static/jq-UVBu2R02.js +1 -0
  230. package/web-ui/build/static/js-extras-CuwwBN5k.js +1 -0
  231. package/web-ui/build/static/js-templates-DIBe0p7a.js +1 -0
  232. package/web-ui/build/static/jsdoc-DtDbuWdy.js +1 -0
  233. package/web-ui/build/static/json-BI3FHwe1.js +1 -0
  234. package/web-ui/build/static/json-P6SuA8aJ.js +1 -0
  235. package/web-ui/build/static/json5-CRP2homn.js +1 -0
  236. package/web-ui/build/static/jsonp-9ElDctKO.js +1 -0
  237. package/web-ui/build/static/jsstacktrace-D2Fl9d_V.js +1 -0
  238. package/web-ui/build/static/jsx-CQTwBhTH.js +1 -0
  239. package/web-ui/build/static/julia-DuUl4PLy.js +1 -0
  240. package/web-ui/build/static/julia-nGiK_b-G.js +1 -0
  241. package/web-ui/build/static/julia-repl-CZXv3gUI.js +1 -0
  242. package/web-ui/build/static/keepalived-BXuewLUw.js +1 -0
  243. package/web-ui/build/static/keyman-qJzqzYn7.js +1 -0
  244. package/web-ui/build/static/kotlin-B9n_utKk.js +1 -0
  245. package/web-ui/build/static/kotlin-haL4BAuN.js +1 -0
  246. package/web-ui/build/static/kumir-B3qOyQmg.js +1 -0
  247. package/web-ui/build/static/kusto-DBaBX58G.js +1 -0
  248. package/web-ui/build/static/lasso-BKSAUuYM.js +1 -0
  249. package/web-ui/build/static/latex-BRrZyaQT.js +1 -0
  250. package/web-ui/build/static/latex-m1lQaqf1.js +1 -0
  251. package/web-ui/build/static/latte-eiBbKf65.js +1 -0
  252. package/web-ui/build/static/ldif-y2LZUUyZ.js +1 -0
  253. package/web-ui/build/static/leaf-hIUS2wti.js +1 -0
  254. package/web-ui/build/static/less-Bo6R8taI.js +1 -0
  255. package/web-ui/build/static/less-DuKmENyN.js +1 -0
  256. package/web-ui/build/static/lilypond-BBpJhRQ9.js +1 -0
  257. package/web-ui/build/static/liquid-CAprdcX2.js +1 -0
  258. package/web-ui/build/static/lisp-Bf1XYdUw.js +1 -0
  259. package/web-ui/build/static/lisp-CK4NShQS.js +1 -0
  260. package/web-ui/build/static/livecodeserver-D-7DT8n5.js +1 -0
  261. package/web-ui/build/static/livescript-C53jjB4u.js +1 -0
  262. package/web-ui/build/static/livescript-C6BLAugR.js +1 -0
  263. package/web-ui/build/static/llvm-DwsfQGGS.js +1 -0
  264. package/web-ui/build/static/llvm-x2WOwJip.js +1 -0
  265. package/web-ui/build/static/log-ycx4d2kp.js +1 -0
  266. package/web-ui/build/static/lolcode-kQPJj9kJ.js +1 -0
  267. package/web-ui/build/static/lsl-DYPjhHe3.js +1 -0
  268. package/web-ui/build/static/lua-DbyfdtuA.js +1 -0
  269. package/web-ui/build/static/lua-k-RdWswg.js +1 -0
  270. package/web-ui/build/static/magma-C0BRcgX4.js +1 -0
  271. package/web-ui/build/static/makefile-CZQdxsni.js +1 -0
  272. package/web-ui/build/static/makefile-D-G1cICu.js +1 -0
  273. package/web-ui/build/static/markdown-BXgB-fA-.js +1 -0
  274. package/web-ui/build/static/markdown-Ce-22f29.js +1 -0
  275. package/web-ui/build/static/markup-templating-BpdQJTBM.js +1 -0
  276. package/web-ui/build/static/mathematica-IkAnPpu4.js +1 -0
  277. package/web-ui/build/static/matlab-D00TnflQ.js +1 -0
  278. package/web-ui/build/static/matlab-D9nj0uha.js +1 -0
  279. package/web-ui/build/static/maxima-C7a7zrie.js +1 -0
  280. package/web-ui/build/static/maxscript-BV3koaAu.js +1 -0
  281. package/web-ui/build/static/mel-C7fC2vR0.js +1 -0
  282. package/web-ui/build/static/mel-DUFmm8LA.js +1 -0
  283. package/web-ui/build/static/mercury-D0zWajPt.js +1 -0
  284. package/web-ui/build/static/mermaid-BcIFh8lC.js +1 -0
  285. package/web-ui/build/static/mipsasm-Ch8zsfD7.js +1 -0
  286. package/web-ui/build/static/mizar-D72L8LdH.js +1 -0
  287. package/web-ui/build/static/mizar-H2a4eeQU.js +1 -0
  288. package/web-ui/build/static/mojolicious-CXGZY6wR.js +1 -0
  289. package/web-ui/build/static/mongodb-ycbZ-Gtu.js +1 -0
  290. package/web-ui/build/static/monkey-B1PWgo4u.js +1 -0
  291. package/web-ui/build/static/monkey-BTLKqHiE.js +1 -0
  292. package/web-ui/build/static/moonscript-CGujt4hQ.js +1 -0
  293. package/web-ui/build/static/moonscript-Cd65ANue.js +1 -0
  294. package/web-ui/build/static/n1ql-5SoXRWF5.js +1 -0
  295. package/web-ui/build/static/n1ql-SrTc8dgR.js +1 -0
  296. package/web-ui/build/static/n4js-DcydNbvU.js +1 -0
  297. package/web-ui/build/static/nand2tetris-hdl-DgTjIFTD.js +1 -0
  298. package/web-ui/build/static/naniscript-Cgu0Uhgv.js +1 -0
  299. package/web-ui/build/static/nasm-C6Jwlhb3.js +1 -0
  300. package/web-ui/build/static/neon-BlmLz-44.js +1 -0
  301. package/web-ui/build/static/nevod-QYVtYYuZ.js +1 -0
  302. package/web-ui/build/static/nginx-BuLLVaOi.js +1 -0
  303. package/web-ui/build/static/nginx-D32yC6aV.js +1 -0
  304. package/web-ui/build/static/nim-lYMS-Zao.js +1 -0
  305. package/web-ui/build/static/nim-mOq8l1DZ.js +1 -0
  306. package/web-ui/build/static/nix-BF2uUjB0.js +1 -0
  307. package/web-ui/build/static/nix-CvXMc2Qe.js +1 -0
  308. package/web-ui/build/static/node-repl-b6WSKwpJ.js +1 -0
  309. package/web-ui/build/static/nsis-By4cMroz.js +1 -0
  310. package/web-ui/build/static/nsis-CdtEDB4h.js +1 -0
  311. package/web-ui/build/static/objectivec-1qRjQ45C.js +1 -0
  312. package/web-ui/build/static/objectivec-B_fabLIN.js +1 -0
  313. package/web-ui/build/static/ocaml-CgNFmQRO.js +1 -0
  314. package/web-ui/build/static/ocaml-RYK_k0qm.js +1 -0
  315. package/web-ui/build/static/opencl-DS8fpnDf.js +1 -0
  316. package/web-ui/build/static/openqasm-DJaB3Rq-.js +1 -0
  317. package/web-ui/build/static/openscad-CG2Cr9_f.js +1 -0
  318. package/web-ui/build/static/oxygene-C5StnXkF.js +1 -0
  319. package/web-ui/build/static/oz-Chp4Q4tx.js +1 -0
  320. package/web-ui/build/static/parigp-CHrkrXXH.js +1 -0
  321. package/web-ui/build/static/parser-oClS8RsF.js +1 -0
  322. package/web-ui/build/static/parser3-DAnZ8BBa.js +1 -0
  323. package/web-ui/build/static/pascal-C3UXKTAg.js +1 -0
  324. package/web-ui/build/static/pascaligo-bQ2eEItJ.js +1 -0
  325. package/web-ui/build/static/pcaxis-Cb18v5lb.js +1 -0
  326. package/web-ui/build/static/peoplecode-DSinbacy.js +1 -0
  327. package/web-ui/build/static/perl-CJyKzdWx.js +1 -0
  328. package/web-ui/build/static/perl-DPC7B2HS.js +1 -0
  329. package/web-ui/build/static/pf-CufleM0I.js +1 -0
  330. package/web-ui/build/static/pgsql-C_0MdqVp.js +1 -0
  331. package/web-ui/build/static/php-BO1Ap_Os.js +1 -0
  332. package/web-ui/build/static/php-CJgcNJVe.js +1 -0
  333. package/web-ui/build/static/php-extras-BXgszKUS.js +1 -0
  334. package/web-ui/build/static/php-template-Cb_xvIiQ.js +1 -0
  335. package/web-ui/build/static/phpdoc-BfOts4aJ.js +1 -0
  336. package/web-ui/build/static/plaintext-DN7uh6jc.js +1 -0
  337. package/web-ui/build/static/plsql-v3WUpEeY.js +1 -0
  338. package/web-ui/build/static/pony-DJxNA-H0.js +1 -0
  339. package/web-ui/build/static/powerquery-BtsNylnn.js +1 -0
  340. package/web-ui/build/static/powershell-C6cTgKNj.js +1 -0
  341. package/web-ui/build/static/powershell-w7qa2Po0.js +1 -0
  342. package/web-ui/build/static/processing-B4LQG2qT.js +1 -0
  343. package/web-ui/build/static/processing-sqZsG0Ty.js +1 -0
  344. package/web-ui/build/static/profile-BmJYpErx.js +1 -0
  345. package/web-ui/build/static/prolog-BesbmNtC.js +1 -0
  346. package/web-ui/build/static/prolog-Bhfih4kN.js +1 -0
  347. package/web-ui/build/static/promql-C0f632z2.js +1 -0
  348. package/web-ui/build/static/properties-D4QlRz8E.js +1 -0
  349. package/web-ui/build/static/properties-jKkliMyl.js +1 -0
  350. package/web-ui/build/static/protobuf-1DEpY6d3.js +1 -0
  351. package/web-ui/build/static/protobuf-BGXS-kPK.js +1 -0
  352. package/web-ui/build/static/psl-C0CZXE-V.js +1 -0
  353. package/web-ui/build/static/pug-BF9VjA3d.js +1 -0
  354. package/web-ui/build/static/puppet-DbCz1V2e.js +1 -0
  355. package/web-ui/build/static/puppet-sw6E5TP0.js +1 -0
  356. package/web-ui/build/static/pure-C7mJA0tr.js +1 -0
  357. package/web-ui/build/static/purebasic-BSMar56G.js +1 -0
  358. package/web-ui/build/static/purebasic-lZ85aQ75.js +1 -0
  359. package/web-ui/build/static/purescript-7W6hcoJU.js +1 -0
  360. package/web-ui/build/static/python-Cf1rHsAv.js +1 -0
  361. package/web-ui/build/static/python-D6YthG1T.js +1 -0
  362. package/web-ui/build/static/python-repl-L_ce-JlI.js +1 -0
  363. package/web-ui/build/static/q-C4jLiln2.js +1 -0
  364. package/web-ui/build/static/q-DbbElowk.js +1 -0
  365. package/web-ui/build/static/qml-BpzqRYBe.js +1 -0
  366. package/web-ui/build/static/qml-DhqooLOn.js +1 -0
  367. package/web-ui/build/static/qore-CDdWlH4L.js +1 -0
  368. package/web-ui/build/static/qsharp-CYjzWQn8.js +1 -0
  369. package/web-ui/build/static/r-C0m7OAlP.js +1 -0
  370. package/web-ui/build/static/r-nRzPzIPC.js +1 -0
  371. package/web-ui/build/static/racket-BMk7mOQz.js +1 -0
  372. package/web-ui/build/static/reason-BXQPEhQe.js +1 -0
  373. package/web-ui/build/static/reasonml-BX4tkmG7.js +1 -0
  374. package/web-ui/build/static/regex-I514pFOx.js +1 -0
  375. package/web-ui/build/static/rego-nryy7Qo5.js +1 -0
  376. package/web-ui/build/static/renpy-73dSR30u.js +1 -0
  377. package/web-ui/build/static/rest-BVkqAn_D.js +1 -0
  378. package/web-ui/build/static/rib-CkA1SeIw.js +1 -0
  379. package/web-ui/build/static/rip-DdqP7xQ_.js +1 -0
  380. package/web-ui/build/static/roboconf-B1xFEP2z.js +1 -0
  381. package/web-ui/build/static/roboconf-MHZ9iUN8.js +1 -0
  382. package/web-ui/build/static/robotframework-Be6JB4Sm.js +1 -0
  383. package/web-ui/build/static/routeros-BDbHsrl3.js +1 -0
  384. package/web-ui/build/static/rsl-vBbR8fM2.js +1 -0
  385. package/web-ui/build/static/ruby-Bl6coIpX.js +1 -0
  386. package/web-ui/build/static/ruby-CYoX7aZ3.js +1 -0
  387. package/web-ui/build/static/ruleslanguage-CNda0rO_.js +1 -0
  388. package/web-ui/build/static/rust-Cn7CeLWb.js +1 -0
  389. package/web-ui/build/static/rust-DqfPHA-4.js +1 -0
  390. package/web-ui/build/static/sas-DX4nVHMx.js +1 -0
  391. package/web-ui/build/static/sas-TP86Lr_H.js +1 -0
  392. package/web-ui/build/static/sass-DLbsRbZq.js +1 -0
  393. package/web-ui/build/static/scala-BnuBUE7N.js +1 -0
  394. package/web-ui/build/static/scala-e0xCO3PH.js +1 -0
  395. package/web-ui/build/static/scheme-CgksT1_b.js +1 -0
  396. package/web-ui/build/static/scheme-wKIEujhs.js +1 -0
  397. package/web-ui/build/static/scilab-BK5XtNGf.js +1 -0
  398. package/web-ui/build/static/scss-CgF0LqaR.js +1 -0
  399. package/web-ui/build/static/scss-DtfwOUSt.js +1 -0
  400. package/web-ui/build/static/shell-mV_H_B9k.js +1 -0
  401. package/web-ui/build/static/shell-session-CcycyI-F.js +1 -0
  402. package/web-ui/build/static/smali-DUHlxZcA.js +1 -0
  403. package/web-ui/build/static/smali-vgrIyB1v.js +1 -0
  404. package/web-ui/build/static/smalltalk-C0Ge9l_D.js +1 -0
  405. package/web-ui/build/static/smalltalk-CXwx9xen.js +1 -0
  406. package/web-ui/build/static/smarty-ATfkwbr-.js +1 -0
  407. package/web-ui/build/static/sml-CPHHv48a.js +1 -0
  408. package/web-ui/build/static/sml-D8zKZZ0g.js +1 -0
  409. package/web-ui/build/static/solidity-DU2sGoWA.js +1 -0
  410. package/web-ui/build/static/solution-file-D20yiaNa.js +1 -0
  411. package/web-ui/build/static/soy-NkZd2NuM.js +1 -0
  412. package/web-ui/build/static/sparql-CURkC9N5.js +1 -0
  413. package/web-ui/build/static/splunk-spl-DACtCZRc.js +1 -0
  414. package/web-ui/build/static/sqf-BEdMNLDm.js +1 -0
  415. package/web-ui/build/static/sqf-RqYJHX2k.js +1 -0
  416. package/web-ui/build/static/sql-Bgepr53d.js +1 -0
  417. package/web-ui/build/static/sql-CW0TRs77.js +1 -0
  418. package/web-ui/build/static/sql_more-C2HWexYA.js +1 -0
  419. package/web-ui/build/static/squirrel-B6wcVYWs.js +1 -0
  420. package/web-ui/build/static/stan-Dl3AavYY.js +1 -0
  421. package/web-ui/build/static/stan-RZ2M2r7-.js +1 -0
  422. package/web-ui/build/static/stata-PGzYv80j.js +1 -0
  423. package/web-ui/build/static/step21-yyjO2ozE.js +1 -0
  424. package/web-ui/build/static/stylus-CA7oCY6H.js +1 -0
  425. package/web-ui/build/static/stylus-CMppe6Nc.js +1 -0
  426. package/web-ui/build/static/subunit-CgXzRGNV.js +1 -0
  427. package/web-ui/build/static/swift-BEZPFJIt.js +1 -0
  428. package/web-ui/build/static/swift-N42216FZ.js +1 -0
  429. package/web-ui/build/static/systemd-DFn17zHD.js +1 -0
  430. package/web-ui/build/static/t4-cs-D2og3B0M.js +1 -0
  431. package/web-ui/build/static/t4-templating-D9rCAn0c.js +1 -0
  432. package/web-ui/build/static/t4-vb-DG0xTVDc.js +1 -0
  433. package/web-ui/build/static/taggerscript-C89CvllW.js +1 -0
  434. package/web-ui/build/static/tap-D19DYT30.js +1 -0
  435. package/web-ui/build/static/tap-ERFF4Ark.js +1 -0
  436. package/web-ui/build/static/tcl-BCrLy0kY.js +1 -0
  437. package/web-ui/build/static/tcl-Db3hH49l.js +1 -0
  438. package/web-ui/build/static/textile-C45CZf2E.js +1 -0
  439. package/web-ui/build/static/thrift-DPSiQbdQ.js +1 -0
  440. package/web-ui/build/static/toml-OY_aaWwT.js +1 -0
  441. package/web-ui/build/static/tp-B3eRQVO4.js +1 -0
  442. package/web-ui/build/static/tremor-BqAT46SE.js +1 -0
  443. package/web-ui/build/static/tsx-BCfhl9AT.js +1 -0
  444. package/web-ui/build/static/tt2-C0sqlstv.js +1 -0
  445. package/web-ui/build/static/turtle-ClBSXu8f.js +1 -0
  446. package/web-ui/build/static/twig-BxxoTcyR.js +1 -0
  447. package/web-ui/build/static/twig-D1iWWft8.js +1 -0
  448. package/web-ui/build/static/typescript-D92P7Q_T.js +1 -0
  449. package/web-ui/build/static/typescript-IMBE9asI.js +1 -0
  450. package/web-ui/build/static/typoscript-Ct5LqTJd.js +1 -0
  451. package/web-ui/build/static/unrealscript-DzhFlMW5.js +1 -0
  452. package/web-ui/build/static/uorazor-DR4IM7ll.js +1 -0
  453. package/web-ui/build/static/uri-D10KlPiP.js +1 -0
  454. package/web-ui/build/static/v-CHHzCtfa.js +1 -0
  455. package/web-ui/build/static/vala-ChoAAQZv.js +1 -0
  456. package/web-ui/build/static/vala-CsGoPWkE.js +1 -0
  457. package/web-ui/build/static/vbnet-BSMzhrci.js +1 -0
  458. package/web-ui/build/static/vbnet-tWgXxlpd.js +1 -0
  459. package/web-ui/build/static/vbscript-C5MSBjcM.js +1 -0
  460. package/web-ui/build/static/vbscript-html-DgC8phmk.js +1 -0
  461. package/web-ui/build/static/velocity-ChLZNkgf.js +1 -0
  462. package/web-ui/build/static/verilog-RKDyj9CP.js +1 -0
  463. package/web-ui/build/static/verilog-qAYw6v_5.js +1 -0
  464. package/web-ui/build/static/vhdl-CRSvweFg.js +1 -0
  465. package/web-ui/build/static/vhdl-DnTmxitY.js +1 -0
  466. package/web-ui/build/static/vim-CnOJH9xw.js +1 -0
  467. package/web-ui/build/static/vim-LKJY3Sb8.js +1 -0
  468. package/web-ui/build/static/visual-basic-DZTN8GNq.js +1 -0
  469. package/web-ui/build/static/warpscript-Bz5PHWGb.js +1 -0
  470. package/web-ui/build/static/wasm-DjXA7rVQ.js +1 -0
  471. package/web-ui/build/static/web-idl-qpPnV3-c.js +1 -0
  472. package/web-ui/build/static/wiki-h1S7Uj0l.js +1 -0
  473. package/web-ui/build/static/wolfram-BsqW0Evw.js +1 -0
  474. package/web-ui/build/static/wren-2NkHwSLr.js +1 -0
  475. package/web-ui/build/static/x86asm-D8Cg9MTd.js +1 -0
  476. package/web-ui/build/static/xeora-CIwPPgRx.js +1 -0
  477. package/web-ui/build/static/xl-DIsgBj_c.js +1 -0
  478. package/web-ui/build/static/xml-D19j4_jb.js +1 -0
  479. package/web-ui/build/static/xml-doc-DMtIXpse.js +1 -0
  480. package/web-ui/build/static/xojo-Yr0egAH7.js +1 -0
  481. package/web-ui/build/static/xquery-3A0gaIyY.js +1 -0
  482. package/web-ui/build/static/xquery-ondigVMj.js +1 -0
  483. package/web-ui/build/static/yaml-BC7GbQPc.js +1 -0
  484. package/web-ui/build/static/yaml-DvN1W_m1.js +1 -0
  485. package/web-ui/build/static/yang-BJH3-Oqi.js +1 -0
  486. package/web-ui/build/static/zephir-DsXXe3UC.js +1 -0
  487. package/web-ui/build/static/zig-9jAF8TxG.js +1 -0
  488. package/web-ui/build/static/1c-DUhJWQrP.js +0 -1
  489. package/web-ui/build/static/abap-D5pCv45A.js +0 -1
  490. package/web-ui/build/static/abnf-BqIdp1gH.js +0 -1
  491. package/web-ui/build/static/abnf-CBjlJif0.js +0 -1
  492. package/web-ui/build/static/accesslog-C5KlxDoB.js +0 -1
  493. package/web-ui/build/static/actionscript-CEdNWXaD.js +0 -1
  494. package/web-ui/build/static/actionscript-CgxJfO4L.js +0 -1
  495. package/web-ui/build/static/ada-Bdm6rSt3.js +0 -1
  496. package/web-ui/build/static/ada-Cqq140Rj.js +0 -1
  497. package/web-ui/build/static/agda-glonKdcN.js +0 -1
  498. package/web-ui/build/static/al-C_FHJHny.js +0 -1
  499. package/web-ui/build/static/angelscript-Rz4JX2Rq.js +0 -1
  500. package/web-ui/build/static/antlr4-D4LSk0Ay.js +0 -1
  501. package/web-ui/build/static/apache-BaMp4ZSC.js +0 -1
  502. package/web-ui/build/static/apacheconf-BVq0Zx-9.js +0 -1
  503. package/web-ui/build/static/apex-DdKma-_U.js +0 -1
  504. package/web-ui/build/static/apl-CXIfpQjm.js +0 -1
  505. package/web-ui/build/static/applescript-D92-mz1s.js +0 -1
  506. package/web-ui/build/static/applescript-eHzEb7oT.js +0 -1
  507. package/web-ui/build/static/aql-D_F7mVkg.js +0 -1
  508. package/web-ui/build/static/arcade-DgXn3lOp.js +0 -1
  509. package/web-ui/build/static/arduino-10f7W_Wz.js +0 -1
  510. package/web-ui/build/static/arduino-Bi8wBo3Q.js +0 -1
  511. package/web-ui/build/static/arff-DAZwwp1m.js +0 -1
  512. package/web-ui/build/static/armasm-4k-fm-WI.js +0 -1
  513. package/web-ui/build/static/asciidoc-9iyohD53.js +0 -1
  514. package/web-ui/build/static/asciidoc-BPxaG9gt.js +0 -1
  515. package/web-ui/build/static/asm6502-DlE-NUYG.js +0 -1
  516. package/web-ui/build/static/asmatmel-ykXUz67l.js +0 -1
  517. package/web-ui/build/static/aspectj-BkcGzoIw.js +0 -1
  518. package/web-ui/build/static/aspnet-B8bHvD3e.js +0 -1
  519. package/web-ui/build/static/autohotkey-BXgybckQ.js +0 -1
  520. package/web-ui/build/static/autohotkey-rJX88r3D.js +0 -1
  521. package/web-ui/build/static/autoit-BV42RCy-.js +0 -1
  522. package/web-ui/build/static/autoit-DtcYxn7t.js +0 -1
  523. package/web-ui/build/static/avisynth-B4vyExrv.js +0 -1
  524. package/web-ui/build/static/avrasm-hptGkmwL.js +0 -1
  525. package/web-ui/build/static/avro-idl-D6Eh5Tip.js +0 -1
  526. package/web-ui/build/static/awk-VZHEebeo.js +0 -1
  527. package/web-ui/build/static/axapta-MDY4Ol3-.js +0 -1
  528. package/web-ui/build/static/bash-CEVIQPNU.js +0 -1
  529. package/web-ui/build/static/bash-CQheSBd0.js +0 -1
  530. package/web-ui/build/static/basic-BNAC47vx.js +0 -1
  531. package/web-ui/build/static/basic-o0l9wI82.js +0 -1
  532. package/web-ui/build/static/batch-05P80ryo.js +0 -1
  533. package/web-ui/build/static/bbcode-CvQ1b2hw.js +0 -1
  534. package/web-ui/build/static/bicep-CfAYoZNS.js +0 -1
  535. package/web-ui/build/static/birb-JD-jZNqk.js +0 -1
  536. package/web-ui/build/static/bison-i3sQbLUm.js +0 -1
  537. package/web-ui/build/static/bnf-B5bYoRbA.js +0 -1
  538. package/web-ui/build/static/bnf-D98r2gkN.js +0 -1
  539. package/web-ui/build/static/brainfuck-BU_egZbB.js +0 -1
  540. package/web-ui/build/static/brainfuck-Df0tVgjY.js +0 -1
  541. package/web-ui/build/static/brightscript-DSvCPg0z.js +0 -1
  542. package/web-ui/build/static/bro-BBxgPL7i.js +0 -1
  543. package/web-ui/build/static/bsl-JrkU-4lx.js +0 -1
  544. package/web-ui/build/static/c-BWSIorgH.js +0 -1
  545. package/web-ui/build/static/c-BXBwfPOR.js +0 -1
  546. package/web-ui/build/static/c-like-4jLL6ZeZ.js +0 -1
  547. package/web-ui/build/static/cal-BUukjt45.js +0 -1
  548. package/web-ui/build/static/capnproto-DzfXkblk.js +0 -1
  549. package/web-ui/build/static/ceylon-C6eNUw7A.js +0 -1
  550. package/web-ui/build/static/cfscript-DtzcDoB6.js +0 -1
  551. package/web-ui/build/static/chaiscript-q5NSJZ6c.js +0 -1
  552. package/web-ui/build/static/cil-DXg6HnTF.js +0 -1
  553. package/web-ui/build/static/clean-DhrJyfi0.js +0 -1
  554. package/web-ui/build/static/clojure-DCN-fEKt.js +0 -1
  555. package/web-ui/build/static/clojure-aNTgtXL1.js +0 -1
  556. package/web-ui/build/static/clojure-repl-B_eFHp5m.js +0 -1
  557. package/web-ui/build/static/cmake-BDtm7sss.js +0 -1
  558. package/web-ui/build/static/cmake-Bj_M_zqn.js +0 -1
  559. package/web-ui/build/static/cobol-qo3jUBf5.js +0 -1
  560. package/web-ui/build/static/coffeescript-CIyOUYJ3.js +0 -1
  561. package/web-ui/build/static/coffeescript-CduS6q85.js +0 -1
  562. package/web-ui/build/static/concurnas-DtdAZDrQ.js +0 -1
  563. package/web-ui/build/static/coq-CN6lKK7F.js +0 -1
  564. package/web-ui/build/static/coq-DzGUbX5U.js +0 -1
  565. package/web-ui/build/static/cos-DFcou98i.js +0 -1
  566. package/web-ui/build/static/cpp-Dgg9pFUu.js +0 -1
  567. package/web-ui/build/static/cpp-PRuqGY7D.js +0 -1
  568. package/web-ui/build/static/crmsh-DLLfnotO.js +0 -1
  569. package/web-ui/build/static/crystal-BPylX4xG.js +0 -1
  570. package/web-ui/build/static/crystal-R1dH-Ebf.js +0 -1
  571. package/web-ui/build/static/csharp-CzwY39sl.js +0 -1
  572. package/web-ui/build/static/csharp-DJyymJhf.js +0 -1
  573. package/web-ui/build/static/cshtml-CwtJYmS1.js +0 -1
  574. package/web-ui/build/static/csp-Bj2DpAcY.js +0 -1
  575. package/web-ui/build/static/csp-xY5_PNPj.js +0 -1
  576. package/web-ui/build/static/css-DBGSwd91.js +0 -1
  577. package/web-ui/build/static/css-extras-BvlTqCpv.js +0 -1
  578. package/web-ui/build/static/csv-UTBn-Q9j.js +0 -1
  579. package/web-ui/build/static/cypher-BfzzS1h2.js +0 -1
  580. package/web-ui/build/static/d-BvamtLdb.js +0 -1
  581. package/web-ui/build/static/d-XpxNI5JF.js +0 -1
  582. package/web-ui/build/static/dart-BEM6fjpM.js +0 -1
  583. package/web-ui/build/static/dart-CsMrP4Ax.js +0 -1
  584. package/web-ui/build/static/dataweave-B-vfR-Jf.js +0 -1
  585. package/web-ui/build/static/dax-2WUcEUPn.js +0 -1
  586. package/web-ui/build/static/delphi-7XWS5oTs.js +0 -1
  587. package/web-ui/build/static/dhall-NWRUZH7l.js +0 -1
  588. package/web-ui/build/static/diff-AEgTdaYv.js +0 -1
  589. package/web-ui/build/static/diff-BRgtzr2U.js +0 -1
  590. package/web-ui/build/static/django-4bH3I4pv.js +0 -1
  591. package/web-ui/build/static/django-CrlKM5br.js +0 -1
  592. package/web-ui/build/static/dns-BSqNAZE3.js +0 -1
  593. package/web-ui/build/static/dns-zone-file-Di5cZlps.js +0 -1
  594. package/web-ui/build/static/docker-C9BRbp6h.js +0 -1
  595. package/web-ui/build/static/dockerfile-DbkS5WIL.js +0 -1
  596. package/web-ui/build/static/dos-per3p9hI.js +0 -1
  597. package/web-ui/build/static/dot-DjnTpyv1.js +0 -1
  598. package/web-ui/build/static/dsconfig-BjcpCNTB.js +0 -1
  599. package/web-ui/build/static/dts-DSWuKx2J.js +0 -1
  600. package/web-ui/build/static/dust-BCqihcI2.js +0 -1
  601. package/web-ui/build/static/ebnf-7ErhUPMF.js +0 -1
  602. package/web-ui/build/static/ebnf-CHADdlPD.js +0 -1
  603. package/web-ui/build/static/editorconfig--daZb_D-.js +0 -1
  604. package/web-ui/build/static/eiffel-C5zhT7HO.js +0 -1
  605. package/web-ui/build/static/ejs-ncnPF5oJ.js +0 -1
  606. package/web-ui/build/static/elixir-kFl2IHfo.js +0 -1
  607. package/web-ui/build/static/elixir-m8Rwrydm.js +0 -1
  608. package/web-ui/build/static/elm-CvywOdPd.js +0 -1
  609. package/web-ui/build/static/elm-Dsie_raS.js +0 -1
  610. package/web-ui/build/static/erb-BvkeA6hu.js +0 -1
  611. package/web-ui/build/static/erb-CtAdMBZY.js +0 -1
  612. package/web-ui/build/static/erlang-B1PynliZ.js +0 -1
  613. package/web-ui/build/static/erlang-DO2EN0IW.js +0 -1
  614. package/web-ui/build/static/erlang-repl-DWSpk7kU.js +0 -1
  615. package/web-ui/build/static/etlua-yEBP6vtw.js +0 -1
  616. package/web-ui/build/static/excel-Bhh_OwNT.js +0 -1
  617. package/web-ui/build/static/excel-formula-D8YNVKGY.js +0 -1
  618. package/web-ui/build/static/factor-U8_v_-Qx.js +0 -1
  619. package/web-ui/build/static/false-CbflHcQ4.js +0 -1
  620. package/web-ui/build/static/firestore-security-rules-C9yS7u9K.js +0 -1
  621. package/web-ui/build/static/fix-9oju1yrf.js +0 -1
  622. package/web-ui/build/static/flix-DlGExg75.js +0 -1
  623. package/web-ui/build/static/flow-DKikR-YL.js +0 -1
  624. package/web-ui/build/static/fortran-BTYpE8K2.js +0 -1
  625. package/web-ui/build/static/fortran-BxxaCEOU.js +0 -1
  626. package/web-ui/build/static/fsharp-BSNG-jCK.js +0 -1
  627. package/web-ui/build/static/fsharp-CCg0Y4HA.js +0 -1
  628. package/web-ui/build/static/ftl-DjWJ0y-0.js +0 -1
  629. package/web-ui/build/static/gams-C5fvQ3Od.js +0 -1
  630. package/web-ui/build/static/gap-BvL-biL4.js +0 -1
  631. package/web-ui/build/static/gauss-BzZO8GCS.js +0 -1
  632. package/web-ui/build/static/gcode-Cz8GsjzL.js +0 -1
  633. package/web-ui/build/static/gcode-Dg2JcAQS.js +0 -1
  634. package/web-ui/build/static/gdscript-BOCutEVV.js +0 -1
  635. package/web-ui/build/static/gedcom-Bdq0EwEN.js +0 -1
  636. package/web-ui/build/static/gherkin-Bn1mABAH.js +0 -1
  637. package/web-ui/build/static/gherkin-DpDnmvFb.js +0 -1
  638. package/web-ui/build/static/git-Cd4zgk7f.js +0 -1
  639. package/web-ui/build/static/glsl-BGXyo7Gw.js +0 -1
  640. package/web-ui/build/static/glsl-COPc8ZeZ.js +0 -1
  641. package/web-ui/build/static/gml-BCkIu1Er.js +0 -1
  642. package/web-ui/build/static/gml-COtYpJl2.js +0 -1
  643. package/web-ui/build/static/gn-Bjg1CRig.js +0 -1
  644. package/web-ui/build/static/go-BB6lvTry.js +0 -1
  645. package/web-ui/build/static/go-adzEcqWq.js +0 -1
  646. package/web-ui/build/static/go-module-CfC8Vt2L.js +0 -1
  647. package/web-ui/build/static/golo-C2rGlTHX.js +0 -1
  648. package/web-ui/build/static/gradle-Dh3gdCGU.js +0 -1
  649. package/web-ui/build/static/graphql-w9z3CiM9.js +0 -1
  650. package/web-ui/build/static/groovy-BU2m7Ekt.js +0 -1
  651. package/web-ui/build/static/groovy-Bi8INA80.js +0 -1
  652. package/web-ui/build/static/haml-t0Z0NMdQ.js +0 -1
  653. package/web-ui/build/static/haml-yTEKBHVm.js +0 -1
  654. package/web-ui/build/static/handlebars-BmRED509.js +0 -1
  655. package/web-ui/build/static/handlebars-DmmahO5D.js +0 -1
  656. package/web-ui/build/static/haskell-B4TTwJ5u.js +0 -1
  657. package/web-ui/build/static/haskell-BX4vB3_v.js +0 -1
  658. package/web-ui/build/static/haxe-B81ItqL6.js +0 -1
  659. package/web-ui/build/static/haxe-Z6MewpJj.js +0 -1
  660. package/web-ui/build/static/hcl-CT8vHUwN.js +0 -1
  661. package/web-ui/build/static/hlsl-BNvVW3bY.js +0 -1
  662. package/web-ui/build/static/hoon-07zLMFzn.js +0 -1
  663. package/web-ui/build/static/hpkp-DxK9DKwE.js +0 -1
  664. package/web-ui/build/static/hsp-BFSV4VGN.js +0 -1
  665. package/web-ui/build/static/hsts-Dfi1_v6k.js +0 -1
  666. package/web-ui/build/static/htmlbars-CBGS41Tx.js +0 -1
  667. package/web-ui/build/static/http-Ck2d_NdZ.js +0 -1
  668. package/web-ui/build/static/http-CljalO0f.js +0 -1
  669. package/web-ui/build/static/hy-CWwWerqr.js +0 -1
  670. package/web-ui/build/static/ichigojam-BUq638e8.js +0 -1
  671. package/web-ui/build/static/icon-CkGyT1bh.js +0 -1
  672. package/web-ui/build/static/icu-message-format-BQoqTHNl.js +0 -1
  673. package/web-ui/build/static/idris-nI6aQ55s.js +0 -1
  674. package/web-ui/build/static/iecst-BVwN13uc.js +0 -1
  675. package/web-ui/build/static/ignore-BLfLC9PA.js +0 -1
  676. package/web-ui/build/static/index-BwLo9qDf.js +0 -1
  677. package/web-ui/build/static/index-BwNJoEC1.css +0 -1
  678. package/web-ui/build/static/index-CrzpLgj1.js +0 -13
  679. package/web-ui/build/static/index-DqzIkFBw.js +0 -834
  680. package/web-ui/build/static/inform7-BML_idR2.js +0 -1
  681. package/web-ui/build/static/inform7-xoROt4DC.js +0 -1
  682. package/web-ui/build/static/ini-CCSkzm0H.js +0 -1
  683. package/web-ui/build/static/ini-CYmzo02a.js +0 -1
  684. package/web-ui/build/static/io-DXnvLdgN.js +0 -1
  685. package/web-ui/build/static/irpf90-DxKOk6dw.js +0 -1
  686. package/web-ui/build/static/isbl-0B0tD40P.js +0 -1
  687. package/web-ui/build/static/j-DXpPF6fV.js +0 -1
  688. package/web-ui/build/static/java-D2GSVfv5.js +0 -1
  689. package/web-ui/build/static/java-KuHaGPGv.js +0 -1
  690. package/web-ui/build/static/javadoc-BCT2sPL1.js +0 -1
  691. package/web-ui/build/static/javadoclike-BvnqsHVU.js +0 -1
  692. package/web-ui/build/static/javascript-CiWbQcs7.js +0 -1
  693. package/web-ui/build/static/javastacktrace-eBMVSx2Z.js +0 -1
  694. package/web-ui/build/static/jboss-cli-C01AEskS.js +0 -1
  695. package/web-ui/build/static/jexl-Dn5KxGiK.js +0 -1
  696. package/web-ui/build/static/jolie-D3Zt6_TW.js +0 -1
  697. package/web-ui/build/static/jq-DxOmFCSQ.js +0 -1
  698. package/web-ui/build/static/js-extras-CMUXnpUe.js +0 -1
  699. package/web-ui/build/static/js-templates-BzQwIldl.js +0 -1
  700. package/web-ui/build/static/jsdoc-CkAdh1ug.js +0 -1
  701. package/web-ui/build/static/json-C-B6MwWV.js +0 -1
  702. package/web-ui/build/static/json-C75IrF6s.js +0 -1
  703. package/web-ui/build/static/json5-DvXR6PNV.js +0 -1
  704. package/web-ui/build/static/jsonp-B92u1PFA.js +0 -1
  705. package/web-ui/build/static/jsstacktrace-DJjcSHfr.js +0 -1
  706. package/web-ui/build/static/jsx-C9-rq-CT.js +0 -1
  707. package/web-ui/build/static/julia-DS04VXIz.js +0 -1
  708. package/web-ui/build/static/julia-DrUeWVfq.js +0 -1
  709. package/web-ui/build/static/julia-repl-i80v_zZH.js +0 -1
  710. package/web-ui/build/static/keepalived-BHGEAKGU.js +0 -1
  711. package/web-ui/build/static/keyman-Bdzqqi9H.js +0 -1
  712. package/web-ui/build/static/kotlin-BzHWfKYa.js +0 -1
  713. package/web-ui/build/static/kotlin-C_V1S_FQ.js +0 -1
  714. package/web-ui/build/static/kumir-CotiKPE1.js +0 -1
  715. package/web-ui/build/static/kusto-DRtZ_YAs.js +0 -1
  716. package/web-ui/build/static/lasso-CWuEv8wJ.js +0 -1
  717. package/web-ui/build/static/latex-BQyvVAOm.js +0 -1
  718. package/web-ui/build/static/latex-DMFvqai-.js +0 -1
  719. package/web-ui/build/static/latte-DBzhXpVk.js +0 -1
  720. package/web-ui/build/static/ldif-CHIDpBfE.js +0 -1
  721. package/web-ui/build/static/leaf-BUM990MU.js +0 -1
  722. package/web-ui/build/static/less-Ct98Xd8m.js +0 -1
  723. package/web-ui/build/static/less-cA1L-hw1.js +0 -1
  724. package/web-ui/build/static/lilypond-BxQcVtKe.js +0 -1
  725. package/web-ui/build/static/liquid-BsdpMPYc.js +0 -1
  726. package/web-ui/build/static/lisp-BNcefi1U.js +0 -1
  727. package/web-ui/build/static/lisp-CBeHrUJR.js +0 -1
  728. package/web-ui/build/static/livecodeserver-BRZ6ns7E.js +0 -1
  729. package/web-ui/build/static/livescript-C9VXNDh2.js +0 -1
  730. package/web-ui/build/static/livescript-CPM4TEaS.js +0 -1
  731. package/web-ui/build/static/llvm-D-ktoQ6Z.js +0 -1
  732. package/web-ui/build/static/llvm-aGR2Ei-6.js +0 -1
  733. package/web-ui/build/static/log-BDQPp9ei.js +0 -1
  734. package/web-ui/build/static/lolcode-H3tk4sVp.js +0 -1
  735. package/web-ui/build/static/lsl-E_sO-uEk.js +0 -1
  736. package/web-ui/build/static/lua-CII1BReE.js +0 -1
  737. package/web-ui/build/static/lua-c32KCD1t.js +0 -1
  738. package/web-ui/build/static/magma-BhWArSfW.js +0 -1
  739. package/web-ui/build/static/makefile-BL9Ig9xO.js +0 -1
  740. package/web-ui/build/static/makefile-C_xncXma.js +0 -1
  741. package/web-ui/build/static/markdown-Bjx0QXUF.js +0 -1
  742. package/web-ui/build/static/markdown-DKcNzXLC.js +0 -1
  743. package/web-ui/build/static/markup-templating-DAQlKGf9.js +0 -1
  744. package/web-ui/build/static/mathematica-CvqfUKaF.js +0 -1
  745. package/web-ui/build/static/matlab-BErKso28.js +0 -1
  746. package/web-ui/build/static/matlab-ClFikeke.js +0 -1
  747. package/web-ui/build/static/maxima-Ft3syDPO.js +0 -1
  748. package/web-ui/build/static/maxscript-DT0tXOez.js +0 -1
  749. package/web-ui/build/static/mel-B9RYm_nG.js +0 -1
  750. package/web-ui/build/static/mel-DGpfnKg9.js +0 -1
  751. package/web-ui/build/static/mercury-CXmUlA2y.js +0 -1
  752. package/web-ui/build/static/mermaid-BDmkIkXi.js +0 -1
  753. package/web-ui/build/static/mipsasm-B2G5mL-v.js +0 -1
  754. package/web-ui/build/static/mizar-9hVFfba0.js +0 -1
  755. package/web-ui/build/static/mizar-FYnr9CDP.js +0 -1
  756. package/web-ui/build/static/mojolicious-D3hJYxqh.js +0 -1
  757. package/web-ui/build/static/mongodb-HP0s-riS.js +0 -1
  758. package/web-ui/build/static/monkey-CBt12SEM.js +0 -1
  759. package/web-ui/build/static/monkey-DIqWIXYW.js +0 -1
  760. package/web-ui/build/static/moonscript-B8Z_r4dn.js +0 -1
  761. package/web-ui/build/static/moonscript-CE7UuyXU.js +0 -1
  762. package/web-ui/build/static/n1ql-B16jfOjw.js +0 -1
  763. package/web-ui/build/static/n1ql-BgMWCckC.js +0 -1
  764. package/web-ui/build/static/n4js-CAXy3_Jy.js +0 -1
  765. package/web-ui/build/static/nand2tetris-hdl-C3vzslgj.js +0 -1
  766. package/web-ui/build/static/naniscript-DAFwQQVi.js +0 -1
  767. package/web-ui/build/static/nasm-BOFKVnaS.js +0 -1
  768. package/web-ui/build/static/neon-D0ISL7qJ.js +0 -1
  769. package/web-ui/build/static/nevod-KoDi24v0.js +0 -1
  770. package/web-ui/build/static/nginx-Cr5DfqWR.js +0 -1
  771. package/web-ui/build/static/nginx-DCCnctTG.js +0 -1
  772. package/web-ui/build/static/nim-DPJN-_EC.js +0 -1
  773. package/web-ui/build/static/nim-De05kw0n.js +0 -1
  774. package/web-ui/build/static/nix-CELEwiHo.js +0 -1
  775. package/web-ui/build/static/nix-CSaBChxR.js +0 -1
  776. package/web-ui/build/static/node-repl-C32a7yiw.js +0 -1
  777. package/web-ui/build/static/nsis-CZuaKioB.js +0 -1
  778. package/web-ui/build/static/nsis-VwfBkj3d.js +0 -1
  779. package/web-ui/build/static/objectivec-DJKZtPL2.js +0 -1
  780. package/web-ui/build/static/objectivec-DK2yoaBg.js +0 -1
  781. package/web-ui/build/static/ocaml-Dxx1cjem.js +0 -1
  782. package/web-ui/build/static/ocaml-kjKWdGCz.js +0 -1
  783. package/web-ui/build/static/opencl-BNtKnv1J.js +0 -1
  784. package/web-ui/build/static/openqasm-CdvNeYug.js +0 -1
  785. package/web-ui/build/static/openscad-B_qvsjfe.js +0 -1
  786. package/web-ui/build/static/oxygene-DG1hddn5.js +0 -1
  787. package/web-ui/build/static/oz-CRY87qeP.js +0 -1
  788. package/web-ui/build/static/parigp-BkAr6-G8.js +0 -1
  789. package/web-ui/build/static/parser-CP5clEop.js +0 -1
  790. package/web-ui/build/static/parser3-crTb7A0X.js +0 -1
  791. package/web-ui/build/static/pascal-DPfyfoDh.js +0 -1
  792. package/web-ui/build/static/pascaligo-DURFNQ_j.js +0 -1
  793. package/web-ui/build/static/pcaxis-DD7RAxRP.js +0 -1
  794. package/web-ui/build/static/peoplecode-So_X5jSp.js +0 -1
  795. package/web-ui/build/static/perl-B1DBrLmJ.js +0 -1
  796. package/web-ui/build/static/perl-BFaVXeG7.js +0 -1
  797. package/web-ui/build/static/pf-CEB1L5qm.js +0 -1
  798. package/web-ui/build/static/pgsql-A0nsUgDI.js +0 -1
  799. package/web-ui/build/static/php-8ihB7EPM.js +0 -1
  800. package/web-ui/build/static/php-Sh6D6NIJ.js +0 -1
  801. package/web-ui/build/static/php-extras-Cy_aBZK6.js +0 -1
  802. package/web-ui/build/static/php-template-Cit-PHnf.js +0 -1
  803. package/web-ui/build/static/phpdoc-DNU6hjDm.js +0 -1
  804. package/web-ui/build/static/plaintext-FLJCTahD.js +0 -1
  805. package/web-ui/build/static/plsql-1giFa6G7.js +0 -1
  806. package/web-ui/build/static/pony-BEp1IqY4.js +0 -1
  807. package/web-ui/build/static/powerquery-B43RvEYw.js +0 -1
  808. package/web-ui/build/static/powershell-B0QtH4nv.js +0 -1
  809. package/web-ui/build/static/powershell-BdHnDhS8.js +0 -1
  810. package/web-ui/build/static/processing-Be1Oglu_.js +0 -1
  811. package/web-ui/build/static/processing-CARItQwm.js +0 -1
  812. package/web-ui/build/static/profile-BwlQtk0y.js +0 -1
  813. package/web-ui/build/static/prolog-DKK6jUnc.js +0 -1
  814. package/web-ui/build/static/prolog-b_8huu7c.js +0 -1
  815. package/web-ui/build/static/promql-BZZ7XfbI.js +0 -1
  816. package/web-ui/build/static/properties-BFb1Pf6n.js +0 -1
  817. package/web-ui/build/static/properties-CmsBqXVJ.js +0 -1
  818. package/web-ui/build/static/protobuf-DeLotQpJ.js +0 -1
  819. package/web-ui/build/static/protobuf-WK1D_sJI.js +0 -1
  820. package/web-ui/build/static/psl-MNZR2qmI.js +0 -1
  821. package/web-ui/build/static/pug-CF9nceJD.js +0 -1
  822. package/web-ui/build/static/puppet-CZbKHt9x.js +0 -1
  823. package/web-ui/build/static/puppet-DUMENOgH.js +0 -1
  824. package/web-ui/build/static/pure-37fhgfVL.js +0 -1
  825. package/web-ui/build/static/purebasic-BdORV50m.js +0 -1
  826. package/web-ui/build/static/purebasic-D8axvRJF.js +0 -1
  827. package/web-ui/build/static/purescript-BmZhg2WR.js +0 -1
  828. package/web-ui/build/static/python-CnE0eaJH.js +0 -1
  829. package/web-ui/build/static/python-rT3smsTM.js +0 -1
  830. package/web-ui/build/static/python-repl-oAPThvRZ.js +0 -1
  831. package/web-ui/build/static/q-C9PeNAsV.js +0 -1
  832. package/web-ui/build/static/q-DEhOeRm8.js +0 -1
  833. package/web-ui/build/static/qml-CzmXy0mm.js +0 -1
  834. package/web-ui/build/static/qml-ZLrRDW5F.js +0 -1
  835. package/web-ui/build/static/qore-C4BmNqiC.js +0 -1
  836. package/web-ui/build/static/qsharp-CUspIxRd.js +0 -1
  837. package/web-ui/build/static/r-CmTJdjSW.js +0 -1
  838. package/web-ui/build/static/r-Dul2vX00.js +0 -1
  839. package/web-ui/build/static/racket-DuTLmSg0.js +0 -1
  840. package/web-ui/build/static/reason-CPbzN4QK.js +0 -1
  841. package/web-ui/build/static/reasonml-BX6GGy_7.js +0 -1
  842. package/web-ui/build/static/regex-C-S4lu9H.js +0 -1
  843. package/web-ui/build/static/rego-C552rbmD.js +0 -1
  844. package/web-ui/build/static/renpy-CAXD5ZIz.js +0 -1
  845. package/web-ui/build/static/rest-C0ztj_j5.js +0 -1
  846. package/web-ui/build/static/rib-qZJul5T1.js +0 -1
  847. package/web-ui/build/static/rip-Bi2BsowV.js +0 -1
  848. package/web-ui/build/static/roboconf-BcDqw_pY.js +0 -1
  849. package/web-ui/build/static/roboconf-CEx3VVi1.js +0 -1
  850. package/web-ui/build/static/robotframework-CJVompq9.js +0 -1
  851. package/web-ui/build/static/routeros-BhoPpLPN.js +0 -1
  852. package/web-ui/build/static/rsl-BnetYcE2.js +0 -1
  853. package/web-ui/build/static/ruby-D-6W0bRE.js +0 -1
  854. package/web-ui/build/static/ruby-Dy6NjAXK.js +0 -1
  855. package/web-ui/build/static/ruleslanguage-Bl49mJdL.js +0 -1
  856. package/web-ui/build/static/rust-DxOQY_0w.js +0 -1
  857. package/web-ui/build/static/rust-Dxv6L6Ol.js +0 -1
  858. package/web-ui/build/static/sas-B2aGiUg2.js +0 -1
  859. package/web-ui/build/static/sas-Cbzi-GmN.js +0 -1
  860. package/web-ui/build/static/sass-DwAAr7qH.js +0 -1
  861. package/web-ui/build/static/scala-CNOqwEfe.js +0 -1
  862. package/web-ui/build/static/scala-DxlUiOFp.js +0 -1
  863. package/web-ui/build/static/scheme-B1ALEy7P.js +0 -1
  864. package/web-ui/build/static/scheme-DUNdLa4B.js +0 -1
  865. package/web-ui/build/static/scilab-C6Y0UImx.js +0 -1
  866. package/web-ui/build/static/scss-8m-w5Uh_.js +0 -1
  867. package/web-ui/build/static/scss-C_igD-9N.js +0 -1
  868. package/web-ui/build/static/shell-CTp1MeZM.js +0 -1
  869. package/web-ui/build/static/shell-session-CN3B6Mtp.js +0 -1
  870. package/web-ui/build/static/smali-DMehnCvR.js +0 -1
  871. package/web-ui/build/static/smali-DUPqcHaD.js +0 -1
  872. package/web-ui/build/static/smalltalk-BZWXwh4-.js +0 -1
  873. package/web-ui/build/static/smalltalk-Jd4VA-e4.js +0 -1
  874. package/web-ui/build/static/smarty-2BmLPFNh.js +0 -1
  875. package/web-ui/build/static/sml-BC5HDEBf.js +0 -1
  876. package/web-ui/build/static/sml-BrJo7y64.js +0 -1
  877. package/web-ui/build/static/solidity-muZ3xQn0.js +0 -1
  878. package/web-ui/build/static/solution-file-CF9Xt6f6.js +0 -1
  879. package/web-ui/build/static/soy-DZg8DGEU.js +0 -1
  880. package/web-ui/build/static/sparql-kmkyqBAK.js +0 -1
  881. package/web-ui/build/static/splunk-spl-CmBLwT62.js +0 -1
  882. package/web-ui/build/static/sqf-Ct-q_HqH.js +0 -1
  883. package/web-ui/build/static/sqf-DSuUvyV6.js +0 -1
  884. package/web-ui/build/static/sql-BKhJK7dD.js +0 -1
  885. package/web-ui/build/static/sql-MRpfxEIR.js +0 -1
  886. package/web-ui/build/static/sql_more-By_l7rJw.js +0 -1
  887. package/web-ui/build/static/squirrel-Oyf4apfe.js +0 -1
  888. package/web-ui/build/static/stan-CYPvm7ay.js +0 -1
  889. package/web-ui/build/static/stan-OSfpjfxd.js +0 -1
  890. package/web-ui/build/static/stata-BN_7-HVj.js +0 -1
  891. package/web-ui/build/static/step21-B0MUaGQd.js +0 -1
  892. package/web-ui/build/static/stylus-B2zpewvs.js +0 -1
  893. package/web-ui/build/static/stylus-CiP04Uso.js +0 -1
  894. package/web-ui/build/static/subunit-Ccz6OcJn.js +0 -1
  895. package/web-ui/build/static/swift-DWAzs8_N.js +0 -1
  896. package/web-ui/build/static/swift-ssBR_Hx9.js +0 -1
  897. package/web-ui/build/static/systemd-CT9j1seU.js +0 -1
  898. package/web-ui/build/static/t4-cs-B81S0qkn.js +0 -1
  899. package/web-ui/build/static/t4-templating-CR8sHwkP.js +0 -1
  900. package/web-ui/build/static/t4-vb-AK-9z7xL.js +0 -1
  901. package/web-ui/build/static/taggerscript-BWTFecfl.js +0 -1
  902. package/web-ui/build/static/tap-BuWdU6cR.js +0 -1
  903. package/web-ui/build/static/tap-CvD65fMN.js +0 -1
  904. package/web-ui/build/static/tcl-CWTwAImW.js +0 -1
  905. package/web-ui/build/static/tcl-DxPPqU89.js +0 -1
  906. package/web-ui/build/static/textile-Bb8aIOgT.js +0 -1
  907. package/web-ui/build/static/thrift-BSdmFMYv.js +0 -1
  908. package/web-ui/build/static/toml-CYmQZs0L.js +0 -1
  909. package/web-ui/build/static/tp-Bt1wA2RW.js +0 -1
  910. package/web-ui/build/static/tremor-EDFsRn35.js +0 -1
  911. package/web-ui/build/static/tsx-CRpZ39XI.js +0 -1
  912. package/web-ui/build/static/tt2-C0lRkX9G.js +0 -1
  913. package/web-ui/build/static/turtle-i57e7COQ.js +0 -1
  914. package/web-ui/build/static/twig-DLmpdej0.js +0 -1
  915. package/web-ui/build/static/twig-DwotmZ4d.js +0 -1
  916. package/web-ui/build/static/typescript-C02UFCEu.js +0 -1
  917. package/web-ui/build/static/typescript-Dv4852yn.js +0 -1
  918. package/web-ui/build/static/typoscript-DsiStA8T.js +0 -1
  919. package/web-ui/build/static/unrealscript-DREvLy9b.js +0 -1
  920. package/web-ui/build/static/uorazor-DjjRGSlO.js +0 -1
  921. package/web-ui/build/static/uri-DNx0Ltr1.js +0 -1
  922. package/web-ui/build/static/v-BtcT9t45.js +0 -1
  923. package/web-ui/build/static/vala-CtrGtWLL.js +0 -1
  924. package/web-ui/build/static/vala-DGVJkbdQ.js +0 -1
  925. package/web-ui/build/static/vbnet-9N5EIy45.js +0 -1
  926. package/web-ui/build/static/vbnet-C8V-5wZc.js +0 -1
  927. package/web-ui/build/static/vbscript-C5ZX035F.js +0 -1
  928. package/web-ui/build/static/vbscript-html-Dk-JOSq9.js +0 -1
  929. package/web-ui/build/static/velocity-CMJONQlV.js +0 -1
  930. package/web-ui/build/static/verilog-B448hVUF.js +0 -1
  931. package/web-ui/build/static/verilog-D9rg9wGb.js +0 -1
  932. package/web-ui/build/static/vhdl-B0K99MAb.js +0 -1
  933. package/web-ui/build/static/vhdl-BLJZCy5e.js +0 -1
  934. package/web-ui/build/static/vim-CYLY4wFr.js +0 -1
  935. package/web-ui/build/static/vim-DE6BqLa5.js +0 -1
  936. package/web-ui/build/static/visual-basic-BwcdH-Kn.js +0 -1
  937. package/web-ui/build/static/warpscript-BbfcoHYW.js +0 -1
  938. package/web-ui/build/static/wasm-DHUeRG-u.js +0 -1
  939. package/web-ui/build/static/web-idl-BE2wsaTW.js +0 -1
  940. package/web-ui/build/static/wiki-D-OoB7Gs.js +0 -1
  941. package/web-ui/build/static/wolfram-D-AbA_lC.js +0 -1
  942. package/web-ui/build/static/wren-M0B5FCO6.js +0 -1
  943. package/web-ui/build/static/x86asm-Gg-JtiBh.js +0 -1
  944. package/web-ui/build/static/xeora-BeNNN_-l.js +0 -1
  945. package/web-ui/build/static/xl-C1jOa_4Q.js +0 -1
  946. package/web-ui/build/static/xml-doc-BwW35pek.js +0 -1
  947. package/web-ui/build/static/xml-zQuyG7Gq.js +0 -1
  948. package/web-ui/build/static/xojo-Bf6Y1tsn.js +0 -1
  949. package/web-ui/build/static/xquery-5ZEPqG2y.js +0 -1
  950. package/web-ui/build/static/xquery-OpQT69RV.js +0 -1
  951. package/web-ui/build/static/yaml-CWnr1ERL.js +0 -1
  952. package/web-ui/build/static/yaml-D9QDmLde.js +0 -1
  953. package/web-ui/build/static/yang-DSZmLri0.js +0 -1
  954. package/web-ui/build/static/zephir-C5UVIt-7.js +0 -1
  955. package/web-ui/build/static/zig-B1yDYj97.js +0 -1
@@ -0,0 +1,496 @@
1
+ /**
2
+ * End-to-end integration tests for the external-channel relay path.
3
+ *
4
+ * Simulates a full `stream_complete` WebSocket broadcast hitting both
5
+ * DiscordService and TelegramService, with a mock send surface attached
6
+ * to each, and verifies:
7
+ * - Only content inside <external>…</external> reaches the mock send.
8
+ * - Blocks route to the correct channels via alias matching.
9
+ * - Substring/case-insensitive alias resolution works end-to-end.
10
+ * - Default (no-to) blocks broadcast to every bridge owned by the service.
11
+ * - Content outside <external> never leaves the process.
12
+ * - Cross-service isolation: a block addressed to `telegram` is NOT
13
+ * forwarded by Discord, and vice-versa.
14
+ *
15
+ * We mock:
16
+ * - `fs` (both services write config; mocks short-circuit it)
17
+ * - `utilities/userDataDir.js` (avoids touching real disk paths)
18
+ * - The discord.js `channels.fetch` / `channel.send` surface on the
19
+ * Discord client used for outbound message relay.
20
+ *
21
+ * What's intentionally real:
22
+ * - The channel filter and alias resolver (the unit under test).
23
+ * - The relay functions themselves, including message splitting,
24
+ * interaction lookup, and session targeting.
25
+ */
26
+
27
+ import { jest, describe, test, expect, beforeEach } from '@jest/globals';
28
+ import { createMockLogger } from '../../__test-utils__/mockFactories.js';
29
+
30
+ jest.unstable_mockModule('fs', () => ({
31
+ promises: {
32
+ mkdir: jest.fn().mockResolvedValue(undefined),
33
+ readFile: jest.fn().mockRejectedValue(new Error('ENOENT')),
34
+ writeFile: jest.fn().mockResolvedValue(undefined),
35
+ },
36
+ }));
37
+
38
+ jest.unstable_mockModule('../../utilities/userDataDir.js', () => ({
39
+ getUserDataPaths: () => ({ base: '/mock/data' }),
40
+ ensureUserDataDirs: jest.fn().mockResolvedValue(undefined),
41
+ }));
42
+
43
+ const { DiscordService, DISCORD_STATUS } = await import('../discordService.js');
44
+ const { TelegramService, TELEGRAM_STATUS } = await import('../telegramService.js');
45
+
46
+ // ───────────────────────── Discord relay harness ─────────────────────────
47
+
48
+ /**
49
+ * Stand up a DiscordService wired with mock channel/send surfaces so the
50
+ * real relay code path can run end-to-end. Seeds `recentInteractions`
51
+ * with two bridged channels for the given agent (#ops and #general).
52
+ */
53
+ function makeDiscordHarness({ agentId = 'agent-x', extraChannels = [] } = {}) {
54
+ const logger = createMockLogger();
55
+ const service = new DiscordService(logger);
56
+ service.status = DISCORD_STATUS.CONNECTED;
57
+
58
+ // Mock an agent pool so relay can resolve agent name.
59
+ service.setAgentPool({
60
+ getAgent: jest.fn().mockResolvedValue({ id: agentId, name: 'Agent X' }),
61
+ });
62
+
63
+ // Mock Discord client surface: `channels.fetch(id) → { send(text) }`.
64
+ const sends = []; // flat log of every channel.send call, in order
65
+ const makeChannel = (channelId) => ({
66
+ send: jest.fn(async (text) => {
67
+ sends.push({ channelId, text });
68
+ }),
69
+ });
70
+ service.client = {
71
+ channels: {
72
+ fetch: jest.fn(async (channelId) => makeChannel(channelId)),
73
+ },
74
+ };
75
+
76
+ // Seed two bridged channels in the same guild.
77
+ const channels = [
78
+ {
79
+ key: 'guild-1:chan-ops',
80
+ interaction: {
81
+ channelKey: 'guild-1:chan-ops',
82
+ channelId: 'chan-ops',
83
+ channelName: 'ops',
84
+ guildId: 'guild-1',
85
+ guildName: 'Acme',
86
+ timestamp: Date.now(),
87
+ },
88
+ },
89
+ {
90
+ key: 'guild-1:chan-general',
91
+ interaction: {
92
+ channelKey: 'guild-1:chan-general',
93
+ channelId: 'chan-general',
94
+ channelName: 'general',
95
+ guildId: 'guild-1',
96
+ guildName: 'Acme',
97
+ timestamp: Date.now(),
98
+ },
99
+ },
100
+ ...extraChannels,
101
+ ];
102
+ for (const { key, interaction } of channels) {
103
+ service.recentInteractions.set(`${agentId}:${key}`, interaction);
104
+ }
105
+
106
+ return { service, sends, agentId };
107
+ }
108
+
109
+ describe('Discord relay — end-to-end via _handleBroadcastEvent', () => {
110
+ let harness;
111
+
112
+ beforeEach(() => {
113
+ harness = makeDiscordHarness();
114
+ });
115
+
116
+ test('stream_complete with no <external> → nothing sent', async () => {
117
+ await harness.service._handleBroadcastEvent('session-1', {
118
+ type: 'stream_complete',
119
+ data: { agentId: harness.agentId, content: 'private planning\nno tags at all' },
120
+ });
121
+ expect(harness.sends).toEqual([]);
122
+ });
123
+
124
+ test('role=user is skipped (safety for non-assistant relays)', async () => {
125
+ await harness.service._handleBroadcastEvent('session-1', {
126
+ type: 'stream_complete',
127
+ data: {
128
+ agentId: harness.agentId,
129
+ role: 'user',
130
+ content: '<external>this should never leak</external>',
131
+ },
132
+ });
133
+ expect(harness.sends).toEqual([]);
134
+ });
135
+
136
+ test('default <external> block broadcasts to every bridged Discord channel', async () => {
137
+ await harness.service._handleBroadcastEvent('session-1', {
138
+ type: 'stream_complete',
139
+ data: {
140
+ agentId: harness.agentId,
141
+ content: '<external>broadcast line</external>',
142
+ },
143
+ });
144
+ const channelIds = harness.sends.map(s => s.channelId).sort();
145
+ expect(channelIds).toEqual(['chan-general', 'chan-ops'].sort());
146
+ // Every send includes the agent header prefix plus the content.
147
+ for (const s of harness.sends) {
148
+ expect(s.text).toContain('Agent X');
149
+ expect(s.text).toContain('broadcast line');
150
+ }
151
+ });
152
+
153
+ test('targeted block with substring alias → only matching channel', async () => {
154
+ await harness.service._handleBroadcastEvent('session-1', {
155
+ type: 'stream_complete',
156
+ data: {
157
+ agentId: harness.agentId,
158
+ content: '<external to="#ops">ops only</external>',
159
+ },
160
+ });
161
+ expect(harness.sends).toHaveLength(1);
162
+ expect(harness.sends[0].channelId).toBe('chan-ops');
163
+ expect(harness.sends[0].text).toContain('ops only');
164
+ });
165
+
166
+ test('multi-alias to= sends to each matching channel once', async () => {
167
+ await harness.service._handleBroadcastEvent('session-1', {
168
+ type: 'stream_complete',
169
+ data: {
170
+ agentId: harness.agentId,
171
+ content: '<external to="#ops,#general">both</external>',
172
+ },
173
+ });
174
+ const ids = harness.sends.map(s => s.channelId).sort();
175
+ expect(ids).toEqual(['chan-general', 'chan-ops'].sort());
176
+ });
177
+
178
+ test('content OUTSIDE <external> never leaves the service', async () => {
179
+ const content =
180
+ 'internal planning that must stay local\n' +
181
+ '```json\n{"toolId":"terminal","parameters":{}}\n```\n' +
182
+ '<external to="#ops">only this</external>';
183
+ await harness.service._handleBroadcastEvent('session-1', {
184
+ type: 'stream_complete',
185
+ data: { agentId: harness.agentId, content },
186
+ });
187
+ expect(harness.sends).toHaveLength(1);
188
+ expect(harness.sends[0].text).toContain('only this');
189
+ expect(harness.sends[0].text).not.toContain('internal planning');
190
+ expect(harness.sends[0].text).not.toContain('terminal');
191
+ expect(harness.sends[0].text).not.toContain('toolId');
192
+ });
193
+
194
+ test('content INSIDE <external> is verbatim — code blocks preserved', async () => {
195
+ const codeBlock = '```js\nconst x = 1;\n```';
196
+ await harness.service._handleBroadcastEvent('session-1', {
197
+ type: 'stream_complete',
198
+ data: {
199
+ agentId: harness.agentId,
200
+ content: `<external to="#ops">Here:\n${codeBlock}</external>`,
201
+ },
202
+ });
203
+ expect(harness.sends).toHaveLength(1);
204
+ expect(harness.sends[0].text).toContain(codeBlock);
205
+ });
206
+
207
+ test('content INSIDE <external> is verbatim — tool JSON preserved if the agent chose to include it', async () => {
208
+ // Key correctness claim: the filter does NOT second-guess content
209
+ // shape. If the agent wraps a task summary (including raw tool JSON)
210
+ // in <external>, that's the agent's call, and Discord sees it.
211
+ const tool = '```json\n{"toolId":"taskmanager","parameters":{}}\n```';
212
+ await harness.service._handleBroadcastEvent('session-1', {
213
+ type: 'stream_complete',
214
+ data: {
215
+ agentId: harness.agentId,
216
+ content: `<external to="#ops">Status:\n${tool}</external>`,
217
+ },
218
+ });
219
+ expect(harness.sends).toHaveLength(1);
220
+ expect(harness.sends[0].text).toContain('toolId');
221
+ expect(harness.sends[0].text).toContain('taskmanager');
222
+ });
223
+
224
+ test('to="*" behaves the same as default (broadcast)', async () => {
225
+ await harness.service._handleBroadcastEvent('session-1', {
226
+ type: 'stream_complete',
227
+ data: {
228
+ agentId: harness.agentId,
229
+ content: '<external to="*">star</external>',
230
+ },
231
+ });
232
+ expect(harness.sends.map(s => s.channelId).sort())
233
+ .toEqual(['chan-general', 'chan-ops'].sort());
234
+ });
235
+
236
+ test('no bridged channels for this agent → nothing sent', async () => {
237
+ // Clear interactions so the agent has no bridges.
238
+ harness.service.recentInteractions.clear();
239
+ await harness.service._handleBroadcastEvent('session-1', {
240
+ type: 'stream_complete',
241
+ data: {
242
+ agentId: harness.agentId,
243
+ content: '<external>anywhere?</external>',
244
+ },
245
+ });
246
+ expect(harness.sends).toEqual([]);
247
+ });
248
+
249
+ test('cross-service isolation: block addressed to telegram → Discord ignores it', async () => {
250
+ await harness.service._handleBroadcastEvent('session-1', {
251
+ type: 'stream_complete',
252
+ data: {
253
+ agentId: harness.agentId,
254
+ content: '<external to="telegram">not for discord</external>',
255
+ },
256
+ });
257
+ expect(harness.sends).toEqual([]);
258
+ });
259
+
260
+ test('multiple <external> blocks each routed independently', async () => {
261
+ const content =
262
+ '<external to="#ops">for ops</external>\n' +
263
+ '<external to="#general">for general</external>\n' +
264
+ '<external>for everyone</external>';
265
+ await harness.service._handleBroadcastEvent('session-1', {
266
+ type: 'stream_complete',
267
+ data: { agentId: harness.agentId, content },
268
+ });
269
+ // ops: 1 targeted + 1 broadcast = 2 sends
270
+ // general: 1 targeted + 1 broadcast = 2 sends
271
+ const perChannel = harness.sends.reduce((acc, s) => {
272
+ acc[s.channelId] = (acc[s.channelId] || []);
273
+ acc[s.channelId].push(s.text);
274
+ return acc;
275
+ }, {});
276
+ expect(perChannel['chan-ops']).toHaveLength(2);
277
+ expect(perChannel['chan-general']).toHaveLength(2);
278
+ expect(perChannel['chan-ops'].some(t => t.includes('for ops'))).toBe(true);
279
+ expect(perChannel['chan-ops'].some(t => t.includes('for everyone'))).toBe(true);
280
+ expect(perChannel['chan-general'].some(t => t.includes('for general'))).toBe(true);
281
+ expect(perChannel['chan-general'].some(t => t.includes('for everyone'))).toBe(true);
282
+ });
283
+
284
+ test('getBridgedChannels exposes the alias list with labels', () => {
285
+ const bridged = harness.service.getBridgedChannels(harness.agentId);
286
+ expect(bridged).toEqual(expect.arrayContaining([
287
+ expect.objectContaining({ alias: 'discord:#ops', label: expect.stringContaining('ops') }),
288
+ expect.objectContaining({ alias: 'discord:#general' }),
289
+ ]));
290
+ });
291
+
292
+ test('isAgentBridged returns false for unknown agent, true for seeded agent', () => {
293
+ expect(harness.service.isAgentBridged(harness.agentId)).toBe(true);
294
+ expect(harness.service.isAgentBridged('other-agent')).toBe(false);
295
+ });
296
+
297
+ test('isAgentBridged returns false when service disconnected', () => {
298
+ harness.service.status = DISCORD_STATUS.DISCONNECTED;
299
+ expect(harness.service.isAgentBridged(harness.agentId)).toBe(false);
300
+ });
301
+ });
302
+
303
+ // ───────────────────────── Telegram relay harness ─────────────────────────
304
+
305
+ /**
306
+ * TelegramService only sends when `bot.sendMessage` resolves; we stub the
307
+ * minimal surface (sendMessage) and mark the agent as active. The filter
308
+ * + alias wiring we exercise is the same code path Discord uses, via
309
+ * a separate service implementation.
310
+ */
311
+ function makeTelegramHarness({ agentId = 'agent-y', chatId = 42 } = {}) {
312
+ const logger = createMockLogger();
313
+ const service = new TelegramService(logger);
314
+ service.status = TELEGRAM_STATUS.CONNECTED;
315
+ service.chatId = chatId;
316
+ service.activeAgentIds.add(agentId);
317
+ // 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() };
320
+ service.setAgentPool({
321
+ getAgent: jest.fn().mockResolvedValue({ id: agentId, name: 'Agent Y' }),
322
+ });
323
+
324
+ // Intercept the real underlying `_send` to avoid hitting node-telegram-bot-api.
325
+ const sends = [];
326
+ service._send = jest.fn(async (chatIdArg, text) => {
327
+ sends.push({ chatId: chatIdArg, text });
328
+ });
329
+
330
+ return { service, sends, agentId, chatId };
331
+ }
332
+
333
+ describe('Telegram relay — end-to-end via _handleBroadcastEvent', () => {
334
+ let harness;
335
+
336
+ beforeEach(() => {
337
+ harness = makeTelegramHarness();
338
+ });
339
+
340
+ test('no <external> block → nothing sent', async () => {
341
+ await harness.service._handleBroadcastEvent({
342
+ type: 'stream_complete',
343
+ data: { agentId: harness.agentId, content: 'plain reasoning only' },
344
+ });
345
+ expect(harness.sends).toEqual([]);
346
+ });
347
+
348
+ test('default <external> relays to the chat', async () => {
349
+ await harness.service._handleBroadcastEvent({
350
+ type: 'stream_complete',
351
+ data: {
352
+ agentId: harness.agentId,
353
+ content: '<external>hi from agent</external>',
354
+ },
355
+ });
356
+ expect(harness.sends).toHaveLength(1);
357
+ expect(harness.sends[0].chatId).toBe(harness.chatId);
358
+ expect(harness.sends[0].text).toContain('hi from agent');
359
+ });
360
+
361
+ test('to="telegram" routes correctly', async () => {
362
+ await harness.service._handleBroadcastEvent({
363
+ type: 'stream_complete',
364
+ data: {
365
+ agentId: harness.agentId,
366
+ content: '<external to="telegram">direct</external>',
367
+ },
368
+ });
369
+ expect(harness.sends).toHaveLength(1);
370
+ });
371
+
372
+ test('to="discord:#ops" is NOT relayed by Telegram (cross-service isolation)', async () => {
373
+ await harness.service._handleBroadcastEvent({
374
+ type: 'stream_complete',
375
+ data: {
376
+ agentId: harness.agentId,
377
+ content: '<external to="discord:#ops">wrong channel</external>',
378
+ },
379
+ });
380
+ expect(harness.sends).toEqual([]);
381
+ });
382
+
383
+ test('broadcast (default) reaches Telegram exactly once per block', async () => {
384
+ const content =
385
+ '<external>A</external>\n' +
386
+ '<external>B</external>\n' +
387
+ '<external to="telegram">C</external>';
388
+ await harness.service._handleBroadcastEvent({
389
+ type: 'stream_complete',
390
+ data: { agentId: harness.agentId, content },
391
+ });
392
+ expect(harness.sends).toHaveLength(3);
393
+ expect(harness.sends.map(s => s.text).join('|')).toMatch(/A.*B.*C/s);
394
+ });
395
+
396
+ test('agent not in activeAgentIds → nothing sent', async () => {
397
+ harness.service.activeAgentIds.clear();
398
+ await harness.service._handleBroadcastEvent({
399
+ type: 'stream_complete',
400
+ data: {
401
+ agentId: harness.agentId,
402
+ content: '<external>quiet please</external>',
403
+ },
404
+ });
405
+ expect(harness.sends).toEqual([]);
406
+ });
407
+
408
+ test('service disconnected → nothing sent even with <external>', async () => {
409
+ harness.service.status = TELEGRAM_STATUS.DISCONNECTED;
410
+ await harness.service._handleBroadcastEvent({
411
+ type: 'stream_complete',
412
+ data: {
413
+ agentId: harness.agentId,
414
+ content: '<external>anyone?</external>',
415
+ },
416
+ });
417
+ expect(harness.sends).toEqual([]);
418
+ });
419
+
420
+ test('content outside <external> never leaves the service', async () => {
421
+ await harness.service._handleBroadcastEvent({
422
+ type: 'stream_complete',
423
+ data: {
424
+ agentId: harness.agentId,
425
+ content:
426
+ 'private thought chain\n' +
427
+ '```json\n{"toolId":"memory","parameters":{}}\n```\n' +
428
+ '<external>only this part</external>',
429
+ },
430
+ });
431
+ expect(harness.sends).toHaveLength(1);
432
+ expect(harness.sends[0].text).toContain('only this part');
433
+ expect(harness.sends[0].text).not.toContain('private thought');
434
+ expect(harness.sends[0].text).not.toContain('memory');
435
+ });
436
+
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' }]);
440
+ expect(harness.service.getBridgedChannels('other-agent')).toEqual([]);
441
+ });
442
+ });
443
+
444
+ // ─────────────────── Cross-service: one broadcast, two services ───────────────────
445
+
446
+ describe('Cross-service isolation: a single agent response splits across platforms', () => {
447
+ test('Discord takes its blocks, Telegram takes its own, neither overreaches', async () => {
448
+ const agentId = 'agent-split';
449
+
450
+ const discord = makeDiscordHarness({ agentId });
451
+ const telegram = makeTelegramHarness({ agentId, chatId: 77 });
452
+
453
+ // Representative content shape matching what stream_complete carries
454
+ // for either Responses API or Chat Completions after the bridge.
455
+ const content =
456
+ 'Private reasoning the operator sees.\n' +
457
+ '**Calling taskmanager** — type: complete…\n' +
458
+ '```json\n{"toolId":"taskmanager","parameters":{"actions":[{"type":"complete","taskId":"t-1"}]}}\n```\n\n' +
459
+ '<external to="discord:#ops">\n' +
460
+ '**Deploy finished.** 42 tests passed.\n' +
461
+ '```bash\nnpm test\n```\n' +
462
+ '</external>\n\n' +
463
+ '<external to="telegram">✅ deploy ok</external>\n\n' +
464
+ '<external>general broadcast for every bridge</external>';
465
+
466
+ const broadcast = { type: 'stream_complete', data: { agentId, content } };
467
+ await Promise.all([
468
+ discord.service._handleBroadcastEvent('session-1', broadcast),
469
+ telegram.service._handleBroadcastEvent(broadcast),
470
+ ]);
471
+
472
+ // Discord should receive:
473
+ // - the #ops block once (to discord:#ops only)
474
+ // - the general broadcast twice (once per bridged Discord channel)
475
+ // ... and NEVER the telegram-only block.
476
+ const opsSends = discord.sends.filter(s => s.channelId === 'chan-ops');
477
+ const genSends = discord.sends.filter(s => s.channelId === 'chan-general');
478
+ expect(opsSends.some(s => s.text.includes('Deploy finished'))).toBe(true);
479
+ expect(opsSends.some(s => s.text.includes('general broadcast'))).toBe(true);
480
+ expect(genSends.some(s => s.text.includes('general broadcast'))).toBe(true);
481
+ // Crucial isolation checks:
482
+ expect(discord.sends.some(s => /deploy ok/i.test(s.text))).toBe(false);
483
+ expect(discord.sends.some(s => /Private reasoning/i.test(s.text))).toBe(false);
484
+ expect(discord.sends.some(s => /Calling taskmanager/i.test(s.text))).toBe(false);
485
+
486
+ // Telegram should receive:
487
+ // - its own block
488
+ // - the general broadcast (once)
489
+ // ... and NEVER the discord-specific block or internal content.
490
+ expect(telegram.sends.some(s => /deploy ok/i.test(s.text))).toBe(true);
491
+ expect(telegram.sends.some(s => /general broadcast/i.test(s.text))).toBe(true);
492
+ expect(telegram.sends.some(s => /Deploy finished/i.test(s.text))).toBe(false);
493
+ expect(telegram.sends.some(s => /Private reasoning/i.test(s.text))).toBe(false);
494
+ expect(telegram.sends.some(s => /taskmanager/i.test(s.text))).toBe(false);
495
+ });
496
+ });
@@ -121,7 +121,7 @@ describe('Flow: Full message round-trip', () => {
121
121
  await service._handleBroadcastEvent('discord-guild-1-ch-1', {
122
122
  type: 'stream_complete',
123
123
  agentId: 'agent-alpha',
124
- content: 'Recursion is when a function calls itself.'
124
+ content: '<external>Recursion is when a function calls itself.</external>'
125
125
  });
126
126
 
127
127
  // Step 4: Verify response was sent to the correct channel
@@ -136,12 +136,12 @@ describe('Flow: Full message round-trip', () => {
136
136
  const msg = createDiscordMessage('write a long essay');
137
137
  await service._handleMessage(msg);
138
138
 
139
- // Simulate a response longer than Discord's limit
139
+ // Simulate a response longer than Discord's limit, wrapped for relay
140
140
  const longContent = 'A'.repeat(3500);
141
141
  await service._handleBroadcastEvent('discord-guild-1-ch-1', {
142
142
  type: 'stream_complete',
143
143
  agentId: 'agent-alpha',
144
- content: longContent
144
+ content: `<external>${longContent}</external>`
145
145
  });
146
146
 
147
147
  // Should have split into multiple messages
@@ -259,11 +259,11 @@ describe('Flow: Multi-channel response isolation', () => {
259
259
  const msg = createDiscordMessage('hello', { guildId: 'g1', channelId: 'chA' });
260
260
  await service._handleMessage(msg);
261
261
 
262
- // Agent responds via broadcast
262
+ // Agent responds via broadcast (wrapped for external relay)
263
263
  await service._handleBroadcastEvent('discord-g1-chA', {
264
264
  type: 'stream_complete',
265
265
  agentId: 'agent-1',
266
- content: 'Hi there!'
266
+ content: '<external>Hi there!</external>'
267
267
  });
268
268
 
269
269
  // Channel A should get the response
@@ -281,10 +281,10 @@ describe('Flow: Multi-channel response isolation', () => {
281
281
  const msgB = createDiscordMessage('question B', { guildId: 'g1', channelId: 'chB' });
282
282
  await service._handleMessage(msgB);
283
283
 
284
- // Agent responds (to question A)
284
+ // Agent responds (to question A) — wrapped for external relay
285
285
  await service._relayAgentResponse({
286
286
  agentId: 'agent-1',
287
- content: 'Answer A'
287
+ content: '<external>Answer A</external>'
288
288
  });
289
289
 
290
290
  // Both channels should get the response (both have recent interaction)
@@ -300,7 +300,7 @@ describe('Flow: Multi-channel response isolation', () => {
300
300
 
301
301
  await service._relayAgentResponse({
302
302
  agentId: 'agent-1',
303
- content: 'Answer B'
303
+ content: '<external>Answer B</external>'
304
304
  });
305
305
 
306
306
  // Only channel B should get it now
@@ -598,11 +598,11 @@ describe('Flow: Thread-level routing', () => {
598
598
  });
599
599
  await service._handleMessage(msg);
600
600
 
601
- // Agent responds
601
+ // Agent responds — wrapped for external relay
602
602
  await service._handleBroadcastEvent('session', {
603
603
  type: 'stream_complete',
604
604
  agentId: 'a1',
605
- content: 'answer'
605
+ content: '<external>answer</external>'
606
606
  });
607
607
 
608
608
  // Response should go to the thread, not the parent
@@ -382,17 +382,22 @@ describe('DiscordService', () => {
382
382
  mockChannel.send.mockClear();
383
383
  });
384
384
 
385
- test('relays response to channel with recent interaction', async () => {
385
+ test('relays ONLY the <external> portion to a channel with recent interaction', async () => {
386
+ // The relay is opt-in: content without <external> tags stays local.
387
+ // A full response typically mixes private reasoning with a wrapped
388
+ // reply — the wrapped block is all Discord ever sees.
386
389
  service.recentInteractions.set('a1:g1:c1', {
387
390
  channelKey: 'g1:c1',
388
391
  channelId: 'c1',
392
+ channelName: 'ops',
389
393
  guildId: 'g1',
394
+ guildName: 'Acme',
390
395
  timestamp: Date.now()
391
396
  });
392
397
 
393
398
  await service._relayAgentResponse({
394
399
  agentId: 'a1',
395
- content: 'Here is my answer',
400
+ content: 'private planning\n<external>Here is my answer</external>\nstill local',
396
401
  type: 'stream_complete'
397
402
  });
398
403
 
@@ -401,6 +406,8 @@ describe('DiscordService', () => {
401
406
  const sentText = mockChannel.send.mock.calls[0][0];
402
407
  expect(sentText).toContain('TestAgent');
403
408
  expect(sentText).toContain('Here is my answer');
409
+ expect(sentText).not.toContain('private planning');
410
+ expect(sentText).not.toContain('still local');
404
411
  });
405
412
 
406
413
  test('does NOT relay when no recent interaction for agent', async () => {
@@ -413,7 +420,7 @@ describe('DiscordService', () => {
413
420
  expect(mockChannel.send).not.toHaveBeenCalled();
414
421
  });
415
422
 
416
- test('does NOT relay expired interactions (TTL)', async () => {
423
+ test('does NOT relay expired interactions (TTL) — even with an <external> block', async () => {
417
424
  service.recentInteractions.set('a1:g1:c1', {
418
425
  channelKey: 'g1:c1',
419
426
  channelId: 'c1',
@@ -423,7 +430,7 @@ describe('DiscordService', () => {
423
430
 
424
431
  await service._relayAgentResponse({
425
432
  agentId: 'a1',
426
- content: 'Hello'
433
+ content: '<external>Hello</external>'
427
434
  });
428
435
 
429
436
  expect(mockChannel.send).not.toHaveBeenCalled();
@@ -434,13 +441,13 @@ describe('DiscordService', () => {
434
441
  test('relays only to the correct agent channels', async () => {
435
442
  // agent-1 has interaction on c1, agent-2 has interaction on c2
436
443
  service.recentInteractions.set('a1:g1:c1', {
437
- channelKey: 'g1:c1', channelId: 'c1', guildId: 'g1', timestamp: Date.now()
444
+ channelKey: 'g1:c1', channelId: 'c1', channelName: 'ops', guildId: 'g1', timestamp: Date.now()
438
445
  });
439
446
  service.recentInteractions.set('a2:g1:c2', {
440
- channelKey: 'g1:c2', channelId: 'c2', guildId: 'g1', timestamp: Date.now()
447
+ channelKey: 'g1:c2', channelId: 'c2', channelName: 'other', guildId: 'g1', timestamp: Date.now()
441
448
  });
442
449
 
443
- await service._relayAgentResponse({ agentId: 'a1', content: 'Reply from a1' });
450
+ await service._relayAgentResponse({ agentId: 'a1', content: '<external>Reply from a1</external>' });
444
451
 
445
452
  // Should only fetch c1, not c2
446
453
  expect(service.client.channels.fetch).toHaveBeenCalledWith('c1');
@@ -297,7 +297,9 @@ class AIService {
297
297
  // Respect options.maxTokens if provided (e.g., from compaction service)
298
298
  max_tokens: Math.min(options.maxTokens || this.modelSpecs[model]?.maxTokens || COMPACTION_CONFIG.MAX_OUTPUT_TOKENS, COMPACTION_CONFIG.MAX_OUTPUT_TOKENS),
299
299
  temperature: options.temperature || 0.7,
300
- stream: options.stream || false
300
+ stream: options.stream || false,
301
+ // Native function-call tools — same convention as the streaming path.
302
+ ...(Array.isArray(options.tools) && options.tools.length > 0 && { tools: options.tools }),
301
303
  },
302
304
  metadata: {
303
305
  requestId,
@@ -409,7 +411,11 @@ class AIService {
409
411
  options: {
410
412
  max_tokens: Math.min(options.maxTokens || this.modelSpecs[model]?.maxTokens || COMPACTION_CONFIG.MAX_OUTPUT_TOKENS, COMPACTION_CONFIG.MAX_OUTPUT_TOKENS),
411
413
  temperature: options.temperature || 0.7,
412
- stream: true // Force streaming
414
+ stream: true, // Force streaming
415
+ // Native function-call tools. CLI owns the tool catalog; backend
416
+ // forwards these verbatim to the Responses API (and ignores for
417
+ // chat-completion models). See src/tools/openaiFunctionSchemas.js.
418
+ ...(Array.isArray(options.tools) && options.tools.length > 0 && { tools: options.tools }),
413
419
  },
414
420
  metadata: {
415
421
  requestId,
@@ -426,7 +432,8 @@ class AIService {
426
432
  this.logger.info(`Sending streaming message to model: ${model}`, {
427
433
  requestId,
428
434
  agentId: options.agentId,
429
- messageCount: Array.isArray(messages) ? messages.length : 1
435
+ messageCount: Array.isArray(messages) ? messages.length : 1,
436
+ toolCount: options.tools?.length || 0,
430
437
  });
431
438
 
432
439
  // Make streaming API request