From 88e7130434d074d9c26229964ba1276004920fbf Mon Sep 17 00:00:00 2001 From: Kevin van Dijk Date: Mon, 23 Feb 2026 20:20:34 +0100 Subject: [PATCH] Re-introduce kilo changes --- packages/app/src/components/prompt-input.tsx | 11 +++++-- .../composer/session-composer-region.tsx | 4 ++- .../composer/session-question-dock.tsx | 30 +++++++++++++++++-- packages/ui/package.json | 2 ++ packages/ui/src/components/dock-surface.tsx | 1 + 5 files changed, 43 insertions(+), 5 deletions(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index b1c608ffcc9..d9acf4aba47 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1095,7 +1095,11 @@ export const PromptInput: Component = (props) => { editorRef?.focus() }} > -
(scrollRef = el)}> +
(scrollRef = el)} + >
{ @@ -1246,7 +1250,10 @@ export const PromptInput: Component = (props) => { -
+
diff --git a/packages/app/src/pages/session/composer/session-composer-region.tsx b/packages/app/src/pages/session/composer/session-composer-region.tsx index ccf39f797c6..bb3abe58930 100644 --- a/packages/app/src/pages/session/composer/session-composer-region.tsx +++ b/packages/app/src/pages/session/composer/session-composer-region.tsx @@ -17,6 +17,7 @@ export function SessionComposerRegion(props: { onNewSessionWorktreeReset: () => void onSubmit: () => void setPromptDockRef: (el: HTMLDivElement) => void + onModeAction?: (input: { mode: string; text: string; description?: string }) => void // kilocode_change }) { const params = useParams() const prompt = usePrompt() @@ -57,7 +58,8 @@ export function SessionComposerRegion(props: { {(request) => (
- + {/* kilocode_change: add onModeAction */} +
)}
diff --git a/packages/app/src/pages/session/composer/session-question-dock.tsx b/packages/app/src/pages/session/composer/session-question-dock.tsx index 74859c860f6..3c11fd122b3 100644 --- a/packages/app/src/pages/session/composer/session-question-dock.tsx +++ b/packages/app/src/pages/session/composer/session-question-dock.tsx @@ -8,7 +8,12 @@ import type { QuestionAnswer, QuestionRequest } from "@kilocode/sdk/v2" import { useLanguage } from "@/context/language" import { useSDK } from "@/context/sdk" -export const SessionQuestionDock: Component<{ request: QuestionRequest }> = (props) => { +// kilocode_change start - add onModeAction prop for mode-switching support +export const SessionQuestionDock: Component<{ + request: QuestionRequest + onModeAction?: (input: { mode: string; text: string; description?: string }) => void +}> = (props) => { + // kilocode_change end const sdk = useSDK() const language = useLanguage() @@ -141,10 +146,31 @@ export const SessionQuestionDock: Component<{ request: QuestionRequest }> = (pro const submit = () => void reply(questions().map((_, i) => store.answers[i] ?? [])) const pick = (answer: string, custom: boolean = false) => { + // kilocode_change start - find option to check for mode + // Custom answers won't match a predefined option, so mode switching is intentionally skipped + const option = options().find((o) => o.label === answer) + // kilocode_change end + + setStore("editing", false) + setStore("answers", store.tab, [answer]) if (custom) setStore("custom", store.tab, answer) if (!custom) setStore("customOn", store.tab, false) - setStore("editing", false) + + // kilocode_change start - trigger mode switch after question reply completes + if (!multi()) { + const pending = reply([[answer]]) + if (option?.mode && props.onModeAction) { + const action = props.onModeAction + const mode = option.mode + const description = option.description + pending?.then(() => action({ mode, text: answer, description }), fail).catch(fail) + } else { + pending?.catch(fail) + } + return + } + // kilocode_change end } const toggle = (answer: string) => { diff --git a/packages/ui/package.json b/packages/ui/package.json index 998a4089ded..bbbc70bb1c5 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -52,6 +52,8 @@ "./basic-tool": "./src/components/basic-tool.tsx", "./diff-changes": "./src/components/diff-changes.tsx", "./diff-ssr": "./src/components/diff-ssr.tsx", + "./dock-prompt": "./src/components/dock-prompt.tsx", + "./dock-surface": "./src/components/dock-surface.tsx", "./context": "./src/context/index.ts", "./context/code": "./src/context/code.tsx", "./context/data": "./src/context/data.tsx", diff --git a/packages/ui/src/components/dock-surface.tsx b/packages/ui/src/components/dock-surface.tsx index 1c4af2ed5e8..e0ba191161d 100644 --- a/packages/ui/src/components/dock-surface.tsx +++ b/packages/ui/src/components/dock-surface.tsx @@ -25,6 +25,7 @@ export function DockShellForm(props: ComponentProps<"form">) { return (