feat: 添加聊天会话界面

- 新增 OpenClaw Gateway 连接器 (api/openclaw_connector.py)
- 新增聊天 WebSocket 路由 (api/chat.py)
- 新增聊天界面模板 (templates/chat/index.html)
- 新增聊天样式 (static/css/chat.css)
- 修改 app.py 支持 SocketIO
- 登录后默认跳转到聊天界面

作者:小白 🐶
This commit is contained in:
小白
2026-03-14 06:12:28 +08:00
parent 86a6dd2a91
commit db5378c7e8
6 changed files with 1058 additions and 3 deletions

29
app.py
View File

@@ -2,13 +2,14 @@
# -*- coding: utf-8 -*-
"""
OpenClaw Mission Control - Flask 版本
支持登录、注册、控制中心功能
支持登录、注册、控制中心、聊天功能
作者:小白 🐶
"""
from flask import Flask, render_template, redirect, url_for, request, flash, make_response
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
from flask_sqlalchemy import SQLAlchemy
from flask_socketio import SocketIO
from werkzeug.security import generate_password_hash, check_password_hash
import os
@@ -18,6 +19,9 @@ app.config['SECRET_KEY'] = 'xiaobai-secret-key-2026'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 初始化 SocketIO
socketio = SocketIO(app, cors_allowed_origins="*", async_mode='threading')
# 禁用缓存 - 解决浏览器缓存问题
@app.after_request
def add_no_cache_headers(response):
@@ -40,6 +44,9 @@ login_manager.login_view = 'login'
from api import api
app.register_blueprint(api)
# 注册聊天 Socket Handlers
from api.chat import register_socket_handlers, init_gateways
# 用户模型
class User(UserMixin, db.Model):
@@ -63,10 +70,17 @@ def load_user(user_id):
@app.route('/')
def index():
if current_user.is_authenticated:
return redirect(url_for('dashboard'))
return redirect(url_for('chat'))
return render_template('index.html')
# 路由 - 聊天界面
@app.route('/chat')
@login_required
def chat():
return render_template('chat/index.html', username=current_user.username)
# 路由 - 控制中心仪表盘
@app.route('/dashboard')
@login_required
@@ -166,4 +180,13 @@ with app.app_context():
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False)
# 注册 Socket.IO 事件处理器
register_socket_handlers(socketio)
# 初始化 Gateway 连接
init_gateways()
# 启动应用(使用 SocketIO
print("🚀 启动 OpenClaw Mission Control...")
print("📍 访问地址: http://0.0.0.0:5000")
socketio.run(app, host='0.0.0.0', port=5000, debug=False, allow_unsafe_werkzeug=True)