Files
deepseek-harness/docs/event-producer-consumer.md
imccyu ea8b1178cd feat(web): session list one-list, hover card, row menus, rename, manual ordering
Sidebar session list grows the figma 239-10458 feature set and the
workspace/session browsing region moves wholesale into ui-workspace:

- Group-by menu (WorkSpace / In one list): flat mode lists every session
  top-level, strictly newest-first; the choice persists across reloads.
- Session rows get a 500ms hover detail card (title / relative time /
  status line) and a ... menu (Rename / Fork session / Delete session,
  visual-only for now); workspace headers get ... with Rename (wired) and
  Delete workspace (visual-only).
- workspace.rename RPC: trims, rejects duplicate titles on the create
  chain (workspace-name-conflict), no-op on same title; modal dialog with
  client-side duplicate pre-check.
- workspace.insertSessionBefore RPC (DOM-insertBefore semantics, omitted
  anchor appends): HTML5 drag reorder of root sessions inside a workspace
  group; order truth stays host-side, the view refreshes from the
  response/changed frame.
- Activity pinning removed: the session/event touchSession chain is gone;
  workspace accounts are manually owned (new sessions prepend, explicit
  reordering only). Contracts and tests updated, api catalog regenerated.
- ui-sidebar reduced to the column shell (brand, fold state machine, New
  Session, Settings) exposing one sidebar.workspaces hole with a two-fact
  owner share {wide, expandSidebar}; ui-workspace owns the whole region
  (header, search, grouped/flat lists, dialogs, drag) plus the picker via
  a shared WorkspaceCreateFlow. The old sidebar.workspace picker slot and
  its deferral indirection are gone.
- ui-primitives: Menu gains label entries, danger rows, and
  closeOnPointerLeave; new HoverCard (portaled, open-delay, disabled
  guard). Hover card and row menu never coexist.
2026-07-26 00:55:17 +08:00

15 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:353 agent-loop (events.dispatch) tui
agent/cancel-requested emit packages/core/agent/src/types.ts:350 agent-loop (emit) goal-session
agent/created emit packages/core/agent/src/types.ts:285 agent (events.dispatch) goal-session, tui
agent/disposed emit packages/core/agent/src/types.ts:294 agent (events.dispatch) agent-loop, goal-session, tui
agent/error emit packages/core/agent/src/types.ts:498 agent-loop (emit) apiproxy, goal-session, tui
agent/inbox/dequeue emit packages/core/agent/src/types.ts:326 agent-loop (emit) agent
agent/inbox/discard emit packages/core/agent/src/types.ts:340 agent-loop (emit) agent
agent/inbox/enqueue emit packages/core/agent/src/types.ts:316 agent-loop (emit) agent, goal-session, tui
agent/post-step serial packages/core/agent/src/types.ts:448 agent-loop (serial) compact-basic, session-checkpoint-policy
agent/pre-step serial packages/core/agent/src/types.ts:379 agent-loop (serial) time-context, user-approval
agent/prompt-submit waterfall packages/core/agent/src/types.ts:395 agent-loop (waterfall) goal-session, hooks-claude, hooks-codex, plan-mode, repeat-tool-guard
agent/request waterfall packages/core/agent/src/types.ts:409 agent-loop (waterfall) agent
agent/request-error waterfall packages/core/agent/src/types.ts:463 agent-loop (waterfall) compact-basic, llm-retry, plan-mode
agent/session-prefix waterfall packages/core/agent/src/types.ts:424 agent-loop (waterfall) tool-skill, workspace-context
agent/session-start emit packages/core/agent/src/types.ts:363 agent-loop (emit) goal, goal-session, hooks-claude, hooks-codex
agent/status emit packages/core/agent/src/types.ts:303 agent-loop (emit) agent, apiproxy, goal-session, tui
agent/step-result waterfall packages/core/agent/src/types.ts:436 agent-loop (waterfall) -
agent/turn-continuation waterfall packages/core/agent/src/types.ts:474 agent-loop (waterfall) hooks-claude, hooks-codex, plan-mode
agent/turn-stop serial packages/core/agent/src/types.ts:485 agent-loop (serial) subagent-inprocess, tool-goal
approval/request waterfall packages/ui/user-approval/src/index.ts:30 user-approval (waterfall) acp
commands/change emit packages/ui/commands/src/index.ts:103 commands (events.dispatch) 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:167 goal (emit) goal-session
llm/stream waterfall packages/llm/llm/src/index.ts:52 llm (waterfall) agent-loop, llm, llm-replay, session-checkpoint-policy, session-title
session/created emit packages/core/session/src/index.ts:79 session (events.dispatch) apiproxy, compact, goal, hook-protocol, jsonrpc, llm-retry, session, session-persistence, user-approval
session/disposed emit packages/core/session/src/index.ts:89 session (events.dispatch) agent-loop, apiproxy, session-persistence, session-title
session/event emit packages/core/session/src/index.ts:101 session (events.dispatch) acp, apiproxy, cli-demo, compact, goal, goal-session, hook-protocol, jsonrpc, session, session-persistence, session-title, token-meter, tui, user-approval, workspace-context
session/flush parallel packages/core/session/src/index.ts:111 session (events.dispatch) session-persistence
subagent/end emit packages/subagent/subagent/src/index.ts:139 subagent (events.dispatch) hooks-claude, jsonrpc, subagent
subagent/provider-added emit packages/subagent/subagent/src/index.ts:113 subagent (emit) subagent, tool-subagent
subagent/provider-removed emit packages/subagent/subagent/src/index.ts:119 subagent (events.dispatch) subagent, tool-subagent
subagent/start emit packages/subagent/subagent/src/index.ts:130 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) -
tools/change emit packages/core/tools/src/index.ts:143 tools (emit) -
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:133 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
internal/dispatch - 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
slots/changed runtime (emit) -

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