@jinn-network/client 0.1.8 → 0.1.9-canary.023faefb
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/CONTRIBUTING.md +2 -2
- package/README.md +6 -0
- package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +3 -3
- package/deployments/deployment-stolas-l2-baseSepolia-fast.json +23 -3
- package/deployments/deployment-task-coordinator-router-v3-baseSepolia-fast.json +34 -6
- package/dist/adapters/mech/adapter.d.ts +31 -1
- package/dist/adapters/mech/adapter.js +126 -53
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +174 -13
- package/dist/adapters/mech/contracts.js +99 -49
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +4 -0
- package/dist/adapters/mech/safe-revert.js +5 -1
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/safe.js +77 -1
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +5 -130
- package/dist/adapters/mech/types.js +9 -65
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/adapters/mech/verdict-code.js +1 -1
- package/dist/adapters/mech/verdict-code.js.map +1 -1
- package/dist/api/bootstrap-endpoint.d.ts +19 -3
- package/dist/api/bootstrap-endpoint.js +4 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/discovery-endpoint.d.ts +1 -0
- package/dist/api/discovery-endpoint.js +24 -0
- package/dist/api/discovery-endpoint.js.map +1 -1
- package/dist/api/fleet-build.d.ts +1 -7
- package/dist/api/fleet-build.js +0 -7
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +26 -17
- package/dist/api/gather-status.js +62 -520
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/harness-auth-status-endpoint.d.ts +21 -0
- package/dist/api/harness-auth-status-endpoint.js +17 -0
- package/dist/api/harness-auth-status-endpoint.js.map +1 -0
- package/dist/api/launcher-endpoints.js +6 -1
- package/dist/api/launcher-endpoints.js.map +1 -1
- package/dist/api/launcher-status.d.ts +2 -0
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +47 -0
- package/dist/api/launcher-tasks.js +88 -3
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +79 -0
- package/dist/api/loop-completion-build.js +154 -0
- package/dist/api/loop-completion-build.js.map +1 -0
- package/dist/api/operator-artifacts-endpoint.js +1 -1
- package/dist/api/operator-artifacts-endpoint.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +2 -1
- package/dist/api/portfolio-v0-build.js +5 -7
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +2 -2
- package/dist/api/prediction-v1-build.js +5 -7
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/rewards-build.d.ts +8 -1
- package/dist/api/rewards-build.js +32 -4
- package/dist/api/rewards-build.js.map +1 -1
- package/dist/api/rewards-endpoint.d.ts +12 -0
- package/dist/api/rewards-endpoint.js +46 -0
- package/dist/api/rewards-endpoint.js.map +1 -0
- package/dist/api/server.d.ts +6 -16
- package/dist/api/server.js +29 -26
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +45 -0
- package/dist/api/setup-endpoints.js +271 -52
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/solvernets-endpoints.js +4 -1
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +71 -94
- package/dist/api/status-build.js +11 -77
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-rollup-build.d.ts +0 -4
- package/dist/api/status-rollup-build.js +0 -4
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/api/stop-hook.d.ts +1 -1
- package/dist/api/stop-hook.js +1 -1
- package/dist/api/stop-hook.js.map +1 -1
- package/dist/api/task-run-routing.d.ts +1 -1
- package/dist/api/task-runs-build.d.ts +2 -2
- package/dist/api/task-runs-build.js +5 -7
- package/dist/api/task-runs-build.js.map +1 -1
- package/dist/bin/jinn-distil-mcp.js +813 -0
- package/dist/bin/jinn-layer.js +12568 -0
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/captures/distil-export.d.ts +54 -0
- package/dist/captures/distil-export.js +135 -0
- package/dist/captures/distil-export.js.map +1 -0
- package/dist/captures/ingest.d.ts +21 -0
- package/dist/captures/ingest.js +144 -0
- package/dist/captures/ingest.js.map +1 -0
- package/dist/captures/live-publisher.d.ts +9 -0
- package/dist/captures/live-publisher.js +5 -3
- package/dist/captures/live-publisher.js.map +1 -1
- package/dist/captures/publish.d.ts +15 -0
- package/dist/captures/publish.js +17 -7
- package/dist/captures/publish.js.map +1 -1
- package/dist/cli/commands/codedigest-revert-check.js +6 -2
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +36 -4
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +87 -0
- package/dist/cli/commands/eval.js +481 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/rewards.d.ts +2 -0
- package/dist/cli/commands/rewards.js +39 -10
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +68 -0
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/status.js +0 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/update.js +8 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/version.js +4 -0
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/execution-context.js +2 -1
- package/dist/cli/execution-context.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/introspection-context.js +0 -3
- package/dist/cli/introspection-context.js.map +1 -1
- package/dist/config.d.ts +158 -541
- package/dist/config.js +190 -197
- package/dist/config.js.map +1 -1
- package/dist/contracts/abis.d.ts +100 -0
- package/dist/contracts/abis.js +58 -0
- package/dist/contracts/abis.js.map +1 -0
- package/dist/contracts/addresses.d.ts +36 -0
- package/dist/contracts/addresses.js +60 -0
- package/dist/contracts/addresses.js.map +1 -0
- package/dist/corpus/acquire.d.ts +7 -6
- package/dist/corpus/acquire.js +10 -10
- package/dist/corpus/acquire.js.map +1 -1
- package/dist/corpus/fetch-artifact.d.ts +21 -0
- package/dist/corpus/fetch-artifact.js +33 -0
- package/dist/corpus/fetch-artifact.js.map +1 -0
- package/dist/corpus/index.d.ts +2 -2
- package/dist/corpus/onchain-query.d.ts +0 -1
- package/dist/corpus/onchain-query.js +2 -5
- package/dist/corpus/onchain-query.js.map +1 -1
- package/dist/corpus/route-resolver.d.ts +3 -3
- package/dist/corpus/route-resolver.js +3 -3
- package/dist/daemon/ai-units-gate.d.ts +6 -6
- package/dist/daemon/ai-units-gate.js +11 -10
- package/dist/daemon/ai-units-gate.js.map +1 -1
- package/dist/daemon/balance-topup-loop.js +27 -9
- package/dist/daemon/balance-topup-loop.js.map +1 -1
- package/dist/daemon/checkpoint-loop.js +2 -2
- package/dist/daemon/creator.d.ts +1 -0
- package/dist/daemon/creator.js +39 -25
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +15 -10
- package/dist/daemon/daemon.js +95 -41
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/delivery-watcher.d.ts +9 -0
- package/dist/daemon/delivery-watcher.js +24 -1
- package/dist/daemon/delivery-watcher.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +7 -0
- package/dist/daemon/eviction-loop.js +19 -3
- package/dist/daemon/eviction-loop.js.map +1 -1
- package/dist/daemon/join-applier.d.ts +35 -0
- package/dist/daemon/join-applier.js +49 -0
- package/dist/daemon/join-applier.js.map +1 -0
- package/dist/daemon/loop-heartbeat.d.ts +89 -0
- package/dist/daemon/loop-heartbeat.js +75 -0
- package/dist/daemon/loop-heartbeat.js.map +1 -0
- package/dist/{api/peers.js → daemon/peer-sync.js} +3 -1
- package/dist/daemon/peer-sync.js.map +1 -0
- package/dist/daemon/reward-claim-loop.js +28 -10
- package/dist/daemon/reward-claim-loop.js.map +1 -1
- package/dist/daemon/skip-log-dedup.d.ts +1 -1
- package/dist/daemon/skip-log-dedup.js +3 -0
- package/dist/daemon/skip-log-dedup.js.map +1 -1
- package/dist/daemon/spend-cap-gate.d.ts +0 -6
- package/dist/daemon/spend-cap-gate.js +1 -8
- package/dist/daemon/spend-cap-gate.js.map +1 -1
- package/dist/daemon/watchdog-loop.d.ts +84 -0
- package/dist/daemon/watchdog-loop.js +91 -0
- package/dist/daemon/watchdog-loop.js.map +1 -0
- package/dist/dashboard/assets/index-B_5Cb-ZH.js +161 -0
- package/dist/dashboard/assets/index-D7rvJRNa.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.d.ts +17 -0
- package/dist/discovery/http.js +378 -26
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +174 -10
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +149 -0
- package/dist/discovery/types.js +40 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +24 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap-run.d.ts +25 -0
- package/dist/earning/bootstrap-run.js +315 -0
- package/dist/earning/bootstrap-run.js.map +1 -0
- package/dist/earning/bootstrap.d.ts +31 -11
- package/dist/earning/bootstrap.js +123 -212
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +2 -232
- package/dist/earning/contracts.js +16 -205
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/faucet-topup-store.d.ts +41 -0
- package/dist/earning/faucet-topup-store.js +89 -0
- package/dist/earning/faucet-topup-store.js.map +1 -0
- package/dist/earning/faucet.d.ts +1 -1
- package/dist/earning/faucet.js +2 -2
- package/dist/earning/faucet.js.map +1 -1
- package/dist/earning/safe-adapter.js +12 -45
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/steps/context.d.ts +42 -0
- package/dist/earning/steps/context.js +4 -0
- package/dist/earning/steps/context.js.map +1 -0
- package/dist/earning/steps/fleet-identity-register.d.ts +4 -0
- package/dist/earning/steps/fleet-identity-register.js +65 -0
- package/dist/earning/steps/fleet-identity-register.js.map +1 -0
- package/dist/earning/steps/fleet-safe-deploy.d.ts +4 -0
- package/dist/earning/steps/fleet-safe-deploy.js +62 -0
- package/dist/earning/steps/fleet-safe-deploy.js.map +1 -0
- package/dist/earning/steps/fleet-safe-predict.d.ts +4 -0
- package/dist/earning/steps/fleet-safe-predict.js +18 -0
- package/dist/earning/steps/fleet-safe-predict.js.map +1 -0
- package/dist/earning/steps/receipt-parsing.d.ts +12 -0
- package/dist/earning/steps/receipt-parsing.js +71 -0
- package/dist/earning/steps/receipt-parsing.js.map +1 -0
- package/dist/earning/stolas-claim.js +8 -8
- package/dist/earning/stolas-claim.js.map +1 -1
- package/dist/earning/{jinn-rewards.d.ts → stolas-staking.d.ts} +4 -8
- package/dist/earning/{jinn-rewards.js → stolas-staking.js} +6 -10
- package/dist/earning/stolas-staking.js.map +1 -0
- package/dist/earning/testnet-setup-migration.d.ts +1 -0
- package/dist/earning/testnet-setup-migration.js +7 -2
- package/dist/earning/testnet-setup-migration.js.map +1 -1
- package/dist/earning/types.d.ts +1 -1
- package/dist/earning/types.js +1 -1
- package/dist/earning/types.js.map +1 -1
- package/dist/earning/viem-clients.d.ts +3 -19
- package/dist/earning/viem-clients.js +4 -31
- package/dist/earning/viem-clients.js.map +1 -1
- package/dist/erc8004/addresses.d.ts +6 -5
- package/dist/erc8004/addresses.js +7 -5
- package/dist/erc8004/addresses.js.map +1 -1
- package/dist/erc8004/identity.d.ts +12 -1
- package/dist/erc8004/identity.js +31 -0
- package/dist/erc8004/identity.js.map +1 -1
- package/dist/erc8004/index.d.ts +1 -1
- package/dist/erc8004/index.js +1 -1
- package/dist/erc8004/index.js.map +1 -1
- package/dist/eval/capability-slate.d.ts +54 -0
- package/dist/eval/capability-slate.js +116 -0
- package/dist/eval/capability-slate.js.map +1 -0
- package/dist/eval/capability-stats.d.ts +39 -0
- package/dist/eval/capability-stats.js +123 -0
- package/dist/eval/capability-stats.js.map +1 -0
- package/dist/eval/contested-band.d.ts +18 -0
- package/dist/eval/contested-band.js +19 -0
- package/dist/eval/contested-band.js.map +1 -0
- package/dist/eval/corpus-index.d.ts +21 -0
- package/dist/eval/corpus-index.js +55 -0
- package/dist/eval/corpus-index.js.map +1 -0
- package/dist/eval/disjointness.d.ts +26 -0
- package/dist/eval/disjointness.js +67 -0
- package/dist/eval/disjointness.js.map +1 -0
- package/dist/eval/eval-harness-run.d.ts +63 -0
- package/dist/eval/eval-harness-run.js +123 -0
- package/dist/eval/eval-harness-run.js.map +1 -0
- package/dist/eval/mcnemar-power.d.ts +14 -0
- package/dist/eval/mcnemar-power.js +40 -0
- package/dist/eval/mcnemar-power.js.map +1 -0
- package/dist/eval/orchestrator.d.ts +224 -0
- package/dist/eval/orchestrator.js +250 -0
- package/dist/eval/orchestrator.js.map +1 -0
- package/dist/eval/paired.d.ts +68 -0
- package/dist/eval/paired.js +93 -0
- package/dist/eval/paired.js.map +1 -0
- package/dist/eval/resolve-slate-tasks.d.ts +35 -0
- package/dist/eval/resolve-slate-tasks.js +56 -0
- package/dist/eval/resolve-slate-tasks.js.map +1 -0
- package/dist/eval/screen-discovery.d.ts +22 -0
- package/dist/eval/screen-discovery.js +71 -0
- package/dist/eval/screen-discovery.js.map +1 -0
- package/dist/eval/screen-progress.d.ts +41 -0
- package/dist/eval/screen-progress.js +60 -0
- package/dist/eval/screen-progress.js.map +1 -0
- package/dist/eval/screen-runner.d.ts +30 -0
- package/dist/eval/screen-runner.js +289 -0
- package/dist/eval/screen-runner.js.map +1 -0
- package/dist/eval/screen.d.ts +107 -0
- package/dist/eval/screen.js +159 -0
- package/dist/eval/screen.js.map +1 -0
- package/dist/eval/slope.d.ts +29 -0
- package/dist/eval/slope.js +46 -0
- package/dist/eval/slope.js.map +1 -0
- package/dist/eval/train-sequence.d.ts +35 -0
- package/dist/eval/train-sequence.js +59 -0
- package/dist/eval/train-sequence.js.map +1 -0
- package/dist/eval/wilson.d.ts +45 -0
- package/dist/eval/wilson.js +48 -0
- package/dist/eval/wilson.js.map +1 -0
- package/dist/events/types.d.ts +1 -1
- package/dist/events/types.js +1 -1
- package/dist/events/types.js.map +1 -1
- package/dist/harnesses/auth-source.d.ts +51 -0
- package/dist/harnesses/auth-source.js +155 -0
- package/dist/harnesses/auth-source.js.map +1 -0
- package/dist/harnesses/engine/canonical-json.js +5 -3
- package/dist/harnesses/engine/canonical-json.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +34 -1
- package/dist/harnesses/engine/engine.js +91 -11
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/packaging.js +5 -5
- package/dist/harnesses/engine/packaging.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +19 -61
- package/dist/harnesses/engine/persistence.js +28 -0
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/impls/_evaluator-base.d.ts +48 -0
- package/dist/harnesses/impls/_evaluator-base.js +35 -0
- package/dist/harnesses/impls/_evaluator-base.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +1 -1
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js +1 -1
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +2 -3
- package/dist/harnesses/impls/claude-mcp-prediction/index.js +29 -99
- package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js +4 -21
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.d.ts +2 -0
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js +30 -79
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js +4 -19
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.d.ts +2 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.d.ts +39 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.js +62 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.d.ts +40 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.js +44 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.d.ts +56 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.js +79 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +6 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +25 -3
- package/dist/harnesses/impls/hermes-agent/harness.js +89 -5
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/index.d.ts +2 -0
- package/dist/harnesses/impls/index.js +10 -1
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.d.ts +34 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.js +111 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.d.ts +24 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.js +19 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.d.ts +64 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.js +125 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.d.ts +32 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.js +73 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.js.map +1 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js +5 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +11 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.js +130 -15
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +29 -1
- package/dist/harnesses/impls/learner/harness.js +85 -1
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +2 -0
- package/dist/harnesses/impls/learner/harvest.js +51 -1
- package/dist/harnesses/impls/learner/harvest.js.map +1 -1
- package/dist/harnesses/impls/learner/plugin-path.js +1 -0
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +10 -29
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +10 -23
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js +10 -25
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/stub.d.ts +2 -2
- package/dist/harnesses/impls/stub.js +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +8 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
- package/dist/harnesses/readiness-registry.d.ts +16 -0
- package/dist/harnesses/readiness-registry.js +28 -6
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/harnesses/types.d.ts +26 -0
- package/dist/learner/revert-decision.d.ts +16 -1
- package/dist/learner/revert-decision.js +38 -18
- package/dist/learner/revert-decision.js.map +1 -1
- package/dist/learner/revert-stats.d.ts +14 -0
- package/dist/learner/revert-stats.js +42 -0
- package/dist/learner/revert-stats.js.map +1 -1
- package/dist/learner/verification-gate.d.ts +53 -0
- package/dist/learner/verification-gate.js +80 -0
- package/dist/learner/verification-gate.js.map +1 -0
- package/dist/local-provider-url.d.ts +3 -0
- package/dist/local-provider-url.js +28 -0
- package/dist/local-provider-url.js.map +1 -0
- package/dist/main.js +188 -566
- package/dist/main.js.map +1 -1
- package/dist/mcp/acquire-artifact.d.ts +3 -3
- package/dist/mcp/acquire-artifact.js +3 -3
- package/dist/mcp/operator-server.js +1 -1
- package/dist/mcp/operator-server.js.map +1 -1
- package/dist/mcp/server.js +5 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/monitoring/net-liveness.d.ts +143 -0
- package/dist/monitoring/net-liveness.js +301 -0
- package/dist/monitoring/net-liveness.js.map +1 -0
- package/dist/observability/emit-event.d.ts +1 -1
- package/dist/observability/emit-event.js +0 -4
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/observability/progress.d.ts +11 -0
- package/dist/observability/progress.js +16 -0
- package/dist/observability/progress.js.map +1 -0
- package/dist/pilot/cost.d.ts +19 -0
- package/dist/pilot/cost.js +31 -0
- package/dist/pilot/cost.js.map +1 -0
- package/dist/pilot/instance.d.ts +20 -0
- package/dist/pilot/instance.js +19 -0
- package/dist/pilot/instance.js.map +1 -0
- package/dist/pilot/repo.d.ts +31 -0
- package/dist/pilot/repo.js +42 -0
- package/dist/pilot/repo.js.map +1 -0
- package/dist/pilot/solve.d.ts +22 -0
- package/dist/pilot/solve.js +37 -0
- package/dist/pilot/solve.js.map +1 -0
- package/dist/pilot/tally.d.ts +35 -0
- package/dist/pilot/tally.js +61 -0
- package/dist/pilot/tally.js.map +1 -0
- package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/dist/plugins/learner/hooks/session-start +30 -1
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/dist/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/dist/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/dist/plugins/local-trace-distiller/.mcp.json +8 -0
- package/dist/plugins/local-trace-distiller/README.md +27 -0
- package/dist/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/dist/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/dist/preflight/deployment-readiness.d.ts +127 -0
- package/dist/preflight/deployment-readiness.js +308 -0
- package/dist/preflight/deployment-readiness.js.map +1 -0
- package/dist/preflight/pidfile-liveness.d.ts +7 -1
- package/dist/preflight/pidfile-liveness.js +14 -0
- package/dist/preflight/pidfile-liveness.js.map +1 -1
- package/dist/preflight/rpc-network.d.ts +10 -3
- package/dist/preflight/rpc-network.js +46 -13
- package/dist/preflight/rpc-network.js.map +1 -1
- package/dist/preflight/stable-cwd.d.ts +29 -0
- package/dist/preflight/stable-cwd.js +98 -0
- package/dist/preflight/stable-cwd.js.map +1 -0
- package/dist/rpc/transport.d.ts +43 -5
- package/dist/rpc/transport.js +131 -30
- package/dist/rpc/transport.js.map +1 -1
- package/dist/scripts/swe-rebench-v2-seed-pool.json +2 -1
- package/dist/solver-nets/registry.d.ts +19 -0
- package/dist/solver-nets/registry.js +95 -66
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_jinn-repo-pool.d.ts +27 -0
- package/dist/solver-types/_jinn-repo-pool.js +27 -0
- package/dist/solver-types/_jinn-repo-pool.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-state.d.ts +9 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +14 -0
- package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +30 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +40 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/index.js +2 -0
- package/dist/solver-types/index.js.map +1 -1
- package/dist/solver-types/jinn-repo-admit.d.ts +17 -0
- package/dist/solver-types/jinn-repo-admit.js +16 -0
- package/dist/solver-types/jinn-repo-admit.js.map +1 -0
- package/dist/solver-types/jinn-repo-auto.d.ts +60 -0
- package/dist/solver-types/jinn-repo-auto.js +163 -0
- package/dist/solver-types/jinn-repo-auto.js.map +1 -0
- package/dist/solver-types/jinn-repo-definition.d.ts +15 -0
- package/dist/solver-types/jinn-repo-definition.js +34 -0
- package/dist/solver-types/jinn-repo-definition.js.map +1 -0
- package/dist/solver-types/jinn-repo-extract.d.ts +16 -0
- package/dist/solver-types/jinn-repo-extract.js +32 -0
- package/dist/solver-types/jinn-repo-extract.js.map +1 -0
- package/dist/solver-types/jinn-repo.d.ts +21 -0
- package/dist/solver-types/jinn-repo.js +23 -0
- package/dist/solver-types/jinn-repo.js.map +1 -0
- package/dist/solver-types/learner-loop-test.js +1 -1
- package/dist/solver-types/learner-loop-test.js.map +1 -1
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
- package/dist/solver-types/solver-type.d.ts +8 -0
- package/dist/solver-types/swe-rebench-v2.d.ts +2 -0
- package/dist/solver-types/swe-rebench-v2.js +115 -10
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.d.ts +5 -0
- package/dist/solvernets/launched-record-dispatcher.js +14 -1
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/registry-client-erc8004.js +29 -37
- package/dist/solvernets/registry-client-erc8004.js.map +1 -1
- package/dist/solvernets/registry-client.d.ts +6 -0
- package/dist/solvernets/store.d.ts +1 -1
- package/dist/solvernets/store.js +8 -3
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/ai-units-config.d.ts +10 -0
- package/dist/spend/ai-units-config.js +7 -1
- package/dist/spend/ai-units-config.js.map +1 -1
- package/dist/spend/ai-units.d.ts +51 -0
- package/dist/spend/ai-units.js +73 -0
- package/dist/spend/ai-units.js.map +1 -1
- package/dist/spend/credential.d.ts +2 -2
- package/dist/spend/credential.js +9 -3
- package/dist/spend/credential.js.map +1 -1
- package/dist/spend/record.js +12 -5
- package/dist/spend/record.js.map +1 -1
- package/dist/spend/spend-cap.d.ts +10 -0
- package/dist/spend/spend-cap.js +13 -0
- package/dist/spend/spend-cap.js.map +1 -0
- package/dist/spend/usage.js +39 -3
- package/dist/spend/usage.js.map +1 -1
- package/dist/store/store.d.ts +106 -5
- package/dist/store/store.js +194 -8
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/emit.d.ts +6 -0
- package/dist/trajectory/emit.js +9 -1
- package/dist/trajectory/emit.js.map +1 -1
- package/dist/trajectory/harness-bundle-schema.d.ts +1 -1
- package/dist/trajectory/harness-bundle-schema.js +1 -1
- package/dist/trajectory/harness-bundle-schema.js.map +1 -1
- package/dist/trajectory/processors/identity-scrub.js +22 -3
- package/dist/trajectory/processors/identity-scrub.js.map +1 -1
- package/dist/trajectory/schema.d.ts +1 -1
- package/dist/trajectory/schema.js +1 -1
- package/dist/trajectory/schema.js.map +1 -1
- package/dist/trajectory/scrub/build.d.ts +46 -0
- package/dist/trajectory/scrub/build.js +76 -0
- package/dist/trajectory/scrub/build.js.map +1 -0
- package/dist/trajectory/scrub/emit-scrub.d.ts +41 -0
- package/dist/trajectory/scrub/emit-scrub.js +88 -0
- package/dist/trajectory/scrub/emit-scrub.js.map +1 -0
- package/dist/trajectory/scrub/key-policy.d.ts +20 -0
- package/dist/trajectory/scrub/key-policy.js +43 -0
- package/dist/trajectory/scrub/key-policy.js.map +1 -0
- package/dist/trajectory/scrub/layer2.d.ts +23 -0
- package/dist/trajectory/scrub/layer2.js +33 -0
- package/dist/trajectory/scrub/layer2.js.map +1 -0
- package/dist/trajectory/scrub/ml-pii-stage.d.ts +24 -0
- package/dist/trajectory/scrub/ml-pii-stage.js +43 -0
- package/dist/trajectory/scrub/ml-pii-stage.js.map +1 -0
- package/dist/trajectory/scrub/openredaction-stage.d.ts +178 -0
- package/dist/trajectory/scrub/openredaction-stage.js +269 -0
- package/dist/trajectory/scrub/openredaction-stage.js.map +1 -0
- package/dist/trajectory/scrub/pii-build.d.ts +31 -0
- package/dist/trajectory/scrub/pii-build.js +64 -0
- package/dist/trajectory/scrub/pii-build.js.map +1 -0
- package/dist/trajectory/scrub/pipeline.d.ts +37 -0
- package/dist/trajectory/scrub/pipeline.js +83 -0
- package/dist/trajectory/scrub/pipeline.js.map +1 -0
- package/dist/trajectory/scrub/plain-patterns-stage.d.ts +31 -0
- package/dist/trajectory/scrub/plain-patterns-stage.js +85 -0
- package/dist/trajectory/scrub/plain-patterns-stage.js.map +1 -0
- package/dist/trajectory/scrub/secretlint-stage.d.ts +35 -0
- package/dist/trajectory/scrub/secretlint-stage.js +250 -0
- package/dist/trajectory/scrub/secretlint-stage.js.map +1 -0
- package/dist/trajectory/scrub/transformers-detector.d.ts +35 -0
- package/dist/trajectory/scrub/transformers-detector.js +68 -0
- package/dist/trajectory/scrub/transformers-detector.js.map +1 -0
- package/dist/trajectory/scrub/types.d.ts +25 -0
- package/dist/trajectory/scrub/types.js +2 -0
- package/dist/trajectory/scrub/types.js.map +1 -0
- package/dist/trajectory/transcript-parsers/types.d.ts +1 -1
- package/dist/trajectory/transcript-parsers/types.js +1 -1
- package/dist/trajectory/transcript-parsers/types.js.map +1 -1
- package/dist/trajectory/transcript-watcher.d.ts +26 -0
- package/dist/trajectory/transcript-watcher.js +33 -0
- package/dist/trajectory/transcript-watcher.js.map +1 -1
- package/dist/tx-retry.d.ts +12 -0
- package/dist/tx-retry.js +41 -12
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/envelope.d.ts +1 -1
- package/dist/types/envelope.js +1 -1
- package/dist/types/envelope.js.map +1 -1
- package/dist/types/payloads/index.d.ts +1 -1
- package/dist/types/payloads/index.js +7 -1
- package/dist/types/payloads/index.js.map +1 -1
- package/dist/types/payloads/portfolio-v0.d.ts +1 -1
- package/dist/types/payloads/portfolio-v0.js +1 -1
- package/dist/types/payloads/portfolio-v0.js.map +1 -1
- package/dist/types/payloads/prediction-apy-v0.d.ts +1 -1
- package/dist/types/payloads/prediction-apy-v0.js +1 -1
- package/dist/types/payloads/prediction-apy-v0.js.map +1 -1
- package/dist/types/payloads/prediction-v0.d.ts +1 -1
- package/dist/types/payloads/prediction-v0.js +1 -1
- package/dist/types/payloads/prediction-v0.js.map +1 -1
- package/dist/types/portfolio.d.ts +1 -1
- package/dist/types/portfolio.js +1 -1
- package/dist/types/portfolio.js.map +1 -1
- package/dist/types/prediction-apy.d.ts +1 -1
- package/dist/types/prediction-apy.js +1 -1
- package/dist/types/prediction-apy.js.map +1 -1
- package/dist/types/prediction.d.ts +1 -1
- package/dist/types/prediction.js +1 -1
- package/dist/types/prediction.js.map +1 -1
- package/dist/types/session-provenance.d.ts +1 -1
- package/dist/types/session-provenance.js +1 -1
- package/dist/types/session-provenance.js.map +1 -1
- package/dist/types/skill-artifact.d.ts +442 -0
- package/dist/types/skill-artifact.js +137 -0
- package/dist/types/skill-artifact.js.map +1 -0
- package/dist/types/task-document.d.ts +315 -1
- package/dist/types/task-document.js +9 -1
- package/dist/types/task-document.js.map +1 -1
- package/dist/types/task-run-read-model.d.ts +21 -0
- package/dist/types/task-run-read-model.js +2 -0
- package/dist/types/task-run-read-model.js.map +1 -0
- package/dist/types/task-run.d.ts +75 -0
- package/dist/types/task-run.js +2 -0
- package/dist/types/task-run.js.map +1 -0
- package/dist/types/task.d.ts +29 -1
- package/dist/types/task.js +1 -1
- package/dist/types/task.js.map +1 -1
- package/dist/types/window.d.ts +1 -1
- package/dist/types/window.js +1 -1
- package/dist/types/window.js.map +1 -1
- package/dist/util/redact-rpc-urls.d.ts +1 -1
- package/dist/util/redact-rpc-urls.js +57 -2
- package/dist/util/redact-rpc-urls.js.map +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/checkpoint.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/checkpoint.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/contracts.d.ts +3 -2
- package/dist/vendor/@jinn-network/sdk/dist/contracts.js +49 -0
- package/dist/vendor/@jinn-network/sdk/dist/jinn-repo.d.ts +44 -0
- package/dist/vendor/@jinn-network/sdk/dist/jinn-repo.js +25 -0
- package/dist/vendor/@jinn-network/sdk/dist/json-schema.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/json-schema.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/jinn-repo.d.ts +38 -0
- package/dist/vendor/@jinn-network/sdk/dist/payloads/jinn-repo.js +22 -0
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/session-derived.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/session-derived.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +109 -2
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +26 -2
- package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/jinn-repo.d.ts +4 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/jinn-repo.js +2 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/swe-rebench-v2.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/package.json +9 -1
- package/docker-compose.yml +3 -2
- package/package.json +43 -28
- package/plugins/jinn-repo-runtime/.claude-plugin/plugin.json +5 -0
- package/plugins/jinn-repo-runtime/.codex-plugin/plugin.json +39 -0
- package/plugins/jinn-repo-runtime/README.md +27 -0
- package/plugins/jinn-repo-runtime/hooks/hooks.json +16 -0
- package/plugins/jinn-repo-runtime/hooks/session-start +73 -0
- package/plugins/jinn-repo-runtime/jinn.plugin.json +11 -0
- package/plugins/jinn-repo-runtime/skills/task/SKILL.md +92 -0
- package/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/plugins/learner/hooks/session-start +30 -1
- package/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/plugins/local-trace-distiller/.mcp.json +8 -0
- package/plugins/local-trace-distiller/README.md +27 -0
- package/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
- package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
- package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +0 -55
- package/deployments/deployment-jinn-mvi-l1-sepolia.json +0 -55
- package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +0 -13
- package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +0 -15
- package/dist/api/peers.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-canonical.d.ts +0 -207
- package/dist/daemon/jinn-claim-loop-canonical.js +0 -296
- package/dist/daemon/jinn-claim-loop-canonical.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-mock.d.ts +0 -61
- package/dist/daemon/jinn-claim-loop-mock.js +0 -122
- package/dist/daemon/jinn-claim-loop-mock.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-wiring.d.ts +0 -33
- package/dist/daemon/jinn-claim-loop-wiring.js +0 -40
- package/dist/daemon/jinn-claim-loop-wiring.js.map +0 -1
- package/dist/daemon/jinn-claim-loop.d.ts +0 -130
- package/dist/daemon/jinn-claim-loop.js +0 -328
- package/dist/daemon/jinn-claim-loop.js.map +0 -1
- package/dist/dashboard/assets/index-CzKxvMcU.css +0 -32
- package/dist/dashboard/assets/index-yVemxHot.js +0 -351
- package/dist/earning/jinn-rewards.js.map +0 -1
- package/dist/scripts/donation-consumption-acceptance.d.ts +0 -85
- package/dist/scripts/donation-consumption-acceptance.js +0 -1382
- package/dist/scripts/donation-consumption-acceptance.js.map +0 -1
- package/dist/x402/acquire.d.ts +0 -17
- package/dist/x402/acquire.js +0 -49
- package/dist/x402/acquire.js.map +0 -1
- package/dist/x402/facilitator.d.ts +0 -11
- package/dist/x402/facilitator.js +0 -52
- package/dist/x402/facilitator.js.map +0 -1
- package/dist/x402/handler.d.ts +0 -27
- package/dist/x402/handler.js +0 -236
- package/dist/x402/handler.js.map +0 -1
- /package/dist/{api/peers.d.ts → daemon/peer-sync.d.ts} +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a held-out slate's `instance_id`s into `SweRebenchV2Task` objects
|
|
3
|
+
* for the `jinn eval` orchestrator (issue #818, AC#1).
|
|
4
|
+
*
|
|
5
|
+
* A slate stores only `instance_id`s (`_swe-rebench-v2-held-out-slate.ts`). The
|
|
6
|
+
* evaluator grades against the full HuggingFace row, fetched by
|
|
7
|
+
* `(hf_dataset, hf_split, instance_id)`. The `HfRow` does NOT echo
|
|
8
|
+
* `hf_dataset`/`hf_split` (see `swe-rebench-v2-evaluator/index.ts`), so the
|
|
9
|
+
* caller supplies the slate-level dataset+split as args; the resolver verifies
|
|
10
|
+
* each id exists by fetching its row and returns the `{ task, row }` pair so the
|
|
11
|
+
* orchestrator reuses the row at grade time (avoids a second fetch).
|
|
12
|
+
*
|
|
13
|
+
* No retry logic here — `HttpHfFetcher` owns retries. A fetcher throw for any id
|
|
14
|
+
* propagates loudly (a missing slate instance is a hard error, never a silent
|
|
15
|
+
* drop).
|
|
16
|
+
*/
|
|
17
|
+
import { type SweRebenchV2Task } from '../vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js';
|
|
18
|
+
import type { HfFetcher, HfRow } from '../harnesses/impls/swe-rebench-v2-evaluator/index.js';
|
|
19
|
+
import type { PoolTask } from '../solver-types/_swe-rebench-v2-pool.js';
|
|
20
|
+
export interface ResolvedSlateTask {
|
|
21
|
+
task: SweRebenchV2Task;
|
|
22
|
+
row: HfRow;
|
|
23
|
+
}
|
|
24
|
+
export declare function resolveSlateTasks(args: {
|
|
25
|
+
/**
|
|
26
|
+
* The pool tasks for this slate group, each carrying the real
|
|
27
|
+
* `problem_statement` / `base_commit` / `language` the agent run needs to
|
|
28
|
+
* solve the instance (the slate stores only ids; the pool is the source of
|
|
29
|
+
* these fields).
|
|
30
|
+
*/
|
|
31
|
+
poolTasks: PoolTask[];
|
|
32
|
+
hf_dataset: string;
|
|
33
|
+
hf_split: string;
|
|
34
|
+
fetcher: HfFetcher;
|
|
35
|
+
}): Promise<ResolvedSlateTask[]>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a held-out slate's `instance_id`s into `SweRebenchV2Task` objects
|
|
3
|
+
* for the `jinn eval` orchestrator (issue #818, AC#1).
|
|
4
|
+
*
|
|
5
|
+
* A slate stores only `instance_id`s (`_swe-rebench-v2-held-out-slate.ts`). The
|
|
6
|
+
* evaluator grades against the full HuggingFace row, fetched by
|
|
7
|
+
* `(hf_dataset, hf_split, instance_id)`. The `HfRow` does NOT echo
|
|
8
|
+
* `hf_dataset`/`hf_split` (see `swe-rebench-v2-evaluator/index.ts`), so the
|
|
9
|
+
* caller supplies the slate-level dataset+split as args; the resolver verifies
|
|
10
|
+
* each id exists by fetching its row and returns the `{ task, row }` pair so the
|
|
11
|
+
* orchestrator reuses the row at grade time (avoids a second fetch).
|
|
12
|
+
*
|
|
13
|
+
* No retry logic here — `HttpHfFetcher` owns retries. A fetcher throw for any id
|
|
14
|
+
* propagates loudly (a missing slate instance is a hard error, never a silent
|
|
15
|
+
* drop).
|
|
16
|
+
*/
|
|
17
|
+
import { SweRebenchV2TaskSchema } from '../vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js';
|
|
18
|
+
export async function resolveSlateTasks(args) {
|
|
19
|
+
const tasks = [...args.poolTasks].sort((a, b) => a.instance_id.localeCompare(b.instance_id));
|
|
20
|
+
const out = [];
|
|
21
|
+
for (const poolTask of tasks) {
|
|
22
|
+
const row = await args.fetcher.fetchTaskRow({
|
|
23
|
+
hf_dataset: args.hf_dataset,
|
|
24
|
+
hf_split: args.hf_split,
|
|
25
|
+
instance_id: poolTask.instance_id,
|
|
26
|
+
});
|
|
27
|
+
out.push({ task: buildTask(poolTask, args.hf_dataset, args.hf_split, row), row });
|
|
28
|
+
}
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Construct the `SweRebenchV2Task` the orchestrator hands to the harness +
|
|
33
|
+
* evaluator. The agent run needs the real `problem_statement` (what to solve)
|
|
34
|
+
* and `base_commit` (the repo state to check out) — these are threaded through
|
|
35
|
+
* from the pool task (the generator's mapping in `swe-rebench-v2.ts`).
|
|
36
|
+
* `hf_dataset`/`hf_split` are the evaluator's row-fetch key; `repo` comes from
|
|
37
|
+
* the fetched row. A pool task missing an optional field falls back the same
|
|
38
|
+
* way the generator does, so the object stays schema-valid.
|
|
39
|
+
*/
|
|
40
|
+
function buildTask(poolTask, hf_dataset, hf_split, row) {
|
|
41
|
+
const language = SweRebenchV2TaskSchema.shape.language.safeParse(poolTask.language);
|
|
42
|
+
return {
|
|
43
|
+
schemaVersion: 'swe-rebench-v2.v1',
|
|
44
|
+
instance_id: poolTask.instance_id,
|
|
45
|
+
repo: row.repo,
|
|
46
|
+
base_commit: poolTask.base_commit ?? '0'.repeat(40),
|
|
47
|
+
language: language.success ? language.data : 'python',
|
|
48
|
+
problem_statement: poolTask.problem_statement ?? '',
|
|
49
|
+
interface: poolTask.interface ?? '',
|
|
50
|
+
hf_dataset,
|
|
51
|
+
hf_split,
|
|
52
|
+
deadline_unix: 1,
|
|
53
|
+
round_month: hf_split.replace('_', '-'),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=resolve-slate-tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-slate-tasks.js","sourceRoot":"","sources":["../../src/eval/resolve-slate-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,sBAAsB,EAAyB,MAAM,6CAA6C,CAAC;AAS5G,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAWvC;IACC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC1C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,SAAS,CAChB,QAAkB,EAClB,UAAkB,EAClB,QAAgB,EAChB,GAAU;IAEV,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpF,OAAO;QACL,aAAa,EAAE,mBAAmB;QAClC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;QACrD,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,IAAI,EAAE;QACnD,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,EAAE;QACnC,UAAU;QACV,QAAQ;QACR,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Held-out screening's authoritative "already trained-on" exclusion source (#986).
|
|
3
|
+
*
|
|
4
|
+
* Returns the set of swe-rebench-v2 `instance_id`s that have been ATTEMPTED on
|
|
5
|
+
* the network for a SolverNet — any verdict envelope, passed OR failed,
|
|
6
|
+
* cross-operator. An attempted instance was executed by an operator, so the
|
|
7
|
+
* learner trained on it; holding it out later would make a trained-checkpoint
|
|
8
|
+
* pass count as memorization, not generalization.
|
|
9
|
+
*
|
|
10
|
+
* Why the indexer and not the local generator-state: the local ledger only
|
|
11
|
+
* reflects THIS box's posting and can be stale (a different active generator —
|
|
12
|
+
* e.g. a hosted operator — posts to its own ledger). The indexer's
|
|
13
|
+
* `verdictEnvelopeMeta` is the cross-operator, current record. (The on-chain
|
|
14
|
+
* task/attempt tables carry no instance_id; only the indexer's IPFS enrichment
|
|
15
|
+
* resolves it — same backing as `DiscoveryAPI.getInstanceSuccessCounts`, minus
|
|
16
|
+
* the `actualPassed: true` filter so failed attempts count too.)
|
|
17
|
+
*
|
|
18
|
+
* Throws on indexer failure — callers MUST abort rather than screen against an
|
|
19
|
+
* unknown attempted set, because a missing exclusion can silently contaminate
|
|
20
|
+
* the exam (the whole point of held-out discipline).
|
|
21
|
+
*/
|
|
22
|
+
export declare function fetchAttemptedInstanceIds(discoveryUrl: string, manifestCid: string, fetchImpl?: typeof fetch): Promise<Set<string>>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Held-out screening's authoritative "already trained-on" exclusion source (#986).
|
|
3
|
+
*
|
|
4
|
+
* Returns the set of swe-rebench-v2 `instance_id`s that have been ATTEMPTED on
|
|
5
|
+
* the network for a SolverNet — any verdict envelope, passed OR failed,
|
|
6
|
+
* cross-operator. An attempted instance was executed by an operator, so the
|
|
7
|
+
* learner trained on it; holding it out later would make a trained-checkpoint
|
|
8
|
+
* pass count as memorization, not generalization.
|
|
9
|
+
*
|
|
10
|
+
* Why the indexer and not the local generator-state: the local ledger only
|
|
11
|
+
* reflects THIS box's posting and can be stale (a different active generator —
|
|
12
|
+
* e.g. a hosted operator — posts to its own ledger). The indexer's
|
|
13
|
+
* `verdictEnvelopeMeta` is the cross-operator, current record. (The on-chain
|
|
14
|
+
* task/attempt tables carry no instance_id; only the indexer's IPFS enrichment
|
|
15
|
+
* resolves it — same backing as `DiscoveryAPI.getInstanceSuccessCounts`, minus
|
|
16
|
+
* the `actualPassed: true` filter so failed attempts count too.)
|
|
17
|
+
*
|
|
18
|
+
* Throws on indexer failure — callers MUST abort rather than screen against an
|
|
19
|
+
* unknown attempted set, because a missing exclusion can silently contaminate
|
|
20
|
+
* the exam (the whole point of held-out discipline).
|
|
21
|
+
*/
|
|
22
|
+
const ATTEMPTED_QUERY = `
|
|
23
|
+
query InstanceAttempted($cid: String!, $limit: Int!, $after: String) {
|
|
24
|
+
verdictEnvelopeMetas(
|
|
25
|
+
where: {
|
|
26
|
+
solverNetManifestCid: $cid,
|
|
27
|
+
solverType_starts_with: "swe-rebench-v2",
|
|
28
|
+
enrichmentStatus: "ok",
|
|
29
|
+
instanceId_not: ""
|
|
30
|
+
},
|
|
31
|
+
limit: $limit,
|
|
32
|
+
after: $after,
|
|
33
|
+
orderBy: "enrichedAtBlock",
|
|
34
|
+
orderDirection: "asc"
|
|
35
|
+
) {
|
|
36
|
+
items { instanceId }
|
|
37
|
+
pageInfo { hasNextPage endCursor }
|
|
38
|
+
}
|
|
39
|
+
}`;
|
|
40
|
+
export async function fetchAttemptedInstanceIds(discoveryUrl, manifestCid, fetchImpl = fetch) {
|
|
41
|
+
const gqlUrl = discoveryUrl.endsWith('/graphql') ? discoveryUrl : `${discoveryUrl.replace(/\/$/, '')}/graphql`;
|
|
42
|
+
const ids = new Set();
|
|
43
|
+
let cursor = null;
|
|
44
|
+
const MAX_PAGES = 20;
|
|
45
|
+
const PAGE_LIMIT = 1000;
|
|
46
|
+
for (let page = 0; page < MAX_PAGES; page++) {
|
|
47
|
+
const res = await fetchImpl(gqlUrl, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: { 'content-type': 'application/json' },
|
|
50
|
+
body: JSON.stringify({ query: ATTEMPTED_QUERY, variables: { cid: manifestCid, limit: PAGE_LIMIT, after: cursor } }),
|
|
51
|
+
});
|
|
52
|
+
if (!res.ok) {
|
|
53
|
+
throw new Error(`held-out screening: indexer attempted-ids query failed (HTTP ${res.status}) at ${gqlUrl}`);
|
|
54
|
+
}
|
|
55
|
+
const json = (await res.json());
|
|
56
|
+
if (json.errors) {
|
|
57
|
+
throw new Error(`held-out screening: indexer attempted-ids query errors: ${JSON.stringify(json.errors).slice(0, 300)}`);
|
|
58
|
+
}
|
|
59
|
+
const conn = json.data?.verdictEnvelopeMetas;
|
|
60
|
+
for (const item of conn?.items ?? []) {
|
|
61
|
+
if (item.instanceId)
|
|
62
|
+
ids.add(item.instanceId);
|
|
63
|
+
}
|
|
64
|
+
const pageInfo = conn?.pageInfo;
|
|
65
|
+
if (!pageInfo?.hasNextPage || !pageInfo.endCursor)
|
|
66
|
+
break;
|
|
67
|
+
cursor = pageInfo.endCursor;
|
|
68
|
+
}
|
|
69
|
+
return ids;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=screen-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-discovery.js","sourceRoot":"","sources":["../../src/eval/screen-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;EAiBtB,CAAC;AAYH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,YAAoB,EACpB,WAAmB,EACnB,YAA0B,KAAK;IAE/B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC;IAC/G,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC;IAExB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;SACpH,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gEAAgE,GAAG,CAAC,MAAM,QAAQ,MAAM,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,2DAA2D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1H,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,UAAU;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,QAAQ,CAAC,SAAS;YAAE,MAAM;QACzD,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC9B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resumability store for held-out screening (#986).
|
|
3
|
+
*
|
|
4
|
+
* A real exam cut runs base R-runs + a prover over dozens of candidates — many
|
|
5
|
+
* hours of inference. This store persists each candidate's {@link ScreenMeasurement}
|
|
6
|
+
* so an interrupted run (rate limit, crash, disk) resumes instead of restarting:
|
|
7
|
+
* re-running the same command replays cached candidates for free and the
|
|
8
|
+
* `maxCandidates` budget bounds only the NEW work, so a long screen proceeds in
|
|
9
|
+
* budget-sized chunks.
|
|
10
|
+
*
|
|
11
|
+
* Keyed by a `signature` of the measurement-determining config (base model,
|
|
12
|
+
* prover, R, eval-semantics version). A signature mismatch on load → fresh start:
|
|
13
|
+
* cached measurements are only valid for the exact config that produced them
|
|
14
|
+
* (e.g. changing R changes the 0/R determination; a stronger base model changes
|
|
15
|
+
* pass/fail). Stored at `<stateDir>/held-out-screen-progress.json`.
|
|
16
|
+
*/
|
|
17
|
+
import type { ScreenMeasurement } from './screen.js';
|
|
18
|
+
export declare class ScreenProgressStore {
|
|
19
|
+
private readonly file;
|
|
20
|
+
private readonly signature;
|
|
21
|
+
private data;
|
|
22
|
+
constructor(opts: {
|
|
23
|
+
stateDir: string;
|
|
24
|
+
signature: string;
|
|
25
|
+
});
|
|
26
|
+
private load;
|
|
27
|
+
/** Cached measurement for this instance under the current signature, or undefined. */
|
|
28
|
+
get(instance_id: string): ScreenMeasurement | undefined;
|
|
29
|
+
/** Persist a freshly-measured candidate (atomic-enough: whole-file rewrite). */
|
|
30
|
+
record(instance_id: string, m: ScreenMeasurement): void;
|
|
31
|
+
/** Number of candidates already measured under the current signature. */
|
|
32
|
+
get size(): number;
|
|
33
|
+
}
|
|
34
|
+
/** Build the cache signature from the measurement-determining config. */
|
|
35
|
+
export declare function screenSignature(args: {
|
|
36
|
+
baseModel: string;
|
|
37
|
+
proverHarness: string;
|
|
38
|
+
proverModel: string;
|
|
39
|
+
R: number;
|
|
40
|
+
evalSemanticsVersion: string;
|
|
41
|
+
}): string;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resumability store for held-out screening (#986).
|
|
3
|
+
*
|
|
4
|
+
* A real exam cut runs base R-runs + a prover over dozens of candidates — many
|
|
5
|
+
* hours of inference. This store persists each candidate's {@link ScreenMeasurement}
|
|
6
|
+
* so an interrupted run (rate limit, crash, disk) resumes instead of restarting:
|
|
7
|
+
* re-running the same command replays cached candidates for free and the
|
|
8
|
+
* `maxCandidates` budget bounds only the NEW work, so a long screen proceeds in
|
|
9
|
+
* budget-sized chunks.
|
|
10
|
+
*
|
|
11
|
+
* Keyed by a `signature` of the measurement-determining config (base model,
|
|
12
|
+
* prover, R, eval-semantics version). A signature mismatch on load → fresh start:
|
|
13
|
+
* cached measurements are only valid for the exact config that produced them
|
|
14
|
+
* (e.g. changing R changes the 0/R determination; a stronger base model changes
|
|
15
|
+
* pass/fail). Stored at `<stateDir>/held-out-screen-progress.json`.
|
|
16
|
+
*/
|
|
17
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
18
|
+
import { dirname, join } from 'node:path';
|
|
19
|
+
const SCHEMA_VERSION = 'held-out-screen-progress.v1';
|
|
20
|
+
export class ScreenProgressStore {
|
|
21
|
+
file;
|
|
22
|
+
signature;
|
|
23
|
+
data;
|
|
24
|
+
constructor(opts) {
|
|
25
|
+
this.file = join(opts.stateDir, 'held-out-screen-progress.json');
|
|
26
|
+
this.signature = opts.signature;
|
|
27
|
+
this.data = this.load();
|
|
28
|
+
}
|
|
29
|
+
load() {
|
|
30
|
+
try {
|
|
31
|
+
const raw = JSON.parse(readFileSync(this.file, 'utf8'));
|
|
32
|
+
if (raw?.schemaVersion === SCHEMA_VERSION && raw.signature === this.signature && raw.measurements) {
|
|
33
|
+
return raw;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* absent or corrupt → fresh */
|
|
38
|
+
}
|
|
39
|
+
return { schemaVersion: SCHEMA_VERSION, signature: this.signature, measurements: {} };
|
|
40
|
+
}
|
|
41
|
+
/** Cached measurement for this instance under the current signature, or undefined. */
|
|
42
|
+
get(instance_id) {
|
|
43
|
+
return this.data.measurements[instance_id];
|
|
44
|
+
}
|
|
45
|
+
/** Persist a freshly-measured candidate (atomic-enough: whole-file rewrite). */
|
|
46
|
+
record(instance_id, m) {
|
|
47
|
+
this.data.measurements[instance_id] = m;
|
|
48
|
+
mkdirSync(dirname(this.file), { recursive: true });
|
|
49
|
+
writeFileSync(this.file, `${JSON.stringify(this.data, null, 2)}\n`);
|
|
50
|
+
}
|
|
51
|
+
/** Number of candidates already measured under the current signature. */
|
|
52
|
+
get size() {
|
|
53
|
+
return Object.keys(this.data.measurements).length;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Build the cache signature from the measurement-determining config. */
|
|
57
|
+
export function screenSignature(args) {
|
|
58
|
+
return `base=${args.baseModel}|prover=${args.proverHarness}:${args.proverModel}|R=${args.R}|sem=${args.evalSemanticsVersion}`;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=screen-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-progress.js","sourceRoot":"","sources":["../../src/eval/screen-progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,cAAc,GAAG,6BAAsC,CAAC;AAS9D,MAAM,OAAO,mBAAmB;IACb,IAAI,CAAS;IACb,SAAS,CAAS;IAC3B,IAAI,CAAe;IAE3B,YAAY,IAA6C;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAEO,IAAI;QACV,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiB,CAAC;YACxE,IAAI,GAAG,EAAE,aAAa,KAAK,cAAc,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBAClG,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QACD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACxF,CAAC;IAED,sFAAsF;IACtF,GAAG,CAAC,WAAmB;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,gFAAgF;IAChF,MAAM,CAAC,WAAmB,EAAE,CAAoB;QAC9C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,yEAAyE;IACzE,IAAI,IAAI;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IACpD,CAAC;CACF;AAED,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAAC,IAM/B;IACC,OAAO,QAAQ,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChI,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type ScreenResult } from './screen.js';
|
|
2
|
+
export interface ScreenRunOptions {
|
|
3
|
+
R: number;
|
|
4
|
+
heldOutCount: number;
|
|
5
|
+
maxCandidates: number;
|
|
6
|
+
perRepoCap: number;
|
|
7
|
+
/** Prover agent harness: `codex` (default) or `claude-code` (e.g. an Opus prover
|
|
8
|
+
* via the working Claude auth — useful when codex is rate-limited). */
|
|
9
|
+
proverHarness?: 'codex' | 'claude-code';
|
|
10
|
+
/** Prover model: `codexModel` for the codex harness, `claudeModel` for the
|
|
11
|
+
* claude-code harness (defaults to `opus` there). */
|
|
12
|
+
proverModel?: string;
|
|
13
|
+
/** Restrict candidates to these instance ids (else whole gradeable pool). */
|
|
14
|
+
instanceIds?: string[];
|
|
15
|
+
/** Restrict candidates to one repo (org prefix), e.g. `tobymao`. */
|
|
16
|
+
repo?: string;
|
|
17
|
+
configPath?: string;
|
|
18
|
+
log?: (msg: string) => void;
|
|
19
|
+
}
|
|
20
|
+
export interface ScreenRunSummary {
|
|
21
|
+
result: ScreenResult;
|
|
22
|
+
baseCodeDigest: string;
|
|
23
|
+
slatePath: string;
|
|
24
|
+
reportPath: string;
|
|
25
|
+
heldOutCount: number;
|
|
26
|
+
/** Base-failing candidates whose prover run returned no gradeable result
|
|
27
|
+
* (excluded as no-headroom) — a signal the prover may be unavailable. */
|
|
28
|
+
proverUnscorable: number;
|
|
29
|
+
}
|
|
30
|
+
export declare function runScreenHeldOut(opts: ScreenRunOptions): Promise<ScreenRunSummary>;
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join, dirname } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { loadConfig } from '../config.js';
|
|
6
|
+
import { Store } from '../store/store.js';
|
|
7
|
+
import { hashImplStateDir } from '../harnesses/freeze.js';
|
|
8
|
+
import { LearnerHarness } from '../harnesses/impls/learner/harness.js';
|
|
9
|
+
import { ClaudeCodeHarnessAdapter } from '../harnesses/impls/learner/adapters/claude-code.js';
|
|
10
|
+
import { CodexCodeHarnessAdapter } from '../harnesses/impls/learner/adapters/codex-code.js';
|
|
11
|
+
import { CODEX_HARNESS } from '../harnesses/names.js';
|
|
12
|
+
import { runHarnessForEval, resolveRuntimePluginsForSolverType } from './eval-harness-run.js';
|
|
13
|
+
import { corpusEnvFromConfig } from '../cli/commands/eval.js';
|
|
14
|
+
import { loadSweRebenchV2Pool, defaultStateDir, getSweRebenchV2ValidatedPoolStore, } from '../solver-types/swe-rebench-v2.js';
|
|
15
|
+
import { PoolCacheStore, loadPoolWithCacheFallback } from '../solver-types/_swe-rebench-v2-pool-cache.js';
|
|
16
|
+
import { validatePoolInstances, EVAL_SEMANTICS_VERSION, } from '../solver-types/_swe-rebench-v2-validated-pool.js';
|
|
17
|
+
import { resolveSlateTasks } from './resolve-slate-tasks.js';
|
|
18
|
+
import { loadActiveHeldOutSlateIds, ACTIVE_HELD_OUT_SLATE_VERSIONS, loadHeldOutSlate, } from '../solver-types/_swe-rebench-v2-held-out-slate.js';
|
|
19
|
+
import { GeneratorStateStore } from '../solver-types/_swe-rebench-v2-state.js';
|
|
20
|
+
import { fetchAttemptedInstanceIds } from './screen-discovery.js';
|
|
21
|
+
import { DEFAULT_TESTNET_DISCOVERY_URL } from '../config.js';
|
|
22
|
+
import { solverTypeFromJoinedContract } from '../solver-nets/registry.js';
|
|
23
|
+
import { SweRebenchV2Evaluator } from '../harnesses/impls/swe-rebench-v2-evaluator/index.js';
|
|
24
|
+
import { HttpHfFetcher } from '../harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js';
|
|
25
|
+
import { PythonEvalRunner } from '../harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js';
|
|
26
|
+
import { readEnabledState, defaultSweRebenchV2EvaluatorImplStateDir } from '../harnesses/impls/swe-rebench-v2-evaluator/harness.js';
|
|
27
|
+
import { stratifyByRepo, screenBaseFailures, buildV2SlateFile, } from './screen.js';
|
|
28
|
+
import { ScreenProgressStore, screenSignature } from './screen-progress.js';
|
|
29
|
+
const DISPATCH_SOLVER_TYPE = 'swe-rebench-v2.v1';
|
|
30
|
+
const SLATE_VERSION = 'v2';
|
|
31
|
+
const RUN_BUDGET_MS = 3_600_000;
|
|
32
|
+
/** dist/src parity: the shipped slate JSON lives next to the compiled module. */
|
|
33
|
+
function slatesDir() {
|
|
34
|
+
return join(dirname(fileURLToPath(import.meta.url)), '..', 'solver-types', 'slates');
|
|
35
|
+
}
|
|
36
|
+
export async function runScreenHeldOut(opts) {
|
|
37
|
+
const log = opts.log ?? (() => { });
|
|
38
|
+
const config = loadConfig(opts.configPath);
|
|
39
|
+
// Precondition: evaluator enabled (upstream repo cloned).
|
|
40
|
+
const enabled = readEnabledState(defaultSweRebenchV2EvaluatorImplStateDir());
|
|
41
|
+
if (!enabled) {
|
|
42
|
+
throw new Error('swe-rebench-v2 evaluator not enabled — run `jinn harnesses enable swe-rebench-v2-evaluator` first');
|
|
43
|
+
}
|
|
44
|
+
const upstreamRepoDir = enabled.upstreamRepoDir;
|
|
45
|
+
const stateDir = process.env['JINN_SWE_REBENCH_V2_STATE_DIR'] ?? defaultStateDir();
|
|
46
|
+
const fetcher = new HttpHfFetcher();
|
|
47
|
+
const evaluator = new SweRebenchV2Evaluator({ fetcher, runner: new PythonEvalRunner({ upstreamRepoDir }) });
|
|
48
|
+
const validatedStore = getSweRebenchV2ValidatedPoolStore();
|
|
49
|
+
const runtimePlugins = await resolveRuntimePluginsForSolverType(DISPATCH_SOLVER_TYPE, config.joinedSolverNets);
|
|
50
|
+
// Common adapter wiring (mirrors buildEvalHarness in cli/commands/eval.ts).
|
|
51
|
+
const daemonApiToken = process.env['DAEMON_API_TOKEN']?.trim();
|
|
52
|
+
const corpusEnv = corpusEnvFromConfig(config);
|
|
53
|
+
const common = {
|
|
54
|
+
claudePath: config.claudePath ?? 'claude',
|
|
55
|
+
storePath: config.dbPath,
|
|
56
|
+
daemonApiUrl: `http://127.0.0.1:${config.apiPort}`,
|
|
57
|
+
...(daemonApiToken ? { daemonApiToken } : {}),
|
|
58
|
+
...(corpusEnv ? { corpusEnv } : {}),
|
|
59
|
+
};
|
|
60
|
+
const baseHarness = new LearnerHarness({
|
|
61
|
+
adapter: new ClaudeCodeHarnessAdapter({ ...common, claudeModel: config.claudeModel }),
|
|
62
|
+
claudePath: common.claudePath,
|
|
63
|
+
});
|
|
64
|
+
// Prover harness: codex (default) or claude-code (e.g. an Opus prover via the
|
|
65
|
+
// working Claude auth, sidestepping a codex rate limit; same-family Haiku→Opus
|
|
66
|
+
// is a clean capability ladder for "proven headroom").
|
|
67
|
+
const proverKind = opts.proverHarness ?? 'codex';
|
|
68
|
+
const proverHarness = proverKind === 'claude-code'
|
|
69
|
+
? new LearnerHarness({
|
|
70
|
+
adapter: new ClaudeCodeHarnessAdapter({ ...common, claudeModel: opts.proverModel ?? 'opus' }),
|
|
71
|
+
claudePath: common.claudePath,
|
|
72
|
+
})
|
|
73
|
+
: new LearnerHarness({
|
|
74
|
+
name: CODEX_HARNESS,
|
|
75
|
+
adapter: new CodexCodeHarnessAdapter({ ...common, ...(opts.proverModel ? { codexModel: opts.proverModel } : {}) }),
|
|
76
|
+
claudePath: common.claudePath,
|
|
77
|
+
...(config.codexPath !== undefined ? { codexPath: config.codexPath } : {}),
|
|
78
|
+
});
|
|
79
|
+
// Candidate pool (whole gradeable pool by default; scopeable).
|
|
80
|
+
const cacheResult = await loadPoolWithCacheFallback({
|
|
81
|
+
loadPool: loadSweRebenchV2Pool, cache: new PoolCacheStore({ stateDir }), currentPool: [],
|
|
82
|
+
});
|
|
83
|
+
let pool = cacheResult.pool;
|
|
84
|
+
if (pool.length === 0)
|
|
85
|
+
throw new Error(`SWE-rebench v2 pool empty${cacheResult.error ? ` (${cacheResult.error.message})` : ''}`);
|
|
86
|
+
// Held-out discipline (#986): draw the exam from the never-trained, never-held-out
|
|
87
|
+
// remainder. Union three exclusion sources:
|
|
88
|
+
// - active held-out slate (would overlap an existing exam);
|
|
89
|
+
// - already-ATTEMPTED on-network (indexer verdictEnvelopeMeta, any verdict,
|
|
90
|
+
// cross-operator, CURRENT) — the authoritative "the learner trained on it"
|
|
91
|
+
// signal; and
|
|
92
|
+
// - this box's posted ledger (belt — may be STALE when another generator is
|
|
93
|
+
// the active poster, e.g. a hosted operator; hence the indexer is the truth).
|
|
94
|
+
// A trained instance held out later would make a trained-checkpoint pass count
|
|
95
|
+
// as memorization, not generalization.
|
|
96
|
+
const heldOutIds = loadActiveHeldOutSlateIds(DISPATCH_SOLVER_TYPE, ACTIVE_HELD_OUT_SLATE_VERSIONS);
|
|
97
|
+
const postedIds = await new GeneratorStateStore({ stateDir }).postedInstanceIds();
|
|
98
|
+
let attemptedIds = new Set();
|
|
99
|
+
const discoveryUrl = config.discovery?.url?.trim()
|
|
100
|
+
|| (config.network === 'testnet' ? DEFAULT_TESTNET_DISCOVERY_URL : undefined);
|
|
101
|
+
const joinedNet = Object.values(config.joinedSolverNets ?? {}).find((n) => solverTypeFromJoinedContract(n) === DISPATCH_SOLVER_TYPE);
|
|
102
|
+
if (discoveryUrl && joinedNet?.manifestCid) {
|
|
103
|
+
attemptedIds = await fetchAttemptedInstanceIds(discoveryUrl, joinedNet.manifestCid);
|
|
104
|
+
log(`[screen] indexer: ${attemptedIds.size} instance(s) already attempted on-network (authoritative, cross-operator) → excluded`);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
log('[screen] WARNING: no discovery URL / manifestCid — cannot exclude already-attempted instances; relying on the local posted ledger, which may be stale');
|
|
108
|
+
}
|
|
109
|
+
const excludeIds = new Set([...heldOutIds, ...postedIds, ...attemptedIds]);
|
|
110
|
+
if (opts.instanceIds?.length) {
|
|
111
|
+
// Explicit operator override — screen exactly these, but warn if any are
|
|
112
|
+
// already contaminated (attempted/posted/held-out) so an intentional pick is informed.
|
|
113
|
+
const want = new Set(opts.instanceIds);
|
|
114
|
+
pool = pool.filter((t) => want.has(t.instance_id));
|
|
115
|
+
const tainted = pool.filter((t) => excludeIds.has(t.instance_id)).map((t) => t.instance_id);
|
|
116
|
+
if (tainted.length > 0) {
|
|
117
|
+
log(`[screen] WARNING: ${tainted.length} explicitly-named instance(s) are already attempted/posted/held-out (NOT clean held-out candidates): ${tainted.join(', ')}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
if (opts.repo)
|
|
122
|
+
pool = pool.filter((t) => t.instance_id.startsWith(`${opts.repo}__`));
|
|
123
|
+
const before = pool.length;
|
|
124
|
+
pool = pool.filter((t) => !excludeIds.has(t.instance_id));
|
|
125
|
+
// Restrict to ALREADY-VALIDATED-SCORABLE candidates (#986): the never-validated
|
|
126
|
+
// tail is mostly not-gradeable (~90% deeper in the pool), so base-screening it
|
|
127
|
+
// wastes inference. Discovery of gradeability is `validate-pool`'s job; the
|
|
128
|
+
// screen selects held-out FROM the scorable set. Falls back to the full
|
|
129
|
+
// remainder only when no validation data exists yet (and warns).
|
|
130
|
+
const scorableIds = await validatedStore.getScorableIds(EVAL_SEMANTICS_VERSION);
|
|
131
|
+
if (scorableIds) {
|
|
132
|
+
const beforeScorable = pool.length;
|
|
133
|
+
pool = pool.filter((t) => scorableIds.has(t.instance_id));
|
|
134
|
+
log(`[screen] candidate pool ${before} → ${beforeScorable} (excluded ${excludeIds.size}: ${heldOutIds.size} held-out ∪ ${postedIds.size} posted ∪ ${attemptedIds.size} attempted) → ${pool.length} validated-scorable (run validate-pool to grow this)`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
log(`[screen] WARNING: no validated-scorable data — screening the full ${pool.length}-task remainder (mostly not-gradeable; run validate-pool first for efficiency)`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const candidates = stratifyByRepo(pool);
|
|
141
|
+
log(`[screen] ${candidates.length} candidate(s) after stratification`);
|
|
142
|
+
// Resolve a single instance to the {task,row} the harness + grader need.
|
|
143
|
+
const byId = new Map(pool.map((t) => [t.instance_id, t]));
|
|
144
|
+
async function runOnce(harness, poolTask) {
|
|
145
|
+
const implStateDir = mkdtempSync(join(tmpdir(), 'jinn-screen-state-'));
|
|
146
|
+
// Track which stage we're in so an unscorable result names its cause (#476
|
|
147
|
+
// excludes infra failures from the denominator — but it must be diagnosable,
|
|
148
|
+
// not an opaque black box).
|
|
149
|
+
let stage = 'resolve';
|
|
150
|
+
try {
|
|
151
|
+
const [resolved] = await resolveSlateTasks({
|
|
152
|
+
poolTasks: [poolTask], hf_dataset: poolTask.hf_dataset, hf_split: poolTask.hf_split, fetcher,
|
|
153
|
+
});
|
|
154
|
+
if (!resolved)
|
|
155
|
+
return { passed: null, unscorableReason: 'resolve: instance not in pool' };
|
|
156
|
+
const task = {
|
|
157
|
+
id: poolTask.instance_id,
|
|
158
|
+
description: resolved.task.problem_statement,
|
|
159
|
+
role: 'restoration',
|
|
160
|
+
solverType: DISPATCH_SOLVER_TYPE,
|
|
161
|
+
spec: resolved.task,
|
|
162
|
+
window: { startTs: 0, endTs: Date.now() + RUN_BUDGET_MS },
|
|
163
|
+
};
|
|
164
|
+
stage = 'harness';
|
|
165
|
+
const run = await runHarnessForEval({
|
|
166
|
+
harness, task, solverType: DISPATCH_SOLVER_TYPE, runtimePlugins, implStateDir, mode: 'frozen',
|
|
167
|
+
});
|
|
168
|
+
if (run.violation)
|
|
169
|
+
return { passed: null, unscorableReason: 'harness: freeze-fence violation' };
|
|
170
|
+
if (!run.solution)
|
|
171
|
+
return { passed: null, unscorableReason: 'harness: no solution produced' };
|
|
172
|
+
stage = 'grade';
|
|
173
|
+
const verdict = await evaluator.grade({
|
|
174
|
+
task: resolved.task,
|
|
175
|
+
solutionPayload: { schemaVersion: 'swe-rebench-v2-solution.v1', patch: run.solution.patch },
|
|
176
|
+
row: resolved.row,
|
|
177
|
+
});
|
|
178
|
+
return { passed: verdict.passed_match };
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
// Any harness/grader/infra failure ⇒ unscorable, never a fail (#476). Name
|
|
182
|
+
// the stage + error so the exclusion is diagnosable. An "agent produced no
|
|
183
|
+
// patch" throw is flagged distinctly from a true infra/grader error.
|
|
184
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
185
|
+
const reason = /produced no\b|no .*patch/i.test(msg)
|
|
186
|
+
? `${stage}: agent produced no patch`
|
|
187
|
+
: `${stage}-error: ${msg.slice(0, 200)}`;
|
|
188
|
+
return { passed: null, unscorableReason: reason };
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
rmSync(implStateDir, { recursive: true, force: true });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const emptyBaseDir = mkdtempSync(join(tmpdir(), 'jinn-screen-base-'));
|
|
195
|
+
const hashOpts = baseHarness.freezeStateHashIgnore?.length
|
|
196
|
+
? { ignoreRelPaths: [...baseHarness.freezeStateHashIgnore] } : undefined;
|
|
197
|
+
const baseCodeDigest = `sha256:${await hashImplStateDir(emptyBaseDir, hashOpts)}`;
|
|
198
|
+
rmSync(emptyBaseDir, { recursive: true, force: true });
|
|
199
|
+
// Resumability: cache each candidate's measurement under a config signature so
|
|
200
|
+
// an interrupted run resumes (re-run the same command). The base policy is fixed
|
|
201
|
+
// (empty impl-state) so its measurement is stable; the signature invalidates the
|
|
202
|
+
// cache if the base model / prover / R / semantics change.
|
|
203
|
+
const proverModelLabel = opts.proverModel ?? (proverKind === 'claude-code' ? 'opus' : 'codex-default');
|
|
204
|
+
const progress = new ScreenProgressStore({
|
|
205
|
+
stateDir,
|
|
206
|
+
signature: screenSignature({
|
|
207
|
+
baseModel: config.claudeModel, proverHarness: proverKind, proverModel: proverModelLabel,
|
|
208
|
+
R: opts.R, evalSemanticsVersion: EVAL_SEMANTICS_VERSION,
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
if (progress.size > 0)
|
|
212
|
+
log(`[screen] resuming: ${progress.size} candidate(s) already measured (cached) for this config`);
|
|
213
|
+
const deps = {
|
|
214
|
+
log,
|
|
215
|
+
getCachedMeasurement: (id) => progress.get(id),
|
|
216
|
+
recordMeasurement: (id, m) => progress.record(id, m),
|
|
217
|
+
ensureGradeable: async (task) => {
|
|
218
|
+
await validatePoolInstances([task], {
|
|
219
|
+
fetcher, runner: new PythonEvalRunner({ upstreamRepoDir }), store: validatedStore,
|
|
220
|
+
semanticsVersion: EVAL_SEMANTICS_VERSION, upstreamRepoDir,
|
|
221
|
+
}, {});
|
|
222
|
+
return (await validatedStore.getEntry(task.instance_id, EVAL_SEMANTICS_VERSION))?.scorable === true;
|
|
223
|
+
},
|
|
224
|
+
runBaseFrozen: (task) => runOnce(baseHarness, byId.get(task.instance_id)),
|
|
225
|
+
runProverFrozen: (task) => runOnce(proverHarness, byId.get(task.instance_id)),
|
|
226
|
+
};
|
|
227
|
+
const result = await screenBaseFailures(candidates, deps, {
|
|
228
|
+
R: opts.R, heldOutCount: opts.heldOutCount, maxCandidates: opts.maxCandidates, perRepoCap: opts.perRepoCap,
|
|
229
|
+
});
|
|
230
|
+
// Diagnosability: a base-failing candidate routed to the prover that comes
|
|
231
|
+
// back `proverPassed: null` means the prover produced NO gradeable result
|
|
232
|
+
// (errored / no patch), not a clean "the prover can't solve it". That silently
|
|
233
|
+
// routes to `no-headroom` and can yield a misleadingly empty slate when the
|
|
234
|
+
// prover is simply unavailable (e.g. codex CLI < 0.133.0, or auth missing).
|
|
235
|
+
// Surface it loudly rather than swallow it.
|
|
236
|
+
const proverUnscorable = result.screened.filter((s) => s.reason === 'no-headroom' && s.proverPassed === null).length;
|
|
237
|
+
if (proverUnscorable > 0) {
|
|
238
|
+
log(`[screen] WARNING: the prover returned no gradeable result on ${proverUnscorable} base-failing ` +
|
|
239
|
+
`candidate(s) — excluded as no-headroom, but this likely means the prover is UNAVAILABLE rather than ` +
|
|
240
|
+
`unable. Verify the codex CLI (>=0.133.0) + auth, then re-run. See proverPassed=null rows in the report.`);
|
|
241
|
+
}
|
|
242
|
+
// Cumulative v2: union the EXISTING slate with this run's NEW held-out, so
|
|
243
|
+
// re-running to GROW the exam never drops already-reserved instances. (The
|
|
244
|
+
// active-slate exclusion keeps existing held-out OUT of candidates, so
|
|
245
|
+
// result.heldOut is only the new admits.) Growing changes the slate's content
|
|
246
|
+
// hash; re-recording the base arm for the FULL set below upserts the prior rows
|
|
247
|
+
// to the new hash, so the orchestrator's slate-hash-drift guard stays satisfied.
|
|
248
|
+
let existingHeldOut = [];
|
|
249
|
+
try {
|
|
250
|
+
existingHeldOut = [...loadHeldOutSlate(DISPATCH_SOLVER_TYPE, SLATE_VERSION).instanceIds];
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
/* no v2 slate yet — this is the first cut */
|
|
254
|
+
}
|
|
255
|
+
const newHeldOut = result.heldOut.map((h) => h.instance_id);
|
|
256
|
+
const allHeldOutIds = [...new Set([...existingHeldOut, ...newHeldOut])];
|
|
257
|
+
const generatedAt = new Date().toISOString();
|
|
258
|
+
const slateFile = buildV2SlateFile(allHeldOutIds, generatedAt);
|
|
259
|
+
mkdirSync(slatesDir(), { recursive: true });
|
|
260
|
+
const slatePath = join(slatesDir(), 'held-out-slate.swe-rebench-v2.v2.json');
|
|
261
|
+
writeFileSync(slatePath, `${JSON.stringify(slateFile, null, 2)}\n`);
|
|
262
|
+
const reportPath = join(slatesDir(), 'held-out-slate.swe-rebench-v2.v2.screening-report.json');
|
|
263
|
+
writeFileSync(reportPath, `${JSON.stringify({
|
|
264
|
+
generatedAt, evalSemanticsVersion: EVAL_SEMANTICS_VERSION, baseCodeDigest,
|
|
265
|
+
R: opts.R, proverHarness: proverKind,
|
|
266
|
+
proverModel: opts.proverModel ?? (proverKind === 'claude-code' ? 'opus' : 'codex-default'),
|
|
267
|
+
heldOutTotal: allHeldOutIds.length, newThisRun: newHeldOut, carriedOver: existingHeldOut,
|
|
268
|
+
screened: result.screened,
|
|
269
|
+
}, null, 2)}\n`);
|
|
270
|
+
// Persist the base arm (all-fail) for the FULL held-out set under the (possibly
|
|
271
|
+
// new) slate hash. The upsert is keyed by (checkpoint, slate_version, instance_id),
|
|
272
|
+
// so prior rows get their slate_hash refreshed to match the grown slate — no drift.
|
|
273
|
+
const store = new Store(config.dbPath);
|
|
274
|
+
try {
|
|
275
|
+
const runAtMs = Date.now();
|
|
276
|
+
for (const id of allHeldOutIds) {
|
|
277
|
+
store.recordEvalResult({
|
|
278
|
+
checkpoint_cid: baseCodeDigest, slate_hash: slateFile.hash, slate_version: SLATE_VERSION,
|
|
279
|
+
instance_id: id, passed: false, unscorable: false, code_digest: baseCodeDigest,
|
|
280
|
+
run_at_ms: runAtMs, test_log_excerpt: 'base arm (screening): consistent fail 0/R',
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
finally {
|
|
285
|
+
store.close?.();
|
|
286
|
+
}
|
|
287
|
+
return { result, baseCodeDigest, slatePath, reportPath, heldOutCount: allHeldOutIds.length, proverUnscorable };
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=screen-runner.js.map
|