/** * 页面协作协议(对应后端 `_meta.bridge` 通道,见 docs/specs/260417-embed-bridge)。 * * ## action 从哪里来 * * 智能体 → 宿主方向的每一条指令,都源自**技能作者写的工具代码**:工具返回值 * JSON 里带 `_meta.bridge: { action, payload }`,后端在持久化前把它剥离成独立 * 事件送达前端(LLM 的对话历史里读不到它)。因此: * * - action 字符串(如 "map.highlight")是**技能作者与宿主页面开发者之间的业务 * 契约**,LLM 不参与协议、SDK 不做枚举校验; * - 宿主页面用 `session.onCommand("map.highlight", fn)` 消费; * - 未注册 handler 的 action 会进入有限缓冲等待注册,超限后丢弃并 console 告警。 * * 宿主 → 智能体方向只有三个白名单动作:attach(附件入输入框)/ insertText * (追加输入文本)/ send(直接发消息),对应协议层的 addContext / appendInput / * sendMessage。 */ export interface CommandEnvelope { __bladeBridge: true; direction: "agent-to-host"; action: string; payload: unknown; meta: { sessionId: string; toolCallId?: string; timestamp: number; }; } export type InboundAction = "addContext" | "appendInput" | "sendMessage"; export interface InboundEnvelope { __bladeBridge: true; direction: "host-to-agent"; action: InboundAction; payload: unknown; } export declare function isCommandEnvelope(value: unknown): value is CommandEnvelope; export declare function isInboundEnvelope(value: unknown): value is InboundEnvelope;