2026-07-05 01:25:58 +08:00
<!-- Generated by scripts/gen-doc-graphs.ts - do not edit by hand.
Run `pnpm run gen-doc-graphs` to regenerate. -->
# Event Producer And Consumer Matrix
2026-07-14 23:14:51 +08:00
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.
2026-07-05 01:25:58 +08:00
| Event | Mode | Declared in | Dispatchers | Listeners |
| --- | --- | --- | --- | --- |
2026-08-05 00:24:26 +08:00
| `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:158` ](../packages/core/agent-loop/src/index.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`events.dispatch` ) | - |
2026-08-04 14:19:07 +08:00
| `agent/created` | `emit` | [`packages/core/agent/src/types.ts:178` ](../packages/core/agent/src/types.ts ) | [`agent` ](../packages/core/agent ) (`events.dispatch` ) | [`goal-session` ](../packages/goal/goal-session ) |
| `agent/disposed` | `emit` | [`packages/core/agent/src/types.ts:187` ](../packages/core/agent/src/types.ts ) | [`agent` ](../packages/core/agent ) (`events.dispatch` ) | [`agent-loop` ](../packages/core/agent-loop ), [`goal-session` ](../packages/goal/goal-session ), [`subagent` ](../packages/subagent/subagent ) |
| `agent/error` | `emit` | [`packages/core/agent/src/types.ts:302` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`emitAgentEvent` ) | [`acp` ](../packages/acp/acp ), `apiproxy` , [`goal-session` ](../packages/goal/goal-session ), [`session-telemetry` ](../packages/telemetry/session-telemetry ) |
| `agent/inbox/claimed` | `emit` | [`packages/core/agent/src/types.ts:215` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`emitAgentEvent` ) | [`acp` ](../packages/acp/acp ), [`goal-session` ](../packages/goal/goal-session ), [`subagent` ](../packages/subagent/subagent ) |
| `agent/inbox/discarded` | `emit` | [`packages/core/agent/src/types.ts:223` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`emitAgentEvent` ) | [`goal-session` ](../packages/goal/goal-session ), [`subagent` ](../packages/subagent/subagent ) |
2026-08-03 18:06:14 +08:00
| `agent/inbox/inserted` | `emit` | [`packages/core/agent/src/types.ts:205` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`emitAgentEvent` ) | [`goal-session` ](../packages/goal/goal-session ) |
2026-08-04 14:19:07 +08:00
| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/types.ts:247` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`waterfall` ) | [`compact-basic` ](../packages/compact/compact-basic ), [`goal-session` ](../packages/goal/goal-session ), [`hooks-claude` ](../packages/hooks/hooks-claude ), [`hooks-codex` ](../packages/hooks/hooks-codex ), [`plan-mode` ](../packages/plan/plan-mode ), [`repeat-tool-guard` ](../packages/guard/repeat-tool-guard ), [`session-checkpoint-policy` ](../packages/session-persistence/session-checkpoint-policy ), [`subagent-inprocess` ](../packages/subagent/subagent-inprocess ), [`time-context` ](../packages/context/time-context ), [`tmux-context` ](../packages/context/tmux-context ), [`tool-skill` ](../packages/skill/tool-skill ), [`workspace-context` ](../packages/context/workspace-context ) |
2026-08-04 13:49:35 +08:00
| `agent/request` | `waterfall` | [`packages/core/agent/src/types.ts:260` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`waterfall` ) | [`agent` ](../packages/core/agent ) |
| `agent/request-error` | `waterfall` | [`packages/core/agent/src/types.ts:272` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`waterfall` ) | [`compact-basic` ](../packages/compact/compact-basic ), [`llm-retry` ](../packages/llm/llm-retry ) |
| `agent/session-start` | `emit` | [`packages/core/agent/src/types.ts:235` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`emitAgentEvent` ) | [`goal` ](../packages/goal/goal ), [`goal-session` ](../packages/goal/goal-session ), [`hooks-claude` ](../packages/hooks/hooks-claude ), [`hooks-codex` ](../packages/hooks/hooks-codex ) |
2026-08-04 14:19:07 +08:00
| `agent/status` | `emit` | [`packages/core/agent/src/types.ts:197` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`emitAgentEvent` ) | [`agent` ](../packages/core/agent ), `apiproxy` , [`compact-basic` ](../packages/compact/compact-basic ), [`goal-session` ](../packages/goal/goal-session ), [`jsonrpc` ](../packages/ui/jsonrpc ) |
2026-08-04 13:49:35 +08:00
| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/types.ts:290` ](../packages/core/agent/src/types.ts ) | [`agent-loop` ](../packages/core/agent-loop ) (`serial` ) | [`hooks-claude` ](../packages/hooks/hooks-claude ), [`hooks-codex` ](../packages/hooks/hooks-codex ) |
2026-07-28 23:55:00 +08:00
| `approval/request` | `waterfall` | [`packages/ui/user-approval/src/index.ts:30` ](../packages/ui/user-approval/src/index.ts ) | [`user-approval` ](../packages/ui/user-approval ) (`waterfall` ) | [`acp` ](../packages/acp/acp ), `apiproxy` |
2026-08-04 10:07:17 +08:00
| `commands/change` | `emit` | [`packages/ui/commands/src/index.ts:154` ](../packages/ui/commands/src/index.ts ) | [`commands` ](../packages/ui/commands ) (`events.dispatch` ) | `apiproxy` |
2026-07-30 17:22:44 +08:00
| `credentials/updated` | `emit` | [`packages/credentials/credentials/src/index.ts:67` ](../packages/credentials/credentials/src/index.ts ) | [`credentials` ](../packages/credentials/credentials ) (`events.dispatch` ) | `apiproxy` , [`credentials` ](../packages/credentials/credentials ) |
2026-07-25 16:04:48 +08:00
| `domain/changed` | `emit` | [`packages/storage/storage-domain/src/events.ts:46` ](../packages/storage/storage-domain/src/events.ts ) | [`storage-domain` ](../packages/storage/storage-domain ) (`emit` ) | `apiproxy` , [`storage-domain` ](../packages/storage/storage-domain ), [`workspace` ](../packages/workspace/workspace ) |
2026-07-29 15:21:56 +08:00
| `fs/edit-intent` | `waterfall` | [`packages/fs/fs/src/index.ts:62` ](../packages/fs/fs/src/index.ts ) | [`tool-fs` ](../packages/fs/tool-fs ) (`waterfall` ), [`tool-str-replace-editor` ](../packages/fs/tool-str-replace-editor ) (`waterfall` ) | [`fs-policy` ](../packages/fs/fs-policy ) |
2026-07-30 15:19:27 +08:00
| `fs/observed` | `emit` | [`packages/fs/fs/src/index.ts:71` ](../packages/fs/fs/src/index.ts ) | [`tool-fs` ](../packages/fs/tool-fs ) (`emit` ), [`tool-str-replace-editor` ](../packages/fs/tool-str-replace-editor ) (`emit` ) | [`fs-policy` ](../packages/fs/fs-policy ), [`skill-local` ](../packages/skill/skill-local ) |
2026-07-29 15:21:56 +08:00
| `fs/write-intent` | `waterfall` | [`packages/fs/fs/src/index.ts:54` ](../packages/fs/fs/src/index.ts ) | [`tool-fs` ](../packages/fs/tool-fs ) (`waterfall` ), [`tool-str-replace-editor` ](../packages/fs/tool-str-replace-editor ) (`waterfall` ) | [`fs-policy` ](../packages/fs/fs-policy ) |
2026-08-03 12:25:33 +08:00
| `goal/changed` | `emit` | [`packages/goal/goal/src/domain.ts:141` ](../packages/goal/goal/src/domain.ts ) | [`goal` ](../packages/goal/goal ) (`emit` ) | [`goal-session` ](../packages/goal/goal-session ) |
2026-08-04 14:19:07 +08:00
| `llm/adapters-updated` | `emit` | [`packages/llm/llm/src/index.ts:69` ](../packages/llm/llm/src/index.ts ) | [`llm` ](../packages/llm/llm ) (`events.dispatch` ) | `apiproxy` , [`llm` ](../packages/llm/llm ) |
2026-08-03 12:25:33 +08:00
| `llm/stream` | `waterfall` | [`packages/llm/llm/src/index.ts:58` ](../packages/llm/llm/src/index.ts ) | [`llm` ](../packages/llm/llm ) (`waterfall` ) | [`agent-loop` ](../packages/core/agent-loop ), [`llm` ](../packages/llm/llm ), [`llm-replay` ](../packages/support/llm-replay ), [`session-checkpoint-policy` ](../packages/session-persistence/session-checkpoint-policy ), [`session-title` ](../packages/session-title/session-title ) |
2026-08-04 14:29:18 +08:00
| `session/created` | `emit` | [`packages/core/session/src/index.ts:71` ](../packages/core/session/src/index.ts ) | [`session` ](../packages/core/session ) (`events.dispatch` ) | `apiproxy` , [`compact` ](../packages/compact/compact ), [`goal` ](../packages/goal/goal ), [`hook-protocol` ](../packages/hooks/hook-protocol ), [`jsonrpc` ](../packages/ui/jsonrpc ), [`llm-retry` ](../packages/llm/llm-retry ), [`permission` ](../packages/ui/permission ), [`plan-mode` ](../packages/plan/plan-mode ), [`session` ](../packages/core/session ), [`session-persistence` ](../packages/session-persistence/session-persistence ), [`session-telemetry` ](../packages/telemetry/session-telemetry ), [`tools` ](../packages/core/tools ), [`user-approval` ](../packages/ui/user-approval ) |
| `session/disposed` | `emit` | [`packages/core/session/src/index.ts:81` ](../packages/core/session/src/index.ts ) | [`session` ](../packages/core/session ) (`events.dispatch` ) | [`agent-loop` ](../packages/core/agent-loop ), `apiproxy` , [`session-persistence` ](../packages/session-persistence/session-persistence ), [`session-projection-cache` ](../packages/session-projection/session-projection-cache ), [`session-telemetry` ](../packages/telemetry/session-telemetry ), [`session-title` ](../packages/session-title/session-title ) |
| `session/event` | `emit` | [`packages/core/session/src/index.ts:93` ](../packages/core/session/src/index.ts ) | [`session` ](../packages/core/session ) (`events.dispatch` ) | [`acp` ](../packages/acp/acp ), [`agent-loop` ](../packages/core/agent-loop ), `apiproxy` , [`cli-demo` ](../packages/examples/cli-demo ), [`compact` ](../packages/compact/compact ), [`compact-basic` ](../packages/compact/compact-basic ), [`goal` ](../packages/goal/goal ), [`goal-session` ](../packages/goal/goal-session ), [`hook-protocol` ](../packages/hooks/hook-protocol ), [`jsonrpc` ](../packages/ui/jsonrpc ), [`session` ](../packages/core/session ), [`session-persistence` ](../packages/session-persistence/session-persistence ), [`session-projection` ](../packages/session-projection/session-projection ), [`session-projection-cache` ](../packages/session-projection/session-projection-cache ), [`session-telemetry` ](../packages/telemetry/session-telemetry ), [`session-title` ](../packages/session-title/session-title ), [`token-meter` ](../packages/llm/token-meter ), [`tools` ](../packages/core/tools ), [`user-approval` ](../packages/ui/user-approval ) |
| `session/flush` | `parallel` | [`packages/core/session/src/index.ts:102` ](../packages/core/session/src/index.ts ) | [`session` ](../packages/core/session ) (`events.dispatch` ) | [`session-persistence` ](../packages/session-persistence/session-persistence ), [`session-telemetry` ](../packages/telemetry/session-telemetry ) |
2026-07-30 19:24:21 +08:00
| `settings/document-updated` | `emit` | [`packages/settings/settings/src/index.ts:150` ](../packages/settings/settings/src/index.ts ) | [`settings` ](../packages/settings/settings ) (`events.dispatch` ) | `apiproxy` |
| `settings/updated` | `emit` | [`packages/settings/settings/src/index.ts:137` ](../packages/settings/settings/src/index.ts ) | [`settings` ](../packages/settings/settings ) (`events.dispatch` ) | [`settings` ](../packages/settings/settings ) |
2026-08-04 10:07:17 +08:00
| `skills/change` | `emit` | [`packages/skill/skill/src/index.ts:188` ](../packages/skill/skill/src/index.ts ) | [`skill` ](../packages/skill/skill ) (`events.dispatch` ) | - |
2026-08-02 23:31:24 +08:00
| `subagent/end` | `emit` | [`packages/subagent/subagent/src/index.ts:160` ](../packages/subagent/subagent/src/index.ts ) | [`subagent` ](../packages/subagent/subagent ) (`events.dispatch` ) | [`hooks-claude` ](../packages/hooks/hooks-claude ), [`jsonrpc` ](../packages/ui/jsonrpc ), [`subagent` ](../packages/subagent/subagent ) |
| `subagent/provider-added` | `emit` | [`packages/subagent/subagent/src/index.ts:134` ](../packages/subagent/subagent/src/index.ts ) | [`subagent` ](../packages/subagent/subagent ) (`emit` ) | [`subagent` ](../packages/subagent/subagent ), [`tool-subagent` ](../packages/subagent/tool-subagent ) |
| `subagent/provider-removed` | `emit` | [`packages/subagent/subagent/src/index.ts:140` ](../packages/subagent/subagent/src/index.ts ) | [`subagent` ](../packages/subagent/subagent ) (`events.dispatch` ) | [`subagent` ](../packages/subagent/subagent ), [`tool-subagent` ](../packages/subagent/tool-subagent ) |
| `subagent/start` | `emit` | [`packages/subagent/subagent/src/index.ts:151` ](../packages/subagent/subagent/src/index.ts ) | [`subagent` ](../packages/subagent/subagent ) (`events.dispatch` ) | [`hooks-claude` ](../packages/hooks/hooks-claude ), [`subagent` ](../packages/subagent/subagent ) |
2026-07-21 20:03:00 +08:00
| `system-prompt/assemble` | `waterfall` | [`packages/core/system-prompt/src/index.ts:29` ](../packages/core/system-prompt/src/index.ts ) | [`system-prompt` ](../packages/core/system-prompt ) (`waterfall` ) | [`agent` ](../packages/core/agent ), [`system-prompt` ](../packages/core/system-prompt ) |
2026-07-16 18:12:34 +08:00
| `system-prompt/change` | `emit` | [`packages/core/system-prompt/src/index.ts:35` ](../packages/core/system-prompt/src/index.ts ) | [`system-prompt` ](../packages/core/system-prompt ) (`emit` ) | - |
2026-07-27 21:30:28 +08:00
| `telemetry/record` | `waterfall` | [`packages/telemetry/session-telemetry/src/index.ts:41` ](../packages/telemetry/session-telemetry/src/index.ts ) | [`session-telemetry` ](../packages/telemetry/session-telemetry ) (`waterfall` ) | - |
2026-08-03 12:25:33 +08:00
| `tools/change` | `emit` | [`packages/core/tools/src/index.ts:167` ](../packages/core/tools/src/index.ts ) | [`tools` ](../packages/core/tools ) (`emit` ) | - |
| `tools/code-dispatch-log` | `waterfall` | [`packages/core/tools/src/index.ts:149` ](../packages/core/tools/src/index.ts ) | [`tools` ](../packages/core/tools ) (`waterfall` ) | [`spill-policy` ](../packages/spill/spill-policy ) |
| `tools/execute` | `waterfall` | [`packages/core/tools/src/index.ts:124` ](../packages/core/tools/src/index.ts ) | [`tools` ](../packages/core/tools ) (`waterfall` ) | [`session-checkpoint-policy` ](../packages/session-persistence/session-checkpoint-policy ), [`timeout-policy` ](../packages/timeout/timeout-policy ) |
| `tools/post-execute` | `waterfall` | [`packages/core/tools/src/index.ts:136` ](../packages/core/tools/src/index.ts ) | [`tools` ](../packages/core/tools ) (`waterfall` ) | [`hooks-claude` ](../packages/hooks/hooks-claude ), [`hooks-codex` ](../packages/hooks/hooks-codex ), [`repeat-tool-guard` ](../packages/guard/repeat-tool-guard ), [`spill-policy` ](../packages/spill/spill-policy ), [`tool-fs-search` ](../packages/fs/tool-fs-search ) |
| `tools/pre-execute` | `waterfall` | [`packages/core/tools/src/index.ts:113` ](../packages/core/tools/src/index.ts ) | [`tools` ](../packages/core/tools ) (`waterfall` ) | [`hooks-claude` ](../packages/hooks/hooks-claude ), [`hooks-codex` ](../packages/hooks/hooks-codex ), [`tool-tasks` ](../packages/tasks/tool-tasks ) |
| `tools/result` | `emit` | [`packages/core/tools/src/index.ts:157` ](../packages/core/tools/src/index.ts ) | [`tools` ](../packages/core/tools ) (`events.dispatch` ) | [`subagent-inprocess` ](../packages/subagent/subagent-inprocess ), [`workspace-context` ](../packages/context/workspace-context ) |
2026-07-20 19:55:46 +08:00
| `workflow/agent-end` | `emit` | [`packages/workflow/workflow/src/index.ts:81` ](../packages/workflow/workflow/src/index.ts ) | [`workflow` ](../packages/workflow/workflow ) (`events.dispatch` ) | [`workflow` ](../packages/workflow/workflow ) |
| `workflow/agent-start` | `emit` | [`packages/workflow/workflow/src/index.ts:70` ](../packages/workflow/workflow/src/index.ts ) | [`workflow` ](../packages/workflow/workflow ) (`events.dispatch` ) | [`workflow` ](../packages/workflow/workflow ) |
| `workflow/end` | `emit` | [`packages/workflow/workflow/src/index.ts:91` ](../packages/workflow/workflow/src/index.ts ) | [`workflow` ](../packages/workflow/workflow ) (`events.dispatch` ) | [`workflow` ](../packages/workflow/workflow ) |
2026-07-13 16:24:32 +08:00
| `workflow/log` | `emit` | [`packages/workflow/workflow/src/index.ts:60` ](../packages/workflow/workflow/src/index.ts ) | [`workflow` ](../packages/workflow/workflow ) (`events.dispatch` ) | - |
| `workflow/phase` | `emit` | [`packages/workflow/workflow/src/index.ts:53` ](../packages/workflow/workflow/src/index.ts ) | [`workflow` ](../packages/workflow/workflow ) (`events.dispatch` ) | - |
2026-07-20 19:55:46 +08:00
| `workflow/start` | `emit` | [`packages/workflow/workflow/src/index.ts:45` ](../packages/workflow/workflow/src/index.ts ) | [`workflow` ](../packages/workflow/workflow ) (`events.dispatch` ) | [`workflow` ](../packages/workflow/workflow ) |
2026-07-05 02:54:01 +08:00
2026-07-09 02:18:39 +08:00
## Non-harness or undeclared event strings seen in package source
| Event string | Dispatchers | Listeners |
| --- | --- | --- |
2026-07-28 23:55:00 +08:00
| `commands/changed` | `runtime` (`emit` ) | `ui-command` |
2026-08-03 12:25:33 +08:00
| `connection/reset` | `runtime` (`emit` ) | `ui-command` , `ui-models` , `ui-permission` , `ui-settings-general` |
2026-07-30 10:53:39 +08:00
| `credentials/changed` | `runtime` (`emit` ) | `ui-models` |
2026-07-29 20:20:27 +08:00
| `internal/dispatch` | - | [`commands` ](../packages/ui/commands ), [`compact` ](../packages/compact/compact ), [`fs` ](../packages/fs/fs ), [`goal` ](../packages/goal/goal ), [`goal-session` ](../packages/goal/goal-session ), [`hook-protocol` ](../packages/hooks/hook-protocol ), [`llm-retry` ](../packages/llm/llm-retry ), [`permission` ](../packages/ui/permission ), [`plan-mode` ](../packages/plan/plan-mode ), [`pty-local` ](../packages/pty/pty-local ), `runtime` , [`sandbox-policy` ](../packages/sandbox/sandbox-policy ), [`scope` ](../packages/core/scope ), [`session` ](../packages/core/session ), [`session-title` ](../packages/session-title/session-title ), [`subagent` ](../packages/subagent/subagent ), [`time-context` ](../packages/context/time-context ), [`tool-todo` ](../packages/todo/tool-todo ), [`tools` ](../packages/core/tools ), [`user-approval` ](../packages/ui/user-approval ), [`workflow` ](../packages/workflow/workflow ) |
2026-07-28 23:48:35 +08:00
| `internal/plugin` | - | `hmr` , `loader` , `modules` , `webserver` |
2026-07-19 15:12:18 +08:00
| `internal/status` | - | [`agent` ](../packages/core/agent ) |
2026-07-31 02:01:22 +08:00
| `locale/change` | `locale` (`emit` ) | `locale` |
2026-07-30 10:53:39 +08:00
| `models/changed` | `runtime` (`emit` ) | `ui-models` |
2026-08-03 12:25:33 +08:00
| `settings/changed` | `runtime` (`emit` ) | `ui-models` , `ui-permission` , `ui-settings-general` |
2026-07-28 23:48:35 +08:00
| `slash/input-begin-command` | - | `ui-conversation` |
| `slash/input-consume-token` | - | `ui-conversation` |
| `slash/input-insert-reference` | - | `ui-conversation` |
| `slash/input-insert-text` | - | `ui-conversation` |
2026-07-19 21:17:57 +08:00
| `slots/changed` | `runtime` (`emit` ) | - |
2026-07-26 02:54:29 +08:00
| `theme/change` | `ui-theme` (`emit` ) | `ui-layout` , `ui-theme` |
2026-07-05 02:54:01 +08:00
2026-07-14 23:14:51 +08:00
Maintenance mode: generated: Cordis event declarations and producer/listener edges are resolved from the repository TypeScript Program.