A running sub-agent shows a clock and nothing else: tool calls are stored but never streamed
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, python, typescript
- Ambito
- ai, backend-api-design, frontend
Direzione di ricerca
Start with the AcpTurn update dispatch in raven/acp_client/acp_agent.py and trace how on_delta is implemented across the named backends. Then inspect the instance refresh interval in ui-web/src/live/230-tabs.js and the TurnClock surface. Reproduce with an ACP sub-agent using streams = True; done means tool calls and thoughts appear live rather than only after the turn completes.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
While a sub-agent answers, the page can show only two things: how long the turn has been running, and whatever the agent says in prose. Every tool call it makes is collected and stored, and reaches the page only after the fact. For an agent whose work is mostly tool calls -- a deck build, a research sweep -- the live view is a clock and nothing else for minutes at a time.
Steps to reproduce
- Send a substantial task to a sub-agent instance (a deck rebuild will do).
- Watch the instance surface while it works.
Expected behavior
Some sign of what it is doing. The data exists: subagents.instance.history returns the tool rows afterwards, and the ACP protocol reports each tool call as it happens.
Actual behavior
The turn clock counts (ui-web/src/features/subagents/TurnClock.tsx, new in #405) and prose appears when the agent speaks. Nothing else. Reading the history over /rpc during a run shows the work that was invisible on screen at the time -- "13 pages of structure settled", "wrote 4606 bytes to build/build.py" -- while the page showed a clock.
Where it is decided
AcpTurn's update dispatch splits three kinds of update three ways (raven/acp_client/acp_agent.py):
| update | appended to self.events (stored) |
forwarded to on_delta (live) |
|---|---|---|
| answer text | yes | yes |
tool call / tool result (_BREAKING_UPDATES) |
yes | no |
thought (_THOUGHT_UPDATES) |
yes | no |
Only the text branch calls await self._on_delta(text). The other two branches build the record and return.
There is a second, smaller effect on top: the instance surface refreshes on a 2s setInterval (ui-web/src/live/230-tabs.js:229) rather than on an event, so even stored rows arrive on the next tick rather than as they land.
Why this is a seam and not an oversight
on_delta is typed Callable[[str], Awaitable[None]]: a string, nothing else. A tool call cannot travel through it without widening the signature, and that signature is shared by every backend implementation (acp_agent, openai_api, raven_loop, cli_agent, routing, plus anything third-party). So this is a protocol-level change, not a UI one, which is presumably why it landed where it did.
The codebase has already named the same gap once, from the storage side -- raven/agent/subagent/activity.py:
"A backend already knows far more than the string it hands back: which tools the sub-agent called, how many tokens it spent, how long it spent thinking. All of it went to a tracing span and nowhere else ... For an ACP agent that is doubly odd: the protocol reports every tool call as it happens, and the answer arrived with all of that already collected and then thrown away."
That module fixed the record. The live path still has the older shape.
Environment
macOS, raven from the repo working tree, web UI at current main, sub-agent on the ACP backend (streams = True).
- Lingua principale
- Python
- Stelle
- 4.1k
- Fork
- 94
- Merge medio
- 1g 18h
- PR unite (30g)
- 208
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di EverMind-AI/Raven
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
EverMind-AI/Raven#998 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
EverMind-AI/Raven#997 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
EverMind-AI/Raven#121 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
EverMind-AI/Raven#1116 ·
I maintainer di solito rispondono entro 1 giorno
-
evolver: add trial-identity (runmark) markersForse già presa @adeerkhan l’ha presa 1 giorno fa. Aperta
Difficoltà 4/5 1-2 giorni Idoneità per principianti 35/100
EverMind-AI/Raven#1111 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di EverMind-AI/Raven
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
-
query rewriting: prompt says "Language for `query` field: None" when language detection failsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
ocr_data_to_elements() raises AttributeError when a layout element is a ListForse già presa @Eapp1e l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
Unstructured-IO/unstructured#4616 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
area:codegen backend:metal bug direction:output
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
I maintainer di solito rispondono entro 1 giorno