Files
deepseek-harness/docs/event-producer-consumer.md
kingwl 3f663c9154 feat(modes): per-session sandbox/approval switching — the session log as the store, ACP config options
effective(session) = findLast(the session own knob events)?.value ?? the
composition-config default. One log-only event per knob, owned by its
domain (bash/sandbox-mode in dsh-bash, approval/policy in dsh-approval),
each exporting the same three-piece kit: the event declaration, a pure
fold, and THE write path — a switch IS its event; no owner service, no
facts map. Restart immunity and multi-session isolation fall out of the
log replay by construction.

Execution follows the fold on both sides: the bash tool stamps
escalation grant > session override > executor default, and the approval
seam prepends the never-gate that auto-rejects before any interactive
answerer. Visibility is two layers per knob: a per-agent prompt section
states the effective value on every request (logged through
request/header*, so what-the-model-was-told replays from the log), and an
agent/pre-step narrator injects at most one coalesced delta notice with
positional attribution (user switch vs operator/config drift). The ACP
bridge advertises one capability-gated select per composable knob with
currentValue folded per session, validates set_config_option against the
closed vocabularies, and anchors idle switches at the next turn
prompt-submit under the turn-enclosure contract.
2026-07-10 15:44:38 +08:00

8.8 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:265 agent (emit) stdio-agent
agent/disposed emit packages/core/agent/src/types.ts:272 agent (emit) stdio-agent
agent/error emit packages/core/agent/src/types.ts:476 agent-loop (emit) -
agent/pre-step serial packages/core/agent/src/types.ts:357 agent-loop (serial) approval, compact-basic
agent/prompt-submit waterfall packages/core/agent/src/types.ts:370 agent-loop (waterfall) acp, hooks-claude, hooks-codex, repeat-tool-guard
agent/queued emit packages/core/agent/src/types.ts:290 agent-loop (emit) -
agent/request waterfall packages/core/agent/src/types.ts:394 agent-loop (waterfall) -
agent/session-prefix waterfall packages/core/agent/src/types.ts:441 agent-loop (waterfall) -
agent/session-start emit packages/core/agent/src/types.ts:305 agent-loop (emit) hooks-claude, hooks-codex
agent/status emit packages/core/agent/src/types.ts:281 agent-loop (emit) acp, invariants, repeat-tool-guard, stdio-agent
agent/step-result waterfall packages/core/agent/src/types.ts:451 agent-loop (waterfall) -
agent/turn-continuation waterfall packages/core/agent/src/types.ts:464 agent-loop (waterfall) hooks-claude, hooks-codex
approval/request waterfall packages/approval/approval/src/index.ts:63 approval (waterfall) acp, approval
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:39 session (emit) invariants, session-persistence
session/event emit packages/core/session/src/index.ts:47 session (emit) acp, invariants, session-persistence, stdio-agent
session/flush parallel packages/core/session/src/index.ts:57 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:135 tools (emit) -
tools/execute waterfall packages/core/tools/src/index.ts:114 tools (waterfall) timeout-policy
tools/post-execute waterfall packages/core/tools/src/index.ts:130 tools (waterfall) hooks-claude, hooks-codex, repeat-tool-guard
tools/pre-execute waterfall packages/core/tools/src/index.ts:94 tools (waterfall) hooks-claude, hooks-codex
workflow/agent-end emit packages/workflow/workflow/src/index.ts:96 workflow (events.dispatch) -
workflow/agent-start emit packages/workflow/workflow/src/index.ts:85 workflow (events.dispatch) -
workflow/end emit packages/workflow/workflow/src/index.ts:106 workflow (events.dispatch) -
workflow/log emit packages/workflow/workflow/src/index.ts:77 workflow (events.dispatch) -
workflow/phase emit packages/workflow/workflow/src/index.ts:70 workflow (events.dispatch) -
workflow/start emit packages/workflow/workflow/src/index.ts:62 workflow (events.dispatch) -

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.