@jinn-network/client 0.1.6 → 0.1.7-canary.08ebd916

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