@jinn-network/client 0.1.1 → 0.1.2-canary.6237288d

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 (424) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CONTRIBUTING.md +123 -0
  3. package/README.md +213 -37
  4. package/deployments/deployment-claim-registry-baseSepolia.json +13 -0
  5. package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +15 -0
  6. package/dist/adapters/adapter.d.ts +7 -0
  7. package/dist/adapters/claim-registry/abi.d.ts +127 -0
  8. package/dist/adapters/claim-registry/abi.js +93 -0
  9. package/dist/adapters/claim-registry/abi.js.map +1 -0
  10. package/dist/adapters/claim-registry/client.d.ts +89 -0
  11. package/dist/adapters/claim-registry/client.js +205 -0
  12. package/dist/adapters/claim-registry/client.js.map +1 -0
  13. package/dist/adapters/mech/adapter.d.ts +5 -0
  14. package/dist/adapters/mech/adapter.js +211 -56
  15. package/dist/adapters/mech/adapter.js.map +1 -1
  16. package/dist/adapters/mech/contracts.d.ts +19 -1
  17. package/dist/adapters/mech/contracts.js +112 -8
  18. package/dist/adapters/mech/contracts.js.map +1 -1
  19. package/dist/adapters/mech/ipfs.d.ts +38 -5
  20. package/dist/adapters/mech/ipfs.js +174 -17
  21. package/dist/adapters/mech/ipfs.js.map +1 -1
  22. package/dist/adapters/mech/safe.js +8 -6
  23. package/dist/adapters/mech/safe.js.map +1 -1
  24. package/dist/adapters/mech/types.d.ts +22 -46
  25. package/dist/adapters/mech/types.js +16 -35
  26. package/dist/adapters/mech/types.js.map +1 -1
  27. package/dist/api/balance-build.js +3 -3
  28. package/dist/api/balance-build.js.map +1 -1
  29. package/dist/api/fleet-build.js +35 -40
  30. package/dist/api/fleet-build.js.map +1 -1
  31. package/dist/api/gather-status.d.ts +6 -0
  32. package/dist/api/gather-status.js +187 -4
  33. package/dist/api/gather-status.js.map +1 -1
  34. package/dist/api/history-build.d.ts +5 -1
  35. package/dist/api/history-build.js +51 -26
  36. package/dist/api/history-build.js.map +1 -1
  37. package/dist/api/portfolio-v0-build.d.ts +83 -0
  38. package/dist/api/portfolio-v0-build.js +143 -0
  39. package/dist/api/portfolio-v0-build.js.map +1 -0
  40. package/dist/api/portfolio-v0-doctor.d.ts +37 -0
  41. package/dist/api/portfolio-v0-doctor.js +123 -0
  42. package/dist/api/portfolio-v0-doctor.js.map +1 -0
  43. package/dist/api/rewards-build.js +30 -14
  44. package/dist/api/rewards-build.js.map +1 -1
  45. package/dist/api/status-build.d.ts +39 -6
  46. package/dist/api/status-build.js +3 -1
  47. package/dist/api/status-build.js.map +1 -1
  48. package/dist/api/status-rollup-build.d.ts +2 -0
  49. package/dist/api/status-rollup-build.js +30 -3
  50. package/dist/api/status-rollup-build.js.map +1 -1
  51. package/dist/bin/jinn-mcp.d.ts +0 -12
  52. package/dist/bin/jinn-mcp.js +5 -14
  53. package/dist/bin/jinn-mcp.js.map +1 -1
  54. package/dist/build-meta.json +1 -1
  55. package/dist/cli/commands/auth.js +137 -25
  56. package/dist/cli/commands/auth.js.map +1 -1
  57. package/dist/cli/commands/balance.js +8 -1
  58. package/dist/cli/commands/balance.js.map +1 -1
  59. package/dist/cli/commands/bootstrap.js +23 -0
  60. package/dist/cli/commands/bootstrap.js.map +1 -1
  61. package/dist/cli/commands/doctor.js +160 -14
  62. package/dist/cli/commands/doctor.js.map +1 -1
  63. package/dist/cli/commands/fleet-scale.js +1 -0
  64. package/dist/cli/commands/fleet-scale.js.map +1 -1
  65. package/dist/cli/commands/fleet.js +10 -1
  66. package/dist/cli/commands/fleet.js.map +1 -1
  67. package/dist/cli/commands/fund-requirements.js +2 -0
  68. package/dist/cli/commands/fund-requirements.js.map +1 -1
  69. package/dist/cli/commands/history.js +25 -6
  70. package/dist/cli/commands/history.js.map +1 -1
  71. package/dist/cli/commands/intents.d.ts +17 -0
  72. package/dist/cli/commands/intents.js +489 -0
  73. package/dist/cli/commands/intents.js.map +1 -0
  74. package/dist/cli/commands/keys-backup.js +13 -11
  75. package/dist/cli/commands/keys-backup.js.map +1 -1
  76. package/dist/cli/commands/logs.js +35 -11
  77. package/dist/cli/commands/logs.js.map +1 -1
  78. package/dist/cli/commands/mcp.d.ts +3 -0
  79. package/dist/cli/commands/mcp.js +19 -0
  80. package/dist/cli/commands/mcp.js.map +1 -0
  81. package/dist/cli/commands/plugin-install.js +8 -4
  82. package/dist/cli/commands/plugin-install.js.map +1 -1
  83. package/dist/cli/commands/quickstart.js +99 -5
  84. package/dist/cli/commands/quickstart.js.map +1 -1
  85. package/dist/cli/commands/rewards.js +27 -1
  86. package/dist/cli/commands/rewards.js.map +1 -1
  87. package/dist/cli/commands/run.js +38 -0
  88. package/dist/cli/commands/run.js.map +1 -1
  89. package/dist/cli/commands/status.js +11 -1
  90. package/dist/cli/commands/status.js.map +1 -1
  91. package/dist/cli/commands/submit-intent.js +110 -44
  92. package/dist/cli/commands/submit-intent.js.map +1 -1
  93. package/dist/cli/commands/version.js +1 -0
  94. package/dist/cli/commands/version.js.map +1 -1
  95. package/dist/cli/deployment-digest.js +5 -0
  96. package/dist/cli/deployment-digest.js.map +1 -1
  97. package/dist/cli/execution-context.js +1 -0
  98. package/dist/cli/execution-context.js.map +1 -1
  99. package/dist/cli/index.js +4 -0
  100. package/dist/cli/index.js.map +1 -1
  101. package/dist/cli/intent-registry-access.d.ts +62 -0
  102. package/dist/cli/intent-registry-access.js +165 -0
  103. package/dist/cli/intent-registry-access.js.map +1 -0
  104. package/dist/cli/introspection-context.js +12 -8
  105. package/dist/cli/introspection-context.js.map +1 -1
  106. package/dist/cli/password.d.ts +21 -9
  107. package/dist/cli/password.js +45 -24
  108. package/dist/cli/password.js.map +1 -1
  109. package/dist/config.d.ts +137 -8
  110. package/dist/config.js +70 -12
  111. package/dist/config.js.map +1 -1
  112. package/dist/daemon/balance-topup-loop.js +32 -4
  113. package/dist/daemon/balance-topup-loop.js.map +1 -1
  114. package/dist/daemon/creator.d.ts +7 -4
  115. package/dist/daemon/creator.js +55 -26
  116. package/dist/daemon/creator.js.map +1 -1
  117. package/dist/daemon/daemon.d.ts +35 -3
  118. package/dist/daemon/daemon.js +99 -7
  119. package/dist/daemon/daemon.js.map +1 -1
  120. package/dist/daemon/delivery-watcher.d.ts +3 -1
  121. package/dist/daemon/delivery-watcher.js +19 -1
  122. package/dist/daemon/delivery-watcher.js.map +1 -1
  123. package/dist/daemon/reward-claim-loop.js +38 -1
  124. package/dist/daemon/reward-claim-loop.js.map +1 -1
  125. package/dist/dashboard/index.html +71 -496
  126. package/dist/discovery/registry.d.ts +54 -0
  127. package/dist/discovery/registry.js +73 -0
  128. package/dist/discovery/registry.js.map +1 -1
  129. package/dist/earning/bootstrap.d.ts +2 -1
  130. package/dist/earning/bootstrap.js +71 -33
  131. package/dist/earning/bootstrap.js.map +1 -1
  132. package/dist/earning/contracts.d.ts +10 -0
  133. package/dist/earning/contracts.js +24 -0
  134. package/dist/earning/contracts.js.map +1 -1
  135. package/dist/earning/jinn-rewards.d.ts +9 -0
  136. package/dist/earning/jinn-rewards.js +7 -0
  137. package/dist/earning/jinn-rewards.js.map +1 -1
  138. package/dist/earning/stolas-claim.d.ts +6 -0
  139. package/dist/earning/stolas-claim.js +7 -0
  140. package/dist/earning/stolas-claim.js.map +1 -1
  141. package/dist/intents/kinds/constants.d.ts +5 -0
  142. package/dist/intents/kinds/constants.js +6 -0
  143. package/dist/intents/kinds/constants.js.map +1 -0
  144. package/dist/intents/kinds/index.d.ts +28 -0
  145. package/dist/intents/kinds/index.js +50 -0
  146. package/dist/intents/kinds/index.js.map +1 -0
  147. package/dist/intents/kinds/portfolio-v0.d.ts +2 -0
  148. package/dist/intents/kinds/portfolio-v0.js +13 -0
  149. package/dist/intents/kinds/portfolio-v0.js.map +1 -0
  150. package/dist/intents/kinds/prediction-apy-v0.d.ts +3 -0
  151. package/dist/intents/kinds/prediction-apy-v0.js +21 -0
  152. package/dist/intents/kinds/prediction-apy-v0.js.map +1 -0
  153. package/dist/intents/kinds/prediction-v0.d.ts +3 -0
  154. package/dist/intents/kinds/prediction-v0.js +32 -0
  155. package/dist/intents/kinds/prediction-v0.js.map +1 -0
  156. package/dist/intents/kinds/spec-kind.d.ts +38 -0
  157. package/dist/intents/kinds/spec-kind.js +6 -0
  158. package/dist/intents/kinds/spec-kind.js.map +1 -0
  159. package/dist/intents/posting-service.d.ts +26 -0
  160. package/dist/intents/posting-service.js +218 -0
  161. package/dist/intents/posting-service.js.map +1 -0
  162. package/dist/intents/prediction-apy-v0-auto.d.ts +11 -0
  163. package/dist/intents/prediction-apy-v0-auto.js +46 -0
  164. package/dist/intents/prediction-apy-v0-auto.js.map +1 -0
  165. package/dist/intents/prediction-apy-v0-template.d.ts +8 -0
  166. package/dist/intents/prediction-apy-v0-template.js +22 -0
  167. package/dist/intents/prediction-apy-v0-template.js.map +1 -0
  168. package/dist/intents/prediction-v0-auto.d.ts +53 -0
  169. package/dist/intents/prediction-v0-auto.js +84 -0
  170. package/dist/intents/prediction-v0-auto.js.map +1 -0
  171. package/dist/intents/prediction-v0-template.d.ts +70 -0
  172. package/dist/intents/prediction-v0-template.js +145 -0
  173. package/dist/intents/prediction-v0-template.js.map +1 -0
  174. package/dist/intents/sources.d.ts +39 -0
  175. package/dist/intents/sources.js +42 -0
  176. package/dist/intents/sources.js.map +1 -0
  177. package/dist/main.js +175 -3
  178. package/dist/main.js.map +1 -1
  179. package/dist/mcp/operator-server.d.ts +1 -1
  180. package/dist/mcp/operator-server.js +1 -1
  181. package/dist/mcp/server.js +8 -4
  182. package/dist/mcp/server.js.map +1 -1
  183. package/dist/observability/emit-event.d.ts +12 -0
  184. package/dist/observability/emit-event.js +27 -0
  185. package/dist/observability/emit-event.js.map +1 -0
  186. package/dist/preflight/api-port.d.ts +13 -0
  187. package/dist/preflight/api-port.js +32 -0
  188. package/dist/preflight/api-port.js.map +1 -0
  189. package/dist/preflight/claude-auth.d.ts +12 -1
  190. package/dist/preflight/claude-auth.js +21 -3
  191. package/dist/preflight/claude-auth.js.map +1 -1
  192. package/dist/preflight/rpc-network.d.ts +44 -0
  193. package/dist/preflight/rpc-network.js +121 -0
  194. package/dist/preflight/rpc-network.js.map +1 -0
  195. package/dist/restorer/engine/canonical-json.d.ts +18 -0
  196. package/dist/restorer/engine/canonical-json.js +59 -0
  197. package/dist/restorer/engine/canonical-json.js.map +1 -0
  198. package/dist/restorer/engine/claim.d.ts +69 -0
  199. package/dist/restorer/engine/claim.js +104 -0
  200. package/dist/restorer/engine/claim.js.map +1 -0
  201. package/dist/restorer/engine/delivery.d.ts +52 -0
  202. package/dist/restorer/engine/delivery.js +63 -0
  203. package/dist/restorer/engine/delivery.js.map +1 -0
  204. package/dist/restorer/engine/engine.d.ts +213 -0
  205. package/dist/restorer/engine/engine.js +769 -0
  206. package/dist/restorer/engine/engine.js.map +1 -0
  207. package/dist/restorer/engine/manifest-assembly.d.ts +67 -0
  208. package/dist/restorer/engine/manifest-assembly.js +79 -0
  209. package/dist/restorer/engine/manifest-assembly.js.map +1 -0
  210. package/dist/restorer/engine/packaging.d.ts +87 -0
  211. package/dist/restorer/engine/packaging.js +350 -0
  212. package/dist/restorer/engine/packaging.js.map +1 -0
  213. package/dist/restorer/engine/persistence.d.ts +170 -0
  214. package/dist/restorer/engine/persistence.js +381 -0
  215. package/dist/restorer/engine/persistence.js.map +1 -0
  216. package/dist/restorer/engine/recovery.d.ts +22 -0
  217. package/dist/restorer/engine/recovery.js +24 -0
  218. package/dist/restorer/engine/recovery.js.map +1 -0
  219. package/dist/restorer/engine/registry.d.ts +62 -0
  220. package/dist/restorer/engine/registry.js +73 -0
  221. package/dist/restorer/engine/registry.js.map +1 -0
  222. package/dist/restorer/engine/signing.d.ts +30 -0
  223. package/dist/restorer/engine/signing.js +39 -0
  224. package/dist/restorer/engine/signing.js.map +1 -0
  225. package/dist/restorer/engine/state.d.ts +42 -0
  226. package/dist/restorer/engine/state.js +87 -0
  227. package/dist/restorer/engine/state.js.map +1 -0
  228. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.d.ts +64 -0
  229. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js +96 -0
  230. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js.map +1 -0
  231. package/dist/restorer/impls/claude-mcp-hyperliquid/index.d.ts +104 -0
  232. package/dist/restorer/impls/claude-mcp-hyperliquid/index.js +721 -0
  233. package/dist/restorer/impls/claude-mcp-hyperliquid/index.js.map +1 -0
  234. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +137 -0
  235. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js +865 -0
  236. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -0
  237. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.d.ts +74 -0
  238. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js +74 -0
  239. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js.map +1 -0
  240. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.d.ts +97 -0
  241. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js +226 -0
  242. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +1 -0
  243. package/dist/restorer/impls/claude-mcp-prediction/index.d.ts +44 -0
  244. package/dist/restorer/impls/claude-mcp-prediction/index.js +239 -0
  245. package/dist/restorer/impls/claude-mcp-prediction/index.js.map +1 -0
  246. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.d.ts +38 -0
  247. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js +135 -0
  248. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js.map +1 -0
  249. package/dist/restorer/impls/claude-mcp-prediction/prompt.d.ts +8 -0
  250. package/dist/restorer/impls/claude-mcp-prediction/prompt.js +54 -0
  251. package/dist/restorer/impls/claude-mcp-prediction/prompt.js.map +1 -0
  252. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.d.ts +36 -0
  253. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js +137 -0
  254. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -0
  255. package/dist/restorer/impls/claude-mcp-prediction/types.d.ts +84 -0
  256. package/dist/restorer/impls/claude-mcp-prediction/types.js +6 -0
  257. package/dist/restorer/impls/claude-mcp-prediction/types.js.map +1 -0
  258. package/dist/restorer/impls/claude-mcp-prediction-apy/index.d.ts +34 -0
  259. package/dist/restorer/impls/claude-mcp-prediction-apy/index.js +233 -0
  260. package/dist/restorer/impls/claude-mcp-prediction-apy/index.js.map +1 -0
  261. package/dist/restorer/impls/claude-mcp-prediction-apy/mcp-tools.d.ts +18 -0
  262. package/dist/restorer/impls/claude-mcp-prediction-apy/mcp-tools.js +136 -0
  263. package/dist/restorer/impls/claude-mcp-prediction-apy/mcp-tools.js.map +1 -0
  264. package/dist/restorer/impls/claude-mcp-prediction-apy/prompt.d.ts +7 -0
  265. package/dist/restorer/impls/claude-mcp-prediction-apy/prompt.js +46 -0
  266. package/dist/restorer/impls/claude-mcp-prediction-apy/prompt.js.map +1 -0
  267. package/dist/restorer/impls/claude-mcp-prediction-apy/session-orchestrator.d.ts +27 -0
  268. package/dist/restorer/impls/claude-mcp-prediction-apy/session-orchestrator.js +128 -0
  269. package/dist/restorer/impls/claude-mcp-prediction-apy/session-orchestrator.js.map +1 -0
  270. package/dist/restorer/impls/claude-mcp-prediction-apy/types.d.ts +64 -0
  271. package/dist/restorer/impls/claude-mcp-prediction-apy/types.js +6 -0
  272. package/dist/restorer/impls/claude-mcp-prediction-apy/types.js.map +1 -0
  273. package/dist/restorer/impls/evaluation-context.d.ts +16 -0
  274. package/dist/restorer/impls/evaluation-context.js +18 -0
  275. package/dist/restorer/impls/evaluation-context.js.map +1 -0
  276. package/dist/restorer/impls/index.d.ts +46 -0
  277. package/dist/restorer/impls/index.js +88 -0
  278. package/dist/restorer/impls/index.js.map +1 -0
  279. package/dist/restorer/impls/legacy-claude/index.d.ts +52 -0
  280. package/dist/restorer/impls/legacy-claude/index.js +140 -0
  281. package/dist/restorer/impls/legacy-claude/index.js.map +1 -0
  282. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.d.ts +68 -0
  283. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js +117 -0
  284. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js.map +1 -0
  285. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.d.ts +49 -0
  286. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js +91 -0
  287. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js.map +1 -0
  288. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.d.ts +78 -0
  289. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js +274 -0
  290. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js.map +1 -0
  291. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.d.ts +23 -0
  292. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js +49 -0
  293. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js.map +1 -0
  294. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.d.ts +25 -0
  295. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js +44 -0
  296. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js.map +1 -0
  297. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.d.ts +17 -0
  298. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js +43 -0
  299. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js.map +1 -0
  300. package/dist/restorer/impls/portfolio-v0-evaluator/index.d.ts +44 -0
  301. package/dist/restorer/impls/portfolio-v0-evaluator/index.js +440 -0
  302. package/dist/restorer/impls/portfolio-v0-evaluator/index.js.map +1 -0
  303. package/dist/restorer/impls/portfolio-v0-evaluator/score.d.ts +21 -0
  304. package/dist/restorer/impls/portfolio-v0-evaluator/score.js +32 -0
  305. package/dist/restorer/impls/portfolio-v0-evaluator/score.js.map +1 -0
  306. package/dist/restorer/impls/portfolio-v0-evaluator/types.d.ts +34 -0
  307. package/dist/restorer/impls/portfolio-v0-evaluator/types.js +8 -0
  308. package/dist/restorer/impls/portfolio-v0-evaluator/types.js.map +1 -0
  309. package/dist/restorer/impls/prediction-apy-v0-baseline/index.d.ts +40 -0
  310. package/dist/restorer/impls/prediction-apy-v0-baseline/index.js +107 -0
  311. package/dist/restorer/impls/prediction-apy-v0-baseline/index.js.map +1 -0
  312. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.d.ts +2 -0
  313. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js +7 -0
  314. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js.map +1 -0
  315. package/dist/restorer/impls/prediction-apy-v0-baseline/types.d.ts +4 -0
  316. package/dist/restorer/impls/prediction-apy-v0-baseline/types.js +2 -0
  317. package/dist/restorer/impls/prediction-apy-v0-baseline/types.js.map +1 -0
  318. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.d.ts +6 -0
  319. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js +11 -0
  320. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js.map +1 -0
  321. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.d.ts +42 -0
  322. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js +208 -0
  323. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js.map +1 -0
  324. package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.d.ts +7 -0
  325. package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.js +29 -0
  326. package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.js.map +1 -0
  327. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.d.ts +9 -0
  328. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js +20 -0
  329. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js.map +1 -0
  330. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.d.ts +7 -0
  331. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js +2 -0
  332. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js.map +1 -0
  333. package/dist/restorer/impls/prediction-v0-baseline/index.d.ts +31 -0
  334. package/dist/restorer/impls/prediction-v0-baseline/index.js +100 -0
  335. package/dist/restorer/impls/prediction-v0-baseline/index.js.map +1 -0
  336. package/dist/restorer/impls/prediction-v0-baseline/strategy.d.ts +8 -0
  337. package/dist/restorer/impls/prediction-v0-baseline/strategy.js +41 -0
  338. package/dist/restorer/impls/prediction-v0-baseline/strategy.js.map +1 -0
  339. package/dist/restorer/impls/prediction-v0-baseline/types.d.ts +7 -0
  340. package/dist/restorer/impls/prediction-v0-baseline/types.js +2 -0
  341. package/dist/restorer/impls/prediction-v0-baseline/types.js.map +1 -0
  342. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.d.ts +20 -0
  343. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js +66 -0
  344. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js.map +1 -0
  345. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.d.ts +9 -0
  346. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js +23 -0
  347. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js.map +1 -0
  348. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.d.ts +3 -0
  349. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js +13 -0
  350. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js.map +1 -0
  351. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.d.ts +13 -0
  352. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js +111 -0
  353. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -0
  354. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.d.ts +5 -0
  355. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js +20 -0
  356. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js.map +1 -0
  357. package/dist/restorer/impls/prediction-v0-evaluator/index.d.ts +36 -0
  358. package/dist/restorer/impls/prediction-v0-evaluator/index.js +234 -0
  359. package/dist/restorer/impls/prediction-v0-evaluator/index.js.map +1 -0
  360. package/dist/restorer/impls/prediction-v0-evaluator/score.d.ts +8 -0
  361. package/dist/restorer/impls/prediction-v0-evaluator/score.js +15 -0
  362. package/dist/restorer/impls/prediction-v0-evaluator/score.js.map +1 -0
  363. package/dist/restorer/impls/prediction-v0-evaluator/types.d.ts +7 -0
  364. package/dist/restorer/impls/prediction-v0-evaluator/types.js +2 -0
  365. package/dist/restorer/impls/prediction-v0-evaluator/types.js.map +1 -0
  366. package/dist/restorer/types.d.ts +194 -0
  367. package/dist/restorer/types.js +28 -0
  368. package/dist/restorer/types.js.map +1 -0
  369. package/dist/rpc-error-context.d.ts +10 -0
  370. package/dist/rpc-error-context.js +26 -0
  371. package/dist/rpc-error-context.js.map +1 -0
  372. package/dist/store/store.d.ts +101 -1
  373. package/dist/store/store.js +334 -4
  374. package/dist/store/store.js.map +1 -1
  375. package/dist/trajectory/schema.d.ts +510 -0
  376. package/dist/trajectory/schema.js +74 -0
  377. package/dist/trajectory/schema.js.map +1 -0
  378. package/dist/types/desired-state.d.ts +53 -0
  379. package/dist/types/desired-state.js +20 -0
  380. package/dist/types/desired-state.js.map +1 -1
  381. package/dist/types/index.d.ts +4 -1
  382. package/dist/types/index.js +4 -1
  383. package/dist/types/index.js.map +1 -1
  384. package/dist/types/portfolio.d.ts +1000 -0
  385. package/dist/types/portfolio.js +168 -0
  386. package/dist/types/portfolio.js.map +1 -0
  387. package/dist/types/prediction-apy.d.ts +930 -0
  388. package/dist/types/prediction-apy.js +133 -0
  389. package/dist/types/prediction-apy.js.map +1 -0
  390. package/dist/types/prediction.d.ts +926 -0
  391. package/dist/types/prediction.js +141 -0
  392. package/dist/types/prediction.js.map +1 -0
  393. package/dist/venues/aave-v3/addresses.d.ts +6 -0
  394. package/dist/venues/aave-v3/addresses.js +19 -0
  395. package/dist/venues/aave-v3/addresses.js.map +1 -0
  396. package/dist/venues/aave-v3/client.d.ts +85 -0
  397. package/dist/venues/aave-v3/client.js +106 -0
  398. package/dist/venues/aave-v3/client.js.map +1 -0
  399. package/dist/venues/chainlink/client.d.ts +99 -0
  400. package/dist/venues/chainlink/client.js +130 -0
  401. package/dist/venues/chainlink/client.js.map +1 -0
  402. package/dist/venues/chainlink/feeds.d.ts +8 -0
  403. package/dist/venues/chainlink/feeds.js +9 -0
  404. package/dist/venues/chainlink/feeds.js.map +1 -0
  405. package/dist/venues/hyperliquid/account-value.d.ts +30 -0
  406. package/dist/venues/hyperliquid/account-value.js +30 -0
  407. package/dist/venues/hyperliquid/account-value.js.map +1 -0
  408. package/dist/venues/hyperliquid/client.d.ts +63 -0
  409. package/dist/venues/hyperliquid/client.js +135 -0
  410. package/dist/venues/hyperliquid/client.js.map +1 -0
  411. package/dist/venues/hyperliquid/grid.d.ts +36 -0
  412. package/dist/venues/hyperliquid/grid.js +61 -0
  413. package/dist/venues/hyperliquid/grid.js.map +1 -0
  414. package/dist/venues/hyperliquid/types.d.ts +81 -0
  415. package/dist/venues/hyperliquid/types.js +8 -0
  416. package/dist/venues/hyperliquid/types.js.map +1 -0
  417. package/dist/withdraw/run-withdraw-plan.js +2 -0
  418. package/dist/withdraw/run-withdraw-plan.js.map +1 -1
  419. package/docker-compose.yml +44 -0
  420. package/package.json +15 -3
  421. package/skills/jinn-operator/SKILL.md +85 -0
  422. package/dist/daemon/restorer.d.ts +0 -19
  423. package/dist/daemon/restorer.js +0 -82
  424. package/dist/daemon/restorer.js.map +0 -1
@@ -0,0 +1,440 @@
1
+ /**
2
+ * portfolio-v0-evaluator — deterministic verifier for portfolio.v0 manifests.
3
+ *
4
+ * Implements RestorerImpl for spec.kind === "portfolio.v0" && type === "evaluation".
5
+ * No LLM. Pure deterministic verification per spec §7.
6
+ *
7
+ * Architecture decision (T7):
8
+ * The engine (locked) builds portfolio.v0.manifest.v1. The verdict manifest
9
+ * shape is portfolio.v0.eval.manifest.v1 (§5.2). Since the engine cannot be
10
+ * modified, the eval impl assembles and signs the verdict manifest itself,
11
+ * writes it as verdict.json in workingDir, and declares it as an artifact
12
+ * with role "evaluation_verdict". The engine's outer manifest becomes the
13
+ * packaging container; verdict.json is the meaningful payload.
14
+ *
15
+ * Unified-payload model (Task 7):
16
+ * - spec.kind is "portfolio.v0" (same as restoration)
17
+ * - intent.type === "evaluation"
18
+ * - Restorer's manifest is inlined at intent.context.restorationResult (JSON string)
19
+ * - Original intent spec is at intent.spec (PortfolioV0Spec) — no IPFS fetch needed
20
+ * - intent.restorationRequestId carries the on-chain request ID
21
+ */
22
+ import { writeFileSync } from 'node:fs';
23
+ import { join } from 'node:path';
24
+ import { keccak256 } from 'viem';
25
+ import { privateKeyToAccount } from 'viem/accounts';
26
+ import { REQUIRES_LIVE_DAEMON_READINESS } from '../../types.js';
27
+ import { HyperliquidClient, HL_MAINNET_BASE_URL, HL_TESTNET_BASE_URL } from '../../../venues/hyperliquid/client.js';
28
+ import { bracketGridPoints } from '../../../venues/hyperliquid/grid.js';
29
+ import { canonicalJson } from '../../engine/canonical-json.js';
30
+ import { signCanonical } from '../../engine/signing.js';
31
+ import { RestorationManifestSchema, PortfolioV0IntentSchema, PortfolioV0EligibilitySchema, } from '../../../types/portfolio.js';
32
+ import { equityCurve, maxDrawdownPct as computeMaxDrawdownPct, equityReturnPct as computeEquityReturnPct, closedTradesCount as computeClosedTradesCount, tradedNotionalMultiple as computeTradedNotionalMultiple, } from './canonical-metrics.js';
33
+ import { scoreCalmarV1 } from './score.js';
34
+ import { checkHlReachable, checkPreSnapshotRederivable, checkFillsRederivable, checkPostSnapshotFundingAccrual, } from './checks/availability.js';
35
+ import { checkMinClosedTrades, checkMinTradedNotional } from './checks/eligibility.js';
36
+ import { checkWindowBounds } from './checks/integrity.js';
37
+ import { checkPreSnapshot, checkPostSnapshot, checkFills, checkGatingEquityReturn, checkGatingMaxDrawdown, checkGatingClosedTrades, checkGatingTradedNotional, extractAccountValue, } from './checks/consistency.js';
38
+ import { checkEquityReturnTarget, checkMaxDrawdownConstraint } from './checks/spec.js';
39
+ // ── Verdict derivation per §7.3 ───────────────────────────────────────────────
40
+ function deriveVerdict(checks) {
41
+ // if any "availability.*" FAIL → INDETERMINATE
42
+ const availFail = checks.some((c) => c.name.startsWith('availability.') && c.status === 'FAIL');
43
+ if (availFail)
44
+ return 'INDETERMINATE';
45
+ // if any "eligibility.*" FAIL → REJECTED
46
+ const eligFail = checks.some((c) => c.name.startsWith('eligibility.') && c.status === 'FAIL');
47
+ if (eligFail)
48
+ return 'REJECTED';
49
+ // if any "integrity.*"|"consistency.*"|"spec.*" FAIL → FAIL
50
+ const otherFail = checks.some((c) => (c.name.startsWith('integrity.') ||
51
+ c.name.startsWith('consistency.') ||
52
+ c.name.startsWith('spec.')) &&
53
+ c.status === 'FAIL');
54
+ if (otherFail)
55
+ return 'FAIL';
56
+ return 'PASS';
57
+ }
58
+ // ── Private helpers ───────────────────────────────────────────────────────────
59
+ /**
60
+ * Assemble the unsigned verdict manifest object (no signature field).
61
+ *
62
+ * NOTE: `generatedAt` is intentionally excluded from this object.
63
+ * It is non-deterministic (wall-clock time) and MUST NOT be included
64
+ * in the signed content — two evaluations of the same inputs at different
65
+ * times must produce the same hash. `generatedAt` is added as an unsigned
66
+ * sibling field in _buildOutput after signing.
67
+ */
68
+ function _assembleUnsignedManifest(params) {
69
+ const { intentCid, onchainCreationTx, onchainCreationBlock, restorationRequestId, intent, checks, verdict, score, targetManifest, rederivPrePayload, rederivFills, rederived, evaluatorSafeAddress, evaluatorAgentEoa, } = params;
70
+ const claimedGating = targetManifest?.gating ?? {
71
+ equityReturnPct: '0',
72
+ maxDrawdownPct: '0',
73
+ closedTradesCount: 0,
74
+ tradedNotionalMultiple: '0',
75
+ };
76
+ const intentProvenance = {
77
+ cid: intentCid,
78
+ onchainCreationTx: onchainCreationTx ?? '0x',
79
+ onchainCreationBlock: onchainCreationBlock,
80
+ requestId: restorationRequestId ?? '0x',
81
+ };
82
+ const rederivPreSnap = rederivPrePayload ?? {
83
+ capturedAt: targetManifest?.preSnapshot.capturedAt ?? 0,
84
+ payload: null,
85
+ };
86
+ const rederivPostSnap = {
87
+ capturedAt: targetManifest?.postSnapshot.capturedAt ?? 0,
88
+ payload: targetManifest?.postSnapshot.payload ?? null,
89
+ };
90
+ const fillsHash = (() => {
91
+ if (!rederivFills)
92
+ return '0x';
93
+ return keccak256(new TextEncoder().encode(canonicalJson(rederivFills)));
94
+ })();
95
+ return {
96
+ schemaVersion: 'portfolio.v0.eval.manifest.v1',
97
+ intent: intentProvenance,
98
+ evaluator: {
99
+ safeAddress: evaluatorSafeAddress,
100
+ agentEoa: evaluatorAgentEoa,
101
+ },
102
+ window: targetManifest?.window ?? intent.window ?? { startTs: 0, endTs: 0 },
103
+ verdict,
104
+ score,
105
+ scoreBasis: 'calmar.v1',
106
+ scoreVersion: 'v1',
107
+ rederived: {
108
+ preSnapshot: rederivPreSnap,
109
+ postSnapshot: rederivPostSnap,
110
+ fills: rederivFills ?? [],
111
+ gating: {
112
+ equityReturnPct: String(rederived?.equityReturn ?? 0),
113
+ maxDrawdownPct: String(rederived?.maxDrawdown ?? 0),
114
+ closedTradesCount: rederived?.closedTrades ?? 0,
115
+ tradedNotionalMultiple: String(rederived?.notional ?? 0),
116
+ },
117
+ },
118
+ claimed: {
119
+ preSnapshot: {
120
+ capturedAt: targetManifest?.preSnapshot.capturedAt ?? 0,
121
+ payload: targetManifest?.preSnapshot.payload ?? null,
122
+ },
123
+ postSnapshot: {
124
+ capturedAt: targetManifest?.postSnapshot.capturedAt ?? 0,
125
+ payload: targetManifest?.postSnapshot.payload ?? null,
126
+ },
127
+ fillsHash,
128
+ fillsCount: targetManifest?.fills.length ?? 0,
129
+ gating: claimedGating,
130
+ },
131
+ checks,
132
+ };
133
+ }
134
+ /**
135
+ * Sign the unsigned manifest or emit empty stub signature if no key or signing fails.
136
+ */
137
+ async function _signOrStub(unsigned, privateKey, evaluatorAgentEoa, log) {
138
+ const stub = { hash: '0x', sig: '0x' };
139
+ if (!privateKey) {
140
+ return stub;
141
+ }
142
+ try {
143
+ const account = privateKeyToAccount(privateKey);
144
+ const signerAddr = evaluatorAgentEoa !== '0x0000000000000000000000000000000000000000'
145
+ ? evaluatorAgentEoa
146
+ : account.address;
147
+ const result = await signCanonical(unsigned, privateKey, signerAddr);
148
+ return { hash: result.hash, sig: result.sig };
149
+ }
150
+ catch (err) {
151
+ log({ level: 'warn', msg: 'portfolio-v0-evaluator: signing failed, emitting unsigned manifest', data: { err } });
152
+ return stub;
153
+ }
154
+ }
155
+ /**
156
+ * Write verdict manifest JSON to workingDir/verdict.json.
157
+ */
158
+ function _writeVerdictArtifact(workingDir, verdictManifest) {
159
+ const verdictPath = join(workingDir, 'verdict.json');
160
+ writeFileSync(verdictPath, JSON.stringify(verdictManifest, null, 2), 'utf-8');
161
+ }
162
+ // ── PortfolioV0Evaluator ──────────────────────────────────────────────────────
163
+ export class PortfolioV0Evaluator {
164
+ name = 'portfolio-v0-evaluator';
165
+ version = '1.0.0';
166
+ config;
167
+ constructor(config = {}) {
168
+ this.config = config;
169
+ }
170
+ supports(ctx) {
171
+ return ctx.kind === 'portfolio.v0' && ctx.type === 'evaluation';
172
+ }
173
+ async isReady() {
174
+ if (this.config.stub)
175
+ return { ...REQUIRES_LIVE_DAEMON_READINESS };
176
+ return { ready: true };
177
+ }
178
+ async canAttempt(intent) {
179
+ if (intent.spec?.kind !== 'portfolio.v0') {
180
+ return { ok: false, reason: 'spec.kind is not portfolio.v0' };
181
+ }
182
+ if (intent.type !== 'evaluation') {
183
+ return { ok: false, reason: 'DesiredState.type is not evaluation' };
184
+ }
185
+ if (!intent.restorationRequestId) {
186
+ return { ok: false, reason: 'restorationRequestId is required' };
187
+ }
188
+ const restorationResult = intent.context?.['restorationResult'];
189
+ if (typeof restorationResult !== 'string') {
190
+ return { ok: false, reason: 'context.restorationResult (manifest JSON) is required' };
191
+ }
192
+ return { ok: true };
193
+ }
194
+ async run(ctx) {
195
+ if (this.config.stub) {
196
+ throw new Error('portfolio-v0-evaluator: stub registry cannot run evaluation (requires live daemon)');
197
+ }
198
+ const { intent, log } = ctx;
199
+ // ── Step 1: Parse restorer's manifest from inlined context ────────────────
200
+ // The manifest JSON is inlined by MechAdapter.tryCreateEvaluationJob at context.restorationResult.
201
+ // Falls back to an error — crash recovery path not yet implemented.
202
+ let targetManifest;
203
+ let targetIntent;
204
+ let hlPortfolioPeriodFn;
205
+ let hlUserFillsByTimeFn;
206
+ const checks = [];
207
+ const inlined = intent.context?.['restorationResult'];
208
+ if (typeof inlined !== 'string') {
209
+ throw new Error('portfolio-v0-evaluator: restorationResult missing from context; crash recovery path not yet implemented');
210
+ }
211
+ try {
212
+ targetManifest = RestorationManifestSchema.parse(JSON.parse(inlined));
213
+ // The original portfolio.v0 intent is directly at intent.spec — no IPFS fetch needed.
214
+ targetIntent = PortfolioV0IntentSchema.parse(intent);
215
+ // Determine HL client from venue (or use injected test deps)
216
+ if (this.config._testDeps?.hlPortfolioPeriod && this.config._testDeps?.hlUserFillsByTime) {
217
+ hlPortfolioPeriodFn = this.config._testDeps.hlPortfolioPeriod;
218
+ hlUserFillsByTimeFn = this.config._testDeps.hlUserFillsByTime;
219
+ }
220
+ else {
221
+ const venue = targetIntent.spec.account.venue;
222
+ const baseUrl = venue === 'hyperliquid-mainnet' ? HL_MAINNET_BASE_URL : HL_TESTNET_BASE_URL;
223
+ const hlClient = new HyperliquidClient(baseUrl);
224
+ hlPortfolioPeriodFn = (user) => hlClient.portfolioPeriod(user, 'allTime');
225
+ hlUserFillsByTimeFn = (user, start, end) => hlClient.userFillsByTime(user, start, end);
226
+ }
227
+ }
228
+ catch (err) {
229
+ const msg = err instanceof Error ? err.message : String(err);
230
+ log({ level: 'error', msg: 'portfolio-v0-evaluator: failed to parse manifest/intent', data: { err: msg } });
231
+ // We cannot proceed — return a minimal INDETERMINATE output.
232
+ checks.push({
233
+ name: 'availability.manifest_parseable',
234
+ status: 'FAIL',
235
+ detail: `Failed to parse manifest or intent: ${msg}`,
236
+ });
237
+ return this._buildOutput(ctx, checks, null, null, null, null, null, null, null, null);
238
+ }
239
+ // Extract provenance fields from the parsed manifest + intent
240
+ const intentCid = targetManifest.intent.cid;
241
+ const onchainCreationTx = targetManifest.intent.onchainCreationTx;
242
+ const onchainCreationBlock = targetManifest.intent.onchainCreationBlock;
243
+ const restorationRequestId = intent.restorationRequestId;
244
+ log({ level: 'info', msg: 'portfolio-v0-evaluator: starting evaluation', data: { intentCid, restorationRequestId } });
245
+ const masterAddress = targetIntent.spec.account.masterAddress;
246
+ const { startTs, endTs } = targetManifest.window;
247
+ // ── Step 2: Re-fetch HL data ──────────────────────────────────────────────
248
+ // 2a: Check HL reachability + fetch portfolio grid + fills
249
+ let grid = [];
250
+ let rederivFills = [];
251
+ let startTimeClamped = false;
252
+ let hlReachable = false;
253
+ try {
254
+ const [portfolioResp, fillsResult] = await Promise.all([
255
+ hlPortfolioPeriodFn(masterAddress),
256
+ hlUserFillsByTimeFn(masterAddress, startTs, endTs),
257
+ ]);
258
+ grid = portfolioResp?.accountValueHistory ?? [];
259
+ rederivFills = fillsResult.fills;
260
+ startTimeClamped = fillsResult.startTimeClamped;
261
+ hlReachable = true;
262
+ }
263
+ catch (err) {
264
+ const msg = err instanceof Error ? err.message : String(err);
265
+ log({ level: 'error', msg: 'portfolio-v0-evaluator: HL API call failed', data: { err: msg } });
266
+ }
267
+ // ── Availability checks ───────────────────────────────────────────────────
268
+ checks.push(checkHlReachable(hlReachable));
269
+ if (!hlReachable) {
270
+ return this._buildOutput(ctx, checks, null, null, null, null, intentCid, onchainCreationTx, onchainCreationBlock, restorationRequestId);
271
+ }
272
+ const preCapturedAt = targetManifest.preSnapshot.capturedAt;
273
+ const postCapturedAt = targetManifest.postSnapshot.capturedAt;
274
+ checks.push(checkPreSnapshotRederivable(grid, preCapturedAt));
275
+ checks.push(checkFillsRederivable(startTimeClamped));
276
+ const postAccrualCheck = checkPostSnapshotFundingAccrual(postCapturedAt, endTs);
277
+ checks.push(postAccrualCheck);
278
+ // If post-snapshot funding accrual SKIP → downstream consistency is skipped
279
+ const skipPostConsistency = postAccrualCheck.status === 'SKIP';
280
+ // ── Derive pre-snapshot from grid ─────────────────────────────────────────
281
+ const bracket = bracketGridPoints(grid, preCapturedAt);
282
+ let rederivPrePayload = null;
283
+ if (bracket !== null) {
284
+ // Interpolate accountValue at preCapturedAt between the two bracket points
285
+ const [beforeTs, beforeVal] = bracket.before;
286
+ const [afterTs, afterVal] = bracket.after;
287
+ const frac = afterTs > beforeTs ? (preCapturedAt - beforeTs) / (afterTs - beforeTs) : 0;
288
+ const interpolatedValue = parseFloat(beforeVal) + frac * (parseFloat(afterVal) - parseFloat(beforeVal));
289
+ rederivPrePayload = {
290
+ capturedAt: preCapturedAt,
291
+ payload: {
292
+ marginSummary: { accountValue: String(interpolatedValue) },
293
+ },
294
+ };
295
+ }
296
+ // ── Derive post-snapshot ───────────────────────────────────────────────────
297
+ // For the post-snapshot, we use the claimed value (from the manifest) since
298
+ // HL only returns current state. The §7.7 note says to use the portfolio grid
299
+ // for the pre-snapshot only. For post-snapshot we compare against the live
300
+ // clearinghouse state at the time of evaluation — but since we're post-window,
301
+ // the best we can do is compare fill-derived metrics.
302
+ //
303
+ // To keep things deterministic: rederived post snapshot = claimed post snapshot
304
+ // (we verify internal consistency of the manifest, not post re-fetch).
305
+ const rederivPostPayload = skipPostConsistency
306
+ ? null
307
+ : {
308
+ capturedAt: postCapturedAt,
309
+ payload: targetManifest.postSnapshot.payload,
310
+ };
311
+ // ── Compute canonical metrics ─────────────────────────────────────────────
312
+ // Extract accountValues for metric computation
313
+ const claimedPrePayload = targetManifest.preSnapshot.payload;
314
+ const claimedPostPayload = targetManifest.postSnapshot.payload;
315
+ // Use the shared extractor so unified-shape and legacy payloads both work
316
+ // (see `extractAccountValue` in checks/consistency.ts).
317
+ const preValue = (rederivPrePayload ? extractAccountValue(rederivPrePayload.payload) : null)
318
+ ?? extractAccountValue(claimedPrePayload)
319
+ ?? 0;
320
+ const postValue = extractAccountValue(claimedPostPayload) ?? 0;
321
+ const fillTimes = rederivFills.map((f) => f.time);
322
+ const curve = equityCurve(preCapturedAt, preValue, postCapturedAt, postValue, fillTimes);
323
+ const rederivEquityReturn = computeEquityReturnPct(preValue, postValue);
324
+ const rederivMaxDrawdown = computeMaxDrawdownPct(curve);
325
+ const rederivClosedTrades = computeClosedTradesCount(rederivFills);
326
+ const rederivNotional = computeTradedNotionalMultiple(rederivFills, preValue);
327
+ // ── Integrity checks ──────────────────────────────────────────────────────
328
+ checks.push(checkWindowBounds(preCapturedAt, postCapturedAt, startTs, endTs));
329
+ // ── Eligibility checks ────────────────────────────────────────────────────
330
+ const eligibility = PortfolioV0EligibilitySchema.parse(targetIntent.eligibility ?? {});
331
+ checks.push(checkMinClosedTrades(rederivClosedTrades, eligibility.minClosedTrades));
332
+ checks.push(checkMinTradedNotional(rederivNotional, eligibility.minTradedNotionalMultiple));
333
+ // ── Consistency checks ────────────────────────────────────────────────────
334
+ const claimedGating = targetManifest.gating;
335
+ checks.push(checkPreSnapshot(claimedPrePayload, rederivPrePayload));
336
+ checks.push(checkPostSnapshot(claimedPostPayload, rederivPostPayload));
337
+ checks.push(checkFills(targetManifest.fills, rederivFills));
338
+ checks.push(checkGatingEquityReturn(claimedGating.equityReturnPct, rederivEquityReturn));
339
+ checks.push(checkGatingMaxDrawdown(claimedGating.maxDrawdownPct, rederivMaxDrawdown));
340
+ checks.push(checkGatingClosedTrades(claimedGating.closedTradesCount, rederivClosedTrades));
341
+ checks.push(checkGatingTradedNotional(claimedGating.tradedNotionalMultiple, rederivNotional));
342
+ // ── Spec checks ───────────────────────────────────────────────────────────
343
+ checks.push(checkEquityReturnTarget(rederivEquityReturn, targetIntent.spec.target.minReturnPct));
344
+ checks.push(checkMaxDrawdownConstraint(rederivMaxDrawdown, targetIntent.spec.constraint.maxDrawdownPct));
345
+ // ── Derive verdict ────────────────────────────────────────────────────────
346
+ const rederived = {
347
+ equityReturn: rederivEquityReturn,
348
+ maxDrawdown: rederivMaxDrawdown,
349
+ closedTrades: rederivClosedTrades,
350
+ notional: rederivNotional,
351
+ };
352
+ return this._buildOutput(ctx, checks, targetManifest, rederivPrePayload, rederivFills, rederived, intentCid, onchainCreationTx, onchainCreationBlock, restorationRequestId);
353
+ }
354
+ async _buildOutput(ctx, checks, targetManifest, rederivPrePayload, rederivFills, rederived, intentCid, onchainCreationTx, onchainCreationBlock, restorationRequestId) {
355
+ const { intent, workingDir, log } = ctx;
356
+ // Spec §7.5 funding-accrual edge case: if hl_post_snapshot_rederivable is SKIP,
357
+ // the verdict MUST be INDETERMINATE regardless of other check outcomes.
358
+ // (deriveVerdict() only handles FAIL→INDETERMINATE per §7.3; SKIP needs explicit handling.)
359
+ const postRederivableSkipped = checks.some((c) => c.name === 'availability.hl_post_snapshot_rederivable' && c.status === 'SKIP');
360
+ const verdict = postRederivableSkipped ? 'INDETERMINATE' : deriveVerdict(checks);
361
+ const equityReturn = rederived?.equityReturn ?? 0;
362
+ const maxDrawdown = rederived?.maxDrawdown ?? 0;
363
+ const score = scoreCalmarV1(equityReturn, maxDrawdown, verdict);
364
+ log({ level: 'info', msg: 'portfolio-v0-evaluator: verdict derived', data: { verdict, score, checkCount: checks.length } });
365
+ // Evaluator identity — sourced from constructor config (injected by daemon)
366
+ const evaluatorSafeAddress = (this.config.safeAddress ?? '0x0000000000000000000000000000000000000000');
367
+ const evaluatorAgentEoa = (this.config.agentEoa ?? '0x0000000000000000000000000000000000000000');
368
+ // ── Assemble unsigned verdict manifest ────────────────────────────────────
369
+ // generatedAt is NOT included in the signed content: it is non-deterministic
370
+ // (wall-clock) and must not affect the hash. It is added below after signing.
371
+ const unsigned = _assembleUnsignedManifest({
372
+ intentCid: intentCid ?? '',
373
+ onchainCreationTx: onchainCreationTx ?? '0x',
374
+ onchainCreationBlock: onchainCreationBlock ?? 0,
375
+ restorationRequestId: restorationRequestId ?? '0x',
376
+ intent,
377
+ checks,
378
+ verdict,
379
+ score,
380
+ targetManifest,
381
+ rederivPrePayload,
382
+ rederivFills,
383
+ rederived,
384
+ evaluatorSafeAddress,
385
+ evaluatorAgentEoa,
386
+ });
387
+ // ── Sign or emit stub ─────────────────────────────────────────────────────
388
+ const privateKey = this.config.agentEoaPrivateKey;
389
+ const { hash, sig } = await _signOrStub(unsigned, privateKey, evaluatorAgentEoa, log);
390
+ // generatedAt: unsigned metadata — sits outside the signed envelope.
391
+ // Added after signing so it does not influence the hash.
392
+ const generatedAt = Date.now();
393
+ const verdictManifest = {
394
+ ...unsigned,
395
+ generatedAt,
396
+ signature: {
397
+ algo: 'secp256k1',
398
+ signer: evaluatorAgentEoa,
399
+ hash,
400
+ sig,
401
+ },
402
+ };
403
+ // ── Write verdict.json ────────────────────────────────────────────────────
404
+ _writeVerdictArtifact(workingDir, verdictManifest);
405
+ log({ level: 'info', msg: 'portfolio-v0-evaluator: verdict.json written', data: { path: join(workingDir, 'verdict.json') } });
406
+ // ── Build RestorationOutput ───────────────────────────────────────────────
407
+ const output = {
408
+ venueRef: { name: 'hyperliquid' },
409
+ gating: {
410
+ verdict,
411
+ score,
412
+ scoreBasis: 'calmar.v1',
413
+ scoreVersion: 'v1',
414
+ checkCount: checks.length,
415
+ passCount: checks.filter((c) => c.status === 'PASS').length,
416
+ failCount: checks.filter((c) => c.status === 'FAIL').length,
417
+ skipCount: checks.filter((c) => c.status === 'SKIP').length,
418
+ },
419
+ informational: {
420
+ intentCid: intentCid ?? '',
421
+ equityReturnPct: String(rederived?.equityReturn ?? 0),
422
+ maxDrawdownPct: String(rederived?.maxDrawdown ?? 0),
423
+ closedTradesCount: rederived?.closedTrades ?? 0,
424
+ tradedNotionalMultiple: String(rederived?.notional ?? 0),
425
+ },
426
+ artifacts: [
427
+ {
428
+ path: 'verdict.json',
429
+ role: 'evaluation_verdict',
430
+ metadata: { verdict, score, schemaVersion: 'portfolio.v0.eval.manifest.v1' },
431
+ tags: ['verdict', 'evaluation'],
432
+ access: { kind: 'open' },
433
+ },
434
+ ],
435
+ };
436
+ return output;
437
+ }
438
+ }
439
+ export default PortfolioV0Evaluator;
440
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/restorer/impls/portfolio-v0-evaluator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Score function for portfolio.v0 evaluation — §7.8.
3
+ *
4
+ * scoreBasis: "calmar.v1"
5
+ * score_calmar_v1 =
6
+ * if verdict != PASS: "0"
7
+ * else:
8
+ * ratio = clamp(equityReturnPct / max(maxDrawdownPct, 1.0%), 0, 10.0)
9
+ * encoded = ratio * 1e17 // range [0, 1e18]
10
+ * encoded as decimal string
11
+ */
12
+ import type { Verdict } from './types.js';
13
+ /**
14
+ * Compute the calmar.v1 score.
15
+ *
16
+ * @param equityReturnPct Equity return percentage (e.g. 5.0 for +5%)
17
+ * @param maxDrawdownPctVal Max drawdown percentage (e.g. 2.0 for 2%)
18
+ * @param verdict The evaluation verdict
19
+ * @returns Fixed-point string in 1e18 scale; "0" for any non-PASS verdict
20
+ */
21
+ export declare function scoreCalmarV1(equityReturnPct: number, maxDrawdownPctVal: number, verdict: Verdict): string;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Score function for portfolio.v0 evaluation — §7.8.
3
+ *
4
+ * scoreBasis: "calmar.v1"
5
+ * score_calmar_v1 =
6
+ * if verdict != PASS: "0"
7
+ * else:
8
+ * ratio = clamp(equityReturnPct / max(maxDrawdownPct, 1.0%), 0, 10.0)
9
+ * encoded = ratio * 1e17 // range [0, 1e18]
10
+ * encoded as decimal string
11
+ */
12
+ /**
13
+ * Compute the calmar.v1 score.
14
+ *
15
+ * @param equityReturnPct Equity return percentage (e.g. 5.0 for +5%)
16
+ * @param maxDrawdownPctVal Max drawdown percentage (e.g. 2.0 for 2%)
17
+ * @param verdict The evaluation verdict
18
+ * @returns Fixed-point string in 1e18 scale; "0" for any non-PASS verdict
19
+ */
20
+ export function scoreCalmarV1(equityReturnPct, maxDrawdownPctVal, verdict) {
21
+ if (verdict !== 'PASS') {
22
+ return '0';
23
+ }
24
+ const denominator = Math.max(maxDrawdownPctVal, 1.0);
25
+ const ratio = Math.min(Math.max(equityReturnPct / denominator, 0), 10.0);
26
+ // ratio * 1e17 → range [0, 1e18]
27
+ // Use BigInt arithmetic to avoid floating-point precision loss in the
28
+ // fixed-point representation.
29
+ const ratioBig = BigInt(Math.round(ratio * 1e17));
30
+ return ratioBig.toString();
31
+ }
32
+ //# sourceMappingURL=score.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score.js","sourceRoot":"","sources":["../../../../src/restorer/impls/portfolio-v0-evaluator/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,eAAuB,EACvB,iBAAyB,EACzB,OAAgB;IAEhB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAEzE,iCAAiC;IACjC,sEAAsE;IACtE,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAElD,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared types for the portfolio-v0-evaluator.
3
+ *
4
+ * Single source of truth for Check, Verdict, and related types.
5
+ * Import from here instead of declaring locally in each check module.
6
+ */
7
+ import type { HlFill, HlGridPoint } from '../../../venues/hyperliquid/types.js';
8
+ export type CheckStatus = 'PASS' | 'FAIL' | 'SKIP';
9
+ export interface Check {
10
+ name: string;
11
+ status: CheckStatus;
12
+ detail?: string | Record<string, unknown>;
13
+ }
14
+ export type Verdict = 'PASS' | 'FAIL' | 'REJECTED' | 'INDETERMINATE';
15
+ export interface PortfolioV0EvaluatorConfig {
16
+ /** Set by {@link buildRestorerImpls} for CLI registries. */
17
+ stub?: boolean;
18
+ /** Evaluator Safe multisig address (injected by daemon). */
19
+ safeAddress?: string;
20
+ /** Evaluator agent EOA address (injected by daemon). */
21
+ agentEoa?: string;
22
+ /** Evaluator agent EOA private key (injected by daemon). */
23
+ agentEoaPrivateKey?: string;
24
+ /** Test-only: injectable deps to avoid real network calls. */
25
+ _testDeps?: {
26
+ hlPortfolioPeriod?: (user: string) => Promise<{
27
+ accountValueHistory: HlGridPoint[];
28
+ } | null>;
29
+ hlUserFillsByTime?: (user: string, startTime: number, endTime?: number) => Promise<{
30
+ fills: HlFill[];
31
+ startTimeClamped: boolean;
32
+ }>;
33
+ };
34
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared types for the portfolio-v0-evaluator.
3
+ *
4
+ * Single source of truth for Check, Verdict, and related types.
5
+ * Import from here instead of declaring locally in each check module.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/restorer/impls/portfolio-v0-evaluator/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,40 @@
1
+ import type { RestorerImpl, RestorationContext, RestorationOutput, ReadyStatus, EnableResult, IntentEnableMetadata } from '../../types.js';
2
+ export interface PredictionApyV0BaselineConfig {
3
+ rpcUrl?: string;
4
+ archiveRpcUrl?: string;
5
+ stub?: boolean;
6
+ _testDeps?: {
7
+ twApyBpsOverWindow?: (args: {
8
+ windowEndTs: number;
9
+ twaWindowSeconds: number;
10
+ sampleCount: number;
11
+ pool: `0x${string}`;
12
+ reserve: `0x${string}`;
13
+ }) => Promise<{
14
+ twApyBps: number;
15
+ sampleCount: number;
16
+ }>;
17
+ };
18
+ }
19
+ export declare class PredictionApyV0BaselineImpl implements RestorerImpl {
20
+ private readonly config;
21
+ readonly name = "prediction-apy-v0-baseline";
22
+ readonly version = "1.0.0";
23
+ constructor(config?: PredictionApyV0BaselineConfig);
24
+ supports(ctx: {
25
+ kind: string;
26
+ type?: 'restoration' | 'evaluation';
27
+ }): boolean;
28
+ isReady(): Promise<ReadyStatus>;
29
+ enableMetadata(): IntentEnableMetadata;
30
+ onEnable(_args: Record<string, string | undefined>): Promise<EnableResult>;
31
+ canAttempt(intent: import('../../../types/desired-state.js').DesiredState): Promise<{
32
+ ok: false;
33
+ reason: string;
34
+ } | {
35
+ ok: true;
36
+ reason?: undefined;
37
+ }>;
38
+ run(ctx: RestorationContext): Promise<RestorationOutput>;
39
+ }
40
+ export default PredictionApyV0BaselineImpl;