@jinn-network/client 0.1.7 → 0.1.8

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 (319) hide show
  1. package/README.md +67 -1
  2. package/dist/adapters/mech/adapter.d.ts +19 -1
  3. package/dist/adapters/mech/adapter.js +130 -14
  4. package/dist/adapters/mech/adapter.js.map +1 -1
  5. package/dist/adapters/mech/contracts.d.ts +22 -1
  6. package/dist/adapters/mech/contracts.js +34 -24
  7. package/dist/adapters/mech/contracts.js.map +1 -1
  8. package/dist/adapters/mech/safe.d.ts +1 -1
  9. package/dist/adapters/mech/safe.js +5 -3
  10. package/dist/adapters/mech/safe.js.map +1 -1
  11. package/dist/adapters/mech/types.d.ts +6 -1
  12. package/dist/adapters/mech/types.js.map +1 -1
  13. package/dist/agent/operator-claude.js +8 -0
  14. package/dist/agent/operator-claude.js.map +1 -1
  15. package/dist/api/activity-events-endpoint.d.ts +14 -0
  16. package/dist/api/activity-events-endpoint.js +59 -0
  17. package/dist/api/activity-events-endpoint.js.map +1 -0
  18. package/dist/api/bootstrap-endpoint.d.ts +1 -2
  19. package/dist/api/bootstrap-endpoint.js +42 -24
  20. package/dist/api/bootstrap-endpoint.js.map +1 -1
  21. package/dist/api/codex-doctor-endpoint.d.ts +22 -5
  22. package/dist/api/codex-doctor-endpoint.js +136 -17
  23. package/dist/api/codex-doctor-endpoint.js.map +1 -1
  24. package/dist/api/debug-report-endpoint.d.ts +27 -0
  25. package/dist/api/debug-report-endpoint.js +157 -0
  26. package/dist/api/debug-report-endpoint.js.map +1 -0
  27. package/dist/api/gather-status.d.ts +33 -0
  28. package/dist/api/gather-status.js +211 -26
  29. package/dist/api/gather-status.js.map +1 -1
  30. package/dist/api/hermes-doctor-endpoint.d.ts +15 -7
  31. package/dist/api/hermes-doctor-endpoint.js +56 -19
  32. package/dist/api/hermes-doctor-endpoint.js.map +1 -1
  33. package/dist/api/launcher-status.d.ts +4 -2
  34. package/dist/api/launcher-status.js +11 -10
  35. package/dist/api/launcher-status.js.map +1 -1
  36. package/dist/api/launcher-tasks.d.ts +1 -1
  37. package/dist/api/launcher-tasks.js +12 -8
  38. package/dist/api/launcher-tasks.js.map +1 -1
  39. package/dist/api/operator-artifacts-endpoint.js +73 -6
  40. package/dist/api/operator-artifacts-endpoint.js.map +1 -1
  41. package/dist/api/portfolio-v0-build.d.ts +7 -1
  42. package/dist/api/portfolio-v0-build.js +6 -2
  43. package/dist/api/portfolio-v0-build.js.map +1 -1
  44. package/dist/api/prediction-v1-build.d.ts +6 -0
  45. package/dist/api/prediction-v1-build.js +3 -1
  46. package/dist/api/prediction-v1-build.js.map +1 -1
  47. package/dist/api/server.d.ts +17 -0
  48. package/dist/api/server.js +40 -1
  49. package/dist/api/server.js.map +1 -1
  50. package/dist/api/setup-endpoints.d.ts +0 -9
  51. package/dist/api/setup-endpoints.js +11 -153
  52. package/dist/api/setup-endpoints.js.map +1 -1
  53. package/dist/api/solvernets-endpoints.js +30 -63
  54. package/dist/api/solvernets-endpoints.js.map +1 -1
  55. package/dist/api/status-build.d.ts +115 -2
  56. package/dist/api/status-build.js +47 -11
  57. package/dist/api/status-build.js.map +1 -1
  58. package/dist/api/status-harness-rollup.d.ts +35 -0
  59. package/dist/api/status-harness-rollup.js +45 -0
  60. package/dist/api/status-harness-rollup.js.map +1 -0
  61. package/dist/api/task-runs-build.d.ts +8 -0
  62. package/dist/api/task-runs-build.js +5 -1
  63. package/dist/api/task-runs-build.js.map +1 -1
  64. package/dist/build-info.json +4 -4
  65. package/dist/build-meta.json +1 -1
  66. package/dist/captures/live-publisher.js +24 -4
  67. package/dist/captures/live-publisher.js.map +1 -1
  68. package/dist/captures/publish.d.ts +1 -1
  69. package/dist/chain-read-errors.d.ts +12 -0
  70. package/dist/chain-read-errors.js +26 -1
  71. package/dist/chain-read-errors.js.map +1 -1
  72. package/dist/cli/commands/codedigest-revert-check.d.ts +33 -0
  73. package/dist/cli/commands/codedigest-revert-check.js +249 -0
  74. package/dist/cli/commands/codedigest-revert-check.js.map +1 -0
  75. package/dist/cli/commands/solver-nets.d.ts +1 -0
  76. package/dist/cli/commands/solver-nets.js +177 -22
  77. package/dist/cli/commands/solver-nets.js.map +1 -1
  78. package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
  79. package/dist/cli/commands/solver-plugins-block.js +118 -0
  80. package/dist/cli/commands/solver-plugins-block.js.map +1 -0
  81. package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
  82. package/dist/cli/commands/solver-plugins-feedback.js +262 -0
  83. package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
  84. package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
  85. package/dist/cli/commands/solver-plugins-read.js +259 -0
  86. package/dist/cli/commands/solver-plugins-read.js.map +1 -0
  87. package/dist/cli/commands/solver-plugins.d.ts +35 -0
  88. package/dist/cli/commands/solver-plugins.js +399 -2
  89. package/dist/cli/commands/solver-plugins.js.map +1 -1
  90. package/dist/cli/commands/tasks.js +15 -2
  91. package/dist/cli/commands/tasks.js.map +1 -1
  92. package/dist/cli/index.js +2 -0
  93. package/dist/cli/index.js.map +1 -1
  94. package/dist/cli/task-native-readiness.d.ts +7 -0
  95. package/dist/cli/task-native-readiness.js +7 -5
  96. package/dist/cli/task-native-readiness.js.map +1 -1
  97. package/dist/config.d.ts +183 -232
  98. package/dist/config.js +232 -107
  99. package/dist/config.js.map +1 -1
  100. package/dist/daemon/ai-units-gate.d.ts +54 -0
  101. package/dist/daemon/ai-units-gate.js +82 -0
  102. package/dist/daemon/ai-units-gate.js.map +1 -0
  103. package/dist/daemon/creator.js +13 -0
  104. package/dist/daemon/creator.js.map +1 -1
  105. package/dist/daemon/daemon.d.ts +10 -0
  106. package/dist/daemon/daemon.js +203 -30
  107. package/dist/daemon/daemon.js.map +1 -1
  108. package/dist/daemon/gate-logger.d.ts +9 -0
  109. package/dist/daemon/gate-logger.js +2 -0
  110. package/dist/daemon/gate-logger.js.map +1 -0
  111. package/dist/daemon/jinn-claim-loop.js +22 -4
  112. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  113. package/dist/daemon/readiness-gate.d.ts +1 -4
  114. package/dist/daemon/readiness-gate.js.map +1 -1
  115. package/dist/daemon/spend-cap-gate.d.ts +40 -0
  116. package/dist/daemon/spend-cap-gate.js +46 -0
  117. package/dist/daemon/spend-cap-gate.js.map +1 -0
  118. package/dist/dashboard/assets/index-CzKxvMcU.css +32 -0
  119. package/dist/dashboard/assets/index-yVemxHot.js +351 -0
  120. package/dist/dashboard/index.html +2 -2
  121. package/dist/discovery/http.js +328 -1
  122. package/dist/discovery/http.js.map +1 -1
  123. package/dist/discovery/onchain.js +42 -4
  124. package/dist/discovery/onchain.js.map +1 -1
  125. package/dist/discovery/types.d.ts +129 -0
  126. package/dist/discovery/types.js.map +1 -1
  127. package/dist/discovery/with-fallback.js +27 -0
  128. package/dist/discovery/with-fallback.js.map +1 -1
  129. package/dist/earning/bootstrap.d.ts +8 -3
  130. package/dist/earning/bootstrap.js +36 -13
  131. package/dist/earning/bootstrap.js.map +1 -1
  132. package/dist/earning/safe-adapter.js +23 -11
  133. package/dist/earning/safe-adapter.js.map +1 -1
  134. package/dist/earning/types.d.ts +6 -6
  135. package/dist/earning/viem-clients.d.ts +11 -4
  136. package/dist/earning/viem-clients.js +14 -5
  137. package/dist/earning/viem-clients.js.map +1 -1
  138. package/dist/erc8004/identity.d.ts +19 -3
  139. package/dist/erc8004/identity.js +38 -11
  140. package/dist/erc8004/identity.js.map +1 -1
  141. package/dist/erc8004/index.d.ts +1 -1
  142. package/dist/erc8004/index.js.map +1 -1
  143. package/dist/events/types.d.ts +2 -2
  144. package/dist/harnesses/cost-estimates.d.ts +10 -31
  145. package/dist/harnesses/cost-estimates.js +11 -43
  146. package/dist/harnesses/cost-estimates.js.map +1 -1
  147. package/dist/harnesses/engine/engine.d.ts +28 -4
  148. package/dist/harnesses/engine/engine.js +103 -17
  149. package/dist/harnesses/engine/engine.js.map +1 -1
  150. package/dist/harnesses/engine/persistence.d.ts +21 -4
  151. package/dist/harnesses/engine/persistence.js +43 -6
  152. package/dist/harnesses/engine/persistence.js.map +1 -1
  153. package/dist/harnesses/engine/state.d.ts +9 -0
  154. package/dist/harnesses/engine/state.js +23 -10
  155. package/dist/harnesses/engine/state.js.map +1 -1
  156. package/dist/harnesses/impls/hermes-agent/bootstrap.js +4 -2
  157. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  158. package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +1 -1
  159. package/dist/harnesses/impls/hermes-agent/config-builder.js +4 -2
  160. package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -1
  161. package/dist/harnesses/impls/hermes-agent/harness.d.ts +14 -0
  162. package/dist/harnesses/impls/hermes-agent/harness.js +16 -2
  163. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  164. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
  165. package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
  166. package/dist/harnesses/impls/learner/adapters/claude-code.d.ts +17 -0
  167. package/dist/harnesses/impls/learner/adapters/claude-code.js +113 -14
  168. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
  169. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
  170. package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
  171. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  172. package/dist/harnesses/impls/learner/harness.d.ts +24 -0
  173. package/dist/harnesses/impls/learner/harness.js +27 -3
  174. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  175. package/dist/harnesses/impls/learner/harvest.d.ts +1 -1
  176. package/dist/harnesses/impls/learner/harvest.js +23 -5
  177. package/dist/harnesses/impls/learner/harvest.js.map +1 -1
  178. package/dist/harnesses/impls/learner/restoration-patch.d.ts +2 -2
  179. package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
  180. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
  181. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +21 -1
  182. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  183. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
  184. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
  185. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  186. package/dist/harnesses/readiness-registry.d.ts +7 -0
  187. package/dist/harnesses/readiness-registry.js +9 -0
  188. package/dist/harnesses/readiness-registry.js.map +1 -1
  189. package/dist/learner/revert-decision.d.ts +59 -0
  190. package/dist/learner/revert-decision.js +53 -0
  191. package/dist/learner/revert-decision.js.map +1 -0
  192. package/dist/learner/revert-stats.d.ts +24 -0
  193. package/dist/learner/revert-stats.js +44 -0
  194. package/dist/learner/revert-stats.js.map +1 -0
  195. package/dist/main.js +177 -104
  196. package/dist/main.js.map +1 -1
  197. package/dist/mcp/get-codedigest-reward.d.ts +13 -0
  198. package/dist/mcp/get-codedigest-reward.js +23 -0
  199. package/dist/mcp/get-codedigest-reward.js.map +1 -0
  200. package/dist/mcp/server.js +23 -0
  201. package/dist/mcp/server.js.map +1 -1
  202. package/dist/observability/debug-report-assemble.d.ts +43 -0
  203. package/dist/observability/debug-report-assemble.js +80 -0
  204. package/dist/observability/debug-report-assemble.js.map +1 -0
  205. package/dist/observability/emit-event.d.ts +9 -2
  206. package/dist/observability/emit-event.js +36 -2
  207. package/dist/observability/emit-event.js.map +1 -1
  208. package/dist/observability/file-logger.d.ts +69 -0
  209. package/dist/observability/file-logger.js +177 -0
  210. package/dist/observability/file-logger.js.map +1 -0
  211. package/dist/observability/redact-secrets.d.ts +65 -0
  212. package/dist/observability/redact-secrets.js +300 -0
  213. package/dist/observability/redact-secrets.js.map +1 -0
  214. package/dist/observability/tar.d.ts +30 -0
  215. package/dist/observability/tar.js +102 -0
  216. package/dist/observability/tar.js.map +1 -0
  217. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +18 -1
  218. package/dist/plugins/learner/skills/learn/promoter-prompt.md +72 -1
  219. package/dist/preflight/pidfile-liveness.d.ts +44 -0
  220. package/dist/preflight/pidfile-liveness.js +103 -0
  221. package/dist/preflight/pidfile-liveness.js.map +1 -0
  222. package/dist/preflight/rpc-network.d.ts +40 -0
  223. package/dist/preflight/rpc-network.js +67 -1
  224. package/dist/preflight/rpc-network.js.map +1 -1
  225. package/dist/rpc/transport.d.ts +109 -0
  226. package/dist/rpc/transport.js +220 -0
  227. package/dist/rpc/transport.js.map +1 -0
  228. package/dist/scripts/donation-consumption-acceptance.js +7 -28
  229. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  230. package/dist/scripts/swe-rebench-v2-pytest-missing.json +16 -0
  231. package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
  232. package/dist/solver-nets/prediction-operator-ux.js +56 -53
  233. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  234. package/dist/solver-nets/registry.d.ts +19 -1
  235. package/dist/solver-nets/registry.js +37 -24
  236. package/dist/solver-nets/registry.js.map +1 -1
  237. package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
  238. package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
  239. package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
  240. package/dist/solver-types/_swe-rebench-v2-state.d.ts +15 -0
  241. package/dist/solver-types/_swe-rebench-v2-state.js +19 -0
  242. package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
  243. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +116 -2
  244. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +296 -21
  245. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  246. package/dist/solver-types/swe-rebench-v2-auto.d.ts +20 -11
  247. package/dist/solver-types/swe-rebench-v2-auto.js +64 -19
  248. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  249. package/dist/solver-types/swe-rebench-v2.d.ts +8 -2
  250. package/dist/solver-types/swe-rebench-v2.js +127 -11
  251. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  252. package/dist/solvernets/daemon-init.d.ts +1 -1
  253. package/dist/solvernets/daemon-init.js +19 -4
  254. package/dist/solvernets/daemon-init.js.map +1 -1
  255. package/dist/solvernets/launched-record-dispatcher.d.ts +4 -0
  256. package/dist/solvernets/launched-record-dispatcher.js +10 -4
  257. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  258. package/dist/solvernets/registry-client-erc8004.js +11 -0
  259. package/dist/solvernets/registry-client-erc8004.js.map +1 -1
  260. package/dist/solvernets/store.d.ts +2 -2
  261. package/dist/spend/ai-units-config.d.ts +39 -0
  262. package/dist/spend/ai-units-config.js +28 -0
  263. package/dist/spend/ai-units-config.js.map +1 -0
  264. package/dist/spend/ai-units.d.ts +89 -0
  265. package/dist/spend/ai-units.js +156 -0
  266. package/dist/spend/ai-units.js.map +1 -0
  267. package/dist/spend/cost-surface-status.d.ts +12 -0
  268. package/dist/spend/cost-surface-status.js +24 -0
  269. package/dist/spend/cost-surface-status.js.map +1 -0
  270. package/dist/spend/credential.d.ts +39 -0
  271. package/dist/spend/credential.js +71 -0
  272. package/dist/spend/credential.js.map +1 -0
  273. package/dist/spend/daemon-config.d.ts +13 -0
  274. package/dist/spend/daemon-config.js +24 -0
  275. package/dist/spend/daemon-config.js.map +1 -0
  276. package/dist/spend/pricing.d.ts +16 -0
  277. package/dist/spend/pricing.js +26 -0
  278. package/dist/spend/pricing.js.map +1 -0
  279. package/dist/spend/record.d.ts +13 -0
  280. package/dist/spend/record.js +36 -0
  281. package/dist/spend/record.js.map +1 -0
  282. package/dist/spend/usage.d.ts +27 -0
  283. package/dist/spend/usage.js +113 -0
  284. package/dist/spend/usage.js.map +1 -0
  285. package/dist/store/store.d.ts +101 -0
  286. package/dist/store/store.js +304 -4
  287. package/dist/store/store.js.map +1 -1
  288. package/dist/trajectory/transcript-parsers/codex-session.d.ts +12 -6
  289. package/dist/trajectory/transcript-parsers/codex-session.js +114 -13
  290. package/dist/trajectory/transcript-parsers/codex-session.js.map +1 -1
  291. package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
  292. package/dist/trajectory/transcript-session-dirs.d.ts +18 -0
  293. package/dist/trajectory/transcript-session-dirs.js +85 -0
  294. package/dist/trajectory/transcript-session-dirs.js.map +1 -0
  295. package/dist/trajectory/transcript-watcher.d.ts +20 -1
  296. package/dist/trajectory/transcript-watcher.js +108 -32
  297. package/dist/trajectory/transcript-watcher.js.map +1 -1
  298. package/dist/tx-retry.d.ts +25 -0
  299. package/dist/tx-retry.js +95 -7
  300. package/dist/tx-retry.js.map +1 -1
  301. package/dist/types/payloads/portfolio-v0.d.ts +3 -3
  302. package/dist/types/payloads/prediction-apy-v0.d.ts +3 -3
  303. package/dist/types/payloads/prediction-v0.d.ts +12 -12
  304. package/package.json +11 -3
  305. package/plugins/learner/skills/learn/consolidator-prompt.md +18 -1
  306. package/plugins/learner/skills/learn/promoter-prompt.md +72 -1
  307. package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
  308. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
  309. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
  310. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
  311. package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
  312. package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
  313. package/plugins/swe-rebench-v2-runtime/README.md +6 -6
  314. package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
  315. package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +81 -0
  316. package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
  317. package/dist/dashboard/assets/index-blqc7eqq.css +0 -32
  318. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
  319. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
package/dist/config.d.ts CHANGED
@@ -15,45 +15,6 @@
15
15
  */
16
16
  import { z } from 'zod';
17
17
  import type { Task } from './types/task.js';
18
- export interface DefaultSolverNetConfig extends Record<string, unknown> {
19
- enabled?: boolean;
20
- solverType: string;
21
- /**
22
- * Operator-selected roles for this SolverNet. A non-empty subset of
23
- * `['solving', 'evaluating']`. Multiple roles can run concurrently — the
24
- * daemon enforces `disallowSolverSelfEvaluation` on-chain so the operator
25
- * never evaluates its own Solutions, and the on-chain
26
- * TaskActivityCheckerV3 keeps `solutionDeliveryWeight` and
27
- * `verdictDeliveryWeight` as independent additive counters.
28
- *
29
- * Launcher-side flagging is no longer expressed as an operator role —
30
- * launcher ownership is determined by the launched-record subsystem
31
- * (spec/2026-05-05-solvernet-creation-and-launch.md §11). Operator config
32
- * carries only the participation roles.
33
- *
34
- * Legacy `role: 'solving' | 'evaluating'` configs are auto-migrated to
35
- * `roles: [<role>]` by the loader (zod preprocessor on solverNets[*]).
36
- */
37
- roles?: Array<'solving' | 'evaluating'>;
38
- harness?: string;
39
- model?: string;
40
- plugins?: Array<string | {
41
- name?: string;
42
- source: string;
43
- version?: string;
44
- }>;
45
- taskGenerator?: {
46
- enabled?: boolean;
47
- };
48
- }
49
- /**
50
- * Default `solverNets` is empty per Decision 5 of
51
- * spec/2026-05-05-solvernet-creation-and-launch.md — pre-release, no
52
- * migration burden. Fresh installs no longer seed the `prediction` entry;
53
- * the operator joins SolverNets through the registry (Task 21's
54
- * `joinedSolverNets` block).
55
- */
56
- export declare const DEFAULT_SOLVER_NETS: Record<string, DefaultSolverNetConfig>;
57
18
  export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
58
19
  /**
59
20
  * Network to connect to.
@@ -64,19 +25,24 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
64
25
  */
65
26
  network: z.ZodDefault<z.ZodEnum<["mainnet", "testnet"]>>;
66
27
  /**
67
- * Base RPC endpoint.
68
- * Defaults to https://mainnet.base.org for 'mainnet' and
69
- * https://sepolia.base.org for 'testnet'. Set explicitly to override.
28
+ * Base RPC endpoint(s). Accepts either a single URL string or an array of
29
+ * URLs. When an array (or a comma-separated env var) is supplied, the
30
+ * daemon builds a viem `fallback()` chain in slot order (primary first).
31
+ * See `client/src/rpc/transport.ts` for the wrapper. Defaults to the
32
+ * publicnode+sepolia.base.org two-provider chain on testnet and the public
33
+ * `mainnet.base.org` on mainnet. Set explicitly to override.
34
+ *
35
+ * Env: JINN_RPC_URL / BASE_SEPOLIA_RPC_URL / BASE_RPC_URL (comma-separated).
70
36
  */
71
- rpcUrl: z.ZodOptional<z.ZodString>;
72
- archiveRpcUrl: z.ZodOptional<z.ZodString>;
37
+ rpcUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
38
+ archiveRpcUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
73
39
  /**
74
- * Optional L2 proof/archive RPC endpoint for canonical cross-chain canaries.
40
+ * Optional L2 proof/archive RPC endpoint(s) for canonical cross-chain canaries.
75
41
  * The daemon can use its normal rpcUrl for writes while proof construction
76
42
  * uses this endpoint for historical eth_getProof at OP dispute-game blocks.
77
- * Env: JINN_L2_PROOF_RPC_URL.
43
+ * Accepts string or array form (see rpcUrl). Env: JINN_L2_PROOF_RPC_URL.
78
44
  */
79
- l2ProofRpcUrl: z.ZodOptional<z.ZodString>;
45
+ l2ProofRpcUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
80
46
  /** Earning state directory */
81
47
  earningDir: z.ZodDefault<z.ZodString>;
82
48
  /** SQLite database path */
@@ -193,6 +159,16 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
193
159
  * backlog while proving one fresh task path.
194
160
  */
195
161
  taskDiscoveryAllowedTaskIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
162
+ /**
163
+ * Opt-in lower bound (L2 block number) for the mech adapter's canonical
164
+ * on-chain TaskCreated backlog scan. Unset → the adapter's per-chain default
165
+ * (DEFAULT_TASK_DISCOVERY_FROM_BLOCK) flows through (see gh #300). Set this to
166
+ * a recent block to bound the scan to a small recent window so the indexer
167
+ * (DiscoveryAPI.findClaimableTasks) carries the bulk of discovery — the
168
+ * canonical getLogs scan over a large/bloated history parses huge responses
169
+ * on the main thread and can stall the event loop. Env: JINN_TASK_DISCOVERY_FROM_BLOCK.
170
+ */
171
+ taskDiscoveryOnchainFromBlock: z.ZodOptional<z.ZodNumber>;
196
172
  /** This node's public HTTP endpoint (for 8004 registration) */
197
173
  nodeEndpoint: z.ZodOptional<z.ZodString>;
198
174
  /** Tasks to create and solve. Empty by default; enabled SolverNet generators fill the loop. */
@@ -970,18 +946,19 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
970
946
  */
971
947
  jinnMviL2DeploymentPath: z.ZodOptional<z.ZodString>;
972
948
  /**
973
- * RPC endpoint for the L1 governance chain (Ethereum / Sepolia) where the
974
- * JinnDistributor lives. Testnet defaults to a public Sepolia RPC; mainnet
975
- * requires an operator override when L1 submit mode is configured.
976
- * Env: JINN_ETHEREUM_RPC_URL.
949
+ * RPC endpoint(s) for the L1 governance chain (Ethereum / Sepolia) where
950
+ * the JinnDistributor lives. Accepts string or array form (see rpcUrl) and
951
+ * supports comma-separated env values. Testnet defaults to a public Sepolia
952
+ * RPC; mainnet requires an operator override when L1 submit mode is
953
+ * configured. Env: JINN_ETHEREUM_RPC_URL.
977
954
  */
978
- ethereumRpcUrl: z.ZodOptional<z.ZodString>;
955
+ ethereumRpcUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
979
956
  /**
980
- * Optional archive RPC endpoint for the L1 governance chain. Used for
981
- * historical block lookups when constructing canonical-mode proofs.
982
- * Env: JINN_ETHEREUM_ARCHIVE_RPC_URL.
957
+ * Optional archive RPC endpoint(s) for the L1 governance chain. Used for
958
+ * historical block lookups when constructing canonical-mode proofs. Accepts
959
+ * string or array form. Env: JINN_ETHEREUM_ARCHIVE_RPC_URL.
983
960
  */
984
- ethereumArchiveRpcUrl: z.ZodOptional<z.ZodString>;
961
+ ethereumArchiveRpcUrl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
985
962
  /**
986
963
  * L1 network used by the cross-chain claim loop. 'sepolia' tracks Base
987
964
  * Sepolia testnet; 'ethereum' tracks Base mainnet. Defaults to 'sepolia'
@@ -1137,97 +1114,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1137
1114
  mode?: "train" | "frozen" | undefined;
1138
1115
  }>>;
1139
1116
  /**
1140
- * SolverNet activation, Harness selection, and operator-configured runtime plugins.
1141
- *
1142
- * Each entry's `roles` is a non-empty subset of `['solving', 'evaluating']`.
1143
- * Multiple roles can run concurrently for the same SolverNet; the
1144
- * protocol-level `disallowSolverSelfEvaluation` flag prevents the operator
1145
- * from evaluating its own Solutions and the on-chain
1146
- * TaskActivityCheckerV3 tracks Solution and Verdict counters independently
1147
- * (additive into `eligibleActivityWeight`).
1148
- *
1149
- * Launcher ownership lives in the launched-record subsystem
1150
- * (spec/2026-05-05-solvernet-creation-and-launch.md §11), not in operator
1151
- * config — there is no `'launching'` operator role. Legacy entries that
1152
- * include `'launching'` in `roles` have it stripped by the preprocessor so
1153
- * older config files keep loading.
1154
- *
1155
- * Backwards-compat: a legacy `role: 'solving' | 'evaluating'` field is
1156
- * auto-promoted to `roles: [<role>]` by the zod preprocessor below so
1157
- * existing `~/.jinn-client/config.json` files keep loading without an
1158
- * operator migration step.
1159
- */
1160
- solverNets: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
1161
- enabled: z.ZodDefault<z.ZodBoolean>;
1162
- solverType: z.ZodString;
1163
- roles: z.ZodEffects<z.ZodDefault<z.ZodArray<z.ZodEnum<["solving", "evaluating"]>, "many">>, ("solving" | "evaluating")[], ("solving" | "evaluating")[] | undefined>;
1164
- harness: z.ZodDefault<z.ZodEffects<z.ZodString, string, string>>;
1165
- model: z.ZodOptional<z.ZodString>;
1166
- plugins: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
1167
- name: z.ZodOptional<z.ZodString>;
1168
- source: z.ZodString;
1169
- version: z.ZodOptional<z.ZodString>;
1170
- }, "strip", z.ZodTypeAny, {
1171
- source: string;
1172
- name?: string | undefined;
1173
- version?: string | undefined;
1174
- }, {
1175
- source: string;
1176
- name?: string | undefined;
1177
- version?: string | undefined;
1178
- }>]>, "many">>;
1179
- taskGenerator: z.ZodDefault<z.ZodObject<{
1180
- enabled: z.ZodDefault<z.ZodBoolean>;
1181
- }, "strip", z.ZodTypeAny, {
1182
- enabled: boolean;
1183
- }, {
1184
- enabled?: boolean | undefined;
1185
- }>>;
1186
- }, "strip", z.ZodTypeAny, {
1187
- solverType: string;
1188
- enabled: boolean;
1189
- roles: ("solving" | "evaluating")[];
1190
- harness: string;
1191
- plugins: (string | {
1192
- source: string;
1193
- name?: string | undefined;
1194
- version?: string | undefined;
1195
- })[];
1196
- taskGenerator: {
1197
- enabled: boolean;
1198
- };
1199
- model?: string | undefined;
1200
- }, {
1201
- solverType: string;
1202
- enabled?: boolean | undefined;
1203
- roles?: ("solving" | "evaluating")[] | undefined;
1204
- harness?: string | undefined;
1205
- model?: string | undefined;
1206
- plugins?: (string | {
1207
- source: string;
1208
- name?: string | undefined;
1209
- version?: string | undefined;
1210
- })[] | undefined;
1211
- taskGenerator?: {
1212
- enabled?: boolean | undefined;
1213
- } | undefined;
1214
- }>, {
1215
- solverType: string;
1216
- enabled: boolean;
1217
- roles: ("solving" | "evaluating")[];
1218
- harness: string;
1219
- plugins: (string | {
1220
- source: string;
1221
- name?: string | undefined;
1222
- version?: string | undefined;
1223
- })[];
1224
- taskGenerator: {
1225
- enabled: boolean;
1226
- };
1227
- model?: string | undefined;
1228
- }, unknown>>>;
1229
- /**
1230
- * Manifest-keyed joined SolverNets (Task 21).
1117
+ * Manifest-keyed joined SolverNets.
1231
1118
  *
1232
1119
  * Spec: spec/2026-05-05-solvernet-creation-and-launch.md §12.
1233
1120
  *
@@ -1236,10 +1123,10 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1236
1123
  * (CIDv0 / CIDv1) — the only stable identifier that maps back to a
1237
1124
  * launched-instance authority across launchers.
1238
1125
  *
1239
- * Kept structurally separate from legacy `solverNets` for now. The daemon
1240
- * narrows this block into runtime SolverNet registry entries on restart, and
1241
- * Task 22 collapses both branches into a single manifest-keyed shape once
1242
- * the legacy block is fully drained.
1126
+ * The daemon narrows this block into runtime SolverNet registry entries on
1127
+ * restart. Legacy short-name-keyed `solverNets` blocks on operator config
1128
+ * files are auto-migrated into synthetic `legacy:<short-name>`-keyed
1129
+ * entries at load time (see `migrateLegacySolverNets`).
1243
1130
  */
1244
1131
  joinedSolverNets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
1245
1132
  manifestCid: z.ZodString;
@@ -1260,28 +1147,28 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1260
1147
  plugins: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1261
1148
  disabledDefaultPlugins: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1262
1149
  }, "strip", z.ZodTypeAny, {
1150
+ manifestCid: string;
1263
1151
  roles: ("solver" | "evaluator")[];
1264
1152
  plugins: string[];
1265
- manifestCid: string;
1266
1153
  disabledDefaultPlugins: string[];
1267
1154
  name?: string | undefined;
1268
1155
  harness?: string | undefined;
1269
- model?: string | undefined;
1270
1156
  contract?: {
1271
1157
  id: string;
1272
1158
  version: string;
1273
1159
  } | undefined;
1160
+ model?: string | undefined;
1274
1161
  }, {
1275
- roles: ("solver" | "evaluator")[];
1276
1162
  manifestCid: string;
1163
+ roles: ("solver" | "evaluator")[];
1277
1164
  name?: string | undefined;
1278
1165
  harness?: string | undefined;
1279
- model?: string | undefined;
1280
- plugins?: string[] | undefined;
1281
1166
  contract?: {
1282
1167
  id: string;
1283
1168
  version: string;
1284
1169
  } | undefined;
1170
+ model?: string | undefined;
1171
+ plugins?: string[] | undefined;
1285
1172
  disabledDefaultPlugins?: string[] | undefined;
1286
1173
  }>>>;
1287
1174
  /**
@@ -1438,10 +1325,36 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1438
1325
  * Env: JINN_REPUTATION_ENABLED
1439
1326
  */
1440
1327
  reputationEnabled: z.ZodDefault<z.ZodBoolean>;
1328
+ /**
1329
+ * Per-credential daily spend caps (USD). Keys are credential identifiers
1330
+ * (e.g. `'anthropic:api-key'`); values are positive numbers representing
1331
+ * the maximum USD spend per day for that credential.
1332
+ *
1333
+ * `JINN_SPEND_CAP_USD` (env-only, consumed directly by the spend-budget
1334
+ * subsystem in Task 9) is tracked for provenance in TRACKED_ENV_VARS below
1335
+ * but is NOT a config-file field and has no entry in this schema.
1336
+ */
1337
+ spendCaps: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
1338
+ /**
1339
+ * Operator-local SolverPlugin trust state.
1340
+ *
1341
+ * `blockedCids` is the list of plug-in CIDs the operator has chosen to
1342
+ * refuse to load — populated by `jinn solver-plugins block <cid>` and read
1343
+ * at daemon startup. The block list complements the on-chain
1344
+ * `giveFeedback(score=0)` write (which is the public-trust signal); the
1345
+ * local list is the operator's own refusal to execute, applied even when
1346
+ * the network write fails. File-managed only — no env override.
1347
+ *
1348
+ * See spec/2026-05-26-117-design.md "Failure modes" and "Local-only effects".
1349
+ */
1350
+ solverPlugins: z.ZodDefault<z.ZodObject<{
1351
+ blockedCids: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1352
+ }, "strip", z.ZodTypeAny, {
1353
+ blockedCids: string[];
1354
+ }, {
1355
+ blockedCids?: string[] | undefined;
1356
+ }>>;
1441
1357
  }, "strip", z.ZodTypeAny, {
1442
- harness: {
1443
- mode: "train" | "frozen";
1444
- };
1445
1358
  network: "testnet" | "mainnet";
1446
1359
  earningDir: string;
1447
1360
  dbPath: string;
@@ -1536,21 +1449,9 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1536
1449
  stakingMode: "standard" | "self-bond";
1537
1450
  targetServices: number;
1538
1451
  debug: boolean;
1539
- solverNets: Record<string, {
1540
- solverType: string;
1541
- enabled: boolean;
1542
- roles: ("solving" | "evaluating")[];
1543
- harness: string;
1544
- plugins: (string | {
1545
- source: string;
1546
- name?: string | undefined;
1547
- version?: string | undefined;
1548
- })[];
1549
- taskGenerator: {
1550
- enabled: boolean;
1551
- };
1552
- model?: string | undefined;
1553
- }>;
1452
+ harness: {
1453
+ mode: "train" | "frozen";
1454
+ };
1554
1455
  captures: {
1555
1456
  llmProxy: {
1556
1457
  enabled: boolean;
@@ -1559,9 +1460,12 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1559
1460
  };
1560
1461
  runLegacyMigrations: boolean;
1561
1462
  reputationEnabled: boolean;
1562
- rpcUrl?: string | undefined;
1563
- archiveRpcUrl?: string | undefined;
1564
- l2ProofRpcUrl?: string | undefined;
1463
+ solverPlugins: {
1464
+ blockedCids: string[];
1465
+ };
1466
+ rpcUrl?: string | string[] | undefined;
1467
+ archiveRpcUrl?: string | string[] | undefined;
1468
+ l2ProofRpcUrl?: string | string[] | undefined;
1565
1469
  apiBindHost?: string | undefined;
1566
1470
  hermesPath?: string | undefined;
1567
1471
  hermesModel?: string | undefined;
@@ -1574,6 +1478,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1574
1478
  fallbackToOnchain?: boolean | undefined;
1575
1479
  } | undefined;
1576
1480
  taskDiscoveryAllowedTaskIds?: string[] | undefined;
1481
+ taskDiscoveryOnchainFromBlock?: number | undefined;
1577
1482
  nodeEndpoint?: string | undefined;
1578
1483
  testnetL2DeploymentPath?: string | undefined;
1579
1484
  testnetL2TokenDeploymentPath?: string | undefined;
@@ -1581,8 +1486,8 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1581
1486
  testnetStolasDeploymentPath?: string | undefined;
1582
1487
  jinnMviL1DeploymentPath?: string | undefined;
1583
1488
  jinnMviL2DeploymentPath?: string | undefined;
1584
- ethereumRpcUrl?: string | undefined;
1585
- ethereumArchiveRpcUrl?: string | undefined;
1489
+ ethereumRpcUrl?: string | string[] | undefined;
1490
+ ethereumArchiveRpcUrl?: string | string[] | undefined;
1586
1491
  jinnDistributorAddress?: string | undefined;
1587
1492
  jinnClaimEmitterAddress?: string | undefined;
1588
1493
  jinnMessengerAddress?: string | undefined;
@@ -1600,17 +1505,17 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1600
1505
  }[] | undefined;
1601
1506
  } | undefined;
1602
1507
  joinedSolverNets?: Record<string, {
1508
+ manifestCid: string;
1603
1509
  roles: ("solver" | "evaluator")[];
1604
1510
  plugins: string[];
1605
- manifestCid: string;
1606
1511
  disabledDefaultPlugins: string[];
1607
1512
  name?: string | undefined;
1608
1513
  harness?: string | undefined;
1609
- model?: string | undefined;
1610
1514
  contract?: {
1611
1515
  id: string;
1612
1516
  version: string;
1613
1517
  } | undefined;
1518
+ model?: string | undefined;
1614
1519
  }> | undefined;
1615
1520
  trustedImplSigners?: {
1616
1521
  publicKey: string;
@@ -1631,14 +1536,12 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1631
1536
  } | undefined;
1632
1537
  identityRegistryAddress?: string | undefined;
1633
1538
  validationRegistryAddress?: string | undefined;
1539
+ spendCaps?: Record<string, number> | undefined;
1634
1540
  }, {
1635
- harness?: {
1636
- mode?: "train" | "frozen" | undefined;
1637
- } | undefined;
1638
1541
  network?: "testnet" | "mainnet" | undefined;
1639
- rpcUrl?: string | undefined;
1640
- archiveRpcUrl?: string | undefined;
1641
- l2ProofRpcUrl?: string | undefined;
1542
+ rpcUrl?: string | string[] | undefined;
1543
+ archiveRpcUrl?: string | string[] | undefined;
1544
+ l2ProofRpcUrl?: string | string[] | undefined;
1642
1545
  earningDir?: string | undefined;
1643
1546
  dbPath?: string | undefined;
1644
1547
  pollIntervalMs?: number | undefined;
@@ -1664,6 +1567,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1664
1567
  fallbackToOnchain?: boolean | undefined;
1665
1568
  } | undefined;
1666
1569
  taskDiscoveryAllowedTaskIds?: string[] | undefined;
1570
+ taskDiscoveryOnchainFromBlock?: number | undefined;
1667
1571
  nodeEndpoint?: string | undefined;
1668
1572
  tasks?: {
1669
1573
  id?: string | undefined;
@@ -1783,8 +1687,8 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1783
1687
  testnetStolasDeploymentPath?: string | undefined;
1784
1688
  jinnMviL1DeploymentPath?: string | undefined;
1785
1689
  jinnMviL2DeploymentPath?: string | undefined;
1786
- ethereumRpcUrl?: string | undefined;
1787
- ethereumArchiveRpcUrl?: string | undefined;
1690
+ ethereumRpcUrl?: string | string[] | undefined;
1691
+ ethereumArchiveRpcUrl?: string | string[] | undefined;
1788
1692
  jinnL1Network?: "sepolia" | "ethereum" | undefined;
1789
1693
  jinnDistributorAddress?: string | undefined;
1790
1694
  jinnClaimEmitterAddress?: string | undefined;
@@ -1809,18 +1713,20 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1809
1713
  version?: string | undefined;
1810
1714
  }[] | undefined;
1811
1715
  } | undefined;
1812
- solverNets?: Record<string, unknown> | undefined;
1716
+ harness?: {
1717
+ mode?: "train" | "frozen" | undefined;
1718
+ } | undefined;
1813
1719
  joinedSolverNets?: Record<string, {
1814
- roles: ("solver" | "evaluator")[];
1815
1720
  manifestCid: string;
1721
+ roles: ("solver" | "evaluator")[];
1816
1722
  name?: string | undefined;
1817
1723
  harness?: string | undefined;
1818
- model?: string | undefined;
1819
- plugins?: string[] | undefined;
1820
1724
  contract?: {
1821
1725
  id: string;
1822
1726
  version: string;
1823
1727
  } | undefined;
1728
+ model?: string | undefined;
1729
+ plugins?: string[] | undefined;
1824
1730
  disabledDefaultPlugins?: string[] | undefined;
1825
1731
  }> | undefined;
1826
1732
  trustedImplSigners?: {
@@ -1850,10 +1756,11 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1850
1756
  identityRegistryAddress?: string | undefined;
1851
1757
  validationRegistryAddress?: string | undefined;
1852
1758
  reputationEnabled?: boolean | undefined;
1759
+ spendCaps?: Record<string, number> | undefined;
1760
+ solverPlugins?: {
1761
+ blockedCids?: string[] | undefined;
1762
+ } | undefined;
1853
1763
  }>, {
1854
- harness: {
1855
- mode: "train" | "frozen";
1856
- };
1857
1764
  network: "testnet" | "mainnet";
1858
1765
  earningDir: string;
1859
1766
  dbPath: string;
@@ -1948,21 +1855,9 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1948
1855
  stakingMode: "standard" | "self-bond";
1949
1856
  targetServices: number;
1950
1857
  debug: boolean;
1951
- solverNets: Record<string, {
1952
- solverType: string;
1953
- enabled: boolean;
1954
- roles: ("solving" | "evaluating")[];
1955
- harness: string;
1956
- plugins: (string | {
1957
- source: string;
1958
- name?: string | undefined;
1959
- version?: string | undefined;
1960
- })[];
1961
- taskGenerator: {
1962
- enabled: boolean;
1963
- };
1964
- model?: string | undefined;
1965
- }>;
1858
+ harness: {
1859
+ mode: "train" | "frozen";
1860
+ };
1966
1861
  captures: {
1967
1862
  llmProxy: {
1968
1863
  enabled: boolean;
@@ -1971,9 +1866,12 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1971
1866
  };
1972
1867
  runLegacyMigrations: boolean;
1973
1868
  reputationEnabled: boolean;
1974
- rpcUrl?: string | undefined;
1975
- archiveRpcUrl?: string | undefined;
1976
- l2ProofRpcUrl?: string | undefined;
1869
+ solverPlugins: {
1870
+ blockedCids: string[];
1871
+ };
1872
+ rpcUrl?: string | string[] | undefined;
1873
+ archiveRpcUrl?: string | string[] | undefined;
1874
+ l2ProofRpcUrl?: string | string[] | undefined;
1977
1875
  apiBindHost?: string | undefined;
1978
1876
  hermesPath?: string | undefined;
1979
1877
  hermesModel?: string | undefined;
@@ -1986,6 +1884,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1986
1884
  fallbackToOnchain?: boolean | undefined;
1987
1885
  } | undefined;
1988
1886
  taskDiscoveryAllowedTaskIds?: string[] | undefined;
1887
+ taskDiscoveryOnchainFromBlock?: number | undefined;
1989
1888
  nodeEndpoint?: string | undefined;
1990
1889
  testnetL2DeploymentPath?: string | undefined;
1991
1890
  testnetL2TokenDeploymentPath?: string | undefined;
@@ -1993,8 +1892,8 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
1993
1892
  testnetStolasDeploymentPath?: string | undefined;
1994
1893
  jinnMviL1DeploymentPath?: string | undefined;
1995
1894
  jinnMviL2DeploymentPath?: string | undefined;
1996
- ethereumRpcUrl?: string | undefined;
1997
- ethereumArchiveRpcUrl?: string | undefined;
1895
+ ethereumRpcUrl?: string | string[] | undefined;
1896
+ ethereumArchiveRpcUrl?: string | string[] | undefined;
1998
1897
  jinnDistributorAddress?: string | undefined;
1999
1898
  jinnClaimEmitterAddress?: string | undefined;
2000
1899
  jinnMessengerAddress?: string | undefined;
@@ -2012,17 +1911,17 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
2012
1911
  }[] | undefined;
2013
1912
  } | undefined;
2014
1913
  joinedSolverNets?: Record<string, {
1914
+ manifestCid: string;
2015
1915
  roles: ("solver" | "evaluator")[];
2016
1916
  plugins: string[];
2017
- manifestCid: string;
2018
1917
  disabledDefaultPlugins: string[];
2019
1918
  name?: string | undefined;
2020
1919
  harness?: string | undefined;
2021
- model?: string | undefined;
2022
1920
  contract?: {
2023
1921
  id: string;
2024
1922
  version: string;
2025
1923
  } | undefined;
1924
+ model?: string | undefined;
2026
1925
  }> | undefined;
2027
1926
  trustedImplSigners?: {
2028
1927
  publicKey: string;
@@ -2043,14 +1942,12 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
2043
1942
  } | undefined;
2044
1943
  identityRegistryAddress?: string | undefined;
2045
1944
  validationRegistryAddress?: string | undefined;
1945
+ spendCaps?: Record<string, number> | undefined;
2046
1946
  }, {
2047
- harness?: {
2048
- mode?: "train" | "frozen" | undefined;
2049
- } | undefined;
2050
1947
  network?: "testnet" | "mainnet" | undefined;
2051
- rpcUrl?: string | undefined;
2052
- archiveRpcUrl?: string | undefined;
2053
- l2ProofRpcUrl?: string | undefined;
1948
+ rpcUrl?: string | string[] | undefined;
1949
+ archiveRpcUrl?: string | string[] | undefined;
1950
+ l2ProofRpcUrl?: string | string[] | undefined;
2054
1951
  earningDir?: string | undefined;
2055
1952
  dbPath?: string | undefined;
2056
1953
  pollIntervalMs?: number | undefined;
@@ -2076,6 +1973,7 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
2076
1973
  fallbackToOnchain?: boolean | undefined;
2077
1974
  } | undefined;
2078
1975
  taskDiscoveryAllowedTaskIds?: string[] | undefined;
1976
+ taskDiscoveryOnchainFromBlock?: number | undefined;
2079
1977
  nodeEndpoint?: string | undefined;
2080
1978
  tasks?: {
2081
1979
  id?: string | undefined;
@@ -2195,8 +2093,8 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
2195
2093
  testnetStolasDeploymentPath?: string | undefined;
2196
2094
  jinnMviL1DeploymentPath?: string | undefined;
2197
2095
  jinnMviL2DeploymentPath?: string | undefined;
2198
- ethereumRpcUrl?: string | undefined;
2199
- ethereumArchiveRpcUrl?: string | undefined;
2096
+ ethereumRpcUrl?: string | string[] | undefined;
2097
+ ethereumArchiveRpcUrl?: string | string[] | undefined;
2200
2098
  jinnL1Network?: "sepolia" | "ethereum" | undefined;
2201
2099
  jinnDistributorAddress?: string | undefined;
2202
2100
  jinnClaimEmitterAddress?: string | undefined;
@@ -2221,18 +2119,20 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
2221
2119
  version?: string | undefined;
2222
2120
  }[] | undefined;
2223
2121
  } | undefined;
2224
- solverNets?: Record<string, unknown> | undefined;
2122
+ harness?: {
2123
+ mode?: "train" | "frozen" | undefined;
2124
+ } | undefined;
2225
2125
  joinedSolverNets?: Record<string, {
2226
- roles: ("solver" | "evaluator")[];
2227
2126
  manifestCid: string;
2127
+ roles: ("solver" | "evaluator")[];
2228
2128
  name?: string | undefined;
2229
2129
  harness?: string | undefined;
2230
- model?: string | undefined;
2231
- plugins?: string[] | undefined;
2232
2130
  contract?: {
2233
2131
  id: string;
2234
2132
  version: string;
2235
2133
  } | undefined;
2134
+ model?: string | undefined;
2135
+ plugins?: string[] | undefined;
2236
2136
  disabledDefaultPlugins?: string[] | undefined;
2237
2137
  }> | undefined;
2238
2138
  trustedImplSigners?: {
@@ -2262,10 +2162,33 @@ export declare const JinnConfigSchema: z.ZodEffects<z.ZodObject<{
2262
2162
  identityRegistryAddress?: string | undefined;
2263
2163
  validationRegistryAddress?: string | undefined;
2264
2164
  reputationEnabled?: boolean | undefined;
2165
+ spendCaps?: Record<string, number> | undefined;
2166
+ solverPlugins?: {
2167
+ blockedCids?: string[] | undefined;
2168
+ } | undefined;
2265
2169
  }>;
2266
- /** JinnConfig with rpcUrl guaranteed to be resolved (never undefined) and tasks with id always assigned. */
2267
- export type JinnConfig = Omit<z.infer<typeof JinnConfigSchema>, 'rpcUrl' | 'tasks' | 'engine'> & {
2170
+ /**
2171
+ * JinnConfig with rpcUrl guaranteed to be resolved (never undefined) and tasks
2172
+ * with id always assigned.
2173
+ *
2174
+ * `rpcUrl` is the head of the fallback chain (the slot-0 URL) and is kept as
2175
+ * a `string` for display continuity — the ~30 places that log/display
2176
+ * `config.rpcUrl` (provenance, error formatting, `[main] daemon starting on …`)
2177
+ * keep working unchanged. The full chain lives in `rpcUrls: readonly string[]`,
2178
+ * which is what `buildFallbackTransport()` consumes. Same shape for the L1
2179
+ * (ethereum) and optional archive/proof variants.
2180
+ */
2181
+ export type JinnConfig = Omit<z.infer<typeof JinnConfigSchema>, 'rpcUrl' | 'archiveRpcUrl' | 'l2ProofRpcUrl' | 'ethereumRpcUrl' | 'ethereumArchiveRpcUrl' | 'tasks' | 'engine'> & {
2268
2182
  rpcUrl: string;
2183
+ rpcUrls: readonly string[];
2184
+ archiveRpcUrl?: string;
2185
+ archiveRpcUrls?: readonly string[];
2186
+ l2ProofRpcUrl?: string;
2187
+ l2ProofRpcUrls?: readonly string[];
2188
+ ethereumRpcUrl?: string;
2189
+ ethereumRpcUrls?: readonly string[];
2190
+ ethereumArchiveRpcUrl?: string;
2191
+ ethereumArchiveRpcUrls?: readonly string[];
2269
2192
  tasks: Task[];
2270
2193
  engine: {
2271
2194
  workingDirRoot: string;
@@ -2282,12 +2205,40 @@ export declare const DEFAULT_CONFIG_PATH: string;
2282
2205
  */
2283
2206
  export declare const DEFAULT_TESTNET_DISCOVERY_URL = "https://jinn-indexer-production.up.railway.app";
2284
2207
  export declare const DEFAULT_TESTNET_ETHEREUM_RPC_URL = "https://ethereum-sepolia-rpc.publicnode.com";
2208
+ /**
2209
+ * Default fallback chain for the L2 measurement chain (Base Sepolia) on
2210
+ * testnet. Per AC2 of issue #592:
2211
+ * slot 0 — `https://base-sepolia.publicnode.com` (no-auth, 50k-block
2212
+ * getLogs cap, no shared-quota cliff).
2213
+ * slot 1 — `https://sepolia.base.org` (free public Coinbase endpoint,
2214
+ * 2k-block cap; last-resort backup).
2215
+ * Operators are encouraged to prepend a paid primary key (Alchemy, Tenderly,
2216
+ * etc.) via `rpcUrl` config or `JINN_RPC_URL` / `BASE_SEPOLIA_RPC_URL` env.
2217
+ */
2218
+ export declare const DEFAULT_TESTNET_RPC_URLS: readonly string[];
2285
2219
  export type ConfigLoadErrorCode = 'config_file_not_found' | 'config_json_invalid' | 'tasks_file_not_found' | 'tasks_json_invalid' | 'config_invalid';
2286
2220
  export declare class ConfigLoadError extends Error {
2287
2221
  readonly code: ConfigLoadErrorCode;
2288
2222
  readonly details?: Record<string, unknown>;
2289
2223
  constructor(code: ConfigLoadErrorCode, message: string, details?: Record<string, unknown>);
2290
2224
  }
2225
+ /**
2226
+ * Translate any legacy short-name-keyed `solverNets` block on the raw parsed
2227
+ * config into manifest-keyed `joinedSolverNets` entries with synthetic
2228
+ * `legacy:<short-name>` keys.
2229
+ *
2230
+ * This is the auto-migration path for operators upgrading past issue #421.
2231
+ * The runtime claim filter remains manifest-digest gated, so synthetic-keyed
2232
+ * entries don't change task eligibility — they exist purely so the diagnostic
2233
+ * surfaces (Overview SOLVING-ON eyebrow, prediction-operator-status) keep
2234
+ * showing the operator's previous SolverNets until they re-join via the SPA.
2235
+ *
2236
+ * Returns the number of legacy entries migrated. Idempotent — calling on an
2237
+ * already-migrated raw config is a no-op.
2238
+ *
2239
+ * @param raw — the JSON-parsed config file contents (mutated in place).
2240
+ */
2241
+ export declare function migrateLegacySolverNets(raw: Record<string, unknown>): number;
2291
2242
  /**
2292
2243
  * Load config with resolution: env > config file > defaults.
2293
2244
  *