Go to file
Henrik Jess Nielsen dc45e825c9
All checks were successful
Build and Deploy iObj / build-image (push) Successful in 36s
Extend free-text search (q) to also match payload
Cross-shard search already worked transparently across all monthly
JSON files. This adds payload content (e.g. commit SHA, meeting
attendees, structured data) to the q= substring match, alongside
title and body.
2026-07-13 21:57:45 +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
  • typegit_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

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:

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.
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

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
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)
Description
No description provided
Readme 49 KiB
Languages
Python 82.9%
HCL 12.9%
Dockerfile 4.2%