Skip to content

v0.161.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 23:52
· 29 commits to main since this release
3249c8f

[0.161.0] - 2026-09-08

Added

  • A durable delegation ledger — the record of who handed what work to whom (#3378).
    Three systems already described the fleet and none recorded the edge that carried the
    work: orgChart draws the capability graph and persists nothing, turn telemetry has no
    actor column and no edge (attribution is only "which instance's DB the row landed in"),
    and the in-flight delegation registry is an in-memory dict of cancel handles. So an
    operator could see how much an agent spent and who it could have delegated to, but
    never what actually flowed along which edge. A new per-instance ledger.db records one
    row per delegation — from-agent, target kind/name/instance, what was asked, outcome,
    duration, and cost where it is genuinely known — joinable to turns on
    task_id/session_id.
  • Written through one seam, wired to every dispatch funnel (#3378).
    graph/ledger.py::record_delegation is the single writer, mirroring
    record_turn: a new dispatch surface routes through it or its edge goes unrecorded.
    All three existing funnels are wired — in-process subagents (task, task_batch, SDK),
    every external delegate (and therefore delegate_to, the coder ladder and the board
    loop), and background subagent jobs. That third one matters: a background job never
    passes through the in-process funnel — it is fired as a self-directed A2A turn — which
    is the same shape of blind spot that made CLI coding-agent runs invisible to turn
    telemetry for months (#3015). Plugins reach the same seam via sdk.record_delegation.
  • An unknown cost is stored as NULL, never as zero (#3378).
    Only some paths carry a real number. A confident 0 would make an unmeasured coder look
    free and silently understate every rollup built on the column, so the aggregate also
    reports how many rows were actually priced. Subagent edges deliberately record no cost
    at all: that spend is already billed to the parent turn's telemetry, and storing it here
    too would double-count the same work against itself.

Full Changelog: v0.160.0...v0.161.0