#!/usr/bin/env bash # ============================================================================= # osvauco-opax-boot.sh — OSVauco OPAX session-starter # Bruk: source ~/OSVauco/scripts/osvauco-opax-boot.sh # NB: Må sources (ikke bash) for PROMPT_COMMAND + opax_logg_slutt. # ============================================================================= OSVAUCO_DIR="$HOME/OSVauco" ROADMAP="$OSVAUCO_DIR/docs/VAUCO_OS_ROADMAP.md" TODO="$OSVAUCO_DIR/docs/TODO.md" SESSION_LOG="$OSVAUCO_DIR/docs/OSVAUCO_OPAX_SESSION_LOG.md" GREEN="$(tput setaf 2 || true)" RED="$(tput setaf 1 || true)" YELLOW="$(tput setaf 3 || true)" CYAN="$(tput setaf 6 || true)" BOLD="$(tput bold || true)" DIM="\033[2m" NC="$(tput sgr0 || true)" SESSION_ID="$(date '+%Y%m%d-%H%M%S')" # ============================================================================= # AUTO-AUTH RENEWAL # ============================================================================= ADC_SCOPE_FILE="$HOME/.config/gcloud/.osvauco-adc-renewed" printf "${BOLD}${CYAN} [ AUTH ]${NC}\n" if ! gcloud auth print-access-token >/dev/null 2>&1; then printf " ${YELLOW}⚠ gcloud auth utløpt — logger inn...${NC}\n" gcloud auth login --no-launch-browser else printf " ${DIM}✦ gcloud auth OK${NC}\n" fi # ADC sjekk NEED_ADC_LOGIN=0 if ! gcloud auth application-default print-access-token >/dev/null 2>&1; then NEED_ADC_LOGIN=1 elif [[ -f "$ADC_SCOPE_FILE" ]]; then if [[ $(($(date +%s) - $(stat -c %Y "$ADC_SCOPE_FILE"))) -gt 28800 ]]; then NEED_ADC_LOGIN=1 fi else NEED_ADC_LOGIN=1 fi if [[ $NEED_ADC_LOGIN -eq 1 ]]; then printf " ${YELLOW}⚠ ADC utløpt eller gammel — fornyer...${NC}\n" gcloud auth application-default login --no-launch-browser \ --scopes="https://www.googleapis.com/auth/cloud-platform" touch "$ADC_SCOPE_FILE" else printf " ${DIM}✦ ADC OK${NC}\n" fi printf " ${GREEN}✦ Auth klar${NC}\n\n" clear # ============================================================================= # BOOT UI # ============================================================================= printf "${CYAN}OSVauco · OPAX ❱ %s · %s${NC}\n" "$SESSION_ID" "propane-will-491900-m5" printf "${DIM}────────────────────────────────────────────────────────────${NC}\n" printf "${BOLD}SERVICES${NC}\n" check_service() { printf " %-12s " "$1" if eval "$2" >/dev/null 2>&1; then printf "${GREEN}✦ OK${NC}\n"; else printf "${RED}✗ FAIL${NC}\n"; fi } check_service "Cloud Run" "curl -s -f -H \"Authorization: Bearer $(gcloud auth print-identity-token)\" https://opax.vauco.no/health" check_service "GitHub" "gh auth status" check_service "Git Remote" "git -C $OSVAUCO_DIR ls-remote origin refs/heads/main" printf "${DIM}────────────────────────────────────────────────────────────${NC}\n" printf "${BOLD}SYSTEM${NC}\n" LOAD=$(cat /proc/loadavg | awk '{print $1}') MEM=$(free -h | grep Mem | awk '{printf "%s/%s", $3, $2}') DISK=$(df -h / | tail -1 | awk '{print $5}') printf " %-12s Load: %s · RAM: %s · /: %s\n" "Resources" "$LOAD" "$MEM" "$DISK" printf " %-12s %s\n" "Uptime" "$(uptime -p | sed 's/up //')" printf "${DIM}────────────────────────────────────────────────────────────${NC}\n" printf "${BOLD}NEXT${NC}\n" NEXT_ROADMAP=$(awk '/^## NEXT/{f=1;next} f && /^## /{f=0} f && /^- \[ \]/{print;exit}' "$ROADMAP" 2>/dev/null || true) printf " ${GREEN}▶ %s${NC}\n" "${NEXT_ROADMAP:-Ingen oppgave i roadmap}" printf "${DIM}────────────────────────────────────────────────────────────${NC}\n" printf "${BOLD}QUICK COMMANDS${NC}\n" printf " %-4s %-12s %-4s %-12s\n" "ca" "cost-audit" "cl" "cost-lens" printf " %-4s %-12s %-4s %-12s\n" "cg" "cost-guard" "hc" "health-check" printf " %-4s %-12s %-4s %-12s\n" "pf" "preflight" "st" "smoke-test" printf " %-4s %-12s %-4s %-12s\n" "rl" "roadmap" "sl" "session-log" printf " %-4s %-12s %-4s %-12s\n" "ms" "mirror-sync" "g" "gemini" printf " %-4s %-12s %-4s %-12s\n" "sol" "session-exit" "" "" printf "\n── ready ── SESSION %s ──\n\n" "$SESSION_ID" # ============================================================================= # NVM # ============================================================================= export NVM_DIR="$HOME/.nvm" [[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh" # ============================================================================= # AVSLUTT-FUNKSJON # ============================================================================= sol() { printf "\n ${BOLD}${CYAN}Sesjonslogg — avslutt${NC}\n" printf " Hva ble gjort? (LØST / ULØST)\n > " read -r DONE_DESC [[ -z "$DONE_DESC" ]] && DONE_DESC="(ingen notat)" printf " Uløste problemer? (Enter for ingen)\n > " read -r UNSOLVED [[ -z "$UNSOLVED" ]] && UNSOLVED="ingen" cat >> "$SESSION_LOG" << EOF ### Sesjonsavslutning - Gjort : $DONE_DESC - Uløst : $UNSOLVED - Slutt : $(date '+%Y-%m-%d %H:%M %Z') EOF printf " ${GREEN}[OK]${NC} Logg oppdatert\n" cd "$OSVAUCO_DIR" git add docs/OSVAUCO_OPAX_SESSION_LOG.md 2>/dev/null || true if ! git diff --cached --quiet; then git commit -m "chore(session): logg sesjon $SESSION_ID — $DONE_DESC" git push origin main printf " ${GREEN}[OK]${NC} Pushet → GitHub\n\n" fi } export -f sol 2>/dev/null || true alias sol='sol' # ============================================================================= # GEMINI-START # ============================================================================= read -r -p " Starte Gemini-CLI nå? [y/N]: " ANSWER case "$ANSWER" in y|Y) if ! command -v gemini &>/dev/null; then printf " ${RED}[XX]${NC} gemini ikke funnet.\n" else cd "$OSVAUCO_DIR" gemini fi ;; *) echo " OK — kjør 'gemini' når du er klar. 🚀" ;; esac