# Changelog All notable changes to **EverOS** are documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [1.1.2] - 2026-07-07 ### Fixed - **Agent-track search broken by `deprecated_by IS NULL` filter** — `compile_filters()` unconditionally appended a `deprecated_by IS NULL` clause to every LanceDB query, but only `episode` and `atomic_fact` tables have this column. Agent-track search (`agent_case`, `agent_skill`) failed on any method. The clause is now conditional on `owner_type == "user"`. ## [1.1.1] - 2026-07-06 ### Added - **DashScope rerank provider** — Aliyun Bailian `gte-rerank-v2` adapter; configure with `rerank.provider = "dashscope"` in `everos.toml`. - **`everos demo` TUI command** — Textual-based interactive CLI demo for showcasing EverOS core features. - **Benchmark runner** — full LoCoMo benchmark suite: `benchmarks/run.py` with TOML configuration, automated ingestion, search evaluation, and scoring. - **Hybrid search: heap-expand algorithm** — rewrote `hierarchy.py` to heap-driven lazy expansion with global top-N competition, replacing the serial four-layer pipeline. ### Fixed - **Knowledge: atomic upsert prevents StaleDataError** — cascade handler switched from get→update to `INSERT ... ON CONFLICT DO UPDATE`, fixing concurrent cascade race conditions. - **API: OpenAPI version read from `__version__`** — no longer hardcoded to `0.1.0`; version now stays in sync with `pyproject.toml`. - **Profile middleware no longer swallows exceptions** — inner handler errors now re-raise correctly instead of silently returning HTTP 200. ### Performance - **Cascade optimize throttle 1s → 10s** — reduced unnecessary LanceDB `optimize()` I/O by raising the minimum interval between calls. ### CI / Build - **CI Python version matrix** — test and integration jobs now run on both Python 3.12 and 3.13. - **pyproject.toml improvements** — added `project.urls`, `Typing :: Typed` classifier, relaxed `jieba` version constraint, removed unused `python-dotenv` dependency, cleaned up sdist include list, added `RUF` lint rules and coverage configuration. - **`make ci` includes coverage** — `ci` target now runs `lint + test + integration + cov`. ### Documentation - Fixed stale references across 13 files (v1.1.0 freshness sweep). - Added GitHub sync guide (`docs/github-sync.md`). - Added v1.1.0 release notes and v1.0.0 migration guide as standalone docs. - Added `README.zh-CN.md` (Chinese README). - Expanded `QUICKSTART.md` with source install instructions and `uv run` usage notes. - Clarified cascade `optimize()` semantics in docstrings and runbook. ## [1.1.0] - 2026-06-24 ### Added - **Knowledge base subsystem** — full-stack document management exposed via `/api/v1/knowledge/*`. Upload documents (PDF / HTML / DOCX via multimodal parser), CRUD operations, and hybrid search (BM25 + vector + rerank + category boost). Ships with a 20-category default taxonomy (`.taxonomy.md`, auto-generated on first use). Original uploaded files are preserved alongside extracted Markdown. New settings group: `knowledge.*` (search tuning, `max_upload_bytes`, etc.). - **Reflection V1** — offline memory self-improvement engine. Select → Merge → Re-extract → Deprecate: clusters related episodes within existing 7-day windows, merges them via LLM, re-extracts consolidated episodes, and deprecates the originals. Runs as an OME strategy (`reflect_episodes`); configure via `ome.toml` (`[strategies.reflect_episodes]`, cron `0 2 * * 1`), changes are hot-reloaded within ~2 s, no restart needed; **disabled by default**. Requires `everalgo-user-memory>=0.3.1`. - **Standardized error response contract.** All API errors now return a canonical envelope with a semantic `ErrorCode` (10 codes: `NOT_FOUND`, `CONFLICT`, `INVALID_INPUT`, `EXTRACTION_EMPTY`, `UNSUPPORTED_FORMAT`, `EXTERNAL_SERVICE_UNAVAILABLE`, `CAPABILITY_UNAVAILABLE`, `CONFIGURATION_ERROR`, `INTERNAL_ERROR`, `BAD_REQUEST`), per-type exception handlers with MRO dispatch, and an `ErrorResponse` Pydantic model visible in OpenAPI docs. Replaces the v1.0 two-code scheme (`HTTP_ERROR` / `SYSTEM_ERROR`). - **Search: hierarchical fact eviction** (Layer-4) with `min_score` floor — low-confidence atomic facts are evicted before fusion, improving precision. - **Knowledge search degradation guidance** — when the embedding or rerank provider fails at call time, the knowledge search route enriches the error message with actionable guidance (e.g. retry with `method=keyword`, which needs no embedding) before returning `503`. - **Knowledge topic recaller** — dual-column BM25 recall for knowledge topics, integrated into the search manager alongside existing recall types. ### Changed - **`everos init` now generates `gpt-4.1-mini`** as the default LLM model (was `gpt-4o-mini`). Existing user configurations are not affected. - **API error `code` values have changed.** v1.0 returned only `HTTP_ERROR` (all 4xx) and `SYSTEM_ERROR` (all 5xx). v1.1 returns fine-grained semantic codes (see Added above). Clients that match on `error.code` string values need to update. The envelope structure (`request_id` + `error.{code, message, timestamp, path}`) is unchanged. - **DDD-aligned exception hierarchy** — domain errors reorganized: `ValidationError` → `InvalidInputError`; `DocumentAlreadyExistsError` → `DuplicateDocumentError`; `EmbeddingError` → `EmbeddingServiceError`; `RerankError` → `RerankServiceError`; `LLMError` → `LLMServiceError` (at the boundary); `MultimodalError` split into `UnsupportedModalityError` (domain) + `MultimodalNotEnabledError` (infrastructure). New base classes: `CapabilityError`, `ConfigurationError`. - **`infra/` restructured** — storage adapters moved under `infra/persistence/{markdown,sqlite,lancedb}`; each sub-package's `__init__.py` is the sole public API (enforced by import-linter). - **Parser capability extracted** to `component/parser` (shared by memorize and knowledge upload paths). ### Fixed - **Knowledge search no longer returns a bare `500 INTERNAL_ERROR` when the embedding or rerank provider is unconfigured.** `_require_search_providers` now raises `ConfigurationError` → `500 CONFIGURATION_ERROR`. A provider that is configured but fails at call time still surfaces as `503 EXTERNAL_SERVICE_UNAVAILABLE`. - **Knowledge document uploads are capped** at `knowledge.max_upload_bytes` (default 50 MiB); oversized uploads are rejected with `422` before parsing. - **Knowledge search `query` is bounded** to 2000 chars. - **`GET /knowledge/documents?sort_by=updated_at`** is now accepted. - **`POST /knowledge/documents` returns `original_file_path`** so callers no longer need a follow-up `GET` to locate the preserved upload. - **Rerank providers no longer echo the upstream HTTP response body** into the client-facing `503` message (vLLM / DeepInfra); the body is logged instead. - **Knowledge FK cascade race** — removed the foreign key on `knowledge_topics.doc_id` that caused delete-order race conditions; cascade cleanup handled at application level. - **Knowledge `replace_document`** — atomic PUT: backup old Markdown before re-extraction; removed explicit SQLite delete for atomicity. - **Knowledge duplicate `doc_id`** rejected on create; title collision resolved by appending `doc_id` to directory name. - **Knowledge `md_path` resolution** fixed in `delete_document` (was not resolved against `memory_root`). - **OME file-handle leak** — portalocker file handle is now closed on lock contention instead of being left open. - **jieba / Python 3.12 compatibility** — deferred jieba import to avoid `SyntaxError` from invalid escape sequences; suppressed `DeprecationWarning` in tests. - **Test isolation** — tests no longer leak `.env` state or depend on module import ordering. ### Documentation - Added knowledge base technical documentation. - Corrected the onboarding flow: `everos init` writes `everos.toml` + `ome.toml` (TOML), not a `.env` file; removed the nonexistent `--xdg` / `--env-file` options and the false `0600`-permissions claim from `README.md` / `QUICKSTART.md`; fixed the stable-version line (`v1.0.1`) and completed the `docs/cli.md` command tree. - Updated error handling docs to match the new DDD exception hierarchy. ## [1.0.1] - 2026-06-16 ### Security - **Path-traversal hardening for caller-supplied identifiers.** `sender_id` (which flows through to `owner_id` and becomes a directory segment on the episode write path) now carries the same path-safety guard as `app_id` / `project_id`: a character whitelist plus rejection of the `.` / `..` tokens. The whitelist admits `@` and `+` so real-world ids (email-style, plus-addressing) still pass. - **Defense-in-depth write containment.** `MarkdownWriter` now rejects any write target that resolves outside the configured memory root, before any filesystem touch (both the write `mkdir` and the append read-modify-write read). This backstop holds even if an identifier reaches the writer unsanitised (e.g. an `owner_id` set in the extract pipeline rather than from the DTO). The API layer maps the resulting error to HTTP 400. ### Documentation - Add a multimodal usage guide and correct the multimodal error semantics after end-to-end verification. - Rename the algorithm library to `everalgo` across docs and code comments (no code identifiers changed). - Fix accuracy drift found in an adversarial doc audit; reflect the `everalgo` packages being published and the v1.0.0 stable status. ## [1.0.0] - 2026-06-03 First public release of EverOS — a Markdown-first memory extraction framework for AI agents. ### Added - **Markdown as source of truth** — all memory persists as plain `.md` files you can open, edit, grep, and version with Git. - **Lightweight three-piece storage** — Markdown (truth) + SQLite (state / queue / audit) + LanceDB (vector + BM25 + scalar index). No external services required. - **Hybrid retrieval** — BM25, vector, and scalar filtering in a single LanceDB query. - **Cascade index sync** — editing a `.md` file triggers a file watcher → entry-level diff → sub-second LanceDB sync. - **Dual-track memory** — user-track (Episodes / Profiles) and agent-track (Cases / Skills). - **Multi-source extraction** — conversations, workflows, agent traces, and file knowledge. - **CLI + HTTP API** — the `everos` command-line tool and a FastAPI server, async-first throughout. - **Pluggable providers** — LLM / embedding / rerank via the OpenAI-compatible protocol (works with OpenAI, OpenRouter, vLLM, Ollama, …). - **Decoupled algorithms** — memory extraction algorithms live in the standalone `everalgo-*` libraries published on PyPI. [Unreleased]: https://github.com/EverMind-AI/everos/compare/v1.1.2...HEAD [1.1.2]: https://github.com/EverMind-AI/everos/compare/v1.1.1...v1.1.2 [1.1.1]: https://github.com/EverMind-AI/everos/compare/v1.1.0...v1.1.1 [1.1.0]: https://github.com/EverMind-AI/everos/compare/v1.0.1...v1.1.0 [1.0.1]: https://github.com/EverMind-AI/everos/releases/tag/v1.0.1 [1.0.0]: https://github.com/EverMind-AI/everos/releases/tag/v1.0.0