Reviewed-on: #15
Wiki
Web interface and agent API for the Notes vault (k.renner/notes), running in the homelab
cluster. Design: kubernetes/PROPOSAL-wiki-web-api.md in the homelab repository.
Layout
src/Wiki.Core domain types, ports, vault parsing — references nothing
src/Wiki.Application use cases (sync, rank, status, …) — depends on Core only
src/Wiki.Adapters.* one project per external thing, each references Core only
src/Wiki.Host ASP.NET Core API + MudBlazor UI, composition root
test/Wiki.Contracts one abstract suite per port; every adapter passes its suite
Adapters are selected in appsettings.json under Wiki:; secrets come from environment
variables (Wiki__NoteStore__Gitea__Token, Wiki__Webhook__Secret, Auth__ApiKeys__<name>,
Wiki__Judges__Models__<name>__ApiKey, Wiki__AnswerModels__Models__<name>__ApiKey). Each
answer-model entry also provides the fact drafter of the same name (/facts).
Humans sign in with OpenID Connect (public client, PKCE): Auth__Oidc__Authority and
Auth__Oidc__ClientId are required; the redirect URI is https://<request host>/signin-oidc. Machines send X-Api-Key, or BasicAuth
checked against the htpasswd lines in Auth__Basic__UsersPath, a file or a mounted Secret directory
(bcrypt, apr1 or SHA1; read API only). Only /health, /ready and the HMAC-signed /webhook
answer without either.
Run
dotnet test Wiki.slnx
dotnet run --project src/Wiki.Host
Endpoints: /health (liveness), /ready (readiness), /api/v1/status, POST /rank,
POST /webhook, POST /api/v1/ask (rank + judge), POST /api/v1/questions (ask + answer
model, save: true writes output/), POST /api/v1/facts (raw source, API key),
GET /api/v1/{notes,tags,raw,reports}, POST /api/v1/lab/eval (rank evaluation over labelled
output/ questions, API key).