@jinn-network/client 0.1.6 → 0.1.7-canary.08ebd916
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/CHANGELOG.md +33 -0
- package/README.md +67 -1
- package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +23 -4
- package/deployments/deployment-jinn-mvi-l1-sepolia.json +23 -4
- package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +5 -4
- package/dist/adapters/mech/adapter.d.ts +38 -2
- package/dist/adapters/mech/adapter.js +269 -62
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +17 -4
- package/dist/adapters/mech/contracts.js +8 -2
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +20 -0
- package/dist/adapters/mech/safe-revert.js +12 -4
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/safe.d.ts +6 -2
- package/dist/adapters/mech/safe.js +32 -11
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +6 -1
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/adapters/mech/verdict-code.d.ts +1 -0
- package/dist/adapters/mech/verdict-code.js +18 -0
- package/dist/adapters/mech/verdict-code.js.map +1 -1
- package/dist/agent/operator-claude.js +8 -0
- package/dist/agent/operator-claude.js.map +1 -1
- package/dist/api/activity-events-endpoint.d.ts +14 -0
- package/dist/api/activity-events-endpoint.js +59 -0
- package/dist/api/activity-events-endpoint.js.map +1 -0
- package/dist/api/admin-endpoint.d.ts +15 -3
- package/dist/api/admin-endpoint.js +24 -2
- package/dist/api/admin-endpoint.js.map +1 -1
- package/dist/api/bootstrap-endpoint.d.ts +1 -2
- package/dist/api/bootstrap-endpoint.js +85 -18
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/codex-doctor-endpoint.d.ts +90 -0
- package/dist/api/codex-doctor-endpoint.js +296 -0
- package/dist/api/codex-doctor-endpoint.js.map +1 -0
- package/dist/api/discovery-endpoint.d.ts +1 -0
- package/dist/api/discovery-endpoint.js +26 -0
- package/dist/api/discovery-endpoint.js.map +1 -1
- package/dist/api/fleet-build.d.ts +1 -0
- package/dist/api/fleet-build.js +2 -1
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +37 -0
- package/dist/api/gather-status.js +572 -19
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/hermes-doctor-endpoint.d.ts +128 -3
- package/dist/api/hermes-doctor-endpoint.js +265 -22
- package/dist/api/hermes-doctor-endpoint.js.map +1 -1
- package/dist/api/launcher-status.d.ts +25 -17
- package/dist/api/launcher-status.js +13 -11
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +1 -1
- package/dist/api/launcher-tasks.js +12 -8
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/api/operator-artifacts-endpoint.js +73 -6
- package/dist/api/operator-artifacts-endpoint.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +10 -0
- package/dist/api/portfolio-v0-build.js +24 -5
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +10 -0
- package/dist/api/prediction-v1-build.js +7 -1
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/server.d.ts +31 -1
- package/dist/api/server.js +95 -2
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +16 -0
- package/dist/api/setup-endpoints.js +89 -135
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/setup-retry-endpoint.d.ts +19 -0
- package/dist/api/setup-retry-endpoint.js +32 -0
- package/dist/api/setup-retry-endpoint.js.map +1 -0
- package/dist/api/solvernets-endpoints.d.ts +8 -0
- package/dist/api/solvernets-endpoints.js +99 -60
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +168 -2
- package/dist/api/status-build.js +116 -27
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-harness-rollup.d.ts +35 -0
- package/dist/api/status-harness-rollup.js +45 -0
- package/dist/api/status-harness-rollup.js.map +1 -0
- package/dist/api/task-run-routing.d.ts +7 -0
- package/dist/api/task-run-routing.js +12 -0
- package/dist/api/task-run-routing.js.map +1 -0
- package/dist/api/task-runs-build.d.ts +21 -0
- package/dist/api/task-runs-build.js +14 -1
- package/dist/api/task-runs-build.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/captures/live-publisher.js +24 -4
- package/dist/captures/live-publisher.js.map +1 -1
- package/dist/captures/publish.d.ts +1 -1
- package/dist/chain-read-errors.d.ts +10 -0
- package/dist/chain-read-errors.js +15 -0
- package/dist/chain-read-errors.js.map +1 -1
- package/dist/cli/commands/auth.js +1 -1
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/create.js +3 -2
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +2 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/rewards.js +11 -7
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +101 -15
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
- package/dist/cli/commands/solver-plugins-block.js +118 -0
- package/dist/cli/commands/solver-plugins-block.js.map +1 -0
- package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
- package/dist/cli/commands/solver-plugins-feedback.js +262 -0
- package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
- package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
- package/dist/cli/commands/solver-plugins-read.js +259 -0
- package/dist/cli/commands/solver-plugins-read.js.map +1 -0
- package/dist/cli/commands/solver-plugins.d.ts +35 -0
- package/dist/cli/commands/solver-plugins.js +399 -2
- package/dist/cli/commands/solver-plugins.js.map +1 -1
- package/dist/cli/commands/status.js +1 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tasks.js +101 -11
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/commands/update.d.ts +10 -0
- package/dist/cli/commands/update.js +36 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/introspection-context.js +5 -0
- package/dist/cli/introspection-context.js.map +1 -1
- package/dist/cli/task-native-readiness.d.ts +10 -1
- package/dist/cli/task-native-readiness.js +30 -6
- package/dist/cli/task-native-readiness.js.map +1 -1
- package/dist/config.d.ts +273 -235
- package/dist/config.js +305 -114
- package/dist/config.js.map +1 -1
- package/dist/daemon/checkpoint-loop.d.ts +48 -0
- package/dist/daemon/checkpoint-loop.js +76 -0
- package/dist/daemon/checkpoint-loop.js.map +1 -0
- package/dist/daemon/creator.d.ts +1 -1
- package/dist/daemon/creator.js +7 -3
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +22 -0
- package/dist/daemon/daemon.js +156 -23
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +40 -0
- package/dist/daemon/eviction-loop.js +67 -0
- package/dist/daemon/eviction-loop.js.map +1 -0
- package/dist/daemon/gate-logger.d.ts +9 -0
- package/dist/daemon/gate-logger.js +2 -0
- package/dist/daemon/gate-logger.js.map +1 -0
- package/dist/daemon/jinn-claim-loop-wiring.d.ts +33 -0
- package/dist/daemon/jinn-claim-loop-wiring.js +40 -0
- package/dist/daemon/jinn-claim-loop-wiring.js.map +1 -0
- package/dist/daemon/jinn-claim-loop.d.ts +24 -17
- package/dist/daemon/jinn-claim-loop.js +77 -23
- package/dist/daemon/jinn-claim-loop.js.map +1 -1
- package/dist/daemon/readiness-gate.d.ts +1 -4
- package/dist/daemon/readiness-gate.js.map +1 -1
- package/dist/daemon/skip-log-dedup.d.ts +69 -0
- package/dist/daemon/skip-log-dedup.js +106 -0
- package/dist/daemon/skip-log-dedup.js.map +1 -0
- package/dist/daemon/spend-cap-gate.d.ts +40 -0
- package/dist/daemon/spend-cap-gate.js +46 -0
- package/dist/daemon/spend-cap-gate.js.map +1 -0
- package/dist/dashboard/assets/index-C4huIsUW.css +32 -0
- package/dist/dashboard/assets/index-DkTglWXU.js +345 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/factory.d.ts +17 -5
- package/dist/discovery/factory.js +46 -18
- package/dist/discovery/factory.js.map +1 -1
- package/dist/discovery/http.js +216 -3
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.d.ts +5 -0
- package/dist/discovery/onchain.js +418 -15
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +75 -1
- package/dist/discovery/types.js +8 -10
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.d.ts +7 -0
- package/dist/discovery/with-fallback.js +20 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +100 -4
- package/dist/earning/bootstrap.js +221 -74
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +14 -0
- package/dist/earning/contracts.js +17 -5
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/funding-plan.js +27 -18
- package/dist/earning/funding-plan.js.map +1 -1
- package/dist/earning/jinn-rewards.d.ts +46 -0
- package/dist/earning/jinn-rewards.js +32 -0
- package/dist/earning/jinn-rewards.js.map +1 -1
- package/dist/earning/safe-adapter.d.ts +2 -0
- package/dist/earning/safe-adapter.js +37 -11
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/store.d.ts +8 -0
- package/dist/earning/store.js.map +1 -1
- package/dist/earning/testnet-setup-migration.d.ts +12 -0
- package/dist/earning/testnet-setup-migration.js +27 -1
- package/dist/earning/testnet-setup-migration.js.map +1 -1
- package/dist/earning/types.d.ts +21 -6
- package/dist/earning/viem-clients.d.ts +11 -4
- package/dist/earning/viem-clients.js +14 -5
- package/dist/earning/viem-clients.js.map +1 -1
- package/dist/erc8004/identity.d.ts +19 -3
- package/dist/erc8004/identity.js +21 -6
- package/dist/erc8004/identity.js.map +1 -1
- package/dist/erc8004/index.d.ts +1 -1
- package/dist/erc8004/index.js.map +1 -1
- package/dist/erc8004/reputation.d.ts +8 -0
- package/dist/erc8004/reputation.js +22 -3
- package/dist/erc8004/reputation.js.map +1 -1
- package/dist/events/types.d.ts +2 -2
- package/dist/harnesses/cost-estimates.d.ts +145 -0
- package/dist/harnesses/cost-estimates.js +297 -0
- package/dist/harnesses/cost-estimates.js.map +1 -0
- package/dist/harnesses/engine/engine.d.ts +78 -0
- package/dist/harnesses/engine/engine.js +153 -11
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +51 -1
- package/dist/harnesses/engine/persistence.js +118 -5
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/engine/work-dir-reaper.d.ts +65 -0
- package/dist/harnesses/engine/work-dir-reaper.js +100 -0
- package/dist/harnesses/engine/work-dir-reaper.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +40 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +20 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +40 -6
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +59 -1
- package/dist/harnesses/impls/hermes-agent/harness.js +104 -0
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
- package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
- package/dist/harnesses/impls/index.d.ts +7 -0
- package/dist/harnesses/impls/index.js +16 -1
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
- package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +38 -4
- package/dist/harnesses/impls/learner/harness.js +96 -2
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +1 -1
- package/dist/harnesses/impls/learner/harvest.js +23 -5
- package/dist/harnesses/impls/learner/harvest.js.map +1 -1
- package/dist/harnesses/impls/learner/plugin-path.d.ts +0 -13
- package/dist/harnesses/impls/learner/plugin-path.js +35 -15
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
- package/dist/harnesses/impls/learner/restoration-patch.d.ts +2 -2
- package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
- package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
- package/dist/harnesses/impls/learner/types.d.ts +11 -0
- package/dist/harnesses/impls/stub.d.ts +58 -0
- package/dist/harnesses/impls/stub.js +89 -0
- package/dist/harnesses/impls/stub.js.map +1 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +69 -50
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +178 -93
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +12 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +121 -7
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +88 -4
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +143 -22
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +6 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
- package/dist/harnesses/readiness-registry.d.ts +7 -0
- package/dist/harnesses/readiness-registry.js +18 -1
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/main.js +419 -111
- package/dist/main.js.map +1 -1
- package/dist/observability/emit-event.d.ts +3 -2
- package/dist/observability/emit-event.js +22 -1
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/operator-errors.d.ts +7 -0
- package/dist/operator-errors.js +13 -1
- package/dist/operator-errors.js.map +1 -1
- package/dist/plugins/learner/.claude-plugin/plugin.json +9 -0
- package/dist/plugins/learner/.codex-plugin/plugin.json +39 -0
- package/dist/plugins/learner/AGENTS.md +40 -0
- package/dist/plugins/learner/CLAUDE.md +33 -0
- package/dist/plugins/learner/README.md +59 -0
- package/dist/plugins/learner/hooks/hooks.json +16 -0
- package/dist/plugins/learner/hooks/session-start +38 -0
- package/dist/plugins/learner/skills/learn/SKILL.md +412 -0
- package/dist/plugins/learner/skills/learn/analyst-prompt.md +68 -0
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +94 -0
- package/dist/plugins/learner/skills/learn/explorer-prompt.md +53 -0
- package/dist/plugins/learner/skills/learn/planner-prompt.md +87 -0
- package/dist/plugins/learner/skills/learn/promoter-prompt.md +113 -0
- package/dist/plugins/learner/skills/learn/step-worker-prompt.md +47 -0
- package/dist/plugins/learner/skills/learn/strategist-prompt.md +85 -0
- package/dist/preflight/rpc-network.d.ts +40 -0
- package/dist/preflight/rpc-network.js +67 -1
- package/dist/preflight/rpc-network.js.map +1 -1
- package/dist/restart-daemon.d.ts +90 -0
- package/dist/restart-daemon.js +95 -0
- package/dist/restart-daemon.js.map +1 -0
- package/dist/rpc/transport.d.ts +109 -0
- package/dist/rpc/transport.js +220 -0
- package/dist/rpc/transport.js.map +1 -0
- package/dist/scripts/donation-consumption-acceptance.js +7 -28
- package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
- package/dist/setup/halt-mode.d.ts +14 -0
- package/dist/setup/halt-mode.js +17 -0
- package/dist/setup/halt-mode.js.map +1 -0
- package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
- package/dist/solver-nets/prediction-operator-ux.js +90 -47
- package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
- package/dist/solver-nets/registry.d.ts +20 -1
- package/dist/solver-nets/registry.js +38 -25
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-pool-cache.d.ts +58 -0
- package/dist/solver-types/_swe-rebench-v2-pool-cache.js +87 -0
- package/dist/solver-types/_swe-rebench-v2-pool-cache.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
- package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
- package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +1 -0
- package/dist/solver-types/_swe-rebench-v2-substrate.js +10 -0
- package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +94 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +305 -39
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2-auto.d.ts +22 -7
- package/dist/solver-types/swe-rebench-v2-auto.js +57 -20
- package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2.d.ts +18 -2
- package/dist/solver-types/swe-rebench-v2.js +310 -94
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/daemon-init.d.ts +10 -2
- package/dist/solvernets/daemon-init.js +22 -2
- package/dist/solvernets/daemon-init.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.d.ts +4 -0
- package/dist/solvernets/launched-record-dispatcher.js +44 -7
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/store.d.ts +5 -0
- package/dist/solvernets/store.js +1 -0
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/credential.d.ts +8 -0
- package/dist/spend/credential.js +30 -0
- package/dist/spend/credential.js.map +1 -0
- package/dist/spend/daemon-config.d.ts +13 -0
- package/dist/spend/daemon-config.js +24 -0
- package/dist/spend/daemon-config.js.map +1 -0
- package/dist/spend/pricing.d.ts +16 -0
- package/dist/spend/pricing.js +26 -0
- package/dist/spend/pricing.js.map +1 -0
- package/dist/spend/record.d.ts +13 -0
- package/dist/spend/record.js +30 -0
- package/dist/spend/record.js.map +1 -0
- package/dist/spend/usage.d.ts +27 -0
- package/dist/spend/usage.js +113 -0
- package/dist/spend/usage.js.map +1 -0
- package/dist/store/store.d.ts +61 -0
- package/dist/store/store.js +302 -7
- package/dist/store/store.js.map +1 -1
- package/dist/tasks/sources.d.ts +18 -1
- package/dist/tasks/sources.js +33 -5
- package/dist/tasks/sources.js.map +1 -1
- package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
- package/dist/tx-retry.d.ts +166 -19
- package/dist/tx-retry.js +310 -32
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/payloads/prediction-apy-v0.d.ts +5 -5
- package/dist/types/payloads/prediction-v0.d.ts +5 -5
- package/dist/types/task-document.d.ts +392 -0
- package/dist/types/task-document.js +10 -0
- package/dist/types/task-document.js.map +1 -1
- package/dist/types/task.d.ts +28 -0
- package/dist/util/extract-tx-hash.d.ts +14 -0
- package/dist/util/extract-tx-hash.js +19 -0
- package/dist/util/extract-tx-hash.js.map +1 -0
- package/dist/vendor/@jinn-network/sdk/dist/contracts.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +3 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -0
- package/package.json +36 -13
- package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
- package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
- package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
- package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
- package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
- package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
- package/plugins/swe-rebench-v2-runtime/README.md +6 -6
- package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
- package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +69 -0
- package/dist/dashboard/assets/index-DOlzFN8a.css +0 -32
- package/dist/dashboard/assets/index-NkZ7CTAT.js +0 -140
- package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
- package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swe-rebench-v2-auto.js","sourceRoot":"","sources":["../../src/solver-types/swe-rebench-v2-auto.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"swe-rebench-v2-auto.js","sourceRoot":"","sources":["../../src/solver-types/swe-rebench-v2-auto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SolverTypeDefinition for swe-rebench-v2.v1.
|
|
3
3
|
*
|
|
4
|
-
* Wires the pool builder, state store, and
|
|
4
|
+
* Wires the pool builder, state store, and selectNextPostingCandidates
|
|
5
5
|
* policy from the supporting modules (_swe-rebench-v2-pool, _swe-rebench-v2-state,
|
|
6
6
|
* swe-rebench-v2-auto) into the SolverTypeDefinition interface consumed by
|
|
7
7
|
* collectTestnetAutoTaskGenerators.
|
|
@@ -17,11 +17,17 @@ import { ValidatedPoolStore } from './_swe-rebench-v2-validated-pool.js';
|
|
|
17
17
|
import { type PoolTask } from './_swe-rebench-v2-pool.js';
|
|
18
18
|
export declare const HF_DATASET = "nebius/SWE-rebench-leaderboard";
|
|
19
19
|
export interface SweRebenchV2ClaimPolicyRuntimeConfig {
|
|
20
|
+
/** @deprecated maxClaims is derived per posting from remaining target successes. */
|
|
20
21
|
maxClaims?: number;
|
|
22
|
+
/** @deprecated use top-level maxClaimsPerOperator. */
|
|
21
23
|
maxClaimsPerOperator?: number;
|
|
24
|
+
/** @deprecated use top-level claimLeaseTtlSeconds. */
|
|
22
25
|
claimLeaseTtlSeconds?: number;
|
|
23
26
|
}
|
|
24
27
|
export type SweRebenchV2GeneratorRuntimeConfig = Partial<GeneratorConfig> & {
|
|
28
|
+
/** @deprecated ignored; posting_window_ms controls repost timing. */
|
|
29
|
+
cooldown_ms?: number;
|
|
30
|
+
/** @deprecated legacy nested shape tolerated on read and flattened on write. */
|
|
25
31
|
claimPolicy?: SweRebenchV2ClaimPolicyRuntimeConfig;
|
|
26
32
|
};
|
|
27
33
|
/** Config passed to buildGenerator — sourced from env or TestnetAutoContext. */
|
|
@@ -31,9 +37,12 @@ export interface SweRebenchV2AutoConfig {
|
|
|
31
37
|
}
|
|
32
38
|
export interface SweRebenchV2GeneratorStaticConfig {
|
|
33
39
|
stateDir?: string;
|
|
40
|
+
ipfsRegistryUrl?: string;
|
|
34
41
|
agentEoa?: `0x${string}`;
|
|
35
42
|
safeAddress?: `0x${string}`;
|
|
36
43
|
agentPrivateKey?: `0x${string}`;
|
|
44
|
+
/** Optional DiscoveryAPI for network-truth success reconciliation (#669). */
|
|
45
|
+
discoveryApi?: import('../discovery/types.js').DiscoveryAPI;
|
|
37
46
|
}
|
|
38
47
|
export interface MakeSweRebenchV2GeneratorForLaunchedRecordOpts {
|
|
39
48
|
recordRef: {
|
|
@@ -50,7 +59,11 @@ export interface SweRebenchV2GeneratorStateSnapshot {
|
|
|
50
59
|
lastPollSummary?: {
|
|
51
60
|
poolSize: number;
|
|
52
61
|
posted: number;
|
|
53
|
-
|
|
62
|
+
unposted: number;
|
|
63
|
+
live: number;
|
|
64
|
+
repostable: number;
|
|
65
|
+
saturated: number;
|
|
66
|
+
abandoned: number;
|
|
54
67
|
};
|
|
55
68
|
lastError?: {
|
|
56
69
|
message: string;
|
|
@@ -59,6 +72,9 @@ export interface SweRebenchV2GeneratorStateSnapshot {
|
|
|
59
72
|
totalPosted: number;
|
|
60
73
|
lastPostedInstanceId?: string;
|
|
61
74
|
config: GeneratorConfig;
|
|
75
|
+
poolPublicationUpdatedAt?: string;
|
|
76
|
+
poolPublicationPriorSize?: number;
|
|
77
|
+
poolPublicationCurrentSize?: number;
|
|
62
78
|
}
|
|
63
79
|
export type SweRebenchV2GeneratorTick = TaskGenerator & {
|
|
64
80
|
getState: () => SweRebenchV2GeneratorStateSnapshot;
|
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SolverTypeDefinition for swe-rebench-v2.v1.
|
|
3
3
|
*
|
|
4
|
-
* Wires the pool builder, state store, and
|
|
4
|
+
* Wires the pool builder, state store, and selectNextPostingCandidates
|
|
5
5
|
* policy from the supporting modules (_swe-rebench-v2-pool, _swe-rebench-v2-state,
|
|
6
6
|
* swe-rebench-v2-auto) into the SolverTypeDefinition interface consumed by
|
|
7
7
|
* collectTestnetAutoTaskGenerators.
|
|
8
8
|
*
|
|
9
9
|
* Spec: docs/superpowers/specs/2026-05-06-agent-harness-solvernet-design.md §3.6
|
|
10
10
|
*/
|
|
11
|
+
import { stat } from 'node:fs/promises';
|
|
11
12
|
import { homedir } from 'node:os';
|
|
12
13
|
import { join } from 'node:path';
|
|
13
14
|
import { randomUUID } from 'node:crypto';
|
|
14
15
|
import { getSolverNetContract } from '../vendor/@jinn-network/sdk/dist/solvernets/index.js';
|
|
15
16
|
import { SweRebenchV2TaskSchema } from '../vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js';
|
|
16
17
|
import { signTaskV1 } from '../tasks/signing.js';
|
|
17
|
-
import {
|
|
18
|
+
import { uploadToIpfs } from '../adapters/mech/ipfs.js';
|
|
19
|
+
import { selectNextPostingCandidates, summarizePoolState, DEFAULT_GENERATOR_CONFIG, } from './swe-rebench-v2-auto.js';
|
|
18
20
|
import { GeneratorStateStore } from './_swe-rebench-v2-state.js';
|
|
19
|
-
import { ValidatedPoolStore, filterToScorablePool, EVAL_SEMANTICS_VERSION, } from './_swe-rebench-v2-validated-pool.js';
|
|
21
|
+
import { ValidatedPoolStore, filterToScorablePool, EVAL_SEMANTICS_VERSION, VETTED_POOL_REF_ELIGIBILITY_KEY, createVettedPoolArtifactRef, exportScorableVettedPoolArtifact, hashVettedPoolArtifact, loadVettedPoolArtifactScorableEntries, readVettedPoolArtifactPublication, writeVettedPoolArtifactPublication, } from './_swe-rebench-v2-validated-pool.js';
|
|
20
22
|
import { buildHistoricalPool, fetchHfSplit, listMonthlyPartitions, } from './_swe-rebench-v2-pool.js';
|
|
23
|
+
import { fetchHfWithRetry } from '../harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js';
|
|
24
|
+
import { PoolCacheStore, loadPoolWithCacheFallback } from './_swe-rebench-v2-pool-cache.js';
|
|
21
25
|
export const HF_DATASET = 'nebius/SWE-rebench-leaderboard';
|
|
22
26
|
const SOLVER_TYPE = 'swe-rebench-v2.v1';
|
|
23
27
|
const CONTRACT_ID = 'swe-rebench-v2';
|
|
24
28
|
const CONTRACT_VERSION = 'v1';
|
|
29
|
+
const DEFAULT_IPFS_REGISTRY_URL = 'https://registry.autonolas.tech';
|
|
25
30
|
/** How long the pool is cached before a full refresh (24 h). */
|
|
26
31
|
const POOL_REFRESH_MS = 24 * 60 * 60 * 1000;
|
|
27
32
|
export function defaultStateDir() {
|
|
@@ -34,7 +39,9 @@ export function defaultStateDir() {
|
|
|
34
39
|
*/
|
|
35
40
|
export async function loadSweRebenchV2Pool() {
|
|
36
41
|
const splitsUrl = `https://datasets-server.huggingface.co/splits?dataset=${encodeURIComponent(HF_DATASET)}`;
|
|
37
|
-
|
|
42
|
+
// Route through the shared HF retry helper so the /splits endpoint gets the
|
|
43
|
+
// same jittered 429-backoff treatment as /rows (issue #578).
|
|
44
|
+
const response = await fetchHfWithRetry(splitsUrl, {});
|
|
38
45
|
if (!response.ok)
|
|
39
46
|
throw new Error(`HF splits fetch failed: ${response.status}`);
|
|
40
47
|
const json = (await response.json());
|
|
@@ -54,22 +61,26 @@ export function getSweRebenchV2ValidatedPoolStore(stateDir) {
|
|
|
54
61
|
function positiveInt(value, fallback) {
|
|
55
62
|
return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : fallback;
|
|
56
63
|
}
|
|
57
|
-
function nonNegativeInt(value, fallback) {
|
|
58
|
-
return typeof value === 'number' && Number.isInteger(value) && value >= 0 ? value : fallback;
|
|
59
|
-
}
|
|
60
64
|
const DEFAULT_ADMISSION_MODE = 'required';
|
|
61
65
|
function normalizeGeneratorConfig(raw) {
|
|
62
66
|
const cfg = typeof raw === 'object' && raw !== null
|
|
63
67
|
? raw
|
|
64
68
|
: {};
|
|
69
|
+
const legacyPolicy = typeof cfg['claimPolicy'] === 'object' && cfg['claimPolicy'] !== null
|
|
70
|
+
? cfg['claimPolicy']
|
|
71
|
+
: {};
|
|
65
72
|
const N_target_successes = positiveInt(cfg['N_target_successes'], DEFAULT_GENERATOR_CONFIG.N_target_successes);
|
|
66
73
|
const N_max_postings_per_task = Math.max(N_target_successes, positiveInt(cfg['N_max_postings_per_task'], DEFAULT_GENERATOR_CONFIG.N_max_postings_per_task));
|
|
67
74
|
const rawMode = cfg['admissionMode'];
|
|
68
75
|
const admissionMode = rawMode === 'python-floor' ? 'python-floor' : DEFAULT_ADMISSION_MODE;
|
|
76
|
+
const maxClaimsPerOperator = positiveInt(cfg['maxClaimsPerOperator'] ?? legacyPolicy['maxClaimsPerOperator'], 0);
|
|
69
77
|
return {
|
|
70
78
|
N_target_successes,
|
|
71
79
|
N_max_postings_per_task,
|
|
72
|
-
|
|
80
|
+
posting_window_ms: positiveInt(cfg['posting_window_ms'], DEFAULT_GENERATOR_CONFIG.posting_window_ms),
|
|
81
|
+
post_batch_size: positiveInt(cfg['post_batch_size'], DEFAULT_GENERATOR_CONFIG.post_batch_size),
|
|
82
|
+
...(maxClaimsPerOperator > 0 ? { maxClaimsPerOperator } : {}),
|
|
83
|
+
claimLeaseTtlSeconds: positiveInt(cfg['claimLeaseTtlSeconds'] ?? legacyPolicy['claimLeaseTtlSeconds'], DEFAULT_GENERATOR_CONFIG.claimLeaseTtlSeconds),
|
|
73
84
|
admissionMode,
|
|
74
85
|
};
|
|
75
86
|
}
|
|
@@ -119,26 +130,77 @@ function sweRebenchDefaultClaimPolicy() {
|
|
|
119
130
|
const defaults = contract?.claimPolicyDefaults;
|
|
120
131
|
return {
|
|
121
132
|
mode: defaults?.mode === 'serial' ? 'exclusive' : 'parallel',
|
|
122
|
-
maxClaims: defaults?.maxClaims ??
|
|
123
|
-
maxClaimsPerOperator: defaults?.maxClaimsPerOperator ??
|
|
133
|
+
maxClaims: defaults?.maxClaims ?? DEFAULT_GENERATOR_CONFIG.N_target_successes,
|
|
134
|
+
maxClaimsPerOperator: defaults?.maxClaimsPerOperator ?? DEFAULT_GENERATOR_CONFIG.N_target_successes,
|
|
124
135
|
claimLeaseTtlSeconds: defaults?.claimLeaseTtlSeconds ?? 60 * 60,
|
|
125
136
|
};
|
|
126
137
|
}
|
|
127
|
-
function
|
|
138
|
+
function claimPolicyForPosting(genConfig, remainingTargetSuccesses) {
|
|
128
139
|
const defaults = sweRebenchDefaultClaimPolicy();
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
: {};
|
|
132
|
-
const policy = typeof cfg.claimPolicy === 'object' && cfg.claimPolicy !== null
|
|
133
|
-
? cfg.claimPolicy
|
|
134
|
-
: {};
|
|
135
|
-
const maxClaims = positiveInt(policy.maxClaims, defaults.maxClaims);
|
|
136
|
-
const maxClaimsPerOperator = Math.min(maxClaims, positiveInt(policy.maxClaimsPerOperator, defaults.maxClaimsPerOperator));
|
|
140
|
+
const maxClaims = Math.max(1, remainingTargetSuccesses);
|
|
141
|
+
const maxClaimsPerOperator = Math.min(maxClaims, genConfig.maxClaimsPerOperator ?? maxClaims);
|
|
137
142
|
return {
|
|
138
143
|
...defaults,
|
|
139
144
|
maxClaims,
|
|
140
145
|
maxClaimsPerOperator,
|
|
141
|
-
claimLeaseTtlSeconds:
|
|
146
|
+
claimLeaseTtlSeconds: genConfig.claimLeaseTtlSeconds,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
async function resolvePublishedVettedPool(args) {
|
|
150
|
+
if (!args.manifestCid) {
|
|
151
|
+
return { scorableIds: null, artifactRef: null, mode: 'no-manifest' };
|
|
152
|
+
}
|
|
153
|
+
const existing = await readVettedPoolArtifactPublication({
|
|
154
|
+
stateDir: args.stateDir,
|
|
155
|
+
manifestCid: args.manifestCid,
|
|
156
|
+
evalSemanticsVersion: EVAL_SEMANTICS_VERSION,
|
|
157
|
+
});
|
|
158
|
+
let priorSize;
|
|
159
|
+
if (existing) {
|
|
160
|
+
const scorable = await args.store.getScorableEntries(EVAL_SEMANTICS_VERSION);
|
|
161
|
+
const validatedNewer = scorable !== null && scorable.updatedAt > existing.updatedAt;
|
|
162
|
+
if (!validatedNewer) {
|
|
163
|
+
return {
|
|
164
|
+
scorableIds: loadVettedPoolArtifactScorableEntries(existing.artifact).ids,
|
|
165
|
+
artifactRef: existing.ref,
|
|
166
|
+
mode: 'published',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
priorSize = existing.artifact.entries.length;
|
|
170
|
+
}
|
|
171
|
+
const artifact = await exportScorableVettedPoolArtifact(args.store, EVAL_SEMANTICS_VERSION, {
|
|
172
|
+
generatedAt: args.nowIso,
|
|
173
|
+
});
|
|
174
|
+
if (!artifact || artifact.entries.length === 0) {
|
|
175
|
+
return { scorableIds: null, artifactRef: null, mode: 'no-publication' };
|
|
176
|
+
}
|
|
177
|
+
const artifactCid = await args.upload(args.ipfsRegistryUrl, artifact);
|
|
178
|
+
const artifactRef = createVettedPoolArtifactRef({
|
|
179
|
+
manifestCid: args.manifestCid,
|
|
180
|
+
artifactCid,
|
|
181
|
+
artifactHash: hashVettedPoolArtifact(artifact),
|
|
182
|
+
evalSemanticsVersion: EVAL_SEMANTICS_VERSION,
|
|
183
|
+
publishedAt: args.nowIso,
|
|
184
|
+
});
|
|
185
|
+
await writeVettedPoolArtifactPublication({
|
|
186
|
+
stateDir: args.stateDir,
|
|
187
|
+
ref: artifactRef,
|
|
188
|
+
artifact,
|
|
189
|
+
updatedAt: args.nowIso,
|
|
190
|
+
});
|
|
191
|
+
return {
|
|
192
|
+
scorableIds: loadVettedPoolArtifactScorableEntries(artifact).ids,
|
|
193
|
+
artifactRef,
|
|
194
|
+
mode: 'published-from-local',
|
|
195
|
+
...(priorSize !== undefined
|
|
196
|
+
? {
|
|
197
|
+
republication: {
|
|
198
|
+
priorSize,
|
|
199
|
+
currentSize: artifact.entries.length,
|
|
200
|
+
publishedAt: args.nowIso,
|
|
201
|
+
},
|
|
202
|
+
}
|
|
203
|
+
: {}),
|
|
142
204
|
};
|
|
143
205
|
}
|
|
144
206
|
async function maybeSignTask(task, opts) {
|
|
@@ -160,7 +222,7 @@ async function maybeSignTask(task, opts) {
|
|
|
160
222
|
window: task.window,
|
|
161
223
|
spec: task.spec ?? {},
|
|
162
224
|
eligibility: task.eligibility ?? {},
|
|
163
|
-
claimPolicy: task.claimPolicy ??
|
|
225
|
+
claimPolicy: task.claimPolicy ?? sweRebenchDefaultClaimPolicy(),
|
|
164
226
|
creator: {
|
|
165
227
|
safeAddress: opts.creator.safeAddress,
|
|
166
228
|
agentEoa: opts.creator.agentEoa,
|
|
@@ -179,27 +241,40 @@ async function maybeSignTask(task, opts) {
|
|
|
179
241
|
function makeSweRebenchV2Generator(config) {
|
|
180
242
|
const stateStore = new GeneratorStateStore({ stateDir: config.stateDir });
|
|
181
243
|
const validatedPoolStore = new ValidatedPoolStore({ stateDir: config.stateDir });
|
|
244
|
+
const poolCache = new PoolCacheStore({ stateDir: config.stateDir });
|
|
182
245
|
let pool = [];
|
|
183
246
|
let poolLoadedAt = 0;
|
|
247
|
+
let poolFromCache = false;
|
|
184
248
|
let floorWarned = false;
|
|
249
|
+
let publicationWarned = false;
|
|
185
250
|
let lastPostedLanguage;
|
|
186
251
|
let lastPollAt;
|
|
187
252
|
let lastPollSummary;
|
|
188
253
|
let lastError;
|
|
189
254
|
let totalPosted = 0;
|
|
190
255
|
let lastPostedInstanceId;
|
|
256
|
+
let publishedPoolCache = null;
|
|
257
|
+
let lastValidatedPoolMtimeMs = -1;
|
|
258
|
+
let lastRepublication;
|
|
191
259
|
async function refreshPool() {
|
|
192
|
-
|
|
193
|
-
|
|
260
|
+
const result = await loadPoolWithCacheFallback({
|
|
261
|
+
loadPool: loadSweRebenchV2Pool,
|
|
262
|
+
cache: poolCache,
|
|
263
|
+
currentPool: pool,
|
|
264
|
+
});
|
|
265
|
+
pool = result.pool;
|
|
266
|
+
poolFromCache = result.fromCache;
|
|
267
|
+
lastError = result.error;
|
|
268
|
+
if (!result.error) {
|
|
269
|
+
// Fresh HF load — hold it for the full POOL_REFRESH_MS window.
|
|
194
270
|
poolLoadedAt = Date.now();
|
|
195
271
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
};
|
|
202
|
-
console.warn(`[swe-rebench-v2-gen] pool refresh failed (using ${pool.length} cached tasks):`, err instanceof Error ? err.message : String(err));
|
|
272
|
+
if (result.fromCache) {
|
|
273
|
+
console.warn(`[swe-rebench-v2-gen] HF pool refresh failed; serving ${pool.length} tasks from disk cache — ` +
|
|
274
|
+
`generator stays live, will retry HF next poll: ${result.error?.message}`);
|
|
275
|
+
}
|
|
276
|
+
else if (result.error) {
|
|
277
|
+
console.warn(`[swe-rebench-v2-gen] pool refresh failed (pool size ${pool.length}): ${result.error.message}`);
|
|
203
278
|
}
|
|
204
279
|
}
|
|
205
280
|
const tick = async () => {
|
|
@@ -208,22 +283,86 @@ function makeSweRebenchV2Generator(config) {
|
|
|
208
283
|
? config.getGeneratorConfig()
|
|
209
284
|
: config.generatorConfig;
|
|
210
285
|
const genConfig = normalizeGeneratorConfig(runtimeConfig);
|
|
211
|
-
|
|
212
|
-
//
|
|
213
|
-
|
|
286
|
+
// Refresh pool if stale, empty, or currently served from the disk cache
|
|
287
|
+
// (a cache-served pool retries HF every poll so the generator self-heals
|
|
288
|
+
// as soon as HF recovers — #466).
|
|
289
|
+
if (pool.length === 0 || poolFromCache || now - poolLoadedAt > POOL_REFRESH_MS) {
|
|
214
290
|
await refreshPool();
|
|
215
291
|
}
|
|
216
292
|
if (pool.length === 0) {
|
|
217
|
-
lastPollSummary = {
|
|
293
|
+
lastPollSummary = {
|
|
294
|
+
poolSize: 0,
|
|
295
|
+
posted: 0,
|
|
296
|
+
unposted: 0,
|
|
297
|
+
live: 0,
|
|
298
|
+
repostable: 0,
|
|
299
|
+
saturated: 0,
|
|
300
|
+
abandoned: 0,
|
|
301
|
+
};
|
|
218
302
|
return null;
|
|
219
303
|
}
|
|
220
304
|
lastPollAt = new Date(now).toISOString();
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
305
|
+
const validatedPoolMtimeMs = await stat(join(config.stateDir, 'validated-pool.json'))
|
|
306
|
+
.then((s) => s.mtimeMs)
|
|
307
|
+
.catch(() => -1);
|
|
308
|
+
if (validatedPoolMtimeMs > lastValidatedPoolMtimeMs) {
|
|
309
|
+
publishedPoolCache = null;
|
|
310
|
+
lastValidatedPoolMtimeMs = validatedPoolMtimeMs;
|
|
311
|
+
}
|
|
312
|
+
let publishedPool = publishedPoolCache;
|
|
313
|
+
if (!publishedPool) {
|
|
314
|
+
publishedPool = await resolvePublishedVettedPool({
|
|
315
|
+
stateDir: config.stateDir,
|
|
316
|
+
manifestCid: config.solverNetManifestCid,
|
|
317
|
+
store: validatedPoolStore,
|
|
318
|
+
nowIso: lastPollAt,
|
|
319
|
+
ipfsRegistryUrl: config.ipfsRegistryUrl ??
|
|
320
|
+
process.env['JINN_IPFS_REGISTRY_URL'] ??
|
|
321
|
+
DEFAULT_IPFS_REGISTRY_URL,
|
|
322
|
+
upload: uploadToIpfs,
|
|
323
|
+
}).catch((err) => {
|
|
324
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
325
|
+
lastError = {
|
|
326
|
+
message: `vetted pool publication failed: ${message}`,
|
|
327
|
+
at: new Date().toISOString(),
|
|
328
|
+
};
|
|
329
|
+
console.warn(`[swe-rebench-v2-gen] ${lastError.message}`);
|
|
330
|
+
return null;
|
|
331
|
+
});
|
|
332
|
+
if (publishedPool?.artifactRef) {
|
|
333
|
+
publishedPoolCache = publishedPool;
|
|
334
|
+
if (publishedPool.republication) {
|
|
335
|
+
lastRepublication = publishedPool.republication;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (publishedPool === null) {
|
|
340
|
+
lastPollSummary = {
|
|
341
|
+
poolSize: 0,
|
|
342
|
+
posted: 0,
|
|
343
|
+
unposted: 0,
|
|
344
|
+
live: 0,
|
|
345
|
+
repostable: 0,
|
|
346
|
+
saturated: 0,
|
|
347
|
+
abandoned: 0,
|
|
348
|
+
};
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
if (genConfig.admissionMode === 'required' &&
|
|
352
|
+
publishedPool.mode === 'no-manifest' &&
|
|
353
|
+
!publicationWarned) {
|
|
354
|
+
publicationWarned = true;
|
|
355
|
+
console.warn(`[swe-rebench-v2-gen] no solverNetManifestCid is available, so the launcher cannot stamp a vetted pool artifact ref; admissionMode='required' is fail-closed.`);
|
|
356
|
+
}
|
|
357
|
+
// Restrict to instances in the launcher's published pool artifact. If the
|
|
358
|
+
// launcher has no publication yet but local scorable data exists, the
|
|
359
|
+
// helper above publishes it once before this filter runs. Python-floor is
|
|
360
|
+
// preserved only for local/dev generators.
|
|
361
|
+
const scorableIds = publishedPool.artifactRef
|
|
362
|
+
? publishedPool.scorableIds
|
|
363
|
+
: genConfig.admissionMode === 'python-floor'
|
|
364
|
+
? await validatedPoolStore.getScorableIds(EVAL_SEMANTICS_VERSION)
|
|
365
|
+
: null;
|
|
227
366
|
const { pool: eligiblePool, mode: poolMode } = filterToScorablePool(pool, scorableIds, genConfig.admissionMode);
|
|
228
367
|
if (poolMode === 'admission-required-no-data' && !floorWarned) {
|
|
229
368
|
floorWarned = true;
|
|
@@ -237,7 +376,15 @@ function makeSweRebenchV2Generator(config) {
|
|
|
237
376
|
console.warn(`[swe-rebench-v2-gen] admissionMode='python-floor' (local/dev): restricting to ${eligiblePool.length} Python instance(s) of ${pool.length}; run \`jinn solver-nets validate-pool swe-rebench-v2 --seed-positive\` to advance to required mode.`);
|
|
238
377
|
}
|
|
239
378
|
if (eligiblePool.length === 0) {
|
|
240
|
-
lastPollSummary = {
|
|
379
|
+
lastPollSummary = {
|
|
380
|
+
poolSize: 0,
|
|
381
|
+
posted: 0,
|
|
382
|
+
unposted: 0,
|
|
383
|
+
live: 0,
|
|
384
|
+
repostable: 0,
|
|
385
|
+
saturated: 0,
|
|
386
|
+
abandoned: 0,
|
|
387
|
+
};
|
|
241
388
|
lastError = undefined;
|
|
242
389
|
return null;
|
|
243
390
|
}
|
|
@@ -246,73 +393,133 @@ function makeSweRebenchV2Generator(config) {
|
|
|
246
393
|
for (const task of eligiblePool) {
|
|
247
394
|
counters.set(task.instance_id, await stateStore.getCounters(task.instance_id));
|
|
248
395
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
396
|
+
// Reconcile each instance's `successful` against network truth (#669):
|
|
397
|
+
// take max(local, network). On indexer outage the tick aborts — silently
|
|
398
|
+
// falling through to local-only counters is exactly the bug being fixed.
|
|
399
|
+
// The discoveryApi/manifestCid pair is optional so test paths can skip.
|
|
400
|
+
if (config.discoveryApi && config.solverNetManifestCid) {
|
|
401
|
+
try {
|
|
402
|
+
const networkSuccesses = await config.discoveryApi.getInstanceSuccessCounts({
|
|
403
|
+
manifestCid: config.solverNetManifestCid,
|
|
404
|
+
});
|
|
405
|
+
for (const task of eligiblePool) {
|
|
406
|
+
const local = counters.get(task.instance_id);
|
|
407
|
+
if (!local)
|
|
408
|
+
continue;
|
|
409
|
+
const networkSuccess = networkSuccesses.get(task.instance_id) ?? 0;
|
|
410
|
+
if (networkSuccess > local.successful) {
|
|
411
|
+
counters.set(task.instance_id, { ...local, successful: networkSuccess });
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
catch (err) {
|
|
416
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
417
|
+
lastError = {
|
|
418
|
+
message: `network-truth reconciliation failed: ${message}`,
|
|
419
|
+
at: new Date().toISOString(),
|
|
420
|
+
};
|
|
421
|
+
console.warn(`[swe-rebench-v2-gen] ${lastError.message} — skipping this tick`);
|
|
422
|
+
lastPollSummary = {
|
|
423
|
+
poolSize: eligiblePool.length,
|
|
424
|
+
posted: 0,
|
|
425
|
+
unposted: 0,
|
|
426
|
+
live: 0,
|
|
427
|
+
repostable: 0,
|
|
428
|
+
saturated: 0,
|
|
429
|
+
abandoned: 0,
|
|
430
|
+
};
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
254
433
|
}
|
|
255
|
-
const
|
|
434
|
+
const candidates = selectNextPostingCandidates({
|
|
256
435
|
pool: eligiblePool,
|
|
257
436
|
counters,
|
|
258
437
|
config: genConfig,
|
|
259
438
|
now,
|
|
260
439
|
lastPostedLanguage,
|
|
261
440
|
});
|
|
262
|
-
if (
|
|
263
|
-
lastPollSummary = {
|
|
441
|
+
if (candidates.length === 0) {
|
|
442
|
+
lastPollSummary = summarizePoolState({
|
|
443
|
+
pool: eligiblePool,
|
|
444
|
+
counters,
|
|
445
|
+
config: genConfig,
|
|
446
|
+
now,
|
|
447
|
+
lastPostedLanguage,
|
|
448
|
+
});
|
|
264
449
|
lastError = undefined;
|
|
265
450
|
return null;
|
|
266
451
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
round_month: roundMonth,
|
|
288
|
-
});
|
|
289
|
-
const task = {
|
|
290
|
-
id: randomUUID(),
|
|
291
|
-
description: `SWE-rebench v2: ${candidate.instance_id}`,
|
|
292
|
-
solverType: SOLVER_TYPE,
|
|
293
|
-
contractId: CONTRACT_ID,
|
|
294
|
-
contractVersion: CONTRACT_VERSION,
|
|
295
|
-
...(config.solverNetManifestCid
|
|
296
|
-
? { solverNetManifestCid: config.solverNetManifestCid }
|
|
297
|
-
: {}),
|
|
298
|
-
role: 'restoration',
|
|
299
|
-
window: {
|
|
300
|
-
startTs: now,
|
|
301
|
-
endTs: windowEndTs,
|
|
302
|
-
},
|
|
303
|
-
claimPolicy,
|
|
304
|
-
spec,
|
|
305
|
-
eligibility: {
|
|
452
|
+
const tasks = [];
|
|
453
|
+
for (const candidate of candidates) {
|
|
454
|
+
await stateStore.recordPosted(candidate.instance_id, now);
|
|
455
|
+
const afterRecord = await stateStore.getCounters(candidate.instance_id);
|
|
456
|
+
counters.set(candidate.instance_id, afterRecord);
|
|
457
|
+
lastPostedLanguage = candidate.language;
|
|
458
|
+
totalPosted += 1;
|
|
459
|
+
lastPostedInstanceId = candidate.instance_id;
|
|
460
|
+
const remainingTargetSuccesses = genConfig.N_target_successes - afterRecord.successful;
|
|
461
|
+
const deadlineUnix = Math.floor((now + genConfig.posting_window_ms) / 1000);
|
|
462
|
+
const roundMonth = candidate.hf_split.replace('_', '-');
|
|
463
|
+
const windowEndTs = deadlineUnix * 1000;
|
|
464
|
+
const spec = SweRebenchV2TaskSchema.parse({
|
|
465
|
+
schemaVersion: 'swe-rebench-v2.v1',
|
|
466
|
+
instance_id: candidate.instance_id,
|
|
467
|
+
repo: candidate.repo ?? repoFromInstanceId(candidate.instance_id),
|
|
468
|
+
base_commit: candidate.base_commit ?? '0000000000000000000000000000000000000000',
|
|
469
|
+
language: normalizeLanguage(candidate),
|
|
470
|
+
problem_statement: candidate.problem_statement ?? `SWE-rebench v2 instance: ${candidate.instance_id}`,
|
|
471
|
+
interface: candidate.interface ?? '',
|
|
306
472
|
hf_dataset: candidate.hf_dataset,
|
|
307
473
|
hf_split: candidate.hf_split,
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
}
|
|
474
|
+
deadline_unix: deadlineUnix,
|
|
475
|
+
round_month: roundMonth,
|
|
476
|
+
});
|
|
477
|
+
tasks.push({
|
|
478
|
+
id: randomUUID(),
|
|
479
|
+
description: `SWE-rebench v2: ${candidate.instance_id}`,
|
|
480
|
+
solverType: SOLVER_TYPE,
|
|
481
|
+
contractId: CONTRACT_ID,
|
|
482
|
+
contractVersion: CONTRACT_VERSION,
|
|
483
|
+
...(config.solverNetManifestCid
|
|
484
|
+
? { solverNetManifestCid: config.solverNetManifestCid }
|
|
485
|
+
: {}),
|
|
486
|
+
role: 'restoration',
|
|
487
|
+
window: {
|
|
488
|
+
startTs: now,
|
|
489
|
+
endTs: windowEndTs,
|
|
490
|
+
},
|
|
491
|
+
claimPolicy: claimPolicyForPosting(genConfig, remainingTargetSuccesses),
|
|
492
|
+
spec,
|
|
493
|
+
eligibility: {
|
|
494
|
+
hf_dataset: candidate.hf_dataset,
|
|
495
|
+
hf_split: candidate.hf_split,
|
|
496
|
+
instance_id: candidate.instance_id,
|
|
497
|
+
posted_count_after_record: afterRecord.posted,
|
|
498
|
+
generatorConfig: genConfig,
|
|
499
|
+
...(publishedPool.artifactRef
|
|
500
|
+
? { [VETTED_POOL_REF_ELIGIBILITY_KEY]: publishedPool.artifactRef }
|
|
501
|
+
: {}),
|
|
502
|
+
},
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
console.log(`[swe-rebench-v2-gen] posting ${candidates.length} instance(s): ` +
|
|
506
|
+
candidates.map((candidate) => candidate.instance_id).join(', '));
|
|
507
|
+
lastPollSummary = {
|
|
508
|
+
...summarizePoolState({
|
|
509
|
+
pool: eligiblePool,
|
|
510
|
+
counters,
|
|
511
|
+
config: genConfig,
|
|
512
|
+
now,
|
|
513
|
+
lastPostedLanguage,
|
|
514
|
+
}),
|
|
515
|
+
posted: tasks.length,
|
|
311
516
|
};
|
|
312
|
-
console.log(`[swe-rebench-v2-gen] posting ${candidate.instance_id}`);
|
|
313
|
-
lastPollSummary = { poolSize: eligiblePool.length, posted: 1, skipped: 0 };
|
|
314
517
|
lastError = undefined;
|
|
315
|
-
|
|
518
|
+
const signed = [];
|
|
519
|
+
for (const task of tasks) {
|
|
520
|
+
signed.push(await maybeSignTask(task, { creator: config.creator, createdAt: now }));
|
|
521
|
+
}
|
|
522
|
+
return signed.length > 0 ? signed : null;
|
|
316
523
|
};
|
|
317
524
|
return Object.assign(tick, {
|
|
318
525
|
getState() {
|
|
@@ -325,6 +532,13 @@ function makeSweRebenchV2Generator(config) {
|
|
|
325
532
|
totalPosted,
|
|
326
533
|
lastPostedInstanceId,
|
|
327
534
|
config: liveConfig,
|
|
535
|
+
...(lastRepublication
|
|
536
|
+
? {
|
|
537
|
+
poolPublicationUpdatedAt: lastRepublication.publishedAt,
|
|
538
|
+
poolPublicationPriorSize: lastRepublication.priorSize,
|
|
539
|
+
poolPublicationCurrentSize: lastRepublication.currentSize,
|
|
540
|
+
}
|
|
541
|
+
: {}),
|
|
328
542
|
};
|
|
329
543
|
},
|
|
330
544
|
});
|
|
@@ -364,6 +578,8 @@ export function makeSweRebenchV2GeneratorForLaunchedRecord(opts) {
|
|
|
364
578
|
stateDir,
|
|
365
579
|
getGeneratorConfig: () => configRef.current,
|
|
366
580
|
solverNetManifestCid: recordRef.current.manifestCid,
|
|
581
|
+
ipfsRegistryUrl: staticConfig.ipfsRegistryUrl,
|
|
582
|
+
discoveryApi: staticConfig.discoveryApi,
|
|
367
583
|
creator: {
|
|
368
584
|
agentEoa: staticConfig.agentEoa,
|
|
369
585
|
safeAddress: staticConfig.safeAddress,
|