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
This commit is contained in:
Igor Šćekić
2026-02-11 14:04:03 +01:00
parent ae89304207
commit b368aab498
5 changed files with 17 additions and 3 deletions
+10 -1
View File
@@ -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({
@@ -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
@@ -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(() => {
@@ -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
@@ -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 {