























@@ -1,6 +1,6 @@
11import { beforeEach, describe, expect, it } from "vitest";
22import type { OpenClawConfig } from "../config/config.js";
3-import { resetPluginRuntimeStateForTest, setActivePluginRegistry } from "../plugins/runtime.js";
3+import { setActivePluginRegistry } from "../plugins/runtime.js";
44import { createTestRegistry } from "../test-utils/channel-plugins.js";
55import { createSessionConversationTestRegistry } from "../test-utils/session-conversation-registry.js";
66import { resolveChannelModelOverride } from "./model-overrides.js";
@@ -64,48 +64,6 @@ describe("resolveChannelModelOverride", () => {
6464},
6565expected: { model: "demo-provider/demo-parent-model", matchKey: "123" },
6666},
67-{
68-name: "preserves feishu topic ids for direct matches",
69-input: {
70-cfg: {
71-channels: {
72-modelByChannel: {
73-feishu: {
74-"oc_group_chat:topic:om_topic_root": "demo-provider/demo-feishu-topic-model",
75-},
76-},
77-},
78-} as unknown as OpenClawConfig,
79-channel: "feishu",
80-groupId: "oc_group_chat:topic:om_topic_root",
81-},
82-expected: {
83-model: "demo-provider/demo-feishu-topic-model",
84-matchKey: "oc_group_chat:topic:om_topic_root",
85-},
86-},
87-{
88-name: "preserves feishu topic ids when falling back from parent session key",
89-input: {
90-cfg: {
91-channels: {
92-modelByChannel: {
93-feishu: {
94-"oc_group_chat:topic:om_topic_root": "demo-provider/demo-feishu-topic-model",
95-},
96-},
97-},
98-} as unknown as OpenClawConfig,
99-channel: "feishu",
100-groupId: "unrelated",
101-parentSessionKey:
102-"agent:main:feishu:group:oc_group_chat:topic:om_topic_root:sender:ou_topic_user",
103-},
104-expected: {
105-model: "demo-provider/demo-feishu-topic-model",
106-matchKey: "oc_group_chat:topic:om_topic_root",
107-},
108-},
10967] as const)("$name", ({ input, expected }) => {
11068const resolved = resolveChannelModelOverride(input);
11169expect(resolved?.model).toBe(expected.model);
@@ -168,48 +126,58 @@ describe("resolveChannelModelOverride", () => {
168126expect(resolved?.matchKey).toBe("thread-parent");
169127});
170128171-it("keeps bundled Feishu parent fallback matching before registry bootstrap", () => {
172-resetPluginRuntimeStateForTest();
173-174-const resolved = resolveChannelModelOverride({
175-cfg: {
176-channels: {
177-modelByChannel: {
178-feishu: {
179-"oc_group_chat:topic:om_topic_root": "demo-provider/demo-feishu-topic-model",
129+it("uses plugin-owned parent fallback candidates", () => {
130+setActivePluginRegistry(
131+createTestRegistry([
132+{
133+pluginId: "scoped-chat",
134+source: "test",
135+plugin: {
136+id: "scoped-chat",
137+meta: {
138+id: "scoped-chat",
139+label: "Scoped Chat",
140+selectionLabel: "Scoped Chat",
141+docsPath: "/channels/scoped-chat",
142+blurb: "test stub.",
143+},
144+capabilities: { chatTypes: ["group"] },
145+conversationBindings: {
146+buildModelOverrideParentCandidates: ({
147+ parentConversationId,
148+}: {
149+parentConversationId?: string | null;
150+}) =>
151+parentConversationId === "room:topic:thread:sender:user"
152+ ? ["room:topic:thread", "room"]
153+ : [],
154+},
155+config: {
156+listAccountIds: () => ["default"],
157+resolveAccount: () => ({}),
180158},
181159},
182160},
183-} as unknown as OpenClawConfig,
184-channel: "feishu",
185-groupId: "unrelated",
186-parentSessionKey:
187-"agent:main:feishu:group:oc_group_chat:topic:om_topic_root:sender:ou_topic_user",
188-});
189-190-expect(resolved?.model).toBe("demo-provider/demo-feishu-topic-model");
191-expect(resolved?.matchKey).toBe("oc_group_chat:topic:om_topic_root");
192-});
161+]),
162+);
193163194-it("keeps mixed-case Feishu scoped markers when matching parent session fallbacks", () => {
195164const resolved = resolveChannelModelOverride({
196165cfg: {
197166channels: {
198167modelByChannel: {
199-feishu: {
200-"oc_group_chat:topic:om_topic_root": "demo-provider/demo-feishu-topic-model",
168+"scoped-chat": {
169+"room:topic:thread": "demo-provider/demo-scoped-model",
201170},
202171},
203172},
204173} as unknown as OpenClawConfig,
205-channel: "feishu",
174+channel: "scoped-chat",
206175groupId: "unrelated",
207-parentSessionKey:
208-"agent:main:feishu:group:oc_group_chat:Topic:om_topic_root:Sender:ou_topic_user",
176+parentSessionKey: "agent:main:scoped-chat:group:room:topic:thread:sender:user",
209177});
210178211-expect(resolved?.model).toBe("demo-provider/demo-feishu-topic-model");
212-expect(resolved?.matchKey).toBe("oc_group_chat:topic:om_topic_root");
179+expect(resolved?.model).toBe("demo-provider/demo-scoped-model");
180+expect(resolved?.matchKey).toBe("room:topic:thread");
213181});
214182215183it("prefers parent conversation ids over channel-name fallbacks", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。