/** * PersistenceManager - 持久化管理器 * * 职责: * 1. 管理所有已注册的 PersistenceProvider 实例 * 2. 按路由规则将 save/read 请求分发到合适的 Provider * 3. 提供统一的 saveFile / saveData / readFile / readData / delete / exists / getAccessibleUrl 接口 * 4. 支持从 PersistenceConfig 初始化(自动创建 LocalFS / S3 / DB Provider) * * 使用方式: * ```ts * // 配置(仅存储配置,不创建 Provider,延迟到首次调用时初始化) * PersistenceManager.configure(config); * * // 注册延迟创建的 Provider 工厂(如 DB Provider 需要 IoC 容器) * PersistenceManager.registerProviderFactory('db', async () => { * return await container.getAsync(TypeOrmDbProvider); * }); * * // 保存文件(首次调用时自动触发初始化) * const result = await PersistenceManager.saveFile('report.pdf', buffer, { * artifactType: 'report', * contentType: 'application/pdf', * }); * ``` */ import type { PersistenceProvider, PersistenceConfig, FileMeta, DataMeta, PersistedFile, PersistedData } from '../../spi/persistence-interfaces.js'; import type { NodeAutomationStorageType } from '@cicctencent/agent-core'; export declare class PersistenceManager { private static get _state(); private static get providers(); private static set providers(value); private static get routes(); private static set routes(value); private static get defaultProvider(); private static set defaultProvider(value); private static get initialized(); private static set initialized(value); private static get pendingConfig(); private static set pendingConfig(value); private static get providerFactories(); private static set providerFactories(value); private static get initPromise(); private static set initPromise(value); /** 配置持久化管理器(仅存储配置,不创建 Provider) */ static configure(config: PersistenceConfig): void; /** 注册 Provider 工厂(延迟创建,在 ensureInitialized 时调用) */ static registerProviderFactory(name: string, factory: () => Promise): void; /** 确保已初始化(首次调用时触发 Provider 创建,幂等) */ static ensureInitialized(): Promise; private static doInit; /** 初始化持久化管理器(兼容旧接口,等价于 configure + ensureInitialized) */ static init(config: PersistenceConfig): Promise; /** 注册自定义 Provider */ static registerProvider(name: string, provider: PersistenceProvider): void; /** 获取 Provider */ static getProvider(name: string): PersistenceProvider | undefined; /** 列出所有已注册的 Provider 名称 */ static listProviders(): string[]; /** 检查是否已初始化 */ static isInitialized(): boolean; /** 获取当前配置快照 */ static getConfig(): PersistenceConfig; /** 获取默认 Provider 名称 */ static getDefaultProvider(): string; /** 列出所有命名源(type:source 格式) */ static listNamedSources(): { type: string; source: string; }[]; /** * 保存文件 - 按路由规则自动选择 Provider */ static saveFile(key: string, content: Buffer | NodeJS.ReadableStream, meta?: FileMeta): Promise; /** * 保存结构化数据 - 按路由规则自动选择 Provider */ static saveData(key: string, data: unknown, meta?: DataMeta): Promise; /** 读取文件 - 通过 URI 或 key 解析 Provider */ static readFile(keyOrUri: string): Promise; /** 读取结构化数据 */ static readData(keyOrUri: string): Promise; /** * 注册命名源 Provider * * 用于多源场景:将同一个存储类型的多个实例注册为命名源, * 例如 `registerNamedSource('s3', 'backup', backupS3Provider)` 后, * 即可通过 `getProviderByType('s3', 'backup')` 或 `saveDataTo(key, data, meta, 's3', 'backup')` 访问。 * * @param type 存储类型: 'db' | 's3' | 'cos' | 'file' | 'local' * @param source 源名称,如 'backup'、'analytics' * @param provider Provider 实例 */ static registerNamedSource(type: NodeAutomationStorageType, source: string, provider: PersistenceProvider): void; /** * 按类型和源名称解析 Provider * @param type 存储类型: 'db' | 's3' | 'cos' | 'file' | 'local' * @param source 源名称(可选),如 'backup'、'analytics' * @returns 匹配的 Provider,未找到时返回 undefined */ static getProviderByType(type: NodeAutomationStorageType, source?: string): PersistenceProvider | undefined; /** * 保存文件到指定类型/源,key 原样传递(不走路由规则) * * 适用于 key 语义需要严格固定的场景(如观测归档 obs/ 前缀): * 路由规则的 keyPrefix 会在 key 前拼接前缀,破坏调用方对 key 的预期。 * 未指定 type/source 时使用 defaultProvider。 * * @param key 存储键(原样传递,不追加后缀、不改写前缀) * @param content 文件内容(Buffer 或流) * @param meta 元数据(contentType / size / artifactType / tags) * @param type 存储类型,默认使用 defaultProvider * @param source 源名称(可选),用于多源场景 */ static saveFileTo(key: string, content: Buffer | NodeJS.ReadableStream, meta?: FileMeta, type?: NodeAutomationStorageType, source?: string): Promise; /** * 保存结构化数据到指定类型/源 * @param key 存储键 * @param data 任意可序列化数据 * @param meta 元数据(contentType / tags) * @param type 存储类型: 'db' | 's3' | 'cos' | 'file' | 'local',默认 'db' * @param source 源名称(可选),用于多源场景 */ static saveDataTo(key: string, data: unknown, meta?: DataMeta, type?: NodeAutomationStorageType, source?: string): Promise; /** * 从指定类型/源读取结构化数据 * @param keyOrUri 存储键或 URI * @param type 存储类型: 'db' | 's3' | 'cos' | 'file' | 'local',默认 'db' * @param source 源名称(可选) */ static readDataFrom(keyOrUri: string, type?: NodeAutomationStorageType, source?: string): Promise; /** 删除 */ static delete(keyOrUri: string): Promise; /** 检查是否存在 */ static exists(keyOrUri: string): Promise; /** 获取可访问 URL */ static getAccessibleUrl(keyOrUri: string, expirySec?: number): Promise; /** 路由匹配:根据 key 和 meta 选择 Provider */ private static route; /** 检查路由规则是否匹配 */ private static matchRoute; /** 从 key 或 URI 解析 Provider */ private static resolveProvider; /** * 重置 PersistenceManager 全局单例状态(测试用)。 * * 清空 `globalThis.__PERSISTENCE_MANAGER_STATE__` 上的全部状态 *(providers / routes / config / factories / initPromise), * 确保测试间完全隔离。仅用于测试,不得在生产代码中调用。 */ static resetStateForTest(): void; } //# sourceMappingURL=persistence.manager.d.ts.map