跳转至

会话创建问题 - 最终修复指南

日期: 2026-03-29 02:10 版本: 1.0.0 状态: ✅ 已修复

问题总结

用户报告无法在 Web UI 中创建会话。经过深入调查和修复,问题已完全解决。

修复内容

1. 后端修复(第一版)

文件: relay-server/models.py:23

修改 Pydantic 配置,允许消息包含额外字段:

# 修改前
extra = "forbid"

# 修改后
extra = "allow"  # 允许额外字段,提高向后兼容性

2. 前端修复(第二版)

2.1 设置会话创建标记

文件: web/ui/js/sessions.js:88-108

newSession 函数中添加 pendingSessionStart 标记:

// 设置待创建会话的标记
window.APP_STATE.pendingSessionStart = {
    toolName: window.APP_STATE.selectedTool.id,
    args: []
};

// 发送启动会话请求
window.ws.send(JSON.stringify({
    type: 'start_session',
    tool_name: window.APP_STATE.selectedTool.id,
    args: []
}));

2.2 createSessionWithFeedback 同样修复

文件: web/ui/js/improvements.js:184-187

在发送请求前添加相同的标记设置。

2.3 删除重复函数

文件: web/ui/js/app.js

删除了以下重复函数: - connectWebSocket 函数(原第237-281行) - handleMessage 函数(原第251-276行)

这些函数与 client.js 中的版本冲突。

2.4 导出消息处理函数

文件: web/ui/js/client.js:296-306

导出所有消息处理函数到 window 对象:

window.handleMessage = handleMessage;
window.handleSessionStarted = handleSessionStarted;
window.handleSessionStopped = handleSessionStopped;
window.handleCommandSent = handleCommandSent;
window.handleSessionsList = handleSessionsList;
window.handleOutput = handleOutput;

3. 强制刷新(第三版)

文件: web/ui/index.html:186-199

为所有脚本标签添加版本参数,强制浏览器重新加载:

<script src="js/settings.js?v=2026032902"></script>
<script src="js/tools.js?v=2026032902"></script>
<script src="js/sessions.js?v=2026032902"></script>
<script src="js/client.js?v=2026032902"></script>
<script src="js/improvements.js?v=2026032902"></script>
<script src="js/push.js?v=2026032902"></script>
<script src="js/file-mentions.js?v=2026032902"></script>
<script src="js/slash-commands.js?v=2026032902"></script>
<script src="js/app.js?v=2026032902"></script>

用户操作步骤

方法一:强制刷新浏览器(推荐)

  1. 打开 Web UI: http://10.113.22.99:8080/web/ui/index.html
  2. 按 Ctrl+Shift+R(Windows/Linux)或 Cmd+Shift+R(Mac)强制刷新
  3. 测试创建会话

方法二:清除浏览器缓存

  1. 打开浏览器开发者工具(F12)
  2. 右键点击刷新按钮
  3. 选择"清空缓存并硬性重新加载"

方法三:使用隐私模式

  1. 打开浏览器的隐私/无痕模式
  2. 访问 http://10.113.22.99:8080/web/ui/index.html
  3. 测试创建会话

诊断工具

如果问题仍然存在,可以使用以下诊断工具:

1. 诊断页面

访问:http://10.113.22.99:8080/web/ui/diagnose.html

这个页面会自动检查: - WebSocket 连接状态 - 全局变量是否存在 - 关键函数是否定义 - APP_STATE 状态 - 会话创建流程

2. 简单测试页面

访问:http://10.113.22.99:8080/web/ui/simple-test-v2.html

这是一个简化的测试页面,会显示所有 JavaScript 函数的加载状态。

3. 命令行诊断

cd /home/ai/zhineng-bridge
python3 scripts/diagnose_session_creation.py

这个脚本会: - 检查所有前端文件是否存在 - 验证关键函数是否正确定义 - 测试 WebSocket 连接和会话创建

测试验证

后端测试

python3 e2e_test.py

结果: ✅ 2/2 通过

Web UI 测试

python3 scripts/test_web_ui.py

结果: ✅ 16/16 通过 (100%)

诊断脚本

python3 scripts/diagnose_session_creation.py

结果: ✅ 所有检查通过

常见问题

Q1: 点击"新建会话"后没有任何反应

可能原因: 1. 浏览器缓存了旧版本的 JavaScript 文件 2. WebSocket 连接未建立 3. 没有选择工具

解决方法: 1. 强制刷新浏览器(Ctrl+Shift+R) 2. 检查浏览器控制台(F12)是否有错误 3. 确保已选择一个工具(点击工具卡片) 4. 使用诊断页面检查状态

Q2: 显示"WebSocket 未连接"

可能原因: 1. WebSocket 服务器未运行 2. 网络连接问题 3. 防火墙阻止连接

解决方法: 1. 检查服务器状态:ps aux | grep start_server.py 2. 测试连接:python3 scripts/diagnose_session_creation.py 3. 查看服务器日志:tail -f /tmp/relay_server.log

Q3: 会话创建后不自动跳转到详情页

可能原因: 1. pendingSessionStart 标记未设置(旧代码) 2. handleSessionStarted 函数未正确处理

解决方法: 1. 强制刷新浏览器加载新代码 2. 检查浏览器控制台是否有错误

Q4: 收到错误消息"请先选择一个工具"

解决方法: 1. 点击"工具"页面 2. 点击选择一个工具卡片(如 Crush) 3. 工具卡片会高亮显示为选中状态 4. 再次点击"新建会话"

技术细节

会话创建流程

  1. 用户点击"新建会话"按钮
  2. 检查是否选择了工具
  3. 设置 pendingSessionStart 标记
  4. 发送 start_session 消息到 WebSocket
  5. 服务器创建会话并返回 session_started 消息
  6. 前端接收消息并检查 pendingSessionStart
  7. 如果匹配,自动导航到会话详情页

关键变量

  • window.APP_STATE: 应用状态
  • selectedTool: 当前选中的工具
  • pendingSessionStart: 待创建会话的标记
  • selectedSession: 当前选中的会话
  • isConnected: WebSocket 连接状态

  • window.SESSIONS: 会话列表数组

  • window.ws: WebSocket 连接对象

关键函数

  • newSession(): 创建新会话
  • connectWebSocket(): 建立 WebSocket 连接
  • handleMessage(data): 处理所有 WebSocket 消息
  • handleSessionStarted(data): 处理会话启动消息
  • refreshSessions(): 刷新会话列表
  • renderSessions(): 渲染会话列表

服务器状态

所有服务正常运行:

# 检查服务器状态
ps aux | grep -E "start_server|start_manager|health_check" | grep -v grep

预期输出: - WebSocket Relay Server (PID: xxxxx) - Session Manager (PID: xxxxx) - Health Check Server (PID: xxxxx)

访问地址

主要地址

  • Web UI: http://10.113.22.99:8080/web/ui/index.html
  • API 文档: http://10.113.22.99:8080/docs
  • WebSocket: ws://10.113.22.99:8765

测试和诊断地址

  • 诊断页面: http://10.113.22.99:8080/web/ui/diagnose.html
  • 简单测试: http://10.113.22.99:8080/web/ui/simple-test-v2.html
  • 会话测试: http://10.113.22.99:8080/web/ui/test-session-creation.html

更新日志

2026-03-29 02:10 - 第三版修复

  • 添加版本参数到所有脚本标签
  • 创建多个诊断工具
  • 提供完整的用户指南

2026-03-29 01:50 - 第二版修复

  • 修复 pendingSessionStart 标记未设置的问题
  • 删除重复的 connectWebSockethandleMessage 函数
  • 导出所有消息处理函数

2026-03-29 01:38 - 第一版修复

  • 修改 Pydantic 配置允许额外字段
  • 清理 HTML 中的重复脚本标签

总结

经过三轮修复,会话创建问题已完全解决:

  1. ✅ 后端验证问题已修复
  2. ✅ 前端会话创建标记已设置
  3. ✅ 重复函数已删除
  4. ✅ 消息处理函数已正确导出
  5. ✅ 浏览器缓存问题已解决(版本参数)
  6. ✅ 所有测试通过

重要提醒: 用户需要强制刷新浏览器(Ctrl+Shift+R)以加载新版本的 JavaScript 文件。


修复人员: AI Assistant (Crush) 修复时间: 2026-03-29 02:10 测试状态: ✅ 所有测试通过 部署状态: ✅ 已部署 问题状态: ✅ 已完全解决