Files
deepseek-harness/docs/event-producer-consumer.md
Tianyi Cui a8986c2c8a Merge remote-tracking branch 'origin/master' into worktree-dynamic-workflows
Beyond the mechanical conflicts (provider capability lines vs master's new
inheritsParentContext field; generated catalogs regenerated rather than
hand-merged; knip/lockfile), three master-side reworks required semantic
adaptation of this branch:

- The persona rework removed AgentOptions.systemPrompt, which was the
  structured-output instruction's channel. The instruction now rides the
  SAME final-request enforcement listener that injects the schema'd tool:
  appended per request to final.system (per-request wire state, not agent
  prompt state). Tests assert the wire request (adapter.requests) instead
  of child.options; the bare-direct-dispatch test pins the no-system arm.
- Tool guidance moved out of deployment prompts into per-tool prompt
  sections; the examples' workflow paragraph became a tool:<toolName>
  section contributed by dsh-tool-workflow (explicit-ask-only policy),
  and both example personas resolve to master's minimal identity+behavior
  form. tool-workflow gains inject: systemPrompt (+ peer dep, tsconfig
  ref); the export-shape guard updated.
- The uniform-RFC-format gate: the dynamic-workflows RFC restructured to
  the implemented/ skeleton (bare Status line; Proposal -> Decision;
  What-was-rejected -> Alternatives considered; new Consequences), and
  the overall-run-timeout deferral is now recorded in the RFC's Deferred
  list. The doc-graphs atlas classification gains the workflows seam
  (workflow-vm implementation, tool-workflow consumer).

Master's harness-identity section made "empty assembled prompt" states
unreachable through the loop, so the instruction-append is a plain
undefined-ternary and the structured tests assert append-not-replace.
All snapshot goldens (including workflow-run) replay unchanged. Full
local CI-equivalent gate sequence green on the merged tree.
2026-07-06 03:14:07 +08:00

7.6 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:248 agent (emit) stdio-agent
agent/disposed emit packages/core/agent/src/types.ts:255 agent (emit) stdio-agent
agent/error emit packages/core/agent/src/types.ts:394 agent-loop (emit) -
agent/pre-step serial packages/core/agent/src/types.ts:333 agent-loop (serial) compact-basic
agent/prompt-submit waterfall packages/core/agent/src/types.ts:346 agent-loop (waterfall) hooks-claude, hooks-codex
agent/queued emit packages/core/agent/src/types.ts:273 agent-loop (emit) -
agent/request waterfall packages/core/agent/src/types.ts:359 agent-loop (waterfall), compact-basic (waterfall) -
agent/session-start emit packages/core/agent/src/types.ts:288 agent-loop (emit) hooks-claude, hooks-codex
agent/status emit packages/core/agent/src/types.ts:264 agent-loop (emit) acp, invariants, stdio-agent
agent/step-result waterfall packages/core/agent/src/types.ts:369 agent-loop (waterfall) -
agent/turn-continuation waterfall packages/core/agent/src/types.ts:382 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:33 llm (waterfall) llm-replay
session/created emit packages/core/session/src/index.ts:36 session (emit) invariants, session-persistence
session/event emit packages/core/session/src/index.ts:44 session (emit) acp, invariants, session-persistence, stdio-agent
session/flush parallel packages/core/session/src/index.ts:54 agent-loop (parallel) session-persistence
subagent/end emit packages/subagent/subagent/src/index.ts:98 subagent (events.dispatch) hooks-claude
subagent/provider-added emit packages/subagent/subagent/src/index.ts:72 subagent (emit) tool-subagent
subagent/provider-removed emit packages/subagent/subagent/src/index.ts:83 - tool-subagent
subagent/start emit packages/subagent/subagent/src/index.ts:91 subagent (events.dispatch) hooks-claude
system-prompt/assemble waterfall packages/core/system-prompt/src/index.ts:38 system-prompt (waterfall) -
system-prompt/change emit packages/core/system-prompt/src/index.ts:44 system-prompt (emit) -
tools/change emit packages/core/tools/src/index.ts:97 tools (emit) -
tools/post-execute waterfall packages/core/tools/src/index.ts:92 tools (waterfall) hooks-claude, hooks-codex
tools/pre-execute waterfall packages/core/tools/src/index.ts:76 tools (waterfall) hooks-claude, hooks-codex
workflow/agent-end emit packages/workflow/workflow/src/index.ts:93 - -
workflow/agent-start emit packages/workflow/workflow/src/index.ts:85 - -
workflow/end emit packages/workflow/workflow/src/index.ts:103 - -
workflow/log emit packages/workflow/workflow/src/index.ts:77 - -
workflow/phase emit packages/workflow/workflow/src/index.ts:70 - -
workflow/start emit packages/workflow/workflow/src/index.ts:62 - -

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.