@jinn-network/client 0.1.5 → 0.1.6-canary.118cd4d0

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 (343) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/dist/adapters/mech/adapter.js +7 -7
  3. package/dist/adapters/mech/adapter.js.map +1 -1
  4. package/dist/adapters/mech/ipfs-pinfile.d.ts +22 -0
  5. package/dist/adapters/mech/ipfs-pinfile.js +54 -0
  6. package/dist/adapters/mech/ipfs-pinfile.js.map +1 -0
  7. package/dist/adapters/mech/ipfs.d.ts +1 -0
  8. package/dist/adapters/mech/ipfs.js +24 -1
  9. package/dist/adapters/mech/ipfs.js.map +1 -1
  10. package/dist/api/bootstrap-endpoint.js +14 -1
  11. package/dist/api/bootstrap-endpoint.js.map +1 -1
  12. package/dist/api/discovery-endpoint.d.ts +31 -0
  13. package/dist/api/discovery-endpoint.js +78 -0
  14. package/dist/api/discovery-endpoint.js.map +1 -0
  15. package/dist/api/fleet-build.d.ts +7 -0
  16. package/dist/api/fleet-build.js +6 -1
  17. package/dist/api/fleet-build.js.map +1 -1
  18. package/dist/api/gather-status.js +20 -3
  19. package/dist/api/gather-status.js.map +1 -1
  20. package/dist/api/harness-readiness-endpoint.d.ts +25 -0
  21. package/dist/api/harness-readiness-endpoint.js +24 -0
  22. package/dist/api/harness-readiness-endpoint.js.map +1 -0
  23. package/dist/api/hermes-doctor-endpoint.d.ts +26 -0
  24. package/dist/api/hermes-doctor-endpoint.js +29 -0
  25. package/dist/api/hermes-doctor-endpoint.js.map +1 -0
  26. package/dist/api/server.d.ts +43 -0
  27. package/dist/api/server.js +39 -0
  28. package/dist/api/server.js.map +1 -1
  29. package/dist/api/setup-endpoints.d.ts +5 -0
  30. package/dist/api/setup-endpoints.js +24 -5
  31. package/dist/api/setup-endpoints.js.map +1 -1
  32. package/dist/build-info.json +4 -4
  33. package/dist/build-meta.json +1 -1
  34. package/dist/cli/commands/auth.js +3 -1
  35. package/dist/cli/commands/auth.js.map +1 -1
  36. package/dist/cli/commands/create.d.ts +5 -3
  37. package/dist/cli/commands/create.js +101 -36
  38. package/dist/cli/commands/create.js.map +1 -1
  39. package/dist/cli/commands/solver-nets.d.ts +19 -0
  40. package/dist/cli/commands/solver-nets.js +140 -2
  41. package/dist/cli/commands/solver-nets.js.map +1 -1
  42. package/dist/cli/commands/solver-plugins-publish.d.ts +31 -0
  43. package/dist/cli/commands/solver-plugins-publish.js +169 -0
  44. package/dist/cli/commands/solver-plugins-publish.js.map +1 -0
  45. package/dist/cli/commands/solver-plugins-revoke.d.ts +15 -0
  46. package/dist/cli/commands/solver-plugins-revoke.js +91 -0
  47. package/dist/cli/commands/solver-plugins-revoke.js.map +1 -0
  48. package/dist/cli/commands/solver-plugins.d.ts +50 -6
  49. package/dist/cli/commands/solver-plugins.js +205 -68
  50. package/dist/cli/commands/solver-plugins.js.map +1 -1
  51. package/dist/config.d.ts +27 -0
  52. package/dist/config.js +30 -2
  53. package/dist/config.js.map +1 -1
  54. package/dist/conformance/checks/hash-signature.js +6 -2
  55. package/dist/conformance/checks/hash-signature.js.map +1 -1
  56. package/dist/conformance/checks/payload.js +4 -2
  57. package/dist/conformance/checks/payload.js.map +1 -1
  58. package/dist/conformance/checks/verdict.d.ts +10 -10
  59. package/dist/conformance/checks/verdict.js +16 -15
  60. package/dist/conformance/checks/verdict.js.map +1 -1
  61. package/dist/conformance/harness.d.ts +1 -1
  62. package/dist/conformance/harness.js +16 -9
  63. package/dist/conformance/harness.js.map +1 -1
  64. package/dist/conformance/types.d.ts +10 -3
  65. package/dist/conformance/types.js.map +1 -1
  66. package/dist/corpus/acquire.d.ts +1 -3
  67. package/dist/corpus/acquire.js.map +1 -1
  68. package/dist/corpus/envelope-projection.d.ts +1 -1
  69. package/dist/corpus/envelope-projection.js +14 -7
  70. package/dist/corpus/envelope-projection.js.map +1 -1
  71. package/dist/corpus/index.d.ts +2 -1
  72. package/dist/corpus/index.js.map +1 -1
  73. package/dist/corpus/prediction-brier-scoreboard-report.js +1 -1
  74. package/dist/corpus/prediction-brier-scoreboard-report.js.map +1 -1
  75. package/dist/corpus/prediction-brier-scoreboard.js +3 -1
  76. package/dist/corpus/prediction-brier-scoreboard.js.map +1 -1
  77. package/dist/corpus/types.d.ts +2 -2
  78. package/dist/daemon/daemon.d.ts +17 -1
  79. package/dist/daemon/daemon.js +15 -0
  80. package/dist/daemon/daemon.js.map +1 -1
  81. package/dist/daemon/freeze-fence.js +6 -3
  82. package/dist/daemon/freeze-fence.js.map +1 -1
  83. package/dist/daemon/readiness-gate.d.ts +30 -0
  84. package/dist/daemon/readiness-gate.js +31 -0
  85. package/dist/daemon/readiness-gate.js.map +1 -0
  86. package/dist/dashboard/assets/{index-D_NMfDfV.css → index-DOlzFN8a.css} +1 -1
  87. package/dist/dashboard/assets/index-NkZ7CTAT.js +140 -0
  88. package/dist/dashboard/index.html +2 -2
  89. package/dist/discovery/http.js +121 -0
  90. package/dist/discovery/http.js.map +1 -1
  91. package/dist/discovery/onchain.js +11 -0
  92. package/dist/discovery/onchain.js.map +1 -1
  93. package/dist/discovery/types.d.ts +112 -0
  94. package/dist/discovery/types.js.map +1 -1
  95. package/dist/discovery/with-fallback.js +9 -0
  96. package/dist/discovery/with-fallback.js.map +1 -1
  97. package/dist/earning/agent-wallet-binding.d.ts +20 -1
  98. package/dist/earning/agent-wallet-binding.js +54 -16
  99. package/dist/earning/agent-wallet-binding.js.map +1 -1
  100. package/dist/earning/bootstrap.d.ts +119 -0
  101. package/dist/earning/bootstrap.js +482 -16
  102. package/dist/earning/bootstrap.js.map +1 -1
  103. package/dist/earning/contracts.js +9 -1
  104. package/dist/earning/contracts.js.map +1 -1
  105. package/dist/earning/funding-plan.js +15 -2
  106. package/dist/earning/funding-plan.js.map +1 -1
  107. package/dist/earning/store.js +48 -1
  108. package/dist/earning/store.js.map +1 -1
  109. package/dist/earning/types.d.ts +30 -0
  110. package/dist/earning/types.js +37 -0
  111. package/dist/earning/types.js.map +1 -1
  112. package/dist/erc8004/abis.d.ts +64 -0
  113. package/dist/erc8004/abis.js +48 -0
  114. package/dist/erc8004/abis.js.map +1 -1
  115. package/dist/erc8004/plugin-registry.d.ts +102 -0
  116. package/dist/erc8004/plugin-registry.js +165 -0
  117. package/dist/erc8004/plugin-registry.js.map +1 -0
  118. package/dist/events/types.d.ts +2 -2
  119. package/dist/harnesses/engine/engine.js +15 -3
  120. package/dist/harnesses/engine/engine.js.map +1 -1
  121. package/dist/harnesses/engine/envelope-assembly.d.ts +2 -2
  122. package/dist/harnesses/engine/envelope-assembly.js +4 -2
  123. package/dist/harnesses/engine/envelope-assembly.js.map +1 -1
  124. package/dist/harnesses/freeze.d.ts +4 -1
  125. package/dist/harnesses/freeze.js +12 -2
  126. package/dist/harnesses/freeze.js.map +1 -1
  127. package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +4 -1
  128. package/dist/harnesses/impls/claude-mcp-prediction/index.js +7 -2
  129. package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -1
  130. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.d.ts +4 -1
  131. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js +7 -2
  132. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -1
  133. package/dist/harnesses/impls/evaluation-context.d.ts +15 -4
  134. package/dist/harnesses/impls/evaluation-context.js +24 -8
  135. package/dist/harnesses/impls/evaluation-context.js.map +1 -1
  136. package/dist/harnesses/impls/hermes-agent/adapter.d.ts +34 -0
  137. package/dist/harnesses/impls/hermes-agent/adapter.js +205 -0
  138. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -0
  139. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +18 -0
  140. package/dist/harnesses/impls/hermes-agent/bootstrap.js +231 -0
  141. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -0
  142. package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +49 -0
  143. package/dist/harnesses/impls/hermes-agent/config-builder.js +104 -0
  144. package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -0
  145. package/dist/harnesses/impls/hermes-agent/harness.d.ts +30 -0
  146. package/dist/harnesses/impls/hermes-agent/harness.js +52 -0
  147. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -0
  148. package/dist/harnesses/impls/hermes-agent/index.d.ts +5 -0
  149. package/dist/harnesses/impls/hermes-agent/index.js +7 -0
  150. package/dist/harnesses/impls/hermes-agent/index.js.map +1 -0
  151. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +15 -0
  152. package/dist/harnesses/impls/hermes-agent/prompt.js +37 -0
  153. package/dist/harnesses/impls/hermes-agent/prompt.js.map +1 -0
  154. package/dist/harnesses/impls/index.d.ts +6 -0
  155. package/dist/harnesses/impls/index.js +17 -4
  156. package/dist/harnesses/impls/index.js.map +1 -1
  157. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -0
  158. package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-code.js +13 -34
  159. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -0
  160. package/dist/harnesses/impls/learner/adapters/codex-workspace.js.map +1 -0
  161. package/dist/harnesses/impls/{claude-code-learner → learner}/harness.d.ts +9 -3
  162. package/dist/harnesses/impls/{claude-code-learner → learner}/harness.js +24 -1
  163. package/dist/harnesses/impls/learner/harness.js.map +1 -0
  164. package/dist/harnesses/impls/{claude-code-learner → learner}/harvest.js +15 -3
  165. package/dist/harnesses/impls/learner/harvest.js.map +1 -0
  166. package/dist/harnesses/impls/{claude-code-learner → learner}/index.d.ts +5 -5
  167. package/dist/harnesses/impls/{claude-code-learner → learner}/index.js +4 -4
  168. package/dist/harnesses/impls/learner/index.js.map +1 -0
  169. package/dist/harnesses/impls/{claude-code-learner → learner}/plugin-path.d.ts +4 -4
  170. package/dist/harnesses/impls/{claude-code-learner → learner}/plugin-path.js +7 -7
  171. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -0
  172. package/dist/harnesses/impls/{claude-code-learner → learner}/restoration-patch.js +3 -1
  173. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -0
  174. package/dist/harnesses/impls/learner/test-utils/fake-plugin-outputs.js.map +1 -0
  175. package/dist/harnesses/impls/learner/test-utils/noop-adapter.js.map +1 -0
  176. package/dist/harnesses/impls/{claude-code-learner → learner}/types.d.ts +12 -2
  177. package/dist/harnesses/impls/learner/types.js.map +1 -0
  178. package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +13 -12
  179. package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
  180. package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +7 -7
  181. package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -1
  182. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.d.ts +3 -3
  183. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js +7 -6
  184. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js.map +1 -1
  185. package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js +1 -1
  186. package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -1
  187. package/dist/harnesses/impls/prediction-v0-evaluator/index.js +11 -10
  188. package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -1
  189. package/dist/harnesses/impls/prediction-v1-evaluator/index.js +11 -10
  190. package/dist/harnesses/impls/prediction-v1-evaluator/index.js.map +1 -1
  191. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +1 -0
  192. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +10 -2
  193. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  194. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +24 -5
  195. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +104 -4
  196. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  197. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +9 -0
  198. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +25 -1
  199. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  200. package/dist/harnesses/names.d.ts +1 -0
  201. package/dist/harnesses/names.js +3 -0
  202. package/dist/harnesses/names.js.map +1 -1
  203. package/dist/harnesses/readiness-registry.d.ts +48 -0
  204. package/dist/harnesses/readiness-registry.js +136 -0
  205. package/dist/harnesses/readiness-registry.js.map +1 -0
  206. package/dist/harnesses/types.d.ts +7 -0
  207. package/dist/main.d.ts +14 -0
  208. package/dist/main.js +112 -37
  209. package/dist/main.js.map +1 -1
  210. package/dist/mcp/server.js +14 -13
  211. package/dist/mcp/server.js.map +1 -1
  212. package/dist/operator-errors.js +13 -1
  213. package/dist/operator-errors.js.map +1 -1
  214. package/dist/preflight/claude-auth.d.ts +18 -0
  215. package/dist/preflight/claude-auth.js +38 -0
  216. package/dist/preflight/claude-auth.js.map +1 -1
  217. package/dist/scripts/donation-consumption-acceptance.js +1 -1
  218. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  219. package/dist/scripts/swe-rebench-v2-known-bad.json +12 -0
  220. package/dist/scripts/swe-rebench-v2-seed-pool.json +26 -0
  221. package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +52 -0
  222. package/dist/solver-types/_swe-rebench-v2-substrate.js +76 -0
  223. package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -0
  224. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +38 -12
  225. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +136 -27
  226. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  227. package/dist/solver-types/swe-rebench-v2-auto.d.ts +6 -0
  228. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  229. package/dist/solver-types/swe-rebench-v2.d.ts +1 -0
  230. package/dist/solver-types/swe-rebench-v2.js +19 -6
  231. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  232. package/dist/store/store.js +12 -4
  233. package/dist/store/store.js.map +1 -1
  234. package/dist/templates/plugins/runtime-plugin/.mcp.json.tmpl +8 -0
  235. package/dist/templates/plugins/runtime-plugin/README.md.tmpl +30 -0
  236. package/dist/templates/plugins/runtime-plugin/gitignore.tmpl +3 -0
  237. package/dist/templates/plugins/runtime-plugin/jinn.plugin.json.tmpl +21 -0
  238. package/dist/templates/plugins/runtime-plugin/mcp/server.mjs.tmpl +33 -0
  239. package/dist/templates/plugins/runtime-plugin/package.json.tmpl +15 -0
  240. package/dist/templates/plugins/runtime-plugin/test/plugin.test.ts.tmpl +35 -0
  241. package/dist/templates/plugins/runtime-plugin/tsconfig.json.tmpl +11 -0
  242. package/dist/templates/plugins/solver-type-plugin/README.md.tmpl +35 -0
  243. package/dist/templates/plugins/solver-type-plugin/gitignore.tmpl +3 -0
  244. package/dist/templates/plugins/solver-type-plugin/jinn.plugin.json.tmpl +11 -0
  245. package/dist/templates/plugins/solver-type-plugin/package.json.tmpl +15 -0
  246. package/dist/templates/plugins/solver-type-plugin/skills/example/SKILL.md.tmpl +10 -0
  247. package/dist/templates/plugins/solver-type-plugin/test/plugin.test.ts.tmpl +25 -0
  248. package/dist/templates/plugins/solver-type-plugin/tsconfig.json.tmpl +11 -0
  249. package/dist/tx-retry.d.ts +13 -0
  250. package/dist/tx-retry.js +22 -0
  251. package/dist/tx-retry.js.map +1 -1
  252. package/dist/types/envelope.d.ts +28 -21
  253. package/dist/types/envelope.js +8 -3
  254. package/dist/types/envelope.js.map +1 -1
  255. package/dist/types/payloads/index.d.ts +2 -2
  256. package/dist/types/payloads/index.js +13 -12
  257. package/dist/types/payloads/index.js.map +1 -1
  258. package/dist/types/payloads/portfolio-v0.d.ts +60 -10
  259. package/dist/types/payloads/portfolio-v0.js +16 -6
  260. package/dist/types/payloads/portfolio-v0.js.map +1 -1
  261. package/dist/types/payloads/prediction-apy-v0.d.ts +52 -10
  262. package/dist/types/payloads/prediction-apy-v0.js +16 -6
  263. package/dist/types/payloads/prediction-apy-v0.js.map +1 -1
  264. package/dist/types/payloads/prediction-v0.d.ts +49 -10
  265. package/dist/types/payloads/prediction-v0.js +16 -6
  266. package/dist/types/payloads/prediction-v0.js.map +1 -1
  267. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +45 -6
  268. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +16 -6
  269. package/dist/x402/handler.js +51 -20
  270. package/dist/x402/handler.js.map +1 -1
  271. package/package.json +11 -3
  272. package/plugins/swe-rebench-v2-diffmin/.claude-plugin/plugin.json +5 -0
  273. package/plugins/swe-rebench-v2-diffmin/.mcp.json +8 -0
  274. package/plugins/swe-rebench-v2-diffmin/README.md +69 -0
  275. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +12 -0
  276. package/plugins/swe-rebench-v2-diffmin/mcp/diff-stats-server.mjs +72 -0
  277. package/plugins/swe-rebench-v2-diffmin/mcp/diff-stats.mjs +48 -0
  278. package/plugins/swe-rebench-v2-diffmin/package.json +19 -0
  279. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +116 -0
  280. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +126 -0
  281. package/plugins/swe-rebench-v2-diffmin/test/diff-stats.test.ts +62 -0
  282. package/plugins/swe-rebench-v2-diffmin/test/manifest.test.ts +53 -0
  283. package/plugins/swe-rebench-v2-diffmin/tsconfig.json +12 -0
  284. package/plugins/swe-rebench-v2-runtime/README.md +13 -0
  285. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +7 -3
  286. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +6 -17
  287. package/templates/plugins/runtime-plugin/.mcp.json.tmpl +8 -0
  288. package/templates/plugins/runtime-plugin/README.md.tmpl +30 -0
  289. package/templates/plugins/runtime-plugin/gitignore.tmpl +3 -0
  290. package/templates/plugins/runtime-plugin/jinn.plugin.json.tmpl +21 -0
  291. package/templates/plugins/runtime-plugin/mcp/server.mjs.tmpl +33 -0
  292. package/templates/plugins/runtime-plugin/package.json.tmpl +15 -0
  293. package/templates/plugins/runtime-plugin/test/plugin.test.ts.tmpl +35 -0
  294. package/templates/plugins/runtime-plugin/tsconfig.json.tmpl +11 -0
  295. package/templates/plugins/solver-type-plugin/README.md.tmpl +35 -0
  296. package/templates/plugins/solver-type-plugin/gitignore.tmpl +3 -0
  297. package/templates/plugins/solver-type-plugin/jinn.plugin.json.tmpl +11 -0
  298. package/templates/plugins/solver-type-plugin/package.json.tmpl +15 -0
  299. package/templates/plugins/solver-type-plugin/skills/example/SKILL.md.tmpl +10 -0
  300. package/templates/plugins/solver-type-plugin/test/plugin.test.ts.tmpl +25 -0
  301. package/templates/plugins/solver-type-plugin/tsconfig.json.tmpl +11 -0
  302. package/dist/dashboard/assets/index-BjtltOGc.js +0 -76
  303. package/dist/harnesses/impls/claude-code-learner/adapters/claude-code.js.map +0 -1
  304. package/dist/harnesses/impls/claude-code-learner/adapters/codex-code.js.map +0 -1
  305. package/dist/harnesses/impls/claude-code-learner/adapters/codex-workspace.js.map +0 -1
  306. package/dist/harnesses/impls/claude-code-learner/harness.js.map +0 -1
  307. package/dist/harnesses/impls/claude-code-learner/harvest.js.map +0 -1
  308. package/dist/harnesses/impls/claude-code-learner/index.js.map +0 -1
  309. package/dist/harnesses/impls/claude-code-learner/plugin-path.js.map +0 -1
  310. package/dist/harnesses/impls/claude-code-learner/restoration-patch.js.map +0 -1
  311. package/dist/harnesses/impls/claude-code-learner/test-utils/fake-plugin-outputs.js.map +0 -1
  312. package/dist/harnesses/impls/claude-code-learner/test-utils/noop-adapter.js.map +0 -1
  313. package/dist/harnesses/impls/claude-code-learner/types.js.map +0 -1
  314. package/dist/preflight/claude-required.d.ts +0 -8
  315. package/dist/preflight/claude-required.js +0 -17
  316. package/dist/preflight/claude-required.js.map +0 -1
  317. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/claude-code.d.ts +0 -0
  318. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/claude-code.js +0 -0
  319. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-code.d.ts +0 -0
  320. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-workspace.d.ts +0 -0
  321. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-workspace.js +0 -0
  322. /package/dist/harnesses/impls/{claude-code-learner → learner}/harvest.d.ts +0 -0
  323. /package/dist/harnesses/impls/{claude-code-learner → learner}/restoration-patch.d.ts +0 -0
  324. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/fake-plugin-outputs.d.ts +0 -0
  325. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/fake-plugin-outputs.js +0 -0
  326. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/noop-adapter.d.ts +0 -0
  327. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/noop-adapter.js +0 -0
  328. /package/dist/harnesses/impls/{claude-code-learner → learner}/types.js +0 -0
  329. /package/plugins/{claude-code-learner → learner}/.claude-plugin/plugin.json +0 -0
  330. /package/plugins/{claude-code-learner → learner}/.codex-plugin/plugin.json +0 -0
  331. /package/plugins/{claude-code-learner → learner}/AGENTS.md +0 -0
  332. /package/plugins/{claude-code-learner → learner}/CLAUDE.md +0 -0
  333. /package/plugins/{claude-code-learner → learner}/README.md +0 -0
  334. /package/plugins/{claude-code-learner → learner}/hooks/hooks.json +0 -0
  335. /package/plugins/{claude-code-learner → learner}/hooks/session-start +0 -0
  336. /package/plugins/{claude-code-learner → learner}/skills/learn/SKILL.md +0 -0
  337. /package/plugins/{claude-code-learner → learner}/skills/learn/analyst-prompt.md +0 -0
  338. /package/plugins/{claude-code-learner → learner}/skills/learn/consolidator-prompt.md +0 -0
  339. /package/plugins/{claude-code-learner → learner}/skills/learn/explorer-prompt.md +0 -0
  340. /package/plugins/{claude-code-learner → learner}/skills/learn/planner-prompt.md +0 -0
  341. /package/plugins/{claude-code-learner → learner}/skills/learn/promoter-prompt.md +0 -0
  342. /package/plugins/{claude-code-learner → learner}/skills/learn/step-worker-prompt.md +0 -0
  343. /package/plugins/{claude-code-learner → learner}/skills/learn/strategist-prompt.md +0 -0
@@ -9,16 +9,40 @@
9
9
  * silently grading against a missing instance.
10
10
  */
11
11
  const DEFAULT_BASE_URL = 'https://datasets-server.huggingface.co/rows';
12
+ const DEFAULT_RETRY_BACKOFF_MS = [200, 800, 3200];
12
13
  export class HttpHfFetcher {
13
14
  baseUrl;
14
15
  pageSize;
15
16
  maxRows;
16
17
  fetchImpl;
18
+ retryBackoffMs;
17
19
  constructor(opts = {}) {
18
20
  this.baseUrl = opts.baseUrl ?? DEFAULT_BASE_URL;
19
21
  this.pageSize = Math.min(opts.pageSize ?? 100, 100);
20
22
  this.maxRows = opts.maxRows ?? 1000;
21
23
  this.fetchImpl = opts.fetchImpl ?? fetch.bind(globalThis);
24
+ this.retryBackoffMs = opts.retryBackoffMs ?? DEFAULT_RETRY_BACKOFF_MS;
25
+ }
26
+ async fetchWithRetry(url) {
27
+ let lastErr = null;
28
+ for (let attempt = 0; attempt <= this.retryBackoffMs.length; attempt += 1) {
29
+ try {
30
+ const res = await this.fetchImpl(url);
31
+ if (res.ok || (res.status >= 400 && res.status < 500))
32
+ return res;
33
+ // 5xx → retry-eligible
34
+ lastErr = new Error(`HF returned ${res.status}`);
35
+ }
36
+ catch (err) {
37
+ lastErr = err;
38
+ }
39
+ if (attempt < this.retryBackoffMs.length) {
40
+ await new Promise((r) => setTimeout(r, this.retryBackoffMs[attempt]));
41
+ }
42
+ }
43
+ if (lastErr instanceof Error)
44
+ throw lastErr;
45
+ throw new Error('HF fetch failed after retries');
22
46
  }
23
47
  async fetchTaskRow(args) {
24
48
  let offset = 0;
@@ -29,7 +53,7 @@ export class HttpHfFetcher {
29
53
  url.searchParams.set('split', args.hf_split);
30
54
  url.searchParams.set('offset', String(offset));
31
55
  url.searchParams.set('length', String(this.pageSize));
32
- const res = await this.fetchImpl(url.toString());
56
+ const res = await this.fetchWithRetry(url.toString());
33
57
  if (!res.ok) {
34
58
  throw new Error(`HF datasets-server returned ${res.status} for ${args.hf_dataset}/${args.hf_split}`);
35
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hf-fetcher.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hf-fetcher.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export declare const CLAUDE_CODE_HARNESS = "claude-code";
2
2
  export declare const CODEX_HARNESS = "codex";
3
+ export declare const HERMES_AGENT_HARNESS = "hermes-agent";
3
4
  export declare function canonicalHarnessName(name: string): string;
4
5
  export declare function harnessNameMatches(candidate: string, requested: string): boolean;
5
6
  export declare function canonicalHarnessNameSet(names: readonly string[]): Set<string>;
@@ -1,5 +1,6 @@
1
1
  export const CLAUDE_CODE_HARNESS = 'claude-code';
2
2
  export const CODEX_HARNESS = 'codex';
3
+ export const HERMES_AGENT_HARNESS = 'hermes-agent';
3
4
  const HARNESS_ALIASES = {
4
5
  'claude-code-learner': CLAUDE_CODE_HARNESS,
5
6
  'codex-code-learner': CODEX_HARNESS,
@@ -19,6 +20,8 @@ export function harnessStateDirName(name) {
19
20
  return 'claude-code-learner';
20
21
  if (canonical === CODEX_HARNESS)
21
22
  return 'codex-code-learner';
23
+ if (canonical === HERMES_AGENT_HARNESS)
24
+ return 'hermes-agent';
22
25
  return canonical;
23
26
  }
24
27
  //# sourceMappingURL=names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/harnesses/names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC,MAAM,eAAe,GAA2B;IAC9C,qBAAqB,EAAE,mBAAmB;IAC1C,oBAAoB,EAAE,aAAa;CACpC,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,SAAiB;IACrE,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAwB;IAC9D,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,mBAAmB;QAAE,OAAO,qBAAqB,CAAC;IACpE,IAAI,SAAS,KAAK,aAAa;QAAE,OAAO,oBAAoB,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/harnesses/names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAEnD,MAAM,eAAe,GAA2B;IAC9C,qBAAqB,EAAE,mBAAmB;IAC1C,oBAAoB,EAAE,aAAa;CACpC,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,SAAiB;IACrE,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAwB;IAC9D,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,mBAAmB;QAAE,OAAO,qBAAqB,CAAC;IACpE,IAAI,SAAS,KAAK,aAAa;QAAE,OAAO,oBAAoB,CAAC;IAC7D,IAAI,SAAS,KAAK,oBAAoB;QAAE,OAAO,cAAc,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * HarnessReadinessRegistry — per-harness Harness.isReady() composition for the
3
+ * daemon's claim loops and the SPA's per-harness setup cards.
4
+ *
5
+ * See docs/superpowers/specs/2026-05-15-per-harness-auth-design.md.
6
+ *
7
+ * Single writer: the background refresh tick. Readers (claim loops + the
8
+ * /v1/harnesses/readiness endpoint) read the cached snapshot lock-free.
9
+ * Bounded staleness = tickIntervalMs.
10
+ */
11
+ import type { Harness, ReadyStatus } from './types.js';
12
+ export interface JoinedHarnessSpec {
13
+ harnessName: string;
14
+ roles: Array<'solver' | 'evaluator'>;
15
+ }
16
+ export interface HarnessReadinessSnapshot {
17
+ lastRefreshedAt: string;
18
+ harnesses: Array<{
19
+ harnessName: string;
20
+ manifestCids: string[];
21
+ ready: boolean;
22
+ reason?: string;
23
+ nextStep?: ReadyStatus['nextStep'];
24
+ }>;
25
+ }
26
+ export interface HarnessReadinessRegistryOptions {
27
+ /** Harness instances indexed by Harness.name. */
28
+ harnessesByName: Record<string, Harness>;
29
+ /** joinedSolverNets shape, narrowed to harness lookup. */
30
+ joinedHarnessesByCid: Record<string, JoinedHarnessSpec>;
31
+ /** Background refresh interval (ms). Default 4000 (matches existing Claude auth poll cadence). */
32
+ tickIntervalMs?: number;
33
+ /** Per-isReady() timeout (ms). Default 5000. */
34
+ isReadyTimeoutMs?: number;
35
+ }
36
+ export declare class HarnessReadinessRegistry {
37
+ private readonly opts;
38
+ private snapshot;
39
+ private timer;
40
+ private refreshInFlight;
41
+ constructor(opts: HarnessReadinessRegistryOptions);
42
+ start(): void;
43
+ stop(): void;
44
+ getSnapshot(): HarnessReadinessSnapshot;
45
+ isReadyForClaim(manifestCid: string): ReadyStatus;
46
+ refreshNow(): Promise<void>;
47
+ private _doRefresh;
48
+ }
@@ -0,0 +1,136 @@
1
+ /**
2
+ * HarnessReadinessRegistry — per-harness Harness.isReady() composition for the
3
+ * daemon's claim loops and the SPA's per-harness setup cards.
4
+ *
5
+ * See docs/superpowers/specs/2026-05-15-per-harness-auth-design.md.
6
+ *
7
+ * Single writer: the background refresh tick. Readers (claim loops + the
8
+ * /v1/harnesses/readiness endpoint) read the cached snapshot lock-free.
9
+ * Bounded staleness = tickIntervalMs.
10
+ */
11
+ const DEFAULT_TICK_INTERVAL_MS = 4_000;
12
+ const DEFAULT_IS_READY_TIMEOUT_MS = 5_000;
13
+ export class HarnessReadinessRegistry {
14
+ opts;
15
+ snapshot = {
16
+ lastRefreshedAt: new Date(0).toISOString(),
17
+ harnesses: [],
18
+ };
19
+ timer = null;
20
+ refreshInFlight = false;
21
+ constructor(opts) {
22
+ this.opts = {
23
+ tickIntervalMs: opts.tickIntervalMs ?? DEFAULT_TICK_INTERVAL_MS,
24
+ isReadyTimeoutMs: opts.isReadyTimeoutMs ?? DEFAULT_IS_READY_TIMEOUT_MS,
25
+ harnessesByName: opts.harnessesByName,
26
+ joinedHarnessesByCid: opts.joinedHarnessesByCid,
27
+ };
28
+ }
29
+ start() {
30
+ if (this.timer)
31
+ return;
32
+ this.timer = setInterval(() => { void this.refreshNow(); }, this.opts.tickIntervalMs);
33
+ }
34
+ stop() {
35
+ if (this.timer) {
36
+ clearInterval(this.timer);
37
+ this.timer = null;
38
+ }
39
+ }
40
+ getSnapshot() {
41
+ return this.snapshot;
42
+ }
43
+ isReadyForClaim(manifestCid) {
44
+ const joined = this.opts.joinedHarnessesByCid[manifestCid];
45
+ if (!joined) {
46
+ return {
47
+ ready: false,
48
+ reason: `manifestCid ${manifestCid} not in joinedSolverNets`,
49
+ };
50
+ }
51
+ const entry = this.snapshot.harnesses.find((h) => h.harnessName === joined.harnessName);
52
+ if (!entry) {
53
+ return { ready: false, reason: 'readiness snapshot not yet populated' };
54
+ }
55
+ return {
56
+ ready: entry.ready,
57
+ reason: entry.reason,
58
+ nextStep: entry.nextStep,
59
+ };
60
+ }
61
+ async refreshNow() {
62
+ if (this.refreshInFlight)
63
+ return;
64
+ this.refreshInFlight = true;
65
+ try {
66
+ await this._doRefresh();
67
+ }
68
+ finally {
69
+ this.refreshInFlight = false;
70
+ }
71
+ }
72
+ async _doRefresh() {
73
+ // Group joined entries by harnessName so we only call isReady() once per harness.
74
+ const harnessToCids = new Map();
75
+ for (const [cid, joined] of Object.entries(this.opts.joinedHarnessesByCid)) {
76
+ const list = harnessToCids.get(joined.harnessName) ?? [];
77
+ list.push(cid);
78
+ harnessToCids.set(joined.harnessName, list);
79
+ }
80
+ const results = await Promise.all(Array.from(harnessToCids.entries()).map(async ([name, cids]) => {
81
+ const harness = this.opts.harnessesByName[name];
82
+ if (!harness) {
83
+ return {
84
+ harnessName: name,
85
+ manifestCids: cids,
86
+ ready: false,
87
+ reason: `harness ${name} not registered in this daemon build`,
88
+ nextStep: {
89
+ description: 'Upgrade daemon or change SolverNet harness selection',
90
+ },
91
+ };
92
+ }
93
+ if (!harness.isReady) {
94
+ // No isReady → treat as always-ready (matches existing default).
95
+ return {
96
+ harnessName: name,
97
+ manifestCids: cids,
98
+ ready: true,
99
+ };
100
+ }
101
+ try {
102
+ let timeoutHandle;
103
+ const status = await Promise.race([
104
+ harness.isReady({ solverType: '*' }),
105
+ new Promise((_, reject) => {
106
+ timeoutHandle = setTimeout(() => reject(new Error('isReady timed out')), this.opts.isReadyTimeoutMs);
107
+ }),
108
+ ]).finally(() => {
109
+ if (timeoutHandle !== undefined)
110
+ clearTimeout(timeoutHandle);
111
+ });
112
+ return {
113
+ harnessName: name,
114
+ manifestCids: cids,
115
+ ready: status.ready,
116
+ reason: status.reason,
117
+ nextStep: status.nextStep,
118
+ };
119
+ }
120
+ catch (err) {
121
+ const msg = err instanceof Error ? err.message : String(err);
122
+ return {
123
+ harnessName: name,
124
+ manifestCids: cids,
125
+ ready: false,
126
+ reason: `isReady threw: ${msg}`,
127
+ };
128
+ }
129
+ }));
130
+ this.snapshot = {
131
+ lastRefreshedAt: new Date().toISOString(),
132
+ harnesses: results,
133
+ };
134
+ }
135
+ }
136
+ //# sourceMappingURL=readiness-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness-registry.js","sourceRoot":"","sources":["../../src/harnesses/readiness-registry.ts"],"names":[],"mappings":"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"}
@@ -210,6 +210,13 @@ export interface Harness {
210
210
  name: string;
211
211
  /** semver */
212
212
  version: string;
213
+ /**
214
+ * Optional implStateDir paths that are runtime-only and should not contribute
215
+ * to the frozen-mode state digest. Use this for generated credentials,
216
+ * binaries, or per-task config that a harness needs in ctx.implStateDir but
217
+ * that is not part of its learning/code surface.
218
+ */
219
+ freezeStateHashIgnore?: readonly string[];
213
220
  /**
214
221
  * Return true if this Harness should handle the given (solverType, role) pair.
215
222
  *
package/dist/main.d.ts CHANGED
@@ -19,6 +19,9 @@
19
19
  * jinn run
20
20
  */
21
21
  import { type ErrorEnvelope } from './errors/envelope.js';
22
+ import type { Harness } from './harnesses/types.js';
23
+ import { HarnessReadinessRegistry } from './harnesses/readiness-registry.js';
24
+ import type { JinnConfig } from './config.js';
22
25
  export interface DaemonStartupInfo {
23
26
  schemaVersion: 1;
24
27
  generatedAt: string;
@@ -45,3 +48,14 @@ export interface SetupHaltedInfo {
45
48
  error: ErrorEnvelope;
46
49
  }
47
50
  export declare function main(): Promise<DaemonStartupInfo | SetupHaltedInfo | void>;
51
+ /**
52
+ * Builds a HarnessReadinessRegistry from the harness list returned by
53
+ * buildHarnesses() and the operator's joinedSolverNets config block.
54
+ *
55
+ * Per A2 carry-over: start() only schedules the background tick; callers that
56
+ * need the snapshot populated immediately must call refreshNow() after start().
57
+ */
58
+ export declare function buildHarnessReadinessRegistry(args: {
59
+ harnesses: Harness[];
60
+ config: Pick<JinnConfig, 'joinedSolverNets'>;
61
+ }): HarnessReadinessRegistry;
package/dist/main.js CHANGED
@@ -27,6 +27,8 @@ import { fileURLToPath } from 'node:url';
27
27
  import { loadConfig, getConfigPathFromArgs, DEFAULT_CONFIG_PATH } from './config.js';
28
28
  import { Store } from './store/store.js';
29
29
  import { startApiServer } from './api/server.js';
30
+ // addHarnessReadinessRoutes is wired through startApiServer's holder ref now
31
+ // (jinn-mono-u34i). No direct import needed.
30
32
  import { CapturePublishUnavailableError } from './api/captures.js';
31
33
  import { invalidatePredictionOperatorStatusCache } from './api/gather-status.js';
32
34
  import { ensureUiToken } from './api/ui-token.js';
@@ -37,10 +39,6 @@ import { createSetupModeController } from './setup-mode.js';
37
39
  import { buildEnvelope, emitEnvelope } from './errors/envelope.js';
38
40
  import { clearBootstrapError, persistBootstrapError, } from './errors/persisted-bootstrap-error.js';
39
41
  import { emitStructured } from './events/emitter.js';
40
- import { checkClaudeBinary } from './preflight/claude-binary.js';
41
- import { emitClaudeBinaryPreflightFailure } from './preflight/claude-invocation-envelope.js';
42
- import { detectAuthContext, probeClaudeAuth } from './preflight/claude-auth.js';
43
- import { configRequiresClaudeAuth } from './preflight/claude-required.js';
44
42
  import { FleetBootstrapper } from './earning/bootstrap.js';
45
43
  import { DEFAULT_TESTNET_ARTIFACTS, applyChainGasOverrides, getChainConfig, loadJinnMviConfig } from './earning/contracts.js';
46
44
  import { runLegacyAgentIdMigration } from './earning/migrate-agent-id.js';
@@ -57,7 +55,8 @@ import { DEFAULT_DISABLED_HARNESSES, DEFAULT_HARNESS, HarnessRegistry, } from '.
57
55
  import { joinedSolverNetsViewFromConfig } from './harnesses/engine/engine.js';
58
56
  import { buildHarnesses } from './harnesses/impls/index.js';
59
57
  import { loadExternalImpl } from './harnesses/external-impls/index.js';
60
- import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, harnessStateDirName } from './harnesses/names.js';
58
+ import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, harnessStateDirName } from './harnesses/names.js';
59
+ import { HarnessReadinessRegistry } from './harnesses/readiness-registry.js';
61
60
  import { createClients } from './adapters/mech/safe.js';
62
61
  import { loadSolverNets } from './solver-nets/registry.js';
63
62
  import { createCorpus } from './corpus/index.js';
@@ -133,7 +132,7 @@ const config = loadConfig(CONFIG_PATH);
133
132
  if (config.network === 'mainnet' && process.env['JINN_ENABLE_MAINNET'] !== '1') {
134
133
  console.warn('[main] Mainnet is disabled before launch; using testnet defaults.');
135
134
  config.network = 'testnet';
136
- config.rpcUrl = 'https://sepolia.base.org';
135
+ config.rpcUrl = 'https://base-sepolia.gateway.tenderly.co/75tyLMQuD8EHpXxMwINIKu';
137
136
  }
138
137
  let activeClaudePath = config.claudePath ?? 'claude';
139
138
  const selectClaudePath = (claudePath) => {
@@ -442,7 +441,7 @@ async function bootstrap() {
442
441
  };
443
442
  // eslint-disable-next-line no-constant-condition
444
443
  while (true) {
445
- result = await bootstrapper.bootstrap(PASSWORD);
444
+ result = await bootstrapper.ensureStage1And2(PASSWORD);
446
445
  if (!result.funding) {
447
446
  clearFundingGate();
448
447
  break;
@@ -744,6 +743,22 @@ export async function main() {
744
743
  // on first request); subsystem init below populates `holder.current` and
745
744
  // the route handlers dereference it per-request.
746
745
  const solverNetEndpointsDepsHolder = { current: undefined };
746
+ // jinn-mono-u34i: same pattern for the harness readiness registry. The
747
+ // registry is built post-bootstrap (depends on the keystore being
748
+ // available), but the routes must be registered at server start to land in
749
+ // Hono's matcher before the panel's first poll. Late-mounting via
750
+ // `addHarnessReadinessRoutes(setupApiServer.app, ...)` after the panel had
751
+ // been polling for minutes threw "Can not add a route since the matcher is
752
+ // already built" and crashed the daemon on the running-mode transition.
753
+ const harnessReadinessRegistryHolder = { current: undefined };
754
+ // jinn-mono-u34i: same eager-register / late-populate pattern for the
755
+ // DiscoveryAPI. Pre-fix, /v1/discovery/* routes only mounted when
756
+ // `config.discovery` was set at startApiServer time — but main.ts builds
757
+ // `sharedDiscoveryApi` post-bootstrap, so the routes were never registered
758
+ // and the panel's /build page got a permanent 404 on plugin-publications +
759
+ // builder-artifacts. Holder ref lets the routes register eagerly and
760
+ // start returning real data the moment main.ts assigns holder.current.
761
+ const discoveryApiHolder = { current: undefined };
747
762
  let setupApiServer;
748
763
  try {
749
764
  setupApiServer = await startApiServer({
@@ -753,6 +768,10 @@ export async function main() {
753
768
  bindHost: apiBindHost,
754
769
  corpus: () => corpusForApi,
755
770
  ui: { token: uiToken, handshakeKey },
771
+ hermesDoctor: {
772
+ hermesPath: config.hermesPath,
773
+ hermesDoctorTimeoutMs: config.hermesDoctorTimeoutMs,
774
+ },
756
775
  admin: {
757
776
  onRestartRequested: () => {
758
777
  console.log('[main] Restart requested via operator MCP. Exiting...');
@@ -840,7 +859,12 @@ export async function main() {
840
859
  contract: { id: 'swe-rebench-v2', version: 'v1' },
841
860
  state: 'live',
842
861
  supportedRoles: ['solving', 'evaluating'],
862
+ // Order matters: the dashboard pre-selects compatibleHarnesses[0]
863
+ // as the default solver harness. Hermes Agent is the SWE-rebench v2
864
+ // default per the 2026-05-12 decision (jinn-mono-8psp.2 / spec §10);
865
+ // operators may switch to Claude Code or Codex.
843
866
  compatibleHarnesses: [
867
+ { name: HERMES_AGENT_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
844
868
  { name: CLAUDE_CODE_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
845
869
  { name: CODEX_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
846
870
  { name: 'swe-rebench-v2-evaluator', version: '0.1.0', supportsRoles: ['evaluating'] },
@@ -856,6 +880,12 @@ export async function main() {
856
880
  // eagerly here; deps are populated by main.ts post-bootstrap via the
857
881
  // holder, and each route handler reads `holder.current` per-request.
858
882
  solverNetsLauncher: { holder: solverNetEndpointsDepsHolder },
883
+ // jinn-mono-u34i: same eager-register / late-populate pattern for the
884
+ // harness readiness routes. Until main.ts sets the holder, requests
885
+ // return 503 subsystem_not_ready (the panel handles that gracefully).
886
+ harnessReadinessRegistry: { holder: harnessReadinessRegistryHolder },
887
+ // jinn-mono-u34i: see discoveryApiHolder comment above.
888
+ discovery: { holder: discoveryApiHolder },
859
889
  // Agent-binding retry: re-run the ERC-1271 bind step from the SPA
860
890
  // without forcing a daemon restart. Constructs a fresh bootstrapper
861
891
  // per call so we don't tangle lifecycle with the long-running one.
@@ -907,7 +937,17 @@ export async function main() {
907
937
  earningDir: config.earningDir,
908
938
  chain: NETWORK_CHAIN,
909
939
  rpcUrl: config.rpcUrl,
910
- minEoaGasWei: (CHAIN_CONFIG.minEoaGasEth * 2n).toString(),
940
+ // Note: do NOT pass minEoaGasWei here. setup-endpoints.ts derives
941
+ // its faucet target from stage1MinMasterEth(getChainConfig(chain),
942
+ // targetServices) — the same helper the daemon's ensureStage1 gate
943
+ // uses. Passing a computed value from here would re-introduce the
944
+ // drift seam that hit operators in the 2026-05-18 canary
945
+ // (jinn-mono-u34i): faucet dripped to one target while the daemon
946
+ // waited for a different one. The override field remains for tests
947
+ // that want a custom target.
948
+ // targetServices DOES need to flow through so the faucet drips enough
949
+ // ETH to cover ALL services for the operator's chosen targetServices.
950
+ targetServices: config.targetServices,
911
951
  claudePath: activeClaudePath,
912
952
  getClaudePath: () => activeClaudePath,
913
953
  configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
@@ -1207,35 +1247,6 @@ export async function main() {
1207
1247
  },
1208
1248
  });
1209
1249
  }
1210
- const claudeAuthRequired = configRequiresClaudeAuth(config);
1211
- if (claudeAuthRequired) {
1212
- const preflight = await checkClaudeBinary(activeClaudePath);
1213
- if (!preflight.ok) {
1214
- emitClaudeBinaryPreflightFailure(preflight.detail, activeClaudePath);
1215
- }
1216
- const authContext = detectAuthContext({ cwd: process.cwd(), configuredMode: config.runtimeMode });
1217
- const authProbe = probeClaudeAuth({
1218
- context: authContext,
1219
- cwd: process.cwd(),
1220
- claudePath: activeClaudePath,
1221
- });
1222
- if (!authProbe.authenticated) {
1223
- emitEnvelope({
1224
- code: 'invalid_invocation',
1225
- message: 'Claude is not authenticated. Complete Claude setup in the operator app, then restart the daemon.',
1226
- hint: `Detected context: ${authContext}. Run \`jinn run\` to open the app-guided setup flow.`,
1227
- exampleCli: 'jinn run',
1228
- details: {
1229
- field: 'claude_auth',
1230
- context: authContext,
1231
- authenticated: false,
1232
- },
1233
- });
1234
- }
1235
- }
1236
- else {
1237
- console.log('[main] Claude auth preflight skipped; Claude-backed harnesses are disabled.');
1238
- }
1239
1250
  const runner = new ClaudeRunner({
1240
1251
  claudePath: activeClaudePath,
1241
1252
  model: config.claudeModel,
@@ -1298,6 +1309,11 @@ export async function main() {
1298
1309
  sharedDiscoveryApi = await buildOnchainFloor();
1299
1310
  }
1300
1311
  }
1312
+ // jinn-mono-u34i: populate the holder so the /v1/discovery/* routes
1313
+ // registered eagerly at server-start time start returning real data on
1314
+ // the panel's next refetch. Before this, the routes 404'd forever and
1315
+ // the /build page rendered "Discovery unavailable" permanently.
1316
+ discoveryApiHolder.current = sharedDiscoveryApi;
1301
1317
  const adapter = new MechAdapter({
1302
1318
  rpcUrl: config.rpcUrl,
1303
1319
  mechMarketplaceAddress: MARKETPLACE_ADDRESS,
@@ -1440,10 +1456,39 @@ export async function main() {
1440
1456
  externalImpls,
1441
1457
  disabledNames: config.harnesses?.disabled,
1442
1458
  corpusEnv,
1459
+ hermesPath: config.hermesPath,
1460
+ hermesModel: config.hermesModel,
1461
+ hermesProvider: config.hermesProvider,
1443
1462
  })) {
1444
1463
  implRegistry.register(impl);
1445
1464
  }
1446
1465
  console.log(`[main] HarnessRegistry: ${implRegistry.list().map(i => i.name).join(', ')}`);
1466
+ // ── Harness readiness registry ─────────────────────────────────────────────
1467
+ // Composes per-harness isReady() probes into a cached snapshot consumed by
1468
+ // claim loops (A5) and /v1/harnesses/readiness (A3).
1469
+ //
1470
+ // The registry is constructed here, after buildHarnesses() has run, which
1471
+ // is necessarily after bootstrap (bootstrap needs the keystore). The HTTP
1472
+ // server was started before bootstrap so it could show setup progress — we
1473
+ // mount the readiness routes on the already-running app via setupApiServer.app
1474
+ // (same pattern used by registerSolverNetsEndpoints). Routes are registered
1475
+ // before the first operator request that cares about harness readiness.
1476
+ //
1477
+ // A2 carry-over: start() only schedules the 4s tick; refreshNow() is called
1478
+ // immediately so the snapshot is populated before the first claim-loop tick.
1479
+ const harnessReadinessRegistry = buildHarnessReadinessRegistry({
1480
+ harnesses: implRegistry.list(),
1481
+ config,
1482
+ });
1483
+ harnessReadinessRegistry.start();
1484
+ await harnessReadinessRegistry.refreshNow();
1485
+ // Routes were registered eagerly at startApiServer time via the holder
1486
+ // ref pattern (jinn-mono-u34i). Populate the holder now and the already-
1487
+ // mounted /v1/harnesses/readiness routes start returning real data.
1488
+ // Late-mounting via addHarnessReadinessRoutes(setupApiServer.app, ...)
1489
+ // is no longer needed and would throw on Hono's locked matcher.
1490
+ harnessReadinessRegistryHolder.current = harnessReadinessRegistry;
1491
+ console.log('[main] HarnessReadinessRegistry started; /v1/harnesses/readiness routes active.');
1447
1492
  // ── Engine deps ───────────────────────────────────────────────────────────────
1448
1493
  // Packaging deps: artifacts are always written to served_artifacts
1449
1494
  // (operator-local SQLite). In public-testnet donation mode, scrubbed artifact
@@ -1812,6 +1857,7 @@ export async function main() {
1812
1857
  nodeEndpoint: config.nodeEndpoint,
1813
1858
  creatorSafeAddress: safeAddress,
1814
1859
  corpusFactory,
1860
+ harnessReadinessRegistry,
1815
1861
  status: {
1816
1862
  earningDir: config.earningDir,
1817
1863
  rpcUrl: config.rpcUrl,
@@ -1928,6 +1974,7 @@ export async function main() {
1928
1974
  let exitCode = 0;
1929
1975
  console.log(`\n[main] Received ${signal}, shutting down...`);
1930
1976
  try {
1977
+ harnessReadinessRegistry.stop();
1931
1978
  await daemon.stop();
1932
1979
  await setupApiServer.close().catch(() => undefined);
1933
1980
  await closeCaptureReceiver();
@@ -1994,4 +2041,32 @@ export async function main() {
1994
2041
  serviceId,
1995
2042
  };
1996
2043
  }
2044
+ // ── Harness readiness registry factory ───────────────────────────────────────
2045
+ // Exported so tests can construct a registry without booting the full daemon.
2046
+ /**
2047
+ * Builds a HarnessReadinessRegistry from the harness list returned by
2048
+ * buildHarnesses() and the operator's joinedSolverNets config block.
2049
+ *
2050
+ * Per A2 carry-over: start() only schedules the background tick; callers that
2051
+ * need the snapshot populated immediately must call refreshNow() after start().
2052
+ */
2053
+ export function buildHarnessReadinessRegistry(args) {
2054
+ const harnessesByName = {};
2055
+ for (const h of args.harnesses) {
2056
+ harnessesByName[h.name] = h;
2057
+ }
2058
+ const joinedHarnessesByCid = {};
2059
+ for (const [cid, entry] of Object.entries(args.config.joinedSolverNets ?? {})) {
2060
+ if (entry.harness) {
2061
+ joinedHarnessesByCid[cid] = {
2062
+ harnessName: entry.harness,
2063
+ roles: entry.roles,
2064
+ };
2065
+ }
2066
+ }
2067
+ return new HarnessReadinessRegistry({
2068
+ harnessesByName,
2069
+ joinedHarnessesByCid,
2070
+ });
2071
+ }
1997
2072
  //# sourceMappingURL=main.js.map