import { ReactNode } from "react"; import { IMessage, Success, Event, Error, SendContent, ThemeType, FileItem, UploadRequestFn } from "./"; import type { ChatPresetInput, ChatStrategies } from "./ChatStrategies"; export interface DebugOptions { url: string; sessionId?: string; config: any; token: string; type?: "agentDebug" | "appDebug"; /** * 是否启用 Hook * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化 * @default true */ enabled?: boolean; strategies?: ChatStrategies; onError?: (error: Error) => void; onSuccess?: (data: Success) => void; onStream?: (data: Event) => void; onMessage?: (content: string, data: IMessage) => void; } /** * 事件状态码枚举 * @enum {string} * @version 1.0.0 */ export declare enum EventCode { /** 切换会话 */ SESSION_SWITCH = "SESSION_SWITCH", /** 开启新会话 */ SESSION_CREATE = "SESSION_CREATE" } export type handleEvent = { code: EventCode; message: string; data?: any; }; /** * renderFooter insert 参数说明 */ export interface FooterRenderArgs { message: IMessage; isLastBotMsg: boolean; isLastMsg: boolean; } /** * Provider 可通过 ref 暴露的方法句柄 */ export interface XAdkProviderHandle { startChat: (content: SendContent) => void; stopChat: () => void; reChat: () => void; clearChat: () => void; deleteSession: (id: string) => void; updateSession: (id: string, title: string) => void; getAppInfo: () => any; getMessages: () => IMessage[]; getSessions: () => any[]; setMessages: (msgs: IMessage[]) => void; setCurrentSession: (id: string) => void; /** * 设置自定义业务参数 (stateDelta) * 设置后每次发送消息时会自动携带该参数至后端 * 传入 undefined 可清除已设置的参数 * * @example * providerRef.current.setStateDelta({ userId: '123', bizType: 'order' }); * // 之后发送消息,请求体会携带 stateDelta: { userId: '123', bizType: 'order' } * * @example * // 清除自定义参数 * providerRef.current.setStateDelta(undefined); */ setStateDelta: (delta: Record | undefined) => void; } /** * config.chatProps 中的配置 */ export interface ChatConfig { /** * 是否展示清空按钮 * @type {boolean} * @default false */ clearBtnShow?: boolean; /** * 是否展示输入框 * @type {boolean} * @default true */ inputShow?: boolean; /** * 打字机效果速度(单位:毫秒) * @type {number} * @default 60 * @version 1.0.0 */ textSpeed?: number; } /** * Provider config 整体配置结构 */ export interface XAdkProviderConfig { session?: { showSessionList?: boolean; /** 是否轮询会话详情并主动补入异步任务消息,默认 true */ pollSessionEvents?: boolean; /** 会话详情轮询间隔,单位毫秒,默认 10000,最小 1000 */ sessionEventsPollingInterval?: number; }; /** * 初始化后是否默认展示第一条会话内容 * @type {boolean} * @default false */ showFirstSession?: boolean; allowUpload?: boolean; /** * 是否启用拖拽上传(需 allowUpload 为 true 时生效) * 拖拽区域为整个聊天区域(不含侧边栏) * @default true */ draggable?: boolean; appNo?: string; chatProps?: ChatConfig; debug?: boolean; /** * 是否展示点赞/点踩按钮 * @default true */ showFeedback?: boolean; /** * 点击对话中附件卡片的回调(非图片、非音视频文件) */ onFileClick?: (file: FileItem) => void; /** * 自定义文件上传函数 */ uploadRequest?: UploadRequestFn; /** * 预设策略。默认 xgroup-adk,用于兼容众安信科现有 ADK 协议。 * 传入 base 可获得更中立的组件默认行为。 */ preset?: ChatPresetInput; /** * 覆盖或补充当前 preset 的局部策略。 */ strategies?: ChatStrategies; } /** * XAdkProvider Props */ export interface XAdkProviderProps { /** * AI 服务基础地址 */ url?: string; /** * 认证 token */ token: string; /** * 组件功能配置 */ config?: XAdkProviderConfig; /** * Provider 级预设策略,优先级高于 config.preset。 */ preset?: ChatPresetInput; /** * Provider 级策略覆盖,优先级高于 config.strategies。 */ strategies?: ChatStrategies; /** * Provider 唯一标识 */ providerId?: string; /** * 消息成功回调 */ onSuccess?: (success: any) => void; /** * 流式消息回调 */ onStream?: (data: Event) => void; /** * 错误回调 */ onError?: (err: any) => void; /** * 每条消息回调 */ onMessage?: (content: string, data: IMessage) => void; /** * 事件回调 */ onEvent?: (event: handleEvent) => void; /** * React 子元素 - 支持 Compound Components */ children?: ReactNode; } export interface XAdkSDKProps extends XAdkProviderProps { /** * 主题类型 * @type {ThemeType} * @default 'default' * @version 1.0.0 */ theme?: ThemeType; /** * 组件属性配置 * @type {object} * @default undefined * @version 1.0.0 */ componentProps?: { /** * 组件ID * @type {string} * @default undefined * @version 1.0.0 */ id?: string; /** 支持任意 CSS 属性 */ [key: string]: any; }; }