37 lines
1.1 KiB
Bash
37 lines
1.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -uo pipefail
|
|
|
|
# CASAN harness preflight (Plan-15/13 enforcement wiring).
|
|
# Runs governance cores BEFORE a model call. Currently enforces RAI data
|
|
# governance: a prompt classified PII/confidential must not go to a CLOUD model
|
|
# without approval. Opt-in via CASAN_PREFLIGHT=1 so existing flows are unchanged.
|
|
#
|
|
# Args mirror model-router: <prompt-file> <out-json> [--role R] [--model M]
|
|
# Env: CASAN_MODEL_APPROVAL (approval token for sending sensitive data to cloud)
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROMPT="${1:-}"
|
|
|
|
MODEL=""
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--model) MODEL="${2:-}"; shift 2 ;;
|
|
*) shift ;;
|
|
esac
|
|
done
|
|
|
|
case "$MODEL" in
|
|
openai:*|anthropic:*)
|
|
if [[ -n "$PROMPT" && -f "$PROMPT" ]]; then
|
|
if ! python3 "$SCRIPT_DIR/rai-guard.py" check-cloud --input "$PROMPT" --target cloud \
|
|
--approval "${CASAN_MODEL_APPROVAL:-}" >/dev/null 2>&1; then
|
|
echo "PREFLIGHT_BLOCK rai-check-cloud model=$MODEL" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
echo "PREFLIGHT_OK model=${MODEL:-local}"
|
|
exit 0
|