yams/CHANGELOG.md
2025-09-18 09:59:19 -04:00

30 KiB
Raw Permalink Blame History

Changelog

All notable changes to YAMS (Yet Another Memory System) will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Archived Changelogs

  • v0.6.x archive: docs/changelogs/v0.6.md
  • v0.5.x archive: docs/changelogs/v0.5.md
  • v0.4.x archive: docs/changelogs/v0.4.md
  • v0.3.x archive: docs/changelogs/v0.3.md
  • v0.2.x archive: docs/changelogs/v0.2.md
  • v0.1.x archive: docs/changelogs/v0.1.md

Known Issues

  • Daemon may show broken connection with rapid CLI/MCP usage

[v0.6.39] - 2025-09-17

CI Bump

[v0.6.38] - 2025-09-17

Added

  • List input resolver service shared by CLI and MCP (resolveNameToPatternIfLocalFile) to detect when users pass a local file path and normalize it to an exact path pattern for the list tool.
  • CLI list: when --name points to a local file, prints a concise line-based diff against the indexed content after the listing (non-disruptive; no mutations).
  • MCP list tool: new opt-in flag include_diff to attach a structured diff block per matching document when name is a local file. Response annotates local_input_file for traceability.

Changed

  • The hybrid search engine now defaults to Reciprocal Rank Fusion (RRF) instead of a linear combination of weights. This provides more robust and balanced search results out-of-the-box and simplifies tuning.
  • Build/Deps: Bumped Tracy profiler to 0.12.2 (from 0.12.1); enabled by default in yams-debug preset.
  • List command parity: CLI and MCP now share the same local-file detection and path normalization for list, reducing surprises between surfaces.

Connection Handling

  • SocketServer: pre-accept backpressure now clamped to a very small delay (≤20ms) to avoid kernel backlog saturation and spurious ECONNREFUSED. Added overload counters to daemon stats (acceptBackpressureDelays, acceptCapacityDelays).
  • RequestHandler: persistent connections are no longer closed on benign read timeouts; unified closure logs with explicit reasons (EOF, invalid frame, parse error, FSM not alive).
  • Client transport/pool: clearer error messages that distinguish ECONNREFUSED from timeouts and include socket path with actionable hints.

Fixed

  • The add_directory tool now correctly validates that the input path is a directory and handles path normalization more robustly, fixing an issue where it would fail to index any files.
  • Corrected the if condition syntax in the release.yml workflow to resolve a parsing error related to the secrets context.

[v0.6.37] - 2025-09-17

Hotfixes

  • Daemon Stability: Fixed a critical race condition in the SHA256 hasher that could cause the daemon to crash with a SIGSEGV during concurrent file ingestion.
  • Bounded IO pool (ipc_io) to prevent CPU spikes on initial activity:
    • Growth gate now requires either high mux backlog OR activeConn > ioThreads * ioConnPerThread.
    • Dynamic max: ipc_io.max = min([tuning].pool_io_max, TuneAdvisor::recommendedThreads(0.5)).
    • StatusResponse now includes ipcPoolSize and ioPoolSize for quick verification.
  • Early tuner start: TuningManager now starts before sockets/services to avoid the race where the daemon accepted work without centralized tuning active.
  • Tracy zones: added lightweight zones around TuningManager loop/tick, WorkerPool threads, and SocketServer accept/connection to profile remaining hotspots on demand.
  • Portability: snapshot registries switched to atomic_load/store free functions for shared_ptr to fix libc++ build errors (no std::atomic<std::shared_ptr<...>>).
  • PostIngestQueue:
    • Introduced dynamic worker resize with PoolManager("post_ingest") integration.
    • Implemented bounded queue with backpressure (default capacity 1000; env YAMS_POST_INGEST_QUEUE_MAX).
    • TuningManager now scales post_ingest up on backlog when idle and down when busy.

Updated Config guidance

  • Suggested [tuning] while validating:
    • pool_io_max = 4, io_conn_per_thread = 16, pool_cooldown_ms >= 750.
    • Validate using ipcPoolSize/ioPoolSize in status; pools should grow gradually and shrink at idle.
    • Capture a 5–10s trace with Tracy to identify any remaining hot loops.

[v0.6.36] - 2025-09-16

Fixed

  • Adding homebrew formula as module

[v0.6.35] - 2025-09-16

Added

  • CLI doctor: proactively triggers a plugin scan when neither typed providers nor plugins_json are available, then briefly waits so results appear. Matches yams plugin list behavior for faster diagnosis.
  • CLI add: auto-detects directory paths and enables --recursive automatically (LLM/UX friendly) with an informational log.

Changed

  • Doctor plugin listing now prefers daemon typed providers from status.providers and falls back to getStats().additionalStats["plugins_json"] for parity with yams plugin list. Retains macOS otool -L hint for degraded plugins.
  • Directory ingestion: daemon dispatcher treats any directory path as directory ingestion (forces recursive=true) even if clients omit the flag.

Fixed

  • ServiceManager: corrected placement of env_truthy() (was nested in another function) and added <cctype> include to fix macOS build failures.
  • DocumentService: early, clear error when a directory path is sent to the single-file store() path (prevents file_size: Is a directory).

[v0.6.34] - 2025-09-16

Fixed

  • CI improvements and fixes for release assets
  • Fixing regression from LLD cmake linking

[v0.6.33] - 2025-09-16

Fixed

  • MCP server
    • Improved download logic to improve retrieving content from a retrieved files
  • CI/CD
    • Sourcehut: Improving build packaging step
    • Github Actions: Improving test.yml configuration step

[v0.6.32] - 2025-09-16

Fixed

  • Fixing linking errors seen on ubuntu 24.04
  • CI/CD
    • Sourcehut: Fixing how packaging is exposed
    • Github Actions: Fixing test dependency setup and release package steps

[v0.6.31] - 2025-09-16

Fixed

  • CI/CD
    • GitHub Actions: tests workflow YAML fixed (indentation of timeout-minutes under the job).
    • Docker workflow: ARM64 builds now use QEMU + Buildx on ubuntu-latest; native ubuntu-24.04-arm runners no longer required for ARM publishing. Multi-arch manifest unchanged.

[v0.6.30] - 2025-08-16

Fixed

  • Fixed regressions in CLI / MCP UI performance from the introduction of the daemon
  • ARM Build: Boost find_package failure resolved via corrected Conan toolchain path and added generator directory visibility during CMake configure.

Added

  • Packaging: Introduced Homebrew formula templating (packaging/homebrew/yams.rb.template) with placeholder substitution for version + sha256 during stable releases.
  • Release workflow: Generates and commits latest.json manifest plus Homebrew formula in a single pass; adds commit step guarded to stable channel.
  • Homebrew: Added livecheck block for future tap/live version detection.
  • Services
    • RetrievalService parity for CLI and MCP (get/list/grep) with shared facade.
    • DocumentIngestionService used by CLI add and MCP add for daemon‑first ingestion.
  • Daemon: Native chunked get protocol handlers (GetInit/GetChunk/GetEnd) backed by in‑memory RetrievalSessionManager, enabling efficient large content retrieval and capped buffers.

Changed

  • CI/Build
    • Unpinned Conan across tests and release workflows (allow latest compatible Conan 2.x) while retaining reproducibility via profile + lock hashing.
    • Updated CMakePresets.json toolchain paths (removed incorrect nested build/Debug / build/Release segments) enabling correct Boost discovery on ARM.
    • Extended test job timeout to 50 min (ARM warm builds) and added Conan/Boost diagnostics aiding cache hit analysis.
    • Replaced heredoc inline formula generation with template-driven substitution reducing workflow maintenance surface and diff noise.
  • CLI + MCP: Switched get/list/grep to RetrievalService; add paths to DocumentIngestionService to eliminate bespoke logic and timeouts/hangs divergences.
  • CLI: Guarded cfg.dataDir assignment behind hasExplicitDataDir() throughout commands per refactor plan. Centralized DaemonClient data‑dir resolution in default constructor (env → config core.data_dir → XDG/HOME → ./yams_data).
  • RetrievalService: getChunkedBuffer prefers the native chunked protocol and falls back to unary Get only for NotImplemented/Timeout/NetworkError. Improved name‑smart get to resolve via filename when hybrid search returns a path (macOS path aliasing resilience).

[v0.6.29] - 2025-09-14

CI Bump

  • Fixing github actions by removing conan version pin and fixing test.yml

[v0.6.28] - 2025-09-14

CI Bump

  • Fixing github actions macos key signing regression

[v0.6.27] - 2025-09-14

Changed

  • CI/build: Nightly packaging auto-enables on refs/heads/main (no time-based scheduler needed). Improved repo-root detection (yams/ vs .) across all tasks, and broadened artifact globs to support both layouts.
  • CI/build: Hardened packaging tasks — CPack RPM now guarded by rpmbuild availability and won’t fail the job if RPM tooling is missing; DEB packaging remains enabled. Added set -e to packaging steps for clearer early exits while keeping RPM optional.
  • Knowledge Graph: Added unit tests for alias exact/fuzzy resolution, neighbor retrieval, and doc-entity roundtrips (kg_store_alias_and_entities_test.cpp).
  • Search + KG: Added SimpleKGScorer end-to-end test validating entity and structural scores and explanations (kg_scorer_simple_test.cpp).

[v0.6.26]

CI Bump

  • Sourcehut debian image updates for packaging on fedora
  • Github CI improvements for testing and release builds

[v0.6.25] - 2025-09-14

CI Bump

  • Fixing github actions cache and release naming

[v0.6.24] - 2025-09-14

CI Bump

  • Fixing build matrix used in github actions to fix artifact uploading.

[v0.6.23] - 2025-09-14

CI Bump

  • Increasing test timeouts and fixing packing errors with sourcehut builds

[v0.6.22] - 2025-09-14

CI Bump

  • Fixing macos env error

[v0.6.21] - 2025-09-14

Fixes

  • Fixing prefix for sourcehut builds
  • Adding cache for Github CI

[v0.6.20] - 2025-09-13

Added

  • Asynchronous post‑ingest pipeline (daemon): decouples heavy work from add/add_directory.
    • New PostIngestQueue performs extraction → full‑text index → knowledge graph upserts in the background.
    • Queue metrics (threads, queued, processed, failed) with EMAs for latency and throughput are exposed via status.
  • Knowledge Graph enrichment beyond tags:
    • Lightweight analyzers extract URLs, emails, and optional file paths and add MENTIONS edges.
    • Caps and toggles are controlled via TuneAdvisor.
  • Batch KG operations:
    • KnowledgeGraphStore::upsertNodes(std::vector<KGNode>) used in the post‑ingest worker to avoid read‑after‑write races.
    • New KnowledgeGraphStore::addEdgesUnique(std::vector<KGEdge>) batches edge inserts with on‑conflict de‑duplication on (src_node_id, dst_node_id, relation).
  • TuneAdvisor controls (code‑level, no env):
    • kgBatchNodesEnabled, kgBatchEdgesEnabled (default true)
    • Analyzer toggles: analyzerUrls, analyzerEmails, analyzerFilePaths (file paths off by default)
    • maxEntitiesPerDoc (default 32)
  • MCP observability and parity:
    • New status tool that returns daemon readiness and counters (includes post‑ingest and MCP worker pools).
    • New yams://status resource for symmetry with yams://stats.
    • Minimal doctor tool summarizes degraded subsystems and suggests actions.

Changed

  • add and add_directory delegate extraction/index/graph work to the post‑ingest queue; DocumentService honors deferExtraction to keep adds fast.
  • Post‑ingest worker now batches KG node upserts and uses unique batch edge inserts to reduce DB round‑trips.
  • Vector/Readiness metrics mirrored into status.requestCounts for MCP/CLI parity.

Fixed

  • Daemon readiness consistency across CLI/UI:
    • DaemonMetrics now derives boolean ready from the lifecycle state (authoritative), not deprecated fullyReady(). Prevents doctor showing "NOT READY, state=Ready".
    • Normalized status strings to lowercase ("ready", "degraded", etc.) in the status path to match serializer/client expectations and avoid case-related derivation bugs.
    • Stats not_ready flag now reflects lifecycle readiness (Ready/Degraded → false) instead of always true, so yams stats won’t unnecessarily fall back to local mode.
    • Bootstrap status JSON (yams-daemon.status.json) now writes a lowercase overall field for consistency with IPC lifecycle strings.
  • Stats daemon reachability:
    • Increased yams stats short-mode timeout from 1.5s → 5s and set explicit connect/header/body timeouts to avoid premature local fallback, aligning with status/doctor behavior.
    • not_ready heuristic is now lifecycle-driven (Ready/Degraded → false), so stats no longer assumes unready by default.
    • Temporary mitigation: yams stats currently forces local-only output while we investigate a daemon GetStats streaming/header path issue that can stall and cause slow fallbacks. The daemon path will be re-enabled once the bug is fixed.

[v0.6.19] - 2025-09-13

Fixed

  • MCP stdio framing correctness and async send:
    • Fixed double-encoding on outbound async path: outboundDrainAsync now uses a framed string sender instead of passing a serialized JSON string to send(const json&).
    • Removed extra CRLF after framed payload; framed responses now send exactly Content-Length bytes after the blank line (LSP/MCP compliant).
    • Added StdioTransport::sendFramedSerialized(const std::string&) for pre-serialized payloads used by the outbound drain.
  • MCP prompts/get schema correctness for MCP Inspector:
    • Roles now use only assistant and user (removed system).
    • content is a single object { "type": "text", "text": ... }, not an array.
  • macOS/Linux build/link improvements:
    • Resolved yams-daemon undefined symbols on Linux by including IPC OBJECT files in the daemon static lib and linking yams_ipc_proto.
    • Fixed yams-mcp-server linking on macOS by avoiding IPC OBJECTs that pull daemon-only symbols; explicitly link IPC/client/proto libs instead.

Changed

  • StdioTransport testability: in test builds (YAMS_TESTING), receive() uses cin.rdbuf()->in_avail() to support reliable stringstream-driven tests.
  • Default server send now includes Content-Type: application/vscode-jsonrpc; charset=utf-8 and a trailing CRLF when using header framing to maximize client compatibility.
  • ONNX plugin dependency hygiene: Removed unintended PDFium bundling logic from the ONNX plugin CMake (it never linked or required PDFium). Added a configure-time guard warning if pdfium::pdfium becomes linked accidentally to keep plugin responsibilities isolated. PDF extraction remains solely in the pdf_extractor plugin.

Added

  • ONNX/GenAI path (vector library):
    • Scaffolded a minimal GenAI adapter in the vector layer and made GenAI the default when ONNX is enabled; falls back to raw ONNX Runtime when GenAI is unavailable.

Daemon & Plugins

  • Plugin autoload diagnostics: adoption logs now include the plugin file path; environment YAMS_PLUGIN_DIR is prioritized over system directories to avoid stale installs.

[v0.6.18] - 2025-09-13

Hot fix

  • CI Bump : CMake and conan update for

[v0.6.17] - 2025-09-13

Hot fix

  • CI Bump : Resolving compile compatibiliy

Changed

  • Build: Removed legacy -fcoroutines-ts flag for modern Clang toolchains (C++20 coroutines are enabled by default). Prevents build failures on distributions where the flag is rejected.
  • Build: Fixed macOS Conan host profile parsing error by removing unsupported [env] section; libc++ enforcement now handled via workflow sanitization.
  • Build: Added defensive scrub in CMakeLists.txt to strip any externally injected -fcoroutines-ts occurrences from cached flags.

[v0.6.16] - 2025-09-13

Hot fix

  • CI Bump : Fixing syntax

[v0.6.15] - 2025-09-13

Hot fix

  • CI Bump : Updating clang version in host.ninja for builds

[v0.6.14] - 2025-09-12

Added

  • CLI Doctor:
    • yams doctor dedupe — detects (and optionally deletes) duplicate documents grouped by --mode (path|name|hash) with keep strategies (--strategy keep-newest|keep-oldest|keep-largest), dry-run by default, and safety flag --force for hash mismatches.
    • yams doctor embeddings clear-degraded — attempts to clear the embedding degraded state by loading a preferred/available model (interactive confirmation, best-effort).
  • Status + CLI plugin diagnostics:
    • StatusResponse now carries typed providers and a skippedPlugins array (path + reason).
    • yams plugins list prefers typed providers and supports --verbose to print a “Skipped plugins” section with clear reasons (preflight/dlopen/symbols/name-policy).
  • Config and init:
    • New [daemon].plugin_name_policy with values relaxed (default) or spec (require libyams_*_plugin.*).
    • examples/config.v2.toml documents the field; yams init --enable-plugins now writes plugin_dir and sets plugin_name_policy = "spec" for canonical naming by default.
    • New [daemon].auto_repair_batch_size defaulted to 16; daemon applies it when starting the RepairCoordinator.
  • macOS plugin robustness:
    • ONNX plugin CMake now bundles ONNX Runtime dylibs (existing) and PDFium dylib into local subdirs and injects @loader_path/onnxruntime and @loader_path/pdfium into rpaths. SIP‑safe, no DYLD tweaks.

Changed

  • Safer ABI plugin scanning:
    • scanTarget() no longer dlopen()s candidates (prevents constructor crashes); macOS dlopen_preflight() is performed in load() and failures are handled gracefully.
    • Filename filter accepts libyams_*_plugin.* and yams_*_plugin.*; strict policy can be enforced via config/env.
  • CLI yams plugins list auto‑starts the daemon, triggers a scan, waits briefly for readiness, and prints typed providers. Helpful guidance is printed if no info found.

Fixed

  • macOS crash on plugin scan/load:
    • Eliminated segfaults by avoiding dlopen() during scan; added preflight + robust error logging in load path; fixed dlerror() usage (read once, avoid null concatenation).
  • Repair throttling and backpressure:
    • RepairCoordinator honors config batch size and TuneAdvisor env knobs (YAMS_REPAIR_MAX_BATCH, YAMS_REPAIR_TOKENS_IDLE/BUSY, YAMS_REPAIR_MAX_BATCHES_PER_SEC, etc.) and pauses token issuance when hitting per‑second caps to keep the daemon responsive.
  • Linux build/linking:
    • yams-daemon now links explicitly against yams::daemon_ipc and yams::daemon_client, resolving undefined symbol errors (ConnectionFsm/RequestHandler/ResourceTuner) on Ubuntu/ELF toolchains.
  • Test/CI stability:
    • run_sync rewritten to use a promise + co_spawn(detached) and co_await std::move(aw) to avoid move/copy pitfalls with Boost.Asio awaitables.
  • Examples/config:
    • examples/config.v2.toml updated with plugin_name_policy and daemon plugin notes; defaults align with init.

Notes

  • If your macOS ONNX plugin previously failed with libpdfium.dylib not found, rebuild/reinstall the plugin; the new CMake will bundle PDFium into a local pdfium/ folder and adjust rpaths to @loader_path/pdfium.
  • Background repair can be tuned at runtime via environment without restarting; see the TuneAdvisor variables above for recommended settings during heavy foreground load.

[v0.6.13] - 2025-09-11

Hotfixes

  • Build stabilizations and improvements from MacOS testing

[v0.6.12] - 2025-09-11

Added

  • CLI: yams graph — read‑only graph viewer that mirrors get --graph.
    • Usage: yams graph <hash> [--depth 1-5] or yams graph --name "<path>" [--depth N].
    • Shows related documents via the knowledge graph without fetching content.
  • Config: added [daemon] section to examples/config.v2.toml with enable = true, auto_load_plugins = true, optional plugin_dir, and notes about YAMS_PLUGIN_DIR discovery.
  • CLI/build: restored Hot/Cold mode helpers and include wiring for list/grep/retrieval.
  • yams doctor
    • Yams plugin and daemon health are now under one command
    • Doctor checks for vector DB vs model embedding dimension mismatch with clear fix steps.
    • Doctor warnings for missing companion files (config.json, tokenizer.json) next to model.onnx.
  • Plugin System
    • Generic C‑ABI plugin loader with trust policy (scan/load/unload; trust list/add/remove)
    • IPC handlers for plugin scan/load/unload/trust; CLI yams plugin supports list/info/scan/load/unload/trust
    • DR CLI gating: yams dr subcommands (status/agent/help) now require plugins and print a guidance message; see docs/PLUGINS.md
    • Spec docs: docs/spec/plugin_spec.md, WIT drafts (object_storage_v1.wit, dr_provider_v1.wit), JSON Schemas (manifest/object_storage_v1/dr_provider_v1)
    • External examples scaffold under docs/examples/plugins and guide at docs/guide/external_dr_plugins.md for out‑of‑tree GPL plugins (S3/R2)
  • CLI model tooling
    • yams model provider: shows active model provider status (loaded models) and the preferred model from config for transparency.
  • Daemon plugin UX
    • Autoload from trusted + standard directories on startup (disable with YAMS_AUTOLOAD_PLUGINS=0).
    • Trust‐add autoload: newly trusted directories/files are scanned and loaded immediately (best‑effort).
    • Load by name: resolves logical names by scanning plugin descriptors across default dirs (e.g., yams plugin load onnx).
    • External plugin host (metadata only): supports .yams-plugin.json layouts for non‑ABI external integrations with trust and listing.
  • Embedding provider safeguard
    • When a plugin model_provider_v1 is adopted, the daemon auto‑selects embeddings.preferred_model = "all-MiniLM-L6-v2" if the user hasn’t set one (or if it’s set to a non‑ONNX default). This nudges embeddings to the ONNX path by default.
  • Status proto v3: extended StatusResponse over protobuf to carry readiness (per-subsystem), init progress, overall_status, and request counts. Serializer/deserializer updated with back‑compat casting and safe parsing.
  • Streaming progress events for long ops: EmbedEvent and ModelLoadEvent over IPC.
  • Startup hints: daemon logs a hint to run yams repair --embeddings on new/migrated data dirs and a hint to use yams stats --verbose for monitoring.

Changed

  • Documentation: general improvements and clarifications.
  • CI: improved build reliability and semantic version enforcement.
  • yams doctor summary now includes a Knowledge Graph section; when the graph is empty it recommends: yams doctor repair --graph.
  • PDF Extraction: The built-in PDF text extraction logic has been refactored into a standalone plugin (pdf_extractor) that implements the new content_extractor_v1 and search_provider_v1 interfaces.
  • Model download command now uses the unified downloader for all artifacts (model + companions).
  • Improved repo/URL inference; clearer errors list exact URLs attempted.
  • ONNX model provider: batched ONNX inference for efficiency; expanded config parsing (hidden_size, max_position_embeddings).
  • Init: default v2 config now includes a [daemon] section with enable = true and auto_load_plugins = true so plugin adoption (e.g., ONNX) works out‑of‑the‑box after yams init when plugins are present in standard directories.
  • CLI: added DR command (gated) and extended plugin command with install/enable/disable/verify stubs (no‑ops for now)
  • Stats default view becomes adaptive: when service‑specific metrics or recommendations are relevant, the non‑verbose path includes the Recommendations and Service Status sections automatically; the compact STATS footer remains.
  • Recommendation text updated to be actionable: suggests yams repair --embeddings instead of a vague “run indexing”.
  • Doctor now performs smarter PID checks: prints the configured PID file and also checks a stable fallback in /tmp, reporting active/stale states explicitly.
  • CLI daemon alignment: get, grep, and list now initialize DaemonClient with the CLI data directory and standardized timeouts (header 30s, body 120s). The CLI also seeds YAMS_STORAGE and YAMS_DATA_DIR so daemon auto-start binds to the same storage as the CLI (parity with search).
  • MCP server storage selection: server now resolves and sets DaemonClient dataDir from environment/config (priority: YAMS_STORAGE → YAMS_DATA_DIR → ~/.config/yams/config.toml → XDG_DATA_HOME/HOME) and seeds the same env vars for consistent daemon storage across processes.
  • MCP tools: get tool schema now defaults include_content to true so content is returned by default unless explicitly disabled.
  • Embeddings: streaming and stability improvements
    • Client streams batch embeddings by default when batch > 1 and retries transient failures with exponential backoff and dynamic sub‑batching (min 4).
    • Added detailed ONNX per‑item inference progress logs and total timing in ModelManager::runInference for better diagnosis of hangs.
    • Increased default daemon client timeouts to 120s; configurable via environment: YAMS_REQUEST_TIMEOUT_MS, YAMS_HEADER_TIMEOUT_MS, YAMS_BODY_TIMEOUT_MS.
    • Doctor/repair now surfaces EmbeddingEvent progress to stdout during yams doctor repair --embeddings so users see live progress.
    • Daemon respects client streaming hints for embedding requests; emits progress chunks and a final response.
    • Daemon logs batch embedding processing time (ms).
  • Daemon mux tuning centralized via TuneAdvisor (header-only):
    • New server-side knobs: YAMS_SERVER_MAX_INFLIGHT, YAMS_SERVER_QUEUE_FRAMES_CAP, YAMS_SERVER_QUEUE_BYTES_CAP, YAMS_SERVER_WRITER_BUDGET_BYTES.
    • Existing knobs: YAMS_WRITER_BUDGET_BYTES, YAMS_MAX_MUX_BYTES, YAMS_WORKER_THREADS, YAMS_CHUNK_SIZE.
    • SocketServer now honors TuneAdvisor::chunkSize() for streaming chunk size (no 32 KiB cap).
    • RequestHandler reads server settings via TuneAdvisor for consistent behavior.

Fixed

  • Knowledge Graph repair: yams doctor repair --graph now populates nodes/entities.
    • Implemented SQLite KG node upsert/lookups; previously stubbed methods caused updated=0 (no-op) during repair even with existing tags/metadata.
  • Plugin list over protobuf
    • GetStatsResponse JSON now embeds plugins_json; serializer/deserializer preserve it so yams plugin list shows loaded plugins reliably.
  • Framing/transport for plugin ops
    • Resolved “Frame build failed” during plugin scan/load by aligning CLI and daemon payloads on the protobuf Envelope path.
  • Build/link fixes
    • Link nlohmann_json::nlohmann_json into yams_ipc_proto (proto serializer uses JSON).
    • Link -ldl for CLI doctor on Linux (dlopen in doctor plugin).
    • Fixed unterminated string literals in plugin CLI output.
    • macOS: CMake configuration and linking fixes for Darwin toolchain (guard LINK_GROUP to Linux; use -force_load where appropriate).
  • External plugin host
    • Corrected trust file newline writes, regex escapes, and Result usage in load(); ensured proper namespace scoping to fix build.

Notes

  • When [embeddings].enable = false, the daemon disables the model provider and plugin auto‑loading to reduce startup overhead; enable embeddings to allow autoload to adopt a provider (e.g., ONNX).

Known Issues

  • Embeddings with nomic-embed-text-v1.5 (ONNX) may time out or fail under the daemon's streaming path on some systems.
    • Symptoms: yams repair --embeddings reports "Embedding stream failed: Read timeout" and logs show EmbedDocuments dispatch: model='nomic-embed-text-v1.5'.
    • Status: under investigation in the experimental branch (plugin/SDK path).
    • Workarounds:
      • Prefer other ONNX models: all-MiniLM-L6-v2 (fast) or all-mpnet-base-v2 (higher quality):
        • yams config embeddings model all-MiniLM-L6-v2 (or pass --model all-MiniLM-L6-v2 to commands)
        • yams daemon restart
      • Raise client timeouts for long embedding runs:
        • export YAMS_CLIENT_HEADER_TIMEOUT_MS=60000; export YAMS_CLIENT_BODY_TIMEOUT_MS=300000
      • Reduce batch pressure: yams config embeddings tune balanced or yams config embeddings batch_size 8 then restart daemon.
      • Preload the model and smoke test a single embed:
        • yams model load all-MiniLM-L6-v2
        • yams embed --model all-MiniLM-L6-v2 "hello world"
      • Ensure the ONNX plugin is loaded and onnxruntime resolves:
        • yams plugin load onnx; ldd /usr/local/lib/yams/plugins/libyams_onnx_plugin.so
  • MIME detection on add: single‑file and directory adds now perform MIME detection (magic → extension fallback) when not provided; MIME is stored in both content metadata and DB.
  • Embeddings generation robustness:
    • Batch UTF‑8 sanitization prevents protobuf “invalid UTF‑8” errors.
    • Default embedding targets restricted to text‑like MIME; binary types (e.g., PDFs/images) are skipped unless explicitly included via --include-mime.
    • Daemon model preload is attempted only when the model provider is ready to avoid spurious read timeouts; Hybrid backend continues via local fallback.
  • Auto-repair during degraded state: RepairCoordinator now allows small background batches while the daemon is not fully ready, limited by a configurable active‑connections threshold; also gates work using live activeConnections instead of assuming idle.
  • MCP server: store by path could return "File not found" due to fragile path resolution. handleStoreDocument now normalizes paths robustly:
    • Strips file:// scheme, expands ~, resolves relative paths against $PWD and process current_path(), and applies weakly_canonical best‑effort.
    • Prevents spurious failures on repeated adds and differing working directories.
  • Retrieval via daemon appearing to return no content or “not found” while search worked. CLI get and MCP get/cat now reliably hit the same storage as search, resolving mismatches caused by unset dataDir or differing environments.