File size: 2,790 Bytes
68d7816 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | /* oxlint-disable typescript-eslint/no-unsafe-declaration-merging, eslint-plugin-import/namespace -- Event2 class+payload-interface declaration merging is the sanctioned event-declaration idiom. */
import type { TurnEndReason } from '#/agent/loop/turnEvents';
import type { PermissionMode } from '#/agent/permissionPolicy/types';
import { AgentEvent2 } from '#/app/event/event2';
import type { UsageStatus } from './usage';
export interface AgentStatusUpdatedPayload {
readonly agentId: string;
usage?: UsageStatus;
swarmMode?: boolean;
towerMode?: boolean;
planMode?: boolean;
model?: string;
thinkingEffort?: string;
maxContextTokens?: number;
contextTokens?: number;
}
export class AgentStatusUpdated extends AgentEvent2<AgentStatusUpdatedPayload> {
static override readonly type = 'agent.status.updated';
static override readonly observable = true;
}
export interface AgentStatusUpdated extends AgentStatusUpdatedPayload {}
export type AgentPhase =
| { readonly kind: 'idle' }
| {
readonly kind: 'running';
readonly turnId: number;
readonly step: number;
readonly stepId: string;
readonly since: number;
}
| {
readonly kind: 'tool_call';
readonly turnId: number;
readonly step: number;
readonly toolCallId: string;
readonly name: string;
readonly since: number;
}
| {
readonly kind: 'retrying';
readonly turnId: number;
readonly step: number;
readonly stepId: string;
readonly failedAttempt: number;
readonly nextAttempt: number;
readonly maxAttempts: number;
readonly delayMs: number;
readonly errorName?: string;
readonly statusCode?: number;
readonly since: number;
}
| {
readonly kind: 'awaiting_approval';
readonly turnId: number;
readonly step?: number;
readonly approval?: unknown;
readonly since: number;
}
| {
readonly kind: 'interrupted';
readonly turnId: number;
readonly step?: number;
readonly reason: 'aborted' | 'max_steps' | 'error';
readonly message?: string;
readonly at: number;
}
| {
readonly kind: 'ended';
readonly turnId: number;
readonly reason: TurnEndReason;
readonly durationMs?: number;
readonly at: number;
};
export interface AgentStatusUpdatedEvent {
readonly type: 'agent.status.updated';
readonly model?: string;
readonly thinkingEffort?: string;
readonly contextTokens?: number;
readonly maxContextTokens?: number;
readonly contextUsage?: number;
readonly planMode?: boolean;
readonly swarmMode?: boolean;
readonly towerMode?: boolean;
readonly permission?: PermissionMode;
readonly usage?: UsageStatus;
readonly phase?: AgentPhase;
}
|