* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
32 KiB
Compression Engines (Português (Brasil))
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
A compactação do OmniRoute é estruturada em torno de contratos de mecanismos. Um modo pode executar um mecanismo diretamente
(caveman ou rtk) ou um pipeline empilhado determinístico que executa vários mecanismos em ordem.
Modos
| Modo | Caminho do mecanismo | Entrada pretendida |
|---|---|---|
off |
nenhum | Preservação exata do prompt |
lite |
Auxiliares lite do Caveman | Limpeza contínua de baixo risco |
standard |
Caveman | Condensação de prompts em linguagem natural |
aggressive |
Caveman + sumarizadores de histórico/ferramentas | Sessões de chat longas |
ultra |
Caveman + auxiliares de poda | Recuperação do limite de contexto |
rtk |
RTK | Saída de terminal, shell, compilação, testes e git |
omniglyph |
OmniGlyph | Contexto como imagem no canal nativo do provedor |
stacked |
Pipeline, padrão rtk -> caveman |
Logs de ferramentas e texto mistos, economia máxima |
Perfis de compactação do OmniGlyph
O mecanismo omniglyph (pacote omniglyph, 1.4.0+) aceita um perfil semântico nomeado, definido
globalmente por meio de omniglyph.profile nas configurações de compactação ou por etapa por meio da
configuração de etapa do pipeline empilhado:
| Perfil | Limite |
|---|---|
aggressive |
Padrão. A política avaliada pelos resultados publicados — transforma em imagens o sistema, a documentação de ferramentas e o histórico denso |
balanced |
Mantém o estado ativo no formato nativo, protege os últimos 8 turnos e compacta o histórico encerrado mais antigo |
coding-safe |
Mantém instruções de autoridade, esquemas de ferramentas e a saída ativa de ferramentas no formato nativo, protegendo os últimos 12 turnos |
passthrough |
Encaminha sem transformar; o mecanismo é ignorado |
O perfil é um limite máximo, não mínimo: mergeCompressionProfileOptions no pacote
impede que uma substituição feita pelo chamador reabra uma via com perdas que o perfil fechou; portanto, uma configuração por etapa
preserveSystemPrompt: false não pode reativar a compactação do sistema em coding-safe.
Conforme medido nesta base de código: coding-safe e balanced elevam minCompressChars ao seu
valor máximo e mantêm o sistema, os esquemas de ferramentas e os resultados de ferramentas no formato nativo; portanto, uma sessão que ainda não
acumulou histórico é interrompida em below_min_chars, e o mecanismo não transforma nada. É
por isso que o padrão é aggressive, em vez do perfil mais seguro.
O pacote resolve seu próprio escopo de modelos e perfil com base em sua configuração de ambiente. O OmniRoute nunca delega essa decisão: o adaptador fixa o controle de modelos no escopo mais restritivo do pacote, de modo que as configurações de ambiente do host só possam restringir a lista de permissões, nunca ampliá-la para além dos resultados medidos pelo OmniRoute.
Registro de engines
O registro está localizado em open-sse/services/compression/engines/registry.ts. Os engines expõem um
contrato compartilhado:
id: ID estável do engine, comocavemanourtkapply(text, config): caminho de execução legado usado por pipelines empilhadoscompress(input, config): caminho de execução principal que retorna texto + estatísticasgetConfigSchema(): retorna a estrutura semelhante a JSON Schema da configuração válidavalidateConfig(config): retorna{ valid, errors[] }
O registro usa registerCompressionEngine(engine) (ou registerEngine para casos avançados),
que chama assertValidEngine() e validateConfig(defaultConfig) antes de aceitar.
Use unregisterCompressionEngine(id) para remover um engine em tempo de execução.
strategySelector.ts registra os engines integrados antes da execução da compactação. Isso permite que a pré-visualização,
a compactação em tempo de execução, o modo empilhado, os testes e futuros engines usem o mesmo caminho de execução.
Compactação de descrições MCP (relacionado)
Um registro separado compacta os metadados de descrição das ferramentas MCP no nível do registro — consulte
open-sse/mcp-server/descriptionCompressor.ts e MCP-SERVER.md. Ele reutiliza
as regras do Caveman, mas opera nos metadados das ferramentas, não nos payloads das requisições.
Engines integrados adicionais
Além de Caveman, RTK e LLMLingua-2, o registro inclui vários engines especializados sem perdas / estruturais (usados por pipelines empilhados, pelo playground e por testes):
| Engine | Id | O que faz |
|---|---|---|
| CCR | ccr |
Content-Compress-Retrieve (H4): substitui grandes blocos contíguos de texto por referências endereçadas por conteúdo, de modo que blocos repetidos/grandes sejam enviados uma vez e referenciados posteriormente. |
| headroom | headroom |
SmartCrusher (H3 + N5): compactação tabular sem perdas de payloads de arrays JSON homogêneos em um formato colunar [N rows]. |
| ionizer | ionizer |
Amostragem de linhas do início/meio/fim para blocos homogêneos muito grandes, armazenando o meio omitido como uma referência CCR endereçada por conteúdo. |
| session-dedup | session-dedup |
Desduplicação entre turnos endereçada por conteúdo (inspirada no TokenMizer): omite texto já visto em turnos anteriores da mesma sessão. |
Instrução do protocolo de recuperação do CCR (#8033): na primeira vez em que o CCR substitui ≥1 bloco em uma
requisição, o engine adiciona no início uma única mensagem system idempotente (começando com a sentinela
[CCR protocol]) que ensina ao chamador o contrato entre marcador e ferramenta: o que significa um marcador
[CCR retrieve hash=<24hex> chars=N], que o hash deve ser copiado literalmente
(todos os 24 caracteres hexadecimais — hashes copiados incorretamente são a causa provável de erros
"block not found") e que um marcador [dedup:ref sha=...] significa "consultar o histórico", não "chamar a
ferramenta". A observação é injetada somente quando o tools[] anunciado pelo chamador comprova que ele consegue
realmente acessar omniroute_ccr_retrieve (callerSupportsCcrRetrieve() em
open-sse/services/compression/engines/ccr/protocolInstruction.ts) — um chamador comum
compatível com OpenAI sem essa ferramenta nunca recebe uma instrução para chamar algo que
não consegue acessar. A idempotência é garantida pela verificação do histórico de mensagens em busca da sentinela
antes da injeção, de modo que requisições com vários turnos (que reproduzem mensagens anteriores) não acumulem a
observação uma vez por turno.
Caveman
O modo Caveman concentra-se na condensação semântica de prosa comum:
- preserva blocos de código, URLs, JSON, caminhos e dados estruturados
- remove conteúdo supérfluo, ressalvas, contexto repetido e frases de ligação verbosas
- oferece suporte a conjuntos de regras de arquivo específicos por idioma em
open-sse/services/compression/rules/ - continua disponível por meio dos modos legados
standard,aggressiveeultra
A interface no painel é Dashboard -> Context & Cache -> Caveman.
O projeto upstream do Caveman relata ~75% menos tokens de saída, uma economia média de 65% na saída em benchmarks,
com uma faixa de 22-87%, e uma ferramenta de compressão de entrada de ~46%. O OmniRoute usa o valor de entrada
do Caveman ao documentar economias combinadas de prompt/contexto; o modo de saída do Caveman continua sendo um recurso
separado de comportamento da resposta.
RTK
O modo RTK concentra-se na saída de comandos e ferramentas:
- detecta classes de saída como
git status,git branch,git diff, Vitest/Jest/Pytest, testes do Cargo/Go, builds do TypeScript/Vite/Webpack, ESLint, auditorias/instalações do npm, logs do Docker,find/grepdo shell, rastreamentos de pilha e logs genéricos - aplica 49 filtros JSON de
open-sse/services/compression/engines/rtk/filters/ - oferece suporte ao pipeline declarativo no estilo do RTK: remoção de ANSI, substituição, interrupção antecipada por correspondência da saída, remoção/manutenção de linhas, truncamento por linha, truncamento de início/fim/máximo de linhas e fallback quando vazio
- oferece suporte a filtros de projeto condicionados à confiança em
.rtk/filters.jsone filtros globais emDATA_DIR/rtk/filters.json - remove sequências ANSI, ruído de progresso, linhas repetidas e texto padronizado sem utilidade
- preserva falhas acionáveis, avisos, resumos, arquivos alterados e contexto final
- pode, opcionalmente, reter a saída bruta com dados sensíveis removidos para recuperação/depuração por meio de rotas autenticadas de gerenciamento
A interface no painel é Dashboard -> Context & Cache -> RTK.
Os detalhes operacionais sobre filtros personalizados, confiança, verificação e recuperação da saída bruta estão em
RTK_COMPRESSION.md.
O projeto upstream do RTK relata uma economia de 60-90% na compressão de saídas de comandos. O exemplo no README mostra uma
sessão de 30 minutos do Claude Code passando de ~118,000 tokens para ~23,900, ou uma economia de 79.7%.
LLMLingua-2 (Poda Semântica)
O modo LLMLingua-2 realiza poda semântica de tokens em prosa usando um pequeno classificador de tokens ONNX, complementando os mecanismos Caveman e RTK baseados em regras:
- comprime a prosa apenas em mensagens que não sejam do sistema; blocos de código delimitados e outras estruturas preservadas nunca são alterados
- executa o backend
@atjsh/llmlingua-2(ONNX por meio de@huggingface/transformers) em uma thread de trabalho, para que a inferência do modelo nunca bloqueie o loop de eventos da solicitação - é combinável (
stackPriority35): em um pipeline combinado, é executado depois dos mecanismos estruturais (CCR, session-dedup, headroom, Caveman), mas antes deultra, pois a poda semântica é mais eficaz em texto que já passou por compressão estrutural — por exemplo,rtk -> caveman -> llmlingua - prossegue sem falhar em qualquer erro (dependências opcionais ausentes, criação do worker, carregamento do modelo, inferência ou tempo limite) → o texto original é retornado sem alterações, nunca um erro
Localização do mecanismo: open-sse/services/compression/engines/llmlingua/. A interface no painel
é Dashboard -> Context & Cache -> LLMLingua.
Modelos
O modelo padrão é o TinyBERT (atjsh/llmlingua-2-js-tinybert-meetingbank, ~57 MB,
rápido). Um modelo BERT-base de maior precisão (Arcoldd/llmlingua4j-bert-base-onnx,
~710 MB) está disponível por meio do campo model da configuração do mecanismo. @huggingface/transformers
baixa o modelo selecionado sob demanda do HuggingFace Hub para
${DATA_DIR}/models/llmlingua na primeira chamada (modelStore.ts); uma substituição pela configuração
modelPath aponta para uma cópia local (instalações offline / isoladas da rede).
Dependências opcionais e instalação sob demanda
A pilha de peers do runtime removível do LLMLingua é opcional. Dois pacotes são declarados como
optionalDependencies em package.json e mantidos como externos pelo build de produção
(scripts/build/prepublish.ts não os inclui no bundle):
| Pacote | Versão (fixada) | Observações |
|---|---|---|
@atjsh/llmlingua-2 |
2.0.5 |
Pacote de entrada; declara os demais como peers |
js-tiktoken |
^1.0.20 |
Tokenizador |
@huggingface/transformers está fixado em ^4.2.0 (compartilhado com o caminho de embeddings locais e
também rastreado no bundle independente); @atjsh/llmlingua-2@2.0.5 o declara como peer com
"^3.5.2 || ^4.0.0", portanto há suporte tanto para Transformers.js v3 quanto para v4. Desde a versão 2.0.4,
@atjsh/llmlingua-2 não exige mais @tensorflow/tfjs, o que removeu da pilha SLM seu maior
componente individual (TensorFlow.js). Apenas os dois pacotes acima são peers SLM removíveis.
Um npm install padrão (desenvolvimento) instala a pilha opcional automaticamente, a menos que as dependências
opcionais sejam omitidas.
Por que sob demanda: o pacote publicado no npm, o bundle independente e a imagem Docker
são distribuídos sem essas dependências para permanecerem enxutos. Quando elas estão ausentes, a verificação
de dependências do worker (uma sondagem de resolução de @atjsh/llmlingua-2 em worker.ts) falha, e o mecanismo
prossegue silenciosamente sem falhar — selecionar o LLMLingua não produz efeito (o texto é retornado sem alterações e nenhum
erro é registrado). Para ativá-lo em um ambiente reduzido, instale a pilha opcional:
# fixe nas versões declaradas em optionalDependencies de package.json
npm install @atjsh/llmlingua-2@2.0.5 js-tiktoken
A remoção de @tensorflow/tfjs (2.0.4+) elimina o componente anteriormente dominante de ~800 MB
— o espaço restante é ocupado pelos runtimes do transformers.js + onnxruntime-node,
além do modelo TinyBERT (~57 MB), baixado no primeiro uso (não por meio do npm).
Por ambiente:
- Desenvolvimento /
npm install— instalado automaticamente, a menos que você tenha usado--omit=optional(ou--no-optional). Nenhuma ação necessária. - npm global (
npm i -g omniroute) / autônomo — execute o comando de instalação acima dentro do diretório do pacote instalado ou reinstale sem omitir as dependências opcionais. - Docker — adicione o comando de instalação em uma camada de imagem derivada; a imagem publicada é distribuída de forma enxuta por design.
- VPS (PM2) — instale no
node_modulesdo aplicativo e reinicie o processo para que o worker verifique novamente o gate. - Next autônomo bruto (
npm run build→.build/next/standalone/server.js) — o rastreamento autônomo não inclui NEM o worker NEM as dependências opcionais, portanto o mecanismo silenciosamente permite a execução em caso de falha.scripts/build/colocate-standalone.mjsreaplica ambos (esbuild do worker + fechamento das dependências opcionais na árvore autônoma); ele é executado automaticamente por meio do hookpostbuilddo npm após cada build. Idempotente e tolerante a falhas quando as dependências estão ausentes.
Verifique se está ativo: com o LLMLingua selecionado, textos reais de fato são reduzidos (o mecanismo
deixa de permitir a execução em caso de falha), e a primeira solicitação aciona o download do modelo para
${DATA_DIR}/models/llmlingua. O gate verifica intencionalmente apenas @atjsh/llmlingua-2 —
os outros peers são exclusivos de ESM, e require.resolve gera um erro para eles mesmo quando estão presentes — portanto,
o worker ainda permite a execução em caso de falha se algum peer estiver realmente ausente no momento do import().
Pipelines empilhados
O modo empilhado executa as etapas do pipeline em ordem. O padrão é:
rtk -> caveman
Use isso em sessões de agentes de programação nas quais um prompt combina a saída de comandos com texto em linguagem natural produzido por uma pessoa ou pelo assistente. O RTK reduz primeiro os logs ruidosos das ferramentas; depois, o Caveman comprime a linguagem natural restante.
As etapas do pipeline são configuradas com stackedPipeline nas configurações de compactação ou por meio de combinações de compactação.
Quando ambos os mecanismos reduzem a mesma carga qualificada, a economia é composta:
combinada = 1 - (1 - economia do RTK) * (1 - economia de entrada do Caveman)
média = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%
intervalo = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%
Filtro da árvore de acessibilidade do MCP
O filtro inteligente da árvore de acessibilidade do MCP é uma camada de compactação pós-execução que atua nos resultados de ferramentas do MCP, não nos prompts nem no contexto. Ele processa as cargas extensas de árvores de acessibilidade e snapshots do navegador retornadas por ferramentas como Playwright, computer-use e servidores MCP de automação de navegador.
O que ele faz
- Remoção de ruído — remove entradas genéricas/de texto vazias (
- generic:,- text: "") - Agrupamento de elementos irmãos — quando ≥
collapseThreshold(padrão: 30) linhas consecutivas são repetições estruturais, agrupa-as nas primeirascollapseKeepHead(padrão: 10) linhas + um resumo da contagem + as últimascollapseKeepTail(padrão: 5) linhas - Preservação de referências — as âncoras
[ref=eXX]exigidas pelo Playwright/computer-use nunca são alteradas - Truncamento rígido — se o texto após o agrupamento ainda exceder
maxTextChars(padrão: 50.000), ele será truncado com uma dica de navegação para que o agente possa continuar trabalhando
Localização do mecanismo
open-sse/services/compression/engines/mcpAccessibility/
index.ts ← ponto de entrada smartFilterText()
collapseRepeated.ts ← algoritmo de agrupamento de elementos irmãos
constants.ts ← DEFAULT_MCP_ACCESSIBILITY_CONFIG
Configuração
Controlado por compression.mcpAccessibility nas configurações globais (migração 056). Configuração padrão:
{
"enabled": true,
"maxTextChars": 50000,
"collapseThreshold": 30,
"collapseKeepHead": 10,
"collapseKeepTail": 5,
"minLengthToProcess": 2000
}
O filtro é aplicado somente às cargas de resultados de ferramentas cujo type seja "text" e cujo comprimento exceda minLengthToProcess. Ele não afeta a compactação de prompts nem as cargas das solicitações.
Economia esperada
De 60% a 80% nos resultados de ferramentas de snapshot do navegador, dependendo da complexidade da página. O algoritmo de agrupamento tem complexidade O(n) em relação ao número de linhas e acrescenta latência insignificante.
Este filtro em comparação com os mecanismos de compactação acima
| Aspecto | Caveman / RTK / Empilhado | Filtro de acessibilidade do MCP |
|---|---|---|
| Alvo | Prompts/contexto da solicitação | Resultados de ferramentas do MCP |
| Acionamento | Configuração do modo de compactação | compression.mcpAccessibility.enabled |
| Escopo | Todas as mensagens SSE | Somente resultados de ferramentas |
| Âncoras de referência | N/A | Preservadas incondicionalmente |
Combos de compressão
Combos de compressão são perfis de compressão nomeados que podem ser atribuídos a combos de roteamento:
compression_combos: armazena modo, pipeline, configuração do RTK, configuração de idioma e marcador padrãocompression_combo_assignments: mapeia um combo de compressão para um combo de roteamento- a integração em tempo de execução resolve um combo de compressão atribuído antes das substituições genéricas de combo
- as análises incluem
compression_combo_ideengine
Área no dashboard: Dashboard -> Context & Cache -> Compression Combos.
Superfície da API
| Rota | Finalidade |
|---|---|
/api/settings/compression |
Configurações globais de compressão (inclui a configuração mcpAccessibility) |
/api/compression/preview |
Visualizar qualquer modo de compressão |
/api/compression/language-packs |
Listar os pacotes de idioma Caveman disponíveis |
/api/context/caveman/config |
Alias das configurações do Caveman |
/api/context/rtk/config |
Padrões e configurações do RTK |
/api/context/rtk/filters |
Catálogo de filtros do RTK |
/api/context/rtk/test |
Endpoint de visualização/teste do RTK |
/api/context/rtk/raw-output/[id] |
Recuperação autenticada da saída bruta com dados sensíveis ocultados |
/api/context/combos |
CRUD de combos de compressão |
/api/context/combos/[id]/assignments |
CRUD de atribuições de combos de roteamento |
/api/context/analytics |
Alias das análises de compressão |
As rotas de gerenciamento exigem autenticação de gerenciamento ou verificações de política de chave de API.
Ferramentas MCP
A compressão disponibiliza cinco ferramentas MCP:
| Ferramenta | Escopo | Finalidade |
|---|---|---|
omniroute_compression_status |
read:compression |
Configurações, análises e estatísticas de cache |
omniroute_compression_configure |
write:compression |
Atualizar configurações globais |
omniroute_set_compression_engine |
write:compression |
Definir modo e pipeline opcional |
omniroute_list_compression_combos |
read:compression |
Listar combos de compressão |
omniroute_compression_combo_stats |
read:compression |
Consultar análises de combos/engines |
Escopo e exclusões
Embeddings nunca são comprimidos. open-sse/handlers/embeddings.ts nunca chama nenhum
engine de compressão — os corpos da solicitação/resposta são encaminhados diretamente ao executor sem alterações.
Atualmente, isso é estrutural (embeddings e conclusões de chat têm handlers separados), não uma
verificação em tempo de execução, mas significa que a preocupação com distorção de vetores em #8034 não tem superfície de exposição
no caminho de embeddings.
Filtro de exclusão por modelo/endpoint (#8034). Para conclusões de chat, um operador pode especificar
ids de modelo/alvos provider/model que nunca devem ser comprimidos — uma proteção útil caso
a compressão seja futuramente conectada mais perto de um caminho adjacente a embeddings e, em geral, útil
para qualquer modelo em que o prompt exato, byte por byte, seja importante (avaliações determinísticas, prefixos
sensíveis ao cache etc.).
- Campo de configuração:
exclusions?: string[]na configuração global de compressão (GET/PUT /api/settings/compression), persistido por meio do namespace de compressãokey_valueexistente (src/lib/db/compression.ts) — nenhuma tabela nova. - Aba do dashboard: Dashboard → Compression → Exclusions
(
/dashboard/compression/exclusions). - Sintaxe dos padrões:
*é o único curinga. Todos os demais metacaracteres de regex em um padrão são escapados antes da correspondência, de modo quegpt-5.6corresponde apenas à string literal, nunca agpt-5x6(seguro contra ReDoS, limitado, sem quantificadores aninhados). Os padrões são comparados sem distinção entre maiúsculas e minúsculas tanto com o id simples do modelo quanto com o compostoprovider/model—gpt-5-6,openai/gpt-5-6eopenai/*funcionam, e*sozinho exclui todos os modelos. - Correspondência:
isCompressionExcluded()/normalizeCompressionExclusions()emopen-sse/services/compression/exclusions.ts.chatCore.tsverifica o alvo excluído logo após resolver as configurações de compressão, antes da execução de qualquer engine, e trata uma correspondência exatamente como se a compressão estivesse globalmente desabilitada — o corpo da solicitação é comprovadamente idêntico byte por byte. A omissão é registrada por meio dewriteCompressionSkip(..., "excluded")para visibilidade nas análises. - Padrão (lista vazia/ausente): idêntico ao comportamento anterior ao #8034 — nada é excluído.
Limitações conhecidas
- O LLMLingua-2 (SLM) exige dependências opcionais colocalizadas. O worker só é executado em uma
compilação de produção quando
@atjsh/llmlingua-2+ pares são colocalizados emdist/node_modules(consultescripts/build/colocateOptionals.mjs, #4286). Sem eles, o mecanismo falha de forma aberta (retorna o texto original). A resolução do worker não depende mais deimport.meta.url(isso falha no bundle independente) — ela se ancora no cwd /argv[1]do runtime. - Os pacotes de idiomas
de/fr/jado Caveman são parciais. Eles incluem regras decontext+filler+structural, mas não incluem pacotesdedup/ultra; portanto, a intensidadeultranão é mais forte quefullpara esses idiomas (eles usam apenas suas próprias regras — não há fallback silencioso para as regrasdedup/ultraem inglês, que corromperiam textos em outros idiomas).en/es/id/pt-BRestão completos. Contribuições dededup.json+ultra.jsonpara os pacotes parciais são bem-vindas. - A telemetria empilhada lista apenas os mecanismos que realizaram compressão. Uma etapa do pipeline empilhado cujo
mecanismo foi executado, mas produziu 0 % de economia, retorna
stats:nulle, portanto, não aparece emengineBreakdown— não sendo possível distingui-la de uma etapa que foi ignorada. Distinguir "executada, 0 %" de "ignorada" exigiria uma alteração no modelo de detalhamento e foi adiado.
Validação
As verificações específicas desta área são:
node --import tsx/esm --test tests/unit/compression/rtk-*.test.ts tests/unit/compression/pipeline-integration.test.ts tests/unit/compression/context-compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/*.test.ts tests/golden-set/*.test.ts tests/integration/compression-pipeline.test.ts tests/unit/api/compression/compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/mcpAccessibility*.test.ts
npm run typecheck:core