#[non_exhaustive]pub enum Event {
Show 22 variants
RunStarted {Show 15 fields
schema: u32,
basis: String,
session_id: String,
workspace: PathBuf,
model: String,
provider: String,
context_files: Vec<ContextFile>,
skills_dirs: Vec<PathBuf>,
skills: Vec<SkillSummary>,
templates_dirs: Vec<PathBuf>,
templates: Vec<TemplateSummary>,
mcp_files: Vec<ContextFile>,
mcp_servers: Vec<String>,
a2a_files: Vec<ContextFile>,
a2a_agents: Vec<String>,
},
UserMessage {
text: String,
image_count: usize,
},
AssistantDelta {
text: String,
},
AssistantReasoningDelta {
text: String,
},
AssistantMessage {
text: String,
},
ToolQueued {
tool_call_id: String,
tool_name: String,
summary: String,
mutability: Mutability,
input: Value,
},
ToolStarted {
tool_call_id: String,
tool_name: String,
},
ToolProgress {
tool_call_id: String,
tool_name: String,
progress: String,
},
ToolCompleted {
tool_call_id: String,
tool_name: String,
summary: String,
is_error: bool,
},
PermissionRequested {
request_id: String,
tool_call_id: String,
tool_name: String,
description: String,
preview: Value,
},
PermissionResolved {
request_id: String,
tool_call_id: String,
tool_name: String,
outcome: PermissionOutcome,
rule_scope: Option<RuleScope>,
},
TaskUpdated {
task_id: String,
kind: TaskKind,
status: TaskStatus,
title: String,
detail: Option<String>,
},
CompactionStarted {
agent_id: String,
},
CompactionCompleted {
agent_id: String,
replaced_items: usize,
preserved_items: usize,
transcript_len: usize,
extracted_facts: usize,
summary_preview: String,
},
RequestToolResultsElided {
agent_id: String,
policy: RequestToolResultElisionPolicy,
canonical_tool_result_content_bytes: usize,
projected_tool_result_content_bytes: usize,
results: Vec<ElidedToolResult>,
},
MemoryUpdated {
agent_id: String,
stored_records: usize,
},
Usage {
agent_id: String,
input_tokens: u64,
output_tokens: u64,
cache_read_tokens: u64,
cache_creation_tokens: u64,
reasoning_tokens: u64,
thoughts_tokens: u64,
},
Notice {
severity: NoticeSeverity,
message: String,
},
Retry {
agent_id: String,
error: String,
attempt: u32,
max_attempts: u32,
next_delay_ms: u64,
},
Error {
message: String,
recoverable: bool,
},
Branched {
entry_id: String,
abandoned_entries: usize,
},
RunFinished {
outcome: RunOutcome,
stopped_by: Option<Bound>,
usage: Option<RunUsage>,
},
}Expand description
Everything that can appear on the stream.
RunStarted and RunFinished are basis’s own bookends; the rest are
normalized from mentra’s SessionEvent.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
RunStarted
Always the first line. Carries the schema version.
Fields
context_files: Vec<ContextFile>Context files discovered for this run, weakest precedence first.
skills_dirs: Vec<PathBuf>Skills directories in effect, most specific first. Omitted rather than empty so a stream without skills stays quiet about them.
skills: Vec<SkillSummary>The skills those directories produced, after layering — what the model can actually load by name.
templates: Vec<TemplateSummary>The templates those directories produced, after layering — what a client can offer as commands.
mcp_files: Vec<ContextFile>MCP configuration files in effect, weakest precedence first.
Named for the same reason context files are, and more urgently: an
.mcp.json says which programs to spawn and carries the
credentials to spawn them with, so it is the last thing that should
take effect without appearing anywhere.
mcp_servers: Vec<String>The servers those files produced, after layering. Names only —
commands, arguments, and environment stay out of the stream, which
is the same no-echo rule McpError follows.
a2a_files: Vec<ContextFile>A2A configuration files in effect (.basis/a2a.json, the global
a2a.json), named for mcp_files’ reason: such a file says which
remote agents may be handed this repository’s work, and with which
credential. As of the turn this header opens: the set is live
(ADR-0031), so a later turn of the same session may name others.
Additive and omitted when empty, so a schema-2 reader written before the field existed reads a stream that has it, and a stream written before it existed reads as naming none — no version bump.
UserMessage
Fields
AssistantDelta
AssistantReasoningDelta
AssistantMessage
ToolQueued
Fields
mutability: MutabilityToolStarted
ToolProgress
ToolCompleted
PermissionRequested
Fields
PermissionResolved
Fields
outcome: PermissionOutcomeTaskUpdated
CompactionStarted
CompactionCompleted
Fields
RequestToolResultsElided
Tool-result bodies were reduced only in one provider-request projection.
This is distinct from canonical compaction: the stored transcript stays unchanged, and the event carries byte counts and actions but no body snippets.
Fields
policy: RequestToolResultElisionPolicycanonical_tool_result_content_bytes: usizeSum across every canonical tool-result body in the request.
projected_tool_result_content_bytes: usizeSum across every projected tool-result body, including markers.
results: Vec<ElidedToolResult>Changed results in request order.
MemoryUpdated
Usage
Fields
Notice
Fields
severity: NoticeSeverityDefaulted on read — leniency for the reader only, the writer always states it: journals written before 0.6.0 hold the CLI’s synthetic notices with no severity at all, and the message is the part a person needs.
Retry
Error
Branched
The session returned to an earlier entry; later turns continue from there along a different path.
Fields
RunFinished
Always the last line.
Fields
outcome: RunOutcomestopped_by: Option<Bound>The bound that ended the run, when one did — the same fact the
CLI’s exit 3 carries, for a consumer reading the stream instead
of the exit code. Absent, not null, on an unbounded finish, so a
schema-1 consumer that never heard of it reads the line unchanged.
usage: Option<RunUsage>What the run reported spending, summed over its rounds — the same
figure RunReport::usage carries in-process,
for the consumers that only ever see the stream.
It rides the finish line because a total is only a total once the
run is over; the per-round Event::Usage reports are still there
for anyone metering as it goes. basis ships no price table — that
is the host’s, and prices change — so this is the last basis-side
fact between a run and a bill.
Absent, not zero, when the producer stated nothing: an old stream
and a run that cost nothing are different claims, and only one of
them is worth acting on. Optional and additive, so
EVENT_SCHEMA_VERSION does not move for it.
Implementations§
Source§impl Event
impl Event
Sourcepub fn from_session_event(event: &SessionEvent) -> Option<Self>
pub fn from_session_event(event: &SessionEvent) -> Option<Self>
Normalizes a mentra session event, or None when basis’s stream already
carries the information some other way.
Sourcepub fn type_tag(&self) -> &'static str
pub fn type_tag(&self) -> &'static str
The wire tag #[serde(tag = "type")] writes for this variant, without
serializing anything to ask.
Same-crate, exhaustive, no wildcard — deliberately, and always
compiled: a variant landing on this enum fails this match first, which
is the tripwire that forces the sibling crates’ wildcard arms
(basis-acp/src/update.rs, the CLI renderer’s progress_line) to be
revisited before the new variant can be silently eaten.