import type { Message, ToolRegistry, SkillManager } from '@cicctencent/agent-core'; import type { TenantContext } from '../types.js'; /** 多租户上下文(从 types.ts 导入,保持统一) */ export type { TenantContext } from '../types.js'; /** 线程实体基础接口 */ export interface BaseThreadEntity { id: number | string; title?: string; status?: 'active' | 'archived' | 'deleted'; createdAt?: Date | string | number; updatedAt?: Date | string | number; } /** 消息实体基础接口 */ export interface BaseMessageEntity { id: number | string; threadId: number | string; role: 'user' | 'assistant' | 'system'; content: string; createdAt?: Date | string | number; } /** 工作空间实体基础接口 */ export interface BaseWorkspaceEntity { id: number | string; name: string; createdAt?: Date | string | number; } /** Agent Profile 实体基础接口 */ export interface BaseAgentProfileEntity { id: number | string; name: string; isDefault?: boolean; } /** Settings 实体基础接口 */ export interface BaseSettingsEntity { [key: string]: unknown; } /** * 键值存储抽象接口 * 应用层可实现:JsonFileStorage, TypeORMStorage, MongoDBStorage 等 */ export interface KVStorageAdapter { /** 获取值 */ get(key: string): Promise; /** 设置值 */ set(key: string, value: T): Promise; /** 删除 */ delete(key: string): Promise; /** 检查存在 */ exists(key: string): Promise; /** 列出所有键 */ keys?(prefix?: string): Promise; } /** * 列表存储抽象接口 * 支持 CRUD 操作的实体列表 */ export interface ListStorageAdapter { /** 获取所有 */ list(): Promise; /** 根据 ID 获取 */ findById(id: number | string): Promise; /** 添加 */ add(entity: T): Promise; /** 更新 */ update(id: number | string, data: Partial): Promise; /** 删除 */ remove(id: number | string): Promise; /** 批量操作 */ batch?(operations: Array<{ type: 'add' | 'update' | 'delete'; data: T | Partial; id?: number | string; }>): Promise; } /** * 查询条件接口 */ export interface QueryOptions { limit?: number; offset?: number; orderBy?: string; orderDirection?: 'asc' | 'desc'; filter?: Record; } /** * Settings 存储提供者 * 应用层可替换底层存储(JSON 文件 / 数据库) * * 多租户场景:`tenant` 参数可选,应用层可据此过滤不同租户的设置。 */ export interface SettingsProvider { /** 获取设置(可按租户过滤) */ getSettings(tenant?: TenantContext): TSettings | Promise; /** 更新设置(可按租户过滤) */ updateSettings(updates: Partial, tenant?: TenantContext): TSettings | Promise; /** 重置设置 */ resetSettings?(tenant?: TenantContext): TSettings | Promise; /** 获取底层存储(可选,用于高级场景) */ getStorage?(): KVStorageAdapter; } /** * 对话存储提供者 * 应用层可替换底层存储,自定义实体结构 * * 支持同步和异步两种模式: * - JSON 文件存储:同步方法 * - 数据库存储(TypeORM):异步方法 * * 多租户场景:`tenant` 参数可选,应用层可据此过滤不同租户的对话数据。 */ export interface ChatStoreProvider { /** 获取线程列表(支持异步,可按租户过滤) */ getThreads(workspaceId?: number | string, tenant?: TenantContext): TThread[] | Promise; /** 获取单个线程(支持异步) */ getThread(id: number | string, tenant?: TenantContext): TThread | undefined | Promise; /** 创建线程(支持异步) */ createThread(data: Partial, tenant?: TenantContext): TThread | Promise; /** 更新线程(支持异步) */ updateThread(id: number | string, data: Partial, tenant?: TenantContext): TThread | undefined | Promise; /** 删除线程(支持异步) */ deleteThread(id: number | string, tenant?: TenantContext): boolean | Promise; /** 获取消息列表(支持异步) */ getMessages(threadId: number | string, options?: QueryOptions, tenant?: TenantContext): { items: TMessage[]; total: number; hasMore: boolean; } | Promise<{ items: TMessage[]; total: number; hasMore: boolean; }>; /** 添加消息(支持异步,可携带租户上下文) */ addMessage(data: Partial & { threadId: number | string; role: string; content: string; }, tenant?: TenantContext): TMessage | Promise; /** 更新消息(支持异步) */ updateMessage(threadId: number | string, id: number | string, data: Partial, tenant?: TenantContext): TMessage | undefined | Promise; /** 删除消息(支持异步) */ deleteMessage(threadId: number | string, id: number | string, tenant?: TenantContext): boolean | Promise; /** 清空消息(支持异步) */ clearThreadMessages(threadId: number | string, tenant?: TenantContext): void | Promise; /** 构建线程历史(用于 AgentEngine,可按租户过滤) */ buildThreadHistory(threadId: number | string, limit?: number, tenant?: TenantContext): Message[] | Promise; /** 搜索消息 */ searchMessages?(query: string, options?: { workspaceId?: number | string; limit?: number; }): Array | Promise>; /** 导出线程 */ exportThread?(threadId: number | string, format: 'markdown' | 'json' | 'text'): string | Promise; /** 获取底层存储(可选) */ getStorage?(): { threads: ListStorageAdapter; messages: (threadId: number | string) => ListStorageAdapter; }; } /** * Agent Profile 存储提供者 * * 多租户场景:`tenant` 参数可选,应用层可据此过滤不同租户的 Profile。 */ export interface AgentProfileProvider { listProfiles(tenant?: TenantContext): TProfile[] | Promise; getProfile(id: number | string, tenant?: TenantContext): TProfile | undefined | Promise; getDefaultProfile(tenant?: TenantContext): TProfile | undefined | Promise; createProfile(data: Partial, tenant?: TenantContext): TProfile | Promise; updateProfile(id: number | string, data: Partial, tenant?: TenantContext): TProfile | undefined | Promise; deleteProfile(id: number | string, tenant?: TenantContext): boolean | Promise; /** 扩展:设置默认 Profile */ setDefaultProfile?(id: number | string, tenant?: TenantContext): void | Promise; /** 获取底层存储 */ getStorage?(): ListStorageAdapter; } /** * Prompt 构建者 * 应用层可自定义 Prompt 构建逻辑 */ export interface PromptBuilderProvider { buildDefaultPrompt(profile: BaseAgentProfileEntity, tools: ToolRegistry, memory?: string, specialists?: BaseAgentProfileEntity[], specialistResourceMap?: Record, skills?: SkillManager): string; buildSpecialistPrompt(profile: BaseAgentProfileEntity, tools: ToolRegistry, skills: SkillManager, memory?: string): string; resolveToolDisplayName(toolName: string, registry: ToolRegistry): string; } /** * 模型配置解析者 * 应用层可自定义模型选择逻辑 */ export interface ModelConfigResolver { resolve(modelConfigId?: string): { id: string; provider: string; model: string; apiKey?: string; baseUrl?: string; }; createProvider(modelConfigId?: string, modelOverride?: string): unknown; } /** * SSE 响应适配器接口 * 框架无关,支持 Express / Koa / Fastify 等 * * 注意:此接口与 `types.ts` 中的 `SSEResponse` 结构一致。 * 统一使用 `SSEResponse` 类型,此别名仅用于 SPI 上下文。 */ export interface SSEResponseAdapter { /** 写入数据 */ write(data: string): void; /** 结束响应 */ end(): void; /** 响应是否已结束 */ readonly writableEnded: boolean; /** 设置响应头 */ setHeader(name: string, value: string | number): void; /** 刷新响应头 */ flushHeaders?(): void; /** 设置状态码(错误时使用) */ status?(code: number): void; /** 返回 JSON(错误时使用) */ json?(data: unknown): void; } /** * 请求上下文适配器 * 用于提取用户信息、权限等 */ export interface RequestContextAdapter { /** 获取用户 ID */ getUserId?(): string | number | undefined; /** 获取工作空间 ID */ getWorkspaceId?(): number | string | undefined; /** 获取请求头 */ getHeader(name: string): string | undefined; /** 检查权限 */ hasPermission?(permission: string): boolean; /** 获取原始请求对象 */ getRawRequest?(): unknown; /** 获取原始响应对象 */ getRawResponse?(): unknown; } /** * AgentServer 工厂配置(泛型版本) * * 此接口是 `AgentServerOptions`(types.ts)的泛型扩展版本, * 用于需要自定义实体类型的场景。实际工厂函数 `createAgentServer` * 接受 `AgentServerOptions`,此接口主要用于类型约束和文档。 * * 注意:`createSSEResponseAdapter` / `createRequestContextAdapter` 等 * 框架适配器字段已在实际使用中移除——SSE 适配器由调用方在 * `runAgentStream(res, ...)` 时直接传入,无需工厂配置。 */ export interface AgentServerSPIOptions { settingsProvider?: SettingsProvider; chatStoreProvider?: ChatStoreProvider; agentProfileProvider?: AgentProfileProvider; promptBuilder?: PromptBuilderProvider; modelConfigResolver?: ModelConfigResolver; } export interface ThreadEntity extends BaseThreadEntity { workspaceId?: number | string; summary?: string; messageCount: number; agentProfileId?: number | string; source?: 'local' | 'a2a'; automationRunId?: number | string; } export interface MessageEntity extends BaseMessageEntity { type: 'text' | 'code' | 'tool_call' | 'reasoning' | 'image'; meta?: Record; updatedAt?: Date | string | number; } export interface WorkspaceEntity extends BaseWorkspaceEntity { description?: string; color?: string; icon?: string; status: 'active' | 'archived'; threadCount: number; automationCount: number; } export type { AgentProfileEntity } from '../types.js'; export interface SettingsEntity extends BaseSettingsEntity { theme?: 'dark' | 'light' | 'system'; language?: string; apiKeys?: Record; notifications?: { taskComplete?: boolean; }; agentConfig?: Record; modelProviders?: Array<{ id: string; provider: string; model: string; apiKey?: string; baseUrl?: string; }>; defaultModelId?: string; } //# sourceMappingURL=types.d.ts.map