HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //workspace/rollout/apply-mission-control-fix.sh
#!/usr/bin/env bash
set -euo pipefail

if [[ "${I_UNDERSTAND_THIS_RESTARTS_SERVICES:-}" != "YES" ]]; then
  cat >&2 <<'MSG'
Refusing to run without explicit confirmation.

Re-run with:
  I_UNDERSTAND_THIS_RESTARTS_SERVICES=YES ./apply-mission-control-fix.sh
MSG
  exit 1
fi

SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
REPO=/home/altaira.panomity.com/openclaw-mission-control
FRONTEND_DIR="$REPO/frontend"
VHOST=/usr/local/lsws/conf/vhosts/altaira.panomity.com/vhost.conf
SNIPPET="$SCRIPT_DIR/mission-control-litespeed-snippet.conf"
PATCH="$SCRIPT_DIR/mission-control-frontend.patch"
EXPECTED_NEXT="$SCRIPT_DIR/frontend-next.config.ts.expected"
EXPECTED_ROUTE="$SCRIPT_DIR/frontend-route.ts.expected"
STAMP=$(date -u +%Y%m%d-%H%M%S)
BACKUP="$VHOST.bak.$STAMP"

frontend_fix_present() {
  cmp -s "$FRONTEND_DIR/next.config.ts" "$EXPECTED_NEXT" \
    && cmp -s "$FRONTEND_DIR/src/app/api/[...path]/route.ts" "$EXPECTED_ROUTE"
}

cd "$REPO"

echo "[1/6] Applying frontend patch if needed"
if git apply --check "$PATCH" 2>/dev/null; then
  git apply --index --reject "$PATCH"
  echo "Frontend patch applied."
elif frontend_fix_present; then
  echo "Frontend fix already present in working tree; skipping apply."
else
  if git apply --reverse --check "$PATCH" 2>/dev/null; then
    echo "Frontend patch already present; skipping apply."
  else
    echo "Frontend patch does not apply cleanly and the expected frontend fix is not present." >&2
    exit 1
  fi
fi

echo "[2/6] Building frontend"
cd "$FRONTEND_DIR"
npm run build

cd "$REPO"
echo "[3/6] Backing up LiteSpeed vhost to $BACKUP"
cp "$VHOST" "$BACKUP"

echo "[4/6] Inserting LiteSpeed Mission Control carve-out snippet"
SNIPPET="$SNIPPET" python3 - <<'PY'
import os
from pathlib import Path
vhost = Path('/usr/local/lsws/conf/vhosts/altaira.panomity.com/vhost.conf')
snippet = Path(os.environ['SNIPPET']).read_text().rstrip() + '\n\n'
text = vhost.read_text()
marker = 'context /mc {\n'
if snippet.strip() in text:
    print('Snippet already present; leaving vhost unchanged.')
else:
    idx = text.find(marker)
    if idx == -1:
        raise SystemExit('Could not find context /mc block in vhost.conf')
    text = text[:idx] + snippet + text[idx:]
    vhost.write_text(text)
    print('Inserted snippet before context /mc block.')
PY

echo "[5/6] Restarting frontend service"
systemctl restart openclaw-mc-frontend.service

echo "[6/6] Reloading LiteSpeed"
/usr/local/lsws/bin/lswsctrl reload

echo
echo "Done. Verify with:"
echo "  curl -i -H 'Authorization: Bearer ztbHKAe1UYI66HCFvSAyo4wrAAD6frNCyAZ67aKVeSE' https://altaira.panomity.com/mc/healthz"
echo "  curl -i -H 'Authorization: Bearer ztbHKAe1UYI66HCFvSAyo4wrAAD6frNCyAZ67aKVeSE' https://altaira.panomity.com/mc/api/v1/agent/boards"
echo "  curl -i https://altaira.panomity.com/mc/openapi.json"