ai-conversation-impact/.claude/hooks/annotate-impact.sh

83 lines
2.5 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
#
# annotate-impact.sh — Annotate the most recent impact log entry with
# positive impact data.
#
# Usage: ./annotate-impact.sh
# Interactive: prompts for value assessment of the last logged session.
#
# This adds value-side data to complement the cost data captured
# automatically by the PreCompact hook.
set -euo pipefail
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
LOG_FILE="$PROJECT_DIR/.claude/impact/impact-log.jsonl"
if [ ! -f "$LOG_FILE" ]; then
echo "No impact log found. Run a conversation with compaction first."
exit 1
fi
# Show the last entry
LAST=$(tail -1 "$LOG_FILE")
echo "Last log entry:"
echo "$LAST" | jq .
echo ""
SESSION_ID=$(echo "$LAST" | jq -r '.session_id')
TIMESTAMP=$(echo "$LAST" | jq -r '.timestamp')
echo "Annotating session $SESSION_ID (snapshot $TIMESTAMP)"
echo ""
# Gather value data
read -rp "Brief summary of value produced: " VALUE_SUMMARY
read -rp "Estimated reach (number of people affected) [1]: " REACH
REACH=${REACH:-1}
echo "Counterfactual (would the user have achieved this without the conversation?):"
echo " 1. Yes, same speed (no value added)"
echo " 2. Yes, but slower"
echo " 3. Yes, but lower quality"
echo " 4. No (could not have done it alone)"
read -rp "Choice [2]: " CF_CHOICE
CF_CHOICE=${CF_CHOICE:-2}
case "$CF_CHOICE" in
1) COUNTERFACTUAL="same_speed" ;;
2) COUNTERFACTUAL="slower" ;;
3) COUNTERFACTUAL="lower_quality" ;;
4) COUNTERFACTUAL="impossible" ;;
*) COUNTERFACTUAL="unknown" ;;
esac
echo "Net assessment:"
echo " 1. Clearly net-positive"
echo " 2. Probably net-positive"
echo " 3. Uncertain"
echo " 4. Probably net-negative"
echo " 5. Clearly net-negative"
read -rp "Choice [3]: " NET_CHOICE
NET_CHOICE=${NET_CHOICE:-3}
case "$NET_CHOICE" in
1) NET_ASSESSMENT="clearly_positive" ;;
2) NET_ASSESSMENT="probably_positive" ;;
3) NET_ASSESSMENT="uncertain" ;;
4) NET_ASSESSMENT="probably_negative" ;;
5) NET_ASSESSMENT="clearly_negative" ;;
*) NET_ASSESSMENT="unknown" ;;
esac
# Write annotation as a separate log entry linked by session_id
ANNOTATION_FILE="$PROJECT_DIR/.claude/impact/annotations.jsonl"
ANNOT_TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
cat >> "$ANNOTATION_FILE" <<EOF
{"timestamp":"$ANNOT_TIMESTAMP","snapshot_timestamp":"$TIMESTAMP","session_id":"$SESSION_ID","value_summary":"$VALUE_SUMMARY","estimated_reach":$REACH,"counterfactual":"$COUNTERFACTUAL","net_assessment":"$NET_ASSESSMENT"}
EOF
echo ""
echo "Annotation saved to $ANNOTATION_FILE"