@jinn-network/client 0.1.6 → 0.1.7-canary.0a586ca9
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 +57 -2
- package/dist/adapters/mech/adapter.js +366 -63
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +17 -4
- package/dist/adapters/mech/contracts.js +19 -4
- 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 +24 -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 +7 -0
- package/dist/api/setup-endpoints.js +67 -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 +100 -105
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +167 -2
- package/dist/api/status-build.js +118 -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 +22 -0
- package/dist/chain-read-errors.js +41 -1
- 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/codedigest-revert-check.d.ts +33 -0
- package/dist/cli/commands/codedigest-revert-check.js +249 -0
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -0
- 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.d.ts +1 -0
- package/dist/cli/commands/solver-nets.js +179 -16
- 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/index.js +2 -0
- package/dist/cli/index.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 +287 -235
- package/dist/config.js +318 -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 +20 -3
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +22 -0
- package/dist/daemon/daemon.js +174 -31
- 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-BNs_ewI6.js +345 -0
- package/dist/dashboard/assets/index-C4huIsUW.css +32 -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 +469 -3
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.d.ts +5 -0
- package/dist/discovery/onchain.js +448 -18
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +174 -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 +37 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +100 -4
- package/dist/earning/bootstrap.js +239 -76
- 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 +124 -0
- package/dist/harnesses/cost-estimates.js +265 -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 +44 -8
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +1 -1
- package/dist/harnesses/impls/hermes-agent/config-builder.js +4 -2
- package/dist/harnesses/impls/hermes-agent/config-builder.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 +47 -4
- package/dist/harnesses/impls/learner/harness.js +105 -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 +199 -94
- 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/learner/revert-decision.d.ts +59 -0
- package/dist/learner/revert-decision.js +53 -0
- package/dist/learner/revert-decision.js.map +1 -0
- package/dist/learner/revert-stats.d.ts +24 -0
- package/dist/learner/revert-stats.js +44 -0
- package/dist/learner/revert-stats.js.map +1 -0
- package/dist/main.js +470 -142
- package/dist/main.js.map +1 -1
- package/dist/mcp/get-codedigest-reward.d.ts +13 -0
- package/dist/mcp/get-codedigest-reward.js +23 -0
- package/dist/mcp/get-codedigest-reward.js.map +1 -0
- package/dist/mcp/server.js +23 -0
- package/dist/mcp/server.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 +111 -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 +184 -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/pidfile-liveness.d.ts +44 -0
- package/dist/preflight/pidfile-liveness.js +103 -0
- package/dist/preflight/pidfile-liveness.js.map +1 -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/scripts/swe-rebench-v2-pytest-missing.json +16 -0
- 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-state.d.ts +15 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +19 -0
- package/dist/solver-types/_swe-rebench-v2-state.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 +145 -2
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +482 -44
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2-auto.d.ts +38 -14
- package/dist/solver-types/swe-rebench-v2-auto.js +87 -28
- package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2.d.ts +19 -2
- package/dist/solver-types/swe-rebench-v2.js +351 -96
- 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 +41 -7
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/registry-client-erc8004.js +11 -0
- package/dist/solvernets/registry-client-erc8004.js.map +1 -1
- package/dist/solvernets/store.d.ts +7 -2
- package/dist/solvernets/store.js +1 -0
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/cost-surface-status.d.ts +10 -0
- package/dist/spend/cost-surface-status.js +22 -0
- package/dist/spend/cost-surface-status.js.map +1 -0
- 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/codex-session.d.ts +12 -6
- package/dist/trajectory/transcript-parsers/codex-session.js +114 -13
- package/dist/trajectory/transcript-parsers/codex-session.js.map +1 -1
- package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
- package/dist/trajectory/transcript-session-dirs.d.ts +18 -0
- package/dist/trajectory/transcript-session-dirs.js +85 -0
- package/dist/trajectory/transcript-session-dirs.js.map +1 -0
- package/dist/trajectory/transcript-watcher.d.ts +20 -1
- package/dist/trajectory/transcript-watcher.js +98 -32
- package/dist/trajectory/transcript-watcher.js.map +1 -1
- 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/portfolio-v0.d.ts +3 -3
- package/dist/types/payloads/prediction-apy-v0.d.ts +8 -8
- package/dist/types/payloads/prediction-v0.d.ts +17 -17
- 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 +37 -13
- package/plugins/learner/skills/learn/consolidator-prompt.md +18 -1
- package/plugins/learner/skills/learn/promoter-prompt.md +72 -1
- 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,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,24 @@ 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
|
-
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
73
|
const rawMode = cfg['admissionMode'];
|
|
68
74
|
const admissionMode = rawMode === 'python-floor' ? 'python-floor' : DEFAULT_ADMISSION_MODE;
|
|
75
|
+
const maxClaimsPerOperator = positiveInt(cfg['maxClaimsPerOperator'] ?? legacyPolicy['maxClaimsPerOperator'], 0);
|
|
69
76
|
return {
|
|
70
77
|
N_target_successes,
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
posting_window_ms: positiveInt(cfg['posting_window_ms'], DEFAULT_GENERATOR_CONFIG.posting_window_ms),
|
|
79
|
+
post_batch_size: positiveInt(cfg['post_batch_size'], DEFAULT_GENERATOR_CONFIG.post_batch_size),
|
|
80
|
+
...(maxClaimsPerOperator > 0 ? { maxClaimsPerOperator } : {}),
|
|
81
|
+
claimLeaseTtlSeconds: positiveInt(cfg['claimLeaseTtlSeconds'] ?? legacyPolicy['claimLeaseTtlSeconds'], DEFAULT_GENERATOR_CONFIG.claimLeaseTtlSeconds),
|
|
73
82
|
admissionMode,
|
|
74
83
|
};
|
|
75
84
|
}
|
|
@@ -119,26 +128,77 @@ function sweRebenchDefaultClaimPolicy() {
|
|
|
119
128
|
const defaults = contract?.claimPolicyDefaults;
|
|
120
129
|
return {
|
|
121
130
|
mode: defaults?.mode === 'serial' ? 'exclusive' : 'parallel',
|
|
122
|
-
maxClaims: defaults?.maxClaims ??
|
|
123
|
-
maxClaimsPerOperator: defaults?.maxClaimsPerOperator ??
|
|
131
|
+
maxClaims: defaults?.maxClaims ?? DEFAULT_GENERATOR_CONFIG.N_target_successes,
|
|
132
|
+
maxClaimsPerOperator: defaults?.maxClaimsPerOperator ?? DEFAULT_GENERATOR_CONFIG.N_target_successes,
|
|
124
133
|
claimLeaseTtlSeconds: defaults?.claimLeaseTtlSeconds ?? 60 * 60,
|
|
125
134
|
};
|
|
126
135
|
}
|
|
127
|
-
function
|
|
136
|
+
function claimPolicyForPosting(genConfig, remainingTargetSuccesses) {
|
|
128
137
|
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));
|
|
138
|
+
const maxClaims = Math.max(1, remainingTargetSuccesses);
|
|
139
|
+
const maxClaimsPerOperator = Math.min(maxClaims, genConfig.maxClaimsPerOperator ?? maxClaims);
|
|
137
140
|
return {
|
|
138
141
|
...defaults,
|
|
139
142
|
maxClaims,
|
|
140
143
|
maxClaimsPerOperator,
|
|
141
|
-
claimLeaseTtlSeconds:
|
|
144
|
+
claimLeaseTtlSeconds: genConfig.claimLeaseTtlSeconds,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async function resolvePublishedVettedPool(args) {
|
|
148
|
+
if (!args.manifestCid) {
|
|
149
|
+
return { scorableIds: null, artifactRef: null, mode: 'no-manifest' };
|
|
150
|
+
}
|
|
151
|
+
const existing = await readVettedPoolArtifactPublication({
|
|
152
|
+
stateDir: args.stateDir,
|
|
153
|
+
manifestCid: args.manifestCid,
|
|
154
|
+
evalSemanticsVersion: EVAL_SEMANTICS_VERSION,
|
|
155
|
+
});
|
|
156
|
+
let priorSize;
|
|
157
|
+
if (existing) {
|
|
158
|
+
const scorable = await args.store.getScorableEntries(EVAL_SEMANTICS_VERSION);
|
|
159
|
+
const validatedNewer = scorable !== null && scorable.updatedAt > existing.updatedAt;
|
|
160
|
+
if (!validatedNewer) {
|
|
161
|
+
return {
|
|
162
|
+
scorableIds: loadVettedPoolArtifactScorableEntries(existing.artifact).ids,
|
|
163
|
+
artifactRef: existing.ref,
|
|
164
|
+
mode: 'published',
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
priorSize = existing.artifact.entries.length;
|
|
168
|
+
}
|
|
169
|
+
const artifact = await exportScorableVettedPoolArtifact(args.store, EVAL_SEMANTICS_VERSION, {
|
|
170
|
+
generatedAt: args.nowIso,
|
|
171
|
+
});
|
|
172
|
+
if (!artifact || artifact.entries.length === 0) {
|
|
173
|
+
return { scorableIds: null, artifactRef: null, mode: 'no-publication' };
|
|
174
|
+
}
|
|
175
|
+
const artifactCid = await args.upload(args.ipfsRegistryUrl, artifact);
|
|
176
|
+
const artifactRef = createVettedPoolArtifactRef({
|
|
177
|
+
manifestCid: args.manifestCid,
|
|
178
|
+
artifactCid,
|
|
179
|
+
artifactHash: hashVettedPoolArtifact(artifact),
|
|
180
|
+
evalSemanticsVersion: EVAL_SEMANTICS_VERSION,
|
|
181
|
+
publishedAt: args.nowIso,
|
|
182
|
+
});
|
|
183
|
+
await writeVettedPoolArtifactPublication({
|
|
184
|
+
stateDir: args.stateDir,
|
|
185
|
+
ref: artifactRef,
|
|
186
|
+
artifact,
|
|
187
|
+
updatedAt: args.nowIso,
|
|
188
|
+
});
|
|
189
|
+
return {
|
|
190
|
+
scorableIds: loadVettedPoolArtifactScorableEntries(artifact).ids,
|
|
191
|
+
artifactRef,
|
|
192
|
+
mode: 'published-from-local',
|
|
193
|
+
...(priorSize !== undefined
|
|
194
|
+
? {
|
|
195
|
+
republication: {
|
|
196
|
+
priorSize,
|
|
197
|
+
currentSize: artifact.entries.length,
|
|
198
|
+
publishedAt: args.nowIso,
|
|
199
|
+
},
|
|
200
|
+
}
|
|
201
|
+
: {}),
|
|
142
202
|
};
|
|
143
203
|
}
|
|
144
204
|
async function maybeSignTask(task, opts) {
|
|
@@ -160,7 +220,7 @@ async function maybeSignTask(task, opts) {
|
|
|
160
220
|
window: task.window,
|
|
161
221
|
spec: task.spec ?? {},
|
|
162
222
|
eligibility: task.eligibility ?? {},
|
|
163
|
-
claimPolicy: task.claimPolicy ??
|
|
223
|
+
claimPolicy: task.claimPolicy ?? sweRebenchDefaultClaimPolicy(),
|
|
164
224
|
creator: {
|
|
165
225
|
safeAddress: opts.creator.safeAddress,
|
|
166
226
|
agentEoa: opts.creator.agentEoa,
|
|
@@ -179,51 +239,132 @@ async function maybeSignTask(task, opts) {
|
|
|
179
239
|
function makeSweRebenchV2Generator(config) {
|
|
180
240
|
const stateStore = new GeneratorStateStore({ stateDir: config.stateDir });
|
|
181
241
|
const validatedPoolStore = new ValidatedPoolStore({ stateDir: config.stateDir });
|
|
242
|
+
const poolCache = new PoolCacheStore({ stateDir: config.stateDir });
|
|
182
243
|
let pool = [];
|
|
183
244
|
let poolLoadedAt = 0;
|
|
245
|
+
let poolFromCache = false;
|
|
184
246
|
let floorWarned = false;
|
|
247
|
+
let publicationWarned = false;
|
|
185
248
|
let lastPostedLanguage;
|
|
186
249
|
let lastPollAt;
|
|
187
250
|
let lastPollSummary;
|
|
188
251
|
let lastError;
|
|
189
252
|
let totalPosted = 0;
|
|
190
253
|
let lastPostedInstanceId;
|
|
254
|
+
let publishedPoolCache = null;
|
|
255
|
+
let lastValidatedPoolMtimeMs = -1;
|
|
256
|
+
let lastRepublication;
|
|
191
257
|
async function refreshPool() {
|
|
192
|
-
|
|
193
|
-
|
|
258
|
+
const result = await loadPoolWithCacheFallback({
|
|
259
|
+
loadPool: loadSweRebenchV2Pool,
|
|
260
|
+
cache: poolCache,
|
|
261
|
+
currentPool: pool,
|
|
262
|
+
});
|
|
263
|
+
pool = result.pool;
|
|
264
|
+
poolFromCache = result.fromCache;
|
|
265
|
+
lastError = result.error;
|
|
266
|
+
if (!result.error) {
|
|
267
|
+
// Fresh HF load — hold it for the full POOL_REFRESH_MS window.
|
|
194
268
|
poolLoadedAt = Date.now();
|
|
195
269
|
}
|
|
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));
|
|
270
|
+
if (result.fromCache) {
|
|
271
|
+
console.warn(`[swe-rebench-v2-gen] HF pool refresh failed; serving ${pool.length} tasks from disk cache — ` +
|
|
272
|
+
`generator stays live, will retry HF next poll: ${result.error?.message}`);
|
|
273
|
+
}
|
|
274
|
+
else if (result.error) {
|
|
275
|
+
console.warn(`[swe-rebench-v2-gen] pool refresh failed (pool size ${pool.length}): ${result.error.message}`);
|
|
203
276
|
}
|
|
204
277
|
}
|
|
205
278
|
const tick = async () => {
|
|
206
279
|
const now = Date.now();
|
|
280
|
+
// #802: re-read counters from disk at the start of every tick. last_task_id
|
|
281
|
+
// (and successful) are written by other loops (CreatorLoop.recordLastTaskId,
|
|
282
|
+
// delivery-watcher.recordSuccess) through separate store instances against
|
|
283
|
+
// the same file; without invalidating the long-lived cache here the
|
|
284
|
+
// generator never observes those writes and reposts every tick.
|
|
285
|
+
stateStore.invalidate();
|
|
207
286
|
const runtimeConfig = config.getGeneratorConfig
|
|
208
287
|
? config.getGeneratorConfig()
|
|
209
288
|
: config.generatorConfig;
|
|
210
289
|
const genConfig = normalizeGeneratorConfig(runtimeConfig);
|
|
211
|
-
|
|
212
|
-
//
|
|
213
|
-
|
|
290
|
+
// Refresh pool if stale, empty, or currently served from the disk cache
|
|
291
|
+
// (a cache-served pool retries HF every poll so the generator self-heals
|
|
292
|
+
// as soon as HF recovers — #466).
|
|
293
|
+
if (pool.length === 0 || poolFromCache || now - poolLoadedAt > POOL_REFRESH_MS) {
|
|
214
294
|
await refreshPool();
|
|
215
295
|
}
|
|
216
296
|
if (pool.length === 0) {
|
|
217
|
-
lastPollSummary = {
|
|
297
|
+
lastPollSummary = {
|
|
298
|
+
poolSize: 0,
|
|
299
|
+
posted: 0,
|
|
300
|
+
unposted: 0,
|
|
301
|
+
live: 0,
|
|
302
|
+
repostable: 0,
|
|
303
|
+
saturated: 0,
|
|
304
|
+
};
|
|
218
305
|
return null;
|
|
219
306
|
}
|
|
220
307
|
lastPollAt = new Date(now).toISOString();
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
308
|
+
const validatedPoolMtimeMs = await stat(join(config.stateDir, 'validated-pool.json'))
|
|
309
|
+
.then((s) => s.mtimeMs)
|
|
310
|
+
.catch(() => -1);
|
|
311
|
+
if (validatedPoolMtimeMs > lastValidatedPoolMtimeMs) {
|
|
312
|
+
publishedPoolCache = null;
|
|
313
|
+
lastValidatedPoolMtimeMs = validatedPoolMtimeMs;
|
|
314
|
+
}
|
|
315
|
+
let publishedPool = publishedPoolCache;
|
|
316
|
+
if (!publishedPool) {
|
|
317
|
+
publishedPool = await resolvePublishedVettedPool({
|
|
318
|
+
stateDir: config.stateDir,
|
|
319
|
+
manifestCid: config.solverNetManifestCid,
|
|
320
|
+
store: validatedPoolStore,
|
|
321
|
+
nowIso: lastPollAt,
|
|
322
|
+
ipfsRegistryUrl: config.ipfsRegistryUrl ??
|
|
323
|
+
process.env['JINN_IPFS_REGISTRY_URL'] ??
|
|
324
|
+
DEFAULT_IPFS_REGISTRY_URL,
|
|
325
|
+
upload: uploadToIpfs,
|
|
326
|
+
}).catch((err) => {
|
|
327
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
328
|
+
lastError = {
|
|
329
|
+
message: `vetted pool publication failed: ${message}`,
|
|
330
|
+
at: new Date().toISOString(),
|
|
331
|
+
};
|
|
332
|
+
console.warn(`[swe-rebench-v2-gen] ${lastError.message}`);
|
|
333
|
+
return null;
|
|
334
|
+
});
|
|
335
|
+
if (publishedPool?.artifactRef) {
|
|
336
|
+
publishedPoolCache = publishedPool;
|
|
337
|
+
if (publishedPool.republication) {
|
|
338
|
+
lastRepublication = publishedPool.republication;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (publishedPool === null) {
|
|
343
|
+
lastPollSummary = {
|
|
344
|
+
poolSize: 0,
|
|
345
|
+
posted: 0,
|
|
346
|
+
unposted: 0,
|
|
347
|
+
live: 0,
|
|
348
|
+
repostable: 0,
|
|
349
|
+
saturated: 0,
|
|
350
|
+
};
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
if (genConfig.admissionMode === 'required' &&
|
|
354
|
+
publishedPool.mode === 'no-manifest' &&
|
|
355
|
+
!publicationWarned) {
|
|
356
|
+
publicationWarned = true;
|
|
357
|
+
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.`);
|
|
358
|
+
}
|
|
359
|
+
// Restrict to instances in the launcher's published pool artifact. If the
|
|
360
|
+
// launcher has no publication yet but local scorable data exists, the
|
|
361
|
+
// helper above publishes it once before this filter runs. Python-floor is
|
|
362
|
+
// preserved only for local/dev generators.
|
|
363
|
+
const scorableIds = publishedPool.artifactRef
|
|
364
|
+
? publishedPool.scorableIds
|
|
365
|
+
: genConfig.admissionMode === 'python-floor'
|
|
366
|
+
? await validatedPoolStore.getScorableIds(EVAL_SEMANTICS_VERSION)
|
|
367
|
+
: null;
|
|
227
368
|
const { pool: eligiblePool, mode: poolMode } = filterToScorablePool(pool, scorableIds, genConfig.admissionMode);
|
|
228
369
|
if (poolMode === 'admission-required-no-data' && !floorWarned) {
|
|
229
370
|
floorWarned = true;
|
|
@@ -237,7 +378,14 @@ function makeSweRebenchV2Generator(config) {
|
|
|
237
378
|
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
379
|
}
|
|
239
380
|
if (eligiblePool.length === 0) {
|
|
240
|
-
lastPollSummary = {
|
|
381
|
+
lastPollSummary = {
|
|
382
|
+
poolSize: 0,
|
|
383
|
+
posted: 0,
|
|
384
|
+
unposted: 0,
|
|
385
|
+
live: 0,
|
|
386
|
+
repostable: 0,
|
|
387
|
+
saturated: 0,
|
|
388
|
+
};
|
|
241
389
|
lastError = undefined;
|
|
242
390
|
return null;
|
|
243
391
|
}
|
|
@@ -246,73 +394,171 @@ function makeSweRebenchV2Generator(config) {
|
|
|
246
394
|
for (const task of eligiblePool) {
|
|
247
395
|
counters.set(task.instance_id, await stateStore.getCounters(task.instance_id));
|
|
248
396
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
397
|
+
// Reconcile each instance's `successful` against network truth (#669):
|
|
398
|
+
// take max(local, network). On indexer outage the tick aborts — silently
|
|
399
|
+
// falling through to local-only counters is exactly the bug being fixed.
|
|
400
|
+
// The discoveryApi/manifestCid pair is optional so test paths can skip.
|
|
401
|
+
if (config.discoveryApi && config.solverNetManifestCid) {
|
|
402
|
+
try {
|
|
403
|
+
const networkSuccesses = await config.discoveryApi.getInstanceSuccessCounts({
|
|
404
|
+
manifestCid: config.solverNetManifestCid,
|
|
405
|
+
});
|
|
406
|
+
for (const task of eligiblePool) {
|
|
407
|
+
const local = counters.get(task.instance_id);
|
|
408
|
+
if (!local)
|
|
409
|
+
continue;
|
|
410
|
+
const networkSuccess = networkSuccesses.get(task.instance_id) ?? 0;
|
|
411
|
+
if (networkSuccess > local.successful) {
|
|
412
|
+
counters.set(task.instance_id, { ...local, successful: networkSuccess });
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
catch (err) {
|
|
417
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
418
|
+
lastError = {
|
|
419
|
+
message: `network-truth reconciliation failed: ${message}`,
|
|
420
|
+
at: new Date().toISOString(),
|
|
421
|
+
};
|
|
422
|
+
console.warn(`[swe-rebench-v2-gen] ${lastError.message} — skipping this tick`);
|
|
423
|
+
lastPollSummary = {
|
|
424
|
+
poolSize: eligiblePool.length,
|
|
425
|
+
posted: 0,
|
|
426
|
+
unposted: 0,
|
|
427
|
+
live: 0,
|
|
428
|
+
repostable: 0,
|
|
429
|
+
saturated: 0,
|
|
430
|
+
};
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
254
433
|
}
|
|
255
|
-
|
|
434
|
+
// Reconcile claim-budget exhaustion against network truth (#802): a posting
|
|
435
|
+
// is exhausted when its on-chain consumed slots reach maxClaims. Keyed by
|
|
436
|
+
// taskId; the classifier joins via each instance's last_task_id. On a
|
|
437
|
+
// genuine indexer outage (throw) the tick aborts — silently continuing with
|
|
438
|
+
// no claim snapshot would mask real exhaustion (exhausted postings classify
|
|
439
|
+
// `live`), suppress legitimate reposts, and under-serve N. A *successful*
|
|
440
|
+
// empty map (e.g. onchain-floor mode) is NOT an outage and is allowed
|
|
441
|
+
// through: it makes every posting inert (post-once), which is the safe
|
|
442
|
+
// degradation, not a storm.
|
|
443
|
+
let claimCounts;
|
|
444
|
+
if (config.discoveryApi && config.solverNetManifestCid) {
|
|
445
|
+
try {
|
|
446
|
+
// getInstanceClaimCounts is keyed by taskId; its values are a structural
|
|
447
|
+
// superset of InstanceClaimSnapshot, so the map is used directly.
|
|
448
|
+
claimCounts = await config.discoveryApi.getInstanceClaimCounts({
|
|
449
|
+
manifestCid: config.solverNetManifestCid,
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
catch (err) {
|
|
453
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
454
|
+
lastError = {
|
|
455
|
+
message: `claim-budget reconciliation failed: ${message}`,
|
|
456
|
+
at: new Date().toISOString(),
|
|
457
|
+
};
|
|
458
|
+
console.warn(`[swe-rebench-v2-gen] ${lastError.message} — skipping this tick`);
|
|
459
|
+
lastPollSummary = {
|
|
460
|
+
poolSize: eligiblePool.length,
|
|
461
|
+
posted: 0,
|
|
462
|
+
unposted: 0,
|
|
463
|
+
live: 0,
|
|
464
|
+
repostable: 0,
|
|
465
|
+
saturated: 0,
|
|
466
|
+
};
|
|
467
|
+
return null;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
const candidates = selectNextPostingCandidates({
|
|
256
471
|
pool: eligiblePool,
|
|
257
472
|
counters,
|
|
258
473
|
config: genConfig,
|
|
259
474
|
now,
|
|
475
|
+
claimCounts,
|
|
260
476
|
lastPostedLanguage,
|
|
261
477
|
});
|
|
262
|
-
if (
|
|
263
|
-
lastPollSummary = {
|
|
478
|
+
if (candidates.length === 0) {
|
|
479
|
+
lastPollSummary = summarizePoolState({
|
|
480
|
+
pool: eligiblePool,
|
|
481
|
+
counters,
|
|
482
|
+
config: genConfig,
|
|
483
|
+
now,
|
|
484
|
+
claimCounts,
|
|
485
|
+
lastPostedLanguage,
|
|
486
|
+
});
|
|
264
487
|
lastError = undefined;
|
|
265
488
|
return null;
|
|
266
489
|
}
|
|
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: {
|
|
490
|
+
const tasks = [];
|
|
491
|
+
for (const candidate of candidates) {
|
|
492
|
+
await stateStore.recordPosted(candidate.instance_id, now);
|
|
493
|
+
const afterRecord = await stateStore.getCounters(candidate.instance_id);
|
|
494
|
+
counters.set(candidate.instance_id, afterRecord);
|
|
495
|
+
lastPostedLanguage = candidate.language;
|
|
496
|
+
totalPosted += 1;
|
|
497
|
+
lastPostedInstanceId = candidate.instance_id;
|
|
498
|
+
const remainingTargetSuccesses = genConfig.N_target_successes - afterRecord.successful;
|
|
499
|
+
const deadlineUnix = Math.floor((now + genConfig.posting_window_ms) / 1000);
|
|
500
|
+
const roundMonth = candidate.hf_split.replace('_', '-');
|
|
501
|
+
const windowEndTs = deadlineUnix * 1000;
|
|
502
|
+
const spec = SweRebenchV2TaskSchema.parse({
|
|
503
|
+
schemaVersion: 'swe-rebench-v2.v1',
|
|
504
|
+
instance_id: candidate.instance_id,
|
|
505
|
+
repo: candidate.repo ?? repoFromInstanceId(candidate.instance_id),
|
|
506
|
+
base_commit: candidate.base_commit ?? '0000000000000000000000000000000000000000',
|
|
507
|
+
language: normalizeLanguage(candidate),
|
|
508
|
+
problem_statement: candidate.problem_statement ?? `SWE-rebench v2 instance: ${candidate.instance_id}`,
|
|
509
|
+
interface: candidate.interface ?? '',
|
|
306
510
|
hf_dataset: candidate.hf_dataset,
|
|
307
511
|
hf_split: candidate.hf_split,
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
}
|
|
512
|
+
deadline_unix: deadlineUnix,
|
|
513
|
+
round_month: roundMonth,
|
|
514
|
+
});
|
|
515
|
+
tasks.push({
|
|
516
|
+
id: randomUUID(),
|
|
517
|
+
description: `SWE-rebench v2: ${candidate.instance_id}`,
|
|
518
|
+
solverType: SOLVER_TYPE,
|
|
519
|
+
contractId: CONTRACT_ID,
|
|
520
|
+
contractVersion: CONTRACT_VERSION,
|
|
521
|
+
...(config.solverNetManifestCid
|
|
522
|
+
? { solverNetManifestCid: config.solverNetManifestCid }
|
|
523
|
+
: {}),
|
|
524
|
+
role: 'restoration',
|
|
525
|
+
window: {
|
|
526
|
+
startTs: now,
|
|
527
|
+
endTs: windowEndTs,
|
|
528
|
+
},
|
|
529
|
+
claimPolicy: claimPolicyForPosting(genConfig, remainingTargetSuccesses),
|
|
530
|
+
spec,
|
|
531
|
+
eligibility: {
|
|
532
|
+
hf_dataset: candidate.hf_dataset,
|
|
533
|
+
hf_split: candidate.hf_split,
|
|
534
|
+
instance_id: candidate.instance_id,
|
|
535
|
+
posted_count_after_record: afterRecord.posted,
|
|
536
|
+
generatorConfig: genConfig,
|
|
537
|
+
...(publishedPool.artifactRef
|
|
538
|
+
? { [VETTED_POOL_REF_ELIGIBILITY_KEY]: publishedPool.artifactRef }
|
|
539
|
+
: {}),
|
|
540
|
+
},
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
console.log(`[swe-rebench-v2-gen] posting ${candidates.length} instance(s): ` +
|
|
544
|
+
candidates.map((candidate) => candidate.instance_id).join(', '));
|
|
545
|
+
lastPollSummary = {
|
|
546
|
+
...summarizePoolState({
|
|
547
|
+
pool: eligiblePool,
|
|
548
|
+
counters,
|
|
549
|
+
config: genConfig,
|
|
550
|
+
now,
|
|
551
|
+
claimCounts,
|
|
552
|
+
lastPostedLanguage,
|
|
553
|
+
}),
|
|
554
|
+
posted: tasks.length,
|
|
311
555
|
};
|
|
312
|
-
console.log(`[swe-rebench-v2-gen] posting ${candidate.instance_id}`);
|
|
313
|
-
lastPollSummary = { poolSize: eligiblePool.length, posted: 1, skipped: 0 };
|
|
314
556
|
lastError = undefined;
|
|
315
|
-
|
|
557
|
+
const signed = [];
|
|
558
|
+
for (const task of tasks) {
|
|
559
|
+
signed.push(await maybeSignTask(task, { creator: config.creator, createdAt: now }));
|
|
560
|
+
}
|
|
561
|
+
return signed.length > 0 ? signed : null;
|
|
316
562
|
};
|
|
317
563
|
return Object.assign(tick, {
|
|
318
564
|
getState() {
|
|
@@ -325,6 +571,13 @@ function makeSweRebenchV2Generator(config) {
|
|
|
325
571
|
totalPosted,
|
|
326
572
|
lastPostedInstanceId,
|
|
327
573
|
config: liveConfig,
|
|
574
|
+
...(lastRepublication
|
|
575
|
+
? {
|
|
576
|
+
poolPublicationUpdatedAt: lastRepublication.publishedAt,
|
|
577
|
+
poolPublicationPriorSize: lastRepublication.priorSize,
|
|
578
|
+
poolPublicationCurrentSize: lastRepublication.currentSize,
|
|
579
|
+
}
|
|
580
|
+
: {}),
|
|
328
581
|
};
|
|
329
582
|
},
|
|
330
583
|
});
|
|
@@ -364,6 +617,8 @@ export function makeSweRebenchV2GeneratorForLaunchedRecord(opts) {
|
|
|
364
617
|
stateDir,
|
|
365
618
|
getGeneratorConfig: () => configRef.current,
|
|
366
619
|
solverNetManifestCid: recordRef.current.manifestCid,
|
|
620
|
+
ipfsRegistryUrl: staticConfig.ipfsRegistryUrl,
|
|
621
|
+
discoveryApi: staticConfig.discoveryApi,
|
|
367
622
|
creator: {
|
|
368
623
|
agentEoa: staticConfig.agentEoa,
|
|
369
624
|
safeAddress: staticConfig.safeAddress,
|