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
@@ -281,7 +281,11 @@ describe('_parseSSEResponseStream — tool-call inline JSON passthrough', () =>
281
281
  // The backend converts native tool_calls to inline JSON blocks and
282
282
  // yields them as regular `chunk` events. Verify the CLI receives
283
283
  // them intact so its TagParser can extract.
284
- const inlineBlock = '\n**Calling filesystem** action: read…\n\n'
284
+ // Header only see toolCallBridge.js DESIGN NOTE: the preamble
285
+ // is "**Calling X**" with no param preview, because the JSON block
286
+ // below is the single source of truth and duplicating its contents
287
+ // in a preview was bloating the context.
288
+ const inlineBlock = '\n**Calling filesystem**\n\n'
285
289
  + '```json\n'
286
290
  + '{\n "toolId": "filesystem",\n "parameters": {\n "action": "read"\n }\n}\n'
287
291
  + '```\n';
@@ -108,7 +108,9 @@ describe('filterContentForExternalRelay()', () => {
108
108
  });
109
109
 
110
110
  test('CONTENT VERBATIM — "Calling X" bridge preamble preserved if wrapped', () => {
111
- const txt = '**Calling terminal** cmd: ls…\n\nsee below';
111
+ // Bridge emits header-only (no em-dash param preview — see
112
+ // toolCallBridge.js DESIGN NOTE).
113
+ const txt = '**Calling terminal**\n\nsee below';
112
114
  const { blocks } = filterContentForExternalRelay(`<external>${txt}</external>`);
113
115
  expect(blocks[0].text).toBe(txt);
114
116
  });
@@ -134,7 +136,7 @@ describe('filterContentForExternalRelay()', () => {
134
136
  // after the bridge has converted native tool calls to inline blocks.
135
137
  const content =
136
138
  "Thinking through this…\n\n" +
137
- "**Calling taskmanager** — type: create, title: foo…\n\n" +
139
+ "**Calling taskmanager**\n\n" +
138
140
  "```json\n{\"toolId\":\"taskmanager\",\"parameters\":{\"actions\":[{\"type\":\"create\",\"title\":\"foo\"}]}}\n```\n\n" +
139
141
  "<external to=\"discord:#ops\">\n" +
140
142
  "Created a task for you: **foo**. I'll post back when it's done.\n" +
@@ -454,7 +454,7 @@ describe('Cross-service isolation: a single agent response splits across platfor
454
454
  // for either Responses API or Chat Completions after the bridge.
455
455
  const content =
456
456
  'Private reasoning the operator sees.\n' +
457
- '**Calling taskmanager** — type: complete…\n' +
457
+ '**Calling taskmanager**\n' +
458
458
  '```json\n{"toolId":"taskmanager","parameters":{"actions":[{"type":"complete","taskId":"t-1"}]}}\n```\n\n' +
459
459
  '<external to="discord:#ops">\n' +
460
460
  '**Deploy finished.** 42 tests passed.\n' +
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Tests for GalleryService — the durable store for tool-generated
3
+ * images + videos with metadata sidecars.
4
+ *
5
+ * Locks:
6
+ * - save copies file + writes a JSON sidecar
7
+ * - filename gets a timestamp prefix to avoid collisions
8
+ * - list returns entries newest-first with metadata from the sidecar
9
+ * - list filters by agentId when supplied
10
+ * - delete removes both the asset and its sidecar
11
+ * - delete rejects path traversal + unsupported extensions
12
+ * - saveImage on a non-image source returns null (no-op, non-fatal)
13
+ * - IO failures on the gallery path don't crash the caller (warn + null)
14
+ */
15
+
16
+ import { jest, describe, test, expect, beforeEach, afterEach } from '@jest/globals';
17
+ import path from 'path';
18
+ import os from 'os';
19
+ import { promises as fs } from 'fs';
20
+
21
+ // Point userDataDir to a tmp dir for the duration of the test.
22
+ let tmpRoot;
23
+ jest.unstable_mockModule('../../utilities/userDataDir.js', () => ({
24
+ getUserDataDir: () => tmpRoot,
25
+ getUserDataPaths: () => ({
26
+ base: tmpRoot,
27
+ state: path.join(tmpRoot, 'state'),
28
+ agents: path.join(tmpRoot, 'state', 'agents'),
29
+ settings: path.join(tmpRoot, 'settings'),
30
+ attachments: path.join(tmpRoot, 'attachments'),
31
+ logs: path.join(tmpRoot, 'logs'),
32
+ cache: path.join(tmpRoot, 'cache'),
33
+ operations: path.join(tmpRoot, 'state', 'operations'),
34
+ models: path.join(tmpRoot, 'state', 'models'),
35
+ runtime: path.join(tmpRoot, 'runtime'),
36
+ skills: path.join(tmpRoot, 'state', 'skills'),
37
+ gallery: path.join(tmpRoot, 'gallery'),
38
+ galleryImages: path.join(tmpRoot, 'gallery', 'images'),
39
+ galleryVideos: path.join(tmpRoot, 'gallery', 'videos'),
40
+ }),
41
+ ensureUserDataDirs: async () => {},
42
+ }));
43
+
44
+ const mod = await import('../galleryService.js');
45
+ const { GalleryService, _resetGalleryServiceForTests, getGalleryService } = mod;
46
+
47
+ const LOGGER = { info() {}, warn() {}, error() {}, debug() {} };
48
+
49
+ beforeEach(async () => {
50
+ _resetGalleryServiceForTests();
51
+ tmpRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'gallery-svc-'));
52
+ });
53
+
54
+ afterEach(async () => {
55
+ await fs.rm(tmpRoot, { recursive: true, force: true }).catch(() => {});
56
+ });
57
+
58
+ async function makeSourceImage(name = 'fox.png') {
59
+ const srcDir = path.join(tmpRoot, 'src');
60
+ await fs.mkdir(srcDir, { recursive: true });
61
+ const src = path.join(srcDir, name);
62
+ await fs.writeFile(src, 'PNG-DATA');
63
+ return src;
64
+ }
65
+
66
+ async function makeSourceVideo(name = 'dragon.mp4') {
67
+ const srcDir = path.join(tmpRoot, 'src');
68
+ await fs.mkdir(srcDir, { recursive: true });
69
+ const src = path.join(srcDir, name);
70
+ await fs.writeFile(src, 'MP4-DATA');
71
+ return src;
72
+ }
73
+
74
+ describe('GalleryService.saveImage', () => {
75
+ test('copies the file into gallery/images and writes a sidecar', async () => {
76
+ const svc = new GalleryService(LOGGER);
77
+ const src = await makeSourceImage('fox.png');
78
+ const result = await svc.saveImage({
79
+ sourcePath: src,
80
+ metadata: { prompt: 'a fox', model: 'dall-e-3', agentId: 'agent-1', agentName: 'Alice' },
81
+ });
82
+ expect(result).toBeTruthy();
83
+ expect(result.filename).toMatch(/_fox\.png$/);
84
+ const contents = await fs.readFile(result.path, 'utf8');
85
+ expect(contents).toBe('PNG-DATA');
86
+ const sidecar = JSON.parse(await fs.readFile(`${result.path}.json`, 'utf8'));
87
+ expect(sidecar.prompt).toBe('a fox');
88
+ expect(sidecar.model).toBe('dall-e-3');
89
+ expect(sidecar.agentId).toBe('agent-1');
90
+ expect(sidecar.kind).toBe('image');
91
+ expect(sidecar.createdAt).toBeTruthy();
92
+ });
93
+
94
+ test('returns null for a non-image source (no throw, no file)', async () => {
95
+ const svc = new GalleryService(LOGGER);
96
+ const txt = path.join(tmpRoot, 'src', 'notes.txt');
97
+ await fs.mkdir(path.dirname(txt), { recursive: true });
98
+ await fs.writeFile(txt, 'hi');
99
+ const r = await svc.saveImage({ sourcePath: txt });
100
+ expect(r).toBeNull();
101
+ });
102
+
103
+ test('returns null when the source path does not exist (warn, not crash)', async () => {
104
+ const svc = new GalleryService(LOGGER);
105
+ const r = await svc.saveImage({
106
+ sourcePath: path.join(tmpRoot, 'does-not-exist.png'),
107
+ });
108
+ expect(r).toBeNull();
109
+ });
110
+
111
+ test('two saves of the same basename do not collide', async () => {
112
+ const svc = new GalleryService(LOGGER);
113
+ const src = await makeSourceImage('boom.png');
114
+ const a = await svc.saveImage({ sourcePath: src });
115
+ // Enough wall-clock for the timestamp prefix to change.
116
+ await new Promise(r => setTimeout(r, 5));
117
+ const b = await svc.saveImage({ sourcePath: src });
118
+ expect(a.filename).not.toBe(b.filename);
119
+ });
120
+ });
121
+
122
+ describe('GalleryService.saveVideo', () => {
123
+ test('copies + writes sidecar with kind=video', async () => {
124
+ const svc = new GalleryService(LOGGER);
125
+ const src = await makeSourceVideo('dragon.mp4');
126
+ const result = await svc.saveVideo({
127
+ sourcePath: src,
128
+ metadata: { prompt: 'a dragon', duration: 5, variants: 1, agentId: 'agent-1' },
129
+ });
130
+ expect(result).toBeTruthy();
131
+ const sidecar = JSON.parse(await fs.readFile(`${result.path}.json`, 'utf8'));
132
+ expect(sidecar.kind).toBe('video');
133
+ expect(sidecar.duration).toBe(5);
134
+ });
135
+ });
136
+
137
+ describe('GalleryService.listImages', () => {
138
+ test('returns saved images with sidecar metadata, newest first', async () => {
139
+ const svc = new GalleryService(LOGGER);
140
+ const src = await makeSourceImage('a.png');
141
+ const a = await svc.saveImage({ sourcePath: src, metadata: { prompt: 'first', agentId: 'x' } });
142
+ await new Promise(r => setTimeout(r, 20));
143
+ const b = await svc.saveImage({ sourcePath: src, metadata: { prompt: 'second', agentId: 'x' } });
144
+
145
+ const list = await svc.listImages();
146
+ expect(list.map(i => i.filename)).toEqual([b.filename, a.filename]);
147
+ expect(list[0].prompt).toBe('second');
148
+ expect(list[0].kind).toBe('image');
149
+ expect(list[0].bytes).toBeGreaterThan(0);
150
+ expect(list[0].mtime).toMatch(/^\d{4}-\d{2}-\d{2}T/);
151
+ });
152
+
153
+ test('filters by agentId', async () => {
154
+ const svc = new GalleryService(LOGGER);
155
+ const src = await makeSourceImage('a.png');
156
+ await svc.saveImage({ sourcePath: src, metadata: { agentId: 'agent-A' } });
157
+ await svc.saveImage({ sourcePath: src, metadata: { agentId: 'agent-B' } });
158
+
159
+ const onlyB = await svc.listImages({ agentId: 'agent-B' });
160
+ expect(onlyB).toHaveLength(1);
161
+ expect(onlyB[0].agentId).toBe('agent-B');
162
+ });
163
+
164
+ test('empty gallery → empty list', async () => {
165
+ const svc = new GalleryService(LOGGER);
166
+ const list = await svc.listImages();
167
+ expect(list).toEqual([]);
168
+ });
169
+
170
+ test('files without sidecars are still listed (best-effort)', async () => {
171
+ const svc = new GalleryService(LOGGER);
172
+ const dir = path.join(tmpRoot, 'gallery', 'images');
173
+ await fs.mkdir(dir, { recursive: true });
174
+ await fs.writeFile(path.join(dir, 'orphan.png'), 'x');
175
+ const list = await svc.listImages();
176
+ expect(list.map(i => i.filename)).toEqual(['orphan.png']);
177
+ expect(list[0].prompt).toBeUndefined();
178
+ });
179
+ });
180
+
181
+ describe('GalleryService.deleteImage', () => {
182
+ test('removes the image AND its sidecar', async () => {
183
+ const svc = new GalleryService(LOGGER);
184
+ const src = await makeSourceImage('gone.png');
185
+ const { filename, path: assetPath } = await svc.saveImage({ sourcePath: src });
186
+ await fs.access(assetPath);
187
+ await fs.access(`${assetPath}.json`);
188
+
189
+ const ok = await svc.deleteImage(filename);
190
+ expect(ok).toBe(true);
191
+ await expect(fs.access(assetPath)).rejects.toBeTruthy();
192
+ await expect(fs.access(`${assetPath}.json`)).rejects.toBeTruthy();
193
+ });
194
+
195
+ test('rejects path-traversal filenames', async () => {
196
+ const svc = new GalleryService(LOGGER);
197
+ await expect(svc.deleteImage('../secret')).rejects.toMatchObject({ code: 'INVALID_FILENAME' });
198
+ });
199
+
200
+ test('rejects unsupported extensions', async () => {
201
+ const svc = new GalleryService(LOGGER);
202
+ await expect(svc.deleteImage('secret.txt')).rejects.toMatchObject({ code: 'INVALID_EXT' });
203
+ });
204
+
205
+ test('returns false when the file is already gone (no throw)', async () => {
206
+ const svc = new GalleryService(LOGGER);
207
+ const r = await svc.deleteImage('ghost.png');
208
+ expect(r).toBe(false);
209
+ });
210
+ });
211
+
212
+ describe('getGalleryService singleton', () => {
213
+ test('returns the same instance across calls', () => {
214
+ const a = getGalleryService(LOGGER);
215
+ const b = getGalleryService(LOGGER);
216
+ expect(a).toBe(b);
217
+ });
218
+
219
+ test('_resetGalleryServiceForTests creates a fresh instance', () => {
220
+ const a = getGalleryService(LOGGER);
221
+ _resetGalleryServiceForTests();
222
+ const b = getGalleryService(LOGGER);
223
+ expect(a).not.toBe(b);
224
+ });
225
+ });
@@ -33,11 +33,9 @@ import TagParser from '../../utilities/tagParser.js';
33
33
  */
34
34
  function bridgeOutput({ name, args }) {
35
35
  const params = args ? JSON.parse(args) : {};
36
- const paramSummary = Object.entries(params)
37
- .map(([k, v]) => `${k}: ${typeof v === 'string' ? v : JSON.stringify(v)}`)
38
- .join(', ')
39
- .slice(0, 120);
40
- return `\n**Calling ${name}** — ${paramSummary || 'no params'}…\n\n` +
36
+ // Header only — see autopilot-backend/services/toolCallBridge.js
37
+ // DESIGN NOTE. No em-dash / param preview line.
38
+ return `\n**Calling ${name}**\n\n` +
41
39
  '```json\n' +
42
40
  JSON.stringify({ toolId: name, parameters: params }, null, 2) +
43
41
  '\n```\n';
@@ -0,0 +1,257 @@
1
+ /**
2
+ * @file services/galleryService.js
3
+ * @description Durable gallery for tool-generated media.
4
+ *
5
+ * Why this exists:
6
+ * Before, the web-UI gallery listed files by scanning each agent's
7
+ * `working-dir/images/` folder. That breaks the moment a file is
8
+ * moved, an agent is deleted, or the agent's workingDirectory
9
+ * changes — and there's nowhere to store the prompt/model metadata
10
+ * that made the image in the first place. GalleryService gives each
11
+ * generation a durable home at `{userDataDir}/gallery/{images|videos}/`
12
+ * with a `.json` sidecar carrying the full metadata.
13
+ *
14
+ * Layout:
15
+ * {userDataDir}/gallery/
16
+ * images/
17
+ * 2026-04-22T12-34-56_fox.png ← the asset
18
+ * 2026-04-22T12-34-56_fox.png.json ← metadata sidecar
19
+ * videos/
20
+ * 2026-04-22T12-34-56_dragon.mp4
21
+ * 2026-04-22T12-34-56_dragon.mp4.json
22
+ *
23
+ * Sidecar shape (whatever the caller passed to saveImage/saveVideo):
24
+ * {
25
+ * filename: "2026-04-22T12-34-56_fox.png",
26
+ * sourcePath: "/original/path/images/fox.png",
27
+ * agentId: "agent-xyz",
28
+ * agentName: "Alice",
29
+ * prompt: "a fox on a skateboard",
30
+ * model: "dall-e-3",
31
+ * size: "1024x1024", // or width/height
32
+ * duration: 5, // video only
33
+ * variants: 1, // video only
34
+ * createdAt: "2026-04-22T12:34:56.789Z",
35
+ * bytes: 834221,
36
+ * }
37
+ *
38
+ * Save-time naming guarantees:
39
+ * - Timestamp prefix prevents collisions when two agents pick the
40
+ * same filename.
41
+ * - Original filename is retained after the prefix so users can still
42
+ * recognise what they asked for.
43
+ */
44
+
45
+ import { promises as fs } from 'fs';
46
+ import path from 'path';
47
+ import { getUserDataPaths, ensureUserDataDirs } from '../utilities/userDataDir.js';
48
+
49
+ const IMAGE_EXTS = new Set(['.png', '.jpg', '.jpeg', '.webp', '.gif']);
50
+ const VIDEO_EXTS = new Set(['.mp4', '.webm', '.mov', '.gif']);
51
+
52
+ function _ts() {
53
+ // Filesystem-safe ISO — replaces ':' (illegal on Windows) with '-'.
54
+ return new Date().toISOString().replace(/[:.]/g, '-');
55
+ }
56
+
57
+ function _isImage(name) { return IMAGE_EXTS.has(path.extname(name).toLowerCase()); }
58
+ function _isVideo(name) { return VIDEO_EXTS.has(path.extname(name).toLowerCase()); }
59
+
60
+ async function _ensureDir(dir) {
61
+ await fs.mkdir(dir, { recursive: true });
62
+ }
63
+
64
+ /** Write `data` to `{target}.json` — pretty, atomic-ish (write + rename). */
65
+ async function _writeSidecar(target, data) {
66
+ const json = JSON.stringify(data, null, 2);
67
+ const tmp = `${target}.json.tmp`;
68
+ await fs.writeFile(tmp, json, 'utf8');
69
+ await fs.rename(tmp, `${target}.json`);
70
+ }
71
+
72
+ async function _readSidecar(target) {
73
+ try {
74
+ const raw = await fs.readFile(`${target}.json`, 'utf8');
75
+ return JSON.parse(raw);
76
+ } catch {
77
+ return null;
78
+ }
79
+ }
80
+
81
+ /** Best-effort: strip known internal keys before returning to callers. */
82
+ function _sanitiseMeta(meta, file, stat, url) {
83
+ const out = { ...(meta || {}) };
84
+ out.filename = file;
85
+ out.bytes = stat.size;
86
+ out.mtime = stat.mtime.toISOString();
87
+ if (url) out.url = url;
88
+ return out;
89
+ }
90
+
91
+ class GalleryService {
92
+ constructor(logger = null) {
93
+ this.logger = logger;
94
+ this.paths = getUserDataPaths();
95
+ }
96
+
97
+ /**
98
+ * Copy a freshly-generated image into the durable gallery.
99
+ * @param {object} opts
100
+ * @param {string} opts.sourcePath absolute path to source file
101
+ * @param {object} opts.metadata free-form sidecar data
102
+ * @param {string} [opts.filenameHint] override the suggested filename
103
+ * @returns {Promise<{ filename: string, path: string } | null>}
104
+ * null when sourcePath couldn't be read (non-fatal)
105
+ */
106
+ async saveImage({ sourcePath, metadata = {}, filenameHint } = {}) {
107
+ if (!sourcePath) return null;
108
+ if (!_isImage(filenameHint || sourcePath)) return null;
109
+ try {
110
+ await _ensureDir(this.paths.galleryImages);
111
+ const base = path.basename(filenameHint || sourcePath);
112
+ const final = `${_ts()}_${base}`;
113
+ const target = path.join(this.paths.galleryImages, final);
114
+ await fs.copyFile(sourcePath, target);
115
+ const stat = await fs.stat(target);
116
+ await _writeSidecar(target, {
117
+ ...metadata,
118
+ filename: final,
119
+ sourcePath,
120
+ bytes: stat.size,
121
+ createdAt: metadata.createdAt || new Date().toISOString(),
122
+ kind: 'image',
123
+ });
124
+ this.logger?.info?.('[Gallery] saved image', { final, sourcePath });
125
+ return { filename: final, path: target };
126
+ } catch (err) {
127
+ // Gallery save is non-fatal — the tool's primary save to the
128
+ // agent's working dir already succeeded.
129
+ this.logger?.warn?.('[Gallery] saveImage failed', { error: err.message, sourcePath });
130
+ return null;
131
+ }
132
+ }
133
+
134
+ /** Same shape as saveImage, but for videos. */
135
+ async saveVideo({ sourcePath, metadata = {}, filenameHint } = {}) {
136
+ if (!sourcePath) return null;
137
+ if (!_isVideo(filenameHint || sourcePath)) return null;
138
+ try {
139
+ await _ensureDir(this.paths.galleryVideos);
140
+ const base = path.basename(filenameHint || sourcePath);
141
+ const final = `${_ts()}_${base}`;
142
+ const target = path.join(this.paths.galleryVideos, final);
143
+ await fs.copyFile(sourcePath, target);
144
+ const stat = await fs.stat(target);
145
+ await _writeSidecar(target, {
146
+ ...metadata,
147
+ filename: final,
148
+ sourcePath,
149
+ bytes: stat.size,
150
+ createdAt: metadata.createdAt || new Date().toISOString(),
151
+ kind: 'video',
152
+ });
153
+ this.logger?.info?.('[Gallery] saved video', { final, sourcePath });
154
+ return { filename: final, path: target };
155
+ } catch (err) {
156
+ this.logger?.warn?.('[Gallery] saveVideo failed', { error: err.message, sourcePath });
157
+ return null;
158
+ }
159
+ }
160
+
161
+ /**
162
+ * List gallery images, newest first. Optional { agentId } filter.
163
+ * Returns rich entries populated from the sidecar where available.
164
+ */
165
+ async listImages({ agentId } = {}) {
166
+ return this._listDir(this.paths.galleryImages, _isImage, agentId, 'image');
167
+ }
168
+
169
+ /** Same for videos. */
170
+ async listVideos({ agentId } = {}) {
171
+ return this._listDir(this.paths.galleryVideos, _isVideo, agentId, 'video');
172
+ }
173
+
174
+ async _listDir(dir, extCheck, agentId, kind) {
175
+ let entries;
176
+ try {
177
+ entries = await fs.readdir(dir);
178
+ } catch {
179
+ return [];
180
+ }
181
+ const results = [];
182
+ for (const name of entries) {
183
+ if (!extCheck(name)) continue;
184
+ const abs = path.join(dir, name);
185
+ let stat;
186
+ try { stat = await fs.stat(abs); } catch { continue; }
187
+ if (!stat.isFile()) continue;
188
+ const meta = (await _readSidecar(abs)) || {};
189
+ if (agentId && meta.agentId && meta.agentId !== agentId) continue;
190
+ results.push(_sanitiseMeta({ ...meta, kind }, name, stat, /* url */ null));
191
+ }
192
+ // Sort newest-first. Use createdAt from sidecar when available (more
193
+ // precise than mtime, which can collide at ms resolution on fast
194
+ // filesystems). Filename fallback works because we embed a timestamp
195
+ // prefix at save time.
196
+ results.sort((a, b) => {
197
+ const ka = a.createdAt || a.filename || '';
198
+ const kb = b.createdAt || b.filename || '';
199
+ return kb.localeCompare(ka);
200
+ });
201
+ return results;
202
+ }
203
+
204
+ /** Delete a gallery image by filename (+ its sidecar). 404 → false. */
205
+ async deleteImage(filename) {
206
+ return this._deleteFile(this.paths.galleryImages, filename, _isImage);
207
+ }
208
+
209
+ /** Delete a gallery video by filename (+ its sidecar). */
210
+ async deleteVideo(filename) {
211
+ return this._deleteFile(this.paths.galleryVideos, filename, _isVideo);
212
+ }
213
+
214
+ async _deleteFile(dir, filename, extCheck) {
215
+ const normalized = path.basename(filename || '');
216
+ if (!normalized || normalized !== filename) {
217
+ throw Object.assign(new Error('Invalid filename'), { code: 'INVALID_FILENAME' });
218
+ }
219
+ if (!extCheck(normalized)) {
220
+ throw Object.assign(new Error('Unsupported extension'), { code: 'INVALID_EXT' });
221
+ }
222
+ const target = path.join(dir, normalized);
223
+ let existed = false;
224
+ try {
225
+ await fs.unlink(target);
226
+ existed = true;
227
+ } catch (err) {
228
+ if (err.code !== 'ENOENT') throw err;
229
+ }
230
+ // Sidecar is best-effort — missing sidecar is fine.
231
+ await fs.unlink(`${target}.json`).catch(() => {});
232
+ return existed;
233
+ }
234
+
235
+ /** Diagnostic helper (used by tests). */
236
+ async _ensureStructure() {
237
+ await ensureUserDataDirs();
238
+ await _ensureDir(this.paths.galleryImages);
239
+ await _ensureDir(this.paths.galleryVideos);
240
+ }
241
+ }
242
+
243
+ /* Singleton. Tools and webServer routes share one instance. */
244
+ let _instance = null;
245
+
246
+ export function getGalleryService(logger = null) {
247
+ if (!_instance) _instance = new GalleryService(logger);
248
+ return _instance;
249
+ }
250
+
251
+ /** Test-only — reset module state. */
252
+ export function _resetGalleryServiceForTests() {
253
+ _instance = null;
254
+ }
255
+
256
+ export default GalleryService;
257
+ export { GalleryService };
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Regression tests for the per-model size validator in imageTool.
3
+ *
4
+ * Motivation: an agent hit "Width 1536 out of range" when requesting
5
+ * 1536x1024 on gpt-image-1.5 (where that size IS valid) — because the
6
+ * validator was hardcoded to Flux constraints and didn't know the
7
+ * effective model. It also rejected `size: "auto"` despite the docs
8
+ * saying it's valid, and failed to remap the `portrait` preset when
9
+ * the tool auto-switched to gpt-image-1.5 (transparency=true).
10
+ *
11
+ * These tests lock the fixed behaviour end-to-end:
12
+ * - Valid gpt-image-1.5 sizes accepted.
13
+ * - Flux out-of-range errors still fire for Flux.
14
+ * - Errors name the model + list valid sizes + hint at recovery.
15
+ * - The transparency/sourceImage auto-switch runs BEFORE validation.
16
+ * - Presets remap per model.
17
+ * - _translateImageError produces actionable text for moderation,
18
+ * size, and auth errors.
19
+ */
20
+
21
+ import { describe, test, expect } from '@jest/globals';
22
+ import {
23
+ resolveEffectiveImageModel,
24
+ _getModelSizeRule,
25
+ _translateImageError,
26
+ } from '../imageTool.js';
27
+
28
+ // ── resolveEffectiveImageModel ──────────────────────────────────────────
29
+
30
+ describe('resolveEffectiveImageModel', () => {
31
+ test('returns explicit model when set', () => {
32
+ expect(resolveEffectiveImageModel({ model: 'gpt-image-1.5' })).toBe('gpt-image-1.5');
33
+ expect(resolveEffectiveImageModel({ model: 'Flux-1.1-pro' })).toBe('flux-1.1-pro');
34
+ });
35
+
36
+ test('auto-switches to gpt-image-1.5 when transparency=true', () => {
37
+ expect(resolveEffectiveImageModel({ transparency: true })).toBe('gpt-image-1.5');
38
+ });
39
+
40
+ test('auto-switches to gpt-image-1.5 when sourceImage is provided', () => {
41
+ expect(resolveEffectiveImageModel({ sourceImage: '/tmp/x.png' })).toBe('gpt-image-1.5');
42
+ });
43
+
44
+ test('returns "" when nothing forces a model (downstream will resolve)', () => {
45
+ expect(resolveEffectiveImageModel({})).toBe('');
46
+ });
47
+
48
+ test('explicit "auto" is treated as "defer to downstream"', () => {
49
+ expect(resolveEffectiveImageModel({ model: 'auto' })).toBe('');
50
+ });
51
+ });
52
+
53
+ // ── _getModelSizeRule ───────────────────────────────────────────────────
54
+
55
+ describe('_getModelSizeRule', () => {
56
+ test('gpt-image-1.5 gets the enum rule', () => {
57
+ const { rule } = _getModelSizeRule('gpt-image-1.5');
58
+ expect(rule.kind).toBe('enum');
59
+ expect(rule.values).toContain('1024x1024');
60
+ expect(rule.values).toContain('1024x1536');
61
+ expect(rule.values).toContain('1536x1024');
62
+ expect(rule.values).toContain('auto');
63
+ });
64
+
65
+ test('substring match — "gpt-image-1.5-preview" still picks enum', () => {
66
+ const { rule } = _getModelSizeRule('gpt-image-1.5-preview');
67
+ expect(rule.kind).toBe('enum');
68
+ });
69
+
70
+ test('flux variants get the range rule', () => {
71
+ const { rule } = _getModelSizeRule('flux-1.1-pro');
72
+ expect(rule.kind).toBe('range');
73
+ expect(rule.min).toBe(256);
74
+ expect(rule.max).toBe(1440);
75
+ expect(rule.increment).toBe(32);
76
+ });
77
+
78
+ test('unknown model falls back to default (range)', () => {
79
+ const { rule, modelKey } = _getModelSizeRule('completely-unknown-model');
80
+ expect(rule.kind).toBe('range');
81
+ expect(modelKey).toBe('default');
82
+ });
83
+ });
84
+
85
+ // ── _translateImageError ────────────────────────────────────────────────
86
+
87
+ describe('_translateImageError', () => {
88
+ test('moderation error — rewrites with rephrasing hint', () => {
89
+ const msg = _translateImageError(
90
+ new Error('HTTP 400: Bad Request - content_policy violation'),
91
+ { prompt: 'blood', model: 'gpt-image-1.5' }
92
+ );
93
+ expect(msg).toMatch(/content moderation/i);
94
+ expect(msg).toMatch(/Rephrase/i);
95
+ expect(msg).toContain('gpt-image-1.5');
96
+ // Original text preserved for auditability
97
+ expect(msg).toContain('content_policy violation');
98
+ });
99
+
100
+ test('size error — lists valid sizes for gpt-image-1.5', () => {
101
+ const msg = _translateImageError(
102
+ new Error('Invalid image size: must be one of 1024x1024, 1024x1536, 1536x1024'),
103
+ { size: '1280x720', transparency: true }
104
+ );
105
+ expect(msg).toMatch(/size "1280x720" not accepted/);
106
+ expect(msg).toContain('gpt-image-1.5');
107
+ expect(msg).toContain('1024x1024');
108
+ expect(msg).toContain('1024x1536');
109
+ expect(msg).toContain('1536x1024');
110
+ });
111
+
112
+ test('size error — Flux: range hint', () => {
113
+ const msg = _translateImageError(
114
+ new Error('out of range'),
115
+ { size: '2000x2000', model: 'flux-1.1-pro' }
116
+ );
117
+ expect(msg).toMatch(/flux/);
118
+ expect(msg).toMatch(/256-1440/);
119
+ expect(msg).toMatch(/multiples of 32/);
120
+ });
121
+
122
+ test('auth error — flags non-retryability', () => {
123
+ const msg = _translateImageError(new Error('401 Unauthorized'), { model: 'gpt-image-1.5' });
124
+ expect(msg).toMatch(/authentication/i);
125
+ expect(msg).toMatch(/Retrying.*will likely fail/i);
126
+ });
127
+
128
+ test('unknown error — still includes model + size context', () => {
129
+ const msg = _translateImageError(new Error('network wobble'), { model: 'flux-1.1-pro', size: '1024x1024' });
130
+ expect(msg).toContain('flux-1.1-pro');
131
+ expect(msg).toContain('1024x1024');
132
+ expect(msg).toContain('network wobble');
133
+ });
134
+ });