Skip to content

fix(code): keep task timers monotonic across nested subagent HITL - #4771

Merged
Mason Daugherty (mdrxy) merged 5 commits into
mainfrom
open-swe/task-timer-nested-interrupt
Jul 17, 2026
Merged

fix(code): keep task timers monotonic across nested subagent HITL#4771
Mason Daugherty (mdrxy) merged 5 commits into
mainfrom
open-swe/task-timer-nested-interrupt

Conversation

@mdrxy

@mdrxy Mason Daugherty (mdrxy) commented Jul 15, 2026

Copy link
Copy Markdown
Member

Fixed dcode TUI task elapsed timers resetting when a nested subagent reached a human-in-the-loop approval checkpoint.


A long-running task [general-purpose] row's elapsed timer reset to zero whenever a nested subagent hit a HITL approval checkpoint. The interrupt handler paused/resumed every tracked tool row, and ToolCallMessage.pause_running()/set_running() clear and reassign _start_time — so an unrelated nested child's (or sibling subagent's) approval restarted the outer task timers. This scopes pause/resume to only the rows an interrupt actually owns (matched by tool name + args via the new _interrupt_owned_tool_rows helper). Untracked nested-child interrupts now own no outer row, so outer and sibling task timers stay monotonic and completed Took … durations reflect full execution time. A tool awaiting its own initial approval still pauses then resumes as before.

Made by Open SWE

Scope the HITL interrupt pause/resume to only the tool rows an interrupt
owns. Previously every tracked tool row was paused on any interrupt and
resumed on approval, so a nested subagent's approval reset unrelated outer
`task` elapsed timers. Ownership is matched by tool name + args via a new
`_interrupt_owned_tool_rows` helper; nested child interrupts (untracked)
now leave outer and sibling `task` timers running monotonically.

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 open-swe size: M 200-499 LOC labels Jul 15, 2026
@mdrxy
Mason Daugherty (mdrxy) marked this pull request as ready for review July 15, 2026 22:50

@open-swe open-swe Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Open SWE Review: No issues found

Open SWE reviewed this PR and found no potential bugs to report.

Open in WebView Open SWE trace

@github-actions github-actions Bot added size: L 500-999 LOC and removed size: M 200-499 LOC labels Jul 17, 2026

@open-swe open-swe Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Open SWE Review found 1 potential issue.

Open in WebView Open SWE trace

Comment thread libs/code/deepagents_code/tui/textual_adapter.py Outdated
@mdrxy
Mason Daugherty (mdrxy) merged commit 6952011 into main Jul 17, 2026
53 checks passed
@mdrxy
Mason Daugherty (mdrxy) deleted the open-swe/task-timer-nested-interrupt branch July 17, 2026 19:02
Mason Daugherty (mdrxy) pushed a commit that referenced this pull request Jul 17, 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`. The published GitHub release body is extracted from the
merged `CHANGELOG.md` by `release.yml`, not from this PR description._

---


##
[0.1.43](deepagents-code==0.1.42...deepagents-code==0.1.43)
(2026-07-17)

### Features

- Added classifier-backed Auto approval mode behind
`DEEPAGENTS_CODE_EXPERIMENTAL=1`
([#4804](#4804)).
- Added a shutdown toast for deferred exits
([#4830](#4830)).
- Task descriptions that were truncated can now be expanded by clicking
or pressing `Ctrl+O`
([#4811](#4811)).
- Debug Console clears with `Ctrl+L` now persist after reopening
([#4812](#4812)).
- Added debug logging for skill-name override collisions
([#4772](#4772)).

### Bug Fixes

- Keep chat input responsive during `/restart`
([#4808](#4808)).
- Fixed paste placeholders disappearing when backspacing a newline below
them ([#4757](#4757)).
- Made markdown `AppMessage` output selectable
([#4814](#4814)).
- Fixed live tool-group counts to include only running tools
([#4809](#4809)).
- Kept `task` timers monotonic across nested subagent human-in-the-loop
flows ([#4771](#4771)).
- Preserved goal criteria proposals when marker clearing fails
([#4785](#4785)).
- Reduced repeated probing of an unreachable Ollama daemon to once per
reload
([#4806](#4806)).
- Quieted MCP auth-skip debug logging for known patterns
([#4805](#4805)).
- Improved `/version` diagnostics for editable installs and core
dependency reporting, including surfacing `langchain-quickjs`
([#4816](#4816),
[#4813](#4813)).
- Removed the `uv install` tip from the `/version` update hint
([#4822](#4822)).

_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>
Marcelo5444 pushed a commit to Marcelo5444/deepagents that referenced this pull request Jul 30, 2026
…angchain-ai#4771)

Fixed dcode TUI `task` elapsed timers resetting when a nested subagent
reached a human-in-the-loop approval checkpoint.

---

A long-running `task [general-purpose]` row's elapsed timer reset to
zero whenever a nested subagent hit a HITL approval checkpoint. The
interrupt handler paused/resumed *every* tracked tool row, and
`ToolCallMessage.pause_running()`/`set_running()` clear and reassign
`_start_time` — so an unrelated nested child's (or sibling subagent's)
approval restarted the outer `task` timers. This scopes pause/resume to
only the rows an interrupt actually owns (matched by tool name + args
via the new `_interrupt_owned_tool_rows` helper). Untracked nested-child
interrupts now own no outer row, so outer and sibling `task` timers stay
monotonic and completed `Took …` durations reflect full execution time.
A tool awaiting its own initial approval still pauses then resumes as
before.

Made by [Open
SWE](https://openswe.vercel.app/agents/5c0ae962-c16b-6e04-ada4-d4d76826adb9)

---------

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Marcelo5444 pushed a commit to Marcelo5444/deepagents that referenced this pull request Jul 30, 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`. The published GitHub release body is extracted from the
merged `CHANGELOG.md` by `release.yml`, not from this PR description._

---


##
[0.1.43](langchain-ai/deepagents@deepagents-code==0.1.42...deepagents-code==0.1.43)
(2026-07-17)

### Features

- Added classifier-backed Auto approval mode behind
`DEEPAGENTS_CODE_EXPERIMENTAL=1`
([langchain-ai#4804](langchain-ai#4804)).
- Added a shutdown toast for deferred exits
([langchain-ai#4830](langchain-ai#4830)).
- Task descriptions that were truncated can now be expanded by clicking
or pressing `Ctrl+O`
([langchain-ai#4811](langchain-ai#4811)).
- Debug Console clears with `Ctrl+L` now persist after reopening
([langchain-ai#4812](langchain-ai#4812)).
- Added debug logging for skill-name override collisions
([langchain-ai#4772](langchain-ai#4772)).

### Bug Fixes

- Keep chat input responsive during `/restart`
([langchain-ai#4808](langchain-ai#4808)).
- Fixed paste placeholders disappearing when backspacing a newline below
them ([langchain-ai#4757](langchain-ai#4757)).
- Made markdown `AppMessage` output selectable
([langchain-ai#4814](langchain-ai#4814)).
- Fixed live tool-group counts to include only running tools
([langchain-ai#4809](langchain-ai#4809)).
- Kept `task` timers monotonic across nested subagent human-in-the-loop
flows ([langchain-ai#4771](langchain-ai#4771)).
- Preserved goal criteria proposals when marker clearing fails
([langchain-ai#4785](langchain-ai#4785)).
- Reduced repeated probing of an unreachable Ollama daemon to once per
reload
([langchain-ai#4806](langchain-ai#4806)).
- Quieted MCP auth-skip debug logging for known patterns
([langchain-ai#4805](langchain-ai#4805)).
- Improved `/version` diagnostics for editable installs and core
dependency reporting, including surfacing `langchain-quickjs`
([langchain-ai#4816](langchain-ai#4816),
[langchain-ai#4813](langchain-ai#4813)).
- Removed the `uv install` tip from the `/version` update hint
([langchain-ai#4822](langchain-ai#4822)).

_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 open-swe size: L 500-999 LOC

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant