@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
@@ -1,122 +0,0 @@
1
- /**
2
- * MockMessenger submission path for the cross-chain JINN claim loop.
3
- *
4
- * Used when `jinnMessengerMode === 'mock'` — primarily for testnet burn-in
5
- * (Phase D / r5z) when canonical OP-Stack finality is impractical and CI.
6
- * The daemon's wallet must be the MockMessenger's owner during burn-in;
7
- * `setFixture` is `onlyOwner`.
8
- *
9
- * Flow:
10
- * 1. Read the latest ClaimTicket event from the TaskClaimEmitter on L2.
11
- * 2. Plant the matching fixture on the L1 MockMessenger via `setFixture`.
12
- * 3. Submit `JinnDistributor.claim(abi.encode(claimId))`.
13
- *
14
- * The MockMessenger encodes the proof as `abi.encode(uint256 claimId)` —
15
- * the messenger looks up the planted snapshot fixture and returns it. The
16
- * distributor's per-service accumulator handles replay; resubmitting the
17
- * same `proof` mints zero on the second call.
18
- */
19
- import { decodeEventLog, encodeAbiParameters, } from 'viem';
20
- import { CLAIM_TICKET_TOPIC0, JINN_CLAIM_EMITTER_ABI, JINN_DISTRIBUTOR_ABI, MOCK_MESSENGER_ABI, } from '../earning/contracts.js';
21
- /**
22
- * Read the latest ClaimTicket emitted by `claimEmitter` for the given
23
- * `serviceId`, optionally bounded to a recent block range. Returns null when
24
- * no matching event exists.
25
- */
26
- export async function fetchLatestClaimTicket(l2Client, claimEmitter, serviceId, options = {}) {
27
- const fromBlock = options.fromBlock ?? 0n;
28
- const toBlock = options.toBlock ?? 'latest';
29
- const logs = await l2Client.getLogs({
30
- address: claimEmitter,
31
- event: JINN_CLAIM_EMITTER_ABI[0],
32
- args: { serviceId },
33
- fromBlock,
34
- toBlock,
35
- });
36
- if (logs.length === 0)
37
- return null;
38
- // Sort by blockNumber, logIndex; the last one is the latest.
39
- logs.sort((a, b) => {
40
- const aBn = a.blockNumber ?? 0n;
41
- const bBn = b.blockNumber ?? 0n;
42
- if (aBn === bBn)
43
- return (a.logIndex ?? 0) - (b.logIndex ?? 0);
44
- return aBn < bBn ? -1 : 1;
45
- });
46
- const latest = logs[logs.length - 1];
47
- const decoded = decodeEventLog({
48
- abi: JINN_CLAIM_EMITTER_ABI,
49
- data: latest.data,
50
- topics: latest.topics,
51
- eventName: 'ClaimTicket',
52
- });
53
- const args = decoded.args;
54
- return {
55
- claimId: args.claimId,
56
- serviceId: args.serviceId,
57
- taskCreationWeight: args.taskCreationWeight,
58
- solutionDeliveryWeight: args.solutionDeliveryWeight,
59
- verdictDeliveryWeight: args.verdictDeliveryWeight,
60
- multisig: args.multisig,
61
- claimer: args.claimer,
62
- emitTxHash: latest.transactionHash ?? '0x',
63
- emitBlockNumber: latest.blockNumber ?? 0n,
64
- };
65
- }
66
- /**
67
- * Plant a fixture on the L1 MockMessenger that mirrors the L2 ClaimTicket
68
- * snapshot exactly. The daemon's L1 wallet must be the MockMessenger's
69
- * owner. Returns the L1 tx hash.
70
- */
71
- export async function plantMockFixture(l1Client, l1Wallet, messenger, snapshot) {
72
- const account = l1Wallet.account;
73
- if (!account)
74
- throw new Error('L1 wallet has no account configured');
75
- const { request } = await l1Client.simulateContract({
76
- address: messenger,
77
- abi: MOCK_MESSENGER_ABI,
78
- functionName: 'setFixture',
79
- args: [
80
- snapshot.claimId,
81
- {
82
- serviceId: snapshot.serviceId,
83
- taskCreationWeight: snapshot.taskCreationWeight,
84
- solutionDeliveryWeight: snapshot.solutionDeliveryWeight,
85
- verdictDeliveryWeight: snapshot.verdictDeliveryWeight,
86
- multisig: snapshot.multisig,
87
- },
88
- ],
89
- account,
90
- });
91
- return l1Wallet.writeContract(request);
92
- }
93
- /**
94
- * Encode the MockMessenger proof: `abi.encode(uint256 claimId)`. The
95
- * messenger looks up the previously planted fixture by claimId.
96
- */
97
- export function encodeMockProof(claimId) {
98
- return encodeAbiParameters([{ type: 'uint256' }], [claimId]);
99
- }
100
- /**
101
- * Submit `JinnDistributor.claim(proof)` on L1. Returns the L1 tx hash.
102
- *
103
- * Idempotent at the contract layer — the distributor's per-service
104
- * accumulator clamps repeated submissions to zero mint.
105
- */
106
- export async function submitMockClaim(l1Client, l1Wallet, distributor, claimId) {
107
- const account = l1Wallet.account;
108
- if (!account)
109
- throw new Error('L1 wallet has no account configured');
110
- const proof = encodeMockProof(claimId);
111
- const { request } = await l1Client.simulateContract({
112
- address: distributor,
113
- abi: JINN_DISTRIBUTOR_ABI,
114
- functionName: 'claim',
115
- args: [proof],
116
- account,
117
- });
118
- return l1Wallet.writeContract(request);
119
- }
120
- // Re-export for tests that want to assert on the topic0 directly.
121
- export { CLAIM_TICKET_TOPIC0 };
122
- //# sourceMappingURL=jinn-claim-loop-mock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jinn-claim-loop-mock.js","sourceRoot":"","sources":["../../src/daemon/jinn-claim-loop-mock.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import type { Address, PublicClient, WalletClient } from 'viem';
2
- import type { JinnMviConfig } from '../earning/contracts.js';
3
- import type { FleetStateStore } from '../earning/store.js';
4
- import type { JinnOnchainNetwork } from '../earning/viem-clients.js';
5
- import type { Store } from '../store/store.js';
6
- import type { JinnClaimLoopConfig, JinnClaimSubmissionMode, JinnMessengerMode } from './jinn-claim-loop.js';
7
- export interface JinnClaimL1ClientBundle {
8
- public: PublicClient;
9
- wallet: WalletClient;
10
- }
11
- export declare function shouldWireJinnClaimL1Signer(args: {
12
- enabled: boolean;
13
- intervalMs: number;
14
- submissionMode: JinnClaimSubmissionMode;
15
- distributorAddress?: string;
16
- ethereumRpcUrl?: string;
17
- }): boolean;
18
- export declare function buildJinnClaimLoopConfig(args: {
19
- enabled: boolean;
20
- intervalMs: number;
21
- submissionMode: JinnClaimSubmissionMode;
22
- messengerMode: JinnMessengerMode;
23
- mvi: Pick<JinnMviConfig, 'claimEmitter' | 'distributor' | 'messenger'>;
24
- l2Client: PublicClient;
25
- l2ProofClient?: PublicClient;
26
- l2Wallet: WalletClient;
27
- l1Clients?: JinnClaimL1ClientBundle;
28
- store: FleetStateStore;
29
- chain: JinnOnchainNetwork;
30
- optimismPortalAddress?: Address;
31
- disputeGameFactoryAddress?: Address;
32
- jinnStore?: Store;
33
- }): JinnClaimLoopConfig | undefined;
@@ -1,40 +0,0 @@
1
- export function shouldWireJinnClaimL1Signer(args) {
2
- return (args.enabled &&
3
- args.intervalMs > 0 &&
4
- args.submissionMode === 'submit' &&
5
- !!args.distributorAddress &&
6
- !!args.ethereumRpcUrl);
7
- }
8
- export function buildJinnClaimLoopConfig(args) {
9
- if (!args.enabled || args.intervalMs <= 0 || !args.mvi.claimEmitter) {
10
- return undefined;
11
- }
12
- const base = {
13
- intervalMs: args.intervalMs,
14
- submissionMode: args.submissionMode,
15
- l2Client: args.l2Client,
16
- l2ProofClient: args.l2ProofClient,
17
- l2Wallet: args.l2Wallet,
18
- store: args.store,
19
- chain: args.chain,
20
- claimEmitterAddress: args.mvi.claimEmitter,
21
- messengerMode: args.messengerMode,
22
- optimismPortalAddress: args.optimismPortalAddress,
23
- disputeGameFactoryAddress: args.disputeGameFactoryAddress,
24
- jinnStore: args.jinnStore,
25
- };
26
- if (args.submissionMode === 'emit-only') {
27
- return base;
28
- }
29
- if (!args.l1Clients || !args.mvi.distributor || !args.mvi.messenger) {
30
- return undefined;
31
- }
32
- return {
33
- ...base,
34
- l1Client: args.l1Clients.public,
35
- l1Wallet: args.l1Clients.wallet,
36
- distributorAddress: args.mvi.distributor,
37
- messengerAddress: args.mvi.messenger,
38
- };
39
- }
40
- //# sourceMappingURL=jinn-claim-loop-wiring.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jinn-claim-loop-wiring.js","sourceRoot":"","sources":["../../src/daemon/jinn-claim-loop-wiring.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,2BAA2B,CAAC,IAM3C;IACC,OAAO,CACL,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,UAAU,GAAG,CAAC;QACnB,IAAI,CAAC,cAAc,KAAK,QAAQ;QAChC,CAAC,CAAC,IAAI,CAAC,kBAAkB;QACzB,CAAC,CAAC,IAAI,CAAC,cAAc,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAexC;IACC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG;QACX,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,YAAuB;QACrD,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;QACzD,SAAS,EAAE,IAAI,CAAC,SAAS;KACmC,CAAC;IAE/D,IAAI,IAAI,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;QAC/B,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;QAC/B,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,WAAsB;QACnD,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,SAAoB;KAChD,CAAC;AACJ,CAAC"}
@@ -1,130 +0,0 @@
1
- /**
2
- * Cross-chain JINN claim loop (Phase B / jinn-mono-7x5).
3
- *
4
- * Orchestrates the two-tx flow that turns on-chain protocol work on L2 into
5
- * JINN mints on L1:
6
- *
7
- * 1. Step A — emit on Base. Call `TaskClaimEmitter.emitClaim(serviceId)`
8
- * on Base / Base Sepolia. The event records the three counters
9
- * (`taskCreationWeight`, `solutionDeliveryWeight`, `verdictDeliveryWeight`)
10
- * atomically at one block.
11
- * 2. Step B — wait for finality. In `canonical` mode, wait for the
12
- * OP dispute game to resolve and portal finality to elapse, then build
13
- * the OP-Stack storage proof. In `mock` mode, plant the matching fixture on the L1
14
- * MockMessenger.
15
- * 3. Step C — submit on L1. Call `JinnDistributor.claim(proof)` on
16
- * Sepolia / Ethereum. The distributor verifies, applies channel
17
- * weights, and mints to the operator multisig + DAO Timelock.
18
- *
19
- * The loop is disabled unless the operator explicitly enables it. Each tick
20
- * iterates over staked services in the FleetStateStore. Failures are logged
21
- * and surfaced via `tick_error` observability events; they don't crash the
22
- * daemon. Replay protection lives entirely in the distributor's accumulators
23
- * — repeated submissions are no-ops on the second mint.
24
- *
25
- * Configuration: `jinnClaimLoopEnabled`, `jinnClaimLoopIntervalMs` (default
26
- * 1h), `jinnClaimSubmissionMode` (`emit-only` | `submit`),
27
- * `jinnMessengerMode` (`canonical` | `mock`). The `mock` submit path requires
28
- * the daemon's L1 wallet to be the MockMessenger's owner (set at deploy).
29
- *
30
- * Automated submit-mode `run()` / `runOnce()` **only execute mock-mode**
31
- * emit→fixture→claim. When `jinnMessengerMode === 'canonical'`, scheduled
32
- * submit ticks **skip** emitting: canonical OP-Stack finality is multi-day
33
- * (see R-1); operators should use mock for burn-in and run
34
- * `tsx scripts/verify-canonical-canary.ts` for verifier-only proofs after an
35
- * intentional L2 emit. Emit-only mode stops after the L2 ticket and can run
36
- * without L1 wiring.
37
- */
38
- import type { Address, Hex, PublicClient, WalletClient } from 'viem';
39
- import type { FleetStateStore } from '../earning/store.js';
40
- import type { Store } from '../store/store.js';
41
- export type JinnMessengerMode = 'canonical' | 'mock';
42
- export type JinnClaimSubmissionMode = 'emit-only' | 'submit';
43
- export interface JinnClaimLoopConfig {
44
- intervalMs: number;
45
- /** 'emit-only' records L2 tickets only; 'submit' continues to L1. */
46
- submissionMode: JinnClaimSubmissionMode;
47
- /** PublicClient bound to the L2 measurement chain (Base / Base Sepolia). */
48
- l2Client: PublicClient;
49
- /**
50
- * Optional archive/proof RPC client for canonical mode. Historical
51
- * `eth_getProof` at the dispute game's L2 block can require a stronger
52
- * endpoint than the daemon's normal L2 RPC.
53
- */
54
- l2ProofClient?: PublicClient;
55
- /** WalletClient bound to L2 — pays gas for `emitClaim`. */
56
- l2Wallet: WalletClient;
57
- /** PublicClient bound to the L1 governance chain (Ethereum / Sepolia). */
58
- l1Client?: PublicClient;
59
- /** WalletClient bound to L1 — pays gas for `setFixture` (mock) + `claim`. */
60
- l1Wallet?: WalletClient;
61
- /** Per-service state. We tick each service with a stake. */
62
- store: FleetStateStore;
63
- chain: 'base' | 'base-sepolia';
64
- /** L2 TaskClaimEmitter address. Required. */
65
- claimEmitterAddress: Address;
66
- /** L1 JinnDistributor address. Required. */
67
- distributorAddress?: Address;
68
- /** L1 messenger address. Required (MockMessenger or CanonicalOpStackMessenger). */
69
- messengerAddress?: Address;
70
- /** 'canonical' or 'mock'. Defaults to 'canonical'. */
71
- messengerMode: JinnMessengerMode;
72
- /** Canonical-mode only — L1 OptimismPortal2 anchoring L2 output roots. */
73
- optimismPortalAddress?: Address;
74
- /** Canonical-mode only — L1 DisputeGameFactory. */
75
- disputeGameFactoryAddress?: Address;
76
- /** Daemon observability sink. */
77
- jinnStore?: Store;
78
- }
79
- export interface JinnClaimTickResult {
80
- ticks: number;
81
- emits: number;
82
- submits: number;
83
- errors: number;
84
- }
85
- /**
86
- * The orchestrator. One loop, one method per stage so they're individually
87
- * testable. Failures bubble to `runOnce` which records them and continues
88
- * to the next service — a single bad service must not stall the fleet.
89
- */
90
- export declare class JinnClaimLoop {
91
- private readonly config;
92
- private stopped;
93
- constructor(config: JinnClaimLoopConfig);
94
- stop(): void;
95
- /**
96
- * One tick: iterate the staked services and run emit → wait → submit for
97
- * each. Returns counters useful for tests and operational dashboards.
98
- */
99
- runOnce(): Promise<JinnClaimTickResult>;
100
- /**
101
- * One service's full Step A → Step B → Step C run. Split out so tests
102
- * can drive a single service end-to-end without the iteration scaffold.
103
- */
104
- tickService(args: {
105
- serviceId: bigint;
106
- displayIndex: number;
107
- multisig: Address;
108
- }, result: JinnClaimTickResult): Promise<void>;
109
- /** Step A — `TaskClaimEmitter.emitClaim(serviceId)` on L2. */
110
- emitOnL2(serviceId: bigint): Promise<Hex>;
111
- /** Mock-mode Step B + C: read the L2 event, plant fixture on L1, claim. */
112
- submitMock(args: {
113
- serviceId: bigint;
114
- emitTxHash: Hex;
115
- multisig: Address;
116
- }): Promise<Hex>;
117
- /** Canonical-mode Step B + C: build OP-Stack proof, submit on L1. */
118
- submitCanonical(args: {
119
- serviceId: bigint;
120
- emitTxHash: Hex;
121
- }): Promise<Hex>;
122
- /**
123
- * Read the latest ClaimTicket for `serviceId` near `emitTxHash`. Bounded
124
- * to the emit block to avoid scanning the full chain on every tick.
125
- */
126
- private readSnapshot;
127
- private requireL1SubmitConfig;
128
- /** Loop forever, sleeping `intervalMs` between ticks. */
129
- run(): Promise<void>;
130
- }
@@ -1,328 +0,0 @@
1
- /**
2
- * Cross-chain JINN claim loop (Phase B / jinn-mono-7x5).
3
- *
4
- * Orchestrates the two-tx flow that turns on-chain protocol work on L2 into
5
- * JINN mints on L1:
6
- *
7
- * 1. Step A — emit on Base. Call `TaskClaimEmitter.emitClaim(serviceId)`
8
- * on Base / Base Sepolia. The event records the three counters
9
- * (`taskCreationWeight`, `solutionDeliveryWeight`, `verdictDeliveryWeight`)
10
- * atomically at one block.
11
- * 2. Step B — wait for finality. In `canonical` mode, wait for the
12
- * OP dispute game to resolve and portal finality to elapse, then build
13
- * the OP-Stack storage proof. In `mock` mode, plant the matching fixture on the L1
14
- * MockMessenger.
15
- * 3. Step C — submit on L1. Call `JinnDistributor.claim(proof)` on
16
- * Sepolia / Ethereum. The distributor verifies, applies channel
17
- * weights, and mints to the operator multisig + DAO Timelock.
18
- *
19
- * The loop is disabled unless the operator explicitly enables it. Each tick
20
- * iterates over staked services in the FleetStateStore. Failures are logged
21
- * and surfaced via `tick_error` observability events; they don't crash the
22
- * daemon. Replay protection lives entirely in the distributor's accumulators
23
- * — repeated submissions are no-ops on the second mint.
24
- *
25
- * Configuration: `jinnClaimLoopEnabled`, `jinnClaimLoopIntervalMs` (default
26
- * 1h), `jinnClaimSubmissionMode` (`emit-only` | `submit`),
27
- * `jinnMessengerMode` (`canonical` | `mock`). The `mock` submit path requires
28
- * the daemon's L1 wallet to be the MockMessenger's owner (set at deploy).
29
- *
30
- * Automated submit-mode `run()` / `runOnce()` **only execute mock-mode**
31
- * emit→fixture→claim. When `jinnMessengerMode === 'canonical'`, scheduled
32
- * submit ticks **skip** emitting: canonical OP-Stack finality is multi-day
33
- * (see R-1); operators should use mock for burn-in and run
34
- * `tsx scripts/verify-canonical-canary.ts` for verifier-only proofs after an
35
- * intentional L2 emit. Emit-only mode stops after the L2 ticket and can run
36
- * without L1 wiring.
37
- */
38
- import { encodeFunctionData, getAddress } from 'viem';
39
- import { isOperationalServiceStep } from '../earning/types.js';
40
- import { base, baseSepolia } from 'viem/chains';
41
- import { emitEvent } from '../observability/emit-event.js';
42
- import { displayFleetServiceIndex } from '../earning/fleet-display-index.js';
43
- import { viemSendTransactionWithRetry, waitForTransactionReceiptWithRetry } from '../tx-retry.js';
44
- import { CLAIM_TICKET_TOPIC0, JINN_CLAIM_EMITTER_ABI } from '../earning/contracts.js';
45
- import { fetchLatestClaimTicket, plantMockFixture, submitMockClaim, } from './jinn-claim-loop-mock.js';
46
- import { buildCanonicalProof, decodeClaimTicketFromReceipt, verifyCanonicalClaimCanary, } from './jinn-claim-loop-canonical.js';
47
- /**
48
- * The orchestrator. One loop, one method per stage so they're individually
49
- * testable. Failures bubble to `runOnce` which records them and continues
50
- * to the next service — a single bad service must not stall the fleet.
51
- */
52
- export class JinnClaimLoop {
53
- config;
54
- stopped = false;
55
- constructor(config) {
56
- this.config = config;
57
- }
58
- stop() {
59
- this.stopped = true;
60
- }
61
- /**
62
- * One tick: iterate the staked services and run emit → wait → submit for
63
- * each. Returns counters useful for tests and operational dashboards.
64
- */
65
- async runOnce() {
66
- const result = { ticks: 0, emits: 0, submits: 0, errors: 0 };
67
- // Spec / Phase D: MockMessenger drives automated Sepolia burn-in; canonical
68
- // submit verification is verifier-only and must not spam emitClaim each
69
- // interval. Emit-only mode intentionally stops after recording the L2
70
- // ticket, so it is allowed to run with any messenger mode.
71
- if (this.config.submissionMode === 'submit' && this.config.messengerMode === 'canonical') {
72
- const detail = '[jinn-claim] Automated runOnce skips messengerMode=canonical (multi-day OP finality). ' +
73
- 'Set jinnMessengerMode=mock for Sepolia burn-in, or run `tsx scripts/verify-canonical-canary.ts` ' +
74
- 'after finality with an existing L2 ClaimTicket tx.';
75
- console.warn(detail);
76
- if (this.config.jinnStore) {
77
- emitEvent(this.config.jinnStore, {
78
- kind: 'jinn_claim_canonical_skip',
79
- outcome: 'warn',
80
- detail,
81
- }, 'jinn-claim');
82
- }
83
- return result;
84
- }
85
- const state = await this.config.store.load(this.config.chain);
86
- for (const svc of state.services) {
87
- if (this.stopped)
88
- break;
89
- // Only services with a multisig + service id are eligible.
90
- if (!isOperationalServiceStep(svc.step) && svc.step !== 'mech_deployed')
91
- continue;
92
- if (svc.service_id == null || !svc.safe_address)
93
- continue;
94
- const displayIndex = displayFleetServiceIndex(svc);
95
- result.ticks++;
96
- try {
97
- await this.tickService({
98
- serviceId: BigInt(svc.service_id),
99
- displayIndex,
100
- multisig: getAddress(svc.safe_address),
101
- }, result);
102
- }
103
- catch (err) {
104
- result.errors++;
105
- const detail = err instanceof Error ? err.message : String(err);
106
- console.error(`[jinn-claim] Service ${svc.service_id}: ${detail}`);
107
- if (this.config.jinnStore) {
108
- emitEvent(this.config.jinnStore, {
109
- kind: 'tick_error',
110
- serviceIndex: displayIndex,
111
- outcome: 'failed',
112
- detail,
113
- }, 'jinn-claim');
114
- }
115
- }
116
- }
117
- return result;
118
- }
119
- /**
120
- * One service's full Step A → Step B → Step C run. Split out so tests
121
- * can drive a single service end-to-end without the iteration scaffold.
122
- */
123
- async tickService(args, result) {
124
- const { serviceId, displayIndex, multisig } = args;
125
- // Step A — emit ClaimTicket on L2.
126
- const emitTxHash = await this.emitOnL2(serviceId);
127
- result.emits++;
128
- if (this.config.jinnStore) {
129
- emitEvent(this.config.jinnStore, {
130
- kind: 'jinn_claim_emitted',
131
- serviceIndex: displayIndex,
132
- txHash: emitTxHash,
133
- outcome: 'ok',
134
- detail: `Emitted ClaimTicket for service ${serviceId}`,
135
- }, 'jinn-claim');
136
- }
137
- if (this.config.submissionMode === 'emit-only') {
138
- const snapshot = await this.readSnapshot(serviceId, emitTxHash);
139
- if (snapshot.multisig.toLowerCase() !== multisig.toLowerCase()) {
140
- throw new Error(`[jinn-claim] L2 ClaimTicket multisig ${snapshot.multisig} does not match ` +
141
- `service multisig ${multisig} — refusing to record emit-only ticket`);
142
- }
143
- const detail = `Recorded ClaimTicket claimId=${snapshot.claimId} service=${serviceId} ` +
144
- `weights=${snapshot.taskCreationWeight}/${snapshot.solutionDeliveryWeight}/` +
145
- `${snapshot.verdictDeliveryWeight}`;
146
- console.log(`[jinn-claim] Service ${serviceId}: ${detail}`);
147
- if (this.config.jinnStore) {
148
- emitEvent(this.config.jinnStore, {
149
- kind: 'jinn_claim_ticket_recorded',
150
- serviceIndex: displayIndex,
151
- txHash: emitTxHash,
152
- outcome: 'ok',
153
- detail,
154
- }, 'jinn-claim');
155
- }
156
- return;
157
- }
158
- // Step B + C — diverge by mode.
159
- let submitTxHash;
160
- if (this.config.messengerMode === 'mock') {
161
- submitTxHash = await this.submitMock({
162
- serviceId,
163
- emitTxHash,
164
- multisig,
165
- });
166
- }
167
- else {
168
- submitTxHash = await this.submitCanonical({
169
- serviceId,
170
- emitTxHash,
171
- });
172
- }
173
- result.submits++;
174
- if (this.config.jinnStore) {
175
- emitEvent(this.config.jinnStore, {
176
- kind: 'jinn_claim_submitted',
177
- serviceIndex: displayIndex,
178
- txHash: submitTxHash,
179
- outcome: 'ok',
180
- detail: `Submitted ${this.config.messengerMode} claim for service ${serviceId}`,
181
- }, 'jinn-claim');
182
- }
183
- }
184
- /** Step A — `TaskClaimEmitter.emitClaim(serviceId)` on L2. */
185
- async emitOnL2(serviceId) {
186
- const account = this.config.l2Wallet.account;
187
- if (!account)
188
- throw new Error('L2 wallet has no account configured');
189
- // Pre-flight: surface a revert before we broadcast.
190
- await this.config.l2Client.simulateContract({
191
- address: this.config.claimEmitterAddress,
192
- abi: JINN_CLAIM_EMITTER_ABI,
193
- functionName: 'emitClaim',
194
- args: [serviceId],
195
- account,
196
- });
197
- // Broadcast through the shared per-EOA nonce ledger (issue #525). emitClaim
198
- // is sent from the AGENT EOA — the same EOA the creator/claim/deliver Safe
199
- // txs use. A raw `walletClient.writeContract` here auto-fills the nonce from
200
- // `getTransactionCount(pending)` OUTSIDE the broadcast lock, so on testnet
201
- // (where this loop is enabled by default and fires immediately at startup)
202
- // it races the creator's first `createTask` and both pick the same nonce →
203
- // "nonce too low". Routing via viemSendTransactionWithRetry serializes the
204
- // nonce-read→broadcast against every other agent-EOA broadcaster.
205
- const data = encodeFunctionData({
206
- abi: JINN_CLAIM_EMITTER_ABI,
207
- functionName: 'emitClaim',
208
- args: [serviceId],
209
- });
210
- const hash = await viemSendTransactionWithRetry(this.config.l2Wallet, this.config.l2Client, {
211
- account,
212
- to: this.config.claimEmitterAddress,
213
- data,
214
- });
215
- await waitForTransactionReceiptWithRetry(this.config.l2Client, hash);
216
- return hash;
217
- }
218
- /** Mock-mode Step B + C: read the L2 event, plant fixture on L1, claim. */
219
- async submitMock(args) {
220
- const { l1Client, l1Wallet, messengerAddress, distributorAddress } = this.requireL1SubmitConfig();
221
- const snapshot = await this.readSnapshot(args.serviceId, args.emitTxHash);
222
- if (snapshot.multisig.toLowerCase() !== args.multisig.toLowerCase()) {
223
- throw new Error(`[jinn-claim] L2 ClaimTicket multisig ${snapshot.multisig} does not match ` +
224
- `service multisig ${args.multisig} — refusing to plant mock fixture`);
225
- }
226
- // Plant the fixture (daemon wallet must be MockMessenger.owner).
227
- const fixtureTx = await plantMockFixture(l1Client, l1Wallet, messengerAddress, snapshot);
228
- await waitForTransactionReceiptWithRetry(l1Client, fixtureTx);
229
- // Submit the claim on L1.
230
- const claimTx = await submitMockClaim(l1Client, l1Wallet, distributorAddress, snapshot.claimId);
231
- await waitForTransactionReceiptWithRetry(l1Client, claimTx);
232
- return claimTx;
233
- }
234
- /** Canonical-mode Step B + C: build OP-Stack proof, submit on L1. */
235
- async submitCanonical(args) {
236
- const { l1Client, messengerAddress } = this.requireL1SubmitConfig();
237
- if (!this.config.optimismPortalAddress || !this.config.disputeGameFactoryAddress) {
238
- throw new Error('[jinn-claim-loop] canonical mode requires optimismPortalAddress + disputeGameFactoryAddress');
239
- }
240
- // Use retrying helper for same reason as readSnapshot — RPC eventual consistency.
241
- const receipt = await waitForTransactionReceiptWithRetry(this.config.l2Client, args.emitTxHash);
242
- const claimLog = receipt.logs.find((log) => log.address.toLowerCase() === this.config.claimEmitterAddress.toLowerCase()
243
- && log.topics[0]?.toLowerCase() === CLAIM_TICKET_TOPIC0.toLowerCase());
244
- if (!claimLog) {
245
- throw new Error(`[jinn-claim-loop] no ClaimTicket log in receipt ${args.emitTxHash}`);
246
- }
247
- const snapshot = decodeClaimTicketFromReceipt(receipt.logs, this.config.claimEmitterAddress, claimLog.logIndex ?? 0);
248
- const result = await buildCanonicalProof({
249
- l1Client,
250
- l2ProofClient: this.config.l2ProofClient ?? this.config.l2Client,
251
- targetChain: this.config.chain === 'base-sepolia' ? baseSepolia : base,
252
- optimismPortal: this.config.optimismPortalAddress,
253
- disputeGameFactory: this.config.disputeGameFactoryAddress,
254
- claimEmitter: this.config.claimEmitterAddress,
255
- }, { snapshot, l2BlockNumber: receipt.blockNumber });
256
- await verifyCanonicalClaimCanary(l1Client, messengerAddress, result.proof);
257
- // Verifier-only canary path: no L1 transaction submitted; return the L2 emit tx.
258
- return args.emitTxHash;
259
- }
260
- /**
261
- * Read the latest ClaimTicket for `serviceId` near `emitTxHash`. Bounded
262
- * to the emit block to avoid scanning the full chain on every tick.
263
- */
264
- async readSnapshot(serviceId, emitTxHash) {
265
- // Use the retrying helper because Tenderly's L2 RPC is load-balanced and
266
- // can return "receipt not found" briefly after the tx lands when the
267
- // request hits a backend that hasn't propagated the receipt yet.
268
- const receipt = await waitForTransactionReceiptWithRetry(this.config.l2Client, emitTxHash);
269
- const claimLog = receipt.logs.find((log) => log.address.toLowerCase() === this.config.claimEmitterAddress.toLowerCase()
270
- && log.topics[0]?.toLowerCase() === CLAIM_TICKET_TOPIC0.toLowerCase());
271
- if (claimLog) {
272
- const snapshot = decodeClaimTicketFromReceipt(receipt.logs, this.config.claimEmitterAddress, claimLog.logIndex ?? 0);
273
- if (snapshot.serviceId !== serviceId) {
274
- throw new Error(`[jinn-claim] ClaimTicket service ${snapshot.serviceId} does not match expected service ${serviceId}`);
275
- }
276
- return {
277
- ...snapshot,
278
- emitTxHash,
279
- emitBlockNumber: receipt.blockNumber,
280
- };
281
- }
282
- // Search a small window around the emit block.
283
- const fromBlock = receipt.blockNumber > 5n ? receipt.blockNumber - 5n : 0n;
284
- const snapshot = await fetchLatestClaimTicket(this.config.l2Client, this.config.claimEmitterAddress, serviceId, { fromBlock, toBlock: 'latest' });
285
- if (!snapshot) {
286
- throw new Error(`[jinn-claim] no ClaimTicket event for service ${serviceId} near tx ${emitTxHash}`);
287
- }
288
- return snapshot;
289
- }
290
- requireL1SubmitConfig() {
291
- if (!this.config.l1Client ||
292
- !this.config.l1Wallet ||
293
- !this.config.distributorAddress ||
294
- !this.config.messengerAddress) {
295
- throw new Error('[jinn-claim-loop] submit mode requires L1 client, L1 wallet, distributor, and messenger wiring');
296
- }
297
- return {
298
- l1Client: this.config.l1Client,
299
- l1Wallet: this.config.l1Wallet,
300
- distributorAddress: this.config.distributorAddress,
301
- messengerAddress: this.config.messengerAddress,
302
- };
303
- }
304
- /** Loop forever, sleeping `intervalMs` between ticks. */
305
- async run() {
306
- if (this.config.intervalMs <= 0)
307
- return;
308
- while (!this.stopped) {
309
- try {
310
- await this.runOnce();
311
- }
312
- catch (err) {
313
- const detail = err instanceof Error ? err.message : String(err);
314
- console.error(`[jinn-claim] Tick failed (non-fatal): ${detail}`);
315
- if (this.config.jinnStore) {
316
- emitEvent(this.config.jinnStore, {
317
- kind: 'tick_error',
318
- outcome: 'failed',
319
- detail,
320
- }, 'jinn-claim');
321
- }
322
- }
323
- this.config.jinnStore?.setConfigValue('last_jinn_claim_tick_at', new Date().toISOString());
324
- await new Promise((r) => setTimeout(r, this.config.intervalMs));
325
- }
326
- }
327
- }
328
- //# sourceMappingURL=jinn-claim-loop.js.map