Skip to content

fix(code): hide timestamp footers with the rows they belong to - #5167

Merged
Mason Daugherty (mdrxy) merged 3 commits into
mainfrom
aolsenjazz/code/fix-nested-timestamps
Jul 30, 2026
Merged

fix(code): hide timestamp footers with the rows they belong to#5167
Mason Daugherty (mdrxy) merged 3 commits into
mainfrom
aolsenjazz/code/fix-nested-timestamps

Conversation

@aolsenjazz

@aolsenjazz Alexander Olsen (aolsenjazz) commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

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:

  • Collapsing a run of tool calls into a step summary hid the tool rows and any folded diffs, but not their footers.
  • An approval prompt replacing a tool row hid the row, but not its footer.
  • A summary whose tools all failed removed itself while a folded diff was still attached, stranding that diff and its footer hidden with no summary left to expand them.

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 inline display permanently outranks the CSS cascade, so assigning it would strand a footer against the user's /timestamps preference 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, and add_collapsible all register through a single _attach_accessories entry 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 -grouped class.

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 /timestamps preference 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. 11368 unit tests pass; ruff and ty are clean.

Made by Open SWE

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
@github-actions github-actions Bot added dcode Related to `deepagents-code` fix A bug fix (PATCH) internal User is a member of the `langchain-ai` GitHub organization size: S 50-199 LOC labels Jul 29, 2026
@mdrxy
Mason Daugherty (mdrxy) marked this pull request as ready for review July 30, 2026 18:06
Mason Daugherty (mdrxy) and others added 2 commits July 30, 2026 14: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.
@github-actions github-actions Bot added size: L 500-999 LOC and removed size: S 50-199 LOC labels Jul 30, 2026
@mdrxy Mason Daugherty (mdrxy) changed the title fix(code): keep timestamps attached to grouped tools fix(code): hide timestamp footers with the rows they belong to Jul 30, 2026
@mdrxy
Mason Daugherty (mdrxy) merged commit a3e3798 into main Jul 30, 2026
69 checks passed
@mdrxy
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dcode Related to `deepagents-code` fix A bug fix (PATCH) internal User is a member of the `langchain-ai` GitHub organization size: L 500-999 LOC

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants