Skip to content

v0.5.4

Choose a tag to compare

@tmaiaroto tmaiaroto released this 03 Oct 21:20
· 73 commits to main since this release

Patch Release: Stability, Performance & Observability

Agent loop stability

  • Empty-turn recovery — When a step ends normally but produces nothing actionable (no tool call, no text), the agent now
    automatically continues the turn with a small bounded budget, so dropped chains of thought no longer stall a response.
  • Truncated tool-call recovery — Incomplete JSON streamed for a tool call is now detected and retried automatically
    within a bounded budget, fixing rare dropped tool calls from providers that cut off arguments.

Both recoveries are tracked as internal continuations, keeping per-turn dispatch accounting correct.

TUI performance

  • Faster prompt input — Sidebar panel data (workspace-search progress, memory sources/tallies) is now fetched off the
    render path via background ticks, so a slow store read no longer delays keystrokes.
  • Cached sidebar rendering — The logo block and section strings are memoized and reused across animation/spinner-only
    frames, rebuilding only when state actually changes.
  • Markdown alignment in streamed replies — Mid-stream replies assembled from multiple fragment renders could produce
    rows wider than the wrap width, causing the terminal to re-wrap lines and headings/bullets to appear randomly indented.
    The final frame now drops the streaming cache and draws one coherent full render, with seam trimming that compares
    visible glyphs so blocks keep a single blank line between them.

Misc edge-case fixes: nil-cursor guard on draw, immediate memory panel refresh on session switch.

New observability tools

  • phosphor_trace — Reads Phosphor's in-process OpenTelemetry span ring and prints a compact per-turn trace tree (span
    name, nesting, duration, status, key GenAI attributes: model, step index, finish reason, token usage, tool name). Great
    for diagnosing which step stalled or where nesting broke.

Enable it with observability.memory_buffer in phosphor.json (number of recent spans kept in the ring; off when
unset).

Chores

  • Cross-platform golden-file comparison now normalizes line endings, so tests pass identically on Windows and Unix
    checkouts.

ஃ Generated with Phosphor