onbuzz 4.1.0 → 4.2.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 (967) hide show
  1. package/package.json +1 -1
  2. package/src/core/__tests__/agentPoolToolConfig.test.js +191 -0
  3. package/src/core/__tests__/agentPoolWakeOnMessage.test.js +315 -0
  4. package/src/core/__tests__/messageProcessor.test.js +42 -0
  5. package/src/core/agentPool.js +118 -25
  6. package/src/core/agentScheduler.js +28 -4
  7. package/src/core/messageProcessor.js +19 -1
  8. package/src/interfaces/__tests__/galleryRoutes.test.js +311 -0
  9. package/src/interfaces/webServer.js +142 -2
  10. package/src/services/__tests__/agentActivityService.test.js +83 -0
  11. package/src/services/__tests__/aiService.reasoningTokens.test.js +66 -0
  12. package/src/services/__tests__/aiService.stream.test.js +301 -0
  13. package/src/services/__tests__/conversationQuery.reasoning.test.js +102 -0
  14. package/src/services/__tests__/toolCallBridgeContract.test.js +129 -0
  15. package/src/services/agentActivityService.js +25 -4
  16. package/src/services/aiService.js +180 -91
  17. package/src/services/conversationQuery.js +26 -0
  18. package/src/tools/__tests__/agentCommunicationTool.test.js +114 -0
  19. package/src/tools/__tests__/baseTool.getEffectiveConfig.test.js +77 -0
  20. package/src/tools/__tests__/baseTool.test.js +471 -420
  21. package/src/tools/__tests__/filesystemTool.test.js +98 -0
  22. package/src/tools/__tests__/memoryTool.reminisce.test.js +33 -0
  23. package/src/tools/__tests__/terminalTool.test.js +64 -0
  24. package/src/tools/__tests__/webTool.perAgentConfig.test.js +94 -0
  25. package/src/tools/agentCommunicationTool.js +33 -22
  26. package/src/tools/baseTool.js +980 -899
  27. package/src/tools/fileSystemTool.js +76 -2
  28. package/src/tools/memoryTool.js +4 -0
  29. package/src/tools/terminalTool.js +62 -2
  30. package/src/tools/webTool.js +65 -1
  31. package/web-ui/build/index.html +2 -2
  32. package/web-ui/build/static/1c-C_9olPfq.js +1 -0
  33. package/web-ui/build/static/abap--DeFI1OC.js +1 -0
  34. package/web-ui/build/static/abnf-5HzSmxRy.js +1 -0
  35. package/web-ui/build/static/abnf-IG-O3NHT.js +1 -0
  36. package/web-ui/build/static/accesslog-qO_3I5IJ.js +1 -0
  37. package/web-ui/build/static/actionscript-DbFc2Uxo.js +1 -0
  38. package/web-ui/build/static/actionscript-jU7xUh7w.js +1 -0
  39. package/web-ui/build/static/ada-DBOzyNDe.js +1 -0
  40. package/web-ui/build/static/ada-F0QwXh2e.js +1 -0
  41. package/web-ui/build/static/agda-Drhr_GYC.js +1 -0
  42. package/web-ui/build/static/al-bEatcrqU.js +1 -0
  43. package/web-ui/build/static/angelscript-Bp0mqasc.js +1 -0
  44. package/web-ui/build/static/antlr4-BCvixOqW.js +1 -0
  45. package/web-ui/build/static/apache-zSeWcGFf.js +1 -0
  46. package/web-ui/build/static/apacheconf-CEDX0qIZ.js +1 -0
  47. package/web-ui/build/static/apex-BHlvjPxZ.js +1 -0
  48. package/web-ui/build/static/apl-S86eLVnh.js +1 -0
  49. package/web-ui/build/static/applescript-D15JiHTt.js +1 -0
  50. package/web-ui/build/static/applescript-D6g2nIGs.js +1 -0
  51. package/web-ui/build/static/aql-C4SWmhk2.js +1 -0
  52. package/web-ui/build/static/arcade-DrwRCCCh.js +1 -0
  53. package/web-ui/build/static/arduino-Blsw4-hb.js +1 -0
  54. package/web-ui/build/static/arduino-s6CYn6L3.js +1 -0
  55. package/web-ui/build/static/arff-DnrfdsTx.js +1 -0
  56. package/web-ui/build/static/armasm-C2WK9q2y.js +1 -0
  57. package/web-ui/build/static/asciidoc-BiY2pDol.js +1 -0
  58. package/web-ui/build/static/asciidoc-DG128-Q1.js +1 -0
  59. package/web-ui/build/static/asm6502-BEAW0Cck.js +1 -0
  60. package/web-ui/build/static/asmatmel-C4v7boSu.js +1 -0
  61. package/web-ui/build/static/aspectj-Bfek529B.js +1 -0
  62. package/web-ui/build/static/aspnet-8K2PeLn2.js +1 -0
  63. package/web-ui/build/static/autohotkey-BHw78HYu.js +1 -0
  64. package/web-ui/build/static/autohotkey-C5DDQtDL.js +1 -0
  65. package/web-ui/build/static/autoit-CgsSmQkF.js +1 -0
  66. package/web-ui/build/static/autoit-DZ7IS_9i.js +1 -0
  67. package/web-ui/build/static/avisynth-B20WuEUg.js +1 -0
  68. package/web-ui/build/static/avrasm-C7TrcWBg.js +1 -0
  69. package/web-ui/build/static/avro-idl-CfDy8XWE.js +1 -0
  70. package/web-ui/build/static/awk-cjY-7p5o.js +1 -0
  71. package/web-ui/build/static/axapta-Bu9INQG2.js +1 -0
  72. package/web-ui/build/static/bash-B998wxy_.js +1 -0
  73. package/web-ui/build/static/bash-LE6roX2s.js +1 -0
  74. package/web-ui/build/static/basic-Cd6-vDdH.js +1 -0
  75. package/web-ui/build/static/basic-mfY-ovnp.js +1 -0
  76. package/web-ui/build/static/batch-DxVy2cwv.js +1 -0
  77. package/web-ui/build/static/bbcode-Ct3Yu8De.js +1 -0
  78. package/web-ui/build/static/bicep-CexPoMEW.js +1 -0
  79. package/web-ui/build/static/birb-CH1RMpPI.js +1 -0
  80. package/web-ui/build/static/bison-XQFuPB_Q.js +1 -0
  81. package/web-ui/build/static/bnf-CIDGmY3l.js +1 -0
  82. package/web-ui/build/static/bnf-DjN_FU2s.js +1 -0
  83. package/web-ui/build/static/brainfuck-Cu_hvayi.js +1 -0
  84. package/web-ui/build/static/brainfuck-eRbe4_qo.js +1 -0
  85. package/web-ui/build/static/brightscript-Cdq0ttTN.js +1 -0
  86. package/web-ui/build/static/bro-D3aio8LS.js +1 -0
  87. package/web-ui/build/static/bsl-DFEwVZ2J.js +1 -0
  88. package/web-ui/build/static/c-D6RK1vhn.js +1 -0
  89. package/web-ui/build/static/c-DUcBA02q.js +1 -0
  90. package/web-ui/build/static/c-like-BApJDFwD.js +1 -0
  91. package/web-ui/build/static/cal-Ckv8Qnpw.js +1 -0
  92. package/web-ui/build/static/capnproto-DCoblEyS.js +1 -0
  93. package/web-ui/build/static/ceylon-DM-zZDWY.js +1 -0
  94. package/web-ui/build/static/cfscript-CMoOAgUK.js +1 -0
  95. package/web-ui/build/static/chaiscript-B3Vl3wGb.js +1 -0
  96. package/web-ui/build/static/cil-ChEi_uFO.js +1 -0
  97. package/web-ui/build/static/clean-BtA08oDV.js +1 -0
  98. package/web-ui/build/static/clojure-CWMlf7lJ.js +1 -0
  99. package/web-ui/build/static/clojure-Vur8C4jr.js +1 -0
  100. package/web-ui/build/static/clojure-repl-BsfGHdYy.js +1 -0
  101. package/web-ui/build/static/cmake-Csgl_IVr.js +1 -0
  102. package/web-ui/build/static/cmake-DFMKvwxy.js +1 -0
  103. package/web-ui/build/static/cobol-XhlGrCrW.js +1 -0
  104. package/web-ui/build/static/coffeescript-DYldGW35.js +1 -0
  105. package/web-ui/build/static/coffeescript-DvbNKwrC.js +1 -0
  106. package/web-ui/build/static/concurnas-DjALqCYn.js +1 -0
  107. package/web-ui/build/static/coq-D9QGJI6g.js +1 -0
  108. package/web-ui/build/static/coq-fAZpoc7i.js +1 -0
  109. package/web-ui/build/static/cos-GgM7WWVZ.js +1 -0
  110. package/web-ui/build/static/cpp-Cgt5qqfd.js +1 -0
  111. package/web-ui/build/static/cpp-DxVcOuBe.js +1 -0
  112. package/web-ui/build/static/crmsh-BlZWnzbY.js +1 -0
  113. package/web-ui/build/static/crystal--H7HLAQf.js +1 -0
  114. package/web-ui/build/static/crystal-DWm0bbUT.js +1 -0
  115. package/web-ui/build/static/csharp-8dr-wktE.js +1 -0
  116. package/web-ui/build/static/csharp-DFuHLPFe.js +1 -0
  117. package/web-ui/build/static/cshtml-C-L4_dy2.js +1 -0
  118. package/web-ui/build/static/csp-CJ6qbecO.js +1 -0
  119. package/web-ui/build/static/csp-DswTy-5u.js +1 -0
  120. package/web-ui/build/static/css-DdRPdKXQ.js +1 -0
  121. package/web-ui/build/static/css-extras-DMwOZFrB.js +1 -0
  122. package/web-ui/build/static/csv-BiWlhIMC.js +1 -0
  123. package/web-ui/build/static/cypher-ByNaJKO8.js +1 -0
  124. package/web-ui/build/static/d-BR89VlK-.js +1 -0
  125. package/web-ui/build/static/d-KlWvBc4w.js +1 -0
  126. package/web-ui/build/static/dart-BIsk7m6o.js +1 -0
  127. package/web-ui/build/static/dart-BnyP1Rjp.js +1 -0
  128. package/web-ui/build/static/dataweave-CH_Q2gWX.js +1 -0
  129. package/web-ui/build/static/dax-wulX9uc-.js +1 -0
  130. package/web-ui/build/static/delphi-CFowdk_A.js +1 -0
  131. package/web-ui/build/static/dhall-BfCOemEp.js +1 -0
  132. package/web-ui/build/static/diff-DQD2zPaG.js +1 -0
  133. package/web-ui/build/static/diff-DZoEdrYM.js +1 -0
  134. package/web-ui/build/static/django-B0j973Kw.js +1 -0
  135. package/web-ui/build/static/django-CYScL320.js +1 -0
  136. package/web-ui/build/static/dns-DoECkAgz.js +1 -0
  137. package/web-ui/build/static/dns-zone-file-CuoIcXgj.js +1 -0
  138. package/web-ui/build/static/docker-C2nfXTBG.js +1 -0
  139. package/web-ui/build/static/dockerfile-DBalxIH7.js +1 -0
  140. package/web-ui/build/static/dos-GNL9IdmL.js +1 -0
  141. package/web-ui/build/static/dot-rKuRS-PS.js +1 -0
  142. package/web-ui/build/static/dsconfig-CKmenTFr.js +1 -0
  143. package/web-ui/build/static/dts-AxT2qjQU.js +1 -0
  144. package/web-ui/build/static/dust-DpqHWPC4.js +1 -0
  145. package/web-ui/build/static/ebnf-CONEMpLp.js +1 -0
  146. package/web-ui/build/static/ebnf-DRWcOs8R.js +1 -0
  147. package/web-ui/build/static/editorconfig-lmLHmECZ.js +1 -0
  148. package/web-ui/build/static/eiffel-B39e31fw.js +1 -0
  149. package/web-ui/build/static/ejs-DtJwpVdo.js +1 -0
  150. package/web-ui/build/static/elixir-BH4JTqa9.js +1 -0
  151. package/web-ui/build/static/elixir-aH1DLjYD.js +1 -0
  152. package/web-ui/build/static/elm-BcCGkSrW.js +1 -0
  153. package/web-ui/build/static/elm-CCrB1JbX.js +1 -0
  154. package/web-ui/build/static/erb-CcumI1K3.js +1 -0
  155. package/web-ui/build/static/erb-_HK77hx-.js +1 -0
  156. package/web-ui/build/static/erlang-B1qxMZZp.js +1 -0
  157. package/web-ui/build/static/erlang-CCM_ejO_.js +1 -0
  158. package/web-ui/build/static/erlang-repl-D1zC2Zf6.js +1 -0
  159. package/web-ui/build/static/etlua-HJMRx9x7.js +1 -0
  160. package/web-ui/build/static/excel-DqXCKUKa.js +1 -0
  161. package/web-ui/build/static/excel-formula-oNw1T5Gi.js +1 -0
  162. package/web-ui/build/static/factor-BrTp5FZH.js +1 -0
  163. package/web-ui/build/static/false-CAVqV3ok.js +1 -0
  164. package/web-ui/build/static/firestore-security-rules-CxTofGT0.js +1 -0
  165. package/web-ui/build/static/fix-BMooo7-3.js +1 -0
  166. package/web-ui/build/static/flix-DR5Pi_4n.js +1 -0
  167. package/web-ui/build/static/flow-BoCWpUCW.js +1 -0
  168. package/web-ui/build/static/fortran-B9JI5ahV.js +1 -0
  169. package/web-ui/build/static/fortran-LXg81aOn.js +1 -0
  170. package/web-ui/build/static/fsharp-BqcGG-SM.js +1 -0
  171. package/web-ui/build/static/fsharp-Dj5YVL_h.js +1 -0
  172. package/web-ui/build/static/ftl-kuY7uFR8.js +1 -0
  173. package/web-ui/build/static/gams-CzihHKqE.js +1 -0
  174. package/web-ui/build/static/gap-BbS0A-Wl.js +1 -0
  175. package/web-ui/build/static/gauss-BauwG_O4.js +1 -0
  176. package/web-ui/build/static/gcode-VY1OKBcC.js +1 -0
  177. package/web-ui/build/static/gcode-lapsLgV5.js +1 -0
  178. package/web-ui/build/static/gdscript-1UIYB8m0.js +1 -0
  179. package/web-ui/build/static/gedcom-Bhrxt1LM.js +1 -0
  180. package/web-ui/build/static/gherkin-BsUD3vJB.js +1 -0
  181. package/web-ui/build/static/gherkin-hj_asmFX.js +1 -0
  182. package/web-ui/build/static/git-DXIrRKzR.js +1 -0
  183. package/web-ui/build/static/glsl-Bww3i9-P.js +1 -0
  184. package/web-ui/build/static/glsl-tW4hvcaQ.js +1 -0
  185. package/web-ui/build/static/gml-BIqshajA.js +1 -0
  186. package/web-ui/build/static/gml-CQqc9F-B.js +1 -0
  187. package/web-ui/build/static/gn-CBgpy8B9.js +1 -0
  188. package/web-ui/build/static/go-CEUAUIgn.js +1 -0
  189. package/web-ui/build/static/go-DPEd33Yn.js +1 -0
  190. package/web-ui/build/static/go-module-BVPbZOg5.js +1 -0
  191. package/web-ui/build/static/golo-CqB3OATq.js +1 -0
  192. package/web-ui/build/static/gradle-Djj_6FTv.js +1 -0
  193. package/web-ui/build/static/graphql-ymSYYmmE.js +1 -0
  194. package/web-ui/build/static/groovy-BLoXi1Ew.js +1 -0
  195. package/web-ui/build/static/groovy-D8ua3DVO.js +1 -0
  196. package/web-ui/build/static/haml-DKlxHs26.js +1 -0
  197. package/web-ui/build/static/haml-S_iUNysn.js +1 -0
  198. package/web-ui/build/static/handlebars-B7tcAMGB.js +1 -0
  199. package/web-ui/build/static/handlebars-CV-zB05N.js +1 -0
  200. package/web-ui/build/static/haskell-CMxCwdZX.js +1 -0
  201. package/web-ui/build/static/haskell-Dis6rGJ5.js +1 -0
  202. package/web-ui/build/static/haxe-C76IK5YN.js +1 -0
  203. package/web-ui/build/static/haxe-hbmD2uei.js +1 -0
  204. package/web-ui/build/static/hcl-BPI_t80W.js +1 -0
  205. package/web-ui/build/static/hlsl-BmeH3MXM.js +1 -0
  206. package/web-ui/build/static/hoon-BYLX7KiR.js +1 -0
  207. package/web-ui/build/static/hpkp-CFV1lvIV.js +1 -0
  208. package/web-ui/build/static/hsp-_VXPtQPw.js +1 -0
  209. package/web-ui/build/static/hsts-DzmFog1b.js +1 -0
  210. package/web-ui/build/static/htmlbars-uX8JubPS.js +1 -0
  211. package/web-ui/build/static/http-BTDAHgkv.js +1 -0
  212. package/web-ui/build/static/http-Ba1gTHCW.js +1 -0
  213. package/web-ui/build/static/hy-G7MK4TLb.js +1 -0
  214. package/web-ui/build/static/ichigojam-BKKN56jZ.js +1 -0
  215. package/web-ui/build/static/icon-nrqdEYwB.js +1 -0
  216. package/web-ui/build/static/icu-message-format-Bjone7XH.js +1 -0
  217. package/web-ui/build/static/idris-CKkY_0op.js +1 -0
  218. package/web-ui/build/static/iecst-EV3ZvBDC.js +1 -0
  219. package/web-ui/build/static/ignore-LJIbInke.js +1 -0
  220. package/web-ui/build/static/index-C1x426Pt.js +734 -0
  221. package/web-ui/build/static/index-CTzeYMwr.js +13 -0
  222. package/web-ui/build/static/index-CUBjz1OL.css +1 -0
  223. package/web-ui/build/static/index-DnVIkRiR.js +1 -0
  224. package/web-ui/build/static/inform7-BiW6HbUl.js +1 -0
  225. package/web-ui/build/static/inform7-DT-x6SRD.js +1 -0
  226. package/web-ui/build/static/ini-BbnHjAtW.js +1 -0
  227. package/web-ui/build/static/ini-DuNY7Iqz.js +1 -0
  228. package/web-ui/build/static/io-BquAtlCB.js +1 -0
  229. package/web-ui/build/static/irpf90-CZELNeJl.js +1 -0
  230. package/web-ui/build/static/isbl-DhOgOzai.js +1 -0
  231. package/web-ui/build/static/j-r8D3BrBj.js +1 -0
  232. package/web-ui/build/static/java-MjQ5EBN5.js +1 -0
  233. package/web-ui/build/static/java-c3Jyc0B6.js +1 -0
  234. package/web-ui/build/static/javadoc-CfNFziRD.js +1 -0
  235. package/web-ui/build/static/javadoclike-BUcJZQAh.js +1 -0
  236. package/web-ui/build/static/javascript-CL_4g6j3.js +1 -0
  237. package/web-ui/build/static/javastacktrace-4P_J-58S.js +1 -0
  238. package/web-ui/build/static/jboss-cli-DUfK88hO.js +1 -0
  239. package/web-ui/build/static/jexl-DsSijmcs.js +1 -0
  240. package/web-ui/build/static/jolie-DjtNIZB4.js +1 -0
  241. package/web-ui/build/static/jq-BXdSm79y.js +1 -0
  242. package/web-ui/build/static/js-extras-B-C7ngCD.js +1 -0
  243. package/web-ui/build/static/js-templates-CmPAiwFC.js +1 -0
  244. package/web-ui/build/static/jsdoc-CkiXOOMV.js +1 -0
  245. package/web-ui/build/static/json-Bmvhezfj.js +1 -0
  246. package/web-ui/build/static/json-HPR8wBiw.js +1 -0
  247. package/web-ui/build/static/json5-Chcg9nnQ.js +1 -0
  248. package/web-ui/build/static/jsonp-C3KWcfzJ.js +1 -0
  249. package/web-ui/build/static/jsstacktrace-D1jRFy-S.js +1 -0
  250. package/web-ui/build/static/jsx-COtCqQ_9.js +1 -0
  251. package/web-ui/build/static/julia-BVvfw2TB.js +1 -0
  252. package/web-ui/build/static/julia-Ddalvdoa.js +1 -0
  253. package/web-ui/build/static/julia-repl-Bc-uwnIZ.js +1 -0
  254. package/web-ui/build/static/keepalived-CJ9ZYuQx.js +1 -0
  255. package/web-ui/build/static/keyman-BHea-dB6.js +1 -0
  256. package/web-ui/build/static/kotlin-DWOyCb_2.js +1 -0
  257. package/web-ui/build/static/kotlin-fvMiFIS3.js +1 -0
  258. package/web-ui/build/static/kumir-DaNls7gN.js +1 -0
  259. package/web-ui/build/static/kusto-DKweJuKl.js +1 -0
  260. package/web-ui/build/static/lasso-BB9dUrv_.js +1 -0
  261. package/web-ui/build/static/latex-C7U5RUQQ.js +1 -0
  262. package/web-ui/build/static/latex-CXM3EEy0.js +1 -0
  263. package/web-ui/build/static/latte-B4pEA635.js +1 -0
  264. package/web-ui/build/static/ldif-D3wYig10.js +1 -0
  265. package/web-ui/build/static/leaf-uFkjT9sR.js +1 -0
  266. package/web-ui/build/static/less-CbUH4jBX.js +1 -0
  267. package/web-ui/build/static/less-DEGyfeZn.js +1 -0
  268. package/web-ui/build/static/lilypond-UuoBjShK.js +1 -0
  269. package/web-ui/build/static/liquid-DB3a9n7S.js +1 -0
  270. package/web-ui/build/static/lisp-BDbj7Kd2.js +1 -0
  271. package/web-ui/build/static/lisp-D3T0YOb1.js +1 -0
  272. package/web-ui/build/static/livecodeserver-CkZMVLmr.js +1 -0
  273. package/web-ui/build/static/livescript-CJbtbTfA.js +1 -0
  274. package/web-ui/build/static/livescript-CdWg1xgf.js +1 -0
  275. package/web-ui/build/static/llvm-8hpjZ6qF.js +1 -0
  276. package/web-ui/build/static/llvm-DPpuma6i.js +1 -0
  277. package/web-ui/build/static/log-DwsLgecp.js +1 -0
  278. package/web-ui/build/static/lolcode-D3tkyiVB.js +1 -0
  279. package/web-ui/build/static/lsl-BBM4ZYza.js +1 -0
  280. package/web-ui/build/static/lua-DT0su8pZ.js +1 -0
  281. package/web-ui/build/static/lua-DqZXmUwn.js +1 -0
  282. package/web-ui/build/static/magma-DGW0-GCr.js +1 -0
  283. package/web-ui/build/static/makefile-C_K7AaVw.js +1 -0
  284. package/web-ui/build/static/makefile-CarddjPJ.js +1 -0
  285. package/web-ui/build/static/markdown-3dq-8I9T.js +1 -0
  286. package/web-ui/build/static/markdown-c4VYoNo2.js +1 -0
  287. package/web-ui/build/static/markup-templating-BBX0gWS5.js +1 -0
  288. package/web-ui/build/static/mathematica-n-aqoCbO.js +1 -0
  289. package/web-ui/build/static/matlab-B_kYC-A2.js +1 -0
  290. package/web-ui/build/static/matlab-CQP2D_0j.js +1 -0
  291. package/web-ui/build/static/maxima-piaAhCcP.js +1 -0
  292. package/web-ui/build/static/maxscript-CkxNZR1a.js +1 -0
  293. package/web-ui/build/static/mel-BXbrV0aU.js +1 -0
  294. package/web-ui/build/static/mel-CBSpVZcl.js +1 -0
  295. package/web-ui/build/static/mercury-CffeC87B.js +1 -0
  296. package/web-ui/build/static/mermaid-DAZcfksM.js +1 -0
  297. package/web-ui/build/static/mipsasm-DvOPoNgz.js +1 -0
  298. package/web-ui/build/static/mizar-C2ki99qc.js +1 -0
  299. package/web-ui/build/static/mizar-C5AXRrsD.js +1 -0
  300. package/web-ui/build/static/mojolicious-DklqV-uP.js +1 -0
  301. package/web-ui/build/static/mongodb-BbuSPlN0.js +1 -0
  302. package/web-ui/build/static/monkey-CJBb2-mV.js +1 -0
  303. package/web-ui/build/static/monkey-DgERCZQd.js +1 -0
  304. package/web-ui/build/static/moonscript-BovBU9jW.js +1 -0
  305. package/web-ui/build/static/moonscript-lPqbcjjy.js +1 -0
  306. package/web-ui/build/static/n1ql-CjVXW0Z0.js +1 -0
  307. package/web-ui/build/static/n1ql-DkfG2dTH.js +1 -0
  308. package/web-ui/build/static/n4js-6L9QW_kw.js +1 -0
  309. package/web-ui/build/static/nand2tetris-hdl-CqohGHfB.js +1 -0
  310. package/web-ui/build/static/naniscript-CIvQ6y1b.js +1 -0
  311. package/web-ui/build/static/nasm-CQbJbZZf.js +1 -0
  312. package/web-ui/build/static/neon-Cz41RJxQ.js +1 -0
  313. package/web-ui/build/static/nevod-WPRJ2Q9j.js +1 -0
  314. package/web-ui/build/static/nginx-BL2wPbD-.js +1 -0
  315. package/web-ui/build/static/nginx-DsqC_gQT.js +1 -0
  316. package/web-ui/build/static/nim-7qnwzYm_.js +1 -0
  317. package/web-ui/build/static/nim-D6iDo5H6.js +1 -0
  318. package/web-ui/build/static/nix-BQSsaH-G.js +1 -0
  319. package/web-ui/build/static/nix-DgwCtjpD.js +1 -0
  320. package/web-ui/build/static/node-repl-Cb4w8DbD.js +1 -0
  321. package/web-ui/build/static/nsis-CiXZWrqR.js +1 -0
  322. package/web-ui/build/static/nsis-CuwGI5px.js +1 -0
  323. package/web-ui/build/static/objectivec-DZXCqQ1J.js +1 -0
  324. package/web-ui/build/static/objectivec-GNGh-wiY.js +1 -0
  325. package/web-ui/build/static/ocaml-BPg_ANkr.js +1 -0
  326. package/web-ui/build/static/ocaml-DRUpaN8p.js +1 -0
  327. package/web-ui/build/static/opencl-CazTs_sf.js +1 -0
  328. package/web-ui/build/static/openqasm-DHuuXGjm.js +1 -0
  329. package/web-ui/build/static/openscad-YbvBFeLc.js +1 -0
  330. package/web-ui/build/static/oxygene-DDzgbCaQ.js +1 -0
  331. package/web-ui/build/static/oz-BRDBLIjx.js +1 -0
  332. package/web-ui/build/static/parigp-BbApdos7.js +1 -0
  333. package/web-ui/build/static/parser-CbVH4ySK.js +1 -0
  334. package/web-ui/build/static/parser3-BIkvuuuE.js +1 -0
  335. package/web-ui/build/static/pascal-oS7U_3sO.js +1 -0
  336. package/web-ui/build/static/pascaligo-57DdFj76.js +1 -0
  337. package/web-ui/build/static/pcaxis-V-Euf0DV.js +1 -0
  338. package/web-ui/build/static/peoplecode-DjyRW5V8.js +1 -0
  339. package/web-ui/build/static/perl-BEQWvjeP.js +1 -0
  340. package/web-ui/build/static/perl-CiDHRorC.js +1 -0
  341. package/web-ui/build/static/pf-S5x_U1LC.js +1 -0
  342. package/web-ui/build/static/pgsql-DwHZC-iy.js +1 -0
  343. package/web-ui/build/static/php-7enmlb-I.js +1 -0
  344. package/web-ui/build/static/php-extras-BhRDMlXE.js +1 -0
  345. package/web-ui/build/static/php-kIwfq-Jj.js +1 -0
  346. package/web-ui/build/static/php-template-M2RrZc1R.js +1 -0
  347. package/web-ui/build/static/phpdoc-HUeiWlkw.js +1 -0
  348. package/web-ui/build/static/plaintext-CPt25ow_.js +1 -0
  349. package/web-ui/build/static/plsql-BvoRAbdz.js +1 -0
  350. package/web-ui/build/static/pony-BVuhxk7D.js +1 -0
  351. package/web-ui/build/static/powerquery-rnRfiL3F.js +1 -0
  352. package/web-ui/build/static/powershell-BQR2-qjF.js +1 -0
  353. package/web-ui/build/static/powershell-S_XnLato.js +1 -0
  354. package/web-ui/build/static/processing-B-8pt1gx.js +1 -0
  355. package/web-ui/build/static/processing-ozS1KPr7.js +1 -0
  356. package/web-ui/build/static/profile-DOjTmxRs.js +1 -0
  357. package/web-ui/build/static/prolog-BaaxuI5L.js +1 -0
  358. package/web-ui/build/static/prolog-D90dFqfr.js +1 -0
  359. package/web-ui/build/static/promql-BuyoLqtl.js +1 -0
  360. package/web-ui/build/static/properties-C0pMastm.js +1 -0
  361. package/web-ui/build/static/properties-k7bXYQao.js +1 -0
  362. package/web-ui/build/static/protobuf-ChaO1q7B.js +1 -0
  363. package/web-ui/build/static/protobuf-DAGxv01T.js +1 -0
  364. package/web-ui/build/static/psl-BpYOLBqn.js +1 -0
  365. package/web-ui/build/static/pug-BUlJA4UD.js +1 -0
  366. package/web-ui/build/static/puppet-8l--PVpO.js +1 -0
  367. package/web-ui/build/static/puppet-BJDN84xr.js +1 -0
  368. package/web-ui/build/static/pure-DhqjQg1a.js +1 -0
  369. package/web-ui/build/static/purebasic-BHnSz9Yh.js +1 -0
  370. package/web-ui/build/static/purebasic-CeiLO2aV.js +1 -0
  371. package/web-ui/build/static/purescript-BaXXPnKS.js +1 -0
  372. package/web-ui/build/static/python-BXdJ4yqN.js +1 -0
  373. package/web-ui/build/static/python-Cef5Vfx2.js +1 -0
  374. package/web-ui/build/static/python-repl-CRpJP363.js +1 -0
  375. package/web-ui/build/static/q-C6Ov0g11.js +1 -0
  376. package/web-ui/build/static/q-D3tQMiHa.js +1 -0
  377. package/web-ui/build/static/qml-BYofTHXZ.js +1 -0
  378. package/web-ui/build/static/qml-DTxi8T37.js +1 -0
  379. package/web-ui/build/static/qore-Ny7MVtbP.js +1 -0
  380. package/web-ui/build/static/qsharp-Cy_rqHs2.js +1 -0
  381. package/web-ui/build/static/r-BtNaz7Jx.js +1 -0
  382. package/web-ui/build/static/r-DkF7wq0g.js +1 -0
  383. package/web-ui/build/static/racket-C5r8oFZa.js +1 -0
  384. package/web-ui/build/static/reason-BURRGL8T.js +1 -0
  385. package/web-ui/build/static/reasonml-ZPKVqo38.js +1 -0
  386. package/web-ui/build/static/regex-DgaaAttu.js +1 -0
  387. package/web-ui/build/static/rego-CtwYq-qp.js +1 -0
  388. package/web-ui/build/static/renpy-OueysuHf.js +1 -0
  389. package/web-ui/build/static/rest-Co13hzuk.js +1 -0
  390. package/web-ui/build/static/rib-CvGWooaO.js +1 -0
  391. package/web-ui/build/static/rip-5glwZfvx.js +1 -0
  392. package/web-ui/build/static/roboconf-B9R_ZXBj.js +1 -0
  393. package/web-ui/build/static/roboconf-Gf0nTNKt.js +1 -0
  394. package/web-ui/build/static/robotframework-C2axWAv1.js +1 -0
  395. package/web-ui/build/static/routeros-CE_Iedbm.js +1 -0
  396. package/web-ui/build/static/rsl-2QjczbcI.js +1 -0
  397. package/web-ui/build/static/ruby-5q7nApRB.js +1 -0
  398. package/web-ui/build/static/ruby-BUTeEeQo.js +1 -0
  399. package/web-ui/build/static/ruleslanguage-vxFl2T6e.js +1 -0
  400. package/web-ui/build/static/rust-BMuquF4q.js +1 -0
  401. package/web-ui/build/static/rust-CcZQo8qE.js +1 -0
  402. package/web-ui/build/static/sas-B3kZio_a.js +1 -0
  403. package/web-ui/build/static/sas-Bbv6Pcs_.js +1 -0
  404. package/web-ui/build/static/sass-C0q0q-U-.js +1 -0
  405. package/web-ui/build/static/scala-B5vW0oUX.js +1 -0
  406. package/web-ui/build/static/scala-CyVnVDED.js +1 -0
  407. package/web-ui/build/static/scheme-C9JOo4R_.js +1 -0
  408. package/web-ui/build/static/scheme-W2233tzx.js +1 -0
  409. package/web-ui/build/static/scilab-D2Bvw6Ov.js +1 -0
  410. package/web-ui/build/static/scss-CTlab4AI.js +1 -0
  411. package/web-ui/build/static/scss-DZ5g2Z9m.js +1 -0
  412. package/web-ui/build/static/shell-bYpiB--U.js +1 -0
  413. package/web-ui/build/static/shell-session-C4jzoNup.js +1 -0
  414. package/web-ui/build/static/smali-9ucoTzDl.js +1 -0
  415. package/web-ui/build/static/smali-BnluPxDD.js +1 -0
  416. package/web-ui/build/static/smalltalk-CAMGWItN.js +1 -0
  417. package/web-ui/build/static/smalltalk-DNxg0Og_.js +1 -0
  418. package/web-ui/build/static/smarty-YxNaCRZt.js +1 -0
  419. package/web-ui/build/static/sml-CZbvurr2.js +1 -0
  420. package/web-ui/build/static/sml-DGs_TRXx.js +1 -0
  421. package/web-ui/build/static/solidity-CEsviKxI.js +1 -0
  422. package/web-ui/build/static/solution-file-D0Yvaoet.js +1 -0
  423. package/web-ui/build/static/soy-BmVAPY7I.js +1 -0
  424. package/web-ui/build/static/sparql-D8d4i2J8.js +1 -0
  425. package/web-ui/build/static/splunk-spl-CcgWj5Im.js +1 -0
  426. package/web-ui/build/static/sqf-Cd4tBlXZ.js +1 -0
  427. package/web-ui/build/static/sqf-DC8e-wlP.js +1 -0
  428. package/web-ui/build/static/sql-D5KtfAwl.js +1 -0
  429. package/web-ui/build/static/sql-DX4iGc5J.js +1 -0
  430. package/web-ui/build/static/sql_more-9ztUFh5U.js +1 -0
  431. package/web-ui/build/static/squirrel-CiVV01fQ.js +1 -0
  432. package/web-ui/build/static/stan-DCrPYtdq.js +1 -0
  433. package/web-ui/build/static/stan-LL9ScTUT.js +1 -0
  434. package/web-ui/build/static/stata-n-r5-RvF.js +1 -0
  435. package/web-ui/build/static/step21-B2hxGG1E.js +1 -0
  436. package/web-ui/build/static/stylus-D-1wq2uN.js +1 -0
  437. package/web-ui/build/static/stylus-Dr-w1AjW.js +1 -0
  438. package/web-ui/build/static/subunit-DRCyiRHI.js +1 -0
  439. package/web-ui/build/static/swift-B2ZIuBjB.js +1 -0
  440. package/web-ui/build/static/swift-CnRpp8ao.js +1 -0
  441. package/web-ui/build/static/systemd-LPN-yj3b.js +1 -0
  442. package/web-ui/build/static/t4-cs-CXJSMlet.js +1 -0
  443. package/web-ui/build/static/t4-templating-Ciw3keAZ.js +1 -0
  444. package/web-ui/build/static/t4-vb-CXe99AWF.js +1 -0
  445. package/web-ui/build/static/taggerscript-Bm830ZwV.js +1 -0
  446. package/web-ui/build/static/tap-B0WwYGVt.js +1 -0
  447. package/web-ui/build/static/tap-Dw_cgj6K.js +1 -0
  448. package/web-ui/build/static/tcl-Di4JhH4s.js +1 -0
  449. package/web-ui/build/static/tcl-cIeBNf2V.js +1 -0
  450. package/web-ui/build/static/textile-DgMdCAz5.js +1 -0
  451. package/web-ui/build/static/thrift-zY2WxYMk.js +1 -0
  452. package/web-ui/build/static/toml-BtXdKizf.js +1 -0
  453. package/web-ui/build/static/tp-DxY0K8UF.js +1 -0
  454. package/web-ui/build/static/tremor-890wqxvH.js +1 -0
  455. package/web-ui/build/static/tsx-92ElsKxL.js +1 -0
  456. package/web-ui/build/static/tt2-DqcvjDKh.js +1 -0
  457. package/web-ui/build/static/turtle-BZikMsiD.js +1 -0
  458. package/web-ui/build/static/twig-BlxkEMdw.js +1 -0
  459. package/web-ui/build/static/twig-CfsoMGnv.js +1 -0
  460. package/web-ui/build/static/typescript-3xS8yDgH.js +1 -0
  461. package/web-ui/build/static/typescript-Dx0zHssr.js +1 -0
  462. package/web-ui/build/static/typoscript-BdFwMGCV.js +1 -0
  463. package/web-ui/build/static/unrealscript-DJzoqp3G.js +1 -0
  464. package/web-ui/build/static/uorazor-CQO8Ynpw.js +1 -0
  465. package/web-ui/build/static/uri-BUBBJdel.js +1 -0
  466. package/web-ui/build/static/v-XU798JEc.js +1 -0
  467. package/web-ui/build/static/vala-DsH-Nomr.js +1 -0
  468. package/web-ui/build/static/vala-gCVw4o0d.js +1 -0
  469. package/web-ui/build/static/vbnet-BHw8cZ4s.js +1 -0
  470. package/web-ui/build/static/vbnet-DPa2ddOk.js +1 -0
  471. package/web-ui/build/static/vbscript-html-CNADYJ1-.js +1 -0
  472. package/web-ui/build/static/vbscript-ztRmIppj.js +1 -0
  473. package/web-ui/build/static/velocity-DVfeN53w.js +1 -0
  474. package/web-ui/build/static/verilog-C9VDLRl9.js +1 -0
  475. package/web-ui/build/static/verilog-Dsmt_WJW.js +1 -0
  476. package/web-ui/build/static/vhdl-DbylNGny.js +1 -0
  477. package/web-ui/build/static/vhdl-wNJe3yKK.js +1 -0
  478. package/web-ui/build/static/vim-6PLlVaq_.js +1 -0
  479. package/web-ui/build/static/vim-BJpkTTe-.js +1 -0
  480. package/web-ui/build/static/visual-basic-GY3wXjJ3.js +1 -0
  481. package/web-ui/build/static/warpscript-DUb9z3yI.js +1 -0
  482. package/web-ui/build/static/wasm-Dey0RlHH.js +1 -0
  483. package/web-ui/build/static/web-idl-qAF1RqaI.js +1 -0
  484. package/web-ui/build/static/wiki-Dh3Vjtce.js +1 -0
  485. package/web-ui/build/static/wolfram-BrQcRMlt.js +1 -0
  486. package/web-ui/build/static/wren-Cu3Mzln6.js +1 -0
  487. package/web-ui/build/static/x86asm-DD5mhaEi.js +1 -0
  488. package/web-ui/build/static/xeora-DKRZ6hlr.js +1 -0
  489. package/web-ui/build/static/xl-BL8R8sAx.js +1 -0
  490. package/web-ui/build/static/xml-doc-BSpNJbEM.js +1 -0
  491. package/web-ui/build/static/xml-i5BJyEQ7.js +1 -0
  492. package/web-ui/build/static/xojo-r2ieNAyP.js +1 -0
  493. package/web-ui/build/static/xquery-BtAK8Dvl.js +1 -0
  494. package/web-ui/build/static/xquery-CM4Q_TX7.js +1 -0
  495. package/web-ui/build/static/yaml-Mm8ArZA3.js +1 -0
  496. package/web-ui/build/static/yaml-r-QeuY00.js +1 -0
  497. package/web-ui/build/static/yang-qcKR-Y23.js +1 -0
  498. package/web-ui/build/static/zephir-8ApHtH7c.js +1 -0
  499. package/web-ui/build/static/zig-BanqOd9_.js +1 -0
  500. package/web-ui/build/static/1c-D-8ReLUQ.js +0 -1
  501. package/web-ui/build/static/abap-NvrQD84d.js +0 -1
  502. package/web-ui/build/static/abnf-BxKbzF6d.js +0 -1
  503. package/web-ui/build/static/abnf-gQpmRWjd.js +0 -1
  504. package/web-ui/build/static/accesslog-BQLUo5Gi.js +0 -1
  505. package/web-ui/build/static/actionscript-3TeMZFpQ.js +0 -1
  506. package/web-ui/build/static/actionscript-w6DEnLr3.js +0 -1
  507. package/web-ui/build/static/ada-87XHdEXs.js +0 -1
  508. package/web-ui/build/static/ada-QztkYmC7.js +0 -1
  509. package/web-ui/build/static/agda-CUYeMLgB.js +0 -1
  510. package/web-ui/build/static/al-DrDn2-sA.js +0 -1
  511. package/web-ui/build/static/angelscript-D3Qw8kQa.js +0 -1
  512. package/web-ui/build/static/antlr4-CWEEpQ5q.js +0 -1
  513. package/web-ui/build/static/apache-Bme3xfdp.js +0 -1
  514. package/web-ui/build/static/apacheconf-BKOfs-cp.js +0 -1
  515. package/web-ui/build/static/apex-DswYOikL.js +0 -1
  516. package/web-ui/build/static/apl-CizhojF3.js +0 -1
  517. package/web-ui/build/static/applescript-D9M6q0r7.js +0 -1
  518. package/web-ui/build/static/applescript-DpP5T055.js +0 -1
  519. package/web-ui/build/static/aql-BqAlaha9.js +0 -1
  520. package/web-ui/build/static/arcade-DobNWm8j.js +0 -1
  521. package/web-ui/build/static/arduino-BeuGL09r.js +0 -1
  522. package/web-ui/build/static/arduino-BiF5cC7x.js +0 -1
  523. package/web-ui/build/static/arff-2H9PyLDr.js +0 -1
  524. package/web-ui/build/static/armasm-B6wc18B0.js +0 -1
  525. package/web-ui/build/static/asciidoc-DUF4xPDI.js +0 -1
  526. package/web-ui/build/static/asciidoc-TBH4m8SR.js +0 -1
  527. package/web-ui/build/static/asm6502-CzTI2B-y.js +0 -1
  528. package/web-ui/build/static/asmatmel-BYN0Xd3T.js +0 -1
  529. package/web-ui/build/static/aspectj-DXCMDgp7.js +0 -1
  530. package/web-ui/build/static/aspnet-lOvDpvP_.js +0 -1
  531. package/web-ui/build/static/autohotkey-CICk12uK.js +0 -1
  532. package/web-ui/build/static/autohotkey-DrG81PVL.js +0 -1
  533. package/web-ui/build/static/autoit-DFemtuhG.js +0 -1
  534. package/web-ui/build/static/autoit-D_K-jEWY.js +0 -1
  535. package/web-ui/build/static/avisynth-DOnmgjBO.js +0 -1
  536. package/web-ui/build/static/avrasm-rMDuGPFy.js +0 -1
  537. package/web-ui/build/static/avro-idl-CH5Xk5PQ.js +0 -1
  538. package/web-ui/build/static/awk-BvyFWX3C.js +0 -1
  539. package/web-ui/build/static/axapta-BWmF5MqT.js +0 -1
  540. package/web-ui/build/static/bash-Coyd2GnL.js +0 -1
  541. package/web-ui/build/static/bash-DSdj70Nv.js +0 -1
  542. package/web-ui/build/static/basic-CflyLZ31.js +0 -1
  543. package/web-ui/build/static/basic-Cs6QyVqS.js +0 -1
  544. package/web-ui/build/static/batch-DCDtzw83.js +0 -1
  545. package/web-ui/build/static/bbcode-MWdW7azN.js +0 -1
  546. package/web-ui/build/static/bicep-jQ4zhAw9.js +0 -1
  547. package/web-ui/build/static/birb-9f7Itiod.js +0 -1
  548. package/web-ui/build/static/bison-CIIUW5Cl.js +0 -1
  549. package/web-ui/build/static/bnf-B2w55bnT.js +0 -1
  550. package/web-ui/build/static/bnf-CUlbZGe7.js +0 -1
  551. package/web-ui/build/static/brainfuck-CaJZ1LRc.js +0 -1
  552. package/web-ui/build/static/brainfuck-eIkhMKej.js +0 -1
  553. package/web-ui/build/static/brightscript-BSLnJVmJ.js +0 -1
  554. package/web-ui/build/static/bro-YVCWDbPj.js +0 -1
  555. package/web-ui/build/static/bsl-Nm0_B_oa.js +0 -1
  556. package/web-ui/build/static/c-Dv7lr1UK.js +0 -1
  557. package/web-ui/build/static/c-like-C9IU26FO.js +0 -1
  558. package/web-ui/build/static/c-pfS3v02M.js +0 -1
  559. package/web-ui/build/static/cal-D4re7xDS.js +0 -1
  560. package/web-ui/build/static/capnproto-Dy75AQ6u.js +0 -1
  561. package/web-ui/build/static/ceylon-BNtjB2q0.js +0 -1
  562. package/web-ui/build/static/cfscript-8X2NpMn_.js +0 -1
  563. package/web-ui/build/static/chaiscript-CoXaTTY-.js +0 -1
  564. package/web-ui/build/static/cil-BluyliW6.js +0 -1
  565. package/web-ui/build/static/clean-Bj15gq3Q.js +0 -1
  566. package/web-ui/build/static/clojure-BH5xTDBp.js +0 -1
  567. package/web-ui/build/static/clojure-BqHsfJwr.js +0 -1
  568. package/web-ui/build/static/clojure-repl-B32b9bLV.js +0 -1
  569. package/web-ui/build/static/cmake-CyTE-1A0.js +0 -1
  570. package/web-ui/build/static/cmake-hiJ0lXa-.js +0 -1
  571. package/web-ui/build/static/cobol-BBnQUH8E.js +0 -1
  572. package/web-ui/build/static/coffeescript-BjrsNhLL.js +0 -1
  573. package/web-ui/build/static/coffeescript-C7WO1c8O.js +0 -1
  574. package/web-ui/build/static/concurnas-9EpupFAI.js +0 -1
  575. package/web-ui/build/static/coq-C-tt6nZE.js +0 -1
  576. package/web-ui/build/static/coq-CLCiqFzC.js +0 -1
  577. package/web-ui/build/static/cos-BQC1_Gov.js +0 -1
  578. package/web-ui/build/static/cpp-CH4XSTo7.js +0 -1
  579. package/web-ui/build/static/cpp-K8F2XScQ.js +0 -1
  580. package/web-ui/build/static/crmsh-DztNtPne.js +0 -1
  581. package/web-ui/build/static/crystal-kBqCeXtW.js +0 -1
  582. package/web-ui/build/static/crystal-sVG_HS9o.js +0 -1
  583. package/web-ui/build/static/csharp-4pb9Wc--.js +0 -1
  584. package/web-ui/build/static/csharp-D5QaxB-K.js +0 -1
  585. package/web-ui/build/static/cshtml-Cpytn-LL.js +0 -1
  586. package/web-ui/build/static/csp-BH6fPZVZ.js +0 -1
  587. package/web-ui/build/static/csp-WrjFExbk.js +0 -1
  588. package/web-ui/build/static/css-DJxZ20Kx.js +0 -1
  589. package/web-ui/build/static/css-extras-DwoO5sHq.js +0 -1
  590. package/web-ui/build/static/csv-DJb1XTwb.js +0 -1
  591. package/web-ui/build/static/cypher-CFN05H9J.js +0 -1
  592. package/web-ui/build/static/d-COFI-yfM.js +0 -1
  593. package/web-ui/build/static/d-DYHnLAnt.js +0 -1
  594. package/web-ui/build/static/dart-Bw35nKGj.js +0 -1
  595. package/web-ui/build/static/dart-C5gnqL08.js +0 -1
  596. package/web-ui/build/static/dataweave-DG_2euLu.js +0 -1
  597. package/web-ui/build/static/dax-BSpzdHUe.js +0 -1
  598. package/web-ui/build/static/delphi-Cl5NRXvZ.js +0 -1
  599. package/web-ui/build/static/dhall-CNefJtoo.js +0 -1
  600. package/web-ui/build/static/diff-DhqUs0Iy.js +0 -1
  601. package/web-ui/build/static/diff-KGSf4pWL.js +0 -1
  602. package/web-ui/build/static/django-5TgWQjd4.js +0 -1
  603. package/web-ui/build/static/django-DavZW8FP.js +0 -1
  604. package/web-ui/build/static/dns-CuF6RAET.js +0 -1
  605. package/web-ui/build/static/dns-zone-file-BcBMQ0BR.js +0 -1
  606. package/web-ui/build/static/docker-Dht8jS2j.js +0 -1
  607. package/web-ui/build/static/dockerfile-CjjL85ki.js +0 -1
  608. package/web-ui/build/static/dos-CVoaOHAQ.js +0 -1
  609. package/web-ui/build/static/dot-QcLwKXVK.js +0 -1
  610. package/web-ui/build/static/dsconfig-_1R6hLzq.js +0 -1
  611. package/web-ui/build/static/dts-B_Dzxmb6.js +0 -1
  612. package/web-ui/build/static/dust-xRpJXkxU.js +0 -1
  613. package/web-ui/build/static/ebnf-DPK9Hid-.js +0 -1
  614. package/web-ui/build/static/ebnf-OVlya1yQ.js +0 -1
  615. package/web-ui/build/static/editorconfig-CbCWWNal.js +0 -1
  616. package/web-ui/build/static/eiffel-CShmAG_u.js +0 -1
  617. package/web-ui/build/static/ejs-Dybq4vcI.js +0 -1
  618. package/web-ui/build/static/elixir-CzXoWmCJ.js +0 -1
  619. package/web-ui/build/static/elixir-DKVoqGbI.js +0 -1
  620. package/web-ui/build/static/elm-DfJge1Cy.js +0 -1
  621. package/web-ui/build/static/elm-wTttagz6.js +0 -1
  622. package/web-ui/build/static/erb-BqJOty-L.js +0 -1
  623. package/web-ui/build/static/erb-DEcQyddF.js +0 -1
  624. package/web-ui/build/static/erlang-DR0S8Dbq.js +0 -1
  625. package/web-ui/build/static/erlang-foLyt35P.js +0 -1
  626. package/web-ui/build/static/erlang-repl-KGaauP1D.js +0 -1
  627. package/web-ui/build/static/etlua-i5bjc318.js +0 -1
  628. package/web-ui/build/static/excel-Bxn-_4FK.js +0 -1
  629. package/web-ui/build/static/excel-formula-C3ittGUe.js +0 -1
  630. package/web-ui/build/static/factor-Cq9BFfPi.js +0 -1
  631. package/web-ui/build/static/false-Bq1Og8uV.js +0 -1
  632. package/web-ui/build/static/firestore-security-rules-BuWMvGkh.js +0 -1
  633. package/web-ui/build/static/fix-CJH3csBZ.js +0 -1
  634. package/web-ui/build/static/flix-DZVFkMZK.js +0 -1
  635. package/web-ui/build/static/flow-DGvt9eNT.js +0 -1
  636. package/web-ui/build/static/fortran-CRMIJaq3.js +0 -1
  637. package/web-ui/build/static/fortran-DYMWvRQk.js +0 -1
  638. package/web-ui/build/static/fsharp-DsngWUfx.js +0 -1
  639. package/web-ui/build/static/fsharp-iEMP2hGc.js +0 -1
  640. package/web-ui/build/static/ftl-6XZ6kVeO.js +0 -1
  641. package/web-ui/build/static/gams-BPxwyKlw.js +0 -1
  642. package/web-ui/build/static/gap-LiwKb7bd.js +0 -1
  643. package/web-ui/build/static/gauss-BMq9hJW2.js +0 -1
  644. package/web-ui/build/static/gcode-BhUKSjaC.js +0 -1
  645. package/web-ui/build/static/gcode-b-DQdN2W.js +0 -1
  646. package/web-ui/build/static/gdscript-DIZ0_yTx.js +0 -1
  647. package/web-ui/build/static/gedcom-B-Don8Su.js +0 -1
  648. package/web-ui/build/static/gherkin-BioIAP1n.js +0 -1
  649. package/web-ui/build/static/gherkin-Cly_guds.js +0 -1
  650. package/web-ui/build/static/git-CopW8z0r.js +0 -1
  651. package/web-ui/build/static/glsl-6ssjFzwf.js +0 -1
  652. package/web-ui/build/static/glsl-E_uyFQdl.js +0 -1
  653. package/web-ui/build/static/gml-CaO1S6wu.js +0 -1
  654. package/web-ui/build/static/gml-D9DYjC5y.js +0 -1
  655. package/web-ui/build/static/gn-B_qqVpR0.js +0 -1
  656. package/web-ui/build/static/go-DFaKy1Ay.js +0 -1
  657. package/web-ui/build/static/go-JLTG1uU-.js +0 -1
  658. package/web-ui/build/static/go-module-BGp5Ey97.js +0 -1
  659. package/web-ui/build/static/golo-BlbGqaMN.js +0 -1
  660. package/web-ui/build/static/gradle-wqmsj6uh.js +0 -1
  661. package/web-ui/build/static/graphql-7RIdAO4i.js +0 -1
  662. package/web-ui/build/static/groovy-3icIp5xU.js +0 -1
  663. package/web-ui/build/static/groovy-HPI8s9_9.js +0 -1
  664. package/web-ui/build/static/haml-CTkGGR02.js +0 -1
  665. package/web-ui/build/static/haml-Thxu3S1L.js +0 -1
  666. package/web-ui/build/static/handlebars-1DoYlhi8.js +0 -1
  667. package/web-ui/build/static/handlebars-i1BBTCzR.js +0 -1
  668. package/web-ui/build/static/haskell-A1VYHFSA.js +0 -1
  669. package/web-ui/build/static/haskell-C_DMih9U.js +0 -1
  670. package/web-ui/build/static/haxe-Cz5x4sAD.js +0 -1
  671. package/web-ui/build/static/haxe-DYRFmKkv.js +0 -1
  672. package/web-ui/build/static/hcl-BRcB2lym.js +0 -1
  673. package/web-ui/build/static/hlsl-DkyhfHB3.js +0 -1
  674. package/web-ui/build/static/hoon-Droh_30T.js +0 -1
  675. package/web-ui/build/static/hpkp-DTAbnc4g.js +0 -1
  676. package/web-ui/build/static/hsp-C0QnJZWI.js +0 -1
  677. package/web-ui/build/static/hsts-C21QOmcz.js +0 -1
  678. package/web-ui/build/static/htmlbars-Bjlkvm5m.js +0 -1
  679. package/web-ui/build/static/http-D0nJQkzK.js +0 -1
  680. package/web-ui/build/static/http-DRz4r8bD.js +0 -1
  681. package/web-ui/build/static/hy-BqiXsF4N.js +0 -1
  682. package/web-ui/build/static/ichigojam-BQi7PpBN.js +0 -1
  683. package/web-ui/build/static/icon-BufrPPND.js +0 -1
  684. package/web-ui/build/static/icu-message-format-BGFhE2gJ.js +0 -1
  685. package/web-ui/build/static/idris-CDCGxwUo.js +0 -1
  686. package/web-ui/build/static/iecst-CdwPGvCO.js +0 -1
  687. package/web-ui/build/static/ignore-CHdDzb39.js +0 -1
  688. package/web-ui/build/static/index-C9Fa_kgD.css +0 -1
  689. package/web-ui/build/static/index-D1KAbjnI.js +0 -1
  690. package/web-ui/build/static/index-DBYkW2lx.js +0 -13
  691. package/web-ui/build/static/index-DsoPopge.js +0 -727
  692. package/web-ui/build/static/inform7-Bpq3UO5w.js +0 -1
  693. package/web-ui/build/static/inform7-DmXu-aMH.js +0 -1
  694. package/web-ui/build/static/ini-DWUEQKxG.js +0 -1
  695. package/web-ui/build/static/ini-t3XdjCfA.js +0 -1
  696. package/web-ui/build/static/io-DfElp6yx.js +0 -1
  697. package/web-ui/build/static/irpf90-fx9_FB-t.js +0 -1
  698. package/web-ui/build/static/isbl-CcrRysr8.js +0 -1
  699. package/web-ui/build/static/j--Jx3nGHC.js +0 -1
  700. package/web-ui/build/static/java-OOMeJRRQ.js +0 -1
  701. package/web-ui/build/static/java-OTyqE2m1.js +0 -1
  702. package/web-ui/build/static/javadoc-CD-HiYEY.js +0 -1
  703. package/web-ui/build/static/javadoclike-CLv1_76Z.js +0 -1
  704. package/web-ui/build/static/javascript-C_j1lHAa.js +0 -1
  705. package/web-ui/build/static/javastacktrace-CIsSL13b.js +0 -1
  706. package/web-ui/build/static/jboss-cli-C9HktJFq.js +0 -1
  707. package/web-ui/build/static/jexl-Doro4Jcm.js +0 -1
  708. package/web-ui/build/static/jolie-C5wL2YdC.js +0 -1
  709. package/web-ui/build/static/jq-Bmi3HMEP.js +0 -1
  710. package/web-ui/build/static/js-extras-CQyLxL3s.js +0 -1
  711. package/web-ui/build/static/js-templates-DAigrjqA.js +0 -1
  712. package/web-ui/build/static/jsdoc-BJ_oa4xn.js +0 -1
  713. package/web-ui/build/static/json--C9O_45y.js +0 -1
  714. package/web-ui/build/static/json-CSGkCpU2.js +0 -1
  715. package/web-ui/build/static/json5-CcxKJla0.js +0 -1
  716. package/web-ui/build/static/jsonp-DjUgPOz0.js +0 -1
  717. package/web-ui/build/static/jsstacktrace-BpOw_ymZ.js +0 -1
  718. package/web-ui/build/static/jsx-otTTuJ8X.js +0 -1
  719. package/web-ui/build/static/julia-B1n4YHpM.js +0 -1
  720. package/web-ui/build/static/julia-bi12E6me.js +0 -1
  721. package/web-ui/build/static/julia-repl-DwzL74R7.js +0 -1
  722. package/web-ui/build/static/keepalived-cKzNWQWz.js +0 -1
  723. package/web-ui/build/static/keyman-BVOouxaa.js +0 -1
  724. package/web-ui/build/static/kotlin-BPuaNDRU.js +0 -1
  725. package/web-ui/build/static/kotlin-DvWwch7e.js +0 -1
  726. package/web-ui/build/static/kumir-DxiPnZla.js +0 -1
  727. package/web-ui/build/static/kusto-tc7F4iSM.js +0 -1
  728. package/web-ui/build/static/lasso-CuIxaW6G.js +0 -1
  729. package/web-ui/build/static/latex-DaVNZvfJ.js +0 -1
  730. package/web-ui/build/static/latex-Y-rAMd-m.js +0 -1
  731. package/web-ui/build/static/latte-BWApgl6V.js +0 -1
  732. package/web-ui/build/static/ldif-BjMOGnja.js +0 -1
  733. package/web-ui/build/static/leaf-BjXTc-gF.js +0 -1
  734. package/web-ui/build/static/less-BAoMgFHw.js +0 -1
  735. package/web-ui/build/static/less-BIXQ4mtM.js +0 -1
  736. package/web-ui/build/static/lilypond-B6avfRfg.js +0 -1
  737. package/web-ui/build/static/liquid-Bgux4iHZ.js +0 -1
  738. package/web-ui/build/static/lisp-DZwObPt9.js +0 -1
  739. package/web-ui/build/static/lisp-KuHBOL65.js +0 -1
  740. package/web-ui/build/static/livecodeserver-Cuv2a-Np.js +0 -1
  741. package/web-ui/build/static/livescript-B5joK5y1.js +0 -1
  742. package/web-ui/build/static/livescript-Cfl-5tRI.js +0 -1
  743. package/web-ui/build/static/llvm-Bq_MvIMt.js +0 -1
  744. package/web-ui/build/static/llvm-DDplxqNH.js +0 -1
  745. package/web-ui/build/static/log-C0UrUYNZ.js +0 -1
  746. package/web-ui/build/static/lolcode-Bpn0nZXI.js +0 -1
  747. package/web-ui/build/static/lsl-Baa3yssY.js +0 -1
  748. package/web-ui/build/static/lua-CmS7S4r8.js +0 -1
  749. package/web-ui/build/static/lua-CuTsqVUh.js +0 -1
  750. package/web-ui/build/static/magma-D80wNgLE.js +0 -1
  751. package/web-ui/build/static/makefile-BUfHdkgl.js +0 -1
  752. package/web-ui/build/static/makefile-DcdqPwtQ.js +0 -1
  753. package/web-ui/build/static/markdown-Dnk5E2xs.js +0 -1
  754. package/web-ui/build/static/markdown-dVGF22cZ.js +0 -1
  755. package/web-ui/build/static/markup-templating-DFEtKf2a.js +0 -1
  756. package/web-ui/build/static/mathematica-D6RpzMC4.js +0 -1
  757. package/web-ui/build/static/matlab-BNL791Vd.js +0 -1
  758. package/web-ui/build/static/matlab-CcJdErYu.js +0 -1
  759. package/web-ui/build/static/maxima-DtObzS0g.js +0 -1
  760. package/web-ui/build/static/maxscript-Boeo84Pc.js +0 -1
  761. package/web-ui/build/static/mel-CQDFYa9L.js +0 -1
  762. package/web-ui/build/static/mel-Dqbr8Ct3.js +0 -1
  763. package/web-ui/build/static/mercury-CtQIBvXV.js +0 -1
  764. package/web-ui/build/static/mermaid-Be11mdXJ.js +0 -1
  765. package/web-ui/build/static/mipsasm-Bzu7KAos.js +0 -1
  766. package/web-ui/build/static/mizar-CTwK6_XC.js +0 -1
  767. package/web-ui/build/static/mizar-DGSninkt.js +0 -1
  768. package/web-ui/build/static/mojolicious-B5J4ts83.js +0 -1
  769. package/web-ui/build/static/mongodb-Canys4Q-.js +0 -1
  770. package/web-ui/build/static/monkey-Bc8QeQKW.js +0 -1
  771. package/web-ui/build/static/monkey-BuakrB5T.js +0 -1
  772. package/web-ui/build/static/moonscript-CCCY-549.js +0 -1
  773. package/web-ui/build/static/moonscript-DgTN69ea.js +0 -1
  774. package/web-ui/build/static/n1ql-BeClvJbI.js +0 -1
  775. package/web-ui/build/static/n1ql-Bmrbwg5D.js +0 -1
  776. package/web-ui/build/static/n4js-BI7ajnA2.js +0 -1
  777. package/web-ui/build/static/nand2tetris-hdl-CTtO9tFK.js +0 -1
  778. package/web-ui/build/static/naniscript-ByLXiYB-.js +0 -1
  779. package/web-ui/build/static/nasm-DyRBXPTp.js +0 -1
  780. package/web-ui/build/static/neon-CuGxTU_0.js +0 -1
  781. package/web-ui/build/static/nevod-CWnxD5-I.js +0 -1
  782. package/web-ui/build/static/nginx-9_Wnc0a8.js +0 -1
  783. package/web-ui/build/static/nginx-YzYFF0YL.js +0 -1
  784. package/web-ui/build/static/nim-Dgg2r5_y.js +0 -1
  785. package/web-ui/build/static/nim-Dket4DOJ.js +0 -1
  786. package/web-ui/build/static/nix-CM2XsNVm.js +0 -1
  787. package/web-ui/build/static/nix-P756jRJz.js +0 -1
  788. package/web-ui/build/static/node-repl-BRadhyOu.js +0 -1
  789. package/web-ui/build/static/nsis-4AzWWTt3.js +0 -1
  790. package/web-ui/build/static/nsis-DawN0fp-.js +0 -1
  791. package/web-ui/build/static/objectivec-BHy8WXYe.js +0 -1
  792. package/web-ui/build/static/objectivec-CVvJfvIh.js +0 -1
  793. package/web-ui/build/static/ocaml-BXmkRrGk.js +0 -1
  794. package/web-ui/build/static/ocaml-D9blGtF-.js +0 -1
  795. package/web-ui/build/static/opencl-CrP8B7-Y.js +0 -1
  796. package/web-ui/build/static/openqasm-BF_FGc9C.js +0 -1
  797. package/web-ui/build/static/openscad-BX0LeVCC.js +0 -1
  798. package/web-ui/build/static/oxygene-Dv7-kaO-.js +0 -1
  799. package/web-ui/build/static/oz-DMw40m1E.js +0 -1
  800. package/web-ui/build/static/parigp-C6qS_vHR.js +0 -1
  801. package/web-ui/build/static/parser-CIccHpfs.js +0 -1
  802. package/web-ui/build/static/parser3-DY65kzTx.js +0 -1
  803. package/web-ui/build/static/pascal-Bd8OdL32.js +0 -1
  804. package/web-ui/build/static/pascaligo-Czv0M1Ke.js +0 -1
  805. package/web-ui/build/static/pcaxis-Ct9Xzb0v.js +0 -1
  806. package/web-ui/build/static/peoplecode-Qs_52P9e.js +0 -1
  807. package/web-ui/build/static/perl-C7ZXixEj.js +0 -1
  808. package/web-ui/build/static/perl-jarWhwwS.js +0 -1
  809. package/web-ui/build/static/pf-CUIEZmhu.js +0 -1
  810. package/web-ui/build/static/pgsql-Cd9Vguu1.js +0 -1
  811. package/web-ui/build/static/php-BkEHU_F0.js +0 -1
  812. package/web-ui/build/static/php-DgxitXwB.js +0 -1
  813. package/web-ui/build/static/php-extras-DZ4cqJZr.js +0 -1
  814. package/web-ui/build/static/php-template-CmDsJimC.js +0 -1
  815. package/web-ui/build/static/phpdoc-BuzuEwXH.js +0 -1
  816. package/web-ui/build/static/plaintext-B9rbdHym.js +0 -1
  817. package/web-ui/build/static/plsql-BsUyjIMQ.js +0 -1
  818. package/web-ui/build/static/pony-DByqIe1z.js +0 -1
  819. package/web-ui/build/static/powerquery-1VSf_dLA.js +0 -1
  820. package/web-ui/build/static/powershell-CBYqkmKw.js +0 -1
  821. package/web-ui/build/static/powershell-TsgmSwr2.js +0 -1
  822. package/web-ui/build/static/processing-C7SmsDmp.js +0 -1
  823. package/web-ui/build/static/processing-DdvVbwBS.js +0 -1
  824. package/web-ui/build/static/profile-CrLgDepu.js +0 -1
  825. package/web-ui/build/static/prolog-1ezqlvDI.js +0 -1
  826. package/web-ui/build/static/prolog-BBYyok9G.js +0 -1
  827. package/web-ui/build/static/promql-CWatQOpO.js +0 -1
  828. package/web-ui/build/static/properties-BJQxP8JR.js +0 -1
  829. package/web-ui/build/static/properties-CfR17w8n.js +0 -1
  830. package/web-ui/build/static/protobuf-Cfo3A4gN.js +0 -1
  831. package/web-ui/build/static/protobuf-DjV26D7V.js +0 -1
  832. package/web-ui/build/static/psl-DHNAOSYZ.js +0 -1
  833. package/web-ui/build/static/pug-DnizfuFH.js +0 -1
  834. package/web-ui/build/static/puppet-BCcVNhLH.js +0 -1
  835. package/web-ui/build/static/puppet-BmSRwm0u.js +0 -1
  836. package/web-ui/build/static/pure-l1UGfReS.js +0 -1
  837. package/web-ui/build/static/purebasic-Cm1PR5lC.js +0 -1
  838. package/web-ui/build/static/purebasic-Dxq0YRkO.js +0 -1
  839. package/web-ui/build/static/purescript-CpKroRLn.js +0 -1
  840. package/web-ui/build/static/python-C0PwNTef.js +0 -1
  841. package/web-ui/build/static/python-Cr-3O1IE.js +0 -1
  842. package/web-ui/build/static/python-repl-B1P7p6JA.js +0 -1
  843. package/web-ui/build/static/q-CL79K_i7.js +0 -1
  844. package/web-ui/build/static/q-DLSzzmR3.js +0 -1
  845. package/web-ui/build/static/qml-BeN40LEp.js +0 -1
  846. package/web-ui/build/static/qml-DIjR5p31.js +0 -1
  847. package/web-ui/build/static/qore-CrnBG9xB.js +0 -1
  848. package/web-ui/build/static/qsharp-B8sPnj52.js +0 -1
  849. package/web-ui/build/static/r-UubkOviq.js +0 -1
  850. package/web-ui/build/static/r-lT3ysYih.js +0 -1
  851. package/web-ui/build/static/racket-Czw_1lqD.js +0 -1
  852. package/web-ui/build/static/reason-D-_rWPty.js +0 -1
  853. package/web-ui/build/static/reasonml-BZkHaGWN.js +0 -1
  854. package/web-ui/build/static/regex-BjeMZDQs.js +0 -1
  855. package/web-ui/build/static/rego-OYluSFFo.js +0 -1
  856. package/web-ui/build/static/renpy-D1X5nAoT.js +0 -1
  857. package/web-ui/build/static/rest-DnlQgDnx.js +0 -1
  858. package/web-ui/build/static/rib-DtDxwFfu.js +0 -1
  859. package/web-ui/build/static/rip-D8vOYwVd.js +0 -1
  860. package/web-ui/build/static/roboconf-DtEUhHis.js +0 -1
  861. package/web-ui/build/static/roboconf-w-iqpst4.js +0 -1
  862. package/web-ui/build/static/robotframework-M9UnAH02.js +0 -1
  863. package/web-ui/build/static/routeros-CX0gciU5.js +0 -1
  864. package/web-ui/build/static/rsl-CZOvPQbk.js +0 -1
  865. package/web-ui/build/static/ruby-BEwdhTtL.js +0 -1
  866. package/web-ui/build/static/ruby-dlRf3rgu.js +0 -1
  867. package/web-ui/build/static/ruleslanguage-CKX7tlpI.js +0 -1
  868. package/web-ui/build/static/rust-7xat0n1g.js +0 -1
  869. package/web-ui/build/static/rust-DCpdcw_7.js +0 -1
  870. package/web-ui/build/static/sas-B9K83LkK.js +0 -1
  871. package/web-ui/build/static/sas-ijKPjRom.js +0 -1
  872. package/web-ui/build/static/sass-ByZaOmQh.js +0 -1
  873. package/web-ui/build/static/scala-B6tUDsIS.js +0 -1
  874. package/web-ui/build/static/scala-BZ4NRThT.js +0 -1
  875. package/web-ui/build/static/scheme-BmDQeIVd.js +0 -1
  876. package/web-ui/build/static/scheme-DIrkVtyr.js +0 -1
  877. package/web-ui/build/static/scilab-BUTG2a1V.js +0 -1
  878. package/web-ui/build/static/scss-CC2Rr7DZ.js +0 -1
  879. package/web-ui/build/static/scss-CG0LtoLt.js +0 -1
  880. package/web-ui/build/static/shell-DEPni1su.js +0 -1
  881. package/web-ui/build/static/shell-session-DxlJbQBl.js +0 -1
  882. package/web-ui/build/static/smali-C5QEAhGK.js +0 -1
  883. package/web-ui/build/static/smali-RgOjDrpG.js +0 -1
  884. package/web-ui/build/static/smalltalk-CCLKnQXy.js +0 -1
  885. package/web-ui/build/static/smalltalk-D2pTtTF6.js +0 -1
  886. package/web-ui/build/static/smarty-D5pb-235.js +0 -1
  887. package/web-ui/build/static/sml-CtXZ7rhO.js +0 -1
  888. package/web-ui/build/static/sml-DgsaUoao.js +0 -1
  889. package/web-ui/build/static/solidity-DLDSX1RV.js +0 -1
  890. package/web-ui/build/static/solution-file-BaDc2_E-.js +0 -1
  891. package/web-ui/build/static/soy-x9k9lQq1.js +0 -1
  892. package/web-ui/build/static/sparql-CEyFkY2d.js +0 -1
  893. package/web-ui/build/static/splunk-spl-Cnoeez_o.js +0 -1
  894. package/web-ui/build/static/sqf-BiFuoaL6.js +0 -1
  895. package/web-ui/build/static/sqf-IC3wZMuh.js +0 -1
  896. package/web-ui/build/static/sql-B0kmmGOU.js +0 -1
  897. package/web-ui/build/static/sql-CUJr2cg-.js +0 -1
  898. package/web-ui/build/static/sql_more-CWl75_kq.js +0 -1
  899. package/web-ui/build/static/squirrel-CcEHntJJ.js +0 -1
  900. package/web-ui/build/static/stan-5fBmEp2c.js +0 -1
  901. package/web-ui/build/static/stan-CAB7l4xW.js +0 -1
  902. package/web-ui/build/static/stata-Cg3Bl6d7.js +0 -1
  903. package/web-ui/build/static/step21-CZGJgHPf.js +0 -1
  904. package/web-ui/build/static/stylus-BO533InK.js +0 -1
  905. package/web-ui/build/static/stylus-DNWkkgmm.js +0 -1
  906. package/web-ui/build/static/subunit-BFopBokb.js +0 -1
  907. package/web-ui/build/static/swift-CalO-wab.js +0 -1
  908. package/web-ui/build/static/swift-mePvo3P4.js +0 -1
  909. package/web-ui/build/static/systemd-bKGRJ9Ha.js +0 -1
  910. package/web-ui/build/static/t4-cs-D7xxs1lK.js +0 -1
  911. package/web-ui/build/static/t4-templating-_11pVeD-.js +0 -1
  912. package/web-ui/build/static/t4-vb-CprOaKdB.js +0 -1
  913. package/web-ui/build/static/taggerscript-CEpPw-UD.js +0 -1
  914. package/web-ui/build/static/tap-CFFYSmjs.js +0 -1
  915. package/web-ui/build/static/tap-Dy3jliYv.js +0 -1
  916. package/web-ui/build/static/tcl-Bw3AVuiY.js +0 -1
  917. package/web-ui/build/static/tcl-CD50d_-j.js +0 -1
  918. package/web-ui/build/static/textile-CSeSEGjy.js +0 -1
  919. package/web-ui/build/static/thrift-00VB402i.js +0 -1
  920. package/web-ui/build/static/toml-DuFNkxHe.js +0 -1
  921. package/web-ui/build/static/tp-4CeaWqyI.js +0 -1
  922. package/web-ui/build/static/tremor-BnerOgTY.js +0 -1
  923. package/web-ui/build/static/tsx-XiNhF1ao.js +0 -1
  924. package/web-ui/build/static/tt2-CM6FV9KO.js +0 -1
  925. package/web-ui/build/static/turtle-JxpiTJEQ.js +0 -1
  926. package/web-ui/build/static/twig-C16bJf43.js +0 -1
  927. package/web-ui/build/static/twig-DQ-0wCvQ.js +0 -1
  928. package/web-ui/build/static/typescript-ILNg_Uvt.js +0 -1
  929. package/web-ui/build/static/typescript-chBpZOex.js +0 -1
  930. package/web-ui/build/static/typoscript-D2-lUjQX.js +0 -1
  931. package/web-ui/build/static/unrealscript-CwOA8REe.js +0 -1
  932. package/web-ui/build/static/uorazor-Dh1SAWKw.js +0 -1
  933. package/web-ui/build/static/uri-BF1wAQOC.js +0 -1
  934. package/web-ui/build/static/v-DUq5Mxzu.js +0 -1
  935. package/web-ui/build/static/vala-BYNy6zW2.js +0 -1
  936. package/web-ui/build/static/vala-CqGfs9Kv.js +0 -1
  937. package/web-ui/build/static/vbnet-BxH9jvRi.js +0 -1
  938. package/web-ui/build/static/vbnet-CJxJGhMO.js +0 -1
  939. package/web-ui/build/static/vbscript-OQ6kMcDV.js +0 -1
  940. package/web-ui/build/static/vbscript-html-CZ-QJ4ch.js +0 -1
  941. package/web-ui/build/static/velocity-B59YHwoP.js +0 -1
  942. package/web-ui/build/static/verilog--uW8iUzt.js +0 -1
  943. package/web-ui/build/static/verilog-DAQz3Gcl.js +0 -1
  944. package/web-ui/build/static/vhdl-5FrGi5Wx.js +0 -1
  945. package/web-ui/build/static/vhdl-C25AEZ8g.js +0 -1
  946. package/web-ui/build/static/vim-CW6uewUP.js +0 -1
  947. package/web-ui/build/static/vim-f3zGsJk1.js +0 -1
  948. package/web-ui/build/static/visual-basic-CoOTQEUn.js +0 -1
  949. package/web-ui/build/static/warpscript-DGouvP9I.js +0 -1
  950. package/web-ui/build/static/wasm-BZeW0TNm.js +0 -1
  951. package/web-ui/build/static/web-idl-Bw1mV_A4.js +0 -1
  952. package/web-ui/build/static/wiki-CZG2B_w1.js +0 -1
  953. package/web-ui/build/static/wolfram-CiMIUpaO.js +0 -1
  954. package/web-ui/build/static/wren-Bh9Sv_02.js +0 -1
  955. package/web-ui/build/static/x86asm-BhoPGTpG.js +0 -1
  956. package/web-ui/build/static/xeora-C5CM7V9L.js +0 -1
  957. package/web-ui/build/static/xl-WCHINiXA.js +0 -1
  958. package/web-ui/build/static/xml-DPAIpwAO.js +0 -1
  959. package/web-ui/build/static/xml-doc-CJxlhMe0.js +0 -1
  960. package/web-ui/build/static/xojo-BW0Z0CzB.js +0 -1
  961. package/web-ui/build/static/xquery-CwiBIiph.js +0 -1
  962. package/web-ui/build/static/xquery-De9QIea7.js +0 -1
  963. package/web-ui/build/static/yaml-CKzSgstB.js +0 -1
  964. package/web-ui/build/static/yaml-DIHBhXM_.js +0 -1
  965. package/web-ui/build/static/yang-Cn0PKttf.js +0 -1
  966. package/web-ui/build/static/zephir-CKVBh8TU.js +0 -1
  967. package/web-ui/build/static/zig-CetEB4NE.js +0 -1
@@ -161,6 +161,16 @@ class AgentPool {
161
161
  status: AGENT_STATUS.ACTIVE,
162
162
  capabilities: config.capabilities || [],
163
163
  directoryAccess: directoryAccess, // Directory access configuration
164
+ // Per-tool configuration — keyed by tool id (e.g., 'terminal',
165
+ // 'filesystem'). When a tool is instantiated for this agent, the
166
+ // object under toolConfig[toolId] is merged into the tool's
167
+ // constructor config. Previously tools were constructed from global
168
+ // defaults only, so there was no way to set per-agent knobs like
169
+ // terminal allowed-commands, filesystem size limits, web stealth
170
+ // level, etc. See ToolManager integration in step 2.
171
+ toolConfig: (config.toolConfig && typeof config.toolConfig === 'object' && !Array.isArray(config.toolConfig))
172
+ ? { ...config.toolConfig }
173
+ : {},
164
174
  conversations: {
165
175
  full: {
166
176
  messages: [],
@@ -304,6 +314,24 @@ class AgentPool {
304
314
  });
305
315
  }
306
316
 
317
+ // Validate per-tool config if being updated. Must be a plain object
318
+ // keyed by tool id; each value is an object of config overrides that
319
+ // will be merged into the tool's constructor config at instantiation.
320
+ // We don't validate individual tool schemas here — that happens at
321
+ // tool construction time where the tool knows its own shape.
322
+ if (updates.toolConfig !== undefined) {
323
+ if (updates.toolConfig === null
324
+ || typeof updates.toolConfig !== 'object'
325
+ || Array.isArray(updates.toolConfig)) {
326
+ throw new Error('Invalid toolConfig: must be a plain object keyed by tool id');
327
+ }
328
+ for (const [toolId, cfg] of Object.entries(updates.toolConfig)) {
329
+ if (cfg !== null && (typeof cfg !== 'object' || Array.isArray(cfg))) {
330
+ throw new Error(`Invalid toolConfig.${toolId}: must be an object or null`);
331
+ }
332
+ }
333
+ }
334
+
307
335
  // If originalSystemPrompt is being updated (user edited the raw prompt), store it
308
336
  // and use it as the base for enhancement. Otherwise use the existing originalSystemPrompt.
309
337
  if (updates.originalSystemPrompt !== undefined) {
@@ -592,6 +620,7 @@ class AgentPool {
592
620
  platformProvided: agent.platformProvided,
593
621
  capabilities: agent.capabilities,
594
622
  directoryAccess: agent.directoryAccess,
623
+ toolConfig: agent.toolConfig || {},
595
624
  lastActivity: agent.lastActivity,
596
625
  isPaused: this._isAgentPaused(agent),
597
626
  pausedUntil: agent.pausedUntil,
@@ -1297,6 +1326,69 @@ class AgentPool {
1297
1326
  // Now using the new messageQueues system with AgentScheduler
1298
1327
  // Inter-agent messages are queued via addInterAgentMessage() method
1299
1328
 
1329
+ /**
1330
+ * Wake an agent out of any paused/delayed state because a message has
1331
+ * arrived for it. Shared by addUserMessage / addInterAgentMessage /
1332
+ * addToolResult — every inbound path MUST route through this to avoid
1333
+ * the "silent queue into a delayed agent" bug where the recipient never
1334
+ * wakes up and the message sits until the scheduler back-off naturally
1335
+ * expires.
1336
+ *
1337
+ * Rationale: delays/pauses are "leave this agent alone" signals set by
1338
+ * the scheduler on error back-off or by the agentDelayTool for timed
1339
+ * waits. Any caller going to the trouble of actually addressing the
1340
+ * agent is an explicit "act now" signal that overrides the wait.
1341
+ *
1342
+ * @param {Object} agent - Agent object (already fetched)
1343
+ * @param {string} reason - Source label for logs (e.g. 'user-message',
1344
+ * 'inter-agent-message', 'tool-result')
1345
+ * @returns {Promise<{wasPaused:boolean, hadDelay:boolean, hadPausedUntil:boolean}>}
1346
+ * @private
1347
+ */
1348
+ async _wakeAgentForMessage(agent, reason) {
1349
+ const info = { wasPaused: false, hadDelay: false, hadPausedUntil: false };
1350
+ if (!agent) return info;
1351
+
1352
+ // Auto-resume explicitly paused agent.
1353
+ if (agent.status === AGENT_STATUS.PAUSED) {
1354
+ info.wasPaused = true;
1355
+ this.logger.info(`Auto-resuming paused agent ${agent.id} due to ${reason}`);
1356
+ await this.resumeAgent(agent.id);
1357
+ }
1358
+
1359
+ // Clear scheduler-enforced delay (rate-limit back-off, api-key delay,
1360
+ // builtin webTool delay, etc.). Only clear if actually in the future;
1361
+ // stale past values don't matter but shouldn't trigger a broadcast.
1362
+ if (agent.delayEndTime && new Date(agent.delayEndTime).getTime() > Date.now()) {
1363
+ info.hadDelay = true;
1364
+ agent.delayEndTime = null;
1365
+ this.logger.info(`Cleared scheduler delay for agent ${agent.id} — ${reason} takes precedence`);
1366
+ }
1367
+
1368
+ // Defensive: if pausedUntil is set but status isn't PAUSED (shouldn't
1369
+ // happen but protects against state drift), clear it too.
1370
+ if (agent.pausedUntil && new Date(agent.pausedUntil).getTime() > Date.now()) {
1371
+ info.hadPausedUntil = true;
1372
+ agent.pausedUntil = null;
1373
+ }
1374
+
1375
+ return info;
1376
+ }
1377
+
1378
+ /**
1379
+ * Broadcast a delay-clear to the WS so the UI's delay chip disappears
1380
+ * immediately instead of waiting for the next scheduler tick.
1381
+ * @private
1382
+ */
1383
+ async _broadcastWake(agentId, reason) {
1384
+ if (!this.scheduler?.broadcastAgentStateUpdate) return;
1385
+ try {
1386
+ await this.scheduler.broadcastAgentStateUpdate(agentId, reason);
1387
+ } catch (err) {
1388
+ this.logger.warn(`Failed to broadcast wake for ${agentId}: ${err.message}`);
1389
+ }
1390
+ }
1391
+
1300
1392
  /**
1301
1393
  * Add message to agent's user message queue
1302
1394
  * @param {string} agentId - Agent ID
@@ -1309,25 +1401,10 @@ class AgentPool {
1309
1401
  throw new Error(`Agent not found: ${agentId}`);
1310
1402
  }
1311
1403
 
1312
- // Auto-resume paused agent when user sends a message
1313
- if (agent.status === AGENT_STATUS.PAUSED) {
1314
- this.logger.info(`Auto-resuming paused agent ${agentId} due to user message`);
1315
- await this.resumeAgent(agentId);
1316
- }
1317
-
1318
- // Clear any scheduler-enforced delay when the user explicitly addresses
1319
- // the agent. Delays are set by the scheduler as a back-off for
1320
- // rate-limit / network / api-key / builtin-tool-delay situations and
1321
- // only make sense while the agent is left alone — a new user message is
1322
- // an explicit signal to act NOW, and waiting out the remaining delay
1323
- // would feel unresponsive. We clear the field and let the scheduler
1324
- // pick the agent up on its next tick. Broadcast the state update so
1325
- // the UI's delay chip disappears immediately.
1326
- const hadDelay = !!(agent.delayEndTime && new Date(agent.delayEndTime).getTime() > Date.now());
1327
- if (hadDelay) {
1328
- agent.delayEndTime = null;
1329
- this.logger.info(`Cleared scheduler delay for agent ${agentId} — user message takes precedence`);
1330
- }
1404
+ // Any inbound message user, inter-agent, or tool-result — takes
1405
+ // precedence over scheduler back-off and manual pauses. See
1406
+ // _wakeAgentForMessage for the rationale.
1407
+ const wakeInfo = await this._wakeAgentForMessage(agent, 'user-message');
1331
1408
 
1332
1409
  const queuedMessage = {
1333
1410
  ...message,
@@ -1348,12 +1425,8 @@ class AgentPool {
1348
1425
 
1349
1426
  // If we cleared a delay, surface it on the WS so the delay chip in the
1350
1427
  // chat header disappears without waiting for the next scheduler cycle.
1351
- if (hadDelay && this.scheduler?.broadcastAgentStateUpdate) {
1352
- try {
1353
- await this.scheduler.broadcastAgentStateUpdate(agentId, 'user-message-clears-delay');
1354
- } catch (err) {
1355
- this.logger.warn(`Failed to broadcast delay-clear for ${agentId}: ${err.message}`);
1356
- }
1428
+ if (wakeInfo.hadDelay) {
1429
+ await this._broadcastWake(agentId, 'user-message-clears-delay');
1357
1430
  }
1358
1431
 
1359
1432
  this.logger.info(`User message queued for agent: ${agentId}`, {
@@ -1374,6 +1447,11 @@ class AgentPool {
1374
1447
  throw new Error(`Agent not found: ${agentId}`);
1375
1448
  }
1376
1449
 
1450
+ // An inter-agent ping from another agent is an explicit "act now"
1451
+ // signal and must override any scheduler back-off or manual pause
1452
+ // on the recipient. See _wakeAgentForMessage.
1453
+ const wakeInfo = await this._wakeAgentForMessage(agent, 'inter-agent-message');
1454
+
1377
1455
  const queuedMessage = {
1378
1456
  ...message,
1379
1457
  id: message.id || message.messageId || `inter-agent-msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
@@ -1400,6 +1478,10 @@ class AgentPool {
1400
1478
  });
1401
1479
  }
1402
1480
 
1481
+ if (wakeInfo.hadDelay) {
1482
+ await this._broadcastWake(agentId, 'inter-agent-message-clears-delay');
1483
+ }
1484
+
1403
1485
  this.logger.info(`Inter-agent message queued for agent: ${agentId}`, {
1404
1486
  messageId: queuedMessage.id,
1405
1487
  sender: message.sender || message.senderName,
@@ -1420,6 +1502,13 @@ class AgentPool {
1420
1502
  throw new Error(`Agent not found: ${agentId}`);
1421
1503
  }
1422
1504
 
1505
+ // Tool results are "external async work finished — continue."
1506
+ // If the agent is delayed or paused when a result arrives (e.g. a
1507
+ // long image/video render completes while an unrelated rate-limit
1508
+ // back-off is still in effect) we wake it so the result can be
1509
+ // consumed immediately instead of sitting until the back-off expires.
1510
+ const wakeInfo = await this._wakeAgentForMessage(agent, 'tool-result');
1511
+
1423
1512
  const queuedResult = {
1424
1513
  ...toolResult,
1425
1514
  id: toolResult.id || `tool-result-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
@@ -1430,6 +1519,10 @@ class AgentPool {
1430
1519
  agent.messageQueues.toolResults.push(queuedResult);
1431
1520
  await this.persistAgentState(agentId);
1432
1521
 
1522
+ if (wakeInfo.hadDelay) {
1523
+ await this._broadcastWake(agentId, 'tool-result-clears-delay');
1524
+ }
1525
+
1433
1526
  this.logger.debug(`Tool result queued for agent: ${agentId}`, {
1434
1527
  toolId: toolResult.toolId,
1435
1528
  status: toolResult.status,
@@ -2185,8 +2185,11 @@ class AgentScheduler {
2185
2185
  this._broadcastFlowProgress(sessionId, agentId, flowProgress, true);
2186
2186
  }
2187
2187
 
2188
- // Broadcast stream completion
2189
- this._broadcastStreamEvent(sessionId, {
2188
+ // Broadcast stream completion. Reasoning fields are included
2189
+ // only when present so non-reasoning models' broadcasts stay
2190
+ // minimal; the web-UI treats undefined/empty as "no thinking
2191
+ // panel to render." See utilities/reasoningContext patterns.
2192
+ const streamCompleteEvent = {
2190
2193
  type: 'stream_complete',
2191
2194
  agentId,
2192
2195
  messageId: streamMessageId,
@@ -2200,7 +2203,14 @@ class AgentScheduler {
2200
2203
  flowRunId: flowContext.flowRunId,
2201
2204
  flowNodeId: flowContext.flowNodeId
2202
2205
  })
2203
- });
2206
+ };
2207
+ if (typeof result.reasoning === 'string' && result.reasoning.length > 0) {
2208
+ streamCompleteEvent.reasoning = result.reasoning;
2209
+ }
2210
+ if (Number.isFinite(result.reasoningTokens) && result.reasoningTokens > 0) {
2211
+ streamCompleteEvent.reasoningTokens = result.reasoningTokens;
2212
+ }
2213
+ this._broadcastStreamEvent(sessionId, streamCompleteEvent);
2204
2214
  },
2205
2215
  onError: (error) => {
2206
2216
  // Check if this is a model-related error that should show suggestions
@@ -2864,7 +2874,15 @@ class AgentScheduler {
2864
2874
  });
2865
2875
  }
2866
2876
 
2867
- // Create response message
2877
+ // Create response message. Reasoning fields are only attached when
2878
+ // there's something to attach — avoids cluttering every assistant
2879
+ // message with null fields for non-reasoning models.
2880
+ // - `reasoning`: chain-of-thought text, when the provider exposed it
2881
+ // (DeepSeek-R1, Kimi K2 thinking, xAI reasoning, Claude thinking).
2882
+ // - `reasoningTokens`: token count spent thinking, surfaced even
2883
+ // when the text is opaque (OpenAI o-series, gpt-5-reasoning).
2884
+ // See src/services/aiService.js — `_extractReasoningTokens` + the
2885
+ // streaming/non-streaming handlers for the capture contract.
2868
2886
  const responseMessage = {
2869
2887
  id: `ai-response-${Date.now()}`,
2870
2888
  agentId: agentId,
@@ -2877,6 +2895,12 @@ class AgentScheduler {
2877
2895
  // Mark if tools will be executed (UI can show loading indicator)
2878
2896
  pendingToolExecution: hasTools
2879
2897
  };
2898
+ if (typeof aiResponse.reasoning === 'string' && aiResponse.reasoning.length > 0) {
2899
+ responseMessage.reasoning = aiResponse.reasoning;
2900
+ }
2901
+ if (Number.isFinite(aiResponse.reasoningTokens) && aiResponse.reasoningTokens > 0) {
2902
+ responseMessage.reasoningTokens = aiResponse.reasoningTokens;
2903
+ }
2880
2904
 
2881
2905
  const appended = await this.addMessageToConversation(agentId, responseMessage, false);
2882
2906
 
@@ -467,9 +467,22 @@ class MessageProcessor {
467
467
  // Pass truncation info to tool for partial execution handling.
468
468
  // Re-derive projectDir from directoryAccess in case a previous tool
469
469
  // (e.g. terminal change-directory) updated the working directory.
470
+ //
471
+ // toolConfig is this tool's slice of the agent's per-tool config
472
+ // (from agent.toolConfig[toolId]) — null when the agent didn't
473
+ // override anything for this tool, in which case the tool uses
474
+ // its global defaults. Tools that want to support per-agent
475
+ // config read `context.toolConfig` and merge it with their own
476
+ // defaults; tools that ignore it get the same behaviour as
477
+ // before.
478
+ const perToolConfig = (context.agentToolConfig && command.toolId)
479
+ ? context.agentToolConfig[command.toolId] || null
480
+ : null;
481
+
470
482
  const toolContext = {
471
483
  ...context,
472
484
  projectDir: context.directoryAccess?.workingDirectory || context.projectDir,
485
+ toolConfig: perToolConfig,
473
486
  wasRepaired: command.wasRepaired || false,
474
487
  wasTruncated: command.wasTruncated || false
475
488
  };
@@ -823,7 +836,7 @@ class MessageProcessor {
823
836
 
824
837
  // Get agent to include its directoryAccess configuration
825
838
  const agent = await this.agentPool.getAgent(agentId);
826
-
839
+
827
840
  // Execute tools with agent context including sessionId and directoryAccess
828
841
  const toolContext = {
829
842
  ...context,
@@ -831,6 +844,11 @@ class MessageProcessor {
831
844
  sessionId: context.sessionId, // Ensure sessionId is explicitly available for tools
832
845
  directoryAccess: agent?.directoryAccess, // Include agent's directory access configuration
833
846
  projectDir: agent?.directoryAccess?.workingDirectory || agent?.projectDir || context.projectDir, // Extract project directory from directoryAccess
847
+ // Per-agent tool configuration — keyed by tool id. Tools can read
848
+ // their own slice via `context.toolConfig` (injected per-tool in
849
+ // executeTools below) or inspect the full map here if they need
850
+ // cross-tool state. See agentPool.js for the schema contract.
851
+ agentToolConfig: (agent && agent.toolConfig) ? agent.toolConfig : {},
834
852
  agentPool: this.agentPool,
835
853
  contextManager: this.contextManager,
836
854
  aiService: this.aiService,
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Tests for GET /api/images (list) and DELETE /api/images (delete).
3
+ * Mirrors the imageServing.test.js mini-app pattern — we mount only the
4
+ * routes under test to avoid booting the whole webServer + orchestrator.
5
+ *
6
+ * Covers:
7
+ * - list returns empty when no agents / no images
8
+ * - list enumerates image files from each agent's `images/` folder
9
+ * - list dedupes overlapping workingDir/projectDir
10
+ * - list filters by agentId query
11
+ * - list sorts newest-first
12
+ * - delete rejects path traversal + bad extensions
13
+ * - delete removes the file and returns success
14
+ * - delete returns 404 when the file is already gone
15
+ */
16
+
17
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from '@jest/globals';
18
+ import express from 'express';
19
+ import path from 'path';
20
+ import fs from 'fs/promises';
21
+ import os from 'os';
22
+ import request from 'supertest';
23
+
24
+ const HTTP_STATUS = {
25
+ OK: 200,
26
+ BAD_REQUEST: 400,
27
+ FORBIDDEN: 403,
28
+ NOT_FOUND: 404,
29
+ SERVICE_UNAVAILABLE: 503,
30
+ INTERNAL_SERVER_ERROR: 500,
31
+ };
32
+
33
+ function buildApp({ sessions, orchestrator, logger }) {
34
+ const app = express();
35
+ app.use(express.json());
36
+
37
+ // ── GET /api/images ─────────────────────────────────────────────
38
+ app.get('/api/images', async (req, res) => {
39
+ try {
40
+ if (!orchestrator?.agentPool) {
41
+ return res.json({ success: true, images: [] });
42
+ }
43
+ const requestedAgentId = req.query.agentId || null;
44
+ const agents = await orchestrator.agentPool.getAllAgents();
45
+ const results = [];
46
+ const seen = new Set();
47
+ const IMAGE_EXTS = new Set(['.png', '.jpg', '.jpeg', '.webp', '.gif']);
48
+
49
+ for (const agent of (agents instanceof Map ? Array.from(agents.values()) : agents)) {
50
+ if (requestedAgentId && agent.id !== requestedAgentId) continue;
51
+ const workDir = agent.directoryAccess?.workingDirectory || agent.projectDir;
52
+ if (!workDir) continue;
53
+ const imagesDir = path.join(workDir, 'images');
54
+ let entries;
55
+ try { entries = await fs.readdir(imagesDir); } catch { continue; }
56
+ for (const name of entries) {
57
+ const ext = path.extname(name).toLowerCase();
58
+ if (!IMAGE_EXTS.has(ext)) continue;
59
+ const abs = path.join(imagesDir, name);
60
+ if (seen.has(abs)) continue;
61
+ seen.add(abs);
62
+ let stat;
63
+ try { stat = await fs.stat(abs); } catch { continue; }
64
+ if (!stat.isFile()) continue;
65
+ const anySession = Array.from(sessions.values())[0];
66
+ const sessionId = agent.sessionId || anySession?.sessionId || 'web-session';
67
+ results.push({
68
+ filename: name,
69
+ agentId: agent.id,
70
+ agentName: agent.name,
71
+ projectDir: workDir,
72
+ mtime: stat.mtime.toISOString(),
73
+ size: stat.size,
74
+ url: `/api/images/${encodeURIComponent(sessionId)}/${encodeURIComponent(name)}`,
75
+ });
76
+ }
77
+ }
78
+ results.sort((a, b) => b.mtime.localeCompare(a.mtime));
79
+ res.json({ success: true, images: results });
80
+ } catch (error) {
81
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
82
+ }
83
+ });
84
+
85
+ // ── DELETE /api/images ──────────────────────────────────────────
86
+ app.delete('/api/images', async (req, res) => {
87
+ try {
88
+ const { agentId, filename } = req.query;
89
+ if (!agentId || !filename) {
90
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'agentId and filename are required' });
91
+ }
92
+ const normalized = path.basename(filename);
93
+ if (normalized !== filename || filename.includes('..')) {
94
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Invalid filename' });
95
+ }
96
+ const ext = path.extname(normalized).toLowerCase();
97
+ if (!['.png', '.jpg', '.jpeg', '.webp', '.gif'].includes(ext)) {
98
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Unsupported file extension for gallery delete' });
99
+ }
100
+ if (!orchestrator?.agentPool) {
101
+ return res.status(HTTP_STATUS.SERVICE_UNAVAILABLE).json({ success: false, error: 'Agent pool not available' });
102
+ }
103
+ const agent = await orchestrator.agentPool.getAgent(agentId);
104
+ if (!agent) {
105
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ success: false, error: 'Agent not found' });
106
+ }
107
+ const workDir = agent.directoryAccess?.workingDirectory || agent.projectDir;
108
+ if (!workDir) {
109
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Agent has no working directory' });
110
+ }
111
+ const target = path.join(workDir, 'images', normalized);
112
+ await fs.unlink(target);
113
+ res.json({ success: true });
114
+ } catch (error) {
115
+ if (error.code === 'ENOENT') {
116
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ success: false, error: 'Image not found' });
117
+ }
118
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
119
+ }
120
+ });
121
+
122
+ return app;
123
+ }
124
+
125
+ // ── Fixtures ───────────────────────────────────────────────────────
126
+ let tmpDir;
127
+ let agentADir;
128
+ let agentBDir;
129
+
130
+ beforeAll(async () => {
131
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'gallery-tests-'));
132
+ agentADir = path.join(tmpDir, 'agentA');
133
+ agentBDir = path.join(tmpDir, 'agentB');
134
+ await fs.mkdir(path.join(agentADir, 'images'), { recursive: true });
135
+ await fs.mkdir(path.join(agentBDir, 'images'), { recursive: true });
136
+ });
137
+
138
+ afterAll(async () => {
139
+ await fs.rm(tmpDir, { recursive: true, force: true }).catch(() => {});
140
+ });
141
+
142
+ function makeAgents() {
143
+ const agentA = {
144
+ id: 'agentA', name: 'Alice', sessionId: 'sessA',
145
+ directoryAccess: { workingDirectory: agentADir },
146
+ };
147
+ const agentB = {
148
+ id: 'agentB', name: 'Bob', sessionId: 'sessB',
149
+ projectDir: agentBDir, // uses projectDir fallback
150
+ };
151
+ const byId = new Map([[agentA.id, agentA], [agentB.id, agentB]]);
152
+ return {
153
+ agentA, agentB,
154
+ orchestrator: {
155
+ agentPool: {
156
+ getAllAgents: async () => byId,
157
+ getAgent: async (id) => byId.get(id) || null,
158
+ },
159
+ },
160
+ };
161
+ }
162
+
163
+ function makeSessions() {
164
+ return new Map([['sessA', { sessionId: 'sessA', projectDir: agentADir }]]);
165
+ }
166
+
167
+ // ── Tests ──────────────────────────────────────────────────────────
168
+
169
+ describe('GET /api/images', () => {
170
+ beforeEach(async () => {
171
+ // Clean + reset fixtures
172
+ const aDir = path.join(agentADir, 'images');
173
+ const bDir = path.join(agentBDir, 'images');
174
+ for (const d of [aDir, bDir]) {
175
+ const files = await fs.readdir(d).catch(() => []);
176
+ await Promise.all(files.map(f => fs.unlink(path.join(d, f))));
177
+ }
178
+ });
179
+
180
+ it('returns empty list when agentPool has no agents', async () => {
181
+ const app = buildApp({
182
+ sessions: new Map(),
183
+ orchestrator: { agentPool: { getAllAgents: async () => [], getAgent: async () => null } },
184
+ logger: console,
185
+ });
186
+ const res = await request(app).get('/api/images');
187
+ expect(res.status).toBe(200);
188
+ expect(res.body).toEqual({ success: true, images: [] });
189
+ });
190
+
191
+ it('returns empty list when agentPool is not wired', async () => {
192
+ const app = buildApp({ sessions: new Map(), orchestrator: {}, logger: console });
193
+ const res = await request(app).get('/api/images');
194
+ expect(res.status).toBe(200);
195
+ expect(res.body.images).toEqual([]);
196
+ });
197
+
198
+ it('enumerates images from each agent', async () => {
199
+ await fs.writeFile(path.join(agentADir, 'images', 'a1.png'), 'a1');
200
+ await fs.writeFile(path.join(agentBDir, 'images', 'b1.jpg'), 'b1');
201
+ const { orchestrator } = makeAgents();
202
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
203
+ const res = await request(app).get('/api/images');
204
+ expect(res.status).toBe(200);
205
+ const names = res.body.images.map(i => i.filename).sort();
206
+ expect(names).toEqual(['a1.png', 'b1.jpg']);
207
+ });
208
+
209
+ it('ignores non-image files in the images/ folder', async () => {
210
+ await fs.writeFile(path.join(agentADir, 'images', 'ok.png'), 'ok');
211
+ await fs.writeFile(path.join(agentADir, 'images', 'readme.md'), '# hi');
212
+ const { orchestrator } = makeAgents();
213
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
214
+ const res = await request(app).get('/api/images');
215
+ expect(res.body.images.map(i => i.filename)).toEqual(['ok.png']);
216
+ });
217
+
218
+ it('filters by agentId query', async () => {
219
+ await fs.writeFile(path.join(agentADir, 'images', 'a.png'), 'a');
220
+ await fs.writeFile(path.join(agentBDir, 'images', 'b.png'), 'b');
221
+ const { orchestrator } = makeAgents();
222
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
223
+ const res = await request(app).get('/api/images?agentId=agentB');
224
+ expect(res.body.images).toHaveLength(1);
225
+ expect(res.body.images[0].filename).toBe('b.png');
226
+ });
227
+
228
+ it('returns url pointing to /api/images/:sessionId/:filename', async () => {
229
+ await fs.writeFile(path.join(agentADir, 'images', 'u.png'), 'u');
230
+ const { orchestrator } = makeAgents();
231
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
232
+ const res = await request(app).get('/api/images');
233
+ expect(res.body.images[0].url).toBe('/api/images/sessA/u.png');
234
+ });
235
+
236
+ it('sorts newest-first by mtime', async () => {
237
+ await fs.writeFile(path.join(agentADir, 'images', 'old.png'), 'x');
238
+ // Delay then write newer so mtime is distinguishable.
239
+ await new Promise(r => setTimeout(r, 15));
240
+ await fs.writeFile(path.join(agentADir, 'images', 'new.png'), 'x');
241
+ const { orchestrator } = makeAgents();
242
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
243
+ const res = await request(app).get('/api/images');
244
+ expect(res.body.images.map(i => i.filename)).toEqual(['new.png', 'old.png']);
245
+ });
246
+ });
247
+
248
+ describe('DELETE /api/images', () => {
249
+ beforeEach(async () => {
250
+ // Reset state for each test
251
+ const aDir = path.join(agentADir, 'images');
252
+ const files = await fs.readdir(aDir).catch(() => []);
253
+ await Promise.all(files.map(f => fs.unlink(path.join(aDir, f))));
254
+ });
255
+
256
+ it('rejects missing params', async () => {
257
+ const { orchestrator } = makeAgents();
258
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
259
+ const res = await request(app).delete('/api/images');
260
+ expect(res.status).toBe(400);
261
+ expect(res.body.error).toMatch(/required/);
262
+ });
263
+
264
+ it('rejects path traversal in filename', async () => {
265
+ const { orchestrator } = makeAgents();
266
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
267
+ const res = await request(app).delete('/api/images?agentId=agentA&filename=..%2Fetc%2Fpasswd');
268
+ expect(res.status).toBe(400);
269
+ expect(res.body.error).toMatch(/Invalid filename/);
270
+ });
271
+
272
+ it('rejects non-image extension', async () => {
273
+ const { orchestrator } = makeAgents();
274
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
275
+ const res = await request(app).delete('/api/images?agentId=agentA&filename=secret.txt');
276
+ expect(res.status).toBe(400);
277
+ expect(res.body.error).toMatch(/Unsupported file extension/);
278
+ });
279
+
280
+ it('returns 404 when agent is unknown', async () => {
281
+ const { orchestrator } = makeAgents();
282
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
283
+ const res = await request(app).delete('/api/images?agentId=nobody&filename=x.png');
284
+ expect(res.status).toBe(404);
285
+ });
286
+
287
+ it('returns 404 when the file does not exist', async () => {
288
+ const { orchestrator } = makeAgents();
289
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
290
+ const res = await request(app).delete('/api/images?agentId=agentA&filename=missing.png');
291
+ expect(res.status).toBe(404);
292
+ });
293
+
294
+ it('deletes an existing image', async () => {
295
+ const target = path.join(agentADir, 'images', 'gone.png');
296
+ await fs.writeFile(target, 'data');
297
+ const { orchestrator } = makeAgents();
298
+ const app = buildApp({ sessions: makeSessions(), orchestrator, logger: console });
299
+ const res = await request(app).delete('/api/images?agentId=agentA&filename=gone.png');
300
+ expect(res.status).toBe(200);
301
+ expect(res.body.success).toBe(true);
302
+ // File is actually gone
303
+ await expect(fs.access(target)).rejects.toBeTruthy();
304
+ });
305
+
306
+ it('returns 503 when agentPool is not wired', async () => {
307
+ const app = buildApp({ sessions: new Map(), orchestrator: {}, logger: console });
308
+ const res = await request(app).delete('/api/images?agentId=x&filename=y.png');
309
+ expect(res.status).toBe(503);
310
+ });
311
+ });