@jinn-network/client 0.1.6 → 0.1.7-canary.17a8ecb8
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 -1
- package/dist/adapters/mech/adapter.js +268 -57
- 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/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 +49 -1
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/codex-doctor-endpoint.d.ts +73 -0
- package/dist/api/codex-doctor-endpoint.js +177 -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 +14 -0
- package/dist/api/gather-status.js +494 -19
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/hermes-doctor-endpoint.d.ts +117 -0
- package/dist/api/hermes-doctor-endpoint.js +229 -23
- package/dist/api/hermes-doctor-endpoint.js.map +1 -1
- package/dist/api/launcher-status.d.ts +22 -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/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 +72 -1
- 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 +71 -43
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +112 -0
- package/dist/api/status-build.js +98 -18
- package/dist/api/status-build.js.map +1 -1
- 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/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-8yHQgi7p.js +345 -0
- package/dist/dashboard/assets/index-BOBhJ76-.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 +142 -3
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.d.ts +5 -0
- package/dist/discovery/onchain.js +407 -15
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +45 -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 +10 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +92 -1
- package/dist/earning/bootstrap.js +203 -63
- 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/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 +72 -0
- package/dist/harnesses/engine/engine.js +118 -8
- 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/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/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/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/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.js +9 -1
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/main.js +413 -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 +45 -20
- package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2.d.ts +13 -2
- package/dist/solver-types/swe-rebench-v2.js +237 -95
- 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.js +35 -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 +43 -0
- package/dist/store/store.js +236 -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 +30 -12
- package/dist/dashboard/assets/index-DOlzFN8a.css +0 -32
- package/dist/dashboard/assets/index-NkZ7CTAT.js +0 -140
|
@@ -49,6 +49,26 @@ export interface LoadedSolverNet {
|
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
export declare function taskRoleForOperatorRole(role: SolverNetOperatorRole): SolverNetTaskRole | undefined;
|
|
52
|
+
export declare function rolesFromJoinedConfig(net: JoinedSolverNetConfig): SolverNetOperatorRole[];
|
|
53
|
+
/**
|
|
54
|
+
* Format a joined-entry contract back into the `<id>.<version>` solverType
|
|
55
|
+
* string the runtime uses for dispatch. Returns `undefined` when the joined
|
|
56
|
+
* entry has no contract (mid-migration synthesized entries can land here).
|
|
57
|
+
*/
|
|
58
|
+
export declare function solverTypeFromJoinedContract(net: Pick<JoinedSolverNetConfig, 'contract'>): string | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Operator-facing display name for a joined SolverNet — the registry
|
|
61
|
+
* `name` field if present, otherwise the manifest CID. Mirrors the same
|
|
62
|
+
* resolution the registry uses when registering entries.
|
|
63
|
+
*/
|
|
64
|
+
export declare function joinedDisplayName(cid: string, net: Pick<JoinedSolverNetConfig, 'name'>): string;
|
|
65
|
+
/**
|
|
66
|
+
* Find a joined SolverNet entry by its operator-facing display name. The
|
|
67
|
+
* lookup also matches against the manifest CID so callers that resolve a
|
|
68
|
+
* net by either identifier (legacy short-name or post-join CID) keep
|
|
69
|
+
* working. Returns the matched entry, or `undefined` if no match.
|
|
70
|
+
*/
|
|
71
|
+
export declare function findJoinedByName(joinedSolverNets: Record<string, JoinedSolverNetConfig> | undefined, needle: string): JoinedSolverNetConfig | undefined;
|
|
52
72
|
export declare class SolverNetRegistry {
|
|
53
73
|
private readonly nets;
|
|
54
74
|
register(net: LoadedSolverNet): void;
|
|
@@ -59,6 +79,5 @@ export declare class SolverNetRegistry {
|
|
|
59
79
|
claudeModelSelections(): Record<string, string>;
|
|
60
80
|
}
|
|
61
81
|
export declare function loadSolverNets(config: {
|
|
62
|
-
solverNets: Record<string, SolverNetConfig>;
|
|
63
82
|
joinedSolverNets?: Record<string, JoinedSolverNetConfig>;
|
|
64
83
|
}): Promise<SolverNetRegistry>;
|
|
@@ -20,7 +20,7 @@ function rolesFromConfig(net) {
|
|
|
20
20
|
return Array.from(new Set(net.roles));
|
|
21
21
|
return ['solving'];
|
|
22
22
|
}
|
|
23
|
-
function rolesFromJoinedConfig(net) {
|
|
23
|
+
export function rolesFromJoinedConfig(net) {
|
|
24
24
|
const roles = [];
|
|
25
25
|
for (const role of net.roles) {
|
|
26
26
|
if (role === 'solver')
|
|
@@ -30,6 +30,41 @@ function rolesFromJoinedConfig(net) {
|
|
|
30
30
|
}
|
|
31
31
|
return Array.from(new Set(roles));
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Format a joined-entry contract back into the `<id>.<version>` solverType
|
|
35
|
+
* string the runtime uses for dispatch. Returns `undefined` when the joined
|
|
36
|
+
* entry has no contract (mid-migration synthesized entries can land here).
|
|
37
|
+
*/
|
|
38
|
+
export function solverTypeFromJoinedContract(net) {
|
|
39
|
+
if (!net.contract)
|
|
40
|
+
return undefined;
|
|
41
|
+
return `${net.contract.id}.${net.contract.version}`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Operator-facing display name for a joined SolverNet — the registry
|
|
45
|
+
* `name` field if present, otherwise the manifest CID. Mirrors the same
|
|
46
|
+
* resolution the registry uses when registering entries.
|
|
47
|
+
*/
|
|
48
|
+
export function joinedDisplayName(cid, net) {
|
|
49
|
+
return net.name ?? cid;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Find a joined SolverNet entry by its operator-facing display name. The
|
|
53
|
+
* lookup also matches against the manifest CID so callers that resolve a
|
|
54
|
+
* net by either identifier (legacy short-name or post-join CID) keep
|
|
55
|
+
* working. Returns the matched entry, or `undefined` if no match.
|
|
56
|
+
*/
|
|
57
|
+
export function findJoinedByName(joinedSolverNets, needle) {
|
|
58
|
+
if (!joinedSolverNets)
|
|
59
|
+
return undefined;
|
|
60
|
+
for (const [cid, entry] of Object.entries(joinedSolverNets)) {
|
|
61
|
+
if (joinedDisplayName(cid, entry) === needle)
|
|
62
|
+
return entry;
|
|
63
|
+
if (entry.manifestCid === needle)
|
|
64
|
+
return entry;
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
33
68
|
function defaultRuntimePluginsForSolverType(solverType) {
|
|
34
69
|
if (solverType === 'swe-rebench-v2.v1') {
|
|
35
70
|
return ['bundled:swe-rebench-v2-runtime'];
|
|
@@ -120,30 +155,11 @@ export class SolverNetRegistry {
|
|
|
120
155
|
return out;
|
|
121
156
|
}
|
|
122
157
|
}
|
|
123
|
-
/**
|
|
124
|
-
* Parse the legacy operator-config `solverType` string (`'<id>.<version>'`)
|
|
125
|
-
* into a `{ id, version }` ref so we can call the contract registry's
|
|
126
|
-
* non-deprecated lookup signature. The operator config field itself is
|
|
127
|
-
* carried forward for now (Task 8 of
|
|
128
|
-
* `spec/2026-05-05-solvernet-creation-and-launch.md` — internal dispatch
|
|
129
|
-
* keeps `solverType` as a routing alias; Task 30 removes it).
|
|
130
|
-
*/
|
|
131
|
-
function parseSolverTypeRef(solverType) {
|
|
132
|
-
const dot = solverType.lastIndexOf('.');
|
|
133
|
-
if (dot <= 0 || dot === solverType.length - 1)
|
|
134
|
-
return undefined;
|
|
135
|
-
return { id: solverType.slice(0, dot), version: solverType.slice(dot + 1) };
|
|
136
|
-
}
|
|
137
158
|
export async function loadSolverNets(config) {
|
|
138
159
|
const registry = new SolverNetRegistry();
|
|
139
|
-
async function registerFromConfig(name, net) {
|
|
160
|
+
async function registerFromConfig(name, net, contract) {
|
|
140
161
|
if (!net.enabled)
|
|
141
162
|
return;
|
|
142
|
-
const ref = parseSolverTypeRef(net.solverType);
|
|
143
|
-
const contract = ref ? getSolverNetContract(ref) : undefined;
|
|
144
|
-
if (!contract) {
|
|
145
|
-
throw new Error(`SolverNet ${name} has no registered SolverNetContract for ${net.solverType}`);
|
|
146
|
-
}
|
|
147
163
|
const runtimePlugins = [];
|
|
148
164
|
const seenSources = new Set();
|
|
149
165
|
const seenNames = new Set();
|
|
@@ -208,10 +224,7 @@ export async function loadSolverNets(config) {
|
|
|
208
224
|
...(joined.model ? { model: joined.model } : {}),
|
|
209
225
|
plugins: [...defaultPlugins, ...(joined.plugins ?? [])],
|
|
210
226
|
taskGenerator: { enabled: false },
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
for (const [name, net] of Object.entries(config.solverNets)) {
|
|
214
|
-
await registerFromConfig(name, net);
|
|
227
|
+
}, contract);
|
|
215
228
|
}
|
|
216
229
|
return registry;
|
|
217
230
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/solver-nets/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAA0B,MAAM,gBAAgB,CAAC;AAE9E,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAgC,CAAC;AA6C1E,MAAM,UAAU,uBAAuB,CAAC,IAA2B;IACjE,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC;IAC7C,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAC/C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,GAAoB;IAC3C,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/solver-nets/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disk cache for the swe-rebench-v2 task pool. The pool is sourced from the
|
|
3
|
+
* HuggingFace datasets-server; this cache lets the generator keep posting
|
|
4
|
+
* tasks across HF outages instead of silently going idle (#466).
|
|
5
|
+
*
|
|
6
|
+
* Stored at `<stateDir>/pool-cache.json`, alongside `generator-state.json`
|
|
7
|
+
* and `validated-pool.json`. Mirrors the GeneratorStateStore persistence
|
|
8
|
+
* pattern in `_swe-rebench-v2-state.ts`.
|
|
9
|
+
*/
|
|
10
|
+
import type { PoolTask } from './_swe-rebench-v2-pool.js';
|
|
11
|
+
/** A pool read back from disk. */
|
|
12
|
+
export interface CachedPool {
|
|
13
|
+
tasks: PoolTask[];
|
|
14
|
+
/** ISO timestamp the cache was written. */
|
|
15
|
+
savedAt: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class PoolCacheStore {
|
|
18
|
+
private cacheFile;
|
|
19
|
+
constructor(opts: {
|
|
20
|
+
stateDir: string;
|
|
21
|
+
});
|
|
22
|
+
/** Persist the pool. Creates the state dir if missing. */
|
|
23
|
+
write(tasks: PoolTask[]): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Read the cached pool. Returns null when the file is absent, unparseable,
|
|
26
|
+
* or carries an unrecognised schema — never throws, so a corrupt cache
|
|
27
|
+
* degrades to "no cache" rather than crashing the generator.
|
|
28
|
+
*/
|
|
29
|
+
read(): Promise<CachedPool | null>;
|
|
30
|
+
}
|
|
31
|
+
/** Outcome of an HF pool load attempt with cache fallback. */
|
|
32
|
+
export interface PoolLoadResult {
|
|
33
|
+
/** The pool to use. May be empty only when HF failed and no cache exists. */
|
|
34
|
+
pool: PoolTask[];
|
|
35
|
+
/** True when `pool` was served from the disk cache rather than a live load. */
|
|
36
|
+
fromCache: boolean;
|
|
37
|
+
/** Set when the live HF load failed (even if a fallback pool was found). */
|
|
38
|
+
error?: {
|
|
39
|
+
message: string;
|
|
40
|
+
at: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load the pool from HF, falling back to the disk cache on failure.
|
|
45
|
+
*
|
|
46
|
+
* - load succeeds -> return it, persist it to the cache.
|
|
47
|
+
* - load fails, pool held -> keep the in-memory pool (no cache read needed).
|
|
48
|
+
* - load fails, no pool, cache present -> serve the cache (`fromCache: true`).
|
|
49
|
+
* - load fails, no pool, no cache -> empty pool (generator idle).
|
|
50
|
+
*
|
|
51
|
+
* Pure orchestration: the loader and cache are injected so every branch is
|
|
52
|
+
* unit-testable. Never throws.
|
|
53
|
+
*/
|
|
54
|
+
export declare function loadPoolWithCacheFallback(args: {
|
|
55
|
+
loadPool: () => Promise<PoolTask[]>;
|
|
56
|
+
cache: PoolCacheStore;
|
|
57
|
+
currentPool: PoolTask[];
|
|
58
|
+
}): Promise<PoolLoadResult>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disk cache for the swe-rebench-v2 task pool. The pool is sourced from the
|
|
3
|
+
* HuggingFace datasets-server; this cache lets the generator keep posting
|
|
4
|
+
* tasks across HF outages instead of silently going idle (#466).
|
|
5
|
+
*
|
|
6
|
+
* Stored at `<stateDir>/pool-cache.json`, alongside `generator-state.json`
|
|
7
|
+
* and `validated-pool.json`. Mirrors the GeneratorStateStore persistence
|
|
8
|
+
* pattern in `_swe-rebench-v2-state.ts`.
|
|
9
|
+
*/
|
|
10
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
11
|
+
import { join, dirname } from 'node:path';
|
|
12
|
+
const SCHEMA_VERSION = 'swe-rebench-v2-pool-cache.v1';
|
|
13
|
+
export class PoolCacheStore {
|
|
14
|
+
cacheFile;
|
|
15
|
+
constructor(opts) {
|
|
16
|
+
this.cacheFile = join(opts.stateDir, 'pool-cache.json');
|
|
17
|
+
}
|
|
18
|
+
/** Persist the pool. Creates the state dir if missing. */
|
|
19
|
+
async write(tasks) {
|
|
20
|
+
const payload = {
|
|
21
|
+
schemaVersion: SCHEMA_VERSION,
|
|
22
|
+
savedAt: new Date().toISOString(),
|
|
23
|
+
tasks,
|
|
24
|
+
};
|
|
25
|
+
await mkdir(dirname(this.cacheFile), { recursive: true });
|
|
26
|
+
await writeFile(this.cacheFile, JSON.stringify(payload, null, 2));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Read the cached pool. Returns null when the file is absent, unparseable,
|
|
30
|
+
* or carries an unrecognised schema — never throws, so a corrupt cache
|
|
31
|
+
* degrades to "no cache" rather than crashing the generator.
|
|
32
|
+
*/
|
|
33
|
+
async read() {
|
|
34
|
+
let raw;
|
|
35
|
+
try {
|
|
36
|
+
raw = await readFile(this.cacheFile, 'utf8');
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const parsed = JSON.parse(raw);
|
|
43
|
+
if (parsed.schemaVersion !== SCHEMA_VERSION ||
|
|
44
|
+
typeof parsed.savedAt !== 'string' ||
|
|
45
|
+
!Array.isArray(parsed.tasks)) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return { tasks: parsed.tasks, savedAt: parsed.savedAt };
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load the pool from HF, falling back to the disk cache on failure.
|
|
57
|
+
*
|
|
58
|
+
* - load succeeds -> return it, persist it to the cache.
|
|
59
|
+
* - load fails, pool held -> keep the in-memory pool (no cache read needed).
|
|
60
|
+
* - load fails, no pool, cache present -> serve the cache (`fromCache: true`).
|
|
61
|
+
* - load fails, no pool, no cache -> empty pool (generator idle).
|
|
62
|
+
*
|
|
63
|
+
* Pure orchestration: the loader and cache are injected so every branch is
|
|
64
|
+
* unit-testable. Never throws.
|
|
65
|
+
*/
|
|
66
|
+
export async function loadPoolWithCacheFallback(args) {
|
|
67
|
+
try {
|
|
68
|
+
const pool = await args.loadPool();
|
|
69
|
+
await args.cache.write(pool);
|
|
70
|
+
return { pool, fromCache: false };
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const error = {
|
|
74
|
+
message: err instanceof Error ? err.message : String(err),
|
|
75
|
+
at: new Date().toISOString(),
|
|
76
|
+
};
|
|
77
|
+
if (args.currentPool.length > 0) {
|
|
78
|
+
return { pool: args.currentPool, fromCache: false, error };
|
|
79
|
+
}
|
|
80
|
+
const cached = await args.cache.read();
|
|
81
|
+
if (cached && cached.tasks.length > 0) {
|
|
82
|
+
return { pool: cached.tasks, fromCache: true, error };
|
|
83
|
+
}
|
|
84
|
+
return { pool: [], fromCache: false, error };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=_swe-rebench-v2-pool-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_swe-rebench-v2-pool-cache.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-pool-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Spec: docs/superpowers/specs/2026-05-06-agent-harness-solvernet-design.md §3.6
|
|
7
7
|
* DR: log/decisions/2026-05-06-task-generator-success-cap.md
|
|
8
8
|
*/
|
|
9
|
+
import { type FetchHfWithRetryOptions } from '../harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js';
|
|
9
10
|
export interface PoolTask {
|
|
10
11
|
instance_id: string;
|
|
11
12
|
hf_dataset: string;
|
|
@@ -43,9 +44,15 @@ export interface BuildPoolArgs {
|
|
|
43
44
|
* partitions are kept only from the earliest partition (first-seen wins).
|
|
44
45
|
*/
|
|
45
46
|
export declare function buildHistoricalPool(args: BuildPoolArgs): Promise<PoolTask[]>;
|
|
46
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* HTTP fetcher for HF datasets-server rows API. Use as `fetchSplit` in
|
|
49
|
+
* production. Routes through {@link fetchHfWithRetry} so 408/429/5xx are
|
|
50
|
+
* retried with jittered backoff and the process-wide HF min-interval is
|
|
51
|
+
* honoured (issue #578). Throws on non-2xx after retry exhaustion —
|
|
52
|
+
* previously returned `[]` silently, which is what hid the 290 lost tasks.
|
|
53
|
+
*/
|
|
47
54
|
export declare function fetchHfSplit(args: {
|
|
48
55
|
dataset: string;
|
|
49
56
|
split: string;
|
|
50
57
|
limit?: number;
|
|
51
|
-
}): Promise<any[]>;
|
|
58
|
+
}, opts?: FetchHfWithRetryOptions): Promise<any[]>;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Spec: docs/superpowers/specs/2026-05-06-agent-harness-solvernet-design.md §3.6
|
|
7
7
|
* DR: log/decisions/2026-05-06-task-generator-success-cap.md
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { fetchHfWithRetry, } from '../harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js';
|
|
10
10
|
/** Filter dataset split names to only the YYYY_MM monthly partitions. */
|
|
11
11
|
export function listMonthlyPartitions(splits) {
|
|
12
12
|
return splits
|
|
@@ -43,30 +43,25 @@ export async function buildHistoricalPool(args) {
|
|
|
43
43
|
}
|
|
44
44
|
return pool;
|
|
45
45
|
}
|
|
46
|
-
/**
|
|
47
|
-
|
|
46
|
+
/**
|
|
47
|
+
* HTTP fetcher for HF datasets-server rows API. Use as `fetchSplit` in
|
|
48
|
+
* production. Routes through {@link fetchHfWithRetry} so 408/429/5xx are
|
|
49
|
+
* retried with jittered backoff and the process-wide HF min-interval is
|
|
50
|
+
* honoured (issue #578). Throws on non-2xx after retry exhaustion —
|
|
51
|
+
* previously returned `[]` silently, which is what hid the 290 lost tasks.
|
|
52
|
+
*/
|
|
53
|
+
export async function fetchHfSplit(args, opts = {}) {
|
|
48
54
|
const url = new URL('https://datasets-server.huggingface.co/rows');
|
|
49
55
|
url.searchParams.set('dataset', args.dataset);
|
|
50
56
|
url.searchParams.set('config', 'default');
|
|
51
57
|
url.searchParams.set('split', args.split);
|
|
52
58
|
url.searchParams.set('offset', '0');
|
|
53
59
|
url.searchParams.set('length', String(args.limit ?? 100));
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const parsed = JSON.parse(body);
|
|
61
|
-
resolve((parsed.rows ?? []).map((r) => r.row));
|
|
62
|
-
}
|
|
63
|
-
catch (e) {
|
|
64
|
-
reject(e);
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
req.on('error', reject);
|
|
69
|
-
req.end();
|
|
70
|
-
});
|
|
60
|
+
const res = await fetchHfWithRetry(url.toString(), opts);
|
|
61
|
+
if (!res.ok) {
|
|
62
|
+
throw Object.assign(new Error(`HF datasets-server returned ${res.status} for ${args.dataset}/${args.split}`), { httpStatus: res.status });
|
|
63
|
+
}
|
|
64
|
+
const json = (await res.json());
|
|
65
|
+
return (json.rows ?? []).map((r) => r.row);
|
|
71
66
|
}
|
|
72
67
|
//# sourceMappingURL=_swe-rebench-v2-pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_swe-rebench-v2-pool.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"_swe-rebench-v2-pool.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,7 @@ export interface CommandResult {
|
|
|
39
39
|
export type CommandRunner = (bin: string, args: string[], opts?: {
|
|
40
40
|
cwd?: string;
|
|
41
41
|
}) => Promise<CommandResult>;
|
|
42
|
+
export declare const defaultCommandRunner: CommandRunner;
|
|
42
43
|
/**
|
|
43
44
|
* Resolve the digest of a local Docker image via `docker image inspect`.
|
|
44
45
|
* Returns null when docker fails or the image has no RepoDigests entry
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* evaluator harness.
|
|
9
9
|
*/
|
|
10
10
|
import { createHash } from 'node:crypto';
|
|
11
|
+
import { spawn } from 'node:child_process';
|
|
11
12
|
/**
|
|
12
13
|
* Canonical-JSON SHA-256 over the HF row fields that affect grading.
|
|
13
14
|
* Keys are sorted recursively so field-reorder produces the same hash.
|
|
@@ -29,6 +30,15 @@ function sortedKeys(_key, value) {
|
|
|
29
30
|
}
|
|
30
31
|
return value;
|
|
31
32
|
}
|
|
33
|
+
export const defaultCommandRunner = (bin, args, opts) => new Promise((resolve, reject) => {
|
|
34
|
+
const child = spawn(bin, args, { ...(opts ?? {}), stdio: ['ignore', 'pipe', 'pipe'] });
|
|
35
|
+
let stdout = '';
|
|
36
|
+
let stderr = '';
|
|
37
|
+
child.stdout?.on('data', (d) => { stdout += d.toString(); });
|
|
38
|
+
child.stderr?.on('data', (d) => { stderr += d.toString(); });
|
|
39
|
+
child.on('error', reject);
|
|
40
|
+
child.on('close', (code) => resolve({ exitCode: code ?? 1, stdout, stderr }));
|
|
41
|
+
});
|
|
32
42
|
/**
|
|
33
43
|
* Resolve the digest of a local Docker image via `docker image inspect`.
|
|
34
44
|
* Returns null when docker fails or the image has no RepoDigests entry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_swe-rebench-v2-substrate.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-substrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"_swe-rebench-v2-substrate.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-substrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,9 +36,22 @@ import { type CommandRunner } from './_swe-rebench-v2-substrate.js';
|
|
|
36
36
|
* import/setup failures) — jinn-mono-fufn.
|
|
37
37
|
*/
|
|
38
38
|
export declare const EVAL_SEMANTICS_VERSION = "3";
|
|
39
|
+
export declare const SWE_REBENCH_V2_VETTED_POOL_ARTIFACT_TYPE: "swe-rebench-v2-vetted-pool.v1";
|
|
40
|
+
export declare const SOLVERNET_ARTIFACT_REF_SCHEMA_VERSION: "solvernet.artifact-ref.v1";
|
|
41
|
+
export declare const VETTED_POOL_REF_ELIGIBILITY_KEY: "vettedPoolRef";
|
|
42
|
+
declare const PUBLICATION_SCHEMA_VERSION: "swe-rebench-v2-vetted-pool-publication.v1";
|
|
39
43
|
export interface ValidatedPoolEntry {
|
|
40
44
|
scorable: boolean;
|
|
41
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Why scorable/unscorable — `'gold-patch-resolves'`, `'ungradeable:<reason>'`,
|
|
47
|
+
* `'transient:HF-429:<msg>'`, `'error:HF-429-permanent-after-5-passes'`, etc.
|
|
48
|
+
*
|
|
49
|
+
* Reason prefixes:
|
|
50
|
+
* - `transient:` — non-terminal; the next `validatePoolInstances` pass
|
|
51
|
+
* re-processes the entry until `transientRetryCount` hits {@link MAX_TRANSIENT_PASSES}.
|
|
52
|
+
* - everything else (including `error:`, `ungradeable:`, etc.) — terminal
|
|
53
|
+
* under the skip-check; only re-processed when `opts.force` is set.
|
|
54
|
+
*/
|
|
42
55
|
reason: string;
|
|
43
56
|
checkedAt: string;
|
|
44
57
|
/** Canonical-JSON SHA-256 over the HF row fields used for grading. v3+. */
|
|
@@ -49,7 +62,68 @@ export interface ValidatedPoolEntry {
|
|
|
49
62
|
imageDigest?: string;
|
|
50
63
|
/** `git rev-parse HEAD` of the enabled upstream SWE-rebench repo at validation time. v3+. */
|
|
51
64
|
upstreamEvalCommit?: string;
|
|
65
|
+
/**
|
|
66
|
+
* Number of consecutive `validatePoolInstances` passes that have recorded a
|
|
67
|
+
* `transient:` reason for this instance under this `evalSemanticsVersion`.
|
|
68
|
+
* Bumped on each pass; flips the reason to `error:HF-429-permanent-after-5-passes`
|
|
69
|
+
* once it hits {@link MAX_TRANSIENT_PASSES} (issue #578). Undefined for
|
|
70
|
+
* non-transient entries (treated as `0` on read).
|
|
71
|
+
*/
|
|
72
|
+
transientRetryCount?: number;
|
|
73
|
+
/** ISO timestamp of the most recent transient pass. Undefined for non-transient entries. */
|
|
74
|
+
lastTransientAt?: string;
|
|
52
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Cap on consecutive transient passes before an instance flips to the
|
|
78
|
+
* terminal `error:HF-429-permanent-after-5-passes` reason. Issue #578: the
|
|
79
|
+
* AC says "the failure is still recorded for visibility, but the validation
|
|
80
|
+
* pipeline distinguishes transient from permanent so the next run reprocesses
|
|
81
|
+
* these instances"; this is the convergence boundary that keeps a
|
|
82
|
+
* permanently-broken split from churning forever.
|
|
83
|
+
*/
|
|
84
|
+
export declare const MAX_TRANSIENT_PASSES = 5;
|
|
85
|
+
export interface SweRebenchV2VettedPoolArtifactEntry extends ValidatedPoolEntry {
|
|
86
|
+
instance_id: string;
|
|
87
|
+
scorable: true;
|
|
88
|
+
}
|
|
89
|
+
export interface SweRebenchV2VettedPoolArtifact {
|
|
90
|
+
schemaVersion: typeof SWE_REBENCH_V2_VETTED_POOL_ARTIFACT_TYPE;
|
|
91
|
+
evalSemanticsVersion: string;
|
|
92
|
+
generatedAt: string;
|
|
93
|
+
entries: SweRebenchV2VettedPoolArtifactEntry[];
|
|
94
|
+
}
|
|
95
|
+
export interface SolverNetArtifactRef {
|
|
96
|
+
schemaVersion: typeof SOLVERNET_ARTIFACT_REF_SCHEMA_VERSION;
|
|
97
|
+
manifestCid: string;
|
|
98
|
+
artifactType: typeof SWE_REBENCH_V2_VETTED_POOL_ARTIFACT_TYPE;
|
|
99
|
+
artifactCid: string;
|
|
100
|
+
artifactHash: `sha256:${string}`;
|
|
101
|
+
evalSemanticsVersion: string;
|
|
102
|
+
publishedAt: string;
|
|
103
|
+
}
|
|
104
|
+
export interface VettedPoolArtifactPublication {
|
|
105
|
+
schemaVersion: typeof PUBLICATION_SCHEMA_VERSION;
|
|
106
|
+
updatedAt: string;
|
|
107
|
+
ref: SolverNetArtifactRef;
|
|
108
|
+
artifact: SweRebenchV2VettedPoolArtifact;
|
|
109
|
+
}
|
|
110
|
+
export interface ScorableVettedPoolArtifactEntries {
|
|
111
|
+
ids: Set<string>;
|
|
112
|
+
byId: Map<string, SweRebenchV2VettedPoolArtifactEntry>;
|
|
113
|
+
}
|
|
114
|
+
export declare function parseVettedPoolArtifact(raw: unknown): SweRebenchV2VettedPoolArtifact;
|
|
115
|
+
export declare function hashVettedPoolArtifact(artifact: SweRebenchV2VettedPoolArtifact): `sha256:${string}`;
|
|
116
|
+
export declare function loadVettedPoolArtifactScorableEntries(raw: unknown): ScorableVettedPoolArtifactEntries;
|
|
117
|
+
export declare function createVettedPoolArtifactRef(args: {
|
|
118
|
+
manifestCid: string;
|
|
119
|
+
artifactCid: string;
|
|
120
|
+
artifactHash: `sha256:${string}`;
|
|
121
|
+
evalSemanticsVersion: string;
|
|
122
|
+
publishedAt: string;
|
|
123
|
+
}): SolverNetArtifactRef;
|
|
124
|
+
export declare function sweRebenchV2VettedPoolArtifactMetadataKey(manifestCid: string): string;
|
|
125
|
+
export declare function parseVettedPoolArtifactRef(raw: unknown): SolverNetArtifactRef;
|
|
126
|
+
export declare function vettedPoolArtifactRefFromEligibility(eligibility: Record<string, unknown> | undefined): SolverNetArtifactRef | null;
|
|
53
127
|
export declare class ValidatedPoolStore {
|
|
54
128
|
private readonly file;
|
|
55
129
|
private cache;
|
|
@@ -68,10 +142,28 @@ export declare class ValidatedPoolStore {
|
|
|
68
142
|
* on-disk file is absent or built for a different version). Memoised by
|
|
69
143
|
* mtime so the generator's tick doesn't re-parse the JSON every poll. */
|
|
70
144
|
getScorableIds(evalSemanticsVersion: string): Promise<Set<string> | null>;
|
|
145
|
+
getScorableEntries(evalSemanticsVersion: string): Promise<{
|
|
146
|
+
entries: Record<string, ValidatedPoolEntry>;
|
|
147
|
+
updatedAt: string;
|
|
148
|
+
} | null>;
|
|
71
149
|
/** The entry for `instanceId`, or `null` if not validated for this semantics version. */
|
|
72
150
|
getEntry(instanceId: string, evalSemanticsVersion: string): Promise<ValidatedPoolEntry | null>;
|
|
73
151
|
record(instanceId: string, entry: ValidatedPoolEntry, evalSemanticsVersion: string): Promise<void>;
|
|
74
152
|
}
|
|
153
|
+
export declare function exportScorableVettedPoolArtifact(store: ValidatedPoolStore, evalSemanticsVersion: string, opts?: {
|
|
154
|
+
generatedAt?: string;
|
|
155
|
+
}): Promise<SweRebenchV2VettedPoolArtifact | null>;
|
|
156
|
+
export declare function readVettedPoolArtifactPublication(args: {
|
|
157
|
+
stateDir: string;
|
|
158
|
+
manifestCid?: string;
|
|
159
|
+
evalSemanticsVersion?: string;
|
|
160
|
+
}): Promise<VettedPoolArtifactPublication | null>;
|
|
161
|
+
export declare function writeVettedPoolArtifactPublication(args: {
|
|
162
|
+
stateDir: string;
|
|
163
|
+
ref: SolverNetArtifactRef;
|
|
164
|
+
artifact: SweRebenchV2VettedPoolArtifact;
|
|
165
|
+
updatedAt?: string;
|
|
166
|
+
}): Promise<VettedPoolArtifactPublication>;
|
|
75
167
|
export type AdmissionMode = 'required' | 'python-floor';
|
|
76
168
|
/**
|
|
77
169
|
* Restrict the generator's posting pool.
|
|
@@ -120,3 +212,4 @@ export declare function validatePoolInstances(pool: PoolTask[], deps: ValidatePo
|
|
|
120
212
|
limit?: number;
|
|
121
213
|
force?: boolean;
|
|
122
214
|
}): Promise<ValidatePoolSummary>;
|
|
215
|
+
export {};
|