[build-system]
requires = ["setuptools>=68.0", "setuptools-scm>=8.0"]
build-backend = "setuptools.build_meta"

[project]
name = "scribe"
version = "0.1.0"
description = "Self-hosted note-taking, project-management, and calendar app exposed to Claude via MCP"
requires-python = ">=3.14"
dependencies = [
    "quart>=0.19",
    "sqlalchemy[asyncio]>=2.0",
    "asyncpg>=0.29",
    "alembic>=1.13",
    "httpx>=0.27",
    "hypercorn>=0.17",
    "bcrypt>=4.0",
    "aiosmtplib>=3.0",
    "caldav>=1.3",
    "icalendar>=5.0",
    "APScheduler>=3.10,<4.0",
    # Capped below 2.0: that release removed `mcp.server.fastmcp`, which
    # src/scribe/mcp/server.py imports to build the whole tool surface. The
    # ceiling is a real incompatibility, not caution — lift it in the same
    # change that ports server.py to the 2.x API.
    "mcp[cli]>=1.0,<2",
    "fastembed>=0.4",
    "pgvector>=0.3",
]

[project.optional-dependencies]
dev = [
    "pytest>=8.0",
    "pytest-asyncio>=0.23",
    "ruff>=0.6",
]

[tool.setuptools.packages.find]
where = ["src"]

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
markers = [
    "integration: requires a real Postgres database (runs only in the CI integration lane)",
]

[tool.ruff]
line-length = 120
target-version = "py312"

[tool.ruff.lint]
# E = pycodestyle errors, F = pyflakes (catches unused imports, undefined names)
# Start conservative — add more rules as the codebase gains coverage.
select = ["E", "F"]
ignore = [
    "E501",  # line too long — long lines are acceptable in this codebase
    "E402",  # module-level import not at top — common in Quart app factories
    "F401",  # imported but unused — some re-exports are intentional
]
