fix: use ${GITEA_TOKEN:-} to handle unset token #193

Merged
shoko merged 4 commits from fix/issue-cmd-destroy-unbound-var into main 2026-04-07 02:41:18 +02:00
Showing only changes of commit 08b633400d - Show all commits

View File

@@ -204,18 +204,52 @@ cmd_delegate() {
return return
fi fi
# No issue ref detected — delegate directly to PM agent (legacy path) # No issue ref detected — fork a new session from base session
local pm_session=$(get_pm_agent_session_id) local base_session=$(get_base_session_id)
if [ -z "$pm_session" ] || [ "$pm_session" = "null" ] || [ "$pm_session" = "None" ]; then if [ -z "$base_session" ] || [ "$base_session" = "null" ]; then
echo "Error: PM agent session not found. Run 'kugetsu init' first." >&2 echo "Error: Base session not found. Run 'kugetsu init' first." >&2
exit 1 exit 1
fi fi
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"
load_agent_env "pm-agent" load_agent_env "pm-agent"
nohup sh -c "GITEA_TOKEN='${GITEA_TOKEN:-}' opencode run '$message' --continue --session '$pm_session'" >> "$log_file" 2>&1 &
echo "Delegated to PM agent (logged to $(basename "$log_file"))" local new_session=$(create_session "$base_session")
if [ -z "$new_session" ]; then
echo "Error: Failed to create session" >&2
exit 1
fi
nohup sh -c "GITEA_TOKEN='${GITEA_TOKEN:-}' opencode run '$message' --session '$new_session'" >> "$log_file" 2>&1 &
echo "Delegated to new session (logged to $(basename "$log_file"))"
}
create_session() {
local base_session="${1:-$base_session_id}"
if [ -z "$base_session" ] || [ "$base_session" = "null" ]; then
echo "Error: base session not found. Run 'kugetsu init' first." >&2
return 1
fi
local before_json=$(opencode session list --format=json 2>/dev/null)
local before_ids=$(echo "$before_json" | python3 -c "import sys,json; sessions=json.load(sys.stdin); print(' '.join(s['id'] for s in sessions))" 2>/dev/null || echo "")
opencode run --fork --session "$base_session" "new session" 2>/dev/null
local after_json=$(opencode session list --format=json 2>/dev/null)
local after_ids=$(echo "$after_json" | python3 -c "import sys,json; sessions=json.load(sys.stdin); print(' '.join(s['id'] for s in sessions))" 2>/dev/null || echo "")
local new_session_id=""
for sess in $after_ids; do
if [[ ! " $before_ids " =~ " $sess " ]] && [[ "$sess" != "$base_session" ]]; then
new_session_id="$sess"
break
fi
done
echo "$new_session_id"
} }
build_dev_agent_message() { build_dev_agent_message() {
@@ -275,12 +309,6 @@ cmd_start() {
exit 1 exit 1
fi fi
local pm_agent_session_id=$(get_pm_agent_session_id)
if [ -z "$pm_agent_session_id" ] || [ "$pm_agent_session_id" = "null" ]; then
echo "Error: PM agent session not found. Run 'kugetsu init' first." >&2
exit 1
fi
if worktree_exists "$issue_ref"; then if worktree_exists "$issue_ref"; then
echo "Issue '$issue_ref' already has a worktree. Use 'kugetsu continue' instead." echo "Issue '$issue_ref' already has a worktree. Use 'kugetsu continue' instead."
exit 1 exit 1
@@ -301,22 +329,12 @@ cmd_start() {
exit 1 exit 1
fi fi
local before_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort)
local before_set="|$before_sessions|"
create_worktree "$issue_ref" "$WORKTREES_DIR" create_worktree "$issue_ref" "$WORKTREES_DIR"
local after_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort) local new_session_id=$(create_session "$base_session_id")
local new_session_id=""
while IFS= read -r sess; do
if [[ ! "$before_set" =~ \|${sess}\| ]] && [[ "$sess" != "$base_session_id" ]] && [[ "$sess" != "$pm_agent_session_id" ]]; then
new_session_id="$sess"
break
fi
done <<< "$after_sessions"
if [ -z "$new_session_id" ]; then if [ -z "$new_session_id" ]; then
echo "Error: Could not find newly created session" >&2 echo "Error: Could not create session" >&2
remove_worktree_for_issue "$issue_ref" remove_worktree_for_issue "$issue_ref"
exit 1 exit 1
fi fi
@@ -333,7 +351,7 @@ cmd_start() {
load_agent_env "dev" load_agent_env "dev"
cd "$worktree_path" cd "$worktree_path"
nohup sh -c "GITEA_TOKEN='${GITEA_TOKEN:-}' opencode run '$dev_message' --continue --session '$new_session_id'" >> "$LOGS_DIR/dev-$new_session_id.log" 2>&1 & nohup sh -c "GITEA_TOKEN='${GITEA_TOKEN:-}' opencode run '$dev_message' --session '$new_session_id'" >> "$LOGS_DIR/dev-$new_session_id.log" 2>&1 &
echo "Session started for '$issue_ref': $new_session_id" echo "Session started for '$issue_ref': $new_session_id"
echo "Worktree: $worktree_path" echo "Worktree: $worktree_path"
@@ -388,9 +406,9 @@ cmd_continue() {
if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then
cd "$worktree_path" cd "$worktree_path"
nohup sh -c "GITEA_TOKEN='${GITEA_TOKEN:-}' opencode run '$message' --continue --session '$opencode_session_id'" >> "$LOGS_DIR/dev-$opencode_session_id.log" 2>&1 & nohup sh -c "GITEA_TOKEN='${GITEA_TOKEN:-}' opencode run '$message' --session '$opencode_session_id'" >> "$LOGS_DIR/dev-$opencode_session_id.log" 2>&1 &
else else
nohup sh -c "GITEA_TOKEN='${GITEA_TOKEN:-}' opencode run '$message' --continue --session '$opencode_session_id'" >> "$LOGS_DIR/dev-$opencode_session_id.log" 2>&1 & nohup sh -c "GITEA_TOKEN='${GITEA_TOKEN:-}' opencode run '$message' --session '$opencode_session_id'" >> "$LOGS_DIR/dev-$opencode_session_id.log" 2>&1 &
fi fi
} }