pub enum AgentStreamChunkKindV1 {
Text {
text: String,
is_delta: bool,
},
Thinking {
text: String,
},
InteractionPrompt {
correlation_id: String,
interaction_kind: ProviderInteractionKind,
tool_name: String,
title: Option<String>,
prompt: String,
options: Vec<AgentStreamInteractionOptionV1>,
},
ModeCatalog {
current: Option<String>,
available: Vec<AgentStreamNamedIdV1>,
},
ConfigOptions {
options: Vec<ProviderConfigOption>,
},
ModelCatalog {
current: Option<String>,
available: Vec<AgentStreamNamedIdV1>,
},
Blocked {
correlation_id: Option<String>,
tool_class: String,
authority: BlockAuthorityV1,
reason_kind: Option<String>,
reason: String,
help: Option<String>,
},
}Expand description
The kind of a single AgentStreamChunkV1 – content the operator needs
to act on a running ACP session: what the agent is saying, a pending
interaction it needs answered, and the catalogs the three ACP setter
verbs (SetSessionMode, SetSessionConfigOption, SetSessionModel)
operate over. Mirrors gate4agent_types::ProviderEvent’s content
variants deliberately – see
docs/gate4agent/plans/gate4agent-acp-control-plane-on-the-wire-2026-09-02.md
§3-4.
Variants§
Text
Thinking
InteractionPrompt
The correlation_id correlation::interaction_correlation mints for
the interaction – the same id a client deriving telemetry from
NodeEvent::Control computes – plus the question and option list
NodeRequest::ResolveInteraction answers blind without.
ModeCatalog
ConfigOptions
Mirrors gate4agent_types::ProviderConfigOption verbatim rather
than inventing a second shape for the same content.
Fields
options: Vec<ProviderConfigOption>ModelCatalog
Blocked
An action a provider or the host refused, with who refused it
(authority), why (reason_kind/reason) and what to do about it
(help). BlockAuthorityV1’s doc comment explains why authority is
never guessed. An EVENT, not state: a session that reconnects
mid-block does not get this replayed to it – the same seeded-state-
vs-unreplayed-event split the agent stream already draws for Text/
Thinking/InteractionPrompt.