onbuzz 4.4.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/agentPool.js +4 -0
- package/src/core/agentScheduler.js +46 -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 +254 -15
- package/src/index.js +34 -0
- package/src/interfaces/__tests__/agentContextRoutes.test.js +272 -0
- package/src/interfaces/agentContextRoutes.js +257 -0
- package/src/interfaces/webServer.js +282 -4
- package/src/modules/widget/__tests__/naming.test.js +204 -0
- package/src/modules/widget/galleryStore.js +27 -2
- package/src/modules/widget/routes.js +21 -0
- package/src/modules/widget/schema.js +49 -1
- package/src/modules/widget/widgetTool.js +53 -0
- package/src/services/__tests__/apiKeyManager.test.js +163 -0
- package/src/services/__tests__/contextInjectionService.test.js +41 -0
- package/src/services/__tests__/flowContextService.test.js +391 -0
- package/src/services/apiKeyManager.js +54 -3
- package/src/services/contextInjectionService.js +24 -0
- 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__/platformControlAgentTeam.test.js +623 -0
- package/src/tools/__tests__/platformControlAgentTeamPermissions.test.js +253 -0
- package/src/tools/__tests__/platformControlAncestry.test.js +131 -0
- package/src/tools/__tests__/platformControlCascade.test.js +177 -0
- package/src/tools/__tests__/platformControlPermissions.test.js +128 -0
- package/src/tools/__tests__/platformControlPersistence.test.js +134 -0
- package/src/tools/__tests__/platformControlTool.test.js +391 -0
- package/src/tools/__tests__/terminalDedup.test.js +324 -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/ancestry.js +85 -0
- package/src/tools/platformControl/cascadeService.js +146 -0
- package/src/tools/platformControl/permissions.js +394 -0
- package/src/tools/platformControlTool.js +854 -0
- package/src/tools/terminalDedup.js +178 -0
- package/src/tools/terminalTool.js +28 -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/apiKeyPlaceholders.js +68 -0
- package/src/utilities/brand.js +93 -0
- package/src/utilities/constants.js +1 -1
- 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-DhNfWMWm.js +0 -1
- package/web-ui/build/static/abap-QOWHgSNA.js +0 -1
- package/web-ui/build/static/abnf-C9PFiETQ.js +0 -1
- package/web-ui/build/static/abnf-DEbBdEpP.js +0 -1
- package/web-ui/build/static/accesslog-DaKq5_Ts.js +0 -1
- package/web-ui/build/static/actionscript-BcY19SjW.js +0 -1
- package/web-ui/build/static/actionscript-CbLJrkm9.js +0 -1
- package/web-ui/build/static/ada-D1vjmumu.js +0 -1
- package/web-ui/build/static/ada-hAjtW1jL.js +0 -1
- package/web-ui/build/static/agda-Bhk3JFT9.js +0 -1
- package/web-ui/build/static/al-DYmeq5B0.js +0 -1
- package/web-ui/build/static/angelscript-BxCBNQXZ.js +0 -1
- package/web-ui/build/static/antlr4-CPmkdILF.js +0 -1
- package/web-ui/build/static/apache-CnwL2ZvW.js +0 -1
- package/web-ui/build/static/apacheconf-CfeBIh7R.js +0 -1
- package/web-ui/build/static/apex-C36kXZsT.js +0 -1
- package/web-ui/build/static/apl-CeT_l0YX.js +0 -1
- package/web-ui/build/static/applescript-BimsduDW.js +0 -1
- package/web-ui/build/static/applescript-CLBFEONC.js +0 -1
- package/web-ui/build/static/aql-DcXNMsw5.js +0 -1
- package/web-ui/build/static/arcade-CsONs-nh.js +0 -1
- package/web-ui/build/static/arduino-1XAf972o.js +0 -1
- package/web-ui/build/static/arduino-BkRulzgv.js +0 -1
- package/web-ui/build/static/arff-QhmkBHXy.js +0 -1
- package/web-ui/build/static/armasm-Cf34TCbg.js +0 -1
- package/web-ui/build/static/asciidoc-Dxk-KUUW.js +0 -1
- package/web-ui/build/static/asciidoc-mpuuiNok.js +0 -1
- package/web-ui/build/static/asm6502-0M2Se3gz.js +0 -1
- package/web-ui/build/static/asmatmel-DhFK-DLd.js +0 -1
- package/web-ui/build/static/aspectj-BKNOwBC8.js +0 -1
- package/web-ui/build/static/aspnet-BZ88RTxR.js +0 -1
- package/web-ui/build/static/autohotkey-DGmMm6oy.js +0 -1
- package/web-ui/build/static/autohotkey-HUDPuon_.js +0 -1
- package/web-ui/build/static/autoit-B-YW8YdA.js +0 -1
- package/web-ui/build/static/autoit-CvHRbbE-.js +0 -1
- package/web-ui/build/static/avisynth-C6iP20gR.js +0 -1
- package/web-ui/build/static/avrasm-AOIVGwnb.js +0 -1
- package/web-ui/build/static/avro-idl-CcPf6wBK.js +0 -1
- package/web-ui/build/static/awk-Dy8_cKla.js +0 -1
- package/web-ui/build/static/axapta-CexCCXgI.js +0 -1
- package/web-ui/build/static/bash-DKgFZb-B.js +0 -1
- package/web-ui/build/static/bash-DrUQRf4E.js +0 -1
- package/web-ui/build/static/basic-BXDUD6us.js +0 -1
- package/web-ui/build/static/basic-DlEL_-PG.js +0 -1
- package/web-ui/build/static/batch-HHuRbek7.js +0 -1
- package/web-ui/build/static/bbcode-D4lEyfHq.js +0 -1
- package/web-ui/build/static/bicep-Ca66VjcC.js +0 -1
- package/web-ui/build/static/birb-BWDnQG3-.js +0 -1
- package/web-ui/build/static/bison-DGEvuoCn.js +0 -1
- package/web-ui/build/static/bnf-DNrgnFxK.js +0 -1
- package/web-ui/build/static/bnf-DkGg9a6f.js +0 -1
- package/web-ui/build/static/brainfuck-BcC5WVuw.js +0 -1
- package/web-ui/build/static/brainfuck-Dzx6V6EF.js +0 -1
- package/web-ui/build/static/brightscript-26Asmy4_.js +0 -1
- package/web-ui/build/static/bro-CFV9ava2.js +0 -1
- package/web-ui/build/static/bsl-BHMAYVVg.js +0 -1
- package/web-ui/build/static/c-B7WGfC_g.js +0 -1
- package/web-ui/build/static/c-CUYmQ5h3.js +0 -1
- package/web-ui/build/static/c-like-BSddZquS.js +0 -1
- package/web-ui/build/static/cal-DQjwjuMG.js +0 -1
- package/web-ui/build/static/capnproto-CBnYJDMr.js +0 -1
- package/web-ui/build/static/ceylon-ce3L4vqX.js +0 -1
- package/web-ui/build/static/cfscript-CN8IKzxH.js +0 -1
- package/web-ui/build/static/chaiscript-DT-qasen.js +0 -1
- package/web-ui/build/static/cil-BPu0-6KT.js +0 -1
- package/web-ui/build/static/clean-BWcUgtLl.js +0 -1
- package/web-ui/build/static/clojure-CVLbUcEn.js +0 -1
- package/web-ui/build/static/clojure-mVJcgmKZ.js +0 -1
- package/web-ui/build/static/clojure-repl-B1bPQUgE.js +0 -1
- package/web-ui/build/static/cmake-ApAYr4_A.js +0 -1
- package/web-ui/build/static/cmake-oI81UP1F.js +0 -1
- package/web-ui/build/static/cobol-eZdxawKH.js +0 -1
- package/web-ui/build/static/coffeescript-BvFq14Nz.js +0 -1
- package/web-ui/build/static/coffeescript-CedrhcbC.js +0 -1
- package/web-ui/build/static/concurnas-8QctO6Q7.js +0 -1
- package/web-ui/build/static/coq-CaQMtKys.js +0 -1
- package/web-ui/build/static/coq-Di7lBRJy.js +0 -1
- package/web-ui/build/static/cos-3TjiDgk1.js +0 -1
- package/web-ui/build/static/cpp-BGwIhR_y.js +0 -1
- package/web-ui/build/static/cpp-CRXTx1YD.js +0 -1
- package/web-ui/build/static/crmsh-C67REd2u.js +0 -1
- package/web-ui/build/static/crystal-C8Rs5smk.js +0 -1
- package/web-ui/build/static/crystal-C8jnpN4t.js +0 -1
- package/web-ui/build/static/csharp-CqlFLWOu.js +0 -1
- package/web-ui/build/static/csharp-D1M9LcKj.js +0 -1
- package/web-ui/build/static/cshtml-BrYce3m1.js +0 -1
- package/web-ui/build/static/csp-DaMDae_q.js +0 -1
- package/web-ui/build/static/csp-DmoB74Pq.js +0 -1
- package/web-ui/build/static/css-Bm-MgPWM.js +0 -1
- package/web-ui/build/static/css-extras-T3f2IfaH.js +0 -1
- package/web-ui/build/static/csv-BgIvUIgl.js +0 -1
- package/web-ui/build/static/cypher-Bsq4PGhM.js +0 -1
- package/web-ui/build/static/d-Qt9QuUvk.js +0 -1
- package/web-ui/build/static/d-h4AYkhsS.js +0 -1
- package/web-ui/build/static/dart-DNDTBaSF.js +0 -1
- package/web-ui/build/static/dart-Dkg8Mtqj.js +0 -1
- package/web-ui/build/static/dataweave-XNvXnB4j.js +0 -1
- package/web-ui/build/static/dax-DAM3HOsu.js +0 -1
- package/web-ui/build/static/delphi-DTzj2E4U.js +0 -1
- package/web-ui/build/static/dhall-Brb1ufqF.js +0 -1
- package/web-ui/build/static/diff-3SMw9VwF.js +0 -1
- package/web-ui/build/static/diff-ssu7Mr2I.js +0 -1
- package/web-ui/build/static/django-CK_xvPUY.js +0 -1
- package/web-ui/build/static/django-D9a4uL_8.js +0 -1
- package/web-ui/build/static/dns-Uvea7PR7.js +0 -1
- package/web-ui/build/static/dns-zone-file-BvD_LLn3.js +0 -1
- package/web-ui/build/static/docker-CC3kvxlv.js +0 -1
- package/web-ui/build/static/dockerfile-BRFh_Hdm.js +0 -1
- package/web-ui/build/static/dos-C-I0-qWQ.js +0 -1
- package/web-ui/build/static/dot-BmS_Nrtr.js +0 -1
- package/web-ui/build/static/dsconfig-CBWgrIVa.js +0 -1
- package/web-ui/build/static/dts-B31mUIV6.js +0 -1
- package/web-ui/build/static/dust-BBtJv286.js +0 -1
- package/web-ui/build/static/ebnf-CCA0ITCE.js +0 -1
- package/web-ui/build/static/ebnf-CeVJpQny.js +0 -1
- package/web-ui/build/static/editorconfig-Nhj95Qci.js +0 -1
- package/web-ui/build/static/eiffel-E7QJBlEz.js +0 -1
- package/web-ui/build/static/ejs-B9gYRoXo.js +0 -1
- package/web-ui/build/static/elixir-CYG1GGGp.js +0 -1
- package/web-ui/build/static/elixir-fNfEypj7.js +0 -1
- package/web-ui/build/static/elm-Td6N7vMU.js +0 -1
- package/web-ui/build/static/elm-v0-mxxuQ.js +0 -1
- package/web-ui/build/static/erb-BO3LQtQx.js +0 -1
- package/web-ui/build/static/erb-ez_pDLEC.js +0 -1
- package/web-ui/build/static/erlang-ChOZ-mbI.js +0 -1
- package/web-ui/build/static/erlang-DCBIueE-.js +0 -1
- package/web-ui/build/static/erlang-repl-CL0-sGxn.js +0 -1
- package/web-ui/build/static/etlua-CQdh26X0.js +0 -1
- package/web-ui/build/static/excel-BbAj2wuJ.js +0 -1
- package/web-ui/build/static/excel-formula-qBXUIcjs.js +0 -1
- package/web-ui/build/static/factor-BPO68YSz.js +0 -1
- package/web-ui/build/static/false-sZ2iLGj-.js +0 -1
- package/web-ui/build/static/firestore-security-rules-BmYLiQGh.js +0 -1
- package/web-ui/build/static/fix-Co_Dnq0A.js +0 -1
- package/web-ui/build/static/flix-DlEWTbVq.js +0 -1
- package/web-ui/build/static/flow-DnsnnZca.js +0 -1
- package/web-ui/build/static/fortran-B4OMllck.js +0 -1
- package/web-ui/build/static/fortran-_8ltaoLA.js +0 -1
- package/web-ui/build/static/fsharp-CY0Ix1iB.js +0 -1
- package/web-ui/build/static/fsharp-y6HOJqAr.js +0 -1
- package/web-ui/build/static/ftl-DvbP9VWU.js +0 -1
- package/web-ui/build/static/gams-DF3rxJoc.js +0 -1
- package/web-ui/build/static/gap-BSje56C-.js +0 -1
- package/web-ui/build/static/gauss-BqYXtLWM.js +0 -1
- package/web-ui/build/static/gcode-CBl-mAWK.js +0 -1
- package/web-ui/build/static/gcode-idSM0RsM.js +0 -1
- package/web-ui/build/static/gdscript-CniY3oYY.js +0 -1
- package/web-ui/build/static/gedcom-C1dJ3jCP.js +0 -1
- package/web-ui/build/static/gherkin-4jaQr3Lt.js +0 -1
- package/web-ui/build/static/gherkin-BRsS35Ed.js +0 -1
- package/web-ui/build/static/git-2a7wzptj.js +0 -1
- package/web-ui/build/static/glsl-Ckv4lBKB.js +0 -1
- package/web-ui/build/static/glsl-CnGjBp6a.js +0 -1
- package/web-ui/build/static/gml-DG3KVI4z.js +0 -1
- package/web-ui/build/static/gml-DxKOOp--.js +0 -1
- package/web-ui/build/static/gn-DmUPMuZR.js +0 -1
- package/web-ui/build/static/go-D8tYdcYa.js +0 -1
- package/web-ui/build/static/go-DpIavxCs.js +0 -1
- package/web-ui/build/static/go-module-BktUPko9.js +0 -1
- package/web-ui/build/static/golo-Ao-diOpI.js +0 -1
- package/web-ui/build/static/gradle-DHJSdPoJ.js +0 -1
- package/web-ui/build/static/graphql-HpsdbKFp.js +0 -1
- package/web-ui/build/static/groovy-B4BrZYtV.js +0 -1
- package/web-ui/build/static/groovy-BCIRzoWJ.js +0 -1
- package/web-ui/build/static/haml-B8Mj6Hex.js +0 -1
- package/web-ui/build/static/haml-Fo-yynuy.js +0 -1
- package/web-ui/build/static/handlebars-BnFawcCU.js +0 -1
- package/web-ui/build/static/handlebars-YZn3MEyv.js +0 -1
- package/web-ui/build/static/haskell-DutAI7D9.js +0 -1
- package/web-ui/build/static/haskell-Dvl0Yw7z.js +0 -1
- package/web-ui/build/static/haxe-6S205Iem.js +0 -1
- package/web-ui/build/static/haxe-aKgbIDi5.js +0 -1
- package/web-ui/build/static/hcl-Dt_vNekv.js +0 -1
- package/web-ui/build/static/hlsl-CupXb_iv.js +0 -1
- package/web-ui/build/static/hoon-Dg19YEzw.js +0 -1
- package/web-ui/build/static/hpkp-DCF8Ff3o.js +0 -1
- package/web-ui/build/static/hsp-D90yiizY.js +0 -1
- package/web-ui/build/static/hsts-Cf63XX0s.js +0 -1
- package/web-ui/build/static/htmlbars-DMbRiSo_.js +0 -1
- package/web-ui/build/static/http-DklRfzP4.js +0 -1
- package/web-ui/build/static/http-U94aUtJB.js +0 -1
- package/web-ui/build/static/hy-B2ESVqxB.js +0 -1
- package/web-ui/build/static/ichigojam-DrVZWL_q.js +0 -1
- package/web-ui/build/static/icon-CMA5sxLF.js +0 -1
- package/web-ui/build/static/icu-message-format-DyfbEZSi.js +0 -1
- package/web-ui/build/static/idris-lCmRODnZ.js +0 -1
- package/web-ui/build/static/iecst-CgrrW0EE.js +0 -1
- package/web-ui/build/static/ignore-BmZ03AWS.js +0 -1
- package/web-ui/build/static/index-CLLrOcOY.js +0 -1
- package/web-ui/build/static/index-Ck0Dg4M1.js +0 -13
- package/web-ui/build/static/index-DOAQiM34.css +0 -1
- package/web-ui/build/static/index-DjtEf-qv.js +0 -1029
- package/web-ui/build/static/inform7-BfOnAvVe.js +0 -1
- package/web-ui/build/static/inform7-JJIIMXTB.js +0 -1
- package/web-ui/build/static/ini-CIKxMbKN.js +0 -1
- package/web-ui/build/static/ini-T3DdG5H-.js +0 -1
- package/web-ui/build/static/io-K9Gdeq6M.js +0 -1
- package/web-ui/build/static/irpf90-BYsCcwwg.js +0 -1
- package/web-ui/build/static/isbl-jcjEwPPP.js +0 -1
- package/web-ui/build/static/j-DSNUhn5G.js +0 -1
- package/web-ui/build/static/java-BKwYwPEk.js +0 -1
- package/web-ui/build/static/java-DuZuc1lQ.js +0 -1
- package/web-ui/build/static/javadoc-Bd8CYqmj.js +0 -1
- package/web-ui/build/static/javadoclike-BcPQURih.js +0 -1
- package/web-ui/build/static/javascript-C7B2Ty3f.js +0 -1
- package/web-ui/build/static/javastacktrace-BRZBpTgb.js +0 -1
- package/web-ui/build/static/jboss-cli-DaXYYeAA.js +0 -1
- package/web-ui/build/static/jexl-oN152m0J.js +0 -1
- package/web-ui/build/static/jolie-BUWtG9eQ.js +0 -1
- package/web-ui/build/static/jq-ooTdhdbC.js +0 -1
- package/web-ui/build/static/js-extras-BQJ_tqbC.js +0 -1
- package/web-ui/build/static/js-templates-xygrVmsG.js +0 -1
- package/web-ui/build/static/jsdoc-BPMuWUGw.js +0 -1
- package/web-ui/build/static/json-DbssHgO1.js +0 -1
- package/web-ui/build/static/json-iOY4SV10.js +0 -1
- package/web-ui/build/static/json5-C_-PZnKE.js +0 -1
- package/web-ui/build/static/jsonp-BQakabW1.js +0 -1
- package/web-ui/build/static/jsstacktrace-DyDuNLl8.js +0 -1
- package/web-ui/build/static/jsx-DCQITdOi.js +0 -1
- package/web-ui/build/static/julia-BF0mftpu.js +0 -1
- package/web-ui/build/static/julia-TT2Hy-Ob.js +0 -1
- package/web-ui/build/static/julia-repl-UBoVaQSD.js +0 -1
- package/web-ui/build/static/keepalived-yNkg9KNG.js +0 -1
- package/web-ui/build/static/keyman-7ModFC-k.js +0 -1
- package/web-ui/build/static/kotlin-BjJgl7UF.js +0 -1
- package/web-ui/build/static/kotlin-GEW2sNY3.js +0 -1
- package/web-ui/build/static/kumir-CeWMdLSX.js +0 -1
- package/web-ui/build/static/kusto-NufgjlVz.js +0 -1
- package/web-ui/build/static/lasso-eUS0tR3e.js +0 -1
- package/web-ui/build/static/latex-C7prlA6j.js +0 -1
- package/web-ui/build/static/latex-Hx35xemv.js +0 -1
- package/web-ui/build/static/latte-Da8RAWgh.js +0 -1
- package/web-ui/build/static/ldif-DZVoiKm3.js +0 -1
- package/web-ui/build/static/leaf-OEtu9dZj.js +0 -1
- package/web-ui/build/static/less-0VwiOSeL.js +0 -1
- package/web-ui/build/static/less-CciyvbHx.js +0 -1
- package/web-ui/build/static/lilypond-blLDi6bC.js +0 -1
- package/web-ui/build/static/liquid-C8_7pWOo.js +0 -1
- package/web-ui/build/static/lisp-Dd28CPVg.js +0 -1
- package/web-ui/build/static/lisp-hWkYuWd0.js +0 -1
- package/web-ui/build/static/livecodeserver-7_v3dVy3.js +0 -1
- package/web-ui/build/static/livescript-B8YdZ4uV.js +0 -1
- package/web-ui/build/static/livescript-dLNrctPK.js +0 -1
- package/web-ui/build/static/llvm-BfTyXy_G.js +0 -1
- package/web-ui/build/static/llvm-CLvUvWLu.js +0 -1
- package/web-ui/build/static/log-DbsxiU9k.js +0 -1
- package/web-ui/build/static/lolcode-CfacgPRH.js +0 -1
- package/web-ui/build/static/lsl-nJWe_8hA.js +0 -1
- package/web-ui/build/static/lua-BzXX-n4X.js +0 -1
- package/web-ui/build/static/lua-Ds6K-rhW.js +0 -1
- package/web-ui/build/static/magma-U4RmSh9f.js +0 -1
- package/web-ui/build/static/makefile-CSCW5rGm.js +0 -1
- package/web-ui/build/static/makefile-kzE_oEn3.js +0 -1
- package/web-ui/build/static/markdown-CalHH_DC.js +0 -1
- package/web-ui/build/static/markdown-Cqr_u0Ad.js +0 -1
- package/web-ui/build/static/markup-templating-BTOI73DQ.js +0 -1
- package/web-ui/build/static/mathematica-NX1KG9I0.js +0 -1
- package/web-ui/build/static/matlab-BAn1HwNV.js +0 -1
- package/web-ui/build/static/matlab-Bdg2LWPm.js +0 -1
- package/web-ui/build/static/maxima-DjRYVgK8.js +0 -1
- package/web-ui/build/static/maxscript-xwiWU5-Z.js +0 -1
- package/web-ui/build/static/mel-BgwB0sDS.js +0 -1
- package/web-ui/build/static/mel-CIouMI9e.js +0 -1
- package/web-ui/build/static/mercury-Do8hrPEb.js +0 -1
- package/web-ui/build/static/mermaid-BGEw9Ybx.js +0 -1
- package/web-ui/build/static/mipsasm-BDqQqoDE.js +0 -1
- package/web-ui/build/static/mizar-7lZfUsYd.js +0 -1
- package/web-ui/build/static/mizar-D7O18zEE.js +0 -1
- package/web-ui/build/static/mojolicious-DqmJjzUO.js +0 -1
- package/web-ui/build/static/mongodb-CXRl7RlT.js +0 -1
- package/web-ui/build/static/monkey-DE9L51qk.js +0 -1
- package/web-ui/build/static/monkey-DM9WNqkW.js +0 -1
- package/web-ui/build/static/moonscript-D8lRTdQE.js +0 -1
- package/web-ui/build/static/moonscript-DFEVxKjh.js +0 -1
- package/web-ui/build/static/n1ql-B3BB__pa.js +0 -1
- package/web-ui/build/static/n1ql-Br4OECGn.js +0 -1
- package/web-ui/build/static/n4js-BPNwKp4U.js +0 -1
- package/web-ui/build/static/nand2tetris-hdl-BrjXXFUn.js +0 -1
- package/web-ui/build/static/naniscript-COGKQbvR.js +0 -1
- package/web-ui/build/static/nasm-BHOt34Wi.js +0 -1
- package/web-ui/build/static/neon-CYjyYixT.js +0 -1
- package/web-ui/build/static/nevod-CILFZbPW.js +0 -1
- package/web-ui/build/static/nginx-B7B9La6b.js +0 -1
- package/web-ui/build/static/nginx-Dcs1btfu.js +0 -1
- package/web-ui/build/static/nim-B39Qq_sB.js +0 -1
- package/web-ui/build/static/nim-Cm0o-zEI.js +0 -1
- package/web-ui/build/static/nix-Bb4CX-fQ.js +0 -1
- package/web-ui/build/static/nix-C3bIutdy.js +0 -1
- package/web-ui/build/static/node-repl-BtbNtavi.js +0 -1
- package/web-ui/build/static/nsis-CJpMkpQy.js +0 -1
- package/web-ui/build/static/nsis-h39nQk_L.js +0 -1
- package/web-ui/build/static/objectivec-BIV3Kmu2.js +0 -1
- package/web-ui/build/static/objectivec-CNhpMYiK.js +0 -1
- package/web-ui/build/static/ocaml-Ld6KARDY.js +0 -1
- package/web-ui/build/static/ocaml-upCImTLO.js +0 -1
- package/web-ui/build/static/opencl-CfWJp1hT.js +0 -1
- package/web-ui/build/static/openqasm-i8xT4CAo.js +0 -1
- package/web-ui/build/static/openscad-CzWxpIx6.js +0 -1
- package/web-ui/build/static/oxygene-CCokKj_U.js +0 -1
- package/web-ui/build/static/oz-BBdHXCgw.js +0 -1
- package/web-ui/build/static/parigp-C6n5F4KO.js +0 -1
- package/web-ui/build/static/parser-C2RrTYYO.js +0 -1
- package/web-ui/build/static/parser3-BaAVXypg.js +0 -1
- package/web-ui/build/static/pascal-UeXMBbP2.js +0 -1
- package/web-ui/build/static/pascaligo-CYD4ZqHc.js +0 -1
- package/web-ui/build/static/pcaxis-CuN2yCzi.js +0 -1
- package/web-ui/build/static/peoplecode-H1Adh-ll.js +0 -1
- package/web-ui/build/static/perl-DCyTMUn2.js +0 -1
- package/web-ui/build/static/perl-V4mDd6YP.js +0 -1
- package/web-ui/build/static/pf-5iH6Mo1D.js +0 -1
- package/web-ui/build/static/pgsql-CrmNuytU.js +0 -1
- package/web-ui/build/static/php-AWteRwUZ.js +0 -1
- package/web-ui/build/static/php-B-dr82M2.js +0 -1
- package/web-ui/build/static/php-extras-CVQI7yIC.js +0 -1
- package/web-ui/build/static/php-template-BW_DclRa.js +0 -1
- package/web-ui/build/static/phpdoc-Cfv3EM5F.js +0 -1
- package/web-ui/build/static/plaintext-CyfmYRWM.js +0 -1
- package/web-ui/build/static/plsql-DIfiFLDw.js +0 -1
- package/web-ui/build/static/pony-DjBwB1l2.js +0 -1
- package/web-ui/build/static/powerquery-D80luSMu.js +0 -1
- package/web-ui/build/static/powershell-Cai1oPSE.js +0 -1
- package/web-ui/build/static/powershell-qk5MHehm.js +0 -1
- package/web-ui/build/static/processing-DGNtNe05.js +0 -1
- package/web-ui/build/static/processing-DHK3kwAe.js +0 -1
- package/web-ui/build/static/profile-D6MBLt-p.js +0 -1
- package/web-ui/build/static/prolog-CqKHjX9T.js +0 -1
- package/web-ui/build/static/prolog-CwAlj8yp.js +0 -1
- package/web-ui/build/static/promql-Cwo7B1q9.js +0 -1
- package/web-ui/build/static/properties-03DbKSuC.js +0 -1
- package/web-ui/build/static/properties-BlFjiqSF.js +0 -1
- package/web-ui/build/static/protobuf-DFZRRGno.js +0 -1
- package/web-ui/build/static/protobuf-D_GKOSo6.js +0 -1
- package/web-ui/build/static/psl-RSBmgd7b.js +0 -1
- package/web-ui/build/static/pug-DzBjT8h1.js +0 -1
- package/web-ui/build/static/puppet-BwyNySh7.js +0 -1
- package/web-ui/build/static/puppet-CHJRn6Na.js +0 -1
- package/web-ui/build/static/pure-XbBeN0U7.js +0 -1
- package/web-ui/build/static/purebasic-BeRgP1y5.js +0 -1
- package/web-ui/build/static/purebasic-XGD8k1X_.js +0 -1
- package/web-ui/build/static/purescript-DPej8C9k.js +0 -1
- package/web-ui/build/static/python-DK4CPbFS.js +0 -1
- package/web-ui/build/static/python-repl-BDrlZxhA.js +0 -1
- package/web-ui/build/static/python-sRExKvGw.js +0 -1
- package/web-ui/build/static/q-B8K1uEtE.js +0 -1
- package/web-ui/build/static/q-iptUl3TG.js +0 -1
- package/web-ui/build/static/qml-Ck-8E28D.js +0 -1
- package/web-ui/build/static/qml-DapR8Kud.js +0 -1
- package/web-ui/build/static/qore-Bq2u6ALt.js +0 -1
- package/web-ui/build/static/qsharp-C9FGwAhI.js +0 -1
- package/web-ui/build/static/r-B8PZ1lyW.js +0 -1
- package/web-ui/build/static/r-jsXxivRe.js +0 -1
- package/web-ui/build/static/racket-BW1YY6oG.js +0 -1
- package/web-ui/build/static/reason-CGrwEH7Y.js +0 -1
- package/web-ui/build/static/reasonml-D2S9u5tv.js +0 -1
- package/web-ui/build/static/regex-Bx_rkaF-.js +0 -1
- package/web-ui/build/static/rego-DYSQb1aU.js +0 -1
- package/web-ui/build/static/renpy-DoEOEpqT.js +0 -1
- package/web-ui/build/static/rest-6xfrLQ1u.js +0 -1
- package/web-ui/build/static/rib-BH2XAOdJ.js +0 -1
- package/web-ui/build/static/rip-BOcHDByA.js +0 -1
- package/web-ui/build/static/roboconf-8nB4fpob.js +0 -1
- package/web-ui/build/static/roboconf-BjKYzQ_Z.js +0 -1
- package/web-ui/build/static/robotframework-BIAT2wY6.js +0 -1
- package/web-ui/build/static/routeros-Bt6cTmB2.js +0 -1
- package/web-ui/build/static/rsl-XvWWVxz_.js +0 -1
- package/web-ui/build/static/ruby-CEfc9tVA.js +0 -1
- package/web-ui/build/static/ruby-CKNSKxB1.js +0 -1
- package/web-ui/build/static/ruleslanguage-tpn62qMj.js +0 -1
- package/web-ui/build/static/rust-Cb-H3ah6.js +0 -1
- package/web-ui/build/static/rust-CmAiRDXU.js +0 -1
- package/web-ui/build/static/sas-6JRKVKN4.js +0 -1
- package/web-ui/build/static/sas-BnSXGxyB.js +0 -1
- package/web-ui/build/static/sass-RPp8p1Ef.js +0 -1
- package/web-ui/build/static/scala-BjZ--04s.js +0 -1
- package/web-ui/build/static/scala-CbHbqC82.js +0 -1
- package/web-ui/build/static/scheme-51taSudc.js +0 -1
- package/web-ui/build/static/scheme-FF2J1d7z.js +0 -1
- package/web-ui/build/static/scilab-CSU1i7r7.js +0 -1
- package/web-ui/build/static/scss-Bf9-1Rwp.js +0 -1
- package/web-ui/build/static/scss-kWs2GBCV.js +0 -1
- package/web-ui/build/static/shell-B6aH0_VB.js +0 -1
- package/web-ui/build/static/shell-session-42tFBoqK.js +0 -1
- package/web-ui/build/static/smali-BTC2VGoh.js +0 -1
- package/web-ui/build/static/smali-CFCAUthF.js +0 -1
- package/web-ui/build/static/smalltalk-C4Z4p5Ld.js +0 -1
- package/web-ui/build/static/smalltalk-DS9teHSb.js +0 -1
- package/web-ui/build/static/smarty-9tLXgYFw.js +0 -1
- package/web-ui/build/static/sml-CvQCOzHl.js +0 -1
- package/web-ui/build/static/sml-D7VN7gLP.js +0 -1
- package/web-ui/build/static/solidity-C8mgaeFG.js +0 -1
- package/web-ui/build/static/solution-file-BW6eSi9-.js +0 -1
- package/web-ui/build/static/soy-iYu8WojY.js +0 -1
- package/web-ui/build/static/sparql-fr7u_sdF.js +0 -1
- package/web-ui/build/static/splunk-spl-C1ELr7BN.js +0 -1
- package/web-ui/build/static/sqf-8e9uVb30.js +0 -1
- package/web-ui/build/static/sqf-CWavw2F4.js +0 -1
- package/web-ui/build/static/sql-DC_QvrP2.js +0 -1
- package/web-ui/build/static/sql-yLctL19P.js +0 -1
- package/web-ui/build/static/sql_more-KfXMatfe.js +0 -1
- package/web-ui/build/static/squirrel-Bjd69daG.js +0 -1
- package/web-ui/build/static/stan-CaplZnB-.js +0 -1
- package/web-ui/build/static/stan-UYitmAjw.js +0 -1
- package/web-ui/build/static/stata-Beng42ZG.js +0 -1
- package/web-ui/build/static/step21-jqm1hcSr.js +0 -1
- package/web-ui/build/static/stylus-DB7RdP7s.js +0 -1
- package/web-ui/build/static/stylus-IFC9sMcH.js +0 -1
- package/web-ui/build/static/subunit-B75tNAV5.js +0 -1
- package/web-ui/build/static/swift-BRcicKMn.js +0 -1
- package/web-ui/build/static/swift-s8OoLWy_.js +0 -1
- package/web-ui/build/static/systemd-BC7VQvFw.js +0 -1
- package/web-ui/build/static/t4-cs-C6aVcIEq.js +0 -1
- package/web-ui/build/static/t4-templating-cVFAPDZQ.js +0 -1
- package/web-ui/build/static/t4-vb-DwpqTEJL.js +0 -1
- package/web-ui/build/static/taggerscript-GaB8ayWT.js +0 -1
- package/web-ui/build/static/tap-DN_-tQNk.js +0 -1
- package/web-ui/build/static/tap-XgwFSVSK.js +0 -1
- package/web-ui/build/static/tcl-D6eT7YQe.js +0 -1
- package/web-ui/build/static/tcl-DiEmh3pJ.js +0 -1
- package/web-ui/build/static/textile-cNMT-4v2.js +0 -1
- package/web-ui/build/static/thrift-DTgTgcBm.js +0 -1
- package/web-ui/build/static/toml-B8XPB_4B.js +0 -1
- package/web-ui/build/static/tp-NpmS9CLR.js +0 -1
- package/web-ui/build/static/tremor-OVZ172ee.js +0 -1
- package/web-ui/build/static/tsx-B1xtIV1E.js +0 -1
- package/web-ui/build/static/tt2-DITHT_e6.js +0 -1
- package/web-ui/build/static/turtle-D3IrO7qu.js +0 -1
- package/web-ui/build/static/twig-Bwmu1-US.js +0 -1
- package/web-ui/build/static/twig-CmWIdHrv.js +0 -1
- package/web-ui/build/static/typescript-BI4GgjOm.js +0 -1
- package/web-ui/build/static/typescript-D6hycyND.js +0 -1
- package/web-ui/build/static/typoscript-5S0Q3h4I.js +0 -1
- package/web-ui/build/static/unrealscript-CaROCOEp.js +0 -1
- package/web-ui/build/static/uorazor-VyIQ6lvW.js +0 -1
- package/web-ui/build/static/uri-DDdjLj4-.js +0 -1
- package/web-ui/build/static/v-CzPHqjdM.js +0 -1
- package/web-ui/build/static/vala-CRK3Oxn2.js +0 -1
- package/web-ui/build/static/vala-DTG5j_IY.js +0 -1
- package/web-ui/build/static/vbnet-C6z8S410.js +0 -1
- package/web-ui/build/static/vbnet-cWNTX8Og.js +0 -1
- package/web-ui/build/static/vbscript-CyA_PhGn.js +0 -1
- package/web-ui/build/static/vbscript-html-CidnweeC.js +0 -1
- package/web-ui/build/static/velocity-Dp6ZU1nS.js +0 -1
- package/web-ui/build/static/verilog-CilE-jD9.js +0 -1
- package/web-ui/build/static/verilog-RAde9Uda.js +0 -1
- package/web-ui/build/static/vhdl-CHS4lDo8.js +0 -1
- package/web-ui/build/static/vhdl-D5o9ErDa.js +0 -1
- package/web-ui/build/static/vim-B8jwaGJ6.js +0 -1
- package/web-ui/build/static/vim-BZrCpxwn.js +0 -1
- package/web-ui/build/static/visual-basic-By6WIP3n.js +0 -1
- package/web-ui/build/static/warpscript-BQF8R5WL.js +0 -1
- package/web-ui/build/static/wasm-DJyk23np.js +0 -1
- package/web-ui/build/static/web-idl-DezqVYtV.js +0 -1
- package/web-ui/build/static/wiki-CiJcHWqV.js +0 -1
- package/web-ui/build/static/wolfram-DjwPz6pa.js +0 -1
- package/web-ui/build/static/wren-lzb3aV3F.js +0 -1
- package/web-ui/build/static/x86asm-CCNfO4dU.js +0 -1
- package/web-ui/build/static/xeora-CRaNjAb0.js +0 -1
- package/web-ui/build/static/xl-CRqWPyuc.js +0 -1
- package/web-ui/build/static/xml-Uuta5J77.js +0 -1
- package/web-ui/build/static/xml-doc-Drc3ho9Y.js +0 -1
- package/web-ui/build/static/xojo-D2WT5Q0J.js +0 -1
- package/web-ui/build/static/xquery-CwB9Zxcf.js +0 -1
- package/web-ui/build/static/xquery-DA5NuZxN.js +0 -1
- package/web-ui/build/static/yaml-DJMpA9ia.js +0 -1
- package/web-ui/build/static/yaml-DxiY0s1_.js +0 -1
- package/web-ui/build/static/yang-DPrwGYlZ.js +0 -1
- package/web-ui/build/static/zephir-DOfPWp4I.js +0 -1
- package/web-ui/build/static/zig-BE1mX447.js +0 -1
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent context + memory routes.
|
|
3
|
+
*
|
|
4
|
+
* Powers the "Memory" tab in the AgentEditModal. Three concerns:
|
|
5
|
+
*
|
|
6
|
+
* 1. Memory catalog CRUD — backed by MemoryService.
|
|
7
|
+
* GET /api/agents/:agentId/memories
|
|
8
|
+
* POST /api/agents/:agentId/memories
|
|
9
|
+
* PUT /api/agents/:agentId/memories/:memoryId
|
|
10
|
+
* DELETE /api/agents/:agentId/memories/:memoryId
|
|
11
|
+
*
|
|
12
|
+
* 2. Live "what would be sent to the model on the next turn" snapshot —
|
|
13
|
+
* the full system prompt (with all tool/capability injections), the
|
|
14
|
+
* message array assembled by agentPool.getMessagesForAI, and the
|
|
15
|
+
* pending message queues that haven't been folded in yet.
|
|
16
|
+
* GET /api/agents/:agentId/context-snapshot
|
|
17
|
+
*
|
|
18
|
+
* 3. Future: any other "lives inside the context window" data
|
|
19
|
+
* (compaction state, working dir, persisted skills, …) gets added
|
|
20
|
+
* here as a single read-only window into agent state.
|
|
21
|
+
*
|
|
22
|
+
* Extracted as a module (not inline in webServer.js) so the routes are
|
|
23
|
+
* testable in isolation against a fake express + injected dependencies,
|
|
24
|
+
* mirroring the schedulerRoutes / widget routes pattern.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {object} app express app
|
|
29
|
+
* @param {object} deps
|
|
30
|
+
* @param {() => object|null} deps.getAgentPool resolve agentPool at request time
|
|
31
|
+
* @param {(logger?) => object} deps.getMemoryService memory service factory
|
|
32
|
+
* @param {object} [deps.logger]
|
|
33
|
+
*/
|
|
34
|
+
export function registerAgentContextRoutes(app, deps = {}) {
|
|
35
|
+
if (!app) return;
|
|
36
|
+
const getAgentPool = typeof deps.getAgentPool === 'function' ? deps.getAgentPool : () => null;
|
|
37
|
+
const getMemoryService = typeof deps.getMemoryService === 'function' ? deps.getMemoryService : null;
|
|
38
|
+
const logger = deps.logger || { error: () => {}, warn: () => {} };
|
|
39
|
+
|
|
40
|
+
if (!getMemoryService) {
|
|
41
|
+
// Module is wired up but no memory service available — bail gracefully.
|
|
42
|
+
// Routes will return 503 below; we don't even register them.
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// ── Memory CRUD ─────────────────────────────────────────────────────
|
|
47
|
+
|
|
48
|
+
// GET /api/agents/:agentId/memories — full memory objects (content + metadata).
|
|
49
|
+
app.get('/api/agents/:agentId/memories', async (req, res) => {
|
|
50
|
+
try {
|
|
51
|
+
const { agentId } = req.params;
|
|
52
|
+
if (!agentId) return res.status(400).json({ success: false, error: 'agentId is required' });
|
|
53
|
+
const svc = getMemoryService(logger);
|
|
54
|
+
const memories = await svc.loadMemories(agentId);
|
|
55
|
+
res.json({ success: true, count: memories.length, memories });
|
|
56
|
+
} catch (err) {
|
|
57
|
+
logger.error('[agentContext] list memories failed', { error: err?.message });
|
|
58
|
+
res.status(500).json({ success: false, error: err?.message || 'unknown' });
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// POST /api/agents/:agentId/memories — add memory.
|
|
63
|
+
// Body: { title (required), description?, content (required), expiration? }
|
|
64
|
+
app.post('/api/agents/:agentId/memories', async (req, res) => {
|
|
65
|
+
try {
|
|
66
|
+
const { agentId } = req.params;
|
|
67
|
+
const { title, description, content, expiration } = req.body || {};
|
|
68
|
+
if (!agentId) return res.status(400).json({ success: false, error: 'agentId is required' });
|
|
69
|
+
if (typeof title !== 'string' || !title.trim()) {
|
|
70
|
+
return res.status(400).json({ success: false, error: 'title (non-empty string) is required' });
|
|
71
|
+
}
|
|
72
|
+
if (typeof content !== 'string' || !content.trim()) {
|
|
73
|
+
return res.status(400).json({ success: false, error: 'content (non-empty string) is required' });
|
|
74
|
+
}
|
|
75
|
+
const svc = getMemoryService(logger);
|
|
76
|
+
const memory = await svc.addMemory(agentId, {
|
|
77
|
+
title: title.trim(),
|
|
78
|
+
description: typeof description === 'string' ? description.trim() : '',
|
|
79
|
+
content,
|
|
80
|
+
expiration,
|
|
81
|
+
});
|
|
82
|
+
res.json({ success: true, memory });
|
|
83
|
+
} catch (err) {
|
|
84
|
+
logger.error('[agentContext] add memory failed', { error: err?.message });
|
|
85
|
+
res.status(500).json({ success: false, error: err?.message || 'unknown' });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
// PUT /api/agents/:agentId/memories/:memoryId — update memory.
|
|
90
|
+
// Body: any subset of { title, description, content, expiration }.
|
|
91
|
+
app.put('/api/agents/:agentId/memories/:memoryId', async (req, res) => {
|
|
92
|
+
try {
|
|
93
|
+
const { agentId, memoryId } = req.params;
|
|
94
|
+
if (!agentId || !memoryId) {
|
|
95
|
+
return res.status(400).json({ success: false, error: 'agentId and memoryId are required' });
|
|
96
|
+
}
|
|
97
|
+
const updates = req.body || {};
|
|
98
|
+
const svc = getMemoryService(logger);
|
|
99
|
+
const memory = await svc.updateMemory(agentId, memoryId, updates);
|
|
100
|
+
if (!memory) return res.status(404).json({ success: false, error: `Memory not found: ${memoryId}` });
|
|
101
|
+
res.json({ success: true, memory });
|
|
102
|
+
} catch (err) {
|
|
103
|
+
logger.error('[agentContext] update memory failed', { error: err?.message });
|
|
104
|
+
res.status(500).json({ success: false, error: err?.message || 'unknown' });
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// DELETE /api/agents/:agentId/memories/:memoryId — delete memory.
|
|
109
|
+
app.delete('/api/agents/:agentId/memories/:memoryId', async (req, res) => {
|
|
110
|
+
try {
|
|
111
|
+
const { agentId, memoryId } = req.params;
|
|
112
|
+
if (!agentId || !memoryId) {
|
|
113
|
+
return res.status(400).json({ success: false, error: 'agentId and memoryId are required' });
|
|
114
|
+
}
|
|
115
|
+
const svc = getMemoryService(logger);
|
|
116
|
+
const ok = await svc.deleteMemory(agentId, memoryId);
|
|
117
|
+
if (!ok) return res.status(404).json({ success: false, error: `Memory not found: ${memoryId}` });
|
|
118
|
+
res.json({ success: true });
|
|
119
|
+
} catch (err) {
|
|
120
|
+
logger.error('[agentContext] delete memory failed', { error: err?.message });
|
|
121
|
+
res.status(500).json({ success: false, error: err?.message || 'unknown' });
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// ── Context snapshot ────────────────────────────────────────────────
|
|
126
|
+
|
|
127
|
+
// GET /api/agents/:agentId/context-snapshot — atomic read-only view of
|
|
128
|
+
// everything "live in the context window" for this agent right now:
|
|
129
|
+
// - systemPrompt.original = user-authored prompt
|
|
130
|
+
// - systemPrompt.full = enhanced prompt with all tool injections
|
|
131
|
+
// - messages = exactly what getMessagesForAI returns
|
|
132
|
+
// (i.e. what would be sent on the next turn)
|
|
133
|
+
// - pendingQueues = msg queues not yet folded into the
|
|
134
|
+
// conversation history
|
|
135
|
+
// - stats = sizes, counts, model id
|
|
136
|
+
app.get('/api/agents/:agentId/context-snapshot', async (req, res) => {
|
|
137
|
+
try {
|
|
138
|
+
const { agentId } = req.params;
|
|
139
|
+
if (!agentId) return res.status(400).json({ success: false, error: 'agentId is required' });
|
|
140
|
+
|
|
141
|
+
const agentPool = getAgentPool();
|
|
142
|
+
if (!agentPool || typeof agentPool.getAgent !== 'function') {
|
|
143
|
+
return res.status(503).json({ success: false, error: 'agent pool not available' });
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const agent = await agentPool.getAgent(agentId);
|
|
147
|
+
if (!agent) return res.status(404).json({ success: false, error: `Agent not found: ${agentId}` });
|
|
148
|
+
|
|
149
|
+
// System prompt — both forms. `systemPrompt` is the enhanced one
|
|
150
|
+
// (with tool descriptions injected); `originalSystemPrompt` is the
|
|
151
|
+
// user-authored version. Showing both lets the user understand
|
|
152
|
+
// exactly what the model sees vs what they typed.
|
|
153
|
+
const original = agent.originalSystemPrompt || agent.systemPrompt || '';
|
|
154
|
+
const full = agent.systemPrompt || original;
|
|
155
|
+
|
|
156
|
+
// Messages prepared for the next turn. getMessagesForAI is the
|
|
157
|
+
// exact function the scheduler calls right before sending; this
|
|
158
|
+
// is the source of truth for "what would the model see now?".
|
|
159
|
+
const modelId = agent.currentModel || agent.preferredModel;
|
|
160
|
+
let messages = [];
|
|
161
|
+
let messagesError = null;
|
|
162
|
+
if (modelId && typeof agentPool.getMessagesForAI === 'function') {
|
|
163
|
+
try {
|
|
164
|
+
messages = await agentPool.getMessagesForAI(agentId, modelId);
|
|
165
|
+
} catch (e) {
|
|
166
|
+
// Don't fail the whole snapshot — surface the error inline so
|
|
167
|
+
// the user can see "messages couldn't be assembled" without
|
|
168
|
+
// losing the system-prompt + queue views.
|
|
169
|
+
messagesError = e?.message || String(e);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Per-message lightweight projection — strip enormous tool output
|
|
174
|
+
// bodies so the snapshot is bounded. Caller can re-query with a
|
|
175
|
+
// "give me message X in full" path if/when we add it.
|
|
176
|
+
const MAX_PREVIEW = 4000;
|
|
177
|
+
const projection = (Array.isArray(messages) ? messages : []).map((m, i) => {
|
|
178
|
+
const content = typeof m.content === 'string' ? m.content : safeStringify(m.content);
|
|
179
|
+
const truncated = content.length > MAX_PREVIEW;
|
|
180
|
+
return {
|
|
181
|
+
index: i,
|
|
182
|
+
role: m.role,
|
|
183
|
+
name: m.name || null,
|
|
184
|
+
contentPreview: truncated ? content.slice(0, MAX_PREVIEW) : content,
|
|
185
|
+
contentLength: content.length,
|
|
186
|
+
truncated,
|
|
187
|
+
timestamp: m.timestamp || null,
|
|
188
|
+
hasToolCalls: !!(m.toolCalls || m.tool_calls),
|
|
189
|
+
toolCallId: m.toolCallId || m.tool_call_id || null,
|
|
190
|
+
};
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
// Pending queues — what's waiting to be folded in but isn't yet.
|
|
194
|
+
const queues = agent.messageQueues || {};
|
|
195
|
+
const queueProjection = (arr, kind) => (Array.isArray(arr) ? arr : []).map((m, i) => ({
|
|
196
|
+
index: i,
|
|
197
|
+
kind,
|
|
198
|
+
contentPreview: safePreview(m?.content ?? m?.message ?? m?.text ?? '', 200),
|
|
199
|
+
timestamp: m?.timestamp || null,
|
|
200
|
+
}));
|
|
201
|
+
|
|
202
|
+
const totalSystemPromptLen = full.length;
|
|
203
|
+
const totalMessageLen = projection.reduce((acc, m) => acc + (m.contentLength || 0), 0);
|
|
204
|
+
// Rough token estimate (≈ 4 chars / token). Cheap and good enough
|
|
205
|
+
// for the UI bar; the model-side accounting still uses real tokenizers.
|
|
206
|
+
const estimatedTokens = Math.ceil((totalSystemPromptLen + totalMessageLen) / 4);
|
|
207
|
+
|
|
208
|
+
res.json({
|
|
209
|
+
success: true,
|
|
210
|
+
agent: {
|
|
211
|
+
id: agent.id,
|
|
212
|
+
name: agent.name,
|
|
213
|
+
mode: agent.mode,
|
|
214
|
+
status: agent.status,
|
|
215
|
+
currentModel: agent.currentModel || null,
|
|
216
|
+
preferredModel: agent.preferredModel || null,
|
|
217
|
+
},
|
|
218
|
+
systemPrompt: {
|
|
219
|
+
original,
|
|
220
|
+
full,
|
|
221
|
+
enhancementBytes: Math.max(0, full.length - original.length),
|
|
222
|
+
originalLength: original.length,
|
|
223
|
+
fullLength: full.length,
|
|
224
|
+
},
|
|
225
|
+
messages: projection,
|
|
226
|
+
messagesError,
|
|
227
|
+
pendingQueues: {
|
|
228
|
+
userMessages: queueProjection(queues.userMessages, 'user'),
|
|
229
|
+
interAgentMessages: queueProjection(queues.interAgentMessages, 'inter-agent'),
|
|
230
|
+
toolResults: queueProjection(queues.toolResults, 'tool-result'),
|
|
231
|
+
},
|
|
232
|
+
stats: {
|
|
233
|
+
messageCount: projection.length,
|
|
234
|
+
totalMessageBytes: totalMessageLen,
|
|
235
|
+
estimatedTokens,
|
|
236
|
+
generatedAt: new Date().toISOString(),
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
} catch (err) {
|
|
240
|
+
logger.error('[agentContext] snapshot failed', { error: err?.message });
|
|
241
|
+
res.status(500).json({ success: false, error: err?.message || 'unknown' });
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function safeStringify(v) {
|
|
247
|
+
if (v == null) return '';
|
|
248
|
+
try { return typeof v === 'string' ? v : JSON.stringify(v); }
|
|
249
|
+
catch { return String(v); }
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function safePreview(v, max) {
|
|
253
|
+
const s = safeStringify(v);
|
|
254
|
+
return s.length > max ? s.slice(0, max) : s;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export default { registerAgentContextRoutes };
|
|
@@ -43,9 +43,20 @@ import { initFileExplorerModule } from '../modules/fileExplorer/index.js';
|
|
|
43
43
|
|
|
44
44
|
// Import FlowExecutor for flow pipeline execution
|
|
45
45
|
import FlowExecutor from '../core/flowExecutor.js';
|
|
46
|
+
// Flow definition gate — rejects malformed flows BEFORE persistence/execution.
|
|
47
|
+
import { validateFlowDefinition } from '../core/flowSchema.js';
|
|
48
|
+
// Phase 4: disk checkpoint store backs resume/restart of failed runs.
|
|
49
|
+
import { FlowCheckpointStore } from '../core/flowCheckpointStore.js';
|
|
50
|
+
// Phase 5: editor lint — soft warnings (unbound placeholders, etc.)
|
|
51
|
+
import { lintFlow } from '../core/flowLint.js';
|
|
52
|
+
// Phase 6: append-only flow version archive (rollback support).
|
|
53
|
+
import { FlowVersionStore } from '../core/flowVersionStore.js';
|
|
46
54
|
|
|
47
55
|
// Scheduler visualizer routes (extracted for testability)
|
|
48
56
|
import { registerSchedulerRoutes } from './schedulerRoutes.js';
|
|
57
|
+
// Agent memory + context-snapshot routes — power the Memory tab in AgentEditModal.
|
|
58
|
+
import { registerAgentContextRoutes } from './agentContextRoutes.js';
|
|
59
|
+
import { getMemoryService } from '../services/memoryService.js';
|
|
49
60
|
|
|
50
61
|
const __filename = fileURLToPath(import.meta.url);
|
|
51
62
|
const __dirname = path.dirname(__filename);
|
|
@@ -533,6 +544,39 @@ class WebServer {
|
|
|
533
544
|
// WebServer has broadcastToSession method that FlowExecutor will use
|
|
534
545
|
this.flowExecutor.setWebSocketManager(this);
|
|
535
546
|
|
|
547
|
+
// Phase 4: wire a disk checkpoint store so failed/interrupted
|
|
548
|
+
// flow runs can be resumed instead of starting over from scratch.
|
|
549
|
+
// Stored under the user data dir alongside agent state so the
|
|
550
|
+
// data survives `npm i -g` updates and follows the user across
|
|
551
|
+
// working-directory changes. (Earlier code read `dataPaths?.dataDir`
|
|
552
|
+
// which doesn't exist on getUserDataPaths() — that fell through to
|
|
553
|
+
// process.cwd() and dropped checkpoints into whatever directory the
|
|
554
|
+
// process happened to start in. Use `state` instead, grouping with
|
|
555
|
+
// agents/, operations/, models/, skills/.)
|
|
556
|
+
try {
|
|
557
|
+
const dataPaths = getUserDataPaths();
|
|
558
|
+
const checkpointDir = path.join(dataPaths?.state || process.cwd(), 'flow-checkpoints');
|
|
559
|
+
const store = new FlowCheckpointStore({ baseDir: checkpointDir });
|
|
560
|
+
this.flowExecutor.setCheckpointStore(store);
|
|
561
|
+
this.logger.info('FlowExecutor checkpoint store enabled', { baseDir: checkpointDir });
|
|
562
|
+
} catch (err) {
|
|
563
|
+
// Non-fatal: continue without resumability rather than failing init.
|
|
564
|
+
this.logger.warn('Failed to enable flow checkpoint store (non-fatal)', { error: err.message });
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
// Phase 6: wire a version store so every flow save records an
|
|
568
|
+
// immutable snapshot. Used by /api/flows/:id/versions and
|
|
569
|
+
// /api/flows/:id/rollback. Stored alongside checkpoints under
|
|
570
|
+
// user data dir (see comment above for path-fix history).
|
|
571
|
+
try {
|
|
572
|
+
const dataPaths = getUserDataPaths();
|
|
573
|
+
const versionDir = path.join(dataPaths?.state || process.cwd(), 'flow-versions');
|
|
574
|
+
this.flowVersionStore = new FlowVersionStore({ baseDir: versionDir });
|
|
575
|
+
this.logger.info('Flow version store enabled', { baseDir: versionDir });
|
|
576
|
+
} catch (err) {
|
|
577
|
+
this.logger.warn('Failed to enable flow version store (non-fatal)', { error: err.message });
|
|
578
|
+
}
|
|
579
|
+
|
|
536
580
|
// Wire FlowExecutor into jobDoneTool so it can signal completion directly
|
|
537
581
|
const toolsRegistry = this.orchestrator?.toolsRegistry;
|
|
538
582
|
if (toolsRegistry) {
|
|
@@ -3494,6 +3538,14 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
|
|
|
3494
3538
|
html: SCHEDULER_VIEWER_HTML,
|
|
3495
3539
|
});
|
|
3496
3540
|
|
|
3541
|
+
// Agent context + memory routes (Memory tab in AgentEditModal).
|
|
3542
|
+
// Same thunk pattern: agentPool may be attached after route registration.
|
|
3543
|
+
registerAgentContextRoutes(this.app, {
|
|
3544
|
+
getAgentPool: () => this.orchestrator?.agentPool,
|
|
3545
|
+
getMemoryService,
|
|
3546
|
+
logger: this.logger,
|
|
3547
|
+
});
|
|
3548
|
+
|
|
3497
3549
|
// ============================================
|
|
3498
3550
|
// Artifacts API Endpoint
|
|
3499
3551
|
// ============================================
|
|
@@ -4238,9 +4290,37 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
|
|
|
4238
4290
|
});
|
|
4239
4291
|
}
|
|
4240
4292
|
|
|
4293
|
+
// If the resilient state loader recovered from missing/empty/
|
|
4294
|
+
// corrupt files, broadcast each recovery as a UI toast so the
|
|
4295
|
+
// operator sees what was salvaged. The reports were attached to
|
|
4296
|
+
// the restored agent in stateManager.restoreAgent.
|
|
4297
|
+
const recoveries = Array.isArray(agent._restoreRecoveries) ? agent._restoreRecoveries : [];
|
|
4298
|
+
if (recoveries.length > 0 && this.wsManager) {
|
|
4299
|
+
for (const r of recoveries) {
|
|
4300
|
+
this.wsManager.broadcast({
|
|
4301
|
+
type: 'state-file-recovery',
|
|
4302
|
+
level: r.kind === 'unrepairable' ? 'error'
|
|
4303
|
+
: r.kind === 'partial' ? 'warning'
|
|
4304
|
+
: 'info',
|
|
4305
|
+
agentId: agent.id,
|
|
4306
|
+
agentName: agent.name,
|
|
4307
|
+
recovery: {
|
|
4308
|
+
kind: r.kind,
|
|
4309
|
+
label: r.label,
|
|
4310
|
+
message: r.message,
|
|
4311
|
+
archivePath: r.archivePath || null,
|
|
4312
|
+
},
|
|
4313
|
+
});
|
|
4314
|
+
}
|
|
4315
|
+
}
|
|
4316
|
+
// Strip the recovery payload before logging/serializing back to
|
|
4317
|
+
// the client — it's an internal hint, not part of the agent shape.
|
|
4318
|
+
delete agent._restoreRecoveries;
|
|
4319
|
+
|
|
4241
4320
|
this.logger.info('Agent imported successfully', {
|
|
4242
4321
|
agentId: agent.id,
|
|
4243
|
-
name: agent.name
|
|
4322
|
+
name: agent.name,
|
|
4323
|
+
recoveryCount: recoveries.length,
|
|
4244
4324
|
});
|
|
4245
4325
|
|
|
4246
4326
|
res.json({
|
|
@@ -4253,7 +4333,12 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
|
|
|
4253
4333
|
capabilities: agent.capabilities,
|
|
4254
4334
|
lastActivity: agent.lastActivity
|
|
4255
4335
|
},
|
|
4256
|
-
message: `Agent ${agent.name} imported successfully
|
|
4336
|
+
message: `Agent ${agent.name} imported successfully`,
|
|
4337
|
+
// Surfaced to the importer too so a non-WS client (curl) sees
|
|
4338
|
+
// them in the response body.
|
|
4339
|
+
...(recoveries.length > 0 ? { recoveries: recoveries.map(r => ({
|
|
4340
|
+
kind: r.kind, label: r.label, message: r.message,
|
|
4341
|
+
})) } : {}),
|
|
4257
4342
|
});
|
|
4258
4343
|
} catch (error) {
|
|
4259
4344
|
this.logger.error('Failed to import agent', {
|
|
@@ -4712,10 +4797,15 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
|
|
|
4712
4797
|
try {
|
|
4713
4798
|
const { name, description, nodes, edges, variables } = req.body;
|
|
4714
4799
|
|
|
4715
|
-
|
|
4800
|
+
// Schema gate: reject malformed flows BEFORE they reach persistence
|
|
4801
|
+
// (avoids "saved but unexecutable" states). 400 with structured
|
|
4802
|
+
// errors so the editor can highlight specific problems inline.
|
|
4803
|
+
const validation = validateFlowDefinition({ name, nodes: nodes || [], edges: edges || [], variables });
|
|
4804
|
+
if (!validation.ok) {
|
|
4716
4805
|
return res.status(400).json({
|
|
4717
4806
|
success: false,
|
|
4718
|
-
error: 'Flow
|
|
4807
|
+
error: 'Flow definition is invalid',
|
|
4808
|
+
details: validation.errors
|
|
4719
4809
|
});
|
|
4720
4810
|
}
|
|
4721
4811
|
|
|
@@ -4728,6 +4818,20 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
|
|
|
4728
4818
|
variables
|
|
4729
4819
|
}, projectDir);
|
|
4730
4820
|
|
|
4821
|
+
// Phase 6: record initial version (v1). Best-effort — the flow
|
|
4822
|
+
// is already saved; failing to version is a non-fatal warning.
|
|
4823
|
+
// Stamp the version number back onto the flow record so runs
|
|
4824
|
+
// can record which definition produced their output.
|
|
4825
|
+
if (this.flowVersionStore && flow?.id) {
|
|
4826
|
+
try {
|
|
4827
|
+
const v = await this.flowVersionStore.recordVersion(flow.id, flow);
|
|
4828
|
+
const projectDir = this.orchestrator.config.project?.directory || process.cwd();
|
|
4829
|
+
await this.orchestrator.stateManager.updateFlow(flow.id, { version: v.version }, projectDir);
|
|
4830
|
+
flow.version = v.version;
|
|
4831
|
+
}
|
|
4832
|
+
catch (e) { this.logger.warn('flow version record failed', { error: e.message }); }
|
|
4833
|
+
}
|
|
4834
|
+
|
|
4731
4835
|
// Broadcast flow created event
|
|
4732
4836
|
if (this.wsManager) {
|
|
4733
4837
|
this.wsManager.broadcast({
|
|
@@ -4783,6 +4887,35 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
|
|
|
4783
4887
|
const { name, description, nodes, edges, variables } = req.body;
|
|
4784
4888
|
const projectDir = this.orchestrator.config.project?.directory || process.cwd();
|
|
4785
4889
|
|
|
4890
|
+
// PUT supports partial updates (e.g. just `{ nodes, edges }`
|
|
4891
|
+
// when the user clicks Save in the editor). Load the existing
|
|
4892
|
+
// flow and merge the patch before validating, so the schema
|
|
4893
|
+
// gate sees the full resulting record — not just the diff.
|
|
4894
|
+
const existing = await this.orchestrator.stateManager.getFlow(flowId, projectDir);
|
|
4895
|
+
if (!existing) {
|
|
4896
|
+
return res.status(404).json({ success: false, error: `Flow ${flowId} not found` });
|
|
4897
|
+
}
|
|
4898
|
+
const merged = {
|
|
4899
|
+
...existing,
|
|
4900
|
+
...(name !== undefined ? { name } : {}),
|
|
4901
|
+
...(description !== undefined ? { description } : {}),
|
|
4902
|
+
...(nodes !== undefined ? { nodes } : {}),
|
|
4903
|
+
...(edges !== undefined ? { edges } : {}),
|
|
4904
|
+
...(variables !== undefined ? { variables } : {}),
|
|
4905
|
+
};
|
|
4906
|
+
|
|
4907
|
+
// Same schema gate as POST. Editing a flow into an invalid state
|
|
4908
|
+
// is just as bad as creating one — both should be caught here, not
|
|
4909
|
+
// 90s into a future execution.
|
|
4910
|
+
const validation = validateFlowDefinition(merged);
|
|
4911
|
+
if (!validation.ok) {
|
|
4912
|
+
return res.status(400).json({
|
|
4913
|
+
success: false,
|
|
4914
|
+
error: 'Flow definition is invalid',
|
|
4915
|
+
details: validation.errors
|
|
4916
|
+
});
|
|
4917
|
+
}
|
|
4918
|
+
|
|
4786
4919
|
const flow = await this.orchestrator.stateManager.updateFlow(flowId, {
|
|
4787
4920
|
name,
|
|
4788
4921
|
description,
|
|
@@ -4791,6 +4924,17 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
|
|
|
4791
4924
|
variables
|
|
4792
4925
|
}, projectDir);
|
|
4793
4926
|
|
|
4927
|
+
// Phase 6: record a new version snapshot on every PUT and
|
|
4928
|
+
// stamp the new version number onto the live record.
|
|
4929
|
+
if (this.flowVersionStore && flow?.id) {
|
|
4930
|
+
try {
|
|
4931
|
+
const v = await this.flowVersionStore.recordVersion(flow.id, flow);
|
|
4932
|
+
await this.orchestrator.stateManager.updateFlow(flow.id, { version: v.version }, projectDir);
|
|
4933
|
+
flow.version = v.version;
|
|
4934
|
+
}
|
|
4935
|
+
catch (e) { this.logger.warn('flow version record failed', { error: e.message }); }
|
|
4936
|
+
}
|
|
4937
|
+
|
|
4794
4938
|
// Broadcast flow updated event
|
|
4795
4939
|
if (this.wsManager) {
|
|
4796
4940
|
this.wsManager.broadcast({
|
|
@@ -4945,6 +5089,140 @@ h2{color:#16a34a;margin-bottom:.5rem;} p{color:#666;}</style></head>
|
|
|
4945
5089
|
}
|
|
4946
5090
|
});
|
|
4947
5091
|
|
|
5092
|
+
// Phase 6: list versions of a flow (lightweight metadata only).
|
|
5093
|
+
this.app.get('/api/flows/:flowId/versions', async (req, res) => {
|
|
5094
|
+
try {
|
|
5095
|
+
if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
|
|
5096
|
+
const versions = await this.flowVersionStore.listVersions(req.params.flowId);
|
|
5097
|
+
res.json({ success: true, data: versions });
|
|
5098
|
+
} catch (error) {
|
|
5099
|
+
this.logger.error('list versions failed', { error: error.message });
|
|
5100
|
+
res.status(500).json({ success: false, error: error.message });
|
|
5101
|
+
}
|
|
5102
|
+
});
|
|
5103
|
+
|
|
5104
|
+
// Phase 6: read a specific version snapshot (full flow definition).
|
|
5105
|
+
this.app.get('/api/flows/:flowId/versions/:version', async (req, res) => {
|
|
5106
|
+
try {
|
|
5107
|
+
if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
|
|
5108
|
+
const v = parseInt(req.params.version, 10);
|
|
5109
|
+
if (!Number.isFinite(v) || v < 1) {
|
|
5110
|
+
return res.status(400).json({ success: false, error: 'version must be a positive integer' });
|
|
5111
|
+
}
|
|
5112
|
+
const snap = await this.flowVersionStore.loadVersion(req.params.flowId, v);
|
|
5113
|
+
if (!snap) return res.status(404).json({ success: false, error: 'version not found' });
|
|
5114
|
+
res.json({ success: true, data: snap });
|
|
5115
|
+
} catch (error) {
|
|
5116
|
+
this.logger.error('load version failed', { error: error.message });
|
|
5117
|
+
res.status(500).json({ success: false, error: error.message });
|
|
5118
|
+
}
|
|
5119
|
+
});
|
|
5120
|
+
|
|
5121
|
+
// Phase 6: rollback — restore version N as the live flow record.
|
|
5122
|
+
// Body: { version: N }. Records ANOTHER new version after rollback
|
|
5123
|
+
// so history stays append-only ("rolled back to v3" produces v(N+1)).
|
|
5124
|
+
this.app.post('/api/flows/:flowId/rollback', async (req, res) => {
|
|
5125
|
+
try {
|
|
5126
|
+
if (!this.flowVersionStore) return res.status(503).json({ success: false, error: 'version store not available' });
|
|
5127
|
+
const { flowId } = req.params;
|
|
5128
|
+
const target = parseInt(req.body?.version, 10);
|
|
5129
|
+
if (!Number.isFinite(target) || target < 1) {
|
|
5130
|
+
return res.status(400).json({ success: false, error: 'body.version must be a positive integer' });
|
|
5131
|
+
}
|
|
5132
|
+
const snap = await this.flowVersionStore.loadVersion(flowId, target);
|
|
5133
|
+
if (!snap) return res.status(404).json({ success: false, error: `version ${target} not found` });
|
|
5134
|
+
|
|
5135
|
+
// Validate the target snapshot before promoting it. A flow that
|
|
5136
|
+
// passed validation when first saved may now be invalid against
|
|
5137
|
+
// a newer schema — surfacing that here is better than at execute.
|
|
5138
|
+
const validation = validateFlowDefinition(snap.flow);
|
|
5139
|
+
if (!validation.ok) {
|
|
5140
|
+
return res.status(400).json({
|
|
5141
|
+
success: false,
|
|
5142
|
+
error: `version ${target} fails current validation`,
|
|
5143
|
+
details: validation.errors,
|
|
5144
|
+
});
|
|
5145
|
+
}
|
|
5146
|
+
|
|
5147
|
+
const projectDir = this.orchestrator.config.project?.directory || process.cwd();
|
|
5148
|
+
const restored = await this.orchestrator.stateManager.updateFlow(flowId, {
|
|
5149
|
+
name: snap.flow.name,
|
|
5150
|
+
description: snap.flow.description,
|
|
5151
|
+
nodes: snap.flow.nodes,
|
|
5152
|
+
edges: snap.flow.edges,
|
|
5153
|
+
variables: snap.flow.variables,
|
|
5154
|
+
}, projectDir);
|
|
5155
|
+
|
|
5156
|
+
// Append a new version entry tagging the rollback
|
|
5157
|
+
try {
|
|
5158
|
+
await this.flowVersionStore.recordVersion(flowId, {
|
|
5159
|
+
...restored,
|
|
5160
|
+
_rollbackOf: target,
|
|
5161
|
+
});
|
|
5162
|
+
} catch (e) {
|
|
5163
|
+
this.logger.warn('post-rollback version record failed', { error: e.message });
|
|
5164
|
+
}
|
|
5165
|
+
|
|
5166
|
+
if (this.wsManager) {
|
|
5167
|
+
this.wsManager.broadcast({ type: 'flow-updated', flow: restored });
|
|
5168
|
+
}
|
|
5169
|
+
res.json({ success: true, data: restored, rolledBackTo: target });
|
|
5170
|
+
} catch (error) {
|
|
5171
|
+
this.logger.error('rollback failed', { error: error.message });
|
|
5172
|
+
res.status(500).json({ success: false, error: error.message });
|
|
5173
|
+
}
|
|
5174
|
+
});
|
|
5175
|
+
|
|
5176
|
+
// Phase 5: dry-run / lint an unsaved flow definition.
|
|
5177
|
+
// Posted body IS the flow definition (so the editor can lint
|
|
5178
|
+
// unsaved drafts). Combines schema gate + lint warnings into a
|
|
5179
|
+
// single report so the editor can highlight everything inline.
|
|
5180
|
+
this.app.post('/api/flows/dry-run', async (req, res) => {
|
|
5181
|
+
try {
|
|
5182
|
+
const flow = req.body || {};
|
|
5183
|
+
const validation = validateFlowDefinition(flow);
|
|
5184
|
+
const lint = lintFlow(flow);
|
|
5185
|
+
res.json({
|
|
5186
|
+
success: true,
|
|
5187
|
+
ok: validation.ok && lint.errors.length === 0,
|
|
5188
|
+
schemaErrors: validation.errors,
|
|
5189
|
+
lintErrors: lint.errors,
|
|
5190
|
+
lintWarnings: lint.warnings,
|
|
5191
|
+
});
|
|
5192
|
+
} catch (error) {
|
|
5193
|
+
this.logger.error('Dry-run failed', { error: error.message });
|
|
5194
|
+
res.status(500).json({ success: false, error: error.message });
|
|
5195
|
+
}
|
|
5196
|
+
});
|
|
5197
|
+
|
|
5198
|
+
// Phase 4: resume a failed / interrupted flow run.
|
|
5199
|
+
// Per-node checkpoints on disk let us skip already-completed nodes
|
|
5200
|
+
// and re-run from the first non-completed one. The run record lives
|
|
5201
|
+
// under runId regardless of the flow it belongs to, so this lookup
|
|
5202
|
+
// does not require the flowId in the URL.
|
|
5203
|
+
this.app.post('/api/flows/runs/:runId/resume', async (req, res) => {
|
|
5204
|
+
try {
|
|
5205
|
+
const { runId } = req.params;
|
|
5206
|
+
const { sessionId } = req.body || {};
|
|
5207
|
+
if (!this.flowExecutor) {
|
|
5208
|
+
return res.status(503).json({ success: false, error: 'FlowExecutor not initialized' });
|
|
5209
|
+
}
|
|
5210
|
+
// Async: kick off and return immediately so the HTTP request
|
|
5211
|
+
// doesn't sit open for minutes. Errors propagate via WebSocket
|
|
5212
|
+
// (flow_run_failed) and the run record's status field.
|
|
5213
|
+
this.flowExecutor.resumeFlow(runId, sessionId || null).catch(err => {
|
|
5214
|
+
this.logger.error(`Resume flow failed for run ${runId}`, { error: err.message });
|
|
5215
|
+
});
|
|
5216
|
+
res.json({ success: true, runId, status: 'resuming' });
|
|
5217
|
+
} catch (error) {
|
|
5218
|
+
this.logger.error('Failed to resume flow run', { error: error.message, runId: req.params.runId });
|
|
5219
|
+
const status = /not found/i.test(error.message) ? 404
|
|
5220
|
+
: /checkpoint store/i.test(error.message) ? 503
|
|
5221
|
+
: 500;
|
|
5222
|
+
res.status(status).json({ success: false, error: error.message });
|
|
5223
|
+
}
|
|
5224
|
+
});
|
|
5225
|
+
|
|
4948
5226
|
// Stop a flow run
|
|
4949
5227
|
this.app.post('/api/flows/:flowId/stop', async (req, res) => {
|
|
4950
5228
|
try {
|