Files
2026-01-11 12:05:37 +09:00

136 lines
5.8 KiB
TOML

[project]
name = "deepagents"
version = "0.3.5"
description = "General purpose 'deep agent' with sub-agent spawning, todo list capabilities, and mock file system. Built on LangGraph."
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.11,<4.0"
dependencies = [
"langchain-core>=1.2.6,<2.0.0",
"langchain>=1.2.3,<2.0.0",
"langchain-anthropic>=1.3.1,<2.0.0",
"langchain-google-genai>=4.1.3,<5.0.0",
"wcmatch",
]
[project.urls]
Homepage = "https://docs.langchain.com/oss/python/deepagents/overview"
Documentation = "https://reference.langchain.com/python/deepagents/"
Source = "https://github.com/langchain-ai/deepagents"
Twitter = "https://x.com/LangChainAI"
Slack = "https://www.langchain.com/join-community"
Reddit = "https://www.reddit.com/r/LangChain/"
[dependency-groups]
test = [
"pytest",
"pytest-cov",
"pytest-xdist",
"ruff>=0.12.2,<0.13.0",
"mypy>=1.18.1,<1.19.0",
"pytest-asyncio>=1.3.0",
]
dev = [
"langchain-openai",
"twine",
"build",
]
[build-system]
requires = ["setuptools>=73.0.0", "wheel"]
build-backend = "setuptools.build_meta"
[tool.setuptools.package-data]
"*" = ["py.typed", "*.md"]
[tool.ruff]
line-length = 150
# Exclude any files that shouldn't be linted
exclude = []
[tool.ruff.format]
docstring-code-format = true # Formats code blocks in docstrings
[tool.ruff.lint]
select = [
"ALL" # Enable all rules by default
]
ignore = [
"COM812", # Messes with the formatter
"ISC001", # Messes with the formatter
"PERF203", # Rarely useful
"SLF001", # Private member access
"PLC0415", # Imports should be at the top. Not always desirable
"PLR0913", # Too many arguments in function definition
"PLC0414", # Inconsistent with how type checkers expect to be notified of intentional re-exports
"C901", # Too complex
]
unfixable = ["B028"] # Rules that shouldn't be auto-fixed
[tool.ruff.lint.pyupgrade]
keep-runtime-typing = true
[tool.ruff.lint.flake8-annotations]
allow-star-arg-any = true
[tool.ruff.lint.pydocstyle]
convention = "google" # Google-style docstrings
ignore-var-parameters = true
[tool.ruff.lint.per-file-ignores]
"tests/*" = [
"D1", # Skip documentation rules in tests
"S101", # Allow asserts in tests
"S311", # Allow pseudo-random generators in tests
# Add more test-specific ignores
]
"deepagents/backends/composite.py" = ["B007", "BLE001", "D102", "EM101", "FBT001", "FBT002", "PLW2901", "S110"]
"deepagents/backends/filesystem.py" = ["BLE001", "D102", "D205", "D417", "DTZ006", "EM101", "EM102", "FBT001", "FBT002", "PLR0912", "S112", "TRY003"]
"deepagents/backends/protocol.py" = ["B024", "B027", "FBT001", "FBT002"]
"deepagents/backends/sandbox.py" = ["FBT001", "FBT002", "PLR2004"]
"deepagents/backends/state.py" = ["ANN204", "D102", "D205", "EM101", "FBT001", "FBT002", "PERF401"]
"deepagents/backends/store.py" = ["A002", "ANN204", "BLE001", "D102", "D205", "F821", "FBT001", "FBT002", "PERF401"]
"deepagents/backends/utils.py" = ["D301", "E501", "EM101", "FBT001", "RET504", "RUF005", "TRY003"]
"deepagents/middleware/filesystem.py" = ["EM102", "TRY003"]
"deepagents/middleware/memory.py" = ["E501", "EM102", "G004", "PERF401", "SIM108", "T201", "TC002", "TC003", "TRY003"]
"deepagents/middleware/skills.py" = ["EM101", "SIM108", "TC002", "TC003", "TRY003"]
"tests/integration_tests/test_deepagents.py" = ["ANN201", "C419", "E731", "PLR2004", "SIM118", "TID252"]
"tests/integration_tests/test_filesystem_middleware.py" = ["ANN001", "ANN201", "ANN202", "ARG002", "E731", "PLR2004", "SIM118", "T201", "TID252"]
"tests/integration_tests/test_hitl.py" = ["ANN201", "C419", "E501", "PLR2004", "TID252"]
"tests/integration_tests/test_subagent_middleware.py" = ["ANN001", "ANN201", "F841", "RUF012", "SIM118"]
"tests/unit_tests/backends/test_composite_backend.py" = ["ANN001", "ANN201", "ANN202", "ARG001", "ARG002", "F841", "INP001", "PLR2004", "PT018"]
"tests/unit_tests/backends/test_composite_backend_async.py" = ["ANN001", "ANN201", "ANN202", "ARG001", "ARG002", "F841", "INP001", "PLR2004", "PT018"]
"tests/unit_tests/backends/test_filesystem_backend.py" = ["ANN201", "ARG005", "B007", "B011", "INP001", "PLR2004", "PT015", "PT018"]
"tests/unit_tests/backends/test_filesystem_backend_async.py" = ["ANN201", "ARG005", "B007", "INP001", "PLR2004", "PT011", "PT018"]
"tests/unit_tests/backends/test_state_backend.py" = ["ANN001", "ANN201", "INP001", "PLR2004", "PT018"]
"tests/unit_tests/backends/test_state_backend_async.py" = ["ANN001", "ANN201", "INP001", "PLR2004", "PT018"]
"tests/unit_tests/backends/test_store_backend.py" = ["ANN201", "INP001", "PLR2004", "PT018"]
"tests/unit_tests/backends/test_store_backend_async.py" = ["ANN201", "INP001", "PLR2004", "PT018"]
"tests/unit_tests/chat_model.py" = ["ARG002", "D301", "PLR0912", "RUF012"]
"tests/unit_tests/middleware/test_memory_middleware.py" = ["F841", "PGH003", "PLR2004", "RUF001", "TC002"]
"tests/unit_tests/middleware/test_memory_middleware_async.py" = ["F841", "PGH003", "PLR2004", "RUF001"]
"tests/unit_tests/middleware/test_skills_middleware.py" = ["F841", "PGH003", "PLR2004", "TC002"]
"tests/unit_tests/middleware/test_skills_middleware_async.py" = ["F841", "PGH003", "PLR2004"]
"tests/unit_tests/middleware/test_validate_path.py" = ["ANN201"]
"tests/unit_tests/test_end_to_end.py" = ["ARG002", "PLR2004"]
"tests/unit_tests/test_middleware.py" = ["ANN001", "ANN201", "ANN202", "ARG002", "E731", "PLR2004", "SIM118", "T201"]
"tests/unit_tests/test_middleware_async.py" = ["ANN001", "ANN201", "ANN202", "ARG002"]
"tests/unit_tests/test_subagents.py" = ["PLR2004"]
"tests/unit_tests/test_todo_middleware.py" = ["E501", "PLR2004"]
"tests/utils.py" = ["ANN001", "ANN201", "RUF012", "SIM118"]
[tool.mypy]
strict = true
ignore_missing_imports = true
enable_error_code = ["deprecated"]
# Optional: reduce strictness if needed
disallow_any_generics = false
warn_return_any = false
[tool.pytest.ini_options]
asyncio_mode = "auto"