onbuzz 4.8.3 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +27 -1
- package/bin/composio-cli.js +431 -0
- package/package.json +1 -1
- package/scripts/build-onboarding-doc.cjs +805 -0
- package/scripts/composio-bench/README.md +151 -0
- package/scripts/memory-bench/bench.mjs +576 -0
- package/scripts/memory-bench/live-after-2026-05-21T16-20-52-767Z.json +150 -0
- package/scripts/memory-bench/live-after-2026-05-21T16-37-17-147Z.json +795 -0
- package/scripts/memory-bench/live-after-final-2026-05-21T17-16-02-947Z.json +766 -0
- package/scripts/memory-bench/live-after-v2-2026-05-21T16-52-26-833Z.json +890 -0
- package/scripts/memory-bench/live-after-v3-2026-05-21T17-05-40-622Z.json +955 -0
- package/scripts/memory-bench/live-probe-v2.mjs +412 -0
- package/scripts/memory-bench/live-probe.mjs +387 -0
- package/scripts/memory-bench/live-smoke-2026-05-21T16-22-35-945Z.json +36 -0
- package/scripts/memory-bench/live-smoke2-2026-05-21T16-24-14-095Z.json +36 -0
- package/scripts/memory-bench/live-smoke3-2026-05-21T16-26-54-093Z.json +123 -0
- package/scripts/memory-bench/live-v2-baseline-2026-05-23T22-43-20-757Z.json +628 -0
- package/scripts/memory-bench/live-v2-directive-2026-05-23T21-32-41-369Z.json +628 -0
- package/scripts/memory-bench/live-v2-smoke-2026-05-23T20-06-37-325Z.json +34 -0
- package/scripts/memory-bench/live-v2-smoke-2026-05-23T20-12-48-199Z.json +38 -0
- package/scripts/memory-bench/results-baseline-2026-05-19T11-23-12-245Z.json +39 -0
- package/scripts/memory-bench/results-baseline-2026-05-19T11-30-28-763Z.json +1024 -0
- package/scripts/memory-bench/results-baseline-2026-05-19T11-34-19-299Z.json +1007 -0
- package/scripts/memory-bench/results-baseline-2026-05-19T11-44-18-054Z.json +1432 -0
- package/scripts/memory-bench/results-nudge-combined-2026-05-19T12-00-37-465Z.json +1413 -0
- package/scripts/memory-bench/results-nudge-directive-2026-05-19T11-36-52-963Z.json +210 -0
- package/scripts/memory-bench/results-nudge-directive-2026-05-19T11-49-55-790Z.json +1464 -0
- package/scripts/memory-bench/results-nudge-echo-catalog-2026-05-19T11-39-01-829Z.json +232 -0
- package/scripts/memory-bench/results-nudge-echo-catalog-2026-05-19T11-55-12-705Z.json +1397 -0
- package/scripts/memory-bench/scenarios-v2.mjs +123 -0
- package/scripts/memory-bench/scenarios.mjs +178 -0
- package/scripts/office-bench/generate-samples.mjs +180 -0
- package/scripts/op-posture-bench/bench.mjs +397 -0
- package/scripts/op-posture-bench/probe.mjs +87 -0
- package/scripts/op-posture-bench/results-2026-05-18T20-29-13-941Z.json +57 -0
- package/scripts/op-posture-bench/results-2026-05-18T20-38-36-400Z.json +3071 -0
- package/scripts/op-posture-bench/scenarios.mjs +60 -0
- package/scripts/op-posture-bench/variants.mjs +68 -0
- package/scripts/stub-bench/bench.mjs +439 -0
- package/scripts/stub-bench/fixture/auth.js +41 -0
- package/scripts/stub-bench/results-2026-05-19T10-33-27-045Z.json +99 -0
- package/scripts/stub-bench/results-2026-05-19T10-35-08-240Z.json +920 -0
- package/scripts/stub-bench/results-2026-05-19T10-40-12-166Z.json +463 -0
- package/src/__tests__/composioCliFlags.test.js +239 -0
- package/src/core/__tests__/agentScheduler.codebaseKnowledge.test.js +65 -0
- package/src/core/__tests__/agentScheduler.memoryInjection.test.js +78 -0
- package/src/core/agentPool.js +10 -0
- package/src/core/agentScheduler.js +91 -0
- package/src/index.js +19 -3
- package/src/interfaces/__tests__/bulkAgentRoute.test.js +290 -0
- package/src/interfaces/__tests__/composioRoutes.test.js +318 -0
- package/src/interfaces/webServer.js +346 -2
- package/src/interfaces/webServer.js.bak +7047 -0
- package/src/services/__tests__/codeMapStubRenderer.test.js +207 -0
- package/src/services/__tests__/codebaseKnowledgeService.test.js +427 -0
- package/src/services/__tests__/composioService.test.js +332 -0
- package/src/services/__tests__/memoryService.appendAndCatalog.test.js +139 -0
- package/src/services/apiKeyManager.js +33 -0
- package/src/services/codeMapStubRenderer.js +142 -0
- package/src/services/codebaseKnowledgeService.js +430 -0
- package/src/services/composioService.js +378 -0
- package/src/services/memoryService.js +98 -0
- package/src/tools/__tests__/baseTool.test.js +62 -0
- package/src/tools/__tests__/codeMapTool.pluralCanonical.test.js +83 -0
- package/src/tools/__tests__/composioTool.test.js +268 -0
- package/src/tools/__tests__/memoryTool.pluralCanonical.test.js +189 -0
- package/src/tools/__tests__/memoryTool.test.js +1 -1
- package/src/tools/__tests__/officeTool.test.js +403 -0
- package/src/tools/__tests__/openaiFunctionSchemas.memoryReminisce.test.js +24 -25
- package/src/tools/__tests__/singularToolReverseForgive.test.js +97 -0
- package/src/tools/__tests__/taskManagerTool.discipline.test.js +137 -0
- package/src/tools/__tests__/taskManagerTool.transition.test.js +236 -0
- package/src/tools/__tests__/toolShapeForgiveness.test.js +260 -0
- package/src/tools/baseTool.js +28 -1
- package/src/tools/codeMapTool.js +1673 -1521
- package/src/tools/composioTool.js +307 -0
- package/src/tools/fileContentReplaceTool.js +893 -840
- package/src/tools/fileSystemTool.js +1372 -1314
- package/src/tools/fileTreeTool.js +7 -0
- package/src/tools/memoryTool.js +217 -81
- package/src/tools/office/officeDoc.js +425 -0
- package/src/tools/office/officePres.js +360 -0
- package/src/tools/office/officeSheet.js +350 -0
- package/src/tools/officeTool.js +313 -0
- package/src/tools/openaiFunctionSchemas.js +40 -50
- package/src/tools/platformControlTool.js +5 -0
- package/src/tools/seekTool.js +36 -1
- package/src/tools/skillsTool.js +10 -0
- package/src/tools/taskManagerTool.js +149 -14
- package/src/tools/terminalTool.js +23 -1
- package/src/tools/visionTool.js +7 -0
- package/src/tools/visualEditorTool.js +7 -0
- package/src/tools/whatsappTool.js +7 -0
- package/src/utilities/authCache.js +47 -6
- package/src/utilities/authCache.js.backup-1779570472481 +121 -0
- package/web-ui/build/index.html +2 -2
- package/web-ui/build/static/1c-BoCdC5pC.js +1 -0
- package/web-ui/build/static/abap-D7A92M1K.js +1 -0
- package/web-ui/build/static/abnf-DIcpJ99N.js +1 -0
- package/web-ui/build/static/abnf-d4I9yABN.js +1 -0
- package/web-ui/build/static/accesslog-D_Ksv5Fi.js +1 -0
- package/web-ui/build/static/actionscript-CMJI1an7.js +1 -0
- package/web-ui/build/static/actionscript-CNcWu4a1.js +1 -0
- package/web-ui/build/static/ada-BIqOBKro.js +1 -0
- package/web-ui/build/static/ada-BaTkJMdz.js +1 -0
- package/web-ui/build/static/agda-DmRdGgvt.js +1 -0
- package/web-ui/build/static/al-g8BvIfOt.js +1 -0
- package/web-ui/build/static/angelscript-BGxc0B7l.js +1 -0
- package/web-ui/build/static/antlr4-Da7ff6-m.js +1 -0
- package/web-ui/build/static/apache-Bibp-dVJ.js +1 -0
- package/web-ui/build/static/apacheconf-VzeL8tYb.js +1 -0
- package/web-ui/build/static/apex-DUaOCea3.js +1 -0
- package/web-ui/build/static/apl-BpwvFE2V.js +1 -0
- package/web-ui/build/static/applescript-5YKSWwV1.js +1 -0
- package/web-ui/build/static/applescript-BHqj5bpe.js +1 -0
- package/web-ui/build/static/aql-B0Wx_3hH.js +1 -0
- package/web-ui/build/static/arcade-CR8KkII1.js +1 -0
- package/web-ui/build/static/arduino-CYx5u85C.js +1 -0
- package/web-ui/build/static/arduino-ClVU2zro.js +1 -0
- package/web-ui/build/static/arff-kutIH4CC.js +1 -0
- package/web-ui/build/static/armasm-DBm1lGrc.js +1 -0
- package/web-ui/build/static/asciidoc-Cl02VMGf.js +1 -0
- package/web-ui/build/static/asciidoc-MMFYRqre.js +1 -0
- package/web-ui/build/static/asm6502-DPVMGaHn.js +1 -0
- package/web-ui/build/static/asmatmel-Dz4vtZ11.js +1 -0
- package/web-ui/build/static/aspectj-BZidGBlr.js +1 -0
- package/web-ui/build/static/aspnet-C2mo9iee.js +1 -0
- package/web-ui/build/static/autohotkey-Bx83oFMW.js +1 -0
- package/web-ui/build/static/autohotkey-DciFl6K5.js +1 -0
- package/web-ui/build/static/autoit-TVKWI5bu.js +1 -0
- package/web-ui/build/static/autoit-oORW7mrd.js +1 -0
- package/web-ui/build/static/avisynth-D_5uOtxP.js +1 -0
- package/web-ui/build/static/avrasm-D22JmbLm.js +1 -0
- package/web-ui/build/static/avro-idl-CtTuANGZ.js +1 -0
- package/web-ui/build/static/awk-Bnez22eR.js +1 -0
- package/web-ui/build/static/axapta-eqcr7C2-.js +1 -0
- package/web-ui/build/static/bash-D3XWHCZZ.js +1 -0
- package/web-ui/build/static/bash-px0MqVxE.js +1 -0
- package/web-ui/build/static/basic-BWOdgKLg.js +1 -0
- package/web-ui/build/static/basic-C7PK4wVg.js +1 -0
- package/web-ui/build/static/batch-CFeuSY9D.js +1 -0
- package/web-ui/build/static/bbcode-CRC0UNOS.js +1 -0
- package/web-ui/build/static/bicep-C18w8d6Z.js +1 -0
- package/web-ui/build/static/birb-DPiF4fwX.js +1 -0
- package/web-ui/build/static/bison-C1RWPaLl.js +1 -0
- package/web-ui/build/static/bnf-BelSXhsr.js +1 -0
- package/web-ui/build/static/bnf-D_m4SZuc.js +1 -0
- package/web-ui/build/static/brainfuck-Ci7P0POq.js +1 -0
- package/web-ui/build/static/brainfuck-DIrW6_96.js +1 -0
- package/web-ui/build/static/brightscript-4XgpA0OQ.js +1 -0
- package/web-ui/build/static/bro-4kAMStb2.js +1 -0
- package/web-ui/build/static/bsl-CleVjH1I.js +1 -0
- package/web-ui/build/static/c-Ct3AAwH6.js +1 -0
- package/web-ui/build/static/c-EiJrAzIQ.js +1 -0
- package/web-ui/build/static/c-like-B361rHmz.js +1 -0
- package/web-ui/build/static/cal-BZ3Pr4JI.js +1 -0
- package/web-ui/build/static/capnproto-LmwOdJJp.js +1 -0
- package/web-ui/build/static/ceylon-CKAfIFzx.js +1 -0
- package/web-ui/build/static/cfscript-Cms4z16U.js +1 -0
- package/web-ui/build/static/chaiscript-DKxRiUyN.js +1 -0
- package/web-ui/build/static/cil-C6rGhwce.js +1 -0
- package/web-ui/build/static/clean-DmpXs6RN.js +1 -0
- package/web-ui/build/static/clojure-DRYxiF9s.js +1 -0
- package/web-ui/build/static/clojure-DTjXEJCq.js +1 -0
- package/web-ui/build/static/clojure-repl-C1qlAUnK.js +1 -0
- package/web-ui/build/static/cmake-DtUokafC.js +1 -0
- package/web-ui/build/static/cmake-_WqF1fG8.js +1 -0
- package/web-ui/build/static/cobol-D2Q0IMuT.js +1 -0
- package/web-ui/build/static/coffeescript-MRThzdTU.js +1 -0
- package/web-ui/build/static/coffeescript-OHOpkJvb.js +1 -0
- package/web-ui/build/static/concurnas-CVGat9IA.js +1 -0
- package/web-ui/build/static/coq-CB_bM4lt.js +1 -0
- package/web-ui/build/static/coq-WNK38Cqz.js +1 -0
- package/web-ui/build/static/cos-CNa5GVxa.js +1 -0
- package/web-ui/build/static/cpp-D-9lHx0_.js +1 -0
- package/web-ui/build/static/cpp-DRvL1yaA.js +1 -0
- package/web-ui/build/static/crmsh-evnPMxnd.js +1 -0
- package/web-ui/build/static/crystal-RGhNrgnC.js +1 -0
- package/web-ui/build/static/crystal-yrBjXjEh.js +1 -0
- package/web-ui/build/static/csharp-Dr7sLtl1.js +1 -0
- package/web-ui/build/static/csharp-zNVQxjuC.js +1 -0
- package/web-ui/build/static/cshtml-CoiK-7Bu.js +1 -0
- package/web-ui/build/static/csp-Bhgq86EB.js +1 -0
- package/web-ui/build/static/csp-C20UcGAL.js +1 -0
- package/web-ui/build/static/css-D1vlrRV2.js +1 -0
- package/web-ui/build/static/css-extras-DVSAYMbv.js +1 -0
- package/web-ui/build/static/csv-BgR9D8jG.js +1 -0
- package/web-ui/build/static/cypher-Dxehyj6Y.js +1 -0
- package/web-ui/build/static/d-B-Se39n2.js +1 -0
- package/web-ui/build/static/d-Cr4d56op.js +1 -0
- package/web-ui/build/static/dart-BBqlOFkR.js +1 -0
- package/web-ui/build/static/dart-GRD7MWem.js +1 -0
- package/web-ui/build/static/dataweave-BK-Tahkw.js +1 -0
- package/web-ui/build/static/dax-pTr9GVoe.js +1 -0
- package/web-ui/build/static/delphi-CbwSNmp4.js +1 -0
- package/web-ui/build/static/dhall-CuFqRXr6.js +1 -0
- package/web-ui/build/static/diff-CK8Fq88e.js +1 -0
- package/web-ui/build/static/diff-CWbUTU-C.js +1 -0
- package/web-ui/build/static/django-DWaEPdP6.js +1 -0
- package/web-ui/build/static/django-TkEFpAOO.js +1 -0
- package/web-ui/build/static/dns-DKpFJlA0.js +1 -0
- package/web-ui/build/static/dns-zone-file-BIsmZEMf.js +1 -0
- package/web-ui/build/static/docker-DUavAYf7.js +1 -0
- package/web-ui/build/static/dockerfile-YnavjTIo.js +1 -0
- package/web-ui/build/static/dos-Dv3Qr-Oo.js +1 -0
- package/web-ui/build/static/dot-BtIPbx7t.js +1 -0
- package/web-ui/build/static/dsconfig-CEgd9-kI.js +1 -0
- package/web-ui/build/static/dts-BztZn8T6.js +1 -0
- package/web-ui/build/static/dust-B-527Hc0.js +1 -0
- package/web-ui/build/static/ebnf-CH_nnNi5.js +1 -0
- package/web-ui/build/static/ebnf-CuBjcj0j.js +1 -0
- package/web-ui/build/static/editorconfig-CA9KaQ0w.js +1 -0
- package/web-ui/build/static/eiffel-DVYJwwQw.js +1 -0
- package/web-ui/build/static/ejs-C2LKgDYE.js +1 -0
- package/web-ui/build/static/elixir-DVXGkbnw.js +1 -0
- package/web-ui/build/static/elixir-meJ_qqx4.js +1 -0
- package/web-ui/build/static/elm-C5sYS5Cb.js +1 -0
- package/web-ui/build/static/elm-Dj443pWY.js +1 -0
- package/web-ui/build/static/erb-CAj5yksQ.js +1 -0
- package/web-ui/build/static/erb-CcUB2tMd.js +1 -0
- package/web-ui/build/static/erlang-JusKooAX.js +1 -0
- package/web-ui/build/static/erlang-repl-wYgxDX5h.js +1 -0
- package/web-ui/build/static/erlang-sn-PsrSf.js +1 -0
- package/web-ui/build/static/etlua-ChDwUxz6.js +1 -0
- package/web-ui/build/static/excel-BJux1m2h.js +1 -0
- package/web-ui/build/static/excel-formula-i5ByFxAu.js +1 -0
- package/web-ui/build/static/factor-CTutAp6r.js +1 -0
- package/web-ui/build/static/false-DQz_zYVV.js +1 -0
- package/web-ui/build/static/firestore-security-rules-DRGBNXh2.js +1 -0
- package/web-ui/build/static/fix-DeSUhixI.js +1 -0
- package/web-ui/build/static/flix-BKTJVua_.js +1 -0
- package/web-ui/build/static/flow-BpcZsNuo.js +1 -0
- package/web-ui/build/static/fortran-BZIKfBPW.js +1 -0
- package/web-ui/build/static/fortran-BdezWEh5.js +1 -0
- package/web-ui/build/static/fsharp-1Gpt8wZo.js +1 -0
- package/web-ui/build/static/fsharp-CMyiqXUW.js +1 -0
- package/web-ui/build/static/ftl-D9bBJMhV.js +1 -0
- package/web-ui/build/static/gams-DL57wTHN.js +1 -0
- package/web-ui/build/static/gap-DN4Uo9cF.js +1 -0
- package/web-ui/build/static/gauss-DTa1H0QR.js +1 -0
- package/web-ui/build/static/gcode-U5GhqE37.js +1 -0
- package/web-ui/build/static/gcode-s-E37fb4.js +1 -0
- package/web-ui/build/static/gdscript-DkjgGcDv.js +1 -0
- package/web-ui/build/static/gedcom-BbjSSId3.js +1 -0
- package/web-ui/build/static/gherkin-BwIzGx7J.js +1 -0
- package/web-ui/build/static/gherkin-C97W_9I9.js +1 -0
- package/web-ui/build/static/git-DO8dnOip.js +1 -0
- package/web-ui/build/static/glsl-B_4UD4-O.js +1 -0
- package/web-ui/build/static/glsl-CGSjLy2x.js +1 -0
- package/web-ui/build/static/gml-BiITg8HI.js +1 -0
- package/web-ui/build/static/gml-DInGU66p.js +1 -0
- package/web-ui/build/static/gn--m2IH4i3.js +1 -0
- package/web-ui/build/static/go-DOK7GAd-.js +1 -0
- package/web-ui/build/static/go-bof0B9jK.js +1 -0
- package/web-ui/build/static/go-module-CPIVqmnL.js +1 -0
- package/web-ui/build/static/golo-jgy07E43.js +1 -0
- package/web-ui/build/static/gradle-BISOF0nH.js +1 -0
- package/web-ui/build/static/graphql-FqlbDLTL.js +1 -0
- package/web-ui/build/static/groovy-BM0ZyW4a.js +1 -0
- package/web-ui/build/static/groovy-oUdbfbZY.js +1 -0
- package/web-ui/build/static/haml-C8Qg-VO5.js +1 -0
- package/web-ui/build/static/haml-Dse28pB_.js +1 -0
- package/web-ui/build/static/handlebars-CWT7WazY.js +1 -0
- package/web-ui/build/static/handlebars-Ow3joqOm.js +1 -0
- package/web-ui/build/static/haskell-BfraeRhd.js +1 -0
- package/web-ui/build/static/haskell-EhcU7sbn.js +1 -0
- package/web-ui/build/static/haxe-B8tUoExu.js +1 -0
- package/web-ui/build/static/haxe-D9WQHhTh.js +1 -0
- package/web-ui/build/static/hcl-CG3GCouf.js +1 -0
- package/web-ui/build/static/hlsl-CSWRMQ3m.js +1 -0
- package/web-ui/build/static/hoon-Cj0JdbFY.js +1 -0
- package/web-ui/build/static/hpkp-CmjdXbgl.js +1 -0
- package/web-ui/build/static/hsp-VaFZ7Rlv.js +1 -0
- package/web-ui/build/static/hsts-CkJ6UPzY.js +1 -0
- package/web-ui/build/static/htmlbars-pfHjYqd2.js +1 -0
- package/web-ui/build/static/http-2LA-qivJ.js +1 -0
- package/web-ui/build/static/http-CQ_5JSsj.js +1 -0
- package/web-ui/build/static/hy-C-Dll2MQ.js +1 -0
- package/web-ui/build/static/ichigojam-DecRewwq.js +1 -0
- package/web-ui/build/static/icon-CdnU9zPA.js +1 -0
- package/web-ui/build/static/icu-message-format-CUQtjk6Q.js +1 -0
- package/web-ui/build/static/idris-CRMftLq6.js +1 -0
- package/web-ui/build/static/iecst-CXhHqz1P.js +1 -0
- package/web-ui/build/static/ignore-_emqIx7v.js +1 -0
- package/web-ui/build/static/index-BBHrMvg7.js +1216 -0
- package/web-ui/build/static/index-ChkZR_aE.js +13 -0
- package/web-ui/build/static/index-DU4GNSOf.js +1 -0
- package/web-ui/build/static/index-_z8JjNrI.css +1 -0
- package/web-ui/build/static/inform7-CbqlFoFE.js +1 -0
- package/web-ui/build/static/inform7-TxZViMJ9.js +1 -0
- package/web-ui/build/static/ini-D1sHtm5e.js +1 -0
- package/web-ui/build/static/ini-DnqB7pfX.js +1 -0
- package/web-ui/build/static/io-MnQK1mM-.js +1 -0
- package/web-ui/build/static/irpf90-BRaAenqx.js +1 -0
- package/web-ui/build/static/isbl-kubGT4rM.js +1 -0
- package/web-ui/build/static/j-BIz9wT9q.js +1 -0
- package/web-ui/build/static/java-CbQmsHSK.js +1 -0
- package/web-ui/build/static/java-v1B9fNL2.js +1 -0
- package/web-ui/build/static/javadoc-TB1OtWS7.js +1 -0
- package/web-ui/build/static/javadoclike-BBQPwDAU.js +1 -0
- package/web-ui/build/static/javascript-DzNVL5l_.js +1 -0
- package/web-ui/build/static/javastacktrace-BduOgG1e.js +1 -0
- package/web-ui/build/static/jboss-cli-BcqzI366.js +1 -0
- package/web-ui/build/static/jexl-Boyapidr.js +1 -0
- package/web-ui/build/static/jolie-hEbkNpsb.js +1 -0
- package/web-ui/build/static/jq-ZyEE6oGU.js +1 -0
- package/web-ui/build/static/js-extras-CXOzvlL7.js +1 -0
- package/web-ui/build/static/js-templates-CkHsm5px.js +1 -0
- package/web-ui/build/static/jsdoc-Uk3hj8z2.js +1 -0
- package/web-ui/build/static/json-BFi9igjd.js +1 -0
- package/web-ui/build/static/json-LI9wtNaG.js +1 -0
- package/web-ui/build/static/json5-PwjNByuN.js +1 -0
- package/web-ui/build/static/jsonp-DpfGuNSW.js +1 -0
- package/web-ui/build/static/jsstacktrace-DhOP2AhS.js +1 -0
- package/web-ui/build/static/jsx-DmWoDk8F.js +1 -0
- package/web-ui/build/static/julia-DBC5h81N.js +1 -0
- package/web-ui/build/static/julia-Dh9sV3LX.js +1 -0
- package/web-ui/build/static/julia-repl-BYyDp1f4.js +1 -0
- package/web-ui/build/static/keepalived-BTxjrZMV.js +1 -0
- package/web-ui/build/static/keyman-IYiyCDCU.js +1 -0
- package/web-ui/build/static/kotlin-C0PBuzvy.js +1 -0
- package/web-ui/build/static/kotlin-LWYZUK_T.js +1 -0
- package/web-ui/build/static/kumir-CQIbnv9I.js +1 -0
- package/web-ui/build/static/kusto-DA7pQ-Rb.js +1 -0
- package/web-ui/build/static/lasso-CrHySbnC.js +1 -0
- package/web-ui/build/static/latex-CLSOFXG4.js +1 -0
- package/web-ui/build/static/latex-DYknD4Dx.js +1 -0
- package/web-ui/build/static/latte-4QvZcKVw.js +1 -0
- package/web-ui/build/static/ldif-Dr96BfRx.js +1 -0
- package/web-ui/build/static/leaf-C9qL2Qde.js +1 -0
- package/web-ui/build/static/less-DpoID9ZJ.js +1 -0
- package/web-ui/build/static/less-wO8QO0XW.js +1 -0
- package/web-ui/build/static/lilypond-CNp4Kb1P.js +1 -0
- package/web-ui/build/static/liquid-DLULQdgV.js +1 -0
- package/web-ui/build/static/lisp-CrVo-Llt.js +1 -0
- package/web-ui/build/static/lisp-QIAoXzmW.js +1 -0
- package/web-ui/build/static/livecodeserver-DrehOgbf.js +1 -0
- package/web-ui/build/static/livescript-Cm2Yp34x.js +1 -0
- package/web-ui/build/static/livescript-mVYzlrko.js +1 -0
- package/web-ui/build/static/llvm-D6KsQJjh.js +1 -0
- package/web-ui/build/static/llvm-DhIp1o-1.js +1 -0
- package/web-ui/build/static/log-Sj3ocpgB.js +1 -0
- package/web-ui/build/static/lolcode-BSeGnWYG.js +1 -0
- package/web-ui/build/static/lsl-DwgUIp0U.js +1 -0
- package/web-ui/build/static/lua-B7Ot0Oou.js +1 -0
- package/web-ui/build/static/lua-zydwn5-S.js +1 -0
- package/web-ui/build/static/magma-Dgfy2Qny.js +1 -0
- package/web-ui/build/static/makefile-CSjtzdcw.js +1 -0
- package/web-ui/build/static/makefile-DrnEneus.js +1 -0
- package/web-ui/build/static/markdown-D9Ke3tYA.js +1 -0
- package/web-ui/build/static/markdown-DmwKuI2Y.js +1 -0
- package/web-ui/build/static/markup-templating-CikqfHT9.js +1 -0
- package/web-ui/build/static/mathematica-OC0imzI5.js +1 -0
- package/web-ui/build/static/matlab-BlPcqzRw.js +1 -0
- package/web-ui/build/static/matlab-C1iteCkE.js +1 -0
- package/web-ui/build/static/maxima-DecbOh0Y.js +1 -0
- package/web-ui/build/static/maxscript-80cPuIOA.js +1 -0
- package/web-ui/build/static/mel-NI7ysGX2.js +1 -0
- package/web-ui/build/static/mel-r03p1eJo.js +1 -0
- package/web-ui/build/static/mercury-BdNZw6ZU.js +1 -0
- package/web-ui/build/static/mermaid-C1LB7zMJ.js +1 -0
- package/web-ui/build/static/mipsasm-BnZ0cdht.js +1 -0
- package/web-ui/build/static/mizar-BGPNX3WQ.js +1 -0
- package/web-ui/build/static/mizar-CswPcmcG.js +1 -0
- package/web-ui/build/static/mojolicious-rRtgy8Or.js +1 -0
- package/web-ui/build/static/mongodb-CJU0oeix.js +1 -0
- package/web-ui/build/static/monkey-Bj0HaV5-.js +1 -0
- package/web-ui/build/static/monkey-JRYuMIYc.js +1 -0
- package/web-ui/build/static/moonscript-i7e8bkxZ.js +1 -0
- package/web-ui/build/static/moonscript-ldoM156V.js +1 -0
- package/web-ui/build/static/n1ql-C0xs8qWA.js +1 -0
- package/web-ui/build/static/n1ql-DlC-GlVq.js +1 -0
- package/web-ui/build/static/n4js-mIwtIanO.js +1 -0
- package/web-ui/build/static/nand2tetris-hdl-mfHIYPZD.js +1 -0
- package/web-ui/build/static/naniscript-DiDayxx1.js +1 -0
- package/web-ui/build/static/nasm-7uf2nfNC.js +1 -0
- package/web-ui/build/static/neon-BKgOgIAL.js +1 -0
- package/web-ui/build/static/nevod-BlujoQ5k.js +1 -0
- package/web-ui/build/static/nginx-Bb57ubp_.js +1 -0
- package/web-ui/build/static/nginx-DmLU0URp.js +1 -0
- package/web-ui/build/static/nim-CmnPRTHF.js +1 -0
- package/web-ui/build/static/nim-DOReB32c.js +1 -0
- package/web-ui/build/static/nix-BDMn1sgi.js +1 -0
- package/web-ui/build/static/nix-LTHuFEfQ.js +1 -0
- package/web-ui/build/static/node-repl-dxwu8SWp.js +1 -0
- package/web-ui/build/static/nsis-CKD0KqBT.js +1 -0
- package/web-ui/build/static/nsis-IlSwBUak.js +1 -0
- package/web-ui/build/static/objectivec-D4Lo30HV.js +1 -0
- package/web-ui/build/static/objectivec-zmGGqvoM.js +1 -0
- package/web-ui/build/static/ocaml-2uzfqAr8.js +1 -0
- package/web-ui/build/static/ocaml-wF6lV9H4.js +1 -0
- package/web-ui/build/static/opencl-B82Xjnw5.js +1 -0
- package/web-ui/build/static/openqasm-VzVaHpAP.js +1 -0
- package/web-ui/build/static/openscad-B-qK1VfW.js +1 -0
- package/web-ui/build/static/oxygene-BNTVgbsA.js +1 -0
- package/web-ui/build/static/oz-5ZfXBXQY.js +1 -0
- package/web-ui/build/static/parigp-S8JhoJoz.js +1 -0
- package/web-ui/build/static/parser-BZPtbLcv.js +1 -0
- package/web-ui/build/static/parser3-BZRLDHuv.js +1 -0
- package/web-ui/build/static/pascal-GKzqT2Ku.js +1 -0
- package/web-ui/build/static/pascaligo-DnbFz_mr.js +1 -0
- package/web-ui/build/static/pcaxis-DiRsos26.js +1 -0
- package/web-ui/build/static/peoplecode-CMDLbqGB.js +1 -0
- package/web-ui/build/static/perl-BOnBAciC.js +1 -0
- package/web-ui/build/static/perl-fMVLgVTb.js +1 -0
- package/web-ui/build/static/pf-z6xsHHPS.js +1 -0
- package/web-ui/build/static/pgsql-5jHAyGJf.js +1 -0
- package/web-ui/build/static/php-CbG6Jq36.js +1 -0
- package/web-ui/build/static/php-D9yyh70o.js +1 -0
- package/web-ui/build/static/php-extras-CQKSwnMo.js +1 -0
- package/web-ui/build/static/php-template-Ch4UQhUx.js +1 -0
- package/web-ui/build/static/phpdoc-Be7TYcGQ.js +1 -0
- package/web-ui/build/static/plaintext-BsYjBqDy.js +1 -0
- package/web-ui/build/static/plsql-Dc4ePipN.js +1 -0
- package/web-ui/build/static/pony-Cen7DtWb.js +1 -0
- package/web-ui/build/static/powerquery-BIOJ1eUE.js +1 -0
- package/web-ui/build/static/powershell-CbEjJpj7.js +1 -0
- package/web-ui/build/static/powershell-DlceT0ds.js +1 -0
- package/web-ui/build/static/processing-C9GaKPU-.js +1 -0
- package/web-ui/build/static/processing-CTPA3QIV.js +1 -0
- package/web-ui/build/static/profile-CHjz016L.js +1 -0
- package/web-ui/build/static/prolog-BK0g5F4c.js +1 -0
- package/web-ui/build/static/prolog-DrrwUODp.js +1 -0
- package/web-ui/build/static/promql-DftRCUlR.js +1 -0
- package/web-ui/build/static/properties-B122hwLT.js +1 -0
- package/web-ui/build/static/properties-C0m3XIaN.js +1 -0
- package/web-ui/build/static/protobuf-CanIoKel.js +1 -0
- package/web-ui/build/static/protobuf-WvDgzNtD.js +1 -0
- package/web-ui/build/static/psl-JsKwhg_r.js +1 -0
- package/web-ui/build/static/pug-DoQaiAyU.js +1 -0
- package/web-ui/build/static/puppet-CoRftQQB.js +1 -0
- package/web-ui/build/static/puppet-DHgjsvQ8.js +1 -0
- package/web-ui/build/static/pure-BgZIQeOr.js +1 -0
- package/web-ui/build/static/purebasic-BRYfIFBb.js +1 -0
- package/web-ui/build/static/purebasic-DxXSa8gN.js +1 -0
- package/web-ui/build/static/purescript-ChvJvUnk.js +1 -0
- package/web-ui/build/static/python-DqhW0V3z.js +1 -0
- package/web-ui/build/static/python-Dz2FyIQx.js +1 -0
- package/web-ui/build/static/python-repl-Cl3mEb2H.js +1 -0
- package/web-ui/build/static/q-Bg4mQWXp.js +1 -0
- package/web-ui/build/static/q-DwaQK_1p.js +1 -0
- package/web-ui/build/static/qml-D1-fdJvp.js +1 -0
- package/web-ui/build/static/qml-DFsoiY0T.js +1 -0
- package/web-ui/build/static/qore-DdEtFSV5.js +1 -0
- package/web-ui/build/static/qsharp-B_A0OUBX.js +1 -0
- package/web-ui/build/static/r-C3M2HrKx.js +1 -0
- package/web-ui/build/static/r-_EUAt74Q.js +1 -0
- package/web-ui/build/static/racket-B3uAs3VE.js +1 -0
- package/web-ui/build/static/reason-CyAzPvNW.js +1 -0
- package/web-ui/build/static/reasonml-iEzx6ejF.js +1 -0
- package/web-ui/build/static/regex-suWqSnRa.js +1 -0
- package/web-ui/build/static/rego-QeDW60Lx.js +1 -0
- package/web-ui/build/static/renpy-03fEqIYK.js +1 -0
- package/web-ui/build/static/rest-BRJIE-UZ.js +1 -0
- package/web-ui/build/static/rib-DOI_C8C9.js +1 -0
- package/web-ui/build/static/rip-BaEBdknp.js +1 -0
- package/web-ui/build/static/roboconf-DC8IQe4Z.js +1 -0
- package/web-ui/build/static/roboconf-jTu2wKoD.js +1 -0
- package/web-ui/build/static/robotframework-BFp2sQG2.js +1 -0
- package/web-ui/build/static/routeros-Br-GCWs7.js +1 -0
- package/web-ui/build/static/rsl-BpWeUJqw.js +1 -0
- package/web-ui/build/static/ruby-C3nnVoGq.js +1 -0
- package/web-ui/build/static/ruby-DD90V5PL.js +1 -0
- package/web-ui/build/static/ruleslanguage-BflyDdqj.js +1 -0
- package/web-ui/build/static/rust-DtiFFJtC.js +1 -0
- package/web-ui/build/static/rust-uJHZCfXQ.js +1 -0
- package/web-ui/build/static/sas-DUr8rIBf.js +1 -0
- package/web-ui/build/static/sas-POH3vAEy.js +1 -0
- package/web-ui/build/static/sass-D1oLbZQ0.js +1 -0
- package/web-ui/build/static/scala-CDtrRn0l.js +1 -0
- package/web-ui/build/static/scala-VCIKIldH.js +1 -0
- package/web-ui/build/static/scheme-CAWHx2Oj.js +1 -0
- package/web-ui/build/static/scheme-DzKv24tn.js +1 -0
- package/web-ui/build/static/scilab-DuxpEvzV.js +1 -0
- package/web-ui/build/static/scss-BKd4Y-UF.js +1 -0
- package/web-ui/build/static/scss-BpqUKxry.js +1 -0
- package/web-ui/build/static/shell-session-CglnRr2l.js +1 -0
- package/web-ui/build/static/shell-u-Y3PKLQ.js +1 -0
- package/web-ui/build/static/smali-D308KWif.js +1 -0
- package/web-ui/build/static/smali-DYT-jHPu.js +1 -0
- package/web-ui/build/static/smalltalk-BLYA-Ag1.js +1 -0
- package/web-ui/build/static/smalltalk-BdMVmgN0.js +1 -0
- package/web-ui/build/static/smarty-DUYgBrje.js +1 -0
- package/web-ui/build/static/sml-EEhIaAvM.js +1 -0
- package/web-ui/build/static/sml-bQ27koeV.js +1 -0
- package/web-ui/build/static/solidity-U7x7-dFr.js +1 -0
- package/web-ui/build/static/solution-file-Cr03jaqW.js +1 -0
- package/web-ui/build/static/soy-lnGOhaRM.js +1 -0
- package/web-ui/build/static/sparql-BRm44B1P.js +1 -0
- package/web-ui/build/static/splunk-spl-DdrdBOQJ.js +1 -0
- package/web-ui/build/static/sqf-CDtvZjid.js +1 -0
- package/web-ui/build/static/sqf-wr3PtKhW.js +1 -0
- package/web-ui/build/static/sql-B1-8AkNe.js +1 -0
- package/web-ui/build/static/sql-zWEK1lPB.js +1 -0
- package/web-ui/build/static/sql_more-Ck0DuSs3.js +1 -0
- package/web-ui/build/static/squirrel-CfQEIe5h.js +1 -0
- package/web-ui/build/static/stan-BM1Wilpj.js +1 -0
- package/web-ui/build/static/stan-DFPCSU1l.js +1 -0
- package/web-ui/build/static/stata-BJ-qKfEg.js +1 -0
- package/web-ui/build/static/step21-fPKcuR3s.js +1 -0
- package/web-ui/build/static/stylus-BhqK2C03.js +1 -0
- package/web-ui/build/static/stylus-BxloRYSO.js +1 -0
- package/web-ui/build/static/subunit-CueM7bOY.js +1 -0
- package/web-ui/build/static/swift-CPgZZ0ja.js +1 -0
- package/web-ui/build/static/swift-CsEMsJ7g.js +1 -0
- package/web-ui/build/static/systemd-B1Wwkby4.js +1 -0
- package/web-ui/build/static/t4-cs-CL3Ca0dW.js +1 -0
- package/web-ui/build/static/t4-templating-BoV5iKxA.js +1 -0
- package/web-ui/build/static/t4-vb-BKXXzk5n.js +1 -0
- package/web-ui/build/static/taggerscript-aJQMdfVb.js +1 -0
- package/web-ui/build/static/tap-BBfQFbbW.js +1 -0
- package/web-ui/build/static/tap-CmCrAtSH.js +1 -0
- package/web-ui/build/static/tcl-B8xfoxf8.js +1 -0
- package/web-ui/build/static/tcl-CPzoU-PX.js +1 -0
- package/web-ui/build/static/textile-B99mXtsV.js +1 -0
- package/web-ui/build/static/thrift-Cd40Ii7J.js +1 -0
- package/web-ui/build/static/toml-DV5wxyQS.js +1 -0
- package/web-ui/build/static/tp-o2VorAT6.js +1 -0
- package/web-ui/build/static/tremor-Cs0K_i4_.js +1 -0
- package/web-ui/build/static/tsx-KG-mQur8.js +1 -0
- package/web-ui/build/static/tt2-M3GHOvjN.js +1 -0
- package/web-ui/build/static/turtle-D6o0UODZ.js +1 -0
- package/web-ui/build/static/twig-D7LOxPkH.js +1 -0
- package/web-ui/build/static/twig-SHSTj-jA.js +1 -0
- package/web-ui/build/static/typescript-BeIk_BLV.js +1 -0
- package/web-ui/build/static/typescript-Btz-ypJW.js +1 -0
- package/web-ui/build/static/typoscript-7jDBTKMM.js +1 -0
- package/web-ui/build/static/unrealscript-f2f2MAJa.js +1 -0
- package/web-ui/build/static/uorazor-c5VZAS6K.js +1 -0
- package/web-ui/build/static/uri-DY2cDkq-.js +1 -0
- package/web-ui/build/static/v-6ffK7TKq.js +1 -0
- package/web-ui/build/static/vala-BgOkjEeg.js +1 -0
- package/web-ui/build/static/vala-BvuDZGU_.js +1 -0
- package/web-ui/build/static/vbnet-Bdh9clH3.js +1 -0
- package/web-ui/build/static/vbnet-CDpcSndL.js +1 -0
- package/web-ui/build/static/vbscript-dH3gn1bx.js +1 -0
- package/web-ui/build/static/vbscript-html-a_tIfb0-.js +1 -0
- package/web-ui/build/static/velocity-DGDKyukB.js +1 -0
- package/web-ui/build/static/verilog-CtJaE20M.js +1 -0
- package/web-ui/build/static/verilog-CvdiugJe.js +1 -0
- package/web-ui/build/static/vhdl-CN1nxPYJ.js +1 -0
- package/web-ui/build/static/vhdl-JtjHb_oM.js +1 -0
- package/web-ui/build/static/vim-DBRKYGcU.js +1 -0
- package/web-ui/build/static/vim-DQiU261H.js +1 -0
- package/web-ui/build/static/visual-basic-D_daebxW.js +1 -0
- package/web-ui/build/static/warpscript-B4PIoyZp.js +1 -0
- package/web-ui/build/static/wasm-D6_O5K2p.js +1 -0
- package/web-ui/build/static/web-idl-D7BDrII0.js +1 -0
- package/web-ui/build/static/wiki-D-bqO098.js +1 -0
- package/web-ui/build/static/wolfram-NnogXigM.js +1 -0
- package/web-ui/build/static/wren-DwgJaCDU.js +1 -0
- package/web-ui/build/static/x86asm-B9-C3MH5.js +1 -0
- package/web-ui/build/static/xeora-wudvnBkY.js +1 -0
- package/web-ui/build/static/xl-BeBZDETk.js +1 -0
- package/web-ui/build/static/xml-DgNmhWin.js +1 -0
- package/web-ui/build/static/xml-doc-B2RShOT5.js +1 -0
- package/web-ui/build/static/xojo-C0HF7CVl.js +1 -0
- package/web-ui/build/static/xquery-CMss7jIw.js +1 -0
- package/web-ui/build/static/xquery-Dy1YImWg.js +1 -0
- package/web-ui/build/static/yaml--7oDAAKr.js +1 -0
- package/web-ui/build/static/yaml-1-HThDJz.js +1 -0
- package/web-ui/build/static/yang-CxleyLxS.js +1 -0
- package/web-ui/build/static/zephir-B7LMkND2.js +1 -0
- package/web-ui/build/static/zig-DST87v3k.js +1 -0
- package/web-ui/build/static/1c-DGpIT7i5.js +0 -1
- package/web-ui/build/static/abap-5wFDdWLh.js +0 -1
- package/web-ui/build/static/abnf-BP1dpNSE.js +0 -1
- package/web-ui/build/static/abnf-DBEIAl8g.js +0 -1
- package/web-ui/build/static/accesslog-CWSM_T5E.js +0 -1
- package/web-ui/build/static/actionscript-DONkco1J.js +0 -1
- package/web-ui/build/static/actionscript-FqBYk5er.js +0 -1
- package/web-ui/build/static/ada-C2JLRIaM.js +0 -1
- package/web-ui/build/static/ada-gKiygTRK.js +0 -1
- package/web-ui/build/static/agda-CkSODqK2.js +0 -1
- package/web-ui/build/static/al-BJ_YR6p7.js +0 -1
- package/web-ui/build/static/angelscript-Dg2byMGg.js +0 -1
- package/web-ui/build/static/antlr4-BnpyaFNr.js +0 -1
- package/web-ui/build/static/apache-Dffxsd7O.js +0 -1
- package/web-ui/build/static/apacheconf-DLitjtWj.js +0 -1
- package/web-ui/build/static/apex-Drr_IvU2.js +0 -1
- package/web-ui/build/static/apl-CF6qxmXG.js +0 -1
- package/web-ui/build/static/applescript-CjOlw3b_.js +0 -1
- package/web-ui/build/static/applescript-DjkSl1Ry.js +0 -1
- package/web-ui/build/static/aql-KwVmK1gP.js +0 -1
- package/web-ui/build/static/arcade-CENSXx0R.js +0 -1
- package/web-ui/build/static/arduino-B3Ta9Fll.js +0 -1
- package/web-ui/build/static/arduino-CzcsaB9_.js +0 -1
- package/web-ui/build/static/arff-CMJSVt_O.js +0 -1
- package/web-ui/build/static/armasm-0zSgSPB4.js +0 -1
- package/web-ui/build/static/asciidoc-B8K5ctWq.js +0 -1
- package/web-ui/build/static/asciidoc-bk2Sg6b6.js +0 -1
- package/web-ui/build/static/asm6502-ji6zm4FQ.js +0 -1
- package/web-ui/build/static/asmatmel-DJqObM4Y.js +0 -1
- package/web-ui/build/static/aspectj-DqQKI7J5.js +0 -1
- package/web-ui/build/static/aspnet-9cenTxW7.js +0 -1
- package/web-ui/build/static/autohotkey-C6EhiZvl.js +0 -1
- package/web-ui/build/static/autohotkey-sTGJOvMM.js +0 -1
- package/web-ui/build/static/autoit-B0Im8iQ1.js +0 -1
- package/web-ui/build/static/autoit-CO6pUD0H.js +0 -1
- package/web-ui/build/static/avisynth-OvOHTfj5.js +0 -1
- package/web-ui/build/static/avrasm-BLWZ5Mye.js +0 -1
- package/web-ui/build/static/avro-idl-BB2ODvnw.js +0 -1
- package/web-ui/build/static/awk-_jhMabQ0.js +0 -1
- package/web-ui/build/static/axapta-DdBRgoYy.js +0 -1
- package/web-ui/build/static/bash-CsaRGXBQ.js +0 -1
- package/web-ui/build/static/bash-CxLFkwAC.js +0 -1
- package/web-ui/build/static/basic-BJyy7JJE.js +0 -1
- package/web-ui/build/static/basic-CrMb-gv0.js +0 -1
- package/web-ui/build/static/batch-BvcykMe5.js +0 -1
- package/web-ui/build/static/bbcode-EOBuY5Y6.js +0 -1
- package/web-ui/build/static/bicep-QkDJBA34.js +0 -1
- package/web-ui/build/static/birb-TAOxKurn.js +0 -1
- package/web-ui/build/static/bison-BEK6cnad.js +0 -1
- package/web-ui/build/static/bnf-DfEODxsr.js +0 -1
- package/web-ui/build/static/bnf-DhbMjsuA.js +0 -1
- package/web-ui/build/static/brainfuck-BoVocOa7.js +0 -1
- package/web-ui/build/static/brainfuck-DDC5QXPK.js +0 -1
- package/web-ui/build/static/brightscript-DNN598w2.js +0 -1
- package/web-ui/build/static/bro-Cn_jjZ8P.js +0 -1
- package/web-ui/build/static/bsl-CMCN75Gu.js +0 -1
- package/web-ui/build/static/c-DbOGQnEJ.js +0 -1
- package/web-ui/build/static/c-kggwYFsy.js +0 -1
- package/web-ui/build/static/c-like-BIsuUvof.js +0 -1
- package/web-ui/build/static/cal-DpgMsBZE.js +0 -1
- package/web-ui/build/static/capnproto-C1AHYI-M.js +0 -1
- package/web-ui/build/static/ceylon-pvJffDe1.js +0 -1
- package/web-ui/build/static/cfscript-C1qylu52.js +0 -1
- package/web-ui/build/static/chaiscript-D417WKRI.js +0 -1
- package/web-ui/build/static/cil-CjbZHbcY.js +0 -1
- package/web-ui/build/static/clean-Dvc6R-F2.js +0 -1
- package/web-ui/build/static/clojure-CSVRQPMQ.js +0 -1
- package/web-ui/build/static/clojure-ig1Vkg7X.js +0 -1
- package/web-ui/build/static/clojure-repl-C1uyEabk.js +0 -1
- package/web-ui/build/static/cmake-DSbVcAB3.js +0 -1
- package/web-ui/build/static/cmake-Zp8kPwnH.js +0 -1
- package/web-ui/build/static/cobol-OsZSiK_P.js +0 -1
- package/web-ui/build/static/coffeescript-D8r0416S.js +0 -1
- package/web-ui/build/static/coffeescript-DCpgClxh.js +0 -1
- package/web-ui/build/static/concurnas-DKnsxUOc.js +0 -1
- package/web-ui/build/static/coq-BQFlywVI.js +0 -1
- package/web-ui/build/static/coq-BvS9mQB2.js +0 -1
- package/web-ui/build/static/cos-D3ze2791.js +0 -1
- package/web-ui/build/static/cpp-Bw-cV3P1.js +0 -1
- package/web-ui/build/static/cpp-vi1p7XpB.js +0 -1
- package/web-ui/build/static/crmsh-BClnJTeQ.js +0 -1
- package/web-ui/build/static/crystal-DGzOUYZq.js +0 -1
- package/web-ui/build/static/crystal-DMzk6EvA.js +0 -1
- package/web-ui/build/static/csharp-BTom8s2X.js +0 -1
- package/web-ui/build/static/csharp-Cp2V3jfR.js +0 -1
- package/web-ui/build/static/cshtml-Dmtt9Kto.js +0 -1
- package/web-ui/build/static/csp-WPVsLe9_.js +0 -1
- package/web-ui/build/static/csp-qddj5fu_.js +0 -1
- package/web-ui/build/static/css-B0FAm7kj.js +0 -1
- package/web-ui/build/static/css-extras-Bx3pvjiG.js +0 -1
- package/web-ui/build/static/csv-CH-edgS5.js +0 -1
- package/web-ui/build/static/cypher-c3G8Leew.js +0 -1
- package/web-ui/build/static/d-BMDSy22_.js +0 -1
- package/web-ui/build/static/d-BdH4oW8-.js +0 -1
- package/web-ui/build/static/dart-C-r72q-O.js +0 -1
- package/web-ui/build/static/dart-CwpBMrKa.js +0 -1
- package/web-ui/build/static/dataweave-BPvqdt4k.js +0 -1
- package/web-ui/build/static/dax-Eyy6ixcN.js +0 -1
- package/web-ui/build/static/delphi-DhEbPj_5.js +0 -1
- package/web-ui/build/static/dhall-Ct1L8sN1.js +0 -1
- package/web-ui/build/static/diff-CSTqCgwn.js +0 -1
- package/web-ui/build/static/diff-Da97B5vW.js +0 -1
- package/web-ui/build/static/django-DGit_lCg.js +0 -1
- package/web-ui/build/static/django-DPgqFB8k.js +0 -1
- package/web-ui/build/static/dns-DUyXuZ-a.js +0 -1
- package/web-ui/build/static/dns-zone-file-D79MDxVG.js +0 -1
- package/web-ui/build/static/docker-DTiy4o38.js +0 -1
- package/web-ui/build/static/dockerfile-CvwPP8wE.js +0 -1
- package/web-ui/build/static/dos-CaIUWxvb.js +0 -1
- package/web-ui/build/static/dot-D3504w6Y.js +0 -1
- package/web-ui/build/static/dsconfig-Smy1eeX_.js +0 -1
- package/web-ui/build/static/dts-DyTYSXZj.js +0 -1
- package/web-ui/build/static/dust-CrJyi6qA.js +0 -1
- package/web-ui/build/static/ebnf-C8nqfkBH.js +0 -1
- package/web-ui/build/static/ebnf-Cuh5Vh2-.js +0 -1
- package/web-ui/build/static/editorconfig-C7pTGl6n.js +0 -1
- package/web-ui/build/static/eiffel-C75MSJCA.js +0 -1
- package/web-ui/build/static/ejs-Dyo7DF5w.js +0 -1
- package/web-ui/build/static/elixir-D4yJefOc.js +0 -1
- package/web-ui/build/static/elixir-DKRow2SJ.js +0 -1
- package/web-ui/build/static/elm-CgbdDlkT.js +0 -1
- package/web-ui/build/static/elm-D3N-UgU0.js +0 -1
- package/web-ui/build/static/erb-BsITh8qW.js +0 -1
- package/web-ui/build/static/erb-lY_LyKyS.js +0 -1
- package/web-ui/build/static/erlang-BCnPiYmB.js +0 -1
- package/web-ui/build/static/erlang-JEghiPXc.js +0 -1
- package/web-ui/build/static/erlang-repl-DzU97ugC.js +0 -1
- package/web-ui/build/static/etlua-CsBo8cJa.js +0 -1
- package/web-ui/build/static/excel-formula-C2piiCYa.js +0 -1
- package/web-ui/build/static/excel-kqNypwQD.js +0 -1
- package/web-ui/build/static/factor-DZTOhkyU.js +0 -1
- package/web-ui/build/static/false-yLjhfaSw.js +0 -1
- package/web-ui/build/static/firestore-security-rules-oaQNoH8l.js +0 -1
- package/web-ui/build/static/fix-C9IfnTuS.js +0 -1
- package/web-ui/build/static/flix-EmJ_JhPo.js +0 -1
- package/web-ui/build/static/flow-DCUl7IAQ.js +0 -1
- package/web-ui/build/static/fortran-DvyxJmFN.js +0 -1
- package/web-ui/build/static/fortran-EEP9R3S5.js +0 -1
- package/web-ui/build/static/fsharp-D_98s3RX.js +0 -1
- package/web-ui/build/static/fsharp-Dt9jOO5G.js +0 -1
- package/web-ui/build/static/ftl-C8gMHWLo.js +0 -1
- package/web-ui/build/static/gams-BHxVPb4z.js +0 -1
- package/web-ui/build/static/gap-DFtyHk-q.js +0 -1
- package/web-ui/build/static/gauss-BwhJWUcg.js +0 -1
- package/web-ui/build/static/gcode-BvmXwp09.js +0 -1
- package/web-ui/build/static/gcode-gWcD6Vc7.js +0 -1
- package/web-ui/build/static/gdscript-btHoX8RE.js +0 -1
- package/web-ui/build/static/gedcom-MgPs9iqh.js +0 -1
- package/web-ui/build/static/gherkin-B9c_Q16A.js +0 -1
- package/web-ui/build/static/gherkin-BvOgkK6h.js +0 -1
- package/web-ui/build/static/git-D9XWOVcQ.js +0 -1
- package/web-ui/build/static/glsl-CshBHxHY.js +0 -1
- package/web-ui/build/static/glsl-fNRUMTDr.js +0 -1
- package/web-ui/build/static/gml-B78deHK8.js +0 -1
- package/web-ui/build/static/gml-Cj7d2u8O.js +0 -1
- package/web-ui/build/static/gn-CJLD-mF1.js +0 -1
- package/web-ui/build/static/go-CT93BEkL.js +0 -1
- package/web-ui/build/static/go-CTTlNuQO.js +0 -1
- package/web-ui/build/static/go-module-BgnXboUE.js +0 -1
- package/web-ui/build/static/golo-2S5tXS-l.js +0 -1
- package/web-ui/build/static/gradle-8W8DCcWJ.js +0 -1
- package/web-ui/build/static/graphql-DZfp6FNU.js +0 -1
- package/web-ui/build/static/groovy-BfsyMb3X.js +0 -1
- package/web-ui/build/static/groovy-Dxov7ENz.js +0 -1
- package/web-ui/build/static/haml-BlUFsdVV.js +0 -1
- package/web-ui/build/static/haml-CjVj6vvW.js +0 -1
- package/web-ui/build/static/handlebars-DxrQFkyA.js +0 -1
- package/web-ui/build/static/handlebars-FE6fotYl.js +0 -1
- package/web-ui/build/static/haskell-B6z0RCD_.js +0 -1
- package/web-ui/build/static/haskell-JBFmJTRy.js +0 -1
- package/web-ui/build/static/haxe-BtMZMi-_.js +0 -1
- package/web-ui/build/static/haxe-C1J8n-fH.js +0 -1
- package/web-ui/build/static/hcl-DJP-bFWE.js +0 -1
- package/web-ui/build/static/hlsl-DrGjhs1b.js +0 -1
- package/web-ui/build/static/hoon-Cg-ZhqIT.js +0 -1
- package/web-ui/build/static/hpkp-D07vgmoZ.js +0 -1
- package/web-ui/build/static/hsp-CsypPWoA.js +0 -1
- package/web-ui/build/static/hsts-B6DMRxvP.js +0 -1
- package/web-ui/build/static/htmlbars-BI7_Hw4e.js +0 -1
- package/web-ui/build/static/http-90ihEi4s.js +0 -1
- package/web-ui/build/static/http-Dp4QXj9E.js +0 -1
- package/web-ui/build/static/hy-BMgKvP4K.js +0 -1
- package/web-ui/build/static/ichigojam-D6wKvJDb.js +0 -1
- package/web-ui/build/static/icon-CrgkmCwl.js +0 -1
- package/web-ui/build/static/icu-message-format-Bi2JxCXs.js +0 -1
- package/web-ui/build/static/idris-DbUsyZt5.js +0 -1
- package/web-ui/build/static/iecst-CQZ9t8fW.js +0 -1
- package/web-ui/build/static/ignore-BaFgtNMs.js +0 -1
- package/web-ui/build/static/index-DEWSWosh.css +0 -1
- package/web-ui/build/static/index-Di1bjCFA.js +0 -13
- package/web-ui/build/static/index-otR_WSsL.js +0 -1
- package/web-ui/build/static/index-whZPU4as.js +0 -1183
- package/web-ui/build/static/inform7-ClyX1Gro.js +0 -1
- package/web-ui/build/static/inform7-tZHBS5XP.js +0 -1
- package/web-ui/build/static/ini-BrP5JNYL.js +0 -1
- package/web-ui/build/static/ini-CVkrAhwV.js +0 -1
- package/web-ui/build/static/io-BJ1Y6Bdc.js +0 -1
- package/web-ui/build/static/irpf90-fjjcKS_8.js +0 -1
- package/web-ui/build/static/isbl-ClpvfUIz.js +0 -1
- package/web-ui/build/static/j-CICW77xS.js +0 -1
- package/web-ui/build/static/java-B9DFK-0E.js +0 -1
- package/web-ui/build/static/java-BL_6rYko.js +0 -1
- package/web-ui/build/static/javadoc-Cc4HKpKK.js +0 -1
- package/web-ui/build/static/javadoclike-CgNkUDOm.js +0 -1
- package/web-ui/build/static/javascript-CM40ZECq.js +0 -1
- package/web-ui/build/static/javastacktrace-BHSqXfG5.js +0 -1
- package/web-ui/build/static/jboss-cli-Bv5NhVSZ.js +0 -1
- package/web-ui/build/static/jexl--Ohk_keA.js +0 -1
- package/web-ui/build/static/jolie-DMTN5Vdf.js +0 -1
- package/web-ui/build/static/jq-nXRLldXX.js +0 -1
- package/web-ui/build/static/js-extras-eLwv3frs.js +0 -1
- package/web-ui/build/static/js-templates-Ca0owlrg.js +0 -1
- package/web-ui/build/static/jsdoc-KERXp0da.js +0 -1
- package/web-ui/build/static/json-BTjLaRsy.js +0 -1
- package/web-ui/build/static/json-p7pU0qdW.js +0 -1
- package/web-ui/build/static/json5-Cxjy1udc.js +0 -1
- package/web-ui/build/static/jsonp-CO52H7Gy.js +0 -1
- package/web-ui/build/static/jsstacktrace-8YKfoyJP.js +0 -1
- package/web-ui/build/static/jsx-Ct_05KbM.js +0 -1
- package/web-ui/build/static/julia-23I1ubCE.js +0 -1
- package/web-ui/build/static/julia-d8rVGed_.js +0 -1
- package/web-ui/build/static/julia-repl-mwnHedW_.js +0 -1
- package/web-ui/build/static/keepalived-E85Rx_fF.js +0 -1
- package/web-ui/build/static/keyman-aWd3QUDq.js +0 -1
- package/web-ui/build/static/kotlin-Cu370hQq.js +0 -1
- package/web-ui/build/static/kotlin-DoJ2WnmZ.js +0 -1
- package/web-ui/build/static/kumir-oiOgqcQO.js +0 -1
- package/web-ui/build/static/kusto-Bp-B02K5.js +0 -1
- package/web-ui/build/static/lasso-BxoQVwOO.js +0 -1
- package/web-ui/build/static/latex-CANm5vsX.js +0 -1
- package/web-ui/build/static/latex-PMroeNch.js +0 -1
- package/web-ui/build/static/latte-2ErU_2XF.js +0 -1
- package/web-ui/build/static/ldif-ChPn_F7o.js +0 -1
- package/web-ui/build/static/leaf-UkCugDgG.js +0 -1
- package/web-ui/build/static/less-CCH5RA89.js +0 -1
- package/web-ui/build/static/less-CGZbVU1g.js +0 -1
- package/web-ui/build/static/lilypond-BoyM37sv.js +0 -1
- package/web-ui/build/static/liquid-DGJVpRBi.js +0 -1
- package/web-ui/build/static/lisp-93nne61u.js +0 -1
- package/web-ui/build/static/lisp-DYjIRsXz.js +0 -1
- package/web-ui/build/static/livecodeserver-CfNaxIE4.js +0 -1
- package/web-ui/build/static/livescript-C8kDlQkz.js +0 -1
- package/web-ui/build/static/livescript-CoarnRHq.js +0 -1
- package/web-ui/build/static/llvm-CBVyNmAh.js +0 -1
- package/web-ui/build/static/llvm-DGxq8a7u.js +0 -1
- package/web-ui/build/static/log-BivgwFql.js +0 -1
- package/web-ui/build/static/lolcode-l5sK2cZz.js +0 -1
- package/web-ui/build/static/lsl-Xm44xLRQ.js +0 -1
- package/web-ui/build/static/lua-CGvrzfKp.js +0 -1
- package/web-ui/build/static/lua-nHwXeY4c.js +0 -1
- package/web-ui/build/static/magma-DmNItmna.js +0 -1
- package/web-ui/build/static/makefile-CKJNNHGb.js +0 -1
- package/web-ui/build/static/makefile-DI6y5Qml.js +0 -1
- package/web-ui/build/static/markdown-BgpbxKd-.js +0 -1
- package/web-ui/build/static/markdown-CvcxA4yk.js +0 -1
- package/web-ui/build/static/markup-templating-DijqesiA.js +0 -1
- package/web-ui/build/static/mathematica-Cxll1Q10.js +0 -1
- package/web-ui/build/static/matlab-BJo2T1A-.js +0 -1
- package/web-ui/build/static/matlab-C6DlZX4l.js +0 -1
- package/web-ui/build/static/maxima-DJXO4sbL.js +0 -1
- package/web-ui/build/static/maxscript-DdLpUYBs.js +0 -1
- package/web-ui/build/static/mel-BIpfnSyZ.js +0 -1
- package/web-ui/build/static/mel-BYcTUZJW.js +0 -1
- package/web-ui/build/static/mercury-C_LSpbD8.js +0 -1
- package/web-ui/build/static/mermaid-D9yBWnrT.js +0 -1
- package/web-ui/build/static/mipsasm-nR_K2Ue-.js +0 -1
- package/web-ui/build/static/mizar-BeLUPncD.js +0 -1
- package/web-ui/build/static/mizar-BesIbZd9.js +0 -1
- package/web-ui/build/static/mojolicious-cBx3OWa-.js +0 -1
- package/web-ui/build/static/mongodb-DTWKy9ac.js +0 -1
- package/web-ui/build/static/monkey-B72bZC3c.js +0 -1
- package/web-ui/build/static/monkey-G9XELYPQ.js +0 -1
- package/web-ui/build/static/moonscript-BXYVQiqj.js +0 -1
- package/web-ui/build/static/moonscript-sDd-5knz.js +0 -1
- package/web-ui/build/static/n1ql-0vKSfFAO.js +0 -1
- package/web-ui/build/static/n1ql-C9_BSZfz.js +0 -1
- package/web-ui/build/static/n4js-B7Ct8dds.js +0 -1
- package/web-ui/build/static/nand2tetris-hdl-p9gpphTM.js +0 -1
- package/web-ui/build/static/naniscript-6ZVr8Aug.js +0 -1
- package/web-ui/build/static/nasm-Ca73yTUt.js +0 -1
- package/web-ui/build/static/neon-DNP49oyX.js +0 -1
- package/web-ui/build/static/nevod-Qhgt7Bce.js +0 -1
- package/web-ui/build/static/nginx-D5e7lu62.js +0 -1
- package/web-ui/build/static/nginx-DobnyESB.js +0 -1
- package/web-ui/build/static/nim-BPBivUOV.js +0 -1
- package/web-ui/build/static/nim-Baoug1Wa.js +0 -1
- package/web-ui/build/static/nix-CSPTQs5y.js +0 -1
- package/web-ui/build/static/nix-Dk4eNw49.js +0 -1
- package/web-ui/build/static/node-repl-NJNL8VFR.js +0 -1
- package/web-ui/build/static/nsis-BZ0oMzEw.js +0 -1
- package/web-ui/build/static/nsis-CKPCjtCU.js +0 -1
- package/web-ui/build/static/objectivec-BkfIRhhV.js +0 -1
- package/web-ui/build/static/objectivec-CnQgqhbJ.js +0 -1
- package/web-ui/build/static/ocaml-9rGNzRrK.js +0 -1
- package/web-ui/build/static/ocaml-CTolCqxL.js +0 -1
- package/web-ui/build/static/opencl-9Q3vRDxv.js +0 -1
- package/web-ui/build/static/openqasm-D2QiuFBp.js +0 -1
- package/web-ui/build/static/openscad-C3HyuzpB.js +0 -1
- package/web-ui/build/static/oxygene-4gi-VYy_.js +0 -1
- package/web-ui/build/static/oz-BGDEB-1A.js +0 -1
- package/web-ui/build/static/parigp-CfZzp1uE.js +0 -1
- package/web-ui/build/static/parser-UbGteTcy.js +0 -1
- package/web-ui/build/static/parser3-C-Jx-fy7.js +0 -1
- package/web-ui/build/static/pascal-D1_R0gW-.js +0 -1
- package/web-ui/build/static/pascaligo-B8C-98Np.js +0 -1
- package/web-ui/build/static/pcaxis-TGnlUKNs.js +0 -1
- package/web-ui/build/static/peoplecode-C5Vf1AH0.js +0 -1
- package/web-ui/build/static/perl-CBp1N62T.js +0 -1
- package/web-ui/build/static/perl-Z59j904t.js +0 -1
- package/web-ui/build/static/pf-Cq8B_xwQ.js +0 -1
- package/web-ui/build/static/pgsql-ofJbUHkL.js +0 -1
- package/web-ui/build/static/php-OlH7HLQJ.js +0 -1
- package/web-ui/build/static/php-extras-GqtrxLuk.js +0 -1
- package/web-ui/build/static/php-r09kMDOB.js +0 -1
- package/web-ui/build/static/php-template-18uT97Qo.js +0 -1
- package/web-ui/build/static/phpdoc-9tRFvup9.js +0 -1
- package/web-ui/build/static/plaintext-DsYT6Mu-.js +0 -1
- package/web-ui/build/static/plsql-RhWQNJVb.js +0 -1
- package/web-ui/build/static/pony-DD6JMLYI.js +0 -1
- package/web-ui/build/static/powerquery-CALow-bt.js +0 -1
- package/web-ui/build/static/powershell-C2QvIuKF.js +0 -1
- package/web-ui/build/static/powershell-yrbJEhCh.js +0 -1
- package/web-ui/build/static/processing-1T5w_Q03.js +0 -1
- package/web-ui/build/static/processing-DBim_dO-.js +0 -1
- package/web-ui/build/static/profile-Cdloh8mZ.js +0 -1
- package/web-ui/build/static/prolog-DRSsNnns.js +0 -1
- package/web-ui/build/static/prolog-D_ajweDr.js +0 -1
- package/web-ui/build/static/promql-BRuwn6Bn.js +0 -1
- package/web-ui/build/static/properties-D5Wyl4X4.js +0 -1
- package/web-ui/build/static/properties-kn4fl1bl.js +0 -1
- package/web-ui/build/static/protobuf-BMO76zWi.js +0 -1
- package/web-ui/build/static/protobuf-CTUCF-U-.js +0 -1
- package/web-ui/build/static/psl-CiqYdQbY.js +0 -1
- package/web-ui/build/static/pug-BLE2Qayj.js +0 -1
- package/web-ui/build/static/puppet-CFKLWXft.js +0 -1
- package/web-ui/build/static/puppet-DQci0Dl5.js +0 -1
- package/web-ui/build/static/pure-D2h_GynV.js +0 -1
- package/web-ui/build/static/purebasic-BF8MVw8V.js +0 -1
- package/web-ui/build/static/purebasic-BTtHiCkh.js +0 -1
- package/web-ui/build/static/purescript-D1ZSh-sH.js +0 -1
- package/web-ui/build/static/python-Cp9_Vdhb.js +0 -1
- package/web-ui/build/static/python-DdgNw8IW.js +0 -1
- package/web-ui/build/static/python-repl-DvK89VMC.js +0 -1
- package/web-ui/build/static/q-COaIgwhT.js +0 -1
- package/web-ui/build/static/q-Cm0dQkW8.js +0 -1
- package/web-ui/build/static/qml-BpsOqqJM.js +0 -1
- package/web-ui/build/static/qml-BziQXlU4.js +0 -1
- package/web-ui/build/static/qore-Cutz6g-2.js +0 -1
- package/web-ui/build/static/qsharp-B16619X1.js +0 -1
- package/web-ui/build/static/r-CFUIj5Hd.js +0 -1
- package/web-ui/build/static/r-CPrwCi5w.js +0 -1
- package/web-ui/build/static/racket-Bh08DFXF.js +0 -1
- package/web-ui/build/static/reason-BxjDq4e-.js +0 -1
- package/web-ui/build/static/reasonml-Ds5SsGP8.js +0 -1
- package/web-ui/build/static/regex-DhBIDIMI.js +0 -1
- package/web-ui/build/static/rego-DCwxZXcB.js +0 -1
- package/web-ui/build/static/renpy-C2fuQfqb.js +0 -1
- package/web-ui/build/static/rest-C52ZpxWQ.js +0 -1
- package/web-ui/build/static/rib-Cbl2Mzyj.js +0 -1
- package/web-ui/build/static/rip-BTOu5ZIE.js +0 -1
- package/web-ui/build/static/roboconf-3Oi2wuVk.js +0 -1
- package/web-ui/build/static/roboconf-ndLZLE39.js +0 -1
- package/web-ui/build/static/robotframework-BzHXiIj1.js +0 -1
- package/web-ui/build/static/routeros-CkpPoqx-.js +0 -1
- package/web-ui/build/static/rsl-C0bwOQ38.js +0 -1
- package/web-ui/build/static/ruby-C_hIhtuQ.js +0 -1
- package/web-ui/build/static/ruby-DvKfZPzj.js +0 -1
- package/web-ui/build/static/ruleslanguage-CbZJlddz.js +0 -1
- package/web-ui/build/static/rust-BFPIhB-X.js +0 -1
- package/web-ui/build/static/rust-sBpUq-qE.js +0 -1
- package/web-ui/build/static/sas-BCXvYN9x.js +0 -1
- package/web-ui/build/static/sas-D7GAsTY3.js +0 -1
- package/web-ui/build/static/sass-BdaErGMN.js +0 -1
- package/web-ui/build/static/scala-Cj81oCl9.js +0 -1
- package/web-ui/build/static/scala-CvbksfY6.js +0 -1
- package/web-ui/build/static/scheme-BM5ZqKnl.js +0 -1
- package/web-ui/build/static/scheme-BPvlu9Tk.js +0 -1
- package/web-ui/build/static/scilab-CJanLKQN.js +0 -1
- package/web-ui/build/static/scss-C53YF_7f.js +0 -1
- package/web-ui/build/static/scss-DPp8UZbr.js +0 -1
- package/web-ui/build/static/shell-CC9bQXMe.js +0 -1
- package/web-ui/build/static/shell-session-CuR3fbf-.js +0 -1
- package/web-ui/build/static/smali-CUgLls3D.js +0 -1
- package/web-ui/build/static/smali-YODSX8qt.js +0 -1
- package/web-ui/build/static/smalltalk-BMJQ4bbs.js +0 -1
- package/web-ui/build/static/smalltalk-BVGY3CTl.js +0 -1
- package/web-ui/build/static/smarty-C9aNt4-p.js +0 -1
- package/web-ui/build/static/sml-C3BIHhfq.js +0 -1
- package/web-ui/build/static/sml-DTipyRmY.js +0 -1
- package/web-ui/build/static/solidity-1yuPUqoC.js +0 -1
- package/web-ui/build/static/solution-file-BgzK4GOU.js +0 -1
- package/web-ui/build/static/soy-CFJXRvqc.js +0 -1
- package/web-ui/build/static/sparql-CAosYMpl.js +0 -1
- package/web-ui/build/static/splunk-spl-DkINtWr8.js +0 -1
- package/web-ui/build/static/sqf-DbrWIS2M.js +0 -1
- package/web-ui/build/static/sqf-nq8Q9J2W.js +0 -1
- package/web-ui/build/static/sql-9bwClhZQ.js +0 -1
- package/web-ui/build/static/sql-CqPkY-lX.js +0 -1
- package/web-ui/build/static/sql_more-CsY5ts77.js +0 -1
- package/web-ui/build/static/squirrel-BuqtzRBD.js +0 -1
- package/web-ui/build/static/stan-BNxBSglc.js +0 -1
- package/web-ui/build/static/stan-CZVMc34l.js +0 -1
- package/web-ui/build/static/stata-DKnVdHCd.js +0 -1
- package/web-ui/build/static/step21-Cu_TaBGF.js +0 -1
- package/web-ui/build/static/stylus-BS7-OJew.js +0 -1
- package/web-ui/build/static/stylus-DtFrp1Nk.js +0 -1
- package/web-ui/build/static/subunit-DDCoWkkc.js +0 -1
- package/web-ui/build/static/swift-BaguUZbl.js +0 -1
- package/web-ui/build/static/swift-mwBsb8Bx.js +0 -1
- package/web-ui/build/static/systemd-D6PpyDKk.js +0 -1
- package/web-ui/build/static/t4-cs-Cem8g4Ck.js +0 -1
- package/web-ui/build/static/t4-templating-BZo-HjmD.js +0 -1
- package/web-ui/build/static/t4-vb-B4oVnKa4.js +0 -1
- package/web-ui/build/static/taggerscript-DweAZ5pw.js +0 -1
- package/web-ui/build/static/tap-DpuvKHHF.js +0 -1
- package/web-ui/build/static/tap-hUKmJObZ.js +0 -1
- package/web-ui/build/static/tcl-BUvhAi7u.js +0 -1
- package/web-ui/build/static/tcl-Dsck63d8.js +0 -1
- package/web-ui/build/static/textile-CgKbqJ-j.js +0 -1
- package/web-ui/build/static/thrift-B5H6rApp.js +0 -1
- package/web-ui/build/static/toml-DggTpfOo.js +0 -1
- package/web-ui/build/static/tp-CazB2P2X.js +0 -1
- package/web-ui/build/static/tremor-B1jy7S5p.js +0 -1
- package/web-ui/build/static/tsx-BqF2lVDi.js +0 -1
- package/web-ui/build/static/tt2-BNoNXpEe.js +0 -1
- package/web-ui/build/static/turtle-B0evd5mn.js +0 -1
- package/web-ui/build/static/twig-B5A7nMdv.js +0 -1
- package/web-ui/build/static/twig-DZnLWvh8.js +0 -1
- package/web-ui/build/static/typescript-Bbe_P093.js +0 -1
- package/web-ui/build/static/typescript-BfhvmSSG.js +0 -1
- package/web-ui/build/static/typoscript-BjuZEIgw.js +0 -1
- package/web-ui/build/static/unrealscript-C3iUCFRi.js +0 -1
- package/web-ui/build/static/uorazor-CbZXwzIj.js +0 -1
- package/web-ui/build/static/uri-xMPSnp6m.js +0 -1
- package/web-ui/build/static/v-BKcGo5I6.js +0 -1
- package/web-ui/build/static/vala-BRoBE4am.js +0 -1
- package/web-ui/build/static/vala-B__Iyrma.js +0 -1
- package/web-ui/build/static/vbnet-DBxlMRvN.js +0 -1
- package/web-ui/build/static/vbnet-DjAXt5BE.js +0 -1
- package/web-ui/build/static/vbscript-BNA4oANi.js +0 -1
- package/web-ui/build/static/vbscript-html-o8ckLPKG.js +0 -1
- package/web-ui/build/static/velocity-D7sc5ggA.js +0 -1
- package/web-ui/build/static/verilog-BWJfMIng.js +0 -1
- package/web-ui/build/static/verilog-jW2GPC--.js +0 -1
- package/web-ui/build/static/vhdl-BIVlXRPa.js +0 -1
- package/web-ui/build/static/vhdl-BeqdhhxD.js +0 -1
- package/web-ui/build/static/vim-712lI4-g.js +0 -1
- package/web-ui/build/static/vim-DMROTzr0.js +0 -1
- package/web-ui/build/static/visual-basic-CQfbM-ta.js +0 -1
- package/web-ui/build/static/warpscript-DFAvCXFQ.js +0 -1
- package/web-ui/build/static/wasm-CiYoxBl0.js +0 -1
- package/web-ui/build/static/web-idl-DoCkPK8y.js +0 -1
- package/web-ui/build/static/wiki-bvz0AGzB.js +0 -1
- package/web-ui/build/static/wolfram-fBuyFEgU.js +0 -1
- package/web-ui/build/static/wren-DvATFxjF.js +0 -1
- package/web-ui/build/static/x86asm-r4bPbUR_.js +0 -1
- package/web-ui/build/static/xeora-B6iOnDJY.js +0 -1
- package/web-ui/build/static/xl-Ce6B5slc.js +0 -1
- package/web-ui/build/static/xml-DNjyPmhQ.js +0 -1
- package/web-ui/build/static/xml-doc-DydogmZD.js +0 -1
- package/web-ui/build/static/xojo-DCQLltvr.js +0 -1
- package/web-ui/build/static/xquery-C-fAnA0H.js +0 -1
- package/web-ui/build/static/xquery-CNeqzhLO.js +0 -1
- package/web-ui/build/static/yaml-BsVaGsk5.js +0 -1
- package/web-ui/build/static/yaml-kVZvwv_C.js +0 -1
- package/web-ui/build/static/yang-B_gq9JEq.js +0 -1
- package/web-ui/build/static/zephir-ECIXgXhX.js +0 -1
- package/web-ui/build/static/zig-DY325EKG.js +0 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the TASK DISCIPLINE signal — `currentFocus` returned on
|
|
3
|
+
* every taskmanager response — and the OPERATING POSTURE guideline
|
|
4
|
+
* that pairs with it.
|
|
5
|
+
*
|
|
6
|
+
* Production observation (scripts/memory-bench/live-v2-*,
|
|
7
|
+
* agent-agent-v2-v2-s2-multi-topic-1779570320941): Kimi-K2.6 and gpt-5.4
|
|
8
|
+
* lost task focus after cascading tool errors and silently reverted
|
|
9
|
+
* to a prior task instead of completing the current one. The fix is
|
|
10
|
+
* two-pronged:
|
|
11
|
+
* 1. Surface `currentFocus` on every taskmanager response so the
|
|
12
|
+
* anchor stays visible across error cascades.
|
|
13
|
+
* 2. OPERATING POSTURE explicitly tells the agent: only one task
|
|
14
|
+
* in_progress at a time, transition before working, finish or
|
|
15
|
+
* release before switching.
|
|
16
|
+
*/
|
|
17
|
+
import { describe, test, expect } from '@jest/globals';
|
|
18
|
+
import TaskManagerTool from '../taskManagerTool.js';
|
|
19
|
+
import { BaseTool, ToolsRegistry } from '../baseTool.js';
|
|
20
|
+
|
|
21
|
+
const SILENT_LOGGER = { info() {}, warn() {}, error() {}, debug() {} };
|
|
22
|
+
|
|
23
|
+
function makeTool() {
|
|
24
|
+
const tool = new TaskManagerTool({ description: 'test' });
|
|
25
|
+
tool.logger = SILENT_LOGGER;
|
|
26
|
+
return tool;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe('_buildCurrentFocus — task-discipline signal', () => {
|
|
30
|
+
test('ok=true when exactly one task is in_progress', () => {
|
|
31
|
+
const focus = makeTool()._buildCurrentFocus([
|
|
32
|
+
{ id: 'task-1', title: 'Polish README', description: 'Rewrite intro', status: 'in_progress' },
|
|
33
|
+
{ id: 'task-2', title: 'Other thing', description: '...', status: 'pending' },
|
|
34
|
+
]);
|
|
35
|
+
expect(focus.ok).toBe(true);
|
|
36
|
+
expect(focus.inProgressCount).toBe(1);
|
|
37
|
+
expect(focus.current).toMatchObject({
|
|
38
|
+
taskId: 'task-1', title: 'Polish README', description: 'Rewrite intro',
|
|
39
|
+
});
|
|
40
|
+
expect(focus.warning).toBeUndefined();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('ok=false with warning when 0 tasks are in_progress', () => {
|
|
44
|
+
const focus = makeTool()._buildCurrentFocus([
|
|
45
|
+
{ id: 'task-1', title: 'X', description: '...', status: 'pending' },
|
|
46
|
+
{ id: 'task-2', title: 'Y', description: '...', status: 'completed' },
|
|
47
|
+
]);
|
|
48
|
+
expect(focus.ok).toBe(false);
|
|
49
|
+
expect(focus.inProgressCount).toBe(0);
|
|
50
|
+
expect(focus.current).toBeNull();
|
|
51
|
+
expect(focus.warning).toMatch(/in_progress/);
|
|
52
|
+
expect(focus.warning).toMatch(/BEFORE/);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('ok=false with warning when 2+ tasks are in_progress', () => {
|
|
56
|
+
const focus = makeTool()._buildCurrentFocus([
|
|
57
|
+
{ id: 'task-1', title: 'A', description: '...', status: 'in_progress' },
|
|
58
|
+
{ id: 'task-2', title: 'B', description: '...', status: 'in_progress' },
|
|
59
|
+
{ id: 'task-3', title: 'C', description: '...', status: 'pending' },
|
|
60
|
+
]);
|
|
61
|
+
expect(focus.ok).toBe(false);
|
|
62
|
+
expect(focus.inProgressCount).toBe(2);
|
|
63
|
+
expect(Array.isArray(focus.current)).toBe(true);
|
|
64
|
+
expect(focus.current).toHaveLength(2);
|
|
65
|
+
expect(focus.warning).toMatch(/Multiple tasks/);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('empty task list reports 0 in_progress with warning', () => {
|
|
69
|
+
const focus = makeTool()._buildCurrentFocus([]);
|
|
70
|
+
expect(focus.ok).toBe(false);
|
|
71
|
+
expect(focus.inProgressCount).toBe(0);
|
|
72
|
+
expect(focus.current).toBeNull();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test('null/undefined input handled gracefully (no crash)', () => {
|
|
76
|
+
expect(() => makeTool()._buildCurrentFocus(null)).not.toThrow();
|
|
77
|
+
expect(() => makeTool()._buildCurrentFocus(undefined)).not.toThrow();
|
|
78
|
+
const f = makeTool()._buildCurrentFocus(null);
|
|
79
|
+
expect(f.inProgressCount).toBe(0);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test('long descriptions are truncated to 140 chars', () => {
|
|
83
|
+
const long = 'x'.repeat(500);
|
|
84
|
+
const focus = makeTool()._buildCurrentFocus([
|
|
85
|
+
{ id: 'task-1', title: 'T', description: long, status: 'in_progress' },
|
|
86
|
+
]);
|
|
87
|
+
expect(focus.current.description.length).toBeLessThanOrEqual(141);
|
|
88
|
+
expect(focus.current.description.endsWith('…')).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test('non-string description is coerced to empty (no crash)', () => {
|
|
92
|
+
const focus = makeTool()._buildCurrentFocus([
|
|
93
|
+
{ id: 'task-1', title: 'T', description: null, status: 'in_progress' },
|
|
94
|
+
]);
|
|
95
|
+
expect(focus.current.description).toBe('');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
describe('OPERATING POSTURE — TASK DISCIPLINE section', () => {
|
|
100
|
+
// The OPERATING POSTURE block lives in baseTool.js and is built per
|
|
101
|
+
// agent based on its capabilities. We construct a BaseTool-derived
|
|
102
|
+
// tool registry stub and verify the block content directly.
|
|
103
|
+
function buildOperatingPosture(capabilities) {
|
|
104
|
+
// Use the real ToolsRegistry — it's the class that owns
|
|
105
|
+
// generateToolDescriptionsForPrompt. Register fake tools matching
|
|
106
|
+
// the capability list so the block emits its sections.
|
|
107
|
+
const reg = new ToolsRegistry(SILENT_LOGGER);
|
|
108
|
+
for (const id of capabilities) {
|
|
109
|
+
reg.tools.set(id, { id, getDescription: () => `# ${id}` });
|
|
110
|
+
}
|
|
111
|
+
return reg.generateToolDescriptionsForPrompt(capabilities);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
test('section appears when taskmanager capability is present', () => {
|
|
115
|
+
const block = buildOperatingPosture(['memory', 'taskmanager']);
|
|
116
|
+
expect(block).toMatch(/TASK DISCIPLINE/);
|
|
117
|
+
expect(block).toMatch(/ONE.*task.*in_progress/);
|
|
118
|
+
expect(block).toMatch(/Transition first, then work/);
|
|
119
|
+
expect(block).toMatch(/Finish or release/);
|
|
120
|
+
expect(block).toMatch(/Anchor on tool failures/);
|
|
121
|
+
expect(block).toMatch(/currentFocus/);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test('section does NOT appear without taskmanager capability', () => {
|
|
125
|
+
const block = buildOperatingPosture(['memory']);
|
|
126
|
+
expect(block).not.toMatch(/TASK DISCIPLINE/);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('section guidance is descriptive of cognitive effort, not bureaucratic checklist', () => {
|
|
130
|
+
// The aim is "task list reflects actual work", not "fill in fields".
|
|
131
|
+
const block = buildOperatingPosture(['memory', 'taskmanager']);
|
|
132
|
+
expect(block).toMatch(/cognitive effort/);
|
|
133
|
+
// Should describe what to do on tool failures — that's the main
|
|
134
|
+
// failure mode we observed.
|
|
135
|
+
expect(block).toMatch(/tool.*fail/i);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for updateTask's status-transition handler.
|
|
3
|
+
*
|
|
4
|
+
* Covers the in_progress entry handler that:
|
|
5
|
+
* - Auto-loads `[memory:mem-...]` referenced memory into result.attachedMemory
|
|
6
|
+
* - Emits result.memoryNudge when no memory is attached
|
|
7
|
+
* - Surfaces a not-found error when the referenced memory was deleted
|
|
8
|
+
* - Does nothing on non-transitioning updates (already in_progress)
|
|
9
|
+
* - Does nothing for transitions to other statuses (e.g. blocked)
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { jest, describe, test, expect, beforeEach } from '@jest/globals';
|
|
13
|
+
import { createMockLogger } from '../../__test-utils__/mockFactories.js';
|
|
14
|
+
|
|
15
|
+
const mockLoadMemories = jest.fn();
|
|
16
|
+
const mockInitialize = jest.fn().mockResolvedValue(undefined);
|
|
17
|
+
const mockAddMemory = jest.fn();
|
|
18
|
+
jest.unstable_mockModule('../../services/memoryService.js', () => ({
|
|
19
|
+
getMemoryService: jest.fn(() => ({
|
|
20
|
+
initialize: mockInitialize,
|
|
21
|
+
addMemory: mockAddMemory,
|
|
22
|
+
loadMemories: mockLoadMemories,
|
|
23
|
+
})),
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
let uuidCounter = 0;
|
|
27
|
+
jest.unstable_mockModule('uuid', () => ({
|
|
28
|
+
v4: jest.fn(() => `mock-uuid-${++uuidCounter}`),
|
|
29
|
+
}));
|
|
30
|
+
|
|
31
|
+
const { default: TaskManagerTool } = await import('../taskManagerTool.js');
|
|
32
|
+
|
|
33
|
+
function makeTool() {
|
|
34
|
+
const tool = new TaskManagerTool({ description: 'test' });
|
|
35
|
+
tool.logger = createMockLogger();
|
|
36
|
+
return tool;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function makeContext({ taskList } = {}) {
|
|
40
|
+
const agent = {
|
|
41
|
+
id: 'agent-1',
|
|
42
|
+
name: 'Trans Test',
|
|
43
|
+
capabilities: ['memory', 'tools'],
|
|
44
|
+
taskList: taskList || { tasks: [], lastUpdated: new Date().toISOString() },
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
agent,
|
|
48
|
+
context: {
|
|
49
|
+
agentId: 'agent-1',
|
|
50
|
+
agentName: 'Trans Test',
|
|
51
|
+
agent,
|
|
52
|
+
agentPool: {
|
|
53
|
+
getAgent: jest.fn().mockResolvedValue(agent),
|
|
54
|
+
persistAgentState: jest.fn().mockResolvedValue(undefined),
|
|
55
|
+
},
|
|
56
|
+
projectDir: '/tmp/test',
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function makeTask(overrides = {}) {
|
|
62
|
+
return {
|
|
63
|
+
id: 'task-1',
|
|
64
|
+
title: 'Demo task',
|
|
65
|
+
description: 'No reference here',
|
|
66
|
+
status: 'pending',
|
|
67
|
+
priority: 'medium',
|
|
68
|
+
createdAt: new Date().toISOString(),
|
|
69
|
+
updatedAt: new Date().toISOString(),
|
|
70
|
+
...overrides,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
beforeEach(() => {
|
|
75
|
+
uuidCounter = 0;
|
|
76
|
+
mockLoadMemories.mockReset();
|
|
77
|
+
mockInitialize.mockReset();
|
|
78
|
+
mockInitialize.mockResolvedValue(undefined);
|
|
79
|
+
mockAddMemory.mockReset();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('TaskManagerTool — updateTask in_progress transition handler', () => {
|
|
83
|
+
test('auto-loads attached memory when task description has [memory:mem-...] marker', async () => {
|
|
84
|
+
mockLoadMemories.mockResolvedValueOnce([
|
|
85
|
+
{ id: 'mem-abc', title: 'Task plan', content: 'step 1: ...' },
|
|
86
|
+
]);
|
|
87
|
+
const tool = makeTool();
|
|
88
|
+
const { agent, context } = makeContext();
|
|
89
|
+
agent.taskList.tasks = [makeTask({ description: '[memory:mem-abc] short summary' })];
|
|
90
|
+
|
|
91
|
+
const res = await tool.execute(
|
|
92
|
+
{ action: 'update', taskId: 'task-1', status: 'in_progress' },
|
|
93
|
+
context
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
expect(res.success).toBe(true);
|
|
97
|
+
expect(res.result.attachedMemory).toBeDefined();
|
|
98
|
+
expect(res.result.attachedMemory.id).toBe('mem-abc');
|
|
99
|
+
expect(res.result.attachedMemory.content).toBe('step 1: ...');
|
|
100
|
+
expect(res.result.attachedMemory._hint).toMatch(/memory append/);
|
|
101
|
+
expect(res.result.memoryNudge).toBeUndefined();
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
test('LOXIA_MEMORY_NUDGE_VARIANT=descriptive falls back to the older wording (for A/B validation)', async () => {
|
|
105
|
+
const prev = process.env.LOXIA_MEMORY_NUDGE_VARIANT;
|
|
106
|
+
process.env.LOXIA_MEMORY_NUDGE_VARIANT = 'descriptive';
|
|
107
|
+
try {
|
|
108
|
+
const tool = makeTool();
|
|
109
|
+
const { agent, context } = makeContext();
|
|
110
|
+
agent.taskList.tasks = [makeTask({ description: 'Plain task with no marker' })];
|
|
111
|
+
|
|
112
|
+
const res = await tool.execute(
|
|
113
|
+
{ action: 'update', taskId: 'task-1', status: 'in_progress' },
|
|
114
|
+
context
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
expect(res.success).toBe(true);
|
|
118
|
+
// Descriptive wording, NOT the imperative "VERY NEXT" phrasing.
|
|
119
|
+
expect(res.result.memoryNudge).toMatch(/Scan the.*AGENT MEMORY/);
|
|
120
|
+
expect(res.result.memoryNudge).not.toMatch(/VERY NEXT/);
|
|
121
|
+
} finally {
|
|
122
|
+
if (prev === undefined) delete process.env.LOXIA_MEMORY_NUDGE_VARIANT;
|
|
123
|
+
else process.env.LOXIA_MEMORY_NUDGE_VARIANT = prev;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test('LOXIA_MEMORY_NUDGE_VARIANT unset OR =directive emits the directive wording', async () => {
|
|
128
|
+
const prev = process.env.LOXIA_MEMORY_NUDGE_VARIANT;
|
|
129
|
+
delete process.env.LOXIA_MEMORY_NUDGE_VARIANT;
|
|
130
|
+
try {
|
|
131
|
+
const tool = makeTool();
|
|
132
|
+
const { agent, context } = makeContext();
|
|
133
|
+
agent.taskList.tasks = [makeTask({ description: 'Plain task with no marker' })];
|
|
134
|
+
|
|
135
|
+
const res = await tool.execute(
|
|
136
|
+
{ action: 'update', taskId: 'task-1', status: 'in_progress' },
|
|
137
|
+
context
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
expect(res.result.memoryNudge).toMatch(/VERY NEXT tool call/);
|
|
141
|
+
expect(res.result.memoryNudge).toMatch(/memory list/);
|
|
142
|
+
} finally {
|
|
143
|
+
if (prev === undefined) delete process.env.LOXIA_MEMORY_NUDGE_VARIANT;
|
|
144
|
+
else process.env.LOXIA_MEMORY_NUDGE_VARIANT = prev;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
test('emits memoryNudge when transitioning to in_progress without any [memory:] marker', async () => {
|
|
149
|
+
const tool = makeTool();
|
|
150
|
+
const { agent, context } = makeContext();
|
|
151
|
+
agent.taskList.tasks = [makeTask({ description: 'Plain task with no marker' })];
|
|
152
|
+
|
|
153
|
+
const res = await tool.execute(
|
|
154
|
+
{ action: 'update', taskId: 'task-1', status: 'in_progress' },
|
|
155
|
+
context
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
expect(res.success).toBe(true);
|
|
159
|
+
expect(res.result.attachedMemory).toBeUndefined();
|
|
160
|
+
// Directive wording (post-optimization, 2026-05-19): the
|
|
161
|
+
// descriptive earlier nudge ("Scan the catalog...") scored 22% in
|
|
162
|
+
// the live multi-turn memory bench. Switching to "Your VERY NEXT
|
|
163
|
+
// tool call MUST be `memory list`" doubled it to 44%. See
|
|
164
|
+
// scripts/memory-bench/.
|
|
165
|
+
expect(res.result.memoryNudge).toMatch(/memory list/);
|
|
166
|
+
expect(res.result.memoryNudge).toMatch(/VERY NEXT tool call/);
|
|
167
|
+
expect(res.result.memoryNudge).toMatch(/memory add/);
|
|
168
|
+
expect(mockLoadMemories).not.toHaveBeenCalled();
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
test('surfaces error when [memory:] marker points at a deleted memory', async () => {
|
|
172
|
+
mockLoadMemories.mockResolvedValueOnce([]); // memory not found
|
|
173
|
+
const tool = makeTool();
|
|
174
|
+
const { agent, context } = makeContext();
|
|
175
|
+
agent.taskList.tasks = [makeTask({ description: '[memory:mem-ghost] gone' })];
|
|
176
|
+
|
|
177
|
+
const res = await tool.execute(
|
|
178
|
+
{ action: 'update', taskId: 'task-1', status: 'in_progress' },
|
|
179
|
+
context
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
expect(res.success).toBe(true);
|
|
183
|
+
expect(res.result.attachedMemory).toBeDefined();
|
|
184
|
+
expect(res.result.attachedMemory.id).toBe('mem-ghost');
|
|
185
|
+
expect(res.result.attachedMemory.error).toMatch(/not found/i);
|
|
186
|
+
expect(res.result.attachedMemory.content).toBeUndefined();
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test('does NOT trigger handler when task was already in_progress (no transition)', async () => {
|
|
190
|
+
const tool = makeTool();
|
|
191
|
+
const { agent, context } = makeContext();
|
|
192
|
+
agent.taskList.tasks = [makeTask({ status: 'in_progress', description: '[memory:mem-xyz] x' })];
|
|
193
|
+
|
|
194
|
+
const res = await tool.execute(
|
|
195
|
+
{ action: 'update', taskId: 'task-1', status: 'in_progress' },
|
|
196
|
+
context
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
expect(res.success).toBe(true);
|
|
200
|
+
expect(res.result.attachedMemory).toBeUndefined();
|
|
201
|
+
expect(res.result.memoryNudge).toBeUndefined();
|
|
202
|
+
expect(mockLoadMemories).not.toHaveBeenCalled();
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test('does NOT trigger handler for transitions to non-in_progress statuses', async () => {
|
|
206
|
+
const tool = makeTool();
|
|
207
|
+
const { agent, context } = makeContext();
|
|
208
|
+
agent.taskList.tasks = [makeTask({ status: 'pending', description: '[memory:mem-xyz] x' })];
|
|
209
|
+
|
|
210
|
+
const res = await tool.execute(
|
|
211
|
+
{ action: 'update', taskId: 'task-1', status: 'blocked' },
|
|
212
|
+
context
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
expect(res.success).toBe(true);
|
|
216
|
+
expect(res.result.attachedMemory).toBeUndefined();
|
|
217
|
+
expect(res.result.memoryNudge).toBeUndefined();
|
|
218
|
+
expect(mockLoadMemories).not.toHaveBeenCalled();
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
test('handler errors are swallowed (does not break update)', async () => {
|
|
222
|
+
mockLoadMemories.mockRejectedValueOnce(new Error('disk on fire'));
|
|
223
|
+
const tool = makeTool();
|
|
224
|
+
const { agent, context } = makeContext();
|
|
225
|
+
agent.taskList.tasks = [makeTask({ description: '[memory:mem-abc] x' })];
|
|
226
|
+
|
|
227
|
+
const res = await tool.execute(
|
|
228
|
+
{ action: 'update', taskId: 'task-1', status: 'in_progress' },
|
|
229
|
+
context
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
expect(res.success).toBe(true);
|
|
233
|
+
expect(res.result.attachedMemory).toBeUndefined();
|
|
234
|
+
expect(res.result.memoryNudge).toBeUndefined();
|
|
235
|
+
});
|
|
236
|
+
});
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the forgiving param-shape normalizers added across
|
|
3
|
+
* filesystem / terminal / seek / file-content-replace / code-map.
|
|
4
|
+
*
|
|
5
|
+
* Production observation (Kimi-K2.6 + gpt-5.4 multi-turn live trace,
|
|
6
|
+
* scripts/memory-bench/live-v2-directive-*.json): production agents
|
|
7
|
+
* routinely call these tools with natural-feeling singular shapes
|
|
8
|
+
* (`{action, path}`, `{command}`, `{query, filePattern}`) that the
|
|
9
|
+
* canonical implementations rejected. Cascading rejections caused
|
|
10
|
+
* "actions is not iterable", "Cannot read 'length' of undefined",
|
|
11
|
+
* and eventual task-discipline collapse.
|
|
12
|
+
*
|
|
13
|
+
* These tests pin the forgiving behavior — any future change that
|
|
14
|
+
* tightens the canonical shape MUST update both the implementation
|
|
15
|
+
* AND these tests in the same commit.
|
|
16
|
+
*/
|
|
17
|
+
import { describe, test, expect } from '@jest/globals';
|
|
18
|
+
import FileSystemTool from '../fileSystemTool.js';
|
|
19
|
+
import SeekTool from '../seekTool.js';
|
|
20
|
+
import TerminalTool from '../terminalTool.js';
|
|
21
|
+
import FileContentReplaceTool from '../fileContentReplaceTool.js';
|
|
22
|
+
|
|
23
|
+
const SILENT_LOGGER = { info() {}, warn() {}, error() {}, debug() {} };
|
|
24
|
+
|
|
25
|
+
describe('filesystem — accepts singular {action, path} shape', () => {
|
|
26
|
+
test('promotes {action: "read", path: "X"} to {actions: [{type, filePath}]}', async () => {
|
|
27
|
+
const tool = new FileSystemTool({}, SILENT_LOGGER);
|
|
28
|
+
// Throw early from the read path to capture the action shape after
|
|
29
|
+
// normalization without actually doing disk I/O.
|
|
30
|
+
const orig = tool.customValidateParameters?.bind(tool);
|
|
31
|
+
let captured = null;
|
|
32
|
+
tool.customValidateParameters = (p) => { captured = p; return orig ? orig(p) : { valid: true }; };
|
|
33
|
+
try {
|
|
34
|
+
await tool.execute({ action: 'read', path: 'src/foo.js' }, { projectDir: process.cwd() });
|
|
35
|
+
} catch { /* downstream errors fine */ }
|
|
36
|
+
expect(captured).not.toBeNull();
|
|
37
|
+
expect(Array.isArray(captured.actions)).toBe(true);
|
|
38
|
+
expect(captured.actions[0].type).toBe('read');
|
|
39
|
+
expect(captured.actions[0].filePath).toBe('src/foo.js');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test('still rejects when neither {action} nor {actions} is provided', async () => {
|
|
43
|
+
const tool = new FileSystemTool({}, SILENT_LOGGER);
|
|
44
|
+
await expect(tool.execute({}, { projectDir: process.cwd() }))
|
|
45
|
+
.rejects.toThrow(/actions is required/);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test('canonical {actions: [...]} still works (normalization is a no-op)', async () => {
|
|
49
|
+
const tool = new FileSystemTool({}, SILENT_LOGGER);
|
|
50
|
+
let captured = null;
|
|
51
|
+
const orig = tool.customValidateParameters?.bind(tool);
|
|
52
|
+
tool.customValidateParameters = (p) => { captured = p; return orig ? orig(p) : { valid: true }; };
|
|
53
|
+
try {
|
|
54
|
+
await tool.execute(
|
|
55
|
+
{ actions: [{ type: 'read', filePath: 'src/foo.js' }] },
|
|
56
|
+
{ projectDir: process.cwd() }
|
|
57
|
+
);
|
|
58
|
+
} catch { /* downstream errors fine */ }
|
|
59
|
+
expect(captured).not.toBeNull();
|
|
60
|
+
expect(captured.actions[0].type).toBe('read');
|
|
61
|
+
expect(captured.actions[0].filePath).toBe('src/foo.js');
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe('terminal — accepts singular {command} shape', () => {
|
|
66
|
+
test('promotes {command: "ls"} to {actions: [{type: "run-command", command}]}', async () => {
|
|
67
|
+
const tool = new TerminalTool({ allowedCommands: ['echo'] }, SILENT_LOGGER);
|
|
68
|
+
let recordedAction = null;
|
|
69
|
+
tool._runCommandAction = async (a) => { recordedAction = a; return { success: true, output: 'ok' }; };
|
|
70
|
+
// Intercept the execute loop by mocking the action dispatcher path
|
|
71
|
+
// — terminal's execute iterates params.actions; with our normalization
|
|
72
|
+
// the array exists and we can verify the inner shape via tool internals.
|
|
73
|
+
// Easier: just call execute and verify it doesn't throw "is not iterable".
|
|
74
|
+
let threw = null;
|
|
75
|
+
try {
|
|
76
|
+
await tool.execute({ command: 'echo hi' }, { projectDir: process.cwd(), agentId: 'a' });
|
|
77
|
+
} catch (e) { threw = e; }
|
|
78
|
+
// The promotion happened iff we no longer get the "actions is not
|
|
79
|
+
// iterable" / "actions is required" error. The actual command may
|
|
80
|
+
// still fail downstream (sandbox, allowlist, etc.) and that's fine.
|
|
81
|
+
if (threw) {
|
|
82
|
+
expect(threw.message).not.toMatch(/actions is not iterable/);
|
|
83
|
+
expect(threw.message).not.toMatch(/At least one action is required/);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
describe('seek — accepts {query, filePattern} singular shape', () => {
|
|
89
|
+
test('returns clear error when both are missing (no null-deref)', async () => {
|
|
90
|
+
const tool = new SeekTool({}, SILENT_LOGGER);
|
|
91
|
+
const r = await tool.execute({}, { projectDir: process.cwd() });
|
|
92
|
+
expect(r.success).toBe(false);
|
|
93
|
+
expect(r.error).toMatch(/filePaths/);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test('accepts {query: "X", filePattern: "*.js"} singular shape (no crash)', async () => {
|
|
97
|
+
const tool = new SeekTool({}, SILENT_LOGGER);
|
|
98
|
+
// Mock resolveFilePaths to return the canonical {found, notFound} shape.
|
|
99
|
+
tool.resolveFilePaths = async () => ({ found: [], notFound: ['*.js'] });
|
|
100
|
+
const r = await tool.execute(
|
|
101
|
+
{ query: 'tok-', filePattern: '*.js' },
|
|
102
|
+
{ projectDir: process.cwd() }
|
|
103
|
+
);
|
|
104
|
+
// No "Cannot read 'length' of undefined" — we either get a clean
|
|
105
|
+
// success (no matches in empty file list) or a clean error string.
|
|
106
|
+
expect(typeof r).toBe('object');
|
|
107
|
+
expect(r).not.toBeNull();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test('returns clean error when only filePaths is missing', async () => {
|
|
111
|
+
const tool = new SeekTool({}, SILENT_LOGGER);
|
|
112
|
+
const r = await tool.execute({ searchTerms: ['foo'] }, { projectDir: process.cwd() });
|
|
113
|
+
expect(r.success).toBe(false);
|
|
114
|
+
expect(r.error).toMatch(/filePaths/);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('returns clean error when only searchTerms is missing', async () => {
|
|
118
|
+
const tool = new SeekTool({}, SILENT_LOGGER);
|
|
119
|
+
const r = await tool.execute({ filePaths: ['*.js'] }, { projectDir: process.cwd() });
|
|
120
|
+
expect(r.success).toBe(false);
|
|
121
|
+
expect(r.error).toMatch(/searchTerms/);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
describe('file-content-replace — accepts flat {actions: [{type, filePath, search, replace}]} shape', () => {
|
|
126
|
+
test('promotes flat actions shape to canonical {files: [{path, replacements}]}', async () => {
|
|
127
|
+
const tool = new FileContentReplaceTool({}, SILENT_LOGGER);
|
|
128
|
+
// Capture the post-normalization params shape via _isNormalizedParams.
|
|
129
|
+
let captured = null;
|
|
130
|
+
const orig = tool._isNormalizedParams.bind(tool);
|
|
131
|
+
tool._isNormalizedParams = (p) => { captured = p; return orig(p); };
|
|
132
|
+
try {
|
|
133
|
+
await tool.execute(
|
|
134
|
+
{ actions: [{ type: 'replace', filePath: 'a.js', search: 'foo', replace: 'bar' }] },
|
|
135
|
+
{ projectDir: process.cwd() }
|
|
136
|
+
);
|
|
137
|
+
} catch { /* downstream errors fine */ }
|
|
138
|
+
expect(captured).not.toBeNull();
|
|
139
|
+
expect(Array.isArray(captured.files)).toBe(true);
|
|
140
|
+
expect(captured.files[0].path).toBe('a.js');
|
|
141
|
+
expect(captured.files[0].replacements[0].oldContent).toBe('foo');
|
|
142
|
+
expect(captured.files[0].replacements[0].newContent).toBe('bar');
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test('returns clean error when neither {files} nor {actions} provided', async () => {
|
|
146
|
+
const tool = new FileContentReplaceTool({}, SILENT_LOGGER);
|
|
147
|
+
const r = await tool.execute({}, { projectDir: process.cwd() });
|
|
148
|
+
expect(r.success).toBe(false);
|
|
149
|
+
expect(r.error).toMatch(/files/);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
test('groups multiple actions by filePath', async () => {
|
|
153
|
+
const tool = new FileContentReplaceTool({}, SILENT_LOGGER);
|
|
154
|
+
// Spy on _isNormalizedParams to capture the normalized params shape.
|
|
155
|
+
let capturedParams = null;
|
|
156
|
+
const orig = tool._isNormalizedParams.bind(tool);
|
|
157
|
+
tool._isNormalizedParams = (p) => { capturedParams = p; return orig(p); };
|
|
158
|
+
try {
|
|
159
|
+
await tool.execute({
|
|
160
|
+
actions: [
|
|
161
|
+
{ type: 'replace', filePath: 'a.js', search: '1', replace: 'A' },
|
|
162
|
+
{ type: 'replace', filePath: 'a.js', search: '2', replace: 'B' },
|
|
163
|
+
{ type: 'replace', filePath: 'b.js', search: '3', replace: 'C' },
|
|
164
|
+
],
|
|
165
|
+
}, { projectDir: process.cwd() });
|
|
166
|
+
} catch { /* downstream errors fine */ }
|
|
167
|
+
expect(capturedParams).not.toBeNull();
|
|
168
|
+
expect(Array.isArray(capturedParams.files)).toBe(true);
|
|
169
|
+
expect(capturedParams.files.length).toBe(2);
|
|
170
|
+
const a = capturedParams.files.find(f => f.path === 'a.js');
|
|
171
|
+
expect(a.replacements.length).toBe(2);
|
|
172
|
+
expect(a.replacements[0].oldContent).toBe('1');
|
|
173
|
+
expect(a.replacements[0].newContent).toBe('A');
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
describe('item discriminator cross-acceptance (type / action)', () => {
|
|
178
|
+
// Some tools use `type` as item discriminator inside actions[]
|
|
179
|
+
// (filesystem, terminal, taskmanager, code-map, memory), others use
|
|
180
|
+
// `action` (jobdone, docx, excel, pdf). To prevent cross-tool drift,
|
|
181
|
+
// every plural-envelope tool accepts BOTH names.
|
|
182
|
+
test('filesystem accepts {actions: [{action: "read", filePath}]} (action-named item)', async () => {
|
|
183
|
+
const tool = new FileSystemTool({}, SILENT_LOGGER);
|
|
184
|
+
let captured = null;
|
|
185
|
+
const orig = tool.customValidateParameters?.bind(tool);
|
|
186
|
+
tool.customValidateParameters = (p) => { captured = p; return orig ? orig(p) : { valid: true }; };
|
|
187
|
+
try {
|
|
188
|
+
await tool.execute(
|
|
189
|
+
{ actions: [{ action: 'read', filePath: 'src/foo.js' }] },
|
|
190
|
+
{ projectDir: process.cwd() }
|
|
191
|
+
);
|
|
192
|
+
} catch { /* downstream errors fine */ }
|
|
193
|
+
expect(captured).not.toBeNull();
|
|
194
|
+
// After normalization, the item should have `type` set.
|
|
195
|
+
expect(captured.actions[0].type).toBe('read');
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test('terminal accepts {actions: [{action: "run-command", command}]} (action-named item)', async () => {
|
|
199
|
+
const tool = new TerminalTool({ allowedCommands: ['echo'] }, SILENT_LOGGER);
|
|
200
|
+
// Validate path: customValidateParameters mutates the input items
|
|
201
|
+
// in place, setting .type from .action. Verify by inspecting the
|
|
202
|
+
// input object after validation runs.
|
|
203
|
+
const input = { actions: [{ action: 'run-command', command: 'echo hi' }] };
|
|
204
|
+
const v = tool.customValidateParameters(input);
|
|
205
|
+
expect(v.valid).toBe(true);
|
|
206
|
+
expect(input.actions[0].type).toBe('run-command');
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
test('filesystem validateParameters accepts {action} item discriminator and normalizes to type', () => {
|
|
210
|
+
const tool = new FileSystemTool({}, SILENT_LOGGER);
|
|
211
|
+
const input = { actions: [{ action: 'read', filePath: 'src/foo.js' }] };
|
|
212
|
+
const v = tool.customValidateParameters(input);
|
|
213
|
+
expect(v.valid).toBe(true);
|
|
214
|
+
expect(input.actions[0].type).toBe('read');
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
test('taskmanager accepts {actions: [{action: "list"}]} item discriminator', () => {
|
|
218
|
+
// taskmanager has its own non-customValidateParameters path —
|
|
219
|
+
// verify by going through execute and seeing that params.action
|
|
220
|
+
// gets set from firstAction.action.
|
|
221
|
+
// (Tests against taskmanager's full execute lifecycle live in
|
|
222
|
+
// src/tools/__tests__/taskManagerTool.test.js.)
|
|
223
|
+
expect(true).toBe(true);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
describe('code-map — explanatory errors on invalid action', () => {
|
|
228
|
+
test('action="search" → hint points at seek', async () => {
|
|
229
|
+
const { default: CodeMapTool } = await import('../codeMapTool.js');
|
|
230
|
+
const tool = new CodeMapTool({}, SILENT_LOGGER);
|
|
231
|
+
const v = tool.customValidateParameters({ action: 'search', filePath: 'x' });
|
|
232
|
+
expect(v.valid).toBe(false);
|
|
233
|
+
expect(v.errors.join(' ').toLowerCase()).toContain('seek');
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
test('action="list" → hint points at file-tree', async () => {
|
|
237
|
+
const { default: CodeMapTool } = await import('../codeMapTool.js');
|
|
238
|
+
const tool = new CodeMapTool({}, SILENT_LOGGER);
|
|
239
|
+
const v = tool.customValidateParameters({ action: 'list' });
|
|
240
|
+
expect(v.valid).toBe(false);
|
|
241
|
+
expect(v.errors.join(' ').toLowerCase()).toContain('file-tree');
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
test('action="read" (without -range) → hint points at filesystem read or code-map read-range', async () => {
|
|
245
|
+
const { default: CodeMapTool } = await import('../codeMapTool.js');
|
|
246
|
+
const tool = new CodeMapTool({}, SILENT_LOGGER);
|
|
247
|
+
const v = tool.customValidateParameters({ action: 'read' });
|
|
248
|
+
expect(v.valid).toBe(false);
|
|
249
|
+
expect(v.errors.join(' ').toLowerCase()).toMatch(/filesystem|read-range/);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
test('valid actions still pass', async () => {
|
|
253
|
+
const { default: CodeMapTool } = await import('../codeMapTool.js');
|
|
254
|
+
const tool = new CodeMapTool({}, SILENT_LOGGER);
|
|
255
|
+
expect(tool.customValidateParameters({ action: 'skeleton', path: 'src/' }).valid).toBe(true);
|
|
256
|
+
expect(tool.customValidateParameters({
|
|
257
|
+
action: 'read-range', filePath: 'src/foo.js', startLine: 1, endLine: 50,
|
|
258
|
+
}).valid).toBe(true);
|
|
259
|
+
});
|
|
260
|
+
});
|
package/src/tools/baseTool.js
CHANGED
|
@@ -868,6 +868,21 @@ class ToolsRegistry {
|
|
|
868
868
|
description += '**`plan/*` memories auto-inject into your system prompt every turn under `## AGENT WORKING PLAN` — that\'s how they survive compaction. Update or delete them as the situation evolves; a stale plan is worse than no plan.**\n\n';
|
|
869
869
|
}
|
|
870
870
|
|
|
871
|
+
// ── TASK DISCIPLINE ─────────────────────────────────────────
|
|
872
|
+
// Address the production-observed pattern where agents (especially
|
|
873
|
+
// Kimi-K2.6) lose task focus after cascading tool errors and
|
|
874
|
+
// silently revert to a prior task instead of completing the current
|
|
875
|
+
// one. The fix: make the task list a faithful representation of
|
|
876
|
+
// cognitive effort. Gated on `taskmanager` capability only.
|
|
877
|
+
if (toolIds.includes('taskmanager')) {
|
|
878
|
+
description += '**TASK DISCIPLINE — keep your task list aligned with your actual cognitive effort:**\n';
|
|
879
|
+
description += '- Only **ONE** task may be `in_progress` at a time. Two or more in-progress tasks means the list no longer reflects what you are actually doing.\n';
|
|
880
|
+
description += '- **Transition first, then work.** Before you do work on a task, call `taskmanager` → `update` to move it `pending → in_progress`. The transition IS the signal you have started — do not start mentally then transition later.\n';
|
|
881
|
+
description += '- **Finish or release.** When done, move `in_progress → completed` BEFORE starting the next task. If the user pivots and you must drop the current task, transition it to `blocked` or `cancelled` (with a one-line note in `description` saying why) — never silently abandon it.\n';
|
|
882
|
+
description += '- **Anchor on tool failures.** If a tool call fails or you get stuck, re-read your task list. Resume the `in_progress` task. Do NOT switch topics until the current task is explicitly transitioned. This is how multi-task sessions stay coherent across error recovery.\n';
|
|
883
|
+
description += '- The `currentFocus` field returned by every `taskmanager` action tells you which task you are on. If it warns about 0 or 2+ in-progress tasks, fix that before doing anything else.\n\n';
|
|
884
|
+
}
|
|
885
|
+
|
|
871
886
|
description += '**Distinction:**\n';
|
|
872
887
|
description += '- `memory` = persistent knowledge that survives sessions (why, constraints, durable facts, working plans).\n';
|
|
873
888
|
if (toolIds.includes('taskmanager')) {
|
|
@@ -887,7 +902,19 @@ class ToolsRegistry {
|
|
|
887
902
|
description += '2. **Understand code** — Use `code-map` skeleton to extract signatures, classes, and functions with line numbers\n';
|
|
888
903
|
description += '3. **Zoom in** — Use `code-map` read-range to read only the specific lines you need\n';
|
|
889
904
|
description += '4. **Search** — Use `seek` to find specific terms, then `code-map` read-range to view context around matches\n\n';
|
|
890
|
-
description += 'This avoids wasting context on entire file reads. Reserve `filesystem` read for small files or when you need the complete content.\n';
|
|
905
|
+
description += 'This avoids wasting context on entire file reads. Reserve `filesystem` read for small files or when you need the complete content.\n\n';
|
|
906
|
+
|
|
907
|
+
// Code-map cache discipline — addresses production-observed
|
|
908
|
+
// re-skeleton pattern (Monopoly mission: 22 skeleton calls on
|
|
909
|
+
// the same file, 80% while the original result was still in
|
|
910
|
+
// active context). The runtime maintains a per-session cache
|
|
911
|
+
// surfaced via the `## CODEBASE KNOWLEDGE` block injected by
|
|
912
|
+
// the scheduler. Agent must consult that block before re-issuing
|
|
913
|
+
// identical reads. See services/codebaseKnowledgeService.js.
|
|
914
|
+
description += '**Cache awareness — before re-issuing a code-map call:**\n';
|
|
915
|
+
description += '- Scan the `## CODEBASE KNOWLEDGE` section of this prompt (appears below the task list when populated). It lists files you have ALREADY mapped this session and what was mapped (skeleton, line ranges).\n';
|
|
916
|
+
description += '- If the file is listed and marked `current` (not STALE), the tool will serve from cache automatically on an identical re-read. You do not need to issue the call again unless you need DIFFERENT information (a different range) or the entry is marked STALE.\n';
|
|
917
|
+
description += '- The cache invalidates automatically when you write to a file (via filesystem write/append or file-content-replace). After a write, the file\'s entry will appear STALE — re-skeleton is correct in that case.\n';
|
|
891
918
|
}
|
|
892
919
|
|
|
893
920
|
return description;
|