84 lines
2 KiB
Bash
Executable file
84 lines
2 KiB
Bash
Executable file
#!/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"
|