fix: Migrate review-pr.sh to SDK + pr-lifecycle (#800)
Extract agent_run() into shared lib/agent-sdk.sh to eliminate code duplication between dev-agent.sh and review-pr.sh (CI dedup check). Rewrite review-pr.sh from tmux-based agent-session.sh to synchronous claude -p invocations via shared agent-sdk.sh, matching the SDK pattern from dev-agent.sh (#798). Key changes: - Create lib/agent-sdk.sh with shared agent_run() function - Both dev-agent.sh and review-pr.sh now source lib/agent-sdk.sh instead of defining agent_run() inline - Replace agent-session.sh (tmux + monitor_phase_loop) with agent_run() - Add .sid file for session continuity: re-reviews resume the original session via --resume, so Claude remembers its prior review - Use worktree.sh for worktree cleanup - Remove phase file signaling — completion is automatic when claude -p returns - Keep all review business logic unchanged Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b9d657f5eb
commit
c2e95799a0
3 changed files with 55 additions and 74 deletions
|
|
@ -29,6 +29,7 @@ source "$(dirname "$0")/../lib/issue-lifecycle.sh"
|
|||
source "$(dirname "$0")/../lib/worktree.sh"
|
||||
source "$(dirname "$0")/../lib/pr-lifecycle.sh"
|
||||
source "$(dirname "$0")/../lib/mirrors.sh"
|
||||
source "$(dirname "$0")/../lib/agent-sdk.sh"
|
||||
|
||||
# Auto-pull factory code to pick up merged fixes before any logic runs
|
||||
git -C "$FACTORY_ROOT" pull --ff-only origin main 2>/dev/null || true
|
||||
|
|
@ -56,43 +57,6 @@ status() {
|
|||
log "$*"
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# agent_run — synchronous Claude invocation (one-shot claude -p)
|
||||
# =============================================================================
|
||||
# Usage: agent_run [--resume SESSION_ID] [--worktree DIR] PROMPT
|
||||
# Sets: _AGENT_SESSION_ID (updated each call, persisted to SID_FILE)
|
||||
_AGENT_SESSION_ID=""
|
||||
|
||||
agent_run() {
|
||||
local resume_id="" worktree_dir=""
|
||||
while [[ "${1:-}" == --* ]]; do
|
||||
case "$1" in
|
||||
--resume) shift; resume_id="${1:-}"; shift ;;
|
||||
--worktree) shift; worktree_dir="${1:-}"; shift ;;
|
||||
*) shift ;;
|
||||
esac
|
||||
done
|
||||
local prompt="${1:-}"
|
||||
|
||||
local -a args=(-p "$prompt" --output-format json --dangerously-skip-permissions --max-turns 200)
|
||||
[ -n "$resume_id" ] && args+=(--resume "$resume_id")
|
||||
[ -n "${CLAUDE_MODEL:-}" ] && args+=(--model "$CLAUDE_MODEL")
|
||||
|
||||
local run_dir="${worktree_dir:-$(pwd)}"
|
||||
local output
|
||||
log "agent_run: starting (resume=${resume_id:-(new)}, dir=${run_dir})"
|
||||
output=$(cd "$run_dir" && timeout "${CLAUDE_TIMEOUT:-7200}" claude "${args[@]}" 2>>"$LOGFILE") || true
|
||||
|
||||
# Extract and persist session_id
|
||||
local new_sid
|
||||
new_sid=$(printf '%s' "$output" | jq -r '.session_id // empty' 2>/dev/null) || true
|
||||
if [ -n "$new_sid" ]; then
|
||||
_AGENT_SESSION_ID="$new_sid"
|
||||
printf '%s' "$new_sid" > "$SID_FILE"
|
||||
log "agent_run: session_id=${new_sid:0:12}..."
|
||||
fi
|
||||
}
|
||||
|
||||
# =============================================================================
|
||||
# CLEANUP
|
||||
# =============================================================================
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue