File size: 2,014 Bytes
df84e45 | 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 | [build-system]
requires = ["setuptools>=77"]
build-backend = "setuptools.build_meta"
[project]
name = "openenv-design-canvas"
version = "0.1.0"
description = "Recreate graphic designs from Crello in a real editor: tool calls, MCP, HTML, or computer use, one document model and one renderer"
requires-python = ">=3.11,<3.14"
license = "Apache-2.0"
dependencies = [
"openenv==0.7.0",
"fastmcp>=3,<4",
"skia-python>=138,<200",
"numpy>=1.26,<3",
"scipy>=1.13,<2",
"Pillow>=11,<13",
"pydantic>=2.8,<3",
"huggingface-hub>=0.34,<2",
"gradio>=6,<7",
"uvicorn[standard]>=0.30",
"websockets>=12",
# The GUI surface and task-pack preparation are core features, not add-ons.
"playwright>=1.48,<2",
"datasets>=3,<6",
"pyarrow>=17",
]
[project.optional-dependencies]
rollout = ["anthropic>=0.60", "openai>=1.60,<3", "python-dotenv>=1"]
# real apps in Daytona sandboxes run by the env server (realapps/daytona.py, DESIGN_CANVAS_APPS=daytona)
daytona = ["daytona>=0.220,<1"]
dev = ["pytest>=8,<10", "ruff>=0.12,<1", "httpx>=0.27", "openenv-design-canvas[rollout]"]
[project.scripts]
# OpenEnv's entry point (uv run server / openenv serve); PORT, DESIGN_CANVAS_WORKERS and DESIGN_CANVAS_HOST configure it
server = "design_canvas.server.app:main"
design-canvas = "design_canvas.cli:main"
design-canvas-smoke = "design_canvas.smoke:main"
[tool.setuptools]
packages = ["design_canvas", "design_canvas.core", "design_canvas.server", "design_canvas.realapps", "design_canvas.realapps.penpot",
"design_canvas.realapps.desktop"]
package-dir = {design_canvas = "."}
[tool.setuptools.package-data]
design_canvas = ["openenv.yaml", "web/*", "web/**/*"]
[tool.pytest.ini_options]
testpaths = ["tests"]
[tool.ruff]
target-version = "py311"
line-length = 100
[tool.ruff.lint]
select = ["E4", "E7", "E9", "F", "I", "B"]
[tool.ruff.lint.flake8-bugbear]
# FastAPI and Gradio read these call defaults as declarations, not shared state.
extend-immutable-calls = ["fastapi.Body", "gradio.Progress"]
|