Simplify session lifecycle and MCP cleanup

This commit is contained in:
2026-05-14 20:51:37 +01:00
parent 27361f79c4
commit cc4bf9e904
16 changed files with 439 additions and 255 deletions

View File

@@ -34,6 +34,16 @@ loosely follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
available macros.
### Changed
- Focus, lifecycle, and repaint paths now capture terminal layout before
taking UI state locks, reducing resize-time deadlock risk without
changing visible behavior.
- Focused PTY output no longer rebuilds the scratchpad sidebar on every
chunk. The sidebar still repaints on focus/lifecycle/resize changes
and when child output scrolls over the chrome, but normal output avoids
repeated scratchpad disk reads.
- Harness scenario tests now reuse one built patterm binary per test run
and write failure artifacts under a repo-rooted, collision-proof
directory.
- Palette ordering: open agents/processes (`Switch to …`) now appear
above the option to spawn new ones, with kill entries pushed down
toward the end of the list.
@@ -45,6 +55,21 @@ loosely follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
extra row of viewport.
### Fixed
- Agent MCP injection no longer writes unused config files for inline
injection modes (`cli_override` / `config_env`). File-backed injection
modes track their generated paths and clean them up when the child is
closed, exits, or patterm shuts down.
- MCP `tools/list` descriptions now match the runtime argument values
for process output and pattern waiting, and typed invalid-argument
errors map to JSON-RPC invalid params instead of generic internal
errors.
- Scratchpad writes and appends are serialized inside a patterm process
so `expected_revision` checks cannot race another local scratchpad
mutation.
- The sidebar scratchpad list now refreshes after MCP
`scratchpad_write` and `scratchpad_append` calls.
- UI chrome now reads renamed child display names through the
`DisplayName` accessor, avoiding races with `rename_process`.
- Child processes spawned by an orchestrator are now killed when the
orchestrator dies, recursively through the tree. Applies whether the
parent was closed via MCP, Ctrl-C'd by the user, or exited on its