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 start <issue-ref> <message> [--debug] Start task for issue (forks base session)
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 status Check kugetsu initialization status
kugetsu doctor [--fix] Diagnose and fix kugetsu issues
@@ -55,9 +55,8 @@ Commands:
start Fork new session from base for specific issue.
Requires pm-agent to be running (created by init).
continue Continue work on existing issue session.
delegate Send message to PM agent for task coordination.
Fire-and-forget: returns immediately, runs in background.
Use 'kugetsu logs' to check output.
delegate Parse issue ref from message and call cmd_start directly.
Falls back to PM agent if no issue ref found.
logs Show recent delegation logs.
Default: 10 most recent. Use 'kugetsu logs 20' for more.
status Check if kugetsu is initialized and PM agent is active.
@@ -501,6 +500,41 @@ cmd_status() {
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() {
local message="${1:-}"
@@ -510,6 +544,13 @@ cmd_delegate() {
exit 1
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)
if [ -z "$pm_session" ] || [ "$pm_session" = "null" ] || [ "$pm_session" = "None" ]; then
echo "Error: PM agent session not found. Run 'kugetsu init' first." >&2