#!/usr/bin/env bash # Display the Claude request history for this project. # # Usage: # .claude/scripts/show-history.sh [--filter open|merged|pending] [--last N] [--json] set -euo pipefail LOG_FILE=".claude/request-log.jsonl" FILTER="" LAST=0 JSON_MODE=false while [[ $# -gt 0 ]]; do case "$1" in --filter) FILTER="$2"; shift 2 ;; --last) LAST="$2"; shift 2 ;; --json) JSON_MODE=true; shift ;; -*) echo "Unknown flag: $1" >&2; exit 1 ;; *) LOG_FILE="$1"; shift ;; esac done if [ ! -f "$LOG_FILE" ]; then echo "No request log found at $LOG_FILE" exit 0 fi if ! command -v jq &>/dev/null; then echo "Error: jq not found. Run: nix develop path:~/.claude/workflows/forgejo" >&2 exit 1 fi TOTAL=$(wc -l < "$LOG_FILE" | tr -d ' ') if [ "$TOTAL" -eq 0 ]; then echo "No requests logged yet." exit 0 fi # Build jq filter JQ_SELECT='.' if [ -n "$FILTER" ]; then JQ_SELECT="select(.status == \"$FILTER\")" fi CONTENT=$(jq -r "$JQ_SELECT" "$LOG_FILE" 2>/dev/null | jq -s '.') if [ "$LAST" -gt 0 ]; then CONTENT=$(echo "$CONTENT" | jq ".[-${LAST}:]") fi if [ "$JSON_MODE" = true ]; then echo "$CONTENT" exit 0 fi COUNT=$(echo "$CONTENT" | jq 'length') echo "━━━ Request History ($LOG_FILE) ━━━" echo "Total: $TOTAL entries | Showing: $COUNT${FILTER:+ ($FILTER)}" echo "" echo "$CONTENT" | jq -r '.[] | "[\(.timestamp[0:16])] \(.id)", " Prompt: \(.prompt | gsub("\n";" ") | .[0:80])\(if (.prompt | length) > 80 then "…" else "" end)", " Branch: \(.branch)", (if .pr_number then " PR: #\(.pr_number) [\(.status)] \(.pr_url // "")" else " PR: none yet (status: \(.status))" end), "" ' # Summary stats OPEN=$(jq -r 'select(.status == "open")' "$LOG_FILE" | jq -s 'length') MERGED=$(jq -r 'select(.status == "merged")' "$LOG_FILE" | jq -s 'length') PENDING=$(jq -r 'select(.status == "pending")' "$LOG_FILE" | jq -s 'length') echo "━━━ Summary ━━━" echo " Open PRs: $OPEN" echo " Merged: $MERGED" echo " No PR yet: $PENDING"