diff --git a/.changeset/restore-vscode-prompt-history.md b/.changeset/restore-vscode-prompt-history.md new file mode 100644 index 00000000000..e62af916e4d --- /dev/null +++ b/.changeset/restore-vscode-prompt-history.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Restore the newest prompt to keyboard history when starting a new chat. diff --git a/packages/kilo-vscode/tests/unit/prompt-input-connection-guard.test.ts b/packages/kilo-vscode/tests/unit/prompt-input-connection-guard.test.ts index 96e8a2f1985..4c85ed00ce2 100644 --- a/packages/kilo-vscode/tests/unit/prompt-input-connection-guard.test.ts +++ b/packages/kilo-vscode/tests/unit/prompt-input-connection-guard.test.ts @@ -21,6 +21,23 @@ describe("PromptInput connection guard", () => { expect(send).toBeGreaterThan(guard) expect(clear).toBeGreaterThan(send) }) + + it("records a dispatched prompt before returning for a changed draft scope", () => { + // Regression source: fbe5f4cb in PR #11442 made fresh sends set draftSessionID synchronously, + // changing draftKey from :new to :pending:. The changed key must block UI cleanup, + // but it must not skip recording the already-dispatched prompt in keyboard history. + const start = src.indexOf("const key = draftKey()") + const command = src.indexOf("session.sendCommand(", start) + const message = src.indexOf("session.sendMessage(", command) + const append = src.indexOf("history.append(draft)", message) + const guard = src.indexOf("if (draftKey() !== key) return", message) + + expect(start).toBeGreaterThan(-1) + expect(command).toBeGreaterThan(start) + expect(message).toBeGreaterThan(command) + expect(append).toBeGreaterThan(message) + expect(guard).toBeGreaterThan(append) + }) }) describe("PromptInput sandbox toggle", () => { 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 b235cc8f8b6..7d29423113c 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/PromptInput.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/PromptInput.tsx @@ -1079,9 +1079,9 @@ export const PromptInput: Component = (props) => { reviewDrafts.delete(key) imageDrafts.delete(key) scrolls.delete(key) + history.append(draft) if (draftKey() !== key) return - history.append(draft) history.reset() setText("") clearReviewComments()