#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=./common.sh source "$SCRIPT_DIR/common.sh" ensure_repo_root load_repo_hooks if git rev-parse --is-inside-work-tree >/dev/null 2>&1 && has_remote; then current_branch="$(git rev-parse --abbrev-ref HEAD)" upstream_ref="$(git rev-parse --abbrev-ref --symbolic-full-name "@{upstream}" 2>/dev/null || true)" if [[ -n "$upstream_ref" ]] && ! git show-ref --verify --quiet "refs/remotes/$upstream_ref"; then echo "[agent-framework] Upstream ref '$upstream_ref' is missing; attempting to self-heal branch tracking" fallback_upstream="" if git show-ref --verify --quiet "refs/remotes/origin/develop"; then fallback_upstream="origin/develop" elif git show-ref --verify --quiet "refs/remotes/origin/main"; then fallback_upstream="origin/main" fi if [[ -n "$fallback_upstream" ]] && [[ "$current_branch" != "HEAD" ]]; then git branch --set-upstream-to="$fallback_upstream" "$current_branch" >/dev/null upstream_ref="$fallback_upstream" echo "[agent-framework] Set upstream for '$current_branch' to '$fallback_upstream'" else echo "[agent-framework] No fallback upstream found; skipping pull" upstream_ref="" fi fi if git diff --quiet && git diff --cached --quiet; then if [[ -n "$upstream_ref" ]]; then run_step "Pull latest changes" git pull --rebase else echo "[agent-framework] Skip pull: no valid upstream configured" fi else echo "[agent-framework] Skip pull: working tree has local changes" fi fi if declare -F mosaic_hook_session_start >/dev/null 2>&1; then run_step "Run repo start hook" mosaic_hook_session_start else echo "[agent-framework] No repo start hook configured (.mosaic/repo-hooks.sh)" fi