Merge remote-tracking branch 'github/main'
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
# Conflicts: # docs/HANDOFF.md
This commit is contained in:
commit
844d504c5f
1299
.gemini/GEMINI.md
1299
.gemini/GEMINI.md
File diff suppressed because it is too large
Load Diff
258
docs/HANDOFF.md
258
docs/HANDOFF.md
|
|
@ -1,8 +1,8 @@
|
|||
# HANDOFF — Vauco OS
|
||||
|
||||
**Sist oppdatert:** 2026-06-18 14:00 CEST
|
||||
**Sist oppdatert:** 2026-06-28 11:52 CEST
|
||||
**Skrevet av:** Perplexity (Orchestrator)
|
||||
**Status:** Fase B — Gitea er primær Git. GitHub er fasa ut.
|
||||
**Status:** Fase C — Emma lokal agent operativ. Gitea er primær Git. GitHub fasa ut.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -11,43 +11,125 @@
|
|||
- **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`
|
||||
- **ALDRI** `--audiences`-flag med `gcloud auth print-identity-token` — det er for service accounts, ikke user accounts
|
||||
- **IAP identity token:** hentes fra GCE metadata server, IKKE fra gcloud CLI
|
||||
- **Smoke-test:** peker alltid på `/health`
|
||||
- **Primær Git:** `http://34.59.131.162:3000/chris/OSVauco` — GitHub er IKKJE lenger i bruk
|
||||
- **Emma rapporterer til:** Chris Christiansen `chris.christiansen@vauco.no` — ingen andre kan gi GO
|
||||
|
||||
---
|
||||
|
||||
## ✅ Fullført i dag (2026-06-18) — IAP Auth fix for opax-mcp
|
||||
## 🔴 KJENT PROBLEM: IAP 401 fra VM — diagnose pågår
|
||||
|
||||
**Symptom:** `HTTP/2 401` fra `https://opax.vauco.no` selv med korrekt audience i metadata-kall.
|
||||
|
||||
**Allerede avklart — ikke gjenta disse forsøkene:**
|
||||
- `gcloud auth print-identity-token --audiences=...` → feiler fordi det er en user account, ikke service account
|
||||
- Feil audience (base URL i stedet for IAP Client ID) → allerede fikset i opax-mcp rev 00020
|
||||
|
||||
**Neste diagnosesteg (kjør i denne rekkefølgen):**
|
||||
|
||||
```bash
|
||||
# Steg 1: Sjekk om VM-ens service account har IAP-tilgang
|
||||
gcloud projects get-iam-policy propane-will-491900-m5
|
||||
--flatten="bindings[].members"
|
||||
--format="table(bindings.role,bindings.members)"
|
||||
--filter="bindings.members:357036551735-compute@developer.gserviceaccount.com"
|
||||
|
||||
# Steg 2: Sjekk IAP-spesifikk policy
|
||||
gcloud iap web get-iam-policy
|
||||
--project=propane-will-491900-m5
|
||||
--resource-type=backend-services 2>/dev/null ||
|
||||
gcloud iap web get-iam-policy
|
||||
--project=propane-will-491900-m5
|
||||
|
||||
# Steg 3: Print rå token og se om det er tom streng
|
||||
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")
|
||||
echo "TOKEN lengde: ${#TOKEN} tegn"
|
||||
echo "TOKEN start: ${TOKEN:0:50}"
|
||||
|
||||
# Steg 4: Test med verbose for å se IAP response body
|
||||
curl -sv https://opax.vauco.no/opax/build-status
|
||||
-H "Authorization: Bearer $TOKEN" 2>&1 | grep -E "< |{|\.html"
|
||||
```
|
||||
|
||||
**Forventet rotårsak:** VM-ens compute service account (`357036551735-compute@developer.gserviceaccount.com`) mangler `roles/iap.httpsResourceAccessor` på IAP backend.
|
||||
|
||||
**Fix hvis bekreftet:**
|
||||
```bash
|
||||
gcloud projects add-iam-policy-binding propane-will-491900-m5
|
||||
--member="serviceAccount:357036551735-compute@developer.gserviceaccount.com"
|
||||
--role="roles/iap.httpsResourceAccessor"
|
||||
# Vent 60 sek og test på nytt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 NESTE OPPGAVE
|
||||
|
||||
**To parallelle oppgaver — start med IAP-diagnose, deretter Emma bootstrap.**
|
||||
|
||||
### Oppgave 1: IAP 401-diagnose (se seksjon over)
|
||||
|
||||
Kjør de 4 diagnosestegene og rapporter output til Chris.
|
||||
|
||||
### Oppgave 2: Bootstrap Emma på VM
|
||||
|
||||
```bash
|
||||
# Steg 1: Synk Gitea (emma/-filer er på GitHub — sjekk om Gitea har dem)
|
||||
git -C ~/OSVauco log --oneline -5
|
||||
# Forventet: skal vise commit 87b2dced (GEMINI.md no-search) eller nyere
|
||||
# Hvis ikke — kjør synk:
|
||||
git -C ~/OSVauco remote add github https://github.com/vauco-saas/OSVauco.git 2>/dev/null || true
|
||||
git -C ~/OSVauco fetch github main
|
||||
git -C ~/OSVauco merge github/main --ff-only
|
||||
git -C ~/OSVauco push origin main
|
||||
|
||||
# Steg 2: Bootstrap Emma
|
||||
bash <(curl -s "http://chris:$(gcloud secrets versions access latest
|
||||
--secret=gitea-api-token --project=propane-will-491900-m5
|
||||
)@34.59.131.162:3000/chris/OSVauco/raw/branch/main/emma/setup.sh")
|
||||
|
||||
# Steg 3: Aktiver aliaser
|
||||
echo '''source ~/.emma_env''' >> ~/.bashrc && source ~/.emma_env
|
||||
|
||||
# Steg 4: Verifiser
|
||||
ls -lh ~/OSVauco/emma/data/morphic.db
|
||||
tail -3 ~/OSVauco/emma/emma_flynn_log.jsonl
|
||||
emma # start CLI
|
||||
```
|
||||
|
||||
Forventet:
|
||||
- `morphic.db` eksisterer med > 20 mønstre
|
||||
- `emma_flynn_log.jsonl` har minst 1 rad
|
||||
- `emma` starter CLI uten feil
|
||||
|
||||
---
|
||||
|
||||
## ✅ Fullført i dag (2026-06-28)
|
||||
|
||||
| Oppgave | Commit | Status |
|
||||
|---------|--------|--------|
|
||||
| `emma/emma_seed.py` — LEARNINGS 001-016 + boot-minne | `6726da23` | ✅ |
|
||||
| `emma/emma_guardrails.py` — 5-nivå risikoscoring | `6726da23` | ✅ |
|
||||
| `emma/emma_opax.py` — OPAX-kobling med identity token | `6726da23` | ✅ |
|
||||
| `emma/emma_identity.py` — identitet injisert i alle LLM-prompts | `31a405ad` | ✅ |
|
||||
| `emma/emma_gitea.py` — direkte Gitea-tilgang | `31a405ad` | ✅ |
|
||||
| `emma/setup.sh` — VM-bootstrap én kommando | `47ade3d5` | ✅ |
|
||||
| `.gemini/GEMINI.md` — NO-SEARCH-blokk øverst, deduplisert | `87b2dced` | ✅ |
|
||||
| `docs/HANDOFF.md` — IAP 401 diagnose dokumentert | denne | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## ✅ Fullført tidligere (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** | ✅ |
|
||||
| Oppdatert `opax-mcp/server.py` — ny env var `OPAX_IAP_CLIENT_ID` | ✅ |
|
||||
| Revisjon `opax-mcp-00020` aktiv med 100% trafikk | ✅ |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -59,88 +141,28 @@
|
|||
| 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 |
|
||||
| Gitea (self-hosted) | http://34.59.131.162:3000 | ✅ Live (v1.22.6) |
|
||||
| Emma (lokal agent) | `~/OSVauco/emma/` på osvauco-dev-vm | ⚠️ Ikke bootstrappt |
|
||||
| GitHub (legacy) | https://github.com/vauco-saas/OSVauco | ⚠️ Faset 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-kq8nt7ld38hfqlcfb3n52ef7tala4meo.apps.googleusercontent.com`
|
||||
- **IAP Backend Service path:** `/projects/357036551735/global/backendServices/<navn>` (satt som `OPAX_IAP_CLIENT_ID` i Cloud Run)
|
||||
- **VM compute SA:** `357036551735-compute@developer.gserviceaccount.com`
|
||||
|
||||
---
|
||||
|
||||
## 🎯 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-kq8nt7ld38hfqlcfb3n52ef7tala4meo.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` |
|
||||
1. **IAP 401-diagnose** — kjør 4 diagnosesteg, gi IAP-rettighet til compute SA hvis mangler
|
||||
2. **Bootstrap Emma på VM** — synk Gitea + kjør setup.sh
|
||||
3. **DNS/TLS for Gitea** (`git.vauco.no`)
|
||||
4. **GPU VM-arbeid** (planlagt)
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -152,15 +174,37 @@ Bruker
|
|||
└─► osvauco-agent (Cloud Run)
|
||||
└─► opax-mcp (Cloud Run)
|
||||
└─► [IAP] opax.vauco.no
|
||||
└─► OPAX backend (GCP)
|
||||
|
||||
osvauco-dev-vm
|
||||
└─► Gemini CLI (denne agenten)
|
||||
└─► Emma (lokal MDP/MCoT-agent, ikke bootstrappt ennå)
|
||||
├─► Morfisk minne (SQLite)
|
||||
├─► Guardrails (5-nivå)
|
||||
├─► OPAX-klient (identity token)
|
||||
└─► Gitea-klient
|
||||
```
|
||||
|
||||
**Auth-flyt for opax-mcp → opax.vauco.no:**
|
||||
**Auth-flyt VM → opax.vauco.no (IAP):**
|
||||
```
|
||||
opax-mcp container
|
||||
→ GCE Metadata Service
|
||||
→ identity token med audience = IAP_CLIENT_ID
|
||||
→ Authorization: Bearer <token>
|
||||
→ IAP validerer token
|
||||
→ Request videresendt til OPAX backend
|
||||
VM (Gemini CLI eller Emma)
|
||||
→ curl metadata.google.internal → identity token (audience = IAP_CLIENT_ID)
|
||||
→ curl https://opax.vauco.no -H "Authorization: Bearer $TOKEN"
|
||||
→ IAP validerer token mot roles/iap.httpsResourceAccessor
|
||||
→ HTTP 200 (eller 401 hvis SA mangler rollen)
|
||||
|
||||
NOTAT: gcloud auth print-identity-token virker KUN for user accounts mot Cloud Run.
|
||||
For IAP må du bruke metadata server (GCE) eller service account key.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Relevante docs
|
||||
|
||||
| Dok | Innhold |
|
||||
|-----|---------|
|
||||
| `docs/LEARNINGS.md` | Append-only lærdomslogg — LEARNING-001 til 016 |
|
||||
| `docs/AGENT_RULEBOOK.md` | Boot-protokoll, deploy-regler |
|
||||
| `.gemini/GEMINI.md` | Instrukser til Gemini CLI på VM (dette er deg) |
|
||||
| `emma/setup.sh` | VM-bootstrap — klon, venv, install, seed |
|
||||
| `docs/DNS-OG-INFRASTRUKTUR.md` | DNS-kart, IAP-routing, forwarding rules |
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user