From c4f7b5a64549b003b312c5f0a851043ccd1b288c Mon Sep 17 00:00:00 2001 From: root Date: Tue, 28 Apr 2026 11:24:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0=20?= =?UTF-8?q?--web=20=E5=8F=82=E6=95=B0=EF=BC=8C=E4=BA=8C=E8=BF=9B=E5=88=B6?= =?UTF-8?q?=E5=8F=AF=E7=9B=B4=E6=8E=A5=E5=90=AF=E5=8A=A8=20Web=20headless?= =?UTF-8?q?=20=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trulymem_entry.py | 64 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/trulymem_entry.py b/trulymem_entry.py index d856a07..3eb977d 100644 --- a/trulymem_entry.py +++ b/trulymem_entry.py @@ -1,6 +1,9 @@ #!/usr/bin/env python3 +import argparse import sys import os +import signal +import threading from pathlib import Path # 用户配置文件始终放在用户目录 @@ -30,21 +33,54 @@ from ui import GraphMemoryApp def main(): - backend_server = BackendServer( - db_path=str(DB_PATH), - use_embedded_db=True, - config_file=str(CONFIG_PATH) - ) - backend_server.start() - - app = GraphMemoryApp(backend_server=backend_server, config_file=str(CONFIG_PATH)) - - try: - app.run() - except KeyboardInterrupt: - print("\n退出") - finally: + parser = argparse.ArgumentParser(description='TrulyMEM - True Human Memory') + parser.add_argument('--web', action='store_true', help='以 Web 服务模式启动(headless,不启动 TUI)') + parser.add_argument('--port', type=int, default=4096, help='Web 服务端口(默认 4096)') + args = parser.parse_args() + + if args.web: + # Web headless 模式 + from web_api import run_web_server, stop_web_server + + backend_server = BackendServer( + db_path=str(DB_PATH), + use_embedded_db=True, + config_file=str(CONFIG_PATH) + ) + backend_server.start() + + print(f"TrulyMEM Web 服务启动在 http://0.0.0.0:{args.port}") + run_web_server(port=args.port, host='0.0.0.0') + + # 阻塞主线程直到收到信号 + shutdown_event = threading.Event() + def _handle_signal(signum, frame): + print("\n收到停止信号,正在关闭...") + shutdown_event.set() + signal.signal(signal.SIGINT, _handle_signal) + signal.signal(signal.SIGTERM, _handle_signal) + + shutdown_event.wait() + stop_web_server() backend_server.shutdown() + print("TrulyMEM Web 服务已停止") + else: + # TUI 模式(默认) + backend_server = BackendServer( + db_path=str(DB_PATH), + use_embedded_db=True, + config_file=str(CONFIG_PATH) + ) + backend_server.start() + + app = GraphMemoryApp(backend_server=backend_server, config_file=str(CONFIG_PATH)) + + try: + app.run() + except KeyboardInterrupt: + print("\n退出") + finally: + backend_server.shutdown() if __name__ == "__main__":