self-bench 0.3.6 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +11 -1
- package/Dockerfile +9 -9
- package/Dockerfile.sandbox +5 -4
- package/README.md +27 -12
- package/bun.lock +462 -95
- package/compose.yaml +64 -20
- package/dist/agent-feed.d.ts +8 -0
- package/dist/agent-feed.d.ts.map +1 -0
- package/dist/agent-feed.js +56 -0
- package/dist/agent-feed.js.map +1 -0
- package/dist/api/http.d.ts +18 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +111 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/run-request.d.ts +37 -0
- package/dist/api/run-request.d.ts.map +1 -0
- package/dist/api/run-request.js +59 -0
- package/dist/api/run-request.js.map +1 -0
- package/dist/api/status.d.ts +4 -0
- package/dist/api/status.d.ts.map +1 -0
- package/dist/api/status.js +36 -0
- package/dist/api/status.js.map +1 -0
- package/dist/api/viewer-routes.d.ts +9 -0
- package/dist/api/viewer-routes.d.ts.map +1 -0
- package/dist/api/viewer-routes.js +98 -0
- package/dist/api/viewer-routes.js.map +1 -0
- package/dist/api-main.js +5 -1
- package/dist/api-main.js.map +1 -1
- package/dist/api.d.ts +7 -25
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +80 -148
- package/dist/api.js.map +1 -1
- package/dist/archive.d.ts +14 -0
- package/dist/archive.d.ts.map +1 -0
- package/dist/archive.js +114 -0
- package/dist/archive.js.map +1 -0
- package/dist/artifacts/common.d.ts +15 -0
- package/dist/artifacts/common.d.ts.map +1 -0
- package/dist/artifacts/common.js +58 -0
- package/dist/artifacts/common.js.map +1 -0
- package/dist/artifacts/gcs.d.ts +18 -0
- package/dist/artifacts/gcs.d.ts.map +1 -0
- package/dist/artifacts/gcs.js +178 -0
- package/dist/artifacts/gcs.js.map +1 -0
- package/dist/artifacts/local.d.ts +17 -0
- package/dist/artifacts/local.d.ts.map +1 -0
- package/dist/artifacts/local.js +205 -0
- package/dist/artifacts/local.js.map +1 -0
- package/dist/artifacts/types.d.ts +18 -0
- package/dist/artifacts/types.d.ts.map +1 -0
- package/dist/artifacts/types.js +2 -0
- package/dist/artifacts/types.js.map +1 -0
- package/dist/artifacts.d.ts +5 -28
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +5 -302
- package/dist/artifacts.js.map +1 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +8 -2
- package/dist/audit.js.map +1 -1
- package/dist/auth/api-key-routes.d.ts +17 -0
- package/dist/auth/api-key-routes.d.ts.map +1 -0
- package/dist/auth/api-key-routes.js +57 -0
- package/dist/auth/api-key-routes.js.map +1 -0
- package/dist/auth/api-keys.d.ts +47 -0
- package/dist/auth/api-keys.d.ts.map +1 -0
- package/dist/auth/api-keys.js +102 -0
- package/dist/auth/api-keys.js.map +1 -0
- package/dist/auth/config.d.ts +17 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +38 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/cookies.d.ts +12 -0
- package/dist/auth/cookies.d.ts.map +1 -0
- package/dist/auth/cookies.js +45 -0
- package/dist/auth/cookies.js.map +1 -0
- package/dist/auth/crypto.d.ts +19 -0
- package/dist/auth/crypto.d.ts.map +1 -0
- package/dist/auth/crypto.js +48 -0
- package/dist/auth/crypto.js.map +1 -0
- package/dist/auth/github.d.ts +37 -0
- package/dist/auth/github.d.ts.map +1 -0
- package/dist/auth/github.js +127 -0
- package/dist/auth/github.js.map +1 -0
- package/dist/auth/routes.d.ts +41 -0
- package/dist/auth/routes.d.ts.map +1 -0
- package/dist/auth/routes.js +153 -0
- package/dist/auth/routes.js.map +1 -0
- package/dist/auth/session-expired.d.ts +4 -0
- package/dist/auth/session-expired.d.ts.map +1 -0
- package/dist/auth/session-expired.js +17 -0
- package/dist/auth/session-expired.js.map +1 -0
- package/dist/auth/session.d.ts +23 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +56 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/auth/users.d.ts +49 -0
- package/dist/auth/users.d.ts.map +1 -0
- package/dist/auth/users.js +125 -0
- package/dist/auth/users.js.map +1 -0
- package/dist/build-metadata.js +1 -1
- package/dist/cli/api-client.d.ts +8 -0
- package/dist/cli/api-client.d.ts.map +1 -0
- package/dist/cli/api-client.js +71 -0
- package/dist/cli/api-client.js.map +1 -0
- package/dist/cli/associate.d.ts +2 -0
- package/dist/cli/associate.d.ts.map +1 -0
- package/dist/cli/associate.js +51 -0
- package/dist/cli/associate.js.map +1 -0
- package/dist/cli/help.d.ts +2 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +52 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +55 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/replay.d.ts +3 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +59 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/repository.d.ts +6 -0
- package/dist/cli/repository.d.ts.map +1 -0
- package/dist/cli/repository.js +36 -0
- package/dist/cli/repository.js.map +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +93 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/stack-environment.d.ts +26 -0
- package/dist/cli/stack-environment.d.ts.map +1 -0
- package/dist/cli/stack-environment.js +86 -0
- package/dist/cli/stack-environment.js.map +1 -0
- package/dist/cli/stack.d.ts +6 -0
- package/dist/cli/stack.d.ts.map +1 -0
- package/dist/cli/stack.js +131 -0
- package/dist/cli/stack.js.map +1 -0
- package/dist/cli/values.d.ts +8 -0
- package/dist/cli/values.d.ts.map +1 -0
- package/dist/cli/values.js +30 -0
- package/dist/cli/values.js.map +1 -0
- package/dist/cli/view.d.ts +2 -0
- package/dist/cli/view.d.ts.map +1 -0
- package/dist/cli/view.js +40 -0
- package/dist/cli/view.js.map +1 -0
- package/dist/cli.js +2 -429
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +16 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +60 -22
- package/dist/config.js.map +1 -1
- package/dist/contracts/common.d.ts +22 -0
- package/dist/contracts/common.d.ts.map +1 -0
- package/dist/contracts/common.js +29 -0
- package/dist/contracts/common.js.map +1 -0
- package/dist/contracts/results.d.ts +66 -0
- package/dist/contracts/results.d.ts.map +1 -0
- package/dist/contracts/results.js +2 -0
- package/dist/contracts/results.js.map +1 -0
- package/dist/contracts/run.d.ts +145 -0
- package/dist/contracts/run.d.ts.map +1 -0
- package/dist/contracts/run.js +74 -0
- package/dist/contracts/run.js.map +1 -0
- package/dist/contracts/task.d.ts +232 -0
- package/dist/contracts/task.d.ts.map +1 -0
- package/dist/contracts/task.js +198 -0
- package/dist/contracts/task.js.map +1 -0
- package/dist/contracts/verify.d.ts +331 -0
- package/dist/contracts/verify.d.ts.map +1 -0
- package/dist/contracts/verify.js +84 -0
- package/dist/contracts/verify.js.map +1 -0
- package/dist/contracts.d.ts +5 -243
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +5 -128
- package/dist/contracts.js.map +1 -1
- package/dist/db/client.d.ts +12 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +16 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.d.ts +1256 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +128 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/environment.d.ts +9 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +101 -0
- package/dist/environment.js.map +1 -0
- package/dist/evaluation/account.d.ts +30 -0
- package/dist/evaluation/account.d.ts.map +1 -0
- package/dist/evaluation/account.js +34 -0
- package/dist/evaluation/account.js.map +1 -0
- package/dist/evaluation/activities.d.ts +9 -0
- package/dist/evaluation/activities.d.ts.map +1 -0
- package/dist/evaluation/activities.js +40 -0
- package/dist/evaluation/activities.js.map +1 -0
- package/dist/evaluation/catalog-pricing.d.ts +3 -0
- package/dist/evaluation/catalog-pricing.d.ts.map +1 -0
- package/dist/evaluation/catalog-pricing.js +37 -0
- package/dist/evaluation/catalog-pricing.js.map +1 -0
- package/dist/evaluation/catalog.d.ts +17 -0
- package/dist/evaluation/catalog.d.ts.map +1 -0
- package/dist/evaluation/catalog.js +126 -0
- package/dist/evaluation/catalog.js.map +1 -0
- package/dist/evaluation/codex-login-process.d.ts +12 -0
- package/dist/evaluation/codex-login-process.d.ts.map +1 -0
- package/dist/evaluation/codex-login-process.js +121 -0
- package/dist/evaluation/codex-login-process.js.map +1 -0
- package/dist/evaluation/codex-login-routes.d.ts +5 -0
- package/dist/evaluation/codex-login-routes.d.ts.map +1 -0
- package/dist/evaluation/codex-login-routes.js +55 -0
- package/dist/evaluation/codex-login-routes.js.map +1 -0
- package/dist/evaluation/codex-login.d.ts +42 -0
- package/dist/evaluation/codex-login.d.ts.map +1 -0
- package/dist/evaluation/codex-login.js +143 -0
- package/dist/evaluation/codex-login.js.map +1 -0
- package/dist/evaluation/comparisons.d.ts +65 -0
- package/dist/evaluation/comparisons.d.ts.map +1 -0
- package/dist/evaluation/comparisons.js +161 -0
- package/dist/evaluation/comparisons.js.map +1 -0
- package/dist/evaluation/config.d.ts +43 -0
- package/dist/evaluation/config.d.ts.map +1 -0
- package/dist/evaluation/config.js +116 -0
- package/dist/evaluation/config.js.map +1 -0
- package/dist/evaluation/cost.d.ts +3 -0
- package/dist/evaluation/cost.d.ts.map +1 -0
- package/dist/evaluation/cost.js +95 -0
- package/dist/evaluation/cost.js.map +1 -0
- package/dist/evaluation/credential-execution.d.ts +10 -0
- package/dist/evaluation/credential-execution.d.ts.map +1 -0
- package/dist/evaluation/credential-execution.js +65 -0
- package/dist/evaluation/credential-execution.js.map +1 -0
- package/dist/evaluation/credentials.d.ts +40 -0
- package/dist/evaluation/credentials.d.ts.map +1 -0
- package/dist/evaluation/credentials.js +146 -0
- package/dist/evaluation/credentials.js.map +1 -0
- package/dist/evaluation/encrypted-records.d.ts +15 -0
- package/dist/evaluation/encrypted-records.d.ts.map +1 -0
- package/dist/evaluation/encrypted-records.js +57 -0
- package/dist/evaluation/encrypted-records.js.map +1 -0
- package/dist/evaluation/gateway-execution.d.ts +18 -0
- package/dist/evaluation/gateway-execution.d.ts.map +1 -0
- package/dist/evaluation/gateway-execution.js +38 -0
- package/dist/evaluation/gateway-execution.js.map +1 -0
- package/dist/evaluation/harbor-cost.d.ts +3 -0
- package/dist/evaluation/harbor-cost.d.ts.map +1 -0
- package/dist/evaluation/harbor-cost.js +39 -0
- package/dist/evaluation/harbor-cost.js.map +1 -0
- package/dist/evaluation/harbor_e2b.py +20 -0
- package/dist/evaluation/harbor_gateway.py +22 -0
- package/dist/evaluation/harnesses.d.ts +8 -0
- package/dist/evaluation/harnesses.d.ts.map +1 -0
- package/dist/evaluation/harnesses.js +10 -0
- package/dist/evaluation/harnesses.js.map +1 -0
- package/dist/evaluation/model-options.d.ts +9 -0
- package/dist/evaluation/model-options.d.ts.map +1 -0
- package/dist/evaluation/model-options.js +81 -0
- package/dist/evaluation/model-options.js.map +1 -0
- package/dist/evaluation/org-credential-routes.d.ts +5 -0
- package/dist/evaluation/org-credential-routes.d.ts.map +1 -0
- package/dist/evaluation/org-credential-routes.js +56 -0
- package/dist/evaluation/org-credential-routes.js.map +1 -0
- package/dist/evaluation/org-records.d.ts +4 -0
- package/dist/evaluation/org-records.d.ts.map +1 -0
- package/dist/evaluation/org-records.js +14 -0
- package/dist/evaluation/org-records.js.map +1 -0
- package/dist/evaluation/output.d.ts +9 -0
- package/dist/evaluation/output.d.ts.map +1 -0
- package/dist/evaluation/output.js +171 -0
- package/dist/evaluation/output.js.map +1 -0
- package/dist/evaluation/platform-routes.d.ts +5 -0
- package/dist/evaluation/platform-routes.d.ts.map +1 -0
- package/dist/evaluation/platform-routes.js +123 -0
- package/dist/evaluation/platform-routes.js.map +1 -0
- package/dist/evaluation/profile-routes.d.ts +16 -0
- package/dist/evaluation/profile-routes.d.ts.map +1 -0
- package/dist/evaluation/profile-routes.js +47 -0
- package/dist/evaluation/profile-routes.js.map +1 -0
- package/dist/evaluation/profiles.d.ts +48 -0
- package/dist/evaluation/profiles.d.ts.map +1 -0
- package/dist/evaluation/profiles.js +134 -0
- package/dist/evaluation/profiles.js.map +1 -0
- package/dist/evaluation/providers.d.ts +11 -0
- package/dist/evaluation/providers.d.ts.map +1 -0
- package/dist/evaluation/providers.js +30 -0
- package/dist/evaluation/providers.js.map +1 -0
- package/dist/evaluation/routes.d.ts +23 -0
- package/dist/evaluation/routes.d.ts.map +1 -0
- package/dist/evaluation/routes.js +212 -0
- package/dist/evaluation/routes.js.map +1 -0
- package/dist/evaluation/runner.d.ts +16 -0
- package/dist/evaluation/runner.d.ts.map +1 -0
- package/dist/evaluation/runner.js +241 -0
- package/dist/evaluation/runner.js.map +1 -0
- package/dist/evaluation/store.d.ts +8 -0
- package/dist/evaluation/store.d.ts.map +1 -0
- package/dist/evaluation/store.js +60 -0
- package/dist/evaluation/store.js.map +1 -0
- package/dist/evaluation/types.d.ts +98 -0
- package/dist/evaluation/types.d.ts.map +1 -0
- package/dist/evaluation/types.js +2 -0
- package/dist/evaluation/types.js.map +1 -0
- package/dist/evaluation/worker-main.d.ts +2 -0
- package/dist/evaluation/worker-main.d.ts.map +1 -0
- package/dist/evaluation/worker-main.js +26 -0
- package/dist/evaluation/worker-main.js.map +1 -0
- package/dist/evaluation/worker-records.d.ts +5 -0
- package/dist/evaluation/worker-records.d.ts.map +1 -0
- package/dist/evaluation/worker-records.js +11 -0
- package/dist/evaluation/worker-records.js.map +1 -0
- package/dist/evaluation/workflow.d.ts +3 -0
- package/dist/evaluation/workflow.d.ts.map +1 -0
- package/dist/evaluation/workflow.js +20 -0
- package/dist/evaluation/workflow.js.map +1 -0
- package/dist/execution-environment.d.ts +3 -0
- package/dist/execution-environment.d.ts.map +1 -0
- package/dist/execution-environment.js +9 -0
- package/dist/execution-environment.js.map +1 -0
- package/dist/extension-authoring.bundle.js +347 -0
- package/dist/extension-verifier.bundle.js +73 -0
- package/dist/extensions/authoring.d.ts.map +1 -1
- package/dist/extensions/authoring.js +70 -59
- package/dist/extensions/authoring.js.map +1 -1
- package/dist/extensions/shared/deliverable.d.ts +33 -0
- package/dist/extensions/shared/deliverable.d.ts.map +1 -0
- package/dist/extensions/shared/deliverable.js +123 -0
- package/dist/extensions/shared/deliverable.js.map +1 -0
- package/dist/extensions/shared/mailbox.d.ts +33 -0
- package/dist/extensions/shared/mailbox.d.ts.map +1 -0
- package/dist/extensions/shared/mailbox.js +102 -0
- package/dist/extensions/shared/mailbox.js.map +1 -0
- package/dist/extensions/shared/schemas.d.ts +90 -0
- package/dist/extensions/shared/schemas.d.ts.map +1 -0
- package/dist/extensions/shared/schemas.js +71 -0
- package/dist/extensions/shared/schemas.js.map +1 -0
- package/dist/extensions/shared/static-check.d.ts +38 -0
- package/dist/extensions/shared/static-check.d.ts.map +1 -0
- package/dist/extensions/shared/static-check.js +52 -0
- package/dist/extensions/shared/static-check.js.map +1 -0
- package/dist/extensions/verifier.d.ts +4 -0
- package/dist/extensions/verifier.d.ts.map +1 -0
- package/dist/extensions/verifier.js +70 -0
- package/dist/extensions/verifier.js.map +1 -0
- package/dist/github.d.ts +1 -1
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +3 -3
- package/dist/github.js.map +1 -1
- package/dist/harbor-environment.d.ts +13 -1
- package/dist/harbor-environment.d.ts.map +1 -1
- package/dist/harbor-environment.js +37 -4
- package/dist/harbor-environment.js.map +1 -1
- package/dist/harbor-results.d.ts +2 -0
- package/dist/harbor-results.d.ts.map +1 -1
- package/dist/harbor-results.js +2 -0
- package/dist/harbor-results.js.map +1 -1
- package/dist/harbor-task/compiler.d.ts +10 -0
- package/dist/harbor-task/compiler.d.ts.map +1 -0
- package/dist/harbor-task/compiler.js +174 -0
- package/dist/harbor-task/compiler.js.map +1 -0
- package/dist/harbor-task/constants.d.ts +3 -0
- package/dist/harbor-task/constants.d.ts.map +1 -0
- package/dist/harbor-task/constants.js +3 -0
- package/dist/harbor-task/constants.js.map +1 -0
- package/dist/harbor-task/dependencies.d.ts +3 -0
- package/dist/harbor-task/dependencies.d.ts.map +1 -0
- package/dist/harbor-task/dependencies.js +20 -0
- package/dist/harbor-task/dependencies.js.map +1 -0
- package/dist/harbor-task/paths.d.ts +6 -0
- package/dist/harbor-task/paths.d.ts.map +1 -0
- package/dist/harbor-task/paths.js +37 -0
- package/dist/harbor-task/paths.js.map +1 -0
- package/dist/harbor-task/render.d.ts +11 -0
- package/dist/harbor-task/render.d.ts.map +1 -0
- package/dist/harbor-task/render.js +194 -0
- package/dist/harbor-task/render.js.map +1 -0
- package/dist/harbor-task/runtime/command.sh +26 -0
- package/dist/harbor-task/runtime/junit.py +69 -0
- package/dist/harbor-task/runtime-assets.d.ts +2 -0
- package/dist/harbor-task/runtime-assets.d.ts.map +1 -0
- package/dist/harbor-task/runtime-assets.js +8 -0
- package/dist/harbor-task/runtime-assets.js.map +1 -0
- package/dist/harbor-task/test-patch.d.ts +4 -0
- package/dist/harbor-task/test-patch.d.ts.map +1 -0
- package/dist/harbor-task/test-patch.js +15 -0
- package/dist/harbor-task/test-patch.js.map +1 -0
- package/dist/harbor-task/verifier.d.ts +4 -0
- package/dist/harbor-task/verifier.d.ts.map +1 -0
- package/dist/harbor-task/verifier.js +105 -0
- package/dist/harbor-task/verifier.js.map +1 -0
- package/dist/harbor-task.d.ts +3 -11
- package/dist/harbor-task.d.ts.map +1 -1
- package/dist/harbor-task.js +2 -463
- package/dist/harbor-task.js.map +1 -1
- package/dist/log-excerpt.d.ts +15 -0
- package/dist/log-excerpt.d.ts.map +1 -0
- package/dist/log-excerpt.js +104 -0
- package/dist/log-excerpt.js.map +1 -0
- package/dist/patch-check.d.ts +26 -0
- package/dist/patch-check.d.ts.map +1 -0
- package/dist/patch-check.js +137 -0
- package/dist/patch-check.js.map +1 -0
- package/dist/pi-event-feed.d.ts +16 -0
- package/dist/pi-event-feed.d.ts.map +1 -0
- package/dist/pi-event-feed.js +86 -0
- package/dist/pi-event-feed.js.map +1 -0
- package/dist/pi-session.d.ts +32 -0
- package/dist/pi-session.d.ts.map +1 -0
- package/dist/pi-session.js +175 -0
- package/dist/pi-session.js.map +1 -0
- package/dist/process.d.ts +5 -0
- package/dist/process.d.ts.map +1 -1
- package/dist/process.js +31 -9
- package/dist/process.js.map +1 -1
- package/dist/provenance/github.d.ts +4 -0
- package/dist/provenance/github.d.ts.map +1 -0
- package/dist/provenance/github.js +65 -0
- package/dist/provenance/github.js.map +1 -0
- package/dist/provenance/local.d.ts +4 -0
- package/dist/provenance/local.d.ts.map +1 -0
- package/dist/provenance/local.js +82 -0
- package/dist/provenance/local.js.map +1 -0
- package/dist/provenance/redact.d.ts +2 -0
- package/dist/provenance/redact.d.ts.map +1 -0
- package/dist/provenance/redact.js +28 -0
- package/dist/provenance/redact.js.map +1 -0
- package/dist/provenance/selection.d.ts +4 -0
- package/dist/provenance/selection.d.ts.map +1 -0
- package/dist/provenance/selection.js +29 -0
- package/dist/provenance/selection.js.map +1 -0
- package/dist/provenance/session.d.ts +3 -0
- package/dist/provenance/session.d.ts.map +1 -0
- package/dist/provenance/session.js +214 -0
- package/dist/provenance/session.js.map +1 -0
- package/dist/provenance/shared.d.ts +7 -0
- package/dist/provenance/shared.d.ts.map +1 -0
- package/dist/provenance/shared.js +10 -0
- package/dist/provenance/shared.js.map +1 -0
- package/dist/provenance/types.d.ts +34 -0
- package/dist/provenance/types.d.ts.map +1 -0
- package/dist/provenance/types.js +22 -0
- package/dist/provenance/types.js.map +1 -0
- package/dist/provenance-associations/apply.d.ts +3 -0
- package/dist/provenance-associations/apply.d.ts.map +1 -0
- package/dist/provenance-associations/apply.js +66 -0
- package/dist/provenance-associations/apply.js.map +1 -0
- package/dist/provenance-associations/shared.d.ts +45 -0
- package/dist/provenance-associations/shared.d.ts.map +1 -0
- package/dist/provenance-associations/shared.js +42 -0
- package/dist/provenance-associations/shared.js.map +1 -0
- package/dist/provenance-associations.d.ts +3 -30
- package/dist/provenance-associations.d.ts.map +1 -1
- package/dist/provenance-associations.js +4 -103
- package/dist/provenance-associations.js.map +1 -1
- package/dist/provenance.d.ts +7 -41
- package/dist/provenance.d.ts.map +1 -1
- package/dist/provenance.js +6 -432
- package/dist/provenance.js.map +1 -1
- package/dist/providers.d.ts +25 -2
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +23 -2
- package/dist/providers.js.map +1 -1
- package/dist/repair.d.ts +1 -6
- package/dist/repair.d.ts.map +1 -1
- package/dist/repair.js +17 -27
- package/dist/repair.js.map +1 -1
- package/dist/review/assets/index-BHHztQ9x.js +1679 -0
- package/dist/review/assets/index-KQ1eFQ0t.css +1 -0
- package/dist/review/index.html +11 -8
- package/dist/runtime/command.sh +26 -0
- package/dist/runtime/junit.py +69 -0
- package/dist/sandbox/contracts.d.ts +36 -1
- package/dist/sandbox/contracts.d.ts.map +1 -1
- package/dist/sandbox/contracts.js +3 -0
- package/dist/sandbox/contracts.js.map +1 -1
- package/dist/sandbox/index.d.ts +1 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +13 -2
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/live.d.ts +18 -0
- package/dist/sandbox/live.d.ts.map +1 -0
- package/dist/sandbox/live.js +55 -0
- package/dist/sandbox/live.js.map +1 -0
- package/dist/sandbox/output-retry.d.ts +16 -0
- package/dist/sandbox/output-retry.d.ts.map +1 -0
- package/dist/sandbox/output-retry.js +36 -0
- package/dist/sandbox/output-retry.js.map +1 -0
- package/dist/sandbox/programs/author.js +16 -6
- package/dist/sandbox/programs/author.js.map +1 -1
- package/dist/sandbox/programs/check.d.ts +3 -0
- package/dist/sandbox/programs/check.d.ts.map +1 -0
- package/dist/sandbox/programs/check.js +76 -0
- package/dist/sandbox/programs/check.js.map +1 -0
- package/dist/sandbox/programs/prepare-task.d.ts +12 -0
- package/dist/sandbox/programs/prepare-task.d.ts.map +1 -0
- package/dist/sandbox/programs/{prepare-repair.js → prepare-task.js} +11 -9
- package/dist/sandbox/programs/prepare-task.js.map +1 -0
- package/dist/sandbox/programs/verifier.d.ts +3 -0
- package/dist/sandbox/programs/verifier.d.ts.map +1 -0
- package/dist/sandbox/programs/verifier.js +9 -0
- package/dist/sandbox/programs/verifier.js.map +1 -0
- package/dist/sandbox/providers/docker/executor.d.ts +4 -1
- package/dist/sandbox/providers/docker/executor.d.ts.map +1 -1
- package/dist/sandbox/providers/docker/executor.js +75 -25
- package/dist/sandbox/providers/docker/executor.js.map +1 -1
- package/dist/sandbox/providers/e2b/bytes.d.ts +3 -0
- package/dist/sandbox/providers/e2b/bytes.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/bytes.js +8 -0
- package/dist/sandbox/providers/e2b/bytes.js.map +1 -0
- package/dist/sandbox/providers/e2b/cleanup.d.ts +8 -0
- package/dist/sandbox/providers/e2b/cleanup.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/cleanup.js +124 -0
- package/dist/sandbox/providers/e2b/cleanup.js.map +1 -0
- package/dist/sandbox/providers/e2b/command.d.ts +23 -0
- package/dist/sandbox/providers/e2b/command.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/command.js +160 -0
- package/dist/sandbox/providers/e2b/command.js.map +1 -0
- package/dist/sandbox/providers/e2b/config.d.ts +13 -0
- package/dist/sandbox/providers/e2b/config.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/config.js +2 -0
- package/dist/sandbox/providers/e2b/config.js.map +1 -0
- package/dist/sandbox/providers/e2b/executor.d.ts +15 -0
- package/dist/sandbox/providers/e2b/executor.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/executor.js +207 -0
- package/dist/sandbox/providers/e2b/executor.js.map +1 -0
- package/dist/sandbox/providers/e2b/lifecycle.d.ts +8 -0
- package/dist/sandbox/providers/e2b/lifecycle.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/lifecycle.js +37 -0
- package/dist/sandbox/providers/e2b/lifecycle.js.map +1 -0
- package/dist/sandbox/providers/e2b/outcome.d.ts +11 -0
- package/dist/sandbox/providers/e2b/outcome.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/outcome.js +72 -0
- package/dist/sandbox/providers/e2b/outcome.js.map +1 -0
- package/dist/sandbox/providers/e2b/stage-files.d.ts +10 -0
- package/dist/sandbox/providers/e2b/stage-files.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/stage-files.js +45 -0
- package/dist/sandbox/providers/e2b/stage-files.js.map +1 -0
- package/dist/sandbox/providers/e2b/startup.d.ts +10 -0
- package/dist/sandbox/providers/e2b/startup.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/startup.js +26 -0
- package/dist/sandbox/providers/e2b/startup.js.map +1 -0
- package/dist/sandbox/providers/e2b/types.d.ts +9 -0
- package/dist/sandbox/providers/e2b/types.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/types.js +2 -0
- package/dist/sandbox/providers/e2b/types.js.map +1 -0
- package/dist/sandbox/providers/e2b/validation.d.ts +14 -0
- package/dist/sandbox/providers/e2b/validation.d.ts.map +1 -0
- package/dist/sandbox/providers/e2b/validation.js +60 -0
- package/dist/sandbox/providers/e2b/validation.js.map +1 -0
- package/dist/{modal-auth.d.ts → sandbox/providers/modal/auth.d.ts} +1 -1
- package/dist/sandbox/providers/modal/auth.d.ts.map +1 -0
- package/dist/{modal-auth.js → sandbox/providers/modal/auth.js} +1 -1
- package/dist/sandbox/providers/modal/auth.js.map +1 -0
- package/dist/sandbox/providers/modal/executor.d.ts +4 -1
- package/dist/sandbox/providers/modal/executor.d.ts.map +1 -1
- package/dist/sandbox/providers/modal/executor.js +33 -9
- package/dist/sandbox/providers/modal/executor.js.map +1 -1
- package/dist/sandbox/providers/modal/live.d.ts +7 -0
- package/dist/sandbox/providers/modal/live.d.ts.map +1 -0
- package/dist/sandbox/providers/modal/live.js +50 -0
- package/dist/sandbox/providers/modal/live.js.map +1 -0
- package/dist/sandbox/providers/vercel/command.d.ts +6 -0
- package/dist/sandbox/providers/vercel/command.d.ts.map +1 -1
- package/dist/sandbox/providers/vercel/command.js +44 -11
- package/dist/sandbox/providers/vercel/command.js.map +1 -1
- package/dist/sandbox/providers/vercel/executor.d.ts +6 -7
- package/dist/sandbox/providers/vercel/executor.d.ts.map +1 -1
- package/dist/sandbox/providers/vercel/executor.js +21 -187
- package/dist/sandbox/providers/vercel/executor.js.map +1 -1
- package/dist/sandbox/providers/vercel/lifecycle.d.ts +13 -0
- package/dist/sandbox/providers/vercel/lifecycle.d.ts.map +1 -0
- package/dist/sandbox/providers/vercel/lifecycle.js +140 -0
- package/dist/sandbox/providers/vercel/lifecycle.js.map +1 -0
- package/dist/sandbox/providers/vercel/validation.d.ts +11 -0
- package/dist/sandbox/providers/vercel/validation.d.ts.map +1 -0
- package/dist/sandbox/providers/vercel/validation.js +30 -0
- package/dist/sandbox/providers/vercel/validation.js.map +1 -0
- package/dist/sandbox/remote-files.d.ts +11 -0
- package/dist/sandbox/remote-files.d.ts.map +1 -0
- package/dist/sandbox/remote-files.js +41 -0
- package/dist/sandbox/remote-files.js.map +1 -0
- package/dist/sandbox/request-validation.d.ts +5 -0
- package/dist/sandbox/request-validation.d.ts.map +1 -0
- package/dist/sandbox/request-validation.js +43 -0
- package/dist/sandbox/request-validation.js.map +1 -0
- package/dist/sandbox/supervisor.d.ts +42 -0
- package/dist/sandbox/supervisor.d.ts.map +1 -0
- package/dist/sandbox/supervisor.js +126 -0
- package/dist/sandbox/supervisor.js.map +1 -0
- package/dist/sandbox/timeout.d.ts +6 -1
- package/dist/sandbox/timeout.d.ts.map +1 -1
- package/dist/sandbox/timeout.js +12 -0
- package/dist/sandbox/timeout.js.map +1 -1
- package/dist/sandbox-author.bundle.js +47 -14879
- package/dist/{sandbox-validation-repair.bundle.js → sandbox-check.bundle.js} +7261 -1893
- package/dist/sandbox-verifier.bundle.js +307 -0
- package/dist/setup/e2b/build.d.ts +24 -0
- package/dist/setup/e2b/build.d.ts.map +1 -0
- package/dist/setup/e2b/build.js +46 -0
- package/dist/setup/e2b/build.js.map +1 -0
- package/dist/setup/e2b/cli.d.ts +2 -0
- package/dist/setup/e2b/cli.d.ts.map +1 -0
- package/dist/setup/e2b/cli.js +51 -0
- package/dist/setup/e2b/cli.js.map +1 -0
- package/dist/setup/e2b/index.d.ts +5 -0
- package/dist/setup/e2b/index.d.ts.map +1 -0
- package/dist/setup/e2b/index.js +4 -0
- package/dist/setup/e2b/index.js.map +1 -0
- package/dist/setup/e2b/template.d.ts +4 -0
- package/dist/setup/e2b/template.d.ts.map +1 -0
- package/dist/setup/e2b/template.js +53 -0
- package/dist/setup/e2b/template.js.map +1 -0
- package/dist/setup/vercel/cli-helpers.d.ts +22 -0
- package/dist/setup/vercel/cli-helpers.d.ts.map +1 -0
- package/dist/setup/vercel/cli-helpers.js +87 -0
- package/dist/setup/vercel/cli-helpers.js.map +1 -0
- package/dist/setup/vercel/cli-runner.d.ts +14 -0
- package/dist/setup/vercel/cli-runner.d.ts.map +1 -0
- package/dist/setup/vercel/cli-runner.js +24 -0
- package/dist/setup/vercel/cli-runner.js.map +1 -0
- package/dist/setup/vercel/cli-types.d.ts +24 -0
- package/dist/setup/vercel/cli-types.d.ts.map +1 -0
- package/dist/setup/vercel/cli-types.js +18 -0
- package/dist/setup/vercel/cli-types.js.map +1 -0
- package/dist/setup/vercel/cli.d.ts +5 -31
- package/dist/setup/vercel/cli.d.ts.map +1 -1
- package/dist/setup/vercel/cli.js +15 -125
- package/dist/setup/vercel/cli.js.map +1 -1
- package/dist/setup/vercel/profile-files.d.ts +6 -0
- package/dist/setup/vercel/profile-files.d.ts.map +1 -0
- package/dist/setup/vercel/profile-files.js +100 -0
- package/dist/setup/vercel/profile-files.js.map +1 -0
- package/dist/setup/vercel/profile-schema.d.ts +48 -0
- package/dist/setup/vercel/profile-schema.d.ts.map +1 -0
- package/dist/setup/vercel/profile-schema.js +39 -0
- package/dist/setup/vercel/profile-schema.js.map +1 -0
- package/dist/setup/vercel/profile.d.ts +3 -19
- package/dist/setup/vercel/profile.d.ts.map +1 -1
- package/dist/setup/vercel/profile.js +4 -130
- package/dist/setup/vercel/profile.js.map +1 -1
- package/dist/setup/vercel/selection.d.ts +18 -0
- package/dist/setup/vercel/selection.d.ts.map +1 -0
- package/dist/setup/vercel/selection.js +113 -0
- package/dist/setup/vercel/selection.js.map +1 -0
- package/dist/setup/vercel/setup-types.d.ts +34 -0
- package/dist/setup/vercel/setup-types.d.ts.map +1 -0
- package/dist/setup/vercel/setup-types.js +2 -0
- package/dist/setup/vercel/setup-types.js.map +1 -0
- package/dist/setup/vercel/setup.d.ts +3 -28
- package/dist/setup/vercel/setup.d.ts.map +1 -1
- package/dist/setup/vercel/setup.js +3 -111
- package/dist/setup/vercel/setup.js.map +1 -1
- package/dist/site/batch-activity.d.ts +5 -0
- package/dist/site/batch-activity.d.ts.map +1 -0
- package/dist/site/batch-activity.js +31 -0
- package/dist/site/batch-activity.js.map +1 -0
- package/dist/site/batch-progress.d.ts +16 -0
- package/dist/site/batch-progress.d.ts.map +1 -0
- package/dist/site/batch-progress.js +52 -0
- package/dist/site/batch-progress.js.map +1 -0
- package/dist/site/batch-routes.d.ts +30 -0
- package/dist/site/batch-routes.d.ts.map +1 -0
- package/dist/site/batch-routes.js +117 -0
- package/dist/site/batch-routes.js.map +1 -0
- package/dist/site/batch-start.d.ts +60 -0
- package/dist/site/batch-start.d.ts.map +1 -0
- package/dist/site/batch-start.js +39 -0
- package/dist/site/batch-start.js.map +1 -0
- package/dist/site/connected-repos.d.ts +25 -0
- package/dist/site/connected-repos.d.ts.map +1 -0
- package/dist/site/connected-repos.js +109 -0
- package/dist/site/connected-repos.js.map +1 -0
- package/dist/site/evaluation-start.d.ts +4 -0
- package/dist/site/evaluation-start.d.ts.map +1 -0
- package/dist/site/evaluation-start.js +19 -0
- package/dist/site/evaluation-start.js.map +1 -0
- package/dist/site/generation-config.d.ts +4 -0
- package/dist/site/generation-config.d.ts.map +1 -0
- package/dist/site/generation-config.js +16 -0
- package/dist/site/generation-config.js.map +1 -0
- package/dist/site/generation-credentials.d.ts +6 -0
- package/dist/site/generation-credentials.d.ts.map +1 -0
- package/dist/site/generation-credentials.js +101 -0
- package/dist/site/generation-credentials.js.map +1 -0
- package/dist/site/generation-run.d.ts +6 -0
- package/dist/site/generation-run.d.ts.map +1 -0
- package/dist/site/generation-run.js +22 -0
- package/dist/site/generation-run.js.map +1 -0
- package/dist/site/generation-settings.d.ts +80 -0
- package/dist/site/generation-settings.d.ts.map +1 -0
- package/dist/site/generation-settings.js +84 -0
- package/dist/site/generation-settings.js.map +1 -0
- package/dist/site/generation-subscription.d.ts +3 -0
- package/dist/site/generation-subscription.d.ts.map +1 -0
- package/dist/site/generation-subscription.js +38 -0
- package/dist/site/generation-subscription.js.map +1 -0
- package/dist/site/github-repos.d.ts +35 -0
- package/dist/site/github-repos.d.ts.map +1 -0
- package/dist/site/github-repos.js +121 -0
- package/dist/site/github-repos.js.map +1 -0
- package/dist/site/pr-candidate.d.ts +26 -0
- package/dist/site/pr-candidate.d.ts.map +1 -0
- package/dist/site/pr-candidate.js +101 -0
- package/dist/site/pr-candidate.js.map +1 -0
- package/dist/site/pr-list.d.ts +13 -0
- package/dist/site/pr-list.d.ts.map +1 -0
- package/dist/site/pr-list.js +24 -0
- package/dist/site/pr-list.js.map +1 -0
- package/dist/site/pr-routes.d.ts +26 -0
- package/dist/site/pr-routes.d.ts.map +1 -0
- package/dist/site/pr-routes.js +139 -0
- package/dist/site/pr-routes.js.map +1 -0
- package/dist/site/repo-store.d.ts +40 -0
- package/dist/site/repo-store.d.ts.map +1 -0
- package/dist/site/repo-store.js +74 -0
- package/dist/site/repo-store.js.map +1 -0
- package/dist/site/run-store.d.ts +17 -0
- package/dist/site/run-store.d.ts.map +1 -0
- package/dist/site/run-store.js +42 -0
- package/dist/site/run-store.js.map +1 -0
- package/dist/site/runtime.d.ts +27 -0
- package/dist/site/runtime.d.ts.map +1 -0
- package/dist/site/runtime.js +97 -0
- package/dist/site/runtime.js.map +1 -0
- package/dist/site/task-deletion.d.ts +7 -0
- package/dist/site/task-deletion.d.ts.map +1 -0
- package/dist/site/task-deletion.js +29 -0
- package/dist/site/task-deletion.js.map +1 -0
- package/dist/site/task-start-reservation.d.ts +4 -0
- package/dist/site/task-start-reservation.d.ts.map +1 -0
- package/dist/site/task-start-reservation.js +18 -0
- package/dist/site/task-start-reservation.js.map +1 -0
- package/dist/site/task-start.d.ts +33 -0
- package/dist/site/task-start.d.ts.map +1 -0
- package/dist/site/task-start.js +50 -0
- package/dist/site/task-start.js.map +1 -0
- package/dist/site/task-status.d.ts +36 -0
- package/dist/site/task-status.d.ts.map +1 -0
- package/dist/site/task-status.js +113 -0
- package/dist/site/task-status.js.map +1 -0
- package/dist/site/task-store.d.ts +78 -0
- package/dist/site/task-store.d.ts.map +1 -0
- package/dist/site/task-store.js +186 -0
- package/dist/site/task-store.js.map +1 -0
- package/dist/site/task-sync.d.ts +30 -0
- package/dist/site/task-sync.d.ts.map +1 -0
- package/dist/site/task-sync.js +121 -0
- package/dist/site/task-sync.js.map +1 -0
- package/dist/site/tasks.d.ts +47 -0
- package/dist/site/tasks.d.ts.map +1 -0
- package/dist/site/tasks.js +164 -0
- package/dist/site/tasks.js.map +1 -0
- package/dist/site/temporal-status.d.ts +8 -0
- package/dist/site/temporal-status.d.ts.map +1 -0
- package/dist/site/temporal-status.js +41 -0
- package/dist/site/temporal-status.js.map +1 -0
- package/dist/site/tenant.d.ts +4 -0
- package/dist/site/tenant.d.ts.map +1 -0
- package/dist/site/tenant.js +6 -0
- package/dist/site/tenant.js.map +1 -0
- package/dist/static-check.d.ts +38 -0
- package/dist/static-check.d.ts.map +1 -0
- package/dist/static-check.js +131 -0
- package/dist/static-check.js.map +1 -0
- package/dist/submission-hash.d.ts +18 -0
- package/dist/submission-hash.d.ts.map +1 -0
- package/dist/submission-hash.js +16 -0
- package/dist/submission-hash.js.map +1 -0
- package/dist/subscription-auth.d.ts +0 -7
- package/dist/subscription-auth.d.ts.map +1 -1
- package/dist/subscription-auth.js +3 -23
- package/dist/subscription-auth.js.map +1 -1
- package/dist/temporal/activities/agent-feed.d.ts +5 -0
- package/dist/temporal/activities/agent-feed.d.ts.map +1 -0
- package/dist/temporal/activities/agent-feed.js +41 -0
- package/dist/temporal/activities/agent-feed.js.map +1 -0
- package/dist/temporal/activities/agent-scripts.d.ts +16 -0
- package/dist/temporal/activities/agent-scripts.d.ts.map +1 -0
- package/dist/temporal/activities/agent-scripts.js +162 -0
- package/dist/temporal/activities/agent-scripts.js.map +1 -0
- package/dist/temporal/activities/authoring-round.d.ts +13 -0
- package/dist/temporal/activities/authoring-round.d.ts.map +1 -0
- package/dist/temporal/activities/authoring-round.js +160 -0
- package/dist/temporal/activities/authoring-round.js.map +1 -0
- package/dist/temporal/activities/constants.d.ts +5 -0
- package/dist/temporal/activities/constants.d.ts.map +1 -0
- package/dist/temporal/activities/constants.js +5 -0
- package/dist/temporal/activities/constants.js.map +1 -0
- package/dist/temporal/activities/discovery.d.ts +17 -0
- package/dist/temporal/activities/discovery.d.ts.map +1 -0
- package/dist/temporal/activities/discovery.js +153 -0
- package/dist/temporal/activities/discovery.js.map +1 -0
- package/dist/temporal/activities/drafts.d.ts +15 -0
- package/dist/temporal/activities/drafts.d.ts.map +1 -0
- package/dist/temporal/activities/drafts.js +51 -0
- package/dist/temporal/activities/drafts.js.map +1 -0
- package/dist/temporal/activities/excluded-source-prs.d.ts +9 -0
- package/dist/temporal/activities/excluded-source-prs.d.ts.map +1 -0
- package/dist/temporal/activities/excluded-source-prs.js +132 -0
- package/dist/temporal/activities/excluded-source-prs.js.map +1 -0
- package/dist/temporal/activities/export.d.ts +38 -0
- package/dist/temporal/activities/export.d.ts.map +1 -0
- package/dist/temporal/activities/export.js +79 -0
- package/dist/temporal/activities/export.js.map +1 -0
- package/dist/temporal/activities/factory.d.ts +5 -0
- package/dist/temporal/activities/factory.d.ts.map +1 -0
- package/dist/temporal/activities/factory.js +26 -0
- package/dist/temporal/activities/factory.js.map +1 -0
- package/dist/temporal/activities/gate-logs.d.ts +20 -0
- package/dist/temporal/activities/gate-logs.d.ts.map +1 -0
- package/dist/temporal/activities/gate-logs.js +62 -0
- package/dist/temporal/activities/gate-logs.js.map +1 -0
- package/dist/temporal/activities/generation-runtime.d.ts +6 -0
- package/dist/temporal/activities/generation-runtime.d.ts.map +1 -0
- package/dist/temporal/activities/generation-runtime.js +56 -0
- package/dist/temporal/activities/generation-runtime.js.map +1 -0
- package/dist/temporal/activities/harbor.d.ts +11 -0
- package/dist/temporal/activities/harbor.d.ts.map +1 -0
- package/dist/temporal/activities/harbor.js +112 -0
- package/dist/temporal/activities/harbor.js.map +1 -0
- package/dist/temporal/activities/modal-build-log.d.ts +12 -0
- package/dist/temporal/activities/modal-build-log.d.ts.map +1 -0
- package/dist/temporal/activities/modal-build-log.js +57 -0
- package/dist/temporal/activities/modal-build-log.js.map +1 -0
- package/dist/temporal/activities/prompts-authoring.d.ts +6 -0
- package/dist/temporal/activities/prompts-authoring.d.ts.map +1 -0
- package/dist/temporal/activities/prompts-authoring.js +87 -0
- package/dist/temporal/activities/prompts-authoring.js.map +1 -0
- package/dist/temporal/activities/prompts-verifier.d.ts +17 -0
- package/dist/temporal/activities/prompts-verifier.d.ts.map +1 -0
- package/dist/temporal/activities/prompts-verifier.js +66 -0
- package/dist/temporal/activities/prompts-verifier.js.map +1 -0
- package/dist/temporal/activities/provenance.d.ts +4 -0
- package/dist/temporal/activities/provenance.d.ts.map +1 -0
- package/dist/temporal/activities/provenance.js +18 -0
- package/dist/temporal/activities/provenance.js.map +1 -0
- package/dist/temporal/activities/replay.d.ts +20 -0
- package/dist/temporal/activities/replay.d.ts.map +1 -0
- package/dist/temporal/activities/replay.js +135 -0
- package/dist/temporal/activities/replay.js.map +1 -0
- package/dist/temporal/activities/round-outcome.d.ts +63 -0
- package/dist/temporal/activities/round-outcome.d.ts.map +1 -0
- package/dist/temporal/activities/round-outcome.js +127 -0
- package/dist/temporal/activities/round-outcome.js.map +1 -0
- package/dist/temporal/activities/runtime.d.ts +38 -0
- package/dist/temporal/activities/runtime.d.ts.map +1 -0
- package/dist/temporal/activities/runtime.js +146 -0
- package/dist/temporal/activities/runtime.js.map +1 -0
- package/dist/temporal/activities/session-verify.d.ts +45 -0
- package/dist/temporal/activities/session-verify.d.ts.map +1 -0
- package/dist/temporal/activities/session-verify.js +91 -0
- package/dist/temporal/activities/session-verify.js.map +1 -0
- package/dist/temporal/activities/submissions.d.ts +9 -0
- package/dist/temporal/activities/submissions.d.ts.map +1 -0
- package/dist/temporal/activities/submissions.js +28 -0
- package/dist/temporal/activities/submissions.js.map +1 -0
- package/dist/temporal/activities/task-compiler.d.ts +21 -0
- package/dist/temporal/activities/task-compiler.d.ts.map +1 -0
- package/dist/temporal/activities/task-compiler.js +63 -0
- package/dist/temporal/activities/task-compiler.js.map +1 -0
- package/dist/temporal/activities/types.d.ts +57 -0
- package/dist/temporal/activities/types.d.ts.map +1 -0
- package/dist/temporal/activities/types.js +2 -0
- package/dist/temporal/activities/types.js.map +1 -0
- package/dist/temporal/activities/verifier-material.d.ts +18 -0
- package/dist/temporal/activities/verifier-material.d.ts.map +1 -0
- package/dist/temporal/activities/verifier-material.js +49 -0
- package/dist/temporal/activities/verifier-material.js.map +1 -0
- package/dist/temporal/activities/verifier-outcome.d.ts +19 -0
- package/dist/temporal/activities/verifier-outcome.d.ts.map +1 -0
- package/dist/temporal/activities/verifier-outcome.js +70 -0
- package/dist/temporal/activities/verifier-outcome.js.map +1 -0
- package/dist/temporal/activities/verifier-round.d.ts +8 -0
- package/dist/temporal/activities/verifier-round.d.ts.map +1 -0
- package/dist/temporal/activities/verifier-round.js +110 -0
- package/dist/temporal/activities/verifier-round.js.map +1 -0
- package/dist/temporal/activities/verify-harbor.d.ts +15 -0
- package/dist/temporal/activities/verify-harbor.d.ts.map +1 -0
- package/dist/temporal/activities/verify-harbor.js +193 -0
- package/dist/temporal/activities/verify-harbor.js.map +1 -0
- package/dist/temporal/activities/verify.d.ts +11 -0
- package/dist/temporal/activities/verify.d.ts.map +1 -0
- package/dist/temporal/activities/verify.js +151 -0
- package/dist/temporal/activities/verify.js.map +1 -0
- package/dist/temporal/activities.d.ts +3 -51
- package/dist/temporal/activities.d.ts.map +1 -1
- package/dist/temporal/activities.js +2 -886
- package/dist/temporal/activities.js.map +1 -1
- package/dist/temporal/connection.d.ts.map +1 -1
- package/dist/temporal/connection.js +3 -2
- package/dist/temporal/connection.js.map +1 -1
- package/dist/temporal/worker-main.js +19 -3
- package/dist/temporal/worker-main.js.map +1 -1
- package/dist/temporal/workflow/activity-proxies.d.ts +3 -0
- package/dist/temporal/workflow/activity-proxies.d.ts.map +1 -0
- package/dist/temporal/workflow/activity-proxies.js +45 -0
- package/dist/temporal/workflow/activity-proxies.js.map +1 -0
- package/dist/temporal/workflow/authoring-stage.d.ts +5 -0
- package/dist/temporal/workflow/authoring-stage.d.ts.map +1 -0
- package/dist/temporal/workflow/authoring-stage.js +64 -0
- package/dist/temporal/workflow/authoring-stage.js.map +1 -0
- package/dist/temporal/workflow/candidate-tracker.d.ts +28 -0
- package/dist/temporal/workflow/candidate-tracker.d.ts.map +1 -0
- package/dist/temporal/workflow/candidate-tracker.js +85 -0
- package/dist/temporal/workflow/candidate-tracker.js.map +1 -0
- package/dist/temporal/workflow/candidate.d.ts +6 -0
- package/dist/temporal/workflow/candidate.d.ts.map +1 -0
- package/dist/temporal/workflow/candidate.js +54 -0
- package/dist/temporal/workflow/candidate.js.map +1 -0
- package/dist/temporal/workflow/discovery.d.ts +19 -0
- package/dist/temporal/workflow/discovery.d.ts.map +1 -0
- package/dist/temporal/workflow/discovery.js +137 -0
- package/dist/temporal/workflow/discovery.js.map +1 -0
- package/dist/temporal/workflow/failures.d.ts +5 -0
- package/dist/temporal/workflow/failures.d.ts.map +1 -0
- package/dist/temporal/workflow/failures.js +28 -0
- package/dist/temporal/workflow/failures.js.map +1 -0
- package/dist/temporal/workflow/run.d.ts +5 -0
- package/dist/temporal/workflow/run.d.ts.map +1 -0
- package/dist/temporal/workflow/run.js +154 -0
- package/dist/temporal/workflow/run.js.map +1 -0
- package/dist/temporal/workflow/stage.d.ts +26 -0
- package/dist/temporal/workflow/stage.d.ts.map +1 -0
- package/dist/temporal/workflow/stage.js +16 -0
- package/dist/temporal/workflow/stage.js.map +1 -0
- package/dist/temporal/workflow/verification-stage.d.ts +11 -0
- package/dist/temporal/workflow/verification-stage.d.ts.map +1 -0
- package/dist/temporal/workflow/verification-stage.js +20 -0
- package/dist/temporal/workflow/verification-stage.js.map +1 -0
- package/dist/temporal/workflow.d.ts +12 -4
- package/dist/temporal/workflow.d.ts.map +1 -1
- package/dist/temporal/workflow.js +38 -445
- package/dist/temporal/workflow.js.map +1 -1
- package/dist/verifier-fix.d.ts +20 -0
- package/dist/verifier-fix.d.ts.map +1 -0
- package/dist/verifier-fix.js +62 -0
- package/dist/verifier-fix.js.map +1 -0
- package/dist/verify-report.d.ts +9 -0
- package/dist/verify-report.d.ts.map +1 -0
- package/dist/verify-report.js +135 -0
- package/dist/verify-report.js.map +1 -0
- package/dist/viewer/archived-keys.d.ts +9 -0
- package/dist/viewer/archived-keys.d.ts.map +1 -0
- package/dist/viewer/archived-keys.js +36 -0
- package/dist/viewer/archived-keys.js.map +1 -0
- package/dist/viewer/archived.d.ts +20 -0
- package/dist/viewer/archived.d.ts.map +1 -0
- package/dist/viewer/archived.js +238 -0
- package/dist/viewer/archived.js.map +1 -0
- package/dist/viewer/artifacts.d.ts +8 -0
- package/dist/viewer/artifacts.d.ts.map +1 -0
- package/dist/viewer/artifacts.js +96 -0
- package/dist/viewer/artifacts.js.map +1 -0
- package/dist/viewer/bundle.d.ts +9 -0
- package/dist/viewer/bundle.d.ts.map +1 -0
- package/dist/viewer/bundle.js +79 -0
- package/dist/viewer/bundle.js.map +1 -0
- package/dist/viewer/candidates.d.ts +9 -0
- package/dist/viewer/candidates.d.ts.map +1 -0
- package/dist/viewer/candidates.js +137 -0
- package/dist/viewer/candidates.js.map +1 -0
- package/dist/viewer/local-server.d.ts +11 -0
- package/dist/viewer/local-server.d.ts.map +1 -0
- package/dist/viewer/local-server.js +64 -0
- package/dist/viewer/local-server.js.map +1 -0
- package/dist/viewer/task-files.d.ts +10 -0
- package/dist/viewer/task-files.d.ts.map +1 -0
- package/dist/viewer/task-files.js +120 -0
- package/dist/viewer/task-files.js.map +1 -0
- package/dist/viewer/types.d.ts +78 -0
- package/dist/viewer/types.d.ts.map +1 -0
- package/dist/viewer/types.js +36 -0
- package/dist/viewer/types.js.map +1 -0
- package/docs/api.md +168 -0
- package/docs/evaluations.md +42 -15
- package/docs/operations.md +254 -26
- package/docs/solver-evaluations.md +63 -0
- package/docs/task-construction.md +21 -11
- package/drizzle/0000_glossy_johnny_blaze.sql +97 -0
- package/drizzle/0001_evaluation_records.sql +5 -0
- package/drizzle/0002_task_deletion.sql +1 -0
- package/drizzle/0003_drop_repo_runs.sql +3 -0
- package/drizzle/0004_preserve_batch_runs.sql +8 -0
- package/drizzle/0005_api_keys.sql +15 -0
- package/drizzle/meta/0000_snapshot.json +776 -0
- package/drizzle/meta/0001_snapshot.json +807 -0
- package/drizzle/meta/0002_snapshot.json +813 -0
- package/drizzle/meta/0003_snapshot.json +726 -0
- package/drizzle/meta/0004_snapshot.json +813 -0
- package/drizzle/meta/0005_snapshot.json +919 -0
- package/drizzle/meta/_journal.json +48 -0
- package/package.json +39 -25
- package/src/extensions/authoring.ts +83 -72
- package/src/extensions/shared/deliverable.ts +153 -0
- package/src/extensions/shared/mailbox.ts +128 -0
- package/src/extensions/shared/schemas.ts +101 -0
- package/src/extensions/shared/static-check.ts +103 -0
- package/src/extensions/verifier.ts +88 -0
- package/src/skills/selfbench/SKILL.md +71 -13
- package/biome.json +0 -24
- package/dist/agent-smoke-main.d.ts +0 -3
- package/dist/agent-smoke-main.d.ts.map +0 -1
- package/dist/agent-smoke-main.js +0 -55
- package/dist/agent-smoke-main.js.map +0 -1
- package/dist/agent-smoke.d.ts +0 -18
- package/dist/agent-smoke.d.ts.map +0 -1
- package/dist/agent-smoke.js +0 -103
- package/dist/agent-smoke.js.map +0 -1
- package/dist/codex-review.d.ts +0 -41
- package/dist/codex-review.d.ts.map +0 -1
- package/dist/codex-review.js +0 -193
- package/dist/codex-review.js.map +0 -1
- package/dist/eval-main.d.ts +0 -3
- package/dist/eval-main.d.ts.map +0 -1
- package/dist/eval-main.js +0 -81
- package/dist/eval-main.js.map +0 -1
- package/dist/evaluate.d.ts +0 -25
- package/dist/evaluate.d.ts.map +0 -1
- package/dist/evaluate.js +0 -214
- package/dist/evaluate.js.map +0 -1
- package/dist/modal-auth.d.ts.map +0 -1
- package/dist/modal-auth.js.map +0 -1
- package/dist/reaudit-main.d.ts +0 -3
- package/dist/reaudit-main.d.ts.map +0 -1
- package/dist/reaudit-main.js +0 -158
- package/dist/reaudit-main.js.map +0 -1
- package/dist/repair-main.d.ts +0 -3
- package/dist/repair-main.d.ts.map +0 -1
- package/dist/repair-main.js +0 -171
- package/dist/repair-main.js.map +0 -1
- package/dist/review/assets/index-CZ3G759O.js +0 -1568
- package/dist/review/assets/index-DgSLzX8l.css +0 -1
- package/dist/sandbox/programs/prepare-repair.d.ts +0 -7
- package/dist/sandbox/programs/prepare-repair.d.ts.map +0 -1
- package/dist/sandbox/programs/prepare-repair.js.map +0 -1
- package/dist/sandbox/programs/repair.d.ts +0 -3
- package/dist/sandbox/programs/repair.d.ts.map +0 -1
- package/dist/sandbox/programs/repair.js +0 -100
- package/dist/sandbox/programs/repair.js.map +0 -1
- package/dist/sandbox/programs/review.d.ts +0 -2
- package/dist/sandbox/programs/review.d.ts.map +0 -1
- package/dist/sandbox/programs/review.js +0 -18
- package/dist/sandbox/programs/review.js.map +0 -1
- package/dist/sandbox/programs/validation-repair.d.ts +0 -3
- package/dist/sandbox/programs/validation-repair.d.ts.map +0 -1
- package/dist/sandbox/programs/validation-repair.js +0 -115
- package/dist/sandbox/programs/validation-repair.js.map +0 -1
- package/dist/sandbox-repair.bundle.js +0 -323
- package/dist/sandbox-review.bundle.js +0 -14462
- package/dist/validate-main.d.ts +0 -3
- package/dist/validate-main.d.ts.map +0 -1
- package/dist/validate-main.js +0 -143
- package/dist/validate-main.js.map +0 -1
- package/dist/validation-repair.d.ts +0 -10
- package/dist/validation-repair.d.ts.map +0 -1
- package/dist/validation-repair.js +0 -72
- package/dist/validation-repair.js.map +0 -1
- package/review/index.html +0 -14
- package/review/src/App.tsx +0 -338
- package/review/src/export-loader.test.ts +0 -57
- package/review/src/export-loader.ts +0 -151
- package/review/src/main.tsx +0 -15
- package/review/src/styles.css +0 -162
- package/review/src/types.ts +0 -47
- package/review/tsconfig.json +0 -16
- package/review/vite.config.ts +0 -20
- package/scripts/build-sandbox-programs.ts +0 -22
- package/scripts/verify-package.ts +0 -102
- package/scripts/write-build-metadata.ts +0 -27
- package/src/agent-smoke-main.ts +0 -64
- package/src/agent-smoke.ts +0 -138
- package/src/api-main.ts +0 -12
- package/src/api.ts +0 -291
- package/src/artifacts.ts +0 -357
- package/src/audit.ts +0 -106
- package/src/build-metadata.ts +0 -3
- package/src/cli.ts +0 -504
- package/src/codex-review.ts +0 -229
- package/src/config.ts +0 -239
- package/src/contracts.ts +0 -233
- package/src/coupling.ts +0 -259
- package/src/eval-main.ts +0 -93
- package/src/evaluate.ts +0 -300
- package/src/github.ts +0 -26
- package/src/harbor-environment.ts +0 -17
- package/src/harbor-results.ts +0 -144
- package/src/harbor-task.ts +0 -533
- package/src/hash.ts +0 -5
- package/src/modal-auth.ts +0 -11
- package/src/parallel.ts +0 -24
- package/src/process.ts +0 -167
- package/src/project-paths.ts +0 -15
- package/src/provenance-associations.ts +0 -311
- package/src/provenance.ts +0 -561
- package/src/providers.ts +0 -22
- package/src/reaudit-main.ts +0 -198
- package/src/repair-main.ts +0 -209
- package/src/repair.ts +0 -55
- package/src/run-wait.ts +0 -40
- package/src/sandbox/contracts.ts +0 -52
- package/src/sandbox/index.ts +0 -23
- package/src/sandbox/programs/author.ts +0 -19
- package/src/sandbox/programs/prepare-repair.ts +0 -44
- package/src/sandbox/programs/repair.ts +0 -132
- package/src/sandbox/programs/review.ts +0 -19
- package/src/sandbox/programs/validation-repair.ts +0 -153
- package/src/sandbox/providers/docker/executor.ts +0 -115
- package/src/sandbox/providers/modal/executor.ts +0 -217
- package/src/sandbox/providers/vercel/command.ts +0 -127
- package/src/sandbox/providers/vercel/executor.ts +0 -448
- package/src/sandbox/providers/vercel/fetch.ts +0 -45
- package/src/sandbox/timeout.ts +0 -56
- package/src/setup/vercel/cli.ts +0 -403
- package/src/setup/vercel/index.ts +0 -3
- package/src/setup/vercel/probe.ts +0 -232
- package/src/setup/vercel/profile.ts +0 -322
- package/src/setup/vercel/runtime-image.ts +0 -204
- package/src/setup/vercel/setup.ts +0 -419
- package/src/subscription-auth.ts +0 -80
- package/src/temporal/activities.ts +0 -1348
- package/src/temporal/connection.ts +0 -23
- package/src/temporal/worker-main.ts +0 -28
- package/src/temporal/workflow.ts +0 -568
- package/src/terminal-prompts.ts +0 -197
- package/src/terminal-reporter.ts +0 -126
- package/src/validate-main.ts +0 -177
- package/src/validation-repair.ts +0 -94
- package/tsconfig.build.json +0 -13
- package/tsconfig.json +0 -21
package/docs/operations.md
CHANGED
|
@@ -4,43 +4,73 @@ This document covers SelfBench configuration, persistence, authentication, the H
|
|
|
4
4
|
|
|
5
5
|
## Local stack
|
|
6
6
|
|
|
7
|
-
`
|
|
7
|
+
`self-bench up` (or `bun run cli up --backend docker` from a checkout) starts:
|
|
8
8
|
|
|
9
9
|
- Postgres for Temporal state;
|
|
10
|
+
- Postgres for the site (`site-postgres`: users, connected repos, evaluation records);
|
|
10
11
|
- Temporal;
|
|
11
|
-
- the SelfBench API;
|
|
12
|
+
- the SelfBench API, serving the `dist/review` bundle;
|
|
12
13
|
- the SelfBench worker;
|
|
13
14
|
- a persistent artifact volume.
|
|
14
15
|
|
|
15
|
-
The worker mounts the host Docker socket for local sandboxes. The API never receives the Docker socket or model credentials. The local Postgres
|
|
16
|
+
The worker mounts the host Docker socket for local sandboxes. The API never receives the Docker socket or model credentials; the worker never receives the GitHub OAuth secret or session secret. The local Postgres users and passwords are development defaults (`temporal`/`temporal` and `selfbench`/`selfbench`).
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
### One stack per checkout
|
|
19
|
+
|
|
20
|
+
Several checkouts (for example git worktrees) can run at once. `self-bench up` derives a Compose project from the checkout directory name and, from that, stable host ports and image tags, so two worktrees never share containers, volumes, ports, or images. Explicit environment always wins:
|
|
21
|
+
|
|
22
|
+
| Value | Default for the canonical `self-bench` checkout and packaged installs | Default for any other checkout |
|
|
23
|
+
| --- | --- | --- |
|
|
24
|
+
| `COMPOSE_PROJECT_NAME` | `selfbench` | directory name, lowercased |
|
|
25
|
+
| `SELFBENCH_SITE_PORT` | `8080` | stable hash of the project in 8100-8899 |
|
|
26
|
+
| `SELFBENCH_TEMPORAL_PORT` | `7233` | stable hash of the project in 7300-8099 |
|
|
27
|
+
| `SELFBENCH_IMAGE` | `selfbench:local` | `<project>-selfbench:local` |
|
|
28
|
+
| `SELFBENCH_DOCKER_IMAGE` | `selfbench-sandbox:local` | `<project>-sandbox:local` |
|
|
29
|
+
| `SELFBENCH_PUBLIC_URL` | `http://<SELFBENCH_SITE_HOSTNAME or 127.0.0.1>:<site port>` | same |
|
|
30
|
+
| `SELFBENCH_SITE_BIND` | `127.0.0.1`, or `0.0.0.0` when the hostname is not loopback | same |
|
|
31
|
+
|
|
32
|
+
`self-bench up` prints the resulting URL, project, and OAuth callback; `self-bench down` resolves the same project. Plain `docker compose up` uses the `selfbench` project on 8080 and 7233 unless those variables are exported, so it suits a single stack only.
|
|
33
|
+
|
|
34
|
+
Compose and `self-bench up` both read `.env` from the checkout; copy `.env.example` to start. Keep `.env` free of per-stack values (project, ports, public URL) when it is shared between worktrees, and export those in the shell instead. With `GITHUB_OAUTH_CLIENT_ID`, `GITHUB_OAUTH_CLIENT_SECRET`, and `SELFBENCH_SESSION_SECRET` set, the API serves the signed-in selfbench.dev site (see [Site sign-in](#site-sign-in-selfbenchdev)); without them it serves the bearer-token Harbor Ledger. `SELFBENCH_SITE_HOSTNAME` is the name browsers open: leave it unset to stay on loopback, or set a tailnet or LAN name to reach the site from another machine.
|
|
35
|
+
|
|
36
|
+
Manage development DNS and reverse proxies with your local tooling. Set `SELFBENCH_PUBLIC_URL` to the externally reachable origin and `SELFBENCH_SITE_BIND` / `SELFBENCH_SITE_PORT` to the address and port the proxy should reach.
|
|
37
|
+
|
|
38
|
+
Temporal, site, and artifact state live in the `<project>_temporal-postgres`, `<project>_site-postgres`, and `<project>_artifacts` volumes. Back up those volumes before an upgrade when workflow history, users, or generated artifacts must be retained. Site database migrations (`drizzle/`) run automatically when the API or worker starts.
|
|
18
39
|
|
|
19
40
|
## Credentials
|
|
20
41
|
|
|
21
42
|
self-bench requires GitHub and model credentials:
|
|
22
43
|
|
|
23
44
|
- `gh auth login` supplies read access to merged pull requests. Export `GH_TOKEN="$(gh auth token)"` for the worker. Write access is not required.
|
|
24
|
-
- `OPENAI_API_KEY` powers discovery, authoring
|
|
45
|
+
- `OPENAI_API_KEY` powers discovery, authoring rounds, and verification rounds. This is the recommended model-authentication path.
|
|
25
46
|
|
|
26
|
-
|
|
47
|
+
For ChatGPT subscription authentication, provide `SELFBENCH_PI_AUTH_JSON` containing Pi's `openai-codex` OAuth credential. API-key authentication takes precedence when `OPENAI_API_KEY` is set. SelfBench does not install or invoke the Codex CLI; exported-task evaluation credentials belong to Harbor.
|
|
27
48
|
|
|
28
|
-
Sandbox-provider credentials are separate. Modal accepts its mounted profile or token pair. For a local Vercel worker, `self-bench setup vercel` stores a project-scoped token in an owner-only local profile. Unattended workers use the equivalent `VERCEL_TOKEN`, `VERCEL_TEAM_ID`, and `VERCEL_PROJECT_ID` environment variables. Keep provider credentials on the worker
|
|
49
|
+
Sandbox-provider credentials are separate. Modal accepts its mounted profile or token pair. For a local Vercel worker, `self-bench setup vercel` stores a project-scoped token in an owner-only local profile. Unattended Vercel workers use the equivalent `VERCEL_TOKEN`, `VERCEL_TEAM_ID`, and `VERCEL_PROJECT_ID` environment variables. E2B workers use `E2B_API_KEY` and optionally `E2B_DOMAIN`; E2B setup reads the same values but does not save them. Keep provider credentials on the worker. The API receives provider/template metadata for run manifests but never needs Vercel or E2B control credentials.
|
|
29
50
|
|
|
30
51
|
## Execution backends and Harbor
|
|
31
52
|
|
|
32
|
-
SelfBench uses one provider for discovery, authoring,
|
|
53
|
+
SelfBench uses one provider for discovery, authoring-round, and verification-round sandboxes. It separately invokes Harbor for the build, smoke, nop, and oracle gates of every in-session `verify` and every submission. While an agent session runs, the worker polls the live sandbox's `/work/mailbox` through the provider's exec and file API (Docker `exec`/`cp`, Modal exec and filesystem, E2B commands and files, Vercel `runCommand` and file reads), so those APIs must stay reachable for the whole session. Every generation backend defaults Harbor to the matching environment; `--harbor-environment docker|modal|vercel|e2b|daytona` selects a different one. Daytona is a Harbor-only environment and reads `DAYTONA_API_KEY` from the worker. The pinned Harbor build is installed with its `e2b`, `daytona`, `modal`, and `vercel` extras; Harbor's Vercel environment boots a Vercel Sandbox from a cached snapshot and runs Docker inside it.
|
|
33
54
|
|
|
34
55
|
```bash
|
|
35
56
|
self-bench up --backend docker # Docker + Docker
|
|
36
57
|
self-bench up --backend modal # Modal + Modal
|
|
37
58
|
self-bench up --backend vercel --harbor-environment docker
|
|
38
59
|
self-bench up --backend vercel --harbor-environment modal
|
|
60
|
+
self-bench up --backend vercel # Vercel + Vercel
|
|
61
|
+
self-bench up --backend vercel --harbor-environment e2b
|
|
62
|
+
self-bench up --backend vercel --harbor-environment daytona
|
|
63
|
+
self-bench up --backend e2b # E2B + E2B
|
|
64
|
+
self-bench up --backend e2b --harbor-environment docker
|
|
65
|
+
self-bench up --backend e2b --harbor-environment modal
|
|
39
66
|
self-bench up --backend docker --harbor-environment modal
|
|
40
67
|
self-bench up --backend modal --harbor-environment docker
|
|
68
|
+
self-bench up --backend modal --harbor-environment daytona
|
|
41
69
|
```
|
|
42
70
|
|
|
43
|
-
|
|
71
|
+
The hosted site offers only Modal, Vercel, and E2B generation with Modal, Vercel, E2B, or Daytona Harbor, each backed by an organization credential. Docker is not offered there because Docker generation and Docker Harbor both run on the shared worker. Hosted Harbor credentials travel as `SELFBENCH_HARBOR_E2B_API_KEY` and `SELFBENCH_HARBOR_VERCEL_TOKEN`, `SELFBENCH_HARBOR_VERCEL_TEAM_ID`, and `SELFBENCH_HARBOR_VERCEL_PROJECT_ID`, and take their provider names only inside Harbor's process, so generation and verification may use different accounts of the same provider.
|
|
72
|
+
|
|
73
|
+
Use `--modal-config` whenever either side uses Modal. A worker has one fixed pairing; do not run workers with different provider settings on the same Temporal task queue. Run and export metadata record both choices, plus the configured hosted-provider timeout cap when applicable.
|
|
44
74
|
|
|
45
75
|
### Docker
|
|
46
76
|
|
|
@@ -67,11 +97,76 @@ self-bench up --backend modal --modal-config /absolute/path/to/.modal.toml
|
|
|
67
97
|
|
|
68
98
|
When Modal is used for generation or Harbor, SelfBench mounts `~/.modal.toml` by default; `--modal-config` overrides that path. A secret manager may provide `MODAL_TOKEN_ID` and `MODAL_TOKEN_SECRET` instead. Empty token environment variables are removed at worker startup so they cannot override a valid mounted profile.
|
|
69
99
|
|
|
70
|
-
Modal defaults to 20 concurrent worker activities. Discovery starts eight independently retryable shards, and candidate slots are continuously refilled. Discovery and
|
|
100
|
+
Modal defaults to 20 concurrent worker activities. Discovery starts eight independently retryable shards, and candidate slots are continuously refilled. Discovery, authoring rounds, and verification rounds stop after eight minutes without process output. Discovery also has a 45-minute per-attempt deadline and up to three attempts per shard; authoring and verification rounds each request four hours because an in-session `verify` can take up to an hour and an agent has several.
|
|
101
|
+
|
|
102
|
+
### E2B
|
|
103
|
+
|
|
104
|
+
E2B generation defaults to E2B Harbor; choose Docker, Modal, Vercel, or Daytona instead with `--harbor-environment`. It requires a custom, prebuilt SelfBench template. Stock E2B templates do not contain the pinned Pi, GitHub CLI, system packages, or `/work` layout that SelfBench expects, so `SELFBENCH_E2B_TEMPLATE` has no default. SelfBench never installs those runtime dependencies while allocating a sandbox.
|
|
105
|
+
|
|
106
|
+
#### Build the template
|
|
107
|
+
|
|
108
|
+
Create an E2B API key, export it only in the shell that performs setup, and choose a versioned template name or tag:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
export E2B_API_KEY=...
|
|
112
|
+
# Optional only for an E2B-compatible private/control-plane domain:
|
|
113
|
+
# export E2B_DOMAIN=e2b.example.com
|
|
114
|
+
|
|
115
|
+
self-bench setup e2b --name selfbench-runtime:v1
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
This noninteractive command uses the pinned `e2b@2.46.0` SDK to parse the packaged `Dockerfile.sandbox` with the package root as its file context, then calls `Template.build`. It does not require the E2B CLI or a local Docker daemon. Setup accepts a lowercase `name[:tag]` (letters, digits, hyphens, and underscores, plus periods in a tag) and rejects malformed names before any SDK call. The Dockerfile pins its base image and tool versions, supplies an `amd64` default for E2B's `TARGETARCH` parser, and ends at `WORKDIR /work`. Build requests have a 60-second per-request control-plane timeout while the build itself may run longer. Build logs go to stderr; on success the command prints JSON containing the exact template reference returned by E2B, template ID, build ID, and a shell-safe `SELFBENCH_E2B_TEMPLATE` export. Preserve the build ID in deployment records and use a new versioned name/tag when rebuilding so run metadata can identify the intended runtime reference; a mutable tag is not an immutable build identifier.
|
|
119
|
+
|
|
120
|
+
A standard SelfBench request expects 4 CPUs and 8,192 MiB. E2B 2.46 assigns CPU and memory when the template is built and exposes no per-sandbox resource override. Setup therefore uses those values by default:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
self-bench setup e2b \
|
|
124
|
+
--name selfbench-runtime:v1 \
|
|
125
|
+
--cpus 4 \
|
|
126
|
+
--memory-mib 8192
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The executor verifies E2B's allocated CPU and memory before uploading source files and fails with a resource-mismatch diagnostic if the configured template differs from the request. Change the setup resource flags only for a custom caller that also sets matching `SandboxRequest` resources; ordinary SelfBench activities use the standard values. Disk size is likewise template/platform controlled and cannot be mapped per create by this SDK version.
|
|
130
|
+
|
|
131
|
+
E2B templates are durable account resources and are not removed by `self-bench down`. Build a new versioned template for runtime changes and retire old templates according to your E2B retention policy. Each workflow stage still gets a fresh sandbox from that template.
|
|
132
|
+
|
|
133
|
+
#### Start a worker
|
|
134
|
+
|
|
135
|
+
Configure the template reference printed by setup, keep the API key in the worker environment, and explicitly choose Harbor:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
export E2B_API_KEY=...
|
|
139
|
+
export SELFBENCH_E2B_TEMPLATE=selfbench-runtime:v1
|
|
140
|
+
# Optional; defaults to the Hobby-compatible one-hour ceiling:
|
|
141
|
+
export SELFBENCH_E2B_TIMEOUT_CAP=1h
|
|
142
|
+
|
|
143
|
+
self-bench up --backend e2b --harbor-environment docker
|
|
144
|
+
# Or, with Modal credentials/profile configured:
|
|
145
|
+
# self-bench up --backend e2b --harbor-environment modal
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Worker startup calls `Template.exists` with an explicit SDK client and a 30-second local/request timeout, and fails before polling Temporal if the credentials cannot access the template. The default activity concurrency is four. Reduce `SELFBENCH_ACTIVITY_CONCURRENCY`, often to `1`, when Docker Harbor or the E2B account cannot sustain four concurrent activities.
|
|
149
|
+
|
|
150
|
+
E2B Hobby sandboxes have a one-hour maximum lifetime; paid plans can support up to 24 hours. SelfBench conservatively defaults `SELFBENCH_E2B_TIMEOUT_CAP` to `1h`. Set a larger cap only after verifying the account entitlement; values above `24h` are rejected. Discovery requests 45 minutes and each authoring or verification round requests four hours, so the configured cap centrally shortens only longer stages; under a one-hour cap an agent has room for at most one in-session verify. E2B also receives the effective stage timeout with lifecycle action `kill`, and SelfBench independently enforces the same hard deadline, returning exit 124 after a confirmed cleanup.
|
|
151
|
+
|
|
152
|
+
Commands run under `/work`. Inputs and binary outputs are transferred with E2B's file API, and paths outside `/work` are rejected before allocation. Stdout/stderr stream progress while retaining only the latest 8 MiB per stream for diagnostics. Output inactivity cancels the command and sandbox. Workload environment and stage secrets are scoped to the command; SelfBench does not create durable account-level E2B Secrets.
|
|
153
|
+
|
|
154
|
+
Every normal completion, command failure, cancellation, inactivity timeout, and hard timeout enters cleanup. On failure or termination, SelfBench requests command kill first, collects requested partial outputs in parallel under one bounded diagnostic deadline, and only then removes the sandbox. It first tries the sandbox handle, but never treats E2B's `kill(false)` alone as proof of absence: it falls back to static kill by sandbox ID and uses `getInfo`; only `SandboxNotFoundError` independently confirms that the sandbox is gone. Cleanup calls and retries share a bounded deadline, and a stuck provider promise cannot hold the activity open indefinitely.
|
|
155
|
+
|
|
156
|
+
A create request carries unique SelfBench allocation metadata. If cancellation, timeout, or response loss leaves creation ambiguous before an ID is returned, cleanup searches all listed states (including paused sandboxes) by that metadata and also accepts a late-arriving create handle. If allocation absence or deletion cannot be confirmed within the cleanup window, the activity fails with the allocation context rather than silently reporting success. A provider could still allocate after that bounded recovery window; E2B's requested `onTimeout: kill` lifecycle is the final bound. A worker process crash can likewise bypass client cleanup.
|
|
157
|
+
|
|
158
|
+
All `E2B_*` variables are treated as control-plane values. Compose passes the supported API key/domain settings only to the worker, not the API, and SelfBench strips the entire prefix from E2B workload commands and Harbor child environments. The API receives only `SELFBENCH_E2B_TEMPLATE` and `SELFBENCH_E2B_TIMEOUT_CAP` so it can stamp run/export metadata. The sandbox still receives repository content and the selected model/GitHub workload credentials, so use only trusted repositories and apply E2B account budget and network controls before unattended runs.
|
|
159
|
+
|
|
160
|
+
Common failures:
|
|
161
|
+
|
|
162
|
+
- `E2B template ... does not exist or is not accessible` at worker startup means the name/tag is wrong, the API key belongs to another account, or the optional domain is wrong. Re-export the exact `configure` value from setup or rebuild the template.
|
|
163
|
+
- A resource-mismatch error means the template was built with CPU or memory that does not match the stage request. Rebuild the standard template with 4 CPUs and 8,192 MiB.
|
|
164
|
+
- A timeout-limit error after raising the cap means the E2B plan does not support that lifetime. Restore `SELFBENCH_E2B_TIMEOUT_CAP=1h` or use a verified paid-plan value.
|
|
165
|
+
- A cleanup error includes the sandbox ID or allocation context but redacts the API key. Inspect active sandboxes in E2B, kill any matching `selfbench_allocation` metadata, then resolve control-plane access before retrying.
|
|
71
166
|
|
|
72
167
|
### Vercel Sandbox
|
|
73
168
|
|
|
74
|
-
Vercel
|
|
169
|
+
Vercel generation defaults to Vercel Harbor; choose Docker, Modal, E2B, or Daytona instead with `--harbor-environment`. SelfBench supports both Vercel's 45-minute Hobby Sandbox ceiling and the longer paid-team ceiling. Discovery requests 45 minutes and each authoring or verification round requests four hours; setup detects the selected project's effective capability and caps every Vercel stage centrally when necessary. Sandbox use, VCR storage, memory, active CPU, and data transfer are metered by Vercel; configure Spend Management before unattended runs. Vercel Hobby use is intended for personal, non-commercial work.
|
|
75
170
|
|
|
76
171
|
#### Interactive local setup
|
|
77
172
|
|
|
@@ -122,7 +217,7 @@ self-bench up --backend vercel --harbor-environment modal
|
|
|
122
217
|
|
|
123
218
|
Modal Harbor also needs the Modal profile or token pair. Vercel control credentials are removed from the Harbor child process for both Harbor environments. `self-bench up` resolves the profile, then validates the complete credential triple, digest-pinned image, and timeout cap before starting Compose.
|
|
124
219
|
|
|
125
|
-
The setup probe records a two-hour effective SelfBench ceiling when the requested two-hour sandbox is accepted. If Vercel returns its exact 45-minute limit response, setup verifies a 45-minute sandbox, explains the impact, and asks before saving that cap. Longer authoring and
|
|
220
|
+
The setup probe records a two-hour effective SelfBench ceiling when the requested two-hour sandbox is accepted. If Vercel returns its exact 45-minute limit response, setup verifies a 45-minute sandbox, explains the impact, and asks before saving that cap. Longer authoring and verification rounds then run for at most 45 minutes and return exit 124 on timeout, so only the affected round fails. Discovery retains its shorter requested limit. The effective cap is included in run and export metadata.
|
|
126
221
|
|
|
127
222
|
#### Environment-only and unattended workers
|
|
128
223
|
|
|
@@ -209,32 +304,138 @@ self-bench run \
|
|
|
209
304
|
--output ./self-bench-tasks.tar.gz
|
|
210
305
|
```
|
|
211
306
|
|
|
212
|
-
The three tier counts total 1–10,000. Each is
|
|
307
|
+
The three tier counts total 1–10,000. Each is an accepted-task target: discovery expands until it can fill every tier and over-fetches a small pool, and a rejected or infrastructure-failed candidate is replaced from that leftover pool until each tier is filled or the pool is exhausted. Accepted tasks are then exported.
|
|
308
|
+
|
|
309
|
+
### Replaying known candidates
|
|
310
|
+
|
|
311
|
+
`self-bench replay` starts a run from candidates of an earlier run instead of discovery, for example to re-run a few previously rejected candidates through the current pipeline:
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
self-bench replay \
|
|
315
|
+
--source-run sb-20260901-abcd1234 \
|
|
316
|
+
--candidate w0s2-uploader --candidate w1s0-legacy \
|
|
317
|
+
--output ./replayed-tasks.tar.gz
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
The worker rebuilds each candidate from the source run's artifacts: the retained human request from `runs/<source>/provenance/<candidate>.json`, the full candidate record from the discovery `report.json` located through the `w<wave>s<shard>-` ID prefix, or, failing that, the authored `definition.json` plus a `gh pr view` lookup of the completed commit. Candidate IDs are kept, artifacts are written under the new run ID, and authoring and verification start from fresh agent sessions. The same request shape is accepted by `POST /v1/runs` as a `replay` field (`{ "sourceRunId", "candidateIds" }`) in place of `repository`, `provenance`, and `candidateCounts`.
|
|
213
321
|
|
|
214
322
|
`--output` implies `--wait`. It reports phase changes, requires a successful Temporal terminal state, downloads with create-only filesystem semantics, and verifies the API-provided SHA-256.
|
|
215
323
|
|
|
216
324
|
A custom `--run-id` must contain 3–63 lowercase letters, digits, or hyphens and start with a letter or digit.
|
|
217
325
|
|
|
326
|
+
#### Excluding pull requests earlier runs already processed
|
|
327
|
+
|
|
328
|
+
Discovery only avoids pull requests found within the same run. A follow-up generation run over the same
|
|
329
|
+
repository therefore proposes PRs an earlier run already authored, wasting agent time and producing duplicate
|
|
330
|
+
tasks. Pass `--exclude-run` (repeatable) with every earlier run whose PRs must not be proposed again:
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
self-bench run --repo ~/code/posthog \
|
|
334
|
+
--easy-count 10 --medium-count 10 --hard-count 10 \
|
|
335
|
+
--exclude-run posthog-agent-pipeline-20-v1 \
|
|
336
|
+
--exclude-run posthog-agent-pipeline-replay-v1 \
|
|
337
|
+
--run-id posthog-agent-pipeline-30-v2 --output ./posthog-30-v2.tar.gz
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Before the first discovery wave the worker runs `collectExcludedSourcePrs`, which reads each listed run's
|
|
341
|
+
candidate records from the artifact store: the discovery checkpoints and reports under
|
|
342
|
+
`runs/<runId>/discovery/`, a replay run's `runs/<runId>/provenance/replay.jsonl`, and, when present, an archived
|
|
343
|
+
run status at `runs/<runId>/status.json` (a saved `GET /v1/runs/<runId>` body; each listed candidate resolves
|
|
344
|
+
through its `provenance/<candidateId>.json` or authored `definition.json`). Every PR the run processed counts,
|
|
345
|
+
whatever its outcome there: accepted, rejected, infrastructure-failed, or still pending. A rejected PR was
|
|
346
|
+
judged on the same material, so retrying it belongs to `replay`, not to a fresh discovery. The set is sent with
|
|
347
|
+
every wave and a candidate whose PR is excluded never enters the pool, even if a shard returns it. A listed run
|
|
348
|
+
with no candidate records at all fails the run non-retryably (`ExcludedRunMissing`) so a mistyped ID cannot
|
|
349
|
+
silently exclude nothing. `POST /v1/runs` accepts the same list as `excludeRuns`.
|
|
350
|
+
|
|
351
|
+
Export dedupe rule: `buildExport` keeps the first accepted task per source pull request, in the order candidates
|
|
352
|
+
were accepted, and drops later ones. The manifest's `acceptedCount` and `tasks` cover only kept tasks;
|
|
353
|
+
`droppedDuplicates` lists each dropped task with its `sourcePr` and the `keptTaskId` it duplicates. Run status and
|
|
354
|
+
`acceptedTaskIds` still report every accepted candidate; the export is the deduplicated deliverable.
|
|
355
|
+
|
|
356
|
+
### Round artifacts
|
|
357
|
+
|
|
358
|
+
Each authoring or verification round stores its decision directly under
|
|
359
|
+
`runs/<runId>/<stage>/<candidateId>/round-<n>/` (`result.json`, `verdict.json`, `fix/`) and the pi session under
|
|
360
|
+
`runs/<runId>/<stage>/<candidateId>/session/round-<n>.jsonl`. Everything a single attempt produces before the
|
|
361
|
+
round is decided lives under `round-<n>/attempt-<m>/`: `prompt.md`, `coupling-evidence.json` (verifier round 1),
|
|
362
|
+
`sandbox.log`, `sandbox-result.json` (the provider's exit code, the wrapper's own status, pi's exit code, and which
|
|
363
|
+
declared outputs were collected), and the in-session `verify-<k>/` reports. A Temporal retry of the same round therefore never collides with the immutable
|
|
364
|
+
artifacts of the attempt it replaces; its session is stored as `session/round-<n>-attempt-<m>.jsonl`.
|
|
365
|
+
|
|
366
|
+
Large request files reach the sandbox by URL rather than upload: the verifier round asks the artifact store for a V4 signed read URL of the compiled task bundle (two-hour TTL) and the E2B executor has the sandbox `curl` it and verify the SHA-256 in place. Pushing hundreds of MB per sandbox through `files.write` hit the SDK's client-side request timeout once a couple of dozen rounds started together; E2B recommends the pull pattern. Providers without an in-sandbox download step fetch remote files on the worker and upload them inline.
|
|
367
|
+
|
|
368
|
+
The round wrapper records its own exit status in `/work/wrapper-status` from its EXIT trap, and the worker trusts
|
|
369
|
+
that file over the provider's reported exit code (a provider hard timeout stays authoritative). E2B has been
|
|
370
|
+
observed to lose a long command's stream after the script finished and report a spurious exit code or a gRPC
|
|
371
|
+
"terminated" error; with the status file collected, such a failure becomes a normal round result instead of a retry.
|
|
372
|
+
|
|
373
|
+
## Harbor viewer
|
|
374
|
+
|
|
375
|
+
The API serves a browser viewer at `/`. It has two sources, chosen by the server that serves it: a self-bench run (every candidate, including rejected and infrastructure-failed ones, with the artifacts and logs each stage wrote) when served by the API, and a local directory of Harbor tasks when served by `self-bench view`. Each task shows the compiled environment (task.toml, Dockerfiles, services, resources), the setup, smoke, and test commands with the selected tests, the instruction beside the gold and held-out test patches, and a file tree of everything in the bundle. In run mode the pipeline sheet lists each stage's artifacts with a one-line summary of what it concluded.
|
|
376
|
+
|
|
377
|
+
The same viewer runs without Temporal or a token over any directory of Harbor tasks:
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
self-bench view ./self-bench-tasks --port 8090
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Directories are recognized by a `task.toml` up to four levels deep, so an extracted self-bench export, a single task, or a Harbor tasks directory all work. Deep links carry `#run=`, `#task=`, and `#tab=`.
|
|
384
|
+
|
|
218
385
|
## HTTP API
|
|
219
386
|
|
|
220
|
-
The CLI is the recommended client.
|
|
387
|
+
The CLI is the recommended client for run workflows. Every site feature is also reachable over HTTP with a personal API key; see the [HTTP API reference](api.md) for the full route list and authentication. The run routes are:
|
|
221
388
|
|
|
222
389
|
| Method | Path | Purpose |
|
|
223
390
|
| --- | --- | --- |
|
|
224
391
|
| `GET` | `/healthz` | Liveness check |
|
|
225
392
|
| `POST` | `/v1/provenance?runId=...` | Store sanitized provenance JSONL |
|
|
226
|
-
| `POST` | `/v1/runs` | Start a tiered candidate workflow |
|
|
393
|
+
| `POST` | `/v1/runs` | Start a tiered candidate workflow (optionally with `excludeRuns`), or a replay of known candidates |
|
|
227
394
|
| `GET` | `/v1/runs` | List workflows |
|
|
228
395
|
| `GET` | `/v1/runs/:runId` | Read progress and rejection reasons |
|
|
229
396
|
| `POST` | `/v1/runs/:runId/cancel` | Request Temporal cancellation |
|
|
230
397
|
| `GET` | `/v1/runs/:runId/export` | Download a completed export |
|
|
398
|
+
| `GET` | `/v1/viewer` | Viewer capabilities (`modes`) |
|
|
399
|
+
| `GET` | `/v1/runs/:runId/candidates` | Every candidate with stage, reason, and definition summary |
|
|
400
|
+
| `GET` | `/v1/runs/:runId/candidates/:taskId/artifacts` | Artifact keys grouped by pipeline stage, plus bundles |
|
|
401
|
+
| `GET` | `/v1/runs/:runId/artifacts?key=...` | Stream one artifact under `runs/:runId/` |
|
|
402
|
+
| `GET` | `/v1/runs/:runId/bundle?key=...` | Expand a Harbor task bundle into its text files |
|
|
231
403
|
|
|
232
404
|
`/healthz` is unauthenticated. Every other route requires `Authorization: Bearer $SELFBENCH_API_TOKEN` when the token is configured. Startup fails if the API binds beyond loopback without a token.
|
|
233
405
|
|
|
234
|
-
|
|
406
|
+
### Site sign-in (selfbench.dev)
|
|
407
|
+
|
|
408
|
+
Setting `GITHUB_OAUTH_CLIENT_ID` turns the same API into the selfbench.dev site: the bundle in `dist/review` renders the login page and signed-in shell instead of the Harbor Ledger, and these routes appear:
|
|
409
|
+
|
|
410
|
+
| Method | Path | Purpose |
|
|
411
|
+
| --- | --- | --- |
|
|
412
|
+
| `GET` | `/auth/github` | Redirect to GitHub with a state cookie (scopes `read:user read:org repo`) |
|
|
413
|
+
| `GET` | `/auth/github/callback` | Exchange the code, record the user and their org memberships, set the session cookie |
|
|
414
|
+
| `POST` | `/auth/logout` | Clear the session cookie |
|
|
415
|
+
| `GET` | `/api/me` | The caller's login, name, avatar, organizations, and how they authenticated |
|
|
416
|
+
| `*` | `/api/api-keys…` | Personal API keys: list, create (secret shown once), revoke |
|
|
417
|
+
| `*` | `/api/orgs/:org/…` | Repositories, tasks, batches, evaluations, comparisons, and credentials; see the [API reference](api.md) |
|
|
418
|
+
|
|
419
|
+
The session is a signed, HttpOnly, SameSite=Lax cookie valid for 30 days (Secure when `SELFBENCH_PUBLIC_URL` is https). Users live in the `users` table of `SELFBENCH_DATABASE_URL`; migrations run at startup. The user's GitHub token is stored encrypted under a key derived from `SELFBENCH_SESSION_SECRET` and is never sent to the browser. With sign-in enabled, `/v1/*` and `/api/*` answer 401 unless the request carries a valid session, a personal API key (`Authorization: Bearer sbk_…` or `X-API-Key`), or the operator bearer token; `/v1/viewer` stays public so the bundle can tell which host it is on. API keys are stored as SHA-256 hashes in the `api_keys` table and act as their owner; `read`-scoped keys may only send `GET` requests. `self-bench view <dir>` never requires sign-in.
|
|
420
|
+
|
|
421
|
+
Compose: put the three sign-in variables in `.env` and set `SELFBENCH_PUBLIC_URL` to the browser-facing origin. Register that origin with `/auth/github/callback` as the GitHub OAuth callback.
|
|
422
|
+
|
|
423
|
+
Hot-reload loop: `bun run dev:site` starts a Postgres container (`selfbench-site-postgres`, 127.0.0.1:5433), the API on 8087 with `SELFBENCH_TEMPORAL_CONNECT=lazy`, and Vite on 5173 proxying `/v1`, `/api`, and `/auth`. Register a GitHub OAuth app with callback `http://127.0.0.1/auth/github/callback` (GitHub lets loopback redirects use any port, so browse to `http://127.0.0.1:5173`) and put `GITHUB_OAUTH_CLIENT_ID`, `GITHUB_OAUTH_CLIENT_SECRET`, and `SELFBENCH_SESSION_SECRET` in `.env.site`.
|
|
424
|
+
|
|
425
|
+
Run status includes its phase, accepted/rejected counts, per-candidate status with the current stage (`authoring` or `verification`) and round, discovery wave, completed/failed shard counts, and current candidates. Failed generation runs use a new run ID. Run exported tasks directly with Harbor; Harbor owns evaluation result persistence and retry behavior.
|
|
426
|
+
|
|
427
|
+
`/v1/runs` also lists runs that exist only in the artifact store (status `ARCHIVED`) once Temporal retention has dropped their workflow. For those runs the candidate routes reconstruct each candidate from its artifacts: the stage is the furthest pipeline group that wrote anything, and a candidate counts as accepted when its latest verification round wrote an `accepted` `result.json` (a `rejected` round result in either loop marks the stage that ended it). Legacy runs without round results count as accepted when their latest coupling review is `clean`. Bundle expansion caches extracted bundles under the API host's temporary directory, keyed by artifact key, and never returns `repo.tar.gz` contents.
|
|
235
428
|
|
|
236
429
|
SelfBench has no remote deletion route. Delete local artifact-volume data or GCS run prefixes through normal operator tooling.
|
|
237
430
|
|
|
431
|
+
## Temporal workflow shape
|
|
432
|
+
|
|
433
|
+
A run is the `selfBenchRunWorkflow` execution whose workflow ID is the run ID. It discovers candidates, then starts one `selfBenchCandidateWorkflow` child per candidate with the workflow ID `<runId>/candidate/<candidateId>` on the same task queue. The child runs that candidate's authoring and verification loops and returns its final progress plus the accepted task; it signals every progress change to the parent (`candidateProgress`), and the parent's `status` query and `GET /v1/runs/<runId>` merge those signals into the run status. The child's returned result is authoritative even if a signal is lost. Task-ID uniqueness across candidates is enforced by the parent when a child completes green.
|
|
434
|
+
|
|
435
|
+
To inspect one candidate, open the child workflow in the Temporal UI (search for the run ID prefix, or the parent's "Child Workflows" list). Its history shows that candidate's activities, retries, and timeouts alone; the `candidateStatus` query returns its current progress. Cancelling the run cancels every child, and the parent close policy terminates any straggler. A child that fails outright (anything other than an exhausted or Harbor-infrastructure activity failure) is recorded as `infrastructure_failed` for that candidate; the run continues.
|
|
436
|
+
|
|
437
|
+
Deployment note: this shape replaced a single workflow that drove every candidate through activities directly. Deploy a worker with the child-workflow shape only when no run is in flight. An in-flight run started under the old shape would replay against the new code and hit a non-determinism error; let running runs finish (or cancel and replay them) before restarting the worker on a build across that boundary.
|
|
438
|
+
|
|
238
439
|
## Configuration
|
|
239
440
|
|
|
240
441
|
| Variable | Default | Used by |
|
|
@@ -246,16 +447,20 @@ SelfBench has no remote deletion route. Delete local artifact-volume data or GCS
|
|
|
246
447
|
| `SELFBENCH_ARTIFACT_DIR` | `.selfbench/artifacts` | Local artifact store |
|
|
247
448
|
| `SELFBENCH_GCS_BUCKET` | — | GCS artifact store |
|
|
248
449
|
| `SELFBENCH_GCS_PREFIX` | `selfbench` | GCS artifact store |
|
|
249
|
-
| `SELFBENCH_EXECUTION_BACKEND` | `docker` | Worker; `docker`, `modal`, or `
|
|
250
|
-
| `SELFBENCH_DOCKER_IMAGE` |
|
|
251
|
-
| `SELFBENCH_HARBOR_ENVIRONMENT` | matching Docker/Modal backend | Worker; required as `docker` or `modal` for Vercel |
|
|
252
|
-
| `SELFBENCH_ACTIVITY_CONCURRENCY` | `1` Docker, `20` Modal, `4` Vercel | Worker |
|
|
450
|
+
| `SELFBENCH_EXECUTION_BACKEND` | `docker` | Worker; `docker`, `modal`, `vercel`, or `e2b` |
|
|
451
|
+
| `SELFBENCH_DOCKER_IMAGE` | per checkout | Docker worker; sandbox image tag built by `self-bench up` |
|
|
452
|
+
| `SELFBENCH_HARBOR_ENVIRONMENT` | matching Docker/Modal backend | Worker; required as `docker` or `modal` for Vercel/E2B |
|
|
453
|
+
| `SELFBENCH_ACTIVITY_CONCURRENCY` | `1` Docker, `20` Modal, `4` Vercel/E2B | Worker |
|
|
253
454
|
| `SELFBENCH_MODAL_APP` | `selfbench` | Modal worker |
|
|
254
455
|
| `SELFBENCH_MODAL_ENVIRONMENT` | — | Modal worker |
|
|
255
456
|
| `SELFBENCH_MODAL_IMAGE` | `node:22-bookworm` | Modal worker |
|
|
256
457
|
| `SELFBENCH_MODAL_CONFIG_PATH` | `/dev/null` | Compose host mount; set by `self-bench up --modal-config` locally |
|
|
257
458
|
| `SELFBENCH_VERCEL_IMAGE` | profile or — | Required digest-pinned VCR image for Vercel execution |
|
|
258
459
|
| `SELFBENCH_VERCEL_TIMEOUT_CAP` | `2h` | Vercel worker and API; accepts integer milliseconds or `ms`, `s`, `m`, `h` units |
|
|
460
|
+
| `SELFBENCH_E2B_TEMPLATE` | — | Required E2B template name/tag/ID for API and worker |
|
|
461
|
+
| `SELFBENCH_E2B_TIMEOUT_CAP` | `1h` | E2B worker and API; accepts integer milliseconds or `ms`, `s`, `m`, `h` units, up to `24h` |
|
|
462
|
+
| `E2B_API_KEY` | — | Worker-only E2B control credential; required for E2B workers |
|
|
463
|
+
| `E2B_DOMAIN` | E2B default | Optional worker-only E2B control-plane domain |
|
|
259
464
|
| `SELFBENCH_CONFIG_DIR` | `~/.selfbench` | Local CLI profile directory; not needed with a complete Vercel environment |
|
|
260
465
|
| `VERCEL_TOKEN` | profile or unset | Vercel worker; explicit project-scoped access token |
|
|
261
466
|
| `VERCEL_TEAM_ID` | profile or unset | Vercel worker |
|
|
@@ -263,14 +468,26 @@ SelfBench has no remote deletion route. Delete local artifact-volume data or GCS
|
|
|
263
468
|
| `SELFBENCH_TEMPORAL_ADDRESS` | `127.0.0.1:7233` | API and worker |
|
|
264
469
|
| `SELFBENCH_TEMPORAL_NAMESPACE` | `default` | API and worker |
|
|
265
470
|
| `SELFBENCH_TASK_QUEUE` | `selfbench-dev` | API and worker |
|
|
266
|
-
| `
|
|
267
|
-
| `
|
|
268
|
-
| `
|
|
471
|
+
| `SELFBENCH_TEMPORAL_CONNECT` | `eager` | API; `lazy` defers the Temporal connection to first use |
|
|
472
|
+
| `GITHUB_OAUTH_CLIENT_ID` | unset | API; enables site sign-in |
|
|
473
|
+
| `GITHUB_OAUTH_CLIENT_SECRET` | — | API; required with the client id |
|
|
474
|
+
| `SELFBENCH_SESSION_SECRET` | — | API; 32+ characters, signs session cookies and seals GitHub tokens |
|
|
475
|
+
| `SELFBENCH_PUBLIC_URL` | `http://<hostname>:<site port>` | API; public origin, forms the OAuth callback URL |
|
|
476
|
+
| `SELFBENCH_SITE_HOSTNAME` | `127.0.0.1` | `self-bench up`; hostname in the public URL, non-loopback binds `0.0.0.0` |
|
|
477
|
+
| `SELFBENCH_DATABASE_URL` | compose: `site-postgres` | API and worker; Postgres holding users, connected repos, and evaluation records |
|
|
478
|
+
| `SELFBENCH_EVAL_CREDENTIAL_KEY` | — | API and worker; 32-byte hex key encrypting saved evaluation credentials |
|
|
479
|
+
| `SELFBENCH_SITE_PORT` / `SELFBENCH_SITE_BIND` | per checkout / `127.0.0.1` | Compose host port and bind address for the API |
|
|
480
|
+
| `SELFBENCH_TEMPORAL_PORT` | per checkout | Compose host port for Temporal |
|
|
481
|
+
| `COMPOSE_PROJECT_NAME` / `SELFBENCH_IMAGE` | per checkout | Compose project and API/worker image tag |
|
|
482
|
+
| `OPENAI_API_KEY` | — | Worker sandboxes |
|
|
483
|
+
| `SELFBENCH_PI_AUTH_JSON` | — | Optional Pi `openai-codex` subscription credential |
|
|
269
484
|
| `GH_TOKEN` | — | Worker GitHub reads |
|
|
270
|
-
| `CODEX_AUTH_JSON_PATH` | `~/.codex/auth.json` | Optional matrix subscription-auth file |
|
|
271
485
|
|
|
272
486
|
## Cloud topology
|
|
273
487
|
|
|
488
|
+
For the reviewable GCP dev/prod Terraform foundation, bootstrap CLI, and deployment gates, see
|
|
489
|
+
[`infra/README.md`](../infra/README.md). The infrastructure code does not provision or deploy itself.
|
|
490
|
+
|
|
274
491
|
The API is a regular request-oriented HTTP service suitable for Cloud Run. Deploy `Dockerfile` with its default `node dist/api-main.js` command and port 8080:
|
|
275
492
|
|
|
276
493
|
```text
|
|
@@ -298,6 +515,17 @@ OPENAI_API_KEY=...
|
|
|
298
515
|
|
|
299
516
|
The worker owns model, GitHub, Modal, and Harbor credentials. Use separate least-privilege service accounts and a secret manager. Grant GCS object access only to the configured prefix, use a TLS-enabled Temporal namespace, and keep API/worker image digests and `SELFBENCH_TASK_QUEUE` identical.
|
|
300
517
|
|
|
518
|
+
For E2B generation on a long-running worker, replace the execution settings above with:
|
|
519
|
+
|
|
520
|
+
```text
|
|
521
|
+
SELFBENCH_EXECUTION_BACKEND=e2b
|
|
522
|
+
SELFBENCH_HARBOR_ENVIRONMENT=docker # or modal
|
|
523
|
+
SELFBENCH_E2B_TEMPLATE=selfbench-runtime:v1
|
|
524
|
+
SELFBENCH_E2B_TIMEOUT_CAP=1h # raise only to a verified plan limit
|
|
525
|
+
E2B_API_KEY=...
|
|
526
|
+
# E2B_DOMAIN=... # only for a custom E2B domain
|
|
527
|
+
```
|
|
528
|
+
|
|
301
529
|
For Vercel generation, replace the execution settings above with:
|
|
302
530
|
|
|
303
531
|
```text
|
|
@@ -319,7 +547,7 @@ This repository defines the application boundary, not turnkey cloud infrastructu
|
|
|
319
547
|
- Exports contain source snapshots, held-out tests, and reference solutions. They are sensitive and unencrypted.
|
|
320
548
|
- Artifact references carry byte length and SHA-256; reads verify integrity.
|
|
321
549
|
- Local artifact paths and GCS object names are confined to their configured roots. GCS IAM should enforce the same prefix independently.
|
|
322
|
-
- Sandboxes receive only the selected model credential: `OPENAI_API_KEY` by default, or
|
|
550
|
+
- Sandboxes receive only the selected model credential: `OPENAI_API_KEY` by default, or the isolated Pi `openai-codex` credential when subscription authentication is configured.
|
|
323
551
|
- Sandboxes contain both a source checkout and a short-lived model credential. Use SelfBench only with repositories you trust to execute; it is not a malware-analysis service.
|
|
324
552
|
- Docker uses disposable containers and volumes and removes them after normal completion. A host crash can leave resources for an operator to inspect and remove. Modal uses disposable Sandboxes. Vercel uses nonpersistent named sandboxes, attempts permanent deletion after each run, and fails the activity when deletion cannot be confirmed; inspect the project after worker crashes or cleanup failures.
|
|
325
|
-
- Vercel control credentials authenticate only the worker's
|
|
553
|
+
- Vercel and E2B control credentials authenticate only the worker's sandbox control plane. Compose does not pass them to the API; `harborChildEnvironment` strips them before Harbor starts, and the E2B executor strips them from workload command environments. They are never workload secrets.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Run tasks with Harbor
|
|
2
|
+
|
|
3
|
+
Open a connected repository → **Review** to inspect and approve tasks. **Dataset** contains only human-approved tasks with accepted pipeline results. Select up to ten tasks and open the dedicated **Run** page. Its predefined model table is available even before credentials are configured. Select saved credentials, toggle compatible harnesses, choose a shared sandbox, then press **Run comparison**. Each model creates a separately tracked run on the same frozen tasks. **Results** shows runs and an accuracy/cost Pareto frontier using `@mupt-ai/dari-pareto`; select a run for its transcript, scores, and artifacts. Each task/harness pair gets one attempt, sequentially within its model run. Task generation, authoring, `nop`, and oracle verification remain separate workflows.
|
|
4
|
+
|
|
5
|
+
## Settings → Credentials
|
|
6
|
+
|
|
7
|
+
Add named credentials separately from Run. Supported providers are OpenAI, Anthropic, OpenRouter, and a custom OpenAI-compatible endpoint. Custom endpoints require HTTPS and an operator-approved hostname in `SELFBENCH_CUSTOM_MODEL_HOSTS`. Hosted sandboxes are E2B, Modal, and Daytona; E2B and Daytona use API keys, while Modal requires a token ID and secret. Docker is not offered in the hosted UI. Saving does not contact a model or allocate a sandbox. The explicit **Run comparison** action starts billable work.
|
|
8
|
+
|
|
9
|
+
OpenAI credentials may instead use an explicitly uploaded Codex sign-in file. These credentials work only with the Codex harness, never fall back to an API key, and remain subject to subscription limits and sandbox charges. The worker never imports the host's sign-in automatically.
|
|
10
|
+
|
|
11
|
+
Credentials are private to your user and reusable across your authorized repositories. PostgreSQL stores AES-256-GCM encrypted records; no separate vault service or Context Drop runtime is required. A separate deployment encryption key stays outside the database. Credentials are never returned by the API or placed in workflow inputs or browser storage. Only selected credentials enter the isolated Harbor process. Use HTTPS outside the encrypted local tailnet. Replacing a credential creates a new reference; deletion is blocked while a referencing run remains active. Database backups may retain deleted encrypted records under your backup retention policy.
|
|
12
|
+
|
|
13
|
+
Comparisons are persisted before workflow submission. A retry uses the same frozen selection and child workflow IDs, so a partial submission can be resumed without starting duplicate work. Closing the page does not cancel runs.
|
|
14
|
+
|
|
15
|
+
## Enable on the server
|
|
16
|
+
|
|
17
|
+
Set `SELFBENCH_DATABASE_URL` and `SELFBENCH_EVAL_CREDENTIAL_KEY` identically on the API and evaluation worker. The key must be a securely generated 32-byte lowercase hex encryption key, separate from session/OAuth secrets. Back it up securely; losing it makes saved credentials unreadable. Startup applies the additive `evaluation_records` migration. Changing the key does not rotate existing records: retain the current key until an explicit decrypt/re-encrypt migration is available. Install `harbor[e2b,daytona,modal,vercel]==0.23.0` on the worker. Set `SELFBENCH_EVAL_TASK_QUEUE` identically on API and worker, then run `node dist/evaluation/worker-main.js`. This worker does not consume task-generation work. The normal combined worker remains supported when using its task queue.
|
|
18
|
+
|
|
19
|
+
Alternatively, operators can preconfigure profiles with these non-secret settings on the API and Temporal worker:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
SELFBENCH_EVAL_MODELS='[{"id":"my-openai-model","label":"My OpenAI model","model":"openai/YOUR_MODEL_ID","harnesses":["codex","pi"],"tenants":["YOUR_GITHUB_ORG"],"credentialEnv":"SELFBENCH_EVAL_SECRET_OPENAI"}]'
|
|
23
|
+
SELFBENCH_EVAL_SANDBOXES='["docker"]'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The model name must be an actual model your provider account can use, not the example placeholder. OpenAI models support `codex` and `pi`; Anthropic models support `claude-code` and `pi`; the other supported providers use `pi`. Harbor's additional multi-field/cloud-identity authentication schemes (for example Bedrock and Vertex) are not exposed as fake single-key options. Provider access is not probed with paid calls. The worker fails closed if the selected configuration changed or its credential is missing.
|
|
27
|
+
|
|
28
|
+
For legacy operator profiles, provision the corresponding `SELFBENCH_EVAL_SECRET_*` value **only on the worker**. Never place it in frontend variables or send an operator key to the browser. Other model keys, GitHub OAuth tokens, site/database credentials, unrelated sandbox credentials, and host subscription profiles are excluded. A separate temporary HOME prevents use of the operator's CLI login state. AWS identity and arbitrary harness imports are not exposed by the current runner.
|
|
29
|
+
|
|
30
|
+
Docker requires a working worker-accessible Docker daemon and Compose. For operator profiles, Modal uses dedicated `SELFBENCH_EVAL_SECRET_MODAL_TOKEN_ID` and `SELFBENCH_EVAL_SECRET_MODAL_TOKEN_SECRET`; E2B and Daytona use `SELFBENCH_EVAL_SECRET_E2B_API_KEY` and `SELFBENCH_EVAL_SECRET_DAYTONA_API_KEY`. These are Harbor's built-in solver environments, not the separate generation executors. Generation credentials are not reused automatically.
|
|
31
|
+
|
|
32
|
+
The worker verifies Harbor **0.23.0**, matching the existing Dockerfile pin. Harbor installs the selected solver CLI using its built-in harness. Installed agent version details remain in Harbor's trial result artifact. Restart/redeploy the API and worker through your normal deployment process after configuring them. This does not modify OAuth callback registration or existing preview services.
|
|
33
|
+
|
|
34
|
+
## Results and safety
|
|
35
|
+
|
|
36
|
+
E2B uses a packaged Harbor environment subclass that limits sandbox lifetime to one hour. The pinned upstream environment otherwise requests 24 hours, which Hobby accounts reject before the solver starts. All other E2B behavior, including network policy and cleanup, remains inherited from Harbor. The adapter does not retry sandbox creation automatically. Tasks exceeding the one-hour sandbox lifetime fail rather than silently extending usage.
|
|
37
|
+
|
|
38
|
+
- Session authentication, tenant membership, connected repository ownership, task membership, and runnable bundle state are checked server-side. Run requests accept setup identifiers, not credentials, bundle paths or commands. Credentials are accepted only by the scoped setup endpoint. Tasks must have an accepted pipeline result and an explicit human approval, checked again when submitting.
|
|
39
|
+
- Same-origin JSON is required to start a run. A request UUID is also its durable workflow identity. Retrying an unconfirmed submission with the same selection/UUID never starts a second Temporal workflow; a new explicit run gets a new UUID.
|
|
40
|
+
- Temporal executes a separate `selfBenchEvaluationWorkflow`. Automatic activity and Harbor trial retries are disabled. Each Harbor invocation has a two-hour limit and requests sandbox deletion. A killed worker or forced timeout can leave sandbox resources; the failure view warns that an operator may need to verify cleanup. Local tests do not prove remote cleanup.
|
|
41
|
+
- Runs survive page navigation and API restarts. Metadata and changing progress are append-only immutable snapshots under `evaluations/repos/<repo-id>/<uuid>/`; completed text artifacts live beside them. Unchanged poll results do not create snapshots. The worker and API must share the artifact store. Retention/garbage collection remains an operator responsibility.
|
|
42
|
+
- Docker's mounted agent logs can update during execution. Modal's agent logs are downloaded after the solver finishes; the UI labels that limitation rather than presenting synthetic live transcript events. The browser polls every three seconds.
|
|
43
|
+
- Completed views show each task/harness's verifier reward names and values, solver text, tool calls and outputs, raw logs, and sanitized text artifacts. A zero score is a legitimate completed result; missing scores and exceptions are failures, not zeroes. ATIF trajectories and Pi message events are normalized where present, with raw output as fallback.
|
|
44
|
+
- Only selected text log/result filenames are exported, never whole sandbox directories, auth files, or standalone config files. Known worker secret values and common token patterns are redacted before persistence. Output is untrusted text, not rendered HTML. Redaction is not protection against a deliberately malicious solver encoding a credential; sandbox workloads must be trusted to receive the dedicated evaluation model key.
|
|
45
|
+
- Text files are capped at 1 MiB each and 4 MiB per collection; the on-page log and transcript are bounded. Downloaded files are sanitized, potentially truncated exports, not byte-identical raw Harbor artifacts. No automatic public uploads occur.
|
|
46
|
+
|
|
47
|
+
## Cost comparisons
|
|
48
|
+
|
|
49
|
+
Estimated model cost is independent of authentication. Codex sign-in and API keys use the same token accounting: uncached input, cached input, cache writes, and output. For verified models, matching Harbor per-request token and cost records take precedence over reference rates, preserving per-request pricing tiers. Pi uses explicit reference rates: its unknown-model resolver can inherit another model's price metadata, so its dollar total alone is not trusted. A bare dollar total without matching usage is not accepted. Otherwise, dated reference rates are snapshotted with the run; aggregate usage beyond their conservative input bound is not estimated. These are token-equivalent estimates, not invoices; sandbox charges are excluded. Custom models can have a Harbor estimate even without reference pricing. Claude Code cost remains unavailable where its export cannot reliably separate cache-write usage. Missing estimates are never displayed as zero.
|
|
50
|
+
|
|
51
|
+
The catalog was researched on September 5–6, 2026 against official provider documentation, OpenRouter's live model API, and Artificial Analysis coding-agent results. It includes GPT-6 Astra, GPT-5.6 Sol/Terra/Luna, Claude Fable 5.1/Opus 5/Sonnet 5, and current OpenRouter alternatives. Catalog availability is not proof of credential entitlement or a successful SelfBench run. No older-model fallback is performed. Existing runs retain their original model and pricing snapshots. OpenRouter routes with ambiguous cache-write units have no fixed reference estimate; measured Harbor usage can still supply a cost.
|
|
52
|
+
|
|
53
|
+
The plot only compares completed runs with binary reward scores, verified model identities, and complete costs on the same frozen task/bundle snapshot. Separate dataset selections produce separate comparison groups. Missing costs are never treated as zero; those runs remain available in the results list. Failed/incomplete runs are not frontier points.
|
|
54
|
+
|
|
55
|
+
## Local validation
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
bun test tests/evaluation-routes.test.ts tests/evaluation-runner.test.ts tests/evaluation-lifecycle.test.ts review/src/web/evaluation/evaluation.test.tsx
|
|
59
|
+
bun run check
|
|
60
|
+
bun run build
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Tests use a local artifact store, PGlite, signed test sessions, and mocked Harbor commands. They do not run models or create Docker/Modal sandboxes. Real provider access, solver installation, live evaluation, and cloud cleanup require a separately authorized smoke run.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Task construction and validation
|
|
2
2
|
|
|
3
|
-
SelfBench creates easy, medium, and hard Harbor evaluations from completed pull requests. This document defines the task boundary,
|
|
3
|
+
SelfBench creates easy, medium, and hard Harbor evaluations from completed pull requests. This document defines the task boundary, the authoring and verification rounds, and export contents.
|
|
4
4
|
|
|
5
5
|
## Terms
|
|
6
6
|
|
|
@@ -31,9 +31,9 @@ Profiles are eligibility rules, not empirical claims about model success:
|
|
|
31
31
|
| medium | at least 50 changed lines across 2 implementation paths | at least 1 | at least 1 |
|
|
32
32
|
| hard | at least 100 changed lines across 3 implementation paths | at least 1 | at least 2 |
|
|
33
33
|
|
|
34
|
-
Every accepted task also requires a held-out test patch with no file overlap with the reference patch, deterministic repository-native setup and tests, a passing nop/oracle split, and independent
|
|
34
|
+
Every accepted task also requires a held-out test patch with no file overlap with the reference patch, deterministic repository-native setup and tests, a passing smoke/nop/oracle split, and acceptance by the independent verification agent.
|
|
35
35
|
|
|
36
|
-
The size gate is mechanical. Generated or vendored code suitability remains a
|
|
36
|
+
The size gate is mechanical. Generated or vendored code suitability remains a verification judgment. Git LFS, submodules, generated changes, and service-heavy integration suites receive no special path and may be rejected during authoring or verification.
|
|
37
37
|
|
|
38
38
|
## Agent-visible boundary
|
|
39
39
|
|
|
@@ -45,23 +45,33 @@ An evaluated coding agent receives:
|
|
|
45
45
|
|
|
46
46
|
It does not receive the held-out test patch or reference solution. Harbor mounts `solution/` only for the explicit oracle agent.
|
|
47
47
|
|
|
48
|
+
The agent image commits the tree as it stands after `setup.sh` (the `selfbench-setup` commit) and snapshots that repository state to `/opt/selfbench/base.git`. The agent's diff (`agent.patch`) is therefore taken against the post-setup snapshot: files that setup creates and does not gitignore are never part of the agent's patch and cannot collide with the verifier image, which runs the same setup. The verifier image keeps the base commit as `HEAD`; when the gold patch changes dependency manifests it resets only those manifest paths after its extra setup pass.
|
|
49
|
+
|
|
48
50
|
Held-out tests must exercise an existing public API, command, persistence boundary, or extension seam. They may not import gold-specific private helpers or prescribe exact internal SQL, query counts, private schemas, object identity, telemetry layout, incidental error wording, or UI composition unless the source request explicitly makes that artifact public.
|
|
49
51
|
|
|
50
|
-
##
|
|
52
|
+
## Authoring rounds and verification
|
|
53
|
+
|
|
54
|
+
Every candidate passes through two agent-centred loops. Agents do the authoring and judging; the harness only renders, builds, and measures.
|
|
55
|
+
|
|
56
|
+
**Authoring rounds.** One authoring agent session owns the complete Harbor task: instruction, definition (test command, fail-to-pass and pass-to-pass selection, timeouts, resources) and the environment contract (base image, root setup, setup, smoke command, environment variables, services, evidence). The agent writes its deliverable to `/work/task/` (`definition.json` with the environment contract, `instruction.md`, `test.patch`, `gold.patch`; `instruction.md` is authoritative for the prompt) and calls `verify`, which takes no arguments and reads that directory. The tool runs the static check inside the sandbox first (schema, environment policy, patch path safety, audit thresholds, and a dry render of the Harbor tree into `/work/rendered/`) and returns failures immediately. Otherwise it hands the payload to the worker through a sandbox mailbox and blocks while the worker's trusted compiler renders `task.toml`, both Dockerfiles, the scripts, and the repository snapshot, and Harbor builds the images and runs the smoke command, the `nop` split, and the `oracle` split. The structured report (compile, audit, build, smoke, nop, oracle) comes back as the tool result, so the agent iterates inside its own session; it has three `verify` calls per session. `submit_task` runs the static check again and records the task; when its payload equals the last green `verify`, the worker reuses that report instead of rebuilding. Otherwise the worker verifies the submission itself. If the sandbox dies or a submitted task is red, the same agent session is resumed in a fresh sandbox with the report as its next message (fallback loop). Three red rounds reject the candidate with the last report as the reason. A Harbor infrastructure failure counts as a red round with the build log as the report; three consecutive infrastructure rounds mark the candidate `infrastructure_failed` instead.
|
|
51
57
|
|
|
52
|
-
|
|
58
|
+
The mailbox is a directory in the live sandbox: the tool writes `/work/mailbox/requests/<id>.json`, the worker's supervising activity polls it through the provider's live-sandbox exec and file API, archives each verify under `runs/<run>/<stage>/<candidate>/round-<n>/verify-<k>/`, and writes the response the tool is waiting on. Verifier commands run as the `verifier` user with `HOME=/home/verifier`.
|
|
53
59
|
|
|
54
|
-
|
|
60
|
+
The Harbor gates prove:
|
|
61
|
+
|
|
62
|
+
1. `nop`: the smoke command succeeds in the built image, then selected new tests fail on the base snapshot while selected regressions pass;
|
|
55
63
|
2. `oracle`: the reference patch applies and every selected test passes;
|
|
56
64
|
3. determinism: the fail-to-pass selection passes a second time with the oracle.
|
|
57
65
|
|
|
58
|
-
A
|
|
66
|
+
**Verification rounds.** A separate agent session that has not seen the authoring conversation receives the green task (instruction, held-out test patch, gold patch, environment contract, rendered files), the verification report, and the deterministic coupling evidence. It judges whether the task is a fair, self-contained benchmark: tests exercise public behaviour, no test-to-gold coupling, deterministic environment, instruction faithful to the human request. It either accepts or submits a fix. A fix may edit only the held-out tests and the environment contract (plus the test selection, timeouts, and resources that describe them), never the gold patch, the base commit, or the instruction. The verifier authors a fix as files too: held-out test edits in `/work/repo` plus an optional `/work/fix/definition.json` carrying only the changed fields (the tools regenerate `test.patch` from the working tree unless `/work/fix/test.patch` is present). It has the same in-session `verify` tool (two calls per session) for its fix; `submit_fix` runs the static check before it counts and reuses a matching green verify. Otherwise the worker re-runs compile, audit, and Harbor and resumes the same verifier session with the new report. A task is accepted only when the verifier accepts and the mechanical gates are green; otherwise the candidate is rejected with the verifier's reason after at most three verifier rounds.
|
|
67
|
+
|
|
68
|
+
Every candidate in the discovered pool runs as its own child workflow in parallel; the requested counts size the pool (discovery targets 1.5 times the request per tier, dealt across its shards) rather than capping the result, so a run can export more accepted tasks than it asked for. Nothing is replaced or backfilled: a rejected candidate is simply a rejection in the run status.
|
|
59
69
|
|
|
60
|
-
|
|
70
|
+
## Reproducible environments
|
|
61
71
|
|
|
62
|
-
|
|
72
|
+
SelfBench does not infer a generic language toolchain. The authoring agent derives the environment contract from the exact pinned base commit: runtime, dependency installation, builds, fixtures, and local services come from the closest matching CI job, repository Dockerfile, devcontainer, lockfiles, and test scripts.
|
|
63
73
|
|
|
64
|
-
The
|
|
74
|
+
The resulting contract pins the base and service images by digest, records repository-file evidence for each choice, keeps service credentials local and non-secret, and separates verifier-only services from the agent environment. Secret-named variables are accepted only with fixed placeholder literals; values that look like real key material or interpolate host variables are rejected. The declared smoke command runs in the built verifier image before the `nop` split, so an environment defect is reported to the authoring agent as a red smoke or build gate rather than discovered later.
|
|
65
75
|
|
|
66
76
|
When the reference patch changes a recognized dependency manifest or lockfile, the hidden verifier image repeats setup with the trusted reference state and then resets source files to the base snapshot. This prevents stale base dependencies from invalidating the oracle without exposing the reference patch to the coding-agent environment.
|
|
67
77
|
|
|
@@ -89,7 +99,7 @@ harbor-task/
|
|
|
89
99
|
└── solution/
|
|
90
100
|
```
|
|
91
101
|
|
|
92
|
-
The export includes the repository snapshot at each selected base commit, held-out tests, and reference solutions. It excludes Git history, local provenance/session records, and
|
|
102
|
+
The export includes the repository snapshot at each selected base commit, held-out tests, and reference solutions. It excludes Git history, local provenance/session records, and the authoring and verification agent sessions (those stay in the run's artifacts).
|
|
93
103
|
|
|
94
104
|
The manifest digest detects accidental corruption but is not a signature because it sits inside the same archive. Extract only exports from a trusted SelfBench deployment and store them as private benchmark material.
|
|
95
105
|
|