2807827ddc02be6ce5cadf3c722627c653196bb9

Author
TheEdgeOfRage <git@theedgeofrage.com>
Committer
TheEdgeOfRage <git@theedgeofrage.com>
Date

Message

Improve PKGBUILd review script

Diff

This diff is truncated to protect this page.

  1diff --git a/dot_local/bin/executable_pkgbuild-review b/dot_local/bin/executable_pkgbuild-review
  2index 8efcaeab499980173f90f9e46c75b8eb5c91bd9a..163f780fdddd8fa8130fd94aea8c14cd47a4a109 100755
  3--- a/dot_local/bin/executable_pkgbuild-review
  4+++ b/dot_local/bin/executable_pkgbuild-review
  5@@ -59,24 +59,39 @@ confidence_color() {
  6     esac
  7 }
  8 
  9+print_review() {
 10+    local pkgname="$1" pkgver="$2" content="$3" vc="$4" cc="$5"
 11+    printf '\n=== PKGBUILD Review: %s %s ===\n' "$pkgname" "$pkgver"
 12+    while IFS= read -r line; do
 13+        case "$line" in
 14+            VERDICT:*)    printf "${vc}%s${RESET}\n" "$line" ;;
 15+            CONFIDENCE:*) printf "${cc}%s${RESET}\n" "$line" ;;
 16+            *)            printf '%s\n' "$line" ;;
 17+        esac
 18+    done <<< "$content"
 19+    printf '=== END REVIEW ===\n\n'
 20+}
 21+
 22 review_one() {
 23     local pkgbuild="$1"
 24 
 25     # Non-PKGBUILD files (e.g. .SRCINFO): open real editor and return
 26-    if [[ "$(basename "$pkgbuild")" != "PKGBUILD" ]]; then
 27+    if [[ "${pkgbuild##*/}" != "PKGBUILD" ]]; then
 28         "$REAL_EDITOR" "$pkgbuild"
 29         return 0
 30     fi
 31 
 32     [[ -f "$pkgbuild" ]] || { err "file not found: $pkgbuild"; return 3; }
 33 
 34+    mkdir -p "$CACHE_DIR"
 35+
 36     local pkgname pkgver sha cache_file
 37     pkgname=$(grep -m1 '^pkgname=' "$pkgbuild" | cut -d= -f2 | tr -d '"'"'"' ')
 38     pkgver=$(grep -m1 '^pkgver=' "$pkgbuild" | cut -d= -f2 | tr -d '"'"'"' ')
 39     sha=$(sha256sum "$pkgbuild" | cut -d' ' -f1)
 40     cache_file="$CACHE_DIR/$pkgname.sha256"
 41 
 42-    if [[ -f "$cache_file" ]] && [[ "$(cat "$cache_file")" == "$sha" ]]; then
 43+    if [[ -f "$cache_file" ]] && [[ "$(<"$cache_file")" == "$sha" ]]; then
 44         printf '[%s %s] Already reviewed. Proceeding.\n' "$pkgname" "$pkgver"
 45         return 0
 46     fi
 47@@ -87,7 +102,7 @@ review_one() {
 48     payload=$(jq -n \
 49         --arg model "$MODEL" \
 50         --arg sys "$SYSTEM_PROMPT" \
 51-        --arg content "$(cat "$pkgbuild")" \
 52+        --arg content "$(<"$pkgbuild")" \
 53         '{model: $model, temperature: 0, stream: false,
 54           messages: [
 55             {role: "system", content: $sys},
 56@@ -99,57 +114,42 @@ review_one() {
 57         -d "$payload" \
 58         "$SERVER_URL/v1/chat/completions") || { err "llama-server unreachable or timed out"; return 2; }
 59 
 60-    content=$(printf '%s' "$response" | jq -r '.choices[0].message.content // empty')
 61+    content=$(jq -r '.choices[0].message.content // empty' <<< "$response")
 62     [[ -z "$content" ]] && { err "empty response from LLM"; return 2; }
 63 
 64     # Strip <think>...</think> block if present (Qwen3.5 thinking mode)
 65-    content=$(printf '%s' "$content" | sed '/^<think>$/,/^<\/think>$/d')
 66+    content=$(sed '/^<think>$/,/^<\/think>$/d' <<< "$content")
 67 
 68-    verdict=$(printf '%s' "$content" | grep '^VERDICT:' | awk '{print $2}' | head -1)
 69-    confidence=$(printf '%s' "$content" | grep '^CONFIDENCE:' | awk '{print $2}' | head -1)
 70+    verdict=$(awk '/^VERDICT:/{print $2; exit}' <<< "$content")
 71+    confidence=$(awk '/^CONFIDENCE:/{print $2; exit}' <<< "$content")
 72     [[ -z "$verdict" ]] && verdict="UNKNOWN"
 73 
 74     vc=$(verdict_color "$verdict")
 75     cc=$(confidence_color "$confidence")
 76 
 77-    printf '\n=== PKGBUILD Review: %s %s ===\n' "$pkgname" "$pkgver"
 78-    while IFS= read -r line; do
 79-        case "$line" in
 80-            VERDICT:*)    printf "${vc}%s${RESET}\n" "$line" ;;
 81-            CONFIDENCE:*) printf "${cc}%s${RESET}\n" "$line" ;;
 82-            *)            printf '%s\n' "$line" ;;
 83-        esac
 84-    done <<< "$content"
 85-    printf '=== END REVIEW ===\n\n'
 86+    case "$verdict" in
 87+        SAFE)
 88+            printf '[%s %s] %sSAFE%s\n' "$pkgname" "$pkgver" "$vc" "$RESET"
 89+            printf '%s' "$sha" > "$cache_file"
 90+            return 0
 91+            ;;
 92+        MALICIOUS)
 93+            print_review "$pkgname" "$pkgver" "$content" "$vc" "$cc"
 94+            return 1
 95+            ;;
 96+    esac
 97 
 98-    while true; do
 99-        case "$verdict" in
100-            SAFE) printf "[%s] ${vc}SAFE${RESET} — [C]ontinue / [e]dit / [a]bort: " "$pkgname" ;;
101-            *)    printf "[%s] ${vc}%s${RESET} — [c]ontinue / [e]dit / [A]bort: " "$pkgname" "$verdict" ;;
102-        esac
103+    # SUSPICIOUS (or UNKNOWN)
104+    print_review "$pkgname" "$pkgver" "$content" "$vc" "$cc"