|
|
name = "laddr-workspace" |
|
|
description = "Laddr - A transparent, Docker-native, observable, distributed agent framework. Build scalable multi-agent systems with local-first defaults and complete control." |
|
|
readme = "README.md" |
|
|
requires-python = ">=3.10,<3.14" |
|
|
authors = [ |
|
|
{ name = "Laddr Team", email = "[email protected]" } |
|
|
] |
|
|
|
|
|
[dependency-groups] |
|
|
dev = [ |
|
|
"ruff>=0.13.1", |
|
|
"mypy>=1.18.2", |
|
|
"pre-commit>=4.3.0", |
|
|
"bandit>=1.8.6", |
|
|
"pytest>=8.4.2", |
|
|
"pytest-asyncio>=1.2.0", |
|
|
"pytest-subprocess>=1.5.3", |
|
|
"vcrpy==7.0.0", |
|
|
"pytest-recording>=0.13.4", |
|
|
"pytest-randomly>=4.0.1", |
|
|
"pytest-timeout>=2.4.0", |
|
|
"pytest-xdist>=3.8.0", |
|
|
"pytest-split>=0.10.0", |
|
|
"types-requests~=2.31.0.6", |
|
|
"types-pyyaml==6.0.*", |
|
|
"types-regex==2024.11.6.*", |
|
|
"types-appdirs==1.4.*", |
|
|
"boto3-stubs[bedrock-runtime]>=1.40.54", |
|
|
"types-psycopg2>=2.9.21.20251012", |
|
|
"types-pymysql>=1.1.0.20250916", |
|
|
] |
|
|
|
|
|
|
|
|
[tool.ruff] |
|
|
src = ["lib/laddr"] |
|
|
extend-exclude = [ |
|
|
"lib/laddr/tests/", |
|
|
] |
|
|
respect-gitignore = true |
|
|
force-exclude = true |
|
|
fix = true |
|
|
target-version = "py310" |
|
|
|
|
|
[tool.ruff.format] |
|
|
docstring-code-format = true |
|
|
|
|
|
[tool.ruff.lint] |
|
|
future-annotations = true |
|
|
extend-select = [ |
|
|
"E", |
|
|
"F", |
|
|
"B", |
|
|
"S", |
|
|
"RUF", |
|
|
"N", |
|
|
"W", |
|
|
"I", |
|
|
"T", |
|
|
|
|
|
"PERF", |
|
|
"PIE", |
|
|
"TID", |
|
|
"ASYNC", |
|
|
"RET", |
|
|
"UP006", |
|
|
"UP007", |
|
|
"UP035", |
|
|
"UP037", |
|
|
"UP045", |
|
|
"UP004", |
|
|
"UP008", |
|
|
"UP010", |
|
|
"UP018", |
|
|
"UP031", |
|
|
"UP032", |
|
|
"I001", |
|
|
"I002", |
|
|
] |
|
|
ignore = ["E501"] |
|
|
|
|
|
[tool.ruff.lint.flake8-tidy-imports] |
|
|
ban-relative-imports = "all" |
|
|
|
|
|
[tool.ruff.lint.flake8-type-checking] |
|
|
runtime-evaluated-base-classes = ["pydantic.BaseModel"] |
|
|
|
|
|
[tool.ruff.lint.isort] |
|
|
no-sections = false |
|
|
case-sensitive = true |
|
|
combine-as-imports = true |
|
|
force-single-line = false |
|
|
force-sort-within-sections = true |
|
|
known-first-party = [] |
|
|
section-order = ["future", "standard-library", "third-party", "first-party", "local-folder"] |
|
|
lines-after-imports = 2 |
|
|
split-on-trailing-comma = true |
|
|
|
|
|
[tool.ruff.lint.pydocstyle] |
|
|
convention = "google" |
|
|
ignore-decorators = ["typing.overload"] |
|
|
|
|
|
[tool.ruff.lint.per-file-ignores] |
|
|
"lib/laddr/tests/**/*.py" = ["S101", "RET504", "S105", "S106"] |
|
|
|
|
|
|
|
|
[tool.mypy] |
|
|
strict = true |
|
|
disallow_untyped_defs = true |
|
|
disallow_any_unimported = true |
|
|
no_implicit_optional = true |
|
|
check_untyped_defs = true |
|
|
warn_return_any = true |
|
|
show_error_codes = true |
|
|
warn_unused_ignores = true |
|
|
python_version = "3.12" |
|
|
exclude = [ |
|
|
"lib/laddr/tests/", |
|
|
] |
|
|
plugins = ["pydantic.mypy"] |
|
|
|
|
|
|
|
|
[tool.bandit] |
|
|
exclude_dirs = [] |
|
|
|
|
|
|
|
|
[tool.pytest.ini_options] |
|
|
markers = [ |
|
|
"telemetry: mark test as a telemetry test (don't mock telemetry)", |
|
|
] |
|
|
testpaths = [ |
|
|
"lib/laddr/tests", |
|
|
] |
|
|
asyncio_mode = "strict" |
|
|
asyncio_default_fixture_loop_scope = "function" |
|
|
addopts = "--tb=short" |
|
|
python_files = "test_*.py" |
|
|
python_classes = "Test*" |
|
|
python_functions = "test_*" |
|
|
|
|
|
|
|
|
[tool.uv.workspace] |
|
|
members = [ |
|
|
"lib/laddr", |
|
|
] |
|
|
|
|
|
|
|
|
[tool.uv.sources] |
|
|
laddr = { workspace = true } |
|
|
|