diff --git a/packages/core/src/PageAgentCore.ts b/packages/core/src/PageAgentCore.ts index 3f78f19..2077544 100644 --- a/packages/core/src/PageAgentCore.ts +++ b/packages/core/src/PageAgentCore.ts @@ -99,8 +99,7 @@ export class PageAgentCore extends EventTarget { this.emitActivity({ type: 'retrying', attempt, maxAttempts }) // Also push to history for panel rendering this.history.push({ - type: 'error', - errorType: 'retry', + type: 'retry', message: `LLM retry attempt ${attempt} of ${maxAttempts}`, attempt, maxAttempts, @@ -114,7 +113,6 @@ export class PageAgentCore extends EventTarget { // Also push to history for panel rendering this.history.push({ type: 'error', - errorType: 'error', message, rawResponse: (error as InvokeError).rawResponse, }) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index b44fb43..9672878 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -69,14 +69,21 @@ export interface UserTakeoverEvent { } /** - * Error event (retry or error from LLM) + * Retry event - LLM call is being retried + */ +export interface RetryEvent { + type: 'retry' + message: string + attempt: number + maxAttempts: number +} + +/** + * Error event - fatal error from LLM or execution */ export interface AgentErrorEvent { type: 'error' - errorType: 'retry' | 'error' message: string - attempt?: number - maxAttempts?: number rawResponse?: unknown } @@ -87,6 +94,7 @@ export type HistoricalEvent = | AgentStepEvent | ObservationEvent | UserTakeoverEvent + | RetryEvent | AgentErrorEvent /** diff --git a/packages/ui/src/panel/Panel.ts b/packages/ui/src/panel/Panel.ts index 8f8446f..8a37f9a 100644 --- a/packages/ui/src/panel/Panel.ts +++ b/packages/ui/src/panel/Panel.ts @@ -608,6 +608,13 @@ export class Panel { ) } else if (event.type === 'user_takeover') { cards.push(createCard({ icon: '👤', content: 'User takeover', meta, type: 'input' })) + } else if (event.type === 'retry') { + const retryInfo = `${event.message || 'Retrying'} (${event.attempt}/${event.maxAttempts})` + cards.push(createCard({ icon: '🔄', content: retryInfo, meta, type: 'observation' })) + } else if (event.type === 'error') { + cards.push( + createCard({ icon: '❌', content: event.message || 'Error', meta, type: 'observation' }) + ) } return cards diff --git a/packages/ui/src/panel/types.ts b/packages/ui/src/panel/types.ts index 75af53e..a8dc14b 100644 --- a/packages/ui/src/panel/types.ts +++ b/packages/ui/src/panel/types.ts @@ -33,7 +33,7 @@ export interface PanelAgentAdapter extends EventTarget { /** History of agent events */ readonly history: readonly { - type: 'step' | 'observation' | 'user_takeover' | 'error' + type: 'step' | 'observation' | 'user_takeover' | 'retry' | 'error' stepIndex?: number /** For 'step' type */ reflection?: { @@ -49,6 +49,11 @@ export interface PanelAgentAdapter extends EventTarget { } /** For 'observation' type */ content?: string + /** For 'retry' type */ + attempt?: number + maxAttempts?: number + /** For 'retry' and 'error' types */ + message?: string }[] /** Current task being executed */