
























@@ -543,10 +543,16 @@ describe("scheduleRestartSentinelWake", () => {
543543BodyForAgent: "stamped:Reply with exactly: Yay! I did it!",
544544BodyForCommands: "",
545545CommandBody: "",
546-CommandAuthorized: false,
546+CommandAuthorized: true,
547+GatewayClientScopes: ["operator.admin"],
548+InputProvenance: {
549+kind: "internal_system",
550+sourceChannel: "whatsapp",
551+sourceTool: "restart-sentinel",
552+},
547553SessionKey: "agent:main:main",
548-Provider: "whatsapp",
549-Surface: "whatsapp",
554+Provider: "webchat",
555+Surface: "webchat",
550556OriginatingChannel: "whatsapp",
551557OriginatingTo: "+15550002",
552558MessageThreadId: "thread-42",
@@ -600,6 +606,72 @@ describe("scheduleRestartSentinelWake", () => {
600606);
601607});
602608609+it("authorizes routed agentTurn continuations while preserving Telegram topic routing", async () => {
610+mocks.readRestartSentinel.mockResolvedValue({
611+payload: {
612+sessionKey: "agent:main:telegram:group:-1003826723328:topic:13757",
613+ts: 123,
614+continuation: {
615+kind: "agentTurn",
616+message: "continue in topic",
617+},
618+},
619+} as unknown as Awaited<ReturnType<typeof mocks.readRestartSentinel>>);
620+mocks.parseSessionThreadInfo.mockReturnValue({
621+baseSessionKey: "agent:main:telegram:group:-1003826723328",
622+threadId: "13757",
623+});
624+mocks.loadSessionEntry.mockReturnValue({
625+cfg: {},
626+entry: {
627+sessionId: "agent:main:telegram:group:-1003826723328:topic:13757",
628+updatedAt: 0,
629+origin: { provider: "telegram", chatType: "group" },
630+},
631+store: {},
632+storePath: "/tmp/sessions.json",
633+canonicalKey: "agent:main:telegram:group:-1003826723328:topic:13757",
634+legacyKey: undefined,
635+});
636+mocks.deliveryContextFromSession.mockReturnValue({
637+channel: "telegram",
638+to: "telegram:-1003826723328:topic:13757",
639+accountId: "default",
640+threadId: 13757,
641+});
642+mocks.resolveOutboundTarget.mockReturnValue({
643+ok: true as const,
644+to: "telegram:-1003826723328:topic:13757",
645+});
646+647+await scheduleRestartSentinelWake({ deps: {} as never });
648+649+expect(mocks.recordInboundSessionAndDispatchReply).toHaveBeenCalledWith(
650+expect.objectContaining({
651+channel: "telegram",
652+accountId: "default",
653+routeSessionKey: "agent:main:telegram:group:-1003826723328:topic:13757",
654+ctxPayload: expect.objectContaining({
655+Body: "continue in topic",
656+CommandAuthorized: true,
657+GatewayClientScopes: ["operator.admin"],
658+InputProvenance: {
659+kind: "internal_system",
660+sourceChannel: "telegram",
661+sourceTool: "restart-sentinel",
662+},
663+Provider: "webchat",
664+Surface: "webchat",
665+ChatType: "group",
666+OriginatingChannel: "telegram",
667+OriginatingTo: "telegram:-1003826723328:topic:13757",
668+ExplicitDeliverRoute: true,
669+MessageThreadId: "13757",
670+}),
671+}),
672+);
673+});
674+603675it("preserves derived reply transport ids in continuation context", async () => {
604676mocks.getChannelPlugin.mockReturnValue({
605677id: "whatsapp",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。