Files
deepseek-harness/docs/event-producer-consumer.md
imccyu 37f34af15f fix(plan): gate the immediate commit on the open-turn fold, not agent status
The TUI keyless smoke exposed the wrong idle signal: /plan submitted while
the driver is between turns still saw status running (checkpointing), so
the selection queued and the immediate copy never appeared. The commit
gate is now the log's own open-turn fold — plan/mode commits at once
whenever no turn is open, and queues only inside one. Specs drive the
distinction through explicit turn/start / turn/end events instead of a
fake status; the keyless smoke pins the new idle copy on both /plan and
/plan off; regenerated cordis/service catalogs ride along.
2026-07-29 00:46:56 +08:00

17 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. Receiver and event-name types also cover contained dispatch sites that deliberately bypass ctx.emit, such as subagent lifecycle containment.

Event Mode Declared in Dispatchers Listeners
agent-loop/config-start-failed emit packages/core/agent-loop/src/index.ts:148 agent-loop (events.dispatch) tui
agent/cancel-requested emit packages/core/agent/src/types.ts:286 agent-loop (emitAgentEvent) goal-session
agent/created emit packages/core/agent/src/types.ts:218 agent (events.dispatch) goal-session, tui
agent/disposed emit packages/core/agent/src/types.ts:227 agent (events.dispatch) agent-loop, goal-session, tui
agent/error emit packages/core/agent/src/types.ts:400 agent-loop (emitAgentEvent) apiproxy, goal-session, session-telemetry, tui
agent/inbox/dequeue emit packages/core/agent/src/types.ts:259 agent-loop (emitAgentEvent) agent, apiproxy, tui
agent/inbox/discard emit packages/core/agent/src/types.ts:276 agent-loop (emitAgentEvent) agent, apiproxy, tui
agent/inbox/enqueue emit packages/core/agent/src/types.ts:247 agent-loop (emitAgentEvent) agent, apiproxy, goal-session
agent/prompt-submit waterfall packages/core/agent/src/types.ts:313 agent-loop (waterfall) goal-session, hooks-claude, hooks-codex, repeat-tool-guard, tui
agent/request waterfall packages/core/agent/src/types.ts:339 agent-loop (waterfall) agent
agent/request-error waterfall packages/core/agent/src/types.ts:358 agent-loop (waterfall) compact-basic, llm-retry
agent/session-start emit packages/core/agent/src/types.ts:299 agent-loop (emitAgentEvent) goal, goal-session, hooks-claude, hooks-codex, workspace-context
agent/settled emit packages/core/agent/src/types.ts:387 agent-loop (emitAgentEvent) compact-basic
agent/status emit packages/core/agent/src/types.ts:236 agent-loop (emitAgentEvent) agent, apiproxy, goal-session, tui
agent/step serial packages/core/agent/src/types.ts:326 agent-loop (serial) compact-basic, plan-mode, session-checkpoint-policy, time-context, tool-skill, user-approval, workspace-context
agent/turn-stopping serial packages/core/agent/src/types.ts:373 agent-loop (serial) hooks-claude, hooks-codex
approval/request waterfall packages/ui/user-approval/src/index.ts:30 user-approval (waterfall) acp
commands/change emit packages/ui/commands/src/index.ts:154 commands (events.dispatch) apiproxy, tui
domain/changed emit packages/storage/storage-domain/src/events.ts:46 storage-domain (emit) apiproxy, storage-domain, workspace
fs/edit-intent waterfall packages/fs/fs/src/index.ts:62 tool-fs (waterfall) fs-policy
fs/observed emit packages/fs/fs/src/index.ts:71 tool-fs (emit) fs-policy
fs/write-intent waterfall packages/fs/fs/src/index.ts:54 tool-fs (waterfall) fs-policy
goal/changed emit packages/goal/goal/src/types.ts:169 goal (emit) goal-session
llm/stream waterfall packages/llm/llm/src/index.ts:58 llm (waterfall) agent-loop, llm, llm-replay, session-checkpoint-policy, session-title
session/created emit packages/core/session/src/index.ts:71 session (events.dispatch) apiproxy, compact, goal, hook-protocol, jsonrpc, llm-retry, plan-mode, session, session-persistence, session-telemetry, tools, user-approval
session/disposed emit packages/core/session/src/index.ts:81 session (events.dispatch) agent-loop, apiproxy, session-persistence, session-telemetry, session-title
session/event emit packages/core/session/src/index.ts:93 session (events.dispatch) acp, apiproxy, cli-demo, compact, compact-basic, goal, goal-session, hook-protocol, jsonrpc, session, session-persistence, session-projection, session-telemetry, session-title, token-meter, tools, tui, user-approval, workspace-context
session/flush parallel packages/core/session/src/index.ts:103 session (events.dispatch) session-persistence, session-telemetry
slash/input-begin-command bail packages/client/ui-slash/src/types.ts:230 - ui-conversation
slash/input-consume-token bail packages/client/ui-slash/src/types.ts:244 - ui-conversation
slash/input-insert-reference bail packages/client/ui-slash/src/types.ts:237 - ui-conversation
slash/input-insert-text bail packages/client/ui-slash/src/types.ts:252 - ui-conversation
subagent/end emit packages/subagent/subagent/src/index.ts:140 subagent (events.dispatch) hooks-claude, jsonrpc, subagent
subagent/provider-added emit packages/subagent/subagent/src/index.ts:114 subagent (emit) subagent, tool-subagent
subagent/provider-removed emit packages/subagent/subagent/src/index.ts:120 subagent (events.dispatch) subagent, tool-subagent
subagent/start emit packages/subagent/subagent/src/index.ts:131 subagent (events.dispatch) hooks-claude, subagent
system-prompt/assemble waterfall packages/core/system-prompt/src/index.ts:29 system-prompt (waterfall) agent, system-prompt
system-prompt/change emit packages/core/system-prompt/src/index.ts:35 system-prompt (emit) -
telemetry/record waterfall packages/telemetry/session-telemetry/src/index.ts:41 session-telemetry (waterfall) -
tools/change emit packages/core/tools/src/index.ts:156 tools (emit) -
tools/code-dispatch-log waterfall packages/core/tools/src/index.ts:138 tools (waterfall) spill-policy
tools/execute waterfall packages/core/tools/src/index.ts:113 tools (waterfall) session-checkpoint-policy, timeout-policy
tools/post-execute waterfall packages/core/tools/src/index.ts:125 tools (waterfall) hooks-claude, hooks-codex, repeat-tool-guard, spill-policy, tool-fs-search, workspace-context
tools/pre-execute waterfall packages/core/tools/src/index.ts:102 tools (waterfall) hooks-claude, hooks-codex, tool-tasks
tools/result emit packages/core/tools/src/index.ts:146 tools (events.dispatch) subagent-inprocess, workspace-context
workflow/agent-end emit packages/workflow/workflow/src/index.ts:81 workflow (events.dispatch) workflow
workflow/agent-start emit packages/workflow/workflow/src/index.ts:70 workflow (events.dispatch) workflow
workflow/end emit packages/workflow/workflow/src/index.ts:91 workflow (events.dispatch) workflow
workflow/log emit packages/workflow/workflow/src/index.ts:60 workflow (events.dispatch) -
workflow/phase emit packages/workflow/workflow/src/index.ts:53 workflow (events.dispatch) -
workflow/start emit packages/workflow/workflow/src/index.ts:45 workflow (events.dispatch) workflow

Non-harness or undeclared event strings seen in package source

Event string Dispatchers Listeners
commands/changed runtime (emit) -
connection/reset runtime (emit) -
internal/dispatch - commands, compact, fs, goal, goal-session, hook-protocol, llm-retry, permission, plan-mode, pty-local, runtime, sandbox-policy, scope, session, subagent, time-context, tool-todo, tools, user-approval, workflow
internal/plugin - hmr, modules, webserver
internal/status - agent
locale/change locale (emit) locale, ui-models, ui-settings-general
slots/changed runtime (emit) -
theme/change ui-theme (emit) ui-layout, ui-theme

Maintenance mode: generated: Cordis event declarations and producer/listener edges are resolved from the repository TypeScript Program.