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
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for the memoryTool `reminisce` action.
|
|
3
|
+
*
|
|
4
|
+
* Exercises the full path: tool.execute({action: 'reminisce', ...}) →
|
|
5
|
+
* _executeReminisce → agentPool.getAgent → conversationQuery.<mode> →
|
|
6
|
+
* shaped result. The per-mode semantics are unit-tested exhaustively in
|
|
7
|
+
* services/__tests__/conversationQuery.test.js; these tests focus on the
|
|
8
|
+
* wiring: action validation, context requirements, agent fetching, and
|
|
9
|
+
* error paths.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { jest, describe, test, expect, beforeEach } from '@jest/globals';
|
|
13
|
+
import { createMockLogger } from '../../__test-utils__/mockFactories.js';
|
|
14
|
+
|
|
15
|
+
jest.unstable_mockModule('../../services/memoryService.js', () => ({
|
|
16
|
+
getMemoryService: jest.fn(() => ({
|
|
17
|
+
initialize: jest.fn().mockResolvedValue(undefined),
|
|
18
|
+
})),
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
const { default: MemoryTool } = await import('../memoryTool.js');
|
|
22
|
+
|
|
23
|
+
function makeMessages(n) {
|
|
24
|
+
return Array.from({ length: n }, (_, i) => ({
|
|
25
|
+
id: `msg_${String(i).padStart(4, '0')}`,
|
|
26
|
+
role: i % 2 === 0 ? 'user' : 'assistant',
|
|
27
|
+
content: `message ${i}${i === 5 ? ' contains special keyword' : ''}`,
|
|
28
|
+
createdAt: new Date(Date.UTC(2026, 0, 1, 0, 0, i)).toISOString(),
|
|
29
|
+
tokenUsage: { totalTokens: 10 },
|
|
30
|
+
toolExecutions: i === 7 ? [{ toolId: 'terminal', input: 'ls -la' }] : [],
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function makeSetup({ messages = null, agentExists = true } = {}) {
|
|
35
|
+
const tool = new MemoryTool({}, createMockLogger());
|
|
36
|
+
const agent = agentExists ? {
|
|
37
|
+
id: 'agent-1',
|
|
38
|
+
conversations: messages ? { full: { messages } } : { full: { messages: makeMessages(20) } },
|
|
39
|
+
} : null;
|
|
40
|
+
const agentPool = {
|
|
41
|
+
getAgent: jest.fn().mockResolvedValue(agent),
|
|
42
|
+
};
|
|
43
|
+
const context = { agentId: 'agent-1', agentPool };
|
|
44
|
+
return { tool, agent, agentPool, context };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
describe('memoryTool reminisce — wiring', () => {
|
|
48
|
+
let tool, context, agentPool;
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
({ tool, context, agentPool } = makeSetup());
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('overview mode returns archive stats + timeline', async () => {
|
|
54
|
+
const out = await tool.execute({ action: 'reminisce', mode: 'overview' }, context);
|
|
55
|
+
expect(out.success).toBe(true);
|
|
56
|
+
expect(out.mode).toBe('overview');
|
|
57
|
+
expect(out.result.totalMessages).toBe(20);
|
|
58
|
+
expect(out.result.timeline.length).toBeGreaterThan(0);
|
|
59
|
+
expect(out.result.timeline[0].messageId).toBe('msg_0000');
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test('range mode paginates', async () => {
|
|
63
|
+
const out = await tool.execute(
|
|
64
|
+
{ action: 'reminisce', mode: 'range', offset: 5, limit: 3 },
|
|
65
|
+
context
|
|
66
|
+
);
|
|
67
|
+
expect(out.success).toBe(true);
|
|
68
|
+
expect(out.result.messages.length).toBe(3);
|
|
69
|
+
expect(out.result.messages[0].messageId).toBe('msg_0005');
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test('search finds matches in content', async () => {
|
|
73
|
+
const out = await tool.execute(
|
|
74
|
+
{ action: 'reminisce', mode: 'search', query: 'special keyword' },
|
|
75
|
+
context
|
|
76
|
+
);
|
|
77
|
+
expect(out.success).toBe(true);
|
|
78
|
+
expect(out.result.matches.length).toBeGreaterThan(0);
|
|
79
|
+
expect(out.result.matches[0].messageId).toBe('msg_0005');
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test('around resolves a bookmarked messageId', async () => {
|
|
83
|
+
const out = await tool.execute(
|
|
84
|
+
{ action: 'reminisce', mode: 'around', messageId: 'msg_0010', before: 2, after: 2 },
|
|
85
|
+
context
|
|
86
|
+
);
|
|
87
|
+
expect(out.success).toBe(true);
|
|
88
|
+
expect(out.result.targetFound).toBe(true);
|
|
89
|
+
expect(out.result.messages.map(m => m.messageId)).toContain('msg_0010');
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test('byTool lists tool calls', async () => {
|
|
93
|
+
const out = await tool.execute(
|
|
94
|
+
{ action: 'reminisce', mode: 'byTool' },
|
|
95
|
+
context
|
|
96
|
+
);
|
|
97
|
+
expect(out.success).toBe(true);
|
|
98
|
+
expect(out.result.toolCalls.length).toBe(1);
|
|
99
|
+
expect(out.result.toolCalls[0].toolId).toBe('terminal');
|
|
100
|
+
expect(out.result.toolCalls[0].messageId).toBe('msg_0007');
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test('read returns the whole message when no window is specified', async () => {
|
|
104
|
+
const out = await tool.execute(
|
|
105
|
+
{ action: 'reminisce', mode: 'read', messageId: 'msg_0005' },
|
|
106
|
+
context
|
|
107
|
+
);
|
|
108
|
+
expect(out.success).toBe(true);
|
|
109
|
+
expect(out.result.targetFound).toBe(true);
|
|
110
|
+
expect(out.result.message.messageId).toBe('msg_0005');
|
|
111
|
+
expect(out.result.message.contentWindow.kind).toBe('full');
|
|
112
|
+
expect(out.result.message.content).toContain('special keyword');
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test('read with lineFrom/lineTo returns a line slice', async () => {
|
|
116
|
+
// Replace msg_0005 with a multi-line message so the slice is meaningful.
|
|
117
|
+
const bigContent = Array.from({ length: 50 }, (_, i) => `line ${i + 1}`).join('\n');
|
|
118
|
+
const localMessages = makeMessages(20);
|
|
119
|
+
localMessages[5] = { ...localMessages[5], content: bigContent };
|
|
120
|
+
const local = makeSetup({ messages: localMessages });
|
|
121
|
+
|
|
122
|
+
const out = await local.tool.execute(
|
|
123
|
+
{ action: 'reminisce', mode: 'read', messageId: 'msg_0005',
|
|
124
|
+
lineFrom: 10, lineTo: 14 },
|
|
125
|
+
local.context
|
|
126
|
+
);
|
|
127
|
+
expect(out.result.message.contentWindow.kind).toBe('lines');
|
|
128
|
+
expect(out.result.message.contentWindow.totalLines).toBe(50);
|
|
129
|
+
const lines = out.result.message.content.split('\n');
|
|
130
|
+
expect(lines).toEqual(['line 10', 'line 11', 'line 12', 'line 13', 'line 14']);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('read with contentFrom/contentTo returns a char slice', async () => {
|
|
134
|
+
const localMessages = makeMessages(20);
|
|
135
|
+
localMessages[5] = { ...localMessages[5], content: 'abcdefghijklmnopqrstuvwxyz' };
|
|
136
|
+
const local = makeSetup({ messages: localMessages });
|
|
137
|
+
|
|
138
|
+
const out = await local.tool.execute(
|
|
139
|
+
{ action: 'reminisce', mode: 'read', messageId: 'msg_0005',
|
|
140
|
+
contentFrom: 5, contentTo: 10 },
|
|
141
|
+
local.context
|
|
142
|
+
);
|
|
143
|
+
expect(out.result.message.contentWindow.kind).toBe('chars');
|
|
144
|
+
expect(out.result.message.content).toBe('fghij');
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test('read with unknown messageId returns targetFound=false (not a crash)', async () => {
|
|
148
|
+
const out = await tool.execute(
|
|
149
|
+
{ action: 'reminisce', mode: 'read', messageId: 'msg_hallucinated' },
|
|
150
|
+
context
|
|
151
|
+
);
|
|
152
|
+
expect(out.success).toBe(true);
|
|
153
|
+
expect(out.result.targetFound).toBe(false);
|
|
154
|
+
expect(out.result.message).toBeNull();
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
describe('memoryTool reminisce — error paths', () => {
|
|
159
|
+
test('invalid mode returns a clean error', async () => {
|
|
160
|
+
const { tool, context } = makeSetup();
|
|
161
|
+
const out = await tool.execute({ action: 'reminisce', mode: 'bogus' }, context);
|
|
162
|
+
expect(out.success).toBe(false);
|
|
163
|
+
expect(out.error).toMatch(/mode must be one of/);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('missing mode returns a clean error (not a crash)', async () => {
|
|
167
|
+
const { tool, context } = makeSetup();
|
|
168
|
+
const out = await tool.execute({ action: 'reminisce' }, context);
|
|
169
|
+
expect(out.success).toBe(false);
|
|
170
|
+
expect(out.error).toMatch(/mode must be one of/);
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
test('missing agentPool in context returns a clean error', async () => {
|
|
174
|
+
const { tool } = makeSetup();
|
|
175
|
+
const out = await tool.execute(
|
|
176
|
+
{ action: 'reminisce', mode: 'overview' },
|
|
177
|
+
{ agentId: 'agent-1' /* no agentPool */ }
|
|
178
|
+
);
|
|
179
|
+
expect(out.success).toBe(false);
|
|
180
|
+
expect(out.error).toMatch(/agentPool/);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
test('agent not found returns a clean error', async () => {
|
|
184
|
+
const { tool, context } = makeSetup({ agentExists: false });
|
|
185
|
+
const out = await tool.execute({ action: 'reminisce', mode: 'overview' }, context);
|
|
186
|
+
expect(out.success).toBe(false);
|
|
187
|
+
expect(out.error).toMatch(/not found/);
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
test('agent with no conversation archive returns success with empty flag', async () => {
|
|
191
|
+
const tool = new MemoryTool({}, createMockLogger());
|
|
192
|
+
const agentPool = {
|
|
193
|
+
getAgent: jest.fn().mockResolvedValue({ id: 'a', conversations: {} }),
|
|
194
|
+
};
|
|
195
|
+
const out = await tool.execute(
|
|
196
|
+
{ action: 'reminisce', mode: 'overview' },
|
|
197
|
+
{ agentId: 'a', agentPool }
|
|
198
|
+
);
|
|
199
|
+
expect(out.success).toBe(true);
|
|
200
|
+
expect(out.result.empty).toBe(true);
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
describe('memoryTool reminisce — archive durability through compaction', () => {
|
|
205
|
+
/*
|
|
206
|
+
* Contract test: even after compaction writes to conversations[model],
|
|
207
|
+
* reminisce must still serve the pre-compaction messages from
|
|
208
|
+
* conversations.full. This simulates the durability invariant that the
|
|
209
|
+
* whole feature rests on.
|
|
210
|
+
*/
|
|
211
|
+
test('reads conversations.full even when per-model compacted views exist', async () => {
|
|
212
|
+
const fullMessages = makeMessages(10);
|
|
213
|
+
const compactedMessages = [
|
|
214
|
+
{ id: 'compacted_1', role: 'system', content: '[summary of 10 messages]',
|
|
215
|
+
createdAt: new Date().toISOString(), tokenUsage: { totalTokens: 200 } },
|
|
216
|
+
];
|
|
217
|
+
const agent = {
|
|
218
|
+
id: 'a',
|
|
219
|
+
conversations: {
|
|
220
|
+
full: { messages: fullMessages },
|
|
221
|
+
'gpt-5': { messages: compactedMessages }, // compacted view
|
|
222
|
+
'claude-opus': { messages: compactedMessages }, // another compacted view
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
const tool = new MemoryTool({}, createMockLogger());
|
|
226
|
+
const context = { agentId: 'a', agentPool: { getAgent: () => Promise.resolve(agent) } };
|
|
227
|
+
|
|
228
|
+
const out = await tool.execute({ action: 'reminisce', mode: 'overview' }, context);
|
|
229
|
+
expect(out.success).toBe(true);
|
|
230
|
+
// totalMessages reflects the FULL archive, not the compacted view.
|
|
231
|
+
expect(out.result.totalMessages).toBe(10);
|
|
232
|
+
// A messageId from the original archive must still resolve via around.
|
|
233
|
+
const aroundOut = await tool.execute(
|
|
234
|
+
{ action: 'reminisce', mode: 'around', messageId: 'msg_0005', before: 1, after: 1 },
|
|
235
|
+
context
|
|
236
|
+
);
|
|
237
|
+
expect(aroundOut.result.targetFound).toBe(true);
|
|
238
|
+
expect(aroundOut.result.messages.some(m => m.messageId === 'msg_0005')).toBe(true);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test('bookmark stability across simulated conversation growth', async () => {
|
|
242
|
+
// An agent bookmarks msg_0005 in turn 1. Conversation grows to 200
|
|
243
|
+
// messages over many turns. reminisce still resolves the bookmark.
|
|
244
|
+
const messages = makeMessages(20);
|
|
245
|
+
const bookmark = 'msg_0005';
|
|
246
|
+
const agent = { id: 'a', conversations: { full: { messages } } };
|
|
247
|
+
const tool = new MemoryTool({}, createMockLogger());
|
|
248
|
+
const context = { agentId: 'a', agentPool: { getAgent: () => Promise.resolve(agent) } };
|
|
249
|
+
|
|
250
|
+
// Simulate archive growth: append 180 more messages.
|
|
251
|
+
for (let i = 20; i < 200; i++) {
|
|
252
|
+
messages.push({
|
|
253
|
+
id: `msg_${String(i).padStart(4, '0')}`,
|
|
254
|
+
role: 'assistant',
|
|
255
|
+
content: `later message ${i}`,
|
|
256
|
+
createdAt: new Date(Date.UTC(2026, 0, 2, 0, 0, i)).toISOString(),
|
|
257
|
+
tokenUsage: { totalTokens: 10 },
|
|
258
|
+
toolExecutions: [],
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const out = await tool.execute(
|
|
263
|
+
{ action: 'reminisce', mode: 'around', messageId: bookmark, before: 2, after: 2 },
|
|
264
|
+
context
|
|
265
|
+
);
|
|
266
|
+
expect(out.result.targetFound).toBe(true);
|
|
267
|
+
expect(out.result.center).toBe(bookmark);
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
describe('memoryTool — reminisce registered as a valid action', () => {
|
|
272
|
+
test('getSupportedActions includes reminisce', () => {
|
|
273
|
+
const tool = new MemoryTool({}, createMockLogger());
|
|
274
|
+
expect(tool.getSupportedActions()).toContain('reminisce');
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
test('customValidateParameters accepts action=reminisce without error', () => {
|
|
278
|
+
const tool = new MemoryTool({}, createMockLogger());
|
|
279
|
+
const result = tool.customValidateParameters({ action: 'reminisce' });
|
|
280
|
+
expect(result.valid).toBe(true);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
test('getParameterSchema enum includes reminisce', () => {
|
|
284
|
+
const tool = new MemoryTool({}, createMockLogger());
|
|
285
|
+
const schema = tool.getParameterSchema();
|
|
286
|
+
expect(schema.properties.action.enum).toContain('reminisce');
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
test('getParameterSchema advertises every reminisce-specific parameter', () => {
|
|
290
|
+
// Without this, the model invoking memory via OpenAI function calling
|
|
291
|
+
// can't know what fields are legal for action=reminisce and will either
|
|
292
|
+
// omit them or hallucinate wrong names. Locked tight.
|
|
293
|
+
const schema = new MemoryTool({}, createMockLogger()).getParameterSchema();
|
|
294
|
+
const props = schema.properties;
|
|
295
|
+
const required = [
|
|
296
|
+
'mode', 'messageId',
|
|
297
|
+
'from', 'to', 'offset', 'limit', 'maxResults', 'role', 'cursor', 'toolId',
|
|
298
|
+
'before', 'after',
|
|
299
|
+
'lineFrom', 'lineTo', 'contentFrom', 'contentTo',
|
|
300
|
+
'detail',
|
|
301
|
+
];
|
|
302
|
+
for (const field of required) {
|
|
303
|
+
expect(props[field]).toBeDefined();
|
|
304
|
+
expect(typeof props[field].description).toBe('string');
|
|
305
|
+
}
|
|
306
|
+
// mode enum must carry all six sub-modes
|
|
307
|
+
expect(props.mode.enum).toEqual(
|
|
308
|
+
expect.arrayContaining(['overview', 'range', 'search', 'around', 'byTool', 'read'])
|
|
309
|
+
);
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
test('getDescription teaches the agent about reminisce + pointer stability', () => {
|
|
313
|
+
const desc = new MemoryTool({}, createMockLogger()).getDescription();
|
|
314
|
+
expect(desc).toMatch(/REMINISCE/i);
|
|
315
|
+
expect(desc).toMatch(/messageId/);
|
|
316
|
+
// All six sub-modes should be present by name.
|
|
317
|
+
expect(desc).toMatch(/overview/);
|
|
318
|
+
expect(desc).toMatch(/search/);
|
|
319
|
+
expect(desc).toMatch(/around/);
|
|
320
|
+
expect(desc).toMatch(/byTool/);
|
|
321
|
+
expect(desc).toMatch(/\bread\b/);
|
|
322
|
+
// Documents that search scope excludes tool results.
|
|
323
|
+
expect(desc).toMatch(/does NOT match tool results|tool-call arguments/i);
|
|
324
|
+
// Around explicitly documents its unit = messages.
|
|
325
|
+
expect(desc).toMatch(/count MESSAGES/);
|
|
326
|
+
// Read documents sub-message granularity — lines AND chars.
|
|
327
|
+
expect(desc).toMatch(/lineFrom/);
|
|
328
|
+
expect(desc).toMatch(/contentFrom/);
|
|
329
|
+
});
|
|
330
|
+
});
|
|
@@ -56,9 +56,9 @@ describe('MemoryTool', () => {
|
|
|
56
56
|
expect(desc).toContain('stats');
|
|
57
57
|
});
|
|
58
58
|
|
|
59
|
-
test('getSupportedActions returns all
|
|
59
|
+
test('getSupportedActions returns all 8 actions', () => {
|
|
60
60
|
expect(tool.getSupportedActions()).toEqual(
|
|
61
|
-
['add', 'update', 'delete', 'list', 'read', 'search', 'stats']
|
|
61
|
+
['add', 'update', 'delete', 'list', 'read', 'search', 'stats', 'reminisce']
|
|
62
62
|
);
|
|
63
63
|
});
|
|
64
64
|
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract test for the `memory` function's OpenAI schema — specifically
|
|
3
|
+
* that it advertises the `reminisce` action and its sub-mode params.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists: the OpenAI function schema is what the model sees on
|
|
6
|
+
* the Chat Completions path. If `reminisce` is missing from the enum or
|
|
7
|
+
* the reminisce-specific params are absent, the model can't invoke it
|
|
8
|
+
* correctly regardless of what memoryTool's own validators say. This
|
|
9
|
+
* tripwire catches that class of drift without booting the full CLI.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { describe, test, expect } from '@jest/globals';
|
|
13
|
+
import { OPENAI_FUNCTION_SCHEMAS } from '../openaiFunctionSchemas.js';
|
|
14
|
+
|
|
15
|
+
const memory = OPENAI_FUNCTION_SCHEMAS.find(s => s.name === 'memory');
|
|
16
|
+
|
|
17
|
+
describe('OPENAI_FUNCTION_SCHEMAS — memory function', () => {
|
|
18
|
+
test('memory function schema exists', () => {
|
|
19
|
+
expect(memory).toBeDefined();
|
|
20
|
+
expect(memory.type).toBe('function');
|
|
21
|
+
expect(memory.parameters?.type).toBe('object');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('action enum includes reminisce', () => {
|
|
25
|
+
const actions = memory.parameters.properties.action.enum;
|
|
26
|
+
expect(actions).toContain('reminisce');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test('action enum covers every sanctioned action (incl. stats)', () => {
|
|
30
|
+
const actions = memory.parameters.properties.action.enum;
|
|
31
|
+
for (const a of ['add', 'update', 'delete', 'read', 'list', 'search', 'stats', 'reminisce']) {
|
|
32
|
+
expect(actions).toContain(a);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('mode field is present and enumerates the six sub-modes', () => {
|
|
37
|
+
const mode = memory.parameters.properties.mode;
|
|
38
|
+
expect(mode).toBeDefined();
|
|
39
|
+
expect(mode.enum).toEqual(
|
|
40
|
+
expect.arrayContaining(['overview', 'range', 'search', 'around', 'byTool', 'read'])
|
|
41
|
+
);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test('every reminisce-specific parameter is documented in the schema', () => {
|
|
45
|
+
// The model can only pass what the schema advertises. If one of these
|
|
46
|
+
// is missing, the feature silently loses that capability on the Chat
|
|
47
|
+
// Completions path.
|
|
48
|
+
const required = [
|
|
49
|
+
'mode',
|
|
50
|
+
'messageId',
|
|
51
|
+
'from', 'to',
|
|
52
|
+
'offset', 'limit', 'maxResults',
|
|
53
|
+
'role', 'cursor', 'toolId',
|
|
54
|
+
'before', 'after',
|
|
55
|
+
'lineFrom', 'lineTo', 'contentFrom', 'contentTo',
|
|
56
|
+
'detail',
|
|
57
|
+
];
|
|
58
|
+
for (const field of required) {
|
|
59
|
+
const prop = memory.parameters.properties[field];
|
|
60
|
+
expect(prop).toBeDefined();
|
|
61
|
+
expect(typeof prop.description).toBe('string');
|
|
62
|
+
expect(prop.description.length).toBeGreaterThan(0);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test('around before/after descriptions say MESSAGES (not chars/lines)', () => {
|
|
67
|
+
const before = memory.parameters.properties.before.description;
|
|
68
|
+
const after = memory.parameters.properties.after.description;
|
|
69
|
+
expect(before).toMatch(/MESSAGES/);
|
|
70
|
+
expect(after).toMatch(/MESSAGES/);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('read line/char params describe their index convention and cap', () => {
|
|
74
|
+
const p = memory.parameters.properties;
|
|
75
|
+
expect(p.lineFrom.description).toMatch(/1-indexed/);
|
|
76
|
+
expect(p.lineTo.description).toMatch(/500 lines/);
|
|
77
|
+
expect(p.contentFrom.description).toMatch(/0-indexed/);
|
|
78
|
+
expect(p.contentTo.description).toMatch(/16000 chars|16 000 chars/);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('top-level description mentions reminisce so the model knows the tool does both', () => {
|
|
82
|
+
expect(memory.description.toLowerCase()).toMatch(/reminisce|archive/);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract test for the TaskManager tool's lifecycle guidance surface.
|
|
3
|
+
*
|
|
4
|
+
* The agent follows the workflow described in the tool's `getDescription()`
|
|
5
|
+
* output verbatim (it's part of the system prompt at every turn). If that
|
|
6
|
+
* text accidentally regresses — a "simplification" PR that flattens the
|
|
7
|
+
* four phases back into the old "list → work → complete" stub — the
|
|
8
|
+
* agent immediately reverts to creating tasks one-at-a-time at the start,
|
|
9
|
+
* burning tool calls and cluttering the transcript.
|
|
10
|
+
*
|
|
11
|
+
* These tests lock the lifecycle keywords into place. They're a tripwire,
|
|
12
|
+
* not a style guide: the exact wording can evolve, but all four phases
|
|
13
|
+
* must remain named, `sync` must be positioned as the first-call tool,
|
|
14
|
+
* and the `in_progress` → `completed` per-step pattern must be present.
|
|
15
|
+
*
|
|
16
|
+
* If someone legitimately reworks the description (different phase names,
|
|
17
|
+
* different order, etc.), they update this test AND confirm the agent
|
|
18
|
+
* instruction in agentScheduler.js is in lockstep.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { describe, test, expect } from '@jest/globals';
|
|
22
|
+
import TaskManagerTool from '../taskManagerTool.js';
|
|
23
|
+
|
|
24
|
+
describe('TaskManagerTool.getDescription — lifecycle guidance contract', () => {
|
|
25
|
+
const desc = new TaskManagerTool({}).getDescription();
|
|
26
|
+
// Case-insensitive match for resilience against rephrasing.
|
|
27
|
+
const has = (needle) => expect(desc).toMatch(new RegExp(needle, 'i'));
|
|
28
|
+
|
|
29
|
+
test('names the four lifecycle phases', () => {
|
|
30
|
+
has('Phase 1 — Plan');
|
|
31
|
+
has('Phase 2 — Execute');
|
|
32
|
+
has('Phase 3 — Refine');
|
|
33
|
+
has('Phase 4 — Finish');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('Phase 1 tells the agent to sync the whole plan in ONE call', () => {
|
|
37
|
+
// Plan phase must mention sync + "one call" concept + discourage per-task create at start.
|
|
38
|
+
has('sync');
|
|
39
|
+
has('ONE call');
|
|
40
|
+
// The exact wording that discourages per-task create is free to evolve;
|
|
41
|
+
// what matters is that "one-by-one" (or equivalent) and the word create
|
|
42
|
+
// both appear in the Plan phase area.
|
|
43
|
+
has('one-by-one|one at a time');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('Phase 2 describes the in_progress → work → completed per-step pattern', () => {
|
|
47
|
+
has('in_progress');
|
|
48
|
+
has('completed');
|
|
49
|
+
has('one at a time|one task at a time|per step');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test('Phase 3 covers mid-flight refinement (both single-task create and resync)', () => {
|
|
53
|
+
has('create');
|
|
54
|
+
has('sync');
|
|
55
|
+
// warns against per-turn sync spam
|
|
56
|
+
has("Don't `sync` every turn");
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('Phase 4 points at jobdone when everything is completed', () => {
|
|
60
|
+
has('jobdone');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('preserves the loop-forever warning (operational guard)', () => {
|
|
64
|
+
has('MANDATORY');
|
|
65
|
+
has('loop forever');
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('preserves memory-integration guidance (unrelated feature must survive)', () => {
|
|
69
|
+
has('memory:');
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -64,6 +64,16 @@ describe('VisualEditorTool._broadcastOpenEditor', () => {
|
|
|
64
64
|
}
|
|
65
65
|
});
|
|
66
66
|
|
|
67
|
+
// ── Session targeting: always null so the webServer fan-out path runs ──
|
|
68
|
+
//
|
|
69
|
+
// The visual-editor open-editor / set-app-url broadcast is a UI-wide
|
|
70
|
+
// notification — we want every attached browser to hear it. `context.sessionId`
|
|
71
|
+
// here is the agent's scheduler session (e.g. 'scheduler-session'), which
|
|
72
|
+
// doesn't match any UI WebSocket connection. Passing `null` explicitly
|
|
73
|
+
// makes broadcastToSession take its "no session match, deliver to all
|
|
74
|
+
// connections" path — cleaner than accidentally landing there via a
|
|
75
|
+
// mismatched session string.
|
|
76
|
+
|
|
67
77
|
// ── Path 1: through agentPool ────────────────────────────────────
|
|
68
78
|
test('uses agentPool.messageProcessor.orchestrator.webServer when available', () => {
|
|
69
79
|
const tool = makeTool();
|
|
@@ -82,7 +92,7 @@ describe('VisualEditorTool._broadcastOpenEditor', () => {
|
|
|
82
92
|
tool._broadcastOpenEditor(context, sampleData);
|
|
83
93
|
|
|
84
94
|
expect(broadcastToSession).toHaveBeenCalledTimes(1);
|
|
85
|
-
expect(broadcastToSession).toHaveBeenCalledWith(
|
|
95
|
+
expect(broadcastToSession).toHaveBeenCalledWith(null, {
|
|
86
96
|
type: 'visual_editor_open',
|
|
87
97
|
data: {
|
|
88
98
|
agentId: 'agent-1',
|
|
@@ -92,10 +102,15 @@ describe('VisualEditorTool._broadcastOpenEditor', () => {
|
|
|
92
102
|
});
|
|
93
103
|
});
|
|
94
104
|
|
|
95
|
-
test('
|
|
105
|
+
test('ignores context.sessionId — always broadcasts to all connections', () => {
|
|
106
|
+
// Regression guard: previously `sessionId || 'web-session'` was passed
|
|
107
|
+
// as the target. Either path effectively fell through to "all clients"
|
|
108
|
+
// via the webServer's fallback, but the intent wasn't explicit. Now
|
|
109
|
+
// we pass `null` no matter what.
|
|
96
110
|
const tool = makeTool();
|
|
97
111
|
const broadcastToSession = jest.fn();
|
|
98
112
|
const context = {
|
|
113
|
+
sessionId: 'scheduler-session', // the scheduler's own session
|
|
99
114
|
agentPool: {
|
|
100
115
|
messageProcessor: {
|
|
101
116
|
orchestrator: { webServer: { broadcastToSession } }
|
|
@@ -104,7 +119,8 @@ describe('VisualEditorTool._broadcastOpenEditor', () => {
|
|
|
104
119
|
};
|
|
105
120
|
|
|
106
121
|
tool._broadcastOpenEditor(context, sampleData);
|
|
107
|
-
|
|
122
|
+
const [targetSessionId] = broadcastToSession.mock.calls[0];
|
|
123
|
+
expect(targetSessionId).toBeNull();
|
|
108
124
|
});
|
|
109
125
|
|
|
110
126
|
// ── Path 2: direct orchestrator ──────────────────────────────────
|
|
@@ -117,7 +133,7 @@ describe('VisualEditorTool._broadcastOpenEditor', () => {
|
|
|
117
133
|
};
|
|
118
134
|
|
|
119
135
|
tool._broadcastOpenEditor(context, sampleData);
|
|
120
|
-
expect(broadcastToSession).toHaveBeenCalledWith(
|
|
136
|
+
expect(broadcastToSession).toHaveBeenCalledWith(null, expect.objectContaining({
|
|
121
137
|
type: 'visual_editor_open'
|
|
122
138
|
}));
|
|
123
139
|
});
|
|
@@ -150,19 +166,19 @@ describe('VisualEditorTool._broadcastOpenEditor', () => {
|
|
|
150
166
|
const context = { sessionId: 'session-D' };
|
|
151
167
|
tool._broadcastOpenEditor(context, sampleData);
|
|
152
168
|
|
|
153
|
-
expect(broadcastToSession).toHaveBeenCalledWith(
|
|
169
|
+
expect(broadcastToSession).toHaveBeenCalledWith(null, expect.objectContaining({
|
|
154
170
|
type: 'visual_editor_open',
|
|
155
171
|
data: expect.objectContaining({ agentId: 'agent-1' })
|
|
156
172
|
}));
|
|
157
173
|
});
|
|
158
174
|
|
|
159
|
-
test('global fallback also
|
|
175
|
+
test('global fallback also uses null sessionId (UI-wide broadcast)', () => {
|
|
160
176
|
const tool = makeTool();
|
|
161
177
|
const broadcastToSession = jest.fn();
|
|
162
178
|
global.loxiaWebServer = { broadcastToSession };
|
|
163
179
|
|
|
164
180
|
tool._broadcastOpenEditor({}, sampleData);
|
|
165
|
-
expect(broadcastToSession).toHaveBeenCalledWith(
|
|
181
|
+
expect(broadcastToSession).toHaveBeenCalledWith(null, expect.any(Object));
|
|
166
182
|
});
|
|
167
183
|
|
|
168
184
|
// ── No webServer at all → warn but don't throw ───────────────────
|
|
@@ -170,10 +186,24 @@ describe('VisualEditorTool._broadcastOpenEditor', () => {
|
|
|
170
186
|
const tool = makeTool();
|
|
171
187
|
const context = {}; // Nothing at all
|
|
172
188
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
);
|
|
189
|
+
// Warn is emitted via console.warn (not this.logger) so the message
|
|
190
|
+
// surfaces even when the tool was constructed without a logger
|
|
191
|
+
// (historic registry behavior).
|
|
192
|
+
const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
|
|
193
|
+
try {
|
|
194
|
+
expect(() => tool._broadcastOpenEditor(context, sampleData)).not.toThrow();
|
|
195
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith(
|
|
196
|
+
expect.stringContaining('Could not broadcast open-editor'),
|
|
197
|
+
expect.objectContaining({
|
|
198
|
+
hasContext: true,
|
|
199
|
+
hasAgentPool: false,
|
|
200
|
+
hasOrchestrator: false,
|
|
201
|
+
hasGlobal: false,
|
|
202
|
+
})
|
|
203
|
+
);
|
|
204
|
+
} finally {
|
|
205
|
+
consoleWarnSpy.mockRestore();
|
|
206
|
+
}
|
|
177
207
|
});
|
|
178
208
|
|
|
179
209
|
test('handles partial agentPool object gracefully (no messageProcessor)', () => {
|
package/src/tools/baseTool.js
CHANGED
|
@@ -508,7 +508,20 @@ class ToolsRegistry {
|
|
|
508
508
|
async registerTool(toolClass) {
|
|
509
509
|
try {
|
|
510
510
|
const tool = new toolClass();
|
|
511
|
-
|
|
511
|
+
|
|
512
|
+
// Propagate the registry's logger to the tool so the tool's own
|
|
513
|
+
// diagnostic output (`this.logger?.info(...)`, `this.logger?.warn(...)`,
|
|
514
|
+
// etc.) actually reaches the operator's console. Tools extending
|
|
515
|
+
// BaseTool default `this.logger = null` unless the class explicitly
|
|
516
|
+
// passes one to `super()` — and registration never supplied one,
|
|
517
|
+
// which silently swallowed every `this.logger?.…` call in every tool.
|
|
518
|
+
// This made debugging things like "why doesn't the visual-editor
|
|
519
|
+
// tool ever log [VisualEditorTool] lines?" impossible because the
|
|
520
|
+
// logs literally weren't being emitted.
|
|
521
|
+
if (this.logger && !tool.logger) {
|
|
522
|
+
tool.logger = this.logger;
|
|
523
|
+
}
|
|
524
|
+
|
|
512
525
|
if (!(tool instanceof BaseTool)) {
|
|
513
526
|
throw new Error(`Tool ${toolClass.name} must extend BaseTool`);
|
|
514
527
|
}
|