diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 81b3442..e9450de 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,4 +1,4 @@ -# Copyright (c) 2025-2026 VetCoders (https://vetcoders.io) +# Copyright (c) 2025-2026 Vetcoders (https://vetcoders.io) name: Bug Report description: Report a reproducible problem in rmcp-memex title: "[Bug]: " diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 6f7a130..231da62 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,4 +1,4 @@ -# Copyright (c) 2025-2026 VetCoders (https://vetcoders.io) +# Copyright (c) 2025-2026 Vetcoders (https://vetcoders.io) name: Feature Request description: Suggest an improvement or new capability for rmcp-memex title: "[Feature]: " diff --git a/.github/workflows/loctree-ci.yml b/.github/workflows/loctree-ci.yml index c616c7d..e8bd53c 100644 --- a/.github/workflows/loctree-ci.yml +++ b/.github/workflows/loctree-ci.yml @@ -1,7 +1,7 @@ # Loctree CI - Codebase Health Analysis # Uses loctree 0.8.0+ for dead code detection, circular imports, and health scoring # -# Co-Authored-By: Maciej & Klaudiusz +# Co-Authored-By: Vetcoders name: Loctree CI diff --git a/CHANGELOG.md b/CHANGELOG.md index 000a219..4b4a033 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,12 +96,12 @@ All notable changes to this project will be documented in this file. - Built on axum with tower-http CORS support - **TUI Wizard Enhancements** - Machine-agnostic configuration - Auto-detect hostname for per-host database paths - - **Path Mode**: Shared (`~/.ai-memories/lancedb`) or Per-Host (`~/.ai-memories/lancedb.{hostname}`) + - **Path Mode**: Shared (`~/.rmcp-servers/rmcp-memex/lancedb`) or Per-Host (`~/.rmcp-servers/rmcp-memex/lancedb.{hostname}`) - HTTP port configuration in wizard - Host info displayed in health check - Config TOML includes hostname and path mode comments - **Multi-Host Database Paths** - Separate databases per machine - - Pattern: `~/.ai-memories/lancedb.dragon`, `~/.ai-memories/lancedb.mgbook16`, etc. + - Pattern: `~/.rmcp-servers/rmcp-memex/lancedb.host-a`, `~/.rmcp-servers/rmcp-memex/lancedb.host-b`, etc. - Avoids conflicts when syncing config across machines - `MemexCfg::effective_db_path()` handles path resolution @@ -166,7 +166,7 @@ All notable changes to this project will be documented in this file. - **CLI `--auto-route` flag** - Automatic search mode selection for `search` command - Analyzes query intent and selects optimal mode (vector/bm25/hybrid) - Displays intent, confidence, and loctree suggestions when applicable - - Example: `rmcp-memex search -n memories -q "when did we buy dragon" --auto-route` + - Example: `rmcp-memex search -n memories -q "when did we buy host-a" --auto-route` - **MCP `auto_route` parameter** - Added to `rag_search` and `memory_search` tools - When `true`, QueryRouter overrides explicit `mode` parameter - Enables intelligent mode selection for AI agents @@ -296,7 +296,7 @@ All notable changes to this project will be documented in this file. - **Release Workflow** - GitHub Actions for multi-platform binary releases. - **Install Script** - `curl | sh` installer with platform detection. ```bash - curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh + curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh ``` ## [0.2.1] - 2025-12-26 @@ -365,4 +365,4 @@ All notable changes to this project will be documented in this file. --- -Vibecrafted with AI Agents by VetCoders (c)2025 The LibraxisAI Team +Vibecrafted with AI Agents by Vetcoders (c)2025 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bb12f88..dee6125 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ - + # Contributing Thanks for helping improve `rmcp-memex`. diff --git a/Cargo.toml b/Cargo.toml index c896320..0f09484 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,8 +5,8 @@ edition = "2024" build = "src/build.rs" description = "High-performance semantic indexing with MCP server and blazing-fast LanceDB vector storage." license = "MIT OR Apache-2.0" -repository = "https://github.com/VetCoders/rmcp-memex" -homepage = "https://github.com/VetCoders/rmcp-memex" +repository = "https://github.com/vetcoders/rmcp-memex" +homepage = "https://github.com/vetcoders/rmcp-memex" documentation = "https://docs.rs/rmcp-memex" readme = "README.md" keywords = ["mcp", "rag", "embeddings", "lancedb", "vector-search"] diff --git a/LICENSE b/LICENSE index cc37148..2dc5329 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025-2026 VetCoders (https://vetcoders.io) +Copyright (c) 2025-2026 Vetcoders (https://vetcoders.io) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/LICENSE-APACHE b/LICENSE-APACHE index 544ac52..e04e139 100644 --- a/LICENSE-APACHE +++ b/LICENSE-APACHE @@ -175,7 +175,7 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION END OF TERMS AND CONDITIONS -Copyright 2025-2026 VetCoders (https://vetcoders.io) +Copyright 2025-2026 Vetcoders (https://vetcoders.io) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Makefile b/Makefile index 75f8551..be33d7b 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ # rmcp-memex Makefile # ============================================================================ # Service management, build, and maintenance targets -# Created by M&K (c)2026 VetCoders +# Created by vetcoders (c)2026 # ============================================================================ # -# RAM DISK MODE (Dragon 512GB): +# RAM DISK MODE (512GB workstation): # make ramdisk-up - Create 50GB RAM disk, copy DB, start service # make ramdisk-down - Sync to disk, unmount RAM disk, stop service # make snapshot - Sync RAM disk to disk (backup) @@ -14,11 +14,11 @@ SHELL := /bin/bash BINARY := rmcp-memex INSTALL_PATH := $(HOME)/.cargo/bin/$(BINARY) -LAUNCHD_PLIST := $(HOME)/Library/LaunchAgents/ai.libraxis.rmcp-memex.plist +LAUNCHD_PLIST := $(HOME)/Library/LaunchAgents/com.vetcoders.rmcp-memex.plist # Disk paths -DB_PATH_DISK := $(HOME)/.ai-memories/lancedb -LOG_DIR := $(HOME)/.ai-memories/logs +DB_PATH_DISK := $(HOME)/.rmcp-servers/rmcp-memex/lancedb +LOG_DIR := $(HOME)/.rmcp-servers/rmcp-memex/logs HTTP_PORT := 8987 # RAM disk config (50GB = 104857600 blocks of 512 bytes) @@ -63,14 +63,14 @@ start: ## Start memex service via launchd echo "Service already running on port $(HTTP_PORT)"; \ else \ launchctl bootstrap gui/$$(id -u) $(LAUNCHD_PLIST) 2>/dev/null || \ - launchctl kickstart gui/$$(id -u)/ai.libraxis.rmcp-memex 2>/dev/null || \ + launchctl kickstart gui/$$(id -u)/com.vetcoders.rmcp-memex 2>/dev/null || \ $(INSTALL_PATH) serve --db-path $(DB_PATH) --http-port $(HTTP_PORT) --http-only & \ sleep 3; \ echo "Started memex on port $(HTTP_PORT)"; \ fi stop: ## Stop memex service - @-launchctl bootout gui/$$(id -u)/ai.libraxis.rmcp-memex 2>/dev/null + @-launchctl bootout gui/$$(id -u)/com.vetcoders.rmcp-memex 2>/dev/null @-pkill -f "$(BINARY) serve" 2>/dev/null @echo "Stopped memex service" @@ -105,7 +105,7 @@ dashboard: ## Open dashboard in browser @open http://localhost:$(HTTP_PORT)/ # ============================================================================ -# RAM DISK (Dragon 512GB - full DB in RAM) +# RAM DISK (512GB workstation - full DB in RAM) # ============================================================================ ramdisk-create: ## Create 50GB RAM disk (requires sudo for mount) diff --git a/README.md b/README.md index 6642465..ad5ce06 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # rmcp-memex -[![Crates.io](https://img.shields.io/crates/v/rmcp-memex)](https://crates.io/crates/rmcp-memex) [![License](https://img.shields.io/crates/l/rmcp-memex)](LICENSE) [![Downloads](https://img.shields.io/crates/d/rmcp-memex)](https://crates.io/crates/rmcp-memex) [![CI](https://github.com/VetCoders/rmcp-memex/actions/workflows/ci.yml/badge.svg)](https://github.com/VetCoders/rmcp-memex/actions) +[![Crates.io](https://img.shields.io/crates/v/rmcp-memex)](https://crates.io/crates/rmcp-memex) [![License](https://img.shields.io/crates/l/rmcp-memex)](LICENSE) [![Downloads](https://img.shields.io/crates/d/rmcp-memex)](https://crates.io/crates/rmcp-memex) [![CI](https://github.com/vetcoders/rmcp-memex/actions/workflows/ci.yml/badge.svg)](https://github.com/vetcoders/rmcp-memex/actions) `rmcp-memex` is a custom Rust MCP kernel providing RAG and long-term memory capabilities to AI agents via LanceDB. @@ -13,8 +13,8 @@ It exposes two explicit transport modes from a single canonical surface: ## Release Surface -- Quick install: `curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh` -- Prebuilt binary bundles: [GitHub Releases](https://github.com/VetCoders/rmcp-memex/releases) uploaded from locally built and signed artifacts +- Quick install: `curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh` +- Prebuilt binary bundles: [GitHub Releases](https://github.com/vetcoders/rmcp-memex/releases) uploaded from locally built and signed artifacts - Release runbook: [docs/RELEASE.md](docs/RELEASE.md) - Configuration guide: [docs/02_configuration.md](docs/02_configuration.md) - HTTP/SSE reference: [docs/HTTP_API.md](docs/HTTP_API.md) @@ -24,7 +24,7 @@ It exposes two explicit transport modes from a single canonical surface: ```bash # Install from the latest GitHub Release -curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh +curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh # Start the MCP server rmcp-memex serve @@ -205,7 +205,7 @@ use rmcp_memex::{MemexEngine, SearchMode}; let engine = MemexEngine::for_app("my-app", "documents").await?; // Hybrid search with BM25 + vector fusion (recommended) -let results = engine.search_hybrid("dragon mac studio", 10).await?; +let results = engine.search_hybrid("host-a mac studio", 10).await?; for r in &results { println!("{}: {} (combined: {:.2}, vector: {:.2}, bm25: {:.2})", r.id, r.document, r.combined_score, r.vector_score, r.bm25_score); @@ -497,7 +497,7 @@ MLX_MAX_BATCH_ITEMS=32 **Quick install (recommended):** ```bash -curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh +curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh ``` Prebuilt GitHub Release bundles are the canonical install path and avoid compiling @@ -597,10 +597,10 @@ Configure in `~/.claude.json`: ```bash # Open the local dashboard -rmcp-memex dashboard --db-path ~/.ai-memories/lancedb +rmcp-memex dashboard --db-path ~/.rmcp-servers/rmcp-memex/lancedb # Start daemon -rmcp-memex sse --db-path ~/.ai-memories/lancedb & +rmcp-memex sse --db-path ~/.rmcp-servers/rmcp-memex/lancedb & # Health check curl http://localhost:8997/health @@ -621,19 +621,19 @@ curl -N "http://localhost:8997/sse/search?query=context&namespace=agent1&limit=5 ### Multi-Host Database Paths -For setups with multiple machines (e.g., dragon, mgbook16), use per-host database paths: +For setups with multiple machines (e.g., host-a, host-b), use per-host database paths: ```bash # Per-host paths (each machine gets own database) -rmcp-memex serve --db-path ~/.ai-memories/lancedb.$(hostname -s) +rmcp-memex serve --db-path ~/.rmcp-servers/rmcp-memex/lancedb.$(hostname -s) # Or use the wizard for machine-agnostic configuration rmcp-memex wizard ``` The TUI wizard auto-detects hostname and offers: -- **Shared mode**: `~/.ai-memories/lancedb` (same path everywhere) -- **Per-host mode**: `~/.ai-memories/lancedb.dragon`, `~/.ai-memories/lancedb.mgbook16`, etc. +- **Shared mode**: `~/.rmcp-servers/rmcp-memex/lancedb` (same path everywhere) +- **Per-host mode**: `~/.rmcp-servers/rmcp-memex/lancedb.host-a`, `~/.rmcp-servers/rmcp-memex/lancedb.host-b`, etc. ### Configuration (TOML) @@ -685,7 +685,7 @@ Intelligent query intent detection for automatic search mode selection: ```bash # Auto-detect query intent and select optimal mode -rmcp-memex search -n memories -q "when did we buy dragon" --auto-route +rmcp-memex search -n memories -q "when did we buy host-a" --auto-route # Output: Query intent: temporal (confidence: 0.70) # Selects: hybrid mode with date boosting @@ -695,7 +695,7 @@ rmcp-memex search -n code -q "who imports main.rs" --auto-route # Consider: loctree query --kind who-imports --target main.rs # Deep exploration with all onion layers -rmcp-memex dive -n memories -q "dragon" --verbose +rmcp-memex dive -n memories -q "host-a" --verbose ``` **Intent Types:** @@ -817,5 +817,5 @@ Add to `~/.claude.json`: --- -Vibecrafted with AI Agents by VetCoders (c)2025 The LibraxisAI Team -Co-Authored-By: [Maciej](void@div0.space) & [Klaudiusz](the1st@whoai.am) +Vibecrafted with AI Agents by Vetcoders (c)2025 +Co-Authored-By: Vetcoders diff --git a/SECURITY.md b/SECURITY.md index e71e32d..01b36ce 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,4 +1,4 @@ - + # Security Policy ## Supported Versions @@ -11,7 +11,7 @@ ## Reporting a Vulnerability Please use GitHub Security Advisories for responsible disclosure: -https://github.com/VetCoders/rmcp-memex/security/advisories/new +https://github.com/vetcoders/rmcp-memex/security/advisories/new If GitHub Advisories are unavailable, email security@vetcoders.io with a summary, affected version, reproduction steps, and expected impact. diff --git a/ai-hooks/README.md b/ai-hooks/README.md index de97d1f..3b1f6c1 100644 --- a/ai-hooks/README.md +++ b/ai-hooks/README.md @@ -42,10 +42,10 @@ Add to `~/.claude/settings.json`: | Variable | Default | Description | |----------|---------|-------------| -| `MEMEX_DB_PATH` | `~/.ai-memories/lancedb` | Path to LanceDB | +| `MEMEX_DB_PATH` | `~/.rmcp-servers/rmcp-memex/lancedb` | Path to LanceDB | | `MEMEX_NAMESPACE` | `cloud` | Default namespace to search | | `MEMEX_LIMIT` | `3` | Max results to return | --- -Vibecrafted with AI Agents by VetCoders (c)2026 The LibraxisAI Team +Vibecrafted with AI Agents by Vetcoders (c)2026 diff --git a/ai-hooks/memex-context.sh b/ai-hooks/memex-context.sh index 765d014..f00d5fa 100755 --- a/ai-hooks/memex-context.sh +++ b/ai-hooks/memex-context.sh @@ -24,7 +24,7 @@ export PATH="$HOME/.cargo/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:$PA # # CONFIGURATION (via environment): # MEMEX_AUGMENT=0 - Disable all augmentation -# MEMEX_DB_PATH - Path to lancedb (default: ~/.ai-memories/lancedb) +# MEMEX_DB_PATH - Path to lancedb (default: ~/.rmcp-servers/rmcp-memex/lancedb) # MEMEX_NAMESPACE=cloud - Namespace to search # MEMEX_LIMIT=3 - Max memories to return # @@ -33,7 +33,7 @@ export PATH="$HOME/.cargo/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:$PA # - jq for JSON parsing (optional) # # ============================================================================ -# Created by M&K (c)2026 The LibraxisAI Team +# Created by vetcoders (c)2026 # ============================================================================ set -uo pipefail @@ -42,7 +42,7 @@ set -uo pipefail # CONFIGURATION # ============================================================================ MEMEX_AUGMENT="${MEMEX_AUGMENT:-1}" -MEMEX_DB_PATH="${MEMEX_DB_PATH:-$HOME/.ai-memories/lancedb}" +MEMEX_DB_PATH="${MEMEX_DB_PATH:-$HOME/.rmcp-servers/rmcp-memex/lancedb}" MEMEX_NAMESPACE="${MEMEX_NAMESPACE:-cloud}" MEMEX_LIMIT="${MEMEX_LIMIT:-3}" diff --git a/ai-hooks/memex-startup.sh b/ai-hooks/memex-startup.sh index 461effe..19c138e 100755 --- a/ai-hooks/memex-startup.sh +++ b/ai-hooks/memex-startup.sh @@ -17,7 +17,7 @@ export PATH="$HOME/.cargo/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:$PA # - SessionStart hook # # ============================================================================ -# Created by M&K (c)2026 The LibraxisAI Team +# Created by vetcoders (c)2026 # ============================================================================ set -uo pipefail @@ -25,7 +25,7 @@ set -uo pipefail # ============================================================================ # CONFIGURATION # ============================================================================ -MEMEX_DB_PATH="${MEMEX_DB_PATH:-$HOME/.ai-memories/lancedb}" +MEMEX_DB_PATH="${MEMEX_DB_PATH:-$HOME/.rmcp-servers/rmcp-memex/lancedb}" MEMEX_NAMESPACE="${MEMEX_NAMESPACE:-cloud}" MEMEX_LIMIT="${MEMEX_LIMIT:-3}" CACHE_FILE="/tmp/memex-startup-$(echo "$PWD" | md5 2>/dev/null || echo "$PWD" | md5sum | cut -c1-8).cache" diff --git a/docs/01_security.md b/docs/01_security.md index c0a1a24..32531c7 100644 --- a/docs/01_security.md +++ b/docs/01_security.md @@ -21,7 +21,7 @@ Zamiast hardcoded ograniczenia do `$HOME` i `cwd`, wprowadzono konfigurowalną l # ~/.rmcp-servers/rmcp-memex/config.toml allowed_paths = [ "~", # Home directory - "/Volumes/LibraxisShare/data", # External volume + "/Volumes/SharedDrive/data", # External volume "/opt/shared/documents" # Shared directory ] ``` @@ -334,5 +334,5 @@ key_derivation = "argon2id" --- -Vibecrafted with AI Agents by VetCoders (c)2025 The LibraxisAI Team -Co-Authored-By: [Maciej](void@div0.space) & [Klaudiusz](the1st@whoai.am) +Vibecrafted with AI Agents by Vetcoders (c)2025 +Co-Authored-By: Vetcoders diff --git a/docs/02_configuration.md b/docs/02_configuration.md index acd5f86..39eddf0 100644 --- a/docs/02_configuration.md +++ b/docs/02_configuration.md @@ -79,7 +79,7 @@ log_level = "info" # Jeśli puste, domyślnie $HOME i current working directory allowed_paths = [ "~", - "/Volumes/LibraxisShare/Klaudiusz", + "/Volumes/SharedDrive/notes", "/opt/shared/documents" ] @@ -264,5 +264,5 @@ rmcp-memex serve --log-level trace --- -Vibecrafted with AI Agents by VetCoders (c)2025 The LibraxisAI Team -Co-Authored-By: [Maciej](void@div0.space) & [Klaudiusz](the1st@whoai.am) +Vibecrafted with AI Agents by Vetcoders (c)2025 +Co-Authored-By: Vetcoders diff --git a/docs/ARCHITECTURE_ACTUAL.md b/docs/ARCHITECTURE_ACTUAL.md deleted file mode 100644 index c47eb8a..0000000 --- a/docs/ARCHITECTURE_ACTUAL.md +++ /dev/null @@ -1,253 +0,0 @@ -# Memex Architecture - ACTUAL (Stan Faktyczny) - -```mermaid -flowchart TB - subgraph ENTRY["Entry Points"] - MCP["MCP Tools
(stdio JSON-RPC)"] - HTTP["HTTP API
(REST + SSE)"] - CLI["CLI
(commands)"] - end - - subgraph VALIDATION["Security Layer"] - PATH["Path Validation
• expand ~
• detect ..
• canonicalize
• whitelist check"] - TOKEN["Namespace Tokens
• create/revoke
• per-namespace auth"] - end - - subgraph EXTRACTION["Content Extraction"] - TXT["Plain Text (.txt)"] - PDF["PDF (.pdf)
pdf_extract"] - JSON_SMART["Smart JSON Detection
• Claude.ai export
• ChatGPT export
• Session essence
• Generic array"] - MD["Markdown (.md)
section extraction"] - CODE["Code (.rs/.py/.js)
❌ NO semantic chunking
treated as plain text"] - end - - subgraph DEDUP["Deduplication"] - HASH["SHA256 Hash
content_hash"] - CHECK["Storage Check
has_content_hash()"] - SKIP["Skip if EXISTS"] - end - - subgraph SLICING["Slicing Strategy"] - FLAT["FLAT MODE
512-char chunks
128-char overlap"] - ONION["ONION MODE (default)
4 hierarchical layers:
OUTER → MIDDLE → INNER → CORE"] - FAST["ONION-FAST
2 layers only
OUTER ↔ CORE"] - end - - subgraph EMBEDDING["Embedding Generation"] - MLX_ACTUAL["MLX Embedder
❌ Port: 12345 (not 8765)
Model: Qwen3-Embedding-8B-4bit-DWQ
Dims: 4096"] - OLLAMA["Ollama (fallback)
Port: 11434
qwen3-embedding:8b"] - BATCH["Smart Batching
max 64 items
max 128K chars"] - NO_VALIDATE["❌ NO Dimension Validation
Silent corruption possible"] - RETRY["Retry with Backoff
1s → 30s"] - end - - subgraph STORAGE["LanceDB Storage"] - RAMDISK["RAM Disk
/Volumes/MemexRAM
50GB HFS+"] - LANCE["LanceDB
~28GB vectors"] - SCHEMA["Schema v3
• id, namespace
• vector[4096]
• layer, parent_id
• content_hash"] - NO_ATOMIC["❌ NO Atomic Writes
Partial failures = ghost docs"] - end - - subgraph SEARCH["Search Pipeline"] - ROUTER["Query Router
auto-detect mode"] - VECTOR["Vector Search
ANN via IVF-HNSW"] - BM25["BM25 Full-Text"] - HYBRID["Hybrid Fusion
RRF scoring"] - NO_RERANK["❌ Reranker Optional
Falls back to cosine"] - end - - subgraph LAUNCHD["LaunchD Services"] - LD_RAMDISK["ai.libraxis.memex-ramdisk
Create 50GB RAM disk"] - LD_MLX_ACTUAL["ai.libraxis.mlx-embedding
❌ Port 12345 (not 8765)
WorkDir: vista-brain/scripts"] - LD_MEMEX["ai.libraxis.rmcp-memex
Port 8997 server
Uses RAM disk"] - LD_SNAPSHOT["ai.libraxis.memex-snapshot
Periodic sync"] - end - - subgraph E2E_TESTS["E2E Tests"] - NO_TEST_INDEX["❌ MISSING
test_index_search"] - NO_TEST_MCP["❌ MISSING
test_mcp_tools"] - NO_TEST_HTTP["❌ MISSING
test_http_api"] - NO_TEST_DEDUP["❌ MISSING
test_deduplication"] - end - - subgraph CONFIG["Configuration"] - NO_CONFIG["❌ NO config.toml
Uses env vars + hardcoded defaults"] - NO_MLX_FOLDER["❌ ~/.ai-memories/mlx-embeddings/
Contains unrelated project"] - end - - %% Flow connections - ENTRY --> VALIDATION - VALIDATION --> EXTRACTION - EXTRACTION --> DEDUP - DEDUP -->|NEW| SLICING - DEDUP -->|EXISTS| SKIP - SLICING --> EMBEDDING - EMBEDDING --> STORAGE - - %% Search flow - ENTRY --> SEARCH - SEARCH --> STORAGE - - %% LaunchD flow - LD_RAMDISK -->|creates| RAMDISK - LD_MLX_ACTUAL -->|provides| MLX_ACTUAL - LD_MEMEX -->|uses| RAMDISK - LD_MEMEX -.->|should call| MLX_ACTUAL - LD_SNAPSHOT -->|syncs| RAMDISK - - %% Styling - Green = works, Red = broken/missing, Yellow = partial - classDef works fill:#2d5a2d,stroke:#4a4,color:#fff - classDef broken fill:#5a2d2d,stroke:#a44,color:#fff - classDef partial fill:#5a5a2d,stroke:#aa4,color:#fff - classDef missing fill:#3d3d3d,stroke:#666,color:#888 - - class PATH,TOKEN,TXT,PDF,JSON_SMART,MD,HASH,CHECK,SKIP,FLAT,ONION,FAST,BATCH,RETRY,RAMDISK,LANCE,SCHEMA,ROUTER,VECTOR,BM25,HYBRID,LD_RAMDISK,LD_MEMEX,LD_SNAPSHOT works - class NO_VALIDATE,NO_ATOMIC,NO_RERANK,MLX_ACTUAL,LD_MLX_ACTUAL,NO_CONFIG,NO_MLX_FOLDER broken - class CODE,OLLAMA partial - class NO_TEST_INDEX,NO_TEST_MCP,NO_TEST_HTTP,NO_TEST_DEDUP missing -``` - -## Status: Co działa, co nie - -### ✅ DZIAŁA (zielone) -| Komponent | Status | Uwagi | -|-----------|--------|-------| -| Path Validation | ✅ | Pełna walidacja traversal | -| Namespace Tokens | ✅ | create/revoke/verify | -| Plain Text extraction | ✅ | UTF-8 read | -| PDF extraction | ✅ | pdf_extract crate | -| Smart JSON detection | ✅ | Claude/ChatGPT/Session | -| Markdown extraction | ✅ | Section-aware | -| Deduplication | ✅ | SHA256 + storage check | -| Flat/Onion/Fast slicing | ✅ | Wszystkie 3 tryby | -| Smart Batching | ✅ | 64 items / 128K chars | -| Retry with Backoff | ✅ | 1s → 30s | -| RAM Disk | ✅ | 50GB /Volumes/MemexRAM | -| LanceDB | ✅ | 28GB, schema v3 | -| Query Router | ✅ | auto-detect | -| Vector/BM25/Hybrid search | ✅ | Wszystkie tryby | -| LaunchD services | ✅ | ramdisk, memex, snapshot | - -### ❌ NIE DZIAŁA / NIE SPIĘTE (czerwone) -| Komponent | Problem | Impact | -|-----------|---------|--------| -| **MLX Port w kodzie** | Kod domyślnie 12345, serwer na **8765** | Config mismatch | -| **Atomic Writes** | BRAK - ghost docs przy crash | **HIGH** | -| **Reranker** | Optional, fallback to cosine | Słabsze wyniki | -| **config.toml** | BRAK - hardcoded defaults | Trudne zarządzanie | - -### ✅ NAPRAWIONE (w tej sesji) -| Komponent | Status | Uwagi | -|-----------|--------|-------| -| **Dimension Validation** | ✅ DODANE | `test_dimension()` w `EmbeddingClient::new()` | -| **E2E Tests** | ✅ DODANE | `tests/e2e_pipeline.rs` - 5 testów | -| **TextIntegrityMetrics** | ✅ DODANE | >90% threshold, audit command | -| **DimensionAdapter** | ✅ DODANE | Cross-dim search 1024/2048/4096 | -| **Audit/Purge commands** | ✅ DODANE | `rmcp-memex audit`, `purge-quality` | - -### ⚠️ CZĘŚCIOWE (żółte) -| Komponent | Status | Uwagi | -|-----------|--------|-------| -| Code extraction | ⚠️ | Traktowane jako plain text, brak AST | -| Ollama | ⚠️ | Działa jako fallback, ale to nie docelowy design | - -### ❌ CAŁKOWICIE BRAKUJE (szare) -| Komponent | Status | -|-----------|--------| -| E2E test: index → search | ❌ BRAK | -| E2E test: MCP tools | ❌ BRAK | -| E2E test: HTTP API | ❌ BRAK | -| E2E test: deduplication | ❌ BRAK | - ---- - -## Szczegóły LaunchD Services - -### Aktualny stan usług: -``` -PID STATUS SERVICE -10721 -15 ai.libraxis.rmcp-memex ← działa, port 8997 -46656 137 ai.libraxis.mlx-embedding ← działa, port 12345 (!) -46670 137 ai.libraxis.mlx-reranker ← działa -46743 1 ai.libraxis.mlx-batch-server -- 0 ai.libraxis.memex-snapshot -- 1 ai.libraxis.mlx-batch-runner -``` - -### ai.libraxis.mlx-embedding -``` -Port: 12345 (❌ powinien być 8765) -WorkDir: vista-brain/scripts/ (❌ powinien być ~/.ai-memories/mlx-embeddings/) -Script: mlx_embedding_server.py -Model: Qwen3-Embedding-8B-4bit-DWQ -Dims: 4096 ✅ -``` - -### ai.libraxis.rmcp-memex -``` -Port: 8997 ✅ -DB Path: /Volumes/MemexRAM/lancedb ✅ -Mode: --http-only ✅ -PathState: /Volumes/MemexRAM/lancedb (czeka na RAM disk) ✅ -``` - -### ai.libraxis.memex-ramdisk -``` -Size: 50GB (104857600 sectors) -Mount: /Volumes/MemexRAM ✅ -Source: ~/.ai-memories/lancedb -Sync: rsync -a ✅ -``` - ---- - -## Krytyczne luki do naprawy - -### 1. CRITICAL: Dimension Validation -```rust -// BRAK w embeddings/mod.rs -// Jeśli embedder zwróci 1024-dim: -// → Silent write to LanceDB -// → Cała baza corrupted -// → Brak recovery -``` - -### 2. HIGH: Atomic Batch Writes -```rust -// BRAK w storage/mod.rs -// Jeśli crash w połowie batch: -// → Ghost documents -// → Dedup nie złapie (inny hash?) -// → Brak rollback -``` - -### 3. MEDIUM: Port Mismatch -``` -OBIECANE: MLX embedder na 8765 -FAKTYCZNE: MLX embedder na 12345 - -rmcp-memex używa provider cascade: -1. Ollama localhost:11434 -2. Fallback dragon:12345 - -Więc działa, ale przez Ollama, nie przez dedykowany MLX! -``` - -### 4. MEDIUM: Missing Config -``` -OBIECANE: ~/.ai-memories/config.toml -FAKTYCZNE: Brak pliku - -Wszystko przez env vars lub hardcoded defaults. -Trudne do zarządzania na wielu maszynach. -``` - ---- - -## Propozycja naprawy (kolejność priorytetów) - -1. **[CRITICAL]** Dodać dimension validation w `EmbeddingClient::new()` -2. **[HIGH]** Implementować batch transaction z rollback -3. **[MEDIUM]** Zmienić port MLX na 8765 lub zaktualizować config memex -4. **[MEDIUM]** Stworzyć `~/.ai-memories/config.toml` z pełną konfiguracją -5. **[LOW]** Napisać testy E2E diff --git a/docs/ARCHITECTURE_COMPARISON.md b/docs/ARCHITECTURE_COMPARISON.md deleted file mode 100644 index e071b7a..0000000 --- a/docs/ARCHITECTURE_COMPARISON.md +++ /dev/null @@ -1,230 +0,0 @@ -# Memex Architecture Comparison: PROMISED vs ACTUAL - -## Quick Status - -``` -╔═══════════════════════════════════════════════════════════════════════════╗ -║ OVERALL STATUS: ~85% Complete ║ -╠═══════════════════════════════════════════════════════════════════════════╣ -║ ✅ Working: 20 components ║ -║ ✅ Fixed: 5 components (in this session) ║ -║ ❌ Broken: 2 components (1 HIGH) ║ -║ ⚠️ Partial: 2 components ║ -║ ⚠️ Config: Port mismatch (works via Ollama fallback) ║ -╚═══════════════════════════════════════════════════════════════════════════╝ -``` - ---- - -## Side-by-Side Comparison - -| Component | PROMISED | ACTUAL | Status | -|-----------|----------|--------|--------| -| **Entry Points** | -| MCP Tools | JSON-RPC over stdio | JSON-RPC over stdio | ✅ | -| HTTP API | REST + SSE on 8997 | REST + SSE on 8997 | ✅ | -| CLI | index/search/optimize | index/search/optimize | ✅ | -| **Security** | -| Path Validation | expand ~ / detect .. / canonicalize | expand ~ / detect .. / canonicalize | ✅ | -| Namespace Tokens | create/revoke/verify | create/revoke/verify | ✅ | -| **Extraction** | -| Plain Text | UTF-8 read | UTF-8 read | ✅ | -| PDF | pdf_extract crate | pdf_extract crate | ✅ | -| JSON (smart) | Claude/ChatGPT/Session detection | Claude/ChatGPT/Session detection | ✅ | -| Markdown | Section extraction | Section extraction | ✅ | -| Code | Semantic chunking (AST) | Plain text only | ⚠️ Partial | -| **Deduplication** | -| Hash Algorithm | SHA256 | SHA256 | ✅ | -| Storage Check | has_content_hash() | has_content_hash() | ✅ | -| **Slicing** | -| Flat Mode | 512-char / 128 overlap | 512-char / 128 overlap | ✅ | -| Onion Mode | 4 layers (outer→core) | 4 layers (outer→core) | ✅ | -| Onion-Fast | 2 layers | 2 layers | ✅ | -| **Embedding** | -| Embedder Port | **8765** | **12345** | ❌ Mismatch | -| Embedder Location | `~/.ai-memories/mlx-embeddings/` | `vista-brain/scripts/` | ❌ Wrong | -| Model | Qwen3-Embedding-8B | Qwen3-Embedding-8B-4bit-DWQ | ✅ | -| Dimensions | 4096 | 4096 | ✅ | -| **Dimension Validation** | **Fail fast on mismatch** | **✅ test_dimension() in EmbeddingClient::new()** | ✅ FIXED | -| **DimensionAdapter** | Cross-dim 1024/2048/4096 | **✅ expand/contract adapters** | ✅ FIXED | -| Batching | 64 items / 128K chars | 64 items / 128K chars | ✅ | -| Retry | Exponential backoff | Exponential backoff | ✅ | -| Fallback | Dragon remote | Ollama (unintended) | ⚠️ Partial | -| **Storage** | -| RAM Disk | 50GB /Volumes/MemexRAM | 50GB /Volumes/MemexRAM | ✅ | -| LanceDB Size | ~28GB | ~28GB | ✅ | -| Schema | v3 with content_hash | v3 with content_hash | ✅ | -| **Atomic Writes** | **Transaction rollback** | **NONE - ghost docs** | ❌ HIGH | -| **Search** | -| Query Router | auto-detect | auto-detect | ✅ | -| Vector Search | ANN via IVF-HNSW | ANN via IVF-HNSW | ✅ | -| BM25 | Full-text | Full-text | ✅ | -| Hybrid | RRF fusion | RRF fusion | ✅ | -| Reranker | Dedicated on 8766 | Optional (cosine fallback) | ❌ Weak | -| **LaunchD** | -| memex-ramdisk | Create 50GB | Create 50GB | ✅ | -| mlx-embedding | Port 8765 | Port 12345 | ❌ Mismatch | -| rmcp-memex | Port 8997, uses RAM | Port 8997, uses RAM | ✅ | -| memex-snapshot | Periodic sync | Periodic sync | ✅ | -| **Config** | -| Config File | `~/.ai-memories/config.toml` | **NONE** | ❌ Missing | -| **Quality Assurance** | -| TextIntegrityMetrics | >90% threshold | **✅ compute() + recommendation()** | ✅ FIXED | -| Audit command | Per-namespace check | **✅ rmcp-memex audit** | ✅ FIXED | -| Purge command | Remove low-quality | **✅ rmcp-memex purge-quality** | ✅ FIXED | -| **Testing** | -| E2E: pipeline | Required | **✅ tests/e2e_pipeline.rs (5 tests)** | ✅ FIXED | -| E2E: MCP tools | Required | **MISSING** | ❌ | -| E2E: HTTP API | Required | **MISSING** | ❌ | -| Unit tests | Required | ~20 tests | ✅ | - ---- - -## Visual Comparison - -### PROMISED Architecture -``` -┌─────────────────────────────────────────────────────────────────┐ -│ ENTRY POINTS │ -│ MCP (stdio) │ HTTP (8997) │ CLI │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ SECURITY + EXTRACTION │ -│ Path Validation │ Token Auth │ PDF/JSON/MD/Code extraction │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ DEDUPLICATION │ -│ SHA256 → check storage → skip if exists │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ SLICING (Flat/Onion/Fast) │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ MLX EMBEDDER (port 8765) │ -│ ~/.ai-memories/mlx-embeddings/ │ Qwen3-Embedding-8B │ 4096d │ -│ ✓ DIMENSION VALIDATION (fail fast) │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ LANCEDB (RAM DISK) │ -│ /Volumes/MemexRAM │ 50GB │ ~28GB vectors │ schema v3 │ -│ ✓ ATOMIC BATCH WRITES (transaction) │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ SEARCH │ -│ Router → Vector/BM25/Hybrid → Reranker (8766) → Results │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ E2E TESTS │ -│ index→search │ MCP tools │ HTTP API │ deduplication │ -└─────────────────────────────────────────────────────────────────┘ -``` - -### ACTUAL Architecture (Updated) -``` -┌─────────────────────────────────────────────────────────────────┐ -│ ENTRY POINTS │ -│ MCP (stdio) │ HTTP (8997) │ CLI (rmcp-memex) │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ SECURITY + EXTRACTION │ -│ Path Validation │ Token Auth │ PDF/JSON/MD │ ⚠️Code=text │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ DEDUPLICATION │ -│ SHA256 → check storage → skip if exists │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ SLICING (Flat/Onion/Fast) │ -│ ✅ TextIntegrityMetrics (>90% threshold) │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ ⚠️ MLX EMBEDDER (port 12345, not 8765) │ -│ vista-brain/scripts/ │ Qwen3-Embedding-8B-4bit │ 4096d │ -│ ✅ DIMENSION VALIDATION (test_dimension()) │ -│ ✅ DimensionAdapter (cross-dim 1024/2048/4096) │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ LANCEDB (RAM DISK) │ -│ /Volumes/MemexRAM │ 50GB │ ~28GB vectors │ schema v3 │ -│ ❌ NO ATOMIC WRITES (ghost docs on crash) │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ SEARCH │ -│ Router → Vector/BM25/Hybrid → ⚠️ cosine fallback → Results │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ ✅ QUALITY ASSURANCE │ -│ ✅ E2E pipeline │ ✅ audit cmd │ ✅ purge cmd │ ❌ HTTP tests │ -└─────────────────────────────────────────────────────────────────┘ -``` - ---- - -## Priority Fix List - -### ✅ FIXED (This Session) -1. ~~**Dimension Validation**~~ → ✅ `test_dimension()` in `EmbeddingClient::new()` -2. ~~**E2E Tests**~~ → ✅ `tests/e2e_pipeline.rs` (5 tests) -3. ~~**Quality Metrics**~~ → ✅ `TextIntegrityMetrics` with >90% threshold -4. ~~**Cross-dim Search**~~ → ✅ `DimensionAdapter` (1024/2048/4096) -5. ~~**Audit/Purge**~~ → ✅ `rmcp-memex audit` + `purge-quality` commands - -### 🟠 HIGH (Data Integrity Risk) -1. **Atomic Batch Writes** - Implement transaction wrapper - ```rust - // Wrap batch operations in transaction - storage.begin_transaction()?; - for doc in batch { - storage.add(doc)?; - } - storage.commit()?; // or rollback on error - ``` - -### 🟡 MEDIUM (Config/Port Mismatch) -2. **MLX Port** - Change launch agent to port 8765 OR update memex config -3. **Config File** - Create `~/.ai-memories/config.toml` with all settings - -### 🟢 LOW (Nice to Have) -4. **Code Semantic Chunking** - Add AST-based chunking for .rs/.py/.js -5. **Reranker Integration** - Make reranker non-optional -6. **HTTP API Tests** - Add E2E tests for REST endpoints - ---- - -## Files Created - -1. `docs/ARCHITECTURE_PROMISED.md` - Docelowa architektura (Mermaid) -2. `docs/ARCHITECTURE_ACTUAL.md` - Stan faktyczny (Mermaid + czerwone krzyże) -3. `docs/ARCHITECTURE_COMPARISON.md` - Porównanie side-by-side (ten plik) - ---- - -*Vibecrafted with AI Agents by VetCoders (c)2026 VetCoders* diff --git a/docs/ARCHITECTURE_PROMISED.md b/docs/ARCHITECTURE_PROMISED.md deleted file mode 100644 index 5e4aa23..0000000 --- a/docs/ARCHITECTURE_PROMISED.md +++ /dev/null @@ -1,127 +0,0 @@ -# Memex Architecture - PROMISED (Docelowa) - -```mermaid -flowchart TB - subgraph ENTRY["Entry Points"] - MCP["MCP Tools
(stdio JSON-RPC)"] - HTTP["HTTP API
(REST + SSE)"] - CLI["CLI
(commands)"] - end - - subgraph VALIDATION["Security Layer"] - PATH["Path Validation
• expand ~
• detect ..
• canonicalize
• whitelist check"] - TOKEN["Namespace Tokens
• create/revoke
• per-namespace auth"] - end - - subgraph EXTRACTION["Content Extraction"] - TXT["Plain Text (.txt)"] - PDF["PDF (.pdf)
pdf_extract"] - JSON_SMART["Smart JSON Detection
• Claude.ai export
• ChatGPT export
• Session essence
• Generic array"] - MD["Markdown (.md)
section extraction"] - CODE["Code (.rs/.py/.js)
semantic chunking"] - end - - subgraph DEDUP["Deduplication"] - HASH["SHA256 Hash
content_hash"] - CHECK["Storage Check
has_content_hash()"] - SKIP["Skip if EXISTS"] - end - - subgraph SLICING["Slicing Strategy"] - FLAT["FLAT MODE
512-char chunks
128-char overlap"] - ONION["ONION MODE (default)
4 hierarchical layers:
OUTER → MIDDLE → INNER → CORE"] - FAST["ONION-FAST
2 layers only
OUTER ↔ CORE"] - end - - subgraph EMBEDDING["Embedding Generation"] - MLX["MLX Native Embedder
Port: 8765
Model: Qwen3-Embedding-8B
Dims: 4096"] - BATCH["Smart Batching
max 64 items
max 128K chars"] - VALIDATE["Dimension Validation
FAIL FAST if mismatch"] - RETRY["Retry with Backoff
1s → 30s"] - end - - subgraph STORAGE["LanceDB Storage"] - RAMDISK["RAM Disk
/Volumes/MemexRAM
50GB HFS+"] - LANCE["LanceDB
~28GB vectors"] - SCHEMA["Schema v3
• id, namespace
• vector[4096]
• layer, parent_id
• content_hash"] - ATOMIC["Atomic Batch Writes
Transaction rollback"] - end - - subgraph SEARCH["Search Pipeline"] - ROUTER["Query Router
auto-detect mode"] - VECTOR["Vector Search
ANN via IVF-HNSW"] - BM25["BM25 Full-Text"] - HYBRID["Hybrid Fusion
RRF scoring"] - RERANK["Reranker
Port: 8766
cross-encoder"] - end - - subgraph LAUNCHD["LaunchD Services"] - LD_RAMDISK["ai.libraxis.memex-ramdisk
Create 50GB RAM disk"] - LD_MLX["ai.libraxis.mlx-embedding
Port 8765 embedder"] - LD_MEMEX["ai.libraxis.rmcp-memex
Port 8997 server"] - LD_SNAPSHOT["ai.libraxis.memex-snapshot
Periodic sync to disk"] - end - - subgraph E2E_TESTS["E2E Tests"] - TEST_INDEX["test_index_search
File → Vector → Search"] - TEST_MCP["test_mcp_tools
JSON-RPC handlers"] - TEST_HTTP["test_http_api
REST endpoints"] - TEST_DEDUP["test_deduplication
Hash collision handling"] - end - - %% Flow connections - ENTRY --> VALIDATION - VALIDATION --> EXTRACTION - EXTRACTION --> DEDUP - DEDUP -->|NEW| SLICING - DEDUP -->|EXISTS| SKIP - SLICING --> EMBEDDING - EMBEDDING --> STORAGE - - %% Search flow - ENTRY --> SEARCH - SEARCH --> STORAGE - - %% LaunchD flow - LD_RAMDISK -->|creates| RAMDISK - LD_MLX -->|provides| MLX - LD_MEMEX -->|uses| RAMDISK - LD_MEMEX -->|calls| MLX - LD_SNAPSHOT -->|syncs| RAMDISK - - %% Styling - classDef promised fill:#2d5a2d,stroke:#4a4,color:#fff - classDef critical fill:#5a2d2d,stroke:#a44,color:#fff - - class MLX,VALIDATE,ATOMIC,TEST_INDEX,TEST_MCP,TEST_HTTP,TEST_DEDUP,LD_MLX promised - class RAMDISK,LANCE,SCHEMA critical -``` - -## Kluczowe założenia docelowej architektury - -### 1. Embedding Layer -- **Dedykowany MLX embedder** na porcie **8765** -- Folder implementacji: `~/.ai-memories/mlx-embeddings/` -- Model: `Qwen3-Embedding-8B` (4096 dims) -- **NIE Ollama** - natywny MLX dla Dragona - -### 2. RAM Disk Architecture -- 50GB RAM disk `/Volumes/MemexRAM` -- LanceDB (~28GB) całkowicie w RAM -- Snapshot daemon - periodic sync to `~/.ai-memories/lancedb` -- PathState dependency - memex startuje dopiero gdy RAM disk gotowy - -### 3. Dimension Safety -- **Validation at startup** - sprawdzenie czy embedder zwraca 4096 dims -- **Fail fast** - crash jeśli mismatch, nie silent corruption - -### 4. Atomic Writes -- Transaction boundaries na batch writes -- Rollback przy partial failures -- No ghost documents - -### 5. E2E Test Coverage -- Full pipeline tests (index → embed → store → search → verify) -- MCP tool integration tests -- HTTP API endpoint tests -- Deduplication regression tests diff --git a/docs/HTTP_API.md b/docs/HTTP_API.md index 5bdc37f..6a11f04 100644 --- a/docs/HTTP_API.md +++ b/docs/HTTP_API.md @@ -1,6 +1,6 @@ # rmcp-memex HTTP API & Dashboard -Vibecrafted with AI Agents by VetCoders (c)2026 VetCoders +Vibecrafted with AI Agents by Vetcoders (c)2026 ## Overview diff --git a/docs/INDEXING_GUIDE.md b/docs/INDEXING_GUIDE.md index 2a7e387..4a389bc 100644 --- a/docs/INDEXING_GUIDE.md +++ b/docs/INDEXING_GUIDE.md @@ -93,4 +93,4 @@ To normalne dla dużych plików. 8MB JSON = ~15-20 minut z Qwen3-Embedding-8B. --- -Vibecrafted with AI Agents by VetCoders (c)2025 The LibraxisAI Team +Vibecrafted with AI Agents by Vetcoders (c)2025 diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 7d9bbc2..35d01f6 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -59,12 +59,12 @@ Verify the public release surface, not just the repo: ```bash # Installer path -curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh +curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh rmcp-memex --version # Manual artifact path -curl -LO https://github.com/VetCoders/rmcp-memex/releases/latest/download/rmcp-memex-x86_64-unknown-linux-gnu.tar.gz -curl -LO https://github.com/VetCoders/rmcp-memex/releases/latest/download/rmcp-memex-sha256sums.txt +curl -LO https://github.com/vetcoders/rmcp-memex/releases/latest/download/rmcp-memex-x86_64-unknown-linux-gnu.tar.gz +curl -LO https://github.com/vetcoders/rmcp-memex/releases/latest/download/rmcp-memex-sha256sums.txt grep rmcp-memex-x86_64-unknown-linux-gnu.tar.gz rmcp-memex-sha256sums.txt ``` diff --git a/docs/assets/social-card.svg b/docs/assets/social-card.svg index 4106680..dd064b2 100644 --- a/docs/assets/social-card.svg +++ b/docs/assets/social-card.svg @@ -1,6 +1,6 @@ rmcp-memex social card - Release-ready MCP memory kernel by VetCoders. + Release-ready MCP memory kernel by Vetcoders. @@ -26,6 +26,6 @@ - github.com/VetCoders/rmcp-memex + github.com/vetcoders/rmcp-memex diff --git a/docs/index.html b/docs/index.html index cbde62e..7ed0ba9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -36,7 +36,7 @@ Install Transports Release - GitHub + GitHub @@ -51,12 +51,12 @@

One canonical memory surface for local MCP and multi-agent daemon mode.

fighting over LanceDB locks.

Quick install - curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh + curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh
@@ -115,29 +115,29 @@

Release-ready install path

The shortest path from stranger to first query.

-
curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh
+          
curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh
 rmcp-memex serve
 rmcp-memex serve --http-port 6660 --http-only
- + Start here

README

Product overview, library usage, and MCP tool surface.

- + Configuration

Provider and storage setup

Embedding providers, storage paths, and deployment-friendly defaults.

- + HTTP/SSE

Daemon reference

Start with /api/discovery, then drill into browse, search, and write routes.

- + Release ops

Runbook

Preflight checks, tagging, artifact verification, and launch follow-through.

@@ -159,11 +159,11 @@

What shipping now means.

diff --git a/install.sh b/install.sh index 5dae1c7..6b5f758 100755 --- a/install.sh +++ b/install.sh @@ -1,14 +1,14 @@ #!/usr/bin/env bash # rmcp-memex installer for prebuilt GitHub Release bundles -# curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh +# curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh # or with a specific release tag: -# RMCP_MEMEX_VERSION=v0.5.1 curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh +# RMCP_MEMEX_VERSION=v0.5.1 curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh set -euo pipefail VERSION="${RMCP_MEMEX_VERSION:-latest}" INSTALL_DIR="${RMCP_MEMEX_INSTALL_DIR:-$HOME/.cargo/bin}" -GITHUB_REPO="VetCoders/rmcp-memex" +GITHUB_REPO="vetcoders/rmcp-memex" BINARY_NAME="rmcp-memex" CHECKSUM_FILE="rmcp-memex-sha256sums.txt" COMPAT_ALIASES=("rmcp_memex") diff --git a/scripts/reindex-memories.sh b/scripts/reindex-memories.sh index b3c9dc8..e2e35f7 100755 --- a/scripts/reindex-memories.sh +++ b/scripts/reindex-memories.sh @@ -2,7 +2,7 @@ # reindex-memories.sh # Reindex all memories after fixing timestamp preservation (P0) # -# Created by M&K (c)2025 The LibraxisAI Team +# Created by vetcoders (c)2025 # Part of rmcp-memex P4 fix set -e @@ -20,9 +20,9 @@ echo -e "${BLUE}========================================${NC}" echo "" # Default paths -MEMEX_DB="${MEMEX_DB:-$HOME/.ai-memories/lancedb}" -MEMEX_SOURCES="${MEMEX_SOURCES:-$HOME/.ai-memories/sources}" -BACKUP_DIR="${MEMEX_BACKUP:-$HOME/.ai-memories/backups}" +MEMEX_DB="${MEMEX_DB:-$HOME/.rmcp-servers/rmcp-memex/lancedb}" +MEMEX_SOURCES="${MEMEX_SOURCES:-$HOME/.rmcp-servers/rmcp-memex/sources}" +BACKUP_DIR="${MEMEX_BACKUP:-$HOME/.rmcp-servers/rmcp-memex/backups}" # Parse arguments DRY_RUN=false @@ -58,8 +58,8 @@ while [[ $# -gt 0 ]]; do echo " --dry-run Show what would be done without doing it" echo " --force Skip confirmation prompts" echo " -n, --namespace NS Namespace to reindex (default: conversations)" - echo " --db PATH LanceDB path (default: ~/.ai-memories/lancedb)" - echo " --sources PATH Source files path (default: ~/.ai-memories/sources)" + echo " --db PATH LanceDB path (default: ~/.rmcp-servers/rmcp-memex/lancedb)" + echo " --sources PATH Source files path (default: ~/.rmcp-servers/rmcp-memex/sources)" echo " -h, --help Show this help message" echo "" echo "Environment variables:" @@ -78,7 +78,7 @@ done # Check if rmcp-memex is available if ! command -v rmcp-memex &> /dev/null; then echo -e "${RED}Error: rmcp-memex not found in PATH${NC}" - echo "Install the prebuilt release with: curl -LsSf https://raw.githubusercontent.com/VetCoders/rmcp-memex/main/install.sh | sh" + echo "Install the prebuilt release with: curl -LsSf https://raw.githubusercontent.com/vetcoders/rmcp-memex/main/install.sh | sh" echo "For development-only source builds: cargo install --path ." exit 1 fi diff --git a/scripts/release-local.sh b/scripts/release-local.sh index d682347..d18150e 100755 --- a/scripts/release-local.sh +++ b/scripts/release-local.sh @@ -4,7 +4,7 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" BINARY_NAME="rmcp-memex" -GITHUB_REPO="${RMCP_MEMEX_GITHUB_REPO:-VetCoders/rmcp-memex}" +GITHUB_REPO="${RMCP_MEMEX_GITHUB_REPO:-vetcoders/rmcp-memex}" SIGN_IDENTITY="${RMCP_MEMEX_SIGN_IDENTITY:-}" OUTPUT_DIR="" NOTES_FILE="" diff --git a/src/auth/mod.rs b/src/auth/mod.rs index 6d7e168..701777a 100644 --- a/src/auth/mod.rs +++ b/src/auth/mod.rs @@ -4,7 +4,7 @@ //! Each token is hashed with argon2id at rest. Plaintext is shown ONCE //! on creation and never stored. //! -//! Vibecrafted with AI Agents by VetCoders (c)2024-2026 The LibraxisAI Team +//! Vibecrafted with AI Agents by Vetcoders (c)2024-2026 use std::fmt; use std::path::Path; @@ -660,14 +660,14 @@ mod tests { id: "limited".to_string(), token_hash: String::new(), scopes: vec![Scope::Read], - namespaces: vec!["kb:claude".to_string(), "kb:mikserka".to_string()], + namespaces: vec!["kb:claude".to_string(), "kb:notes".to_string()], expires_at: None, description: "limited".to_string(), created_at: Utc::now(), }; assert!(entry.has_namespace_access("kb:claude")); - assert!(entry.has_namespace_access("kb:mikserka")); + assert!(entry.has_namespace_access("kb:notes")); assert!(!entry.has_namespace_access("kb:reports")); } diff --git a/src/bin/cli/definition.rs b/src/bin/cli/definition.rs index 6195672..b1fe58d 100644 --- a/src/bin/cli/definition.rs +++ b/src/bin/cli/definition.rs @@ -221,8 +221,8 @@ pub enum Commands { /// full metadata, and related chunks. /// /// Examples: - /// rmcp-memex dive -n memories -q "dragon" - /// rmcp-memex dive -n memories -q "dragon" --verbose + /// rmcp-memex dive -n memories -q "host-a" + /// rmcp-memex dive -n memories -q "host-a" --verbose Dive { /// Namespace to search in #[arg(long, short = 'n', required = true)] @@ -335,10 +335,10 @@ pub enum Commands { /// defaults. Results include relevance scores, timestamps, and metadata. /// /// Examples: - /// rmcp-memex search -n memories -q "when did we buy dragon" - /// rmcp-memex search -n memories -q "dragon" --deep - /// rmcp-memex search -n memories -q "dragon" -l 20 - /// rmcp-memex search -n memories -q "dragon" --mode hybrid + /// rmcp-memex search -n memories -q "when did we buy host-a" + /// rmcp-memex search -n memories -q "host-a" --deep + /// rmcp-memex search -n memories -q "host-a" -l 20 + /// rmcp-memex search -n memories -q "host-a" --mode hybrid Search { /// Namespace to search in #[arg(long, short = 'n', required = true)] @@ -517,7 +517,7 @@ pub enum Commands { /// /// Examples: /// rmcp-memex recall "Vista architecture" # Search all namespaces - /// rmcp-memex recall "dragon setup" -n memories # Specific namespace + /// rmcp-memex recall "host-a setup" -n memories # Specific namespace /// rmcp-memex recall "auth flow" --limit 20 # More sources Recall { /// What to recall (search query) @@ -684,7 +684,7 @@ pub enum Commands { /// Examples: /// rmcp-memex merge --source ~/db1 --source ~/db2 --target ~/merged /// rmcp-memex merge --source ~/db1 --source ~/db2 --target ~/merged --dedup - /// rmcp-memex merge --source ~/dragon-db --target ~/merged --namespace-prefix "dragon:" + /// rmcp-memex merge --source ~/host-a-db --target ~/merged --namespace-prefix "host-a:" /// rmcp-memex merge --source ~/db1 --target ~/merged --dry-run Merge { /// Source database paths (can specify multiple times) @@ -699,7 +699,7 @@ pub enum Commands { #[arg(long, short = 'd')] dedup: bool, - /// Prefix to add to source namespaces (e.g., "dragon:" -> "dragon:memories") + /// Prefix to add to source namespaces (e.g., "host-a:" -> "host-a:memories") #[arg(long, short = 'p')] namespace_prefix: Option, @@ -977,7 +977,7 @@ pub enum Commands { /// ONCE on creation and can never be retrieved again. /// /// Examples: - /// rmcp-memex auth create --description "iPhone" --scopes read,write --namespaces kb:claude,kb:mikserka + /// rmcp-memex auth create --description "iPhone" --scopes read,write --namespaces kb:claude,kb:notes /// rmcp-memex auth list /// rmcp-memex auth revoke --id monika-iphone /// rmcp-memex auth rotate --id monika-iphone diff --git a/src/bin/rmcp_memex.rs b/src/bin/rmcp_memex.rs index fb34b32..a2fdf12 100644 --- a/src/bin/rmcp_memex.rs +++ b/src/bin/rmcp_memex.rs @@ -13,7 +13,7 @@ // Usage: // rmcp-memex [args] // -// Vibecrafted with AI Agents by VetCoders (c)2026 VetCoders +// Vibecrafted with AI Agents by Vetcoders (c)2026 use anyhow::Result; use clap::Parser; diff --git a/src/engine.rs b/src/engine.rs index 3a59137..be3e46d 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -676,7 +676,7 @@ impl MemexEngine { /// # Example /// /// ```rust,ignore - /// let results = engine.search_hybrid("when did we buy dragon", 10).await?; + /// let results = engine.search_hybrid("when did we buy host-a", 10).await?; /// for r in results { /// println!("{}: combined={:.3}, vector={:?}, bm25={:?}", /// r.id, r.combined_score, r.vector_score, r.bm25_score); @@ -721,7 +721,7 @@ impl MemexEngine { /// use rmcp_memex::SearchMode; /// /// // Keyword-only for exact matches - /// let results = engine.search_with_mode("dragon", 10, SearchMode::Keyword).await?; + /// let results = engine.search_with_mode("host-a", 10, SearchMode::Keyword).await?; /// ``` pub async fn search_with_mode( &self, diff --git a/src/http/mod.rs b/src/http/mod.rs index 54cc691..ff76b93 100644 --- a/src/http/mod.rs +++ b/src/http/mod.rs @@ -29,7 +29,7 @@ //! - GET /mcp/ - SSE stream for MCP messages (sends endpoint event) //! - POST /mcp/messages/ - JSON-RPC POST endpoint with session_id //! -//! Vibecrafted with AI Agents by VetCoders (c)2026 VetCoders +//! Vibecrafted with AI Agents by Vetcoders (c)2026 use std::collections::HashMap; use std::convert::Infallible; @@ -435,7 +435,7 @@ const DASHBOARD_HTML: &str = r##"
- rmcp-memex v{VERSION} | Vibecrafted with AI Agents by VetCoders ©2026 VetCoders + rmcp-memex v{VERSION} | Vibecrafted with AI Agents by Vetcoders ©2026
diff --git a/src/query/mod.rs b/src/query/mod.rs index 555595d..90d8443 100644 --- a/src/query/mod.rs +++ b/src/query/mod.rs @@ -22,7 +22,7 @@ //! use rmcp_memex::query::{detect_intent, QueryIntent, QueryRouter}; //! //! // Quick intent detection -//! let intent = detect_intent("when did we buy dragon"); +//! let intent = detect_intent("when did we buy host-a"); //! assert!(matches!(intent, QueryIntent::Temporal)); //! //! // Full routing with recommendations diff --git a/src/query/router.rs b/src/query/router.rs index 7a3002a..634954b 100644 --- a/src/query/router.rs +++ b/src/query/router.rs @@ -15,7 +15,7 @@ //! ```rust //! use rmcp_memex::query::{QueryIntent, detect_intent, QueryRouter, RoutingDecision}; //! -//! let intent = detect_intent("when did we buy dragon"); +//! let intent = detect_intent("when did we buy host-a"); //! assert!(matches!(intent, QueryIntent::Temporal)); //! //! let router = QueryRouter::new(); @@ -237,7 +237,7 @@ fn semantic_keywords() -> &'static HashSet<&'static str> { /// ```rust /// use rmcp_memex::query::detect_intent; /// -/// let intent = detect_intent("when did we buy dragon"); +/// let intent = detect_intent("when did we buy host-a"); /// // Returns QueryIntent::Temporal /// ``` pub fn detect_intent(query: &str) -> QueryIntent { @@ -519,7 +519,7 @@ mod tests { #[test] fn test_temporal_intent_detection() { assert_eq!( - detect_intent("when did we buy dragon"), + detect_intent("when did we buy host-a"), QueryIntent::Temporal ); assert_eq!( @@ -568,12 +568,12 @@ mod tests { #[test] fn test_exact_intent_detection() { assert_eq!(detect_intent(r#"find "exact phrase""#), QueryIntent::Exact); - assert_eq!(detect_intent("search 'dragon'"), QueryIntent::Exact); + assert_eq!(detect_intent("search 'host-a'"), QueryIntent::Exact); } #[test] fn test_hybrid_default() { - assert_eq!(detect_intent("dragon mac studio"), QueryIntent::Hybrid); + assert_eq!(detect_intent("host-a mac studio"), QueryIntent::Hybrid); assert_eq!(detect_intent("how to configure memex"), QueryIntent::Hybrid); } @@ -581,7 +581,7 @@ mod tests { fn test_router_confidence() { let router = QueryRouter::new(); - let decision = router.route("when exactly did we buy dragon in 2024"); + let decision = router.route("when exactly did we buy host-a in 2024"); assert_eq!(decision.intent, QueryIntent::Temporal); assert!(decision.confidence > 0.5); diff --git a/src/rag/mod.rs b/src/rag/mod.rs index 3c3f21e..f65b3bc 100644 --- a/src/rag/mod.rs +++ b/src/rag/mod.rs @@ -3851,12 +3851,12 @@ mod tests { #[test] fn keyword_extraction_splits_paths_and_filters_session_tokens() { let keywords = extract_keywords( - "/Users/silver/Git/tools/TwinSweep session 2ff4de8b9a4e1234567890abcdef notes", + "/Users/tester/projects/toolkit session 2ff4de8b9a4e1234567890abcdef notes", 10, ); assert!(keywords.contains(&"users".to_string())); - assert!(keywords.contains(&"twinsweep".to_string())); + assert!(keywords.contains(&"toolkit".to_string())); assert!(!keywords.iter().any(|keyword| keyword.contains("2ff4de8b"))); } @@ -3874,7 +3874,7 @@ mod tests { "vista" )); assert!(metadata_matches_project( - &json!({"project_id": "VetCoders"}), + &json!({"project_id": "Vetcoders"}), "vetcoders" )); assert!(!metadata_matches_project( @@ -3889,18 +3889,18 @@ mod tests { #[test] fn markdown_transcript_extraction_builds_role_aware_turn_docs() { - let raw = r#"[project: VetCoders/vibecrafted | agent: codex | date: 2026-03-30] + let raw = r#"[project: vetcoders/vibecrafted | agent: codex | date: 2026-03-30] [signals] Results: -- AICX lookup działa +- AICX lookup succeeded [/signals] -[09:14:00] assistant: Tak, i to właśnie jest sedno: `aicx-dragon` to żywy endpoint MCP. -[09:15:33] user: ziom ale ty sobie sam skonfigurowałeś ~/.codex/config.toml -[09:15:47] assistant: Sprawdzam teraz lokalny kontrakt konfiguracji MCP dla Codexa. +[09:14:00] assistant: Right, that is the core point: the MCP endpoint is live and reachable. +[09:15:33] user: ok but the local client config was set up automatically +[09:15:47] assistant: Checking the local MCP configuration contract now. [09:15:55] reasoning: **Checking config contract** -[09:16:06] assistant: Składnia configu wygląda już poprawnie według samego Codexa. +[09:16:06] assistant: The config syntax already looks correct. "#; let docs = extract_markdown_transcript_documents(raw, Path::new("sample.md")) @@ -3912,7 +3912,7 @@ Results: assert!(docs[1].1.contains("Reasoning focus:")); assert_eq!(docs[1].2["format"], "markdown_transcript"); assert_eq!(docs[1].2["type"], "transcript_turn"); - assert_eq!(docs[1].2["project"], "VetCoders/vibecrafted"); + assert_eq!(docs[1].2["project"], "vetcoders/vibecrafted"); } #[test] @@ -3942,7 +3942,7 @@ Results: let metadata = json!({ "type": "transcript_turn", "format": "markdown_transcript", - "project": "VetCoders/rmcp-memex", + "project": "vetcoders/rmcp-memex", "agent": "codex" }); let config = OnionSliceConfig { @@ -3969,7 +3969,7 @@ Results: #[test] fn json_conversation_docs_flow_through_structured_semantic_slices() { let conversation = json!({ - "project": "VetCoders/rmcp-memex", + "project": "vetcoders/rmcp-memex", "sessions": [ { "info": { diff --git a/src/rag/structured.rs b/src/rag/structured.rs index 88f163b..981613e 100644 --- a/src/rag/structured.rs +++ b/src/rag/structured.rs @@ -641,7 +641,7 @@ mod tests { "format": "claude_web", "role": "assistant", "title": "Pipeline progress", - "project": "VetCoders/rmcp-memex" + "project": "vetcoders/rmcp-memex" }); let content = "Decision: use semantic cards for outer retrieval. Next action: add JSON regression tests and keep plain-text fallback."; diff --git a/src/search/hybrid.rs b/src/search/hybrid.rs index 9fd5735..935e1cb 100644 --- a/src/search/hybrid.rs +++ b/src/search/hybrid.rs @@ -911,7 +911,7 @@ mod tests { "vista" )); assert!(matches_project_filter( - &json!({"project_id": "VetCoders"}), + &json!({"project_id": "Vetcoders"}), "vetcoders" )); assert!(!matches_project_filter( diff --git a/src/tui/app.rs b/src/tui/app.rs index ec6f423..43d27ad 100644 --- a/src/tui/app.rs +++ b/src/tui/app.rs @@ -434,9 +434,9 @@ fn get_hostname() -> String { /// Database path mode for multi-host setups #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum DbPathMode { - /// Single shared path (e.g., ~/.ai-memories/lancedb) + /// Single shared path (e.g., ~/.rmcp-servers/rmcp-memex/lancedb) Shared, - /// Per-host path with hostname suffix (e.g., ~/.ai-memories/lancedb.dragon) + /// Per-host path with hostname suffix (e.g., ~/.rmcp-servers/rmcp-memex/lancedb.host-a) PerHost, } @@ -470,7 +470,7 @@ impl Default for MemexCfg { let hostname = get_hostname(); Self { // New default path per requirements - db_path: "~/.ai-memories/lancedb".to_string(), + db_path: "~/.rmcp-servers/rmcp-memex/lancedb".to_string(), cache_mb: 4096, log_level: "info".to_string(), max_request_bytes: 10 * 1024 * 1024, // 10MB diff --git a/src/tui/monitor.rs b/src/tui/monitor.rs index 29bf9ea..53175c1 100644 --- a/src/tui/monitor.rs +++ b/src/tui/monitor.rs @@ -147,6 +147,10 @@ struct GpuMetrics { memory_total: Option, } +// On non-macOS targets the cfg'd early return makes the macOS ioreg body below +// unreachable by design; allow it so `-D warnings` stays green cross-platform +// without dead-coding the macOS-only helpers. +#[cfg_attr(not(target_os = "macos"), allow(unreachable_code))] fn probe_gpu() -> Result { #[cfg(not(target_os = "macos"))] return Err(GpuStatus::Unavailable { diff --git a/tests/auth_tokens.rs b/tests/auth_tokens.rs index bfa8206..b98ab78 100644 --- a/tests/auth_tokens.rs +++ b/tests/auth_tokens.rs @@ -29,7 +29,7 @@ async fn token_create_hash_roundtrip() { .create_token( "roundtrip-test".to_string(), vec![Scope::Read, Scope::Write], - vec!["kb:claude".to_string(), "kb:mikserka".to_string()], + vec!["kb:claude".to_string(), "kb:notes".to_string()], None, "Round-trip test".to_string(), ) @@ -45,7 +45,7 @@ async fn token_create_hash_roundtrip() { assert_eq!(entry.scopes, vec![Scope::Read, Scope::Write]); assert_eq!( entry.namespaces, - vec!["kb:claude".to_string(), "kb:mikserka".to_string()] + vec!["kb:claude".to_string(), "kb:notes".to_string()] ); // Hash is an argon2id string (not plaintext) @@ -243,10 +243,10 @@ async fn v1_migration_preserves_access() { }), ), ( - "kb:mikserka".to_string(), + "kb:notes".to_string(), serde_json::json!({ - "namespace": "kb:mikserka", - "token": "ns_mikserka_token", + "namespace": "kb:notes", + "token": "ns_notes_token", "created_at": 1700000001_u64, "description": null }), @@ -277,11 +277,8 @@ async fn v1_migration_preserves_access() { // Migrated tokens get wildcard scopes assert!(claude_entry.scopes.contains(&Scope::Admin)); - let mikserka_entry = store - .lookup_by_plaintext("ns_mikserka_token") - .await - .unwrap(); - assert_eq!(mikserka_entry.id, "migrated-kb:mikserka"); + let notes_entry = store.lookup_by_plaintext("ns_notes_token").await.unwrap(); + assert_eq!(notes_entry.id, "migrated-kb:notes"); // v1 backup should exist let backup_path = format!("{}.v1.bak", store_path.to_str().unwrap()); diff --git a/tests/e2e_pipeline.rs b/tests/e2e_pipeline.rs index e0dc193..c8adee8 100644 --- a/tests/e2e_pipeline.rs +++ b/tests/e2e_pipeline.rs @@ -5,7 +5,7 @@ //! //! Run with: cargo test --test e2e_pipeline -- --ignored //! -//! Vibecrafted with AI Agents by VetCoders (c)2026 VetCoders +//! Vibecrafted with AI Agents by Vetcoders (c)2026 use rmcp_memex::{ ChromaDocument, EmbeddingClient, EmbeddingConfig, ProviderConfig, StorageManager, diff --git a/tests/transport_parity.rs b/tests/transport_parity.rs index 0d9cd81..0853630 100644 --- a/tests/transport_parity.rs +++ b/tests/transport_parity.rs @@ -8,7 +8,7 @@ //! These tests require a running embedding server (Ollama with qwen3-embedding:8b, 4096 dims). //! Run with: cargo test --test transport_parity -- --ignored //! -//! Vibecrafted with AI Agents (c)2026 VetCoders +//! Vibecrafted with AI Agents (c)2026 Vetcoders use rmcp_memex::{ EmbeddingConfig, HybridConfig, McpTransport, NamespaceSecurityConfig, ProviderConfig,