@jinn-network/client 0.1.6 → 0.1.7-canary.08ebd916

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 (390) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +67 -1
  3. package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +23 -4
  4. package/deployments/deployment-jinn-mvi-l1-sepolia.json +23 -4
  5. package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +5 -4
  6. package/dist/adapters/mech/adapter.d.ts +38 -2
  7. package/dist/adapters/mech/adapter.js +269 -62
  8. package/dist/adapters/mech/adapter.js.map +1 -1
  9. package/dist/adapters/mech/contracts.d.ts +17 -4
  10. package/dist/adapters/mech/contracts.js +8 -2
  11. package/dist/adapters/mech/contracts.js.map +1 -1
  12. package/dist/adapters/mech/safe-revert.d.ts +20 -0
  13. package/dist/adapters/mech/safe-revert.js +12 -4
  14. package/dist/adapters/mech/safe-revert.js.map +1 -1
  15. package/dist/adapters/mech/safe.d.ts +6 -2
  16. package/dist/adapters/mech/safe.js +32 -11
  17. package/dist/adapters/mech/safe.js.map +1 -1
  18. package/dist/adapters/mech/types.d.ts +6 -1
  19. package/dist/adapters/mech/types.js.map +1 -1
  20. package/dist/adapters/mech/verdict-code.d.ts +1 -0
  21. package/dist/adapters/mech/verdict-code.js +18 -0
  22. package/dist/adapters/mech/verdict-code.js.map +1 -1
  23. package/dist/agent/operator-claude.js +8 -0
  24. package/dist/agent/operator-claude.js.map +1 -1
  25. package/dist/api/activity-events-endpoint.d.ts +14 -0
  26. package/dist/api/activity-events-endpoint.js +59 -0
  27. package/dist/api/activity-events-endpoint.js.map +1 -0
  28. package/dist/api/admin-endpoint.d.ts +15 -3
  29. package/dist/api/admin-endpoint.js +24 -2
  30. package/dist/api/admin-endpoint.js.map +1 -1
  31. package/dist/api/bootstrap-endpoint.d.ts +1 -2
  32. package/dist/api/bootstrap-endpoint.js +85 -18
  33. package/dist/api/bootstrap-endpoint.js.map +1 -1
  34. package/dist/api/codex-doctor-endpoint.d.ts +90 -0
  35. package/dist/api/codex-doctor-endpoint.js +296 -0
  36. package/dist/api/codex-doctor-endpoint.js.map +1 -0
  37. package/dist/api/discovery-endpoint.d.ts +1 -0
  38. package/dist/api/discovery-endpoint.js +26 -0
  39. package/dist/api/discovery-endpoint.js.map +1 -1
  40. package/dist/api/fleet-build.d.ts +1 -0
  41. package/dist/api/fleet-build.js +2 -1
  42. package/dist/api/fleet-build.js.map +1 -1
  43. package/dist/api/gather-status.d.ts +37 -0
  44. package/dist/api/gather-status.js +572 -19
  45. package/dist/api/gather-status.js.map +1 -1
  46. package/dist/api/hermes-doctor-endpoint.d.ts +128 -3
  47. package/dist/api/hermes-doctor-endpoint.js +265 -22
  48. package/dist/api/hermes-doctor-endpoint.js.map +1 -1
  49. package/dist/api/launcher-status.d.ts +25 -17
  50. package/dist/api/launcher-status.js +13 -11
  51. package/dist/api/launcher-status.js.map +1 -1
  52. package/dist/api/launcher-tasks.d.ts +1 -1
  53. package/dist/api/launcher-tasks.js +12 -8
  54. package/dist/api/launcher-tasks.js.map +1 -1
  55. package/dist/api/operator-artifacts-endpoint.js +73 -6
  56. package/dist/api/operator-artifacts-endpoint.js.map +1 -1
  57. package/dist/api/portfolio-v0-build.d.ts +10 -0
  58. package/dist/api/portfolio-v0-build.js +24 -5
  59. package/dist/api/portfolio-v0-build.js.map +1 -1
  60. package/dist/api/prediction-v1-build.d.ts +10 -0
  61. package/dist/api/prediction-v1-build.js +7 -1
  62. package/dist/api/prediction-v1-build.js.map +1 -1
  63. package/dist/api/server.d.ts +31 -1
  64. package/dist/api/server.js +95 -2
  65. package/dist/api/server.js.map +1 -1
  66. package/dist/api/setup-endpoints.d.ts +16 -0
  67. package/dist/api/setup-endpoints.js +89 -135
  68. package/dist/api/setup-endpoints.js.map +1 -1
  69. package/dist/api/setup-retry-endpoint.d.ts +19 -0
  70. package/dist/api/setup-retry-endpoint.js +32 -0
  71. package/dist/api/setup-retry-endpoint.js.map +1 -0
  72. package/dist/api/solvernets-endpoints.d.ts +8 -0
  73. package/dist/api/solvernets-endpoints.js +99 -60
  74. package/dist/api/solvernets-endpoints.js.map +1 -1
  75. package/dist/api/status-build.d.ts +168 -2
  76. package/dist/api/status-build.js +116 -27
  77. package/dist/api/status-build.js.map +1 -1
  78. package/dist/api/status-harness-rollup.d.ts +35 -0
  79. package/dist/api/status-harness-rollup.js +45 -0
  80. package/dist/api/status-harness-rollup.js.map +1 -0
  81. package/dist/api/task-run-routing.d.ts +7 -0
  82. package/dist/api/task-run-routing.js +12 -0
  83. package/dist/api/task-run-routing.js.map +1 -0
  84. package/dist/api/task-runs-build.d.ts +21 -0
  85. package/dist/api/task-runs-build.js +14 -1
  86. package/dist/api/task-runs-build.js.map +1 -1
  87. package/dist/build-info.json +4 -4
  88. package/dist/build-meta.json +1 -1
  89. package/dist/captures/live-publisher.js +24 -4
  90. package/dist/captures/live-publisher.js.map +1 -1
  91. package/dist/captures/publish.d.ts +1 -1
  92. package/dist/chain-read-errors.d.ts +10 -0
  93. package/dist/chain-read-errors.js +15 -0
  94. package/dist/chain-read-errors.js.map +1 -1
  95. package/dist/cli/commands/auth.js +1 -1
  96. package/dist/cli/commands/auth.js.map +1 -1
  97. package/dist/cli/commands/create.js +3 -2
  98. package/dist/cli/commands/create.js.map +1 -1
  99. package/dist/cli/commands/doctor.d.ts +2 -0
  100. package/dist/cli/commands/doctor.js +2 -0
  101. package/dist/cli/commands/doctor.js.map +1 -1
  102. package/dist/cli/commands/rewards.js +11 -7
  103. package/dist/cli/commands/rewards.js.map +1 -1
  104. package/dist/cli/commands/solver-nets.js +101 -15
  105. package/dist/cli/commands/solver-nets.js.map +1 -1
  106. package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
  107. package/dist/cli/commands/solver-plugins-block.js +118 -0
  108. package/dist/cli/commands/solver-plugins-block.js.map +1 -0
  109. package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
  110. package/dist/cli/commands/solver-plugins-feedback.js +262 -0
  111. package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
  112. package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
  113. package/dist/cli/commands/solver-plugins-read.js +259 -0
  114. package/dist/cli/commands/solver-plugins-read.js.map +1 -0
  115. package/dist/cli/commands/solver-plugins.d.ts +35 -0
  116. package/dist/cli/commands/solver-plugins.js +399 -2
  117. package/dist/cli/commands/solver-plugins.js.map +1 -1
  118. package/dist/cli/commands/status.js +1 -1
  119. package/dist/cli/commands/status.js.map +1 -1
  120. package/dist/cli/commands/tasks.js +101 -11
  121. package/dist/cli/commands/tasks.js.map +1 -1
  122. package/dist/cli/commands/update.d.ts +10 -0
  123. package/dist/cli/commands/update.js +36 -0
  124. package/dist/cli/commands/update.js.map +1 -1
  125. package/dist/cli/introspection-context.js +5 -0
  126. package/dist/cli/introspection-context.js.map +1 -1
  127. package/dist/cli/task-native-readiness.d.ts +10 -1
  128. package/dist/cli/task-native-readiness.js +30 -6
  129. package/dist/cli/task-native-readiness.js.map +1 -1
  130. package/dist/config.d.ts +273 -235
  131. package/dist/config.js +305 -114
  132. package/dist/config.js.map +1 -1
  133. package/dist/daemon/checkpoint-loop.d.ts +48 -0
  134. package/dist/daemon/checkpoint-loop.js +76 -0
  135. package/dist/daemon/checkpoint-loop.js.map +1 -0
  136. package/dist/daemon/creator.d.ts +1 -1
  137. package/dist/daemon/creator.js +7 -3
  138. package/dist/daemon/creator.js.map +1 -1
  139. package/dist/daemon/daemon.d.ts +22 -0
  140. package/dist/daemon/daemon.js +156 -23
  141. package/dist/daemon/daemon.js.map +1 -1
  142. package/dist/daemon/eviction-loop.d.ts +40 -0
  143. package/dist/daemon/eviction-loop.js +67 -0
  144. package/dist/daemon/eviction-loop.js.map +1 -0
  145. package/dist/daemon/gate-logger.d.ts +9 -0
  146. package/dist/daemon/gate-logger.js +2 -0
  147. package/dist/daemon/gate-logger.js.map +1 -0
  148. package/dist/daemon/jinn-claim-loop-wiring.d.ts +33 -0
  149. package/dist/daemon/jinn-claim-loop-wiring.js +40 -0
  150. package/dist/daemon/jinn-claim-loop-wiring.js.map +1 -0
  151. package/dist/daemon/jinn-claim-loop.d.ts +24 -17
  152. package/dist/daemon/jinn-claim-loop.js +77 -23
  153. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  154. package/dist/daemon/readiness-gate.d.ts +1 -4
  155. package/dist/daemon/readiness-gate.js.map +1 -1
  156. package/dist/daemon/skip-log-dedup.d.ts +69 -0
  157. package/dist/daemon/skip-log-dedup.js +106 -0
  158. package/dist/daemon/skip-log-dedup.js.map +1 -0
  159. package/dist/daemon/spend-cap-gate.d.ts +40 -0
  160. package/dist/daemon/spend-cap-gate.js +46 -0
  161. package/dist/daemon/spend-cap-gate.js.map +1 -0
  162. package/dist/dashboard/assets/index-C4huIsUW.css +32 -0
  163. package/dist/dashboard/assets/index-DkTglWXU.js +345 -0
  164. package/dist/dashboard/index.html +2 -2
  165. package/dist/discovery/factory.d.ts +17 -5
  166. package/dist/discovery/factory.js +46 -18
  167. package/dist/discovery/factory.js.map +1 -1
  168. package/dist/discovery/http.js +216 -3
  169. package/dist/discovery/http.js.map +1 -1
  170. package/dist/discovery/onchain.d.ts +5 -0
  171. package/dist/discovery/onchain.js +418 -15
  172. package/dist/discovery/onchain.js.map +1 -1
  173. package/dist/discovery/types.d.ts +75 -1
  174. package/dist/discovery/types.js +8 -10
  175. package/dist/discovery/types.js.map +1 -1
  176. package/dist/discovery/with-fallback.d.ts +7 -0
  177. package/dist/discovery/with-fallback.js +20 -0
  178. package/dist/discovery/with-fallback.js.map +1 -1
  179. package/dist/earning/bootstrap.d.ts +100 -4
  180. package/dist/earning/bootstrap.js +221 -74
  181. package/dist/earning/bootstrap.js.map +1 -1
  182. package/dist/earning/contracts.d.ts +14 -0
  183. package/dist/earning/contracts.js +17 -5
  184. package/dist/earning/contracts.js.map +1 -1
  185. package/dist/earning/funding-plan.js +27 -18
  186. package/dist/earning/funding-plan.js.map +1 -1
  187. package/dist/earning/jinn-rewards.d.ts +46 -0
  188. package/dist/earning/jinn-rewards.js +32 -0
  189. package/dist/earning/jinn-rewards.js.map +1 -1
  190. package/dist/earning/safe-adapter.d.ts +2 -0
  191. package/dist/earning/safe-adapter.js +37 -11
  192. package/dist/earning/safe-adapter.js.map +1 -1
  193. package/dist/earning/store.d.ts +8 -0
  194. package/dist/earning/store.js.map +1 -1
  195. package/dist/earning/testnet-setup-migration.d.ts +12 -0
  196. package/dist/earning/testnet-setup-migration.js +27 -1
  197. package/dist/earning/testnet-setup-migration.js.map +1 -1
  198. package/dist/earning/types.d.ts +21 -6
  199. package/dist/earning/viem-clients.d.ts +11 -4
  200. package/dist/earning/viem-clients.js +14 -5
  201. package/dist/earning/viem-clients.js.map +1 -1
  202. package/dist/erc8004/identity.d.ts +19 -3
  203. package/dist/erc8004/identity.js +21 -6
  204. package/dist/erc8004/identity.js.map +1 -1
  205. package/dist/erc8004/index.d.ts +1 -1
  206. package/dist/erc8004/index.js.map +1 -1
  207. package/dist/erc8004/reputation.d.ts +8 -0
  208. package/dist/erc8004/reputation.js +22 -3
  209. package/dist/erc8004/reputation.js.map +1 -1
  210. package/dist/events/types.d.ts +2 -2
  211. package/dist/harnesses/cost-estimates.d.ts +145 -0
  212. package/dist/harnesses/cost-estimates.js +297 -0
  213. package/dist/harnesses/cost-estimates.js.map +1 -0
  214. package/dist/harnesses/engine/engine.d.ts +78 -0
  215. package/dist/harnesses/engine/engine.js +153 -11
  216. package/dist/harnesses/engine/engine.js.map +1 -1
  217. package/dist/harnesses/engine/persistence.d.ts +51 -1
  218. package/dist/harnesses/engine/persistence.js +118 -5
  219. package/dist/harnesses/engine/persistence.js.map +1 -1
  220. package/dist/harnesses/engine/work-dir-reaper.d.ts +65 -0
  221. package/dist/harnesses/engine/work-dir-reaper.js +100 -0
  222. package/dist/harnesses/engine/work-dir-reaper.js.map +1 -0
  223. package/dist/harnesses/impls/hermes-agent/adapter.js +40 -0
  224. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
  225. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +20 -0
  226. package/dist/harnesses/impls/hermes-agent/bootstrap.js +40 -6
  227. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  228. package/dist/harnesses/impls/hermes-agent/harness.d.ts +59 -1
  229. package/dist/harnesses/impls/hermes-agent/harness.js +104 -0
  230. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  231. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
  232. package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
  233. package/dist/harnesses/impls/index.d.ts +7 -0
  234. package/dist/harnesses/impls/index.js +16 -1
  235. package/dist/harnesses/impls/index.js.map +1 -1
  236. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
  237. package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
  238. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  239. package/dist/harnesses/impls/learner/harness.d.ts +38 -4
  240. package/dist/harnesses/impls/learner/harness.js +96 -2
  241. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  242. package/dist/harnesses/impls/learner/harvest.d.ts +1 -1
  243. package/dist/harnesses/impls/learner/harvest.js +23 -5
  244. package/dist/harnesses/impls/learner/harvest.js.map +1 -1
  245. package/dist/harnesses/impls/learner/plugin-path.d.ts +0 -13
  246. package/dist/harnesses/impls/learner/plugin-path.js +35 -15
  247. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
  248. package/dist/harnesses/impls/learner/restoration-patch.d.ts +2 -2
  249. package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
  250. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
  251. package/dist/harnesses/impls/learner/types.d.ts +11 -0
  252. package/dist/harnesses/impls/stub.d.ts +58 -0
  253. package/dist/harnesses/impls/stub.js +89 -0
  254. package/dist/harnesses/impls/stub.js.map +1 -0
  255. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +69 -50
  256. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +178 -93
  257. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  258. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +12 -1
  259. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +121 -7
  260. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  261. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +88 -4
  262. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +143 -22
  263. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  264. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +6 -0
  265. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +1 -1
  266. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
  267. package/dist/harnesses/readiness-registry.d.ts +7 -0
  268. package/dist/harnesses/readiness-registry.js +18 -1
  269. package/dist/harnesses/readiness-registry.js.map +1 -1
  270. package/dist/main.js +419 -111
  271. package/dist/main.js.map +1 -1
  272. package/dist/observability/emit-event.d.ts +3 -2
  273. package/dist/observability/emit-event.js +22 -1
  274. package/dist/observability/emit-event.js.map +1 -1
  275. package/dist/operator-errors.d.ts +7 -0
  276. package/dist/operator-errors.js +13 -1
  277. package/dist/operator-errors.js.map +1 -1
  278. package/dist/plugins/learner/.claude-plugin/plugin.json +9 -0
  279. package/dist/plugins/learner/.codex-plugin/plugin.json +39 -0
  280. package/dist/plugins/learner/AGENTS.md +40 -0
  281. package/dist/plugins/learner/CLAUDE.md +33 -0
  282. package/dist/plugins/learner/README.md +59 -0
  283. package/dist/plugins/learner/hooks/hooks.json +16 -0
  284. package/dist/plugins/learner/hooks/session-start +38 -0
  285. package/dist/plugins/learner/skills/learn/SKILL.md +412 -0
  286. package/dist/plugins/learner/skills/learn/analyst-prompt.md +68 -0
  287. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +94 -0
  288. package/dist/plugins/learner/skills/learn/explorer-prompt.md +53 -0
  289. package/dist/plugins/learner/skills/learn/planner-prompt.md +87 -0
  290. package/dist/plugins/learner/skills/learn/promoter-prompt.md +113 -0
  291. package/dist/plugins/learner/skills/learn/step-worker-prompt.md +47 -0
  292. package/dist/plugins/learner/skills/learn/strategist-prompt.md +85 -0
  293. package/dist/preflight/rpc-network.d.ts +40 -0
  294. package/dist/preflight/rpc-network.js +67 -1
  295. package/dist/preflight/rpc-network.js.map +1 -1
  296. package/dist/restart-daemon.d.ts +90 -0
  297. package/dist/restart-daemon.js +95 -0
  298. package/dist/restart-daemon.js.map +1 -0
  299. package/dist/rpc/transport.d.ts +109 -0
  300. package/dist/rpc/transport.js +220 -0
  301. package/dist/rpc/transport.js.map +1 -0
  302. package/dist/scripts/donation-consumption-acceptance.js +7 -28
  303. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  304. package/dist/setup/halt-mode.d.ts +14 -0
  305. package/dist/setup/halt-mode.js +17 -0
  306. package/dist/setup/halt-mode.js.map +1 -0
  307. package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
  308. package/dist/solver-nets/prediction-operator-ux.js +90 -47
  309. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  310. package/dist/solver-nets/registry.d.ts +20 -1
  311. package/dist/solver-nets/registry.js +38 -25
  312. package/dist/solver-nets/registry.js.map +1 -1
  313. package/dist/solver-types/_swe-rebench-v2-pool-cache.d.ts +58 -0
  314. package/dist/solver-types/_swe-rebench-v2-pool-cache.js +87 -0
  315. package/dist/solver-types/_swe-rebench-v2-pool-cache.js.map +1 -0
  316. package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
  317. package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
  318. package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
  319. package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +1 -0
  320. package/dist/solver-types/_swe-rebench-v2-substrate.js +10 -0
  321. package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -1
  322. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +94 -1
  323. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +305 -39
  324. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  325. package/dist/solver-types/swe-rebench-v2-auto.d.ts +22 -7
  326. package/dist/solver-types/swe-rebench-v2-auto.js +57 -20
  327. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  328. package/dist/solver-types/swe-rebench-v2.d.ts +18 -2
  329. package/dist/solver-types/swe-rebench-v2.js +310 -94
  330. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  331. package/dist/solvernets/daemon-init.d.ts +10 -2
  332. package/dist/solvernets/daemon-init.js +22 -2
  333. package/dist/solvernets/daemon-init.js.map +1 -1
  334. package/dist/solvernets/launched-record-dispatcher.d.ts +4 -0
  335. package/dist/solvernets/launched-record-dispatcher.js +44 -7
  336. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  337. package/dist/solvernets/store.d.ts +5 -0
  338. package/dist/solvernets/store.js +1 -0
  339. package/dist/solvernets/store.js.map +1 -1
  340. package/dist/spend/credential.d.ts +8 -0
  341. package/dist/spend/credential.js +30 -0
  342. package/dist/spend/credential.js.map +1 -0
  343. package/dist/spend/daemon-config.d.ts +13 -0
  344. package/dist/spend/daemon-config.js +24 -0
  345. package/dist/spend/daemon-config.js.map +1 -0
  346. package/dist/spend/pricing.d.ts +16 -0
  347. package/dist/spend/pricing.js +26 -0
  348. package/dist/spend/pricing.js.map +1 -0
  349. package/dist/spend/record.d.ts +13 -0
  350. package/dist/spend/record.js +30 -0
  351. package/dist/spend/record.js.map +1 -0
  352. package/dist/spend/usage.d.ts +27 -0
  353. package/dist/spend/usage.js +113 -0
  354. package/dist/spend/usage.js.map +1 -0
  355. package/dist/store/store.d.ts +61 -0
  356. package/dist/store/store.js +302 -7
  357. package/dist/store/store.js.map +1 -1
  358. package/dist/tasks/sources.d.ts +18 -1
  359. package/dist/tasks/sources.js +33 -5
  360. package/dist/tasks/sources.js.map +1 -1
  361. package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
  362. package/dist/tx-retry.d.ts +166 -19
  363. package/dist/tx-retry.js +310 -32
  364. package/dist/tx-retry.js.map +1 -1
  365. package/dist/types/payloads/prediction-apy-v0.d.ts +5 -5
  366. package/dist/types/payloads/prediction-v0.d.ts +5 -5
  367. package/dist/types/task-document.d.ts +392 -0
  368. package/dist/types/task-document.js +10 -0
  369. package/dist/types/task-document.js.map +1 -1
  370. package/dist/types/task.d.ts +28 -0
  371. package/dist/util/extract-tx-hash.d.ts +14 -0
  372. package/dist/util/extract-tx-hash.js +19 -0
  373. package/dist/util/extract-tx-hash.js.map +1 -0
  374. package/dist/vendor/@jinn-network/sdk/dist/contracts.js +1 -1
  375. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +3 -0
  376. package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -0
  377. package/package.json +36 -13
  378. package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
  379. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
  380. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
  381. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
  382. package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
  383. package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
  384. package/plugins/swe-rebench-v2-runtime/README.md +6 -6
  385. package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
  386. package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +69 -0
  387. package/dist/dashboard/assets/index-DOlzFN8a.css +0 -32
  388. package/dist/dashboard/assets/index-NkZ7CTAT.js +0 -140
  389. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
  390. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Per-task cost estimates for paid-API-key harnesses.
3
+ *
4
+ * Background — Issue #331 (Run-mode `feat`, P0 tier under release-feedback
5
+ * umbrella #328). The operator dashboard surfaces a harness/model selection
6
+ * at SolverNet-join time and again in Settings. Operators routing a paid
7
+ * API key (Anthropic, OpenAI, OpenRouter, Nous Portal) through the Hermes
8
+ * harness — or a "raw API key" Claude Code variant if we ever add one —
9
+ * have **no UI nudge** at join-time about per-task cost. The v0.1.6 dogfood
10
+ * surfaced the concrete worry: a first-run operator could pick Opus 4.7 +
11
+ * SWE-rebench v2 and burn $100s/hr before they figure out what Jinn does.
12
+ *
13
+ * This module captures the heuristic the SPA uses to render that estimate
14
+ * and to gate the Save & Join action when the estimate exceeds a
15
+ * configurable per-task threshold (default $1).
16
+ *
17
+ * Heuristic shape per the spec:
18
+ * per-1k-token rate × typical task length, by model id.
19
+ *
20
+ * Subscription harnesses (Claude Code, Codex) are flagged via
21
+ * `subscriptionPath: true` on the harness; in that case the surface shows
22
+ * "Included in subscription, no per-task API cost" and **does not** trigger
23
+ * the confirmation gate, regardless of the model selected.
24
+ *
25
+ * To add a new model: append an entry to `MODEL_COST_TABLE`. The id is the
26
+ * exact `model` string persisted to `joinedSolverNets[<cid>].model`. To
27
+ * shape a new harness: append to `HARNESS_BILLING`. Keep the units
28
+ * consistent: token counts in tokens, rates in USD-per-1k-tokens.
29
+ *
30
+ * Units note: Anthropic + OpenAI publish prices per million tokens; we
31
+ * convert to per-1k-tokens here so the multiplication reads as
32
+ * `(tokens / 1000) * pricePer1k`. Avoids floating-point surprises when the
33
+ * dashboard renders cents.
34
+ *
35
+ * Pricing references captured at the time of this commit (see PR body):
36
+ * - Anthropic Claude Opus 4.7: $15/M input, $75/M output (≈ $0.015 / 1k
37
+ * input, $0.075 / 1k output). Typical SWE-rebench v2 task estimated at
38
+ * ~50k input + 20k output → ~$2.25/task. Anthropic public pricing.
39
+ * - Anthropic Claude Sonnet 4.6: $3/M input, $15/M output.
40
+ * - OpenAI GPT-5.4: $1.25/M input, $10/M output (OpenAI public pricing).
41
+ * - OpenAI GPT-5.4 Mini: $0.25/M input, $2/M output.
42
+ *
43
+ * These are heuristics. Provider-API reconciliation (actual usage) is
44
+ * deferred to the P1 follow-up tracked in #331.
45
+ */
46
+ import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, canonicalHarnessName, } from './names.js';
47
+ /**
48
+ * Per-model cost entries. Keyed by the exact `model` id persisted to
49
+ * `joinedSolverNets[<cid>].model`. The dashboard model dropdown in
50
+ * `claudeModels.ts` is the source of truth for which ids appear here.
51
+ */
52
+ export const MODEL_COST_TABLE = {
53
+ // ---------- Anthropic family (direct + via OpenRouter) ----------
54
+ 'claude-opus-4-7': {
55
+ provider: 'anthropic',
56
+ inputPer1kTokens: 0.015,
57
+ outputPer1kTokens: 0.075,
58
+ typicalInputTokens: 50_000,
59
+ typicalOutputTokens: 20_000,
60
+ },
61
+ 'claude-sonnet-4-6': {
62
+ provider: 'anthropic',
63
+ inputPer1kTokens: 0.003,
64
+ outputPer1kTokens: 0.015,
65
+ typicalInputTokens: 50_000,
66
+ typicalOutputTokens: 20_000,
67
+ },
68
+ 'claude-haiku-4-5-20251001': {
69
+ provider: 'anthropic',
70
+ inputPer1kTokens: 0.001,
71
+ outputPer1kTokens: 0.005,
72
+ typicalInputTokens: 50_000,
73
+ typicalOutputTokens: 20_000,
74
+ },
75
+ // OpenRouter routing of the same families (Hermes harness uses these).
76
+ 'anthropic/claude-opus-4.7': {
77
+ provider: 'openrouter',
78
+ inputPer1kTokens: 0.015,
79
+ outputPer1kTokens: 0.075,
80
+ typicalInputTokens: 50_000,
81
+ typicalOutputTokens: 20_000,
82
+ },
83
+ 'anthropic/claude-sonnet-4.6': {
84
+ provider: 'openrouter',
85
+ inputPer1kTokens: 0.003,
86
+ outputPer1kTokens: 0.015,
87
+ typicalInputTokens: 50_000,
88
+ typicalOutputTokens: 20_000,
89
+ },
90
+ // ---------- OpenAI family ----------
91
+ 'gpt-5.4': {
92
+ provider: 'openai',
93
+ inputPer1kTokens: 0.00125,
94
+ outputPer1kTokens: 0.01,
95
+ typicalInputTokens: 50_000,
96
+ typicalOutputTokens: 20_000,
97
+ },
98
+ 'gpt-5.4-mini': {
99
+ provider: 'openai',
100
+ inputPer1kTokens: 0.00025,
101
+ outputPer1kTokens: 0.002,
102
+ typicalInputTokens: 50_000,
103
+ typicalOutputTokens: 20_000,
104
+ },
105
+ 'gpt-5.5': {
106
+ provider: 'openai',
107
+ // Newer flagship; public pricing not confirmed at heuristic-capture
108
+ // time, so use Opus-4.7-class rates as a conservative upper bound
109
+ // until we get a verified figure.
110
+ inputPer1kTokens: 0.015,
111
+ outputPer1kTokens: 0.06,
112
+ typicalInputTokens: 50_000,
113
+ typicalOutputTokens: 20_000,
114
+ },
115
+ 'gpt-5.3-codex': {
116
+ provider: 'openai',
117
+ inputPer1kTokens: 0.00125,
118
+ outputPer1kTokens: 0.01,
119
+ typicalInputTokens: 50_000,
120
+ typicalOutputTokens: 20_000,
121
+ },
122
+ 'gpt-5.3-codex-spark': {
123
+ provider: 'openai',
124
+ inputPer1kTokens: 0.00125,
125
+ outputPer1kTokens: 0.01,
126
+ typicalInputTokens: 50_000,
127
+ typicalOutputTokens: 20_000,
128
+ },
129
+ // ---------- OpenRouter long-tail (Hermes) ----------
130
+ // These rates are coarse — OpenRouter's effective price depends on the
131
+ // route picked. We pick the published list-price upper bound so the
132
+ // estimate biases toward over-warning rather than under-warning.
133
+ 'tencent/hy3-preview': {
134
+ provider: 'openrouter',
135
+ inputPer1kTokens: 0.003,
136
+ outputPer1kTokens: 0.015,
137
+ typicalInputTokens: 50_000,
138
+ typicalOutputTokens: 20_000,
139
+ },
140
+ 'deepseek/deepseek-v4-pro': {
141
+ provider: 'openrouter',
142
+ inputPer1kTokens: 0.0014,
143
+ outputPer1kTokens: 0.0028,
144
+ typicalInputTokens: 50_000,
145
+ typicalOutputTokens: 20_000,
146
+ },
147
+ 'deepseek/deepseek-v4-flash': {
148
+ provider: 'openrouter',
149
+ inputPer1kTokens: 0.0001,
150
+ outputPer1kTokens: 0.0004,
151
+ typicalInputTokens: 50_000,
152
+ typicalOutputTokens: 20_000,
153
+ },
154
+ 'google/gemini-3.1-flash-lite': {
155
+ provider: 'openrouter',
156
+ inputPer1kTokens: 0.0001,
157
+ outputPer1kTokens: 0.0004,
158
+ typicalInputTokens: 50_000,
159
+ typicalOutputTokens: 20_000,
160
+ },
161
+ 'moonshotai/kimi-k2.6': {
162
+ provider: 'openrouter',
163
+ inputPer1kTokens: 0.0006,
164
+ outputPer1kTokens: 0.0025,
165
+ typicalInputTokens: 50_000,
166
+ typicalOutputTokens: 20_000,
167
+ },
168
+ 'openrouter/owl-alpha': {
169
+ provider: 'openrouter',
170
+ inputPer1kTokens: 0.002,
171
+ outputPer1kTokens: 0.008,
172
+ typicalInputTokens: 50_000,
173
+ typicalOutputTokens: 20_000,
174
+ },
175
+ 'minimax/minimax-m2.7': {
176
+ provider: 'openrouter',
177
+ inputPer1kTokens: 0.0008,
178
+ outputPer1kTokens: 0.0032,
179
+ typicalInputTokens: 50_000,
180
+ typicalOutputTokens: 20_000,
181
+ },
182
+ 'nousresearch/hermes-4-405b': {
183
+ provider: 'nous',
184
+ inputPer1kTokens: 0.0009,
185
+ outputPer1kTokens: 0.0009,
186
+ typicalInputTokens: 50_000,
187
+ typicalOutputTokens: 20_000,
188
+ },
189
+ };
190
+ /**
191
+ * Harness-level billing classification.
192
+ *
193
+ * `subscriptionPath: true` means the harness shells out to a
194
+ * subscription-billed CLI (Claude Code, Codex) and the operator does NOT
195
+ * incur per-task API charges — the cost surface is suppressed entirely
196
+ * and the confirmation gate is never triggered.
197
+ *
198
+ * `subscriptionPath: false` means the harness routes to a paid API key
199
+ * (Hermes via OpenRouter / Anthropic API / Nous Portal). The cost surface
200
+ * is shown and the gate fires above the configured threshold.
201
+ */
202
+ export const HARNESS_BILLING = {
203
+ [CLAUDE_CODE_HARNESS]: { subscriptionPath: true },
204
+ [CODEX_HARNESS]: { subscriptionPath: true },
205
+ [HERMES_AGENT_HARNESS]: { subscriptionPath: false },
206
+ };
207
+ /** Default per-task USD threshold above which the confirmation gate fires. */
208
+ export const DEFAULT_HIGH_COST_THRESHOLD_USD = 1;
209
+ /**
210
+ * Compute the per-task cost estimate for a given model id. Returns `null`
211
+ * when the id has no entry in `MODEL_COST_TABLE` — callers should treat
212
+ * that as "unknown, don't surface a number" rather than rendering $0.
213
+ */
214
+ export function estimateModelCost(modelId) {
215
+ const entry = MODEL_COST_TABLE[modelId];
216
+ if (!entry)
217
+ return null;
218
+ const inputUsd = (entry.typicalInputTokens / 1000) * entry.inputPer1kTokens;
219
+ const outputUsd = (entry.typicalOutputTokens / 1000) * entry.outputPer1kTokens;
220
+ return {
221
+ usd: inputUsd + outputUsd,
222
+ inputUsd,
223
+ outputUsd,
224
+ typicalInputTokens: entry.typicalInputTokens,
225
+ typicalOutputTokens: entry.typicalOutputTokens,
226
+ entry,
227
+ };
228
+ }
229
+ /**
230
+ * `true` when the harness routes through a paid API key. Subscription
231
+ * harnesses (Claude Code, Codex) return `false`; unknown harnesses
232
+ * conservatively return `true` so a misnamed harness doesn't silently
233
+ * skip the cost surface.
234
+ */
235
+ export function harnessUsesPaidApiKey(harness) {
236
+ if (!harness)
237
+ return false;
238
+ const canonical = canonicalHarnessName(harness);
239
+ const billing = HARNESS_BILLING[canonical];
240
+ if (!billing)
241
+ return true;
242
+ return !billing.subscriptionPath;
243
+ }
244
+ /**
245
+ * Decide what the cost surface should render for a given harness + model
246
+ * combination, plus whether the confirmation gate fires.
247
+ *
248
+ * Defaults:
249
+ * - threshold: $1 / task (see DEFAULT_HIGH_COST_THRESHOLD_USD).
250
+ * - subscription harness → suppress surface + skip gate.
251
+ * - unknown model on a paid harness → show estimate slot (caller may
252
+ * render "estimate unavailable") but DO NOT trigger the gate.
253
+ */
254
+ export function decideCostSurface(harness, modelId, thresholdUsd = DEFAULT_HIGH_COST_THRESHOLD_USD) {
255
+ if (!harnessUsesPaidApiKey(harness)) {
256
+ return {
257
+ showEstimate: false,
258
+ estimate: null,
259
+ requiresConfirmation: false,
260
+ suppressedReason: 'Included in subscription, no per-task API cost.',
261
+ };
262
+ }
263
+ const estimate = modelId ? estimateModelCost(modelId) : null;
264
+ const modelOverridesSubscription = estimate?.entry.subscriptionPath === true;
265
+ if (modelOverridesSubscription) {
266
+ return {
267
+ showEstimate: false,
268
+ estimate: null,
269
+ requiresConfirmation: false,
270
+ suppressedReason: 'Included in subscription, no per-task API cost.',
271
+ };
272
+ }
273
+ return {
274
+ showEstimate: true,
275
+ estimate,
276
+ requiresConfirmation: estimate !== null && estimate.usd > thresholdUsd,
277
+ suppressedReason: null,
278
+ };
279
+ }
280
+ /**
281
+ * Format a USD amount for compact display in the dashboard. Picks the
282
+ * smallest fraction count that still distinguishes the value from $0.
283
+ */
284
+ export function formatUsd(amount) {
285
+ if (!Number.isFinite(amount))
286
+ return '—';
287
+ if (amount === 0)
288
+ return '$0';
289
+ if (amount < 0.01)
290
+ return `<$0.01`;
291
+ if (amount < 1)
292
+ return `$${amount.toFixed(2)}`;
293
+ if (amount < 10)
294
+ return `$${amount.toFixed(2)}`;
295
+ return `$${amount.toFixed(2)}`;
296
+ }
297
+ //# sourceMappingURL=cost-estimates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimates.js","sourceRoot":"","sources":["../../src/harnesses/cost-estimates.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { TaskRunPersistence, type PersistedTaskRun, type PersistedTaskRunInput } from './persistence.js';
10
10
  import type { Store } from '../../store/store.js';
11
+ import { type ReapWorkDirsReport } from './work-dir-reaper.js';
11
12
  import { type PackagingDeps } from './packaging.js';
12
13
  import { type EnvelopeAssemblyDeps } from './envelope-assembly.js';
13
14
  import { type DeliveryDeps } from './delivery.js';
@@ -240,6 +241,28 @@ export interface TaskEngineOptions {
240
241
  * Spec: docs/superpowers/specs/2026-05-06-agent-harness-solvernet-design.md §6.3
241
242
  */
242
243
  harnessMode?: 'train' | 'frozen';
244
+ /**
245
+ * Working-directory reaper tuning (issue #320). Each task run provisions a
246
+ * heavy scratch directory under `paths.workingDirRoot`; without cleanup an
247
+ * operator accumulates hundreds of dirs / tens of GB. The engine reaps a
248
+ * task's directory once it reaches a terminal state (COMPLETE / FAILED),
249
+ * and periodically sweeps the root for crash-orphaned dirs.
250
+ *
251
+ * Optional — sensible defaults apply when absent.
252
+ */
253
+ workDirReaper?: {
254
+ /**
255
+ * Age above which a directory with no DB row (orphaned by a crash or an
256
+ * older daemon) is removed. Defaults to {@link DEFAULT_ORPHAN_MAX_AGE_MS}
257
+ * (24h). Set to a large value to keep orphans for forensic inspection.
258
+ */
259
+ orphanMaxAgeMs?: number;
260
+ /**
261
+ * Disable the reaper entirely (escape hatch for debugging a stuck task).
262
+ * Defaults to false — the reaper runs.
263
+ */
264
+ disabled?: boolean;
265
+ };
243
266
  }
244
267
  /** Per-task outcome from a recovery pass. */
245
268
  export interface RecoveryReport {
@@ -289,12 +312,44 @@ export declare class TaskEngine {
289
312
  private stopped;
290
313
  private stopResolve?;
291
314
  private readonly stopPromise;
315
+ /** Working-dir reaper tuning (issue #320). */
316
+ protected readonly workDirReaperOpts: {
317
+ orphanMaxAgeMs: number;
318
+ disabled: boolean;
319
+ };
292
320
  constructor(opts: TaskEngineOptions);
293
321
  /**
294
322
  * Called when an task is observed from an on-chain event.
295
323
  * Persists a DISCOVERED row. Idempotent: if the row already exists, no-op.
296
324
  */
297
325
  observe(input: PersistedTaskRunInput): Promise<void>;
326
+ /**
327
+ * Pre-claim acceptance check used by the daemon's engine-watcher loop.
328
+ *
329
+ * Performance contract (issue #398): this runs once per task announcement,
330
+ * on the engine-watcher hot path, for every observed task. It MUST NOT
331
+ * perform per-task blocking I/O. In particular it does not probe
332
+ * `impl.isReady()` — historically the Hermes harness ran child processes
333
+ * inside its readiness probe, so a backlog would pay per-task blocking
334
+ * spawns and starve the daemon event loop. (#778 converted the matching
335
+ * post-execution `git diff` wedge in harvest.ts to async + 60s timeout;
336
+ * the #778 follow-up converted the readiness-probe spawns themselves —
337
+ * Hermes `doctor` / `auth list` and the codex-doctor `--version` probe —
338
+ * to async, so the registry's background refresh loop no longer blocks the
339
+ * main thread either. The readiness path remains O(1) here via the cache
340
+ * below.)
341
+ *
342
+ * Harness readiness for the claim gate is instead served O(1) from the
343
+ * daemon's cached `HarnessReadinessRegistry` snapshot: the engine-watcher
344
+ * loop calls `gateClaimByReadiness(...)` immediately after `canAcceptTask`
345
+ * returns. A ~tickIntervalMs-stale snapshot is acceptable — harness
346
+ * readiness changes on a minutes scale (auth/config) and the daemon
347
+ * already trusts that cached registry for its post-`canAcceptTask` gate.
348
+ *
349
+ * `claim()` (the DISCOVERED → CLAIMED transition) still probes
350
+ * `impl.isReady()` directly — it runs once per claimed task, not per
351
+ * announcement, and is the authoritative pre-execution gate.
352
+ */
298
353
  canAcceptTask(input: {
299
354
  solverType?: string;
300
355
  taskRole?: 'restoration' | 'evaluation';
@@ -320,6 +375,18 @@ export declare class TaskEngine {
320
375
  * Errors from individual tasks are logged but do not stop the loop.
321
376
  */
322
377
  tick(options?: TickOptions): Promise<void>;
378
+ /**
379
+ * Reap on-disk per-task working directories (issue #320).
380
+ *
381
+ * Removes the scratch directory of every task in a terminal state
382
+ * (COMPLETE / FAILED) and any crash-orphaned directory older than the
383
+ * configured max age. In-flight tasks are never touched. Safe to call at
384
+ * any time; never throws (filesystem errors are collected into the report).
385
+ *
386
+ * Called automatically every `tick()`; also exposed for the one-shot
387
+ * cleanup script and for tests.
388
+ */
389
+ reapWorkDirsNow(): ReapWorkDirsReport;
323
390
  /**
324
391
  * Drive `tick()` on a fixed interval until `stop()` is called.
325
392
  * Errors thrown by tick() itself are logged and do not stop the loop.
@@ -390,6 +457,17 @@ export declare class TaskEngine {
390
457
  * `task` non-null.
391
458
  */
392
459
  private evaluateJoinedEligibility;
460
+ /**
461
+ * Shared eligibility evaluation behind both `canAcceptTask` and `claim`.
462
+ *
463
+ * `opts.skipReadinessProbe` (issue #398): when true, the per-task
464
+ * `impl.isReady()` probe is skipped. The engine-watcher's `canAcceptTask`
465
+ * sets this — it relies on the daemon's cached `HarnessReadinessRegistry`
466
+ * (via `gateClaimByReadiness`) for the readiness gate instead of a
467
+ * blocking per-announcement probe. `claim()` leaves it false so the
468
+ * DISCOVERED → CLAIMED transition still runs the authoritative readiness
469
+ * probe (once per claimed task, not per announcement).
470
+ */
393
471
  private runnableFailureReason;
394
472
  /**
395
473
  * PRE_SNAPSHOT transition: provision workingDir + implStateDir, write