From 1c31d7ea4925fd9993bb127abe67b6cfeee06f32 Mon Sep 17 00:00:00 2001 From: marius-kilocode Date: Tue, 7 Jul 2026 13:22:30 +0200 Subject: [PATCH] fix: address review feedback on reload handler - Block reload for retry and offline session states, not just busy (hasActiveSession rejects any non-idle state) - Close TOCTOU race by calling store.reload inline instead of deferring to a pre-response handler, so the busy check and reload run in the same effect - Avoid double-firing reloadAfterAuthChange: only call it eagerly for worktree sessions where the SSE directory check won't match; for the workspace root the existing SSE handler already fires it - Replace err: any with unknown + narrowing - Add in-flight guard to the CLI /reload plugin to prevent overlapping reloads from rapid double-invocation - Remove the TaskHeader reload button (redundant with /reload slash command, avoids chat visual regression baseline churn) --- packages/kilo-vscode/src/KiloProvider.ts | 11 ++++-- .../src/components/chat/TaskHeader.tsx | 9 ----- .../opencode/src/kilocode/plugins/reload.tsx | 5 +++ .../httpapi/handlers/instance-reload.ts | 11 +++--- .../test/kilocode/instance-reload.test.ts | 38 +++++++++++++++---- 5 files changed, 49 insertions(+), 25 deletions(-) diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts index c044c6f637d..8358930f059 100644 --- a/packages/kilo-vscode/src/KiloProvider.ts +++ b/packages/kilo-vscode/src/KiloProvider.ts @@ -3620,8 +3620,11 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper const dir = this.getWorkspaceDirectory(this.currentSession?.id) try { await this.client.instance.reload({ directory: dir }, { throwOnError: true }) - } catch (err: any) { - const status = err?.response?.status + } catch (err) { + const status = + err && typeof err === "object" && "response" in err + ? (err as { response?: { status?: number } }).response?.status + : undefined if (status === 409) { vscode.window.showWarningMessage( "Cannot reload while a session is running. Wait for it to finish or abort it first.", @@ -3633,7 +3636,9 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper return } this.clearCommandsCache() - await this.reloadAfterAuthChange() + if (!sameDirectory(dir, this.getWorkspaceDirectory())) { + await this.reloadAfterAuthChange() + } } /** Public reload entry point for VS Code commands. */ diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/TaskHeader.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/TaskHeader.tsx index cccaa7ab721..96ac022f93f 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/TaskHeader.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/TaskHeader.tsx @@ -212,15 +212,6 @@ export const TaskHeader: Component = (props) => { aria-label={language.t("command.session.compact")} /> - - vscode.postMessage({ type: "reload" })} - aria-label={language.t("common.reload")} - /> -