auto: sync
This commit is contained in:
parent
1dde4ade8d
commit
860eab9464
|
|
@ -28,122 +28,80 @@ FAIL="${RED}[XX]${NC}"
|
||||||
SESSION_ID="$(date '+%Y%m%d-%H%M%S')"
|
SESSION_ID="$(date '+%Y%m%d-%H%M%S')"
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# ALIAS + PROMPT_COMMAND AUTO-INJECT i ~/.bashrc (idempotent)
|
# AUTO-AUTH RENEWAL
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
_OSVAUCO_ALIAS_MARKER="# [OSVauco] auto-injected aliases"
|
ADC_SCOPE_FILE="$HOME/.config/gcloud/.osvauco-adc-renewed"
|
||||||
if ! grep -qF "$_OSVAUCO_ALIAS_MARKER" "$BASHRC" 2>/dev/null; then
|
|
||||||
cat >> "$BASHRC" << 'ALIASES'
|
|
||||||
|
|
||||||
# [OSVauco] auto-injected aliases
|
printf "${BOLD}${CYAN} [ AUTH ]${NC}\n"
|
||||||
alias opax='source ~/OSVauco/scripts/osvauco-opax-boot.sh'
|
if ! gcloud auth print-access-token >/dev/null 2>&1; then
|
||||||
alias opax-logg-slutt='bash ~/OSVauco/scripts/opax-logg-slutt.sh'
|
printf " ${YELLOW}⚠ gcloud auth utløpt — logger inn...${NC}\n"
|
||||||
alias mirror-sync='bash ~/OSVauco/scripts/sync-gdrive-mirror.sh'
|
gcloud auth login --no-launch-browser
|
||||||
alias cost-audit='bash ~/OSVauco/scripts/cost-audit.sh'
|
|
||||||
alias roadmap='cat ~/OSVauco/docs/VAUCO_OS_ROADMAP.md'
|
|
||||||
alias session-log='cat ~/OSVauco/docs/OSVAUCO_OPAX_SESSION_LOG.md'
|
|
||||||
alias l='ls -la --color=auto'
|
|
||||||
alias ll='ls -lh --color=auto'
|
|
||||||
ALIASES
|
|
||||||
_ALIAS_INJECTED=true
|
|
||||||
else
|
else
|
||||||
_ALIAS_INJECTED=false
|
printf " ${DIM}✦ gcloud auth OK${NC}\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Last aliases inn i nåværende shell uansett
|
# ADC sjekk med 8t cache
|
||||||
alias opax='source ~/OSVauco/scripts/osvauco-opax-boot.sh'
|
NEED_ADC_LOGIN=0
|
||||||
alias opax-logg-slutt='opax_logg_slutt'
|
if ! gcloud auth application-default print-access-token >/dev/null 2>&1; then
|
||||||
alias mirror-sync='bash ~/OSVauco/scripts/sync-gdrive-mirror.sh'
|
NEED_ADC_LOGIN=1
|
||||||
alias cost-audit='bash ~/OSVauco/scripts/cost-audit.sh'
|
elif [[ -f "$ADC_SCOPE_FILE" ]]; then
|
||||||
alias roadmap='cat ~/OSVauco/docs/VAUCO_OS_ROADMAP.md'
|
# Sjekk om filen er eldre enn 8 timer (28800 sekunder)
|
||||||
alias session-log='cat ~/OSVauco/docs/OSVAUCO_OPAX_SESSION_LOG.md'
|
if [[ $(($(date +%s) - $(stat -c %Y "$ADC_SCOPE_FILE"))) -gt 28800 ]]; then
|
||||||
alias l='ls -la --color=auto'
|
NEED_ADC_LOGIN=1
|
||||||
alias ll='ls -lh --color=auto'
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# PROMPT_COMMAND — logger + PS1-statusindikator
|
|
||||||
# =============================================================================
|
|
||||||
export OSVAUCO_SESSION_LOG="$SESSION_LOG"
|
|
||||||
export OSVAUCO_SESSION_ID="$SESSION_ID"
|
|
||||||
export OSVAUCO_DIR="$OSVAUCO_DIR"
|
|
||||||
|
|
||||||
_opax_last_cmd=''
|
|
||||||
trap '_opax_last_cmd=$(history 1 | sed "s/^[ ]*[0-9]*[ ]*//")' DEBUG
|
|
||||||
|
|
||||||
# PS1-status: kun lokale sjekker — ingen nettverkskall
|
|
||||||
# Grønn = gcloud OK + GDrive mirror er i sync med lokal HEAD
|
|
||||||
# Gul = GDrive mirror utdatert (kjør mirror-sync)
|
|
||||||
# Rød = gcloud auth utløpt
|
|
||||||
_opax_ps1_status() {
|
|
||||||
local state=0
|
|
||||||
|
|
||||||
# gcloud auth (rask lokal tokensjekk)
|
|
||||||
if ! gcloud auth print-access-token >/dev/null 2>&1; then
|
|
||||||
echo 2; return
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# GDrive mirror: sammenlign LAST_SHA mot lokal HEAD
|
|
||||||
local local_sha
|
|
||||||
local_sha=$(git -C "$OSVAUCO_DIR" rev-parse --short HEAD 2>/dev/null || echo "")
|
|
||||||
if [[ -f "$OSVAUCO_DIR/.gdrive-mirror-state" ]]; then
|
|
||||||
local last_sha
|
|
||||||
last_sha=$(grep '^LAST_SHA=' "$OSVAUCO_DIR/.gdrive-mirror-state" | cut -d= -f2-)
|
|
||||||
if [[ -n "$last_sha" && "$last_sha" != "$local_sha" ]]; then
|
|
||||||
state=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo $state
|
|
||||||
}
|
|
||||||
|
|
||||||
_opax_log_cmd() {
|
|
||||||
local exit_code=$?
|
|
||||||
local cmd="$_opax_last_cmd"
|
|
||||||
[[ -z "$cmd" ]] && return
|
|
||||||
[[ "$cmd" == _opax_* ]] && return
|
|
||||||
[[ "$cmd" == "trap "* ]] && return
|
|
||||||
local ts
|
|
||||||
ts=$(date '+%H:%M:%S')
|
|
||||||
local status_marker
|
|
||||||
[[ $exit_code -eq 0 ]] && status_marker="✔" || status_marker="✘[$exit_code]"
|
|
||||||
printf ' %s %s %s\n' "$ts" "$status_marker" "$cmd" >> "${OSVAUCO_SESSION_LOG}" 2>/dev/null || true
|
|
||||||
_opax_last_cmd=''
|
|
||||||
}
|
|
||||||
|
|
||||||
_opax_set_ps1() {
|
|
||||||
local state
|
|
||||||
state=$(_opax_ps1_status)
|
|
||||||
|
|
||||||
local C_LGREEN='\[\033[38;5;82m\]'
|
|
||||||
local C_YELLOW='\[\033[01;33m\]'
|
|
||||||
local C_RED='\[\033[01;31m\]'
|
|
||||||
local C_CYAN='\[\033[01;36m\]'
|
|
||||||
local C_DIM='\[\033[2;37m\]'
|
|
||||||
local C_NC='\[\033[0m\]'
|
|
||||||
|
|
||||||
local badge_color
|
|
||||||
case $state in
|
|
||||||
0) badge_color="$C_LGREEN" ;;
|
|
||||||
1) badge_color="$C_YELLOW" ;;
|
|
||||||
2) badge_color="$C_RED" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
local git_info=''
|
|
||||||
local branch
|
|
||||||
branch=$(git -C "$OSVAUCO_DIR" branch --show-current 2>/dev/null || echo "")
|
|
||||||
[[ -n "$branch" ]] && git_info=" ${C_DIM}git:(${C_CYAN}${branch}${C_DIM})${C_NC}"
|
|
||||||
|
|
||||||
PS1="\n${badge_color}❱ OSVauco ❱${C_NC}${git_info} ${C_DIM}\w${C_NC}\n${badge_color}\$${C_NC} "
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "${PROMPT_COMMAND}" != *"_opax_log_cmd"* ]]; then
|
|
||||||
PROMPT_COMMAND="_opax_log_cmd; _opax_set_ps1${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
|
|
||||||
else
|
else
|
||||||
if [[ "${PROMPT_COMMAND}" != *"_opax_set_ps1"* ]]; then
|
NEED_ADC_LOGIN=1
|
||||||
PROMPT_COMMAND="${PROMPT_COMMAND}; _opax_set_ps1"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
export PROMPT_COMMAND
|
|
||||||
_opax_set_ps1
|
if [[ $NEED_ADC_LOGIN -eq 1 ]]; then
|
||||||
|
printf " ${YELLOW}⚠ ADC utløpt eller gammel — fornyer...${NC}\n"
|
||||||
|
gcloud auth application-default login --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
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# COMPACT BOOT UI
|
||||||
|
# =============================================================================
|
||||||
|
printf "${CYAN}OSVauco · OPAX ❱ %s · %s${NC}\n" "$SESSION_ID" "${PROJECT_ID:-propane-will-491900-m5}"
|
||||||
|
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
|
||||||
|
|
||||||
|
# 1. SERVICES
|
||||||
|
printf "${BOLD}SERVICES${NC}\n"
|
||||||
|
# Helper: check_service <name> <cmd>
|
||||||
|
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
|
||||||
|
}
|
||||||
|
# Vertex, Cloud Run, GH, Git
|
||||||
|
check_service "Vertex AI" "curl -s -f -H \"Authorization: Bearer $(gcloud auth application-default print-access-token)\" \"https://us-central1-aiplatform.googleapis.com/v1/projects/propane-will-491900-m5/locations/us-central1/models\""
|
||||||
|
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"
|
||||||
|
|
||||||
|
# 2. SYSTEM
|
||||||
|
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 %s · %s · %s\n" "Resources" "Load: $LOAD" "RAM: $MEM" "/: $DISK"
|
||||||
|
printf " %-12s %s\n" "Uptime" "$(uptime -p | sed 's/up //')"
|
||||||
|
|
||||||
|
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
|
||||||
|
|
||||||
|
# 3. NESTE
|
||||||
|
printf "${BOLD}NEXT${NC}\n"
|
||||||
|
NEXT_ROADMAP=$(awk '/^## NEXT/{f=1;next} f && /^## /{f=0} f && /^- \[ \]/{print;exit}' "$ROADMAP")
|
||||||
|
printf " ${GREEN}▶ %s${NC}\n" "${NEXT_ROADMAP:-Ingen oppgave}"
|
||||||
|
|
||||||
|
printf "${DIM}────────────────────────────────────────────────────────────${NC}\n"
|
||||||
|
printf "── ready ── SESSION %s ──────────────────\n\n" "$SESSION_ID"
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Load nvm
|
# Load nvm
|
||||||
|
|
@ -155,225 +113,12 @@ if ! command -v gemini &>/dev/null && [[ -d "$NVM_DIR" ]]; then
|
||||||
[[ -n "$NVM_DEFAULT" ]] && nvm use "$NVM_DEFAULT" &>/dev/null || true
|
[[ -n "$NVM_DEFAULT" ]] && nvm use "$NVM_DEFAULT" &>/dev/null || true
|
||||||
fi
|
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"
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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}npm install -g @google/gemini-cli${NC}\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$_ALIAS_INJECTED" == true ]]; then
|
|
||||||
printf " $OK Aliases ${DIM}Lagt til i ~/.bashrc (aktiv nå)${NC}\n"
|
|
||||||
else
|
|
||||||
printf " $OK Aliases ${DIM}Allerede i ~/.bashrc${NC}\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf " $OK Terminal-logging ${DIM}PROMPT_COMMAND aktiv — loggfører alle kommandoer${NC}\n"
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# SECTION 2: OPAX HEALTH
|
|
||||||
# =============================================================================
|
|
||||||
printf "${BOLD}${CYAN} [ OPAX HEALTH ]${NC}\n"
|
|
||||||
HEALTH_URL="https://opax.vauco.no/health"
|
|
||||||
ID_TOKEN=$(gcloud auth print-identity-token 2>/dev/null || echo "")
|
|
||||||
if [[ -n "$ID_TOKEN" ]] && curl -fsS --max-time 5 \
|
|
||||||
-H "Authorization: Bearer ${ID_TOKEN}" \
|
|
||||||
"$HEALTH_URL" >/dev/null 2>&1; then
|
|
||||||
printf " $OK opax.vauco.no ${DIM}/health — {\"status\":\"ok\"}${NC}\n"
|
|
||||||
else
|
|
||||||
HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" --max-time 5 "$HEALTH_URL" 2>/dev/null || echo "000")
|
|
||||||
case "$HTTP_CODE" in
|
|
||||||
403) printf " $WARN opax.vauco.no ${YELLOW}Oppe men krever auth (403) — IAP konfigureres i Phase 5${NC}\n" ;;
|
|
||||||
000) printf " $FAIL opax.vauco.no ${RED}NEDE — ingen respons (sjekk Cloud Run / DNS)${NC}\n" ;;
|
|
||||||
*) printf " $WARN opax.vauco.no ${YELLOW}HTTP %s — sjekk Cloud Run${NC}\n" "$HTTP_CODE" ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# SECTION 3: REPO SYNC + GDRIVE MIRROR
|
|
||||||
# =============================================================================
|
|
||||||
printf "${BOLD}${CYAN} [ REPO SYNC ]${NC}\n"
|
|
||||||
|
|
||||||
LOCAL_SHA=$(git -C "$OSVAUCO_DIR" rev-parse --short HEAD 2>/dev/null || echo "ukjent")
|
|
||||||
LOCAL_BRANCH=$(git -C "$OSVAUCO_DIR" branch --show-current 2>/dev/null || echo "ukjent")
|
|
||||||
REMOTE_SHA=$(git -C "$OSVAUCO_DIR" ls-remote origin refs/heads/main 2>/dev/null | cut -c1-7 || echo "")
|
|
||||||
|
|
||||||
if [[ -z "$REMOTE_SHA" ]]; then
|
|
||||||
printf " $WARN GitHub HEAD ${YELLOW}Kunne ikke nå GitHub (offline?)${NC}\n"
|
|
||||||
printf " ${DIM}Lokal: %s @ %s${NC}\n" "$LOCAL_SHA" "$LOCAL_BRANCH"
|
|
||||||
elif [[ "$LOCAL_SHA" == "$REMOTE_SHA" ]]; then
|
|
||||||
printf " $OK GitHub ≡ Lokal ${DIM}HEAD %s @ %s — ingen diff${NC}\n" "$LOCAL_SHA" "$LOCAL_BRANCH"
|
|
||||||
else
|
|
||||||
printf " $WARN GitHub ≠ Lokal ${YELLOW}GitHub: %s │ Lokal: %s @ %s${NC}\n" "$REMOTE_SHA" "$LOCAL_SHA" "$LOCAL_BRANCH"
|
|
||||||
printf " ${DIM}Kjør: git pull origin main${NC}\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "\n"
|
|
||||||
printf "${BOLD}${CYAN} [ GDRIVE MIRROR ]${NC}\n"
|
|
||||||
|
|
||||||
if [[ -f "$STATE_FILE" ]]; then
|
|
||||||
LAST_SYNC=$(grep '^LAST_SYNC=' "$STATE_FILE" | cut -d= -f2-)
|
|
||||||
LAST_SHA=$(grep '^LAST_SHA=' "$STATE_FILE" | cut -d= -f2-)
|
|
||||||
SYNC_EPOCH=$(date -d "${LAST_SYNC}" '+%s' 2>/dev/null \
|
|
||||||
|| date -j -f '%Y-%m-%dT%H:%M %Z' "${LAST_SYNC}" '+%s' 2>/dev/null \
|
|
||||||
|| echo 0)
|
|
||||||
NOW_EPOCH=$(date '+%s')
|
|
||||||
AGE_HOURS=$(( (NOW_EPOCH - SYNC_EPOCH) / 3600 ))
|
|
||||||
AGE_MIN=$(( (NOW_EPOCH - SYNC_EPOCH) / 60 % 60 ))
|
|
||||||
|
|
||||||
if [[ "$LAST_SHA" != "$LOCAL_SHA" ]]; then
|
|
||||||
printf " $FAIL GDrive mirror ${RED}UTDATERT — SHA endret (%s → %s)${NC}\n" "$LAST_SHA" "$LOCAL_SHA"
|
|
||||||
printf " ${YELLOW}Kjør: mirror-sync${NC}\n"
|
|
||||||
elif [[ "$AGE_HOURS" -ge 12 ]]; then
|
|
||||||
printf " $FAIL GDrive mirror ${RED}GAMMEL — %st %sm siden sist sync${NC}\n" "$AGE_HOURS" "$AGE_MIN"
|
|
||||||
printf " ${YELLOW}Kjør: mirror-sync${NC}\n"
|
|
||||||
elif [[ "$AGE_HOURS" -ge 8 ]]; then
|
|
||||||
printf " $WARN GDrive mirror ${YELLOW}%st %sm siden sist sync (terskel 12t)${NC}\n" "$AGE_HOURS" "$AGE_MIN"
|
|
||||||
printf " ${DIM}Vurder: mirror-sync${NC}\n"
|
|
||||||
else
|
|
||||||
printf " $OK GDrive mirror ${DIM}%s · HEAD %s${NC}\n" "$LAST_SYNC" "$LAST_SHA"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
printf " $WARN GDrive mirror ${YELLOW}Aldri synkronisert — kjør: mirror-sync${NC}\n"
|
|
||||||
fi
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# SECTION 4: NESTE OPPGAVE
|
|
||||||
# =============================================================================
|
|
||||||
printf "${BOLD}${CYAN} [ NESTE OPPGAVE ]${NC}\n"
|
|
||||||
|
|
||||||
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"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
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 5: SESSION-LOGG START
|
|
||||||
# =============================================================================
|
|
||||||
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)"
|
|
||||||
|
|
||||||
_OPAX_HEALTH="NEDE"
|
|
||||||
if [[ -n "$ID_TOKEN" ]] && curl -fsS --max-time 3 \
|
|
||||||
-H "Authorization: Bearer ${ID_TOKEN}" \
|
|
||||||
"$HEALTH_URL" >/dev/null 2>&1; then
|
|
||||||
_OPAX_HEALTH="OK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >> "$SESSION_LOG" << EOF
|
|
||||||
|
|
||||||
---
|
|
||||||
## Session: $SESSION_ID
|
|
||||||
- Tid : $(date '+%Y-%m-%d %H:%M %Z')
|
|
||||||
- Bruker : ${ACCOUNT:-ukjent}
|
|
||||||
- OPAX : ${_OPAX_HEALTH}
|
|
||||||
- Lokal : $LOCAL_SHA @ $LOCAL_BRANCH
|
|
||||||
- Remote : ${REMOTE_SHA:-ukjent}
|
|
||||||
- Mål : $SESSION_DESC
|
|
||||||
|
|
||||||
### Kommandologg
|
|
||||||
EOF
|
|
||||||
|
|
||||||
printf " $OK Logg startet ${DIM}→ docs/OSVAUCO_OPAX_SESSION_LOG.md${NC}\n"
|
|
||||||
printf " ${DIM}Alle kommandoer loggføres automatisk med tidsstempel + exit-kode.${NC}\n\n"
|
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
|
||||||
# QUICK REFERENCE
|
|
||||||
# =============================================================================
|
|
||||||
printf "${DIM} ---------------------------------------------------${NC}\n"
|
|
||||||
printf " ${CYAN}${BOLD}HURTIGKOMMANDOER${NC}\n"
|
|
||||||
printf " ${DIM}opax${NC} → ny session (source boot på nytt)\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}mirror-sync${NC} → bash scripts/sync-gdrive-mirror.sh\n"
|
|
||||||
printf " ${DIM}opax-logg-slutt${NC} → avslutt og loggfør session\n"
|
|
||||||
printf " ${DIM}l${NC} → ls -la --color=auto\n"
|
|
||||||
printf " ${DIM}ll${NC} → ls -lh --color=auto\n"
|
|
||||||
printf "${DIM} ---------------------------------------------------${NC}\n\n"
|
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# AVSLUTT-FUNKSJON
|
# AVSLUTT-FUNKSJON
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
opax_logg_slutt() {
|
sol() {
|
||||||
PROMPT_COMMAND="${PROMPT_COMMAND//_opax_log_cmd; /}"
|
PROMPT_COMMAND="${PROMPT_COMMAND//_opax_log_cmd; /}"
|
||||||
PROMPT_COMMAND="${PROMPT_COMMAND//_opax_log_cmd/}"
|
PROMPT_COMMAND="${PROMPT_COMMAND//_opax_log_cmd/}"
|
||||||
|
|
||||||
printf "\n ${BOLD}${CYAN}Sesjonslogg — avslutt${NC}\n"
|
printf "\n ${BOLD}${CYAN}Sesjonslogg — avslutt${NC}\n"
|
||||||
printf " Hva ble gjort? (LØST / ULØST)\n > "
|
printf " Hva ble gjort? (LØST / ULØST)\n > "
|
||||||
read -r DONE_DESC
|
read -r DONE_DESC
|
||||||
|
|
@ -389,7 +134,6 @@ opax_logg_slutt() {
|
||||||
- Slutt : $(date '+%Y-%m-%d %H:%M %Z')
|
- Slutt : $(date '+%Y-%m-%d %H:%M %Z')
|
||||||
EOF
|
EOF
|
||||||
printf " ${GREEN}[OK]${NC} Logg oppdatert → docs/OSVAUCO_OPAX_SESSION_LOG.md\n\n"
|
printf " ${GREEN}[OK]${NC} Logg oppdatert → docs/OSVAUCO_OPAX_SESSION_LOG.md\n\n"
|
||||||
# ── Auto-commit + push sesjonslogg til GitHub ─────────────────────────
|
|
||||||
cd "$OSVAUCO_DIR"
|
cd "$OSVAUCO_DIR"
|
||||||
git add docs/OSVAUCO_OPAX_SESSION_LOG.md 2>/dev/null || true
|
git add docs/OSVAUCO_OPAX_SESSION_LOG.md 2>/dev/null || true
|
||||||
if ! git diff --cached --quiet; then
|
if ! git diff --cached --quiet; then
|
||||||
|
|
@ -400,10 +144,9 @@ EOF
|
||||||
printf " ${DIM}[--]${NC} Ingen ny logg å pushe\n\n"
|
printf " ${DIM}[--]${NC} Ingen ny logg å pushe\n\n"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
export -f opax_logg_slutt 2>/dev/null || true
|
export -f sol 2>/dev/null || true
|
||||||
alias opax-logg-slutt='opax_logg_slutt'
|
alias sol='sol'
|
||||||
|
alias opax-logg-slutt='sol'
|
||||||
printf " ${DIM}Avslutt session → ${NC}${BOLD}opax-logg-slutt${NC}\n\n"
|
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
@ -426,3 +169,16 @@ case "$ANSWER" in
|
||||||
echo " [OSVauco] OK — kjør 'gemini' når du vil. God session! 🚀"
|
echo " [OSVauco] OK — kjør 'gemini' når du vil. God session! 🚀"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# QUICK COMMANDS
|
||||||
|
# =============================================================================
|
||||||
|
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" "l" "ls -la" "ll" "ls -lh"
|
||||||
|
printf " %-4s %-12s %-4s %-12s\n" "sol" "avslutt" "" ""
|
||||||
|
printf "\n"
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,25 @@ echo "[sync-gdrive-mirror] Tidsstempel: $TIMESTAMP · HEAD: $SHA"
|
||||||
|
|
||||||
# ── Hent remote-endringer FØR vi skriver noe ──────────────────────────────
|
# ── Hent remote-endringer FØR vi skriver noe ──────────────────────────────
|
||||||
echo "[sync-gdrive-mirror] Henter remote-endringer (rebase)..."
|
echo "[sync-gdrive-mirror] Henter remote-endringer (rebase)..."
|
||||||
|
|
||||||
|
# Håndter lokale unstaged endringer
|
||||||
|
STASHED=0
|
||||||
|
if ! git diff --quiet; then
|
||||||
|
echo "[sync-gdrive-mirror] Oppdaget lokale endringer, stash-er..."
|
||||||
|
git stash -u -m "sync-gdrive-mirror-autosave"
|
||||||
|
STASHED=1
|
||||||
|
fi
|
||||||
|
|
||||||
git pull --rebase origin main
|
git pull --rebase origin main
|
||||||
|
|
||||||
|
# Pop stash hvis vi lagret noe
|
||||||
|
if [[ $STASHED -eq 1 ]]; then
|
||||||
|
echo "[sync-gdrive-mirror] Gjenoppretter lokale endringer..."
|
||||||
|
if ! git stash pop; then
|
||||||
|
echo "[sync-gdrive-mirror] ADVARSEL: Stash pop feilet. Sjekk for konflikter manuelt!"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# ── Bygg header + staleness-varsel ─────────────────────────────────────────
|
# ── Bygg header + staleness-varsel ─────────────────────────────────────────
|
||||||
cat > "$OUTPUT" << HEADER
|
cat > "$OUTPUT" << HEADER
|
||||||
# VAUCO OS — GDRIVE MIRROR BOOT
|
# VAUCO OS — GDRIVE MIRROR BOOT
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user