fix(vscode): persist both response identifiers

This commit is contained in:
marius-kilocode
2026-07-24 12:27:54 +02:00
parent d29f1bdd43
commit 9ecdfdc19e
4 changed files with 181 additions and 227 deletions
@@ -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<TerminalState, "vercelID" | "generationID"> {
if (message?.role !== "assistant" || message.finish !== "other") return {}
const part = (parts?.(message.id) ?? []).findLast(
(item): item is Extract<Part, { type: "step-finish" }> => 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
}
@@ -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({})
+43 -54
View File
@@ -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<string>
}
}
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"
+126 -164
View File
@@ -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": {