Files
deepseek-harness/docs/event-producer-consumer.md
kingwl 99650a201b feat(mode): the access cap — plan mode composes with the sandbox instead of banning bash
A ModeDefinition may declare access: the widest sandbox access shell
commands run under while the mode holds, on the SANDBOX_MODES ladder.
The bash seam gains the resolution point to hang it on: BashExecutor.
resolveMode(session) folds override ?? default and dispatches the new
bash/resolve-mode waterfall; dsh-tool-bash consults it at both the
stamping site and the escalation baseline; dsh-mode's clamp listener
takes the ladder minimum per call. Two independent log folds compose at
read time — the mode never writes the sandbox knob, so the two switch
in any order and the knob re-emerges intact on exit.

The built-in plan definition ships access: read-only with the bash trio
allowlisted CONDITIONALLY: both policy layers admit bash/bash_output/
bash_kill only while a confining executor is mounted (an unconfinable
shell cannot honor the cap), and a bash call carrying sandbox_permissions
under a cap is denied at the gate — no widening mid-mode; the widened
step belongs in the plan.

examples/plan-acp-agent swaps bash-local for sandbox-local +
bash-sandbox (workspace-write default, clamped read-only inside plan)
plus the approval seam; the re-recorded plan-mode arc runs a real cat
inside plan under the clamped sandbox, and modes-advertise now pins the
sandbox-mode and approval config options. RFC amended to the landed
shape (access cap section, orthogonality FAQ, deferred item resolved
into effects self-declaration).
2026-07-12 22:51:09 +08:00

9.5 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) mode, 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) compact-basic, user-approval
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) tool-skill
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/ui/user-approval/src/index.ts:64 user-approval (waterfall) acp
bash/resolve-mode waterfall packages/bash/bash/src/index.ts:57 bash (waterfall) mode
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, mode, session-persistence, stdio-agent
session/flush parallel packages/core/session/src/index.ts:57 agent-loop (parallel) session-persistence
skill/provider-added emit packages/skill/skill/src/index.ts:130 skill (emit) -
skill/provider-removed emit packages/skill/skill/src/index.ts:136 skill (emit) -
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) mode
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, mode
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.