[project]
name = "sylvan"
version = "1.5.0"
description = "Unified code + documentation retrieval MCP server"
readme = "README.md"
authors = [
    { name = "darki73", email = "apple.zhivolupov@gmail.com" },
]
requires-python = ">=3.12"
license = {text = "Custom Non-Commercial"}
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
    "Topic :: Software Development :: Libraries",
    "Topic :: Software Development :: Quality Assurance",
]
dependencies = [
    "mcp>=1.10.0,<2.0.0",
    "tree-sitter-language-pack>=0.7.0,<2.0.0",
    "sqlite-vec>=0.1.0,<1.0.0",
    "pathspec>=0.12.0,<2.0.0",
    "pyyaml>=6.0,<7.0",
    "tiktoken>=0.12.0,<1.0.0",
    "fastembed>=0.4.0,<1.0.0",
    "ollama>=0.6.1,<1.0.0",
    "structlog>=25.5.0,<27.0.0",
    "claude-agent-sdk==0.1.50",
    "aiosqlite>=0.21.0,<1.0.0",
    "jinja2>=3.1,<4.0",
    "uvicorn>=0.30.0,<1.0.0",
    "starlette>=0.38.0,<2.0.0",
    "websockets>=16.0",
]

[project.optional-dependencies]
watch = ["watchfiles>=1.0.0"]
postgres = ["asyncpg>=0.30.0"]
all = ["watchfiles>=1.0.0", "asyncpg>=0.30.0"]

[project.scripts]
sylvan = "sylvan.cli:main"

[build-system]
requires = ["uv_build>=0.10.6,<0.12.0"]
build-backend = "uv_build"

[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = "test_*.py"
python_classes = "Test*"
python_functions = "test_*"
asyncio_mode = "auto"
filterwarnings = [
    "ignore::pytest.PytestUnraisableExceptionWarning",
    "ignore::pytest.PytestUnhandledThreadExceptionWarning",
    "ignore:coroutine 'watch_folder' was never awaited:RuntimeWarning",
]

[tool.mypy]
python_version = "3.12"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = false
check_untyped_defs = true
ignore_missing_imports = true

[dependency-groups]
dev = [
    "pytest>=9.0",
    "pytest-asyncio>=1.3",
    "pytest-cov>=7.0",
    "ruff>=0.9.0",
    "mypy>=1.14",
    "pre-commit>=4.0",
    "mkdocs>=1.6",
    "mkdocs-material>=9.5",
    "mkdocstrings[python]>=0.27",
]
