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
Section titled “sessionId”sessionId: string;source
Section titled “source”source: string;ts: number;turnId?
Section titled “turnId?”optional turnId?: string;v: string;本文是否有帮助?
感谢反馈,我们会持续改进这篇文章。