Download bob-shell/bob-policy.sh from Snapkitty/sov-kernel-monster: direct link, hf CLI and curl.
- Browser
- Download file 5.28 kB
-
https://huggingface.co/Snapkitty/sov-kernel-monster/resolve/main/bob-shell/bob-policy.sh
- Command line
-
hf download hf://Snapkitty/sov-kernel-monster/bob-shell/bob-policy.sh
-
curl -L -o bob-policy.sh https://huggingface.co/Snapkitty/sov-kernel-monster/resolve/main/bob-shell/bob-policy.sh
5.28 kB
| # BOB-POLICY: Query Prolog/Datalog policy rules | |
| # Purpose: Query and explain policy decisions | |
| # Inputs: rule query, explain flag | |
| # Outputs: Policy decision with optional reasoning trace | |
| # Dependencies: SWI-Prolog or compatible Prolog interpreter | |
| # Verification: Provides explainable policy decisions | |
| set -euo pipefail | |
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" | |
| POLICY_DIR="${REPO_ROOT}/governance/prolog" | |
| EXPLAIN=false | |
| QUERY="" | |
| RED='\033[0;31m' | |
| GREEN='\033[0;32m' | |
| YELLOW='\033[1;33m' | |
| NC='\033[0m' | |
| usage() { | |
| cat << EOF | |
| Usage: bob-policy query <rule> [options] | |
| Query Prolog/Datalog policy rules according to BOB Trust Deed v1.0 | |
| Arguments: | |
| query <rule> Prolog query to execute (required) | |
| Options: | |
| --explain Provide reasoning trace | |
| --help Show this help message | |
| Examples: | |
| bob-policy query "agent_class(oracle, X)" | |
| bob-policy query "route_task(compile, Agent, Priority)" --explain | |
| bob-policy query "verify_deed(deploy_production, Verdict)" | |
| EOF | |
| exit 1 | |
| } | |
| # Parse arguments | |
| if [[ $# -eq 0 ]]; then | |
| usage | |
| fi | |
| if [[ "$1" != "query" ]]; then | |
| echo -e "${RED}Error: First argument must be 'query'${NC}" | |
| usage | |
| fi | |
| shift | |
| while [[ $# -gt 0 ]]; do | |
| case $1 in | |
| --explain) | |
| EXPLAIN=true | |
| shift | |
| ;; | |
| --help) | |
| usage | |
| ;; | |
| -*) | |
| echo -e "${RED}Error: Unknown option $1${NC}" | |
| usage | |
| ;; | |
| *) | |
| QUERY="$1" | |
| shift | |
| ;; | |
| esac | |
| done | |
| if [[ -z "$QUERY" ]]; then | |
| echo -e "${RED}Error: Query required${NC}" | |
| usage | |
| fi | |
| echo -e "${GREEN}BOB-POLICY: Querying policy rules${NC}" | |
| echo "Query: $QUERY" | |
| echo "Explain: $EXPLAIN" | |
| # Check for Prolog interpreter | |
| if ! command -v swipl &> /dev/null; then | |
| echo -e "${RED}Error: SWI-Prolog not found. Install with: apt-get install swi-prolog${NC}" | |
| exit 1 | |
| fi | |
| # Check for policy files | |
| if [[ ! -d "$POLICY_DIR" ]]; then | |
| echo -e "${YELLOW}Warning: Policy directory not found at $POLICY_DIR${NC}" | |
| echo "Creating default policy structure..." | |
| mkdir -p "$POLICY_DIR" | |
| # Create default policy file | |
| cat > "${POLICY_DIR}/sovereign_kernel.pl" << 'EOF' | |
| :- module(sovereign_kernel, [ | |
| agent_class/2, | |
| route_task/3, | |
| verify_deed/2, | |
| language_approved/1, | |
| build_phase_valid/2 | |
| ]). | |
| % Agent classification | |
| agent_class(oracle, quantum). | |
| agent_class(archivist, worm). | |
| agent_class(sentinel, gate). | |
| agent_class(bob, orchestrator). | |
| % Task routing | |
| route_task(Task, Agent, Priority) :- | |
| task_pattern(Task, Pattern), | |
| agent_class(Agent, Pattern), | |
| priority_score(Task, Priority). | |
| task_pattern(compile, orchestrator). | |
| task_pattern(verify, orchestrator). | |
| task_pattern(deploy, orchestrator). | |
| task_pattern(audit, archivist). | |
| task_pattern(measure, quantum). | |
| priority_score(compile, 8). | |
| priority_score(verify, 9). | |
| priority_score(deploy, 10). | |
| priority_score(audit, 7). | |
| priority_score(measure, 6). | |
| % Trust Deed verification | |
| verify_deed(Action, Verdict) :- | |
| deed_article(Action, Article), | |
| article_permits(Article, Action), | |
| Verdict = allowed. | |
| verify_deed(Action, Verdict) :- | |
| \+ deed_article(Action, _), | |
| Verdict = denied. | |
| deed_article(compile, 'BUILD_PROTOCOL'). | |
| deed_article(verify, 'BUILD_PROTOCOL'). | |
| deed_article(deploy, 'BUILD_PROTOCOL'). | |
| deed_article(use_python_runtime, 'NO_PYTHON_RUNTIME'). | |
| article_permits('BUILD_PROTOCOL', compile). | |
| article_permits('BUILD_PROTOCOL', verify). | |
| article_permits('BUILD_PROTOCOL', deploy). | |
| % Approved languages | |
| language_approved(rexx). | |
| language_approved(rpg). | |
| language_approved(wazi). | |
| language_approved(ada). | |
| language_approved(spark). | |
| language_approved(rust). | |
| language_approved(prolog). | |
| language_approved(datalog). | |
| language_approved(bash). | |
| % Build phase validation | |
| build_phase_valid(1, analysis). | |
| build_phase_valid(2, architecture). | |
| build_phase_valid(3, implementation). | |
| build_phase_valid(4, verification). | |
| build_phase_valid(5, delivery). | |
| EOF | |
| echo -e "${GREEN}✓ Default policy created${NC}" | |
| fi | |
| # Create temporary query file | |
| TEMP_QUERY=$(mktemp) | |
| cat > "$TEMP_QUERY" << EOF | |
| :- consult('${POLICY_DIR}/sovereign_kernel.pl'). | |
| :- initialization(main, main). | |
| main :- | |
| $(if [[ "$EXPLAIN" == true ]]; then echo "trace,"; fi) | |
| ( ${QUERY} | |
| -> writeln('SUCCESS: Query succeeded'), | |
| ( ${QUERY} | |
| -> write('Result: '), writeln(${QUERY}) | |
| ; true | |
| ), | |
| halt(0) | |
| ; writeln('FAILURE: Query failed'), | |
| halt(1) | |
| ). | |
| EOF | |
| # Execute query | |
| echo -e "${YELLOW}Executing Prolog query...${NC}" | |
| if swipl -q -t halt -s "$TEMP_QUERY" 2>&1; then | |
| RESULT=$? | |
| rm -f "$TEMP_QUERY" | |
| if [[ $RESULT -eq 0 ]]; then | |
| echo -e "${GREEN}✓ Policy query succeeded${NC}" | |
| exit 0 | |
| else | |
| echo -e "${RED}✗ Policy query failed${NC}" | |
| exit 1 | |
| fi | |
| else | |
| RESULT=$? | |
| rm -f "$TEMP_QUERY" | |
| echo -e "${RED}✗ Prolog execution error${NC}" | |
| exit $RESULT | |
| fi | |
| # Made with Bob | |