Release v0.0.1
Some checks failed
release / build-linux-amd64 (push) Failing after 10m52s

Bundles the in-flight work into the first tagged release. See
CHANGELOG.md `[0.0.1] - 2026-05-14` for the full per-change list.
Highlights:

- Sidebar / chrome stability: clamp absolute cursor positioning and
  printable bytes to the viewport so long-running TUIs (claude, codex)
  can't spray into the right rail; bound tab bar's row clear to the
  viewport width so the rail isn't wiped on every tab redraw; flag
  scroll escapes (RI/IND/NEL/SU/SD/IL/DL) and clamp `CSI 0/1/2 J`/`K`
  to viewport columns.
- Palette: "Spawn process…" form, macros (`sw `, `k `, `sp `), kill
  entries mark the focused tab, dead agents drop out of the switch
  list.
- Sidebar: split into Processes (session-wide) + Agent Tree
  (per-active-agent) sections; relaunch indicator; Ctrl+W/S walks the
  combined list, Ctrl+A/D steps tabs.
- MCP: protocol handshake (`initialize`, `tools/list`, `tools/call`,
  `ping`), `mcp_injection.kind = cli_override / config_env` so codex
  and opencode pick up the server with no file writes, `lifecycle`
  help topic and tool-description cleanup-duty pointers.
- Lifecycle: orchestrator-spawned children cascade-killed when the
  parent dies; orchestrator-injected prompts end with CR + delayed
  Enter so claude submits cleanly.
This commit is contained in:
2026-05-14 22:04:32 +01:00
parent 63f0ddcb38
commit 52e06c914e
18 changed files with 1031 additions and 62 deletions

View File

@@ -6,7 +6,23 @@ loosely follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [0.0.1] - 2026-05-14
### Fixed
- Tab bar redraw used `\x1b[2K` to clear rows 1 and 2 before painting
labels, which wiped the sidebar columns on those rows too. When the
sidebar cache was still warm the rail never repainted, leaving a
gap where the sidebar's top border and "Processes" header should be.
The clear is now bounded to the viewport width.
- Long-running TUIs (claude / codex) whose internal column state
drifted past the patterm viewport could spray text into the sidebar
columns — overwriting the session-tree and scratchpad rail until the
user opened/closed the palette to force a full repaint. The viewport
renderer now clamps absolute cursor positioning (CUP / HVP / CHA /
HPA) to the viewport's right edge and drops printable bytes (ASCII
and full UTF-8 glyphs) that would otherwise land past it. Covered by
a unit suite and a new `sidebar_survives_wide_writes` harness
scenario.
- Sub-agent panes spawned while another diff-based TUI (claude/codex/
opencode) held focus could come up corrupted because the new child's
first incremental updates targeted cells the host viewport hadn't
@@ -15,7 +31,31 @@ loosely follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
styled emulator grid — the same path that fixed the symptom when the
user manually cycled focus with Ctrl+W / Ctrl+S.
### Changed
- Command palette `Kill …` entries now mark the focused tab with the
same "• … (current)" marker the `Switch to …` entries use, so the
user can tell at a glance which tab a kill action targets.
- Status line now advertises the navigation chords (`Ctrl-A/D · tabs`,
`Ctrl-W/S · tree`) alongside `Ctrl-K · palette`. Hints decay
shortest-first when the terminal is too narrow to fit all three.
### Added
- "Spawn process…" entry in the command palette opens a two-field form
for typing an arbitrary command line and ticking "Relaunch on exit".
The command runs through `sh -lc` so multi-word lines like
`bun run dev` resolve binaries the way an interactive shell would.
When the relaunch flag is set, patterm Starts the process again after
it exits (1s backoff). Killing the process from the palette clears
the flag so it does not come back.
- Dedicated "Processes" section in the sidebar above the agent tree,
listing every top-level command/terminal process. It is global to
the patterm session — switching between agent tabs no longer changes
which processes are visible. The relaunch-on-exit indicator (`⟳`)
shows next to processes the user opted into auto-restart for.
- Ctrl+W / Ctrl+S now traverse the combined Processes section and the
active agent tree as one flat list, so the user can step out of the
agent tree into the Processes pane and back without leaving the
keyboard.
- New `lifecycle` help topic spelling out that the caller owns the
processes it spawns and should call `close_process` when a sub-agent
or spawned process is no longer needed. The `spawn_agent` and
@@ -55,6 +95,14 @@ loosely follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
available macros.
### Changed
- The sidebar's session-tree section is now labeled "Agent Tree" and
shows only agent sessions (and any sub-agents they spawn). Top-level
command and terminal processes live in the new "Processes" section
above it.
- Tab bar tabs now correspond to agent sessions only. Command/terminal
processes that previously claimed a top-level tab now appear in the
Processes sidebar section, so the tab strip is reserved for agent
context.
- Focus, lifecycle, and repaint paths now capture terminal layout before
taking UI state locks, reducing resize-time deadlock risk without
changing visible behavior.