Skip to content
v0.5.2 - 2026-09-09

v0.5.2 - 2026-09-09

Release on GitHub

Added

  • Agent-state detection - a display-only AgentState (idle/working/needs-attention/completed/failed) per terminal with tiered detection: Tier 1 accepts capability-authenticated events (authoritative: agent.started → working, agent.settled → completed, tool errors → needs-attention, session end → idle); Tier 2 accepts the published gpty_state=<value> OSC declaration (whitelisted, single-shot, rate-limited, alt-screen/capture-replay/resize suppressed); Tier 3 adds conservative failure regex patterns with 60 s TTL decay and non-zero shell exits. The state and its detection tier surface through pane-status (agent_state, agent_state_tier).
  • Generic event vocabulary - the event socket translates the OMP extension’s wire names to adapter-neutral names at the trust boundary (session.bound, agent.started, agent.settled, turn.started, turn.finished, tool.call, tool.finished, thinking.delta); Reasoning and Tier 1 agent-state detection consume the generic contract.
  • Windows event listener - the OMP event socket now serves on Windows as a named pipe (\\.\pipe\gpty-events) with per-PTY GPTY_EVENT_* injection on every platform; capability entropy comes from getrandom instead of /dev/urandom. The shipped extension still needs a named-pipe transport to use it there (ecosystem follow-up), but Reasoning is no longer fail-closed at the gPTY layer.
  • CLI backend for Inspector - a cli backend beside mock/omp: runs a configured adapter command (argv, never shell-evaluated) as a subprocess NDJSON bridge - one JSON request line per prompt in, thinking/delta/done/error/status frames out. Cancelling kills the child (kill_on_drop, no orphans); the next prompt respawns. Inspector pane settings gain a Command row; the command persists in the layout state (sanitized like shell args).
  • Titlebar agent-state badges - a Phosphor badge on each terminal titlebar mirrors the agent state: spinner (Working), check (Completed), warning (Failed), pulsing amber (NeedsAttention); hidden while Idle. Display only.
  • Settings panel polish - per-tab “Reset tab to defaults” buttons (full-width, centered) replace the all-tabs reset; the color scheme row gains a reset button; every UI color gains an individual reset; Appearance color pickers gain OK/Cancel (Cancel restores the pre-open color); the Edit/Add Concept dialog opens at 90% of the settings menu width.

Changed

  • UI chrome colors (wrapper background/border, pane titlebars, sidebar, window titlebar) now live-apply to existing panes when changed - no app restart required.
  • Color row labels share a fixed-width column so all color pickers align.
  • The settings panel is wider and its tab font slightly smaller so all six tabs always fit without clipping into the overflow dropdown.

Fixed

  • Pane settings popup could render but ignore every click: Godot 4 GUI input picking uses reverse tree order and ignores z_index, so later-added workspace grids ate the popup’s input. Overlays now move to the end of the tree when opened; the same fix covers the global settings panel and command palette. The palette also had its first toggle inverted (created visible, first press hid it).
  • Pane settings popup stayed open over a killed/swapped pane and every interaction then errored on the freed body. The popup now closes on kill and type-swap and self-closes whenever its target is torn down.
  • Restarted terminals showed a growing pile of old prompt lines (“as if Enter was pressed”): the plain-text parser committed a history row on every bare carriage return, and shells reprint the prompt on each resize. Bare CR no longer commits, and scrollback restore collapses runs of identical rows.