Skip to content
Open
Show file tree
Hide file tree
Changes from 106 commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
ff5b608
feat(web-extract): add pinned human-eval content extraction cohort
lanyue-llk Nov 5, 2026
a2af469
fix(web-extract): stabilize human-eval metric accumulation
lanyue-llk Nov 5, 2026
895c6b4
feat(web-extract): audit and report arbitrary-schema extraction
lanyue-llk Nov 6, 2026
beee6a1
docs(web-extract): list human-eval extraction tasks
lanyue-llk Nov 6, 2026
b453d06
fix(web-extract): label comparisons by reviewed outcome
lanyue-llk Nov 6, 2026
9e89965
fix(web-extract): enforce complete source and score provenance
lanyue-llk Nov 6, 2026
b3d50ee
fix(web-extract): reject type collisions and inconsistent reviews
lanyue-llk Nov 6, 2026
976fa5d
fix(web-extract): verify cohort certification before reporting
lanyue-llk Nov 6, 2026
9ad53ee
refactor(web-extract): remove Markdown-only benchmark support
lanyue-llk Nov 6, 2026
54c92c5
fix(web-extract): name the published SWDE subset SWDE-800
lanyue-llk Nov 6, 2026
7e1884c
docs: keep SWDE-800 linked through its evaluation guide
lanyue-llk Nov 6, 2026
b703b6d
feat(web-extract): add version-bound self-hosted extractors
lanyue-llk Nov 5, 2026
f1a81f0
fix(web-extract): use the configured model context window
lanyue-llk Nov 5, 2026
8954794
feat(web-extract): add authenticated Firecrawl self-hosting
lanyue-llk Nov 5, 2026
eb94082
fix(web-extract): retain native failures and stable worker identity
lanyue-llk Nov 5, 2026
d94ee29
fix(web-extract): bind native runtime and enforce request boundaries
lanyue-llk Nov 5, 2026
d29cca3
fix(web-extract): avoid native Firecrawl worker port collisions
lanyue-llk Nov 5, 2026
373a67f
fix(packaging): include native backend as a package resource
lanyue-llk Nov 5, 2026
08871da
docs(web-extract): show authenticated native API requests
lanyue-llk Nov 5, 2026
38d7d62
fix(web-extract): group product results on shared case pages
lanyue-llk Nov 5, 2026
81e71eb
fix(web-extract): contain request processes and harden runtime attest…
lanyue-llk Nov 5, 2026
29bf76d
test(web-extract): use explicit UTF-8 in new fixtures
lanyue-llk Nov 5, 2026
f6c3694
test(web-extract): keep lifecycle assertions within style limits
lanyue-llk Nov 5, 2026
1b46bc2
fix(web-extract): attest pruned optional dependency links
lanyue-llk Nov 5, 2026
48f9ef5
fix(web-extract): clean interrupted launches and sanitize URL errors
lanyue-llk Nov 5, 2026
ec70be8
fix(web-extract): reject unattested code overrides and redact full er…
lanyue-llk Nov 5, 2026
3df3048
fix(web-extract): show native usage without duplicate token totals
lanyue-llk Nov 5, 2026
e4443f1
fix(web-extract): validate schemas and repair diagnosis navigation
lanyue-llk Nov 5, 2026
3d239f6
fix(web-extract): use native HTML input for ScrapeGraphAI
lanyue-llk Nov 5, 2026
842838a
feat(web-extract): bind unavailable costs to workload evidence
lanyue-llk Nov 5, 2026
829981d
docs(web-extract): align proxy and extraction deadlines
lanyue-llk Nov 5, 2026
91c7c4d
fix(web-extract): separate snapshot identity from hosting annotations
lanyue-llk Nov 5, 2026
1046734
fix(web-extract): preserve Crawl4AI native output protocol
lanyue-llk Nov 5, 2026
c40a064
feat(benchmark): enforce bounded execution and measured preflight acr…
lanyue-llk Nov 6, 2026
a51f7ec
fix(benchmark): retain preflight elapsed time across interruptions
lanyue-llk Nov 6, 2026
26586fb
fix(benchmark): preserve execution contracts and deterministic reports
lanyue-llk Nov 6, 2026
9fddcc7
fix(benchmark): preserve in-flight evidence and keep slow extraction …
lanyue-llk Nov 6, 2026
576cd4a
fix(web-extract): retain execution policy through certified repairs
lanyue-llk Nov 6, 2026
e4751c6
fix(benchmark): validate shared limits and isolate SDK test dependencies
lanyue-llk Nov 6, 2026
52caebe
fix(benchmark): drain active calls and share certified resource admis…
lanyue-llk Nov 6, 2026
1ff65ab
fix(web-search): keep execution translations statically discoverable
lanyue-llk Nov 6, 2026
0d1d332
fix(web-extract): reject invalid UTF-8 before native graph extraction
lanyue-llk Nov 6, 2026
c81faff
test(benchmark): cover shared admission and localized report boundaries
lanyue-llk Nov 6, 2026
7aea8d7
ci(benchmark): check shared contracts before full test suites
lanyue-llk Nov 6, 2026
dd48c23
fix(execution): stop admission and simplify benchmark controls
lanyue-llk Nov 6, 2026
32254e7
fix(benchmarks): reuse reviews and close cancellation gaps
lanyue-llk Nov 6, 2026
28f04d9
Preserve field adjudications and frozen collector identities
lanyue-llk Nov 6, 2026
9681e5e
feat(web-extract): add delivery-aware completion metrics
lanyue-llk Nov 6, 2026
2ace950
Compose incremental source decisions and revalidate live backend files
lanyue-llk Nov 6, 2026
af85d48
Clarify that returned extraction objects can contain no fields
lanyue-llk Nov 6, 2026
e5a41d2
fix(web-extract): bind completion metrics to native types and audit c…
lanyue-llk Nov 6, 2026
f5dd3b8
Check recursive CI targets and constrain report figures
lanyue-llk Nov 6, 2026
ef7a8ea
Keep example previews current without changing historical calls
lanyue-llk Nov 6, 2026
1efab74
fix(web-extract): keep tied completion metrics neutral
lanyue-llk Nov 6, 2026
a118cdf
Revert "fix(web-extract): keep tied completion metrics neutral"
lanyue-llk Nov 6, 2026
cb1485c
fix(web-extract): verify completion coverage against frozen audit
lanyue-llk Nov 6, 2026
d861dd7
fix(web-extract): drain terminal interrupts and retain selected settings
lanyue-llk Nov 6, 2026
84b74a0
feat(web-extract): preserve delivery-aware completion metrics
lanyue-llk Nov 6, 2026
8c2e0dd
fix(web-extract): enforce frozen audit across release boundaries
lanyue-llk Nov 6, 2026
57a1fda
test(execution): synchronize active calls before quarantine
lanyue-llk Nov 6, 2026
73ba28c
Merge latest main into completion metrics branch
lanyue-llk Nov 6, 2026
1f87f35
test(web-extract): specify UTF-8 in new evidence controls
lanyue-llk Nov 6, 2026
ec22a49
fix(web-extract): bind record response privacy projections to originals
lanyue-llk Nov 6, 2026
8a3f700
fix(web-extract): verify immutable execution projections for all cohorts
lanyue-llk Nov 6, 2026
3a9d488
fix(web-extract): share account endpoint privacy projection
lanyue-llk Nov 6, 2026
9223e21
fix(web-extract): bind retry history timing and usage evidence
lanyue-llk Nov 6, 2026
f24c60f
fix(web-extract): compare evidence with strict canonical JSON types
lanyue-llk Nov 6, 2026
bda8f53
fix(web-extract): separate software fees and document deployment
lanyue-llk Nov 6, 2026
1bdb242
fix(deploy): package Firecrawl launcher for remote Docker
lanyue-llk Nov 6, 2026
378b0d3
fix(deploy): run queue natively and require application readiness
lanyue-llk Nov 6, 2026
733f06d
feat(web-extract): integrate completion metrics into core comparison
lanyue-llk Nov 6, 2026
309c90d
Merge metric presentation and audit fixes into report release
lanyue-llk Nov 6, 2026
71b4271
docs(deploy): keep live endpoint in bound report evidence
lanyue-llk Nov 6, 2026
db1c8f8
fix(web-extract): keep original score validation scoped to its columns
lanyue-llk Nov 6, 2026
e4986fa
Merge commit '71b427118' into codex/web-extract-metrics-release
lanyue-llk Nov 6, 2026
ab64737
fix(web-extract): preserve completion receipt JSON types
lanyue-llk Nov 6, 2026
888eb33
fix(web-extract): reveal metric definitions on fragment navigation
lanyue-llk Nov 6, 2026
95cfcac
Merge commit '888eb33d4' into codex/web-extract-metrics-release
lanyue-llk Nov 6, 2026
b617c9b
perf(web-extract): preload native SDKs with isolated request supervision
lanyue-llk Nov 6, 2026
6bb5c5f
fix(web-extract): remove retired baseline and streamline verified pub…
lanyue-llk Nov 6, 2026
f025aa0
fix(web-extract): retain historical projection control provenance
lanyue-llk Nov 6, 2026
bf7384a
fix(web-extract): pass the bound profile path to packaging
lanyue-llk Nov 6, 2026
d236b5a
fix(web-extract): simplify comparison tables and pin method names
lanyue-llk Nov 6, 2026
b34cc59
fix(web-extract): align record inventory method columns
lanyue-llk Nov 6, 2026
fcc773a
test(web-extract): cover default method labels in pinned inventories
lanyue-llk Nov 6, 2026
1d1065e
test(web-extract): preserve compact case labels in inventories
lanyue-llk Nov 6, 2026
2c5caa0
test(web-extract): read layout receipts with explicit UTF-8
lanyue-llk Nov 6, 2026
3d6eef8
fix(web-extract): keep long comparison headers in view
lanyue-llk Nov 6, 2026
8b40f2b
test(web-extract): use the shared audit validation owner
lanyue-llk Nov 6, 2026
23ca9ce
fix(web-extract): bound result delivery and freeze packaging authorities
lanyue-llk Nov 6, 2026
7feb28c
style(web-extract): wrap the bound packaging call
lanyue-llk Nov 6, 2026
dd722a9
test(web-extract): resolve preload source without shell overrides
lanyue-llk Nov 6, 2026
e2402bb
fix(web-extract): bind native files and account denials
lanyue-llk Nov 6, 2026
970a2d6
fix(webfetch): checkpoint drained interrupted executions
lanyue-llk Nov 6, 2026
b3d7013
fix(web-extract): attest browser dependencies and cache verified work…
lanyue-llk Nov 6, 2026
f5a03fd
fix(web-extract): use a discoverable Dockerfile name
lanyue-llk Nov 6, 2026
e48bdf4
docs(web-extract): document verified Rainbond build selection
lanyue-llk Nov 6, 2026
cab7e63
fix(web-extract): pin each dependency base without build arguments
lanyue-llk Nov 6, 2026
3569c36
fix(web-extract): use a verified mirror for the browser base
lanyue-llk Nov 6, 2026
342534e
fix(web-extract): retain JSON failures across worker boundary errors
lanyue-llk Nov 6, 2026
5529981
fix(web-extract): validate worker JSON before sending response bytes
lanyue-llk Nov 6, 2026
5e7fafe
fix(web-extract): preserve minimal dependencies and reduce attestatio…
lanyue-llk Nov 6, 2026
4afc00c
style(web-extract): keep deployment regression checks within line limits
lanyue-llk Nov 6, 2026
e222d6b
fix(web-extract): bind backend identity to its running service
lanyue-llk Nov 6, 2026
9a8614b
docs(web-extract): explain service identity restart order
lanyue-llk Nov 6, 2026
5fa3b26
fix(web-extract): bind resource admission to the execution host
lanyue-llk Nov 6, 2026
654d11f
refactor(web-extract): reuse the shared optional file digest
lanyue-llk Nov 6, 2026
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: 7 additions & 0 deletions .agents/skills/benchmark-report/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ Reports are optional; `AGENTS.md` owns the build and publication authorization r

Read the repository's `AGENTS.md` first. Project rules override this general skill. Before changing a benchmark, read [evaluation design](references/evaluation-design.md). Before reviewing scores or deciding whether to rerun, read [audit and revision](references/audit-and-revision.md). Before building or publishing a report, read [report and release](references/report-and-release.md) and [presentation quality](references/presentation-quality.md).

Before expensive collection, follow the shared [execution contract](../../../docs/benchmark-execution.md).
Plan dependent stages and shared resources, measure a bounded readiness/throughput
sample, and freeze concurrency, pacing, call budgets and timing scope. Reuse the
shared scheduler and registered adapters. Review unexplained global serialization
or repeated initialization before a full run. New tracks must register an execution
owner and behavior tests alongside their report template.

Before writing report HTML, resolve the track through `scripts/report_template.py`. Inspect the maintained implementation and its pinned example. Reuse that implementation and its release checks; a different cohort or diagnostic evidence state calls for a data adapter or explicit mode. If no track fits, create the smallest reusable renderer with a synthetic runnable example and behavioral checks, then register it in `configs/report-templates.json`. Improve the owning template and this skill from demonstrated gaps, without embedding run-specific prose or copying old measurements. A report must carry the selected template identity and input hashes so its release check can detect a bypass.

Track-specific report rules live in the guides that `AGENTS.md` lists: Web Fetch cohort, diagnostic, local-audit and oversized-report rules in the [Web Fetch guide](../../../src/harness/web_fetch/README.md#certified-cohorts-and-report-builds), Search relevance, SERP and comparison rules in the [Web Search guide](../../../src/harness/web_search/README.md).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ Ground truth must be independent of the provider under test. Retain source locat

## Machine-readable current profile

The [shared execution contract](../../../../docs/benchmark-execution.md) owns
resource admission, parallelism, preflight estimates, startup cost and resumable
execution for every track. Freeze those decisions before the full matrix. Keep
quality collection, isolated latency and loaded throughput explicitly scoped.

Keep one current profile that a fresh session can validate before running, scoring, rebuilding, or publishing. Include exact case IDs or their canonical digest, the ordered method/version set, run count, timeout, concurrency policy, output contract, reference state, review requirement, and release target. Fail closed on drift instead of reconstructing intent from old reports.

The [live-URL guide](../../../../src/harness/web_fetch/HEADLESS.md#native-browser-routes) owns native browser route rules.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,11 @@ For usage-priced services, convert the declared workload with
and source dates; validate the displayed interval against that conversion.
A formula alone does not replace a dollar figure. Label scenario estimates and
plan quotes separately, and keep full billing terms off the compact home table.
When a complete workload charge cannot be observed, use the owning renderer's
explicit unavailable state. Bind the missing population and reason to evidence;
do not substitute software license cost, a model-only subtotal or zero for the
complete charge. Web Extract binds its cost disclosure to the frozen source plan
and validates that receipt at both build and release boundaries.

A result detail leads with the requested fields, reference and actual values,
and the explanation of their differences. Give developer records one secondary
Expand Down
16 changes: 16 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,19 @@ OXYLABS_API_KEY=

# Comma-separated private hostnames/IPs to omit from extraction report metadata views.
WEB_EXTRACT_PUBLICATION_HOSTS=

# Self-hosted open-source Web Extract service (caller authentication).
EXTRACTION_API_KEY=
# Self-hosted deployment (DeepSeek API key acquisition: https://platform.deepseek.com/api_keys)
EXTRACTION_MODEL_API_KEY=
EXTRACTION_MODEL=deepseek-flash
EXTRACTION_MODEL_BASE=https://api.deepseek.com
EXTRACTION_MODEL_CONTEXT_TOKENS=1000000
# Comma-separated exact origins returned by the managed Cloudflare snapshot binding.
SNAPSHOT_ORIGINS=
# Separate, URL-safe passwords for the isolated deployment; generate fresh random hex values.
WEB_EXTRACT_POSTGRES_PASSWORD=
WEB_EXTRACT_QUEUE_PASSWORD=
WEB_EXTRACT_PORT=8080
# Compose supplies CHROME_PATH and the private FIRECRAWL_BACKEND_URL,
# FIRECRAWL_IDENTITY_URL and FIRECRAWL_IMAGE settings.
5 changes: 5 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,11 @@ jobs:
BROWSER_EVAL_REPORT_LANGUAGE=zh uv run --frozen --no-sync python -m harness.web_fetch run --providers fixture --delay 0 --output "$output"
uv run --frozen --no-sync python -c 'import json, sys; from pathlib import Path; root = Path(sys.argv[1]); contract = json.loads((root / "report-languages.json").read_text()); assert contract["primary_language"] == "zh"; assert contract["languages"] == ["zh"]; assert (root / "en/index.html").is_file()' "$output/report"
- run: make package-check
- name: Verify the documented minimal Web Extract installation
run: |
extract_env="$(mktemp -d)/venv"
UV_PROJECT_ENVIRONMENT="$extract_env" uv sync --frozen --extra web-extract-eval --extra test
UV_PROJECT_ENVIRONMENT="$extract_env" uv run --frozen --no-sync python -m pytest tests/web_extract/test_swde.py -q

browser:
name: Rendered reference and report checks
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ artifacts/browser_use/
/docs/reports/trajectory-replay-evaluation-*
.ai/topics/
.claude/
/.rainbond/
/rainbond.app.json
5 changes: 5 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ Use `Browser Use` for the autonomous track and `Browser Trajectory Replay` for t

# Execution and evidence

- Follow `docs/benchmark-execution.md` for every existing or new track. Freeze and
Comment thread
lanyue-llk marked this conversation as resolved.
Resolved
validate resource admission, concurrency, pacing, initialization and resume
behavior before expensive collection. Use the shared execution owner and
registered track adapters; global serialization needs a concrete resource or
measurement reason. Preserve active frozen cohorts while improving later runs.
- For benchmark design, execution, scoring, result audit, report generation or release, read `.agents/skills/benchmark-report/SKILL.md`. Use `.agents/skills/benchmark-editorial/SKILL.md` additionally only for a new or substantially rewritten standalone interpretation article, official blog or public-account article.
- Run repository Python only through `make` targets or `uv run --frozen [--extra ...] python`. `.python-version`, `uv.lock`, the Makefile and CI are the runtime contract; never fall back to system Python.
- Web, dynamic, popular-site and document text use shared `score_attempt` orchestration and one task-result predicate. Task-specific requirements live in case configuration, not provider- or track-specific scoring branches. Binary acceptance and text diagnostics remain separate; missing reference coverage is unavailable, not zero or perfect.
Expand Down
11 changes: 11 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
FROM docker.1ms.run/library/python:3.12.10-slim-bookworm@sha256:fd95fa221297a88e1cf49c55ec1828edd7c5a428187e67b5d1805692d11588db
RUN apt-get update && apt-get install -y --no-install-recommends chromium libgeos-c1v5 libspatialindex6 && rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir uv==0.7.8
WORKDIR /app
COPY deploy/web-extract/pyproject.toml deploy/web-extract/uv.lock ./
RUN uv sync --frozen --no-dev
COPY deploy/web-extract/app.py ./
COPY src/harness ./harness
ENV PYTHONPATH=/app CHROME_PATH=/usr/lib/chromium/chromium PORT=8080
EXPOSE 8080
CMD ["/app/.venv/bin/uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8080"]
1 change: 1 addition & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ recursive-include src/harness/web_fetch/templates *.css
recursive-include src/harness/web_search/assets *.css *.js

recursive-include src/harness/web_extract/assets *.css *.js
recursive-include src/harness/web_extract *.mjs
10 changes: 8 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ require_profile = @test -n "$($(or $(1),PROFILE))" || (echo '$(or $(1),PROFILE)=
webmainbench-review \
webmainbench-assemble \
test-native-adapters \
test-extraction-sdk \
pin-dataset
setup: ## Install the locked base environment
$(UV) sync --frozen
Expand All @@ -80,6 +81,10 @@ setup-test: ## Install every extra, Node packages and benchmark datasets
npm ci
$(TEST_PY) -m harness.benchmarks.data

EXTRACTION_SDK_ENV ?= $(or $(BROWSER_EVAL_DATA_HOME),$(HOME)/.browser-eval)/environments/web-extract-sdk
test-extraction-sdk: ## Test native extraction protocols with the service's locked SDKs
BROWSER_EVAL_TEST_NATIVE_SDKS=1 LITELLM_LOCAL_MODEL_COST_MAP=True PYTHONPATH=src UV_PROJECT_ENVIRONMENT="$(EXTRACTION_SDK_ENV)" $(UV) run --frozen --project deploy/web-extract --python 3.12 python -m unittest discover -s tests/web_extract -p test_native_sdk_protocol.py

help: ## List documented targets
@awk 'BEGIN {FS = ":.*## "} /^[a-z][a-z0-9-]*:.*## / {printf " %-36s %s\n", $$1, $$2}' $(firstword $(MAKEFILE_LIST))

Expand Down Expand Up @@ -138,7 +143,8 @@ fixture-smoke: runtime-check ## Run the offline fixture CLI

test: test-python test-ui test-native-adapters ## Run Python, UI and native adapter tests

ci-tests: track-naming-check lint-check shell-check test fixture-smoke ## Run the CI test and static check job
ci-tests: track-naming-check lint-check shell-check fixture-smoke ## Run static checks and independent test suites
$(MAKE) -j2 test test-extraction-sdk
Comment thread
lanyue-llk marked this conversation as resolved.
Resolved

ci: ci-tests package-check browser-check ## Run every CI job: tests, packaging and browser checks

Expand All @@ -151,7 +157,7 @@ browser-check: runtime-check ## Run the CI rendered reference and report checks
BROWSER_EVAL_TEST_BROWSER_BINARY="$$($(TEST_PY) -c 'from playwright.sync_api import sync_playwright; p = sync_playwright().start(); print(p.chromium.executable_path); p.stop()')" \
$(TEST_PY) -m pytest $(BROWSER_TEST_PATHS) -q

package-check: runtime-check ## Verify the sdist and wheel outside the checkout
package-check: runtime-check ## Verify sdist and wheel installation
$(PY) scripts/check_package.py --uv "$(UV)"

report: runtime-check ## Build the Web Fetch report: PROFILE, EVIDENCE
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Choose a workflow for its task contract, setup and runnable example.
| --- | --- | --- |
| Web Fetch | [LexBench-Web-Fetch](https://huggingface.co/datasets/Lexmount/LexBench-Web-Fetch), [LexBench-WebMainBench](https://huggingface.co/datasets/Lexmount/LexBench-WebMainBench), [LexBench-WCXB](https://huggingface.co/datasets/Lexmount/LexBench-WCXB) | [Local example](examples/web_fetch/README.md) · [Full guide](src/harness/web_fetch/README.md) |
| Web Search | [LexBench-Web-Search](https://huggingface.co/datasets/Lexmount/LexBench-Web-Search): scenario queries and [LexBench-SimpleQA-Verified](https://huggingface.co/datasets/Lexmount/LexBench-SimpleQA-Verified) retrieval tasks | [Local example](examples/web_search/README.md) · [Full guide](src/harness/web_search/README.md) |
| Web Extract | [Product extraction benchmark (Zyte)](https://huggingface.co/datasets/Lexmount/LexBench-Zyte-Product-Extraction): 140 archived product pages with original and source-qualified price, SKU and stock labels; [SWDE](examples/web_extract/README.md#swde-multi-domain-extraction): a predeclared 800-page input subset from 80 sites | [Structured field extraction](examples/web_extract/README.md) |
| Web Extract | [Product extraction benchmark (Zyte)](https://huggingface.co/datasets/Lexmount/LexBench-Zyte-Product-Extraction): 140 archived product pages with original and source-qualified price, SKU and stock labels; [SWDE-800](examples/web_extract/README.md#swde-multi-domain-extraction): a predeclared 800-page input subset from 80 sites | [Structured field extraction](examples/web_extract/README.md) |
| Browser Trajectory Replay | [LexBench-Headless-Browser](https://huggingface.co/datasets/Lexmount/LexBench-Headless-Browser) scenarios; [curated fixed-action tasks](https://huggingface.co/datasets/Lexmount/LexBench-Trajectory-Replay) with explicit checks; [WebArena replay](https://huggingface.co/datasets/Lexmount/LexBench-WebArena-Replay) with the official evaluator | [Headless inputs and upstream runner](https://huggingface.co/datasets/Lexmount/LexBench-Headless-Browser#execute-with-the-original-runner) · [Curated suite](examples/trajectory_replay/README.md) · [WebArena replay](examples/trajectory_replay/public_webarena/README.md) |

Use these suites or [bring your own tasks](docs/benchmarks.md). Add browsers and tools through the existing [adapter contracts](docs/provider-contract.md).
Expand Down
2 changes: 2 additions & 0 deletions THIRD_PARTY.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ The root Apache-2.0 license covers project-owned code and documentation. It does
| Independently captured pages, PDFs, media and reference snapshots | Task provenance, `evaluation/source-inputs.json` and each track's external evidence bindings | Private data storage; import approved copies through manifests. Public accessibility does not imply redistribution permission |
| Human trajectories and task definitions | Replay configurations, provenance and qualification evidence | Retain origins and usage terms; distinguish definitions, recordings and measured outputs |
| Repository editorial skills | Origins and notices under `.agents/skills/` | Retain their notices; they are not browser-package runtime dependencies |
| Self-hosted extraction dependencies | [Crawl4AI](https://github.com/unclecode/crawl4ai) (Apache-2.0), [ScrapeGraphAI](https://github.com/ScrapeGraphAI/Scrapegraph-ai) (MIT), [Stagehand](https://github.com/browserbase/stagehand) (MIT); versions in `deploy/web-extract/uv.lock` | Installed in the optional extraction service; preserve upstream licenses and dependency notices |
| Firecrawl server | [Firecrawl](https://github.com/firecrawl/firecrawl) (AGPL-3.0); deployments bind an immutable upstream image digest | Runs as a separate service. The facade does not incorporate the server source; retain upstream notices and comply with its license when distributing or modifying it |
| Synthetic offline examples | `src/harness/web_fetch/data/` | Project-owned test inputs with no third-party captures |
| Resource-collection overhead calibration | `src/harness/resource_calibration.py`, derived from a [pinned Lexbench source](https://github.com/lexmount/Lexbench-Headless-Browser/blob/fd8d64c7623d46cd165607f216a0e28967d03040/runner/resources.py); source hash recorded in the module | Apache-2.0; retain the [full license](src/harness/licenses/Lexbench-Apache-2.0.txt) and attribution in source and wheel distributions |

Expand Down
22 changes: 16 additions & 6 deletions configs/report-templates.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@
"snapshot_audit_example_check": "uv run --frozen python -m pytest tests/test_published_snapshot_report.py tests/test_published_snapshot_rescoring.py",
"snapshot_audit_release_check": "uv run --frozen python scripts/check_report.py /absolute/new-report --profile /absolute/profile.json --visual-receipt /absolute/private/visual.json",
"snapshot_audit_package": "uv run --frozen python -m harness.web_fetch site-package /absolute/new-report /absolute/package.zip --snapshot-audit",
"snapshot_audit_publish": "uv run --frozen python -m harness.web_fetch site-publish --create --profile /absolute/publication-target.json --source /absolute/new-report --archive /absolute/package.zip --receipt /absolute/receipt.json --operation-journal /absolute/pending.json --snapshot-audit --visibility private"
"snapshot_audit_publish": "uv run --frozen python -m harness.web_fetch site-publish --create --profile /absolute/publication-target.json --source /absolute/new-report --archive /absolute/package.zip --receipt /absolute/receipt.json --operation-journal /absolute/pending.json --snapshot-audit --visibility private",
"execution_owner": "src/harness/web_fetch/runner.py",
"execution_tests": "tests/test_runner_concurrency.py"
},
"trajectory-replay": {
"renderer": "src/harness/trajectory_replay/webarena_report.py",
Expand All @@ -40,7 +42,9 @@
"tests": "tests/trajectory_replay/test_webarena_report.py",
"example_env": "TRAJECTORY_REPLAY_REPORT_EXAMPLE_URL",
"example_version": "ver_c0f0693e9c08401bb4d2b88393234e55",
"package": "uv run --frozen python -m harness.trajectory_replay package --report /absolute/new-report --profile /absolute/instance-profile.json --evidence /absolute/results.json --review /absolute/review.json --output /absolute/package.zip --attestation /absolute/attestation.json --visual-receipt /absolute/visual.json"
"package": "uv run --frozen python -m harness.trajectory_replay package --report /absolute/new-report --profile /absolute/instance-profile.json --evidence /absolute/results.json --review /absolute/review.json --output /absolute/package.zip --attestation /absolute/attestation.json --visual-receipt /absolute/visual.json",
"execution_owner": "src/harness/trajectory_replay/webarena_plan.py",
"execution_tests": "tests/trajectory_replay"
},
"browser-use": {
"renderer": "src/harness/browser_use/report.py",
Expand All @@ -50,7 +54,9 @@
"tests": "tests/browser_use/test_report.py",
"package": "uv run --frozen python -m harness.browser_use package --report /absolute/new-report --profile /absolute/instance-profile.json --evidence /absolute/evidence --output /absolute/package.zip --attestation /absolute/attestation.json --visual-receipt /absolute/visual.json",
"example_env": "BROWSER_USE_REPORT_EXAMPLE_URL",
"example_version": "ver_ce4dd70fde2e444ab18d24bba3ee0e93"
"example_version": "ver_ce4dd70fde2e444ab18d24bba3ee0e93",
"execution_owner": "src/harness/browser_use/runner.py",
"execution_tests": "tests/browser_use"
},
"web-search": {
"renderer": "src/harness/web_search/report.py",
Expand All @@ -66,7 +72,9 @@
"synthetic",
"combined-cohorts"
],
"release_check": "uv run --frozen python -m harness.web_search report --output /absolute/report --release-check /absolute/visual-receipt.json --publication-plan /absolute/release/publication-plan.json"
"release_check": "uv run --frozen python -m harness.web_search report --output /absolute/report --release-check /absolute/visual-receipt.json --publication-plan /absolute/release/publication-plan.json",
"execution_owner": "src/harness/web_search/runner.py",
"execution_tests": "tests/web_search/test_runner.py"
},
"web-extract": {
"renderer": "src/harness/web_extract/report.py",
Expand All @@ -83,12 +91,14 @@
"synthetic",
"field-extraction-cohort"
],
"release_check": "uv run --frozen python -m harness.web_extract.cli check /absolute/report --release --visual-receipt /absolute/visual-receipt.json",
"release_check": "uv run --frozen python -m harness.web_extract.cli --home /absolute/data check /absolute/report --release --profile /absolute/report-profile.json --visual-receipt /absolute/visual-receipt.json",
"package": "uv run --frozen python -m harness.web_extract.cli package /absolute/report --output /absolute/report.zip --visual-receipt /absolute/visual-receipt.json",
"benchmark": "src/harness/benchmarks/cards/zyte-product-extraction.json",
"cohort_example_build": "uv run --frozen python -m harness.web_extract.example --output /tmp/extract-cohort-example --mode full-cohort-progress",
"publish": "uv run --frozen python -m harness.web_extract.cli publish --source /absolute/report --target /absolute/publication-target.json --work /absolute/new-publication --visual-receipt /absolute/visual-receipt.json",
"record_example_build": "uv run --frozen python -m harness.web_extract.example --output /tmp/extract-record-example --mode field-extraction-cohort"
"record_example_build": "uv run --frozen python -m harness.web_extract.example --output /tmp/extract-record-example --mode field-extraction-cohort",
"execution_owner": "src/harness/web_extract/pipeline.py",
"execution_tests": "tests/web_extract/test_concurrent_collection.py"
}
}
}
Loading
Loading