Initial commit with translated description
This commit is contained in:
104
snapshot.sh
Normal file
104
snapshot.sh
Normal file
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
# Snapshot - Save memory state before compression
|
||||
|
||||
WORKSPACE="${OPENCLAW_WORKSPACE:-$HOME/.openclaw/workspace}"
|
||||
MEMORY_DIR="$WORKSPACE/memory"
|
||||
SNAPSHOT_DIR="$MEMORY_DIR/snapshots"
|
||||
STATE_FILE="$MEMORY_DIR/.memory-manager-state.json"
|
||||
|
||||
# Create snapshot directory
|
||||
mkdir -p "$SNAPSHOT_DIR"
|
||||
|
||||
# Generate snapshot filename
|
||||
SNAPSHOT_FILE="$SNAPSHOT_DIR/$(date +%Y-%m-%d-%H%M).md"
|
||||
|
||||
echo "💾 Creating memory snapshot..."
|
||||
echo ""
|
||||
|
||||
# Create snapshot header
|
||||
cat > "$SNAPSHOT_FILE" << EOF
|
||||
# Memory Snapshot - $(date +"%Y-%m-%d %H:%M:%S")
|
||||
|
||||
**Auto-saved before compression event**
|
||||
|
||||
---
|
||||
|
||||
EOF
|
||||
|
||||
# Capture episodic (recent events)
|
||||
echo "## Recent Events (Episodic)" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
|
||||
recent_episodic=$(find "$MEMORY_DIR/episodic" -name "*.md" -mtime -3 | sort -r | head -3)
|
||||
if [ -n "$recent_episodic" ]; then
|
||||
for file in $recent_episodic; do
|
||||
echo "### $(basename "$file" .md)" >> "$SNAPSHOT_FILE"
|
||||
tail -n 30 "$file" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
done
|
||||
else
|
||||
echo "*No recent episodic entries*" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
fi
|
||||
|
||||
# Capture semantic (key knowledge)
|
||||
echo "## Key Knowledge (Semantic)" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
|
||||
semantic_files=$(find "$MEMORY_DIR/semantic" -name "*.md" | head -5)
|
||||
if [ -n "$semantic_files" ]; then
|
||||
for file in $semantic_files; do
|
||||
echo "### $(basename "$file" .md)" >> "$SNAPSHOT_FILE"
|
||||
head -n 20 "$file" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
done
|
||||
else
|
||||
echo "*No semantic entries*" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
fi
|
||||
|
||||
# Capture procedural (important workflows)
|
||||
echo "## Key Workflows (Procedural)" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
|
||||
procedural_files=$(find "$MEMORY_DIR/procedural" -name "*.md" | head -3)
|
||||
if [ -n "$procedural_files" ]; then
|
||||
for file in $procedural_files; do
|
||||
echo "### $(basename "$file" .md)" >> "$SNAPSHOT_FILE"
|
||||
head -n 20 "$file" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
done
|
||||
else
|
||||
echo "*No procedural entries*" >> "$SNAPSHOT_FILE"
|
||||
echo "" >> "$SNAPSHOT_FILE"
|
||||
fi
|
||||
|
||||
# Add metadata
|
||||
cat >> "$SNAPSHOT_FILE" << EOF
|
||||
|
||||
---
|
||||
|
||||
**Snapshot metadata:**
|
||||
- Created: $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
- Trigger: Compression detection
|
||||
- Coverage: Last 3 days episodic + top 5 semantic + top 3 procedural
|
||||
- Purpose: Recovery checkpoint before potential memory loss
|
||||
EOF
|
||||
|
||||
# Update state
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
jq --arg ts "$timestamp" '.last_snapshot = $ts | .warnings += 1' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
|
||||
fi
|
||||
|
||||
echo "✅ Snapshot saved: $SNAPSHOT_FILE"
|
||||
echo ""
|
||||
echo "Snapshot includes:"
|
||||
echo " - Last 3 days episodic entries"
|
||||
echo " - Top 5 semantic knowledge files"
|
||||
echo " - Top 3 procedural workflows"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " 1. Review snapshot for completeness"
|
||||
echo " 2. Run: organize.sh (reduce memory usage)"
|
||||
echo " 3. Consider pruning old episodic entries"
|
||||
Reference in New Issue
Block a user