fix(doctor): include fallback channel warnings · openclaw/openclaw@60acfd9
stainlu
·
2026-05-11
·
via Recent Commits to openclaw:main
File tree
src/commands/doctor/shared
| Original file line number | Diff line number | Diff line change |
|---|
@@ -573,4 +573,44 @@ describe("doctor preview warnings", () => {
|
573 | 573 | expect(warnings.join("\n")).not.toContain("slack"); |
574 | 574 | expect(warnings.join("\n")).not.toContain("defaults"); |
575 | 575 | }); |
| 576 | + |
| 577 | +it("warns for default-routed configured channels when other routes exist", () => { |
| 578 | +const warnings = collectChannelBoundMessageToolPolicyWarnings({ |
| 579 | +channels: { |
| 580 | +discord: {}, |
| 581 | +telegram: {}, |
| 582 | +}, |
| 583 | +agents: { |
| 584 | +list: [ |
| 585 | +{ |
| 586 | +id: "main", |
| 587 | +default: true, |
| 588 | +tools: { |
| 589 | +allow: ["read"], |
| 590 | +}, |
| 591 | +}, |
| 592 | +{ |
| 593 | +id: "commander", |
| 594 | +tools: { |
| 595 | +profile: "messaging", |
| 596 | +}, |
| 597 | +}, |
| 598 | +], |
| 599 | +}, |
| 600 | +bindings: [ |
| 601 | +{ |
| 602 | +agentId: "commander", |
| 603 | +match: { |
| 604 | +channel: "discord", |
| 605 | +}, |
| 606 | +}, |
| 607 | +], |
| 608 | +}); |
| 609 | + |
| 610 | +expect(warnings).toEqual([ |
| 611 | +expect.stringContaining('Agent "main" is routed from channel "telegram"'), |
| 612 | +]); |
| 613 | +expect(warnings.join("\n")).not.toContain("commander"); |
| 614 | +expect(warnings.join("\n")).not.toContain("discord"); |
| 615 | +}); |
576 | 616 | }); |
| Original file line number | Diff line number | Diff line change |
|---|
@@ -242,13 +242,18 @@ function collectBoundChannelTargets(cfg: OpenClawConfig): Array<{
|
242 | 242 | }; |
243 | 243 | |
244 | 244 | const routeBindings: AgentRouteBinding[] = listRouteBindings(cfg); |
| 245 | +const explicitlyBoundChannels = new Set<string>(); |
245 | 246 | for (const binding of routeBindings) { |
246 | | -add(binding.agentId, binding.match.channel); |
| 247 | +const channel = binding.match.channel.trim(); |
| 248 | +add(binding.agentId, channel); |
| 249 | +if (channel) { |
| 250 | +explicitlyBoundChannels.add(channel); |
| 251 | +} |
247 | 252 | } |
248 | 253 | |
249 | | -if (routeBindings.length === 0) { |
250 | | - const defaultAgentId = resolveDefaultAgentId(cfg); |
251 | | -for (const channel of listConfiguredChannelIds(cfg)) { |
| 254 | +const defaultAgentId = resolveDefaultAgentId(cfg); |
| 255 | +for (const channel of listConfiguredChannelIds(cfg)) { |
| 256 | +if (!explicitlyBoundChannels.has(channel)) { |
252 | 257 | add(defaultAgentId, channel); |
253 | 258 | } |
254 | 259 | } |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。