Skip to content
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

Releases: glasschan/qdrant-hermes-integration

v0.9.2

Choose a tag to compare

@glasschan glasschan released this 30 May 06:45

What's Changed

Code Fixes

  • consolidation: paginate _fetch_all_points() with next_offset loop
  • store: move embed import to top-level (no circular dep)
  • provider: add dual circuit breaker documentation

Tests

  • 58 unit tests with conftest mocks for Hermes dependencies
  • Covers: config validation, consolidation math, file indexing, store completeness scoring

Repo Cleanup

  • Remove stale plan files (PLAN.md, PLAN_v0.6.md, ROADMAP.md)
  • Remove tracked __pycache__/*.pyc from git
  • Update SKILL.md and README to reflect current state
  • Strengthen .gitignore

Full Changelog: v0.9.0...v0.9.2

v0.9.0 — Production Hardening

Choose a tag to compare

@glasschan glasschan released this 29 May 19:48

v0.9.0 — Robustness, Smart Memory, Production Hardening

v0.7.0 — Robustness & Quality Guard

  • Circuit breaker for embedding API (EmbeddingCircuitBreaker in embeddings.py)
  • Priority-based search filter (min_priority param on qdrant_search)
  • Memory evolution tracking (evolved_from field on qdrant_remember)
  • Backfill tool (qdrant_backfill — batch update missing fields on legacy points)
  • Quick consolidation mode (skip O(n²) dedup, stats only)

v0.8.0 — Smart Memory

  • Topic clustering (new clustering.py + qdrant_topics tool)
  • Auto-extract key facts at session end (smart filtering, priority=4)
  • Smart prefetch (skip embedding call on short conversations <3 turns)
  • Dedup quality score (completeness-based — keep richer memory)

v0.9.0 — Production Hardening

  • Numpy batch cosine similarity (with pure-Python fallback)
  • Incremental consolidation (track last run via metadata point)
  • Memory lifecycle (auto_stale + auto_prune, disabled by default)
  • Cross-session context bridge (first-turn priority memory injection)
  • Config validation with range checks and fallback defaults

Bug Fixes (from v0.6.2)

  • Hook double-fire dedup guard (Hermes dual-path instantiation)
  • Dynamic VERSION read in system prompt
  • warnings.filterwarnings() instead of broken simplefilter()
  • Stale detection: priority field with importance backward compat
  • Consolidation metadata uses valid UUID (not string)

Stats

  • 8 tools: profile, search, remember, forget, index, consolidate, backfill, topics
  • Codebase: 2,579 → 3,927 lines (+1,348)
  • Test: 25/25 scenarios pass (remember, dedup, min_priority, backfill, consolidation, clustering, forget, edge cases, incremental, profile, tags, stats)

v0.6.2 — Stale detection fix + hook dedup (redone)

Choose a tag to compare

@glasschan glasschan released this 29 May 19:09

Bug Fixes

  • Stale detection fixed: Now reads priority field with fallback to importance for legacy data. Old points without priority get importance→priority conversion.
  • Hook double-fire fixed: Dedup guard prevents hooks firing twice per turn when Hermes instantiates provider twice.
  • Dynamic version: system_prompt_block() reads VERSION file instead of hardcoded v0.6.0.
  • Scoped warnings: catch_warnings() context manager instead of global filterwarnings().

Important

This is a redo of v0.6.2. The previous version incorrectly removed scope, learning_store, and scope branching. This version preserves ALL v0.6.1 self-healing features and only adds the correct fixes on top.

v0.6.1 — Hook-based lifecycle + garbage cleanup

Choose a tag to compare

@glasschan glasschan released this 29 May 18:25

v0.6.1 — Hook-based lifecycle + garbage cleanup + Ark embedding

Hook registration bypass

  • Fixed: Hermes _ProviderCollector.register_hook() was a silent no-op
  • Provider now directly writes to PluginManager._hooks during initialize()
  • 3 hooks registered: pre_llm_call, post_llm_call, on_session_end

Garbage cleanup

  • Disabled auto-extraction of "Session topics" summaries (polluted search)
  • Disabled "Session ended" markers (no value, session DB handles this)
  • Cleaned 440 conversation entries from DB → 53 high-quality memories remain

Prefetch quality

  • Category boost: conversation excluded (0.0x), corrections boosted (1.3x)
  • Post-filter: min score 0.2, conversation category excluded
  • Fetches top_k * 3 to avoid starving after filtering

Embedding model

  • Switched back to Ark doubao-embedding-vision (from qwen3-embedding-4b)
  • Recall improved 3-10x for Chinese queries
  • Scores: 0.35-0.62 vs 0.01-0.16

Files changed

  • plugin.yaml — v0.6.1, added provides_hooks
  • __init__.py — updated register() with documentation
  • provider.py — hook adapters, garbage cleanup, prefetch rework

v0.6.0 — Self-Healing Evolving Memory

Choose a tag to compare

@glasschan glasschan released this 28 May 21:08

Self-Healing Evolving Memory System

What's New

Phase 1: Enhanced Auto-Context Injection

  • Prefetch top 8 (was 5) — broader memory surfacing per turn
  • Category boost — corrections (1.3x), instructions (1.2x), preferences (1.15x) surface first
  • Priority boost — P1/P2 memories get slight score bump
  • Score threshold 0.4 — filters noise from low-relevance results

Phase 2: Correction Tagging + Priority

  • New category: correction — tag user behavior corrections
  • Priority field (1-5) — P1 = critical rule, P5 = low-priority fact
  • Origin field — track how memory was created (user_correction, agent_discovery, explicit, auto)
  • Payload indexes on priority + origin for fast filtered queries

Phase 3: Consolidation + Evolution

  • Correction pattern detection — clusters corrections by topic, suggests skill extraction when 3+ on same topic
  • Evolution suggestions — category imbalance, priority inflation, health checks
  • on_memory_write hook — mirrors local memory writes to Qdrant
  • on_session_end hook — auto-extracts session summaries

Config (all env-var overridable)

  • QDRANT_PREFETCH_TOP_K (default: 8)
  • QDRANT_PREFETCH_SCORE_THRESHOLD (default: 0.4)
  • QDRANT_CORRECTION_TOPIC_THRESHOLD (default: 3)
  • QDRANT_SESSION_END_EXTRACT (default: true)

Backward Compatibility

Fully backward compatible with v0.5.0 data. Priority defaults to 3, origin defaults to 'explicit'.

Files Changed

  • config.py — new constants + config keys
  • schemas.py — correction category, priority, origin fields
  • store.py — category boost, priority-aware storage, new payload indexes
  • provider.py — enhanced prefetch, on_memory_write, on_session_end, rich system prompt
  • consolidation.py — correction patterns, evolution suggestions
  • VERSION + plugin.yaml — v0.6.0

v0.5.0 — Bug Fixes, Improvements & OpenRouter Support

Choose a tag to compare

@glasschan glasschan released this 28 May 20:37

Critical Fixes

  • Dedup vector update: store.add() now uses upsert() with the new vector instead of set_payload(), ensuring search accuracy after dedup updates
  • get_all() pagination: Scroll-based pagination replaces the 100-result cap — no more silently truncated memory retrieval
  • Removed dead learning.py: 258 lines of unused code eliminated

New Features

  • OpenRouter embedding support: Added dimensions parameter to embedding requests, enabling models like qwen/qwen3-embedding-4b with custom output dimensions
  • Tag filtering in search: qdrant_search now accepts optional tags parameter (AND logic)
  • Embedding retry with backoff: 3 attempts with exponential backoff (1s, 2s, 4s) — no more single-point failures
  • Embedding dimension validation: Catches vector dimension mismatches before upsert

Improvements

  • Added Store.client property for proper encapsulation
  • logger.warning() replaces 5 silent except: pass blocks
  • _load_manifest() skips vectors (with_vectors=False)
  • _find_stale_ids() batched into single Qdrant query (O(1) vs O(N))
  • Secret detection uses regex patterns (fewer false positives)
  • Fixed CLI status tool count (10 → 6)
  • Removed unused _max_chunk_tokens config

Upgrade

curl -sL https://raw.githubusercontent.com/glasschan/qdrant-hermes-integration/main/setup.sh | bash -s -- --update

Full Changelog: v0.4.1...v0.5.0

v0.4.1 — Self-healing + simplified install

Choose a tag to compare

@glasschan glasschan released this 28 May 20:00

What's New

Self-healing namespace bug fix

Hermes has a bug where user-installed memory provider plugins fail with ModuleNotFoundError: No module named '_hermes_user_memory'. The plugin now automatically detects and fixes this at load time — no Hermes patches, no dual-path install, no config changes needed.

Simplified install

  • Single path install — just ~/.hermes/plugins/hermes-memory-qdrant/, no bundled-path copy needed
  • Backups moved to ~/.hermes/plugin-backups/ to avoid version hijack by alphabetical dedup
  • plugins.enabled auto-config via Python to avoid the JSON-string YAML bug in hermes config set

Documentation

  • Complete README rewrite — features, install, tools, CLI, env vars, architecture, safety, memory hygiene
  • SKILL.md updated with self-healing docs + troubleshooting
  • All dual-path references removed

What's Fixed (from v0.4.0)

  • _hermes_user_memory namespace not registered → self-healing in __init__.py
  • Backup dirs in ~/.hermes/plugins/ hijacking version → moved to ~/.hermes/plugin-backups/
  • Complex dual-path install → single path, one-liner still works

v0.3.0 — Memory hygiene: dedup, tags, recency search, 6 tools

Choose a tag to compare

@glasschan glasschan released this 23 May 18:43

What's New

🧹 Memory Hygiene (major)

  • Pre-save dedup: qdrant_remember auto-detects semantically similar content (>0.85) and updates existing entry instead of creating duplicates
  • Payload metadata: every point now has created_at + updated_at + version for full audit trail
  • Tags support: optional string array on qdrant_remember for filtered retrieval
  • Recency-weighted search: qdrant_search accepts optional recency_weight param (0.0-1.0) to blend freshness with relevance

🗑️ Noise Reduction

  • sync_turn() OFF by default — no more auto-saved conversation garbage
  • Removed Learning Store (4 unused tools) — saves token overhead

⚡ Performance

  • Auto-payload-indexes on category (keyword) and updated_at (integer) for fast filtered queries
  • Search fetches extra results + re-ranks for recency blending

🛠️ Config

All new features configurable via env vars:

  • QDRANT_DEDUP_THRESHOLD (default: 0.85)
  • QDRANT_DEDUP_ENABLED (default: true)
  • QDRANT_AUTO_SYNC (default: false)
  • QDRANT_RECENCY_WEIGHT (default: 0.0)

📦 Tools: 10 → 6

Removed: qdrant_learning_store, qdrant_learning_search, qdrant_learning_preview, qdrant_learning_approve

v0.2.1 — Official CLI pattern, hooks field, bug fixes

Choose a tag to compare

@glasschan glasschan released this 23 May 11:01

v0.2.1 (Patch)

Changes since v0.2.0

  • CLI refactored to official Hermes subcommand pattern: status, version, update (instead of --flags)
  • plugin.yaml now declares hooks: [sync_turn] per official spec
  • Same-version skip fix: setup.sh --update correctly skips when current == latest
  • Piped mode fix: curl ... | bash -s -- --update downloads via GitHub tarball

CLI Usage

hermes hermes-memory-qdrant status    # Plugin config + env vars
hermes hermes-memory-qdrant version   # Current vs latest
hermes hermes-memory-qdrant update    # Upgrade from CLI

v0.2.0 — User-installed path, update mechanism, CLI subcommands

Choose a tag to compare

@glasschan glasschan released this 23 May 10:33

🏗️ Install Path Change

Plugin now installs to ~/.hermes/plugins/hermes-memory-qdrant/ (user-installed path) instead of the old bundled path. Aligns with official Hermes direction for standalone memory providers.

Existing users: re-run setup.sh to migrate — old bundled copy is cleaned up.

🆕 New Features

Update Mechanism

# Check for update and upgrade
curl -sL https://raw.githubusercontent.com/glasschan/qdrant-hermes-integration/main/setup.sh | bash -s -- --update

# Force reinstall
curl -sL https://raw.githubusercontent.com/glasschan/qdrant-hermes-integration/main/setup.sh | bash -s -- --force

CLI Subcommands (official Hermes pattern)

hermes hermes-memory-qdrant status    # Plugin config + env vars
hermes hermes-memory-qdrant version   # Current vs latest
hermes hermes-memory-qdrant update    # Upgrade from CLI

Version Tracking

  • plugin/VERSION — plaintext file for easy parsing
  • plugin.yaml bumped to 0.2.0 with hooks: field

🐛 Bug Fixes

  • Same-version detection: --update now correctly skips when current == latest
  • Piped mode: curl ... | bash -s -- --update now works via GitHub tarball download
  • CLI subcommands follow official register_cli(subparser) pattern

📦 Files Changed

File Change
setup.sh New PLUGIN_DIR path, --update/--force flags, version comparison, piped-mode download
README.md Install paths, Updating section, subcommand docs
SKILL.md Updated for new paths and architecture
plugin/cli.py New — subcommands: status, version, update
plugin/VERSION New — plaintext version file
plugin/plugin.yaml Bumped 0.1.0 → 0.2.0 + hooks field