Files
iobj/README.md

128 lines
4.3 KiB
Markdown
Raw Permalink Normal View History

2026-07-13 19:20:55 +02:00
# 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 <IOBJ_API_TOKEN>`
(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`). `q` matcher fritekst i `title`, `body` og `payload`. |
2026-07-13 19:20:55 +02:00
| 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:<tag> .
docker push registry.i80.dk/gitea/iobj:<tag>
nomad job run -var="image_tag=<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) |