75 lines
2.3 KiB
Bash
75 lines
2.3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Organize - Migrate flat files to semantic/procedural/episodic structure
|
||
|
|
|
||
|
|
WORKSPACE="${OPENCLAW_WORKSPACE:-$HOME/.openclaw/workspace}"
|
||
|
|
MEMORY_DIR="$WORKSPACE/memory"
|
||
|
|
STATE_FILE="$MEMORY_DIR/.memory-manager-state.json"
|
||
|
|
|
||
|
|
echo "🗂️ Memory Organizer"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Initialize if needed
|
||
|
|
if [ ! -f "$STATE_FILE" ]; then
|
||
|
|
~/.openclaw/skills/memory-manager/init.sh
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Find flat files (not in subdirectories)
|
||
|
|
FLAT_FILES=$(find "$MEMORY_DIR" -maxdepth 1 -name "*.md" -type f 2>/dev/null)
|
||
|
|
|
||
|
|
if [ -z "$FLAT_FILES" ]; then
|
||
|
|
echo "✅ No flat files to organize."
|
||
|
|
echo ""
|
||
|
|
echo "Memory structure already clean:"
|
||
|
|
echo " - Episodic: $(ls "$MEMORY_DIR/episodic"/*.md 2>/dev/null | wc -l | tr -d ' ') entries"
|
||
|
|
echo " - Semantic: $(ls "$MEMORY_DIR/semantic"/*.md 2>/dev/null | wc -l | tr -d ' ') topics"
|
||
|
|
echo " - Procedural: $(ls "$MEMORY_DIR/procedural"/*.md 2>/dev/null | wc -l | tr -d ' ') workflows"
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "Found $(echo "$FLAT_FILES" | wc -l | tr -d ' ') flat files to organize."
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Backup first
|
||
|
|
mkdir -p "$MEMORY_DIR/legacy"
|
||
|
|
echo "Creating backup in memory/legacy/..."
|
||
|
|
|
||
|
|
for file in $FLAT_FILES; do
|
||
|
|
filename=$(basename "$file")
|
||
|
|
|
||
|
|
# Skip special files
|
||
|
|
if [[ "$filename" == "MEMORY.md" ]] || [[ "$filename" == "README.md" ]]; then
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check if it's a date-based file (episodic)
|
||
|
|
if [[ "$filename" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}\.md$ ]]; then
|
||
|
|
# Move to episodic
|
||
|
|
mv "$file" "$MEMORY_DIR/episodic/"
|
||
|
|
echo " → Episodic: $filename"
|
||
|
|
else
|
||
|
|
# Copy to legacy for manual review
|
||
|
|
cp "$file" "$MEMORY_DIR/legacy/"
|
||
|
|
echo " → Legacy (review): $filename"
|
||
|
|
echo " Manual categorization needed. Use:"
|
||
|
|
echo " categorize.sh semantic|procedural|episodic \"$filename\""
|
||
|
|
echo ""
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# 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_organize = $ts' "$STATE_FILE" > "$STATE_FILE.tmp" && mv "$STATE_FILE.tmp" "$STATE_FILE"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "✅ Organization complete!"
|
||
|
|
echo ""
|
||
|
|
echo "Next steps:"
|
||
|
|
echo " 1. Review files in memory/legacy/"
|
||
|
|
echo " 2. Use categorize.sh to move them properly"
|
||
|
|
echo " 3. Run detect.sh to check new usage"
|
||
|
|
echo ""
|
||
|
|
echo "Example categorization:"
|
||
|
|
echo " ~/.openclaw/skills/memory-manager/categorize.sh semantic moltbook memory/legacy/moltbook-notes.md"
|