-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathpyproject.toml
More file actions
184 lines (172 loc) · 6.27 KB
/
Copy pathpyproject.toml
File metadata and controls
184 lines (172 loc) · 6.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "ai-autodev"
dynamic = ["version"]
description = "Multi-agent orchestrator with tournament-based self-refinement for Claude Code, Cursor, and any LLM-assisted IDE"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "GPL-3.0-or-later"}
authors = [
{name = "Mohamed Ameen", email = "mohamed@example.com"},
]
keywords = [
"ai",
"agents",
"autonomous",
"claude-code",
"cursor",
"llm",
"multi-agent",
"orchestration",
"swarm",
]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Build Tools",
"Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
"click>=8.1",
"pydantic>=2.6",
"filelock>=3.13",
"httpx>=0.27",
"rich>=13.7",
"tenacity>=8.2",
"pyyaml>=6.0",
"structlog>=24.1",
"psutil>=5.9",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.23",
"hypothesis>=6.0",
"pytest-cov>=4.1",
"mypy>=1.14",
# ruff must be a DECLARED dep: the CI Lint gate (.github/workflows/test.yml,
# release.yml) runs `uv run ruff check src tests`, which fails to spawn ruff
# on a clean runner if ruff is only on a local PATH / uv-tool. Capped to the
# validated 0.15.x so a future rule-adding release can't silently re-break
# the gate; bump deliberately + re-verify.
"ruff>=0.15.11,<0.16",
"types-PyYAML>=6.0",
"types-psutil>=5.9",
]
# v0.19.0: hallucination-guard precision. Native-compiled bindings; the
# QA gate falls back to regex when these are not installed.
treesitter = [
"tree-sitter>=0.21",
"tree-sitter-typescript>=0.21",
"tree-sitter-cpp>=0.20",
]
# v0.19.0: mutation-test gate. mutmut is heavyweight; opt-in only.
mutation = [
"mutmut>=2.4.0",
]
# v0.22.0 Phase 1: anti-bloat / code-size QA gate. radon is the AST + raw-LOC
# engine, vulture catches dead symbols at >=80% confidence, pylint surfaces
# duplicate-code (R0801). eradicate (commented-out blocks) is opt-in via
# subprocess detection at runtime — not a required dep here so operators can
# pin their own version. The gate degrades gracefully when any tool is absent.
code-size = [
"radon>=6.0",
"vulture>=2.10",
"pylint>=3.0",
]
# Phase-1 external-benchmark tripwire (SWE-bench-Lite): sb-cli submits
# predictions and parses `resolved_ids`. Deliberately NOT `datasets` or
# `huggingface_hub` here — the dataset loader lazy-imports and degrades
# gracefully when those aren't installed. Opt-in only; not folded into `dev`.
swebench = [
"sb-cli>=0.1",
]
[project.urls]
Homepage = "https://github.com/mohamedameen/autodev"
Documentation = "https://github.com/mohamedameen/autodev#readme"
Repository = "https://github.com/mohamedameen/autodev"
Issues = "https://github.com/mohamedameen/autodev/issues"
Changelog = "https://github.com/mohamedameen/autodev/releases"
[project.scripts]
autodev = "cli:main"
[tool.hatch.version]
path = "src/_version.py"
[tool.hatch.build.targets.wheel]
packages = [
"src/adapters",
"src/agents",
"src/cli",
"src/config",
"src/guardrails",
"src/orchestrator",
"src/plugins",
"src/qa",
"src/runtime",
"src/state",
"src/tournament",
]
[tool.hatch.build.targets.wheel.force-include]
"src/errors.py" = "errors.py"
"src/autologging.py" = "autologging.py"
"src/_version.py" = "_version.py"
[tool.hatch.build.targets.sdist]
include = [
"/src",
"/README.md",
"/LICENSE",
]
[tool.ruff]
# Match the project's minimum supported Python (requires-python = ">=3.11").
target-version = "py311"
# Code in src/ runs up to ~100 cols in places; set the limit to reality so the
# formatter/imports don't fight existing style. NOTE: E501 (line-too-long) is
# NOT in the default rule selection below, so this value does not add errors —
# it only documents intent and guides any future `ruff format` use.
line-length = 100
src = ["src", "tests"]
# tests/fixtures/ holds verbatim code SAMPLES used as test INPUT (e.g. the
# anti_bloat pairs whose whole purpose is to contain dead imports / bloat for
# the code-size gate to measure). Linting — or worse, auto-fixing — them would
# corrupt the fixtures and break the tests, so they are data, not source.
extend-exclude = ["tests/fixtures"]
[tool.ruff.lint]
# Keep ruff's default rule set (E4/E7/E9 pycodestyle + F pyflakes). This is the
# exact selection that produced the gate-N1 baseline (F401/F841/E402/E741/F821/
# F822). Do NOT broaden it here — broadening is a separate, explicit decision.
select = ["E4", "E7", "E9", "F"]
[tool.mypy]
# Pin config so `mypy src` is reproducible in CI. These settings reproduce the
# CURRENT effective (default) strictness that produced the gate-N1 baseline of
# 34 errors — they do NOT crank strictness higher.
python_version = "3.11"
# src/ is a PEP-420 namespace layout (no src/__init__.py); mirror the pytest
# pythonpath so imports like `orchestrator.*` and `state.*` resolve.
mypy_path = ["src", "."]
namespace_packages = true
explicit_package_bases = true
# Third-party deps without type stubs (e.g. radon) must not fail the gate.
ignore_missing_imports = true
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
pythonpath = ["src", "."]
markers = [
"resolver_enabled: opt the test back into the ADR-0047 blocker-resolver chokepoint (disabled by default in the suite via the autouse fixture in tests/conftest.py)",
"swebench: SWE-bench-Lite host-arm64 solve/score tests (slow / opt-in)",
"bench_external: external-benchmark tests needing sb-cli or network (deselect in CI)",
]
filterwarnings = [
"ignore:coroutine 'create_subprocess_exec' was never awaited:RuntimeWarning",
"ignore:coroutine 'AsyncMockMixin._execute_mock_call' was never awaited:RuntimeWarning",
"ignore:Exception ignored in.*create_subprocess_exec:pytest.PytestUnraisableExceptionWarning",
"ignore:unclosed event loop:ResourceWarning",
]