Skip to content

v1.17.0

Choose a tag to compare

@naicud naicud released this 25 Aug 13:08
· 16 commits to main since this release

Added

  • Orphan reaper — no more zombie servers: every opencode server the plugin spawns is
    registry-tracked (pid+port, identity-checked stops). A new reapStaleServers() sweep runs at
    MCP-server boot and in doctor (orphan-reaper check): it removes dead entries and kills —
    only after a ps-level identity match — servers orphaned by crashed/closed Claude sessions
    that are idle AND older than 2h (OPENCODE_REAP_STALE_MIN minutes, 0 disables). Busy sessions
    and long tasks are never touched; wrong identity is refused, never killed.

Fixed

  • Long-horizon safety — no more implicit kills: the delegate agent and delegation skill
    instructed "two consecutive timeouts → abort, treat as failed", which executed long-running
    tasks after ~20 minutes of chained waits. Timeouts are now supervision events only: keep
    re-issuing wait/waitAll indefinitely; abort fires exclusively on an explicit user request
    or a terminal non-retryable error. waitAll reports which sessions outlived its deadline with
    the same guidance; README documents the long-horizon contract and crash reattach flow.

Changed

  • Visibility without token burn: progress frames (the _meta.progressToken path Claude Code
    uses automatically) now stream every ~8s (was 15s) with the full one-line feed — reasoning ·
    current tool call · assistant tail. These frames render UI-side ONLY and never enter the model
    context, so watching a delegated subagent costs zero tokens/quota; the call keeps blocking up
    to 600s instead of slicing. The no-progressToken fallback auto-slice stays as before but its
    payload is slimmed (tail/reasoning 160 chars, 3 tool lines) to keep even that path cheap.
  • Automatic live feed from wait (classic-subagent feel): calls that pin neither
    timeoutSec nor a progressToken now auto-slice every 60s (OPENCODE_WAIT_SLICE_SEC
    override) instead of blocking mutely for up to 600s. Every slice returns a rich activity
    snapshot — assistant tail, reasoning tail, recent tool-call lines, todos — plus a nextStep
    to call again: the delegated agent's progress becomes visible by itself, no manual logs.
    Explicit timeoutSec / progressToken callers keep the old long-blocking behavior.