@jinn-network/client 0.1.0 → 0.1.1-canary.4a6ed8b2

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 (269) hide show
  1. package/README.md +98 -11
  2. package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +15 -0
  3. package/dist/adapters/claim-registry/abi.d.ts +127 -0
  4. package/dist/adapters/claim-registry/abi.js +93 -0
  5. package/dist/adapters/claim-registry/abi.js.map +1 -0
  6. package/dist/adapters/claim-registry/client.d.ts +89 -0
  7. package/dist/adapters/claim-registry/client.js +205 -0
  8. package/dist/adapters/claim-registry/client.js.map +1 -0
  9. package/dist/adapters/mech/adapter.d.ts +2 -0
  10. package/dist/adapters/mech/adapter.js +110 -41
  11. package/dist/adapters/mech/adapter.js.map +1 -1
  12. package/dist/adapters/mech/contracts.d.ts +2 -0
  13. package/dist/adapters/mech/contracts.js +32 -7
  14. package/dist/adapters/mech/contracts.js.map +1 -1
  15. package/dist/adapters/mech/ipfs.d.ts +8 -0
  16. package/dist/adapters/mech/ipfs.js +12 -0
  17. package/dist/adapters/mech/ipfs.js.map +1 -1
  18. package/dist/adapters/mech/types.d.ts +20 -46
  19. package/dist/adapters/mech/types.js +16 -35
  20. package/dist/adapters/mech/types.js.map +1 -1
  21. package/dist/api/gather-status.js +11 -0
  22. package/dist/api/gather-status.js.map +1 -1
  23. package/dist/api/portfolio-v0-build.d.ts +81 -0
  24. package/dist/api/portfolio-v0-build.js +141 -0
  25. package/dist/api/portfolio-v0-build.js.map +1 -0
  26. package/dist/api/portfolio-v0-doctor.d.ts +37 -0
  27. package/dist/api/portfolio-v0-doctor.js +123 -0
  28. package/dist/api/portfolio-v0-doctor.js.map +1 -0
  29. package/dist/api/server.js +12 -0
  30. package/dist/api/server.js.map +1 -1
  31. package/dist/api/status-build.d.ts +6 -0
  32. package/dist/api/status-build.js +1 -0
  33. package/dist/api/status-build.js.map +1 -1
  34. package/dist/api/status-rollup-build.d.ts +4 -0
  35. package/dist/api/status-rollup-build.js +4 -0
  36. package/dist/api/status-rollup-build.js.map +1 -1
  37. package/dist/bin/jinn-mcp.d.ts +14 -0
  38. package/dist/bin/jinn-mcp.js +19 -0
  39. package/dist/bin/jinn-mcp.js.map +1 -0
  40. package/dist/build-meta.json +1 -1
  41. package/dist/cli/commands/auth.d.ts +3 -0
  42. package/dist/cli/commands/auth.js +236 -0
  43. package/dist/cli/commands/auth.js.map +1 -0
  44. package/dist/cli/commands/bootstrap.js +1 -0
  45. package/dist/cli/commands/bootstrap.js.map +1 -1
  46. package/dist/cli/commands/doctor.js +148 -15
  47. package/dist/cli/commands/doctor.js.map +1 -1
  48. package/dist/cli/commands/fund-requirements.js +69 -1
  49. package/dist/cli/commands/fund-requirements.js.map +1 -1
  50. package/dist/cli/commands/history.js +1 -0
  51. package/dist/cli/commands/history.js.map +1 -1
  52. package/dist/cli/commands/init.js +31 -7
  53. package/dist/cli/commands/init.js.map +1 -1
  54. package/dist/cli/commands/keys-backup.js +142 -10
  55. package/dist/cli/commands/keys-backup.js.map +1 -1
  56. package/dist/cli/commands/logs.js +28 -13
  57. package/dist/cli/commands/logs.js.map +1 -1
  58. package/dist/cli/commands/plugin-install.d.ts +3 -0
  59. package/dist/cli/commands/plugin-install.js +799 -0
  60. package/dist/cli/commands/plugin-install.js.map +1 -0
  61. package/dist/cli/commands/quickstart.d.ts +3 -0
  62. package/dist/cli/commands/quickstart.js +236 -0
  63. package/dist/cli/commands/quickstart.js.map +1 -0
  64. package/dist/cli/commands/run.js +6 -0
  65. package/dist/cli/commands/run.js.map +1 -1
  66. package/dist/cli/commands/stop.js +1 -0
  67. package/dist/cli/commands/stop.js.map +1 -1
  68. package/dist/cli/commands/submit-intent.js +79 -5
  69. package/dist/cli/commands/submit-intent.js.map +1 -1
  70. package/dist/cli/commands/update.d.ts +3 -0
  71. package/dist/cli/commands/update.js +154 -0
  72. package/dist/cli/commands/update.js.map +1 -0
  73. package/dist/cli/commands/version.js +15 -1
  74. package/dist/cli/commands/version.js.map +1 -1
  75. package/dist/cli/deployment-digest.js +20 -4
  76. package/dist/cli/deployment-digest.js.map +1 -1
  77. package/dist/cli/index.js +8 -0
  78. package/dist/cli/index.js.map +1 -1
  79. package/dist/cli/password.d.ts +15 -0
  80. package/dist/cli/password.js +29 -1
  81. package/dist/cli/password.js.map +1 -1
  82. package/dist/config.d.ts +110 -7
  83. package/dist/config.js +38 -5
  84. package/dist/config.js.map +1 -1
  85. package/dist/daemon/balance-topup-loop.d.ts +40 -0
  86. package/dist/daemon/balance-topup-loop.js +96 -0
  87. package/dist/daemon/balance-topup-loop.js.map +1 -0
  88. package/dist/daemon/daemon.d.ts +37 -0
  89. package/dist/daemon/daemon.js +98 -1
  90. package/dist/daemon/daemon.js.map +1 -1
  91. package/dist/dashboard/index.html +500 -0
  92. package/dist/earning/bootstrap.d.ts +3 -1
  93. package/dist/earning/bootstrap.js +138 -17
  94. package/dist/earning/bootstrap.js.map +1 -1
  95. package/dist/earning/contracts.d.ts +24 -0
  96. package/dist/earning/contracts.js +20 -1
  97. package/dist/earning/contracts.js.map +1 -1
  98. package/dist/earning/faucet.d.ts +15 -0
  99. package/dist/earning/faucet.js +64 -0
  100. package/dist/earning/faucet.js.map +1 -0
  101. package/dist/earning/store.d.ts +5 -0
  102. package/dist/earning/store.js +7 -3
  103. package/dist/earning/store.js.map +1 -1
  104. package/dist/errors/unauthorized-account.d.ts +10 -0
  105. package/dist/errors/unauthorized-account.js +14 -0
  106. package/dist/errors/unauthorized-account.js.map +1 -0
  107. package/dist/main.js +128 -1
  108. package/dist/main.js.map +1 -1
  109. package/dist/mcp/operator-server.d.ts +34 -0
  110. package/dist/mcp/operator-server.js +219 -0
  111. package/dist/mcp/operator-server.js.map +1 -0
  112. package/dist/operator-errors.js +11 -0
  113. package/dist/operator-errors.js.map +1 -1
  114. package/dist/preflight/claude-auth.d.ts +68 -0
  115. package/dist/preflight/claude-auth.js +171 -0
  116. package/dist/preflight/claude-auth.js.map +1 -0
  117. package/dist/restorer/engine/canonical-json.d.ts +18 -0
  118. package/dist/restorer/engine/canonical-json.js +59 -0
  119. package/dist/restorer/engine/canonical-json.js.map +1 -0
  120. package/dist/restorer/engine/claim.d.ts +69 -0
  121. package/dist/restorer/engine/claim.js +104 -0
  122. package/dist/restorer/engine/claim.js.map +1 -0
  123. package/dist/restorer/engine/delivery.d.ts +52 -0
  124. package/dist/restorer/engine/delivery.js +63 -0
  125. package/dist/restorer/engine/delivery.js.map +1 -0
  126. package/dist/restorer/engine/engine.d.ts +203 -0
  127. package/dist/restorer/engine/engine.js +658 -0
  128. package/dist/restorer/engine/engine.js.map +1 -0
  129. package/dist/restorer/engine/manifest-assembly.d.ts +67 -0
  130. package/dist/restorer/engine/manifest-assembly.js +79 -0
  131. package/dist/restorer/engine/manifest-assembly.js.map +1 -0
  132. package/dist/restorer/engine/packaging.d.ts +87 -0
  133. package/dist/restorer/engine/packaging.js +350 -0
  134. package/dist/restorer/engine/packaging.js.map +1 -0
  135. package/dist/restorer/engine/persistence.d.ts +170 -0
  136. package/dist/restorer/engine/persistence.js +381 -0
  137. package/dist/restorer/engine/persistence.js.map +1 -0
  138. package/dist/restorer/engine/recovery.d.ts +22 -0
  139. package/dist/restorer/engine/recovery.js +24 -0
  140. package/dist/restorer/engine/recovery.js.map +1 -0
  141. package/dist/restorer/engine/registry.d.ts +62 -0
  142. package/dist/restorer/engine/registry.js +73 -0
  143. package/dist/restorer/engine/registry.js.map +1 -0
  144. package/dist/restorer/engine/signing.d.ts +30 -0
  145. package/dist/restorer/engine/signing.js +39 -0
  146. package/dist/restorer/engine/signing.js.map +1 -0
  147. package/dist/restorer/engine/state.d.ts +42 -0
  148. package/dist/restorer/engine/state.js +87 -0
  149. package/dist/restorer/engine/state.js.map +1 -0
  150. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.d.ts +64 -0
  151. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js +96 -0
  152. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js.map +1 -0
  153. package/dist/restorer/impls/claude-mcp-hyperliquid/index.d.ts +88 -0
  154. package/dist/restorer/impls/claude-mcp-hyperliquid/index.js +560 -0
  155. package/dist/restorer/impls/claude-mcp-hyperliquid/index.js.map +1 -0
  156. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +137 -0
  157. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js +865 -0
  158. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -0
  159. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.d.ts +74 -0
  160. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js +74 -0
  161. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js.map +1 -0
  162. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.d.ts +97 -0
  163. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js +226 -0
  164. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +1 -0
  165. package/dist/restorer/impls/legacy-claude/index.d.ts +42 -0
  166. package/dist/restorer/impls/legacy-claude/index.js +60 -0
  167. package/dist/restorer/impls/legacy-claude/index.js.map +1 -0
  168. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.d.ts +68 -0
  169. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js +117 -0
  170. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js.map +1 -0
  171. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.d.ts +49 -0
  172. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js +91 -0
  173. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js.map +1 -0
  174. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.d.ts +78 -0
  175. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js +274 -0
  176. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js.map +1 -0
  177. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.d.ts +23 -0
  178. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js +49 -0
  179. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js.map +1 -0
  180. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.d.ts +25 -0
  181. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js +44 -0
  182. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js.map +1 -0
  183. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.d.ts +17 -0
  184. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js +43 -0
  185. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js.map +1 -0
  186. package/dist/restorer/impls/portfolio-v0-evaluator/index.d.ts +43 -0
  187. package/dist/restorer/impls/portfolio-v0-evaluator/index.js +431 -0
  188. package/dist/restorer/impls/portfolio-v0-evaluator/index.js.map +1 -0
  189. package/dist/restorer/impls/portfolio-v0-evaluator/score.d.ts +21 -0
  190. package/dist/restorer/impls/portfolio-v0-evaluator/score.js +32 -0
  191. package/dist/restorer/impls/portfolio-v0-evaluator/score.js.map +1 -0
  192. package/dist/restorer/impls/portfolio-v0-evaluator/types.d.ts +32 -0
  193. package/dist/restorer/impls/portfolio-v0-evaluator/types.js +8 -0
  194. package/dist/restorer/impls/portfolio-v0-evaluator/types.js.map +1 -0
  195. package/dist/restorer/impls/prediction-v0-baseline/index.d.ts +26 -0
  196. package/dist/restorer/impls/prediction-v0-baseline/index.js +82 -0
  197. package/dist/restorer/impls/prediction-v0-baseline/index.js.map +1 -0
  198. package/dist/restorer/impls/prediction-v0-baseline/strategy.d.ts +8 -0
  199. package/dist/restorer/impls/prediction-v0-baseline/strategy.js +41 -0
  200. package/dist/restorer/impls/prediction-v0-baseline/strategy.js.map +1 -0
  201. package/dist/restorer/impls/prediction-v0-baseline/types.d.ts +7 -0
  202. package/dist/restorer/impls/prediction-v0-baseline/types.js +2 -0
  203. package/dist/restorer/impls/prediction-v0-baseline/types.js.map +1 -0
  204. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.d.ts +20 -0
  205. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js +66 -0
  206. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js.map +1 -0
  207. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.d.ts +9 -0
  208. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js +23 -0
  209. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js.map +1 -0
  210. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.d.ts +3 -0
  211. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js +13 -0
  212. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js.map +1 -0
  213. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.d.ts +7 -0
  214. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js +74 -0
  215. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -0
  216. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.d.ts +5 -0
  217. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js +20 -0
  218. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js.map +1 -0
  219. package/dist/restorer/impls/prediction-v0-evaluator/index.d.ts +33 -0
  220. package/dist/restorer/impls/prediction-v0-evaluator/index.js +179 -0
  221. package/dist/restorer/impls/prediction-v0-evaluator/index.js.map +1 -0
  222. package/dist/restorer/impls/prediction-v0-evaluator/score.d.ts +8 -0
  223. package/dist/restorer/impls/prediction-v0-evaluator/score.js +15 -0
  224. package/dist/restorer/impls/prediction-v0-evaluator/score.js.map +1 -0
  225. package/dist/restorer/impls/prediction-v0-evaluator/types.d.ts +7 -0
  226. package/dist/restorer/impls/prediction-v0-evaluator/types.js +2 -0
  227. package/dist/restorer/impls/prediction-v0-evaluator/types.js.map +1 -0
  228. package/dist/restorer/types.d.ts +62 -0
  229. package/dist/restorer/types.js +7 -0
  230. package/dist/restorer/types.js.map +1 -0
  231. package/dist/runner/claude.js +15 -0
  232. package/dist/runner/claude.js.map +1 -1
  233. package/dist/store/store.d.ts +3 -1
  234. package/dist/store/store.js +8 -0
  235. package/dist/store/store.js.map +1 -1
  236. package/dist/tx-retry.js +11 -1
  237. package/dist/tx-retry.js.map +1 -1
  238. package/dist/types/desired-state.d.ts +53 -0
  239. package/dist/types/desired-state.js +20 -0
  240. package/dist/types/desired-state.js.map +1 -1
  241. package/dist/types/index.d.ts +3 -1
  242. package/dist/types/index.js +3 -1
  243. package/dist/types/index.js.map +1 -1
  244. package/dist/types/portfolio.d.ts +1000 -0
  245. package/dist/types/portfolio.js +168 -0
  246. package/dist/types/portfolio.js.map +1 -0
  247. package/dist/types/prediction.d.ts +751 -0
  248. package/dist/types/prediction.js +128 -0
  249. package/dist/types/prediction.js.map +1 -0
  250. package/dist/venues/chainlink/client.d.ts +99 -0
  251. package/dist/venues/chainlink/client.js +130 -0
  252. package/dist/venues/chainlink/client.js.map +1 -0
  253. package/dist/venues/chainlink/feeds.d.ts +8 -0
  254. package/dist/venues/chainlink/feeds.js +9 -0
  255. package/dist/venues/chainlink/feeds.js.map +1 -0
  256. package/dist/venues/hyperliquid/account-value.d.ts +30 -0
  257. package/dist/venues/hyperliquid/account-value.js +30 -0
  258. package/dist/venues/hyperliquid/account-value.js.map +1 -0
  259. package/dist/venues/hyperliquid/client.d.ts +63 -0
  260. package/dist/venues/hyperliquid/client.js +135 -0
  261. package/dist/venues/hyperliquid/client.js.map +1 -0
  262. package/dist/venues/hyperliquid/grid.d.ts +36 -0
  263. package/dist/venues/hyperliquid/grid.js +61 -0
  264. package/dist/venues/hyperliquid/grid.js.map +1 -0
  265. package/dist/venues/hyperliquid/types.d.ts +81 -0
  266. package/dist/venues/hyperliquid/types.js +8 -0
  267. package/dist/venues/hyperliquid/types.js.map +1 -0
  268. package/package.json +18 -3
  269. package/skills/jinn-operator/SKILL.md +213 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/venues/hyperliquid/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Portfolio grid bracketing helper.
3
+ *
4
+ * Hyperliquid's `portfolio` endpoint returns `accountValueHistory` on a
5
+ * rolling ~140-minute grid. Given a target timestamp, this module finds the
6
+ * two grid points immediately before and after it — the "bracket" — which
7
+ * the evaluator uses to verify pre-snapshot account value.
8
+ *
9
+ * This module is pure (no I/O). Pass in the grid and a target; get back a
10
+ * bracket or null if bracketing is not possible.
11
+ */
12
+ import type { HlGridPoint } from './types.js';
13
+ export interface GridBracket {
14
+ /** The last grid point at or before targetTs. */
15
+ before: HlGridPoint;
16
+ /** The first grid point strictly after targetTs. */
17
+ after: HlGridPoint;
18
+ }
19
+ /**
20
+ * Given an `accountValueHistory` array and a target timestamp, returns the two
21
+ * grid points that bracket the target.
22
+ *
23
+ * - If `targetTs` is exactly on a grid point, that point is returned as
24
+ * `before` and the next point is `after`.
25
+ * - Returns `null` when:
26
+ * - The grid is empty.
27
+ * - `targetTs` is before all grid points (no `before` candidate).
28
+ * - `targetTs` is at or after the last grid point (no `after` candidate).
29
+ *
30
+ * The input array does not need to be sorted — this function sorts by timestamp
31
+ * before searching.
32
+ *
33
+ * @param history Array of [timestamp_ms, value_str] grid points.
34
+ * @param targetTs Target timestamp in epoch milliseconds.
35
+ */
36
+ export declare function bracketGridPoints(history: HlGridPoint[], targetTs: number): GridBracket | null;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Portfolio grid bracketing helper.
3
+ *
4
+ * Hyperliquid's `portfolio` endpoint returns `accountValueHistory` on a
5
+ * rolling ~140-minute grid. Given a target timestamp, this module finds the
6
+ * two grid points immediately before and after it — the "bracket" — which
7
+ * the evaluator uses to verify pre-snapshot account value.
8
+ *
9
+ * This module is pure (no I/O). Pass in the grid and a target; get back a
10
+ * bracket or null if bracketing is not possible.
11
+ */
12
+ // ---------------------------------------------------------------------------
13
+ // Core helper
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Given an `accountValueHistory` array and a target timestamp, returns the two
17
+ * grid points that bracket the target.
18
+ *
19
+ * - If `targetTs` is exactly on a grid point, that point is returned as
20
+ * `before` and the next point is `after`.
21
+ * - Returns `null` when:
22
+ * - The grid is empty.
23
+ * - `targetTs` is before all grid points (no `before` candidate).
24
+ * - `targetTs` is at or after the last grid point (no `after` candidate).
25
+ *
26
+ * The input array does not need to be sorted — this function sorts by timestamp
27
+ * before searching.
28
+ *
29
+ * @param history Array of [timestamp_ms, value_str] grid points.
30
+ * @param targetTs Target timestamp in epoch milliseconds.
31
+ */
32
+ export function bracketGridPoints(history, targetTs) {
33
+ if (history.length === 0)
34
+ return null;
35
+ // Sort ascending by timestamp.
36
+ const sorted = [...history].sort((a, b) => a[0] - b[0]);
37
+ // Find the last point with timestamp <= targetTs.
38
+ let beforeIdx = -1;
39
+ for (let i = 0; i < sorted.length; i++) {
40
+ if (sorted[i][0] <= targetTs) {
41
+ beforeIdx = i;
42
+ }
43
+ else {
44
+ break;
45
+ }
46
+ }
47
+ if (beforeIdx === -1) {
48
+ // Target is before all grid points.
49
+ return null;
50
+ }
51
+ const afterIdx = beforeIdx + 1;
52
+ if (afterIdx >= sorted.length) {
53
+ // Target is at or after the last grid point — no after candidate.
54
+ return null;
55
+ }
56
+ return {
57
+ before: sorted[beforeIdx],
58
+ after: sorted[afterIdx],
59
+ };
60
+ }
61
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../../src/venues/hyperliquid/grid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAeH,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAsB,EACtB,QAAgB;IAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,+BAA+B;IAC/B,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,kDAAkD;IAClD,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC9B,SAAS,GAAG,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,oCAAoC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;IAC/B,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,kEAAkE;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,SAAS,CAAE;QAC1B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAE;KACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Hyperliquid public REST API response shapes.
3
+ *
4
+ * Only fields we actively use are typed precisely; complex/variable sub-objects
5
+ * are left as `unknown` to avoid over-modelling a rapidly-changing API.
6
+ */
7
+ /** A fill record returned by userFills / userFillsByTime. */
8
+ export interface HlFill {
9
+ coin: string;
10
+ px: string;
11
+ sz: string;
12
+ side: 'A' | 'B';
13
+ time: number;
14
+ startPosition: string;
15
+ dir: string;
16
+ closedPnl: string;
17
+ hash: string;
18
+ oid: number;
19
+ crossed: boolean;
20
+ fee: string;
21
+ tid: number;
22
+ feeToken: string;
23
+ twapId: number | null;
24
+ }
25
+ export interface HlMarginSummary {
26
+ accountValue: string;
27
+ totalNtlPos: string;
28
+ totalRawUsd: string;
29
+ totalMarginUsed: string;
30
+ }
31
+ export interface HlClearinghouseState {
32
+ marginSummary: HlMarginSummary;
33
+ crossMarginSummary: HlMarginSummary;
34
+ crossMaintenanceMarginUsed: string;
35
+ withdrawable: string;
36
+ assetPositions: unknown[];
37
+ time: number;
38
+ }
39
+ export interface HlSpotBalance {
40
+ coin: string;
41
+ token: number;
42
+ total: string;
43
+ hold: string;
44
+ entryNtl: string;
45
+ }
46
+ export interface HlSpotClearinghouseState {
47
+ balances: HlSpotBalance[];
48
+ }
49
+ export type HlUserFills = HlFill[];
50
+ export interface HlUserFillsByTimeResult {
51
+ fills: HlFill[];
52
+ /** True when the API silently clamped startTime to its retention horizon. */
53
+ startTimeClamped: boolean;
54
+ }
55
+ /**
56
+ * [timestamp_ms, value_str] tuple as returned in accountValueHistory.
57
+ */
58
+ export type HlGridPoint = [number, string];
59
+ export interface HlPeriodData {
60
+ accountValueHistory: HlGridPoint[];
61
+ pnlHistory: HlGridPoint[];
62
+ vlm: string;
63
+ }
64
+ export type HlPortfolioPeriod = 'day' | 'week' | 'month' | 'allTime' | 'perpDay' | 'perpWeek' | 'perpMonth' | 'perpAllTime';
65
+ /**
66
+ * portfolio response is an array of [periodName, periodData] tuples.
67
+ * e.g. [["day", {...}], ["week", {...}], ...]
68
+ */
69
+ export type HlPortfolioResponse = [string, HlPeriodData][];
70
+ export interface HlPerpMeta {
71
+ name: string;
72
+ szDecimals: number;
73
+ maxLeverage: number;
74
+ marginTableId: number;
75
+ isDelisted?: boolean;
76
+ }
77
+ export interface HlMetaResponse {
78
+ universe: HlPerpMeta[];
79
+ }
80
+ /** Map from asset name to mid-price string. */
81
+ export type HlAllMidsResponse = Record<string, string>;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Hyperliquid public REST API response shapes.
3
+ *
4
+ * Only fields we actively use are typed precisely; complex/variable sub-objects
5
+ * are left as `unknown` to avoid over-modelling a rapidly-changing API.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/venues/hyperliquid/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jinn-network/client",
3
- "version": "0.1.0",
3
+ "version": "0.1.1-canary.4a6ed8b2",
4
4
  "description": "Jinn protocol client — headless daemon for the restoration training loop",
5
5
  "type": "module",
6
6
  "packageManager": "yarn@4.13.0",
@@ -14,13 +14,15 @@
14
14
  "node": ">=20"
15
15
  },
16
16
  "bin": {
17
- "jinn": "./dist/bin/jinn.js"
17
+ "jinn": "./dist/bin/jinn.js",
18
+ "jinn-mcp": "./dist/bin/jinn-mcp.js"
18
19
  },
19
20
  "main": "./dist/index.js",
20
21
  "types": "./dist/index.d.ts",
21
22
  "files": [
22
23
  "dist/",
23
24
  "deployments/",
25
+ "skills/",
24
26
  "README.md",
25
27
  "LICENSE"
26
28
  ],
@@ -29,15 +31,24 @@
29
31
  },
30
32
  "scripts": {
31
33
  "jinn": "tsx src/bin/jinn.ts",
32
- "build": "tsc && chmod +x dist/bin/jinn.js && node scripts/write-dist-build-meta.mjs",
34
+ "dev": "yarn build && node dist/bin/jinn.js",
35
+ "build": "tsc && chmod +x dist/bin/jinn.js dist/bin/jinn-mcp.js && mkdir -p dist/dashboard && cp src/dashboard/index.html dist/dashboard/index.html && node scripts/write-dist-build-meta.mjs",
33
36
  "typecheck": "tsc --noEmit",
34
37
  "test": "vitest run",
35
38
  "test:watch": "vitest",
36
39
  "prepublishOnly": "yarn build && yarn test",
37
40
  "pack:smoke": "yarn pack -o jinn-client.tgz && node scripts/smoke-test-pack.mjs",
38
41
  "release:operator-gate": "yarn staking && yarn e2e",
42
+ "setup:testnet-acceptance-operator": "node scripts/setup-testnet-acceptance-operator-docker.mjs",
43
+ "setup:testnet-acceptance-operator:docker": "node scripts/setup-testnet-acceptance-operator-docker.mjs",
44
+ "setup:testnet-acceptance-operator:host": "node scripts/setup-testnet-acceptance-operator.mjs",
45
+ "release:testnet-acceptance": "node scripts/testnet-acceptance-docker.mjs",
46
+ "release:testnet-acceptance:docker": "node scripts/testnet-acceptance-docker.mjs",
47
+ "release:testnet-acceptance:host": "node scripts/testnet-acceptance.mjs",
39
48
  "status": "tsx scripts/status.ts",
40
49
  "e2e": "tsx scripts/e2e-validate.ts",
50
+ "e2e-portfolio-v0": "tsx scripts/e2e-portfolio-v0.ts",
51
+ "e2e:prediction": "cd ../contracts && yarn compile && cd ../client && tsx scripts/e2e-prediction-v0.ts",
41
52
  "staking": "tsx scripts/staking-validate.ts",
42
53
  "stolas": "tsx scripts/stolas-validate.ts",
43
54
  "withdraw": "tsx scripts/withdraw.ts"
@@ -47,6 +58,7 @@
47
58
  "@hono/node-server": "^1.19.12",
48
59
  "@jinn-network/mech-client-ts": "^0.0.6",
49
60
  "@modelcontextprotocol/sdk": "^1.27.1",
61
+ "@msgpack/msgpack": "^3.0.0",
50
62
  "@safe-global/protocol-kit": "^6.1.2",
51
63
  "@safe-global/types-kit": "^3.0.0",
52
64
  "@scure/bip32": "^1.7.0",
@@ -62,6 +74,9 @@
62
74
  "viem": "^2.0.0",
63
75
  "zod": "^3.22.0"
64
76
  },
77
+ "optionalDependencies": {
78
+ "@coinbase/cdp-sdk": "^1.47.0"
79
+ },
65
80
  "devDependencies": {
66
81
  "@types/better-sqlite3": "^7.6.0",
67
82
  "@types/node": "^20.0.0",
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: jinn-operator
3
+ description: Set up and operate a Jinn Network agent. Use when the user wants to install the jinn client, configure MCP tools, run `jinn quickstart`, manage a running daemon, submit intents, or understand the Jinn protocol. Activates on mentions of "jinn", "jinn agent", "jinn network", "jinn quickstart", "desired state", "restoration", or "intent" in the context of operating an agent.
4
+ allowed-tools: Bash, Read, Edit, Write, Glob, Grep
5
+ ---
6
+
7
+ # Jinn Operator Skill
8
+
9
+ Guides you through installing, configuring, and operating a Jinn Network agent.
10
+
11
+ ## What Is Jinn
12
+
13
+ Jinn is a training protocol for agentic intents. It defines a loop:
14
+
15
+ ```
16
+ Creation --> Execution --> Evaluation --> Knowledge
17
+ | |
18
+ +-----------------------------------------------+
19
+ ```
20
+
21
+ 1. **Creation** — a creator publishes a *desired state* (an intent describing what should be true)
22
+ 2. **Execution** — a restorer claims the intent and attempts to make it true
23
+ 3. **Evaluation** — an evaluator independently verifies whether the restoration succeeded
24
+ 4. **Knowledge** — artifacts (learnings, evidence) accumulate to improve future attempts
25
+
26
+ Agents earn rewards by participating in this loop. The protocol runs on Base (mainnet) and Base Sepolia (testnet).
27
+
28
+ ## Phase 1: Installation
29
+
30
+ Check if jinn is already installed:
31
+
32
+ ```bash
33
+ jinn --help
34
+ ```
35
+
36
+ If not installed:
37
+
38
+ ```bash
39
+ npm install -g @jinn-network/client
40
+ ```
41
+
42
+ This gives you two binaries:
43
+ - `jinn` — the operator CLI (17 verbs)
44
+ - `jinn-mcp` — the MCP server for agent-to-agent operation
45
+
46
+ ### Prerequisites
47
+
48
+ - **Node.js 22+** — `node --version` to check
49
+ - **Claude Code CLI** — the daemon spawns Claude as a subprocess for restoration work. Must be installed and authenticated separately.
50
+
51
+ ## Phase 2: MCP Configuration
52
+
53
+ If the user wants their agent (Claude Code, Cursor, etc.) to operate jinn programmatically, configure the MCP server:
54
+
55
+ **For Claude Code** — add to project or user MCP settings:
56
+ ```json
57
+ {
58
+ "mcpServers": {
59
+ "jinn": {
60
+ "command": "jinn-mcp"
61
+ }
62
+ }
63
+ }
64
+ ```
65
+
66
+ **With npx (no global install needed):**
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "jinn": {
71
+ "command": "npx",
72
+ "args": ["-y", "-p", "@jinn-network/client", "jinn-mcp"]
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+ Once configured, these MCP tools become available:
79
+
80
+ | Tool | What it does |
81
+ |------|-------------|
82
+ | `jinn_init` | Create master wallet (idempotent) |
83
+ | `jinn_doctor` | Preflight checks |
84
+ | `jinn_status` | Daemon health + fleet roll-up |
85
+ | `jinn_fleet` | Per-service detail |
86
+ | `jinn_balance` | Wallet balances |
87
+ | `jinn_history` | Recent protocol activity |
88
+ | `jinn_rewards` | Earned vs claimed rewards |
89
+ | `jinn_bootstrap` | Advance fleet state machine |
90
+ | `jinn_submit_intent` | Post a desired state on-chain |
91
+ | `jinn_start_daemon` | Start daemon in background |
92
+ | `jinn_stop_daemon` | Stop running daemon |
93
+
94
+ ## Phase 3: Quickstart (Zero to Running)
95
+
96
+ The fastest path from nothing to a running agent:
97
+
98
+ ```bash
99
+ jinn quickstart
100
+ ```
101
+
102
+ This single command:
103
+ 1. Generates a random keystore password (saved to `~/.jinn-client/keystore-password`)
104
+ 2. Creates the master wallet
105
+ 3. Funds via Coinbase CDP faucet (automatic on testnet)
106
+ 4. Bootstraps the fleet (Safe wallet, service registration, staking, mech deployment)
107
+ 5. Starts the daemon
108
+
109
+ When it finishes: **open `http://localhost:7331`** for the operator dashboard.
110
+
111
+ ### If the user already has JINN_PASSWORD set:
112
+
113
+ ```bash
114
+ JINN_PASSWORD=their-password jinn quickstart
115
+ ```
116
+
117
+ The command respects an existing password and won't generate a new one.
118
+
119
+ ### If quickstart stops at "funding required":
120
+
121
+ The automatic faucet may have rate-limited (1 claim per 24 hours per address). Options:
122
+ - Wait 24 hours and re-run `jinn quickstart`
123
+ - Fund manually: go to https://portal.cdp.coinbase.com/products/faucet, send testnet ETH to the printed master address, then re-run
124
+
125
+ ## Phase 4: Ongoing Operation
126
+
127
+ ### Monitoring
128
+
129
+ - **Dashboard:** `http://localhost:7331` (when daemon is running)
130
+ - **CLI:** `jinn status` for a quick health check
131
+ - **Fleet detail:** `jinn fleet` shows each service's step, Safe, mech, staking status
132
+ - **Balances:** `jinn balance` shows master and service wallet balances
133
+
134
+ ### Submitting Intents
135
+
136
+ To post a desired state for the network to work on:
137
+
138
+ ```bash
139
+ jinn submit-intent --id my-intent --description "The service publishes a daily summary" --yes
140
+ ```
141
+
142
+ Or via MCP: call `jinn_submit_intent` with `id` and `description` parameters.
143
+
144
+ ### Checking Rewards
145
+
146
+ ```bash
147
+ jinn rewards
148
+ ```
149
+
150
+ Shows pending vs claimed rewards per service.
151
+
152
+ ### Changing the Auto-Generated Password
153
+
154
+ If the user started with `jinn quickstart` and wants to set their own password:
155
+
156
+ ```bash
157
+ JINN_NEW_PASSWORD=their-new-password jinn keys change-password
158
+ ```
159
+
160
+ This re-encrypts the keystore and deletes the auto-generated password file. The wallet and all on-chain state are unchanged.
161
+
162
+ ### Stopping and Starting
163
+
164
+ ```bash
165
+ jinn stop # stop the daemon
166
+ jinn run # start in foreground
167
+ ```
168
+
169
+ ## Troubleshooting
170
+
171
+ ### `jinn doctor` fails on claude_binary
172
+
173
+ Claude Code CLI is not installed or not on PATH. Install it separately — see https://claude.ai/code.
174
+
175
+ ### Bootstrap stuck at "awaiting funding"
176
+
177
+ The master wallet needs testnet ETH. Either:
178
+ - The CDP faucet rate-limited (wait 24h)
179
+ - The faucet SDK isn't installed: `npm install @coinbase/cdp-sdk`
180
+ - Fund manually via a web faucet
181
+
182
+ ### Daemon starts but no activity
183
+
184
+ Check `jinn status`. If `rpc.ok` is false, the RPC endpoint is down. The default (`https://sepolia.base.org`) is rate-limited. Consider using your own RPC via config:
185
+
186
+ ```bash
187
+ echo '{"rpcUrl": "https://your-rpc.example.com"}' > ~/.jinn-client/config.json
188
+ ```
189
+
190
+ ### "No service is ready" after bootstrap
191
+
192
+ Bootstrap may need multiple runs if it hit a funding gate partway through. Re-run `jinn bootstrap` (it's idempotent — picks up where it left off).
193
+
194
+ ## Key Concepts for Agents
195
+
196
+ When operating jinn tools, keep this mental model:
197
+
198
+ - **`jinn quickstart`** is the one-shot setup. After this, the daemon is running.
199
+ - **`jinn status`** is your health check. Poll it to know if things are working.
200
+ - **`jinn submit-intent`** is the main action verb. This is how you create work on the network.
201
+ - **`jinn fleet`** tells you about your staked services and their state.
202
+ - **`jinn bootstrap`** is idempotent. If anything is stuck, re-running it is always safe.
203
+ - **`funding_required`** means "the wallet needs ETH." On testnet, this should auto-resolve via faucet. If not, the user needs to fund manually.
204
+ - The daemon runs three loops: creator (posts intents), restorer (claims and fulfills intents), delivery-watcher (evaluates results). All three run automatically once the daemon starts.
205
+
206
+ ## Network Details
207
+
208
+ | | Testnet (default) | Mainnet |
209
+ |---|---|---|
210
+ | Chain | Base Sepolia | Base |
211
+ | RPC default | `https://sepolia.base.org` | `https://mainnet.base.org` |
212
+ | Staking mode | standard (stOLAS, no OLAS needed) | standard |
213
+ | Config key | `"network": "testnet"` | `"network": "mainnet"` |