From b368aab49816b1c699b6d2685d7d595f43da3045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20=C5=A0=C4=87eki=C4=87?= Date: Wed, 11 Feb 2026 14:04:03 +0100 Subject: [PATCH] fix(vscode): fix context usage calculation and compact error handling - Add limit field to ProviderModel types to match actual server response (server sends limit.context, not contextLength) - Use limit.context for context usage percentage with contextLength fallback - Show task header when messages exist, even before title is generated - Validate model selection before compact instead of hardcoding kilo fallback --- packages/kilo-vscode/src/KiloProvider.ts | 11 ++++++++++- .../kilo-vscode/src/services/cli-backend/types.ts | 2 ++ .../webview-ui/src/components/chat/TaskHeader.tsx | 2 +- .../kilo-vscode/webview-ui/src/context/session.tsx | 3 ++- packages/kilo-vscode/webview-ui/src/types/messages.ts | 2 ++ 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts index 3cb4824dbd3..9fa0721c611 100644 --- a/packages/kilo-vscode/src/KiloProvider.ts +++ b/packages/kilo-vscode/src/KiloProvider.ts @@ -523,9 +523,18 @@ export class KiloProvider implements vscode.WebviewViewProvider { return } + if (!providerID || !modelID) { + console.error("[Kilo New] KiloProvider: No model selected for compact") + this.postMessage({ + type: "error", + message: "No model selected. Connect a provider to compact this session.", + }) + return + } + try { const workspaceDir = this.getWorkspaceDirectory() - await this.httpClient.summarize(target, providerID || "kilo", modelID || "kilo/auto", workspaceDir) + await this.httpClient.summarize(target, providerID, modelID, workspaceDir) } catch (error) { console.error("[Kilo New] KiloProvider: Failed to compact session:", error) this.postMessage({ diff --git a/packages/kilo-vscode/src/services/cli-backend/types.ts b/packages/kilo-vscode/src/services/cli-backend/types.ts index bee18c1238c..ea1b9c965ea 100644 --- a/packages/kilo-vscode/src/services/cli-backend/types.ts +++ b/packages/kilo-vscode/src/services/cli-backend/types.ts @@ -100,6 +100,8 @@ export interface ProviderModel { contextLength?: number releaseDate?: string latest?: boolean + // Actual shape returned by the server (Provider.Model) + limit?: { context: number; input?: number; output: number } } // Provider definition 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 477f3cff5ad..dd67b57979e 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/TaskHeader.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/TaskHeader.tsx @@ -14,7 +14,7 @@ export const TaskHeader: Component = () => { const title = createMemo(() => session.currentSession()?.title) const hasMessages = createMemo(() => session.messages().length > 0) - const visible = createMemo(() => !!(title() && hasMessages())) + const visible = createMemo(() => hasMessages()) const busy = createMemo(() => session.status() === "busy") const cost = createMemo(() => { diff --git a/packages/kilo-vscode/webview-ui/src/context/session.tsx b/packages/kilo-vscode/webview-ui/src/context/session.tsx index 113eb7cb2e0..565a1d782e6 100644 --- a/packages/kilo-vscode/webview-ui/src/context/session.tsx +++ b/packages/kilo-vscode/webview-ui/src/context/session.tsx @@ -442,7 +442,8 @@ export const SessionProvider: ParentComponent = (props) => { if (total === 0) continue const sel = selected() const model = sel ? provider.findModel(sel) : undefined - const percentage = model?.contextLength ? Math.round((total / model.contextLength) * 100) : null + const limit = model?.limit?.context ?? model?.contextLength + const percentage = limit ? Math.round((total / limit) * 100) : null return { tokens: total, percentage } } return undefined diff --git a/packages/kilo-vscode/webview-ui/src/types/messages.ts b/packages/kilo-vscode/webview-ui/src/types/messages.ts index 4427a922e48..195380e3f67 100644 --- a/packages/kilo-vscode/webview-ui/src/types/messages.ts +++ b/packages/kilo-vscode/webview-ui/src/types/messages.ts @@ -157,6 +157,8 @@ export interface ProviderModel { contextLength?: number releaseDate?: string latest?: boolean + // Actual shape returned by the server (Provider.Model) + limit?: { context: number; input?: number; output: number } } export interface Provider {