返回 JoyAI-Echo
start_local.sh
根目录 / echo_longvideo / Director_Agent / start_local.sh
1 #!/usr/bin/env bash
2 set -euo pipefail
3
4 ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5 CONFIG="${ROOT}/.config.local.json"
6 WORKSPACE="${ROOT}/.local-workspace"
7 RUNTIME="${ROOT}/.local-runtime"
8
9 load_env_defaults() {
10 local env_file="$1" line key value
11 while IFS= read -r line || [[ -n "${line}" ]]; do
12 line="${line%$'\r'}"
13 [[ "${line}" =~ ^[[:space:]]*(#|$) ]] && continue
14 [[ "${line}" == *=* ]] || continue
15
16 key="${line%%=*}"
17 value="${line#*=}"
18 key="${key#"${key%%[![:space:]]*}"}"
19 key="${key%"${key##*[![:space:]]}"}"
20 [[ "${key}" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]] || continue
21 if printenv "${key}" >/dev/null 2>&1; then
22 continue
23 fi
24
25 if [[ ${#value} -ge 2 && ${value:0:1} == '"' && ${value: -1} == '"' ]]; then
26 value="${value:1:${#value}-2}"
27 elif [[ ${#value} -ge 2 && ${value:0:1} == "'" && ${value: -1} == "'" ]]; then
28 value="${value:1:${#value}-2}"
29 fi
30 printf -v "${key}" '%s' "${value}"
31 export "${key}"
32 done <"${env_file}"
33 }
34
35 # Local defaults come from .env. Values already supplied by the caller win.
36 if [[ -f "${ROOT}/.env" ]]; then
37 load_env_defaults "${ROOT}/.env"
38 fi
39
40 if ! command -v uv >/dev/null 2>&1; then
41 echo "uv is required: https://docs.astral.sh/uv/" >&2
42 exit 1
43 fi
44 if [[ ! -d "${ROOT}/.venv" ]]; then
45 echo "Run bash ${ROOT}/setup_local.sh first." >&2
46 exit 1
47 fi
48 if [[ ! -f "${CONFIG}" ]]; then
49 echo "Missing ${CONFIG}." >&2
50 exit 1
51 fi
52
53 mkdir -p "${WORKSPACE}" "${RUNTIME}"
54 cd "${ROOT}"
55 uv run --extra api nanobot gateway \
56 --config "${CONFIG}" \
57 --workspace "${WORKSPACE}" \
58 --debug >"${RUNTIME}/gateway.log" 2>&1 &
59 GATEWAY_PID=$!
60
61 cleanup() {
62 kill "${GATEWAY_PID}" "${WEBUI_PID:-}" 2>/dev/null || true
63 wait "${GATEWAY_PID}" "${WEBUI_PID:-}" 2>/dev/null || true
64 }
65 trap cleanup EXIT INT TERM
66
67 npm --prefix webui run dev -- --host 127.0.0.1 --port 5187 >"${RUNTIME}/webui.log" 2>&1 &
68 WEBUI_PID=$!
69
70 echo "Echo Director: http://127.0.0.1:5187/"
71 echo "Gateway log: ${RUNTIME}/gateway.log"
72 echo "WebUI log: ${RUNTIME}/webui.log"
73 wait "${GATEWAY_PID}" "${WEBUI_PID}"
74
74 lines BASH