Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .assets-revision
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,9 @@
# superseded 11278264-byte pack, sha256 c533c283...) no longer applies and
# `scripts/fetch_assets.sh` installs sites/kaggle's assets from this pin.
repo: ChilleD/WebHarbor
revision: b7e605c0ec5fc47de85b09e7427162cc50e38980
# TEMPORARY pin to the reviewer asset PR so this branch builds standalone:
# ChilleD/WebHarbor discussions/86. That commit is upstream's current pin
# (b7e605c) plus phet_simulations.tar.gz; every other archive is byte-
# identical, verified by comparing file OIDs of both trees.
# Repin to the merge commit once #86 lands.
revision: 9c6ab2169d64f52cdee44a12921efc1e9061a1ee
10 changes: 7 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ Inside the image, sites live at `/opt/WebSyn/<site>/`. The path predates the ren
# fresh clone
./scripts/fetch_assets.sh # pulls assets from HF
./scripts/build.sh # docker build -t webharbor:dev .
docker run -d -p 8101:8101 -p 40000-40028:40000-40028 webharbor:dev
docker run -d -p 8101:8101 -p 40000-40029:40000-40029 webharbor:dev
```

Or use the published image directly:

```bash
docker run -d -p 8101:8101 -p 40000-40028:40000-40028 \
docker run -d -p 8101:8101 -p 40000-40029:40000-40029 \
battalion7244/webharbor:latest
```

Expand Down Expand Up @@ -136,7 +136,11 @@ python3 -m py_compile sites/<site>/app.py

# 3. run on alt ports (don't collide with anything you already have running)
docker run -d --rm --name wh-test \
-p 8201:8101 -p 41000-41028:40000-40028 webharbor:dev
<<<<<<< HEAD
-p 8201:8101 -p 41000-41028:40000-40029 webharbor:dev
=======
-p 8201:8101 -p 41000-41027:40000-40029 webharbor:dev
>>>>>>> c7b5a41 (chore(phet_simulations): register as site 25 and sweep port range to 40024)

# 4. control plane healthy, all sites alive
curl -s http://localhost:8201/health | python3 -m json.tool | head
Expand Down
6 changes: 5 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,8 @@ The full agent guide is loaded above via `@AGENTS.md`. The notes below apply onl

## Existing containers

If a container is already running on `:8101` / `:40000-40028`, treat it as the user's working environment — don't `docker stop` or `docker rm` it without explicit confirmation. Spin up your test container under a different name on alt ports (`:8201`, `:41000-41028`).
<<<<<<< HEAD
If a container is already running on `:8101` / `:40000-40029`, treat it as the user's working environment — don't `docker stop` or `docker rm` it without explicit confirmation. Spin up your test container under a different name on alt ports (`:8201`, `:41000-41028`).
=======
If a container is already running on `:8101` / `:40000-40029`, treat it as the user's working environment — don't `docker stop` or `docker rm` it without explicit confirmation. Spin up your test container under a different name on alt ports (`:8201`, `:41000-41027`).
>>>>>>> c7b5a41 (chore(phet_simulations): register as site 25 and sweep port range to 40024)
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ git clone https://github.com/<you>/webharbor && cd webharbor
./scripts/fetch_assets.sh # pull current assets
./scripts/new_site.py mywebsite # OR edit an existing site
./scripts/build.sh && docker run -d --rm \
-p 8101:8101 -p 40000-40028:40000-40028 webharbor:dev
-p 8101:8101 -p 40000-40029:40000-40029 webharbor:dev
# iterate locally...

./scripts/extract_assets.sh ../webharbor-static-pr/ # split assets out
Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# WebHarbor — slim, self-contained image.
# 29 Flask mirror sites + control plane on :8101.
# 30 Flask mirror sites + control plane on :8101.

FROM python:3.12-slim-bookworm

Expand Down Expand Up @@ -92,6 +92,6 @@ os.makedirs('instance_seed', exist_ok=True); \
shutil.copy2('instance/rotten_tomatoes.db', 'instance_seed/rotten_tomatoes.db'); \
print('Rotten Tomatoes seed DB generated at build time.')" && rm -rf /opt/WebSyn/rotten_tomatoes/instance

EXPOSE 8101 40000-40028
EXPOSE 8101 40000-40029

CMD ["/opt/websyn_start.sh"]
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ WebHarbor takes a different approach. We leverage coding agent (e.g., Claude Cod
- **Deep features unlocked** — carts, checkouts, accounts, all fully testable
- **Evolving** — harder tasks drive richer mirrors; the environment grows with agents
- **RL-ready** — sub-second database resets between rollouts
- **Community-driven** — 29 sites today, scaling to 100+ together
- **Community-driven** — 30 sites today, scaling to 100+ together

## 🚀 Quickstart

One command to run all web environments:

```bash
docker run -p 8101:8101 -p 40000-40028:40000-40028 battalion7244/webharbor:latest
docker run -p 8101:8101 -p 40000-40029:40000-40029 battalion7244/webharbor:latest
```

Then point your agent at `http://localhost:40000` through `http://localhost:40028` to explore 29 local mirrors of WebVoyager sites: `Allrecipes, Amazon, Apple, ArXiv, BBC News, Booking, GitHub, Google Flights, Google Maps, Google Search, Hugging Face, Wolfram Alpha, Cambridge Dictionary, Coursera, ESPN, Merriam-Webster, IKEA, Phys.org, Target, TED, Ohio State University, Rotten Tomatoes, Compass, Walmart Careers, FedEx, WebMD Doctor, Healthline, Kaggle, and NVIDIA`.
Expand All @@ -65,7 +65,7 @@ git clone https://github.com/aiming-lab/WebHarbor && cd WebHarbor

### Local NVIDIA review candidate

This branch registers **29 sites**, the 29 entries listed above; NVIDIA is the last
This branch registers **30 sites**, the 29 entries listed above; NVIDIA is the last
entry, registry index 28, container port 40028 (local review host port 48028). The
published-image quickstart above is not a claim that this review candidate has been
published or accepted.
Expand All @@ -75,15 +75,15 @@ published or accepted.
| NVIDIA | 28 | 40028 | 48028 |

`websyn_start.sh`, `control_server.py`, the `Dockerfile` `EXPOSE` line and every
site's `tasks.jsonl` `web` URL agree on 29 sites and `40000-40028`;
site's `tasks.jsonl` `web` URL agree on 30 sites and `40000-40029`;
`scripts/check_site_registry.py` (run by `scripts/check_assets.sh`) fails when they
drift.

After preparing the candidate assets and building `webharbor:dev`, the local
review deployment uses:

```bash
docker run -p 127.0.0.1:48080:8101 -p 127.0.0.1:48000-48028:40000-40028 webharbor:dev
docker run -p 127.0.0.1:48080:8101 -p 127.0.0.1:48000-48028:40000-40029 webharbor:dev
```

NVIDIA inherits the site contribution from @KaKituken
Expand Down
2 changes: 1 addition & 1 deletion agent_demo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export OPENAI_BASE_URL=https://api.openai.com/v1 # or your Azure / vLLM endpoi

## Run a task

WebHarbor must already be running locally (`docker run -p 8101:8101 -p 40000-40028:40000-40028 battalion7244/webharbor:latest`).
WebHarbor must already be running locally (`docker run -p 8101:8101 -p 40000-40029:40000-40029 battalion7244/webharbor:latest`).

Run a single task from a site's `tasks.jsonl`:

Expand Down
1 change: 1 addition & 0 deletions control_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
'osu', 'rotten_tomatoes', 'compass', 'walmart_careers',
'fedex', 'webmd_doctor', 'healthline', 'kaggle',
'nvidia',
'phet_simulations',
]
BASE_PORT = 40000
WEBSYN_DIR = '/opt/WebSyn'
Expand Down
11 changes: 11 additions & 0 deletions sites/phet_simulations/_health 2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Simple health probe for the PhET Simulations mirror.

Returned by the /_health endpoint. The control plane only inspects HTTP
status, so any 2xx response with a JSON body is sufficient — the payload
shape mirrors the scaffold default and is also surfaced verbatim to
human reviewers.
"""


def health():
return {"ok": True, "site": "phet_simulations"}
11 changes: 11 additions & 0 deletions sites/phet_simulations/_health.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Simple health probe for the PhET Simulations mirror.

Returned by the /_health endpoint. The control plane only inspects HTTP
status, so any 2xx response with a JSON body is sufficient — the payload
shape mirrors the scaffold default and is also surfaced verbatim to
human reviewers.
"""


def health():
return {"ok": True, "site": "phet_simulations"}
Loading