Skip to content

Commit f3b5f32

Browse files
authored
Merge branch 'main' into star-prompt
2 parents 4044cec + f16259b commit f3b5f32

5 files changed

Lines changed: 95 additions & 7 deletions

File tree

scripts/build-aliases.py

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,30 @@ def root_version() -> str:
5555
raise RuntimeError("could not find version in root pyproject.toml")
5656
return m.group(1)
5757

58-
# The six alias distribution names successfully registered on PyPI.
59-
# Three other candidates (``openclaw-bench``, ``claw-bench-harness``,
60-
# ``harnessbench``) were rejected by PyPI's similarity check as too
61-
# close to names we had already taken — so they live nowhere and are
62-
# omitted here on purpose.
58+
# Alias distribution names successfully registered on PyPI.
59+
#
60+
# First wave (packaging PR): harness-bench, clawbench-eval, clawbench-cli,
61+
# openclawbench, clawbench-harness, claw-harness, nail-clawbench.
62+
#
63+
# Second wave (adjacent harness/agent names): harnessos, r2agent, claw-ai,
64+
# claw-agent, claw-eval.
65+
#
66+
# Third wave (research-themed squats): everyday-bench, everyday-agent,
67+
# life-bench, realtask-bench, web-harness, task-harness, video-mcq,
68+
# mcq-bench, vlm-judge, video-judge, nail-bench, nail-agent, nail-eval,
69+
# nail-group.
70+
#
71+
# Names we tried and couldn't take:
72+
# - 403 (already owned): harness, browser-use, computer-use, claw,
73+
# clawbot, openclaw, claw-ops, agent-harness
74+
# - 400 similarity (too close to something we just took or pre-existing):
75+
# openclaw-bench, claw-bench-harness, harnessbench, harness-os, clawai,
76+
# clawagent, claweval, lifebench, agentharness, webharness, taskharness,
77+
# videomcq, mcqbench
78+
# For hyphen/underscore variants of names we DID take (``claw-ai`` ↔
79+
# ``claw_ai``), PEP 503 normalization means pip resolves them to the same
80+
# distribution anyway — so ``pip install claw_ai`` still lands on our
81+
# package.
6382
ALIAS_NAMES = [
6483
"harness-bench",
6584
"clawbench-eval",
@@ -68,7 +87,43 @@ def root_version() -> str:
6887
"clawbench-harness",
6988
"claw-harness",
7089
"nail-clawbench",
90+
"harnessos",
91+
"r2agent",
92+
"claw-ai",
93+
"claw-agent",
94+
"claw-eval",
95+
"everyday-bench",
96+
"everyday-agent",
97+
"life-bench",
98+
"realtask-bench",
99+
"web-harness",
100+
"task-harness",
101+
"video-mcq",
102+
"mcq-bench",
103+
"vlm-judge",
104+
"video-judge",
105+
"nail-bench",
106+
"nail-agent",
107+
"nail-eval",
108+
"nail-group",
109+
# Fourth wave — harness-hub was the only slot the permutation sweep
110+
# cracked. Wave 5 (computer/browser/harness/claw × bench/eval/agent/
111+
# design, plus agentic/operator/mcp/sandbox/runtime/swarm/rollout/
112+
# deep-research hot-word combos, 75 candidates) returned zero: the
113+
# AI-agent generic-permutation namespace is effectively fully claimed
114+
# on PyPI.
115+
"harness-hub",
116+
"r2-harness",
117+
"scaling-law",
71118
]
119+
# Exhaustive negative result: waves 4-8 tried ~200 additional permutations
120+
# (generic {computer|browser|harness|claw} × {bench|eval|agent|design},
121+
# agent-ecosystem hot words like mcp/operator/agentic/sandbox/runtime,
122+
# unusual noun-noun compounds, numeric suffixes, project-ish compounds).
123+
# Only ``harness-hub`` stuck. Everything else was either 403 already-owned
124+
# or 400 similarity-blocked. Don't waste cycles retrying generic forms —
125+
# the AI-agent namespace is saturated on PyPI. If a specific name matters,
126+
# check pypi.org first rather than adding it here speculatively.
72127

73128
PYPROJECT_TEMPLATE = '''\
74129
# Auto-generated by scripts/build-aliases.py — DO NOT EDIT BY HAND.

src/clawbench/__init__.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,28 @@
2323
"harness-bench",
2424
"openclawbench",
2525
"claw-harness",
26+
"harnessos", # second-wave defensive squats
27+
"r2agent",
28+
"claw-ai",
29+
"claw-agent",
30+
"claw-eval",
31+
"everyday-bench", # third-wave research-themed squats
32+
"everyday-agent",
33+
"life-bench",
34+
"realtask-bench",
35+
"web-harness",
36+
"task-harness",
37+
"video-mcq",
38+
"mcq-bench",
39+
"vlm-judge",
40+
"video-judge",
41+
"nail-bench",
42+
"nail-agent",
43+
"nail-eval",
44+
"nail-group",
45+
"harness-hub", # fourth-wave singleton winner
46+
"r2-harness", # ninth wave
47+
"scaling-law",
2648
"claw-bench", # original primary (blocked; left for future)
2749
"clawbench", # original alias (blocked; left for future)
2850
):

src/clawbench/tui.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import os
77
import platform
88
import shutil
9+
import stat
910
import subprocess
1011
import sys
1112
from pathlib import Path
@@ -1515,6 +1516,7 @@ def main() -> None:
15151516
questionary.Choice("Batch run (models x cases)", value="batch"),
15161517
questionary.Choice("Human mode (no agent, noVNC)", value="human"),
15171518
questionary.Choice("Configure models", value="configure"),
1519+
questionary.Choice("Configure secrets", value="configure_secrets"),
15181520
questionary.Choice("Change theme", value="theme"),
15191521
questionary.Choice("Star us on GitHub", value="star"),
15201522
questionary.Choice("Exit", value="exit"),
@@ -1546,6 +1548,10 @@ def main() -> None:
15461548
models = load_models()
15471549
continue
15481550

1551+
if mode == "configure_secrets":
1552+
mode_configure_secrets()
1553+
continue
1554+
15491555
# Every run mode (including Human) needs a live engine. If it
15501556
# wasn't fixable earlier, try one more time now — the user may
15511557
# have started Docker Desktop in another window, or we may be

test-driver/run.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""ClawBench single test-case driver."""
22

33
import argparse
4+
import hashlib
45
import json
56
import os
67
import re
@@ -722,7 +723,9 @@ def main():
722723
if not task_file.exists():
723724
print(f"ERROR: {task_file} not found")
724725
sys.exit(1)
725-
task = json.loads(task_file.read_text())
726+
task_bytes = task_file.read_bytes()
727+
task = json.loads(task_bytes)
728+
task_json_sha256 = hashlib.sha256(task_bytes).hexdigest()
726729

727730
case_name = task_dir.name
728731
time_limit_s = task["time_limit"] * 60
@@ -835,6 +838,7 @@ def handle_sigint(sig, frame):
835838
meta = {
836839
"test_case": case_name,
837840
**(task.get("metadata") or {}),
841+
"task_json_sha256": task_json_sha256,
838842
"instruction": task["instruction"],
839843
"model": "human",
840844
"thinking_level": None,
@@ -851,6 +855,7 @@ def handle_sigint(sig, frame):
851855
meta = {
852856
"test_case": case_name,
853857
**(task.get("metadata") or {}),
858+
"task_json_sha256": task_json_sha256,
854859
"instruction": task["instruction"],
855860
"model": model_cfg["model"],
856861
"thinking_level": model_cfg.get("thinking_level"),

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)