onbuzz 4.0.1 → 4.1.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/package.json +1 -1
- package/scripts/audit-report.js +164 -0
- package/src/core/__tests__/agentScheduler.emptyResponseDiagnostics.test.js +191 -0
- package/src/core/__tests__/agentScheduler.modeTransitions.test.js +233 -0
- package/src/core/__tests__/agentScheduler.taskLifecycleInstruction.test.js +78 -0
- package/src/core/__tests__/agentScheduler.test.js +31 -13
- package/src/core/__tests__/messageProcessor.sourceHeader.test.js +195 -0
- package/src/core/agentPool.js +9 -0
- package/src/core/agentScheduler.js +302 -147
- package/src/core/messageProcessor.js +17 -0
- package/src/core/orchestrator.js +6 -2
- package/src/interfaces/webServer.js +69 -2
- package/src/services/__tests__/conversationQuery.test.js +723 -0
- package/src/services/__tests__/messageSource.channelFilter.coherence.test.js +101 -0
- package/src/services/__tests__/messageSource.test.js +376 -0
- package/src/services/conversationQuery.js +777 -0
- package/src/services/discordService.js +11 -2
- package/src/services/messageSource.js +318 -0
- package/src/services/telegramService.js +7 -1
- package/src/services/visualEditorServer.js +35 -7
- package/src/tools/__tests__/memoryTool.reminisce.test.js +330 -0
- package/src/tools/__tests__/memoryTool.test.js +2 -2
- package/src/tools/__tests__/openaiFunctionSchemas.memoryReminisce.test.js +84 -0
- package/src/tools/__tests__/taskManagerTool.lifecycleGuidance.test.js +71 -0
- package/src/tools/__tests__/visualEditorTool.broadcast.test.js +41 -11
- package/src/tools/baseTool.js +14 -1
- package/src/tools/memoryTool.js +266 -4
- package/src/tools/openaiFunctionSchemas.js +62 -7
- package/src/tools/taskManagerTool.js +21 -4
- package/src/tools/visualEditorTool.js +86 -21
- package/src/utilities/__tests__/auditReport.test.js +328 -0
- package/src/utilities/__tests__/modeTransitionReasons.test.js +105 -0
- package/src/utilities/auditReport.js +331 -0
- package/src/utilities/modeTransitionReasons.js +101 -0
- package/src/utilities/tagParser.js +22 -3
- package/web-ui/build/index.html +2 -2
- package/web-ui/build/static/1c-D-8ReLUQ.js +1 -0
- package/web-ui/build/static/abap-NvrQD84d.js +1 -0
- package/web-ui/build/static/abnf-BxKbzF6d.js +1 -0
- package/web-ui/build/static/abnf-gQpmRWjd.js +1 -0
- package/web-ui/build/static/accesslog-BQLUo5Gi.js +1 -0
- package/web-ui/build/static/actionscript-3TeMZFpQ.js +1 -0
- package/web-ui/build/static/actionscript-w6DEnLr3.js +1 -0
- package/web-ui/build/static/ada-87XHdEXs.js +1 -0
- package/web-ui/build/static/ada-QztkYmC7.js +1 -0
- package/web-ui/build/static/agda-CUYeMLgB.js +1 -0
- package/web-ui/build/static/al-DrDn2-sA.js +1 -0
- package/web-ui/build/static/angelscript-D3Qw8kQa.js +1 -0
- package/web-ui/build/static/antlr4-CWEEpQ5q.js +1 -0
- package/web-ui/build/static/apache-Bme3xfdp.js +1 -0
- package/web-ui/build/static/apacheconf-BKOfs-cp.js +1 -0
- package/web-ui/build/static/apex-DswYOikL.js +1 -0
- package/web-ui/build/static/apl-CizhojF3.js +1 -0
- package/web-ui/build/static/applescript-D9M6q0r7.js +1 -0
- package/web-ui/build/static/applescript-DpP5T055.js +1 -0
- package/web-ui/build/static/aql-BqAlaha9.js +1 -0
- package/web-ui/build/static/arcade-DobNWm8j.js +1 -0
- package/web-ui/build/static/arduino-BeuGL09r.js +1 -0
- package/web-ui/build/static/arduino-BiF5cC7x.js +1 -0
- package/web-ui/build/static/arff-2H9PyLDr.js +1 -0
- package/web-ui/build/static/armasm-B6wc18B0.js +1 -0
- package/web-ui/build/static/asciidoc-DUF4xPDI.js +1 -0
- package/web-ui/build/static/asciidoc-TBH4m8SR.js +1 -0
- package/web-ui/build/static/asm6502-CzTI2B-y.js +1 -0
- package/web-ui/build/static/asmatmel-BYN0Xd3T.js +1 -0
- package/web-ui/build/static/aspectj-DXCMDgp7.js +1 -0
- package/web-ui/build/static/aspnet-lOvDpvP_.js +1 -0
- package/web-ui/build/static/autohotkey-CICk12uK.js +1 -0
- package/web-ui/build/static/autohotkey-DrG81PVL.js +1 -0
- package/web-ui/build/static/autoit-DFemtuhG.js +1 -0
- package/web-ui/build/static/autoit-D_K-jEWY.js +1 -0
- package/web-ui/build/static/avisynth-DOnmgjBO.js +1 -0
- package/web-ui/build/static/avrasm-rMDuGPFy.js +1 -0
- package/web-ui/build/static/avro-idl-CH5Xk5PQ.js +1 -0
- package/web-ui/build/static/awk-BvyFWX3C.js +1 -0
- package/web-ui/build/static/axapta-BWmF5MqT.js +1 -0
- package/web-ui/build/static/bash-Coyd2GnL.js +1 -0
- package/web-ui/build/static/bash-DSdj70Nv.js +1 -0
- package/web-ui/build/static/basic-CflyLZ31.js +1 -0
- package/web-ui/build/static/basic-Cs6QyVqS.js +1 -0
- package/web-ui/build/static/batch-DCDtzw83.js +1 -0
- package/web-ui/build/static/bbcode-MWdW7azN.js +1 -0
- package/web-ui/build/static/bicep-jQ4zhAw9.js +1 -0
- package/web-ui/build/static/birb-9f7Itiod.js +1 -0
- package/web-ui/build/static/bison-CIIUW5Cl.js +1 -0
- package/web-ui/build/static/bnf-B2w55bnT.js +1 -0
- package/web-ui/build/static/bnf-CUlbZGe7.js +1 -0
- package/web-ui/build/static/brainfuck-CaJZ1LRc.js +1 -0
- package/web-ui/build/static/brainfuck-eIkhMKej.js +1 -0
- package/web-ui/build/static/brightscript-BSLnJVmJ.js +1 -0
- package/web-ui/build/static/bro-YVCWDbPj.js +1 -0
- package/web-ui/build/static/bsl-Nm0_B_oa.js +1 -0
- package/web-ui/build/static/c-Dv7lr1UK.js +1 -0
- package/web-ui/build/static/c-like-C9IU26FO.js +1 -0
- package/web-ui/build/static/c-pfS3v02M.js +1 -0
- package/web-ui/build/static/cal-D4re7xDS.js +1 -0
- package/web-ui/build/static/capnproto-Dy75AQ6u.js +1 -0
- package/web-ui/build/static/ceylon-BNtjB2q0.js +1 -0
- package/web-ui/build/static/cfscript-8X2NpMn_.js +1 -0
- package/web-ui/build/static/chaiscript-CoXaTTY-.js +1 -0
- package/web-ui/build/static/cil-BluyliW6.js +1 -0
- package/web-ui/build/static/clean-Bj15gq3Q.js +1 -0
- package/web-ui/build/static/clojure-BH5xTDBp.js +1 -0
- package/web-ui/build/static/clojure-BqHsfJwr.js +1 -0
- package/web-ui/build/static/clojure-repl-B32b9bLV.js +1 -0
- package/web-ui/build/static/cmake-CyTE-1A0.js +1 -0
- package/web-ui/build/static/cmake-hiJ0lXa-.js +1 -0
- package/web-ui/build/static/cobol-BBnQUH8E.js +1 -0
- package/web-ui/build/static/coffeescript-BjrsNhLL.js +1 -0
- package/web-ui/build/static/coffeescript-C7WO1c8O.js +1 -0
- package/web-ui/build/static/concurnas-9EpupFAI.js +1 -0
- package/web-ui/build/static/coq-C-tt6nZE.js +1 -0
- package/web-ui/build/static/coq-CLCiqFzC.js +1 -0
- package/web-ui/build/static/cos-BQC1_Gov.js +1 -0
- package/web-ui/build/static/cpp-CH4XSTo7.js +1 -0
- package/web-ui/build/static/cpp-K8F2XScQ.js +1 -0
- package/web-ui/build/static/crmsh-DztNtPne.js +1 -0
- package/web-ui/build/static/crystal-kBqCeXtW.js +1 -0
- package/web-ui/build/static/crystal-sVG_HS9o.js +1 -0
- package/web-ui/build/static/csharp-4pb9Wc--.js +1 -0
- package/web-ui/build/static/csharp-D5QaxB-K.js +1 -0
- package/web-ui/build/static/cshtml-Cpytn-LL.js +1 -0
- package/web-ui/build/static/csp-BH6fPZVZ.js +1 -0
- package/web-ui/build/static/csp-WrjFExbk.js +1 -0
- package/web-ui/build/static/css-DJxZ20Kx.js +1 -0
- package/web-ui/build/static/css-extras-DwoO5sHq.js +1 -0
- package/web-ui/build/static/csv-DJb1XTwb.js +1 -0
- package/web-ui/build/static/cypher-CFN05H9J.js +1 -0
- package/web-ui/build/static/d-COFI-yfM.js +1 -0
- package/web-ui/build/static/d-DYHnLAnt.js +1 -0
- package/web-ui/build/static/dart-Bw35nKGj.js +1 -0
- package/web-ui/build/static/dart-C5gnqL08.js +1 -0
- package/web-ui/build/static/dataweave-DG_2euLu.js +1 -0
- package/web-ui/build/static/dax-BSpzdHUe.js +1 -0
- package/web-ui/build/static/delphi-Cl5NRXvZ.js +1 -0
- package/web-ui/build/static/dhall-CNefJtoo.js +1 -0
- package/web-ui/build/static/diff-DhqUs0Iy.js +1 -0
- package/web-ui/build/static/diff-KGSf4pWL.js +1 -0
- package/web-ui/build/static/django-5TgWQjd4.js +1 -0
- package/web-ui/build/static/django-DavZW8FP.js +1 -0
- package/web-ui/build/static/dns-CuF6RAET.js +1 -0
- package/web-ui/build/static/dns-zone-file-BcBMQ0BR.js +1 -0
- package/web-ui/build/static/docker-Dht8jS2j.js +1 -0
- package/web-ui/build/static/dockerfile-CjjL85ki.js +1 -0
- package/web-ui/build/static/dos-CVoaOHAQ.js +1 -0
- package/web-ui/build/static/dot-QcLwKXVK.js +1 -0
- package/web-ui/build/static/dsconfig-_1R6hLzq.js +1 -0
- package/web-ui/build/static/dts-B_Dzxmb6.js +1 -0
- package/web-ui/build/static/dust-xRpJXkxU.js +1 -0
- package/web-ui/build/static/ebnf-DPK9Hid-.js +1 -0
- package/web-ui/build/static/ebnf-OVlya1yQ.js +1 -0
- package/web-ui/build/static/editorconfig-CbCWWNal.js +1 -0
- package/web-ui/build/static/eiffel-CShmAG_u.js +1 -0
- package/web-ui/build/static/ejs-Dybq4vcI.js +1 -0
- package/web-ui/build/static/elixir-CzXoWmCJ.js +1 -0
- package/web-ui/build/static/elixir-DKVoqGbI.js +1 -0
- package/web-ui/build/static/elm-DfJge1Cy.js +1 -0
- package/web-ui/build/static/elm-wTttagz6.js +1 -0
- package/web-ui/build/static/erb-BqJOty-L.js +1 -0
- package/web-ui/build/static/erb-DEcQyddF.js +1 -0
- package/web-ui/build/static/erlang-DR0S8Dbq.js +1 -0
- package/web-ui/build/static/erlang-foLyt35P.js +1 -0
- package/web-ui/build/static/erlang-repl-KGaauP1D.js +1 -0
- package/web-ui/build/static/etlua-i5bjc318.js +1 -0
- package/web-ui/build/static/excel-Bxn-_4FK.js +1 -0
- package/web-ui/build/static/excel-formula-C3ittGUe.js +1 -0
- package/web-ui/build/static/factor-Cq9BFfPi.js +1 -0
- package/web-ui/build/static/false-Bq1Og8uV.js +1 -0
- package/web-ui/build/static/firestore-security-rules-BuWMvGkh.js +1 -0
- package/web-ui/build/static/fix-CJH3csBZ.js +1 -0
- package/web-ui/build/static/flix-DZVFkMZK.js +1 -0
- package/web-ui/build/static/flow-DGvt9eNT.js +1 -0
- package/web-ui/build/static/fortran-CRMIJaq3.js +1 -0
- package/web-ui/build/static/fortran-DYMWvRQk.js +1 -0
- package/web-ui/build/static/fsharp-DsngWUfx.js +1 -0
- package/web-ui/build/static/fsharp-iEMP2hGc.js +1 -0
- package/web-ui/build/static/ftl-6XZ6kVeO.js +1 -0
- package/web-ui/build/static/gams-BPxwyKlw.js +1 -0
- package/web-ui/build/static/gap-LiwKb7bd.js +1 -0
- package/web-ui/build/static/gauss-BMq9hJW2.js +1 -0
- package/web-ui/build/static/gcode-BhUKSjaC.js +1 -0
- package/web-ui/build/static/gcode-b-DQdN2W.js +1 -0
- package/web-ui/build/static/gdscript-DIZ0_yTx.js +1 -0
- package/web-ui/build/static/gedcom-B-Don8Su.js +1 -0
- package/web-ui/build/static/gherkin-BioIAP1n.js +1 -0
- package/web-ui/build/static/gherkin-Cly_guds.js +1 -0
- package/web-ui/build/static/git-CopW8z0r.js +1 -0
- package/web-ui/build/static/glsl-6ssjFzwf.js +1 -0
- package/web-ui/build/static/glsl-E_uyFQdl.js +1 -0
- package/web-ui/build/static/gml-CaO1S6wu.js +1 -0
- package/web-ui/build/static/gml-D9DYjC5y.js +1 -0
- package/web-ui/build/static/gn-B_qqVpR0.js +1 -0
- package/web-ui/build/static/go-DFaKy1Ay.js +1 -0
- package/web-ui/build/static/go-JLTG1uU-.js +1 -0
- package/web-ui/build/static/go-module-BGp5Ey97.js +1 -0
- package/web-ui/build/static/golo-BlbGqaMN.js +1 -0
- package/web-ui/build/static/gradle-wqmsj6uh.js +1 -0
- package/web-ui/build/static/graphql-7RIdAO4i.js +1 -0
- package/web-ui/build/static/groovy-3icIp5xU.js +1 -0
- package/web-ui/build/static/groovy-HPI8s9_9.js +1 -0
- package/web-ui/build/static/haml-CTkGGR02.js +1 -0
- package/web-ui/build/static/haml-Thxu3S1L.js +1 -0
- package/web-ui/build/static/handlebars-1DoYlhi8.js +1 -0
- package/web-ui/build/static/handlebars-i1BBTCzR.js +1 -0
- package/web-ui/build/static/haskell-A1VYHFSA.js +1 -0
- package/web-ui/build/static/haskell-C_DMih9U.js +1 -0
- package/web-ui/build/static/haxe-Cz5x4sAD.js +1 -0
- package/web-ui/build/static/haxe-DYRFmKkv.js +1 -0
- package/web-ui/build/static/hcl-BRcB2lym.js +1 -0
- package/web-ui/build/static/hlsl-DkyhfHB3.js +1 -0
- package/web-ui/build/static/hoon-Droh_30T.js +1 -0
- package/web-ui/build/static/hpkp-DTAbnc4g.js +1 -0
- package/web-ui/build/static/hsp-C0QnJZWI.js +1 -0
- package/web-ui/build/static/hsts-C21QOmcz.js +1 -0
- package/web-ui/build/static/htmlbars-Bjlkvm5m.js +1 -0
- package/web-ui/build/static/http-D0nJQkzK.js +1 -0
- package/web-ui/build/static/http-DRz4r8bD.js +1 -0
- package/web-ui/build/static/hy-BqiXsF4N.js +1 -0
- package/web-ui/build/static/ichigojam-BQi7PpBN.js +1 -0
- package/web-ui/build/static/icon-BufrPPND.js +1 -0
- package/web-ui/build/static/icu-message-format-BGFhE2gJ.js +1 -0
- package/web-ui/build/static/idris-CDCGxwUo.js +1 -0
- package/web-ui/build/static/iecst-CdwPGvCO.js +1 -0
- package/web-ui/build/static/ignore-CHdDzb39.js +1 -0
- package/web-ui/build/static/index-C9Fa_kgD.css +1 -0
- package/web-ui/build/static/index-D1KAbjnI.js +1 -0
- package/web-ui/build/static/index-DBYkW2lx.js +13 -0
- package/web-ui/build/static/index-DsoPopge.js +727 -0
- package/web-ui/build/static/inform7-Bpq3UO5w.js +1 -0
- package/web-ui/build/static/inform7-DmXu-aMH.js +1 -0
- package/web-ui/build/static/ini-DWUEQKxG.js +1 -0
- package/web-ui/build/static/ini-t3XdjCfA.js +1 -0
- package/web-ui/build/static/io-DfElp6yx.js +1 -0
- package/web-ui/build/static/irpf90-fx9_FB-t.js +1 -0
- package/web-ui/build/static/isbl-CcrRysr8.js +1 -0
- package/web-ui/build/static/j--Jx3nGHC.js +1 -0
- package/web-ui/build/static/java-OOMeJRRQ.js +1 -0
- package/web-ui/build/static/java-OTyqE2m1.js +1 -0
- package/web-ui/build/static/javadoc-CD-HiYEY.js +1 -0
- package/web-ui/build/static/javadoclike-CLv1_76Z.js +1 -0
- package/web-ui/build/static/javascript-C_j1lHAa.js +1 -0
- package/web-ui/build/static/javastacktrace-CIsSL13b.js +1 -0
- package/web-ui/build/static/jboss-cli-C9HktJFq.js +1 -0
- package/web-ui/build/static/jexl-Doro4Jcm.js +1 -0
- package/web-ui/build/static/jolie-C5wL2YdC.js +1 -0
- package/web-ui/build/static/jq-Bmi3HMEP.js +1 -0
- package/web-ui/build/static/js-extras-CQyLxL3s.js +1 -0
- package/web-ui/build/static/js-templates-DAigrjqA.js +1 -0
- package/web-ui/build/static/jsdoc-BJ_oa4xn.js +1 -0
- package/web-ui/build/static/json--C9O_45y.js +1 -0
- package/web-ui/build/static/json-CSGkCpU2.js +1 -0
- package/web-ui/build/static/json5-CcxKJla0.js +1 -0
- package/web-ui/build/static/jsonp-DjUgPOz0.js +1 -0
- package/web-ui/build/static/jsstacktrace-BpOw_ymZ.js +1 -0
- package/web-ui/build/static/jsx-otTTuJ8X.js +1 -0
- package/web-ui/build/static/julia-B1n4YHpM.js +1 -0
- package/web-ui/build/static/julia-bi12E6me.js +1 -0
- package/web-ui/build/static/julia-repl-DwzL74R7.js +1 -0
- package/web-ui/build/static/keepalived-cKzNWQWz.js +1 -0
- package/web-ui/build/static/keyman-BVOouxaa.js +1 -0
- package/web-ui/build/static/kotlin-BPuaNDRU.js +1 -0
- package/web-ui/build/static/kotlin-DvWwch7e.js +1 -0
- package/web-ui/build/static/kumir-DxiPnZla.js +1 -0
- package/web-ui/build/static/kusto-tc7F4iSM.js +1 -0
- package/web-ui/build/static/lasso-CuIxaW6G.js +1 -0
- package/web-ui/build/static/latex-DaVNZvfJ.js +1 -0
- package/web-ui/build/static/latex-Y-rAMd-m.js +1 -0
- package/web-ui/build/static/latte-BWApgl6V.js +1 -0
- package/web-ui/build/static/ldif-BjMOGnja.js +1 -0
- package/web-ui/build/static/leaf-BjXTc-gF.js +1 -0
- package/web-ui/build/static/less-BAoMgFHw.js +1 -0
- package/web-ui/build/static/less-BIXQ4mtM.js +1 -0
- package/web-ui/build/static/lilypond-B6avfRfg.js +1 -0
- package/web-ui/build/static/liquid-Bgux4iHZ.js +1 -0
- package/web-ui/build/static/lisp-DZwObPt9.js +1 -0
- package/web-ui/build/static/lisp-KuHBOL65.js +1 -0
- package/web-ui/build/static/livecodeserver-Cuv2a-Np.js +1 -0
- package/web-ui/build/static/livescript-B5joK5y1.js +1 -0
- package/web-ui/build/static/livescript-Cfl-5tRI.js +1 -0
- package/web-ui/build/static/llvm-Bq_MvIMt.js +1 -0
- package/web-ui/build/static/llvm-DDplxqNH.js +1 -0
- package/web-ui/build/static/log-C0UrUYNZ.js +1 -0
- package/web-ui/build/static/lolcode-Bpn0nZXI.js +1 -0
- package/web-ui/build/static/lsl-Baa3yssY.js +1 -0
- package/web-ui/build/static/lua-CmS7S4r8.js +1 -0
- package/web-ui/build/static/lua-CuTsqVUh.js +1 -0
- package/web-ui/build/static/magma-D80wNgLE.js +1 -0
- package/web-ui/build/static/makefile-BUfHdkgl.js +1 -0
- package/web-ui/build/static/makefile-DcdqPwtQ.js +1 -0
- package/web-ui/build/static/markdown-Dnk5E2xs.js +1 -0
- package/web-ui/build/static/markdown-dVGF22cZ.js +1 -0
- package/web-ui/build/static/markup-templating-DFEtKf2a.js +1 -0
- package/web-ui/build/static/mathematica-D6RpzMC4.js +1 -0
- package/web-ui/build/static/matlab-BNL791Vd.js +1 -0
- package/web-ui/build/static/matlab-CcJdErYu.js +1 -0
- package/web-ui/build/static/maxima-DtObzS0g.js +1 -0
- package/web-ui/build/static/maxscript-Boeo84Pc.js +1 -0
- package/web-ui/build/static/mel-CQDFYa9L.js +1 -0
- package/web-ui/build/static/mel-Dqbr8Ct3.js +1 -0
- package/web-ui/build/static/mercury-CtQIBvXV.js +1 -0
- package/web-ui/build/static/mermaid-Be11mdXJ.js +1 -0
- package/web-ui/build/static/mipsasm-Bzu7KAos.js +1 -0
- package/web-ui/build/static/mizar-CTwK6_XC.js +1 -0
- package/web-ui/build/static/mizar-DGSninkt.js +1 -0
- package/web-ui/build/static/mojolicious-B5J4ts83.js +1 -0
- package/web-ui/build/static/mongodb-Canys4Q-.js +1 -0
- package/web-ui/build/static/monkey-Bc8QeQKW.js +1 -0
- package/web-ui/build/static/monkey-BuakrB5T.js +1 -0
- package/web-ui/build/static/moonscript-CCCY-549.js +1 -0
- package/web-ui/build/static/moonscript-DgTN69ea.js +1 -0
- package/web-ui/build/static/n1ql-BeClvJbI.js +1 -0
- package/web-ui/build/static/n1ql-Bmrbwg5D.js +1 -0
- package/web-ui/build/static/n4js-BI7ajnA2.js +1 -0
- package/web-ui/build/static/nand2tetris-hdl-CTtO9tFK.js +1 -0
- package/web-ui/build/static/naniscript-ByLXiYB-.js +1 -0
- package/web-ui/build/static/nasm-DyRBXPTp.js +1 -0
- package/web-ui/build/static/neon-CuGxTU_0.js +1 -0
- package/web-ui/build/static/nevod-CWnxD5-I.js +1 -0
- package/web-ui/build/static/nginx-9_Wnc0a8.js +1 -0
- package/web-ui/build/static/nginx-YzYFF0YL.js +1 -0
- package/web-ui/build/static/nim-Dgg2r5_y.js +1 -0
- package/web-ui/build/static/nim-Dket4DOJ.js +1 -0
- package/web-ui/build/static/nix-CM2XsNVm.js +1 -0
- package/web-ui/build/static/nix-P756jRJz.js +1 -0
- package/web-ui/build/static/node-repl-BRadhyOu.js +1 -0
- package/web-ui/build/static/nsis-4AzWWTt3.js +1 -0
- package/web-ui/build/static/nsis-DawN0fp-.js +1 -0
- package/web-ui/build/static/objectivec-BHy8WXYe.js +1 -0
- package/web-ui/build/static/objectivec-CVvJfvIh.js +1 -0
- package/web-ui/build/static/ocaml-BXmkRrGk.js +1 -0
- package/web-ui/build/static/ocaml-D9blGtF-.js +1 -0
- package/web-ui/build/static/opencl-CrP8B7-Y.js +1 -0
- package/web-ui/build/static/openqasm-BF_FGc9C.js +1 -0
- package/web-ui/build/static/openscad-BX0LeVCC.js +1 -0
- package/web-ui/build/static/oxygene-Dv7-kaO-.js +1 -0
- package/web-ui/build/static/oz-DMw40m1E.js +1 -0
- package/web-ui/build/static/parigp-C6qS_vHR.js +1 -0
- package/web-ui/build/static/parser-CIccHpfs.js +1 -0
- package/web-ui/build/static/parser3-DY65kzTx.js +1 -0
- package/web-ui/build/static/pascal-Bd8OdL32.js +1 -0
- package/web-ui/build/static/pascaligo-Czv0M1Ke.js +1 -0
- package/web-ui/build/static/pcaxis-Ct9Xzb0v.js +1 -0
- package/web-ui/build/static/peoplecode-Qs_52P9e.js +1 -0
- package/web-ui/build/static/perl-C7ZXixEj.js +1 -0
- package/web-ui/build/static/perl-jarWhwwS.js +1 -0
- package/web-ui/build/static/pf-CUIEZmhu.js +1 -0
- package/web-ui/build/static/pgsql-Cd9Vguu1.js +1 -0
- package/web-ui/build/static/php-BkEHU_F0.js +1 -0
- package/web-ui/build/static/php-DgxitXwB.js +1 -0
- package/web-ui/build/static/php-extras-DZ4cqJZr.js +1 -0
- package/web-ui/build/static/php-template-CmDsJimC.js +1 -0
- package/web-ui/build/static/phpdoc-BuzuEwXH.js +1 -0
- package/web-ui/build/static/plaintext-B9rbdHym.js +1 -0
- package/web-ui/build/static/plsql-BsUyjIMQ.js +1 -0
- package/web-ui/build/static/pony-DByqIe1z.js +1 -0
- package/web-ui/build/static/powerquery-1VSf_dLA.js +1 -0
- package/web-ui/build/static/powershell-CBYqkmKw.js +1 -0
- package/web-ui/build/static/powershell-TsgmSwr2.js +1 -0
- package/web-ui/build/static/processing-C7SmsDmp.js +1 -0
- package/web-ui/build/static/processing-DdvVbwBS.js +1 -0
- package/web-ui/build/static/profile-CrLgDepu.js +1 -0
- package/web-ui/build/static/prolog-1ezqlvDI.js +1 -0
- package/web-ui/build/static/prolog-BBYyok9G.js +1 -0
- package/web-ui/build/static/promql-CWatQOpO.js +1 -0
- package/web-ui/build/static/properties-BJQxP8JR.js +1 -0
- package/web-ui/build/static/properties-CfR17w8n.js +1 -0
- package/web-ui/build/static/protobuf-Cfo3A4gN.js +1 -0
- package/web-ui/build/static/protobuf-DjV26D7V.js +1 -0
- package/web-ui/build/static/psl-DHNAOSYZ.js +1 -0
- package/web-ui/build/static/pug-DnizfuFH.js +1 -0
- package/web-ui/build/static/puppet-BCcVNhLH.js +1 -0
- package/web-ui/build/static/puppet-BmSRwm0u.js +1 -0
- package/web-ui/build/static/pure-l1UGfReS.js +1 -0
- package/web-ui/build/static/purebasic-Cm1PR5lC.js +1 -0
- package/web-ui/build/static/purebasic-Dxq0YRkO.js +1 -0
- package/web-ui/build/static/purescript-CpKroRLn.js +1 -0
- package/web-ui/build/static/python-C0PwNTef.js +1 -0
- package/web-ui/build/static/python-Cr-3O1IE.js +1 -0
- package/web-ui/build/static/python-repl-B1P7p6JA.js +1 -0
- package/web-ui/build/static/q-CL79K_i7.js +1 -0
- package/web-ui/build/static/q-DLSzzmR3.js +1 -0
- package/web-ui/build/static/qml-BeN40LEp.js +1 -0
- package/web-ui/build/static/qml-DIjR5p31.js +1 -0
- package/web-ui/build/static/qore-CrnBG9xB.js +1 -0
- package/web-ui/build/static/qsharp-B8sPnj52.js +1 -0
- package/web-ui/build/static/r-UubkOviq.js +1 -0
- package/web-ui/build/static/r-lT3ysYih.js +1 -0
- package/web-ui/build/static/racket-Czw_1lqD.js +1 -0
- package/web-ui/build/static/reason-D-_rWPty.js +1 -0
- package/web-ui/build/static/reasonml-BZkHaGWN.js +1 -0
- package/web-ui/build/static/regex-BjeMZDQs.js +1 -0
- package/web-ui/build/static/rego-OYluSFFo.js +1 -0
- package/web-ui/build/static/renpy-D1X5nAoT.js +1 -0
- package/web-ui/build/static/rest-DnlQgDnx.js +1 -0
- package/web-ui/build/static/rib-DtDxwFfu.js +1 -0
- package/web-ui/build/static/rip-D8vOYwVd.js +1 -0
- package/web-ui/build/static/roboconf-DtEUhHis.js +1 -0
- package/web-ui/build/static/roboconf-w-iqpst4.js +1 -0
- package/web-ui/build/static/robotframework-M9UnAH02.js +1 -0
- package/web-ui/build/static/routeros-CX0gciU5.js +1 -0
- package/web-ui/build/static/rsl-CZOvPQbk.js +1 -0
- package/web-ui/build/static/ruby-BEwdhTtL.js +1 -0
- package/web-ui/build/static/ruby-dlRf3rgu.js +1 -0
- package/web-ui/build/static/ruleslanguage-CKX7tlpI.js +1 -0
- package/web-ui/build/static/rust-7xat0n1g.js +1 -0
- package/web-ui/build/static/rust-DCpdcw_7.js +1 -0
- package/web-ui/build/static/sas-B9K83LkK.js +1 -0
- package/web-ui/build/static/sas-ijKPjRom.js +1 -0
- package/web-ui/build/static/sass-ByZaOmQh.js +1 -0
- package/web-ui/build/static/scala-B6tUDsIS.js +1 -0
- package/web-ui/build/static/scala-BZ4NRThT.js +1 -0
- package/web-ui/build/static/scheme-BmDQeIVd.js +1 -0
- package/web-ui/build/static/scheme-DIrkVtyr.js +1 -0
- package/web-ui/build/static/scilab-BUTG2a1V.js +1 -0
- package/web-ui/build/static/scss-CC2Rr7DZ.js +1 -0
- package/web-ui/build/static/scss-CG0LtoLt.js +1 -0
- package/web-ui/build/static/shell-DEPni1su.js +1 -0
- package/web-ui/build/static/shell-session-DxlJbQBl.js +1 -0
- package/web-ui/build/static/smali-C5QEAhGK.js +1 -0
- package/web-ui/build/static/smali-RgOjDrpG.js +1 -0
- package/web-ui/build/static/smalltalk-CCLKnQXy.js +1 -0
- package/web-ui/build/static/smalltalk-D2pTtTF6.js +1 -0
- package/web-ui/build/static/smarty-D5pb-235.js +1 -0
- package/web-ui/build/static/sml-CtXZ7rhO.js +1 -0
- package/web-ui/build/static/sml-DgsaUoao.js +1 -0
- package/web-ui/build/static/solidity-DLDSX1RV.js +1 -0
- package/web-ui/build/static/solution-file-BaDc2_E-.js +1 -0
- package/web-ui/build/static/soy-x9k9lQq1.js +1 -0
- package/web-ui/build/static/sparql-CEyFkY2d.js +1 -0
- package/web-ui/build/static/splunk-spl-Cnoeez_o.js +1 -0
- package/web-ui/build/static/sqf-BiFuoaL6.js +1 -0
- package/web-ui/build/static/sqf-IC3wZMuh.js +1 -0
- package/web-ui/build/static/sql-B0kmmGOU.js +1 -0
- package/web-ui/build/static/sql-CUJr2cg-.js +1 -0
- package/web-ui/build/static/sql_more-CWl75_kq.js +1 -0
- package/web-ui/build/static/squirrel-CcEHntJJ.js +1 -0
- package/web-ui/build/static/stan-5fBmEp2c.js +1 -0
- package/web-ui/build/static/stan-CAB7l4xW.js +1 -0
- package/web-ui/build/static/stata-Cg3Bl6d7.js +1 -0
- package/web-ui/build/static/step21-CZGJgHPf.js +1 -0
- package/web-ui/build/static/stylus-BO533InK.js +1 -0
- package/web-ui/build/static/stylus-DNWkkgmm.js +1 -0
- package/web-ui/build/static/subunit-BFopBokb.js +1 -0
- package/web-ui/build/static/swift-CalO-wab.js +1 -0
- package/web-ui/build/static/swift-mePvo3P4.js +1 -0
- package/web-ui/build/static/systemd-bKGRJ9Ha.js +1 -0
- package/web-ui/build/static/t4-cs-D7xxs1lK.js +1 -0
- package/web-ui/build/static/t4-templating-_11pVeD-.js +1 -0
- package/web-ui/build/static/t4-vb-CprOaKdB.js +1 -0
- package/web-ui/build/static/taggerscript-CEpPw-UD.js +1 -0
- package/web-ui/build/static/tap-CFFYSmjs.js +1 -0
- package/web-ui/build/static/tap-Dy3jliYv.js +1 -0
- package/web-ui/build/static/tcl-Bw3AVuiY.js +1 -0
- package/web-ui/build/static/tcl-CD50d_-j.js +1 -0
- package/web-ui/build/static/textile-CSeSEGjy.js +1 -0
- package/web-ui/build/static/thrift-00VB402i.js +1 -0
- package/web-ui/build/static/toml-DuFNkxHe.js +1 -0
- package/web-ui/build/static/tp-4CeaWqyI.js +1 -0
- package/web-ui/build/static/tremor-BnerOgTY.js +1 -0
- package/web-ui/build/static/tsx-XiNhF1ao.js +1 -0
- package/web-ui/build/static/tt2-CM6FV9KO.js +1 -0
- package/web-ui/build/static/turtle-JxpiTJEQ.js +1 -0
- package/web-ui/build/static/twig-C16bJf43.js +1 -0
- package/web-ui/build/static/twig-DQ-0wCvQ.js +1 -0
- package/web-ui/build/static/typescript-ILNg_Uvt.js +1 -0
- package/web-ui/build/static/typescript-chBpZOex.js +1 -0
- package/web-ui/build/static/typoscript-D2-lUjQX.js +1 -0
- package/web-ui/build/static/unrealscript-CwOA8REe.js +1 -0
- package/web-ui/build/static/uorazor-Dh1SAWKw.js +1 -0
- package/web-ui/build/static/uri-BF1wAQOC.js +1 -0
- package/web-ui/build/static/v-DUq5Mxzu.js +1 -0
- package/web-ui/build/static/vala-BYNy6zW2.js +1 -0
- package/web-ui/build/static/vala-CqGfs9Kv.js +1 -0
- package/web-ui/build/static/vbnet-BxH9jvRi.js +1 -0
- package/web-ui/build/static/vbnet-CJxJGhMO.js +1 -0
- package/web-ui/build/static/vbscript-OQ6kMcDV.js +1 -0
- package/web-ui/build/static/vbscript-html-CZ-QJ4ch.js +1 -0
- package/web-ui/build/static/velocity-B59YHwoP.js +1 -0
- package/web-ui/build/static/verilog--uW8iUzt.js +1 -0
- package/web-ui/build/static/verilog-DAQz3Gcl.js +1 -0
- package/web-ui/build/static/vhdl-5FrGi5Wx.js +1 -0
- package/web-ui/build/static/vhdl-C25AEZ8g.js +1 -0
- package/web-ui/build/static/vim-CW6uewUP.js +1 -0
- package/web-ui/build/static/vim-f3zGsJk1.js +1 -0
- package/web-ui/build/static/visual-basic-CoOTQEUn.js +1 -0
- package/web-ui/build/static/warpscript-DGouvP9I.js +1 -0
- package/web-ui/build/static/wasm-BZeW0TNm.js +1 -0
- package/web-ui/build/static/web-idl-Bw1mV_A4.js +1 -0
- package/web-ui/build/static/wiki-CZG2B_w1.js +1 -0
- package/web-ui/build/static/wolfram-CiMIUpaO.js +1 -0
- package/web-ui/build/static/wren-Bh9Sv_02.js +1 -0
- package/web-ui/build/static/x86asm-BhoPGTpG.js +1 -0
- package/web-ui/build/static/xeora-C5CM7V9L.js +1 -0
- package/web-ui/build/static/xl-WCHINiXA.js +1 -0
- package/web-ui/build/static/xml-DPAIpwAO.js +1 -0
- package/web-ui/build/static/xml-doc-CJxlhMe0.js +1 -0
- package/web-ui/build/static/xojo-BW0Z0CzB.js +1 -0
- package/web-ui/build/static/xquery-CwiBIiph.js +1 -0
- package/web-ui/build/static/xquery-De9QIea7.js +1 -0
- package/web-ui/build/static/yaml-CKzSgstB.js +1 -0
- package/web-ui/build/static/yaml-DIHBhXM_.js +1 -0
- package/web-ui/build/static/yang-Cn0PKttf.js +1 -0
- package/web-ui/build/static/zephir-CKVBh8TU.js +1 -0
- package/web-ui/build/static/zig-CetEB4NE.js +1 -0
- package/web-ui/build/static/1c-BbqxH6FC.js +0 -1
- package/web-ui/build/static/abap-UmHCZ0i1.js +0 -1
- package/web-ui/build/static/abnf-KQJciEU1.js +0 -1
- package/web-ui/build/static/abnf-wz9mo6UY.js +0 -1
- package/web-ui/build/static/accesslog-a-KjP-hj.js +0 -1
- package/web-ui/build/static/actionscript-C0kkFktE.js +0 -1
- package/web-ui/build/static/actionscript-CVfzNF7V.js +0 -1
- package/web-ui/build/static/ada-BtDccpCo.js +0 -1
- package/web-ui/build/static/ada-CsP-T950.js +0 -1
- package/web-ui/build/static/agda-DZ0Wv_k_.js +0 -1
- package/web-ui/build/static/al-Dieo4A36.js +0 -1
- package/web-ui/build/static/angelscript-Dxqs-qHl.js +0 -1
- package/web-ui/build/static/antlr4-2iwVxagJ.js +0 -1
- package/web-ui/build/static/apache-nHxOzinq.js +0 -1
- package/web-ui/build/static/apacheconf-DxkrSh6l.js +0 -1
- package/web-ui/build/static/apex-Broi_TKn.js +0 -1
- package/web-ui/build/static/apl-iAZYRZnE.js +0 -1
- package/web-ui/build/static/applescript-C-EKPlRf.js +0 -1
- package/web-ui/build/static/applescript-CVipha9P.js +0 -1
- package/web-ui/build/static/aql-Dn0E4LhK.js +0 -1
- package/web-ui/build/static/arcade-D5kIj1ez.js +0 -1
- package/web-ui/build/static/arduino-CydV4LN9.js +0 -1
- package/web-ui/build/static/arduino-DXaSwrry.js +0 -1
- package/web-ui/build/static/arff-yeDNnxkY.js +0 -1
- package/web-ui/build/static/armasm-DTu74JIo.js +0 -1
- package/web-ui/build/static/asciidoc-CLaqB1Gg.js +0 -1
- package/web-ui/build/static/asciidoc-DguUDHf5.js +0 -1
- package/web-ui/build/static/asm6502-C2c-H0Jh.js +0 -1
- package/web-ui/build/static/asmatmel-5xAyVq56.js +0 -1
- package/web-ui/build/static/aspectj-D5JvBRBv.js +0 -1
- package/web-ui/build/static/aspnet-DZfW9iG1.js +0 -1
- package/web-ui/build/static/autohotkey-3yT8W87y.js +0 -1
- package/web-ui/build/static/autohotkey-CxEWa3D5.js +0 -1
- package/web-ui/build/static/autoit-COt7rtxE.js +0 -1
- package/web-ui/build/static/autoit-DSva7SrP.js +0 -1
- package/web-ui/build/static/avisynth-DdpQ810f.js +0 -1
- package/web-ui/build/static/avrasm-BR0ncM-L.js +0 -1
- package/web-ui/build/static/avro-idl-DCISsbhh.js +0 -1
- package/web-ui/build/static/awk-Dd5HJDa0.js +0 -1
- package/web-ui/build/static/axapta-DWn0qUrW.js +0 -1
- package/web-ui/build/static/bash-B024Y1MV.js +0 -1
- package/web-ui/build/static/bash-qq4eTfOM.js +0 -1
- package/web-ui/build/static/basic-BWjvt39D.js +0 -1
- package/web-ui/build/static/basic-DVlMYdnX.js +0 -1
- package/web-ui/build/static/batch-Bb3dgg5p.js +0 -1
- package/web-ui/build/static/bbcode-DIclgs6t.js +0 -1
- package/web-ui/build/static/bicep-CXafPJf-.js +0 -1
- package/web-ui/build/static/birb-Btu8LQQE.js +0 -1
- package/web-ui/build/static/bison-CDXROKZw.js +0 -1
- package/web-ui/build/static/bnf-BB43qRSC.js +0 -1
- package/web-ui/build/static/bnf-ClpHUN6K.js +0 -1
- package/web-ui/build/static/brainfuck-BIgmc-EZ.js +0 -1
- package/web-ui/build/static/brainfuck-BJtPWa6l.js +0 -1
- package/web-ui/build/static/brightscript-9fU7OT4Y.js +0 -1
- package/web-ui/build/static/bro-DLftyzoO.js +0 -1
- package/web-ui/build/static/bsl-BWPnBSvd.js +0 -1
- package/web-ui/build/static/c-CD-936sv.js +0 -1
- package/web-ui/build/static/c-Do5sfWh2.js +0 -1
- package/web-ui/build/static/c-like-Cerk48hs.js +0 -1
- package/web-ui/build/static/cal-BfMsPDa0.js +0 -1
- package/web-ui/build/static/capnproto-mR83jTKG.js +0 -1
- package/web-ui/build/static/ceylon-Dt2cl-Ez.js +0 -1
- package/web-ui/build/static/cfscript-CFB-YYf8.js +0 -1
- package/web-ui/build/static/chaiscript-D3skeymm.js +0 -1
- package/web-ui/build/static/cil-DeczQ_ut.js +0 -1
- package/web-ui/build/static/clean-BXJPwGNL.js +0 -1
- package/web-ui/build/static/clojure-HHG1U7gj.js +0 -1
- package/web-ui/build/static/clojure-rEWdWYo_.js +0 -1
- package/web-ui/build/static/clojure-repl-CE4jr3K0.js +0 -1
- package/web-ui/build/static/cmake-DAzvKH16.js +0 -1
- package/web-ui/build/static/cmake-tD6uZl-y.js +0 -1
- package/web-ui/build/static/cobol-C2X6-bRz.js +0 -1
- package/web-ui/build/static/coffeescript-C9qjSh74.js +0 -1
- package/web-ui/build/static/coffeescript-DeHnRseX.js +0 -1
- package/web-ui/build/static/concurnas-DNuInYde.js +0 -1
- package/web-ui/build/static/coq-BQFo5XwN.js +0 -1
- package/web-ui/build/static/coq-Bmnum53S.js +0 -1
- package/web-ui/build/static/cos-D_0u-U2Y.js +0 -1
- package/web-ui/build/static/cpp-CoD9F6ol.js +0 -1
- package/web-ui/build/static/cpp-DB8R2f_c.js +0 -1
- package/web-ui/build/static/crmsh-DghD3B1u.js +0 -1
- package/web-ui/build/static/crystal-C63_SlFe.js +0 -1
- package/web-ui/build/static/crystal-GkhJSVpE.js +0 -1
- package/web-ui/build/static/csharp-Upa_qqR3.js +0 -1
- package/web-ui/build/static/csharp-kB8isYBD.js +0 -1
- package/web-ui/build/static/cshtml-BjeIyJW7.js +0 -1
- package/web-ui/build/static/csp-B9zvIPTA.js +0 -1
- package/web-ui/build/static/csp-hqOQW_KO.js +0 -1
- package/web-ui/build/static/css-BOqi7Sb8.js +0 -1
- package/web-ui/build/static/css-extras-NaDRDQYb.js +0 -1
- package/web-ui/build/static/csv-C7zNP0bV.js +0 -1
- package/web-ui/build/static/cypher-DzSGt09R.js +0 -1
- package/web-ui/build/static/d-DU9v7A7o.js +0 -1
- package/web-ui/build/static/d-YLgAiEhY.js +0 -1
- package/web-ui/build/static/dart-CLSlIEjd.js +0 -1
- package/web-ui/build/static/dart-Cv0y84fm.js +0 -1
- package/web-ui/build/static/dataweave-5zYOQCxv.js +0 -1
- package/web-ui/build/static/dax-C6xLX5GM.js +0 -1
- package/web-ui/build/static/delphi-D5HcUuVw.js +0 -1
- package/web-ui/build/static/dhall-C8OzwmzV.js +0 -1
- package/web-ui/build/static/diff-B030ZRbb.js +0 -1
- package/web-ui/build/static/diff-NCsBJCa7.js +0 -1
- package/web-ui/build/static/django-BeQDLTjX.js +0 -1
- package/web-ui/build/static/django-cC0WFEf1.js +0 -1
- package/web-ui/build/static/dns-CGMMfnr4.js +0 -1
- package/web-ui/build/static/dns-zone-file-908DrcaX.js +0 -1
- package/web-ui/build/static/docker-CE6F0WPR.js +0 -1
- package/web-ui/build/static/dockerfile-CUNa_EmN.js +0 -1
- package/web-ui/build/static/dos-CiM5tkPu.js +0 -1
- package/web-ui/build/static/dot-CZ0WLAzq.js +0 -1
- package/web-ui/build/static/dsconfig-Wo1ktU-F.js +0 -1
- package/web-ui/build/static/dts-BQJ7eIaM.js +0 -1
- package/web-ui/build/static/dust-DWnG4XQf.js +0 -1
- package/web-ui/build/static/ebnf-BqQRECjk.js +0 -1
- package/web-ui/build/static/ebnf-Cn_QHOpW.js +0 -1
- package/web-ui/build/static/editorconfig-CRE_lK21.js +0 -1
- package/web-ui/build/static/eiffel-h-dSP-Mu.js +0 -1
- package/web-ui/build/static/ejs-PVoVLwHk.js +0 -1
- package/web-ui/build/static/elixir-DVoAEVq_.js +0 -1
- package/web-ui/build/static/elixir-ZA65-L5t.js +0 -1
- package/web-ui/build/static/elm-ClRnxcFJ.js +0 -1
- package/web-ui/build/static/elm-Ttg_Dv8v.js +0 -1
- package/web-ui/build/static/erb-DCMJz1va.js +0 -1
- package/web-ui/build/static/erb-DDL7TB76.js +0 -1
- package/web-ui/build/static/erlang-01AtuMB8.js +0 -1
- package/web-ui/build/static/erlang-CLb6foRm.js +0 -1
- package/web-ui/build/static/erlang-repl-BwUG_X-H.js +0 -1
- package/web-ui/build/static/etlua-7jIebQwZ.js +0 -1
- package/web-ui/build/static/excel-BkKnPFBB.js +0 -1
- package/web-ui/build/static/excel-formula-dDd7nIUV.js +0 -1
- package/web-ui/build/static/factor-BLn5sqxN.js +0 -1
- package/web-ui/build/static/false-CNuRH4WA.js +0 -1
- package/web-ui/build/static/firestore-security-rules-Cr5e6oSH.js +0 -1
- package/web-ui/build/static/fix-NJ8G_1Tt.js +0 -1
- package/web-ui/build/static/flix-CBhTDcl9.js +0 -1
- package/web-ui/build/static/flow-DvgK1btf.js +0 -1
- package/web-ui/build/static/fortran-Bo-O9xtT.js +0 -1
- package/web-ui/build/static/fortran-Dj3v5L_m.js +0 -1
- package/web-ui/build/static/fsharp-5c6P8ZUH.js +0 -1
- package/web-ui/build/static/fsharp-C8bhnjfe.js +0 -1
- package/web-ui/build/static/ftl-8qE-2FJL.js +0 -1
- package/web-ui/build/static/gams-pbQRvKgr.js +0 -1
- package/web-ui/build/static/gap-CSFizYYs.js +0 -1
- package/web-ui/build/static/gauss-C0BsqEdj.js +0 -1
- package/web-ui/build/static/gcode-DMuLrnJF.js +0 -1
- package/web-ui/build/static/gcode-as5uEQOe.js +0 -1
- package/web-ui/build/static/gdscript-CSaSlSna.js +0 -1
- package/web-ui/build/static/gedcom-Cm86Ngut.js +0 -1
- package/web-ui/build/static/gherkin-C7FSJ6d3.js +0 -1
- package/web-ui/build/static/gherkin-C8wqlUqv.js +0 -1
- package/web-ui/build/static/git-DzPBmHlg.js +0 -1
- package/web-ui/build/static/glsl-D0_rPD58.js +0 -1
- package/web-ui/build/static/glsl-oUwWN2Xp.js +0 -1
- package/web-ui/build/static/gml-DNrWm4kb.js +0 -1
- package/web-ui/build/static/gml-JDXVyhBU.js +0 -1
- package/web-ui/build/static/gn-Bw-OsDH_.js +0 -1
- package/web-ui/build/static/go-B7Traa8J.js +0 -1
- package/web-ui/build/static/go-CaXFvYLQ.js +0 -1
- package/web-ui/build/static/go-module-BzKKnNxf.js +0 -1
- package/web-ui/build/static/golo-BokfRozl.js +0 -1
- package/web-ui/build/static/gradle-BBE_z74S.js +0 -1
- package/web-ui/build/static/graphql-DyqQ249q.js +0 -1
- package/web-ui/build/static/groovy-C9bdtULM.js +0 -1
- package/web-ui/build/static/groovy-CTYHYVKe.js +0 -1
- package/web-ui/build/static/haml--wzGI8rV.js +0 -1
- package/web-ui/build/static/haml-CP_fk9Du.js +0 -1
- package/web-ui/build/static/handlebars-BCN8I_fU.js +0 -1
- package/web-ui/build/static/handlebars-ClNs_EWN.js +0 -1
- package/web-ui/build/static/haskell-9-8FOmKL.js +0 -1
- package/web-ui/build/static/haskell-CeDcPoLF.js +0 -1
- package/web-ui/build/static/haxe-50b4_Uxu.js +0 -1
- package/web-ui/build/static/haxe-DV1jCpSQ.js +0 -1
- package/web-ui/build/static/hcl-BYAKEmjA.js +0 -1
- package/web-ui/build/static/hlsl-_V666kTg.js +0 -1
- package/web-ui/build/static/hoon-Xx5CPs_2.js +0 -1
- package/web-ui/build/static/hpkp-Dgu8ZS6s.js +0 -1
- package/web-ui/build/static/hsp-B0EcUcwP.js +0 -1
- package/web-ui/build/static/hsts-B1FQvgxb.js +0 -1
- package/web-ui/build/static/htmlbars-BGs3CWC2.js +0 -1
- package/web-ui/build/static/http-BvrKmZx0.js +0 -1
- package/web-ui/build/static/http-DUnWgTgI.js +0 -1
- package/web-ui/build/static/hy-StjWDayT.js +0 -1
- package/web-ui/build/static/ichigojam-Dla3EUZJ.js +0 -1
- package/web-ui/build/static/icon-CEA3F2cM.js +0 -1
- package/web-ui/build/static/icu-message-format-CIRX0H1E.js +0 -1
- package/web-ui/build/static/idris-z8g0EYLs.js +0 -1
- package/web-ui/build/static/iecst-D99vO-YV.js +0 -1
- package/web-ui/build/static/ignore-Bd9HTGo7.js +0 -1
- package/web-ui/build/static/index-9mcWHG2c.js +0 -13
- package/web-ui/build/static/index-BUtXAjd5.css +0 -1
- package/web-ui/build/static/index-CaMlGjdh.js +0 -834
- package/web-ui/build/static/index-D35injhb.js +0 -1
- package/web-ui/build/static/inform7-CKq2EPhg.js +0 -1
- package/web-ui/build/static/inform7-D-KIfWlv.js +0 -1
- package/web-ui/build/static/ini-CoFKaEFp.js +0 -1
- package/web-ui/build/static/ini-Cqh2VeO8.js +0 -1
- package/web-ui/build/static/io-A1ozJngc.js +0 -1
- package/web-ui/build/static/irpf90-DLGfrn4I.js +0 -1
- package/web-ui/build/static/isbl-dbyF-dLf.js +0 -1
- package/web-ui/build/static/j-ByhCpf6J.js +0 -1
- package/web-ui/build/static/java-DCbnRaHw.js +0 -1
- package/web-ui/build/static/java-LzFZofIb.js +0 -1
- package/web-ui/build/static/javadoc-CaKRZCNM.js +0 -1
- package/web-ui/build/static/javadoclike-CmvAiCvn.js +0 -1
- package/web-ui/build/static/javascript-Cpvfsh-z.js +0 -1
- package/web-ui/build/static/javastacktrace-CSUMoXqu.js +0 -1
- package/web-ui/build/static/jboss-cli-Cv0HXjqO.js +0 -1
- package/web-ui/build/static/jexl-CtUU8Pyc.js +0 -1
- package/web-ui/build/static/jolie-Ccbea_Ca.js +0 -1
- package/web-ui/build/static/jq-DQJKGqGL.js +0 -1
- package/web-ui/build/static/js-extras-BST2fo5a.js +0 -1
- package/web-ui/build/static/js-templates-T4aqrsni.js +0 -1
- package/web-ui/build/static/jsdoc-DZuHBRHT.js +0 -1
- package/web-ui/build/static/json-ByIlxtOm.js +0 -1
- package/web-ui/build/static/json-Dd-I2QR8.js +0 -1
- package/web-ui/build/static/json5-CIBARWXJ.js +0 -1
- package/web-ui/build/static/jsonp-Cs7yuq7_.js +0 -1
- package/web-ui/build/static/jsstacktrace-DrmYorp8.js +0 -1
- package/web-ui/build/static/jsx-Clb0obdm.js +0 -1
- package/web-ui/build/static/julia-BreTVWTb.js +0 -1
- package/web-ui/build/static/julia-qQfG7KSh.js +0 -1
- package/web-ui/build/static/julia-repl-wN09lKm6.js +0 -1
- package/web-ui/build/static/keepalived-DCyf_6ml.js +0 -1
- package/web-ui/build/static/keyman-B22SYHoa.js +0 -1
- package/web-ui/build/static/kotlin-DeVs-dNz.js +0 -1
- package/web-ui/build/static/kotlin-OMSaUY06.js +0 -1
- package/web-ui/build/static/kumir-Y-M6VOUG.js +0 -1
- package/web-ui/build/static/kusto-BnDldn0z.js +0 -1
- package/web-ui/build/static/lasso-BlUPIy-8.js +0 -1
- package/web-ui/build/static/latex-BGueNdTW.js +0 -1
- package/web-ui/build/static/latex-EZ8QNCjf.js +0 -1
- package/web-ui/build/static/latte-BkyPxQ_A.js +0 -1
- package/web-ui/build/static/ldif-BCIcpQI_.js +0 -1
- package/web-ui/build/static/leaf-BAG78wZj.js +0 -1
- package/web-ui/build/static/less-CFghh9Qx.js +0 -1
- package/web-ui/build/static/less-CbqfFGMD.js +0 -1
- package/web-ui/build/static/lilypond-BSpYx-1e.js +0 -1
- package/web-ui/build/static/liquid-CHhOmyTU.js +0 -1
- package/web-ui/build/static/lisp-QMm5BThy.js +0 -1
- package/web-ui/build/static/lisp-rizdk7e8.js +0 -1
- package/web-ui/build/static/livecodeserver-Bbh0nB2d.js +0 -1
- package/web-ui/build/static/livescript--QIhQOIm.js +0 -1
- package/web-ui/build/static/livescript-wYJ9C7MN.js +0 -1
- package/web-ui/build/static/llvm-qWkZ6M3-.js +0 -1
- package/web-ui/build/static/llvm-x8W93e2q.js +0 -1
- package/web-ui/build/static/log-D4PGnDHU.js +0 -1
- package/web-ui/build/static/lolcode-CHKS4ygP.js +0 -1
- package/web-ui/build/static/lsl-BEuQrHG7.js +0 -1
- package/web-ui/build/static/lua-Czrw1nZw.js +0 -1
- package/web-ui/build/static/lua-DUasTiYT.js +0 -1
- package/web-ui/build/static/magma-B16nUtxA.js +0 -1
- package/web-ui/build/static/makefile-BkqsEpVd.js +0 -1
- package/web-ui/build/static/makefile-DmoEDBJj.js +0 -1
- package/web-ui/build/static/markdown-FL-EZYmc.js +0 -1
- package/web-ui/build/static/markdown-N4YibSvf.js +0 -1
- package/web-ui/build/static/markup-templating-C1Q3BuB3.js +0 -1
- package/web-ui/build/static/mathematica-BZ50Ibwb.js +0 -1
- package/web-ui/build/static/matlab-CJFiUipn.js +0 -1
- package/web-ui/build/static/matlab-D-LwnpYW.js +0 -1
- package/web-ui/build/static/maxima-D1nKJHio.js +0 -1
- package/web-ui/build/static/maxscript-3ukqkynT.js +0 -1
- package/web-ui/build/static/mel-BpGPnIg7.js +0 -1
- package/web-ui/build/static/mel-DAIpK4k4.js +0 -1
- package/web-ui/build/static/mercury-BO6AXAJw.js +0 -1
- package/web-ui/build/static/mermaid-Cvu66kFB.js +0 -1
- package/web-ui/build/static/mipsasm-CP7z3_gg.js +0 -1
- package/web-ui/build/static/mizar-1tBmTbFY.js +0 -1
- package/web-ui/build/static/mizar-vPQKaBOY.js +0 -1
- package/web-ui/build/static/mojolicious-3wXNqu2Z.js +0 -1
- package/web-ui/build/static/mongodb-DkJ5x1x3.js +0 -1
- package/web-ui/build/static/monkey-DwU43sRn.js +0 -1
- package/web-ui/build/static/monkey-DzoqN4GB.js +0 -1
- package/web-ui/build/static/moonscript-CgTduPCr.js +0 -1
- package/web-ui/build/static/moonscript-Dzbt70Ke.js +0 -1
- package/web-ui/build/static/n1ql-BaVhxD8V.js +0 -1
- package/web-ui/build/static/n1ql-DUHSzjt3.js +0 -1
- package/web-ui/build/static/n4js-DZ7dW-NZ.js +0 -1
- package/web-ui/build/static/nand2tetris-hdl-C-ecDW8U.js +0 -1
- package/web-ui/build/static/naniscript-dzw8pH4q.js +0 -1
- package/web-ui/build/static/nasm-B0fCm10I.js +0 -1
- package/web-ui/build/static/neon-DRlFTieL.js +0 -1
- package/web-ui/build/static/nevod-BEzTxq7x.js +0 -1
- package/web-ui/build/static/nginx-BI0b7qBW.js +0 -1
- package/web-ui/build/static/nginx-BTbIqU-1.js +0 -1
- package/web-ui/build/static/nim-C1lYEnIA.js +0 -1
- package/web-ui/build/static/nim-mfWcJfe-.js +0 -1
- package/web-ui/build/static/nix-PO76YCUx.js +0 -1
- package/web-ui/build/static/nix-a-29l1yK.js +0 -1
- package/web-ui/build/static/node-repl-DDA8xtxU.js +0 -1
- package/web-ui/build/static/nsis-CLyYop70.js +0 -1
- package/web-ui/build/static/nsis-GiqT6oer.js +0 -1
- package/web-ui/build/static/objectivec-DF-fhcs7.js +0 -1
- package/web-ui/build/static/objectivec-DtXa6iKB.js +0 -1
- package/web-ui/build/static/ocaml-D4ptVFU5.js +0 -1
- package/web-ui/build/static/ocaml-DBtZVh9H.js +0 -1
- package/web-ui/build/static/opencl-0Z_Gtfzx.js +0 -1
- package/web-ui/build/static/openqasm-BafUOtKF.js +0 -1
- package/web-ui/build/static/openscad-DwQ7I7ze.js +0 -1
- package/web-ui/build/static/oxygene-Bt7r8sbX.js +0 -1
- package/web-ui/build/static/oz-Da-qnXiT.js +0 -1
- package/web-ui/build/static/parigp-D6mMgLkz.js +0 -1
- package/web-ui/build/static/parser-DUfGrzvv.js +0 -1
- package/web-ui/build/static/parser3-C4GwCqRM.js +0 -1
- package/web-ui/build/static/pascal-CKsIwy8z.js +0 -1
- package/web-ui/build/static/pascaligo-0Y00fNzu.js +0 -1
- package/web-ui/build/static/pcaxis-BFwUDXM-.js +0 -1
- package/web-ui/build/static/peoplecode-D8-HVebY.js +0 -1
- package/web-ui/build/static/perl-CoNeuMP2.js +0 -1
- package/web-ui/build/static/perl-Dk_kCckE.js +0 -1
- package/web-ui/build/static/pf-DWKdp2Z5.js +0 -1
- package/web-ui/build/static/pgsql-DQM_KLIL.js +0 -1
- package/web-ui/build/static/php-BLJ1RddK.js +0 -1
- package/web-ui/build/static/php-C4Q-EoBs.js +0 -1
- package/web-ui/build/static/php-extras-DH16mdyb.js +0 -1
- package/web-ui/build/static/php-template-Bgyau4h4.js +0 -1
- package/web-ui/build/static/phpdoc-CrGYZCs3.js +0 -1
- package/web-ui/build/static/plaintext--cxrnnIY.js +0 -1
- package/web-ui/build/static/plsql-DXxJ1j1M.js +0 -1
- package/web-ui/build/static/pony-Bk4QKmb5.js +0 -1
- package/web-ui/build/static/powerquery-BNY7Y_eg.js +0 -1
- package/web-ui/build/static/powershell-CjTGWZrY.js +0 -1
- package/web-ui/build/static/powershell-DKKBTrGN.js +0 -1
- package/web-ui/build/static/processing-CoCmNEON.js +0 -1
- package/web-ui/build/static/processing-dWxOKKau.js +0 -1
- package/web-ui/build/static/profile-DinHOW6q.js +0 -1
- package/web-ui/build/static/prolog-D8s2MxCR.js +0 -1
- package/web-ui/build/static/prolog-tfF0hJ7N.js +0 -1
- package/web-ui/build/static/promql-BbpNnYtf.js +0 -1
- package/web-ui/build/static/properties-BH5IGhCw.js +0 -1
- package/web-ui/build/static/properties-BtBGEFji.js +0 -1
- package/web-ui/build/static/protobuf-Bq57MNXu.js +0 -1
- package/web-ui/build/static/protobuf-FQ5v_34f.js +0 -1
- package/web-ui/build/static/psl-DH3KK34y.js +0 -1
- package/web-ui/build/static/pug-BH0-FqNN.js +0 -1
- package/web-ui/build/static/puppet-D6IQ0-e_.js +0 -1
- package/web-ui/build/static/puppet-DhDhkrHQ.js +0 -1
- package/web-ui/build/static/pure-D-zzqNXt.js +0 -1
- package/web-ui/build/static/purebasic-C3ZHqBxR.js +0 -1
- package/web-ui/build/static/purebasic-DTWXM0iu.js +0 -1
- package/web-ui/build/static/purescript-C9dMZi0f.js +0 -1
- package/web-ui/build/static/python-kp4UxaFP.js +0 -1
- package/web-ui/build/static/python-repl-Bugvu_dB.js +0 -1
- package/web-ui/build/static/python-vnX1mWhI.js +0 -1
- package/web-ui/build/static/q-BRREgX-f.js +0 -1
- package/web-ui/build/static/q-V3GLDm_n.js +0 -1
- package/web-ui/build/static/qml-DfQdRLrG.js +0 -1
- package/web-ui/build/static/qml-i0MLAsR_.js +0 -1
- package/web-ui/build/static/qore-CFRmreiI.js +0 -1
- package/web-ui/build/static/qsharp-BpxCSpMu.js +0 -1
- package/web-ui/build/static/r-BFhn56zx.js +0 -1
- package/web-ui/build/static/r-D19R1VlL.js +0 -1
- package/web-ui/build/static/racket-D6Do3XQN.js +0 -1
- package/web-ui/build/static/reason-BLxB_uYS.js +0 -1
- package/web-ui/build/static/reasonml-CR2O5QXc.js +0 -1
- package/web-ui/build/static/regex-ExQT3DD-.js +0 -1
- package/web-ui/build/static/rego-BG1H2Grq.js +0 -1
- package/web-ui/build/static/renpy-DPYPiSEa.js +0 -1
- package/web-ui/build/static/rest-BXeudWmA.js +0 -1
- package/web-ui/build/static/rib-B50qbZUa.js +0 -1
- package/web-ui/build/static/rip-Oy08VNTd.js +0 -1
- package/web-ui/build/static/roboconf-BJlNdB3f.js +0 -1
- package/web-ui/build/static/roboconf-BWCGa42W.js +0 -1
- package/web-ui/build/static/robotframework-CrL-sTEo.js +0 -1
- package/web-ui/build/static/routeros-BV_7BLfU.js +0 -1
- package/web-ui/build/static/rsl-3QUMrc7D.js +0 -1
- package/web-ui/build/static/ruby-CocpOjC3.js +0 -1
- package/web-ui/build/static/ruby-xGmQ173X.js +0 -1
- package/web-ui/build/static/ruleslanguage-Dvh9iMSY.js +0 -1
- package/web-ui/build/static/rust-BZNigb_r.js +0 -1
- package/web-ui/build/static/rust-DwNjoaBZ.js +0 -1
- package/web-ui/build/static/sas-BJAlmleu.js +0 -1
- package/web-ui/build/static/sas-DMbLpxbs.js +0 -1
- package/web-ui/build/static/sass-DqYzzuDm.js +0 -1
- package/web-ui/build/static/scala-Bh2FkhWY.js +0 -1
- package/web-ui/build/static/scala-CBjzCnx6.js +0 -1
- package/web-ui/build/static/scheme-D2RTBnn4.js +0 -1
- package/web-ui/build/static/scheme-YLsRQlUd.js +0 -1
- package/web-ui/build/static/scilab-CXvKl1CZ.js +0 -1
- package/web-ui/build/static/scss-BE2dzDGl.js +0 -1
- package/web-ui/build/static/scss-J1E3J7lz.js +0 -1
- package/web-ui/build/static/shell-AzmPYKrI.js +0 -1
- package/web-ui/build/static/shell-session-C5dCMLWG.js +0 -1
- package/web-ui/build/static/smali-C88i6nEO.js +0 -1
- package/web-ui/build/static/smali-Ddnoiqfy.js +0 -1
- package/web-ui/build/static/smalltalk-C72n_dxy.js +0 -1
- package/web-ui/build/static/smalltalk-CPfRSVZs.js +0 -1
- package/web-ui/build/static/smarty-Dypt4i8b.js +0 -1
- package/web-ui/build/static/sml-BGGb-k8a.js +0 -1
- package/web-ui/build/static/sml-BODNZSm_.js +0 -1
- package/web-ui/build/static/solidity-D6wtTexR.js +0 -1
- package/web-ui/build/static/solution-file-5lZW0oOE.js +0 -1
- package/web-ui/build/static/soy-y16jnIDo.js +0 -1
- package/web-ui/build/static/sparql-DrdB7SPu.js +0 -1
- package/web-ui/build/static/splunk-spl-Doyv_CQR.js +0 -1
- package/web-ui/build/static/sqf-BSSKLJcS.js +0 -1
- package/web-ui/build/static/sqf-C27vJSdk.js +0 -1
- package/web-ui/build/static/sql-BGAlidwo.js +0 -1
- package/web-ui/build/static/sql-D632T_PJ.js +0 -1
- package/web-ui/build/static/sql_more-DxYQWBWa.js +0 -1
- package/web-ui/build/static/squirrel-BtynEITS.js +0 -1
- package/web-ui/build/static/stan-_WgX5GWP.js +0 -1
- package/web-ui/build/static/stan-oF5qmMKy.js +0 -1
- package/web-ui/build/static/stata-wLOz3xoi.js +0 -1
- package/web-ui/build/static/step21-BbsA7W89.js +0 -1
- package/web-ui/build/static/stylus-DtfRtkyR.js +0 -1
- package/web-ui/build/static/stylus-vEf2q3jH.js +0 -1
- package/web-ui/build/static/subunit-BRaQkxqR.js +0 -1
- package/web-ui/build/static/swift-DT015mq6.js +0 -1
- package/web-ui/build/static/swift-Drl9Vhia.js +0 -1
- package/web-ui/build/static/systemd-DWH7nh0Q.js +0 -1
- package/web-ui/build/static/t4-cs-BqiTmoCX.js +0 -1
- package/web-ui/build/static/t4-templating-Bof0eAYR.js +0 -1
- package/web-ui/build/static/t4-vb-8nW7Q4TI.js +0 -1
- package/web-ui/build/static/taggerscript-Dmu4nEaQ.js +0 -1
- package/web-ui/build/static/tap-B19AuLWq.js +0 -1
- package/web-ui/build/static/tap-DOdxz1Vj.js +0 -1
- package/web-ui/build/static/tcl-BAqD74MG.js +0 -1
- package/web-ui/build/static/tcl-DOM7n3Vd.js +0 -1
- package/web-ui/build/static/textile-DFXg54i4.js +0 -1
- package/web-ui/build/static/thrift-BGDpLcp_.js +0 -1
- package/web-ui/build/static/toml-J8m0tgag.js +0 -1
- package/web-ui/build/static/tp-BQkDcUXJ.js +0 -1
- package/web-ui/build/static/tremor-hOnek1Vr.js +0 -1
- package/web-ui/build/static/tsx-dhyw01LJ.js +0 -1
- package/web-ui/build/static/tt2-BZlvT5MG.js +0 -1
- package/web-ui/build/static/turtle-CEGacgOB.js +0 -1
- package/web-ui/build/static/twig-C7j-eyaz.js +0 -1
- package/web-ui/build/static/twig-MQre7lvF.js +0 -1
- package/web-ui/build/static/typescript-Dq5ZmyEV.js +0 -1
- package/web-ui/build/static/typescript-qPtHjmzW.js +0 -1
- package/web-ui/build/static/typoscript-B0sirAiC.js +0 -1
- package/web-ui/build/static/unrealscript-D_kXyIkW.js +0 -1
- package/web-ui/build/static/uorazor-8wB8nSC0.js +0 -1
- package/web-ui/build/static/uri-CaeHYk3y.js +0 -1
- package/web-ui/build/static/v-CYZwlqI2.js +0 -1
- package/web-ui/build/static/vala-DDkZds8N.js +0 -1
- package/web-ui/build/static/vala-zKk5gtUp.js +0 -1
- package/web-ui/build/static/vbnet-DY8Bh7zr.js +0 -1
- package/web-ui/build/static/vbnet-Z7zud-Nk.js +0 -1
- package/web-ui/build/static/vbscript-0xsGTIri.js +0 -1
- package/web-ui/build/static/vbscript-html-CQJqQ_tQ.js +0 -1
- package/web-ui/build/static/velocity-Dqe4ZgAo.js +0 -1
- package/web-ui/build/static/verilog-B0uVsHQr.js +0 -1
- package/web-ui/build/static/verilog-DLybxDJj.js +0 -1
- package/web-ui/build/static/vhdl-CP0JnbrM.js +0 -1
- package/web-ui/build/static/vhdl-CRV0TYO8.js +0 -1
- package/web-ui/build/static/vim-06LYR_Gs.js +0 -1
- package/web-ui/build/static/vim-DGgQcHr4.js +0 -1
- package/web-ui/build/static/visual-basic-BUWV1u5S.js +0 -1
- package/web-ui/build/static/warpscript-DKb8tXBH.js +0 -1
- package/web-ui/build/static/wasm-8E-n1sJQ.js +0 -1
- package/web-ui/build/static/web-idl-Bynfh0Gg.js +0 -1
- package/web-ui/build/static/wiki-Ck0ehuwt.js +0 -1
- package/web-ui/build/static/wolfram-BE1k6uuJ.js +0 -1
- package/web-ui/build/static/wren-Ce_CEEnI.js +0 -1
- package/web-ui/build/static/x86asm-DZUKtGAe.js +0 -1
- package/web-ui/build/static/xeora-DvXhnkv6.js +0 -1
- package/web-ui/build/static/xl-B1lBPZU_.js +0 -1
- package/web-ui/build/static/xml-D3p5hl_7.js +0 -1
- package/web-ui/build/static/xml-doc-CF8VvGyG.js +0 -1
- package/web-ui/build/static/xojo-D-WnMFdK.js +0 -1
- package/web-ui/build/static/xquery-BNNLxmJw.js +0 -1
- package/web-ui/build/static/xquery-D-mYtMjU.js +0 -1
- package/web-ui/build/static/yaml-a5-6TRUw.js +0 -1
- package/web-ui/build/static/yaml-aH3GAAQN.js +0 -1
- package/web-ui/build/static/yang-B2qT8oVg.js +0 -1
- package/web-ui/build/static/zephir-yxlgFmpA.js +0 -1
- package/web-ui/build/static/zig-B_AoM5P0.js +0 -1
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
import ContextInjectionService from '../services/contextInjectionService.js';
|
|
29
29
|
import FlowContextService from '../services/flowContextService.js';
|
|
30
30
|
import TokenCountingService from '../services/tokenCountingService.js';
|
|
31
|
+
import { render as renderModeTransitionReason } from '../utilities/modeTransitionReasons.js';
|
|
31
32
|
import ConversationCompactionService from '../services/conversationCompactionService.js';
|
|
32
33
|
import { getToolSchemasForAgent } from '../tools/openaiFunctionSchemas.js';
|
|
33
34
|
import {
|
|
@@ -112,6 +113,18 @@ class AgentScheduler {
|
|
|
112
113
|
this._lockAcquiredAt = new Map(); // agentId -> Date when lock was acquired
|
|
113
114
|
this._CYCLE_HISTORY_MAX = 200;
|
|
114
115
|
|
|
116
|
+
// Per-agent mode-transition ring buffer. Every CHAT ↔ AGENT flip, internal
|
|
117
|
+
// (user stop, AI timeout, empty-response stall, loop detection) or external
|
|
118
|
+
// (UI toggle, programmatic update_agent), lands here with a timestamp and
|
|
119
|
+
// a human-readable reason. The /scheduler visualizer surfaces the last
|
|
120
|
+
// entry per agent so operators immediately see why an agent flipped.
|
|
121
|
+
//
|
|
122
|
+
// Structure: Map<agentId, Array<{ at: ISOString, from: string, to: string,
|
|
123
|
+
// reasonCode: string, humanReason: string,
|
|
124
|
+
// detail?: Object }>>
|
|
125
|
+
this._modeTransitionHistory = new Map();
|
|
126
|
+
this._MODE_TRANSITION_HISTORY_MAX_PER_AGENT = 50;
|
|
127
|
+
|
|
115
128
|
// Empty-response stall tracker. Populated only when a cycle received an
|
|
116
129
|
// AI response whose content was empty/whitespace AND carried no tool calls.
|
|
117
130
|
// Reset on any productive cycle. Structure: Map<agentId, { count, firstAt }>.
|
|
@@ -134,6 +147,131 @@ class AgentScheduler {
|
|
|
134
147
|
}
|
|
135
148
|
}
|
|
136
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Record a mode transition into the per-agent ring buffer. Pure bookkeeping —
|
|
152
|
+
* does NOT mutate agent.mode, does NOT persist, does NOT broadcast. Callers
|
|
153
|
+
* who need those effects should go through `_transitionMode` (internal,
|
|
154
|
+
* scheduler-initiated flips) or call this method AFTER they've already
|
|
155
|
+
* persisted/broadcast (agentPool does that for UI-driven flips).
|
|
156
|
+
*
|
|
157
|
+
* @param {string} agentId
|
|
158
|
+
* @param {string} from Previous mode ('chat' | 'agent')
|
|
159
|
+
* @param {string} to New mode ('chat' | 'agent')
|
|
160
|
+
* @param {string} reasonCode Stable reason key — see utilities/modeTransitionReasons.js
|
|
161
|
+
* @param {Object} [detail] Template substitution values (count, elapsedSec, …)
|
|
162
|
+
*/
|
|
163
|
+
recordModeTransition(agentId, from, to, reasonCode, detail = {}) {
|
|
164
|
+
if (!agentId || from === to) return;
|
|
165
|
+
const humanReason = renderModeTransitionReason(reasonCode, detail);
|
|
166
|
+
const entry = {
|
|
167
|
+
at: new Date().toISOString(),
|
|
168
|
+
from, to,
|
|
169
|
+
reasonCode: reasonCode || 'unknown',
|
|
170
|
+
humanReason,
|
|
171
|
+
detail: detail && Object.keys(detail).length > 0 ? { ...detail } : null,
|
|
172
|
+
};
|
|
173
|
+
if (!this._modeTransitionHistory.has(agentId)) {
|
|
174
|
+
this._modeTransitionHistory.set(agentId, []);
|
|
175
|
+
}
|
|
176
|
+
const arr = this._modeTransitionHistory.get(agentId);
|
|
177
|
+
arr.push(entry);
|
|
178
|
+
if (arr.length > this._MODE_TRANSITION_HISTORY_MAX_PER_AGENT) {
|
|
179
|
+
arr.splice(0, arr.length - this._MODE_TRANSITION_HISTORY_MAX_PER_AGENT);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Apply a scheduler-initiated mode transition end-to-end: mutate the agent,
|
|
185
|
+
* record in history, persist, and broadcast both legacy + canonical state
|
|
186
|
+
* events with BOTH reasonCode (machine) and humanReason (UI-friendly).
|
|
187
|
+
*
|
|
188
|
+
* This is the ONLY sanctioned way for the scheduler to flip mode. Direct
|
|
189
|
+
* `agent.mode = …` assignments in this file are a mistake — they skip the
|
|
190
|
+
* history, the humanReason, and the broadcast.
|
|
191
|
+
*
|
|
192
|
+
* Broadcast events:
|
|
193
|
+
* - `agent_mode_changed` — carries { agentId, mode, reason, humanReason }.
|
|
194
|
+
* `reason` kept for back-compat with existing UI.
|
|
195
|
+
* - `broadcastAgentStateUpdate` — canonical UI state refresh.
|
|
196
|
+
*
|
|
197
|
+
* @param {string} agentId
|
|
198
|
+
* @param {string} toMode AGENT_MODES.CHAT | AGENT_MODES.AGENT
|
|
199
|
+
* @param {string} reasonCode e.g. 'empty-response-stall' — see utilities/modeTransitionReasons.js
|
|
200
|
+
* @param {Object} [detail] Template values + optional { transcriptMessage } to
|
|
201
|
+
* push as a chat message.
|
|
202
|
+
* @returns {Promise<boolean>} true if the transition happened, false if skipped (no-op).
|
|
203
|
+
* @private
|
|
204
|
+
*/
|
|
205
|
+
async _transitionMode(agentId, toMode, reasonCode, detail = {}) {
|
|
206
|
+
const agent = await this.agentPool.getAgent(agentId);
|
|
207
|
+
if (!agent) return false;
|
|
208
|
+
const fromMode = agent.mode;
|
|
209
|
+
if (fromMode === toMode) return false;
|
|
210
|
+
|
|
211
|
+
// 1. Mutate in-memory state.
|
|
212
|
+
agent.mode = toMode;
|
|
213
|
+
|
|
214
|
+
// 2. Optional transcript message (the existing stall / loop / timeout
|
|
215
|
+
// handlers push a chat bubble explaining what happened; we accept it
|
|
216
|
+
// here so all mode-change bookkeeping lives in one place).
|
|
217
|
+
if (detail.transcriptMessage && agent.conversations?.full) {
|
|
218
|
+
agent.conversations.full.messages.push(detail.transcriptMessage);
|
|
219
|
+
agent.conversations.full.lastUpdated = new Date().toISOString();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// 3. Record in the visualizer ring buffer (natural-language included).
|
|
223
|
+
// Don't leak transcriptMessage into the saved detail — it can be large.
|
|
224
|
+
const persistedDetail = { ...detail };
|
|
225
|
+
delete persistedDetail.transcriptMessage;
|
|
226
|
+
this.recordModeTransition(agentId, fromMode, toMode, reasonCode, persistedDetail);
|
|
227
|
+
const entry = this._modeTransitionHistory.get(agentId)?.slice(-1)[0];
|
|
228
|
+
|
|
229
|
+
// 4. Persist — best-effort. A persistence failure should NOT leave us in
|
|
230
|
+
// a re-firing state; scheduler trackers (stall, loop) are expected to
|
|
231
|
+
// be cleared by the caller BEFORE invoking us.
|
|
232
|
+
try {
|
|
233
|
+
await this.agentPool.persistAgentState(agentId);
|
|
234
|
+
} catch (err) {
|
|
235
|
+
this.logger?.error?.(`[_transitionMode] persist failed`, { agentId, error: err.message });
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// 5. Broadcast — two events. Legacy `agent_mode_changed` is what the UI
|
|
239
|
+
// toggle listens to; we enrich it with `humanReason` without breaking
|
|
240
|
+
// older consumers that only read `reason`.
|
|
241
|
+
const sessionId = this.getAgentSession(agentId) || agent.sessionId;
|
|
242
|
+
if (sessionId && this.webSocketManager?.broadcastToSession) {
|
|
243
|
+
try {
|
|
244
|
+
if (detail.transcriptMessage) {
|
|
245
|
+
this.webSocketManager.broadcastToSession(sessionId, {
|
|
246
|
+
type: 'message_added',
|
|
247
|
+
data: {
|
|
248
|
+
agentId,
|
|
249
|
+
message: detail.transcriptMessage,
|
|
250
|
+
type: reasonCode,
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
this.webSocketManager.broadcastToSession(sessionId, {
|
|
255
|
+
type: 'agent_mode_changed',
|
|
256
|
+
data: {
|
|
257
|
+
agentId,
|
|
258
|
+
mode: toMode,
|
|
259
|
+
reason: reasonCode, // back-compat
|
|
260
|
+
humanReason: entry?.humanReason || '', // new: UI-friendly
|
|
261
|
+
timestamp: entry?.at || new Date().toISOString(),
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
} catch (err) {
|
|
265
|
+
this.logger?.warn?.(`[_transitionMode] broadcast failed`, { agentId, error: err.message });
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
try {
|
|
269
|
+
await this.broadcastAgentStateUpdate(agentId, reasonCode);
|
|
270
|
+
} catch { /* broadcast errors are best-effort */ }
|
|
271
|
+
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
|
|
137
275
|
/**
|
|
138
276
|
* Start the agent scheduler
|
|
139
277
|
*/
|
|
@@ -197,6 +335,7 @@ class AgentScheduler {
|
|
|
197
335
|
this._lockAcquiredAt.clear();
|
|
198
336
|
this._cycleHistory.length = 0;
|
|
199
337
|
this._emptyResponseTracker.clear();
|
|
338
|
+
this._modeTransitionHistory.clear();
|
|
200
339
|
|
|
201
340
|
// Cleanup services
|
|
202
341
|
if (this.tokenCountingService && this.tokenCountingService.cleanup) {
|
|
@@ -263,6 +402,10 @@ class AgentScheduler {
|
|
|
263
402
|
activeAIRequest: activeAIReq,
|
|
264
403
|
stateHashHistory: (this.stateHashHistory.get(agent.id) || []).slice(-10),
|
|
265
404
|
emptyResponse: this._emptyResponseTracker.get(agent.id) || null,
|
|
405
|
+
// Last 10 mode transitions (CHAT ↔ AGENT) for this agent. Newest-last.
|
|
406
|
+
// Each entry: { at, from, to, reasonCode, humanReason, detail }.
|
|
407
|
+
// The /scheduler visualizer surfaces humanReason under the mode cell.
|
|
408
|
+
modeTransitions: (this._modeTransitionHistory.get(agent.id) || []).slice(-10),
|
|
266
409
|
});
|
|
267
410
|
}
|
|
268
411
|
|
|
@@ -430,39 +573,34 @@ class AgentScheduler {
|
|
|
430
573
|
}
|
|
431
574
|
}
|
|
432
575
|
|
|
433
|
-
//
|
|
434
|
-
agent.mode = AGENT_MODES.CHAT;
|
|
435
|
-
|
|
436
|
-
// Clear any delays
|
|
576
|
+
// Clear any delays BEFORE the mode flip — _transitionMode persists after.
|
|
437
577
|
agent.delayEndTime = null;
|
|
438
578
|
|
|
439
|
-
//
|
|
440
|
-
|
|
579
|
+
// Flip mode → CHAT (records transition + persists + broadcasts
|
|
580
|
+
// agent_mode_changed with humanReason "Stopped by user.")
|
|
581
|
+
await this._transitionMode(agentId, AGENT_MODES.CHAT, 'user-stop');
|
|
441
582
|
|
|
442
|
-
//
|
|
443
|
-
|
|
583
|
+
// Clear stop request flag after mode is set (it has been honored).
|
|
584
|
+
agent.stopRequested = false;
|
|
444
585
|
|
|
445
|
-
// Clean up session tracking
|
|
586
|
+
// Clean up session tracking.
|
|
446
587
|
this.removeAgent(agentId, 'stopped-by-user');
|
|
447
588
|
|
|
448
|
-
//
|
|
589
|
+
// Legacy `execution_stopped` event — some UI paths key off it rather
|
|
590
|
+
// than agent_mode_changed. Kept for back-compat; the mode flip itself
|
|
591
|
+
// was already broadcast by _transitionMode above.
|
|
449
592
|
const sessionId = this.getAgentSession(agentId) || agent.sessionId;
|
|
450
|
-
|
|
451
|
-
// Broadcast stop event if we have a valid session ID
|
|
452
593
|
if (sessionId && this.webSocketManager && this.webSocketManager.broadcastToSession) {
|
|
453
594
|
this.webSocketManager.broadcastToSession(sessionId, {
|
|
454
595
|
type: 'execution_stopped',
|
|
455
596
|
data: {
|
|
456
597
|
agentId,
|
|
457
598
|
type: 'execution_stopped',
|
|
458
|
-
mode: AGENT_MODES.CHAT,
|
|
599
|
+
mode: AGENT_MODES.CHAT,
|
|
459
600
|
timestamp: new Date().toISOString()
|
|
460
601
|
}
|
|
461
602
|
});
|
|
462
603
|
}
|
|
463
|
-
// Canonical state broadcast — ensures the UI flips the mode toggle
|
|
464
|
-
// even if it isn't listening for the legacy `execution_stopped` event.
|
|
465
|
-
await this.broadcastAgentStateUpdate(agentId, 'user-stopped');
|
|
466
604
|
|
|
467
605
|
this.logger.info(`Agent execution stopped: ${agentId}`, {
|
|
468
606
|
mode: agent.mode
|
|
@@ -734,6 +872,10 @@ class AgentScheduler {
|
|
|
734
872
|
// "no-op cycle" that must NOT pollute stateHashHistory.
|
|
735
873
|
let gotResponse = false;
|
|
736
874
|
let advanced = false;
|
|
875
|
+
// Preserved for the empty-response-stall diagnostic snapshot — we want
|
|
876
|
+
// to show the operator the raw shape of an "empty" response (finish
|
|
877
|
+
// reason, has-tool-calls, content length) so the root cause is visible.
|
|
878
|
+
let lastAiResponse = null;
|
|
737
879
|
|
|
738
880
|
// Process based on whether there are messages or agent needs autonomous processing
|
|
739
881
|
if (totalMessages === 0 && agent.mode === AGENT_MODES.AGENT) {
|
|
@@ -742,6 +884,7 @@ class AgentScheduler {
|
|
|
742
884
|
const result = await this.processAgentAutonomously(agentId);
|
|
743
885
|
gotResponse = result.gotResponse;
|
|
744
886
|
advanced = result.advanced;
|
|
887
|
+
lastAiResponse = result.aiResponse ?? null;
|
|
745
888
|
} else if (totalMessages > 0) {
|
|
746
889
|
// Has messages to process
|
|
747
890
|
const processedMessages = await this.processAgentQueues(agentId);
|
|
@@ -752,6 +895,7 @@ class AgentScheduler {
|
|
|
752
895
|
|
|
753
896
|
if (aiResponse) {
|
|
754
897
|
gotResponse = true;
|
|
898
|
+
lastAiResponse = aiResponse;
|
|
755
899
|
advanced = await this.processAIResponse(agentId, aiResponse);
|
|
756
900
|
|
|
757
901
|
// Clear token limit retry tracker on successful AI response
|
|
@@ -776,9 +920,11 @@ class AgentScheduler {
|
|
|
776
920
|
// whitespace-only response with no tool calls, we keep retrying — the
|
|
777
921
|
// next cycle may produce a real message. But we ring-buffer the empties
|
|
778
922
|
// so a genuinely stuck model eventually surfaces as a user-facing error
|
|
779
|
-
// instead of silently spinning forever.
|
|
923
|
+
// instead of silently spinning forever. We also snapshot the response
|
|
924
|
+
// shape so the operator can see WHY the model returned nothing
|
|
925
|
+
// (content_filter? tool-call-only? reasoning-only? etc).
|
|
780
926
|
if (gotResponse && !advanced) {
|
|
781
|
-
await this._trackEmptyResponse(agentId);
|
|
927
|
+
await this._trackEmptyResponse(agentId, lastAiResponse);
|
|
782
928
|
} else if (advanced) {
|
|
783
929
|
// Productive cycle — any previous stall has resolved itself.
|
|
784
930
|
if (this._emptyResponseTracker.has(agentId)) {
|
|
@@ -1125,7 +1271,7 @@ class AgentScheduler {
|
|
|
1125
1271
|
// No response - activity service will determine if we should continue.
|
|
1126
1272
|
// Reported as { gotResponse: false } so the caller doesn't count this
|
|
1127
1273
|
// as an "empty-response stall" (which is specifically about empty content).
|
|
1128
|
-
return { gotResponse: false, advanced: false };
|
|
1274
|
+
return { gotResponse: false, advanced: false, aiResponse: null };
|
|
1129
1275
|
}
|
|
1130
1276
|
|
|
1131
1277
|
// Process AI response and execute tools. processAIResponse returns `true`
|
|
@@ -1137,7 +1283,9 @@ class AgentScheduler {
|
|
|
1137
1283
|
// Clear token limit retry tracker on successful AI response
|
|
1138
1284
|
this.clearTokenLimitRetryTracker(agentId);
|
|
1139
1285
|
|
|
1140
|
-
|
|
1286
|
+
// Return aiResponse alongside flags so the caller can snapshot the raw
|
|
1287
|
+
// shape into the empty-response diagnostic tracker when advanced=false.
|
|
1288
|
+
return { gotResponse: true, advanced, aiResponse };
|
|
1141
1289
|
}
|
|
1142
1290
|
|
|
1143
1291
|
/**
|
|
@@ -1747,7 +1895,18 @@ class AgentScheduler {
|
|
|
1747
1895
|
// Inject TaskManager instructions for AGENT mode
|
|
1748
1896
|
let enhancedSystemPrompt = agent.systemPrompt;
|
|
1749
1897
|
if (agent.mode === AGENT_MODES.AGENT) {
|
|
1750
|
-
const taskManagerInstruction = "\n\nIMPORTANT: You are in AGENT mode. The use of TaskManager tool is mandatory
|
|
1898
|
+
const taskManagerInstruction = "\n\nIMPORTANT: You are in AGENT mode. The use of TaskManager tool is mandatory.\n\n" +
|
|
1899
|
+
"TASK LIFECYCLE (follow this, don't improvise):\n" +
|
|
1900
|
+
" 1. If your task list is empty, your FIRST TaskManager call must be `sync` with your complete plan as a single call. " +
|
|
1901
|
+
"Don't `create` tasks one at a time at the start — use `sync` once to establish the whole plan.\n" +
|
|
1902
|
+
" 2. Then process tasks one at a time: `update` the next task to `in_progress`, do the work with other tools, " +
|
|
1903
|
+
"`update` it to `completed`, move on. The scheduler enforces at most one task `in_progress` at a time.\n" +
|
|
1904
|
+
" 3. If you discover new work mid-execution, `create` a single new task, or issue another `sync` when the plan materially changes. " +
|
|
1905
|
+
"Don't `sync` every turn — prefer targeted `update`/`create` unless the plan itself shifted.\n" +
|
|
1906
|
+
" 4. When every task is `completed`, call the `jobdone` tool.\n\n" +
|
|
1907
|
+
"Update the user about task-list status periodically. While in agent mode: no thank-you's, no compliments, " +
|
|
1908
|
+
"no rhetorical questions, no self-commentary — stay focused on executing tasks. " +
|
|
1909
|
+
"Only ask questions through dedicated tools designed for user interaction (if available).";
|
|
1751
1910
|
enhancedSystemPrompt = (agent.systemPrompt || '') + taskManagerInstruction;
|
|
1752
1911
|
|
|
1753
1912
|
// Note: Consecutive no-tool reminders are now sent as tool results (see _processAIResponse)
|
|
@@ -2176,12 +2335,16 @@ class AgentScheduler {
|
|
|
2176
2335
|
status: error.status
|
|
2177
2336
|
});
|
|
2178
2337
|
|
|
2179
|
-
//
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2338
|
+
// Flip mode → CHAT via the central helper so the transition gets
|
|
2339
|
+
// captured in _modeTransitionHistory with a natural-language reason.
|
|
2340
|
+
// elapsedSec is best-effort; many timeout errors don't carry timing.
|
|
2341
|
+
const elapsedSec = Number.isFinite(error.elapsedMs)
|
|
2342
|
+
? Math.round(error.elapsedMs / 1000)
|
|
2343
|
+
: 60; // SCHEDULER_CONFIG's default AI-call watchdog window
|
|
2344
|
+
await this._transitionMode(agentId, AGENT_MODES.CHAT, 'ai-request-timeout', { elapsedSec });
|
|
2183
2345
|
|
|
2184
|
-
//
|
|
2346
|
+
// Toast-only notification (separate event so the UI can render a
|
|
2347
|
+
// corner toast in addition to the mode-change indicator).
|
|
2185
2348
|
if (this.webSocketManager && this.webSocketManager.broadcastToSession) {
|
|
2186
2349
|
this.webSocketManager.broadcastToSession(sessionId, {
|
|
2187
2350
|
type: 'agent_timeout',
|
|
@@ -3590,15 +3753,27 @@ class AgentScheduler {
|
|
|
3590
3753
|
* next cycle may produce a real message — but we buffer the empties so
|
|
3591
3754
|
* we can surface a clear error to the user if the stall persists.
|
|
3592
3755
|
*
|
|
3756
|
+
* A snapshot of the raw response's shape is captured per cycle (capped at
|
|
3757
|
+
* 3 samples per entry) so the operator can see WHY the model returned
|
|
3758
|
+
* nothing: was it a content-filter trip, a tool-call-only turn whose
|
|
3759
|
+
* tool_calls failed to bridge, a reasoning-only stream that never emitted
|
|
3760
|
+
* text, or an actual silent-but-200 upstream. Without this the stall is
|
|
3761
|
+
* indistinguishable from "the model is broken" vs "our parser missed it".
|
|
3762
|
+
*
|
|
3593
3763
|
* @param {string} agentId
|
|
3764
|
+
* @param {Object|null} aiResponse Raw AI response from aiService; null OK.
|
|
3594
3765
|
* @private
|
|
3595
3766
|
*/
|
|
3596
|
-
async _trackEmptyResponse(agentId) {
|
|
3767
|
+
async _trackEmptyResponse(agentId, aiResponse = null) {
|
|
3597
3768
|
const now = Date.now();
|
|
3598
3769
|
const existing = this._emptyResponseTracker.get(agentId);
|
|
3770
|
+
const sample = this._snapshotResponseShape(aiResponse);
|
|
3771
|
+
const prevSamples = existing?.samples || [];
|
|
3772
|
+
// Keep up to 3 samples so operators see the pattern, not just the last one.
|
|
3773
|
+
const samples = [...prevSamples, sample].slice(-3);
|
|
3599
3774
|
const entry = existing
|
|
3600
|
-
? { count: existing.count + 1, firstAt: existing.firstAt, lastAt: now }
|
|
3601
|
-
: { count: 1, firstAt: now, lastAt: now };
|
|
3775
|
+
? { count: existing.count + 1, firstAt: existing.firstAt, lastAt: now, samples }
|
|
3776
|
+
: { count: 1, firstAt: now, lastAt: now, samples };
|
|
3602
3777
|
|
|
3603
3778
|
this._emptyResponseTracker.set(agentId, entry);
|
|
3604
3779
|
|
|
@@ -3607,6 +3782,7 @@ class AgentScheduler {
|
|
|
3607
3782
|
elapsedMs: now - entry.firstAt,
|
|
3608
3783
|
threshold: SCHEDULER_CONFIG.EMPTY_RESPONSE_STALL_THRESHOLD,
|
|
3609
3784
|
windowMs: SCHEDULER_CONFIG.EMPTY_RESPONSE_STALL_WINDOW_MS,
|
|
3785
|
+
sample, // snapshot of THIS empty response — aids root-cause analysis
|
|
3610
3786
|
});
|
|
3611
3787
|
|
|
3612
3788
|
const shouldStall =
|
|
@@ -3622,6 +3798,83 @@ class AgentScheduler {
|
|
|
3622
3798
|
}
|
|
3623
3799
|
}
|
|
3624
3800
|
|
|
3801
|
+
/**
|
|
3802
|
+
* Reduce an AI response object to the minimum forensic info needed to
|
|
3803
|
+
* diagnose WHY it was classified as empty. Keeps the snapshot tiny (fits
|
|
3804
|
+
* in WebSocket + UI) and avoids leaking full conversation content.
|
|
3805
|
+
*
|
|
3806
|
+
* Fields probed:
|
|
3807
|
+
* - contentType / contentLength : what the accumulator got
|
|
3808
|
+
* - hasToolCalls : was it a tool-only turn?
|
|
3809
|
+
* - toolCallCount : how many, if so
|
|
3810
|
+
* - finishReason : provider's stop signal (length,
|
|
3811
|
+
* content_filter, tool_calls, stop, …)
|
|
3812
|
+
* - hasReasoning : reasoning-only turn indicator
|
|
3813
|
+
* - model : which model produced it
|
|
3814
|
+
*
|
|
3815
|
+
* Each field is a cheap string/number/bool. No content bodies included.
|
|
3816
|
+
*
|
|
3817
|
+
* @param {Object|null} r Raw aiService response.
|
|
3818
|
+
* @returns {{ at: string, contentType: string, contentLength: number, hasToolCalls: boolean, toolCallCount: number, finishReason: string|null, hasReasoning: boolean, model: string|null, hint: string }}
|
|
3819
|
+
* @private
|
|
3820
|
+
*/
|
|
3821
|
+
_snapshotResponseShape(r) {
|
|
3822
|
+
const at = new Date().toISOString();
|
|
3823
|
+
if (!r || typeof r !== 'object') {
|
|
3824
|
+
return { at, contentType: 'null', contentLength: 0, hasToolCalls: false,
|
|
3825
|
+
toolCallCount: 0, finishReason: null, hasReasoning: false,
|
|
3826
|
+
model: null, hint: 'aiService returned null/undefined' };
|
|
3827
|
+
}
|
|
3828
|
+
const content = r.content;
|
|
3829
|
+
let contentType, contentLength;
|
|
3830
|
+
if (typeof content === 'string') {
|
|
3831
|
+
contentType = 'string';
|
|
3832
|
+
contentLength = content.length;
|
|
3833
|
+
} else if (Array.isArray(content)) {
|
|
3834
|
+
contentType = 'array';
|
|
3835
|
+
contentLength = content.reduce((n, p) => n + (typeof p?.text === 'string' ? p.text.length : 0), 0);
|
|
3836
|
+
} else if (content == null) {
|
|
3837
|
+
contentType = 'null';
|
|
3838
|
+
contentLength = 0;
|
|
3839
|
+
} else {
|
|
3840
|
+
contentType = typeof content;
|
|
3841
|
+
contentLength = 0;
|
|
3842
|
+
}
|
|
3843
|
+
|
|
3844
|
+
const toolCalls = Array.isArray(r.toolCalls) ? r.toolCalls
|
|
3845
|
+
: Array.isArray(r.tool_calls) ? r.tool_calls
|
|
3846
|
+
: null;
|
|
3847
|
+
const hasToolCalls = Array.isArray(toolCalls) && toolCalls.length > 0;
|
|
3848
|
+
const toolCallCount = hasToolCalls ? toolCalls.length : 0;
|
|
3849
|
+
|
|
3850
|
+
const finishReason = r.finishReason || r.finish_reason || r.stop_reason || null;
|
|
3851
|
+
const hasReasoning = !!(r.reasoning || r.reasoning_content
|
|
3852
|
+
|| (Array.isArray(content) && content.some(p => p?.type === 'reasoning')));
|
|
3853
|
+
const model = r.model || null;
|
|
3854
|
+
|
|
3855
|
+
// Best-guess hint. The operator sees this at the top of the sample so
|
|
3856
|
+
// they don't have to read the other fields to get a first theory. Wrong
|
|
3857
|
+
// hints are easy to override visually because all the raw fields are
|
|
3858
|
+
// right there.
|
|
3859
|
+
let hint;
|
|
3860
|
+
if (hasToolCalls && contentLength === 0) {
|
|
3861
|
+
hint = 'Tool-call-only turn — tool_calls did not reach the content accumulator. Likely a Chat Completions bridge gap.';
|
|
3862
|
+
} else if (hasReasoning && contentLength === 0) {
|
|
3863
|
+
hint = 'Reasoning-only turn — model emitted thinking tokens but no text output. Likely a Responses API stream that never reached output_text.';
|
|
3864
|
+
} else if (finishReason === 'content_filter') {
|
|
3865
|
+
hint = 'Blocked by the provider content filter.';
|
|
3866
|
+
} else if (finishReason === 'length') {
|
|
3867
|
+
hint = 'Hit max_tokens before producing any output. Raise the model\'s output cap or compact the conversation.';
|
|
3868
|
+
} else if (contentLength === 0 && finishReason === 'stop') {
|
|
3869
|
+
hint = 'Model returned 200 with clean stop and no output. Possible silent prompt-rejection / context-limit / upstream timeout.';
|
|
3870
|
+
} else {
|
|
3871
|
+
hint = 'Classified empty by the detector; root cause unclear — inspect raw fields.';
|
|
3872
|
+
}
|
|
3873
|
+
|
|
3874
|
+
return { at, contentType, contentLength, hasToolCalls, toolCallCount,
|
|
3875
|
+
finishReason, hasReasoning, model, hint };
|
|
3876
|
+
}
|
|
3877
|
+
|
|
3625
3878
|
/**
|
|
3626
3879
|
* Circuit breaker fired when an agent has produced N empty responses across
|
|
3627
3880
|
* at least the configured time window. Surfaces a user-facing error message,
|
|
@@ -3645,63 +3898,21 @@ class AgentScheduler {
|
|
|
3645
3898
|
this.consecutiveNoToolMessages.delete(agentId);
|
|
3646
3899
|
|
|
3647
3900
|
const elapsedSec = Math.round((entry.lastAt - entry.firstAt) / 1000);
|
|
3648
|
-
const interventionMessage = `The model returned ${entry.count} empty responses in a row over ${elapsedSec}s. ` +
|
|
3649
|
-
`I've switched to chat mode so you can retry or adjust. Common causes: ` +
|
|
3650
|
-
`the selected model is unreachable, rate-limited, or rejecting the current ` +
|
|
3651
|
-
`conversation. You can pick a different model or send a new message to try again.`;
|
|
3652
|
-
|
|
3653
|
-
const messageToAdd = {
|
|
3654
|
-
id: `msg-empty-response-stall-${Date.now()}`,
|
|
3655
|
-
role: 'assistant',
|
|
3656
|
-
content: interventionMessage,
|
|
3657
|
-
timestamp: new Date().toISOString(),
|
|
3658
|
-
isSystemMessage: true,
|
|
3659
|
-
emptyResponseStall: {
|
|
3660
|
-
count: entry.count,
|
|
3661
|
-
elapsedMs: entry.lastAt - entry.firstAt,
|
|
3662
|
-
},
|
|
3663
|
-
};
|
|
3664
|
-
|
|
3665
|
-
if (agent.conversations && agent.conversations.full) {
|
|
3666
|
-
agent.conversations.full.messages.push(messageToAdd);
|
|
3667
|
-
agent.conversations.full.lastUpdated = new Date().toISOString();
|
|
3668
|
-
}
|
|
3669
|
-
|
|
3670
|
-
agent.mode = AGENT_MODES.CHAT;
|
|
3671
3901
|
|
|
3672
|
-
//
|
|
3673
|
-
//
|
|
3674
|
-
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
if (sessionId && this.webSocketManager && this.webSocketManager.broadcastToSession) {
|
|
3682
|
-
try {
|
|
3683
|
-
this.webSocketManager.broadcastToSession(sessionId, {
|
|
3684
|
-
type: 'message_added',
|
|
3685
|
-
data: { agentId, message: messageToAdd, type: 'empty_response_stall' },
|
|
3686
|
-
});
|
|
3687
|
-
this.webSocketManager.broadcastToSession(sessionId, {
|
|
3688
|
-
type: 'agent_mode_changed',
|
|
3689
|
-
data: {
|
|
3690
|
-
agentId,
|
|
3691
|
-
mode: AGENT_MODES.CHAT,
|
|
3692
|
-
reason: 'empty_response_stall',
|
|
3693
|
-
timestamp: new Date().toISOString(),
|
|
3694
|
-
},
|
|
3695
|
-
});
|
|
3696
|
-
} catch (err) {
|
|
3697
|
-
this.logger.warn(`Failed to broadcast empty-response stall: ${err.message}`, { agentId });
|
|
3698
|
-
}
|
|
3699
|
-
}
|
|
3700
|
-
await this.broadcastAgentStateUpdate(agentId, 'empty-response-stall');
|
|
3902
|
+
// Flip mode → CHAT. System events like this one are NOT pushed into the
|
|
3903
|
+
// chat transcript — they surface via the `agent_mode_changed` +
|
|
3904
|
+
// `agent_notification` broadcasts as toast + notification-center entries.
|
|
3905
|
+
// Transcript bubbles are for conversation content only; filling the feed
|
|
3906
|
+
// with "I've switched to chat mode" bodies made every stall triple-post.
|
|
3907
|
+
await this._transitionMode(agentId, AGENT_MODES.CHAT, 'empty-response-stall', {
|
|
3908
|
+
count: entry.count,
|
|
3909
|
+
elapsedSec,
|
|
3910
|
+
});
|
|
3701
3911
|
|
|
3702
3912
|
this.logger.error(`Agent ${agentId} switched to CHAT mode after ${entry.count} empty responses`, {
|
|
3703
3913
|
agentName: agent.name,
|
|
3704
3914
|
elapsedMs: entry.lastAt - entry.firstAt,
|
|
3915
|
+
samples: entry.samples || [], // diagnostic — see _trackEmptyResponse
|
|
3705
3916
|
});
|
|
3706
3917
|
}
|
|
3707
3918
|
|
|
@@ -3753,72 +3964,16 @@ class AgentScheduler {
|
|
|
3753
3964
|
this._emptyResponseTracker.delete(agentId);
|
|
3754
3965
|
this.consecutiveNoToolMessages.delete(agentId);
|
|
3755
3966
|
|
|
3756
|
-
//
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
id: `msg-loop-intervention-${Date.now()}`,
|
|
3767
|
-
role: 'assistant',
|
|
3768
|
-
content: interventionMessage,
|
|
3769
|
-
timestamp: new Date().toISOString(),
|
|
3770
|
-
isSystemMessage: true,
|
|
3771
|
-
loopDetection: {
|
|
3772
|
-
occurrences: loopDetection.occurrences,
|
|
3773
|
-
windowSize: loopDetection.windowSize
|
|
3774
|
-
}
|
|
3775
|
-
};
|
|
3776
|
-
|
|
3777
|
-
// Add to the full conversation history directly
|
|
3778
|
-
if (agent.conversations && agent.conversations.full) {
|
|
3779
|
-
agent.conversations.full.messages.push(messageToAdd);
|
|
3780
|
-
agent.conversations.full.lastUpdated = new Date().toISOString();
|
|
3781
|
-
}
|
|
3782
|
-
|
|
3783
|
-
// Stop the agent execution - switch to chat mode
|
|
3784
|
-
agent.mode = AGENT_MODES.CHAT;
|
|
3785
|
-
|
|
3786
|
-
// Persist + broadcast are best-effort. Scheduler state was already cleared
|
|
3787
|
-
// above, so a failure here can still leave the intervention un-persisted
|
|
3788
|
-
// but won't cause the loop detector to re-fire.
|
|
3789
|
-
try {
|
|
3790
|
-
await this.agentPool.persistAgentState(agentId);
|
|
3791
|
-
} catch (err) {
|
|
3792
|
-
this.logger.error(`Failed to persist agent after loop detection: ${err.message}`, { agentId });
|
|
3793
|
-
}
|
|
3794
|
-
|
|
3795
|
-
// Broadcast the message to UI so it appears in the chat
|
|
3796
|
-
const sessionId = this.getAgentSession(agentId) || agent.sessionId;
|
|
3797
|
-
if (sessionId && this.webSocketManager && this.webSocketManager.broadcastToSession) {
|
|
3798
|
-
try {
|
|
3799
|
-
this.webSocketManager.broadcastToSession(sessionId, {
|
|
3800
|
-
type: 'message_added',
|
|
3801
|
-
data: {
|
|
3802
|
-
agentId,
|
|
3803
|
-
message: messageToAdd,
|
|
3804
|
-
type: 'loop_intervention'
|
|
3805
|
-
}
|
|
3806
|
-
});
|
|
3807
|
-
|
|
3808
|
-
this.webSocketManager.broadcastToSession(sessionId, {
|
|
3809
|
-
type: 'agent_mode_changed',
|
|
3810
|
-
data: {
|
|
3811
|
-
agentId,
|
|
3812
|
-
mode: AGENT_MODES.CHAT,
|
|
3813
|
-
reason: 'loop_detected',
|
|
3814
|
-
timestamp: new Date().toISOString()
|
|
3815
|
-
}
|
|
3816
|
-
});
|
|
3817
|
-
} catch (err) {
|
|
3818
|
-
this.logger.warn(`Failed to broadcast loop intervention: ${err.message}`, { agentId });
|
|
3819
|
-
}
|
|
3820
|
-
}
|
|
3821
|
-
await this.broadcastAgentStateUpdate(agentId, 'loop-detected');
|
|
3967
|
+
// Flip mode → CHAT. No chat-transcript bubble — the humanReason
|
|
3968
|
+
// ("The same action repeated N times…") is surfaced by the UI as a
|
|
3969
|
+
// toast + notification-center entry via the agent_mode_changed /
|
|
3970
|
+
// agent_notification broadcasts fired inside _transitionMode. Putting
|
|
3971
|
+
// system events into the transcript cluttered the feed every time the
|
|
3972
|
+
// loop tripped.
|
|
3973
|
+
await this._transitionMode(agentId, AGENT_MODES.CHAT, 'loop-detected', {
|
|
3974
|
+
occurrences: loopDetection.occurrences,
|
|
3975
|
+
windowSize: loopDetection.windowSize,
|
|
3976
|
+
});
|
|
3822
3977
|
|
|
3823
3978
|
this.logger.warn(`Agent ${agentId} stopped due to repetitive loop - awaiting user intervention`, {
|
|
3824
3979
|
occurrences: loopDetection.occurrences,
|
|
@@ -12,6 +12,7 @@ import TagParser from '../utilities/tagParser.js';
|
|
|
12
12
|
import { TOOL_IDS, COMMAND_FORMATS } from '../utilities/toolConstants.js';
|
|
13
13
|
import { getVisualEditorBridge } from '../services/visualEditorBridge.js';
|
|
14
14
|
import { VisualEditorTool } from '../tools/visualEditorTool.js';
|
|
15
|
+
import { prependSourceHeader } from '../services/messageSource.js';
|
|
15
16
|
|
|
16
17
|
class MessageProcessor {
|
|
17
18
|
constructor(config, logger, toolsRegistry, agentPool, contextManager, aiService, modelRouterService = null, modelsService = null) {
|
|
@@ -132,6 +133,18 @@ class MessageProcessor {
|
|
|
132
133
|
this.logger.warn?.(`Failed to inject visual context: ${err.message}`);
|
|
133
134
|
}
|
|
134
135
|
|
|
136
|
+
// Prepend the source attribution header when the message arrived from
|
|
137
|
+
// an external channel (Discord / Telegram). The header is plain text
|
|
138
|
+
// of the form "(Message by alice from Discord > MyGuild > #ops)" and
|
|
139
|
+
// becomes part of the persisted content, so the agent sees it in its
|
|
140
|
+
// LLM context and the operator sees it in the web-UI transcript. The
|
|
141
|
+
// operation is idempotent — re-serialization (state restore, replay)
|
|
142
|
+
// won't double-prefix. Sources of kind web/api/internal produce no
|
|
143
|
+
// header and leave the content untouched. See services/messageSource.js.
|
|
144
|
+
if (context.source) {
|
|
145
|
+
enhancedMessage = prependSourceHeader(enhancedMessage, context.source);
|
|
146
|
+
}
|
|
147
|
+
|
|
135
148
|
await this.agentPool.addUserMessage(agentId, {
|
|
136
149
|
content: enhancedMessage,
|
|
137
150
|
role: 'user',
|
|
@@ -140,6 +153,10 @@ class MessageProcessor {
|
|
|
140
153
|
sessionId: context.sessionId,
|
|
141
154
|
visualContextInjected,
|
|
142
155
|
streamingEnabled: context.streamingEnabled !== false, // Pass streaming preference from context
|
|
156
|
+
// Preserve the structured source on the queued message too, so any
|
|
157
|
+
// downstream consumer (logs, analytics, relay) can reason about
|
|
158
|
+
// provenance without re-parsing the inline header.
|
|
159
|
+
source: context.source || null,
|
|
143
160
|
// Flow execution context (if this message is part of a flow)
|
|
144
161
|
isFlowExecution: context.isFlowExecution || false,
|
|
145
162
|
flowRunId: context.flowRunId,
|
package/src/core/orchestrator.js
CHANGED
|
@@ -388,7 +388,7 @@ class Orchestrator {
|
|
|
388
388
|
* @private
|
|
389
389
|
*/
|
|
390
390
|
async _handleSendMessage(request) {
|
|
391
|
-
const { agentId, message, mode, contextReferences, apiKey, customApiKeys, streamingEnabled } = request.payload;
|
|
391
|
+
const { agentId, message, mode, contextReferences, apiKey, customApiKeys, streamingEnabled, source } = request.payload;
|
|
392
392
|
|
|
393
393
|
const context = {
|
|
394
394
|
projectDir: request.projectDir,
|
|
@@ -398,7 +398,11 @@ class Orchestrator {
|
|
|
398
398
|
contextReferences: contextReferences || [],
|
|
399
399
|
apiKey: apiKey, // Pass Loxia API key through context
|
|
400
400
|
customApiKeys: customApiKeys || {}, // Pass custom API keys through context
|
|
401
|
-
streamingEnabled: streamingEnabled !== false // Default to true if not specified
|
|
401
|
+
streamingEnabled: streamingEnabled !== false, // Default to true if not specified
|
|
402
|
+
// Provenance metadata from the inbound adapter (Discord/Telegram/…).
|
|
403
|
+
// Preserved verbatim by messageProcessor and agentPool so the agent
|
|
404
|
+
// can see where the message came from. See services/messageSource.js.
|
|
405
|
+
source: source || null,
|
|
402
406
|
};
|
|
403
407
|
|
|
404
408
|
return await this.routeToAgent(agentId, message, context);
|