Skip to content

fix(code): detach owned langgraph dev server from terminal - #4642

Merged
Mason Daugherty (mdrxy) merged 6 commits into
mainfrom
mdrxy/code/server-detach-session
Jul 13, 2026
Merged

fix(code): detach owned langgraph dev server from terminal#4642
Mason Daugherty (mdrxy) merged 6 commits into
mainfrom
mdrxy/code/server-detach-session

Conversation

@mdrxy

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

Copy link
Copy Markdown
Member

Fixed dcode hanging when its terminal was suspended or closed while it was running the built-in langgraph dev server.

When dcode starts its built-in langgraph dev server, closing or suspending the terminal could stop the server unexpectedly and leave dcode hanging during cleanup. This PR separates the server from the terminal on macOS and Linux while keeping dcode responsible for shutting it down.


Before

dcode and its built-in server shared the same terminal session. Actions such as suspending dcode with Ctrl+Z or closing its terminal could therefore affect both processes at once. The server could stop before dcode had a chance to clean it up, which could leave dcode stuck.

After

The built-in server now runs in a separate session on macOS and Linux, so terminal signals intended for dcode no longer stop the server at the same time. When dcode exits, restarts the server, or encounters a startup failure, it still shuts down the server and any child processes it started.

This separation matters in both directions: the server should not be accidentally stopped by the terminal, but it also must not be left running after dcode is gone. Shutdown first gives the full server process tree a chance to exit cleanly, then forces it to stop if necessary. Safety checks ensure dcode never signals its own process group. Windows behavior is unchanged.


Made by Open SWE

…ssion

Spawn the owned `langgraph dev` server in its own POSIX session/process
group so terminal job-control signals (SIGTSTP/SIGHUP) delivered when the
host terminal is backgrounded or closed no longer suspend or hang up the
server along with the TUI. Shutdown, startup-failure cleanup, and restart
now tear down the entire detached process group (SIGTERM, wait, then group
SIGKILL), guarded so dcode's own group is never signaled. Windows keeps
signaling only the root process.

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: M 200-499 LOC labels Jul 10, 2026
@mdrxy
Mason Daugherty (mdrxy) marked this pull request as ready for review July 10, 2026 19:34
@github-actions github-actions Bot added size: L 500-999 LOC and removed size: M 200-499 LOC labels Jul 13, 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/client/launch/server.py
@mdrxy Mason Daugherty (mdrxy) changed the title fix(code): detach owned langgraph dev server from dcode's terminal fix(code): detach owned langgraph dev server from terminal Jul 13, 2026
@mdrxy
Mason Daugherty (mdrxy) merged commit d1f3afe into main Jul 13, 2026
88 of 90 checks passed
@mdrxy
Mason Daugherty (mdrxy) deleted the mdrxy/code/server-detach-session branch July 13, 2026 05:46
Mason Daugherty (mdrxy) added a commit that referenced this pull request Jul 13, 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.37](deepagents-code==0.1.36...deepagents-code==0.1.37)
(2026-07-13)

### Features

* Add Meta model provider
([#4650](#4650))
([70829c5](70829c5))
* Set `prompt_cache_key` for OpenAI models
([#4632](#4632))
([8cf57ac](8cf57ac))
* Support Fireworks `/routers` model ids
([#4591](#4591))
([1c08d27](1c08d27))
* `/model` Ctrl+N toggle for names vs raw specs
([#4592](#4592))
([518c322](518c322))
* `/tools` slash command
([#4649](#4649))
([b1600a8](b1600a8))
* Add `-s` alias for `--skill`
([#4620](#4620))
([c9b7ac2](c9b7ac2))
* Configurable chat cursor style
([#4687](#4687))
([a22484b](a22484b))
* Expand environment variables in MCP config
([#4681](#4681))
([4f5d7be](4f5d7be))
* Hide diff widget for credential files
([#4593](#4593))
([4c49a24](4c49a24))
* In-app Debug Console
([#4564](#4564))
([4f94a30](4f94a30))
* Offer abort in `/threads` cwd-switch prompt
([#4583](#4583))
([aaeac99](aaeac99))
* Resume threads in-TUI with `/threads -r [ID]`
([#4609](#4609))
([d442673](d442673))
* Show `(debug enabled)` on splash when `DEEPAGENTS_CODE_DEBUG` is set
([#4584](#4584))
([f10b877](f10b877))

### Bug Fixes

* Avoid repeated startup auto-update stalls
([#4648](#4648))
([12a9c9d](12a9c9d))
* Infer Fireworks provider from qualified model IDs
([#4594](#4594))
([4d2aa8a](4d2aa8a))
* Capture input typed before TUI startup
([#4684](#4684))
([ef9a4a8](ef9a4a8))
* Detach owned `langgraph dev` server from terminal
([#4642](#4642))
([d1f3afe](d1f3afe))
* Infer additional model providers
([#4675](#4675))
([4ceed24](4ceed24))
* Preserve `Ctrl+D` deletion in non-empty input
([#4626](#4626))
([306bd89](306bd89))
* Quit with `Ctrl+D` at end of prompt
([#4678](#4678))
([2f8c111](2f8c111))
* Reap langgraph dev server when startup is cancelled
([#4629](#4629))
([904ff05](904ff05))
* Reject `--auto-approve` in headless mode
([#4617](#4617))
([997be16](997be16))
* Route explicit `--stdin` + `--skill` to headless path
([#4611](#4611))
([724e24a](724e24a))
* Skip Esc prompt-restore once output generation begins
([#4582](#4582))
([14f384f](14f384f))
* Remove misleading agent names from help
([#4671](#4671))
([ac15732](ac15732))
* Support plain `exit` quit command
([#4543](#4543))
([e6f10a1](e6f10a1))
* Sync `ask_user` active-question highlight with focus
([#4599](#4599))
([e4c29b5](e4c29b5))
* Wrap MCP viewer navigation
([#4677](#4677))
([cffc732](cffc732))

### Performance Improvements

* Load MCP servers concurrently during graph build
([#4659](#4659))
([c5345cc](c5345cc))

---

_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: Mason Daugherty <github@mdrxy.com>
Marcelo5444 pushed a commit to Marcelo5444/deepagents that referenced this pull request Jul 30, 2026
…in-ai#4642)

Fixed dcode hanging when its terminal was suspended or closed while it
was running the built-in `langgraph dev` server.

When dcode starts its built-in `langgraph dev` server, closing or
suspending the terminal could stop the server unexpectedly and leave
dcode hanging during cleanup. This PR separates the server from the
terminal on macOS and Linux while keeping dcode responsible for shutting
it down.

---

## Before

dcode and its built-in server shared the same terminal session. Actions
such as suspending dcode with Ctrl+Z or closing its terminal could
therefore affect both processes at once. The server could stop before
dcode had a chance to clean it up, which could leave dcode stuck.

## After

The built-in server now runs in a separate session on macOS and Linux,
so terminal signals intended for dcode no longer stop the server at the
same time. When dcode exits, restarts the server, or encounters a
startup failure, it still shuts down the server and any child processes
it started.

This separation matters in both directions: the server should not be
accidentally stopped by the terminal, but it also must not be left
running after dcode is gone. Shutdown first gives the full server
process tree a chance to exit cleanly, then forces it to stop if
necessary. Safety checks ensure dcode never signals its own process
group. Windows behavior is unchanged.

---

Made by [Open
SWE](https://openswe.vercel.app/agents/0c752fd0-cfc3-0b00-87ba-fb1e67b483ce)

---------

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.37](langchain-ai/deepagents@deepagents-code==0.1.36...deepagents-code==0.1.37)
(2026-07-13)

### Features

* Add Meta model provider
([langchain-ai#4650](langchain-ai#4650))
([70829c5](langchain-ai@70829c5))
* Set `prompt_cache_key` for OpenAI models
([langchain-ai#4632](langchain-ai#4632))
([8cf57ac](langchain-ai@8cf57ac))
* Support Fireworks `/routers` model ids
([langchain-ai#4591](langchain-ai#4591))
([1c08d27](langchain-ai@1c08d27))
* `/model` Ctrl+N toggle for names vs raw specs
([langchain-ai#4592](langchain-ai#4592))
([518c322](langchain-ai@518c322))
* `/tools` slash command
([langchain-ai#4649](langchain-ai#4649))
([b1600a8](langchain-ai@b1600a8))
* Add `-s` alias for `--skill`
([langchain-ai#4620](langchain-ai#4620))
([c9b7ac2](langchain-ai@c9b7ac2))
* Configurable chat cursor style
([langchain-ai#4687](langchain-ai#4687))
([a22484b](langchain-ai@a22484b))
* Expand environment variables in MCP config
([langchain-ai#4681](langchain-ai#4681))
([4f5d7be](langchain-ai@4f5d7be))
* Hide diff widget for credential files
([langchain-ai#4593](langchain-ai#4593))
([4c49a24](langchain-ai@4c49a24))
* In-app Debug Console
([langchain-ai#4564](langchain-ai#4564))
([4f94a30](langchain-ai@4f94a30))
* Offer abort in `/threads` cwd-switch prompt
([langchain-ai#4583](langchain-ai#4583))
([aaeac99](langchain-ai@aaeac99))
* Resume threads in-TUI with `/threads -r [ID]`
([langchain-ai#4609](langchain-ai#4609))
([d442673](langchain-ai@d442673))
* Show `(debug enabled)` on splash when `DEEPAGENTS_CODE_DEBUG` is set
([langchain-ai#4584](langchain-ai#4584))
([f10b877](langchain-ai@f10b877))

### Bug Fixes

* Avoid repeated startup auto-update stalls
([langchain-ai#4648](langchain-ai#4648))
([12a9c9d](langchain-ai@12a9c9d))
* Infer Fireworks provider from qualified model IDs
([langchain-ai#4594](langchain-ai#4594))
([4d2aa8a](langchain-ai@4d2aa8a))
* Capture input typed before TUI startup
([langchain-ai#4684](langchain-ai#4684))
([ef9a4a8](langchain-ai@ef9a4a8))
* Detach owned `langgraph dev` server from terminal
([langchain-ai#4642](langchain-ai#4642))
([d1f3afe](langchain-ai@d1f3afe))
* Infer additional model providers
([langchain-ai#4675](langchain-ai#4675))
([4ceed24](langchain-ai@4ceed24))
* Preserve `Ctrl+D` deletion in non-empty input
([langchain-ai#4626](langchain-ai#4626))
([306bd89](langchain-ai@306bd89))
* Quit with `Ctrl+D` at end of prompt
([langchain-ai#4678](langchain-ai#4678))
([2f8c111](langchain-ai@2f8c111))
* Reap langgraph dev server when startup is cancelled
([langchain-ai#4629](langchain-ai#4629))
([904ff05](langchain-ai@904ff05))
* Reject `--auto-approve` in headless mode
([langchain-ai#4617](langchain-ai#4617))
([997be16](langchain-ai@997be16))
* Route explicit `--stdin` + `--skill` to headless path
([langchain-ai#4611](langchain-ai#4611))
([724e24a](langchain-ai@724e24a))
* Skip Esc prompt-restore once output generation begins
([langchain-ai#4582](langchain-ai#4582))
([14f384f](langchain-ai@14f384f))
* Remove misleading agent names from help
([langchain-ai#4671](langchain-ai#4671))
([ac15732](langchain-ai@ac15732))
* Support plain `exit` quit command
([langchain-ai#4543](langchain-ai#4543))
([e6f10a1](langchain-ai@e6f10a1))
* Sync `ask_user` active-question highlight with focus
([langchain-ai#4599](langchain-ai#4599))
([e4c29b5](langchain-ai@e4c29b5))
* Wrap MCP viewer navigation
([langchain-ai#4677](langchain-ai#4677))
([cffc732](langchain-ai@cffc732))

### Performance Improvements

* Load MCP servers concurrently during graph build
([langchain-ai#4659](langchain-ai#4659))
([c5345cc](langchain-ai@c5345cc))

---

_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: Mason Daugherty <github@mdrxy.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.

1 participant