v0.9.5
Felix v0.9.5
A maintenance release focused on gateway bug fixes, larger test coverage, and codebase cleanup.
Bug fixes
- Settings save errors are now readable. Failed config saves (invalid JSON or validation errors) returned a malformed JSON body, so the UI showed a generic failure instead of the real reason. Error responses are now properly encoded — you see the actual problem.
compaction.messageCap: 0now disables the cap as documented. It was silently backfilled to the default (200), making the message-count trigger impossible to turn off. Setting it to0now correctly leaves only the token threshold active, and the setting survives a save/reload round-trip.- The
/uidashboard escapes config values. Agent names or paths containing characters like<no longer break the page (and can't inject markup). - The Jobs page connects over the right WebSocket. It previously hardcoded
ws://localhost, so it failed on non-loopback binds or behind TLS. It now derives the scheme and host from the page origin (matching the chat UI).
Internal quality
- Added test coverage to previously-untested correctness-critical code: the compaction manager wiring (0% → 95%) and the agent-side prompt composition and adapters (11% → 73%), plus new gateway handler tests.
- Extracted the large embedded chat and settings web UIs from their Go source files into standalone HTML assets (served via
go:embed).chat.goshrank from ~4,900 to ~30 lines andsettings.gofrom ~3,000 to ~420, with byte-for-byte identical output — removing a class of string-escaping pitfalls and making the frontend editable with normal tooling.
Dependencies
- Pinned
cortexto the taggedv0.4.0release (same code, replacing a pseudo-version).