From 9ecdfdc19e55deb77e56bc5d82c0995e36da6a09 Mon Sep 17 00:00:00 2001 From: marius-kilocode Date: Fri, 24 Jul 2026 12:27:54 +0200 Subject: [PATCH] fix(vscode): persist both response identifiers --- .../webview-ui/src/context/session-outcome.ts | 17 +- ...session-processor-empty-tool-calls.test.ts | 4 +- packages/sdk/js/src/v2/gen/types.gen.ts | 97 +++--- packages/sdk/openapi.json | 290 ++++++++---------- 4 files changed, 181 insertions(+), 227 deletions(-) diff --git a/packages/kilo-vscode/webview-ui/src/context/session-outcome.ts b/packages/kilo-vscode/webview-ui/src/context/session-outcome.ts index 77aa6fb9c5..e17f548ef8 100644 --- a/packages/kilo-vscode/webview-ui/src/context/session-outcome.ts +++ b/packages/kilo-vscode/webview-ui/src/context/session-outcome.ts @@ -28,19 +28,22 @@ function vercelID(message: Message | undefined) { )?.[1] } -function identifiers(parts: Part[]) { - const part = parts.findLast( +function identifiers( + message: Message | undefined, + parts: Input["parts"], +): Pick { + if (message?.role !== "assistant" || message.finish !== "other") return {} + const part = (parts?.(message.id) ?? []).findLast( (item): item is Extract => item.type === "step-finish" && item.reason === "other", ) - return { vercelID: part?.vercelID, generationID: part?.generationID } + return { vercelID: part?.vercelID ?? vercelID(message), generationID: part?.generationID } } export function terminal(input: Input): TerminalState | undefined { if (!input.reason) return undefined const last = input.messages[input.messages.length - 1] const finish = last?.role === "assistant" ? last.finish : undefined - const requestID = vercelID(last) - const ids = finish === "other" && last?.role === "assistant" ? identifiers(input.parts?.(last.id) ?? []) : {} + const ids = identifiers(last, input.parts) const remaining = input.todos.filter((item) => item.status !== "completed" && item.status !== "cancelled").length if (input.reason === "interrupted") return { kind: "interrupted", tone: "warning", finish, remaining } @@ -49,10 +52,10 @@ export function terminal(input: Input): TerminalState | undefined { return { kind: "error", tone: "critical", finish, remaining } } if (finish === "length") return { kind: "limit", tone: "warning", finish, remaining } - if (finish === "unknown") return { kind: "unknown", tone: "warning", finish, remaining, vercelID: requestID } + if (finish === "unknown") return { kind: "unknown", tone: "warning", finish, remaining, vercelID: vercelID(last) } if (finish === "content-filter") return { kind: "filtered", tone: "warning", finish, remaining } if (finish === "other") { - return { kind: "unexpected", tone: "warning", finish, ...ids, vercelID: ids.vercelID ?? requestID, remaining } + return { kind: "unexpected", tone: "warning", finish, ...ids, remaining } } return undefined } diff --git a/packages/opencode/test/kilocode/session-processor-empty-tool-calls.test.ts b/packages/opencode/test/kilocode/session-processor-empty-tool-calls.test.ts index abeb4bcb58..77ba608e75 100644 --- a/packages/opencode/test/kilocode/session-processor-empty-tool-calls.test.ts +++ b/packages/opencode/test/kilocode/session-processor-empty-tool-calls.test.ts @@ -575,7 +575,7 @@ describe("session processor empty tool-calls", () => { LLMEvent.stepStart({ index: 0 }), LLMEvent.stepFinish({ index: 0, - reason: "stop", + reason: "other", usage: usage(), providerMetadata: { kilocode: { routedModelID: "openai/gpt-5.5-20260423" }, @@ -587,7 +587,7 @@ describe("session processor empty tool-calls", () => { }, }, }), - LLMEvent.finish({ reason: "stop", usage: usage() }), + LLMEvent.finish({ reason: "other", usage: usage() }), ) const chat = yield* session.create({}) diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 300135f694..b6b756cd55 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -6,9 +6,6 @@ export type ClientOptions = { export type Event = | EventServerInstanceDisposed - | EventSessionTurnOpen - | EventSessionTurnClose - | EventSessionQueueChanged | EventSessionNetworkAsked | EventSessionNetworkReplied | EventSessionNetworkRejected @@ -18,6 +15,8 @@ export type Event = | EventInteractiveTerminalUpdated | EventInteractiveTerminalData | EventInteractiveTerminalDeleted + | EventSessionTurnOpen + | EventSessionTurnClose | EventSandboxStatusChanged | EventSuggestionShown | EventSuggestionAccepted @@ -27,8 +26,8 @@ export type Event = | EventKilocodeAgentManagerCancelled | EventKilocodeNotebookRequested | EventKilocodeNotebookCancelled - | EventKiloSessionsRemoteStatusChanged | EventLspClientDiagnostics + | EventKiloSessionsRemoteStatusChanged | EventMemoryStatus1 | EventMemoryUpdated1 | EventMemoryError1 @@ -114,8 +113,8 @@ export type Event = | EventSessionCompacted | EventCommandExecuted | EventProjectUpdated - | EventVcsBranchUpdated | EventLspUpdated + | EventVcsBranchUpdated | EventWorkspaceReady | EventWorkspaceFailed | EventWorkspaceStatus @@ -1058,9 +1057,6 @@ export type GlobalEvent = { workspace?: string payload: | EventServerInstanceDisposed - | EventSessionTurnOpen - | EventSessionTurnClose - | EventSessionQueueChanged | EventSessionNetworkAsked | EventSessionNetworkReplied | EventSessionNetworkRejected @@ -1070,6 +1066,8 @@ export type GlobalEvent = { | EventInteractiveTerminalUpdated | EventInteractiveTerminalData | EventInteractiveTerminalDeleted + | EventSessionTurnOpen + | EventSessionTurnClose | EventSandboxStatusChanged | EventSuggestionShown | EventSuggestionAccepted @@ -1079,8 +1077,8 @@ export type GlobalEvent = { | EventKilocodeAgentManagerCancelled | EventKilocodeNotebookRequested | EventKilocodeNotebookCancelled - | EventKiloSessionsRemoteStatusChanged | EventLspClientDiagnostics + | EventKiloSessionsRemoteStatusChanged | EventMemoryStatus | EventMemoryUpdated | EventMemoryError @@ -1166,8 +1164,8 @@ export type GlobalEvent = { | EventSessionCompacted | EventCommandExecuted | EventProjectUpdated - | EventVcsBranchUpdated | EventLspUpdated + | EventVcsBranchUpdated | EventWorkspaceReady | EventWorkspaceFailed | EventWorkspaceStatus @@ -3533,33 +3531,6 @@ export type EventServerInstanceDisposed = { } } -export type EventSessionTurnOpen = { - id: string - type: "session.turn.open" - properties: { - sessionID: string - } -} - -export type EventSessionTurnClose = { - id: string - type: "session.turn.close" - properties: { - sessionID: string - parentID?: string - reason: "completed" | "error" | "interrupted" - } -} - -export type EventSessionQueueChanged = { - id: string - type: "session.queue.changed" - properties: { - sessionID: string - queued: Array - } -} - export type EventSessionNetworkAsked = { id: string type: "session.network.asked" @@ -3641,6 +3612,24 @@ export type EventInteractiveTerminalDeleted = { } } +export type EventSessionTurnOpen = { + id: string + type: "session.turn.open" + properties: { + sessionID: string + } +} + +export type EventSessionTurnClose = { + id: string + type: "session.turn.close" + properties: { + sessionID: string + parentID?: string + reason: "completed" | "error" | "interrupted" + } +} + export type EventSandboxStatusChanged = { id: string type: "sandbox.status.changed" @@ -3744,15 +3733,6 @@ export type EventKilocodeNotebookCancelled = { } } -export type EventKiloSessionsRemoteStatusChanged = { - id: string - type: "kilo-sessions.remote-status-changed" - properties: { - enabled: boolean - connected: boolean - } -} - export type EventLspClientDiagnostics = { id: string type: "lsp.client.diagnostics" @@ -3762,6 +3742,15 @@ export type EventLspClientDiagnostics = { } } +export type EventKiloSessionsRemoteStatusChanged = { + id: string + type: "kilo-sessions.remote-status-changed" + properties: { + enabled: boolean + connected: boolean + } +} + export type EventMemoryStatus = { id: string type: "memory.status" @@ -4958,14 +4947,6 @@ export type EventProjectUpdated = { } } -export type EventVcsBranchUpdated = { - id: string - type: "vcs.branch.updated" - properties: { - branch?: string - } -} - export type EventLspUpdated = { id: string type: "lsp.updated" @@ -4974,6 +4955,14 @@ export type EventLspUpdated = { } } +export type EventVcsBranchUpdated = { + id: string + type: "vcs.branch.updated" + properties: { + branch?: string + } +} + export type EventWorkspaceReady = { id: string type: "workspace.ready" diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 2565f73d8f..facbd52ff8 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -23684,15 +23684,6 @@ { "$ref": "#/components/schemas/EventServerInstanceDisposed" }, - { - "$ref": "#/components/schemas/EventSessionTurnOpen" - }, - { - "$ref": "#/components/schemas/EventSessionTurnClose" - }, - { - "$ref": "#/components/schemas/EventSessionQueueChanged" - }, { "$ref": "#/components/schemas/EventSessionNetworkAsked" }, @@ -23720,6 +23711,12 @@ { "$ref": "#/components/schemas/EventInteractive_terminalDeleted" }, + { + "$ref": "#/components/schemas/EventSessionTurnOpen" + }, + { + "$ref": "#/components/schemas/EventSessionTurnClose" + }, { "$ref": "#/components/schemas/EventSandboxStatusChanged" }, @@ -23748,10 +23745,10 @@ "$ref": "#/components/schemas/EventKilocodeNotebookCancelled" }, { - "$ref": "#/components/schemas/EventKilo-sessionsRemote-status-changed" + "$ref": "#/components/schemas/EventLspClientDiagnostics" }, { - "$ref": "#/components/schemas/EventLspClientDiagnostics" + "$ref": "#/components/schemas/EventKilo-sessionsRemote-status-changed" }, { "$ref": "#/components/schemas/EventMemoryStatus1" @@ -24009,10 +24006,10 @@ "$ref": "#/components/schemas/EventProjectUpdated" }, { - "$ref": "#/components/schemas/EventVcsBranchUpdated" + "$ref": "#/components/schemas/EventLspUpdated" }, { - "$ref": "#/components/schemas/EventLspUpdated" + "$ref": "#/components/schemas/EventVcsBranchUpdated" }, { "$ref": "#/components/schemas/EventWorkspaceReady" @@ -26029,7 +26026,7 @@ "type": "object", "properties": { "start": { - "type": "integer", + "type": "number", "minimum": 0 } }, @@ -26105,11 +26102,11 @@ "type": "object", "properties": { "start": { - "type": "integer", + "type": "number", "minimum": 0 }, "end": { - "type": "integer", + "type": "number", "minimum": 0 }, "elapsed": { @@ -26873,15 +26870,6 @@ { "$ref": "#/components/schemas/EventServerInstanceDisposed" }, - { - "$ref": "#/components/schemas/EventSessionTurnOpen" - }, - { - "$ref": "#/components/schemas/EventSessionTurnClose" - }, - { - "$ref": "#/components/schemas/EventSessionQueueChanged" - }, { "$ref": "#/components/schemas/EventSessionNetworkAsked" }, @@ -26909,6 +26897,12 @@ { "$ref": "#/components/schemas/EventInteractive_terminalDeleted" }, + { + "$ref": "#/components/schemas/EventSessionTurnOpen" + }, + { + "$ref": "#/components/schemas/EventSessionTurnClose" + }, { "$ref": "#/components/schemas/EventSandboxStatusChanged" }, @@ -26937,10 +26931,10 @@ "$ref": "#/components/schemas/EventKilocodeNotebookCancelled" }, { - "$ref": "#/components/schemas/EventKilo-sessionsRemote-status-changed" + "$ref": "#/components/schemas/EventLspClientDiagnostics" }, { - "$ref": "#/components/schemas/EventLspClientDiagnostics" + "$ref": "#/components/schemas/EventKilo-sessionsRemote-status-changed" }, { "$ref": "#/components/schemas/EventMemoryStatus" @@ -27198,10 +27192,10 @@ "$ref": "#/components/schemas/EventProjectUpdated" }, { - "$ref": "#/components/schemas/EventVcsBranchUpdated" + "$ref": "#/components/schemas/EventLspUpdated" }, { - "$ref": "#/components/schemas/EventLspUpdated" + "$ref": "#/components/schemas/EventVcsBranchUpdated" }, { "$ref": "#/components/schemas/EventWorkspaceReady" @@ -34384,96 +34378,6 @@ "required": ["id", "type", "properties"], "additionalProperties": false }, - "EventSessionTurnOpen": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": ["session.turn.open"] - }, - "properties": { - "type": "object", - "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses" - } - }, - "required": ["sessionID"], - "additionalProperties": false - } - }, - "required": ["id", "type", "properties"], - "additionalProperties": false - }, - "EventSessionTurnClose": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": ["session.turn.close"] - }, - "properties": { - "type": "object", - "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses" - }, - "parentID": { - "type": "string", - "pattern": "^ses" - }, - "reason": { - "type": "string", - "enum": ["completed", "error", "interrupted"] - } - }, - "required": ["sessionID", "reason"], - "additionalProperties": false - } - }, - "required": ["id", "type", "properties"], - "additionalProperties": false - }, - "EventSessionQueueChanged": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": ["session.queue.changed"] - }, - "properties": { - "type": "object", - "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses" - }, - "queued": { - "type": "array", - "items": { - "type": "string", - "pattern": "^msg" - } - } - }, - "required": ["sessionID", "queued"], - "additionalProperties": false - } - }, - "required": ["id", "type", "properties"], - "additionalProperties": false - }, "EventSessionNetworkAsked": { "type": "object", "properties": { @@ -34726,6 +34630,64 @@ "required": ["id", "type", "properties"], "additionalProperties": false }, + "EventSessionTurnOpen": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["session.turn.open"] + }, + "properties": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses" + } + }, + "required": ["sessionID"], + "additionalProperties": false + } + }, + "required": ["id", "type", "properties"], + "additionalProperties": false + }, + "EventSessionTurnClose": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["session.turn.close"] + }, + "properties": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses" + }, + "parentID": { + "type": "string", + "pattern": "^ses" + }, + "reason": { + "type": "string", + "enum": ["completed", "error", "interrupted"] + } + }, + "required": ["sessionID", "reason"], + "additionalProperties": false + } + }, + "required": ["id", "type", "properties"], + "additionalProperties": false + }, "EventSandboxStatusChanged": { "type": "object", "properties": { @@ -35035,33 +34997,6 @@ "required": ["id", "type", "properties"], "additionalProperties": false }, - "EventKilo-sessionsRemote-status-changed": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": ["kilo-sessions.remote-status-changed"] - }, - "properties": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "connected": { - "type": "boolean" - } - }, - "required": ["enabled", "connected"], - "additionalProperties": false - } - }, - "required": ["id", "type", "properties"], - "additionalProperties": false - }, "EventLspClientDiagnostics": { "type": "object", "properties": { @@ -35089,6 +35024,33 @@ "required": ["id", "type", "properties"], "additionalProperties": false }, + "EventKilo-sessionsRemote-status-changed": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["kilo-sessions.remote-status-changed"] + }, + "properties": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "connected": { + "type": "boolean" + } + }, + "required": ["enabled", "connected"], + "additionalProperties": false + } + }, + "required": ["id", "type", "properties"], + "additionalProperties": false + }, "EventMemoryStatus": { "type": "object", "properties": { @@ -39648,6 +39610,24 @@ "required": ["id", "type", "properties"], "additionalProperties": false }, + "EventLspUpdated": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["lsp.updated"] + }, + "properties": { + "type": "object", + "properties": {} + } + }, + "required": ["id", "type", "properties"], + "additionalProperties": false + }, "EventVcsBranchUpdated": { "type": "object", "properties": { @@ -39671,24 +39651,6 @@ "required": ["id", "type", "properties"], "additionalProperties": false }, - "EventLspUpdated": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": ["lsp.updated"] - }, - "properties": { - "type": "object", - "properties": {} - } - }, - "required": ["id", "type", "properties"], - "additionalProperties": false - }, "EventWorkspaceReady": { "type": "object", "properties": {