/** * TestProvider —— 仅供单测使用的离线模型 provider。 * * 设计目的: * - 让单测**不依赖**生产 Linkque 模型清单(Linkque 清单一改不该波及测试)。 * - 让单测**不联网**:直接返回固定预设响应,断言 streamChat 的桥接逻辑(事件映射、 * 收敛语义)而非真实 LLM 行为。 * * 实现方式: * - 复用 pi-ai 的 `createFauxCore`(为测试场景设计的离线 provider 内核):它返回 * `stream / streamSimple / models / setResponses`,内部走一个 `assistantMessageEventStream`, * 按 `setResponses` 预设的 AssistantMessage 流式吐出,不发起任何网络请求。 * - 用 `createProvider` 把 faux core 的 streamSimple 包装成独立 Provider,api 以单对象 * 形式(`{ stream, streamSimple }`)注入,保证所有 model(不管 model.api)都走 faux * stream(pi-ai `createProvider` 在 api 为单对象时不再按 model.api 分派)。 * - `auth.apiKey` 用一个恒返回占位 key 的最小 ApiKeyAuth,让 `resolveProviderAuth` 始终 * 判定"已配置"(faux 不读 key,占位即可)。真实 apiKey 由 Agent.getApiKey 注入,但在 * 离线路径上无意义。 * * 与 LinkqueProvider 的关系:二者都通过 `models.setProvider(...)` 接入,agentService * 按 {@link EModelProvider} 分派到其中一个。TestProvider 的 provider id、模型清单、协议 * 全部独立,生产代码永不引用本文件。 * * 不再依赖 `@earendil-works/pi-coding-agent`:返回独立 Provider(由调用方 setProvider), * 替代旧 `ModelRuntime.registerProvider` + `streamSimple` 字段注入。 */ import { createFauxCore, type Provider } from '@earendil-works/pi-ai/compat'; /** TestProvider 在 pi-ai Models 中的 provider id(小写,与 enum `EModelProvider.TEST` 解耦)。 */ export declare const TEST_PROVIDER_ID = "test"; /** TestProvider 固定的协议 id(自定义,脱离开内置 api registry,走 faux streamSimple)。 */ export declare const TEST_API: "test-messages"; /** TestProvider 默认返回的固定文案,确保单测可确定性断言。 */ export declare const TEST_DEFAULT_RESPONSE: "test-ok"; /** TestProvider 暴露的稳定模型 id(单测传 `options.model` 时用)。 */ export declare const TEST_MODEL_ID: "test-model-1"; /** * TestProvider 的运行时句柄:持有 faux 内核与组装好的 provider,可重设预设响应。 * * 单测可通过 `handle.core.setResponses([...])` 覆盖默认响应,但本包默认提供固定文案, * 大多数用例无需手动设置即可拿到确定性输出。 */ export interface ITestProviderHandle { /** provider id(恒为 {@link TEST_PROVIDER_ID})。 */ providerId: string; /** faux 内核,暴露 callCount / setResponses 等供断言。 */ core: ReturnType; /** 组装好的 Provider,由调用方 `models.setProvider(handle.provider)` 接入。 */ provider: Provider; } /** * 构造 TestProvider(离线 faux 内核 + 固定响应)。 * * 返回的 handle 含组装好的 Provider,由调用方 `models.setProvider(handle.provider)` * 接入。每次调用生成新的 faux core 与响应队列(无共享状态)。 * * @returns 运行时句柄,供单测按需重设预设响应或读取调用计数。 */ export declare function createTestProvider(): ITestProviderHandle;