@jinn-network/client 0.1.7 → 0.1.8-canary.0c159d7e

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 (326) hide show
  1. package/README.md +67 -1
  2. package/dist/adapters/mech/adapter.d.ts +19 -1
  3. package/dist/adapters/mech/adapter.js +130 -14
  4. package/dist/adapters/mech/adapter.js.map +1 -1
  5. package/dist/adapters/mech/contracts.d.ts +22 -1
  6. package/dist/adapters/mech/contracts.js +34 -24
  7. package/dist/adapters/mech/contracts.js.map +1 -1
  8. package/dist/adapters/mech/safe.d.ts +1 -1
  9. package/dist/adapters/mech/safe.js +5 -3
  10. package/dist/adapters/mech/safe.js.map +1 -1
  11. package/dist/adapters/mech/types.d.ts +6 -1
  12. package/dist/adapters/mech/types.js.map +1 -1
  13. package/dist/agent/operator-claude.js +8 -0
  14. package/dist/agent/operator-claude.js.map +1 -1
  15. package/dist/api/activity-events-endpoint.d.ts +14 -0
  16. package/dist/api/activity-events-endpoint.js +59 -0
  17. package/dist/api/activity-events-endpoint.js.map +1 -0
  18. package/dist/api/bootstrap-endpoint.d.ts +1 -2
  19. package/dist/api/bootstrap-endpoint.js +42 -24
  20. package/dist/api/bootstrap-endpoint.js.map +1 -1
  21. package/dist/api/codex-doctor-endpoint.d.ts +22 -5
  22. package/dist/api/codex-doctor-endpoint.js +136 -17
  23. package/dist/api/codex-doctor-endpoint.js.map +1 -1
  24. package/dist/api/debug-report-endpoint.d.ts +27 -0
  25. package/dist/api/debug-report-endpoint.js +157 -0
  26. package/dist/api/debug-report-endpoint.js.map +1 -0
  27. package/dist/api/discovery-endpoint.d.ts +1 -0
  28. package/dist/api/discovery-endpoint.js +24 -0
  29. package/dist/api/discovery-endpoint.js.map +1 -1
  30. package/dist/api/gather-status.d.ts +33 -0
  31. package/dist/api/gather-status.js +211 -26
  32. package/dist/api/gather-status.js.map +1 -1
  33. package/dist/api/hermes-doctor-endpoint.d.ts +15 -7
  34. package/dist/api/hermes-doctor-endpoint.js +56 -19
  35. package/dist/api/hermes-doctor-endpoint.js.map +1 -1
  36. package/dist/api/launcher-status.d.ts +4 -2
  37. package/dist/api/launcher-status.js +11 -10
  38. package/dist/api/launcher-status.js.map +1 -1
  39. package/dist/api/launcher-tasks.d.ts +1 -1
  40. package/dist/api/launcher-tasks.js +12 -8
  41. package/dist/api/launcher-tasks.js.map +1 -1
  42. package/dist/api/operator-artifacts-endpoint.js +73 -6
  43. package/dist/api/operator-artifacts-endpoint.js.map +1 -1
  44. package/dist/api/portfolio-v0-build.d.ts +7 -1
  45. package/dist/api/portfolio-v0-build.js +6 -2
  46. package/dist/api/portfolio-v0-build.js.map +1 -1
  47. package/dist/api/prediction-v1-build.d.ts +6 -0
  48. package/dist/api/prediction-v1-build.js +3 -1
  49. package/dist/api/prediction-v1-build.js.map +1 -1
  50. package/dist/api/server.d.ts +17 -0
  51. package/dist/api/server.js +40 -1
  52. package/dist/api/server.js.map +1 -1
  53. package/dist/api/setup-endpoints.d.ts +0 -9
  54. package/dist/api/setup-endpoints.js +11 -153
  55. package/dist/api/setup-endpoints.js.map +1 -1
  56. package/dist/api/solvernets-endpoints.js +30 -63
  57. package/dist/api/solvernets-endpoints.js.map +1 -1
  58. package/dist/api/status-build.d.ts +115 -2
  59. package/dist/api/status-build.js +47 -11
  60. package/dist/api/status-build.js.map +1 -1
  61. package/dist/api/status-harness-rollup.d.ts +35 -0
  62. package/dist/api/status-harness-rollup.js +45 -0
  63. package/dist/api/status-harness-rollup.js.map +1 -0
  64. package/dist/api/task-runs-build.d.ts +8 -0
  65. package/dist/api/task-runs-build.js +5 -1
  66. package/dist/api/task-runs-build.js.map +1 -1
  67. package/dist/build-info.json +4 -4
  68. package/dist/build-meta.json +1 -1
  69. package/dist/captures/live-publisher.js +24 -4
  70. package/dist/captures/live-publisher.js.map +1 -1
  71. package/dist/captures/publish.d.ts +1 -1
  72. package/dist/chain-read-errors.d.ts +12 -0
  73. package/dist/chain-read-errors.js +26 -1
  74. package/dist/chain-read-errors.js.map +1 -1
  75. package/dist/cli/commands/codedigest-revert-check.d.ts +33 -0
  76. package/dist/cli/commands/codedigest-revert-check.js +249 -0
  77. package/dist/cli/commands/codedigest-revert-check.js.map +1 -0
  78. package/dist/cli/commands/solver-nets.d.ts +1 -0
  79. package/dist/cli/commands/solver-nets.js +177 -22
  80. package/dist/cli/commands/solver-nets.js.map +1 -1
  81. package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
  82. package/dist/cli/commands/solver-plugins-block.js +118 -0
  83. package/dist/cli/commands/solver-plugins-block.js.map +1 -0
  84. package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
  85. package/dist/cli/commands/solver-plugins-feedback.js +262 -0
  86. package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
  87. package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
  88. package/dist/cli/commands/solver-plugins-read.js +259 -0
  89. package/dist/cli/commands/solver-plugins-read.js.map +1 -0
  90. package/dist/cli/commands/solver-plugins.d.ts +35 -0
  91. package/dist/cli/commands/solver-plugins.js +399 -2
  92. package/dist/cli/commands/solver-plugins.js.map +1 -1
  93. package/dist/cli/commands/tasks.js +15 -2
  94. package/dist/cli/commands/tasks.js.map +1 -1
  95. package/dist/cli/index.js +2 -0
  96. package/dist/cli/index.js.map +1 -1
  97. package/dist/cli/task-native-readiness.d.ts +7 -0
  98. package/dist/cli/task-native-readiness.js +7 -5
  99. package/dist/cli/task-native-readiness.js.map +1 -1
  100. package/dist/config.d.ts +183 -232
  101. package/dist/config.js +232 -107
  102. package/dist/config.js.map +1 -1
  103. package/dist/daemon/ai-units-gate.d.ts +54 -0
  104. package/dist/daemon/ai-units-gate.js +82 -0
  105. package/dist/daemon/ai-units-gate.js.map +1 -0
  106. package/dist/daemon/creator.js +13 -0
  107. package/dist/daemon/creator.js.map +1 -1
  108. package/dist/daemon/daemon.d.ts +10 -0
  109. package/dist/daemon/daemon.js +203 -30
  110. package/dist/daemon/daemon.js.map +1 -1
  111. package/dist/daemon/eviction-loop.d.ts +7 -0
  112. package/dist/daemon/eviction-loop.js +16 -0
  113. package/dist/daemon/eviction-loop.js.map +1 -1
  114. package/dist/daemon/gate-logger.d.ts +9 -0
  115. package/dist/daemon/gate-logger.js +2 -0
  116. package/dist/daemon/gate-logger.js.map +1 -0
  117. package/dist/daemon/jinn-claim-loop.js +22 -4
  118. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  119. package/dist/daemon/readiness-gate.d.ts +1 -4
  120. package/dist/daemon/readiness-gate.js.map +1 -1
  121. package/dist/daemon/spend-cap-gate.d.ts +40 -0
  122. package/dist/daemon/spend-cap-gate.js +46 -0
  123. package/dist/daemon/spend-cap-gate.js.map +1 -0
  124. package/dist/dashboard/assets/index-Bwn1qan1.js +351 -0
  125. package/dist/dashboard/assets/index-CzKxvMcU.css +32 -0
  126. package/dist/dashboard/index.html +2 -2
  127. package/dist/discovery/http.js +411 -2
  128. package/dist/discovery/http.js.map +1 -1
  129. package/dist/discovery/onchain.js +123 -5
  130. package/dist/discovery/onchain.js.map +1 -1
  131. package/dist/discovery/types.d.ts +202 -0
  132. package/dist/discovery/types.js +40 -0
  133. package/dist/discovery/types.js.map +1 -1
  134. package/dist/discovery/with-fallback.js +34 -0
  135. package/dist/discovery/with-fallback.js.map +1 -1
  136. package/dist/earning/bootstrap.d.ts +25 -3
  137. package/dist/earning/bootstrap.js +69 -15
  138. package/dist/earning/bootstrap.js.map +1 -1
  139. package/dist/earning/safe-adapter.js +23 -11
  140. package/dist/earning/safe-adapter.js.map +1 -1
  141. package/dist/earning/types.d.ts +6 -6
  142. package/dist/earning/viem-clients.d.ts +11 -4
  143. package/dist/earning/viem-clients.js +14 -5
  144. package/dist/earning/viem-clients.js.map +1 -1
  145. package/dist/erc8004/identity.d.ts +19 -3
  146. package/dist/erc8004/identity.js +38 -11
  147. package/dist/erc8004/identity.js.map +1 -1
  148. package/dist/erc8004/index.d.ts +1 -1
  149. package/dist/erc8004/index.js.map +1 -1
  150. package/dist/events/types.d.ts +2 -2
  151. package/dist/harnesses/cost-estimates.d.ts +10 -31
  152. package/dist/harnesses/cost-estimates.js +11 -43
  153. package/dist/harnesses/cost-estimates.js.map +1 -1
  154. package/dist/harnesses/engine/engine.d.ts +37 -4
  155. package/dist/harnesses/engine/engine.js +138 -17
  156. package/dist/harnesses/engine/engine.js.map +1 -1
  157. package/dist/harnesses/engine/persistence.d.ts +21 -4
  158. package/dist/harnesses/engine/persistence.js +43 -6
  159. package/dist/harnesses/engine/persistence.js.map +1 -1
  160. package/dist/harnesses/engine/state.d.ts +9 -0
  161. package/dist/harnesses/engine/state.js +23 -10
  162. package/dist/harnesses/engine/state.js.map +1 -1
  163. package/dist/harnesses/impls/hermes-agent/bootstrap.js +4 -2
  164. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  165. package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +1 -1
  166. package/dist/harnesses/impls/hermes-agent/config-builder.js +4 -2
  167. package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -1
  168. package/dist/harnesses/impls/hermes-agent/harness.d.ts +14 -0
  169. package/dist/harnesses/impls/hermes-agent/harness.js +16 -2
  170. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  171. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
  172. package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
  173. package/dist/harnesses/impls/learner/adapters/claude-code.d.ts +17 -0
  174. package/dist/harnesses/impls/learner/adapters/claude-code.js +113 -14
  175. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
  176. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
  177. package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
  178. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  179. package/dist/harnesses/impls/learner/harness.d.ts +24 -0
  180. package/dist/harnesses/impls/learner/harness.js +27 -3
  181. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  182. package/dist/harnesses/impls/learner/harvest.d.ts +1 -1
  183. package/dist/harnesses/impls/learner/harvest.js +23 -5
  184. package/dist/harnesses/impls/learner/harvest.js.map +1 -1
  185. package/dist/harnesses/impls/learner/restoration-patch.d.ts +2 -2
  186. package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
  187. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
  188. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +21 -1
  189. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  190. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
  191. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
  192. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  193. package/dist/harnesses/readiness-registry.d.ts +7 -0
  194. package/dist/harnesses/readiness-registry.js +9 -0
  195. package/dist/harnesses/readiness-registry.js.map +1 -1
  196. package/dist/learner/revert-decision.d.ts +59 -0
  197. package/dist/learner/revert-decision.js +53 -0
  198. package/dist/learner/revert-decision.js.map +1 -0
  199. package/dist/learner/revert-stats.d.ts +24 -0
  200. package/dist/learner/revert-stats.js +44 -0
  201. package/dist/learner/revert-stats.js.map +1 -0
  202. package/dist/main.js +178 -104
  203. package/dist/main.js.map +1 -1
  204. package/dist/mcp/get-codedigest-reward.d.ts +13 -0
  205. package/dist/mcp/get-codedigest-reward.js +23 -0
  206. package/dist/mcp/get-codedigest-reward.js.map +1 -0
  207. package/dist/mcp/server.js +23 -0
  208. package/dist/mcp/server.js.map +1 -1
  209. package/dist/observability/debug-report-assemble.d.ts +43 -0
  210. package/dist/observability/debug-report-assemble.js +80 -0
  211. package/dist/observability/debug-report-assemble.js.map +1 -0
  212. package/dist/observability/emit-event.d.ts +9 -2
  213. package/dist/observability/emit-event.js +36 -2
  214. package/dist/observability/emit-event.js.map +1 -1
  215. package/dist/observability/file-logger.d.ts +69 -0
  216. package/dist/observability/file-logger.js +177 -0
  217. package/dist/observability/file-logger.js.map +1 -0
  218. package/dist/observability/redact-secrets.d.ts +65 -0
  219. package/dist/observability/redact-secrets.js +300 -0
  220. package/dist/observability/redact-secrets.js.map +1 -0
  221. package/dist/observability/tar.d.ts +30 -0
  222. package/dist/observability/tar.js +102 -0
  223. package/dist/observability/tar.js.map +1 -0
  224. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +18 -1
  225. package/dist/plugins/learner/skills/learn/promoter-prompt.md +72 -1
  226. package/dist/preflight/pidfile-liveness.d.ts +44 -0
  227. package/dist/preflight/pidfile-liveness.js +103 -0
  228. package/dist/preflight/pidfile-liveness.js.map +1 -0
  229. package/dist/preflight/rpc-network.d.ts +40 -0
  230. package/dist/preflight/rpc-network.js +67 -1
  231. package/dist/preflight/rpc-network.js.map +1 -1
  232. package/dist/rpc/transport.d.ts +109 -0
  233. package/dist/rpc/transport.js +220 -0
  234. package/dist/rpc/transport.js.map +1 -0
  235. package/dist/scripts/donation-consumption-acceptance.js +7 -28
  236. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  237. package/dist/scripts/swe-rebench-v2-pytest-missing.json +16 -0
  238. package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
  239. package/dist/solver-nets/prediction-operator-ux.js +56 -53
  240. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  241. package/dist/solver-nets/registry.d.ts +19 -1
  242. package/dist/solver-nets/registry.js +37 -24
  243. package/dist/solver-nets/registry.js.map +1 -1
  244. package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
  245. package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
  246. package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
  247. package/dist/solver-types/_swe-rebench-v2-state.d.ts +15 -0
  248. package/dist/solver-types/_swe-rebench-v2-state.js +19 -0
  249. package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
  250. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +116 -2
  251. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +296 -21
  252. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  253. package/dist/solver-types/swe-rebench-v2-auto.d.ts +20 -11
  254. package/dist/solver-types/swe-rebench-v2-auto.js +64 -19
  255. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  256. package/dist/solver-types/swe-rebench-v2.d.ts +8 -2
  257. package/dist/solver-types/swe-rebench-v2.js +127 -11
  258. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  259. package/dist/solvernets/daemon-init.d.ts +1 -1
  260. package/dist/solvernets/daemon-init.js +19 -4
  261. package/dist/solvernets/daemon-init.js.map +1 -1
  262. package/dist/solvernets/launched-record-dispatcher.d.ts +4 -0
  263. package/dist/solvernets/launched-record-dispatcher.js +10 -4
  264. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  265. package/dist/solvernets/registry-client-erc8004.js +11 -0
  266. package/dist/solvernets/registry-client-erc8004.js.map +1 -1
  267. package/dist/solvernets/store.d.ts +2 -2
  268. package/dist/spend/ai-units-config.d.ts +39 -0
  269. package/dist/spend/ai-units-config.js +28 -0
  270. package/dist/spend/ai-units-config.js.map +1 -0
  271. package/dist/spend/ai-units.d.ts +89 -0
  272. package/dist/spend/ai-units.js +156 -0
  273. package/dist/spend/ai-units.js.map +1 -0
  274. package/dist/spend/cost-surface-status.d.ts +12 -0
  275. package/dist/spend/cost-surface-status.js +24 -0
  276. package/dist/spend/cost-surface-status.js.map +1 -0
  277. package/dist/spend/credential.d.ts +39 -0
  278. package/dist/spend/credential.js +71 -0
  279. package/dist/spend/credential.js.map +1 -0
  280. package/dist/spend/daemon-config.d.ts +13 -0
  281. package/dist/spend/daemon-config.js +24 -0
  282. package/dist/spend/daemon-config.js.map +1 -0
  283. package/dist/spend/pricing.d.ts +16 -0
  284. package/dist/spend/pricing.js +26 -0
  285. package/dist/spend/pricing.js.map +1 -0
  286. package/dist/spend/record.d.ts +13 -0
  287. package/dist/spend/record.js +36 -0
  288. package/dist/spend/record.js.map +1 -0
  289. package/dist/spend/usage.d.ts +27 -0
  290. package/dist/spend/usage.js +113 -0
  291. package/dist/spend/usage.js.map +1 -0
  292. package/dist/store/store.d.ts +101 -0
  293. package/dist/store/store.js +304 -4
  294. package/dist/store/store.js.map +1 -1
  295. package/dist/trajectory/transcript-parsers/codex-session.d.ts +12 -6
  296. package/dist/trajectory/transcript-parsers/codex-session.js +114 -13
  297. package/dist/trajectory/transcript-parsers/codex-session.js.map +1 -1
  298. package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
  299. package/dist/trajectory/transcript-session-dirs.d.ts +18 -0
  300. package/dist/trajectory/transcript-session-dirs.js +85 -0
  301. package/dist/trajectory/transcript-session-dirs.js.map +1 -0
  302. package/dist/trajectory/transcript-watcher.d.ts +20 -1
  303. package/dist/trajectory/transcript-watcher.js +108 -32
  304. package/dist/trajectory/transcript-watcher.js.map +1 -1
  305. package/dist/tx-retry.d.ts +25 -0
  306. package/dist/tx-retry.js +95 -7
  307. package/dist/tx-retry.js.map +1 -1
  308. package/dist/types/payloads/portfolio-v0.d.ts +3 -3
  309. package/dist/types/payloads/prediction-apy-v0.d.ts +3 -3
  310. package/dist/types/payloads/prediction-v0.d.ts +12 -12
  311. package/package.json +11 -3
  312. package/plugins/learner/skills/learn/consolidator-prompt.md +18 -1
  313. package/plugins/learner/skills/learn/promoter-prompt.md +72 -1
  314. package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
  315. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
  316. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
  317. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
  318. package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
  319. package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
  320. package/plugins/swe-rebench-v2-runtime/README.md +6 -6
  321. package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
  322. package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +81 -0
  323. package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
  324. package/dist/dashboard/assets/index-blqc7eqq.css +0 -32
  325. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
  326. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
@@ -9,6 +9,46 @@
9
9
  *
10
10
  * Spec: spec/2026-05-11-discovery-api-and-shared-indexer.md §5.
11
11
  */
12
+ /**
13
+ * Block-window thresholds for `getTaskPostCounts`, from Base's ~2s blocktime:
14
+ * 1h≈1800, 6h≈10800, 24h≈43200 blocks back from the window head. Shared by the
15
+ * HTTP and on-chain backings so they bucket identically. The windows nest
16
+ * (h1 ⊆ h6 ⊆ h24); the 24h figure also bounds the on-chain scan range.
17
+ */
18
+ export const TASK_POST_WINDOW_BLOCKS = { h1: 1_800, h6: 10_800, h24: 43_200 };
19
+ /**
20
+ * Bucket a stream of TaskCreated events into chain-wide + per-cid
21
+ * `TaskPostCounts`, shared by both DiscoveryAPI backings. `events` carry a
22
+ * `block` (number) and lowercased manifest `digest`; `cidByDigest` maps each
23
+ * requested digest to its cid. Counts nest (h1 ⊆ h6 ⊆ h24); events older than
24
+ * the 24h cut are ignored.
25
+ */
26
+ export function bucketTaskPostCounts(windowEndBlock, windowEndTs, events, cidByDigest) {
27
+ const h1Cut = windowEndBlock - TASK_POST_WINDOW_BLOCKS.h1;
28
+ const h6Cut = windowEndBlock - TASK_POST_WINDOW_BLOCKS.h6;
29
+ const h24Cut = windowEndBlock - TASK_POST_WINDOW_BLOCKS.h24;
30
+ const blank = () => ({ h1: 0, h6: 0, h24: 0, windowEndBlock, windowEndTs });
31
+ const chain = blank();
32
+ const byCid = {};
33
+ for (const cid of cidByDigest.values())
34
+ byCid[cid] = blank();
35
+ const bucket = (target, block) => {
36
+ if (block < h24Cut)
37
+ return;
38
+ target.h24 += 1;
39
+ if (block >= h6Cut)
40
+ target.h6 += 1;
41
+ if (block >= h1Cut)
42
+ target.h1 += 1;
43
+ };
44
+ for (const e of events) {
45
+ bucket(chain, e.block);
46
+ const cid = cidByDigest.get(e.digest);
47
+ if (cid)
48
+ bucket(byCid[cid], e.block);
49
+ }
50
+ return { chain, byCid };
51
+ }
12
52
  export class DiscoveryUnavailableError extends Error {
13
53
  cause;
14
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkRH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAChC,KAAK,CAAW;IAClC;;;;OAIG;IACM,IAAI,CAA4B;IAEzC,YAAY,OAAe,EAAE,KAAe,EAAE,IAA+B;QAC3E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0LH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAW,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,cAAsB,EACtB,WAAmB,EACnB,MAAgD,EAChD,WAAgC;IAEhC,MAAM,KAAK,GAAG,cAAc,GAAG,uBAAuB,CAAC,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,cAAc,GAAG,uBAAuB,CAAC,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,cAAc,GAAG,uBAAuB,CAAC,GAAG,CAAC;IAE5D,MAAM,KAAK,GAAG,GAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;IACtB,MAAM,KAAK,GAAmC,EAAE,CAAC;IACjD,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;IAE7D,MAAM,MAAM,GAAG,CAAC,MAAsB,EAAE,KAAa,EAAQ,EAAE;QAC7D,IAAI,KAAK,GAAG,MAAM;YAAE,OAAO;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,IAAI,KAAK,IAAI,KAAK;YAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,KAAK;YAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,GAAG;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAiRD,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAChC,KAAK,CAAW;IAClC;;;;OAIG;IACM,IAAI,CAA4B;IAEzC,YAAY,OAAe,EAAE,KAAe,EAAE,IAA+B;QAC3E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -167,6 +167,40 @@ export function withFallback(primary, floor, opts = {}) {
167
167
  listBuilderArtifacts(args) {
168
168
  return dispatch(() => primary.listBuilderArtifacts(args), () => floor.listBuilderArtifacts(args));
169
169
  },
170
+ getInstanceSuccessCounts(args) {
171
+ // Never fall through to the floor for this method — an empty Map from
172
+ // the floor is indistinguishable from "all instances have 0 successes",
173
+ // which is the under-count bug this method was introduced to fix (#669).
174
+ // If the primary is degraded, propagate the error so the launcher aborts
175
+ // its tick rather than silently posting against local-only counters.
176
+ // The DiscoveryAPI.getInstanceSuccessCounts JSDoc encodes this contract
177
+ // ("callers MUST NOT silently fall through to local-only counts").
178
+ return primary.getInstanceSuccessCounts(args);
179
+ },
180
+ getCodeDigestRewards(args) {
181
+ // Never fall through to the floor — an empty array from the floor is
182
+ // indistinguishable from "no successes", the exact failure mode #764's
183
+ // revert logic must avoid. Propagate the error so the Consolidator skips
184
+ // reverts on degraded data (substrate-incident policy; mirrors #669).
185
+ return primary.getCodeDigestRewards(args);
186
+ },
187
+ getInstanceClaimCounts(args) {
188
+ // Never fall through to the floor for this method — a *successful* empty
189
+ // Map from the floor is indistinguishable from "every task has 0 consumed
190
+ // slots", so on a real outage it would mask exhaustion: exhausted
191
+ // postings would classify `live`, their reposts would be suppressed, and
192
+ // the SolverNet would under-serve N (#802, mirroring the #669 contract on
193
+ // getInstanceSuccessCounts). Propagate the error so the launcher aborts
194
+ // its tick rather than treating absent data as truth.
195
+ return primary.getInstanceClaimCounts(args);
196
+ },
197
+ getTaskPostCounts(args) {
198
+ // Supply signal (not a correctness gate): fall through to the floor on an
199
+ // indexer outage like getSolverNetOperatorCount. The on-chain floor
200
+ // reconstructs the windowed counts directly from TaskCreated logs, so a
201
+ // floor result is meaningful (unlike the abort-on-outage methods above).
202
+ return dispatch(() => primary.getTaskPostCounts(args), () => floor.getTaskPostCounts(args));
203
+ },
170
204
  };
171
205
  }
172
206
  //# sourceMappingURL=with-fallback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-fallback.js","sourceRoot":"","sources":["../../src/discovery/with-fallback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"with-fallback.js","sourceRoot":"","sources":["../../src/discovery/with-fallback.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@
4
4
  * Phase 1 (master): generate mnemonic → fund master EOA
5
5
  * Phase 2 (per-service): derive agent → stake → deploy mech
6
6
  */
7
+ import { type Hex } from 'viem';
7
8
  import type { FleetState, FleetBootstrapResult, StakingMode } from './types.js';
8
9
  import { requestTestnetFunding } from './faucet.js';
9
10
  import { type JinnOnchainNetwork } from './viem-clients.js';
@@ -132,8 +133,9 @@ export interface FleetBootstrapperOptions {
132
133
  /** Optional Safe ETH target override (wei). */
133
134
  minSafeEthWei?: string;
134
135
  /**
135
- * When `masterEthDailyEstimateWei` is unset, blends a conservative daily estimate
136
- * from poll frequency (config.pollIntervalMs).
136
+ * Daemon poll interval. Currently unused by the master-daily-estimate path
137
+ * (the poll-based blend was removed in #288); kept on the options bag so
138
+ * existing callers compile unchanged.
137
139
  */
138
140
  pollIntervalMs?: number;
139
141
  /**
@@ -209,7 +211,11 @@ export declare class FleetBootstrapper {
209
211
  */
210
212
  private bindAgentWalletWithRetry;
211
213
  /**
212
- * Conservative daily master gas (wei): max(DEFAULT, rough tx count from poll interval × cost).
214
+ * Conservative daily master gas (wei). Returns the floor; operators who
215
+ * want a more aggressive estimate can still set `JINN_MASTER_ETH_DAILY_WEI`.
216
+ * See DEFAULT_MASTER_ETH_DAILY_WEI for rationale (#288). The
217
+ * `pollIntervalMs` parameter is vestigial since the poll-based blend was
218
+ * removed; kept so the constructor call site stays unchanged.
213
219
  */
214
220
  private estimateMasterDailyGasWei;
215
221
  /**
@@ -366,6 +372,22 @@ export interface RecoverEvictedServiceOptions {
366
372
  chain: JinnOnchainNetwork;
367
373
  mnemonic: string;
368
374
  }
375
+ /**
376
+ * Inspect a mined reStake receipt and log the correct outcome (#916).
377
+ *
378
+ * Pure + I/O-free so it can be unit-tested without a chain client. On a
379
+ * `success` receipt it logs `reStake confirmed`. On a `reverted` receipt it
380
+ * logs `reStake reverted` at error level (with the decoded reason if the
381
+ * caller could obtain one) and throws so the recovery attempt re-queues.
382
+ */
383
+ export declare function handleReStakeReceipt(args: {
384
+ receipt: {
385
+ status: 'success' | 'reverted';
386
+ };
387
+ serviceDisplayIndex: number;
388
+ reStakeHash: Hex;
389
+ revertReason?: string;
390
+ }): void;
369
391
  /**
370
392
  * Re-stake an evicted service by calling `distributor.reStake(stakingProxy, serviceId)`.
371
393
  *
@@ -17,6 +17,7 @@ import { previousSafeBeingAbandoned, sweepOrphanedServiceFunds, } from './orphan
17
17
  import { DEFAULT_FAUCET_LOOP_TIMEOUT_MS, computeFaucetDripCap, requestTestnetFunding, } from './faucet.js';
18
18
  import { flattenErrorMessage, sleep, viemSendTransactionWithRetry, waitForContractCode, waitForTransactionReceiptWithRetry, } from '../tx-retry.js';
19
19
  import { isUnauthorizedAccountError } from '../errors/unauthorized-account.js';
20
+ import { formatKnownRevert } from '../adapters/mech/safe-revert.js';
20
21
  import { createJinnPublicClient, createJinnWalletClient } from './viem-clients.js';
21
22
  import { isTransientEthReadError } from '../chain-read-errors.js';
22
23
  import { nextFleetServiceIndex } from './next-service-index.js';
@@ -148,8 +149,17 @@ export function stage1MinMasterEth(config, targetServices = 1) {
148
149
  config.minEoaGasEth * STANDARD_MASTER_BOOTSTRAP_MULTIPLIER +
149
150
  extraServiceTransfers);
150
151
  }
151
- /** Conservative default: ~0.001 ETH/day master gas if not configured. */
152
- const DEFAULT_MASTER_ETH_DAILY_WEI = 1000000000000000n;
152
+ /**
153
+ * Conservative default: ~0.0005 ETH/day master gas if not configured.
154
+ *
155
+ * Post-bootstrap master burn is dominated by rare BalanceTopupLoop top-ups,
156
+ * not every-poll activity — the previous 0.001 ETH/day floor (alongside a
157
+ * poll-based blend, since removed) over-estimated steady-state burn and
158
+ * surfaced a misleading "1 days runway" dashboard reading at ~0.008 ETH
159
+ * balances (#288). Mirrored at client/src/api/status-build.ts; collapsing
160
+ * the two copies is a deferred follow-up per the #288 design note.
161
+ */
162
+ const DEFAULT_MASTER_ETH_DAILY_WEI = 500000000000000n;
153
163
  /** Warn when ETH above the minimum would last fewer than this many days at the daily estimate. */
154
164
  const MASTER_ETH_RUNWAY_WARN_DAYS = 7n;
155
165
  /**
@@ -294,16 +304,14 @@ export class FleetBootstrapper {
294
304
  : new Error(String(lastThrowError));
295
305
  }
296
306
  /**
297
- * Conservative daily master gas (wei): max(DEFAULT, rough tx count from poll interval × cost).
307
+ * Conservative daily master gas (wei). Returns the floor; operators who
308
+ * want a more aggressive estimate can still set `JINN_MASTER_ETH_DAILY_WEI`.
309
+ * See DEFAULT_MASTER_ETH_DAILY_WEI for rationale (#288). The
310
+ * `pollIntervalMs` parameter is vestigial since the poll-based blend was
311
+ * removed; kept so the constructor call site stays unchanged.
298
312
  */
299
- estimateMasterDailyGasWei(pollIntervalMs) {
300
- const interval = Math.max(pollIntervalMs ?? 5000, 1000);
301
- const pollsPerDay = 86400000 / interval;
302
- // Assume at most one funding-sized tx per ~600 polls (~50 min at 5s), capped at 12/day
303
- const txsPerDay = Math.min(Math.ceil(pollsPerDay / 600), 12);
304
- const txCostWei = 150000n * 2000000000n; // ~150k gas @ 2 gwei
305
- const fromPoll = BigInt(txsPerDay) * txCostWei;
306
- return fromPoll > DEFAULT_MASTER_ETH_DAILY_WEI ? fromPoll : DEFAULT_MASTER_ETH_DAILY_WEI;
313
+ estimateMasterDailyGasWei(_pollIntervalMs) {
314
+ return DEFAULT_MASTER_ETH_DAILY_WEI;
307
315
  }
308
316
  /**
309
317
  * Snapshot of the current persisted fleet state. Reads only — no chain
@@ -1041,8 +1049,24 @@ export class FleetBootstrapper {
1041
1049
  }
1042
1050
  if (onChainState === 2) {
1043
1051
  console.error(`[jinn-earning] Noticed service ${svc.service_id} (fleet index ${index}) evicted on-chain; running distributor reStake to restake.`);
1044
- state = await this.recoverEvictedService(state, mnemonic, index);
1045
- svc = state.services.find(s => s.index === index);
1052
+ // #789: a startup reStake can revert (e.g. NotEnoughTimeStaked when the
1053
+ // service was re-staked < minStakingDuration ago) or fail transiently.
1054
+ // Treat it as non-fatal so the daemon still launches — work delivery and
1055
+ // JINN claims are decoupled from OLAS staking (JinnDistributor mints on
1056
+ // delivered-work counts, not stake state), so a failed startup reStake
1057
+ // must not block the operator from earning. The standalone EvictionLoop
1058
+ // retries on its own cadence when enabled; when staking is intentionally
1059
+ // dropped (evictionCheckIntervalMs=0) this simply leaves the service
1060
+ // evicted, which does not affect JINN earning.
1061
+ try {
1062
+ state = await this.recoverEvictedService(state, mnemonic, index);
1063
+ svc = state.services.find(s => s.index === index);
1064
+ }
1065
+ catch (err) {
1066
+ console.error(`[jinn-earning] Service ${svc.service_id} (fleet index ${index}) startup reStake failed (non-fatal); ` +
1067
+ `continuing launch and deferring to EvictionLoop if enabled: ` +
1068
+ `${err instanceof Error ? err.message : String(err)}`);
1069
+ }
1046
1070
  }
1047
1071
  }
1048
1072
  if (isOperationalServiceStep(svc.step)) {
@@ -1991,6 +2015,24 @@ export class FleetBootstrapper {
1991
2015
  }
1992
2016
  /** @deprecated Use FleetBootstrapper */
1993
2017
  export const EarningBootstrapper = FleetBootstrapper;
2018
+ /**
2019
+ * Inspect a mined reStake receipt and log the correct outcome (#916).
2020
+ *
2021
+ * Pure + I/O-free so it can be unit-tested without a chain client. On a
2022
+ * `success` receipt it logs `reStake confirmed`. On a `reverted` receipt it
2023
+ * logs `reStake reverted` at error level (with the decoded reason if the
2024
+ * caller could obtain one) and throws so the recovery attempt re-queues.
2025
+ */
2026
+ export function handleReStakeReceipt(args) {
2027
+ const { receipt, serviceDisplayIndex, reStakeHash, revertReason } = args;
2028
+ if (receipt.status === 'success') {
2029
+ console.error(`[eviction-recovery] Service ${serviceDisplayIndex}: reStake confirmed (tx: ${reStakeHash})`);
2030
+ return;
2031
+ }
2032
+ const msg = `[eviction-recovery] Service ${serviceDisplayIndex}: reStake reverted (tx: ${reStakeHash}, reason: ${revertReason ?? 'unavailable'})`;
2033
+ console.error(msg);
2034
+ throw new Error(msg);
2035
+ }
1994
2036
  /**
1995
2037
  * Re-stake an evicted service by calling `distributor.reStake(stakingProxy, serviceId)`.
1996
2038
  *
@@ -2032,9 +2074,21 @@ export async function recoverEvictedService(opts) {
2032
2074
  throw err;
2033
2075
  }
2034
2076
  const receipt = await waitForTransactionReceiptWithRetry(publicClient, reStakeHash);
2077
+ let revertReason;
2035
2078
  if (receipt.status !== 'success') {
2036
- throw new Error(`reStake failed for service ${serviceDisplayIndex}: ${reStakeHash}`);
2079
+ // Best-effort: replay the call at the mined block to decode the revert.
2080
+ try {
2081
+ await publicClient.call({
2082
+ account: masterAccount,
2083
+ to: addr(distributorAddress),
2084
+ data: reStakeData,
2085
+ blockNumber: receipt.blockNumber,
2086
+ });
2087
+ }
2088
+ catch (err) {
2089
+ revertReason = formatKnownRevert(err) ?? flattenErrorMessage(err);
2090
+ }
2037
2091
  }
2038
- console.error(`[eviction-recovery] Service ${serviceDisplayIndex}: reStake confirmed (tx: ${reStakeHash})`);
2092
+ handleReStakeReceipt({ receipt, serviceDisplayIndex, reStakeHash, revertReason });
2039
2093
  }
2040
2094
  //# sourceMappingURL=bootstrap.js.map