@jinn-network/client 0.1.5 → 0.1.6-canary.107ea271

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 (431) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/dist/adapters/mech/adapter.d.ts +23 -1
  3. package/dist/adapters/mech/adapter.js +169 -33
  4. package/dist/adapters/mech/adapter.js.map +1 -1
  5. package/dist/adapters/mech/contracts.d.ts +1 -0
  6. package/dist/adapters/mech/contracts.js +1 -0
  7. package/dist/adapters/mech/contracts.js.map +1 -1
  8. package/dist/adapters/mech/ipfs-pinfile.d.ts +22 -0
  9. package/dist/adapters/mech/ipfs-pinfile.js +54 -0
  10. package/dist/adapters/mech/ipfs-pinfile.js.map +1 -0
  11. package/dist/adapters/mech/ipfs.d.ts +1 -0
  12. package/dist/adapters/mech/ipfs.js +24 -1
  13. package/dist/adapters/mech/ipfs.js.map +1 -1
  14. package/dist/adapters/mech/verdict-code.d.ts +1 -0
  15. package/dist/adapters/mech/verdict-code.js +18 -0
  16. package/dist/adapters/mech/verdict-code.js.map +1 -1
  17. package/dist/api/bootstrap-endpoint.js +63 -1
  18. package/dist/api/bootstrap-endpoint.js.map +1 -1
  19. package/dist/api/codex-doctor-endpoint.d.ts +73 -0
  20. package/dist/api/codex-doctor-endpoint.js +158 -0
  21. package/dist/api/codex-doctor-endpoint.js.map +1 -0
  22. package/dist/api/discovery-endpoint.d.ts +31 -0
  23. package/dist/api/discovery-endpoint.js +78 -0
  24. package/dist/api/discovery-endpoint.js.map +1 -0
  25. package/dist/api/fleet-build.d.ts +8 -0
  26. package/dist/api/fleet-build.js +8 -2
  27. package/dist/api/fleet-build.js.map +1 -1
  28. package/dist/api/gather-status.js +90 -4
  29. package/dist/api/gather-status.js.map +1 -1
  30. package/dist/api/harness-readiness-endpoint.d.ts +25 -0
  31. package/dist/api/harness-readiness-endpoint.js +24 -0
  32. package/dist/api/harness-readiness-endpoint.js.map +1 -0
  33. package/dist/api/hermes-doctor-endpoint.d.ts +66 -0
  34. package/dist/api/hermes-doctor-endpoint.js +75 -0
  35. package/dist/api/hermes-doctor-endpoint.js.map +1 -0
  36. package/dist/api/portfolio-v0-build.d.ts +10 -0
  37. package/dist/api/portfolio-v0-build.js +24 -5
  38. package/dist/api/portfolio-v0-build.js.map +1 -1
  39. package/dist/api/prediction-v1-build.d.ts +9 -0
  40. package/dist/api/prediction-v1-build.js +6 -1
  41. package/dist/api/prediction-v1-build.js.map +1 -1
  42. package/dist/api/server.d.ts +70 -0
  43. package/dist/api/server.js +107 -1
  44. package/dist/api/server.js.map +1 -1
  45. package/dist/api/setup-endpoints.d.ts +21 -0
  46. package/dist/api/setup-endpoints.js +101 -8
  47. package/dist/api/setup-endpoints.js.map +1 -1
  48. package/dist/api/setup-retry-endpoint.d.ts +19 -0
  49. package/dist/api/setup-retry-endpoint.js +32 -0
  50. package/dist/api/setup-retry-endpoint.js.map +1 -0
  51. package/dist/api/solvernets-endpoints.js +8 -1
  52. package/dist/api/solvernets-endpoints.js.map +1 -1
  53. package/dist/api/status-build.d.ts +14 -0
  54. package/dist/api/status-build.js +23 -18
  55. package/dist/api/status-build.js.map +1 -1
  56. package/dist/api/task-run-routing.d.ts +7 -0
  57. package/dist/api/task-run-routing.js +12 -0
  58. package/dist/api/task-run-routing.js.map +1 -0
  59. package/dist/api/task-runs-build.d.ts +20 -0
  60. package/dist/api/task-runs-build.js +4 -0
  61. package/dist/api/task-runs-build.js.map +1 -1
  62. package/dist/build-info.json +4 -4
  63. package/dist/build-meta.json +1 -1
  64. package/dist/chain-read-errors.d.ts +10 -0
  65. package/dist/chain-read-errors.js +15 -0
  66. package/dist/chain-read-errors.js.map +1 -1
  67. package/dist/cli/commands/auth.js +3 -1
  68. package/dist/cli/commands/auth.js.map +1 -1
  69. package/dist/cli/commands/create.d.ts +5 -3
  70. package/dist/cli/commands/create.js +102 -36
  71. package/dist/cli/commands/create.js.map +1 -1
  72. package/dist/cli/commands/solver-nets.d.ts +19 -0
  73. package/dist/cli/commands/solver-nets.js +164 -11
  74. package/dist/cli/commands/solver-nets.js.map +1 -1
  75. package/dist/cli/commands/solver-plugins-publish.d.ts +31 -0
  76. package/dist/cli/commands/solver-plugins-publish.js +169 -0
  77. package/dist/cli/commands/solver-plugins-publish.js.map +1 -0
  78. package/dist/cli/commands/solver-plugins-revoke.d.ts +15 -0
  79. package/dist/cli/commands/solver-plugins-revoke.js +91 -0
  80. package/dist/cli/commands/solver-plugins-revoke.js.map +1 -0
  81. package/dist/cli/commands/solver-plugins.d.ts +50 -6
  82. package/dist/cli/commands/solver-plugins.js +205 -68
  83. package/dist/cli/commands/solver-plugins.js.map +1 -1
  84. package/dist/cli/commands/update.d.ts +10 -0
  85. package/dist/cli/commands/update.js +36 -0
  86. package/dist/cli/commands/update.js.map +1 -1
  87. package/dist/config.d.ts +51 -0
  88. package/dist/config.js +49 -2
  89. package/dist/config.js.map +1 -1
  90. package/dist/conformance/checks/hash-signature.js +6 -2
  91. package/dist/conformance/checks/hash-signature.js.map +1 -1
  92. package/dist/conformance/checks/payload.js +4 -2
  93. package/dist/conformance/checks/payload.js.map +1 -1
  94. package/dist/conformance/checks/verdict.d.ts +10 -10
  95. package/dist/conformance/checks/verdict.js +16 -15
  96. package/dist/conformance/checks/verdict.js.map +1 -1
  97. package/dist/conformance/harness.d.ts +1 -1
  98. package/dist/conformance/harness.js +16 -9
  99. package/dist/conformance/harness.js.map +1 -1
  100. package/dist/conformance/types.d.ts +10 -3
  101. package/dist/conformance/types.js.map +1 -1
  102. package/dist/corpus/acquire.d.ts +1 -3
  103. package/dist/corpus/acquire.js.map +1 -1
  104. package/dist/corpus/envelope-projection.d.ts +1 -1
  105. package/dist/corpus/envelope-projection.js +14 -7
  106. package/dist/corpus/envelope-projection.js.map +1 -1
  107. package/dist/corpus/index.d.ts +2 -1
  108. package/dist/corpus/index.js.map +1 -1
  109. package/dist/corpus/prediction-brier-scoreboard-report.js +1 -1
  110. package/dist/corpus/prediction-brier-scoreboard-report.js.map +1 -1
  111. package/dist/corpus/prediction-brier-scoreboard.js +3 -1
  112. package/dist/corpus/prediction-brier-scoreboard.js.map +1 -1
  113. package/dist/corpus/types.d.ts +2 -2
  114. package/dist/daemon/daemon.d.ts +26 -1
  115. package/dist/daemon/daemon.js +63 -1
  116. package/dist/daemon/daemon.js.map +1 -1
  117. package/dist/daemon/eviction-loop.d.ts +40 -0
  118. package/dist/daemon/eviction-loop.js +67 -0
  119. package/dist/daemon/eviction-loop.js.map +1 -0
  120. package/dist/daemon/freeze-fence.js +6 -3
  121. package/dist/daemon/freeze-fence.js.map +1 -1
  122. package/dist/daemon/readiness-gate.d.ts +30 -0
  123. package/dist/daemon/readiness-gate.js +31 -0
  124. package/dist/daemon/readiness-gate.js.map +1 -0
  125. package/dist/daemon/skip-log-dedup.d.ts +69 -0
  126. package/dist/daemon/skip-log-dedup.js +106 -0
  127. package/dist/daemon/skip-log-dedup.js.map +1 -0
  128. package/dist/dashboard/assets/{index-D_NMfDfV.css → index-DE4qUnzV.css} +1 -1
  129. package/dist/dashboard/assets/index-Di7xA4eB.js +170 -0
  130. package/dist/dashboard/index.html +2 -2
  131. package/dist/discovery/http.js +121 -0
  132. package/dist/discovery/http.js.map +1 -1
  133. package/dist/discovery/onchain.d.ts +5 -0
  134. package/dist/discovery/onchain.js +292 -7
  135. package/dist/discovery/onchain.js.map +1 -1
  136. package/dist/discovery/types.d.ts +127 -1
  137. package/dist/discovery/types.js +8 -10
  138. package/dist/discovery/types.js.map +1 -1
  139. package/dist/discovery/with-fallback.js +9 -0
  140. package/dist/discovery/with-fallback.js.map +1 -1
  141. package/dist/earning/agent-wallet-binding.d.ts +20 -1
  142. package/dist/earning/agent-wallet-binding.js +54 -16
  143. package/dist/earning/agent-wallet-binding.js.map +1 -1
  144. package/dist/earning/bootstrap.d.ts +178 -0
  145. package/dist/earning/bootstrap.js +628 -57
  146. package/dist/earning/bootstrap.js.map +1 -1
  147. package/dist/earning/contracts.d.ts +12 -0
  148. package/dist/earning/contracts.js +16 -1
  149. package/dist/earning/contracts.js.map +1 -1
  150. package/dist/earning/funding-plan.js +15 -2
  151. package/dist/earning/funding-plan.js.map +1 -1
  152. package/dist/earning/jinn-rewards.d.ts +46 -0
  153. package/dist/earning/jinn-rewards.js +32 -0
  154. package/dist/earning/jinn-rewards.js.map +1 -1
  155. package/dist/earning/store.d.ts +8 -0
  156. package/dist/earning/store.js +48 -1
  157. package/dist/earning/store.js.map +1 -1
  158. package/dist/earning/testnet-setup-migration.d.ts +12 -0
  159. package/dist/earning/testnet-setup-migration.js +27 -1
  160. package/dist/earning/testnet-setup-migration.js.map +1 -1
  161. package/dist/earning/types.d.ts +45 -0
  162. package/dist/earning/types.js +37 -0
  163. package/dist/earning/types.js.map +1 -1
  164. package/dist/erc8004/abis.d.ts +64 -0
  165. package/dist/erc8004/abis.js +48 -0
  166. package/dist/erc8004/abis.js.map +1 -1
  167. package/dist/erc8004/plugin-registry.d.ts +102 -0
  168. package/dist/erc8004/plugin-registry.js +165 -0
  169. package/dist/erc8004/plugin-registry.js.map +1 -0
  170. package/dist/erc8004/reputation.d.ts +8 -0
  171. package/dist/erc8004/reputation.js +22 -3
  172. package/dist/erc8004/reputation.js.map +1 -1
  173. package/dist/events/types.d.ts +2 -2
  174. package/dist/harnesses/cost-estimates.d.ts +145 -0
  175. package/dist/harnesses/cost-estimates.js +297 -0
  176. package/dist/harnesses/cost-estimates.js.map +1 -0
  177. package/dist/harnesses/engine/engine.d.ts +40 -0
  178. package/dist/harnesses/engine/engine.js +69 -8
  179. package/dist/harnesses/engine/engine.js.map +1 -1
  180. package/dist/harnesses/engine/envelope-assembly.d.ts +2 -2
  181. package/dist/harnesses/engine/envelope-assembly.js +4 -2
  182. package/dist/harnesses/engine/envelope-assembly.js.map +1 -1
  183. package/dist/harnesses/engine/persistence.d.ts +21 -0
  184. package/dist/harnesses/engine/persistence.js +39 -0
  185. package/dist/harnesses/engine/persistence.js.map +1 -1
  186. package/dist/harnesses/engine/work-dir-reaper.d.ts +65 -0
  187. package/dist/harnesses/engine/work-dir-reaper.js +100 -0
  188. package/dist/harnesses/engine/work-dir-reaper.js.map +1 -0
  189. package/dist/harnesses/freeze.d.ts +4 -1
  190. package/dist/harnesses/freeze.js +12 -2
  191. package/dist/harnesses/freeze.js.map +1 -1
  192. package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +4 -1
  193. package/dist/harnesses/impls/claude-mcp-prediction/index.js +7 -2
  194. package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -1
  195. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.d.ts +4 -1
  196. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js +7 -2
  197. package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -1
  198. package/dist/harnesses/impls/evaluation-context.d.ts +15 -4
  199. package/dist/harnesses/impls/evaluation-context.js +24 -8
  200. package/dist/harnesses/impls/evaluation-context.js.map +1 -1
  201. package/dist/harnesses/impls/hermes-agent/adapter.d.ts +34 -0
  202. package/dist/harnesses/impls/hermes-agent/adapter.js +205 -0
  203. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -0
  204. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +18 -0
  205. package/dist/harnesses/impls/hermes-agent/bootstrap.js +231 -0
  206. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -0
  207. package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +49 -0
  208. package/dist/harnesses/impls/hermes-agent/config-builder.js +132 -0
  209. package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -0
  210. package/dist/harnesses/impls/hermes-agent/harness.d.ts +58 -0
  211. package/dist/harnesses/impls/hermes-agent/harness.js +118 -0
  212. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -0
  213. package/dist/harnesses/impls/hermes-agent/index.d.ts +5 -0
  214. package/dist/harnesses/impls/hermes-agent/index.js +7 -0
  215. package/dist/harnesses/impls/hermes-agent/index.js.map +1 -0
  216. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +15 -0
  217. package/dist/harnesses/impls/hermes-agent/prompt.js +37 -0
  218. package/dist/harnesses/impls/hermes-agent/prompt.js.map +1 -0
  219. package/dist/harnesses/impls/index.d.ts +13 -0
  220. package/dist/harnesses/impls/index.js +32 -4
  221. package/dist/harnesses/impls/index.js.map +1 -1
  222. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -0
  223. package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-code.js +13 -34
  224. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -0
  225. package/dist/harnesses/impls/learner/adapters/codex-workspace.js.map +1 -0
  226. package/dist/harnesses/impls/learner/harness.d.ts +62 -0
  227. package/dist/harnesses/impls/learner/harness.js +179 -0
  228. package/dist/harnesses/impls/learner/harness.js.map +1 -0
  229. package/dist/harnesses/impls/{claude-code-learner → learner}/harvest.js +15 -3
  230. package/dist/harnesses/impls/learner/harvest.js.map +1 -0
  231. package/dist/harnesses/impls/{claude-code-learner → learner}/index.d.ts +5 -5
  232. package/dist/harnesses/impls/{claude-code-learner → learner}/index.js +4 -4
  233. package/dist/harnesses/impls/learner/index.js.map +1 -0
  234. package/dist/harnesses/impls/{claude-code-learner → learner}/plugin-path.d.ts +4 -4
  235. package/dist/harnesses/impls/{claude-code-learner → learner}/plugin-path.js +7 -7
  236. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -0
  237. package/dist/harnesses/impls/{claude-code-learner → learner}/restoration-patch.js +3 -1
  238. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -0
  239. package/dist/harnesses/impls/learner/test-utils/fake-plugin-outputs.js.map +1 -0
  240. package/dist/harnesses/impls/learner/test-utils/noop-adapter.js.map +1 -0
  241. package/dist/harnesses/impls/{claude-code-learner → learner}/types.d.ts +23 -2
  242. package/dist/harnesses/impls/learner/types.js.map +1 -0
  243. package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +13 -12
  244. package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
  245. package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +7 -7
  246. package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -1
  247. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.d.ts +3 -3
  248. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js +7 -6
  249. package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js.map +1 -1
  250. package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js +1 -1
  251. package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -1
  252. package/dist/harnesses/impls/prediction-v0-evaluator/index.js +11 -10
  253. package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -1
  254. package/dist/harnesses/impls/prediction-v1-evaluator/index.js +11 -10
  255. package/dist/harnesses/impls/prediction-v1-evaluator/index.js.map +1 -1
  256. package/dist/harnesses/impls/stub.d.ts +58 -0
  257. package/dist/harnesses/impls/stub.js +89 -0
  258. package/dist/harnesses/impls/stub.js.map +1 -0
  259. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +1 -0
  260. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +10 -2
  261. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  262. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +24 -5
  263. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +104 -4
  264. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  265. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +9 -0
  266. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +25 -1
  267. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  268. package/dist/harnesses/names.d.ts +1 -0
  269. package/dist/harnesses/names.js +3 -0
  270. package/dist/harnesses/names.js.map +1 -1
  271. package/dist/harnesses/readiness-registry.d.ts +48 -0
  272. package/dist/harnesses/readiness-registry.js +144 -0
  273. package/dist/harnesses/readiness-registry.js.map +1 -0
  274. package/dist/harnesses/types.d.ts +7 -0
  275. package/dist/main.d.ts +14 -0
  276. package/dist/main.js +372 -90
  277. package/dist/main.js.map +1 -1
  278. package/dist/mcp/server.js +14 -13
  279. package/dist/mcp/server.js.map +1 -1
  280. package/dist/operator-errors.d.ts +7 -0
  281. package/dist/operator-errors.js +26 -2
  282. package/dist/operator-errors.js.map +1 -1
  283. package/dist/preflight/claude-auth.d.ts +18 -0
  284. package/dist/preflight/claude-auth.js +38 -0
  285. package/dist/preflight/claude-auth.js.map +1 -1
  286. package/dist/restart-daemon.d.ts +71 -0
  287. package/dist/restart-daemon.js +82 -0
  288. package/dist/restart-daemon.js.map +1 -0
  289. package/dist/scripts/donation-consumption-acceptance.js +1 -1
  290. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  291. package/dist/scripts/swe-rebench-v2-known-bad.json +12 -0
  292. package/dist/scripts/swe-rebench-v2-seed-pool.json +26 -0
  293. package/dist/setup/halt-mode.d.ts +14 -0
  294. package/dist/setup/halt-mode.js +17 -0
  295. package/dist/setup/halt-mode.js.map +1 -0
  296. package/dist/solver-nets/prediction-operator-ux.js +43 -3
  297. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  298. package/dist/solver-nets/registry.d.ts +1 -0
  299. package/dist/solver-nets/registry.js +1 -1
  300. package/dist/solver-nets/registry.js.map +1 -1
  301. package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +52 -0
  302. package/dist/solver-types/_swe-rebench-v2-substrate.js +76 -0
  303. package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -0
  304. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +38 -12
  305. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +136 -27
  306. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  307. package/dist/solver-types/swe-rebench-v2-auto.d.ts +6 -0
  308. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  309. package/dist/solver-types/swe-rebench-v2.d.ts +1 -0
  310. package/dist/solver-types/swe-rebench-v2.js +19 -6
  311. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  312. package/dist/solvernets/daemon-init.d.ts +10 -2
  313. package/dist/solvernets/daemon-init.js +22 -2
  314. package/dist/solvernets/daemon-init.js.map +1 -1
  315. package/dist/store/store.js +12 -4
  316. package/dist/store/store.js.map +1 -1
  317. package/dist/templates/plugins/runtime-plugin/.mcp.json.tmpl +8 -0
  318. package/dist/templates/plugins/runtime-plugin/README.md.tmpl +30 -0
  319. package/dist/templates/plugins/runtime-plugin/gitignore.tmpl +3 -0
  320. package/dist/templates/plugins/runtime-plugin/jinn.plugin.json.tmpl +21 -0
  321. package/dist/templates/plugins/runtime-plugin/mcp/server.mjs.tmpl +33 -0
  322. package/dist/templates/plugins/runtime-plugin/package.json.tmpl +15 -0
  323. package/dist/templates/plugins/runtime-plugin/test/plugin.test.ts.tmpl +35 -0
  324. package/dist/templates/plugins/runtime-plugin/tsconfig.json.tmpl +11 -0
  325. package/dist/templates/plugins/solver-type-plugin/README.md.tmpl +35 -0
  326. package/dist/templates/plugins/solver-type-plugin/gitignore.tmpl +3 -0
  327. package/dist/templates/plugins/solver-type-plugin/jinn.plugin.json.tmpl +11 -0
  328. package/dist/templates/plugins/solver-type-plugin/package.json.tmpl +15 -0
  329. package/dist/templates/plugins/solver-type-plugin/skills/example/SKILL.md.tmpl +10 -0
  330. package/dist/templates/plugins/solver-type-plugin/test/plugin.test.ts.tmpl +25 -0
  331. package/dist/templates/plugins/solver-type-plugin/tsconfig.json.tmpl +11 -0
  332. package/dist/tx-retry.d.ts +13 -0
  333. package/dist/tx-retry.js +22 -0
  334. package/dist/tx-retry.js.map +1 -1
  335. package/dist/types/envelope.d.ts +28 -21
  336. package/dist/types/envelope.js +8 -3
  337. package/dist/types/envelope.js.map +1 -1
  338. package/dist/types/payloads/index.d.ts +2 -2
  339. package/dist/types/payloads/index.js +13 -12
  340. package/dist/types/payloads/index.js.map +1 -1
  341. package/dist/types/payloads/portfolio-v0.d.ts +60 -10
  342. package/dist/types/payloads/portfolio-v0.js +16 -6
  343. package/dist/types/payloads/portfolio-v0.js.map +1 -1
  344. package/dist/types/payloads/prediction-apy-v0.d.ts +56 -14
  345. package/dist/types/payloads/prediction-apy-v0.js +16 -6
  346. package/dist/types/payloads/prediction-apy-v0.js.map +1 -1
  347. package/dist/types/payloads/prediction-v0.d.ts +53 -14
  348. package/dist/types/payloads/prediction-v0.js +16 -6
  349. package/dist/types/payloads/prediction-v0.js.map +1 -1
  350. package/dist/util/extract-tx-hash.d.ts +14 -0
  351. package/dist/util/extract-tx-hash.js +19 -0
  352. package/dist/util/extract-tx-hash.js.map +1 -0
  353. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +45 -6
  354. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +16 -6
  355. package/dist/x402/handler.js +51 -20
  356. package/dist/x402/handler.js.map +1 -1
  357. package/package.json +38 -13
  358. package/plugins/swe-rebench-v2-diffmin/.claude-plugin/plugin.json +5 -0
  359. package/plugins/swe-rebench-v2-diffmin/.mcp.json +8 -0
  360. package/plugins/swe-rebench-v2-diffmin/README.md +69 -0
  361. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +12 -0
  362. package/plugins/swe-rebench-v2-diffmin/mcp/diff-stats-server.mjs +72 -0
  363. package/plugins/swe-rebench-v2-diffmin/mcp/diff-stats.mjs +48 -0
  364. package/plugins/swe-rebench-v2-diffmin/package.json +19 -0
  365. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +116 -0
  366. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +126 -0
  367. package/plugins/swe-rebench-v2-diffmin/test/diff-stats.test.ts +62 -0
  368. package/plugins/swe-rebench-v2-diffmin/test/manifest.test.ts +53 -0
  369. package/plugins/swe-rebench-v2-diffmin/tsconfig.json +12 -0
  370. package/plugins/swe-rebench-v2-runtime/README.md +13 -0
  371. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +7 -3
  372. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +6 -17
  373. package/templates/plugins/runtime-plugin/.mcp.json.tmpl +8 -0
  374. package/templates/plugins/runtime-plugin/README.md.tmpl +30 -0
  375. package/templates/plugins/runtime-plugin/gitignore.tmpl +3 -0
  376. package/templates/plugins/runtime-plugin/jinn.plugin.json.tmpl +21 -0
  377. package/templates/plugins/runtime-plugin/mcp/server.mjs.tmpl +33 -0
  378. package/templates/plugins/runtime-plugin/package.json.tmpl +15 -0
  379. package/templates/plugins/runtime-plugin/test/plugin.test.ts.tmpl +35 -0
  380. package/templates/plugins/runtime-plugin/tsconfig.json.tmpl +11 -0
  381. package/templates/plugins/solver-type-plugin/README.md.tmpl +35 -0
  382. package/templates/plugins/solver-type-plugin/gitignore.tmpl +3 -0
  383. package/templates/plugins/solver-type-plugin/jinn.plugin.json.tmpl +11 -0
  384. package/templates/plugins/solver-type-plugin/package.json.tmpl +15 -0
  385. package/templates/plugins/solver-type-plugin/skills/example/SKILL.md.tmpl +10 -0
  386. package/templates/plugins/solver-type-plugin/test/plugin.test.ts.tmpl +25 -0
  387. package/templates/plugins/solver-type-plugin/tsconfig.json.tmpl +11 -0
  388. package/dist/dashboard/assets/index-BjtltOGc.js +0 -76
  389. package/dist/harnesses/impls/claude-code-learner/adapters/claude-code.js.map +0 -1
  390. package/dist/harnesses/impls/claude-code-learner/adapters/codex-code.js.map +0 -1
  391. package/dist/harnesses/impls/claude-code-learner/adapters/codex-workspace.js.map +0 -1
  392. package/dist/harnesses/impls/claude-code-learner/harness.d.ts +0 -22
  393. package/dist/harnesses/impls/claude-code-learner/harness.js +0 -62
  394. package/dist/harnesses/impls/claude-code-learner/harness.js.map +0 -1
  395. package/dist/harnesses/impls/claude-code-learner/harvest.js.map +0 -1
  396. package/dist/harnesses/impls/claude-code-learner/index.js.map +0 -1
  397. package/dist/harnesses/impls/claude-code-learner/plugin-path.js.map +0 -1
  398. package/dist/harnesses/impls/claude-code-learner/restoration-patch.js.map +0 -1
  399. package/dist/harnesses/impls/claude-code-learner/test-utils/fake-plugin-outputs.js.map +0 -1
  400. package/dist/harnesses/impls/claude-code-learner/test-utils/noop-adapter.js.map +0 -1
  401. package/dist/harnesses/impls/claude-code-learner/types.js.map +0 -1
  402. package/dist/preflight/claude-required.d.ts +0 -8
  403. package/dist/preflight/claude-required.js +0 -17
  404. package/dist/preflight/claude-required.js.map +0 -1
  405. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/claude-code.d.ts +0 -0
  406. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/claude-code.js +0 -0
  407. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-code.d.ts +0 -0
  408. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-workspace.d.ts +0 -0
  409. /package/dist/harnesses/impls/{claude-code-learner → learner}/adapters/codex-workspace.js +0 -0
  410. /package/dist/harnesses/impls/{claude-code-learner → learner}/harvest.d.ts +0 -0
  411. /package/dist/harnesses/impls/{claude-code-learner → learner}/restoration-patch.d.ts +0 -0
  412. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/fake-plugin-outputs.d.ts +0 -0
  413. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/fake-plugin-outputs.js +0 -0
  414. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/noop-adapter.d.ts +0 -0
  415. /package/dist/harnesses/impls/{claude-code-learner → learner}/test-utils/noop-adapter.js +0 -0
  416. /package/dist/harnesses/impls/{claude-code-learner → learner}/types.js +0 -0
  417. /package/plugins/{claude-code-learner → learner}/.claude-plugin/plugin.json +0 -0
  418. /package/plugins/{claude-code-learner → learner}/.codex-plugin/plugin.json +0 -0
  419. /package/plugins/{claude-code-learner → learner}/AGENTS.md +0 -0
  420. /package/plugins/{claude-code-learner → learner}/CLAUDE.md +0 -0
  421. /package/plugins/{claude-code-learner → learner}/README.md +0 -0
  422. /package/plugins/{claude-code-learner → learner}/hooks/hooks.json +0 -0
  423. /package/plugins/{claude-code-learner → learner}/hooks/session-start +0 -0
  424. /package/plugins/{claude-code-learner → learner}/skills/learn/SKILL.md +0 -0
  425. /package/plugins/{claude-code-learner → learner}/skills/learn/analyst-prompt.md +0 -0
  426. /package/plugins/{claude-code-learner → learner}/skills/learn/consolidator-prompt.md +0 -0
  427. /package/plugins/{claude-code-learner → learner}/skills/learn/explorer-prompt.md +0 -0
  428. /package/plugins/{claude-code-learner → learner}/skills/learn/planner-prompt.md +0 -0
  429. /package/plugins/{claude-code-learner → learner}/skills/learn/promoter-prompt.md +0 -0
  430. /package/plugins/{claude-code-learner → learner}/skills/learn/step-worker-prompt.md +0 -0
  431. /package/plugins/{claude-code-learner → learner}/skills/learn/strategist-prompt.md +0 -0
@@ -0,0 +1,231 @@
1
+ // client/src/harnesses/impls/hermes-agent/bootstrap.ts
2
+ import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { parse as yamlParse, stringify as yamlStringify } from 'yaml';
5
+ import { hermesConfigFromSolverPlugins, } from './config-builder.js';
6
+ /**
7
+ * Toolset allowlist for Jinn-run Hermes sessions.
8
+ *
9
+ * Hermes's default-ON toolset surface is broader than Claude Code's built-ins
10
+ * and includes footguns under unattended automation (`messaging` can send
11
+ * messages; `cronjob` can schedule things; `computer_use`, `browser`,
12
+ * `tts`/`vision`/`image_gen` are out of scope for text code-issue tasks). We
13
+ * pin an explicit allowlist for `hermes-cli` (the platform Jinn spawns Hermes
14
+ * as); operators who want to expand it for a Jinn task can request a daemon
15
+ * config option later — they can NOT widen the allowlist by editing their
16
+ * `~/.hermes/config.yaml`'s `platform_toolsets.hermes-cli` because Jinn
17
+ * deliberately replaces that key (other `platform_toolsets.*` entries — e.g.
18
+ * for `hermes-telegram` — pass through unchanged).
19
+ */
20
+ const TOOLSET_ALLOWLIST = [
21
+ 'terminal',
22
+ 'file',
23
+ 'web',
24
+ 'skills',
25
+ 'memory',
26
+ 'session_search',
27
+ 'todo',
28
+ 'code_execution',
29
+ ];
30
+ /**
31
+ * Files copied verbatim from the operator's real Hermes home into the per-Task
32
+ * `$HERMES_HOME`. Hermes resolves OAuth creds from `$HERMES_HOME/auth/...` and
33
+ * pooled creds from `$HERMES_HOME/auth.json` with NO real-home fallback, so a
34
+ * fresh per-Task home (which the freeze contract requires) would otherwise
35
+ * have no credentials and Hermes would fail with "No … credentials found."
36
+ *
37
+ * `bin/` carries Hermes-managed binaries — most importantly `bin/tirith`, the
38
+ * shell-command security scanner Hermes runs before every `terminal_tool`
39
+ * invocation. Hermes resolves it from `$HERMES_HOME/bin/tirith` and falls back
40
+ * to an auto-download from `github.com/sheeki03/tirith/releases/latest` on
41
+ * first use. Without seeding, every per-Task run pays the multi-MB download
42
+ * cost on its first shell command — long enough to blow the harness budget.
43
+ *
44
+ * Hermes may refresh OAuth access tokens mid-task. The HermesHarness excludes
45
+ * these runtime-only files from the daemon state digest while still fencing the
46
+ * learning surface (memories/, skills/, sessions/, and ordinary files). The
47
+ * binary exception is intentionally limited to Hermes's managed `bin/tirith`
48
+ * security scanner instead of the whole `bin/` tree.
49
+ */
50
+ const OPERATOR_STATE_TO_SEED = ['auth', 'auth.json', 'bin'];
51
+ function seedOperatorState(hermesHome, seedFrom) {
52
+ if (seedFrom === hermesHome || !existsSync(seedFrom))
53
+ return;
54
+ for (const name of OPERATOR_STATE_TO_SEED) {
55
+ const src = join(seedFrom, name);
56
+ const dst = join(hermesHome, name);
57
+ if (existsSync(src) && !existsSync(dst)) {
58
+ cpSync(src, dst, { recursive: true });
59
+ }
60
+ }
61
+ }
62
+ // ────────────────────────────────────────────────────────────────────────────
63
+ // Operator config.yaml inheritance — the merge contract.
64
+ // ────────────────────────────────────────────────────────────────────────────
65
+ //
66
+ // Goal: anything the operator set in `~/.hermes/config.yaml` flows into the
67
+ // per-Task config, EXCEPT for the small set of keys Jinn must own per Task.
68
+ // This is the comprehensive form of operator-config inheritance — it replaces
69
+ // the prior "fresh per-Task config with hand-written Jinn fields only" path,
70
+ // which was a whack-a-mole source (auth/, then .env, then max_tokens; each
71
+ // real-binary run surfaced another orphaned setting). With the merge, ANY
72
+ // operator setting (model.max_tokens, model.context_length, model.base_url,
73
+ // provider_routing, openrouter.response_cache, agent.iteration_budget,
74
+ // compression.threshold, auxiliary.*, display.*, voice.*, security.*,
75
+ // approvals.*, delegation.*, web.*, custom providers: overrides, etc.) just
76
+ // flows through.
77
+ //
78
+ // Jinn-managed keys (per-Task authoritative; Jinn writes these every Task):
79
+ // - model.default — if a daemon/SolverNet override was provided
80
+ // - model.provider — if a daemon/SolverNet override was provided
81
+ // - terminal.backend — forced to `local` (the per-Task workingDir is a
82
+ // host filesystem path; remote backends would need
83
+ // additional setup Jinn doesn't yet do)
84
+ // - terminal.cwd — the per-Task workingDir
85
+ // - platform_toolsets['hermes-cli'] — the Jinn allowlist (replaces any
86
+ // operator value; other platforms pass through)
87
+ // - mcp_servers.<name> — operator's MCP servers preserved; Jinn adds its
88
+ // SolverPlugin MCP servers; Jinn wins on collision
89
+ // - skills.external_dirs — operator's dirs preserved; Jinn appends the
90
+ // SolverPlugin skill dirs
91
+ //
92
+ // Everything else from the operator's config.yaml passes through unchanged.
93
+ //
94
+ // Operator-set keys that DO inherit and matter for budget-capped providers:
95
+ // - model.max_tokens — OpenRouter pre-bills on max_tokens; operators
96
+ // with low monthly caps must lower this to fit.
97
+ // - model.context_length — total context window cap.
98
+ // - provider_routing — OpenRouter routing knobs (sort by price, etc.).
99
+ // - providers.<name> — per-provider timeout / model-specific overrides.
100
+ function isObj(v) {
101
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
102
+ }
103
+ function readOperatorConfigYaml(seedFrom) {
104
+ const path = join(seedFrom, 'config.yaml');
105
+ if (!existsSync(path))
106
+ return {};
107
+ try {
108
+ const text = readFileSync(path, 'utf8');
109
+ const parsed = yamlParse(text);
110
+ return isObj(parsed) ? parsed : {};
111
+ }
112
+ catch {
113
+ // Operator config is unparseable — proceed with Jinn-only. Hermes would
114
+ // also fail to read it, so this isn't hiding any real signal.
115
+ return {};
116
+ }
117
+ }
118
+ function mergePerTaskConfig(operator, jinn, opts) {
119
+ const out = { ...operator };
120
+ // model: deep-merge — operator's max_tokens/context_length/base_url/
121
+ // provider_routing/etc. preserved; Jinn overrides default+provider only if
122
+ // specified by daemon/SolverNet config.
123
+ if (opts.model || opts.provider || isObj(out.model)) {
124
+ const opModel = isObj(out.model) ? out.model : {};
125
+ const jinnModel = {};
126
+ if (opts.model)
127
+ jinnModel.default = opts.model;
128
+ if (opts.provider)
129
+ jinnModel.provider = opts.provider;
130
+ out.model = { ...opModel, ...jinnModel };
131
+ }
132
+ // terminal: Jinn forces backend + cwd; operator's timeout / lifetime /
133
+ // sudo_password / docker_* fields preserved (the docker_* fields are inert
134
+ // under `backend: local`, which is fine).
135
+ const opTerminal = isObj(out.terminal) ? out.terminal : {};
136
+ out.terminal = {
137
+ ...opTerminal,
138
+ backend: 'local',
139
+ cwd: opts.workingDir,
140
+ };
141
+ // platform_toolsets: Jinn enforces its allowlist for the `hermes-cli`
142
+ // platform (the platform Jinn spawns Hermes as); other platforms
143
+ // (hermes-telegram, etc.) pass through unchanged.
144
+ const opPlatformToolsets = isObj(out.platform_toolsets) ? out.platform_toolsets : {};
145
+ out.platform_toolsets = {
146
+ ...opPlatformToolsets,
147
+ 'hermes-cli': [...TOOLSET_ALLOWLIST],
148
+ };
149
+ // mcp_servers: operator's MCP servers preserved; Jinn adds its SolverPlugin
150
+ // MCP servers via key-merge (Jinn wins on name collision — the SolverPlugin
151
+ // MCP definition is the authority on what `jinn-client` etc. mean).
152
+ if (jinn.mcp_servers && Object.keys(jinn.mcp_servers).length > 0) {
153
+ const opMcp = isObj(out.mcp_servers) ? out.mcp_servers : {};
154
+ out.mcp_servers = { ...opMcp, ...jinn.mcp_servers };
155
+ }
156
+ // skills.external_dirs: operator's dirs preserved; Jinn appends SolverPlugin
157
+ // skill dirs. Duplicates de-duped (preserves order — operator first).
158
+ if (jinn.skills?.external_dirs && jinn.skills.external_dirs.length > 0) {
159
+ const opSkills = isObj(out.skills) ? out.skills : {};
160
+ const opDirs = Array.isArray(opSkills.external_dirs)
161
+ ? opSkills.external_dirs.filter((d) => typeof d === 'string')
162
+ : [];
163
+ const merged = [...opDirs];
164
+ for (const d of jinn.skills.external_dirs) {
165
+ if (!merged.includes(d))
166
+ merged.push(d);
167
+ }
168
+ out.skills = { ...opSkills, external_dirs: merged };
169
+ }
170
+ return out;
171
+ }
172
+ function snippetToEnvFile(env) {
173
+ const lines = [];
174
+ lines.push(`DAEMON_API_URL=${env.daemonApiUrl}`);
175
+ lines.push(`DAEMON_API_TOKEN=${env.daemonApiToken}`);
176
+ if (env.storePath)
177
+ lines.push(`STORE_PATH=${env.storePath}`);
178
+ if (env.corpusEnv.subgraphUrl)
179
+ lines.push(`JINN_CORPUS_SUBGRAPH_URL=${env.corpusEnv.subgraphUrl}`);
180
+ if (env.corpusEnv.ipfsGatewayUrl)
181
+ lines.push(`JINN_CORPUS_IPFS_GATEWAY_URL=${env.corpusEnv.ipfsGatewayUrl}`);
182
+ if (env.corpusEnv.rpcUrl)
183
+ lines.push(`JINN_CORPUS_RPC_URL=${env.corpusEnv.rpcUrl}`);
184
+ if (env.corpusEnv.chainId != null)
185
+ lines.push(`JINN_CORPUS_CHAIN_ID=${env.corpusEnv.chainId}`);
186
+ if (env.corpusEnv.identityRegistryAddress)
187
+ lines.push(`JINN_CORPUS_IDENTITY_REGISTRY_ADDRESS=${env.corpusEnv.identityRegistryAddress}`);
188
+ if (env.corpusEnv.fromBlock != null)
189
+ lines.push(`JINN_CORPUS_FROM_BLOCK=${env.corpusEnv.fromBlock}`);
190
+ return lines.join('\n') + '\n';
191
+ }
192
+ export function writePerTaskHermesConfig(inputs) {
193
+ mkdirSync(inputs.hermesHome, { recursive: true });
194
+ if (inputs.seedFrom) {
195
+ seedOperatorState(inputs.hermesHome, inputs.seedFrom);
196
+ }
197
+ const operator = inputs.seedFrom ? readOperatorConfigYaml(inputs.seedFrom) : {};
198
+ const snippet = hermesConfigFromSolverPlugins(inputs.solverPluginRoots, inputs.env);
199
+ const merged = mergePerTaskConfig(operator, snippet, {
200
+ model: inputs.model,
201
+ provider: inputs.provider,
202
+ workingDir: inputs.workingDir,
203
+ });
204
+ writeFileSync(join(inputs.hermesHome, 'config.yaml'), yamlStringify(merged, { lineWidth: 0 }), 'utf8');
205
+ // Per-Task .env = operator's .env (provider API keys, debug toggles, etc.)
206
+ // + Jinn-runtime keys. Jinn keys go LAST so they win on duplicate names
207
+ // (most dotenv loaders use last-wins; Hermes uses python-dotenv). Without
208
+ // the operator's keys, Jinn-run Hermes can't authenticate to any provider
209
+ // except google-gemini-cli (whose OAuth creds are seeded via auth/), so
210
+ // Hermes-as-default with OpenRouter / Anthropic / etc. requires this merge.
211
+ const operatorEnv = inputs.seedFrom ? readOperatorEnvFile(inputs.seedFrom) : '';
212
+ const trailingNewline = operatorEnv.endsWith('\n') ? '' : '\n';
213
+ const header = operatorEnv
214
+ ? `${operatorEnv}${trailingNewline}# --- Jinn-runtime keys (per-Task, override any operator entries above) ---\n`
215
+ : '';
216
+ const envFile = header + snippetToEnvFile(inputs.env);
217
+ writeFileSync(join(inputs.hermesHome, '.env'), envFile, 'utf8');
218
+ }
219
+ function readOperatorEnvFile(seedFrom) {
220
+ const path = join(seedFrom, '.env');
221
+ if (!existsSync(path))
222
+ return '';
223
+ try {
224
+ return readFileSync(path, 'utf8');
225
+ }
226
+ catch {
227
+ // Permissions / race — better to proceed with just Jinn keys than crash.
228
+ return '';
229
+ }
230
+ }
231
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/bootstrap.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EACL,6BAA6B,GAG9B,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;GAaG;AACH,MAAM,iBAAiB,GAAG;IACxB,UAAU;IACV,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,gBAAgB;IAChB,MAAM;IACN,gBAAgB;CACR,CAAC;AAEX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAU,CAAC;AAmBrE,SAAS,iBAAiB,CAAC,UAAkB,EAAE,QAAgB;IAC7D,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO;IAC7D,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,yDAAyD;AACzD,+EAA+E;AAC/E,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,uEAAuE;AACvE,sEAAsE;AACtE,4EAA4E;AAC5E,iBAAiB;AACjB,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,yEAAyE;AACzE,6EAA6E;AAC7E,8EAA8E;AAC9E,mEAAmE;AACnE,qDAAqD;AACrD,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,yEAAyE;AACzE,qDAAqD;AACrD,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,uDAAuD;AACvD,6EAA6E;AAC7E,8EAA8E;AAE9E,SAAS,KAAK,CAAC,CAAU;IACvB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,8DAA8D;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAiC,EACjC,IAAyB,EACzB,IAA+D;IAE/D,MAAM,GAAG,GAA4B,EAAE,GAAG,QAAQ,EAAE,CAAC;IAErD,qEAAqE;IACrE,2EAA2E;IAC3E,wCAAwC;IACxC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK;YAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/C,IAAI,IAAI,CAAC,QAAQ;YAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtD,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IAC3C,CAAC;IAED,uEAAuE;IACvE,2EAA2E;IAC3E,0CAA0C;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,GAAG,CAAC,QAAQ,GAAG;QACb,GAAG,UAAU;QACb,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,IAAI,CAAC,UAAU;KACrB,CAAC;IAEF,sEAAsE;IACtE,iEAAiE;IACjE,kDAAkD;IAClD,MAAM,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,GAAG,CAAC,iBAAiB,GAAG;QACtB,GAAG,kBAAkB;QACrB,YAAY,EAAE,CAAC,GAAG,iBAAiB,CAAC;KACrC,CAAC;IAEF,4EAA4E;IAC5E,4EAA4E;IAC5E,oEAAoE;IACpE,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACtD,CAAC;IAED,6EAA6E;IAC7E,sEAAsE;IACtE,IAAI,IAAI,CAAC,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,CAAC,CAAE,QAAQ,CAAC,aAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACzF,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAa,CAAC,GAAG,MAAM,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAqB;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IACrD,IAAI,GAAG,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7D,IAAI,GAAG,CAAC,SAAS,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IACnG,IAAI,GAAG,CAAC,SAAS,CAAC,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,gCAAgC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7G,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/F,IAAI,GAAG,CAAC,SAAS,CAAC,uBAAuB;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,GAAG,CAAC,SAAS,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACxI,IAAI,GAAG,CAAC,SAAS,CAAC,SAAS,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACrG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAgC;IACvE,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,MAAM,OAAO,GAAG,6BAA6B,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE;QACnD,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;IACH,aAAa,CACX,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,EACtC,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EACvC,MAAM,CACP,CAAC;IAEF,2EAA2E;IAC3E,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,4EAA4E;IAC5E,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,GAAG,WAAW,GAAG,eAAe,+EAA+E;QACjH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtD,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,49 @@
1
+ export interface McpStdioServer {
2
+ command: string;
3
+ args: string[];
4
+ cwd?: string;
5
+ env?: Record<string, string>;
6
+ }
7
+ export interface McpHttpServer {
8
+ url: string;
9
+ headers?: Record<string, string>;
10
+ }
11
+ export type McpServer = McpStdioServer | McpHttpServer;
12
+ export interface HermesConfigSnippet {
13
+ mcp_servers?: Record<string, McpServer>;
14
+ skills?: {
15
+ external_dirs?: string[];
16
+ };
17
+ }
18
+ export interface ConfigBuilderEnv {
19
+ storePath?: string;
20
+ daemonApiUrl: string;
21
+ daemonApiToken: string;
22
+ corpusEnv: {
23
+ subgraphUrl?: string;
24
+ ipfsGatewayUrl?: string;
25
+ rpcUrl?: string;
26
+ chainId?: number;
27
+ identityRegistryAddress?: string;
28
+ fromBlock?: number;
29
+ };
30
+ /**
31
+ * Active-task identifiers injected into MCP server env so jinn-client tools
32
+ * (get_task, submit_typed_payload, …) know which Task they are operating on.
33
+ * Mirrors what claude-code and codex-code adapters thread through in
34
+ * `buildSubprocessEnv`. When unset (e.g. unit tests), the MCP server returns
35
+ * a default empty task — fine for tests, broken for live runs.
36
+ */
37
+ task?: {
38
+ id?: string;
39
+ description?: string;
40
+ /** Already-stringified JSON of `taskBody.context`; empty string when absent. */
41
+ contextJson?: string;
42
+ role?: string;
43
+ solverType?: string;
44
+ restorationRequestId?: string;
45
+ requestId?: string;
46
+ workingDir?: string;
47
+ };
48
+ }
49
+ export declare function hermesConfigFromSolverPlugins(roots: readonly string[], env: ConfigBuilderEnv): HermesConfigSnippet;
@@ -0,0 +1,132 @@
1
+ // client/src/harnesses/impls/hermes-agent/config-builder.ts
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ /**
6
+ * Resolves the client install root (`<client>/`, containing `dist/` and
7
+ * `plugins/`) by walking up from this module's compiled location.
8
+ *
9
+ * This file lives at:
10
+ * - `<client>/dist/harnesses/impls/hermes-agent/config-builder.js` (built)
11
+ * - `<client>/src/harnesses/impls/hermes-agent/config-builder.ts` (source)
12
+ *
13
+ * Either way, four directory hops up from the file's directory lands at
14
+ * `<client>/`, which the `network-tools` plugin's MCP launcher
15
+ * (`client/plugins/network-tools/mcp/jinn-client-server.mjs`) expects when
16
+ * reading `JINN_NETWORK_TOOLS_CLIENT_ROOT`.
17
+ *
18
+ * v0.1.6 patch — gh #294. The proper fix (audit *why* SolverPlugins are
19
+ * copied per-task into `$HOME/.jinn-client/solver-plugins/`, which is why
20
+ * the launcher's own `<pluginRoot>/../..` walk fails) is tracked in #296.
21
+ */
22
+ function resolveClientRoot() {
23
+ const here = fileURLToPath(import.meta.url);
24
+ return resolve(dirname(here), '..', '..', '..', '..');
25
+ }
26
+ function buildJinnRuntimeEnv(env) {
27
+ const out = {
28
+ DAEMON_API_URL: env.daemonApiUrl,
29
+ DAEMON_API_TOKEN: env.daemonApiToken,
30
+ // gh #294: tell the network-tools MCP launcher where to find the
31
+ // daemon's `dist/mcp/server.js`. The launcher's own resolution walks
32
+ // `<pluginRoot>/../..`, which lands at `$HOME/.jinn-client/` (no
33
+ // `dist/`) when the plugin tree has been copied per-task — see #296
34
+ // for the layout-audit investigation.
35
+ JINN_NETWORK_TOOLS_CLIENT_ROOT: resolveClientRoot(),
36
+ };
37
+ if (env.storePath)
38
+ out.STORE_PATH = env.storePath;
39
+ if (env.corpusEnv.subgraphUrl)
40
+ out.JINN_CORPUS_SUBGRAPH_URL = env.corpusEnv.subgraphUrl;
41
+ if (env.corpusEnv.ipfsGatewayUrl)
42
+ out.JINN_CORPUS_IPFS_GATEWAY_URL = env.corpusEnv.ipfsGatewayUrl;
43
+ if (env.corpusEnv.rpcUrl)
44
+ out.JINN_CORPUS_RPC_URL = env.corpusEnv.rpcUrl;
45
+ if (env.corpusEnv.chainId != null)
46
+ out.JINN_CORPUS_CHAIN_ID = String(env.corpusEnv.chainId);
47
+ if (env.corpusEnv.identityRegistryAddress) {
48
+ out.JINN_CORPUS_IDENTITY_REGISTRY_ADDRESS = env.corpusEnv.identityRegistryAddress;
49
+ }
50
+ if (env.corpusEnv.fromBlock != null)
51
+ out.JINN_CORPUS_FROM_BLOCK = String(env.corpusEnv.fromBlock);
52
+ // Active-task env — read by the jinn-client MCP server in
53
+ // `client/src/mcp/server.ts` to populate the `task` runtime context. Without
54
+ // these, submit_typed_payload errors with `missing_solver_type` and get_task
55
+ // returns an empty record.
56
+ if (env.task) {
57
+ if (env.task.id)
58
+ out.DESIRED_STATE_ID = env.task.id;
59
+ if (env.task.description)
60
+ out.DESIRED_STATE_DESCRIPTION = env.task.description;
61
+ if (env.task.contextJson)
62
+ out.DESIRED_STATE_CONTEXT = env.task.contextJson;
63
+ if (env.task.role)
64
+ out.DESIRED_STATE_ROLE = env.task.role;
65
+ if (env.task.solverType)
66
+ out.DESIRED_STATE_SOLVER_TYPE = env.task.solverType;
67
+ if (env.task.restorationRequestId)
68
+ out.RESTORATION_REQUEST_ID = env.task.restorationRequestId;
69
+ if (env.task.requestId)
70
+ out.REQUEST_ID = env.task.requestId;
71
+ if (env.task.workingDir)
72
+ out.JINN_WORKING_DIR = env.task.workingDir;
73
+ }
74
+ return out;
75
+ }
76
+ function resolvePathTemplate(value, pluginRoot) {
77
+ // Resolve ${CLAUDE_PLUGIN_ROOT} / ${CODEX_PLUGIN_ROOT} → pluginRoot,
78
+ // then resolve relative paths against pluginRoot.
79
+ const substituted = value
80
+ .replaceAll('${CLAUDE_PLUGIN_ROOT}', pluginRoot)
81
+ .replaceAll('${CODEX_PLUGIN_ROOT}', pluginRoot);
82
+ if (isAbsolute(substituted))
83
+ return substituted;
84
+ return resolve(pluginRoot, substituted);
85
+ }
86
+ function translateMcpFromFile(pluginRoot, jinnEnv) {
87
+ const mcpFile = join(pluginRoot, '.mcp.json');
88
+ if (!existsSync(mcpFile))
89
+ return {};
90
+ const raw = JSON.parse(readFileSync(mcpFile, 'utf8'));
91
+ const servers = raw.mcpServers ?? {};
92
+ const out = {};
93
+ for (const [name, server] of Object.entries(servers)) {
94
+ if ('url' in server) {
95
+ // HTTP MCP — pass through unchanged (no path resolution needed)
96
+ out[name] = { url: server.url, ...(server.headers ? { headers: server.headers } : {}) };
97
+ continue;
98
+ }
99
+ // Stdio MCP — resolve paths and merge env
100
+ const resolvedArgs = server.args.map((a) => resolvePathTemplate(a, pluginRoot));
101
+ const resolvedCwd = server.cwd ? resolvePathTemplate(server.cwd, pluginRoot) : pluginRoot;
102
+ out[name] = {
103
+ command: server.command,
104
+ args: resolvedArgs,
105
+ cwd: resolvedCwd,
106
+ env: { ...jinnEnv, ...(server.env ?? {}) },
107
+ };
108
+ }
109
+ return out;
110
+ }
111
+ function translateSkillsDir(pluginRoot) {
112
+ const skillsDir = join(pluginRoot, 'skills');
113
+ return existsSync(skillsDir) ? skillsDir : null;
114
+ }
115
+ export function hermesConfigFromSolverPlugins(roots, env) {
116
+ const jinnEnv = buildJinnRuntimeEnv(env);
117
+ const mcpServers = {};
118
+ const externalDirs = [];
119
+ for (const root of roots) {
120
+ Object.assign(mcpServers, translateMcpFromFile(root, jinnEnv));
121
+ const skills = translateSkillsDir(root);
122
+ if (skills)
123
+ externalDirs.push(skills);
124
+ }
125
+ const snippet = {};
126
+ if (Object.keys(mcpServers).length > 0)
127
+ snippet.mcp_servers = mcpServers;
128
+ if (externalDirs.length > 0)
129
+ snippet.skills = { external_dirs: externalDirs };
130
+ return snippet;
131
+ }
132
+ //# sourceMappingURL=config-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-builder.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/config-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { Harness, HarnessContext, ReadyStatus, Solution } from '../../types.js';
2
+ import type { HermesHarnessAdapter } from './adapter.js';
3
+ export interface HermesHarnessConfig {
4
+ adapter: HermesHarnessAdapter;
5
+ version?: string;
6
+ /** Hermes binary path used by `isReady()`. Defaults to `hermes` (PATH lookup). */
7
+ hermesPath?: string;
8
+ /** Timeout for the `hermes doctor` probe. Defaults to 30s. */
9
+ hermesDoctorTimeoutMs?: number;
10
+ }
11
+ /**
12
+ * Hermes Agent harness.
13
+ *
14
+ * Generic restoration harness backed by the Hermes agent runner. Built-in
15
+ * learning loop owned by Hermes (skill self-improvement, memory curation, FTS5
16
+ * session search); Jinn-side learner plugin is NOT loaded. SolverPlugins are
17
+ * mounted via Hermes's mcp_servers + skills config.yaml surface (see
18
+ * config-builder.ts).
19
+ *
20
+ * Scoped to SWE-rebench v2 while the Hermes task prompt, SolverPlugin bundle,
21
+ * and output harvesting are specific to `swe-rebench-v2.v1`.
22
+ */
23
+ export declare class HermesHarness implements Harness {
24
+ readonly name = "hermes-agent";
25
+ readonly version: string;
26
+ readonly freezeStateHashIgnore: readonly ["auth", "auth.json", "bin/tirith", ".env", "config.yaml"];
27
+ private readonly adapter;
28
+ private readonly hermesPath;
29
+ private readonly hermesDoctorTimeoutMs;
30
+ constructor(config: HermesHarnessConfig);
31
+ /**
32
+ * Readiness probe — shells out to `hermes doctor` via the shared
33
+ * `probeHermesDoctor` helper (same logic the SPA precheck endpoint
34
+ * uses). Reports:
35
+ * - `installed: false` → binary not on PATH → ready=false with install
36
+ * nextStep so the operator sees an actionable message instead of
37
+ * N/N failed claims (#330).
38
+ * - `exitCode !== 0` → binary exists but `hermes doctor` reports a
39
+ * configuration problem (e.g. provider not signed in) → ready=false
40
+ * with a nextStep that points at the SPA precheck panel.
41
+ * - OpenRouter not authenticated → ready=false. `hermes doctor` exits 0
42
+ * even when every provider is logged out (it treats missing providers
43
+ * as warnings), so this third gate probes `hermes auth status
44
+ * openrouter` directly. Hermes is OpenRouter-only, so a logged-out
45
+ * OpenRouter means Hermes has no usable model provider and every
46
+ * claim would burn (#332/#330/#348).
47
+ * - all three gates pass → ready=true.
48
+ */
49
+ isReady(_ctx?: {
50
+ solverType: string;
51
+ role?: 'restoration' | 'evaluation';
52
+ }): Promise<ReadyStatus>;
53
+ supports(spec: {
54
+ solverType: string;
55
+ role?: 'restoration' | 'evaluation';
56
+ }): boolean;
57
+ run(ctx: HarnessContext): Promise<Solution>;
58
+ }
@@ -0,0 +1,118 @@
1
+ import { HERMES_AGENT_HARNESS } from '../../names.js';
2
+ import { harvestOutput } from '../learner/harvest.js';
3
+ import { probeHermesDoctor, probeHermesAuthStatus } from '../../../api/hermes-doctor-endpoint.js';
4
+ /**
5
+ * Hermes Agent harness.
6
+ *
7
+ * Generic restoration harness backed by the Hermes agent runner. Built-in
8
+ * learning loop owned by Hermes (skill self-improvement, memory curation, FTS5
9
+ * session search); Jinn-side learner plugin is NOT loaded. SolverPlugins are
10
+ * mounted via Hermes's mcp_servers + skills config.yaml surface (see
11
+ * config-builder.ts).
12
+ *
13
+ * Scoped to SWE-rebench v2 while the Hermes task prompt, SolverPlugin bundle,
14
+ * and output harvesting are specific to `swe-rebench-v2.v1`.
15
+ */
16
+ export class HermesHarness {
17
+ name = HERMES_AGENT_HARNESS;
18
+ version;
19
+ freezeStateHashIgnore = ['auth', 'auth.json', 'bin/tirith', '.env', 'config.yaml'];
20
+ adapter;
21
+ hermesPath;
22
+ hermesDoctorTimeoutMs;
23
+ constructor(config) {
24
+ this.adapter = config.adapter;
25
+ this.version = config.version ?? '0.1.0';
26
+ this.hermesPath = config.hermesPath;
27
+ this.hermesDoctorTimeoutMs = config.hermesDoctorTimeoutMs;
28
+ }
29
+ /**
30
+ * Readiness probe — shells out to `hermes doctor` via the shared
31
+ * `probeHermesDoctor` helper (same logic the SPA precheck endpoint
32
+ * uses). Reports:
33
+ * - `installed: false` → binary not on PATH → ready=false with install
34
+ * nextStep so the operator sees an actionable message instead of
35
+ * N/N failed claims (#330).
36
+ * - `exitCode !== 0` → binary exists but `hermes doctor` reports a
37
+ * configuration problem (e.g. provider not signed in) → ready=false
38
+ * with a nextStep that points at the SPA precheck panel.
39
+ * - OpenRouter not authenticated → ready=false. `hermes doctor` exits 0
40
+ * even when every provider is logged out (it treats missing providers
41
+ * as warnings), so this third gate probes `hermes auth status
42
+ * openrouter` directly. Hermes is OpenRouter-only, so a logged-out
43
+ * OpenRouter means Hermes has no usable model provider and every
44
+ * claim would burn (#332/#330/#348).
45
+ * - all three gates pass → ready=true.
46
+ */
47
+ async isReady(_ctx) {
48
+ const config = {};
49
+ if (this.hermesPath !== undefined)
50
+ config.hermesPath = this.hermesPath;
51
+ if (this.hermesDoctorTimeoutMs !== undefined)
52
+ config.hermesDoctorTimeoutMs = this.hermesDoctorTimeoutMs;
53
+ const result = probeHermesDoctor(config);
54
+ if (!result.installed) {
55
+ return {
56
+ ready: false,
57
+ reason: 'hermes binary not installed',
58
+ nextStep: {
59
+ description: 'Install the Hermes agent runner — see the Hermes precheck panel in the operator dashboard for the install command.',
60
+ },
61
+ };
62
+ }
63
+ if (result.exitCode !== 0) {
64
+ const stderr = result.stderr.trim();
65
+ const stdout = result.stdout.trim();
66
+ const detail = stderr.length > 0 ? stderr : stdout;
67
+ return {
68
+ ready: false,
69
+ reason: `hermes doctor exit ${result.exitCode}${detail ? `: ${detail}` : ''}`,
70
+ nextStep: {
71
+ description: 'Run `hermes doctor` locally to surface the configuration problem, or open the Hermes precheck panel in the operator dashboard to sign in / select a provider.',
72
+ },
73
+ };
74
+ }
75
+ // Third gate: `hermes doctor` exits 0 even when every model provider is
76
+ // logged out. Hermes is OpenRouter-only, so probe OpenRouter auth
77
+ // directly — a logged-out OpenRouter means Hermes cannot run a task.
78
+ const auth = probeHermesAuthStatus('openrouter', config);
79
+ if (!auth.authed) {
80
+ return {
81
+ ready: false,
82
+ reason: 'OpenRouter not connected — Hermes has no usable model provider',
83
+ nextStep: {
84
+ description: 'Connect OpenRouter — sign in via the Hermes precheck panel in the operator dashboard, or run `hermes login` locally.',
85
+ },
86
+ };
87
+ }
88
+ return { ready: true };
89
+ }
90
+ supports(spec) {
91
+ // Hermes currently ships a SWE-rebench v2 task prompt and runtime plugin.
92
+ // Evaluation is not supported: Hermes has no evaluator-side plugins
93
+ // (verdict signing, checker contracts).
94
+ return spec.role !== 'evaluation' && spec.solverType === 'swe-rebench-v2.v1';
95
+ }
96
+ async run(ctx) {
97
+ const window = ctx.task.window ?? { startTs: 0, endTs: 0 };
98
+ await this.adapter.runTask({
99
+ taskId: ctx.task.id,
100
+ requestId: ctx.requestId,
101
+ taskCid: ctx.taskCid,
102
+ solverType: ctx.task.solverType,
103
+ model: ctx.solverNet?.model,
104
+ taskBody: ctx.task,
105
+ implStateDir: ctx.implStateDir,
106
+ workingDir: ctx.workingDir,
107
+ pluginRoots: [...(ctx.solverPluginRoots ?? [])],
108
+ windowStartTs: window.startTs,
109
+ windowEndTs: window.endTs,
110
+ msUntilEndTs: ctx.msUntilEndTs(),
111
+ abort: ctx.abort,
112
+ mode: ctx.mode,
113
+ });
114
+ const solution = await harvestOutput(ctx.workingDir, undefined, ctx.task);
115
+ return { ...solution, venueRef: { ...solution.venueRef, name: this.name } };
116
+ }
117
+ }
118
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { HermesHarness } from './harness.js';
2
+ export { HermesHarnessAdapter } from './adapter.js';
3
+ export { hermesConfigFromSolverPlugins, type HermesConfigSnippet, type ConfigBuilderEnv, type McpServer, } from './config-builder.js';
4
+ export { buildInitialPrompt } from './prompt.js';
5
+ export { writePerTaskHermesConfig } from './bootstrap.js';
@@ -0,0 +1,7 @@
1
+ // client/src/harnesses/impls/hermes-agent/index.ts
2
+ export { HermesHarness } from './harness.js';
3
+ export { HermesHarnessAdapter } from './adapter.js';
4
+ export { hermesConfigFromSolverPlugins, } from './config-builder.js';
5
+ export { buildInitialPrompt } from './prompt.js';
6
+ export { writePerTaskHermesConfig } from './bootstrap.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,6BAA6B,GAI9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}