[project]
name = "cocosearch"
version = "0.1.23"
description = "Local-first code search via MCP/CLI"
readme = "README.md"
authors = [
    { name = "VioletCranberry", email = "zh6an0w.fedor@gmail.com" }
]
requires-python = ">=3.11"
dependencies = [
    "cocoindex[embeddings]>=0.3.31",
    "mcp[cli]>=1.26.0",
    "pathspec>=1.0.3",
    "pgvector>=0.4.2",
    "psycopg[binary,pool]>=3.3.2",
    "pyyaml>=6.0.2",
    "rich>=13.0.0",
    "tree-sitter>=0.25.0,<0.26.0",
    "tree-sitter-language-pack>=0.13.0",
]

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

[build-system]
requires = ["uv_build>=0.8.13,<0.9.0"]
build-backend = "uv_build"

[dependency-groups]
dev = [
    "beautifulsoup4>=4.12.0",
    "pytest>=9.0.2",
    "pytest-asyncio>=1.3.0",
    "pytest-httpx>=0.36.0",
    "pytest-mock>=3.15.1",
    "pytest-subprocess>=1.5.3",
    "pytest-timeout>=2.3.1",
    "ruff>=0.14.14",
]

[tool.pytest.ini_options]
testpaths = ["tests/unit"]
asyncio_mode = "strict"
asyncio_default_fixture_loop_scope = "function"
python_files = ["test_*.py"]
python_functions = ["test_*"]
timeout = 5
addopts = "-v --tb=short --strict-markers -m unit"
markers = [
    "unit: marks tests as unit tests (use mocks, no infrastructure)",
]
