[Bug]: Assistant message hover timestamp missing while a command is still running
Los mantenedores suelen responder en 1 día
@BilalIrfanContact ya está trabajando en esto.
Desde el 26/10/2026.
- #25685 de @BilalIrfanContact — abierto
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 87/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- react, typescript
- Área
- frontend
Línea de trabajo
Empieza con showAssistantMeta y attachTrailingToolGroupsToAssistant en apps/web/src/components/chat/MessagesTimeline.logic.ts y luego comprueba cómo AssistantMessageMeta muestra las marcas de tiempo en apps/web/src/components/chat/TimelineAssistantRows.tsx. Reproduce el problema con un comando en curso y compáralo con un grupo de herramientas completado. El trabajo está terminado cuando el mensaje final del assistant muestra su marca de tiempo al pasar el cursor mientras se ejecuta el comando, sin mostrarla durante el streaming.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/web
Summary
In the chat transcript, assistant text messages show a timestamp on hover. That hover timestamp is missing for the last assistant message in a turn while a command is still running (the Running command / in-progress tool state). The same message gains its hover timestamp only once the run settles.
By contrast, an assistant message that is immediately followed by a completed tool group (Ran N commands) does show its timestamp on hover, because the meta row gets relocated below the group.
Steps to reproduce
- Open any thread in
apps/weband send a prompt that makes the agent produce a text message and then run a command. - While the command is still executing (the row reads
Running command), hover over the assistant text message directly above it (e.g. "Training finished. The overall memory peak is still 14.2 GB…"). - Observe that no timestamp appears on hover.
- For contrast, hover over an earlier assistant message that is followed by a settled
Ran 2 commandsgroup — the timestamp appears on hover there.
Expected behavior
Every terminal assistant text message exposes its timestamp on hover, including the last one in a turn while a command is still running.
Actual behavior
The last assistant message before an in-progress command has no hover timestamp. It only appears after the run settles.
Impact
Cosmetic issue
Root cause (investigated)
The hover timestamp is carried by the AssistantMessageMeta row, which is gated by showAssistantMeta. That flag is forced to false while the message's run is still active, and the relocation pass that normally moves the meta below a trailing tool group is skipped for exactly those messages — so there is nothing to reveal on hover.
1. showAssistantMeta is suppressed while the run is active — apps/web/src/components/chat/MessagesTimeline.logic.ts:1986-1996
const assistantResponseStillInProgress =
timelineEntry.message.role === "assistant" &&
runIdIsActiveResponse(timelineEntry.message.runId);
const showAssistantMeta =
timelineEntry.message.role === "assistant" &&
terminalAssistantMessageIds.has(timelineEntry.message.id) &&
!assistantResponseStillInProgress; // <-- false while a command runs
When a command is running, runIdIsActiveResponse (MessagesTimeline.logic.ts:1466-1467) returns true for the message's run, so showAssistantMeta is false. The inline meta is therefore not rendered (apps/web/src/components/chat/TimelineAssistantRows.tsx:64), so there is no hover target.
2. The trailing-tool-group relocation skips in-progress messages — MessagesTimeline.logic.ts:1209-1300 (attachTrailingToolGroupsToAssistant)
This is what makes the Ran 2 commands (completed) case work: for each assistant message with showAssistantMeta === true, it finds the trailing completed tool group and re-emits the meta as a standalone assistant-meta row positioned below the group. But its gate excludes any message whose meta was already suppressed:
if (
row.kind !== "message" ||
row.message.role !== "assistant" ||
!row.showAssistantMeta || // <-- running-command message already excluded here
runId === null
) {
continue;
}
So for the in-progress case there is neither an inline meta nor a relocated assistant-meta row → no hover timestamp anywhere.
Why the two cases diverge
| Case | Run state | showAssistantMeta |
Meta row rendered? | Hover timestamp |
|---|---|---|---|---|
msg → Ran 2 commands |
settled | true |
relocated assistant-meta below group |
✅ shows |
msg → Running command |
active | false |
none (inline suppressed, relocation skipped) | ❌ missing |
Suggested fix direction
Allow the terminal assistant message to own a hover timestamp while its run is still active — e.g. relax the !assistantResponseStillInProgress suppression at MessagesTimeline.logic.ts:1993-1996 (the streaming guard in TimelineAssistantRows.tsx:184 already hides the timestamp during streaming), and/or extend attachTrailingToolGroupsToAssistant so an in-progress trailing command also produces an assistant-meta row.
Relevant files
apps/web/src/components/chat/MessagesTimeline.logic.ts—showAssistantMeta(1993-1996),attachTrailingToolGroupsToAssistant(1209-1300),runIdIsActiveResponse(1466-1467)apps/web/src/components/chat/TimelineAssistantRows.tsx—AssistantMessageMeta(144-196), timestamp render gated on!message.streaming(184-193)apps/web/src/components/chat/MessagesTimeline.tsx—group/assistanthover scope (1314-1317)
Version or commit
main @ 0712398
Environment
apps/web (web app). Observed on macOS. Provider/model: Claude (SFT training thread in screenshot).
Screenshots
Contributions welcome
This is open for anyone who wants to pick it up — the root cause and a suggested fix direction are laid out above. If you'd like to take it, leave a comment so we don't double up, and feel free to ask questions on the issue.
- Lenguaje dominante
- TypeScript
- Estrellas
- 24.8k
- Forks
- 6.4k
- Merge medio
- 2 h 48 min
- PR fusionados (30 d)
- 353
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
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 pingdotgg/t3code
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
Diff line counts use Indian numeral grouping on en_IN locale (inconsistent toLocaleString calls)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
[Bug]: Private GitHub images in chat messages show "Image unavailable" (PR panel loads them)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
Todos los issues de pingdotgg/t3code
Issues similares
-
Plugin: sheet music can't be scrolled by hand before playbackPosiblemente ocupada @snakajima la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
receptron/jinglescript#51 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 9 días
-
clawsweeper:needs-maintainer-review clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster P3
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
openclaw/openclaw#186424 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
chore(worker): five module header comments describe the code from before later issues changed itAbiertoarea:dev U2-later
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
bentleypark/aiwatch#1824 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Pal-AI-Lab/Coopanion#469 ·
Los mantenedores suelen responder en 1 día