Skip to content

Session messages

48 types. Import any of them from opencode.types.

SessionMessageAgentSelected

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

type class-attribute instance-attribute

type: Literal['agent-switched'] = 'agent-switched'

agent instance-attribute

agent: AgentID

previous class-attribute instance-attribute

previous: AgentID | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageAgentSelectedTime

created instance-attribute

created: float

SessionMessageAssistant

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

type class-attribute instance-attribute

type: Literal['assistant'] = 'assistant'

agent instance-attribute

agent: AgentID

model instance-attribute

model: ModelRef

content instance-attribute

snapshot class-attribute instance-attribute

snapshot: SessionMessageAssistantSnapshot | None = Field(
    default=None, exclude_if=is_none
)

finish class-attribute instance-attribute

finish: (
    OpenEnum[
        Literal[
            "stop",
            "length",
            "tool-calls",
            "content-filter",
            "error",
            "unknown",
        ]
    ]
    | None
) = Field(default=None, exclude_if=is_none)

raw_finish class-attribute instance-attribute

raw_finish: str | None = Field(
    default=None,
    validation_alias="rawFinish",
    serialization_alias="rawFinish",
    exclude_if=is_none,
)

native class-attribute instance-attribute

native: SessionMessageNative | None = Field(
    default=None, exclude_if=is_none
)

cost class-attribute instance-attribute

cost: MoneyUSD | None = Field(
    default=None, exclude_if=is_none
)

tokens class-attribute instance-attribute

tokens: TokenUsageInfo | None = Field(
    default=None, exclude_if=is_none
)

error class-attribute instance-attribute

error: SessionStructuredError | None = Field(
    default=None, exclude_if=is_none
)

retry class-attribute instance-attribute

retry: SessionMessageAssistantRetry | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageAssistantContent module-attribute

SessionMessageAssistantContent: TypeAlias = Annotated[
    Annotated[SessionMessageAssistantText, Tag("text")]
    | Annotated[
        SessionMessageAssistantReasoning, Tag("reasoning")
    ]
    | Annotated[SessionMessageAssistantTool, Tag("tool")]
    | Annotated[
        UnknownSessionMessageAssistantContent,
        Tag("__unknown__"),
    ],
    Discriminator(
        discriminator(
            "type", "type", ["text", "reasoning", "tool"]
        )
    ),
]

SessionMessageAssistantContentItem module-attribute

SessionMessageAssistantContentItem: TypeAlias = Annotated[
    Annotated[SessionMessageAssistantText, Tag("text")]
    | Annotated[
        SessionMessageAssistantReasoning, Tag("reasoning")
    ]
    | Annotated[SessionMessageAssistantTool, Tag("tool")]
    | Annotated[
        UnknownSessionMessageAssistantContentItem,
        Tag("__unknown__"),
    ],
    Discriminator(
        discriminator(
            "type", "type", ["text", "reasoning", "tool"]
        )
    ),
]

SessionMessageAssistantReasoning

type class-attribute instance-attribute

type: Literal['reasoning'] = 'reasoning'

text instance-attribute

text: str

native class-attribute instance-attribute

native: SessionMessageNative | None = Field(
    default=None, exclude_if=is_none
)

time class-attribute instance-attribute

time: SessionMessageAssistantReasoningTime | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageAssistantReasoningTime

created instance-attribute

created: float

completed class-attribute instance-attribute

completed: float | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageAssistantRetry

attempt instance-attribute

attempt: int

at instance-attribute

at: float

error instance-attribute

SessionMessageAssistantSnapshot

start class-attribute instance-attribute

start: SnapshotID | None = Field(
    default=None, exclude_if=is_none
)

end class-attribute instance-attribute

end: SnapshotID | None = Field(
    default=None, exclude_if=is_none
)

files class-attribute instance-attribute

files: list[RelativePath] | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageAssistantText

type class-attribute instance-attribute

type: Literal['text'] = 'text'

text instance-attribute

text: str

native class-attribute instance-attribute

native: SessionMessageNative | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageAssistantTime

created instance-attribute

created: float

streamed class-attribute instance-attribute

streamed: float | None = Field(
    default=None, exclude_if=is_none
)

completed class-attribute instance-attribute

completed: float | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageAssistantTool

type class-attribute instance-attribute

type: Literal['tool'] = 'tool'

id instance-attribute

id: str

name instance-attribute

name: str

executed class-attribute instance-attribute

executed: bool | None = Field(
    default=None, exclude_if=is_none
)

native class-attribute instance-attribute

native: SessionMessageNative | None = Field(
    default=None, exclude_if=is_none
)

state instance-attribute

time instance-attribute

SessionMessageAssistantToolState module-attribute

SessionMessageAssistantToolState: TypeAlias = Annotated[
    Annotated[
        SessionMessageToolStateStreaming, Tag("streaming")
    ]
    | Annotated[
        SessionMessageToolStateRunning, Tag("running")
    ]
    | Annotated[
        SessionMessageToolStateCompleted, Tag("completed")
    ]
    | Annotated[SessionMessageToolStateError, Tag("error")]
    | Annotated[
        UnknownSessionMessageAssistantToolState,
        Tag("__unknown__"),
    ],
    Discriminator(
        discriminator(
            "status",
            "status",
            ["streaming", "running", "completed", "error"],
        )
    ),
]

SessionMessageAssistantToolTime

created instance-attribute

created: float

ran class-attribute instance-attribute

ran: float | None = Field(default=None, exclude_if=is_none)

completed class-attribute instance-attribute

completed: float | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageCompaction module-attribute

SessionMessageCompaction: TypeAlias = Annotated[
    Annotated[
        SessionMessageCompactionRunning, Tag("running")
    ]
    | Annotated[
        SessionMessageCompactionCompleted, Tag("completed")
    ]
    | Annotated[
        SessionMessageCompactionFailed, Tag("failed")
    ]
    | Annotated[
        UnknownSessionMessageCompaction, Tag("__unknown__")
    ],
    Discriminator(
        discriminator(
            "status",
            "status",
            ["running", "completed", "failed"],
        )
    ),
]

SessionMessageCompactionCompleted

type class-attribute instance-attribute

type: Literal['compaction'] = 'compaction'

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

status class-attribute instance-attribute

status: Literal['completed'] = 'completed'

reason instance-attribute

reason: OpenEnum[Literal['auto', 'manual']]

model class-attribute instance-attribute

model: ModelRef | None = Field(
    default=None, exclude_if=is_none
)

native class-attribute instance-attribute

native: SessionMessageNative | None = Field(
    default=None, exclude_if=is_none
)

summary instance-attribute

summary: str

cost class-attribute instance-attribute

cost: MoneyUSD | None = Field(
    default=None, exclude_if=is_none
)

tokens class-attribute instance-attribute

tokens: TokenUsageInfo | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageCompactionCompletedTime

created instance-attribute

created: float

SessionMessageCompactionFailed

type class-attribute instance-attribute

type: Literal['compaction'] = 'compaction'

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

status class-attribute instance-attribute

status: Literal['failed'] = 'failed'

reason instance-attribute

reason: OpenEnum[Literal['auto', 'manual']]

error instance-attribute

cost class-attribute instance-attribute

cost: MoneyUSD | None = Field(
    default=None, exclude_if=is_none
)

tokens class-attribute instance-attribute

tokens: TokenUsageInfo | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageCompactionFailedTime

created instance-attribute

created: float

SessionMessageCompactionRunning

type class-attribute instance-attribute

type: Literal['compaction'] = 'compaction'

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

status class-attribute instance-attribute

status: Literal['running'] = 'running'

reason instance-attribute

reason: OpenEnum[Literal['auto', 'manual']]

summary instance-attribute

summary: str

SessionMessageCompactionRunningTime

created instance-attribute

created: float

SessionMessageContentUpdatedEventData

session_id class-attribute instance-attribute

session_id: SessionID = Field(
    validation_alias="sessionID",
    serialization_alias="sessionID",
)

message_id class-attribute instance-attribute

message_id: SessionMessageID = Field(
    validation_alias="messageID",
    serialization_alias="messageID",
)

content instance-attribute

SessionMessageContentUpdatedEventDurable

aggregate_id class-attribute instance-attribute

aggregate_id: str = Field(
    validation_alias="aggregateID",
    serialization_alias="aggregateID",
)

seq instance-attribute

seq: EventSeq

version class-attribute instance-attribute

version: EventVersion = 1

SessionMessageID module-attribute

SessionMessageID: TypeAlias = str

SessionMessageIdle

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

type class-attribute instance-attribute

type: Literal['idle'] = 'idle'

outcome instance-attribute

outcome: OpenEnum[
    Literal["succeeded", "failed", "interrupted"]
]

error class-attribute instance-attribute

error: SessionStructuredError | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageIdleTime

created instance-attribute

created: float

SessionMessageInfo module-attribute

SessionMessageInfo: TypeAlias = Annotated[
    Annotated[
        SessionMessageAgentSelected, Tag("agent-switched")
    ]
    | Annotated[
        SessionMessageModelSelected, Tag("model-switched")
    ]
    | Annotated[
        SessionMessageLocationSwitched,
        Tag("location-switched"),
    ]
    | Annotated[SessionMessageUser, Tag("user")]
    | Annotated[SessionMessageSynthetic, Tag("synthetic")]
    | Annotated[SessionMessageSystem, Tag("system")]
    | Annotated[SessionMessageSkill, Tag("skill")]
    | Annotated[SessionMessageShell, Tag("shell")]
    | Annotated[SessionMessageAssistant, Tag("assistant")]
    | Annotated[SessionMessageCompaction, Tag("compaction")]
    | Annotated[SessionMessageIdle, Tag("idle")]
    | Annotated[
        UnknownSessionMessageInfo, Tag("__unknown__")
    ],
    Discriminator(
        discriminator(
            "type",
            "type",
            [
                "agent-switched",
                "model-switched",
                "location-switched",
                "user",
                "synthetic",
                "system",
                "skill",
                "shell",
                "assistant",
                "compaction",
                "idle",
            ],
        )
    ),
]

SessionMessageLocationSwitched

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

type class-attribute instance-attribute

type: Literal['location-switched'] = 'location-switched'

project_id class-attribute instance-attribute

project_id: ProjectID | None = Field(
    default=None,
    validation_alias="projectID",
    serialization_alias="projectID",
    exclude_if=is_none,
)

subpath class-attribute instance-attribute

subpath: RelativePath | None = Field(
    default=None, exclude_if=is_none
)

location instance-attribute

previous class-attribute instance-attribute

previous: SessionMessageLocationSwitchedPrevious | None = (
    None
)

SessionMessageLocationSwitchedPrevious

location instance-attribute

project_id class-attribute instance-attribute

project_id: ProjectID | None = Field(
    default=None,
    validation_alias="projectID",
    serialization_alias="projectID",
    exclude_if=is_none,
)

subpath class-attribute instance-attribute

subpath: RelativePath | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageLocationSwitchedTime

created instance-attribute

created: float

SessionMessageModelSelected

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

type class-attribute instance-attribute

type: Literal['model-switched'] = 'model-switched'

model instance-attribute

model: ModelRef

previous class-attribute instance-attribute

previous: ModelRef | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageModelSelectedTime

created instance-attribute

created: float

SessionMessageNative module-attribute

SessionMessageNative: TypeAlias = dict[str, Any]

SessionMessageShell

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

type class-attribute instance-attribute

type: Literal['shell'] = 'shell'

shell_id class-attribute instance-attribute

shell_id: ShellID = Field(
    validation_alias="shellID",
    serialization_alias="shellID",
)

command instance-attribute

command: str

status instance-attribute

status: OpenEnum[
    Literal["running", "exited", "timeout", "killed"]
]

exit class-attribute instance-attribute

exit: (
    float
    | OpenEnum[Literal["Infinity", "-Infinity", "NaN"]]
    | None
) = Field(default=None, exclude_if=is_none)

output class-attribute instance-attribute

output: SessionMessageShellOutput | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageShellOutput

output instance-attribute

output: str

cursor instance-attribute

cursor: int

size instance-attribute

size: int

truncated instance-attribute

truncated: bool

SessionMessageShellTime

created instance-attribute

created: float

completed class-attribute instance-attribute

completed: float | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageSkill

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

type class-attribute instance-attribute

type: Literal['skill'] = 'skill'

skill instance-attribute

skill: SkillID

name instance-attribute

name: SkillName

text instance-attribute

text: str

SessionMessageSkillTime

created instance-attribute

created: float

SessionMessageSynthetic

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

text instance-attribute

text: str

description class-attribute instance-attribute

description: str | None = Field(
    default=None, exclude_if=is_none
)

type class-attribute instance-attribute

type: Literal['synthetic'] = 'synthetic'

SessionMessageSyntheticTime

created instance-attribute

created: float

SessionMessageSystem

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

type class-attribute instance-attribute

type: Literal['system'] = 'system'

text instance-attribute

text: str

description class-attribute instance-attribute

description: str | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageSystemTime

created instance-attribute

created: float

SessionMessageToolStateCompleted

status class-attribute instance-attribute

status: Literal['completed'] = 'completed'

input instance-attribute

input: dict[str, Any]

content instance-attribute

content: list[ToolContent]

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageToolStateError

status class-attribute instance-attribute

status: Literal['error'] = 'error'

input instance-attribute

input: dict[str, Any]

error instance-attribute

content class-attribute instance-attribute

content: list[ToolContent] | None = Field(
    default=None, exclude_if=is_none
)

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

SessionMessageToolStateRunning

status class-attribute instance-attribute

status: Literal['running'] = 'running'

input instance-attribute

input: dict[str, Any]

metadata instance-attribute

metadata: dict[str, Any]

SessionMessageToolStateStreaming

status class-attribute instance-attribute

status: Literal['streaming'] = 'streaming'

input instance-attribute

input: str

SessionMessageUser

id instance-attribute

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(
    default=None, exclude_if=is_none
)

time instance-attribute

text instance-attribute

text: str

files class-attribute instance-attribute

files: list[PromptFileAttachment] | None = Field(
    default=None, exclude_if=is_none
)

agents class-attribute instance-attribute

agents: list[PromptAgentAttachment] | None = Field(
    default=None, exclude_if=is_none
)

skills class-attribute instance-attribute

skills: list[PromptSkillAttachment] | None = Field(
    default=None, exclude_if=is_none
)

type class-attribute instance-attribute

type: Literal['user'] = 'user'

SessionMessageUserTime

created instance-attribute

created: float