87 lines
2.8 KiB
Bash
Executable File
87 lines
2.8 KiB
Bash
Executable File
#!/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-model-schedule-guard] jq is required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
LABEL="ai.openclaw.copilot-model-schedule-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_SCHEDULE_CONFIG="$STAGE_DIR/model-schedule.config.json"
|
|
STAGE_PROFILES_CONFIG="$STAGE_DIR/model-profiles.config.json"
|
|
STAGE_POLICY_CONFIG="$STAGE_DIR/copilot-policy-guard.config.json"
|
|
MODEL_SCHEDULE_CONFIG="${MODEL_SCHEDULE_CONFIG:-$STAGE_SCHEDULE_CONFIG}"
|
|
INTERVAL_SECONDS="${INTERVAL_SECONDS:-300}"
|
|
|
|
mkdir -p "$STAGE_SCRIPTS_DIR"
|
|
cp "$ROOT_DIR/scripts/model_schedule_guard.sh" "$STAGE_SCRIPTS_DIR/model_schedule_guard.sh"
|
|
cp "$ROOT_DIR/scripts/model_profile_switch.sh" "$STAGE_SCRIPTS_DIR/model_profile_switch.sh"
|
|
cp "$ROOT_DIR/config/model-profiles.config.json" "$STAGE_PROFILES_CONFIG"
|
|
jq \
|
|
--arg state "$STAGE_DIR/model-schedule-state.json" \
|
|
'.stateFile=$state' \
|
|
"$ROOT_DIR/config/model-schedule.config.json" > "$STAGE_SCHEDULE_CONFIG"
|
|
chmod +x "$STAGE_SCRIPTS_DIR/model_schedule_guard.sh" "$STAGE_SCRIPTS_DIR/model_profile_switch.sh"
|
|
|
|
cat > "$PLIST_PATH" <<PLIST
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>Label</key>
|
|
<string>$LABEL</string>
|
|
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>/bin/bash</string>
|
|
<string>$STAGE_SCRIPTS_DIR/model_schedule_guard.sh</string>
|
|
</array>
|
|
|
|
<key>EnvironmentVariables</key>
|
|
<dict>
|
|
<key>PATH</key>
|
|
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
|
|
<key>MODEL_SCHEDULE_CONFIG</key>
|
|
<string>$MODEL_SCHEDULE_CONFIG</string>
|
|
<key>MODEL_PROFILES_CONFIG</key>
|
|
<string>$STAGE_PROFILES_CONFIG</string>
|
|
<key>POLICY_GUARD_CONFIG</key>
|
|
<string>$STAGE_POLICY_CONFIG</string>
|
|
</dict>
|
|
|
|
<key>RunAtLoad</key>
|
|
<true/>
|
|
|
|
<key>StartInterval</key>
|
|
<integer>$INTERVAL_SECONDS</integer>
|
|
|
|
<key>StandardOutPath</key>
|
|
<string>/tmp/openclaw-copilot-model-schedule-guard.log</string>
|
|
|
|
<key>StandardErrorPath</key>
|
|
<string>/tmp/openclaw-copilot-model-schedule-guard.err.log</string>
|
|
</dict>
|
|
</plist>
|
|
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 <<MSG
|
|
Installed LaunchAgent:
|
|
$PLIST_PATH
|
|
Staged runtime files:
|
|
$STAGE_DIR
|
|
|
|
Check status:
|
|
launchctl print gui/$(id -u)/$LABEL
|
|
tail -f /tmp/openclaw-copilot-model-schedule-guard.log /tmp/openclaw-copilot-model-schedule-guard.err.log
|
|
MSG
|