集成新的Beaver后端服务到应用实例中,替换原有的nanobot实现。 主要变更包括: - 在Dockerfile和环境配置中添加Beaver相关路径和配置变量 - 更新工作目录结构从.nanobot到.beaver - 实现Beaver引擎加载器,支持配置文件加载和工具组装 - 添加内置工具如ListDirectoryTool、ReadFileTool、SearchFilesTool - 更新消息处理流程,支持通道适配器和网关模式 - 重构技能系统,支持显式工具提示和嵌入式检索 - 改进错误处理和生命周期管理 此变更使应用实例能够使用统一的Beaver后端进行AI代理运行时管理。
83 lines
2.0 KiB
Bash
Executable File
83 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
APP_PUBLIC_PORT="${APP_PUBLIC_PORT:-8080}"
|
|
APP_FRONTEND_PORT="${APP_FRONTEND_PORT:-3000}"
|
|
APP_BACKEND_PORT="${APP_BACKEND_PORT:-18080}"
|
|
BEAVER_HOME="${BEAVER_HOME:-/root/.beaver}"
|
|
BEAVER_CONFIG_PATH="${BEAVER_CONFIG_PATH:-$BEAVER_HOME/config.json}"
|
|
BEAVER_WORKSPACE="${BEAVER_WORKSPACE:-$BEAVER_HOME/workspace}"
|
|
NANOBOT_HOME="${NANOBOT_HOME:-$BEAVER_HOME}"
|
|
NANOBOT_AUTH_FILE="${NANOBOT_AUTH_FILE:-$BEAVER_HOME/web_auth_users.json}"
|
|
NANOBOT_RUNTIME_ENV_FILE="${NANOBOT_RUNTIME_ENV_FILE:-$BEAVER_HOME/runtime.env}"
|
|
|
|
log() {
|
|
printf '[app-instance] %s\n' "$*"
|
|
}
|
|
|
|
require_file() {
|
|
local path="$1"
|
|
local message="$2"
|
|
if [[ ! -f "$path" ]]; then
|
|
printf '[app-instance] %s: %s\n' "$message" "$path" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
cleanup() {
|
|
local status=$?
|
|
|
|
if [[ -n "${NGINX_PID:-}" ]]; then
|
|
kill "${NGINX_PID}" 2>/dev/null || true
|
|
fi
|
|
if [[ -n "${FRONTEND_PID:-}" ]]; then
|
|
kill "${FRONTEND_PID}" 2>/dev/null || true
|
|
fi
|
|
if [[ -n "${BACKEND_PID:-}" ]]; then
|
|
kill "${BACKEND_PID}" 2>/dev/null || true
|
|
fi
|
|
|
|
wait 2>/dev/null || true
|
|
exit "$status"
|
|
}
|
|
|
|
trap cleanup EXIT INT TERM
|
|
|
|
mkdir -p "$BEAVER_HOME" "$BEAVER_WORKSPACE"
|
|
|
|
if [[ -f "$NANOBOT_RUNTIME_ENV_FILE" ]]; then
|
|
set -a
|
|
. "$NANOBOT_RUNTIME_ENV_FILE"
|
|
set +a
|
|
fi
|
|
|
|
require_file "$BEAVER_CONFIG_PATH" "Missing Beaver config"
|
|
|
|
export NANOBOT_AUTH_FILE
|
|
export NANOBOT_RUNTIME_ENV_FILE
|
|
export BEAVER_HOME
|
|
export BEAVER_CONFIG_PATH
|
|
export BEAVER_WORKSPACE
|
|
export PORT="$APP_FRONTEND_PORT"
|
|
export HOSTNAME="127.0.0.1"
|
|
|
|
log "starting Beaver backend on 127.0.0.1:${APP_BACKEND_PORT}"
|
|
(
|
|
cd /opt/app/backend
|
|
python -m uvicorn "beaver.interfaces.web.app:create_app" --factory --host 127.0.0.1 --port "$APP_BACKEND_PORT"
|
|
) &
|
|
BACKEND_PID=$!
|
|
|
|
log "starting frontend on 127.0.0.1:${APP_FRONTEND_PORT}"
|
|
(
|
|
cd /opt/app/frontend
|
|
node server.js
|
|
) &
|
|
FRONTEND_PID=$!
|
|
|
|
log "starting nginx on 0.0.0.0:${APP_PUBLIC_PORT}"
|
|
nginx -c /opt/app/nginx.conf -g 'daemon off;' &
|
|
NGINX_PID=$!
|
|
|
|
wait -n "$BACKEND_PID" "$FRONTEND_PID" "$NGINX_PID"
|