Changes for version 0.001 - 2026-03-15
- Make usage storage layer pluggable: `record_usage` delegates to `_store_usage_event` and `usage_report` delegates to `_query_usage_report`
- Add `store_usage_event` and `query_usage_report` constructor parameters for callback-based usage backend override (no subclassing required)
- Add `jsonlog` usage backend: one JSON file per event in a directory (recommended, no DBI needed) or JSON-lines append to a single file
- Make DBI and DBD::SQLite optional (moved to `recommends` in cpanfile); usage tracking is gracefully disabled when no backend is configured
- Initial release extracted from Knarr as `Langertha::Skeid`
- Add Skeid control-plane + proxy with OpenAI, Anthropic, and Ollama routes
- Add weighted node routing with health checks, inflight/max_conns admission, and configurable wait timeout/poll behavior (`429` after timeout)
- Add metrics/cost helpers via Knarr Input/Output/Metrics APIs
- Add usage store support for SQLite/PostgreSQL, automatic schema setup from `share/sql`, and usage APIs (`usage.record`, `usage.report`)
- Add `skeid usage` CLI subcommand for usage/cost reporting
- Add admin routes with bearer-token protection (`/skeid/*`), hidden when no admin key is configured
- Add engine ID mapping based on Langertha engine registry (`Langertha->available_engine_ids`) and reject legacy aliases
- Make proxy request handling non-blocking with Mojolicious async upstream calls
- Add Avatar smoke benchmark examples: `examples/avatar-skeid-single.yaml`, `examples/avatar-skeid-2nodes.yaml`, and `examples/skeid-parallel-smoke.pl`
- Add one-box flush helper `examples/skeid-onebox-flush.sh` to prepare temp config, start Skeid, run smoke, and cleanup in one command
Documentation
Skeid control-plane CLI and proxy launcher
Modules
Dynamic routing control-plane for multi-node LLM serving with normalized metrics and cost accounting
Multi-format LLM proxy (OpenAI, Anthropic, Ollama) powered by Langertha::Skeid routing