onbuzz 4.5.0 → 4.6.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 (989) 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 +183 -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 +281 -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 +249 -15
  34. package/src/index.js +8 -0
  35. package/src/interfaces/webServer.js +271 -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/imageFormat.js +249 -0
  44. package/src/tools/imageTool.js +107 -18
  45. package/src/tools/jobDoneTool.js +111 -3
  46. package/src/tools/videoTool.js +94 -60
  47. package/src/tools/webTool.js +9 -0
  48. package/src/utilities/__tests__/apiKeyPlaceholders.test.js +120 -0
  49. package/src/utilities/__tests__/brand.test.js +115 -0
  50. package/src/utilities/apiKeyPlaceholders.js +68 -0
  51. package/src/utilities/brand.js +93 -0
  52. package/src/utilities/userDataDir.js +5 -0
  53. package/web-ui/build/index.html +2 -2
  54. package/web-ui/build/static/1c-CvuQ3hv-.js +1 -0
  55. package/web-ui/build/static/abap-BLdv0Jje.js +1 -0
  56. package/web-ui/build/static/abnf-CGGg8KtC.js +1 -0
  57. package/web-ui/build/static/abnf-DRXF8AHh.js +1 -0
  58. package/web-ui/build/static/accesslog-C0v06age.js +1 -0
  59. package/web-ui/build/static/actionscript-5uhk1qo4.js +1 -0
  60. package/web-ui/build/static/actionscript-eFh_rL7l.js +1 -0
  61. package/web-ui/build/static/ada-DX064lsk.js +1 -0
  62. package/web-ui/build/static/ada-DtDpZJA8.js +1 -0
  63. package/web-ui/build/static/agda-DPnmQC2V.js +1 -0
  64. package/web-ui/build/static/al-BJnZv7Mq.js +1 -0
  65. package/web-ui/build/static/angelscript-BzX4egqM.js +1 -0
  66. package/web-ui/build/static/antlr4-CpvLBdqN.js +1 -0
  67. package/web-ui/build/static/apache-CeMpLZgQ.js +1 -0
  68. package/web-ui/build/static/apacheconf-DuxpNgGg.js +1 -0
  69. package/web-ui/build/static/apex-BnvL-Zqw.js +1 -0
  70. package/web-ui/build/static/apl-Cwp1WC58.js +1 -0
  71. package/web-ui/build/static/applescript-Drjf4gZ_.js +1 -0
  72. package/web-ui/build/static/applescript-OCRtzdLy.js +1 -0
  73. package/web-ui/build/static/aql-BT92x5XB.js +1 -0
  74. package/web-ui/build/static/arcade-BS9r1rKb.js +1 -0
  75. package/web-ui/build/static/arduino-Dx4b0RsU.js +1 -0
  76. package/web-ui/build/static/arduino-MC82bxgK.js +1 -0
  77. package/web-ui/build/static/arff-BPbJPmCK.js +1 -0
  78. package/web-ui/build/static/armasm-Ae0OYiNN.js +1 -0
  79. package/web-ui/build/static/asciidoc-BFCjTY8x.js +1 -0
  80. package/web-ui/build/static/asciidoc-Cum1UNn8.js +1 -0
  81. package/web-ui/build/static/asm6502-DRrCRZ3g.js +1 -0
  82. package/web-ui/build/static/asmatmel-QweP0nrX.js +1 -0
  83. package/web-ui/build/static/aspectj-GSWlVl13.js +1 -0
  84. package/web-ui/build/static/aspnet-gFBjg3Gc.js +1 -0
  85. package/web-ui/build/static/autohotkey-BKW8CgdS.js +1 -0
  86. package/web-ui/build/static/autohotkey-PxYn0v1n.js +1 -0
  87. package/web-ui/build/static/autoit-Dm1-Ww37.js +1 -0
  88. package/web-ui/build/static/autoit-ttEVAAKG.js +1 -0
  89. package/web-ui/build/static/avisynth-B7Wkp41N.js +1 -0
  90. package/web-ui/build/static/avrasm-CUPF81zm.js +1 -0
  91. package/web-ui/build/static/avro-idl-DHWmsw82.js +1 -0
  92. package/web-ui/build/static/awk-CjJ3RSZI.js +1 -0
  93. package/web-ui/build/static/axapta-C1qEYhtS.js +1 -0
  94. package/web-ui/build/static/bash-BGEpCDRi.js +1 -0
  95. package/web-ui/build/static/bash-nKHqg4vr.js +1 -0
  96. package/web-ui/build/static/basic-BoEGbohL.js +1 -0
  97. package/web-ui/build/static/basic-LeZDGhzq.js +1 -0
  98. package/web-ui/build/static/batch-AgpF9rt8.js +1 -0
  99. package/web-ui/build/static/bbcode-qAuG7NMV.js +1 -0
  100. package/web-ui/build/static/bicep-BjdiK558.js +1 -0
  101. package/web-ui/build/static/birb-DAe1WhT3.js +1 -0
  102. package/web-ui/build/static/bison-BanDUZpy.js +1 -0
  103. package/web-ui/build/static/bnf-DlBe3_6s.js +1 -0
  104. package/web-ui/build/static/bnf-QgoO3Q8o.js +1 -0
  105. package/web-ui/build/static/brainfuck-B1DXmfDc.js +1 -0
  106. package/web-ui/build/static/brainfuck-B_JhB4QU.js +1 -0
  107. package/web-ui/build/static/brightscript-C0POlK1a.js +1 -0
  108. package/web-ui/build/static/bro-CjGWwSC2.js +1 -0
  109. package/web-ui/build/static/bsl-DXsNn0E7.js +1 -0
  110. package/web-ui/build/static/c-D-Xouzk3.js +1 -0
  111. package/web-ui/build/static/c-Df8JpOdZ.js +1 -0
  112. package/web-ui/build/static/c-like-BQySGMeF.js +1 -0
  113. package/web-ui/build/static/cal-DLefuKn4.js +1 -0
  114. package/web-ui/build/static/capnproto-DuI4CHAK.js +1 -0
  115. package/web-ui/build/static/ceylon-DyUD9r5X.js +1 -0
  116. package/web-ui/build/static/cfscript-B71LgEx4.js +1 -0
  117. package/web-ui/build/static/chaiscript-DUx8exmo.js +1 -0
  118. package/web-ui/build/static/cil-BkH647hL.js +1 -0
  119. package/web-ui/build/static/clean-4G2AsMGw.js +1 -0
  120. package/web-ui/build/static/clojure-C41DUPjJ.js +1 -0
  121. package/web-ui/build/static/clojure-RzWG1SWB.js +1 -0
  122. package/web-ui/build/static/clojure-repl-C12peSNj.js +1 -0
  123. package/web-ui/build/static/cmake-D9dyf1Ef.js +1 -0
  124. package/web-ui/build/static/cmake-X6aOgq7A.js +1 -0
  125. package/web-ui/build/static/cobol-DQBujvW6.js +1 -0
  126. package/web-ui/build/static/coffeescript-3uuDLR0C.js +1 -0
  127. package/web-ui/build/static/coffeescript-BesW_-0N.js +1 -0
  128. package/web-ui/build/static/concurnas-DUqxEcDq.js +1 -0
  129. package/web-ui/build/static/coq-BNw0ZmzS.js +1 -0
  130. package/web-ui/build/static/coq-J6mf-n4i.js +1 -0
  131. package/web-ui/build/static/cos-B-p2VbRC.js +1 -0
  132. package/web-ui/build/static/cpp-B91xny9o.js +1 -0
  133. package/web-ui/build/static/cpp-C-qfcmAQ.js +1 -0
  134. package/web-ui/build/static/crmsh-CXJSYh9n.js +1 -0
  135. package/web-ui/build/static/crystal-BZJ_gkDx.js +1 -0
  136. package/web-ui/build/static/crystal-D7rBvt2Y.js +1 -0
  137. package/web-ui/build/static/csharp-CHWbNjwN.js +1 -0
  138. package/web-ui/build/static/csharp-DHH7lbyr.js +1 -0
  139. package/web-ui/build/static/cshtml-6XKl5N6w.js +1 -0
  140. package/web-ui/build/static/csp-BwQp4uKS.js +1 -0
  141. package/web-ui/build/static/csp-LxTXhb7W.js +1 -0
  142. package/web-ui/build/static/css-JviRe6l1.js +1 -0
  143. package/web-ui/build/static/css-extras-DdIyhyWh.js +1 -0
  144. package/web-ui/build/static/csv-BhyLVYKF.js +1 -0
  145. package/web-ui/build/static/cypher-45QLqKfb.js +1 -0
  146. package/web-ui/build/static/d-BQuCFdtT.js +1 -0
  147. package/web-ui/build/static/d-rDpztdwo.js +1 -0
  148. package/web-ui/build/static/dart-B3HdKwvI.js +1 -0
  149. package/web-ui/build/static/dart-CxIvlNfF.js +1 -0
  150. package/web-ui/build/static/dataweave-CMS5SC_F.js +1 -0
  151. package/web-ui/build/static/dax-C_neqUB4.js +1 -0
  152. package/web-ui/build/static/delphi-D86BXUtC.js +1 -0
  153. package/web-ui/build/static/dhall-BGV0CTjz.js +1 -0
  154. package/web-ui/build/static/diff-Br5L84xu.js +1 -0
  155. package/web-ui/build/static/diff-C8dJOj7p.js +1 -0
  156. package/web-ui/build/static/django-CRpfLgb_.js +1 -0
  157. package/web-ui/build/static/django-Cr0k0BHt.js +1 -0
  158. package/web-ui/build/static/dns-CvhVGt9J.js +1 -0
  159. package/web-ui/build/static/dns-zone-file--waGszJ5.js +1 -0
  160. package/web-ui/build/static/docker-Bp-jYj4d.js +1 -0
  161. package/web-ui/build/static/dockerfile-B9PF5D-H.js +1 -0
  162. package/web-ui/build/static/dos-CGjRa73t.js +1 -0
  163. package/web-ui/build/static/dot---3xJv0W.js +1 -0
  164. package/web-ui/build/static/dsconfig-ChUbMzIk.js +1 -0
  165. package/web-ui/build/static/dts-DzVrXhdk.js +1 -0
  166. package/web-ui/build/static/dust-BuyYJzfS.js +1 -0
  167. package/web-ui/build/static/ebnf-B4Jhny4j.js +1 -0
  168. package/web-ui/build/static/ebnf-wTpKeELK.js +1 -0
  169. package/web-ui/build/static/editorconfig-DijMMyBE.js +1 -0
  170. package/web-ui/build/static/eiffel-gSk8UUfh.js +1 -0
  171. package/web-ui/build/static/ejs-U-J4wHaR.js +1 -0
  172. package/web-ui/build/static/elixir-CLgHOCRk.js +1 -0
  173. package/web-ui/build/static/elixir-KhfnyoV6.js +1 -0
  174. package/web-ui/build/static/elm-B0g83jwv.js +1 -0
  175. package/web-ui/build/static/elm-Bl8qDmwz.js +1 -0
  176. package/web-ui/build/static/erb-CwkagsxA.js +1 -0
  177. package/web-ui/build/static/erb-DXfF2Urb.js +1 -0
  178. package/web-ui/build/static/erlang-BsONy4Br.js +1 -0
  179. package/web-ui/build/static/erlang-C44ddtgw.js +1 -0
  180. package/web-ui/build/static/erlang-repl-DhirJ_Ji.js +1 -0
  181. package/web-ui/build/static/etlua-C71HyvJj.js +1 -0
  182. package/web-ui/build/static/excel-B_RD_Nc6.js +1 -0
  183. package/web-ui/build/static/excel-formula-xRVcfp1T.js +1 -0
  184. package/web-ui/build/static/factor-CftUx68l.js +1 -0
  185. package/web-ui/build/static/false-DqRtSZRC.js +1 -0
  186. package/web-ui/build/static/firestore-security-rules-BCG_0nJP.js +1 -0
  187. package/web-ui/build/static/fix-CnRMAIWg.js +1 -0
  188. package/web-ui/build/static/flix-DLAgo_-e.js +1 -0
  189. package/web-ui/build/static/flow-w5YSIX1I.js +1 -0
  190. package/web-ui/build/static/fortran-CH5byJ0j.js +1 -0
  191. package/web-ui/build/static/fortran-DK-jnXQF.js +1 -0
  192. package/web-ui/build/static/fsharp-Cnfw9xB2.js +1 -0
  193. package/web-ui/build/static/fsharp-hebdfC6F.js +1 -0
  194. package/web-ui/build/static/ftl-DSSTp35t.js +1 -0
  195. package/web-ui/build/static/gams-C3akjfKZ.js +1 -0
  196. package/web-ui/build/static/gap-Dve6kEeL.js +1 -0
  197. package/web-ui/build/static/gauss-BmUqjv1m.js +1 -0
  198. package/web-ui/build/static/gcode-CjPpcuxm.js +1 -0
  199. package/web-ui/build/static/gcode-DdF0Sf0K.js +1 -0
  200. package/web-ui/build/static/gdscript-uyE_Q4Bz.js +1 -0
  201. package/web-ui/build/static/gedcom-9_5CrYud.js +1 -0
  202. package/web-ui/build/static/gherkin-0qL8AiDA.js +1 -0
  203. package/web-ui/build/static/gherkin-CBXpoWw3.js +1 -0
  204. package/web-ui/build/static/git-D6Y51k33.js +1 -0
  205. package/web-ui/build/static/glsl-DnD7skof.js +1 -0
  206. package/web-ui/build/static/glsl-aij7eTLw.js +1 -0
  207. package/web-ui/build/static/gml-3zbjVRHR.js +1 -0
  208. package/web-ui/build/static/gml-BOViyHVy.js +1 -0
  209. package/web-ui/build/static/gn-lYZFOgaG.js +1 -0
  210. package/web-ui/build/static/go-D3NQLBKz.js +1 -0
  211. package/web-ui/build/static/go-_v8tkYQe.js +1 -0
  212. package/web-ui/build/static/go-module-C6c3_rbX.js +1 -0
  213. package/web-ui/build/static/golo-BOIzwgKG.js +1 -0
  214. package/web-ui/build/static/gradle-DdejLgT6.js +1 -0
  215. package/web-ui/build/static/graphql-BWowSWlo.js +1 -0
  216. package/web-ui/build/static/groovy-DE_kIGjj.js +1 -0
  217. package/web-ui/build/static/groovy-DatEqK3Y.js +1 -0
  218. package/web-ui/build/static/haml-CpEpgDyf.js +1 -0
  219. package/web-ui/build/static/haml-DbPIKAsr.js +1 -0
  220. package/web-ui/build/static/handlebars-BcvOygMh.js +1 -0
  221. package/web-ui/build/static/handlebars-CM_40QlT.js +1 -0
  222. package/web-ui/build/static/haskell-DVgDTyj3.js +1 -0
  223. package/web-ui/build/static/haskell-Dm2oiqNu.js +1 -0
  224. package/web-ui/build/static/haxe--0QfWvD_.js +1 -0
  225. package/web-ui/build/static/haxe-DClHSH5I.js +1 -0
  226. package/web-ui/build/static/hcl-BaxNlNAk.js +1 -0
  227. package/web-ui/build/static/hlsl-Di7PYfJn.js +1 -0
  228. package/web-ui/build/static/hoon-Bq4hhWSd.js +1 -0
  229. package/web-ui/build/static/hpkp-Bu1AnCZZ.js +1 -0
  230. package/web-ui/build/static/hsp-CbIHPOnb.js +1 -0
  231. package/web-ui/build/static/hsts-inGzMZHb.js +1 -0
  232. package/web-ui/build/static/htmlbars-B63TZb6k.js +1 -0
  233. package/web-ui/build/static/http-3wWrh86I.js +1 -0
  234. package/web-ui/build/static/http-Bv97BGAr.js +1 -0
  235. package/web-ui/build/static/hy-CIEvnIJC.js +1 -0
  236. package/web-ui/build/static/ichigojam-BAyO373g.js +1 -0
  237. package/web-ui/build/static/icon-CGCawTFI.js +1 -0
  238. package/web-ui/build/static/icu-message-format-C_lOXF7I.js +1 -0
  239. package/web-ui/build/static/idris-D0SaDFta.js +1 -0
  240. package/web-ui/build/static/iecst-DIJ6Ei7g.js +1 -0
  241. package/web-ui/build/static/ignore-CgcF6vXx.js +1 -0
  242. package/web-ui/build/static/index-CCDUVvvx.js +1 -0
  243. package/web-ui/build/static/index-Cjg3uZB9.js +1109 -0
  244. package/web-ui/build/static/index-CjtNtdGN.js +13 -0
  245. package/web-ui/build/static/index-DpMwgPzf.css +1 -0
  246. package/web-ui/build/static/inform7-C_MqBtMp.js +1 -0
  247. package/web-ui/build/static/inform7-CmRJkJSh.js +1 -0
  248. package/web-ui/build/static/ini-BE6jwIzm.js +1 -0
  249. package/web-ui/build/static/ini-BJ50J7Sm.js +1 -0
  250. package/web-ui/build/static/io-Cnt0nyV5.js +1 -0
  251. package/web-ui/build/static/irpf90-BjRJE_kg.js +1 -0
  252. package/web-ui/build/static/isbl-C7912t_8.js +1 -0
  253. package/web-ui/build/static/j-D6ci3wH9.js +1 -0
  254. package/web-ui/build/static/java-B_gtzL63.js +1 -0
  255. package/web-ui/build/static/java-CChyLI1p.js +1 -0
  256. package/web-ui/build/static/javadoc-CGvzgn19.js +1 -0
  257. package/web-ui/build/static/javadoclike-CI4krpLe.js +1 -0
  258. package/web-ui/build/static/javascript-CgORCJsx.js +1 -0
  259. package/web-ui/build/static/javastacktrace-DNnLXvJa.js +1 -0
  260. package/web-ui/build/static/jboss-cli-DIfGm3Rl.js +1 -0
  261. package/web-ui/build/static/jexl-CYQxvL_i.js +1 -0
  262. package/web-ui/build/static/jolie-C2fxUjz7.js +1 -0
  263. package/web-ui/build/static/jq-j1fAl-OU.js +1 -0
  264. package/web-ui/build/static/js-extras-Dqx-da8U.js +1 -0
  265. package/web-ui/build/static/js-templates-jQphR4CW.js +1 -0
  266. package/web-ui/build/static/jsdoc-BCunhOqo.js +1 -0
  267. package/web-ui/build/static/json-CljDde4D.js +1 -0
  268. package/web-ui/build/static/json-Cvzg5_hO.js +1 -0
  269. package/web-ui/build/static/json5-B19V_yl9.js +1 -0
  270. package/web-ui/build/static/jsonp-WdmhO5Oi.js +1 -0
  271. package/web-ui/build/static/jsstacktrace-LpNHn4a_.js +1 -0
  272. package/web-ui/build/static/jsx-Zw6Egddf.js +1 -0
  273. package/web-ui/build/static/julia-DPlpJZNN.js +1 -0
  274. package/web-ui/build/static/julia-DuKc9nrz.js +1 -0
  275. package/web-ui/build/static/julia-repl-C-LuPMzI.js +1 -0
  276. package/web-ui/build/static/keepalived-DDl-dK9a.js +1 -0
  277. package/web-ui/build/static/keyman-DCtgoYKu.js +1 -0
  278. package/web-ui/build/static/kotlin-D9aFeaCS.js +1 -0
  279. package/web-ui/build/static/kotlin-DlrR34XG.js +1 -0
  280. package/web-ui/build/static/kumir-B_aiiAzq.js +1 -0
  281. package/web-ui/build/static/kusto-CD4lHO1B.js +1 -0
  282. package/web-ui/build/static/lasso-BAMF8mdd.js +1 -0
  283. package/web-ui/build/static/latex-BjEyffe7.js +1 -0
  284. package/web-ui/build/static/latex-NaCSqcbD.js +1 -0
  285. package/web-ui/build/static/latte-BACpaGl3.js +1 -0
  286. package/web-ui/build/static/ldif-CRWTiH1W.js +1 -0
  287. package/web-ui/build/static/leaf-BYydRpJx.js +1 -0
  288. package/web-ui/build/static/less-BtFu1MXi.js +1 -0
  289. package/web-ui/build/static/less-COgcqIOM.js +1 -0
  290. package/web-ui/build/static/lilypond-BMLjCV3G.js +1 -0
  291. package/web-ui/build/static/liquid-Dr5bQMAB.js +1 -0
  292. package/web-ui/build/static/lisp-CE1ra7Xs.js +1 -0
  293. package/web-ui/build/static/lisp-CcOEo5DI.js +1 -0
  294. package/web-ui/build/static/livecodeserver-DNuOfASY.js +1 -0
  295. package/web-ui/build/static/livescript-BJor4pxz.js +1 -0
  296. package/web-ui/build/static/livescript-DFaZj6XM.js +1 -0
  297. package/web-ui/build/static/llvm-CJtHIXsX.js +1 -0
  298. package/web-ui/build/static/llvm-d3gQICQs.js +1 -0
  299. package/web-ui/build/static/log-B0pKN1S4.js +1 -0
  300. package/web-ui/build/static/lolcode-C_V6Sffm.js +1 -0
  301. package/web-ui/build/static/lsl-yhp5dB9o.js +1 -0
  302. package/web-ui/build/static/lua-BDTJq_SO.js +1 -0
  303. package/web-ui/build/static/lua-BaKkUUd_.js +1 -0
  304. package/web-ui/build/static/magma-aTzw_jlN.js +1 -0
  305. package/web-ui/build/static/makefile-FyZn4dZ-.js +1 -0
  306. package/web-ui/build/static/makefile-Vk7smupm.js +1 -0
  307. package/web-ui/build/static/markdown-BHavO-Hk.js +1 -0
  308. package/web-ui/build/static/markdown-CTYy6uqC.js +1 -0
  309. package/web-ui/build/static/markup-templating-DJWuQB2F.js +1 -0
  310. package/web-ui/build/static/mathematica-BnMzpFTS.js +1 -0
  311. package/web-ui/build/static/matlab-BsW3yHe5.js +1 -0
  312. package/web-ui/build/static/matlab-C8_ylrUg.js +1 -0
  313. package/web-ui/build/static/maxima-c3e9EB-f.js +1 -0
  314. package/web-ui/build/static/maxscript-DU-NoCpb.js +1 -0
  315. package/web-ui/build/static/mel-CcB2EUO0.js +1 -0
  316. package/web-ui/build/static/mel-u6igP96m.js +1 -0
  317. package/web-ui/build/static/mercury-YZshmW3v.js +1 -0
  318. package/web-ui/build/static/mermaid-C9dmgLlU.js +1 -0
  319. package/web-ui/build/static/mipsasm-BXHH9ztX.js +1 -0
  320. package/web-ui/build/static/mizar-B1317rho.js +1 -0
  321. package/web-ui/build/static/mizar-BjaPUUcM.js +1 -0
  322. package/web-ui/build/static/mojolicious-BQ8vE8HW.js +1 -0
  323. package/web-ui/build/static/mongodb-P-J2PnwH.js +1 -0
  324. package/web-ui/build/static/monkey-DcKZEVh6.js +1 -0
  325. package/web-ui/build/static/monkey-wMAzhDv4.js +1 -0
  326. package/web-ui/build/static/moonscript-C9Ea7K1o.js +1 -0
  327. package/web-ui/build/static/moonscript-DAjW1T8X.js +1 -0
  328. package/web-ui/build/static/n1ql-6nGwiuTr.js +1 -0
  329. package/web-ui/build/static/n1ql-BxgYqKfs.js +1 -0
  330. package/web-ui/build/static/n4js-Cqw8_-b7.js +1 -0
  331. package/web-ui/build/static/nand2tetris-hdl-B3Qrhhfv.js +1 -0
  332. package/web-ui/build/static/naniscript-BpIC5j6P.js +1 -0
  333. package/web-ui/build/static/nasm-Dp1z_ttd.js +1 -0
  334. package/web-ui/build/static/neon-B4RksdIv.js +1 -0
  335. package/web-ui/build/static/nevod-P34zfD9_.js +1 -0
  336. package/web-ui/build/static/nginx-CSaiFc4g.js +1 -0
  337. package/web-ui/build/static/nginx-bZFV7OqP.js +1 -0
  338. package/web-ui/build/static/nim-D04ADsdj.js +1 -0
  339. package/web-ui/build/static/nim-D37nbh5y.js +1 -0
  340. package/web-ui/build/static/nix-BPsQ58gF.js +1 -0
  341. package/web-ui/build/static/nix-keWnuH3h.js +1 -0
  342. package/web-ui/build/static/node-repl-rNkVcb6S.js +1 -0
  343. package/web-ui/build/static/nsis-DT8bhvLc.js +1 -0
  344. package/web-ui/build/static/nsis-DvfCmyQQ.js +1 -0
  345. package/web-ui/build/static/objectivec-BaJIzRqu.js +1 -0
  346. package/web-ui/build/static/objectivec-CmAY0jlQ.js +1 -0
  347. package/web-ui/build/static/ocaml-Dsf96dbW.js +1 -0
  348. package/web-ui/build/static/ocaml-SFQJ7AwJ.js +1 -0
  349. package/web-ui/build/static/opencl-Dp9ILs3s.js +1 -0
  350. package/web-ui/build/static/openqasm-Bsk-xK6C.js +1 -0
  351. package/web-ui/build/static/openscad-Dgvp4h50.js +1 -0
  352. package/web-ui/build/static/oxygene-C9rTsztX.js +1 -0
  353. package/web-ui/build/static/oz-DNlV-Ssf.js +1 -0
  354. package/web-ui/build/static/parigp-B7a5XVP7.js +1 -0
  355. package/web-ui/build/static/parser-nTo2WBxY.js +1 -0
  356. package/web-ui/build/static/parser3-BSD4cYqf.js +1 -0
  357. package/web-ui/build/static/pascal-DJxIFBHG.js +1 -0
  358. package/web-ui/build/static/pascaligo-JdV741ps.js +1 -0
  359. package/web-ui/build/static/pcaxis-DdexNvEQ.js +1 -0
  360. package/web-ui/build/static/peoplecode-DxBgZPZT.js +1 -0
  361. package/web-ui/build/static/perl-C0INln41.js +1 -0
  362. package/web-ui/build/static/perl-DvRuNidH.js +1 -0
  363. package/web-ui/build/static/pf-BjguNjII.js +1 -0
  364. package/web-ui/build/static/pgsql-9w8Z8Ams.js +1 -0
  365. package/web-ui/build/static/php-DKQIY8Pe.js +1 -0
  366. package/web-ui/build/static/php-DibEnIhD.js +1 -0
  367. package/web-ui/build/static/php-extras-CKKhA74Z.js +1 -0
  368. package/web-ui/build/static/php-template-Cjba7UNU.js +1 -0
  369. package/web-ui/build/static/phpdoc-QXtTW5az.js +1 -0
  370. package/web-ui/build/static/plaintext-Cbn61_h_.js +1 -0
  371. package/web-ui/build/static/plsql-f34z7hfB.js +1 -0
  372. package/web-ui/build/static/pony-DBSnXJAW.js +1 -0
  373. package/web-ui/build/static/powerquery-lin81zqH.js +1 -0
  374. package/web-ui/build/static/powershell-BoyP16Ta.js +1 -0
  375. package/web-ui/build/static/powershell-CCpHONl6.js +1 -0
  376. package/web-ui/build/static/processing-Cd7-ycAb.js +1 -0
  377. package/web-ui/build/static/processing-CeGW9CwE.js +1 -0
  378. package/web-ui/build/static/profile-DLYi3Uya.js +1 -0
  379. package/web-ui/build/static/prolog-BVr1f3c4.js +1 -0
  380. package/web-ui/build/static/prolog-C3D6KhoT.js +1 -0
  381. package/web-ui/build/static/promql-dviC9B24.js +1 -0
  382. package/web-ui/build/static/properties-CSNjefFg.js +1 -0
  383. package/web-ui/build/static/properties-DTAWAQKc.js +1 -0
  384. package/web-ui/build/static/protobuf-BCYoMCa-.js +1 -0
  385. package/web-ui/build/static/protobuf-D8G6xbh1.js +1 -0
  386. package/web-ui/build/static/psl-DzehMnl-.js +1 -0
  387. package/web-ui/build/static/pug-Cl4m_Cmv.js +1 -0
  388. package/web-ui/build/static/puppet-CECKDklS.js +1 -0
  389. package/web-ui/build/static/puppet-ZSk9z7h2.js +1 -0
  390. package/web-ui/build/static/pure-CRYVKpUf.js +1 -0
  391. package/web-ui/build/static/purebasic-B1B7jCI9.js +1 -0
  392. package/web-ui/build/static/purebasic-BdOvLN02.js +1 -0
  393. package/web-ui/build/static/purescript-CdFZo5U_.js +1 -0
  394. package/web-ui/build/static/python-B_UnJ1V3.js +1 -0
  395. package/web-ui/build/static/python-BeSi3a8_.js +1 -0
  396. package/web-ui/build/static/python-repl-BBmtoedD.js +1 -0
  397. package/web-ui/build/static/q-Ery9rED_.js +1 -0
  398. package/web-ui/build/static/q-OEzRNQWZ.js +1 -0
  399. package/web-ui/build/static/qml-DdHTOYCC.js +1 -0
  400. package/web-ui/build/static/qml-DqjqC3TV.js +1 -0
  401. package/web-ui/build/static/qore-D3qGrct2.js +1 -0
  402. package/web-ui/build/static/qsharp-DdQgHY8o.js +1 -0
  403. package/web-ui/build/static/r-BsnBh-Gb.js +1 -0
  404. package/web-ui/build/static/r-CgLmD3ej.js +1 -0
  405. package/web-ui/build/static/racket-CgSPkQxA.js +1 -0
  406. package/web-ui/build/static/reason-BRJ4xDT3.js +1 -0
  407. package/web-ui/build/static/reasonml-B8V18bIF.js +1 -0
  408. package/web-ui/build/static/regex-C8qp_5tY.js +1 -0
  409. package/web-ui/build/static/rego-B3dQMEmR.js +1 -0
  410. package/web-ui/build/static/renpy-BmlUaEOQ.js +1 -0
  411. package/web-ui/build/static/rest-XlDNtjp0.js +1 -0
  412. package/web-ui/build/static/rib-BfquiuWk.js +1 -0
  413. package/web-ui/build/static/rip-dGRhlG0v.js +1 -0
  414. package/web-ui/build/static/roboconf-CtBSSFaA.js +1 -0
  415. package/web-ui/build/static/roboconf-wrbztr2r.js +1 -0
  416. package/web-ui/build/static/robotframework-BSxuJaY6.js +1 -0
  417. package/web-ui/build/static/routeros-DHKFvEvZ.js +1 -0
  418. package/web-ui/build/static/rsl-BhjvE0Cr.js +1 -0
  419. package/web-ui/build/static/ruby-BMED8W31.js +1 -0
  420. package/web-ui/build/static/ruby-BkE7uZGd.js +1 -0
  421. package/web-ui/build/static/ruleslanguage-DGe1m8Id.js +1 -0
  422. package/web-ui/build/static/rust-CUje9n_P.js +1 -0
  423. package/web-ui/build/static/rust-O67yEsAu.js +1 -0
  424. package/web-ui/build/static/sas-BpDWmnoa.js +1 -0
  425. package/web-ui/build/static/sas-DRBVod_5.js +1 -0
  426. package/web-ui/build/static/sass-CdUBh_kW.js +1 -0
  427. package/web-ui/build/static/scala-BvUTPbg2.js +1 -0
  428. package/web-ui/build/static/scala-DmXpVBFR.js +1 -0
  429. package/web-ui/build/static/scheme-BfzSegEb.js +1 -0
  430. package/web-ui/build/static/scheme-CL7dxV3L.js +1 -0
  431. package/web-ui/build/static/scilab-Bwx8K6ut.js +1 -0
  432. package/web-ui/build/static/scss-Bk3cnVi-.js +1 -0
  433. package/web-ui/build/static/scss-CEq_Uo2G.js +1 -0
  434. package/web-ui/build/static/shell-CH2lH60k.js +1 -0
  435. package/web-ui/build/static/shell-session-Dsc6nnXg.js +1 -0
  436. package/web-ui/build/static/smali-DR57iO-M.js +1 -0
  437. package/web-ui/build/static/smali-QDgUokkE.js +1 -0
  438. package/web-ui/build/static/smalltalk-CNWYoGI5.js +1 -0
  439. package/web-ui/build/static/smalltalk-DuKK00UG.js +1 -0
  440. package/web-ui/build/static/smarty-CM_K74KX.js +1 -0
  441. package/web-ui/build/static/sml-B-u4vtVQ.js +1 -0
  442. package/web-ui/build/static/sml-CnAed_Dv.js +1 -0
  443. package/web-ui/build/static/solidity-Bc_FUKPw.js +1 -0
  444. package/web-ui/build/static/solution-file-CE-Ffn8a.js +1 -0
  445. package/web-ui/build/static/soy-B__lNQNx.js +1 -0
  446. package/web-ui/build/static/sparql-BZnN0yju.js +1 -0
  447. package/web-ui/build/static/splunk-spl-DIs_BiUo.js +1 -0
  448. package/web-ui/build/static/sqf-DNSlhOUj.js +1 -0
  449. package/web-ui/build/static/sqf-DwPev5qJ.js +1 -0
  450. package/web-ui/build/static/sql-C9UaJUCf.js +1 -0
  451. package/web-ui/build/static/sql-DAnJSRyV.js +1 -0
  452. package/web-ui/build/static/sql_more-DMMfa_Zg.js +1 -0
  453. package/web-ui/build/static/squirrel-Bevu4MOl.js +1 -0
  454. package/web-ui/build/static/stan-Bs_yMVnC.js +1 -0
  455. package/web-ui/build/static/stan-Cduy4Z3W.js +1 -0
  456. package/web-ui/build/static/stata-BrHJdKRc.js +1 -0
  457. package/web-ui/build/static/step21-CGhxzCID.js +1 -0
  458. package/web-ui/build/static/stylus-B2lueE5_.js +1 -0
  459. package/web-ui/build/static/stylus-pKniqDuc.js +1 -0
  460. package/web-ui/build/static/subunit-B5WE5S5P.js +1 -0
  461. package/web-ui/build/static/swift-CEi576mT.js +1 -0
  462. package/web-ui/build/static/swift-CQCuFcEK.js +1 -0
  463. package/web-ui/build/static/systemd-CF-EHggg.js +1 -0
  464. package/web-ui/build/static/t4-cs-DWdn0RQB.js +1 -0
  465. package/web-ui/build/static/t4-templating-C15ubdW6.js +1 -0
  466. package/web-ui/build/static/t4-vb-Cz2QCDLO.js +1 -0
  467. package/web-ui/build/static/taggerscript-CfU_hv7J.js +1 -0
  468. package/web-ui/build/static/tap-2-gLM4Lw.js +1 -0
  469. package/web-ui/build/static/tap-M44CQJkj.js +1 -0
  470. package/web-ui/build/static/tcl-BMpkwsCa.js +1 -0
  471. package/web-ui/build/static/tcl-CfF-clAT.js +1 -0
  472. package/web-ui/build/static/textile-CUkgUEkV.js +1 -0
  473. package/web-ui/build/static/thrift-daJZ1DGJ.js +1 -0
  474. package/web-ui/build/static/toml-DnW5prhH.js +1 -0
  475. package/web-ui/build/static/tp-ZqeJLSGg.js +1 -0
  476. package/web-ui/build/static/tremor-WcELDSvz.js +1 -0
  477. package/web-ui/build/static/tsx-BVww6xUP.js +1 -0
  478. package/web-ui/build/static/tt2-Cxt3LLr_.js +1 -0
  479. package/web-ui/build/static/turtle-DmRTxNN8.js +1 -0
  480. package/web-ui/build/static/twig-DcLADpYg.js +1 -0
  481. package/web-ui/build/static/twig-Drdxszx_.js +1 -0
  482. package/web-ui/build/static/typescript-CgVWCuS9.js +1 -0
  483. package/web-ui/build/static/typescript-D3GjnDi9.js +1 -0
  484. package/web-ui/build/static/typoscript-B4qyGuOT.js +1 -0
  485. package/web-ui/build/static/unrealscript-BtIQeIeR.js +1 -0
  486. package/web-ui/build/static/uorazor-eWa_YDYv.js +1 -0
  487. package/web-ui/build/static/uri-CxsgAGHN.js +1 -0
  488. package/web-ui/build/static/v-D84eyWwn.js +1 -0
  489. package/web-ui/build/static/vala-Ccb9w5DW.js +1 -0
  490. package/web-ui/build/static/vala-MsPY7Xer.js +1 -0
  491. package/web-ui/build/static/vbnet-B33DMpXq.js +1 -0
  492. package/web-ui/build/static/vbnet-CaLY-AOH.js +1 -0
  493. package/web-ui/build/static/vbscript-DrXwNwNu.js +1 -0
  494. package/web-ui/build/static/vbscript-html-OTJEVr5m.js +1 -0
  495. package/web-ui/build/static/velocity-q0bXdAL4.js +1 -0
  496. package/web-ui/build/static/verilog-BD-Nxyqa.js +1 -0
  497. package/web-ui/build/static/verilog-PFy9sucN.js +1 -0
  498. package/web-ui/build/static/vhdl-BeCVyLiK.js +1 -0
  499. package/web-ui/build/static/vhdl-CMHdBpc5.js +1 -0
  500. package/web-ui/build/static/vim-3d_DOCsL.js +1 -0
  501. package/web-ui/build/static/vim-Bl5swMbH.js +1 -0
  502. package/web-ui/build/static/visual-basic-CjOvSeMg.js +1 -0
  503. package/web-ui/build/static/warpscript-C2EL35K2.js +1 -0
  504. package/web-ui/build/static/wasm-DmFD8VgH.js +1 -0
  505. package/web-ui/build/static/web-idl-RnzsvoQV.js +1 -0
  506. package/web-ui/build/static/wiki-Bu-zrPhW.js +1 -0
  507. package/web-ui/build/static/wolfram-CYYr3oaW.js +1 -0
  508. package/web-ui/build/static/wren-BXwkGwpn.js +1 -0
  509. package/web-ui/build/static/x86asm-_F19Kl5Y.js +1 -0
  510. package/web-ui/build/static/xeora-BmVPgL2I.js +1 -0
  511. package/web-ui/build/static/xl-68telKZ2.js +1 -0
  512. package/web-ui/build/static/xml-DPdaRgU0.js +1 -0
  513. package/web-ui/build/static/xml-doc-Aa64lijn.js +1 -0
  514. package/web-ui/build/static/xojo-DminlfyC.js +1 -0
  515. package/web-ui/build/static/xquery-BC1P9u6q.js +1 -0
  516. package/web-ui/build/static/xquery-kRz8gtls.js +1 -0
  517. package/web-ui/build/static/yaml-Bh9xHEaX.js +1 -0
  518. package/web-ui/build/static/yaml-CQW4NAe0.js +1 -0
  519. package/web-ui/build/static/yang-joHFzzXq.js +1 -0
  520. package/web-ui/build/static/zephir-BDGPNzsB.js +1 -0
  521. package/web-ui/build/static/zig-DtLmllYo.js +1 -0
  522. package/web-ui/build/static/1c-Cxgysx0K.js +0 -1
  523. package/web-ui/build/static/abap-D9Pd8DUG.js +0 -1
  524. package/web-ui/build/static/abnf-CHs5P8yl.js +0 -1
  525. package/web-ui/build/static/abnf-D5OtFEZO.js +0 -1
  526. package/web-ui/build/static/accesslog-CTD5Frmr.js +0 -1
  527. package/web-ui/build/static/actionscript-BN0BKQI7.js +0 -1
  528. package/web-ui/build/static/actionscript-DQNwbYlU.js +0 -1
  529. package/web-ui/build/static/ada-8O7AmGii.js +0 -1
  530. package/web-ui/build/static/ada-p8y2qCLB.js +0 -1
  531. package/web-ui/build/static/agda-BzT4bKSx.js +0 -1
  532. package/web-ui/build/static/al-Caq7o9RG.js +0 -1
  533. package/web-ui/build/static/angelscript-DivMpSHf.js +0 -1
  534. package/web-ui/build/static/antlr4-B1D_tnKH.js +0 -1
  535. package/web-ui/build/static/apache-l88_LooT.js +0 -1
  536. package/web-ui/build/static/apacheconf-kaxXABFE.js +0 -1
  537. package/web-ui/build/static/apex-CSdSRWUv.js +0 -1
  538. package/web-ui/build/static/apl-CHwVg89T.js +0 -1
  539. package/web-ui/build/static/applescript-C64qdYZf.js +0 -1
  540. package/web-ui/build/static/applescript-CqTGrBVp.js +0 -1
  541. package/web-ui/build/static/aql-BwKKr7z7.js +0 -1
  542. package/web-ui/build/static/arcade-C6oqHEwh.js +0 -1
  543. package/web-ui/build/static/arduino-DB4E20Km.js +0 -1
  544. package/web-ui/build/static/arduino-DKpgmHjE.js +0 -1
  545. package/web-ui/build/static/arff-CBbf8E8O.js +0 -1
  546. package/web-ui/build/static/armasm-Bogg7lrz.js +0 -1
  547. package/web-ui/build/static/asciidoc-3ZlDsfKD.js +0 -1
  548. package/web-ui/build/static/asciidoc-Cc88g_au.js +0 -1
  549. package/web-ui/build/static/asm6502-B4rN-vZ1.js +0 -1
  550. package/web-ui/build/static/asmatmel-B8zZLWGk.js +0 -1
  551. package/web-ui/build/static/aspectj-XdNtCtbN.js +0 -1
  552. package/web-ui/build/static/aspnet-DZVKB5n1.js +0 -1
  553. package/web-ui/build/static/autohotkey-CxDWLQqM.js +0 -1
  554. package/web-ui/build/static/autohotkey-DJStPrtS.js +0 -1
  555. package/web-ui/build/static/autoit-BWirJOCg.js +0 -1
  556. package/web-ui/build/static/autoit-CJcfmsnl.js +0 -1
  557. package/web-ui/build/static/avisynth-C7JQe3L7.js +0 -1
  558. package/web-ui/build/static/avrasm-CMiuHQvu.js +0 -1
  559. package/web-ui/build/static/avro-idl-kaRVyxMP.js +0 -1
  560. package/web-ui/build/static/awk-CQ70Cyh1.js +0 -1
  561. package/web-ui/build/static/axapta-DRxAzlG8.js +0 -1
  562. package/web-ui/build/static/bash-B2XqEYpT.js +0 -1
  563. package/web-ui/build/static/bash-D-D1taMA.js +0 -1
  564. package/web-ui/build/static/basic-Da1x7OIZ.js +0 -1
  565. package/web-ui/build/static/basic-Dslk2ZwT.js +0 -1
  566. package/web-ui/build/static/batch-B0wJNPoF.js +0 -1
  567. package/web-ui/build/static/bbcode-BXDdc2HS.js +0 -1
  568. package/web-ui/build/static/bicep-iiH-nx9J.js +0 -1
  569. package/web-ui/build/static/birb-DuTqqibI.js +0 -1
  570. package/web-ui/build/static/bison-D1Hw6owA.js +0 -1
  571. package/web-ui/build/static/bnf-BRhzfr87.js +0 -1
  572. package/web-ui/build/static/bnf-u1Iy1Ku7.js +0 -1
  573. package/web-ui/build/static/brainfuck-C4R5VJ3_.js +0 -1
  574. package/web-ui/build/static/brainfuck-C8niWF0i.js +0 -1
  575. package/web-ui/build/static/brightscript-DavMfkHx.js +0 -1
  576. package/web-ui/build/static/bro-CEMPoYum.js +0 -1
  577. package/web-ui/build/static/bsl-COeqiMqc.js +0 -1
  578. package/web-ui/build/static/c-BaaVQwFt.js +0 -1
  579. package/web-ui/build/static/c-BvALLiMv.js +0 -1
  580. package/web-ui/build/static/c-like-C4yx6s7b.js +0 -1
  581. package/web-ui/build/static/cal-CSxgKgNR.js +0 -1
  582. package/web-ui/build/static/capnproto-C9cMEmIo.js +0 -1
  583. package/web-ui/build/static/ceylon-Dj67Lf2T.js +0 -1
  584. package/web-ui/build/static/cfscript-BhALECgj.js +0 -1
  585. package/web-ui/build/static/chaiscript-Cg5weNRB.js +0 -1
  586. package/web-ui/build/static/cil-BR-JCsPu.js +0 -1
  587. package/web-ui/build/static/clean-xJMmqZ4X.js +0 -1
  588. package/web-ui/build/static/clojure-9C3tRo_T.js +0 -1
  589. package/web-ui/build/static/clojure-C2KNwa0h.js +0 -1
  590. package/web-ui/build/static/clojure-repl-B-pke3nS.js +0 -1
  591. package/web-ui/build/static/cmake-C0BFHpjZ.js +0 -1
  592. package/web-ui/build/static/cmake-DYoa_Kz_.js +0 -1
  593. package/web-ui/build/static/cobol-Bj_qcMsY.js +0 -1
  594. package/web-ui/build/static/coffeescript-C2KEz8d0.js +0 -1
  595. package/web-ui/build/static/coffeescript-CQsP9N_M.js +0 -1
  596. package/web-ui/build/static/concurnas-Ceu24KQb.js +0 -1
  597. package/web-ui/build/static/coq-CP7VW0bo.js +0 -1
  598. package/web-ui/build/static/coq-DQry0I8v.js +0 -1
  599. package/web-ui/build/static/cos-DAjhu7pi.js +0 -1
  600. package/web-ui/build/static/cpp-BwHJ0JtK.js +0 -1
  601. package/web-ui/build/static/cpp-Dro3stzS.js +0 -1
  602. package/web-ui/build/static/crmsh-Bnwknpi9.js +0 -1
  603. package/web-ui/build/static/crystal-B7TVeIo6.js +0 -1
  604. package/web-ui/build/static/crystal-Cy5JlSrW.js +0 -1
  605. package/web-ui/build/static/csharp-CeouYZK3.js +0 -1
  606. package/web-ui/build/static/csharp-Dv2oxLAS.js +0 -1
  607. package/web-ui/build/static/cshtml-C9IRHsFH.js +0 -1
  608. package/web-ui/build/static/csp-C85pVqYT.js +0 -1
  609. package/web-ui/build/static/csp-MJntgwIj.js +0 -1
  610. package/web-ui/build/static/css-DWTfQjN4.js +0 -1
  611. package/web-ui/build/static/css-extras-BmVbsPjr.js +0 -1
  612. package/web-ui/build/static/csv-zUw-JkSo.js +0 -1
  613. package/web-ui/build/static/cypher-DQOOp0bG.js +0 -1
  614. package/web-ui/build/static/d-B7Cku9c8.js +0 -1
  615. package/web-ui/build/static/d-Lnzvs4Wd.js +0 -1
  616. package/web-ui/build/static/dart-CeK_W9Mg.js +0 -1
  617. package/web-ui/build/static/dart-Z5nwVCn_.js +0 -1
  618. package/web-ui/build/static/dataweave-Bv7GTsiJ.js +0 -1
  619. package/web-ui/build/static/dax-CxkNT7ml.js +0 -1
  620. package/web-ui/build/static/delphi-BnBBHmHI.js +0 -1
  621. package/web-ui/build/static/dhall-DzzkunJZ.js +0 -1
  622. package/web-ui/build/static/diff-BKZzYJzc.js +0 -1
  623. package/web-ui/build/static/diff-BfTiUZV3.js +0 -1
  624. package/web-ui/build/static/django-BY4l8873.js +0 -1
  625. package/web-ui/build/static/django-NRVGlUZ_.js +0 -1
  626. package/web-ui/build/static/dns-Dvc8YawT.js +0 -1
  627. package/web-ui/build/static/dns-zone-file-CkaiOrlK.js +0 -1
  628. package/web-ui/build/static/docker-BQXYNHPO.js +0 -1
  629. package/web-ui/build/static/dockerfile-CkHfYmB1.js +0 -1
  630. package/web-ui/build/static/dos-Cj0YcQAg.js +0 -1
  631. package/web-ui/build/static/dot-zgBkKTS-.js +0 -1
  632. package/web-ui/build/static/dsconfig-Yy07ZSap.js +0 -1
  633. package/web-ui/build/static/dts-DyTWnuFT.js +0 -1
  634. package/web-ui/build/static/dust-CKq7f4u7.js +0 -1
  635. package/web-ui/build/static/ebnf-DJRrwYUt.js +0 -1
  636. package/web-ui/build/static/ebnf-RHbRUELR.js +0 -1
  637. package/web-ui/build/static/editorconfig-BPnyfBW2.js +0 -1
  638. package/web-ui/build/static/eiffel-yj-2JB74.js +0 -1
  639. package/web-ui/build/static/ejs-DitQDEAj.js +0 -1
  640. package/web-ui/build/static/elixir-3QGdRPiZ.js +0 -1
  641. package/web-ui/build/static/elixir-DjVihWJd.js +0 -1
  642. package/web-ui/build/static/elm-BY6TIO5U.js +0 -1
  643. package/web-ui/build/static/elm-CRkIBVgc.js +0 -1
  644. package/web-ui/build/static/erb-Djhpl6Qv.js +0 -1
  645. package/web-ui/build/static/erb-T-e_0q4M.js +0 -1
  646. package/web-ui/build/static/erlang-BHne0Sow.js +0 -1
  647. package/web-ui/build/static/erlang-BwFMbXMn.js +0 -1
  648. package/web-ui/build/static/erlang-repl-BkeLNBB1.js +0 -1
  649. package/web-ui/build/static/etlua-C7wAJl9b.js +0 -1
  650. package/web-ui/build/static/excel-DxE1g8nj.js +0 -1
  651. package/web-ui/build/static/excel-formula-CJfyOSIQ.js +0 -1
  652. package/web-ui/build/static/factor-CoKZ2w9G.js +0 -1
  653. package/web-ui/build/static/false-R3UgYwdZ.js +0 -1
  654. package/web-ui/build/static/firestore-security-rules-Na-FK95T.js +0 -1
  655. package/web-ui/build/static/fix-CvUjGqrP.js +0 -1
  656. package/web-ui/build/static/flix-DZcdobtd.js +0 -1
  657. package/web-ui/build/static/flow-Bs4ybDfF.js +0 -1
  658. package/web-ui/build/static/fortran-Bo7HQHVz.js +0 -1
  659. package/web-ui/build/static/fortran-C01QKAjv.js +0 -1
  660. package/web-ui/build/static/fsharp-Bl0db-E4.js +0 -1
  661. package/web-ui/build/static/fsharp-CyZIu__H.js +0 -1
  662. package/web-ui/build/static/ftl-CWXbnuJ8.js +0 -1
  663. package/web-ui/build/static/gams-BqHeBOiK.js +0 -1
  664. package/web-ui/build/static/gap-Dotaw9CX.js +0 -1
  665. package/web-ui/build/static/gauss-BT78eAPL.js +0 -1
  666. package/web-ui/build/static/gcode-MKCsCHbV.js +0 -1
  667. package/web-ui/build/static/gcode-bZIzS7dq.js +0 -1
  668. package/web-ui/build/static/gdscript-BfFdzROd.js +0 -1
  669. package/web-ui/build/static/gedcom-C-0fkvQT.js +0 -1
  670. package/web-ui/build/static/gherkin-Bgefs1Ac.js +0 -1
  671. package/web-ui/build/static/gherkin-BwLhttSG.js +0 -1
  672. package/web-ui/build/static/git-Cf3XNFwK.js +0 -1
  673. package/web-ui/build/static/glsl-BRBvgtKX.js +0 -1
  674. package/web-ui/build/static/glsl-Ci0Ywihb.js +0 -1
  675. package/web-ui/build/static/gml-BGED3ZV5.js +0 -1
  676. package/web-ui/build/static/gml-Bo5ybH2Z.js +0 -1
  677. package/web-ui/build/static/gn-Dvq3uq8q.js +0 -1
  678. package/web-ui/build/static/go-DEXubI7V.js +0 -1
  679. package/web-ui/build/static/go-DQ-rOBtr.js +0 -1
  680. package/web-ui/build/static/go-module-CJ0C_rZQ.js +0 -1
  681. package/web-ui/build/static/golo-BMZyESOG.js +0 -1
  682. package/web-ui/build/static/gradle-DamtVT5m.js +0 -1
  683. package/web-ui/build/static/graphql-BERukF58.js +0 -1
  684. package/web-ui/build/static/groovy-B-WmRKEQ.js +0 -1
  685. package/web-ui/build/static/groovy-BzgGHCpW.js +0 -1
  686. package/web-ui/build/static/haml-B50hpu0J.js +0 -1
  687. package/web-ui/build/static/haml-vZAqNnLr.js +0 -1
  688. package/web-ui/build/static/handlebars-ChvSiZA5.js +0 -1
  689. package/web-ui/build/static/handlebars-z32GTNvC.js +0 -1
  690. package/web-ui/build/static/haskell-BWLVCHRl.js +0 -1
  691. package/web-ui/build/static/haskell-CZ4HT-QV.js +0 -1
  692. package/web-ui/build/static/haxe-Dff2UzKb.js +0 -1
  693. package/web-ui/build/static/haxe-DtUMfT4Y.js +0 -1
  694. package/web-ui/build/static/hcl-CPdCn21C.js +0 -1
  695. package/web-ui/build/static/hlsl-Ddnzpafa.js +0 -1
  696. package/web-ui/build/static/hoon-BmzYN5g6.js +0 -1
  697. package/web-ui/build/static/hpkp-Cf4BtYzp.js +0 -1
  698. package/web-ui/build/static/hsp-CtNdizh5.js +0 -1
  699. package/web-ui/build/static/hsts-ChmUnrWY.js +0 -1
  700. package/web-ui/build/static/htmlbars-FvxUz397.js +0 -1
  701. package/web-ui/build/static/http-C91BqIc4.js +0 -1
  702. package/web-ui/build/static/http-DUkMpz6R.js +0 -1
  703. package/web-ui/build/static/hy-BgEorqc6.js +0 -1
  704. package/web-ui/build/static/ichigojam-CyJ85XqZ.js +0 -1
  705. package/web-ui/build/static/icon-CWVwUSUB.js +0 -1
  706. package/web-ui/build/static/icu-message-format-DQ5Vf-57.js +0 -1
  707. package/web-ui/build/static/idris-25epvnkz.js +0 -1
  708. package/web-ui/build/static/iecst-D_Q4A3Ao.js +0 -1
  709. package/web-ui/build/static/ignore-Dn3TUem-.js +0 -1
  710. package/web-ui/build/static/index-1GAqwN2P.js +0 -1029
  711. package/web-ui/build/static/index-Bbt0N_qA.css +0 -1
  712. package/web-ui/build/static/index-COM0znG6.js +0 -13
  713. package/web-ui/build/static/index-Cq1FjdFd.js +0 -1
  714. package/web-ui/build/static/inform7-CFrNuUCE.js +0 -1
  715. package/web-ui/build/static/inform7-DKEqg7Td.js +0 -1
  716. package/web-ui/build/static/ini-C-WeV3rA.js +0 -1
  717. package/web-ui/build/static/ini-DNeLlQLb.js +0 -1
  718. package/web-ui/build/static/io-CHx2lS-R.js +0 -1
  719. package/web-ui/build/static/irpf90-D4fNrYKT.js +0 -1
  720. package/web-ui/build/static/isbl-BwxgZUmw.js +0 -1
  721. package/web-ui/build/static/j-EkuSi-Ss.js +0 -1
  722. package/web-ui/build/static/java-BtphFsNb.js +0 -1
  723. package/web-ui/build/static/java-D6Ksxtks.js +0 -1
  724. package/web-ui/build/static/javadoc-COfrpXIF.js +0 -1
  725. package/web-ui/build/static/javadoclike-C0DIBgSo.js +0 -1
  726. package/web-ui/build/static/javascript-D9_bdns_.js +0 -1
  727. package/web-ui/build/static/javastacktrace-BgesTIoE.js +0 -1
  728. package/web-ui/build/static/jboss-cli-BCBm8RaA.js +0 -1
  729. package/web-ui/build/static/jexl-Bur7gjJl.js +0 -1
  730. package/web-ui/build/static/jolie-CG2HtqVF.js +0 -1
  731. package/web-ui/build/static/jq-BjcZo4Ta.js +0 -1
  732. package/web-ui/build/static/js-extras-DPWP-xWb.js +0 -1
  733. package/web-ui/build/static/js-templates-BYQFylC_.js +0 -1
  734. package/web-ui/build/static/jsdoc-CiOxmgl5.js +0 -1
  735. package/web-ui/build/static/json-C2-b3Xpo.js +0 -1
  736. package/web-ui/build/static/json-D7ok2MJS.js +0 -1
  737. package/web-ui/build/static/json5-DRNOdkus.js +0 -1
  738. package/web-ui/build/static/jsonp-FFJzAxUk.js +0 -1
  739. package/web-ui/build/static/jsstacktrace-C4ki-LaP.js +0 -1
  740. package/web-ui/build/static/jsx-ZxGQpUNq.js +0 -1
  741. package/web-ui/build/static/julia-7ooB8a4b.js +0 -1
  742. package/web-ui/build/static/julia-DzjCRNEr.js +0 -1
  743. package/web-ui/build/static/julia-repl-pceaZSLt.js +0 -1
  744. package/web-ui/build/static/keepalived-BQgTZddo.js +0 -1
  745. package/web-ui/build/static/keyman-Cqlba6tn.js +0 -1
  746. package/web-ui/build/static/kotlin-BygmvqBG.js +0 -1
  747. package/web-ui/build/static/kotlin-DrN0ycN8.js +0 -1
  748. package/web-ui/build/static/kumir-YhasANvI.js +0 -1
  749. package/web-ui/build/static/kusto-LQa6MD2B.js +0 -1
  750. package/web-ui/build/static/lasso-Ca3RFbcE.js +0 -1
  751. package/web-ui/build/static/latex-BoQj21fG.js +0 -1
  752. package/web-ui/build/static/latex-ZxewREOs.js +0 -1
  753. package/web-ui/build/static/latte-40SpSG4q.js +0 -1
  754. package/web-ui/build/static/ldif-CzTJxBjJ.js +0 -1
  755. package/web-ui/build/static/leaf-DO9LaVNe.js +0 -1
  756. package/web-ui/build/static/less-BoClFdvD.js +0 -1
  757. package/web-ui/build/static/less-C1s1U6-n.js +0 -1
  758. package/web-ui/build/static/lilypond-D5wHKW8A.js +0 -1
  759. package/web-ui/build/static/liquid-BRQzL-S2.js +0 -1
  760. package/web-ui/build/static/lisp-8q-QRYKi.js +0 -1
  761. package/web-ui/build/static/lisp-J8TPaPPb.js +0 -1
  762. package/web-ui/build/static/livecodeserver-Dcr3yGmD.js +0 -1
  763. package/web-ui/build/static/livescript-BUEQmlAe.js +0 -1
  764. package/web-ui/build/static/livescript-DsId63Ot.js +0 -1
  765. package/web-ui/build/static/llvm-B3CCzYxo.js +0 -1
  766. package/web-ui/build/static/llvm-kQGfyqnj.js +0 -1
  767. package/web-ui/build/static/log-BlA5152b.js +0 -1
  768. package/web-ui/build/static/lolcode-8WRAMeb2.js +0 -1
  769. package/web-ui/build/static/lsl-BZUMQNE2.js +0 -1
  770. package/web-ui/build/static/lua-C4hJ-Gql.js +0 -1
  771. package/web-ui/build/static/lua-RxOeZV_z.js +0 -1
  772. package/web-ui/build/static/magma-U9kYv2QD.js +0 -1
  773. package/web-ui/build/static/makefile-1Cu2rVDg.js +0 -1
  774. package/web-ui/build/static/makefile-mmZ8lbad.js +0 -1
  775. package/web-ui/build/static/markdown-CCqDOXhR.js +0 -1
  776. package/web-ui/build/static/markdown-CVOmqzdD.js +0 -1
  777. package/web-ui/build/static/markup-templating-C7eiVR0j.js +0 -1
  778. package/web-ui/build/static/mathematica-BbKHQ6zH.js +0 -1
  779. package/web-ui/build/static/matlab-BbMwJ6T0.js +0 -1
  780. package/web-ui/build/static/matlab-gHn5UhMb.js +0 -1
  781. package/web-ui/build/static/maxima-CuB3n0ri.js +0 -1
  782. package/web-ui/build/static/maxscript-jhOix4gn.js +0 -1
  783. package/web-ui/build/static/mel-Bpjqa7Ec.js +0 -1
  784. package/web-ui/build/static/mel-QxMxBq03.js +0 -1
  785. package/web-ui/build/static/mercury-C8IdDyFB.js +0 -1
  786. package/web-ui/build/static/mermaid-v41WDixf.js +0 -1
  787. package/web-ui/build/static/mipsasm-kYH27KXy.js +0 -1
  788. package/web-ui/build/static/mizar-BCJI9Jxa.js +0 -1
  789. package/web-ui/build/static/mizar-BCxP_6pj.js +0 -1
  790. package/web-ui/build/static/mojolicious-C7DC_CUp.js +0 -1
  791. package/web-ui/build/static/mongodb-DvBX00WY.js +0 -1
  792. package/web-ui/build/static/monkey-B7KjOZtt.js +0 -1
  793. package/web-ui/build/static/monkey-CFKZd6lx.js +0 -1
  794. package/web-ui/build/static/moonscript-44jD_uAZ.js +0 -1
  795. package/web-ui/build/static/moonscript-B3KahKf5.js +0 -1
  796. package/web-ui/build/static/n1ql-CxJOkBbD.js +0 -1
  797. package/web-ui/build/static/n1ql-FJFE6P7E.js +0 -1
  798. package/web-ui/build/static/n4js-D5jJTGdO.js +0 -1
  799. package/web-ui/build/static/nand2tetris-hdl-DlsCaky2.js +0 -1
  800. package/web-ui/build/static/naniscript-C3YsvWgN.js +0 -1
  801. package/web-ui/build/static/nasm-DCGKvOZq.js +0 -1
  802. package/web-ui/build/static/neon-nyFNinx-.js +0 -1
  803. package/web-ui/build/static/nevod-C5PnMzAW.js +0 -1
  804. package/web-ui/build/static/nginx-BUgMakda.js +0 -1
  805. package/web-ui/build/static/nginx-C5JBKsuz.js +0 -1
  806. package/web-ui/build/static/nim-BFu6fQgc.js +0 -1
  807. package/web-ui/build/static/nim-D0uh-nR9.js +0 -1
  808. package/web-ui/build/static/nix-BiOn3l1e.js +0 -1
  809. package/web-ui/build/static/nix-tapJszPl.js +0 -1
  810. package/web-ui/build/static/node-repl-BTp9CFzE.js +0 -1
  811. package/web-ui/build/static/nsis-B7hV5A06.js +0 -1
  812. package/web-ui/build/static/nsis-DLshnCv-.js +0 -1
  813. package/web-ui/build/static/objectivec-BKjt_sKE.js +0 -1
  814. package/web-ui/build/static/objectivec-KUMYgk5w.js +0 -1
  815. package/web-ui/build/static/ocaml-CV2nKA_A.js +0 -1
  816. package/web-ui/build/static/ocaml-ZyZ-dXmE.js +0 -1
  817. package/web-ui/build/static/opencl-igIWfc0n.js +0 -1
  818. package/web-ui/build/static/openqasm-ByCPmCpS.js +0 -1
  819. package/web-ui/build/static/openscad-Db6ypam1.js +0 -1
  820. package/web-ui/build/static/oxygene-CBbaQWRB.js +0 -1
  821. package/web-ui/build/static/oz-lEl_mXVw.js +0 -1
  822. package/web-ui/build/static/parigp-c2FbheBr.js +0 -1
  823. package/web-ui/build/static/parser-Ba6uivHf.js +0 -1
  824. package/web-ui/build/static/parser3-Cm5cgVSQ.js +0 -1
  825. package/web-ui/build/static/pascal-JgY-dd52.js +0 -1
  826. package/web-ui/build/static/pascaligo-BjSdyegq.js +0 -1
  827. package/web-ui/build/static/pcaxis-CDdxDfqJ.js +0 -1
  828. package/web-ui/build/static/peoplecode-BCPhsbK6.js +0 -1
  829. package/web-ui/build/static/perl-ClVPikLH.js +0 -1
  830. package/web-ui/build/static/perl-pRjXJ4uc.js +0 -1
  831. package/web-ui/build/static/pf-D6VrFfuf.js +0 -1
  832. package/web-ui/build/static/pgsql-DAv4ezCU.js +0 -1
  833. package/web-ui/build/static/php-Bz3Bn1G_.js +0 -1
  834. package/web-ui/build/static/php-extras-B8k1hZ7O.js +0 -1
  835. package/web-ui/build/static/php-template-DJJiMC8Q.js +0 -1
  836. package/web-ui/build/static/php-zCXGNRnB.js +0 -1
  837. package/web-ui/build/static/phpdoc-CpnPjGDk.js +0 -1
  838. package/web-ui/build/static/plaintext-BRkRKfKN.js +0 -1
  839. package/web-ui/build/static/plsql-BARhkvBo.js +0 -1
  840. package/web-ui/build/static/pony-guYTDEtj.js +0 -1
  841. package/web-ui/build/static/powerquery-DcM2Yj3O.js +0 -1
  842. package/web-ui/build/static/powershell-DJ8ftCxt.js +0 -1
  843. package/web-ui/build/static/powershell-DSRUQzqt.js +0 -1
  844. package/web-ui/build/static/processing-BCmW5Adu.js +0 -1
  845. package/web-ui/build/static/processing-DDMjYIa-.js +0 -1
  846. package/web-ui/build/static/profile-C9J13WXr.js +0 -1
  847. package/web-ui/build/static/prolog-CUyUfIUU.js +0 -1
  848. package/web-ui/build/static/prolog-wjvrQEy3.js +0 -1
  849. package/web-ui/build/static/promql-BkN3_kL1.js +0 -1
  850. package/web-ui/build/static/properties-B7zGUFLC.js +0 -1
  851. package/web-ui/build/static/properties-DHKWbrVz.js +0 -1
  852. package/web-ui/build/static/protobuf-CVwMi4py.js +0 -1
  853. package/web-ui/build/static/protobuf-CWUzVSVD.js +0 -1
  854. package/web-ui/build/static/psl-DdX6HMd3.js +0 -1
  855. package/web-ui/build/static/pug-D-Sn469u.js +0 -1
  856. package/web-ui/build/static/puppet-B6ZR9-D4.js +0 -1
  857. package/web-ui/build/static/puppet-m66LRiIo.js +0 -1
  858. package/web-ui/build/static/pure-7deZH-sc.js +0 -1
  859. package/web-ui/build/static/purebasic-DQLUcurt.js +0 -1
  860. package/web-ui/build/static/purebasic-DYMw9jTh.js +0 -1
  861. package/web-ui/build/static/purescript-DpysoAya.js +0 -1
  862. package/web-ui/build/static/python-D66_vufV.js +0 -1
  863. package/web-ui/build/static/python-DYxaIENO.js +0 -1
  864. package/web-ui/build/static/python-repl-DPjvQNxf.js +0 -1
  865. package/web-ui/build/static/q-DDHNKITB.js +0 -1
  866. package/web-ui/build/static/q-xV1Q9ILw.js +0 -1
  867. package/web-ui/build/static/qml-DSENM1u-.js +0 -1
  868. package/web-ui/build/static/qml-DfhbPQ-t.js +0 -1
  869. package/web-ui/build/static/qore-LQCffrzv.js +0 -1
  870. package/web-ui/build/static/qsharp-BcSf2ZGH.js +0 -1
  871. package/web-ui/build/static/r-Dc6GR0yQ.js +0 -1
  872. package/web-ui/build/static/r-vludgk3t.js +0 -1
  873. package/web-ui/build/static/racket-DJYIkQwh.js +0 -1
  874. package/web-ui/build/static/reason-D75i_ede.js +0 -1
  875. package/web-ui/build/static/reasonml-DhRXKjo3.js +0 -1
  876. package/web-ui/build/static/regex-D67iENuu.js +0 -1
  877. package/web-ui/build/static/rego-CJ2Eeb4g.js +0 -1
  878. package/web-ui/build/static/renpy-DUDNyFqb.js +0 -1
  879. package/web-ui/build/static/rest-Dn7SYTNt.js +0 -1
  880. package/web-ui/build/static/rib-BVUY5dIb.js +0 -1
  881. package/web-ui/build/static/rip-Bu9K3Hu9.js +0 -1
  882. package/web-ui/build/static/roboconf-CUzY2sLf.js +0 -1
  883. package/web-ui/build/static/roboconf-DBEmoD-Z.js +0 -1
  884. package/web-ui/build/static/robotframework-70EV7ffL.js +0 -1
  885. package/web-ui/build/static/routeros-KgfwmDVO.js +0 -1
  886. package/web-ui/build/static/rsl-D3oCnFGa.js +0 -1
  887. package/web-ui/build/static/ruby-Dqa0HtB4.js +0 -1
  888. package/web-ui/build/static/ruby-PeJYeL87.js +0 -1
  889. package/web-ui/build/static/ruleslanguage-vo3eM_mz.js +0 -1
  890. package/web-ui/build/static/rust-CwU6t4_Y.js +0 -1
  891. package/web-ui/build/static/rust-WXADYh9r.js +0 -1
  892. package/web-ui/build/static/sas-Cg6ADdDH.js +0 -1
  893. package/web-ui/build/static/sas-DWoEaeXv.js +0 -1
  894. package/web-ui/build/static/sass-DbHJHeBV.js +0 -1
  895. package/web-ui/build/static/scala-B6oE2QKr.js +0 -1
  896. package/web-ui/build/static/scala-NFQGPaYa.js +0 -1
  897. package/web-ui/build/static/scheme-C8Jx4oX7.js +0 -1
  898. package/web-ui/build/static/scheme-CUMBJaUf.js +0 -1
  899. package/web-ui/build/static/scilab-D1VqsdSy.js +0 -1
  900. package/web-ui/build/static/scss-CSH87oUD.js +0 -1
  901. package/web-ui/build/static/scss-GLX6NNDB.js +0 -1
  902. package/web-ui/build/static/shell-CbOhN21M.js +0 -1
  903. package/web-ui/build/static/shell-session-BQPdJJZS.js +0 -1
  904. package/web-ui/build/static/smali-BYbEOQX5.js +0 -1
  905. package/web-ui/build/static/smali-DcoYSibw.js +0 -1
  906. package/web-ui/build/static/smalltalk-CQkedD8N.js +0 -1
  907. package/web-ui/build/static/smalltalk-DihI81Cd.js +0 -1
  908. package/web-ui/build/static/smarty-RRvllERL.js +0 -1
  909. package/web-ui/build/static/sml-BJkMhBLU.js +0 -1
  910. package/web-ui/build/static/sml-Bm2IN0wP.js +0 -1
  911. package/web-ui/build/static/solidity-CsCW8kyX.js +0 -1
  912. package/web-ui/build/static/solution-file-B5YSxWQt.js +0 -1
  913. package/web-ui/build/static/soy-Dek2_YCW.js +0 -1
  914. package/web-ui/build/static/sparql-BeTxhWa4.js +0 -1
  915. package/web-ui/build/static/splunk-spl-hq6BW85c.js +0 -1
  916. package/web-ui/build/static/sqf-C-u4en-i.js +0 -1
  917. package/web-ui/build/static/sqf-DP0IhDYt.js +0 -1
  918. package/web-ui/build/static/sql-BzL0uonb.js +0 -1
  919. package/web-ui/build/static/sql-Zy6tV_us.js +0 -1
  920. package/web-ui/build/static/sql_more-BP2G6Vh5.js +0 -1
  921. package/web-ui/build/static/squirrel-C3MnMYx5.js +0 -1
  922. package/web-ui/build/static/stan-7iKo211G.js +0 -1
  923. package/web-ui/build/static/stan-C1lcIZjJ.js +0 -1
  924. package/web-ui/build/static/stata-DJ6GKcaw.js +0 -1
  925. package/web-ui/build/static/step21-Pg-uClDB.js +0 -1
  926. package/web-ui/build/static/stylus-DFAxYuRi.js +0 -1
  927. package/web-ui/build/static/stylus-DT6xc_Nv.js +0 -1
  928. package/web-ui/build/static/subunit-aGvGJXZZ.js +0 -1
  929. package/web-ui/build/static/swift-Sqmdmb4O.js +0 -1
  930. package/web-ui/build/static/swift-cUX-MVl4.js +0 -1
  931. package/web-ui/build/static/systemd-qIaU0Trg.js +0 -1
  932. package/web-ui/build/static/t4-cs-DtO6Bgg1.js +0 -1
  933. package/web-ui/build/static/t4-templating-DSSM2N5M.js +0 -1
  934. package/web-ui/build/static/t4-vb-tKIiE5uC.js +0 -1
  935. package/web-ui/build/static/taggerscript-Dt2Kgr-W.js +0 -1
  936. package/web-ui/build/static/tap-BMEgEMIk.js +0 -1
  937. package/web-ui/build/static/tap-C4TdzsNz.js +0 -1
  938. package/web-ui/build/static/tcl-B6k4Af9f.js +0 -1
  939. package/web-ui/build/static/tcl-Dq4_i5q5.js +0 -1
  940. package/web-ui/build/static/textile-C0uqAPk0.js +0 -1
  941. package/web-ui/build/static/thrift-DybQEjaA.js +0 -1
  942. package/web-ui/build/static/toml-DG1a2FSS.js +0 -1
  943. package/web-ui/build/static/tp-BwdfEEST.js +0 -1
  944. package/web-ui/build/static/tremor-JSTukmt-.js +0 -1
  945. package/web-ui/build/static/tsx-YUfsqzPf.js +0 -1
  946. package/web-ui/build/static/tt2-D9A_ACnF.js +0 -1
  947. package/web-ui/build/static/turtle-BKxwLa_-.js +0 -1
  948. package/web-ui/build/static/twig-BeEDK9Ri.js +0 -1
  949. package/web-ui/build/static/twig-TnOWwD7-.js +0 -1
  950. package/web-ui/build/static/typescript-BjZl8C3q.js +0 -1
  951. package/web-ui/build/static/typescript-qtW5Xh-j.js +0 -1
  952. package/web-ui/build/static/typoscript-Dj4sO7Jx.js +0 -1
  953. package/web-ui/build/static/unrealscript-DInimzNQ.js +0 -1
  954. package/web-ui/build/static/uorazor-B_9tFVKw.js +0 -1
  955. package/web-ui/build/static/uri-CTuMA7_k.js +0 -1
  956. package/web-ui/build/static/v-CvE0Ujqx.js +0 -1
  957. package/web-ui/build/static/vala-CLGf3xEs.js +0 -1
  958. package/web-ui/build/static/vala-Dm8LmEpm.js +0 -1
  959. package/web-ui/build/static/vbnet-Cwm2TjGP.js +0 -1
  960. package/web-ui/build/static/vbnet-LCd9GiMJ.js +0 -1
  961. package/web-ui/build/static/vbscript-DVj94_-y.js +0 -1
  962. package/web-ui/build/static/vbscript-html-CDHtSX-o.js +0 -1
  963. package/web-ui/build/static/velocity-C-OrhdDf.js +0 -1
  964. package/web-ui/build/static/verilog-Bh18N7TM.js +0 -1
  965. package/web-ui/build/static/verilog-C-YNXb8j.js +0 -1
  966. package/web-ui/build/static/vhdl-BFNm41_R.js +0 -1
  967. package/web-ui/build/static/vhdl-CyLgBDKk.js +0 -1
  968. package/web-ui/build/static/vim-BTafUqR0.js +0 -1
  969. package/web-ui/build/static/vim-Xg1pEHJe.js +0 -1
  970. package/web-ui/build/static/visual-basic-CDgUOlvq.js +0 -1
  971. package/web-ui/build/static/warpscript-1ELDmkt5.js +0 -1
  972. package/web-ui/build/static/wasm-C25KdQk5.js +0 -1
  973. package/web-ui/build/static/web-idl-CsdVYgpL.js +0 -1
  974. package/web-ui/build/static/wiki-4RrZuyhV.js +0 -1
  975. package/web-ui/build/static/wolfram-DMiRIwvp.js +0 -1
  976. package/web-ui/build/static/wren-Vk5PBcVB.js +0 -1
  977. package/web-ui/build/static/x86asm-D9TFTgye.js +0 -1
  978. package/web-ui/build/static/xeora-SAn_K3Ts.js +0 -1
  979. package/web-ui/build/static/xl-Da2Fl8D9.js +0 -1
  980. package/web-ui/build/static/xml-CeLm6l4V.js +0 -1
  981. package/web-ui/build/static/xml-doc-DypYH408.js +0 -1
  982. package/web-ui/build/static/xojo-CrfMiv1-.js +0 -1
  983. package/web-ui/build/static/xquery-8tOqVkgP.js +0 -1
  984. package/web-ui/build/static/xquery-CLOnNPtx.js +0 -1
  985. package/web-ui/build/static/yaml-CXiycPmU.js +0 -1
  986. package/web-ui/build/static/yaml-cIKjKW-H.js +0 -1
  987. package/web-ui/build/static/yang-KVshO9Ce.js +0 -1
  988. package/web-ui/build/static/zephir-B88JNqlj.js +0 -1
  989. package/web-ui/build/static/zig-C6GYIeFs.js +0 -1
@@ -621,8 +621,10 @@ class StateManager {
621
621
  throw new Error(`Flow ${flowId} not found`);
622
622
  }
623
623
 
624
- // Only allow updating specific fields
625
- const allowedFields = ['name', 'description', 'nodes', 'edges', 'variables'];
624
+ // Only allow updating specific fields. `version` and `schemaVersion`
625
+ // are added so the Phase 6 version-stamp write-back persists, and
626
+ // so v2 flows can be marked when typed I/O is added.
627
+ const allowedFields = ['name', 'description', 'nodes', 'edges', 'variables', 'version', 'schemaVersion'];
626
628
  for (const field of allowedFields) {
627
629
  if (updates[field] !== undefined) {
628
630
  flowIndex[flowId][field] = updates[field];
@@ -786,25 +788,77 @@ class StateManager {
786
788
  const stateDir = this.getStateDir(projectDir);
787
789
  const stateFile = path.join(stateDir, agentInfo.stateFile);
788
790
  const conversationsFile = path.join(stateDir, agentInfo.conversationsFile);
789
-
791
+
792
+ // Skeleton defaults the resilient loader falls back to when a state
793
+ // file is missing, empty, or unrepairable. The state skeleton derives
794
+ // the agent name from the index entry so even a total wipe leaves
795
+ // the agent identifiable in the UI rather than ending up nameless.
796
+ const stateDefault = () => ({
797
+ version: 2,
798
+ agentId,
799
+ state: {
800
+ id: agentId,
801
+ name: agentInfo.name || agentId,
802
+ type: agentInfo.type || 'user-created',
803
+ status: 'active',
804
+ mode: 'chat',
805
+ currentModel: agentInfo.preferredModel || agentInfo.model || null,
806
+ preferredModel: agentInfo.preferredModel || agentInfo.model || null,
807
+ systemPrompt: '',
808
+ capabilities: agentInfo.capabilities || [],
809
+ taskList: { tasks: [], lastUpdated: new Date().toISOString() },
810
+ messageQueues: { userMessages: [], interAgentMessages: [], toolResults: [] },
811
+ interAgentTracking: {},
812
+ },
813
+ lastPersisted: new Date().toISOString(),
814
+ });
815
+ const conversationsDefault = () => ({
816
+ version: 2,
817
+ agentId,
818
+ conversations: {
819
+ // Empty `full` conversation — required by validateModelConversations
820
+ // and the agent loop's history reader. New per-model entries are
821
+ // added on demand at first use.
822
+ full: { messages: [], lastUpdated: new Date().toISOString() },
823
+ },
824
+ lastPersisted: new Date().toISOString(),
825
+ });
826
+
827
+ // Recovery reports for any auto-fixed files. Attached to the
828
+ // returned agent so the caller (orchestrator → webServer) can
829
+ // broadcast each one as a toast in the UI. Empty array on the
830
+ // happy path; harmless presence otherwise.
831
+ const recoveries = [];
832
+
790
833
  try {
791
- // Load agent state
792
- const stateData = await this.loadJSON(stateFile);
793
- const conversationsData = await this.loadJSON(conversationsFile);
794
-
834
+ const stateRes = await this.loadJSONResilient(stateFile, stateDefault, {
835
+ label: `agent state (${agentInfo.name || agentId})`,
836
+ });
837
+ const conversationsRes = await this.loadJSONResilient(conversationsFile, conversationsDefault, {
838
+ label: `agent conversations (${agentInfo.name || agentId})`,
839
+ });
840
+ const stateData = stateRes.data;
841
+ const conversationsData = conversationsRes.data;
842
+ if (stateRes.recovery) recoveries.push(stateRes.recovery);
843
+ if (conversationsRes.recovery) recoveries.push(conversationsRes.recovery);
844
+
795
845
  // Validate model conversations integrity
796
846
  await this.validateModelConversations(conversationsData.conversations);
797
-
847
+
798
848
  // Check if agent is paused
799
849
  const pauseStatus = await this.checkAgentPauseStatus(agentId, projectDir);
800
-
850
+
801
851
  const restoredAgent = {
802
852
  ...stateData.state,
803
853
  conversations: conversationsData.conversations,
804
854
  isPaused: pauseStatus.isPaused,
805
855
  pausedUntil: pauseStatus.pausedUntil,
806
856
  isRestored: true,
807
- restoredAt: new Date().toISOString()
857
+ restoredAt: new Date().toISOString(),
858
+ // Non-enumerable would be cleaner, but agentPool serializes the
859
+ // whole object — keeping it as a plain field. The orchestrator
860
+ // strips it before persisting (see import handler).
861
+ _restoreRecoveries: recoveries,
808
862
  };
809
863
 
810
864
  // CRITICAL: Restore interAgentTracking as a Map (it comes as plain object from JSON)
@@ -813,15 +867,16 @@ class StateManager {
813
867
  } else if (!(restoredAgent.interAgentTracking instanceof Map)) {
814
868
  restoredAgent.interAgentTracking = new Map(Object.entries(restoredAgent.interAgentTracking));
815
869
  }
816
-
870
+
817
871
  this.logger.info(`Agent restored: ${agentId}`, {
818
872
  name: restoredAgent.name,
819
873
  status: restoredAgent.status,
820
- messageCount: restoredAgent.conversations?.full?.messages?.length || 0
874
+ messageCount: restoredAgent.conversations?.full?.messages?.length || 0,
875
+ recoveryCount: recoveries.length,
821
876
  });
822
-
877
+
823
878
  return restoredAgent;
824
-
879
+
825
880
  } catch (error) {
826
881
  this.logger.error(`Agent restoration failed: ${agentId}`, error.message);
827
882
  throw error;
@@ -1074,7 +1129,7 @@ class StateManager {
1074
1129
  }
1075
1130
 
1076
1131
  /**
1077
- * Load JSON data from file
1132
+ * Load JSON data from file (strict — throws on missing or corrupt).
1078
1133
  * @private
1079
1134
  */
1080
1135
  async loadJSON(filePath) {
@@ -1082,6 +1137,185 @@ class StateManager {
1082
1137
  return JSON.parse(data);
1083
1138
  }
1084
1139
 
1140
+ /**
1141
+ * Load JSON with best-effort recovery from common breakage modes.
1142
+ * Designed so a single bad state file doesn't take down the entire
1143
+ * agent-load flow — instead the caller gets back a usable object plus
1144
+ * a `recovery` report that callers can surface as a toast.
1145
+ *
1146
+ * Recovery ladder (first match wins):
1147
+ * 1. Missing file (ENOENT) → recreate with `defaultValue`,
1148
+ * report `kind='not-found'`
1149
+ * 2. Empty / whitespace-only file → overwrite with `defaultValue`,
1150
+ * report `kind='empty-recreated'`
1151
+ * 3. Common syntax issues → repaired in memory and saved
1152
+ * (trailing comma, BOM, unclosed back to disk; report
1153
+ * braces/brackets, stray garbage `kind='repaired'`
1154
+ * after the JSON object)
1155
+ * 4. Salvageable first JSON block → use the salvaged object,
1156
+ * (anywhere in the buffer) archive the original to
1157
+ * `<file>.corrupt-<ts>.json`,
1158
+ * report `kind='partial'`
1159
+ * 5. Nothing usable → use `defaultValue`, archive
1160
+ * original (if any), report
1161
+ * `kind='unrepairable'`
1162
+ *
1163
+ * @param {string} filePath - Absolute path to the JSON file
1164
+ * @param {Object|Array|null|Function} defaultValue - Value to use when
1165
+ * the file is missing/empty/unrepairable. If a function is provided
1166
+ * it's called with the file path and its return value is used.
1167
+ * @param {Object} [options]
1168
+ * @param {boolean} [options.persistRecreated=true] - Whether to write
1169
+ * the default back to disk on missing/empty/unrepairable cases.
1170
+ * @param {string} [options.label] - Human-readable label used in toast
1171
+ * messages (e.g. 'agent state', 'agent conversations'). Falls back
1172
+ * to the file's basename.
1173
+ * @returns {Promise<{data: any, recovery: ?Object}>}
1174
+ */
1175
+ async loadJSONResilient(filePath, defaultValue, options = {}) {
1176
+ const { persistRecreated = true } = options;
1177
+ const label = options.label || path.basename(filePath);
1178
+ const defaultOf = () =>
1179
+ typeof defaultValue === 'function' ? defaultValue(filePath) : defaultValue;
1180
+
1181
+ // 1. Missing file → recreate with default
1182
+ let raw;
1183
+ try {
1184
+ raw = await fs.readFile(filePath, 'utf8');
1185
+ } catch (err) {
1186
+ if (err.code === 'ENOENT') {
1187
+ const data = defaultOf();
1188
+ if (persistRecreated && data !== undefined) {
1189
+ try { await this.saveJSON(filePath, data); } catch { /* tolerate read-only mounts */ }
1190
+ }
1191
+ const recovery = {
1192
+ kind: 'not-found', filePath, label,
1193
+ message: `${label} file was missing — created an empty one.`,
1194
+ };
1195
+ this.logger?.info(`[stateManager] ${recovery.message}`, { filePath });
1196
+ return { data, recovery };
1197
+ }
1198
+ throw err; // unexpected read error (permissions, etc) — let caller handle
1199
+ }
1200
+
1201
+ // 2. Empty or whitespace-only → recreate
1202
+ if (!raw || raw.trim().length === 0) {
1203
+ const data = defaultOf();
1204
+ if (persistRecreated && data !== undefined) {
1205
+ try { await this.saveJSON(filePath, data); } catch { /* ok */ }
1206
+ }
1207
+ const recovery = {
1208
+ kind: 'empty-recreated', filePath, label,
1209
+ message: `${label} file was empty — recreated with a default skeleton.`,
1210
+ };
1211
+ this.logger?.warn(`[stateManager] ${recovery.message}`, { filePath });
1212
+ return { data, recovery };
1213
+ }
1214
+
1215
+ // 3. Strict parse — happy path
1216
+ try {
1217
+ return { data: JSON.parse(raw), recovery: null };
1218
+ } catch (firstErr) {
1219
+ // 3a. Quick repairs: BOM, trailing comma before close, junk after
1220
+ // the closing brace, smart quotes that occasionally creep in via
1221
+ // copy-paste. None of these is exotic — they're the top-3 reasons
1222
+ // hand-edited or partially-flushed files break.
1223
+ let repaired = raw;
1224
+ if (repaired.charCodeAt(0) === 0xFEFF) repaired = repaired.slice(1);
1225
+ // Strip ASCII control chars except tab/newline/CR
1226
+ repaired = repaired.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, '');
1227
+ // Trim whitespace
1228
+ repaired = repaired.trim();
1229
+ // Drop trailing commas before a closing } or ]
1230
+ repaired = repaired.replace(/,(\s*[}\]])/g, '$1');
1231
+ // Cut anything after the last balanced } / ] (junk after JSON).
1232
+ const lastClose = Math.max(repaired.lastIndexOf('}'), repaired.lastIndexOf(']'));
1233
+ if (lastClose > 0 && lastClose < repaired.length - 1) {
1234
+ repaired = repaired.slice(0, lastClose + 1);
1235
+ }
1236
+ try {
1237
+ const data = JSON.parse(repaired);
1238
+ if (persistRecreated && repaired !== raw) {
1239
+ try { await this.saveJSON(filePath, data); } catch { /* ok */ }
1240
+ }
1241
+ const recovery = {
1242
+ kind: 'repaired', filePath, label,
1243
+ message: `${label} file had a minor syntax issue (${firstErr.message}) — auto-repaired.`,
1244
+ };
1245
+ this.logger?.warn(`[stateManager] ${recovery.message}`, { filePath });
1246
+ return { data, recovery };
1247
+ } catch { /* fall through */ }
1248
+
1249
+ // 3b. Salvage: walk the buffer for the first balanced { ... } block
1250
+ // and try to parse just that. Catches truncated-mid-file cases.
1251
+ const salvaged = this._extractFirstJsonBlock(raw);
1252
+ if (salvaged) {
1253
+ try {
1254
+ const data = JSON.parse(salvaged);
1255
+ const archivePath = `${filePath}.corrupt-${Date.now()}.json`;
1256
+ try { await fs.writeFile(archivePath, raw, 'utf8'); } catch { /* ok */ }
1257
+ if (persistRecreated) {
1258
+ try { await this.saveJSON(filePath, data); } catch { /* ok */ }
1259
+ }
1260
+ const recovery = {
1261
+ kind: 'partial', filePath, label,
1262
+ message: `${label} file was partially corrupt — recovered the first valid section. Original archived to ${path.basename(archivePath)}.`,
1263
+ archivePath,
1264
+ };
1265
+ this.logger?.warn(`[stateManager] ${recovery.message}`, { filePath, archivePath });
1266
+ return { data, recovery };
1267
+ } catch { /* fall through */ }
1268
+ }
1269
+
1270
+ // 4. Nothing parseable — archive the corrupt file and use default
1271
+ const data = defaultOf();
1272
+ const archivePath = `${filePath}.corrupt-${Date.now()}.json`;
1273
+ try { await fs.writeFile(archivePath, raw, 'utf8'); } catch { /* ok */ }
1274
+ if (persistRecreated && data !== undefined) {
1275
+ try { await this.saveJSON(filePath, data); } catch { /* ok */ }
1276
+ }
1277
+ const recovery = {
1278
+ kind: 'unrepairable', filePath, label,
1279
+ message: `${label} file is corrupt and could not be repaired — restored a default skeleton. Original archived to ${path.basename(archivePath)}.`,
1280
+ archivePath,
1281
+ originalError: firstErr.message,
1282
+ };
1283
+ this.logger?.error(`[stateManager] ${recovery.message}`, { filePath, archivePath, error: firstErr.message });
1284
+ return { data, recovery };
1285
+ }
1286
+ }
1287
+
1288
+ /**
1289
+ * Walk a string and return the substring of the first balanced
1290
+ * `{ ... }` block, respecting string literals so braces inside strings
1291
+ * don't confuse the count. Returns null if no complete block exists.
1292
+ * @private
1293
+ */
1294
+ _extractFirstJsonBlock(s) {
1295
+ if (typeof s !== 'string') return null;
1296
+ const start = s.indexOf('{');
1297
+ if (start < 0) return null;
1298
+ let depth = 0;
1299
+ let inStr = false;
1300
+ let escape = false;
1301
+ for (let i = start; i < s.length; i++) {
1302
+ const ch = s[i];
1303
+ if (inStr) {
1304
+ if (escape) { escape = false; continue; }
1305
+ if (ch === '\\') { escape = true; continue; }
1306
+ if (ch === '"') { inStr = false; }
1307
+ continue;
1308
+ }
1309
+ if (ch === '"') { inStr = true; continue; }
1310
+ if (ch === '{') depth++;
1311
+ else if (ch === '}') {
1312
+ depth--;
1313
+ if (depth === 0) return s.slice(start, i + 1);
1314
+ }
1315
+ }
1316
+ return null;
1317
+ }
1318
+
1085
1319
  /**
1086
1320
  * Delete agent state from storage
1087
1321
  * @param {string} agentId - Agent identifier
package/src/index.js CHANGED
@@ -384,6 +384,14 @@ class LoxiaApplication {
384
384
  this.stateManager
385
385
  );
386
386
 
387
+ // Expose toolsRegistry on the orchestrator so downstream wiring (e.g.
388
+ // webServer's flowExecutor init at webServer.js:574 → jobDoneTool
389
+ // setFlowExecutor) can reach it through the orchestrator handle. Without
390
+ // this, `this.orchestrator?.toolsRegistry` is undefined at wiring time
391
+ // and JobDoneTool's flow-contract validation (Phase 8) silently no-ops
392
+ // for the entire process lifetime.
393
+ this.orchestrator.toolsRegistry = this.toolsRegistry;
394
+
387
395
  // Set cross-references between components
388
396
  this.messageProcessor.orchestrator = this.orchestrator;
389
397
  this.messageProcessor.setScheduler(this.agentScheduler);
@@ -43,6 +43,14 @@ import { initFileExplorerModule } from '../modules/fileExplorer/index.js';
43
43
 
44
44
  // Import FlowExecutor for flow pipeline execution
45
45
  import FlowExecutor from '../core/flowExecutor.js';
46
+ // Flow definition gate — rejects malformed flows BEFORE persistence/execution.
47
+ import { validateFlowDefinition } from '../core/flowSchema.js';
48
+ // Phase 4: disk checkpoint store backs resume/restart of failed runs.
49
+ import { FlowCheckpointStore } from '../core/flowCheckpointStore.js';
50
+ // Phase 5: editor lint — soft warnings (unbound placeholders, etc.)
51
+ import { lintFlow } from '../core/flowLint.js';
52
+ // Phase 6: append-only flow version archive (rollback support).
53
+ import { FlowVersionStore } from '../core/flowVersionStore.js';
46
54
 
47
55
  // Scheduler visualizer routes (extracted for testability)
48
56
  import { registerSchedulerRoutes } from './schedulerRoutes.js';
@@ -536,6 +544,39 @@ class WebServer {
536
544
  // WebServer has broadcastToSession method that FlowExecutor will use
537
545
  this.flowExecutor.setWebSocketManager(this);
538
546
 
547
+ // Phase 4: wire a disk checkpoint store so failed/interrupted
548
+ // flow runs can be resumed instead of starting over from scratch.
549
+ // Stored under the user data dir alongside agent state so the
550
+ // data survives `npm i -g` updates and follows the user across
551
+ // working-directory changes. (Earlier code read `dataPaths?.dataDir`
552
+ // which doesn't exist on getUserDataPaths() — that fell through to
553
+ // process.cwd() and dropped checkpoints into whatever directory the
554
+ // process happened to start in. Use `state` instead, grouping with
555
+ // agents/, operations/, models/, skills/.)
556
+ try {
557
+ const dataPaths = getUserDataPaths();
558
+ const checkpointDir = path.join(dataPaths?.state || process.cwd(), 'flow-checkpoints');
559
+ const store = new FlowCheckpointStore({ baseDir: checkpointDir });
560
+ this.flowExecutor.setCheckpointStore(store);
561
+ this.logger.info('FlowExecutor checkpoint store enabled', { baseDir: checkpointDir });
562
+ } catch (err) {
563
+ // Non-fatal: continue without resumability rather than failing init.
564
+ this.logger.warn('Failed to enable flow checkpoint store (non-fatal)', { error: err.message });
565
+ }
566
+
567
+ // Phase 6: wire a version store so every flow save records an
568
+ // immutable snapshot. Used by /api/flows/:id/versions and
569
+ // /api/flows/:id/rollback. Stored alongside checkpoints under
570
+ // user data dir (see comment above for path-fix history).
571
+ try {
572
+ const dataPaths = getUserDataPaths();
573
+ const versionDir = path.join(dataPaths?.state || process.cwd(), 'flow-versions');
574
+ this.flowVersionStore = new FlowVersionStore({ baseDir: versionDir });
575
+ this.logger.info('Flow version store enabled', { baseDir: versionDir });
576
+ } catch (err) {
577
+ this.logger.warn('Failed to enable flow version store (non-fatal)', { error: err.message });
578
+ }
579
+
539
580
  // Wire FlowExecutor into jobDoneTool so it can signal completion directly
540
581
  const toolsRegistry = this.orchestrator?.toolsRegistry;
541
582
  if (toolsRegistry) {
@@ -4249,9 +4290,37 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4249
4290
  });
4250
4291
  }
4251
4292
 
4293
+ // If the resilient state loader recovered from missing/empty/
4294
+ // corrupt files, broadcast each recovery as a UI toast so the
4295
+ // operator sees what was salvaged. The reports were attached to
4296
+ // the restored agent in stateManager.restoreAgent.
4297
+ const recoveries = Array.isArray(agent._restoreRecoveries) ? agent._restoreRecoveries : [];
4298
+ if (recoveries.length > 0 && this.wsManager) {
4299
+ for (const r of recoveries) {
4300
+ this.wsManager.broadcast({
4301
+ type: 'state-file-recovery',
4302
+ level: r.kind === 'unrepairable' ? 'error'
4303
+ : r.kind === 'partial' ? 'warning'
4304
+ : 'info',
4305
+ agentId: agent.id,
4306
+ agentName: agent.name,
4307
+ recovery: {
4308
+ kind: r.kind,
4309
+ label: r.label,
4310
+ message: r.message,
4311
+ archivePath: r.archivePath || null,
4312
+ },
4313
+ });
4314
+ }
4315
+ }
4316
+ // Strip the recovery payload before logging/serializing back to
4317
+ // the client — it's an internal hint, not part of the agent shape.
4318
+ delete agent._restoreRecoveries;
4319
+
4252
4320
  this.logger.info('Agent imported successfully', {
4253
4321
  agentId: agent.id,
4254
- name: agent.name
4322
+ name: agent.name,
4323
+ recoveryCount: recoveries.length,
4255
4324
  });
4256
4325
 
4257
4326
  res.json({
@@ -4264,7 +4333,12 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4264
4333
  capabilities: agent.capabilities,
4265
4334
  lastActivity: agent.lastActivity
4266
4335
  },
4267
- message: `Agent ${agent.name} imported successfully`
4336
+ message: `Agent ${agent.name} imported successfully`,
4337
+ // Surfaced to the importer too so a non-WS client (curl) sees
4338
+ // them in the response body.
4339
+ ...(recoveries.length > 0 ? { recoveries: recoveries.map(r => ({
4340
+ kind: r.kind, label: r.label, message: r.message,
4341
+ })) } : {}),
4268
4342
  });
4269
4343
  } catch (error) {
4270
4344
  this.logger.error('Failed to import agent', {
@@ -4723,10 +4797,15 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4723
4797
  try {
4724
4798
  const { name, description, nodes, edges, variables } = req.body;
4725
4799
 
4726
- if (!name) {
4800
+ // Schema gate: reject malformed flows BEFORE they reach persistence
4801
+ // (avoids "saved but unexecutable" states). 400 with structured
4802
+ // errors so the editor can highlight specific problems inline.
4803
+ const validation = validateFlowDefinition({ name, nodes: nodes || [], edges: edges || [], variables });
4804
+ if (!validation.ok) {
4727
4805
  return res.status(400).json({
4728
4806
  success: false,
4729
- error: 'Flow name is required'
4807
+ error: 'Flow definition is invalid',
4808
+ details: validation.errors
4730
4809
  });
4731
4810
  }
4732
4811
 
@@ -4739,6 +4818,20 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4739
4818
  variables
4740
4819
  }, projectDir);
4741
4820
 
4821
+ // Phase 6: record initial version (v1). Best-effort — the flow
4822
+ // is already saved; failing to version is a non-fatal warning.
4823
+ // Stamp the version number back onto the flow record so runs
4824
+ // can record which definition produced their output.
4825
+ if (this.flowVersionStore && flow?.id) {
4826
+ try {
4827
+ const v = await this.flowVersionStore.recordVersion(flow.id, flow);
4828
+ const projectDir = this.orchestrator.config.project?.directory || process.cwd();
4829
+ await this.orchestrator.stateManager.updateFlow(flow.id, { version: v.version }, projectDir);
4830
+ flow.version = v.version;
4831
+ }
4832
+ catch (e) { this.logger.warn('flow version record failed', { error: e.message }); }
4833
+ }
4834
+
4742
4835
  // Broadcast flow created event
4743
4836
  if (this.wsManager) {
4744
4837
  this.wsManager.broadcast({
@@ -4794,6 +4887,35 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4794
4887
  const { name, description, nodes, edges, variables } = req.body;
4795
4888
  const projectDir = this.orchestrator.config.project?.directory || process.cwd();
4796
4889
 
4890
+ // PUT supports partial updates (e.g. just `{ nodes, edges }`
4891
+ // when the user clicks Save in the editor). Load the existing
4892
+ // flow and merge the patch before validating, so the schema
4893
+ // gate sees the full resulting record — not just the diff.
4894
+ const existing = await this.orchestrator.stateManager.getFlow(flowId, projectDir);
4895
+ if (!existing) {
4896
+ return res.status(404).json({ success: false, error: `Flow ${flowId} not found` });
4897
+ }
4898
+ const merged = {
4899
+ ...existing,
4900
+ ...(name !== undefined ? { name } : {}),
4901
+ ...(description !== undefined ? { description } : {}),
4902
+ ...(nodes !== undefined ? { nodes } : {}),
4903
+ ...(edges !== undefined ? { edges } : {}),
4904
+ ...(variables !== undefined ? { variables } : {}),
4905
+ };
4906
+
4907
+ // Same schema gate as POST. Editing a flow into an invalid state
4908
+ // is just as bad as creating one — both should be caught here, not
4909
+ // 90s into a future execution.
4910
+ const validation = validateFlowDefinition(merged);
4911
+ if (!validation.ok) {
4912
+ return res.status(400).json({
4913
+ success: false,
4914
+ error: 'Flow definition is invalid',
4915
+ details: validation.errors
4916
+ });
4917
+ }
4918
+
4797
4919
  const flow = await this.orchestrator.stateManager.updateFlow(flowId, {
4798
4920
  name,
4799
4921
  description,
@@ -4802,6 +4924,17 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4802
4924
  variables
4803
4925
  }, projectDir);
4804
4926
 
4927
+ // Phase 6: record a new version snapshot on every PUT and
4928
+ // stamp the new version number onto the live record.
4929
+ if (this.flowVersionStore && flow?.id) {
4930
+ try {
4931
+ const v = await this.flowVersionStore.recordVersion(flow.id, flow);
4932
+ await this.orchestrator.stateManager.updateFlow(flow.id, { version: v.version }, projectDir);
4933
+ flow.version = v.version;
4934
+ }
4935
+ catch (e) { this.logger.warn('flow version record failed', { error: e.message }); }
4936
+ }
4937
+
4805
4938
  // Broadcast flow updated event
4806
4939
  if (this.wsManager) {
4807
4940
  this.wsManager.broadcast({
@@ -4956,6 +5089,140 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
4956
5089
  }
4957
5090
  });
4958
5091
 
5092
+ // Phase 6: list versions of a flow (lightweight metadata only).
5093
+ this.app.get('/api/flows/:flowId/versions', async (req, res) => {
5094
+ try {
5095
+ if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
5096
+ const versions = await this.flowVersionStore.listVersions(req.params.flowId);
5097
+ res.json({ success: true, data: versions });
5098
+ } catch (error) {
5099
+ this.logger.error('list versions failed', { error: error.message });
5100
+ res.status(500).json({ success: false, error: error.message });
5101
+ }
5102
+ });
5103
+
5104
+ // Phase 6: read a specific version snapshot (full flow definition).
5105
+ this.app.get('/api/flows/:flowId/versions/:version', async (req, res) => {
5106
+ try {
5107
+ if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
5108
+ const v = parseInt(req.params.version, 10);
5109
+ if (!Number.isFinite(v) || v < 1) {
5110
+ return res.status(400).json({ success: false, error: 'version must be a positive integer' });
5111
+ }
5112
+ const snap = await this.flowVersionStore.loadVersion(req.params.flowId, v);
5113
+ if (!snap) return res.status(404).json({ success: false, error: 'version not found' });
5114
+ res.json({ success: true, data: snap });
5115
+ } catch (error) {
5116
+ this.logger.error('load version failed', { error: error.message });
5117
+ res.status(500).json({ success: false, error: error.message });
5118
+ }
5119
+ });
5120
+
5121
+ // Phase 6: rollback — restore version N as the live flow record.
5122
+ // Body: { version: N }. Records ANOTHER new version after rollback
5123
+ // so history stays append-only ("rolled back to v3" produces v(N+1)).
5124
+ this.app.post('/api/flows/:flowId/rollback', async (req, res) => {
5125
+ try {
5126
+ if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
5127
+ const { flowId } = req.params;
5128
+ const target = parseInt(req.body?.version, 10);
5129
+ if (!Number.isFinite(target) || target < 1) {
5130
+ return res.status(400).json({ success: false, error: 'body.version must be a positive integer' });
5131
+ }
5132
+ const snap = await this.flowVersionStore.loadVersion(flowId, target);
5133
+ if (!snap) return res.status(404).json({ success: false, error: `version ${target} not found` });
5134
+
5135
+ // Validate the target snapshot before promoting it. A flow that
5136
+ // passed validation when first saved may now be invalid against
5137
+ // a newer schema — surfacing that here is better than at execute.
5138
+ const validation = validateFlowDefinition(snap.flow);
5139
+ if (!validation.ok) {
5140
+ return res.status(400).json({
5141
+ success: false,
5142
+ error: `version ${target} fails current validation`,
5143
+ details: validation.errors,
5144
+ });
5145
+ }
5146
+
5147
+ const projectDir = this.orchestrator.config.project?.directory || process.cwd();
5148
+ const restored = await this.orchestrator.stateManager.updateFlow(flowId, {
5149
+ name: snap.flow.name,
5150
+ description: snap.flow.description,
5151
+ nodes: snap.flow.nodes,
5152
+ edges: snap.flow.edges,
5153
+ variables: snap.flow.variables,
5154
+ }, projectDir);
5155
+
5156
+ // Append a new version entry tagging the rollback
5157
+ try {
5158
+ await this.flowVersionStore.recordVersion(flowId, {
5159
+ ...restored,
5160
+ _rollbackOf: target,
5161
+ });
5162
+ } catch (e) {
5163
+ this.logger.warn('post-rollback version record failed', { error: e.message });
5164
+ }
5165
+
5166
+ if (this.wsManager) {
5167
+ this.wsManager.broadcast({ type: 'flow-updated', flow: restored });
5168
+ }
5169
+ res.json({ success: true, data: restored, rolledBackTo: target });
5170
+ } catch (error) {
5171
+ this.logger.error('rollback failed', { error: error.message });
5172
+ res.status(500).json({ success: false, error: error.message });
5173
+ }
5174
+ });
5175
+
5176
+ // Phase 5: dry-run / lint an unsaved flow definition.
5177
+ // Posted body IS the flow definition (so the editor can lint
5178
+ // unsaved drafts). Combines schema gate + lint warnings into a
5179
+ // single report so the editor can highlight everything inline.
5180
+ this.app.post('/api/flows/dry-run', async (req, res) => {
5181
+ try {
5182
+ const flow = req.body || {};
5183
+ const validation = validateFlowDefinition(flow);
5184
+ const lint = lintFlow(flow);
5185
+ res.json({
5186
+ success: true,
5187
+ ok: validation.ok && lint.errors.length === 0,
5188
+ schemaErrors: validation.errors,
5189
+ lintErrors: lint.errors,
5190
+ lintWarnings: lint.warnings,
5191
+ });
5192
+ } catch (error) {
5193
+ this.logger.error('Dry-run failed', { error: error.message });
5194
+ res.status(500).json({ success: false, error: error.message });
5195
+ }
5196
+ });
5197
+
5198
+ // Phase 4: resume a failed / interrupted flow run.
5199
+ // Per-node checkpoints on disk let us skip already-completed nodes
5200
+ // and re-run from the first non-completed one. The run record lives
5201
+ // under runId regardless of the flow it belongs to, so this lookup
5202
+ // does not require the flowId in the URL.
5203
+ this.app.post('/api/flows/runs/:runId/resume', async (req, res) => {
5204
+ try {
5205
+ const { runId } = req.params;
5206
+ const { sessionId } = req.body || {};
5207
+ if (!this.flowExecutor) {
5208
+ return res.status(503).json({ success: false, error: 'FlowExecutor not initialized' });
5209
+ }
5210
+ // Async: kick off and return immediately so the HTTP request
5211
+ // doesn't sit open for minutes. Errors propagate via WebSocket
5212
+ // (flow_run_failed) and the run record's status field.
5213
+ this.flowExecutor.resumeFlow(runId, sessionId || null).catch(err => {
5214
+ this.logger.error(`Resume flow failed for run ${runId}`, { error: err.message });
5215
+ });
5216
+ res.json({ success: true, runId, status: 'resuming' });
5217
+ } catch (error) {
5218
+ this.logger.error('Failed to resume flow run', { error: error.message, runId: req.params.runId });
5219
+ const status = /not found/i.test(error.message) ? 404
5220
+ : /checkpoint store/i.test(error.message) ? 503
5221
+ : 500;
5222
+ res.status(status).json({ success: false, error: error.message });
5223
+ }
5224
+ });
5225
+
4959
5226
  // Stop a flow run
4960
5227
  this.app.post('/api/flows/:flowId/stop', async (req, res) => {
4961
5228
  try {