Files
deepseek-harness/docs/event-producer-consumer.md
T
Tianyi Cui 4e8dc8e8f5 docs: fail the event matrix on a zero-dispatcher row; attribute provider-removed
The chained-fused-dispatch spelling fix (0dc2fe90) was whack-a-mole: each
unrecognized dispatch spelling silently drops a producer edge from the
generated matrix, and only a human reading the table catches it. Convert the
class to a build failure: the generator now hard-errors when any DECLARED
event ends with zero dispatchers — dead vocabulary or a missed spelling,
both actionable ('teach the scan or add a DYNAMIC_EVENT_DISPATCHERS
override'). Zero LISTENERS stays legal: seven current rows (agent/request,
system-prompt/assemble, tools/change, ...) are ordinary extension points
dispatched for out-of-repo plugins.

The guard caught a real one on its first run: subagent/provider-removed
routes through the same contained events.dispatch as subagent/start|end
(it fires inside the provider registration's disposer), but the
DYNAMIC_EVENT_DISPATCHERS override list never got an entry when that
containment routing was introduced — the committed matrix (on master too)
claimed the event has NO dispatcher while tool-subagent listens for it.
Override added; matrix regenerated with the producer edge restored.
2026-07-09 12:36:18 +08:00

7.1 KiB

Event Producer And Consumer Matrix

This matrix shows which packages dispatch each harness-owned event and which packages listen to it. It is intentionally a table rather than one large graph: events are many-to-many, and dense relation data is easier to review in rows. Dynamic dispatch overrides cover sites that deliberately bypass ctx.emit, such as subagent lifecycle containment.

Event Mode Declared in Dispatchers Listeners
agent/created emit packages/core/agent/src/types.ts:286 agent (emit) stdio-agent
agent/disposed emit packages/core/agent/src/types.ts:298 agent (emit) stdio-agent
agent/error emit packages/core/agent/src/types.ts:492 agent-loop (emit) -
agent/pre-step serial packages/core/agent/src/types.ts:396 agent-loop (serial) compact-basic
agent/prompt-submit waterfall packages/core/agent/src/types.ts:414 agent-loop (waterfall) hooks-claude, hooks-codex
agent/queued emit packages/core/agent/src/types.ts:326 agent-loop (emit) -
agent/request waterfall packages/core/agent/src/types.ts:442 agent-loop (waterfall) -
agent/session-start emit packages/core/agent/src/types.ts:346 agent-loop (emit) hooks-claude, hooks-codex, invariants
agent/status emit packages/core/agent/src/types.ts:312 agent-loop (emit) acp, invariants, stdio-agent
agent/step-result waterfall packages/core/agent/src/types.ts:457 agent-loop (waterfall) -
agent/turn-continuation waterfall packages/core/agent/src/types.ts:475 agent-loop (waterfall) hooks-claude, hooks-codex
fs/edit-intent waterfall packages/fs/fs/src/index.ts:123 tool-fs (waterfall) fs-policy
fs/observed emit packages/fs/fs/src/index.ts:138 tool-fs (emit) fs-policy
fs/write-intent waterfall packages/fs/fs/src/index.ts:109 tool-fs (waterfall) fs-policy
llm/stream waterfall packages/llm/llm/src/index.ts:39 llm (waterfall) invariants, llm-replay
session/created emit packages/core/session/src/index.ts:47 session (emit) invariants, session-persistence
session/event emit packages/core/session/src/index.ts:61 session (emit) acp, invariants, session-persistence, stdio-agent
session/flush parallel packages/core/session/src/index.ts:79 session (parallel) session-persistence
subagent/end emit packages/subagent/subagent/src/index.ts:107 subagent (events.dispatch) hooks-claude
subagent/provider-added emit packages/subagent/subagent/src/index.ts:73 subagent (emit) tool-subagent
subagent/provider-removed emit packages/subagent/subagent/src/index.ts:84 subagent (events.dispatch) tool-subagent
subagent/start emit packages/subagent/subagent/src/index.ts:96 subagent (events.dispatch) hooks-claude
system-prompt/assemble waterfall packages/core/system-prompt/src/index.ts:44 system-prompt (waterfall) -
system-prompt/change emit packages/core/system-prompt/src/index.ts:54 system-prompt (emit) -
tools/change emit packages/core/tools/src/index.ts:112 tools (emit) -
tools/post-execute waterfall packages/core/tools/src/index.ts:102 tools (waterfall) hooks-claude, hooks-codex
tools/pre-execute waterfall packages/core/tools/src/index.ts:82 tools (waterfall) hooks-claude, hooks-codex

Non-harness or undeclared event strings seen in package source

Event string Dispatchers Listeners
internal/dispatch - invariants

Maintenance mode: hybrid generated: Cordis event declarations and most producer/listener edges are AST-scanned; dynamic dispatch sites are classified in scripts/gen-doc-graphs.ts.