import { type CommandHandler } from "./registry"; /** * iframe 嵌入形态的宿主端协作对象:当你把 Blade 的聊天页面用 iframe 嵌进 * 自己的系统时,用它与 iframe 里的智能体互通——API 与同页嵌入的 * AgentSession 完全一致(onCommand / attach / insertText / send)。 * * action 的来源与同页形态相同:技能作者在工具返回值 JSON 的 `_meta.bridge` * 字段里写 `{ action, payload }`,Blade 页面检测到自己处于 iframe 中时会把 * 它 postMessage 给宿主页面(见 docs/specs/260417-embed-bridge)。 */ export interface EmbeddedChatOptions { /** 嵌入 Blade 页面的 iframe 元素。不传则监听来自任意子窗口的消息。 */ iframe?: HTMLIFrameElement; /** * 允许接收消息的来源(Blade 页面的 origin,如 "https://blade.example.com")。 * 必填:不校验来源会让任意第三方页面伪造智能体指令。 */ allowedOrigins: string[]; } export interface EmbeddedChat { /** 监听智能体下发的指令(注册前到达的会缓冲补投)。返回取消函数。 */ onCommand(action: string, handler: CommandHandler): () => void; /** 把业务数据作为附件放进 iframe 里的聊天输入框。 */ attach(label: string, data: unknown): void; /** 往 iframe 里的聊天输入框追加文字。 */ insertText(text: string): void; /** 直接代用户发送一条消息。 */ send(text: string): void; /** 停止监听并释放资源。 */ dispose(): void; } export declare function connectEmbedded(options: EmbeddedChatOptions): EmbeddedChat;