Files
TrulyMEM-TrueHumanMEM-local/core/client.py
root b4456a9c5b 多用户系统 + Admin 角色权限 + Web/TUI 同步 + 构建集成
本轮实现功能:
1. 多用户隔离:每个用户独立 config.json + graph.db
2. TUI 登录页 + 旧版自动迁移(core/migrate.py)
3. Admin/User 角色体系(core/embedded_db.py)
4. Web 后台管理 API(userinfo + admin CRUD)
5. Web 设置页用户管理区(仅 admin 可见)
6. TUI 侧栏配置区权限同步(非 admin 隐藏 Web 服务设置)
7. Web 服务打包为独立二进制(trulymem-web)
8. 双入口 PyInstaller 构建脚本(TUI + Web)
9. 活动记录器(core/activity_recorder.py)
10. 静态页面模板(登录/设置/首次引导)
2026-04-28 10:37:57 +08:00

129 lines
3.9 KiB
Python

import threading
import time
from typing import Any, Dict
from .server import BackendServer, Packet, PacketType
class BackendClient:
def __init__(self, server: BackendServer):
self._server = server
self._counter = 0
self._lock = threading.Lock()
def _next_id(self) -> str:
with self._lock:
self._counter += 1
return f"{time.time()}_{self._counter}"
def send(self, message: str) -> Dict:
return self.process_message(message)
def process_message(self, user_input: str) -> Dict:
return self._server.process_message(user_input)
def get_settings(self) -> Dict:
packet = Packet(
id=self._next_id(),
type=PacketType.GET_SETTINGS,
body={}
)
return self._server.send(packet).body
def update_settings(self, api_config: Dict = None, tool_limits: Dict = None) -> Dict:
packet = Packet(
id=self._next_id(),
type=PacketType.SET_SETTINGS,
body={
"api_config": api_config or {},
"tool_limits": tool_limits or {}
}
)
return self._server.send(packet).body
def execute_tool(self, name: str, arguments: Dict) -> Dict:
packet = Packet(
id=self._next_id(),
type=PacketType.EXECUTE_TOOL,
body={"tool_name": name, "arguments": arguments}
)
return self._server.send(packet).body
def get_status(self) -> Dict:
packet = Packet(
id=self._next_id(),
type=PacketType.GET_STATUS,
body={}
)
return self._server.send(packet).body
def save_history(self, messages: list) -> Dict:
packet = Packet(
id=self._next_id(),
type=PacketType.SAVE_HISTORY,
body={"messages": messages}
)
response = self._server.send(packet)
return response.body.get("data", {})
def get_history(self) -> list:
packet = Packet(
id=self._next_id(),
type=PacketType.GET_HISTORY,
body={}
)
response = self._server.send(packet)
data = response.body.get("data", {})
return data.get("history", [])
def clear_history(self) -> Dict:
packet = Packet(
id=self._next_id(),
type=PacketType.SAVE_HISTORY,
body={"messages": []}
)
response = self._server.send(packet)
return response.body.get("data", {})
def get_web_users(self) -> list:
"""获取 Web 用户列表"""
packet = Packet(
id=self._next_id(),
type=PacketType.GET_WEB_USERS,
body={}
)
return self._server.send(packet).body.get("users", [])
def set_web_user(self, username: str, password: str) -> Dict:
"""设置 Web 用户"""
packet = Packet(
id=self._next_id(),
type=PacketType.SET_WEB_USER,
body={"username": username, "password": password}
)
return self._server.send(packet).body.get("data", {"success": False})
def get_full_config(self) -> Dict:
"""获取完整配置"""
packet = Packet(
id=self._next_id(),
type=PacketType.GET_CONFIG,
body={}
)
response = self._server.send(packet)
return response.body if response.body else {"api_config": {}, "tool_limits": {}}
def report_web_status(self, running: bool, port: int = 4096) -> Dict:
"""向后端报告 Web 服务运行状态"""
packet = Packet(
id=self._next_id(),
type=PacketType.GET_WEB_SERVICE_STATUS,
body={"running": running, "port": port}
)
response = self._server.send(packet)
return response.body if response.body else {"success": False}
def shutdown(self) -> None:
self._server.shutdown()