Skip to content

Releases: kraklabs/mie

v1.3.7

Choose a tag to compare

@frperezr frperezr released this 17 Mar 00:13

Added

  • MCP tool filtering: New mcp.include_tools and mcp.exclude_tools options in config.yaml to control which tools are exposed to MCP clients.

Usage

# .mie/config.yaml
mcp:
  # Option A: whitelist — only expose these tools
  include_tools:
    - mie_analyze
    - mie_store
    - mie_query

  # Option B: blacklist — expose all except these
  exclude_tools:
    - mie_export
    - mie_repair
  • include_tools takes precedence when both are set
  • Filtered tools are hidden from tools/list and rejected on tools/call
  • Fully backward compatible — omitting the mcp section exposes all tools as before

Full Changelog: v1.3.6...v1.3.7

Full Changelog: v1.3.6...v1.3.7

v1.3.6

Choose a tag to compare

@frperezr frperezr released this 12 Mar 14:56

Fixed

  • Fork bomb in daemon start: forkDaemonBackground and connectOrStartDaemon spawned mie daemon start without --foreground, so each child re-forked indefinitely (~1 fork/500ms). The forked child now runs with --foreground to enter the actual daemon serve loop.

Full Changelog: v1.3.5...v1.3.6

v1.3.5

Choose a tag to compare

@frperezr frperezr released this 12 Mar 14:37

Fixed

  • Daemon child processes left as zombies: runDaemonStart and connectOrStartDaemon now call cmd.Wait() in a background goroutine after cmd.Start() to reap the forked daemon process
  • Zombie accumulation when daemon runs as PID 1 in a container without tini: a SIGCHLD handler with Wait4(WNOHANG) now reaps orphaned child processes automatically

Full Changelog: v1.3.4...v1.3.5

Full Changelog: v1.3.4...v1.3.5

v1.3.4

Choose a tag to compare

@frperezr frperezr released this 15 Feb 05:42

Fixed

  • --foreground flag ignored in mie daemon start --foreground: the parent runDaemon FlagSet had UnknownFlags = true which silently consumed --foreground before it reached runDaemonStart — the daemon would fork into background mode and exit immediately, causing systemd services to fail with a restart loop

Full Changelog: v1.3.3...v1.3.4

v1.3.3

Choose a tag to compare

@github-actions github-actions released this 15 Feb 04:07

Full Changelog: v1.3.2...v1.3.3

v1.3.2

Choose a tag to compare

@github-actions github-actions released this 15 Feb 03:51

Full Changelog: v1.3.1...v1.3.2

v1.3.1

Choose a tag to compare

@frperezr frperezr released this 14 Feb 21:17

Added

  • Auto-start daemon on mie init: the daemon is started after config creation (and interview if used), so the MCP server is immediately ready when the IDE connects

Full Changelog: v1.3.0...v1.3.1

Full Changelog: v1.3.0...v1.3.1

v1.3.0: Daemon Multi-Instance Architecture

Choose a tag to compare

@github-actions github-actions released this 14 Feb 20:51

Highlights

MIE now supports multiple concurrent MCP clients (Claude, Cursor, etc.) without "database locked" errors. A single daemon process holds the exclusive RocksDB lock and multiplexes access over a Unix domain socket.

How it works

mie --mcp  →  auto-starts daemon if not running  →  connects via socket

No configuration needed — it just works. You can also manage the daemon manually:

mie daemon start              # foreground
mie daemon start --background # detached
mie daemon stop
mie daemon status

What's New

Added

  • Daemon server serving CozoDB over Unix domain socket
  • SocketBackend client forwarding queries to daemon via newline-delimited JSON
  • mie daemon start|stop|status CLI commands
  • Auto-start daemon from mie --mcp with retry/backoff
  • MetaBackend interface for transparent local/remote storage
  • NewClientWithBackend constructor for daemon-connected clients
  • Ping-based liveness detection for stale socket cleanup
  • PID file locking with flock() to prevent concurrent starts
  • Socket permissions restricted to owner-only (0600)
  • Embedding dimension validation (daemon ↔ client)
  • 15 new tests (13 socket/daemon + 2 dimension validation)

Fixed

  • Deadlock in SocketBackend.Close() — mutex released before closing connection
  • Silent fallback to embedded mode — now fails with clear error instead
  • PID file race condition — atomic flock() instead of write-then-check
  • Stale socket from crashed daemon — ping + cleanup on connect
  • Scanner errors in daemon now logged
  • Context propagation in daemon dispatch
  • Protocol response ID validation
  • Clean disconnect via MethodClose on close

Changed

  • mie --mcp requires daemon (auto-started or manual) instead of opening CozoDB directly
  • Graceful shutdown waits up to 5s for active handlers

Full Changelog: v1.2.0...v1.3.0

Full Changelog: v1.2.0...v1.3.0

v1.2.0

Choose a tag to compare

@frperezr frperezr released this 09 Feb 04:16

What's New

Added

  • mie_repair tool: rebuilds HNSW indexes and cleans orphaned embeddings when semantic search encounters corruption
  • Embedding backfill: BackfillEmbeddings generates vectors for nodes created before embeddings were enabled
  • Semantic search result boosting: content containing the query text gets its distance halved
  • Semantic search quality filter: results with cosine distance > 0.6 (< 40% similarity) are excluded
  • Field length validation: content (50,000 chars), titles (500), descriptions (2,000), names (200)
  • mie_bulk_store pre-validation: validates all items (required fields, enums, JSON arrays, date formats) before storing any, ensuring atomic-or-nothing behavior
  • Entity upsert detection: mie_store now shows "Stored new entity" vs "Updated existing entity"
  • topic added to MCP schema node_types enum across all tools
  • Fact invalidation without replacement: replacement_id is now optional in mie_update; omitting it marks the fact invalid without creating a replacement chain
  • Edge existence check: mie_delete remove_relationship now verifies the edge exists before attempting removal
  • Invalidation target pre-validation: mie_store with invalidates verifies the target fact exists before storing the new fact
  • JSON validation for alternatives field in decisions (rejects non-JSON-array values)
  • Warning for empty role on decision_entity edges
  • Embedding coverage stats per node type in mie_status (e.g., "Facts: 47/49")
  • Decision status breakdown in mie_status (e.g., "9 active, 1 superseded")
  • Orphaned edge cleanup during node deletion

Fixed

  • Datalog export syntax (HIGH): now generates valid CozoDB :put format with proper key/value separation — previously produced unparseable output
  • mie_analyze conflict display: shows the existing fact (with ID) instead of the empty proposed fact
  • mie_query filter pass-through: category/kind filters no longer exclude Decision and Event types that don't have those fields
  • Embedding deletion: errors in DeleteNode now log warnings instead of being silently swallowed, preventing orphaned HNSW entries
  • Async embedding timeout: embedding generation now uses a 30-second timeout instead of unbounded context.Background()
  • mie_export embeddings message: only shown when actual embedding count > 0
  • MockEmbeddingProvider: uses word-level hashing so texts sharing words produce similar vectors, fixing TestIntegrationSemanticSearch

Changed

  • Edge schema refactored to support explicit key/value column separation for CozoDB :put syntax
  • Sorting and filtering logic improved in list and query operations with better error handling
  • CI workflow updated to golangci-lint-action v7
  • MCP server version bumped to 1.2.0

Full Changelog: v0.1.9...v1.2.0

Full Changelog: v0.1.9...v1.2.0

v0.1.9

Choose a tag to compare

@github-actions github-actions released this 08 Feb 22:31

Full Changelog: v0.1.8...v0.1.9