garden/scripts/garden-session.sh

90 lines
2.1 KiB
Bash
Executable file

#!/bin/bash
# garden-session.sh: Automate daily note → session log draft
# Usage: ./garden-session.sh [YYYY-MM-DD]
# Outputs to content/sessions/YYYY-MM-DD-session.md
set -euo pipefail
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
DATE=${1:-$(date +%Y-%m-%d)}
DAILY_FILE_PATH="$HOME/.napkin/daily/${DATE}.md"
DRAFT_PATH="content/sessions/${DATE}-session.md"
echo "Generating session draft for ${DATE}..."
# Check if daily note exists
if [ ! -f "$DAILY_FILE_PATH" ]; then
echo "No daily note for ${DATE} at ${DAILY_FILE_PATH}"
exit 1
fi
# Use the python parser to get structured data
JSON_DATA=$("$SCRIPT_DIR/parse_daily.py" "$DAILY_FILE_PATH")
if [[ -z "$JSON_DATA" || "$JSON_DATA" == "{}" ]]; then
echo "Failed to parse data from daily note."
exit 1
fi
# Extract data using jq for safety
SUMMARY=$(echo "$JSON_DATA" | jq -r '.summary // ""')
KEYWORDS=$(echo "$JSON_DATA" | jq -r '.keywords | join(", ") // ""')
WORK=$(echo "$JSON_DATA" | jq -r '.work // ""')
# Determine fragment types from keywords (simple mapping)
FRAGMENTS=()
RAW_KEYWORDS=$(echo "$JSON_DATA" | jq -r '.keywords[]? // ""')
for keyword in $RAW_KEYWORDS; do
case "$keyword" in
operational|fix|debug)
FRAGMENTS+=("fix")
;;
build|protocol|create|implement)
FRAGMENTS+=("build")
;;
analysis|forensics)
FRAGMENTS+=("analysis")
;;
reflection|philosophy)
FRAGMENTS+=("reflection")
;;
esac
done
# Deduplicate fragments
FRAGMENTS=($(echo "${FRAGMENTS[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))
# Generate draft MD
cat > "${DRAFT_PATH}" << EOF
---
title: "Vigilio Session Log: ${DATE}"
date: ${DATE}T00:00:00Z
tags: [session, ${KEYWORDS}]
draft: true
---
# Session ${DATE}
## Summary
{{% fragment type="summary" %}}
${SUMMARY}
{{% /fragment %}}
## Work Highlights
{{% fragment type="work" %}}
${WORK}
{{% /fragment %}}
## Fragments
EOF
# Add dynamic fragments
for type in "${FRAGMENTS[@]}"; do
echo "
{{% fragment type=\"${type}\" %}}
[Details for ${type}]
{{% /fragment %}}" >> "${DRAFT_PATH}"
done
echo "Draft generated: ${DRAFT_PATH}"
echo "Review, edit voice, set draft: false, hugo, commit."