fix(coding-agent): mark retrying agent end events
This commit is contained in:
@@ -120,7 +120,12 @@ export function parseSkillBlock(text: string): ParsedSkillBlock | null {
|
||||
|
||||
/** Session-specific events that extend the core AgentEvent */
|
||||
export type AgentSessionEvent =
|
||||
| AgentEvent
|
||||
| Exclude<AgentEvent, { type: "agent_end" }>
|
||||
| {
|
||||
type: "agent_end";
|
||||
messages: AgentMessage[];
|
||||
willRetry: boolean;
|
||||
}
|
||||
| {
|
||||
type: "queue_update";
|
||||
steering: readonly string[];
|
||||
@@ -485,7 +490,7 @@ export class AgentSession {
|
||||
await this._emitExtensionEvent(event);
|
||||
|
||||
// Notify all listeners
|
||||
this._emit(event);
|
||||
this._emit(event.type === "agent_end" ? { ...event, willRetry: this._willRetryAfterAgentEnd(event) } : event);
|
||||
|
||||
// Handle session persistence
|
||||
if (event.type === "message_end") {
|
||||
@@ -531,6 +536,21 @@ export class AgentSession {
|
||||
}
|
||||
};
|
||||
|
||||
private _willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: "agent_end" }>): boolean {
|
||||
const settings = this.settingsManager.getRetrySettings();
|
||||
if (!settings.enabled || this._retryAttempt >= settings.maxRetries) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let i = event.messages.length - 1; i >= 0; i--) {
|
||||
const message = event.messages[i];
|
||||
if (message.role === "assistant") {
|
||||
return this._isRetryableError(message as AssistantMessage);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Extract text content from a message */
|
||||
private _getUserMessageText(message: Message): string {
|
||||
if (message.role !== "user") return "";
|
||||
|
||||
Reference in New Issue
Block a user