@jinn-network/client 0.1.8 → 0.1.9-canary.02befda9

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 (537) hide show
  1. package/README.md +6 -0
  2. package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +3 -3
  3. package/deployments/deployment-stolas-l2-baseSepolia-fast.json +23 -3
  4. package/deployments/deployment-task-coordinator-router-v3-baseSepolia-fast.json +34 -6
  5. package/dist/adapters/mech/adapter.d.ts +21 -1
  6. package/dist/adapters/mech/adapter.js +107 -52
  7. package/dist/adapters/mech/adapter.js.map +1 -1
  8. package/dist/adapters/mech/contracts.d.ts +174 -13
  9. package/dist/adapters/mech/contracts.js +99 -49
  10. package/dist/adapters/mech/contracts.js.map +1 -1
  11. package/dist/adapters/mech/safe-revert.d.ts +4 -0
  12. package/dist/adapters/mech/safe-revert.js +5 -1
  13. package/dist/adapters/mech/safe-revert.js.map +1 -1
  14. package/dist/adapters/mech/safe.js +77 -1
  15. package/dist/adapters/mech/safe.js.map +1 -1
  16. package/dist/adapters/mech/types.d.ts +4 -42
  17. package/dist/adapters/mech/types.js +8 -20
  18. package/dist/adapters/mech/types.js.map +1 -1
  19. package/dist/adapters/mech/verdict-code.js +1 -1
  20. package/dist/adapters/mech/verdict-code.js.map +1 -1
  21. package/dist/api/bootstrap-endpoint.d.ts +1 -0
  22. package/dist/api/bootstrap-endpoint.js +1 -0
  23. package/dist/api/bootstrap-endpoint.js.map +1 -1
  24. package/dist/api/discovery-endpoint.d.ts +1 -0
  25. package/dist/api/discovery-endpoint.js +24 -0
  26. package/dist/api/discovery-endpoint.js.map +1 -1
  27. package/dist/api/fleet-build.d.ts +1 -7
  28. package/dist/api/fleet-build.js +0 -7
  29. package/dist/api/fleet-build.js.map +1 -1
  30. package/dist/api/gather-status.d.ts +26 -17
  31. package/dist/api/gather-status.js +57 -516
  32. package/dist/api/gather-status.js.map +1 -1
  33. package/dist/api/harness-auth-status-endpoint.d.ts +21 -0
  34. package/dist/api/harness-auth-status-endpoint.js +17 -0
  35. package/dist/api/harness-auth-status-endpoint.js.map +1 -0
  36. package/dist/api/loop-completion-build.d.ts +79 -0
  37. package/dist/api/loop-completion-build.js +155 -0
  38. package/dist/api/loop-completion-build.js.map +1 -0
  39. package/dist/api/operator-artifacts-endpoint.js +1 -1
  40. package/dist/api/operator-artifacts-endpoint.js.map +1 -1
  41. package/dist/api/peers.js +2 -0
  42. package/dist/api/peers.js.map +1 -1
  43. package/dist/api/rewards-build.d.ts +8 -1
  44. package/dist/api/rewards-build.js +32 -4
  45. package/dist/api/rewards-build.js.map +1 -1
  46. package/dist/api/rewards-endpoint.d.ts +12 -0
  47. package/dist/api/rewards-endpoint.js +46 -0
  48. package/dist/api/rewards-endpoint.js.map +1 -0
  49. package/dist/api/server.d.ts +6 -16
  50. package/dist/api/server.js +29 -26
  51. package/dist/api/server.js.map +1 -1
  52. package/dist/api/setup-endpoints.d.ts +41 -0
  53. package/dist/api/setup-endpoints.js +258 -45
  54. package/dist/api/setup-endpoints.js.map +1 -1
  55. package/dist/api/solvernets-endpoints.js +4 -1
  56. package/dist/api/solvernets-endpoints.js.map +1 -1
  57. package/dist/api/status-build.d.ts +71 -94
  58. package/dist/api/status-build.js +11 -77
  59. package/dist/api/status-build.js.map +1 -1
  60. package/dist/api/status-rollup-build.d.ts +0 -4
  61. package/dist/api/status-rollup-build.js +0 -4
  62. package/dist/api/status-rollup-build.js.map +1 -1
  63. package/dist/api/stop-hook.d.ts +1 -1
  64. package/dist/api/stop-hook.js +1 -1
  65. package/dist/api/stop-hook.js.map +1 -1
  66. package/dist/build-info.json +4 -4
  67. package/dist/build-meta.json +1 -1
  68. package/dist/captures/live-publisher.d.ts +9 -0
  69. package/dist/captures/live-publisher.js +1 -0
  70. package/dist/captures/live-publisher.js.map +1 -1
  71. package/dist/captures/publish.d.ts +11 -0
  72. package/dist/captures/publish.js +15 -5
  73. package/dist/captures/publish.js.map +1 -1
  74. package/dist/cli/commands/codedigest-revert-check.js +6 -2
  75. package/dist/cli/commands/codedigest-revert-check.js.map +1 -1
  76. package/dist/cli/commands/doctor.d.ts +3 -0
  77. package/dist/cli/commands/doctor.js +36 -4
  78. package/dist/cli/commands/doctor.js.map +1 -1
  79. package/dist/cli/commands/eval.d.ts +87 -0
  80. package/dist/cli/commands/eval.js +481 -0
  81. package/dist/cli/commands/eval.js.map +1 -0
  82. package/dist/cli/commands/rewards.d.ts +2 -0
  83. package/dist/cli/commands/rewards.js +39 -10
  84. package/dist/cli/commands/rewards.js.map +1 -1
  85. package/dist/cli/commands/solver-nets.js +68 -0
  86. package/dist/cli/commands/solver-nets.js.map +1 -1
  87. package/dist/cli/commands/status.js +0 -1
  88. package/dist/cli/commands/status.js.map +1 -1
  89. package/dist/cli/commands/update.js +8 -0
  90. package/dist/cli/commands/update.js.map +1 -1
  91. package/dist/cli/commands/version.js +4 -0
  92. package/dist/cli/commands/version.js.map +1 -1
  93. package/dist/cli/index.js +2 -0
  94. package/dist/cli/index.js.map +1 -1
  95. package/dist/cli/introspection-context.js +0 -3
  96. package/dist/cli/introspection-context.js.map +1 -1
  97. package/dist/config.d.ts +158 -541
  98. package/dist/config.js +189 -196
  99. package/dist/config.js.map +1 -1
  100. package/dist/corpus/acquire.d.ts +7 -6
  101. package/dist/corpus/acquire.js +10 -10
  102. package/dist/corpus/acquire.js.map +1 -1
  103. package/dist/corpus/fetch-artifact.d.ts +21 -0
  104. package/dist/corpus/fetch-artifact.js +33 -0
  105. package/dist/corpus/fetch-artifact.js.map +1 -0
  106. package/dist/corpus/index.d.ts +2 -2
  107. package/dist/corpus/route-resolver.d.ts +3 -3
  108. package/dist/corpus/route-resolver.js +3 -3
  109. package/dist/daemon/ai-units-gate.d.ts +6 -6
  110. package/dist/daemon/ai-units-gate.js +11 -10
  111. package/dist/daemon/ai-units-gate.js.map +1 -1
  112. package/dist/daemon/balance-topup-loop.js +3 -0
  113. package/dist/daemon/balance-topup-loop.js.map +1 -1
  114. package/dist/daemon/checkpoint-loop.js +2 -2
  115. package/dist/daemon/creator.d.ts +1 -0
  116. package/dist/daemon/creator.js +26 -14
  117. package/dist/daemon/creator.js.map +1 -1
  118. package/dist/daemon/daemon.d.ts +15 -10
  119. package/dist/daemon/daemon.js +71 -39
  120. package/dist/daemon/daemon.js.map +1 -1
  121. package/dist/daemon/delivery-watcher.d.ts +9 -0
  122. package/dist/daemon/delivery-watcher.js +24 -1
  123. package/dist/daemon/delivery-watcher.js.map +1 -1
  124. package/dist/daemon/eviction-loop.d.ts +7 -0
  125. package/dist/daemon/eviction-loop.js +19 -3
  126. package/dist/daemon/eviction-loop.js.map +1 -1
  127. package/dist/daemon/join-applier.d.ts +35 -0
  128. package/dist/daemon/join-applier.js +49 -0
  129. package/dist/daemon/join-applier.js.map +1 -0
  130. package/dist/daemon/loop-heartbeat.d.ts +34 -0
  131. package/dist/daemon/loop-heartbeat.js +38 -0
  132. package/dist/daemon/loop-heartbeat.js.map +1 -0
  133. package/dist/daemon/reward-claim-loop.js +4 -1
  134. package/dist/daemon/reward-claim-loop.js.map +1 -1
  135. package/dist/daemon/skip-log-dedup.d.ts +1 -1
  136. package/dist/daemon/skip-log-dedup.js +3 -0
  137. package/dist/daemon/skip-log-dedup.js.map +1 -1
  138. package/dist/daemon/watchdog-loop.d.ts +84 -0
  139. package/dist/daemon/watchdog-loop.js +91 -0
  140. package/dist/daemon/watchdog-loop.js.map +1 -0
  141. package/dist/dashboard/assets/index-BsrAAmvC.js +171 -0
  142. package/dist/dashboard/assets/index-DQOWJ2SF.css +1 -0
  143. package/dist/dashboard/index.html +2 -2
  144. package/dist/discovery/http.d.ts +17 -0
  145. package/dist/discovery/http.js +295 -25
  146. package/dist/discovery/http.js.map +1 -1
  147. package/dist/discovery/onchain.js +158 -2
  148. package/dist/discovery/onchain.js.map +1 -1
  149. package/dist/discovery/types.d.ts +106 -0
  150. package/dist/discovery/types.js +40 -0
  151. package/dist/discovery/types.js.map +1 -1
  152. package/dist/discovery/with-fallback.js +14 -0
  153. package/dist/discovery/with-fallback.js.map +1 -1
  154. package/dist/earning/bootstrap.d.ts +25 -0
  155. package/dist/earning/bootstrap.js +79 -28
  156. package/dist/earning/bootstrap.js.map +1 -1
  157. package/dist/earning/contracts.d.ts +0 -229
  158. package/dist/earning/contracts.js +4 -184
  159. package/dist/earning/contracts.js.map +1 -1
  160. package/dist/earning/faucet-topup-store.d.ts +41 -0
  161. package/dist/earning/faucet-topup-store.js +89 -0
  162. package/dist/earning/faucet-topup-store.js.map +1 -0
  163. package/dist/earning/faucet.d.ts +1 -1
  164. package/dist/earning/faucet.js +2 -2
  165. package/dist/earning/faucet.js.map +1 -1
  166. package/dist/earning/safe-adapter.js +11 -0
  167. package/dist/earning/safe-adapter.js.map +1 -1
  168. package/dist/earning/stolas-claim.js +8 -8
  169. package/dist/earning/stolas-claim.js.map +1 -1
  170. package/dist/earning/{jinn-rewards.d.ts → stolas-staking.d.ts} +4 -8
  171. package/dist/earning/{jinn-rewards.js → stolas-staking.js} +6 -10
  172. package/dist/earning/stolas-staking.js.map +1 -0
  173. package/dist/earning/testnet-setup-migration.d.ts +1 -0
  174. package/dist/earning/testnet-setup-migration.js +7 -2
  175. package/dist/earning/testnet-setup-migration.js.map +1 -1
  176. package/dist/earning/types.d.ts +1 -1
  177. package/dist/earning/types.js +1 -1
  178. package/dist/earning/types.js.map +1 -1
  179. package/dist/earning/viem-clients.d.ts +3 -19
  180. package/dist/earning/viem-clients.js +4 -31
  181. package/dist/earning/viem-clients.js.map +1 -1
  182. package/dist/eval/eval-harness-run.d.ts +63 -0
  183. package/dist/eval/eval-harness-run.js +123 -0
  184. package/dist/eval/eval-harness-run.js.map +1 -0
  185. package/dist/eval/orchestrator.d.ts +224 -0
  186. package/dist/eval/orchestrator.js +250 -0
  187. package/dist/eval/orchestrator.js.map +1 -0
  188. package/dist/eval/paired.d.ts +68 -0
  189. package/dist/eval/paired.js +93 -0
  190. package/dist/eval/paired.js.map +1 -0
  191. package/dist/eval/resolve-slate-tasks.d.ts +35 -0
  192. package/dist/eval/resolve-slate-tasks.js +56 -0
  193. package/dist/eval/resolve-slate-tasks.js.map +1 -0
  194. package/dist/eval/screen-discovery.d.ts +22 -0
  195. package/dist/eval/screen-discovery.js +71 -0
  196. package/dist/eval/screen-discovery.js.map +1 -0
  197. package/dist/eval/screen-progress.d.ts +41 -0
  198. package/dist/eval/screen-progress.js +60 -0
  199. package/dist/eval/screen-progress.js.map +1 -0
  200. package/dist/eval/screen-runner.d.ts +30 -0
  201. package/dist/eval/screen-runner.js +289 -0
  202. package/dist/eval/screen-runner.js.map +1 -0
  203. package/dist/eval/screen.d.ts +107 -0
  204. package/dist/eval/screen.js +159 -0
  205. package/dist/eval/screen.js.map +1 -0
  206. package/dist/eval/slope.d.ts +29 -0
  207. package/dist/eval/slope.js +46 -0
  208. package/dist/eval/slope.js.map +1 -0
  209. package/dist/eval/train-sequence.d.ts +35 -0
  210. package/dist/eval/train-sequence.js +59 -0
  211. package/dist/eval/train-sequence.js.map +1 -0
  212. package/dist/eval/wilson.d.ts +45 -0
  213. package/dist/eval/wilson.js +48 -0
  214. package/dist/eval/wilson.js.map +1 -0
  215. package/dist/events/types.d.ts +1 -1
  216. package/dist/events/types.js +1 -1
  217. package/dist/events/types.js.map +1 -1
  218. package/dist/harnesses/auth-source.d.ts +51 -0
  219. package/dist/harnesses/auth-source.js +155 -0
  220. package/dist/harnesses/auth-source.js.map +1 -0
  221. package/dist/harnesses/engine/canonical-json.js +5 -3
  222. package/dist/harnesses/engine/canonical-json.js.map +1 -1
  223. package/dist/harnesses/engine/engine.d.ts +32 -0
  224. package/dist/harnesses/engine/engine.js +76 -9
  225. package/dist/harnesses/engine/engine.js.map +1 -1
  226. package/dist/harnesses/engine/packaging.js +5 -5
  227. package/dist/harnesses/engine/packaging.js.map +1 -1
  228. package/dist/harnesses/engine/persistence.d.ts +17 -0
  229. package/dist/harnesses/engine/persistence.js +28 -0
  230. package/dist/harnesses/engine/persistence.js.map +1 -1
  231. package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +1 -1
  232. package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js +1 -1
  233. package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -1
  234. package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
  235. package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
  236. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
  237. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
  238. package/dist/harnesses/impls/hermes-agent/bootstrap.js +6 -1
  239. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  240. package/dist/harnesses/impls/hermes-agent/harness.d.ts +25 -3
  241. package/dist/harnesses/impls/hermes-agent/harness.js +89 -5
  242. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  243. package/dist/harnesses/impls/index.d.ts +2 -0
  244. package/dist/harnesses/impls/index.js +10 -1
  245. package/dist/harnesses/impls/index.js.map +1 -1
  246. package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.d.ts +34 -0
  247. package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.js +111 -0
  248. package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.js.map +1 -0
  249. package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.d.ts +24 -0
  250. package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.js +19 -0
  251. package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.js.map +1 -0
  252. package/dist/harnesses/impls/jinn-repo-evaluator/harness.d.ts +64 -0
  253. package/dist/harnesses/impls/jinn-repo-evaluator/harness.js +125 -0
  254. package/dist/harnesses/impls/jinn-repo-evaluator/harness.js.map +1 -0
  255. package/dist/harnesses/impls/jinn-repo-evaluator/repro.d.ts +32 -0
  256. package/dist/harnesses/impls/jinn-repo-evaluator/repro.js +73 -0
  257. package/dist/harnesses/impls/jinn-repo-evaluator/repro.js.map +1 -0
  258. package/dist/harnesses/impls/learner/adapters/claude-code.js +5 -0
  259. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
  260. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +8 -0
  261. package/dist/harnesses/impls/learner/adapters/codex-code.js +91 -11
  262. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  263. package/dist/harnesses/impls/learner/harness.d.ts +29 -1
  264. package/dist/harnesses/impls/learner/harness.js +85 -1
  265. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  266. package/dist/harnesses/impls/learner/harvest.d.ts +2 -0
  267. package/dist/harnesses/impls/learner/harvest.js +51 -1
  268. package/dist/harnesses/impls/learner/harvest.js.map +1 -1
  269. package/dist/harnesses/impls/learner/plugin-path.js +1 -0
  270. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
  271. package/dist/harnesses/impls/stub.d.ts +2 -2
  272. package/dist/harnesses/impls/stub.js +2 -2
  273. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
  274. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  275. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
  276. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
  277. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
  278. package/dist/harnesses/readiness-registry.d.ts +16 -0
  279. package/dist/harnesses/readiness-registry.js +28 -6
  280. package/dist/harnesses/readiness-registry.js.map +1 -1
  281. package/dist/harnesses/types.d.ts +26 -0
  282. package/dist/learner/revert-decision.d.ts +16 -1
  283. package/dist/learner/revert-decision.js +38 -18
  284. package/dist/learner/revert-decision.js.map +1 -1
  285. package/dist/learner/revert-stats.d.ts +14 -0
  286. package/dist/learner/revert-stats.js +42 -0
  287. package/dist/learner/revert-stats.js.map +1 -1
  288. package/dist/local-provider-url.d.ts +3 -0
  289. package/dist/local-provider-url.js +28 -0
  290. package/dist/local-provider-url.js.map +1 -0
  291. package/dist/main.js +125 -120
  292. package/dist/main.js.map +1 -1
  293. package/dist/mcp/acquire-artifact.d.ts +3 -3
  294. package/dist/mcp/acquire-artifact.js +3 -3
  295. package/dist/mcp/operator-server.js +1 -1
  296. package/dist/mcp/operator-server.js.map +1 -1
  297. package/dist/mcp/server.js +5 -6
  298. package/dist/mcp/server.js.map +1 -1
  299. package/dist/observability/emit-event.d.ts +1 -1
  300. package/dist/observability/emit-event.js +0 -4
  301. package/dist/observability/emit-event.js.map +1 -1
  302. package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
  303. package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
  304. package/dist/plugins/learner/hooks/session-start +30 -1
  305. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
  306. package/dist/preflight/deployment-readiness.d.ts +127 -0
  307. package/dist/preflight/deployment-readiness.js +308 -0
  308. package/dist/preflight/deployment-readiness.js.map +1 -0
  309. package/dist/preflight/pidfile-liveness.d.ts +7 -1
  310. package/dist/preflight/pidfile-liveness.js +14 -0
  311. package/dist/preflight/pidfile-liveness.js.map +1 -1
  312. package/dist/rpc/transport.d.ts +43 -5
  313. package/dist/rpc/transport.js +131 -30
  314. package/dist/rpc/transport.js.map +1 -1
  315. package/dist/scripts/swe-rebench-v2-seed-pool.json +2 -1
  316. package/dist/solver-nets/registry.d.ts +19 -0
  317. package/dist/solver-nets/registry.js +95 -66
  318. package/dist/solver-nets/registry.js.map +1 -1
  319. package/dist/solver-types/_jinn-repo-pool.d.ts +27 -0
  320. package/dist/solver-types/_jinn-repo-pool.js +27 -0
  321. package/dist/solver-types/_jinn-repo-pool.js.map +1 -0
  322. package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
  323. package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
  324. package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
  325. package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
  326. package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
  327. package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
  328. package/dist/solver-types/_swe-rebench-v2-state.d.ts +9 -0
  329. package/dist/solver-types/_swe-rebench-v2-state.js +14 -0
  330. package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
  331. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +30 -0
  332. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +40 -0
  333. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  334. package/dist/solver-types/index.js +2 -0
  335. package/dist/solver-types/index.js.map +1 -1
  336. package/dist/solver-types/jinn-repo-admit.d.ts +17 -0
  337. package/dist/solver-types/jinn-repo-admit.js +16 -0
  338. package/dist/solver-types/jinn-repo-admit.js.map +1 -0
  339. package/dist/solver-types/jinn-repo-auto.d.ts +60 -0
  340. package/dist/solver-types/jinn-repo-auto.js +163 -0
  341. package/dist/solver-types/jinn-repo-auto.js.map +1 -0
  342. package/dist/solver-types/jinn-repo-definition.d.ts +15 -0
  343. package/dist/solver-types/jinn-repo-definition.js +34 -0
  344. package/dist/solver-types/jinn-repo-definition.js.map +1 -0
  345. package/dist/solver-types/jinn-repo-extract.d.ts +16 -0
  346. package/dist/solver-types/jinn-repo-extract.js +32 -0
  347. package/dist/solver-types/jinn-repo-extract.js.map +1 -0
  348. package/dist/solver-types/jinn-repo.d.ts +21 -0
  349. package/dist/solver-types/jinn-repo.js +23 -0
  350. package/dist/solver-types/jinn-repo.js.map +1 -0
  351. package/dist/solver-types/learner-loop-test.js +1 -1
  352. package/dist/solver-types/learner-loop-test.js.map +1 -1
  353. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
  354. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
  355. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
  356. package/dist/solver-types/solver-type.d.ts +8 -0
  357. package/dist/solver-types/swe-rebench-v2.d.ts +2 -0
  358. package/dist/solver-types/swe-rebench-v2.js +115 -10
  359. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  360. package/dist/solvernets/launched-record-dispatcher.d.ts +5 -0
  361. package/dist/solvernets/launched-record-dispatcher.js +8 -1
  362. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  363. package/dist/solvernets/registry-client-erc8004.js +29 -37
  364. package/dist/solvernets/registry-client-erc8004.js.map +1 -1
  365. package/dist/solvernets/registry-client.d.ts +6 -0
  366. package/dist/solvernets/store.d.ts +1 -1
  367. package/dist/solvernets/store.js +8 -3
  368. package/dist/solvernets/store.js.map +1 -1
  369. package/dist/spend/ai-units-config.d.ts +10 -0
  370. package/dist/spend/ai-units-config.js +7 -1
  371. package/dist/spend/ai-units-config.js.map +1 -1
  372. package/dist/spend/ai-units.d.ts +51 -0
  373. package/dist/spend/ai-units.js +73 -0
  374. package/dist/spend/ai-units.js.map +1 -1
  375. package/dist/spend/record.js +12 -5
  376. package/dist/spend/record.js.map +1 -1
  377. package/dist/spend/usage.js +39 -3
  378. package/dist/spend/usage.js.map +1 -1
  379. package/dist/store/store.d.ts +92 -5
  380. package/dist/store/store.js +184 -7
  381. package/dist/store/store.js.map +1 -1
  382. package/dist/trajectory/emit.d.ts +6 -0
  383. package/dist/trajectory/emit.js +9 -1
  384. package/dist/trajectory/emit.js.map +1 -1
  385. package/dist/trajectory/harness-bundle-schema.d.ts +1 -1
  386. package/dist/trajectory/harness-bundle-schema.js +1 -1
  387. package/dist/trajectory/harness-bundle-schema.js.map +1 -1
  388. package/dist/trajectory/schema.d.ts +1 -1
  389. package/dist/trajectory/schema.js +1 -1
  390. package/dist/trajectory/schema.js.map +1 -1
  391. package/dist/trajectory/scrub/build.d.ts +27 -0
  392. package/dist/trajectory/scrub/build.js +43 -0
  393. package/dist/trajectory/scrub/build.js.map +1 -0
  394. package/dist/trajectory/scrub/emit-scrub.d.ts +41 -0
  395. package/dist/trajectory/scrub/emit-scrub.js +88 -0
  396. package/dist/trajectory/scrub/emit-scrub.js.map +1 -0
  397. package/dist/trajectory/scrub/key-policy.d.ts +20 -0
  398. package/dist/trajectory/scrub/key-policy.js +43 -0
  399. package/dist/trajectory/scrub/key-policy.js.map +1 -0
  400. package/dist/trajectory/scrub/ml-pii-stage.d.ts +24 -0
  401. package/dist/trajectory/scrub/ml-pii-stage.js +43 -0
  402. package/dist/trajectory/scrub/ml-pii-stage.js.map +1 -0
  403. package/dist/trajectory/scrub/openredaction-stage.d.ts +14 -0
  404. package/dist/trajectory/scrub/openredaction-stage.js +36 -0
  405. package/dist/trajectory/scrub/openredaction-stage.js.map +1 -0
  406. package/dist/trajectory/scrub/pii-build.d.ts +31 -0
  407. package/dist/trajectory/scrub/pii-build.js +64 -0
  408. package/dist/trajectory/scrub/pii-build.js.map +1 -0
  409. package/dist/trajectory/scrub/pipeline.d.ts +16 -0
  410. package/dist/trajectory/scrub/pipeline.js +26 -0
  411. package/dist/trajectory/scrub/pipeline.js.map +1 -0
  412. package/dist/trajectory/scrub/secretlint-stage.d.ts +13 -0
  413. package/dist/trajectory/scrub/secretlint-stage.js +121 -0
  414. package/dist/trajectory/scrub/secretlint-stage.js.map +1 -0
  415. package/dist/trajectory/scrub/transformers-detector.d.ts +35 -0
  416. package/dist/trajectory/scrub/transformers-detector.js +68 -0
  417. package/dist/trajectory/scrub/transformers-detector.js.map +1 -0
  418. package/dist/trajectory/scrub/types.d.ts +25 -0
  419. package/dist/trajectory/scrub/types.js +2 -0
  420. package/dist/trajectory/scrub/types.js.map +1 -0
  421. package/dist/trajectory/transcript-parsers/types.d.ts +1 -1
  422. package/dist/trajectory/transcript-parsers/types.js +1 -1
  423. package/dist/trajectory/transcript-parsers/types.js.map +1 -1
  424. package/dist/tx-retry.d.ts +12 -0
  425. package/dist/tx-retry.js +41 -12
  426. package/dist/tx-retry.js.map +1 -1
  427. package/dist/types/envelope.d.ts +1 -1
  428. package/dist/types/envelope.js +1 -1
  429. package/dist/types/envelope.js.map +1 -1
  430. package/dist/types/payloads/index.d.ts +1 -1
  431. package/dist/types/payloads/index.js +7 -1
  432. package/dist/types/payloads/index.js.map +1 -1
  433. package/dist/types/payloads/portfolio-v0.d.ts +1 -1
  434. package/dist/types/payloads/portfolio-v0.js +1 -1
  435. package/dist/types/payloads/portfolio-v0.js.map +1 -1
  436. package/dist/types/payloads/prediction-apy-v0.d.ts +1 -1
  437. package/dist/types/payloads/prediction-apy-v0.js +1 -1
  438. package/dist/types/payloads/prediction-apy-v0.js.map +1 -1
  439. package/dist/types/payloads/prediction-v0.d.ts +1 -1
  440. package/dist/types/payloads/prediction-v0.js +1 -1
  441. package/dist/types/payloads/prediction-v0.js.map +1 -1
  442. package/dist/types/portfolio.d.ts +1 -1
  443. package/dist/types/portfolio.js +1 -1
  444. package/dist/types/portfolio.js.map +1 -1
  445. package/dist/types/prediction-apy.d.ts +1 -1
  446. package/dist/types/prediction-apy.js +1 -1
  447. package/dist/types/prediction-apy.js.map +1 -1
  448. package/dist/types/prediction.d.ts +1 -1
  449. package/dist/types/prediction.js +1 -1
  450. package/dist/types/prediction.js.map +1 -1
  451. package/dist/types/session-provenance.d.ts +1 -1
  452. package/dist/types/session-provenance.js +1 -1
  453. package/dist/types/session-provenance.js.map +1 -1
  454. package/dist/types/task-document.d.ts +315 -1
  455. package/dist/types/task-document.js +9 -1
  456. package/dist/types/task-document.js.map +1 -1
  457. package/dist/types/task.d.ts +29 -1
  458. package/dist/types/task.js +1 -1
  459. package/dist/types/task.js.map +1 -1
  460. package/dist/types/window.d.ts +1 -1
  461. package/dist/types/window.js +1 -1
  462. package/dist/types/window.js.map +1 -1
  463. package/dist/vendor/@jinn-network/sdk/dist/checkpoint.d.ts +1 -1
  464. package/dist/vendor/@jinn-network/sdk/dist/checkpoint.js +1 -1
  465. package/dist/vendor/@jinn-network/sdk/dist/contracts.d.ts +3 -2
  466. package/dist/vendor/@jinn-network/sdk/dist/contracts.js +49 -0
  467. package/dist/vendor/@jinn-network/sdk/dist/jinn-repo.d.ts +44 -0
  468. package/dist/vendor/@jinn-network/sdk/dist/jinn-repo.js +25 -0
  469. package/dist/vendor/@jinn-network/sdk/dist/json-schema.d.ts +1 -1
  470. package/dist/vendor/@jinn-network/sdk/dist/json-schema.js +1 -1
  471. package/dist/vendor/@jinn-network/sdk/dist/payloads/jinn-repo.d.ts +38 -0
  472. package/dist/vendor/@jinn-network/sdk/dist/payloads/jinn-repo.js +22 -0
  473. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +1 -1
  474. package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +1 -1
  475. package/dist/vendor/@jinn-network/sdk/dist/payloads/session-derived.d.ts +1 -1
  476. package/dist/vendor/@jinn-network/sdk/dist/payloads/session-derived.js +1 -1
  477. package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +109 -2
  478. package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +26 -2
  479. package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.d.ts +1 -1
  480. package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.js +1 -1
  481. package/dist/vendor/@jinn-network/sdk/dist/solvernets/jinn-repo.d.ts +4 -0
  482. package/dist/vendor/@jinn-network/sdk/dist/solvernets/jinn-repo.js +2 -0
  483. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +1 -1
  484. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -1
  485. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
  486. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
  487. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
  488. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
  489. package/dist/vendor/@jinn-network/sdk/dist/swe-rebench-v2.d.ts +1 -1
  490. package/dist/vendor/@jinn-network/sdk/dist/swe-rebench-v2.js +1 -1
  491. package/dist/vendor/@jinn-network/sdk/package.json +9 -1
  492. package/docker-compose.yml +3 -2
  493. package/package.json +36 -26
  494. package/plugins/jinn-repo-runtime/.claude-plugin/plugin.json +5 -0
  495. package/plugins/jinn-repo-runtime/.codex-plugin/plugin.json +39 -0
  496. package/plugins/jinn-repo-runtime/README.md +27 -0
  497. package/plugins/jinn-repo-runtime/hooks/hooks.json +16 -0
  498. package/plugins/jinn-repo-runtime/hooks/session-start +73 -0
  499. package/plugins/jinn-repo-runtime/jinn.plugin.json +11 -0
  500. package/plugins/jinn-repo-runtime/skills/task/SKILL.md +92 -0
  501. package/plugins/learner/.claude-plugin/plugin.json +1 -1
  502. package/plugins/learner/.codex-plugin/plugin.json +1 -1
  503. package/plugins/learner/hooks/session-start +30 -1
  504. package/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
  505. package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
  506. package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
  507. package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +0 -55
  508. package/deployments/deployment-jinn-mvi-l1-sepolia.json +0 -55
  509. package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +0 -13
  510. package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +0 -15
  511. package/dist/daemon/jinn-claim-loop-canonical.d.ts +0 -207
  512. package/dist/daemon/jinn-claim-loop-canonical.js +0 -296
  513. package/dist/daemon/jinn-claim-loop-canonical.js.map +0 -1
  514. package/dist/daemon/jinn-claim-loop-mock.d.ts +0 -61
  515. package/dist/daemon/jinn-claim-loop-mock.js +0 -122
  516. package/dist/daemon/jinn-claim-loop-mock.js.map +0 -1
  517. package/dist/daemon/jinn-claim-loop-wiring.d.ts +0 -33
  518. package/dist/daemon/jinn-claim-loop-wiring.js +0 -40
  519. package/dist/daemon/jinn-claim-loop-wiring.js.map +0 -1
  520. package/dist/daemon/jinn-claim-loop.d.ts +0 -130
  521. package/dist/daemon/jinn-claim-loop.js +0 -328
  522. package/dist/daemon/jinn-claim-loop.js.map +0 -1
  523. package/dist/dashboard/assets/index-CzKxvMcU.css +0 -32
  524. package/dist/dashboard/assets/index-yVemxHot.js +0 -351
  525. package/dist/earning/jinn-rewards.js.map +0 -1
  526. package/dist/scripts/donation-consumption-acceptance.d.ts +0 -85
  527. package/dist/scripts/donation-consumption-acceptance.js +0 -1382
  528. package/dist/scripts/donation-consumption-acceptance.js.map +0 -1
  529. package/dist/x402/acquire.d.ts +0 -17
  530. package/dist/x402/acquire.js +0 -49
  531. package/dist/x402/acquire.js.map +0 -1
  532. package/dist/x402/facilitator.d.ts +0 -11
  533. package/dist/x402/facilitator.js +0 -52
  534. package/dist/x402/facilitator.js.map +0 -1
  535. package/dist/x402/handler.d.ts +0 -27
  536. package/dist/x402/handler.js +0 -236
  537. package/dist/x402/handler.js.map +0 -1
package/dist/config.js CHANGED
@@ -16,10 +16,11 @@
16
16
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
17
17
  import { homedir } from 'node:os';
18
18
  import { dirname, join } from 'node:path';
19
- import { z } from 'zod';
19
+ import { z } from 'zod/v3';
20
20
  import { TaskSchema, parseTask } from './types/task.js';
21
21
  import { canonicalHarnessName } from './harnesses/names.js';
22
22
  import { parseRpcUrls } from './rpc/transport.js';
23
+ import { canonicalLocalHttpBaseUrl } from './local-provider-url.js';
23
24
  // ── Schema ──────────────────────────────────────────────────────────────────
24
25
  const HarnessNameSchema = z.string().transform((name) => canonicalHarnessName(name));
25
26
  export const JinnConfigSchema = z.object({
@@ -44,12 +45,17 @@ export const JinnConfigSchema = z.object({
44
45
  rpcUrl: z.union([z.string(), z.array(z.string()).min(1)]).optional(),
45
46
  archiveRpcUrl: z.union([z.string(), z.array(z.string()).min(1)]).optional(),
46
47
  /**
47
- * Optional L2 proof/archive RPC endpoint(s) for canonical cross-chain canaries.
48
- * The daemon can use its normal rpcUrl for writes while proof construction
49
- * uses this endpoint for historical eth_getProof at OP dispute-game blocks.
50
- * Accepts string or array form (see rpcUrl). Env: JINN_L2_PROOF_RPC_URL.
48
+ * Single volume-aware durable-state root. When set (env JINN_STATE_DIR or
49
+ * this file field), `earningDir`, `dbPath`, `engine.implStateDirRoot`, and
50
+ * the swe-rebench-v2 pool dir derive from it as `<stateDir>/<subdir>`
51
+ * UNLESS each is individually overridden, in which case the per-key value
52
+ * wins (derive-don't-collapse). With `stateDir` unset, every default is
53
+ * byte-identical to the legacy `~/.jinn-client/<subdir>` paths. Hosted
54
+ * deploys collapse four ENV lines to one `JINN_STATE_DIR=/data`.
55
+ * `engine.workingDirRoot` is deliberately NOT derived — it stays ephemeral
56
+ * (reaped per-task).
51
57
  */
52
- l2ProofRpcUrl: z.union([z.string(), z.array(z.string()).min(1)]).optional(),
58
+ stateDir: z.string().optional(),
53
59
  /** Earning state directory */
54
60
  earningDir: z.string().default(join(homedir(), '.jinn-client', 'earning')),
55
61
  /** SQLite database path */
@@ -58,11 +64,11 @@ export const JinnConfigSchema = z.object({
58
64
  pollIntervalMs: z.number().int().positive().default(5000),
59
65
  /**
60
66
  * How often the daemon attempts stOLAS ExternalStakingDistributor.claim for each staked
61
- * fleet service (ms). Default 600000 (10 min) well under typical checkpoint liveness windows
62
- * on Base while limiting RPC/gas churn. Set to 0 to disable auto-claim.
67
+ * fleet service (ms). Default 0 so operators claim OLAS manually from the app.
68
+ * Set JINN_REWARD_CLAIM_INTERVAL_MS=600000 for managed/headless auto-claim.
63
69
  * Env: JINN_REWARD_CLAIM_INTERVAL_MS
64
70
  */
65
- rewardClaimIntervalMs: z.number().int().min(0).default(600_000),
71
+ rewardClaimIntervalMs: z.number().int().min(0).default(0),
66
72
  /**
67
73
  * How often the daemon checks agent EOA and Safe balances and tops them up from the master
68
74
  * wallet when they drop below trigger thresholds (ms). Default 300000 (5 min).
@@ -105,6 +111,22 @@ export const JinnConfigSchema = z.object({
105
111
  hermesModel: z.string().optional(),
106
112
  /** Hermes provider (e.g. 'anthropic'). */
107
113
  hermesProvider: z.string().optional(),
114
+ /** Local OpenAI-compatible Hermes base URL, e.g. http://127.0.0.1:11434/v1 for Ollama. */
115
+ hermesBaseUrl: z
116
+ .string()
117
+ .url()
118
+ .transform((value, ctx) => {
119
+ const canonical = canonicalLocalHttpBaseUrl(value);
120
+ if (!canonical) {
121
+ ctx.addIssue({
122
+ code: z.ZodIssueCode.custom,
123
+ message: 'hermesBaseUrl must be a local HTTP(S) URL',
124
+ });
125
+ return z.NEVER;
126
+ }
127
+ return canonical;
128
+ })
129
+ .optional(),
108
130
  /**
109
131
  * Timeout in ms for `hermes doctor` health-check runs.
110
132
  * Default 30 000 ms. Env: JINN_HERMES_DOCTOR_TIMEOUT_MS.
@@ -161,16 +183,18 @@ export const JinnConfigSchema = z.object({
161
183
  * Narrow task discovery to specific on-chain task ids. This is primarily
162
184
  * for live acceptance gates that must avoid claiming unrelated public
163
185
  * backlog while proving one fresh task path.
186
+ * Env: JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS (comma-separated).
164
187
  */
165
188
  taskDiscoveryAllowedTaskIds: z.array(z.string()).optional(),
166
189
  /**
167
- * Opt-in lower bound (L2 block number) for the mech adapter's canonical
168
- * on-chain TaskCreated backlog scan. Unset → the adapter's per-chain default
169
- * (DEFAULT_TASK_DISCOVERY_FROM_BLOCK) flows through (see gh #300). Set this to
170
- * a recent block to bound the scan to a small recent window so the indexer
171
- * (DiscoveryAPI.findClaimableTasks) carries the bulk of discovery the
172
- * canonical getLogs scan over a large/bloated history parses huge responses
173
- * on the main thread and can stall the event loop. Env: JINN_TASK_DISCOVERY_FROM_BLOCK.
190
+ * Explicit absolute lower bound (L2 block number) for the mech adapter's
191
+ * on-chain TaskCreated backlog scan. Unset → the scan defaults to a bounded
192
+ * rolling window (`head DEFAULT_ONCHAIN_SCAN_WINDOW_BLOCKS`, ~28h on Base),
193
+ * so a restart no longer replays full chain history every boot (#801); the
194
+ * indexer (DiscoveryAPI.findClaimableTasks) is the primary discovery path and
195
+ * the on-chain scan is a bounded backstop. Set this to widen the backstop to a
196
+ * specific block (the value pins both the scan start and the gh #300 admission
197
+ * floor). Env: JINN_TASK_DISCOVERY_FROM_BLOCK.
174
198
  */
175
199
  taskDiscoveryOnchainFromBlock: z.number().int().min(0).optional(),
176
200
  /** This node's public HTTP endpoint (for 8004 registration) */
@@ -190,98 +214,12 @@ export const JinnConfigSchema = z.object({
190
214
  /** Optional Base Sepolia stOLAS deployment artifact path */
191
215
  testnetStolasDeploymentPath: z.string().optional(),
192
216
  /**
193
- * Optional deployment artifact for the v0 MVI L1 stack
194
- * (deployment-jinn-mvi-l1-{network}{,-fast}.json). Provides addresses for
195
- * JINN, Timelock, JinnGovernor, JinnDistributor, and Messenger.
196
- * When set the daemon enables the cross-chain JINN claim loop.
197
- */
198
- jinnMviL1DeploymentPath: z.string().optional(),
199
- /**
200
- * Optional deployment artifact for the v0 MVI L2 emitter
201
- * (deployment-jinn-mvi-l2-{network}.json). Provides the
202
- * TaskClaimEmitter address on the measurement chain (Base / Base Sepolia).
203
- */
204
- jinnMviL2DeploymentPath: z.string().optional(),
205
- // ── Cross-chain claim loop (Phase B / jinn-mono-7x5) ─────────────────────
206
- /**
207
- * RPC endpoint(s) for the L1 governance chain (Ethereum / Sepolia) where
208
- * the JinnDistributor lives. Accepts string or array form (see rpcUrl) and
209
- * supports comma-separated env values. Testnet defaults to a public Sepolia
210
- * RPC; mainnet requires an operator override when L1 submit mode is
211
- * configured. Env: JINN_ETHEREUM_RPC_URL.
217
+ * Loop-watchdog auto-restart gate (#1043). Default OFF (the locked Option A
218
+ * decision): the watchdog always detects a stale loop and loud-logs + emits
219
+ * a `loop_watchdog_stale` event, but the non-zero process.exit recovery only
220
+ * fires when this is on. Env: JINN_WATCHDOG_AUTO_RESTART=1|true|yes.
212
221
  */
213
- ethereumRpcUrl: z.union([z.string(), z.array(z.string()).min(1)]).optional(),
214
- /**
215
- * Optional archive RPC endpoint(s) for the L1 governance chain. Used for
216
- * historical block lookups when constructing canonical-mode proofs. Accepts
217
- * string or array form. Env: JINN_ETHEREUM_ARCHIVE_RPC_URL.
218
- */
219
- ethereumArchiveRpcUrl: z.union([z.string(), z.array(z.string()).min(1)]).optional(),
220
- /**
221
- * L1 network used by the cross-chain claim loop. 'sepolia' tracks Base
222
- * Sepolia testnet; 'ethereum' tracks Base mainnet. Defaults to 'sepolia'
223
- * during Phase 1b. Env: JINN_L1_NETWORK.
224
- */
225
- jinnL1Network: z.enum(['sepolia', 'ethereum']).default('sepolia'),
226
- /**
227
- * JinnDistributor address on the L1 governance chain. Required for
228
- * jinnClaimSubmissionMode='submit'. When set for submit mode, ethereumRpcUrl
229
- * MUST also be set. Resolved from jinnMviL1DeploymentPath when omitted;
230
- * otherwise a manual override. Env: JINN_DISTRIBUTOR_ADDRESS.
231
- */
232
- jinnDistributorAddress: z
233
- .string()
234
- .regex(/^0x[0-9a-fA-F]{40}$/, 'must be a 0x-prefixed 20-byte address')
235
- .optional(),
236
- /**
237
- * TaskClaimEmitter address on the L2 measurement chain (Base / Base
238
- * Sepolia). Resolved from jinnMviL2DeploymentPath when omitted.
239
- * Env: JINN_CLAIM_EMITTER_ADDRESS.
240
- */
241
- jinnClaimEmitterAddress: z
242
- .string()
243
- .regex(/^0x[0-9a-fA-F]{40}$/, 'must be a 0x-prefixed 20-byte address')
244
- .optional(),
245
- /**
246
- * Messenger address on the L1 governance chain. Resolved from
247
- * jinnMviL1DeploymentPath when omitted.
248
- * Env: JINN_MESSENGER_ADDRESS.
249
- */
250
- jinnMessengerAddress: z
251
- .string()
252
- .regex(/^0x[0-9a-fA-F]{40}$/, 'must be a 0x-prefixed 20-byte address')
253
- .optional(),
254
- /**
255
- * Messenger mode driving proof construction. `mock` submits MockMessenger
256
- * fixtures — required for automated Sepolia burn-in (`runOnce`). `canonical`
257
- * builds OP-Stack storage proofs for verifier-only checks; scheduled daemon
258
- * ticks **skip** canonical mode (multi-day finality) — use
259
- * `tsx scripts/verify-canonical-canary.ts` after finality instead. Defaults
260
- * to `canonical`.
261
- * Env: JINN_MESSENGER_MODE.
262
- */
263
- jinnMessengerMode: z.enum(['canonical', 'mock']).default('canonical'),
264
- /**
265
- * Claim submission mode. `emit-only` only submits TaskClaimEmitter.emitClaim
266
- * on L2 and records the resulting ticket. `submit` continues into the L1
267
- * messenger/distributor path.
268
- * Env: JINN_CLAIM_SUBMISSION_MODE.
269
- */
270
- jinnClaimSubmissionMode: z.enum(['emit-only', 'submit']).default('emit-only'),
271
- /**
272
- * Explicit operator gate for the cross-chain JINN claim loop. The schema
273
- * default stays off for mainnet/unknown networks; loadConfig defaults this
274
- * on for testnet now that the emitter and standing relayer are live.
275
- * Env: JINN_CLAIM_LOOP_ENABLED=1|true|yes.
276
- */
277
- jinnClaimLoopEnabled: z.boolean().default(false),
278
- /**
279
- * How often the daemon ticks the cross-chain JINN claim loop (ms). Default
280
- * 3 600 000 (1 hour) — well below mainnet challenge windows while
281
- * minimising RPC/gas churn. Set to 0 to disable when the address is set.
282
- * Env: JINN_CLAIM_LOOP_INTERVAL_MS.
283
- */
284
- jinnClaimLoopIntervalMs: z.number().int().min(0).default(60 * 60 * 1000),
222
+ watchdogAutoRestart: z.boolean().default(false),
285
223
  /** Staking mode: 'standard' uses stOLAS (no OLAS needed), 'self-bond' uses operator-provided OLAS. */
286
224
  stakingMode: z.enum(['standard', 'self-bond']).default('standard'),
287
225
  /** Number of services to bootstrap and run. */
@@ -316,6 +254,25 @@ export const JinnConfigSchema = z.object({
316
254
  .string()
317
255
  .regex(/^\d+$/, 'must be a non-negative integer string')
318
256
  .optional(),
257
+ /**
258
+ * Faucet top-up daily cap + cooldown (issue #560). Single source of truth
259
+ * for the running-mode Dashboard "Top up from faucet" batch action, shared
260
+ * by the daemon endpoint and surfaced to the SPA via GET /v1/setup/drip/quota.
261
+ *
262
+ * `faucetDailyTopupCap` — number of faucet drips a single operator click may
263
+ * issue in one batch (and the per-24h ceiling per wallet). Env:
264
+ * JINN_FAUCET_DAILY_TOPUP_CAP.
265
+ *
266
+ * `faucetTopupCooldownMs` — once the cap is reached, the top-up action is
267
+ * disabled until this window elapses since the first call of that batch.
268
+ * Env: JINN_FAUCET_TOPUP_COOLDOWN_MS.
269
+ */
270
+ faucetDailyTopupCap: z.number().int().positive().default(10),
271
+ faucetTopupCooldownMs: z
272
+ .number()
273
+ .int()
274
+ .min(0)
275
+ .default(24 * 60 * 60 * 1000),
319
276
  /**
320
277
  * Operator-controlled Harness inventory.
321
278
  */
@@ -397,6 +354,18 @@ export const JinnConfigSchema = z.object({
397
354
  disabledDefaultPlugins: z.array(z.string()).default([]),
398
355
  }))
399
356
  .optional(),
357
+ /**
358
+ * Set true once the operator clicks "Enter dashboard" at the end of the
359
+ * #983 guided onboarding takeover. Distinct from `joinedSolverNets` being
360
+ * non-empty: a node can have a membership mid-onboarding (the first join
361
+ * populates the map) yet not have finished harness/model selection. The SPA
362
+ * gates the bootstrap→dashboard hand-off on this flag (see App.tsx), so the
363
+ * first join no longer ejects the operator before the harness step.
364
+ *
365
+ * Written by POST /v1/operator/onboarding-complete (persisted to disk AND
366
+ * mutated in-memory so GET /v1/bootstrap reflects it without a restart).
367
+ */
368
+ onboardingComplete: z.boolean().optional(),
400
369
  /**
401
370
  * Trusted ed25519 publishers for external harness impls. The daemon
402
371
  * refuses to load any external impl whose manifest signature is not
@@ -480,8 +449,25 @@ export const JinnConfigSchema = z.object({
480
449
  port: z.number().int().positive().default(7342),
481
450
  })
482
451
  .default({ enabled: false, port: 7342 }),
452
+ /**
453
+ * Seller-side ML PII detection (Transformers.js NER, in-process) applied
454
+ * before captures (and task trajectories) are published. Off by default:
455
+ * the structural key policy + openredaction + secretlint/entropy stages
456
+ * always scrub (the non-ML guarantee); this adds person/org/location NER
457
+ * at the cost of a one-time model download. When enabled, a model-load
458
+ * failure fails closed at the publish altitude — the trajectory is not
459
+ * published — while the daemon's other loops keep running.
460
+ * Env: JINN_CAPTURES_PII_DETECTION_ENABLED=1|true|yes,
461
+ * JINN_CAPTURES_PII_DETECTION_MODEL=<hf-model-id>
462
+ */
463
+ piiDetection: z
464
+ .object({
465
+ enabled: z.boolean().default(false),
466
+ model: z.string().optional(),
467
+ })
468
+ .default({ enabled: false }),
483
469
  })
484
- .default({ llmProxy: { enabled: false, port: 7342 } }),
470
+ .default({ llmProxy: { enabled: false, port: 7342 }, piiDetection: { enabled: false } }),
485
471
  /**
486
472
  * Run idempotent legacy migrations at daemon startup (jinn-mono-jgp:
487
473
  * backfill `agent_id` on `complete` services that pre-date j07).
@@ -547,13 +533,6 @@ export const JinnConfigSchema = z.object({
547
533
  blockedCids: z.array(z.string()).default([]),
548
534
  })
549
535
  .default({ blockedCids: [] }),
550
- }).refine((cfg) => cfg.jinnClaimSubmissionMode !== 'submit' ||
551
- !cfg.jinnDistributorAddress ||
552
- !!cfg.ethereumRpcUrl, {
553
- message: 'ethereumRpcUrl must be set when jinnDistributorAddress is configured in submit mode ' +
554
- '(env JINN_ETHEREUM_RPC_URL or config field). The cross-chain claim loop ' +
555
- 'cannot reach the L1 governance chain without it.',
556
- path: ['ethereumRpcUrl'],
557
536
  });
558
537
  const DEFAULT_ENGINE = {
559
538
  workingDirRoot: join(homedir(), '.jinn-client', 'engine', 'work'),
@@ -570,21 +549,42 @@ export const DEFAULT_CONFIG_PATH = join(DEFAULT_DIR, 'config.json');
570
549
  * historical sync — see ponder.config.ts).
571
550
  */
572
551
  export const DEFAULT_TESTNET_DISCOVERY_URL = 'https://jinn-indexer-production.up.railway.app';
573
- export const DEFAULT_TESTNET_ETHEREUM_RPC_URL = 'https://ethereum-sepolia-rpc.publicnode.com';
574
552
  /**
575
- * Default fallback chain for the L2 measurement chain (Base Sepolia) on
576
- * testnet. Per AC2 of issue #592:
577
- * slot 0 `https://base-sepolia.publicnode.com` (no-auth, 50k-block
578
- * getLogs cap, no shared-quota cliff).
579
- * slot 1 `https://sepolia.base.org` (free public Coinbase endpoint,
580
- * 2k-block cap; last-resort backup).
553
+ * Default fallback chain for the L2 measurement chain (Base Sepolia, chain-id
554
+ * 84532) on testnet. Originally a two-provider chain (AC2 of issue #592);
555
+ * widened to ≥5 distinct free providers per issue #911 so a default-config
556
+ * daemon tolerates a single-provider quota cliff (the Tenderly shared-quota
557
+ * cliff of 2026-05-24) without an operator key.
558
+ * slot 0 — `https://base-sepolia.publicnode.com` (#835 no-auth primary,
559
+ * 50k-block getLogs cap, no shared-quota cliff).
560
+ * slot 1 — `https://base-sepolia-rpc.publicnode.com`
561
+ * slot 2 — `https://base-sepolia.drpc.org`
562
+ * slot 3 — `https://base-sepolia.gateway.tenderly.co`
563
+ * slot 4 — `https://sepolia.base.org` (free public Coinbase endpoint,
564
+ * 2k-block cap; last-resort backup, stays last).
581
565
  * Operators are encouraged to prepend a paid primary key (Alchemy, Tenderly,
582
566
  * etc.) via `rpcUrl` config or `JINN_RPC_URL` / `BASE_SEPOLIA_RPC_URL` env.
567
+ * All five endpoints live-verified to return chain-id 84532 (#911).
583
568
  */
584
569
  export const DEFAULT_TESTNET_RPC_URLS = [
585
570
  'https://base-sepolia.publicnode.com',
571
+ 'https://base-sepolia-rpc.publicnode.com',
572
+ 'https://base-sepolia.drpc.org',
573
+ 'https://base-sepolia.gateway.tenderly.co',
586
574
  'https://sepolia.base.org',
587
575
  ];
576
+ /**
577
+ * Default fallback chain for the L2 measurement chain (Base mainnet, chain-id
578
+ * 8453). ≥5 distinct free providers per issue #911.
579
+ * slot 0 — `https://mainnet.base.org` (free public Coinbase endpoint).
580
+ */
581
+ export const DEFAULT_MAINNET_RPC_URLS = [
582
+ 'https://mainnet.base.org',
583
+ 'https://base.publicnode.com',
584
+ 'https://base.drpc.org',
585
+ 'https://1rpc.io/base',
586
+ 'https://base.meowrpc.com',
587
+ ];
588
588
  export class ConfigLoadError extends Error {
589
589
  code;
590
590
  details;
@@ -715,8 +715,6 @@ export function loadConfig(configPath) {
715
715
  const merged = { ...fileValues };
716
716
  if (env['JINN_NETWORK'])
717
717
  merged.network = env['JINN_NETWORK'];
718
- if (env['JINN_L2_PROOF_RPC_URL'])
719
- merged.l2ProofRpcUrl = env['JINN_L2_PROOF_RPC_URL'];
720
718
  if (env['JINN_EARNING_DIR'])
721
719
  merged.earningDir = env['JINN_EARNING_DIR'];
722
720
  if (env['JINN_DB_PATH'])
@@ -736,6 +734,12 @@ export function loadConfig(configPath) {
736
734
  if (env['JINN_TASK_DISCOVERY_FROM_BLOCK'] !== undefined) {
737
735
  merged.taskDiscoveryOnchainFromBlock = Number.parseInt(env['JINN_TASK_DISCOVERY_FROM_BLOCK'], 10);
738
736
  }
737
+ if (env['JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS'] !== undefined) {
738
+ merged.taskDiscoveryAllowedTaskIds = env['JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS']
739
+ .split(',')
740
+ .map((id) => id.trim())
741
+ .filter(Boolean);
742
+ }
739
743
  if (env['JINN_API_PORT'])
740
744
  merged.apiPort = parseInt(env['JINN_API_PORT'], 10);
741
745
  if (env['JINN_API_BIND_HOST'])
@@ -750,6 +754,8 @@ export function loadConfig(configPath) {
750
754
  merged.hermesModel = env['JINN_HERMES_MODEL'];
751
755
  if (env['JINN_HERMES_PROVIDER'])
752
756
  merged.hermesProvider = env['JINN_HERMES_PROVIDER'];
757
+ if (env['JINN_HERMES_BASE_URL'])
758
+ merged.hermesBaseUrl = env['JINN_HERMES_BASE_URL'];
753
759
  if (env['JINN_HERMES_DOCTOR_TIMEOUT_MS']) {
754
760
  merged.hermesDoctorTimeoutMs = parseInt(env['JINN_HERMES_DOCTOR_TIMEOUT_MS'], 10);
755
761
  }
@@ -801,33 +807,9 @@ export function loadConfig(configPath) {
801
807
  merged.testnetL2TokenDeploymentPath = env['JINN_TESTNET_TOKEN_DEPLOYMENT'];
802
808
  if (env['JINN_TESTNET_MECH_DEPLOYMENT'])
803
809
  merged.testnetMechDeploymentPath = env['JINN_TESTNET_MECH_DEPLOYMENT'];
804
- if (env['JINN_MVI_L1_DEPLOYMENT'])
805
- merged.jinnMviL1DeploymentPath = env['JINN_MVI_L1_DEPLOYMENT'];
806
- if (env['JINN_MVI_L2_DEPLOYMENT'])
807
- merged.jinnMviL2DeploymentPath = env['JINN_MVI_L2_DEPLOYMENT'];
808
- if (env['JINN_ETHEREUM_RPC_URL'])
809
- merged.ethereumRpcUrl = env['JINN_ETHEREUM_RPC_URL'];
810
- if (env['JINN_ETHEREUM_ARCHIVE_RPC_URL'])
811
- merged.ethereumArchiveRpcUrl = env['JINN_ETHEREUM_ARCHIVE_RPC_URL'];
812
- if (env['JINN_L1_NETWORK'])
813
- merged.jinnL1Network = env['JINN_L1_NETWORK'];
814
- if (env['JINN_DISTRIBUTOR_ADDRESS'])
815
- merged.jinnDistributorAddress = env['JINN_DISTRIBUTOR_ADDRESS'];
816
- if (env['JINN_CLAIM_EMITTER_ADDRESS'])
817
- merged.jinnClaimEmitterAddress = env['JINN_CLAIM_EMITTER_ADDRESS'];
818
- if (env['JINN_MESSENGER_ADDRESS'])
819
- merged.jinnMessengerAddress = env['JINN_MESSENGER_ADDRESS'];
820
- if (env['JINN_MESSENGER_MODE'])
821
- merged.jinnMessengerMode = env['JINN_MESSENGER_MODE'];
822
- if (env['JINN_CLAIM_SUBMISSION_MODE']) {
823
- merged.jinnClaimSubmissionMode = env['JINN_CLAIM_SUBMISSION_MODE'];
824
- }
825
- if (env['JINN_CLAIM_LOOP_ENABLED'] !== undefined) {
826
- const v = env['JINN_CLAIM_LOOP_ENABLED'].trim().toLowerCase();
827
- merged.jinnClaimLoopEnabled = v === '1' || v === 'true' || v === 'yes';
828
- }
829
- if (env['JINN_CLAIM_LOOP_INTERVAL_MS'] !== undefined) {
830
- merged.jinnClaimLoopIntervalMs = parseInt(env['JINN_CLAIM_LOOP_INTERVAL_MS'], 10);
810
+ if (env['JINN_WATCHDOG_AUTO_RESTART'] !== undefined) {
811
+ const v = env['JINN_WATCHDOG_AUTO_RESTART'].trim().toLowerCase();
812
+ merged.watchdogAutoRestart = v === '1' || v === 'true' || v === 'yes';
831
813
  }
832
814
  if (env['JINN_STAKING_MODE'])
833
815
  merged.stakingMode = env['JINN_STAKING_MODE'];
@@ -851,6 +833,12 @@ export function loadConfig(configPath) {
851
833
  if (env['JINN_MIN_SAFE_ETH_WEI']) {
852
834
  merged.minSafeEthWei = env['JINN_MIN_SAFE_ETH_WEI'].trim();
853
835
  }
836
+ if (env['JINN_FAUCET_DAILY_TOPUP_CAP'] !== undefined) {
837
+ merged.faucetDailyTopupCap = parseInt(env['JINN_FAUCET_DAILY_TOPUP_CAP'], 10);
838
+ }
839
+ if (env['JINN_FAUCET_TOPUP_COOLDOWN_MS'] !== undefined) {
840
+ merged.faucetTopupCooldownMs = parseInt(env['JINN_FAUCET_TOPUP_COOLDOWN_MS'], 10);
841
+ }
854
842
  // Legacy `JINN_PREDICTION_V1_*` env vars are no longer recognised. Their
855
843
  // values now live in the launched-record's generator-config block per
856
844
  // spec/2026-05-05-solvernet-creation-and-launch.md (Decision 5 + Task 14)
@@ -889,16 +877,24 @@ export function loadConfig(configPath) {
889
877
  };
890
878
  }
891
879
  if (env['JINN_CAPTURES_LLM_PROXY_ENABLED'] !== undefined ||
892
- env['JINN_CAPTURES_LLM_PROXY_PORT'] !== undefined) {
880
+ env['JINN_CAPTURES_LLM_PROXY_PORT'] !== undefined ||
881
+ env['JINN_CAPTURES_PII_DETECTION_ENABLED'] !== undefined ||
882
+ env['JINN_CAPTURES_PII_DETECTION_MODEL'] !== undefined) {
893
883
  const prevCaptures = typeof merged['captures'] === 'object' && merged['captures'] !== null
894
884
  ? merged['captures']
895
885
  : {};
896
886
  const prevProxy = typeof prevCaptures['llmProxy'] === 'object' && prevCaptures['llmProxy'] !== null
897
887
  ? prevCaptures['llmProxy']
898
888
  : {};
889
+ const prevPii = typeof prevCaptures['piiDetection'] === 'object' && prevCaptures['piiDetection'] !== null
890
+ ? prevCaptures['piiDetection']
891
+ : {};
899
892
  const enabled = env['JINN_CAPTURES_LLM_PROXY_ENABLED'] !== undefined
900
893
  ? ['1', 'true', 'yes'].includes(env['JINN_CAPTURES_LLM_PROXY_ENABLED'].trim().toLowerCase())
901
894
  : undefined;
895
+ const piiEnabled = env['JINN_CAPTURES_PII_DETECTION_ENABLED'] !== undefined
896
+ ? ['1', 'true', 'yes'].includes(env['JINN_CAPTURES_PII_DETECTION_ENABLED'].trim().toLowerCase())
897
+ : undefined;
902
898
  merged['captures'] = {
903
899
  ...prevCaptures,
904
900
  llmProxy: {
@@ -908,6 +904,13 @@ export function loadConfig(configPath) {
908
904
  ? { port: Number.parseInt(env['JINN_CAPTURES_LLM_PROXY_PORT'], 10) }
909
905
  : {}),
910
906
  },
907
+ piiDetection: {
908
+ ...prevPii,
909
+ ...(piiEnabled !== undefined ? { enabled: piiEnabled } : {}),
910
+ ...(env['JINN_CAPTURES_PII_DETECTION_MODEL']
911
+ ? { model: env['JINN_CAPTURES_PII_DETECTION_MODEL'] }
912
+ : {}),
913
+ },
911
914
  };
912
915
  }
913
916
  if (env['JINN_ENGINE_WORKING_DIR_ROOT'] || env['JINN_ENGINE_IMPL_STATE_DIR_ROOT']) {
@@ -920,6 +923,28 @@ export function loadConfig(configPath) {
920
923
  ...(env['JINN_ENGINE_IMPL_STATE_DIR_ROOT'] ? { implStateDirRoot: env['JINN_ENGINE_IMPL_STATE_DIR_ROOT'] } : {}),
921
924
  };
922
925
  }
926
+ // JINN_STATE_DIR: single volume-aware root. Runs AFTER all per-key env
927
+ // overrides above are applied into `merged` and BEFORE safeParse — so a
928
+ // still-`undefined` per-key value means neither file nor env set it. Per-key
929
+ // precedence: explicit (file or env, already in `merged`) > <stateDir>/<subdir>
930
+ // > legacy default (filled by the schema / engine assembly when still absent).
931
+ // workingDirRoot is deliberately NOT derived — it stays ephemeral.
932
+ const stateDir = env['JINN_STATE_DIR']
933
+ ?? (typeof merged['stateDir'] === 'string' ? merged['stateDir'] : undefined);
934
+ if (stateDir) {
935
+ merged['stateDir'] = stateDir;
936
+ if (merged['earningDir'] === undefined)
937
+ merged['earningDir'] = join(stateDir, 'earning');
938
+ if (merged['dbPath'] === undefined)
939
+ merged['dbPath'] = join(stateDir, 'jinn.db');
940
+ const engineObj = (typeof merged['engine'] === 'object' && merged['engine'] !== null)
941
+ ? merged['engine']
942
+ : {};
943
+ if (engineObj['implStateDirRoot'] === undefined) {
944
+ engineObj['implStateDirRoot'] = join(stateDir, 'engine', 'impl-state');
945
+ merged['engine'] = engineObj;
946
+ }
947
+ }
923
948
  const resolvedNetwork = merged.network === 'testnet' ? 'testnet' : 'mainnet';
924
949
  // Testnet default: point discovery at the privately-operated Ponder indexer
925
950
  // (jinn-mono-280n.4), unless the operator has set their own `discovery` block.
@@ -951,12 +976,6 @@ export function loadConfig(configPath) {
951
976
  : {}),
952
977
  };
953
978
  }
954
- if (resolvedNetwork === 'testnet' && !merged.ethereumRpcUrl) {
955
- merged.ethereumRpcUrl = DEFAULT_TESTNET_ETHEREUM_RPC_URL;
956
- }
957
- if (resolvedNetwork === 'testnet' && merged.jinnClaimLoopEnabled === undefined) {
958
- merged.jinnClaimLoopEnabled = true;
959
- }
960
979
  // Keep the legacy BASE_RPC_URL override for Base mainnet only. Testnet must
961
980
  // not silently inherit a mainnet RPC from client/.env during bootstrap.
962
981
  if (env['JINN_RPC_URL']) {
@@ -1018,30 +1037,22 @@ export function loadConfig(configPath) {
1018
1037
  // shared-quota cliff of 2026-05-24 that took out every default-config
1019
1038
  // daemon at once). See #554 + the NetworkSection.tsx "shared RPC" panel for
1020
1039
  // the operator-facing pitch to bring their own key. The sibling Ethereum L1
1021
- // default (DEFAULT_TESTNET_ETHEREUM_RPC_URL above) is already publicnode —
1022
- // this keeps the two L1/L2 defaults symmetric.
1040
+ // default (DEFAULT_TESTNET_ETHEREUM_RPC_URLS above) is publicnode-headed
1041
+ // this keeps the two L1/L2 defaults symmetric. Both chains ship ≥5 free
1042
+ // providers per issue #911.
1023
1043
  const parsed = result.data;
1024
1044
  const defaultRpcUrls = parsed.network === 'testnet'
1025
1045
  ? DEFAULT_TESTNET_RPC_URLS
1026
- : ['https://mainnet.base.org'];
1046
+ : DEFAULT_MAINNET_RPC_URLS;
1027
1047
  const rpcUrlsResolved = parsed.rpcUrl !== undefined
1028
1048
  ? parseRpcUrls(parsed.rpcUrl)
1029
1049
  : [...defaultRpcUrls];
1030
1050
  const archiveRpcUrlsResolved = parsed.archiveRpcUrl !== undefined
1031
1051
  ? parseRpcUrls(parsed.archiveRpcUrl)
1032
1052
  : undefined;
1033
- const l2ProofRpcUrlsResolved = parsed.l2ProofRpcUrl !== undefined
1034
- ? parseRpcUrls(parsed.l2ProofRpcUrl)
1035
- : undefined;
1036
- const ethereumRpcUrlsResolved = parsed.ethereumRpcUrl !== undefined
1037
- ? parseRpcUrls(parsed.ethereumRpcUrl)
1038
- : undefined;
1039
- const ethereumArchiveRpcUrlsResolved = parsed.ethereumArchiveRpcUrl !== undefined
1040
- ? parseRpcUrls(parsed.ethereumArchiveRpcUrl)
1041
- : undefined;
1042
1053
  // Strip the union-typed (string | string[]) RPC fields from `parsed` — the
1043
1054
  // returned shape carries the resolved head URL plus a `*Urls` array instead.
1044
- const { rpcUrl: _rpcUrl, archiveRpcUrl: _archiveRpcUrl, l2ProofRpcUrl: _l2ProofRpcUrl, ethereumRpcUrl: _ethereumRpcUrl, ethereumArchiveRpcUrl: _ethereumArchiveRpcUrl, ...rest } = parsed;
1055
+ const { rpcUrl: _rpcUrl, archiveRpcUrl: _archiveRpcUrl, ...rest } = parsed;
1045
1056
  return {
1046
1057
  ...rest,
1047
1058
  rpcUrl: rpcUrlsResolved[0],
@@ -1049,18 +1060,6 @@ export function loadConfig(configPath) {
1049
1060
  ...(archiveRpcUrlsResolved
1050
1061
  ? { archiveRpcUrl: archiveRpcUrlsResolved[0], archiveRpcUrls: archiveRpcUrlsResolved }
1051
1062
  : {}),
1052
- ...(l2ProofRpcUrlsResolved
1053
- ? { l2ProofRpcUrl: l2ProofRpcUrlsResolved[0], l2ProofRpcUrls: l2ProofRpcUrlsResolved }
1054
- : {}),
1055
- ...(ethereumRpcUrlsResolved
1056
- ? { ethereumRpcUrl: ethereumRpcUrlsResolved[0], ethereumRpcUrls: ethereumRpcUrlsResolved }
1057
- : {}),
1058
- ...(ethereumArchiveRpcUrlsResolved
1059
- ? {
1060
- ethereumArchiveRpcUrl: ethereumArchiveRpcUrlsResolved[0],
1061
- ethereumArchiveRpcUrls: ethereumArchiveRpcUrlsResolved,
1062
- }
1063
- : {}),
1064
1063
  // parseTask assigns a UUID to any entry missing an id
1065
1064
  tasks: parsed.tasks.map(parseTask),
1066
1065
  engine: {
@@ -1103,6 +1102,7 @@ export function persistTopLevelConfigValue(key, value, configPath) {
1103
1102
  */
1104
1103
  const TRACKED_ENV_VARS = [
1105
1104
  'JINN_NETWORK',
1105
+ 'JINN_STATE_DIR',
1106
1106
  'JINN_EARNING_DIR',
1107
1107
  'JINN_DB_PATH',
1108
1108
  'JINN_POLL_INTERVAL_MS',
@@ -1116,31 +1116,21 @@ const TRACKED_ENV_VARS = [
1116
1116
  'JINN_HERMES_PATH',
1117
1117
  'JINN_HERMES_MODEL',
1118
1118
  'JINN_HERMES_PROVIDER',
1119
+ 'JINN_HERMES_BASE_URL',
1119
1120
  'JINN_HERMES_DOCTOR_TIMEOUT_MS',
1120
1121
  'JINN_RUNTIME_MODE',
1121
1122
  'JINN_PEERS',
1122
1123
  'JINN_DISCOVERY_MODE',
1123
1124
  'JINN_DISCOVERY_URL',
1124
1125
  'JINN_DISCOVERY_FALLBACK',
1126
+ 'JINN_TASK_DISCOVERY_ALLOWED_TASK_IDS',
1125
1127
  'JINN_NODE_ENDPOINT',
1126
1128
  'JINN_IPFS_REGISTRY_URL',
1127
1129
  'JINN_IPFS_GATEWAY_URL',
1128
1130
  'JINN_TESTNET_L2_DEPLOYMENT',
1129
1131
  'JINN_TESTNET_TOKEN_DEPLOYMENT',
1130
1132
  'JINN_TESTNET_MECH_DEPLOYMENT',
1131
- 'JINN_L2_PROOF_RPC_URL',
1132
- 'JINN_MVI_L1_DEPLOYMENT',
1133
- 'JINN_MVI_L2_DEPLOYMENT',
1134
- 'JINN_ETHEREUM_RPC_URL',
1135
- 'JINN_ETHEREUM_ARCHIVE_RPC_URL',
1136
- 'JINN_L1_NETWORK',
1137
- 'JINN_DISTRIBUTOR_ADDRESS',
1138
- 'JINN_CLAIM_EMITTER_ADDRESS',
1139
- 'JINN_MESSENGER_ADDRESS',
1140
- 'JINN_MESSENGER_MODE',
1141
- 'JINN_CLAIM_SUBMISSION_MODE',
1142
- 'JINN_CLAIM_LOOP_ENABLED',
1143
- 'JINN_CLAIM_LOOP_INTERVAL_MS',
1133
+ 'JINN_WATCHDOG_AUTO_RESTART',
1144
1134
  'JINN_STAKING_MODE',
1145
1135
  'JINN_TARGET_SERVICES',
1146
1136
  'JINN_DEBUG',
@@ -1148,6 +1138,8 @@ const TRACKED_ENV_VARS = [
1148
1138
  'JINN_MASTER_ETH_DAILY_WEI',
1149
1139
  'JINN_MIN_EOA_GAS_WEI',
1150
1140
  'JINN_MIN_SAFE_ETH_WEI',
1141
+ 'JINN_FAUCET_DAILY_TOPUP_CAP',
1142
+ 'JINN_FAUCET_TOPUP_COOLDOWN_MS',
1151
1143
  'JINN_IDENTITY_REGISTRY_ADDRESS',
1152
1144
  'JINN_VALIDATION_REGISTRY_ADDRESS',
1153
1145
  'JINN_REPUTATION_ENABLED',
@@ -1158,6 +1150,7 @@ const TRACKED_ENV_VARS = [
1158
1150
  'JINN_TASKS',
1159
1151
  'JINN_ENGINE_WORKING_DIR_ROOT',
1160
1152
  'JINN_ENGINE_IMPL_STATE_DIR_ROOT',
1153
+ 'JINN_SWE_REBENCH_V2_STATE_DIR',
1161
1154
  'JINN_OPERATOR_PUBLIC_ENDPOINT',
1162
1155
  'JINN_OPERATOR_DEFAULT_PRICE_USDC',
1163
1156
  'JINN_OPERATOR_DONATION_ENABLED',