feat: AG-UI 协议对齐与路由导航功能

- 前端: 添加 SSE 流式支持、stateSnapshot 事件、路由导航工具
- 前端: 实现工具调用审批流程,支持 pending 状态展示
- 后端: Agent 状态管理与会话持久化相关重构
- 文档: 新增 agent-agui-full-alignance 设计文档
- 测试: 补充相关单元测试和集成测试
This commit is contained in:
zl-q
2026-03-07 17:30:20 +08:00
parent ec33bb0cee
commit 120df903d2
52 changed files with 4305 additions and 1672 deletions
@@ -5,6 +5,7 @@ import 'package:lucide_icons/lucide_icons.dart';
import '../../../../core/theme/design_tokens.dart';
import '../../../chat/data/models/chat_list_item.dart';
import '../../../chat/presentation/bloc/chat_bloc.dart';
import '../../../chat/data/tools/route_navigation_tool.dart';
import '../../../chat/ui/widgets/ui_schema_renderer.dart';
import '../../../../shared/widgets/toast/toast.dart';
import '../../../../shared/widgets/toast/toast_type.dart';
@@ -55,6 +56,7 @@ class _HomeScreenState extends State<HomeScreen> {
_messageController.dispose();
_scrollController.dispose();
_chatBloc.close();
RouteNavigationTool.instance.clearNavigator();
super.dispose();
}
@@ -64,6 +66,17 @@ class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
RouteNavigationTool.instance.bindNavigator((target, {replace = false}) {
if (!mounted) {
return;
}
if (replace) {
context.go(target);
} else {
context.push(target);
}
});
return BlocProvider.value(
value: _chatBloc,
child: BlocConsumer<ChatBloc, ChatState>(
@@ -328,6 +341,24 @@ class _HomeScreenState extends State<HomeScreen> {
),
const SizedBox(width: 8),
Text(statusText, style: TextStyle(fontSize: 12, color: statusColor)),
if (item.toolName == 'navigate_to_route' &&
item.status == ToolCallStatus.pending) ...[
const SizedBox(width: 8),
GestureDetector(
onTap: () => _chatBloc.approveToolCall(item.callId),
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
decoration: BoxDecoration(
color: AppColors.blue600,
borderRadius: BorderRadius.circular(6),
),
child: const Text(
'同意',
style: TextStyle(fontSize: 11, color: AppColors.white),
),
),
),
],
],
),
);