From deadc684c76182a12a0febb1989ce295ba74c39f Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Fri, 13 Mar 2026 13:10:32 -0400 Subject: [PATCH] feat: Add API endpoints and UI for managing application settings, deploy servers, and Git servers. --- backend/.env.example | 8 ++++---- backend/app/config.py | 1 + backend/app/routers/config.py | 1 + backend/app/schemas.py | 2 ++ docker-compose.yml | 2 +- frontend/src/api/client.ts | 1 + frontend/src/pages/Settings.tsx | 2 ++ 7 files changed, 12 insertions(+), 5 deletions(-) diff --git a/backend/.env.example b/backend/.env.example index 95044ba..d723a2d 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -6,10 +6,10 @@ TELEGRAM_BOT_TOKEN=your-telegram-bot-token TELEGRAM_CHAT_ID=your-chat-id # ─── OpenClaw ────────────────────────────────────────────── -# Path on the HOST (where openclaw workspace is stored) -OPENCLAW_WORKSPACE=/home/openclaw/.openclaw/workspace -# Path in the CONTAINER (keep as is) -FOXY_WORKSPACE=/home/foxy/.openclaw/workspace +# Root path on the HOST (contains agents/, workspace/, config.json) +OPENCLAW_HOME=/home/openclaw/.openclaw +# Root path in the CONTAINER (keep as is) +FOXY_HOME=/home/foxy/.openclaw # ─── Gitea ───────────────────────────────────────────────── GITEA_SERVER=https://gitea.your.server diff --git a/backend/app/config.py b/backend/app/config.py index 65c2b9c..8fbbad3 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -16,6 +16,7 @@ class Settings(BaseSettings): TELEGRAM_CHAT_ID: str = "" # OpenClaw + FOXY_HOME: str = "/home/foxy/.openclaw" FOXY_WORKSPACE: str = "/home/foxy/.openclaw/workspace" # Gitea diff --git a/backend/app/routers/config.py b/backend/app/routers/config.py index 7f1bf43..4c386e5 100644 --- a/backend/app/routers/config.py +++ b/backend/app/routers/config.py @@ -27,6 +27,7 @@ router = APIRouter(prefix="/api/config", tags=["config"]) async def get_config(): """Get current configuration (secrets masked).""" return ConfigResponse( + FOXY_HOME=settings.FOXY_HOME, FOXY_WORKSPACE=settings.FOXY_WORKSPACE, GITEA_SERVER=settings.GITEA_SERVER, DEPLOYMENT_SERVER=settings.DEPLOYMENT_SERVER, diff --git a/backend/app/schemas.py b/backend/app/schemas.py index 51df717..4000193 100644 --- a/backend/app/schemas.py +++ b/backend/app/schemas.py @@ -218,6 +218,7 @@ class AgentStatus(BaseModel): class ConfigResponse(BaseModel): + FOXY_HOME: str FOXY_WORKSPACE: str GITEA_SERVER: str DEPLOYMENT_SERVER: str @@ -231,6 +232,7 @@ class ConfigResponse(BaseModel): class ConfigUpdate(BaseModel): + FOXY_HOME: Optional[str] = None FOXY_WORKSPACE: Optional[str] = None GITEA_SERVER: Optional[str] = None DEPLOYMENT_SERVER: Optional[str] = None diff --git a/docker-compose.yml b/docker-compose.yml index 271c252..aee6e63 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,7 @@ services: - backend/.env volumes: - foxy-data:/app/data - - "${OPENCLAW_WORKSPACE:-/home/openclaw/.openclaw/workspace}:${FOXY_WORKSPACE:-/home/foxy/.openclaw/workspace}" + - "${OPENCLAW_HOME:-/home/openclaw/.openclaw}:${FOXY_HOME:-/home/foxy/.openclaw}" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:7000/api/health"] interval: 30s diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index a53dcb2..f2c05a2 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -136,6 +136,7 @@ export interface GitServer { } export interface AppConfig { + FOXY_HOME: string; FOXY_WORKSPACE: string; GITEA_SERVER: string; DEPLOYMENT_SERVER: string; diff --git a/frontend/src/pages/Settings.tsx b/frontend/src/pages/Settings.tsx index 074ae44..a814cd3 100644 --- a/frontend/src/pages/Settings.tsx +++ b/frontend/src/pages/Settings.tsx @@ -19,6 +19,7 @@ export default function SettingsPage() { setMessage(''); try { await api.updateConfig({ + FOXY_HOME: config.FOXY_HOME, FOXY_WORKSPACE: config.FOXY_WORKSPACE, GITEA_SERVER: config.GITEA_SERVER, DEPLOYMENT_SERVER: config.DEPLOYMENT_SERVER, @@ -37,6 +38,7 @@ export default function SettingsPage() { } const fields: { key: keyof AppConfig; label: string; icon: string; editable: boolean; secret?: boolean }[] = [ + { key: 'FOXY_HOME', label: 'Home OpenClaw (Conteneur)', icon: '🏠', editable: true }, { key: 'FOXY_WORKSPACE', label: 'Workspace Foxy (Conteneur)', icon: '📁', editable: true }, { key: 'GITEA_SERVER', label: 'Serveur Gitea', icon: '🌐', editable: true }, { key: 'GITEA_OPENCLAW_TOKEN', label: 'Token Gitea', icon: '🔑', editable: false, secret: true },