Skip to content

Releases: mshadmanrahman/root-kg

v2.1.0

Choose a tag to compare

@mshadmanrahman mshadmanrahman released this 11 Sep 21:12
4211fed

Install: pip install root-kg (https://pypi.org/project/root-kg/2.1.0/)

Changed

  • root-server runs on the mcp 2.x SDK. Tool handlers are passed to the Server constructor as on_list_tools / on_call_tool and return ListToolsResult / CallToolResult; the 18 tool definitions and the dispatcher are unchanged (#10).
  • mcp dependency is >=2,<3. The <2 pin from 2.0.0 is gone.
  • 2.x stdio_server points fd 0 at the null device and fd 1 at stderr while serving, so stray prints from torch or sentence-transformers can no longer corrupt the JSON-RPC stream.

Added

  • tests/test_server_tools.py lists the tools through the 2.x handler and checks the unknown-tool path, so a schema or dispatch regression fails CI.

v2.0.0

Choose a tag to compare

@mshadmanrahman mshadmanrahman released this 11 Sep 20:23
3a01fde

Install: pip install root-kg (https://pypi.org/project/root-kg/2.0.0/)

Added

  • Published on PyPI as root-kg, so pip install root-kg replaces the clone-and-venv path for people who want the tool rather than the code (#2).
  • .github/workflows/release.yml: pushing a v* tag builds the sdist and wheel, checks the tag against pyproject.toml, and publishes through PyPI trusted publishing. No API token in the repo.
  • tests/test_paths.py covers the three ways the home directory resolves, and tests/test_server_import.py imports the MCP server against the pinned SDK.

Changed

  • All modules now live in one root_kg/ package (root_kg/adapters/, root_kg/tools/). Console scripts (root-kg, root-index, root-server) are unchanged. Anything that ran python indexer.py or python server.py directly must switch to root-index / root-server or python -m root_kg.indexer.
  • Config, database and logs resolve through root_kg/paths.py: ROOT_KG_HOME when set, else the checkout root when pyproject.toml sits next to the package, else ~/.root-kg. root-kg init creates that directory and prints it.
  • config.example.yaml and .env.example moved into root_kg/ and ship inside the wheel, so root-kg init can copy them after a PyPI install.
  • mcp is pinned to >=1.0.0,<2. The 2.x SDK removed the low-level Server.list_tools / call_tool decorators the server is built on, and a fresh install was pulling 2.2.0 and crashing on start. Migrating to the 2.x API is a separate change.
  • root-kg init prints the claude mcp add line with the real path to root-server, found on PATH or next to the running interpreter.
  • Chunk size is read from config as embeddings.max_chunk_chars (default 4000). The old max_chunk_tokens and split_on_headings keys were never read and are gone from the example config.
  • Default synthesis model is claude-sonnet-5.

Removed

  • [tool.setuptools] py-modules list; setuptools finds the package on its own.

v1.1.0 — Daemon, health monitoring, and multi-backend LLM

Choose a tag to compare

@mshadmanrahman mshadmanrahman released this 02 Jun 10:29

What's new in v1.1.0

ROOT as a background service

ROOT can now run as a persistent warm daemon, not just a script you call on demand.

New in this release:

  • ** — Warm daemon**: Keeps the DB and embedder loaded in memory. Exposes and on localhost so other agents and scripts can query ROOT with no cold-start penalty and zero LLM calls on the hot path.

  • ** — Agent-callable CLI**: Any shell script, cron job, or external AI agent can now invoke the full ROOT tool surface (search, open_loops, themes, weekly_digest, decision_trail, project_pulse, blind_spots) without standing up the MCP server.

  • health-check.py — Operational monitoring: Validates indexer freshness, database state, cron health, and MCP reachability. Run it daily to catch silent failures early.

  • skill-audit.py — Tool usage analytics: Surfaces which MCP tools are actually being called, so you can tune extraction priorities based on real query patterns.

  • slack-alert.py — Webhook alerts: Pairs with health-check.py to push operational summaries to Slack without polling logs.

  • run-indexer.sh — Shell wrapper: Drop-in launchd/cron-compatible indexer runner. Handles venv activation and structured logging.

LLM backend improvements

llm.py rebuilt as a proper multi-backend client. Anthropic and OpenRouter are now feature-equivalent: both support extraction and synthesis independently. Nested Claude environment variables are stripped before subprocess calls (prevents token leakage in agentic setups). OpenRouter's OpenAI-compatible tool schema is fully supported.

indexer.py has an LLM pause guard: drop a .llm-paused file in the project root to skip entity extraction gracefully without interrupting indexing. Useful for rate-limit management in automated deployments.

Other changes

  • embeddings.py: model loading errors surface earlier with a clearer message
  • server.py: tool handler errors caught at the transport layer, returned as structured responses instead of crashing the process
  • db.py: schema query optimizations and defensive write-path checks

Full changelog: CHANGELOG.md