Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
170 lines (159 loc) · 7.24 KB
/
Copy pathpyproject.toml
File metadata and controls
170 lines (159 loc) · 7.24 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
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "agentenv-framework"
version = "0.9.1367"
description = "SDK and CLI for building, deploying and running agent environments and the tasks that grade agents in them."
readme = "README.md"
license = "Apache-2.0"
license-files = ["LICENSE", "NOTICE", "THIRD_PARTY_NOTICES.md"]
authors = [{ name = "Scale AI" }]
requires-python = ">=3.11.4"
keywords = ["reinforcement-learning", "rl-environments", "ai-agents", "llm-agents", "agent-evaluation", "mcp", "model-context-protocol", "a2a", "sandbox"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"Operating System :: MacOS",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries :: Application Frameworks",
"Typing :: Typed",
]
dependencies = [
"agentenv-framework-protocol[computer]>=0.1.0", # a computer_driver env's put reads the driver class with it
"certifi>=2024.2.2", # the public roots the local transfer CA's trust bundle carries
"click>=8.0.0",
"cryptography>=42", # the local transfer CA
"httpx>=0.27.0",
"litellm>=1.96.0,<1.97",
"mcp>=1.25,<2", # same floor as env/gateway/requirements.txt and agentenv-protocol; 2.0.0 removed mcp.server.fastmcp, imported at module scope by env/gateway
"packaging>=22", # evaluates a plugin's requirement markers with no extra
"a2a-sdk==0.3.26",
"pydantic>=2.12", # model_validate(extra=...) reads agent responses tolerantly
"pymongo>=4.7",
"python-multipart>=0.0.13", # the local grant server's upload forms
"pyyaml>=6.0",
"starlette>=0.40", # the local grant server
"uvicorn>=0.47", # 0.47 adds ssl_context_factory, how the local grant server gets its TLS context
"modal>=1.5.2.dev22", # dev22 adds _experimental_create(tags=); dev2 added VM-mode V2 (vm_runtime)
"e2b~=2.46.4", # AsyncSandbox/AsyncTemplate APIs validated against the 2.46 line
"fastapi>=0.110", # the explorer, agent-env up
]
[project.optional-dependencies]
# agent_env.openenv: bundle tasks served as OpenEnv envs. No cap: OpenEnv ships a minor release a week.
openenv = [
"openenv>=0.9",
]
# The AWS store backends (S3, Secrets Manager, DynamoDB, ECR), selected by impl pointer in config.toml.
aws = [
"boto3>=1.35.0",
"botocore>=1.35.0",
]
# The Google Cloud store backends, selected by impl pointer in config.toml.
gcp = [
"google-api-core>=2.24",
"google-auth>=2.40",
"google-cloud-secret-manager>=2.20",
"google-cloud-storage>=3.0",
"requests>=2.31",
]
# The sail_vm sandbox provider (Sail Research Sailboxes), selected with --sandbox sail_vm.
sail = [
"sail~=0.12.8", # Sailbox exec/fs/listener/egress APIs validated against the 0.12 line
]
vercel = [
"anyio>=4,<5",
"httpx2>=2.13.1,<3",
"vercel-sandbox>=0.7.0,<0.8", # provides the vercel.sandbox namespace without the full vercel bundle
]
# The Tensorlake sandbox provider, selected as the built-in `tensorlake` backend.
tensorlake = [
"tensorlake~=0.5.140", # AsyncSandbox APIs validated against 0.5.140 to 0.5.149
]
# The Tenki Sandbox VM provider, selected as the built-in `tenki` backend.
tenki = [
"tenki[async]~=1.4.1", # AsyncClient/AsyncSandbox exec, stdin, ports and egress APIs validated against the 1.4 line
]
# The boxd machine provider, selected as the built-in `boxd` backend.
boxd = [
"boxd~=0.2.17", # AsyncBoxd machines, exec, proxies, egress allowlist and delete-after validated against 0.2.17
]
# The Daytona sandbox provider, selected as the built-in `daytona` backend.
daytona = [
"daytona~=0.224.0", # AsyncDaytona sandboxes, sessions, file API, preview links and egress lists validated against 0.224
]
dev = [
"agentenv-framework[aws,boxd,daytona,gcp,openenv,sail,tensorlake,tenki,vercel]", # exercise portable optional providers and stores in CI
"fastmcp>=3.4,<4", # the standalone-fastmcp mount path of the protocol; <4 keeps mcp 1.x
"Pillow>=10.4", # the protocol's computer extra, whose tests the unit tier runs
"av>=17", # the protocol's computer extra, whose tests the unit tier runs and which the recording tests decode with
"griffelib==2.3.0", # the plugin API check; exact, since what it reports as a break changes between releases
"tomli-w==1.2.0", # the Codex agent's config writer, which only its image installs; its tests import it
"moto>=5.0.0",
"psycopg2-binary>=2.9.0", # the gateway server module's driver; outside its container only the tests import it
"pytest>=9.0",
"pytest-asyncio>=0.23.0",
"pytest-dependency>=0.6.0",
"pytest-socket>=0.7.0",
"pytest-timeout>=2.3.0",
"pytest-xdist>=3.0.0",
"ruff==0.16.10", # the lint gate; exact, since what it reports changes between releases
]
smol = [
"smolmachines>=1.27.0",
]
[project.scripts]
agent-env = "agent_env.cli:cli"
[project.entry-points."agent_env.bundles"]
agents = "agent_env"
drivers = "agent_env"
hello = "agent_env.examples"
echo-mcp = "agent_env.examples"
mail-mcp = "agent_env.examples"
next-env-event = "agent_env.examples"
[project.urls]
Homepage = "https://www.agentenvframework.com"
Documentation = "https://www.agentenvframework.com/docs"
Repository = "https://github.com/scaleapi/agentenv-framework"
Issues = "https://github.com/scaleapi/agentenv-framework/issues"
Changelog = "https://github.com/scaleapi/agentenv-framework/releases"
[tool.hatch.build.targets.wheel]
packages = ["src/agent_env"]
# The explorer UI *source* lives at src/agent_env/explorer/ui/ (a Next.js project).
# Keep it out of the wheel — only its built output ships, copied to explorer/static/
# by the UI build step. node_modules/out/.next are already .gitignore-excluded.
exclude = ["src/agent_env/explorer/ui"]
# The release workflow writes it and git ignores it; a build ships it when it's there.
artifacts = ["src/agent_env/env/published_images.json"]
[tool.hatch.build.targets.sdist]
only-include = ["src", "tst", "packages/agentenv-protocol", ".github/scripts"]
artifacts = ["src/agent_env/env/published_images.json"]
[tool.uv.workspace]
members = ["packages/agentenv-protocol"]
[tool.uv.sources]
agentenv-framework-protocol = { workspace = true }
[tool.pytest.ini_options]
asyncio_mode = "strict"
asyncio_default_test_loop_scope = "session"
asyncio_default_fixture_loop_scope = "session"
filterwarnings = [
"ignore:Pydantic serializer warnings:UserWarning",
]
markers = [
"integration: marks tests as integration tests (may require external services)",
"installer: runs the real pip, uv and pipx offline against locally built wheels (tst/installer; `make installer-test`)",
"int_test_slow: marks integration tests that take minutes per test (real Docker build / sandbox VM / Modal / gateway / agent). Excluded from the fast tier; opt in via `make int-test-slow`.",
]
log_cli = true
log_cli_level = "INFO"
log_cli_format = "%(asctime)s %(levelname)s %(name)s: %(message)s"
[tool.ruff.lint]
select = ["F"]