[project] name = "EvoScientist" version = "0.0.9" description = "EvoScientist: Towards Self-Evolving AI Scientists for End-to-End Scientific Discovery" readme = "README.md" requires-python = ">=3.11" license = "Apache-2.0" authors = [ { name = "Xi Zhang" }, ] maintainers = [ { name = "Xi Zhang" }, ] keywords = ["ai-scientific", "scientific-discovery", "self-evolving", "ai-scientists", "end-to-end"] classifiers = [ "Programming Language :: Python :: 3", ] dependencies = [ "deepagents>=0.5.3", "langchain>=1.2.12", "langchain-anthropic>=1.4.0", "langchain-openai>=1.1", "langchain-nvidia-ai-endpoints>=0.3", "langchain-google-genai>=4.2.1", "langchain-ollama>=1.0", "langchain-openrouter>=0.2.1", "tavily-python>=0.7", "pyyaml>=6.0", "rich>=14.0", "prompt-toolkit>=3.0", "questionary>=2.0.1", "typer>=0.12", "python-dotenv>=1.0", "langgraph-cli[inmem]>=0.4", "langgraph-checkpoint-sqlite>=3.0.0", "httpx>=0.27", "lazy-loader>=0.5", "markdownify>=0.14", "nest-asyncio>=1.6", "langchain-mcp-adapters>=0.1", "textual>=0.80", ] [dependency-groups] dev = [ "pytest>=8.0", "pytest-cov>=5.0", "pytest-timeout>=2.4", "ruff>=0.5", "build>=1.0", "pre-commit>=3.5.0", ] [project.optional-dependencies] dev = [ "pytest>=8.0", "pytest-cov>=5.0", "pytest-timeout>=2.4", "ruff>=0.5", "build>=1.0", "pre-commit>=3.5.0", ] telegram = ["python-telegram-bot>=21.0"] discord = ["discord.py>=2.3"] slack = ["slack-sdk>=3.27", "aiohttp>=3.9"] wechat = ["pycryptodome>=3.20"] feishu = ["lark-oapi>=1.4.0"] qq = ["qq-botpy>=1.0"] stt = ["faster-whisper>=1.0"] oauth = ["ccproxy-api>=0.2.7"] all-channels = [ "python-telegram-bot>=21.0", "discord.py>=2.3", "aiohttp>=3.9", "slack-sdk>=3.27", "pycryptodome>=3.20", "lark-oapi>=1.4.0", "qq-botpy>=1.0", ] [project.urls] "Homepage" = "https://github.com/EvoScientist/EvoScientist" "Bug Tracker" = "https://github.com/EvoScientist/EvoScientist/issues" "Documentation" = "https://github.com/EvoScientist/EvoScientist#readme" [project.scripts] evoscientist = "EvoScientist.cli:main" EvoScientist = "EvoScientist.cli:main" evosci = "EvoScientist.cli:main" EvoSci = "EvoScientist.cli:main" [build-system] requires = ["setuptools>=68.0"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] include = ["EvoScientist*"] [tool.setuptools.package-data] EvoScientist = ["subagent.yaml", "skills/**/*"] [tool.pytest.ini_options] testpaths = ["tests"] filterwarnings = [ "ignore::UserWarning:langchain_nvidia_ai_endpoints", ] [tool.ruff] # Exclude a variety of commonly ignored directories. exclude = [ ".bzr", ".direnv", ".eggs", ".git", ".git-rewrite", ".hg", ".ipynb_checkpoints", ".mypy_cache", ".nox", ".pants.d", ".pyenv", ".pytest_cache", ".pytype", ".ruff_cache", ".svn", ".tox", ".venv", ".vscode", "__pypackages__", "_build", "buck-out", "build", "dist", "node_modules", "site-packages", "venv", ] line-length = 88 indent-width = 4 target-version = "py311" [tool.ruff.lint] select = [ "E", "W", # pycodestyle (Error & Warning) "F", # Pyflakes (Logical errors) "I", # isort (Import sorting) "B", # flake8-bugbear (Common bugs) "C4", # flake8-comprehensions (List/Dict perf) "UP", # pyupgrade (Modern Python syntax) "PT", # flake8-pytest-style (If using Pytest) "PLE", # Pylint Error "RUF", # Ruff specific rules "FURB", # Refurb rules ] ignore = [ "E501", # Formatter takes care of that ] fixable = ["ALL"] unfixable = [] allowed-confusables = ["–", "❯"] [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" docstring-code-format = false