-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
143 lines (129 loc) · 4.79 KB
/
Copy pathpyproject.toml
File metadata and controls
143 lines (129 loc) · 4.79 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
[build-system]
requires = ["setuptools>=82.0.1"]
build-backend = "setuptools.build_meta"
[project]
name = "agentdrive"
version = "0.3.1-alpha"
description = "AgentDrive — local-first compounding intelligence for AI agents. Experience Graph, Memory Bank, Growth Merge, learned skills. MCP-native for any model."
readme = "README.md"
requires-python = ">=3.11"
authors = [{ name = "AgentDrive Contributors" }]
license = { text = "MIT" }
keywords = ["ai", "agents", "genomes", "evolution", "orchestration", "framework", "agentdrive", "drive"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries :: Application Frameworks",
"Environment :: Console",
"Typing :: Typed",
]
dependencies = [
"pydantic>=2.13.4",
"pyyaml>=6.0.3",
"rich>=15.0.0",
"prompt_toolkit>=3.0.52",
"httpx>=0.28.1",
"fastapi>=0.137.2",
"uvicorn>=0.49.0",
"python-multipart>=0.0.32",
"jinja2>=3.1.6",
# v2 / Milestone 2c: Ed25519 signatures for lineage_share grants.
# Also provides Argon2id KDF for the web UI password store.
"cryptography>=49.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=9.1.0",
"pytest-cov",
"ruff",
"mypy",
"types-PyYAML",
]
test = [
"pytest>=9.1.0",
"pytest-cov",
# tests/test_chat_loop.py uses async def + @pytest.mark.asyncio.
# Required in CI; locally most devs have it system-wide.
"pytest-asyncio>=1.4.0",
# CI exercises the MCP catalog/server as a first-class AgentDrive surface.
"mcp>=1.28.0",
]
mcp = [
"mcp>=1.28.0",
]
[project.scripts]
# AgentDrive product alias — same entrypoint, product-facing name.
agentdrive = "agentdrive.cli:main"
# Direct MCP server executable (ideal for Grok, Claude Code, Cursor stdio configs)
agentdrive-mcp = "agentdrive.adapters.mcp_server:main"
[project.entry-points."agentdrive.scanners"]
# Example: framework = "agentdrive.scanners.framework:FrameworkScanner"
# Register custom scanners here (plugins)
[project.entry-points."agentdrive.workers"]
# Example: external = "agentdrive.workers.adapters:ExternalAgentAdapter"
# Adapters register themselves or via this
[project.entry-points."agentdrive.orchestrator"]
# Future pluggable strategies
[tool.setuptools.packages.find]
where = ["src"]
include = ["agentdrive*"]
[tool.setuptools.package-data]
agentdrive = ["*.yaml", "*.json", "genomes/**/*", "mission_control/static/**/*"]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
# Focused ruleset — bugs we genuinely want caught, not stylistic noise.
# Pyflakes (F) covers undefined-name / unused-import / redefinition — real
# correctness signals. Import-sort (I) keeps imports clean across PRs. We
# deliberately skip the full pycodestyle (E) catalogue and pyupgrade (UP)
# because they produce hundreds of low-value diffs across the legacy
# codebase. Tighten later, milestone by milestone.
select = ["F", "I"]
ignore = []
[tool.ruff.lint.per-file-ignores]
# These files contain conditional / TYPE_CHECKING imports and lazy
# inside-function imports that ruff's static analysis can't fully follow.
# Quiet at file scope rather than littering # noqa across the codebase.
"src/agentdrive/__init__.py" = ["F401", "F811"]
"src/agentdrive/adapters/__init__.py" = ["F401", "F811", "F822"]
"src/agentdrive/adapters/claude_code_adapter.py" = ["F821"]
"src/agentdrive/cli.py" = ["F401"]
"src/agentdrive/dna/grants.py" = ["F821"]
"src/agentdrive/drive/swarm_manager.py" = ["F811"]
"src/agentdrive/genomes_api.py" = ["F821"]
"src/agentdrive/providers/__init__.py" = ["F401"]
"src/agentdrive/reasoning/__init__.py" = ["F821"]
"src/agentdrive/registry/__init__.py" = ["F401", "F811"]
"src/agentdrive/tui/app.py" = ["F821"]
"src/agentdrive/tui/components/__init__.py" = ["F401"]
"tests/conftest.py" = ["F821"]
"tests/test_genome_models.py" = ["F821"]
"tests/test_registry.py" = ["F821"]
[tool.ruff.format]
quote-style = "double"
[tool.pytest.ini_options]
minversion = "7.0"
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = "-ra -q --strict-markers"
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"integration: integration tests that may require external agents",
"asyncio: marks tests as asyncio coroutines (pytest-asyncio)",
]
asyncio_mode = "auto"
[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = false # relax for early stage
ignore_missing_imports = true