commit 29d055754c3dc61a736a22c561ee4bedd2bf17cd Author: Henrik Jess Nielsen Date: Mon Jul 13 19:20:55 2026 +0200 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..253b080 --- /dev/null +++ b/README.md @@ -0,0 +1,127 @@ +# iObj + +Personlig JSON-objekt / "hukommelsesbank" service. Gemmer og gør søgbare små +strukturerede memory-objekter — git-commit-noter, AI-recap, mødereferater, +1:1-noter, standups m.m. — på tværs af maskiner, uden at kræve en databaseserver. + +## Hvorfor + +I dag ligger denne slags data spredt i flade filer (`~/.githistory`, +`~/.claude_recap.md`, `~/copilot-sessions/*/sessions`), lokalt på én maskine og +uden fælles skema eller søgning. iObj samler det i én lille service, der kan +tilgås fra enhver maskine. + +**Bemærk:** Denne version af iObj er selve servicen. Integration af +`git-today` / `resume_copilot` / recap-flowet til at skrive ind i iObj er en +separat, senere opgave. + +## Datamodel + +Hvert objekt har: + +- `id` — uuid +- `type` — `git_commit` | `session_log` | `recap` | `meeting_note` | `oneonone` | `standup` | `custom` +- `created_at` — hvornår objektet blev gemt +- `object_date` — datoen objektet handler om (bruges til sharding + datofiltrering) +- `project` — valgfrit projektnavn +- `tags` — liste af fritekst-tags +- `title` / `body` — kort titel + fritekst/markdown-indhold +- `payload` — vilkårligt ekstra JSON (fx `{"sha": "...", "participants": [...]}`) +- `source_machine` / `source_tool` — hvor og hvorfra objektet blev skrevet + +Data gemmes i **TinyDB**, ét JSON-fil-shard pr. måned (`data/2026-07.json`) — +ingen database-server at drifte, og filstørrelser holdes nede over tid. + +## Kør lokalt + +```bash +python3 -m venv .venv && source .venv/bin/activate +pip install -r requirements.txt -r requirements-dev.txt + +IOBJ_DATA_DIR=./data IOBJ_API_TOKEN=dev-token \ + uvicorn iobj.app:app --reload --port 8000 +``` + +Kør tests: + +```bash +pytest -q +``` + +## API + +Alle `/objects*` endpoints kræver `Authorization: Bearer ` +(auth er slået fra hvis `IOBJ_API_TOKEN` ikke er sat — kun til lokal dev). + +| Metode | Path | Beskrivelse | +|---|---|---| +| GET | `/health` | Liveness check | +| POST | `/objects` | Opret objekt | +| GET | `/objects` | Søg (query params: `type`, `project`, `tag`, `date_from`, `date_to`, `q`, `limit`, `offset`) | +| GET | `/objects/date/{date}` | Alle objekter for én dato | +| GET | `/objects/{id}` | Hent ét objekt | +| PATCH | `/objects/{id}` | Opdater (delvist) | +| DELETE | `/objects/{id}` | Slet | + +### Eksempler + +```bash +TOKEN=dev-token +BASE=http://localhost:8000 + +# Opret en recap +curl -s -X POST "$BASE/objects" -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "type": "recap", + "object_date": "2026-07-13", + "project": "NordBytes", + "tags": ["backend"], + "title": "BDD test patterns", + "body": "Implementerede Behave step definitions for invoice-flowet.", + "source_tool": "manual" + }' + +# Opret en git-commit-note +curl -s -X POST "$BASE/objects" -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "type": "git_commit", + "object_date": "2026-07-13", + "project": "DevOpsMCP", + "title": "Fix Redis TTL bug", + "payload": {"sha": "abc123", "author": "Henrik Jess Nielsen"} + }' + +# Søg alt for NordBytes i juli, der nævner "BDD" +curl -s "$BASE/objects?project=NordBytes&date_from=2026-07-01&date_to=2026-07-31&q=BDD" \ + -H "Authorization: Bearer $TOKEN" + +# Alt for én bestemt dag (afløser for git-today's dags-visning) +curl -s "$BASE/objects/date/2026-07-13" -H "Authorization: Bearer $TOKEN" +``` + +## Deploy + +- `Dockerfile` — python:3.11-slim, ikke-root bruger, health check på `/health` +- `iobj.nomad` — Nomad job (samme mønster som `devops-mcp.nomad`), deployes på + `autobox.i80.dk`, exposed via Traefik som `https://iobj.i80.dk` +- Data persisteres via Nomad host-volume `iobj-data` → `/app/data` +- `IOBJ_API_TOKEN` sættes via Consul KV (`iobj/api/token`), samme mønster som + DevOpsMCP's secrets-templates + +```bash +docker build -t registry.i80.dk/gitea/iobj: . +docker push registry.i80.dk/gitea/iobj: +nomad job run -var="image_tag=" iobj.nomad +curl -sf https://iobj.i80.dk/health +``` + +## Miljøvariabler + +| Variabel | Default | Beskrivelse | +|---|---|---| +| `IOBJ_DATA_DIR` | `data` | Sti til mappen med TinyDB-shards | +| `IOBJ_API_TOKEN` | (unset) | Bearer-token for alle `/objects*` kald. Auth deaktiveret hvis unset — sæt altid i netværksdeploy | +| `IOBJ_LOG_LEVEL` | `INFO` | Log-niveau | +| `PORT` | `8000` | Lytteport (styres af Nomad i produktion) |