Files
test1/components/nova-sdk/types.ts
2026-03-20 07:33:46 +00:00

300 lines
6.7 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Nova SDK Kit 组件类型定义
*/
import { useNovaService } from './hooks/useNovaService'
// 事件类型常量
export const EventType = {
UserInput: 'user_input',
Message: 'message',
ToolCall: 'tool_call',
TaskUpdate: 'task_update',
TaskEnd: 'task_end',
Error: 'error',
} as const
// 事件类型联合类型
export type EventType = typeof EventType[keyof typeof EventType]
// 任务状态常量(与接口 task_status 一致pending / in_progress / completed / stopped / paused / failed
export const TaskStatus = {
/** 等待开始 */
PENDING: 'pending',
/** 进行中 */
IN_PROGRESS: 'in_progress',
/** 已完成 */
COMPLETED: 'completed',
/** 已停止 */
STOPPED: 'stopped',
/** 暂停 */
PAUSED: 'paused',
/** 失败 */
FAILED: 'failed',
/** 已取消 */
CANCELLED: 'cancelled',
} as const
// 任务状态联合类型
export type TaskStatus = (typeof TaskStatus)[keyof typeof TaskStatus]
/** 终止态:遇到这些状态时关闭 loadingcompleted / stopped / failed / cancelled */
export const TERMINAL_TASK_STATUS: TaskStatus[] = [
TaskStatus.COMPLETED,
TaskStatus.STOPPED,
TaskStatus.FAILED,
TaskStatus.CANCELLED,
TaskStatus.PAUSED,
]
// 基础事件接口
export interface BaseEvent {
event_id: string
event_type: EventType | string
/** 规范化后的 action_type便于前端直接使用 */
action_type?: string
timestamp?: number
content?: {
text?: string
action_type?: string
metadata?: Record<string, unknown>
tool_name?: string
tool_input?: unknown
tool_output?: unknown
[key: string]: unknown
}
metadata?: {
isUserInput?: boolean
isTemp?: boolean
agent_id?: string
template_type?: string
template_id?: string
isTempSystemReply?: boolean
is_summary?: boolean
[key: string]: unknown
}
plan_step_state?: string
event_status?: string
stream?: boolean
}
// 消息内容
export interface MessageContent {
content?: string
text?: string
refer_content?: string
}
// Action 信息(工具调用/操作)
export interface ActionInfo {
name?: string
arguments?: string[]
action_type?: string
block?: boolean
tool_input?: unknown
tool_output?: unknown
}
// 操作
export interface Operation {
[key: string]: unknown
}
// MCP 内容
export interface McpContent {
[key: string]: unknown
}
// 计划配置
export interface PlanConfig {
steps?: Array<{
id: string
title: string
status?: string
[key: string]: unknown
}>
[key: string]: unknown
}
// Todo 列表配置
export interface TaskTodoConfig {
list: Array<{
id?: string
title?: string
status?: string
[key: string]: unknown
}>
}
// 用户交互(如选项、确认等)
export interface SlideQuestion {
question: string
type?: 'input' | 'single' | 'multiple'
options?: string[]
answer?: string
}
export interface UserInteraction {
type?: string
content?: string
/** 选项按钮choice 类型) */
choice_options?: Array<string | { label: string; disabled?: boolean; tooltip?: string }>
/** 幻灯片表单问题列表 */
questions?: SlideQuestion[]
/** 浏览器类型sandbox / local_browser */
browser_type?: string
/** 授权类型browser auth */
authorization_type?: string
tool_code?: string
event_id?: string
origin_text?: string
select_action?: string
[key: string]: unknown
}
// 附件
export interface Attachment {
file_name: string
file_type: string
file_url: string
path?: string
file_id?: string
}
// 图片附件
export interface ImageAttachment {
url: string
path?: string
file_name?: string
file_url?: string
}
// 上传文件
export interface UploadFile {
uid: string
name: string
type: string
byte_size?: number
url?: string
upload_file_id?: string
progress?: number
uploadStatus?: 'pending' | 'uploading' | 'success' | 'error'
}
// 消息项属性
export interface MessageItemProps {
base?: BaseEvent
content?: MessageContent
attachment?: Attachment[]
imageAttachment?: ImageAttachment[]
taskState?: TaskStatus
action?: ActionInfo
mcpContent?: McpContent
planConfig?: PlanConfig
taskTodoConfig?: TaskTodoConfig
operation?: Operation
userInteraction?: UserInteraction
}
// 扩展事件(用于渲染)
export interface ExtendedEvent extends BaseEvent {
renderProps?: MessageItemProps
}
/**
* API 原始事件类型 - 对应服务端 Event 结构(次于 next-agent-chat.type.ts 的 Event
* nova-sdk 内部以此类型处理原始事件流
*/
export interface ApiEvent {
event_id: string
event_type: string
event_status?: string
stream?: boolean
role?: string
task_id?: string
created_at?: string | number
timestamp?: string | number
plan_step_state?: string
is_display?: boolean
metadata?: Record<string, unknown>
content?: {
text?: string
content?: unknown
action_type?: string
tool_name?: string
action_name?: string
arguments?: unknown
tool_input?: unknown
tool_output?: unknown
tool_call_id?: string
metadata?: Record<string, unknown>
attachment_files?: Array<{
file_name?: string
file_type?: string
path?: string
[key: string]: unknown
}>
refer_content?: string
timestamp?: string | number
fast_mode?: boolean
[key: string]: unknown
}
}
// 发送消息的 Payload
export interface SendMessagePayload {
content: string
agent_id?: string
config?: {
label_ids?: string[]
search_custom_knowledge_enabled?: boolean
template_type?: string
template_id?: string
brand_id?: string
[key: string]: unknown
}
refer_content?: string
upload_file_ids?: string[]
}
// Artifact 类型
export interface TaskArtifact {
path: string
file_name: string
file_type: string
last_modified?: number
url?: string
content?: string
task_id?: string
// 工具调用相关
event_type?: string
/** 工具 action_type例如 skill_loader 等 */
action_type?: string
tool_name?: string
event_arguments?: unknown
tool_input?: unknown
tool_output?: unknown
from?: 'assistant' | 'user'
}
// Nova API 接口 - 从 useArtifactService 返回值自动推导
export type NovaAPI = ReturnType<typeof useNovaService>
// 消息列表 Provider 值
export interface NovaKitContextValue {
agentId?: string
agentName?: string
/** API 命名空间 */
api: NovaAPI
messageList: ExtendedEvent[][]
panelMode?: 'sidebar' | 'dialog'
taskStatus: TaskStatus
conversationId: string | null
isLoading: boolean
artifacts: TaskArtifact[]
setLoading: (loading: boolean) => void
loading: boolean
mode?: 'chat' | 'share'
}
export type HandleImageAttachmentClick = (image: ImageAttachment, from: 'assistant' | 'user') => void