OSVauco/docs/HANDOFF.md
chrischristiansen-glitch dc9f6265be
docs(handoff): oppdater HANDOFF.md — IAP auth fix for opax-mcp 2026-06-18
Updated the last modified date and author in the HANDOFF document. Revised critical rules and completed tasks, including IAP Auth fixes for opax-mcp.
2026-06-18 14:46:19 +02:00

167 lines
5.9 KiB
Markdown

# HANDOFF — Vauco OS
**Sist oppdatert:** 2026-06-18 14:00 CEST
**Skrevet av:** Perplexity (Orchestrator)
**Status:** Fase B — Gitea er primær Git. GitHub er fasa ut.
---
## ⚠️ KRITISKE REGLER — les alltid først
- **Hovedapp:** `main.py` i rot — IKKJE `agents/core-logic/app.py`
- **Dockerfile:** `agents/core-logic/Dockerfile` — WORKDIR `/app`, CMD uvicorn main:app
- **Region:** `us-central1` | **Service:** `osvauco-agent` | **Prosjekt:** `propane-will-491900-m5`
- **Test via proxy:** `gcloud run services proxy osvauco-agent --region us-central1 --project propane-will-491900-m5 --port 8181`
- **ALDRI** `--audiences`-flag i smoke-tests
- **Smoke-test:** peker på `/health`
- **Curl mot prod:** alltid identity token — `TOKEN=$(gcloud auth print-identity-token)`
- **Ingen tredjepartsverktøy:** Cursor, Copilot og lignende skal IKKE brukes. Alt eies og kjøres i eget GCP/Gitea.
- **Primær Git:** `http://34.59.131.162:3000/chris/OSVauco` — GitHub er IKKJE lenger i bruk.
- **Git remote på VM:** `http://chris:<TOKEN>@34.59.131.162:3000/chris/OSVauco.git`
---
## ✅ Fullført i dag (2026-06-18) — IAP Auth fix for opax-mcp
| Oppgave | Status |
|---------|--------|
| Identifisert rotårsak: feil IAP audience i identity token-kall | ✅ |
| Lagt til `roles/iap.httpsResourceAccessor` for `jason-vauger` SA | ✅ |
| Oppdatert `opax-mcp/server.py` — ny env var `OPAX_IAP_CLIENT_ID` som audience | ✅ |
| Lagt til `OPAX_IAP_CLIENT_ID` env var i Cloud Run (revisjon 00019 — feil navn `IAP_CLIENT_ID`) | ⚠️ |
| Rettet env var navn til `OPAX_IAP_CLIENT_ID` i Cloud Run — revisjon 00020 deployed | ✅ |
| Revisjon `opax-mcp-00020-w6j` aktiv med 100% trafikk | ✅ |
---
## ✅ Fullført tidligere (2026-06-15)
| Oppgave | Status |
|---------|--------|
| `agents/tools/opax_mcp_client.py` — REST-klient alle 25 tools | ✅ |
| `agents/tools/mcp_tools.py` — X-MCP-Secret fix | ✅ |
| Jason deployet til Vertex AI Agent Engine | ✅ |
| Jason svarer på norsk og kallar tools automatisk | ✅ |
| Gitea installert på VM (`34.59.131.162:3000`) | ✅ |
| Gitea kjøyrer som systemd-teneste (overlever reboot) | ✅ |
| Mirror-repo sletta og erstatta med vanleg repo | ✅ |
| **2867 commits pusha frå GitHub → Gitea** | ✅ |
| Gitea API-tokens i Secret Manager | ✅ |
| **GitHub fasa ut — Gitea er no primær** | ✅ |
---
## 🖥 Systemstatus
| Komponent | URL / Referanse | Status |
|-----------|-----------------|--------|
| osvauco-agent (Cloud Run) | https://osvauco-agent-zjbgp3prqg-uc.a.run.app | ✅ Live |
| opax-mcp (Cloud Run) | https://opax-mcp-357036551735.us-central1.run.app | ✅ Live (rev 00020) |
| opax frontend (IAP LB) | https://opax.vauco.no | ✅ Live |
| Jason (Vertex AI Agent) | Agent Engine, us-central1 | ✅ Live |
| Gitea (self-hosted) | http://34.59.131.162:3000 | ✅ Live |
| GitHub (legacy) | https://github.com/vauco-saas/OSVauco | ⚠️ Fasa ut |
---
## 🔑 Credentials
- **Gitea login:** `chris` / se Secret Manager
- **Gitea API-token:** Secret Manager → `gitea-api-token`
- **MCP-Secret:** Secret Manager → `mcp-secret`
- **Prosjekt:** `propane-will-491900-m5`
- **IAP OAuth Client ID (opax backend):** `357036551735-kq8nt71d38hfqlcfb3n52ef7ala4meo.apps.googleusercontent.com`
- **IAP Backend Service path:** `/projects/357036551735/global/backendServices/<navn>` (satt som `OPAX_IAP_CLIENT_ID` i Cloud Run)
---
## 🎯 Gjenstår (prioritert)
1. **KRITISK — Verifiser IAP auth end-to-end** — kjør verifikasjonskommando under og bekreft `HTTP/2 200`
2. Oppdater Gitea-klient-logikk i agenter (fra GitHub API → Gitea API)
3. DNS/TLS for Gitea (`git.vauco.no`)
4. GPU VM-arbeid (planlagt)
5. Smoke-test pipeline for opax-mcp etter IAP-fix
---
## 🚀 Neste sesjon — start her
### 1. Verifiser IAP auth fix (VIKTIGST)
Kjør fra `osvauco-dev-vm`:
```bash
# Hent identity token med korrekt IAP audience
TOKEN=$(curl -s -H "Metadata-Flavor: Google" \
"http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=357036551735-kq8nt71d38hfqlcfb3n52ef7ala4meo.apps.googleusercontent.com&format=full")
# Test mot opax via IAP load balancer
curl -si https://opax.vauco.no/opax/build-status \
-H "Authorization: Bearer $TOKEN" | head -5
```
Forventet: `HTTP/2 200` (tidligere: `HTTP/2 401`)
### 2. Sjekk Jason sin status
```bash
curl -s https://osvauco-agent-zjbgp3prqg-uc.a.run.app/health \
-H "Authorization: Bearer $(gcloud auth print-identity-token)"
```
### 3. Hva som ble fikset i opax-mcp/server.py
**Fil:** `opax-mcp/server.py` — commit `9542106` ("OPAX_IAP_CLIENT_ID som IAP audience i identitytoken")
**Endring linje 17:**
```python
# FØR:
OPAX_BASE_URL = os.environ.get("OPAX_BASE_URL", "https://opax.vauco.no")
# ETTER:
OPAX_BASE_URL = os.environ.get("OPAX_BASE_URL", "https://opax.vauco.no")
OPAX_IAP_CLIENT_ID = os.environ.get("OPAX_IAP_CLIENT_ID", "")
```
**Endring linje 37 (`_opax_identity_token`):**
```python
# FØR:
f"...identity?audience={OPAX_BASE_URL}&format=full"
# ETTER:
f"...identity?audience={OPAX_IAP_CLIENT_ID or OPAX_BASE_URL}&format=full"
```
**Cloud Run env vars på opax-mcp (aktive i rev 00020):**
| Navn | Verdi |
|------|-------|
| `OPAX_BASE_URL` | `https://opax.vauco.no` |
| `OPAX_IAP_CLIENT_ID` | `/projects/357036551735/global/backendServices/...` |
| `MCP_SECRET` | (fra Secret Manager) |
| `GOOGLE_CLOUD_PROJECT` | `propane-will-491900-m5` |
---
## 🏗 Arkitektur
```
Bruker
└─► Jason (Vertex AI Agent Engine, Gemini 2.5 Pro)
└─► osvauco-agent (Cloud Run)
└─► opax-mcp (Cloud Run)
└─► [IAP] opax.vauco.no
└─► OPAX backend (GCP)
```
**Auth-flyt for opax-mcp → opax.vauco.no:**
```
opax-mcp container
→ GCE Metadata Service
→ identity token med audience = IAP_CLIENT_ID
→ Authorization: Bearer <token>
→ IAP validerer token
→ Request videresendt til OPAX backend
```