@jinn-network/client 0.1.7 → 0.1.8-canary.09a3b2f6

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 (438) hide show
  1. package/README.md +67 -1
  2. package/dist/adapters/mech/adapter.d.ts +39 -2
  3. package/dist/adapters/mech/adapter.js +178 -20
  4. package/dist/adapters/mech/adapter.js.map +1 -1
  5. package/dist/adapters/mech/contracts.d.ts +22 -1
  6. package/dist/adapters/mech/contracts.js +96 -52
  7. package/dist/adapters/mech/contracts.js.map +1 -1
  8. package/dist/adapters/mech/safe-revert.d.ts +4 -0
  9. package/dist/adapters/mech/safe-revert.js +5 -1
  10. package/dist/adapters/mech/safe-revert.js.map +1 -1
  11. package/dist/adapters/mech/safe.d.ts +1 -1
  12. package/dist/adapters/mech/safe.js +10 -4
  13. package/dist/adapters/mech/safe.js.map +1 -1
  14. package/dist/adapters/mech/types.d.ts +6 -1
  15. package/dist/adapters/mech/types.js.map +1 -1
  16. package/dist/agent/operator-claude.js +8 -0
  17. package/dist/agent/operator-claude.js.map +1 -1
  18. package/dist/api/activity-events-endpoint.d.ts +14 -0
  19. package/dist/api/activity-events-endpoint.js +59 -0
  20. package/dist/api/activity-events-endpoint.js.map +1 -0
  21. package/dist/api/bootstrap-endpoint.d.ts +1 -2
  22. package/dist/api/bootstrap-endpoint.js +42 -24
  23. package/dist/api/bootstrap-endpoint.js.map +1 -1
  24. package/dist/api/codex-doctor-endpoint.d.ts +22 -5
  25. package/dist/api/codex-doctor-endpoint.js +136 -17
  26. package/dist/api/codex-doctor-endpoint.js.map +1 -1
  27. package/dist/api/debug-report-endpoint.d.ts +27 -0
  28. package/dist/api/debug-report-endpoint.js +157 -0
  29. package/dist/api/debug-report-endpoint.js.map +1 -0
  30. package/dist/api/discovery-endpoint.d.ts +1 -0
  31. package/dist/api/discovery-endpoint.js +24 -0
  32. package/dist/api/discovery-endpoint.js.map +1 -1
  33. package/dist/api/fleet-build.d.ts +1 -7
  34. package/dist/api/fleet-build.js +0 -7
  35. package/dist/api/fleet-build.js.map +1 -1
  36. package/dist/api/gather-status.d.ts +39 -0
  37. package/dist/api/gather-status.js +181 -84
  38. package/dist/api/gather-status.js.map +1 -1
  39. package/dist/api/hermes-doctor-endpoint.d.ts +15 -7
  40. package/dist/api/hermes-doctor-endpoint.js +56 -19
  41. package/dist/api/hermes-doctor-endpoint.js.map +1 -1
  42. package/dist/api/launcher-status.d.ts +4 -2
  43. package/dist/api/launcher-status.js +11 -10
  44. package/dist/api/launcher-status.js.map +1 -1
  45. package/dist/api/launcher-tasks.d.ts +1 -1
  46. package/dist/api/launcher-tasks.js +12 -8
  47. package/dist/api/launcher-tasks.js.map +1 -1
  48. package/dist/api/loop-completion-build.d.ts +79 -0
  49. package/dist/api/loop-completion-build.js +155 -0
  50. package/dist/api/loop-completion-build.js.map +1 -0
  51. package/dist/api/operator-artifacts-endpoint.js +73 -6
  52. package/dist/api/operator-artifacts-endpoint.js.map +1 -1
  53. package/dist/api/portfolio-v0-build.d.ts +7 -1
  54. package/dist/api/portfolio-v0-build.js +6 -2
  55. package/dist/api/portfolio-v0-build.js.map +1 -1
  56. package/dist/api/prediction-v1-build.d.ts +6 -0
  57. package/dist/api/prediction-v1-build.js +3 -1
  58. package/dist/api/prediction-v1-build.js.map +1 -1
  59. package/dist/api/server.d.ts +17 -0
  60. package/dist/api/server.js +40 -1
  61. package/dist/api/server.js.map +1 -1
  62. package/dist/api/setup-endpoints.d.ts +13 -9
  63. package/dist/api/setup-endpoints.js +50 -173
  64. package/dist/api/setup-endpoints.js.map +1 -1
  65. package/dist/api/solvernets-endpoints.js +33 -63
  66. package/dist/api/solvernets-endpoints.js.map +1 -1
  67. package/dist/api/status-build.d.ts +140 -17
  68. package/dist/api/status-build.js +47 -34
  69. package/dist/api/status-build.js.map +1 -1
  70. package/dist/api/status-harness-rollup.d.ts +35 -0
  71. package/dist/api/status-harness-rollup.js +45 -0
  72. package/dist/api/status-harness-rollup.js.map +1 -0
  73. package/dist/api/status-rollup-build.d.ts +0 -4
  74. package/dist/api/status-rollup-build.js +0 -4
  75. package/dist/api/status-rollup-build.js.map +1 -1
  76. package/dist/api/task-runs-build.d.ts +8 -0
  77. package/dist/api/task-runs-build.js +5 -1
  78. package/dist/api/task-runs-build.js.map +1 -1
  79. package/dist/build-info.json +4 -4
  80. package/dist/build-meta.json +1 -1
  81. package/dist/captures/live-publisher.js +24 -4
  82. package/dist/captures/live-publisher.js.map +1 -1
  83. package/dist/captures/publish.d.ts +1 -1
  84. package/dist/chain-read-errors.d.ts +12 -0
  85. package/dist/chain-read-errors.js +26 -1
  86. package/dist/chain-read-errors.js.map +1 -1
  87. package/dist/cli/commands/codedigest-revert-check.d.ts +33 -0
  88. package/dist/cli/commands/codedigest-revert-check.js +253 -0
  89. package/dist/cli/commands/codedigest-revert-check.js.map +1 -0
  90. package/dist/cli/commands/doctor.d.ts +3 -0
  91. package/dist/cli/commands/doctor.js +35 -0
  92. package/dist/cli/commands/doctor.js.map +1 -1
  93. package/dist/cli/commands/eval.d.ts +76 -0
  94. package/dist/cli/commands/eval.js +401 -0
  95. package/dist/cli/commands/eval.js.map +1 -0
  96. package/dist/cli/commands/rewards.d.ts +2 -0
  97. package/dist/cli/commands/rewards.js +27 -0
  98. package/dist/cli/commands/rewards.js.map +1 -1
  99. package/dist/cli/commands/solver-nets.d.ts +1 -0
  100. package/dist/cli/commands/solver-nets.js +245 -22
  101. package/dist/cli/commands/solver-nets.js.map +1 -1
  102. package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
  103. package/dist/cli/commands/solver-plugins-block.js +118 -0
  104. package/dist/cli/commands/solver-plugins-block.js.map +1 -0
  105. package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
  106. package/dist/cli/commands/solver-plugins-feedback.js +262 -0
  107. package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
  108. package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
  109. package/dist/cli/commands/solver-plugins-read.js +259 -0
  110. package/dist/cli/commands/solver-plugins-read.js.map +1 -0
  111. package/dist/cli/commands/solver-plugins.d.ts +35 -0
  112. package/dist/cli/commands/solver-plugins.js +399 -2
  113. package/dist/cli/commands/solver-plugins.js.map +1 -1
  114. package/dist/cli/commands/status.js +0 -1
  115. package/dist/cli/commands/status.js.map +1 -1
  116. package/dist/cli/commands/tasks.js +15 -2
  117. package/dist/cli/commands/tasks.js.map +1 -1
  118. package/dist/cli/index.js +4 -0
  119. package/dist/cli/index.js.map +1 -1
  120. package/dist/cli/task-native-readiness.d.ts +7 -0
  121. package/dist/cli/task-native-readiness.js +7 -5
  122. package/dist/cli/task-native-readiness.js.map +1 -1
  123. package/dist/config.d.ts +206 -232
  124. package/dist/config.js +289 -107
  125. package/dist/config.js.map +1 -1
  126. package/dist/daemon/ai-units-gate.d.ts +54 -0
  127. package/dist/daemon/ai-units-gate.js +83 -0
  128. package/dist/daemon/ai-units-gate.js.map +1 -0
  129. package/dist/daemon/creator.js +13 -0
  130. package/dist/daemon/creator.js.map +1 -1
  131. package/dist/daemon/daemon.d.ts +10 -0
  132. package/dist/daemon/daemon.js +205 -30
  133. package/dist/daemon/daemon.js.map +1 -1
  134. package/dist/daemon/eviction-loop.d.ts +7 -0
  135. package/dist/daemon/eviction-loop.js +16 -0
  136. package/dist/daemon/eviction-loop.js.map +1 -1
  137. package/dist/daemon/gate-logger.d.ts +9 -0
  138. package/dist/daemon/gate-logger.js +2 -0
  139. package/dist/daemon/gate-logger.js.map +1 -0
  140. package/dist/daemon/jinn-claim-loop.js +22 -4
  141. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  142. package/dist/daemon/readiness-gate.d.ts +1 -4
  143. package/dist/daemon/readiness-gate.js.map +1 -1
  144. package/dist/daemon/spend-cap-gate.d.ts +40 -0
  145. package/dist/daemon/spend-cap-gate.js +46 -0
  146. package/dist/daemon/spend-cap-gate.js.map +1 -0
  147. package/dist/dashboard/assets/index-3quVQqik.js +167 -0
  148. package/dist/dashboard/assets/index-BVAWkLwY.css +1 -0
  149. package/dist/dashboard/index.html +2 -2
  150. package/dist/discovery/http.d.ts +7 -0
  151. package/dist/discovery/http.js +567 -24
  152. package/dist/discovery/http.js.map +1 -1
  153. package/dist/discovery/onchain.js +197 -5
  154. package/dist/discovery/onchain.js.map +1 -1
  155. package/dist/discovery/types.d.ts +235 -0
  156. package/dist/discovery/types.js +40 -0
  157. package/dist/discovery/types.js.map +1 -1
  158. package/dist/discovery/with-fallback.js +41 -0
  159. package/dist/discovery/with-fallback.js.map +1 -1
  160. package/dist/earning/bootstrap.d.ts +31 -3
  161. package/dist/earning/bootstrap.js +94 -22
  162. package/dist/earning/bootstrap.js.map +1 -1
  163. package/dist/earning/faucet.d.ts +1 -1
  164. package/dist/earning/faucet.js +2 -2
  165. package/dist/earning/faucet.js.map +1 -1
  166. package/dist/earning/safe-adapter.js +34 -11
  167. package/dist/earning/safe-adapter.js.map +1 -1
  168. package/dist/earning/types.d.ts +6 -6
  169. package/dist/earning/viem-clients.d.ts +11 -4
  170. package/dist/earning/viem-clients.js +14 -5
  171. package/dist/earning/viem-clients.js.map +1 -1
  172. package/dist/erc8004/identity.d.ts +19 -3
  173. package/dist/erc8004/identity.js +38 -11
  174. package/dist/erc8004/identity.js.map +1 -1
  175. package/dist/erc8004/index.d.ts +1 -1
  176. package/dist/erc8004/index.js.map +1 -1
  177. package/dist/eval/eval-harness-run.d.ts +63 -0
  178. package/dist/eval/eval-harness-run.js +123 -0
  179. package/dist/eval/eval-harness-run.js.map +1 -0
  180. package/dist/eval/orchestrator.d.ts +163 -0
  181. package/dist/eval/orchestrator.js +232 -0
  182. package/dist/eval/orchestrator.js.map +1 -0
  183. package/dist/eval/paired.d.ts +68 -0
  184. package/dist/eval/paired.js +93 -0
  185. package/dist/eval/paired.js.map +1 -0
  186. package/dist/eval/resolve-slate-tasks.d.ts +35 -0
  187. package/dist/eval/resolve-slate-tasks.js +56 -0
  188. package/dist/eval/resolve-slate-tasks.js.map +1 -0
  189. package/dist/eval/screen-discovery.d.ts +22 -0
  190. package/dist/eval/screen-discovery.js +71 -0
  191. package/dist/eval/screen-discovery.js.map +1 -0
  192. package/dist/eval/screen-progress.d.ts +41 -0
  193. package/dist/eval/screen-progress.js +60 -0
  194. package/dist/eval/screen-progress.js.map +1 -0
  195. package/dist/eval/screen-runner.d.ts +30 -0
  196. package/dist/eval/screen-runner.js +289 -0
  197. package/dist/eval/screen-runner.js.map +1 -0
  198. package/dist/eval/screen.d.ts +107 -0
  199. package/dist/eval/screen.js +159 -0
  200. package/dist/eval/screen.js.map +1 -0
  201. package/dist/eval/slope.d.ts +29 -0
  202. package/dist/eval/slope.js +46 -0
  203. package/dist/eval/slope.js.map +1 -0
  204. package/dist/eval/train-sequence.d.ts +35 -0
  205. package/dist/eval/train-sequence.js +59 -0
  206. package/dist/eval/train-sequence.js.map +1 -0
  207. package/dist/eval/wilson.d.ts +45 -0
  208. package/dist/eval/wilson.js +48 -0
  209. package/dist/eval/wilson.js.map +1 -0
  210. package/dist/events/types.d.ts +2 -2
  211. package/dist/harnesses/cost-estimates.d.ts +10 -31
  212. package/dist/harnesses/cost-estimates.js +11 -43
  213. package/dist/harnesses/cost-estimates.js.map +1 -1
  214. package/dist/harnesses/engine/canonical-json.js +5 -3
  215. package/dist/harnesses/engine/canonical-json.js.map +1 -1
  216. package/dist/harnesses/engine/engine.d.ts +37 -4
  217. package/dist/harnesses/engine/engine.js +151 -20
  218. package/dist/harnesses/engine/engine.js.map +1 -1
  219. package/dist/harnesses/engine/persistence.d.ts +38 -4
  220. package/dist/harnesses/engine/persistence.js +71 -6
  221. package/dist/harnesses/engine/persistence.js.map +1 -1
  222. package/dist/harnesses/engine/state.d.ts +9 -0
  223. package/dist/harnesses/engine/state.js +23 -10
  224. package/dist/harnesses/engine/state.js.map +1 -1
  225. package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
  226. package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
  227. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
  228. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
  229. package/dist/harnesses/impls/hermes-agent/bootstrap.js +10 -3
  230. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  231. package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +1 -1
  232. package/dist/harnesses/impls/hermes-agent/config-builder.js +4 -2
  233. package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -1
  234. package/dist/harnesses/impls/hermes-agent/harness.d.ts +31 -3
  235. package/dist/harnesses/impls/hermes-agent/harness.js +84 -7
  236. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  237. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
  238. package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
  239. package/dist/harnesses/impls/index.d.ts +2 -0
  240. package/dist/harnesses/impls/index.js +2 -0
  241. package/dist/harnesses/impls/index.js.map +1 -1
  242. package/dist/harnesses/impls/learner/adapters/claude-code.d.ts +17 -0
  243. package/dist/harnesses/impls/learner/adapters/claude-code.js +118 -14
  244. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
  245. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
  246. package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
  247. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  248. package/dist/harnesses/impls/learner/harness.d.ts +41 -1
  249. package/dist/harnesses/impls/learner/harness.js +78 -4
  250. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  251. package/dist/harnesses/impls/learner/harvest.d.ts +3 -1
  252. package/dist/harnesses/impls/learner/harvest.js +30 -6
  253. package/dist/harnesses/impls/learner/harvest.js.map +1 -1
  254. package/dist/harnesses/impls/learner/plugin-path.js +1 -0
  255. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
  256. package/dist/harnesses/impls/learner/restoration-patch.d.ts +2 -2
  257. package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
  258. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
  259. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +21 -1
  260. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  261. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
  262. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  263. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
  264. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
  265. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  266. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
  267. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
  268. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
  269. package/dist/harnesses/readiness-registry.d.ts +7 -0
  270. package/dist/harnesses/readiness-registry.js +9 -0
  271. package/dist/harnesses/readiness-registry.js.map +1 -1
  272. package/dist/harnesses/types.d.ts +14 -0
  273. package/dist/learner/revert-decision.d.ts +74 -0
  274. package/dist/learner/revert-decision.js +73 -0
  275. package/dist/learner/revert-decision.js.map +1 -0
  276. package/dist/learner/revert-stats.d.ts +38 -0
  277. package/dist/learner/revert-stats.js +86 -0
  278. package/dist/learner/revert-stats.js.map +1 -0
  279. package/dist/local-provider-url.d.ts +3 -0
  280. package/dist/local-provider-url.js +28 -0
  281. package/dist/local-provider-url.js.map +1 -0
  282. package/dist/main.js +199 -104
  283. package/dist/main.js.map +1 -1
  284. package/dist/mcp/get-codedigest-reward.d.ts +13 -0
  285. package/dist/mcp/get-codedigest-reward.js +23 -0
  286. package/dist/mcp/get-codedigest-reward.js.map +1 -0
  287. package/dist/mcp/server.js +23 -0
  288. package/dist/mcp/server.js.map +1 -1
  289. package/dist/observability/debug-report-assemble.d.ts +43 -0
  290. package/dist/observability/debug-report-assemble.js +80 -0
  291. package/dist/observability/debug-report-assemble.js.map +1 -0
  292. package/dist/observability/emit-event.d.ts +9 -2
  293. package/dist/observability/emit-event.js +36 -2
  294. package/dist/observability/emit-event.js.map +1 -1
  295. package/dist/observability/file-logger.d.ts +69 -0
  296. package/dist/observability/file-logger.js +177 -0
  297. package/dist/observability/file-logger.js.map +1 -0
  298. package/dist/observability/redact-secrets.d.ts +65 -0
  299. package/dist/observability/redact-secrets.js +300 -0
  300. package/dist/observability/redact-secrets.js.map +1 -0
  301. package/dist/observability/tar.d.ts +30 -0
  302. package/dist/observability/tar.js +102 -0
  303. package/dist/observability/tar.js.map +1 -0
  304. package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
  305. package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
  306. package/dist/plugins/learner/hooks/session-start +30 -1
  307. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +22 -1
  308. package/dist/plugins/learner/skills/learn/promoter-prompt.md +72 -1
  309. package/dist/preflight/deployment-readiness.d.ts +147 -0
  310. package/dist/preflight/deployment-readiness.js +366 -0
  311. package/dist/preflight/deployment-readiness.js.map +1 -0
  312. package/dist/preflight/pidfile-liveness.d.ts +50 -0
  313. package/dist/preflight/pidfile-liveness.js +117 -0
  314. package/dist/preflight/pidfile-liveness.js.map +1 -0
  315. package/dist/preflight/rpc-network.d.ts +40 -0
  316. package/dist/preflight/rpc-network.js +67 -1
  317. package/dist/preflight/rpc-network.js.map +1 -1
  318. package/dist/rpc/transport.d.ts +145 -0
  319. package/dist/rpc/transport.js +319 -0
  320. package/dist/rpc/transport.js.map +1 -0
  321. package/dist/scripts/donation-consumption-acceptance.js +7 -28
  322. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  323. package/dist/scripts/swe-rebench-v2-pytest-missing.json +16 -0
  324. package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
  325. package/dist/solver-nets/prediction-operator-ux.js +56 -53
  326. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  327. package/dist/solver-nets/registry.d.ts +19 -1
  328. package/dist/solver-nets/registry.js +37 -24
  329. package/dist/solver-nets/registry.js.map +1 -1
  330. package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
  331. package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
  332. package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
  333. package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
  334. package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
  335. package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
  336. package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
  337. package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
  338. package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
  339. package/dist/solver-types/_swe-rebench-v2-state.d.ts +24 -0
  340. package/dist/solver-types/_swe-rebench-v2-state.js +33 -0
  341. package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
  342. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +116 -2
  343. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +296 -21
  344. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  345. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
  346. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
  347. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
  348. package/dist/solver-types/solver-type.d.ts +8 -0
  349. package/dist/solver-types/swe-rebench-v2-auto.d.ts +20 -11
  350. package/dist/solver-types/swe-rebench-v2-auto.js +64 -19
  351. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  352. package/dist/solver-types/swe-rebench-v2.d.ts +10 -2
  353. package/dist/solver-types/swe-rebench-v2.js +233 -13
  354. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  355. package/dist/solvernets/daemon-init.d.ts +1 -1
  356. package/dist/solvernets/daemon-init.js +19 -4
  357. package/dist/solvernets/daemon-init.js.map +1 -1
  358. package/dist/solvernets/launched-record-dispatcher.d.ts +7 -0
  359. package/dist/solvernets/launched-record-dispatcher.js +10 -4
  360. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  361. package/dist/solvernets/registry-client-erc8004.js +40 -37
  362. package/dist/solvernets/registry-client-erc8004.js.map +1 -1
  363. package/dist/solvernets/registry-client.d.ts +6 -0
  364. package/dist/solvernets/store.d.ts +2 -2
  365. package/dist/solvernets/store.js +7 -2
  366. package/dist/solvernets/store.js.map +1 -1
  367. package/dist/spend/ai-units-config.d.ts +49 -0
  368. package/dist/spend/ai-units-config.js +34 -0
  369. package/dist/spend/ai-units-config.js.map +1 -0
  370. package/dist/spend/ai-units.d.ts +140 -0
  371. package/dist/spend/ai-units.js +229 -0
  372. package/dist/spend/ai-units.js.map +1 -0
  373. package/dist/spend/cost-surface-status.d.ts +12 -0
  374. package/dist/spend/cost-surface-status.js +24 -0
  375. package/dist/spend/cost-surface-status.js.map +1 -0
  376. package/dist/spend/credential.d.ts +39 -0
  377. package/dist/spend/credential.js +71 -0
  378. package/dist/spend/credential.js.map +1 -0
  379. package/dist/spend/daemon-config.d.ts +13 -0
  380. package/dist/spend/daemon-config.js +24 -0
  381. package/dist/spend/daemon-config.js.map +1 -0
  382. package/dist/spend/pricing.d.ts +16 -0
  383. package/dist/spend/pricing.js +26 -0
  384. package/dist/spend/pricing.js.map +1 -0
  385. package/dist/spend/record.d.ts +13 -0
  386. package/dist/spend/record.js +43 -0
  387. package/dist/spend/record.js.map +1 -0
  388. package/dist/spend/usage.d.ts +27 -0
  389. package/dist/spend/usage.js +113 -0
  390. package/dist/spend/usage.js.map +1 -0
  391. package/dist/store/store.d.ts +187 -0
  392. package/dist/store/store.js +467 -4
  393. package/dist/store/store.js.map +1 -1
  394. package/dist/trajectory/transcript-parsers/codex-session.d.ts +12 -6
  395. package/dist/trajectory/transcript-parsers/codex-session.js +114 -13
  396. package/dist/trajectory/transcript-parsers/codex-session.js.map +1 -1
  397. package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
  398. package/dist/trajectory/transcript-session-dirs.d.ts +18 -0
  399. package/dist/trajectory/transcript-session-dirs.js +85 -0
  400. package/dist/trajectory/transcript-session-dirs.js.map +1 -0
  401. package/dist/trajectory/transcript-watcher.d.ts +20 -1
  402. package/dist/trajectory/transcript-watcher.js +108 -32
  403. package/dist/trajectory/transcript-watcher.js.map +1 -1
  404. package/dist/tx-retry.d.ts +25 -0
  405. package/dist/tx-retry.js +95 -7
  406. package/dist/tx-retry.js.map +1 -1
  407. package/dist/types/payloads/portfolio-v0.d.ts +3 -3
  408. package/dist/types/payloads/prediction-apy-v0.d.ts +3 -3
  409. package/dist/types/payloads/prediction-v0.d.ts +12 -12
  410. package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +108 -1
  411. package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +25 -1
  412. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
  413. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
  414. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
  415. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
  416. package/dist/vendor/@jinn-network/sdk/package.json +4 -0
  417. package/docker-compose.yml +3 -2
  418. package/package.json +30 -18
  419. package/plugins/learner/.claude-plugin/plugin.json +1 -1
  420. package/plugins/learner/.codex-plugin/plugin.json +1 -1
  421. package/plugins/learner/hooks/session-start +30 -1
  422. package/plugins/learner/skills/learn/consolidator-prompt.md +22 -1
  423. package/plugins/learner/skills/learn/promoter-prompt.md +72 -1
  424. package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
  425. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
  426. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
  427. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
  428. package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
  429. package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
  430. package/plugins/swe-rebench-v2-runtime/README.md +6 -6
  431. package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
  432. package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
  433. package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
  434. package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +81 -0
  435. package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
  436. package/dist/dashboard/assets/index-blqc7eqq.css +0 -32
  437. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
  438. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
@@ -0,0 +1,156 @@
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 { readFileSync } from 'node:fs';
27
+ import { createHash } from 'node:crypto';
28
+ import { fileURLToPath } from 'node:url';
29
+ import { dirname, resolve as resolvePath, join } from 'node:path';
30
+ import { canonicalJson } from '../harnesses/engine/canonical-json.js';
31
+ export const HELD_OUT_SLATE_SCHEMA_VERSION = 'held-out-slate.v1';
32
+ function isObject(raw) {
33
+ return typeof raw === 'object' && raw !== null;
34
+ }
35
+ export function parseHeldOutSlateArtifact(raw) {
36
+ if (!isObject(raw))
37
+ throw new Error('held-out slate artifact must be an object');
38
+ if (raw['schemaVersion'] !== HELD_OUT_SLATE_SCHEMA_VERSION) {
39
+ throw new Error(`held-out slate schemaVersion must be ${HELD_OUT_SLATE_SCHEMA_VERSION}`);
40
+ }
41
+ if (typeof raw['solverType'] !== 'string' || raw['solverType'].length === 0) {
42
+ throw new Error('held-out slate solverType must be a non-empty string');
43
+ }
44
+ if (typeof raw['version'] !== 'string' || raw['version'].length === 0) {
45
+ throw new Error('held-out slate version must be a non-empty string');
46
+ }
47
+ if (typeof raw['generatedAt'] !== 'string') {
48
+ throw new Error('held-out slate generatedAt must be a string');
49
+ }
50
+ if (!Array.isArray(raw['instanceIds']) ||
51
+ raw['instanceIds'].some((id) => typeof id !== 'string' || id.length === 0)) {
52
+ throw new Error('held-out slate instanceIds must be an array of non-empty strings');
53
+ }
54
+ return {
55
+ schemaVersion: HELD_OUT_SLATE_SCHEMA_VERSION,
56
+ solverType: raw['solverType'],
57
+ version: raw['version'],
58
+ generatedAt: raw['generatedAt'],
59
+ instanceIds: raw['instanceIds'].slice(),
60
+ };
61
+ }
62
+ function normalizeHeldOutSlateArtifact(artifact) {
63
+ return {
64
+ schemaVersion: HELD_OUT_SLATE_SCHEMA_VERSION,
65
+ solverType: artifact.solverType,
66
+ version: artifact.version,
67
+ generatedAt: artifact.generatedAt,
68
+ instanceIds: [...artifact.instanceIds].sort((a, b) => a.localeCompare(b)),
69
+ };
70
+ }
71
+ export function hashHeldOutSlateArtifact(artifact) {
72
+ const canonical = canonicalJson(normalizeHeldOutSlateArtifact(artifact));
73
+ return `sha256:${createHash('sha256').update(canonical).digest('hex')}`;
74
+ }
75
+ /**
76
+ * Resolve the slate file directory. At runtime the compiled module lives at
77
+ * `dist/solver-types/<this>.js` and the slate JSON at `dist/solver-types/slates/`
78
+ * (copied during `yarn build`); in dev/test the source module is at
79
+ * `src/solver-types/<this>.ts` with the slate JSON at `src/solver-types/slates/`.
80
+ * `./slates` resolves correctly in both layouts.
81
+ */
82
+ function slatesDir() {
83
+ return resolvePath(dirname(fileURLToPath(import.meta.url)), 'slates');
84
+ }
85
+ function slateFileName(solverType, version) {
86
+ if (!/^v\d+$/.test(version)) {
87
+ throw new Error(`held-out slate version must match /^v\\d+$/ (got ${JSON.stringify(version)})`);
88
+ }
89
+ return `held-out-slate.${solverType.replace(/\.v\d+$/, '')}.${version}.json`;
90
+ }
91
+ /**
92
+ * Load the held-out slate for `solverType` at `version`. Validates the version
93
+ * shape, that the file's declared `solverType`/`version` match the request, and
94
+ * (when a `hash` field is present) that the recomputed content hash matches it —
95
+ * catching accidental edit-without-rehash drift, not deliberate tampering (see
96
+ * the module header). Throws if no slate file exists for the requested version
97
+ * (scores are only comparable within a known version).
98
+ *
99
+ * `opts.dir` overrides the slate file directory; it defaults to the
100
+ * module-relative `slatesDir()`. Production callers omit it (and so resolve the
101
+ * shipped slates); tests inject a temp dir to drive the fail-loud throw paths
102
+ * against malformed fixtures.
103
+ */
104
+ export function loadHeldOutSlate(solverType, version, opts = {}) {
105
+ const path = join(opts.dir ?? slatesDir(), slateFileName(solverType, version));
106
+ let raw;
107
+ try {
108
+ raw = readFileSync(path, 'utf8');
109
+ }
110
+ catch {
111
+ throw new Error(`held-out slate not found for solverType=${solverType} version=${version} (expected ${path})`);
112
+ }
113
+ const parsed = JSON.parse(raw);
114
+ const artifact = parseHeldOutSlateArtifact(parsed);
115
+ if (artifact.version !== version) {
116
+ throw new Error(`held-out slate version mismatch: file declares ${artifact.version}, requested ${version}`);
117
+ }
118
+ if (artifact.solverType !== solverType) {
119
+ throw new Error(`held-out slate solverType mismatch: file declares ${artifact.solverType}, requested ${solverType}`);
120
+ }
121
+ const hash = hashHeldOutSlateArtifact(artifact);
122
+ const declared = parsed['hash'];
123
+ if (typeof declared === 'string' && declared !== hash) {
124
+ throw new Error(`held-out slate hash mismatch for ${solverType} ${version}: declared ${declared}, computed ${hash} (artifact was edited without re-deriving the hash)`);
125
+ }
126
+ return { version: artifact.version, hash, instanceIds: new Set(artifact.instanceIds) };
127
+ }
128
+ /**
129
+ * Drop any pool task whose `instance_id` is in the held-out slate. This is the
130
+ * single train-stream exclusion (issue #817 AC#2): the generator is the sole
131
+ * train-stream chokepoint, so a slate instance filtered here is never posted,
132
+ * never claimable, and never trains.
133
+ */
134
+ export function excludeHeldOutSlate(pool, slateIds) {
135
+ if (slateIds.size === 0)
136
+ return pool;
137
+ return pool.filter((task) => !slateIds.has(task.instance_id));
138
+ }
139
+ /**
140
+ * Slate versions currently used as held-out exams. The generator excludes the
141
+ * UNION of these from the train stream, so every active exam stays out of
142
+ * training while non-slate instances of every repo remain trainable. Add a
143
+ * version here ONLY when its slate file exists (loadHeldOutSlate fails loud on
144
+ * a missing file).
145
+ */
146
+ export const ACTIVE_HELD_OUT_SLATE_VERSIONS = ['v1', 'v2'];
147
+ /** Union of instance ids across the given active slate versions. */
148
+ export function loadActiveHeldOutSlateIds(solverType, versions, opts = {}) {
149
+ const ids = new Set();
150
+ for (const version of versions) {
151
+ for (const id of loadHeldOutSlate(solverType, version, opts).instanceIds)
152
+ ids.add(id);
153
+ }
154
+ return ids;
155
+ }
156
+ //# sourceMappingURL=_swe-rebench-v2-held-out-slate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_swe-rebench-v2-held-out-slate.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-held-out-slate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Fresh-volume vetted-pool recovery for the swe-rebench-v2 generator (#957).
3
+ *
4
+ * A freshly-deployed operator has an empty disk: no `validated-pool.json`, so
5
+ * the generator's admission gate hits `admission-required-no-data` and posts 0
6
+ * tasks. The vetted pool was previously published to IPFS; we recover it via the
7
+ * indexer (DR-2026-06-02 open-question #4, Option B — read the artifact ref via
8
+ * the DiscoveryAPI, not on-chain directly):
9
+ *
10
+ * 1. `discoveryApi.getMostRecentTaskCidDigest(manifestCid)` → a recent task's
11
+ * on-chain `taskCidDigest` (pure indexer/chain read; no IPFS in discovery).
12
+ * 2. Reconstruct the IPFS task CID (`f01551220 + digestHexWithout0x`, the same
13
+ * derivation as `adapters/mech/adapter.ts`) and fetch the task body.
14
+ * 3. Read the vetted-pool ref from the task's `eligibility.vettedPoolRef`
15
+ * (`VETTED_POOL_REF_ELIGIBILITY_KEY`).
16
+ * 4. Fetch + parse the artifact at `ref.artifactCid`.
17
+ * 5. SECURITY: verify `hashVettedPoolArtifact(artifact) === ref.artifactHash`.
18
+ * A mismatch is REJECTED — no file is written.
19
+ * 6. Write the scorable entries into `validated-pool.json` via
20
+ * `ValidatedPoolStore.record`. After a successful recovery the generator's
21
+ * existing `resolvePublishedVettedPool` / pool-load path picks up the now-
22
+ * present `validated-pool.json`.
23
+ *
24
+ * Never-overwrite: if a local validated pool already exists for the current
25
+ * `EVAL_SEMANTICS_VERSION`, recovery is a no-op (`local-pool-present`) — the same
26
+ * "don't clobber newer local data" stance as `resolvePublishedVettedPool`'s
27
+ * `validatedNewer` guard.
28
+ *
29
+ * Fail-closed: every external call is wrapped so any failure returns a structured
30
+ * `{ recovered: false, reason }`. Recovery NEVER throws — it must fall through to
31
+ * the existing `admission-required-no-data` path so a recovery failure can never
32
+ * crash the generator tick.
33
+ */
34
+ import { ValidatedPoolStore } from './_swe-rebench-v2-validated-pool.js';
35
+ import type { DiscoveryAPI } from '../discovery/types.js';
36
+ export interface RecoverVettedPoolResult {
37
+ recovered: boolean;
38
+ /**
39
+ * Why recovery did not complete (only set when `recovered === false`):
40
+ * - `local-pool-present` — a local validated pool already exists; not clobbered.
41
+ * - `no-task` — the indexer reports no task for the manifest yet.
42
+ * - `no-ref` — the recovered task carries no `vettedPoolRef` eligibility.
43
+ * - `hash-mismatch` — the fetched artifact's hash did not match the ref (SECURITY).
44
+ * - `error:<msg>` — any external call failed (discovery / IPFS / parse).
45
+ */
46
+ reason?: string;
47
+ /** Count of scorable entries written, on a successful recovery. */
48
+ entriesRecovered?: number;
49
+ }
50
+ /**
51
+ * Whether a recovery outcome is TERMINAL — i.e. retrying cannot help, so the
52
+ * caller should latch permanently and never attempt recovery again:
53
+ *
54
+ * - `recovered === true` — done; the pool was written.
55
+ * - `local-pool-present` — a local pool already exists; nothing to recover.
56
+ *
57
+ * All other outcomes (`no-task`, `no-ref`, `error:*`, `hash-mismatch`) are
58
+ * TRANSIENT/retryable, so the caller must NOT latch on them (it retries under a
59
+ * bounded cap instead):
60
+ * - `no-task` — a fresh SolverNet may not have posted its first task yet.
61
+ * - `no-ref` — the task's eligibility may not yet carry a vettedPoolRef.
62
+ * - `error:*` — the indexer / IPFS gateway may be having a transient blip.
63
+ * - `hash-mismatch` — the fetched artifact's hash didn't match the ref. This is
64
+ * SECURITY-rejected at write time (the bad artifact is NEVER written), and it
65
+ * can be transient: a corrupted IPFS-gateway response may fetch cleanly on a
66
+ * later attempt, or the launcher may re-publish a corrected ref that a later
67
+ * task carries. Retrying re-resolves the most-recent task's ref AND re-fetches
68
+ * from IPFS, so a corrected pool is picked up without a restart; the bounded
69
+ * retry cap prevents looping on a genuinely-bad ref.
70
+ */
71
+ export declare function isTerminalRecoveryOutcome(result: RecoverVettedPoolResult): boolean;
72
+ export interface RecoverVettedPoolDeps {
73
+ stateDir: string;
74
+ manifestCid: string;
75
+ discoveryApi: DiscoveryAPI;
76
+ ipfsGatewayUrl: string;
77
+ store: ValidatedPoolStore;
78
+ /** Injected so tests can stub the IPFS round-trip; production passes `fetchFromIpfs`. */
79
+ fetchFromIpfs: (gatewayUrl: string, cid: string) => Promise<unknown>;
80
+ }
81
+ export declare function recoverVettedPoolFromNetwork(deps: RecoverVettedPoolDeps): Promise<RecoverVettedPoolResult>;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Fresh-volume vetted-pool recovery for the swe-rebench-v2 generator (#957).
3
+ *
4
+ * A freshly-deployed operator has an empty disk: no `validated-pool.json`, so
5
+ * the generator's admission gate hits `admission-required-no-data` and posts 0
6
+ * tasks. The vetted pool was previously published to IPFS; we recover it via the
7
+ * indexer (DR-2026-06-02 open-question #4, Option B — read the artifact ref via
8
+ * the DiscoveryAPI, not on-chain directly):
9
+ *
10
+ * 1. `discoveryApi.getMostRecentTaskCidDigest(manifestCid)` → a recent task's
11
+ * on-chain `taskCidDigest` (pure indexer/chain read; no IPFS in discovery).
12
+ * 2. Reconstruct the IPFS task CID (`f01551220 + digestHexWithout0x`, the same
13
+ * derivation as `adapters/mech/adapter.ts`) and fetch the task body.
14
+ * 3. Read the vetted-pool ref from the task's `eligibility.vettedPoolRef`
15
+ * (`VETTED_POOL_REF_ELIGIBILITY_KEY`).
16
+ * 4. Fetch + parse the artifact at `ref.artifactCid`.
17
+ * 5. SECURITY: verify `hashVettedPoolArtifact(artifact) === ref.artifactHash`.
18
+ * A mismatch is REJECTED — no file is written.
19
+ * 6. Write the scorable entries into `validated-pool.json` via
20
+ * `ValidatedPoolStore.record`. After a successful recovery the generator's
21
+ * existing `resolvePublishedVettedPool` / pool-load path picks up the now-
22
+ * present `validated-pool.json`.
23
+ *
24
+ * Never-overwrite: if a local validated pool already exists for the current
25
+ * `EVAL_SEMANTICS_VERSION`, recovery is a no-op (`local-pool-present`) — the same
26
+ * "don't clobber newer local data" stance as `resolvePublishedVettedPool`'s
27
+ * `validatedNewer` guard.
28
+ *
29
+ * Fail-closed: every external call is wrapped so any failure returns a structured
30
+ * `{ recovered: false, reason }`. Recovery NEVER throws — it must fall through to
31
+ * the existing `admission-required-no-data` path so a recovery failure can never
32
+ * crash the generator tick.
33
+ */
34
+ import { EVAL_SEMANTICS_VERSION, vettedPoolArtifactRefFromEligibility, parseVettedPoolArtifact, hashVettedPoolArtifact, } from './_swe-rebench-v2-validated-pool.js';
35
+ /**
36
+ * Whether a recovery outcome is TERMINAL — i.e. retrying cannot help, so the
37
+ * caller should latch permanently and never attempt recovery again:
38
+ *
39
+ * - `recovered === true` — done; the pool was written.
40
+ * - `local-pool-present` — a local pool already exists; nothing to recover.
41
+ *
42
+ * All other outcomes (`no-task`, `no-ref`, `error:*`, `hash-mismatch`) are
43
+ * TRANSIENT/retryable, so the caller must NOT latch on them (it retries under a
44
+ * bounded cap instead):
45
+ * - `no-task` — a fresh SolverNet may not have posted its first task yet.
46
+ * - `no-ref` — the task's eligibility may not yet carry a vettedPoolRef.
47
+ * - `error:*` — the indexer / IPFS gateway may be having a transient blip.
48
+ * - `hash-mismatch` — the fetched artifact's hash didn't match the ref. This is
49
+ * SECURITY-rejected at write time (the bad artifact is NEVER written), and it
50
+ * can be transient: a corrupted IPFS-gateway response may fetch cleanly on a
51
+ * later attempt, or the launcher may re-publish a corrected ref that a later
52
+ * task carries. Retrying re-resolves the most-recent task's ref AND re-fetches
53
+ * from IPFS, so a corrected pool is picked up without a restart; the bounded
54
+ * retry cap prevents looping on a genuinely-bad ref.
55
+ */
56
+ export function isTerminalRecoveryOutcome(result) {
57
+ if (result.recovered)
58
+ return true;
59
+ return result.reason === 'local-pool-present';
60
+ }
61
+ export async function recoverVettedPoolFromNetwork(deps) {
62
+ const { stateDir: _stateDir, manifestCid, discoveryApi, ipfsGatewayUrl, store, fetchFromIpfs } = deps;
63
+ void _stateDir; // reserved for symmetry with resolvePublishedVettedPool; store already binds stateDir
64
+ try {
65
+ // Never-overwrite guard: a local validated pool already present (operator
66
+ // validated locally, or a prior recovery ran) → do not clobber it.
67
+ const existing = await store.getScorableIds(EVAL_SEMANTICS_VERSION);
68
+ if (existing !== null) {
69
+ return { recovered: false, reason: 'local-pool-present' };
70
+ }
71
+ // 1) Most-recent task digest for the SolverNet (pure indexer/chain read).
72
+ const recent = await discoveryApi.getMostRecentTaskCidDigest(manifestCid);
73
+ if (!recent)
74
+ return { recovered: false, reason: 'no-task' };
75
+ // 2) Reconstruct the IPFS task CID and fetch the task body. Lowercase the
76
+ // digest defensively (NIT #7): the on-chain bytes32 is lowercase, but a
77
+ // future uppercase-emitting indexer must not produce a wrong CID.
78
+ const taskCid = `f01551220${recent.taskCidDigest.replace(/^0x/, '').toLowerCase()}`;
79
+ const taskDoc = await fetchFromIpfs(ipfsGatewayUrl, taskCid);
80
+ // 3) Read the vetted-pool ref from the task's eligibility.
81
+ const eligibility = taskDoc?.eligibility;
82
+ const ref = vettedPoolArtifactRefFromEligibility(eligibility);
83
+ if (ref === null)
84
+ return { recovered: false, reason: 'no-ref' };
85
+ // 4) Fetch + parse the artifact.
86
+ const rawArtifact = await fetchFromIpfs(ipfsGatewayUrl, ref.artifactCid);
87
+ const artifact = parseVettedPoolArtifact(rawArtifact);
88
+ // 5) SECURITY: verify the artifact hash against the ref before writing.
89
+ if (hashVettedPoolArtifact(artifact) !== ref.artifactHash) {
90
+ return { recovered: false, reason: 'hash-mismatch' };
91
+ }
92
+ // 6) Write the scorable entries into validated-pool.json. Record under the
93
+ // artifact's evalSemanticsVersion so the generator's read path picks them up
94
+ // for the matching version. Each artifact entry is scorable by construction.
95
+ for (const entry of artifact.entries) {
96
+ const poolEntry = {
97
+ scorable: true,
98
+ reason: entry.reason,
99
+ checkedAt: entry.checkedAt,
100
+ ...(entry.rowHash ? { rowHash: entry.rowHash } : {}),
101
+ ...(entry.imageName ? { imageName: entry.imageName } : {}),
102
+ ...(entry.imageDigest ? { imageDigest: entry.imageDigest } : {}),
103
+ ...(entry.upstreamEvalCommit ? { upstreamEvalCommit: entry.upstreamEvalCommit } : {}),
104
+ };
105
+ await store.record(entry.instance_id, poolEntry, artifact.evalSemanticsVersion);
106
+ }
107
+ return { recovered: true, entriesRecovered: artifact.entries.length };
108
+ }
109
+ catch (err) {
110
+ // Fail-closed: any failure (discovery, IPFS, parse) must NOT throw — return a
111
+ // structured result so the generator falls through to admission-required-no-data.
112
+ const message = err instanceof Error ? err.message : String(err);
113
+ return { recovered: false, reason: `error:${message}` };
114
+ }
115
+ }
116
+ //# sourceMappingURL=_swe-rebench-v2-pool-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_swe-rebench-v2-pool-recovery.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-pool-recovery.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  * Spec: docs/superpowers/specs/2026-05-06-agent-harness-solvernet-design.md §3.6
7
7
  * DR: log/decisions/2026-05-06-task-generator-success-cap.md
8
8
  */
9
+ import { type FetchHfWithRetryOptions } from '../harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js';
9
10
  export interface PoolTask {
10
11
  instance_id: string;
11
12
  hf_dataset: string;
@@ -43,9 +44,15 @@ export interface BuildPoolArgs {
43
44
  * partitions are kept only from the earliest partition (first-seen wins).
44
45
  */
45
46
  export declare function buildHistoricalPool(args: BuildPoolArgs): Promise<PoolTask[]>;
46
- /** HTTP fetcher for HF datasets-server rows API. Use as fetchSplit in production. */
47
+ /**
48
+ * HTTP fetcher for HF datasets-server rows API. Use as `fetchSplit` in
49
+ * production. Routes through {@link fetchHfWithRetry} so 408/429/5xx are
50
+ * retried with jittered backoff and the process-wide HF min-interval is
51
+ * honoured (issue #578). Throws on non-2xx after retry exhaustion —
52
+ * previously returned `[]` silently, which is what hid the 290 lost tasks.
53
+ */
47
54
  export declare function fetchHfSplit(args: {
48
55
  dataset: string;
49
56
  split: string;
50
57
  limit?: number;
51
- }): Promise<any[]>;
58
+ }, opts?: FetchHfWithRetryOptions): Promise<any[]>;
@@ -6,7 +6,7 @@
6
6
  * Spec: docs/superpowers/specs/2026-05-06-agent-harness-solvernet-design.md §3.6
7
7
  * DR: log/decisions/2026-05-06-task-generator-success-cap.md
8
8
  */
9
- import { request } from 'node:https';
9
+ import { fetchHfWithRetry, } from '../harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js';
10
10
  /** Filter dataset split names to only the YYYY_MM monthly partitions. */
11
11
  export function listMonthlyPartitions(splits) {
12
12
  return splits
@@ -43,30 +43,25 @@ export async function buildHistoricalPool(args) {
43
43
  }
44
44
  return pool;
45
45
  }
46
- /** HTTP fetcher for HF datasets-server rows API. Use as fetchSplit in production. */
47
- export async function fetchHfSplit(args) {
46
+ /**
47
+ * HTTP fetcher for HF datasets-server rows API. Use as `fetchSplit` in
48
+ * production. Routes through {@link fetchHfWithRetry} so 408/429/5xx are
49
+ * retried with jittered backoff and the process-wide HF min-interval is
50
+ * honoured (issue #578). Throws on non-2xx after retry exhaustion —
51
+ * previously returned `[]` silently, which is what hid the 290 lost tasks.
52
+ */
53
+ export async function fetchHfSplit(args, opts = {}) {
48
54
  const url = new URL('https://datasets-server.huggingface.co/rows');
49
55
  url.searchParams.set('dataset', args.dataset);
50
56
  url.searchParams.set('config', 'default');
51
57
  url.searchParams.set('split', args.split);
52
58
  url.searchParams.set('offset', '0');
53
59
  url.searchParams.set('length', String(args.limit ?? 100));
54
- return new Promise((resolve, reject) => {
55
- const req = request(url, { method: 'GET' }, (res) => {
56
- let body = '';
57
- res.on('data', (d) => { body += d; });
58
- res.on('end', () => {
59
- try {
60
- const parsed = JSON.parse(body);
61
- resolve((parsed.rows ?? []).map((r) => r.row));
62
- }
63
- catch (e) {
64
- reject(e);
65
- }
66
- });
67
- });
68
- req.on('error', reject);
69
- req.end();
70
- });
60
+ const res = await fetchHfWithRetry(url.toString(), opts);
61
+ if (!res.ok) {
62
+ throw Object.assign(new Error(`HF datasets-server returned ${res.status} for ${args.dataset}/${args.split}`), { httpStatus: res.status });
63
+ }
64
+ const json = (await res.json());
65
+ return (json.rows ?? []).map((r) => r.row);
71
66
  }
72
67
  //# sourceMappingURL=_swe-rebench-v2-pool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_swe-rebench-v2-pool.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_swe-rebench-v2-pool.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,gBAAgB,GAEjB,MAAM,2DAA2D,CAAC;AAgBnE,yEAAyE;AACzE,MAAM,UAAU,qBAAqB,CAAC,MAAgB;IACpD,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACtC,IAAI,EAAE,CAAC;AACZ,CAAC;AAiBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAmB;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;gBAAE,SAAS;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC;gBACR,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,UAAU,EAAE,gCAAgC;gBAC5C,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;gBACxC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAwD,EACxD,OAAgC,EAAE;IAElC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,6CAA6C,CAAC,CAAC;IACnE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC1C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,QAAQ,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,EACxF,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAC3B,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC"}
@@ -9,6 +9,10 @@ export interface TaskCounters {
9
9
  posted: number;
10
10
  successful: number;
11
11
  last_posted_at: number;
12
+ /** On-chain taskId of the most-recent posting for this instance (#802).
13
+ * Set by CreatorLoop after the post resolves; used by the generator to look
14
+ * up claim exhaustion via DiscoveryAPI.getInstanceClaimCounts. */
15
+ last_task_id?: string;
12
16
  }
13
17
  export declare class GeneratorStateStore {
14
18
  private stateFile;
@@ -17,8 +21,28 @@ export declare class GeneratorStateStore {
17
21
  stateDir: string;
18
22
  });
19
23
  private load;
24
+ /**
25
+ * Drop the in-memory cache so the next read re-reads from disk (#802). The
26
+ * generator holds a long-lived store, but `last_task_id` (and `successful`)
27
+ * are written by *other* loops (CreatorLoop, delivery-watcher) through their
28
+ * own store instances against the same file. Calling this at the START of
29
+ * each generator tick makes those out-of-band disk writes visible; without
30
+ * it the generator's first-load cache never sees the creator's
31
+ * `recordLastTaskId` write and classifies every posting as unposted forever.
32
+ */
33
+ invalidate(): void;
20
34
  private save;
21
35
  getCounters(instance_id: string): Promise<TaskCounters>;
36
+ /**
37
+ * Instance ids this generator has posted at least once — i.e. that entered
38
+ * the SolverNet train stream. Used by held-out screening (#986) to keep the
39
+ * exam to the never-posted remainder (a posted task may have been trained on,
40
+ * so holding it out later would make a trained-checkpoint pass memorization,
41
+ * not generalization). This is THIS launcher's posting history; complete for a
42
+ * single-launcher SolverNet.
43
+ */
44
+ postedInstanceIds(): Promise<Set<string>>;
22
45
  recordPosted(instance_id: string, now?: number): Promise<void>;
23
46
  recordSuccess(instance_id: string): Promise<void>;
47
+ recordLastTaskId(instance_id: string, taskId: string): Promise<void>;
24
48
  }
@@ -25,6 +25,18 @@ export class GeneratorStateStore {
25
25
  }
26
26
  return this.cache;
27
27
  }
28
+ /**
29
+ * Drop the in-memory cache so the next read re-reads from disk (#802). The
30
+ * generator holds a long-lived store, but `last_task_id` (and `successful`)
31
+ * are written by *other* loops (CreatorLoop, delivery-watcher) through their
32
+ * own store instances against the same file. Calling this at the START of
33
+ * each generator tick makes those out-of-band disk writes visible; without
34
+ * it the generator's first-load cache never sees the creator's
35
+ * `recordLastTaskId` write and classifies every posting as unposted forever.
36
+ */
37
+ invalidate() {
38
+ this.cache = null;
39
+ }
28
40
  async save() {
29
41
  if (!this.cache)
30
42
  return;
@@ -35,6 +47,20 @@ export class GeneratorStateStore {
35
47
  const state = await this.load();
36
48
  return state.tasks[instance_id] ?? { posted: 0, successful: 0, last_posted_at: 0 };
37
49
  }
50
+ /**
51
+ * Instance ids this generator has posted at least once — i.e. that entered
52
+ * the SolverNet train stream. Used by held-out screening (#986) to keep the
53
+ * exam to the never-posted remainder (a posted task may have been trained on,
54
+ * so holding it out later would make a trained-checkpoint pass memorization,
55
+ * not generalization). This is THIS launcher's posting history; complete for a
56
+ * single-launcher SolverNet.
57
+ */
58
+ async postedInstanceIds() {
59
+ const state = await this.load();
60
+ return new Set(Object.entries(state.tasks)
61
+ .filter(([, c]) => c.posted > 0)
62
+ .map(([id]) => id));
63
+ }
38
64
  async recordPosted(instance_id, now = Date.now()) {
39
65
  const state = await this.load();
40
66
  const c = state.tasks[instance_id] ?? { posted: 0, successful: 0, last_posted_at: 0 };
@@ -50,5 +76,12 @@ export class GeneratorStateStore {
50
76
  state.tasks[instance_id] = c;
51
77
  await this.save();
52
78
  }
79
+ async recordLastTaskId(instance_id, taskId) {
80
+ const state = await this.load();
81
+ const c = state.tasks[instance_id] ?? { posted: 0, successful: 0, last_posted_at: 0 };
82
+ c.last_task_id = taskId;
83
+ state.tasks[instance_id] = c;
84
+ await this.save();
85
+ }
53
86
  }
54
87
  //# sourceMappingURL=_swe-rebench-v2-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_swe-rebench-v2-state.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,MAAM,OAAO,mBAAmB;IACtB,SAAS,CAAS;IAClB,KAAK,GAAqB,IAAI,CAAC;IAEvC,YAAY,IAA0B;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,EAAE,aAAa,EAAE,mCAAmC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,KAAM,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,WAAmB;QACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACtF,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QACd,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC;QACvB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,WAAmB;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACtF,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;QAClB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF"}
1
+ {"version":3,"file":"_swe-rebench-v2-state.js","sourceRoot":"","sources":["../../src/solver-types/_swe-rebench-v2-state.ts"],"names":[],"mappings":"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"}