From 01e4264d88269faf7a54c13c77017bb7ec68e197 Mon Sep 17 00:00:00 2001 From: yang <7thwesk@gmail.com> Date: Thu, 13 Aug 2026 03:52:21 +0800 Subject: [PATCH 1/2] fix(kap-server): apply plan mode from prompt submissions --- packages/kap-server/src/routes/prompts.ts | 9 +++++ packages/kap-server/test/prompts.test.ts | 42 +++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/packages/kap-server/src/routes/prompts.ts b/packages/kap-server/src/routes/prompts.ts index 644e7332cb..1296549e52 100644 --- a/packages/kap-server/src/routes/prompts.ts +++ b/packages/kap-server/src/routes/prompts.ts @@ -4,6 +4,7 @@ import { IBootstrapService, IAgentLifecycleService, IAgentPermissionModeService, + IAgentPlanService, IAgentProfileService, IAgentToolPolicyService, IAgentPromptService, @@ -115,6 +116,7 @@ async function resolvePromptFromSession(session: ISessionScopeHandle, agentId?: profile: agent.accessor.get(IAgentProfileService), toolPolicy: agent.accessor.get(IAgentToolPolicyService), permissionMode: agent.accessor.get(IAgentPermissionModeService), + plan: agent.accessor.get(IAgentPlanService), }; } @@ -270,6 +272,13 @@ export function registerPromptsRoutes(app: PromptRouteHost, core: Scope): void { if (req.body.thinking !== undefined && !thinkingConsumed) resolved.profile.setThinking(req.body.thinking); if (req.body.permission_mode !== undefined) resolved.permissionMode.setMode(req.body.permission_mode); + if (req.body.plan_mode !== undefined) { + const active = (await resolved.plan.status()) !== null; + if (active !== req.body.plan_mode) { + if (req.body.plan_mode) await resolved.plan.enter(); + else resolved.plan.exit(); + } + } if (req.body.disabled_tools !== undefined) { try { await resolved.toolPolicy.setSessionDisabledTools(req.body.disabled_tools); diff --git a/packages/kap-server/test/prompts.test.ts b/packages/kap-server/test/prompts.test.ts index 28391f03bb..e93c02f4e3 100644 --- a/packages/kap-server/test/prompts.test.ts +++ b/packages/kap-server/test/prompts.test.ts @@ -494,6 +494,48 @@ describe('server-v2 /api/v1 prompts', () => { await expect(source!.firstUserPrompts(3)).resolves.toEqual(prompts); }); + it('enters plan mode when the first prompt requests it', async () => { + const id = await createSession(home as string); + + const submitted = await call('POST', `/api/v1/sessions/${id}/prompts`, { + model: 'stub', + plan_mode: true, + content: [{ type: 'text', text: 'investigate the bug' }], + }); + expect(submitted.body.code).toBe(0); + + const status = await call<{ plan_mode: boolean }>( + 'GET', + `/api/v1/sessions/${id}/status`, + ); + expect(status.body.code).toBe(0); + expect(status.body.data.plan_mode).toBe(true); + }); + + it('exits plan mode when a prompt disables it', async () => { + const id = await createSession(home as string); + await createMainAgent(id); + + const profile = await call('POST', `/api/v1/sessions/${id}/profile`, { + agent_config: { plan_mode: true }, + }); + expect(profile.body.code).toBe(0); + + const submitted = await call('POST', `/api/v1/sessions/${id}/prompts`, { + model: 'stub', + plan_mode: false, + content: [{ type: 'text', text: 'implement the fix' }], + }); + expect(submitted.body.code).toBe(0); + + const status = await call<{ plan_mode: boolean }>( + 'GET', + `/api/v1/sessions/${id}/status`, + ); + expect(status.body.code).toBe(0); + expect(status.body.data.plan_mode).toBe(false); + }); + it('rejects a stale file reference without creating the agent or mutating the model', async () => { const id = await createSession(home as string); const session = getLiveSessionById(server!.core.accessor, id); From 171d0de5a90f1eec48eba060086689fe7a8b37fd Mon Sep 17 00:00:00 2001 From: yang <7thwesk@gmail.com> Date: Thu, 13 Aug 2026 03:59:35 +0800 Subject: [PATCH 2/2] chore: add changeset for web plan mode fix --- .changeset/fix-web-first-prompt-plan-mode.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fix-web-first-prompt-plan-mode.md diff --git a/.changeset/fix-web-first-prompt-plan-mode.md b/.changeset/fix-web-first-prompt-plan-mode.md new file mode 100644 index 0000000000..e67fc8d01a --- /dev/null +++ b/.changeset/fix-web-first-prompt-plan-mode.md @@ -0,0 +1,5 @@ +--- +"@moonshot-ai/kimi-code": patch +--- + +Fix Plan Mode not taking effect on the first prompt of a new Web session.