-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
129 lines (119 loc) · 5.56 KB
/
Copy pathpyproject.toml
File metadata and controls
129 lines (119 loc) · 5.56 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
# Python distribution for SuperBrowser — the nanobot orchestrator + browser
# bridge half of the project. The TS browser engine is published separately to
# npm (see package.json). Import names stay `superbrowser_bridge` /
# `vision_agent`; the distribution name is `runagent-superbrowser` to match the
# npm package and the GitHub repo.
#
# Dependencies below are the DIRECT, loosely-pinned deps the two shipped
# packages import. `requirements.txt` remains the fully-pinned dev/CI lockfile
# (and the known-good `nanobot-ai` tree). Audit command used to derive this set:
# grep -rhoE "^[[:space:]]*(from|import) [a-z0-9_]+" nanobot/superbrowser_bridge nanobot/vision_agent
[project]
name = "runagent-superbrowser"
version = "0.1.0"
description = "Nanobot orchestrator + stealth browser bridge for SuperBrowser — the browser your agent won't get blocked on."
readme = "README.md"
requires-python = ">=3.11"
license = { text = "MIT" }
authors = [{ name = "RunAgent" }]
keywords = ["browser", "agent", "captcha", "cloudflare", "stealth", "nanobot", "automation", "scraping", "mcp"]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Internet :: WWW/HTTP :: Browsers",
"Operating System :: OS Independent",
]
dependencies = [
# released nanobot-ai from PyPI. Pinned to the 0.2.x line to match local
# dev: 0.2.x ships the progress_hook worker loop that 0.1.x lacks, which the
# worker relies on for multi-step persistence (0.1.5 gives up markedly
# earlier on long browser flows). Bridge compatibility on 0.2.2 is verified —
# every superbrowser_bridge module imports and runs cleanly under it.
"nanobot-ai>=0.2.2,<0.3",
"httpx>=0.28",
"curl_cffi>=0.7",
"patchright>=1.49",
"playwright-stealth>=2.0",
"python-dotenv>=1.0",
"pillow>=10",
"loguru>=0.7",
"lxml>=5.0",
"html2text>=2024.2.26",
"openai>=1.40",
"pydantic>=2.0",
"aiohttp>=3.9",
"chess>=1.11",
]
[project.optional-dependencies]
# Vision-based slider/jigsaw/rotation puzzle solving uses OpenCV; imported
# lazily inside the puzzle engines, so it's optional.
puzzles = ["opencv-python>=4.8", "numpy>=1.24"]
# Remote (serverless) + local-agent (Docker) execution reuse the runagent SDK's
# RunAgentClient. 0.1.40+ has `runagent serve`, `config --register-agent`, and
# RunAgentClient(local=True, host=, port=) — all needed by the all-in-one image.
remote = ["runagent>=0.1.40"]
dev = ["pytest>=8", "ruff>=0.5", "build", "twine"]
[project.scripts]
superbrowser-agent = "superbrowser_bridge.cli:main"
superbrowser-doctor = "superbrowser_bridge.doctor:main"
superbrowser-run = "runagent_superbrowser.__main__:main"
[project.urls]
Homepage = "https://github.com/runagent-dev/runagent-superbrowser"
Repository = "https://github.com/runagent-dev/runagent-superbrowser"
Issues = "https://github.com/runagent-dev/runagent-superbrowser/issues"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
# Ship the top-level packages from under ./nanobot/ flattened to the wheel
# root, so installed imports (`import vision_agent`, `import superbrowser_bridge`,
# `import runagent_superbrowser`) match the in-tree layout. Internal tests,
# caches and workspaces are excluded.
packages = ["nanobot/superbrowser_bridge", "nanobot/vision_agent", "nanobot/runagent_superbrowser"]
exclude = ["**/tests", "**/tests/**", "**/__pycache__", "**/*.pyc", "**/.pytest_cache"]
[tool.hatch.build.targets.wheel.force-include]
# The per-role SOUL.md files ARE the agents' system prompts (nanobot loads
# SOUL.md from each workspace). They live in nanobot/workspace_<role>/ — not
# under a shipped package — so without this they'd never reach an installed
# user and every agent would fall back to nanobot's empty default prompt.
# Ship them as package data under superbrowser_bridge/_prompts/<role>/ so
# `importlib.resources.files("superbrowser_bridge")/"_prompts"` resolves them.
# `superbrowser_bridge.workspaces.provision()` then seeds them into the
# writable per-role workspaces at runtime.
"nanobot/workspace_orchestrator/SOUL.md" = "superbrowser_bridge/_prompts/orchestrator/SOUL.md"
"nanobot/workspace_browser/SOUL.md" = "superbrowser_bridge/_prompts/browser/SOUL.md"
"nanobot/workspace_search/SOUL.md" = "superbrowser_bridge/_prompts/search/SOUL.md"
[tool.hatch.build.targets.sdist]
include = [
"nanobot/superbrowser_bridge",
"nanobot/vision_agent",
"nanobot/runagent_superbrowser",
# SOUL prompts: kept in the sdist so building a wheel from it can
# force-include them as package data (see the wheel target above).
"nanobot/workspace_orchestrator/SOUL.md",
"nanobot/workspace_browser/SOUL.md",
"nanobot/workspace_search/SOUL.md",
"README.md",
"LICENSE",
"pyproject.toml",
]
exclude = [
"**/tests",
"**/__pycache__",
"**/.pytest_cache",
]
[tool.ruff]
line-length = 120
target-version = "py311"
[tool.uv]
# The `remote` extra pulls in `runagent`, which hard-pins `websockets==15.0.1`,
# while `nanobot-ai` requires `websockets>=16.0,<17.0`. The two can't co-resolve.
# runagent works fine on websockets 16 (stable `connect` API) — the Docker image
# handles this by installing runagent with `--no-deps`. For uv we force websockets
# into nanobot-ai's range so `uv sync` / `uv sync --extra remote` resolve cleanly.
# (pip/hatchling ignore this section, so the Docker build + `pip install` are
# unaffected.)
override-dependencies = ["websockets>=16,<17"]