vtcode-exec-events
September 5, 2026 · View on GitHub
Root AGENTS.md | Authoritative ThreadEvent contract. All runtime events flow through this crate.
Key Types
ThreadEvent enum — the single event type (serde-tagged) | VersionedThreadEvent wrapper with schema version | EventEmitter trait | Usage token accounting | ThreadItem + ThreadItemDetails item taxonomy | EVENT_SCHEMA_VERSION semver string
ThreadEvent Variants
thread.started | thread.completed | thread.compact_boundary | context.reset | turn.started | turn.completed | turn.failed | turn.blocked | item.started | item.updated | item.completed | plan.delta | plan.approval.requested | plan.approval.resolved | error
Rules
- Do not invent parallel event types. Extend
ThreadEventandThreadItemDetailsenums. EVENT_SCHEMA_VERSIONmust be bumped when the serialized contract changes.EventEmittertrait has a blanketFnMut(&ThreadEvent)impl.- Feature-gated emitters:
telemetry-log(LogEmitter),telemetry-tracing(TracingEmitter),schema-export(JSON Schema),serde-json(JSON helpers). atif/module exports ATIF (Agent Trace Interchange Format).trace/module implements Agent Trace spec for AI code attribution.- Keep
ThreadEventcompact: large sparse payloads must beBoxed (seethread_event_stays_compactsize-guard test; ≤80 bytes).Box<T>is serde/schema transparent.
Gotchas
vtcode-core::exec::eventsre-exports these types — consumers should use that path, not depend on this crate directly.- Plan approval state is represented by
PlanApprovalRequestedEventandPlanApprovalResolvedEvent; keepPlanApprovalDecisionstable because it is consumed by headless clients and Open Responses adapters. Bounded failure explanations use the existingReasoningItemwith stage"diagnosis"; do not add a parallel event variant. HarnessEventItemusesHarnessEventKindenum — adding variants requires schema version bump.- Schema
0.12.0adds blocked-handoff resolution metadata; keep legacy payloads readable and ATIF output stable. - Schema
0.14.0addsSessionToolLimitIncreasedandToolLoopLimitIncreasedharness kinds for same-turn limit grants; schema0.13.0addedturn.blockedplusTurnBlocked/BlockedRecoveryStarted/BlockedRecoveryFinished, emitted alongsideturn.failedwith fuse counters for UI subscribers.