ChatConversation
One back-and-forth chat thread. Polymorphic via (subject_type, subject_id) so it can attach to an AI session, an approval, a future website chat-bot conversation, etc.
type ChatConversation {
id: ID!
subject_type: String
subject_id: ID
external_session_id: String
title: String
created_at: DateTime!
updated_at: DateTime
messages: [ChatMessage!]!
participants: [ChatParticipant!]!
agent_plan: AgentPlan
agent_plans: [AgentPlan!]!
}
Fields
ChatConversation.id ● ID! non-null scalar
ChatConversation.subject_type ● String scalar
ChatConversation.subject_id ● ID scalar
ChatConversation.external_session_id ● String scalar
ChatConversation.title ● String scalar
ChatConversation.created_at ● DateTime! non-null scalar
ChatConversation.updated_at ● DateTime scalar
ChatConversation.messages ● [ChatMessage!]! non-null object
ChatConversation.participants ● [ChatParticipant!]! non-null object
ChatConversation.agent_plan ● AgentPlan union
The conversation's top-level AgentPlan (parent_plan_id IS NULL).
Returns null when no agent has begun building a plan for this thread.
Sub-plans are reachable via Query.agentPlan(id) using the
*_plan_id pointers nested inside slot values, or — for batch
inspection — via the full agent_plans list.
ChatConversation.agent_plans ● [AgentPlan!]! non-null union
Every AgentPlan owned by this conversation, top-level + sub-plans.
Returned By
chatConversation query ● chatConversationByExternalSessionId query


