ECA becomes unresponsive when tool output causes LLM context overflow
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Start by reproducing the freeze with a large tool output, then read eca-process.el for synchronous JSON parsing and eca-chat.el for content insertion and buffer-wide fontification and table alignment. The issue identifies server-side context overflow recovery and client-side rendering as contributing areas, but does not specify a single fix. Done means large tool output and context overflow no longer leave ECA or Emacs unresponsive.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
When a tool (especially shell commands) produces very large output, ECA hits the LLM provider's token limit with:
LLM response status: 400 body: {"error":{"message":"prompt token count of 174837 exceeds the limit of 168000","code":"model_max_prompt_tokens_exceeded"}}
After this error, the ECA server and Emacs become unresponsive/frozen, requiring a restart.
Root Cause Analysis
The issue involves multiple contributing factors on both server and client side.
Server-side
-
No proactive token budget check before API call: The server sends the full message history to the LLM provider without estimating token usage. Context overflow is only detected reactively (HTTP 400 response) and recovered via prune + auto-compact. While the recovery logic works, it doesn't prevent the initial expensive roundtrip and the cascade of effects on the client.
-
Tool output truncation exists but may be insufficient:
outputTruncationdefaults to 2000 lines / 50 KB, but a single tool result at the maximum (50 KB ≈ 12,500 tokens) combined with a long conversation history can still exceed the context limit. The truncation also doesn't account for the cumulative token budget across all messages. -
Potential infinite recovery loop: If auto-compact succeeds but the subsequent resume prompt still triggers context overflow,
auto-compacting?has already been reset tofalse, allowing another compact cycle. There is no counter orrecovery-attempted?guard to preventCompact → Resume → Overflow → Compact → …loops (analogous to the existingauto-continued?guard for truncated responses).
Client-side (Emacs)
-
Synchronous JSON parsing of large messages: The process filter in
eca-process.elparses incoming JSON messages synchronously with no size limit. Before the overflow error, the server sendstoolCallednotifications containing the full tool output. Parsing a multi-MB JSON message blocks the Emacs main thread. -
font-lock-ensurerefontifies entire buffer: After each text content insertion (eca-chat.el),font-lock-ensureruns over the entire chat buffer. Ingfm-modewithmarkdown-fontify-code-blocks-natively, this becomes very expensive for large buffers. -
align-tables/beautify-tablesscan entire buffer: On"finished"status, both functions are called with(point-min), scanning the entire chat buffer for markdown tables — expensive for long conversations. -
Expandable content has no size limit: Tool call outputs are stored and rendered in expandable overlays without any truncation. Large outputs bloat the buffer.
These client-side issues compound: large tool output → expensive JSON parse → expensive rendering → expensive fontification → expensive table alignment, all running synchronously on the Emacs main thread.
Steps to Reproduce
- Start an ECA chat session with a model that has a moderate context window (e.g., 128K-168K tokens)
- Have a conversation long enough to consume a significant portion of the context
- Execute a tool/shell command that produces very large output (e.g.,
find / -name "*.log"or similar) - The LLM provider returns HTTP 400 (token limit exceeded)
- Emacs becomes unresponsive
- Lenguaje dominante
- Clojure
- Estrellas
- 1k
- Forks
- 82
- Merge medio
- 3 d 39 min
- PR fusionados (30 d)
- 15
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de editor-code-assistant/eca
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
editor-code-assistant/eca#655 ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
editor-code-assistant/eca#652 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 12/100
editor-code-assistant/eca#648 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
editor-code-assistant/eca#644 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Add the ability to see what changed in the system promptPosiblemente ocupada @zikajk la tomó hace 9 días. Abiertoenhancement
editor-code-assistant/eca#642 · 1 asignado ·
Los mantenedores suelen responder en 2 días
Todos los issues de editor-code-assistant/eca
Issues similares
-
Usage analytics `v_tables` ignores table metadata set by users (`metabase_table_user_settings`)Abierto.Needs Triage .Team/Graphy Priority:P3 Type:Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
metabase/metabase#84762 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
NoahTheDuke/splint#57 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
IOP MCP
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
calcit-lang/calcit#2133 ·
Los mantenedores suelen responder en 1 día