@jinn-network/client 0.1.5 → 0.1.6-canary.0b4ff7f9

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 (326) 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 +2 -0
  11. package/dist/api/bootstrap-endpoint.js.map +1 -1
  12. package/dist/api/discovery-endpoint.d.ts +18 -0
  13. package/dist/api/discovery-endpoint.js +65 -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/harness-readiness-endpoint.d.ts +13 -0
  19. package/dist/api/harness-readiness-endpoint.js +15 -0
  20. package/dist/api/harness-readiness-endpoint.js.map +1 -0
  21. package/dist/api/hermes-doctor-endpoint.d.ts +26 -0
  22. package/dist/api/hermes-doctor-endpoint.js +29 -0
  23. package/dist/api/hermes-doctor-endpoint.js.map +1 -0
  24. package/dist/api/server.d.ts +21 -0
  25. package/dist/api/server.js +22 -0
  26. package/dist/api/server.js.map +1 -1
  27. package/dist/build-info.json +4 -4
  28. package/dist/build-meta.json +1 -1
  29. package/dist/cli/commands/create.d.ts +5 -3
  30. package/dist/cli/commands/create.js +101 -36
  31. package/dist/cli/commands/create.js.map +1 -1
  32. package/dist/cli/commands/solver-nets.d.ts +19 -0
  33. package/dist/cli/commands/solver-nets.js +140 -2
  34. package/dist/cli/commands/solver-nets.js.map +1 -1
  35. package/dist/cli/commands/solver-plugins-publish.d.ts +31 -0
  36. package/dist/cli/commands/solver-plugins-publish.js +169 -0
  37. package/dist/cli/commands/solver-plugins-publish.js.map +1 -0
  38. package/dist/cli/commands/solver-plugins-revoke.d.ts +15 -0
  39. package/dist/cli/commands/solver-plugins-revoke.js +91 -0
  40. package/dist/cli/commands/solver-plugins-revoke.js.map +1 -0
  41. package/dist/cli/commands/solver-plugins.d.ts +50 -6
  42. package/dist/cli/commands/solver-plugins.js +205 -68
  43. package/dist/cli/commands/solver-plugins.js.map +1 -1
  44. package/dist/config.d.ts +27 -0
  45. package/dist/config.js +24 -0
  46. package/dist/config.js.map +1 -1
  47. package/dist/conformance/checks/hash-signature.js +6 -2
  48. package/dist/conformance/checks/hash-signature.js.map +1 -1
  49. package/dist/conformance/checks/payload.js +4 -2
  50. package/dist/conformance/checks/payload.js.map +1 -1
  51. package/dist/conformance/checks/verdict.d.ts +10 -10
  52. package/dist/conformance/checks/verdict.js +16 -15
  53. package/dist/conformance/checks/verdict.js.map +1 -1
  54. package/dist/conformance/harness.d.ts +1 -1
  55. package/dist/conformance/harness.js +16 -9
  56. package/dist/conformance/harness.js.map +1 -1
  57. package/dist/conformance/types.d.ts +10 -3
  58. package/dist/conformance/types.js.map +1 -1
  59. package/dist/corpus/acquire.d.ts +1 -3
  60. package/dist/corpus/acquire.js.map +1 -1
  61. package/dist/corpus/envelope-projection.d.ts +1 -1
  62. package/dist/corpus/envelope-projection.js +14 -7
  63. package/dist/corpus/envelope-projection.js.map +1 -1
  64. package/dist/corpus/index.d.ts +2 -1
  65. package/dist/corpus/index.js.map +1 -1
  66. package/dist/corpus/prediction-brier-scoreboard-report.js +1 -1
  67. package/dist/corpus/prediction-brier-scoreboard-report.js.map +1 -1
  68. package/dist/corpus/prediction-brier-scoreboard.js +3 -1
  69. package/dist/corpus/prediction-brier-scoreboard.js.map +1 -1
  70. package/dist/corpus/types.d.ts +2 -2
  71. package/dist/daemon/daemon.d.ts +17 -1
  72. package/dist/daemon/daemon.js +15 -0
  73. package/dist/daemon/daemon.js.map +1 -1
  74. package/dist/daemon/freeze-fence.js +6 -3
  75. package/dist/daemon/freeze-fence.js.map +1 -1
  76. package/dist/daemon/readiness-gate.d.ts +30 -0
  77. package/dist/daemon/readiness-gate.js +31 -0
  78. package/dist/daemon/readiness-gate.js.map +1 -0
  79. package/dist/dashboard/assets/{index-D_NMfDfV.css → index-B4sTrvQD.css} +1 -1
  80. package/dist/dashboard/assets/index-C5j0ZJWS.js +140 -0
  81. package/dist/dashboard/index.html +2 -2
  82. package/dist/discovery/http.js +121 -0
  83. package/dist/discovery/http.js.map +1 -1
  84. package/dist/discovery/onchain.js +11 -0
  85. package/dist/discovery/onchain.js.map +1 -1
  86. package/dist/discovery/types.d.ts +112 -0
  87. package/dist/discovery/types.js.map +1 -1
  88. package/dist/discovery/with-fallback.js +9 -0
  89. package/dist/discovery/with-fallback.js.map +1 -1
  90. package/dist/earning/agent-wallet-binding.d.ts +20 -1
  91. package/dist/earning/agent-wallet-binding.js +54 -16
  92. package/dist/earning/agent-wallet-binding.js.map +1 -1
  93. package/dist/earning/bootstrap.d.ts +55 -0
  94. package/dist/earning/bootstrap.js +376 -20
  95. package/dist/earning/bootstrap.js.map +1 -1
  96. package/dist/earning/store.js +48 -1
  97. package/dist/earning/store.js.map +1 -1
  98. package/dist/earning/types.d.ts +30 -0
  99. package/dist/earning/types.js +37 -0
  100. package/dist/earning/types.js.map +1 -1
  101. package/dist/erc8004/abis.d.ts +64 -0
  102. package/dist/erc8004/abis.js +48 -0
  103. package/dist/erc8004/abis.js.map +1 -1
  104. package/dist/erc8004/plugin-registry.d.ts +102 -0
  105. package/dist/erc8004/plugin-registry.js +165 -0
  106. package/dist/erc8004/plugin-registry.js.map +1 -0
  107. package/dist/harnesses/engine/engine.js +15 -3
  108. package/dist/harnesses/engine/engine.js.map +1 -1
  109. package/dist/harnesses/engine/envelope-assembly.d.ts +2 -2
  110. package/dist/harnesses/engine/envelope-assembly.js +4 -2
  111. package/dist/harnesses/engine/envelope-assembly.js.map +1 -1
  112. package/dist/harnesses/freeze.d.ts +4 -1
  113. package/dist/harnesses/freeze.js +12 -2
  114. package/dist/harnesses/freeze.js.map +1 -1
  115. package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +4 -1
  116. package/dist/harnesses/impls/claude-mcp-prediction/index.js +7 -2
  117. package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -1
  118. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.d.ts +4 -1
  119. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js +7 -2
  120. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -1
  121. package/dist/harnesses/impls/evaluation-context.d.ts +15 -4
  122. package/dist/harnesses/impls/evaluation-context.js +24 -8
  123. package/dist/harnesses/impls/evaluation-context.js.map +1 -1
  124. package/dist/harnesses/impls/hermes-agent/adapter.d.ts +34 -0
  125. package/dist/harnesses/impls/hermes-agent/adapter.js +184 -0
  126. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -0
  127. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +18 -0
  128. package/dist/harnesses/impls/hermes-agent/bootstrap.js +231 -0
  129. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -0
  130. package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +49 -0
  131. package/dist/harnesses/impls/hermes-agent/config-builder.js +104 -0
  132. package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -0
  133. package/dist/harnesses/impls/hermes-agent/harness.d.ts +30 -0
  134. package/dist/harnesses/impls/hermes-agent/harness.js +52 -0
  135. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -0
  136. package/dist/harnesses/impls/hermes-agent/index.d.ts +5 -0
  137. package/dist/harnesses/impls/hermes-agent/index.js +7 -0
  138. package/dist/harnesses/impls/hermes-agent/index.js.map +1 -0
  139. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +15 -0
  140. package/dist/harnesses/impls/hermes-agent/prompt.js +37 -0
  141. package/dist/harnesses/impls/hermes-agent/prompt.js.map +1 -0
  142. package/dist/harnesses/impls/index.d.ts +6 -0
  143. package/dist/harnesses/impls/index.js +17 -4
  144. package/dist/harnesses/impls/index.js.map +1 -1
  145. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -0
  146. package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-code.js +13 -34
  147. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -0
  148. package/dist/harnesses/impls/learner/adapters/codex-workspace.js.map +1 -0
  149. package/dist/harnesses/impls/{claude-code-learner → learner}/harness.d.ts +9 -3
  150. package/dist/harnesses/impls/{claude-code-learner → learner}/harness.js +24 -1
  151. package/dist/harnesses/impls/learner/harness.js.map +1 -0
  152. package/dist/harnesses/impls/{claude-code-learner → learner}/harvest.js +15 -3
  153. package/dist/harnesses/impls/learner/harvest.js.map +1 -0
  154. package/dist/harnesses/impls/{claude-code-learner → learner}/index.d.ts +5 -5
  155. package/dist/harnesses/impls/{claude-code-learner → learner}/index.js +4 -4
  156. package/dist/harnesses/impls/learner/index.js.map +1 -0
  157. package/dist/harnesses/impls/{claude-code-learner → learner}/plugin-path.d.ts +4 -4
  158. package/dist/harnesses/impls/{claude-code-learner → learner}/plugin-path.js +7 -7
  159. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -0
  160. package/dist/harnesses/impls/{claude-code-learner → learner}/restoration-patch.js +3 -1
  161. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -0
  162. package/dist/harnesses/impls/learner/test-utils/fake-plugin-outputs.js.map +1 -0
  163. package/dist/harnesses/impls/learner/test-utils/noop-adapter.js.map +1 -0
  164. package/dist/harnesses/impls/{claude-code-learner → learner}/types.d.ts +12 -2
  165. package/dist/harnesses/impls/learner/types.js.map +1 -0
  166. package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +13 -12
  167. package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
  168. package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +7 -7
  169. package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -1
  170. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.d.ts +3 -3
  171. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js +7 -6
  172. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js.map +1 -1
  173. package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js +1 -1
  174. package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -1
  175. package/dist/harnesses/impls/prediction-v0-evaluator/index.js +11 -10
  176. package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -1
  177. package/dist/harnesses/impls/prediction-v1-evaluator/index.js +11 -10
  178. package/dist/harnesses/impls/prediction-v1-evaluator/index.js.map +1 -1
  179. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +1 -0
  180. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +10 -2
  181. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  182. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +24 -5
  183. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +104 -4
  184. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  185. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +9 -0
  186. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +25 -1
  187. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  188. package/dist/harnesses/names.d.ts +1 -0
  189. package/dist/harnesses/names.js +3 -0
  190. package/dist/harnesses/names.js.map +1 -1
  191. package/dist/harnesses/readiness-registry.d.ts +48 -0
  192. package/dist/harnesses/readiness-registry.js +136 -0
  193. package/dist/harnesses/readiness-registry.js.map +1 -0
  194. package/dist/harnesses/types.d.ts +7 -0
  195. package/dist/main.d.ts +14 -0
  196. package/dist/main.js +70 -35
  197. package/dist/main.js.map +1 -1
  198. package/dist/mcp/server.js +14 -13
  199. package/dist/mcp/server.js.map +1 -1
  200. package/dist/preflight/claude-auth.d.ts +18 -0
  201. package/dist/preflight/claude-auth.js +38 -0
  202. package/dist/preflight/claude-auth.js.map +1 -1
  203. package/dist/scripts/donation-consumption-acceptance.js +1 -1
  204. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  205. package/dist/scripts/swe-rebench-v2-known-bad.json +12 -0
  206. package/dist/scripts/swe-rebench-v2-seed-pool.json +26 -0
  207. package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +52 -0
  208. package/dist/solver-types/_swe-rebench-v2-substrate.js +76 -0
  209. package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -0
  210. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +38 -12
  211. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +136 -27
  212. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  213. package/dist/solver-types/swe-rebench-v2-auto.d.ts +6 -0
  214. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  215. package/dist/solver-types/swe-rebench-v2.d.ts +1 -0
  216. package/dist/solver-types/swe-rebench-v2.js +19 -6
  217. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  218. package/dist/store/store.js +12 -4
  219. package/dist/store/store.js.map +1 -1
  220. package/dist/templates/plugins/runtime-plugin/.mcp.json.tmpl +8 -0
  221. package/dist/templates/plugins/runtime-plugin/README.md.tmpl +30 -0
  222. package/dist/templates/plugins/runtime-plugin/gitignore.tmpl +3 -0
  223. package/dist/templates/plugins/runtime-plugin/jinn.plugin.json.tmpl +21 -0
  224. package/dist/templates/plugins/runtime-plugin/mcp/server.mjs.tmpl +33 -0
  225. package/dist/templates/plugins/runtime-plugin/package.json.tmpl +15 -0
  226. package/dist/templates/plugins/runtime-plugin/test/plugin.test.ts.tmpl +35 -0
  227. package/dist/templates/plugins/runtime-plugin/tsconfig.json.tmpl +11 -0
  228. package/dist/templates/plugins/solver-type-plugin/README.md.tmpl +35 -0
  229. package/dist/templates/plugins/solver-type-plugin/gitignore.tmpl +3 -0
  230. package/dist/templates/plugins/solver-type-plugin/jinn.plugin.json.tmpl +11 -0
  231. package/dist/templates/plugins/solver-type-plugin/package.json.tmpl +15 -0
  232. package/dist/templates/plugins/solver-type-plugin/skills/example/SKILL.md.tmpl +10 -0
  233. package/dist/templates/plugins/solver-type-plugin/test/plugin.test.ts.tmpl +25 -0
  234. package/dist/templates/plugins/solver-type-plugin/tsconfig.json.tmpl +11 -0
  235. package/dist/types/envelope.d.ts +28 -21
  236. package/dist/types/envelope.js +8 -3
  237. package/dist/types/envelope.js.map +1 -1
  238. package/dist/types/payloads/index.d.ts +2 -2
  239. package/dist/types/payloads/index.js +13 -12
  240. package/dist/types/payloads/index.js.map +1 -1
  241. package/dist/types/payloads/portfolio-v0.d.ts +60 -10
  242. package/dist/types/payloads/portfolio-v0.js +16 -6
  243. package/dist/types/payloads/portfolio-v0.js.map +1 -1
  244. package/dist/types/payloads/prediction-apy-v0.d.ts +52 -10
  245. package/dist/types/payloads/prediction-apy-v0.js +16 -6
  246. package/dist/types/payloads/prediction-apy-v0.js.map +1 -1
  247. package/dist/types/payloads/prediction-v0.d.ts +49 -10
  248. package/dist/types/payloads/prediction-v0.js +16 -6
  249. package/dist/types/payloads/prediction-v0.js.map +1 -1
  250. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +45 -6
  251. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +16 -6
  252. package/dist/x402/handler.js +51 -20
  253. package/dist/x402/handler.js.map +1 -1
  254. package/package.json +8 -3
  255. package/plugins/swe-rebench-v2-diffmin/.claude-plugin/plugin.json +5 -0
  256. package/plugins/swe-rebench-v2-diffmin/.mcp.json +8 -0
  257. package/plugins/swe-rebench-v2-diffmin/README.md +69 -0
  258. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +12 -0
  259. package/plugins/swe-rebench-v2-diffmin/mcp/diff-stats-server.mjs +72 -0
  260. package/plugins/swe-rebench-v2-diffmin/mcp/diff-stats.mjs +48 -0
  261. package/plugins/swe-rebench-v2-diffmin/package.json +19 -0
  262. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +116 -0
  263. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +126 -0
  264. package/plugins/swe-rebench-v2-diffmin/test/diff-stats.test.ts +62 -0
  265. package/plugins/swe-rebench-v2-diffmin/test/manifest.test.ts +53 -0
  266. package/plugins/swe-rebench-v2-diffmin/tsconfig.json +12 -0
  267. package/plugins/swe-rebench-v2-runtime/README.md +13 -0
  268. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +7 -3
  269. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +6 -17
  270. package/templates/plugins/runtime-plugin/.mcp.json.tmpl +8 -0
  271. package/templates/plugins/runtime-plugin/README.md.tmpl +30 -0
  272. package/templates/plugins/runtime-plugin/gitignore.tmpl +3 -0
  273. package/templates/plugins/runtime-plugin/jinn.plugin.json.tmpl +21 -0
  274. package/templates/plugins/runtime-plugin/mcp/server.mjs.tmpl +33 -0
  275. package/templates/plugins/runtime-plugin/package.json.tmpl +15 -0
  276. package/templates/plugins/runtime-plugin/test/plugin.test.ts.tmpl +35 -0
  277. package/templates/plugins/runtime-plugin/tsconfig.json.tmpl +11 -0
  278. package/templates/plugins/solver-type-plugin/README.md.tmpl +35 -0
  279. package/templates/plugins/solver-type-plugin/gitignore.tmpl +3 -0
  280. package/templates/plugins/solver-type-plugin/jinn.plugin.json.tmpl +11 -0
  281. package/templates/plugins/solver-type-plugin/package.json.tmpl +15 -0
  282. package/templates/plugins/solver-type-plugin/skills/example/SKILL.md.tmpl +10 -0
  283. package/templates/plugins/solver-type-plugin/test/plugin.test.ts.tmpl +25 -0
  284. package/templates/plugins/solver-type-plugin/tsconfig.json.tmpl +11 -0
  285. package/dist/dashboard/assets/index-BjtltOGc.js +0 -76
  286. package/dist/harnesses/impls/claude-code-learner/adapters/claude-code.js.map +0 -1
  287. package/dist/harnesses/impls/claude-code-learner/adapters/codex-code.js.map +0 -1
  288. package/dist/harnesses/impls/claude-code-learner/adapters/codex-workspace.js.map +0 -1
  289. package/dist/harnesses/impls/claude-code-learner/harness.js.map +0 -1
  290. package/dist/harnesses/impls/claude-code-learner/harvest.js.map +0 -1
  291. package/dist/harnesses/impls/claude-code-learner/index.js.map +0 -1
  292. package/dist/harnesses/impls/claude-code-learner/plugin-path.js.map +0 -1
  293. package/dist/harnesses/impls/claude-code-learner/restoration-patch.js.map +0 -1
  294. package/dist/harnesses/impls/claude-code-learner/test-utils/fake-plugin-outputs.js.map +0 -1
  295. package/dist/harnesses/impls/claude-code-learner/test-utils/noop-adapter.js.map +0 -1
  296. package/dist/harnesses/impls/claude-code-learner/types.js.map +0 -1
  297. package/dist/preflight/claude-required.d.ts +0 -8
  298. package/dist/preflight/claude-required.js +0 -17
  299. package/dist/preflight/claude-required.js.map +0 -1
  300. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/claude-code.d.ts +0 -0
  301. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/claude-code.js +0 -0
  302. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-code.d.ts +0 -0
  303. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-workspace.d.ts +0 -0
  304. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-workspace.js +0 -0
  305. /package/dist/harnesses/impls/{claude-code-learner → learner}/harvest.d.ts +0 -0
  306. /package/dist/harnesses/impls/{claude-code-learner → learner}/restoration-patch.d.ts +0 -0
  307. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/fake-plugin-outputs.d.ts +0 -0
  308. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/fake-plugin-outputs.js +0 -0
  309. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/noop-adapter.d.ts +0 -0
  310. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/noop-adapter.js +0 -0
  311. /package/dist/harnesses/impls/{claude-code-learner → learner}/types.js +0 -0
  312. /package/plugins/{claude-code-learner → learner}/.claude-plugin/plugin.json +0 -0
  313. /package/plugins/{claude-code-learner → learner}/.codex-plugin/plugin.json +0 -0
  314. /package/plugins/{claude-code-learner → learner}/AGENTS.md +0 -0
  315. /package/plugins/{claude-code-learner → learner}/CLAUDE.md +0 -0
  316. /package/plugins/{claude-code-learner → learner}/README.md +0 -0
  317. /package/plugins/{claude-code-learner → learner}/hooks/hooks.json +0 -0
  318. /package/plugins/{claude-code-learner → learner}/hooks/session-start +0 -0
  319. /package/plugins/{claude-code-learner → learner}/skills/learn/SKILL.md +0 -0
  320. /package/plugins/{claude-code-learner → learner}/skills/learn/analyst-prompt.md +0 -0
  321. /package/plugins/{claude-code-learner → learner}/skills/learn/consolidator-prompt.md +0 -0
  322. /package/plugins/{claude-code-learner → learner}/skills/learn/explorer-prompt.md +0 -0
  323. /package/plugins/{claude-code-learner → learner}/skills/learn/planner-prompt.md +0 -0
  324. /package/plugins/{claude-code-learner → learner}/skills/learn/promoter-prompt.md +0 -0
  325. /package/plugins/{claude-code-learner → learner}/skills/learn/step-worker-prompt.md +0 -0
  326. /package/plugins/{claude-code-learner → learner}/skills/learn/strategist-prompt.md +0 -0
@@ -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":"AAAA;;;;;;;;;GASG;AA+BH,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAE1C,MAAM,OAAO,wBAAwB;IAClB,IAAI,CAA4C;IACzD,QAAQ,GAA6B;QAC3C,eAAe,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAC1C,SAAS,EAAE,EAAE;KACd,CAAC;IACM,KAAK,GAA0C,IAAI,CAAC;IACpD,eAAe,GAAG,KAAK,CAAC;IAEhC,YAAY,IAAqC;QAC/C,IAAI,CAAC,IAAI,GAAG;YACV,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,wBAAwB;YAC/D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,2BAA2B;YACtE,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;SAChD,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxF,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,eAAe,CAAC,WAAmB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,eAAe,WAAW,0BAA0B;aAC7D,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,kFAAkF;QAClF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,YAAY,EAAE,IAAI;oBAClB,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,WAAW,IAAI,sCAAsC;oBAC7D,QAAQ,EAAE;wBACR,WAAW,EAAE,sDAAsD;qBACpE;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,iEAAiE;gBACjE,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,YAAY,EAAE,IAAI;oBAClB,KAAK,EAAE,IAAI;iBACZ,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,aAAwD,CAAC;gBAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAChC,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;oBACpC,IAAI,OAAO,CAAc,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;wBACrC,aAAa,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAC5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAC3B,CAAC;oBACJ,CAAC,CAAC;iBACH,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;oBACd,IAAI,aAAa,KAAK,SAAS;wBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;gBACH,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,YAAY,EAAE,IAAI;oBAClB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,YAAY,EAAE,IAAI;oBAClB,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,kBAAkB,GAAG,EAAE;iBAChC,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG;YACd,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACzC,SAAS,EAAE,OAAO;SACnB,CAAC;IACJ,CAAC;CACF"}
@@ -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,7 @@ 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
+ import { addHarnessReadinessRoutes } from './api/harness-readiness-endpoint.js';
30
31
  import { CapturePublishUnavailableError } from './api/captures.js';
31
32
  import { invalidatePredictionOperatorStatusCache } from './api/gather-status.js';
32
33
  import { ensureUiToken } from './api/ui-token.js';
@@ -37,10 +38,6 @@ import { createSetupModeController } from './setup-mode.js';
37
38
  import { buildEnvelope, emitEnvelope } from './errors/envelope.js';
38
39
  import { clearBootstrapError, persistBootstrapError, } from './errors/persisted-bootstrap-error.js';
39
40
  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
41
  import { FleetBootstrapper } from './earning/bootstrap.js';
45
42
  import { DEFAULT_TESTNET_ARTIFACTS, applyChainGasOverrides, getChainConfig, loadJinnMviConfig } from './earning/contracts.js';
46
43
  import { runLegacyAgentIdMigration } from './earning/migrate-agent-id.js';
@@ -57,7 +54,8 @@ import { DEFAULT_DISABLED_HARNESSES, DEFAULT_HARNESS, HarnessRegistry, } from '.
57
54
  import { joinedSolverNetsViewFromConfig } from './harnesses/engine/engine.js';
58
55
  import { buildHarnesses } from './harnesses/impls/index.js';
59
56
  import { loadExternalImpl } from './harnesses/external-impls/index.js';
60
- import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, harnessStateDirName } from './harnesses/names.js';
57
+ import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, harnessStateDirName } from './harnesses/names.js';
58
+ import { HarnessReadinessRegistry } from './harnesses/readiness-registry.js';
61
59
  import { createClients } from './adapters/mech/safe.js';
62
60
  import { loadSolverNets } from './solver-nets/registry.js';
63
61
  import { createCorpus } from './corpus/index.js';
@@ -442,7 +440,7 @@ async function bootstrap() {
442
440
  };
443
441
  // eslint-disable-next-line no-constant-condition
444
442
  while (true) {
445
- result = await bootstrapper.bootstrap(PASSWORD);
443
+ result = await bootstrapper.ensureStage1And2(PASSWORD);
446
444
  if (!result.funding) {
447
445
  clearFundingGate();
448
446
  break;
@@ -753,6 +751,10 @@ export async function main() {
753
751
  bindHost: apiBindHost,
754
752
  corpus: () => corpusForApi,
755
753
  ui: { token: uiToken, handshakeKey },
754
+ hermesDoctor: {
755
+ hermesPath: config.hermesPath,
756
+ hermesDoctorTimeoutMs: config.hermesDoctorTimeoutMs,
757
+ },
756
758
  admin: {
757
759
  onRestartRequested: () => {
758
760
  console.log('[main] Restart requested via operator MCP. Exiting...');
@@ -840,7 +842,12 @@ export async function main() {
840
842
  contract: { id: 'swe-rebench-v2', version: 'v1' },
841
843
  state: 'live',
842
844
  supportedRoles: ['solving', 'evaluating'],
845
+ // Order matters: the dashboard pre-selects compatibleHarnesses[0]
846
+ // as the default solver harness. Hermes Agent is the SWE-rebench v2
847
+ // default per the 2026-05-12 decision (jinn-mono-8psp.2 / spec §10);
848
+ // operators may switch to Claude Code or Codex.
843
849
  compatibleHarnesses: [
850
+ { name: HERMES_AGENT_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
844
851
  { name: CLAUDE_CODE_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
845
852
  { name: CODEX_HARNESS, version: '0.1.0', supportsRoles: ['solving'] },
846
853
  { name: 'swe-rebench-v2-evaluator', version: '0.1.0', supportsRoles: ['evaluating'] },
@@ -1207,35 +1214,6 @@ export async function main() {
1207
1214
  },
1208
1215
  });
1209
1216
  }
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
1217
  const runner = new ClaudeRunner({
1240
1218
  claudePath: activeClaudePath,
1241
1219
  model: config.claudeModel,
@@ -1440,10 +1418,37 @@ export async function main() {
1440
1418
  externalImpls,
1441
1419
  disabledNames: config.harnesses?.disabled,
1442
1420
  corpusEnv,
1421
+ hermesPath: config.hermesPath,
1422
+ hermesModel: config.hermesModel,
1423
+ hermesProvider: config.hermesProvider,
1443
1424
  })) {
1444
1425
  implRegistry.register(impl);
1445
1426
  }
1446
1427
  console.log(`[main] HarnessRegistry: ${implRegistry.list().map(i => i.name).join(', ')}`);
1428
+ // ── Harness readiness registry ─────────────────────────────────────────────
1429
+ // Composes per-harness isReady() probes into a cached snapshot consumed by
1430
+ // claim loops (A5) and /v1/harnesses/readiness (A3).
1431
+ //
1432
+ // The registry is constructed here, after buildHarnesses() has run, which
1433
+ // is necessarily after bootstrap (bootstrap needs the keystore). The HTTP
1434
+ // server was started before bootstrap so it could show setup progress — we
1435
+ // mount the readiness routes on the already-running app via setupApiServer.app
1436
+ // (same pattern used by registerSolverNetsEndpoints). Routes are registered
1437
+ // before the first operator request that cares about harness readiness.
1438
+ //
1439
+ // A2 carry-over: start() only schedules the 4s tick; refreshNow() is called
1440
+ // immediately so the snapshot is populated before the first claim-loop tick.
1441
+ const harnessReadinessRegistry = buildHarnessReadinessRegistry({
1442
+ harnesses: implRegistry.list(),
1443
+ config,
1444
+ });
1445
+ harnessReadinessRegistry.start();
1446
+ await harnessReadinessRegistry.refreshNow();
1447
+ // Mount /v1/harnesses/readiness and /v1/harnesses/:name/readiness on the
1448
+ // already-running HTTP server. Hono matches eagerly on first request; these
1449
+ // routes are registered before the daemon's first claim-loop tick.
1450
+ addHarnessReadinessRoutes(setupApiServer.app, { registry: harnessReadinessRegistry });
1451
+ console.log('[main] HarnessReadinessRegistry started; /v1/harnesses/readiness routes active.');
1447
1452
  // ── Engine deps ───────────────────────────────────────────────────────────────
1448
1453
  // Packaging deps: artifacts are always written to served_artifacts
1449
1454
  // (operator-local SQLite). In public-testnet donation mode, scrubbed artifact
@@ -1812,6 +1817,7 @@ export async function main() {
1812
1817
  nodeEndpoint: config.nodeEndpoint,
1813
1818
  creatorSafeAddress: safeAddress,
1814
1819
  corpusFactory,
1820
+ harnessReadinessRegistry,
1815
1821
  status: {
1816
1822
  earningDir: config.earningDir,
1817
1823
  rpcUrl: config.rpcUrl,
@@ -1928,6 +1934,7 @@ export async function main() {
1928
1934
  let exitCode = 0;
1929
1935
  console.log(`\n[main] Received ${signal}, shutting down...`);
1930
1936
  try {
1937
+ harnessReadinessRegistry.stop();
1931
1938
  await daemon.stop();
1932
1939
  await setupApiServer.close().catch(() => undefined);
1933
1940
  await closeCaptureReceiver();
@@ -1994,4 +2001,32 @@ export async function main() {
1994
2001
  serviceId,
1995
2002
  };
1996
2003
  }
2004
+ // ── Harness readiness registry factory ───────────────────────────────────────
2005
+ // Exported so tests can construct a registry without booting the full daemon.
2006
+ /**
2007
+ * Builds a HarnessReadinessRegistry from the harness list returned by
2008
+ * buildHarnesses() and the operator's joinedSolverNets config block.
2009
+ *
2010
+ * Per A2 carry-over: start() only schedules the background tick; callers that
2011
+ * need the snapshot populated immediately must call refreshNow() after start().
2012
+ */
2013
+ export function buildHarnessReadinessRegistry(args) {
2014
+ const harnessesByName = {};
2015
+ for (const h of args.harnesses) {
2016
+ harnessesByName[h.name] = h;
2017
+ }
2018
+ const joinedHarnessesByCid = {};
2019
+ for (const [cid, entry] of Object.entries(args.config.joinedSolverNets ?? {})) {
2020
+ if (entry.harness) {
2021
+ joinedHarnessesByCid[cid] = {
2022
+ harnessName: entry.harness,
2023
+ roles: entry.roles,
2024
+ };
2025
+ }
2026
+ }
2027
+ return new HarnessReadinessRegistry({
2028
+ harnessesByName,
2029
+ joinedHarnessesByCid,
2030
+ });
2031
+ }
1997
2032
  //# sourceMappingURL=main.js.map