onbuzz 4.2.0 → 4.4.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 (986) hide show
  1. package/package.json +1 -1
  2. package/src/core/__tests__/agentScheduler.visualizer.test.js +258 -0
  3. package/src/core/__tests__/orchestrator.test.js +22 -6
  4. package/src/core/agentScheduler.js +7 -1
  5. package/src/core/orchestrator.js +13 -6
  6. package/src/index.js +8 -0
  7. package/src/interfaces/__tests__/galleryRoutes.test.js +158 -250
  8. package/src/interfaces/__tests__/schedulerRoutes.test.js +176 -0
  9. package/src/interfaces/__tests__/videoJobsRoutes.test.js +179 -0
  10. package/src/interfaces/schedulerRoutes.js +50 -0
  11. package/src/interfaces/webServer.js +235 -111
  12. package/src/modules/widget/__tests__/acceptance.test.js +267 -0
  13. package/src/modules/widget/__tests__/codeAnalyzer.test.js +340 -0
  14. package/src/modules/widget/__tests__/eventBus.test.js +169 -0
  15. package/src/modules/widget/__tests__/galleryActions.test.js +290 -0
  16. package/src/modules/widget/__tests__/galleryStore.test.js +269 -0
  17. package/src/modules/widget/__tests__/isDisabled.test.js +41 -0
  18. package/src/modules/widget/__tests__/phishingScanner.test.js +75 -0
  19. package/src/modules/widget/__tests__/routes.test.js +678 -0
  20. package/src/modules/widget/__tests__/runtime.test.js +401 -0
  21. package/src/modules/widget/__tests__/schema.test.js +155 -0
  22. package/src/modules/widget/__tests__/upgrade.test.js +257 -0
  23. package/src/modules/widget/__tests__/versioning.test.js +309 -0
  24. package/src/modules/widget/__tests__/webComponentRuntime.test.js +565 -0
  25. package/src/modules/widget/__tests__/widgetTool.test.js +316 -0
  26. package/src/modules/widget/codeAnalyzer.js +351 -0
  27. package/src/modules/widget/galleryStore.js +324 -0
  28. package/src/modules/widget/index.js +38 -0
  29. package/src/modules/widget/phishingScanner.js +47 -0
  30. package/src/modules/widget/routes.js +414 -0
  31. package/src/modules/widget/runtime/bundle.js +640 -0
  32. package/src/modules/widget/runtime/webComponentBundle.js +470 -0
  33. package/src/modules/widget/schema.js +133 -0
  34. package/src/modules/widget/widgetTool.js +1336 -0
  35. package/src/services/__tests__/aiService.stream.test.js +5 -1
  36. package/src/services/__tests__/channelFilter.test.js +4 -2
  37. package/src/services/__tests__/channelRelay.integration.test.js +1 -1
  38. package/src/services/__tests__/galleryService.test.js +225 -0
  39. package/src/services/__tests__/toolCallBridgeContract.test.js +3 -5
  40. package/src/services/galleryService.js +257 -0
  41. package/src/tools/__tests__/imageTool.sizeValidation.test.js +134 -0
  42. package/src/tools/__tests__/imageTool.validator.test.js +194 -0
  43. package/src/tools/__tests__/videoTool.jobs.test.js +147 -0
  44. package/src/tools/imageTool.js +282 -44
  45. package/src/tools/taskManagerTool.js +13 -2
  46. package/src/tools/videoTool.js +126 -0
  47. package/src/utilities/__tests__/logger.safeStringify.test.js +124 -0
  48. package/src/utilities/logger.js +51 -7
  49. package/src/utilities/userDataDir.js +3 -0
  50. package/web-ui/build/index.html +2 -2
  51. package/web-ui/build/static/1c-DhNfWMWm.js +1 -0
  52. package/web-ui/build/static/abap-QOWHgSNA.js +1 -0
  53. package/web-ui/build/static/abnf-C9PFiETQ.js +1 -0
  54. package/web-ui/build/static/abnf-DEbBdEpP.js +1 -0
  55. package/web-ui/build/static/accesslog-DaKq5_Ts.js +1 -0
  56. package/web-ui/build/static/actionscript-BcY19SjW.js +1 -0
  57. package/web-ui/build/static/actionscript-CbLJrkm9.js +1 -0
  58. package/web-ui/build/static/ada-D1vjmumu.js +1 -0
  59. package/web-ui/build/static/ada-hAjtW1jL.js +1 -0
  60. package/web-ui/build/static/agda-Bhk3JFT9.js +1 -0
  61. package/web-ui/build/static/al-DYmeq5B0.js +1 -0
  62. package/web-ui/build/static/angelscript-BxCBNQXZ.js +1 -0
  63. package/web-ui/build/static/antlr4-CPmkdILF.js +1 -0
  64. package/web-ui/build/static/apache-CnwL2ZvW.js +1 -0
  65. package/web-ui/build/static/apacheconf-CfeBIh7R.js +1 -0
  66. package/web-ui/build/static/apex-C36kXZsT.js +1 -0
  67. package/web-ui/build/static/apl-CeT_l0YX.js +1 -0
  68. package/web-ui/build/static/applescript-BimsduDW.js +1 -0
  69. package/web-ui/build/static/applescript-CLBFEONC.js +1 -0
  70. package/web-ui/build/static/aql-DcXNMsw5.js +1 -0
  71. package/web-ui/build/static/arcade-CsONs-nh.js +1 -0
  72. package/web-ui/build/static/arduino-1XAf972o.js +1 -0
  73. package/web-ui/build/static/arduino-BkRulzgv.js +1 -0
  74. package/web-ui/build/static/arff-QhmkBHXy.js +1 -0
  75. package/web-ui/build/static/armasm-Cf34TCbg.js +1 -0
  76. package/web-ui/build/static/asciidoc-Dxk-KUUW.js +1 -0
  77. package/web-ui/build/static/asciidoc-mpuuiNok.js +1 -0
  78. package/web-ui/build/static/asm6502-0M2Se3gz.js +1 -0
  79. package/web-ui/build/static/asmatmel-DhFK-DLd.js +1 -0
  80. package/web-ui/build/static/aspectj-BKNOwBC8.js +1 -0
  81. package/web-ui/build/static/aspnet-BZ88RTxR.js +1 -0
  82. package/web-ui/build/static/autohotkey-DGmMm6oy.js +1 -0
  83. package/web-ui/build/static/autohotkey-HUDPuon_.js +1 -0
  84. package/web-ui/build/static/autoit-B-YW8YdA.js +1 -0
  85. package/web-ui/build/static/autoit-CvHRbbE-.js +1 -0
  86. package/web-ui/build/static/avisynth-C6iP20gR.js +1 -0
  87. package/web-ui/build/static/avrasm-AOIVGwnb.js +1 -0
  88. package/web-ui/build/static/avro-idl-CcPf6wBK.js +1 -0
  89. package/web-ui/build/static/awk-Dy8_cKla.js +1 -0
  90. package/web-ui/build/static/axapta-CexCCXgI.js +1 -0
  91. package/web-ui/build/static/bash-DKgFZb-B.js +1 -0
  92. package/web-ui/build/static/bash-DrUQRf4E.js +1 -0
  93. package/web-ui/build/static/basic-BXDUD6us.js +1 -0
  94. package/web-ui/build/static/basic-DlEL_-PG.js +1 -0
  95. package/web-ui/build/static/batch-HHuRbek7.js +1 -0
  96. package/web-ui/build/static/bbcode-D4lEyfHq.js +1 -0
  97. package/web-ui/build/static/bicep-Ca66VjcC.js +1 -0
  98. package/web-ui/build/static/birb-BWDnQG3-.js +1 -0
  99. package/web-ui/build/static/bison-DGEvuoCn.js +1 -0
  100. package/web-ui/build/static/bnf-DNrgnFxK.js +1 -0
  101. package/web-ui/build/static/bnf-DkGg9a6f.js +1 -0
  102. package/web-ui/build/static/brainfuck-BcC5WVuw.js +1 -0
  103. package/web-ui/build/static/brainfuck-Dzx6V6EF.js +1 -0
  104. package/web-ui/build/static/brightscript-26Asmy4_.js +1 -0
  105. package/web-ui/build/static/bro-CFV9ava2.js +1 -0
  106. package/web-ui/build/static/bsl-BHMAYVVg.js +1 -0
  107. package/web-ui/build/static/c-B7WGfC_g.js +1 -0
  108. package/web-ui/build/static/c-CUYmQ5h3.js +1 -0
  109. package/web-ui/build/static/c-like-BSddZquS.js +1 -0
  110. package/web-ui/build/static/cal-DQjwjuMG.js +1 -0
  111. package/web-ui/build/static/capnproto-CBnYJDMr.js +1 -0
  112. package/web-ui/build/static/ceylon-ce3L4vqX.js +1 -0
  113. package/web-ui/build/static/cfscript-CN8IKzxH.js +1 -0
  114. package/web-ui/build/static/chaiscript-DT-qasen.js +1 -0
  115. package/web-ui/build/static/cil-BPu0-6KT.js +1 -0
  116. package/web-ui/build/static/clean-BWcUgtLl.js +1 -0
  117. package/web-ui/build/static/clojure-CVLbUcEn.js +1 -0
  118. package/web-ui/build/static/clojure-mVJcgmKZ.js +1 -0
  119. package/web-ui/build/static/clojure-repl-B1bPQUgE.js +1 -0
  120. package/web-ui/build/static/cmake-ApAYr4_A.js +1 -0
  121. package/web-ui/build/static/cmake-oI81UP1F.js +1 -0
  122. package/web-ui/build/static/cobol-eZdxawKH.js +1 -0
  123. package/web-ui/build/static/coffeescript-BvFq14Nz.js +1 -0
  124. package/web-ui/build/static/coffeescript-CedrhcbC.js +1 -0
  125. package/web-ui/build/static/concurnas-8QctO6Q7.js +1 -0
  126. package/web-ui/build/static/coq-CaQMtKys.js +1 -0
  127. package/web-ui/build/static/coq-Di7lBRJy.js +1 -0
  128. package/web-ui/build/static/cos-3TjiDgk1.js +1 -0
  129. package/web-ui/build/static/cpp-BGwIhR_y.js +1 -0
  130. package/web-ui/build/static/cpp-CRXTx1YD.js +1 -0
  131. package/web-ui/build/static/crmsh-C67REd2u.js +1 -0
  132. package/web-ui/build/static/crystal-C8Rs5smk.js +1 -0
  133. package/web-ui/build/static/crystal-C8jnpN4t.js +1 -0
  134. package/web-ui/build/static/csharp-CqlFLWOu.js +1 -0
  135. package/web-ui/build/static/csharp-D1M9LcKj.js +1 -0
  136. package/web-ui/build/static/cshtml-BrYce3m1.js +1 -0
  137. package/web-ui/build/static/csp-DaMDae_q.js +1 -0
  138. package/web-ui/build/static/csp-DmoB74Pq.js +1 -0
  139. package/web-ui/build/static/css-Bm-MgPWM.js +1 -0
  140. package/web-ui/build/static/css-extras-T3f2IfaH.js +1 -0
  141. package/web-ui/build/static/csv-BgIvUIgl.js +1 -0
  142. package/web-ui/build/static/cypher-Bsq4PGhM.js +1 -0
  143. package/web-ui/build/static/d-Qt9QuUvk.js +1 -0
  144. package/web-ui/build/static/d-h4AYkhsS.js +1 -0
  145. package/web-ui/build/static/dart-DNDTBaSF.js +1 -0
  146. package/web-ui/build/static/dart-Dkg8Mtqj.js +1 -0
  147. package/web-ui/build/static/dataweave-XNvXnB4j.js +1 -0
  148. package/web-ui/build/static/dax-DAM3HOsu.js +1 -0
  149. package/web-ui/build/static/delphi-DTzj2E4U.js +1 -0
  150. package/web-ui/build/static/dhall-Brb1ufqF.js +1 -0
  151. package/web-ui/build/static/diff-3SMw9VwF.js +1 -0
  152. package/web-ui/build/static/diff-ssu7Mr2I.js +1 -0
  153. package/web-ui/build/static/django-CK_xvPUY.js +1 -0
  154. package/web-ui/build/static/django-D9a4uL_8.js +1 -0
  155. package/web-ui/build/static/dns-Uvea7PR7.js +1 -0
  156. package/web-ui/build/static/dns-zone-file-BvD_LLn3.js +1 -0
  157. package/web-ui/build/static/docker-CC3kvxlv.js +1 -0
  158. package/web-ui/build/static/dockerfile-BRFh_Hdm.js +1 -0
  159. package/web-ui/build/static/dos-C-I0-qWQ.js +1 -0
  160. package/web-ui/build/static/dot-BmS_Nrtr.js +1 -0
  161. package/web-ui/build/static/dsconfig-CBWgrIVa.js +1 -0
  162. package/web-ui/build/static/dts-B31mUIV6.js +1 -0
  163. package/web-ui/build/static/dust-BBtJv286.js +1 -0
  164. package/web-ui/build/static/ebnf-CCA0ITCE.js +1 -0
  165. package/web-ui/build/static/ebnf-CeVJpQny.js +1 -0
  166. package/web-ui/build/static/editorconfig-Nhj95Qci.js +1 -0
  167. package/web-ui/build/static/eiffel-E7QJBlEz.js +1 -0
  168. package/web-ui/build/static/ejs-B9gYRoXo.js +1 -0
  169. package/web-ui/build/static/elixir-CYG1GGGp.js +1 -0
  170. package/web-ui/build/static/elixir-fNfEypj7.js +1 -0
  171. package/web-ui/build/static/elm-Td6N7vMU.js +1 -0
  172. package/web-ui/build/static/elm-v0-mxxuQ.js +1 -0
  173. package/web-ui/build/static/erb-BO3LQtQx.js +1 -0
  174. package/web-ui/build/static/erb-ez_pDLEC.js +1 -0
  175. package/web-ui/build/static/erlang-ChOZ-mbI.js +1 -0
  176. package/web-ui/build/static/erlang-DCBIueE-.js +1 -0
  177. package/web-ui/build/static/erlang-repl-CL0-sGxn.js +1 -0
  178. package/web-ui/build/static/etlua-CQdh26X0.js +1 -0
  179. package/web-ui/build/static/excel-BbAj2wuJ.js +1 -0
  180. package/web-ui/build/static/excel-formula-qBXUIcjs.js +1 -0
  181. package/web-ui/build/static/factor-BPO68YSz.js +1 -0
  182. package/web-ui/build/static/false-sZ2iLGj-.js +1 -0
  183. package/web-ui/build/static/firestore-security-rules-BmYLiQGh.js +1 -0
  184. package/web-ui/build/static/fix-Co_Dnq0A.js +1 -0
  185. package/web-ui/build/static/flix-DlEWTbVq.js +1 -0
  186. package/web-ui/build/static/flow-DnsnnZca.js +1 -0
  187. package/web-ui/build/static/fortran-B4OMllck.js +1 -0
  188. package/web-ui/build/static/fortran-_8ltaoLA.js +1 -0
  189. package/web-ui/build/static/fsharp-CY0Ix1iB.js +1 -0
  190. package/web-ui/build/static/fsharp-y6HOJqAr.js +1 -0
  191. package/web-ui/build/static/ftl-DvbP9VWU.js +1 -0
  192. package/web-ui/build/static/gams-DF3rxJoc.js +1 -0
  193. package/web-ui/build/static/gap-BSje56C-.js +1 -0
  194. package/web-ui/build/static/gauss-BqYXtLWM.js +1 -0
  195. package/web-ui/build/static/gcode-CBl-mAWK.js +1 -0
  196. package/web-ui/build/static/gcode-idSM0RsM.js +1 -0
  197. package/web-ui/build/static/gdscript-CniY3oYY.js +1 -0
  198. package/web-ui/build/static/gedcom-C1dJ3jCP.js +1 -0
  199. package/web-ui/build/static/gherkin-4jaQr3Lt.js +1 -0
  200. package/web-ui/build/static/gherkin-BRsS35Ed.js +1 -0
  201. package/web-ui/build/static/git-2a7wzptj.js +1 -0
  202. package/web-ui/build/static/glsl-Ckv4lBKB.js +1 -0
  203. package/web-ui/build/static/glsl-CnGjBp6a.js +1 -0
  204. package/web-ui/build/static/gml-DG3KVI4z.js +1 -0
  205. package/web-ui/build/static/gml-DxKOOp--.js +1 -0
  206. package/web-ui/build/static/gn-DmUPMuZR.js +1 -0
  207. package/web-ui/build/static/go-D8tYdcYa.js +1 -0
  208. package/web-ui/build/static/go-DpIavxCs.js +1 -0
  209. package/web-ui/build/static/go-module-BktUPko9.js +1 -0
  210. package/web-ui/build/static/golo-Ao-diOpI.js +1 -0
  211. package/web-ui/build/static/gradle-DHJSdPoJ.js +1 -0
  212. package/web-ui/build/static/graphql-HpsdbKFp.js +1 -0
  213. package/web-ui/build/static/groovy-B4BrZYtV.js +1 -0
  214. package/web-ui/build/static/groovy-BCIRzoWJ.js +1 -0
  215. package/web-ui/build/static/haml-B8Mj6Hex.js +1 -0
  216. package/web-ui/build/static/haml-Fo-yynuy.js +1 -0
  217. package/web-ui/build/static/handlebars-BnFawcCU.js +1 -0
  218. package/web-ui/build/static/handlebars-YZn3MEyv.js +1 -0
  219. package/web-ui/build/static/haskell-DutAI7D9.js +1 -0
  220. package/web-ui/build/static/haskell-Dvl0Yw7z.js +1 -0
  221. package/web-ui/build/static/haxe-6S205Iem.js +1 -0
  222. package/web-ui/build/static/haxe-aKgbIDi5.js +1 -0
  223. package/web-ui/build/static/hcl-Dt_vNekv.js +1 -0
  224. package/web-ui/build/static/hlsl-CupXb_iv.js +1 -0
  225. package/web-ui/build/static/hoon-Dg19YEzw.js +1 -0
  226. package/web-ui/build/static/hpkp-DCF8Ff3o.js +1 -0
  227. package/web-ui/build/static/hsp-D90yiizY.js +1 -0
  228. package/web-ui/build/static/hsts-Cf63XX0s.js +1 -0
  229. package/web-ui/build/static/htmlbars-DMbRiSo_.js +1 -0
  230. package/web-ui/build/static/http-DklRfzP4.js +1 -0
  231. package/web-ui/build/static/http-U94aUtJB.js +1 -0
  232. package/web-ui/build/static/hy-B2ESVqxB.js +1 -0
  233. package/web-ui/build/static/ichigojam-DrVZWL_q.js +1 -0
  234. package/web-ui/build/static/icon-CMA5sxLF.js +1 -0
  235. package/web-ui/build/static/icu-message-format-DyfbEZSi.js +1 -0
  236. package/web-ui/build/static/idris-lCmRODnZ.js +1 -0
  237. package/web-ui/build/static/iecst-CgrrW0EE.js +1 -0
  238. package/web-ui/build/static/ignore-BmZ03AWS.js +1 -0
  239. package/web-ui/build/static/index-CLLrOcOY.js +1 -0
  240. package/web-ui/build/static/index-Ck0Dg4M1.js +13 -0
  241. package/web-ui/build/static/index-DOAQiM34.css +1 -0
  242. package/web-ui/build/static/index-DjtEf-qv.js +1029 -0
  243. package/web-ui/build/static/inform7-BfOnAvVe.js +1 -0
  244. package/web-ui/build/static/inform7-JJIIMXTB.js +1 -0
  245. package/web-ui/build/static/ini-CIKxMbKN.js +1 -0
  246. package/web-ui/build/static/ini-T3DdG5H-.js +1 -0
  247. package/web-ui/build/static/io-K9Gdeq6M.js +1 -0
  248. package/web-ui/build/static/irpf90-BYsCcwwg.js +1 -0
  249. package/web-ui/build/static/isbl-jcjEwPPP.js +1 -0
  250. package/web-ui/build/static/j-DSNUhn5G.js +1 -0
  251. package/web-ui/build/static/java-BKwYwPEk.js +1 -0
  252. package/web-ui/build/static/java-DuZuc1lQ.js +1 -0
  253. package/web-ui/build/static/javadoc-Bd8CYqmj.js +1 -0
  254. package/web-ui/build/static/javadoclike-BcPQURih.js +1 -0
  255. package/web-ui/build/static/javascript-C7B2Ty3f.js +1 -0
  256. package/web-ui/build/static/javastacktrace-BRZBpTgb.js +1 -0
  257. package/web-ui/build/static/jboss-cli-DaXYYeAA.js +1 -0
  258. package/web-ui/build/static/jexl-oN152m0J.js +1 -0
  259. package/web-ui/build/static/jolie-BUWtG9eQ.js +1 -0
  260. package/web-ui/build/static/jq-ooTdhdbC.js +1 -0
  261. package/web-ui/build/static/js-extras-BQJ_tqbC.js +1 -0
  262. package/web-ui/build/static/js-templates-xygrVmsG.js +1 -0
  263. package/web-ui/build/static/jsdoc-BPMuWUGw.js +1 -0
  264. package/web-ui/build/static/json-DbssHgO1.js +1 -0
  265. package/web-ui/build/static/json-iOY4SV10.js +1 -0
  266. package/web-ui/build/static/json5-C_-PZnKE.js +1 -0
  267. package/web-ui/build/static/jsonp-BQakabW1.js +1 -0
  268. package/web-ui/build/static/jsstacktrace-DyDuNLl8.js +1 -0
  269. package/web-ui/build/static/jsx-DCQITdOi.js +1 -0
  270. package/web-ui/build/static/julia-BF0mftpu.js +1 -0
  271. package/web-ui/build/static/julia-TT2Hy-Ob.js +1 -0
  272. package/web-ui/build/static/julia-repl-UBoVaQSD.js +1 -0
  273. package/web-ui/build/static/keepalived-yNkg9KNG.js +1 -0
  274. package/web-ui/build/static/keyman-7ModFC-k.js +1 -0
  275. package/web-ui/build/static/kotlin-BjJgl7UF.js +1 -0
  276. package/web-ui/build/static/kotlin-GEW2sNY3.js +1 -0
  277. package/web-ui/build/static/kumir-CeWMdLSX.js +1 -0
  278. package/web-ui/build/static/kusto-NufgjlVz.js +1 -0
  279. package/web-ui/build/static/lasso-eUS0tR3e.js +1 -0
  280. package/web-ui/build/static/latex-C7prlA6j.js +1 -0
  281. package/web-ui/build/static/latex-Hx35xemv.js +1 -0
  282. package/web-ui/build/static/latte-Da8RAWgh.js +1 -0
  283. package/web-ui/build/static/ldif-DZVoiKm3.js +1 -0
  284. package/web-ui/build/static/leaf-OEtu9dZj.js +1 -0
  285. package/web-ui/build/static/less-0VwiOSeL.js +1 -0
  286. package/web-ui/build/static/less-CciyvbHx.js +1 -0
  287. package/web-ui/build/static/lilypond-blLDi6bC.js +1 -0
  288. package/web-ui/build/static/liquid-C8_7pWOo.js +1 -0
  289. package/web-ui/build/static/lisp-Dd28CPVg.js +1 -0
  290. package/web-ui/build/static/lisp-hWkYuWd0.js +1 -0
  291. package/web-ui/build/static/livecodeserver-7_v3dVy3.js +1 -0
  292. package/web-ui/build/static/livescript-B8YdZ4uV.js +1 -0
  293. package/web-ui/build/static/livescript-dLNrctPK.js +1 -0
  294. package/web-ui/build/static/llvm-BfTyXy_G.js +1 -0
  295. package/web-ui/build/static/llvm-CLvUvWLu.js +1 -0
  296. package/web-ui/build/static/log-DbsxiU9k.js +1 -0
  297. package/web-ui/build/static/lolcode-CfacgPRH.js +1 -0
  298. package/web-ui/build/static/lsl-nJWe_8hA.js +1 -0
  299. package/web-ui/build/static/lua-BzXX-n4X.js +1 -0
  300. package/web-ui/build/static/lua-Ds6K-rhW.js +1 -0
  301. package/web-ui/build/static/magma-U4RmSh9f.js +1 -0
  302. package/web-ui/build/static/makefile-CSCW5rGm.js +1 -0
  303. package/web-ui/build/static/makefile-kzE_oEn3.js +1 -0
  304. package/web-ui/build/static/markdown-CalHH_DC.js +1 -0
  305. package/web-ui/build/static/markdown-Cqr_u0Ad.js +1 -0
  306. package/web-ui/build/static/markup-templating-BTOI73DQ.js +1 -0
  307. package/web-ui/build/static/mathematica-NX1KG9I0.js +1 -0
  308. package/web-ui/build/static/matlab-BAn1HwNV.js +1 -0
  309. package/web-ui/build/static/matlab-Bdg2LWPm.js +1 -0
  310. package/web-ui/build/static/maxima-DjRYVgK8.js +1 -0
  311. package/web-ui/build/static/maxscript-xwiWU5-Z.js +1 -0
  312. package/web-ui/build/static/mel-BgwB0sDS.js +1 -0
  313. package/web-ui/build/static/mel-CIouMI9e.js +1 -0
  314. package/web-ui/build/static/mercury-Do8hrPEb.js +1 -0
  315. package/web-ui/build/static/mermaid-BGEw9Ybx.js +1 -0
  316. package/web-ui/build/static/mipsasm-BDqQqoDE.js +1 -0
  317. package/web-ui/build/static/mizar-7lZfUsYd.js +1 -0
  318. package/web-ui/build/static/mizar-D7O18zEE.js +1 -0
  319. package/web-ui/build/static/mojolicious-DqmJjzUO.js +1 -0
  320. package/web-ui/build/static/mongodb-CXRl7RlT.js +1 -0
  321. package/web-ui/build/static/monkey-DE9L51qk.js +1 -0
  322. package/web-ui/build/static/monkey-DM9WNqkW.js +1 -0
  323. package/web-ui/build/static/moonscript-D8lRTdQE.js +1 -0
  324. package/web-ui/build/static/moonscript-DFEVxKjh.js +1 -0
  325. package/web-ui/build/static/n1ql-B3BB__pa.js +1 -0
  326. package/web-ui/build/static/n1ql-Br4OECGn.js +1 -0
  327. package/web-ui/build/static/n4js-BPNwKp4U.js +1 -0
  328. package/web-ui/build/static/nand2tetris-hdl-BrjXXFUn.js +1 -0
  329. package/web-ui/build/static/naniscript-COGKQbvR.js +1 -0
  330. package/web-ui/build/static/nasm-BHOt34Wi.js +1 -0
  331. package/web-ui/build/static/neon-CYjyYixT.js +1 -0
  332. package/web-ui/build/static/nevod-CILFZbPW.js +1 -0
  333. package/web-ui/build/static/nginx-B7B9La6b.js +1 -0
  334. package/web-ui/build/static/nginx-Dcs1btfu.js +1 -0
  335. package/web-ui/build/static/nim-B39Qq_sB.js +1 -0
  336. package/web-ui/build/static/nim-Cm0o-zEI.js +1 -0
  337. package/web-ui/build/static/nix-Bb4CX-fQ.js +1 -0
  338. package/web-ui/build/static/nix-C3bIutdy.js +1 -0
  339. package/web-ui/build/static/node-repl-BtbNtavi.js +1 -0
  340. package/web-ui/build/static/nsis-CJpMkpQy.js +1 -0
  341. package/web-ui/build/static/nsis-h39nQk_L.js +1 -0
  342. package/web-ui/build/static/objectivec-BIV3Kmu2.js +1 -0
  343. package/web-ui/build/static/objectivec-CNhpMYiK.js +1 -0
  344. package/web-ui/build/static/ocaml-Ld6KARDY.js +1 -0
  345. package/web-ui/build/static/ocaml-upCImTLO.js +1 -0
  346. package/web-ui/build/static/opencl-CfWJp1hT.js +1 -0
  347. package/web-ui/build/static/openqasm-i8xT4CAo.js +1 -0
  348. package/web-ui/build/static/openscad-CzWxpIx6.js +1 -0
  349. package/web-ui/build/static/oxygene-CCokKj_U.js +1 -0
  350. package/web-ui/build/static/oz-BBdHXCgw.js +1 -0
  351. package/web-ui/build/static/parigp-C6n5F4KO.js +1 -0
  352. package/web-ui/build/static/parser-C2RrTYYO.js +1 -0
  353. package/web-ui/build/static/parser3-BaAVXypg.js +1 -0
  354. package/web-ui/build/static/pascal-UeXMBbP2.js +1 -0
  355. package/web-ui/build/static/pascaligo-CYD4ZqHc.js +1 -0
  356. package/web-ui/build/static/pcaxis-CuN2yCzi.js +1 -0
  357. package/web-ui/build/static/peoplecode-H1Adh-ll.js +1 -0
  358. package/web-ui/build/static/perl-DCyTMUn2.js +1 -0
  359. package/web-ui/build/static/perl-V4mDd6YP.js +1 -0
  360. package/web-ui/build/static/pf-5iH6Mo1D.js +1 -0
  361. package/web-ui/build/static/pgsql-CrmNuytU.js +1 -0
  362. package/web-ui/build/static/php-AWteRwUZ.js +1 -0
  363. package/web-ui/build/static/php-B-dr82M2.js +1 -0
  364. package/web-ui/build/static/php-extras-CVQI7yIC.js +1 -0
  365. package/web-ui/build/static/php-template-BW_DclRa.js +1 -0
  366. package/web-ui/build/static/phpdoc-Cfv3EM5F.js +1 -0
  367. package/web-ui/build/static/plaintext-CyfmYRWM.js +1 -0
  368. package/web-ui/build/static/plsql-DIfiFLDw.js +1 -0
  369. package/web-ui/build/static/pony-DjBwB1l2.js +1 -0
  370. package/web-ui/build/static/powerquery-D80luSMu.js +1 -0
  371. package/web-ui/build/static/powershell-Cai1oPSE.js +1 -0
  372. package/web-ui/build/static/powershell-qk5MHehm.js +1 -0
  373. package/web-ui/build/static/processing-DGNtNe05.js +1 -0
  374. package/web-ui/build/static/processing-DHK3kwAe.js +1 -0
  375. package/web-ui/build/static/profile-D6MBLt-p.js +1 -0
  376. package/web-ui/build/static/prolog-CqKHjX9T.js +1 -0
  377. package/web-ui/build/static/prolog-CwAlj8yp.js +1 -0
  378. package/web-ui/build/static/promql-Cwo7B1q9.js +1 -0
  379. package/web-ui/build/static/properties-03DbKSuC.js +1 -0
  380. package/web-ui/build/static/properties-BlFjiqSF.js +1 -0
  381. package/web-ui/build/static/protobuf-DFZRRGno.js +1 -0
  382. package/web-ui/build/static/protobuf-D_GKOSo6.js +1 -0
  383. package/web-ui/build/static/psl-RSBmgd7b.js +1 -0
  384. package/web-ui/build/static/pug-DzBjT8h1.js +1 -0
  385. package/web-ui/build/static/puppet-BwyNySh7.js +1 -0
  386. package/web-ui/build/static/puppet-CHJRn6Na.js +1 -0
  387. package/web-ui/build/static/pure-XbBeN0U7.js +1 -0
  388. package/web-ui/build/static/purebasic-BeRgP1y5.js +1 -0
  389. package/web-ui/build/static/purebasic-XGD8k1X_.js +1 -0
  390. package/web-ui/build/static/purescript-DPej8C9k.js +1 -0
  391. package/web-ui/build/static/python-DK4CPbFS.js +1 -0
  392. package/web-ui/build/static/python-repl-BDrlZxhA.js +1 -0
  393. package/web-ui/build/static/python-sRExKvGw.js +1 -0
  394. package/web-ui/build/static/q-B8K1uEtE.js +1 -0
  395. package/web-ui/build/static/q-iptUl3TG.js +1 -0
  396. package/web-ui/build/static/qml-Ck-8E28D.js +1 -0
  397. package/web-ui/build/static/qml-DapR8Kud.js +1 -0
  398. package/web-ui/build/static/qore-Bq2u6ALt.js +1 -0
  399. package/web-ui/build/static/qsharp-C9FGwAhI.js +1 -0
  400. package/web-ui/build/static/r-B8PZ1lyW.js +1 -0
  401. package/web-ui/build/static/r-jsXxivRe.js +1 -0
  402. package/web-ui/build/static/racket-BW1YY6oG.js +1 -0
  403. package/web-ui/build/static/reason-CGrwEH7Y.js +1 -0
  404. package/web-ui/build/static/reasonml-D2S9u5tv.js +1 -0
  405. package/web-ui/build/static/regex-Bx_rkaF-.js +1 -0
  406. package/web-ui/build/static/rego-DYSQb1aU.js +1 -0
  407. package/web-ui/build/static/renpy-DoEOEpqT.js +1 -0
  408. package/web-ui/build/static/rest-6xfrLQ1u.js +1 -0
  409. package/web-ui/build/static/rib-BH2XAOdJ.js +1 -0
  410. package/web-ui/build/static/rip-BOcHDByA.js +1 -0
  411. package/web-ui/build/static/roboconf-8nB4fpob.js +1 -0
  412. package/web-ui/build/static/roboconf-BjKYzQ_Z.js +1 -0
  413. package/web-ui/build/static/robotframework-BIAT2wY6.js +1 -0
  414. package/web-ui/build/static/routeros-Bt6cTmB2.js +1 -0
  415. package/web-ui/build/static/rsl-XvWWVxz_.js +1 -0
  416. package/web-ui/build/static/ruby-CEfc9tVA.js +1 -0
  417. package/web-ui/build/static/ruby-CKNSKxB1.js +1 -0
  418. package/web-ui/build/static/ruleslanguage-tpn62qMj.js +1 -0
  419. package/web-ui/build/static/rust-Cb-H3ah6.js +1 -0
  420. package/web-ui/build/static/rust-CmAiRDXU.js +1 -0
  421. package/web-ui/build/static/sas-6JRKVKN4.js +1 -0
  422. package/web-ui/build/static/sas-BnSXGxyB.js +1 -0
  423. package/web-ui/build/static/sass-RPp8p1Ef.js +1 -0
  424. package/web-ui/build/static/scala-BjZ--04s.js +1 -0
  425. package/web-ui/build/static/scala-CbHbqC82.js +1 -0
  426. package/web-ui/build/static/scheme-51taSudc.js +1 -0
  427. package/web-ui/build/static/scheme-FF2J1d7z.js +1 -0
  428. package/web-ui/build/static/scilab-CSU1i7r7.js +1 -0
  429. package/web-ui/build/static/scss-Bf9-1Rwp.js +1 -0
  430. package/web-ui/build/static/scss-kWs2GBCV.js +1 -0
  431. package/web-ui/build/static/shell-B6aH0_VB.js +1 -0
  432. package/web-ui/build/static/shell-session-42tFBoqK.js +1 -0
  433. package/web-ui/build/static/smali-BTC2VGoh.js +1 -0
  434. package/web-ui/build/static/smali-CFCAUthF.js +1 -0
  435. package/web-ui/build/static/smalltalk-C4Z4p5Ld.js +1 -0
  436. package/web-ui/build/static/smalltalk-DS9teHSb.js +1 -0
  437. package/web-ui/build/static/smarty-9tLXgYFw.js +1 -0
  438. package/web-ui/build/static/sml-CvQCOzHl.js +1 -0
  439. package/web-ui/build/static/sml-D7VN7gLP.js +1 -0
  440. package/web-ui/build/static/solidity-C8mgaeFG.js +1 -0
  441. package/web-ui/build/static/solution-file-BW6eSi9-.js +1 -0
  442. package/web-ui/build/static/soy-iYu8WojY.js +1 -0
  443. package/web-ui/build/static/sparql-fr7u_sdF.js +1 -0
  444. package/web-ui/build/static/splunk-spl-C1ELr7BN.js +1 -0
  445. package/web-ui/build/static/sqf-8e9uVb30.js +1 -0
  446. package/web-ui/build/static/sqf-CWavw2F4.js +1 -0
  447. package/web-ui/build/static/sql-DC_QvrP2.js +1 -0
  448. package/web-ui/build/static/sql-yLctL19P.js +1 -0
  449. package/web-ui/build/static/sql_more-KfXMatfe.js +1 -0
  450. package/web-ui/build/static/squirrel-Bjd69daG.js +1 -0
  451. package/web-ui/build/static/stan-CaplZnB-.js +1 -0
  452. package/web-ui/build/static/stan-UYitmAjw.js +1 -0
  453. package/web-ui/build/static/stata-Beng42ZG.js +1 -0
  454. package/web-ui/build/static/step21-jqm1hcSr.js +1 -0
  455. package/web-ui/build/static/stylus-DB7RdP7s.js +1 -0
  456. package/web-ui/build/static/stylus-IFC9sMcH.js +1 -0
  457. package/web-ui/build/static/subunit-B75tNAV5.js +1 -0
  458. package/web-ui/build/static/swift-BRcicKMn.js +1 -0
  459. package/web-ui/build/static/swift-s8OoLWy_.js +1 -0
  460. package/web-ui/build/static/systemd-BC7VQvFw.js +1 -0
  461. package/web-ui/build/static/t4-cs-C6aVcIEq.js +1 -0
  462. package/web-ui/build/static/t4-templating-cVFAPDZQ.js +1 -0
  463. package/web-ui/build/static/t4-vb-DwpqTEJL.js +1 -0
  464. package/web-ui/build/static/taggerscript-GaB8ayWT.js +1 -0
  465. package/web-ui/build/static/tap-DN_-tQNk.js +1 -0
  466. package/web-ui/build/static/tap-XgwFSVSK.js +1 -0
  467. package/web-ui/build/static/tcl-D6eT7YQe.js +1 -0
  468. package/web-ui/build/static/tcl-DiEmh3pJ.js +1 -0
  469. package/web-ui/build/static/textile-cNMT-4v2.js +1 -0
  470. package/web-ui/build/static/thrift-DTgTgcBm.js +1 -0
  471. package/web-ui/build/static/toml-B8XPB_4B.js +1 -0
  472. package/web-ui/build/static/tp-NpmS9CLR.js +1 -0
  473. package/web-ui/build/static/tremor-OVZ172ee.js +1 -0
  474. package/web-ui/build/static/tsx-B1xtIV1E.js +1 -0
  475. package/web-ui/build/static/tt2-DITHT_e6.js +1 -0
  476. package/web-ui/build/static/turtle-D3IrO7qu.js +1 -0
  477. package/web-ui/build/static/twig-Bwmu1-US.js +1 -0
  478. package/web-ui/build/static/twig-CmWIdHrv.js +1 -0
  479. package/web-ui/build/static/typescript-BI4GgjOm.js +1 -0
  480. package/web-ui/build/static/typescript-D6hycyND.js +1 -0
  481. package/web-ui/build/static/typoscript-5S0Q3h4I.js +1 -0
  482. package/web-ui/build/static/unrealscript-CaROCOEp.js +1 -0
  483. package/web-ui/build/static/uorazor-VyIQ6lvW.js +1 -0
  484. package/web-ui/build/static/uri-DDdjLj4-.js +1 -0
  485. package/web-ui/build/static/v-CzPHqjdM.js +1 -0
  486. package/web-ui/build/static/vala-CRK3Oxn2.js +1 -0
  487. package/web-ui/build/static/vala-DTG5j_IY.js +1 -0
  488. package/web-ui/build/static/vbnet-C6z8S410.js +1 -0
  489. package/web-ui/build/static/vbnet-cWNTX8Og.js +1 -0
  490. package/web-ui/build/static/vbscript-CyA_PhGn.js +1 -0
  491. package/web-ui/build/static/vbscript-html-CidnweeC.js +1 -0
  492. package/web-ui/build/static/velocity-Dp6ZU1nS.js +1 -0
  493. package/web-ui/build/static/verilog-CilE-jD9.js +1 -0
  494. package/web-ui/build/static/verilog-RAde9Uda.js +1 -0
  495. package/web-ui/build/static/vhdl-CHS4lDo8.js +1 -0
  496. package/web-ui/build/static/vhdl-D5o9ErDa.js +1 -0
  497. package/web-ui/build/static/vim-B8jwaGJ6.js +1 -0
  498. package/web-ui/build/static/vim-BZrCpxwn.js +1 -0
  499. package/web-ui/build/static/visual-basic-By6WIP3n.js +1 -0
  500. package/web-ui/build/static/warpscript-BQF8R5WL.js +1 -0
  501. package/web-ui/build/static/wasm-DJyk23np.js +1 -0
  502. package/web-ui/build/static/web-idl-DezqVYtV.js +1 -0
  503. package/web-ui/build/static/wiki-CiJcHWqV.js +1 -0
  504. package/web-ui/build/static/wolfram-DjwPz6pa.js +1 -0
  505. package/web-ui/build/static/wren-lzb3aV3F.js +1 -0
  506. package/web-ui/build/static/x86asm-CCNfO4dU.js +1 -0
  507. package/web-ui/build/static/xeora-CRaNjAb0.js +1 -0
  508. package/web-ui/build/static/xl-CRqWPyuc.js +1 -0
  509. package/web-ui/build/static/xml-Uuta5J77.js +1 -0
  510. package/web-ui/build/static/xml-doc-Drc3ho9Y.js +1 -0
  511. package/web-ui/build/static/xojo-D2WT5Q0J.js +1 -0
  512. package/web-ui/build/static/xquery-CwB9Zxcf.js +1 -0
  513. package/web-ui/build/static/xquery-DA5NuZxN.js +1 -0
  514. package/web-ui/build/static/yaml-DJMpA9ia.js +1 -0
  515. package/web-ui/build/static/yaml-DxiY0s1_.js +1 -0
  516. package/web-ui/build/static/yang-DPrwGYlZ.js +1 -0
  517. package/web-ui/build/static/zephir-DOfPWp4I.js +1 -0
  518. package/web-ui/build/static/zig-BE1mX447.js +1 -0
  519. package/web-ui/build/static/1c-C_9olPfq.js +0 -1
  520. package/web-ui/build/static/abap--DeFI1OC.js +0 -1
  521. package/web-ui/build/static/abnf-5HzSmxRy.js +0 -1
  522. package/web-ui/build/static/abnf-IG-O3NHT.js +0 -1
  523. package/web-ui/build/static/accesslog-qO_3I5IJ.js +0 -1
  524. package/web-ui/build/static/actionscript-DbFc2Uxo.js +0 -1
  525. package/web-ui/build/static/actionscript-jU7xUh7w.js +0 -1
  526. package/web-ui/build/static/ada-DBOzyNDe.js +0 -1
  527. package/web-ui/build/static/ada-F0QwXh2e.js +0 -1
  528. package/web-ui/build/static/agda-Drhr_GYC.js +0 -1
  529. package/web-ui/build/static/al-bEatcrqU.js +0 -1
  530. package/web-ui/build/static/angelscript-Bp0mqasc.js +0 -1
  531. package/web-ui/build/static/antlr4-BCvixOqW.js +0 -1
  532. package/web-ui/build/static/apache-zSeWcGFf.js +0 -1
  533. package/web-ui/build/static/apacheconf-CEDX0qIZ.js +0 -1
  534. package/web-ui/build/static/apex-BHlvjPxZ.js +0 -1
  535. package/web-ui/build/static/apl-S86eLVnh.js +0 -1
  536. package/web-ui/build/static/applescript-D15JiHTt.js +0 -1
  537. package/web-ui/build/static/applescript-D6g2nIGs.js +0 -1
  538. package/web-ui/build/static/aql-C4SWmhk2.js +0 -1
  539. package/web-ui/build/static/arcade-DrwRCCCh.js +0 -1
  540. package/web-ui/build/static/arduino-Blsw4-hb.js +0 -1
  541. package/web-ui/build/static/arduino-s6CYn6L3.js +0 -1
  542. package/web-ui/build/static/arff-DnrfdsTx.js +0 -1
  543. package/web-ui/build/static/armasm-C2WK9q2y.js +0 -1
  544. package/web-ui/build/static/asciidoc-BiY2pDol.js +0 -1
  545. package/web-ui/build/static/asciidoc-DG128-Q1.js +0 -1
  546. package/web-ui/build/static/asm6502-BEAW0Cck.js +0 -1
  547. package/web-ui/build/static/asmatmel-C4v7boSu.js +0 -1
  548. package/web-ui/build/static/aspectj-Bfek529B.js +0 -1
  549. package/web-ui/build/static/aspnet-8K2PeLn2.js +0 -1
  550. package/web-ui/build/static/autohotkey-BHw78HYu.js +0 -1
  551. package/web-ui/build/static/autohotkey-C5DDQtDL.js +0 -1
  552. package/web-ui/build/static/autoit-CgsSmQkF.js +0 -1
  553. package/web-ui/build/static/autoit-DZ7IS_9i.js +0 -1
  554. package/web-ui/build/static/avisynth-B20WuEUg.js +0 -1
  555. package/web-ui/build/static/avrasm-C7TrcWBg.js +0 -1
  556. package/web-ui/build/static/avro-idl-CfDy8XWE.js +0 -1
  557. package/web-ui/build/static/awk-cjY-7p5o.js +0 -1
  558. package/web-ui/build/static/axapta-Bu9INQG2.js +0 -1
  559. package/web-ui/build/static/bash-B998wxy_.js +0 -1
  560. package/web-ui/build/static/bash-LE6roX2s.js +0 -1
  561. package/web-ui/build/static/basic-Cd6-vDdH.js +0 -1
  562. package/web-ui/build/static/basic-mfY-ovnp.js +0 -1
  563. package/web-ui/build/static/batch-DxVy2cwv.js +0 -1
  564. package/web-ui/build/static/bbcode-Ct3Yu8De.js +0 -1
  565. package/web-ui/build/static/bicep-CexPoMEW.js +0 -1
  566. package/web-ui/build/static/birb-CH1RMpPI.js +0 -1
  567. package/web-ui/build/static/bison-XQFuPB_Q.js +0 -1
  568. package/web-ui/build/static/bnf-CIDGmY3l.js +0 -1
  569. package/web-ui/build/static/bnf-DjN_FU2s.js +0 -1
  570. package/web-ui/build/static/brainfuck-Cu_hvayi.js +0 -1
  571. package/web-ui/build/static/brainfuck-eRbe4_qo.js +0 -1
  572. package/web-ui/build/static/brightscript-Cdq0ttTN.js +0 -1
  573. package/web-ui/build/static/bro-D3aio8LS.js +0 -1
  574. package/web-ui/build/static/bsl-DFEwVZ2J.js +0 -1
  575. package/web-ui/build/static/c-D6RK1vhn.js +0 -1
  576. package/web-ui/build/static/c-DUcBA02q.js +0 -1
  577. package/web-ui/build/static/c-like-BApJDFwD.js +0 -1
  578. package/web-ui/build/static/cal-Ckv8Qnpw.js +0 -1
  579. package/web-ui/build/static/capnproto-DCoblEyS.js +0 -1
  580. package/web-ui/build/static/ceylon-DM-zZDWY.js +0 -1
  581. package/web-ui/build/static/cfscript-CMoOAgUK.js +0 -1
  582. package/web-ui/build/static/chaiscript-B3Vl3wGb.js +0 -1
  583. package/web-ui/build/static/cil-ChEi_uFO.js +0 -1
  584. package/web-ui/build/static/clean-BtA08oDV.js +0 -1
  585. package/web-ui/build/static/clojure-CWMlf7lJ.js +0 -1
  586. package/web-ui/build/static/clojure-Vur8C4jr.js +0 -1
  587. package/web-ui/build/static/clojure-repl-BsfGHdYy.js +0 -1
  588. package/web-ui/build/static/cmake-Csgl_IVr.js +0 -1
  589. package/web-ui/build/static/cmake-DFMKvwxy.js +0 -1
  590. package/web-ui/build/static/cobol-XhlGrCrW.js +0 -1
  591. package/web-ui/build/static/coffeescript-DYldGW35.js +0 -1
  592. package/web-ui/build/static/coffeescript-DvbNKwrC.js +0 -1
  593. package/web-ui/build/static/concurnas-DjALqCYn.js +0 -1
  594. package/web-ui/build/static/coq-D9QGJI6g.js +0 -1
  595. package/web-ui/build/static/coq-fAZpoc7i.js +0 -1
  596. package/web-ui/build/static/cos-GgM7WWVZ.js +0 -1
  597. package/web-ui/build/static/cpp-Cgt5qqfd.js +0 -1
  598. package/web-ui/build/static/cpp-DxVcOuBe.js +0 -1
  599. package/web-ui/build/static/crmsh-BlZWnzbY.js +0 -1
  600. package/web-ui/build/static/crystal--H7HLAQf.js +0 -1
  601. package/web-ui/build/static/crystal-DWm0bbUT.js +0 -1
  602. package/web-ui/build/static/csharp-8dr-wktE.js +0 -1
  603. package/web-ui/build/static/csharp-DFuHLPFe.js +0 -1
  604. package/web-ui/build/static/cshtml-C-L4_dy2.js +0 -1
  605. package/web-ui/build/static/csp-CJ6qbecO.js +0 -1
  606. package/web-ui/build/static/csp-DswTy-5u.js +0 -1
  607. package/web-ui/build/static/css-DdRPdKXQ.js +0 -1
  608. package/web-ui/build/static/css-extras-DMwOZFrB.js +0 -1
  609. package/web-ui/build/static/csv-BiWlhIMC.js +0 -1
  610. package/web-ui/build/static/cypher-ByNaJKO8.js +0 -1
  611. package/web-ui/build/static/d-BR89VlK-.js +0 -1
  612. package/web-ui/build/static/d-KlWvBc4w.js +0 -1
  613. package/web-ui/build/static/dart-BIsk7m6o.js +0 -1
  614. package/web-ui/build/static/dart-BnyP1Rjp.js +0 -1
  615. package/web-ui/build/static/dataweave-CH_Q2gWX.js +0 -1
  616. package/web-ui/build/static/dax-wulX9uc-.js +0 -1
  617. package/web-ui/build/static/delphi-CFowdk_A.js +0 -1
  618. package/web-ui/build/static/dhall-BfCOemEp.js +0 -1
  619. package/web-ui/build/static/diff-DQD2zPaG.js +0 -1
  620. package/web-ui/build/static/diff-DZoEdrYM.js +0 -1
  621. package/web-ui/build/static/django-B0j973Kw.js +0 -1
  622. package/web-ui/build/static/django-CYScL320.js +0 -1
  623. package/web-ui/build/static/dns-DoECkAgz.js +0 -1
  624. package/web-ui/build/static/dns-zone-file-CuoIcXgj.js +0 -1
  625. package/web-ui/build/static/docker-C2nfXTBG.js +0 -1
  626. package/web-ui/build/static/dockerfile-DBalxIH7.js +0 -1
  627. package/web-ui/build/static/dos-GNL9IdmL.js +0 -1
  628. package/web-ui/build/static/dot-rKuRS-PS.js +0 -1
  629. package/web-ui/build/static/dsconfig-CKmenTFr.js +0 -1
  630. package/web-ui/build/static/dts-AxT2qjQU.js +0 -1
  631. package/web-ui/build/static/dust-DpqHWPC4.js +0 -1
  632. package/web-ui/build/static/ebnf-CONEMpLp.js +0 -1
  633. package/web-ui/build/static/ebnf-DRWcOs8R.js +0 -1
  634. package/web-ui/build/static/editorconfig-lmLHmECZ.js +0 -1
  635. package/web-ui/build/static/eiffel-B39e31fw.js +0 -1
  636. package/web-ui/build/static/ejs-DtJwpVdo.js +0 -1
  637. package/web-ui/build/static/elixir-BH4JTqa9.js +0 -1
  638. package/web-ui/build/static/elixir-aH1DLjYD.js +0 -1
  639. package/web-ui/build/static/elm-BcCGkSrW.js +0 -1
  640. package/web-ui/build/static/elm-CCrB1JbX.js +0 -1
  641. package/web-ui/build/static/erb-CcumI1K3.js +0 -1
  642. package/web-ui/build/static/erb-_HK77hx-.js +0 -1
  643. package/web-ui/build/static/erlang-B1qxMZZp.js +0 -1
  644. package/web-ui/build/static/erlang-CCM_ejO_.js +0 -1
  645. package/web-ui/build/static/erlang-repl-D1zC2Zf6.js +0 -1
  646. package/web-ui/build/static/etlua-HJMRx9x7.js +0 -1
  647. package/web-ui/build/static/excel-DqXCKUKa.js +0 -1
  648. package/web-ui/build/static/excel-formula-oNw1T5Gi.js +0 -1
  649. package/web-ui/build/static/factor-BrTp5FZH.js +0 -1
  650. package/web-ui/build/static/false-CAVqV3ok.js +0 -1
  651. package/web-ui/build/static/firestore-security-rules-CxTofGT0.js +0 -1
  652. package/web-ui/build/static/fix-BMooo7-3.js +0 -1
  653. package/web-ui/build/static/flix-DR5Pi_4n.js +0 -1
  654. package/web-ui/build/static/flow-BoCWpUCW.js +0 -1
  655. package/web-ui/build/static/fortran-B9JI5ahV.js +0 -1
  656. package/web-ui/build/static/fortran-LXg81aOn.js +0 -1
  657. package/web-ui/build/static/fsharp-BqcGG-SM.js +0 -1
  658. package/web-ui/build/static/fsharp-Dj5YVL_h.js +0 -1
  659. package/web-ui/build/static/ftl-kuY7uFR8.js +0 -1
  660. package/web-ui/build/static/gams-CzihHKqE.js +0 -1
  661. package/web-ui/build/static/gap-BbS0A-Wl.js +0 -1
  662. package/web-ui/build/static/gauss-BauwG_O4.js +0 -1
  663. package/web-ui/build/static/gcode-VY1OKBcC.js +0 -1
  664. package/web-ui/build/static/gcode-lapsLgV5.js +0 -1
  665. package/web-ui/build/static/gdscript-1UIYB8m0.js +0 -1
  666. package/web-ui/build/static/gedcom-Bhrxt1LM.js +0 -1
  667. package/web-ui/build/static/gherkin-BsUD3vJB.js +0 -1
  668. package/web-ui/build/static/gherkin-hj_asmFX.js +0 -1
  669. package/web-ui/build/static/git-DXIrRKzR.js +0 -1
  670. package/web-ui/build/static/glsl-Bww3i9-P.js +0 -1
  671. package/web-ui/build/static/glsl-tW4hvcaQ.js +0 -1
  672. package/web-ui/build/static/gml-BIqshajA.js +0 -1
  673. package/web-ui/build/static/gml-CQqc9F-B.js +0 -1
  674. package/web-ui/build/static/gn-CBgpy8B9.js +0 -1
  675. package/web-ui/build/static/go-CEUAUIgn.js +0 -1
  676. package/web-ui/build/static/go-DPEd33Yn.js +0 -1
  677. package/web-ui/build/static/go-module-BVPbZOg5.js +0 -1
  678. package/web-ui/build/static/golo-CqB3OATq.js +0 -1
  679. package/web-ui/build/static/gradle-Djj_6FTv.js +0 -1
  680. package/web-ui/build/static/graphql-ymSYYmmE.js +0 -1
  681. package/web-ui/build/static/groovy-BLoXi1Ew.js +0 -1
  682. package/web-ui/build/static/groovy-D8ua3DVO.js +0 -1
  683. package/web-ui/build/static/haml-DKlxHs26.js +0 -1
  684. package/web-ui/build/static/haml-S_iUNysn.js +0 -1
  685. package/web-ui/build/static/handlebars-B7tcAMGB.js +0 -1
  686. package/web-ui/build/static/handlebars-CV-zB05N.js +0 -1
  687. package/web-ui/build/static/haskell-CMxCwdZX.js +0 -1
  688. package/web-ui/build/static/haskell-Dis6rGJ5.js +0 -1
  689. package/web-ui/build/static/haxe-C76IK5YN.js +0 -1
  690. package/web-ui/build/static/haxe-hbmD2uei.js +0 -1
  691. package/web-ui/build/static/hcl-BPI_t80W.js +0 -1
  692. package/web-ui/build/static/hlsl-BmeH3MXM.js +0 -1
  693. package/web-ui/build/static/hoon-BYLX7KiR.js +0 -1
  694. package/web-ui/build/static/hpkp-CFV1lvIV.js +0 -1
  695. package/web-ui/build/static/hsp-_VXPtQPw.js +0 -1
  696. package/web-ui/build/static/hsts-DzmFog1b.js +0 -1
  697. package/web-ui/build/static/htmlbars-uX8JubPS.js +0 -1
  698. package/web-ui/build/static/http-BTDAHgkv.js +0 -1
  699. package/web-ui/build/static/http-Ba1gTHCW.js +0 -1
  700. package/web-ui/build/static/hy-G7MK4TLb.js +0 -1
  701. package/web-ui/build/static/ichigojam-BKKN56jZ.js +0 -1
  702. package/web-ui/build/static/icon-nrqdEYwB.js +0 -1
  703. package/web-ui/build/static/icu-message-format-Bjone7XH.js +0 -1
  704. package/web-ui/build/static/idris-CKkY_0op.js +0 -1
  705. package/web-ui/build/static/iecst-EV3ZvBDC.js +0 -1
  706. package/web-ui/build/static/ignore-LJIbInke.js +0 -1
  707. package/web-ui/build/static/index-C1x426Pt.js +0 -734
  708. package/web-ui/build/static/index-CTzeYMwr.js +0 -13
  709. package/web-ui/build/static/index-CUBjz1OL.css +0 -1
  710. package/web-ui/build/static/index-DnVIkRiR.js +0 -1
  711. package/web-ui/build/static/inform7-BiW6HbUl.js +0 -1
  712. package/web-ui/build/static/inform7-DT-x6SRD.js +0 -1
  713. package/web-ui/build/static/ini-BbnHjAtW.js +0 -1
  714. package/web-ui/build/static/ini-DuNY7Iqz.js +0 -1
  715. package/web-ui/build/static/io-BquAtlCB.js +0 -1
  716. package/web-ui/build/static/irpf90-CZELNeJl.js +0 -1
  717. package/web-ui/build/static/isbl-DhOgOzai.js +0 -1
  718. package/web-ui/build/static/j-r8D3BrBj.js +0 -1
  719. package/web-ui/build/static/java-MjQ5EBN5.js +0 -1
  720. package/web-ui/build/static/java-c3Jyc0B6.js +0 -1
  721. package/web-ui/build/static/javadoc-CfNFziRD.js +0 -1
  722. package/web-ui/build/static/javadoclike-BUcJZQAh.js +0 -1
  723. package/web-ui/build/static/javascript-CL_4g6j3.js +0 -1
  724. package/web-ui/build/static/javastacktrace-4P_J-58S.js +0 -1
  725. package/web-ui/build/static/jboss-cli-DUfK88hO.js +0 -1
  726. package/web-ui/build/static/jexl-DsSijmcs.js +0 -1
  727. package/web-ui/build/static/jolie-DjtNIZB4.js +0 -1
  728. package/web-ui/build/static/jq-BXdSm79y.js +0 -1
  729. package/web-ui/build/static/js-extras-B-C7ngCD.js +0 -1
  730. package/web-ui/build/static/js-templates-CmPAiwFC.js +0 -1
  731. package/web-ui/build/static/jsdoc-CkiXOOMV.js +0 -1
  732. package/web-ui/build/static/json-Bmvhezfj.js +0 -1
  733. package/web-ui/build/static/json-HPR8wBiw.js +0 -1
  734. package/web-ui/build/static/json5-Chcg9nnQ.js +0 -1
  735. package/web-ui/build/static/jsonp-C3KWcfzJ.js +0 -1
  736. package/web-ui/build/static/jsstacktrace-D1jRFy-S.js +0 -1
  737. package/web-ui/build/static/jsx-COtCqQ_9.js +0 -1
  738. package/web-ui/build/static/julia-BVvfw2TB.js +0 -1
  739. package/web-ui/build/static/julia-Ddalvdoa.js +0 -1
  740. package/web-ui/build/static/julia-repl-Bc-uwnIZ.js +0 -1
  741. package/web-ui/build/static/keepalived-CJ9ZYuQx.js +0 -1
  742. package/web-ui/build/static/keyman-BHea-dB6.js +0 -1
  743. package/web-ui/build/static/kotlin-DWOyCb_2.js +0 -1
  744. package/web-ui/build/static/kotlin-fvMiFIS3.js +0 -1
  745. package/web-ui/build/static/kumir-DaNls7gN.js +0 -1
  746. package/web-ui/build/static/kusto-DKweJuKl.js +0 -1
  747. package/web-ui/build/static/lasso-BB9dUrv_.js +0 -1
  748. package/web-ui/build/static/latex-C7U5RUQQ.js +0 -1
  749. package/web-ui/build/static/latex-CXM3EEy0.js +0 -1
  750. package/web-ui/build/static/latte-B4pEA635.js +0 -1
  751. package/web-ui/build/static/ldif-D3wYig10.js +0 -1
  752. package/web-ui/build/static/leaf-uFkjT9sR.js +0 -1
  753. package/web-ui/build/static/less-CbUH4jBX.js +0 -1
  754. package/web-ui/build/static/less-DEGyfeZn.js +0 -1
  755. package/web-ui/build/static/lilypond-UuoBjShK.js +0 -1
  756. package/web-ui/build/static/liquid-DB3a9n7S.js +0 -1
  757. package/web-ui/build/static/lisp-BDbj7Kd2.js +0 -1
  758. package/web-ui/build/static/lisp-D3T0YOb1.js +0 -1
  759. package/web-ui/build/static/livecodeserver-CkZMVLmr.js +0 -1
  760. package/web-ui/build/static/livescript-CJbtbTfA.js +0 -1
  761. package/web-ui/build/static/livescript-CdWg1xgf.js +0 -1
  762. package/web-ui/build/static/llvm-8hpjZ6qF.js +0 -1
  763. package/web-ui/build/static/llvm-DPpuma6i.js +0 -1
  764. package/web-ui/build/static/log-DwsLgecp.js +0 -1
  765. package/web-ui/build/static/lolcode-D3tkyiVB.js +0 -1
  766. package/web-ui/build/static/lsl-BBM4ZYza.js +0 -1
  767. package/web-ui/build/static/lua-DT0su8pZ.js +0 -1
  768. package/web-ui/build/static/lua-DqZXmUwn.js +0 -1
  769. package/web-ui/build/static/magma-DGW0-GCr.js +0 -1
  770. package/web-ui/build/static/makefile-C_K7AaVw.js +0 -1
  771. package/web-ui/build/static/makefile-CarddjPJ.js +0 -1
  772. package/web-ui/build/static/markdown-3dq-8I9T.js +0 -1
  773. package/web-ui/build/static/markdown-c4VYoNo2.js +0 -1
  774. package/web-ui/build/static/markup-templating-BBX0gWS5.js +0 -1
  775. package/web-ui/build/static/mathematica-n-aqoCbO.js +0 -1
  776. package/web-ui/build/static/matlab-B_kYC-A2.js +0 -1
  777. package/web-ui/build/static/matlab-CQP2D_0j.js +0 -1
  778. package/web-ui/build/static/maxima-piaAhCcP.js +0 -1
  779. package/web-ui/build/static/maxscript-CkxNZR1a.js +0 -1
  780. package/web-ui/build/static/mel-BXbrV0aU.js +0 -1
  781. package/web-ui/build/static/mel-CBSpVZcl.js +0 -1
  782. package/web-ui/build/static/mercury-CffeC87B.js +0 -1
  783. package/web-ui/build/static/mermaid-DAZcfksM.js +0 -1
  784. package/web-ui/build/static/mipsasm-DvOPoNgz.js +0 -1
  785. package/web-ui/build/static/mizar-C2ki99qc.js +0 -1
  786. package/web-ui/build/static/mizar-C5AXRrsD.js +0 -1
  787. package/web-ui/build/static/mojolicious-DklqV-uP.js +0 -1
  788. package/web-ui/build/static/mongodb-BbuSPlN0.js +0 -1
  789. package/web-ui/build/static/monkey-CJBb2-mV.js +0 -1
  790. package/web-ui/build/static/monkey-DgERCZQd.js +0 -1
  791. package/web-ui/build/static/moonscript-BovBU9jW.js +0 -1
  792. package/web-ui/build/static/moonscript-lPqbcjjy.js +0 -1
  793. package/web-ui/build/static/n1ql-CjVXW0Z0.js +0 -1
  794. package/web-ui/build/static/n1ql-DkfG2dTH.js +0 -1
  795. package/web-ui/build/static/n4js-6L9QW_kw.js +0 -1
  796. package/web-ui/build/static/nand2tetris-hdl-CqohGHfB.js +0 -1
  797. package/web-ui/build/static/naniscript-CIvQ6y1b.js +0 -1
  798. package/web-ui/build/static/nasm-CQbJbZZf.js +0 -1
  799. package/web-ui/build/static/neon-Cz41RJxQ.js +0 -1
  800. package/web-ui/build/static/nevod-WPRJ2Q9j.js +0 -1
  801. package/web-ui/build/static/nginx-BL2wPbD-.js +0 -1
  802. package/web-ui/build/static/nginx-DsqC_gQT.js +0 -1
  803. package/web-ui/build/static/nim-7qnwzYm_.js +0 -1
  804. package/web-ui/build/static/nim-D6iDo5H6.js +0 -1
  805. package/web-ui/build/static/nix-BQSsaH-G.js +0 -1
  806. package/web-ui/build/static/nix-DgwCtjpD.js +0 -1
  807. package/web-ui/build/static/node-repl-Cb4w8DbD.js +0 -1
  808. package/web-ui/build/static/nsis-CiXZWrqR.js +0 -1
  809. package/web-ui/build/static/nsis-CuwGI5px.js +0 -1
  810. package/web-ui/build/static/objectivec-DZXCqQ1J.js +0 -1
  811. package/web-ui/build/static/objectivec-GNGh-wiY.js +0 -1
  812. package/web-ui/build/static/ocaml-BPg_ANkr.js +0 -1
  813. package/web-ui/build/static/ocaml-DRUpaN8p.js +0 -1
  814. package/web-ui/build/static/opencl-CazTs_sf.js +0 -1
  815. package/web-ui/build/static/openqasm-DHuuXGjm.js +0 -1
  816. package/web-ui/build/static/openscad-YbvBFeLc.js +0 -1
  817. package/web-ui/build/static/oxygene-DDzgbCaQ.js +0 -1
  818. package/web-ui/build/static/oz-BRDBLIjx.js +0 -1
  819. package/web-ui/build/static/parigp-BbApdos7.js +0 -1
  820. package/web-ui/build/static/parser-CbVH4ySK.js +0 -1
  821. package/web-ui/build/static/parser3-BIkvuuuE.js +0 -1
  822. package/web-ui/build/static/pascal-oS7U_3sO.js +0 -1
  823. package/web-ui/build/static/pascaligo-57DdFj76.js +0 -1
  824. package/web-ui/build/static/pcaxis-V-Euf0DV.js +0 -1
  825. package/web-ui/build/static/peoplecode-DjyRW5V8.js +0 -1
  826. package/web-ui/build/static/perl-BEQWvjeP.js +0 -1
  827. package/web-ui/build/static/perl-CiDHRorC.js +0 -1
  828. package/web-ui/build/static/pf-S5x_U1LC.js +0 -1
  829. package/web-ui/build/static/pgsql-DwHZC-iy.js +0 -1
  830. package/web-ui/build/static/php-7enmlb-I.js +0 -1
  831. package/web-ui/build/static/php-extras-BhRDMlXE.js +0 -1
  832. package/web-ui/build/static/php-kIwfq-Jj.js +0 -1
  833. package/web-ui/build/static/php-template-M2RrZc1R.js +0 -1
  834. package/web-ui/build/static/phpdoc-HUeiWlkw.js +0 -1
  835. package/web-ui/build/static/plaintext-CPt25ow_.js +0 -1
  836. package/web-ui/build/static/plsql-BvoRAbdz.js +0 -1
  837. package/web-ui/build/static/pony-BVuhxk7D.js +0 -1
  838. package/web-ui/build/static/powerquery-rnRfiL3F.js +0 -1
  839. package/web-ui/build/static/powershell-BQR2-qjF.js +0 -1
  840. package/web-ui/build/static/powershell-S_XnLato.js +0 -1
  841. package/web-ui/build/static/processing-B-8pt1gx.js +0 -1
  842. package/web-ui/build/static/processing-ozS1KPr7.js +0 -1
  843. package/web-ui/build/static/profile-DOjTmxRs.js +0 -1
  844. package/web-ui/build/static/prolog-BaaxuI5L.js +0 -1
  845. package/web-ui/build/static/prolog-D90dFqfr.js +0 -1
  846. package/web-ui/build/static/promql-BuyoLqtl.js +0 -1
  847. package/web-ui/build/static/properties-C0pMastm.js +0 -1
  848. package/web-ui/build/static/properties-k7bXYQao.js +0 -1
  849. package/web-ui/build/static/protobuf-ChaO1q7B.js +0 -1
  850. package/web-ui/build/static/protobuf-DAGxv01T.js +0 -1
  851. package/web-ui/build/static/psl-BpYOLBqn.js +0 -1
  852. package/web-ui/build/static/pug-BUlJA4UD.js +0 -1
  853. package/web-ui/build/static/puppet-8l--PVpO.js +0 -1
  854. package/web-ui/build/static/puppet-BJDN84xr.js +0 -1
  855. package/web-ui/build/static/pure-DhqjQg1a.js +0 -1
  856. package/web-ui/build/static/purebasic-BHnSz9Yh.js +0 -1
  857. package/web-ui/build/static/purebasic-CeiLO2aV.js +0 -1
  858. package/web-ui/build/static/purescript-BaXXPnKS.js +0 -1
  859. package/web-ui/build/static/python-BXdJ4yqN.js +0 -1
  860. package/web-ui/build/static/python-Cef5Vfx2.js +0 -1
  861. package/web-ui/build/static/python-repl-CRpJP363.js +0 -1
  862. package/web-ui/build/static/q-C6Ov0g11.js +0 -1
  863. package/web-ui/build/static/q-D3tQMiHa.js +0 -1
  864. package/web-ui/build/static/qml-BYofTHXZ.js +0 -1
  865. package/web-ui/build/static/qml-DTxi8T37.js +0 -1
  866. package/web-ui/build/static/qore-Ny7MVtbP.js +0 -1
  867. package/web-ui/build/static/qsharp-Cy_rqHs2.js +0 -1
  868. package/web-ui/build/static/r-BtNaz7Jx.js +0 -1
  869. package/web-ui/build/static/r-DkF7wq0g.js +0 -1
  870. package/web-ui/build/static/racket-C5r8oFZa.js +0 -1
  871. package/web-ui/build/static/reason-BURRGL8T.js +0 -1
  872. package/web-ui/build/static/reasonml-ZPKVqo38.js +0 -1
  873. package/web-ui/build/static/regex-DgaaAttu.js +0 -1
  874. package/web-ui/build/static/rego-CtwYq-qp.js +0 -1
  875. package/web-ui/build/static/renpy-OueysuHf.js +0 -1
  876. package/web-ui/build/static/rest-Co13hzuk.js +0 -1
  877. package/web-ui/build/static/rib-CvGWooaO.js +0 -1
  878. package/web-ui/build/static/rip-5glwZfvx.js +0 -1
  879. package/web-ui/build/static/roboconf-B9R_ZXBj.js +0 -1
  880. package/web-ui/build/static/roboconf-Gf0nTNKt.js +0 -1
  881. package/web-ui/build/static/robotframework-C2axWAv1.js +0 -1
  882. package/web-ui/build/static/routeros-CE_Iedbm.js +0 -1
  883. package/web-ui/build/static/rsl-2QjczbcI.js +0 -1
  884. package/web-ui/build/static/ruby-5q7nApRB.js +0 -1
  885. package/web-ui/build/static/ruby-BUTeEeQo.js +0 -1
  886. package/web-ui/build/static/ruleslanguage-vxFl2T6e.js +0 -1
  887. package/web-ui/build/static/rust-BMuquF4q.js +0 -1
  888. package/web-ui/build/static/rust-CcZQo8qE.js +0 -1
  889. package/web-ui/build/static/sas-B3kZio_a.js +0 -1
  890. package/web-ui/build/static/sas-Bbv6Pcs_.js +0 -1
  891. package/web-ui/build/static/sass-C0q0q-U-.js +0 -1
  892. package/web-ui/build/static/scala-B5vW0oUX.js +0 -1
  893. package/web-ui/build/static/scala-CyVnVDED.js +0 -1
  894. package/web-ui/build/static/scheme-C9JOo4R_.js +0 -1
  895. package/web-ui/build/static/scheme-W2233tzx.js +0 -1
  896. package/web-ui/build/static/scilab-D2Bvw6Ov.js +0 -1
  897. package/web-ui/build/static/scss-CTlab4AI.js +0 -1
  898. package/web-ui/build/static/scss-DZ5g2Z9m.js +0 -1
  899. package/web-ui/build/static/shell-bYpiB--U.js +0 -1
  900. package/web-ui/build/static/shell-session-C4jzoNup.js +0 -1
  901. package/web-ui/build/static/smali-9ucoTzDl.js +0 -1
  902. package/web-ui/build/static/smali-BnluPxDD.js +0 -1
  903. package/web-ui/build/static/smalltalk-CAMGWItN.js +0 -1
  904. package/web-ui/build/static/smalltalk-DNxg0Og_.js +0 -1
  905. package/web-ui/build/static/smarty-YxNaCRZt.js +0 -1
  906. package/web-ui/build/static/sml-CZbvurr2.js +0 -1
  907. package/web-ui/build/static/sml-DGs_TRXx.js +0 -1
  908. package/web-ui/build/static/solidity-CEsviKxI.js +0 -1
  909. package/web-ui/build/static/solution-file-D0Yvaoet.js +0 -1
  910. package/web-ui/build/static/soy-BmVAPY7I.js +0 -1
  911. package/web-ui/build/static/sparql-D8d4i2J8.js +0 -1
  912. package/web-ui/build/static/splunk-spl-CcgWj5Im.js +0 -1
  913. package/web-ui/build/static/sqf-Cd4tBlXZ.js +0 -1
  914. package/web-ui/build/static/sqf-DC8e-wlP.js +0 -1
  915. package/web-ui/build/static/sql-D5KtfAwl.js +0 -1
  916. package/web-ui/build/static/sql-DX4iGc5J.js +0 -1
  917. package/web-ui/build/static/sql_more-9ztUFh5U.js +0 -1
  918. package/web-ui/build/static/squirrel-CiVV01fQ.js +0 -1
  919. package/web-ui/build/static/stan-DCrPYtdq.js +0 -1
  920. package/web-ui/build/static/stan-LL9ScTUT.js +0 -1
  921. package/web-ui/build/static/stata-n-r5-RvF.js +0 -1
  922. package/web-ui/build/static/step21-B2hxGG1E.js +0 -1
  923. package/web-ui/build/static/stylus-D-1wq2uN.js +0 -1
  924. package/web-ui/build/static/stylus-Dr-w1AjW.js +0 -1
  925. package/web-ui/build/static/subunit-DRCyiRHI.js +0 -1
  926. package/web-ui/build/static/swift-B2ZIuBjB.js +0 -1
  927. package/web-ui/build/static/swift-CnRpp8ao.js +0 -1
  928. package/web-ui/build/static/systemd-LPN-yj3b.js +0 -1
  929. package/web-ui/build/static/t4-cs-CXJSMlet.js +0 -1
  930. package/web-ui/build/static/t4-templating-Ciw3keAZ.js +0 -1
  931. package/web-ui/build/static/t4-vb-CXe99AWF.js +0 -1
  932. package/web-ui/build/static/taggerscript-Bm830ZwV.js +0 -1
  933. package/web-ui/build/static/tap-B0WwYGVt.js +0 -1
  934. package/web-ui/build/static/tap-Dw_cgj6K.js +0 -1
  935. package/web-ui/build/static/tcl-Di4JhH4s.js +0 -1
  936. package/web-ui/build/static/tcl-cIeBNf2V.js +0 -1
  937. package/web-ui/build/static/textile-DgMdCAz5.js +0 -1
  938. package/web-ui/build/static/thrift-zY2WxYMk.js +0 -1
  939. package/web-ui/build/static/toml-BtXdKizf.js +0 -1
  940. package/web-ui/build/static/tp-DxY0K8UF.js +0 -1
  941. package/web-ui/build/static/tremor-890wqxvH.js +0 -1
  942. package/web-ui/build/static/tsx-92ElsKxL.js +0 -1
  943. package/web-ui/build/static/tt2-DqcvjDKh.js +0 -1
  944. package/web-ui/build/static/turtle-BZikMsiD.js +0 -1
  945. package/web-ui/build/static/twig-BlxkEMdw.js +0 -1
  946. package/web-ui/build/static/twig-CfsoMGnv.js +0 -1
  947. package/web-ui/build/static/typescript-3xS8yDgH.js +0 -1
  948. package/web-ui/build/static/typescript-Dx0zHssr.js +0 -1
  949. package/web-ui/build/static/typoscript-BdFwMGCV.js +0 -1
  950. package/web-ui/build/static/unrealscript-DJzoqp3G.js +0 -1
  951. package/web-ui/build/static/uorazor-CQO8Ynpw.js +0 -1
  952. package/web-ui/build/static/uri-BUBBJdel.js +0 -1
  953. package/web-ui/build/static/v-XU798JEc.js +0 -1
  954. package/web-ui/build/static/vala-DsH-Nomr.js +0 -1
  955. package/web-ui/build/static/vala-gCVw4o0d.js +0 -1
  956. package/web-ui/build/static/vbnet-BHw8cZ4s.js +0 -1
  957. package/web-ui/build/static/vbnet-DPa2ddOk.js +0 -1
  958. package/web-ui/build/static/vbscript-html-CNADYJ1-.js +0 -1
  959. package/web-ui/build/static/vbscript-ztRmIppj.js +0 -1
  960. package/web-ui/build/static/velocity-DVfeN53w.js +0 -1
  961. package/web-ui/build/static/verilog-C9VDLRl9.js +0 -1
  962. package/web-ui/build/static/verilog-Dsmt_WJW.js +0 -1
  963. package/web-ui/build/static/vhdl-DbylNGny.js +0 -1
  964. package/web-ui/build/static/vhdl-wNJe3yKK.js +0 -1
  965. package/web-ui/build/static/vim-6PLlVaq_.js +0 -1
  966. package/web-ui/build/static/vim-BJpkTTe-.js +0 -1
  967. package/web-ui/build/static/visual-basic-GY3wXjJ3.js +0 -1
  968. package/web-ui/build/static/warpscript-DUb9z3yI.js +0 -1
  969. package/web-ui/build/static/wasm-Dey0RlHH.js +0 -1
  970. package/web-ui/build/static/web-idl-qAF1RqaI.js +0 -1
  971. package/web-ui/build/static/wiki-Dh3Vjtce.js +0 -1
  972. package/web-ui/build/static/wolfram-BrQcRMlt.js +0 -1
  973. package/web-ui/build/static/wren-Cu3Mzln6.js +0 -1
  974. package/web-ui/build/static/x86asm-DD5mhaEi.js +0 -1
  975. package/web-ui/build/static/xeora-DKRZ6hlr.js +0 -1
  976. package/web-ui/build/static/xl-BL8R8sAx.js +0 -1
  977. package/web-ui/build/static/xml-doc-BSpNJbEM.js +0 -1
  978. package/web-ui/build/static/xml-i5BJyEQ7.js +0 -1
  979. package/web-ui/build/static/xojo-r2ieNAyP.js +0 -1
  980. package/web-ui/build/static/xquery-BtAK8Dvl.js +0 -1
  981. package/web-ui/build/static/xquery-CM4Q_TX7.js +0 -1
  982. package/web-ui/build/static/yaml-Mm8ArZA3.js +0 -1
  983. package/web-ui/build/static/yaml-r-QeuY00.js +0 -1
  984. package/web-ui/build/static/yang-qcKR-Y23.js +0 -1
  985. package/web-ui/build/static/zephir-8ApHtH7c.js +0 -1
  986. package/web-ui/build/static/zig-BanqOd9_.js +0 -1
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Tests for /api/videos/jobs (list), /api/videos/jobs/:id/cancel,
3
+ * /api/videos (list files), and DELETE /api/videos (delete file).
4
+ * Mini-app pattern — routes only, no full webServer boot.
5
+ */
6
+
7
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from '@jest/globals';
8
+ import express from 'express';
9
+ import { createServer } from 'http';
10
+ import path from 'path';
11
+ import fs from 'fs/promises';
12
+ import os from 'os';
13
+
14
+ const HTTP_STATUS = {
15
+ OK: 200, BAD_REQUEST: 400, NOT_FOUND: 404, SERVICE_UNAVAILABLE: 503, INTERNAL_SERVER_ERROR: 500,
16
+ };
17
+
18
+ function buildApp({ toolsRegistry, agentPool, sessions }) {
19
+ const app = express();
20
+
21
+ app.get('/api/videos/jobs', async (_req, res) => {
22
+ try {
23
+ const tool = toolsRegistry?.getTool?.('video-gen');
24
+ if (!tool || typeof tool.getJobsSnapshot !== 'function') {
25
+ return res.json({ success: true, queued: [], active: [], completed: [], limits: {} });
26
+ }
27
+ res.json({ success: true, ...tool.getJobsSnapshot() });
28
+ } catch (error) {
29
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
30
+ }
31
+ });
32
+
33
+ app.post('/api/videos/jobs/:jobId/cancel', async (req, res) => {
34
+ try {
35
+ const tool = toolsRegistry?.getTool?.('video-gen');
36
+ if (!tool || typeof tool.cancelJob !== 'function') {
37
+ return res.status(HTTP_STATUS.SERVICE_UNAVAILABLE).json({ success: false, error: 'Video tool not available' });
38
+ }
39
+ const result = tool.cancelJob(req.params.jobId);
40
+ if (!result.success) return res.status(HTTP_STATUS.NOT_FOUND).json(result);
41
+ res.json(result);
42
+ } catch (error) {
43
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
44
+ }
45
+ });
46
+
47
+ app.get('/api/videos', async (req, res) => {
48
+ try {
49
+ if (!agentPool) return res.json({ success: true, videos: [] });
50
+ const requestedAgentId = req.query.agentId || null;
51
+ const agents = await agentPool.getAllAgents();
52
+ const results = [];
53
+ const seen = new Set();
54
+ const VIDEO_EXTS = new Set(['.mp4', '.webm', '.mov', '.gif']);
55
+ for (const agent of (agents instanceof Map ? Array.from(agents.values()) : agents)) {
56
+ if (requestedAgentId && agent.id !== requestedAgentId) continue;
57
+ const workDir = agent.directoryAccess?.workingDirectory || agent.projectDir;
58
+ if (!workDir) continue;
59
+ const videosDir = path.join(workDir, 'videos');
60
+ let entries;
61
+ try { entries = await fs.readdir(videosDir); } catch { continue; }
62
+ for (const name of entries) {
63
+ const ext = path.extname(name).toLowerCase();
64
+ if (!VIDEO_EXTS.has(ext)) continue;
65
+ const abs = path.join(videosDir, name);
66
+ if (seen.has(abs)) continue;
67
+ seen.add(abs);
68
+ let stat;
69
+ try { stat = await fs.stat(abs); } catch { continue; }
70
+ if (!stat.isFile()) continue;
71
+ const anySession = Array.from(sessions.values())[0];
72
+ const sessionId = agent.sessionId || anySession?.sessionId || 'web-session';
73
+ results.push({
74
+ filename: name, agentId: agent.id, agentName: agent.name,
75
+ projectDir: workDir, mtime: stat.mtime.toISOString(), size: stat.size,
76
+ url: `/api/videos/${encodeURIComponent(sessionId)}/${encodeURIComponent(name)}`,
77
+ });
78
+ }
79
+ }
80
+ results.sort((a, b) => b.mtime.localeCompare(a.mtime));
81
+ res.json({ success: true, videos: results });
82
+ } catch (error) {
83
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
84
+ }
85
+ });
86
+
87
+ app.delete('/api/videos', async (req, res) => {
88
+ try {
89
+ const { agentId, filename } = req.query;
90
+ if (!agentId || !filename) return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'agentId and filename are required' });
91
+ const normalized = path.basename(filename);
92
+ if (normalized !== filename || filename.includes('..')) return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Invalid filename' });
93
+ const ext = path.extname(normalized).toLowerCase();
94
+ if (!['.mp4', '.webm', '.mov', '.gif'].includes(ext)) return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Unsupported file extension for video delete' });
95
+ if (!agentPool) return res.status(HTTP_STATUS.SERVICE_UNAVAILABLE).json({ success: false, error: 'Agent pool not available' });
96
+ const agent = await agentPool.getAgent(agentId);
97
+ if (!agent) return res.status(HTTP_STATUS.NOT_FOUND).json({ success: false, error: 'Agent not found' });
98
+ const workDir = agent.directoryAccess?.workingDirectory || agent.projectDir;
99
+ if (!workDir) return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Agent has no working directory' });
100
+ const target = path.join(workDir, 'videos', normalized);
101
+ await fs.unlink(target);
102
+ res.json({ success: true });
103
+ } catch (error) {
104
+ if (error.code === 'ENOENT') return res.status(HTTP_STATUS.NOT_FOUND).json({ success: false, error: 'Video not found' });
105
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
106
+ }
107
+ });
108
+
109
+ return app;
110
+ }
111
+
112
+ async function http(url, options = {}) {
113
+ const resp = await globalThis.fetch(url, options);
114
+ const body = resp.headers.get('content-type')?.includes('json') ? await resp.json() : await resp.text();
115
+ return { status: resp.status, body };
116
+ }
117
+
118
+ describe('video jobs routes', () => {
119
+ let server, baseUrl;
120
+ let tool; // fake video tool
121
+
122
+ beforeAll(() => {
123
+ tool = {
124
+ _q: [],
125
+ _a: [],
126
+ _c: [],
127
+ getJobsSnapshot() {
128
+ return { queued: this._q, active: this._a, completed: this._c, limits: { queue: 5, concurrency: 2 } };
129
+ },
130
+ cancelJob(jobId) {
131
+ if (this._q.find(j => j.jobId === jobId)) { this._q = this._q.filter(j => j.jobId !== jobId); return { success: true, state: 'queued' }; }
132
+ if (this._a.find(j => j.jobId === jobId)) { this._a = this._a.filter(j => j.jobId !== jobId); return { success: true, state: 'active' }; }
133
+ return { success: false, error: 'Job not found or already terminal' };
134
+ },
135
+ };
136
+ const toolsRegistry = { getTool: (id) => id === 'video-gen' ? tool : null };
137
+ const app = buildApp({ toolsRegistry, agentPool: null, sessions: new Map() });
138
+ server = createServer(app);
139
+ return new Promise(r => server.listen(0, () => { baseUrl = `http://localhost:${server.address().port}`; r(); }));
140
+ });
141
+
142
+ afterAll(() => { server?.close(); });
143
+
144
+ beforeEach(() => {
145
+ tool._q = []; tool._a = []; tool._c = [];
146
+ });
147
+
148
+ it('GET /api/videos/jobs returns snapshot', async () => {
149
+ tool._q = [{ jobId: 'q1', prompt: 'fox' }];
150
+ tool._a = [{ jobId: 'a1', prompt: 'bear' }];
151
+ tool._c = [{ jobId: 'c1', prompt: 'eagle' }];
152
+ const { status, body } = await http(`${baseUrl}/api/videos/jobs`);
153
+ expect(status).toBe(200);
154
+ expect(body.queued).toHaveLength(1);
155
+ expect(body.active).toHaveLength(1);
156
+ expect(body.completed).toHaveLength(1);
157
+ expect(body.limits).toMatchObject({ queue: 5 });
158
+ });
159
+
160
+ it('POST cancel removes a queued job', async () => {
161
+ tool._q = [{ jobId: 'q1' }];
162
+ const { status, body } = await http(`${baseUrl}/api/videos/jobs/q1/cancel`, { method: 'POST' });
163
+ expect(status).toBe(200);
164
+ expect(body.success).toBe(true);
165
+ expect(body.state).toBe('queued');
166
+ expect(tool._q).toHaveLength(0);
167
+ });
168
+
169
+ it('POST cancel returns 404 for unknown job', async () => {
170
+ const { status, body } = await http(`${baseUrl}/api/videos/jobs/nope/cancel`, { method: 'POST' });
171
+ expect(status).toBe(404);
172
+ expect(body.success).toBe(false);
173
+ });
174
+ });
175
+
176
+ // Library routes are now GalleryService-backed — see galleryService.test.js
177
+ // and galleryRoutes.test.js for the thorough coverage. The only difference
178
+ // for videos is the file extensions and paths, which galleryService handles
179
+ // by delegation; a duplicate integration test here would be redundant.
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Scheduler visualizer routes — extracted from webServer.js so they're
3
+ * testable against the real production wiring (the lesson from the widget
4
+ * routes 503 incident: tests that don't match production shape don't catch
5
+ * production bugs).
6
+ *
7
+ * Two routes:
8
+ * GET /api/scheduler/state — JSON snapshot from scheduler.getState()
9
+ * GET /scheduler — self-contained HTML viewer page
10
+ *
11
+ * Registration:
12
+ * registerSchedulerRoutes(app, {
13
+ * getScheduler: () => orchestrator?.agentPool?.scheduler,
14
+ * logger,
15
+ * html: SCHEDULER_VIEWER_HTML,
16
+ * });
17
+ *
18
+ * `getScheduler` is a thunk (not the scheduler itself) so the routes resolve
19
+ * the scheduler at request-time — handles the case where the scheduler is
20
+ * attached after the routes are registered (orchestrator startup ordering).
21
+ */
22
+
23
+ export function registerSchedulerRoutes(app, deps = {}) {
24
+ if (!app) return;
25
+ const getScheduler = typeof deps.getScheduler === 'function' ? deps.getScheduler : () => null;
26
+ const logger = deps.logger || { error: () => {} };
27
+ const html = typeof deps.html === 'string' ? deps.html : '<!doctype html><title>scheduler</title>';
28
+
29
+ // JSON snapshot of scheduler + all agents — polled by /scheduler at 1 Hz.
30
+ app.get('/api/scheduler/state', async (req, res) => {
31
+ try {
32
+ const sched = getScheduler();
33
+ if (!sched || typeof sched.getState !== 'function') {
34
+ return res.status(503).json({ error: 'scheduler is not attached' });
35
+ }
36
+ const state = await sched.getState();
37
+ res.json(state);
38
+ } catch (err) {
39
+ try { logger.error('Failed to build scheduler state', { error: err?.message }); } catch (_) {}
40
+ res.status(500).json({ error: err?.message || 'unknown' });
41
+ }
42
+ });
43
+
44
+ // Self-contained HTML viewer page (no external assets).
45
+ app.get('/scheduler', (req, res) => {
46
+ res.type('html').send(html);
47
+ });
48
+ }
49
+
50
+ export default { registerSchedulerRoutes };
@@ -29,6 +29,8 @@ import { getVisualEditorServer, getVisualEditorPort, getVisualEditorBaseUrl, set
29
29
 
30
30
  // Import credential vault for secure credential management
31
31
  import { getCredentialVault } from '../services/credentialVault.js';
32
+ import { getGalleryService } from '../services/galleryService.js';
33
+ import { getUserDataPaths } from '../utilities/userDataDir.js';
32
34
 
33
35
  // Connect visual editor server to bridge (enables element selection forwarding)
34
36
  setBridgeGetter(getVisualEditorBridge);
@@ -42,6 +44,9 @@ import { initFileExplorerModule } from '../modules/fileExplorer/index.js';
42
44
  // Import FlowExecutor for flow pipeline execution
43
45
  import FlowExecutor from '../core/flowExecutor.js';
44
46
 
47
+ // Scheduler visualizer routes (extracted for testability)
48
+ import { registerSchedulerRoutes } from './schedulerRoutes.js';
49
+
45
50
  const __filename = fileURLToPath(import.meta.url);
46
51
  const __dirname = path.dirname(__filename);
47
52
 
@@ -430,7 +435,7 @@ class WebServer {
430
435
  async initialize() {
431
436
  try {
432
437
  this.setupMiddleware();
433
- this.setupRoutes();
438
+ await this.setupRoutes();
434
439
  this.setupWebSocket();
435
440
 
436
441
  await this.startServer();
@@ -659,7 +664,61 @@ class WebServer {
659
664
  * Setup API routes
660
665
  * @private
661
666
  */
662
- setupRoutes() {
667
+ async setupRoutes() {
668
+ // widget-module: remove this block if the module is deleted.
669
+ // Mounts the widget runtime asset + audit routes under /api/widget/*.
670
+ // AWAITED BEFORE other routes: Express matches routes in registration
671
+ // order, and the SPA catch-all registered later in this file matches
672
+ // EVERY GET request — if widget routes aren't in place first, the
673
+ // fallback returns index.html for /api/widget/runtime.js and the
674
+ // iframe tries to parse HTML as JS ("Unexpected token '<'").
675
+ try {
676
+ const mod = await import('../modules/widget/index.js');
677
+ if (!mod.isDisabled()) {
678
+ // The orchestrator does NOT carry toolsRegistry in production —
679
+ // it lives on `this` (the WebServer). Other route handlers in
680
+ // this file work around it with a `this.toolsRegistry || ...
681
+ // orchestrator?.toolsRegistry` fallback. Pass both explicitly
682
+ // so the widget module's routes resolve the tool reliably.
683
+ mod.registerRoutes(this.app, this.orchestrator, {
684
+ toolsRegistry: this.toolsRegistry,
685
+ });
686
+ this.logger.info('Widget module routes registered');
687
+
688
+ // Bridge the WidgetTool's event bus to a `widget_changed` WebSocket
689
+ // push. The artifacts panel listens for these so its summary cache
690
+ // stays current — independent of whether the chat feed has the
691
+ // tool-result message mounted (the feed is lazily virtualized; old
692
+ // entries unload as the user scrolls and would otherwise be missed).
693
+ try {
694
+ const widgetTool =
695
+ this.toolsRegistry?.getTool?.('widget') ||
696
+ this.orchestrator?.toolsRegistry?.getTool?.('widget');
697
+ if (widgetTool?.events?.on) {
698
+ widgetTool.events.on('widget-changed', (evt) => {
699
+ try {
700
+ // sessionId=null → broadcastToSession falls back to all
701
+ // connections. The frontend filters on currentAgent.
702
+ this.broadcastToSession(null, {
703
+ type: 'widget_changed',
704
+ data: evt,
705
+ });
706
+ } catch (err) {
707
+ this.logger.warn('Failed to broadcast widget_changed', { error: err.message });
708
+ }
709
+ });
710
+ this.logger.info('Widget event bus bridged to WebSocket');
711
+ } else {
712
+ this.logger.warn('Widget tool has no events bus — push updates disabled');
713
+ }
714
+ } catch (err) {
715
+ this.logger.warn('Widget event bus subscribe failed', { error: err.message });
716
+ }
717
+ }
718
+ } catch (err) {
719
+ this.logger.warn('Widget module not available', { error: err.message });
720
+ }
721
+
663
722
  // Health check
664
723
  this.app.get('/api/health', async (req, res) => {
665
724
  try {
@@ -2703,62 +2762,21 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
2703
2762
  }
2704
2763
  });
2705
2764
 
2706
- // Gallery: list generated images across all agent working directories.
2707
- // Scans each agent's `{workingDirectory}/images/` folder for image files
2708
- // (the convention set by imageTool.js which always saves under `images/`).
2709
- // Returns { images: [{ filename, agentId, agentName, projectDir, mtime,
2710
- // size, url }] } sorted newest-first. Deliberately light on metadata —
2711
- // prompts/model info aren't persisted as sidecar data today; that would
2712
- // be a separate feature requiring imageTool to write a .json next to each
2713
- // output. For now the filename carries the timestamp.
2765
+ // Gallery: list images from the durable gallery store. Delegates to
2766
+ // GalleryService which reads `{userDataDir}/gallery/images/` and
2767
+ // enriches each entry from its .json sidecar (prompt, model, agent,
2768
+ // etc.). The tool writes to the gallery automatically when the
2769
+ // agent's toolConfig.image-gen.saveToGallery is true (default).
2714
2770
  this.app.get('/api/images', async (req, res) => {
2715
2771
  try {
2716
- if (!this.orchestrator?.agentPool) {
2717
- return res.json({ success: true, images: [] });
2718
- }
2719
- const requestedAgentId = req.query.agentId || null;
2720
- const agents = await this.orchestrator.agentPool.getAllAgents();
2721
- const results = [];
2722
- const seen = new Set(); // dedupe by absolute path
2723
- const IMAGE_EXTS = new Set(['.png', '.jpg', '.jpeg', '.webp', '.gif']);
2724
-
2725
- for (const agent of (agents instanceof Map ? Array.from(agents.values()) : agents)) {
2726
- if (requestedAgentId && agent.id !== requestedAgentId) continue;
2727
- const workDir = agent.directoryAccess?.workingDirectory || agent.projectDir;
2728
- if (!workDir) continue;
2729
- const imagesDir = path.join(workDir, 'images');
2730
- let entries;
2731
- try {
2732
- entries = await fs.readdir(imagesDir);
2733
- } catch {
2734
- continue; // no images/ dir
2735
- }
2736
- for (const name of entries) {
2737
- const ext = path.extname(name).toLowerCase();
2738
- if (!IMAGE_EXTS.has(ext)) continue;
2739
- const abs = path.join(imagesDir, name);
2740
- if (seen.has(abs)) continue;
2741
- seen.add(abs);
2742
- let stat;
2743
- try { stat = await fs.stat(abs); } catch { continue; }
2744
- if (!stat.isFile()) continue;
2745
- // Pick a session id for the URL builder — prefer the agent's
2746
- // current session, otherwise any active session.
2747
- const anySession = Array.from(this.sessions.values())[0];
2748
- const sessionId = agent.sessionId || anySession?.sessionId || 'web-session';
2749
- results.push({
2750
- filename: name,
2751
- agentId: agent.id,
2752
- agentName: agent.name,
2753
- projectDir: workDir,
2754
- mtime: stat.mtime.toISOString(),
2755
- size: stat.size,
2756
- url: `/api/images/${encodeURIComponent(sessionId)}/${encodeURIComponent(name)}`,
2757
- });
2758
- }
2759
- }
2760
- results.sort((a, b) => b.mtime.localeCompare(a.mtime));
2761
- res.json({ success: true, images: results });
2772
+ const gallery = getGalleryService(this.logger);
2773
+ const entries = await gallery.listImages({ agentId: req.query.agentId || undefined });
2774
+ const images = entries.map(e => ({
2775
+ ...e,
2776
+ size: e.bytes, // legacy name used by the frontend
2777
+ url: `/api/gallery/images/${encodeURIComponent(e.filename)}`,
2778
+ }));
2779
+ res.json({ success: true, images });
2762
2780
  } catch (error) {
2763
2781
  this.logger.error('Gallery list failed', { error: error.message });
2764
2782
  res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({
@@ -2768,65 +2786,113 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
2768
2786
  }
2769
2787
  });
2770
2788
 
2771
- // Delete a generated image. Identified by (agentId, filename) we look
2772
- // up the agent's working directory and unlink the file there. Refuses
2773
- // path-traversal attempts and only deletes files matching an image
2774
- // extension from an `images/` folder we expect.
2789
+ // Delete a gallery image (asset + sidecar). Filename is the gallery's
2790
+ // timestamped filename, not the agent's original the list endpoint
2791
+ // emits it as `filename`.
2775
2792
  this.app.delete('/api/images', async (req, res) => {
2776
2793
  try {
2777
- const { agentId, filename } = req.query;
2778
- if (!agentId || !filename) {
2794
+ const { filename } = req.query;
2795
+ if (!filename) {
2779
2796
  return res.status(HTTP_STATUS.BAD_REQUEST).json({
2780
2797
  success: false,
2781
- error: 'agentId and filename are required',
2798
+ error: 'filename is required',
2782
2799
  });
2783
2800
  }
2784
- const normalized = path.basename(filename);
2785
- if (normalized !== filename || filename.includes('..')) {
2786
- return res.status(HTTP_STATUS.BAD_REQUEST).json({
2801
+ const gallery = getGalleryService(this.logger);
2802
+ const existed = await gallery.deleteImage(filename);
2803
+ if (!existed) {
2804
+ return res.status(HTTP_STATUS.NOT_FOUND).json({
2787
2805
  success: false,
2788
- error: 'Invalid filename',
2806
+ error: 'Image not found',
2789
2807
  });
2790
2808
  }
2791
- const ext = path.extname(normalized).toLowerCase();
2792
- if (!['.png', '.jpg', '.jpeg', '.webp', '.gif'].includes(ext)) {
2809
+ res.json({ success: true });
2810
+ } catch (error) {
2811
+ if (error.code === 'INVALID_FILENAME') {
2793
2812
  return res.status(HTTP_STATUS.BAD_REQUEST).json({
2794
2813
  success: false,
2795
- error: 'Unsupported file extension for gallery delete',
2814
+ error: 'Invalid filename',
2796
2815
  });
2797
2816
  }
2798
- if (!this.orchestrator?.agentPool) {
2799
- return res.status(HTTP_STATUS.SERVICE_UNAVAILABLE).json({
2817
+ if (error.code === 'INVALID_EXT') {
2818
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({
2800
2819
  success: false,
2801
- error: 'Agent pool not available',
2820
+ error: 'Unsupported file extension',
2802
2821
  });
2803
2822
  }
2804
- const agent = await this.orchestrator.agentPool.getAgent(agentId);
2805
- if (!agent) {
2806
- return res.status(HTTP_STATUS.NOT_FOUND).json({
2807
- success: false,
2808
- error: 'Agent not found',
2809
- });
2823
+ this.logger.error('Gallery delete failed', { error: error.message });
2824
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({
2825
+ success: false,
2826
+ error: error.message,
2827
+ });
2828
+ }
2829
+ });
2830
+
2831
+ // Serve a gallery image directly from `{userDataDir}/gallery/images/`.
2832
+ // Used by the /gallery page. Path traversal + extension gating live
2833
+ // here — the raw file is under userDataDir so this is the only
2834
+ // access point.
2835
+ this.app.get('/api/gallery/images/:filename', async (req, res) => {
2836
+ try {
2837
+ const filename = req.params.filename;
2838
+ const normalized = path.basename(filename);
2839
+ if (normalized !== filename || filename.includes('..')) {
2840
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Invalid filename' });
2810
2841
  }
2811
- const workDir = agent.directoryAccess?.workingDirectory || agent.projectDir;
2812
- if (!workDir) {
2813
- return res.status(HTTP_STATUS.BAD_REQUEST).json({
2814
- success: false,
2815
- error: 'Agent has no working directory',
2816
- });
2842
+ const ext = path.extname(normalized).toLowerCase();
2843
+ if (!['.png', '.jpg', '.jpeg', '.webp', '.gif'].includes(ext)) {
2844
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Unsupported extension' });
2817
2845
  }
2818
- const target = path.join(workDir, 'images', normalized);
2819
- await fs.unlink(target);
2820
- this.logger.info('Gallery image deleted', { agentId, filename: normalized });
2821
- res.json({ success: true });
2846
+ const target = path.join(getUserDataPaths().galleryImages, normalized);
2847
+ res.sendFile(target, (err) => {
2848
+ if (err && !res.headersSent) {
2849
+ res.status(HTTP_STATUS.NOT_FOUND).json({ success: false, error: 'Image not found' });
2850
+ }
2851
+ });
2822
2852
  } catch (error) {
2823
- if (error.code === 'ENOENT') {
2824
- return res.status(HTTP_STATUS.NOT_FOUND).json({
2853
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
2854
+ }
2855
+ });
2856
+
2857
+ // Video jobs: live snapshot of queue + active + recently completed
2858
+ // jobs from the `video-gen` tool instance. The tool keeps this state
2859
+ // in-memory on its singleton instance; we fetch via toolsRegistry.
2860
+ this.app.get('/api/videos/jobs', async (req, res) => {
2861
+ try {
2862
+ const tool = this.orchestrator?.toolsRegistry?.getTool?.('video-gen');
2863
+ if (!tool || typeof tool.getJobsSnapshot !== 'function') {
2864
+ return res.json({ success: true, queued: [], active: [], completed: [], limits: {} });
2865
+ }
2866
+ const snap = tool.getJobsSnapshot();
2867
+ res.json({ success: true, ...snap });
2868
+ } catch (error) {
2869
+ this.logger.error('Video jobs list failed', { error: error.message });
2870
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({
2871
+ success: false,
2872
+ error: error.message,
2873
+ });
2874
+ }
2875
+ });
2876
+
2877
+ // Cancel a queued or active video job. Completed/failed jobs can't be
2878
+ // cancelled — delete them from the history with DELETE /api/videos.
2879
+ this.app.post('/api/videos/jobs/:jobId/cancel', async (req, res) => {
2880
+ try {
2881
+ const { jobId } = req.params;
2882
+ const tool = this.orchestrator?.toolsRegistry?.getTool?.('video-gen');
2883
+ if (!tool || typeof tool.cancelJob !== 'function') {
2884
+ return res.status(HTTP_STATUS.SERVICE_UNAVAILABLE).json({
2825
2885
  success: false,
2826
- error: 'Image not found',
2886
+ error: 'Video tool not available',
2827
2887
  });
2828
2888
  }
2829
- this.logger.error('Gallery delete failed', { error: error.message });
2889
+ const result = tool.cancelJob(jobId);
2890
+ if (!result.success) {
2891
+ return res.status(HTTP_STATUS.NOT_FOUND).json(result);
2892
+ }
2893
+ res.json(result);
2894
+ } catch (error) {
2895
+ this.logger.error('Video job cancel failed', { error: error.message });
2830
2896
  res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({
2831
2897
  success: false,
2832
2898
  error: error.message,
@@ -2834,6 +2900,75 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
2834
2900
  }
2835
2901
  });
2836
2902
 
2903
+ // Video gallery: list videos from the durable gallery store.
2904
+ // Delegates to GalleryService. Sidecars carry prompt/model/duration.
2905
+ this.app.get('/api/videos', async (req, res) => {
2906
+ try {
2907
+ const gallery = getGalleryService(this.logger);
2908
+ const entries = await gallery.listVideos({ agentId: req.query.agentId || undefined });
2909
+ const videos = entries.map(e => ({
2910
+ ...e,
2911
+ size: e.bytes,
2912
+ url: `/api/gallery/videos/${encodeURIComponent(e.filename)}`,
2913
+ }));
2914
+ res.json({ success: true, videos });
2915
+ } catch (error) {
2916
+ this.logger.error('Video gallery list failed', { error: error.message });
2917
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({
2918
+ success: false,
2919
+ error: error.message,
2920
+ });
2921
+ }
2922
+ });
2923
+
2924
+ // Delete a gallery video (asset + sidecar).
2925
+ this.app.delete('/api/videos', async (req, res) => {
2926
+ try {
2927
+ const { filename } = req.query;
2928
+ if (!filename) {
2929
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'filename is required' });
2930
+ }
2931
+ const gallery = getGalleryService(this.logger);
2932
+ const existed = await gallery.deleteVideo(filename);
2933
+ if (!existed) {
2934
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ success: false, error: 'Video not found' });
2935
+ }
2936
+ res.json({ success: true });
2937
+ } catch (error) {
2938
+ if (error.code === 'INVALID_FILENAME') {
2939
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Invalid filename' });
2940
+ }
2941
+ if (error.code === 'INVALID_EXT') {
2942
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Unsupported file extension' });
2943
+ }
2944
+ this.logger.error('Video delete failed', { error: error.message });
2945
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
2946
+ }
2947
+ });
2948
+
2949
+ // Serve a gallery video from `{userDataDir}/gallery/videos/`.
2950
+ this.app.get('/api/gallery/videos/:filename', async (req, res) => {
2951
+ try {
2952
+ const filename = req.params.filename;
2953
+ const normalized = path.basename(filename);
2954
+ if (normalized !== filename || filename.includes('..')) {
2955
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Invalid filename' });
2956
+ }
2957
+ const ext = path.extname(normalized).toLowerCase();
2958
+ if (!['.mp4', '.webm', '.mov', '.gif'].includes(ext)) {
2959
+ return res.status(HTTP_STATUS.BAD_REQUEST).json({ success: false, error: 'Unsupported extension' });
2960
+ }
2961
+ const target = path.join(getUserDataPaths().galleryVideos, normalized);
2962
+ res.sendFile(target, (err) => {
2963
+ if (err && !res.headersSent) {
2964
+ res.status(HTTP_STATUS.NOT_FOUND).json({ success: false, error: 'Video not found' });
2965
+ }
2966
+ });
2967
+ } catch (error) {
2968
+ res.status(HTTP_STATUS.INTERNAL_SERVER_ERROR).json({ success: false, error: error.message });
2969
+ }
2970
+ });
2971
+
2837
2972
  // Video serving endpoint for generated videos
2838
2973
  this.app.get('/api/videos/:sessionId/:filename', async (req, res) => {
2839
2974
  try {
@@ -3350,24 +3485,13 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
3350
3485
  // Scheduler Visualizer — JSON state endpoint + HTML viewer
3351
3486
  // ============================================
3352
3487
 
3353
- // JSON snapshot of scheduler + all agents polled by /scheduler at 1 Hz.
3354
- this.app.get('/api/scheduler/state', async (req, res) => {
3355
- try {
3356
- const sched = this.orchestrator?.agentPool?.scheduler;
3357
- if (!sched?.getState) {
3358
- return res.status(503).json({ error: 'scheduler is not attached' });
3359
- }
3360
- const state = await sched.getState();
3361
- res.json(state);
3362
- } catch (err) {
3363
- this.logger.error('Failed to build scheduler state', { error: err.message });
3364
- res.status(500).json({ error: err.message });
3365
- }
3366
- });
3367
-
3368
- // Self-contained HTML viewer. See SCHEDULER_VIEWER_HTML below.
3369
- this.app.get('/scheduler', (req, res) => {
3370
- res.type('html').send(SCHEDULER_VIEWER_HTML);
3488
+ // Mount scheduler visualizer routes via the extracted helper. The thunk
3489
+ // form for getScheduler ensures we resolve the scheduler at request time
3490
+ // (it may be attached after route registration during orchestrator boot).
3491
+ registerSchedulerRoutes(this.app, {
3492
+ getScheduler: () => this.orchestrator?.agentPool?.scheduler,
3493
+ logger: this.logger,
3494
+ html: SCHEDULER_VIEWER_HTML,
3371
3495
  });
3372
3496
 
3373
3497
  // ============================================