[project]
name = "gv-specwright"
version = "1.10.0"
description = "AI-native enterprise documentation platform"
readme = "README.md"
requires-python = ">=3.12"
license = "MIT"
classifiers = [
    "Development Status :: 3 - Alpha",
    "Framework :: FastAPI",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.12",
]

dependencies = [
    "fastapi>=0.115",
    "uvicorn[standard]>=0.34",
    "anthropic>=0.43",
    "httpx>=0.28",
    "python-frontmatter>=1.1",
    "mistune>=3.1",
    "pydantic>=2.10",
    "pydantic-settings>=2.7",
    "jinja2>=3.1",
    "pyyaml>=6.0",
    "cryptography>=44.0",
    "PyJWT[crypto]>=2.9",
    "authlib>=1.3",
    "itsdangerous>=2.1",
    "asyncpg>=0.30",
    "google-genai>=1.0",
    "mcp[cli]>=1.7",
    "posthog>=3.7",
    "opentelemetry-api>=1.20",
    "opentelemetry-sdk>=1.20",
    "opentelemetry-exporter-otlp-proto-http>=1.20",
]

[project.urls]
Homepage = "https://specwright.gernerventures.com"
Repository = "https://github.com/Gerner-Ventures/gv-exp-specwright"
Issues = "https://github.com/Gerner-Ventures/gv-exp-specwright/issues"

[project.optional-dependencies]
dev = [
    "pytest>=8.3",
    "pytest-asyncio>=0.25",
    "pytest-cov>=6.0",
    "pytest-httpx>=0.35",
    "respx>=0.22",
    "ruff>=0.9",
    "mypy>=1.14",
]

[project.scripts]
specwright = "specwright.cli:main"
specwright-mcp = "specwright.mcp.__main__:main"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["src/specwright"]

[tool.hatch.build.targets.wheel.force-include]
"plugin/skills" = "specwright/plugin_data/skills"

[tool.hatch.build.targets.sdist.force-include]
"plugin/skills" = "plugin/skills"

[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
markers = ["integration: integration tests (deselected by default)"]
addopts = "-m 'not integration'"

[tool.coverage.run]
source = ["specwright"]
branch = true
parallel = true

[tool.coverage.paths]
source = ["src/specwright", "*/specwright"]

[tool.coverage.report]
show_missing = true
skip_empty = true
precision = 1
exclude_lines = [
    "pragma: no cover",
    "if TYPE_CHECKING:",
    "if __name__ == .__main__.:",
]

[tool.mypy]
python_version = "3.12"
strict = true

[tool.semantic_release]
version_toml = ["pyproject.toml:project.version"]
commit_parser = "conventional"
upload_to_vcs_release = false

[tool.semantic_release.branches.main]
match = "main"
