#!/usr/bin/env bash # ============================================================================= # opax.sh — Gemini 2.5 Pro TUI starter (Vertex AI us-central1) # # Bruk: source ~/OSVauco/scripts/opax.sh # Alias: opax (settes av scripts/boot.sh) # # Modell og region er låst i docs/AGENT_RULEBOOK.md. # ============================================================================= OSVAUCO_DIR="${OSVAUCO_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" export GOOGLE_CLOUD_PROJECT="propane-will-491900-m5" export GOOGLE_CLOUD_LOCATION="us-central1" export VERTEX_AI_LOCATION="us-central1" export GEMINI_MODEL="gemini-2.5-pro" HANDOFF="$OSVAUCO_DIR/docs/HANDOFF.md" MASTERPLAN="$OSVAUCO_DIR/docs/MASTERPLAN.md" ROADMAP="$OSVAUCO_DIR/docs/ROADMAP.md" RULEBOOK="$OSVAUCO_DIR/docs/AGENT_RULEBOOK.md" SESSION_LOG="$OSVAUCO_DIR/docs/OSVAUCO_OPAX_SESSION_LOG.md" GREEN="$(tput setaf 2 2>/dev/null || printf '\033[0;32m')" RED="$(tput setaf 1 2>/dev/null || printf '\033[0;31m')" YELLOW="$(tput setaf 3 2>/dev/null || printf '\033[1;33m')" CYAN="$(tput setaf 6 2>/dev/null || printf '\033[0;36m')" WHITE="$(tput setaf 7 2>/dev/null || printf '\033[1;37m')" DIM="$(tput dim 2>/dev/null || printf '\033[2m')" BOLD="$(tput bold 2>/dev/null || printf '\033[1m')" NC="$(tput sgr0 2>/dev/null || printf '\033[0m')" OK="✔" FAIL="✗" run_check() { local desc="$1" cmd="$2" err="$3" critical="${4:-false}" printf " %-42s" "$desc" if eval "$cmd" &>/dev/null; then printf "${GREEN}${OK} OK${NC} " else printf "${RED}${FAIL} FAIL${NC} " if [[ "$critical" == "true" ]]; then printf " ${RED}${BOLD}KRITISK:${NC} ${err} " printf " ${YELLOW}Avbryter opax-oppstart.${NC} " return 1 else printf " ${YELLOW}⚠${NC} ${err} " fi fi } clear printf "${CYAN}${BOLD}" cat << 'LOGO' ___ ____ __ __ _ _ _ ____ ___ / _ \/ ___| \ \ / /_ _| | | | | |/ ___|/ _ | | | \___ \ \ \ / / _` | | | | | | | | | | | | |_| |___) | \ V / (_| | |__| |_| | |___| |_| | \___/|____/ \_/ \__,_|____|\___/ \____|\___/ LOGO printf "${NC}${BOLD}${CYAN} OS VAUCO / OPAX${NC}${DIM} · Gemini 2.5 Pro${NC} " printf "${DIM} ─────────────────────────────────────────────${NC} " printf " ${CYAN}project=${NC}%s ${CYAN}region=${NC}%s " "$GOOGLE_CLOUD_PROJECT" "$GOOGLE_CLOUD_LOCATION" printf " ${CYAN}model =${NC}%s " "$GEMINI_MODEL" printf "${DIM} ─────────────────────────────────────────────${NC} " printf "${BOLD}${WHITE}Preflight${NC} " run_check "gcloud auth" "gcloud auth print-access-token" "Kjør: gcloud auth login --no-launch-browser" true || return 1 run_check "project = $GOOGLE_CLOUD_PROJECT" "[[ "$(gcloud config get-value project 2>/dev/null)" == "$GOOGLE_CLOUD_PROJECT" ]]" "Kjør: gcloud config set project $GOOGLE_CLOUD_PROJECT" false run_check "HANDOFF.md finnes" "[[ -f '$HANDOFF' ]]" "Mangler: $HANDOFF" false run_check "MASTERPLAN.md finnes" "[[ -f '$MASTERPLAN' ]]" "Mangler MASTERPLAN" false run_check "ROADMAP.md finnes" "[[ -f '$ROADMAP' ]]" "Mangler ROADMAP" false run_check "AGENT_RULEBOOK.md finnes" "[[ -f '$RULEBOOK' ]]" "Mangler RULEBOOK" false run_check "gemini CLI installert" "command -v gemini" "Installer: npm i -g @google/generative-ai-cli" true || return 1 run_check "gh CLI auth" "gh auth status" "Kjør: gh auth login" false run_check "Vertex AI API enabled" "true # Skipped due to VPC SC" "N/A" false printf " ${BOLD}${CYAN}NESTE OPPGAVE${NC} " if [[ -f "$HANDOFF" ]]; then sed -n '/^##.*[Nn]este [Oo]ppgave/,/^## /p' "$HANDOFF" | sed '1d;$d' | sed '/^$/d' | head -12 fi printf " ${DIM}Tips:${NC} 'ho' = HANDOFF · 'sol' = avslutt+commit · 'pf' = re-preflight · 'gh pr list' = aktive PRs " cd "$OSVAUCO_DIR" printf " ${GREEN}${BOLD}→ Starter gemini...${NC} (laster kontekst fra .gemini/GEMINI.md) " gemini GEMINI_EXIT=$? # ============================================================================= # EXIT-HOOK: spør om sesjons-logg etter at gemini avsluttes # ============================================================================= printf " ${DIM}── opax-sesjon avsluttet (exit=$GEMINI_EXIT) ──${NC} " printf "${BOLD}${CYAN}Vil du logge sesjonen nå?${NC} [Y/n]: " read -r LOGG_ANSWER case "${LOGG_ANSWER:-y}" in n|N) printf " ${DIM}OK — kjør 'sol' senere når du vil logge + commit.${NC} " ;; *) if declare -f sol >/dev/null; then sol; else bash "$OSVAUCO_DIR/scripts/opax-logg-slutt.sh"; fi ;; esac