diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index 75fe5c2..be4d6a8 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -33,7 +33,7 @@ Usage: kugetsu init [--force] Initialize base + pm-agent sessions (requires TTY) kugetsu start [--debug] Start task for issue (forks base session) kugetsu continue [message] [--debug] Continue existing task for issue - kugetsu delegate Send message to PM agent (fire-and-forget) + kugetsu delegate 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