Compare commits
1 Commits
4d3205de86
...
ebc2f99320
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ebc2f99320 |
@@ -10,6 +10,44 @@ NOTIFICATIONS_FILE="$KUGETSU_DIR/notifications.json"
|
|||||||
LOGS_DIR="$KUGETSU_DIR/logs"
|
LOGS_DIR="$KUGETSU_DIR/logs"
|
||||||
MAX_CONCURRENT_AGENTS="${MAX_CONCURRENT_AGENTS:-3}"
|
MAX_CONCURRENT_AGENTS="${MAX_CONCURRENT_AGENTS:-3}"
|
||||||
|
|
||||||
|
[ -f "$KUGETSU_DIR/config" ] && source "$KUGETSU_DIR/config"
|
||||||
|
|
||||||
|
acquire_agent_slot() {
|
||||||
|
local timeout="${1:-300}"
|
||||||
|
local waited=0
|
||||||
|
(
|
||||||
|
flock -w 1 200 || { echo "Error: Could not acquire lock" >&2; exit 1; }
|
||||||
|
local count
|
||||||
|
count=$(cat "$AGENT_COUNT_FILE" 2>/dev/null || echo 0)
|
||||||
|
if [ "$count" -lt "$MAX_CONCURRENT_AGENTS" ]; then
|
||||||
|
echo $((count + 1)) > "$AGENT_COUNT_FILE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
exit 1
|
||||||
|
) 200>"$AGENT_LOCK_FILE"
|
||||||
|
local result=$?
|
||||||
|
if [ $result -ne 0 ]; then
|
||||||
|
local count
|
||||||
|
count=$(cat "$AGENT_COUNT_FILE" 2>/dev/null || echo 0)
|
||||||
|
if [ $waited -ge $timeout ]; then
|
||||||
|
echo "Error: Timeout waiting for agent slot (max: $MAX_CONCURRENT_AGENTS, current: $count)" >&2
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
release_agent_slot() {
|
||||||
|
(
|
||||||
|
flock -w 1 200 || true
|
||||||
|
local count
|
||||||
|
count=$(cat "$AGENT_COUNT_FILE" 2>/dev/null || echo 0)
|
||||||
|
if [ "$count" -gt 0 ]; then
|
||||||
|
echo $((count - 1)) > "$AGENT_COUNT_FILE"
|
||||||
|
fi
|
||||||
|
) 200>"$AGENT_LOCK_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
count_active_dev_sessions() {
|
count_active_dev_sessions() {
|
||||||
local count=0
|
local count=0
|
||||||
if [ -d "$SESSIONS_DIR" ]; then
|
if [ -d "$SESSIONS_DIR" ]; then
|
||||||
@@ -25,6 +63,17 @@ count_active_dev_sessions() {
|
|||||||
echo "$count"
|
echo "$count"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run_with_limit() {
|
||||||
|
local log_file="$1"
|
||||||
|
shift
|
||||||
|
local cmd=("$@")
|
||||||
|
(
|
||||||
|
"${cmd[@]}" >> "$log_file" 2>&1
|
||||||
|
release_agent_slot
|
||||||
|
) &
|
||||||
|
disown
|
||||||
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat << 'EOF'
|
cat << 'EOF'
|
||||||
kugetsu - OpenCode Session Manager (Issue-Driven)
|
kugetsu - OpenCode Session Manager (Issue-Driven)
|
||||||
@@ -99,6 +148,8 @@ EOF
|
|||||||
|
|
||||||
ensure_dirs() {
|
ensure_dirs() {
|
||||||
mkdir -p "$SESSIONS_DIR"
|
mkdir -p "$SESSIONS_DIR"
|
||||||
|
[ -f "$AGENT_COUNT_FILE" ] || echo 0 > "$AGENT_COUNT_FILE"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_worktree_dir() {
|
ensure_worktree_dir() {
|
||||||
@@ -518,7 +569,11 @@ cmd_delegate() {
|
|||||||
|
|
||||||
mkdir -p "$LOGS_DIR"
|
mkdir -p "$LOGS_DIR"
|
||||||
local log_file="$LOGS_DIR/delegate-$(date +%s).log"
|
local log_file="$LOGS_DIR/delegate-$(date +%s).log"
|
||||||
nohup sh -c "opencode run '$message' --continue --session '$pm_session' >> '$log_file' 2>&1" > /dev/null 2>&1 &
|
if ! acquire_agent_slot; then
|
||||||
|
echo "Error: Max concurrent agents ($MAX_CONCURRENT_AGENTS) reached. Try again later." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
nohup sh -c "opencode run '$message' --continue --session '$pm_session' >> '$log_file' 2>&1; ~/.kugetsu/release-slot.sh" > /dev/null 2>&1 &
|
||||||
disown
|
disown
|
||||||
echo "Delegated to PM agent (logged to $(basename "$log_file"))"
|
echo "Delegated to PM agent (logged to $(basename "$log_file"))"
|
||||||
}
|
}
|
||||||
|
|||||||
11
skills/kugetsu/scripts/release-slot.sh
Executable file
11
skills/kugetsu/scripts/release-slot.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
KUGETSU_DIR="${KUGETSU_DIR:-$HOME/.kugetsu}"
|
||||||
|
AGENT_COUNT_FILE="$KUGETSU_DIR/.agent_count"
|
||||||
|
AGENT_LOCK_FILE="$KUGETSU_DIR/.agent_lock"
|
||||||
|
(
|
||||||
|
flock -w 1 200 || true
|
||||||
|
count=$(cat "$AGENT_COUNT_FILE" 2>/dev/null || echo 0)
|
||||||
|
if [ "$count" -gt 0 ]; then
|
||||||
|
echo $((count - 1)) > "$AGENT_COUNT_FILE"
|
||||||
|
fi
|
||||||
|
) 200>"$AGENT_LOCK_FILE"
|
||||||
Reference in New Issue
Block a user