feat(kugetsu): cmd_delegate calls cmd_start directly for parallelization (fixes #75) #111

Closed
shoko wants to merge 3 commits from fix/issue-75-direct-delegate-v2 into main
2 changed files with 1741 additions and 4 deletions

1696
kugetsu Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -33,7 +33,7 @@ Usage:
kugetsu init [--force] Initialize base + pm-agent sessions (requires TTY) kugetsu init [--force] Initialize base + pm-agent sessions (requires TTY)
kugetsu start <issue-ref> <message> [--debug] Start task for issue (forks base session) kugetsu start <issue-ref> <message> [--debug] Start task for issue (forks base session)
kugetsu continue <issue-ref> [message] [--debug] Continue existing task for issue kugetsu continue <issue-ref> [message] [--debug] Continue existing task for issue
kugetsu delegate <message> Send message to PM agent (fire-and-forget) kugetsu delegate <message> Parse issue ref and call cmd_start directly (parallel)
kugetsu logs [n] Show recent delegation logs (default: 10) kugetsu logs [n] Show recent delegation logs (default: 10)
kugetsu status Check kugetsu initialization status kugetsu status Check kugetsu initialization status
kugetsu doctor [--fix] Diagnose and fix kugetsu issues kugetsu doctor [--fix] Diagnose and fix kugetsu issues
@@ -55,9 +55,8 @@ Commands:
start Fork new session from base for specific issue. start Fork new session from base for specific issue.
Requires pm-agent to be running (created by init). Requires pm-agent to be running (created by init).
continue Continue work on existing issue session. continue Continue work on existing issue session.
delegate Send message to PM agent for task coordination. delegate Parse issue ref from message and call cmd_start directly.
Fire-and-forget: returns immediately, runs in background. Falls back to PM agent if no issue ref found.
Use 'kugetsu logs' to check output.
logs Show recent delegation logs. logs Show recent delegation logs.
Default: 10 most recent. Use 'kugetsu logs 20' for more. Default: 10 most recent. Use 'kugetsu logs 20' for more.
status Check if kugetsu is initialized and PM agent is active. status Check if kugetsu is initialized and PM agent is active.
@@ -501,6 +500,41 @@ cmd_status() {
echo "ok" echo "ok"
} }
extract_issue_ref_from_message() {
local message="$1"
if echo "$message" | grep -qE 'https?://[^/]+/[^/]+/[^/]+/issues/[0-9]+'; then
echo "$message" | grep -oE 'https?://[^/]+/[^/]+/[^/]+/issues/[0-9]+' | while read -r url; do
local instance=$(echo "$url" | grep -oE 'https?://[^/]+' | sed 's|https?://||')
local path=$(echo "$url" | grep -oE '/[^/]+/[^/]+/[^/]+')
local issue_num=$(echo "$url" | grep -oE '[0-9]+$')
echo "${instance}${path}#${issue_num}"
done
return
fi
if echo "$message" | grep -qE '[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+#[0-9]+'; then
echo "$message" | grep -oE '[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+#[0-9]+' | head -1
return
fi
if echo "$message" | grep -qE '#[0-9]+'; then
local num=$(echo "$message" | grep -oE '#[0-9]+' | head -1)
if [ -f "$REPOS_CONFIG" ]; then
local first_repo=$(python3 -c "import json; d=json.load(open('$REPOS_CONFIG')); print(list(d.values())[0] if d else '')" 2>/dev/null || echo "")
if [ -n "$first_repo" ]; then
local owner_repo=$(echo "$first_repo" | sed 's|https\?://||' | sed 's|\.git$||')
echo "${owner_repo}${num}"
return
fi
fi
echo "github.com/unknown/repo${num}"
return
fi
echo ""
}
cmd_delegate() { cmd_delegate() {
local message="${1:-}" local message="${1:-}"
@@ -510,6 +544,13 @@ cmd_delegate() {
exit 1 exit 1
fi fi
local issue_ref=$(extract_issue_ref_from_message "$message")
if [ -n "$issue_ref" ] && [[ "$issue_ref" =~ \#[0-9]+$ ]]; then
cmd_start "$issue_ref" "$message"
return
fi
local pm_session=$(get_pm_agent_session_id) local pm_session=$(get_pm_agent_session_id)
if [ -z "$pm_session" ] || [ "$pm_session" = "null" ] || [ "$pm_session" = "None" ]; then if [ -z "$pm_session" ] || [ "$pm_session" = "null" ] || [ "$pm_session" = "None" ]; then
echo "Error: PM agent session not found. Run 'kugetsu init' first." >&2 echo "Error: PM agent session not found. Run 'kugetsu init' first." >&2