38 lines
1.5 KiB
Bash
Executable file
38 lines
1.5 KiB
Bash
Executable file
#!/bin/sh
|
|
# Resolve agent name from .env, fall back to directory convention
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
AGENT_NAME="$(grep '^AGENT_NAME=' "${SCRIPT_DIR}/.env" 2>/dev/null | cut -d= -f2 | tr -d '"')"
|
|
AGENT_NAME="${AGENT_NAME:-$(basename "$SCRIPT_DIR" | sed 's/-ai$//')}"
|
|
|
|
export HOME="/home/${AGENT_NAME}"
|
|
export PATH="/usr/local/bin:/usr/bin:/bin"
|
|
export NODE_ENV="production"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
warn() { echo "WARN: $1" >&2; }
|
|
|
|
if [ -d "${SCRIPT_DIR}/node_modules" ]; then
|
|
OWNER="$(stat -f '%Su' "${SCRIPT_DIR}/node_modules" 2>/dev/null || echo "")"
|
|
if [ -n "$OWNER" ] && [ "$OWNER" != "$AGENT_NAME" ]; then
|
|
warn "node_modules owned by ${OWNER} (expected ${AGENT_NAME}); vite/npm may fail"
|
|
fi
|
|
fi
|
|
|
|
# Ensure tmux session exists for interactive access
|
|
tmux new-session -d -s "${AGENT_NAME}" -n main 2>/dev/null || true
|
|
|
|
# If PI_PROFILE=setup, open pi-tui in a separate tmux window
|
|
PROFILE=$(grep "^PI_PROFILE=" "${SCRIPT_DIR}/.env" 2>/dev/null | cut -d= -f2 | tr -d '"\"' || echo "")
|
|
if [ "$PROFILE" = "setup" ]; then
|
|
tmux new-window -t "${AGENT_NAME}" -n setup 2>/dev/null || true
|
|
tmux send-keys -t "${AGENT_NAME}:setup" "npm run wizard" Enter
|
|
fi
|
|
|
|
# Drop to agent user if launched as root (e.g. via rc.d).
|
|
# The agent does not need root — jail operations go through sudo.
|
|
if [ "$(id -u)" = "0" ]; then
|
|
exec su -m "$AGENT_NAME" -c '"/usr/local/bin/node" "'"${SCRIPT_DIR}"'/dist/index.js"'
|
|
fi
|
|
|
|
# Agent runs as foreground process — what daemon monitors
|
|
exec "/usr/local/bin/node" "${SCRIPT_DIR}/dist/index.js"
|