




















@@ -443,6 +443,55 @@ describe("agent delivery helpers", () => {
443443expect(plan.targetResolutionError).toBe(reservedError);
444444});
445445446+it("keeps directory-resolved reserved explicit targets when session-route canonicalization misses", async () => {
447+mocks.resolveOutboundChannelPlugin.mockReturnValue({
448+messaging: { resolveOutboundSessionRoute: vi.fn(), targetResolver: {} },
449+});
450+mocks.resolveOutboundTarget.mockReturnValueOnce({
451+ok: false,
452+error: new Error('Reserved target "current" for Telegram'),
453+});
454+mocks.resolveChannelTarget.mockResolvedValueOnce({
455+ok: true,
456+target: {
457+to: "telegram:-1002458651455",
458+kind: "group",
459+source: "directory",
460+resolutionSource: "directory",
461+},
462+});
463+mocks.resolveOutboundSessionRoute.mockResolvedValueOnce(null);
464+465+const plan = await resolveAgentDeliveryPlanWithSessionRoute({
466+cfg: {} as OpenClawConfig,
467+agentId: "agent",
468+currentSessionKey: "agent:main",
469+sessionEntry: undefined,
470+requestedChannel: "telegram",
471+explicitTo: "current",
472+accountId: "work",
473+wantsDelivery: true,
474+});
475+476+expect(mocks.resolveOutboundSessionRoute).toHaveBeenCalledWith({
477+cfg: {},
478+channel: "telegram",
479+agentId: "agent",
480+accountId: "work",
481+target: "telegram:-1002458651455",
482+resolvedTarget: {
483+to: "telegram:-1002458651455",
484+kind: "group",
485+source: "directory",
486+resolutionSource: "directory",
487+},
488+currentSessionKey: "agent:main",
489+threadId: undefined,
490+});
491+expect(plan.resolvedTo).toBe("telegram:-1002458651455");
492+expect(plan.targetResolutionError).toBeUndefined();
493+});
494+446495it("surfaces stored explicit target errors even when explicit validation is disabled", () => {
447496const targetResolutionError = new Error('reserved target "current"');
448497此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。