ollie/tools/memory_recall

59 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# ollie:parallel read
# ollie:tier cold
# description: Search memories by keyword, tag, or title
# Args: <query>
[ -z "$*" ] && echo "usage: memory_recall <query>" && exit 1
mount="${OLLIE:-$HOME/mnt/ollie}"
mem_dir="$mount/m"
if [ ! -d "$mem_dir" ]; then
echo "error: memory directory does not exist: $mem_dir"
exit 1
fi
query="$*"
# Search filenames (title/tag match) and file bodies
matches=$(grep -ril "$query" "$mem_dir" 2>&1)
grep_exit=$?
if [ $grep_exit -gt 1 ]; then
echo "error: $matches"
exit 1
fi
if [ -z "$matches" ]; then
echo "no matches for: $query"
exit 0
fi
max_files=10
max_lines_per_file=50
stale_days=14
count=0
while IFS= read -r file; do
count=$((count + 1))
if [ $count -gt $max_files ]; then
echo "(showing $max_files of $(echo "$matches" | wc -l) matched files)"
break
fi
mtime=$(stat -c %Y "$file" 2>/dev/null)
now=$(date +%s)
age_days=$(( (now - mtime) / 86400 ))
if [ $age_days -ge $stale_days ]; then
status="STALE (${age_days}d — verify)"
else
status="fresh"
fi
echo "=== $(basename "$file") [$status] ==="
head -n $max_lines_per_file "$file" || echo "error: could not read $file"
lines=$(wc -l < "$file" 2>/dev/null)
if [ "$lines" -gt $max_lines_per_file ] 2>/dev/null; then
echo "... ($lines lines total, showing first $max_lines_per_file)"
fi
echo
done <<< "$matches"