onbuzz 4.5.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +38 -18
- package/package.json +2 -1
- package/scripts/e2e-flow-live.js +598 -0
- package/src/__tests__/resolvePreferredModel.test.js +15 -1
- package/src/core/__test-utils__/flowJudge.js +198 -0
- package/src/core/__tests__/flowCheckpointStore.test.js +140 -0
- package/src/core/__tests__/flowEndToEnd.test.js +565 -0
- package/src/core/__tests__/flowExecutor.test.js +950 -0
- package/src/core/__tests__/flowFieldMapping.test.js +189 -0
- package/src/core/__tests__/flowJudge.test.js +140 -0
- package/src/core/__tests__/flowLint.test.js +119 -0
- package/src/core/__tests__/flowLintClientMirror.test.js +98 -0
- package/src/core/__tests__/flowMigration.test.js +160 -0
- package/src/core/__tests__/flowRetry.test.js +145 -0
- package/src/core/__tests__/flowSavePayload.test.js +169 -0
- package/src/core/__tests__/flowSchema.test.js +438 -0
- package/src/core/__tests__/flowTemplates.test.js +183 -0
- package/src/core/__tests__/flowTypes.test.js +147 -0
- package/src/core/__tests__/flowVersionStore.test.js +123 -0
- package/src/core/__tests__/orchestrator.test.js +38 -0
- package/src/core/__tests__/stateManager.test.js +281 -0
- package/src/core/agentScheduler.js +37 -6
- package/src/core/flowCheckpointStore.js +146 -0
- package/src/core/flowExecutor.js +669 -87
- package/src/core/flowFieldMapping.js +138 -0
- package/src/core/flowLint.js +102 -0
- package/src/core/flowMigration.js +88 -0
- package/src/core/flowRetry.js +103 -0
- package/src/core/flowSchema.js +297 -0
- package/src/core/flowTypes.js +81 -0
- package/src/core/flowVersionStore.js +122 -0
- package/src/core/messageProcessor.js +5 -1
- package/src/core/stateManager.js +249 -15
- package/src/index.js +8 -0
- package/src/interfaces/webServer.js +271 -4
- package/src/modules/widget/galleryStore.js +27 -2
- package/src/services/__tests__/apiKeyManager.test.js +163 -0
- package/src/services/__tests__/flowContextService.test.js +391 -0
- package/src/services/apiKeyManager.js +54 -3
- package/src/services/flowContextService.js +401 -4
- package/src/tools/__tests__/imageFormat.test.js +208 -0
- package/src/tools/__tests__/jobDoneTool.test.js +285 -0
- package/src/tools/imageFormat.js +249 -0
- package/src/tools/imageTool.js +107 -18
- package/src/tools/jobDoneTool.js +111 -3
- package/src/tools/videoTool.js +94 -60
- package/src/tools/webTool.js +9 -0
- package/src/utilities/__tests__/apiKeyPlaceholders.test.js +120 -0
- package/src/utilities/__tests__/brand.test.js +115 -0
- package/src/utilities/apiKeyPlaceholders.js +68 -0
- package/src/utilities/brand.js +93 -0
- package/src/utilities/userDataDir.js +5 -0
- package/web-ui/build/index.html +2 -2
- package/web-ui/build/static/1c-CvuQ3hv-.js +1 -0
- package/web-ui/build/static/abap-BLdv0Jje.js +1 -0
- package/web-ui/build/static/abnf-CGGg8KtC.js +1 -0
- package/web-ui/build/static/abnf-DRXF8AHh.js +1 -0
- package/web-ui/build/static/accesslog-C0v06age.js +1 -0
- package/web-ui/build/static/actionscript-5uhk1qo4.js +1 -0
- package/web-ui/build/static/actionscript-eFh_rL7l.js +1 -0
- package/web-ui/build/static/ada-DX064lsk.js +1 -0
- package/web-ui/build/static/ada-DtDpZJA8.js +1 -0
- package/web-ui/build/static/agda-DPnmQC2V.js +1 -0
- package/web-ui/build/static/al-BJnZv7Mq.js +1 -0
- package/web-ui/build/static/angelscript-BzX4egqM.js +1 -0
- package/web-ui/build/static/antlr4-CpvLBdqN.js +1 -0
- package/web-ui/build/static/apache-CeMpLZgQ.js +1 -0
- package/web-ui/build/static/apacheconf-DuxpNgGg.js +1 -0
- package/web-ui/build/static/apex-BnvL-Zqw.js +1 -0
- package/web-ui/build/static/apl-Cwp1WC58.js +1 -0
- package/web-ui/build/static/applescript-Drjf4gZ_.js +1 -0
- package/web-ui/build/static/applescript-OCRtzdLy.js +1 -0
- package/web-ui/build/static/aql-BT92x5XB.js +1 -0
- package/web-ui/build/static/arcade-BS9r1rKb.js +1 -0
- package/web-ui/build/static/arduino-Dx4b0RsU.js +1 -0
- package/web-ui/build/static/arduino-MC82bxgK.js +1 -0
- package/web-ui/build/static/arff-BPbJPmCK.js +1 -0
- package/web-ui/build/static/armasm-Ae0OYiNN.js +1 -0
- package/web-ui/build/static/asciidoc-BFCjTY8x.js +1 -0
- package/web-ui/build/static/asciidoc-Cum1UNn8.js +1 -0
- package/web-ui/build/static/asm6502-DRrCRZ3g.js +1 -0
- package/web-ui/build/static/asmatmel-QweP0nrX.js +1 -0
- package/web-ui/build/static/aspectj-GSWlVl13.js +1 -0
- package/web-ui/build/static/aspnet-gFBjg3Gc.js +1 -0
- package/web-ui/build/static/autohotkey-BKW8CgdS.js +1 -0
- package/web-ui/build/static/autohotkey-PxYn0v1n.js +1 -0
- package/web-ui/build/static/autoit-Dm1-Ww37.js +1 -0
- package/web-ui/build/static/autoit-ttEVAAKG.js +1 -0
- package/web-ui/build/static/avisynth-B7Wkp41N.js +1 -0
- package/web-ui/build/static/avrasm-CUPF81zm.js +1 -0
- package/web-ui/build/static/avro-idl-DHWmsw82.js +1 -0
- package/web-ui/build/static/awk-CjJ3RSZI.js +1 -0
- package/web-ui/build/static/axapta-C1qEYhtS.js +1 -0
- package/web-ui/build/static/bash-BGEpCDRi.js +1 -0
- package/web-ui/build/static/bash-nKHqg4vr.js +1 -0
- package/web-ui/build/static/basic-BoEGbohL.js +1 -0
- package/web-ui/build/static/basic-LeZDGhzq.js +1 -0
- package/web-ui/build/static/batch-AgpF9rt8.js +1 -0
- package/web-ui/build/static/bbcode-qAuG7NMV.js +1 -0
- package/web-ui/build/static/bicep-BjdiK558.js +1 -0
- package/web-ui/build/static/birb-DAe1WhT3.js +1 -0
- package/web-ui/build/static/bison-BanDUZpy.js +1 -0
- package/web-ui/build/static/bnf-DlBe3_6s.js +1 -0
- package/web-ui/build/static/bnf-QgoO3Q8o.js +1 -0
- package/web-ui/build/static/brainfuck-B1DXmfDc.js +1 -0
- package/web-ui/build/static/brainfuck-B_JhB4QU.js +1 -0
- package/web-ui/build/static/brightscript-C0POlK1a.js +1 -0
- package/web-ui/build/static/bro-CjGWwSC2.js +1 -0
- package/web-ui/build/static/bsl-DXsNn0E7.js +1 -0
- package/web-ui/build/static/c-D-Xouzk3.js +1 -0
- package/web-ui/build/static/c-Df8JpOdZ.js +1 -0
- package/web-ui/build/static/c-like-BQySGMeF.js +1 -0
- package/web-ui/build/static/cal-DLefuKn4.js +1 -0
- package/web-ui/build/static/capnproto-DuI4CHAK.js +1 -0
- package/web-ui/build/static/ceylon-DyUD9r5X.js +1 -0
- package/web-ui/build/static/cfscript-B71LgEx4.js +1 -0
- package/web-ui/build/static/chaiscript-DUx8exmo.js +1 -0
- package/web-ui/build/static/cil-BkH647hL.js +1 -0
- package/web-ui/build/static/clean-4G2AsMGw.js +1 -0
- package/web-ui/build/static/clojure-C41DUPjJ.js +1 -0
- package/web-ui/build/static/clojure-RzWG1SWB.js +1 -0
- package/web-ui/build/static/clojure-repl-C12peSNj.js +1 -0
- package/web-ui/build/static/cmake-D9dyf1Ef.js +1 -0
- package/web-ui/build/static/cmake-X6aOgq7A.js +1 -0
- package/web-ui/build/static/cobol-DQBujvW6.js +1 -0
- package/web-ui/build/static/coffeescript-3uuDLR0C.js +1 -0
- package/web-ui/build/static/coffeescript-BesW_-0N.js +1 -0
- package/web-ui/build/static/concurnas-DUqxEcDq.js +1 -0
- package/web-ui/build/static/coq-BNw0ZmzS.js +1 -0
- package/web-ui/build/static/coq-J6mf-n4i.js +1 -0
- package/web-ui/build/static/cos-B-p2VbRC.js +1 -0
- package/web-ui/build/static/cpp-B91xny9o.js +1 -0
- package/web-ui/build/static/cpp-C-qfcmAQ.js +1 -0
- package/web-ui/build/static/crmsh-CXJSYh9n.js +1 -0
- package/web-ui/build/static/crystal-BZJ_gkDx.js +1 -0
- package/web-ui/build/static/crystal-D7rBvt2Y.js +1 -0
- package/web-ui/build/static/csharp-CHWbNjwN.js +1 -0
- package/web-ui/build/static/csharp-DHH7lbyr.js +1 -0
- package/web-ui/build/static/cshtml-6XKl5N6w.js +1 -0
- package/web-ui/build/static/csp-BwQp4uKS.js +1 -0
- package/web-ui/build/static/csp-LxTXhb7W.js +1 -0
- package/web-ui/build/static/css-JviRe6l1.js +1 -0
- package/web-ui/build/static/css-extras-DdIyhyWh.js +1 -0
- package/web-ui/build/static/csv-BhyLVYKF.js +1 -0
- package/web-ui/build/static/cypher-45QLqKfb.js +1 -0
- package/web-ui/build/static/d-BQuCFdtT.js +1 -0
- package/web-ui/build/static/d-rDpztdwo.js +1 -0
- package/web-ui/build/static/dart-B3HdKwvI.js +1 -0
- package/web-ui/build/static/dart-CxIvlNfF.js +1 -0
- package/web-ui/build/static/dataweave-CMS5SC_F.js +1 -0
- package/web-ui/build/static/dax-C_neqUB4.js +1 -0
- package/web-ui/build/static/delphi-D86BXUtC.js +1 -0
- package/web-ui/build/static/dhall-BGV0CTjz.js +1 -0
- package/web-ui/build/static/diff-Br5L84xu.js +1 -0
- package/web-ui/build/static/diff-C8dJOj7p.js +1 -0
- package/web-ui/build/static/django-CRpfLgb_.js +1 -0
- package/web-ui/build/static/django-Cr0k0BHt.js +1 -0
- package/web-ui/build/static/dns-CvhVGt9J.js +1 -0
- package/web-ui/build/static/dns-zone-file--waGszJ5.js +1 -0
- package/web-ui/build/static/docker-Bp-jYj4d.js +1 -0
- package/web-ui/build/static/dockerfile-B9PF5D-H.js +1 -0
- package/web-ui/build/static/dos-CGjRa73t.js +1 -0
- package/web-ui/build/static/dot---3xJv0W.js +1 -0
- package/web-ui/build/static/dsconfig-ChUbMzIk.js +1 -0
- package/web-ui/build/static/dts-DzVrXhdk.js +1 -0
- package/web-ui/build/static/dust-BuyYJzfS.js +1 -0
- package/web-ui/build/static/ebnf-B4Jhny4j.js +1 -0
- package/web-ui/build/static/ebnf-wTpKeELK.js +1 -0
- package/web-ui/build/static/editorconfig-DijMMyBE.js +1 -0
- package/web-ui/build/static/eiffel-gSk8UUfh.js +1 -0
- package/web-ui/build/static/ejs-U-J4wHaR.js +1 -0
- package/web-ui/build/static/elixir-CLgHOCRk.js +1 -0
- package/web-ui/build/static/elixir-KhfnyoV6.js +1 -0
- package/web-ui/build/static/elm-B0g83jwv.js +1 -0
- package/web-ui/build/static/elm-Bl8qDmwz.js +1 -0
- package/web-ui/build/static/erb-CwkagsxA.js +1 -0
- package/web-ui/build/static/erb-DXfF2Urb.js +1 -0
- package/web-ui/build/static/erlang-BsONy4Br.js +1 -0
- package/web-ui/build/static/erlang-C44ddtgw.js +1 -0
- package/web-ui/build/static/erlang-repl-DhirJ_Ji.js +1 -0
- package/web-ui/build/static/etlua-C71HyvJj.js +1 -0
- package/web-ui/build/static/excel-B_RD_Nc6.js +1 -0
- package/web-ui/build/static/excel-formula-xRVcfp1T.js +1 -0
- package/web-ui/build/static/factor-CftUx68l.js +1 -0
- package/web-ui/build/static/false-DqRtSZRC.js +1 -0
- package/web-ui/build/static/firestore-security-rules-BCG_0nJP.js +1 -0
- package/web-ui/build/static/fix-CnRMAIWg.js +1 -0
- package/web-ui/build/static/flix-DLAgo_-e.js +1 -0
- package/web-ui/build/static/flow-w5YSIX1I.js +1 -0
- package/web-ui/build/static/fortran-CH5byJ0j.js +1 -0
- package/web-ui/build/static/fortran-DK-jnXQF.js +1 -0
- package/web-ui/build/static/fsharp-Cnfw9xB2.js +1 -0
- package/web-ui/build/static/fsharp-hebdfC6F.js +1 -0
- package/web-ui/build/static/ftl-DSSTp35t.js +1 -0
- package/web-ui/build/static/gams-C3akjfKZ.js +1 -0
- package/web-ui/build/static/gap-Dve6kEeL.js +1 -0
- package/web-ui/build/static/gauss-BmUqjv1m.js +1 -0
- package/web-ui/build/static/gcode-CjPpcuxm.js +1 -0
- package/web-ui/build/static/gcode-DdF0Sf0K.js +1 -0
- package/web-ui/build/static/gdscript-uyE_Q4Bz.js +1 -0
- package/web-ui/build/static/gedcom-9_5CrYud.js +1 -0
- package/web-ui/build/static/gherkin-0qL8AiDA.js +1 -0
- package/web-ui/build/static/gherkin-CBXpoWw3.js +1 -0
- package/web-ui/build/static/git-D6Y51k33.js +1 -0
- package/web-ui/build/static/glsl-DnD7skof.js +1 -0
- package/web-ui/build/static/glsl-aij7eTLw.js +1 -0
- package/web-ui/build/static/gml-3zbjVRHR.js +1 -0
- package/web-ui/build/static/gml-BOViyHVy.js +1 -0
- package/web-ui/build/static/gn-lYZFOgaG.js +1 -0
- package/web-ui/build/static/go-D3NQLBKz.js +1 -0
- package/web-ui/build/static/go-_v8tkYQe.js +1 -0
- package/web-ui/build/static/go-module-C6c3_rbX.js +1 -0
- package/web-ui/build/static/golo-BOIzwgKG.js +1 -0
- package/web-ui/build/static/gradle-DdejLgT6.js +1 -0
- package/web-ui/build/static/graphql-BWowSWlo.js +1 -0
- package/web-ui/build/static/groovy-DE_kIGjj.js +1 -0
- package/web-ui/build/static/groovy-DatEqK3Y.js +1 -0
- package/web-ui/build/static/haml-CpEpgDyf.js +1 -0
- package/web-ui/build/static/haml-DbPIKAsr.js +1 -0
- package/web-ui/build/static/handlebars-BcvOygMh.js +1 -0
- package/web-ui/build/static/handlebars-CM_40QlT.js +1 -0
- package/web-ui/build/static/haskell-DVgDTyj3.js +1 -0
- package/web-ui/build/static/haskell-Dm2oiqNu.js +1 -0
- package/web-ui/build/static/haxe--0QfWvD_.js +1 -0
- package/web-ui/build/static/haxe-DClHSH5I.js +1 -0
- package/web-ui/build/static/hcl-BaxNlNAk.js +1 -0
- package/web-ui/build/static/hlsl-Di7PYfJn.js +1 -0
- package/web-ui/build/static/hoon-Bq4hhWSd.js +1 -0
- package/web-ui/build/static/hpkp-Bu1AnCZZ.js +1 -0
- package/web-ui/build/static/hsp-CbIHPOnb.js +1 -0
- package/web-ui/build/static/hsts-inGzMZHb.js +1 -0
- package/web-ui/build/static/htmlbars-B63TZb6k.js +1 -0
- package/web-ui/build/static/http-3wWrh86I.js +1 -0
- package/web-ui/build/static/http-Bv97BGAr.js +1 -0
- package/web-ui/build/static/hy-CIEvnIJC.js +1 -0
- package/web-ui/build/static/ichigojam-BAyO373g.js +1 -0
- package/web-ui/build/static/icon-CGCawTFI.js +1 -0
- package/web-ui/build/static/icu-message-format-C_lOXF7I.js +1 -0
- package/web-ui/build/static/idris-D0SaDFta.js +1 -0
- package/web-ui/build/static/iecst-DIJ6Ei7g.js +1 -0
- package/web-ui/build/static/ignore-CgcF6vXx.js +1 -0
- package/web-ui/build/static/index-CCDUVvvx.js +1 -0
- package/web-ui/build/static/index-Cjg3uZB9.js +1109 -0
- package/web-ui/build/static/index-CjtNtdGN.js +13 -0
- package/web-ui/build/static/index-DpMwgPzf.css +1 -0
- package/web-ui/build/static/inform7-C_MqBtMp.js +1 -0
- package/web-ui/build/static/inform7-CmRJkJSh.js +1 -0
- package/web-ui/build/static/ini-BE6jwIzm.js +1 -0
- package/web-ui/build/static/ini-BJ50J7Sm.js +1 -0
- package/web-ui/build/static/io-Cnt0nyV5.js +1 -0
- package/web-ui/build/static/irpf90-BjRJE_kg.js +1 -0
- package/web-ui/build/static/isbl-C7912t_8.js +1 -0
- package/web-ui/build/static/j-D6ci3wH9.js +1 -0
- package/web-ui/build/static/java-B_gtzL63.js +1 -0
- package/web-ui/build/static/java-CChyLI1p.js +1 -0
- package/web-ui/build/static/javadoc-CGvzgn19.js +1 -0
- package/web-ui/build/static/javadoclike-CI4krpLe.js +1 -0
- package/web-ui/build/static/javascript-CgORCJsx.js +1 -0
- package/web-ui/build/static/javastacktrace-DNnLXvJa.js +1 -0
- package/web-ui/build/static/jboss-cli-DIfGm3Rl.js +1 -0
- package/web-ui/build/static/jexl-CYQxvL_i.js +1 -0
- package/web-ui/build/static/jolie-C2fxUjz7.js +1 -0
- package/web-ui/build/static/jq-j1fAl-OU.js +1 -0
- package/web-ui/build/static/js-extras-Dqx-da8U.js +1 -0
- package/web-ui/build/static/js-templates-jQphR4CW.js +1 -0
- package/web-ui/build/static/jsdoc-BCunhOqo.js +1 -0
- package/web-ui/build/static/json-CljDde4D.js +1 -0
- package/web-ui/build/static/json-Cvzg5_hO.js +1 -0
- package/web-ui/build/static/json5-B19V_yl9.js +1 -0
- package/web-ui/build/static/jsonp-WdmhO5Oi.js +1 -0
- package/web-ui/build/static/jsstacktrace-LpNHn4a_.js +1 -0
- package/web-ui/build/static/jsx-Zw6Egddf.js +1 -0
- package/web-ui/build/static/julia-DPlpJZNN.js +1 -0
- package/web-ui/build/static/julia-DuKc9nrz.js +1 -0
- package/web-ui/build/static/julia-repl-C-LuPMzI.js +1 -0
- package/web-ui/build/static/keepalived-DDl-dK9a.js +1 -0
- package/web-ui/build/static/keyman-DCtgoYKu.js +1 -0
- package/web-ui/build/static/kotlin-D9aFeaCS.js +1 -0
- package/web-ui/build/static/kotlin-DlrR34XG.js +1 -0
- package/web-ui/build/static/kumir-B_aiiAzq.js +1 -0
- package/web-ui/build/static/kusto-CD4lHO1B.js +1 -0
- package/web-ui/build/static/lasso-BAMF8mdd.js +1 -0
- package/web-ui/build/static/latex-BjEyffe7.js +1 -0
- package/web-ui/build/static/latex-NaCSqcbD.js +1 -0
- package/web-ui/build/static/latte-BACpaGl3.js +1 -0
- package/web-ui/build/static/ldif-CRWTiH1W.js +1 -0
- package/web-ui/build/static/leaf-BYydRpJx.js +1 -0
- package/web-ui/build/static/less-BtFu1MXi.js +1 -0
- package/web-ui/build/static/less-COgcqIOM.js +1 -0
- package/web-ui/build/static/lilypond-BMLjCV3G.js +1 -0
- package/web-ui/build/static/liquid-Dr5bQMAB.js +1 -0
- package/web-ui/build/static/lisp-CE1ra7Xs.js +1 -0
- package/web-ui/build/static/lisp-CcOEo5DI.js +1 -0
- package/web-ui/build/static/livecodeserver-DNuOfASY.js +1 -0
- package/web-ui/build/static/livescript-BJor4pxz.js +1 -0
- package/web-ui/build/static/livescript-DFaZj6XM.js +1 -0
- package/web-ui/build/static/llvm-CJtHIXsX.js +1 -0
- package/web-ui/build/static/llvm-d3gQICQs.js +1 -0
- package/web-ui/build/static/log-B0pKN1S4.js +1 -0
- package/web-ui/build/static/lolcode-C_V6Sffm.js +1 -0
- package/web-ui/build/static/lsl-yhp5dB9o.js +1 -0
- package/web-ui/build/static/lua-BDTJq_SO.js +1 -0
- package/web-ui/build/static/lua-BaKkUUd_.js +1 -0
- package/web-ui/build/static/magma-aTzw_jlN.js +1 -0
- package/web-ui/build/static/makefile-FyZn4dZ-.js +1 -0
- package/web-ui/build/static/makefile-Vk7smupm.js +1 -0
- package/web-ui/build/static/markdown-BHavO-Hk.js +1 -0
- package/web-ui/build/static/markdown-CTYy6uqC.js +1 -0
- package/web-ui/build/static/markup-templating-DJWuQB2F.js +1 -0
- package/web-ui/build/static/mathematica-BnMzpFTS.js +1 -0
- package/web-ui/build/static/matlab-BsW3yHe5.js +1 -0
- package/web-ui/build/static/matlab-C8_ylrUg.js +1 -0
- package/web-ui/build/static/maxima-c3e9EB-f.js +1 -0
- package/web-ui/build/static/maxscript-DU-NoCpb.js +1 -0
- package/web-ui/build/static/mel-CcB2EUO0.js +1 -0
- package/web-ui/build/static/mel-u6igP96m.js +1 -0
- package/web-ui/build/static/mercury-YZshmW3v.js +1 -0
- package/web-ui/build/static/mermaid-C9dmgLlU.js +1 -0
- package/web-ui/build/static/mipsasm-BXHH9ztX.js +1 -0
- package/web-ui/build/static/mizar-B1317rho.js +1 -0
- package/web-ui/build/static/mizar-BjaPUUcM.js +1 -0
- package/web-ui/build/static/mojolicious-BQ8vE8HW.js +1 -0
- package/web-ui/build/static/mongodb-P-J2PnwH.js +1 -0
- package/web-ui/build/static/monkey-DcKZEVh6.js +1 -0
- package/web-ui/build/static/monkey-wMAzhDv4.js +1 -0
- package/web-ui/build/static/moonscript-C9Ea7K1o.js +1 -0
- package/web-ui/build/static/moonscript-DAjW1T8X.js +1 -0
- package/web-ui/build/static/n1ql-6nGwiuTr.js +1 -0
- package/web-ui/build/static/n1ql-BxgYqKfs.js +1 -0
- package/web-ui/build/static/n4js-Cqw8_-b7.js +1 -0
- package/web-ui/build/static/nand2tetris-hdl-B3Qrhhfv.js +1 -0
- package/web-ui/build/static/naniscript-BpIC5j6P.js +1 -0
- package/web-ui/build/static/nasm-Dp1z_ttd.js +1 -0
- package/web-ui/build/static/neon-B4RksdIv.js +1 -0
- package/web-ui/build/static/nevod-P34zfD9_.js +1 -0
- package/web-ui/build/static/nginx-CSaiFc4g.js +1 -0
- package/web-ui/build/static/nginx-bZFV7OqP.js +1 -0
- package/web-ui/build/static/nim-D04ADsdj.js +1 -0
- package/web-ui/build/static/nim-D37nbh5y.js +1 -0
- package/web-ui/build/static/nix-BPsQ58gF.js +1 -0
- package/web-ui/build/static/nix-keWnuH3h.js +1 -0
- package/web-ui/build/static/node-repl-rNkVcb6S.js +1 -0
- package/web-ui/build/static/nsis-DT8bhvLc.js +1 -0
- package/web-ui/build/static/nsis-DvfCmyQQ.js +1 -0
- package/web-ui/build/static/objectivec-BaJIzRqu.js +1 -0
- package/web-ui/build/static/objectivec-CmAY0jlQ.js +1 -0
- package/web-ui/build/static/ocaml-Dsf96dbW.js +1 -0
- package/web-ui/build/static/ocaml-SFQJ7AwJ.js +1 -0
- package/web-ui/build/static/opencl-Dp9ILs3s.js +1 -0
- package/web-ui/build/static/openqasm-Bsk-xK6C.js +1 -0
- package/web-ui/build/static/openscad-Dgvp4h50.js +1 -0
- package/web-ui/build/static/oxygene-C9rTsztX.js +1 -0
- package/web-ui/build/static/oz-DNlV-Ssf.js +1 -0
- package/web-ui/build/static/parigp-B7a5XVP7.js +1 -0
- package/web-ui/build/static/parser-nTo2WBxY.js +1 -0
- package/web-ui/build/static/parser3-BSD4cYqf.js +1 -0
- package/web-ui/build/static/pascal-DJxIFBHG.js +1 -0
- package/web-ui/build/static/pascaligo-JdV741ps.js +1 -0
- package/web-ui/build/static/pcaxis-DdexNvEQ.js +1 -0
- package/web-ui/build/static/peoplecode-DxBgZPZT.js +1 -0
- package/web-ui/build/static/perl-C0INln41.js +1 -0
- package/web-ui/build/static/perl-DvRuNidH.js +1 -0
- package/web-ui/build/static/pf-BjguNjII.js +1 -0
- package/web-ui/build/static/pgsql-9w8Z8Ams.js +1 -0
- package/web-ui/build/static/php-DKQIY8Pe.js +1 -0
- package/web-ui/build/static/php-DibEnIhD.js +1 -0
- package/web-ui/build/static/php-extras-CKKhA74Z.js +1 -0
- package/web-ui/build/static/php-template-Cjba7UNU.js +1 -0
- package/web-ui/build/static/phpdoc-QXtTW5az.js +1 -0
- package/web-ui/build/static/plaintext-Cbn61_h_.js +1 -0
- package/web-ui/build/static/plsql-f34z7hfB.js +1 -0
- package/web-ui/build/static/pony-DBSnXJAW.js +1 -0
- package/web-ui/build/static/powerquery-lin81zqH.js +1 -0
- package/web-ui/build/static/powershell-BoyP16Ta.js +1 -0
- package/web-ui/build/static/powershell-CCpHONl6.js +1 -0
- package/web-ui/build/static/processing-Cd7-ycAb.js +1 -0
- package/web-ui/build/static/processing-CeGW9CwE.js +1 -0
- package/web-ui/build/static/profile-DLYi3Uya.js +1 -0
- package/web-ui/build/static/prolog-BVr1f3c4.js +1 -0
- package/web-ui/build/static/prolog-C3D6KhoT.js +1 -0
- package/web-ui/build/static/promql-dviC9B24.js +1 -0
- package/web-ui/build/static/properties-CSNjefFg.js +1 -0
- package/web-ui/build/static/properties-DTAWAQKc.js +1 -0
- package/web-ui/build/static/protobuf-BCYoMCa-.js +1 -0
- package/web-ui/build/static/protobuf-D8G6xbh1.js +1 -0
- package/web-ui/build/static/psl-DzehMnl-.js +1 -0
- package/web-ui/build/static/pug-Cl4m_Cmv.js +1 -0
- package/web-ui/build/static/puppet-CECKDklS.js +1 -0
- package/web-ui/build/static/puppet-ZSk9z7h2.js +1 -0
- package/web-ui/build/static/pure-CRYVKpUf.js +1 -0
- package/web-ui/build/static/purebasic-B1B7jCI9.js +1 -0
- package/web-ui/build/static/purebasic-BdOvLN02.js +1 -0
- package/web-ui/build/static/purescript-CdFZo5U_.js +1 -0
- package/web-ui/build/static/python-B_UnJ1V3.js +1 -0
- package/web-ui/build/static/python-BeSi3a8_.js +1 -0
- package/web-ui/build/static/python-repl-BBmtoedD.js +1 -0
- package/web-ui/build/static/q-Ery9rED_.js +1 -0
- package/web-ui/build/static/q-OEzRNQWZ.js +1 -0
- package/web-ui/build/static/qml-DdHTOYCC.js +1 -0
- package/web-ui/build/static/qml-DqjqC3TV.js +1 -0
- package/web-ui/build/static/qore-D3qGrct2.js +1 -0
- package/web-ui/build/static/qsharp-DdQgHY8o.js +1 -0
- package/web-ui/build/static/r-BsnBh-Gb.js +1 -0
- package/web-ui/build/static/r-CgLmD3ej.js +1 -0
- package/web-ui/build/static/racket-CgSPkQxA.js +1 -0
- package/web-ui/build/static/reason-BRJ4xDT3.js +1 -0
- package/web-ui/build/static/reasonml-B8V18bIF.js +1 -0
- package/web-ui/build/static/regex-C8qp_5tY.js +1 -0
- package/web-ui/build/static/rego-B3dQMEmR.js +1 -0
- package/web-ui/build/static/renpy-BmlUaEOQ.js +1 -0
- package/web-ui/build/static/rest-XlDNtjp0.js +1 -0
- package/web-ui/build/static/rib-BfquiuWk.js +1 -0
- package/web-ui/build/static/rip-dGRhlG0v.js +1 -0
- package/web-ui/build/static/roboconf-CtBSSFaA.js +1 -0
- package/web-ui/build/static/roboconf-wrbztr2r.js +1 -0
- package/web-ui/build/static/robotframework-BSxuJaY6.js +1 -0
- package/web-ui/build/static/routeros-DHKFvEvZ.js +1 -0
- package/web-ui/build/static/rsl-BhjvE0Cr.js +1 -0
- package/web-ui/build/static/ruby-BMED8W31.js +1 -0
- package/web-ui/build/static/ruby-BkE7uZGd.js +1 -0
- package/web-ui/build/static/ruleslanguage-DGe1m8Id.js +1 -0
- package/web-ui/build/static/rust-CUje9n_P.js +1 -0
- package/web-ui/build/static/rust-O67yEsAu.js +1 -0
- package/web-ui/build/static/sas-BpDWmnoa.js +1 -0
- package/web-ui/build/static/sas-DRBVod_5.js +1 -0
- package/web-ui/build/static/sass-CdUBh_kW.js +1 -0
- package/web-ui/build/static/scala-BvUTPbg2.js +1 -0
- package/web-ui/build/static/scala-DmXpVBFR.js +1 -0
- package/web-ui/build/static/scheme-BfzSegEb.js +1 -0
- package/web-ui/build/static/scheme-CL7dxV3L.js +1 -0
- package/web-ui/build/static/scilab-Bwx8K6ut.js +1 -0
- package/web-ui/build/static/scss-Bk3cnVi-.js +1 -0
- package/web-ui/build/static/scss-CEq_Uo2G.js +1 -0
- package/web-ui/build/static/shell-CH2lH60k.js +1 -0
- package/web-ui/build/static/shell-session-Dsc6nnXg.js +1 -0
- package/web-ui/build/static/smali-DR57iO-M.js +1 -0
- package/web-ui/build/static/smali-QDgUokkE.js +1 -0
- package/web-ui/build/static/smalltalk-CNWYoGI5.js +1 -0
- package/web-ui/build/static/smalltalk-DuKK00UG.js +1 -0
- package/web-ui/build/static/smarty-CM_K74KX.js +1 -0
- package/web-ui/build/static/sml-B-u4vtVQ.js +1 -0
- package/web-ui/build/static/sml-CnAed_Dv.js +1 -0
- package/web-ui/build/static/solidity-Bc_FUKPw.js +1 -0
- package/web-ui/build/static/solution-file-CE-Ffn8a.js +1 -0
- package/web-ui/build/static/soy-B__lNQNx.js +1 -0
- package/web-ui/build/static/sparql-BZnN0yju.js +1 -0
- package/web-ui/build/static/splunk-spl-DIs_BiUo.js +1 -0
- package/web-ui/build/static/sqf-DNSlhOUj.js +1 -0
- package/web-ui/build/static/sqf-DwPev5qJ.js +1 -0
- package/web-ui/build/static/sql-C9UaJUCf.js +1 -0
- package/web-ui/build/static/sql-DAnJSRyV.js +1 -0
- package/web-ui/build/static/sql_more-DMMfa_Zg.js +1 -0
- package/web-ui/build/static/squirrel-Bevu4MOl.js +1 -0
- package/web-ui/build/static/stan-Bs_yMVnC.js +1 -0
- package/web-ui/build/static/stan-Cduy4Z3W.js +1 -0
- package/web-ui/build/static/stata-BrHJdKRc.js +1 -0
- package/web-ui/build/static/step21-CGhxzCID.js +1 -0
- package/web-ui/build/static/stylus-B2lueE5_.js +1 -0
- package/web-ui/build/static/stylus-pKniqDuc.js +1 -0
- package/web-ui/build/static/subunit-B5WE5S5P.js +1 -0
- package/web-ui/build/static/swift-CEi576mT.js +1 -0
- package/web-ui/build/static/swift-CQCuFcEK.js +1 -0
- package/web-ui/build/static/systemd-CF-EHggg.js +1 -0
- package/web-ui/build/static/t4-cs-DWdn0RQB.js +1 -0
- package/web-ui/build/static/t4-templating-C15ubdW6.js +1 -0
- package/web-ui/build/static/t4-vb-Cz2QCDLO.js +1 -0
- package/web-ui/build/static/taggerscript-CfU_hv7J.js +1 -0
- package/web-ui/build/static/tap-2-gLM4Lw.js +1 -0
- package/web-ui/build/static/tap-M44CQJkj.js +1 -0
- package/web-ui/build/static/tcl-BMpkwsCa.js +1 -0
- package/web-ui/build/static/tcl-CfF-clAT.js +1 -0
- package/web-ui/build/static/textile-CUkgUEkV.js +1 -0
- package/web-ui/build/static/thrift-daJZ1DGJ.js +1 -0
- package/web-ui/build/static/toml-DnW5prhH.js +1 -0
- package/web-ui/build/static/tp-ZqeJLSGg.js +1 -0
- package/web-ui/build/static/tremor-WcELDSvz.js +1 -0
- package/web-ui/build/static/tsx-BVww6xUP.js +1 -0
- package/web-ui/build/static/tt2-Cxt3LLr_.js +1 -0
- package/web-ui/build/static/turtle-DmRTxNN8.js +1 -0
- package/web-ui/build/static/twig-DcLADpYg.js +1 -0
- package/web-ui/build/static/twig-Drdxszx_.js +1 -0
- package/web-ui/build/static/typescript-CgVWCuS9.js +1 -0
- package/web-ui/build/static/typescript-D3GjnDi9.js +1 -0
- package/web-ui/build/static/typoscript-B4qyGuOT.js +1 -0
- package/web-ui/build/static/unrealscript-BtIQeIeR.js +1 -0
- package/web-ui/build/static/uorazor-eWa_YDYv.js +1 -0
- package/web-ui/build/static/uri-CxsgAGHN.js +1 -0
- package/web-ui/build/static/v-D84eyWwn.js +1 -0
- package/web-ui/build/static/vala-Ccb9w5DW.js +1 -0
- package/web-ui/build/static/vala-MsPY7Xer.js +1 -0
- package/web-ui/build/static/vbnet-B33DMpXq.js +1 -0
- package/web-ui/build/static/vbnet-CaLY-AOH.js +1 -0
- package/web-ui/build/static/vbscript-DrXwNwNu.js +1 -0
- package/web-ui/build/static/vbscript-html-OTJEVr5m.js +1 -0
- package/web-ui/build/static/velocity-q0bXdAL4.js +1 -0
- package/web-ui/build/static/verilog-BD-Nxyqa.js +1 -0
- package/web-ui/build/static/verilog-PFy9sucN.js +1 -0
- package/web-ui/build/static/vhdl-BeCVyLiK.js +1 -0
- package/web-ui/build/static/vhdl-CMHdBpc5.js +1 -0
- package/web-ui/build/static/vim-3d_DOCsL.js +1 -0
- package/web-ui/build/static/vim-Bl5swMbH.js +1 -0
- package/web-ui/build/static/visual-basic-CjOvSeMg.js +1 -0
- package/web-ui/build/static/warpscript-C2EL35K2.js +1 -0
- package/web-ui/build/static/wasm-DmFD8VgH.js +1 -0
- package/web-ui/build/static/web-idl-RnzsvoQV.js +1 -0
- package/web-ui/build/static/wiki-Bu-zrPhW.js +1 -0
- package/web-ui/build/static/wolfram-CYYr3oaW.js +1 -0
- package/web-ui/build/static/wren-BXwkGwpn.js +1 -0
- package/web-ui/build/static/x86asm-_F19Kl5Y.js +1 -0
- package/web-ui/build/static/xeora-BmVPgL2I.js +1 -0
- package/web-ui/build/static/xl-68telKZ2.js +1 -0
- package/web-ui/build/static/xml-DPdaRgU0.js +1 -0
- package/web-ui/build/static/xml-doc-Aa64lijn.js +1 -0
- package/web-ui/build/static/xojo-DminlfyC.js +1 -0
- package/web-ui/build/static/xquery-BC1P9u6q.js +1 -0
- package/web-ui/build/static/xquery-kRz8gtls.js +1 -0
- package/web-ui/build/static/yaml-Bh9xHEaX.js +1 -0
- package/web-ui/build/static/yaml-CQW4NAe0.js +1 -0
- package/web-ui/build/static/yang-joHFzzXq.js +1 -0
- package/web-ui/build/static/zephir-BDGPNzsB.js +1 -0
- package/web-ui/build/static/zig-DtLmllYo.js +1 -0
- package/web-ui/build/static/1c-Cxgysx0K.js +0 -1
- package/web-ui/build/static/abap-D9Pd8DUG.js +0 -1
- package/web-ui/build/static/abnf-CHs5P8yl.js +0 -1
- package/web-ui/build/static/abnf-D5OtFEZO.js +0 -1
- package/web-ui/build/static/accesslog-CTD5Frmr.js +0 -1
- package/web-ui/build/static/actionscript-BN0BKQI7.js +0 -1
- package/web-ui/build/static/actionscript-DQNwbYlU.js +0 -1
- package/web-ui/build/static/ada-8O7AmGii.js +0 -1
- package/web-ui/build/static/ada-p8y2qCLB.js +0 -1
- package/web-ui/build/static/agda-BzT4bKSx.js +0 -1
- package/web-ui/build/static/al-Caq7o9RG.js +0 -1
- package/web-ui/build/static/angelscript-DivMpSHf.js +0 -1
- package/web-ui/build/static/antlr4-B1D_tnKH.js +0 -1
- package/web-ui/build/static/apache-l88_LooT.js +0 -1
- package/web-ui/build/static/apacheconf-kaxXABFE.js +0 -1
- package/web-ui/build/static/apex-CSdSRWUv.js +0 -1
- package/web-ui/build/static/apl-CHwVg89T.js +0 -1
- package/web-ui/build/static/applescript-C64qdYZf.js +0 -1
- package/web-ui/build/static/applescript-CqTGrBVp.js +0 -1
- package/web-ui/build/static/aql-BwKKr7z7.js +0 -1
- package/web-ui/build/static/arcade-C6oqHEwh.js +0 -1
- package/web-ui/build/static/arduino-DB4E20Km.js +0 -1
- package/web-ui/build/static/arduino-DKpgmHjE.js +0 -1
- package/web-ui/build/static/arff-CBbf8E8O.js +0 -1
- package/web-ui/build/static/armasm-Bogg7lrz.js +0 -1
- package/web-ui/build/static/asciidoc-3ZlDsfKD.js +0 -1
- package/web-ui/build/static/asciidoc-Cc88g_au.js +0 -1
- package/web-ui/build/static/asm6502-B4rN-vZ1.js +0 -1
- package/web-ui/build/static/asmatmel-B8zZLWGk.js +0 -1
- package/web-ui/build/static/aspectj-XdNtCtbN.js +0 -1
- package/web-ui/build/static/aspnet-DZVKB5n1.js +0 -1
- package/web-ui/build/static/autohotkey-CxDWLQqM.js +0 -1
- package/web-ui/build/static/autohotkey-DJStPrtS.js +0 -1
- package/web-ui/build/static/autoit-BWirJOCg.js +0 -1
- package/web-ui/build/static/autoit-CJcfmsnl.js +0 -1
- package/web-ui/build/static/avisynth-C7JQe3L7.js +0 -1
- package/web-ui/build/static/avrasm-CMiuHQvu.js +0 -1
- package/web-ui/build/static/avro-idl-kaRVyxMP.js +0 -1
- package/web-ui/build/static/awk-CQ70Cyh1.js +0 -1
- package/web-ui/build/static/axapta-DRxAzlG8.js +0 -1
- package/web-ui/build/static/bash-B2XqEYpT.js +0 -1
- package/web-ui/build/static/bash-D-D1taMA.js +0 -1
- package/web-ui/build/static/basic-Da1x7OIZ.js +0 -1
- package/web-ui/build/static/basic-Dslk2ZwT.js +0 -1
- package/web-ui/build/static/batch-B0wJNPoF.js +0 -1
- package/web-ui/build/static/bbcode-BXDdc2HS.js +0 -1
- package/web-ui/build/static/bicep-iiH-nx9J.js +0 -1
- package/web-ui/build/static/birb-DuTqqibI.js +0 -1
- package/web-ui/build/static/bison-D1Hw6owA.js +0 -1
- package/web-ui/build/static/bnf-BRhzfr87.js +0 -1
- package/web-ui/build/static/bnf-u1Iy1Ku7.js +0 -1
- package/web-ui/build/static/brainfuck-C4R5VJ3_.js +0 -1
- package/web-ui/build/static/brainfuck-C8niWF0i.js +0 -1
- package/web-ui/build/static/brightscript-DavMfkHx.js +0 -1
- package/web-ui/build/static/bro-CEMPoYum.js +0 -1
- package/web-ui/build/static/bsl-COeqiMqc.js +0 -1
- package/web-ui/build/static/c-BaaVQwFt.js +0 -1
- package/web-ui/build/static/c-BvALLiMv.js +0 -1
- package/web-ui/build/static/c-like-C4yx6s7b.js +0 -1
- package/web-ui/build/static/cal-CSxgKgNR.js +0 -1
- package/web-ui/build/static/capnproto-C9cMEmIo.js +0 -1
- package/web-ui/build/static/ceylon-Dj67Lf2T.js +0 -1
- package/web-ui/build/static/cfscript-BhALECgj.js +0 -1
- package/web-ui/build/static/chaiscript-Cg5weNRB.js +0 -1
- package/web-ui/build/static/cil-BR-JCsPu.js +0 -1
- package/web-ui/build/static/clean-xJMmqZ4X.js +0 -1
- package/web-ui/build/static/clojure-9C3tRo_T.js +0 -1
- package/web-ui/build/static/clojure-C2KNwa0h.js +0 -1
- package/web-ui/build/static/clojure-repl-B-pke3nS.js +0 -1
- package/web-ui/build/static/cmake-C0BFHpjZ.js +0 -1
- package/web-ui/build/static/cmake-DYoa_Kz_.js +0 -1
- package/web-ui/build/static/cobol-Bj_qcMsY.js +0 -1
- package/web-ui/build/static/coffeescript-C2KEz8d0.js +0 -1
- package/web-ui/build/static/coffeescript-CQsP9N_M.js +0 -1
- package/web-ui/build/static/concurnas-Ceu24KQb.js +0 -1
- package/web-ui/build/static/coq-CP7VW0bo.js +0 -1
- package/web-ui/build/static/coq-DQry0I8v.js +0 -1
- package/web-ui/build/static/cos-DAjhu7pi.js +0 -1
- package/web-ui/build/static/cpp-BwHJ0JtK.js +0 -1
- package/web-ui/build/static/cpp-Dro3stzS.js +0 -1
- package/web-ui/build/static/crmsh-Bnwknpi9.js +0 -1
- package/web-ui/build/static/crystal-B7TVeIo6.js +0 -1
- package/web-ui/build/static/crystal-Cy5JlSrW.js +0 -1
- package/web-ui/build/static/csharp-CeouYZK3.js +0 -1
- package/web-ui/build/static/csharp-Dv2oxLAS.js +0 -1
- package/web-ui/build/static/cshtml-C9IRHsFH.js +0 -1
- package/web-ui/build/static/csp-C85pVqYT.js +0 -1
- package/web-ui/build/static/csp-MJntgwIj.js +0 -1
- package/web-ui/build/static/css-DWTfQjN4.js +0 -1
- package/web-ui/build/static/css-extras-BmVbsPjr.js +0 -1
- package/web-ui/build/static/csv-zUw-JkSo.js +0 -1
- package/web-ui/build/static/cypher-DQOOp0bG.js +0 -1
- package/web-ui/build/static/d-B7Cku9c8.js +0 -1
- package/web-ui/build/static/d-Lnzvs4Wd.js +0 -1
- package/web-ui/build/static/dart-CeK_W9Mg.js +0 -1
- package/web-ui/build/static/dart-Z5nwVCn_.js +0 -1
- package/web-ui/build/static/dataweave-Bv7GTsiJ.js +0 -1
- package/web-ui/build/static/dax-CxkNT7ml.js +0 -1
- package/web-ui/build/static/delphi-BnBBHmHI.js +0 -1
- package/web-ui/build/static/dhall-DzzkunJZ.js +0 -1
- package/web-ui/build/static/diff-BKZzYJzc.js +0 -1
- package/web-ui/build/static/diff-BfTiUZV3.js +0 -1
- package/web-ui/build/static/django-BY4l8873.js +0 -1
- package/web-ui/build/static/django-NRVGlUZ_.js +0 -1
- package/web-ui/build/static/dns-Dvc8YawT.js +0 -1
- package/web-ui/build/static/dns-zone-file-CkaiOrlK.js +0 -1
- package/web-ui/build/static/docker-BQXYNHPO.js +0 -1
- package/web-ui/build/static/dockerfile-CkHfYmB1.js +0 -1
- package/web-ui/build/static/dos-Cj0YcQAg.js +0 -1
- package/web-ui/build/static/dot-zgBkKTS-.js +0 -1
- package/web-ui/build/static/dsconfig-Yy07ZSap.js +0 -1
- package/web-ui/build/static/dts-DyTWnuFT.js +0 -1
- package/web-ui/build/static/dust-CKq7f4u7.js +0 -1
- package/web-ui/build/static/ebnf-DJRrwYUt.js +0 -1
- package/web-ui/build/static/ebnf-RHbRUELR.js +0 -1
- package/web-ui/build/static/editorconfig-BPnyfBW2.js +0 -1
- package/web-ui/build/static/eiffel-yj-2JB74.js +0 -1
- package/web-ui/build/static/ejs-DitQDEAj.js +0 -1
- package/web-ui/build/static/elixir-3QGdRPiZ.js +0 -1
- package/web-ui/build/static/elixir-DjVihWJd.js +0 -1
- package/web-ui/build/static/elm-BY6TIO5U.js +0 -1
- package/web-ui/build/static/elm-CRkIBVgc.js +0 -1
- package/web-ui/build/static/erb-Djhpl6Qv.js +0 -1
- package/web-ui/build/static/erb-T-e_0q4M.js +0 -1
- package/web-ui/build/static/erlang-BHne0Sow.js +0 -1
- package/web-ui/build/static/erlang-BwFMbXMn.js +0 -1
- package/web-ui/build/static/erlang-repl-BkeLNBB1.js +0 -1
- package/web-ui/build/static/etlua-C7wAJl9b.js +0 -1
- package/web-ui/build/static/excel-DxE1g8nj.js +0 -1
- package/web-ui/build/static/excel-formula-CJfyOSIQ.js +0 -1
- package/web-ui/build/static/factor-CoKZ2w9G.js +0 -1
- package/web-ui/build/static/false-R3UgYwdZ.js +0 -1
- package/web-ui/build/static/firestore-security-rules-Na-FK95T.js +0 -1
- package/web-ui/build/static/fix-CvUjGqrP.js +0 -1
- package/web-ui/build/static/flix-DZcdobtd.js +0 -1
- package/web-ui/build/static/flow-Bs4ybDfF.js +0 -1
- package/web-ui/build/static/fortran-Bo7HQHVz.js +0 -1
- package/web-ui/build/static/fortran-C01QKAjv.js +0 -1
- package/web-ui/build/static/fsharp-Bl0db-E4.js +0 -1
- package/web-ui/build/static/fsharp-CyZIu__H.js +0 -1
- package/web-ui/build/static/ftl-CWXbnuJ8.js +0 -1
- package/web-ui/build/static/gams-BqHeBOiK.js +0 -1
- package/web-ui/build/static/gap-Dotaw9CX.js +0 -1
- package/web-ui/build/static/gauss-BT78eAPL.js +0 -1
- package/web-ui/build/static/gcode-MKCsCHbV.js +0 -1
- package/web-ui/build/static/gcode-bZIzS7dq.js +0 -1
- package/web-ui/build/static/gdscript-BfFdzROd.js +0 -1
- package/web-ui/build/static/gedcom-C-0fkvQT.js +0 -1
- package/web-ui/build/static/gherkin-Bgefs1Ac.js +0 -1
- package/web-ui/build/static/gherkin-BwLhttSG.js +0 -1
- package/web-ui/build/static/git-Cf3XNFwK.js +0 -1
- package/web-ui/build/static/glsl-BRBvgtKX.js +0 -1
- package/web-ui/build/static/glsl-Ci0Ywihb.js +0 -1
- package/web-ui/build/static/gml-BGED3ZV5.js +0 -1
- package/web-ui/build/static/gml-Bo5ybH2Z.js +0 -1
- package/web-ui/build/static/gn-Dvq3uq8q.js +0 -1
- package/web-ui/build/static/go-DEXubI7V.js +0 -1
- package/web-ui/build/static/go-DQ-rOBtr.js +0 -1
- package/web-ui/build/static/go-module-CJ0C_rZQ.js +0 -1
- package/web-ui/build/static/golo-BMZyESOG.js +0 -1
- package/web-ui/build/static/gradle-DamtVT5m.js +0 -1
- package/web-ui/build/static/graphql-BERukF58.js +0 -1
- package/web-ui/build/static/groovy-B-WmRKEQ.js +0 -1
- package/web-ui/build/static/groovy-BzgGHCpW.js +0 -1
- package/web-ui/build/static/haml-B50hpu0J.js +0 -1
- package/web-ui/build/static/haml-vZAqNnLr.js +0 -1
- package/web-ui/build/static/handlebars-ChvSiZA5.js +0 -1
- package/web-ui/build/static/handlebars-z32GTNvC.js +0 -1
- package/web-ui/build/static/haskell-BWLVCHRl.js +0 -1
- package/web-ui/build/static/haskell-CZ4HT-QV.js +0 -1
- package/web-ui/build/static/haxe-Dff2UzKb.js +0 -1
- package/web-ui/build/static/haxe-DtUMfT4Y.js +0 -1
- package/web-ui/build/static/hcl-CPdCn21C.js +0 -1
- package/web-ui/build/static/hlsl-Ddnzpafa.js +0 -1
- package/web-ui/build/static/hoon-BmzYN5g6.js +0 -1
- package/web-ui/build/static/hpkp-Cf4BtYzp.js +0 -1
- package/web-ui/build/static/hsp-CtNdizh5.js +0 -1
- package/web-ui/build/static/hsts-ChmUnrWY.js +0 -1
- package/web-ui/build/static/htmlbars-FvxUz397.js +0 -1
- package/web-ui/build/static/http-C91BqIc4.js +0 -1
- package/web-ui/build/static/http-DUkMpz6R.js +0 -1
- package/web-ui/build/static/hy-BgEorqc6.js +0 -1
- package/web-ui/build/static/ichigojam-CyJ85XqZ.js +0 -1
- package/web-ui/build/static/icon-CWVwUSUB.js +0 -1
- package/web-ui/build/static/icu-message-format-DQ5Vf-57.js +0 -1
- package/web-ui/build/static/idris-25epvnkz.js +0 -1
- package/web-ui/build/static/iecst-D_Q4A3Ao.js +0 -1
- package/web-ui/build/static/ignore-Dn3TUem-.js +0 -1
- package/web-ui/build/static/index-1GAqwN2P.js +0 -1029
- package/web-ui/build/static/index-Bbt0N_qA.css +0 -1
- package/web-ui/build/static/index-COM0znG6.js +0 -13
- package/web-ui/build/static/index-Cq1FjdFd.js +0 -1
- package/web-ui/build/static/inform7-CFrNuUCE.js +0 -1
- package/web-ui/build/static/inform7-DKEqg7Td.js +0 -1
- package/web-ui/build/static/ini-C-WeV3rA.js +0 -1
- package/web-ui/build/static/ini-DNeLlQLb.js +0 -1
- package/web-ui/build/static/io-CHx2lS-R.js +0 -1
- package/web-ui/build/static/irpf90-D4fNrYKT.js +0 -1
- package/web-ui/build/static/isbl-BwxgZUmw.js +0 -1
- package/web-ui/build/static/j-EkuSi-Ss.js +0 -1
- package/web-ui/build/static/java-BtphFsNb.js +0 -1
- package/web-ui/build/static/java-D6Ksxtks.js +0 -1
- package/web-ui/build/static/javadoc-COfrpXIF.js +0 -1
- package/web-ui/build/static/javadoclike-C0DIBgSo.js +0 -1
- package/web-ui/build/static/javascript-D9_bdns_.js +0 -1
- package/web-ui/build/static/javastacktrace-BgesTIoE.js +0 -1
- package/web-ui/build/static/jboss-cli-BCBm8RaA.js +0 -1
- package/web-ui/build/static/jexl-Bur7gjJl.js +0 -1
- package/web-ui/build/static/jolie-CG2HtqVF.js +0 -1
- package/web-ui/build/static/jq-BjcZo4Ta.js +0 -1
- package/web-ui/build/static/js-extras-DPWP-xWb.js +0 -1
- package/web-ui/build/static/js-templates-BYQFylC_.js +0 -1
- package/web-ui/build/static/jsdoc-CiOxmgl5.js +0 -1
- package/web-ui/build/static/json-C2-b3Xpo.js +0 -1
- package/web-ui/build/static/json-D7ok2MJS.js +0 -1
- package/web-ui/build/static/json5-DRNOdkus.js +0 -1
- package/web-ui/build/static/jsonp-FFJzAxUk.js +0 -1
- package/web-ui/build/static/jsstacktrace-C4ki-LaP.js +0 -1
- package/web-ui/build/static/jsx-ZxGQpUNq.js +0 -1
- package/web-ui/build/static/julia-7ooB8a4b.js +0 -1
- package/web-ui/build/static/julia-DzjCRNEr.js +0 -1
- package/web-ui/build/static/julia-repl-pceaZSLt.js +0 -1
- package/web-ui/build/static/keepalived-BQgTZddo.js +0 -1
- package/web-ui/build/static/keyman-Cqlba6tn.js +0 -1
- package/web-ui/build/static/kotlin-BygmvqBG.js +0 -1
- package/web-ui/build/static/kotlin-DrN0ycN8.js +0 -1
- package/web-ui/build/static/kumir-YhasANvI.js +0 -1
- package/web-ui/build/static/kusto-LQa6MD2B.js +0 -1
- package/web-ui/build/static/lasso-Ca3RFbcE.js +0 -1
- package/web-ui/build/static/latex-BoQj21fG.js +0 -1
- package/web-ui/build/static/latex-ZxewREOs.js +0 -1
- package/web-ui/build/static/latte-40SpSG4q.js +0 -1
- package/web-ui/build/static/ldif-CzTJxBjJ.js +0 -1
- package/web-ui/build/static/leaf-DO9LaVNe.js +0 -1
- package/web-ui/build/static/less-BoClFdvD.js +0 -1
- package/web-ui/build/static/less-C1s1U6-n.js +0 -1
- package/web-ui/build/static/lilypond-D5wHKW8A.js +0 -1
- package/web-ui/build/static/liquid-BRQzL-S2.js +0 -1
- package/web-ui/build/static/lisp-8q-QRYKi.js +0 -1
- package/web-ui/build/static/lisp-J8TPaPPb.js +0 -1
- package/web-ui/build/static/livecodeserver-Dcr3yGmD.js +0 -1
- package/web-ui/build/static/livescript-BUEQmlAe.js +0 -1
- package/web-ui/build/static/livescript-DsId63Ot.js +0 -1
- package/web-ui/build/static/llvm-B3CCzYxo.js +0 -1
- package/web-ui/build/static/llvm-kQGfyqnj.js +0 -1
- package/web-ui/build/static/log-BlA5152b.js +0 -1
- package/web-ui/build/static/lolcode-8WRAMeb2.js +0 -1
- package/web-ui/build/static/lsl-BZUMQNE2.js +0 -1
- package/web-ui/build/static/lua-C4hJ-Gql.js +0 -1
- package/web-ui/build/static/lua-RxOeZV_z.js +0 -1
- package/web-ui/build/static/magma-U9kYv2QD.js +0 -1
- package/web-ui/build/static/makefile-1Cu2rVDg.js +0 -1
- package/web-ui/build/static/makefile-mmZ8lbad.js +0 -1
- package/web-ui/build/static/markdown-CCqDOXhR.js +0 -1
- package/web-ui/build/static/markdown-CVOmqzdD.js +0 -1
- package/web-ui/build/static/markup-templating-C7eiVR0j.js +0 -1
- package/web-ui/build/static/mathematica-BbKHQ6zH.js +0 -1
- package/web-ui/build/static/matlab-BbMwJ6T0.js +0 -1
- package/web-ui/build/static/matlab-gHn5UhMb.js +0 -1
- package/web-ui/build/static/maxima-CuB3n0ri.js +0 -1
- package/web-ui/build/static/maxscript-jhOix4gn.js +0 -1
- package/web-ui/build/static/mel-Bpjqa7Ec.js +0 -1
- package/web-ui/build/static/mel-QxMxBq03.js +0 -1
- package/web-ui/build/static/mercury-C8IdDyFB.js +0 -1
- package/web-ui/build/static/mermaid-v41WDixf.js +0 -1
- package/web-ui/build/static/mipsasm-kYH27KXy.js +0 -1
- package/web-ui/build/static/mizar-BCJI9Jxa.js +0 -1
- package/web-ui/build/static/mizar-BCxP_6pj.js +0 -1
- package/web-ui/build/static/mojolicious-C7DC_CUp.js +0 -1
- package/web-ui/build/static/mongodb-DvBX00WY.js +0 -1
- package/web-ui/build/static/monkey-B7KjOZtt.js +0 -1
- package/web-ui/build/static/monkey-CFKZd6lx.js +0 -1
- package/web-ui/build/static/moonscript-44jD_uAZ.js +0 -1
- package/web-ui/build/static/moonscript-B3KahKf5.js +0 -1
- package/web-ui/build/static/n1ql-CxJOkBbD.js +0 -1
- package/web-ui/build/static/n1ql-FJFE6P7E.js +0 -1
- package/web-ui/build/static/n4js-D5jJTGdO.js +0 -1
- package/web-ui/build/static/nand2tetris-hdl-DlsCaky2.js +0 -1
- package/web-ui/build/static/naniscript-C3YsvWgN.js +0 -1
- package/web-ui/build/static/nasm-DCGKvOZq.js +0 -1
- package/web-ui/build/static/neon-nyFNinx-.js +0 -1
- package/web-ui/build/static/nevod-C5PnMzAW.js +0 -1
- package/web-ui/build/static/nginx-BUgMakda.js +0 -1
- package/web-ui/build/static/nginx-C5JBKsuz.js +0 -1
- package/web-ui/build/static/nim-BFu6fQgc.js +0 -1
- package/web-ui/build/static/nim-D0uh-nR9.js +0 -1
- package/web-ui/build/static/nix-BiOn3l1e.js +0 -1
- package/web-ui/build/static/nix-tapJszPl.js +0 -1
- package/web-ui/build/static/node-repl-BTp9CFzE.js +0 -1
- package/web-ui/build/static/nsis-B7hV5A06.js +0 -1
- package/web-ui/build/static/nsis-DLshnCv-.js +0 -1
- package/web-ui/build/static/objectivec-BKjt_sKE.js +0 -1
- package/web-ui/build/static/objectivec-KUMYgk5w.js +0 -1
- package/web-ui/build/static/ocaml-CV2nKA_A.js +0 -1
- package/web-ui/build/static/ocaml-ZyZ-dXmE.js +0 -1
- package/web-ui/build/static/opencl-igIWfc0n.js +0 -1
- package/web-ui/build/static/openqasm-ByCPmCpS.js +0 -1
- package/web-ui/build/static/openscad-Db6ypam1.js +0 -1
- package/web-ui/build/static/oxygene-CBbaQWRB.js +0 -1
- package/web-ui/build/static/oz-lEl_mXVw.js +0 -1
- package/web-ui/build/static/parigp-c2FbheBr.js +0 -1
- package/web-ui/build/static/parser-Ba6uivHf.js +0 -1
- package/web-ui/build/static/parser3-Cm5cgVSQ.js +0 -1
- package/web-ui/build/static/pascal-JgY-dd52.js +0 -1
- package/web-ui/build/static/pascaligo-BjSdyegq.js +0 -1
- package/web-ui/build/static/pcaxis-CDdxDfqJ.js +0 -1
- package/web-ui/build/static/peoplecode-BCPhsbK6.js +0 -1
- package/web-ui/build/static/perl-ClVPikLH.js +0 -1
- package/web-ui/build/static/perl-pRjXJ4uc.js +0 -1
- package/web-ui/build/static/pf-D6VrFfuf.js +0 -1
- package/web-ui/build/static/pgsql-DAv4ezCU.js +0 -1
- package/web-ui/build/static/php-Bz3Bn1G_.js +0 -1
- package/web-ui/build/static/php-extras-B8k1hZ7O.js +0 -1
- package/web-ui/build/static/php-template-DJJiMC8Q.js +0 -1
- package/web-ui/build/static/php-zCXGNRnB.js +0 -1
- package/web-ui/build/static/phpdoc-CpnPjGDk.js +0 -1
- package/web-ui/build/static/plaintext-BRkRKfKN.js +0 -1
- package/web-ui/build/static/plsql-BARhkvBo.js +0 -1
- package/web-ui/build/static/pony-guYTDEtj.js +0 -1
- package/web-ui/build/static/powerquery-DcM2Yj3O.js +0 -1
- package/web-ui/build/static/powershell-DJ8ftCxt.js +0 -1
- package/web-ui/build/static/powershell-DSRUQzqt.js +0 -1
- package/web-ui/build/static/processing-BCmW5Adu.js +0 -1
- package/web-ui/build/static/processing-DDMjYIa-.js +0 -1
- package/web-ui/build/static/profile-C9J13WXr.js +0 -1
- package/web-ui/build/static/prolog-CUyUfIUU.js +0 -1
- package/web-ui/build/static/prolog-wjvrQEy3.js +0 -1
- package/web-ui/build/static/promql-BkN3_kL1.js +0 -1
- package/web-ui/build/static/properties-B7zGUFLC.js +0 -1
- package/web-ui/build/static/properties-DHKWbrVz.js +0 -1
- package/web-ui/build/static/protobuf-CVwMi4py.js +0 -1
- package/web-ui/build/static/protobuf-CWUzVSVD.js +0 -1
- package/web-ui/build/static/psl-DdX6HMd3.js +0 -1
- package/web-ui/build/static/pug-D-Sn469u.js +0 -1
- package/web-ui/build/static/puppet-B6ZR9-D4.js +0 -1
- package/web-ui/build/static/puppet-m66LRiIo.js +0 -1
- package/web-ui/build/static/pure-7deZH-sc.js +0 -1
- package/web-ui/build/static/purebasic-DQLUcurt.js +0 -1
- package/web-ui/build/static/purebasic-DYMw9jTh.js +0 -1
- package/web-ui/build/static/purescript-DpysoAya.js +0 -1
- package/web-ui/build/static/python-D66_vufV.js +0 -1
- package/web-ui/build/static/python-DYxaIENO.js +0 -1
- package/web-ui/build/static/python-repl-DPjvQNxf.js +0 -1
- package/web-ui/build/static/q-DDHNKITB.js +0 -1
- package/web-ui/build/static/q-xV1Q9ILw.js +0 -1
- package/web-ui/build/static/qml-DSENM1u-.js +0 -1
- package/web-ui/build/static/qml-DfhbPQ-t.js +0 -1
- package/web-ui/build/static/qore-LQCffrzv.js +0 -1
- package/web-ui/build/static/qsharp-BcSf2ZGH.js +0 -1
- package/web-ui/build/static/r-Dc6GR0yQ.js +0 -1
- package/web-ui/build/static/r-vludgk3t.js +0 -1
- package/web-ui/build/static/racket-DJYIkQwh.js +0 -1
- package/web-ui/build/static/reason-D75i_ede.js +0 -1
- package/web-ui/build/static/reasonml-DhRXKjo3.js +0 -1
- package/web-ui/build/static/regex-D67iENuu.js +0 -1
- package/web-ui/build/static/rego-CJ2Eeb4g.js +0 -1
- package/web-ui/build/static/renpy-DUDNyFqb.js +0 -1
- package/web-ui/build/static/rest-Dn7SYTNt.js +0 -1
- package/web-ui/build/static/rib-BVUY5dIb.js +0 -1
- package/web-ui/build/static/rip-Bu9K3Hu9.js +0 -1
- package/web-ui/build/static/roboconf-CUzY2sLf.js +0 -1
- package/web-ui/build/static/roboconf-DBEmoD-Z.js +0 -1
- package/web-ui/build/static/robotframework-70EV7ffL.js +0 -1
- package/web-ui/build/static/routeros-KgfwmDVO.js +0 -1
- package/web-ui/build/static/rsl-D3oCnFGa.js +0 -1
- package/web-ui/build/static/ruby-Dqa0HtB4.js +0 -1
- package/web-ui/build/static/ruby-PeJYeL87.js +0 -1
- package/web-ui/build/static/ruleslanguage-vo3eM_mz.js +0 -1
- package/web-ui/build/static/rust-CwU6t4_Y.js +0 -1
- package/web-ui/build/static/rust-WXADYh9r.js +0 -1
- package/web-ui/build/static/sas-Cg6ADdDH.js +0 -1
- package/web-ui/build/static/sas-DWoEaeXv.js +0 -1
- package/web-ui/build/static/sass-DbHJHeBV.js +0 -1
- package/web-ui/build/static/scala-B6oE2QKr.js +0 -1
- package/web-ui/build/static/scala-NFQGPaYa.js +0 -1
- package/web-ui/build/static/scheme-C8Jx4oX7.js +0 -1
- package/web-ui/build/static/scheme-CUMBJaUf.js +0 -1
- package/web-ui/build/static/scilab-D1VqsdSy.js +0 -1
- package/web-ui/build/static/scss-CSH87oUD.js +0 -1
- package/web-ui/build/static/scss-GLX6NNDB.js +0 -1
- package/web-ui/build/static/shell-CbOhN21M.js +0 -1
- package/web-ui/build/static/shell-session-BQPdJJZS.js +0 -1
- package/web-ui/build/static/smali-BYbEOQX5.js +0 -1
- package/web-ui/build/static/smali-DcoYSibw.js +0 -1
- package/web-ui/build/static/smalltalk-CQkedD8N.js +0 -1
- package/web-ui/build/static/smalltalk-DihI81Cd.js +0 -1
- package/web-ui/build/static/smarty-RRvllERL.js +0 -1
- package/web-ui/build/static/sml-BJkMhBLU.js +0 -1
- package/web-ui/build/static/sml-Bm2IN0wP.js +0 -1
- package/web-ui/build/static/solidity-CsCW8kyX.js +0 -1
- package/web-ui/build/static/solution-file-B5YSxWQt.js +0 -1
- package/web-ui/build/static/soy-Dek2_YCW.js +0 -1
- package/web-ui/build/static/sparql-BeTxhWa4.js +0 -1
- package/web-ui/build/static/splunk-spl-hq6BW85c.js +0 -1
- package/web-ui/build/static/sqf-C-u4en-i.js +0 -1
- package/web-ui/build/static/sqf-DP0IhDYt.js +0 -1
- package/web-ui/build/static/sql-BzL0uonb.js +0 -1
- package/web-ui/build/static/sql-Zy6tV_us.js +0 -1
- package/web-ui/build/static/sql_more-BP2G6Vh5.js +0 -1
- package/web-ui/build/static/squirrel-C3MnMYx5.js +0 -1
- package/web-ui/build/static/stan-7iKo211G.js +0 -1
- package/web-ui/build/static/stan-C1lcIZjJ.js +0 -1
- package/web-ui/build/static/stata-DJ6GKcaw.js +0 -1
- package/web-ui/build/static/step21-Pg-uClDB.js +0 -1
- package/web-ui/build/static/stylus-DFAxYuRi.js +0 -1
- package/web-ui/build/static/stylus-DT6xc_Nv.js +0 -1
- package/web-ui/build/static/subunit-aGvGJXZZ.js +0 -1
- package/web-ui/build/static/swift-Sqmdmb4O.js +0 -1
- package/web-ui/build/static/swift-cUX-MVl4.js +0 -1
- package/web-ui/build/static/systemd-qIaU0Trg.js +0 -1
- package/web-ui/build/static/t4-cs-DtO6Bgg1.js +0 -1
- package/web-ui/build/static/t4-templating-DSSM2N5M.js +0 -1
- package/web-ui/build/static/t4-vb-tKIiE5uC.js +0 -1
- package/web-ui/build/static/taggerscript-Dt2Kgr-W.js +0 -1
- package/web-ui/build/static/tap-BMEgEMIk.js +0 -1
- package/web-ui/build/static/tap-C4TdzsNz.js +0 -1
- package/web-ui/build/static/tcl-B6k4Af9f.js +0 -1
- package/web-ui/build/static/tcl-Dq4_i5q5.js +0 -1
- package/web-ui/build/static/textile-C0uqAPk0.js +0 -1
- package/web-ui/build/static/thrift-DybQEjaA.js +0 -1
- package/web-ui/build/static/toml-DG1a2FSS.js +0 -1
- package/web-ui/build/static/tp-BwdfEEST.js +0 -1
- package/web-ui/build/static/tremor-JSTukmt-.js +0 -1
- package/web-ui/build/static/tsx-YUfsqzPf.js +0 -1
- package/web-ui/build/static/tt2-D9A_ACnF.js +0 -1
- package/web-ui/build/static/turtle-BKxwLa_-.js +0 -1
- package/web-ui/build/static/twig-BeEDK9Ri.js +0 -1
- package/web-ui/build/static/twig-TnOWwD7-.js +0 -1
- package/web-ui/build/static/typescript-BjZl8C3q.js +0 -1
- package/web-ui/build/static/typescript-qtW5Xh-j.js +0 -1
- package/web-ui/build/static/typoscript-Dj4sO7Jx.js +0 -1
- package/web-ui/build/static/unrealscript-DInimzNQ.js +0 -1
- package/web-ui/build/static/uorazor-B_9tFVKw.js +0 -1
- package/web-ui/build/static/uri-CTuMA7_k.js +0 -1
- package/web-ui/build/static/v-CvE0Ujqx.js +0 -1
- package/web-ui/build/static/vala-CLGf3xEs.js +0 -1
- package/web-ui/build/static/vala-Dm8LmEpm.js +0 -1
- package/web-ui/build/static/vbnet-Cwm2TjGP.js +0 -1
- package/web-ui/build/static/vbnet-LCd9GiMJ.js +0 -1
- package/web-ui/build/static/vbscript-DVj94_-y.js +0 -1
- package/web-ui/build/static/vbscript-html-CDHtSX-o.js +0 -1
- package/web-ui/build/static/velocity-C-OrhdDf.js +0 -1
- package/web-ui/build/static/verilog-Bh18N7TM.js +0 -1
- package/web-ui/build/static/verilog-C-YNXb8j.js +0 -1
- package/web-ui/build/static/vhdl-BFNm41_R.js +0 -1
- package/web-ui/build/static/vhdl-CyLgBDKk.js +0 -1
- package/web-ui/build/static/vim-BTafUqR0.js +0 -1
- package/web-ui/build/static/vim-Xg1pEHJe.js +0 -1
- package/web-ui/build/static/visual-basic-CDgUOlvq.js +0 -1
- package/web-ui/build/static/warpscript-1ELDmkt5.js +0 -1
- package/web-ui/build/static/wasm-C25KdQk5.js +0 -1
- package/web-ui/build/static/web-idl-CsdVYgpL.js +0 -1
- package/web-ui/build/static/wiki-4RrZuyhV.js +0 -1
- package/web-ui/build/static/wolfram-DMiRIwvp.js +0 -1
- package/web-ui/build/static/wren-Vk5PBcVB.js +0 -1
- package/web-ui/build/static/x86asm-D9TFTgye.js +0 -1
- package/web-ui/build/static/xeora-SAn_K3Ts.js +0 -1
- package/web-ui/build/static/xl-Da2Fl8D9.js +0 -1
- package/web-ui/build/static/xml-CeLm6l4V.js +0 -1
- package/web-ui/build/static/xml-doc-DypYH408.js +0 -1
- package/web-ui/build/static/xojo-CrfMiv1-.js +0 -1
- package/web-ui/build/static/xquery-8tOqVkgP.js +0 -1
- package/web-ui/build/static/xquery-CLOnNPtx.js +0 -1
- package/web-ui/build/static/yaml-CXiycPmU.js +0 -1
- package/web-ui/build/static/yaml-cIKjKW-H.js +0 -1
- package/web-ui/build/static/yang-KVshO9Ce.js +0 -1
- package/web-ui/build/static/zephir-B88JNqlj.js +0 -1
- package/web-ui/build/static/zig-C6GYIeFs.js +0 -1
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image format helpers for the imageTool.
|
|
3
|
+
*
|
|
4
|
+
* The image providers (Flux, GPT-Image-1.5, etc.) typically return PNG
|
|
5
|
+
* bytes, but our default output is now WebP — meaning we need real
|
|
6
|
+
* format conversion before saving to disk. This module owns:
|
|
7
|
+
*
|
|
8
|
+
* - Format resolution (what target format does the user want?)
|
|
9
|
+
* - Magic-byte detection (what format ARE the provider's bytes?)
|
|
10
|
+
* - Transcoding via sharp, with a graceful fallback if sharp fails
|
|
11
|
+
* to load (e.g. weird platform without prebuilt binaries — we'd
|
|
12
|
+
* rather save the original bytes than fail the whole render)
|
|
13
|
+
* - Filename ↔ format mapping
|
|
14
|
+
*
|
|
15
|
+
* Pure-ish: `transcodeIfNeeded` is the only function with side effects
|
|
16
|
+
* (calls sharp, which spins up native code). Everything else is sync
|
|
17
|
+
* + side-effect-free → easy to unit test.
|
|
18
|
+
*
|
|
19
|
+
* Why a separate file: keeps imageTool.js focused on orchestration and
|
|
20
|
+
* makes the format logic testable WITHOUT mocking the entire tool +
|
|
21
|
+
* its provider clients.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import path from 'path';
|
|
25
|
+
|
|
26
|
+
/** Canonical formats we read/write. */
|
|
27
|
+
export const SUPPORTED_FORMATS = Object.freeze(['png', 'jpeg', 'webp']);
|
|
28
|
+
|
|
29
|
+
/** Default output when the agent doesn't specify. */
|
|
30
|
+
export const DEFAULT_FORMAT = 'webp';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Map an extension or alias to a canonical format name. Returns null
|
|
34
|
+
* if the input doesn't map cleanly.
|
|
35
|
+
*
|
|
36
|
+
* - 'jpg' / 'jpeg' / '.jpg' / '.jpeg' → 'jpeg'
|
|
37
|
+
* - 'png' / '.png' → 'png'
|
|
38
|
+
* - 'webp' / '.webp' → 'webp'
|
|
39
|
+
*/
|
|
40
|
+
export function normalizeFormat(input) {
|
|
41
|
+
if (typeof input !== 'string') return null;
|
|
42
|
+
const lower = input.trim().toLowerCase().replace(/^\./, '');
|
|
43
|
+
if (lower === 'jpg' || lower === 'jpeg') return 'jpeg';
|
|
44
|
+
if (lower === 'png') return 'png';
|
|
45
|
+
if (lower === 'webp') return 'webp';
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The on-disk extension for a canonical format. JPEG → "jpg" (the more
|
|
51
|
+
* common file extension); PNG → "png"; WebP → "webp".
|
|
52
|
+
*/
|
|
53
|
+
export function extensionFor(format) {
|
|
54
|
+
if (format === 'jpeg') return 'jpg';
|
|
55
|
+
if (format === 'png') return 'png';
|
|
56
|
+
if (format === 'webp') return 'webp';
|
|
57
|
+
return 'webp'; // fallback — should never hit if callers respect SUPPORTED_FORMATS
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Decide what target format to write, given the agent's request.
|
|
62
|
+
*
|
|
63
|
+
* Priority:
|
|
64
|
+
* 1. outputPath extension (e.g. "foo.png" forces PNG, "foo.jpg" → JPEG)
|
|
65
|
+
* 2. outputType field (explicit format request)
|
|
66
|
+
* 3. DEFAULT_FORMAT ('webp')
|
|
67
|
+
*
|
|
68
|
+
* @param {object} args
|
|
69
|
+
* @param {string} [args.outputPath] May or may not have an extension.
|
|
70
|
+
* @param {string} [args.outputType] e.g. 'png' | 'webp' | 'jpg' — agent-friendly.
|
|
71
|
+
* @returns {{ format: 'png'|'jpeg'|'webp', source: 'extension'|'outputType'|'default' }}
|
|
72
|
+
*/
|
|
73
|
+
export function resolveTargetFormat({ outputPath, outputType } = {}) {
|
|
74
|
+
if (typeof outputPath === 'string' && outputPath.length > 0) {
|
|
75
|
+
const ext = path.extname(outputPath);
|
|
76
|
+
const fmt = normalizeFormat(ext);
|
|
77
|
+
if (fmt) return { format: fmt, source: 'extension' };
|
|
78
|
+
}
|
|
79
|
+
if (outputType !== undefined && outputType !== null) {
|
|
80
|
+
const fmt = normalizeFormat(outputType);
|
|
81
|
+
if (fmt) return { format: fmt, source: 'outputType' };
|
|
82
|
+
}
|
|
83
|
+
return { format: DEFAULT_FORMAT, source: 'default' };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Sniff the encoded format of a buffer by inspecting the first few bytes.
|
|
88
|
+
* Returns null when nothing matches — caller then assumes "unknown" and
|
|
89
|
+
* MAY skip transcoding (safer than transcoding bytes we don't recognize).
|
|
90
|
+
*
|
|
91
|
+
* Magic-byte references:
|
|
92
|
+
* PNG : 89 50 4E 47 0D 0A 1A 0A
|
|
93
|
+
* JPEG : FF D8 FF
|
|
94
|
+
* WebP : "RIFF" .... "WEBP"
|
|
95
|
+
* GIF : "GIF87a" or "GIF89a" (we don't transcode but recognize)
|
|
96
|
+
* BMP : 42 4D
|
|
97
|
+
*/
|
|
98
|
+
export function detectFormatFromBytes(buffer) {
|
|
99
|
+
if (!buffer || typeof buffer.length !== 'number' || buffer.length < 12) return null;
|
|
100
|
+
if (buffer[0] === 0x89 && buffer[1] === 0x50 && buffer[2] === 0x4E && buffer[3] === 0x47) return 'png';
|
|
101
|
+
if (buffer[0] === 0xFF && buffer[1] === 0xD8 && buffer[2] === 0xFF) return 'jpeg';
|
|
102
|
+
if (
|
|
103
|
+
buffer[0] === 0x52 && buffer[1] === 0x49 && buffer[2] === 0x46 && buffer[3] === 0x46 &&
|
|
104
|
+
buffer[8] === 0x57 && buffer[9] === 0x45 && buffer[10] === 0x42 && buffer[11] === 0x50
|
|
105
|
+
) return 'webp';
|
|
106
|
+
if (buffer[0] === 0x47 && buffer[1] === 0x49 && buffer[2] === 0x46) return 'gif';
|
|
107
|
+
if (buffer[0] === 0x42 && buffer[1] === 0x4D) return 'bmp';
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Lazy sharp loader. Caches the module after first import; re-attempts
|
|
113
|
+
* on null cache so a transient failure (e.g. concurrent install) doesn't
|
|
114
|
+
* permanently disable transcoding.
|
|
115
|
+
*
|
|
116
|
+
* Wrapped in try/catch — if the native module fails to load on the
|
|
117
|
+
* host (rare but possible on uncommon platforms), we report null and
|
|
118
|
+
* the caller falls back to writing raw provider bytes.
|
|
119
|
+
*/
|
|
120
|
+
let _sharp = null;
|
|
121
|
+
let _sharpLoadAttempted = false;
|
|
122
|
+
let _sharpLoadError = null;
|
|
123
|
+
async function _getSharp() {
|
|
124
|
+
if (_sharp) return _sharp;
|
|
125
|
+
if (_sharpLoadAttempted && _sharpLoadError) {
|
|
126
|
+
// Retry once after a small grace period rather than caching the
|
|
127
|
+
// failure forever — node module resolution can race during install.
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const mod = await import('sharp');
|
|
131
|
+
_sharp = mod.default || mod;
|
|
132
|
+
_sharpLoadError = null;
|
|
133
|
+
return _sharp;
|
|
134
|
+
} catch (err) {
|
|
135
|
+
_sharpLoadAttempted = true;
|
|
136
|
+
_sharpLoadError = err;
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Test-only — clear sharp cache so a subsequent call re-imports. */
|
|
142
|
+
export function _resetSharpCacheForTests() {
|
|
143
|
+
_sharp = null;
|
|
144
|
+
_sharpLoadAttempted = false;
|
|
145
|
+
_sharpLoadError = null;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Transcode `buffer` to `targetFormat`. Returns a result describing
|
|
150
|
+
* what happened so the caller can log + report:
|
|
151
|
+
*
|
|
152
|
+
* { buffer: <out>, transcoded: true, inputFormat: 'png', outputFormat: 'webp' }
|
|
153
|
+
* — sharp converted the bytes
|
|
154
|
+
* { buffer: <in>, transcoded: false, inputFormat: 'webp', outputFormat: 'webp', reason: 'already-target' }
|
|
155
|
+
* — input format already matches target; no work
|
|
156
|
+
* { buffer: <in>, transcoded: false, inputFormat: null, outputFormat: 'webp', reason: 'unknown-input' }
|
|
157
|
+
* — couldn't sniff input; safer to write bytes as-is
|
|
158
|
+
* { buffer: <in>, transcoded: false, inputFormat: 'png', outputFormat: 'webp', reason: 'sharp-unavailable', error }
|
|
159
|
+
* — sharp couldn't load; fall back to raw bytes
|
|
160
|
+
* { buffer: <in>, transcoded: false, inputFormat: 'png', outputFormat: 'webp', reason: 'transcode-failed', error }
|
|
161
|
+
* — sharp threw mid-transcode
|
|
162
|
+
*
|
|
163
|
+
* @param {Buffer} buffer
|
|
164
|
+
* @param {'png'|'jpeg'|'webp'} targetFormat
|
|
165
|
+
* @param {object} [opts]
|
|
166
|
+
* @param {number} [opts.quality=85] For JPEG/WebP. PNG ignores it.
|
|
167
|
+
* @param {object} [opts.logger]
|
|
168
|
+
*/
|
|
169
|
+
export async function transcodeIfNeeded(buffer, targetFormat, opts = {}) {
|
|
170
|
+
const quality = Number.isFinite(opts.quality) ? opts.quality : 85;
|
|
171
|
+
const logger = opts.logger || null;
|
|
172
|
+
const inputFormat = detectFormatFromBytes(buffer);
|
|
173
|
+
|
|
174
|
+
// Already in the desired format — no work, no quality loss.
|
|
175
|
+
if (inputFormat && inputFormat === targetFormat) {
|
|
176
|
+
return { buffer, transcoded: false, inputFormat, outputFormat: targetFormat, reason: 'already-target' };
|
|
177
|
+
}
|
|
178
|
+
if (!inputFormat) {
|
|
179
|
+
logger?.warn?.('[imageFormat] could not sniff input format; writing bytes as-is', { targetFormat });
|
|
180
|
+
return { buffer, transcoded: false, inputFormat: null, outputFormat: targetFormat, reason: 'unknown-input' };
|
|
181
|
+
}
|
|
182
|
+
// GIF / BMP — sharp can read these but transcoding GIFs to webp
|
|
183
|
+
// animation requires more thought; for now write bytes as-is.
|
|
184
|
+
if (inputFormat === 'gif' || inputFormat === 'bmp') {
|
|
185
|
+
return { buffer, transcoded: false, inputFormat, outputFormat: targetFormat, reason: 'unsupported-input' };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const sharpFn = await _getSharp();
|
|
189
|
+
if (!sharpFn) {
|
|
190
|
+
logger?.warn?.('[imageFormat] sharp not available; writing bytes as-is', {
|
|
191
|
+
targetFormat,
|
|
192
|
+
error: _sharpLoadError?.message,
|
|
193
|
+
});
|
|
194
|
+
return {
|
|
195
|
+
buffer,
|
|
196
|
+
transcoded: false,
|
|
197
|
+
inputFormat,
|
|
198
|
+
outputFormat: targetFormat,
|
|
199
|
+
reason: 'sharp-unavailable',
|
|
200
|
+
error: _sharpLoadError,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
try {
|
|
205
|
+
let pipeline = sharpFn(buffer);
|
|
206
|
+
if (targetFormat === 'webp') pipeline = pipeline.webp({ quality });
|
|
207
|
+
else if (targetFormat === 'jpeg') pipeline = pipeline.jpeg({ quality });
|
|
208
|
+
else if (targetFormat === 'png') pipeline = pipeline.png();
|
|
209
|
+
const out = await pipeline.toBuffer();
|
|
210
|
+
return { buffer: out, transcoded: true, inputFormat, outputFormat: targetFormat };
|
|
211
|
+
} catch (err) {
|
|
212
|
+
logger?.warn?.('[imageFormat] transcode failed; writing original bytes as-is', {
|
|
213
|
+
inputFormat, targetFormat, error: err?.message,
|
|
214
|
+
});
|
|
215
|
+
return {
|
|
216
|
+
buffer,
|
|
217
|
+
transcoded: false,
|
|
218
|
+
inputFormat,
|
|
219
|
+
outputFormat: targetFormat,
|
|
220
|
+
reason: 'transcode-failed',
|
|
221
|
+
error: err,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Convenience: if the user-supplied outputPath has no extension,
|
|
228
|
+
* append the target format's extension. Otherwise return as-is.
|
|
229
|
+
* (The agent might pass `images/foo` without an extension — we'd
|
|
230
|
+
* normally reject, but for the auto-extension case we just append.)
|
|
231
|
+
*/
|
|
232
|
+
export function ensureExtension(outputPath, targetFormat) {
|
|
233
|
+
if (!outputPath || typeof outputPath !== 'string') return outputPath;
|
|
234
|
+
const ext = path.extname(outputPath);
|
|
235
|
+
if (ext && normalizeFormat(ext)) return outputPath;
|
|
236
|
+
return `${outputPath}.${extensionFor(targetFormat)}`;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export default {
|
|
240
|
+
SUPPORTED_FORMATS,
|
|
241
|
+
DEFAULT_FORMAT,
|
|
242
|
+
normalizeFormat,
|
|
243
|
+
extensionFor,
|
|
244
|
+
resolveTargetFormat,
|
|
245
|
+
detectFormatFromBytes,
|
|
246
|
+
transcodeIfNeeded,
|
|
247
|
+
ensureExtension,
|
|
248
|
+
_resetSharpCacheForTests,
|
|
249
|
+
};
|
package/src/tools/imageTool.js
CHANGED
|
@@ -8,6 +8,13 @@ import os from 'os';
|
|
|
8
8
|
import { promises as fs } from 'fs';
|
|
9
9
|
import { BaseTool } from './baseTool.js';
|
|
10
10
|
import { getGalleryService } from '../services/galleryService.js';
|
|
11
|
+
import {
|
|
12
|
+
resolveTargetFormat,
|
|
13
|
+
transcodeIfNeeded,
|
|
14
|
+
extensionFor,
|
|
15
|
+
ensureExtension,
|
|
16
|
+
DEFAULT_FORMAT,
|
|
17
|
+
} from './imageFormat.js';
|
|
11
18
|
|
|
12
19
|
/**
|
|
13
20
|
* Configuration constants for image generation
|
|
@@ -224,19 +231,37 @@ export class ImageTool extends BaseTool {
|
|
|
224
231
|
- Just output the command when you want to generate or edit an image
|
|
225
232
|
- If generation fails, output a NEW command with corrections
|
|
226
233
|
|
|
227
|
-
**USAGE — Generate:**
|
|
234
|
+
**USAGE — Generate (default WebP):**
|
|
228
235
|
\`\`\`json
|
|
229
236
|
{
|
|
230
237
|
"toolId": "image-gen",
|
|
231
238
|
"parameters": {
|
|
232
239
|
"prompt": "Detailed description of the image",
|
|
233
|
-
"outputPath": "images/filename.
|
|
240
|
+
"outputPath": "images/filename.webp",
|
|
234
241
|
"size": "1024x1024"
|
|
235
242
|
}
|
|
236
243
|
}
|
|
237
244
|
\`\`\`
|
|
238
245
|
|
|
239
|
-
**USAGE —
|
|
246
|
+
**USAGE — Force PNG output (when you specifically need lossless / older-tool compat):**
|
|
247
|
+
\`\`\`json
|
|
248
|
+
{
|
|
249
|
+
"toolId": "image-gen",
|
|
250
|
+
"parameters": {
|
|
251
|
+
"prompt": "Pixel-art icon set on white",
|
|
252
|
+
"outputPath": "images/icons.png"
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
\`\`\`
|
|
256
|
+
Or, equivalently, with the explicit field:
|
|
257
|
+
\`\`\`json
|
|
258
|
+
{
|
|
259
|
+
"toolId": "image-gen",
|
|
260
|
+
"parameters": { "prompt": "Pixel-art icon set", "outputType": "png" }
|
|
261
|
+
}
|
|
262
|
+
\`\`\`
|
|
263
|
+
|
|
264
|
+
**USAGE — Generate with Transparency (WebP supports alpha):**
|
|
240
265
|
\`\`\`json
|
|
241
266
|
{
|
|
242
267
|
"toolId": "image-gen",
|
|
@@ -244,7 +269,7 @@ export class ImageTool extends BaseTool {
|
|
|
244
269
|
"prompt": "A cute fox mascot on a transparent background",
|
|
245
270
|
"model": "gpt-image-1.5",
|
|
246
271
|
"transparency": true,
|
|
247
|
-
"outputPath": "images/fox-mascot.
|
|
272
|
+
"outputPath": "images/fox-mascot.webp"
|
|
248
273
|
}
|
|
249
274
|
}
|
|
250
275
|
\`\`\`
|
|
@@ -257,14 +282,19 @@ export class ImageTool extends BaseTool {
|
|
|
257
282
|
"prompt": "Remove the background and make it transparent",
|
|
258
283
|
"sourceImage": "images/photo.png",
|
|
259
284
|
"model": "gpt-image-1.5",
|
|
260
|
-
"outputPath": "images/photo-nobg.
|
|
285
|
+
"outputPath": "images/photo-nobg.webp"
|
|
261
286
|
}
|
|
262
287
|
}
|
|
263
288
|
\`\`\`
|
|
289
|
+
(The \`sourceImage\` can be any common format — PNG, JPEG, WebP, etc. The OUTPUT format is whatever you specify on \`outputPath\` / \`outputType\`, defaulting to WebP.)
|
|
264
290
|
|
|
265
291
|
**Parameters:**
|
|
266
292
|
- **prompt** (required): Description of image to generate OR editing instruction
|
|
267
293
|
- **outputPath** (optional): Path to save image (permanent). Omit for temp file.
|
|
294
|
+
The file extension determines output format (.webp / .png / .jpg / .jpeg).
|
|
295
|
+
- **outputType** (optional): Explicit format request when outputPath has no extension
|
|
296
|
+
or is omitted: 'webp' | 'png' | 'jpg' | 'jpeg'. Default: 'webp'.
|
|
297
|
+
An outputPath extension always wins over outputType if both are present.
|
|
268
298
|
- **size** (optional): WIDTHxHEIGHT or preset name. DIFFERENT MODELS ACCEPT DIFFERENT SIZES — read the rules below. Default: 1024x1024.
|
|
269
299
|
- **quality** (optional): "standard" or "hd" (default: standard)
|
|
270
300
|
- **model** (optional): "gpt-image-1.5" or a flux variant. Default: auto. Auto-switches to gpt-image-1.5 if transparency=true OR sourceImage is set.
|
|
@@ -272,6 +302,13 @@ export class ImageTool extends BaseTool {
|
|
|
272
302
|
- **mask** (optional): Path to mask image for editing (white=edit area, black=keep area)
|
|
273
303
|
- **transparency** (optional): true to generate with transparent background (forces gpt-image-1.5)
|
|
274
304
|
|
|
305
|
+
**Output format (NEW default: WebP):**
|
|
306
|
+
The tool transcodes provider bytes (typically PNG) into WebP by default —
|
|
307
|
+
smaller files, same visual quality. Force PNG with either an explicit
|
|
308
|
+
.png extension on outputPath OR \`outputType: "png"\`. Pick PNG when you
|
|
309
|
+
need lossless graphics or animated GIFs would otherwise be needed; WebP
|
|
310
|
+
is the better default for photo-style outputs.
|
|
311
|
+
|
|
275
312
|
⚠ SIZE RULES — read before picking a size:
|
|
276
313
|
|
|
277
314
|
(A) gpt-image-1.5 (auto-selected on transparency=true or sourceImage, or set explicitly):
|
|
@@ -391,10 +428,15 @@ Content moderation:
|
|
|
391
428
|
*/
|
|
392
429
|
_parseImageParams(obj) {
|
|
393
430
|
const outputPath = obj.outputPath || obj['output-path'] || null;
|
|
431
|
+
// Optional explicit format request. Accepts 'webp' (default if no
|
|
432
|
+
// outputPath ext), 'png', 'jpg' / 'jpeg'. The outputPath extension
|
|
433
|
+
// wins if both are present (handled in resolveTargetFormat).
|
|
434
|
+
const outputType = obj.outputType || obj['output-type'] || obj.format || null;
|
|
394
435
|
|
|
395
436
|
return {
|
|
396
437
|
prompt: obj.prompt || '',
|
|
397
438
|
outputPath: outputPath,
|
|
439
|
+
outputType: outputType,
|
|
398
440
|
saveToProject: outputPath !== null, // If path specified, save to project
|
|
399
441
|
model: obj.model || IMAGE_CONFIG.DEFAULT_MODEL,
|
|
400
442
|
size: obj.size || IMAGE_CONFIG.DEFAULT_SIZE,
|
|
@@ -417,10 +459,12 @@ Content moderation:
|
|
|
417
459
|
};
|
|
418
460
|
|
|
419
461
|
const outputPath = extractTag('output-path') || null;
|
|
462
|
+
const outputType = extractTag('output-type') || extractTag('format') || null;
|
|
420
463
|
|
|
421
464
|
return {
|
|
422
465
|
prompt: extractTag('prompt') || '',
|
|
423
466
|
outputPath: outputPath,
|
|
467
|
+
outputType: outputType,
|
|
424
468
|
saveToProject: outputPath !== null, // If path specified, save to project
|
|
425
469
|
model: extractTag('model') || IMAGE_CONFIG.DEFAULT_MODEL,
|
|
426
470
|
size: extractTag('size') || IMAGE_CONFIG.DEFAULT_SIZE,
|
|
@@ -468,6 +512,10 @@ Content moderation:
|
|
|
468
512
|
sessionId,
|
|
469
513
|
prompt: imageParams.prompt,
|
|
470
514
|
outputPath: imageParams.outputPath,
|
|
515
|
+
// Explicit format request — used by the save path to decide the
|
|
516
|
+
// target format. Default behavior (no outputPath, no outputType):
|
|
517
|
+
// WebP. See imageFormat.resolveTargetFormat for precedence.
|
|
518
|
+
outputType: imageParams.outputType || null,
|
|
471
519
|
saveToProject: imageParams.saveToProject,
|
|
472
520
|
model: imageParams.model,
|
|
473
521
|
size: imageParams.size,
|
|
@@ -1046,10 +1094,23 @@ Content moderation:
|
|
|
1046
1094
|
|
|
1047
1095
|
try {
|
|
1048
1096
|
if (b64Json) {
|
|
1049
|
-
// Flux/GPT-Image response: Save base64
|
|
1097
|
+
// Flux/GPT-Image response: Save base64 to disk, transcoding to
|
|
1098
|
+
// the resolved target format (default webp). If transcoding
|
|
1099
|
+
// fails, the helper falls back to writing original bytes — the
|
|
1100
|
+
// call doesn't fail, but a warning is logged via the logger.
|
|
1050
1101
|
this.logger?.info(`Saving base64 image to disk: ${resolvedOutputPath}`);
|
|
1051
|
-
const
|
|
1052
|
-
await
|
|
1102
|
+
const rawBuffer = Buffer.from(b64Json, 'base64');
|
|
1103
|
+
const transcode = await transcodeIfNeeded(rawBuffer, job._targetFormat || DEFAULT_FORMAT, {
|
|
1104
|
+
quality: 85, logger: this.logger,
|
|
1105
|
+
});
|
|
1106
|
+
await fs.writeFile(resolvedOutputPath, transcode.buffer);
|
|
1107
|
+
if (transcode.transcoded) {
|
|
1108
|
+
this.logger?.info(`Image transcoded ${transcode.inputFormat} → ${transcode.outputFormat}`, {
|
|
1109
|
+
outputPath: resolvedOutputPath,
|
|
1110
|
+
inputBytes: rawBuffer.length,
|
|
1111
|
+
outputBytes: transcode.buffer.length,
|
|
1112
|
+
});
|
|
1113
|
+
}
|
|
1053
1114
|
|
|
1054
1115
|
// Verify the file was actually written
|
|
1055
1116
|
const stat = await fs.stat(resolvedOutputPath);
|
|
@@ -1063,9 +1124,9 @@ Content moderation:
|
|
|
1063
1124
|
// For web display, we'll use our local server endpoint (set below)
|
|
1064
1125
|
displayUrl = null; // Will be converted to web URL later
|
|
1065
1126
|
} else if (imageUrl) {
|
|
1066
|
-
// URL response: Download from URL
|
|
1127
|
+
// URL response: Download from URL, then transcode to target format.
|
|
1067
1128
|
this.logger?.info(`Downloading image from URL: ${imageUrl.substring(0, 50)}...`);
|
|
1068
|
-
await this._downloadImage(imageUrl, resolvedOutputPath);
|
|
1129
|
+
await this._downloadImage(imageUrl, resolvedOutputPath, job._targetFormat || DEFAULT_FORMAT);
|
|
1069
1130
|
|
|
1070
1131
|
// Verify the file was actually written
|
|
1071
1132
|
const stat = await fs.stat(resolvedOutputPath);
|
|
@@ -1114,15 +1175,30 @@ Content moderation:
|
|
|
1114
1175
|
* @private
|
|
1115
1176
|
*/
|
|
1116
1177
|
async _resolveOutputPath(job) {
|
|
1178
|
+
// Resolve target format ONCE here so the auto-generated filename
|
|
1179
|
+
// uses the right extension. Caller should also use job._targetFormat
|
|
1180
|
+
// (cached on the job) when transcoding bytes.
|
|
1181
|
+
const { format: targetFormat } = resolveTargetFormat({
|
|
1182
|
+
outputPath: job.outputPath,
|
|
1183
|
+
outputType: job.outputType,
|
|
1184
|
+
});
|
|
1185
|
+
job._targetFormat = targetFormat;
|
|
1186
|
+
const ext = extensionFor(targetFormat);
|
|
1187
|
+
|
|
1117
1188
|
if (job.saveToProject) {
|
|
1118
1189
|
// Save to project directory
|
|
1119
1190
|
const projectDir = job.projectDir || process.cwd();
|
|
1120
1191
|
|
|
1121
1192
|
let outputPath = job.outputPath;
|
|
1122
1193
|
if (!outputPath) {
|
|
1123
|
-
// Auto-generate filename
|
|
1194
|
+
// Auto-generate filename — DEFAULT format is webp now (was png).
|
|
1195
|
+
// Agents that need PNG must pass an explicit outputPath with
|
|
1196
|
+
// .png extension OR outputType:'png'.
|
|
1124
1197
|
const timestamp = Date.now();
|
|
1125
|
-
outputPath = `images/generated-${timestamp}
|
|
1198
|
+
outputPath = `images/generated-${timestamp}.${ext}`;
|
|
1199
|
+
} else {
|
|
1200
|
+
// Append format extension when the agent supplied a name without one
|
|
1201
|
+
outputPath = ensureExtension(outputPath, targetFormat);
|
|
1126
1202
|
}
|
|
1127
1203
|
|
|
1128
1204
|
const resolvedPath = path.isAbsolute(outputPath)
|
|
@@ -1149,9 +1225,10 @@ Content moderation:
|
|
|
1149
1225
|
// Save to temp directory
|
|
1150
1226
|
await fs.mkdir(this.tempDir, { recursive: true });
|
|
1151
1227
|
|
|
1228
|
+
// Temp dir path — same default-extension policy as project save.
|
|
1152
1229
|
let filename = job.outputPath
|
|
1153
|
-
? path.basename(job.outputPath)
|
|
1154
|
-
: `generated-${job.jobId}
|
|
1230
|
+
? path.basename(ensureExtension(job.outputPath, targetFormat))
|
|
1231
|
+
: `generated-${job.jobId}.${ext}`;
|
|
1155
1232
|
|
|
1156
1233
|
return path.join(this.tempDir, filename);
|
|
1157
1234
|
}
|
|
@@ -1161,7 +1238,7 @@ Content moderation:
|
|
|
1161
1238
|
* Download image from URL
|
|
1162
1239
|
* @private
|
|
1163
1240
|
*/
|
|
1164
|
-
async _downloadImage(imageUrl, outputPath) {
|
|
1241
|
+
async _downloadImage(imageUrl, outputPath, targetFormat = DEFAULT_FORMAT) {
|
|
1165
1242
|
try {
|
|
1166
1243
|
const response = await fetch(imageUrl, {
|
|
1167
1244
|
signal: AbortSignal.timeout(IMAGE_CONFIG.DOWNLOAD_TIMEOUT)
|
|
@@ -1172,9 +1249,21 @@ Content moderation:
|
|
|
1172
1249
|
}
|
|
1173
1250
|
|
|
1174
1251
|
const buffer = Buffer.from(await response.arrayBuffer());
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1252
|
+
// Transcode to target format if needed (defensive: fallback writes
|
|
1253
|
+
// original bytes if sharp can't load — see imageFormat.js).
|
|
1254
|
+
const transcode = await transcodeIfNeeded(buffer, targetFormat, {
|
|
1255
|
+
quality: 85, logger: this.logger,
|
|
1256
|
+
});
|
|
1257
|
+
await fs.writeFile(outputPath, transcode.buffer);
|
|
1258
|
+
if (transcode.transcoded) {
|
|
1259
|
+
this.logger?.info(`Downloaded image transcoded ${transcode.inputFormat} → ${transcode.outputFormat}`, {
|
|
1260
|
+
outputPath,
|
|
1261
|
+
inputBytes: buffer.length,
|
|
1262
|
+
outputBytes: transcode.buffer.length,
|
|
1263
|
+
});
|
|
1264
|
+
} else {
|
|
1265
|
+
this.logger?.info(`Image saved to: ${outputPath}`);
|
|
1266
|
+
}
|
|
1178
1267
|
|
|
1179
1268
|
} catch (error) {
|
|
1180
1269
|
if (error.name === 'TimeoutError') {
|
package/src/tools/jobDoneTool.js
CHANGED
|
@@ -178,6 +178,18 @@ IMPORTANT - COMPLETION TIMING: - Call this tool IMMEDIATELY when your task is co
|
|
|
178
178
|
details: {
|
|
179
179
|
type: 'string',
|
|
180
180
|
description: 'Optional: Additional details about what was done, what failed, any files created, or next steps for the user'
|
|
181
|
+
},
|
|
182
|
+
outputs: {
|
|
183
|
+
// v2 flows: when this agent is running inside a flow node
|
|
184
|
+
// that declares typed outputs, populate this object with
|
|
185
|
+
// each declared field. Runtime validation rejects missing
|
|
186
|
+
// fields and triggers a retry — schema is permissive but
|
|
187
|
+
// runtime is strict. The text below is what the LLM sees
|
|
188
|
+
// alongside REQUIRED OUTPUTS in the system prompt; phrased
|
|
189
|
+
// strongly so model defaults toward including it.
|
|
190
|
+
type: 'object',
|
|
191
|
+
description: 'REQUIRED when your system prompt contains a "REQUIRED OUTPUTS" section (i.e. you are in a flow). Provide a JSON object with one key per declared output field name, holding the value matching the declared type. Example: if REQUIRED OUTPUTS lists "draft (text), wordCount (number)", emit outputs: { "draft": "<full text>", "wordCount": 850 }. Omitting any required field causes the flow node to fail and retry. Outside of flows this field is ignored.',
|
|
192
|
+
additionalProperties: true
|
|
181
193
|
}
|
|
182
194
|
},
|
|
183
195
|
required: ['action', 'summary'],
|
|
@@ -217,6 +229,90 @@ IMPORTANT - COMPLETION TIMING: - Call this tool IMMEDIATELY when your task is co
|
|
|
217
229
|
}
|
|
218
230
|
|
|
219
231
|
const agentId = context.agentId;
|
|
232
|
+
|
|
233
|
+
// Phase 8: when this agent is running inside a flow node with
|
|
234
|
+
// declared outputs, validate action.outputs against the contract
|
|
235
|
+
// BEFORE signaling completion. Returning a tool error here gives
|
|
236
|
+
// the model immediate feedback in its current response cycle —
|
|
237
|
+
// it can re-call jobdone with the missing fields populated, no
|
|
238
|
+
// executor round-trip, no conversation reset.
|
|
239
|
+
//
|
|
240
|
+
// Falls through (no validation) when not in a flow OR when the
|
|
241
|
+
// node has no declared outputs — keeps non-flow uses untouched.
|
|
242
|
+
let activeFlowContract = null;
|
|
243
|
+
if (this.flowExecutor && agentId && typeof this.flowExecutor.getActiveContract === 'function') {
|
|
244
|
+
activeFlowContract = this.flowExecutor.getActiveContract(agentId);
|
|
245
|
+
}
|
|
246
|
+
if (activeFlowContract) {
|
|
247
|
+
const contract = activeFlowContract;
|
|
248
|
+
if (contract && Array.isArray(contract.outputs) && contract.outputs.length > 0) {
|
|
249
|
+
const provided = (action.outputs && typeof action.outputs === 'object') ? action.outputs : {};
|
|
250
|
+
const missing = [];
|
|
251
|
+
for (const decl of contract.outputs) {
|
|
252
|
+
if (!decl || typeof decl.name !== 'string') continue;
|
|
253
|
+
if (!(decl.name in provided) || provided[decl.name] === null || provided[decl.name] === undefined) {
|
|
254
|
+
missing.push(decl);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (missing.length > 0) {
|
|
258
|
+
const declList = contract.outputs
|
|
259
|
+
.map(o => ` • ${o.name}: ${o.type}${o.description ? ` — ${o.description}` : ''}`).join('\n');
|
|
260
|
+
const exampleEntries = contract.outputs.map(o => {
|
|
261
|
+
let exVal = '<value>';
|
|
262
|
+
if (o.example !== undefined && o.example !== null) {
|
|
263
|
+
try { exVal = JSON.stringify(o.example); } catch {}
|
|
264
|
+
} else {
|
|
265
|
+
// Type-specific placeholders
|
|
266
|
+
if (o.type === 'text') exVal = '"<your text>"';
|
|
267
|
+
else if (o.type === 'number') exVal = '0';
|
|
268
|
+
else if (o.type === 'boolean') exVal = 'true';
|
|
269
|
+
else if (o.type === 'json') exVal = '{ "key": "value" }';
|
|
270
|
+
else if (o.type === 'file') exVal = '"/path/to/file"';
|
|
271
|
+
else if (o.type === 'file[]') exVal = '["/path/to/file"]';
|
|
272
|
+
else if (o.type === 'list<text>') exVal = '["item 1", "item 2"]';
|
|
273
|
+
}
|
|
274
|
+
return ` "${o.name}": ${exVal}`;
|
|
275
|
+
}).join(',\n');
|
|
276
|
+
const errorMsg =
|
|
277
|
+
`Cannot complete: missing required output field(s): ${missing.map(m => m.name).join(', ')}.
|
|
278
|
+
|
|
279
|
+
This step's flow node declares ALL of these outputs:
|
|
280
|
+
${declList}
|
|
281
|
+
|
|
282
|
+
Re-call jobdone with EVERY field above populated in the "outputs" object.
|
|
283
|
+
Use this exact shape (replace placeholder values with your real content):
|
|
284
|
+
|
|
285
|
+
{
|
|
286
|
+
"toolId": "jobdone",
|
|
287
|
+
"actions": [{
|
|
288
|
+
"action": "complete",
|
|
289
|
+
"summary": "<your summary>",
|
|
290
|
+
"outputs": {
|
|
291
|
+
${exampleEntries}
|
|
292
|
+
}
|
|
293
|
+
}]
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
The flow CANNOT proceed until all required output fields are populated.`;
|
|
297
|
+
|
|
298
|
+
this.logger?.info(`JobDone: Rejected — flow contract missing outputs`, {
|
|
299
|
+
agentId,
|
|
300
|
+
missing: missing.map(m => m.name),
|
|
301
|
+
declared: contract.outputs.map(o => o.name),
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
return {
|
|
305
|
+
success: false,
|
|
306
|
+
error: errorMsg,
|
|
307
|
+
output: errorMsg,
|
|
308
|
+
taskComplete: false,
|
|
309
|
+
flowContractViolation: true,
|
|
310
|
+
missingOutputs: missing.map(m => m.name),
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
220
316
|
let agent = null;
|
|
221
317
|
let agentInfo = '';
|
|
222
318
|
|
|
@@ -239,7 +335,16 @@ IMPORTANT - COMPLETION TIMING: - Call this tool IMMEDIATELY when your task is co
|
|
|
239
335
|
// If there are pending tasks and the agent claims success, reject.
|
|
240
336
|
// The agent must clear/complete its task list first.
|
|
241
337
|
// Exception: success=false means the agent is giving up (stuck/unable to proceed).
|
|
242
|
-
|
|
338
|
+
//
|
|
339
|
+
// Flow exception: when this agent is running inside a flow node, the
|
|
340
|
+
// Phase 8 contract validation above is the authoritative gate. The
|
|
341
|
+
// task list contains scheduler-poke artifacts (auto-created from
|
|
342
|
+
// queued user messages) that aren't real "user-tracked work" — they
|
|
343
|
+
// exist purely so the scheduler picks the agent up. Letting the
|
|
344
|
+
// legacy pendingTasks check fire here would block legitimate
|
|
345
|
+
// contract-correct job-done calls and force the agent into a
|
|
346
|
+
// taskmanager dance for tasks the user never actually authored.
|
|
347
|
+
if (pendingTasks.length > 0 && action.success !== false && !activeFlowContract) {
|
|
243
348
|
const taskListStr = pendingTasks
|
|
244
349
|
.map((t, i) => `${i + 1}. [${t.status}] ${t.title}`)
|
|
245
350
|
.join('\n');
|
|
@@ -284,12 +389,15 @@ IMPORTANT - COMPLETION TIMING: - Call this tool IMMEDIATELY when your task is co
|
|
|
284
389
|
agent.lastCompletionDetails = action.details || null;
|
|
285
390
|
await this.agentPool.persistAgentState(agentId);
|
|
286
391
|
|
|
287
|
-
// Signal flow executor directly (if agent is running inside a flow)
|
|
392
|
+
// Signal flow executor directly (if agent is running inside a flow).
|
|
393
|
+
// v2: forward structured `outputs` bag verbatim — the executor
|
|
394
|
+
// validates it against the node's declared contract.
|
|
288
395
|
if (this.flowExecutor) {
|
|
289
396
|
this.flowExecutor.notifyAgentCompletion(agentId, {
|
|
290
397
|
summary: action.summary,
|
|
291
398
|
details: action.details,
|
|
292
|
-
success: isSuccessful
|
|
399
|
+
success: isSuccessful,
|
|
400
|
+
outputs: action.outputs
|
|
293
401
|
});
|
|
294
402
|
}
|
|
295
403
|
|