onbuzz 4.5.0 → 4.6.1

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 (1000) hide show
  1. package/bin/cli.js +38 -18
  2. package/package.json +2 -1
  3. package/scripts/e2e-flow-live.js +598 -0
  4. package/src/__tests__/resolvePreferredModel.test.js +15 -1
  5. package/src/core/__test-utils__/flowJudge.js +198 -0
  6. package/src/core/__tests__/flowCheckpointStore.test.js +140 -0
  7. package/src/core/__tests__/flowEndToEnd.test.js +565 -0
  8. package/src/core/__tests__/flowExecutor.test.js +950 -0
  9. package/src/core/__tests__/flowFieldMapping.test.js +189 -0
  10. package/src/core/__tests__/flowJudge.test.js +140 -0
  11. package/src/core/__tests__/flowLint.test.js +119 -0
  12. package/src/core/__tests__/flowLintClientMirror.test.js +98 -0
  13. package/src/core/__tests__/flowMigration.test.js +160 -0
  14. package/src/core/__tests__/flowRetry.test.js +145 -0
  15. package/src/core/__tests__/flowSavePayload.test.js +169 -0
  16. package/src/core/__tests__/flowSchema.test.js +438 -0
  17. package/src/core/__tests__/flowTemplates.test.js +311 -0
  18. package/src/core/__tests__/flowTypes.test.js +147 -0
  19. package/src/core/__tests__/flowVersionStore.test.js +123 -0
  20. package/src/core/__tests__/orchestrator.test.js +38 -0
  21. package/src/core/__tests__/stateManager.test.js +348 -0
  22. package/src/core/agentScheduler.js +37 -6
  23. package/src/core/flowCheckpointStore.js +146 -0
  24. package/src/core/flowExecutor.js +669 -87
  25. package/src/core/flowFieldMapping.js +138 -0
  26. package/src/core/flowLint.js +102 -0
  27. package/src/core/flowMigration.js +88 -0
  28. package/src/core/flowRetry.js +103 -0
  29. package/src/core/flowSchema.js +297 -0
  30. package/src/core/flowTypes.js +81 -0
  31. package/src/core/flowVersionStore.js +122 -0
  32. package/src/core/messageProcessor.js +5 -1
  33. package/src/core/stateManager.js +265 -17
  34. package/src/index.js +17 -0
  35. package/src/interfaces/webServer.js +304 -4
  36. package/src/modules/widget/galleryStore.js +27 -2
  37. package/src/services/__tests__/apiKeyManager.test.js +163 -0
  38. package/src/services/__tests__/flowContextService.test.js +391 -0
  39. package/src/services/apiKeyManager.js +54 -3
  40. package/src/services/flowContextService.js +401 -4
  41. package/src/tools/__tests__/imageFormat.test.js +208 -0
  42. package/src/tools/__tests__/jobDoneTool.test.js +285 -0
  43. package/src/tools/__tests__/platformControlAgentTeamPermissions.test.js +200 -0
  44. package/src/tools/__tests__/platformControlFlow.test.js +412 -0
  45. package/src/tools/imageFormat.js +249 -0
  46. package/src/tools/imageTool.js +107 -18
  47. package/src/tools/jobDoneTool.js +111 -3
  48. package/src/tools/platformControl/permissions.js +111 -0
  49. package/src/tools/platformControlTool.js +222 -0
  50. package/src/tools/videoTool.js +94 -60
  51. package/src/tools/webTool.js +9 -0
  52. package/src/utilities/__tests__/apiKeyPlaceholders.test.js +120 -0
  53. package/src/utilities/__tests__/brand.test.js +115 -0
  54. package/src/utilities/__tests__/flowEdgeIds.test.js +116 -0
  55. package/src/utilities/__tests__/flowPublish.test.js +196 -0
  56. package/src/utilities/__tests__/flowRunFilters.test.js +315 -0
  57. package/src/utilities/__tests__/useIsTouchDevice.detect.test.js +114 -0
  58. package/src/utilities/apiKeyPlaceholders.js +68 -0
  59. package/src/utilities/brand.js +93 -0
  60. package/src/utilities/flowEdgeIds.js +50 -0
  61. package/src/utilities/flowPublish.js +72 -0
  62. package/src/utilities/flowRunFilters.js +149 -0
  63. package/src/utilities/userDataDir.js +5 -0
  64. package/web-ui/build/index.html +2 -2
  65. package/web-ui/build/static/1c-4BRB87En.js +1 -0
  66. package/web-ui/build/static/abap-BXIqiAfL.js +1 -0
  67. package/web-ui/build/static/abnf-0gk1i0eD.js +1 -0
  68. package/web-ui/build/static/abnf-jcv7vN9a.js +1 -0
  69. package/web-ui/build/static/accesslog-bXE2aOZl.js +1 -0
  70. package/web-ui/build/static/actionscript-CF-bqawj.js +1 -0
  71. package/web-ui/build/static/actionscript-CodwLKar.js +1 -0
  72. package/web-ui/build/static/ada-BBEDI84F.js +1 -0
  73. package/web-ui/build/static/ada-Kb6JvaxP.js +1 -0
  74. package/web-ui/build/static/agda-UvnMXUUo.js +1 -0
  75. package/web-ui/build/static/al-D5QZ0ijQ.js +1 -0
  76. package/web-ui/build/static/angelscript-RpvZxbeT.js +1 -0
  77. package/web-ui/build/static/antlr4-BPyUvfii.js +1 -0
  78. package/web-ui/build/static/apache-CtM2pGik.js +1 -0
  79. package/web-ui/build/static/apacheconf-D-i9eISH.js +1 -0
  80. package/web-ui/build/static/apex-Dhn_SJi4.js +1 -0
  81. package/web-ui/build/static/apl-HWtdSaYy.js +1 -0
  82. package/web-ui/build/static/applescript-Br9NrmTP.js +1 -0
  83. package/web-ui/build/static/applescript-DLL0TuGw.js +1 -0
  84. package/web-ui/build/static/aql-MjCgNRUX.js +1 -0
  85. package/web-ui/build/static/arcade--DFvEPVv.js +1 -0
  86. package/web-ui/build/static/arduino-Cqw5W_fL.js +1 -0
  87. package/web-ui/build/static/arduino-DIDBbB7R.js +1 -0
  88. package/web-ui/build/static/arff-GGvbnOhc.js +1 -0
  89. package/web-ui/build/static/armasm-DKLRDLs1.js +1 -0
  90. package/web-ui/build/static/asciidoc-CN5qfm0K.js +1 -0
  91. package/web-ui/build/static/asciidoc-CeQEWYOj.js +1 -0
  92. package/web-ui/build/static/asm6502-B1l2Hc9j.js +1 -0
  93. package/web-ui/build/static/asmatmel-BAojNNWJ.js +1 -0
  94. package/web-ui/build/static/aspectj-DqZFhwdh.js +1 -0
  95. package/web-ui/build/static/aspnet-C0kQPqSr.js +1 -0
  96. package/web-ui/build/static/autohotkey-DY25td-Z.js +1 -0
  97. package/web-ui/build/static/autohotkey-DlqXINgk.js +1 -0
  98. package/web-ui/build/static/autoit-By7J2Y34.js +1 -0
  99. package/web-ui/build/static/autoit-nsu9sBga.js +1 -0
  100. package/web-ui/build/static/avisynth-DmhvVsr-.js +1 -0
  101. package/web-ui/build/static/avrasm-CHfBwwoQ.js +1 -0
  102. package/web-ui/build/static/avro-idl-BKgIWEIF.js +1 -0
  103. package/web-ui/build/static/awk-CpAb4d4E.js +1 -0
  104. package/web-ui/build/static/axapta-CM4aTfCZ.js +1 -0
  105. package/web-ui/build/static/bash-D1KTDlk-.js +1 -0
  106. package/web-ui/build/static/bash-DShkskxb.js +1 -0
  107. package/web-ui/build/static/basic-C4CfKvhg.js +1 -0
  108. package/web-ui/build/static/basic-CkQS4VwL.js +1 -0
  109. package/web-ui/build/static/batch-DZtrClI1.js +1 -0
  110. package/web-ui/build/static/bbcode-CY2FsfaO.js +1 -0
  111. package/web-ui/build/static/bicep-BeSEpm_3.js +1 -0
  112. package/web-ui/build/static/birb-huu22Mwu.js +1 -0
  113. package/web-ui/build/static/bison-CmbxfR57.js +1 -0
  114. package/web-ui/build/static/bnf-c2l_4HXN.js +1 -0
  115. package/web-ui/build/static/bnf-wucEDTqY.js +1 -0
  116. package/web-ui/build/static/brainfuck-CzWBg5U7.js +1 -0
  117. package/web-ui/build/static/brainfuck-I_YQ4sma.js +1 -0
  118. package/web-ui/build/static/brightscript-LOkD4eYW.js +1 -0
  119. package/web-ui/build/static/bro-CLJ7Afqo.js +1 -0
  120. package/web-ui/build/static/bsl-DbUgC2FQ.js +1 -0
  121. package/web-ui/build/static/c-C0S2D2ge.js +1 -0
  122. package/web-ui/build/static/c-KH25O_pL.js +1 -0
  123. package/web-ui/build/static/c-like-DtAFxyl_.js +1 -0
  124. package/web-ui/build/static/cal-uGiVJBNC.js +1 -0
  125. package/web-ui/build/static/capnproto-DSLchjOW.js +1 -0
  126. package/web-ui/build/static/ceylon-Bbxk66YL.js +1 -0
  127. package/web-ui/build/static/cfscript-CjDdgKbl.js +1 -0
  128. package/web-ui/build/static/chaiscript-CnRXaMae.js +1 -0
  129. package/web-ui/build/static/cil-CM9ygF3R.js +1 -0
  130. package/web-ui/build/static/clean-ppAH0SYy.js +1 -0
  131. package/web-ui/build/static/clojure-C5LVccGq.js +1 -0
  132. package/web-ui/build/static/clojure-DtLXiuuC.js +1 -0
  133. package/web-ui/build/static/clojure-repl-fSdrYuup.js +1 -0
  134. package/web-ui/build/static/cmake-AD1fuzSY.js +1 -0
  135. package/web-ui/build/static/cmake-D-o08Yta.js +1 -0
  136. package/web-ui/build/static/cobol-bDh1KHf9.js +1 -0
  137. package/web-ui/build/static/coffeescript-D8InK8kf.js +1 -0
  138. package/web-ui/build/static/coffeescript-MKWUOXb5.js +1 -0
  139. package/web-ui/build/static/concurnas-CR56nj6R.js +1 -0
  140. package/web-ui/build/static/coq-DDLBsBJu.js +1 -0
  141. package/web-ui/build/static/coq-WbhtANeW.js +1 -0
  142. package/web-ui/build/static/cos-Bfmre3op.js +1 -0
  143. package/web-ui/build/static/cpp-Cdy6A7gI.js +1 -0
  144. package/web-ui/build/static/cpp-De2KZejr.js +1 -0
  145. package/web-ui/build/static/crmsh-uf3vbKnN.js +1 -0
  146. package/web-ui/build/static/crystal-BHMyEVPP.js +1 -0
  147. package/web-ui/build/static/crystal-DXAQwftg.js +1 -0
  148. package/web-ui/build/static/csharp-Ci2MRG6L.js +1 -0
  149. package/web-ui/build/static/csharp-D8MV2a7f.js +1 -0
  150. package/web-ui/build/static/cshtml-kVj3v3uY.js +1 -0
  151. package/web-ui/build/static/csp-B83CCdVc.js +1 -0
  152. package/web-ui/build/static/csp-DUO7zlPh.js +1 -0
  153. package/web-ui/build/static/css-BWsx7mtO.js +1 -0
  154. package/web-ui/build/static/css-extras-oHch2Y5C.js +1 -0
  155. package/web-ui/build/static/csv-DIf0iNlc.js +1 -0
  156. package/web-ui/build/static/cypher-B1rOF_f3.js +1 -0
  157. package/web-ui/build/static/d-BUgLS87u.js +1 -0
  158. package/web-ui/build/static/d-ClM8XTCr.js +1 -0
  159. package/web-ui/build/static/dart-D5rVGtrb.js +1 -0
  160. package/web-ui/build/static/dart-Oal__k4m.js +1 -0
  161. package/web-ui/build/static/dataweave-B0uxnNDC.js +1 -0
  162. package/web-ui/build/static/dax-B9z6d1P6.js +1 -0
  163. package/web-ui/build/static/delphi-KMlx8q8A.js +1 -0
  164. package/web-ui/build/static/dhall-DLWFgSR8.js +1 -0
  165. package/web-ui/build/static/diff-DDMGnyhE.js +1 -0
  166. package/web-ui/build/static/diff-yg1oXq3U.js +1 -0
  167. package/web-ui/build/static/django-BDtkIu_c.js +1 -0
  168. package/web-ui/build/static/django-Bkn9HlyQ.js +1 -0
  169. package/web-ui/build/static/dns-Bx1VHfo6.js +1 -0
  170. package/web-ui/build/static/dns-zone-file-Bgn5zn_J.js +1 -0
  171. package/web-ui/build/static/docker-CTdrZJHc.js +1 -0
  172. package/web-ui/build/static/dockerfile-B7ziWbf_.js +1 -0
  173. package/web-ui/build/static/dos-cbBC5Icj.js +1 -0
  174. package/web-ui/build/static/dot-JXSVTLEH.js +1 -0
  175. package/web-ui/build/static/dsconfig-sEua2C2o.js +1 -0
  176. package/web-ui/build/static/dts-Zem_gT_O.js +1 -0
  177. package/web-ui/build/static/dust-B-dZ6-uQ.js +1 -0
  178. package/web-ui/build/static/ebnf-CXfeZoXF.js +1 -0
  179. package/web-ui/build/static/ebnf-raQs4FpT.js +1 -0
  180. package/web-ui/build/static/editorconfig-hp8ARbHf.js +1 -0
  181. package/web-ui/build/static/eiffel-tO3jaG00.js +1 -0
  182. package/web-ui/build/static/ejs-BGmD5Rvl.js +1 -0
  183. package/web-ui/build/static/elixir-CF0JDN9L.js +1 -0
  184. package/web-ui/build/static/elixir-CFSil_Ou.js +1 -0
  185. package/web-ui/build/static/elm-As6XaD-g.js +1 -0
  186. package/web-ui/build/static/elm-pw5GpqTZ.js +1 -0
  187. package/web-ui/build/static/erb-BrpCJIyN.js +1 -0
  188. package/web-ui/build/static/erb-D2_eJU9C.js +1 -0
  189. package/web-ui/build/static/erlang-5rSv6NMZ.js +1 -0
  190. package/web-ui/build/static/erlang-RCAxVMBd.js +1 -0
  191. package/web-ui/build/static/erlang-repl-BN0h_6XR.js +1 -0
  192. package/web-ui/build/static/etlua-BMtMnKtv.js +1 -0
  193. package/web-ui/build/static/excel-CRNS57iM.js +1 -0
  194. package/web-ui/build/static/excel-formula-BNw56R2m.js +1 -0
  195. package/web-ui/build/static/factor-7lsloWTf.js +1 -0
  196. package/web-ui/build/static/false-CQUvGnfd.js +1 -0
  197. package/web-ui/build/static/firestore-security-rules-WC1PabFS.js +1 -0
  198. package/web-ui/build/static/fix-Cs6kLeYV.js +1 -0
  199. package/web-ui/build/static/flix-1fdMgw2I.js +1 -0
  200. package/web-ui/build/static/flow-CRPduKSH.js +1 -0
  201. package/web-ui/build/static/fortran-C-3TUt5R.js +1 -0
  202. package/web-ui/build/static/fortran-CA4bbZCj.js +1 -0
  203. package/web-ui/build/static/fsharp-BScjCFae.js +1 -0
  204. package/web-ui/build/static/fsharp-BtHWuW4o.js +1 -0
  205. package/web-ui/build/static/ftl-Re-S2zvF.js +1 -0
  206. package/web-ui/build/static/gams-Cr12l-cM.js +1 -0
  207. package/web-ui/build/static/gap-H0O9-Zju.js +1 -0
  208. package/web-ui/build/static/gauss-CW8jwURx.js +1 -0
  209. package/web-ui/build/static/gcode-CIxfYtg9.js +1 -0
  210. package/web-ui/build/static/gcode-CVqRWYeB.js +1 -0
  211. package/web-ui/build/static/gdscript-BltZCaKl.js +1 -0
  212. package/web-ui/build/static/gedcom-nMT5ety_.js +1 -0
  213. package/web-ui/build/static/gherkin-B4M7CGOo.js +1 -0
  214. package/web-ui/build/static/gherkin-DumuqAQF.js +1 -0
  215. package/web-ui/build/static/git-BBiBlZ5H.js +1 -0
  216. package/web-ui/build/static/glsl-D8ckiRVo.js +1 -0
  217. package/web-ui/build/static/glsl-Z4VdDyPa.js +1 -0
  218. package/web-ui/build/static/gml-BHuSndHE.js +1 -0
  219. package/web-ui/build/static/gml-DZpfN_A4.js +1 -0
  220. package/web-ui/build/static/gn-BjpAHNh_.js +1 -0
  221. package/web-ui/build/static/go-BeZ9IgZB.js +1 -0
  222. package/web-ui/build/static/go-HEXrcgIc.js +1 -0
  223. package/web-ui/build/static/go-module-BGdPb7sP.js +1 -0
  224. package/web-ui/build/static/golo-Cr70KUbI.js +1 -0
  225. package/web-ui/build/static/gradle-C7MXrDnB.js +1 -0
  226. package/web-ui/build/static/graphql-CJK0wQjf.js +1 -0
  227. package/web-ui/build/static/groovy-Bwe7hkFG.js +1 -0
  228. package/web-ui/build/static/groovy-Dc6WDoKa.js +1 -0
  229. package/web-ui/build/static/haml-BSsAjltt.js +1 -0
  230. package/web-ui/build/static/haml-CZih7X_4.js +1 -0
  231. package/web-ui/build/static/handlebars-CN8hCpsy.js +1 -0
  232. package/web-ui/build/static/handlebars-XBLc7i13.js +1 -0
  233. package/web-ui/build/static/haskell-BH9WhK10.js +1 -0
  234. package/web-ui/build/static/haskell-Djf2J1vd.js +1 -0
  235. package/web-ui/build/static/haxe-BllD-W9e.js +1 -0
  236. package/web-ui/build/static/haxe-DY8Hyn7u.js +1 -0
  237. package/web-ui/build/static/hcl-CfktAP2o.js +1 -0
  238. package/web-ui/build/static/hlsl-B2JSOD9d.js +1 -0
  239. package/web-ui/build/static/hoon-BILyDobB.js +1 -0
  240. package/web-ui/build/static/hpkp-Bb8rXx4p.js +1 -0
  241. package/web-ui/build/static/hsp-BmjeJC21.js +1 -0
  242. package/web-ui/build/static/hsts-DJhW57Fu.js +1 -0
  243. package/web-ui/build/static/htmlbars-CJe_ZLjw.js +1 -0
  244. package/web-ui/build/static/http-D7SlABvQ.js +1 -0
  245. package/web-ui/build/static/http-DEUJqmEm.js +1 -0
  246. package/web-ui/build/static/hy-DVfsgEbr.js +1 -0
  247. package/web-ui/build/static/ichigojam-CPdz2bOt.js +1 -0
  248. package/web-ui/build/static/icon-DYK9RbU9.js +1 -0
  249. package/web-ui/build/static/icu-message-format-HiZB_alB.js +1 -0
  250. package/web-ui/build/static/idris-Clk3tJIE.js +1 -0
  251. package/web-ui/build/static/iecst-D7wkeksq.js +1 -0
  252. package/web-ui/build/static/ignore-GSm-L3jG.js +1 -0
  253. package/web-ui/build/static/index-BJe5td0v.js +13 -0
  254. package/web-ui/build/static/index-BYvljeMN.js +1 -0
  255. package/web-ui/build/static/index-CLelJq9j.js +1156 -0
  256. package/web-ui/build/static/index-f5UnFSsY.css +1 -0
  257. package/web-ui/build/static/inform7-D3gc0hSc.js +1 -0
  258. package/web-ui/build/static/inform7-DLdvZTxX.js +1 -0
  259. package/web-ui/build/static/ini-CVcWx1TA.js +1 -0
  260. package/web-ui/build/static/ini-CxYBdsvZ.js +1 -0
  261. package/web-ui/build/static/io-D760QF0i.js +1 -0
  262. package/web-ui/build/static/irpf90-DfkXdZut.js +1 -0
  263. package/web-ui/build/static/isbl-Bl3W-krY.js +1 -0
  264. package/web-ui/build/static/j-DyJj9FSc.js +1 -0
  265. package/web-ui/build/static/java-CLw1cH97.js +1 -0
  266. package/web-ui/build/static/java-vXaHBzP4.js +1 -0
  267. package/web-ui/build/static/javadoc-p5hIe48g.js +1 -0
  268. package/web-ui/build/static/javadoclike-OXi-sQ0q.js +1 -0
  269. package/web-ui/build/static/javascript-CTSqES8o.js +1 -0
  270. package/web-ui/build/static/javastacktrace-PC9-3moA.js +1 -0
  271. package/web-ui/build/static/jboss-cli-CxOZKDLi.js +1 -0
  272. package/web-ui/build/static/jexl-C4kSXhD1.js +1 -0
  273. package/web-ui/build/static/jolie-CntM8cWx.js +1 -0
  274. package/web-ui/build/static/jq-D_4bTCm0.js +1 -0
  275. package/web-ui/build/static/js-extras-Cx9VAZJd.js +1 -0
  276. package/web-ui/build/static/js-templates-BqyJUDxJ.js +1 -0
  277. package/web-ui/build/static/jsdoc-CNHLgAph.js +1 -0
  278. package/web-ui/build/static/json-BXIFrbVC.js +1 -0
  279. package/web-ui/build/static/json-DRUrJL_F.js +1 -0
  280. package/web-ui/build/static/json5-EsTrOpXr.js +1 -0
  281. package/web-ui/build/static/jsonp-RijEuTJY.js +1 -0
  282. package/web-ui/build/static/jsstacktrace-dM13uE1y.js +1 -0
  283. package/web-ui/build/static/jsx-Cf0j02DZ.js +1 -0
  284. package/web-ui/build/static/julia-BLrtj5Dj.js +1 -0
  285. package/web-ui/build/static/julia-D0PJgQhi.js +1 -0
  286. package/web-ui/build/static/julia-repl-BLnLCve4.js +1 -0
  287. package/web-ui/build/static/keepalived-SvzEYloD.js +1 -0
  288. package/web-ui/build/static/keyman-B5l2mmmE.js +1 -0
  289. package/web-ui/build/static/kotlin-B_6COR1e.js +1 -0
  290. package/web-ui/build/static/kotlin-vd1Xdz6D.js +1 -0
  291. package/web-ui/build/static/kumir-8mIZWgJQ.js +1 -0
  292. package/web-ui/build/static/kusto-CoV2oHqt.js +1 -0
  293. package/web-ui/build/static/lasso-BjjUNa_o.js +1 -0
  294. package/web-ui/build/static/latex-C9KOfuFk.js +1 -0
  295. package/web-ui/build/static/latex-DhLttY-I.js +1 -0
  296. package/web-ui/build/static/latte-CaYNaOoK.js +1 -0
  297. package/web-ui/build/static/ldif-DFxnpH3G.js +1 -0
  298. package/web-ui/build/static/leaf-DrMpC83a.js +1 -0
  299. package/web-ui/build/static/less-DUoYpEFn.js +1 -0
  300. package/web-ui/build/static/less-nh0XCcut.js +1 -0
  301. package/web-ui/build/static/lilypond-BlqjLr3W.js +1 -0
  302. package/web-ui/build/static/liquid-BVGHSG0T.js +1 -0
  303. package/web-ui/build/static/lisp-CEK8BtYQ.js +1 -0
  304. package/web-ui/build/static/lisp-D_jGHxhc.js +1 -0
  305. package/web-ui/build/static/livecodeserver-CFUDw_SK.js +1 -0
  306. package/web-ui/build/static/livescript-C5xzpiLM.js +1 -0
  307. package/web-ui/build/static/livescript-CKoPcK0c.js +1 -0
  308. package/web-ui/build/static/llvm-BBOVIeTl.js +1 -0
  309. package/web-ui/build/static/llvm-ioC5bCUB.js +1 -0
  310. package/web-ui/build/static/log-CPYTqm4T.js +1 -0
  311. package/web-ui/build/static/lolcode-BkT93adT.js +1 -0
  312. package/web-ui/build/static/lsl-M98YPNRW.js +1 -0
  313. package/web-ui/build/static/lua-D7Lum5n9.js +1 -0
  314. package/web-ui/build/static/lua-DHyr0QwE.js +1 -0
  315. package/web-ui/build/static/magma-BwMFjwQu.js +1 -0
  316. package/web-ui/build/static/makefile-BFYZ-SfG.js +1 -0
  317. package/web-ui/build/static/makefile-D6oyR2lD.js +1 -0
  318. package/web-ui/build/static/markdown-6jtg6KZm.js +1 -0
  319. package/web-ui/build/static/markdown-DTLtPgeP.js +1 -0
  320. package/web-ui/build/static/markup-templating-K8uoAIqY.js +1 -0
  321. package/web-ui/build/static/mathematica-cW5hOuB2.js +1 -0
  322. package/web-ui/build/static/matlab-CwSNWEq8.js +1 -0
  323. package/web-ui/build/static/matlab-MQ972BY-.js +1 -0
  324. package/web-ui/build/static/maxima-CMSFLri-.js +1 -0
  325. package/web-ui/build/static/maxscript-BzcoS2KA.js +1 -0
  326. package/web-ui/build/static/mel-Cd20pAs-.js +1 -0
  327. package/web-ui/build/static/mel-KWG5N49g.js +1 -0
  328. package/web-ui/build/static/mercury-eW1ljJh0.js +1 -0
  329. package/web-ui/build/static/mermaid-D3zeCM84.js +1 -0
  330. package/web-ui/build/static/mipsasm-B5g6Ndra.js +1 -0
  331. package/web-ui/build/static/mizar-C_nZ0Ts9.js +1 -0
  332. package/web-ui/build/static/mizar-CuTNEv2t.js +1 -0
  333. package/web-ui/build/static/mojolicious-C1Xq--lT.js +1 -0
  334. package/web-ui/build/static/mongodb-C_3giArw.js +1 -0
  335. package/web-ui/build/static/monkey-DQ1olPd-.js +1 -0
  336. package/web-ui/build/static/monkey-n4Tbrep7.js +1 -0
  337. package/web-ui/build/static/moonscript-CmnQJuIL.js +1 -0
  338. package/web-ui/build/static/moonscript-DXgmWjLy.js +1 -0
  339. package/web-ui/build/static/n1ql-531a3W-1.js +1 -0
  340. package/web-ui/build/static/n1ql-BYH9EvME.js +1 -0
  341. package/web-ui/build/static/n4js-Cy0LcM-V.js +1 -0
  342. package/web-ui/build/static/nand2tetris-hdl-CKOztBDD.js +1 -0
  343. package/web-ui/build/static/naniscript-oLFpxBGE.js +1 -0
  344. package/web-ui/build/static/nasm-DLPnwFkM.js +1 -0
  345. package/web-ui/build/static/neon-Cn03wGUR.js +1 -0
  346. package/web-ui/build/static/nevod-C_VRvbdf.js +1 -0
  347. package/web-ui/build/static/nginx-60SpLv4t.js +1 -0
  348. package/web-ui/build/static/nginx-DZLHid-q.js +1 -0
  349. package/web-ui/build/static/nim-BnrHdqGC.js +1 -0
  350. package/web-ui/build/static/nim-Ds3pmwtE.js +1 -0
  351. package/web-ui/build/static/nix-Dl-dS0w4.js +1 -0
  352. package/web-ui/build/static/nix-jL62FzTz.js +1 -0
  353. package/web-ui/build/static/node-repl-BAuDzNZd.js +1 -0
  354. package/web-ui/build/static/nsis-CEnFjfNr.js +1 -0
  355. package/web-ui/build/static/nsis-CcCz6HIu.js +1 -0
  356. package/web-ui/build/static/objectivec-CZXfVowS.js +1 -0
  357. package/web-ui/build/static/objectivec-CuaFU-Ef.js +1 -0
  358. package/web-ui/build/static/ocaml-BGAzfwAx.js +1 -0
  359. package/web-ui/build/static/ocaml-BoO1lU26.js +1 -0
  360. package/web-ui/build/static/opencl-DAnD5xP-.js +1 -0
  361. package/web-ui/build/static/openqasm-CO7gdVj9.js +1 -0
  362. package/web-ui/build/static/openscad-B2wMEMQR.js +1 -0
  363. package/web-ui/build/static/oxygene-1erv93gF.js +1 -0
  364. package/web-ui/build/static/oz-D3334gi7.js +1 -0
  365. package/web-ui/build/static/parigp-rQZTN8zi.js +1 -0
  366. package/web-ui/build/static/parser-B4ZSZ1ig.js +1 -0
  367. package/web-ui/build/static/parser3-CCCjkYLG.js +1 -0
  368. package/web-ui/build/static/pascal-DeC9Pvom.js +1 -0
  369. package/web-ui/build/static/pascaligo-CT2u6UpO.js +1 -0
  370. package/web-ui/build/static/pcaxis-CvlRg6t4.js +1 -0
  371. package/web-ui/build/static/peoplecode-BYahULz2.js +1 -0
  372. package/web-ui/build/static/perl-CKgvyY59.js +1 -0
  373. package/web-ui/build/static/perl-E7sx7Izv.js +1 -0
  374. package/web-ui/build/static/pf-D9wnFBt7.js +1 -0
  375. package/web-ui/build/static/pgsql-CrlBdRAn.js +1 -0
  376. package/web-ui/build/static/php-D2O-B3y7.js +1 -0
  377. package/web-ui/build/static/php-extras-BKqZuzgt.js +1 -0
  378. package/web-ui/build/static/php-nfXl9WfB.js +1 -0
  379. package/web-ui/build/static/php-template-Cg8ERLNQ.js +1 -0
  380. package/web-ui/build/static/phpdoc-Z1u90OwH.js +1 -0
  381. package/web-ui/build/static/plaintext-DkNVeXWx.js +1 -0
  382. package/web-ui/build/static/plsql-DO5fJNhS.js +1 -0
  383. package/web-ui/build/static/pony-DXIqq5Bk.js +1 -0
  384. package/web-ui/build/static/powerquery-B2ovxJZi.js +1 -0
  385. package/web-ui/build/static/powershell-BVeqqari.js +1 -0
  386. package/web-ui/build/static/powershell-CskV4qWh.js +1 -0
  387. package/web-ui/build/static/processing-D90SJpnq.js +1 -0
  388. package/web-ui/build/static/processing-DP2mf97Z.js +1 -0
  389. package/web-ui/build/static/profile-H6zk8v_f.js +1 -0
  390. package/web-ui/build/static/prolog-AUfxYiJV.js +1 -0
  391. package/web-ui/build/static/prolog-Dz2WdsVN.js +1 -0
  392. package/web-ui/build/static/promql-CloMJmMW.js +1 -0
  393. package/web-ui/build/static/properties-CTl3mnrP.js +1 -0
  394. package/web-ui/build/static/properties-D2RfteTZ.js +1 -0
  395. package/web-ui/build/static/protobuf-Be9oqQCu.js +1 -0
  396. package/web-ui/build/static/protobuf-BgG8zUnY.js +1 -0
  397. package/web-ui/build/static/psl-Bqx8iN9e.js +1 -0
  398. package/web-ui/build/static/pug-CHfFC0Wg.js +1 -0
  399. package/web-ui/build/static/puppet-__1ifzZS.js +1 -0
  400. package/web-ui/build/static/puppet-pbtRCMgd.js +1 -0
  401. package/web-ui/build/static/pure-B9STuf4F.js +1 -0
  402. package/web-ui/build/static/purebasic-7ADyn-Ce.js +1 -0
  403. package/web-ui/build/static/purebasic-Bc06YQcD.js +1 -0
  404. package/web-ui/build/static/purescript-CU-dDebr.js +1 -0
  405. package/web-ui/build/static/python-BEsXrEbi.js +1 -0
  406. package/web-ui/build/static/python-CZFrgH2X.js +1 -0
  407. package/web-ui/build/static/python-repl-CI9GmJce.js +1 -0
  408. package/web-ui/build/static/q-E7xvTGRo.js +1 -0
  409. package/web-ui/build/static/q-hvg9aQoY.js +1 -0
  410. package/web-ui/build/static/qml-DkZWcxEv.js +1 -0
  411. package/web-ui/build/static/qml-DpdWla8G.js +1 -0
  412. package/web-ui/build/static/qore-Dsm7ACR_.js +1 -0
  413. package/web-ui/build/static/qsharp-BBec6MJR.js +1 -0
  414. package/web-ui/build/static/r-CTVkq_Ky.js +1 -0
  415. package/web-ui/build/static/r-DHGNCupF.js +1 -0
  416. package/web-ui/build/static/racket-hoSh4YPx.js +1 -0
  417. package/web-ui/build/static/reason-CQPUIbsm.js +1 -0
  418. package/web-ui/build/static/reasonml-BXtFFSTZ.js +1 -0
  419. package/web-ui/build/static/regex-BNkF_ufb.js +1 -0
  420. package/web-ui/build/static/rego-BXHrjItC.js +1 -0
  421. package/web-ui/build/static/renpy-CBQvK_5t.js +1 -0
  422. package/web-ui/build/static/rest-Bf8hzmF1.js +1 -0
  423. package/web-ui/build/static/rib-D0a4KzlP.js +1 -0
  424. package/web-ui/build/static/rip-DchN4BQN.js +1 -0
  425. package/web-ui/build/static/roboconf-HXnyGNTm.js +1 -0
  426. package/web-ui/build/static/roboconf-zfK6mgmU.js +1 -0
  427. package/web-ui/build/static/robotframework-DnP-vXyd.js +1 -0
  428. package/web-ui/build/static/routeros-CDirYxZY.js +1 -0
  429. package/web-ui/build/static/rsl-BCK_msc-.js +1 -0
  430. package/web-ui/build/static/ruby--mXX6GNK.js +1 -0
  431. package/web-ui/build/static/ruby-BIdQYq0Y.js +1 -0
  432. package/web-ui/build/static/ruleslanguage-BD07s5RU.js +1 -0
  433. package/web-ui/build/static/rust-Bgni9V7U.js +1 -0
  434. package/web-ui/build/static/rust-OywmQ2ox.js +1 -0
  435. package/web-ui/build/static/sas-B6-82htH.js +1 -0
  436. package/web-ui/build/static/sas-k9XEScbR.js +1 -0
  437. package/web-ui/build/static/sass-BOvNBStT.js +1 -0
  438. package/web-ui/build/static/scala-At07fmMd.js +1 -0
  439. package/web-ui/build/static/scala-DUOfqSaU.js +1 -0
  440. package/web-ui/build/static/scheme-B87lC0bK.js +1 -0
  441. package/web-ui/build/static/scheme-BS7OzWRX.js +1 -0
  442. package/web-ui/build/static/scilab-Bmn4jjcu.js +1 -0
  443. package/web-ui/build/static/scss-DTeB95yE.js +1 -0
  444. package/web-ui/build/static/scss-xilnl6Dx.js +1 -0
  445. package/web-ui/build/static/shell-CKetyy4y.js +1 -0
  446. package/web-ui/build/static/shell-session-B6rat2c7.js +1 -0
  447. package/web-ui/build/static/smali-C9O9CXOD.js +1 -0
  448. package/web-ui/build/static/smali-CBkgbinS.js +1 -0
  449. package/web-ui/build/static/smalltalk-CuUjFHiz.js +1 -0
  450. package/web-ui/build/static/smalltalk-D0xhFL9b.js +1 -0
  451. package/web-ui/build/static/smarty-CY0N0d5x.js +1 -0
  452. package/web-ui/build/static/sml-BVAw3fjB.js +1 -0
  453. package/web-ui/build/static/sml-CO9XB1ax.js +1 -0
  454. package/web-ui/build/static/solidity-BNixD4Dx.js +1 -0
  455. package/web-ui/build/static/solution-file-DHyGXf2y.js +1 -0
  456. package/web-ui/build/static/soy-Cxgjntsl.js +1 -0
  457. package/web-ui/build/static/sparql-CDLqu9vy.js +1 -0
  458. package/web-ui/build/static/splunk-spl-Cmkl_Xmw.js +1 -0
  459. package/web-ui/build/static/sqf-CIGKolw3.js +1 -0
  460. package/web-ui/build/static/sqf-Cfp_lC6-.js +1 -0
  461. package/web-ui/build/static/sql-DHOGwYxe.js +1 -0
  462. package/web-ui/build/static/sql-QIw1Q2yi.js +1 -0
  463. package/web-ui/build/static/sql_more-C0b3-InT.js +1 -0
  464. package/web-ui/build/static/squirrel-DASToo1F.js +1 -0
  465. package/web-ui/build/static/stan-DHMkcFZg.js +1 -0
  466. package/web-ui/build/static/stan-No3nsdnQ.js +1 -0
  467. package/web-ui/build/static/stata-Brkzu5Nv.js +1 -0
  468. package/web-ui/build/static/step21-D2l5M5Ml.js +1 -0
  469. package/web-ui/build/static/stylus-Bx6FaZN_.js +1 -0
  470. package/web-ui/build/static/stylus-CVkTaPns.js +1 -0
  471. package/web-ui/build/static/subunit-CDrsAMuL.js +1 -0
  472. package/web-ui/build/static/swift-BSw_pS-l.js +1 -0
  473. package/web-ui/build/static/swift-BWyqwIo8.js +1 -0
  474. package/web-ui/build/static/systemd-BwqpYcJK.js +1 -0
  475. package/web-ui/build/static/t4-cs-CwsJLOxV.js +1 -0
  476. package/web-ui/build/static/t4-templating-BfxY01xf.js +1 -0
  477. package/web-ui/build/static/t4-vb-BhsKKFhp.js +1 -0
  478. package/web-ui/build/static/taggerscript-Bkew95or.js +1 -0
  479. package/web-ui/build/static/tap-DHovcHbS.js +1 -0
  480. package/web-ui/build/static/tap-DPl9uPo4.js +1 -0
  481. package/web-ui/build/static/tcl-BeozHO-f.js +1 -0
  482. package/web-ui/build/static/tcl-Df_8ItQH.js +1 -0
  483. package/web-ui/build/static/textile-B3m_f58b.js +1 -0
  484. package/web-ui/build/static/thrift-D20n-HpW.js +1 -0
  485. package/web-ui/build/static/toml-C-fTAonK.js +1 -0
  486. package/web-ui/build/static/tp-hGbXe5Eo.js +1 -0
  487. package/web-ui/build/static/tremor-BaVOtRFz.js +1 -0
  488. package/web-ui/build/static/tsx-ChPInNl0.js +1 -0
  489. package/web-ui/build/static/tt2-DAIJ8cpz.js +1 -0
  490. package/web-ui/build/static/turtle-B7z_y-PK.js +1 -0
  491. package/web-ui/build/static/twig-TUEkve6W.js +1 -0
  492. package/web-ui/build/static/twig-stKDItz7.js +1 -0
  493. package/web-ui/build/static/typescript-BPdM-QOM.js +1 -0
  494. package/web-ui/build/static/typescript-DjSY4MvL.js +1 -0
  495. package/web-ui/build/static/typoscript-BQHgQtEL.js +1 -0
  496. package/web-ui/build/static/unrealscript-g8yNPQQ5.js +1 -0
  497. package/web-ui/build/static/uorazor-CnuMiQz9.js +1 -0
  498. package/web-ui/build/static/uri-CfioiemU.js +1 -0
  499. package/web-ui/build/static/v-B69Oau14.js +1 -0
  500. package/web-ui/build/static/vala-C0PjlK3l.js +1 -0
  501. package/web-ui/build/static/vala-COgjD3gU.js +1 -0
  502. package/web-ui/build/static/vbnet-CklOnyuR.js +1 -0
  503. package/web-ui/build/static/vbnet-MxHUC5Mz.js +1 -0
  504. package/web-ui/build/static/vbscript-BxQnA97w.js +1 -0
  505. package/web-ui/build/static/vbscript-html-DOtde7dD.js +1 -0
  506. package/web-ui/build/static/velocity-l8B9m66X.js +1 -0
  507. package/web-ui/build/static/verilog-DF6dF-Vp.js +1 -0
  508. package/web-ui/build/static/verilog-Dgb9SDRX.js +1 -0
  509. package/web-ui/build/static/vhdl-0GarU_AK.js +1 -0
  510. package/web-ui/build/static/vhdl-BfPQnOdI.js +1 -0
  511. package/web-ui/build/static/vim-Likg_-II.js +1 -0
  512. package/web-ui/build/static/vim-k53Sj7A3.js +1 -0
  513. package/web-ui/build/static/visual-basic-BNVZCzlV.js +1 -0
  514. package/web-ui/build/static/warpscript-BkLK5iuW.js +1 -0
  515. package/web-ui/build/static/wasm-CQhA1ece.js +1 -0
  516. package/web-ui/build/static/web-idl-DmNsI0kE.js +1 -0
  517. package/web-ui/build/static/wiki-B3z4pmra.js +1 -0
  518. package/web-ui/build/static/wolfram-Dsf21d_g.js +1 -0
  519. package/web-ui/build/static/wren-BZXZlzrL.js +1 -0
  520. package/web-ui/build/static/x86asm-DpWGZhJU.js +1 -0
  521. package/web-ui/build/static/xeora-8xPZN4DH.js +1 -0
  522. package/web-ui/build/static/xl-XkdWYMGl.js +1 -0
  523. package/web-ui/build/static/xml-BBdROEWt.js +1 -0
  524. package/web-ui/build/static/xml-doc-Cjs4OpTe.js +1 -0
  525. package/web-ui/build/static/xojo-nCen1FPx.js +1 -0
  526. package/web-ui/build/static/xquery-CBFkAxo1.js +1 -0
  527. package/web-ui/build/static/xquery-Dwsc1weX.js +1 -0
  528. package/web-ui/build/static/yaml-DzSAh6jl.js +1 -0
  529. package/web-ui/build/static/yaml-Lg8gnEUU.js +1 -0
  530. package/web-ui/build/static/yang-Bd-v2b0k.js +1 -0
  531. package/web-ui/build/static/zephir-wbJOizIa.js +1 -0
  532. package/web-ui/build/static/zig-Cz384XjE.js +1 -0
  533. package/web-ui/build/static/1c-Cxgysx0K.js +0 -1
  534. package/web-ui/build/static/abap-D9Pd8DUG.js +0 -1
  535. package/web-ui/build/static/abnf-CHs5P8yl.js +0 -1
  536. package/web-ui/build/static/abnf-D5OtFEZO.js +0 -1
  537. package/web-ui/build/static/accesslog-CTD5Frmr.js +0 -1
  538. package/web-ui/build/static/actionscript-BN0BKQI7.js +0 -1
  539. package/web-ui/build/static/actionscript-DQNwbYlU.js +0 -1
  540. package/web-ui/build/static/ada-8O7AmGii.js +0 -1
  541. package/web-ui/build/static/ada-p8y2qCLB.js +0 -1
  542. package/web-ui/build/static/agda-BzT4bKSx.js +0 -1
  543. package/web-ui/build/static/al-Caq7o9RG.js +0 -1
  544. package/web-ui/build/static/angelscript-DivMpSHf.js +0 -1
  545. package/web-ui/build/static/antlr4-B1D_tnKH.js +0 -1
  546. package/web-ui/build/static/apache-l88_LooT.js +0 -1
  547. package/web-ui/build/static/apacheconf-kaxXABFE.js +0 -1
  548. package/web-ui/build/static/apex-CSdSRWUv.js +0 -1
  549. package/web-ui/build/static/apl-CHwVg89T.js +0 -1
  550. package/web-ui/build/static/applescript-C64qdYZf.js +0 -1
  551. package/web-ui/build/static/applescript-CqTGrBVp.js +0 -1
  552. package/web-ui/build/static/aql-BwKKr7z7.js +0 -1
  553. package/web-ui/build/static/arcade-C6oqHEwh.js +0 -1
  554. package/web-ui/build/static/arduino-DB4E20Km.js +0 -1
  555. package/web-ui/build/static/arduino-DKpgmHjE.js +0 -1
  556. package/web-ui/build/static/arff-CBbf8E8O.js +0 -1
  557. package/web-ui/build/static/armasm-Bogg7lrz.js +0 -1
  558. package/web-ui/build/static/asciidoc-3ZlDsfKD.js +0 -1
  559. package/web-ui/build/static/asciidoc-Cc88g_au.js +0 -1
  560. package/web-ui/build/static/asm6502-B4rN-vZ1.js +0 -1
  561. package/web-ui/build/static/asmatmel-B8zZLWGk.js +0 -1
  562. package/web-ui/build/static/aspectj-XdNtCtbN.js +0 -1
  563. package/web-ui/build/static/aspnet-DZVKB5n1.js +0 -1
  564. package/web-ui/build/static/autohotkey-CxDWLQqM.js +0 -1
  565. package/web-ui/build/static/autohotkey-DJStPrtS.js +0 -1
  566. package/web-ui/build/static/autoit-BWirJOCg.js +0 -1
  567. package/web-ui/build/static/autoit-CJcfmsnl.js +0 -1
  568. package/web-ui/build/static/avisynth-C7JQe3L7.js +0 -1
  569. package/web-ui/build/static/avrasm-CMiuHQvu.js +0 -1
  570. package/web-ui/build/static/avro-idl-kaRVyxMP.js +0 -1
  571. package/web-ui/build/static/awk-CQ70Cyh1.js +0 -1
  572. package/web-ui/build/static/axapta-DRxAzlG8.js +0 -1
  573. package/web-ui/build/static/bash-B2XqEYpT.js +0 -1
  574. package/web-ui/build/static/bash-D-D1taMA.js +0 -1
  575. package/web-ui/build/static/basic-Da1x7OIZ.js +0 -1
  576. package/web-ui/build/static/basic-Dslk2ZwT.js +0 -1
  577. package/web-ui/build/static/batch-B0wJNPoF.js +0 -1
  578. package/web-ui/build/static/bbcode-BXDdc2HS.js +0 -1
  579. package/web-ui/build/static/bicep-iiH-nx9J.js +0 -1
  580. package/web-ui/build/static/birb-DuTqqibI.js +0 -1
  581. package/web-ui/build/static/bison-D1Hw6owA.js +0 -1
  582. package/web-ui/build/static/bnf-BRhzfr87.js +0 -1
  583. package/web-ui/build/static/bnf-u1Iy1Ku7.js +0 -1
  584. package/web-ui/build/static/brainfuck-C4R5VJ3_.js +0 -1
  585. package/web-ui/build/static/brainfuck-C8niWF0i.js +0 -1
  586. package/web-ui/build/static/brightscript-DavMfkHx.js +0 -1
  587. package/web-ui/build/static/bro-CEMPoYum.js +0 -1
  588. package/web-ui/build/static/bsl-COeqiMqc.js +0 -1
  589. package/web-ui/build/static/c-BaaVQwFt.js +0 -1
  590. package/web-ui/build/static/c-BvALLiMv.js +0 -1
  591. package/web-ui/build/static/c-like-C4yx6s7b.js +0 -1
  592. package/web-ui/build/static/cal-CSxgKgNR.js +0 -1
  593. package/web-ui/build/static/capnproto-C9cMEmIo.js +0 -1
  594. package/web-ui/build/static/ceylon-Dj67Lf2T.js +0 -1
  595. package/web-ui/build/static/cfscript-BhALECgj.js +0 -1
  596. package/web-ui/build/static/chaiscript-Cg5weNRB.js +0 -1
  597. package/web-ui/build/static/cil-BR-JCsPu.js +0 -1
  598. package/web-ui/build/static/clean-xJMmqZ4X.js +0 -1
  599. package/web-ui/build/static/clojure-9C3tRo_T.js +0 -1
  600. package/web-ui/build/static/clojure-C2KNwa0h.js +0 -1
  601. package/web-ui/build/static/clojure-repl-B-pke3nS.js +0 -1
  602. package/web-ui/build/static/cmake-C0BFHpjZ.js +0 -1
  603. package/web-ui/build/static/cmake-DYoa_Kz_.js +0 -1
  604. package/web-ui/build/static/cobol-Bj_qcMsY.js +0 -1
  605. package/web-ui/build/static/coffeescript-C2KEz8d0.js +0 -1
  606. package/web-ui/build/static/coffeescript-CQsP9N_M.js +0 -1
  607. package/web-ui/build/static/concurnas-Ceu24KQb.js +0 -1
  608. package/web-ui/build/static/coq-CP7VW0bo.js +0 -1
  609. package/web-ui/build/static/coq-DQry0I8v.js +0 -1
  610. package/web-ui/build/static/cos-DAjhu7pi.js +0 -1
  611. package/web-ui/build/static/cpp-BwHJ0JtK.js +0 -1
  612. package/web-ui/build/static/cpp-Dro3stzS.js +0 -1
  613. package/web-ui/build/static/crmsh-Bnwknpi9.js +0 -1
  614. package/web-ui/build/static/crystal-B7TVeIo6.js +0 -1
  615. package/web-ui/build/static/crystal-Cy5JlSrW.js +0 -1
  616. package/web-ui/build/static/csharp-CeouYZK3.js +0 -1
  617. package/web-ui/build/static/csharp-Dv2oxLAS.js +0 -1
  618. package/web-ui/build/static/cshtml-C9IRHsFH.js +0 -1
  619. package/web-ui/build/static/csp-C85pVqYT.js +0 -1
  620. package/web-ui/build/static/csp-MJntgwIj.js +0 -1
  621. package/web-ui/build/static/css-DWTfQjN4.js +0 -1
  622. package/web-ui/build/static/css-extras-BmVbsPjr.js +0 -1
  623. package/web-ui/build/static/csv-zUw-JkSo.js +0 -1
  624. package/web-ui/build/static/cypher-DQOOp0bG.js +0 -1
  625. package/web-ui/build/static/d-B7Cku9c8.js +0 -1
  626. package/web-ui/build/static/d-Lnzvs4Wd.js +0 -1
  627. package/web-ui/build/static/dart-CeK_W9Mg.js +0 -1
  628. package/web-ui/build/static/dart-Z5nwVCn_.js +0 -1
  629. package/web-ui/build/static/dataweave-Bv7GTsiJ.js +0 -1
  630. package/web-ui/build/static/dax-CxkNT7ml.js +0 -1
  631. package/web-ui/build/static/delphi-BnBBHmHI.js +0 -1
  632. package/web-ui/build/static/dhall-DzzkunJZ.js +0 -1
  633. package/web-ui/build/static/diff-BKZzYJzc.js +0 -1
  634. package/web-ui/build/static/diff-BfTiUZV3.js +0 -1
  635. package/web-ui/build/static/django-BY4l8873.js +0 -1
  636. package/web-ui/build/static/django-NRVGlUZ_.js +0 -1
  637. package/web-ui/build/static/dns-Dvc8YawT.js +0 -1
  638. package/web-ui/build/static/dns-zone-file-CkaiOrlK.js +0 -1
  639. package/web-ui/build/static/docker-BQXYNHPO.js +0 -1
  640. package/web-ui/build/static/dockerfile-CkHfYmB1.js +0 -1
  641. package/web-ui/build/static/dos-Cj0YcQAg.js +0 -1
  642. package/web-ui/build/static/dot-zgBkKTS-.js +0 -1
  643. package/web-ui/build/static/dsconfig-Yy07ZSap.js +0 -1
  644. package/web-ui/build/static/dts-DyTWnuFT.js +0 -1
  645. package/web-ui/build/static/dust-CKq7f4u7.js +0 -1
  646. package/web-ui/build/static/ebnf-DJRrwYUt.js +0 -1
  647. package/web-ui/build/static/ebnf-RHbRUELR.js +0 -1
  648. package/web-ui/build/static/editorconfig-BPnyfBW2.js +0 -1
  649. package/web-ui/build/static/eiffel-yj-2JB74.js +0 -1
  650. package/web-ui/build/static/ejs-DitQDEAj.js +0 -1
  651. package/web-ui/build/static/elixir-3QGdRPiZ.js +0 -1
  652. package/web-ui/build/static/elixir-DjVihWJd.js +0 -1
  653. package/web-ui/build/static/elm-BY6TIO5U.js +0 -1
  654. package/web-ui/build/static/elm-CRkIBVgc.js +0 -1
  655. package/web-ui/build/static/erb-Djhpl6Qv.js +0 -1
  656. package/web-ui/build/static/erb-T-e_0q4M.js +0 -1
  657. package/web-ui/build/static/erlang-BHne0Sow.js +0 -1
  658. package/web-ui/build/static/erlang-BwFMbXMn.js +0 -1
  659. package/web-ui/build/static/erlang-repl-BkeLNBB1.js +0 -1
  660. package/web-ui/build/static/etlua-C7wAJl9b.js +0 -1
  661. package/web-ui/build/static/excel-DxE1g8nj.js +0 -1
  662. package/web-ui/build/static/excel-formula-CJfyOSIQ.js +0 -1
  663. package/web-ui/build/static/factor-CoKZ2w9G.js +0 -1
  664. package/web-ui/build/static/false-R3UgYwdZ.js +0 -1
  665. package/web-ui/build/static/firestore-security-rules-Na-FK95T.js +0 -1
  666. package/web-ui/build/static/fix-CvUjGqrP.js +0 -1
  667. package/web-ui/build/static/flix-DZcdobtd.js +0 -1
  668. package/web-ui/build/static/flow-Bs4ybDfF.js +0 -1
  669. package/web-ui/build/static/fortran-Bo7HQHVz.js +0 -1
  670. package/web-ui/build/static/fortran-C01QKAjv.js +0 -1
  671. package/web-ui/build/static/fsharp-Bl0db-E4.js +0 -1
  672. package/web-ui/build/static/fsharp-CyZIu__H.js +0 -1
  673. package/web-ui/build/static/ftl-CWXbnuJ8.js +0 -1
  674. package/web-ui/build/static/gams-BqHeBOiK.js +0 -1
  675. package/web-ui/build/static/gap-Dotaw9CX.js +0 -1
  676. package/web-ui/build/static/gauss-BT78eAPL.js +0 -1
  677. package/web-ui/build/static/gcode-MKCsCHbV.js +0 -1
  678. package/web-ui/build/static/gcode-bZIzS7dq.js +0 -1
  679. package/web-ui/build/static/gdscript-BfFdzROd.js +0 -1
  680. package/web-ui/build/static/gedcom-C-0fkvQT.js +0 -1
  681. package/web-ui/build/static/gherkin-Bgefs1Ac.js +0 -1
  682. package/web-ui/build/static/gherkin-BwLhttSG.js +0 -1
  683. package/web-ui/build/static/git-Cf3XNFwK.js +0 -1
  684. package/web-ui/build/static/glsl-BRBvgtKX.js +0 -1
  685. package/web-ui/build/static/glsl-Ci0Ywihb.js +0 -1
  686. package/web-ui/build/static/gml-BGED3ZV5.js +0 -1
  687. package/web-ui/build/static/gml-Bo5ybH2Z.js +0 -1
  688. package/web-ui/build/static/gn-Dvq3uq8q.js +0 -1
  689. package/web-ui/build/static/go-DEXubI7V.js +0 -1
  690. package/web-ui/build/static/go-DQ-rOBtr.js +0 -1
  691. package/web-ui/build/static/go-module-CJ0C_rZQ.js +0 -1
  692. package/web-ui/build/static/golo-BMZyESOG.js +0 -1
  693. package/web-ui/build/static/gradle-DamtVT5m.js +0 -1
  694. package/web-ui/build/static/graphql-BERukF58.js +0 -1
  695. package/web-ui/build/static/groovy-B-WmRKEQ.js +0 -1
  696. package/web-ui/build/static/groovy-BzgGHCpW.js +0 -1
  697. package/web-ui/build/static/haml-B50hpu0J.js +0 -1
  698. package/web-ui/build/static/haml-vZAqNnLr.js +0 -1
  699. package/web-ui/build/static/handlebars-ChvSiZA5.js +0 -1
  700. package/web-ui/build/static/handlebars-z32GTNvC.js +0 -1
  701. package/web-ui/build/static/haskell-BWLVCHRl.js +0 -1
  702. package/web-ui/build/static/haskell-CZ4HT-QV.js +0 -1
  703. package/web-ui/build/static/haxe-Dff2UzKb.js +0 -1
  704. package/web-ui/build/static/haxe-DtUMfT4Y.js +0 -1
  705. package/web-ui/build/static/hcl-CPdCn21C.js +0 -1
  706. package/web-ui/build/static/hlsl-Ddnzpafa.js +0 -1
  707. package/web-ui/build/static/hoon-BmzYN5g6.js +0 -1
  708. package/web-ui/build/static/hpkp-Cf4BtYzp.js +0 -1
  709. package/web-ui/build/static/hsp-CtNdizh5.js +0 -1
  710. package/web-ui/build/static/hsts-ChmUnrWY.js +0 -1
  711. package/web-ui/build/static/htmlbars-FvxUz397.js +0 -1
  712. package/web-ui/build/static/http-C91BqIc4.js +0 -1
  713. package/web-ui/build/static/http-DUkMpz6R.js +0 -1
  714. package/web-ui/build/static/hy-BgEorqc6.js +0 -1
  715. package/web-ui/build/static/ichigojam-CyJ85XqZ.js +0 -1
  716. package/web-ui/build/static/icon-CWVwUSUB.js +0 -1
  717. package/web-ui/build/static/icu-message-format-DQ5Vf-57.js +0 -1
  718. package/web-ui/build/static/idris-25epvnkz.js +0 -1
  719. package/web-ui/build/static/iecst-D_Q4A3Ao.js +0 -1
  720. package/web-ui/build/static/ignore-Dn3TUem-.js +0 -1
  721. package/web-ui/build/static/index-1GAqwN2P.js +0 -1029
  722. package/web-ui/build/static/index-Bbt0N_qA.css +0 -1
  723. package/web-ui/build/static/index-COM0znG6.js +0 -13
  724. package/web-ui/build/static/index-Cq1FjdFd.js +0 -1
  725. package/web-ui/build/static/inform7-CFrNuUCE.js +0 -1
  726. package/web-ui/build/static/inform7-DKEqg7Td.js +0 -1
  727. package/web-ui/build/static/ini-C-WeV3rA.js +0 -1
  728. package/web-ui/build/static/ini-DNeLlQLb.js +0 -1
  729. package/web-ui/build/static/io-CHx2lS-R.js +0 -1
  730. package/web-ui/build/static/irpf90-D4fNrYKT.js +0 -1
  731. package/web-ui/build/static/isbl-BwxgZUmw.js +0 -1
  732. package/web-ui/build/static/j-EkuSi-Ss.js +0 -1
  733. package/web-ui/build/static/java-BtphFsNb.js +0 -1
  734. package/web-ui/build/static/java-D6Ksxtks.js +0 -1
  735. package/web-ui/build/static/javadoc-COfrpXIF.js +0 -1
  736. package/web-ui/build/static/javadoclike-C0DIBgSo.js +0 -1
  737. package/web-ui/build/static/javascript-D9_bdns_.js +0 -1
  738. package/web-ui/build/static/javastacktrace-BgesTIoE.js +0 -1
  739. package/web-ui/build/static/jboss-cli-BCBm8RaA.js +0 -1
  740. package/web-ui/build/static/jexl-Bur7gjJl.js +0 -1
  741. package/web-ui/build/static/jolie-CG2HtqVF.js +0 -1
  742. package/web-ui/build/static/jq-BjcZo4Ta.js +0 -1
  743. package/web-ui/build/static/js-extras-DPWP-xWb.js +0 -1
  744. package/web-ui/build/static/js-templates-BYQFylC_.js +0 -1
  745. package/web-ui/build/static/jsdoc-CiOxmgl5.js +0 -1
  746. package/web-ui/build/static/json-C2-b3Xpo.js +0 -1
  747. package/web-ui/build/static/json-D7ok2MJS.js +0 -1
  748. package/web-ui/build/static/json5-DRNOdkus.js +0 -1
  749. package/web-ui/build/static/jsonp-FFJzAxUk.js +0 -1
  750. package/web-ui/build/static/jsstacktrace-C4ki-LaP.js +0 -1
  751. package/web-ui/build/static/jsx-ZxGQpUNq.js +0 -1
  752. package/web-ui/build/static/julia-7ooB8a4b.js +0 -1
  753. package/web-ui/build/static/julia-DzjCRNEr.js +0 -1
  754. package/web-ui/build/static/julia-repl-pceaZSLt.js +0 -1
  755. package/web-ui/build/static/keepalived-BQgTZddo.js +0 -1
  756. package/web-ui/build/static/keyman-Cqlba6tn.js +0 -1
  757. package/web-ui/build/static/kotlin-BygmvqBG.js +0 -1
  758. package/web-ui/build/static/kotlin-DrN0ycN8.js +0 -1
  759. package/web-ui/build/static/kumir-YhasANvI.js +0 -1
  760. package/web-ui/build/static/kusto-LQa6MD2B.js +0 -1
  761. package/web-ui/build/static/lasso-Ca3RFbcE.js +0 -1
  762. package/web-ui/build/static/latex-BoQj21fG.js +0 -1
  763. package/web-ui/build/static/latex-ZxewREOs.js +0 -1
  764. package/web-ui/build/static/latte-40SpSG4q.js +0 -1
  765. package/web-ui/build/static/ldif-CzTJxBjJ.js +0 -1
  766. package/web-ui/build/static/leaf-DO9LaVNe.js +0 -1
  767. package/web-ui/build/static/less-BoClFdvD.js +0 -1
  768. package/web-ui/build/static/less-C1s1U6-n.js +0 -1
  769. package/web-ui/build/static/lilypond-D5wHKW8A.js +0 -1
  770. package/web-ui/build/static/liquid-BRQzL-S2.js +0 -1
  771. package/web-ui/build/static/lisp-8q-QRYKi.js +0 -1
  772. package/web-ui/build/static/lisp-J8TPaPPb.js +0 -1
  773. package/web-ui/build/static/livecodeserver-Dcr3yGmD.js +0 -1
  774. package/web-ui/build/static/livescript-BUEQmlAe.js +0 -1
  775. package/web-ui/build/static/livescript-DsId63Ot.js +0 -1
  776. package/web-ui/build/static/llvm-B3CCzYxo.js +0 -1
  777. package/web-ui/build/static/llvm-kQGfyqnj.js +0 -1
  778. package/web-ui/build/static/log-BlA5152b.js +0 -1
  779. package/web-ui/build/static/lolcode-8WRAMeb2.js +0 -1
  780. package/web-ui/build/static/lsl-BZUMQNE2.js +0 -1
  781. package/web-ui/build/static/lua-C4hJ-Gql.js +0 -1
  782. package/web-ui/build/static/lua-RxOeZV_z.js +0 -1
  783. package/web-ui/build/static/magma-U9kYv2QD.js +0 -1
  784. package/web-ui/build/static/makefile-1Cu2rVDg.js +0 -1
  785. package/web-ui/build/static/makefile-mmZ8lbad.js +0 -1
  786. package/web-ui/build/static/markdown-CCqDOXhR.js +0 -1
  787. package/web-ui/build/static/markdown-CVOmqzdD.js +0 -1
  788. package/web-ui/build/static/markup-templating-C7eiVR0j.js +0 -1
  789. package/web-ui/build/static/mathematica-BbKHQ6zH.js +0 -1
  790. package/web-ui/build/static/matlab-BbMwJ6T0.js +0 -1
  791. package/web-ui/build/static/matlab-gHn5UhMb.js +0 -1
  792. package/web-ui/build/static/maxima-CuB3n0ri.js +0 -1
  793. package/web-ui/build/static/maxscript-jhOix4gn.js +0 -1
  794. package/web-ui/build/static/mel-Bpjqa7Ec.js +0 -1
  795. package/web-ui/build/static/mel-QxMxBq03.js +0 -1
  796. package/web-ui/build/static/mercury-C8IdDyFB.js +0 -1
  797. package/web-ui/build/static/mermaid-v41WDixf.js +0 -1
  798. package/web-ui/build/static/mipsasm-kYH27KXy.js +0 -1
  799. package/web-ui/build/static/mizar-BCJI9Jxa.js +0 -1
  800. package/web-ui/build/static/mizar-BCxP_6pj.js +0 -1
  801. package/web-ui/build/static/mojolicious-C7DC_CUp.js +0 -1
  802. package/web-ui/build/static/mongodb-DvBX00WY.js +0 -1
  803. package/web-ui/build/static/monkey-B7KjOZtt.js +0 -1
  804. package/web-ui/build/static/monkey-CFKZd6lx.js +0 -1
  805. package/web-ui/build/static/moonscript-44jD_uAZ.js +0 -1
  806. package/web-ui/build/static/moonscript-B3KahKf5.js +0 -1
  807. package/web-ui/build/static/n1ql-CxJOkBbD.js +0 -1
  808. package/web-ui/build/static/n1ql-FJFE6P7E.js +0 -1
  809. package/web-ui/build/static/n4js-D5jJTGdO.js +0 -1
  810. package/web-ui/build/static/nand2tetris-hdl-DlsCaky2.js +0 -1
  811. package/web-ui/build/static/naniscript-C3YsvWgN.js +0 -1
  812. package/web-ui/build/static/nasm-DCGKvOZq.js +0 -1
  813. package/web-ui/build/static/neon-nyFNinx-.js +0 -1
  814. package/web-ui/build/static/nevod-C5PnMzAW.js +0 -1
  815. package/web-ui/build/static/nginx-BUgMakda.js +0 -1
  816. package/web-ui/build/static/nginx-C5JBKsuz.js +0 -1
  817. package/web-ui/build/static/nim-BFu6fQgc.js +0 -1
  818. package/web-ui/build/static/nim-D0uh-nR9.js +0 -1
  819. package/web-ui/build/static/nix-BiOn3l1e.js +0 -1
  820. package/web-ui/build/static/nix-tapJszPl.js +0 -1
  821. package/web-ui/build/static/node-repl-BTp9CFzE.js +0 -1
  822. package/web-ui/build/static/nsis-B7hV5A06.js +0 -1
  823. package/web-ui/build/static/nsis-DLshnCv-.js +0 -1
  824. package/web-ui/build/static/objectivec-BKjt_sKE.js +0 -1
  825. package/web-ui/build/static/objectivec-KUMYgk5w.js +0 -1
  826. package/web-ui/build/static/ocaml-CV2nKA_A.js +0 -1
  827. package/web-ui/build/static/ocaml-ZyZ-dXmE.js +0 -1
  828. package/web-ui/build/static/opencl-igIWfc0n.js +0 -1
  829. package/web-ui/build/static/openqasm-ByCPmCpS.js +0 -1
  830. package/web-ui/build/static/openscad-Db6ypam1.js +0 -1
  831. package/web-ui/build/static/oxygene-CBbaQWRB.js +0 -1
  832. package/web-ui/build/static/oz-lEl_mXVw.js +0 -1
  833. package/web-ui/build/static/parigp-c2FbheBr.js +0 -1
  834. package/web-ui/build/static/parser-Ba6uivHf.js +0 -1
  835. package/web-ui/build/static/parser3-Cm5cgVSQ.js +0 -1
  836. package/web-ui/build/static/pascal-JgY-dd52.js +0 -1
  837. package/web-ui/build/static/pascaligo-BjSdyegq.js +0 -1
  838. package/web-ui/build/static/pcaxis-CDdxDfqJ.js +0 -1
  839. package/web-ui/build/static/peoplecode-BCPhsbK6.js +0 -1
  840. package/web-ui/build/static/perl-ClVPikLH.js +0 -1
  841. package/web-ui/build/static/perl-pRjXJ4uc.js +0 -1
  842. package/web-ui/build/static/pf-D6VrFfuf.js +0 -1
  843. package/web-ui/build/static/pgsql-DAv4ezCU.js +0 -1
  844. package/web-ui/build/static/php-Bz3Bn1G_.js +0 -1
  845. package/web-ui/build/static/php-extras-B8k1hZ7O.js +0 -1
  846. package/web-ui/build/static/php-template-DJJiMC8Q.js +0 -1
  847. package/web-ui/build/static/php-zCXGNRnB.js +0 -1
  848. package/web-ui/build/static/phpdoc-CpnPjGDk.js +0 -1
  849. package/web-ui/build/static/plaintext-BRkRKfKN.js +0 -1
  850. package/web-ui/build/static/plsql-BARhkvBo.js +0 -1
  851. package/web-ui/build/static/pony-guYTDEtj.js +0 -1
  852. package/web-ui/build/static/powerquery-DcM2Yj3O.js +0 -1
  853. package/web-ui/build/static/powershell-DJ8ftCxt.js +0 -1
  854. package/web-ui/build/static/powershell-DSRUQzqt.js +0 -1
  855. package/web-ui/build/static/processing-BCmW5Adu.js +0 -1
  856. package/web-ui/build/static/processing-DDMjYIa-.js +0 -1
  857. package/web-ui/build/static/profile-C9J13WXr.js +0 -1
  858. package/web-ui/build/static/prolog-CUyUfIUU.js +0 -1
  859. package/web-ui/build/static/prolog-wjvrQEy3.js +0 -1
  860. package/web-ui/build/static/promql-BkN3_kL1.js +0 -1
  861. package/web-ui/build/static/properties-B7zGUFLC.js +0 -1
  862. package/web-ui/build/static/properties-DHKWbrVz.js +0 -1
  863. package/web-ui/build/static/protobuf-CVwMi4py.js +0 -1
  864. package/web-ui/build/static/protobuf-CWUzVSVD.js +0 -1
  865. package/web-ui/build/static/psl-DdX6HMd3.js +0 -1
  866. package/web-ui/build/static/pug-D-Sn469u.js +0 -1
  867. package/web-ui/build/static/puppet-B6ZR9-D4.js +0 -1
  868. package/web-ui/build/static/puppet-m66LRiIo.js +0 -1
  869. package/web-ui/build/static/pure-7deZH-sc.js +0 -1
  870. package/web-ui/build/static/purebasic-DQLUcurt.js +0 -1
  871. package/web-ui/build/static/purebasic-DYMw9jTh.js +0 -1
  872. package/web-ui/build/static/purescript-DpysoAya.js +0 -1
  873. package/web-ui/build/static/python-D66_vufV.js +0 -1
  874. package/web-ui/build/static/python-DYxaIENO.js +0 -1
  875. package/web-ui/build/static/python-repl-DPjvQNxf.js +0 -1
  876. package/web-ui/build/static/q-DDHNKITB.js +0 -1
  877. package/web-ui/build/static/q-xV1Q9ILw.js +0 -1
  878. package/web-ui/build/static/qml-DSENM1u-.js +0 -1
  879. package/web-ui/build/static/qml-DfhbPQ-t.js +0 -1
  880. package/web-ui/build/static/qore-LQCffrzv.js +0 -1
  881. package/web-ui/build/static/qsharp-BcSf2ZGH.js +0 -1
  882. package/web-ui/build/static/r-Dc6GR0yQ.js +0 -1
  883. package/web-ui/build/static/r-vludgk3t.js +0 -1
  884. package/web-ui/build/static/racket-DJYIkQwh.js +0 -1
  885. package/web-ui/build/static/reason-D75i_ede.js +0 -1
  886. package/web-ui/build/static/reasonml-DhRXKjo3.js +0 -1
  887. package/web-ui/build/static/regex-D67iENuu.js +0 -1
  888. package/web-ui/build/static/rego-CJ2Eeb4g.js +0 -1
  889. package/web-ui/build/static/renpy-DUDNyFqb.js +0 -1
  890. package/web-ui/build/static/rest-Dn7SYTNt.js +0 -1
  891. package/web-ui/build/static/rib-BVUY5dIb.js +0 -1
  892. package/web-ui/build/static/rip-Bu9K3Hu9.js +0 -1
  893. package/web-ui/build/static/roboconf-CUzY2sLf.js +0 -1
  894. package/web-ui/build/static/roboconf-DBEmoD-Z.js +0 -1
  895. package/web-ui/build/static/robotframework-70EV7ffL.js +0 -1
  896. package/web-ui/build/static/routeros-KgfwmDVO.js +0 -1
  897. package/web-ui/build/static/rsl-D3oCnFGa.js +0 -1
  898. package/web-ui/build/static/ruby-Dqa0HtB4.js +0 -1
  899. package/web-ui/build/static/ruby-PeJYeL87.js +0 -1
  900. package/web-ui/build/static/ruleslanguage-vo3eM_mz.js +0 -1
  901. package/web-ui/build/static/rust-CwU6t4_Y.js +0 -1
  902. package/web-ui/build/static/rust-WXADYh9r.js +0 -1
  903. package/web-ui/build/static/sas-Cg6ADdDH.js +0 -1
  904. package/web-ui/build/static/sas-DWoEaeXv.js +0 -1
  905. package/web-ui/build/static/sass-DbHJHeBV.js +0 -1
  906. package/web-ui/build/static/scala-B6oE2QKr.js +0 -1
  907. package/web-ui/build/static/scala-NFQGPaYa.js +0 -1
  908. package/web-ui/build/static/scheme-C8Jx4oX7.js +0 -1
  909. package/web-ui/build/static/scheme-CUMBJaUf.js +0 -1
  910. package/web-ui/build/static/scilab-D1VqsdSy.js +0 -1
  911. package/web-ui/build/static/scss-CSH87oUD.js +0 -1
  912. package/web-ui/build/static/scss-GLX6NNDB.js +0 -1
  913. package/web-ui/build/static/shell-CbOhN21M.js +0 -1
  914. package/web-ui/build/static/shell-session-BQPdJJZS.js +0 -1
  915. package/web-ui/build/static/smali-BYbEOQX5.js +0 -1
  916. package/web-ui/build/static/smali-DcoYSibw.js +0 -1
  917. package/web-ui/build/static/smalltalk-CQkedD8N.js +0 -1
  918. package/web-ui/build/static/smalltalk-DihI81Cd.js +0 -1
  919. package/web-ui/build/static/smarty-RRvllERL.js +0 -1
  920. package/web-ui/build/static/sml-BJkMhBLU.js +0 -1
  921. package/web-ui/build/static/sml-Bm2IN0wP.js +0 -1
  922. package/web-ui/build/static/solidity-CsCW8kyX.js +0 -1
  923. package/web-ui/build/static/solution-file-B5YSxWQt.js +0 -1
  924. package/web-ui/build/static/soy-Dek2_YCW.js +0 -1
  925. package/web-ui/build/static/sparql-BeTxhWa4.js +0 -1
  926. package/web-ui/build/static/splunk-spl-hq6BW85c.js +0 -1
  927. package/web-ui/build/static/sqf-C-u4en-i.js +0 -1
  928. package/web-ui/build/static/sqf-DP0IhDYt.js +0 -1
  929. package/web-ui/build/static/sql-BzL0uonb.js +0 -1
  930. package/web-ui/build/static/sql-Zy6tV_us.js +0 -1
  931. package/web-ui/build/static/sql_more-BP2G6Vh5.js +0 -1
  932. package/web-ui/build/static/squirrel-C3MnMYx5.js +0 -1
  933. package/web-ui/build/static/stan-7iKo211G.js +0 -1
  934. package/web-ui/build/static/stan-C1lcIZjJ.js +0 -1
  935. package/web-ui/build/static/stata-DJ6GKcaw.js +0 -1
  936. package/web-ui/build/static/step21-Pg-uClDB.js +0 -1
  937. package/web-ui/build/static/stylus-DFAxYuRi.js +0 -1
  938. package/web-ui/build/static/stylus-DT6xc_Nv.js +0 -1
  939. package/web-ui/build/static/subunit-aGvGJXZZ.js +0 -1
  940. package/web-ui/build/static/swift-Sqmdmb4O.js +0 -1
  941. package/web-ui/build/static/swift-cUX-MVl4.js +0 -1
  942. package/web-ui/build/static/systemd-qIaU0Trg.js +0 -1
  943. package/web-ui/build/static/t4-cs-DtO6Bgg1.js +0 -1
  944. package/web-ui/build/static/t4-templating-DSSM2N5M.js +0 -1
  945. package/web-ui/build/static/t4-vb-tKIiE5uC.js +0 -1
  946. package/web-ui/build/static/taggerscript-Dt2Kgr-W.js +0 -1
  947. package/web-ui/build/static/tap-BMEgEMIk.js +0 -1
  948. package/web-ui/build/static/tap-C4TdzsNz.js +0 -1
  949. package/web-ui/build/static/tcl-B6k4Af9f.js +0 -1
  950. package/web-ui/build/static/tcl-Dq4_i5q5.js +0 -1
  951. package/web-ui/build/static/textile-C0uqAPk0.js +0 -1
  952. package/web-ui/build/static/thrift-DybQEjaA.js +0 -1
  953. package/web-ui/build/static/toml-DG1a2FSS.js +0 -1
  954. package/web-ui/build/static/tp-BwdfEEST.js +0 -1
  955. package/web-ui/build/static/tremor-JSTukmt-.js +0 -1
  956. package/web-ui/build/static/tsx-YUfsqzPf.js +0 -1
  957. package/web-ui/build/static/tt2-D9A_ACnF.js +0 -1
  958. package/web-ui/build/static/turtle-BKxwLa_-.js +0 -1
  959. package/web-ui/build/static/twig-BeEDK9Ri.js +0 -1
  960. package/web-ui/build/static/twig-TnOWwD7-.js +0 -1
  961. package/web-ui/build/static/typescript-BjZl8C3q.js +0 -1
  962. package/web-ui/build/static/typescript-qtW5Xh-j.js +0 -1
  963. package/web-ui/build/static/typoscript-Dj4sO7Jx.js +0 -1
  964. package/web-ui/build/static/unrealscript-DInimzNQ.js +0 -1
  965. package/web-ui/build/static/uorazor-B_9tFVKw.js +0 -1
  966. package/web-ui/build/static/uri-CTuMA7_k.js +0 -1
  967. package/web-ui/build/static/v-CvE0Ujqx.js +0 -1
  968. package/web-ui/build/static/vala-CLGf3xEs.js +0 -1
  969. package/web-ui/build/static/vala-Dm8LmEpm.js +0 -1
  970. package/web-ui/build/static/vbnet-Cwm2TjGP.js +0 -1
  971. package/web-ui/build/static/vbnet-LCd9GiMJ.js +0 -1
  972. package/web-ui/build/static/vbscript-DVj94_-y.js +0 -1
  973. package/web-ui/build/static/vbscript-html-CDHtSX-o.js +0 -1
  974. package/web-ui/build/static/velocity-C-OrhdDf.js +0 -1
  975. package/web-ui/build/static/verilog-Bh18N7TM.js +0 -1
  976. package/web-ui/build/static/verilog-C-YNXb8j.js +0 -1
  977. package/web-ui/build/static/vhdl-BFNm41_R.js +0 -1
  978. package/web-ui/build/static/vhdl-CyLgBDKk.js +0 -1
  979. package/web-ui/build/static/vim-BTafUqR0.js +0 -1
  980. package/web-ui/build/static/vim-Xg1pEHJe.js +0 -1
  981. package/web-ui/build/static/visual-basic-CDgUOlvq.js +0 -1
  982. package/web-ui/build/static/warpscript-1ELDmkt5.js +0 -1
  983. package/web-ui/build/static/wasm-C25KdQk5.js +0 -1
  984. package/web-ui/build/static/web-idl-CsdVYgpL.js +0 -1
  985. package/web-ui/build/static/wiki-4RrZuyhV.js +0 -1
  986. package/web-ui/build/static/wolfram-DMiRIwvp.js +0 -1
  987. package/web-ui/build/static/wren-Vk5PBcVB.js +0 -1
  988. package/web-ui/build/static/x86asm-D9TFTgye.js +0 -1
  989. package/web-ui/build/static/xeora-SAn_K3Ts.js +0 -1
  990. package/web-ui/build/static/xl-Da2Fl8D9.js +0 -1
  991. package/web-ui/build/static/xml-CeLm6l4V.js +0 -1
  992. package/web-ui/build/static/xml-doc-DypYH408.js +0 -1
  993. package/web-ui/build/static/xojo-CrfMiv1-.js +0 -1
  994. package/web-ui/build/static/xquery-8tOqVkgP.js +0 -1
  995. package/web-ui/build/static/xquery-CLOnNPtx.js +0 -1
  996. package/web-ui/build/static/yaml-CXiycPmU.js +0 -1
  997. package/web-ui/build/static/yaml-cIKjKW-H.js +0 -1
  998. package/web-ui/build/static/yang-KVshO9Ce.js +0 -1
  999. package/web-ui/build/static/zephir-B88JNqlj.js +0 -1
  1000. package/web-ui/build/static/zig-C6GYIeFs.js +0 -1
@@ -31,6 +31,7 @@ import { getVisualEditorServer, getVisualEditorPort, getVisualEditorBaseUrl, set
31
31
  import { getCredentialVault } from '../services/credentialVault.js';
32
32
  import { getGalleryService } from '../services/galleryService.js';
33
33
  import { getUserDataPaths } from '../utilities/userDataDir.js';
34
+ import { projectActiveRuns } from '../utilities/flowRunFilters.js';
34
35
 
35
36
  // Connect visual editor server to bridge (enables element selection forwarding)
36
37
  setBridgeGetter(getVisualEditorBridge);
@@ -43,6 +44,14 @@ import { initFileExplorerModule } from '../modules/fileExplorer/index.js';
43
44
 
44
45
  // Import FlowExecutor for flow pipeline execution
45
46
  import FlowExecutor from '../core/flowExecutor.js';
47
+ // Flow definition gate — rejects malformed flows BEFORE persistence/execution.
48
+ import { validateFlowDefinition } from '../core/flowSchema.js';
49
+ // Phase 4: disk checkpoint store backs resume/restart of failed runs.
50
+ import { FlowCheckpointStore } from '../core/flowCheckpointStore.js';
51
+ // Phase 5: editor lint — soft warnings (unbound placeholders, etc.)
52
+ import { lintFlow } from '../core/flowLint.js';
53
+ // Phase 6: append-only flow version archive (rollback support).
54
+ import { FlowVersionStore } from '../core/flowVersionStore.js';
46
55
 
47
56
  // Scheduler visualizer routes (extracted for testability)
48
57
  import { registerSchedulerRoutes } from './schedulerRoutes.js';
@@ -536,6 +545,39 @@ class WebServer {
536
545
  // WebServer has broadcastToSession method that FlowExecutor will use
537
546
  this.flowExecutor.setWebSocketManager(this);
538
547
 
548
+ // Phase 4: wire a disk checkpoint store so failed/interrupted
549
+ // flow runs can be resumed instead of starting over from scratch.
550
+ // Stored under the user data dir alongside agent state so the
551
+ // data survives `npm i -g` updates and follows the user across
552
+ // working-directory changes. (Earlier code read `dataPaths?.dataDir`
553
+ // which doesn't exist on getUserDataPaths() — that fell through to
554
+ // process.cwd() and dropped checkpoints into whatever directory the
555
+ // process happened to start in. Use `state` instead, grouping with
556
+ // agents/, operations/, models/, skills/.)
557
+ try {
558
+ const dataPaths = getUserDataPaths();
559
+ const checkpointDir = path.join(dataPaths?.state || process.cwd(), 'flow-checkpoints');
560
+ const store = new FlowCheckpointStore({ baseDir: checkpointDir });
561
+ this.flowExecutor.setCheckpointStore(store);
562
+ this.logger.info('FlowExecutor checkpoint store enabled', { baseDir: checkpointDir });
563
+ } catch (err) {
564
+ // Non-fatal: continue without resumability rather than failing init.
565
+ this.logger.warn('Failed to enable flow checkpoint store (non-fatal)', { error: err.message });
566
+ }
567
+
568
+ // Phase 6: wire a version store so every flow save records an
569
+ // immutable snapshot. Used by /api/flows/:id/versions and
570
+ // /api/flows/:id/rollback. Stored alongside checkpoints under
571
+ // user data dir (see comment above for path-fix history).
572
+ try {
573
+ const dataPaths = getUserDataPaths();
574
+ const versionDir = path.join(dataPaths?.state || process.cwd(), 'flow-versions');
575
+ this.flowVersionStore = new FlowVersionStore({ baseDir: versionDir });
576
+ this.logger.info('Flow version store enabled', { baseDir: versionDir });
577
+ } catch (err) {
578
+ this.logger.warn('Failed to enable flow version store (non-fatal)', { error: err.message });
579
+ }
580
+
539
581
  // Wire FlowExecutor into jobDoneTool so it can signal completion directly
540
582
  const toolsRegistry = this.orchestrator?.toolsRegistry;
541
583
  if (toolsRegistry) {
@@ -543,6 +585,14 @@ class WebServer {
543
585
  if (jobDoneTool && typeof jobDoneTool.setFlowExecutor === 'function') {
544
586
  jobDoneTool.setFlowExecutor(this.flowExecutor);
545
587
  }
588
+ // Wire FlowExecutor into platformControlTool so its execute-flow
589
+ // and dry-run-flow actions can reach the executor. Without this,
590
+ // an agent with `flows: 'all'` permission would still get
591
+ // "FlowExecutor not available" when calling execute-flow.
592
+ const platformControlTool = toolsRegistry.getTool('platformcontrol');
593
+ if (platformControlTool && typeof platformControlTool.setFlowExecutor === 'function') {
594
+ platformControlTool.setFlowExecutor(this.flowExecutor);
595
+ }
546
596
  }
547
597
 
548
598
  this.logger.info('FlowExecutor initialized successfully');
@@ -4249,9 +4299,37 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4249
4299
  });
4250
4300
  }
4251
4301
 
4302
+ // If the resilient state loader recovered from missing/empty/
4303
+ // corrupt files, broadcast each recovery as a UI toast so the
4304
+ // operator sees what was salvaged. The reports were attached to
4305
+ // the restored agent in stateManager.restoreAgent.
4306
+ const recoveries = Array.isArray(agent._restoreRecoveries) ? agent._restoreRecoveries : [];
4307
+ if (recoveries.length > 0 && this.wsManager) {
4308
+ for (const r of recoveries) {
4309
+ this.wsManager.broadcast({
4310
+ type: 'state-file-recovery',
4311
+ level: r.kind === 'unrepairable' ? 'error'
4312
+ : r.kind === 'partial' ? 'warning'
4313
+ : 'info',
4314
+ agentId: agent.id,
4315
+ agentName: agent.name,
4316
+ recovery: {
4317
+ kind: r.kind,
4318
+ label: r.label,
4319
+ message: r.message,
4320
+ archivePath: r.archivePath || null,
4321
+ },
4322
+ });
4323
+ }
4324
+ }
4325
+ // Strip the recovery payload before logging/serializing back to
4326
+ // the client — it's an internal hint, not part of the agent shape.
4327
+ delete agent._restoreRecoveries;
4328
+
4252
4329
  this.logger.info('Agent imported successfully', {
4253
4330
  agentId: agent.id,
4254
- name: agent.name
4331
+ name: agent.name,
4332
+ recoveryCount: recoveries.length,
4255
4333
  });
4256
4334
 
4257
4335
  res.json({
@@ -4264,7 +4342,12 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4264
4342
  capabilities: agent.capabilities,
4265
4343
  lastActivity: agent.lastActivity
4266
4344
  },
4267
- message: `Agent ${agent.name} imported successfully`
4345
+ message: `Agent ${agent.name} imported successfully`,
4346
+ // Surfaced to the importer too so a non-WS client (curl) sees
4347
+ // them in the response body.
4348
+ ...(recoveries.length > 0 ? { recoveries: recoveries.map(r => ({
4349
+ kind: r.kind, label: r.label, message: r.message,
4350
+ })) } : {}),
4268
4351
  });
4269
4352
  } catch (error) {
4270
4353
  this.logger.error('Failed to import agent', {
@@ -4723,10 +4806,15 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4723
4806
  try {
4724
4807
  const { name, description, nodes, edges, variables } = req.body;
4725
4808
 
4726
- if (!name) {
4809
+ // Schema gate: reject malformed flows BEFORE they reach persistence
4810
+ // (avoids "saved but unexecutable" states). 400 with structured
4811
+ // errors so the editor can highlight specific problems inline.
4812
+ const validation = validateFlowDefinition({ name, nodes: nodes || [], edges: edges || [], variables });
4813
+ if (!validation.ok) {
4727
4814
  return res.status(400).json({
4728
4815
  success: false,
4729
- error: 'Flow name is required'
4816
+ error: 'Flow definition is invalid',
4817
+ details: validation.errors
4730
4818
  });
4731
4819
  }
4732
4820
 
@@ -4739,6 +4827,20 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4739
4827
  variables
4740
4828
  }, projectDir);
4741
4829
 
4830
+ // Phase 6: record initial version (v1). Best-effort — the flow
4831
+ // is already saved; failing to version is a non-fatal warning.
4832
+ // Stamp the version number back onto the flow record so runs
4833
+ // can record which definition produced their output.
4834
+ if (this.flowVersionStore && flow?.id) {
4835
+ try {
4836
+ const v = await this.flowVersionStore.recordVersion(flow.id, flow);
4837
+ const projectDir = this.orchestrator.config.project?.directory || process.cwd();
4838
+ await this.orchestrator.stateManager.updateFlow(flow.id, { version: v.version }, projectDir);
4839
+ flow.version = v.version;
4840
+ }
4841
+ catch (e) { this.logger.warn('flow version record failed', { error: e.message }); }
4842
+ }
4843
+
4742
4844
  // Broadcast flow created event
4743
4845
  if (this.wsManager) {
4744
4846
  this.wsManager.broadcast({
@@ -4794,6 +4896,35 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4794
4896
  const { name, description, nodes, edges, variables } = req.body;
4795
4897
  const projectDir = this.orchestrator.config.project?.directory || process.cwd();
4796
4898
 
4899
+ // PUT supports partial updates (e.g. just `{ nodes, edges }`
4900
+ // when the user clicks Save in the editor). Load the existing
4901
+ // flow and merge the patch before validating, so the schema
4902
+ // gate sees the full resulting record — not just the diff.
4903
+ const existing = await this.orchestrator.stateManager.getFlow(flowId, projectDir);
4904
+ if (!existing) {
4905
+ return res.status(404).json({ success: false, error: `Flow ${flowId} not found` });
4906
+ }
4907
+ const merged = {
4908
+ ...existing,
4909
+ ...(name !== undefined ? { name } : {}),
4910
+ ...(description !== undefined ? { description } : {}),
4911
+ ...(nodes !== undefined ? { nodes } : {}),
4912
+ ...(edges !== undefined ? { edges } : {}),
4913
+ ...(variables !== undefined ? { variables } : {}),
4914
+ };
4915
+
4916
+ // Same schema gate as POST. Editing a flow into an invalid state
4917
+ // is just as bad as creating one — both should be caught here, not
4918
+ // 90s into a future execution.
4919
+ const validation = validateFlowDefinition(merged);
4920
+ if (!validation.ok) {
4921
+ return res.status(400).json({
4922
+ success: false,
4923
+ error: 'Flow definition is invalid',
4924
+ details: validation.errors
4925
+ });
4926
+ }
4927
+
4797
4928
  const flow = await this.orchestrator.stateManager.updateFlow(flowId, {
4798
4929
  name,
4799
4930
  description,
@@ -4802,6 +4933,17 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4802
4933
  variables
4803
4934
  }, projectDir);
4804
4935
 
4936
+ // Phase 6: record a new version snapshot on every PUT and
4937
+ // stamp the new version number onto the live record.
4938
+ if (this.flowVersionStore && flow?.id) {
4939
+ try {
4940
+ const v = await this.flowVersionStore.recordVersion(flow.id, flow);
4941
+ await this.orchestrator.stateManager.updateFlow(flow.id, { version: v.version }, projectDir);
4942
+ flow.version = v.version;
4943
+ }
4944
+ catch (e) { this.logger.warn('flow version record failed', { error: e.message }); }
4945
+ }
4946
+
4805
4947
  // Broadcast flow updated event
4806
4948
  if (this.wsManager) {
4807
4949
  this.wsManager.broadcast({
@@ -4956,6 +5098,140 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4956
5098
  }
4957
5099
  });
4958
5100
 
5101
+ // Phase 6: list versions of a flow (lightweight metadata only).
5102
+ this.app.get('/api/flows/:flowId/versions', async (req, res) => {
5103
+ try {
5104
+ if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
5105
+ const versions = await this.flowVersionStore.listVersions(req.params.flowId);
5106
+ res.json({ success: true, data: versions });
5107
+ } catch (error) {
5108
+ this.logger.error('list versions failed', { error: error.message });
5109
+ res.status(500).json({ success: false, error: error.message });
5110
+ }
5111
+ });
5112
+
5113
+ // Phase 6: read a specific version snapshot (full flow definition).
5114
+ this.app.get('/api/flows/:flowId/versions/:version', async (req, res) => {
5115
+ try {
5116
+ if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
5117
+ const v = parseInt(req.params.version, 10);
5118
+ if (!Number.isFinite(v) || v < 1) {
5119
+ return res.status(400).json({ success: false, error: 'version must be a positive integer' });
5120
+ }
5121
+ const snap = await this.flowVersionStore.loadVersion(req.params.flowId, v);
5122
+ if (!snap) return res.status(404).json({ success: false, error: 'version not found' });
5123
+ res.json({ success: true, data: snap });
5124
+ } catch (error) {
5125
+ this.logger.error('load version failed', { error: error.message });
5126
+ res.status(500).json({ success: false, error: error.message });
5127
+ }
5128
+ });
5129
+
5130
+ // Phase 6: rollback — restore version N as the live flow record.
5131
+ // Body: { version: N }. Records ANOTHER new version after rollback
5132
+ // so history stays append-only ("rolled back to v3" produces v(N+1)).
5133
+ this.app.post('/api/flows/:flowId/rollback', async (req, res) => {
5134
+ try {
5135
+ if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
5136
+ const { flowId } = req.params;
5137
+ const target = parseInt(req.body?.version, 10);
5138
+ if (!Number.isFinite(target) || target < 1) {
5139
+ return res.status(400).json({ success: false, error: 'body.version must be a positive integer' });
5140
+ }
5141
+ const snap = await this.flowVersionStore.loadVersion(flowId, target);
5142
+ if (!snap) return res.status(404).json({ success: false, error: `version ${target} not found` });
5143
+
5144
+ // Validate the target snapshot before promoting it. A flow that
5145
+ // passed validation when first saved may now be invalid against
5146
+ // a newer schema — surfacing that here is better than at execute.
5147
+ const validation = validateFlowDefinition(snap.flow);
5148
+ if (!validation.ok) {
5149
+ return res.status(400).json({
5150
+ success: false,
5151
+ error: `version ${target} fails current validation`,
5152
+ details: validation.errors,
5153
+ });
5154
+ }
5155
+
5156
+ const projectDir = this.orchestrator.config.project?.directory || process.cwd();
5157
+ const restored = await this.orchestrator.stateManager.updateFlow(flowId, {
5158
+ name: snap.flow.name,
5159
+ description: snap.flow.description,
5160
+ nodes: snap.flow.nodes,
5161
+ edges: snap.flow.edges,
5162
+ variables: snap.flow.variables,
5163
+ }, projectDir);
5164
+
5165
+ // Append a new version entry tagging the rollback
5166
+ try {
5167
+ await this.flowVersionStore.recordVersion(flowId, {
5168
+ ...restored,
5169
+ _rollbackOf: target,
5170
+ });
5171
+ } catch (e) {
5172
+ this.logger.warn('post-rollback version record failed', { error: e.message });
5173
+ }
5174
+
5175
+ if (this.wsManager) {
5176
+ this.wsManager.broadcast({ type: 'flow-updated', flow: restored });
5177
+ }
5178
+ res.json({ success: true, data: restored, rolledBackTo: target });
5179
+ } catch (error) {
5180
+ this.logger.error('rollback failed', { error: error.message });
5181
+ res.status(500).json({ success: false, error: error.message });
5182
+ }
5183
+ });
5184
+
5185
+ // Phase 5: dry-run / lint an unsaved flow definition.
5186
+ // Posted body IS the flow definition (so the editor can lint
5187
+ // unsaved drafts). Combines schema gate + lint warnings into a
5188
+ // single report so the editor can highlight everything inline.
5189
+ this.app.post('/api/flows/dry-run', async (req, res) => {
5190
+ try {
5191
+ const flow = req.body || {};
5192
+ const validation = validateFlowDefinition(flow);
5193
+ const lint = lintFlow(flow);
5194
+ res.json({
5195
+ success: true,
5196
+ ok: validation.ok && lint.errors.length === 0,
5197
+ schemaErrors: validation.errors,
5198
+ lintErrors: lint.errors,
5199
+ lintWarnings: lint.warnings,
5200
+ });
5201
+ } catch (error) {
5202
+ this.logger.error('Dry-run failed', { error: error.message });
5203
+ res.status(500).json({ success: false, error: error.message });
5204
+ }
5205
+ });
5206
+
5207
+ // Phase 4: resume a failed / interrupted flow run.
5208
+ // Per-node checkpoints on disk let us skip already-completed nodes
5209
+ // and re-run from the first non-completed one. The run record lives
5210
+ // under runId regardless of the flow it belongs to, so this lookup
5211
+ // does not require the flowId in the URL.
5212
+ this.app.post('/api/flows/runs/:runId/resume', async (req, res) => {
5213
+ try {
5214
+ const { runId } = req.params;
5215
+ const { sessionId } = req.body || {};
5216
+ if (!this.flowExecutor) {
5217
+ return res.status(503).json({ success: false, error: 'FlowExecutor not initialized' });
5218
+ }
5219
+ // Async: kick off and return immediately so the HTTP request
5220
+ // doesn't sit open for minutes. Errors propagate via WebSocket
5221
+ // (flow_run_failed) and the run record's status field.
5222
+ this.flowExecutor.resumeFlow(runId, sessionId || null).catch(err => {
5223
+ this.logger.error(`Resume flow failed for run ${runId}`, { error: err.message });
5224
+ });
5225
+ res.json({ success: true, runId, status: 'resuming' });
5226
+ } catch (error) {
5227
+ this.logger.error('Failed to resume flow run', { error: error.message, runId: req.params.runId });
5228
+ const status = /not found/i.test(error.message) ? 404
5229
+ : /checkpoint store/i.test(error.message) ? 503
5230
+ : 500;
5231
+ res.status(status).json({ success: false, error: error.message });
5232
+ }
5233
+ });
5234
+
4959
5235
  // Stop a flow run
4960
5236
  this.app.post('/api/flows/:flowId/stop', async (req, res) => {
4961
5237
  try {
@@ -5010,6 +5286,30 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
5010
5286
  }
5011
5287
  });
5012
5288
 
5289
+ // List all currently-active runs across every flow. Used by the
5290
+ // FlowsPage to mark which cards are "running" without polling each
5291
+ // flow individually. Active = status in {queued, pending, running,
5292
+ // paused} — anything not yet terminal.
5293
+ //
5294
+ // Mounted ABOVE `/api/flows/:flowId/runs` so the literal `active`
5295
+ // segment isn't captured as a flowId by Express's pattern matcher.
5296
+ this.app.get('/api/flows/runs/active', async (req, res) => {
5297
+ try {
5298
+ const projectDir = this.orchestrator.config.project?.directory || process.cwd();
5299
+ const runIndex = await this.orchestrator.stateManager.loadFlowRunIndex(projectDir);
5300
+ // Pre-load the flow index ONCE so the progress summary can
5301
+ // resolve total node count + current step labels per run
5302
+ // without N+1 lookups. The lookup callback is a closure over
5303
+ // the flow map; the helper queries by id at call time only.
5304
+ const flowIndex = await this.orchestrator.stateManager.loadFlowIndex(projectDir);
5305
+ const flowLookup = (flowId) => (flowIndex && flowId) ? flowIndex[flowId] || null : null;
5306
+ res.json({ success: true, data: projectActiveRuns(runIndex, flowLookup) });
5307
+ } catch (error) {
5308
+ this.logger.error('Failed to list active flow runs', { error: error.message });
5309
+ res.status(500).json({ success: false, error: error.message });
5310
+ }
5311
+ });
5312
+
5013
5313
  // List runs for a flow
5014
5314
  this.app.get('/api/flows/:flowId/runs', async (req, res) => {
5015
5315
  try {
@@ -157,13 +157,38 @@ export class GalleryStore {
157
157
  async _writeNow() {
158
158
  const dir = path.dirname(this.filePath);
159
159
  try { await fs.mkdir(dir, { recursive: true }); } catch { /* race-tolerant */ }
160
- const tmp = this.filePath + '.tmp';
160
+ // Per-call unique tmp suffix so two concurrent writes (debounce+flush
161
+ // racing, or any future caller) can't trample each other's tmp file.
162
+ // The earlier static `.tmp` suffix produced ENOENT under parallel test
163
+ // load on Windows: writer A renamed first, writer B saw its own tmp
164
+ // disappear before its rename ran.
165
+ const tmp = `${this.filePath}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2, 8)}.tmp`;
161
166
  const payload = JSON.stringify({
162
167
  schema: VERSION_SCHEMA,
163
168
  entries: Array.from(this._entries.values()),
164
169
  }, null, 2);
165
170
  await fs.writeFile(tmp, payload, 'utf-8');
166
- await fs.rename(tmp, this.filePath);
171
+ // Windows-fs renames intermittently fail with EPERM / EBUSY when an
172
+ // antivirus scanner or another process briefly holds the destination
173
+ // open. A short retry loop covers both production users on Windows
174
+ // and the parallel-jest workers that surface this most often.
175
+ let lastErr;
176
+ for (let attempt = 0; attempt < 5; attempt++) {
177
+ try {
178
+ await fs.rename(tmp, this.filePath);
179
+ return;
180
+ } catch (err) {
181
+ lastErr = err;
182
+ // ENOENT means our tmp already vanished — give up; the source
183
+ // file is gone, retrying won't recreate it. Other transients
184
+ // (EPERM/EBUSY/EACCES) get a brief backoff.
185
+ if (err.code === 'ENOENT') break;
186
+ await new Promise(r => setTimeout(r, 20 * (attempt + 1)));
187
+ }
188
+ }
189
+ // Best-effort cleanup of stranded tmp; ignore failure.
190
+ try { await fs.unlink(tmp); } catch { /* ok */ }
191
+ throw lastErr;
167
192
  }
168
193
 
169
194
  /**
@@ -120,6 +120,169 @@ describe('ApiKeyManager', () => {
120
120
  expect(manager.keys.vendorKeys.anthropic).toBe('anth-key');
121
121
  });
122
122
 
123
+ // Regression locks: the UI used to write display-only placeholder
124
+ // strings into the editable settings field; auto-save then echoed
125
+ // them here, overwriting real keys with strings like
126
+ // `lx_••••••••••••••••(server-managed)` and breaking every agent
127
+ // request with 401. loadFromDisk must scrub any placeholder that
128
+ // already snuck onto disk before the fix, so a poisoned persist
129
+ // file from an older build self-heals on next boot.
130
+ describe('loadFromDisk placeholder scrub (poisoned persist file)', () => {
131
+ /**
132
+ * Helper: prep a manager so loadFromDisk takes the happy path
133
+ * and returns deterministic decrypted data without going through
134
+ * the real crypto. Each call hands back the manager + a stub.
135
+ */
136
+ function primeForLoad(manager, decryptedJson) {
137
+ manager.persistenceFile = '/fake/api-keys.enc';
138
+ manager.encryptionKey = Buffer.alloc(32, 'k');
139
+ mockFs.readFile.mockResolvedValueOnce('encrypted-bytes-ignored');
140
+ mockFs.writeFile.mockResolvedValue(undefined);
141
+ manager._decrypt = jest.fn(() => decryptedJson);
142
+ }
143
+
144
+ test('scrubs bullet-string loxia key + re-persists', async () => {
145
+ primeForLoad(manager, JSON.stringify({
146
+ version: 2,
147
+ keys: {
148
+ loxiaApiKey: 'lx_••••••••••••••••(server-managed)',
149
+ vendorKeys: { anthropic: 'sk-ant-real-key' },
150
+ },
151
+ }));
152
+ // Stub persist so we can observe it without going through crypto.
153
+ manager.persist = jest.fn().mockResolvedValue(undefined);
154
+
155
+ await manager.loadFromDisk();
156
+
157
+ expect(manager.keys.loxiaApiKey).toBeNull();
158
+ // Real vendor keys preserved.
159
+ expect(manager.keys.vendorKeys.anthropic).toBe('sk-ant-real-key');
160
+ // Best-effort re-persist fired.
161
+ expect(manager.persist).toHaveBeenCalledTimes(1);
162
+ // Operator-visible warning logged so the scrub is observable.
163
+ expect(logger.warn).toHaveBeenCalledWith(
164
+ expect.stringContaining('Scrubbing placeholder loxiaApiKey')
165
+ );
166
+ });
167
+
168
+ test('scrubs platform-managed sentinel and any placeholder vendor keys', async () => {
169
+ primeForLoad(manager, JSON.stringify({
170
+ version: 2,
171
+ keys: {
172
+ loxiaApiKey: 'platform-managed',
173
+ vendorKeys: {
174
+ anthropic: '••••••••(server-managed)',
175
+ openai: 'sk-real-openai-key',
176
+ azure: 'foo[server-managed]bar',
177
+ },
178
+ },
179
+ }));
180
+ manager.persist = jest.fn().mockResolvedValue(undefined);
181
+
182
+ await manager.loadFromDisk();
183
+
184
+ expect(manager.keys.loxiaApiKey).toBeNull();
185
+ // Placeholder vendors removed entirely (NOT just blanked) so the
186
+ // shape stays clean for downstream serialization.
187
+ expect(manager.keys.vendorKeys).not.toHaveProperty('anthropic');
188
+ expect(manager.keys.vendorKeys).not.toHaveProperty('azure');
189
+ // Real vendor preserved.
190
+ expect(manager.keys.vendorKeys.openai).toBe('sk-real-openai-key');
191
+ expect(manager.persist).toHaveBeenCalledTimes(1);
192
+ });
193
+
194
+ test('clean persist file: no scrub, no re-persist', async () => {
195
+ primeForLoad(manager, JSON.stringify({
196
+ version: 2,
197
+ keys: {
198
+ loxiaApiKey: 'lx_real_loxia_key_abc123',
199
+ vendorKeys: { anthropic: 'sk-ant-real', openai: 'sk-real-openai' },
200
+ },
201
+ }));
202
+ manager.persist = jest.fn().mockResolvedValue(undefined);
203
+
204
+ await manager.loadFromDisk();
205
+
206
+ expect(manager.keys.loxiaApiKey).toBe('lx_real_loxia_key_abc123');
207
+ expect(manager.keys.vendorKeys).toEqual({ anthropic: 'sk-ant-real', openai: 'sk-real-openai' });
208
+ // Nothing to scrub → no extra write.
209
+ expect(manager.persist).not.toHaveBeenCalled();
210
+ });
211
+
212
+ test('legacy globalKeys format: scrub still applies after migration', async () => {
213
+ primeForLoad(manager, JSON.stringify({
214
+ // No `version` / `keys` — old shape with `globalKeys` at root.
215
+ globalKeys: {
216
+ loxiaApiKey: 'lx_••••(server-managed)',
217
+ vendorKeys: { anthropic: 'sk-ant-still-good' },
218
+ },
219
+ }));
220
+ manager.persist = jest.fn().mockResolvedValue(undefined);
221
+
222
+ await manager.loadFromDisk();
223
+
224
+ expect(manager.keys.loxiaApiKey).toBeNull();
225
+ expect(manager.keys.vendorKeys.anthropic).toBe('sk-ant-still-good');
226
+ expect(manager.persist).toHaveBeenCalled();
227
+ });
228
+
229
+ test('persist failure during scrub is non-fatal (in-memory state still clean)', async () => {
230
+ primeForLoad(manager, JSON.stringify({
231
+ version: 2,
232
+ keys: { loxiaApiKey: 'platform-managed', vendorKeys: {} },
233
+ }));
234
+ manager.persist = jest.fn().mockRejectedValue(new Error('disk full'));
235
+
236
+ // Should NOT throw — re-persist failure is tolerated.
237
+ await expect(manager.loadFromDisk()).resolves.toBeUndefined();
238
+ // In-memory state is clean even though disk wasn't updated.
239
+ expect(manager.keys.loxiaApiKey).toBeNull();
240
+ });
241
+ });
242
+
243
+ describe('placeholder rejection (server-managed key bug guard)', () => {
244
+ test('refuses bullet-string placeholder for loxia key, keeps existing', async () => {
245
+ manager.persistenceFile = null;
246
+ manager.keys.loxiaApiKey = 'real-key-existing';
247
+ await manager.setSessionKeys('sess-1', {
248
+ loxiaApiKey: 'lx_••••••••••••••••(server-managed)'
249
+ });
250
+ expect(manager.keys.loxiaApiKey).toBe('real-key-existing');
251
+ });
252
+
253
+ test('refuses [server-managed] tag', async () => {
254
+ manager.persistenceFile = null;
255
+ manager.keys.loxiaApiKey = 'real-key';
256
+ await manager.setSessionKeys('sess-1', {
257
+ loxiaApiKey: 'lx_abc[server-managed]'
258
+ });
259
+ expect(manager.keys.loxiaApiKey).toBe('real-key');
260
+ });
261
+
262
+ test('refuses platform-managed sentinel', async () => {
263
+ manager.persistenceFile = null;
264
+ manager.keys.loxiaApiKey = 'real-key';
265
+ await manager.setSessionKeys('sess-1', { loxiaApiKey: 'platform-managed' });
266
+ expect(manager.keys.loxiaApiKey).toBe('real-key');
267
+ });
268
+
269
+ test('refuses placeholder vendor keys', async () => {
270
+ manager.persistenceFile = null;
271
+ manager.keys.vendorKeys = { anthropic: 'real-anth-key' };
272
+ await manager.setSessionKeys('sess-1', {
273
+ vendorKeys: { anthropic: '••••••••(server-managed)' }
274
+ });
275
+ expect(manager.keys.vendorKeys.anthropic).toBe('real-anth-key');
276
+ });
277
+
278
+ test('still accepts real keys (regression guard for the guard)', async () => {
279
+ manager.persistenceFile = null;
280
+ manager.keys.loxiaApiKey = 'old';
281
+ await manager.setSessionKeys('sess-1', { loxiaApiKey: 'lx_brand_new_real_key' });
282
+ expect(manager.keys.loxiaApiKey).toBe('lx_brand_new_real_key');
283
+ });
284
+ });
285
+
123
286
  test('getSessionKeys returns keys regardless of sessionId', () => {
124
287
  manager.keys.loxiaApiKey = 'test-key';
125
288
  const keys = manager.getSessionKeys('any-session');