| ... | @@ -98,10 +98,6 @@ function proposedPlanIdFromEvent(event: ProviderRuntimeEvent, threadId: ThreadId | ... | @@ -98,10 +98,6 @@ function proposedPlanIdFromEvent(event: ProviderRuntimeEvent, threadId: ThreadId |
| 98 | return `plan:${threadId}:event:${event.eventId}`; | 98 | return `plan:${threadId}:event:${event.eventId}`; |
| 99 | } | 99 | } |
| 100 | | 100 | |
| 101 | function asString(value: unknown): string | undefined { | | |
| 102 | return typeof value === "string" ? value : undefined; | | |
| 103 | } | | |
| 104 | | | |
| 105 | function buildContextWindowActivityPayload( | 101 | function buildContextWindowActivityPayload( |
| 106 | event: ProviderRuntimeEvent, | 102 | event: ProviderRuntimeEvent, |
| 107 | ): ThreadTokenUsageSnapshot | undefined { | 103 | ): ThreadTokenUsageSnapshot | undefined { |
| ... | @@ -111,14 +107,6 @@ function buildContextWindowActivityPayload( | ... | @@ -111,14 +107,6 @@ function buildContextWindowActivityPayload( |
| 111 | return event.payload.usage; | 107 | return event.payload.usage; |
| 112 | } | 108 | } |
| 113 | | 109 | |
| 114 | function runtimePayloadRecord(event: ProviderRuntimeEvent): Record<string, unknown> | undefined { | | |
| 115 | const payload = (event as { payload?: unknown }).payload; | | |
| 116 | if (!payload || typeof payload !== "object") { | | |
| 117 | return undefined; | | |
| 118 | } | | |
| 119 | return payload as Record<string, unknown>; | | |
| 120 | } | | |
| 121 | | | |
| 122 | function normalizeRuntimeTurnState( | 110 | function normalizeRuntimeTurnState( |
| 123 | value: string | undefined, | 111 | value: string | undefined, |
| 124 | ): "completed" | "failed" | "interrupted" | "cancelled" { | 112 | ): "completed" | "failed" | "interrupted" | "cancelled" { |
| ... | @@ -133,23 +121,6 @@ function normalizeRuntimeTurnState( | ... | @@ -133,23 +121,6 @@ function normalizeRuntimeTurnState( |
| 133 | } | 121 | } |
| 134 | } | 122 | } |
| 135 | | 123 | |
| 136 | function runtimeTurnState( | | |
| 137 | event: ProviderRuntimeEvent, | | |
| 138 | ): "completed" | "failed" | "interrupted" | "cancelled" { | | |
| 139 | const payloadState = asString(runtimePayloadRecord(event)?.state); | | |
| 140 | return normalizeRuntimeTurnState(payloadState); | | |
| 141 | } | | |
| 142 | | | |
| 143 | function runtimeTurnErrorMessage(event: ProviderRuntimeEvent): string | undefined { | | |
| 144 | const payloadErrorMessage = asString(runtimePayloadRecord(event)?.errorMessage); | | |
| 145 | return payloadErrorMessage; | | |
| 146 | } | | |
| 147 | | | |
| 148 | function runtimeErrorMessageFromEvent(event: ProviderRuntimeEvent): string | undefined { | | |
| 149 | const payloadMessage = asString(runtimePayloadRecord(event)?.message); | | |
| 150 | return payloadMessage; | | |
| 151 | } | | |
| 152 | | | |
| 153 | function orchestrationSessionStatusFromRuntimeState( | 124 | function orchestrationSessionStatusFromRuntimeState( |
| 154 | state: "starting" | "running" | "waiting" | "ready" | "interrupted" | "stopped" | "error", | 125 | state: "starting" | "running" | "waiting" | "ready" | "interrupted" | "stopped" | "error", |
| 155 | ): "starting" | "running" | "ready" | "interrupted" | "stopped" | "error" { | 126 | ): "starting" | "running" | "ready" | "interrupted" | "stopped" | "error" { |
| ... | @@ -253,10 +224,6 @@ function runtimeEventToActivities( | ... | @@ -253,10 +224,6 @@ function runtimeEventToActivities( |
| 253 | } | 224 | } |
| 254 | | 225 | |
| 255 | case "runtime.error": { | 226 | case "runtime.error": { |
| 256 | const message = runtimeErrorMessageFromEvent(event); | | |
| 257 | if (!message) { | | |
| 258 | return []; | | |
| 259 | } | | |
| 260 | return [ | 227 | return [ |
| 261 | { | 228 | { |
| 262 | id: event.eventId, | 229 | id: event.eventId, |
| ... | @@ -265,7 +232,7 @@ function runtimeEventToActivities( | ... | @@ -265,7 +232,7 @@ function runtimeEventToActivities( |
| 265 | kind: "runtime.error", | 232 | kind: "runtime.error", |
| 266 | summary: "Runtime error", | 233 | summary: "Runtime error", |
| 267 | payload: { | 234 | payload: { |
| 268 | message: truncateDetail(message), | 235 | message: truncateDetail(event.payload.message), |
| 269 | }, | 236 | }, |
| 270 | turnId: toTurnId(event.turnId) ?? null, | 237 | turnId: toTurnId(event.turnId) ?? null, |
| 271 | ...maybeSequence, | 238 | ...maybeSequence, |
| ... | @@ -973,7 +940,9 @@ const make = Effect.gen(function* () { | ... | @@ -973,7 +940,9 @@ const make = Effect.gen(function* () { |
| 973 | case "session.exited": | 940 | case "session.exited": |
| 974 | return "stopped"; | 941 | return "stopped"; |
| 975 | case "turn.completed": | 942 | case "turn.completed": |
| 976 | return runtimeTurnState(event) === "failed" ? "error" : "ready"; | 943 | return normalizeRuntimeTurnState(event.payload.state) === "failed" |
| | 944 | ? "error" |
| | 945 | : "ready"; |
| 977 | case "session.started": | 946 | case "session.started": |
| 978 | case "thread.started": | 947 | case "thread.started": |
| 979 | // Provider thread/session start notifications can arrive during an | 948 | // Provider thread/session start notifications can arrive during an |
| ... | @@ -984,8 +953,9 @@ const make = Effect.gen(function* () { | ... | @@ -984,8 +953,9 @@ const make = Effect.gen(function* () { |
| 984 | const lastError = | 953 | const lastError = |
| 985 | event.type === "session.state.changed" && event.payload.state === "error" | 954 | event.type === "session.state.changed" && event.payload.state === "error" |
| 986 | ? (event.payload.reason ?? thread.session?.lastError ?? "Provider session error") | 955 | ? (event.payload.reason ?? thread.session?.lastError ?? "Provider session error") |
| 987 | : event.type === "turn.completed" && runtimeTurnState(event) === "failed" | 956 | : event.type === "turn.completed" && |
| 988 | ? (runtimeTurnErrorMessage(event) ?? thread.session?.lastError ?? "Turn failed") | 957 | normalizeRuntimeTurnState(event.payload.state) === "failed" |
| | 958 | ? (event.payload.errorMessage ?? thread.session?.lastError ?? "Turn failed") |
| 989 | : status === "ready" | 959 | : status === "ready" |
| 990 | ? null | 960 | ? null |
| 991 | : (thread.session?.lastError ?? null); | 961 | : (thread.session?.lastError ?? null); |
| ... | @@ -1176,7 +1146,7 @@ const make = Effect.gen(function* () { | ... | @@ -1176,7 +1146,7 @@ const make = Effect.gen(function* () { |
| 1176 | } | 1146 | } |
| 1177 | | 1147 | |
| 1178 | if (event.type === "runtime.error") { | 1148 | if (event.type === "runtime.error") { |
| 1179 | const runtimeErrorMessage = runtimeErrorMessageFromEvent(event) ?? "Provider runtime error"; | 1149 | const runtimeErrorMessage = event.payload.message; |
| 1180 | | 1150 | |
| 1181 | const shouldApplyRuntimeError = !STRICT_PROVIDER_LIFECYCLE_GUARD | 1151 | const shouldApplyRuntimeError = !STRICT_PROVIDER_LIFECYCLE_GUARD |
| 1182 | ? true | 1152 | ? true |