@jinn-network/client 0.1.0-canary.adfd078d

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 (278) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/deployments/deployment-phase1a-l2-baseSepolia-fast.json +32 -0
  4. package/deployments/deployment-phase1a-token-baseSepolia-fast.json +27 -0
  5. package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +26 -0
  6. package/deployments/deployment-stolas-l2-baseSepolia-fast.json +35 -0
  7. package/dist/adapters/adapter.d.ts +11 -0
  8. package/dist/adapters/adapter.js +2 -0
  9. package/dist/adapters/adapter.js.map +1 -0
  10. package/dist/adapters/local/adapter.d.ts +20 -0
  11. package/dist/adapters/local/adapter.js +146 -0
  12. package/dist/adapters/local/adapter.js.map +1 -0
  13. package/dist/adapters/mech/adapter.d.ts +29 -0
  14. package/dist/adapters/mech/adapter.js +332 -0
  15. package/dist/adapters/mech/adapter.js.map +1 -0
  16. package/dist/adapters/mech/claim-policy.d.ts +40 -0
  17. package/dist/adapters/mech/claim-policy.js +104 -0
  18. package/dist/adapters/mech/claim-policy.js.map +1 -0
  19. package/dist/adapters/mech/contracts.d.ts +44 -0
  20. package/dist/adapters/mech/contracts.js +323 -0
  21. package/dist/adapters/mech/contracts.js.map +1 -0
  22. package/dist/adapters/mech/ipfs.d.ts +43 -0
  23. package/dist/adapters/mech/ipfs.js +142 -0
  24. package/dist/adapters/mech/ipfs.js.map +1 -0
  25. package/dist/adapters/mech/safe.d.ts +15 -0
  26. package/dist/adapters/mech/safe.js +113 -0
  27. package/dist/adapters/mech/safe.js.map +1 -0
  28. package/dist/adapters/mech/types.d.ts +561 -0
  29. package/dist/adapters/mech/types.js +340 -0
  30. package/dist/adapters/mech/types.js.map +1 -0
  31. package/dist/api/balance-build.d.ts +22 -0
  32. package/dist/api/balance-build.js +37 -0
  33. package/dist/api/balance-build.js.map +1 -0
  34. package/dist/api/fleet-build.d.ts +62 -0
  35. package/dist/api/fleet-build.js +91 -0
  36. package/dist/api/fleet-build.js.map +1 -0
  37. package/dist/api/gather-status.d.ts +20 -0
  38. package/dist/api/gather-status.js +137 -0
  39. package/dist/api/gather-status.js.map +1 -0
  40. package/dist/api/history-build.d.ts +32 -0
  41. package/dist/api/history-build.js +48 -0
  42. package/dist/api/history-build.js.map +1 -0
  43. package/dist/api/peers.d.ts +27 -0
  44. package/dist/api/peers.js +94 -0
  45. package/dist/api/peers.js.map +1 -0
  46. package/dist/api/rewards-build.d.ts +20 -0
  47. package/dist/api/rewards-build.js +42 -0
  48. package/dist/api/rewards-build.js.map +1 -0
  49. package/dist/api/server.d.ts +34 -0
  50. package/dist/api/server.js +130 -0
  51. package/dist/api/server.js.map +1 -0
  52. package/dist/api/status-build.d.ts +92 -0
  53. package/dist/api/status-build.js +175 -0
  54. package/dist/api/status-build.js.map +1 -0
  55. package/dist/api/status-rollup-build.d.ts +36 -0
  56. package/dist/api/status-rollup-build.js +69 -0
  57. package/dist/api/status-rollup-build.js.map +1 -0
  58. package/dist/auth/erc8128.d.ts +43 -0
  59. package/dist/auth/erc8128.js +88 -0
  60. package/dist/auth/erc8128.js.map +1 -0
  61. package/dist/bin/jinn.d.ts +11 -0
  62. package/dist/bin/jinn.js +20 -0
  63. package/dist/bin/jinn.js.map +1 -0
  64. package/dist/build-meta.json +3 -0
  65. package/dist/chain-read-errors.d.ts +9 -0
  66. package/dist/chain-read-errors.js +43 -0
  67. package/dist/chain-read-errors.js.map +1 -0
  68. package/dist/cli/action.d.ts +26 -0
  69. package/dist/cli/action.js +56 -0
  70. package/dist/cli/action.js.map +1 -0
  71. package/dist/cli/command.d.ts +62 -0
  72. package/dist/cli/command.js +29 -0
  73. package/dist/cli/command.js.map +1 -0
  74. package/dist/cli/commands/balance.d.ts +3 -0
  75. package/dist/cli/commands/balance.js +46 -0
  76. package/dist/cli/commands/balance.js.map +1 -0
  77. package/dist/cli/commands/bootstrap.d.ts +3 -0
  78. package/dist/cli/commands/bootstrap.js +165 -0
  79. package/dist/cli/commands/bootstrap.js.map +1 -0
  80. package/dist/cli/commands/claim-rewards.d.ts +3 -0
  81. package/dist/cli/commands/claim-rewards.js +121 -0
  82. package/dist/cli/commands/claim-rewards.js.map +1 -0
  83. package/dist/cli/commands/doctor.d.ts +3 -0
  84. package/dist/cli/commands/doctor.js +151 -0
  85. package/dist/cli/commands/doctor.js.map +1 -0
  86. package/dist/cli/commands/fleet-scale.d.ts +3 -0
  87. package/dist/cli/commands/fleet-scale.js +449 -0
  88. package/dist/cli/commands/fleet-scale.js.map +1 -0
  89. package/dist/cli/commands/fleet.d.ts +3 -0
  90. package/dist/cli/commands/fleet.js +45 -0
  91. package/dist/cli/commands/fleet.js.map +1 -0
  92. package/dist/cli/commands/fund-requirements.d.ts +3 -0
  93. package/dist/cli/commands/fund-requirements.js +139 -0
  94. package/dist/cli/commands/fund-requirements.js.map +1 -0
  95. package/dist/cli/commands/history.d.ts +3 -0
  96. package/dist/cli/commands/history.js +61 -0
  97. package/dist/cli/commands/history.js.map +1 -0
  98. package/dist/cli/commands/init.d.ts +3 -0
  99. package/dist/cli/commands/init.js +91 -0
  100. package/dist/cli/commands/init.js.map +1 -0
  101. package/dist/cli/commands/keys-backup.d.ts +3 -0
  102. package/dist/cli/commands/keys-backup.js +107 -0
  103. package/dist/cli/commands/keys-backup.js.map +1 -0
  104. package/dist/cli/commands/logs.d.ts +3 -0
  105. package/dist/cli/commands/logs.js +69 -0
  106. package/dist/cli/commands/logs.js.map +1 -0
  107. package/dist/cli/commands/rewards.d.ts +3 -0
  108. package/dist/cli/commands/rewards.js +54 -0
  109. package/dist/cli/commands/rewards.js.map +1 -0
  110. package/dist/cli/commands/run.d.ts +3 -0
  111. package/dist/cli/commands/run.js +96 -0
  112. package/dist/cli/commands/run.js.map +1 -0
  113. package/dist/cli/commands/status.d.ts +3 -0
  114. package/dist/cli/commands/status.js +54 -0
  115. package/dist/cli/commands/status.js.map +1 -0
  116. package/dist/cli/commands/stop.d.ts +3 -0
  117. package/dist/cli/commands/stop.js +82 -0
  118. package/dist/cli/commands/stop.js.map +1 -0
  119. package/dist/cli/commands/submit-intent.d.ts +3 -0
  120. package/dist/cli/commands/submit-intent.js +169 -0
  121. package/dist/cli/commands/submit-intent.js.map +1 -0
  122. package/dist/cli/commands/version.d.ts +3 -0
  123. package/dist/cli/commands/version.js +114 -0
  124. package/dist/cli/commands/version.js.map +1 -0
  125. package/dist/cli/commands/withdraw.d.ts +3 -0
  126. package/dist/cli/commands/withdraw.js +181 -0
  127. package/dist/cli/commands/withdraw.js.map +1 -0
  128. package/dist/cli/deployment-digest.d.ts +10 -0
  129. package/dist/cli/deployment-digest.js +25 -0
  130. package/dist/cli/deployment-digest.js.map +1 -0
  131. package/dist/cli/execution-context.d.ts +50 -0
  132. package/dist/cli/execution-context.js +154 -0
  133. package/dist/cli/execution-context.js.map +1 -0
  134. package/dist/cli/help.d.ts +3 -0
  135. package/dist/cli/help.js +37 -0
  136. package/dist/cli/help.js.map +1 -0
  137. package/dist/cli/index.d.ts +17 -0
  138. package/dist/cli/index.js +132 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/introspection-context.d.ts +10 -0
  141. package/dist/cli/introspection-context.js +60 -0
  142. package/dist/cli/introspection-context.js.map +1 -0
  143. package/dist/cli/output.d.ts +36 -0
  144. package/dist/cli/output.js +35 -0
  145. package/dist/cli/output.js.map +1 -0
  146. package/dist/cli/password.d.ts +12 -0
  147. package/dist/cli/password.js +51 -0
  148. package/dist/cli/password.js.map +1 -0
  149. package/dist/config.d.ts +174 -0
  150. package/dist/config.js +252 -0
  151. package/dist/config.js.map +1 -0
  152. package/dist/daemon/creator.d.ts +24 -0
  153. package/dist/daemon/creator.js +80 -0
  154. package/dist/daemon/creator.js.map +1 -0
  155. package/dist/daemon/daemon.d.ts +60 -0
  156. package/dist/daemon/daemon.js +158 -0
  157. package/dist/daemon/daemon.js.map +1 -0
  158. package/dist/daemon/delivery-watcher.d.ts +10 -0
  159. package/dist/daemon/delivery-watcher.js +37 -0
  160. package/dist/daemon/delivery-watcher.js.map +1 -0
  161. package/dist/daemon/restorer.d.ts +19 -0
  162. package/dist/daemon/restorer.js +82 -0
  163. package/dist/daemon/restorer.js.map +1 -0
  164. package/dist/daemon/reward-claim-loop.d.ts +38 -0
  165. package/dist/daemon/reward-claim-loop.js +48 -0
  166. package/dist/daemon/reward-claim-loop.js.map +1 -0
  167. package/dist/discovery/registry.d.ts +43 -0
  168. package/dist/discovery/registry.js +104 -0
  169. package/dist/discovery/registry.js.map +1 -0
  170. package/dist/discovery/subgraph.d.ts +37 -0
  171. package/dist/discovery/subgraph.js +87 -0
  172. package/dist/discovery/subgraph.js.map +1 -0
  173. package/dist/earning/bootstrap.d.ts +79 -0
  174. package/dist/earning/bootstrap.js +989 -0
  175. package/dist/earning/bootstrap.js.map +1 -0
  176. package/dist/earning/contracts.d.ts +431 -0
  177. package/dist/earning/contracts.js +518 -0
  178. package/dist/earning/contracts.js.map +1 -0
  179. package/dist/earning/evidence-simhash.d.ts +59 -0
  180. package/dist/earning/evidence-simhash.js +87 -0
  181. package/dist/earning/evidence-simhash.js.map +1 -0
  182. package/dist/earning/fleet-display-index.d.ts +8 -0
  183. package/dist/earning/fleet-display-index.js +12 -0
  184. package/dist/earning/fleet-display-index.js.map +1 -0
  185. package/dist/earning/fleet-retire.d.ts +28 -0
  186. package/dist/earning/fleet-retire.js +75 -0
  187. package/dist/earning/fleet-retire.js.map +1 -0
  188. package/dist/earning/jinn-rewards.d.ts +62 -0
  189. package/dist/earning/jinn-rewards.js +81 -0
  190. package/dist/earning/jinn-rewards.js.map +1 -0
  191. package/dist/earning/next-service-index.d.ts +4 -0
  192. package/dist/earning/next-service-index.js +7 -0
  193. package/dist/earning/next-service-index.js.map +1 -0
  194. package/dist/earning/orphan-sweep.d.ts +33 -0
  195. package/dist/earning/orphan-sweep.js +157 -0
  196. package/dist/earning/orphan-sweep.js.map +1 -0
  197. package/dist/earning/reconcile.d.ts +37 -0
  198. package/dist/earning/reconcile.js +216 -0
  199. package/dist/earning/reconcile.js.map +1 -0
  200. package/dist/earning/safe-adapter.d.ts +70 -0
  201. package/dist/earning/safe-adapter.js +228 -0
  202. package/dist/earning/safe-adapter.js.map +1 -0
  203. package/dist/earning/stolas-claim.d.ts +47 -0
  204. package/dist/earning/stolas-claim.js +115 -0
  205. package/dist/earning/stolas-claim.js.map +1 -0
  206. package/dist/earning/store.d.ts +36 -0
  207. package/dist/earning/store.js +156 -0
  208. package/dist/earning/store.js.map +1 -0
  209. package/dist/earning/types.d.ts +123 -0
  210. package/dist/earning/types.js +64 -0
  211. package/dist/earning/types.js.map +1 -0
  212. package/dist/earning/viem-clients.d.ts +9 -0
  213. package/dist/earning/viem-clients.js +22 -0
  214. package/dist/earning/viem-clients.js.map +1 -0
  215. package/dist/earning/wallet.d.ts +20 -0
  216. package/dist/earning/wallet.js +103 -0
  217. package/dist/earning/wallet.js.map +1 -0
  218. package/dist/errors/envelope.d.ts +41 -0
  219. package/dist/errors/envelope.js +48 -0
  220. package/dist/errors/envelope.js.map +1 -0
  221. package/dist/index.d.ts +14 -0
  222. package/dist/index.js +17 -0
  223. package/dist/index.js.map +1 -0
  224. package/dist/main.d.ts +32 -0
  225. package/dist/main.js +281 -0
  226. package/dist/main.js.map +1 -0
  227. package/dist/mcp/server.d.ts +14 -0
  228. package/dist/mcp/server.js +205 -0
  229. package/dist/mcp/server.js.map +1 -0
  230. package/dist/operator-errors.d.ts +16 -0
  231. package/dist/operator-errors.js +88 -0
  232. package/dist/operator-errors.js.map +1 -0
  233. package/dist/preflight/claude-binary.d.ts +19 -0
  234. package/dist/preflight/claude-binary.js +44 -0
  235. package/dist/preflight/claude-binary.js.map +1 -0
  236. package/dist/preflight/claude-invocation-envelope.d.ts +11 -0
  237. package/dist/preflight/claude-invocation-envelope.js +67 -0
  238. package/dist/preflight/claude-invocation-envelope.js.map +1 -0
  239. package/dist/runner/claude.d.ts +15 -0
  240. package/dist/runner/claude.js +193 -0
  241. package/dist/runner/claude.js.map +1 -0
  242. package/dist/runner/runner.d.ts +11 -0
  243. package/dist/runner/runner.js +2 -0
  244. package/dist/runner/runner.js.map +1 -0
  245. package/dist/runner/simple.d.ts +8 -0
  246. package/dist/runner/simple.js +11 -0
  247. package/dist/runner/simple.js.map +1 -0
  248. package/dist/store/store.d.ts +74 -0
  249. package/dist/store/store.js +173 -0
  250. package/dist/store/store.js.map +1 -0
  251. package/dist/tx-retry.d.ts +55 -0
  252. package/dist/tx-retry.js +214 -0
  253. package/dist/tx-retry.js.map +1 -0
  254. package/dist/types/desired-state.d.ts +41 -0
  255. package/dist/types/desired-state.js +16 -0
  256. package/dist/types/desired-state.js.map +1 -0
  257. package/dist/types/errors.d.ts +8 -0
  258. package/dist/types/errors.js +17 -0
  259. package/dist/types/errors.js.map +1 -0
  260. package/dist/types/index.d.ts +2 -0
  261. package/dist/types/index.js +3 -0
  262. package/dist/types/index.js.map +1 -0
  263. package/dist/withdraw/args.d.ts +29 -0
  264. package/dist/withdraw/args.js +198 -0
  265. package/dist/withdraw/args.js.map +1 -0
  266. package/dist/withdraw/run-withdraw-plan.d.ts +21 -0
  267. package/dist/withdraw/run-withdraw-plan.js +257 -0
  268. package/dist/withdraw/run-withdraw-plan.js.map +1 -0
  269. package/dist/x402/acquire.d.ts +6 -0
  270. package/dist/x402/acquire.js +32 -0
  271. package/dist/x402/acquire.js.map +1 -0
  272. package/dist/x402/facilitator.d.ts +11 -0
  273. package/dist/x402/facilitator.js +52 -0
  274. package/dist/x402/facilitator.js.map +1 -0
  275. package/dist/x402/handler.d.ts +15 -0
  276. package/dist/x402/handler.js +40 -0
  277. package/dist/x402/handler.js.map +1 -0
  278. package/package.json +72 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Jinn Network contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,162 @@
1
+ # @jinn-network/client
2
+
3
+ Jinn protocol client. Runs a headless daemon that participates in the Jinn training loop: create, restore, and evaluate desired states, and earn rewards for measured work.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g @jinn-network/client@latest
9
+ ```
10
+
11
+ Or with Yarn:
12
+
13
+ ```bash
14
+ yarn global add @jinn-network/client@latest
15
+ ```
16
+
17
+ ## Quick start
18
+
19
+ ```bash
20
+ # Generate wallet and keystore
21
+ jinn init
22
+
23
+ # Check environment readiness
24
+ jinn doctor
25
+
26
+ # Start the daemon
27
+ JINN_PASSWORD=your-keystore-password jinn run
28
+ ```
29
+
30
+ On first run, the bootstrap generates a master wallet and prints a funding address. Send testnet ETH to it, then re-run. The bootstrap is idempotent — it picks up where it left off.
31
+
32
+ `JINN_PASSWORD` encrypts the local keystore and is env-only; never put it in a config file.
33
+
34
+ ## Try without installing
35
+
36
+ ```bash
37
+ npx @jinn-network/client@latest doctor
38
+ ```
39
+
40
+ ## Docker (Recommended for Operators)
41
+
42
+ The Jinn daemon runs pure Node, but spawns the Anthropic `claude` CLI as a subprocess for restorations. To keep your costs low, operators should use Claude's OAuth authentication (which leverages prompt caching and app tiers) instead of brute-forcing API keys.
43
+
44
+ Because the macOS keychain securely encrypts OAuth tokens, you **cannot** simply mount `~/.claude` from a Mac host into Docker. Instead, the most robust way to manage credentials and daemon state is using our included `docker-compose.yml`.
45
+
46
+ ### Zero-Friction Setup
47
+
48
+ 1. **Configure Environment:** Create a `.env` file with your master password:
49
+ ```bash
50
+ echo "JINN_PASSWORD=your-secure-password" > .env
51
+ ```
52
+
53
+ 2. **Authenticate Claude (One-Time):** The image entrypoint is the `jinn` binary, so run the Anthropic CLI directly by overriding the entrypoint. This performs the OAuth flow and saves the token to the persistent `jinn-claude-state` volume (same volumes as the daemon service):
54
+ ```bash
55
+ docker compose run --rm -it --entrypoint claude jinn-daemon auth login
56
+ ```
57
+ Use `-it` so the CLI can open a browser (or show a URL to visit) and receive input. The process stays in the foreground until you finish sign-in.
58
+ *Follow the URL to authenticate in your browser.*
59
+
60
+ 3. **Start the Fleet:** Now that the Docker volume holds the token, start the headless daemon:
61
+ ```bash
62
+ docker compose up -d
63
+ ```
64
+
65
+ ### Quick Test
66
+
67
+ ```bash
68
+ docker run --rm ghcr.io/jinn-network/client:latest version --json
69
+ ```
70
+
71
+ ## Operator commands
72
+
73
+ ### Lifecycle
74
+
75
+ | Command | Purpose | Idempotent |
76
+ |---|---|---|
77
+ | `jinn init` | Generate wallet + keystore | Yes |
78
+ | `jinn doctor` | Preflight checks without mutation | Yes |
79
+ | `jinn bootstrap` | Advance toward a running fleet | Yes |
80
+ | `jinn fund-requirements` | List what needs funding | Yes |
81
+ | `jinn run` | Start the daemon (foreground) | N/A |
82
+ | `jinn stop` | Signal a running daemon to stop | Yes |
83
+ | `jinn version` | Version, phase, deployment digest | Yes |
84
+
85
+ ### Monitoring
86
+
87
+ | Command | Purpose |
88
+ |---|---|
89
+ | `jinn status` | Daemon liveness + fleet health roll-up |
90
+ | `jinn fleet` | Per-service detail: wallets, staking, activity |
91
+ | `jinn balance` | Flat per-wallet balance map |
92
+ | `jinn history` | Recent protocol activity |
93
+ | `jinn rewards` | Earned vs claimed per service |
94
+ | `jinn logs` | Structured event stream |
95
+
96
+ ### Actions
97
+
98
+ All action verbs support `--dry-run` and `--yes`.
99
+
100
+ | Command | Purpose |
101
+ |---|---|
102
+ | `jinn submit-intent` | Publish a desired state |
103
+ | `jinn claim-rewards` | Pull pending protocol rewards |
104
+ | `jinn fleet scale --to N` | Grow or shrink fleet |
105
+ | `jinn fleet retire <index>` | Retire one service |
106
+ | `jinn withdraw --to <addr>` | Sweep wallets to external address |
107
+ | `jinn keys backup --output <path>` | Export mnemonic |
108
+
109
+ ## Output contract
110
+
111
+ - **JSON by default** for operational verbs unless you pass `--human` (headless- and agent-friendly regardless of TTY).
112
+ - Add `--human` for readable terminal output.
113
+ - `stderr` is reserved for progress, warnings, and runtime logs.
114
+ - Non-zero exits emit a structured error envelope on stdout with `schemaVersion`, `code`, `exitCode`, `message`, `hint`, and `exampleCli`.
115
+ - Without a global install, use `npx @jinn-network/client@latest <verb> ...` instead of `jinn ...` (the package name is scoped; `npx jinn` resolves a different package).
116
+
117
+ See [`spec/2026-04-14-client-surface.md`](../spec/2026-04-14-client-surface.md) for the full surface spec.
118
+
119
+ ## Configuration
120
+
121
+ Config file first, env var override. Default location: `~/.jinn-client/config.json`.
122
+
123
+ ```bash
124
+ JINN_PASSWORD=secret jinn run --config ./my-config.json
125
+ ```
126
+
127
+ | Config key | Env override | Default |
128
+ |---|---|---|
129
+ | network | JINN_NETWORK | testnet (flips to mainnet at launch) |
130
+ | rpcUrl | BASE_RPC_URL / JINN_RPC_URL | network-appropriate public RPC |
131
+ | claudeModel | JINN_CLAUDE_MODEL | claude-haiku-4-5-20251001 |
132
+ | claudePath | JINN_CLAUDE_PATH | claude |
133
+ | pollIntervalMs | JINN_POLL_INTERVAL_MS | 5000 |
134
+ | apiPort | JINN_API_PORT | 7331 |
135
+ | dbPath | JINN_DB_PATH | ~/.jinn-client/jinn.db |
136
+ | earningDir | JINN_EARNING_DIR | ~/.jinn-client/earning |
137
+ | peers | JINN_PEERS | [] |
138
+ | desiredStates | JINN_DESIRED_STATES | [health-check] |
139
+
140
+ `JINN_PASSWORD` is env-only (keystore encryption, never in config files). Alternatively, use `--password-fd <N>` to read from a file descriptor.
141
+
142
+ ## Switching to mainnet
143
+
144
+ When Phase 2 launches, the default flips. Until then:
145
+
146
+ ```bash
147
+ JINN_NETWORK=mainnet JINN_PASSWORD=secret jinn run
148
+ ```
149
+
150
+ ## How it works
151
+
152
+ The daemon runs three concurrent loops:
153
+
154
+ 1. **CreatorLoop** — posts desired states as restoration jobs
155
+ 2. **RestorerLoop** — claims requests, spawns Claude to attempt restoration, submits results
156
+ 3. **DeliveryWatcherLoop** — claims deliveries, creates evaluation jobs
157
+
158
+ Each loop call increments on-chain activity counters. Staking contracts read these at checkpoints to determine reward eligibility.
159
+
160
+ ## Development
161
+
162
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for development setup, running from source, and testing.
@@ -0,0 +1,32 @@
1
+ {
2
+ "network": "baseSepolia",
3
+ "chainId": 84532,
4
+ "deployer": "0x15e78734481bD31F6e183dad05225505a45ACd07",
5
+ "deployedAt": "2026-04-08T16:00:00.000Z",
6
+ "config": {
7
+ "jinnTokenSource": "external",
8
+ "serviceRegistrySource": "external",
9
+ "serviceRegistryTokenUtilitySource": "external",
10
+ "proxyHash": "0xb89c1b3bdf2cf8827818646bce9a8f6e372885f8c55e5c07acbd307cb133b000",
11
+ "proxyHashSource": "external",
12
+ "timingProfile": "fast-test",
13
+ "livenessRatio": "1000000000000000",
14
+ "maxNumServices": 100,
15
+ "rewardsPerSecond": "100000000000000",
16
+ "minStakingDeposit": "10000000000000000000",
17
+ "minNumStakingPeriods": 2,
18
+ "maxNumInactivityPeriods": 1,
19
+ "livenessPeriod": 300,
20
+ "timeForEmissions": 21600,
21
+ "numAgentInstances": 1
22
+ },
23
+ "contracts": {
24
+ "jinnToken": "0xAB9a01cd4A379e36006ec6df2960CF39EF79df63",
25
+ "serviceRegistry": "0x31D3202d8744B16A120117A053459DDFAE93c855",
26
+ "serviceRegistryTokenUtility": "0xeB49bE5DF00F74bd240DE4535DDe6Bc89CEfb994",
27
+ "activityChecker": "0xdaa1529de84B429945A33744539Af6D7140BF9B6",
28
+ "stakingFactory": "0x4FaF53A13Df420D70FE337F5b77B35B6E7309C48",
29
+ "stakingImplementation": "0xE98F9a4d368A0ea190cBdC938d1eAe8cEf086e12",
30
+ "stakingToken": "0x2c286651590b4DdC6d58d1270069B43183a851D1"
31
+ }
32
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "network": "baseSepolia",
3
+ "chainId": 84532,
4
+ "deployer": "0x15e78734481bD31F6e183dad05225505a45ACd07",
5
+ "deployedAt": "2026-04-08T15:59:07.620Z",
6
+ "config": {
7
+ "timingProfile": "fast-test",
8
+ "l1DeploymentPath": "deployment-phase1a-sepolia-fast.json",
9
+ "l1Token": "0xc3ae831f146Eabbb8095E1EDf90a187AA4E5F408",
10
+ "name": "Jinn",
11
+ "symbol": "JINN",
12
+ "factoryAddress": "0x4200000000000000000000000000000000000012",
13
+ "l2StandardBridgeAddress": "0x4200000000000000000000000000000000000010"
14
+ },
15
+ "contracts": {
16
+ "l1Token": "0xc3ae831f146Eabbb8095E1EDf90a187AA4E5F408",
17
+ "l2Token": "0xAB9a01cd4A379e36006ec6df2960CF39EF79df63",
18
+ "mintableFactory": "0x4200000000000000000000000000000000000012",
19
+ "l2StandardBridge": "0x4200000000000000000000000000000000000010"
20
+ },
21
+ "verification": {
22
+ "remoteToken": "0xc3ae831f146Eabbb8095E1EDf90a187AA4E5F408",
23
+ "bridge": "0x4200000000000000000000000000000000000010",
24
+ "txHash": "0x27d79a54715df4509524e0f2308809d6336e0b734002266552ce256828b1469a",
25
+ "reusedExisting": false
26
+ }
27
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "network": "baseSepolia",
3
+ "chainId": 84532,
4
+ "deployer": "0x15e78734481bD31F6e183dad05225505a45ACd07",
5
+ "deployedAt": "2026-04-09T13:21:20.747Z",
6
+ "config": {
7
+ "timingProfile": "fast-test",
8
+ "fee": 0,
9
+ "minResponseTimeout": 60,
10
+ "maxResponseTimeout": 300,
11
+ "livenessRatio": "1000000000000000",
12
+ "nativePaymentType": "0xba699a34be8fe0e7725e93dcbce1701b0211a8ca61330aaeb8a05bf2ec7abed1"
13
+ },
14
+ "contracts": {
15
+ "karmaImpl": "0x5FFD663593Cea8dedF19fD314b13E392F5b64FC1",
16
+ "karma": "0x61434dAFf652FF0654684482Ab11736E96a7ba3A",
17
+ "mechMarketplaceImpl": "0x16F35EF27d4A0a8b49B77BfB65e668dB43311133",
18
+ "mechMarketplace": "0xD3233FdAaB51E9775f6bFCE8242B02C181D7c0e7",
19
+ "balanceTracker": "0xDbeEF1947F7BB3657f984aA6b230a0ca6578229D",
20
+ "mechFactory": "0x206183F35B2450Ca15A906BB923E74d945F78d67",
21
+ "jinnRouter": "0x6059Dd37eB0FD3a55BCe7A3C1fA86AB84F2d9675",
22
+ "serviceRegistry": "0x31D3202d8744B16A120117A053459DDFAE93c855",
23
+ "activityChecker": "0xF4Ca4943Eb0b0927d754A6A95206364f017D45f6",
24
+ "stakingToken": "0xf358b5c1ac4ddc4e807b5baf008826bf193eab3b"
25
+ }
26
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "network": "baseSepolia",
3
+ "chainId": 84532,
4
+ "deployer": "0x15e78734481bD31F6e183dad05225505a45ACd07",
5
+ "deployedAt": "2026-04-10T16:46:00.888Z",
6
+ "config": {
7
+ "l2Jinn": "0xAB9a01cd4A379e36006ec6df2960CF39EF79df63",
8
+ "stakingContract": "0xf358b5c1ac4ddc4e807b5baf008826bf193eab3b",
9
+ "l1DepositProcessor": "0x494FBcd686C895fD6265e852086B53Abf15cb076",
10
+ "l1DistributorProxy": "0x12F14eF5b4881a932BE3F334599cB9473aBE987A",
11
+ "l1TreasuryProxy": "0xa87c117cB54d9C6C8a8e0aA0b336a1125E485Cb7",
12
+ "stakingType": 1,
13
+ "collectorRewardFactor": 10000,
14
+ "protocolRewardFactor": 0,
15
+ "curatingAgentRewardFactor": 0,
16
+ "agentId": 103,
17
+ "livenessRatio": "1000000000000000"
18
+ },
19
+ "contracts": {
20
+ "recoveryModule": "0x5E3327C73834502f14e93e6b7D74742De1f9F3FD",
21
+ "safeMultisigWithRecoveryModule": "0x20F7b9b55a88e3b2561fe83B076DE52916C7eaf0",
22
+ "collectorImpl": "0x6A7a3aBdbfF301A6212ebA1523E579399833C718",
23
+ "collector": "0x21c52Be4F656435F97d0335B37e21B417c8b6DFa",
24
+ "distributorImpl": "0xf734551289f11431486D60621F4BDB0081887B34",
25
+ "distributor": "0x20951FBDb4F9cB1f051ef416BCB11A9Cfe3CEf81",
26
+ "multisigGuardImpl": "0xD6229A8b3D1b5824e824E6589469F85987379183",
27
+ "multisigGuard": "0x77aE56B2B745b3e81002090749Ef59B72B688D5F",
28
+ "moduleActivityChecker": "0x4B7F3539cAb410C7b56ad6158DB4197F02942a0F",
29
+ "activityModule": "0x73e2713B535540A3378ddA3DC62F1e75b35469c3",
30
+ "beacon": "0xB73Be5348C09FD95e4Fc64cc5fCb2b4B4F932b10",
31
+ "stakingManagerImpl": "0xFb0B086D3f7C03f1F671C6ccD5D16CC779B25Af9",
32
+ "stakingManager": "0x5edCd012C581b946E06a74e1906a5f29D588403e",
33
+ "baseStakingProcessorL2": "0x23a063f600e9938405D0367a137f1bE2F0B4D0D2"
34
+ }
35
+ }
@@ -0,0 +1,11 @@
1
+ import type { DesiredState, RequestId, RestorationRequest, RestorationResult, DeliveredResult } from '../types/index.js';
2
+ export interface ExecutionAdapter {
3
+ readonly name: string;
4
+ initialize(): Promise<void>;
5
+ postDesiredState(state: DesiredState): Promise<RequestId>;
6
+ watchForRequests(): AsyncIterable<RestorationRequest>;
7
+ claimRequest(requestId: RequestId): Promise<void>;
8
+ submitResult(requestId: RequestId, result: RestorationResult): Promise<void>;
9
+ watchForDeliveries(): AsyncIterable<DeliveredResult>;
10
+ stop(): Promise<void>;
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapters/adapter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { ExecutionAdapter } from '../adapter.js';
2
+ import type { DesiredState, RequestId, RestorationRequest, RestorationResult, DeliveredResult } from '../../types/index.js';
3
+ export declare class LocalAdapter implements ExecutionAdapter {
4
+ readonly name = "local";
5
+ private requests;
6
+ private pendingRequests;
7
+ private deferredEvalRequests;
8
+ private pendingDeliveries;
9
+ private requestWaiters;
10
+ private deliveryWaiters;
11
+ private deliveredRequestIds;
12
+ private stopped;
13
+ initialize(): Promise<void>;
14
+ postDesiredState(state: DesiredState): Promise<RequestId>;
15
+ watchForRequests(): AsyncIterable<RestorationRequest>;
16
+ claimRequest(_requestId: RequestId): Promise<void>;
17
+ submitResult(requestId: RequestId, result: RestorationResult): Promise<void>;
18
+ watchForDeliveries(): AsyncIterable<DeliveredResult>;
19
+ stop(): Promise<void>;
20
+ }
@@ -0,0 +1,146 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ export class LocalAdapter {
3
+ name = 'local';
4
+ requests = new Map();
5
+ pendingRequests = [];
6
+ deferredEvalRequests = [];
7
+ pendingDeliveries = [];
8
+ requestWaiters = [];
9
+ deliveryWaiters = [];
10
+ deliveredRequestIds = new Set();
11
+ stopped = false;
12
+ async initialize() {
13
+ // No-op for local
14
+ }
15
+ async postDesiredState(state) {
16
+ const requestId = randomUUID();
17
+ // Create restoration request
18
+ const restorationState = {
19
+ ...state,
20
+ type: state.type ?? 'restoration',
21
+ };
22
+ const request = {
23
+ requestId,
24
+ desiredState: restorationState,
25
+ };
26
+ this.requests.set(requestId, request);
27
+ if (this.requestWaiters.length > 0) {
28
+ this.requestWaiters.shift()(request);
29
+ }
30
+ else {
31
+ this.pendingRequests.push(request);
32
+ }
33
+ // Create linked evaluation request
34
+ const evalRequestId = randomUUID();
35
+ const evaluationState = {
36
+ ...state,
37
+ type: 'evaluation',
38
+ restorationRequestId: requestId,
39
+ };
40
+ const evalRequest = {
41
+ requestId: evalRequestId,
42
+ desiredState: evaluationState,
43
+ };
44
+ this.requests.set(evalRequestId, evalRequest);
45
+ // Evaluation requests are deferred — only yielded after restoration is delivered
46
+ this.deferredEvalRequests.push(evalRequest);
47
+ return requestId;
48
+ }
49
+ async *watchForRequests() {
50
+ while (!this.stopped) {
51
+ // Check if any deferred evaluation requests are now ready
52
+ const stillDeferred = [];
53
+ for (const evalReq of this.deferredEvalRequests) {
54
+ const restorationId = evalReq.desiredState.restorationRequestId;
55
+ if (restorationId && this.deliveredRequestIds.has(restorationId)) {
56
+ // Restoration delivered — yield evaluation request
57
+ if (this.requestWaiters.length > 0) {
58
+ this.requestWaiters.shift()(evalReq);
59
+ }
60
+ else {
61
+ this.pendingRequests.push(evalReq);
62
+ }
63
+ }
64
+ else {
65
+ stillDeferred.push(evalReq);
66
+ }
67
+ }
68
+ this.deferredEvalRequests = stillDeferred;
69
+ if (this.pendingRequests.length > 0) {
70
+ yield this.pendingRequests.shift();
71
+ }
72
+ else {
73
+ const req = await new Promise((resolve) => {
74
+ this.requestWaiters.push(resolve);
75
+ });
76
+ if (!this.stopped)
77
+ yield req;
78
+ }
79
+ }
80
+ }
81
+ async claimRequest(_requestId) {
82
+ // Always succeeds in local mode
83
+ }
84
+ async submitResult(requestId, result) {
85
+ const request = this.requests.get(requestId);
86
+ if (!request)
87
+ throw new Error(`Unknown request: ${requestId}`);
88
+ this.deliveredRequestIds.add(requestId);
89
+ const delivery = {
90
+ requestId,
91
+ desiredState: request.desiredState,
92
+ result,
93
+ deliveryMechAddress: 'local',
94
+ };
95
+ if (this.deliveryWaiters.length > 0) {
96
+ this.deliveryWaiters.shift()(delivery);
97
+ }
98
+ else {
99
+ this.pendingDeliveries.push(delivery);
100
+ }
101
+ // Check if any deferred evaluation requests are now ready
102
+ const stillDeferred = [];
103
+ for (const evalReq of this.deferredEvalRequests) {
104
+ const restorationId = evalReq.desiredState.restorationRequestId;
105
+ if (restorationId && this.deliveredRequestIds.has(restorationId)) {
106
+ if (this.requestWaiters.length > 0) {
107
+ this.requestWaiters.shift()(evalReq);
108
+ }
109
+ else {
110
+ this.pendingRequests.push(evalReq);
111
+ }
112
+ }
113
+ else {
114
+ stillDeferred.push(evalReq);
115
+ }
116
+ }
117
+ this.deferredEvalRequests = stillDeferred;
118
+ }
119
+ async *watchForDeliveries() {
120
+ while (!this.stopped) {
121
+ if (this.pendingDeliveries.length > 0) {
122
+ yield this.pendingDeliveries.shift();
123
+ }
124
+ else {
125
+ const del = await new Promise((resolve) => {
126
+ this.deliveryWaiters.push(resolve);
127
+ });
128
+ if (!this.stopped)
129
+ yield del;
130
+ }
131
+ }
132
+ }
133
+ async stop() {
134
+ this.stopped = true;
135
+ // Resolve any pending waiters so loops can exit
136
+ for (const waiter of this.requestWaiters) {
137
+ waiter({ requestId: '', desiredState: { id: '', description: '' } });
138
+ }
139
+ for (const waiter of this.deliveryWaiters) {
140
+ waiter({ requestId: '', desiredState: { id: '', description: '' }, result: { data: '' }, deliveryMechAddress: '' });
141
+ }
142
+ this.requestWaiters = [];
143
+ this.deliveryWaiters = [];
144
+ }
145
+ }
146
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/local/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { ExecutionAdapter } from '../adapter.js';
2
+ import type { DesiredState, RequestId, RestorationRequest, RestorationResult, DeliveredResult } from '../../types/index.js';
3
+ import { type MechAdapterConfig } from './types.js';
4
+ import type { Store } from '../../store/store.js';
5
+ export declare class MechAdapter implements ExecutionAdapter {
6
+ readonly name = "mech";
7
+ private publicClient;
8
+ private walletClient;
9
+ private config;
10
+ private stopped;
11
+ private requestBlockCursor;
12
+ private deliveryBlockCursor;
13
+ private pendingEvaluations;
14
+ private pendingEvaluationClaims;
15
+ private claimedButNotEvaluated;
16
+ private originalStates;
17
+ private store?;
18
+ private claimPolicy;
19
+ constructor(config: MechAdapterConfig, store?: Store);
20
+ initialize(): Promise<void>;
21
+ private recoverPendingState;
22
+ postDesiredState(state: DesiredState): Promise<RequestId>;
23
+ watchForRequests(): AsyncIterable<RestorationRequest>;
24
+ claimRequest(requestId: RequestId): Promise<void>;
25
+ submitResult(requestId: RequestId, result: RestorationResult): Promise<void>;
26
+ watchForDeliveries(): AsyncIterable<DeliveredResult>;
27
+ private tryCreateEvaluationJob;
28
+ stop(): Promise<void>;
29
+ }