Spaces:
Runtime error
Runtime error
Commit History
-
fix(terminal): skip JupyterLab login screen; add backup warning banner
- health-server.js: inject ?token= into initial terminal HTML requests so JupyterLab 4.x sets the auth cookie and skips its own login screen. Authorization header alone is insufficient for HTML page loads in JL 4.x. - health-server.js: add prominent dashboard banner when HF_TOKEN is not set, warning that all data will be lost on Space restart (fixes #12 root cause). - health-server.js: fix 503 message on /terminal/ to not mention JUPYTER_TOKEN. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>dc1a562
-
docs: restore DEV_MODE and JUPYTER_TOKEN to env table and terminal section
Only the frontmatter secrets block should have been removed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>a06ec5d -
docs: remove DEV_MODE and JUPYTER_TOKEN entries from README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>2eb13d3 -
fix(terminal): inject GATEWAY_TOKEN into JupyterLab proxy to skip double login prompt
health-server.js reads JUPYTER_TOKEN at process start, but start_jupyter() only exports it later — so the env var is empty and no auth header is injected, causing JupyterLab to show its own login screen after the user already authenticated with GATEWAY_TOKEN. Fix: fall back to API_SERVER_KEY (== GATEWAY_TOKEN), which is exactly what JupyterLab was started with. User authenticates once; no second prompt. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>b8fda45
-
fix(health-server): resolve iframe redirect causing 'refused to connect' (#11)
- health-server.js: guard private-space redirect behind iframe detection (window.top !== window.self) — fixes X-Frame-Options DENY on huggingface.co blocking iframe navigation - health-server.js: add privacyDetectionReady Promise to eliminate race condition where fail-secure default triggered false redirects on public spaces - health-server.js: add /api/is-private endpoint + client-side syncPrivacy() - health-server.js: add SPACE_PRIVACY env var override to skip HF API detection - health-server.js: add isFromHFApp referer guard to skip redirect inside HF UI - cloudflare-proxy-setup.py: remove AI provider domains from DEFAULT_ALLOWED to prevent routing API keys through worker without explicit opt-in - env-builder.js: add tag badge system (critical/credential/feature/optional/ advanced/build) with per-field tags; add SPACE_PRIVACY field - env-builder.js: split bundle generation — explicit generateBundle() button vs auto refresh() for summary/counts only - env-builder.html: ad…aa128fa -
fix: revert uv to bare invocation with --python flag
/opt/hermes/.venv/bin/uv does not exist — uv is a global binary on the Hermes base image. Bare `uv` is in PATH; explicit --python targets the venv. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>8e5610b -
fix: make kanban patch and Docker build fully failure-safe
- Wrap entire kanban patch in try/except so any error (encoding, permissions, changed upstream file structure) skips silently instead of exiting 1 - Use errors='replace' when reading kanban_db.py to handle non-UTF-8 bytes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>ee98905 -
fix: resolve Docker build failures by handling library renaming, pinning JupyterLab dependencies, and using explicit binary paths
ddafed3 -
feat: give hermes user passwordless sudo
Install sudo and grant hermes ALL=(ALL) NOPASSWD: ALL so the agent can run privileged commands (apt install, service management, file operations) without a password prompt. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>4488348
-
feat: self-healing gateway, package replay, private space guard, key rotation, readme sync
- start.sh: gateway restart loop, shell capture wrappers (apt/pip/uv/npm/hermes), pool key promotion for 16 providers, HUGGINGMES_RUN startup scripts, env-driven package installs, JupyterLab PID guard, enhanced boot banner - health-server.js: private space guard (HF API detect + redirect), embed-aware dashboard buttons, /hf-redirect route - .env.example: add HUGGINGMES_RUN, package installs, key rotation pools, gateway restart vars, terminal vars, webhook URL - README.md: document all new features, fix terminal section (on by default), add ephemeral package replay and key rotation sections Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>43301b6 -
docs: add v0.2.0 changelog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>d32fed3 -
fix: auth on env-builder, single login for terminal, new login UI
- Protect /env-builder and /env-builder.js with requireAuth (same as /app) - Inject Authorization: token <JUPYTER_TOKEN> when proxying to JupyterLab so JupyterLab skips its own login screen — one password instead of two - New login page: HuggingClaw-style dark card (matches project aesthetic) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>715f4a5 -
feat: add ENV Builder at /env-builder
Port env-builder from HuggingClaw, adapted for HuggingMes/Hermes vars: - 8 sections: Core, Backup, Telegram, Terminal, Providers, Cloudflare, Advanced, Custom - Model catalog with provider/model prefix format (gemini/, anthropic/, openrouter/, etc.) - Import/export as HUGGINGMES_ENV_BUNDLE base64 or plain .env - No auth required (useful before GATEWAY_TOKEN is set) - Dashboard button: "ENV Builder →" beside Open Hermes Agent and Open Terminal Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>b25ba68 -
fix: use venv python for JupyterLab — system python3 lacks jupyterlab
jupyterlab is installed into /opt/hermes/.venv, not system python3. start_jupyter() was calling python3 -c "import jupyterlab" which fails on system python → returned 1 → set -euo pipefail killed start.sh → container crashed every boot → HF Space stuck in RUNNING_APP_STARTING. Fixes: - Use /opt/hermes/.venv/bin/python for the import check and launch - Change failing return 1s in start_jupyter to return 0 (non-fatal) - Restore HEALTHCHECK with 60s start-period (was accidentally removed) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>4c78093 -
test: disable HEALTHCHECK to diagnose RUNNING_APP_STARTING
HF Space stuck in RUNNING_APP_STARTING despite /health returning 200. Testing if Docker HEALTHCHECK is causing HF to never flip to RUNNING. HEALTHCHECK NONE lets HF use its own probe (app_port connectivity). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>909b900 -
fix: health endpoint always 200 so Docker HEALTHCHECK passes on startup
/health was returning 503 when the Hermes gateway hadn't started yet. Docker HEALTHCHECK uses curl -f which treats 503 as failure, so the container stayed in "starting" state until the gateway was fully up (~120s). Combined with start-period=180s, HF Space was stuck at RUNNING_APP_STARTING indefinitely. Fix: always return HTTP 200 from /health (gateway status in JSON body). Reduce start-period to 30s since health server starts in ~2s. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>79d2b7b -
fix: increase healthcheck start-period to 180s
Gateway ready timeout is 120s but healthcheck start-period was 90s. With heavier image (Chromium + JupyterLab), container took longer than 90s to become ready causing premature 503 → HF restart loop. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>fbcca6e -
feat: terminal on by default, uses GATEWAY_TOKEN, add dashboard button
- DEV_MODE defaults to true — no extra secret needed - JUPYTER_TOKEN falls back to GATEWAY_TOKEN (single password) - Add "Open Terminal →" button beside "Open Hermes Agent →" on dashboard - Update README to reflect new defaults Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>617d143 -
docs: add JupyterLab terminal setup instructions to README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>0613ee9 -
feat: add JupyterLab terminal at /terminal/ (DEV_MODE=true)
Install JupyterLab in the venv. When DEV_MODE=true and JUPYTER_TOKEN is set (strong token required — full shell access), start JupyterLab on port 8888 with /terminal/ base URL. health-server proxies HTTP and WebSocket (required for kernels/terminals) to JupyterLab. Usage: set DEV_MODE=true and JUPYTER_TOKEN=<openssl rand -hex 32> in HF Space secrets, then visit /terminal/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>775b8b3
-
fix: replace deprecated HF_HUB_ENABLE_HF_TRANSFER with HF_XET_HIGH_PERFORMANCE
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>f2e8984 -
fix: install python3-venv and python3-pip for non-root venv creation
Users hit a dependency loop: python3-venv missing → can't create venv → can't install packages → no root to apt install at runtime. Installing at build time unblocks standard python3 -m venv usage. uv venv also works as an alternative (uv is in PATH via profile.d). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>ea1534e
-
fix: resolve sync timeout with longer timeout and hf_transfer
Default HF Hub read timeout (10s) causes failures on large state uploads. Set HF_HUB_DOWNLOAD_TIMEOUT=300s and enable hf_transfer for faster multipart transfers. Install hf_transfer package in Dockerfile. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>30000cd -
feat: install Chromium and enable Hermes browser tools
Install system Chromium with all required display/font dependencies. Set PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH so Hermes's Playwright picks up the system binary instead of failing with "Chrome not found". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>9a4cb29
-
chore: replace emoji with 🪽 (Hermes winged sandals)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>cf96b21 -
fix: sync state on natural gateway exit to preserve user-set keys
When user restarts the gateway from Hermes dashboard, the gateway process exits naturally. wait() returns but SIGTERM trap never fires, so no sync runs before the container shuts down. Keys set via the UI are lost because the next restore pulls a stale backup. Add an explicit sync-once after wait() to cover the natural-exit path. SIGTERM path already handled by graceful_shutdown trap. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>bdb63d2 -
fix: restore correct gemini provider model name format
Hermes gemini provider requires bare model name (e.g. gemini-2.5-flash) not the prefixed form (google/gemini-2.5-flash). Reverts the incorrect google/ prefix preservation from the previous commit and reunifies google|gemini case with correct prefix stripping. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>6c85d60 -
refactor: decouple model provider configuration from model names to enable automatic provider inference by Hermes
baeabbc
-
docs: add HuggingFlow to More Projects section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>6283613 -
docs: add userinfobot link to Telegram setup
Mirror HuggingClaw's Telegram setup steps — add @userinfobot link so users know how to find their numeric Telegram user ID. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>4226d57 -
feat: add PATH export to profile and enable secret redaction by default
5534b90 -
fix: remove venv from PATH and symlink hermes CLI to .local/bin for terminal compatibility
099d3ad -
chore: add virtual environment path to Dockerfile environment variables
f683ded
-
fix: wrap kanban table migration in try/except to prevent startup crashes on existing databases
29e3514 -
feat: add persistent plugin directory and use setdefault for configuration schema preservation
765659f
-
fix: update footer to credit the author in the dashboard
abaeee7
-
docs: add video tutorial section to README
158cba5 -
feat: implement persistent state tracking, hostname inclusion in sync messages, and interval jittering
e41db1d -
fix: add local time display for backup timestamp in renderDashboard function
9a3eec7 -
fix: update sync interval to 600 seconds and enhance environment variable handling in startup scripts
9277464 -
Fix: Exclude SQLite temp files from sync, improve Cloudflare error diagnostics
fdc1270 -
fix: improve keepalive status message handling in renderDashboard function
Co-authored-by: Copilot <copilot@github.com>79e2809 -
fix: use compliant HF Space emoji metadata
7f1876a -
chore: remove trailing empty line from .gitignore for consistency
c9f4693 -
chore: add empty line at the end of .gitignore for better readability
4029996 -
fix: correct spelling of 'HuggingMes' across multiple files
Co-authored-by: Copilot <copilot@github.com>1428d20 -
feat: update Dockerfile and start.sh to use python3 and enhance startup banner
Co-authored-by: Copilot <copilot@github.com>d3062ba -
refactor: remove Cloudflare worker proxy implementation
7031a4e
-
feat: overhaul README documentation and add .env.example configuration template
0f02e7f -
refactor: update cron interval to 10 minutes and streamline keepalive request logging and handling
e69d277