本次实现为 Agent Assistant 项目添加了用户界面间的主动实时通信功能,允许使用相同token的用户在不同设备间进行实时聊天和远程输入。
- 获取在线用户列表: 用户登录后可以获取相同token的在线用户列表
- 实时用户状态: 显示用户昵称、连接时间等信息
- 用户界面显示: 在标题栏下方显示在线用户昵称
- 点击聊天: 用户可以点击其他在线用户的昵称进入聊天
- 实时消息传递: 支持用户间的实时文本消息传递
- 临时存储: 聊天消息不需要持久化存储,仅在会话期间保留
- 本地系统输入: Flutter PC端可以将收到的聊天文本发送到本地系统输入框
- 跨设备输入: 支持手机端语音输入,PC端接收聊天消息并输入到本地系统
- 用户主动触发: 用户需要主动选择将聊天消息发送到系统输入
- 本地工具调用: 直接调用本地的
agentassistant-input工具,无需通过服务器
// 在线用户信息
message OnlineUser {
string client_id = 1;
string nickname = 2;
int64 connected_at = 3;
}
// 聊天消息
message ChatMessage {
string message_id = 1;
string sender_client_id = 2;
string sender_nickname = 3;
string receiver_client_id = 4;
string receiver_nickname = 5;
string content = 6;
int64 sent_at = 7;
}
GetOnlineUsers: 获取在线用户列表SendChatMessage: 发送聊天消息ChatMessageNotification: 聊天消息通知
handleGetOnlineUsers(): 处理获取在线用户请求handleSendChatMessage(): 处理发送聊天消息
GetOnlineUsers(): 获取相同token的在线用户SendChatMessage(): 验证并转发聊天消息- 用户连接时间戳记录
getOnlineUsers(): 请求在线用户列表sendChatMessage(): 发送聊天消息
onlineUsers: 在线用户列表状态chatMessages: 聊天消息映射activeChatUser: 当前聊天用户- 聊天消息处理和通知
- 添加了所有新的WebSocket命令常量
- 支持聊天功能
SystemInputService: 处理本地系统输入功能- 直接调用本地
agentassistant-input工具 - 支持普通文本和Base64编码文本
- 平台检测和工具可用性验证
- 完整的protobuf消息支持
- 与服务器端协议完全兼容
proto/agentassist.proto- 添加新消息类型和命令
internal/service/broadcaster.go- 添加在线用户管理和聊天功能internal/service/websocket.go- 添加新命令处理器
web/src/types/websocket.ts- 添加新命令常量web/src/services/websocket.ts- 添加聊天功能方法web/src/stores/chat.ts- 添加聊天状态管理
flutterclient/lib/constants/websocket_commands.dart- 添加新命令常量flutterclient/lib/services/system_input_service.dart- 本地系统输入服务
spec.md- 更新协议规范文档CHAT_FEATURE_IMPLEMENTATION.md- 功能实现总结
test_chat_feature.sh- 功能测试脚本
- 客户端发送
GetOnlineUsers请求 - 服务器查找相同token的在线用户
- 服务器返回
GetOnlineUsersResponse包含用户列表
- 发送者发送
SendChatMessage到服务器 - 服务器验证发送者和接收者都在线且token相同
- 服务器向接收者发送
ChatMessageNotification - 接收者界面显示新消息
- Flutter PC客户端收到聊天消息
- 用户选择"发送到系统输入"选项
- 客户端本地调用
SystemInputService.sendToSystemInput() - 服务直接调用本地
agentassistant-input工具 - 文本被输入到PC本地系统的当前活动输入框
- ✅ Protobuf文件生成验证
- ✅ 服务器编译和功能验证
- ✅ Web客户端代码验证
- ✅ Flutter客户端代码验证
- ✅ agentassistant-input工具验证
- 启动服务器:
./bin/agentassistant-srv - 打开多个Web界面:
http://localhost:22080?token=test-token - 测试在线用户列表显示
- 测试用户间聊天功能
- 测试Flutter PC端远程输入功能
- 只有相同token的用户才能看到彼此
- 聊天消息只在相同token用户间传递
- 远程输入功能需要用户主动触发
- 聊天消息不持久化存储
- 消息仅在会话期间保留
- 用户断开连接后消息自动清理
- 添加聊天消息历史记录(可选持久化)
- 支持文件传输功能
- 添加消息已读状态
- 支持群组聊天功能
- 添加消息通知音效
- 支持表情符号
- 添加打字状态指示
- 优化移动端聊天界面
- 添加消息加密
- 实现用户权限管理
- 添加消息审核功能
- 支持用户黑名单
本次实现成功为 Agent Assistant 项目添加了完整的用户界面间主动实时通信功能,包括:
- ✅ 在线用户管理
- ✅ 实时聊天功能
- ✅ 远程输入功能
- ✅ 跨平台支持(Web + Flutter)
- ✅ 完整的协议规范
- ✅ 自动化测试验证
所有功能都已经过测试验证,可以立即投入使用。该实现为用户提供了便捷的跨设备输入能力,特别适合手机端语音输入、PC端文本输入等场景。