Skip to content

Audit Copilot SDK events with agentId for subagent-safe handling #326710

Description

@roblourens

Context

Copilot SDK session event envelopes can carry an optional agentId when emitted for a subagent. We hardened user.message handling so subagent messages do not mutate root steering/event-ID state or emit root-only instruction telemetry, and replay restores them in the subagent transcript.

The SDK exposes agentId across its event union. Audit the remaining Agent Host consumers for root-only assumptions and either route, ignore, or explicitly document each subagent event.

Events to review

Highest-risk state-mutating consumers:

  • system.notification: currently creates or appends root turns in live handling and replay.
  • session.idle: currently completes or aborts the root turn.
  • session.error: currently emits a root chat error.
  • session.auto_mode_resolved: currently updates root model and usage state.
  • assistant.intent: currently updates root session activity.
  • session.model_change: currently affects root replay model selection.
  • assistant.usage: an unmapped subagent event can currently fall back to root usage.
  • MCP server, tool, and command inventory events: currently treated as session-global; verify whether subagent-scoped variants should be ignored or projected globally.

Logging-only and memo-invalidation listeners do not need guards unless their behavior gains stateful side effects.

Acceptance criteria

  • Classify every consumed SDK event that may carry agentId as session-global, root-only, or subagent-routed.
  • Add explicit guards or routing for root-only and subagent-scoped behavior.
  • Drop and warn for unmapped subagent events where ordering/correlation is required.
  • Keep live handling and persisted-history replay behavior consistent.
  • Add focused regression tests for each state-mutating path changed.

(Written by Copilot)

Metadata

Metadata

Assignees

Labels

agent-hostIssues for the agent-host implementation (not the protocol)bugIssue identified by VS Code Team member as probable bug

Type

No type

Fields

No fields configured for issues without a type.

Projects

Status
No status

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions