@jinn-network/client 0.1.7 → 0.1.8-canary.09a3b2f6

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 (438) hide show
  1. package/README.md +67 -1
  2. package/dist/adapters/mech/adapter.d.ts +39 -2
  3. package/dist/adapters/mech/adapter.js +178 -20
  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 +96 -52
  7. package/dist/adapters/mech/contracts.js.map +1 -1
  8. package/dist/adapters/mech/safe-revert.d.ts +4 -0
  9. package/dist/adapters/mech/safe-revert.js +5 -1
  10. package/dist/adapters/mech/safe-revert.js.map +1 -1
  11. package/dist/adapters/mech/safe.d.ts +1 -1
  12. package/dist/adapters/mech/safe.js +10 -4
  13. package/dist/adapters/mech/safe.js.map +1 -1
  14. package/dist/adapters/mech/types.d.ts +6 -1
  15. package/dist/adapters/mech/types.js.map +1 -1
  16. package/dist/agent/operator-claude.js +8 -0
  17. package/dist/agent/operator-claude.js.map +1 -1
  18. package/dist/api/activity-events-endpoint.d.ts +14 -0
  19. package/dist/api/activity-events-endpoint.js +59 -0
  20. package/dist/api/activity-events-endpoint.js.map +1 -0
  21. package/dist/api/bootstrap-endpoint.d.ts +1 -2
  22. package/dist/api/bootstrap-endpoint.js +42 -24
  23. package/dist/api/bootstrap-endpoint.js.map +1 -1
  24. package/dist/api/codex-doctor-endpoint.d.ts +22 -5
  25. package/dist/api/codex-doctor-endpoint.js +136 -17
  26. package/dist/api/codex-doctor-endpoint.js.map +1 -1
  27. package/dist/api/debug-report-endpoint.d.ts +27 -0
  28. package/dist/api/debug-report-endpoint.js +157 -0
  29. package/dist/api/debug-report-endpoint.js.map +1 -0
  30. package/dist/api/discovery-endpoint.d.ts +1 -0
  31. package/dist/api/discovery-endpoint.js +24 -0
  32. package/dist/api/discovery-endpoint.js.map +1 -1
  33. package/dist/api/fleet-build.d.ts +1 -7
  34. package/dist/api/fleet-build.js +0 -7
  35. package/dist/api/fleet-build.js.map +1 -1
  36. package/dist/api/gather-status.d.ts +39 -0
  37. package/dist/api/gather-status.js +181 -84
  38. package/dist/api/gather-status.js.map +1 -1
  39. package/dist/api/hermes-doctor-endpoint.d.ts +15 -7
  40. package/dist/api/hermes-doctor-endpoint.js +56 -19
  41. package/dist/api/hermes-doctor-endpoint.js.map +1 -1
  42. package/dist/api/launcher-status.d.ts +4 -2
  43. package/dist/api/launcher-status.js +11 -10
  44. package/dist/api/launcher-status.js.map +1 -1
  45. package/dist/api/launcher-tasks.d.ts +1 -1
  46. package/dist/api/launcher-tasks.js +12 -8
  47. package/dist/api/launcher-tasks.js.map +1 -1
  48. package/dist/api/loop-completion-build.d.ts +79 -0
  49. package/dist/api/loop-completion-build.js +155 -0
  50. package/dist/api/loop-completion-build.js.map +1 -0
  51. package/dist/api/operator-artifacts-endpoint.js +73 -6
  52. package/dist/api/operator-artifacts-endpoint.js.map +1 -1
  53. package/dist/api/portfolio-v0-build.d.ts +7 -1
  54. package/dist/api/portfolio-v0-build.js +6 -2
  55. package/dist/api/portfolio-v0-build.js.map +1 -1
  56. package/dist/api/prediction-v1-build.d.ts +6 -0
  57. package/dist/api/prediction-v1-build.js +3 -1
  58. package/dist/api/prediction-v1-build.js.map +1 -1
  59. package/dist/api/server.d.ts +17 -0
  60. package/dist/api/server.js +40 -1
  61. package/dist/api/server.js.map +1 -1
  62. package/dist/api/setup-endpoints.d.ts +13 -9
  63. package/dist/api/setup-endpoints.js +50 -173
  64. package/dist/api/setup-endpoints.js.map +1 -1
  65. package/dist/api/solvernets-endpoints.js +33 -63
  66. package/dist/api/solvernets-endpoints.js.map +1 -1
  67. package/dist/api/status-build.d.ts +140 -17
  68. package/dist/api/status-build.js +47 -34
  69. package/dist/api/status-build.js.map +1 -1
  70. package/dist/api/status-harness-rollup.d.ts +35 -0
  71. package/dist/api/status-harness-rollup.js +45 -0
  72. package/dist/api/status-harness-rollup.js.map +1 -0
  73. package/dist/api/status-rollup-build.d.ts +0 -4
  74. package/dist/api/status-rollup-build.js +0 -4
  75. package/dist/api/status-rollup-build.js.map +1 -1
  76. package/dist/api/task-runs-build.d.ts +8 -0
  77. package/dist/api/task-runs-build.js +5 -1
  78. package/dist/api/task-runs-build.js.map +1 -1
  79. package/dist/build-info.json +4 -4
  80. package/dist/build-meta.json +1 -1
  81. package/dist/captures/live-publisher.js +24 -4
  82. package/dist/captures/live-publisher.js.map +1 -1
  83. package/dist/captures/publish.d.ts +1 -1
  84. package/dist/chain-read-errors.d.ts +12 -0
  85. package/dist/chain-read-errors.js +26 -1
  86. package/dist/chain-read-errors.js.map +1 -1
  87. package/dist/cli/commands/codedigest-revert-check.d.ts +33 -0
  88. package/dist/cli/commands/codedigest-revert-check.js +253 -0
  89. package/dist/cli/commands/codedigest-revert-check.js.map +1 -0
  90. package/dist/cli/commands/doctor.d.ts +3 -0
  91. package/dist/cli/commands/doctor.js +35 -0
  92. package/dist/cli/commands/doctor.js.map +1 -1
  93. package/dist/cli/commands/eval.d.ts +76 -0
  94. package/dist/cli/commands/eval.js +401 -0
  95. package/dist/cli/commands/eval.js.map +1 -0
  96. package/dist/cli/commands/rewards.d.ts +2 -0
  97. package/dist/cli/commands/rewards.js +27 -0
  98. package/dist/cli/commands/rewards.js.map +1 -1
  99. package/dist/cli/commands/solver-nets.d.ts +1 -0
  100. package/dist/cli/commands/solver-nets.js +245 -22
  101. package/dist/cli/commands/solver-nets.js.map +1 -1
  102. package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
  103. package/dist/cli/commands/solver-plugins-block.js +118 -0
  104. package/dist/cli/commands/solver-plugins-block.js.map +1 -0
  105. package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
  106. package/dist/cli/commands/solver-plugins-feedback.js +262 -0
  107. package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
  108. package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
  109. package/dist/cli/commands/solver-plugins-read.js +259 -0
  110. package/dist/cli/commands/solver-plugins-read.js.map +1 -0
  111. package/dist/cli/commands/solver-plugins.d.ts +35 -0
  112. package/dist/cli/commands/solver-plugins.js +399 -2
  113. package/dist/cli/commands/solver-plugins.js.map +1 -1
  114. package/dist/cli/commands/status.js +0 -1
  115. package/dist/cli/commands/status.js.map +1 -1
  116. package/dist/cli/commands/tasks.js +15 -2
  117. package/dist/cli/commands/tasks.js.map +1 -1
  118. package/dist/cli/index.js +4 -0
  119. package/dist/cli/index.js.map +1 -1
  120. package/dist/cli/task-native-readiness.d.ts +7 -0
  121. package/dist/cli/task-native-readiness.js +7 -5
  122. package/dist/cli/task-native-readiness.js.map +1 -1
  123. package/dist/config.d.ts +206 -232
  124. package/dist/config.js +289 -107
  125. package/dist/config.js.map +1 -1
  126. package/dist/daemon/ai-units-gate.d.ts +54 -0
  127. package/dist/daemon/ai-units-gate.js +83 -0
  128. package/dist/daemon/ai-units-gate.js.map +1 -0
  129. package/dist/daemon/creator.js +13 -0
  130. package/dist/daemon/creator.js.map +1 -1
  131. package/dist/daemon/daemon.d.ts +10 -0
  132. package/dist/daemon/daemon.js +205 -30
  133. package/dist/daemon/daemon.js.map +1 -1
  134. package/dist/daemon/eviction-loop.d.ts +7 -0
  135. package/dist/daemon/eviction-loop.js +16 -0
  136. package/dist/daemon/eviction-loop.js.map +1 -1
  137. package/dist/daemon/gate-logger.d.ts +9 -0
  138. package/dist/daemon/gate-logger.js +2 -0
  139. package/dist/daemon/gate-logger.js.map +1 -0
  140. package/dist/daemon/jinn-claim-loop.js +22 -4
  141. package/dist/daemon/jinn-claim-loop.js.map +1 -1
  142. package/dist/daemon/readiness-gate.d.ts +1 -4
  143. package/dist/daemon/readiness-gate.js.map +1 -1
  144. package/dist/daemon/spend-cap-gate.d.ts +40 -0
  145. package/dist/daemon/spend-cap-gate.js +46 -0
  146. package/dist/daemon/spend-cap-gate.js.map +1 -0
  147. package/dist/dashboard/assets/index-3quVQqik.js +167 -0
  148. package/dist/dashboard/assets/index-BVAWkLwY.css +1 -0
  149. package/dist/dashboard/index.html +2 -2
  150. package/dist/discovery/http.d.ts +7 -0
  151. package/dist/discovery/http.js +567 -24
  152. package/dist/discovery/http.js.map +1 -1
  153. package/dist/discovery/onchain.js +197 -5
  154. package/dist/discovery/onchain.js.map +1 -1
  155. package/dist/discovery/types.d.ts +235 -0
  156. package/dist/discovery/types.js +40 -0
  157. package/dist/discovery/types.js.map +1 -1
  158. package/dist/discovery/with-fallback.js +41 -0
  159. package/dist/discovery/with-fallback.js.map +1 -1
  160. package/dist/earning/bootstrap.d.ts +31 -3
  161. package/dist/earning/bootstrap.js +94 -22
  162. package/dist/earning/bootstrap.js.map +1 -1
  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 +34 -11
  167. package/dist/earning/safe-adapter.js.map +1 -1
  168. package/dist/earning/types.d.ts +6 -6
  169. package/dist/earning/viem-clients.d.ts +11 -4
  170. package/dist/earning/viem-clients.js +14 -5
  171. package/dist/earning/viem-clients.js.map +1 -1
  172. package/dist/erc8004/identity.d.ts +19 -3
  173. package/dist/erc8004/identity.js +38 -11
  174. package/dist/erc8004/identity.js.map +1 -1
  175. package/dist/erc8004/index.d.ts +1 -1
  176. package/dist/erc8004/index.js.map +1 -1
  177. package/dist/eval/eval-harness-run.d.ts +63 -0
  178. package/dist/eval/eval-harness-run.js +123 -0
  179. package/dist/eval/eval-harness-run.js.map +1 -0
  180. package/dist/eval/orchestrator.d.ts +163 -0
  181. package/dist/eval/orchestrator.js +232 -0
  182. package/dist/eval/orchestrator.js.map +1 -0
  183. package/dist/eval/paired.d.ts +68 -0
  184. package/dist/eval/paired.js +93 -0
  185. package/dist/eval/paired.js.map +1 -0
  186. package/dist/eval/resolve-slate-tasks.d.ts +35 -0
  187. package/dist/eval/resolve-slate-tasks.js +56 -0
  188. package/dist/eval/resolve-slate-tasks.js.map +1 -0
  189. package/dist/eval/screen-discovery.d.ts +22 -0
  190. package/dist/eval/screen-discovery.js +71 -0
  191. package/dist/eval/screen-discovery.js.map +1 -0
  192. package/dist/eval/screen-progress.d.ts +41 -0
  193. package/dist/eval/screen-progress.js +60 -0
  194. package/dist/eval/screen-progress.js.map +1 -0
  195. package/dist/eval/screen-runner.d.ts +30 -0
  196. package/dist/eval/screen-runner.js +289 -0
  197. package/dist/eval/screen-runner.js.map +1 -0
  198. package/dist/eval/screen.d.ts +107 -0
  199. package/dist/eval/screen.js +159 -0
  200. package/dist/eval/screen.js.map +1 -0
  201. package/dist/eval/slope.d.ts +29 -0
  202. package/dist/eval/slope.js +46 -0
  203. package/dist/eval/slope.js.map +1 -0
  204. package/dist/eval/train-sequence.d.ts +35 -0
  205. package/dist/eval/train-sequence.js +59 -0
  206. package/dist/eval/train-sequence.js.map +1 -0
  207. package/dist/eval/wilson.d.ts +45 -0
  208. package/dist/eval/wilson.js +48 -0
  209. package/dist/eval/wilson.js.map +1 -0
  210. package/dist/events/types.d.ts +2 -2
  211. package/dist/harnesses/cost-estimates.d.ts +10 -31
  212. package/dist/harnesses/cost-estimates.js +11 -43
  213. package/dist/harnesses/cost-estimates.js.map +1 -1
  214. package/dist/harnesses/engine/canonical-json.js +5 -3
  215. package/dist/harnesses/engine/canonical-json.js.map +1 -1
  216. package/dist/harnesses/engine/engine.d.ts +37 -4
  217. package/dist/harnesses/engine/engine.js +151 -20
  218. package/dist/harnesses/engine/engine.js.map +1 -1
  219. package/dist/harnesses/engine/persistence.d.ts +38 -4
  220. package/dist/harnesses/engine/persistence.js +71 -6
  221. package/dist/harnesses/engine/persistence.js.map +1 -1
  222. package/dist/harnesses/engine/state.d.ts +9 -0
  223. package/dist/harnesses/engine/state.js +23 -10
  224. package/dist/harnesses/engine/state.js.map +1 -1
  225. package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
  226. package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
  227. package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
  228. package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
  229. package/dist/harnesses/impls/hermes-agent/bootstrap.js +10 -3
  230. package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
  231. package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +1 -1
  232. package/dist/harnesses/impls/hermes-agent/config-builder.js +4 -2
  233. package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -1
  234. package/dist/harnesses/impls/hermes-agent/harness.d.ts +31 -3
  235. package/dist/harnesses/impls/hermes-agent/harness.js +84 -7
  236. package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
  237. package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
  238. package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
  239. package/dist/harnesses/impls/index.d.ts +2 -0
  240. package/dist/harnesses/impls/index.js +2 -0
  241. package/dist/harnesses/impls/index.js.map +1 -1
  242. package/dist/harnesses/impls/learner/adapters/claude-code.d.ts +17 -0
  243. package/dist/harnesses/impls/learner/adapters/claude-code.js +118 -14
  244. package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
  245. package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
  246. package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
  247. package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
  248. package/dist/harnesses/impls/learner/harness.d.ts +41 -1
  249. package/dist/harnesses/impls/learner/harness.js +78 -4
  250. package/dist/harnesses/impls/learner/harness.js.map +1 -1
  251. package/dist/harnesses/impls/learner/harvest.d.ts +3 -1
  252. package/dist/harnesses/impls/learner/harvest.js +30 -6
  253. package/dist/harnesses/impls/learner/harvest.js.map +1 -1
  254. package/dist/harnesses/impls/learner/plugin-path.js +1 -0
  255. package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
  256. package/dist/harnesses/impls/learner/restoration-patch.d.ts +2 -2
  257. package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
  258. package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
  259. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +21 -1
  260. package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
  261. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
  262. package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
  263. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
  264. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
  265. package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
  266. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
  267. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
  268. package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
  269. package/dist/harnesses/readiness-registry.d.ts +7 -0
  270. package/dist/harnesses/readiness-registry.js +9 -0
  271. package/dist/harnesses/readiness-registry.js.map +1 -1
  272. package/dist/harnesses/types.d.ts +14 -0
  273. package/dist/learner/revert-decision.d.ts +74 -0
  274. package/dist/learner/revert-decision.js +73 -0
  275. package/dist/learner/revert-decision.js.map +1 -0
  276. package/dist/learner/revert-stats.d.ts +38 -0
  277. package/dist/learner/revert-stats.js +86 -0
  278. package/dist/learner/revert-stats.js.map +1 -0
  279. package/dist/local-provider-url.d.ts +3 -0
  280. package/dist/local-provider-url.js +28 -0
  281. package/dist/local-provider-url.js.map +1 -0
  282. package/dist/main.js +199 -104
  283. package/dist/main.js.map +1 -1
  284. package/dist/mcp/get-codedigest-reward.d.ts +13 -0
  285. package/dist/mcp/get-codedigest-reward.js +23 -0
  286. package/dist/mcp/get-codedigest-reward.js.map +1 -0
  287. package/dist/mcp/server.js +23 -0
  288. package/dist/mcp/server.js.map +1 -1
  289. package/dist/observability/debug-report-assemble.d.ts +43 -0
  290. package/dist/observability/debug-report-assemble.js +80 -0
  291. package/dist/observability/debug-report-assemble.js.map +1 -0
  292. package/dist/observability/emit-event.d.ts +9 -2
  293. package/dist/observability/emit-event.js +36 -2
  294. package/dist/observability/emit-event.js.map +1 -1
  295. package/dist/observability/file-logger.d.ts +69 -0
  296. package/dist/observability/file-logger.js +177 -0
  297. package/dist/observability/file-logger.js.map +1 -0
  298. package/dist/observability/redact-secrets.d.ts +65 -0
  299. package/dist/observability/redact-secrets.js +300 -0
  300. package/dist/observability/redact-secrets.js.map +1 -0
  301. package/dist/observability/tar.d.ts +30 -0
  302. package/dist/observability/tar.js +102 -0
  303. package/dist/observability/tar.js.map +1 -0
  304. package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
  305. package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
  306. package/dist/plugins/learner/hooks/session-start +30 -1
  307. package/dist/plugins/learner/skills/learn/consolidator-prompt.md +22 -1
  308. package/dist/plugins/learner/skills/learn/promoter-prompt.md +72 -1
  309. package/dist/preflight/deployment-readiness.d.ts +147 -0
  310. package/dist/preflight/deployment-readiness.js +366 -0
  311. package/dist/preflight/deployment-readiness.js.map +1 -0
  312. package/dist/preflight/pidfile-liveness.d.ts +50 -0
  313. package/dist/preflight/pidfile-liveness.js +117 -0
  314. package/dist/preflight/pidfile-liveness.js.map +1 -0
  315. package/dist/preflight/rpc-network.d.ts +40 -0
  316. package/dist/preflight/rpc-network.js +67 -1
  317. package/dist/preflight/rpc-network.js.map +1 -1
  318. package/dist/rpc/transport.d.ts +145 -0
  319. package/dist/rpc/transport.js +319 -0
  320. package/dist/rpc/transport.js.map +1 -0
  321. package/dist/scripts/donation-consumption-acceptance.js +7 -28
  322. package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
  323. package/dist/scripts/swe-rebench-v2-pytest-missing.json +16 -0
  324. package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
  325. package/dist/solver-nets/prediction-operator-ux.js +56 -53
  326. package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
  327. package/dist/solver-nets/registry.d.ts +19 -1
  328. package/dist/solver-nets/registry.js +37 -24
  329. package/dist/solver-nets/registry.js.map +1 -1
  330. package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
  331. package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
  332. package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
  333. package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
  334. package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
  335. package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
  336. package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
  337. package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
  338. package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
  339. package/dist/solver-types/_swe-rebench-v2-state.d.ts +24 -0
  340. package/dist/solver-types/_swe-rebench-v2-state.js +33 -0
  341. package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
  342. package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +116 -2
  343. package/dist/solver-types/_swe-rebench-v2-validated-pool.js +296 -21
  344. package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
  345. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
  346. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
  347. package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
  348. package/dist/solver-types/solver-type.d.ts +8 -0
  349. package/dist/solver-types/swe-rebench-v2-auto.d.ts +20 -11
  350. package/dist/solver-types/swe-rebench-v2-auto.js +64 -19
  351. package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
  352. package/dist/solver-types/swe-rebench-v2.d.ts +10 -2
  353. package/dist/solver-types/swe-rebench-v2.js +233 -13
  354. package/dist/solver-types/swe-rebench-v2.js.map +1 -1
  355. package/dist/solvernets/daemon-init.d.ts +1 -1
  356. package/dist/solvernets/daemon-init.js +19 -4
  357. package/dist/solvernets/daemon-init.js.map +1 -1
  358. package/dist/solvernets/launched-record-dispatcher.d.ts +7 -0
  359. package/dist/solvernets/launched-record-dispatcher.js +10 -4
  360. package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
  361. package/dist/solvernets/registry-client-erc8004.js +40 -37
  362. package/dist/solvernets/registry-client-erc8004.js.map +1 -1
  363. package/dist/solvernets/registry-client.d.ts +6 -0
  364. package/dist/solvernets/store.d.ts +2 -2
  365. package/dist/solvernets/store.js +7 -2
  366. package/dist/solvernets/store.js.map +1 -1
  367. package/dist/spend/ai-units-config.d.ts +49 -0
  368. package/dist/spend/ai-units-config.js +34 -0
  369. package/dist/spend/ai-units-config.js.map +1 -0
  370. package/dist/spend/ai-units.d.ts +140 -0
  371. package/dist/spend/ai-units.js +229 -0
  372. package/dist/spend/ai-units.js.map +1 -0
  373. package/dist/spend/cost-surface-status.d.ts +12 -0
  374. package/dist/spend/cost-surface-status.js +24 -0
  375. package/dist/spend/cost-surface-status.js.map +1 -0
  376. package/dist/spend/credential.d.ts +39 -0
  377. package/dist/spend/credential.js +71 -0
  378. package/dist/spend/credential.js.map +1 -0
  379. package/dist/spend/daemon-config.d.ts +13 -0
  380. package/dist/spend/daemon-config.js +24 -0
  381. package/dist/spend/daemon-config.js.map +1 -0
  382. package/dist/spend/pricing.d.ts +16 -0
  383. package/dist/spend/pricing.js +26 -0
  384. package/dist/spend/pricing.js.map +1 -0
  385. package/dist/spend/record.d.ts +13 -0
  386. package/dist/spend/record.js +43 -0
  387. package/dist/spend/record.js.map +1 -0
  388. package/dist/spend/usage.d.ts +27 -0
  389. package/dist/spend/usage.js +113 -0
  390. package/dist/spend/usage.js.map +1 -0
  391. package/dist/store/store.d.ts +187 -0
  392. package/dist/store/store.js +467 -4
  393. package/dist/store/store.js.map +1 -1
  394. package/dist/trajectory/transcript-parsers/codex-session.d.ts +12 -6
  395. package/dist/trajectory/transcript-parsers/codex-session.js +114 -13
  396. package/dist/trajectory/transcript-parsers/codex-session.js.map +1 -1
  397. package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
  398. package/dist/trajectory/transcript-session-dirs.d.ts +18 -0
  399. package/dist/trajectory/transcript-session-dirs.js +85 -0
  400. package/dist/trajectory/transcript-session-dirs.js.map +1 -0
  401. package/dist/trajectory/transcript-watcher.d.ts +20 -1
  402. package/dist/trajectory/transcript-watcher.js +108 -32
  403. package/dist/trajectory/transcript-watcher.js.map +1 -1
  404. package/dist/tx-retry.d.ts +25 -0
  405. package/dist/tx-retry.js +95 -7
  406. package/dist/tx-retry.js.map +1 -1
  407. package/dist/types/payloads/portfolio-v0.d.ts +3 -3
  408. package/dist/types/payloads/prediction-apy-v0.d.ts +3 -3
  409. package/dist/types/payloads/prediction-v0.d.ts +12 -12
  410. package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +108 -1
  411. package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +25 -1
  412. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
  413. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
  414. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
  415. package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
  416. package/dist/vendor/@jinn-network/sdk/package.json +4 -0
  417. package/docker-compose.yml +3 -2
  418. package/package.json +30 -18
  419. package/plugins/learner/.claude-plugin/plugin.json +1 -1
  420. package/plugins/learner/.codex-plugin/plugin.json +1 -1
  421. package/plugins/learner/hooks/session-start +30 -1
  422. package/plugins/learner/skills/learn/consolidator-prompt.md +22 -1
  423. package/plugins/learner/skills/learn/promoter-prompt.md +72 -1
  424. package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
  425. package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
  426. package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
  427. package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
  428. package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
  429. package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
  430. package/plugins/swe-rebench-v2-runtime/README.md +6 -6
  431. package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
  432. package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
  433. package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
  434. package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +81 -0
  435. package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
  436. package/dist/dashboard/assets/index-blqc7eqq.css +0 -32
  437. package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
  438. package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
@@ -0,0 +1,72 @@
1
+ /**
2
+ * `jinn solver-plugins {endorse, warn, review, respond}` — write verbs that
3
+ * route ERC-8004 `ReputationRegistry` feedback writes against the agentId of
4
+ * the builder who published the plug-in. The builder's agentId is resolved
5
+ * from `DiscoveryAPI.listPluginPublications`; the on-chain body anchors the
6
+ * feedback to a specific plug-in via `manifestRef = "plugin:<cid>"` and
7
+ * `manifestHash = keccak256(manifestRef)`.
8
+ *
9
+ * The pipeline mirrors `publishHandler`'s shape:
10
+ * 1. resolveCliPassword (env > keystore-password file > prompt-fd)
11
+ * 2. loadConfig
12
+ * 3. discoveryApiFactory(config).listPluginPublications → builderAgentId
13
+ * 4. bootstrapper.ensureStage1(password) — lazy Stage 1 ensure
14
+ * 5. reputationClientFactory(...).giveFeedback(...) / .respondToFeedback(...)
15
+ *
16
+ * Outputs a single-line JSON envelope: `{ verb, txHash, pluginCid,
17
+ * targetAgentId, ... }`. Error codes match the publish surface convention:
18
+ * `keystore_missing`, `config_load_failed`, `ensure_stage1_failed`,
19
+ * `fleet_identity_missing`, `agentid_unresolvable`, `self_feedback_not_allowed`,
20
+ * `discovery_unavailable`, `publish_failed`.
21
+ */
22
+ import { type Address, type Hex } from 'viem';
23
+ import type { CommandContext } from '../command.js';
24
+ import type { SolverPluginsDeps } from './solver-plugins.js';
25
+ export interface EndorseOptions {
26
+ pluginCid: string;
27
+ score: number;
28
+ scoreDecimals: number;
29
+ tag1?: string;
30
+ tag2?: string;
31
+ configPath: string | undefined;
32
+ }
33
+ export interface WarnOptions {
34
+ pluginCid: string;
35
+ reason: string;
36
+ configPath: string | undefined;
37
+ }
38
+ export interface ReviewOptions {
39
+ pluginCid: string;
40
+ score: number;
41
+ scoreDecimals: number;
42
+ tag1?: string;
43
+ tag2?: string;
44
+ configPath: string | undefined;
45
+ }
46
+ export interface RespondOptions {
47
+ pluginCid: string;
48
+ feedbackIndex: bigint;
49
+ client: Address;
50
+ responseUri: string;
51
+ configPath: string | undefined;
52
+ }
53
+ export interface FeedbackPipelineCtx {
54
+ password: string;
55
+ config: ReturnType<SolverPluginsDeps['loadConfig']>;
56
+ builderAgentId: bigint;
57
+ safeAddress: Address;
58
+ reputationRegistryAddress: Address;
59
+ manifestRef: string;
60
+ manifestHash: Hex;
61
+ }
62
+ /**
63
+ * Shared prologue for every write verb (endorse / warn / review / respond /
64
+ * block): password → config → discovery row → Stage 1 ensure. Returns the
65
+ * materialised ids needed for the on-chain write, or null after writing an
66
+ * error envelope and calling ctx.exit.
67
+ */
68
+ export declare function preparePipeline(ctx: CommandContext, pluginCid: string, configPath: string | undefined, deps: SolverPluginsDeps): Promise<FeedbackPipelineCtx | null>;
69
+ export declare function warnHandler(ctx: CommandContext, opts: WarnOptions, deps: SolverPluginsDeps): Promise<void>;
70
+ export declare function endorseHandler(ctx: CommandContext, opts: EndorseOptions, deps: SolverPluginsDeps): Promise<void>;
71
+ export declare function reviewHandler(ctx: CommandContext, opts: ReviewOptions, deps: SolverPluginsDeps): Promise<void>;
72
+ export declare function respondHandler(ctx: CommandContext, opts: RespondOptions, deps: SolverPluginsDeps): Promise<void>;
@@ -0,0 +1,262 @@
1
+ /**
2
+ * `jinn solver-plugins {endorse, warn, review, respond}` — write verbs that
3
+ * route ERC-8004 `ReputationRegistry` feedback writes against the agentId of
4
+ * the builder who published the plug-in. The builder's agentId is resolved
5
+ * from `DiscoveryAPI.listPluginPublications`; the on-chain body anchors the
6
+ * feedback to a specific plug-in via `manifestRef = "plugin:<cid>"` and
7
+ * `manifestHash = keccak256(manifestRef)`.
8
+ *
9
+ * The pipeline mirrors `publishHandler`'s shape:
10
+ * 1. resolveCliPassword (env > keystore-password file > prompt-fd)
11
+ * 2. loadConfig
12
+ * 3. discoveryApiFactory(config).listPluginPublications → builderAgentId
13
+ * 4. bootstrapper.ensureStage1(password) — lazy Stage 1 ensure
14
+ * 5. reputationClientFactory(...).giveFeedback(...) / .respondToFeedback(...)
15
+ *
16
+ * Outputs a single-line JSON envelope: `{ verb, txHash, pluginCid,
17
+ * targetAgentId, ... }`. Error codes match the publish surface convention:
18
+ * `keystore_missing`, `config_load_failed`, `ensure_stage1_failed`,
19
+ * `fleet_identity_missing`, `agentid_unresolvable`, `self_feedback_not_allowed`,
20
+ * `discovery_unavailable`, `publish_failed`.
21
+ */
22
+ import { getAddress, keccak256, toBytes } from 'viem';
23
+ import { writeJson } from './solver-plugins.js';
24
+ import { getReputationRegistryAddress } from '../../erc8004/addresses.js';
25
+ import { DiscoveryUnavailableError } from '../../discovery/types.js';
26
+ /**
27
+ * Shared prologue for every write verb (endorse / warn / review / respond /
28
+ * block): password → config → discovery row → Stage 1 ensure. Returns the
29
+ * materialised ids needed for the on-chain write, or null after writing an
30
+ * error envelope and calling ctx.exit.
31
+ */
32
+ export async function preparePipeline(ctx, pluginCid, configPath, deps) {
33
+ const passwordResult = deps.resolveCliPassword(ctx.argv, ctx.env);
34
+ if (!passwordResult.ok) {
35
+ writeJson(ctx, {
36
+ error: {
37
+ code: 'keystore_missing',
38
+ message: 'Could not resolve password. Set JINN_PASSWORD, write ~/.jinn-client/keystore-password, or pass --password-fd.',
39
+ },
40
+ });
41
+ ctx.exit(1);
42
+ return null;
43
+ }
44
+ const password = passwordResult.password;
45
+ let config;
46
+ try {
47
+ config = deps.loadConfig(configPath);
48
+ }
49
+ catch (err) {
50
+ writeJson(ctx, {
51
+ error: { code: 'config_load_failed', message: err instanceof Error ? err.message : String(err) },
52
+ });
53
+ ctx.exit(1);
54
+ return null;
55
+ }
56
+ // Resolve builderAgentId via discovery first — cheaper to fail here than
57
+ // after Stage 1.
58
+ let builderAgentIdStr;
59
+ try {
60
+ const api = deps.discoveryApiFactory(config);
61
+ const rows = await api.listPluginPublications({});
62
+ const row = rows.find((r) => r.cid === pluginCid);
63
+ builderAgentIdStr = row?.builderAgentId;
64
+ }
65
+ catch (err) {
66
+ if (err instanceof DiscoveryUnavailableError) {
67
+ writeJson(ctx, {
68
+ error: {
69
+ code: 'discovery_unavailable',
70
+ message: `Indexer unavailable (mode=${config.discovery?.mode ?? 'onchain'}${config.discovery?.url ? `, url=${config.discovery.url}` : ''}): ${err.message}`,
71
+ },
72
+ });
73
+ ctx.exit(1);
74
+ return null;
75
+ }
76
+ throw err;
77
+ }
78
+ if (!builderAgentIdStr) {
79
+ writeJson(ctx, {
80
+ error: {
81
+ code: 'agentid_unresolvable',
82
+ message: `No plug-in publication record found for cid ${pluginCid} (discovery mode=${config.discovery?.mode ?? 'onchain'}).`,
83
+ details: { mode: config.discovery?.mode ?? 'onchain' },
84
+ },
85
+ });
86
+ ctx.exit(1);
87
+ return null;
88
+ }
89
+ const bootstrapper = deps.bootstrapperFactory(config);
90
+ const stage1 = await bootstrapper.ensureStage1(password);
91
+ if (!stage1.ok) {
92
+ writeJson(ctx, { error: { code: 'ensure_stage1_failed', message: stage1.message } });
93
+ ctx.exit(1);
94
+ return null;
95
+ }
96
+ const fleet = stage1.fleet_state;
97
+ if (!fleet.fleet_agent_id || !fleet.fleet_safe_address || !fleet.fleet_identity_registry) {
98
+ writeJson(ctx, {
99
+ error: {
100
+ code: 'fleet_identity_missing',
101
+ message: 'Stage 1 completed but fleet identity is empty.',
102
+ },
103
+ });
104
+ ctx.exit(1);
105
+ return null;
106
+ }
107
+ const chainId = config.network === 'testnet' ? 84532 : 8453;
108
+ const reputationRegistryAddress = getReputationRegistryAddress(chainId);
109
+ if (!reputationRegistryAddress) {
110
+ writeJson(ctx, {
111
+ error: {
112
+ code: 'config_load_failed',
113
+ message: `No ReputationRegistry address known for chainId ${chainId}.`,
114
+ },
115
+ });
116
+ ctx.exit(1);
117
+ return null;
118
+ }
119
+ const safeAddress = getAddress(fleet.fleet_safe_address);
120
+ const manifestRef = `plugin:${pluginCid}`;
121
+ const manifestHash = keccak256(toBytes(manifestRef));
122
+ return {
123
+ password,
124
+ config,
125
+ builderAgentId: BigInt(builderAgentIdStr),
126
+ safeAddress,
127
+ reputationRegistryAddress,
128
+ manifestRef,
129
+ manifestHash,
130
+ };
131
+ }
132
+ function emitWriteError(ctx, err) {
133
+ const msg = err instanceof Error ? err.message : String(err);
134
+ if (msg.includes('Self-feedback not allowed')) {
135
+ writeJson(ctx, {
136
+ error: {
137
+ code: 'self_feedback_not_allowed',
138
+ message: 'Reputation registry rejected feedback: caller is the agent owner. Use a different operator agent NFT, or skip endorsement for plug-ins you publish yourself.',
139
+ },
140
+ });
141
+ ctx.exit(1);
142
+ return;
143
+ }
144
+ writeJson(ctx, {
145
+ error: { code: 'publish_failed', message: msg },
146
+ });
147
+ ctx.exit(1);
148
+ }
149
+ // ── Verbs ────────────────────────────────────────────────────────────────────
150
+ /**
151
+ * Shared body for any verb that submits a single `giveFeedback` after the
152
+ * preparePipeline prologue. The caller supplies the verb name (for the
153
+ * envelope) plus the on-chain args; this function emits the success envelope
154
+ * or maps the thrown error to a typed envelope.
155
+ */
156
+ async function submitFeedbackAndEmit(ctx, prep, deps, verb, args, extraEnvelopeFields = {}) {
157
+ const client = deps.reputationClientFactory({
158
+ reputationRegistryAddress: prep.reputationRegistryAddress,
159
+ safeAddress: prep.safeAddress,
160
+ rpcUrl: prep.config.rpcUrl,
161
+ network: prep.config.network === 'testnet' ? 'base-sepolia' : 'base',
162
+ earningDir: prep.config.earningDir,
163
+ password: prep.password,
164
+ });
165
+ try {
166
+ const txHash = await client.giveFeedback({
167
+ harnessAgentId: prep.builderAgentId,
168
+ score: args.score,
169
+ scoreDecimals: args.scoreDecimals,
170
+ manifestRef: prep.manifestRef,
171
+ manifestHash: prep.manifestHash,
172
+ ...(args.tag1 ? { tag1: args.tag1 } : {}),
173
+ ...(args.tag2 ? { tag2: args.tag2 } : {}),
174
+ });
175
+ writeJson(ctx, {
176
+ verb,
177
+ txHash,
178
+ pluginCid: prep.manifestRef.slice('plugin:'.length),
179
+ targetAgentId: prep.builderAgentId.toString(),
180
+ score: args.score,
181
+ scoreDecimals: args.scoreDecimals,
182
+ reputationRegistry: prep.reputationRegistryAddress,
183
+ safeAddress: prep.safeAddress,
184
+ ...extraEnvelopeFields,
185
+ });
186
+ }
187
+ catch (err) {
188
+ emitWriteError(ctx, err);
189
+ }
190
+ }
191
+ export async function warnHandler(ctx, opts, deps) {
192
+ const prep = await preparePipeline(ctx, opts.pluginCid, opts.configPath, deps);
193
+ if (!prep)
194
+ return;
195
+ // The on-chain feedback layout exposes `tag1` (indexed; we use it as the
196
+ // verb's category — 'warning') and `tag2` (free-text). The design note
197
+ // referenced a "feedback URI" for the reason, but tag2 is the available
198
+ // free-text slot on giveFeedback — wire the reason there.
199
+ await submitFeedbackAndEmit(ctx, prep, deps, 'solver-plugins warn', { score: 50, scoreDecimals: 2, tag1: 'warning', tag2: opts.reason }, { reason: opts.reason });
200
+ }
201
+ export async function endorseHandler(ctx, opts, deps) {
202
+ const prep = await preparePipeline(ctx, opts.pluginCid, opts.configPath, deps);
203
+ if (!prep)
204
+ return;
205
+ await submitFeedbackAndEmit(ctx, prep, deps, 'solver-plugins endorse', {
206
+ score: opts.score,
207
+ scoreDecimals: opts.scoreDecimals,
208
+ ...(opts.tag1 ? { tag1: opts.tag1 } : {}),
209
+ ...(opts.tag2 ? { tag2: opts.tag2 } : {}),
210
+ });
211
+ }
212
+ export async function reviewHandler(ctx, opts, deps) {
213
+ const prep = await preparePipeline(ctx, opts.pluginCid, opts.configPath, deps);
214
+ if (!prep)
215
+ return;
216
+ await submitFeedbackAndEmit(ctx, prep, deps, 'solver-plugins review', {
217
+ score: opts.score,
218
+ scoreDecimals: opts.scoreDecimals,
219
+ ...(opts.tag1 ? { tag1: opts.tag1 } : {}),
220
+ ...(opts.tag2 ? { tag2: opts.tag2 } : {}),
221
+ });
222
+ }
223
+ export async function respondHandler(ctx, opts, deps) {
224
+ const prep = await preparePipeline(ctx, opts.pluginCid, opts.configPath, deps);
225
+ if (!prep)
226
+ return;
227
+ const client = deps.reputationClientFactory({
228
+ reputationRegistryAddress: prep.reputationRegistryAddress,
229
+ safeAddress: prep.safeAddress,
230
+ rpcUrl: prep.config.rpcUrl,
231
+ network: prep.config.network === 'testnet' ? 'base-sepolia' : 'base',
232
+ earningDir: prep.config.earningDir,
233
+ password: prep.password,
234
+ });
235
+ try {
236
+ const responseHash = keccak256(toBytes(opts.responseUri));
237
+ const txHash = await client.respondToFeedback({
238
+ feedbackId: {
239
+ agentId: prep.builderAgentId,
240
+ client: opts.client,
241
+ feedbackIndex: opts.feedbackIndex,
242
+ },
243
+ responseURI: opts.responseUri,
244
+ responseHash,
245
+ });
246
+ writeJson(ctx, {
247
+ verb: 'solver-plugins respond',
248
+ txHash,
249
+ pluginCid: opts.pluginCid,
250
+ targetAgentId: prep.builderAgentId.toString(),
251
+ feedbackIndex: opts.feedbackIndex.toString(),
252
+ client: opts.client,
253
+ responseURI: opts.responseUri,
254
+ reputationRegistry: prep.reputationRegistryAddress,
255
+ safeAddress: prep.safeAddress,
256
+ });
257
+ }
258
+ catch (err) {
259
+ emitWriteError(ctx, err);
260
+ }
261
+ }
262
+ //# sourceMappingURL=solver-plugins-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solver-plugins-feedback.js","sourceRoot":"","sources":["../../../src/cli/commands/solver-plugins-feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * `jinn solver-plugins {list-feedback, discover, status}` — read verbs.
3
+ *
4
+ * None of the read verbs resolve the keystore password. They use the same
5
+ * `discoveryApiFactory` the daemon uses, plus a read-only
6
+ * `ReputationRegistryClient` (`password: undefined` → `walletClient`
7
+ * unbuilt → reads work, writes throw).
8
+ *
9
+ * Output envelopes mirror the write-verb convention (`verb` field +
10
+ * structured payload). Failure modes:
11
+ * - `agentid_unresolvable` (list-feedback only — `status` reports
12
+ * `{ status: 'not_published' }` instead, since "no record" is the
13
+ * answer to a status read).
14
+ * - `discovery_unavailable` (factory throws `DiscoveryUnavailableError`).
15
+ * - `config_load_failed`.
16
+ */
17
+ import type { Address } from 'viem';
18
+ import type { CommandContext } from '../command.js';
19
+ import type { SolverPluginsDeps } from './solver-plugins.js';
20
+ export interface StatusOptions {
21
+ pluginCid: string;
22
+ configPath: string | undefined;
23
+ }
24
+ export interface DiscoverOptions {
25
+ solverType: string | undefined;
26
+ builderAgentId: string | undefined;
27
+ includeRevoked: boolean | undefined;
28
+ limit: number | undefined;
29
+ configPath: string | undefined;
30
+ }
31
+ export interface ListFeedbackOptions {
32
+ pluginCid: string;
33
+ client: Address | undefined;
34
+ includeRevoked: boolean;
35
+ configPath: string | undefined;
36
+ }
37
+ /**
38
+ * `discover` lists published plug-in rows directly from the indexer. The
39
+ * `PluginPublication` row already carries name/version/supports/builderAgentId,
40
+ * so no IPFS payload dereference is required — `ipfsFetch` is held on
41
+ * SolverPluginsDeps for symmetry / future use but this handler does not
42
+ * consume it (a plan refinement vs. the design note's "missing IPFS config"
43
+ * failure mode; that mode does not apply because the discovery row is
44
+ * self-describing).
45
+ */
46
+ export declare function discoverHandler(ctx: CommandContext, opts: DiscoverOptions, deps: SolverPluginsDeps): Promise<void>;
47
+ /**
48
+ * `status` composes the publication row (or the absence of one) with the
49
+ * read-only `ReputationRegistry.getSummary` and the operator-local
50
+ * `solverPlugins.blockedCids` flag. A missing publication is a valid answer
51
+ * (`{ status: 'not_published' }`, exit 0), not an error.
52
+ */
53
+ export declare function statusHandler(ctx: CommandContext, opts: StatusOptions, deps: SolverPluginsDeps): Promise<void>;
54
+ export declare function listFeedbackHandler(ctx: CommandContext, opts: ListFeedbackOptions, deps: SolverPluginsDeps): Promise<void>;
@@ -0,0 +1,259 @@
1
+ /**
2
+ * `jinn solver-plugins {list-feedback, discover, status}` — read verbs.
3
+ *
4
+ * None of the read verbs resolve the keystore password. They use the same
5
+ * `discoveryApiFactory` the daemon uses, plus a read-only
6
+ * `ReputationRegistryClient` (`password: undefined` → `walletClient`
7
+ * unbuilt → reads work, writes throw).
8
+ *
9
+ * Output envelopes mirror the write-verb convention (`verb` field +
10
+ * structured payload). Failure modes:
11
+ * - `agentid_unresolvable` (list-feedback only — `status` reports
12
+ * `{ status: 'not_published' }` instead, since "no record" is the
13
+ * answer to a status read).
14
+ * - `discovery_unavailable` (factory throws `DiscoveryUnavailableError`).
15
+ * - `config_load_failed`.
16
+ */
17
+ import { writeJson } from './solver-plugins.js';
18
+ import { getReputationRegistryAddress } from '../../erc8004/addresses.js';
19
+ import { DiscoveryUnavailableError } from '../../discovery/types.js';
20
+ /**
21
+ * Load the operator config, emitting a `config_load_failed` envelope and
22
+ * exiting on failure. Returns `null` only after `ctx.exit` has been called.
23
+ */
24
+ function loadConfigOrEmit(ctx, configPath, deps) {
25
+ try {
26
+ return deps.loadConfig(configPath);
27
+ }
28
+ catch (err) {
29
+ writeJson(ctx, {
30
+ error: { code: 'config_load_failed', message: err instanceof Error ? err.message : String(err) },
31
+ });
32
+ ctx.exit(1);
33
+ return null;
34
+ }
35
+ }
36
+ function emitDiscoveryUnavailable(ctx, config, err) {
37
+ writeJson(ctx, {
38
+ error: {
39
+ code: 'discovery_unavailable',
40
+ message: `Indexer unavailable (mode=${config.discovery?.mode ?? 'onchain'}${config.discovery?.url ? `, url=${config.discovery.url}` : ''}): ${err.message}`,
41
+ details: {
42
+ mode: config.discovery?.mode ?? 'onchain',
43
+ ...(config.discovery?.url ? { url: config.discovery.url } : {}),
44
+ },
45
+ },
46
+ });
47
+ ctx.exit(1);
48
+ }
49
+ /**
50
+ * `discover` lists published plug-in rows directly from the indexer. The
51
+ * `PluginPublication` row already carries name/version/supports/builderAgentId,
52
+ * so no IPFS payload dereference is required — `ipfsFetch` is held on
53
+ * SolverPluginsDeps for symmetry / future use but this handler does not
54
+ * consume it (a plan refinement vs. the design note's "missing IPFS config"
55
+ * failure mode; that mode does not apply because the discovery row is
56
+ * self-describing).
57
+ */
58
+ export async function discoverHandler(ctx, opts, deps) {
59
+ const config = loadConfigOrEmit(ctx, opts.configPath, deps);
60
+ if (!config)
61
+ return;
62
+ try {
63
+ const api = deps.discoveryApiFactory(config);
64
+ const plugins = await api.listPluginPublications({
65
+ ...(opts.solverType ? { solverType: opts.solverType } : {}),
66
+ ...(opts.builderAgentId ? { builderAgentId: opts.builderAgentId } : {}),
67
+ ...(opts.includeRevoked !== undefined ? { includeRevoked: opts.includeRevoked } : {}),
68
+ ...(opts.limit !== undefined ? { limit: opts.limit } : {}),
69
+ });
70
+ writeJson(ctx, {
71
+ verb: 'solver-plugins discover',
72
+ plugins: plugins.map((p) => ({
73
+ cid: p.cid,
74
+ builderAgentId: p.builderAgentId,
75
+ name: p.name,
76
+ version: p.version,
77
+ supports: p.supports,
78
+ publishedAt: p.publishedAt,
79
+ revoked: p.revoked,
80
+ ...(p.revokedReason ? { revokedReason: p.revokedReason } : {}),
81
+ pluginSha256: p.pluginSha256,
82
+ })),
83
+ });
84
+ }
85
+ catch (err) {
86
+ if (err instanceof DiscoveryUnavailableError) {
87
+ emitDiscoveryUnavailable(ctx, config, err);
88
+ return;
89
+ }
90
+ throw err;
91
+ }
92
+ }
93
+ /**
94
+ * `status` composes the publication row (or the absence of one) with the
95
+ * read-only `ReputationRegistry.getSummary` and the operator-local
96
+ * `solverPlugins.blockedCids` flag. A missing publication is a valid answer
97
+ * (`{ status: 'not_published' }`, exit 0), not an error.
98
+ */
99
+ export async function statusHandler(ctx, opts, deps) {
100
+ const config = loadConfigOrEmit(ctx, opts.configPath, deps);
101
+ if (!config)
102
+ return;
103
+ const locallyBlocked = config.solverPlugins?.blockedCids?.includes(opts.pluginCid) ?? false;
104
+ let row;
105
+ try {
106
+ const api = deps.discoveryApiFactory(config);
107
+ const rows = await api.listPluginPublications({});
108
+ row = rows.find((r) => r.cid === opts.pluginCid);
109
+ }
110
+ catch (err) {
111
+ if (err instanceof DiscoveryUnavailableError) {
112
+ emitDiscoveryUnavailable(ctx, config, err);
113
+ return;
114
+ }
115
+ throw err;
116
+ }
117
+ if (!row) {
118
+ writeJson(ctx, {
119
+ verb: 'solver-plugins status',
120
+ pluginCid: opts.pluginCid,
121
+ status: 'not_published',
122
+ locallyBlocked,
123
+ });
124
+ return;
125
+ }
126
+ if (row.revoked) {
127
+ writeJson(ctx, {
128
+ verb: 'solver-plugins status',
129
+ pluginCid: opts.pluginCid,
130
+ status: 'revoked',
131
+ publication: {
132
+ cid: row.cid,
133
+ builderAgentId: row.builderAgentId,
134
+ name: row.name,
135
+ version: row.version,
136
+ supports: row.supports,
137
+ publishedAt: row.publishedAt,
138
+ pluginSha256: row.pluginSha256,
139
+ },
140
+ ...(row.revokedReason ? { revokedReason: row.revokedReason } : {}),
141
+ locallyBlocked,
142
+ });
143
+ return;
144
+ }
145
+ // Active publication: also try to summarise reputation. Empty client list →
146
+ // no summary (getSummary reverts on empty input by design).
147
+ const chainId = config.network === 'testnet' ? 84532 : 8453;
148
+ const reputationRegistryAddress = getReputationRegistryAddress(chainId);
149
+ let summarySerialised = null;
150
+ if (reputationRegistryAddress) {
151
+ const client = deps.reputationClientFactory({
152
+ reputationRegistryAddress,
153
+ safeAddress: undefined,
154
+ rpcUrl: config.rpcUrl,
155
+ network: config.network === 'testnet' ? 'base-sepolia' : 'base',
156
+ earningDir: config.earningDir,
157
+ password: undefined,
158
+ });
159
+ const builderAgentId = BigInt(row.builderAgentId);
160
+ const clients = await client.getClients(builderAgentId);
161
+ if (clients.length > 0) {
162
+ const summary = await client.getSummary(builderAgentId, { clientAddresses: clients });
163
+ summarySerialised = {
164
+ count: summary.count.toString(),
165
+ summaryValue: summary.summaryValue.toString(),
166
+ summaryValueDecimals: summary.summaryValueDecimals,
167
+ };
168
+ }
169
+ }
170
+ writeJson(ctx, {
171
+ verb: 'solver-plugins status',
172
+ pluginCid: opts.pluginCid,
173
+ status: 'published',
174
+ publication: {
175
+ cid: row.cid,
176
+ builderAgentId: row.builderAgentId,
177
+ name: row.name,
178
+ version: row.version,
179
+ supports: row.supports,
180
+ publishedAt: row.publishedAt,
181
+ pluginSha256: row.pluginSha256,
182
+ },
183
+ summary: summarySerialised,
184
+ locallyBlocked,
185
+ });
186
+ }
187
+ export async function listFeedbackHandler(ctx, opts, deps) {
188
+ const config = loadConfigOrEmit(ctx, opts.configPath, deps);
189
+ if (!config)
190
+ return;
191
+ let builderAgentIdStr;
192
+ try {
193
+ const api = deps.discoveryApiFactory(config);
194
+ const rows = await api.listPluginPublications({});
195
+ builderAgentIdStr = rows.find((r) => r.cid === opts.pluginCid)?.builderAgentId;
196
+ }
197
+ catch (err) {
198
+ if (err instanceof DiscoveryUnavailableError) {
199
+ emitDiscoveryUnavailable(ctx, config, err);
200
+ return;
201
+ }
202
+ throw err;
203
+ }
204
+ if (!builderAgentIdStr) {
205
+ writeJson(ctx, {
206
+ error: {
207
+ code: 'agentid_unresolvable',
208
+ message: `No plug-in publication record found for cid ${opts.pluginCid} (discovery mode=${config.discovery?.mode ?? 'onchain'}).`,
209
+ details: { mode: config.discovery?.mode ?? 'onchain' },
210
+ },
211
+ });
212
+ ctx.exit(1);
213
+ return;
214
+ }
215
+ const chainId = config.network === 'testnet' ? 84532 : 8453;
216
+ const reputationRegistryAddress = getReputationRegistryAddress(chainId);
217
+ if (!reputationRegistryAddress) {
218
+ writeJson(ctx, {
219
+ error: {
220
+ code: 'config_load_failed',
221
+ message: `No ReputationRegistry address known for chainId ${chainId}.`,
222
+ },
223
+ });
224
+ ctx.exit(1);
225
+ return;
226
+ }
227
+ // Read-only client — no Safe needed (Safe routing is for writes).
228
+ const client = deps.reputationClientFactory({
229
+ reputationRegistryAddress,
230
+ safeAddress: undefined,
231
+ rpcUrl: config.rpcUrl,
232
+ network: config.network === 'testnet' ? 'base-sepolia' : 'base',
233
+ earningDir: config.earningDir,
234
+ password: undefined,
235
+ });
236
+ const builderAgentId = BigInt(builderAgentIdStr);
237
+ const records = await client.readAllFeedback(builderAgentId, {
238
+ ...(opts.client ? { clientAddresses: [opts.client] } : {}),
239
+ includeRevoked: opts.includeRevoked,
240
+ });
241
+ // Marshal BigInts to strings for JSON-safe output.
242
+ const serialised = records.map((r) => ({
243
+ agentId: r.agentId.toString(),
244
+ client: r.client,
245
+ feedbackIndex: r.feedbackIndex.toString(),
246
+ score: r.score.toString(),
247
+ scoreDecimals: r.scoreDecimals,
248
+ tag1: r.tag1,
249
+ tag2: r.tag2,
250
+ revoked: r.revoked,
251
+ }));
252
+ writeJson(ctx, {
253
+ verb: 'solver-plugins list-feedback',
254
+ pluginCid: opts.pluginCid,
255
+ targetAgentId: builderAgentIdStr,
256
+ records: serialised,
257
+ });
258
+ }
259
+ //# sourceMappingURL=solver-plugins-read.js.map