Files
marmikcfc_memory-manager/detect.sh

98 lines
3.2 KiB
Bash
Raw Normal View History

#!/bin/bash
# Compression Detection - monitors all memory types
WORKSPACE="${OPENCLAW_WORKSPACE:-$HOME/.openclaw/workspace}"
MEMORY_DIR="$WORKSPACE/memory"
STATE_FILE="$MEMORY_DIR/.memory-manager-state.json"
# Initialize if needed
if [ ! -f "$STATE_FILE" ]; then
~/.openclaw/skills/memory-manager/init.sh > /dev/null 2>&1
fi
# Calculate total memory usage across all types
calculate_usage() {
local total_chars=0
# Episodic memory (last 7 days)
for file in "$MEMORY_DIR"/episodic/*.md; do
[ -f "$file" ] && total_chars=$((total_chars + $(wc -c < "$file" 2>/dev/null || echo 0)))
done
# Semantic memory (all files)
for file in "$MEMORY_DIR"/semantic/*.md; do
[ -f "$file" ] && total_chars=$((total_chars + $(wc -c < "$file" 2>/dev/null || echo 0)))
done
# Procedural memory (all files)
for file in "$MEMORY_DIR"/procedural/*.md; do
[ -f "$file" ] && total_chars=$((total_chars + $(wc -c < "$file" 2>/dev/null || echo 0)))
done
# Legacy flat files (if any)
for file in "$MEMORY_DIR"/*.md "$MEMORY_DIR"/legacy/*.md; do
[ -f "$file" ] && total_chars=$((total_chars + $(wc -c < "$file" 2>/dev/null || echo 0)))
done
# Estimate: 200k tokens ≈ 800k chars (conservative)
local usage_percent=$((total_chars * 100 / 800000))
echo "$usage_percent"
}
# Get breakdown by type
get_breakdown() {
local episodic=$(find "$MEMORY_DIR/episodic" -name "*.md" -exec wc -c {} + 2>/dev/null | tail -1 | awk '{print $1}' || echo 0)
local semantic=$(find "$MEMORY_DIR/semantic" -name "*.md" -exec wc -c {} + 2>/dev/null | tail -1 | awk '{print $1}' || echo 0)
local procedural=$(find "$MEMORY_DIR/procedural" -name "*.md" -exec wc -c {} + 2>/dev/null | tail -1 | awk '{print $1}' || echo 0)
local total=$((episodic + semantic + procedural))
[ "$total" -eq 0 ] && total=1 # Avoid division by zero
local episodic_pct=$((episodic * 100 / total))
local semantic_pct=$((semantic * 100 / total))
local procedural_pct=$((procedural * 100 / total))
echo "Episodic: ${episodic_pct}% | Semantic: ${semantic_pct}% | Procedural: ${procedural_pct}%"
}
# Check usage
usage=$(calculate_usage)
breakdown=$(get_breakdown)
# Update state
timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
if command -v jq >/dev/null 2>&1; then
jq --arg ts "$timestamp" '.last_check = $ts' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
fi
# Output status
echo "🧠 Memory Manager - Compression Check"
echo ""
echo "Total usage: ${usage}%"
echo "Breakdown: $breakdown"
echo ""
if [ "$usage" -ge 85 ]; then
echo "🚨 CRITICAL: ${usage}% context usage"
echo ""
echo "Action needed NOW:"
echo " 1. Run: ~/.openclaw/skills/memory-manager/snapshot.sh"
echo " 2. Run: ~/.openclaw/skills/memory-manager/organize.sh"
echo " 3. Consider pruning episodic entries >30 days old"
exit 2
elif [ "$usage" -ge 70 ]; then
echo "⚠️ WARNING: ${usage}% context usage"
echo ""
echo "Recommended actions:"
echo " 1. Run: ~/.openclaw/skills/memory-manager/organize.sh"
echo " 2. Review semantic/procedural for duplicates"
echo " 3. Create snapshot if doing complex work"
exit 1
else
echo "✅ Safe: ${usage}% context usage"
echo ""
echo "Memory health: Good"
exit 0
fi