@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/main.js CHANGED
@@ -43,8 +43,10 @@ import { buildEnvelope, emitEnvelope } from './errors/envelope.js';
43
43
  import { clearBootstrapError, persistBootstrapError, } from './errors/persisted-bootstrap-error.js';
44
44
  import { emitStructured } from './events/emitter.js';
45
45
  import { applyPidfileLivenessGate } from './preflight/pidfile-liveness.js';
46
+ import { applyDeploymentReadinessGate } from './preflight/deployment-readiness.js';
47
+ import { detectAuthContext } from './preflight/claude-auth.js';
46
48
  import { FleetBootstrapper, recoverEvictedService as recoverEvictedServiceFn } from './earning/bootstrap.js';
47
- import { DEFAULT_TESTNET_ARTIFACTS, applyChainGasOverrides, getChainConfig, loadJinnMviConfig } from './earning/contracts.js';
49
+ import { applyChainGasOverrides, getChainConfig } from './earning/contracts.js';
48
50
  import { runLegacyAgentIdMigration } from './earning/migrate-agent-id.js';
49
51
  import { FleetStateStore } from './earning/store.js';
50
52
  import { isOperationalServiceStep, } from './earning/types.js';
@@ -55,12 +57,12 @@ import { Daemon } from './daemon/daemon.js';
55
57
  import { buildSpendCapConfig } from './spend/daemon-config.js';
56
58
  import { buildAiUnitsConfig } from './spend/ai-units-config.js';
57
59
  import { REFERENCE_CEILING } from './spend/ai-units.js';
58
- import { buildJinnClaimLoopConfig, shouldWireJinnClaimL1Signer, } from './daemon/jinn-claim-loop-wiring.js';
59
- import { createJinnPublicClient, createJinnWalletClient, createJinnL1PublicClient, createJinnL1WalletClient } from './earning/viem-clients.js';
60
+ import { createJinnPublicClient, createJinnWalletClient } from './earning/viem-clients.js';
60
61
  import { privateKeyToAccount } from 'viem/accounts';
61
62
  import { getAddress } from 'viem';
62
63
  import { DEFAULT_DISABLED_HARNESSES, DEFAULT_HARNESS, HarnessRegistry, } from './harnesses/engine/registry.js';
63
- import { joinedSolverNetsViewFromConfig } from './harnesses/engine/engine.js';
64
+ import { createMutableJoinedSolverNetsView } from './harnesses/engine/engine.js';
65
+ import { createJoinApplier } from './daemon/join-applier.js';
64
66
  import { buildHarnesses } from './harnesses/impls/index.js';
65
67
  import { loadExternalImpl } from './harnesses/external-impls/index.js';
66
68
  import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, harnessStateDirName } from './harnesses/names.js';
@@ -78,6 +80,8 @@ import { CredentialScrubProcessor } from './trajectory/processors/credential-scr
78
80
  import { TranscriptContentScrubProcessor } from './trajectory/processors/transcript-content-scrub.js';
79
81
  import { IdentityScrubProcessor } from './trajectory/processors/identity-scrub.js';
80
82
  import { PathScrubProcessor } from './trajectory/processors/path-scrub.js';
83
+ import { buildScrubPipeline } from './trajectory/scrub/build.js';
84
+ import { maybeBuildPiiDetector } from './trajectory/scrub/pii-build.js';
81
85
  import { SqliteExporterProcessor } from './trajectory/processors/sqlite-exporter.js';
82
86
  import { ClaudeCodeJsonlParser } from './trajectory/transcript-parsers/claude-code-jsonl.js';
83
87
  import { CodexSessionParser } from './trajectory/transcript-parsers/codex-session.js';
@@ -161,6 +165,11 @@ let activeClaudePath = config.claudePath ?? 'claude';
161
165
  const selectClaudePath = (claudePath) => {
162
166
  activeClaudePath = claudePath;
163
167
  config.claudePath = claudePath;
168
+ // Harmless no-op when the embedded agent is disabled
169
+ // (`embeddedAgentEnabled` is false at this point): the agent surface
170
+ // that consumes this path isn't mounted, so the update has nothing to
171
+ // propagate to. Called unconditionally to keep the path in sync
172
+ // whenever the agent IS enabled.
164
173
  updateAgentClaudePath(claudePath);
165
174
  };
166
175
  const NETWORK_CHAIN = config.network === 'testnet' ? 'base-sepolia' : 'base';
@@ -173,33 +182,8 @@ const CHAIN_CONFIG = applyChainGasOverrides(getChainConfig(NETWORK_CHAIN, {
173
182
  minEoaGasWei: config.minEoaGasWei,
174
183
  minSafeEthWei: config.minSafeEthWei,
175
184
  });
176
- const MESSENGER_MODE_EXPLICIT = process.env['JINN_MESSENGER_MODE'] !== undefined ||
177
- configFileHasTopLevelKey(CONFIG_PATH, 'jinnMessengerMode');
178
- const JINN_MVI_CONFIG = loadJinnMviConfig({
179
- l1ArtifactPath: config.jinnMviL1DeploymentPath ??
180
- (config.network === 'testnet' ? DEFAULT_TESTNET_ARTIFACTS.jinnMviL1 : undefined),
181
- l2ArtifactPath: config.jinnMviL2DeploymentPath ??
182
- (config.network === 'testnet' ? DEFAULT_TESTNET_ARTIFACTS.jinnMviL2 : undefined),
183
- distributorAddress: config.jinnDistributorAddress,
184
- messengerAddress: config.jinnMessengerAddress,
185
- claimEmitterAddress: config.jinnClaimEmitterAddress,
186
- messengerMode: MESSENGER_MODE_EXPLICIT ? config.jinnMessengerMode : undefined,
187
- });
188
- const JINN_CLAIM_MESSENGER_MODE = JINN_MVI_CONFIG.messengerMode ?? config.jinnMessengerMode;
189
185
  const MARKETPLACE_ADDRESS = CHAIN_CONFIG.mechMarketplace;
190
186
  const ROUTER_ADDRESS = (CHAIN_CONFIG.jinnRouter ?? '0xfFa7118A3D820cd4E820010837D65FAfF463181B');
191
- function configFileHasTopLevelKey(configPath, key) {
192
- const filePath = configPath ?? join(process.env['HOME'] ?? '', '.jinn-client', 'config.json');
193
- if (!filePath || !existsSync(filePath))
194
- return false;
195
- try {
196
- const raw = JSON.parse(readFileSync(filePath, 'utf8'));
197
- return !!raw && typeof raw === 'object' && Object.prototype.hasOwnProperty.call(raw, key);
198
- }
199
- catch {
200
- return false;
201
- }
202
- }
203
187
  class EnsurePendingCaptureProcessor {
204
188
  captures;
205
189
  constructor(captures) {
@@ -700,10 +684,6 @@ export async function main() {
700
684
  // fail-loud on chain-id mismatch against the head provider.
701
685
  await probeFallbackChain(config.rpcUrls, config.network, 'L2');
702
686
  console.error(summarizeFallbackChain('L2', config.rpcUrls));
703
- if (config.jinnClaimLoopEnabled && config.ethereumRpcUrls) {
704
- await probeFallbackChain(config.ethereumRpcUrls, config.network, 'L1');
705
- console.error(summarizeFallbackChain('L1', config.ethereumRpcUrls));
706
- }
707
687
  const portPreflight = await checkApiPortAvailable(config.apiPort);
708
688
  if (!portPreflight.ok) {
709
689
  emitEnvelope({
@@ -858,6 +838,13 @@ export async function main() {
858
838
  // builder-artifacts. Holder ref lets the routes register eagerly and
859
839
  // start returning real data the moment main.ts assigns holder.current.
860
840
  const discoveryApiHolder = { current: undefined };
841
+ // #1037: same eager-register / late-populate pattern for the join applier.
842
+ // The join endpoint registers eagerly inside startApiServer; the applier is
843
+ // built only after the latest join-consuming subsystem (the engine view,
844
+ // wired in the Daemon ctor). The endpoint tolerates an empty holder in the
845
+ // gap between server-start and populate by falling back to
846
+ // restartRequired:true.
847
+ const joinApplierHolder = { current: undefined };
861
848
  // hjex.6: retry signal for the bootstrap halt-and-resume loop.
862
849
  // When a SetupBootstrapHalted is caught (fatal non-funding error or funding
863
850
  // timeout), main() waits on this promise instead of returning, so the setup
@@ -964,6 +951,7 @@ export async function main() {
964
951
  rpcUrl: config.rpcUrl,
965
952
  defaultRpcUrl: CHAIN_CONFIG.rpcUrl,
966
953
  joinedSolverNets: config.joinedSolverNets,
954
+ onboardingComplete: config.onboardingComplete,
967
955
  }),
968
956
  },
969
957
  // SolverNet catalog. Stubbed to the bundled `prediction` net for v1.
@@ -1080,6 +1068,10 @@ export async function main() {
1080
1068
  // targetServices DOES need to flow through so the faucet drips enough
1081
1069
  // ETH to cover ALL services for the operator's chosen targetServices.
1082
1070
  targetServices: config.targetServices,
1071
+ // Issue #560: batched daily-cap top-up knobs — single source of truth
1072
+ // in JinnConfig, surfaced to the SPA via GET /v1/setup/drip/quota.
1073
+ faucetDailyTopupCap: config.faucetDailyTopupCap,
1074
+ faucetTopupCooldownMs: config.faucetTopupCooldownMs,
1083
1075
  claudePath: activeClaudePath,
1084
1076
  getClaudePath: () => activeClaudePath,
1085
1077
  configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
@@ -1111,16 +1103,21 @@ export async function main() {
1111
1103
  resolve();
1112
1104
  });
1113
1105
  },
1106
+ // #1037: hot-apply a join to the running daemon. Populated after the
1107
+ // join-consuming subsystems are built (see joinApplierHolder). Empty
1108
+ // until then → the endpoint returns restartRequired:true.
1109
+ joinApplier: joinApplierHolder,
1110
+ // #983: mutate the in-memory config so GET /v1/bootstrap reflects the
1111
+ // completion flag live (the endpoint persists to disk; this keeps the
1112
+ // configReader's in-memory read consistent — same pattern as the
1113
+ // join-applier's config write). Cast: JinnConfig has the optional field.
1114
+ markOnboardingComplete: () => {
1115
+ config.onboardingComplete = true;
1116
+ },
1114
1117
  },
1115
1118
  status: {
1116
1119
  earningDir: config.earningDir,
1117
1120
  rpcUrl: config.rpcUrl,
1118
- // tJINN identity comes from the bundled JINN MVI L1 artifact
1119
- // (`JINN_MVI_CONFIG`) — one source of truth. The Sepolia RPC endpoint
1120
- // is read from `config.ethereumRpcUrl` via the threaded `config`.
1121
- tjinnTokenAddress: JINN_MVI_CONFIG.jinn,
1122
- tjinnChainId: JINN_MVI_CONFIG.l1ChainId,
1123
- tjinnDistributorAddress: JINN_MVI_CONFIG.distributor,
1124
1121
  network: config.network,
1125
1122
  pollIntervalMs: config.pollIntervalMs,
1126
1123
  masterEthDailyEstimateWei: config.masterEthDailyEstimateWei,
@@ -1132,6 +1129,10 @@ export async function main() {
1132
1129
  engine: config.engine,
1133
1130
  config,
1134
1131
  configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
1132
+ passwordRotation: {
1133
+ source: passwordResolution.source,
1134
+ filePath: passwordResolution.filePath,
1135
+ },
1135
1136
  },
1136
1137
  // Launcher mode (Tasks 6 + 7). Deps are resolved lazily because the
1137
1138
  // generator and Safe address are constructed after bootstrap, after
@@ -1547,6 +1548,28 @@ export async function main() {
1547
1548
  // the panel's next refetch. Before this, the routes 404'd forever and
1548
1549
  // the /build page rendered "Discovery unavailable" permanently.
1549
1550
  discoveryApiHolder.current = sharedDiscoveryApi;
1551
+ // #1037: the live task-discovery descriptor. Always present with a mutable
1552
+ // `solverNetManifestCids` array (`taskDiscoveryManifestCids` is a fresh
1553
+ // `.map` result, safe to push onto). The join applier holds this same object
1554
+ // reference and pushes a newly-joined cid onto it live.
1555
+ const taskDiscovery = {
1556
+ discoveryApi: sharedDiscoveryApi,
1557
+ solverNetManifestCids: taskDiscoveryManifestCids,
1558
+ // No explicit `onchainFromBlock` by default — let `MechAdapter`'s
1559
+ // `DEFAULT_TASK_DISCOVERY_FROM_BLOCK` per-chain default flow through.
1560
+ // Hardcoding here shadowed the adapter's default and re-introduced the
1561
+ // ghost-task floor every release; removing the shadow makes `adapter.ts`
1562
+ // the single source of truth. See gh #300. An operator MAY opt in to a
1563
+ // recent floor via `taskDiscoveryOnchainFromBlock` to bound the canonical
1564
+ // getLogs scan (which otherwise parses a large history on the main thread
1565
+ // and can stall the loop) and lean on the indexer DiscoveryAPI.
1566
+ ...(config.taskDiscoveryOnchainFromBlock !== undefined
1567
+ ? { onchainFromBlock: config.taskDiscoveryOnchainFromBlock }
1568
+ : {}),
1569
+ ...(config.taskDiscoveryAllowedTaskIds?.length
1570
+ ? { allowedTaskIds: config.taskDiscoveryAllowedTaskIds }
1571
+ : {}),
1572
+ };
1550
1573
  const adapter = new MechAdapter({
1551
1574
  rpcUrl: config.rpcUrls,
1552
1575
  mechMarketplaceAddress: MARKETPLACE_ADDRESS,
@@ -1560,27 +1583,7 @@ export async function main() {
1560
1583
  chainId: config.network === 'testnet' ? 84532 : 8453,
1561
1584
  routerClaimDeliveryVariant: CHAIN_CONFIG.routerClaimDeliveryVersion,
1562
1585
  evictionRecovery,
1563
- taskDiscovery: taskDiscoveryManifestCids.length > 0
1564
- ? {
1565
- discoveryApi: sharedDiscoveryApi,
1566
- solverNetManifestCids: taskDiscoveryManifestCids,
1567
- // No explicit `onchainFromBlock` by default — let `MechAdapter`'s
1568
- // `DEFAULT_TASK_DISCOVERY_FROM_BLOCK` per-chain default flow
1569
- // through. Hardcoding here shadowed the adapter's default and
1570
- // re-introduced the ghost-task floor every release; removing the
1571
- // shadow makes `adapter.ts` the single source of truth. See gh
1572
- // #300. An operator MAY opt in to a recent floor via
1573
- // `taskDiscoveryOnchainFromBlock` to bound the canonical getLogs
1574
- // scan (which otherwise parses a large history on the main thread
1575
- // and can stall the loop) and lean on the indexer DiscoveryAPI.
1576
- ...(config.taskDiscoveryOnchainFromBlock !== undefined
1577
- ? { onchainFromBlock: config.taskDiscoveryOnchainFromBlock }
1578
- : {}),
1579
- ...(config.taskDiscoveryAllowedTaskIds?.length
1580
- ? { allowedTaskIds: config.taskDiscoveryAllowedTaskIds }
1581
- : {}),
1582
- }
1583
- : undefined,
1586
+ taskDiscovery,
1584
1587
  }, sharedStore);
1585
1588
  // ── TaskEngine wiring ─────────────────────────────────────────────────
1586
1589
  // Build agent viem clients (same creds as MechAdapter uses internally).
@@ -1588,57 +1591,7 @@ export async function main() {
1588
1591
  const agentChain = config.network === 'testnet'
1589
1592
  ? viemChains.baseSepolia
1590
1593
  : viemChains.base;
1591
- const l1Chain = config.jinnL1Network === 'sepolia' ? viemChains.sepolia : viemChains.mainnet;
1592
- const agentChainContracts = agentChain.contracts;
1593
- const optimismPortalAddress = agentChainContracts?.portal?.[l1Chain.id]?.address;
1594
- const disputeGameFactoryAddress = agentChainContracts?.disputeGameFactory?.[l1Chain.id]?.address;
1595
- const l2ProofClient = config.l2ProofRpcUrls
1596
- ? createJinnPublicClient(config.l2ProofRpcUrls, NETWORK_CHAIN)
1597
- : undefined;
1598
1594
  const agentClients = createClients(config.rpcUrls, agentPrivateKey, agentChain);
1599
- // ── L1 (Sepolia / Ethereum mainnet) clients for cross-chain JINN claim loop ──
1600
- // Uses the agent EOA because MockMessenger.owner is the agent on testnet.
1601
- // Same key as L2; only the chain differs.
1602
- const shouldWireJinnClaimL1 = shouldWireJinnClaimL1Signer({
1603
- enabled: config.jinnClaimLoopEnabled,
1604
- intervalMs: config.jinnClaimLoopIntervalMs,
1605
- submissionMode: config.jinnClaimSubmissionMode,
1606
- distributorAddress: JINN_MVI_CONFIG.distributor,
1607
- ethereumRpcUrl: config.ethereumRpcUrl,
1608
- });
1609
- const l1ClientsForJinnClaim = shouldWireJinnClaimL1 && config.ethereumRpcUrls
1610
- ? {
1611
- public: createJinnL1PublicClient(config.ethereumRpcUrls, config.jinnL1Network),
1612
- wallet: createJinnL1WalletClient(config.ethereumRpcUrls, config.jinnL1Network, privateKeyToAccount(agentPrivateKey)),
1613
- }
1614
- : undefined;
1615
- const jinnClaimLoopConfig = buildJinnClaimLoopConfig({
1616
- enabled: config.jinnClaimLoopEnabled,
1617
- intervalMs: config.jinnClaimLoopIntervalMs,
1618
- submissionMode: config.jinnClaimSubmissionMode,
1619
- messengerMode: JINN_CLAIM_MESSENGER_MODE,
1620
- mvi: JINN_MVI_CONFIG,
1621
- l2Client: agentClients.publicClient,
1622
- l2ProofClient,
1623
- l2Wallet: agentClients.walletClient,
1624
- l1Clients: l1ClientsForJinnClaim,
1625
- store: earningStore,
1626
- chain: NETWORK_CHAIN,
1627
- optimismPortalAddress,
1628
- disputeGameFactoryAddress,
1629
- });
1630
- if (jinnClaimLoopConfig) {
1631
- console.log(`[main] JinnClaimLoop: enabled (submission=${config.jinnClaimSubmissionMode}, ` +
1632
- `mode=${JINN_CLAIM_MESSENGER_MODE}, ` +
1633
- `interval=${config.jinnClaimLoopIntervalMs}ms, distributor=${JINN_MVI_CONFIG.distributor}, ` +
1634
- `emitter=${JINN_MVI_CONFIG.claimEmitter})`);
1635
- }
1636
- else if (!config.jinnClaimLoopEnabled) {
1637
- console.log('[main] JinnClaimLoop: disabled (jinnClaimLoopEnabled=false)');
1638
- }
1639
- else {
1640
- console.log(`[main] JinnClaimLoop: disabled (missing claim-loop artifacts, interval disabled, or L1 submit wiring)`);
1641
- }
1642
1595
  // ── Harness registry ─────────────────────────────────────────────────────────
1643
1596
  const solverNetRegistry = await loadSolverNets(config);
1644
1597
  for (const net of solverNetRegistry.list()) {
@@ -1729,6 +1682,7 @@ export async function main() {
1729
1682
  hermesPath: config.hermesPath,
1730
1683
  hermesModel: config.hermesModel,
1731
1684
  hermesProvider: config.hermesProvider,
1685
+ hermesBaseUrl: config.hermesBaseUrl,
1732
1686
  hermesDoctorTimeoutMs: config.hermesDoctorTimeoutMs,
1733
1687
  codexPath: config.codexPath,
1734
1688
  codexDoctorTimeoutMs: config.codexDoctorTimeoutMs,
@@ -1762,6 +1716,13 @@ export async function main() {
1762
1716
  // is no longer needed and would throw on Hono's locked matcher.
1763
1717
  harnessReadinessRegistryHolder.current = harnessReadinessRegistry;
1764
1718
  console.log('[main] HarnessReadinessRegistry started; /v1/harnesses/readiness routes active.');
1719
+ // #1037: always construct the engine eligibility view (mutable) so a
1720
+ // hot-applied join can inject its cid live. Previously this was wired only
1721
+ // when config.joinedSolverNets was truthy; a zero-join daemon then ran the
1722
+ // legacy solverType gate. With an always-present empty view, a zero-join
1723
+ // daemon rejects cid-bearing tasks (its discovery cid set is empty so it
1724
+ // discovers none) and still passes legacy no-cid tasks. See plan §behaviour-change.
1725
+ const joinedSolverNetsView = createMutableJoinedSolverNetsView(config.joinedSolverNets);
1765
1726
  // ── Engine deps ───────────────────────────────────────────────────────────────
1766
1727
  // Packaging deps: artifacts are always written to served_artifacts
1767
1728
  // (operator-local SQLite). In public-testnet donation mode, scrubbed artifact
@@ -1848,6 +1809,14 @@ export async function main() {
1848
1809
  else {
1849
1810
  console.log('[main] IdentityPublisher: disabled (no agent_id on active service — re-run bootstrap to mint the operator agent NFT)');
1850
1811
  }
1812
+ // ── Seller-side scrub pipeline (publish-time) ─────────────────────────────
1813
+ // One pipeline shared by the task engine and the live capture publisher so
1814
+ // every published trajectory passes through the same maintained scrub stack
1815
+ // (structural key policy → openredaction → secretlint/entropy → optional ML
1816
+ // PII). The OTLP receiver above runs best-effort ingest-time scrubbers; this
1817
+ // is the authoritative final gate before a trajectory becomes public/sellable.
1818
+ const sellerPiiDetector = await maybeBuildPiiDetector(config.captures.piiDetection);
1819
+ const sellerScrubPipeline = buildScrubPipeline(sellerPiiDetector ? { piiDetector: sellerPiiDetector } : {});
1851
1820
  const liveCapturePublisher = createLiveCapturePublisher({
1852
1821
  store: sharedStore,
1853
1822
  captures: capturesStore,
@@ -1860,6 +1829,7 @@ export async function main() {
1860
1829
  clientGitSha: buildInfo.clientGitSha,
1861
1830
  identityPublisher,
1862
1831
  harnessMode: config.harness.mode,
1832
+ scrubPipeline: sellerScrubPipeline,
1863
1833
  });
1864
1834
  capturePublishRef.current = liveCapturePublisher.publishCapture;
1865
1835
  // ── Reputation feedback hook (jinn-mono-yg4) ──────────────────────────────
@@ -2070,6 +2040,7 @@ export async function main() {
2070
2040
  agentEoa: agentEoaAddress,
2071
2041
  safeAddress,
2072
2042
  agentPrivateKey,
2043
+ ipfsGatewayUrl: config.ipfsGatewayUrl,
2073
2044
  ...(sharedDiscoveryApi ? { discoveryApi: sharedDiscoveryApi } : {}),
2074
2045
  },
2075
2046
  logger: {
@@ -2174,12 +2145,6 @@ export async function main() {
2174
2145
  status: {
2175
2146
  earningDir: config.earningDir,
2176
2147
  rpcUrl: config.rpcUrl,
2177
- // tJINN identity comes from the bundled JINN MVI L1 artifact
2178
- // (`JINN_MVI_CONFIG`) — one source of truth. The Sepolia RPC endpoint
2179
- // is read from `config.ethereumRpcUrl` via the threaded `config`.
2180
- tjinnTokenAddress: JINN_MVI_CONFIG.jinn,
2181
- tjinnChainId: JINN_MVI_CONFIG.l1ChainId,
2182
- tjinnDistributorAddress: JINN_MVI_CONFIG.distributor,
2183
2148
  // stOLAS L2 distributor — mirrors `CHAIN_CONFIG.distributorAddress`
2184
2149
  // used to gate the EvictionLoop (issue #651). Threaded through so the
2185
2150
  // SPA's autoRestake predicate keys off the same on-chain artifact as
@@ -2196,6 +2161,10 @@ export async function main() {
2196
2161
  engine: config.engine,
2197
2162
  config,
2198
2163
  configPath: CONFIG_PATH ?? DEFAULT_CONFIG_PATH,
2164
+ passwordRotation: {
2165
+ source: passwordResolution.source,
2166
+ filePath: passwordResolution.filePath,
2167
+ },
2199
2168
  spendCaps: spendCap?.caps,
2200
2169
  aiUnits,
2201
2170
  },
@@ -2209,7 +2178,6 @@ export async function main() {
2209
2178
  distributorAddress: CHAIN_CONFIG.distributorAddress,
2210
2179
  }
2211
2180
  : undefined,
2212
- jinnClaim: jinnClaimLoopConfig,
2213
2181
  restorationEngine: {
2214
2182
  paths: {
2215
2183
  workingDirRoot: config.engine.workingDirRoot,
@@ -2226,9 +2194,8 @@ export async function main() {
2226
2194
  // doesn't match a joined entry (plus a role gate). Absent when the
2227
2195
  // operator hasn't joined any nets yet — the engine then falls back to
2228
2196
  // the legacy solverType-keyed gate.
2229
- ...(config.joinedSolverNets
2230
- ? { joinedSolverNets: joinedSolverNetsViewFromConfig(config.joinedSolverNets) }
2231
- : {}),
2197
+ // #1037: always wire the (mutable) view so a hot-applied join is live.
2198
+ joinedSolverNets: joinedSolverNetsView,
2232
2199
  // Spec §14: task validation resolves manifest → contract → schemas.
2233
2200
  // Threaded only when the SolverNet registry client was constructed
2234
2201
  // (testnet branch above). The engine treats absence as "schema
@@ -2240,6 +2207,9 @@ export async function main() {
2240
2207
  reputationFeedback,
2241
2208
  operatorConfig,
2242
2209
  harnessMode: config.harness.mode,
2210
+ // Share the one maintained scrub pipeline (incl. optional ML PII) so task
2211
+ // trajectories and captures are scrubbed by the same stack before publish.
2212
+ scrubPipeline: sellerScrubPipeline,
2243
2213
  },
2244
2214
  balanceTopup: config.balanceTopupIntervalMs > 0
2245
2215
  ? {
@@ -2262,6 +2232,7 @@ export async function main() {
2262
2232
  CHAIN_CONFIG.distributorAddress
2263
2233
  ? {
2264
2234
  intervalMs: config.evictionCheckIntervalMs,
2235
+ reStakeThrottleMs: config.checkpointIntervalMs,
2265
2236
  store: earningStore,
2266
2237
  chain: NETWORK_CHAIN,
2267
2238
  readContract: (opts) => publicClient.readContract(opts),
@@ -2309,13 +2280,47 @@ export async function main() {
2309
2280
  },
2310
2281
  }
2311
2282
  : undefined,
2283
+ // #1043 loop watchdog. Always constructed in production so a stale loop is
2284
+ // detected + surfaced; the process-exit recovery is flag-gated (default
2285
+ // OFF) by config.watchdogAutoRestart.
2286
+ watchdog: { autoRestart: config.watchdogAutoRestart },
2287
+ });
2288
+ // #1037: populate the join applier now that all four join-consuming
2289
+ // subsystems exist — the live task-discovery descriptor (`taskDiscovery`),
2290
+ // the mutable engine view (`joinedSolverNetsView`), the readiness registry,
2291
+ // and the SolverNet registry. The join endpoint registered eagerly at
2292
+ // server-start; before this point it returns restartRequired:true.
2293
+ joinApplierHolder.current = createJoinApplier({
2294
+ taskDiscovery,
2295
+ view: joinedSolverNetsView,
2296
+ readiness: harnessReadinessRegistry,
2297
+ registry: solverNetRegistry,
2298
+ config,
2312
2299
  });
2300
+ if (config.watchdogAutoRestart) {
2301
+ console.log('[watchdog] auto-restart ENABLED (stale loop → non-zero exit)');
2302
+ }
2313
2303
  // Write pidfile so `jinn stop` can find us. First, refuse the run if another
2314
2304
  // daemon already owns this earning directory — see issue #649. The gate
2315
2305
  // handles all three branches (refuse-and-exit, unlink-stale-and-continue,
2316
2306
  // proceed); the writeFileSync below MUST stay outside the helper so the
2317
2307
  // "// DO NOT add store mutations above this line — see #649" invariant is
2318
2308
  // visible right here at the call site.
2309
+ // Deployment-readiness gate (#958). In a deployment context (JINN_STATE_DIR
2310
+ // set or a container/compose auth context) this fails loud and exits when a
2311
+ // hard check fails (writable-volume, state-on-volume, agent-cli-non-root).
2312
+ // Outside a deployment context it only logs advisories — a plain local
2313
+ // `jinn run` is NEVER newly gated here. Runs before the pidfile gate so an
2314
+ // unfit environment refuses before we touch the pidfile.
2315
+ await applyDeploymentReadinessGate({
2316
+ stateDir: config.stateDir,
2317
+ earningDir: config.earningDir,
2318
+ runtimeMode: config.runtimeMode,
2319
+ }, {
2320
+ env: process.env,
2321
+ getuid: typeof process.getuid === 'function' ? process.getuid.bind(process) : undefined,
2322
+ detectAuthContext,
2323
+ });
2319
2324
  const pidPath = join(config.earningDir, 'daemon.pid');
2320
2325
  applyPidfileLivenessGate(pidPath);
2321
2326
  writeFileSyncMain(pidPath, String(process.pid) + '\n', 'utf-8');