feat(web-react): live reasoning timer + humanized tool-call titles#149
Conversation
🤖 AI Code Review (ensemble)SummaryPR adds a live reasoning timer and humanizes unmapped tool-call names. All reviewers agree on one P2 issue: the new useThinkingSeconds hook never resets its counter when active transitions back to true, so reused message components would display stale elapsed time. Reviewer C also flags the timer behavior as having no test coverage. Issues Found3 total — 0 P1 (blocking) · 2 P2 (should fix) · 1 P3 (nice to have)
|
🤖 AI Code Review (ensemble)SummaryThe PR introduces a live reasoning timer and humanized fallback titles for unmapped tool calls. Both additions are functionally sound, well-tested, and correctly handle cleanup and edge cases. Reviewer A's flagged issues are not supported by the diff: No Issues Found✅ APPROVEThe code is clean, interval lifecycles are correctly managed, and new behaviors are covered by focused tests. The humanization logic provides a sensible fallback without altering existing specific tool titles. The Synthesized by Sokuza AI from multiple independent reviewers |
tangletools
left a comment
There was a problem hiding this comment.
✅ Auto-approved PR — e9239484
Blanket team auto-approval is enabled for this reviewer service.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.
tangletools · auto-approval · reason: blanket_auto_approve · 2026-06-26T19:39:05Z
Problem
Two gaps in
ChatMessages: the reasoning panel showed a static "Thinking…" while the model reasoned (the duration was measured but only revealed afterward as "Thought for Ns"), and any tool the host doesn't explicitly map rendered with its rawsnake_casename (get_credit_balance,invoke_integration, …) as the chip title.Changes
useThinkingSeconds(active)hook drives a ticking "Thinking · Ns" counter in the reasoning panel while the model reasons before its answer, matching the existing pre-first-tokenThinkingRow(which now uses the same hook). The post-answer "Thought for Ns" summary is unchanged.friendlyToolTitle's fallback now sentence-cases unmapped tool names (get_credit_balance→ "Get credit balance"). The transformation is domain-agnostic — it splits on separators and camelCase only — so it improves every host's tool chips without this shared renderer knowing any host's tool taxonomy. Explicitly mapped tools (proposals, sandbox actions) are unchanged.Validation
tsc --noEmitclean. 18 web-react tests pass, including a new test asserting the humanized title renders and the raw slug never leaks; existing segment tests updated to locate chips by their rendered titles.