[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "lore-sdk" version = "1.4.2" description = "Cross-agent semantic memory with knowledge graphs, fact extraction, and MCP integration" readme = "README.md" license = "MIT" authors = [{ name = "Amit Paz", email = "amit.paz@gmail.com" }] keywords = [ "agent", "memory", "lore", "knowledge", "knowledge-graph", "fact-extraction", "memory-consolidation", "mcp", "model-context-protocol", "cognitive-memory", "ai-memory", "semantic-memory", "agent-memory", ] classifiers = [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Python Modules", ] requires-python = ">=3.10" dependencies = [ "python-ulid>=2.0.0", "numpy>=1.21.0", "onnxruntime>=1.14.0", "tokenizers>=0.13.0", ] [project.optional-dependencies] remote = [ "httpx>=0.24.0", ] mcp = [ "mcp>=1.0.0,<2", # LORE_STORE=local (the default) runs the server in-process over SQLite, # so the mcp entrypoint needs the server + solo (SQLite) deps to be a true # zero-config durable install via `uvx --from lore-sdk[mcp] lore-memory`. "lore-sdk[server,solo]", ] server = [ "fastapi>=0.100.0", "uvicorn>=0.22.0", "asyncpg>=0.28.0", "pydantic>=2.0.0", "PyJWT[crypto]>=2.8", ] solo = [ "aiosqlite>=0.19", "sqlite-vec>=0.1.0", ] redis = [ "redis>=4.5.0", ] aws = [ "boto3>=1.26.0", ] security = [ "detect-secrets>=1.4.0", ] ner = [ "spacy>=3.5.0", ] enrichment = [ "litellm>=1.0", ] dev = [ "pytest>=7.0", "pytest-asyncio>=0.21.0", "httpx>=0.24.0", "ruff>=0.1.0", ] [project.scripts] lore = "lore.cli:main" # Dedicated stdio MCP-server entrypoint (needs the [mcp] extra). Lets clients # launch the server via `uvx --from lore-sdk[mcp] lore-memory` — the name the # integration templates and docs use — instead of the longer `lore mcp`. lore-memory = "lore.mcp.server:run_server" [project.urls] Homepage = "https://github.com/agentkitai/lore" Repository = "https://github.com/agentkitai/lore" Documentation = "https://github.com/agentkitai/lore/tree/main/docs" Issues = "https://github.com/agentkitai/lore/issues" Changelog = "https://github.com/agentkitai/lore/blob/main/CHANGELOG.md" [tool.hatch.build.targets.wheel] packages = ["src/lore"] # Ship the migration trees inside the wheel so SqliteStore + asyncpg # init_pool can find them after a regular pip/pipx install. Both trees # land at lore/migrations_pg/ and lore/migrations_sqlite/ next to the # package. The runtime lookup in src/lore/persistence/sqlite.py and # src/lore/server/db.py prefers these package-relative paths and falls # back to the project-root paths for editable/dev installs. [tool.hatch.build.targets.wheel.force-include] "migrations" = "lore/migrations_pg" "migrations_sqlite" = "lore/migrations_sqlite" [tool.pytest.ini_options] testpaths = ["tests"] markers = [ "integration: requires Docker Compose stack (deselect with -m 'not integration')", ] [tool.ruff] target-version = "py310" src = ["src"] line-length = 180 [tool.ruff.lint] select = ["E", "F", "I", "N", "W"] ignore = ["E741", "N815", "N812"]