跳转到内容

KernelEvent

type KernelEvent = {
seq: number;
sessionId: string;
source: string;
ts: number;
turnId?: string;
v: string;
} &
| {
cwd: string;
type: "session.created";
}
| {
fromSeq: number;
type: "session.resumed";
}
| {
checkpointId?: string;
compactionId?: string;
keptPinnedCount?: number;
mechanism?: string;
removedIndices?: number[];
removedRange: [number, number];
type: "session.compacted";
}
| {
checkpointId: string;
label?: string;
messageCount: number;
trigger: string;
type: "session.checkpointed";
}
| {
checkpointId: string;
fromMessages: number;
toMessages: number;
type: "session.restored";
}
| {
checkpointId: string;
sessionId: string;
sourceSessionId: string;
type: "session.forked";
}
| {
afterTokens?: number;
beforeTokens?: number;
durationMs: number;
evictedBlocks: number;
prunedBlocks?: number;
pruneRecoveredTokens?: number;
recoveredTokens: number;
type: "session.microcompacted";
}
| {
locale: string;
previous: string;
type: "session.locale.changed";
}
| {
previous: string;
style: string;
type: "session.output_style.changed";
}
| {
persisted?: boolean;
trusted: boolean;
type: "session.workspace_trust.changed";
}
| {
from: string;
to: string;
type: "session.cwd_changed";
}
| {
type: "session.ended";
}
| {
type: "turn.started";
}
| {
reason: | "completed"
| "blocking_limit"
| "aborted_streaming"
| "aborted_tools"
| "model_error"
| "prompt_too_long"
| "max_turns"
| "max_tool_rounds"
| "injection_limit"
| "hook_stopped"
| "structured_output"
| "timeout"
| "shutdown"
| "budget_exceeded"
| "stop_hook_limit"
| "internal_error"
| "client_gone";
type: "turn.completed";
}
| {
reason: | "completed"
| "blocking_limit"
| "aborted_streaming"
| "aborted_tools"
| "model_error"
| "prompt_too_long"
| "max_turns"
| "max_tool_rounds"
| "injection_limit"
| "hook_stopped"
| "structured_output"
| "timeout"
| "shutdown"
| "budget_exceeded"
| "stop_hook_limit"
| "internal_error"
| "client_gone";
type: "turn.aborted";
}
| {
detail?: Record<string, unknown>;
errorKind?: string;
message: string;
recoverable: boolean;
scope: string;
type: "turn.error";
}
| {
blockType: string;
index: number;
type: "msg.block.start";
}
| {
index: number;
text: string;
type: "msg.text.delta";
}
| {
index: number;
text: string;
type: "msg.thinking.delta";
}
| {
index: number;
type: "msg.block.end";
}
| {
index: number;
type: "msg.retracted";
}
| {
args?: unknown;
name: string;
toolCallId: string;
type: "tool.proposed";
}
| {
name: string;
toolCallId: string;
type: "tool.permission.requested";
}
| {
decision: "allow" | "deny" | "ask";
decisionSource: "user" | "rule" | "mode" | "policy" | "hook" | "builtin" | "classifier";
matchedRule?: string;
toolCallId: string;
type: "tool.permission.decided";
}
| {
toolCallId: string;
type: "tool.started";
}
| {
message: string;
toolCallId: string;
type: "tool.progress";
}
| {
chunk: string;
toolCallId: string;
type: "tool.output.delta";
}
| {
content?: string;
data?: unknown;
durationMs: number;
isError?: boolean;
toolCallId: string;
type: "tool.completed";
}
| {
errorType: | "aborted"
| "timeout"
| "invalid_args"
| "unknown_tool"
| "execution_error";
message: string;
toolCallId: string;
type: "tool.failed";
}
| {
agentId: string;
parentAgentId?: string;
type: "agent.spawned";
}
| {
agentId: string;
message: string;
type: "agent.progress";
}
| {
agentId: string;
type: "agent.completed";
}
| {
agentId: string;
messageId: string;
type: "agent.followup";
}
| {
agentId: string;
message: string;
type: "agent.report";
wake: boolean;
}
| {
agentId: string;
outcome: string;
type: "agent.settled";
}
| {
agentId: string;
by: "user" | "system" | "parent";
type: "agent.interrupted";
}
| {
event: string;
hookId: string;
type: "hook.triggered";
}
| {
durationMs?: number;
event?: string;
hookId: string;
status?: "aborted" | "error" | "timeout" | "ok";
type: "hook.completed";
}
| {
durationMs?: number;
event?: string;
hookId: string;
reason: string;
type: "hook.blocked";
}
| {
agentId?: string;
contextWindowTokens?: number;
costUsd?: number;
model: string;
provider?: string;
purpose?: string;
toolUseId?: string;
type: "cost.usage.updated";
usage: {
cacheCreationInputTokens?: number;
cacheDeletedInputTokens?: number;
cacheReadInputTokens?: number;
dims?: Record<string, number>;
inputTokens: number;
outputTokens: number;
reasoningOutputTokens?: number;
saved?: string;
};
}
| {
inputTokens: number;
model: string;
threshold?: number;
type: "cost.cache_miss";
}
| {
actual: string;
provider?: string;
requested: string;
type: "cost.model.mismatch";
}
| {
attempts?: number;
failures?: {
kind: | "rate_limited"
| "context_overflow"
| "auth"
| "server"
| "network"
| "connect"
| "stream_interrupted"
| "invalid_request"
| "policy_denied";
provider: string;
}[];
from: string;
reason: string;
to: string;
type: "cost.provider.switched";
}
| {
protocolVersion: string;
server: string;
transport: "stdio" | "http";
type: "mcp.connected";
}
| {
code: string;
message: string;
server: string;
type: "mcp.connect_failed";
}
| {
detail?: string;
reason: "error" | "closed" | "server_exit";
server: string;
type: "mcp.closed";
}
| {
message?: string;
mode: "form" | "url";
server: string;
type: "mcp.elicitation_declined";
}
| {
reason: "duplicate_name" | "invalid_name";
server: string;
tool: string;
type: "mcp.tool_skipped";
}
| {
durationMs: number;
folds?: {
bridged: string;
tool: string;
}[];
origin: "catalog-cache" | "live";
phase: "catalog" | "expand";
server: string;
tools: string[];
type: "mcp.discovered";
}
| {
added: number;
changed: number;
removed: number;
server: string;
type: "mcp.catalog_updated";
}
| {
attempt: number;
connection: number;
delayMs: number;
server: string;
type: "mcp.reconnecting";
}
| {
attempt: number;
connection: number;
downtimeMs: number;
server: string;
type: "mcp.reconnected";
}
| {
attempts: number;
connection: number;
server: string;
type: "mcp.reconnect_exhausted";
}
| {
items: {
content: string;
id: string;
status: "completed" | "pending" | "in_progress" | "cancelled";
}[];
type: "plan.todo.updated";
};

完整内核事件:包络 + 负载(KernelEventSchema 推导)。

seq: number;
sessionId: string;
source: string;
ts: number;
optional turnId?: string;
v: string;