[build-system] requires = ["hatchling>=1.27.0"] build-backend = "hatchling.build" [project] name = "turbo-quant-memory" version = "0.28.3" description = "Local-first MCP memory server for AI coding agents with compact retrieval and project/global scopes." readme = "README.md" license = "MIT" license-files = ["LICENSE"] requires-python = ">=3.11" keywords = [ "mcp", "model-context-protocol", "ai-agents", "agent-memory", "semantic-search", "retrieval", "codex", "claude-code", "cursor", "knowledge-graph", "local-first", "rag", ] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ "argon2-cffi>=23.1.0,<24.0", "cryptography>=43.0.0,<47.0", "fastembed>=0.4.0,<1.0", "keyring>=25.0.0,<26.0", "lancedb>=0.30.2,<0.31", "markdown-it-py>=4.0.0,<5.0", "mcp>=1.12.4,<2.0", ] [project.optional-dependencies] # ONNX (fastembed) is the default embedder since it moved into core deps. # The legacy PyTorch backend stays available as an opt-in extra for rollback: # `uv tool install --force 'turbo-quant-memory[torch]'` + TQMEMORY_EMBEDDING_BACKEND=sentence-transformers. # Kept an empty `onnx` alias so pre-flip install instructions don't break. onnx = [] torch = [ "sentence-transformers>=5.3.0,<6.0", ] [project.urls] Homepage = "https://github.com/Lexus2016/turbo_quant_memory" Documentation = "https://github.com/Lexus2016/turbo_quant_memory#readme" Repository = "https://github.com/Lexus2016/turbo_quant_memory" Issues = "https://github.com/Lexus2016/turbo_quant_memory/issues" Changelog = "https://github.com/Lexus2016/turbo_quant_memory/releases" [project.scripts] # turbo-memory-mcp is the documented command and every existing MCP config # uses it; turbo-quant-memory is an alias so `uvx turbo-quant-memory serve` # resolves without --from now that the distribution carries the brand name. turbo-memory-mcp = "turbo_memory_mcp.cli:main" turbo-quant-memory = "turbo_memory_mcp.cli:main" [dependency-groups] dev = [ "mypy>=1.13,<2.0", "pytest>=8.3.0,<9.0", # PyTorch reference embedder — dev-only, used by the backend parity test to # verify fastembed's ONNX conversion still matches. Clients never install it. "ruff>=0.6,<1.0", "sentence-transformers>=5.3.0,<6.0", ] [tool.hatch.build.targets.sdist] # Explicit allow-list. Hatchling's default sweeps in everything not gitignored, # which shipped .planning/, AUDIT_REPORT*.md, benchmarks/, CLAUDE.md and a stray # .playwright-mcp/ console log into the 0.28.2 sdist. An allow-list makes a # stray file in the working tree a non-event for the published artifact. include = [ "/src", "/tests", "/docs", "/examples", "/assets", "/README.md", "/README.uk.md", "/README.ru.md", "/CHANGELOG.md", "/LICENSE", "/server.json", ] [tool.hatch.build.targets.wheel] packages = ["src/turbo_memory_mcp"] [tool.pytest.ini_options] addopts = "-q" testpaths = ["tests"] [tool.ruff] # Pinned explicitly so a ruff minor bump cannot silently widen CI's lint gate # (ruff 0.16 expanded the default profile and flagged 141 findings on a # codebase that was clean under classic E/F defaults). line-length = 120 target-version = "py311" [tool.ruff.lint] select = [ "E4", # pycodestyle errors "E7", # pycodestyle comparisons / statements "E9", # runtime-level syntax issues "F", # pyflakes "I", # import sorting "UP", # pyupgrade (3.11 idioms) "B", # bugbear "SIM", # simplify "RUF", # ruff-specific (unused noqa, sorted __all__, ...) ] extend-select = ["FURB", "TRY004", "PLR0402"] ignore = [ # Deliberate defensive-boundary style: IPC/file cleanup paths swallow # best-effort failures with an explicit try/except/pass so the reader sees # the failure mode inline. contextlib.suppress hides it behind an import. "SIM105", ] [tool.ruff.lint.per-file-ignores] # Multilingual test fixtures intentionally mix Cyrillic/Latin homoglyphs. "tests/**" = ["RUF001"] [tool.ruff.lint.isort] known-first-party = ["turbo_memory_mcp"] [tool.mypy] # Baseline pinned at zero errors (2026-08-23 static-checks pass: 37 findings # fixed at source - Sequence-covariant payload params, platform guards for # windll/binascii/fcntl, TextEmbedder adapters, dict[str, Any] payload # literals). Deliberately NOT strict yet; tighten incrementally. python_version = "3.11" ignore_missing_imports = true