fix: enforce MAX_CONCURRENT_AGENTS limit properly (fixes #63)

- Fixed cmd_start() and cmd_continue() to wait for forked child
- Capture child PID with $! and wait before release_agent_slot
- This ensures slot is only released after child process completes
This commit is contained in:
shokollm
2026-04-01 03:05:13 +00:00
parent bc60e644bf
commit bd4e8587b4

View File

@@ -857,14 +857,14 @@ cmd_start() {
remove_worktree_for_issue "$issue_ref"
exit 1
fi
trap release_agent_slot EXIT
if [ "$DEBUG_MODE" = true ]; then
opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 | tee "$SESSIONS_DIR/$session_file.debug.log"
opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 | tee "$SESSIONS_DIR/$session_file.debug.log" &
else
opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1
opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 &
fi
local child_pid=$!
wait $child_pid
release_agent_slot
trap - EXIT
local after_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort)
local new_session_id=""
@@ -937,23 +937,23 @@ cmd_continue() {
echo "Error: Max concurrent agents ($MAX_CONCURRENT_AGENTS) reached. Try again later." >&2
exit 1
fi
trap release_agent_slot EXIT
if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then
echo "Using worktree: $worktree_path"
if [ "$DEBUG_MODE" = true ]; then
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 | tee "$session_path.debug.log"
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 | tee "$session_path.debug.log" &
else
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path"
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 &
fi
else
if [ "$DEBUG_MODE" = true ]; then
opencode run "$message" --continue --session "$opencode_session_id" 2>&1 | tee "$session_path.debug.log"
opencode run "$message" --continue --session "$opencode_session_id" 2>&1 | tee "$session_path.debug.log" &
else
opencode run "$message" --continue --session "$opencode_session_id"
opencode run "$message" --continue --session "$opencode_session_id" 2>&1 &
fi
fi
local child_pid=$!
wait $child_pid
release_agent_slot
trap - EXIT
}
cmd_list() {