[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "witty-service"
version = "0.1.0"
description = "Witty Service - A service for managing agents and sessions"
readme = "README.md"
requires-python = ">=3.11"
license = {file = "LICENSE"}

authors = [
  {name = "Witty Team", email = "team@witty.dev"},
]

maintainers = [
  {name = "Witty Team", email = "team@witty.dev"},
]

keywords = ["witty", "agent", "service", "ai", "llm"]

classifiers = [
  "Development Status :: 4 - Beta",
  "Intended Audience :: Developers",
  "License :: OSI Approved :: MIT License",
  "Programming Language :: Python :: 3",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
  "Programming Language :: Python :: 3.13",
  "Operating System :: OS Independent",
  "Topic :: Software Development :: Libraries :: Application Frameworks",
]

dependencies = [
  "fastapi>=0.115",
  "sqlalchemy>=2.0",
  "alembic>=1.14",
  "websockets>=15.0.1",
  "cryptography>=42.0.0",
  "requests>=2.32.5",
  "uvicorn>=0.20",
  "httpx>=0.27",
  "pyyaml>=6.0",
  "python-multipart>=0.0.29",
  "gitpython>=3.1.40",
  "docker>=7.0",
]

[project.optional-dependencies]
dev = [
  "pytest>=8.0",
  "pytest-asyncio>=0.23",
  "black>=24.0",
  "flake8>=6.0",
  "mypy>=1.8",
  "python-semantic-release>=9.0",
]

[project.scripts]
witty-service = "witty_service.cli:main"

[project.urls]
homepage = "https://github.com/openwitty/witty-service"
documentation = "https://docs.witty.dev"
repository = "https://github.com/openwitty/witty-service.git"
changelog = "https://github.com/openwitty/witty-service/blob/main/CHANGELOG.md"

[tool.setuptools]
packages = [
    "witty_service",
    "witty_service.data",
    "witty_service.api",
    "witty_service.adapter",
    "witty_service.application",
    "witty_service.domain",
    "witty_service.persistence",
    "witty_service.sandbox",
    "witty_service.storage",
    "witty_agent_server",
    "witty_agent_server.api",
    "witty_agent_server.api.routers",
    "witty_agent_server.application",
    "witty_agent_server.application.services",
    "witty_agent_server.application.services.agent",
    "witty_agent_server.application.services.session",
    "witty_agent_server.application.services.skill",
    "witty_agent_server.application.models",
    "witty_agent_server.application.materialization",
    "witty_agent_server.application.materialization.core",
    "witty_agent_server.application.materialization.openclaw",
    "witty_agent_server.application.materialization.openclaw.core",
    "witty_agent_server.adapters",
    "witty_agent_server.runtimes",
    "witty_agent_server.infra",
    "witty_agent_server.infra.persistence",
    "witty_agent_server.infra.clients",
    "witty_agent_server.logger",
]
package-dir = {"witty_service" = "src/witty_service", "witty_agent_server" = "src/witty_agent_server"}
package-data = {"witty_service.data" = ["*.tar.gz"]}

[tool.pytest.ini_options]
pythonpath = ["."]
testpaths = ["tests"]

[tool.mypy]
python_version = "3.11"
strict = true
show_error_codes = true
ignore_missing_imports = false
follow_imports = "silent"
exclude = ["tests/*", "examples/*"]

[tool.black]
line-length = 88
target-version = ["py311"]
include = '\.pyi?$'
exclude = '''
/(
    \.eggs
  | \.git
  | \.hg
  | \.mypy_cache
  | \.nox
  | \.tox
  | \.venv
  | _build
  | buck-out
  | build
  | dist
)/
'''

[tool.flake8]
max-line-length = 88
extend-ignore = ["E203", "W503"]

[tool.semantic_release]
version_toml = ["pyproject.toml:project.version"]
commit_parser = "conventional"
allow_zero_version = true
tag_format = "v{version}"

[tool.semantic_release.branches.main]
match = "(master|main)"
prerelease = false

[tool.semantic_release.commit_parser_options]
allowed_tags = ["build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "style", "test"]
minor_tags = ["feat"]
patch_tags = ["fix", "perf","refactor"]

[dependency-groups]
dev = [
    "pytest-cov>=7.1.0",
]