#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" if ! command -v jq >/dev/null 2>&1; then echo "[install-copilot-policy-guard] jq is required" >&2 exit 1 fi LABEL="ai.openclaw.copilot-policy-guard" PLIST_PATH="$HOME/Library/LaunchAgents/$LABEL.plist" STAGE_DIR="${MODEL_GUARD_STAGE_DIR:-$HOME/Library/Application Support/openclaw-copilot-guard}" STAGE_SCRIPTS_DIR="$STAGE_DIR/scripts" STAGE_CONFIG="$STAGE_DIR/copilot-policy-guard.config.json" POLICY_GUARD_CONFIG="${POLICY_GUARD_CONFIG:-$STAGE_CONFIG}" INTERVAL_SECONDS="${INTERVAL_SECONDS:-180}" mkdir -p "$STAGE_SCRIPTS_DIR" cp "$ROOT_DIR/scripts/copilot_policy_guard.sh" "$STAGE_SCRIPTS_DIR/copilot_policy_guard.sh" jq \ --arg state "$STAGE_DIR/copilot-policy-guard-state.json" \ '.stateFile=$state' \ "$ROOT_DIR/config/copilot-policy-guard.config.json" > "$STAGE_CONFIG" chmod +x "$STAGE_SCRIPTS_DIR/copilot_policy_guard.sh" cat > "$PLIST_PATH" < Label $LABEL ProgramArguments /bin/bash $STAGE_SCRIPTS_DIR/copilot_policy_guard.sh EnvironmentVariables PATH /opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin POLICY_GUARD_CONFIG $POLICY_GUARD_CONFIG RunAtLoad StartInterval $INTERVAL_SECONDS StandardOutPath /tmp/openclaw-copilot-policy-guard.log StandardErrorPath /tmp/openclaw-copilot-policy-guard.err.log PLIST launchctl bootout "gui/$(id -u)/$LABEL" 2>/dev/null || true launchctl bootstrap "gui/$(id -u)" "$PLIST_PATH" launchctl kickstart -k "gui/$(id -u)/$LABEL" cat <