Skip to content

Commit 61a7aaa

Browse files
committed
🐛 修复 Provider 注册被 tree-shake 导致 e2e 失败
package.json 限制 sideEffects 到 CSS 文件,生产构建时 rspack 会 tree-shake 纯副作用导入。原本 providers/index.ts 用 \`import "./openai"\` 的副作用导入触发 provider 注册,在生产 bundle 中被剥离,导致运行时报 "Unsupported LLM provider: openai"。 修复:把内置 provider 注册移到 registry.ts 模块内,与 providerRegistry 单例同模块。消费者 import providerRegistry 时 必然会触发 registry.ts 的顶层语句,注册就一定发生。 验证: - dist bundle 现在包含 d7.register({name:"openai",...}) 和 d7.register({name:"anthropic",...}) - 6 个 agent e2e 测试全部恢复通过 - 1736/1736 单元测试通过
1 parent 41e92c1 commit 61a7aaa

File tree

4 files changed

+10
-12
lines changed

4 files changed

+10
-12
lines changed

src/app/service/agent/core/providers/anthropic.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -324,13 +324,10 @@ export function parseAnthropicStream(
324324
// ---- LLMProvider 接口适配 ----
325325

326326
import type { LLMProvider } from "./types";
327-
import { providerRegistry } from "./registry";
328327

329-
/** Anthropic Claude 格式的 Provider 实现 */
328+
/** Anthropic Claude 格式的 Provider 实现(注册在 providers/index.ts) */
330329
export const anthropicProvider: LLMProvider = {
331330
name: "anthropic",
332331
buildRequest: (input) => buildAnthropicRequest(input.model, input.request, input.resolver),
333332
parseStream: (reader, onEvent, signal) => parseAnthropicStream(reader, onEvent, signal),
334333
};
335-
336-
providerRegistry.register(anthropicProvider);

src/app/service/agent/core/providers/index.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
// 导入 provider 实现以触发注册副作用
2-
import "./openai";
3-
import "./anthropic";
4-
1+
// Provider 注册发生在 registry.ts(消费者 import providerRegistry 时自动注册)
52
export { providerRegistry } from "./registry";
63
export type {
74
LLMProvider,

src/app/service/agent/core/providers/openai.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,10 @@ export function parseOpenAIStream(
257257
// ---- LLMProvider 接口适配 ----
258258

259259
import type { LLMProvider } from "./types";
260-
import { providerRegistry } from "./registry";
261260

262-
/** OpenAI 兼容格式的 Provider 实现 */
261+
/** OpenAI 兼容格式的 Provider 实现(注册在 providers/index.ts) */
263262
export const openaiProvider: LLMProvider = {
264263
name: "openai",
265264
buildRequest: (input) => buildOpenAIRequest(input.model, input.request, input.resolver),
266265
parseStream: (reader, onEvent, signal) => parseOpenAIStream(reader, onEvent, signal),
267266
};
268-
269-
providerRegistry.register(openaiProvider);

src/app/service/agent/core/providers/registry.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import type { LLMProvider } from "./types";
2+
import { openaiProvider } from "./openai";
3+
import { anthropicProvider } from "./anthropic";
24

35
/** LLM Provider 注册表,支持按 provider 名称查找实现 */
46
export class ProviderRegistry {
@@ -26,3 +28,8 @@ export class ProviderRegistry {
2628
}
2729

2830
export const providerRegistry = new ProviderRegistry();
31+
32+
// 注册内置 Provider(与 registry 同模块,消费者使用 providerRegistry 即触发注册,
33+
// 避免 bundler 对纯副作用导入的 tree-shake)
34+
providerRegistry.register(openaiProvider);
35+
providerRegistry.register(anthropicProvider);

0 commit comments

Comments
 (0)