Spaces:
Paused
Paused
| # Docker entrypoint: 适配 Hugging Face Spaces 的启动脚本 | |
| # 功能:初始化数据目录、同步配置并启动 Hermes | |
| set -e | |
| # --- 1. 路径配置 (优先使用环境变量,否则使用默认值) --- | |
| # 在 Hugging Face 中,HOME 默认为 /home/user | |
| : "${HERMES_HOME:=$HOME/data}" | |
| : "${INSTALL_DIR:=$HOME/app}" | |
| : "${VIRTUAL_ENV:=$HOME/venv}" | |
| # 确保 PATH 包含虚拟环境(双重保险) | |
| export PATH="$VIRTUAL_ENV/bin:$PATH" | |
| echo "--- Hermes Bootstrapping ---" | |
| echo "Data Directory: $HERMES_HOME" | |
| echo "Install Directory: $INSTALL_DIR" | |
| # --- 2. 创建必要的子目录 --- | |
| # 在 /home/user/data 下创建结构,这里拥有完整写权限 | |
| mkdir -p "$HERMES_HOME"/{cron,sessions,logs,hooks,memories,skills,skins,plans,workspace,home} | |
| # --- 3. 初始配置文件检查与拷贝 --- | |
| # 如果挂载的持久化目录中没有配置文件,则从安装目录拷贝模板 | |
| # .env 文件 | |
| if [ ! -f "$HERMES_HOME/.env" ]; then | |
| echo "Info: Creating default .env from template..." | |
| if [ -f "$INSTALL_DIR/.env.example" ]; then | |
| cp "$INSTALL_DIR/.env.example" "$HERMES_HOME/.env" | |
| else | |
| echo "Warning: .env.example not found in $INSTALL_DIR" | |
| fi | |
| fi | |
| # config.yaml 文件 | |
| if [ ! -f "$HERMES_HOME/config.yaml" ]; then | |
| echo "Info: Creating default config.yaml..." | |
| if [ -f "$INSTALL_DIR/cli-config.yaml.example" ]; then | |
| cp "$INSTALL_DIR/cli-config.yaml.example" "$HERMES_HOME/config.yaml" | |
| else | |
| echo "Warning: cli-config.yaml.example not found" | |
| fi | |
| fi | |
| # SOUL.md 文件 | |
| if [ ! -f "$HERMES_HOME/SOUL.md" ]; then | |
| echo "Info: Creating default SOUL.md..." | |
| if [ -f "$INSTALL_DIR/docker/SOUL.md" ]; then | |
| cp "$INSTALL_DIR/docker/SOUL.md" "$HERMES_HOME/SOUL.md" | |
| else | |
| echo "Warning: SOUL.md not found in docker folder" | |
| fi | |
| fi | |
| # --- 4. 同步内置技能 (Skills Sync) --- | |
| if [ -d "$INSTALL_DIR/skills" ]; then | |
| echo "Info: Syncing bundled skills..." | |
| # 显式使用虚拟环境中的 python 运行同步脚本 | |
| "$VIRTUAL_ENV/bin/python3" "$INSTALL_DIR/tools/skills_sync.py" || echo "Skill sync failed, skipping..." | |
| fi | |
| # --- 5. 启动应用 --- | |
| # 使用 exec 确保 hermes 进程成为容器的 PID 1,以便正确接收停止信号 | |
| echo "--- Starting Hermes Agent on Port $PORT ---" | |
| # 如果你发现程序没有正确读取 $PORT 环境变量,可以显式在这里指定 | |
| # 例如:exec hermes --port "$PORT" "$@" | |
| # exec hermes "$@" | |
| echo "Starting Web Terminal via ttyd on port $PORT..." | |
| # 使用 ttyd 包装 hermes 启动 | |
| # -p $PORT: 监听 Hugging Face 分配的端口 | |
| # -W: 允许网页端写入(即允许你打字输入) | |
| # hermes: 要运行的目标程序 | |
| exec ttyd -p "$PORT" -W hermes |