From b0ee27eb5e814ed8398cfd08f758a511f26d53dd Mon Sep 17 00:00:00 2001 From: Karthik P Date: Sat, 7 Nov 2026 12:24:29 +0530 Subject: [PATCH 1/2] test(server): schedule_task updates keep freshSession Fails on main: the update path never forwards freshSession, so the task stays on new_thread. --- apps/server/src/mcp/toolkits/core.test.ts | 48 +++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/apps/server/src/mcp/toolkits/core.test.ts b/apps/server/src/mcp/toolkits/core.test.ts index 602031290763d..195d4273dfac1 100644 --- a/apps/server/src/mcp/toolkits/core.test.ts +++ b/apps/server/src/mcp/toolkits/core.test.ts @@ -15,6 +15,7 @@ import { RunId, ScheduledTaskError, ScheduledTask, + type ScheduledTaskUpsertInput, RuntimeRequestId, ThreadId, TurnItemId, @@ -724,6 +725,53 @@ it.effect("a caller cannot rewrite a scheduled task that runs above its own mode ), ); +it.effect("updating a scheduled task with freshSession saves and reports fresh sessions", () => { + const saved: Array = []; + return Effect.gen(function* () { + const server = yield* McpServer.McpServer; + const result = yield* server + .callTool({ + name: "schedule_task", + arguments: { scheduledTaskId: "task-auto", freshSession: true }, + }) + .pipe( + Effect.provideService(McpInvocationContext.McpInvocationContext, clientScope("auto")), + Effect.provideService(McpSchema.McpServerClient, client), + ); + expect(result.isError).toBe(false); + expect(saved.map((input) => input.threadMode)).toEqual(["fresh_session"]); + expect(result.structuredContent).toMatchObject({ freshSession: true }); + }).pipe( + Effect.provide( + layerOrchestratorToolkit.pipe( + Layer.provideMerge(McpHttpServer.layerInProcessMcpServer), + Layer.provide(NodeCrypto.layer), + Layer.provide(Layer.mock(ThreadManagement.ThreadManagementService)({})), + Layer.provide(ServerSettings.layerTest()), + Layer.provide(Layer.mock(ProviderRegistry.ProviderRegistry)({})), + Layer.provide(Layer.mock(ProviderAdapterRegistry.ProviderAdapterRegistryV2)({})), + Layer.provide( + Layer.mock(ScheduledTaskService.ScheduledTaskService)({ + list: () => Effect.succeed({ tasks: [scheduledTask("task-auto", "auto")] }), + upsert: (input) => { + saved.push(input); + return Effect.succeed({ + task: { ...(scheduledTask("task-auto", "auto") as object), ...input }, + } as never); + }, + }), + ), + Layer.provide(Layer.mock(ProjectService.ProjectService)({})), + Layer.provide(Layer.mock(SecretRequests.SecretRequests)({})), + Layer.provide(Layer.mock(PeerForwarding.PeerForwarding)({})), + Layer.provide(Layer.mock(PeerLinkRequests.PeerLinkRequests)({})), + Layer.provide(Layer.mock(PeerLinks.PeerLinks)({})), + Layer.provide(Layer.mock(RemoteDelegation.RemoteDelegation)({})), + ), + ), + ); +}); + it.effect.each([ { scenario: "explains why a webhook task cannot run manually", From 649ce3375e0802f10b052bfd46ffbbfbcabe5291 Mon Sep 17 00:00:00 2001 From: Karthik P Date: Sat, 7 Nov 2026 12:27:47 +0530 Subject: [PATCH 2/2] fix(server): schedule_task updates save freshSession The schedule_task update branch picked its fields out of the tool input and left out freshSession, so updateScheduledTask never saw it. An update reported success while the task kept its old thread mode. Fixes #32258 --- apps/server/src/mcp/toolkits/orchestrator/handlers.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/server/src/mcp/toolkits/orchestrator/handlers.ts b/apps/server/src/mcp/toolkits/orchestrator/handlers.ts index 3db297bc0d303..ceceaa8865558 100644 --- a/apps/server/src/mcp/toolkits/orchestrator/handlers.ts +++ b/apps/server/src/mcp/toolkits/orchestrator/handlers.ts @@ -101,7 +101,7 @@ const handlers = { { refused: "schedule tasks in this environment" }, ), McpToolAccess.writes( - ({ scheduledTaskId, prompt, title, schedule, enabled, bindToCurrentThread }) => + ({ scheduledTaskId, prompt, title, schedule, enabled, bindToCurrentThread, freshSession }) => Effect.gen(function* () { if (scheduledTaskId === undefined) return yield* Effect.die("unreachable"); const scope = yield* McpInvocationContext.McpInvocationContext; @@ -113,6 +113,7 @@ const handlers = { schedule, enabled, bindToCurrentThread, + freshSession, }); }), ),