18 KiB
HANDOFF — Vauco OS
Sist oppdatert: 2026-06-29 20:42 CEST Skrevet av: Perplexity (for Chris Christiansen) Status: Fase D — VM oppgradert, Gitea som primær, Ollama neste
Gitea + OPAX-MCP status (2026-07-07)
- Gitea er migrert til CPU-VM
gitea-cpu-vmog svarer påhttp://34.67.252.59:3000og/api/v1/version. - OSVauco-repoet på dev-VM har remotes:
origin+gitea:http://34.67.252.59:3000/chris/OSVauco.git.
- Alle tidligere hardkodede Gitea-IP-er er oppdatert til CPU-VM:
opax-mcp/server.py(GITEA_URLdefault),emma/emma_gitea.py(Emma-klient),.gemini/GEMINI.md(PRIMARY_GIT, testkommandoer),dev-start.sh(GITEA_REMOTE).
- Ny
opax-mcp/gitea_handler.pyer lagt til og brukerGITEA_URL/GITEA_TOKENfra env for Gitea-API-kall. - Neste steg (ikke utført ennå):
- Verifisere
GITEA_TOKENviagcloud secrets versions access --secret=gitea-token, - kjøre enkel
curlmot"$GITEA_URL/api/v1/version"med token, - deretter koble OPAX-MCP/Gitea-tools til den nye instansen.
- Verifisere
Dette dokumentet er oppdatert til å reflektere at Gitea på CPU-VM er ny primær Git-master; GitHub er fortsatt kun legacy/backup.
⚠️ KRITISKE REGLER — les alltid først
- Hovedapp:
main.pyi rot — IKKJEagents/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 - ALDRI
--audiences-flag medgcloud auth print-identity-token— det er for service accounts, ikke user accounts - IAP identity token: hentes fra GCE metadata server, IKKE fra gcloud CLI
- Primær Git:
http://34.59.131.162:3000/chris/OSVauco— Gitea er nå kilde, GitHub er kun backup. - git remote:
origin= Gitea. GitHub-remote er fjernet. - Emma rapporterer til: Chris Christiansen
chris.christiansen@vauco.no— ingen andre kan gi GO - emma_runner.py finnes IKKE — riktig fil er
emma/emma_run.py - Ollama: IKKE installert ennå — neste oppgave
📈 STRATEGISK FASEPLAN: Gitea som Source of Truth
Status: Planlagt
Arkitekturbeslutning (Låst)
- Gitea: Eneste "Source of Truth" for all kode.
- OPAX-MCP: Eneste eksterne agent-gateway (over HTTPS).
- GitHub: Kun en potensiell passiv backup/mirror, ikke i operativ flyt.
Domene-rollemodell (Låst)
git.vauco.no→ Gitea: Source of truth for kode.opax.vauco.no→ OPAX-MCP: Ekstern agent-gateway.ops.vauco.no→ Parkert: Droppes inntil videre for å redusere kompleksitet.
Fase 1: Stabiliser opax-mcp konfigurasjon
- Beslutning (Låst): Alternativ B er valgt.
opax-mcp.yamlblir eneste autoritative kilde til sannhet for deploy-konfigurasjon. - Filer/Tjenester:
opax-mcp.yaml,cloudbuild.mcp.yaml, Cloud Runopax-mcp. - Verifisering:
gcloud run services describe opax-mcpviser korrekt konfigurasjon.
Fase 1 – TODO:
- Mål: Én autoritativ deploy-kilde for opax-mcp (ikke manuell gcloud run deploy --source .).
- Ferdig-kriterie: Live-opax-mcp bygges fra en definert pipeline som matcher opax-mcp.yaml (samme env-sett og image-vei).
Fase 2: Etablere Gitea-capability bak OPAX-MCP
- Mål: Etablere Gitea-funksjonalitet bak gatewayen, med tydelig skille mellom repo/Gitea og CI/CD.
- Filer/Tjenester:
opax-mcp(som gateway), en ny/dedikert Gitea-agent service. - Verifisering:
curltilopax-mcpruter et Gitea-kall korrekt til backend-tjenesten og gir HTTP 200. - Ferdig-kriterie: Gitea-funksjonalitet er tilgjengelig via
opax-mcp, implementert i en separat tjeneste.
Fase 2 – Gitea Capabilities (Scope):
Repo-lesing (Read-only):
list_repo_files: Viser filer og mapper i en gitt bane.get_file_content: Henter innholdet i en spesifikk fil.list_commits: Viser de siste commits for en branch.list_open_issues: Viser åpne issues i repoet.
Repo-skriving (Operator-only):
update_file: Oppdaterer en eksisterende fil (erstatterpush_file).create_issue: Oppretter en ny issue.create_branch: Oppretter en ny branch.create_commit: Lager en ny commit med endringer.
Fase 2 – Implementasjonsretning (B-prime):
Blocker / Prerequisite for Implementasjon:
GITEA_URLogGITEA_REPOmå legges til som autoritative miljøvariabler iopax-mcp.yamlfør koding av Gitea-handleren starter.- Hardkodede fallback-verdier i
server.pyskal ikke lenger være kilde til sannhet for konfigurasjon. - Logikken i
server.pykan fortsatt bruke mønsteretp.get('repo', GITEA_REPO)for fleksibilitet, men kun etter atGITEA_REPOer deklarativt definert i YAML-filen.
- Modul: Ny fil
opax-mcp/gitea_handler.pyopprettes. Dette blir en intern modul iopax-mcp-servicen, ikke en egen microservice. - Logikk:
opax-mcp/server.pyimporterergitea_handlerog delegerer alle Gitea-relaterte kall (list_repo_files,update_file, etc.) dit. CICD-kall forblir iserver.py. - Autentisering:
- Ekstern (klient → OPAX-MCP): Håndteres av IAP, som i dag. Ingen endring.
- Intern (OPAX-MCP → Gitea):
gitea_handler.pybruker et dedikert API-token til å autentisere seg mot Gitea.
- Secrets:
opax-mcp.yamlmå oppdateres medGITEA_URLog en referanse til secretGITEA_API_TOKEN_SECRET.
Fase 3: Gitea-drevet CI/CD
- Mål: Sikre at Cloud Build utelukkende trigges av
git pushtil Gitea. - Filer/Tjenester: Cloud Build Triggers, Gitea webhooks,
cloudbuild.yaml. - Verifisering: Et
git pushtil Gitea starter en ny kjøring i Cloud Build. - Ferdig-kriterie: CI/CD-pipelinen er 100% Gitea-drevet.
Fase 4: Fjerne GitHub fra daglig drift
- Mål: Fjerne alle operative bindinger til GitHub.
- Filer/Tjenester:
cloudbuild.yaml(GitHub App-kobling), diverse skript. - Verifisering: Ingen skript eller pipelines feiler etter at GitHub-integrasjoner er fjernet.
- Ferdig-kriterie: GitHub er kun en passiv backup.
🎯 NESTE OPPGAVE (prioritert)
1. Installer Ollama på osvauco-dev-vm
curl -fsSL https://ollama.com/install.sh | sh
sudo systemctl enable ollama
sudo sed -i 's|ExecStart=.*|ExecStart=/usr/local/bin/ollama serve|' /etc/systemd/system/ollama.service
sudo sed -i '/ExecStart/a Environment="OLLAMA_HOST=0.0.0.0"' /etc/systemd/system/ollama.service
sudo systemctl daemon-reload && sudo systemctl restart ollama
2. Pull modeller
ollama pull gemma3:4b # 3.3 GB — lett, rask
ollama pull qwen2.5:7b # 4.7 GB — sterkere
3. Test Ollama
curl http://localhost:11434/api/generate -d '{"model":"gemma3:4b","prompt":"hei","stream":false}'
4. Oppdater opax-mcp/server.py (PARKERT/ERSTATTET)
- Note: Erstattet av Fase 1:
opax-mcp.yamlsom autoritativ deploy-path. Kodeendringer tilopax-mcpskal følge den nye, stabile deploy-prosessen.
5. Oppdater boot.sh — Ollama autostart-sjekk
- Legg til seksjon
[ OLLAMA ]iscripts/boot.shsom sjekker at Ollama kjører
6. Emma-gpu-vm — kun ved behov
- Legg til aliaser i
boot.sh:emma-start— starter emma-gpu-vmemma-stop— stopper emma-gpu-vm
🖥 Infrastruktur per 2026-06-29
| Ressurs | Spec | Status | Kostnad/mnd |
|---|---|---|---|
osvauco-dev-vm |
e2-standard-4, 16GB RAM, 50GB SSD, us-central1-b | ✅ Kjører | ~NOK 550 |
emma-gpu-vm |
GPU, europe-west4-a | 💤 Stoppet | ~NOK 30 (kun disk) |
Cloud Run opax-mcp |
MCP-server, us-central1 | ✅ Kjører | ~NOK 50 |
Cloud Run osvauco-agent |
Hovedagent, us-central1 | ✅ Kjører | inkl. over |
| Load Balancer + DNS | opax.vauco.no, 34.98.77.173 | ✅ Kjører | ~NOK 150 |
| TOTAL | ~NOK 780/mnd |
Tidligere kostnad (emma alltid på): NOK 6,000+/mnd
✅ Fullført i dag (2026-06-29)
| Oppgave | Status |
|---|---|
git remote origin endret fra GitHub til Gitea på aktiv dev-VM (osvauco-gpu-vm) |
✅ |
github-remote fjernet (duplikat) |
✅ |
git pull origin main fungerer igjen |
✅ |
boot.sh kjører komplett uten å henge |
✅ |
osvauco-dev-vm oppgradert: e2-medium → e2-standard-4 (16GB RAM) |
✅ |
| Disk utvidet: 20GB → 50GB | ✅ |
emma-gpu-vm stoppet (spare kostnad) |
✅ |
| GitHub avviklet som primær kilde, Gitea er nå master | ✅ |
emma-gpu-vm er klargjort, men ikke tatt i bruk som primær dev-node ennå.
🔑 Credentials
- GitHub PAT: Secret Manager →
GITHUB_PAT(oppdatert 2026-06-25) - MCP-Secret: Secret Manager →
mcp-server-key - Prosjekt:
propane-will-491900-m5 - IAP OAuth Client ID:
357036551735-kq8nt7ld38hfqlcfb3n52ef7tala4meo.apps.googleusercontent.com - VM compute SA:
357036551735-compute@developer.gserviceaccount.com - Ollama (når installert):
http://localhost:11434 - Emma-gpu-vm IP:
34.13.238.133(kun når startet)
🏗 Arkitektur (nå)
Bruker
└─► Jason (Vertex AI Agent Engine, Gemini 2.5 Pro)
└─► osvauco-agent (Cloud Run)
└─► opax-mcp (Cloud Run, 16 tools)
└─► [IAP] opax.vauco.no
osvauco-dev-vm (e2-standard-4, 16GB)
└─► Gemini CLI / Claude CLI (opax/opax2)
└─► Ollama (localhost:11434) ← INSTALLERES NESTE
├─► gemma3:4b (lett)
└─► qwen2.5:7b (sterk)
└─► Emma (lokal agent)
├─► Morfisk minne (SQLite)
├─► Guardrails (5-nivå)
└─► OPAX-klient
emma-gpu-vm (stoppet — start ved behov)
└─► gemma3:27b (tung modell for kunder)
🔑 TILGANGSMODELL OG PROFILER
Beslutning:
- OPAX-MCP er felles ekstern gateway over HTTPS.
- Repo- og driftsverktøy er kun for operator-profiler.
- Familieprofiler og senere sluttbrukerprofiler skal ikke ha generell repo-oversikt eller generiske kodeverktøy.
- Sluttbrukere får kun oppgavebaserte capabilities med avgrenset scope.
- Nye brukere og nye hjem/oppsett skal på sikt kunne opprettes via blueprints/profiler, ikke via full teknisk tilgang.
Operativ tolkning:
- “Ekstern klient” betyr Perplexity, mobilflater, familieassistenter og andre agenter/VM-er som ikke skal ha direkte tilgang til intern repo/serverstruktur.
- Disse klientene skal gå via OPAX-MCP, ikke direkte mot Gitea eller interne driftstjenester.
- Full repo-innsikt, push/write og driftstools forblir for operatornivå.
- Familie- og sluttbrukerflater skal eksponere trygge, oppgavebaserte funksjoner i stedet for generelle utviklerverktøy.
- Arkitekturen skal støtte én kjerneplattform med ulike profiler: Operator, Family og senere kunde/hjem-blueprints.
PROFILMODELL – HVEM FÅR HVA VIA OPAX-MCP
Operator-profil (deg og evt. få betrodde)
- Full tilgang til OPAX-MCP-verktøy for repo, drift og CICD.
- Kan lese og skrive direkte mot Gitea via Gitea-capability (list_commits, get_file, push_file, issues).
- Kan trigge og overvåke Cloud Build / Cloud Run via CICD-capability.
- Kan endre arkitektur, secrets og konfigurasjon når det er nødvendig.
- Krav: sterk auth (MCP_SECRET), bevisst bruk, og commit/push-praksis mot Gitea som sannhet.
Family-profil (familie og nærmeste)
- Ingen generell repo-innsikt og ingen generiske kodeverktøy.
- Tilgang til oppgavebaserte capabilities (f.eks. familieplan, handleliste, meldinger, status) via OPAX-MCP.
- Kan bruke agenter og assistenter som går via OPAX-MCP, men bare innenfor trygge, avgrensede flows.
- Repo-tilgang for family skjer indirekte, som del av oppgaveverktøy, ikke som “fri coding”.
- Krav: enkel, mobilvennlig auth og minimal risiko for å påvirke drift eller arkitektur.
Blueprint-/kunde-/hjem-profiler (senere)
- Malbaserte profiler som beskriver hvilket sett med capabilities og hvilke grenser en ny “hjem” eller kunde får.
- Hver blueprint definerer:
- Hvilke moduler som er aktive (Gitea-lesing, meldinger, økonomi, osv.).
- Hvilke verktøy er synlige i OPAX-MCP for den profilen.
- Hvilke ressurser (repoer, prosjekter, noder) er innenfor scope.
- Opprettelse av nye profiler skal skje som en bevisst handling via blueprint, ikke via ad-hoc åpning av hele systemet.
Tilgangsmatrise – Gitea Capabilities (Fase 2):
- Operator-profil:
- Repo-lesing: Full tilgang.
- Repo-skriving: Full tilgang.
- Family-profil:
- Repo-lesing: Kun tilgang til spesifikke, trygge funksjoner (f.eks.
get_file_contentfor en handleliste). Ingen generell fil-listing. - Repo-skriving: Ingen tilgang.
- Repo-lesing: Kun tilgang til spesifikke, trygge funksjoner (f.eks.
- Blueprint/Kunde/Hjem-profil:
- Repo-lesing: Ingen tilgang som standard. Må aktiveres eksplisitt i blueprint.
- Repo-skriving: Ingen tilgang som standard.
🔁 LÆRINGSSLØYFE FOR AGENTER OG LLM-DRIFT
Mål:
- Systemet skal forbedres mens vi jobber, ikke bare etterpå.
- Høyere kvalitet skal komme fra bedre dataflyt, bedre seleksjon og bedre feedback, ikke bare større modeller.
Prinsipper:
- Good data beats more data: verifiserte hendelser, faktiske diff-er, reelle feil og ekte outcome-logg er mer verdifulle enn mye støy.
- Bad data compounds: feil antakelser, uverifiserte forklaringer og gamle docs som behandles som sannhet skal ikke mates tilbake ukritisk.
- Scaling laws i praksis: mer kontekst, flere steg og mer historikk gir bare bedre resultater hvis datakvaliteten holdes høy.
- Moore’s law betyr at rå compute over tid blir billigere og mer tilgjengelig, men det løser ikke alene kvalitetsproblemet i agent- og LLM-drift.
- Bedre hardware uten bedre datahygiene gir bare raskere produksjon av de samme feilene. Derfor skal systemet utnytte begge lover samtidig: Moore’s law på compute-siden, og scaling laws på modell/data-siden.
- Arbeidslogg, handoff, learnings og verifiseringsoutput skal brukes som kuratert læringsgrunnlag for neste agent og senere trenings-/finetunegrunnlag.
- Hver økt skal produsere små, høyverdige datapunkter: diagnose, plan, apply, verifisering, avvik, beslutning.
- Praktisk betyr det at mer GPU, mer kontekst og større modeller først gir varig verdi når læringsgrunnlaget er kuratert, verifisert og forankret i reell drift.
- Strategien er: bruk økende compute til å forsterke god læring, ikke til å skalere opp støy.
Operativ regel:
- Agenter skal ikke “lære” av egne antakelser alene.
- De skal lære av dokumentert virkelighet: rå output, godkjente diff-er, bekreftede feil, bekreftede fixes og tydelig markerte blockers.
Bruk:
- Dette gjelder Gemini på VM, OPAX-MCP, fremtidige LLM API-agenter og senere intern eval/finetune/RAG.
- Målet er at neste agent starter klokere enn forrige, uten å arve ukritisk støy.
🚚 Gitea-migreringsplan
Diagnose har avdekket at en aktiv Gitea-instans kjører på en midlertidig VM, og at lastbalanserer peker feil. Dette løses ved en kontrollert migrering til en ny, permanent VM, ikke ved å fikse den gamle.
-
Kilde-VM:
osvauco-dev-from-snap(ius-west4-a) -
Kilde-data:
/opt/gitea/data/(inneholderapp.inimedROOT_URL=http://34.59.131.162:3000/) -
Mål-VM: Ny
gitea-cpu-vm(ius-central1-b, som per arkitekturbeslutning) -
Mål-data:
/opt/gitea/data/
Nøkkelsteg ved migrering:
- Data fra kilde-VM må kopieres til mål-VM.
ROOT_URLiapp.inipå mål-VM må oppdateres frahttp://34.59.131.162:3000/tilhttps://git.vauco.no/.- Lastbalanserer-backend (
vauco-os-backend) må pekes til den nyegitea-cpu-vmetter at migreringen er testet og verifisert.
📚 Relevante docs
| Dok | Innhold |
|---|---|
docs/LEARNINGS.md |
Append-only lærdomslogg |
docs/AGENT_RULEBOOK.md |
Boot-protokoll, deploy-regler |
.gemini/GEMINI.md |
Instrukser til Gemini CLI på VM |
scripts/boot.sh |
Session-starter, aliaser, TUI-valg |
scripts/vm-teardown.sh |
Cron 03:00 CEST — stopper dev-vm |
docs/DNS-OG-INFRASTRUKTUR.md |
DNS-kart, IAP-routing |
HANDOFF 2026-07-07: Etablering av autoritativ deploy-pipeline
Mål: Gjøre opax-mcp.yaml til den eneste autoritative sannheten for deploy av opax-mcp-tjenesten, og fjerne den gamle, manuelle deploy-flyten.
1. Analyse og opprydding av opax-mcp.yaml
- Analyse: En "diff" mellom live Cloud Run-tjenesten og
opax-mcp.yamlavdekket avvik. Live hadde gamle GitHub-variabler, mens YAML-filen hadde mange nye (Gitea, Twilio, Gmail). - Beslutning: For å gjøre første autoritative deploy så trygg som mulig, ble det besluttet å midlertidig fjerne Gitea-spesifikke variabler (
GITEA_URL,GITEA_TOKEN) fraopax-mcp.yaml. - Resultat:
opax-mcp.yamler patchet og committet. Den representerer nå en ren basis-konfigurasjon uten aktiv Gitea-runtime.
2. Opprettelse av deklarativ pipeline (cloudbuild.deploy.yaml)
- Analyse: Den eksisterende
cloudbuild.mcp.yamlbrukte en imperativgcloud run deploy-kommando som overstyrte manifest-filen. - Beslutning: En ny, dedikert og deklarativ pipeline-fil ble opprettet.
- Resultat:
cloudbuild.deploy.yamler opprettet og committet. Den bygger et image med unik$BUILD_ID, rendrer en midlertidig kopi avopax-mcp.yamlmed den nye image-taggen, og deployer medgcloud run services replace.
3. Rekonfigurering av Cloud Build Trigger (feilet)
- Mål: Peker den eksisterende Gitea-webhook-triggeren (
gitea-osvauco-main) fra den gamlecloudbuild.mcp.yamltil den nyecloudbuild.deploy.yaml. - Problem:
gcloud-CLIet for å oppdatere/gjenopprette webhook-triggere viste seg å være kantete og feilet gjentatte ganger. - Resultat: Den gamle triggeren ble slettet i et forsøk på å gjenopprette den, men gjenopprettingen feilet. Plattformen er derfor uten en aktiv CI/CD-trigger for
opax-mcpakkurat nå.
4. Strategisk avklaring og neste steg
- Vurdering: Banen med Cloud Build webhooks er teknisk mulig, men føles som en unødvendig kompleks tilpasning. En egen, OPAX-styrt deploy-bro (Modell B) er et bedre langsiktig mål.
- Beslutning: Vi fullfører den enkle webhook-flyten (Modell A) nå for å få en automatisert pipeline raskt, men planlegger for Modell B senere.
Status og neste konkrete handling
| Artefakt | Status |
|---|---|
opax-mcp.yaml |
✅ Klar for autoritativ deploy (midlertidig uten Gitea-vars) |
cloudbuild.deploy.yaml |
✅ Klar og committet |
| Cloud Build Trigger | 🔴 MANGLER. Må gjenopprettes manuelt. |
Neste handling: Gjenopprett gitea-osvauco-main manuelt i Cloud Console med den nye cloudbuild.deploy.yaml som byggefil for å re-aktivere CI/CD-pipelinen.