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
package/src/index.js CHANGED
@@ -654,6 +654,10 @@ class LoxiaApplication {
654
654
  this.telegramService.setAgentPool(this.agentPool);
655
655
  this.telegramService.setWebSocketManager(webServer);
656
656
  if (this.flowExecutor) this.telegramService.setFlowExecutor(this.flowExecutor);
657
+ // Let the scheduler query bridge-state per agent so it can inject
658
+ // the <external> routing guidance into system prompts only when the
659
+ // agent is actually addressable from Telegram.
660
+ this.agentScheduler?.setTelegramService?.(this.telegramService);
657
661
  // Auto-connect if token exists in config (non-blocking)
658
662
  this.telegramService.autoConnect().catch(e =>
659
663
  this.logger.warn('Telegram auto-connect failed', { error: e.message })
@@ -667,6 +671,10 @@ class LoxiaApplication {
667
671
  this.discordService.setAgentPool(this.agentPool);
668
672
  this.discordService.setWebSocketManager(webServer);
669
673
  if (this.flowExecutor) this.discordService.setFlowExecutor(this.flowExecutor);
674
+ // Same bridge-awareness hook as Telegram above — the scheduler
675
+ // only appends <external> guidance when `isAgentBridged(agentId)`
676
+ // returns true for this channel.
677
+ this.agentScheduler?.setDiscordService?.(this.discordService);
670
678
  // Auto-connect if token exists in config (non-blocking)
671
679
  this.discordService.autoConnect().catch(e =>
672
680
  this.logger.warn('Discord auto-connect failed', { error: e.message })
@@ -45,6 +45,270 @@ import FlowExecutor from '../core/flowExecutor.js';
45
45
  const __filename = fileURLToPath(import.meta.url);
46
46
  const __dirname = path.dirname(__filename);
47
47
 
48
+ // Self-contained HTML for the /scheduler debug viewer. No external deps;
49
+ // polls /api/scheduler/state every second and re-renders three sections:
50
+ // header strip, per-agent table, and cycle log. See plan:
51
+ // .claude/plans/snazzy-chasing-canyon.md ("Scheduler visualizer").
52
+ const SCHEDULER_VIEWER_HTML = `<!doctype html>
53
+ <html lang="en">
54
+ <head>
55
+ <meta charset="utf-8">
56
+ <title>Scheduler visualizer</title>
57
+ <style>
58
+ :root { color-scheme: dark; }
59
+ body { margin: 0; padding: 12px 16px; background: #0f1115; color: #d6d9de; font: 13px/1.35 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
60
+ h1 { font-size: 14px; margin: 0 0 8px; font-weight: 600; letter-spacing: .3px; }
61
+ h2 { font-size: 12px; margin: 20px 0 6px; color: #8b93a1; text-transform: uppercase; letter-spacing: .5px; font-weight: 600; }
62
+ .hdr { display: flex; gap: 24px; flex-wrap: wrap; padding: 10px 12px; background: #171a21; border: 1px solid #242832; border-radius: 6px; }
63
+ .hdr .kv { display: flex; flex-direction: column; }
64
+ .hdr .k { color: #8b93a1; font-size: 10px; text-transform: uppercase; letter-spacing: .4px; }
65
+ .hdr .v { font-size: 14px; color: #eaecef; }
66
+ .hdr .v.ok { color: #41d392; }
67
+ .hdr .v.bad { color: #ff6b6b; }
68
+ table { border-collapse: collapse; width: 100%; background: #13161c; border: 1px solid #242832; border-radius: 6px; overflow: hidden; }
69
+ th, td { padding: 6px 8px; text-align: left; border-bottom: 1px solid #1c1f27; vertical-align: top; white-space: nowrap; }
70
+ th { font-size: 10px; color: #8b93a1; text-transform: uppercase; letter-spacing: .4px; background: #171a21; position: sticky; top: 0; }
71
+ tr:last-child td { border-bottom: none; }
72
+ tr.row-wedged { background: rgba(255, 107, 107, 0.08); }
73
+ tr.row-hung { background: rgba(255, 184, 0, 0.08); }
74
+ tr.row-active { background: rgba(65, 211, 146, 0.05); }
75
+ .chip { display: inline-block; padding: 1px 7px; border-radius: 10px; font-size: 11px; font-weight: 600; }
76
+ .chip.ok { background: #133a27; color: #5fe2a6; }
77
+ .chip.bad { background: #3a1313; color: #ff8080; }
78
+ .chip.warn { background: #3a2e13; color: #ffc658; }
79
+ .chip.neutral { background: #242832; color: #b4bac5; }
80
+ .muted { color: #6c7280; }
81
+ .mono { font-family: inherit; }
82
+ .count { display: inline-block; min-width: 18px; text-align: right; color: #b4bac5; }
83
+ .iconbtn { background: none; border: 1px solid #2a2f3a; color: #b4bac5; padding: 2px 8px; border-radius: 4px; font: inherit; cursor: pointer; margin-left: 8px; }
84
+ .iconbtn:hover { background: #1c1f27; }
85
+ .tasks-line { color: #8b93a1; font-size: 11px; white-space: normal; max-width: 480px; }
86
+ .reason { color: #b4bac5; }
87
+ .error { color: #ff6b6b; padding: 10px; background: #2a1515; border: 1px solid #5a2525; border-radius: 6px; margin-top: 10px; }
88
+ .cycle-launched { color: #5fe2a6; }
89
+ .cycle-idle { color: #6c7280; }
90
+ .cycle-locked { color: #ff8080; }
91
+ .cycle-cap { color: #ffc658; }
92
+ .pill-id { display: inline-block; padding: 0 4px; background: #242832; border-radius: 3px; font-size: 11px; color: #b4bac5; margin-right: 3px; }
93
+ .wrap { max-width: 1600px; margin: 0 auto; }
94
+ a, a:visited { color: #6ea8fe; }
95
+ </style>
96
+ </head>
97
+ <body>
98
+ <div class="wrap">
99
+ <h1>Scheduler visualizer <span id="paused-note" class="muted" style="font-weight:normal;"></span></h1>
100
+ <div id="err" class="error" style="display:none"></div>
101
+ <div id="hdr" class="hdr"></div>
102
+
103
+ <h2>Agents (<span id="agent-count">0</span>)</h2>
104
+ <div style="overflow-x:auto">
105
+ <table id="agents">
106
+ <thead><tr>
107
+ <th>Name</th><th>Mode</th><th>Status</th>
108
+ <th>Active?</th><th>Reason</th>
109
+ <th>Lock</th><th>AI call</th><th>Empties</th>
110
+ <th>Delay</th><th>Paused</th><th>TTL</th><th>Awaiting input</th>
111
+ <th>Tasks (p/ip/✓)</th><th>Queues (U/I/T)</th>
112
+ <th>Model</th>
113
+ </tr></thead>
114
+ <tbody></tbody>
115
+ </table>
116
+ </div>
117
+
118
+ <h2>
119
+ Cycle log
120
+ <button class="iconbtn" id="show-all">Show all 200</button>
121
+ <button class="iconbtn" id="pause">Pause</button>
122
+ </h2>
123
+ <div style="overflow-x:auto">
124
+ <table id="cycles">
125
+ <thead><tr>
126
+ <th>#</th><th>Time</th><th>Outcome</th>
127
+ <th>Total</th><th>Active</th>
128
+ <th>In-flight</th><th>Locked-skip</th><th>Cap-skip</th>
129
+ <th>Launched</th>
130
+ </tr></thead>
131
+ <tbody></tbody>
132
+ </table>
133
+ </div>
134
+ </div>
135
+
136
+ <script>
137
+ (() => {
138
+ const $ = id => document.getElementById(id);
139
+ let showAll = false;
140
+ let paused = false;
141
+
142
+ $('show-all').addEventListener('click', () => {
143
+ showAll = !showAll;
144
+ $('show-all').textContent = showAll ? 'Show last 30' : 'Show all 200';
145
+ render(lastState);
146
+ });
147
+ $('pause').addEventListener('click', () => {
148
+ paused = !paused;
149
+ $('pause').textContent = paused ? 'Resume' : 'Pause';
150
+ $('paused-note').textContent = paused ? '(paused)' : '';
151
+ });
152
+
153
+ const fmtMs = ms => {
154
+ if (ms == null) return '';
155
+ if (ms < 1000) return ms + 'ms';
156
+ if (ms < 60000) return (ms / 1000).toFixed(1) + 's';
157
+ if (ms < 3600000) return Math.floor(ms / 60000) + 'm ' + Math.floor((ms % 60000) / 1000) + 's';
158
+ return Math.floor(ms / 3600000) + 'h ' + Math.floor((ms % 3600000) / 60000) + 'm';
159
+ };
160
+ const fmtTime = iso => iso ? new Date(iso).toLocaleTimeString('en-US', { hour12: false }) : '';
161
+ const esc = s => String(s ?? '').replace(/[&<>"']/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
162
+
163
+ function chipActive(a) {
164
+ if (a.activity?.active) return '<span class="chip ok">yes</span>';
165
+ return '<span class="chip bad">no</span>';
166
+ }
167
+
168
+ function chipLock(a) {
169
+ if (!a.lockHeld) return '<span class="muted">—</span>';
170
+ const ms = a.lockHeldMs ?? 0;
171
+ const cls = ms > 60000 ? 'bad' : ms > 5000 ? 'warn' : 'neutral';
172
+ return '<span class="chip ' + cls + '">held ' + fmtMs(ms) + '</span>';
173
+ }
174
+
175
+ function chipAI(a) {
176
+ const r = a.activeAIRequest;
177
+ if (!r) return '<span class="muted">—</span>';
178
+ const ms = r.durationMs ?? 0;
179
+ const cls = ms > 60000 ? 'bad' : ms > 10000 ? 'warn' : 'neutral';
180
+ return '<span class="chip ' + cls + '">' + esc(r.type || 'req') + ' ' + fmtMs(ms) + '</span>';
181
+ }
182
+
183
+ function chipEmpty(a) {
184
+ const e = a.emptyResponse;
185
+ if (!e || !e.count) return '<span class="muted">—</span>';
186
+ const elapsedMs = Date.now() - new Date(e.firstAt).getTime();
187
+ const cls = e.count >= 5 ? 'bad' : e.count >= 3 ? 'warn' : 'neutral';
188
+ return '<span class="chip ' + cls + '" title="first at ' + esc(new Date(e.firstAt).toISOString()) + '">' + e.count + 'x / ' + fmtMs(elapsedMs) + '</span>';
189
+ }
190
+
191
+ function chipDelay(a) {
192
+ if (!a.delayEndTime) return '<span class="muted">—</span>';
193
+ const end = new Date(a.delayEndTime).getTime();
194
+ const ms = end - Date.now();
195
+ if (ms <= 0) return '<span class="muted" title="' + esc(a.delayEndTime) + '">expired</span>';
196
+ return '<span class="chip warn" title="' + esc(a.delayEndTime) + '">' + fmtMs(ms) + '</span>';
197
+ }
198
+
199
+ function rowClass(a) {
200
+ if (a.lockHeld && (a.lockHeldMs ?? 0) > 60000) return 'row-wedged';
201
+ const aiMs = a.activeAIRequest?.durationMs ?? 0;
202
+ if (aiMs > 60000) return 'row-hung';
203
+ if ((a.emptyResponse?.count ?? 0) >= 3) return 'row-hung'; // amber — stall forming
204
+ if (a.activity?.active && !a.lockHeld) return 'row-active';
205
+ return '';
206
+ }
207
+
208
+ function renderAgents(agents) {
209
+ $('agent-count').textContent = agents.length;
210
+ const tbody = document.querySelector('#agents tbody');
211
+ // Sort: locked-wedged first, then active, then everything else. Stable for same class.
212
+ const score = a => (a.lockHeld && (a.lockHeldMs ?? 0) > 60000) ? 0
213
+ : (a.activeAIRequest?.durationMs ?? 0) > 60000 ? 1
214
+ : a.activity?.active ? 2
215
+ : 3;
216
+ const sorted = agents.slice().sort((x, y) => score(x) - score(y));
217
+ tbody.innerHTML = sorted.map(a => {
218
+ const q = a.queues || {};
219
+ const t = a.tasks || {};
220
+ return '<tr class="' + rowClass(a) + '">' +
221
+ '<td title="' + esc(a.id) + '">' + esc(a.name || a.id) + '</td>' +
222
+ '<td>' + esc(a.mode || '') + '</td>' +
223
+ '<td>' + esc(a.status || '') + '</td>' +
224
+ '<td>' + chipActive(a) + '</td>' +
225
+ '<td class="reason" title="' + esc(a.activity?.details || '') + '">' + esc(a.activity?.reason || '') + '</td>' +
226
+ '<td>' + chipLock(a) + '</td>' +
227
+ '<td>' + chipAI(a) + '</td>' +
228
+ '<td>' + chipEmpty(a) + '</td>' +
229
+ '<td>' + chipDelay(a) + '</td>' +
230
+ '<td>' + (a.pausedUntil ? '<span class="chip warn">paused</span>' : '<span class="muted">—</span>') + '</td>' +
231
+ '<td>' + (a.ttl != null ? '<span class="chip warn">' + esc(a.ttl) + '</span>' : '<span class="muted">—</span>') + '</td>' +
232
+ '<td>' + (a.awaitingUserInput ? '<span class="chip warn">' + esc(a.awaitingUserInput.type || 'yes') + '</span>' : '<span class="muted">—</span>') + '</td>' +
233
+ '<td><span class="count">' + (t.pending||0) + '</span>/<span class="count">' + (t.inProgress||0) + '</span>/<span class="count muted">' + (t.completed||0) + '</span>' +
234
+ (t.nextPending ? '<div class="tasks-line">next: ' + esc(t.nextPending) + '</div>' : '') + '</td>' +
235
+ '<td>' + (q.userMessages||0) + '/' + (q.interAgentMessages||0) + '/' + (q.toolResults||0) + '</td>' +
236
+ '<td class="muted">' + esc(a.currentModel || '—') + '</td>' +
237
+ '</tr>';
238
+ }).join('');
239
+ }
240
+
241
+ function renderCycles(cycles) {
242
+ const tbody = document.querySelector('#cycles tbody');
243
+ // Newest first
244
+ const reversed = cycles.slice().reverse();
245
+ const limited = showAll ? reversed : reversed.slice(0, 30);
246
+ tbody.innerHTML = limited.map(c => {
247
+ const outcomeClass = 'cycle-' + (c.outcome === 'launched' ? 'launched'
248
+ : c.outcome === 'idle' ? 'idle'
249
+ : c.outcome === 'all-locked' ? 'locked'
250
+ : c.outcome === 'concurrency-cap' ? 'cap'
251
+ : 'idle');
252
+ const launched = (c.launched || []).map(id => '<span class="pill-id" title="' + esc(id) + '">' + esc(id.slice(-8)) + '</span>').join('') || '<span class="muted">—</span>';
253
+ const locked = (c.skippedLocked || []).map(id => '<span class="pill-id" title="' + esc(id) + '">' + esc(id.slice(-8)) + '</span>').join('') || '<span class="muted">—</span>';
254
+ const cap = (c.skippedConcurrency || []).map(id => '<span class="pill-id" title="' + esc(id) + '">' + esc(id.slice(-8)) + '</span>').join('') || '<span class="muted">—</span>';
255
+ return '<tr>' +
256
+ '<td class="muted">' + c.n + '</td>' +
257
+ '<td>' + fmtTime(c.at) + '</td>' +
258
+ '<td class="' + outcomeClass + '">' + esc(c.outcome || '') + '</td>' +
259
+ '<td>' + (c.totalAgents || 0) + '</td>' +
260
+ '<td>' + (c.activeCount || 0) + '</td>' +
261
+ '<td>' + (c.inFlightAtStart || 0) + '</td>' +
262
+ '<td>' + locked + '</td>' +
263
+ '<td>' + cap + '</td>' +
264
+ '<td>' + launched + '</td>' +
265
+ '</tr>';
266
+ }).join('');
267
+ }
268
+
269
+ function renderHeader(s) {
270
+ const hdr = $('hdr');
271
+ const inflight = s.scheduler.currentlyInFlight;
272
+ const cap = s.scheduler.maxConcurrent;
273
+ hdr.innerHTML =
274
+ '<div class="kv"><div class="k">Server</div><div class="v">' + fmtTime(s.serverTime) + '</div></div>' +
275
+ '<div class="kv"><div class="k">Scheduler</div><div class="v ' + (s.scheduler.running ? 'ok' : 'bad') + '">' + (s.scheduler.running ? 'running' : 'stopped') + '</div></div>' +
276
+ '<div class="kv"><div class="k">Tick</div><div class="v">' + s.scheduler.iterationDelayMs + 'ms</div></div>' +
277
+ '<div class="kv"><div class="k">Cycles</div><div class="v">' + s.scheduler.cycleCount + '</div></div>' +
278
+ '<div class="kv"><div class="k">In-flight</div><div class="v ' + (inflight >= cap ? 'bad' : '') + '">' + inflight + ' / ' + cap + '</div></div>' +
279
+ '<div class="kv"><div class="k">Agents</div><div class="v">' + s.agents.length + '</div></div>';
280
+ }
281
+
282
+ let lastState = null;
283
+ function render(s) {
284
+ if (!s) return;
285
+ lastState = s;
286
+ renderHeader(s);
287
+ renderAgents(s.agents);
288
+ renderCycles(s.cycles);
289
+ }
290
+
291
+ async function tick() {
292
+ if (paused) return;
293
+ try {
294
+ const res = await fetch('/api/scheduler/state', { cache: 'no-store' });
295
+ if (!res.ok) throw new Error('HTTP ' + res.status);
296
+ const data = await res.json();
297
+ $('err').style.display = 'none';
298
+ render(data);
299
+ } catch (err) {
300
+ $('err').style.display = 'block';
301
+ $('err').textContent = 'Failed to fetch scheduler state: ' + err.message;
302
+ }
303
+ }
304
+
305
+ tick();
306
+ setInterval(tick, 1000);
307
+ })();
308
+ </script>
309
+ </body>
310
+ </html>`;
311
+
48
312
  class WebServer {
49
313
  constructor(orchestrator, logger, config = {}) {
50
314
  this.orchestrator = orchestrator;
@@ -2901,6 +3165,30 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
2901
3165
  }
2902
3166
  });
2903
3167
 
3168
+ // ============================================
3169
+ // Scheduler Visualizer — JSON state endpoint + HTML viewer
3170
+ // ============================================
3171
+
3172
+ // JSON snapshot of scheduler + all agents — polled by /scheduler at 1 Hz.
3173
+ this.app.get('/api/scheduler/state', async (req, res) => {
3174
+ try {
3175
+ const sched = this.orchestrator?.agentPool?.scheduler;
3176
+ if (!sched?.getState) {
3177
+ return res.status(503).json({ error: 'scheduler is not attached' });
3178
+ }
3179
+ const state = await sched.getState();
3180
+ res.json(state);
3181
+ } catch (err) {
3182
+ this.logger.error('Failed to build scheduler state', { error: err.message });
3183
+ res.status(500).json({ error: err.message });
3184
+ }
3185
+ });
3186
+
3187
+ // Self-contained HTML viewer. See SCHEDULER_VIEWER_HTML below.
3188
+ this.app.get('/scheduler', (req, res) => {
3189
+ res.type('html').send(SCHEDULER_VIEWER_HTML);
3190
+ });
3191
+
2904
3192
  // ============================================
2905
3193
  // Artifacts API Endpoint
2906
3194
  // ============================================
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Unit tests for channelFilter.js
3
+ *
4
+ * Exercises the pure-function surface: parsing `<external>` blocks out of
5
+ * raw agent content, resolving block targets against a set of owned
6
+ * aliases, and generating the system-prompt guidance paragraph.
7
+ *
8
+ * The filter is API-path agnostic (runs on post-bridge content equivalent
9
+ * for both Responses API and Chat Completions), so nothing here mocks
10
+ * model providers — we only feed it representative content shapes.
11
+ */
12
+
13
+ import { describe, test, expect } from '@jest/globals';
14
+ import {
15
+ filterContentForExternalRelay,
16
+ resolveBlockTargets,
17
+ getExternalChannelPromptGuidance,
18
+ } from '../channelFilter.js';
19
+
20
+ // ───────────────────────── filterContentForExternalRelay ─────────────────────────
21
+
22
+ describe('filterContentForExternalRelay()', () => {
23
+ test('no <external> tags → empty blocks (nothing relayed)', () => {
24
+ expect(filterContentForExternalRelay('plain text only').blocks).toEqual([]);
25
+ expect(filterContentForExternalRelay('').blocks).toEqual([]);
26
+ expect(filterContentForExternalRelay(null).blocks).toEqual([]);
27
+ expect(filterContentForExternalRelay(undefined).blocks).toEqual([]);
28
+ });
29
+
30
+ test('single default-routed block (no to=) → to: null', () => {
31
+ const { blocks } = filterContentForExternalRelay('<external>hello</external>');
32
+ expect(blocks).toEqual([{ to: null, text: 'hello' }]);
33
+ });
34
+
35
+ test('block with single alias in to=', () => {
36
+ const { blocks } = filterContentForExternalRelay(
37
+ '<external to="discord:#ops">only ops</external>'
38
+ );
39
+ expect(blocks).toEqual([{ to: ['discord:#ops'], text: 'only ops' }]);
40
+ });
41
+
42
+ test('block with multiple aliases (comma-separated, spaces tolerated)', () => {
43
+ const { blocks } = filterContentForExternalRelay(
44
+ '<external to="discord:#ops, telegram, discord:#general">multi</external>'
45
+ );
46
+ expect(blocks).toEqual([
47
+ { to: ['discord:#ops', 'telegram', 'discord:#general'], text: 'multi' },
48
+ ]);
49
+ });
50
+
51
+ test('to="*" preserved as explicit broadcast marker', () => {
52
+ const { blocks } = filterContentForExternalRelay('<external to="*">yo</external>');
53
+ expect(blocks).toEqual([{ to: ['*'], text: 'yo' }]);
54
+ });
55
+
56
+ test('empty to= is treated as default (null)', () => {
57
+ expect(filterContentForExternalRelay('<external to="">yo</external>').blocks)
58
+ .toEqual([{ to: null, text: 'yo' }]);
59
+ expect(filterContentForExternalRelay('<external to=" ">yo</external>').blocks)
60
+ .toEqual([{ to: null, text: 'yo' }]);
61
+ });
62
+
63
+ test('single and double quotes both accepted for to=', () => {
64
+ expect(filterContentForExternalRelay(`<external to='telegram'>x</external>`).blocks)
65
+ .toEqual([{ to: ['telegram'], text: 'x' }]);
66
+ expect(filterContentForExternalRelay(`<external to="telegram">x</external>`).blocks)
67
+ .toEqual([{ to: ['telegram'], text: 'x' }]);
68
+ });
69
+
70
+ test('case-insensitive tag matching (both opening and closing)', () => {
71
+ expect(filterContentForExternalRelay('<EXTERNAL>hi</EXTERNAL>').blocks)
72
+ .toEqual([{ to: null, text: 'hi' }]);
73
+ expect(filterContentForExternalRelay('<External To="telegram">hi</External>').blocks)
74
+ .toEqual([{ to: ['telegram'], text: 'hi' }]);
75
+ });
76
+
77
+ test('multiple blocks parsed in document order', () => {
78
+ const { blocks } = filterContentForExternalRelay(
79
+ '<external>A</external>middle<external to="x">B</external>tail<external>C</external>'
80
+ );
81
+ expect(blocks).toEqual([
82
+ { to: null, text: 'A' },
83
+ { to: ['x'], text: 'B' },
84
+ { to: null, text: 'C' },
85
+ ]);
86
+ });
87
+
88
+ test('content outside <external> is never captured', () => {
89
+ const content = 'private planning\n<external>public</external>\nmore private';
90
+ expect(filterContentForExternalRelay(content).blocks)
91
+ .toEqual([{ to: null, text: 'public' }]);
92
+ });
93
+
94
+ test('CONTENT VERBATIM — code blocks preserved inside <external>', () => {
95
+ const content = '<external>```js\nconst x = 1;\n```</external>';
96
+ expect(filterContentForExternalRelay(content).blocks).toEqual([
97
+ { to: null, text: '```js\nconst x = 1;\n```' },
98
+ ]);
99
+ });
100
+
101
+ test('CONTENT VERBATIM — tool-call JSON blocks preserved inside <external>', () => {
102
+ // Critical: the filter must NOT strip tool JSON just because it looks
103
+ // like internal bookkeeping. If the agent put it inside <external>,
104
+ // the agent wants it published (e.g., a task summary).
105
+ const tool = '```json\n{"toolId":"taskmanager","parameters":{}}\n```';
106
+ const { blocks } = filterContentForExternalRelay(`<external>${tool}</external>`);
107
+ expect(blocks[0].text).toBe(tool);
108
+ });
109
+
110
+ test('CONTENT VERBATIM — "Calling X" bridge preamble preserved if wrapped', () => {
111
+ const txt = '**Calling terminal** — cmd: ls…\n\nsee below';
112
+ const { blocks } = filterContentForExternalRelay(`<external>${txt}</external>`);
113
+ expect(blocks[0].text).toBe(txt);
114
+ });
115
+
116
+ test('empty or whitespace-only block is dropped', () => {
117
+ expect(filterContentForExternalRelay('<external></external>').blocks).toEqual([]);
118
+ expect(filterContentForExternalRelay('<external> \n\n</external>').blocks).toEqual([]);
119
+ });
120
+
121
+ test('leading/trailing whitespace in block body is trimmed', () => {
122
+ const { blocks } = filterContentForExternalRelay('<external>\n\n hi \n\n</external>');
123
+ expect(blocks).toEqual([{ to: null, text: 'hi' }]);
124
+ });
125
+
126
+ test('unclosed <external> tag is ignored (no runaway capture)', () => {
127
+ // Non-greedy regex stops at first </external> it finds; an unclosed
128
+ // opener produces no blocks rather than swallowing the rest of the turn.
129
+ expect(filterContentForExternalRelay('<external>open forever').blocks).toEqual([]);
130
+ });
131
+
132
+ test('mixed API-path content: prose + bridge preamble + tool JSON + <external> reply', () => {
133
+ // Representative of what `stream_complete` carries on either API path
134
+ // after the bridge has converted native tool calls to inline blocks.
135
+ const content =
136
+ "Thinking through this…\n\n" +
137
+ "**Calling taskmanager** — type: create, title: foo…\n\n" +
138
+ "```json\n{\"toolId\":\"taskmanager\",\"parameters\":{\"actions\":[{\"type\":\"create\",\"title\":\"foo\"}]}}\n```\n\n" +
139
+ "<external to=\"discord:#ops\">\n" +
140
+ "Created a task for you: **foo**. I'll post back when it's done.\n" +
141
+ "</external>\n\n" +
142
+ "<external to=\"telegram\">Done ✅</external>";
143
+ const { blocks } = filterContentForExternalRelay(content);
144
+ expect(blocks).toHaveLength(2);
145
+ expect(blocks[0]).toEqual({
146
+ to: ['discord:#ops'],
147
+ text: "Created a task for you: **foo**. I'll post back when it's done.",
148
+ });
149
+ expect(blocks[1]).toEqual({ to: ['telegram'], text: 'Done ✅' });
150
+ });
151
+ });
152
+
153
+ // ────────────────────────────── resolveBlockTargets ──────────────────────────────
154
+
155
+ describe('resolveBlockTargets()', () => {
156
+ const owned = ['discord:#ops', 'discord:#general', 'telegram'];
157
+
158
+ test('no owned aliases → always empty', () => {
159
+ expect(resolveBlockTargets({ to: null }, [])).toEqual([]);
160
+ expect(resolveBlockTargets({ to: ['*'] }, [])).toEqual([]);
161
+ expect(resolveBlockTargets({ to: ['telegram'] }, [])).toEqual([]);
162
+ });
163
+
164
+ test('to=null → broadcast to every owned alias', () => {
165
+ expect(resolveBlockTargets({ to: null }, owned).sort()).toEqual([...owned].sort());
166
+ });
167
+
168
+ test('to=["*"] → broadcast to every owned alias (same as null)', () => {
169
+ expect(resolveBlockTargets({ to: ['*'] }, owned).sort()).toEqual([...owned].sort());
170
+ });
171
+
172
+ test('exact alias match (case-insensitive)', () => {
173
+ expect(resolveBlockTargets({ to: ['telegram'] }, owned)).toEqual(['telegram']);
174
+ expect(resolveBlockTargets({ to: ['TELEGRAM'] }, owned)).toEqual(['telegram']);
175
+ expect(resolveBlockTargets({ to: ['Discord:#Ops'] }, owned)).toEqual(['discord:#ops']);
176
+ });
177
+
178
+ test('substring match (short form → canonical alias)', () => {
179
+ // Agent wrote `#ops` — matches owned `discord:#ops`.
180
+ expect(resolveBlockTargets({ to: ['#ops'] }, owned)).toEqual(['discord:#ops']);
181
+ // Agent wrote `ops` — also matches.
182
+ expect(resolveBlockTargets({ to: ['ops'] }, owned)).toEqual(['discord:#ops']);
183
+ });
184
+
185
+ test('multiple targets in to= resolve additively', () => {
186
+ const r = resolveBlockTargets({ to: ['#ops', 'telegram'] }, owned).sort();
187
+ expect(r).toEqual(['discord:#ops', 'telegram'].sort());
188
+ });
189
+
190
+ test('unknown alias → empty match (block silently skipped by caller)', () => {
191
+ expect(resolveBlockTargets({ to: ['slack:#ops'] }, owned)).toEqual([]);
192
+ expect(resolveBlockTargets({ to: ['nonexistent'] }, owned)).toEqual([]);
193
+ });
194
+
195
+ test('duplicate matches are deduped', () => {
196
+ // Substring matching could theoretically match the same owned alias
197
+ // twice — ensure the return value is a set.
198
+ expect(resolveBlockTargets({ to: ['ops', '#ops', 'discord:#ops'] }, owned))
199
+ .toEqual(['discord:#ops']);
200
+ });
201
+ });
202
+
203
+ // ─────────────────────── getExternalChannelPromptGuidance ────────────────────────
204
+
205
+ describe('getExternalChannelPromptGuidance()', () => {
206
+ test('empty channel list → empty string (no prompt pollution)', () => {
207
+ expect(getExternalChannelPromptGuidance([])).toBe('');
208
+ expect(getExternalChannelPromptGuidance(null)).toBe('');
209
+ expect(getExternalChannelPromptGuidance(undefined)).toBe('');
210
+ });
211
+
212
+ test('single channel → guidance includes alias and label', () => {
213
+ const out = getExternalChannelPromptGuidance([
214
+ { alias: 'telegram', label: 'Telegram chat' },
215
+ ]);
216
+ expect(out).toContain('OUTPUT ROUTING');
217
+ expect(out).toContain('`telegram`');
218
+ expect(out).toContain('Telegram chat');
219
+ expect(out).toContain('<external>');
220
+ expect(out).toContain('<external to="alias">');
221
+ });
222
+
223
+ test('multiple channels listed in given order', () => {
224
+ const out = getExternalChannelPromptGuidance([
225
+ { alias: 'discord:#ops', label: 'Discord channel #ops in Acme' },
226
+ { alias: 'discord:#general', label: 'Discord channel #general in Acme' },
227
+ { alias: 'telegram', label: 'Telegram chat' },
228
+ ]);
229
+ const opsIdx = out.indexOf('`discord:#ops`');
230
+ const genIdx = out.indexOf('`discord:#general`');
231
+ const telIdx = out.indexOf('`telegram`');
232
+ expect(opsIdx).toBeGreaterThan(-1);
233
+ expect(genIdx).toBeGreaterThan(opsIdx);
234
+ expect(telIdx).toBeGreaterThan(genIdx);
235
+ });
236
+
237
+ test('documents the addressing matrix (default / specific / multi / broadcast)', () => {
238
+ const out = getExternalChannelPromptGuidance([{ alias: 'telegram', label: 't' }]);
239
+ expect(out).toContain('broadcast to every bridged channel');
240
+ expect(out).toContain('<external to="alias">');
241
+ expect(out).toContain('<external to="aliasA,aliasB">');
242
+ expect(out).toContain('<external to="*">');
243
+ });
244
+
245
+ test('explicitly states that default (no <external>) means local-only', () => {
246
+ const out = getExternalChannelPromptGuidance([{ alias: 'telegram', label: 't' }]);
247
+ expect(out).toMatch(/stays local|never forwarded|NOTHING you write is forwarded/i);
248
+ });
249
+
250
+ test('channel entry without a label still renders alias', () => {
251
+ const out = getExternalChannelPromptGuidance([{ alias: 'telegram' }]);
252
+ expect(out).toContain('`telegram`');
253
+ });
254
+
255
+ test('ignores entries with missing / empty aliases', () => {
256
+ const out = getExternalChannelPromptGuidance([
257
+ { alias: '', label: 'dropped' },
258
+ { alias: ' ', label: 'dropped' },
259
+ { alias: 'telegram', label: 'kept' },
260
+ ]);
261
+ expect(out).toContain('`telegram`');
262
+ expect(out).not.toContain('dropped');
263
+ });
264
+ });