onbuzz 4.0.2 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/scripts/audit-report.js +164 -0
- package/src/core/__tests__/agentScheduler.emptyResponseDiagnostics.test.js +191 -0
- package/src/core/__tests__/agentScheduler.modeTransitions.test.js +233 -0
- package/src/core/__tests__/agentScheduler.taskLifecycleInstruction.test.js +78 -0
- package/src/core/__tests__/agentScheduler.test.js +31 -13
- package/src/core/agentPool.js +9 -0
- package/src/core/agentScheduler.js +302 -147
- package/src/interfaces/webServer.js +43 -2
- package/src/services/__tests__/conversationQuery.test.js +723 -0
- package/src/services/conversationQuery.js +777 -0
- package/src/tools/__tests__/memoryTool.reminisce.test.js +330 -0
- package/src/tools/__tests__/memoryTool.test.js +2 -2
- package/src/tools/__tests__/openaiFunctionSchemas.memoryReminisce.test.js +84 -0
- package/src/tools/__tests__/taskManagerTool.lifecycleGuidance.test.js +71 -0
- package/src/tools/memoryTool.js +266 -4
- package/src/tools/openaiFunctionSchemas.js +62 -7
- package/src/tools/taskManagerTool.js +21 -4
- package/src/utilities/__tests__/auditReport.test.js +328 -0
- package/src/utilities/__tests__/modeTransitionReasons.test.js +105 -0
- package/src/utilities/auditReport.js +331 -0
- package/src/utilities/modeTransitionReasons.js +101 -0
- package/web-ui/build/index.html +1 -1
- package/web-ui/build/static/1c-D-8ReLUQ.js +1 -0
- package/web-ui/build/static/abap-NvrQD84d.js +1 -0
- package/web-ui/build/static/abnf-BxKbzF6d.js +1 -0
- package/web-ui/build/static/abnf-gQpmRWjd.js +1 -0
- package/web-ui/build/static/accesslog-BQLUo5Gi.js +1 -0
- package/web-ui/build/static/actionscript-3TeMZFpQ.js +1 -0
- package/web-ui/build/static/actionscript-w6DEnLr3.js +1 -0
- package/web-ui/build/static/ada-87XHdEXs.js +1 -0
- package/web-ui/build/static/ada-QztkYmC7.js +1 -0
- package/web-ui/build/static/agda-CUYeMLgB.js +1 -0
- package/web-ui/build/static/al-DrDn2-sA.js +1 -0
- package/web-ui/build/static/angelscript-D3Qw8kQa.js +1 -0
- package/web-ui/build/static/antlr4-CWEEpQ5q.js +1 -0
- package/web-ui/build/static/apache-Bme3xfdp.js +1 -0
- package/web-ui/build/static/apacheconf-BKOfs-cp.js +1 -0
- package/web-ui/build/static/apex-DswYOikL.js +1 -0
- package/web-ui/build/static/apl-CizhojF3.js +1 -0
- package/web-ui/build/static/applescript-D9M6q0r7.js +1 -0
- package/web-ui/build/static/applescript-DpP5T055.js +1 -0
- package/web-ui/build/static/aql-BqAlaha9.js +1 -0
- package/web-ui/build/static/arcade-DobNWm8j.js +1 -0
- package/web-ui/build/static/arduino-BeuGL09r.js +1 -0
- package/web-ui/build/static/arduino-BiF5cC7x.js +1 -0
- package/web-ui/build/static/arff-2H9PyLDr.js +1 -0
- package/web-ui/build/static/armasm-B6wc18B0.js +1 -0
- package/web-ui/build/static/asciidoc-DUF4xPDI.js +1 -0
- package/web-ui/build/static/asciidoc-TBH4m8SR.js +1 -0
- package/web-ui/build/static/asm6502-CzTI2B-y.js +1 -0
- package/web-ui/build/static/asmatmel-BYN0Xd3T.js +1 -0
- package/web-ui/build/static/aspectj-DXCMDgp7.js +1 -0
- package/web-ui/build/static/aspnet-lOvDpvP_.js +1 -0
- package/web-ui/build/static/autohotkey-CICk12uK.js +1 -0
- package/web-ui/build/static/autohotkey-DrG81PVL.js +1 -0
- package/web-ui/build/static/autoit-DFemtuhG.js +1 -0
- package/web-ui/build/static/autoit-D_K-jEWY.js +1 -0
- package/web-ui/build/static/avisynth-DOnmgjBO.js +1 -0
- package/web-ui/build/static/avrasm-rMDuGPFy.js +1 -0
- package/web-ui/build/static/avro-idl-CH5Xk5PQ.js +1 -0
- package/web-ui/build/static/awk-BvyFWX3C.js +1 -0
- package/web-ui/build/static/axapta-BWmF5MqT.js +1 -0
- package/web-ui/build/static/bash-Coyd2GnL.js +1 -0
- package/web-ui/build/static/bash-DSdj70Nv.js +1 -0
- package/web-ui/build/static/basic-CflyLZ31.js +1 -0
- package/web-ui/build/static/basic-Cs6QyVqS.js +1 -0
- package/web-ui/build/static/batch-DCDtzw83.js +1 -0
- package/web-ui/build/static/bbcode-MWdW7azN.js +1 -0
- package/web-ui/build/static/bicep-jQ4zhAw9.js +1 -0
- package/web-ui/build/static/birb-9f7Itiod.js +1 -0
- package/web-ui/build/static/bison-CIIUW5Cl.js +1 -0
- package/web-ui/build/static/bnf-B2w55bnT.js +1 -0
- package/web-ui/build/static/bnf-CUlbZGe7.js +1 -0
- package/web-ui/build/static/brainfuck-CaJZ1LRc.js +1 -0
- package/web-ui/build/static/brainfuck-eIkhMKej.js +1 -0
- package/web-ui/build/static/brightscript-BSLnJVmJ.js +1 -0
- package/web-ui/build/static/bro-YVCWDbPj.js +1 -0
- package/web-ui/build/static/bsl-Nm0_B_oa.js +1 -0
- package/web-ui/build/static/c-Dv7lr1UK.js +1 -0
- package/web-ui/build/static/c-like-C9IU26FO.js +1 -0
- package/web-ui/build/static/c-pfS3v02M.js +1 -0
- package/web-ui/build/static/cal-D4re7xDS.js +1 -0
- package/web-ui/build/static/capnproto-Dy75AQ6u.js +1 -0
- package/web-ui/build/static/ceylon-BNtjB2q0.js +1 -0
- package/web-ui/build/static/cfscript-8X2NpMn_.js +1 -0
- package/web-ui/build/static/chaiscript-CoXaTTY-.js +1 -0
- package/web-ui/build/static/cil-BluyliW6.js +1 -0
- package/web-ui/build/static/clean-Bj15gq3Q.js +1 -0
- package/web-ui/build/static/clojure-BH5xTDBp.js +1 -0
- package/web-ui/build/static/clojure-BqHsfJwr.js +1 -0
- package/web-ui/build/static/clojure-repl-B32b9bLV.js +1 -0
- package/web-ui/build/static/cmake-CyTE-1A0.js +1 -0
- package/web-ui/build/static/cmake-hiJ0lXa-.js +1 -0
- package/web-ui/build/static/cobol-BBnQUH8E.js +1 -0
- package/web-ui/build/static/coffeescript-BjrsNhLL.js +1 -0
- package/web-ui/build/static/coffeescript-C7WO1c8O.js +1 -0
- package/web-ui/build/static/concurnas-9EpupFAI.js +1 -0
- package/web-ui/build/static/coq-C-tt6nZE.js +1 -0
- package/web-ui/build/static/coq-CLCiqFzC.js +1 -0
- package/web-ui/build/static/cos-BQC1_Gov.js +1 -0
- package/web-ui/build/static/cpp-CH4XSTo7.js +1 -0
- package/web-ui/build/static/cpp-K8F2XScQ.js +1 -0
- package/web-ui/build/static/crmsh-DztNtPne.js +1 -0
- package/web-ui/build/static/crystal-kBqCeXtW.js +1 -0
- package/web-ui/build/static/crystal-sVG_HS9o.js +1 -0
- package/web-ui/build/static/csharp-4pb9Wc--.js +1 -0
- package/web-ui/build/static/csharp-D5QaxB-K.js +1 -0
- package/web-ui/build/static/cshtml-Cpytn-LL.js +1 -0
- package/web-ui/build/static/csp-BH6fPZVZ.js +1 -0
- package/web-ui/build/static/csp-WrjFExbk.js +1 -0
- package/web-ui/build/static/css-DJxZ20Kx.js +1 -0
- package/web-ui/build/static/css-extras-DwoO5sHq.js +1 -0
- package/web-ui/build/static/csv-DJb1XTwb.js +1 -0
- package/web-ui/build/static/cypher-CFN05H9J.js +1 -0
- package/web-ui/build/static/d-COFI-yfM.js +1 -0
- package/web-ui/build/static/d-DYHnLAnt.js +1 -0
- package/web-ui/build/static/dart-Bw35nKGj.js +1 -0
- package/web-ui/build/static/dart-C5gnqL08.js +1 -0
- package/web-ui/build/static/dataweave-DG_2euLu.js +1 -0
- package/web-ui/build/static/dax-BSpzdHUe.js +1 -0
- package/web-ui/build/static/delphi-Cl5NRXvZ.js +1 -0
- package/web-ui/build/static/dhall-CNefJtoo.js +1 -0
- package/web-ui/build/static/diff-DhqUs0Iy.js +1 -0
- package/web-ui/build/static/diff-KGSf4pWL.js +1 -0
- package/web-ui/build/static/django-5TgWQjd4.js +1 -0
- package/web-ui/build/static/django-DavZW8FP.js +1 -0
- package/web-ui/build/static/dns-CuF6RAET.js +1 -0
- package/web-ui/build/static/dns-zone-file-BcBMQ0BR.js +1 -0
- package/web-ui/build/static/docker-Dht8jS2j.js +1 -0
- package/web-ui/build/static/dockerfile-CjjL85ki.js +1 -0
- package/web-ui/build/static/dos-CVoaOHAQ.js +1 -0
- package/web-ui/build/static/dot-QcLwKXVK.js +1 -0
- package/web-ui/build/static/dsconfig-_1R6hLzq.js +1 -0
- package/web-ui/build/static/dts-B_Dzxmb6.js +1 -0
- package/web-ui/build/static/dust-xRpJXkxU.js +1 -0
- package/web-ui/build/static/ebnf-DPK9Hid-.js +1 -0
- package/web-ui/build/static/ebnf-OVlya1yQ.js +1 -0
- package/web-ui/build/static/editorconfig-CbCWWNal.js +1 -0
- package/web-ui/build/static/eiffel-CShmAG_u.js +1 -0
- package/web-ui/build/static/ejs-Dybq4vcI.js +1 -0
- package/web-ui/build/static/elixir-CzXoWmCJ.js +1 -0
- package/web-ui/build/static/elixir-DKVoqGbI.js +1 -0
- package/web-ui/build/static/elm-DfJge1Cy.js +1 -0
- package/web-ui/build/static/elm-wTttagz6.js +1 -0
- package/web-ui/build/static/erb-BqJOty-L.js +1 -0
- package/web-ui/build/static/erb-DEcQyddF.js +1 -0
- package/web-ui/build/static/erlang-DR0S8Dbq.js +1 -0
- package/web-ui/build/static/erlang-foLyt35P.js +1 -0
- package/web-ui/build/static/erlang-repl-KGaauP1D.js +1 -0
- package/web-ui/build/static/etlua-i5bjc318.js +1 -0
- package/web-ui/build/static/excel-Bxn-_4FK.js +1 -0
- package/web-ui/build/static/excel-formula-C3ittGUe.js +1 -0
- package/web-ui/build/static/factor-Cq9BFfPi.js +1 -0
- package/web-ui/build/static/false-Bq1Og8uV.js +1 -0
- package/web-ui/build/static/firestore-security-rules-BuWMvGkh.js +1 -0
- package/web-ui/build/static/fix-CJH3csBZ.js +1 -0
- package/web-ui/build/static/flix-DZVFkMZK.js +1 -0
- package/web-ui/build/static/flow-DGvt9eNT.js +1 -0
- package/web-ui/build/static/fortran-CRMIJaq3.js +1 -0
- package/web-ui/build/static/fortran-DYMWvRQk.js +1 -0
- package/web-ui/build/static/fsharp-DsngWUfx.js +1 -0
- package/web-ui/build/static/fsharp-iEMP2hGc.js +1 -0
- package/web-ui/build/static/ftl-6XZ6kVeO.js +1 -0
- package/web-ui/build/static/gams-BPxwyKlw.js +1 -0
- package/web-ui/build/static/gap-LiwKb7bd.js +1 -0
- package/web-ui/build/static/gauss-BMq9hJW2.js +1 -0
- package/web-ui/build/static/gcode-BhUKSjaC.js +1 -0
- package/web-ui/build/static/gcode-b-DQdN2W.js +1 -0
- package/web-ui/build/static/gdscript-DIZ0_yTx.js +1 -0
- package/web-ui/build/static/gedcom-B-Don8Su.js +1 -0
- package/web-ui/build/static/gherkin-BioIAP1n.js +1 -0
- package/web-ui/build/static/gherkin-Cly_guds.js +1 -0
- package/web-ui/build/static/git-CopW8z0r.js +1 -0
- package/web-ui/build/static/glsl-6ssjFzwf.js +1 -0
- package/web-ui/build/static/glsl-E_uyFQdl.js +1 -0
- package/web-ui/build/static/gml-CaO1S6wu.js +1 -0
- package/web-ui/build/static/gml-D9DYjC5y.js +1 -0
- package/web-ui/build/static/gn-B_qqVpR0.js +1 -0
- package/web-ui/build/static/go-DFaKy1Ay.js +1 -0
- package/web-ui/build/static/go-JLTG1uU-.js +1 -0
- package/web-ui/build/static/go-module-BGp5Ey97.js +1 -0
- package/web-ui/build/static/golo-BlbGqaMN.js +1 -0
- package/web-ui/build/static/gradle-wqmsj6uh.js +1 -0
- package/web-ui/build/static/graphql-7RIdAO4i.js +1 -0
- package/web-ui/build/static/groovy-3icIp5xU.js +1 -0
- package/web-ui/build/static/groovy-HPI8s9_9.js +1 -0
- package/web-ui/build/static/haml-CTkGGR02.js +1 -0
- package/web-ui/build/static/haml-Thxu3S1L.js +1 -0
- package/web-ui/build/static/handlebars-1DoYlhi8.js +1 -0
- package/web-ui/build/static/handlebars-i1BBTCzR.js +1 -0
- package/web-ui/build/static/haskell-A1VYHFSA.js +1 -0
- package/web-ui/build/static/haskell-C_DMih9U.js +1 -0
- package/web-ui/build/static/haxe-Cz5x4sAD.js +1 -0
- package/web-ui/build/static/haxe-DYRFmKkv.js +1 -0
- package/web-ui/build/static/hcl-BRcB2lym.js +1 -0
- package/web-ui/build/static/hlsl-DkyhfHB3.js +1 -0
- package/web-ui/build/static/hoon-Droh_30T.js +1 -0
- package/web-ui/build/static/hpkp-DTAbnc4g.js +1 -0
- package/web-ui/build/static/hsp-C0QnJZWI.js +1 -0
- package/web-ui/build/static/hsts-C21QOmcz.js +1 -0
- package/web-ui/build/static/htmlbars-Bjlkvm5m.js +1 -0
- package/web-ui/build/static/http-D0nJQkzK.js +1 -0
- package/web-ui/build/static/http-DRz4r8bD.js +1 -0
- package/web-ui/build/static/hy-BqiXsF4N.js +1 -0
- package/web-ui/build/static/ichigojam-BQi7PpBN.js +1 -0
- package/web-ui/build/static/icon-BufrPPND.js +1 -0
- package/web-ui/build/static/icu-message-format-BGFhE2gJ.js +1 -0
- package/web-ui/build/static/idris-CDCGxwUo.js +1 -0
- package/web-ui/build/static/iecst-CdwPGvCO.js +1 -0
- package/web-ui/build/static/ignore-CHdDzb39.js +1 -0
- package/web-ui/build/static/index-D1KAbjnI.js +1 -0
- package/web-ui/build/static/index-DBYkW2lx.js +13 -0
- package/web-ui/build/static/index-DsoPopge.js +727 -0
- package/web-ui/build/static/inform7-Bpq3UO5w.js +1 -0
- package/web-ui/build/static/inform7-DmXu-aMH.js +1 -0
- package/web-ui/build/static/ini-DWUEQKxG.js +1 -0
- package/web-ui/build/static/ini-t3XdjCfA.js +1 -0
- package/web-ui/build/static/io-DfElp6yx.js +1 -0
- package/web-ui/build/static/irpf90-fx9_FB-t.js +1 -0
- package/web-ui/build/static/isbl-CcrRysr8.js +1 -0
- package/web-ui/build/static/j--Jx3nGHC.js +1 -0
- package/web-ui/build/static/java-OOMeJRRQ.js +1 -0
- package/web-ui/build/static/java-OTyqE2m1.js +1 -0
- package/web-ui/build/static/javadoc-CD-HiYEY.js +1 -0
- package/web-ui/build/static/javadoclike-CLv1_76Z.js +1 -0
- package/web-ui/build/static/javascript-C_j1lHAa.js +1 -0
- package/web-ui/build/static/javastacktrace-CIsSL13b.js +1 -0
- package/web-ui/build/static/jboss-cli-C9HktJFq.js +1 -0
- package/web-ui/build/static/jexl-Doro4Jcm.js +1 -0
- package/web-ui/build/static/jolie-C5wL2YdC.js +1 -0
- package/web-ui/build/static/jq-Bmi3HMEP.js +1 -0
- package/web-ui/build/static/js-extras-CQyLxL3s.js +1 -0
- package/web-ui/build/static/js-templates-DAigrjqA.js +1 -0
- package/web-ui/build/static/jsdoc-BJ_oa4xn.js +1 -0
- package/web-ui/build/static/json--C9O_45y.js +1 -0
- package/web-ui/build/static/json-CSGkCpU2.js +1 -0
- package/web-ui/build/static/json5-CcxKJla0.js +1 -0
- package/web-ui/build/static/jsonp-DjUgPOz0.js +1 -0
- package/web-ui/build/static/jsstacktrace-BpOw_ymZ.js +1 -0
- package/web-ui/build/static/jsx-otTTuJ8X.js +1 -0
- package/web-ui/build/static/julia-B1n4YHpM.js +1 -0
- package/web-ui/build/static/julia-bi12E6me.js +1 -0
- package/web-ui/build/static/julia-repl-DwzL74R7.js +1 -0
- package/web-ui/build/static/keepalived-cKzNWQWz.js +1 -0
- package/web-ui/build/static/keyman-BVOouxaa.js +1 -0
- package/web-ui/build/static/kotlin-BPuaNDRU.js +1 -0
- package/web-ui/build/static/kotlin-DvWwch7e.js +1 -0
- package/web-ui/build/static/kumir-DxiPnZla.js +1 -0
- package/web-ui/build/static/kusto-tc7F4iSM.js +1 -0
- package/web-ui/build/static/lasso-CuIxaW6G.js +1 -0
- package/web-ui/build/static/latex-DaVNZvfJ.js +1 -0
- package/web-ui/build/static/latex-Y-rAMd-m.js +1 -0
- package/web-ui/build/static/latte-BWApgl6V.js +1 -0
- package/web-ui/build/static/ldif-BjMOGnja.js +1 -0
- package/web-ui/build/static/leaf-BjXTc-gF.js +1 -0
- package/web-ui/build/static/less-BAoMgFHw.js +1 -0
- package/web-ui/build/static/less-BIXQ4mtM.js +1 -0
- package/web-ui/build/static/lilypond-B6avfRfg.js +1 -0
- package/web-ui/build/static/liquid-Bgux4iHZ.js +1 -0
- package/web-ui/build/static/lisp-DZwObPt9.js +1 -0
- package/web-ui/build/static/lisp-KuHBOL65.js +1 -0
- package/web-ui/build/static/livecodeserver-Cuv2a-Np.js +1 -0
- package/web-ui/build/static/livescript-B5joK5y1.js +1 -0
- package/web-ui/build/static/livescript-Cfl-5tRI.js +1 -0
- package/web-ui/build/static/llvm-Bq_MvIMt.js +1 -0
- package/web-ui/build/static/llvm-DDplxqNH.js +1 -0
- package/web-ui/build/static/log-C0UrUYNZ.js +1 -0
- package/web-ui/build/static/lolcode-Bpn0nZXI.js +1 -0
- package/web-ui/build/static/lsl-Baa3yssY.js +1 -0
- package/web-ui/build/static/lua-CmS7S4r8.js +1 -0
- package/web-ui/build/static/lua-CuTsqVUh.js +1 -0
- package/web-ui/build/static/magma-D80wNgLE.js +1 -0
- package/web-ui/build/static/makefile-BUfHdkgl.js +1 -0
- package/web-ui/build/static/makefile-DcdqPwtQ.js +1 -0
- package/web-ui/build/static/markdown-Dnk5E2xs.js +1 -0
- package/web-ui/build/static/markdown-dVGF22cZ.js +1 -0
- package/web-ui/build/static/markup-templating-DFEtKf2a.js +1 -0
- package/web-ui/build/static/mathematica-D6RpzMC4.js +1 -0
- package/web-ui/build/static/matlab-BNL791Vd.js +1 -0
- package/web-ui/build/static/matlab-CcJdErYu.js +1 -0
- package/web-ui/build/static/maxima-DtObzS0g.js +1 -0
- package/web-ui/build/static/maxscript-Boeo84Pc.js +1 -0
- package/web-ui/build/static/mel-CQDFYa9L.js +1 -0
- package/web-ui/build/static/mel-Dqbr8Ct3.js +1 -0
- package/web-ui/build/static/mercury-CtQIBvXV.js +1 -0
- package/web-ui/build/static/mermaid-Be11mdXJ.js +1 -0
- package/web-ui/build/static/mipsasm-Bzu7KAos.js +1 -0
- package/web-ui/build/static/mizar-CTwK6_XC.js +1 -0
- package/web-ui/build/static/mizar-DGSninkt.js +1 -0
- package/web-ui/build/static/mojolicious-B5J4ts83.js +1 -0
- package/web-ui/build/static/mongodb-Canys4Q-.js +1 -0
- package/web-ui/build/static/monkey-Bc8QeQKW.js +1 -0
- package/web-ui/build/static/monkey-BuakrB5T.js +1 -0
- package/web-ui/build/static/moonscript-CCCY-549.js +1 -0
- package/web-ui/build/static/moonscript-DgTN69ea.js +1 -0
- package/web-ui/build/static/n1ql-BeClvJbI.js +1 -0
- package/web-ui/build/static/n1ql-Bmrbwg5D.js +1 -0
- package/web-ui/build/static/n4js-BI7ajnA2.js +1 -0
- package/web-ui/build/static/nand2tetris-hdl-CTtO9tFK.js +1 -0
- package/web-ui/build/static/naniscript-ByLXiYB-.js +1 -0
- package/web-ui/build/static/nasm-DyRBXPTp.js +1 -0
- package/web-ui/build/static/neon-CuGxTU_0.js +1 -0
- package/web-ui/build/static/nevod-CWnxD5-I.js +1 -0
- package/web-ui/build/static/nginx-9_Wnc0a8.js +1 -0
- package/web-ui/build/static/nginx-YzYFF0YL.js +1 -0
- package/web-ui/build/static/nim-Dgg2r5_y.js +1 -0
- package/web-ui/build/static/nim-Dket4DOJ.js +1 -0
- package/web-ui/build/static/nix-CM2XsNVm.js +1 -0
- package/web-ui/build/static/nix-P756jRJz.js +1 -0
- package/web-ui/build/static/node-repl-BRadhyOu.js +1 -0
- package/web-ui/build/static/nsis-4AzWWTt3.js +1 -0
- package/web-ui/build/static/nsis-DawN0fp-.js +1 -0
- package/web-ui/build/static/objectivec-BHy8WXYe.js +1 -0
- package/web-ui/build/static/objectivec-CVvJfvIh.js +1 -0
- package/web-ui/build/static/ocaml-BXmkRrGk.js +1 -0
- package/web-ui/build/static/ocaml-D9blGtF-.js +1 -0
- package/web-ui/build/static/opencl-CrP8B7-Y.js +1 -0
- package/web-ui/build/static/openqasm-BF_FGc9C.js +1 -0
- package/web-ui/build/static/openscad-BX0LeVCC.js +1 -0
- package/web-ui/build/static/oxygene-Dv7-kaO-.js +1 -0
- package/web-ui/build/static/oz-DMw40m1E.js +1 -0
- package/web-ui/build/static/parigp-C6qS_vHR.js +1 -0
- package/web-ui/build/static/parser-CIccHpfs.js +1 -0
- package/web-ui/build/static/parser3-DY65kzTx.js +1 -0
- package/web-ui/build/static/pascal-Bd8OdL32.js +1 -0
- package/web-ui/build/static/pascaligo-Czv0M1Ke.js +1 -0
- package/web-ui/build/static/pcaxis-Ct9Xzb0v.js +1 -0
- package/web-ui/build/static/peoplecode-Qs_52P9e.js +1 -0
- package/web-ui/build/static/perl-C7ZXixEj.js +1 -0
- package/web-ui/build/static/perl-jarWhwwS.js +1 -0
- package/web-ui/build/static/pf-CUIEZmhu.js +1 -0
- package/web-ui/build/static/pgsql-Cd9Vguu1.js +1 -0
- package/web-ui/build/static/php-BkEHU_F0.js +1 -0
- package/web-ui/build/static/php-DgxitXwB.js +1 -0
- package/web-ui/build/static/php-extras-DZ4cqJZr.js +1 -0
- package/web-ui/build/static/php-template-CmDsJimC.js +1 -0
- package/web-ui/build/static/phpdoc-BuzuEwXH.js +1 -0
- package/web-ui/build/static/plaintext-B9rbdHym.js +1 -0
- package/web-ui/build/static/plsql-BsUyjIMQ.js +1 -0
- package/web-ui/build/static/pony-DByqIe1z.js +1 -0
- package/web-ui/build/static/powerquery-1VSf_dLA.js +1 -0
- package/web-ui/build/static/powershell-CBYqkmKw.js +1 -0
- package/web-ui/build/static/powershell-TsgmSwr2.js +1 -0
- package/web-ui/build/static/processing-C7SmsDmp.js +1 -0
- package/web-ui/build/static/processing-DdvVbwBS.js +1 -0
- package/web-ui/build/static/profile-CrLgDepu.js +1 -0
- package/web-ui/build/static/prolog-1ezqlvDI.js +1 -0
- package/web-ui/build/static/prolog-BBYyok9G.js +1 -0
- package/web-ui/build/static/promql-CWatQOpO.js +1 -0
- package/web-ui/build/static/properties-BJQxP8JR.js +1 -0
- package/web-ui/build/static/properties-CfR17w8n.js +1 -0
- package/web-ui/build/static/protobuf-Cfo3A4gN.js +1 -0
- package/web-ui/build/static/protobuf-DjV26D7V.js +1 -0
- package/web-ui/build/static/psl-DHNAOSYZ.js +1 -0
- package/web-ui/build/static/pug-DnizfuFH.js +1 -0
- package/web-ui/build/static/puppet-BCcVNhLH.js +1 -0
- package/web-ui/build/static/puppet-BmSRwm0u.js +1 -0
- package/web-ui/build/static/pure-l1UGfReS.js +1 -0
- package/web-ui/build/static/purebasic-Cm1PR5lC.js +1 -0
- package/web-ui/build/static/purebasic-Dxq0YRkO.js +1 -0
- package/web-ui/build/static/purescript-CpKroRLn.js +1 -0
- package/web-ui/build/static/python-C0PwNTef.js +1 -0
- package/web-ui/build/static/python-Cr-3O1IE.js +1 -0
- package/web-ui/build/static/python-repl-B1P7p6JA.js +1 -0
- package/web-ui/build/static/q-CL79K_i7.js +1 -0
- package/web-ui/build/static/q-DLSzzmR3.js +1 -0
- package/web-ui/build/static/qml-BeN40LEp.js +1 -0
- package/web-ui/build/static/qml-DIjR5p31.js +1 -0
- package/web-ui/build/static/qore-CrnBG9xB.js +1 -0
- package/web-ui/build/static/qsharp-B8sPnj52.js +1 -0
- package/web-ui/build/static/r-UubkOviq.js +1 -0
- package/web-ui/build/static/r-lT3ysYih.js +1 -0
- package/web-ui/build/static/racket-Czw_1lqD.js +1 -0
- package/web-ui/build/static/reason-D-_rWPty.js +1 -0
- package/web-ui/build/static/reasonml-BZkHaGWN.js +1 -0
- package/web-ui/build/static/regex-BjeMZDQs.js +1 -0
- package/web-ui/build/static/rego-OYluSFFo.js +1 -0
- package/web-ui/build/static/renpy-D1X5nAoT.js +1 -0
- package/web-ui/build/static/rest-DnlQgDnx.js +1 -0
- package/web-ui/build/static/rib-DtDxwFfu.js +1 -0
- package/web-ui/build/static/rip-D8vOYwVd.js +1 -0
- package/web-ui/build/static/roboconf-DtEUhHis.js +1 -0
- package/web-ui/build/static/roboconf-w-iqpst4.js +1 -0
- package/web-ui/build/static/robotframework-M9UnAH02.js +1 -0
- package/web-ui/build/static/routeros-CX0gciU5.js +1 -0
- package/web-ui/build/static/rsl-CZOvPQbk.js +1 -0
- package/web-ui/build/static/ruby-BEwdhTtL.js +1 -0
- package/web-ui/build/static/ruby-dlRf3rgu.js +1 -0
- package/web-ui/build/static/ruleslanguage-CKX7tlpI.js +1 -0
- package/web-ui/build/static/rust-7xat0n1g.js +1 -0
- package/web-ui/build/static/rust-DCpdcw_7.js +1 -0
- package/web-ui/build/static/sas-B9K83LkK.js +1 -0
- package/web-ui/build/static/sas-ijKPjRom.js +1 -0
- package/web-ui/build/static/sass-ByZaOmQh.js +1 -0
- package/web-ui/build/static/scala-B6tUDsIS.js +1 -0
- package/web-ui/build/static/scala-BZ4NRThT.js +1 -0
- package/web-ui/build/static/scheme-BmDQeIVd.js +1 -0
- package/web-ui/build/static/scheme-DIrkVtyr.js +1 -0
- package/web-ui/build/static/scilab-BUTG2a1V.js +1 -0
- package/web-ui/build/static/scss-CC2Rr7DZ.js +1 -0
- package/web-ui/build/static/scss-CG0LtoLt.js +1 -0
- package/web-ui/build/static/shell-DEPni1su.js +1 -0
- package/web-ui/build/static/shell-session-DxlJbQBl.js +1 -0
- package/web-ui/build/static/smali-C5QEAhGK.js +1 -0
- package/web-ui/build/static/smali-RgOjDrpG.js +1 -0
- package/web-ui/build/static/smalltalk-CCLKnQXy.js +1 -0
- package/web-ui/build/static/smalltalk-D2pTtTF6.js +1 -0
- package/web-ui/build/static/smarty-D5pb-235.js +1 -0
- package/web-ui/build/static/sml-CtXZ7rhO.js +1 -0
- package/web-ui/build/static/sml-DgsaUoao.js +1 -0
- package/web-ui/build/static/solidity-DLDSX1RV.js +1 -0
- package/web-ui/build/static/solution-file-BaDc2_E-.js +1 -0
- package/web-ui/build/static/soy-x9k9lQq1.js +1 -0
- package/web-ui/build/static/sparql-CEyFkY2d.js +1 -0
- package/web-ui/build/static/splunk-spl-Cnoeez_o.js +1 -0
- package/web-ui/build/static/sqf-BiFuoaL6.js +1 -0
- package/web-ui/build/static/sqf-IC3wZMuh.js +1 -0
- package/web-ui/build/static/sql-B0kmmGOU.js +1 -0
- package/web-ui/build/static/sql-CUJr2cg-.js +1 -0
- package/web-ui/build/static/sql_more-CWl75_kq.js +1 -0
- package/web-ui/build/static/squirrel-CcEHntJJ.js +1 -0
- package/web-ui/build/static/stan-5fBmEp2c.js +1 -0
- package/web-ui/build/static/stan-CAB7l4xW.js +1 -0
- package/web-ui/build/static/stata-Cg3Bl6d7.js +1 -0
- package/web-ui/build/static/step21-CZGJgHPf.js +1 -0
- package/web-ui/build/static/stylus-BO533InK.js +1 -0
- package/web-ui/build/static/stylus-DNWkkgmm.js +1 -0
- package/web-ui/build/static/subunit-BFopBokb.js +1 -0
- package/web-ui/build/static/swift-CalO-wab.js +1 -0
- package/web-ui/build/static/swift-mePvo3P4.js +1 -0
- package/web-ui/build/static/systemd-bKGRJ9Ha.js +1 -0
- package/web-ui/build/static/t4-cs-D7xxs1lK.js +1 -0
- package/web-ui/build/static/t4-templating-_11pVeD-.js +1 -0
- package/web-ui/build/static/t4-vb-CprOaKdB.js +1 -0
- package/web-ui/build/static/taggerscript-CEpPw-UD.js +1 -0
- package/web-ui/build/static/tap-CFFYSmjs.js +1 -0
- package/web-ui/build/static/tap-Dy3jliYv.js +1 -0
- package/web-ui/build/static/tcl-Bw3AVuiY.js +1 -0
- package/web-ui/build/static/tcl-CD50d_-j.js +1 -0
- package/web-ui/build/static/textile-CSeSEGjy.js +1 -0
- package/web-ui/build/static/thrift-00VB402i.js +1 -0
- package/web-ui/build/static/toml-DuFNkxHe.js +1 -0
- package/web-ui/build/static/tp-4CeaWqyI.js +1 -0
- package/web-ui/build/static/tremor-BnerOgTY.js +1 -0
- package/web-ui/build/static/tsx-XiNhF1ao.js +1 -0
- package/web-ui/build/static/tt2-CM6FV9KO.js +1 -0
- package/web-ui/build/static/turtle-JxpiTJEQ.js +1 -0
- package/web-ui/build/static/twig-C16bJf43.js +1 -0
- package/web-ui/build/static/twig-DQ-0wCvQ.js +1 -0
- package/web-ui/build/static/typescript-ILNg_Uvt.js +1 -0
- package/web-ui/build/static/typescript-chBpZOex.js +1 -0
- package/web-ui/build/static/typoscript-D2-lUjQX.js +1 -0
- package/web-ui/build/static/unrealscript-CwOA8REe.js +1 -0
- package/web-ui/build/static/uorazor-Dh1SAWKw.js +1 -0
- package/web-ui/build/static/uri-BF1wAQOC.js +1 -0
- package/web-ui/build/static/v-DUq5Mxzu.js +1 -0
- package/web-ui/build/static/vala-BYNy6zW2.js +1 -0
- package/web-ui/build/static/vala-CqGfs9Kv.js +1 -0
- package/web-ui/build/static/vbnet-BxH9jvRi.js +1 -0
- package/web-ui/build/static/vbnet-CJxJGhMO.js +1 -0
- package/web-ui/build/static/vbscript-OQ6kMcDV.js +1 -0
- package/web-ui/build/static/vbscript-html-CZ-QJ4ch.js +1 -0
- package/web-ui/build/static/velocity-B59YHwoP.js +1 -0
- package/web-ui/build/static/verilog--uW8iUzt.js +1 -0
- package/web-ui/build/static/verilog-DAQz3Gcl.js +1 -0
- package/web-ui/build/static/vhdl-5FrGi5Wx.js +1 -0
- package/web-ui/build/static/vhdl-C25AEZ8g.js +1 -0
- package/web-ui/build/static/vim-CW6uewUP.js +1 -0
- package/web-ui/build/static/vim-f3zGsJk1.js +1 -0
- package/web-ui/build/static/visual-basic-CoOTQEUn.js +1 -0
- package/web-ui/build/static/warpscript-DGouvP9I.js +1 -0
- package/web-ui/build/static/wasm-BZeW0TNm.js +1 -0
- package/web-ui/build/static/web-idl-Bw1mV_A4.js +1 -0
- package/web-ui/build/static/wiki-CZG2B_w1.js +1 -0
- package/web-ui/build/static/wolfram-CiMIUpaO.js +1 -0
- package/web-ui/build/static/wren-Bh9Sv_02.js +1 -0
- package/web-ui/build/static/x86asm-BhoPGTpG.js +1 -0
- package/web-ui/build/static/xeora-C5CM7V9L.js +1 -0
- package/web-ui/build/static/xl-WCHINiXA.js +1 -0
- package/web-ui/build/static/xml-DPAIpwAO.js +1 -0
- package/web-ui/build/static/xml-doc-CJxlhMe0.js +1 -0
- package/web-ui/build/static/xojo-BW0Z0CzB.js +1 -0
- package/web-ui/build/static/xquery-CwiBIiph.js +1 -0
- package/web-ui/build/static/xquery-De9QIea7.js +1 -0
- package/web-ui/build/static/yaml-CKzSgstB.js +1 -0
- package/web-ui/build/static/yaml-DIHBhXM_.js +1 -0
- package/web-ui/build/static/yang-Cn0PKttf.js +1 -0
- package/web-ui/build/static/zephir-CKVBh8TU.js +1 -0
- package/web-ui/build/static/zig-CetEB4NE.js +1 -0
- package/web-ui/build/static/1c-alYWzgyM.js +0 -1
- package/web-ui/build/static/abap-MNX4MGQu.js +0 -1
- package/web-ui/build/static/abnf-PB6umZUe.js +0 -1
- package/web-ui/build/static/abnf-lLelqyRq.js +0 -1
- package/web-ui/build/static/accesslog-ECfnNf6M.js +0 -1
- package/web-ui/build/static/actionscript-48Mv-P2G.js +0 -1
- package/web-ui/build/static/actionscript-CmFMkWAF.js +0 -1
- package/web-ui/build/static/ada-D0nj2830.js +0 -1
- package/web-ui/build/static/ada-DC68kRrL.js +0 -1
- package/web-ui/build/static/agda-CjnuTEYG.js +0 -1
- package/web-ui/build/static/al-DICLGfy9.js +0 -1
- package/web-ui/build/static/angelscript-D7H0wknj.js +0 -1
- package/web-ui/build/static/antlr4-C_KsZIwI.js +0 -1
- package/web-ui/build/static/apache-Cfj2o0TW.js +0 -1
- package/web-ui/build/static/apacheconf-D5jQXqP_.js +0 -1
- package/web-ui/build/static/apex-G2rOb7vm.js +0 -1
- package/web-ui/build/static/apl-CE_aKOLQ.js +0 -1
- package/web-ui/build/static/applescript-BffXi9IZ.js +0 -1
- package/web-ui/build/static/applescript-CshVa-pZ.js +0 -1
- package/web-ui/build/static/aql-F9xr2xIN.js +0 -1
- package/web-ui/build/static/arcade-29Re4fPy.js +0 -1
- package/web-ui/build/static/arduino-BGsZiYrf.js +0 -1
- package/web-ui/build/static/arduino-HiqNS--s.js +0 -1
- package/web-ui/build/static/arff-jPcJv_eJ.js +0 -1
- package/web-ui/build/static/armasm-DDockn0p.js +0 -1
- package/web-ui/build/static/asciidoc-BW3nh79M.js +0 -1
- package/web-ui/build/static/asciidoc-Dxit6U7t.js +0 -1
- package/web-ui/build/static/asm6502-eTpxnsNy.js +0 -1
- package/web-ui/build/static/asmatmel-BHeErmNQ.js +0 -1
- package/web-ui/build/static/aspectj-CX6x53Aw.js +0 -1
- package/web-ui/build/static/aspnet-BFDGvlyU.js +0 -1
- package/web-ui/build/static/autohotkey-CRNZnW-g.js +0 -1
- package/web-ui/build/static/autohotkey-DhdXEUbC.js +0 -1
- package/web-ui/build/static/autoit-BrCU_LoC.js +0 -1
- package/web-ui/build/static/autoit-CNY5ZLoO.js +0 -1
- package/web-ui/build/static/avisynth-CvpX-vR-.js +0 -1
- package/web-ui/build/static/avrasm-Ch0VgbnW.js +0 -1
- package/web-ui/build/static/avro-idl-DVNgaXeA.js +0 -1
- package/web-ui/build/static/awk-DBbMErBm.js +0 -1
- package/web-ui/build/static/axapta-BZMCBJyd.js +0 -1
- package/web-ui/build/static/bash-B7W9_l_H.js +0 -1
- package/web-ui/build/static/bash-nUxPXV93.js +0 -1
- package/web-ui/build/static/basic-CncKWTdb.js +0 -1
- package/web-ui/build/static/basic-t050Yfrj.js +0 -1
- package/web-ui/build/static/batch-DzppEDD6.js +0 -1
- package/web-ui/build/static/bbcode-Cxa6xUCC.js +0 -1
- package/web-ui/build/static/bicep-CNfRbyLD.js +0 -1
- package/web-ui/build/static/birb-BQn3C4qH.js +0 -1
- package/web-ui/build/static/bison-CG1ITN82.js +0 -1
- package/web-ui/build/static/bnf-BH6EqVfg.js +0 -1
- package/web-ui/build/static/bnf-DOOI4ziA.js +0 -1
- package/web-ui/build/static/brainfuck-CuvanNT4.js +0 -1
- package/web-ui/build/static/brainfuck-DEN53aXA.js +0 -1
- package/web-ui/build/static/brightscript-C_qPLhPu.js +0 -1
- package/web-ui/build/static/bro-DE4fdxVn.js +0 -1
- package/web-ui/build/static/bsl-DhilRMN1.js +0 -1
- package/web-ui/build/static/c-DJMkv9RR.js +0 -1
- package/web-ui/build/static/c-HH0eyrSO.js +0 -1
- package/web-ui/build/static/c-like-CievvBLp.js +0 -1
- package/web-ui/build/static/cal-BBz3_HT0.js +0 -1
- package/web-ui/build/static/capnproto-BOgD9Wf3.js +0 -1
- package/web-ui/build/static/ceylon-MWYZBIMt.js +0 -1
- package/web-ui/build/static/cfscript-BiVuxt5i.js +0 -1
- package/web-ui/build/static/chaiscript-CPx7l6f-.js +0 -1
- package/web-ui/build/static/cil-3DGkdNym.js +0 -1
- package/web-ui/build/static/clean-Bxi-hwbJ.js +0 -1
- package/web-ui/build/static/clojure-BBMLjTS9.js +0 -1
- package/web-ui/build/static/clojure-RPrwnP3x.js +0 -1
- package/web-ui/build/static/clojure-repl-BE9VGIhP.js +0 -1
- package/web-ui/build/static/cmake-BMeSZbTq.js +0 -1
- package/web-ui/build/static/cmake-CLVNptnB.js +0 -1
- package/web-ui/build/static/cobol-f-w6Mj2H.js +0 -1
- package/web-ui/build/static/coffeescript-CESbl4tN.js +0 -1
- package/web-ui/build/static/coffeescript-DmOzsrDS.js +0 -1
- package/web-ui/build/static/concurnas-DxQ9U571.js +0 -1
- package/web-ui/build/static/coq-4Wu7fuDB.js +0 -1
- package/web-ui/build/static/coq-BERQ-1c4.js +0 -1
- package/web-ui/build/static/cos-SsvxAn6O.js +0 -1
- package/web-ui/build/static/cpp-BkY4KhJS.js +0 -1
- package/web-ui/build/static/cpp-CGkeKbAD.js +0 -1
- package/web-ui/build/static/crmsh-BL32bNK1.js +0 -1
- package/web-ui/build/static/crystal-C4e562-w.js +0 -1
- package/web-ui/build/static/crystal-Hu8WDm2E.js +0 -1
- package/web-ui/build/static/csharp-DvnJhHBw.js +0 -1
- package/web-ui/build/static/csharp-DxFH-E_J.js +0 -1
- package/web-ui/build/static/cshtml-BkimeLw1.js +0 -1
- package/web-ui/build/static/csp-CDNmbLWI.js +0 -1
- package/web-ui/build/static/csp-DXmobqdr.js +0 -1
- package/web-ui/build/static/css-VRUoX-cu.js +0 -1
- package/web-ui/build/static/css-extras-Dcz-5Gz_.js +0 -1
- package/web-ui/build/static/csv-Cy-vj0dX.js +0 -1
- package/web-ui/build/static/cypher-CyiGMZEd.js +0 -1
- package/web-ui/build/static/d-50yhKzqs.js +0 -1
- package/web-ui/build/static/d-CtQcHe9N.js +0 -1
- package/web-ui/build/static/dart-Dj05IVm2.js +0 -1
- package/web-ui/build/static/dart-kumEUEig.js +0 -1
- package/web-ui/build/static/dataweave-CyaTPvHl.js +0 -1
- package/web-ui/build/static/dax-BYZEUwTe.js +0 -1
- package/web-ui/build/static/delphi-Hrkf0_Zm.js +0 -1
- package/web-ui/build/static/dhall-ZfXZcVvQ.js +0 -1
- package/web-ui/build/static/diff-B681Qorw.js +0 -1
- package/web-ui/build/static/diff-C85U1vU3.js +0 -1
- package/web-ui/build/static/django-BbqkMAd3.js +0 -1
- package/web-ui/build/static/django-ebEm7IW1.js +0 -1
- package/web-ui/build/static/dns-CIKOn0cx.js +0 -1
- package/web-ui/build/static/dns-zone-file-Cgfj303q.js +0 -1
- package/web-ui/build/static/docker-DezZesK-.js +0 -1
- package/web-ui/build/static/dockerfile-HOIJDSPT.js +0 -1
- package/web-ui/build/static/dos-Bv0IPgh2.js +0 -1
- package/web-ui/build/static/dot-BiJIuPYL.js +0 -1
- package/web-ui/build/static/dsconfig-DCPRv9km.js +0 -1
- package/web-ui/build/static/dts-CXMbX7gl.js +0 -1
- package/web-ui/build/static/dust-Mjmn5ftw.js +0 -1
- package/web-ui/build/static/ebnf-469W3R_o.js +0 -1
- package/web-ui/build/static/ebnf-Bs6Ftm9u.js +0 -1
- package/web-ui/build/static/editorconfig-C4dD8cK_.js +0 -1
- package/web-ui/build/static/eiffel-D78uHdvn.js +0 -1
- package/web-ui/build/static/ejs-CUydrtqr.js +0 -1
- package/web-ui/build/static/elixir-BIxlPrSO.js +0 -1
- package/web-ui/build/static/elixir-CLS7rDXm.js +0 -1
- package/web-ui/build/static/elm-CdXXWPN7.js +0 -1
- package/web-ui/build/static/elm-DT7wSSPo.js +0 -1
- package/web-ui/build/static/erb-8Xeo3WFF.js +0 -1
- package/web-ui/build/static/erb-DROzrB_O.js +0 -1
- package/web-ui/build/static/erlang-DbMlkDTN.js +0 -1
- package/web-ui/build/static/erlang-DoF730hs.js +0 -1
- package/web-ui/build/static/erlang-repl-B7enXvga.js +0 -1
- package/web-ui/build/static/etlua-CehWhSD3.js +0 -1
- package/web-ui/build/static/excel-DHmOIegb.js +0 -1
- package/web-ui/build/static/excel-formula-DdeWF1_w.js +0 -1
- package/web-ui/build/static/factor-DBMZ3xT3.js +0 -1
- package/web-ui/build/static/false-AxZ_vqH0.js +0 -1
- package/web-ui/build/static/firestore-security-rules-BChGByFG.js +0 -1
- package/web-ui/build/static/fix-Cc-mOcI9.js +0 -1
- package/web-ui/build/static/flix-CBpO-hKP.js +0 -1
- package/web-ui/build/static/flow-FI5Ahl__.js +0 -1
- package/web-ui/build/static/fortran-C-jW3mxU.js +0 -1
- package/web-ui/build/static/fortran-zFBKdQax.js +0 -1
- package/web-ui/build/static/fsharp-Qu8P7ZfJ.js +0 -1
- package/web-ui/build/static/fsharp-gJT07_u6.js +0 -1
- package/web-ui/build/static/ftl-DcmD2jIl.js +0 -1
- package/web-ui/build/static/gams-BAhsVwik.js +0 -1
- package/web-ui/build/static/gap-DtjJMac5.js +0 -1
- package/web-ui/build/static/gauss-DLNJrvWH.js +0 -1
- package/web-ui/build/static/gcode-CbChIRHG.js +0 -1
- package/web-ui/build/static/gcode-lgPukEuS.js +0 -1
- package/web-ui/build/static/gdscript-ChdqKkXx.js +0 -1
- package/web-ui/build/static/gedcom-B3RAxWnR.js +0 -1
- package/web-ui/build/static/gherkin-BwKe4UMd.js +0 -1
- package/web-ui/build/static/gherkin-D1Q4xoY6.js +0 -1
- package/web-ui/build/static/git-CwA8K3Cg.js +0 -1
- package/web-ui/build/static/glsl-B_AtY5k6.js +0 -1
- package/web-ui/build/static/glsl-BgXyZa9x.js +0 -1
- package/web-ui/build/static/gml-O2ebFipB.js +0 -1
- package/web-ui/build/static/gml-xLusiP_j.js +0 -1
- package/web-ui/build/static/gn-T-uGKQLr.js +0 -1
- package/web-ui/build/static/go-B9spniuU.js +0 -1
- package/web-ui/build/static/go-DTwlbvuB.js +0 -1
- package/web-ui/build/static/go-module-DWCbGNjZ.js +0 -1
- package/web-ui/build/static/golo-Dp3ZC9Ry.js +0 -1
- package/web-ui/build/static/gradle-DxnYLs2J.js +0 -1
- package/web-ui/build/static/graphql-8stFQb3o.js +0 -1
- package/web-ui/build/static/groovy-Dbpy85Rs.js +0 -1
- package/web-ui/build/static/groovy-zimUQS73.js +0 -1
- package/web-ui/build/static/haml-B5gJAH_w.js +0 -1
- package/web-ui/build/static/haml-CXW3L0QY.js +0 -1
- package/web-ui/build/static/handlebars-BW92WxdN.js +0 -1
- package/web-ui/build/static/handlebars-DNysemQE.js +0 -1
- package/web-ui/build/static/haskell-BCP5M1h6.js +0 -1
- package/web-ui/build/static/haskell-BvSwVdJS.js +0 -1
- package/web-ui/build/static/haxe-BBVHLa1y.js +0 -1
- package/web-ui/build/static/haxe-DHK7XQB_.js +0 -1
- package/web-ui/build/static/hcl-CW0_ZJVS.js +0 -1
- package/web-ui/build/static/hlsl-DAH7B5KM.js +0 -1
- package/web-ui/build/static/hoon-CXY0i4p4.js +0 -1
- package/web-ui/build/static/hpkp-RL8DG2Fy.js +0 -1
- package/web-ui/build/static/hsp-DMAT8yb3.js +0 -1
- package/web-ui/build/static/hsts-SOCNnT21.js +0 -1
- package/web-ui/build/static/htmlbars-Bsrm5Qs8.js +0 -1
- package/web-ui/build/static/http-CYjIQwPj.js +0 -1
- package/web-ui/build/static/http-Hu8W9pON.js +0 -1
- package/web-ui/build/static/hy-CDbyyAxf.js +0 -1
- package/web-ui/build/static/ichigojam-CpPBjr7T.js +0 -1
- package/web-ui/build/static/icon-UI22EXz2.js +0 -1
- package/web-ui/build/static/icu-message-format-DAU066Wq.js +0 -1
- package/web-ui/build/static/idris-BuMEL37s.js +0 -1
- package/web-ui/build/static/iecst-CEqwKb_G.js +0 -1
- package/web-ui/build/static/ignore-CcCxTW7I.js +0 -1
- package/web-ui/build/static/index-DexoK8pu.js +0 -834
- package/web-ui/build/static/index-DgeaGxMy.js +0 -13
- package/web-ui/build/static/index-RM91zq9j.js +0 -1
- package/web-ui/build/static/inform7-BdnukB1N.js +0 -1
- package/web-ui/build/static/inform7-Chkw-Df3.js +0 -1
- package/web-ui/build/static/ini--KUo0NJD.js +0 -1
- package/web-ui/build/static/ini-eo_rWFNv.js +0 -1
- package/web-ui/build/static/io-CWDVYxeI.js +0 -1
- package/web-ui/build/static/irpf90-CWFfmPjK.js +0 -1
- package/web-ui/build/static/isbl-BNkdk_dr.js +0 -1
- package/web-ui/build/static/j-Bg02P4UL.js +0 -1
- package/web-ui/build/static/java-BIDWcDHj.js +0 -1
- package/web-ui/build/static/java-D4bhM1sC.js +0 -1
- package/web-ui/build/static/javadoc-DxxfkSj4.js +0 -1
- package/web-ui/build/static/javadoclike-C3v2LXMS.js +0 -1
- package/web-ui/build/static/javascript-CSu6Pvd7.js +0 -1
- package/web-ui/build/static/javastacktrace-C50AqeNg.js +0 -1
- package/web-ui/build/static/jboss-cli-D4aAEeAL.js +0 -1
- package/web-ui/build/static/jexl-F8wyoUqO.js +0 -1
- package/web-ui/build/static/jolie-CdEDMXNQ.js +0 -1
- package/web-ui/build/static/jq-D95l3yQ0.js +0 -1
- package/web-ui/build/static/js-extras-55OlT8yf.js +0 -1
- package/web-ui/build/static/js-templates-4m7AkoaU.js +0 -1
- package/web-ui/build/static/jsdoc-BC6Ab1D0.js +0 -1
- package/web-ui/build/static/json-BHS2wD8g.js +0 -1
- package/web-ui/build/static/json-CPEJ9diH.js +0 -1
- package/web-ui/build/static/json5-EDQFzkuf.js +0 -1
- package/web-ui/build/static/jsonp-Cn_lpjaf.js +0 -1
- package/web-ui/build/static/jsstacktrace-pqdhqbKV.js +0 -1
- package/web-ui/build/static/jsx-Cop--oM_.js +0 -1
- package/web-ui/build/static/julia-B728rR99.js +0 -1
- package/web-ui/build/static/julia-Cq6vOawm.js +0 -1
- package/web-ui/build/static/julia-repl-BfOfjY_7.js +0 -1
- package/web-ui/build/static/keepalived-6ZwoBjFL.js +0 -1
- package/web-ui/build/static/keyman-DmOLCkH_.js +0 -1
- package/web-ui/build/static/kotlin-Bt385M6s.js +0 -1
- package/web-ui/build/static/kotlin-DsTE9me6.js +0 -1
- package/web-ui/build/static/kumir-DGpgb_2O.js +0 -1
- package/web-ui/build/static/kusto-Bb1U0J5m.js +0 -1
- package/web-ui/build/static/lasso-B4Rh4fa1.js +0 -1
- package/web-ui/build/static/latex-BlKwUVQO.js +0 -1
- package/web-ui/build/static/latex-D4EkT2Sx.js +0 -1
- package/web-ui/build/static/latte-8APUTRqH.js +0 -1
- package/web-ui/build/static/ldif-C1AH3r9Q.js +0 -1
- package/web-ui/build/static/leaf-DgHqqnCU.js +0 -1
- package/web-ui/build/static/less-BmLC9UX9.js +0 -1
- package/web-ui/build/static/less-D7wanA1u.js +0 -1
- package/web-ui/build/static/lilypond-CPpwdP3M.js +0 -1
- package/web-ui/build/static/liquid-C9g89s0-.js +0 -1
- package/web-ui/build/static/lisp-Ck1UA6zq.js +0 -1
- package/web-ui/build/static/lisp-tlR-SVFU.js +0 -1
- package/web-ui/build/static/livecodeserver-CfcVUDKK.js +0 -1
- package/web-ui/build/static/livescript-BPfp_PIe.js +0 -1
- package/web-ui/build/static/livescript-BVClM17E.js +0 -1
- package/web-ui/build/static/llvm-1CmNV1WZ.js +0 -1
- package/web-ui/build/static/llvm-DzaT3xf4.js +0 -1
- package/web-ui/build/static/log-x35sd55_.js +0 -1
- package/web-ui/build/static/lolcode-DfGz4a2C.js +0 -1
- package/web-ui/build/static/lsl-BJ13xzsn.js +0 -1
- package/web-ui/build/static/lua-DHTiU4iK.js +0 -1
- package/web-ui/build/static/lua-DttbbyOa.js +0 -1
- package/web-ui/build/static/magma-CM6u6Urv.js +0 -1
- package/web-ui/build/static/makefile--_TmwP5m.js +0 -1
- package/web-ui/build/static/makefile-DoB_xjMl.js +0 -1
- package/web-ui/build/static/markdown-BnyhT66e.js +0 -1
- package/web-ui/build/static/markdown-DvTREwgd.js +0 -1
- package/web-ui/build/static/markup-templating-yOvzgP3Z.js +0 -1
- package/web-ui/build/static/mathematica-BtY5tmVE.js +0 -1
- package/web-ui/build/static/matlab-DK98sDbn.js +0 -1
- package/web-ui/build/static/matlab-sBcSHRlC.js +0 -1
- package/web-ui/build/static/maxima-DMUOymL4.js +0 -1
- package/web-ui/build/static/maxscript-DaIC7eX6.js +0 -1
- package/web-ui/build/static/mel-BuONpgVc.js +0 -1
- package/web-ui/build/static/mel-Ckh0frDB.js +0 -1
- package/web-ui/build/static/mercury-CDFt4KAe.js +0 -1
- package/web-ui/build/static/mermaid-BqSA7Pr5.js +0 -1
- package/web-ui/build/static/mipsasm-Dj6mne2g.js +0 -1
- package/web-ui/build/static/mizar-CIQIQU-V.js +0 -1
- package/web-ui/build/static/mizar-CLTLHCGu.js +0 -1
- package/web-ui/build/static/mojolicious-DxjS7wDV.js +0 -1
- package/web-ui/build/static/mongodb-BAEipI91.js +0 -1
- package/web-ui/build/static/monkey-BBGnwc6s.js +0 -1
- package/web-ui/build/static/monkey-CvxTCuiS.js +0 -1
- package/web-ui/build/static/moonscript-CqDVk1K9.js +0 -1
- package/web-ui/build/static/moonscript-DJyxvZQc.js +0 -1
- package/web-ui/build/static/n1ql-AFWwB4Xn.js +0 -1
- package/web-ui/build/static/n1ql-VuVk9_MG.js +0 -1
- package/web-ui/build/static/n4js-BH6hpdgG.js +0 -1
- package/web-ui/build/static/nand2tetris-hdl-kVewh9V1.js +0 -1
- package/web-ui/build/static/naniscript-B_oQ4TiW.js +0 -1
- package/web-ui/build/static/nasm-B1_bJvcz.js +0 -1
- package/web-ui/build/static/neon-CbXfhQIm.js +0 -1
- package/web-ui/build/static/nevod-5Fv5cPWk.js +0 -1
- package/web-ui/build/static/nginx-BfifkBy-.js +0 -1
- package/web-ui/build/static/nginx-D9toNO0V.js +0 -1
- package/web-ui/build/static/nim-BFN2inD1.js +0 -1
- package/web-ui/build/static/nim-do_UhCvy.js +0 -1
- package/web-ui/build/static/nix-D6RLwwOZ.js +0 -1
- package/web-ui/build/static/nix-djoKaPeE.js +0 -1
- package/web-ui/build/static/node-repl-DDbffQSR.js +0 -1
- package/web-ui/build/static/nsis-BiO6b68i.js +0 -1
- package/web-ui/build/static/nsis-CHzeu7js.js +0 -1
- package/web-ui/build/static/objectivec-B7vXzYuT.js +0 -1
- package/web-ui/build/static/objectivec-BLn212SY.js +0 -1
- package/web-ui/build/static/ocaml-BvpR0Yig.js +0 -1
- package/web-ui/build/static/ocaml-DWZF00Ti.js +0 -1
- package/web-ui/build/static/opencl-C2K2Ctu5.js +0 -1
- package/web-ui/build/static/openqasm-Cbtnnn3m.js +0 -1
- package/web-ui/build/static/openscad-CEPC0-yW.js +0 -1
- package/web-ui/build/static/oxygene-KfcdTXi0.js +0 -1
- package/web-ui/build/static/oz-B-azwNjQ.js +0 -1
- package/web-ui/build/static/parigp-IWtYGphS.js +0 -1
- package/web-ui/build/static/parser-CUCdnJ6l.js +0 -1
- package/web-ui/build/static/parser3--a7jm4Uq.js +0 -1
- package/web-ui/build/static/pascal-BbezKExl.js +0 -1
- package/web-ui/build/static/pascaligo-Bd8IN8hq.js +0 -1
- package/web-ui/build/static/pcaxis-CfT0dd7B.js +0 -1
- package/web-ui/build/static/peoplecode-Dq29i2LW.js +0 -1
- package/web-ui/build/static/perl-BZLc5sMP.js +0 -1
- package/web-ui/build/static/perl-JJmLLJne.js +0 -1
- package/web-ui/build/static/pf-seOENy0q.js +0 -1
- package/web-ui/build/static/pgsql-BtkzXwKY.js +0 -1
- package/web-ui/build/static/php-8b9a1w98.js +0 -1
- package/web-ui/build/static/php-extras-5D00a1Fm.js +0 -1
- package/web-ui/build/static/php-imFv4WXA.js +0 -1
- package/web-ui/build/static/php-template-CI-0RdMu.js +0 -1
- package/web-ui/build/static/phpdoc-DdcPBfc-.js +0 -1
- package/web-ui/build/static/plaintext-Ca1WAvT6.js +0 -1
- package/web-ui/build/static/plsql-CZV7QAnN.js +0 -1
- package/web-ui/build/static/pony-DiomUkGt.js +0 -1
- package/web-ui/build/static/powerquery-CKXX2_O_.js +0 -1
- package/web-ui/build/static/powershell-2Ctsosr0.js +0 -1
- package/web-ui/build/static/powershell-DVPkgaB6.js +0 -1
- package/web-ui/build/static/processing-BAuxATGX.js +0 -1
- package/web-ui/build/static/processing-DBzyjRsf.js +0 -1
- package/web-ui/build/static/profile-Cq2gkRUb.js +0 -1
- package/web-ui/build/static/prolog-ByKO_5p_.js +0 -1
- package/web-ui/build/static/prolog-CDCLze6j.js +0 -1
- package/web-ui/build/static/promql-BYOPu10L.js +0 -1
- package/web-ui/build/static/properties-kP8T8mqV.js +0 -1
- package/web-ui/build/static/properties-zdANIr61.js +0 -1
- package/web-ui/build/static/protobuf-DhAYlNOg.js +0 -1
- package/web-ui/build/static/protobuf-a1lLQN1f.js +0 -1
- package/web-ui/build/static/psl-DpP1u6wu.js +0 -1
- package/web-ui/build/static/pug-BobY0hsa.js +0 -1
- package/web-ui/build/static/puppet-CDimLnep.js +0 -1
- package/web-ui/build/static/puppet-D7DLS3gG.js +0 -1
- package/web-ui/build/static/pure-4QGsilHw.js +0 -1
- package/web-ui/build/static/purebasic-D0wI4z6w.js +0 -1
- package/web-ui/build/static/purebasic-Du_RxI7h.js +0 -1
- package/web-ui/build/static/purescript-CM92Fn9c.js +0 -1
- package/web-ui/build/static/python-Bvcn81x2.js +0 -1
- package/web-ui/build/static/python-CkfwrdRF.js +0 -1
- package/web-ui/build/static/python-repl-C48-EfyF.js +0 -1
- package/web-ui/build/static/q-B2-zP3za.js +0 -1
- package/web-ui/build/static/q-KuKa9s_e.js +0 -1
- package/web-ui/build/static/qml-D8j38-Sx.js +0 -1
- package/web-ui/build/static/qml-DTP6fbZN.js +0 -1
- package/web-ui/build/static/qore-DY-n97IK.js +0 -1
- package/web-ui/build/static/qsharp-Mn8hUKww.js +0 -1
- package/web-ui/build/static/r-BBPYkuMA.js +0 -1
- package/web-ui/build/static/r-CheuVCRq.js +0 -1
- package/web-ui/build/static/racket-2UxWXIqI.js +0 -1
- package/web-ui/build/static/reason-CudKWaht.js +0 -1
- package/web-ui/build/static/reasonml-BDZgwPxq.js +0 -1
- package/web-ui/build/static/regex-DpKrn61Z.js +0 -1
- package/web-ui/build/static/rego-CS2iMzor.js +0 -1
- package/web-ui/build/static/renpy-0CbyBFae.js +0 -1
- package/web-ui/build/static/rest-Ckpz2bGS.js +0 -1
- package/web-ui/build/static/rib-g77eioCq.js +0 -1
- package/web-ui/build/static/rip-L-KlpyJn.js +0 -1
- package/web-ui/build/static/roboconf-BkNeb0Yn.js +0 -1
- package/web-ui/build/static/roboconf-CE-yfGxs.js +0 -1
- package/web-ui/build/static/robotframework-ZhLv32cH.js +0 -1
- package/web-ui/build/static/routeros-C_1I4hFK.js +0 -1
- package/web-ui/build/static/rsl-CxEYmrJa.js +0 -1
- package/web-ui/build/static/ruby-Cgxmv3hM.js +0 -1
- package/web-ui/build/static/ruby-Cs4qnUzE.js +0 -1
- package/web-ui/build/static/ruleslanguage-DPK5B1Dg.js +0 -1
- package/web-ui/build/static/rust-BbVN6hMu.js +0 -1
- package/web-ui/build/static/rust-C6MrX2UK.js +0 -1
- package/web-ui/build/static/sas-CGov9per.js +0 -1
- package/web-ui/build/static/sas-Cp88q4DD.js +0 -1
- package/web-ui/build/static/sass-COOJqQer.js +0 -1
- package/web-ui/build/static/scala-BvOmMtdv.js +0 -1
- package/web-ui/build/static/scala-D5gnz3xs.js +0 -1
- package/web-ui/build/static/scheme-CNBfxsvv.js +0 -1
- package/web-ui/build/static/scheme-DiKuURfA.js +0 -1
- package/web-ui/build/static/scilab-vGKouaTh.js +0 -1
- package/web-ui/build/static/scss-B4PKgroe.js +0 -1
- package/web-ui/build/static/scss-BvRxfJ1U.js +0 -1
- package/web-ui/build/static/shell-B5TooOs0.js +0 -1
- package/web-ui/build/static/shell-session-TNT_ahRW.js +0 -1
- package/web-ui/build/static/smali-CiIXEKzG.js +0 -1
- package/web-ui/build/static/smali-EGdSXgM9.js +0 -1
- package/web-ui/build/static/smalltalk-DVAXFBVS.js +0 -1
- package/web-ui/build/static/smalltalk-Dfy8hlRv.js +0 -1
- package/web-ui/build/static/smarty-Rc2y-rm6.js +0 -1
- package/web-ui/build/static/sml-BoYe_d8x.js +0 -1
- package/web-ui/build/static/sml-CaIv1GsI.js +0 -1
- package/web-ui/build/static/solidity-Dem-6tsD.js +0 -1
- package/web-ui/build/static/solution-file-DfDjJASp.js +0 -1
- package/web-ui/build/static/soy-CkrJH5eW.js +0 -1
- package/web-ui/build/static/sparql-Dvg1P5oN.js +0 -1
- package/web-ui/build/static/splunk-spl-rB2pJQdl.js +0 -1
- package/web-ui/build/static/sqf-Cj_KV-kC.js +0 -1
- package/web-ui/build/static/sqf-DA_tj5Fb.js +0 -1
- package/web-ui/build/static/sql-CYDE0gzH.js +0 -1
- package/web-ui/build/static/sql-D8byAq-B.js +0 -1
- package/web-ui/build/static/sql_more-bMORpicj.js +0 -1
- package/web-ui/build/static/squirrel-rgwbGN0q.js +0 -1
- package/web-ui/build/static/stan-C-OYiHTu.js +0 -1
- package/web-ui/build/static/stan-CT8cMsn7.js +0 -1
- package/web-ui/build/static/stata-BJwZeN-z.js +0 -1
- package/web-ui/build/static/step21-WP26kxkW.js +0 -1
- package/web-ui/build/static/stylus-Cw9up-Iv.js +0 -1
- package/web-ui/build/static/stylus-CyFEQpH2.js +0 -1
- package/web-ui/build/static/subunit-B2XhtaLx.js +0 -1
- package/web-ui/build/static/swift-Bpyyuvtg.js +0 -1
- package/web-ui/build/static/swift-D-jiKNlA.js +0 -1
- package/web-ui/build/static/systemd-DE3AeWrd.js +0 -1
- package/web-ui/build/static/t4-cs-BSG7rkB_.js +0 -1
- package/web-ui/build/static/t4-templating-Cy7LuqAv.js +0 -1
- package/web-ui/build/static/t4-vb-ZLfMjXrh.js +0 -1
- package/web-ui/build/static/taggerscript-q2zFfkel.js +0 -1
- package/web-ui/build/static/tap-CzjhWyhf.js +0 -1
- package/web-ui/build/static/tap-ttXfPums.js +0 -1
- package/web-ui/build/static/tcl-6ta1XDva.js +0 -1
- package/web-ui/build/static/tcl-Cvx4AN_Q.js +0 -1
- package/web-ui/build/static/textile-zWm4gRbJ.js +0 -1
- package/web-ui/build/static/thrift-Crj4hRsm.js +0 -1
- package/web-ui/build/static/toml-hVfLOJr-.js +0 -1
- package/web-ui/build/static/tp-D5aJh4yF.js +0 -1
- package/web-ui/build/static/tremor-B9gWC4v1.js +0 -1
- package/web-ui/build/static/tsx-DtNWBAJO.js +0 -1
- package/web-ui/build/static/tt2-eH1L7Bpm.js +0 -1
- package/web-ui/build/static/turtle-BYCk4r6f.js +0 -1
- package/web-ui/build/static/twig-BQ-dq4no.js +0 -1
- package/web-ui/build/static/twig-n3AiXKyV.js +0 -1
- package/web-ui/build/static/typescript-CPQ0vD90.js +0 -1
- package/web-ui/build/static/typescript-juxiNWRf.js +0 -1
- package/web-ui/build/static/typoscript-C5h9SqFN.js +0 -1
- package/web-ui/build/static/unrealscript-9ht7jiai.js +0 -1
- package/web-ui/build/static/uorazor-36B6okgA.js +0 -1
- package/web-ui/build/static/uri-DEwrtmz_.js +0 -1
- package/web-ui/build/static/v-CvhXAFWo.js +0 -1
- package/web-ui/build/static/vala-CU_jVQ3c.js +0 -1
- package/web-ui/build/static/vala-H_yoFBZf.js +0 -1
- package/web-ui/build/static/vbnet-BNI0Gy5q.js +0 -1
- package/web-ui/build/static/vbnet-D-4O1Hpc.js +0 -1
- package/web-ui/build/static/vbscript-1zyalaSG.js +0 -1
- package/web-ui/build/static/vbscript-html-ea5_TYi7.js +0 -1
- package/web-ui/build/static/velocity-BlEdS1Un.js +0 -1
- package/web-ui/build/static/verilog-BGSIJuDJ.js +0 -1
- package/web-ui/build/static/verilog-C1vff5Z3.js +0 -1
- package/web-ui/build/static/vhdl-5H4C8O-_.js +0 -1
- package/web-ui/build/static/vhdl-DHiBEhsE.js +0 -1
- package/web-ui/build/static/vim-Bd1MNlxj.js +0 -1
- package/web-ui/build/static/vim-DBP2ZsgQ.js +0 -1
- package/web-ui/build/static/visual-basic-DI34-9vJ.js +0 -1
- package/web-ui/build/static/warpscript-DBQ-KbS6.js +0 -1
- package/web-ui/build/static/wasm-CY5W57_Y.js +0 -1
- package/web-ui/build/static/web-idl-CF9xaLpZ.js +0 -1
- package/web-ui/build/static/wiki-xfSWwdeC.js +0 -1
- package/web-ui/build/static/wolfram-DZ6ghwRH.js +0 -1
- package/web-ui/build/static/wren-qULNE4ZV.js +0 -1
- package/web-ui/build/static/x86asm-DD2-d5-3.js +0 -1
- package/web-ui/build/static/xeora-CMja58lL.js +0 -1
- package/web-ui/build/static/xl-DKZpXGv8.js +0 -1
- package/web-ui/build/static/xml-Xf5ErmV_.js +0 -1
- package/web-ui/build/static/xml-doc-Bl_99SZE.js +0 -1
- package/web-ui/build/static/xojo-PwcPgmIF.js +0 -1
- package/web-ui/build/static/xquery-BshbqrZe.js +0 -1
- package/web-ui/build/static/xquery-DY2-GgvB.js +0 -1
- package/web-ui/build/static/yaml-9mp-mYjQ.js +0 -1
- package/web-ui/build/static/yaml-BnH4Y8-L.js +0 -1
- package/web-ui/build/static/yang-CRK7RS7V.js +0 -1
- package/web-ui/build/static/zephir-B560hCdS.js +0 -1
- package/web-ui/build/static/zig-CBG6H3iO.js +0 -1
|
@@ -0,0 +1,777 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* conversationQuery — pure query functions over a conversation archive.
|
|
3
|
+
*
|
|
4
|
+
* This is a STATELESS LENS over `conversations.full.messages[]`. It does not
|
|
5
|
+
* hold a copy of the data, does not persist anything, and does not do any
|
|
6
|
+
* I/O. Every exported function takes a messages array as input and returns
|
|
7
|
+
* a query result. Callers (memoryTool.reminisce) are responsible for
|
|
8
|
+
* fetching the array from wherever it lives (agentPool → in-memory agent
|
|
9
|
+
* object, which itself is sourced from stateManager's on-disk archive).
|
|
10
|
+
*
|
|
11
|
+
* The archive itself is the single source of truth; this module is its
|
|
12
|
+
* query surface.
|
|
13
|
+
*
|
|
14
|
+
* Stable-pointer contract
|
|
15
|
+
* -----------------------
|
|
16
|
+
* Returned entries ALWAYS surface `messageId` as the canonical pointer.
|
|
17
|
+
* `messageId` is immutable (assigned at message creation, never rewritten,
|
|
18
|
+
* never reassigned) and survives compaction because compaction only writes
|
|
19
|
+
* to `conversations[model].messages[]`, never mutates `conversations.full`.
|
|
20
|
+
* The agent is free to bookmark a `messageId` in turn 5 and resolve it in
|
|
21
|
+
* turn 500.
|
|
22
|
+
*
|
|
23
|
+
* Array indices are NOT surfaced to the agent — they're used only for
|
|
24
|
+
* intra-call pagination (offset/limit) and never handed out as long-term
|
|
25
|
+
* bookmarks.
|
|
26
|
+
*
|
|
27
|
+
* Size guardrails
|
|
28
|
+
* ---------------
|
|
29
|
+
* `capEntries(entries, maxBytes)` enforces a byte budget across any list
|
|
30
|
+
* of returned entries. Every mode funnels through it so no single query
|
|
31
|
+
* can blow out the agent's context window.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
// ── Constants ────────────────────────────────────────────────────────────
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Per-call response cap applied AFTER JSON serialization. 32 KB is ~8K
|
|
38
|
+
* tokens — a comfortable upper bound on what a single tool result should
|
|
39
|
+
* inject into the current conversation.
|
|
40
|
+
*/
|
|
41
|
+
export const DEFAULT_MAX_BYTES = 32 * 1024;
|
|
42
|
+
|
|
43
|
+
/** Default messages-per-response for range/byTool. */
|
|
44
|
+
export const DEFAULT_LIMIT = 20;
|
|
45
|
+
|
|
46
|
+
/** Hard maximum to prevent abuse / accidents. */
|
|
47
|
+
export const HARD_MAX_LIMIT = 100;
|
|
48
|
+
|
|
49
|
+
/** Default search results. */
|
|
50
|
+
export const DEFAULT_MAX_RESULTS = 10;
|
|
51
|
+
|
|
52
|
+
/** Hard maximum search results. */
|
|
53
|
+
export const HARD_MAX_RESULTS = 50;
|
|
54
|
+
|
|
55
|
+
/** Around-context: messages before/after the target by default. */
|
|
56
|
+
export const DEFAULT_AROUND_BEFORE = 3;
|
|
57
|
+
export const DEFAULT_AROUND_AFTER = 3;
|
|
58
|
+
|
|
59
|
+
/** Maximum around-context window. */
|
|
60
|
+
export const HARD_MAX_AROUND = 20;
|
|
61
|
+
|
|
62
|
+
/** Overview timeline marker count (sparse checkpoints). */
|
|
63
|
+
export const OVERVIEW_TIMELINE_SIZE = 20;
|
|
64
|
+
|
|
65
|
+
/** Default content-truncation for slim entries. */
|
|
66
|
+
export const DEFAULT_CONTENT_TRUNCATE = 500;
|
|
67
|
+
|
|
68
|
+
/** Snippet length around a search hit. */
|
|
69
|
+
export const SEARCH_SNIPPET_CONTEXT = 60;
|
|
70
|
+
|
|
71
|
+
// ── Helpers (internal) ───────────────────────────────────────────────────
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Extract a message's creation timestamp. Messages in the archive carry
|
|
75
|
+
* `createdAt` (per stateManager schema) but some older/synthetic ones use
|
|
76
|
+
* `timestamp`. Tolerant read, both supported.
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
function _messageAt(m) {
|
|
80
|
+
return m?.createdAt || m?.timestamp || null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Message content as a searchable string. Messages store `content` as
|
|
85
|
+
* string in the normal path, but some older / array-form entries store it
|
|
86
|
+
* as `[{type:'text', text:'…'}]` — both normalized here.
|
|
87
|
+
* @private
|
|
88
|
+
*/
|
|
89
|
+
function _contentString(m) {
|
|
90
|
+
const c = m?.content;
|
|
91
|
+
if (typeof c === 'string') return c;
|
|
92
|
+
if (Array.isArray(c)) {
|
|
93
|
+
return c.map(p => (typeof p === 'string' ? p : p?.text || '')).join('');
|
|
94
|
+
}
|
|
95
|
+
if (c == null) return '';
|
|
96
|
+
return String(c);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Flatten all tool-call inputs on a message into a single searchable
|
|
101
|
+
* string. Tool RESULTS are intentionally excluded — they'd be noisy and
|
|
102
|
+
* the user explicitly opted against including them in search scope.
|
|
103
|
+
* @private
|
|
104
|
+
*/
|
|
105
|
+
function _toolArgsString(m) {
|
|
106
|
+
const execs = Array.isArray(m?.toolExecutions) ? m.toolExecutions : [];
|
|
107
|
+
if (execs.length === 0) return '';
|
|
108
|
+
return execs.map(e => {
|
|
109
|
+
if (!e) return '';
|
|
110
|
+
const parts = [];
|
|
111
|
+
if (e.toolId) parts.push(String(e.toolId));
|
|
112
|
+
if (e.input != null) {
|
|
113
|
+
try { parts.push(typeof e.input === 'string' ? e.input : JSON.stringify(e.input)); }
|
|
114
|
+
catch { parts.push(String(e.input)); }
|
|
115
|
+
}
|
|
116
|
+
return parts.join(' ');
|
|
117
|
+
}).join('\n');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Best-effort token count for a message. Uses stored tokenUsage when
|
|
122
|
+
* available (exact); falls back to a char-based estimate (chars/4) so the
|
|
123
|
+
* overview + slim entries always have a number to show.
|
|
124
|
+
* @private
|
|
125
|
+
*/
|
|
126
|
+
function _tokenCountOf(m) {
|
|
127
|
+
const t = m?.tokenUsage;
|
|
128
|
+
if (t && typeof t.totalTokens === 'number') return t.totalTokens;
|
|
129
|
+
if (t && typeof t.total_tokens === 'number') return t.total_tokens;
|
|
130
|
+
const s = _contentString(m);
|
|
131
|
+
return Math.ceil(s.length / 4);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Check whether a message has at least one tool execution.
|
|
136
|
+
* @private
|
|
137
|
+
*/
|
|
138
|
+
function _hasToolCalls(m) {
|
|
139
|
+
return Array.isArray(m?.toolExecutions) && m.toolExecutions.length > 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Truncate a content string to `max` chars with a trailing "(N more chars)"
|
|
144
|
+
* marker. Never touches messages with shorter content.
|
|
145
|
+
* @private
|
|
146
|
+
*/
|
|
147
|
+
function _truncateContent(s, max = DEFAULT_CONTENT_TRUNCATE) {
|
|
148
|
+
if (typeof s !== 'string') return '';
|
|
149
|
+
if (s.length <= max) return s;
|
|
150
|
+
return s.slice(0, max) + `…(${s.length - max} more chars)`;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Shape a raw message into the slim default response entry. Hides index
|
|
155
|
+
* on purpose — only `messageId` and `at` are stable pointers.
|
|
156
|
+
* @private
|
|
157
|
+
*/
|
|
158
|
+
function _slimMessage(m, detail = 'default') {
|
|
159
|
+
const base = {
|
|
160
|
+
messageId: m?.id || null,
|
|
161
|
+
role: m?.role || 'unknown',
|
|
162
|
+
at: _messageAt(m),
|
|
163
|
+
tokenCount: _tokenCountOf(m),
|
|
164
|
+
hasToolCalls: _hasToolCalls(m),
|
|
165
|
+
};
|
|
166
|
+
const content = _contentString(m);
|
|
167
|
+
|
|
168
|
+
if (detail === 'full') {
|
|
169
|
+
return {
|
|
170
|
+
...base,
|
|
171
|
+
content,
|
|
172
|
+
toolExecutions: Array.isArray(m?.toolExecutions) ? m.toolExecutions : [],
|
|
173
|
+
contextReferences: Array.isArray(m?.contextReferences) ? m.contextReferences : [],
|
|
174
|
+
model: m?.metadata?.model || null,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
return { ...base, content: _truncateContent(content) };
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Clamp a number into [min, max]. Null/undefined/NaN uses `fallback`.
|
|
182
|
+
* @private
|
|
183
|
+
*/
|
|
184
|
+
function _clamp(n, min, max, fallback) {
|
|
185
|
+
const v = Number.isFinite(n) ? n : fallback;
|
|
186
|
+
if (v < min) return min;
|
|
187
|
+
if (v > max) return max;
|
|
188
|
+
return v;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Try to parse an ISO-ish string; returns epoch ms or null.
|
|
193
|
+
* @private
|
|
194
|
+
*/
|
|
195
|
+
function _isoToMs(s) {
|
|
196
|
+
if (typeof s !== 'string') return null;
|
|
197
|
+
const t = Date.parse(s);
|
|
198
|
+
return Number.isNaN(t) ? null : t;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Opaque cursor: base64(JSON). Agent never inspects it; it's passed back
|
|
203
|
+
* verbatim to continue pagination. Encoding is side-effect-free.
|
|
204
|
+
*/
|
|
205
|
+
export function encodeCursor(obj) {
|
|
206
|
+
try {
|
|
207
|
+
const s = JSON.stringify(obj || {});
|
|
208
|
+
return Buffer.from(s, 'utf-8').toString('base64');
|
|
209
|
+
} catch {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export function decodeCursor(cursor) {
|
|
215
|
+
if (typeof cursor !== 'string' || cursor.length === 0) return null;
|
|
216
|
+
try {
|
|
217
|
+
const s = Buffer.from(cursor, 'base64').toString('utf-8');
|
|
218
|
+
const obj = JSON.parse(s);
|
|
219
|
+
return obj && typeof obj === 'object' ? obj : null;
|
|
220
|
+
} catch {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Enforce a byte budget across an array of entries. Serializes the array,
|
|
227
|
+
* and if it exceeds `maxBytes`, drops trailing entries one at a time until
|
|
228
|
+
* it fits. Attaches a `_truncated` marker with the dropped count so
|
|
229
|
+
* callers can surface it. Returns { entries, truncatedCount }.
|
|
230
|
+
*/
|
|
231
|
+
export function capEntries(entries, maxBytes = DEFAULT_MAX_BYTES) {
|
|
232
|
+
if (!Array.isArray(entries)) return { entries: [], truncatedCount: 0 };
|
|
233
|
+
const jsonSize = (arr) => Buffer.byteLength(JSON.stringify(arr), 'utf-8');
|
|
234
|
+
if (jsonSize(entries) <= maxBytes) return { entries, truncatedCount: 0 };
|
|
235
|
+
const trimmed = entries.slice();
|
|
236
|
+
let dropped = 0;
|
|
237
|
+
while (trimmed.length > 0 && jsonSize(trimmed) > maxBytes) {
|
|
238
|
+
trimmed.pop();
|
|
239
|
+
dropped++;
|
|
240
|
+
}
|
|
241
|
+
return { entries: trimmed, truncatedCount: dropped };
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// ── Public: overview ─────────────────────────────────────────────────────
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* One-shot "where have I been." Returns archive-wide stats + a sparse
|
|
248
|
+
* timeline of ~20 markers evenly distributed across the archive so the
|
|
249
|
+
* agent can see the shape of its own history at a glance.
|
|
250
|
+
*
|
|
251
|
+
* Each timeline entry carries a `messageId` — those are the stable
|
|
252
|
+
* pointers the agent can use to dive in with `around` / `range`.
|
|
253
|
+
*
|
|
254
|
+
* @param {Array<Object>} messages
|
|
255
|
+
* @returns {{
|
|
256
|
+
* totalMessages: number,
|
|
257
|
+
* firstAt: string|null,
|
|
258
|
+
* lastAt: string|null,
|
|
259
|
+
* totalApproxTokens: number,
|
|
260
|
+
* timeline: Array<{ at: string|null, role: string, messageId: string|null, snippet: string }>
|
|
261
|
+
* }}
|
|
262
|
+
*/
|
|
263
|
+
export function overview(messages) {
|
|
264
|
+
const list = Array.isArray(messages) ? messages : [];
|
|
265
|
+
const total = list.length;
|
|
266
|
+
if (total === 0) {
|
|
267
|
+
return {
|
|
268
|
+
totalMessages: 0,
|
|
269
|
+
firstAt: null,
|
|
270
|
+
lastAt: null,
|
|
271
|
+
totalApproxTokens: 0,
|
|
272
|
+
timeline: [],
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const firstAt = _messageAt(list[0]);
|
|
277
|
+
const lastAt = _messageAt(list[total - 1]);
|
|
278
|
+
const totalApproxTokens = list.reduce((n, m) => n + _tokenCountOf(m), 0);
|
|
279
|
+
|
|
280
|
+
// Sparse timeline: pick up to OVERVIEW_TIMELINE_SIZE evenly-spaced markers.
|
|
281
|
+
const markers = [];
|
|
282
|
+
const size = Math.min(OVERVIEW_TIMELINE_SIZE, total);
|
|
283
|
+
for (let i = 0; i < size; i++) {
|
|
284
|
+
// Spread indices across [0, total-1] so first + last are always included.
|
|
285
|
+
const idx = size === 1 ? 0 : Math.round((i * (total - 1)) / (size - 1));
|
|
286
|
+
const m = list[idx];
|
|
287
|
+
markers.push({
|
|
288
|
+
at: _messageAt(m),
|
|
289
|
+
role: m?.role || 'unknown',
|
|
290
|
+
messageId: m?.id || null,
|
|
291
|
+
snippet: _truncateContent(_contentString(m), 80),
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return {
|
|
296
|
+
totalMessages: total,
|
|
297
|
+
firstAt,
|
|
298
|
+
lastAt,
|
|
299
|
+
totalApproxTokens,
|
|
300
|
+
timeline: markers,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// ── Public: range ────────────────────────────────────────────────────────
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Slice the archive by index (offset+limit) and/or timestamp (from/to).
|
|
308
|
+
* Both filters compose — a timestamp window is applied first, then
|
|
309
|
+
* offset/limit paginates within that window.
|
|
310
|
+
*
|
|
311
|
+
* @param {Array<Object>} messages
|
|
312
|
+
* @param {Object} params
|
|
313
|
+
* @param {string} [params.from] ISO timestamp lower bound (inclusive)
|
|
314
|
+
* @param {string} [params.to] ISO timestamp upper bound (inclusive)
|
|
315
|
+
* @param {number} [params.offset] 0-based offset within filtered window
|
|
316
|
+
* @param {number} [params.limit] Max entries returned (clamped to HARD_MAX_LIMIT)
|
|
317
|
+
* @param {'default'|'full'} [params.detail]
|
|
318
|
+
* @param {number} [params.maxBytes]
|
|
319
|
+
*/
|
|
320
|
+
export function range(messages, params = {}) {
|
|
321
|
+
const list = Array.isArray(messages) ? messages : [];
|
|
322
|
+
const fromMs = _isoToMs(params.from);
|
|
323
|
+
const toMs = _isoToMs(params.to);
|
|
324
|
+
const offset = _clamp(params.offset, 0, Number.MAX_SAFE_INTEGER, 0);
|
|
325
|
+
const limit = _clamp(params.limit, 1, HARD_MAX_LIMIT, DEFAULT_LIMIT);
|
|
326
|
+
const detail = params.detail === 'full' ? 'full' : 'default';
|
|
327
|
+
const maxBytes = _clamp(params.maxBytes, 1024, 1024 * 1024, DEFAULT_MAX_BYTES);
|
|
328
|
+
|
|
329
|
+
// Apply timestamp filter first.
|
|
330
|
+
const windowed = list.filter(m => {
|
|
331
|
+
const t = _isoToMs(_messageAt(m));
|
|
332
|
+
if (t == null) return fromMs == null && toMs == null; // untimestamped: keep only with no filter
|
|
333
|
+
if (fromMs != null && t < fromMs) return false;
|
|
334
|
+
if (toMs != null && t > toMs) return false;
|
|
335
|
+
return true;
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
const total = windowed.length;
|
|
339
|
+
const sliced = windowed.slice(offset, offset + limit);
|
|
340
|
+
const shaped = sliced.map(m => _slimMessage(m, detail));
|
|
341
|
+
const { entries, truncatedCount } = capEntries(shaped, maxBytes);
|
|
342
|
+
|
|
343
|
+
return {
|
|
344
|
+
messages: entries,
|
|
345
|
+
total,
|
|
346
|
+
offset,
|
|
347
|
+
limit,
|
|
348
|
+
hasMore: offset + entries.length < total,
|
|
349
|
+
truncatedByBytes: truncatedCount,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// ── Public: search ───────────────────────────────────────────────────────
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Substring search across message content + tool-call arguments. Case-
|
|
357
|
+
* insensitive. Returns slim match entries with `snippet` (a window around
|
|
358
|
+
* the first hit) and `highlightRanges` (offsets WITHIN the snippet).
|
|
359
|
+
*
|
|
360
|
+
* Scope: `content` + `toolExecutions[*].toolId + input`.
|
|
361
|
+
* Explicitly NOT searched: tool outputs/results, reasoning fields,
|
|
362
|
+
* metadata, context references.
|
|
363
|
+
*/
|
|
364
|
+
export function search(messages, params = {}) {
|
|
365
|
+
const list = Array.isArray(messages) ? messages : [];
|
|
366
|
+
const raw = typeof params.query === 'string' ? params.query : '';
|
|
367
|
+
const q = raw.toLowerCase().trim();
|
|
368
|
+
if (q.length === 0) {
|
|
369
|
+
return { matches: [], total: 0, hasMore: false, cursor: null, truncatedByBytes: 0 };
|
|
370
|
+
}
|
|
371
|
+
const role = typeof params.role === 'string' ? params.role : null;
|
|
372
|
+
const maxResults = _clamp(params.maxResults, 1, HARD_MAX_RESULTS, DEFAULT_MAX_RESULTS);
|
|
373
|
+
const maxBytes = _clamp(params.maxBytes, 1024, 1024 * 1024, DEFAULT_MAX_BYTES);
|
|
374
|
+
|
|
375
|
+
// Cursor: `{ lastMessageId }` — skip forward past messages up to and
|
|
376
|
+
// including the one with that id. Agent opaquely passes it back.
|
|
377
|
+
const cursorObj = decodeCursor(params.cursor);
|
|
378
|
+
const lastMessageId = cursorObj?.lastMessageId || null;
|
|
379
|
+
|
|
380
|
+
// Locate cursor position (first index AFTER the cursor's lastMessageId).
|
|
381
|
+
let startIdx = 0;
|
|
382
|
+
if (lastMessageId) {
|
|
383
|
+
const i = list.findIndex(m => m?.id === lastMessageId);
|
|
384
|
+
startIdx = i >= 0 ? i + 1 : 0;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
const matches = [];
|
|
388
|
+
let total = 0;
|
|
389
|
+
// ID of the LAST RETURNED match — cursor points at this so resumption
|
|
390
|
+
// picks up exactly where the previous page ended. NOT the "last match
|
|
391
|
+
// seen during counting"; that would cause resumption to skip results.
|
|
392
|
+
let lastReturnedHitId = null;
|
|
393
|
+
|
|
394
|
+
for (let i = startIdx; i < list.length; i++) {
|
|
395
|
+
const m = list[i];
|
|
396
|
+
if (role && m?.role !== role) continue;
|
|
397
|
+
|
|
398
|
+
const content = _contentString(m);
|
|
399
|
+
const toolArgs = _toolArgsString(m);
|
|
400
|
+
|
|
401
|
+
// Find first hit in either scope. We return the content snippet if the
|
|
402
|
+
// hit is in content; otherwise a tool-args snippet. This keeps the
|
|
403
|
+
// matched text proximate to what the agent searched for.
|
|
404
|
+
const contentIdx = content.toLowerCase().indexOf(q);
|
|
405
|
+
const toolIdx = contentIdx >= 0 ? -1 : toolArgs.toLowerCase().indexOf(q);
|
|
406
|
+
if (contentIdx < 0 && toolIdx < 0) continue;
|
|
407
|
+
|
|
408
|
+
total++;
|
|
409
|
+
if (matches.length >= maxResults) continue; // keep counting total but stop accumulating
|
|
410
|
+
// Only update cursor anchor for RETURNED matches.
|
|
411
|
+
lastReturnedHitId = m?.id || lastReturnedHitId;
|
|
412
|
+
|
|
413
|
+
const source = contentIdx >= 0 ? 'content' : 'tool_args';
|
|
414
|
+
const baseText = contentIdx >= 0 ? content : toolArgs;
|
|
415
|
+
const hitAt = contentIdx >= 0 ? contentIdx : toolIdx;
|
|
416
|
+
|
|
417
|
+
// Build snippet: SEARCH_SNIPPET_CONTEXT chars on each side of the hit.
|
|
418
|
+
const start = Math.max(0, hitAt - SEARCH_SNIPPET_CONTEXT);
|
|
419
|
+
const end = Math.min(baseText.length, hitAt + q.length + SEARCH_SNIPPET_CONTEXT);
|
|
420
|
+
let snippet = baseText.slice(start, end);
|
|
421
|
+
const relStart = hitAt - start;
|
|
422
|
+
// Mark truncation with ellipses so the agent knows the snippet is a window.
|
|
423
|
+
if (start > 0) snippet = '…' + snippet;
|
|
424
|
+
if (end < baseText.length) snippet = snippet + '…';
|
|
425
|
+
const highlightOffset = relStart + (start > 0 ? 1 : 0); // account for prepended ellipsis
|
|
426
|
+
|
|
427
|
+
matches.push({
|
|
428
|
+
messageId: m?.id || null,
|
|
429
|
+
role: m?.role || 'unknown',
|
|
430
|
+
at: _messageAt(m),
|
|
431
|
+
source, // where the hit landed: 'content' | 'tool_args'
|
|
432
|
+
snippet,
|
|
433
|
+
highlightRanges: [[highlightOffset, highlightOffset + q.length]],
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
const { entries, truncatedCount } = capEntries(matches, maxBytes);
|
|
438
|
+
const hasMore = matches.length < total; // more results exist beyond maxResults
|
|
439
|
+
const cursor = hasMore
|
|
440
|
+
? encodeCursor({ lastMessageId: lastReturnedHitId, query: raw, role })
|
|
441
|
+
: null;
|
|
442
|
+
|
|
443
|
+
return {
|
|
444
|
+
matches: entries,
|
|
445
|
+
total,
|
|
446
|
+
hasMore,
|
|
447
|
+
cursor,
|
|
448
|
+
truncatedByBytes: truncatedCount,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// ── Public: around ───────────────────────────────────────────────────────
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Fetch N messages before + N after a given `messageId`. Clamps against
|
|
456
|
+
* archive start / end. Returns `targetFound: false` when the id doesn't
|
|
457
|
+
* resolve (archive was pruned, or id was hallucinated by the agent).
|
|
458
|
+
*/
|
|
459
|
+
export function around(messages, params = {}) {
|
|
460
|
+
const list = Array.isArray(messages) ? messages : [];
|
|
461
|
+
const messageId = typeof params.messageId === 'string' ? params.messageId : '';
|
|
462
|
+
const before = _clamp(params.before, 0, HARD_MAX_AROUND, DEFAULT_AROUND_BEFORE);
|
|
463
|
+
const after = _clamp(params.after, 0, HARD_MAX_AROUND, DEFAULT_AROUND_AFTER);
|
|
464
|
+
const detail = params.detail === 'full' ? 'full' : 'default';
|
|
465
|
+
const maxBytes = _clamp(params.maxBytes, 1024, 1024 * 1024, DEFAULT_MAX_BYTES);
|
|
466
|
+
|
|
467
|
+
const idx = messageId ? list.findIndex(m => m?.id === messageId) : -1;
|
|
468
|
+
if (idx < 0) {
|
|
469
|
+
return { messages: [], center: messageId || null, targetFound: false, truncatedByBytes: 0 };
|
|
470
|
+
}
|
|
471
|
+
const start = Math.max(0, idx - before);
|
|
472
|
+
const end = Math.min(list.length, idx + after + 1);
|
|
473
|
+
const shaped = list.slice(start, end).map(m => _slimMessage(m, detail));
|
|
474
|
+
const { entries, truncatedCount } = capEntries(shaped, maxBytes);
|
|
475
|
+
|
|
476
|
+
return {
|
|
477
|
+
messages: entries,
|
|
478
|
+
center: messageId,
|
|
479
|
+
targetFound: true,
|
|
480
|
+
truncatedByBytes: truncatedCount,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// ── Public: byTool ───────────────────────────────────────────────────────
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Flatten every tool execution across the archive, optionally filtered by
|
|
488
|
+
* toolId. Each returned entry is ONE tool call — so a single message with
|
|
489
|
+
* three tool_calls yields three entries, each pointing back at the same
|
|
490
|
+
* `messageId` so the agent can `around` into the surrounding context.
|
|
491
|
+
*/
|
|
492
|
+
export function byTool(messages, params = {}) {
|
|
493
|
+
const list = Array.isArray(messages) ? messages : [];
|
|
494
|
+
const toolId = typeof params.toolId === 'string' ? params.toolId : null;
|
|
495
|
+
const limit = _clamp(params.limit, 1, HARD_MAX_LIMIT, DEFAULT_LIMIT);
|
|
496
|
+
const maxBytes = _clamp(params.maxBytes, 1024, 1024 * 1024, DEFAULT_MAX_BYTES);
|
|
497
|
+
|
|
498
|
+
const cursorObj = decodeCursor(params.cursor);
|
|
499
|
+
const lastMessageId = cursorObj?.lastMessageId || null;
|
|
500
|
+
|
|
501
|
+
let startIdx = 0;
|
|
502
|
+
if (lastMessageId) {
|
|
503
|
+
const i = list.findIndex(m => m?.id === lastMessageId);
|
|
504
|
+
startIdx = i >= 0 ? i + 1 : 0;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
const out = [];
|
|
508
|
+
let total = 0;
|
|
509
|
+
// ID of the message whose tool call was the LAST RETURNED entry. Cursor
|
|
510
|
+
// anchors here so resumption is gap-free. Same pattern as search().
|
|
511
|
+
let lastReturnedAnchor = null;
|
|
512
|
+
|
|
513
|
+
for (let i = startIdx; i < list.length; i++) {
|
|
514
|
+
const m = list[i];
|
|
515
|
+
const execs = Array.isArray(m?.toolExecutions) ? m.toolExecutions : [];
|
|
516
|
+
for (const e of execs) {
|
|
517
|
+
if (toolId && e?.toolId !== toolId) continue;
|
|
518
|
+
total++;
|
|
519
|
+
if (out.length >= limit) continue;
|
|
520
|
+
lastReturnedAnchor = m?.id || lastReturnedAnchor;
|
|
521
|
+
|
|
522
|
+
out.push({
|
|
523
|
+
messageId: m?.id || null,
|
|
524
|
+
at: _messageAt(m),
|
|
525
|
+
toolId: e?.toolId || null,
|
|
526
|
+
status: e?.status || null,
|
|
527
|
+
executionTime: typeof e?.executionTime === 'number' ? e.executionTime : null,
|
|
528
|
+
inputSnippet: _truncateContent(
|
|
529
|
+
typeof e?.input === 'string' ? e.input : _safeJsonStringify(e?.input),
|
|
530
|
+
200
|
|
531
|
+
),
|
|
532
|
+
// Outputs are explicitly NOT included (user decision — tool RESULTS
|
|
533
|
+
// excluded from reminisce to keep payloads clean).
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
const { entries, truncatedCount } = capEntries(out, maxBytes);
|
|
539
|
+
const hasMore = out.length < total;
|
|
540
|
+
const cursor = hasMore ? encodeCursor({ lastMessageId: lastReturnedAnchor, toolId }) : null;
|
|
541
|
+
|
|
542
|
+
return {
|
|
543
|
+
toolCalls: entries,
|
|
544
|
+
total,
|
|
545
|
+
hasMore,
|
|
546
|
+
cursor,
|
|
547
|
+
truncatedByBytes: truncatedCount,
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
function _safeJsonStringify(v) {
|
|
552
|
+
if (v == null) return '';
|
|
553
|
+
try { return JSON.stringify(v); }
|
|
554
|
+
catch { return String(v); }
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
// ── Public: read ─────────────────────────────────────────────────────────
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* Default char-window when the agent asks for a char range but leaves the
|
|
561
|
+
* upper bound open. Keeps the response bounded without forcing the agent
|
|
562
|
+
* to compute content length.
|
|
563
|
+
*/
|
|
564
|
+
export const DEFAULT_READ_CHAR_WINDOW = 4000;
|
|
565
|
+
|
|
566
|
+
/** Max chars a single `read` call will return regardless of what the agent asks. */
|
|
567
|
+
export const HARD_MAX_READ_CHARS = 16000;
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Default line-window when `lineFrom` is set without `lineTo`.
|
|
571
|
+
*/
|
|
572
|
+
export const DEFAULT_READ_LINE_WINDOW = 80;
|
|
573
|
+
|
|
574
|
+
/** Max lines a single `read` call will return. */
|
|
575
|
+
export const HARD_MAX_READ_LINES = 500;
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Read a single message, optionally windowed by LINES or CHARS.
|
|
579
|
+
*
|
|
580
|
+
* This is the sub-message granularity surface the other modes don't cover:
|
|
581
|
+
* - `around` moves at message granularity (N messages before/after).
|
|
582
|
+
* - `range` slices at message granularity (offset/limit).
|
|
583
|
+
* - `search` returns a fixed 120-char snippet around a hit.
|
|
584
|
+
* - `read` lets the agent pull a specific window INSIDE a single long
|
|
585
|
+
* message — lines 100–150 of a stack trace, chars 5000–7000 of a
|
|
586
|
+
* large paste, etc. — without yanking the whole thing into context.
|
|
587
|
+
*
|
|
588
|
+
* Window selectors are mutually exclusive:
|
|
589
|
+
* - `lineFrom` / `lineTo` : 1-indexed inclusive line range
|
|
590
|
+
* - `contentFrom` / `contentTo` : 0-indexed half-open char offsets
|
|
591
|
+
* - neither : return the whole content (still byte-capped)
|
|
592
|
+
*
|
|
593
|
+
* If both kinds are provided, `lineFrom`/`lineTo` win and the char fields
|
|
594
|
+
* are silently ignored (picking one prevents the agent from accidentally
|
|
595
|
+
* getting a wrong window when it passes both).
|
|
596
|
+
*
|
|
597
|
+
* Out-of-bounds selectors are clamped (never throw). The returned
|
|
598
|
+
* `contentWindow` descriptor tells the agent exactly what slice it got:
|
|
599
|
+
*
|
|
600
|
+
* contentWindow = {
|
|
601
|
+
* kind: 'full' | 'lines' | 'chars',
|
|
602
|
+
* lineFrom?, lineTo?, totalLines?, // when kind='lines'
|
|
603
|
+
* contentFrom?, contentTo?, // when kind='chars'
|
|
604
|
+
* totalContentLength, // always
|
|
605
|
+
* hasMoreBefore, hasMoreAfter, // did we omit content on either side?
|
|
606
|
+
* truncatedAtBytes: number|null, // if byte cap kicked in mid-window
|
|
607
|
+
* }
|
|
608
|
+
*
|
|
609
|
+
* @param {Array<Object>} messages
|
|
610
|
+
* @param {Object} params
|
|
611
|
+
* @param {string} params.messageId
|
|
612
|
+
* @param {number} [params.lineFrom] 1-indexed inclusive
|
|
613
|
+
* @param {number} [params.lineTo] 1-indexed inclusive
|
|
614
|
+
* @param {number} [params.contentFrom] 0-indexed char offset (inclusive)
|
|
615
|
+
* @param {number} [params.contentTo] 0-indexed char offset (exclusive)
|
|
616
|
+
* @param {'default'|'full'} [params.detail]
|
|
617
|
+
* @param {number} [params.maxBytes]
|
|
618
|
+
*/
|
|
619
|
+
export function read(messages, params = {}) {
|
|
620
|
+
const list = Array.isArray(messages) ? messages : [];
|
|
621
|
+
const messageId = typeof params.messageId === 'string' ? params.messageId : '';
|
|
622
|
+
const detail = params.detail === 'full' ? 'full' : 'default';
|
|
623
|
+
const maxBytes = _clamp(params.maxBytes, 1024, 1024 * 1024, DEFAULT_MAX_BYTES);
|
|
624
|
+
|
|
625
|
+
const idx = messageId ? list.findIndex(m => m?.id === messageId) : -1;
|
|
626
|
+
if (idx < 0) {
|
|
627
|
+
return {
|
|
628
|
+
message: null,
|
|
629
|
+
targetFound: false,
|
|
630
|
+
center: messageId || null,
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
const m = list[idx];
|
|
634
|
+
const full = _contentString(m);
|
|
635
|
+
const totalContentLength = full.length;
|
|
636
|
+
|
|
637
|
+
// Resolve window kind. Lines take precedence over chars when both are
|
|
638
|
+
// provided (see doc above — prevents ambiguous requests).
|
|
639
|
+
const hasLineSelector = params.lineFrom != null || params.lineTo != null;
|
|
640
|
+
const hasCharSelector = !hasLineSelector && (params.contentFrom != null || params.contentTo != null);
|
|
641
|
+
|
|
642
|
+
let windowText, windowDescriptor;
|
|
643
|
+
|
|
644
|
+
if (hasLineSelector) {
|
|
645
|
+
// Line-based window. Split once, slice, rejoin.
|
|
646
|
+
const lines = full.split('\n');
|
|
647
|
+
const totalLines = lines.length;
|
|
648
|
+
|
|
649
|
+
const rawFrom = Number.isFinite(params.lineFrom) ? params.lineFrom : 1;
|
|
650
|
+
// `lineTo` defaults to from + DEFAULT_READ_LINE_WINDOW - 1 so a bare
|
|
651
|
+
// `lineFrom` request gets a sane window, not the rest of the message.
|
|
652
|
+
const rawTo = Number.isFinite(params.lineTo)
|
|
653
|
+
? params.lineTo
|
|
654
|
+
: rawFrom + DEFAULT_READ_LINE_WINDOW - 1;
|
|
655
|
+
|
|
656
|
+
// Clamp to [1, totalLines]; guarantee from <= to.
|
|
657
|
+
let lineFrom = _clamp(rawFrom, 1, Math.max(1, totalLines), 1);
|
|
658
|
+
let lineTo = _clamp(rawTo, 1, Math.max(1, totalLines), totalLines);
|
|
659
|
+
if (lineFrom > lineTo) [lineFrom, lineTo] = [lineTo, lineFrom];
|
|
660
|
+
|
|
661
|
+
// Hard cap on window size.
|
|
662
|
+
if (lineTo - lineFrom + 1 > HARD_MAX_READ_LINES) {
|
|
663
|
+
lineTo = lineFrom + HARD_MAX_READ_LINES - 1;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
windowText = lines.slice(lineFrom - 1, lineTo).join('\n');
|
|
667
|
+
windowDescriptor = {
|
|
668
|
+
kind: 'lines',
|
|
669
|
+
lineFrom, lineTo, totalLines,
|
|
670
|
+
totalContentLength,
|
|
671
|
+
hasMoreBefore: lineFrom > 1,
|
|
672
|
+
hasMoreAfter: lineTo < totalLines,
|
|
673
|
+
truncatedAtBytes: null,
|
|
674
|
+
};
|
|
675
|
+
} else if (hasCharSelector) {
|
|
676
|
+
const rawFrom = Number.isFinite(params.contentFrom) ? params.contentFrom : 0;
|
|
677
|
+
const rawTo = Number.isFinite(params.contentTo)
|
|
678
|
+
? params.contentTo
|
|
679
|
+
: rawFrom + DEFAULT_READ_CHAR_WINDOW;
|
|
680
|
+
|
|
681
|
+
let contentFrom = _clamp(rawFrom, 0, Math.max(0, totalContentLength), 0);
|
|
682
|
+
let contentTo = _clamp(rawTo, 0, totalContentLength, totalContentLength);
|
|
683
|
+
if (contentFrom > contentTo) [contentFrom, contentTo] = [contentTo, contentFrom];
|
|
684
|
+
|
|
685
|
+
if (contentTo - contentFrom > HARD_MAX_READ_CHARS) {
|
|
686
|
+
contentTo = contentFrom + HARD_MAX_READ_CHARS;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
windowText = full.slice(contentFrom, contentTo);
|
|
690
|
+
windowDescriptor = {
|
|
691
|
+
kind: 'chars',
|
|
692
|
+
contentFrom, contentTo, totalContentLength,
|
|
693
|
+
hasMoreBefore: contentFrom > 0,
|
|
694
|
+
hasMoreAfter: contentTo < totalContentLength,
|
|
695
|
+
truncatedAtBytes: null,
|
|
696
|
+
};
|
|
697
|
+
} else {
|
|
698
|
+
// No selector — whole content (byte cap below may still trim).
|
|
699
|
+
windowText = full;
|
|
700
|
+
windowDescriptor = {
|
|
701
|
+
kind: 'full', totalContentLength,
|
|
702
|
+
hasMoreBefore: false, hasMoreAfter: false,
|
|
703
|
+
truncatedAtBytes: null,
|
|
704
|
+
};
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
// Byte-cap enforcement: if the window's serialized size exceeds maxBytes,
|
|
708
|
+
// trim the content tail and record where we cut so the agent can
|
|
709
|
+
// continue with a follow-up read starting at truncatedAtBytes.
|
|
710
|
+
const shapedBase = {
|
|
711
|
+
messageId: m?.id || null,
|
|
712
|
+
role: m?.role || 'unknown',
|
|
713
|
+
at: _messageAt(m),
|
|
714
|
+
tokenCount: _tokenCountOf(m),
|
|
715
|
+
hasToolCalls: _hasToolCalls(m),
|
|
716
|
+
model: m?.metadata?.model || null,
|
|
717
|
+
};
|
|
718
|
+
const extras = detail === 'full' ? {
|
|
719
|
+
toolExecutions: Array.isArray(m?.toolExecutions) ? m.toolExecutions : [],
|
|
720
|
+
contextReferences: Array.isArray(m?.contextReferences) ? m.contextReferences : [],
|
|
721
|
+
} : {};
|
|
722
|
+
|
|
723
|
+
// Serialize incrementally: shell of the response minus content is a
|
|
724
|
+
// cheap lower bound on overhead; we give content the remaining budget.
|
|
725
|
+
const shell = { ...shapedBase, ...extras, contentWindow: windowDescriptor, content: '' };
|
|
726
|
+
const overhead = Buffer.byteLength(JSON.stringify(shell), 'utf-8');
|
|
727
|
+
const contentBudget = Math.max(0, maxBytes - overhead - 64 /* JSON punctuation slack */);
|
|
728
|
+
|
|
729
|
+
if (Buffer.byteLength(windowText, 'utf-8') > contentBudget) {
|
|
730
|
+
// Back off one character at a time (rare; tiny cost) until it fits.
|
|
731
|
+
// A binary trim is faster, but correctness first — this path runs at
|
|
732
|
+
// most once per read call.
|
|
733
|
+
let lo = 0, hi = windowText.length;
|
|
734
|
+
while (lo < hi) {
|
|
735
|
+
const mid = (lo + hi + 1) >>> 1;
|
|
736
|
+
if (Buffer.byteLength(windowText.slice(0, mid), 'utf-8') <= contentBudget) lo = mid;
|
|
737
|
+
else hi = mid - 1;
|
|
738
|
+
}
|
|
739
|
+
const truncated = lo;
|
|
740
|
+
windowText = windowText.slice(0, truncated);
|
|
741
|
+
windowDescriptor.truncatedAtBytes = Buffer.byteLength(windowText, 'utf-8');
|
|
742
|
+
windowDescriptor.hasMoreAfter = true; // more content exists past the cut
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
return {
|
|
746
|
+
message: {
|
|
747
|
+
...shapedBase,
|
|
748
|
+
...extras,
|
|
749
|
+
contentWindow: windowDescriptor,
|
|
750
|
+
content: windowText,
|
|
751
|
+
},
|
|
752
|
+
targetFound: true,
|
|
753
|
+
center: messageId,
|
|
754
|
+
};
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
export default {
|
|
758
|
+
overview,
|
|
759
|
+
range,
|
|
760
|
+
search,
|
|
761
|
+
around,
|
|
762
|
+
byTool,
|
|
763
|
+
read,
|
|
764
|
+
encodeCursor,
|
|
765
|
+
decodeCursor,
|
|
766
|
+
capEntries,
|
|
767
|
+
// Constants (for tests + tool description)
|
|
768
|
+
DEFAULT_MAX_BYTES,
|
|
769
|
+
DEFAULT_LIMIT,
|
|
770
|
+
HARD_MAX_LIMIT,
|
|
771
|
+
DEFAULT_MAX_RESULTS,
|
|
772
|
+
HARD_MAX_RESULTS,
|
|
773
|
+
DEFAULT_AROUND_BEFORE,
|
|
774
|
+
DEFAULT_AROUND_AFTER,
|
|
775
|
+
HARD_MAX_AROUND,
|
|
776
|
+
OVERVIEW_TIMELINE_SIZE,
|
|
777
|
+
};
|