Skip to content

agent

FieldValue
Prefixagent
Namespace constantAgentNamespace
Subjects constantAgentSubjects
Kindbus
Schema recordAgentSchemas
Tierframework
Package@makaio/contracts
Defined inpackages/contracts/src/agent/namespace.ts
KeyWireTypeSchema
completeagent.completeeventcomplete.ts
contextWindow.updatedagent.contextWindow.updatedeventcontext-window.ts
credential.changeagent.credential.changerpccredential-change.ts
cwd.changeagent.cwd.changerpccwd-change.ts
cwd.changedagent.cwd.changedeventcwd-change.ts
getCapabilitiesagent.getCapabilitiesrpcget-capabilities.ts
idleagent.idleeventidle.ts
messageagent.messageeventmessage.ts
message_deltaagent.message_deltaeventmessage.ts
model.changeagent.model.changerpcmodel-change.ts
model.changedagent.model.changedeventmodel-changed.ts
reasoningagent.reasoningeventreasoning.ts
reasoning_deltaagent.reasoning_deltaeventreasoning.ts
sendMessageagent.sendMessagerpcsend-message.ts
session.closedagent.session.closedeventsession-closed.ts
startedagent.startedeventstarted.ts
step.finishedagent.step.finishedeventstep.ts
step.startedagent.step.startedeventstep.ts
tool.completedagent.tool.completedeventtool.ts
tool.outputagent.tool.outputeventtool.ts
tool.startedagent.tool.startedeventtool.ts
tool.useagent.tool.useeventtool.ts
toolApproveagent.toolApproverpctool-approve.ts
turn.completedagent.turn.completedeventturn.ts
turn.startedagent.turn.startedeventturn.ts
usageagent.usageeventusage.ts
user_message.acknowledgedagent.user_message.acknowledgedeventuser-message-acknowledged.ts
user_message.completedagent.user_message.completedeventuser-message-completed.ts
user_message.sentagent.user_message.senteventuser-message-sent.ts
validateModelChangeagent.validateModelChangerpcvalidate-model-change.ts

Agent turn completed (any terminal outcome).

Subject: agent.complete Type: Event (fire-and-forget) Emitted when: An agent finishes processing a turn — success or error.

Consumers can inspect outcome to distinguish success from failure:

  • completed — normal completion, message contains the response
  • error — processing failed, error contains the reason
  • superseded / merged / cancelled / rejected — non-error terminal states
FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
errorstring | undefinedno
errorCategory"rate_limit" | "auth" | "model_unavailable" | "quota_exceeded" | undefinedno
messagestring | undefinedno
messageIdstringyes
occurredAtnumber | undefinedno
outcome"error" | "completed" | "superseded" | "merged" | "cancelled" | "rejected" | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Context window status after a turn completes.

Subject: agent.contextWindow.updated Type: Event (fire-and-forget) Emitted when: After each turn completes with usage data

Used by orchestration layer to trigger compression when thresholds are reached.

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
cachedTokensnumber | undefinedno
clientIdstring | undefinedno
currentTokensnumberyes
level"warn" | "ok" | "critical"yes
maxTokensnumberyes
messageIdstring | undefinedno
occurredAtnumber | undefinedno
percentagenumberyes
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Request to change agent credentials mid-session.

Subject: agent.credential.change Type: Request/Response Sent when: Credential state changes (account-manager rotation or user config update) Handler: AIAgent re-resolves credentials, rebuilds connector if SDK-based

Request:

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstring | undefinedno
agentIdstringyes
changeSequencenumberyes
clientIdstring | undefinedno
credentialRefsRecord<string, string & $brand<"CredentialRef">>yes
definitionIdstringyes
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstringyes
sessionIdstring | undefinedno
turnIdstring | undefinedno

Response:

FieldTypeRequired
successbooleanyes

Request to change the agent working directory.

Subject: agent.cwd.change Type: Request/Response Sent when: Caller detects agent’s cwd differs from desired cwd Handler: AIAgent swaps connector with new cwd

Request:

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
messageIdstring | undefinedno
newCwdstringyes
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
skipWarningboolean | undefinedno
turnIdstring | undefinedno

Response:

FieldTypeRequired
previousCwdstring | undefinedno
reasonstring | undefinedno
successbooleanyes

Agent working directory changed.

Subject: agent.cwd.changed Type: Event (fire-and-forget) Emitted when: Agent’s working directory has been successfully changed Use for: UI updates, audit logging

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
messageIdstring | undefinedno
newCwdstringyes
occurredAtnumber | undefinedno
previousCwdstringyes
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Query effective capabilities of a running agent.

Subject: agent.getCapabilities Type: Request (RPC) Purpose: Returns capabilities based on the agent’s current model

Request:

FieldTypeRequired
agentIdstringyes

Response:

FieldTypeRequired
capabilitiesstring[]yes
modelstring | undefinedno
nativeToolsstring[]yes

Agent processing state transitioned to idle.

Subject: agent.idle Type: Event (fire-and-forget) Emitted when: An agent’s processing state transitions to ‘idle’

This event fires AFTER agent.complete and signals that the agent is fully idle and ready for mutations like cwd.change or model.change. Orchestration-level consumers (who don’t have direct connector access) can listen to this event to know when the agent is safe to mutate.

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Complete AI message received.

Subject: agent.message Type: Event (fire-and-forget) Emitted when: A full message is received from the AI model

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
contentstringyes
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

AI message stream delta received.

Subject: agent.message_delta Type: Event (fire-and-forget) Emitted when: Streaming message text is received from the AI model

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
textstringyes
turnIdstring | undefinedno

Request to change the agent model.

Subject: agent.model.change Type: Request/Response Sent when: Caller wants to switch the model mid-session Handler: AIAgent attempts native in-place change, falls back to connector swap

Request:

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
messageIdstring | undefinedno
newModelstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
providerContext{ providerConfigId: string; definitionId: string; credentialRefs: Record<string, string & $brand<"CredentialRef">>; endpointOverrides?: { anthropic?: string | undefined; openai?: string | undefined; } | undefined; credentialEnvVars?: Record<string, string> | undefined; ambientCredentialEnvVars?: string[] | undefined; } | undefinedno
reasoningEffort"none" | "low" | "medium" | "high" | "extra-high" | undefinedno
sessionIdstring | undefinedno
skipWarningboolean | undefinedno
turnIdstring | undefinedno

Response:

FieldTypeRequired
appliedReasoningEffort"none" | "low" | "medium" | "high" | "extra-high" | undefinedno
modelstring | undefinedno
reasonstring | undefinedno
successbooleanyes
supportedReasoningLevels{ none?: string | number | undefined; low?: string | number | undefined; medium?: string | number | undefined; high?: string | number | undefined; 'extra-high'?: string | number | undefined; } | undefinedno
swappedboolean | undefinedno

Agent model changed during execution.

Subject: agent.model.changed Type: Event (fire-and-forget) Emitted when: The model is changed mid-session (e.g., user switches models) Use for: Tracking model transitions for billing, context restoration

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
messageIdstring | undefinedno
newModelstringyes
newReasoningEffort"none" | "low" | "medium" | "high" | "extra-high" | undefinedno
occurredAtnumber | undefinedno
previousModelstringyes
previousReasoningEffort"none" | "low" | "medium" | "high" | "extra-high" | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Complete AI reasoning block received.

Subject: agent.reasoning Type: Event (fire-and-forget) Emitted when: A full reasoning/thinking block is received from the AI model

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
contentstringyes
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

AI reasoning stream delta received.

Subject: agent.reasoning_delta Type: Event (fire-and-forget) Emitted when: Streaming reasoning content is received from the AI model

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
contentstringyes
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Send a message to an existing agent.

Subject: agent.sendMessage Type: Request (RPC) Purpose: Sends a message to an existing agent instance (errors if agent doesn’t exist)

Request:

FieldTypeRequired
adapterIdstringyes
agentIdstringyes
deliveryMode"enqueue" | "immediate" | 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
messageIdstring | undefinedno
responseSchemaRecord<string, unknown> | 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
sessionIdstring | undefinedno
turnIdstring | undefinedno

Response:

FieldTypeRequired
messageIdstringyes

Agent session closed.

Subject: agent.session.closed Type: Event (fire-and-forget) Emitted when: Agent session ends (abort, close, or natural completion)

AIAdapter listens to this and re-emits as AdapterSubjects.session.closed. This maintains proper layering: agent emits agent-level events, adapter translates to adapter-level events.

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
reasonstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Agent execution started.

Subject: agent.started Type: Event (fire-and-forget) Emitted when: An agent begins processing a task

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
cwdstring | nullyes
messageIdstring | undefinedno
modelstring | nullyes
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Agent step finished event.

Subject: agent.step.finished Type: Event (fire-and-forget) Emitted when: A content block completes processing

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
blockIndexnumberyes
clientIdstring | undefinedno
content{ 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; }yes
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
stepType"text" | "reasoning" | "tool_use"yes
turnIdstring | undefinedno

Agent step started event.

Subject: agent.step.started Type: Event (fire-and-forget) Emitted when: A content block begins processing

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
blockData{ type: "tool_use"; toolName: string; toolCallId: string; } | { type: "reasoning"; } | { type: "text"; } | undefinedno
blockIndexnumberyes
clientIdstring | undefinedno
content{ 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; } | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
stepType"text" | "reasoning" | "tool_use"yes
turnIdstring | undefinedno

Tool execution completed.

Subject: agent.tool.completed Type: Event (fire-and-forget) Emitted when: A tool finishes execution

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
argsRecord<string, unknown> | undefinedno
clientIdstring | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
resultstring | Record<string, unknown> | Record<string, unknown>[]yes
sessionIdstring | undefinedno
successboolean | undefinedno
toolCallIdstringyes
toolNamestringyes
turnIdstring | undefinedno

Tool execution output received.

Subject: agent.tool.output Type: Event (fire-and-forget) Emitted when: A tool produces output during execution

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
argsRecord<string, unknown> | undefinedno
clientIdstring | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
outputstringyes
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
toolCallIdstringyes
toolNamestring | undefinedno
turnIdstring | undefinedno

Tool execution started.

Subject: agent.tool.started Type: Event (fire-and-forget) Emitted when: A tool begins execution

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
toolCallIdstringyes
toolNamestringyes
turnIdstring | undefinedno

Tool use requested by agent.

Subject: agent.tool.use Type: Event (fire-and-forget) Emitted when: Agent requests to use a tool

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
argsRecord<string, unknown> | undefinedno
clientIdstring | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
toolCallIdstringyes
toolNamestringyes
turnIdstring | undefinedno

Request approval for tool execution.

Subject: agent.toolApprove Type: Request (RPC) Emitted when: Agent requires approval before executing a tool

Response semantics:

  • action: 'allow': Approve tool execution
    • updatedInput: Optional modified arguments (e.g., user corrected a path)
    • updatedPermissions: Optional permission updates (e.g., “always allow” this pattern)
  • action: 'deny': Reject tool execution
    • message: Required explanation or guidance for the agent
    • shouldAbort: If true, stop execution entirely; if false/unset, agent may retry

Request:

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
argsRecord<string, unknown> | undefinedno
clientIdstring | undefinedno
messageIdstring | undefinedno
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
reasoningstring | undefinedno
sessionIdstringyes
toolCallIdstringyes
toolNamestring | undefinedno
turnIdstring | undefinedno

Response:

FieldTypeRequired
action"allow" | "deny"yes

Agent turn completed.

Subject: agent.turn.completed Type: Event (fire-and-forget) Emitted when: Agent finishes processing a turn (always paired with agent.turn.started)

Fired for ALL outcomes, not just successful completions. Consumers that only care about success should filter on outcome === 'completed'. For full outcome details (supersededBy, mergedInto), listen to user_message.completed.

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
errorstring | undefinedno
messagestring | undefinedno
messageIdstringyes
occurredAtnumber | undefinedno
outcome"error" | "completed" | "superseded" | "merged" | "cancelled" | "rejected"yes
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Agent turn started.

Subject: agent.turn.started Type: Event (fire-and-forget) Emitted when: Agent begins processing a user message (after acknowledgment)

Higher-level abstraction over user_message.acknowledged. Consumers who don’t need merge/supersede details can subscribe to this.

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
content{ role: "user" | "assistant" | "system"; 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; })[]; message?: string | undefined; }yes
mergedFromstring[] | undefinedno
messageIdstringyes
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

Per-call token usage metrics.

Subject: agent.usage Type: Event (fire-and-forget) Emitted when: Usage metrics are available from an AI provider API call

This event contains delta metrics for a single API call. For session-level cumulative totals, see session.usage.

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
audioInputTokensnumber | undefinedno
audioOutputTokensnumber | undefinedno
cacheWriteTokensnumber | undefinedno
clientIdstring | undefinedno
contextWindownumber | undefinedno
costnumber | undefinedno
costUnitsnumberyes
costUnitType"requests" | "tokens"yes
currencystring | undefinedno
durationnumber | undefinedno
inputCachedTokensnumberyes
inputTokensnumberyes
messageIdstring | undefinedno
modelstringyes
occurredAtnumber | undefinedno
outputTokensnumberyes
providerstringyes
providerConfigIdstring | undefinedno
quota{ type: string; limit: number; used: number; overage: number; resetDate?: string | undefined; } | undefinedno
reasoningTokensnumberyes
serviceTierstring | undefinedno
sessionIdstring | undefinedno
totalTokensnumberyes
turnIdstring | undefinedno

User message acknowledged by agent (processing started).

Subject: agent.user_message.acknowledged Type: Event (fire-and-forget) Emitted when: SDK begins processing a user message

Marks the turn start boundary at agent level. If messages were merged, mergedFrom contains the messageIds that were folded into this message (their content was combined).

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
mergedFromstring[] | undefinedno
messageIdstringyes
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

User message lifecycle completed.

Subject: agent.user_message.completed Type: Event (fire-and-forget) Emitted when: A user message’s lifecycle ends (any outcome)

Every messageId from user_message.sent will eventually get a corresponding user_message.completed event with an explicit outcome.

For persistence/reconstruction:

  • completed: Normal flow, agent.complete also emitted
  • superseded: Partial response may exist, check supersededBy
  • merged: Content folded into mergedInto message
  • cancelled: No response expected
  • error: Check agent.error for details
FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
errorstring | undefinedno
mergedIntostring | undefinedno
messageIdstringyes
occurredAtnumber | undefinedno
outcome"error" | "completed" | "superseded" | "merged" | "cancelled" | "rejected"yes
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
supersededBystring | undefinedno
turnIdstring | undefinedno

User message sent to agent.

Subject: agent.user_message.sent Type: Event (fire-and-forget) Emitted when: A user message is enqueued for processing

Captures all user intent including messages that may be superseded. For persistence, this is the source of truth for user input.

FieldTypeRequired
adapterIdstringyes
adapterNamestringyes
adapterSessionIdstringyes
agentIdstringyes
clientIdstring | undefinedno
content{ role: "user" | "assistant" | "system"; 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; })[]; message?: string | undefined; }yes
deliveryMode"replace" | "enqueue" | "immediate"yes
messageIdstringyes
occurredAtnumber | undefinedno
providerConfigIdstring | undefinedno
sessionIdstring | undefinedno
turnIdstring | undefinedno

RPC subject for validating a mid-session model swap.

Subject: agent.validateModelChange Type: Request (RPC) Direction: framework → host

The framework adapter emits this before replacing a connector. The host layer (or any registered handler) decides whether the change should proceed and whether to request an edit-history fork. If no handler is registered (OSS / headless mode) the framework treats the change as auto-approved.

Request:

FieldTypeRequired
agentIdstringyes
currentModelstringyes
nextModelstringyes

Response:

FieldTypeRequired
proceedbooleanyes
requestEditHistoryboolean | undefinedno

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