mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-20 08:47:44 +00:00
feat: subagent runtime & CLI display - wip
This commit is contained in:
89
packages/core/src/subagents/subagent-events.ts
Normal file
89
packages/core/src/subagents/subagent-events.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2025 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
import { EventEmitter } from 'events';
|
||||
|
||||
export type SubAgentEvent =
|
||||
| 'start'
|
||||
| 'round_start'
|
||||
| 'round_end'
|
||||
| 'model_text'
|
||||
| 'tool_call'
|
||||
| 'tool_result'
|
||||
| 'finish'
|
||||
| 'error';
|
||||
|
||||
export interface SubAgentModelTextEvent {
|
||||
subagentId: string;
|
||||
round: number;
|
||||
text: string;
|
||||
timestamp: number;
|
||||
}
|
||||
|
||||
export interface SubAgentStartEvent {
|
||||
subagentId: string;
|
||||
name: string;
|
||||
model?: string;
|
||||
tools: string[];
|
||||
timestamp: number;
|
||||
}
|
||||
|
||||
export interface SubAgentRoundEvent {
|
||||
subagentId: string;
|
||||
round: number;
|
||||
promptId: string;
|
||||
timestamp: number;
|
||||
}
|
||||
|
||||
export interface SubAgentToolCallEvent {
|
||||
subagentId: string;
|
||||
round: number;
|
||||
callId: string;
|
||||
name: string;
|
||||
args: Record<string, unknown>;
|
||||
timestamp: number;
|
||||
}
|
||||
|
||||
export interface SubAgentToolResultEvent {
|
||||
subagentId: string;
|
||||
round: number;
|
||||
callId: string;
|
||||
name: string;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
durationMs?: number;
|
||||
timestamp: number;
|
||||
}
|
||||
|
||||
export interface SubAgentFinishEvent {
|
||||
subagentId: string;
|
||||
terminate_reason: string;
|
||||
timestamp: number;
|
||||
rounds?: number;
|
||||
totalDurationMs?: number;
|
||||
totalToolCalls?: number;
|
||||
successfulToolCalls?: number;
|
||||
failedToolCalls?: number;
|
||||
inputTokens?: number;
|
||||
outputTokens?: number;
|
||||
totalTokens?: number;
|
||||
}
|
||||
|
||||
export class SubAgentEventEmitter {
|
||||
private ee = new EventEmitter();
|
||||
|
||||
on(event: SubAgentEvent, listener: (...args: unknown[]) => void) {
|
||||
this.ee.on(event, listener);
|
||||
}
|
||||
|
||||
off(event: SubAgentEvent, listener: (...args: unknown[]) => void) {
|
||||
this.ee.off(event, listener);
|
||||
}
|
||||
|
||||
emit(event: SubAgentEvent, payload: unknown) {
|
||||
this.ee.emit(event, payload);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user