Initial commit with translated description
This commit is contained in:
97
detect.sh
Normal file
97
detect.sh
Normal file
@@ -0,0 +1,97 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user