From 51848c42cb43fccc0f413b9537d7093eaab60a92 Mon Sep 17 00:00:00 2001 From: chrarnoldus <12196001+chrarnoldus@users.noreply.github.com> Date: Tue, 14 Jul 2026 08:03:07 +0000 Subject: [PATCH] fix(vscode): remember initial prompts in history Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> --- .changeset/remember-initial-prompts.md | 5 +++++ .../tests/unit/prompt-send-contract.test.ts | 14 ++++++++++++++ .../webview-ui/src/components/chat/PromptInput.tsx | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 .changeset/remember-initial-prompts.md diff --git a/.changeset/remember-initial-prompts.md b/.changeset/remember-initial-prompts.md new file mode 100644 index 00000000000..a75f440dab0 --- /dev/null +++ b/.changeset/remember-initial-prompts.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Remember initial session prompts when navigating chat input history with the arrow keys. diff --git a/packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts b/packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts index 3d46126d760..1e2553d8421 100644 --- a/packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts +++ b/packages/kilo-vscode/tests/unit/prompt-send-contract.test.ts @@ -310,6 +310,20 @@ describe("PromptInput send origin contract", () => { expect(source).toMatch(/session\.sendMessage\([\s\S]*origin \?\? null\)/) expect(source).toMatch(/session\.sendCommand\([\s\S]*origin \?\? null\)/) }) + + it("records sent prompts before a pending session key change can return", () => { + const start = source.indexOf("const handleSend = async () =>") + const end = source.indexOf("\n return (", start) + const body = source.slice(start, end) + const send = Math.max(body.indexOf("session.sendMessage("), body.indexOf("session.sendCommand(")) + const append = body.lastIndexOf("history.append(draft)") + const guard = body.indexOf("if (draftKey() !== key) return") + + expect(send).toBeGreaterThan(-1) + expect(append).toBeGreaterThan(send) + expect(append).toBeLessThan(guard) + expect(body.indexOf('setText("")', guard)).toBeGreaterThan(guard) + }) }) describe("SessionContext userClearedSession contract", () => { diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/PromptInput.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/PromptInput.tsx index a00ab1fa930..13e6518816b 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/PromptInput.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/PromptInput.tsx @@ -1119,9 +1119,9 @@ export const PromptInput: Component = (props) => { reviewDrafts.delete(key) imageDrafts.delete(key) scrollDrafts.delete(key) + history.append(draft) if (draftKey() !== key) return - history.append(draft) history.reset() setText("") clearReviewComments()