#!/usr/bin/env sh set -eu ROOT=${CLAWDBOX_AGENT_ROOT:-/data/agents/clawd} LOG_DIR="$ROOT/logs" PID_FILE="$LOG_DIR/node-host.pid" LOG_FILE="$LOG_DIR/node-host.log" OPENCLAW_DIR="$ROOT/tools/openclaw-node" OPENCLAW_VERSION=${OPENCLAW_VERSION:-2026.6.1} DISPLAY_NAME=${CLAWDBOX_NODE_DISPLAY_NAME:-ClawdBox-CLI} GATEWAY_HOST=${OPENCLAW_GATEWAY_HOST:-openclaw.apps.lab.apilab.us} GATEWAY_PORT=${OPENCLAW_GATEWAY_PORT:-443} mkdir -p "$ROOT/bin" "$ROOT/tools" "$LOG_DIR" "$OPENCLAW_DIR" log() { printf '%s %s\n' "$(date -Iseconds)" "$*" | tee -a "$LOG_FILE" } if [ -f "$PID_FILE" ]; then old=$(cat "$PID_FILE" 2>/dev/null || true) case "$old" in *[!0-9]*|"") ;; *) if kill -0 "$old" 2>/dev/null; then echo "$DISPLAY_NAME already running: pid $old" exit 0 fi ;; esac fi if [ ! -f "$OPENCLAW_DIR/package.json" ]; then cat > "$OPENCLAW_DIR/package.json" </dev/null || true) fi if [ "$installed_version" != "$OPENCLAW_VERSION" ]; then log "Installing openclaw@$OPENCLAW_VERSION under $OPENCLAW_DIR" npm install --prefix "$OPENCLAW_DIR" "openclaw@$OPENCLAW_VERSION" --omit=dev >> "$LOG_FILE" 2>&1 fi OPENCLAW_BIN="$OPENCLAW_DIR/node_modules/.bin/openclaw" if [ ! -x "$OPENCLAW_BIN" ]; then log "OpenClaw binary not found at $OPENCLAW_BIN" exit 1 fi ln -sf "$OPENCLAW_BIN" "$ROOT/bin/openclaw" TOKEN=${OPENCLAW_GATEWAY_TOKEN:-} if [ -z "$TOKEN" ]; then TOKEN=$(oc get deployment openclaw -n openclaw -o jsonpath='{.spec.template.spec.containers[0].env[?(@.name=="OPENCLAW_GATEWAY_TOKEN")].value}' 2>/dev/null || true) fi if [ -z "$TOKEN" ]; then log "OPENCLAW_GATEWAY_TOKEN is unavailable; skipping node-host startup" exit 1 fi TLS_FLAG="" if [ "${OPENCLAW_GATEWAY_TLS:-true}" = "true" ]; then TLS_FLAG="--tls" fi log "Starting $DISPLAY_NAME against $GATEWAY_HOST:$GATEWAY_PORT" OPENCLAW_GATEWAY_TOKEN="$TOKEN" nohup "$OPENCLAW_BIN" node run \ --display-name "$DISPLAY_NAME" \ --host "$GATEWAY_HOST" \ --port "$GATEWAY_PORT" \ $TLS_FLAG >> "$LOG_FILE" 2>&1 & echo $! > "$PID_FILE" sleep 1 echo "Started $DISPLAY_NAME node host: pid $(cat "$PID_FILE")"