206 lines
9.1 KiB
Markdown
206 lines
9.1 KiB
Markdown
# HANDOFF — Vauco OS
|
|
|
|
**Sist oppdatert:** 2026-06-09
|
|
**Skrevet av:** Jason Vauger (via Perplexity)
|
|
**Status:** CG3e fullført og deployet. CG4 Recommendations & Anomaly Engine planlagt.
|
|
|
|
---
|
|
|
|
## ✅ CG3e — LLM Token Usage Logger (fullført 2026-06-09)
|
|
|
|
- **`agents/token_logger.py`** — BigQuery-logger for LLM-kall. Skriver til `costguard_dataset.llm_token_usage` med felt: `timestamp`, `agent_name`, `model_name`, `input_tokens`, `output_tokens`, `total_tokens`, `total_cost_usd`.
|
|
- **`/billing/tokens/summary`** — nytt endpoint i `app.py`. Henter aggregert tokenbruk per agent/modell siste 30 dager fra BigQuery.
|
|
- **`static/billing-dashboard.html`** — nytt "⚡ Tokenbruk per agent"-kort som fetcher `/billing/tokens/summary` og viser tabell med agent, modell, tokens og kost i USD.
|
|
- **Cloud Run revisjon `osvauco-agent-00298-6kk`** — deployet og live med alle CG3e-endringer.
|
|
- **Commit:** `d2cf63a` (token usage card) på toppen av `33482ae` (token logger + endpoint).
|
|
|
|
---
|
|
|
|
## 🗺 CG4 — Recommendations & Anomaly Engine (NESTE)
|
|
|
|
### Mål
|
|
En FinOps-lignende modul i CostGuard (inspirert av GCP FinOps Hub / Utilization Insights) som:
|
|
- Viser anbefalinger om hvordan man kan redusere GCP-kostnader
|
|
- Varsler om unormale kostnadsøkninger (anomalier)
|
|
- Viser estimert besparelse per måned i NOK
|
|
|
|
### Backend — to endpoints
|
|
|
|
**`/billing/recommendations`** (NY)
|
|
Logikk (kjøres mot BigQuery-data):
|
|
1. **Sløsing:** Tjenester med `total_cost > 0` men `0` aktivitet siste 7 dager → "Vurder å skru av [tjeneste]"
|
|
2. **Anomali:** Tjeneste der siste 3-dagers snitt er `>= 2x` 30d-snittet → "Unormal spik på [tjeneste]"
|
|
3. **Budsjettoverskridelse:** Prognose > budsjett → "Du er på vei til å overskride budsjettet denne måneden"
|
|
|
|
Response-format:
|
|
```json
|
|
{
|
|
"recommendations": [
|
|
{
|
|
"type": "anomaly" | "waste" | "budget",
|
|
"severity": "high" | "medium" | "low",
|
|
"service": "Cloud Build",
|
|
"message": "Unormal kostnadsøkning på Cloud Build — 3x over normalt",
|
|
"estimated_savings_nok": 42.50
|
|
}
|
|
],
|
|
"total_estimated_savings_nok": 42.50
|
|
}
|
|
```
|
|
|
|
**`/billing/anomalies`** (UTVIDES)
|
|
- Legg til `ratio`, `message` og `severity` i eksisterende response.
|
|
|
|
### Frontend — nytt "Anbefalinger"-kort
|
|
|
|
Plassering: mellom `.bottom-row` og token-usage-kortet i `billing-dashboard.html`.
|
|
|
|
Design (lik GCP FinOps Hub):
|
|
- Header: "💡 Anbefalinger" + "Estimert besparelse: kr X,XX/mnd"
|
|
- Liste med ikoner: 🔴 høy / 🟡 medium / 💚 lav
|
|
- Hver rad: ikon + melding + tjeneste-tag + besparelse
|
|
- Tom state: "✅ Ingen anbefalinger — forbruket ser normalt ut"
|
|
|
|
### Implementasjonsrekkefølge for Jason
|
|
1. Lag `agents/recommendations_engine.py` med de tre analyselogikkene
|
|
2. Legg til `/billing/recommendations`-ruten i `app.py`
|
|
3. Oppdater `/billing/anomalies` med `ratio` + `severity` + `message`
|
|
4. Legg til frontend-kortet i `billing-dashboard.html`
|
|
5. Commit + deploy
|
|
|
|
---
|
|
|
|
## ✅ OQ-15 / CG3 — Status per 2026-06-09
|
|
|
|
- **CG3a — CostGuard-landing / static-cards:** `static/costguard.html` er opprettet i OSVauco, designet i Vauco-stil med Google OAuth-knapp + embed av `/static/billing-dashboard.html`.
|
|
- **CG3 — CostGuard billing-dashboard (GCP-only):** `static/billing-dashboard.html` er ryddet opp slik at:
|
|
- GCP er eneste provider i UI (AWS-UI er parkert til senere).
|
|
- Demo-data brukes kun hvis kjerne-endepunktene (`/billing/summary`, `/billing/live`, `/billing/anomalies`) feiler.
|
|
- History-endepunktet (`/billing/history`) er best-effort og gir ikke lenger rød feilbanner alene.
|
|
- Layout er strammet inn: nøkkeltall øverst, daglig kostnad + tjenestefordeling, samt kostnad per tjeneste + budsjettstatus.
|
|
- Anomali-visning er flyttet til en enkel topplinje-badge (grønn/gul/rød) i stedet for eget kort.
|
|
|
|
**Neste steg på CostGuard-siden:**
|
|
- CG3b / CI1 — koble `static/costguard.html` og `static/billing-dashboard.html` inn i en mer komplett "CostGuard-opplevelse" (inkl. AWS når det er modent), og deretter ta CNAME `costguard.oss.vauco.no` → Cloud Run `osvauco-agent` når Chris sier klart.
|
|
|
|
---
|
|
|
|
## 🌐 Vauco.no — status
|
|
|
|
- `vauco.no` er nå en enkel modul-oversiktsside, uten operatørbeskrivelse av Chris:
|
|
- Om-oss-tekst omtaler Vauco som selskap, ikke daglig leder.
|
|
- Faktafeltet viser kun Selskap, Org.nr, Lokasjon (Oslo, Norge).
|
|
- Kontakt går til `contact@vauco.no`, ikke til personlige adresser.
|
|
- Nettsiden deployes ved å synce `~/vauco-site` til GCS-bucket `gs://vauco-site-public` og eventuelt invalidere CDN-cache på URL-mappen.
|
|
|
|
---
|
|
|
|
## 🧱 Threadstone — status
|
|
|
|
- `threadstone.vauco.no` er en landingsside i lukket pilot:
|
|
- Hero-badge: "Under utvikling · Lukket pilot for interne brukere".
|
|
- Lead-tekst: Tjenesten er i lukket pilot og kun tilgjengelig for interne Vauco-kontoer.
|
|
- Innlogging / kjøp:
|
|
- Google Sign-In aksepterer kun e-poster som slutter på `@vauco.no`.
|
|
- Alle andre domener får tydelig feilmelding om at Threadstone er i lukket pilot.
|
|
- "Kjøp nå"-knapper krever innlogging; uten @vauco.no-konto kommer man ikke til mock-checkout (e-post til Chris).
|
|
- Landingsside + priser er offentlig, men hele appen og bestillingsflyten er i praksis kun for interne.
|
|
|
|
---
|
|
|
|
## 🏗 Hva er dette prosjektet?
|
|
|
|
Se `docs/MASTERPLAN.md` for full sannhet. Kortversjonen:
|
|
|
|
```
|
|
Vauco OS (plattform)
|
|
└── OPAX (kommandosenter + salgsmodul-bygger, Cloud Run us-central1)
|
|
├── CostGuard (Modul #1 — live på costguard.oss.vauco.no)
|
|
├── Threadstone (Modul #2 — Q3 2026)
|
|
└── [Modul #3+]
|
|
```
|
|
|
|
**OPAX = kommandosenter for ALLE prosjekter** (et prosjekt = en klient — samme ting). OPAX bygger, iscenesetter og publiserer prosjekter. OPAX er ikke bundet til noe enkelt prosjekts region.
|
|
|
|
**Branding-konvensjon for prosjekter:**
|
|
| Subdomene | Type |
|
|
|---|---|
|
|
| `<prosjekt>.oss.vauco.no` | Staging / demo |
|
|
| `<prosjekt>.os.vauco.no` | Live produksjon |
|
|
|
|
(Klient kan videresende eget domene, men kanonisk merkevare-label er alltid `*.vauco.no`.)
|
|
|
|
Første betalende produkt: **CostGuard** (GCP-kostnadsanalyse via AI).
|
|
|
|
---
|
|
|
|
## ✅ Hva er faktisk ferdig (ikke spør om dette igjen)
|
|
|
|
| Komponent | Status |
|
|
|---|---|
|
|
| Cloud Run `osvauco-agent` | ✅ Live, `us-central1`, revisjon `00298-6kk` |
|
|
| `opax.vauco.no` (LB + SSL) | ✅ Live, IP `34.98.77.173` |
|
|
| IAP (`@vauco.no` only) | ✅ Aktivert |
|
|
| PR #15 IAP /health-fix | ✅ Merget til main (commit 7a09871) |
|
|
| CI/CD Cloud Build → Cloud Run | ⚠️ IKKE operativt — ingen trigger, siste builds FAILURE. Deploy MANUELT. |
|
|
| RAG corpus `osvauco-corpus` | ✅ Populert, `europe-west1` |
|
|
| OAuth2 (Google) | ✅ I Secret Manager |
|
|
| AI-modell | ✅ `gemini-2.5-pro` via Vertex AI (us-central1) |
|
|
| `costguard.oss.vauco.no` | ✅ Live (Cloudflare Pages) |
|
|
| `static/costguard.html` | ✅ Første versjon live via `osvauco-agent` |
|
|
| `static/billing-dashboard.html` | ✅ GCP-only, CG3e token-kort lagt til |
|
|
| `agents/token_logger.py` | ✅ BigQuery LLM-logger ferdig |
|
|
| `/billing/tokens/summary` | ✅ Endpoint live |
|
|
| `vauco.no` | ✅ Oppdatert, anonymisert og deployet via `gs://vauco-site-public` |
|
|
| `threadstone.vauco.no` | ✅ Landingsside live, satt i lukket pilot m/ @vauco.no-gating |
|
|
|
|
---
|
|
|
|
## 📋 Nøkkelinformasjon
|
|
|
|
| Nøkkel | Verdi |
|
|
|---|---|
|
|
| GCP Project | `propane-will-491900-m5` |
|
|
| Region (OPAX, LÅST) | `us-central1` |
|
|
| Vertex AI endpoint | `us-central1` (kjører `GOOGLE_CLOUD_LOCATION=global` i praksis) |
|
|
| Artifact Registry | `us-central1-docker.pkg.dev/propane-will-491900-m5/osvauco-repo` |
|
|
| Cloud Run service | `osvauco-agent` |
|
|
| Cloud Run URL (direkte) | `https://osvauco-agent-357036551735.us-central1.run.app` |
|
|
| Public URL | `https://opax.vauco.no` |
|
|
| LB IP | `34.98.77.173` |
|
|
| AI-modell | `gemini-2.5-pro` |
|
|
| Repo | `vauco-saas/OSVauco` |
|
|
| Eier / Operatør | Chris Christiansen — `chris.christiansen@vauco.no` |
|
|
| Agent-konto | `jason.vauger@vauco.no` |
|
|
|
|
---
|
|
|
|
## ⚠️ Vanlige feil — ikke gjør disse
|
|
|
|
- **Ikke opprett nye HANDOFF_YYYYMMDD-filer.** Det er kun denne. Overskriv den.
|
|
- **Ikke gjenopplive `VAUCO_OS_ROADMAP.md`.** Den er slettet 2026-05-31. Bruk `ROADMAP.md`.
|
|
- **Ikke bytt til Claude før kvote er bekreftet** av Google Cloud-team + `MODEL APPROVED` fra Chris.
|
|
- **Ikke migrere fra us-central1** — regionen er låst.
|
|
- **Ikke rør IAP, OAuth, eller Secret Manager** uten eksplisitt `DEPLOY GODKJENT` fra Chris.
|
|
- **Ikke opprett nye repos.** Vurder mappe i `OSVauco` først. Krever `REPO APPROVED`.
|
|
- **Ikke hopp over HITL gates** — hver fase avsluttes med et godkjenningssignal.
|
|
- **Ikke oppdater OAuth-klient redirect URIs uten domeneavklaring** — se Issue #16.
|
|
|
|
---
|
|
|
|
## 📁 Viktige filer å lese (i denne rekkefølgen)
|
|
|
|
1. `docs/MASTERPLAN.md` — autoritativ sannhet
|
|
2. `docs/ROADMAP.md` — hva som skjer akkurat nå
|
|
3. `docs/HANDOFF.md` — denne filen
|
|
4. `docs/AGENT_RULEBOOK.md` — regler for hvordan agenter oppfører seg
|
|
5. `agents/jason-vauger.md` — Jason Vauger agentprofil
|
|
6. `AGENTS.md` — oversikt over alle agenter i ML-laget
|
|
7. `.gemini/GEMINI.md` — locked definitions og boot-protokoll
|
|
8. `docs/ARCHITECTURE.md` — teknisk arkitektur
|
|
9. `docs/OSVAUCO_OPAX_SESSION_LOG.md` — append-only sesjonshistorikk
|
|
|
|
---
|
|
|
|
*Vauco AS · propane-will-491900-m5 · `us-central1` · Powered by Jason, Crafted by Vauco ·*
|