v0.2.2 - 2026-05-08
Release Notes
v0.2.2 - 2026-05-08
New features
Images in wiki pages
PDF documents now extract and persist images during ingestion. Images are embedded inline in wiki pages and rendered in the wiki viewer. The vision model (if configured) analyzes each image with page-level context to produce more accurate captions.
- New
SourceImagemodel stores image metadata and MinIO keys per source wiki_imagesrouter resolves image references to presigned URLs at read time- New
WikiImagefrontend component with lazy loading and fallback state useImageResolverhook fetches presigned URLs on demand
Embedding model catalog
Embedding models are now managed through a structured catalog instead of free-form text input. This eliminates two classes of production bugs: misspelled model IDs and dimension mismatches between stored vectors and the configured model.
- Supported models:
google/gemini-embedding-001,google/gemini-embedding-2,openai/text-embedding-3-small,openai/text-embedding-3-large - New Embedding section in Settings with model picker, cost info, and re-embedding progress tracking
- Background re-embedding job with per-page progress, cancellation support, and status polling
- Multi-dimensional embedding tables:
wiki_page_embeddings_768,_1024,_1536,_3072 - Admin can switch embedding models and trigger a full re-embed from the UI
Improvements
- Vision captioning quality - captioning prompt now includes surrounding page text as context, producing more specific and accurate image descriptions
- Image storage - images are stored with stable UUIDs and referenced from wiki
content_mdby ID rather than injected as inline captions; this makes wiki content portable across MinIO key changes - Wiki compiler - improved handling of image markers in the compilation pipeline
Docker & deployment
- Self-contained Docker Compose - postgres, redis, and MinIO are now included in
docker-compose.yml; no external infrastructure needed MINIO_PUBLIC_ENDPOINT- new env var for presigned URL hostname. Must be set to a browser-accessible address (localhost:9000for local Docker,<server-ip>:9000for remote). Without it, presigned image URLs resolve to the internal Docker hostname and fail in the browserPOSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DB- postgres credentials moved from hardcoded values indocker-compose.ymlto.env.docker--env-file .env.docker- must now be passed explicitly todocker composecommands to avoid credential mismatch between the local.envand the Docker environment- Service name hostnames -
MINIO_ENDPOINT,REDIS_HOST, andDATABASE_URLnow use Docker Compose service names (minio,redis,postgres) instead of container names with underscores, which causedInvalidRequest (invalid hostname)errors in the MinIO SDK - Server deployment guide added to SETUP.md, covering Linux server setup, firewall config, and optional nginx + HTTPS
Bug fixes
- Fixed MinIO presigned URLs returning 403 when
MINIO_PUBLIC_ENDPOINTdiffered fromMINIO_ENDPOINT- the presign client now uses a dedicated Minio instance configured with the public endpoint and pre-seeds the bucket region to avoid internal connectivity checks - Fixed
SignatureDoesNotMatchon fresh Docker Compose deployments caused by Docker loading.env(local dev config) for variable substitution instead of.env.docker - Fixed
Invalid Request (invalid hostname)in MinIO SDK caused by underscores in container names
Database migrations
015_multi_dim_embeddings- adds per-dimension embedding tables and anembedding_jobstracking table016_source_images- addssource_imagestable for persisted image metadata
Run after upgrading:
docker exec arkon_api alembic upgrade headv0.2.0 - 2026-05-06
- MCP server finalized with full tool set
- Wiki versioning and draft/approval workflow
- AI Skills system with department scoping
- Workspace-scoped wiki and document management
- Audit logging
- RBAC v2 with custom roles and granular permissions