onbuzz 4.5.0 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +311 -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 +348 -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 +265 -17
- package/src/index.js +17 -0
- package/src/interfaces/webServer.js +304 -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/__tests__/platformControlAgentTeamPermissions.test.js +200 -0
- package/src/tools/__tests__/platformControlFlow.test.js +412 -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/platformControl/permissions.js +111 -0
- package/src/tools/platformControlTool.js +222 -0
- 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/__tests__/flowEdgeIds.test.js +116 -0
- package/src/utilities/__tests__/flowPublish.test.js +196 -0
- package/src/utilities/__tests__/flowRunFilters.test.js +315 -0
- package/src/utilities/__tests__/useIsTouchDevice.detect.test.js +114 -0
- package/src/utilities/apiKeyPlaceholders.js +68 -0
- package/src/utilities/brand.js +93 -0
- package/src/utilities/flowEdgeIds.js +50 -0
- package/src/utilities/flowPublish.js +72 -0
- package/src/utilities/flowRunFilters.js +149 -0
- package/src/utilities/userDataDir.js +5 -0
- package/web-ui/build/index.html +2 -2
- package/web-ui/build/static/1c-4BRB87En.js +1 -0
- package/web-ui/build/static/abap-BXIqiAfL.js +1 -0
- package/web-ui/build/static/abnf-0gk1i0eD.js +1 -0
- package/web-ui/build/static/abnf-jcv7vN9a.js +1 -0
- package/web-ui/build/static/accesslog-bXE2aOZl.js +1 -0
- package/web-ui/build/static/actionscript-CF-bqawj.js +1 -0
- package/web-ui/build/static/actionscript-CodwLKar.js +1 -0
- package/web-ui/build/static/ada-BBEDI84F.js +1 -0
- package/web-ui/build/static/ada-Kb6JvaxP.js +1 -0
- package/web-ui/build/static/agda-UvnMXUUo.js +1 -0
- package/web-ui/build/static/al-D5QZ0ijQ.js +1 -0
- package/web-ui/build/static/angelscript-RpvZxbeT.js +1 -0
- package/web-ui/build/static/antlr4-BPyUvfii.js +1 -0
- package/web-ui/build/static/apache-CtM2pGik.js +1 -0
- package/web-ui/build/static/apacheconf-D-i9eISH.js +1 -0
- package/web-ui/build/static/apex-Dhn_SJi4.js +1 -0
- package/web-ui/build/static/apl-HWtdSaYy.js +1 -0
- package/web-ui/build/static/applescript-Br9NrmTP.js +1 -0
- package/web-ui/build/static/applescript-DLL0TuGw.js +1 -0
- package/web-ui/build/static/aql-MjCgNRUX.js +1 -0
- package/web-ui/build/static/arcade--DFvEPVv.js +1 -0
- package/web-ui/build/static/arduino-Cqw5W_fL.js +1 -0
- package/web-ui/build/static/arduino-DIDBbB7R.js +1 -0
- package/web-ui/build/static/arff-GGvbnOhc.js +1 -0
- package/web-ui/build/static/armasm-DKLRDLs1.js +1 -0
- package/web-ui/build/static/asciidoc-CN5qfm0K.js +1 -0
- package/web-ui/build/static/asciidoc-CeQEWYOj.js +1 -0
- package/web-ui/build/static/asm6502-B1l2Hc9j.js +1 -0
- package/web-ui/build/static/asmatmel-BAojNNWJ.js +1 -0
- package/web-ui/build/static/aspectj-DqZFhwdh.js +1 -0
- package/web-ui/build/static/aspnet-C0kQPqSr.js +1 -0
- package/web-ui/build/static/autohotkey-DY25td-Z.js +1 -0
- package/web-ui/build/static/autohotkey-DlqXINgk.js +1 -0
- package/web-ui/build/static/autoit-By7J2Y34.js +1 -0
- package/web-ui/build/static/autoit-nsu9sBga.js +1 -0
- package/web-ui/build/static/avisynth-DmhvVsr-.js +1 -0
- package/web-ui/build/static/avrasm-CHfBwwoQ.js +1 -0
- package/web-ui/build/static/avro-idl-BKgIWEIF.js +1 -0
- package/web-ui/build/static/awk-CpAb4d4E.js +1 -0
- package/web-ui/build/static/axapta-CM4aTfCZ.js +1 -0
- package/web-ui/build/static/bash-D1KTDlk-.js +1 -0
- package/web-ui/build/static/bash-DShkskxb.js +1 -0
- package/web-ui/build/static/basic-C4CfKvhg.js +1 -0
- package/web-ui/build/static/basic-CkQS4VwL.js +1 -0
- package/web-ui/build/static/batch-DZtrClI1.js +1 -0
- package/web-ui/build/static/bbcode-CY2FsfaO.js +1 -0
- package/web-ui/build/static/bicep-BeSEpm_3.js +1 -0
- package/web-ui/build/static/birb-huu22Mwu.js +1 -0
- package/web-ui/build/static/bison-CmbxfR57.js +1 -0
- package/web-ui/build/static/bnf-c2l_4HXN.js +1 -0
- package/web-ui/build/static/bnf-wucEDTqY.js +1 -0
- package/web-ui/build/static/brainfuck-CzWBg5U7.js +1 -0
- package/web-ui/build/static/brainfuck-I_YQ4sma.js +1 -0
- package/web-ui/build/static/brightscript-LOkD4eYW.js +1 -0
- package/web-ui/build/static/bro-CLJ7Afqo.js +1 -0
- package/web-ui/build/static/bsl-DbUgC2FQ.js +1 -0
- package/web-ui/build/static/c-C0S2D2ge.js +1 -0
- package/web-ui/build/static/c-KH25O_pL.js +1 -0
- package/web-ui/build/static/c-like-DtAFxyl_.js +1 -0
- package/web-ui/build/static/cal-uGiVJBNC.js +1 -0
- package/web-ui/build/static/capnproto-DSLchjOW.js +1 -0
- package/web-ui/build/static/ceylon-Bbxk66YL.js +1 -0
- package/web-ui/build/static/cfscript-CjDdgKbl.js +1 -0
- package/web-ui/build/static/chaiscript-CnRXaMae.js +1 -0
- package/web-ui/build/static/cil-CM9ygF3R.js +1 -0
- package/web-ui/build/static/clean-ppAH0SYy.js +1 -0
- package/web-ui/build/static/clojure-C5LVccGq.js +1 -0
- package/web-ui/build/static/clojure-DtLXiuuC.js +1 -0
- package/web-ui/build/static/clojure-repl-fSdrYuup.js +1 -0
- package/web-ui/build/static/cmake-AD1fuzSY.js +1 -0
- package/web-ui/build/static/cmake-D-o08Yta.js +1 -0
- package/web-ui/build/static/cobol-bDh1KHf9.js +1 -0
- package/web-ui/build/static/coffeescript-D8InK8kf.js +1 -0
- package/web-ui/build/static/coffeescript-MKWUOXb5.js +1 -0
- package/web-ui/build/static/concurnas-CR56nj6R.js +1 -0
- package/web-ui/build/static/coq-DDLBsBJu.js +1 -0
- package/web-ui/build/static/coq-WbhtANeW.js +1 -0
- package/web-ui/build/static/cos-Bfmre3op.js +1 -0
- package/web-ui/build/static/cpp-Cdy6A7gI.js +1 -0
- package/web-ui/build/static/cpp-De2KZejr.js +1 -0
- package/web-ui/build/static/crmsh-uf3vbKnN.js +1 -0
- package/web-ui/build/static/crystal-BHMyEVPP.js +1 -0
- package/web-ui/build/static/crystal-DXAQwftg.js +1 -0
- package/web-ui/build/static/csharp-Ci2MRG6L.js +1 -0
- package/web-ui/build/static/csharp-D8MV2a7f.js +1 -0
- package/web-ui/build/static/cshtml-kVj3v3uY.js +1 -0
- package/web-ui/build/static/csp-B83CCdVc.js +1 -0
- package/web-ui/build/static/csp-DUO7zlPh.js +1 -0
- package/web-ui/build/static/css-BWsx7mtO.js +1 -0
- package/web-ui/build/static/css-extras-oHch2Y5C.js +1 -0
- package/web-ui/build/static/csv-DIf0iNlc.js +1 -0
- package/web-ui/build/static/cypher-B1rOF_f3.js +1 -0
- package/web-ui/build/static/d-BUgLS87u.js +1 -0
- package/web-ui/build/static/d-ClM8XTCr.js +1 -0
- package/web-ui/build/static/dart-D5rVGtrb.js +1 -0
- package/web-ui/build/static/dart-Oal__k4m.js +1 -0
- package/web-ui/build/static/dataweave-B0uxnNDC.js +1 -0
- package/web-ui/build/static/dax-B9z6d1P6.js +1 -0
- package/web-ui/build/static/delphi-KMlx8q8A.js +1 -0
- package/web-ui/build/static/dhall-DLWFgSR8.js +1 -0
- package/web-ui/build/static/diff-DDMGnyhE.js +1 -0
- package/web-ui/build/static/diff-yg1oXq3U.js +1 -0
- package/web-ui/build/static/django-BDtkIu_c.js +1 -0
- package/web-ui/build/static/django-Bkn9HlyQ.js +1 -0
- package/web-ui/build/static/dns-Bx1VHfo6.js +1 -0
- package/web-ui/build/static/dns-zone-file-Bgn5zn_J.js +1 -0
- package/web-ui/build/static/docker-CTdrZJHc.js +1 -0
- package/web-ui/build/static/dockerfile-B7ziWbf_.js +1 -0
- package/web-ui/build/static/dos-cbBC5Icj.js +1 -0
- package/web-ui/build/static/dot-JXSVTLEH.js +1 -0
- package/web-ui/build/static/dsconfig-sEua2C2o.js +1 -0
- package/web-ui/build/static/dts-Zem_gT_O.js +1 -0
- package/web-ui/build/static/dust-B-dZ6-uQ.js +1 -0
- package/web-ui/build/static/ebnf-CXfeZoXF.js +1 -0
- package/web-ui/build/static/ebnf-raQs4FpT.js +1 -0
- package/web-ui/build/static/editorconfig-hp8ARbHf.js +1 -0
- package/web-ui/build/static/eiffel-tO3jaG00.js +1 -0
- package/web-ui/build/static/ejs-BGmD5Rvl.js +1 -0
- package/web-ui/build/static/elixir-CF0JDN9L.js +1 -0
- package/web-ui/build/static/elixir-CFSil_Ou.js +1 -0
- package/web-ui/build/static/elm-As6XaD-g.js +1 -0
- package/web-ui/build/static/elm-pw5GpqTZ.js +1 -0
- package/web-ui/build/static/erb-BrpCJIyN.js +1 -0
- package/web-ui/build/static/erb-D2_eJU9C.js +1 -0
- package/web-ui/build/static/erlang-5rSv6NMZ.js +1 -0
- package/web-ui/build/static/erlang-RCAxVMBd.js +1 -0
- package/web-ui/build/static/erlang-repl-BN0h_6XR.js +1 -0
- package/web-ui/build/static/etlua-BMtMnKtv.js +1 -0
- package/web-ui/build/static/excel-CRNS57iM.js +1 -0
- package/web-ui/build/static/excel-formula-BNw56R2m.js +1 -0
- package/web-ui/build/static/factor-7lsloWTf.js +1 -0
- package/web-ui/build/static/false-CQUvGnfd.js +1 -0
- package/web-ui/build/static/firestore-security-rules-WC1PabFS.js +1 -0
- package/web-ui/build/static/fix-Cs6kLeYV.js +1 -0
- package/web-ui/build/static/flix-1fdMgw2I.js +1 -0
- package/web-ui/build/static/flow-CRPduKSH.js +1 -0
- package/web-ui/build/static/fortran-C-3TUt5R.js +1 -0
- package/web-ui/build/static/fortran-CA4bbZCj.js +1 -0
- package/web-ui/build/static/fsharp-BScjCFae.js +1 -0
- package/web-ui/build/static/fsharp-BtHWuW4o.js +1 -0
- package/web-ui/build/static/ftl-Re-S2zvF.js +1 -0
- package/web-ui/build/static/gams-Cr12l-cM.js +1 -0
- package/web-ui/build/static/gap-H0O9-Zju.js +1 -0
- package/web-ui/build/static/gauss-CW8jwURx.js +1 -0
- package/web-ui/build/static/gcode-CIxfYtg9.js +1 -0
- package/web-ui/build/static/gcode-CVqRWYeB.js +1 -0
- package/web-ui/build/static/gdscript-BltZCaKl.js +1 -0
- package/web-ui/build/static/gedcom-nMT5ety_.js +1 -0
- package/web-ui/build/static/gherkin-B4M7CGOo.js +1 -0
- package/web-ui/build/static/gherkin-DumuqAQF.js +1 -0
- package/web-ui/build/static/git-BBiBlZ5H.js +1 -0
- package/web-ui/build/static/glsl-D8ckiRVo.js +1 -0
- package/web-ui/build/static/glsl-Z4VdDyPa.js +1 -0
- package/web-ui/build/static/gml-BHuSndHE.js +1 -0
- package/web-ui/build/static/gml-DZpfN_A4.js +1 -0
- package/web-ui/build/static/gn-BjpAHNh_.js +1 -0
- package/web-ui/build/static/go-BeZ9IgZB.js +1 -0
- package/web-ui/build/static/go-HEXrcgIc.js +1 -0
- package/web-ui/build/static/go-module-BGdPb7sP.js +1 -0
- package/web-ui/build/static/golo-Cr70KUbI.js +1 -0
- package/web-ui/build/static/gradle-C7MXrDnB.js +1 -0
- package/web-ui/build/static/graphql-CJK0wQjf.js +1 -0
- package/web-ui/build/static/groovy-Bwe7hkFG.js +1 -0
- package/web-ui/build/static/groovy-Dc6WDoKa.js +1 -0
- package/web-ui/build/static/haml-BSsAjltt.js +1 -0
- package/web-ui/build/static/haml-CZih7X_4.js +1 -0
- package/web-ui/build/static/handlebars-CN8hCpsy.js +1 -0
- package/web-ui/build/static/handlebars-XBLc7i13.js +1 -0
- package/web-ui/build/static/haskell-BH9WhK10.js +1 -0
- package/web-ui/build/static/haskell-Djf2J1vd.js +1 -0
- package/web-ui/build/static/haxe-BllD-W9e.js +1 -0
- package/web-ui/build/static/haxe-DY8Hyn7u.js +1 -0
- package/web-ui/build/static/hcl-CfktAP2o.js +1 -0
- package/web-ui/build/static/hlsl-B2JSOD9d.js +1 -0
- package/web-ui/build/static/hoon-BILyDobB.js +1 -0
- package/web-ui/build/static/hpkp-Bb8rXx4p.js +1 -0
- package/web-ui/build/static/hsp-BmjeJC21.js +1 -0
- package/web-ui/build/static/hsts-DJhW57Fu.js +1 -0
- package/web-ui/build/static/htmlbars-CJe_ZLjw.js +1 -0
- package/web-ui/build/static/http-D7SlABvQ.js +1 -0
- package/web-ui/build/static/http-DEUJqmEm.js +1 -0
- package/web-ui/build/static/hy-DVfsgEbr.js +1 -0
- package/web-ui/build/static/ichigojam-CPdz2bOt.js +1 -0
- package/web-ui/build/static/icon-DYK9RbU9.js +1 -0
- package/web-ui/build/static/icu-message-format-HiZB_alB.js +1 -0
- package/web-ui/build/static/idris-Clk3tJIE.js +1 -0
- package/web-ui/build/static/iecst-D7wkeksq.js +1 -0
- package/web-ui/build/static/ignore-GSm-L3jG.js +1 -0
- package/web-ui/build/static/index-BJe5td0v.js +13 -0
- package/web-ui/build/static/index-BYvljeMN.js +1 -0
- package/web-ui/build/static/index-CLelJq9j.js +1156 -0
- package/web-ui/build/static/index-f5UnFSsY.css +1 -0
- package/web-ui/build/static/inform7-D3gc0hSc.js +1 -0
- package/web-ui/build/static/inform7-DLdvZTxX.js +1 -0
- package/web-ui/build/static/ini-CVcWx1TA.js +1 -0
- package/web-ui/build/static/ini-CxYBdsvZ.js +1 -0
- package/web-ui/build/static/io-D760QF0i.js +1 -0
- package/web-ui/build/static/irpf90-DfkXdZut.js +1 -0
- package/web-ui/build/static/isbl-Bl3W-krY.js +1 -0
- package/web-ui/build/static/j-DyJj9FSc.js +1 -0
- package/web-ui/build/static/java-CLw1cH97.js +1 -0
- package/web-ui/build/static/java-vXaHBzP4.js +1 -0
- package/web-ui/build/static/javadoc-p5hIe48g.js +1 -0
- package/web-ui/build/static/javadoclike-OXi-sQ0q.js +1 -0
- package/web-ui/build/static/javascript-CTSqES8o.js +1 -0
- package/web-ui/build/static/javastacktrace-PC9-3moA.js +1 -0
- package/web-ui/build/static/jboss-cli-CxOZKDLi.js +1 -0
- package/web-ui/build/static/jexl-C4kSXhD1.js +1 -0
- package/web-ui/build/static/jolie-CntM8cWx.js +1 -0
- package/web-ui/build/static/jq-D_4bTCm0.js +1 -0
- package/web-ui/build/static/js-extras-Cx9VAZJd.js +1 -0
- package/web-ui/build/static/js-templates-BqyJUDxJ.js +1 -0
- package/web-ui/build/static/jsdoc-CNHLgAph.js +1 -0
- package/web-ui/build/static/json-BXIFrbVC.js +1 -0
- package/web-ui/build/static/json-DRUrJL_F.js +1 -0
- package/web-ui/build/static/json5-EsTrOpXr.js +1 -0
- package/web-ui/build/static/jsonp-RijEuTJY.js +1 -0
- package/web-ui/build/static/jsstacktrace-dM13uE1y.js +1 -0
- package/web-ui/build/static/jsx-Cf0j02DZ.js +1 -0
- package/web-ui/build/static/julia-BLrtj5Dj.js +1 -0
- package/web-ui/build/static/julia-D0PJgQhi.js +1 -0
- package/web-ui/build/static/julia-repl-BLnLCve4.js +1 -0
- package/web-ui/build/static/keepalived-SvzEYloD.js +1 -0
- package/web-ui/build/static/keyman-B5l2mmmE.js +1 -0
- package/web-ui/build/static/kotlin-B_6COR1e.js +1 -0
- package/web-ui/build/static/kotlin-vd1Xdz6D.js +1 -0
- package/web-ui/build/static/kumir-8mIZWgJQ.js +1 -0
- package/web-ui/build/static/kusto-CoV2oHqt.js +1 -0
- package/web-ui/build/static/lasso-BjjUNa_o.js +1 -0
- package/web-ui/build/static/latex-C9KOfuFk.js +1 -0
- package/web-ui/build/static/latex-DhLttY-I.js +1 -0
- package/web-ui/build/static/latte-CaYNaOoK.js +1 -0
- package/web-ui/build/static/ldif-DFxnpH3G.js +1 -0
- package/web-ui/build/static/leaf-DrMpC83a.js +1 -0
- package/web-ui/build/static/less-DUoYpEFn.js +1 -0
- package/web-ui/build/static/less-nh0XCcut.js +1 -0
- package/web-ui/build/static/lilypond-BlqjLr3W.js +1 -0
- package/web-ui/build/static/liquid-BVGHSG0T.js +1 -0
- package/web-ui/build/static/lisp-CEK8BtYQ.js +1 -0
- package/web-ui/build/static/lisp-D_jGHxhc.js +1 -0
- package/web-ui/build/static/livecodeserver-CFUDw_SK.js +1 -0
- package/web-ui/build/static/livescript-C5xzpiLM.js +1 -0
- package/web-ui/build/static/livescript-CKoPcK0c.js +1 -0
- package/web-ui/build/static/llvm-BBOVIeTl.js +1 -0
- package/web-ui/build/static/llvm-ioC5bCUB.js +1 -0
- package/web-ui/build/static/log-CPYTqm4T.js +1 -0
- package/web-ui/build/static/lolcode-BkT93adT.js +1 -0
- package/web-ui/build/static/lsl-M98YPNRW.js +1 -0
- package/web-ui/build/static/lua-D7Lum5n9.js +1 -0
- package/web-ui/build/static/lua-DHyr0QwE.js +1 -0
- package/web-ui/build/static/magma-BwMFjwQu.js +1 -0
- package/web-ui/build/static/makefile-BFYZ-SfG.js +1 -0
- package/web-ui/build/static/makefile-D6oyR2lD.js +1 -0
- package/web-ui/build/static/markdown-6jtg6KZm.js +1 -0
- package/web-ui/build/static/markdown-DTLtPgeP.js +1 -0
- package/web-ui/build/static/markup-templating-K8uoAIqY.js +1 -0
- package/web-ui/build/static/mathematica-cW5hOuB2.js +1 -0
- package/web-ui/build/static/matlab-CwSNWEq8.js +1 -0
- package/web-ui/build/static/matlab-MQ972BY-.js +1 -0
- package/web-ui/build/static/maxima-CMSFLri-.js +1 -0
- package/web-ui/build/static/maxscript-BzcoS2KA.js +1 -0
- package/web-ui/build/static/mel-Cd20pAs-.js +1 -0
- package/web-ui/build/static/mel-KWG5N49g.js +1 -0
- package/web-ui/build/static/mercury-eW1ljJh0.js +1 -0
- package/web-ui/build/static/mermaid-D3zeCM84.js +1 -0
- package/web-ui/build/static/mipsasm-B5g6Ndra.js +1 -0
- package/web-ui/build/static/mizar-C_nZ0Ts9.js +1 -0
- package/web-ui/build/static/mizar-CuTNEv2t.js +1 -0
- package/web-ui/build/static/mojolicious-C1Xq--lT.js +1 -0
- package/web-ui/build/static/mongodb-C_3giArw.js +1 -0
- package/web-ui/build/static/monkey-DQ1olPd-.js +1 -0
- package/web-ui/build/static/monkey-n4Tbrep7.js +1 -0
- package/web-ui/build/static/moonscript-CmnQJuIL.js +1 -0
- package/web-ui/build/static/moonscript-DXgmWjLy.js +1 -0
- package/web-ui/build/static/n1ql-531a3W-1.js +1 -0
- package/web-ui/build/static/n1ql-BYH9EvME.js +1 -0
- package/web-ui/build/static/n4js-Cy0LcM-V.js +1 -0
- package/web-ui/build/static/nand2tetris-hdl-CKOztBDD.js +1 -0
- package/web-ui/build/static/naniscript-oLFpxBGE.js +1 -0
- package/web-ui/build/static/nasm-DLPnwFkM.js +1 -0
- package/web-ui/build/static/neon-Cn03wGUR.js +1 -0
- package/web-ui/build/static/nevod-C_VRvbdf.js +1 -0
- package/web-ui/build/static/nginx-60SpLv4t.js +1 -0
- package/web-ui/build/static/nginx-DZLHid-q.js +1 -0
- package/web-ui/build/static/nim-BnrHdqGC.js +1 -0
- package/web-ui/build/static/nim-Ds3pmwtE.js +1 -0
- package/web-ui/build/static/nix-Dl-dS0w4.js +1 -0
- package/web-ui/build/static/nix-jL62FzTz.js +1 -0
- package/web-ui/build/static/node-repl-BAuDzNZd.js +1 -0
- package/web-ui/build/static/nsis-CEnFjfNr.js +1 -0
- package/web-ui/build/static/nsis-CcCz6HIu.js +1 -0
- package/web-ui/build/static/objectivec-CZXfVowS.js +1 -0
- package/web-ui/build/static/objectivec-CuaFU-Ef.js +1 -0
- package/web-ui/build/static/ocaml-BGAzfwAx.js +1 -0
- package/web-ui/build/static/ocaml-BoO1lU26.js +1 -0
- package/web-ui/build/static/opencl-DAnD5xP-.js +1 -0
- package/web-ui/build/static/openqasm-CO7gdVj9.js +1 -0
- package/web-ui/build/static/openscad-B2wMEMQR.js +1 -0
- package/web-ui/build/static/oxygene-1erv93gF.js +1 -0
- package/web-ui/build/static/oz-D3334gi7.js +1 -0
- package/web-ui/build/static/parigp-rQZTN8zi.js +1 -0
- package/web-ui/build/static/parser-B4ZSZ1ig.js +1 -0
- package/web-ui/build/static/parser3-CCCjkYLG.js +1 -0
- package/web-ui/build/static/pascal-DeC9Pvom.js +1 -0
- package/web-ui/build/static/pascaligo-CT2u6UpO.js +1 -0
- package/web-ui/build/static/pcaxis-CvlRg6t4.js +1 -0
- package/web-ui/build/static/peoplecode-BYahULz2.js +1 -0
- package/web-ui/build/static/perl-CKgvyY59.js +1 -0
- package/web-ui/build/static/perl-E7sx7Izv.js +1 -0
- package/web-ui/build/static/pf-D9wnFBt7.js +1 -0
- package/web-ui/build/static/pgsql-CrlBdRAn.js +1 -0
- package/web-ui/build/static/php-D2O-B3y7.js +1 -0
- package/web-ui/build/static/php-extras-BKqZuzgt.js +1 -0
- package/web-ui/build/static/php-nfXl9WfB.js +1 -0
- package/web-ui/build/static/php-template-Cg8ERLNQ.js +1 -0
- package/web-ui/build/static/phpdoc-Z1u90OwH.js +1 -0
- package/web-ui/build/static/plaintext-DkNVeXWx.js +1 -0
- package/web-ui/build/static/plsql-DO5fJNhS.js +1 -0
- package/web-ui/build/static/pony-DXIqq5Bk.js +1 -0
- package/web-ui/build/static/powerquery-B2ovxJZi.js +1 -0
- package/web-ui/build/static/powershell-BVeqqari.js +1 -0
- package/web-ui/build/static/powershell-CskV4qWh.js +1 -0
- package/web-ui/build/static/processing-D90SJpnq.js +1 -0
- package/web-ui/build/static/processing-DP2mf97Z.js +1 -0
- package/web-ui/build/static/profile-H6zk8v_f.js +1 -0
- package/web-ui/build/static/prolog-AUfxYiJV.js +1 -0
- package/web-ui/build/static/prolog-Dz2WdsVN.js +1 -0
- package/web-ui/build/static/promql-CloMJmMW.js +1 -0
- package/web-ui/build/static/properties-CTl3mnrP.js +1 -0
- package/web-ui/build/static/properties-D2RfteTZ.js +1 -0
- package/web-ui/build/static/protobuf-Be9oqQCu.js +1 -0
- package/web-ui/build/static/protobuf-BgG8zUnY.js +1 -0
- package/web-ui/build/static/psl-Bqx8iN9e.js +1 -0
- package/web-ui/build/static/pug-CHfFC0Wg.js +1 -0
- package/web-ui/build/static/puppet-__1ifzZS.js +1 -0
- package/web-ui/build/static/puppet-pbtRCMgd.js +1 -0
- package/web-ui/build/static/pure-B9STuf4F.js +1 -0
- package/web-ui/build/static/purebasic-7ADyn-Ce.js +1 -0
- package/web-ui/build/static/purebasic-Bc06YQcD.js +1 -0
- package/web-ui/build/static/purescript-CU-dDebr.js +1 -0
- package/web-ui/build/static/python-BEsXrEbi.js +1 -0
- package/web-ui/build/static/python-CZFrgH2X.js +1 -0
- package/web-ui/build/static/python-repl-CI9GmJce.js +1 -0
- package/web-ui/build/static/q-E7xvTGRo.js +1 -0
- package/web-ui/build/static/q-hvg9aQoY.js +1 -0
- package/web-ui/build/static/qml-DkZWcxEv.js +1 -0
- package/web-ui/build/static/qml-DpdWla8G.js +1 -0
- package/web-ui/build/static/qore-Dsm7ACR_.js +1 -0
- package/web-ui/build/static/qsharp-BBec6MJR.js +1 -0
- package/web-ui/build/static/r-CTVkq_Ky.js +1 -0
- package/web-ui/build/static/r-DHGNCupF.js +1 -0
- package/web-ui/build/static/racket-hoSh4YPx.js +1 -0
- package/web-ui/build/static/reason-CQPUIbsm.js +1 -0
- package/web-ui/build/static/reasonml-BXtFFSTZ.js +1 -0
- package/web-ui/build/static/regex-BNkF_ufb.js +1 -0
- package/web-ui/build/static/rego-BXHrjItC.js +1 -0
- package/web-ui/build/static/renpy-CBQvK_5t.js +1 -0
- package/web-ui/build/static/rest-Bf8hzmF1.js +1 -0
- package/web-ui/build/static/rib-D0a4KzlP.js +1 -0
- package/web-ui/build/static/rip-DchN4BQN.js +1 -0
- package/web-ui/build/static/roboconf-HXnyGNTm.js +1 -0
- package/web-ui/build/static/roboconf-zfK6mgmU.js +1 -0
- package/web-ui/build/static/robotframework-DnP-vXyd.js +1 -0
- package/web-ui/build/static/routeros-CDirYxZY.js +1 -0
- package/web-ui/build/static/rsl-BCK_msc-.js +1 -0
- package/web-ui/build/static/ruby--mXX6GNK.js +1 -0
- package/web-ui/build/static/ruby-BIdQYq0Y.js +1 -0
- package/web-ui/build/static/ruleslanguage-BD07s5RU.js +1 -0
- package/web-ui/build/static/rust-Bgni9V7U.js +1 -0
- package/web-ui/build/static/rust-OywmQ2ox.js +1 -0
- package/web-ui/build/static/sas-B6-82htH.js +1 -0
- package/web-ui/build/static/sas-k9XEScbR.js +1 -0
- package/web-ui/build/static/sass-BOvNBStT.js +1 -0
- package/web-ui/build/static/scala-At07fmMd.js +1 -0
- package/web-ui/build/static/scala-DUOfqSaU.js +1 -0
- package/web-ui/build/static/scheme-B87lC0bK.js +1 -0
- package/web-ui/build/static/scheme-BS7OzWRX.js +1 -0
- package/web-ui/build/static/scilab-Bmn4jjcu.js +1 -0
- package/web-ui/build/static/scss-DTeB95yE.js +1 -0
- package/web-ui/build/static/scss-xilnl6Dx.js +1 -0
- package/web-ui/build/static/shell-CKetyy4y.js +1 -0
- package/web-ui/build/static/shell-session-B6rat2c7.js +1 -0
- package/web-ui/build/static/smali-C9O9CXOD.js +1 -0
- package/web-ui/build/static/smali-CBkgbinS.js +1 -0
- package/web-ui/build/static/smalltalk-CuUjFHiz.js +1 -0
- package/web-ui/build/static/smalltalk-D0xhFL9b.js +1 -0
- package/web-ui/build/static/smarty-CY0N0d5x.js +1 -0
- package/web-ui/build/static/sml-BVAw3fjB.js +1 -0
- package/web-ui/build/static/sml-CO9XB1ax.js +1 -0
- package/web-ui/build/static/solidity-BNixD4Dx.js +1 -0
- package/web-ui/build/static/solution-file-DHyGXf2y.js +1 -0
- package/web-ui/build/static/soy-Cxgjntsl.js +1 -0
- package/web-ui/build/static/sparql-CDLqu9vy.js +1 -0
- package/web-ui/build/static/splunk-spl-Cmkl_Xmw.js +1 -0
- package/web-ui/build/static/sqf-CIGKolw3.js +1 -0
- package/web-ui/build/static/sqf-Cfp_lC6-.js +1 -0
- package/web-ui/build/static/sql-DHOGwYxe.js +1 -0
- package/web-ui/build/static/sql-QIw1Q2yi.js +1 -0
- package/web-ui/build/static/sql_more-C0b3-InT.js +1 -0
- package/web-ui/build/static/squirrel-DASToo1F.js +1 -0
- package/web-ui/build/static/stan-DHMkcFZg.js +1 -0
- package/web-ui/build/static/stan-No3nsdnQ.js +1 -0
- package/web-ui/build/static/stata-Brkzu5Nv.js +1 -0
- package/web-ui/build/static/step21-D2l5M5Ml.js +1 -0
- package/web-ui/build/static/stylus-Bx6FaZN_.js +1 -0
- package/web-ui/build/static/stylus-CVkTaPns.js +1 -0
- package/web-ui/build/static/subunit-CDrsAMuL.js +1 -0
- package/web-ui/build/static/swift-BSw_pS-l.js +1 -0
- package/web-ui/build/static/swift-BWyqwIo8.js +1 -0
- package/web-ui/build/static/systemd-BwqpYcJK.js +1 -0
- package/web-ui/build/static/t4-cs-CwsJLOxV.js +1 -0
- package/web-ui/build/static/t4-templating-BfxY01xf.js +1 -0
- package/web-ui/build/static/t4-vb-BhsKKFhp.js +1 -0
- package/web-ui/build/static/taggerscript-Bkew95or.js +1 -0
- package/web-ui/build/static/tap-DHovcHbS.js +1 -0
- package/web-ui/build/static/tap-DPl9uPo4.js +1 -0
- package/web-ui/build/static/tcl-BeozHO-f.js +1 -0
- package/web-ui/build/static/tcl-Df_8ItQH.js +1 -0
- package/web-ui/build/static/textile-B3m_f58b.js +1 -0
- package/web-ui/build/static/thrift-D20n-HpW.js +1 -0
- package/web-ui/build/static/toml-C-fTAonK.js +1 -0
- package/web-ui/build/static/tp-hGbXe5Eo.js +1 -0
- package/web-ui/build/static/tremor-BaVOtRFz.js +1 -0
- package/web-ui/build/static/tsx-ChPInNl0.js +1 -0
- package/web-ui/build/static/tt2-DAIJ8cpz.js +1 -0
- package/web-ui/build/static/turtle-B7z_y-PK.js +1 -0
- package/web-ui/build/static/twig-TUEkve6W.js +1 -0
- package/web-ui/build/static/twig-stKDItz7.js +1 -0
- package/web-ui/build/static/typescript-BPdM-QOM.js +1 -0
- package/web-ui/build/static/typescript-DjSY4MvL.js +1 -0
- package/web-ui/build/static/typoscript-BQHgQtEL.js +1 -0
- package/web-ui/build/static/unrealscript-g8yNPQQ5.js +1 -0
- package/web-ui/build/static/uorazor-CnuMiQz9.js +1 -0
- package/web-ui/build/static/uri-CfioiemU.js +1 -0
- package/web-ui/build/static/v-B69Oau14.js +1 -0
- package/web-ui/build/static/vala-C0PjlK3l.js +1 -0
- package/web-ui/build/static/vala-COgjD3gU.js +1 -0
- package/web-ui/build/static/vbnet-CklOnyuR.js +1 -0
- package/web-ui/build/static/vbnet-MxHUC5Mz.js +1 -0
- package/web-ui/build/static/vbscript-BxQnA97w.js +1 -0
- package/web-ui/build/static/vbscript-html-DOtde7dD.js +1 -0
- package/web-ui/build/static/velocity-l8B9m66X.js +1 -0
- package/web-ui/build/static/verilog-DF6dF-Vp.js +1 -0
- package/web-ui/build/static/verilog-Dgb9SDRX.js +1 -0
- package/web-ui/build/static/vhdl-0GarU_AK.js +1 -0
- package/web-ui/build/static/vhdl-BfPQnOdI.js +1 -0
- package/web-ui/build/static/vim-Likg_-II.js +1 -0
- package/web-ui/build/static/vim-k53Sj7A3.js +1 -0
- package/web-ui/build/static/visual-basic-BNVZCzlV.js +1 -0
- package/web-ui/build/static/warpscript-BkLK5iuW.js +1 -0
- package/web-ui/build/static/wasm-CQhA1ece.js +1 -0
- package/web-ui/build/static/web-idl-DmNsI0kE.js +1 -0
- package/web-ui/build/static/wiki-B3z4pmra.js +1 -0
- package/web-ui/build/static/wolfram-Dsf21d_g.js +1 -0
- package/web-ui/build/static/wren-BZXZlzrL.js +1 -0
- package/web-ui/build/static/x86asm-DpWGZhJU.js +1 -0
- package/web-ui/build/static/xeora-8xPZN4DH.js +1 -0
- package/web-ui/build/static/xl-XkdWYMGl.js +1 -0
- package/web-ui/build/static/xml-BBdROEWt.js +1 -0
- package/web-ui/build/static/xml-doc-Cjs4OpTe.js +1 -0
- package/web-ui/build/static/xojo-nCen1FPx.js +1 -0
- package/web-ui/build/static/xquery-CBFkAxo1.js +1 -0
- package/web-ui/build/static/xquery-Dwsc1weX.js +1 -0
- package/web-ui/build/static/yaml-DzSAh6jl.js +1 -0
- package/web-ui/build/static/yaml-Lg8gnEUU.js +1 -0
- package/web-ui/build/static/yang-Bd-v2b0k.js +1 -0
- package/web-ui/build/static/zephir-wbJOizIa.js +1 -0
- package/web-ui/build/static/zig-Cz384XjE.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
|
@@ -36,6 +36,10 @@ import {
|
|
|
36
36
|
isTeamAccessDisabled,
|
|
37
37
|
checkTeamAccess,
|
|
38
38
|
filterAccessibleTeams,
|
|
39
|
+
FLOW_ACCESS_LEVELS,
|
|
40
|
+
getFlowAccessLevel,
|
|
41
|
+
getMaxFlowsCreated,
|
|
42
|
+
checkFlowMutationAccess,
|
|
39
43
|
} from './platformControl/permissions.js';
|
|
40
44
|
import { isProtectedFromCaller, makeAgentLookup } from './platformControl/ancestry.js';
|
|
41
45
|
import { cascadeDeleteAgent, cascadeDeleteTeam } from './platformControl/cascadeService.js';
|
|
@@ -68,6 +72,14 @@ const SUPPORTED_ACTIONS = [
|
|
|
68
72
|
'delete-team',
|
|
69
73
|
'add-team-member',
|
|
70
74
|
'remove-team-member',
|
|
75
|
+
// Flow CRUD + execution. Permission key: `flows`. Mirrors agents.
|
|
76
|
+
'list-flows',
|
|
77
|
+
'get-flow',
|
|
78
|
+
'create-flow',
|
|
79
|
+
'update-flow',
|
|
80
|
+
'delete-flow',
|
|
81
|
+
'execute-flow',
|
|
82
|
+
'dry-run-flow',
|
|
71
83
|
];
|
|
72
84
|
|
|
73
85
|
/**
|
|
@@ -106,6 +118,7 @@ class PlatformControlTool extends BaseTool {
|
|
|
106
118
|
/** @type {object|null} */ this.agentPool = null;
|
|
107
119
|
/** @type {object|null} */ this.stateManager = null;
|
|
108
120
|
/** @type {object|null} */ this.memoryService = null;
|
|
121
|
+
/** @type {object|null} */ this.flowExecutor = null;
|
|
109
122
|
}
|
|
110
123
|
|
|
111
124
|
/** Injected from src/index.js after ScheduleService is initialized. */
|
|
@@ -132,6 +145,12 @@ class PlatformControlTool extends BaseTool {
|
|
|
132
145
|
this.logger?.info?.(`[platformcontrol] MemoryService ${memoryService ? 'attached' : 'detached'}`);
|
|
133
146
|
}
|
|
134
147
|
|
|
148
|
+
/** Injected — needed for execute-flow / dry-run-flow actions. */
|
|
149
|
+
setFlowExecutor(flowExecutor) {
|
|
150
|
+
this.flowExecutor = flowExecutor;
|
|
151
|
+
this.logger?.info?.(`[platformcontrol] FlowExecutor ${flowExecutor ? 'attached' : 'detached'}`);
|
|
152
|
+
}
|
|
153
|
+
|
|
135
154
|
getDescription() {
|
|
136
155
|
return `
|
|
137
156
|
Platform Control Tool: control Loxia platform features (scheduled tasks today; more later).
|
|
@@ -178,6 +197,20 @@ ACTIONS — teams (per-agent multi-select scope: member / ownedByMe / all; defau
|
|
|
178
197
|
add-team-member { teamId, agentId } — add an agent to a team. agentId='self' adds caller.
|
|
179
198
|
remove-team-member { teamId, agentId } — remove an agent. agentId='self' = leave the team.
|
|
180
199
|
|
|
200
|
+
ACTIONS — flows (per-agent permission: 'disabled' | 'self-created' | 'all'; default 'disabled'):
|
|
201
|
+
list-flows — list all flows reachable in your scope (read is unrestricted at any non-disabled level)
|
|
202
|
+
get-flow { flowId } — fetch a flow's full definition (nodes + edges + variables)
|
|
203
|
+
create-flow { name, description?, nodes, edges?, variables? }
|
|
204
|
+
— create a new flow. Definition must pass schema validation.
|
|
205
|
+
createdBy is set to YOU automatically.
|
|
206
|
+
Per-creator quota (maxFlowsCreated, default unlimited) applies.
|
|
207
|
+
update-flow { flowId, ...fields } — patch a flow you have permission to mutate.
|
|
208
|
+
The full re-validated definition is required when changing nodes/edges.
|
|
209
|
+
delete-flow { flowId } — cascade-delete: run history + checkpoints + version snapshots.
|
|
210
|
+
execute-flow { flowId, input? } — kick off a run. Returns runId for polling.
|
|
211
|
+
dry-run-flow { flowId } OR { flow } — lint-only check without execution; surfaces structural issues
|
|
212
|
+
(orphaned nodes, missing required fields, etc.) before live runs.
|
|
213
|
+
|
|
181
214
|
list-capabilities — what permission level + scope this agent has
|
|
182
215
|
|
|
183
216
|
EXAMPLES:
|
|
@@ -274,6 +307,14 @@ NOTES:
|
|
|
274
307
|
case 'delete-team': return await this._deleteTeam(cfg, callerAgentId, params);
|
|
275
308
|
case 'add-team-member': return await this._addTeamMember(cfg, callerAgentId, params);
|
|
276
309
|
case 'remove-team-member': return await this._removeTeamMember(cfg, callerAgentId, params);
|
|
310
|
+
// Flow CRUD + execution
|
|
311
|
+
case 'list-flows': return await this._listFlows(cfg, callerAgentId);
|
|
312
|
+
case 'get-flow': return await this._getFlow(cfg, callerAgentId, params);
|
|
313
|
+
case 'create-flow': return await this._createFlow(cfg, callerAgentId, params);
|
|
314
|
+
case 'update-flow': return await this._updateFlow(cfg, callerAgentId, params);
|
|
315
|
+
case 'delete-flow': return await this._deleteFlow(cfg, callerAgentId, params);
|
|
316
|
+
case 'execute-flow': return await this._executeFlow(cfg, callerAgentId, params);
|
|
317
|
+
case 'dry-run-flow': return await this._dryRunFlow(cfg, callerAgentId, params);
|
|
277
318
|
default:
|
|
278
319
|
return {
|
|
279
320
|
success: false,
|
|
@@ -326,6 +367,20 @@ NOTES:
|
|
|
326
367
|
'Leaving a team you\'re a member of is allowed.',
|
|
327
368
|
],
|
|
328
369
|
},
|
|
370
|
+
flows: {
|
|
371
|
+
level: getFlowAccessLevel(fullCfg),
|
|
372
|
+
maxFlowsCreated: getMaxFlowsCreated(fullCfg),
|
|
373
|
+
canList: getFlowAccessLevel(fullCfg) !== FLOW_ACCESS_LEVELS.DISABLED,
|
|
374
|
+
canCreate: getFlowAccessLevel(fullCfg) !== FLOW_ACCESS_LEVELS.DISABLED,
|
|
375
|
+
canMutateSelfCreated: getFlowAccessLevel(fullCfg) !== FLOW_ACCESS_LEVELS.DISABLED,
|
|
376
|
+
canMutateAll: getFlowAccessLevel(fullCfg) === FLOW_ACCESS_LEVELS.ALL,
|
|
377
|
+
notes: [
|
|
378
|
+
'Permission key: flows. Default level is "disabled".',
|
|
379
|
+
'Flow definitions are validated against the v2 schema before save — invalid flows are rejected with detailed errors.',
|
|
380
|
+
'delete-flow cascades through run history, checkpoints, and version snapshots.',
|
|
381
|
+
'execute-flow respects existing flow permission levels — at "self-created" level you can only run flows you created.',
|
|
382
|
+
],
|
|
383
|
+
},
|
|
329
384
|
},
|
|
330
385
|
};
|
|
331
386
|
}
|
|
@@ -848,6 +903,173 @@ NOTES:
|
|
|
848
903
|
const team = await this.stateManager.removeAgentFromTeam(params.teamId, agentId);
|
|
849
904
|
return { success: true, action: 'remove-team-member', teamId: params.teamId, agentId, team };
|
|
850
905
|
}
|
|
906
|
+
|
|
907
|
+
// ─── Flow CRUD + execution ─────────────────────────────────────────
|
|
908
|
+
//
|
|
909
|
+
// Permission key: `flows`. Default 'disabled'. Same shape as agents:
|
|
910
|
+
// 'self-created' = only flows you authored, 'all' = admin scope.
|
|
911
|
+
// Read endpoints (list/get) are unrestricted at any non-disabled
|
|
912
|
+
// level so an agent can browse what's available before deciding which
|
|
913
|
+
// to run; mutations (create/update/delete/execute/dry-run) all go
|
|
914
|
+
// through `checkFlowMutationAccess`.
|
|
915
|
+
|
|
916
|
+
/** Resolve the project dir the same way every other path here does. */
|
|
917
|
+
_flowProjectDir() {
|
|
918
|
+
return this.stateManager?.config?.project?.directory
|
|
919
|
+
|| this.stateManager?.config?.projectDir
|
|
920
|
+
|| process.cwd();
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
async _listFlows(cfg, callerAgentId) {
|
|
924
|
+
const level = getFlowAccessLevel(cfg);
|
|
925
|
+
if (level === FLOW_ACCESS_LEVELS.DISABLED) {
|
|
926
|
+
return { success: false, disabled: true, error: 'Flow management is disabled for this caller.' };
|
|
927
|
+
}
|
|
928
|
+
if (!this.stateManager) {
|
|
929
|
+
return { success: false, error: 'StateManager not available.' };
|
|
930
|
+
}
|
|
931
|
+
const all = await this.stateManager.getAllFlows(this._flowProjectDir());
|
|
932
|
+
// List is unrestricted at any non-disabled level — agents can see
|
|
933
|
+
// what they could run / what the platform offers. Mutability is
|
|
934
|
+
// surfaced per-row so the LLM knows what it can act on.
|
|
935
|
+
const list = (all || []).map(f => ({
|
|
936
|
+
id: f.id,
|
|
937
|
+
name: f.name,
|
|
938
|
+
description: f.description || '',
|
|
939
|
+
version: f.version,
|
|
940
|
+
createdBy: f.createdBy || null,
|
|
941
|
+
nodeCount: Array.isArray(f.nodes) ? f.nodes.length : 0,
|
|
942
|
+
mutable: checkFlowMutationAccess(level, callerAgentId, f).allow,
|
|
943
|
+
}));
|
|
944
|
+
return { success: true, action: 'list-flows', count: list.length, flows: list, scope: level };
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
async _getFlow(cfg, callerAgentId, params) {
|
|
948
|
+
const level = getFlowAccessLevel(cfg);
|
|
949
|
+
if (level === FLOW_ACCESS_LEVELS.DISABLED) {
|
|
950
|
+
return { success: false, disabled: true, error: 'Flow management is disabled for this caller.' };
|
|
951
|
+
}
|
|
952
|
+
if (!params?.flowId) return { success: false, error: 'flowId is required' };
|
|
953
|
+
const flow = await this.stateManager.getFlow(params.flowId, this._flowProjectDir());
|
|
954
|
+
if (!flow) return { success: false, error: `Flow not found: ${params.flowId}` };
|
|
955
|
+
return {
|
|
956
|
+
success: true, action: 'get-flow', flow,
|
|
957
|
+
mutable: checkFlowMutationAccess(level, callerAgentId, flow).allow,
|
|
958
|
+
};
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
async _createFlow(cfg, callerAgentId, params) {
|
|
962
|
+
const level = getFlowAccessLevel(cfg);
|
|
963
|
+
if (level === FLOW_ACCESS_LEVELS.DISABLED) {
|
|
964
|
+
return { success: false, disabled: true, error: 'Flow management is disabled for this caller.' };
|
|
965
|
+
}
|
|
966
|
+
if (!params?.name || typeof params.name !== 'string') {
|
|
967
|
+
return { success: false, error: 'name is required' };
|
|
968
|
+
}
|
|
969
|
+
if (!Array.isArray(params.nodes) || params.nodes.length === 0) {
|
|
970
|
+
return { success: false, error: 'nodes array is required (must have at least one node)' };
|
|
971
|
+
}
|
|
972
|
+
// Quota enforcement — count flows the caller has authored so far.
|
|
973
|
+
const max = getMaxFlowsCreated(cfg);
|
|
974
|
+
if (max !== null) {
|
|
975
|
+
const owned = (await this.stateManager.getAllFlows(this._flowProjectDir()))
|
|
976
|
+
.filter(f => f.createdBy === callerAgentId);
|
|
977
|
+
if (owned.length >= max) {
|
|
978
|
+
return {
|
|
979
|
+
success: false,
|
|
980
|
+
error: `maxFlowsCreated quota reached: you have created ${owned.length} of ${max} allowed flows.`,
|
|
981
|
+
};
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
// Schema validation runs inside stateManager.createFlow already
|
|
985
|
+
// (via the route layer); we additionally call validate here so an
|
|
986
|
+
// invalid create returns a clean structured error rather than going
|
|
987
|
+
// through the route. Defensive — duplicate guard, no harm.
|
|
988
|
+
const created = await this.stateManager.createFlow({
|
|
989
|
+
name: params.name,
|
|
990
|
+
description: params.description || '',
|
|
991
|
+
nodes: params.nodes,
|
|
992
|
+
edges: params.edges || [],
|
|
993
|
+
variables: params.variables || {},
|
|
994
|
+
// Stamp the caller as the author so self-created scope can find it.
|
|
995
|
+
createdBy: callerAgentId,
|
|
996
|
+
}, this._flowProjectDir());
|
|
997
|
+
return { success: true, action: 'create-flow', flow: created };
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
async _updateFlow(cfg, callerAgentId, params) {
|
|
1001
|
+
const level = getFlowAccessLevel(cfg);
|
|
1002
|
+
if (level === FLOW_ACCESS_LEVELS.DISABLED) {
|
|
1003
|
+
return { success: false, disabled: true, error: 'Flow management is disabled for this caller.' };
|
|
1004
|
+
}
|
|
1005
|
+
if (!params?.flowId) return { success: false, error: 'flowId is required' };
|
|
1006
|
+
const target = await this.stateManager.getFlow(params.flowId, this._flowProjectDir());
|
|
1007
|
+
if (!target) return { success: false, error: `Flow not found: ${params.flowId}` };
|
|
1008
|
+
const access = checkFlowMutationAccess(level, callerAgentId, target);
|
|
1009
|
+
if (!access.allow) return { success: false, error: access.reason };
|
|
1010
|
+
// Strip identity-level fields the caller shouldn't be able to spoof.
|
|
1011
|
+
const { id: _id, createdBy: _cb, version: _v, ...patch } = params;
|
|
1012
|
+
const updated = await this.stateManager.updateFlow(params.flowId, patch, this._flowProjectDir());
|
|
1013
|
+
return { success: true, action: 'update-flow', flow: updated };
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
async _deleteFlow(cfg, callerAgentId, params) {
|
|
1017
|
+
const level = getFlowAccessLevel(cfg);
|
|
1018
|
+
if (level === FLOW_ACCESS_LEVELS.DISABLED) {
|
|
1019
|
+
return { success: false, disabled: true, error: 'Flow management is disabled for this caller.' };
|
|
1020
|
+
}
|
|
1021
|
+
if (!params?.flowId) return { success: false, error: 'flowId is required' };
|
|
1022
|
+
const target = await this.stateManager.getFlow(params.flowId, this._flowProjectDir());
|
|
1023
|
+
if (!target) return { success: false, error: `Flow not found: ${params.flowId}` };
|
|
1024
|
+
const access = checkFlowMutationAccess(level, callerAgentId, target);
|
|
1025
|
+
if (!access.allow) return { success: false, error: access.reason };
|
|
1026
|
+
await this.stateManager.deleteFlow(params.flowId, this._flowProjectDir());
|
|
1027
|
+
return { success: true, action: 'delete-flow', flowId: params.flowId };
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
async _executeFlow(cfg, callerAgentId, params) {
|
|
1031
|
+
const level = getFlowAccessLevel(cfg);
|
|
1032
|
+
if (level === FLOW_ACCESS_LEVELS.DISABLED) {
|
|
1033
|
+
return { success: false, disabled: true, error: 'Flow management is disabled for this caller.' };
|
|
1034
|
+
}
|
|
1035
|
+
if (!params?.flowId) return { success: false, error: 'flowId is required' };
|
|
1036
|
+
if (!this.flowExecutor) return { success: false, error: 'FlowExecutor not available on this server.' };
|
|
1037
|
+
const target = await this.stateManager.getFlow(params.flowId, this._flowProjectDir());
|
|
1038
|
+
if (!target) return { success: false, error: `Flow not found: ${params.flowId}` };
|
|
1039
|
+
// Execute counts as a mutation (it consumes credits + writes run history).
|
|
1040
|
+
const access = checkFlowMutationAccess(level, callerAgentId, target);
|
|
1041
|
+
if (!access.allow) return { success: false, error: access.reason };
|
|
1042
|
+
const run = await this.flowExecutor.executeFlow(params.flowId, params.input || {}, {
|
|
1043
|
+
projectDir: this._flowProjectDir(),
|
|
1044
|
+
// Tag the run with the agent that triggered it so audit trails
|
|
1045
|
+
// attribute correctly when an agent kicks a flow off via the tool.
|
|
1046
|
+
triggeredBy: { kind: 'agent', agentId: callerAgentId },
|
|
1047
|
+
});
|
|
1048
|
+
return { success: true, action: 'execute-flow', runId: run?.runId || run?.id || null, status: run?.status || 'queued' };
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
async _dryRunFlow(cfg, callerAgentId, params) {
|
|
1052
|
+
const level = getFlowAccessLevel(cfg);
|
|
1053
|
+
if (level === FLOW_ACCESS_LEVELS.DISABLED) {
|
|
1054
|
+
return { success: false, disabled: true, error: 'Flow management is disabled for this caller.' };
|
|
1055
|
+
}
|
|
1056
|
+
// Dry-run accepts EITHER an existing flowId OR an inline flow def
|
|
1057
|
+
// (so an agent can lint a draft before saving).
|
|
1058
|
+
let flow;
|
|
1059
|
+
if (params?.flowId) {
|
|
1060
|
+
flow = await this.stateManager.getFlow(params.flowId, this._flowProjectDir());
|
|
1061
|
+
if (!flow) return { success: false, error: `Flow not found: ${params.flowId}` };
|
|
1062
|
+
} else if (params?.flow && typeof params.flow === 'object') {
|
|
1063
|
+
flow = params.flow;
|
|
1064
|
+
} else {
|
|
1065
|
+
return { success: false, error: 'Pass either { flowId } or { flow: {...} }' };
|
|
1066
|
+
}
|
|
1067
|
+
if (!this.flowExecutor || typeof this.flowExecutor.dryRun !== 'function') {
|
|
1068
|
+
return { success: false, error: 'FlowExecutor.dryRun not available on this server.' };
|
|
1069
|
+
}
|
|
1070
|
+
const report = await this.flowExecutor.dryRun(flow);
|
|
1071
|
+
return { success: true, action: 'dry-run-flow', report };
|
|
1072
|
+
}
|
|
851
1073
|
}
|
|
852
1074
|
|
|
853
1075
|
export default PlatformControlTool;
|
package/src/tools/videoTool.js
CHANGED
|
@@ -10,34 +10,40 @@ import { BaseTool } from './baseTool.js';
|
|
|
10
10
|
import { getGalleryService } from '../services/galleryService.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* Configuration constants for video generation
|
|
14
|
-
*
|
|
13
|
+
* Configuration constants for video generation.
|
|
14
|
+
*
|
|
15
|
+
* Per-model limits (allowed resolutions, allowed durations, whether
|
|
16
|
+
* variants are supported) are NOT hardcoded here — they live in the
|
|
17
|
+
* model catalog (`video_config` block on each video-generation row) and
|
|
18
|
+
* are enforced authoritatively by the backend route. The CLI sends the
|
|
19
|
+
* request and surfaces the backend's 400 verbatim if the inputs aren't
|
|
20
|
+
* compatible with the chosen model. This keeps the CLI provider-agnostic
|
|
21
|
+
* (Sora 1, Sora 2, future video models all just work) and avoids
|
|
22
|
+
* silently-stale validation tables here.
|
|
23
|
+
*
|
|
24
|
+
* The constants below are CLI-side controls only (queue/concurrency/
|
|
25
|
+
* polling/temp file lifetime/timeout). No model-specific values.
|
|
15
26
|
*/
|
|
16
27
|
const VIDEO_CONFIG = {
|
|
17
|
-
DEFAULT_MODEL: null,
|
|
18
|
-
DEFAULT_WIDTH:
|
|
19
|
-
DEFAULT_HEIGHT:
|
|
20
|
-
DEFAULT_DURATION:
|
|
21
|
-
DEFAULT_VARIANTS: 1,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
],
|
|
31
|
-
MIN_DURATION: 1,
|
|
32
|
-
MAX_DURATION: 25, // seconds (Sora 2 supports up to 25s)
|
|
33
|
-
MAX_VARIANTS: 4,
|
|
28
|
+
DEFAULT_MODEL: null, // resolved dynamically by aiService
|
|
29
|
+
DEFAULT_WIDTH: 1280, // sensible default; any video model in the
|
|
30
|
+
DEFAULT_HEIGHT: 720, // catalog with `1280x720` accepts these
|
|
31
|
+
DEFAULT_DURATION: 4, // Sora 2's smallest unit; safe across providers
|
|
32
|
+
DEFAULT_VARIANTS: 1, // single video per job (Sora 2; Sora 1 supported up to 4)
|
|
33
|
+
MAX_PROMPT_LENGTH: 4000,
|
|
34
|
+
// Hard CLI safety bounds — let the backend/catalog be authoritative on
|
|
35
|
+
// *which specific values* are allowed for the chosen model, but reject
|
|
36
|
+
// obviously-bogus inputs locally so the user gets immediate feedback.
|
|
37
|
+
ABSOLUTE_MIN_DURATION: 1,
|
|
38
|
+
ABSOLUTE_MAX_DURATION: 60,
|
|
39
|
+
ABSOLUTE_MAX_VARIANTS: 8,
|
|
40
|
+
// Queue + scheduler controls (CLI-side only).
|
|
34
41
|
MAX_CONCURRENT: 2,
|
|
35
42
|
QUEUE_LIMIT: 5,
|
|
36
|
-
POLL_INTERVAL: 5000,
|
|
37
|
-
MAX_POLL_TIME: 600000,
|
|
38
|
-
TEMP_CLEANUP_MS: 86400000,
|
|
39
|
-
|
|
40
|
-
DOWNLOAD_TIMEOUT: 300000 // 5 minutes for video download
|
|
43
|
+
POLL_INTERVAL: 5000, // ms between status checks
|
|
44
|
+
MAX_POLL_TIME: 600000, // 10 minutes max wait per job
|
|
45
|
+
TEMP_CLEANUP_MS: 86400000, // 24 h (Sora 2 expires content after 24 h anyway)
|
|
46
|
+
DOWNLOAD_TIMEOUT: 300000 // 5 minutes for video download
|
|
41
47
|
};
|
|
42
48
|
|
|
43
49
|
/**
|
|
@@ -118,8 +124,12 @@ export class VideoTool extends BaseTool {
|
|
|
118
124
|
active: Array.from(this.activeJobs.values()).map(summarize),
|
|
119
125
|
completed: Array.from(this.completedJobs.values()).map(summarize),
|
|
120
126
|
limits: {
|
|
121
|
-
|
|
122
|
-
|
|
127
|
+
// Was reading the non-existent VIDEO_CONFIG.CONCURRENCY_LIMIT and
|
|
128
|
+
// falling through to `activeJobs.size + queue.length`, which is
|
|
129
|
+
// 0 when idle and produced a misleading `"concurrency": 0` in the
|
|
130
|
+
// /api/videos/jobs snapshot (the real cap is MAX_CONCURRENT=2).
|
|
131
|
+
concurrency: VIDEO_CONFIG?.MAX_CONCURRENT ?? null,
|
|
132
|
+
queue: VIDEO_CONFIG?.QUEUE_LIMIT ?? null,
|
|
123
133
|
},
|
|
124
134
|
};
|
|
125
135
|
}
|
|
@@ -182,14 +192,14 @@ export class VideoTool extends BaseTool {
|
|
|
182
192
|
* @returns {string} Formatted tool description
|
|
183
193
|
*/
|
|
184
194
|
getDescription() {
|
|
185
|
-
return `Tool: Video Generator
|
|
195
|
+
return `Tool: Video Generator — generate videos from text using the platform's video model.
|
|
186
196
|
|
|
187
|
-
**Purpose:** Generate videos from text descriptions
|
|
197
|
+
**Purpose:** Generate short videos from text descriptions. Videos are saved to disk and made available in chat. The active video model is resolved automatically from the model catalog (currently Sora 2 on this deployment); model-specific limits like allowed resolutions and durations come from the catalog and are enforced by the backend.
|
|
188
198
|
|
|
189
199
|
**CRITICAL: Automatic Execution**
|
|
190
|
-
- ANY \`\`\`json block with "toolId": "video-gen" will be EXECUTED IMMEDIATELY
|
|
191
|
-
- Just output the command when you want to generate a video
|
|
192
|
-
- Video generation takes
|
|
200
|
+
- ANY \`\`\`json block with "toolId": "video-gen" will be EXECUTED IMMEDIATELY.
|
|
201
|
+
- Just output the command when you want to generate a video.
|
|
202
|
+
- Video generation takes minutes — a job ID is returned immediately and the file lands when the job finishes.
|
|
193
203
|
|
|
194
204
|
**USAGE:**
|
|
195
205
|
\`\`\`json
|
|
@@ -198,22 +208,27 @@ export class VideoTool extends BaseTool {
|
|
|
198
208
|
"parameters": {
|
|
199
209
|
"prompt": "Detailed description of the video",
|
|
200
210
|
"outputPath": "videos/filename.mp4",
|
|
201
|
-
"width":
|
|
202
|
-
"height":
|
|
203
|
-
"duration":
|
|
211
|
+
"width": 1280,
|
|
212
|
+
"height": 720,
|
|
213
|
+
"duration": 4
|
|
204
214
|
}
|
|
205
215
|
}
|
|
206
216
|
\`\`\`
|
|
207
217
|
|
|
208
218
|
**Parameters:**
|
|
209
|
-
- **prompt** (required): Detailed description of video
|
|
210
|
-
- **outputPath** (optional):
|
|
211
|
-
- **width** (optional):
|
|
212
|
-
- **
|
|
213
|
-
- **
|
|
214
|
-
- **
|
|
219
|
+
- **prompt** (required): Detailed description of the video.
|
|
220
|
+
- **outputPath** (optional): Where to save the .mp4 (permanent). Omit for a temp file.
|
|
221
|
+
- **width** / **height** (optional): Resolution. The catalog defines allowed pairs per model; the backend rejects unsupported pairs with a clear 400 listing valid values.
|
|
222
|
+
- **duration** (optional): Duration in seconds. The catalog defines allowed values per model.
|
|
223
|
+
- **variants** (optional): Number of video variants. Some models (e.g. Sora 2) only return one video per job; the backend will reject \`variants > 1\` with a clear message naming the model's limit.
|
|
224
|
+
- **model** (optional): Override the auto-resolved model. Must be a video-generation model in the catalog.
|
|
225
|
+
|
|
226
|
+
**Current model limits (Sora 2):**
|
|
227
|
+
- Resolutions: \`720x1280\`, \`1280x720\`, \`1024x1792\`, \`1792x1024\` (16:9 / 9:16 only — no square or 480p)
|
|
228
|
+
- Durations: \`4\`, \`8\`, or \`12\` seconds (those exact values, no others)
|
|
229
|
+
- Variants: 1 per job — request multiple separately if you need more
|
|
215
230
|
|
|
216
|
-
|
|
231
|
+
These limits live in the catalog row, not in this tool. If the model rotates (e.g. Sora 3) or a new video model is added, the allowed values update automatically and you'll see them in the backend's 400 if you submit unsupported inputs.
|
|
217
232
|
|
|
218
233
|
**EXAMPLE:**
|
|
219
234
|
User: "create a video of a cat playing"
|
|
@@ -224,20 +239,20 @@ You output:
|
|
|
224
239
|
"parameters": {
|
|
225
240
|
"prompt": "A fluffy orange tabby cat with white paws crouches low on a sunlit hardwood floor, eyes locked on a red laser dot. The cat pounces forward, slides slightly on the polished wood, then quickly pivots to chase the dot as it darts away. Warm afternoon sunlight streams through sheer curtains, casting soft golden highlights on the cat's fur. Cozy living room with a beige sofa in the background.",
|
|
226
241
|
"outputPath": "videos/cat-playing.mp4",
|
|
227
|
-
"width":
|
|
228
|
-
"height":
|
|
229
|
-
"duration":
|
|
242
|
+
"width": 1280,
|
|
243
|
+
"height": 720,
|
|
244
|
+
"duration": 4
|
|
230
245
|
}
|
|
231
246
|
}
|
|
232
247
|
\`\`\`
|
|
233
248
|
|
|
234
249
|
**Prompt Guidelines (IMPORTANT):**
|
|
235
|
-
Sora simulates a physical world
|
|
250
|
+
Sora simulates a physical world — write prompts as narratives, not camera commands. Use the CAST method: describe the **Character** (appearance, clothing, posture), **Action** (broken into beats: "takes three steps, pauses, looks back"), **Setting** (time of day, weather, specific objects), and **Tone/Atmosphere** (lighting quality, color palette, mood). Be specific and sensory — replace "beautiful street" with "rain-slick Tokyo asphalt reflecting neon signs." Keep prompts under 120 words, focus on ONE action per clip, and use simple camera cues only if needed ("wide shot," "close-up"). Anchor lighting explicitly ("warm golden hour sunlight with soft shadows") and name colors (teal, amber, magenta) for palette consistency. For character consistency across clips, repeat the same distinctive details (clothing colors, accessories, features) in each prompt. Avoid real people, copyrighted characters, and sensitive content.
|
|
236
251
|
|
|
237
252
|
**Notes:**
|
|
238
|
-
- Videos take 3
|
|
239
|
-
- Max ${VIDEO_CONFIG.QUEUE_LIMIT} videos in queue, max
|
|
240
|
-
-
|
|
253
|
+
- Videos take 1-3 minutes to generate (Sora 2 short clips).
|
|
254
|
+
- Max ${VIDEO_CONFIG.QUEUE_LIMIT} videos in queue, max ${VIDEO_CONFIG.MAX_CONCURRENT} concurrent jobs.
|
|
255
|
+
- Generated videos expire on the provider after 24 hours; if you need to keep them, set an \`outputPath\` so the local copy persists.`;
|
|
241
256
|
}
|
|
242
257
|
|
|
243
258
|
/**
|
|
@@ -471,7 +486,17 @@ Sora simulates a physical world, so write prompts as narratives, not camera comm
|
|
|
471
486
|
}
|
|
472
487
|
|
|
473
488
|
/**
|
|
474
|
-
*
|
|
489
|
+
* Sanity-check inputs before submitting to the backend. Per-model limits
|
|
490
|
+
* (which exact resolutions and durations a given video model accepts)
|
|
491
|
+
* are NOT enforced here — the catalog declares them and the backend
|
|
492
|
+
* route validates against the catalog row. This keeps the CLI
|
|
493
|
+
* provider-agnostic; if the inputs aren't compatible with the chosen
|
|
494
|
+
* model, the backend's 400 surfaces back through the queue's `error`
|
|
495
|
+
* field with a clear message naming the allowed values.
|
|
496
|
+
*
|
|
497
|
+
* Local checks below cover only "obviously wrong" inputs that no video
|
|
498
|
+
* provider would accept — empty prompts, non-positive dimensions, etc.
|
|
499
|
+
*
|
|
475
500
|
* @private
|
|
476
501
|
*/
|
|
477
502
|
_validateParameters(params) {
|
|
@@ -483,25 +508,34 @@ Sora simulates a physical world, so write prompts as narratives, not camera comm
|
|
|
483
508
|
if (!vid.prompt || vid.prompt.trim().length === 0) {
|
|
484
509
|
throw new Error('Video prompt is required');
|
|
485
510
|
}
|
|
486
|
-
|
|
487
511
|
if (vid.prompt.length > VIDEO_CONFIG.MAX_PROMPT_LENGTH) {
|
|
488
512
|
throw new Error(`Prompt too long (max ${VIDEO_CONFIG.MAX_PROMPT_LENGTH} characters)`);
|
|
489
513
|
}
|
|
490
514
|
|
|
491
|
-
//
|
|
492
|
-
|
|
493
|
-
if (!
|
|
494
|
-
throw new Error(`Invalid
|
|
515
|
+
// Width/height must be positive integers — backend + provider
|
|
516
|
+
// decide which exact pairs are valid for the chosen model.
|
|
517
|
+
if (vid.width != null && (!Number.isInteger(vid.width) || vid.width <= 0)) {
|
|
518
|
+
throw new Error(`Invalid width: ${vid.width}. Must be a positive integer.`);
|
|
519
|
+
}
|
|
520
|
+
if (vid.height != null && (!Number.isInteger(vid.height) || vid.height <= 0)) {
|
|
521
|
+
throw new Error(`Invalid height: ${vid.height}. Must be a positive integer.`);
|
|
495
522
|
}
|
|
496
523
|
|
|
497
|
-
//
|
|
498
|
-
|
|
499
|
-
|
|
524
|
+
// Duration: only catch absurd values here; the catalog declares
|
|
525
|
+
// the per-model allowed list (e.g. Sora 2: {4, 8, 12} seconds).
|
|
526
|
+
if (vid.duration != null) {
|
|
527
|
+
if (typeof vid.duration !== 'number' || vid.duration < VIDEO_CONFIG.ABSOLUTE_MIN_DURATION || vid.duration > VIDEO_CONFIG.ABSOLUTE_MAX_DURATION) {
|
|
528
|
+
throw new Error(`Invalid duration: ${vid.duration}. Must be a number between ${VIDEO_CONFIG.ABSOLUTE_MIN_DURATION} and ${VIDEO_CONFIG.ABSOLUTE_MAX_DURATION} seconds. The chosen model may support a narrower set — see /llm/models.`);
|
|
529
|
+
}
|
|
500
530
|
}
|
|
501
531
|
|
|
502
|
-
//
|
|
503
|
-
|
|
504
|
-
|
|
532
|
+
// Variants: same approach — sanity-only. Some models (e.g. Sora 2)
|
|
533
|
+
// only return a single video per job; the backend will 400 if the
|
|
534
|
+
// model doesn't support multiple variants.
|
|
535
|
+
if (vid.variants != null) {
|
|
536
|
+
if (!Number.isInteger(vid.variants) || vid.variants < 1 || vid.variants > VIDEO_CONFIG.ABSOLUTE_MAX_VARIANTS) {
|
|
537
|
+
throw new Error(`Invalid variants: ${vid.variants}. Must be an integer between 1 and ${VIDEO_CONFIG.ABSOLUTE_MAX_VARIANTS}. The chosen model may only support 1.`);
|
|
538
|
+
}
|
|
505
539
|
}
|
|
506
540
|
|
|
507
541
|
if (vid.outputPath) {
|
package/src/tools/webTool.js
CHANGED
|
@@ -3073,6 +3073,15 @@ If blocked (CAPTCHA, access denied), use stealthLevel: "maximum" (visible browse
|
|
|
3073
3073
|
this.cleanupTimer = setInterval(() => {
|
|
3074
3074
|
this.cleanupIdleTabs();
|
|
3075
3075
|
}, this.CLEANUP_INTERVAL);
|
|
3076
|
+
// Don't let this background-maintenance timer hold the event loop
|
|
3077
|
+
// open. When all real work is done (CLI exits, test suite finishes),
|
|
3078
|
+
// the process should be free to exit on its own. Tests that create
|
|
3079
|
+
// a WebTool without explicit cleanup() previously left jest workers
|
|
3080
|
+
// hanging until --forceExit. unref() is the industry-standard fix
|
|
3081
|
+
// for periodic-maintenance timers.
|
|
3082
|
+
if (typeof this.cleanupTimer.unref === 'function') {
|
|
3083
|
+
this.cleanupTimer.unref();
|
|
3084
|
+
}
|
|
3076
3085
|
}
|
|
3077
3086
|
|
|
3078
3087
|
/**
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the API-key placeholder detection helpers (shared by
|
|
3
|
+
* apiKeyManager + the web UI).
|
|
4
|
+
*
|
|
5
|
+
* Locks the heuristic that prevents UI display strings ("lx_•••• …
|
|
6
|
+
* (server-managed)" and the legacy "platform-managed" sentinel) from
|
|
7
|
+
* leaking into persistence and overwriting real keys with garbage.
|
|
8
|
+
*/
|
|
9
|
+
import { describe, test, expect } from '@jest/globals';
|
|
10
|
+
import {
|
|
11
|
+
isPlaceholderApiKey,
|
|
12
|
+
sanitizeApiKeyValue,
|
|
13
|
+
sanitizeApiKeysObject,
|
|
14
|
+
LEGACY_BULLET_PLACEHOLDER,
|
|
15
|
+
LEGACY_PLATFORM_MANAGED_SENTINEL,
|
|
16
|
+
} from '../apiKeyPlaceholders.js';
|
|
17
|
+
|
|
18
|
+
describe('isPlaceholderApiKey', () => {
|
|
19
|
+
test('detects the canonical bullet placeholder', () => {
|
|
20
|
+
expect(isPlaceholderApiKey(LEGACY_BULLET_PLACEHOLDER)).toBe(true);
|
|
21
|
+
expect(isPlaceholderApiKey('lx_••••••••••••••••(server-managed)')).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('detects any string containing bullets', () => {
|
|
25
|
+
expect(isPlaceholderApiKey('••••••••')).toBe(true);
|
|
26
|
+
expect(isPlaceholderApiKey('lx_•••')).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test('detects the platform-managed sentinel exactly', () => {
|
|
30
|
+
expect(isPlaceholderApiKey(LEGACY_PLATFORM_MANAGED_SENTINEL)).toBe(true);
|
|
31
|
+
expect(isPlaceholderApiKey('platform-managed')).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test('detects (server-managed) and [server-managed] tags anywhere in the string', () => {
|
|
35
|
+
expect(isPlaceholderApiKey('lx_abc(server-managed)')).toBe(true);
|
|
36
|
+
expect(isPlaceholderApiKey('foo[server-managed]bar')).toBe(true);
|
|
37
|
+
expect(isPlaceholderApiKey('(server-managed)')).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('treats real-looking keys as not-placeholder', () => {
|
|
41
|
+
expect(isPlaceholderApiKey('lx_1234567890abcdef')).toBe(false);
|
|
42
|
+
expect(isPlaceholderApiKey('sk-proj-abcdefghijk')).toBe(false);
|
|
43
|
+
expect(isPlaceholderApiKey('FfX3H7zwazdmDG3wIslbiawTYLVxXyzGKa97IaXcH9nUjVprZ0HqJQQJ99BEACfhMk5XJ3w3AAAAACOG6efc')).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('returns false for empty / null / undefined / non-string', () => {
|
|
47
|
+
expect(isPlaceholderApiKey('')).toBe(false);
|
|
48
|
+
expect(isPlaceholderApiKey(null)).toBe(false);
|
|
49
|
+
expect(isPlaceholderApiKey(undefined)).toBe(false);
|
|
50
|
+
expect(isPlaceholderApiKey(123)).toBe(false);
|
|
51
|
+
expect(isPlaceholderApiKey({})).toBe(false);
|
|
52
|
+
expect(isPlaceholderApiKey([])).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('does NOT treat the substring "managed" alone as a placeholder', () => {
|
|
56
|
+
// Real keys should be allowed even if they happen to contain English
|
|
57
|
+
// words. Only the bracketed/parenthesised tag triggers detection.
|
|
58
|
+
expect(isPlaceholderApiKey('lx_managed_account_key_12345')).toBe(false);
|
|
59
|
+
expect(isPlaceholderApiKey('server')).toBe(false);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
describe('sanitizeApiKeyValue', () => {
|
|
64
|
+
test('passes real keys through unchanged', () => {
|
|
65
|
+
expect(sanitizeApiKeyValue('lx_real_key_abc123')).toBe('lx_real_key_abc123');
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('strips placeholder values to empty string', () => {
|
|
69
|
+
expect(sanitizeApiKeyValue(LEGACY_BULLET_PLACEHOLDER)).toBe('');
|
|
70
|
+
expect(sanitizeApiKeyValue('platform-managed')).toBe('');
|
|
71
|
+
expect(sanitizeApiKeyValue('foo(server-managed)')).toBe('');
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test('returns "" for non-string inputs (avoids leaking nulls into UI state)', () => {
|
|
75
|
+
expect(sanitizeApiKeyValue(null)).toBe('');
|
|
76
|
+
expect(sanitizeApiKeyValue(undefined)).toBe('');
|
|
77
|
+
expect(sanitizeApiKeyValue(0)).toBe('');
|
|
78
|
+
expect(sanitizeApiKeyValue({ value: 'real' })).toBe('');
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('preserves empty string', () => {
|
|
82
|
+
expect(sanitizeApiKeyValue('')).toBe('');
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
describe('sanitizeApiKeysObject', () => {
|
|
87
|
+
test('returns an empty object for null / undefined / non-object', () => {
|
|
88
|
+
expect(sanitizeApiKeysObject(null)).toEqual({});
|
|
89
|
+
expect(sanitizeApiKeysObject(undefined)).toEqual({});
|
|
90
|
+
expect(sanitizeApiKeysObject('not-an-object')).toEqual({});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test('strips placeholders, preserves real keys', () => {
|
|
94
|
+
const result = sanitizeApiKeysObject({
|
|
95
|
+
loxiaBackend: LEGACY_BULLET_PLACEHOLDER,
|
|
96
|
+
anthropic: 'sk-ant-real-key-1234567890',
|
|
97
|
+
openai: 'platform-managed',
|
|
98
|
+
azure: 'lx_real_azure_key',
|
|
99
|
+
deepseek: 'foo(server-managed)bar',
|
|
100
|
+
});
|
|
101
|
+
expect(result).toEqual({
|
|
102
|
+
loxiaBackend: '',
|
|
103
|
+
anthropic: 'sk-ant-real-key-1234567890',
|
|
104
|
+
openai: '',
|
|
105
|
+
azure: 'lx_real_azure_key',
|
|
106
|
+
deepseek: '',
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test('does not mutate the input', () => {
|
|
111
|
+
const input = { loxiaBackend: LEGACY_BULLET_PLACEHOLDER };
|
|
112
|
+
sanitizeApiKeysObject(input);
|
|
113
|
+
expect(input.loxiaBackend).toBe(LEGACY_BULLET_PLACEHOLDER);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
test('roundtrip: clean object passes through unchanged-shape', () => {
|
|
117
|
+
const clean = { loxiaBackend: 'lx_abc', anthropic: 'sk-ant-xyz' };
|
|
118
|
+
expect(sanitizeApiKeysObject(clean)).toEqual(clean);
|
|
119
|
+
});
|
|
120
|
+
});
|