2026-07-21 11:05:57 +08:00
|
|
|
|
# ============================================================
|
|
|
|
|
|
# 后端入口(moduleId: server-main, 可重生 ✅)
|
|
|
|
|
|
# 用法:python -m uvicorn server.main:app --reload --port 8000
|
|
|
|
|
|
# 职责:加载 .env → 构建应用 →(首次启动时)确保世界已播种
|
|
|
|
|
|
# ============================================================
|
|
|
|
|
|
from dotenv import load_dotenv # .env 加载器
|
|
|
|
|
|
|
|
|
|
|
|
# 先于一切导入加载环境变量(ModelProvider 构造依赖 LLM_* 变量)
|
|
|
|
|
|
load_dotenv() # 仓库根 .env(不存在则静默跳过)
|
|
|
|
|
|
|
2026-07-28 02:12:46 +08:00
|
|
|
|
# 桌面端 APS_MODE=desktop → 确保 ~/.aps/{skills,sessions,data,…}
|
2026-08-20 11:39:21 +08:00
|
|
|
|
# Web 端 → 确保 APS_DATA_DIR(容器内 /app/server/data,PVC 持久卷);
|
|
|
|
|
|
# 数据目录不可写时立即在日志给出显式告警(创建项目等写入会失败),不再静默跳过。
|
|
|
|
|
|
import sys as _sys
|
|
|
|
|
|
|
2026-07-28 02:12:46 +08:00
|
|
|
|
try:
|
2026-08-20 11:39:21 +08:00
|
|
|
|
from server.aps_home import ensure_aps_home, storage_status
|
2026-07-28 02:12:46 +08:00
|
|
|
|
ensure_aps_home()
|
2026-08-20 11:39:21 +08:00
|
|
|
|
_storage = storage_status()
|
|
|
|
|
|
if not _storage["writable"]:
|
|
|
|
|
|
print(
|
|
|
|
|
|
"[APS][FATAL] 数据目录不可写: %s — 创建项目/排产等写入将失败。%s"
|
|
|
|
|
|
% (_storage["dataDir"], _storage.get("remedy") or ""),
|
|
|
|
|
|
file=_sys.stderr,
|
|
|
|
|
|
flush=True,
|
|
|
|
|
|
)
|
|
|
|
|
|
except Exception as _exc:
|
|
|
|
|
|
print("[APS][WARN] APS 数据目录初始化失败: %s" % _exc, file=_sys.stderr, flush=True)
|
2026-07-21 11:05:57 +08:00
|
|
|
|
|
2026-07-28 02:12:46 +08:00
|
|
|
|
from server.gateway.app import create_app # 应用工厂(置于 load_dotenv 之后)
|
2026-07-21 11:05:57 +08:00
|
|
|
|
|
|
|
|
|
|
# ASGI 应用实例(uvicorn 入口点)
|
|
|
|
|
|
app = create_app() # 构建 FastAPI 应用
|