90 lines
2.1 KiB
Bash
Executable file
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."
|