eb1638a84e
CI / lint (push) Waiting to run
CI / typecheck (push) Waiting to run
CI / security (push) Waiting to run
CI / quality (push) Waiting to run
CI / unit_tests (push) Waiting to run
CI / integration_tests (push) Waiting to run
CI / coverage (push) Blocked by required conditions
CI / build (push) Waiting to run
CI / docker (push) Blocked by required conditions
CI / lint (pull_request) Successful in 15s
CI / typecheck (pull_request) Successful in 27s
CI / security (pull_request) Successful in 21s
CI / quality (pull_request) Successful in 15s
CI / integration_tests (pull_request) Successful in 4m14s
CI / build (pull_request) Successful in 15s
CI / unit_tests (pull_request) Successful in 8m46s
CI / coverage (pull_request) Successful in 6m43s
CI / docker (pull_request) Successful in 38s
5.2 KiB
5.2 KiB
Session Domain Model
A Session is a persistent conversation thread tied to an orchestrator actor.
It maintains message history across plans and serves as the user's
natural-language interface.
MessageRole
| Value | Description |
|---|---|
user |
Human input |
assistant |
AI/agent response |
system |
System-level instructions |
tool |
Tool invocation result |
SessionMessage
Each message within a session:
| Field | Type | Default | Description |
|---|---|---|---|
message_id |
str |
(required) | Unique ULID identifier |
role |
MessageRole |
(required) | Role of the message sender |
content |
str |
(required) | Message content (min 1 char, no whitespace-only) |
sequence |
int |
(required) | Ordering index within the session (>= 0) |
timestamp |
datetime |
datetime.now() |
When the message was created |
metadata |
dict[str, Any] |
{} |
Optional metadata |
tool_call_id |
str | None |
None |
Required when role is tool |
Constraints:
contentmust not be whitespace-onlytool_call_idis required whenroleistool
SessionTokenUsage
Accumulated token usage for a session:
| Field | Type | Default | Description |
|---|---|---|---|
input_tokens |
int |
0 |
Total input tokens consumed |
output_tokens |
int |
0 |
Total output tokens generated |
estimated_cost |
float |
0.0 |
Estimated total cost (USD) |
All fields must be >= 0.
Session Fields
| Field | Type | Default | Description |
|---|---|---|---|
session_id |
str |
(required) | Unique ULID identifier |
actor_name |
str | None |
None |
Namespaced actor reference |
namespace |
str |
"local" |
Namespace for ownership |
messages |
list[SessionMessage] |
[] |
Ordered messages |
linked_plan_ids |
list[str] |
[] |
ULID references to linked plans |
automation_level |
str | None |
None |
Session-level automation override |
token_usage |
SessionTokenUsage |
SessionTokenUsage() |
Accumulated token usage |
created_at |
datetime |
datetime.now() |
Creation timestamp |
updated_at |
datetime |
datetime.now() |
Last modification timestamp |
metadata |
dict[str, Any] |
{} |
Arbitrary session metadata |
Constraints:
session_idmust match ULID format (^[0-9A-HJKMNP-TV-Z]{26}$)actor_nameif provided must matchnamespace/namepatternmessagesmust be ordered bysequence
Properties
session.message_count-- Number of messagessession.last_message-- Most recent message (or None)session.is_empty-- True if no messages
Methods
session.append_message(role, content, metadata=None, tool_call_id=None)-- Append a message with auto-generated ULID and sequencesession.get_messages(limit=None, offset=0)-- Paginated message retrievalsession.link_plan(plan_id)-- Link a plan (deduplicated)session.as_cli_dict()-- Stable ordered dict for CLI renderingsession.as_export_dict()-- JSON-serializable dict with checksum
CLI Dict Output
The as_cli_dict() output matches agents session show:
session_id,actor_name,namespace,message_countcreated_at,updated_at,automation_levelrecent_messages(last 5),linked_plan_idstoken_usage(input/output/cost),metadata
Export Dict
The as_export_dict() output includes:
schema_version,session_id,actor_name,namespacemessages(full history),linked_plan_idsautomation_level,token_usage,metadatacreated_at,updated_at,checksum(SHA-256)
Error Types
| Error | Base | Description |
|---|---|---|
SessionServiceError |
Exception |
Base error for session operations |
SessionNotFoundError |
SessionServiceError |
Session ID not found |
SessionExportError |
SessionServiceError |
Export failures |
SessionImportError |
SessionServiceError |
Import failures (schema, corrupt) |