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
|
@@ -17,9 +17,13 @@ class FlowContextService {
|
|
|
17
17
|
* Build flow execution context to inject into agent's system prompt
|
|
18
18
|
* @param {Object} flowMetadata - Current flow execution metadata
|
|
19
19
|
* @param {Object} previousAgentData - Data from previous agent (if any)
|
|
20
|
+
* @param {Object} [nodeContract] - v2 typed I/O { inputs, outputs }; when
|
|
21
|
+
* present, the system prompt advertises
|
|
22
|
+
* the EXACT named/typed payload the
|
|
23
|
+
* agent receives and must produce.
|
|
20
24
|
* @returns {string} Context string to inject into system prompt
|
|
21
25
|
*/
|
|
22
|
-
buildFlowAgentContext(flowMetadata, previousAgentData) {
|
|
26
|
+
buildFlowAgentContext(flowMetadata, previousAgentData, nodeContract) {
|
|
23
27
|
const sections = [];
|
|
24
28
|
|
|
25
29
|
// Flow execution header
|
|
@@ -27,12 +31,90 @@ class FlowContextService {
|
|
|
27
31
|
<FLOW_EXECUTION_CONTEXT>
|
|
28
32
|
You are executing step "${flowMetadata.nodeName || 'Agent'}" (${flowMetadata.nodePosition}/${flowMetadata.totalNodes}) in flow "${flowMetadata.flowName}".`);
|
|
29
33
|
|
|
34
|
+
// Phase 7: overall flow goal — orients each agent to the bigger
|
|
35
|
+
// picture so they reason about their step in context of the whole.
|
|
36
|
+
if (this._hasText(flowMetadata?.flowDescription)) {
|
|
37
|
+
sections.push(`
|
|
38
|
+
FLOW GOAL:
|
|
39
|
+
${flowMetadata.flowDescription.trim()}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Phase 7: per-node instructions — role, working style, and
|
|
43
|
+
// success criteria for THIS step. Distinct from the user prompt
|
|
44
|
+
// template (which is the input message). Lives at node.data.instructions.
|
|
45
|
+
if (this._hasText(nodeContract?.instructions)) {
|
|
46
|
+
sections.push(`
|
|
47
|
+
NODE INSTRUCTIONS (your role + how to succeed at this step):
|
|
48
|
+
${nodeContract.instructions.trim()}`);
|
|
49
|
+
}
|
|
50
|
+
|
|
30
51
|
// Critical instruction about context isolation
|
|
31
52
|
sections.push(`
|
|
32
53
|
CRITICAL HANDOFF REQUIREMENT:
|
|
33
54
|
The NEXT agent in this flow has NO ACCESS to your conversation history or any context you've built up.
|
|
34
55
|
Everything you learn, create, or discover must be explicitly passed via job-done.`);
|
|
35
56
|
|
|
57
|
+
// v2: declared INPUTS — what payload the agent is receiving.
|
|
58
|
+
// Phase 7: each input now optionally carries a description and an
|
|
59
|
+
// example. The description tells the agent what this input
|
|
60
|
+
// represents AND how to use it; the example shows concrete shape.
|
|
61
|
+
if (nodeContract && Array.isArray(nodeContract.inputs) && nodeContract.inputs.length > 0) {
|
|
62
|
+
const lines = nodeContract.inputs.map(i => this._renderIOEntry(i, /*required default*/ true));
|
|
63
|
+
sections.push(`
|
|
64
|
+
INPUTS (this step receives these typed values; reference them in your reasoning):
|
|
65
|
+
${lines.join('\n')}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// v2: declared OUTPUTS — exactly what the agent must produce.
|
|
69
|
+
// Phase 7 hardening: stronger framing + concrete example shape that
|
|
70
|
+
// the model can mimic literally. Empirical finding: weak instruction
|
|
71
|
+
// ("you MUST include outputs") + abstract placeholder (`<text value>`)
|
|
72
|
+
// → models default to schema-minimum. Loud framing + concrete shape
|
|
73
|
+
// dramatically improves first-pass compliance.
|
|
74
|
+
if (nodeContract && Array.isArray(nodeContract.outputs) && nodeContract.outputs.length > 0) {
|
|
75
|
+
const lines = nodeContract.outputs.map(o => this._renderIOEntry(o, /*required default*/ false));
|
|
76
|
+
// Build a concrete example object using each field's example if
|
|
77
|
+
// provided, else a typed placeholder. The agent should imitate
|
|
78
|
+
// this shape literally — only the values change.
|
|
79
|
+
const exampleEntries = nodeContract.outputs.map(o => {
|
|
80
|
+
let exVal;
|
|
81
|
+
if (o.example !== undefined && o.example !== null) {
|
|
82
|
+
try { exVal = JSON.stringify(o.example); }
|
|
83
|
+
catch { exVal = this._typedPlaceholder(o.type); }
|
|
84
|
+
} else {
|
|
85
|
+
exVal = this._typedPlaceholder(o.type);
|
|
86
|
+
}
|
|
87
|
+
return ` "${o.name}": ${exVal}`;
|
|
88
|
+
}).join(',\n');
|
|
89
|
+
|
|
90
|
+
sections.push(`
|
|
91
|
+
═══════════════════════════════════════════════════════════════
|
|
92
|
+
REQUIRED OUTPUTS — your job-done call MUST populate every field below
|
|
93
|
+
═══════════════════════════════════════════════════════════════
|
|
94
|
+
|
|
95
|
+
${lines.join('\n')}
|
|
96
|
+
|
|
97
|
+
THE ONLY VALID FORMAT for ending this task is a jobdone tool call
|
|
98
|
+
with this exact shape (replace example values with your real content,
|
|
99
|
+
keep field names and structure identical):
|
|
100
|
+
|
|
101
|
+
{
|
|
102
|
+
"toolId": "jobdone",
|
|
103
|
+
"actions": [{
|
|
104
|
+
"action": "complete",
|
|
105
|
+
"summary": "<your one-paragraph summary>",
|
|
106
|
+
"outputs": {
|
|
107
|
+
${exampleEntries}
|
|
108
|
+
}
|
|
109
|
+
}]
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
Calls without the "outputs" field — or with "outputs" missing any of
|
|
113
|
+
the field names listed above — will be REJECTED and you will be
|
|
114
|
+
re-prompted. The flow CANNOT proceed without these structured outputs.
|
|
115
|
+
═══════════════════════════════════════════════════════════════`);
|
|
116
|
+
}
|
|
117
|
+
|
|
36
118
|
// Job-done instructions
|
|
37
119
|
sections.push(`
|
|
38
120
|
When you complete your task, you MUST call the job-done tool with comprehensive details:
|
|
@@ -54,6 +136,35 @@ ${previousAgentData.filesCreated?.length > 0 ? `- Files they created/modified:\n
|
|
|
54
136
|
${previousAgentData.output ? `
|
|
55
137
|
- Their output:
|
|
56
138
|
${this._formatPreviousOutput(previousAgentData.output)}` : ''}`);
|
|
139
|
+
|
|
140
|
+
// v2: render the structured outputs bag if upstream agents
|
|
141
|
+
// produced one. THIS is the handoff payload — agents downstream
|
|
142
|
+
// should reason from these named fields, not from the prose
|
|
143
|
+
// summary. Without this section the typed contract is invisible
|
|
144
|
+
// at runtime and agents fabricate the data.
|
|
145
|
+
if (previousAgentData.outputs && typeof previousAgentData.outputs === 'object'
|
|
146
|
+
&& Object.keys(previousAgentData.outputs).length > 0) {
|
|
147
|
+
const lines = Object.entries(previousAgentData.outputs).map(([k, v]) =>
|
|
148
|
+
` • ${k} = ${this._formatStructuredValue(v)}`
|
|
149
|
+
);
|
|
150
|
+
sections.push(`
|
|
151
|
+
STRUCTURED HANDOFF FROM UPSTREAM (use these as the source of truth — not the summary):
|
|
152
|
+
${lines.join('\n')}`);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// If multiple agents fed this node, list contributors per-agent
|
|
156
|
+
// so the model knows who produced what. Helpful for fan-in nodes.
|
|
157
|
+
if (Array.isArray(previousAgentData.contributors) && previousAgentData.contributors.length > 1) {
|
|
158
|
+
const blocks = previousAgentData.contributors.map(c => {
|
|
159
|
+
const outs = c.outputs && Object.keys(c.outputs).length > 0
|
|
160
|
+
? Object.entries(c.outputs).map(([k, v]) => ` ${k} = ${this._formatStructuredValue(v)}`).join('\n')
|
|
161
|
+
: ' (no structured outputs)';
|
|
162
|
+
return ` - ${c.agentName} (${c.agentId}):\n${outs}`;
|
|
163
|
+
});
|
|
164
|
+
sections.push(`
|
|
165
|
+
ALL UPSTREAM CONTRIBUTORS (this node has multiple inputs):
|
|
166
|
+
${blocks.join('\n')}`);
|
|
167
|
+
}
|
|
57
168
|
} else {
|
|
58
169
|
sections.push(`
|
|
59
170
|
This is the FIRST agent in the flow - you are receiving the initial user input.`);
|
|
@@ -78,6 +189,234 @@ FLOW EXECUTION RULES:
|
|
|
78
189
|
* @param {string|Object} output - Previous output
|
|
79
190
|
* @returns {string} Formatted output
|
|
80
191
|
*/
|
|
192
|
+
/**
|
|
193
|
+
* Phase 8 (the big one): build a STANDALONE system prompt that REPLACES
|
|
194
|
+
* the agent's persisted system prompt for the duration of a flow step.
|
|
195
|
+
*
|
|
196
|
+
* Why: production findings showed the agent's own system prompt
|
|
197
|
+
* ("You are a software developer...") fights the flow contract.
|
|
198
|
+
* The agent's training pulls it toward its native role
|
|
199
|
+
* (engineering, code, task lists) instead of producing the typed
|
|
200
|
+
* outputs the flow declares. Appending flow context didn't beat the
|
|
201
|
+
* prior identity.
|
|
202
|
+
*
|
|
203
|
+
* This builder produces a single self-contained prompt that defines
|
|
204
|
+
* the agent's IDENTITY for this step in terms of the flow node's
|
|
205
|
+
* declared role + I/O contract. The agent's tools/capabilities/model
|
|
206
|
+
* stay the same — only the role-defining prose changes.
|
|
207
|
+
*
|
|
208
|
+
* Returns null when there's no node-level role to assert (no
|
|
209
|
+
* instructions AND no typed I/O). In that case the caller falls back
|
|
210
|
+
* to the legacy append-context behavior.
|
|
211
|
+
*
|
|
212
|
+
* @returns {string|null} the new system prompt, or null to keep native
|
|
213
|
+
*/
|
|
214
|
+
buildFlowAgentSystemPrompt(flowMetadata, previousAgentData, nodeContract) {
|
|
215
|
+
if (!nodeContract) return null;
|
|
216
|
+
const hasInstructions = this._hasText(nodeContract.instructions);
|
|
217
|
+
const hasOutputs = Array.isArray(nodeContract.outputs) && nodeContract.outputs.length > 0;
|
|
218
|
+
if (!hasInstructions && !hasOutputs) return null;
|
|
219
|
+
|
|
220
|
+
const sections = [];
|
|
221
|
+
sections.push(
|
|
222
|
+
`You are acting as the "${flowMetadata.nodeName || 'Agent'}" step (${flowMetadata.nodePosition}/${flowMetadata.totalNodes}) of the flow "${flowMetadata.flowName}".`
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
if (this._hasText(flowMetadata?.flowDescription)) {
|
|
226
|
+
sections.push(`OVERALL FLOW GOAL:\n${flowMetadata.flowDescription.trim()}`);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (hasInstructions) {
|
|
230
|
+
sections.push(`YOUR ROLE FOR THIS STEP:\n${nodeContract.instructions.trim()}`);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
sections.push(
|
|
234
|
+
`HOW TO COMPLETE THIS STEP — the only valid completion:
|
|
235
|
+
1. Read the typed inputs you receive (listed below).
|
|
236
|
+
2. Produce the typed outputs declared below.
|
|
237
|
+
3. Call the job-done tool with summary, details, AND a populated
|
|
238
|
+
"outputs" object containing every required field.
|
|
239
|
+
|
|
240
|
+
DO NOT:
|
|
241
|
+
- Maintain or update task lists. This step has no other steps.
|
|
242
|
+
- Write status paragraphs. The flow is autonomous.
|
|
243
|
+
- Call any tool other than job-done unless it is genuinely required
|
|
244
|
+
to gather data for the structured outputs.
|
|
245
|
+
- Defer the work. There is no human in this conversation — produce
|
|
246
|
+
the outputs and finish.
|
|
247
|
+
|
|
248
|
+
The flow CANNOT proceed until you call job-done with the correct
|
|
249
|
+
"outputs" object. Calls that omit any required field will be rejected
|
|
250
|
+
and you will be asked to re-emit.`
|
|
251
|
+
);
|
|
252
|
+
|
|
253
|
+
// INPUTS — typed, with descriptions/examples
|
|
254
|
+
if (Array.isArray(nodeContract.inputs) && nodeContract.inputs.length > 0) {
|
|
255
|
+
const lines = nodeContract.inputs.map(i => this._renderIOEntry(i, true));
|
|
256
|
+
sections.push(`INPUTS (you receive these typed values from upstream):\n${lines.join('\n')}`);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// OUTPUTS — typed, with descriptions/examples + concrete shape
|
|
260
|
+
if (hasOutputs) {
|
|
261
|
+
const lines = nodeContract.outputs.map(o => this._renderIOEntry(o, false));
|
|
262
|
+
const exampleEntries = nodeContract.outputs.map(o => {
|
|
263
|
+
let exVal;
|
|
264
|
+
if (o.example !== undefined && o.example !== null) {
|
|
265
|
+
try { exVal = JSON.stringify(o.example); }
|
|
266
|
+
catch { exVal = this._typedPlaceholder(o.type); }
|
|
267
|
+
} else {
|
|
268
|
+
exVal = this._typedPlaceholder(o.type);
|
|
269
|
+
}
|
|
270
|
+
return ` "${o.name}": ${exVal}`;
|
|
271
|
+
}).join(',\n');
|
|
272
|
+
|
|
273
|
+
sections.push(
|
|
274
|
+
`REQUIRED OUTPUTS — you MUST populate every field below in job-done's "outputs":
|
|
275
|
+
${lines.join('\n')}
|
|
276
|
+
|
|
277
|
+
EXACT job-done call shape (replace example values; keep keys identical):
|
|
278
|
+
{
|
|
279
|
+
"toolId": "jobdone",
|
|
280
|
+
"actions": [{
|
|
281
|
+
"action": "complete",
|
|
282
|
+
"summary": "<one-paragraph summary of what you produced>",
|
|
283
|
+
"outputs": {
|
|
284
|
+
${exampleEntries}
|
|
285
|
+
}
|
|
286
|
+
}]
|
|
287
|
+
}`
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Previous agent context — same as in append mode but inside the
|
|
292
|
+
// standalone prompt now.
|
|
293
|
+
if (previousAgentData) {
|
|
294
|
+
const parts = [`Previous step: ${previousAgentData.agentName || previousAgentData.agentId}.`];
|
|
295
|
+
if (previousAgentData.summary) parts.push(`Their summary: ${previousAgentData.summary}`);
|
|
296
|
+
if (previousAgentData.outputs && Object.keys(previousAgentData.outputs).length > 0) {
|
|
297
|
+
const fields = Object.entries(previousAgentData.outputs)
|
|
298
|
+
.map(([k, v]) => ` • ${k} = ${this._formatStructuredValue(v)}`)
|
|
299
|
+
.join('\n');
|
|
300
|
+
parts.push(`Their structured outputs (use as your source of truth):\n${fields}`);
|
|
301
|
+
} else if (previousAgentData.output) {
|
|
302
|
+
parts.push(`Their output:\n${this._formatPreviousOutput(previousAgentData.output)}`);
|
|
303
|
+
}
|
|
304
|
+
sections.push(`UPSTREAM CONTEXT:\n${parts.join('\n')}`);
|
|
305
|
+
} else {
|
|
306
|
+
sections.push(`This is the FIRST step. You receive the user's initial input.`);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return sections.join('\n\n');
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Phase 7 hardening helper: typed placeholder rendering for the
|
|
314
|
+
* concrete example block in REQUIRED OUTPUTS. Used only when the
|
|
315
|
+
* field has no `example` declared. Each placeholder is itself valid
|
|
316
|
+
* JSON of the right type so the agent can copy-paste the structure.
|
|
317
|
+
*/
|
|
318
|
+
_typedPlaceholder(type) {
|
|
319
|
+
switch (type) {
|
|
320
|
+
case 'text': return '"<your text content here>"';
|
|
321
|
+
case 'number': return '0';
|
|
322
|
+
case 'boolean': return 'true';
|
|
323
|
+
case 'json': return '{ "key": "value" }';
|
|
324
|
+
case 'file': return '"/path/to/file.ext"';
|
|
325
|
+
case 'file[]': return '["/path/to/file1", "/path/to/file2"]';
|
|
326
|
+
case 'list<text>': return '["item 1", "item 2", "item 3"]';
|
|
327
|
+
default: return '"<value>"';
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Phase 7 helper: true when a string is present and non-empty after
|
|
333
|
+
* trimming. Empty/whitespace-only descriptions are treated as absent.
|
|
334
|
+
*/
|
|
335
|
+
_hasText(s) {
|
|
336
|
+
return typeof s === 'string' && s.trim().length > 0;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Phase 7 helper: render one input or output declaration as a multi-
|
|
341
|
+
* line block:
|
|
342
|
+
*
|
|
343
|
+
* • topic (text, required)
|
|
344
|
+
* The research topic exactly as provided.
|
|
345
|
+
* Example: "AI safety"
|
|
346
|
+
*
|
|
347
|
+
* Description and example are both optional. Required-marker policy
|
|
348
|
+
* differs slightly between inputs (default required:true) and outputs
|
|
349
|
+
* (no inherent required flag) — caller passes `requiredByDefault`.
|
|
350
|
+
*
|
|
351
|
+
* The same description text is read by BOTH the producer (interprets
|
|
352
|
+
* as "format thus") and the consumer (interprets as "expect thus").
|
|
353
|
+
* That bidirectional contract is the whole point.
|
|
354
|
+
*/
|
|
355
|
+
_renderIOEntry(entry, requiredByDefault) {
|
|
356
|
+
if (!entry || typeof entry.name !== 'string') return '';
|
|
357
|
+
const reqLabel = (entry.required === true) ? ', required'
|
|
358
|
+
: (entry.required === false) ? ', optional'
|
|
359
|
+
: (requiredByDefault ? ', required' : '');
|
|
360
|
+
const head = ` • ${entry.name} (${entry.type}${reqLabel})`;
|
|
361
|
+
const lines = [head];
|
|
362
|
+
if (this._hasText(entry.description)) {
|
|
363
|
+
// Indent every line of the description by 4 spaces.
|
|
364
|
+
const indented = entry.description.trim().split('\n').map(l => ` ${l}`).join('\n');
|
|
365
|
+
lines.push(indented);
|
|
366
|
+
}
|
|
367
|
+
if (entry.example !== undefined && entry.example !== null) {
|
|
368
|
+
let rendered;
|
|
369
|
+
try {
|
|
370
|
+
rendered = (typeof entry.example === 'string')
|
|
371
|
+
? JSON.stringify(entry.example)
|
|
372
|
+
: JSON.stringify(entry.example, null, 2);
|
|
373
|
+
} catch {
|
|
374
|
+
rendered = '<unstringifiable example>';
|
|
375
|
+
}
|
|
376
|
+
// Single-line examples stay inline; multi-line get their own block.
|
|
377
|
+
if (rendered.includes('\n')) {
|
|
378
|
+
const indented = rendered.split('\n').map(l => ` ${l}`).join('\n');
|
|
379
|
+
lines.push(` Example:\n${indented}`);
|
|
380
|
+
} else {
|
|
381
|
+
lines.push(` Example: ${rendered}`);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return lines.join('\n');
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Render a structured output value compactly for the system prompt.
|
|
389
|
+
* Strings are quoted, primitives are JSON-ified, arrays/objects are
|
|
390
|
+
* pretty-printed and truncated. Goal: the model can READ the value
|
|
391
|
+
* without it dominating the prompt.
|
|
392
|
+
*/
|
|
393
|
+
_formatStructuredValue(v) {
|
|
394
|
+
if (v === null) return 'null';
|
|
395
|
+
if (v === undefined) return 'undefined';
|
|
396
|
+
if (typeof v === 'string') {
|
|
397
|
+
// Single-line: quote inline. Multi-line: truncate-and-quote.
|
|
398
|
+
if (!v.includes('\n') && v.length <= 200) return JSON.stringify(v);
|
|
399
|
+
const truncated = v.length > 1500 ? v.slice(0, 1500) + '\n... (truncated)' : v;
|
|
400
|
+
return `"""\n${truncated}\n"""`;
|
|
401
|
+
}
|
|
402
|
+
if (typeof v === 'number' || typeof v === 'boolean') return String(v);
|
|
403
|
+
if (Array.isArray(v)) {
|
|
404
|
+
if (v.length === 0) return '[]';
|
|
405
|
+
if (v.every(x => typeof x === 'string') && v.length <= 10) {
|
|
406
|
+
return `[${v.map(x => JSON.stringify(x)).join(', ')}]`;
|
|
407
|
+
}
|
|
408
|
+
const json = JSON.stringify(v, null, 2);
|
|
409
|
+
return json.length > 1500 ? json.slice(0, 1500) + '\n... (truncated)' : json;
|
|
410
|
+
}
|
|
411
|
+
// Object
|
|
412
|
+
try {
|
|
413
|
+
const json = JSON.stringify(v, null, 2);
|
|
414
|
+
return json.length > 1500 ? json.slice(0, 1500) + '\n... (truncated)' : json;
|
|
415
|
+
} catch {
|
|
416
|
+
return String(v);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
81
420
|
_formatPreviousOutput(output) {
|
|
82
421
|
if (!output) return '';
|
|
83
422
|
|
|
@@ -112,11 +451,17 @@ FLOW EXECUTION RULES:
|
|
|
112
451
|
}
|
|
113
452
|
|
|
114
453
|
/**
|
|
115
|
-
* Validate that job-done result has sufficient detail for flow handoff
|
|
454
|
+
* Validate that job-done result has sufficient detail for flow handoff.
|
|
455
|
+
*
|
|
116
456
|
* @param {Object} jobDoneResult - The job-done tool result
|
|
457
|
+
* @param {Object} [nodeContract] - v2 typed contract { outputs: [...] }.
|
|
458
|
+
* When provided, ALSO validates that jobDoneResult.outputs contains
|
|
459
|
+
* every declared output field with a type-correct value. The result
|
|
460
|
+
* gains a `missingOutputs[]` field listing field names that are
|
|
461
|
+
* absent or null.
|
|
117
462
|
* @returns {Object} Validation result with warnings if insufficient
|
|
118
463
|
*/
|
|
119
|
-
validateJobDoneForFlow(jobDoneResult) {
|
|
464
|
+
validateJobDoneForFlow(jobDoneResult, nodeContract) {
|
|
120
465
|
const warnings = [];
|
|
121
466
|
|
|
122
467
|
if (!jobDoneResult.summary || jobDoneResult.summary.length < 20) {
|
|
@@ -137,13 +482,39 @@ FLOW EXECUTION RULES:
|
|
|
137
482
|
warnings.push('Files mentioned but no explicit paths provided - consider listing created files');
|
|
138
483
|
}
|
|
139
484
|
|
|
140
|
-
|
|
485
|
+
// v2: structured output validation against the node's declared contract.
|
|
486
|
+
// We check presence + a basic type sanity on each declared field.
|
|
487
|
+
// Type validation here is intentionally permissive (warn, don't reject
|
|
488
|
+
// on type widenings) — the goal is to surface real gaps to the agent
|
|
489
|
+
// so Phase 2 can re-prompt, not to reject borderline values.
|
|
490
|
+
let missingOutputs;
|
|
491
|
+
if (nodeContract && Array.isArray(nodeContract.outputs) && nodeContract.outputs.length > 0) {
|
|
492
|
+
missingOutputs = [];
|
|
493
|
+
const provided = (jobDoneResult.outputs && typeof jobDoneResult.outputs === 'object')
|
|
494
|
+
? jobDoneResult.outputs : {};
|
|
495
|
+
for (const decl of nodeContract.outputs) {
|
|
496
|
+
if (!decl || typeof decl.name !== 'string') continue;
|
|
497
|
+
if (!(decl.name in provided) || provided[decl.name] === null || provided[decl.name] === undefined) {
|
|
498
|
+
missingOutputs.push(decl.name);
|
|
499
|
+
warnings.push(`Required output "${decl.name}" (${decl.type}) is missing from job-done.outputs`);
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
const val = provided[decl.name];
|
|
503
|
+
if (!_typeMatches(val, decl.type)) {
|
|
504
|
+
warnings.push(`Output "${decl.name}" expected ${decl.type} but got ${_describeRuntimeType(val)}`);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
const result = {
|
|
141
510
|
valid: warnings.length === 0,
|
|
142
511
|
warnings,
|
|
143
512
|
suggestions: warnings.length > 0
|
|
144
513
|
? 'Ensure your job-done includes: detailed summary, explicit file paths, and any context the next agent needs.'
|
|
145
514
|
: null
|
|
146
515
|
};
|
|
516
|
+
if (missingOutputs !== undefined) result.missingOutputs = missingOutputs;
|
|
517
|
+
return result;
|
|
147
518
|
}
|
|
148
519
|
|
|
149
520
|
/**
|
|
@@ -186,4 +557,30 @@ FLOW EXECUTION RULES:
|
|
|
186
557
|
}
|
|
187
558
|
}
|
|
188
559
|
|
|
560
|
+
/**
|
|
561
|
+
* Runtime type check for declared output values. Permissive on purpose:
|
|
562
|
+
* we want to surface clear mismatches (number expected, string given)
|
|
563
|
+
* but allow widenings (json accepts anything; text accepts numbers
|
|
564
|
+
* because they'll stringify cleanly downstream).
|
|
565
|
+
*/
|
|
566
|
+
function _typeMatches(value, type) {
|
|
567
|
+
if (value === null || value === undefined) return false;
|
|
568
|
+
switch (type) {
|
|
569
|
+
case 'text': return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
|
|
570
|
+
case 'number': return typeof value === 'number' && Number.isFinite(value);
|
|
571
|
+
case 'boolean': return typeof value === 'boolean';
|
|
572
|
+
case 'json': return true;
|
|
573
|
+
case 'file': return typeof value === 'string' && value.length > 0;
|
|
574
|
+
case 'file[]': return Array.isArray(value) && value.every(v => typeof v === 'string' && v.length > 0);
|
|
575
|
+
case 'list<text>': return Array.isArray(value) && value.every(v => typeof v === 'string');
|
|
576
|
+
default: return true; // unknown type → don't gatekeep
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
function _describeRuntimeType(value) {
|
|
581
|
+
if (value === null) return 'null';
|
|
582
|
+
if (Array.isArray(value)) return 'array';
|
|
583
|
+
return typeof value;
|
|
584
|
+
}
|
|
585
|
+
|
|
189
586
|
export default FlowContextService;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for imageFormat helpers — pure functions + the sharp-wrapper
|
|
3
|
+
* fallback path. We don't actually transcode in tests (sharp may not be
|
|
4
|
+
* installed in CI yet) — `transcodeIfNeeded` has clean fallbacks for
|
|
5
|
+
* "already in target format" and "unknown input" that we can pin.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { describe, test, expect, beforeEach } from '@jest/globals';
|
|
9
|
+
import {
|
|
10
|
+
SUPPORTED_FORMATS,
|
|
11
|
+
DEFAULT_FORMAT,
|
|
12
|
+
normalizeFormat,
|
|
13
|
+
extensionFor,
|
|
14
|
+
resolveTargetFormat,
|
|
15
|
+
detectFormatFromBytes,
|
|
16
|
+
transcodeIfNeeded,
|
|
17
|
+
ensureExtension,
|
|
18
|
+
_resetSharpCacheForTests,
|
|
19
|
+
} from '../imageFormat.js';
|
|
20
|
+
|
|
21
|
+
beforeEach(() => { _resetSharpCacheForTests(); });
|
|
22
|
+
|
|
23
|
+
describe('constants', () => {
|
|
24
|
+
test('default format is webp', () => {
|
|
25
|
+
expect(DEFAULT_FORMAT).toBe('webp');
|
|
26
|
+
});
|
|
27
|
+
test('supported formats include png, jpeg, webp', () => {
|
|
28
|
+
expect(SUPPORTED_FORMATS).toEqual(expect.arrayContaining(['png', 'jpeg', 'webp']));
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe('normalizeFormat', () => {
|
|
33
|
+
test.each([
|
|
34
|
+
['png', 'png'], ['.png', 'png'], ['PNG', 'png'],
|
|
35
|
+
['jpg', 'jpeg'], ['.jpg', 'jpeg'], ['jpeg', 'jpeg'], ['.jpeg', 'jpeg'], ['JPG', 'jpeg'],
|
|
36
|
+
['webp', 'webp'], ['.webp', 'webp'], ['WEBP', 'webp'], [' WebP ', 'webp'],
|
|
37
|
+
])('"%s" → %s', (input, expected) => {
|
|
38
|
+
expect(normalizeFormat(input)).toBe(expected);
|
|
39
|
+
});
|
|
40
|
+
test.each([null, undefined, '', 'gif', 'bmp', 'random', 42])('rejects "%p" → null', (input) => {
|
|
41
|
+
expect(normalizeFormat(input)).toBe(null);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe('extensionFor', () => {
|
|
46
|
+
test('png → "png"', () => { expect(extensionFor('png')).toBe('png'); });
|
|
47
|
+
test('jpeg → "jpg" (the more common file extension)', () => { expect(extensionFor('jpeg')).toBe('jpg'); });
|
|
48
|
+
test('webp → "webp"', () => { expect(extensionFor('webp')).toBe('webp'); });
|
|
49
|
+
test('unknown → "webp" fallback (defensive)', () => { expect(extensionFor('xyz')).toBe('webp'); });
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
describe('resolveTargetFormat', () => {
|
|
53
|
+
test('outputPath extension wins when present', () => {
|
|
54
|
+
const r = resolveTargetFormat({ outputPath: 'images/foo.png', outputType: 'webp' });
|
|
55
|
+
expect(r).toEqual({ format: 'png', source: 'extension' });
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test('outputType used when outputPath has no extension', () => {
|
|
59
|
+
const r = resolveTargetFormat({ outputPath: 'images/foo', outputType: 'png' });
|
|
60
|
+
expect(r).toEqual({ format: 'png', source: 'outputType' });
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('outputType used when no outputPath', () => {
|
|
64
|
+
const r = resolveTargetFormat({ outputType: 'webp' });
|
|
65
|
+
expect(r).toEqual({ format: 'webp', source: 'outputType' });
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('default webp when neither given', () => {
|
|
69
|
+
const r = resolveTargetFormat({});
|
|
70
|
+
expect(r).toEqual({ format: 'webp', source: 'default' });
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('outputType "jpg" canonicalizes to jpeg', () => {
|
|
74
|
+
expect(resolveTargetFormat({ outputType: 'jpg' }).format).toBe('jpeg');
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test('invalid extension falls through to outputType / default', () => {
|
|
78
|
+
expect(resolveTargetFormat({ outputPath: 'foo.tiff', outputType: 'png' })).toEqual({
|
|
79
|
+
format: 'png', source: 'outputType',
|
|
80
|
+
});
|
|
81
|
+
expect(resolveTargetFormat({ outputPath: 'foo.tiff' })).toEqual({
|
|
82
|
+
format: 'webp', source: 'default',
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test('outputPath extension wins even over a contradictory outputType', () => {
|
|
87
|
+
// An agent that says outputPath: "x.webp" + outputType: "png" probably
|
|
88
|
+
// typo'd one; the path is the clearer signal — honor it.
|
|
89
|
+
expect(resolveTargetFormat({ outputPath: 'foo.webp', outputType: 'png' })).toEqual({
|
|
90
|
+
format: 'webp', source: 'extension',
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
describe('detectFormatFromBytes', () => {
|
|
96
|
+
test('PNG signature', () => {
|
|
97
|
+
const buf = Buffer.from([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0,0,0,0]);
|
|
98
|
+
expect(detectFormatFromBytes(buf)).toBe('png');
|
|
99
|
+
});
|
|
100
|
+
test('JPEG signature', () => {
|
|
101
|
+
const buf = Buffer.from([0xFF, 0xD8, 0xFF, 0xE0, 0,0,0,0,0,0,0,0]);
|
|
102
|
+
expect(detectFormatFromBytes(buf)).toBe('jpeg');
|
|
103
|
+
});
|
|
104
|
+
test('WebP signature (RIFF...WEBP)', () => {
|
|
105
|
+
const buf = Buffer.from([
|
|
106
|
+
0x52, 0x49, 0x46, 0x46, // RIFF
|
|
107
|
+
0,0,0,0, // size (4 bytes)
|
|
108
|
+
0x57, 0x45, 0x42, 0x50, // WEBP
|
|
109
|
+
]);
|
|
110
|
+
expect(detectFormatFromBytes(buf)).toBe('webp');
|
|
111
|
+
});
|
|
112
|
+
test('GIF signature', () => {
|
|
113
|
+
const buf = Buffer.concat([Buffer.from('GIF89a'), Buffer.alloc(8)]);
|
|
114
|
+
expect(detectFormatFromBytes(buf)).toBe('gif');
|
|
115
|
+
});
|
|
116
|
+
test('BMP signature', () => {
|
|
117
|
+
const buf = Buffer.from([0x42, 0x4D, 0,0,0,0,0,0,0,0,0,0]);
|
|
118
|
+
expect(detectFormatFromBytes(buf)).toBe('bmp');
|
|
119
|
+
});
|
|
120
|
+
test('unknown bytes → null', () => {
|
|
121
|
+
expect(detectFormatFromBytes(Buffer.from([0,0,0,0,0,0,0,0,0,0,0,0]))).toBe(null);
|
|
122
|
+
});
|
|
123
|
+
test('too-small buffer → null (defensive)', () => {
|
|
124
|
+
expect(detectFormatFromBytes(Buffer.from([0x89]))).toBe(null);
|
|
125
|
+
});
|
|
126
|
+
test('non-buffer → null', () => {
|
|
127
|
+
expect(detectFormatFromBytes(null)).toBe(null);
|
|
128
|
+
expect(detectFormatFromBytes('string')).toBe(null);
|
|
129
|
+
expect(detectFormatFromBytes(undefined)).toBe(null);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe('ensureExtension', () => {
|
|
134
|
+
test('appends extension when missing', () => {
|
|
135
|
+
expect(ensureExtension('images/foo', 'webp')).toBe('images/foo.webp');
|
|
136
|
+
expect(ensureExtension('images/foo', 'png')).toBe('images/foo.png');
|
|
137
|
+
expect(ensureExtension('images/foo', 'jpeg')).toBe('images/foo.jpg');
|
|
138
|
+
});
|
|
139
|
+
test('leaves existing valid extension alone', () => {
|
|
140
|
+
expect(ensureExtension('images/foo.webp', 'png')).toBe('images/foo.webp');
|
|
141
|
+
expect(ensureExtension('images/foo.png', 'webp')).toBe('images/foo.png');
|
|
142
|
+
});
|
|
143
|
+
test('appends when extension is unknown (e.g. .bak)', () => {
|
|
144
|
+
expect(ensureExtension('foo.bak', 'webp')).toBe('foo.bak.webp');
|
|
145
|
+
});
|
|
146
|
+
test('null/empty → returned as-is', () => {
|
|
147
|
+
expect(ensureExtension('', 'webp')).toBe('');
|
|
148
|
+
expect(ensureExtension(null, 'webp')).toBe(null);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
describe('transcodeIfNeeded — short-circuits without invoking sharp', () => {
|
|
153
|
+
test('input format already matches target → returns input bytes unchanged', async () => {
|
|
154
|
+
const png = Buffer.from([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0,0,0,0]);
|
|
155
|
+
const r = await transcodeIfNeeded(png, 'png');
|
|
156
|
+
expect(r.transcoded).toBe(false);
|
|
157
|
+
expect(r.reason).toBe('already-target');
|
|
158
|
+
expect(r.buffer).toBe(png);
|
|
159
|
+
expect(r.inputFormat).toBe('png');
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test('unknown input format → writes bytes as-is, reason "unknown-input"', async () => {
|
|
163
|
+
const garbage = Buffer.alloc(64, 0x00);
|
|
164
|
+
const r = await transcodeIfNeeded(garbage, 'webp');
|
|
165
|
+
expect(r.transcoded).toBe(false);
|
|
166
|
+
expect(r.reason).toBe('unknown-input');
|
|
167
|
+
expect(r.buffer).toBe(garbage);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test('GIF input → reason "unsupported-input" (we don\'t transcode animations)', async () => {
|
|
171
|
+
const gif = Buffer.concat([Buffer.from('GIF89a'), Buffer.alloc(8)]);
|
|
172
|
+
const r = await transcodeIfNeeded(gif, 'webp');
|
|
173
|
+
expect(r.transcoded).toBe(false);
|
|
174
|
+
expect(r.reason).toBe('unsupported-input');
|
|
175
|
+
expect(r.inputFormat).toBe('gif');
|
|
176
|
+
expect(r.buffer).toBe(gif);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
describe('transcodeIfNeeded — sharp-unavailable fallback', () => {
|
|
181
|
+
// Sharp may legitimately fail to load on platforms without prebuilt
|
|
182
|
+
// binaries. The module's design is to NEVER fail the render — fall
|
|
183
|
+
// back to writing raw bytes. We can't easily simulate sharp failure
|
|
184
|
+
// without complex module mocking, so the contract is pinned by the
|
|
185
|
+
// existing reason-code structure (also documented in the helper's
|
|
186
|
+
// JSDoc). When sharp IS available + transcode succeeds, the result
|
|
187
|
+
// shape is { transcoded: true, ... } — covered by integration tests
|
|
188
|
+
// that run with sharp present.
|
|
189
|
+
|
|
190
|
+
test('result shape is documented in the function — every failure path returns a buffer', async () => {
|
|
191
|
+
// Exercise once with PNG → WebP. Two outcomes are valid:
|
|
192
|
+
// - sharp loaded → transcoded: true, reason undefined
|
|
193
|
+
// - sharp unavailable → transcoded: false, reason 'sharp-unavailable'
|
|
194
|
+
// EITHER way, .buffer is non-null and .outputFormat is 'webp'.
|
|
195
|
+
const png = Buffer.from([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0,0,0,0]);
|
|
196
|
+
const r = await transcodeIfNeeded(png, 'webp');
|
|
197
|
+
expect(Buffer.isBuffer(r.buffer)).toBe(true);
|
|
198
|
+
expect(r.outputFormat).toBe('webp');
|
|
199
|
+
expect(r.inputFormat).toBe('png');
|
|
200
|
+
if (!r.transcoded) {
|
|
201
|
+
// Acceptable failure modes for this 12-byte fake buffer:
|
|
202
|
+
// - sharp-unavailable (CI / weird host)
|
|
203
|
+
// - transcode-failed (sharp is loaded but rejects 12-byte fake PNG)
|
|
204
|
+
// - unknown-input (some readers may not recognize a header-only buffer)
|
|
205
|
+
expect(['sharp-unavailable', 'transcode-failed', 'unknown-input']).toContain(r.reason);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
});
|