fix(code): hide timestamp footers with the rows they belong to - #5167
Merged
Mason Daugherty (mdrxy) merged 3 commits intoJul 30, 2026
Conversation
Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Mason Daugherty (mdrxy)
marked this pull request as ready for review
July 30, 2026 18:06
Timestamp footers are sibling widgets trailing each message, so collapsing a tool run hid the tool rows but left their footers behind. Footers are now tracked as accessories of the collapsible they trail and hidden via a marker class rather than `display`, which keeps the user's independent `/timestamps` preference intact so it reasserts itself on expand. Route the constructor, `add_member`, and `add_collapsible` through a single `_attach_accessories` registration point so a group's accessory map and a tool's own approval linkage cannot drift apart depending on which path folded it. Release every remaining collapsible before a summary removes itself, so a folded diff and its footer are never stranded hidden with no summary left to expand them, and complete the mount-failure rollback so a partially-mounted summary cannot leave a second stand-in behind. Attribute footers by their derived id rather than position alone, so an unanticipated transcript shape degrades to leaving the footer alone instead of folding it into a neighbouring group. Both hide reasons keep separate marker classes on purpose: a footer can be hidden by group collapse and by an approval prompt at once, and releasing one must not reveal it while the other still applies.
Mason Daugherty (mdrxy)
deleted the
aolsenjazz/code/fix-nested-timestamps
branch
July 30, 2026 19:33
Mason Daugherty (mdrxy)
pushed a commit
that referenced
this pull request
Jul 31, 2026
> [!CAUTION] > Merging this PR will automatically publish to **PyPI** and create a **GitHub release**. For the full release process, see [`.github/RELEASING.md`](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md). --- _Release notes preview: keep this section in sync with the package `CHANGELOG.md`. Publish reads the merged CHANGELOG via `release.yml`, not this PR description — keep them aligned anyway so the PR stays an accurate historical record for reviewers and anyone returning later._ --- ## [0.1.51](deepagents-code==0.1.50...deepagents-code==0.1.51) (2026-07-31) ### Features - The status bar and usage view now show the running session cost. ([#5036](#5036)) - Removed redundant `shell` and `web_search` prompt guidance. ([#5213](#5213)) - After switching threads, Deep Agents now points back to the previous thread. ([#5172](#5172)) - Leaving `/mcp` with pending toggles now prompts you to reconnect. ([#5211](#5211)) - `dcode config get` now accepts configuration sections. ([#5134](#5134)) ### Fixes - Kept the `/goal` criteria prompt responsive. ([#5142](#5142)) - Improved goal handling so underspecified objectives can be resolved from conversation context. ([#5201](#5201)) - Released the turn when an interrupted worker never starts. ([#5196](#5196)) - Hid timestamp footers together with their associated rows. ([#5167](#5167)) - Fixed editable SDK detection by scanning and correlating SDK locations more accurately. ([#5199](#5199)) - Improved `doctor` output to explain why it may not have a latest-version answer. ([#5209](#5209)) _End release notes preview._ --- > [!NOTE] > A **New Contributors** section is appended to the GitHub release notes automatically at publish time (see [Release Pipeline](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md#release-pipeline), step 2). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: langchain-oss-automated-triage[bot] <248757908+langchain-oss-automated-triage[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Timestamp footers now hide and reappear with the message row they belong to.
Timestamp footers (
/timestamps) are sibling widgets trailing each message in the transcript, so hiding a message row left its footer behind — a stray timestamp floating over nothing. Three paths did this:Footers are now tracked as accessories of the collapsible they trail, and hidden via a marker class rather than by assigning
display. That distinction is load-bearing: an inlinedisplaypermanently outranks the CSS cascade, so assigning it would strand a footer against the user's/timestampspreference for the rest of the session. With a class, the preference survives the fold and reasserts itself on expand.Group collapse and approval keep separate marker classes on purpose — a footer can be hidden for both reasons at once, and releasing one must not reveal it while the other still applies.
The constructor,
add_member, andadd_collapsibleall register through a single_attach_accessoriesentry point, so a group's accessory map and a tool's own approval linkage cannot drift apart depending on which path folded a row. Every summary releases what it still holds before removing itself, and the mount-failure path rolls back everything it may have applied rather than only the-groupedclass.Footers are attributed to an owner by their derived DOM id rather than position alone, so an unanticipated transcript shape leaves a footer alone instead of folding it into a neighbouring group.
Testing
Covers the
/timestampspreference toggled against a collapsed group, a groupable diff folding its own footer, footer release when a failed tool is ejected, release when a summary removes itself, the approval hide/restore round trip, and footer attribution across run boundaries.Each of these was checked by mutation — reverting the corresponding behaviour fails the test that covers it.
11368unit tests pass;ruffandtyare clean.Made by Open SWE