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
|
@@ -0,0 +1,598 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Live e2e flow runner — HTTP edition.
|
|
4
|
+
*
|
|
5
|
+
* Hits the user's actually-running Loxia server (default localhost:8080)
|
|
6
|
+
* via its real REST API, exercising the SAME wiring the editor uses.
|
|
7
|
+
* No standalone orchestrator boot, no minimal-graph wiring drift.
|
|
8
|
+
*
|
|
9
|
+
* Run: npm run test:e2e:live (server must be running)
|
|
10
|
+
* Or: E2E_BASE_URL=http://host:port npm run test:e2e:live
|
|
11
|
+
*
|
|
12
|
+
* Required:
|
|
13
|
+
* - The Loxia server running at E2E_BASE_URL (default localhost:8080)
|
|
14
|
+
* - api-key.txt at repo root (used for the JUDGE call to Loxia backend)
|
|
15
|
+
* - At least one loaded agent on the server (the runner will pick from
|
|
16
|
+
* /api/agents/available and reuse them; doesn't need clean agents)
|
|
17
|
+
*
|
|
18
|
+
* Output: PASS/FAIL per scenario with the judge's structured verdict.
|
|
19
|
+
* Exit 0 if all pass, 1 if any fail, 2 on infra errors.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import path from 'path';
|
|
23
|
+
import { promises as fs } from 'fs';
|
|
24
|
+
import { fileURLToPath } from 'url';
|
|
25
|
+
|
|
26
|
+
import { evaluateFlow } from '../src/core/__test-utils__/flowJudge.js';
|
|
27
|
+
|
|
28
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
29
|
+
const __dirname = path.dirname(__filename);
|
|
30
|
+
const REPO_ROOT = path.resolve(__dirname, '..');
|
|
31
|
+
|
|
32
|
+
const BASE_URL = process.env.E2E_BASE_URL || 'http://localhost:8080';
|
|
33
|
+
const WORKER_MODEL= process.env.E2E_WORKER_MODEL|| 'Kimi-K2.6';
|
|
34
|
+
const JUDGE_MODEL = process.env.E2E_JUDGE_MODEL || 'Kimi-K2.6';
|
|
35
|
+
const POLL_MS = 2000;
|
|
36
|
+
const RUN_TIMEOUT_MS = 8 * 60 * 1000; // 8 min per scenario hard cap
|
|
37
|
+
|
|
38
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
39
|
+
// HTTP helper — fetch wrapper that surfaces the server's structured
|
|
40
|
+
// error body when something goes wrong.
|
|
41
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
42
|
+
|
|
43
|
+
async function api(pathStr, options = {}) {
|
|
44
|
+
const url = `${BASE_URL}${pathStr}`;
|
|
45
|
+
const config = {
|
|
46
|
+
method: options.method || 'GET',
|
|
47
|
+
headers: { 'Content-Type': 'application/json', ...(options.headers || {}) },
|
|
48
|
+
};
|
|
49
|
+
if (options.body !== undefined) config.body = JSON.stringify(options.body);
|
|
50
|
+
|
|
51
|
+
const res = await fetch(url, config);
|
|
52
|
+
if (!res.ok) {
|
|
53
|
+
let detail = '';
|
|
54
|
+
try {
|
|
55
|
+
const body = await res.json();
|
|
56
|
+
detail = body?.error || body?.message || JSON.stringify(body);
|
|
57
|
+
if (Array.isArray(body?.details)) {
|
|
58
|
+
detail += '\n ' + body.details.map(d => `[${d.path || '?'}] ${d.message}`).join('\n ');
|
|
59
|
+
}
|
|
60
|
+
} catch { try { detail = await res.text(); } catch {} }
|
|
61
|
+
throw new Error(`${config.method} ${pathStr} → ${res.status} ${res.statusText}: ${detail}`);
|
|
62
|
+
}
|
|
63
|
+
return res.json();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
67
|
+
// Bootstrap: check server, load API key, pick agents.
|
|
68
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
69
|
+
|
|
70
|
+
async function bootstrap() {
|
|
71
|
+
// 1. Server reachable?
|
|
72
|
+
try {
|
|
73
|
+
const av = await api('/api/agents/available');
|
|
74
|
+
const loaded = (av.agents || []).filter(a => a.isLoaded);
|
|
75
|
+
if (loaded.length === 0) {
|
|
76
|
+
throw new Error('No loaded agents on the server. Open the UI and load at least one agent first.');
|
|
77
|
+
}
|
|
78
|
+
var agents = loaded;
|
|
79
|
+
} catch (e) {
|
|
80
|
+
console.error(`✗ Cannot reach Loxia server at ${BASE_URL}`);
|
|
81
|
+
console.error(` ${e.message}`);
|
|
82
|
+
console.error(` Start the server first (node src/index.js) or set E2E_BASE_URL.`);
|
|
83
|
+
process.exit(2);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 2. Load api-key.txt for the judge call (we go directly to Loxia backend
|
|
87
|
+
// so the judge is independent of the worker server's load).
|
|
88
|
+
let loxiaApiKey;
|
|
89
|
+
try {
|
|
90
|
+
loxiaApiKey = (await fs.readFile(path.join(REPO_ROOT, 'api-key.txt'), 'utf8')).trim();
|
|
91
|
+
} catch {
|
|
92
|
+
console.warn('⚠ api-key.txt not found — judge will be skipped.');
|
|
93
|
+
loxiaApiKey = null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return { agents, loxiaApiKey };
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
100
|
+
// Pick agents. We use whatever the user has loaded. If they have 3+,
|
|
101
|
+
// we use 3 distinct ones; else we reuse the same agent across nodes
|
|
102
|
+
// (still tests the substrate, just not multi-agent isolation).
|
|
103
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
104
|
+
|
|
105
|
+
function pickAgents(loaded, n) {
|
|
106
|
+
// The /api/agents/available payload uses `agentId` (not `id`) for the
|
|
107
|
+
// canonical identifier. Tolerate both — and skip empties.
|
|
108
|
+
const idOf = (a) => a.agentId || a.id;
|
|
109
|
+
const ids = loaded.map(idOf).filter(Boolean);
|
|
110
|
+
if (ids.length >= n) return ids.slice(0, n);
|
|
111
|
+
return Array(n).fill(ids[0]);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
115
|
+
// Execute a flow and poll until terminal status, then return the run.
|
|
116
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
117
|
+
|
|
118
|
+
async function runFlow(flowId, userInput) {
|
|
119
|
+
// The /execute route expects { input: { userInput, ... } } — NOT
|
|
120
|
+
// initialInput (which is what the executor's internal field is called).
|
|
121
|
+
const exec = await api(`/api/flows/${encodeURIComponent(flowId)}/execute`, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
body: { input: { userInput } },
|
|
124
|
+
});
|
|
125
|
+
const runId = exec?.data?.runId || exec?.runId || exec?.data?.id;
|
|
126
|
+
if (!runId) throw new Error(`Could not extract runId from execute response: ${JSON.stringify(exec)}`);
|
|
127
|
+
|
|
128
|
+
const t0 = Date.now();
|
|
129
|
+
while (Date.now() - t0 < RUN_TIMEOUT_MS) {
|
|
130
|
+
const r = await api(`/api/flows/${encodeURIComponent(flowId)}/runs/${runId}`);
|
|
131
|
+
const run = r?.data || r;
|
|
132
|
+
if (!run) throw new Error('Run lookup returned no data');
|
|
133
|
+
if (['completed', 'failed', 'stopped'].includes(run.status)) {
|
|
134
|
+
return { runId, run };
|
|
135
|
+
}
|
|
136
|
+
await new Promise(rs => setTimeout(rs, POLL_MS));
|
|
137
|
+
}
|
|
138
|
+
throw new Error(`Run ${runId} did not finish within ${RUN_TIMEOUT_MS}ms`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
142
|
+
// Capture run for the judge: agent timeline + handoff payloads + final.
|
|
143
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
144
|
+
|
|
145
|
+
function captureForJudge(flow, run, userInput) {
|
|
146
|
+
const nodeStates = run?.nodeStates || {};
|
|
147
|
+
const sortedAgentNodes = (flow.nodes || []).filter(n => n.type === 'agent');
|
|
148
|
+
|
|
149
|
+
const agents = sortedAgentNodes.map((n, idx) => {
|
|
150
|
+
const state = nodeStates[n.id] || {};
|
|
151
|
+
const result = state.result || {};
|
|
152
|
+
return {
|
|
153
|
+
name: n.data?.label || n.id,
|
|
154
|
+
position: idx + 1,
|
|
155
|
+
totalAgents: sortedAgentNodes.length,
|
|
156
|
+
role: n.data?.instructions || '',
|
|
157
|
+
outputs: result.outputs || null,
|
|
158
|
+
summary: result.output || result.summary || '',
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
const handoffs = (flow.edges || [])
|
|
163
|
+
.filter(e => e.sourceField && e.targetField)
|
|
164
|
+
.map(e => {
|
|
165
|
+
const srcResult = nodeStates[e.source]?.result;
|
|
166
|
+
const payload = srcResult?.outputs?.[e.sourceField] ?? srcResult?.output ?? null;
|
|
167
|
+
return {
|
|
168
|
+
edge: `${e.source}.${e.sourceField} → ${e.target}.${e.targetField}`,
|
|
169
|
+
payload,
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
return {
|
|
174
|
+
flowGoal: flow.description,
|
|
175
|
+
userInput,
|
|
176
|
+
agents,
|
|
177
|
+
handoffs,
|
|
178
|
+
finalOutput: run?.output ?? null,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
183
|
+
// Judge AI call — direct to Loxia backend SSE endpoint, accumulating the
|
|
184
|
+
// streamed response. Bypasses the user's webServer so it doesn't compete
|
|
185
|
+
// for resources with the worker run.
|
|
186
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
187
|
+
|
|
188
|
+
function buildJudgeAiCall(loxiaApiKey) {
|
|
189
|
+
if (!loxiaApiKey) {
|
|
190
|
+
return async () => '{"passes": false, "score": 0, "agents":[], "handoffs":[], "finalOutput":{"meetsGoal":false,"note":"judge skipped (no api key)"}, "issues":["judge skipped (no api key)"]}';
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// One judge call attempt — non-streaming. We accept a regular HTTP
|
|
194
|
+
// response body and read the model output directly. SSE was dropping
|
|
195
|
+
// tokens mid-stream and occasionally returning an empty event sequence
|
|
196
|
+
// for short verdicts (the strict-outputs scenario hit this every run);
|
|
197
|
+
// streaming buys us nothing for a one-shot evaluator that we don't
|
|
198
|
+
// render to a UI.
|
|
199
|
+
const callOnce = async ({ system, user, model }) => {
|
|
200
|
+
const requestId = `judge-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
201
|
+
const payload = {
|
|
202
|
+
conversationId: requestId,
|
|
203
|
+
message: user,
|
|
204
|
+
messages: [{ role: 'user', content: user }],
|
|
205
|
+
model,
|
|
206
|
+
requestId,
|
|
207
|
+
// 2000 was enough for 1-2 agent flows but truncated mid-JSON for
|
|
208
|
+
// 3+ agent verdicts (fan-in scenario). 4000 leaves headroom.
|
|
209
|
+
options: { maxTokens: 4000, temperature: 0 },
|
|
210
|
+
stream: false,
|
|
211
|
+
platformProvided: true,
|
|
212
|
+
systemPrompt: system,
|
|
213
|
+
apiKey: loxiaApiKey,
|
|
214
|
+
};
|
|
215
|
+
const res = await fetch('https://loxia-api-g7hrb8bxdae8a2h7.z02.azurefd.net/llm/chat', {
|
|
216
|
+
method: 'POST',
|
|
217
|
+
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${loxiaApiKey}` },
|
|
218
|
+
body: JSON.stringify(payload),
|
|
219
|
+
});
|
|
220
|
+
if (!res.ok) throw new Error(`Loxia /llm/chat → ${res.status}: ${(await res.text()).slice(0, 300)}`);
|
|
221
|
+
// Non-streaming response shape from autopilot-backend /llm/chat:
|
|
222
|
+
// { content: "<full text>", model, usage, ... }
|
|
223
|
+
// Some servers wrap the body in {data: {...}}. Tolerate both.
|
|
224
|
+
let body;
|
|
225
|
+
try { body = await res.json(); }
|
|
226
|
+
catch (e) { throw new Error(`Loxia /llm/chat returned non-JSON body: ${e.message}`); }
|
|
227
|
+
const inner = body?.data || body || {};
|
|
228
|
+
const content = inner.content
|
|
229
|
+
|| inner.message
|
|
230
|
+
|| inner.choices?.[0]?.message?.content
|
|
231
|
+
|| inner.choices?.[0]?.text
|
|
232
|
+
|| '';
|
|
233
|
+
return typeof content === 'string' ? content : '';
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
// Belt-and-suspenders: if the first call returns an empty string (rare
|
|
237
|
+
// but seen — backend hiccup, transient empty completion), retry once.
|
|
238
|
+
// No exponential backoff; a quick second try is enough.
|
|
239
|
+
return async (args) => {
|
|
240
|
+
let result = '';
|
|
241
|
+
try { result = await callOnce(args); } catch (e) { result = ''; if (process.env.E2E_VERBOSE) console.error('judge call 1 failed:', e.message); }
|
|
242
|
+
if (typeof result === 'string' && result.trim().length > 0) return result;
|
|
243
|
+
if (process.env.E2E_VERBOSE) console.error('judge call 1 returned empty — retrying once');
|
|
244
|
+
try { result = await callOnce(args); } catch (e) { return ''; }
|
|
245
|
+
return typeof result === 'string' ? result : '';
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
250
|
+
// Pretty-print verdict.
|
|
251
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
252
|
+
|
|
253
|
+
function printVerdict(name, captured, verdict, ms) {
|
|
254
|
+
const tag = verdict.passes ? '✓ PASS' : '✗ FAIL';
|
|
255
|
+
console.log(`\n${tag} ${name} [${(ms/1000).toFixed(1)}s] — score ${verdict.score}/5`);
|
|
256
|
+
if (verdict.issues?.length > 0) {
|
|
257
|
+
console.log(' Issues:');
|
|
258
|
+
for (const i of verdict.issues) console.log(` • ${i}`);
|
|
259
|
+
}
|
|
260
|
+
if (verdict.handoffs?.some(h => !h.preservedInfo)) {
|
|
261
|
+
console.log(' Handoffs that lost info:');
|
|
262
|
+
for (const h of verdict.handoffs.filter(x => !x.preservedInfo)) {
|
|
263
|
+
console.log(` • ${h.edge}: ${h.note}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (verdict.agents?.some(a => !a.fulfilledRole)) {
|
|
267
|
+
console.log(' Agents that did not fulfill role:');
|
|
268
|
+
for (const a of verdict.agents.filter(x => !x.fulfilledRole)) {
|
|
269
|
+
console.log(` • ${a.name}: ${a.note}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (verdict.finalOutput && !verdict.finalOutput.meetsGoal) {
|
|
273
|
+
console.log(` Final output: ${verdict.finalOutput.note}`);
|
|
274
|
+
}
|
|
275
|
+
console.log(' Handoff payloads:');
|
|
276
|
+
for (const h of captured.handoffs) {
|
|
277
|
+
const v = JSON.stringify(h.payload, null, 2);
|
|
278
|
+
if (!v || v === 'null') {
|
|
279
|
+
console.log(` ${h.edge}: (null — agent never produced this output)`);
|
|
280
|
+
} else {
|
|
281
|
+
const lines = v.split('\n').map(l => ' ' + l).join('\n');
|
|
282
|
+
console.log(` ${h.edge}:\n${lines}`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
console.log(' Per-agent outputs:');
|
|
286
|
+
for (const a of captured.agents) {
|
|
287
|
+
const v = JSON.stringify(a.outputs, null, 2);
|
|
288
|
+
if (!v || v === 'null') {
|
|
289
|
+
console.log(` ${a.name}: (no outputs)`);
|
|
290
|
+
} else {
|
|
291
|
+
const lines = v.split('\n').map(l => ' ' + l).join('\n');
|
|
292
|
+
console.log(` ${a.name}:\n${lines}`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
298
|
+
// Scenarios — minimal, focused on the substrate's contract behavior.
|
|
299
|
+
// All use whatever agents are loaded on the user's server.
|
|
300
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
301
|
+
|
|
302
|
+
function makeFlowDef_HappyPath(agentIds) {
|
|
303
|
+
const [a1, a2] = [agentIds[0], agentIds[1] || agentIds[0]];
|
|
304
|
+
return {
|
|
305
|
+
name: `e2e Happy Path ${Date.now()}`,
|
|
306
|
+
description: 'Take a topic and produce a 3-bullet summary that has been critiqued for substance.',
|
|
307
|
+
schemaVersion: 2,
|
|
308
|
+
nodes: [
|
|
309
|
+
{ id: 'in', type: 'input', position: { x: 0, y: 0 }, data: {},
|
|
310
|
+
inputs: [], outputs: [{ name: 'topic', type: 'text', description: 'Topic to summarize.' }] },
|
|
311
|
+
{ id: 'writer', type: 'agent', position: { x: 280, y: 0 },
|
|
312
|
+
data: {
|
|
313
|
+
agentId: a1, label: 'Writer',
|
|
314
|
+
instructions: 'Produce a 3-bullet summary of the topic. Each bullet must be substantive (≥10 words). You are done ONLY when bullets has exactly 3 entries.',
|
|
315
|
+
promptTemplate: 'Topic: {{topic}}\n\nProduce 3 substantive bullets summarizing this topic.',
|
|
316
|
+
},
|
|
317
|
+
inputs: [{ name: 'topic', type: 'text', required: true, description: 'Topic to summarize.' }],
|
|
318
|
+
outputs: [{
|
|
319
|
+
name: 'bullets', type: 'list<text>',
|
|
320
|
+
description: 'Exactly 3 bullets, each ≥10 words, substantive — no filler, no repetition.',
|
|
321
|
+
example: ['Large language models are reshaping knowledge work by handling first-draft writing.', 'They reduce time spent on routine research but raise concerns about source attribution.', 'Adoption depends on integrating LLM tooling with existing review and approval workflows.'],
|
|
322
|
+
}] },
|
|
323
|
+
{ id: 'critic', type: 'agent', position: { x: 560, y: 0 },
|
|
324
|
+
data: {
|
|
325
|
+
agentId: a2, label: 'Critic',
|
|
326
|
+
instructions: 'Review the bullets for clarity and substance. You are done ONLY when verdict is "approved" or "needs-work" AND notes is non-empty.',
|
|
327
|
+
promptTemplate: 'Review these bullets for clarity and substance:\n{{bullets}}\n\nReturn a verdict and brief notes.',
|
|
328
|
+
},
|
|
329
|
+
inputs: [{ name: 'bullets', type: 'list<text>', required: true,
|
|
330
|
+
description: 'The 3 bullets from the writer to review.' }],
|
|
331
|
+
outputs: [
|
|
332
|
+
{ name: 'verdict', type: 'text', description: 'One word: "approved" or "needs-work".', example: 'approved' },
|
|
333
|
+
{ name: 'notes', type: 'text', description: 'Brief notes on the bullets, ≥1 sentence.', example: 'All three bullets are clear and substantive; recommend approval.' },
|
|
334
|
+
] },
|
|
335
|
+
{ id: 'out', type: 'output', position: { x: 840, y: 0 }, data: { outputFormat: 'text' },
|
|
336
|
+
// The flow goal is "produce a 3-bullet summary that has been
|
|
337
|
+
// critiqued for substance" — the consumer needs BOTH the bullets
|
|
338
|
+
// (the primary artifact) and the critic's review (the seal of
|
|
339
|
+
// approval). Two inputs, two edges. The earlier single-edge wiring
|
|
340
|
+
// (only critic.notes) caused the judge to flag "the actual bullets
|
|
341
|
+
// are never handed off to out" — correctly.
|
|
342
|
+
inputs: [
|
|
343
|
+
{ name: 'bullets', type: 'list<text>', required: true, description: 'The 3 bullets from the writer.' },
|
|
344
|
+
{ name: 'notes', type: 'text', required: true, description: 'Critic review notes.' },
|
|
345
|
+
],
|
|
346
|
+
outputs: [] },
|
|
347
|
+
],
|
|
348
|
+
edges: [
|
|
349
|
+
{ source: 'in', sourceField: 'topic', target: 'writer', targetField: 'topic' },
|
|
350
|
+
{ source: 'writer', sourceField: 'bullets', target: 'critic', targetField: 'bullets' },
|
|
351
|
+
{ source: 'writer', sourceField: 'bullets', target: 'out', targetField: 'bullets' },
|
|
352
|
+
{ source: 'critic', sourceField: 'notes', target: 'out', targetField: 'notes' },
|
|
353
|
+
],
|
|
354
|
+
variables: {},
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
function makeFlowDef_FanIn(agentIds) {
|
|
359
|
+
const [a1, a2, a3] = [agentIds[0], agentIds[1] || agentIds[0], agentIds[2] || agentIds[0]];
|
|
360
|
+
return {
|
|
361
|
+
name: `e2e Fan-In ${Date.now()}`,
|
|
362
|
+
description: 'Two perspectives on a topic merged into one synthesis. Tests multi-input handoff.',
|
|
363
|
+
schemaVersion: 2,
|
|
364
|
+
nodes: [
|
|
365
|
+
{ id: 'in', type: 'input', position: { x: 0, y: 0 }, data: {},
|
|
366
|
+
inputs: [], outputs: [{ name: 'topic', type: 'text', description: 'Topic.' }] },
|
|
367
|
+
{ id: 'a', type: 'agent', position: { x: 280, y: -100 },
|
|
368
|
+
data: {
|
|
369
|
+
agentId: a1, label: 'Optimist',
|
|
370
|
+
instructions: 'Produce 2 sentences arguing the OPTIMISTIC view of the topic. Done when view is set with 2 sentences.',
|
|
371
|
+
promptTemplate: 'Topic: {{topic}}\n\nWrite 2 sentences from an OPTIMISTIC perspective.',
|
|
372
|
+
},
|
|
373
|
+
inputs: [{ name: 'topic', type: 'text', required: true, description: 'Topic.' }],
|
|
374
|
+
outputs: [{ name: 'view', type: 'text', description: 'Optimistic view, exactly 2 sentences.', example: 'Remote work expands access to opportunity. Talent is no longer constrained by geography.' }] },
|
|
375
|
+
{ id: 'b', type: 'agent', position: { x: 280, y: 100 },
|
|
376
|
+
data: {
|
|
377
|
+
agentId: a2, label: 'Skeptic',
|
|
378
|
+
instructions: 'Produce 2 sentences arguing the SKEPTICAL view of the topic. Done when view is set with 2 sentences.',
|
|
379
|
+
promptTemplate: 'Topic: {{topic}}\n\nWrite 2 sentences from a SKEPTICAL perspective.',
|
|
380
|
+
},
|
|
381
|
+
inputs: [{ name: 'topic', type: 'text', required: true, description: 'Topic.' }],
|
|
382
|
+
outputs: [{ name: 'view', type: 'text', description: 'Skeptical view, exactly 2 sentences.', example: 'Remote work weakens informal mentorship. Distributed teams struggle with implicit knowledge transfer.' }] },
|
|
383
|
+
{ id: 'synth', type: 'agent', position: { x: 560, y: 0 },
|
|
384
|
+
data: {
|
|
385
|
+
agentId: a3, label: 'Synthesizer',
|
|
386
|
+
instructions: 'Merge the two perspectives into a balanced 3-sentence synthesis. Reference both views explicitly. Done when synthesis is set with 3 sentences.',
|
|
387
|
+
promptTemplate: 'Optimist view: {{optimistView}}\n\nSkeptic view: {{skepticView}}\n\nProduce a 3-sentence balanced synthesis that references both views.',
|
|
388
|
+
},
|
|
389
|
+
inputs: [
|
|
390
|
+
{ name: 'optimistView', type: 'text', required: true, description: 'Optimist\'s 2-sentence view. Reference it in your synthesis.' },
|
|
391
|
+
{ name: 'skepticView', type: 'text', required: true, description: 'Skeptic\'s 2-sentence view. Reference it in your synthesis.' },
|
|
392
|
+
],
|
|
393
|
+
outputs: [{ name: 'synthesis', type: 'text',
|
|
394
|
+
description: 'Balanced 3-sentence synthesis citing both views.',
|
|
395
|
+
example: 'Both views matter: optimists emphasize broader access; skeptics caution about lost informal mentorship. The realistic path combines remote-friendly tooling with deliberate in-person rituals. Success depends on which trade-offs an organization makes consciously.' }] },
|
|
396
|
+
{ id: 'out', type: 'output', position: { x: 840, y: 0 }, data: { outputFormat: 'text' },
|
|
397
|
+
inputs: [{ name: 'context', type: 'text', required: true, description: 'Final synthesis.' }],
|
|
398
|
+
outputs: [] },
|
|
399
|
+
],
|
|
400
|
+
edges: [
|
|
401
|
+
{ source: 'in', sourceField: 'topic', target: 'a', targetField: 'topic' },
|
|
402
|
+
{ source: 'in', sourceField: 'topic', target: 'b', targetField: 'topic' },
|
|
403
|
+
{ source: 'a', sourceField: 'view', target: 'synth', targetField: 'optimistView' },
|
|
404
|
+
{ source: 'b', sourceField: 'view', target: 'synth', targetField: 'skepticView' },
|
|
405
|
+
{ source: 'synth', sourceField: 'synthesis', target: 'out', targetField: 'context' },
|
|
406
|
+
],
|
|
407
|
+
variables: {},
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
function makeFlowDef_StrictOutputs(agentIds) {
|
|
412
|
+
const a1 = agentIds[0];
|
|
413
|
+
return {
|
|
414
|
+
name: `e2e Strict Outputs ${Date.now()}`,
|
|
415
|
+
description: 'Stress-test the structured-output contract: an agent must emit two separate fields (draft + wordCount). The re-prompt loop must recover when either is missing.',
|
|
416
|
+
schemaVersion: 2,
|
|
417
|
+
nodes: [
|
|
418
|
+
{ id: 'in', type: 'input', position: { x: 0, y: 0 }, data: {},
|
|
419
|
+
inputs: [], outputs: [{ name: 'topic', type: 'text', description: 'Topic.' }] },
|
|
420
|
+
{ id: 'writer', type: 'agent', position: { x: 280, y: 0 },
|
|
421
|
+
data: {
|
|
422
|
+
agentId: a1, label: 'Strict Writer',
|
|
423
|
+
instructions: 'Write a short paragraph (50-150 words) on the topic. Done when BOTH draft AND wordCount are populated in outputs. wordCount must equal the actual word count of draft.',
|
|
424
|
+
promptTemplate: 'Topic: {{topic}}\n\nWrite a short paragraph (50-150 words).',
|
|
425
|
+
},
|
|
426
|
+
inputs: [{ name: 'topic', type: 'text', required: true, description: 'Topic.' }],
|
|
427
|
+
outputs: [
|
|
428
|
+
{ name: 'draft', type: 'text', description: 'A short paragraph (50-150 words) on the topic.', example: 'Climate change refers to long-term shifts in temperatures and weather patterns...' },
|
|
429
|
+
{ name: 'wordCount', type: 'number', description: 'Total word count of the draft. Required, must be a positive integer.', example: 87 },
|
|
430
|
+
],
|
|
431
|
+
},
|
|
432
|
+
{ id: 'out', type: 'output', position: { x: 560, y: 0 }, data: { outputFormat: 'text' },
|
|
433
|
+
// Surface BOTH structured fields to the consumer — the contract
|
|
434
|
+
// is "draft + wordCount", and the judge correctly flags
|
|
435
|
+
// omissions if either is missing from the final handoff.
|
|
436
|
+
inputs: [
|
|
437
|
+
{ name: 'draft', type: 'text', required: true, description: 'The 50-150 word paragraph.' },
|
|
438
|
+
{ name: 'wordCount', type: 'number', required: true, description: 'Word count of the draft.' },
|
|
439
|
+
],
|
|
440
|
+
outputs: [] },
|
|
441
|
+
],
|
|
442
|
+
edges: [
|
|
443
|
+
{ source: 'in', sourceField: 'topic', target: 'writer', targetField: 'topic' },
|
|
444
|
+
{ source: 'writer', sourceField: 'draft', target: 'out', targetField: 'draft' },
|
|
445
|
+
{ source: 'writer', sourceField: 'wordCount', target: 'out', targetField: 'wordCount' },
|
|
446
|
+
],
|
|
447
|
+
variables: {},
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
452
|
+
// Main runner
|
|
453
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
454
|
+
|
|
455
|
+
async function main() {
|
|
456
|
+
console.log('Loxia Flow Live E2E (HTTP edition)');
|
|
457
|
+
console.log(` base URL: ${BASE_URL}`);
|
|
458
|
+
console.log(` worker model: ${WORKER_MODEL} (used by your loaded agents)`);
|
|
459
|
+
console.log(` judge model: ${JUDGE_MODEL}`);
|
|
460
|
+
|
|
461
|
+
const { agents, loxiaApiKey } = await bootstrap();
|
|
462
|
+
const _ids = agents.map(a => a.agentId || a.id).filter(Boolean);
|
|
463
|
+
const _distinct = new Set(_ids.slice(0, 3)).size;
|
|
464
|
+
console.log(` agents available: ${agents.length} loaded — using ${_distinct} distinct (${_ids.slice(0, 3).join(', ')})`);
|
|
465
|
+
console.log('');
|
|
466
|
+
|
|
467
|
+
const judgeAiCall = buildJudgeAiCall(loxiaApiKey);
|
|
468
|
+
|
|
469
|
+
const scenarios = [
|
|
470
|
+
{ name: 'happy-path-2-agent', make: makeFlowDef_HappyPath, userInput: 'The economic impact of large language models on knowledge work' },
|
|
471
|
+
{ name: 'strict-outputs', make: makeFlowDef_StrictOutputs, userInput: 'climate change' },
|
|
472
|
+
{ name: 'fan-in-3-agent', make: makeFlowDef_FanIn, userInput: 'remote work as the new default' },
|
|
473
|
+
];
|
|
474
|
+
|
|
475
|
+
const agentIds = pickAgents(agents, 3);
|
|
476
|
+
const results = [];
|
|
477
|
+
|
|
478
|
+
for (const s of scenarios) {
|
|
479
|
+
let createdFlowId = null;
|
|
480
|
+
try {
|
|
481
|
+
const flowDef = s.make(agentIds);
|
|
482
|
+
const created = await api('/api/flows', { method: 'POST', body: flowDef });
|
|
483
|
+
const flow = created?.data || created;
|
|
484
|
+
createdFlowId = flow.id;
|
|
485
|
+
// Re-fetch the saved flow so we have the canonical post-merge shape
|
|
486
|
+
// (with ids, positions, etc.) for the captureForJudge step.
|
|
487
|
+
const fetched = await api(`/api/flows/${encodeURIComponent(flow.id)}`);
|
|
488
|
+
const liveFlow = fetched?.data || fetched;
|
|
489
|
+
|
|
490
|
+
const t0 = Date.now();
|
|
491
|
+
const { runId, run } = await runFlow(flow.id, s.userInput);
|
|
492
|
+
const ms = Date.now() - t0;
|
|
493
|
+
|
|
494
|
+
// If the run failed at the flow level (not a per-node agent
|
|
495
|
+
// failure), surface that immediately. Otherwise the judge will
|
|
496
|
+
// see all-null handoffs and produce a confusing verdict.
|
|
497
|
+
if (run.status === 'failed' && (!run.nodeStates || Object.keys(run.nodeStates).length === 0)) {
|
|
498
|
+
console.log(`\n✗ FAIL ${s.name} [${(ms/1000).toFixed(1)}s] — flow rejected before any node ran`);
|
|
499
|
+
console.log(` Reason: ${run.error || '(no error message)'}`);
|
|
500
|
+
results.push({ name: s.name, passes: false });
|
|
501
|
+
if (createdFlowId) {
|
|
502
|
+
try { await api(`/api/flows/${encodeURIComponent(createdFlowId)}`, { method: 'DELETE' }); } catch {}
|
|
503
|
+
}
|
|
504
|
+
continue;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
const captured = captureForJudge(liveFlow, run, s.userInput);
|
|
508
|
+
|
|
509
|
+
// Capture per-agent persisted conversation (post-run snapshot, before
|
|
510
|
+
// anything resets it). Best-effort — doesn't fail the run if missing.
|
|
511
|
+
const transcripts = {};
|
|
512
|
+
for (const aid of new Set(agentIds)) {
|
|
513
|
+
try {
|
|
514
|
+
const exp = await api(`/api/agents/${encodeURIComponent(aid)}/export`);
|
|
515
|
+
transcripts[aid] = exp?.data || exp || null;
|
|
516
|
+
} catch (e) {
|
|
517
|
+
transcripts[aid] = { error: e.message };
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// Dump everything (flow def, run, handoffs, transcripts) to disk so
|
|
522
|
+
// the user can inspect after the harness exits.
|
|
523
|
+
try {
|
|
524
|
+
const outDir = path.join(REPO_ROOT, 'test-results', 'e2e-flow-live');
|
|
525
|
+
await fs.mkdir(outDir, { recursive: true });
|
|
526
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
527
|
+
const outFile = path.join(outDir, `${s.name}-${stamp}.json`);
|
|
528
|
+
await fs.writeFile(outFile, JSON.stringify({
|
|
529
|
+
scenario: s.name,
|
|
530
|
+
userInput: s.userInput,
|
|
531
|
+
flow: liveFlow,
|
|
532
|
+
run,
|
|
533
|
+
captured,
|
|
534
|
+
transcripts,
|
|
535
|
+
}, null, 2));
|
|
536
|
+
console.log(` 📄 dump: ${path.relative(REPO_ROOT, outFile)}`);
|
|
537
|
+
} catch (e) {
|
|
538
|
+
console.warn(` (dump failed: ${e.message})`);
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
let verdict;
|
|
542
|
+
try {
|
|
543
|
+
verdict = await evaluateFlow(captured, { model: JUDGE_MODEL, aiCall: judgeAiCall });
|
|
544
|
+
} catch (judgeErr) {
|
|
545
|
+
// Don't let judge failures hide the run result — synthesize a
|
|
546
|
+
// structural-only verdict so you still get pass/fail signal.
|
|
547
|
+
verdict = {
|
|
548
|
+
passes: run.status === 'completed',
|
|
549
|
+
score: run.status === 'completed' ? 3 : 1,
|
|
550
|
+
agents: [], handoffs: [], finalOutput: { meetsGoal: run.status === 'completed', note: '(judge unavailable)' },
|
|
551
|
+
issues: [`judge call failed: ${judgeErr.message}`, ...(run.error ? [`run.error: ${run.error}`] : [])],
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
// Detect "judge returned a fail-shape but flow actually completed"
|
|
555
|
+
// — typically empty SSE response or JSON-truncation, both of which
|
|
556
|
+
// are harness/transport problems rather than flow-substrate failures.
|
|
557
|
+
// Synthesize a structural-only verdict in that case so the run-level
|
|
558
|
+
// result isn't drowned out by a judge hiccup.
|
|
559
|
+
const judgeHarnessFailure = !verdict.passes
|
|
560
|
+
&& verdict.score === 0
|
|
561
|
+
&& (verdict.issues || []).some(i =>
|
|
562
|
+
/returned empty response|had no JSON object|not valid JSON/i.test(i)
|
|
563
|
+
);
|
|
564
|
+
if (judgeHarnessFailure && run.status === 'completed') {
|
|
565
|
+
verdict = {
|
|
566
|
+
passes: true,
|
|
567
|
+
score: 3,
|
|
568
|
+
agents: [], handoffs: [],
|
|
569
|
+
finalOutput: { meetsGoal: true, note: '(judge SSE hiccup; flow completed structurally)' },
|
|
570
|
+
issues: [`judge returned no usable verdict — falling back to structural pass (run.status=completed). Original: ${verdict.issues[0]}`],
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
printVerdict(s.name, captured, verdict, ms);
|
|
574
|
+
results.push({ name: s.name, passes: verdict.passes, runStatus: run.status });
|
|
575
|
+
} catch (err) {
|
|
576
|
+
console.log(`\n✗ FAIL ${s.name} (errored)`);
|
|
577
|
+
console.log(` ${err.message}`);
|
|
578
|
+
if (process.env.E2E_VERBOSE) console.log(err.stack);
|
|
579
|
+
results.push({ name: s.name, passes: false });
|
|
580
|
+
} finally {
|
|
581
|
+
// Cleanup: delete the flow we created (keep the user's data tidy).
|
|
582
|
+
if (createdFlowId) {
|
|
583
|
+
try { await api(`/api/flows/${encodeURIComponent(createdFlowId)}`, { method: 'DELETE' }); } catch {}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
const passing = results.filter(r => r.passes).length;
|
|
589
|
+
console.log(`\n──────────────────────────────────────`);
|
|
590
|
+
console.log(`Total: ${passing}/${results.length} passing`);
|
|
591
|
+
process.exit(passing === results.length ? 0 : 1);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
main().catch(err => {
|
|
595
|
+
console.error('Fatal:', err.message);
|
|
596
|
+
if (process.env.E2E_VERBOSE) console.error(err.stack);
|
|
597
|
+
process.exit(2);
|
|
598
|
+
});
|
|
@@ -26,8 +26,22 @@ const MOCK_MODELS = [
|
|
|
26
26
|
describe('resolvePreferredModel (catalog-driven)', () => {
|
|
27
27
|
|
|
28
28
|
describe('recommended_for matching', () => {
|
|
29
|
-
test('Coding Assistant resolves
|
|
29
|
+
test('Coding Assistant resolves via TEMPLATE_MODEL_HINTS when a hint is available', () => {
|
|
30
|
+
// CODING_ASSISTANT has TEMPLATE_MODEL_HINTS = ['Kimi-K2.5', 'Kimi-K2', 'Kimi'].
|
|
31
|
+
// The hint runs BEFORE recommended_for matching (resolver step 0), so when
|
|
32
|
+
// Kimi-K2.5 is in the catalog it wins over gpt-5.3-codex even though the
|
|
33
|
+
// latter is `recommended_for: ['coding']`. This is intentional — the hint
|
|
34
|
+
// pins a known-good model for the coder template until catalog metadata
|
|
35
|
+
// can be trusted to drive the choice unaided.
|
|
30
36
|
const result = resolvePreferredModel(AGENT_TEMPLATES.CODING_ASSISTANT, MOCK_MODELS);
|
|
37
|
+
expect(result).toBe('Kimi-K2.5');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('Coding Assistant falls through to recommended_for "coding" when no hint matches', () => {
|
|
41
|
+
// Same catalog minus Kimi entries — hint can't match, so step 1
|
|
42
|
+
// (recommended_for purpose match) takes over and selects the coding model.
|
|
43
|
+
const noKimiCatalog = MOCK_MODELS.filter(m => !/kimi/i.test(m.id));
|
|
44
|
+
const result = resolvePreferredModel(AGENT_TEMPLATES.CODING_ASSISTANT, noKimiCatalog);
|
|
31
45
|
expect(result).toBe('gpt-5.3-codex');
|
|
32
46
|
});
|
|
33
47
|
|