Files
openclaw-backups/archive/inactive-skills/memory-curator/scripts/generate-digest.sh

129 lines
3.4 KiB
Bash

#!/bin/bash
# generate-digest.sh — Generate a skeleton digest from a daily log
#
# Usage: generate-digest.sh [YYYY-MM-DD]
# If no date given, uses today (UTC)
set -e
MEMORY_DIR="$HOME/clawd/memory"
DATE="${1:-$(date -u +%Y-%m-%d)}"
LOG_FILE="$MEMORY_DIR/$DATE.md"
DIGEST_FILE="$MEMORY_DIR/digests/$DATE-digest.md"
# Check if log exists
if [ ! -f "$LOG_FILE" ]; then
echo "Error: No log found at $LOG_FILE"
exit 1
fi
# Extract stats
TOTAL_LINES=$(wc -l < "$LOG_FILE")
SECTION_COUNT=$(grep -c "^## " "$LOG_FILE" || echo 0)
H3_COUNT=$(grep -c "^### " "$LOG_FILE" || echo 0)
# Extract timestamps (look for patterns like "~HH:MM UTC" or "HH:MM UTC")
TIMESTAMPS=$(grep -oE '[0-9]{1,2}:[0-9]{2} UTC' "$LOG_FILE" | sort -u)
FIRST_TIME=$(echo "$TIMESTAMPS" | head -1)
LAST_TIME=$(echo "$TIMESTAMPS" | tail -1)
# Extract section titles
SECTIONS=$(grep "^## " "$LOG_FILE" | sed 's/^## //')
# Extract people mentioned (bold names pattern)
# Filter out common false positives
PEOPLE=$(grep -oE '\*\*[A-Z][a-z]+\*\*' "$LOG_FILE" | sort -u | sed 's/\*\*//g' | \
grep -v -E '^(Note|Key|What|My|The|API|Stats|Feed|Post|URL|Title|Name|Usage|Error|Implication|Date|Summary|Status|Location|Topic|Who|Project)$' || echo "")
# Extract moltbook usernames (both capitalized and lowercase bold names that look like usernames)
# Combine: **lowercase** names + **Capitalized** names that appear after specific patterns
MOLTYS=$(grep -oE '\*\*[A-Za-z][A-Za-z0-9_-]+\*\*' "$LOG_FILE" | sort | uniq -c | sort -rn | \
awk '$1 >= 1 {print $2}' | sed 's/\*\*//g' | \
grep -v -E '^(Note|Key|What|My|The|API|Stats|Feed|Post|URL|Title|Name|Usage|Error|Implication|Date|Summary|Status|Location|Topic|Who|Project|Moltbook|Session|Check|Update|Research|Exploration|Cron|Heartbeat|Morning|Evening|Noon|Memory|Curator|Autonomy|Granted|Reflection|California)$' | \
head -30 || echo "")
# Extract final karma value (look for "Karma: X" or "karma: X" patterns, get the last/highest)
KARMA_FINAL=$(grep -oE '[Kk]arma:? ?[0-9]+' "$LOG_FILE" | grep -oE '[0-9]+' | sort -n | tail -1 || echo "unknown")
# Generate digest skeleton
mkdir -p "$MEMORY_DIR/digests"
cat > "$DIGEST_FILE" << EOF
# Digest: $DATE
*Generated: $(date -u "+%Y-%m-%d %H:%M UTC")*
*Source: $LOG_FILE ($TOTAL_LINES lines)*
## Summary
<!-- Write 2-3 sentence summary of the day -->
## Stats
- **Lines:** $TOTAL_LINES
- **Sections:** $SECTION_COUNT major, $H3_COUNT minor
- **Time span:** ${FIRST_TIME:-unknown} → ${LAST_TIME:-unknown}
- **Karma:** ${KARMA_FINAL:-unknown}
## Key Events
<!-- List the most important things that happened -->
$(echo "$SECTIONS" | while read -r section; do
[ -n "$section" ] && echo "- $section"
done)
## Learnings
<!-- What did I learn today? -->
-
## Connections
<!-- People I interacted with -->
### Moltbook
$(if [ -n "$MOLTYS" ]; then
echo "$MOLTYS" | while read -r name; do
[ -n "$name" ] && echo "- **$name** — "
done
else
echo "- (none detected)"
fi)
### Other
$(if [ -n "$PEOPLE" ]; then
echo "$PEOPLE" | while read -r name; do
[ -n "$name" ] && echo "- **$name** — "
done
else
echo "- (none detected)"
fi)
## Open Questions
<!-- What am I still thinking about? -->
-
## Tomorrow
<!-- What should future-me prioritize? -->
-
---
*Raw sections found:*
\`\`\`
$SECTIONS
\`\`\`
EOF
echo "✅ Generated digest skeleton: $DIGEST_FILE"
echo " Source: $LOG_FILE ($TOTAL_LINES lines)"
echo " Sections found: $SECTION_COUNT"
echo ""
echo "Next: Review and fill in the <!-- comments --> sections"