@jinn-network/client 0.1.8 → 0.1.9-canary.050a41b1

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.
Files changed (263) hide show
  1. package/dist/adapters/mech/adapter.d.ts +21 -1
  2. package/dist/adapters/mech/adapter.js +77 -10
  3. package/dist/adapters/mech/adapter.js.map +1 -1
  4. package/dist/adapters/mech/contracts.js +62 -28
  5. package/dist/adapters/mech/contracts.js.map +1 -1
  6. package/dist/adapters/mech/safe-revert.d.ts +4 -0
  7. package/dist/adapters/mech/safe-revert.js +5 -1
  8. package/dist/adapters/mech/safe-revert.js.map +1 -1
  9. package/dist/adapters/mech/safe.js +5 -1
  10. package/dist/adapters/mech/safe.js.map +1 -1
  11. package/dist/adapters/mech/verdict-code.js +1 -1
  12. package/dist/adapters/mech/verdict-code.js.map +1 -1
  13. package/dist/api/bootstrap-endpoint.d.ts +1 -0
  14. package/dist/api/bootstrap-endpoint.js +1 -0
  15. package/dist/api/bootstrap-endpoint.js.map +1 -1
  16. package/dist/api/discovery-endpoint.d.ts +1 -0
  17. package/dist/api/discovery-endpoint.js +24 -0
  18. package/dist/api/discovery-endpoint.js.map +1 -1
  19. package/dist/api/fleet-build.d.ts +1 -7
  20. package/dist/api/fleet-build.js +0 -7
  21. package/dist/api/fleet-build.js.map +1 -1
  22. package/dist/api/gather-status.d.ts +8 -2
  23. package/dist/api/gather-status.js +29 -117
  24. package/dist/api/gather-status.js.map +1 -1
  25. package/dist/api/loop-completion-build.d.ts +79 -0
  26. package/dist/api/loop-completion-build.js +155 -0
  27. package/dist/api/loop-completion-build.js.map +1 -0
  28. package/dist/api/peers.js +2 -0
  29. package/dist/api/peers.js.map +1 -1
  30. package/dist/api/setup-endpoints.d.ts +32 -0
  31. package/dist/api/setup-endpoints.js +93 -23
  32. package/dist/api/setup-endpoints.js.map +1 -1
  33. package/dist/api/solvernets-endpoints.js +3 -0
  34. package/dist/api/solvernets-endpoints.js.map +1 -1
  35. package/dist/api/status-build.d.ts +43 -33
  36. package/dist/api/status-build.js +3 -26
  37. package/dist/api/status-build.js.map +1 -1
  38. package/dist/api/status-rollup-build.d.ts +0 -4
  39. package/dist/api/status-rollup-build.js +0 -4
  40. package/dist/api/status-rollup-build.js.map +1 -1
  41. package/dist/build-info.json +4 -4
  42. package/dist/build-meta.json +1 -1
  43. package/dist/cli/commands/codedigest-revert-check.js +6 -2
  44. package/dist/cli/commands/codedigest-revert-check.js.map +1 -1
  45. package/dist/cli/commands/doctor.d.ts +3 -0
  46. package/dist/cli/commands/doctor.js +37 -2
  47. package/dist/cli/commands/doctor.js.map +1 -1
  48. package/dist/cli/commands/eval.d.ts +76 -0
  49. package/dist/cli/commands/eval.js +401 -0
  50. package/dist/cli/commands/eval.js.map +1 -0
  51. package/dist/cli/commands/rewards.d.ts +2 -0
  52. package/dist/cli/commands/rewards.js +30 -3
  53. package/dist/cli/commands/rewards.js.map +1 -1
  54. package/dist/cli/commands/solver-nets.js +68 -0
  55. package/dist/cli/commands/solver-nets.js.map +1 -1
  56. package/dist/cli/commands/status.js +0 -1
  57. package/dist/cli/commands/status.js.map +1 -1
  58. package/dist/cli/index.js +2 -0
  59. package/dist/cli/index.js.map +1 -1
  60. package/dist/config.d.ts +58 -7
  61. package/dist/config.js +96 -7
  62. package/dist/config.js.map +1 -1
  63. package/dist/daemon/ai-units-gate.d.ts +6 -6
  64. package/dist/daemon/ai-units-gate.js +11 -10
  65. package/dist/daemon/ai-units-gate.js.map +1 -1
  66. package/dist/daemon/balance-topup-loop.js +3 -0
  67. package/dist/daemon/balance-topup-loop.js.map +1 -1
  68. package/dist/daemon/creator.js +2 -0
  69. package/dist/daemon/creator.js.map +1 -1
  70. package/dist/daemon/daemon.d.ts +15 -0
  71. package/dist/daemon/daemon.js +78 -22
  72. package/dist/daemon/daemon.js.map +1 -1
  73. package/dist/daemon/eviction-loop.d.ts +7 -0
  74. package/dist/daemon/eviction-loop.js +16 -0
  75. package/dist/daemon/eviction-loop.js.map +1 -1
  76. package/dist/daemon/jinn-claim-loop.js +3 -0
  77. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  78. package/dist/daemon/join-applier.d.ts +35 -0
  79. package/dist/daemon/join-applier.js +49 -0
  80. package/dist/daemon/join-applier.js.map +1 -0
  81. package/dist/daemon/loop-heartbeat.d.ts +34 -0
  82. package/dist/daemon/loop-heartbeat.js +39 -0
  83. package/dist/daemon/loop-heartbeat.js.map +1 -0
  84. package/dist/daemon/reward-claim-loop.js +3 -0
  85. package/dist/daemon/reward-claim-loop.js.map +1 -1
  86. package/dist/daemon/watchdog-loop.d.ts +84 -0
  87. package/dist/daemon/watchdog-loop.js +91 -0
  88. package/dist/daemon/watchdog-loop.js.map +1 -0
  89. package/dist/dashboard/assets/index-8tAiMbUV.css +1 -0
  90. package/dist/dashboard/assets/index-CSFVwGFh.js +167 -0
  91. package/dist/dashboard/index.html +2 -2
  92. package/dist/discovery/http.d.ts +7 -0
  93. package/dist/discovery/http.js +241 -25
  94. package/dist/discovery/http.js.map +1 -1
  95. package/dist/discovery/onchain.js +155 -1
  96. package/dist/discovery/onchain.js.map +1 -1
  97. package/dist/discovery/types.d.ts +106 -0
  98. package/dist/discovery/types.js +40 -0
  99. package/dist/discovery/types.js.map +1 -1
  100. package/dist/discovery/with-fallback.js +14 -0
  101. package/dist/discovery/with-fallback.js.map +1 -1
  102. package/dist/earning/bootstrap.d.ts +23 -0
  103. package/dist/earning/bootstrap.js +76 -27
  104. package/dist/earning/bootstrap.js.map +1 -1
  105. package/dist/earning/faucet.d.ts +1 -1
  106. package/dist/earning/faucet.js +2 -2
  107. package/dist/earning/faucet.js.map +1 -1
  108. package/dist/earning/safe-adapter.js +11 -0
  109. package/dist/earning/safe-adapter.js.map +1 -1
  110. package/dist/eval/eval-harness-run.d.ts +63 -0
  111. package/dist/eval/eval-harness-run.js +123 -0
  112. package/dist/eval/eval-harness-run.js.map +1 -0
  113. package/dist/eval/orchestrator.d.ts +163 -0
  114. package/dist/eval/orchestrator.js +232 -0
  115. package/dist/eval/orchestrator.js.map +1 -0
  116. package/dist/eval/paired.d.ts +68 -0
  117. package/dist/eval/paired.js +93 -0
  118. package/dist/eval/paired.js.map +1 -0
  119. package/dist/eval/resolve-slate-tasks.d.ts +35 -0
  120. package/dist/eval/resolve-slate-tasks.js +56 -0
  121. package/dist/eval/resolve-slate-tasks.js.map +1 -0
  122. package/dist/eval/screen-discovery.d.ts +22 -0
  123. package/dist/eval/screen-discovery.js +71 -0
  124. package/dist/eval/screen-discovery.js.map +1 -0
  125. package/dist/eval/screen-progress.d.ts +41 -0
  126. package/dist/eval/screen-progress.js +60 -0
  127. package/dist/eval/screen-progress.js.map +1 -0
  128. package/dist/eval/screen-runner.d.ts +30 -0
  129. package/dist/eval/screen-runner.js +289 -0
  130. package/dist/eval/screen-runner.js.map +1 -0
  131. package/dist/eval/screen.d.ts +107 -0
  132. package/dist/eval/screen.js +159 -0
  133. package/dist/eval/screen.js.map +1 -0
  134. package/dist/eval/slope.d.ts +29 -0
  135. package/dist/eval/slope.js +46 -0
  136. package/dist/eval/slope.js.map +1 -0
  137. package/dist/eval/train-sequence.d.ts +35 -0
  138. package/dist/eval/train-sequence.js +59 -0
  139. package/dist/eval/train-sequence.js.map +1 -0
  140. package/dist/eval/wilson.d.ts +45 -0
  141. package/dist/eval/wilson.js +48 -0
  142. package/dist/eval/wilson.js.map +1 -0
  143. package/dist/harnesses/engine/canonical-json.js +5 -3
  144. package/dist/harnesses/engine/canonical-json.js.map +1 -1
  145. package/dist/harnesses/engine/engine.d.ts +24 -0
  146. package/dist/harnesses/engine/engine.js +72 -9
  147. package/dist/harnesses/engine/engine.js.map +1 -1
  148. package/dist/harnesses/engine/persistence.d.ts +17 -0
  149. package/dist/harnesses/engine/persistence.js +28 -0
  150. package/dist/harnesses/engine/persistence.js.map +1 -1
  151. package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
  152. package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
  153. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
  154. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
  155. package/dist/harnesses/impls/hermes-agent/bootstrap.js +6 -1
  156. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  157. package/dist/harnesses/impls/hermes-agent/harness.d.ts +17 -3
  158. package/dist/harnesses/impls/hermes-agent/harness.js +68 -5
  159. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  160. package/dist/harnesses/impls/index.d.ts +2 -0
  161. package/dist/harnesses/impls/index.js +2 -0
  162. package/dist/harnesses/impls/index.js.map +1 -1
  163. package/dist/harnesses/impls/learner/adapters/claude-code.js +5 -0
  164. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
  165. package/dist/harnesses/impls/learner/harness.d.ts +17 -1
  166. package/dist/harnesses/impls/learner/harness.js +51 -1
  167. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  168. package/dist/harnesses/impls/learner/harvest.d.ts +2 -0
  169. package/dist/harnesses/impls/learner/harvest.js +7 -1
  170. package/dist/harnesses/impls/learner/harvest.js.map +1 -1
  171. package/dist/harnesses/impls/learner/plugin-path.js +1 -0
  172. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
  173. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
  174. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  175. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
  176. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
  177. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
  178. package/dist/harnesses/readiness-registry.d.ts +10 -0
  179. package/dist/harnesses/readiness-registry.js +13 -0
  180. package/dist/harnesses/readiness-registry.js.map +1 -1
  181. package/dist/harnesses/types.d.ts +14 -0
  182. package/dist/learner/revert-decision.d.ts +16 -1
  183. package/dist/learner/revert-decision.js +38 -18
  184. package/dist/learner/revert-decision.js.map +1 -1
  185. package/dist/learner/revert-stats.d.ts +14 -0
  186. package/dist/learner/revert-stats.js +42 -0
  187. package/dist/learner/revert-stats.js.map +1 -1
  188. package/dist/local-provider-url.d.ts +3 -0
  189. package/dist/local-provider-url.js +28 -0
  190. package/dist/local-provider-url.js.map +1 -0
  191. package/dist/main.js +94 -25
  192. package/dist/main.js.map +1 -1
  193. package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
  194. package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
  195. package/dist/plugins/learner/hooks/session-start +30 -1
  196. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
  197. package/dist/preflight/deployment-readiness.d.ts +147 -0
  198. package/dist/preflight/deployment-readiness.js +366 -0
  199. package/dist/preflight/deployment-readiness.js.map +1 -0
  200. package/dist/preflight/pidfile-liveness.d.ts +7 -1
  201. package/dist/preflight/pidfile-liveness.js +14 -0
  202. package/dist/preflight/pidfile-liveness.js.map +1 -1
  203. package/dist/rpc/transport.d.ts +36 -0
  204. package/dist/rpc/transport.js +123 -24
  205. package/dist/rpc/transport.js.map +1 -1
  206. package/dist/scripts/swe-rebench-v2-seed-pool.json +2 -1
  207. package/dist/solver-nets/registry.d.ts +19 -0
  208. package/dist/solver-nets/registry.js +92 -66
  209. package/dist/solver-nets/registry.js.map +1 -1
  210. package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
  211. package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
  212. package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
  213. package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
  214. package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
  215. package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
  216. package/dist/solver-types/_swe-rebench-v2-state.d.ts +9 -0
  217. package/dist/solver-types/_swe-rebench-v2-state.js +14 -0
  218. package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
  219. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +30 -0
  220. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +40 -0
  221. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  222. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
  223. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
  224. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
  225. package/dist/solver-types/solver-type.d.ts +8 -0
  226. package/dist/solver-types/swe-rebench-v2.d.ts +2 -0
  227. package/dist/solver-types/swe-rebench-v2.js +115 -10
  228. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  229. package/dist/solvernets/launched-record-dispatcher.d.ts +3 -0
  230. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  231. package/dist/solvernets/registry-client-erc8004.js +29 -37
  232. package/dist/solvernets/registry-client-erc8004.js.map +1 -1
  233. package/dist/solvernets/registry-client.d.ts +6 -0
  234. package/dist/solvernets/store.js +7 -2
  235. package/dist/solvernets/store.js.map +1 -1
  236. package/dist/spend/ai-units-config.d.ts +10 -0
  237. package/dist/spend/ai-units-config.js +7 -1
  238. package/dist/spend/ai-units-config.js.map +1 -1
  239. package/dist/spend/ai-units.d.ts +51 -0
  240. package/dist/spend/ai-units.js +73 -0
  241. package/dist/spend/ai-units.js.map +1 -1
  242. package/dist/spend/record.js +12 -5
  243. package/dist/spend/record.js.map +1 -1
  244. package/dist/store/store.d.ts +91 -5
  245. package/dist/store/store.js +170 -7
  246. package/dist/store/store.js.map +1 -1
  247. package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +108 -1
  248. package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +25 -1
  249. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
  250. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
  251. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
  252. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
  253. package/dist/vendor/@jinn-network/sdk/package.json +4 -0
  254. package/docker-compose.yml +3 -2
  255. package/package.json +22 -18
  256. package/plugins/learner/.claude-plugin/plugin.json +1 -1
  257. package/plugins/learner/.codex-plugin/plugin.json +1 -1
  258. package/plugins/learner/hooks/session-start +30 -1
  259. package/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
  260. package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
  261. package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
  262. package/dist/dashboard/assets/index-CzKxvMcU.css +0 -32
  263. package/dist/dashboard/assets/index-yVemxHot.js +0 -351
@@ -79,6 +79,31 @@ export declare class AllRpcsFailedError extends Error {
79
79
  * viem's `buildRequest` re-wrap pass).
80
80
  */
81
81
  export declare function isViemShouldThrowError(err: unknown): boolean;
82
+ /**
83
+ * Default cooldown applied to a slot that returns a quota / rate-limit error
84
+ * (#835). After this window the demoted slot becomes eligible again rather than
85
+ * being permanently disabled (AC2), so a transient 429 / monthly-quota blip
86
+ * never strands an operator on a degraded provider for the rest of the process.
87
+ */
88
+ export declare const DEFAULT_RPC_COOLDOWN_MS = 60000;
89
+ /**
90
+ * Detect quota / rate-limit errors from an RPC provider (#835). Unlike
91
+ * {@link isViemShouldThrowError} (which marks EVM/wallet-level signals that must
92
+ * NOT trigger fallback), a quota error means the *slot* is temporarily unusable
93
+ * and should be demoted behind healthy slots for a cooldown window. Walks the
94
+ * cause chain (cycle-safe, mirroring `isViemShouldThrowError`) and matches on:
95
+ * - HTTP `status === 429` (the `http()` transport's `HttpRequestError`);
96
+ * - JSON-RPC `code === LimitExceededRpcError.code` (-32005);
97
+ * - a narrow message regex backstop covering unambiguous provider phrasings
98
+ * ("rate limit", "too many requests", "429", "quota", "compute unit",
99
+ * "request rate", "throughput") — deliberately excluding the ambiguous
100
+ * "limit"/"exceeded" words that collide with gas-limit errors.
101
+ *
102
+ * Deliberately narrow: a 5xx / network error is NOT a quota error (it falls
103
+ * through via viem but does not cool the slot — AC3 keeps static order when no
104
+ * quota errors occur), and a contract revert (code 3) is never a quota error.
105
+ */
106
+ export declare function isRpcQuotaError(err: unknown): boolean;
82
107
  /**
83
108
  * Mask an RPC URL down to its hostname for display / error reporting. Drops
84
109
  * the path so api-key segments in the URL don't leak into logs.
@@ -91,6 +116,17 @@ export interface BuildFallbackTransportOptions {
91
116
  * "Tenderly stays in slot 3" constraint from the issue.
92
117
  */
93
118
  rank?: boolean;
119
+ /**
120
+ * Injectable clock for the quota-cooldown bookkeeping (#835). Defaults to
121
+ * {@link Date.now}. Tests pass a controllable stub so cooldown expiry (AC2)
122
+ * is deterministic without real timers.
123
+ */
124
+ now?: () => number;
125
+ /**
126
+ * How long a slot stays demoted after a quota / rate-limit error, in ms
127
+ * (#835). Defaults to {@link DEFAULT_RPC_COOLDOWN_MS}.
128
+ */
129
+ cooldownMs?: number;
94
130
  }
95
131
  /**
96
132
  * Build a viem fallback transport over the given URLs. Returns a callable
@@ -24,7 +24,7 @@
24
24
  * at the read-API level (Ponder → eth_getLogs floor). This helper sits beneath
25
25
  * both layers at the JSON-RPC transport level.
26
26
  */
27
- import { ExecutionRevertedError, fallback, http, TransactionRejectedRpcError, UserRejectedRequestError, } from 'viem';
27
+ import { ExecutionRevertedError, fallback, http, LimitExceededRpcError, TransactionRejectedRpcError, UserRejectedRequestError, } from 'viem';
28
28
  /**
29
29
  * Hard cap on the number of providers in a single fallback chain. Four covers
30
30
  * the "operator paid primary + public publicnode + public sepolia.base.org +
@@ -142,6 +142,58 @@ export function isViemShouldThrowError(err) {
142
142
  }
143
143
  return false;
144
144
  }
145
+ /**
146
+ * Default cooldown applied to a slot that returns a quota / rate-limit error
147
+ * (#835). After this window the demoted slot becomes eligible again rather than
148
+ * being permanently disabled (AC2), so a transient 429 / monthly-quota blip
149
+ * never strands an operator on a degraded provider for the rest of the process.
150
+ */
151
+ export const DEFAULT_RPC_COOLDOWN_MS = 60_000;
152
+ /**
153
+ * Detect quota / rate-limit errors from an RPC provider (#835). Unlike
154
+ * {@link isViemShouldThrowError} (which marks EVM/wallet-level signals that must
155
+ * NOT trigger fallback), a quota error means the *slot* is temporarily unusable
156
+ * and should be demoted behind healthy slots for a cooldown window. Walks the
157
+ * cause chain (cycle-safe, mirroring `isViemShouldThrowError`) and matches on:
158
+ * - HTTP `status === 429` (the `http()` transport's `HttpRequestError`);
159
+ * - JSON-RPC `code === LimitExceededRpcError.code` (-32005);
160
+ * - a narrow message regex backstop covering unambiguous provider phrasings
161
+ * ("rate limit", "too many requests", "429", "quota", "compute unit",
162
+ * "request rate", "throughput") — deliberately excluding the ambiguous
163
+ * "limit"/"exceeded" words that collide with gas-limit errors.
164
+ *
165
+ * Deliberately narrow: a 5xx / network error is NOT a quota error (it falls
166
+ * through via viem but does not cool the slot — AC3 keeps static order when no
167
+ * quota errors occur), and a contract revert (code 3) is never a quota error.
168
+ */
169
+ export function isRpcQuotaError(err) {
170
+ // HTTP 429 (below) and JSON-RPC -32005 (LimitExceededRpcError) are the PRIMARY
171
+ // detectors. This message regex is only a backstop for providers that surface
172
+ // quota errors as plain text. It deliberately avoids the ambiguous "limit" /
173
+ // "exceeded" words: a bare `exceeded.*limit` alternative false-positives on
174
+ // gas errors like "exceeded block gas limit" / "gas limit exceeded", which can
175
+ // arrive with a non-shouldThrow code (e.g. -32000) and would wrongly cool a
176
+ // healthy slot. The phrases below are unambiguously quota/rate-limit and never
177
+ // appear in gas/execution errors; the only thing dropped is a text-only quota
178
+ // error carrying no 429 / -32005, which no major provider (Alchemy / Infura /
179
+ // publicnode / Tenderly) produces.
180
+ const quotaMessage = /rate.?limit|too many requests|429|quota|compute unit|request rate|throughput/i;
181
+ const seen = new Set();
182
+ let cursor = err;
183
+ while (cursor instanceof Error && !seen.has(cursor)) {
184
+ seen.add(cursor);
185
+ // Comparing against a numeric constant already excludes non-numbers, so no
186
+ // separate `typeof === 'number'` guard is needed here.
187
+ if (cursor.status === 429)
188
+ return true;
189
+ if (cursor.code === LimitExceededRpcError.code)
190
+ return true;
191
+ if (quotaMessage.test(cursor.message))
192
+ return true;
193
+ cursor = cursor.cause;
194
+ }
195
+ return false;
196
+ }
145
197
  /**
146
198
  * Mask an RPC URL down to its hostname for display / error reporting. Drops
147
199
  * the path so api-key segments in the URL don't leak into logs.
@@ -172,39 +224,86 @@ export function buildFallbackTransport(urls, options = {}) {
172
224
  */
173
225
  buildFallbackTransport.buildFromTransports = function buildFromTransports(transports, urls, options = {}) {
174
226
  const maskedProviders = urls.map(maskRpcHost);
175
- const inner = fallback(transports, {
176
- rank: options.rank ?? false,
177
- retryCount: 0,
227
+ const now = options.now ?? Date.now;
228
+ const cooldownMs = options.cooldownMs ?? DEFAULT_RPC_COOLDOWN_MS;
229
+ const rank = options.rank ?? false;
230
+ // Cooldown bookkeeping, indexed by ORIGINAL slot index (#835). A slot that
231
+ // returns a quota / rate-limit error is demoted behind the healthy slots
232
+ // until `cooldownUntil[i]`, then becomes eligible again (AC1 + AC2). When no
233
+ // quota errors occur every entry stays 0 and the configured order is
234
+ // preserved verbatim (AC3).
235
+ const cooldownUntil = new Array(transports.length).fill(0);
236
+ // Self-stamping slot wrappers, built ONCE over the original slot order. Each
237
+ // wraps its original transport FACTORY, closing over its ORIGINAL index `i`.
238
+ // When the instantiated slot's request rejects with a quota error it stamps
239
+ // its OWN `cooldownUntil[i]` and re-throws unchanged. This per-slot
240
+ // self-stamping is why we don't use viem's `onResponse` — its `transport`
241
+ // arg is a freshly-instantiated instance that can't be mapped back to a slot
242
+ // index. Only the wrapper ARRAY is reordered per request (below); the
243
+ // wrappers themselves keep their original index for the lifetime of the
244
+ // chain.
245
+ const stampingTransports = transports.map((make, i) => {
246
+ return ((config) => {
247
+ const instance = make(config);
248
+ const innerRequest = instance.request.bind(instance);
249
+ instance.request = (async (args) => {
250
+ try {
251
+ return await innerRequest(args);
252
+ }
253
+ catch (err) {
254
+ // A revert / user-rejected (shouldThrow-class) is an EVM/wallet
255
+ // signal, never a transport quota problem — must NOT cool the slot.
256
+ if (!isViemShouldThrowError(err) && isRpcQuotaError(err)) {
257
+ cooldownUntil[i] = now() + cooldownMs;
258
+ }
259
+ throw err;
260
+ }
261
+ });
262
+ return instance;
263
+ });
178
264
  });
179
- // Wrap the transport so that the final exhausted-chain rejection surfaces
180
- // as our structured `AllRpcsFailedError` (carrying the masked host list).
181
- // We do the wrap at the transport-factory level rather than swapping the
182
- // returned function's `request` so the FallbackTransport's typed shape
183
- // (`onResponse`, `transports`, etc.) is preserved.
265
+ // Per-request slot order: healthy slots (in original order) first, then
266
+ // cooling slots (in original order) as a last resort. Strict `<` means a
267
+ // slot is healthy again exactly at `now() === cooldownUntil[i]`.
268
+ const orderSlots = () => {
269
+ const healthy = [];
270
+ const cooling = [];
271
+ const t = now();
272
+ for (let i = 0; i < stampingTransports.length; i++) {
273
+ if (t < cooldownUntil[i])
274
+ cooling.push(stampingTransports[i]);
275
+ else
276
+ healthy.push(stampingTransports[i]);
277
+ }
278
+ return [...healthy, ...cooling];
279
+ };
184
280
  const wrapped = ((config) => {
185
- const t = inner(config);
186
- const originalRequest = t.request.bind(t);
187
- t.request = (async (args) => {
281
+ // Instantiate one inner fallback so the returned object carries the
282
+ // canonical `FallbackTransport` shape (`type: 'fallback'`, `onResponse`,
283
+ // `transports`). Its `request` is overridden to rebuild a fresh
284
+ // `fallback()` over the reordered slots on every call — the reorder is the
285
+ // whole point of #835, and a fresh chain with `retryCount: 0` reproduces
286
+ // the existing per-slot fall-through behaviour exactly.
287
+ const shape = fallback(stampingTransports, { rank, retryCount: 0 })(config);
288
+ shape.request = (async (args) => {
289
+ const perCall = fallback(orderSlots(), { rank, retryCount: 0 })(config);
188
290
  try {
189
- return await originalRequest(args);
291
+ return await perCall.request(args);
190
292
  }
191
293
  catch (err) {
192
- // viem's fallback() short-circuits on shouldThrow-class errors
193
- // (contract revert, user-rejected, CAIP 5000) those are
194
- // EVM/wallet-level, not transport-level failures. Propagate them
195
- // unchanged so callers (and the operator-app's `rpc_all_failed`
196
- // state message) don't misread a single-slot revert as an
197
- // exhausted-chain outage.
294
+ // shouldThrow-class errors (revert, user-rejected, CAIP 5000) are
295
+ // EVM/wallet-level propagate unchanged so a single-slot revert is
296
+ // never misread as an exhausted-chain outage.
198
297
  if (isViemShouldThrowError(err))
199
298
  throw err;
200
- // Otherwise: viem doesn't expose a distinct "all transports failed"
201
- // error class when fallback exhausts the chain it throws the last
202
- // underlying error. Wrap so the caller gets a stable structural
203
- // error carrying the masked provider list.
299
+ // The whole chain is exhausted. viem has no distinct "all transports
300
+ // failed" class, so wrap the last underlying error in our structured
301
+ // `AllRpcsFailedError` carrying the masked host list in ORIGINAL
302
+ // configured order (never reordered).
204
303
  throw new AllRpcsFailedError(maskedProviders, err);
205
304
  }
206
305
  });
207
- return t;
306
+ return shape;
208
307
  });
209
308
  return wrapped;
210
309
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/rpc/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/rpc/transport.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  {
2
- "comment": "Real Python instance IDs that exist in the current nebius/SWE-rebench-leaderboard pool (split 2025_01). validate-pool --seed-positive runs gold-eval against each. Not every entry is guaranteed to record scorable:true — some leaderboard rows have nondeterministic gold patches or upstream-substrate issues. The team prunes this list over time as empirical admit-rates surface. See DR 2026-05-14-swe-rebench-eval-admission.",
2
+ "comment": "Real Python instance IDs that exist in the current nebius/SWE-rebench-leaderboard pool (split 2025_01). validate-pool --seed-positive runs gold-eval against each. Not every entry is guaranteed to record scorable:true — some leaderboard rows have nondeterministic gold patches or upstream-substrate issues. The team prunes this list over time as empirical admit-rates surface. See DR 2026-05-14-swe-rebench-eval-admission. NOTE: sympy__sympy-27510 is the shared T2.2/T3.1 release-gate fixture (client/test/release/tier-2/fixtures/known-instance.ts) — it MUST stay in this list so `validate-pool --seed-positive` keeps it admitted across each EVAL_SEMANTICS_VERSION bump; without a v4 admission the env-suite real-harness loop times out on admission_missing_or_unscorable (2026-06-08 cut).",
3
3
  "source": "spike jinn-mono-fufn — initial set sampled from loadSweRebenchV2Pool() on 2026-05-14",
4
4
  "instance_ids": [
5
+ "sympy__sympy-27510",
5
6
  "tobymao__sqlglot-4661",
6
7
  "Blaizzy__mlx-vlm-179",
7
8
  "pydata__xarray-9974",
@@ -73,11 +73,30 @@ export declare class SolverNetRegistry {
73
73
  private readonly nets;
74
74
  register(net: LoadedSolverNet): void;
75
75
  get(name: string): LoadedSolverNet | undefined;
76
+ /**
77
+ * Remove every entry registered under `name` — both the bare key and any
78
+ * `name#N` collision-suffixed keys `register()` may have assigned. Used by
79
+ * the live join applier (#1037) to make a re-join idempotent: it clears the
80
+ * prior registration before re-registering, so a re-apply updates in place
81
+ * instead of inserting a phantom `name#2` duplicate. Boot never calls this,
82
+ * so first-registration behaviour is unchanged.
83
+ */
84
+ unregister(name: string): void;
76
85
  forSolverType(solverType: string, taskRole?: SolverNetTaskRole): LoadedSolverNet | undefined;
77
86
  list(): LoadedSolverNet[];
78
87
  harnessSelections(): Record<string, string>;
79
88
  claudeModelSelections(): Record<string, string>;
80
89
  }
90
+ /**
91
+ * Register a single joined SolverNet into `registry`, reproducing exactly the
92
+ * derivation + plugin-resolution the boot loop runs (default-plugin seeding,
93
+ * harness defaulting, role mapping). Shared by `loadSolverNets` (boot) and the
94
+ * live join applier (`daemon/join-applier.ts`, #1037) so the two paths cannot
95
+ * drift.
96
+ *
97
+ * No-ops when the joined entry has no resolvable contract or no roles.
98
+ */
99
+ export declare function registerJoinedNet(registry: SolverNetRegistry, cid: string, joined: JoinedSolverNetConfig): Promise<void>;
81
100
  export declare function loadSolverNets(config: {
82
101
  joinedSolverNets?: Record<string, JoinedSolverNetConfig>;
83
102
  }): Promise<SolverNetRegistry>;
@@ -126,6 +126,21 @@ export class SolverNetRegistry {
126
126
  get(name) {
127
127
  return this.nets.get(name);
128
128
  }
129
+ /**
130
+ * Remove every entry registered under `name` — both the bare key and any
131
+ * `name#N` collision-suffixed keys `register()` may have assigned. Used by
132
+ * the live join applier (#1037) to make a re-join idempotent: it clears the
133
+ * prior registration before re-registering, so a re-apply updates in place
134
+ * instead of inserting a phantom `name#2` duplicate. Boot never calls this,
135
+ * so first-registration behaviour is unchanged.
136
+ */
137
+ unregister(name) {
138
+ for (const key of [...this.nets.keys()]) {
139
+ const net = this.nets.get(key);
140
+ if (net && net.name === name)
141
+ this.nets.delete(key);
142
+ }
143
+ }
129
144
  forSolverType(solverType, taskRole) {
130
145
  return [...this.nets.values()].find((net) => net.enabled &&
131
146
  net.solverType === solverType &&
@@ -155,76 +170,87 @@ export class SolverNetRegistry {
155
170
  return out;
156
171
  }
157
172
  }
158
- export async function loadSolverNets(config) {
159
- const registry = new SolverNetRegistry();
160
- async function registerFromConfig(name, net, contract) {
161
- if (!net.enabled)
173
+ /**
174
+ * Register a single joined SolverNet into `registry`, reproducing exactly the
175
+ * derivation + plugin-resolution the boot loop runs (default-plugin seeding,
176
+ * harness defaulting, role mapping). Shared by `loadSolverNets` (boot) and the
177
+ * live join applier (`daemon/join-applier.ts`, #1037) so the two paths cannot
178
+ * drift.
179
+ *
180
+ * No-ops when the joined entry has no resolvable contract or no roles.
181
+ */
182
+ export async function registerJoinedNet(registry, cid, joined) {
183
+ if (!joined.contract)
184
+ return;
185
+ const solverType = `${joined.contract.id}.${joined.contract.version}`;
186
+ const contract = getSolverNetContract(joined.contract);
187
+ if (!contract)
188
+ return;
189
+ const roles = rolesFromJoinedConfig(joined);
190
+ if (roles.length === 0)
191
+ return;
192
+ const disabledDefaults = joined.disabledDefaultPlugins ?? [];
193
+ const defaultPlugins = defaultRuntimePluginsForSolverType(solverType)
194
+ .filter((plugin) => !defaultPluginDisabled(plugin, disabledDefaults));
195
+ const harness = joined.roles.includes('solver')
196
+ ? joined.harness ?? CLAUDE_CODE_HARNESS
197
+ : evaluatorHarnessNameForContract(contract) ?? joined.harness ?? CLAUDE_CODE_HARNESS;
198
+ const net = {
199
+ enabled: true,
200
+ solverType,
201
+ roles,
202
+ harness,
203
+ ...(joined.model ? { model: joined.model } : {}),
204
+ plugins: [...defaultPlugins, ...(joined.plugins ?? [])],
205
+ taskGenerator: { enabled: false },
206
+ };
207
+ const name = joined.name ?? cid;
208
+ if (!net.enabled)
209
+ return;
210
+ const runtimePlugins = [];
211
+ const seenSources = new Set();
212
+ const seenNames = new Set();
213
+ async function addRuntimePlugin(entry, provenance) {
214
+ const plugin = await resolveSolverPlugin(entry);
215
+ if (seenSources.has(plugin.source) || seenNames.has(plugin.name))
162
216
  return;
163
- const runtimePlugins = [];
164
- const seenSources = new Set();
165
- const seenNames = new Set();
166
- async function addRuntimePlugin(entry, provenance) {
167
- const plugin = await resolveSolverPlugin(entry);
168
- if (seenSources.has(plugin.source) || seenNames.has(plugin.name))
169
- return;
170
- if (!isRuntimePlugin(plugin) && !plugin.supports.includes(net.solverType)) {
171
- throw new Error(`SolverNet ${name} runtime plugin ${plugin.name} solverType mismatch: config=${net.solverType} plugin supports=${plugin.supports.join(',')}`);
172
- }
173
- runtimePlugins.push(runtimePluginFrom(plugin, provenance));
174
- seenSources.add(plugin.source);
175
- seenNames.add(plugin.name);
217
+ if (!isRuntimePlugin(plugin) && !plugin.supports.includes(net.solverType)) {
218
+ throw new Error(`SolverNet ${name} runtime plugin ${plugin.name} solverType mismatch: config=${net.solverType} plugin supports=${plugin.supports.join(',')}`);
176
219
  }
177
- // Per `spec/2026-05-05-solvernet-creation-and-launch.md` §8/§9, runtime
178
- // plugins are operator-configured — the SolverNet contract no longer
179
- // carries `defaultRuntimePlugins`. Network Tools is the one runtime-
180
- // scoped default (`supports: ['jinn.runtime']`) auto-loaded so every
181
- // operator's daemon can talk to the Jinn MCP surface. SolverType-bound
182
- // plugins (e.g. the bundled prediction plugin) flow through
183
- // `net.plugins`; the launcher seeds quick-start defaults into operator
184
- // config rather than binding them to the contract.
185
- for (const entry of [JINN_NETWORK_TOOLS_PLUGIN]) {
186
- await addRuntimePlugin(entry, 'default');
187
- }
188
- for (const entry of net.plugins ?? []) {
189
- await addRuntimePlugin(entry, 'configured');
190
- }
191
- registry.register({
192
- name,
193
- enabled: net.enabled,
194
- solverType: net.solverType,
195
- roles: rolesFromConfig(net),
196
- contract,
197
- harness: canonicalHarnessName(net.harness),
198
- ...(net.model ? { model: net.model } : {}),
199
- runtimePlugins,
200
- taskGenerator: net.taskGenerator,
201
- });
220
+ runtimePlugins.push(runtimePluginFrom(plugin, provenance));
221
+ seenSources.add(plugin.source);
222
+ seenNames.add(plugin.name);
223
+ }
224
+ // Per `spec/2026-05-05-solvernet-creation-and-launch.md` §8/§9, runtime
225
+ // plugins are operator-configured — the SolverNet contract no longer
226
+ // carries `defaultRuntimePlugins`. Network Tools is the one runtime-
227
+ // scoped default (`supports: ['jinn.runtime']`) auto-loaded so every
228
+ // operator's daemon can talk to the Jinn MCP surface. SolverType-bound
229
+ // plugins (e.g. the bundled prediction plugin) flow through
230
+ // `net.plugins`; the launcher seeds quick-start defaults into operator
231
+ // config rather than binding them to the contract.
232
+ for (const entry of [JINN_NETWORK_TOOLS_PLUGIN]) {
233
+ await addRuntimePlugin(entry, 'default');
234
+ }
235
+ for (const entry of net.plugins ?? []) {
236
+ await addRuntimePlugin(entry, 'configured');
202
237
  }
238
+ registry.register({
239
+ name,
240
+ enabled: net.enabled,
241
+ solverType: net.solverType,
242
+ roles: rolesFromConfig(net),
243
+ contract,
244
+ harness: canonicalHarnessName(net.harness),
245
+ ...(net.model ? { model: net.model } : {}),
246
+ runtimePlugins,
247
+ taskGenerator: net.taskGenerator,
248
+ });
249
+ }
250
+ export async function loadSolverNets(config) {
251
+ const registry = new SolverNetRegistry();
203
252
  for (const [cid, joined] of Object.entries(config.joinedSolverNets ?? {})) {
204
- if (!joined.contract)
205
- continue;
206
- const solverType = `${joined.contract.id}.${joined.contract.version}`;
207
- const contract = getSolverNetContract(joined.contract);
208
- if (!contract)
209
- continue;
210
- const roles = rolesFromJoinedConfig(joined);
211
- if (roles.length === 0)
212
- continue;
213
- const disabledDefaults = joined.disabledDefaultPlugins ?? [];
214
- const defaultPlugins = defaultRuntimePluginsForSolverType(solverType)
215
- .filter((plugin) => !defaultPluginDisabled(plugin, disabledDefaults));
216
- const harness = joined.roles.includes('solver')
217
- ? joined.harness ?? CLAUDE_CODE_HARNESS
218
- : evaluatorHarnessNameForContract(contract) ?? joined.harness ?? CLAUDE_CODE_HARNESS;
219
- await registerFromConfig(joined.name ?? cid, {
220
- enabled: true,
221
- solverType,
222
- roles,
223
- harness,
224
- ...(joined.model ? { model: joined.model } : {}),
225
- plugins: [...defaultPlugins, ...(joined.plugins ?? [])],
226
- taskGenerator: { enabled: false },
227
- }, contract);
253
+ await registerJoinedNet(registry, cid, joined);
228
254
  }
229
255
  return registry;
230
256
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/solver-nets/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/solver-nets/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Held-out task slate for the swe-rebench-v2 RL eval harness (issue #817).
3
+ *
4
+ * A slate is a versioned, content-addressed set of swe-rebench-v2
5
+ * `instance_id`s RESERVED from the training pool. The generator excludes
6
+ * slate instances from the train stream so they never enter training; a
7
+ * future eval orchestrator runs solvers against the slate to measure
8
+ * out-of-sample performance. Scores are only comparable *within* a slate
9
+ * version — a version bump (`v2`, …) is a distinct artifact with a distinct
10
+ * content hash, never compared against an earlier version.
11
+ *
12
+ * The artifact ships as a JSON file under `slates/` next to this module
13
+ * (`held-out-slate.swe-rebench-v2.<version>.json`). It carries a self-declared
14
+ * content hash: the loader recomputes a sha256 over the canonicalised,
15
+ * instance-id-sorted artifact and compares it to the file's `hash` field,
16
+ * failing loud on mismatch. This guards against accidental drift — a hand-edit
17
+ * that adds or removes an instance without re-deriving the hash. It is NOT a
18
+ * tamper-proof anchor: the declared hash lives in the same file it verifies, so
19
+ * a deliberate edit that also re-derives the hash passes, and the check is
20
+ * skipped entirely when the `hash` field is absent. A real trust anchor (an
21
+ * external/on-chain hash) is out of scope here.
22
+ *
23
+ * Hashing mirrors `hashVettedPoolArtifact` in `_swe-rebench-v2-validated-pool`:
24
+ * `sha256(canonicalJson(normalized))` with a `sha256:` prefix.
25
+ */
26
+ import type { PoolTask } from './_swe-rebench-v2-pool.js';
27
+ export declare const HELD_OUT_SLATE_SCHEMA_VERSION: "held-out-slate.v1";
28
+ export interface HeldOutSlateArtifact {
29
+ schemaVersion: typeof HELD_OUT_SLATE_SCHEMA_VERSION;
30
+ solverType: string;
31
+ version: string;
32
+ generatedAt: string;
33
+ instanceIds: string[];
34
+ }
35
+ export interface LoadedHeldOutSlate {
36
+ version: string;
37
+ hash: `sha256:${string}`;
38
+ instanceIds: Set<string>;
39
+ }
40
+ export declare function parseHeldOutSlateArtifact(raw: unknown): HeldOutSlateArtifact;
41
+ export declare function hashHeldOutSlateArtifact(artifact: HeldOutSlateArtifact): `sha256:${string}`;
42
+ /**
43
+ * Load the held-out slate for `solverType` at `version`. Validates the version
44
+ * shape, that the file's declared `solverType`/`version` match the request, and
45
+ * (when a `hash` field is present) that the recomputed content hash matches it —
46
+ * catching accidental edit-without-rehash drift, not deliberate tampering (see
47
+ * the module header). Throws if no slate file exists for the requested version
48
+ * (scores are only comparable within a known version).
49
+ *
50
+ * `opts.dir` overrides the slate file directory; it defaults to the
51
+ * module-relative `slatesDir()`. Production callers omit it (and so resolve the
52
+ * shipped slates); tests inject a temp dir to drive the fail-loud throw paths
53
+ * against malformed fixtures.
54
+ */
55
+ export declare function loadHeldOutSlate(solverType: string, version: string, opts?: {
56
+ dir?: string;
57
+ }): LoadedHeldOutSlate;
58
+ /**
59
+ * Drop any pool task whose `instance_id` is in the held-out slate. This is the
60
+ * single train-stream exclusion (issue #817 AC#2): the generator is the sole
61
+ * train-stream chokepoint, so a slate instance filtered here is never posted,
62
+ * never claimable, and never trains.
63
+ */
64
+ export declare function excludeHeldOutSlate(pool: PoolTask[], slateIds: Set<string>): PoolTask[];
65
+ /**
66
+ * Slate versions currently used as held-out exams. The generator excludes the
67
+ * UNION of these from the train stream, so every active exam stays out of
68
+ * training while non-slate instances of every repo remain trainable. Add a
69
+ * version here ONLY when its slate file exists (loadHeldOutSlate fails loud on
70
+ * a missing file).
71
+ */
72
+ export declare const ACTIVE_HELD_OUT_SLATE_VERSIONS: readonly ["v1", "v2"];
73
+ /** Union of instance ids across the given active slate versions. */
74
+ export declare function loadActiveHeldOutSlateIds(solverType: string, versions: readonly string[], opts?: {
75
+ dir?: string;
76
+ }): Set<string>;