The categories are named after what a reader sees, not after any agent tool's log format: an agent tool reaches this model through an adapter, so the same three rows render a conversation whichever tool produced it.
at is optional because not every source timestamps every row.
final case class Activity(at: Option[Moment], label: String, detail: Option[String])
Anything else the session shows: a tool the agent ran, its result, the agent's reasoning, a command the person invoked. label names the activity in a few words; detail carries the longer body a reader can expand, when there is one.
Anything else the session shows: a tool the agent ran, its result, the agent's reasoning, a command the person invoked. label names the activity in a few words; detail carries the longer body a reader can expand, when there is one.
Attributes
final case class AgentMessage(at: Option[Moment], text: String)
What the agent said back.
What the agent said back.
Attributes
final case class UserMessage(at: Option[Moment], text: String)