#!/usr/bin/env bash # pc.sh — Paperclip API wrapper for agents. # # Usage: # pc.sh [body_json] [extra_curl_args...] # # Adds: # - Authorization: Bearer $PAPERCLIP_API_KEY # - X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID (audit trail; falls back to JWT claims if empty) # - Content-Type: application/json (when body provided) # - Base URL: $PAPERCLIP_API_URL # # Examples: # ~/legal-ai/scripts/pc.sh GET "/api/agents/me/inbox-lite" # ~/legal-ai/scripts/pc.sh POST "/api/issues/$ISSUE_ID/checkout" # ~/legal-ai/scripts/pc.sh POST "/api/issues/$ISSUE_ID/comments" '{"body":"שלום"}' # ~/legal-ai/scripts/pc.sh PATCH "/api/issues/$ISSUE_ID" '{"status":"done"}' # ~/legal-ai/scripts/pc.sh DELETE "/api/issues/$ISSUE_ID" # # Sourcing as a function (optional): # source ~/legal-ai/scripts/pc.sh && pc POST "/api/issues/$ISSUE_ID/checkout" set -euo pipefail pc() { local method="${1:-}" local path="${2:-}" local body="${3:-}" if [ $# -ge 3 ]; then shift 3; else shift "$#"; fi if [ -z "$method" ] || [ -z "$path" ]; then echo "usage: pc.sh [BODY_JSON] [extra curl args...]" >&2 return 2 fi : "${PAPERCLIP_API_URL:?PAPERCLIP_API_URL not set}" : "${PAPERCLIP_API_KEY:?PAPERCLIP_API_KEY not set}" local args=(-s -X "$method" -H "Authorization: Bearer $PAPERCLIP_API_KEY" -H "X-Paperclip-Run-Id: ${PAPERCLIP_RUN_ID:-}") if [ -n "$body" ]; then args+=(-H "Content-Type: application/json" -d "$body") fi curl "${args[@]}" "$@" "${PAPERCLIP_API_URL}${path}" } # When invoked directly (not sourced), forward args to pc(). if [ "${BASH_SOURCE[0]}" = "${0}" ]; then pc "$@" fi