# OSVauco · OPAX — VS Code Windows Startup # settings.json: "args": ["-NoExit","-File","G:\\Shared drives\\OS-VAUCO-DRIVE\\OSVauco\\scripts\\osv-startup.ps1"] $REPO = "G:\Shared drives\OS-VAUCO-DRIVE\OSVauco" $PING = "https://opax.vauco.no/ping" $LOG = "$REPO\docs\OSVAUCO_OPAX_SESSION_LOG.md" $W = 54 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 Set-Location $REPO Clear-Host # ---- SJEKKER (stille) ---------------------------------------- $gcOK = $false; $adcOK = $false; $opaxOK = $false; $gitOK = $false; $gcAcc = "" $gitOut = git pull 2>&1; $gitOK = ($LASTEXITCODE -eq 0) try { $gcAcc = gcloud auth list --filter=status:ACTIVE --format="value(account)" 2>$null if ($gcAcc) { $gcOK = $true gcloud config set project propane-will-491900-m5 2>$null | Out-Null gcloud config set compute/region us-central1 2>$null | Out-Null } } catch {} try { if (gcloud auth application-default print-access-token 2>$null) { $adcOK = $true } } catch {} try { if ((Invoke-RestMethod -Uri $PING -TimeoutSec 5).status -eq 'ok') { $opaxOK = $true } } catch {} $allOK = $gitOK -and $opaxOK -and $gcOK # ---- STATUS STRENGER ----------------------------------------- if ($gitOK) { $gitTxt = "✅ Git : " + $(if ($gitOut -match 'Already') {'up to date'} else {'oppdatert'}) } else { $gitTxt = "❌ Git : FEIL" } $gcTxt = $(if ($gcOK) { "✅ GCP : " + ($gcAcc -replace '@vauco.no','') } else { "⚠ GCP : ikke logget inn" }) $adcTxt = $(if ($adcOK) { "✅ ADC : OK" } else { "⚠ ADC : gcloud auth application-default login" }) $opaxTxt = $(if ($opaxOK) { "✅ OPAX : opax.vauco.no" } else { "❌ OPAX : nede - sjekk Cloud Run" }) # ---- HJELPEFUNKSJONER ---------------------------------------- function Pad($text, $width) { if ($text.Length -gt $width) { return $text.Substring(0, $width - 1) + "…" } return $text + (" " * ($width - $text.Length)) } function GlowLine($cols) { # $cols = array of [text, color] pairs filling $W chars foreach ($c in $cols) { Write-Host $c[0] -NoNewline -ForegroundColor $c[1] } Write-Host "" } function GlowBox($lines) { $seg = [math]::Floor($W / 3) $r = $W - $seg * 2 # Top Write-Host " " -NoNewline Write-Host ("█" * $seg) -NoNewline -ForegroundColor Magenta Write-Host ("█" * $seg) -NoNewline -ForegroundColor DarkGreen Write-Host ("█" * $r) -ForegroundColor Green # Lines foreach ($line in $lines) { $inner = Pad $line ($W - 4) Write-Host " " -NoNewline Write-Host "█" -NoNewline -ForegroundColor Magenta Write-Host (" $inner ") -NoNewline -ForegroundColor Green Write-Host "█" -ForegroundColor Green } # Bottom (reversed) Write-Host " " -NoNewline Write-Host ("█" * $r) -NoNewline -ForegroundColor Green Write-Host ("█" * $seg) -NoNewline -ForegroundColor DarkGreen Write-Host ("█" * $seg) -ForegroundColor Magenta } function PulseBox($lines) { # Animate border: cycle Magenta->DarkGreen->Green->DarkGreen->Magenta (3 frames) $frames = @( @('Magenta','DarkGreen','Green'), @('DarkGreen','Green','Magenta'), @('Green','Magenta','DarkGreen') ) $seg = [math]::Floor($W / 3); $r = $W - $seg * 2 foreach ($f in $frames) { # Move cursor up to overwrite (skip on first frame) $top = " " + ($f[0] * 0) # just use colors [System.Console]::SetCursorPosition(0, [System.Console]::CursorTop) Write-Host " " -NoNewline Write-Host ("█" * $seg) -NoNewline -ForegroundColor $f[0] Write-Host ("█" * $seg) -NoNewline -ForegroundColor $f[1] Write-Host ("█" * $r) -ForegroundColor $f[2] foreach ($line in $lines) { $inner = Pad $line ($W - 4) Write-Host " " -NoNewline Write-Host "█" -NoNewline -ForegroundColor $f[0] Write-Host (" $inner ") -NoNewline -ForegroundColor Green Write-Host "█" -ForegroundColor $f[2] } Write-Host " " -NoNewline Write-Host ("█" * $r) -NoNewline -ForegroundColor $f[2] Write-Host ("█" * $seg) -NoNewline -ForegroundColor $f[1] Write-Host ("█" * $seg) -ForegroundColor $f[0] Start-Sleep -Milliseconds 180 # Move cursor back up $moveUp = $lines.Count + 2 for ($i = 0; $i -lt $moveUp; $i++) { Write-Host "`e[1A" -NoNewline } } # Final static draw GlowBox $lines } function DocBox($line) { # Each doc commit gets its own mini glow box $hash = "" $date = "" $msg = $line if ($line -match '^([0-9a-f]{7}) (\d{4}-\d{2}-\d{2}) (.+)$') { $hash = $matches[1]; $date = $matches[2]; $msg = $matches[3] } $msgPad = Pad $msg ($W - 6) Write-Host " " -NoNewline Write-Host "┌─" -NoNewline -ForegroundColor DarkGreen Write-Host $hash -NoNewline -ForegroundColor Green Write-Host " $date" -ForegroundColor DarkGreen Write-Host " " -NoNewline Write-Host "│ " -NoNewline -ForegroundColor DarkGreen Write-Host $msgPad -ForegroundColor Green Write-Host " " -NoNewline Write-Host "└" -NoNewline -ForegroundColor DarkGreen Write-Host ("─" * ($W - 2)) -ForegroundColor DarkGreen } function StatusLine($text) { $col = if ($text -match "^✅") { 'Green' } elseif ($text -match "^❌") { 'Red' } else { 'Yellow' } $glyph = if ($text -match "^✅") { "▓" } else { "░" } Write-Host " " -NoNewline Write-Host $glyph -NoNewline -ForegroundColor $col Write-Host (" $text") -ForegroundColor $col } # ============================================================== # TOPP PULSE-BOKS # ============================================================== Write-Host "" PulseBox @( "", " O S V A U C O · O P A X", " us-central1 · gemini-2.5-pro", " $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')", "" ) Write-Host "" # ============================================================== # NESTE OPPGAVE # ============================================================== Write-Host " ■ NESTE OPPGAVE" -ForegroundColor Magenta $nesteLines = @("Sjekk docs/VAUCO_OS_ROADMAP.md") if (Test-Path $LOG) { $m = [regex]::Match((Get-Content $LOG -Raw -Encoding UTF8), '(?s)## NESTE OPPGAVE\r?\n(.*?)(?=\r?\n## |$)') if ($m.Success) { $nesteLines = $m.Groups[1].Value.Trim() -split "`n" | Where-Object { $_.Trim() -and $_.Trim() -ne '---' } | Select-Object -First 3 | ForEach-Object { $_.Trim() } } } # Egen boks per linje foreach ($nl in $nesteLines) { Write-Host " " -NoNewline Write-Host "┌" -NoNewline -ForegroundColor Magenta Write-Host ("─" * ($W - 2)) -ForegroundColor Magenta $inner = Pad $nl ($W - 4) Write-Host " " -NoNewline Write-Host "│ " -NoNewline -ForegroundColor Magenta Write-Host $inner -ForegroundColor Green Write-Host " " -NoNewline Write-Host "└" -NoNewline -ForegroundColor Magenta Write-Host ("─" * ($W - 2)) -ForegroundColor Magenta } Write-Host "" # ============================================================== # SISTE DOCS — egen boks per commit # ============================================================== Write-Host " ■ SISTE DOCS" -ForegroundColor Magenta $docLines = git -C $REPO log -3 --pretty=format:"%h %cd %s" --date=short -- docs 2>&1 | ForEach-Object { ($_ -replace '[^\x00-\x7F\u00e6\u00f8\u00e5\u00c6\u00d8\u00c5\u2014\u2013]+', '').Trim() } | Where-Object { $_ } foreach ($dl in $docLines) { DocBox $dl } Write-Host "" # ============================================================== # STATUS — glow per linje # ============================================================== Write-Host " ■ STATUS" -ForegroundColor Magenta StatusLine $gitTxt StatusLine $gcTxt StatusLine $adcTxt StatusLine $opaxTxt Write-Host "" # ============================================================== # BUNN PULSE-BOKS # ============================================================== if ($allOK) { PulseBox @("", " ▶▶ ALL SYSTEMS GREEN ◀◀", "") } else { Write-Host " " -NoNewline Write-Host ("█" * $W) -ForegroundColor Yellow Write-Host " █ ⚠ PARTIAL — sjekk status over" -ForegroundColor Yellow Write-Host " " -NoNewline Write-Host ("█" * $W) -ForegroundColor Yellow } Write-Host "" # ============================================================== # CUSTOM PROMPT # ============================================================== function prompt { Write-Host " G:\Shared-drives\" -NoNewline -ForegroundColor Magenta Write-Host "OS" -NoNewline -ForegroundColor White Write-Host "Vauco" -NoNewline -ForegroundColor Green Write-Host " ❯" -NoNewline -ForegroundColor Green return " " }