diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index 43524c2..ab2e6bd 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -99,17 +99,6 @@ ensure_worktree_dir() { mkdir -p "$WORKTREES_DIR" } -issue_ref_to_filename() { - local issue_ref="$1" - echo "$issue_ref" | sed 's/[\/:]/-/g' | sed 's/#/-/' -} - -filename_to_issue_ref() { - local filename="$1" - local name="${filename%.json}" - echo "$name" | sed 's/-\([0-9]*\)$/#\1/' | sed 's/-/\//g' -} - issue_ref_to_context_file() { local issue_ref="$1" local context_filename=$(issue_ref_to_filename "$issue_ref") diff --git a/skills/kugetsu/scripts/kugetsu-index.sh b/skills/kugetsu/scripts/kugetsu-index.sh index 0be7814..eb85d26 100755 --- a/skills/kugetsu/scripts/kugetsu-index.sh +++ b/skills/kugetsu/scripts/kugetsu-index.sh @@ -130,6 +130,19 @@ session['pr_url'] = pr_url with open(session_path, 'w') as f: json.dump(session, f, indent=2) -print(f"Updated PR URL for $issue_ref: $pr_url") + print(f"Updated PR URL for $issue_ref: $pr_url") PYEOF } + +# Convert issue ref to session filename +issue_ref_to_filename() { + local issue_ref="$1" + echo "$issue_ref" | sed 's/[\/:]/-/g' | sed 's/#/-/' +} + +# Convert session filename back to issue ref +filename_to_issue_ref() { + local filename="$1" + local name="${filename%.json}" + echo "$name" | sed 's-\([0-9]*\)$-#\1-' | sed 's/-/\//g' +} diff --git a/skills/kugetsu/scripts/kugetsu-queue-daemon.sh b/skills/kugetsu/scripts/kugetsu-queue-daemon.sh old mode 100755 new mode 100644 index d1d1e9f..d1471f3 --- a/skills/kugetsu/scripts/kugetsu-queue-daemon.sh +++ b/skills/kugetsu/scripts/kugetsu-queue-daemon.sh @@ -8,7 +8,12 @@ source "$SCRIPT_DIR/kugetsu-index.sh" source "$SCRIPT_DIR/kugetsu-worktree.sh" source "$SCRIPT_DIR/kugetsu-log.sh" -# Check if a notified task has completed (session ended or has new commits) +# Load GITEA_TOKEN from default.env +if [ -f "$HOME/.kugetsu/env/default.env" ]; then + source "$HOME/.kugetsu/env/default.env" +fi + +# Check if a notified task has completed (forked session ended or has new commits) check_task_completion() { local item="$1" local queue_id=$(basename "$item" .json) @@ -16,15 +21,16 @@ check_task_completion() { [ "$state" = "notified" ] || return 0 - local session_id=$(python3 -c "import json; print(json.load(open('$item')).get('session_id', ''))" 2>/dev/null) + # Use opencode_session_id (the forked session, not the parent pm_session) + local session_id=$(python3 -c "import json; print(json.load(open('$item')).get('opencode_session_id', ''))" 2>/dev/null) local issue_ref=$(python3 -c "import json; print(json.load(open('$item')).get('issue_ref', ''))" 2>/dev/null) # If no session tracked, skip [ -n "$session_id" ] || return 0 - # Check if session still exists in opencode + # Check if forked session still exists in opencode if ! opencode session list 2>/dev/null | grep -q "$session_id"; then - # Session ended — check if work was done + # Forked session ended — check if work was done local worktree_path=$(issue_ref_to_worktree_path "$issue_ref" "$HOME/.kugetsu-worktrees") local has_commits=false @@ -62,12 +68,23 @@ while true; do issue_ref=$(python3 -c "import json; print(json.load(open('$item')).get('issue_ref', ''))" 2>/dev/null) message=$(python3 -c "import json; print(json.load(open('$item')).get('message', ''))" 2>/dev/null) - pm_session=$(get_pm_agent_session_id) - if [ -n "$pm_session" ] && [ "$pm_session" != "null" ]; then + # Source session management and use cmd_start/cmd_continue + source "$SCRIPT_DIR/kugetsu-session.sh" + + if worktree_exists "$issue_ref" "$HOME/.kugetsu-worktrees" || [ -f "$SESSIONS_DIR/$(issue_ref_to_filename "$issue_ref").json" ]; then + # Continue existing session log_file="$LOGS_DIR/delegate-$(date +%s).log" - nohup env GITEA_TOKEN="$GITEA_TOKEN" sh -c "opencode run '$message' --continue --session '$pm_session' >> '$log_file' 2>&1" > /dev/null 2>&1 & + cmd_continue "$issue_ref" "$message" >> "$log_file" 2>&1 & pid=$! - update_queue_item_state "$queue_id" "notified" "$pm_session" "$pid" + update_queue_item_state "$queue_id" "notified" "" "$pid" + echo "Task $queue_id continued for $issue_ref" + else + # Start new session + log_file="$LOGS_DIR/delegate-$(date +%s).log" + cmd_start "$issue_ref" "$message" >> "$log_file" 2>&1 & + pid=$! + update_queue_item_state "$queue_id" "notified" "" "$pid" + echo "Task $queue_id started for $issue_ref" fi fi done