/** * 协议 v1 的事件模型(JSON Schema 为准,这里是 TS 镜像)。 * * 界面只依赖这一套事件:引擎换 Pi 还是 Codex,事件不变(架构设计 5.2)。 * 改事件必须同时改:contracts/schemas/events.schema.json、本文件、docs/spec/protocol.md。 */ import type { ExecutionReceipt } from './protocol.js'; export const PROTOCOL_VERSION = 1; /** 所有事件共有的信封字段 */ export interface EventEnvelope { /** 协议版本;改协议就加版本,不改这一版 */ v: typeof PROTOCOL_VERSION; /** 会话内单调递增:断点续传与去重靠它 */ seq: number; /** 整数毫秒(ADR-0007) */ ts: number; sessionId: string; /** 一次运行(回合)的标识 */ runId?: string; type: TType; data: TData; } export type ExecutionStatus = ExecutionReceipt['status']; export interface MessageUserData { messageId: string; text: string; } export interface MessageDeltaData { messageId: string; text: string; } export interface MessageCompletedData { messageId: string; finishReason?: 'stop' | 'cancelled' | 'error' | 'length'; } export interface ToolCallData { callId: string; capabilityId: string; /** 参数摘要,不是参数明文 */ argsDigest: string; } export interface ToolResultData { callId: string; executionId: string; status: ExecutionStatus; } export interface ExecutionUpdatedData { executionId: string; status: ExecutionStatus; errorKind?: string; } export interface ApprovalRequestedData { approvalId: string; capabilityId: string; paramsDigest: string; /** 确认卡正文:影响范围与关键参数摘要 */ impactSummary: string; /** 目标数据版本;版本变了确认就失效 */ revision: number; expiresAt: number; } export interface ApprovalResolvedData { approvalId: string; decision: 'approved' | 'rejected' | 'expired'; } export interface RunStateData { state: 'idle' | 'running' | 'cancelling' | 'cancelled'; } export interface SessionUpdatedData { title?: string; status?: 'active' | 'archived'; } export interface ErrorData { code: string; message: string; retryable: boolean; errorKind?: string; } export type MessageUserEvent = EventEnvelope<'message.user', MessageUserData>; export type MessageDeltaEvent = EventEnvelope<'message.delta', MessageDeltaData>; export type MessageCompletedEvent = EventEnvelope<'message.completed', MessageCompletedData>; export type ToolCallEvent = EventEnvelope<'tool.call', ToolCallData>; export type ToolResultEvent = EventEnvelope<'tool.result', ToolResultData>; export type ExecutionUpdatedEvent = EventEnvelope<'execution.updated', ExecutionUpdatedData>; export type ApprovalRequestedEvent = EventEnvelope<'approval.requested', ApprovalRequestedData>; export type ApprovalResolvedEvent = EventEnvelope<'approval.resolved', ApprovalResolvedData>; export type RunStateEvent = EventEnvelope<'run.state', RunStateData>; export type SessionUpdatedEvent = EventEnvelope<'session.updated', SessionUpdatedData>; export type ErrorEvent = EventEnvelope<'error', ErrorData>; export type HeartbeatEvent = EventEnvelope<'heartbeat', Record>; /** 平台事件:客户端唯一认识的事件形态 */ export type PlatformEvent = | MessageUserEvent | MessageDeltaEvent | MessageCompletedEvent | ToolCallEvent | ToolResultEvent | ExecutionUpdatedEvent | ApprovalRequestedEvent | ApprovalResolvedEvent | RunStateEvent | SessionUpdatedEvent | ErrorEvent | HeartbeatEvent; export type PlatformEventType = PlatformEvent['type'];