-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathpyproject.toml
More file actions
136 lines (129 loc) · 5.37 KB
/
Copy pathpyproject.toml
File metadata and controls
136 lines (129 loc) · 5.37 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
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "arnold"
version = "0.23.0"
description = "Arnold — AI agent harness for coordinating Claude and GPT to make and execute extremely robust plans, with Megaplan as the flagship planning pipeline plugin"
requires-python = ">=3.11"
license = { text = "OSNL-0.2" }
authors = [
{ name = "Peter O'Malley" },
]
keywords = ["ai", "planning", "orchestration", "claude", "codex", "arnold", "megaplan"]
classifiers = [
"Development Status :: 3 - Alpha",
"Environment :: Console",
"Intended Audience :: Developers",
"Topic :: Software Development :: Quality Assurance",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
dependencies = [
"pyyaml>=6.0",
"pydantic>=2.0",
"python-ulid>=3.0",
"psutil>=5.9",
# Resident/subagent workers validate source edits with this repository's
# supported `python -m pytest` workflow. They run in the same editable
# Arnold interpreter, so the base install must include its test runner.
"pytest>=8.0",
# --- Hermes/agent backend (core) ---------------------------------------
# The hermes/agent runtime backs prep research, critique, fanout, and the
# agentic phases. It is NOT optional: the canonical prep models route to
# `hermes:deepseek:...` for every run, so a chain that does prep WILL import
# this backend. Historically these lived in the `[agent]` optional extra
# plus a `[tool.uv] default-extras = ["agent"]` hint, but some uv versions
# silently ignore `default-extras`, producing a fresh install that imports
# fine until prep iteration N fails with a confusing `agent_deps_missing`.
# Moving them into core makes `pip install -e .` / `uv pip install -e .`
# ALWAYS ship a working backend. (The `[agent]` extra below is kept as a
# back-compat alias for callers that still reference it.)
"openai",
"anthropic>=0.39.0",
"python-dotenv",
"fire",
"httpx",
"rich",
"requests",
"prompt_toolkit",
"firecrawl-py",
"fal-client",
"edge-tts",
"faster-whisper>=1.0.0",
"PyJWT[crypto]",
"discord.py>=2.6,<3",
]
[project.scripts]
arnold = "arnold.cli:main"
agentbox = "agentbox.cli:main"
[project.optional-dependencies]
db = [
"psycopg[binary]>=3.1",
]
# Back-compat alias: the agent backend's packages are now core dependencies
# (see [project].dependencies). This extra is retained so existing install
# commands / docs that say `pip install '.[agent]'` keep working as a no-op.
agent = []
[tool.uv]
# The hermes/agent backend's packages are now core [project].dependencies, so a
# plain `uv pip install -e .` / `uv sync` always ships a working backend. We no
# longer rely on `default-extras` (some uv versions silently ignore it, which is
# what produced the confusing mid-prep `agent_deps_missing` failures).
[tool.hatch.build]
exclude = [
"**/__pycache__/**",
"**/*.pyc",
"arnold/pipelines/**",
"docs/archive/**",
"tests/archive/**",
"tests/arnold/pipelines/megaplan/**",
".megaplan/**",
]
[tool.hatch.build.targets.wheel]
packages = ["arnold", "arnold_pipelines", "agentbox"]
artifacts = [
"py.typed",
"arnold/pipelines/evidence_pack/SKILL.md",
"arnold/pipelines/evidence_pack/pipeline_ids.json",
"arnold_pipelines/**/pipeline_ids.json",
"arnold_pipelines/**/SKILL.md",
"arnold_pipelines/**/*.pypeline",
"arnold_pipelines/megaplan/skills/**/*.py",
"arnold_pipelines/megaplan/skills/fix-the-fixer/references/*.md",
"arnold_pipelines/megaplan/skills/fix-the-fixer/agents/*.yaml",
"arnold_pipelines/megaplan/strategy/CONTRACT.md",
"arnold_pipelines/megaplan/strategy/TEMPLATE.md",
"arnold_pipelines/megaplan/skills/fix-the-fixer/references/*.md",
"arnold_pipelines/megaplan/skills/fix-the-fixer/agents/*.yaml",
"agentbox/systemd/*.service",
]
exclude = [
"**/__pycache__/**",
"**/*.pyc",
"arnold/pipelines/**",
"arnold_pipelines/megaplan/cloud/_reference/**",
"arnold_pipelines/megaplan/agent/pyproject.toml",
"docs/archive/**",
"tests/archive/**",
".megaplan/**",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["."]
addopts = "--import-mode=importlib"
python_files = ["test_*.py", "editorial_*.py"]
norecursedirs = ["tests/archive", "tests/arnold/pipelines/deliberation", ".*", "build", "dist", "CVS", "_darcs", "{arch}", "*.egg"]
markers = [
"asyncio: async tests, primarily for the vendored agent runtime",
"conformance: opt-in live conformance tests that require external authenticated CLIs",
"integration: integration tests that may exercise external process boundaries",
"slow: tests that require Docker or other external runtime dependencies",
"crash_isolation: tests verifying crash isolation between subprocess drivers",
"version_skew: tests verifying compatibility across version skew scenarios",
"hinge_gate: gate test for the M3 hinge (R1 authority flip)",
"substrate_swap: M4 oracle tests that must remain green under substrate substitution (lease/budget/journal swap)",
"replay_oracle: M5c replay tests that capture legacy control outputs and opt into routed parity action by action",
"m8_benchmark: M8 acceptance-gate benchmark tests (opt-in, width-32 thresholds)",
"wheel_smoke: build and install wheel/sdist into a clean venv",
"live_smoke: opt-in real backend smoke tests requiring credentials",
]