[project] name = "kbots" version = "0.1.0" description = "Self-contained, LLM-agnostic agent system for messaging platforms — one process, trains itself" requires-python = ">=3.12" dependencies = [ "discord.py>=2.4.0", "aiosqlite>=0.20.0", "cryptography>=43.0.0", "pyyaml>=6.0", "python-dotenv>=1.0.0", "mcp>=1.26.0", "onnxruntime>=1.16.0", "transformers>=4.35.0", "numpy>=1.24.0", "playwright>=1.58.0", ] [project.optional-dependencies] api = ["fastapi>=0.115.0", "uvicorn>=0.32.0"] search = ["tavily-python>=0.5.0"] embeddings = ["onnxruntime>=1.16.0", "transformers>=4.35.0", "numpy>=1.24.0"] data = ["sympy>=1.13.0", "mpmath>=1.3.0", "pandas>=2.2.0", "numpy>=1.24.0", "matplotlib>=3.9.0", "openpyxl>=3.1.0", "seaborn>=0.13.0", "plotly>=5.24.0", "scipy>=1.14.0", "scikit-learn>=1.5.0"] reports = ["fpdf2>=2.8.0", "markdown>=3.7", "pandas>=2.2.0", "matplotlib>=3.9.0", "openpyxl>=3.1.0"] design = ["python-pptx>=1.0.0"] graph = ["ladybug>=0.19,<0.20"] stagehand = ["stagehand>=4.0,<5"] dev = ["ruff>=0.8.0", "pytest>=8.0", "pytest-asyncio>=0.24.0"] [project.scripts] kbots = "src.cli:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src"] [tool.ruff] line-length = 120 target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "N", "W"] [tool.ruff.lint.per-file-ignores] # Question bank: long prose strings are the data; wrapping them hurts readability. "src/lib/process_questions.py" = ["E501"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests", "extras"]