Skip to content

Releases: synpulse8-opensource/pulse8-ai-cortex-knowledge-vault

v1.2.2

12 Jun 20:00

Choose a tag to compare

[1.2.2] — 2026-06-12

Changed

  • Re-release to trigger MCP Registry publishing: 1.2.1 was tagged and released before the publish-mcp.yml workflow reached the default branch, so the registry listing never ran. No functional code changes since 1.2.1; this release exists to publish the server to registry.modelcontextprotocol.io.

[1.2.1] — 2026-06-12

Added

  • Official MCP Registry listing: Added server.json (schema 2025-12-11) describing the server under the namespace io.github.synpulse8-opensource/pulse8-ai-cortex-knowledge-vault, plus an mcp-name: ownership marker in the README so the registry can verify the PyPI package. Enables discovery via registry.modelcontextprotocol.io.

[1.2.0] — 2026-06-11

Added

  • Feedback vault collection: New feedback/ folder with vault_feedback and vault_list_feedbacks MCP tools plus REST endpoints, capturing user/agent feedback on vault quality with status and related_paths.
  • Microsoft Teams notifications: Optional TEAMS_WEBHOOK_URL posts an adaptive card after each new feedback note; optional TEAMS_APP_BASE_URL adds a "View in Cortex" link.
  • Daily activity log: Every vault_write, vault_ingest, and successful compile is mirrored into daily/<UTC-date>.md as a greppable ## [HH:MM] event | summary entry with a [[wiki-stem]] wikilink. Writes to daily/, feedback/, and .cortex/ are excluded to avoid self-reference.
  • Folder-based node typing: Files under agents/, sessions/, and daily/ are classified as AGENT_DEF, SESSION, and the new NodeType.DAILY without requiring a filename suffix. Frontmatter type: and the existing .agent.md/.session.md suffixes still take precedence/work.
  • Configurable search tuning: CORTEX_QMD_CACHE_TTL_SECONDS (result-cache TTL, default 30s) and CORTEX_QMD_SEARCH_TIMEOUT_SECONDS (search request timeout, default 120s).

Changed

  • Default search mode is now hybrid (was keyword). Clients that don't pass an explicit mode now get the best-quality BM25 + vector + re-ranking results. Set CORTEX_QMD_SEARCH_MODE=keyword to restore the previous fast-but-shallow default. Latency is mitigated by the result cache and the HTTP QMD container.

Fixed

  • QMD container returned no results: The image installed qmd via npm install -g ., which created a global symlink into a build directory deleted in the same layer — leaving a dangling qmd binary so every search failed with spawn qmd ENOENT and silently returned []. Now installed from a packed tarball with a build-time qmd --version smoke check.
  • Hybrid searches silently truncated: QMD HTTP searches hit a hardcoded 30s timeout on CPU-only hosts and returned [] while QMD was still working. Timeout is now configurable (default 120s).
  • Cached search failures: Empty result sets (transport errors/timeouts) are no longer cached, preventing a transient failure from blanking search for the full cache TTL.

Performance

  • Memoized QMD path index: build_path_index_from_graph is cached per graph mutation and no longer rebuilt on every search/read.
  • Non-blocking reads: vault_read offloads note parsing to a thread so concurrent MCP requests no longer serialize behind file I/O.

v1.2.1

12 Jun 19:14

Choose a tag to compare

Full Changelog: v1.2.0...v1.2.1

v1.2.0

11 Jun 19:23

Choose a tag to compare

Added

  • Feedback vault collection: New feedback/ folder with vault_feedback and vault_list_feedbacks MCP tools plus REST endpoints, capturing user/agent feedback on vault quality with status and related_paths.
  • Microsoft Teams notifications: Optional TEAMS_WEBHOOK_URL posts an adaptive card after each new feedback note; optional TEAMS_APP_BASE_URL adds a "View in Cortex" link.
  • Daily activity log: Every vault_write, vault_ingest, and successful compile is mirrored into daily/<UTC-date>.md as a greppable ## [HH:MM] event | summary entry with a [[wiki-stem]] wikilink. Writes to daily/, feedback/, and .cortex/ are excluded to avoid self-reference.
  • Folder-based node typing: Files under agents/, sessions/, and daily/ are classified as AGENT_DEF, SESSION, and the new NodeType.DAILY without requiring a filename suffix. Frontmatter type: and the existing .agent.md/.session.md suffixes still take precedence/work.
  • Configurable search tuning: CORTEX_QMD_CACHE_TTL_SECONDS (result-cache TTL, default 30s) and CORTEX_QMD_SEARCH_TIMEOUT_SECONDS (search request timeout, default 120s).

Changed

  • Default search mode is now hybrid (was keyword). Clients that don't pass an explicit mode now get the best-quality BM25 + vector + re-ranking results. Set CORTEX_QMD_SEARCH_MODE=keyword to restore the previous fast-but-shallow default. Latency is mitigated by the result cache and the HTTP QMD container.

Fixed

  • QMD container returned no results: The image installed qmd via npm install -g ., which created a global symlink into a build directory deleted in the same layer — leaving a dangling qmd binary so every search failed with spawn qmd ENOENT and silently returned []. Now installed from a packed tarball with a build-time qmd --version smoke check.
  • Hybrid searches silently truncated: QMD HTTP searches hit a hardcoded 30s timeout on CPU-only hosts and returned [] while QMD was still working. Timeout is now configurable (default 120s).
  • Cached search failures: Empty result sets (transport errors/timeouts) are no longer cached, preventing a transient failure from blanking search for the full cache TTL.

Performance

  • Memoized QMD path index: build_path_index_from_graph is cached per graph mutation and no longer rebuilt on every search/read.
  • Non-blocking reads: vault_read offloads note parsing to a thread so concurrent MCP requests no longer serialize behind file I/O.

v1.0.2 — Fix fastmcp dependency & remove internal CI

27 May 21:08

Choose a tag to compare

Fixed

  • Bumped fastmcp dependency floor from >=2.0.0 to >=3.0.0 to fix ImportError: cannot import name 'FastMCP'

Removed

  • Removed internal build-container-jfrog.yml workflow that referenced private synpulse-group/s8-actions

Housekeeping

  • Bumped version in pyproject.toml to 1.0.2

v1.0.1 — Fix fastmcp dependency

27 May 20:44
dbe050e

Choose a tag to compare

Bug Fix

  • Bumped fastmcp dependency floor from >=2.0.0 to >=3.0.0 in pyproject.toml
  • The codebase uses fastmcp 3.x APIs (FastMCP, OIDCProxy, http_app) which are unavailable in 2.x
  • The loose lower bound caused namespace-package corruption resulting in ImportError: cannot import name 'FastMCP', breaking 9 tests + 6 fixture errors

Verification

  • All 293 tests pass
  • Pylint passes cleanly

v1.0.0 — Production Release

18 May 12:22

Choose a tag to compare

v1.0.0 — Production Release

PULSE8.ai Cortex reaches v1.0.0 — promoted from Beta to Production/Stable.

Highlights

Authentication & Security

  • API key authentication (AUTH_METHOD=apikey) — simple, stateless x-api-key header auth
  • Microsoft Entra ID / OIDC (AUTH_METHOD=oidc) — OAuth 2.0 Authorization Code Flow with MFA support
  • OpenAPI specification — auto-generated docs via FastAPI

GPU Support & Flexible Deployment

  • NVIDIA GPU support for QMDDockerfile.gpu (CUDA 12.8 + Node.js 22) and docker-compose.gpu.yml overlay for EC2/Linux
  • Cortex-only deployment mode./scripts/start.sh --cortex-only for macOS Metal GPU acceleration
  • Configurable embed timeoutQMD_EMBED_TIMEOUT_MS environment variable
  • EC2 GPU setup guide — full guide at docs/ec2-gpu-setup.md

CI/CD & Operations

  • JFrog build & push workflow — automated container image builds
  • Enhanced logging — structured ingestion and compilation logs
  • Import constraints — enforced module boundaries in the compiler

Bug Fixes

  • Prevent SameFileError in bulk ingest
  • Fix Dockerfile.gpu Node version compatibility
  • Fix read_note crash on directory paths
  • Fix pylint test using wrong Python executable
  • Fix flaky perf test budget for CI runners
  • Fix QMD model download race condition
  • Various Docker permission and logging fixes

Full Changelog

See CHANGELOG.md for the complete history.

v0.7.0 — Bulk Ingest

07 May 07:34

Choose a tag to compare

Bulk Ingest from Local Storage

Ingest dozens or hundreds of files at once from a local directory — no MCP wire overhead, no running server required.

New features

  • BulkIngestor class — scan source directory, SHA-256 content dedup via manifest, copy to raw/, batch compile with asyncio.Semaphore concurrency control, single reindex at end (cortex/compiler/bulk.py)
  • cortex-bulk-ingest CLI--source, --concurrency, --force, --dry-run (scripts/bulk_ingest.py)
  • One-click shell script./scripts/bulk_ingest.sh /path/to/papers loads .env, prints summary, runs the full pipeline
  • POST /api/v1/bulk-ingest REST endpoint — programmatic bulk ingest without MCP (cortex/api/routes.py)
  • Docker INGEST_DIR volume mount — mount a local directory as /ingest in the container

Deduplication

Files are matched by SHA-256 content hash (not filename) via .cortex/ingest-manifest.json. Same content under a different name is skipped. --force bypasses the check.

Tests

31 new tests covering scan, hash, manifest, copy, compile batch, CLI parsing, REST endpoint, and Docker compose validation. Full suite: 286 passed.

v0.6.0

06 May 22:15

Choose a tag to compare

What's Changed

Bug Fixes

  • Fix vault appearing empty via MCP — normalize QMD file field to path and strip qmd:// prefix
  • Fix compile-flag bug — sources with failed LLM enrichment are no longer stuck; enrichment_status frontmatter tracks whether enrichment actually succeeded
  • Fix blocking I/O in async paths — offload log_operation file writes and build_context_window note reads to threads
  • Fix duplicate MCP service initialization — REST and MCP now share the same graph/QMD/compiler instances
  • Fix get_edges_batch overhead — replace unnecessary asyncio.gather with direct loop for in-memory operations

New Features

  • vault_compile(force, path) — recompile specific sources or force re-enrichment of stuck notes
  • Search caching for stdio MCP — repeated queries served from 30s TTL cache
  • Async vault scan in MCP fallback — prevents event-loop blocking during standalone MCP startup

Tests & Benchmarks

  • 8 performance benchmarks covering search, context building, MCP startup, and cache hits
  • 254 total tests passing

Docs

  • Added roadmap/ with bulk-ingest implementation plan

v0.5.2

06 May 20:58

Choose a tag to compare

Documentation

  • Update README banner to new PULSE8.ai cover image

v0.5.1

06 May 20:51

Choose a tag to compare

Documentation

  • Add PULSE8.ai banner logo to README
  • Add build, release, and license status badges
  • Add language and framework badges (Python, FastAPI, MCP, Docker, NetworkX)