Skip to content

session

FieldValue
Prefixsession
Namespace constantSessionNamespace
Subjects constantSessionSubjects
Kindbus
Schema recordSessionSchemas
Tierframework
Package@makaio/contracts
Defined inpackages/contracts/src/session/namespace.ts
KeyWireTypeSchema
abandonsession.abandonrpclifecycle-events.ts
abandonedsession.abandonedeventlifecycle-events.ts
agent.addedsession.agent.addedeventevents.ts
agent.attachsession.agent.attachrpcorchestrator.ts
agent.removedsession.agent.removedeventevents.ts
archivesession.archiverpccrud.ts
archivedsession.archivedeventevents.ts
branch.createdsession.branch.createdeventlifecycle-events.ts
branch.mergedsession.branch.mergedeventlifecycle-events.ts
childCompletedsession.childCompletedeventlifecycle-events.ts
clientAccount.changedsession.clientAccount.changedeventevents.ts
closesession.closerpccrud.ts
closedsession.closedeventevents.ts
compresssession.compressrpclifecycle-events.ts
compressedsession.compressedeventevents.ts
compressionRequestedsession.compressionRequestedeventlifecycle-events.ts
connectorSwap.editRequestedsession.connectorSwap.editRequestedeventevents.ts
createsession.createrpccrud.ts
createdsession.createdeventlifecycle-events.ts
enrichContextsession.enrichContextrpcenrichment.ts
eventsession.eventeventevent.ts
forksession.forkrpcorchestrator.ts
forkedsession.forkedeventlifecycle-events.ts
forkingsession.forkingeventlifecycle-events.ts
getsession.getrpccrud.ts
getByAdapterSessionIdsession.getByAdapterSessionIdrpccrud.ts
getChildrensession.getChildrenrpclifecycle-events.ts
getContextWindowStatesession.getContextWindowStaterpcevents.ts
getStatusCountssession.getStatusCountsrpccrud.ts
listsession.listrpccrud.ts
mergesession.mergerpclifecycle-events.ts
mergedsession.mergedeventlifecycle-events.ts
mergingsession.mergingeventlifecycle-events.ts
purgesession.purgerpccrud.ts
purgedsession.purgedeventevents.ts
resolveAgentConfigsession.resolveAgentConfigrpcresolve-agent-config.ts
resolveSystemPromptsession.resolveSystemPromptrpcresolve-system-prompt.ts
resumesession.resumerpccrud.ts
resumedsession.resumedeventevents.ts
searchsession.searchrpccrud.ts
sendMessagesession.sendMessagerpcorchestrator.ts
snapshot.exportsession.snapshot.exportrpcsnapshot.ts
snapshot.importsession.snapshot.importrpcsnapshot.ts
snapshot.validatesession.snapshot.validaterpcsnapshot.ts
squashsession.squasheventlifecycle-events.ts
turn.completedsession.turn.completedeventorchestrator.ts
turn.startedsession.turn.startedeventorchestrator.ts
updatesession.updaterpccrud.ts
updatedsession.updatedeventlifecycle-events.ts
usagesession.usagerpcorchestrator.ts
user_message.acknowledgedsession.user_message.acknowledgedeventorchestrator.ts
user_message.completedsession.user_message.completedeventorchestrator.ts
user_message.sentsession.user_message.senteventorchestrator.ts

Abandon a child session without merging. Subject: session.abandon Type: Request (RPC)

Request:

FieldTypeRequired
childSessionIdstringyes
extensionIdstring | undefinedno
parentSessionIdstringyes
source"user" | "system" | "extension" | undefinedno

Response:

FieldTypeRequired
successbooleanyes

Emitted when session is abandoned. Subject: session.abandoned

Type: Event

FieldTypeRequired
parentSessionIdstring | undefinedno
sessionIdstringyes

Agent added to session event.

Subject: session.agent.added Type: Event (fire-and-forget) Emitted when: An agent is attached to a session

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
cwdstring | undefinedno
modelstring | undefinedno
role"lead" | "member" | undefinedno
sessionIdstringyes

Explicitly attach an agent to a session.

Subject: session.agent.attach Type: Request (RPC)

Unlike auto-attach via sendMessage, this RPC provides explicit control over:

  • Agent role (lead vs member)
  • Attaching without sending a message

For branching conversations (fork), use session.fork to create a new session with copied history, then attach agents to the new session.

Use this for multi-agent scenarios or when you need to pre-attach agents before sending messages.

Request:

FieldTypeRequired
agent{ [x: string]: unknown; kind: string; providerConfigId?: string | undefined; model?: string | undefined; reasoningEffort?: "none" | "low" | "medium" | "high" | "extra-high" | undefined; cwd?: string | undefined; systemPrompt?: string | { mode: "append"; content: string; } | undefined; allowedTools?: string[] | undefined; disallowedTools?: string[] | undefined; allowedDirectories?: string[] | undefined; }yes
initialMessagestring | { blocks: { type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; } | ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; role?: "user" | "assistant" | "system" | undefined; } | undefinedno
role"lead" | "member" | undefinedno
sessionIdstringyes

Response:

FieldTypeRequired
adapterSessionIdstringyes
agentIdstringyes
messageIdstring | undefinedno
role"lead" | "member"yes
turnIdstring | undefinedno

Agent removed from session event.

Subject: session.agent.removed Type: Event (fire-and-forget) Emitted when: An agent is detached/removed from a session

FieldTypeRequired
agentIdstringyes
sessionIdstringyes

Archive a closed session.

Subject: session.archive Type: Request (RPC)

Request:

FieldTypeRequired
sessionIdstringyes

Response:

FieldTypeRequired
successbooleanyes

Session archived event.

Subject: session.archived Type: Event (fire-and-forget) Emitted when: A closed session is archived

FieldTypeRequired
sessionIdstringyes

Branch created event (for storage/persistence via SessionLogger). Subject: session.branch.created Type: Event (fire-and-forget)

Emitted by fork handler. SessionLogger subscribes and persists with transform applied (e.g., PII redaction).

FieldTypeRequired
childSessionIdstringyes
forkPointMessageIdstring | undefinedno
kind"fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside"yes
parentSessionIdstringyes
sessionIdstringyes
transforms{ removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefinedno

Branch merged event (for storage/persistence via SessionLogger). Subject: session.branch.merged Type: Event (fire-and-forget)

Emitted by merge handler. SessionLogger subscribes and persists with transform applied.

FieldTypeRequired
childSessionIdstringyes
parentSessionIdstringyes
resultJsonstring | undefinedno
resultMessageIdstring | undefinedno
sessionIdstringyes

Emitted when a child session completes. Subject: session.childCompleted

Type: Event

FieldTypeRequired
childSessionIdstringyes
parentSessionIdstringyes
resultunknownyes

Session client-account linkage changed event.

Subject: session.clientAccount.changed Type: Event (fire-and-forget) Emitted when: A session resolves to a different canonical client account

FieldTypeRequired
clientAccountIdstringyes
clientIdstringyes
lastClientIdentityObservation{ clientId: string; source: string; kind: string; observedAt: number; payload: Record<string, unknown>; }yes
observedAtnumberyes
previousClientAccountIdstring | nullyes
sessionIdstringyes
sourcestringyes

Close an existing session.

Subject: session.close Type: Request (RPC)

Closing a session marks it as inactive but retains session data and events for potential resume. Use purge to permanently delete all data.

Request:

FieldTypeRequired
sessionIdstringyes

Response:

FieldTypeRequired
successbooleanyes

Session closed event.

Subject: session.closed Type: Event (fire-and-forget) Emitted when: A session is closed (via close request)

FieldTypeRequired
reasonstring | undefinedno
sessionIdstringyes

Compress session context via pipeline. Subject: session.compress Type: Request (RPC)

Request:

FieldTypeRequired
pipeline{ actionId: string; options?: Record<string, unknown> | undefined; }[]yes
sessionIdstringyes

Response:

FieldTypeRequired
contextJsonRecord<string, unknown>yes
eventIdstringyes
tokensAfternumber | undefinedno
tokensBeforenumberyes

Session compressed event.

Subject: session.compressed Type: Event (fire-and-forget) Emitted when: A session’s context is compressed (via compress request)

Used to notify components (like ContextWindowTracker) that context state should be cleared since compression resets the context window.

FieldTypeRequired
eventIdstringyes
sessionIdstringyes

Compression requested for a session. Subject: session.compressionRequested

Type: Event

FieldTypeRequired
extensionIdstring | undefinedno
reasonstringyes
sessionIdstringyes
source"user" | "system" | "extension" | undefinedno

session.connectorSwap.editRequested (event)

Section titled “session.connectorSwap.editRequested (event)”

Request UI to open history editing flow after a connector swap decision.

Subject: session.connectorSwap.editRequested Type: Event (fire-and-forget)

FieldTypeRequired
agentIdstringyes
newCwdstring | undefinedno
newModelstring | undefinedno
previousCwdstring | undefinedno
previousModelstring | undefinedno
sessionIdstringyes

Create a new makaio session.

Subject: session.create Type: Request (RPC)

Request:

FieldTypeRequired
branchKind"fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | undefinedno
executionTargetIdstring | undefinedno
forkPointMessageIdstring | undefinedno
forkTransforms{ removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefinedno
originWindowIdstring | undefinedno
parentSessionIdstring | undefinedno
sessionIdstring | undefinedno
spawningToolCallIdstring | undefinedno
targetWorkingDirectorystring | undefinedno
titlestring | undefinedno

Response:

FieldTypeRequired
sessionIdstringyes

Session created event (for storage/persistence via SessionLogger). Subject: session.created Type: Event (fire-and-forget)

Emitted when a new session is created. SessionLogger subscribes and persists with transform applied.

FieldTypeRequired
branchKind"fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | nullyes
createdAtnumberyes
originWindowIdstring | undefinedno
parentSessionIdstring | nullyes
sessionIdstringyes

Enrich session hook context with optional host-owned fields.

Subject: session.enrichContext Type: Request (RPC, optional)

Framework code calls bus.requestOptional(SessionSubjects.enrichContext, { sessionId }) inside fetchSessionEnrichment. Host registers a handler that returns arbitrary key/value context extensions (e.g., project, worktree). When no handler is registered, requestOptional returns { handled: false } and the hook context carries only framework-owned fields.

Host adds TypeScript visibility via declaration merging on SessionHookContext in @makaio/hooks.

Request:

FieldTypeRequired
sessionIdstringyes

Catch-all session event for observability and persistence.

Subject: session.event Type: Event (fire-and-forget) Use for: Single subscription to all session events, event storage

FieldTypeRequired
eventIdstringyes
payloadRecord<string, unknown> | { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentIds: string[]; initiator?: { source: "user" | "system" | "extension"; sourceId?: string | undefined; } | undefined; } | { sessionId: string; turnId: string; turnNumber: number; success: boolean; error?: string | undefined; initiator?: { source: "user" | "system" | "extension"; sourceId?: string | undefined; } | undefined; } | { sessionId: string; turnId: string; turnNumber: number; messageId: string; content: string | { blocks: { type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; } | ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; role?: "user" | "assistant" | "system" | undefined; }; agentIds: string[]; source?: "user" | "system" | "extension" | undefined; origin?: "text" | "voice" | "compact" | undefined; } | { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentId: string; } | { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentId: string; outcome: "error" | "completed" | "superseded" | "merged" | "cancelled" | "rejected"; supersededBy?: string | undefined; mergedInto?: string | undefined; error?: string | undefined; } | { sessionId: string; adapterSessionId: string; agentId: string; adapterId: string; adapterName: string; role?: "lead" | "member" | undefined; model?: string | undefined; cwd?: string | undefined; } | { messageId: string; turnId: string | null; role: "user" | "assistant"; } | { childSessionId: string; parentSessionId: string; kind: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside"; forkPointMessageId?: string | undefined; } | { childSessionId: string; parentSessionId: string; resultJson?: string | undefined; resultMessageId?: string | undefined; } | { summaryJson: string; tokensBefore?: number | undefined; tokensAfter?: number | undefined; compressedMessageIds?: string[] | undefined; }yes
sessionIdstringyes
timestampnumberyes
typestringyes

Fork a session to create a branch point in conversation history.

Subject: session.fork Type: Request (RPC)

Creates a new session that references the parent via parentSessionId and forkPointMessageId. NO message copying occurs - full conversation is assembled via getFullConversation() which traverses the parent chain.

The forked session starts with no agents - use agent.attach to add agents.

Request:

FieldTypeRequired
branchKind"fork" | "branch" | "aside" | undefinedno
existingSessionIdstring | undefinedno
fromMessageIdstring | undefinedno
namestring | undefinedno
sourceSessionIdstringyes
targetWorkingDirectorystring | undefinedno
transforms{ removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefinedno

Response:

FieldTypeRequired
sessionIdstringyes

Emitted after fork completes. Subject: session.forked

Type: Event

FieldTypeRequired
childSessionIdstringyes
forkPointstring | undefinedno
parentSessionIdstringyes

Emitted when fork is about to happen. Subject: session.forking

Type: Event

FieldTypeRequired
childSessionIdstringyes
parentSessionIdstringyes
reasonstringyes

Get a specific session by ID.

Subject: session.get Type: Request (RPC)

Request:

FieldTypeRequired
sessionIdstringyes

Response:

FieldTypeRequired
session{ sessionId: string; createdAt: number; lastActivityAt: number; agents: { agentId: string; adapterId: string; adapterName: string; sessionId: string; role: "lead" | "member"; status: "active" | "idle" | "dead" | "disposed"; createdAt: number; lastActivityAt: number; adapterSessionId?: string | undefined; model?: string | undefined; cwd?: string | undefined; providerConfigId?: string | undefined; personaId?: string | undefined; profileId?: string | undefined; harnessId?: string | undefined; clientId?: string | undefined; compressionMode?: "auto" | "manual" | "off" | undefined; }[]; status: "discovered" | "active" | "closed" | "archived"; leadAgentId?: string | undefined; parentSessionId?: string | undefined; rootSessionId?: string | undefined; forkPointMessageId?: string | undefined; branchKind?: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | undefined; adapterName?: string | undefined; adapterSessionId?: string | undefined; adapterId?: string | undefined; clientId?: string | undefined; clientAccountId?: string | undefined; lastClientIdentityObservation?: { clientId: string; source: string; kind: string; observedAt: number; payload: Record<string, unknown>; } | undefined; isOrchestrated?: boolean | undefined; title?: string | undefined; summary?: string | undefined; summaryUpdatedAt?: number | undefined; isImported?: boolean | undefined; forkTransforms?: { removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefined; targetWorkingDirectory?: string | undefined; executionTargetId?: string | undefined; spawningToolCallId?: string | undefined; approvalPolicyOverride?: "reject" | "always-ask" | "full-access" | null | undefined; } | nullyes

Get a session by its adapter session ID.

Subject: session.getByAdapterSessionId Type: Request (RPC)

Used by log import to check if a session already exists for a given external session identifier (e.g., Claude Code session ID).

Request:

FieldTypeRequired
adapterSessionIdstringyes

Response:

FieldTypeRequired
session{ sessionId: string; createdAt: number; lastActivityAt: number; agents: { agentId: string; adapterId: string; adapterName: string; sessionId: string; role: "lead" | "member"; status: "active" | "idle" | "dead" | "disposed"; createdAt: number; lastActivityAt: number; adapterSessionId?: string | undefined; model?: string | undefined; cwd?: string | undefined; providerConfigId?: string | undefined; personaId?: string | undefined; profileId?: string | undefined; harnessId?: string | undefined; clientId?: string | undefined; compressionMode?: "auto" | "manual" | "off" | undefined; }[]; status: "discovered" | "active" | "closed" | "archived"; leadAgentId?: string | undefined; parentSessionId?: string | undefined; rootSessionId?: string | undefined; forkPointMessageId?: string | undefined; branchKind?: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | undefined; adapterName?: string | undefined; adapterSessionId?: string | undefined; adapterId?: string | undefined; clientId?: string | undefined; clientAccountId?: string | undefined; lastClientIdentityObservation?: { clientId: string; source: string; kind: string; observedAt: number; payload: Record<string, unknown>; } | undefined; isOrchestrated?: boolean | undefined; title?: string | undefined; summary?: string | undefined; summaryUpdatedAt?: number | undefined; isImported?: boolean | undefined; forkTransforms?: { removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefined; targetWorkingDirectory?: string | undefined; executionTargetId?: string | undefined; spawningToolCallId?: string | undefined; approvalPolicyOverride?: "reject" | "always-ask" | "full-access" | null | undefined; } | nullyes

Get child sessions of a parent. Subject: session.getChildren Type: Request (RPC)

Request:

FieldTypeRequired
sessionIdstringyes

Response:

FieldTypeRequired
children{ sessionId: string; title: string | null; forkPointMessageId: string | null; branchKind: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | null; messageCount: number; hasChildren: boolean; spawningToolCallId?: string | undefined; }[]yes

Get context window state for a session.

Subject: session.getContextWindowState Type: Request (RPC)

Returns the current context window usage for a session, aggregated across all agents (using “worst agent” strategy).

Request:

FieldTypeRequired
sessionIdstringyes

Response:

FieldTypeRequired
state{ currentTokens: number; maxTokens: number; percentage: number; level: "warn" | "ok" | "critical"; lastUpdatedAt: number; } | nullyes

Get session counts by status for filter UI.

Subject: session.getStatusCounts Type: Request (RPC)

Returns counts for all statuses in a single efficient query. Useful for status filter UI badges that show totals regardless of current filter.

Request:

Empty object.

Response:

FieldTypeRequired
activenumberyes
allnumberyes
archivednumberyes
closednumberyes
discoverednumberyes

List makaio sessions.

Subject: session.list Type: Request (RPC)

When includePreview: true, each session includes a preview object with messageCount and firstUserMessage for UI display.

Request:

FieldTypeRequired
executionTargetIdstring | undefinedno
includePreviewboolean | undefinedno
limitnumber | undefinedno
offsetnumber | undefinedno
status"discovered" | "active" | "closed" | "archived" | "all" | undefinedno

Response:

FieldTypeRequired
sessions{ sessionId: string; createdAt: number; lastActivityAt: number; agents: { agentId: string; adapterId: string; adapterName: string; sessionId: string; role: "lead" | "member"; status: "active" | "idle" | "dead" | "disposed"; createdAt: number; lastActivityAt: number; adapterSessionId?: string | undefined; model?: string | undefined; cwd?: string | undefined; providerConfigId?: string | undefined; personaId?: string | undefined; profileId?: string | undefined; harnessId?: string | undefined; clientId?: string | undefined; compressionMode?: "auto" | "manual" | "off" | undefined; }[]; status: "discovered" | "active" | "closed" | "archived"; leadAgentId?: string | undefined; parentSessionId?: string | undefined; rootSessionId?: string | undefined; forkPointMessageId?: string | undefined; branchKind?: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | undefined; adapterName?: string | undefined; adapterSessionId?: string | undefined; adapterId?: string | undefined; clientId?: string | undefined; clientAccountId?: string | undefined; lastClientIdentityObservation?: { clientId: string; source: string; kind: string; observedAt: number; payload: Record<string, unknown>; } | undefined; isOrchestrated?: boolean | undefined; title?: string | undefined; summary?: string | undefined; summaryUpdatedAt?: number | undefined; isImported?: boolean | undefined; forkTransforms?: { removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefined; targetWorkingDirectory?: string | undefined; executionTargetId?: string | undefined; spawningToolCallId?: string | undefined; approvalPolicyOverride?: "reject" | "always-ask" | "full-access" | null | undefined; preview?: { messageCount: number; firstUserMessage: string | null; } | undefined; }[]yes
totalnumberyes

Merge a child session into parent. Subject: session.merge Type: Request (RPC)

Request:

FieldTypeRequired
childSessionIdstringyes
extensionIdstring | undefinedno
parentSessionIdstringyes
source"user" | "system" | "extension" | undefinedno
summarystring | undefinedno

Response:

FieldTypeRequired
handoffstring | undefinedno
successbooleanyes

Emitted after merge completes. Subject: session.merged

Type: Event

FieldTypeRequired
childSessionIdstringyes
handoffstringyes
parentSessionIdstringyes

Emitted when merge is about to happen. Subject: session.merging

Type: Event

FieldTypeRequired
childSessionIdstringyes
parentSessionIdstringyes

Permanently delete a session and all its events.

Subject: session.purge Type: Request (RPC)

Unlike close, this permanently removes all session data including event history. Use when session data is no longer needed (e.g., user explicitly deletes conversation, data retention policy).

Requires session to be archived first. This ensures no agents are still emitting events that would race with deletion.

Request:

FieldTypeRequired
sessionIdstringyes

Response:

FieldTypeRequired
errorstring | undefinedno
eventsDeletednumber | undefinedno
successbooleanyes

Session purged event.

Subject: session.purged Type: Event (fire-and-forget) Emitted when: A session is permanently deleted (via purge request)

FieldTypeRequired
sessionIdstringyes

Resolve the concrete adapter configuration for a given agent selection.

Subject: session.resolveAgentConfig Type: Request (RPC)

Request:

FieldTypeRequired
projectIdstring | undefinedno
selection{ [x: string]: unknown; kind: string; providerConfigId?: string | undefined; model?: string | undefined; reasoningEffort?: "none" | "low" | "medium" | "high" | "extra-high" | undefined; cwd?: string | undefined; systemPrompt?: string | { mode: "append"; content: string; } | undefined; allowedTools?: string[] | undefined; disallowedTools?: string[] | undefined; allowedDirectories?: string[] | undefined; }yes

Response:

FieldTypeRequired
adapterNamestringyes
allowedDirectoriesstring[] | undefinedno
allowedToolsstring[] | undefinedno
disallowedToolsstring[] | undefinedno
modelstring | undefinedno
providerConfigIdstring | undefinedno
reasoningEffort"none" | "low" | "medium" | "high" | "extra-high" | undefinedno
supportedReasoningLevels{ none?: string | number | undefined; low?: string | number | undefined; medium?: string | number | undefined; high?: string | number | undefined; 'extra-high'?: string | number | undefined; } | undefinedno
systemPromptstring | { mode: "append"; content: string; } | undefinedno

Resolve the fully-assembled system prompt for a given session.

Subject: session.resolveSystemPrompt Type: Request (RPC)

Request:

FieldTypeRequired
personaIdstring | undefinedno
profileIdstring | undefinedno
sessionIdstringyes

Response:

FieldTypeRequired
personaNamestring | undefinedno
profileNamestring | undefinedno
systemPromptstringyes

Resume a closed session back to active.

Subject: session.resume Type: Request (RPC)

Request:

FieldTypeRequired
sessionIdstringyes

Response:

FieldTypeRequired
successbooleanyes

Session resumed event.

Subject: session.resumed Type: Event (fire-and-forget) Emitted when: A closed session is resumed to active state

FieldTypeRequired
sessionIdstringyes

Search sessions by content using FTS5 full-text search.

Subject: session.search Type: Request (RPC)

Searches across session message content. Always includes preview data since search is content-focused.

Request:

FieldTypeRequired
isImportedboolean | undefinedno
limitnumber | undefinedno
querystringyes
status"discovered" | "active" | "closed" | "archived" | "all" | undefinedno

Response:

FieldTypeRequired
sessions{ sessionId: string; createdAt: number; lastActivityAt: number; agents: { agentId: string; adapterId: string; adapterName: string; sessionId: string; role: "lead" | "member"; status: "active" | "idle" | "dead" | "disposed"; createdAt: number; lastActivityAt: number; adapterSessionId?: string | undefined; model?: string | undefined; cwd?: string | undefined; providerConfigId?: string | undefined; personaId?: string | undefined; profileId?: string | undefined; harnessId?: string | undefined; clientId?: string | undefined; compressionMode?: "auto" | "manual" | "off" | undefined; }[]; status: "discovered" | "active" | "closed" | "archived"; leadAgentId?: string | undefined; parentSessionId?: string | undefined; rootSessionId?: string | undefined; forkPointMessageId?: string | undefined; branchKind?: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | undefined; adapterName?: string | undefined; adapterSessionId?: string | undefined; adapterId?: string | undefined; clientId?: string | undefined; clientAccountId?: string | undefined; lastClientIdentityObservation?: { clientId: string; source: string; kind: string; observedAt: number; payload: Record<string, unknown>; } | undefined; isOrchestrated?: boolean | undefined; title?: string | undefined; summary?: string | undefined; summaryUpdatedAt?: number | undefined; isImported?: boolean | undefined; forkTransforms?: { removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefined; targetWorkingDirectory?: string | undefined; executionTargetId?: string | undefined; spawningToolCallId?: string | undefined; approvalPolicyOverride?: "reject" | "always-ask" | "full-access" | null | undefined; preview?: { messageCount: number; firstUserMessage: string | null; } | undefined; }[]yes
totalnumberyes

Send a message to a session’s agents.

Subject: session.sendMessage Type: Request (RPC)

Single entry point for all user messages. Handles:

  • Creating session if sessionId does not exist
  • Auto-attaching agent via adapter.startAgent if session has no agents
  • Turn lifecycle (creates turn if none active)
  • Routing to targeted agents

Default targets lead agent; use agentIds: 'all' for broadcast.

Request:

FieldTypeRequired
agent{ [x: string]: unknown; kind: "adapter"; providerConfigId?: string | undefined; model?: string | undefined; reasoningEffort?: "none" | "low" | "medium" | "high" | "extra-high" | undefined; cwd?: string | undefined; systemPrompt?: string | { mode: "append"; content: string; } | undefined; allowedTools?: string[] | undefined; disallowedTools?: string[] | undefined; allowedDirectories?: string[] | undefined; adapterName?: string | undefined; adapterId?: string | undefined; } | { [x: string]: unknown; kind: "canonical-model"; model: string; providerConfigId?: string | undefined; reasoningEffort?: "none" | "low" | "medium" | "high" | "extra-high" | undefined; cwd?: string | undefined; systemPrompt?: string | { mode: "append"; content: string; } | undefined; allowedTools?: string[] | undefined; disallowedTools?: string[] | undefined; allowedDirectories?: string[] | undefined; } | { [x: string]: unknown; kind: string; providerConfigId?: string | undefined; model?: string | undefined; reasoningEffort?: "none" | "low" | "medium" | "high" | "extra-high" | undefined; cwd?: string | undefined; systemPrompt?: string | { mode: "append"; content: string; } | undefined; allowedTools?: string[] | undefined; disallowedTools?: string[] | undefined; allowedDirectories?: string[] | undefined; } | undefinedno
agentIdsstring[] | "all" | undefinedno
deliveryMode"enqueue" | undefinedno
extensionIdstring | undefinedno
messagestring | { blocks: { type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; } | ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; role?: "user" | "assistant" | "system" | undefined; }yes
origin"text" | "voice" | "compact" | undefinedno
originWindowIdstring | undefinedno
sessionContext{ messageHistory?: { blocks: { type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; } | ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; role?: "user" | "assistant" | "system" | undefined; }[] | undefined; hasNewTransforms?: boolean | undefined; hasCompression?: boolean | undefined; extractedContext?: unknown; isFirstTurn?: boolean | undefined; hasConnectorSwap?: boolean | undefined; turnContext?: Record<string, JsonValue> | undefined; } | undefinedno
sessionIdstringyes
skipConnectorSwapWarningboolean | undefinedno
source"user" | "system" | "extension" | undefinedno
turnIdstring | undefinedno

Response:

FieldTypeRequired
messageIdstringyes
sessionIdstringyes
turnIdstringyes

Export a session to a snapshot file.

Subject: session.snapshot.export Type: Request (RPC)

Creates a snapshot file containing session data for backup or transfer. Supports filtering what data to include via export options.

Request:

FieldTypeRequired
options{ includeEvents: boolean; includeToolOutputs: boolean; includeAncestors: boolean; includeChildren: boolean; } | undefinedno
sessionIdstringyes

Response:

FieldTypeRequired
snapshot{ version: "1.0"; exportedAt: number; options: { includeEvents: boolean; includeToolOutputs: boolean; includeAncestors: boolean; includeChildren: boolean; }; sessions: { sessionId: string; createdAt: number; lastActivityAt: number; agents: { agentId: string; adapterId: string; adapterName: string; sessionId: string; role: "lead" | "member"; status: "active" | "idle" | "dead" | "disposed"; createdAt: number; lastActivityAt: number; adapterSessionId?: string | undefined; model?: string | undefined; cwd?: string | undefined; providerConfigId?: string | undefined; personaId?: string | undefined; profileId?: string | undefined; harnessId?: string | undefined; clientId?: string | undefined; compressionMode?: "auto" | "manual" | "off" | undefined; }[]; status: "discovered" | "active" | "closed" | "archived"; leadAgentId?: string | undefined; parentSessionId?: string | undefined; rootSessionId?: string | undefined; forkPointMessageId?: string | undefined; branchKind?: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | undefined; adapterName?: string | undefined; adapterSessionId?: string | undefined; adapterId?: string | undefined; clientId?: string | undefined; clientAccountId?: string | undefined; lastClientIdentityObservation?: { clientId: string; source: string; kind: string; observedAt: number; payload: Record<string, unknown>; } | undefined; isOrchestrated?: boolean | undefined; title?: string | undefined; summary?: string | undefined; summaryUpdatedAt?: number | undefined; isImported?: boolean | undefined; forkTransforms?: { removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefined; targetWorkingDirectory?: string | undefined; executionTargetId?: string | undefined; spawningToolCallId?: string | undefined; approvalPolicyOverride?: "reject" | "always-ask" | "full-access" | null | undefined; }[]; agents: { agentId: string; adapterId: string; adapterName: string; sessionId: string; role: "lead" | "member"; status: "active" | "idle" | "dead" | "disposed"; createdAt: number; lastActivityAt: number; adapterSessionId?: string | undefined; model?: string | undefined; cwd?: string | undefined; providerConfigId?: string | undefined; personaId?: string | undefined; profileId?: string | undefined; harnessId?: string | undefined; clientId?: string | undefined; compressionMode?: "auto" | "manual" | "off" | undefined; }[]; messages: { messageId: string; turnId: string | null; sessionId: string; role: "user" | "assistant"; contentText: string; blocks: ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; timestamp: number; agentId?: string | undefined; adapterSessionId?: string | undefined; adapterMessageId?: string | undefined; editOf?: string | undefined; origin?: "text" | "voice" | "compact" | undefined; }[]; turns: { turnId: string; sessionId: string; turnNumber: number; startedAt: number; status: "error" | "active" | "completed"; completedAt?: number | undefined; error?: string | undefined; usage?: { total: { inputTokens: number; outputTokens: number; cost?: number | undefined; }; byAgent?: Record<string, { inputTokens: number; outputTokens: number; cost?: number | undefined; }> | undefined; } | undefined; }[]; events?: ({ sessionId: string; eventId: string; timestamp: number; type: "agent.added"; payload: { sessionId: string; adapterSessionId: string; agentId: string; adapterId: string; adapterName: string; role?: "lead" | "member" | undefined; model?: string | undefined; cwd?: string | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "user_message.sent"; payload: { sessionId: string; turnId: string; turnNumber: number; messageId: string; content: string | { blocks: { type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; } | ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; role?: "user" | "assistant" | "system" | undefined; }; agentIds: string[]; source?: "user" | "system" | "extension" | undefined; origin?: "text" | "voice" | "compact" | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "user_message.acknowledged"; payload: { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentId: string; }; } | { sessionId: string; eventId: string; timestamp: number; type: "user_message.completed"; payload: { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentId: string; outcome: "error" | "completed" | "superseded" | "merged" | "cancelled" | "rejected"; supersededBy?: string | undefined; mergedInto?: string | undefined; error?: string | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "turn.started"; payload: { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentIds: string[]; initiator?: { source: "user" | "system" | "extension"; sourceId?: string | undefined; } | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "turn.completed"; payload: { sessionId: string; turnId: string; turnNumber: number; success: boolean; error?: string | undefined; initiator?: { source: "user" | "system" | "extension"; sourceId?: string | undefined; } | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "message"; payload: { messageId: string; turnId: string | null; role: "user" | "assistant"; }; } | { sessionId: string; eventId: string; timestamp: number; type: "branch.created"; payload: { childSessionId: string; parentSessionId: string; kind: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside"; forkPointMessageId?: string | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "branch.merged"; payload: { childSessionId: string; parentSessionId: string; resultJson?: string | undefined; resultMessageId?: string | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "squash"; payload: { summaryJson: string; tokensBefore?: number | undefined; tokensAfter?: number | undefined; compressedMessageIds?: string[] | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: string; payload: Record<string, unknown>; })[] | undefined; }yes

Import sessions from a snapshot file.

Subject: session.snapshot.import Type: Request (RPC)

Imports session data from a snapshot file, with conflict resolution options for handling existing sessions.

Request:

FieldTypeRequired
onConflict"overwrite" | "fail" | "skip"yes
snapshot{ version: "1.0"; exportedAt: number; options: { includeEvents: boolean; includeToolOutputs: boolean; includeAncestors: boolean; includeChildren: boolean; }; sessions: { sessionId: string; createdAt: number; lastActivityAt: number; agents: { agentId: string; adapterId: string; adapterName: string; sessionId: string; role: "lead" | "member"; status: "active" | "idle" | "dead" | "disposed"; createdAt: number; lastActivityAt: number; adapterSessionId?: string | undefined; model?: string | undefined; cwd?: string | undefined; providerConfigId?: string | undefined; personaId?: string | undefined; profileId?: string | undefined; harnessId?: string | undefined; clientId?: string | undefined; compressionMode?: "auto" | "manual" | "off" | undefined; }[]; status: "discovered" | "active" | "closed" | "archived"; leadAgentId?: string | undefined; parentSessionId?: string | undefined; rootSessionId?: string | undefined; forkPointMessageId?: string | undefined; branchKind?: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside" | undefined; adapterName?: string | undefined; adapterSessionId?: string | undefined; adapterId?: string | undefined; clientId?: string | undefined; clientAccountId?: string | undefined; lastClientIdentityObservation?: { clientId: string; source: string; kind: string; observedAt: number; payload: Record<string, unknown>; } | undefined; isOrchestrated?: boolean | undefined; title?: string | undefined; summary?: string | undefined; summaryUpdatedAt?: number | undefined; isImported?: boolean | undefined; forkTransforms?: { removedMessageIds?: string[] | undefined; appliedPipeline?: { actionId: string; options?: Record<string, unknown> | undefined; }[] | undefined; segments?: { fromMessageId: string; toMessageId: string; policy: "verbatim" | "summarize" | "exclude"; stripReasoning?: boolean | undefined; stripToolOutputs?: boolean | undefined; overrides?: Record<string, "exclude"> | undefined; summaryText?: string | undefined; }[] | undefined; } | undefined; targetWorkingDirectory?: string | undefined; executionTargetId?: string | undefined; spawningToolCallId?: string | undefined; approvalPolicyOverride?: "reject" | "always-ask" | "full-access" | null | undefined; }[]; agents: { agentId: string; adapterId: string; adapterName: string; sessionId: string; role: "lead" | "member"; status: "active" | "idle" | "dead" | "disposed"; createdAt: number; lastActivityAt: number; adapterSessionId?: string | undefined; model?: string | undefined; cwd?: string | undefined; providerConfigId?: string | undefined; personaId?: string | undefined; profileId?: string | undefined; harnessId?: string | undefined; clientId?: string | undefined; compressionMode?: "auto" | "manual" | "off" | undefined; }[]; messages: { messageId: string; turnId: string | null; sessionId: string; role: "user" | "assistant"; contentText: string; blocks: ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; timestamp: number; agentId?: string | undefined; adapterSessionId?: string | undefined; adapterMessageId?: string | undefined; editOf?: string | undefined; origin?: "text" | "voice" | "compact" | undefined; }[]; turns: { turnId: string; sessionId: string; turnNumber: number; startedAt: number; status: "error" | "active" | "completed"; completedAt?: number | undefined; error?: string | undefined; usage?: { total: { inputTokens: number; outputTokens: number; cost?: number | undefined; }; byAgent?: Record<string, { inputTokens: number; outputTokens: number; cost?: number | undefined; }> | undefined; } | undefined; }[]; events?: ({ sessionId: string; eventId: string; timestamp: number; type: "agent.added"; payload: { sessionId: string; adapterSessionId: string; agentId: string; adapterId: string; adapterName: string; role?: "lead" | "member" | undefined; model?: string | undefined; cwd?: string | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "user_message.sent"; payload: { sessionId: string; turnId: string; turnNumber: number; messageId: string; content: string | { blocks: { type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; } | ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; role?: "user" | "assistant" | "system" | undefined; }; agentIds: string[]; source?: "user" | "system" | "extension" | undefined; origin?: "text" | "voice" | "compact" | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "user_message.acknowledged"; payload: { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentId: string; }; } | { sessionId: string; eventId: string; timestamp: number; type: "user_message.completed"; payload: { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentId: string; outcome: "error" | "completed" | "superseded" | "merged" | "cancelled" | "rejected"; supersededBy?: string | undefined; mergedInto?: string | undefined; error?: string | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "turn.started"; payload: { sessionId: string; turnId: string; turnNumber: number; messageId: string; agentIds: string[]; initiator?: { source: "user" | "system" | "extension"; sourceId?: string | undefined; } | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "turn.completed"; payload: { sessionId: string; turnId: string; turnNumber: number; success: boolean; error?: string | undefined; initiator?: { source: "user" | "system" | "extension"; sourceId?: string | undefined; } | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "message"; payload: { messageId: string; turnId: string | null; role: "user" | "assistant"; }; } | { sessionId: string; eventId: string; timestamp: number; type: "branch.created"; payload: { childSessionId: string; parentSessionId: string; kind: "fork" | "subagent" | "compress" | "branch" | "rewrite" | "coordinator" | "aside"; forkPointMessageId?: string | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "branch.merged"; payload: { childSessionId: string; parentSessionId: string; resultJson?: string | undefined; resultMessageId?: string | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: "squash"; payload: { summaryJson: string; tokensBefore?: number | undefined; tokensAfter?: number | undefined; compressedMessageIds?: string[] | undefined; }; } | { sessionId: string; eventId: string; timestamp: number; type: string; payload: Record<string, unknown>; })[] | undefined; }yes

Response:

FieldTypeRequired
errors{ sessionId: string; error: string; }[]yes
importedstring[]yes
skippedstring[]yes

Validate a snapshot object against the schema.

Subject: session.snapshot.validate Type: Request (RPC)

Validates a snapshot object without importing it. Useful for checking snapshot files before import.

Request:

FieldTypeRequired
snapshotunknownyes

Response:

FieldTypeRequired
errorsstring[]yes
validbooleanyes

Context squash event (for storage/persistence via SessionLogger). Subject: session.squash Type: Event (fire-and-forget)

Emitted when context is compressed. SessionLogger subscribes and persists with transform applied.

FieldTypeRequired
compressedMessageIdsstring[] | undefinedno
sessionIdstringyes
summaryJsonstringyes
tokensAfternumber | undefinedno
tokensBeforenumber | undefinedno

Turn completed.

Subject: session.turn.completed Type: Event (fire-and-forget) Emitted when: All targeted agents have completed processing

Semantics:

  • success=true: all agents completed with outcome=‘completed’
  • success=false: any agent had outcome=‘error’
  • cancelled/superseded/merged outcomes are neutral (not errors)
FieldTypeRequired
errorstring | undefinedno
initiator{ source: "user" | "system" | "extension"; sourceId?: string | undefined; } | undefinedno
sessionIdstringyes
successbooleanyes
turnIdstringyes
turnNumbernumberyes

Turn started.

Subject: session.turn.started Type: Event (fire-and-forget) Emitted when: First user message of a turn is received

FieldTypeRequired
agentIdsstring[]yes
initiator{ source: "user" | "system" | "extension"; sourceId?: string | undefined; } | undefinedno
messageIdstringyes
sessionIdstringyes
turnIdstringyes
turnNumbernumberyes

Update specific session fields (partial update).

Subject: session.update Type: Request (RPC)

Unlike re-setting the entire session, this performs a targeted update of specific fields.

Request:

FieldTypeRequired
approvalPolicyOverride"reject" | "always-ask" | "full-access" | null | undefinedno
executionTargetIdstring | null | undefinedno
sessionIdstringyes

Response:

FieldTypeRequired
successbooleanyes

Session property updated event. Subject: session.updated Type: Event (fire-and-forget)

Emitted after a session update (e.g., title, status change). Entity cache subscribes to re-fetch updated session data.

FieldTypeRequired
changedPropertiesstring[]yes
sessionIdstringyes

Aggregated session-level token usage.

Subject: session.usage Type: Event (fire-and-forget) Emitted when: UsageAggregator receives adapter.session.usage events

Aggregates token usage across all adapters in a session. UsageAggregator listens to adapter.session.usage events, aggregates them per-session (keyed by adapterSessionId to avoid collisions), and emits this canonical session-level usage event.

ContextTracker consumes this to track context window usage against thresholds.

Request:

FieldTypeRequired
adapterCountnumberyes
sessionIdstringyes
totalCallsnumberyes
totalInputTokensnumberyes
totalOutputTokensnumberyes
totalTokensnumberyes

Response:

FieldTypeRequired
acknowledgedtrueyes

User message acknowledged by agent.

Subject: session.user_message.acknowledged Type: Event (fire-and-forget) Emitted when: An agent receives and begins processing the message

FieldTypeRequired
agentIdstringyes
messageIdstringyes
sessionIdstringyes
turnIdstringyes
turnNumbernumberyes

User message processing completed by agent.

Subject: session.user_message.completed Type: Event (fire-and-forget) Emitted when: An agent finishes processing the message

FieldTypeRequired
agentIdstringyes
errorstring | undefinedno
mergedIntostring | undefinedno
messageIdstringyes
outcome"error" | "completed" | "superseded" | "merged" | "cancelled" | "rejected"yes
sessionIdstringyes
supersededBystring | undefinedno
turnIdstringyes
turnNumbernumberyes

User message sent to session.

Subject: session.user_message.sent Type: Event (fire-and-forget) Emitted when: User sends a message (before routing to agents)

FieldTypeRequired
agentIdsstring[]yes
contentstring | { blocks: { type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; } | ({ type: "text"; content: string; } | { type: "image"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "document"; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; } | { type: "attachment"; fileName: string; filePath: string; source: { type: "base64"; data: string; mimeType: string; } | { type: "url"; url: string; mimeType?: string | undefined; }; attachmentType: "file" | "directory"; displayName?: string | undefined; } | { type: "reasoning"; content: string; metadata?: Record<string, unknown> | undefined; } | { type: "tool_call"; toolCallId: string; name: string; args: Record<string, unknown>; } | { type: "tool_output"; toolCallId: string; output: string; isError?: boolean | undefined; })[]; role?: "user" | "assistant" | "system" | undefined; }yes
messageIdstringyes
origin"text" | "voice" | "compact" | undefinedno
sessionIdstringyes
source"user" | "system" | "extension" | undefinedno
turnIdstringyes
turnNumbernumberyes

Auto-generated by yarn docs:bus. Do not edit manually.