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.
- package/bin/cli.js +38 -18
- package/package.json +2 -1
- package/scripts/e2e-flow-live.js +598 -0
- package/src/__tests__/resolvePreferredModel.test.js +15 -1
- package/src/core/__test-utils__/flowJudge.js +198 -0
- package/src/core/__tests__/flowCheckpointStore.test.js +140 -0
- package/src/core/__tests__/flowEndToEnd.test.js +565 -0
- package/src/core/__tests__/flowExecutor.test.js +950 -0
- package/src/core/__tests__/flowFieldMapping.test.js +189 -0
- package/src/core/__tests__/flowJudge.test.js +140 -0
- package/src/core/__tests__/flowLint.test.js +119 -0
- package/src/core/__tests__/flowLintClientMirror.test.js +98 -0
- package/src/core/__tests__/flowMigration.test.js +160 -0
- package/src/core/__tests__/flowRetry.test.js +145 -0
- package/src/core/__tests__/flowSavePayload.test.js +169 -0
- package/src/core/__tests__/flowSchema.test.js +438 -0
- package/src/core/__tests__/flowTemplates.test.js +183 -0
- package/src/core/__tests__/flowTypes.test.js +147 -0
- package/src/core/__tests__/flowVersionStore.test.js +123 -0
- package/src/core/__tests__/orchestrator.test.js +38 -0
- package/src/core/__tests__/stateManager.test.js +281 -0
- package/src/core/agentScheduler.js +37 -6
- package/src/core/flowCheckpointStore.js +146 -0
- package/src/core/flowExecutor.js +669 -87
- package/src/core/flowFieldMapping.js +138 -0
- package/src/core/flowLint.js +102 -0
- package/src/core/flowMigration.js +88 -0
- package/src/core/flowRetry.js +103 -0
- package/src/core/flowSchema.js +297 -0
- package/src/core/flowTypes.js +81 -0
- package/src/core/flowVersionStore.js +122 -0
- package/src/core/messageProcessor.js +5 -1
- package/src/core/stateManager.js +249 -15
- package/src/index.js +8 -0
- package/src/interfaces/webServer.js +271 -4
- package/src/modules/widget/galleryStore.js +27 -2
- package/src/services/__tests__/apiKeyManager.test.js +163 -0
- package/src/services/__tests__/flowContextService.test.js +391 -0
- package/src/services/apiKeyManager.js +54 -3
- package/src/services/flowContextService.js +401 -4
- package/src/tools/__tests__/imageFormat.test.js +208 -0
- package/src/tools/__tests__/jobDoneTool.test.js +285 -0
- package/src/tools/imageFormat.js +249 -0
- package/src/tools/imageTool.js +107 -18
- package/src/tools/jobDoneTool.js +111 -3
- package/src/tools/videoTool.js +94 -60
- package/src/tools/webTool.js +9 -0
- package/src/utilities/__tests__/apiKeyPlaceholders.test.js +120 -0
- package/src/utilities/__tests__/brand.test.js +115 -0
- package/src/utilities/apiKeyPlaceholders.js +68 -0
- package/src/utilities/brand.js +93 -0
- package/src/utilities/userDataDir.js +5 -0
- package/web-ui/build/index.html +2 -2
- package/web-ui/build/static/1c-CvuQ3hv-.js +1 -0
- package/web-ui/build/static/abap-BLdv0Jje.js +1 -0
- package/web-ui/build/static/abnf-CGGg8KtC.js +1 -0
- package/web-ui/build/static/abnf-DRXF8AHh.js +1 -0
- package/web-ui/build/static/accesslog-C0v06age.js +1 -0
- package/web-ui/build/static/actionscript-5uhk1qo4.js +1 -0
- package/web-ui/build/static/actionscript-eFh_rL7l.js +1 -0
- package/web-ui/build/static/ada-DX064lsk.js +1 -0
- package/web-ui/build/static/ada-DtDpZJA8.js +1 -0
- package/web-ui/build/static/agda-DPnmQC2V.js +1 -0
- package/web-ui/build/static/al-BJnZv7Mq.js +1 -0
- package/web-ui/build/static/angelscript-BzX4egqM.js +1 -0
- package/web-ui/build/static/antlr4-CpvLBdqN.js +1 -0
- package/web-ui/build/static/apache-CeMpLZgQ.js +1 -0
- package/web-ui/build/static/apacheconf-DuxpNgGg.js +1 -0
- package/web-ui/build/static/apex-BnvL-Zqw.js +1 -0
- package/web-ui/build/static/apl-Cwp1WC58.js +1 -0
- package/web-ui/build/static/applescript-Drjf4gZ_.js +1 -0
- package/web-ui/build/static/applescript-OCRtzdLy.js +1 -0
- package/web-ui/build/static/aql-BT92x5XB.js +1 -0
- package/web-ui/build/static/arcade-BS9r1rKb.js +1 -0
- package/web-ui/build/static/arduino-Dx4b0RsU.js +1 -0
- package/web-ui/build/static/arduino-MC82bxgK.js +1 -0
- package/web-ui/build/static/arff-BPbJPmCK.js +1 -0
- package/web-ui/build/static/armasm-Ae0OYiNN.js +1 -0
- package/web-ui/build/static/asciidoc-BFCjTY8x.js +1 -0
- package/web-ui/build/static/asciidoc-Cum1UNn8.js +1 -0
- package/web-ui/build/static/asm6502-DRrCRZ3g.js +1 -0
- package/web-ui/build/static/asmatmel-QweP0nrX.js +1 -0
- package/web-ui/build/static/aspectj-GSWlVl13.js +1 -0
- package/web-ui/build/static/aspnet-gFBjg3Gc.js +1 -0
- package/web-ui/build/static/autohotkey-BKW8CgdS.js +1 -0
- package/web-ui/build/static/autohotkey-PxYn0v1n.js +1 -0
- package/web-ui/build/static/autoit-Dm1-Ww37.js +1 -0
- package/web-ui/build/static/autoit-ttEVAAKG.js +1 -0
- package/web-ui/build/static/avisynth-B7Wkp41N.js +1 -0
- package/web-ui/build/static/avrasm-CUPF81zm.js +1 -0
- package/web-ui/build/static/avro-idl-DHWmsw82.js +1 -0
- package/web-ui/build/static/awk-CjJ3RSZI.js +1 -0
- package/web-ui/build/static/axapta-C1qEYhtS.js +1 -0
- package/web-ui/build/static/bash-BGEpCDRi.js +1 -0
- package/web-ui/build/static/bash-nKHqg4vr.js +1 -0
- package/web-ui/build/static/basic-BoEGbohL.js +1 -0
- package/web-ui/build/static/basic-LeZDGhzq.js +1 -0
- package/web-ui/build/static/batch-AgpF9rt8.js +1 -0
- package/web-ui/build/static/bbcode-qAuG7NMV.js +1 -0
- package/web-ui/build/static/bicep-BjdiK558.js +1 -0
- package/web-ui/build/static/birb-DAe1WhT3.js +1 -0
- package/web-ui/build/static/bison-BanDUZpy.js +1 -0
- package/web-ui/build/static/bnf-DlBe3_6s.js +1 -0
- package/web-ui/build/static/bnf-QgoO3Q8o.js +1 -0
- package/web-ui/build/static/brainfuck-B1DXmfDc.js +1 -0
- package/web-ui/build/static/brainfuck-B_JhB4QU.js +1 -0
- package/web-ui/build/static/brightscript-C0POlK1a.js +1 -0
- package/web-ui/build/static/bro-CjGWwSC2.js +1 -0
- package/web-ui/build/static/bsl-DXsNn0E7.js +1 -0
- package/web-ui/build/static/c-D-Xouzk3.js +1 -0
- package/web-ui/build/static/c-Df8JpOdZ.js +1 -0
- package/web-ui/build/static/c-like-BQySGMeF.js +1 -0
- package/web-ui/build/static/cal-DLefuKn4.js +1 -0
- package/web-ui/build/static/capnproto-DuI4CHAK.js +1 -0
- package/web-ui/build/static/ceylon-DyUD9r5X.js +1 -0
- package/web-ui/build/static/cfscript-B71LgEx4.js +1 -0
- package/web-ui/build/static/chaiscript-DUx8exmo.js +1 -0
- package/web-ui/build/static/cil-BkH647hL.js +1 -0
- package/web-ui/build/static/clean-4G2AsMGw.js +1 -0
- package/web-ui/build/static/clojure-C41DUPjJ.js +1 -0
- package/web-ui/build/static/clojure-RzWG1SWB.js +1 -0
- package/web-ui/build/static/clojure-repl-C12peSNj.js +1 -0
- package/web-ui/build/static/cmake-D9dyf1Ef.js +1 -0
- package/web-ui/build/static/cmake-X6aOgq7A.js +1 -0
- package/web-ui/build/static/cobol-DQBujvW6.js +1 -0
- package/web-ui/build/static/coffeescript-3uuDLR0C.js +1 -0
- package/web-ui/build/static/coffeescript-BesW_-0N.js +1 -0
- package/web-ui/build/static/concurnas-DUqxEcDq.js +1 -0
- package/web-ui/build/static/coq-BNw0ZmzS.js +1 -0
- package/web-ui/build/static/coq-J6mf-n4i.js +1 -0
- package/web-ui/build/static/cos-B-p2VbRC.js +1 -0
- package/web-ui/build/static/cpp-B91xny9o.js +1 -0
- package/web-ui/build/static/cpp-C-qfcmAQ.js +1 -0
- package/web-ui/build/static/crmsh-CXJSYh9n.js +1 -0
- package/web-ui/build/static/crystal-BZJ_gkDx.js +1 -0
- package/web-ui/build/static/crystal-D7rBvt2Y.js +1 -0
- package/web-ui/build/static/csharp-CHWbNjwN.js +1 -0
- package/web-ui/build/static/csharp-DHH7lbyr.js +1 -0
- package/web-ui/build/static/cshtml-6XKl5N6w.js +1 -0
- package/web-ui/build/static/csp-BwQp4uKS.js +1 -0
- package/web-ui/build/static/csp-LxTXhb7W.js +1 -0
- package/web-ui/build/static/css-JviRe6l1.js +1 -0
- package/web-ui/build/static/css-extras-DdIyhyWh.js +1 -0
- package/web-ui/build/static/csv-BhyLVYKF.js +1 -0
- package/web-ui/build/static/cypher-45QLqKfb.js +1 -0
- package/web-ui/build/static/d-BQuCFdtT.js +1 -0
- package/web-ui/build/static/d-rDpztdwo.js +1 -0
- package/web-ui/build/static/dart-B3HdKwvI.js +1 -0
- package/web-ui/build/static/dart-CxIvlNfF.js +1 -0
- package/web-ui/build/static/dataweave-CMS5SC_F.js +1 -0
- package/web-ui/build/static/dax-C_neqUB4.js +1 -0
- package/web-ui/build/static/delphi-D86BXUtC.js +1 -0
- package/web-ui/build/static/dhall-BGV0CTjz.js +1 -0
- package/web-ui/build/static/diff-Br5L84xu.js +1 -0
- package/web-ui/build/static/diff-C8dJOj7p.js +1 -0
- package/web-ui/build/static/django-CRpfLgb_.js +1 -0
- package/web-ui/build/static/django-Cr0k0BHt.js +1 -0
- package/web-ui/build/static/dns-CvhVGt9J.js +1 -0
- package/web-ui/build/static/dns-zone-file--waGszJ5.js +1 -0
- package/web-ui/build/static/docker-Bp-jYj4d.js +1 -0
- package/web-ui/build/static/dockerfile-B9PF5D-H.js +1 -0
- package/web-ui/build/static/dos-CGjRa73t.js +1 -0
- package/web-ui/build/static/dot---3xJv0W.js +1 -0
- package/web-ui/build/static/dsconfig-ChUbMzIk.js +1 -0
- package/web-ui/build/static/dts-DzVrXhdk.js +1 -0
- package/web-ui/build/static/dust-BuyYJzfS.js +1 -0
- package/web-ui/build/static/ebnf-B4Jhny4j.js +1 -0
- package/web-ui/build/static/ebnf-wTpKeELK.js +1 -0
- package/web-ui/build/static/editorconfig-DijMMyBE.js +1 -0
- package/web-ui/build/static/eiffel-gSk8UUfh.js +1 -0
- package/web-ui/build/static/ejs-U-J4wHaR.js +1 -0
- package/web-ui/build/static/elixir-CLgHOCRk.js +1 -0
- package/web-ui/build/static/elixir-KhfnyoV6.js +1 -0
- package/web-ui/build/static/elm-B0g83jwv.js +1 -0
- package/web-ui/build/static/elm-Bl8qDmwz.js +1 -0
- package/web-ui/build/static/erb-CwkagsxA.js +1 -0
- package/web-ui/build/static/erb-DXfF2Urb.js +1 -0
- package/web-ui/build/static/erlang-BsONy4Br.js +1 -0
- package/web-ui/build/static/erlang-C44ddtgw.js +1 -0
- package/web-ui/build/static/erlang-repl-DhirJ_Ji.js +1 -0
- package/web-ui/build/static/etlua-C71HyvJj.js +1 -0
- package/web-ui/build/static/excel-B_RD_Nc6.js +1 -0
- package/web-ui/build/static/excel-formula-xRVcfp1T.js +1 -0
- package/web-ui/build/static/factor-CftUx68l.js +1 -0
- package/web-ui/build/static/false-DqRtSZRC.js +1 -0
- package/web-ui/build/static/firestore-security-rules-BCG_0nJP.js +1 -0
- package/web-ui/build/static/fix-CnRMAIWg.js +1 -0
- package/web-ui/build/static/flix-DLAgo_-e.js +1 -0
- package/web-ui/build/static/flow-w5YSIX1I.js +1 -0
- package/web-ui/build/static/fortran-CH5byJ0j.js +1 -0
- package/web-ui/build/static/fortran-DK-jnXQF.js +1 -0
- package/web-ui/build/static/fsharp-Cnfw9xB2.js +1 -0
- package/web-ui/build/static/fsharp-hebdfC6F.js +1 -0
- package/web-ui/build/static/ftl-DSSTp35t.js +1 -0
- package/web-ui/build/static/gams-C3akjfKZ.js +1 -0
- package/web-ui/build/static/gap-Dve6kEeL.js +1 -0
- package/web-ui/build/static/gauss-BmUqjv1m.js +1 -0
- package/web-ui/build/static/gcode-CjPpcuxm.js +1 -0
- package/web-ui/build/static/gcode-DdF0Sf0K.js +1 -0
- package/web-ui/build/static/gdscript-uyE_Q4Bz.js +1 -0
- package/web-ui/build/static/gedcom-9_5CrYud.js +1 -0
- package/web-ui/build/static/gherkin-0qL8AiDA.js +1 -0
- package/web-ui/build/static/gherkin-CBXpoWw3.js +1 -0
- package/web-ui/build/static/git-D6Y51k33.js +1 -0
- package/web-ui/build/static/glsl-DnD7skof.js +1 -0
- package/web-ui/build/static/glsl-aij7eTLw.js +1 -0
- package/web-ui/build/static/gml-3zbjVRHR.js +1 -0
- package/web-ui/build/static/gml-BOViyHVy.js +1 -0
- package/web-ui/build/static/gn-lYZFOgaG.js +1 -0
- package/web-ui/build/static/go-D3NQLBKz.js +1 -0
- package/web-ui/build/static/go-_v8tkYQe.js +1 -0
- package/web-ui/build/static/go-module-C6c3_rbX.js +1 -0
- package/web-ui/build/static/golo-BOIzwgKG.js +1 -0
- package/web-ui/build/static/gradle-DdejLgT6.js +1 -0
- package/web-ui/build/static/graphql-BWowSWlo.js +1 -0
- package/web-ui/build/static/groovy-DE_kIGjj.js +1 -0
- package/web-ui/build/static/groovy-DatEqK3Y.js +1 -0
- package/web-ui/build/static/haml-CpEpgDyf.js +1 -0
- package/web-ui/build/static/haml-DbPIKAsr.js +1 -0
- package/web-ui/build/static/handlebars-BcvOygMh.js +1 -0
- package/web-ui/build/static/handlebars-CM_40QlT.js +1 -0
- package/web-ui/build/static/haskell-DVgDTyj3.js +1 -0
- package/web-ui/build/static/haskell-Dm2oiqNu.js +1 -0
- package/web-ui/build/static/haxe--0QfWvD_.js +1 -0
- package/web-ui/build/static/haxe-DClHSH5I.js +1 -0
- package/web-ui/build/static/hcl-BaxNlNAk.js +1 -0
- package/web-ui/build/static/hlsl-Di7PYfJn.js +1 -0
- package/web-ui/build/static/hoon-Bq4hhWSd.js +1 -0
- package/web-ui/build/static/hpkp-Bu1AnCZZ.js +1 -0
- package/web-ui/build/static/hsp-CbIHPOnb.js +1 -0
- package/web-ui/build/static/hsts-inGzMZHb.js +1 -0
- package/web-ui/build/static/htmlbars-B63TZb6k.js +1 -0
- package/web-ui/build/static/http-3wWrh86I.js +1 -0
- package/web-ui/build/static/http-Bv97BGAr.js +1 -0
- package/web-ui/build/static/hy-CIEvnIJC.js +1 -0
- package/web-ui/build/static/ichigojam-BAyO373g.js +1 -0
- package/web-ui/build/static/icon-CGCawTFI.js +1 -0
- package/web-ui/build/static/icu-message-format-C_lOXF7I.js +1 -0
- package/web-ui/build/static/idris-D0SaDFta.js +1 -0
- package/web-ui/build/static/iecst-DIJ6Ei7g.js +1 -0
- package/web-ui/build/static/ignore-CgcF6vXx.js +1 -0
- package/web-ui/build/static/index-CCDUVvvx.js +1 -0
- package/web-ui/build/static/index-Cjg3uZB9.js +1109 -0
- package/web-ui/build/static/index-CjtNtdGN.js +13 -0
- package/web-ui/build/static/index-DpMwgPzf.css +1 -0
- package/web-ui/build/static/inform7-C_MqBtMp.js +1 -0
- package/web-ui/build/static/inform7-CmRJkJSh.js +1 -0
- package/web-ui/build/static/ini-BE6jwIzm.js +1 -0
- package/web-ui/build/static/ini-BJ50J7Sm.js +1 -0
- package/web-ui/build/static/io-Cnt0nyV5.js +1 -0
- package/web-ui/build/static/irpf90-BjRJE_kg.js +1 -0
- package/web-ui/build/static/isbl-C7912t_8.js +1 -0
- package/web-ui/build/static/j-D6ci3wH9.js +1 -0
- package/web-ui/build/static/java-B_gtzL63.js +1 -0
- package/web-ui/build/static/java-CChyLI1p.js +1 -0
- package/web-ui/build/static/javadoc-CGvzgn19.js +1 -0
- package/web-ui/build/static/javadoclike-CI4krpLe.js +1 -0
- package/web-ui/build/static/javascript-CgORCJsx.js +1 -0
- package/web-ui/build/static/javastacktrace-DNnLXvJa.js +1 -0
- package/web-ui/build/static/jboss-cli-DIfGm3Rl.js +1 -0
- package/web-ui/build/static/jexl-CYQxvL_i.js +1 -0
- package/web-ui/build/static/jolie-C2fxUjz7.js +1 -0
- package/web-ui/build/static/jq-j1fAl-OU.js +1 -0
- package/web-ui/build/static/js-extras-Dqx-da8U.js +1 -0
- package/web-ui/build/static/js-templates-jQphR4CW.js +1 -0
- package/web-ui/build/static/jsdoc-BCunhOqo.js +1 -0
- package/web-ui/build/static/json-CljDde4D.js +1 -0
- package/web-ui/build/static/json-Cvzg5_hO.js +1 -0
- package/web-ui/build/static/json5-B19V_yl9.js +1 -0
- package/web-ui/build/static/jsonp-WdmhO5Oi.js +1 -0
- package/web-ui/build/static/jsstacktrace-LpNHn4a_.js +1 -0
- package/web-ui/build/static/jsx-Zw6Egddf.js +1 -0
- package/web-ui/build/static/julia-DPlpJZNN.js +1 -0
- package/web-ui/build/static/julia-DuKc9nrz.js +1 -0
- package/web-ui/build/static/julia-repl-C-LuPMzI.js +1 -0
- package/web-ui/build/static/keepalived-DDl-dK9a.js +1 -0
- package/web-ui/build/static/keyman-DCtgoYKu.js +1 -0
- package/web-ui/build/static/kotlin-D9aFeaCS.js +1 -0
- package/web-ui/build/static/kotlin-DlrR34XG.js +1 -0
- package/web-ui/build/static/kumir-B_aiiAzq.js +1 -0
- package/web-ui/build/static/kusto-CD4lHO1B.js +1 -0
- package/web-ui/build/static/lasso-BAMF8mdd.js +1 -0
- package/web-ui/build/static/latex-BjEyffe7.js +1 -0
- package/web-ui/build/static/latex-NaCSqcbD.js +1 -0
- package/web-ui/build/static/latte-BACpaGl3.js +1 -0
- package/web-ui/build/static/ldif-CRWTiH1W.js +1 -0
- package/web-ui/build/static/leaf-BYydRpJx.js +1 -0
- package/web-ui/build/static/less-BtFu1MXi.js +1 -0
- package/web-ui/build/static/less-COgcqIOM.js +1 -0
- package/web-ui/build/static/lilypond-BMLjCV3G.js +1 -0
- package/web-ui/build/static/liquid-Dr5bQMAB.js +1 -0
- package/web-ui/build/static/lisp-CE1ra7Xs.js +1 -0
- package/web-ui/build/static/lisp-CcOEo5DI.js +1 -0
- package/web-ui/build/static/livecodeserver-DNuOfASY.js +1 -0
- package/web-ui/build/static/livescript-BJor4pxz.js +1 -0
- package/web-ui/build/static/livescript-DFaZj6XM.js +1 -0
- package/web-ui/build/static/llvm-CJtHIXsX.js +1 -0
- package/web-ui/build/static/llvm-d3gQICQs.js +1 -0
- package/web-ui/build/static/log-B0pKN1S4.js +1 -0
- package/web-ui/build/static/lolcode-C_V6Sffm.js +1 -0
- package/web-ui/build/static/lsl-yhp5dB9o.js +1 -0
- package/web-ui/build/static/lua-BDTJq_SO.js +1 -0
- package/web-ui/build/static/lua-BaKkUUd_.js +1 -0
- package/web-ui/build/static/magma-aTzw_jlN.js +1 -0
- package/web-ui/build/static/makefile-FyZn4dZ-.js +1 -0
- package/web-ui/build/static/makefile-Vk7smupm.js +1 -0
- package/web-ui/build/static/markdown-BHavO-Hk.js +1 -0
- package/web-ui/build/static/markdown-CTYy6uqC.js +1 -0
- package/web-ui/build/static/markup-templating-DJWuQB2F.js +1 -0
- package/web-ui/build/static/mathematica-BnMzpFTS.js +1 -0
- package/web-ui/build/static/matlab-BsW3yHe5.js +1 -0
- package/web-ui/build/static/matlab-C8_ylrUg.js +1 -0
- package/web-ui/build/static/maxima-c3e9EB-f.js +1 -0
- package/web-ui/build/static/maxscript-DU-NoCpb.js +1 -0
- package/web-ui/build/static/mel-CcB2EUO0.js +1 -0
- package/web-ui/build/static/mel-u6igP96m.js +1 -0
- package/web-ui/build/static/mercury-YZshmW3v.js +1 -0
- package/web-ui/build/static/mermaid-C9dmgLlU.js +1 -0
- package/web-ui/build/static/mipsasm-BXHH9ztX.js +1 -0
- package/web-ui/build/static/mizar-B1317rho.js +1 -0
- package/web-ui/build/static/mizar-BjaPUUcM.js +1 -0
- package/web-ui/build/static/mojolicious-BQ8vE8HW.js +1 -0
- package/web-ui/build/static/mongodb-P-J2PnwH.js +1 -0
- package/web-ui/build/static/monkey-DcKZEVh6.js +1 -0
- package/web-ui/build/static/monkey-wMAzhDv4.js +1 -0
- package/web-ui/build/static/moonscript-C9Ea7K1o.js +1 -0
- package/web-ui/build/static/moonscript-DAjW1T8X.js +1 -0
- package/web-ui/build/static/n1ql-6nGwiuTr.js +1 -0
- package/web-ui/build/static/n1ql-BxgYqKfs.js +1 -0
- package/web-ui/build/static/n4js-Cqw8_-b7.js +1 -0
- package/web-ui/build/static/nand2tetris-hdl-B3Qrhhfv.js +1 -0
- package/web-ui/build/static/naniscript-BpIC5j6P.js +1 -0
- package/web-ui/build/static/nasm-Dp1z_ttd.js +1 -0
- package/web-ui/build/static/neon-B4RksdIv.js +1 -0
- package/web-ui/build/static/nevod-P34zfD9_.js +1 -0
- package/web-ui/build/static/nginx-CSaiFc4g.js +1 -0
- package/web-ui/build/static/nginx-bZFV7OqP.js +1 -0
- package/web-ui/build/static/nim-D04ADsdj.js +1 -0
- package/web-ui/build/static/nim-D37nbh5y.js +1 -0
- package/web-ui/build/static/nix-BPsQ58gF.js +1 -0
- package/web-ui/build/static/nix-keWnuH3h.js +1 -0
- package/web-ui/build/static/node-repl-rNkVcb6S.js +1 -0
- package/web-ui/build/static/nsis-DT8bhvLc.js +1 -0
- package/web-ui/build/static/nsis-DvfCmyQQ.js +1 -0
- package/web-ui/build/static/objectivec-BaJIzRqu.js +1 -0
- package/web-ui/build/static/objectivec-CmAY0jlQ.js +1 -0
- package/web-ui/build/static/ocaml-Dsf96dbW.js +1 -0
- package/web-ui/build/static/ocaml-SFQJ7AwJ.js +1 -0
- package/web-ui/build/static/opencl-Dp9ILs3s.js +1 -0
- package/web-ui/build/static/openqasm-Bsk-xK6C.js +1 -0
- package/web-ui/build/static/openscad-Dgvp4h50.js +1 -0
- package/web-ui/build/static/oxygene-C9rTsztX.js +1 -0
- package/web-ui/build/static/oz-DNlV-Ssf.js +1 -0
- package/web-ui/build/static/parigp-B7a5XVP7.js +1 -0
- package/web-ui/build/static/parser-nTo2WBxY.js +1 -0
- package/web-ui/build/static/parser3-BSD4cYqf.js +1 -0
- package/web-ui/build/static/pascal-DJxIFBHG.js +1 -0
- package/web-ui/build/static/pascaligo-JdV741ps.js +1 -0
- package/web-ui/build/static/pcaxis-DdexNvEQ.js +1 -0
- package/web-ui/build/static/peoplecode-DxBgZPZT.js +1 -0
- package/web-ui/build/static/perl-C0INln41.js +1 -0
- package/web-ui/build/static/perl-DvRuNidH.js +1 -0
- package/web-ui/build/static/pf-BjguNjII.js +1 -0
- package/web-ui/build/static/pgsql-9w8Z8Ams.js +1 -0
- package/web-ui/build/static/php-DKQIY8Pe.js +1 -0
- package/web-ui/build/static/php-DibEnIhD.js +1 -0
- package/web-ui/build/static/php-extras-CKKhA74Z.js +1 -0
- package/web-ui/build/static/php-template-Cjba7UNU.js +1 -0
- package/web-ui/build/static/phpdoc-QXtTW5az.js +1 -0
- package/web-ui/build/static/plaintext-Cbn61_h_.js +1 -0
- package/web-ui/build/static/plsql-f34z7hfB.js +1 -0
- package/web-ui/build/static/pony-DBSnXJAW.js +1 -0
- package/web-ui/build/static/powerquery-lin81zqH.js +1 -0
- package/web-ui/build/static/powershell-BoyP16Ta.js +1 -0
- package/web-ui/build/static/powershell-CCpHONl6.js +1 -0
- package/web-ui/build/static/processing-Cd7-ycAb.js +1 -0
- package/web-ui/build/static/processing-CeGW9CwE.js +1 -0
- package/web-ui/build/static/profile-DLYi3Uya.js +1 -0
- package/web-ui/build/static/prolog-BVr1f3c4.js +1 -0
- package/web-ui/build/static/prolog-C3D6KhoT.js +1 -0
- package/web-ui/build/static/promql-dviC9B24.js +1 -0
- package/web-ui/build/static/properties-CSNjefFg.js +1 -0
- package/web-ui/build/static/properties-DTAWAQKc.js +1 -0
- package/web-ui/build/static/protobuf-BCYoMCa-.js +1 -0
- package/web-ui/build/static/protobuf-D8G6xbh1.js +1 -0
- package/web-ui/build/static/psl-DzehMnl-.js +1 -0
- package/web-ui/build/static/pug-Cl4m_Cmv.js +1 -0
- package/web-ui/build/static/puppet-CECKDklS.js +1 -0
- package/web-ui/build/static/puppet-ZSk9z7h2.js +1 -0
- package/web-ui/build/static/pure-CRYVKpUf.js +1 -0
- package/web-ui/build/static/purebasic-B1B7jCI9.js +1 -0
- package/web-ui/build/static/purebasic-BdOvLN02.js +1 -0
- package/web-ui/build/static/purescript-CdFZo5U_.js +1 -0
- package/web-ui/build/static/python-B_UnJ1V3.js +1 -0
- package/web-ui/build/static/python-BeSi3a8_.js +1 -0
- package/web-ui/build/static/python-repl-BBmtoedD.js +1 -0
- package/web-ui/build/static/q-Ery9rED_.js +1 -0
- package/web-ui/build/static/q-OEzRNQWZ.js +1 -0
- package/web-ui/build/static/qml-DdHTOYCC.js +1 -0
- package/web-ui/build/static/qml-DqjqC3TV.js +1 -0
- package/web-ui/build/static/qore-D3qGrct2.js +1 -0
- package/web-ui/build/static/qsharp-DdQgHY8o.js +1 -0
- package/web-ui/build/static/r-BsnBh-Gb.js +1 -0
- package/web-ui/build/static/r-CgLmD3ej.js +1 -0
- package/web-ui/build/static/racket-CgSPkQxA.js +1 -0
- package/web-ui/build/static/reason-BRJ4xDT3.js +1 -0
- package/web-ui/build/static/reasonml-B8V18bIF.js +1 -0
- package/web-ui/build/static/regex-C8qp_5tY.js +1 -0
- package/web-ui/build/static/rego-B3dQMEmR.js +1 -0
- package/web-ui/build/static/renpy-BmlUaEOQ.js +1 -0
- package/web-ui/build/static/rest-XlDNtjp0.js +1 -0
- package/web-ui/build/static/rib-BfquiuWk.js +1 -0
- package/web-ui/build/static/rip-dGRhlG0v.js +1 -0
- package/web-ui/build/static/roboconf-CtBSSFaA.js +1 -0
- package/web-ui/build/static/roboconf-wrbztr2r.js +1 -0
- package/web-ui/build/static/robotframework-BSxuJaY6.js +1 -0
- package/web-ui/build/static/routeros-DHKFvEvZ.js +1 -0
- package/web-ui/build/static/rsl-BhjvE0Cr.js +1 -0
- package/web-ui/build/static/ruby-BMED8W31.js +1 -0
- package/web-ui/build/static/ruby-BkE7uZGd.js +1 -0
- package/web-ui/build/static/ruleslanguage-DGe1m8Id.js +1 -0
- package/web-ui/build/static/rust-CUje9n_P.js +1 -0
- package/web-ui/build/static/rust-O67yEsAu.js +1 -0
- package/web-ui/build/static/sas-BpDWmnoa.js +1 -0
- package/web-ui/build/static/sas-DRBVod_5.js +1 -0
- package/web-ui/build/static/sass-CdUBh_kW.js +1 -0
- package/web-ui/build/static/scala-BvUTPbg2.js +1 -0
- package/web-ui/build/static/scala-DmXpVBFR.js +1 -0
- package/web-ui/build/static/scheme-BfzSegEb.js +1 -0
- package/web-ui/build/static/scheme-CL7dxV3L.js +1 -0
- package/web-ui/build/static/scilab-Bwx8K6ut.js +1 -0
- package/web-ui/build/static/scss-Bk3cnVi-.js +1 -0
- package/web-ui/build/static/scss-CEq_Uo2G.js +1 -0
- package/web-ui/build/static/shell-CH2lH60k.js +1 -0
- package/web-ui/build/static/shell-session-Dsc6nnXg.js +1 -0
- package/web-ui/build/static/smali-DR57iO-M.js +1 -0
- package/web-ui/build/static/smali-QDgUokkE.js +1 -0
- package/web-ui/build/static/smalltalk-CNWYoGI5.js +1 -0
- package/web-ui/build/static/smalltalk-DuKK00UG.js +1 -0
- package/web-ui/build/static/smarty-CM_K74KX.js +1 -0
- package/web-ui/build/static/sml-B-u4vtVQ.js +1 -0
- package/web-ui/build/static/sml-CnAed_Dv.js +1 -0
- package/web-ui/build/static/solidity-Bc_FUKPw.js +1 -0
- package/web-ui/build/static/solution-file-CE-Ffn8a.js +1 -0
- package/web-ui/build/static/soy-B__lNQNx.js +1 -0
- package/web-ui/build/static/sparql-BZnN0yju.js +1 -0
- package/web-ui/build/static/splunk-spl-DIs_BiUo.js +1 -0
- package/web-ui/build/static/sqf-DNSlhOUj.js +1 -0
- package/web-ui/build/static/sqf-DwPev5qJ.js +1 -0
- package/web-ui/build/static/sql-C9UaJUCf.js +1 -0
- package/web-ui/build/static/sql-DAnJSRyV.js +1 -0
- package/web-ui/build/static/sql_more-DMMfa_Zg.js +1 -0
- package/web-ui/build/static/squirrel-Bevu4MOl.js +1 -0
- package/web-ui/build/static/stan-Bs_yMVnC.js +1 -0
- package/web-ui/build/static/stan-Cduy4Z3W.js +1 -0
- package/web-ui/build/static/stata-BrHJdKRc.js +1 -0
- package/web-ui/build/static/step21-CGhxzCID.js +1 -0
- package/web-ui/build/static/stylus-B2lueE5_.js +1 -0
- package/web-ui/build/static/stylus-pKniqDuc.js +1 -0
- package/web-ui/build/static/subunit-B5WE5S5P.js +1 -0
- package/web-ui/build/static/swift-CEi576mT.js +1 -0
- package/web-ui/build/static/swift-CQCuFcEK.js +1 -0
- package/web-ui/build/static/systemd-CF-EHggg.js +1 -0
- package/web-ui/build/static/t4-cs-DWdn0RQB.js +1 -0
- package/web-ui/build/static/t4-templating-C15ubdW6.js +1 -0
- package/web-ui/build/static/t4-vb-Cz2QCDLO.js +1 -0
- package/web-ui/build/static/taggerscript-CfU_hv7J.js +1 -0
- package/web-ui/build/static/tap-2-gLM4Lw.js +1 -0
- package/web-ui/build/static/tap-M44CQJkj.js +1 -0
- package/web-ui/build/static/tcl-BMpkwsCa.js +1 -0
- package/web-ui/build/static/tcl-CfF-clAT.js +1 -0
- package/web-ui/build/static/textile-CUkgUEkV.js +1 -0
- package/web-ui/build/static/thrift-daJZ1DGJ.js +1 -0
- package/web-ui/build/static/toml-DnW5prhH.js +1 -0
- package/web-ui/build/static/tp-ZqeJLSGg.js +1 -0
- package/web-ui/build/static/tremor-WcELDSvz.js +1 -0
- package/web-ui/build/static/tsx-BVww6xUP.js +1 -0
- package/web-ui/build/static/tt2-Cxt3LLr_.js +1 -0
- package/web-ui/build/static/turtle-DmRTxNN8.js +1 -0
- package/web-ui/build/static/twig-DcLADpYg.js +1 -0
- package/web-ui/build/static/twig-Drdxszx_.js +1 -0
- package/web-ui/build/static/typescript-CgVWCuS9.js +1 -0
- package/web-ui/build/static/typescript-D3GjnDi9.js +1 -0
- package/web-ui/build/static/typoscript-B4qyGuOT.js +1 -0
- package/web-ui/build/static/unrealscript-BtIQeIeR.js +1 -0
- package/web-ui/build/static/uorazor-eWa_YDYv.js +1 -0
- package/web-ui/build/static/uri-CxsgAGHN.js +1 -0
- package/web-ui/build/static/v-D84eyWwn.js +1 -0
- package/web-ui/build/static/vala-Ccb9w5DW.js +1 -0
- package/web-ui/build/static/vala-MsPY7Xer.js +1 -0
- package/web-ui/build/static/vbnet-B33DMpXq.js +1 -0
- package/web-ui/build/static/vbnet-CaLY-AOH.js +1 -0
- package/web-ui/build/static/vbscript-DrXwNwNu.js +1 -0
- package/web-ui/build/static/vbscript-html-OTJEVr5m.js +1 -0
- package/web-ui/build/static/velocity-q0bXdAL4.js +1 -0
- package/web-ui/build/static/verilog-BD-Nxyqa.js +1 -0
- package/web-ui/build/static/verilog-PFy9sucN.js +1 -0
- package/web-ui/build/static/vhdl-BeCVyLiK.js +1 -0
- package/web-ui/build/static/vhdl-CMHdBpc5.js +1 -0
- package/web-ui/build/static/vim-3d_DOCsL.js +1 -0
- package/web-ui/build/static/vim-Bl5swMbH.js +1 -0
- package/web-ui/build/static/visual-basic-CjOvSeMg.js +1 -0
- package/web-ui/build/static/warpscript-C2EL35K2.js +1 -0
- package/web-ui/build/static/wasm-DmFD8VgH.js +1 -0
- package/web-ui/build/static/web-idl-RnzsvoQV.js +1 -0
- package/web-ui/build/static/wiki-Bu-zrPhW.js +1 -0
- package/web-ui/build/static/wolfram-CYYr3oaW.js +1 -0
- package/web-ui/build/static/wren-BXwkGwpn.js +1 -0
- package/web-ui/build/static/x86asm-_F19Kl5Y.js +1 -0
- package/web-ui/build/static/xeora-BmVPgL2I.js +1 -0
- package/web-ui/build/static/xl-68telKZ2.js +1 -0
- package/web-ui/build/static/xml-DPdaRgU0.js +1 -0
- package/web-ui/build/static/xml-doc-Aa64lijn.js +1 -0
- package/web-ui/build/static/xojo-DminlfyC.js +1 -0
- package/web-ui/build/static/xquery-BC1P9u6q.js +1 -0
- package/web-ui/build/static/xquery-kRz8gtls.js +1 -0
- package/web-ui/build/static/yaml-Bh9xHEaX.js +1 -0
- package/web-ui/build/static/yaml-CQW4NAe0.js +1 -0
- package/web-ui/build/static/yang-joHFzzXq.js +1 -0
- package/web-ui/build/static/zephir-BDGPNzsB.js +1 -0
- package/web-ui/build/static/zig-DtLmllYo.js +1 -0
- package/web-ui/build/static/1c-Cxgysx0K.js +0 -1
- package/web-ui/build/static/abap-D9Pd8DUG.js +0 -1
- package/web-ui/build/static/abnf-CHs5P8yl.js +0 -1
- package/web-ui/build/static/abnf-D5OtFEZO.js +0 -1
- package/web-ui/build/static/accesslog-CTD5Frmr.js +0 -1
- package/web-ui/build/static/actionscript-BN0BKQI7.js +0 -1
- package/web-ui/build/static/actionscript-DQNwbYlU.js +0 -1
- package/web-ui/build/static/ada-8O7AmGii.js +0 -1
- package/web-ui/build/static/ada-p8y2qCLB.js +0 -1
- package/web-ui/build/static/agda-BzT4bKSx.js +0 -1
- package/web-ui/build/static/al-Caq7o9RG.js +0 -1
- package/web-ui/build/static/angelscript-DivMpSHf.js +0 -1
- package/web-ui/build/static/antlr4-B1D_tnKH.js +0 -1
- package/web-ui/build/static/apache-l88_LooT.js +0 -1
- package/web-ui/build/static/apacheconf-kaxXABFE.js +0 -1
- package/web-ui/build/static/apex-CSdSRWUv.js +0 -1
- package/web-ui/build/static/apl-CHwVg89T.js +0 -1
- package/web-ui/build/static/applescript-C64qdYZf.js +0 -1
- package/web-ui/build/static/applescript-CqTGrBVp.js +0 -1
- package/web-ui/build/static/aql-BwKKr7z7.js +0 -1
- package/web-ui/build/static/arcade-C6oqHEwh.js +0 -1
- package/web-ui/build/static/arduino-DB4E20Km.js +0 -1
- package/web-ui/build/static/arduino-DKpgmHjE.js +0 -1
- package/web-ui/build/static/arff-CBbf8E8O.js +0 -1
- package/web-ui/build/static/armasm-Bogg7lrz.js +0 -1
- package/web-ui/build/static/asciidoc-3ZlDsfKD.js +0 -1
- package/web-ui/build/static/asciidoc-Cc88g_au.js +0 -1
- package/web-ui/build/static/asm6502-B4rN-vZ1.js +0 -1
- package/web-ui/build/static/asmatmel-B8zZLWGk.js +0 -1
- package/web-ui/build/static/aspectj-XdNtCtbN.js +0 -1
- package/web-ui/build/static/aspnet-DZVKB5n1.js +0 -1
- package/web-ui/build/static/autohotkey-CxDWLQqM.js +0 -1
- package/web-ui/build/static/autohotkey-DJStPrtS.js +0 -1
- package/web-ui/build/static/autoit-BWirJOCg.js +0 -1
- package/web-ui/build/static/autoit-CJcfmsnl.js +0 -1
- package/web-ui/build/static/avisynth-C7JQe3L7.js +0 -1
- package/web-ui/build/static/avrasm-CMiuHQvu.js +0 -1
- package/web-ui/build/static/avro-idl-kaRVyxMP.js +0 -1
- package/web-ui/build/static/awk-CQ70Cyh1.js +0 -1
- package/web-ui/build/static/axapta-DRxAzlG8.js +0 -1
- package/web-ui/build/static/bash-B2XqEYpT.js +0 -1
- package/web-ui/build/static/bash-D-D1taMA.js +0 -1
- package/web-ui/build/static/basic-Da1x7OIZ.js +0 -1
- package/web-ui/build/static/basic-Dslk2ZwT.js +0 -1
- package/web-ui/build/static/batch-B0wJNPoF.js +0 -1
- package/web-ui/build/static/bbcode-BXDdc2HS.js +0 -1
- package/web-ui/build/static/bicep-iiH-nx9J.js +0 -1
- package/web-ui/build/static/birb-DuTqqibI.js +0 -1
- package/web-ui/build/static/bison-D1Hw6owA.js +0 -1
- package/web-ui/build/static/bnf-BRhzfr87.js +0 -1
- package/web-ui/build/static/bnf-u1Iy1Ku7.js +0 -1
- package/web-ui/build/static/brainfuck-C4R5VJ3_.js +0 -1
- package/web-ui/build/static/brainfuck-C8niWF0i.js +0 -1
- package/web-ui/build/static/brightscript-DavMfkHx.js +0 -1
- package/web-ui/build/static/bro-CEMPoYum.js +0 -1
- package/web-ui/build/static/bsl-COeqiMqc.js +0 -1
- package/web-ui/build/static/c-BaaVQwFt.js +0 -1
- package/web-ui/build/static/c-BvALLiMv.js +0 -1
- package/web-ui/build/static/c-like-C4yx6s7b.js +0 -1
- package/web-ui/build/static/cal-CSxgKgNR.js +0 -1
- package/web-ui/build/static/capnproto-C9cMEmIo.js +0 -1
- package/web-ui/build/static/ceylon-Dj67Lf2T.js +0 -1
- package/web-ui/build/static/cfscript-BhALECgj.js +0 -1
- package/web-ui/build/static/chaiscript-Cg5weNRB.js +0 -1
- package/web-ui/build/static/cil-BR-JCsPu.js +0 -1
- package/web-ui/build/static/clean-xJMmqZ4X.js +0 -1
- package/web-ui/build/static/clojure-9C3tRo_T.js +0 -1
- package/web-ui/build/static/clojure-C2KNwa0h.js +0 -1
- package/web-ui/build/static/clojure-repl-B-pke3nS.js +0 -1
- package/web-ui/build/static/cmake-C0BFHpjZ.js +0 -1
- package/web-ui/build/static/cmake-DYoa_Kz_.js +0 -1
- package/web-ui/build/static/cobol-Bj_qcMsY.js +0 -1
- package/web-ui/build/static/coffeescript-C2KEz8d0.js +0 -1
- package/web-ui/build/static/coffeescript-CQsP9N_M.js +0 -1
- package/web-ui/build/static/concurnas-Ceu24KQb.js +0 -1
- package/web-ui/build/static/coq-CP7VW0bo.js +0 -1
- package/web-ui/build/static/coq-DQry0I8v.js +0 -1
- package/web-ui/build/static/cos-DAjhu7pi.js +0 -1
- package/web-ui/build/static/cpp-BwHJ0JtK.js +0 -1
- package/web-ui/build/static/cpp-Dro3stzS.js +0 -1
- package/web-ui/build/static/crmsh-Bnwknpi9.js +0 -1
- package/web-ui/build/static/crystal-B7TVeIo6.js +0 -1
- package/web-ui/build/static/crystal-Cy5JlSrW.js +0 -1
- package/web-ui/build/static/csharp-CeouYZK3.js +0 -1
- package/web-ui/build/static/csharp-Dv2oxLAS.js +0 -1
- package/web-ui/build/static/cshtml-C9IRHsFH.js +0 -1
- package/web-ui/build/static/csp-C85pVqYT.js +0 -1
- package/web-ui/build/static/csp-MJntgwIj.js +0 -1
- package/web-ui/build/static/css-DWTfQjN4.js +0 -1
- package/web-ui/build/static/css-extras-BmVbsPjr.js +0 -1
- package/web-ui/build/static/csv-zUw-JkSo.js +0 -1
- package/web-ui/build/static/cypher-DQOOp0bG.js +0 -1
- package/web-ui/build/static/d-B7Cku9c8.js +0 -1
- package/web-ui/build/static/d-Lnzvs4Wd.js +0 -1
- package/web-ui/build/static/dart-CeK_W9Mg.js +0 -1
- package/web-ui/build/static/dart-Z5nwVCn_.js +0 -1
- package/web-ui/build/static/dataweave-Bv7GTsiJ.js +0 -1
- package/web-ui/build/static/dax-CxkNT7ml.js +0 -1
- package/web-ui/build/static/delphi-BnBBHmHI.js +0 -1
- package/web-ui/build/static/dhall-DzzkunJZ.js +0 -1
- package/web-ui/build/static/diff-BKZzYJzc.js +0 -1
- package/web-ui/build/static/diff-BfTiUZV3.js +0 -1
- package/web-ui/build/static/django-BY4l8873.js +0 -1
- package/web-ui/build/static/django-NRVGlUZ_.js +0 -1
- package/web-ui/build/static/dns-Dvc8YawT.js +0 -1
- package/web-ui/build/static/dns-zone-file-CkaiOrlK.js +0 -1
- package/web-ui/build/static/docker-BQXYNHPO.js +0 -1
- package/web-ui/build/static/dockerfile-CkHfYmB1.js +0 -1
- package/web-ui/build/static/dos-Cj0YcQAg.js +0 -1
- package/web-ui/build/static/dot-zgBkKTS-.js +0 -1
- package/web-ui/build/static/dsconfig-Yy07ZSap.js +0 -1
- package/web-ui/build/static/dts-DyTWnuFT.js +0 -1
- package/web-ui/build/static/dust-CKq7f4u7.js +0 -1
- package/web-ui/build/static/ebnf-DJRrwYUt.js +0 -1
- package/web-ui/build/static/ebnf-RHbRUELR.js +0 -1
- package/web-ui/build/static/editorconfig-BPnyfBW2.js +0 -1
- package/web-ui/build/static/eiffel-yj-2JB74.js +0 -1
- package/web-ui/build/static/ejs-DitQDEAj.js +0 -1
- package/web-ui/build/static/elixir-3QGdRPiZ.js +0 -1
- package/web-ui/build/static/elixir-DjVihWJd.js +0 -1
- package/web-ui/build/static/elm-BY6TIO5U.js +0 -1
- package/web-ui/build/static/elm-CRkIBVgc.js +0 -1
- package/web-ui/build/static/erb-Djhpl6Qv.js +0 -1
- package/web-ui/build/static/erb-T-e_0q4M.js +0 -1
- package/web-ui/build/static/erlang-BHne0Sow.js +0 -1
- package/web-ui/build/static/erlang-BwFMbXMn.js +0 -1
- package/web-ui/build/static/erlang-repl-BkeLNBB1.js +0 -1
- package/web-ui/build/static/etlua-C7wAJl9b.js +0 -1
- package/web-ui/build/static/excel-DxE1g8nj.js +0 -1
- package/web-ui/build/static/excel-formula-CJfyOSIQ.js +0 -1
- package/web-ui/build/static/factor-CoKZ2w9G.js +0 -1
- package/web-ui/build/static/false-R3UgYwdZ.js +0 -1
- package/web-ui/build/static/firestore-security-rules-Na-FK95T.js +0 -1
- package/web-ui/build/static/fix-CvUjGqrP.js +0 -1
- package/web-ui/build/static/flix-DZcdobtd.js +0 -1
- package/web-ui/build/static/flow-Bs4ybDfF.js +0 -1
- package/web-ui/build/static/fortran-Bo7HQHVz.js +0 -1
- package/web-ui/build/static/fortran-C01QKAjv.js +0 -1
- package/web-ui/build/static/fsharp-Bl0db-E4.js +0 -1
- package/web-ui/build/static/fsharp-CyZIu__H.js +0 -1
- package/web-ui/build/static/ftl-CWXbnuJ8.js +0 -1
- package/web-ui/build/static/gams-BqHeBOiK.js +0 -1
- package/web-ui/build/static/gap-Dotaw9CX.js +0 -1
- package/web-ui/build/static/gauss-BT78eAPL.js +0 -1
- package/web-ui/build/static/gcode-MKCsCHbV.js +0 -1
- package/web-ui/build/static/gcode-bZIzS7dq.js +0 -1
- package/web-ui/build/static/gdscript-BfFdzROd.js +0 -1
- package/web-ui/build/static/gedcom-C-0fkvQT.js +0 -1
- package/web-ui/build/static/gherkin-Bgefs1Ac.js +0 -1
- package/web-ui/build/static/gherkin-BwLhttSG.js +0 -1
- package/web-ui/build/static/git-Cf3XNFwK.js +0 -1
- package/web-ui/build/static/glsl-BRBvgtKX.js +0 -1
- package/web-ui/build/static/glsl-Ci0Ywihb.js +0 -1
- package/web-ui/build/static/gml-BGED3ZV5.js +0 -1
- package/web-ui/build/static/gml-Bo5ybH2Z.js +0 -1
- package/web-ui/build/static/gn-Dvq3uq8q.js +0 -1
- package/web-ui/build/static/go-DEXubI7V.js +0 -1
- package/web-ui/build/static/go-DQ-rOBtr.js +0 -1
- package/web-ui/build/static/go-module-CJ0C_rZQ.js +0 -1
- package/web-ui/build/static/golo-BMZyESOG.js +0 -1
- package/web-ui/build/static/gradle-DamtVT5m.js +0 -1
- package/web-ui/build/static/graphql-BERukF58.js +0 -1
- package/web-ui/build/static/groovy-B-WmRKEQ.js +0 -1
- package/web-ui/build/static/groovy-BzgGHCpW.js +0 -1
- package/web-ui/build/static/haml-B50hpu0J.js +0 -1
- package/web-ui/build/static/haml-vZAqNnLr.js +0 -1
- package/web-ui/build/static/handlebars-ChvSiZA5.js +0 -1
- package/web-ui/build/static/handlebars-z32GTNvC.js +0 -1
- package/web-ui/build/static/haskell-BWLVCHRl.js +0 -1
- package/web-ui/build/static/haskell-CZ4HT-QV.js +0 -1
- package/web-ui/build/static/haxe-Dff2UzKb.js +0 -1
- package/web-ui/build/static/haxe-DtUMfT4Y.js +0 -1
- package/web-ui/build/static/hcl-CPdCn21C.js +0 -1
- package/web-ui/build/static/hlsl-Ddnzpafa.js +0 -1
- package/web-ui/build/static/hoon-BmzYN5g6.js +0 -1
- package/web-ui/build/static/hpkp-Cf4BtYzp.js +0 -1
- package/web-ui/build/static/hsp-CtNdizh5.js +0 -1
- package/web-ui/build/static/hsts-ChmUnrWY.js +0 -1
- package/web-ui/build/static/htmlbars-FvxUz397.js +0 -1
- package/web-ui/build/static/http-C91BqIc4.js +0 -1
- package/web-ui/build/static/http-DUkMpz6R.js +0 -1
- package/web-ui/build/static/hy-BgEorqc6.js +0 -1
- package/web-ui/build/static/ichigojam-CyJ85XqZ.js +0 -1
- package/web-ui/build/static/icon-CWVwUSUB.js +0 -1
- package/web-ui/build/static/icu-message-format-DQ5Vf-57.js +0 -1
- package/web-ui/build/static/idris-25epvnkz.js +0 -1
- package/web-ui/build/static/iecst-D_Q4A3Ao.js +0 -1
- package/web-ui/build/static/ignore-Dn3TUem-.js +0 -1
- package/web-ui/build/static/index-1GAqwN2P.js +0 -1029
- package/web-ui/build/static/index-Bbt0N_qA.css +0 -1
- package/web-ui/build/static/index-COM0znG6.js +0 -13
- package/web-ui/build/static/index-Cq1FjdFd.js +0 -1
- package/web-ui/build/static/inform7-CFrNuUCE.js +0 -1
- package/web-ui/build/static/inform7-DKEqg7Td.js +0 -1
- package/web-ui/build/static/ini-C-WeV3rA.js +0 -1
- package/web-ui/build/static/ini-DNeLlQLb.js +0 -1
- package/web-ui/build/static/io-CHx2lS-R.js +0 -1
- package/web-ui/build/static/irpf90-D4fNrYKT.js +0 -1
- package/web-ui/build/static/isbl-BwxgZUmw.js +0 -1
- package/web-ui/build/static/j-EkuSi-Ss.js +0 -1
- package/web-ui/build/static/java-BtphFsNb.js +0 -1
- package/web-ui/build/static/java-D6Ksxtks.js +0 -1
- package/web-ui/build/static/javadoc-COfrpXIF.js +0 -1
- package/web-ui/build/static/javadoclike-C0DIBgSo.js +0 -1
- package/web-ui/build/static/javascript-D9_bdns_.js +0 -1
- package/web-ui/build/static/javastacktrace-BgesTIoE.js +0 -1
- package/web-ui/build/static/jboss-cli-BCBm8RaA.js +0 -1
- package/web-ui/build/static/jexl-Bur7gjJl.js +0 -1
- package/web-ui/build/static/jolie-CG2HtqVF.js +0 -1
- package/web-ui/build/static/jq-BjcZo4Ta.js +0 -1
- package/web-ui/build/static/js-extras-DPWP-xWb.js +0 -1
- package/web-ui/build/static/js-templates-BYQFylC_.js +0 -1
- package/web-ui/build/static/jsdoc-CiOxmgl5.js +0 -1
- package/web-ui/build/static/json-C2-b3Xpo.js +0 -1
- package/web-ui/build/static/json-D7ok2MJS.js +0 -1
- package/web-ui/build/static/json5-DRNOdkus.js +0 -1
- package/web-ui/build/static/jsonp-FFJzAxUk.js +0 -1
- package/web-ui/build/static/jsstacktrace-C4ki-LaP.js +0 -1
- package/web-ui/build/static/jsx-ZxGQpUNq.js +0 -1
- package/web-ui/build/static/julia-7ooB8a4b.js +0 -1
- package/web-ui/build/static/julia-DzjCRNEr.js +0 -1
- package/web-ui/build/static/julia-repl-pceaZSLt.js +0 -1
- package/web-ui/build/static/keepalived-BQgTZddo.js +0 -1
- package/web-ui/build/static/keyman-Cqlba6tn.js +0 -1
- package/web-ui/build/static/kotlin-BygmvqBG.js +0 -1
- package/web-ui/build/static/kotlin-DrN0ycN8.js +0 -1
- package/web-ui/build/static/kumir-YhasANvI.js +0 -1
- package/web-ui/build/static/kusto-LQa6MD2B.js +0 -1
- package/web-ui/build/static/lasso-Ca3RFbcE.js +0 -1
- package/web-ui/build/static/latex-BoQj21fG.js +0 -1
- package/web-ui/build/static/latex-ZxewREOs.js +0 -1
- package/web-ui/build/static/latte-40SpSG4q.js +0 -1
- package/web-ui/build/static/ldif-CzTJxBjJ.js +0 -1
- package/web-ui/build/static/leaf-DO9LaVNe.js +0 -1
- package/web-ui/build/static/less-BoClFdvD.js +0 -1
- package/web-ui/build/static/less-C1s1U6-n.js +0 -1
- package/web-ui/build/static/lilypond-D5wHKW8A.js +0 -1
- package/web-ui/build/static/liquid-BRQzL-S2.js +0 -1
- package/web-ui/build/static/lisp-8q-QRYKi.js +0 -1
- package/web-ui/build/static/lisp-J8TPaPPb.js +0 -1
- package/web-ui/build/static/livecodeserver-Dcr3yGmD.js +0 -1
- package/web-ui/build/static/livescript-BUEQmlAe.js +0 -1
- package/web-ui/build/static/livescript-DsId63Ot.js +0 -1
- package/web-ui/build/static/llvm-B3CCzYxo.js +0 -1
- package/web-ui/build/static/llvm-kQGfyqnj.js +0 -1
- package/web-ui/build/static/log-BlA5152b.js +0 -1
- package/web-ui/build/static/lolcode-8WRAMeb2.js +0 -1
- package/web-ui/build/static/lsl-BZUMQNE2.js +0 -1
- package/web-ui/build/static/lua-C4hJ-Gql.js +0 -1
- package/web-ui/build/static/lua-RxOeZV_z.js +0 -1
- package/web-ui/build/static/magma-U9kYv2QD.js +0 -1
- package/web-ui/build/static/makefile-1Cu2rVDg.js +0 -1
- package/web-ui/build/static/makefile-mmZ8lbad.js +0 -1
- package/web-ui/build/static/markdown-CCqDOXhR.js +0 -1
- package/web-ui/build/static/markdown-CVOmqzdD.js +0 -1
- package/web-ui/build/static/markup-templating-C7eiVR0j.js +0 -1
- package/web-ui/build/static/mathematica-BbKHQ6zH.js +0 -1
- package/web-ui/build/static/matlab-BbMwJ6T0.js +0 -1
- package/web-ui/build/static/matlab-gHn5UhMb.js +0 -1
- package/web-ui/build/static/maxima-CuB3n0ri.js +0 -1
- package/web-ui/build/static/maxscript-jhOix4gn.js +0 -1
- package/web-ui/build/static/mel-Bpjqa7Ec.js +0 -1
- package/web-ui/build/static/mel-QxMxBq03.js +0 -1
- package/web-ui/build/static/mercury-C8IdDyFB.js +0 -1
- package/web-ui/build/static/mermaid-v41WDixf.js +0 -1
- package/web-ui/build/static/mipsasm-kYH27KXy.js +0 -1
- package/web-ui/build/static/mizar-BCJI9Jxa.js +0 -1
- package/web-ui/build/static/mizar-BCxP_6pj.js +0 -1
- package/web-ui/build/static/mojolicious-C7DC_CUp.js +0 -1
- package/web-ui/build/static/mongodb-DvBX00WY.js +0 -1
- package/web-ui/build/static/monkey-B7KjOZtt.js +0 -1
- package/web-ui/build/static/monkey-CFKZd6lx.js +0 -1
- package/web-ui/build/static/moonscript-44jD_uAZ.js +0 -1
- package/web-ui/build/static/moonscript-B3KahKf5.js +0 -1
- package/web-ui/build/static/n1ql-CxJOkBbD.js +0 -1
- package/web-ui/build/static/n1ql-FJFE6P7E.js +0 -1
- package/web-ui/build/static/n4js-D5jJTGdO.js +0 -1
- package/web-ui/build/static/nand2tetris-hdl-DlsCaky2.js +0 -1
- package/web-ui/build/static/naniscript-C3YsvWgN.js +0 -1
- package/web-ui/build/static/nasm-DCGKvOZq.js +0 -1
- package/web-ui/build/static/neon-nyFNinx-.js +0 -1
- package/web-ui/build/static/nevod-C5PnMzAW.js +0 -1
- package/web-ui/build/static/nginx-BUgMakda.js +0 -1
- package/web-ui/build/static/nginx-C5JBKsuz.js +0 -1
- package/web-ui/build/static/nim-BFu6fQgc.js +0 -1
- package/web-ui/build/static/nim-D0uh-nR9.js +0 -1
- package/web-ui/build/static/nix-BiOn3l1e.js +0 -1
- package/web-ui/build/static/nix-tapJszPl.js +0 -1
- package/web-ui/build/static/node-repl-BTp9CFzE.js +0 -1
- package/web-ui/build/static/nsis-B7hV5A06.js +0 -1
- package/web-ui/build/static/nsis-DLshnCv-.js +0 -1
- package/web-ui/build/static/objectivec-BKjt_sKE.js +0 -1
- package/web-ui/build/static/objectivec-KUMYgk5w.js +0 -1
- package/web-ui/build/static/ocaml-CV2nKA_A.js +0 -1
- package/web-ui/build/static/ocaml-ZyZ-dXmE.js +0 -1
- package/web-ui/build/static/opencl-igIWfc0n.js +0 -1
- package/web-ui/build/static/openqasm-ByCPmCpS.js +0 -1
- package/web-ui/build/static/openscad-Db6ypam1.js +0 -1
- package/web-ui/build/static/oxygene-CBbaQWRB.js +0 -1
- package/web-ui/build/static/oz-lEl_mXVw.js +0 -1
- package/web-ui/build/static/parigp-c2FbheBr.js +0 -1
- package/web-ui/build/static/parser-Ba6uivHf.js +0 -1
- package/web-ui/build/static/parser3-Cm5cgVSQ.js +0 -1
- package/web-ui/build/static/pascal-JgY-dd52.js +0 -1
- package/web-ui/build/static/pascaligo-BjSdyegq.js +0 -1
- package/web-ui/build/static/pcaxis-CDdxDfqJ.js +0 -1
- package/web-ui/build/static/peoplecode-BCPhsbK6.js +0 -1
- package/web-ui/build/static/perl-ClVPikLH.js +0 -1
- package/web-ui/build/static/perl-pRjXJ4uc.js +0 -1
- package/web-ui/build/static/pf-D6VrFfuf.js +0 -1
- package/web-ui/build/static/pgsql-DAv4ezCU.js +0 -1
- package/web-ui/build/static/php-Bz3Bn1G_.js +0 -1
- package/web-ui/build/static/php-extras-B8k1hZ7O.js +0 -1
- package/web-ui/build/static/php-template-DJJiMC8Q.js +0 -1
- package/web-ui/build/static/php-zCXGNRnB.js +0 -1
- package/web-ui/build/static/phpdoc-CpnPjGDk.js +0 -1
- package/web-ui/build/static/plaintext-BRkRKfKN.js +0 -1
- package/web-ui/build/static/plsql-BARhkvBo.js +0 -1
- package/web-ui/build/static/pony-guYTDEtj.js +0 -1
- package/web-ui/build/static/powerquery-DcM2Yj3O.js +0 -1
- package/web-ui/build/static/powershell-DJ8ftCxt.js +0 -1
- package/web-ui/build/static/powershell-DSRUQzqt.js +0 -1
- package/web-ui/build/static/processing-BCmW5Adu.js +0 -1
- package/web-ui/build/static/processing-DDMjYIa-.js +0 -1
- package/web-ui/build/static/profile-C9J13WXr.js +0 -1
- package/web-ui/build/static/prolog-CUyUfIUU.js +0 -1
- package/web-ui/build/static/prolog-wjvrQEy3.js +0 -1
- package/web-ui/build/static/promql-BkN3_kL1.js +0 -1
- package/web-ui/build/static/properties-B7zGUFLC.js +0 -1
- package/web-ui/build/static/properties-DHKWbrVz.js +0 -1
- package/web-ui/build/static/protobuf-CVwMi4py.js +0 -1
- package/web-ui/build/static/protobuf-CWUzVSVD.js +0 -1
- package/web-ui/build/static/psl-DdX6HMd3.js +0 -1
- package/web-ui/build/static/pug-D-Sn469u.js +0 -1
- package/web-ui/build/static/puppet-B6ZR9-D4.js +0 -1
- package/web-ui/build/static/puppet-m66LRiIo.js +0 -1
- package/web-ui/build/static/pure-7deZH-sc.js +0 -1
- package/web-ui/build/static/purebasic-DQLUcurt.js +0 -1
- package/web-ui/build/static/purebasic-DYMw9jTh.js +0 -1
- package/web-ui/build/static/purescript-DpysoAya.js +0 -1
- package/web-ui/build/static/python-D66_vufV.js +0 -1
- package/web-ui/build/static/python-DYxaIENO.js +0 -1
- package/web-ui/build/static/python-repl-DPjvQNxf.js +0 -1
- package/web-ui/build/static/q-DDHNKITB.js +0 -1
- package/web-ui/build/static/q-xV1Q9ILw.js +0 -1
- package/web-ui/build/static/qml-DSENM1u-.js +0 -1
- package/web-ui/build/static/qml-DfhbPQ-t.js +0 -1
- package/web-ui/build/static/qore-LQCffrzv.js +0 -1
- package/web-ui/build/static/qsharp-BcSf2ZGH.js +0 -1
- package/web-ui/build/static/r-Dc6GR0yQ.js +0 -1
- package/web-ui/build/static/r-vludgk3t.js +0 -1
- package/web-ui/build/static/racket-DJYIkQwh.js +0 -1
- package/web-ui/build/static/reason-D75i_ede.js +0 -1
- package/web-ui/build/static/reasonml-DhRXKjo3.js +0 -1
- package/web-ui/build/static/regex-D67iENuu.js +0 -1
- package/web-ui/build/static/rego-CJ2Eeb4g.js +0 -1
- package/web-ui/build/static/renpy-DUDNyFqb.js +0 -1
- package/web-ui/build/static/rest-Dn7SYTNt.js +0 -1
- package/web-ui/build/static/rib-BVUY5dIb.js +0 -1
- package/web-ui/build/static/rip-Bu9K3Hu9.js +0 -1
- package/web-ui/build/static/roboconf-CUzY2sLf.js +0 -1
- package/web-ui/build/static/roboconf-DBEmoD-Z.js +0 -1
- package/web-ui/build/static/robotframework-70EV7ffL.js +0 -1
- package/web-ui/build/static/routeros-KgfwmDVO.js +0 -1
- package/web-ui/build/static/rsl-D3oCnFGa.js +0 -1
- package/web-ui/build/static/ruby-Dqa0HtB4.js +0 -1
- package/web-ui/build/static/ruby-PeJYeL87.js +0 -1
- package/web-ui/build/static/ruleslanguage-vo3eM_mz.js +0 -1
- package/web-ui/build/static/rust-CwU6t4_Y.js +0 -1
- package/web-ui/build/static/rust-WXADYh9r.js +0 -1
- package/web-ui/build/static/sas-Cg6ADdDH.js +0 -1
- package/web-ui/build/static/sas-DWoEaeXv.js +0 -1
- package/web-ui/build/static/sass-DbHJHeBV.js +0 -1
- package/web-ui/build/static/scala-B6oE2QKr.js +0 -1
- package/web-ui/build/static/scala-NFQGPaYa.js +0 -1
- package/web-ui/build/static/scheme-C8Jx4oX7.js +0 -1
- package/web-ui/build/static/scheme-CUMBJaUf.js +0 -1
- package/web-ui/build/static/scilab-D1VqsdSy.js +0 -1
- package/web-ui/build/static/scss-CSH87oUD.js +0 -1
- package/web-ui/build/static/scss-GLX6NNDB.js +0 -1
- package/web-ui/build/static/shell-CbOhN21M.js +0 -1
- package/web-ui/build/static/shell-session-BQPdJJZS.js +0 -1
- package/web-ui/build/static/smali-BYbEOQX5.js +0 -1
- package/web-ui/build/static/smali-DcoYSibw.js +0 -1
- package/web-ui/build/static/smalltalk-CQkedD8N.js +0 -1
- package/web-ui/build/static/smalltalk-DihI81Cd.js +0 -1
- package/web-ui/build/static/smarty-RRvllERL.js +0 -1
- package/web-ui/build/static/sml-BJkMhBLU.js +0 -1
- package/web-ui/build/static/sml-Bm2IN0wP.js +0 -1
- package/web-ui/build/static/solidity-CsCW8kyX.js +0 -1
- package/web-ui/build/static/solution-file-B5YSxWQt.js +0 -1
- package/web-ui/build/static/soy-Dek2_YCW.js +0 -1
- package/web-ui/build/static/sparql-BeTxhWa4.js +0 -1
- package/web-ui/build/static/splunk-spl-hq6BW85c.js +0 -1
- package/web-ui/build/static/sqf-C-u4en-i.js +0 -1
- package/web-ui/build/static/sqf-DP0IhDYt.js +0 -1
- package/web-ui/build/static/sql-BzL0uonb.js +0 -1
- package/web-ui/build/static/sql-Zy6tV_us.js +0 -1
- package/web-ui/build/static/sql_more-BP2G6Vh5.js +0 -1
- package/web-ui/build/static/squirrel-C3MnMYx5.js +0 -1
- package/web-ui/build/static/stan-7iKo211G.js +0 -1
- package/web-ui/build/static/stan-C1lcIZjJ.js +0 -1
- package/web-ui/build/static/stata-DJ6GKcaw.js +0 -1
- package/web-ui/build/static/step21-Pg-uClDB.js +0 -1
- package/web-ui/build/static/stylus-DFAxYuRi.js +0 -1
- package/web-ui/build/static/stylus-DT6xc_Nv.js +0 -1
- package/web-ui/build/static/subunit-aGvGJXZZ.js +0 -1
- package/web-ui/build/static/swift-Sqmdmb4O.js +0 -1
- package/web-ui/build/static/swift-cUX-MVl4.js +0 -1
- package/web-ui/build/static/systemd-qIaU0Trg.js +0 -1
- package/web-ui/build/static/t4-cs-DtO6Bgg1.js +0 -1
- package/web-ui/build/static/t4-templating-DSSM2N5M.js +0 -1
- package/web-ui/build/static/t4-vb-tKIiE5uC.js +0 -1
- package/web-ui/build/static/taggerscript-Dt2Kgr-W.js +0 -1
- package/web-ui/build/static/tap-BMEgEMIk.js +0 -1
- package/web-ui/build/static/tap-C4TdzsNz.js +0 -1
- package/web-ui/build/static/tcl-B6k4Af9f.js +0 -1
- package/web-ui/build/static/tcl-Dq4_i5q5.js +0 -1
- package/web-ui/build/static/textile-C0uqAPk0.js +0 -1
- package/web-ui/build/static/thrift-DybQEjaA.js +0 -1
- package/web-ui/build/static/toml-DG1a2FSS.js +0 -1
- package/web-ui/build/static/tp-BwdfEEST.js +0 -1
- package/web-ui/build/static/tremor-JSTukmt-.js +0 -1
- package/web-ui/build/static/tsx-YUfsqzPf.js +0 -1
- package/web-ui/build/static/tt2-D9A_ACnF.js +0 -1
- package/web-ui/build/static/turtle-BKxwLa_-.js +0 -1
- package/web-ui/build/static/twig-BeEDK9Ri.js +0 -1
- package/web-ui/build/static/twig-TnOWwD7-.js +0 -1
- package/web-ui/build/static/typescript-BjZl8C3q.js +0 -1
- package/web-ui/build/static/typescript-qtW5Xh-j.js +0 -1
- package/web-ui/build/static/typoscript-Dj4sO7Jx.js +0 -1
- package/web-ui/build/static/unrealscript-DInimzNQ.js +0 -1
- package/web-ui/build/static/uorazor-B_9tFVKw.js +0 -1
- package/web-ui/build/static/uri-CTuMA7_k.js +0 -1
- package/web-ui/build/static/v-CvE0Ujqx.js +0 -1
- package/web-ui/build/static/vala-CLGf3xEs.js +0 -1
- package/web-ui/build/static/vala-Dm8LmEpm.js +0 -1
- package/web-ui/build/static/vbnet-Cwm2TjGP.js +0 -1
- package/web-ui/build/static/vbnet-LCd9GiMJ.js +0 -1
- package/web-ui/build/static/vbscript-DVj94_-y.js +0 -1
- package/web-ui/build/static/vbscript-html-CDHtSX-o.js +0 -1
- package/web-ui/build/static/velocity-C-OrhdDf.js +0 -1
- package/web-ui/build/static/verilog-Bh18N7TM.js +0 -1
- package/web-ui/build/static/verilog-C-YNXb8j.js +0 -1
- package/web-ui/build/static/vhdl-BFNm41_R.js +0 -1
- package/web-ui/build/static/vhdl-CyLgBDKk.js +0 -1
- package/web-ui/build/static/vim-BTafUqR0.js +0 -1
- package/web-ui/build/static/vim-Xg1pEHJe.js +0 -1
- package/web-ui/build/static/visual-basic-CDgUOlvq.js +0 -1
- package/web-ui/build/static/warpscript-1ELDmkt5.js +0 -1
- package/web-ui/build/static/wasm-C25KdQk5.js +0 -1
- package/web-ui/build/static/web-idl-CsdVYgpL.js +0 -1
- package/web-ui/build/static/wiki-4RrZuyhV.js +0 -1
- package/web-ui/build/static/wolfram-DMiRIwvp.js +0 -1
- package/web-ui/build/static/wren-Vk5PBcVB.js +0 -1
- package/web-ui/build/static/x86asm-D9TFTgye.js +0 -1
- package/web-ui/build/static/xeora-SAn_K3Ts.js +0 -1
- package/web-ui/build/static/xl-Da2Fl8D9.js +0 -1
- package/web-ui/build/static/xml-CeLm6l4V.js +0 -1
- package/web-ui/build/static/xml-doc-DypYH408.js +0 -1
- package/web-ui/build/static/xojo-CrfMiv1-.js +0 -1
- package/web-ui/build/static/xquery-8tOqVkgP.js +0 -1
- package/web-ui/build/static/xquery-CLOnNPtx.js +0 -1
- package/web-ui/build/static/yaml-CXiycPmU.js +0 -1
- package/web-ui/build/static/yaml-cIKjKW-H.js +0 -1
- package/web-ui/build/static/yang-KVshO9Ce.js +0 -1
- package/web-ui/build/static/zephir-B88JNqlj.js +0 -1
- package/web-ui/build/static/zig-C6GYIeFs.js +0 -1
package/src/core/stateManager.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
792
|
-
|
|
793
|
-
|
|
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
|
-
|
|
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
|
|
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 {
|