[project]
name = "kyber-chat"
dynamic = ["version"]
description = "A lightweight personal AI assistant framework"
requires-python = ">=3.12"
license = {text = "MIT"}
authors = [
    {name = "kyber contributors"}
]
keywords = ["ai", "agent", "chatbot"]
classifiers = [
    "Development Status :: 3 - Alpha",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
]

dependencies = [
    "typer>=0.9.0",
    "pydantic>=2.0.0",
    "pydantic-settings>=2.0.0",
    "websockets>=12.0",
    "websocket-client>=1.6.0",
    "httpx>=0.25.0",
    "loguru>=0.7.0",
    "readability-lxml>=0.8.0",
    "rich>=13.0.0",
    "croniter>=2.0.0",
    "fastapi>=0.115.0",
    "uvicorn>=0.30.0",
    "python-telegram-bot>=21.0",
    "discord.py>=2.4.0",
    "cisco-ai-skill-scanner>=0.1.0",
    "openhands-sdk>=1.11.4",
    "openhands-tools>=1.11.4",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "pytest-asyncio>=0.21.0",
    "ruff>=0.1.0",
]

[project.scripts]
kyber = "kyber.cli.commands:app"

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

[tool.hatch.version]
path = "kyber/__init__.py"

[tool.hatch.build.targets.wheel]
packages = ["kyber"]

[tool.hatch.build.targets.wheel.sources]
"kyber" = "kyber"

# Include non-Python files in skills
[tool.hatch.build]
include = [
    "kyber/**/*.py",
    "kyber/skills/**/*.md",
    "kyber/skills/**/*.sh",
    "kyber/dashboard/static/**",
]

[tool.hatch.build.targets.sdist]
include = [
    "kyber/",
    "bridge/",
    "README.md",
    "LICENSE",
]

[tool.hatch.build.targets.wheel.force-include]
"bridge" = "kyber/bridge"

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

[tool.ruff.lint]
select = ["E", "F", "I", "N", "W"]
ignore = ["E501"]

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
