Files
kb/scripts/inbox.sh
T

94 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# KB Inbox — list raw files with status: inbox
# Usage: ./scripts/inbox.sh [--count] [--recent N] [--month YYYY-MM]
set -euo pipefail
KB_DIR="$(cd "$(dirname "$0")/.." && pwd)"
COUNT_ONLY=false
RECENT=0
MONTH=""
# Check dependencies
if ! command -v rg &>/dev/null; then
echo "❌ ripgrep (rg) is required. Install: apt install ripgrep / brew install ripgrep" >&2
exit 1
fi
while [ $# -gt 0 ]; do
case $1 in
--count)
COUNT_ONLY=true ;;
--recent)
if [[ ! "${2-}" =~ ^[0-9]+$ ]]; then
echo "Error: --recent requires a number" >&2
exit 1
fi
RECENT="$2"; shift ;;
--month)
MONTH="$2"; shift ;;
*)
echo "Unknown option: $1" >&2
echo "Usage: ./scripts/inbox.sh [--count] [--recent N] [--month YYYY-MM]" >&2
exit 1 ;;
esac
shift
done
cd "$KB_DIR"
# Use frontmatter-only match: status: inbox in the YAML header
match_inbox() {
rg -l --glob '*.md' '^status:\s*inbox\s*$' "$@"
}
if $COUNT_ONLY; then
if [ -n "$MONTH" ]; then
count=$(match_inbox "raw/${MONTH}/" 2>/dev/null | wc -l)
echo "📥 Inbox ($MONTH): $count items pending"
else
count=$(match_inbox raw/ 2>/dev/null | wc -l)
echo "📥 Inbox total: $count items pending"
fi
exit 0
fi
echo "📥 KB Inbox — pending review"
echo "============================"
echo ""
# Collect items safely
search_path="raw/"
[ -n "$MONTH" ] && search_path="raw/${MONTH}/"
mapfile -t items < <(match_inbox "$search_path" 2>/dev/null | sort -r)
if [ "$RECENT" -gt 0 ] && [ "${#items[@]}" -gt "$RECENT" ]; then
items=("${items[@]:0:$RECENT}")
fi
if [ "${#items[@]}" -eq 0 ]; then
echo "✅ No inbox items — all caught up!"
exit 0
fi
for f in "${items[@]}"; do
# Extract frontmatter fields
title=$(awk '/^---/{f++;next} f==1 && /^title:/{gsub(/^title: *"?/,""); gsub(/"$/,""); print; exit}' "$f" 2>/dev/null)
url=$(awk '/^---/{f++;next} f==1 && /^source_url:/{gsub(/^source_url: *"?/,""); gsub(/"$/,""); print; exit}' "$f" 2>/dev/null)
ingested=$(awk '/^---/{f++;next} f==1 && /^ingested:/{gsub(/^ingested: */,""); print; exit}' "$f" 2>/dev/null)
if [ -z "$title" ]; then
title=$(basename "$f" .md | sed 's/^[0-9-]*//' | tr '-' ' ' | sed 's/^ *//')
fi
echo "[${ingested:-?}] 📄 ${title:0:80}"
if [ -n "$url" ]; then
echo " 🔗 ${url:0:100}"
fi
echo " 📁 $f"
echo ""
done
echo "---"
echo "Total: ${#items[@]} inbox items"