#!/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 # ─── Mission session cleanup (ORCHESTRATOR-PROTOCOL) ──────────────────────── ORCH_DIR=".mosaic/orchestrator" MISSION_JSON="$ORCH_DIR/mission.json" SESSION_LOCK="$ORCH_DIR/session.lock" COORD_LIB="$HOME/.config/mosaic/tools/orchestrator/_lib.sh" if [[ -f "$SESSION_LOCK" ]] && [[ -f "$COORD_LIB" ]] && command -v jq &>/dev/null; then # shellcheck source=/dev/null source "$COORD_LIB" sess_id="$(jq -r '.session_id // ""' "$SESSION_LOCK")" if [[ -n "$sess_id" && -f "$MISSION_JSON" ]]; then updated="$(jq \ --arg sid "$sess_id" \ --arg ts "$(iso_now)" \ --arg reason "completed" \ '(.sessions[] | select(.session_id == $sid)) |= . + { ended_at: $ts, ended_reason: $reason }' "$MISSION_JSON")" echo "$updated" > "$MISSION_JSON.tmp" && mv "$MISSION_JSON.tmp" "$MISSION_JSON" echo "[agent-framework] Session $sess_id recorded in mission state" fi session_lock_clear "." fi if declare -F mosaic_hook_session_end >/dev/null 2>&1; then run_step "Run repo end hook" mosaic_hook_session_end else echo "[agent-framework] No repo end hook configured (.mosaic/repo-hooks.sh)" fi if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then run_step "Show status" git status --short run_step "Show diff summary" git diff --stat fi