feat: AG-UI 协议对齐与路由导航功能
- 前端: 添加 SSE 流式支持、stateSnapshot 事件、路由导航工具 - 前端: 实现工具调用审批流程,支持 pending 状态展示 - 后端: Agent 状态管理与会话持久化相关重构 - 文档: 新增 agent-agui-full-alignance 设计文档 - 测试: 补充相关单元测试和集成测试
This commit is contained in:
@@ -68,6 +68,13 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
test('maps STATE_SNAPSHOT correctly', () {
|
||||
expect(
|
||||
agUiEventTypeFromWire('STATE_SNAPSHOT'),
|
||||
AgUiEventType.stateSnapshot,
|
||||
);
|
||||
});
|
||||
|
||||
test('returns unknown for unknown type', () {
|
||||
expect(agUiEventTypeFromWire('UNKNOWN_TYPE'), AgUiEventType.unknown);
|
||||
});
|
||||
@@ -228,7 +235,7 @@ void main() {
|
||||
'type': 'TOOL_CALL_RESULT',
|
||||
'messageId': 'msg_123',
|
||||
'toolCallId': 'tc_123',
|
||||
'result': {'ok': true, 'eventId': 'evt_001'},
|
||||
'content': '{"result":{"ok":true,"eventId":"evt_001"}}',
|
||||
};
|
||||
|
||||
final event = AgUiEvent.fromJson(json);
|
||||
@@ -240,6 +247,24 @@ void main() {
|
||||
expect(toolResult.result['ok'], true);
|
||||
});
|
||||
|
||||
test('parses ToolCallResultEvent content payload', () {
|
||||
final json = {
|
||||
'type': 'TOOL_CALL_RESULT',
|
||||
'messageId': 'msg_123',
|
||||
'toolCallId': 'tc_123',
|
||||
'content': '{"result":{"ok":true,"eventId":"evt_001"}}',
|
||||
};
|
||||
|
||||
final event = AgUiEvent.fromJson(json);
|
||||
|
||||
expect(event, isA<ToolCallResultEvent>());
|
||||
final toolResult = event as ToolCallResultEvent;
|
||||
expect(toolResult.messageId, 'msg_123');
|
||||
expect(toolResult.toolCallId, 'tc_123');
|
||||
expect(toolResult.result['ok'], true);
|
||||
expect(toolResult.result['eventId'], 'evt_001');
|
||||
});
|
||||
|
||||
test('parses ToolCallErrorEvent', () {
|
||||
final json = {
|
||||
'type': 'TOOL_CALL_ERROR',
|
||||
@@ -257,6 +282,19 @@ void main() {
|
||||
expect(toolError.code, 'EXEC_ERROR');
|
||||
});
|
||||
|
||||
test('parses StateSnapshotEvent', () {
|
||||
final json = {
|
||||
'type': 'STATE_SNAPSHOT',
|
||||
'snapshot': {'scope': 'history_day', 'hasMore': false, 'messages': []},
|
||||
};
|
||||
|
||||
final event = AgUiEvent.fromJson(json);
|
||||
|
||||
expect(event, isA<StateSnapshotEvent>());
|
||||
final stateSnapshot = event as StateSnapshotEvent;
|
||||
expect(stateSnapshot.snapshot['scope'], 'history_day');
|
||||
});
|
||||
|
||||
test('returns UnknownAgUiEvent for unknown type', () {
|
||||
final json = {'type': 'UNKNOWN_TYPE', 'someField': 'someValue'};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user