onbuzz 4.0.1 → 4.0.2
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/src/core/__tests__/messageProcessor.sourceHeader.test.js +195 -0
- package/src/core/messageProcessor.js +17 -0
- package/src/core/orchestrator.js +6 -2
- package/src/interfaces/webServer.js +26 -0
- package/src/services/__tests__/messageSource.channelFilter.coherence.test.js +101 -0
- package/src/services/__tests__/messageSource.test.js +376 -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__/visualEditorTool.broadcast.test.js +41 -11
- package/src/tools/baseTool.js +14 -1
- package/src/tools/visualEditorTool.js +86 -21
- package/src/utilities/tagParser.js +22 -3
- package/web-ui/build/index.html +2 -2
- package/web-ui/build/static/1c-alYWzgyM.js +1 -0
- package/web-ui/build/static/abap-MNX4MGQu.js +1 -0
- package/web-ui/build/static/abnf-PB6umZUe.js +1 -0
- package/web-ui/build/static/abnf-lLelqyRq.js +1 -0
- package/web-ui/build/static/accesslog-ECfnNf6M.js +1 -0
- package/web-ui/build/static/actionscript-48Mv-P2G.js +1 -0
- package/web-ui/build/static/actionscript-CmFMkWAF.js +1 -0
- package/web-ui/build/static/ada-D0nj2830.js +1 -0
- package/web-ui/build/static/ada-DC68kRrL.js +1 -0
- package/web-ui/build/static/agda-CjnuTEYG.js +1 -0
- package/web-ui/build/static/al-DICLGfy9.js +1 -0
- package/web-ui/build/static/angelscript-D7H0wknj.js +1 -0
- package/web-ui/build/static/antlr4-C_KsZIwI.js +1 -0
- package/web-ui/build/static/apache-Cfj2o0TW.js +1 -0
- package/web-ui/build/static/apacheconf-D5jQXqP_.js +1 -0
- package/web-ui/build/static/apex-G2rOb7vm.js +1 -0
- package/web-ui/build/static/apl-CE_aKOLQ.js +1 -0
- package/web-ui/build/static/applescript-BffXi9IZ.js +1 -0
- package/web-ui/build/static/applescript-CshVa-pZ.js +1 -0
- package/web-ui/build/static/aql-F9xr2xIN.js +1 -0
- package/web-ui/build/static/arcade-29Re4fPy.js +1 -0
- package/web-ui/build/static/arduino-BGsZiYrf.js +1 -0
- package/web-ui/build/static/arduino-HiqNS--s.js +1 -0
- package/web-ui/build/static/arff-jPcJv_eJ.js +1 -0
- package/web-ui/build/static/armasm-DDockn0p.js +1 -0
- package/web-ui/build/static/asciidoc-BW3nh79M.js +1 -0
- package/web-ui/build/static/asciidoc-Dxit6U7t.js +1 -0
- package/web-ui/build/static/asm6502-eTpxnsNy.js +1 -0
- package/web-ui/build/static/asmatmel-BHeErmNQ.js +1 -0
- package/web-ui/build/static/aspectj-CX6x53Aw.js +1 -0
- package/web-ui/build/static/aspnet-BFDGvlyU.js +1 -0
- package/web-ui/build/static/autohotkey-CRNZnW-g.js +1 -0
- package/web-ui/build/static/autohotkey-DhdXEUbC.js +1 -0
- package/web-ui/build/static/autoit-BrCU_LoC.js +1 -0
- package/web-ui/build/static/autoit-CNY5ZLoO.js +1 -0
- package/web-ui/build/static/avisynth-CvpX-vR-.js +1 -0
- package/web-ui/build/static/avrasm-Ch0VgbnW.js +1 -0
- package/web-ui/build/static/avro-idl-DVNgaXeA.js +1 -0
- package/web-ui/build/static/awk-DBbMErBm.js +1 -0
- package/web-ui/build/static/axapta-BZMCBJyd.js +1 -0
- package/web-ui/build/static/bash-B7W9_l_H.js +1 -0
- package/web-ui/build/static/bash-nUxPXV93.js +1 -0
- package/web-ui/build/static/basic-CncKWTdb.js +1 -0
- package/web-ui/build/static/basic-t050Yfrj.js +1 -0
- package/web-ui/build/static/batch-DzppEDD6.js +1 -0
- package/web-ui/build/static/bbcode-Cxa6xUCC.js +1 -0
- package/web-ui/build/static/bicep-CNfRbyLD.js +1 -0
- package/web-ui/build/static/birb-BQn3C4qH.js +1 -0
- package/web-ui/build/static/bison-CG1ITN82.js +1 -0
- package/web-ui/build/static/bnf-BH6EqVfg.js +1 -0
- package/web-ui/build/static/bnf-DOOI4ziA.js +1 -0
- package/web-ui/build/static/brainfuck-CuvanNT4.js +1 -0
- package/web-ui/build/static/brainfuck-DEN53aXA.js +1 -0
- package/web-ui/build/static/brightscript-C_qPLhPu.js +1 -0
- package/web-ui/build/static/bro-DE4fdxVn.js +1 -0
- package/web-ui/build/static/bsl-DhilRMN1.js +1 -0
- package/web-ui/build/static/c-DJMkv9RR.js +1 -0
- package/web-ui/build/static/c-HH0eyrSO.js +1 -0
- package/web-ui/build/static/c-like-CievvBLp.js +1 -0
- package/web-ui/build/static/cal-BBz3_HT0.js +1 -0
- package/web-ui/build/static/capnproto-BOgD9Wf3.js +1 -0
- package/web-ui/build/static/ceylon-MWYZBIMt.js +1 -0
- package/web-ui/build/static/cfscript-BiVuxt5i.js +1 -0
- package/web-ui/build/static/chaiscript-CPx7l6f-.js +1 -0
- package/web-ui/build/static/cil-3DGkdNym.js +1 -0
- package/web-ui/build/static/clean-Bxi-hwbJ.js +1 -0
- package/web-ui/build/static/clojure-BBMLjTS9.js +1 -0
- package/web-ui/build/static/clojure-RPrwnP3x.js +1 -0
- package/web-ui/build/static/clojure-repl-BE9VGIhP.js +1 -0
- package/web-ui/build/static/cmake-BMeSZbTq.js +1 -0
- package/web-ui/build/static/cmake-CLVNptnB.js +1 -0
- package/web-ui/build/static/cobol-f-w6Mj2H.js +1 -0
- package/web-ui/build/static/coffeescript-CESbl4tN.js +1 -0
- package/web-ui/build/static/coffeescript-DmOzsrDS.js +1 -0
- package/web-ui/build/static/concurnas-DxQ9U571.js +1 -0
- package/web-ui/build/static/coq-4Wu7fuDB.js +1 -0
- package/web-ui/build/static/coq-BERQ-1c4.js +1 -0
- package/web-ui/build/static/cos-SsvxAn6O.js +1 -0
- package/web-ui/build/static/cpp-BkY4KhJS.js +1 -0
- package/web-ui/build/static/cpp-CGkeKbAD.js +1 -0
- package/web-ui/build/static/crmsh-BL32bNK1.js +1 -0
- package/web-ui/build/static/crystal-C4e562-w.js +1 -0
- package/web-ui/build/static/crystal-Hu8WDm2E.js +1 -0
- package/web-ui/build/static/csharp-DvnJhHBw.js +1 -0
- package/web-ui/build/static/csharp-DxFH-E_J.js +1 -0
- package/web-ui/build/static/cshtml-BkimeLw1.js +1 -0
- package/web-ui/build/static/csp-CDNmbLWI.js +1 -0
- package/web-ui/build/static/csp-DXmobqdr.js +1 -0
- package/web-ui/build/static/css-VRUoX-cu.js +1 -0
- package/web-ui/build/static/css-extras-Dcz-5Gz_.js +1 -0
- package/web-ui/build/static/csv-Cy-vj0dX.js +1 -0
- package/web-ui/build/static/cypher-CyiGMZEd.js +1 -0
- package/web-ui/build/static/d-50yhKzqs.js +1 -0
- package/web-ui/build/static/d-CtQcHe9N.js +1 -0
- package/web-ui/build/static/dart-Dj05IVm2.js +1 -0
- package/web-ui/build/static/dart-kumEUEig.js +1 -0
- package/web-ui/build/static/dataweave-CyaTPvHl.js +1 -0
- package/web-ui/build/static/dax-BYZEUwTe.js +1 -0
- package/web-ui/build/static/delphi-Hrkf0_Zm.js +1 -0
- package/web-ui/build/static/dhall-ZfXZcVvQ.js +1 -0
- package/web-ui/build/static/diff-B681Qorw.js +1 -0
- package/web-ui/build/static/diff-C85U1vU3.js +1 -0
- package/web-ui/build/static/django-BbqkMAd3.js +1 -0
- package/web-ui/build/static/django-ebEm7IW1.js +1 -0
- package/web-ui/build/static/dns-CIKOn0cx.js +1 -0
- package/web-ui/build/static/dns-zone-file-Cgfj303q.js +1 -0
- package/web-ui/build/static/docker-DezZesK-.js +1 -0
- package/web-ui/build/static/dockerfile-HOIJDSPT.js +1 -0
- package/web-ui/build/static/dos-Bv0IPgh2.js +1 -0
- package/web-ui/build/static/dot-BiJIuPYL.js +1 -0
- package/web-ui/build/static/dsconfig-DCPRv9km.js +1 -0
- package/web-ui/build/static/dts-CXMbX7gl.js +1 -0
- package/web-ui/build/static/dust-Mjmn5ftw.js +1 -0
- package/web-ui/build/static/ebnf-469W3R_o.js +1 -0
- package/web-ui/build/static/ebnf-Bs6Ftm9u.js +1 -0
- package/web-ui/build/static/editorconfig-C4dD8cK_.js +1 -0
- package/web-ui/build/static/eiffel-D78uHdvn.js +1 -0
- package/web-ui/build/static/ejs-CUydrtqr.js +1 -0
- package/web-ui/build/static/elixir-BIxlPrSO.js +1 -0
- package/web-ui/build/static/elixir-CLS7rDXm.js +1 -0
- package/web-ui/build/static/elm-CdXXWPN7.js +1 -0
- package/web-ui/build/static/elm-DT7wSSPo.js +1 -0
- package/web-ui/build/static/erb-8Xeo3WFF.js +1 -0
- package/web-ui/build/static/erb-DROzrB_O.js +1 -0
- package/web-ui/build/static/erlang-DbMlkDTN.js +1 -0
- package/web-ui/build/static/erlang-DoF730hs.js +1 -0
- package/web-ui/build/static/erlang-repl-B7enXvga.js +1 -0
- package/web-ui/build/static/etlua-CehWhSD3.js +1 -0
- package/web-ui/build/static/excel-DHmOIegb.js +1 -0
- package/web-ui/build/static/excel-formula-DdeWF1_w.js +1 -0
- package/web-ui/build/static/factor-DBMZ3xT3.js +1 -0
- package/web-ui/build/static/false-AxZ_vqH0.js +1 -0
- package/web-ui/build/static/firestore-security-rules-BChGByFG.js +1 -0
- package/web-ui/build/static/fix-Cc-mOcI9.js +1 -0
- package/web-ui/build/static/flix-CBpO-hKP.js +1 -0
- package/web-ui/build/static/flow-FI5Ahl__.js +1 -0
- package/web-ui/build/static/fortran-C-jW3mxU.js +1 -0
- package/web-ui/build/static/fortran-zFBKdQax.js +1 -0
- package/web-ui/build/static/fsharp-Qu8P7ZfJ.js +1 -0
- package/web-ui/build/static/fsharp-gJT07_u6.js +1 -0
- package/web-ui/build/static/ftl-DcmD2jIl.js +1 -0
- package/web-ui/build/static/gams-BAhsVwik.js +1 -0
- package/web-ui/build/static/gap-DtjJMac5.js +1 -0
- package/web-ui/build/static/gauss-DLNJrvWH.js +1 -0
- package/web-ui/build/static/gcode-CbChIRHG.js +1 -0
- package/web-ui/build/static/gcode-lgPukEuS.js +1 -0
- package/web-ui/build/static/gdscript-ChdqKkXx.js +1 -0
- package/web-ui/build/static/gedcom-B3RAxWnR.js +1 -0
- package/web-ui/build/static/gherkin-BwKe4UMd.js +1 -0
- package/web-ui/build/static/gherkin-D1Q4xoY6.js +1 -0
- package/web-ui/build/static/git-CwA8K3Cg.js +1 -0
- package/web-ui/build/static/glsl-B_AtY5k6.js +1 -0
- package/web-ui/build/static/glsl-BgXyZa9x.js +1 -0
- package/web-ui/build/static/gml-O2ebFipB.js +1 -0
- package/web-ui/build/static/gml-xLusiP_j.js +1 -0
- package/web-ui/build/static/gn-T-uGKQLr.js +1 -0
- package/web-ui/build/static/go-B9spniuU.js +1 -0
- package/web-ui/build/static/go-DTwlbvuB.js +1 -0
- package/web-ui/build/static/go-module-DWCbGNjZ.js +1 -0
- package/web-ui/build/static/golo-Dp3ZC9Ry.js +1 -0
- package/web-ui/build/static/gradle-DxnYLs2J.js +1 -0
- package/web-ui/build/static/graphql-8stFQb3o.js +1 -0
- package/web-ui/build/static/groovy-Dbpy85Rs.js +1 -0
- package/web-ui/build/static/groovy-zimUQS73.js +1 -0
- package/web-ui/build/static/haml-B5gJAH_w.js +1 -0
- package/web-ui/build/static/haml-CXW3L0QY.js +1 -0
- package/web-ui/build/static/handlebars-BW92WxdN.js +1 -0
- package/web-ui/build/static/handlebars-DNysemQE.js +1 -0
- package/web-ui/build/static/haskell-BCP5M1h6.js +1 -0
- package/web-ui/build/static/haskell-BvSwVdJS.js +1 -0
- package/web-ui/build/static/haxe-BBVHLa1y.js +1 -0
- package/web-ui/build/static/haxe-DHK7XQB_.js +1 -0
- package/web-ui/build/static/hcl-CW0_ZJVS.js +1 -0
- package/web-ui/build/static/hlsl-DAH7B5KM.js +1 -0
- package/web-ui/build/static/hoon-CXY0i4p4.js +1 -0
- package/web-ui/build/static/hpkp-RL8DG2Fy.js +1 -0
- package/web-ui/build/static/hsp-DMAT8yb3.js +1 -0
- package/web-ui/build/static/hsts-SOCNnT21.js +1 -0
- package/web-ui/build/static/htmlbars-Bsrm5Qs8.js +1 -0
- package/web-ui/build/static/http-CYjIQwPj.js +1 -0
- package/web-ui/build/static/http-Hu8W9pON.js +1 -0
- package/web-ui/build/static/hy-CDbyyAxf.js +1 -0
- package/web-ui/build/static/ichigojam-CpPBjr7T.js +1 -0
- package/web-ui/build/static/icon-UI22EXz2.js +1 -0
- package/web-ui/build/static/icu-message-format-DAU066Wq.js +1 -0
- package/web-ui/build/static/idris-BuMEL37s.js +1 -0
- package/web-ui/build/static/iecst-CEqwKb_G.js +1 -0
- package/web-ui/build/static/ignore-CcCxTW7I.js +1 -0
- package/web-ui/build/static/index-C9Fa_kgD.css +1 -0
- package/web-ui/build/static/index-DexoK8pu.js +834 -0
- package/web-ui/build/static/index-DgeaGxMy.js +13 -0
- package/web-ui/build/static/index-RM91zq9j.js +1 -0
- package/web-ui/build/static/inform7-BdnukB1N.js +1 -0
- package/web-ui/build/static/inform7-Chkw-Df3.js +1 -0
- package/web-ui/build/static/ini--KUo0NJD.js +1 -0
- package/web-ui/build/static/ini-eo_rWFNv.js +1 -0
- package/web-ui/build/static/io-CWDVYxeI.js +1 -0
- package/web-ui/build/static/irpf90-CWFfmPjK.js +1 -0
- package/web-ui/build/static/isbl-BNkdk_dr.js +1 -0
- package/web-ui/build/static/j-Bg02P4UL.js +1 -0
- package/web-ui/build/static/java-BIDWcDHj.js +1 -0
- package/web-ui/build/static/java-D4bhM1sC.js +1 -0
- package/web-ui/build/static/javadoc-DxxfkSj4.js +1 -0
- package/web-ui/build/static/javadoclike-C3v2LXMS.js +1 -0
- package/web-ui/build/static/javascript-CSu6Pvd7.js +1 -0
- package/web-ui/build/static/javastacktrace-C50AqeNg.js +1 -0
- package/web-ui/build/static/jboss-cli-D4aAEeAL.js +1 -0
- package/web-ui/build/static/jexl-F8wyoUqO.js +1 -0
- package/web-ui/build/static/jolie-CdEDMXNQ.js +1 -0
- package/web-ui/build/static/jq-D95l3yQ0.js +1 -0
- package/web-ui/build/static/js-extras-55OlT8yf.js +1 -0
- package/web-ui/build/static/js-templates-4m7AkoaU.js +1 -0
- package/web-ui/build/static/jsdoc-BC6Ab1D0.js +1 -0
- package/web-ui/build/static/json-BHS2wD8g.js +1 -0
- package/web-ui/build/static/json-CPEJ9diH.js +1 -0
- package/web-ui/build/static/json5-EDQFzkuf.js +1 -0
- package/web-ui/build/static/jsonp-Cn_lpjaf.js +1 -0
- package/web-ui/build/static/jsstacktrace-pqdhqbKV.js +1 -0
- package/web-ui/build/static/jsx-Cop--oM_.js +1 -0
- package/web-ui/build/static/julia-B728rR99.js +1 -0
- package/web-ui/build/static/julia-Cq6vOawm.js +1 -0
- package/web-ui/build/static/julia-repl-BfOfjY_7.js +1 -0
- package/web-ui/build/static/keepalived-6ZwoBjFL.js +1 -0
- package/web-ui/build/static/keyman-DmOLCkH_.js +1 -0
- package/web-ui/build/static/kotlin-Bt385M6s.js +1 -0
- package/web-ui/build/static/kotlin-DsTE9me6.js +1 -0
- package/web-ui/build/static/kumir-DGpgb_2O.js +1 -0
- package/web-ui/build/static/kusto-Bb1U0J5m.js +1 -0
- package/web-ui/build/static/lasso-B4Rh4fa1.js +1 -0
- package/web-ui/build/static/latex-BlKwUVQO.js +1 -0
- package/web-ui/build/static/latex-D4EkT2Sx.js +1 -0
- package/web-ui/build/static/latte-8APUTRqH.js +1 -0
- package/web-ui/build/static/ldif-C1AH3r9Q.js +1 -0
- package/web-ui/build/static/leaf-DgHqqnCU.js +1 -0
- package/web-ui/build/static/less-BmLC9UX9.js +1 -0
- package/web-ui/build/static/less-D7wanA1u.js +1 -0
- package/web-ui/build/static/lilypond-CPpwdP3M.js +1 -0
- package/web-ui/build/static/liquid-C9g89s0-.js +1 -0
- package/web-ui/build/static/lisp-Ck1UA6zq.js +1 -0
- package/web-ui/build/static/lisp-tlR-SVFU.js +1 -0
- package/web-ui/build/static/livecodeserver-CfcVUDKK.js +1 -0
- package/web-ui/build/static/livescript-BPfp_PIe.js +1 -0
- package/web-ui/build/static/livescript-BVClM17E.js +1 -0
- package/web-ui/build/static/llvm-1CmNV1WZ.js +1 -0
- package/web-ui/build/static/llvm-DzaT3xf4.js +1 -0
- package/web-ui/build/static/log-x35sd55_.js +1 -0
- package/web-ui/build/static/lolcode-DfGz4a2C.js +1 -0
- package/web-ui/build/static/lsl-BJ13xzsn.js +1 -0
- package/web-ui/build/static/lua-DHTiU4iK.js +1 -0
- package/web-ui/build/static/lua-DttbbyOa.js +1 -0
- package/web-ui/build/static/magma-CM6u6Urv.js +1 -0
- package/web-ui/build/static/makefile--_TmwP5m.js +1 -0
- package/web-ui/build/static/makefile-DoB_xjMl.js +1 -0
- package/web-ui/build/static/markdown-BnyhT66e.js +1 -0
- package/web-ui/build/static/markdown-DvTREwgd.js +1 -0
- package/web-ui/build/static/markup-templating-yOvzgP3Z.js +1 -0
- package/web-ui/build/static/mathematica-BtY5tmVE.js +1 -0
- package/web-ui/build/static/matlab-DK98sDbn.js +1 -0
- package/web-ui/build/static/matlab-sBcSHRlC.js +1 -0
- package/web-ui/build/static/maxima-DMUOymL4.js +1 -0
- package/web-ui/build/static/maxscript-DaIC7eX6.js +1 -0
- package/web-ui/build/static/mel-BuONpgVc.js +1 -0
- package/web-ui/build/static/mel-Ckh0frDB.js +1 -0
- package/web-ui/build/static/mercury-CDFt4KAe.js +1 -0
- package/web-ui/build/static/mermaid-BqSA7Pr5.js +1 -0
- package/web-ui/build/static/mipsasm-Dj6mne2g.js +1 -0
- package/web-ui/build/static/mizar-CIQIQU-V.js +1 -0
- package/web-ui/build/static/mizar-CLTLHCGu.js +1 -0
- package/web-ui/build/static/mojolicious-DxjS7wDV.js +1 -0
- package/web-ui/build/static/mongodb-BAEipI91.js +1 -0
- package/web-ui/build/static/monkey-BBGnwc6s.js +1 -0
- package/web-ui/build/static/monkey-CvxTCuiS.js +1 -0
- package/web-ui/build/static/moonscript-CqDVk1K9.js +1 -0
- package/web-ui/build/static/moonscript-DJyxvZQc.js +1 -0
- package/web-ui/build/static/n1ql-AFWwB4Xn.js +1 -0
- package/web-ui/build/static/n1ql-VuVk9_MG.js +1 -0
- package/web-ui/build/static/n4js-BH6hpdgG.js +1 -0
- package/web-ui/build/static/nand2tetris-hdl-kVewh9V1.js +1 -0
- package/web-ui/build/static/naniscript-B_oQ4TiW.js +1 -0
- package/web-ui/build/static/nasm-B1_bJvcz.js +1 -0
- package/web-ui/build/static/neon-CbXfhQIm.js +1 -0
- package/web-ui/build/static/nevod-5Fv5cPWk.js +1 -0
- package/web-ui/build/static/nginx-BfifkBy-.js +1 -0
- package/web-ui/build/static/nginx-D9toNO0V.js +1 -0
- package/web-ui/build/static/nim-BFN2inD1.js +1 -0
- package/web-ui/build/static/nim-do_UhCvy.js +1 -0
- package/web-ui/build/static/nix-D6RLwwOZ.js +1 -0
- package/web-ui/build/static/nix-djoKaPeE.js +1 -0
- package/web-ui/build/static/node-repl-DDbffQSR.js +1 -0
- package/web-ui/build/static/nsis-BiO6b68i.js +1 -0
- package/web-ui/build/static/nsis-CHzeu7js.js +1 -0
- package/web-ui/build/static/objectivec-B7vXzYuT.js +1 -0
- package/web-ui/build/static/objectivec-BLn212SY.js +1 -0
- package/web-ui/build/static/ocaml-BvpR0Yig.js +1 -0
- package/web-ui/build/static/ocaml-DWZF00Ti.js +1 -0
- package/web-ui/build/static/opencl-C2K2Ctu5.js +1 -0
- package/web-ui/build/static/openqasm-Cbtnnn3m.js +1 -0
- package/web-ui/build/static/openscad-CEPC0-yW.js +1 -0
- package/web-ui/build/static/oxygene-KfcdTXi0.js +1 -0
- package/web-ui/build/static/oz-B-azwNjQ.js +1 -0
- package/web-ui/build/static/parigp-IWtYGphS.js +1 -0
- package/web-ui/build/static/parser-CUCdnJ6l.js +1 -0
- package/web-ui/build/static/parser3--a7jm4Uq.js +1 -0
- package/web-ui/build/static/pascal-BbezKExl.js +1 -0
- package/web-ui/build/static/pascaligo-Bd8IN8hq.js +1 -0
- package/web-ui/build/static/pcaxis-CfT0dd7B.js +1 -0
- package/web-ui/build/static/peoplecode-Dq29i2LW.js +1 -0
- package/web-ui/build/static/perl-BZLc5sMP.js +1 -0
- package/web-ui/build/static/perl-JJmLLJne.js +1 -0
- package/web-ui/build/static/pf-seOENy0q.js +1 -0
- package/web-ui/build/static/pgsql-BtkzXwKY.js +1 -0
- package/web-ui/build/static/php-8b9a1w98.js +1 -0
- package/web-ui/build/static/php-extras-5D00a1Fm.js +1 -0
- package/web-ui/build/static/php-imFv4WXA.js +1 -0
- package/web-ui/build/static/php-template-CI-0RdMu.js +1 -0
- package/web-ui/build/static/phpdoc-DdcPBfc-.js +1 -0
- package/web-ui/build/static/plaintext-Ca1WAvT6.js +1 -0
- package/web-ui/build/static/plsql-CZV7QAnN.js +1 -0
- package/web-ui/build/static/pony-DiomUkGt.js +1 -0
- package/web-ui/build/static/powerquery-CKXX2_O_.js +1 -0
- package/web-ui/build/static/powershell-2Ctsosr0.js +1 -0
- package/web-ui/build/static/powershell-DVPkgaB6.js +1 -0
- package/web-ui/build/static/processing-BAuxATGX.js +1 -0
- package/web-ui/build/static/processing-DBzyjRsf.js +1 -0
- package/web-ui/build/static/profile-Cq2gkRUb.js +1 -0
- package/web-ui/build/static/prolog-ByKO_5p_.js +1 -0
- package/web-ui/build/static/prolog-CDCLze6j.js +1 -0
- package/web-ui/build/static/promql-BYOPu10L.js +1 -0
- package/web-ui/build/static/properties-kP8T8mqV.js +1 -0
- package/web-ui/build/static/properties-zdANIr61.js +1 -0
- package/web-ui/build/static/protobuf-DhAYlNOg.js +1 -0
- package/web-ui/build/static/protobuf-a1lLQN1f.js +1 -0
- package/web-ui/build/static/psl-DpP1u6wu.js +1 -0
- package/web-ui/build/static/pug-BobY0hsa.js +1 -0
- package/web-ui/build/static/puppet-CDimLnep.js +1 -0
- package/web-ui/build/static/puppet-D7DLS3gG.js +1 -0
- package/web-ui/build/static/pure-4QGsilHw.js +1 -0
- package/web-ui/build/static/purebasic-D0wI4z6w.js +1 -0
- package/web-ui/build/static/purebasic-Du_RxI7h.js +1 -0
- package/web-ui/build/static/purescript-CM92Fn9c.js +1 -0
- package/web-ui/build/static/python-Bvcn81x2.js +1 -0
- package/web-ui/build/static/python-CkfwrdRF.js +1 -0
- package/web-ui/build/static/python-repl-C48-EfyF.js +1 -0
- package/web-ui/build/static/q-B2-zP3za.js +1 -0
- package/web-ui/build/static/q-KuKa9s_e.js +1 -0
- package/web-ui/build/static/qml-D8j38-Sx.js +1 -0
- package/web-ui/build/static/qml-DTP6fbZN.js +1 -0
- package/web-ui/build/static/qore-DY-n97IK.js +1 -0
- package/web-ui/build/static/qsharp-Mn8hUKww.js +1 -0
- package/web-ui/build/static/r-BBPYkuMA.js +1 -0
- package/web-ui/build/static/r-CheuVCRq.js +1 -0
- package/web-ui/build/static/racket-2UxWXIqI.js +1 -0
- package/web-ui/build/static/reason-CudKWaht.js +1 -0
- package/web-ui/build/static/reasonml-BDZgwPxq.js +1 -0
- package/web-ui/build/static/regex-DpKrn61Z.js +1 -0
- package/web-ui/build/static/rego-CS2iMzor.js +1 -0
- package/web-ui/build/static/renpy-0CbyBFae.js +1 -0
- package/web-ui/build/static/rest-Ckpz2bGS.js +1 -0
- package/web-ui/build/static/rib-g77eioCq.js +1 -0
- package/web-ui/build/static/rip-L-KlpyJn.js +1 -0
- package/web-ui/build/static/roboconf-BkNeb0Yn.js +1 -0
- package/web-ui/build/static/roboconf-CE-yfGxs.js +1 -0
- package/web-ui/build/static/robotframework-ZhLv32cH.js +1 -0
- package/web-ui/build/static/routeros-C_1I4hFK.js +1 -0
- package/web-ui/build/static/rsl-CxEYmrJa.js +1 -0
- package/web-ui/build/static/ruby-Cgxmv3hM.js +1 -0
- package/web-ui/build/static/ruby-Cs4qnUzE.js +1 -0
- package/web-ui/build/static/ruleslanguage-DPK5B1Dg.js +1 -0
- package/web-ui/build/static/rust-BbVN6hMu.js +1 -0
- package/web-ui/build/static/rust-C6MrX2UK.js +1 -0
- package/web-ui/build/static/sas-CGov9per.js +1 -0
- package/web-ui/build/static/sas-Cp88q4DD.js +1 -0
- package/web-ui/build/static/sass-COOJqQer.js +1 -0
- package/web-ui/build/static/scala-BvOmMtdv.js +1 -0
- package/web-ui/build/static/scala-D5gnz3xs.js +1 -0
- package/web-ui/build/static/scheme-CNBfxsvv.js +1 -0
- package/web-ui/build/static/scheme-DiKuURfA.js +1 -0
- package/web-ui/build/static/scilab-vGKouaTh.js +1 -0
- package/web-ui/build/static/scss-B4PKgroe.js +1 -0
- package/web-ui/build/static/scss-BvRxfJ1U.js +1 -0
- package/web-ui/build/static/shell-B5TooOs0.js +1 -0
- package/web-ui/build/static/shell-session-TNT_ahRW.js +1 -0
- package/web-ui/build/static/smali-CiIXEKzG.js +1 -0
- package/web-ui/build/static/smali-EGdSXgM9.js +1 -0
- package/web-ui/build/static/smalltalk-DVAXFBVS.js +1 -0
- package/web-ui/build/static/smalltalk-Dfy8hlRv.js +1 -0
- package/web-ui/build/static/smarty-Rc2y-rm6.js +1 -0
- package/web-ui/build/static/sml-BoYe_d8x.js +1 -0
- package/web-ui/build/static/sml-CaIv1GsI.js +1 -0
- package/web-ui/build/static/solidity-Dem-6tsD.js +1 -0
- package/web-ui/build/static/solution-file-DfDjJASp.js +1 -0
- package/web-ui/build/static/soy-CkrJH5eW.js +1 -0
- package/web-ui/build/static/sparql-Dvg1P5oN.js +1 -0
- package/web-ui/build/static/splunk-spl-rB2pJQdl.js +1 -0
- package/web-ui/build/static/sqf-Cj_KV-kC.js +1 -0
- package/web-ui/build/static/sqf-DA_tj5Fb.js +1 -0
- package/web-ui/build/static/sql-CYDE0gzH.js +1 -0
- package/web-ui/build/static/sql-D8byAq-B.js +1 -0
- package/web-ui/build/static/sql_more-bMORpicj.js +1 -0
- package/web-ui/build/static/squirrel-rgwbGN0q.js +1 -0
- package/web-ui/build/static/stan-C-OYiHTu.js +1 -0
- package/web-ui/build/static/stan-CT8cMsn7.js +1 -0
- package/web-ui/build/static/stata-BJwZeN-z.js +1 -0
- package/web-ui/build/static/step21-WP26kxkW.js +1 -0
- package/web-ui/build/static/stylus-Cw9up-Iv.js +1 -0
- package/web-ui/build/static/stylus-CyFEQpH2.js +1 -0
- package/web-ui/build/static/subunit-B2XhtaLx.js +1 -0
- package/web-ui/build/static/swift-Bpyyuvtg.js +1 -0
- package/web-ui/build/static/swift-D-jiKNlA.js +1 -0
- package/web-ui/build/static/systemd-DE3AeWrd.js +1 -0
- package/web-ui/build/static/t4-cs-BSG7rkB_.js +1 -0
- package/web-ui/build/static/t4-templating-Cy7LuqAv.js +1 -0
- package/web-ui/build/static/t4-vb-ZLfMjXrh.js +1 -0
- package/web-ui/build/static/taggerscript-q2zFfkel.js +1 -0
- package/web-ui/build/static/tap-CzjhWyhf.js +1 -0
- package/web-ui/build/static/tap-ttXfPums.js +1 -0
- package/web-ui/build/static/tcl-6ta1XDva.js +1 -0
- package/web-ui/build/static/tcl-Cvx4AN_Q.js +1 -0
- package/web-ui/build/static/textile-zWm4gRbJ.js +1 -0
- package/web-ui/build/static/thrift-Crj4hRsm.js +1 -0
- package/web-ui/build/static/toml-hVfLOJr-.js +1 -0
- package/web-ui/build/static/tp-D5aJh4yF.js +1 -0
- package/web-ui/build/static/tremor-B9gWC4v1.js +1 -0
- package/web-ui/build/static/tsx-DtNWBAJO.js +1 -0
- package/web-ui/build/static/tt2-eH1L7Bpm.js +1 -0
- package/web-ui/build/static/turtle-BYCk4r6f.js +1 -0
- package/web-ui/build/static/twig-BQ-dq4no.js +1 -0
- package/web-ui/build/static/twig-n3AiXKyV.js +1 -0
- package/web-ui/build/static/typescript-CPQ0vD90.js +1 -0
- package/web-ui/build/static/typescript-juxiNWRf.js +1 -0
- package/web-ui/build/static/typoscript-C5h9SqFN.js +1 -0
- package/web-ui/build/static/unrealscript-9ht7jiai.js +1 -0
- package/web-ui/build/static/uorazor-36B6okgA.js +1 -0
- package/web-ui/build/static/uri-DEwrtmz_.js +1 -0
- package/web-ui/build/static/v-CvhXAFWo.js +1 -0
- package/web-ui/build/static/vala-CU_jVQ3c.js +1 -0
- package/web-ui/build/static/vala-H_yoFBZf.js +1 -0
- package/web-ui/build/static/vbnet-BNI0Gy5q.js +1 -0
- package/web-ui/build/static/vbnet-D-4O1Hpc.js +1 -0
- package/web-ui/build/static/vbscript-1zyalaSG.js +1 -0
- package/web-ui/build/static/vbscript-html-ea5_TYi7.js +1 -0
- package/web-ui/build/static/velocity-BlEdS1Un.js +1 -0
- package/web-ui/build/static/verilog-BGSIJuDJ.js +1 -0
- package/web-ui/build/static/verilog-C1vff5Z3.js +1 -0
- package/web-ui/build/static/vhdl-5H4C8O-_.js +1 -0
- package/web-ui/build/static/vhdl-DHiBEhsE.js +1 -0
- package/web-ui/build/static/vim-Bd1MNlxj.js +1 -0
- package/web-ui/build/static/vim-DBP2ZsgQ.js +1 -0
- package/web-ui/build/static/visual-basic-DI34-9vJ.js +1 -0
- package/web-ui/build/static/warpscript-DBQ-KbS6.js +1 -0
- package/web-ui/build/static/wasm-CY5W57_Y.js +1 -0
- package/web-ui/build/static/web-idl-CF9xaLpZ.js +1 -0
- package/web-ui/build/static/wiki-xfSWwdeC.js +1 -0
- package/web-ui/build/static/wolfram-DZ6ghwRH.js +1 -0
- package/web-ui/build/static/wren-qULNE4ZV.js +1 -0
- package/web-ui/build/static/x86asm-DD2-d5-3.js +1 -0
- package/web-ui/build/static/xeora-CMja58lL.js +1 -0
- package/web-ui/build/static/xl-DKZpXGv8.js +1 -0
- package/web-ui/build/static/xml-Xf5ErmV_.js +1 -0
- package/web-ui/build/static/xml-doc-Bl_99SZE.js +1 -0
- package/web-ui/build/static/xojo-PwcPgmIF.js +1 -0
- package/web-ui/build/static/xquery-BshbqrZe.js +1 -0
- package/web-ui/build/static/xquery-DY2-GgvB.js +1 -0
- package/web-ui/build/static/yaml-9mp-mYjQ.js +1 -0
- package/web-ui/build/static/yaml-BnH4Y8-L.js +1 -0
- package/web-ui/build/static/yang-CRK7RS7V.js +1 -0
- package/web-ui/build/static/zephir-B560hCdS.js +1 -0
- package/web-ui/build/static/zig-CBG6H3iO.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,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message source — provenance metadata for inbound user messages.
|
|
3
|
+
*
|
|
4
|
+
* Attached at the inbound-service boundary (Discord / Telegram inbound),
|
|
5
|
+
* preserved verbatim through the orchestrator -> messageProcessor ->
|
|
6
|
+
* agentPool pipeline, and rendered as a single attribution line prepended
|
|
7
|
+
* to the message content so the agent can see where the message arrived
|
|
8
|
+
* from and decide for itself how to respond.
|
|
9
|
+
*
|
|
10
|
+
* Design notes
|
|
11
|
+
* ------------
|
|
12
|
+
* - Pure module. No discord.js / node-telegram-bot-api imports. Tests run
|
|
13
|
+
* without network, DB, or platform-SDK setup.
|
|
14
|
+
* - Factories are defensive: they accept the full platform message object
|
|
15
|
+
* and tolerate missing fields rather than throwing. A partial source is
|
|
16
|
+
* better than no source for the agent to reason about.
|
|
17
|
+
* - Output is deeply frozen so downstream code can't silently mutate
|
|
18
|
+
* provenance. Surprising mutation of a source once it's on a queued
|
|
19
|
+
* message would be a correctness nightmare to debug.
|
|
20
|
+
* - `alias` is chosen to match the strings advertised by
|
|
21
|
+
* discordService.getBridgedChannels / telegramService.getBridgedChannels,
|
|
22
|
+
* so <external to="…"> routing composes with channelFilter's substring
|
|
23
|
+
* matching without any translation layer.
|
|
24
|
+
* - `describeSource(src)` returns a human-readable attribution for the
|
|
25
|
+
* header; `prependSourceHeader(content, src)` is idempotent so replaying
|
|
26
|
+
* a message through the pipeline never double-prefixes.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Exhaustive discriminator for the source kind. Adding a new kind is a
|
|
31
|
+
* deliberate act — downstream consumers (the scheduler's prompt injector,
|
|
32
|
+
* the relay services) switch on this value.
|
|
33
|
+
*/
|
|
34
|
+
export const MESSAGE_SOURCE_KINDS = Object.freeze({
|
|
35
|
+
DISCORD: 'discord',
|
|
36
|
+
TELEGRAM: 'telegram',
|
|
37
|
+
WEB: 'web',
|
|
38
|
+
API: 'api',
|
|
39
|
+
INTERNAL: 'internal',
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @typedef {Object} MessageSource
|
|
44
|
+
* @property {'discord'|'telegram'|'web'|'api'|'internal'} kind
|
|
45
|
+
* @property {string} alias
|
|
46
|
+
* @property {string} sessionId
|
|
47
|
+
* @property {Object} raw Kind-specific identifiers (channel ids, user ids, …)
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Deep-freeze a plain object tree. Keeps the source literal-immutable so
|
|
52
|
+
* any code that treats it as a value-object is safe.
|
|
53
|
+
* @param {any} value
|
|
54
|
+
* @returns {any}
|
|
55
|
+
*/
|
|
56
|
+
function freezeDeep(value) {
|
|
57
|
+
if (value === null || typeof value !== 'object') return value;
|
|
58
|
+
if (Object.isFrozen(value)) return value;
|
|
59
|
+
for (const key of Object.keys(value)) {
|
|
60
|
+
freezeDeep(value[key]);
|
|
61
|
+
}
|
|
62
|
+
return Object.freeze(value);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
66
|
+
// Discord
|
|
67
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Build a MessageSource from a discord.js Message object.
|
|
71
|
+
*
|
|
72
|
+
* Tolerant of missing fields: DMs have no guild, non-threaded channels
|
|
73
|
+
* have no parent, bot-posted messages have no author — each just produces
|
|
74
|
+
* a `null` in the raw payload and is gracefully handled by describeSource.
|
|
75
|
+
*
|
|
76
|
+
* @param {Object} discordMessage discord.js Message
|
|
77
|
+
* @returns {MessageSource}
|
|
78
|
+
*/
|
|
79
|
+
export function createDiscordSource(discordMessage) {
|
|
80
|
+
const msg = discordMessage || {};
|
|
81
|
+
const channel = msg.channel || {};
|
|
82
|
+
const guild = msg.guild || null;
|
|
83
|
+
const author = msg.author || {};
|
|
84
|
+
|
|
85
|
+
const isThread = typeof channel.isThread === 'function'
|
|
86
|
+
? !!channel.isThread()
|
|
87
|
+
: false;
|
|
88
|
+
|
|
89
|
+
const raw = {
|
|
90
|
+
messageId: msg.id ?? null,
|
|
91
|
+
channelId: channel.id ?? null,
|
|
92
|
+
channelName: channel.name ?? null,
|
|
93
|
+
authorId: author.id ?? null,
|
|
94
|
+
authorName: author.username ?? author.globalName ?? null,
|
|
95
|
+
guildId: guild?.id ?? null,
|
|
96
|
+
guildName: guild?.name ?? null,
|
|
97
|
+
// Thread metadata: threadId/threadName are set only when the message
|
|
98
|
+
// arrived inside a thread. parentChannel* records the channel the
|
|
99
|
+
// thread lives under, so describeSource can render the full path.
|
|
100
|
+
threadId: isThread ? (channel.id ?? null) : null,
|
|
101
|
+
threadName: isThread ? (channel.name ?? null) : null,
|
|
102
|
+
parentChannelId: isThread ? (channel.parentId ?? null) : null,
|
|
103
|
+
parentChannelName: isThread ? (channel.parent?.name ?? null) : null,
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const alias = _computeDiscordAlias(raw);
|
|
107
|
+
const sessionId = `discord-${raw.guildId || 'dm'}-${raw.channelId || 'unknown'}`;
|
|
108
|
+
|
|
109
|
+
return freezeDeep({
|
|
110
|
+
kind: MESSAGE_SOURCE_KINDS.DISCORD,
|
|
111
|
+
alias,
|
|
112
|
+
sessionId,
|
|
113
|
+
raw,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Canonical Discord alias. Format matches discordService.getBridgedChannels
|
|
119
|
+
* output so the agent can round-trip an alias from the bridged-channel list
|
|
120
|
+
* back through `<external to="…">` with no translation.
|
|
121
|
+
*
|
|
122
|
+
* For threads we still alias by the thread's own channel id / name because
|
|
123
|
+
* that's what the relay dispatches to. The parent channel is only used for
|
|
124
|
+
* the human-readable label.
|
|
125
|
+
* @private
|
|
126
|
+
*/
|
|
127
|
+
function _computeDiscordAlias(raw) {
|
|
128
|
+
if (raw.channelName) return `discord:#${raw.channelName}`;
|
|
129
|
+
if (raw.channelId) return `discord:${raw.channelId}`;
|
|
130
|
+
return 'discord:unknown';
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
134
|
+
// Telegram
|
|
135
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Build a MessageSource from a node-telegram-bot-api Message object.
|
|
139
|
+
*
|
|
140
|
+
* @param {Object} telegramMessage node-telegram-bot-api Message
|
|
141
|
+
* @returns {MessageSource}
|
|
142
|
+
*/
|
|
143
|
+
export function createTelegramSource(telegramMessage) {
|
|
144
|
+
const msg = telegramMessage || {};
|
|
145
|
+
const chat = msg.chat || {};
|
|
146
|
+
const from = msg.from || {};
|
|
147
|
+
|
|
148
|
+
const raw = {
|
|
149
|
+
messageId: msg.message_id ?? null,
|
|
150
|
+
chatId: chat.id ?? null,
|
|
151
|
+
chatType: chat.type ?? null, // 'private' | 'group' | 'supergroup' | 'channel'
|
|
152
|
+
chatTitle: chat.title ?? null,
|
|
153
|
+
userId: from.id ?? null,
|
|
154
|
+
userName: from.username ?? from.first_name ?? null,
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// Telegram's relay service today is single-chat-per-instance and
|
|
158
|
+
// advertises the bare alias `telegram`. For per-chat addressability we
|
|
159
|
+
// emit `telegram:chat-<id>` which matches exactly one owned alias when
|
|
160
|
+
// the service's bridge list grows richer, and still substring-matches
|
|
161
|
+
// `telegram` (the current owned alias) when it doesn't.
|
|
162
|
+
const alias = raw.chatId != null ? `telegram:chat-${raw.chatId}` : 'telegram';
|
|
163
|
+
const sessionId = `telegram-${raw.chatId ?? 'unknown'}`;
|
|
164
|
+
|
|
165
|
+
return freezeDeep({
|
|
166
|
+
kind: MESSAGE_SOURCE_KINDS.TELEGRAM,
|
|
167
|
+
alias,
|
|
168
|
+
sessionId,
|
|
169
|
+
raw,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
174
|
+
// Web / API / Internal (null-object-ish; produces no header)
|
|
175
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @param {{ sessionId?: string, userName?: string }} [info]
|
|
179
|
+
* @returns {MessageSource}
|
|
180
|
+
*/
|
|
181
|
+
export function createWebSource(info = {}) {
|
|
182
|
+
const sessionId = info.sessionId || 'web-unknown';
|
|
183
|
+
return freezeDeep({
|
|
184
|
+
kind: MESSAGE_SOURCE_KINDS.WEB,
|
|
185
|
+
alias: `web:${sessionId}`,
|
|
186
|
+
sessionId,
|
|
187
|
+
raw: { sessionId, userName: info.userName ?? null },
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* For scheduler / flow-injected messages where no human channel is behind
|
|
193
|
+
* the send. `describeSource` returns null for internal sources so no
|
|
194
|
+
* header is prepended — the agent sees the raw content as before.
|
|
195
|
+
* @param {string} [reason]
|
|
196
|
+
* @returns {MessageSource}
|
|
197
|
+
*/
|
|
198
|
+
export function createInternalSource(reason = 'internal') {
|
|
199
|
+
return freezeDeep({
|
|
200
|
+
kind: MESSAGE_SOURCE_KINDS.INTERNAL,
|
|
201
|
+
alias: `internal:${reason}`,
|
|
202
|
+
sessionId: `internal-${reason}`,
|
|
203
|
+
raw: { reason },
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
208
|
+
// Rendering
|
|
209
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Produce the human-readable attribution sentence for a source, or null
|
|
213
|
+
* when the source is absent / of a kind that doesn't warrant a header
|
|
214
|
+
* (web, api, internal — those interactions don't need to teach the agent
|
|
215
|
+
* where the message came from).
|
|
216
|
+
*
|
|
217
|
+
* Output shape (examples):
|
|
218
|
+
* Discord guild channel → "Message by alice from Discord > MyGuild > #ops"
|
|
219
|
+
* Discord thread → "Message by alice from Discord > MyGuild > #ops > Deploy thread"
|
|
220
|
+
* Discord DM → "Message by alice from Discord > DM"
|
|
221
|
+
* Telegram group → "Message by alice from Telegram > Ops Chat"
|
|
222
|
+
* Telegram private → "Message by alice from Telegram > DM"
|
|
223
|
+
*
|
|
224
|
+
* @param {MessageSource|null|undefined} source
|
|
225
|
+
* @returns {string|null}
|
|
226
|
+
*/
|
|
227
|
+
export function describeSource(source) {
|
|
228
|
+
if (!source || typeof source !== 'object') return null;
|
|
229
|
+
const raw = source.raw || {};
|
|
230
|
+
|
|
231
|
+
switch (source.kind) {
|
|
232
|
+
case MESSAGE_SOURCE_KINDS.DISCORD: {
|
|
233
|
+
const user = raw.authorName || 'unknown user';
|
|
234
|
+
const parts = ['Discord'];
|
|
235
|
+
// Thread path: Discord > Guild > #parent > ThreadName
|
|
236
|
+
// Flat path: Discord > Guild > #channel
|
|
237
|
+
// DM path: Discord > DM
|
|
238
|
+
if (raw.guildName) parts.push(raw.guildName);
|
|
239
|
+
|
|
240
|
+
if (raw.parentChannelName || raw.threadName) {
|
|
241
|
+
if (raw.parentChannelName) parts.push(`#${raw.parentChannelName}`);
|
|
242
|
+
if (raw.threadName) parts.push(raw.threadName);
|
|
243
|
+
} else if (raw.channelName) {
|
|
244
|
+
parts.push(`#${raw.channelName}`);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// No guild and no channel name usually means a DM (or a stripped-down
|
|
248
|
+
// test fixture). Label it as DM rather than leaving a bare "Discord".
|
|
249
|
+
if (parts.length === 1) parts.push('DM');
|
|
250
|
+
|
|
251
|
+
return `Message by ${user} from ${parts.join(' > ')}`;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
case MESSAGE_SOURCE_KINDS.TELEGRAM: {
|
|
255
|
+
const user = raw.userName || 'unknown user';
|
|
256
|
+
const parts = ['Telegram'];
|
|
257
|
+
if (raw.chatType === 'private') {
|
|
258
|
+
parts.push('DM');
|
|
259
|
+
} else if (raw.chatTitle) {
|
|
260
|
+
parts.push(raw.chatTitle);
|
|
261
|
+
} else if (raw.chatId != null) {
|
|
262
|
+
parts.push(`chat ${raw.chatId}`);
|
|
263
|
+
} else {
|
|
264
|
+
parts.push('DM');
|
|
265
|
+
}
|
|
266
|
+
return `Message by ${user} from ${parts.join(' > ')}`;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
case MESSAGE_SOURCE_KINDS.WEB:
|
|
270
|
+
case MESSAGE_SOURCE_KINDS.API:
|
|
271
|
+
case MESSAGE_SOURCE_KINDS.INTERNAL:
|
|
272
|
+
default:
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Format the header line — a parenthesized describeSource() output — or
|
|
279
|
+
* empty string when the source has no describable shape.
|
|
280
|
+
* @param {MessageSource|null|undefined} source
|
|
281
|
+
* @returns {string}
|
|
282
|
+
*/
|
|
283
|
+
export function formatSourceHeader(source) {
|
|
284
|
+
const desc = describeSource(source);
|
|
285
|
+
return desc ? `(${desc})` : '';
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Prepend the source attribution header to a user message's content.
|
|
290
|
+
*
|
|
291
|
+
* Idempotent: if the content already begins with the exact header line,
|
|
292
|
+
* nothing is added. This keeps the pipeline safe against re-serialization
|
|
293
|
+
* (state restore, compaction, retry) without baking a "did-we-prefix" flag
|
|
294
|
+
* into the message shape.
|
|
295
|
+
*
|
|
296
|
+
* @param {string} content
|
|
297
|
+
* @param {MessageSource|null|undefined} source
|
|
298
|
+
* @returns {string}
|
|
299
|
+
*/
|
|
300
|
+
export function prependSourceHeader(content, source) {
|
|
301
|
+
const header = formatSourceHeader(source);
|
|
302
|
+
if (!header) return typeof content === 'string' ? content : String(content ?? '');
|
|
303
|
+
|
|
304
|
+
const text = typeof content === 'string' ? content : String(content ?? '');
|
|
305
|
+
if (text.startsWith(header)) return text;
|
|
306
|
+
return `${header}\n${text}`;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
export default {
|
|
310
|
+
MESSAGE_SOURCE_KINDS,
|
|
311
|
+
createDiscordSource,
|
|
312
|
+
createTelegramSource,
|
|
313
|
+
createWebSource,
|
|
314
|
+
createInternalSource,
|
|
315
|
+
describeSource,
|
|
316
|
+
formatSourceHeader,
|
|
317
|
+
prependSourceHeader,
|
|
318
|
+
};
|
|
@@ -19,6 +19,7 @@ import { promises as fs } from 'fs';
|
|
|
19
19
|
import path from 'path';
|
|
20
20
|
import { getUserDataPaths, ensureUserDataDirs } from '../utilities/userDataDir.js';
|
|
21
21
|
import { filterContentForExternalRelay, resolveBlockTargets } from './channelFilter.js';
|
|
22
|
+
import { createTelegramSource } from './messageSource.js';
|
|
22
23
|
|
|
23
24
|
const TELEGRAM_STATUS = {
|
|
24
25
|
DISCONNECTED: 'disconnected',
|
|
@@ -521,6 +522,10 @@ class TelegramService {
|
|
|
521
522
|
|
|
522
523
|
if (this.orchestrator) {
|
|
523
524
|
const sessionId = `telegram-${this.chatId}`;
|
|
525
|
+
// Capture source at ingress — see services/messageSource.js. The
|
|
526
|
+
// source rides the payload into the orchestrator and becomes the
|
|
527
|
+
// `(Message by alice from Telegram > …)` line the agent sees.
|
|
528
|
+
const source = createTelegramSource(msg);
|
|
524
529
|
await this.orchestrator.processRequest({
|
|
525
530
|
interface: 'telegram',
|
|
526
531
|
sessionId,
|
|
@@ -528,7 +533,8 @@ class TelegramService {
|
|
|
528
533
|
payload: {
|
|
529
534
|
agentId: targetAgent.id,
|
|
530
535
|
message: messageText,
|
|
531
|
-
streamingEnabled: false
|
|
536
|
+
streamingEnabled: false,
|
|
537
|
+
source,
|
|
532
538
|
},
|
|
533
539
|
projectDir: this.orchestrator.config?.project?.directory || process.cwd()
|
|
534
540
|
});
|
|
@@ -859,22 +859,50 @@ class VisualEditorServer {
|
|
|
859
859
|
|
|
860
860
|
// Add a <base> tag to make relative URLs resolve to the original site
|
|
861
861
|
// This prevents assets (scripts, styles, images) from being requested through our server
|
|
862
|
+
//
|
|
863
|
+
// IMPORTANT: The base href must include the *directory* of the target URL, not just
|
|
864
|
+
// the origin. If the target is http://host/sub/page.html and we set <base href="http://host/">,
|
|
865
|
+
// then a relative <link href="styles.css"> resolves to http://host/styles.css (wrong) instead
|
|
866
|
+
// of http://host/sub/styles.css (correct). We compute the directory portion of the pathname
|
|
867
|
+
// and use that as the base href.
|
|
862
868
|
let baseTag = '';
|
|
863
869
|
try {
|
|
864
870
|
const parsed = new URL(targetUrl);
|
|
865
|
-
|
|
871
|
+
// Derive directory: for /sub/page.html -> /sub/, for /sub/ -> /sub/, for / -> /
|
|
872
|
+
let dir = parsed.pathname;
|
|
873
|
+
if (!dir.endsWith('/')) {
|
|
874
|
+
const lastSlash = dir.lastIndexOf('/');
|
|
875
|
+
dir = lastSlash >= 0 ? dir.substring(0, lastSlash + 1) : '/';
|
|
876
|
+
}
|
|
877
|
+
baseTag = `<base href="${parsed.origin}${dir}">`;
|
|
866
878
|
} catch (e) {
|
|
867
879
|
// Invalid URL, skip base tag
|
|
868
880
|
}
|
|
869
881
|
|
|
870
882
|
let modifiedHtml = html;
|
|
871
883
|
|
|
872
|
-
// Inject base tag after <head
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
884
|
+
// Inject base tag right after the opening <head ...> tag (case-insensitive, allows attributes).
|
|
885
|
+
// If there is no <head> at all, synthesize one after <html ...> so we still get a base.
|
|
886
|
+
// If a <base> already exists in the document, rewrite its href — the original would point
|
|
887
|
+
// at the original site path and we want it pointed at our resolved directory instead.
|
|
888
|
+
if (baseTag) {
|
|
889
|
+
const hasBase = /<base\b[^>]*>/i.test(html);
|
|
890
|
+
if (hasBase) {
|
|
891
|
+
// Replace the first <base ...> with our computed one
|
|
892
|
+
modifiedHtml = modifiedHtml.replace(/<base\b[^>]*>/i, baseTag);
|
|
893
|
+
} else {
|
|
894
|
+
const headOpenRe = /<head\b[^>]*>/i;
|
|
895
|
+
if (headOpenRe.test(modifiedHtml)) {
|
|
896
|
+
modifiedHtml = modifiedHtml.replace(headOpenRe, (match) => `${match}${baseTag}`);
|
|
897
|
+
} else {
|
|
898
|
+
const htmlOpenRe = /<html\b[^>]*>/i;
|
|
899
|
+
if (htmlOpenRe.test(modifiedHtml)) {
|
|
900
|
+
modifiedHtml = modifiedHtml.replace(htmlOpenRe, (match) => `${match}<head>${baseTag}</head>`);
|
|
901
|
+
} else {
|
|
902
|
+
// No <html> either — prepend a head block
|
|
903
|
+
modifiedHtml = `<head>${baseTag}</head>${modifiedHtml}`;
|
|
904
|
+
}
|
|
905
|
+
}
|
|
878
906
|
}
|
|
879
907
|
}
|
|
880
908
|
|
|
@@ -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
|
}
|