232 lines
8.3 KiB
Bash
Executable File
232 lines
8.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# osvauco-opax-boot.sh — OSVauco OPAX session-starter
|
|
# Manuell bruk: bash ~/OSVauco/scripts/osvauco-opax-boot.sh
|
|
# IKKE i ~/.bashrc — det er boot.sh sin jobb
|
|
# =============================================================================
|
|
|
|
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)"
|
|
|
|
OK="${GREEN}[OK]${NC}"
|
|
WARN="${YELLOW}[!!]${NC}"
|
|
FAIL="${RED}[XX]${NC}"
|
|
|
|
SESSION_ID="$(date '+%Y%m%d-%H%M%S')"
|
|
|
|
# =============================================================================
|
|
# Load nvm so node/npm/gemini are on PATH even when script runs as subshell
|
|
# =============================================================================
|
|
export NVM_DIR="$HOME/.nvm"
|
|
# shellcheck source=/dev/null
|
|
[[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
|
|
# Also check common system paths for gemini (e.g. symlinked to /usr/local/bin)
|
|
if ! command -v gemini &>/dev/null && [[ -d "$NVM_DIR" ]]; then
|
|
# nvm may not auto-select a version in non-interactive shells
|
|
NVM_DEFAULT=$(nvm version default 2>/dev/null || true)
|
|
[[ -n "$NVM_DEFAULT" ]] && nvm use "$NVM_DEFAULT" &>/dev/null || true
|
|
fi
|
|
|
|
clear
|
|
|
|
cat << 'BANNER'
|
|
|
|
============================================================
|
|
O S V A U C O · O P A X S E S S I O N
|
|
============================================================
|
|
BANNER
|
|
printf " Session : ${CYAN}${BOLD}%s${NC}\n" "$SESSION_ID"
|
|
printf " Project : %s\n" "${PROJECT_ID:-propane-will-491900-m5}"
|
|
printf " $(date '+%Y-%m-%d %H:%M %Z')\n"
|
|
printf " ----------------------------------------------------\n\n"
|
|
|
|
|
|
# =============================================================================
|
|
# SECTION 1: AUTH
|
|
# =============================================================================
|
|
printf "${BOLD}${CYAN} [ AUTH ]${NC}\n"
|
|
|
|
# .env
|
|
if [[ -f "$OSVAUCO_DIR/.env" ]]; then
|
|
set -o allexport; source "$OSVAUCO_DIR/.env"; set +o allexport
|
|
printf " $OK .env ${DIM}PROJECT_ID=${PROJECT_ID}${NC}\n"
|
|
else
|
|
printf " $FAIL .env MISSING ${YELLOW}cp .env.example .env${NC}\n"
|
|
fi
|
|
|
|
# gcloud
|
|
if gcloud auth print-access-token >/dev/null 2>&1; then
|
|
ACCOUNT=$(gcloud auth list --filter=status:ACTIVE --format="value(account)" 2>/dev/null)
|
|
printf " $OK gcloud ${DIM}%s${NC}\n" "$ACCOUNT"
|
|
else
|
|
printf " $FAIL gcloud ${YELLOW}gcloud auth login --no-launch-browser${NC}\n"
|
|
fi
|
|
|
|
# ADC
|
|
if gcloud auth application-default print-access-token >/dev/null 2>&1; then
|
|
printf " $OK ADC ${DIM}Application Default Credentials OK${NC}\n"
|
|
else
|
|
printf " $WARN ADC ${YELLOW}gcloud auth application-default login${NC}\n"
|
|
fi
|
|
|
|
# GitHub CLI
|
|
if command -v gh >/dev/null 2>&1 && gh auth status >/dev/null 2>&1; then
|
|
GH_USER=$(gh api user --jq .login 2>/dev/null || echo "ukjent")
|
|
printf " $OK GitHub CLI ${DIM}gh → %s${NC}\n" "$GH_USER"
|
|
else
|
|
printf " $WARN GitHub CLI ${YELLOW}gh auth login (valgfritt)${NC}\n"
|
|
fi
|
|
|
|
# Gemini CLI
|
|
if command -v gemini &>/dev/null; then
|
|
GEMINI_VER=$(gemini --version 2>/dev/null || echo "ukjent")
|
|
printf " $OK Gemini CLI ${DIM}%s${NC}\n" "$GEMINI_VER"
|
|
else
|
|
printf " $WARN Gemini CLI ${YELLOW}Ikke installert — kjør: npm install -g @google/gemini-cli${NC}\n"
|
|
fi
|
|
|
|
printf "\n"
|
|
|
|
|
|
# =============================================================================
|
|
# SECTION 2: OPAX HEALTH
|
|
# =============================================================================
|
|
printf "${BOLD}${CYAN} [ OPAX HEALTH ]${NC}\n"
|
|
PING_URL="https://opax.vauco.no/ping"
|
|
if curl -fsS --max-time 5 "$PING_URL" >/dev/null 2>&1; then
|
|
printf " $OK opax.vauco.no ${DIM}%s${NC}\n" "$PING_URL"
|
|
else
|
|
printf " $FAIL opax.vauco.no ${RED}NEDE — sjekk Cloud Run / DNS${NC}\n"
|
|
fi
|
|
printf "\n"
|
|
|
|
|
|
# =============================================================================
|
|
# SECTION 3: NESTE OPPGAVE (fra ROADMAP + TODO)
|
|
# =============================================================================
|
|
printf "${BOLD}${CYAN} [ NESTE OPPGAVE ]${NC}\n"
|
|
|
|
# Hent første ugjorte oppgave under ## NEXT fra ROADMAP
|
|
if [[ -f "$ROADMAP" ]]; then
|
|
NEXT_ROADMAP=$(awk '/^## NEXT/{f=1;next} f && /^## /{f=0} f && /^- \[ \]/{print;exit}' "$ROADMAP")
|
|
if [[ -n "$NEXT_ROADMAP" ]]; then
|
|
printf " ${GREEN}${BOLD}▶ ROADMAP NEXT:${NC}\n"
|
|
printf " ${GREEN}%s${NC}\n" "$NEXT_ROADMAP"
|
|
else
|
|
printf " ${DIM}(ingen åpne punkt under ## NEXT i ROADMAP)${NC}\n"
|
|
fi
|
|
else
|
|
printf " ${WARN} ROADMAP ikke funnet: %s\n" "$ROADMAP"
|
|
fi
|
|
|
|
# Hent åpne punkter fra TODO.md (maks 3)
|
|
if [[ -f "$TODO" ]]; then
|
|
TODO_ITEMS=$(grep -m3 '^- \[ \]' "$TODO" 2>/dev/null || true)
|
|
if [[ -n "$TODO_ITEMS" ]]; then
|
|
printf " ${YELLOW}${BOLD}▶ TODO:${NC}\n"
|
|
while IFS= read -r line; do
|
|
printf " ${YELLOW}%s${NC}\n" "$line"
|
|
done <<< "$TODO_ITEMS"
|
|
fi
|
|
fi
|
|
|
|
printf "\n"
|
|
|
|
|
|
# =============================================================================
|
|
# SECTION 4: SESSION-LOGG
|
|
# =============================================================================
|
|
mkdir -p "$(dirname "$SESSION_LOG")"
|
|
|
|
printf "${BOLD}${CYAN} [ SESSION ]${NC}\n"
|
|
printf " Hva skal du jobbe med i dag?\n"
|
|
printf " ${DIM}(skriv kort beskrivelse, trykk Enter)${NC}\n > "
|
|
read -r SESSION_DESC
|
|
[[ -z "$SESSION_DESC" ]] && SESSION_DESC="(ingen beskrivelse)"
|
|
|
|
cat >> "$SESSION_LOG" << EOF
|
|
|
|
---
|
|
## Session: $SESSION_ID
|
|
- Tid : $(date '+%Y-%m-%d %H:%M %Z')
|
|
- Bruker : ${ACCOUNT:-ukjent}
|
|
- OPAX : $(curl -fsS --max-time 3 "https://opax.vauco.no/ping" >/dev/null 2>&1 && echo OK || echo NEDE)
|
|
- Mål : $SESSION_DESC
|
|
EOF
|
|
|
|
printf " $OK Logg startet ${DIM}→ docs/OSVAUCO_OPAX_SESSION_LOG.md${NC}\n\n"
|
|
|
|
|
|
# =============================================================================
|
|
# QUICK REFERENCE
|
|
# =============================================================================
|
|
printf "${DIM} ---------------------------------------------------${NC}\n"
|
|
printf " ${CYAN}${BOLD}HURTIGKOMMANDOER${NC}\n"
|
|
printf " ${DIM}gemini${NC} → Gemini TUI (OPAX-MCP)\n"
|
|
printf " ${DIM}cost-audit${NC} → bash scripts/cost-audit.sh\n"
|
|
printf " ${DIM}roadmap${NC} → cat docs/VAUCO_OS_ROADMAP.md\n"
|
|
printf " ${DIM}session-log${NC} → cat docs/OSVAUCO_OPAX_SESSION_LOG.md\n"
|
|
printf "${DIM} ---------------------------------------------------${NC}\n\n"
|
|
|
|
|
|
# =============================================================================
|
|
# AVSLUTT-HOOK
|
|
# =============================================================================
|
|
opax-logg-slutt() {
|
|
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
|
|
- Gjort : $DONE_DESC
|
|
- Uløst : $UNSOLVED
|
|
- Slutt : $(date '+%Y-%m-%d %H:%M %Z')
|
|
EOF
|
|
printf " ${GREEN}[OK]${NC} Logg oppdatert → docs/OSVAUCO_OPAX_SESSION_LOG.md\n\n"
|
|
}
|
|
export -f opax-logg-slutt 2>/dev/null || true
|
|
printf " ${DIM}Når du er ferdig → skriv: ${NC}${BOLD}opax-logg-slutt${NC}\n\n"
|
|
|
|
|
|
# =============================================================================
|
|
# VALGFRI GEMINI-START
|
|
# =============================================================================
|
|
read -r -p " Starte Gemini-CLI nå? [y/N]: " ANSWER
|
|
case "$ANSWER" in
|
|
y|Y)
|
|
echo
|
|
if ! command -v gemini &>/dev/null; then
|
|
printf " ${RED}[XX]${NC} gemini ikke funnet.\n"
|
|
printf " Installer med:\n"
|
|
printf " curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash\n"
|
|
printf " export NVM_DIR=\"\$HOME/.nvm\" && source \"\$NVM_DIR/nvm.sh\"\n"
|
|
printf " nvm install --lts\n"
|
|
printf " npm install -g @google/gemini-cli\n"
|
|
printf " ln -sf \$(which gemini) /usr/local/bin/gemini\n"
|
|
else
|
|
echo " [OSVauco] Starter Gemini-CLI fra ~/OSVauco..."
|
|
cd "$OSVAUCO_DIR"
|
|
gemini
|
|
fi
|
|
;;
|
|
*)
|
|
echo
|
|
echo " [OSVauco] OK — kjør 'gemini' når du vil. God session! 🚀"
|
|
;;
|
|
esac
|