| 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 = "team@laddr.dev" } |
| ] |
|
|
| [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 } |
|
|