Skip to content

v0.8.0 - Cancellation reaches every external call

Choose a tag to compare

@pbdeuchler pbdeuchler released this 30 Sep 04:55
· 67 commits to main since this release

Compared against v0.7.0 (73f4aac).

Published crate bumps:

  • halter-protocol 0.7.0 -> 0.8.0
  • halter-hooks 0.7.0 -> 0.8.0
  • halter-config 0.7.0 -> 0.8.0
  • halter-providers 0.7.0 -> 0.8.0
  • halter-session 0.7.0 -> 0.8.0
  • halter-tools 0.7.0 -> 0.8.0
  • halter-runtime 0.7.0 -> 0.8.0
  • halter 0.7.0 -> 0.8.0

Changes:

  • Cancellation reaches every external call a turn makes: provider HTTP/SSE, rate-limit waits, model-judge panels, hooks, subagent spawn/wait and browser actions.
  • submit_turn_with_cancel (now public) and compact_with_cancel let callers cancel a turn or compaction under their own CancellationToken, including while waiting for the session's write lease. submit_turn, compact and notify stop at runtime shutdown. Dropping a turn's event stream still does not cancel it.
  • Fixes:
    • Cancelled rate-limit waits, body reads and stream setup surface as cancellations, not fatal or retryable errors.
    • The provider stream's cancel marker is no longer dropped when the event channel is full.
    • A cancelled model-judge turn no longer falls back to the default model.
    • Command hooks kill their child on timeout.
    • Agent hooks cancel their sub-turn on timeout or drop.
    • A turn cancelled between rounds stops instead of starting another round.
  • The Browserbase, GitHub plugin fetcher and CLI OAuth HTTP clients have connect and request timeouts.

Breaking:

  • SubagentControl::spawn and SubagentControl::wait take a CancellationToken.
  • HookInput has a new cancel field.

Known remaining gaps: #211.