@antseed/cli 0.1.80 → 0.1.82

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 (236) hide show
  1. package/README.md +93 -77
  2. package/dist/cli/commands/buyer/balance.d.ts +3 -0
  3. package/dist/cli/commands/buyer/balance.d.ts.map +1 -0
  4. package/dist/cli/commands/{balance.js → buyer/balance.js} +5 -6
  5. package/dist/cli/commands/buyer/balance.js.map +1 -0
  6. package/dist/cli/commands/buyer/channels.d.ts +3 -0
  7. package/dist/cli/commands/buyer/channels.d.ts.map +1 -0
  8. package/dist/cli/commands/{channels.js → buyer/channels.js} +9 -17
  9. package/dist/cli/commands/buyer/channels.js.map +1 -0
  10. package/dist/cli/commands/buyer/connection.d.ts +3 -0
  11. package/dist/cli/commands/buyer/connection.d.ts.map +1 -0
  12. package/dist/cli/commands/{connection.js → buyer/connection.js} +5 -5
  13. package/dist/cli/commands/buyer/connection.js.map +1 -0
  14. package/dist/cli/commands/buyer/deposit.d.ts +3 -0
  15. package/dist/cli/commands/buyer/deposit.d.ts.map +1 -0
  16. package/dist/cli/commands/{deposit.js → buyer/deposit.js} +6 -6
  17. package/dist/cli/commands/buyer/deposit.js.map +1 -0
  18. package/dist/cli/commands/buyer/index.d.ts +3 -0
  19. package/dist/cli/commands/buyer/index.d.ts.map +1 -0
  20. package/dist/cli/commands/buyer/index.js +24 -0
  21. package/dist/cli/commands/buyer/index.js.map +1 -0
  22. package/dist/cli/commands/buyer/metering.d.ts +3 -0
  23. package/dist/cli/commands/buyer/metering.d.ts.map +1 -0
  24. package/dist/cli/commands/{metering.js → buyer/metering.js} +7 -10
  25. package/dist/cli/commands/buyer/metering.js.map +1 -0
  26. package/dist/cli/commands/buyer/metering.test.d.ts.map +1 -0
  27. package/dist/cli/commands/buyer/metering.test.js.map +1 -0
  28. package/dist/cli/commands/{connect.d.ts → buyer/start.d.ts} +7 -4
  29. package/dist/cli/commands/buyer/start.d.ts.map +1 -0
  30. package/dist/cli/commands/{connect.js → buyer/start.js} +37 -71
  31. package/dist/cli/commands/buyer/start.js.map +1 -0
  32. package/dist/cli/commands/buyer/start.test.d.ts +2 -0
  33. package/dist/cli/commands/buyer/start.test.d.ts.map +1 -0
  34. package/dist/cli/commands/{connect.test.js → buyer/start.test.js} +12 -8
  35. package/dist/cli/commands/buyer/start.test.js.map +1 -0
  36. package/dist/cli/commands/buyer/status.d.ts +3 -0
  37. package/dist/cli/commands/buyer/status.d.ts.map +1 -0
  38. package/dist/cli/commands/buyer/status.js +70 -0
  39. package/dist/cli/commands/buyer/status.js.map +1 -0
  40. package/dist/cli/commands/buyer/subscribe.d.ts +3 -0
  41. package/dist/cli/commands/buyer/subscribe.d.ts.map +1 -0
  42. package/dist/cli/commands/{subscribe.js → buyer/subscribe.js} +8 -8
  43. package/dist/cli/commands/buyer/subscribe.js.map +1 -0
  44. package/dist/cli/commands/buyer/withdraw.d.ts +3 -0
  45. package/dist/cli/commands/buyer/withdraw.d.ts.map +1 -0
  46. package/dist/cli/commands/{withdraw.js → buyer/withdraw.js} +6 -7
  47. package/dist/cli/commands/buyer/withdraw.js.map +1 -0
  48. package/dist/cli/commands/{config.d.ts → config/index.d.ts} +7 -7
  49. package/dist/cli/commands/config/index.d.ts.map +1 -0
  50. package/dist/cli/commands/config/index.js +357 -0
  51. package/dist/cli/commands/config/index.js.map +1 -0
  52. package/dist/cli/commands/config/index.test.d.ts +2 -0
  53. package/dist/cli/commands/config/index.test.d.ts.map +1 -0
  54. package/dist/cli/commands/config/index.test.js +28 -0
  55. package/dist/cli/commands/config/index.test.js.map +1 -0
  56. package/dist/cli/commands/identity/index.d.ts +3 -0
  57. package/dist/cli/commands/identity/index.d.ts.map +1 -0
  58. package/dist/cli/commands/identity/index.js +6 -0
  59. package/dist/cli/commands/identity/index.js.map +1 -0
  60. package/dist/cli/commands/identity/profile.d.ts.map +1 -0
  61. package/dist/cli/commands/identity/profile.js.map +1 -0
  62. package/dist/cli/commands/network/bootstrap.d.ts +3 -0
  63. package/dist/cli/commands/network/bootstrap.d.ts.map +1 -0
  64. package/dist/cli/commands/{bootstrap.js → network/bootstrap.js} +5 -5
  65. package/dist/cli/commands/network/bootstrap.js.map +1 -0
  66. package/dist/cli/commands/network/browse.d.ts +7 -0
  67. package/dist/cli/commands/network/browse.d.ts.map +1 -0
  68. package/dist/cli/commands/{browse.js → network/browse.js} +6 -6
  69. package/dist/cli/commands/network/browse.js.map +1 -0
  70. package/dist/cli/commands/network/index.d.ts +3 -0
  71. package/dist/cli/commands/network/index.d.ts.map +1 -0
  72. package/dist/cli/commands/network/index.js +10 -0
  73. package/dist/cli/commands/network/index.js.map +1 -0
  74. package/dist/cli/commands/seller/emissions.d.ts +3 -0
  75. package/dist/cli/commands/seller/emissions.d.ts.map +1 -0
  76. package/dist/cli/commands/{emissions.js → seller/emissions.js} +7 -7
  77. package/dist/cli/commands/seller/emissions.js.map +1 -0
  78. package/dist/cli/commands/seller/index.d.ts +3 -0
  79. package/dist/cli/commands/seller/index.d.ts.map +1 -0
  80. package/dist/cli/commands/seller/index.js +18 -0
  81. package/dist/cli/commands/seller/index.js.map +1 -0
  82. package/dist/cli/commands/seller/register.d.ts +3 -0
  83. package/dist/cli/commands/seller/register.d.ts.map +1 -0
  84. package/dist/cli/commands/{register.js → seller/register.js} +6 -6
  85. package/dist/cli/commands/seller/register.js.map +1 -0
  86. package/dist/cli/commands/seller/setup.d.ts +12 -0
  87. package/dist/cli/commands/seller/setup.d.ts.map +1 -0
  88. package/dist/cli/commands/seller/setup.js +175 -0
  89. package/dist/cli/commands/seller/setup.js.map +1 -0
  90. package/dist/cli/commands/seller/setup.test.d.ts +2 -0
  91. package/dist/cli/commands/seller/setup.test.d.ts.map +1 -0
  92. package/dist/cli/commands/seller/setup.test.js +32 -0
  93. package/dist/cli/commands/seller/setup.test.js.map +1 -0
  94. package/dist/cli/commands/seller/stake.d.ts +3 -0
  95. package/dist/cli/commands/seller/stake.d.ts.map +1 -0
  96. package/dist/cli/commands/{stake.js → seller/stake.js} +11 -11
  97. package/dist/cli/commands/seller/stake.js.map +1 -0
  98. package/dist/cli/commands/seller/start.d.ts +44 -0
  99. package/dist/cli/commands/seller/start.d.ts.map +1 -0
  100. package/dist/cli/commands/{seed.js → seller/start.js} +241 -135
  101. package/dist/cli/commands/seller/start.js.map +1 -0
  102. package/dist/cli/commands/seller/start.test.d.ts +2 -0
  103. package/dist/cli/commands/seller/start.test.d.ts.map +1 -0
  104. package/dist/cli/commands/seller/start.test.js +212 -0
  105. package/dist/cli/commands/seller/start.test.js.map +1 -0
  106. package/dist/cli/commands/seller/status.d.ts +3 -0
  107. package/dist/cli/commands/seller/status.d.ts.map +1 -0
  108. package/dist/cli/commands/seller/status.js +72 -0
  109. package/dist/cli/commands/seller/status.js.map +1 -0
  110. package/dist/cli/commands/types.d.ts.map +1 -1
  111. package/dist/cli/commands/types.js +3 -1
  112. package/dist/cli/commands/types.js.map +1 -1
  113. package/dist/cli/commands/types.test.d.ts +2 -0
  114. package/dist/cli/commands/types.test.d.ts.map +1 -0
  115. package/dist/cli/commands/types.test.js +21 -0
  116. package/dist/cli/commands/types.test.js.map +1 -0
  117. package/dist/cli/index.js +11 -42
  118. package/dist/cli/index.js.map +1 -1
  119. package/dist/cli/payment-utils.js +1 -1
  120. package/dist/cli/payment-utils.js.map +1 -1
  121. package/dist/config/defaults.d.ts.map +1 -1
  122. package/dist/config/defaults.js +1 -8
  123. package/dist/config/defaults.js.map +1 -1
  124. package/dist/config/effective.d.ts.map +1 -1
  125. package/dist/config/effective.js +23 -4
  126. package/dist/config/effective.js.map +1 -1
  127. package/dist/config/effective.test.js +24 -5
  128. package/dist/config/effective.test.js.map +1 -1
  129. package/dist/config/loader.d.ts.map +1 -1
  130. package/dist/config/loader.js +64 -95
  131. package/dist/config/loader.js.map +1 -1
  132. package/dist/config/loader.test.js +62 -41
  133. package/dist/config/loader.test.js.map +1 -1
  134. package/dist/config/types.d.ts +35 -49
  135. package/dist/config/types.d.ts.map +1 -1
  136. package/dist/config/validation.d.ts.map +1 -1
  137. package/dist/config/validation.js +51 -35
  138. package/dist/config/validation.js.map +1 -1
  139. package/dist/plugins/loader.js +1 -1
  140. package/dist/plugins/loader.js.map +1 -1
  141. package/dist/plugins/registry.d.ts +1 -0
  142. package/dist/plugins/registry.d.ts.map +1 -1
  143. package/dist/plugins/registry.js +4 -0
  144. package/dist/plugins/registry.js.map +1 -1
  145. package/dist/proxy/buyer-proxy.d.ts +1 -1
  146. package/dist/proxy/buyer-proxy.d.ts.map +1 -1
  147. package/dist/proxy/buyer-proxy.js +5 -2
  148. package/dist/proxy/buyer-proxy.js.map +1 -1
  149. package/package.json +8 -8
  150. package/dist/cli/commands/balance.d.ts +0 -3
  151. package/dist/cli/commands/balance.d.ts.map +0 -1
  152. package/dist/cli/commands/balance.js.map +0 -1
  153. package/dist/cli/commands/bootstrap.d.ts +0 -3
  154. package/dist/cli/commands/bootstrap.d.ts.map +0 -1
  155. package/dist/cli/commands/bootstrap.js.map +0 -1
  156. package/dist/cli/commands/browse.d.ts +0 -7
  157. package/dist/cli/commands/browse.d.ts.map +0 -1
  158. package/dist/cli/commands/browse.js.map +0 -1
  159. package/dist/cli/commands/channels.d.ts +0 -3
  160. package/dist/cli/commands/channels.d.ts.map +0 -1
  161. package/dist/cli/commands/channels.js.map +0 -1
  162. package/dist/cli/commands/config.d.ts.map +0 -1
  163. package/dist/cli/commands/config.js +0 -239
  164. package/dist/cli/commands/config.js.map +0 -1
  165. package/dist/cli/commands/connect.d.ts.map +0 -1
  166. package/dist/cli/commands/connect.js.map +0 -1
  167. package/dist/cli/commands/connect.test.d.ts +0 -2
  168. package/dist/cli/commands/connect.test.d.ts.map +0 -1
  169. package/dist/cli/commands/connect.test.js.map +0 -1
  170. package/dist/cli/commands/connection.d.ts +0 -3
  171. package/dist/cli/commands/connection.d.ts.map +0 -1
  172. package/dist/cli/commands/connection.js.map +0 -1
  173. package/dist/cli/commands/deposit.d.ts +0 -3
  174. package/dist/cli/commands/deposit.d.ts.map +0 -1
  175. package/dist/cli/commands/deposit.js.map +0 -1
  176. package/dist/cli/commands/emissions.d.ts +0 -3
  177. package/dist/cli/commands/emissions.d.ts.map +0 -1
  178. package/dist/cli/commands/emissions.js.map +0 -1
  179. package/dist/cli/commands/init.d.ts +0 -3
  180. package/dist/cli/commands/init.d.ts.map +0 -1
  181. package/dist/cli/commands/init.js +0 -90
  182. package/dist/cli/commands/init.js.map +0 -1
  183. package/dist/cli/commands/metering.d.ts +0 -3
  184. package/dist/cli/commands/metering.d.ts.map +0 -1
  185. package/dist/cli/commands/metering.js.map +0 -1
  186. package/dist/cli/commands/metering.test.d.ts.map +0 -1
  187. package/dist/cli/commands/metering.test.js.map +0 -1
  188. package/dist/cli/commands/plugin-create.d.ts +0 -11
  189. package/dist/cli/commands/plugin-create.d.ts.map +0 -1
  190. package/dist/cli/commands/plugin-create.js +0 -201
  191. package/dist/cli/commands/plugin-create.js.map +0 -1
  192. package/dist/cli/commands/plugin-create.test.d.ts +0 -2
  193. package/dist/cli/commands/plugin-create.test.d.ts.map +0 -1
  194. package/dist/cli/commands/plugin-create.test.js +0 -53
  195. package/dist/cli/commands/plugin-create.test.js.map +0 -1
  196. package/dist/cli/commands/plugin.d.ts +0 -3
  197. package/dist/cli/commands/plugin.d.ts.map +0 -1
  198. package/dist/cli/commands/plugin.js +0 -279
  199. package/dist/cli/commands/plugin.js.map +0 -1
  200. package/dist/cli/commands/plugin.test.d.ts +0 -2
  201. package/dist/cli/commands/plugin.test.d.ts.map +0 -1
  202. package/dist/cli/commands/plugin.test.js +0 -54
  203. package/dist/cli/commands/plugin.test.js.map +0 -1
  204. package/dist/cli/commands/profile.d.ts.map +0 -1
  205. package/dist/cli/commands/profile.js.map +0 -1
  206. package/dist/cli/commands/register.d.ts +0 -3
  207. package/dist/cli/commands/register.d.ts.map +0 -1
  208. package/dist/cli/commands/register.js.map +0 -1
  209. package/dist/cli/commands/seed.d.ts +0 -14
  210. package/dist/cli/commands/seed.d.ts.map +0 -1
  211. package/dist/cli/commands/seed.js.map +0 -1
  212. package/dist/cli/commands/seed.test.d.ts +0 -2
  213. package/dist/cli/commands/seed.test.d.ts.map +0 -1
  214. package/dist/cli/commands/seed.test.js +0 -92
  215. package/dist/cli/commands/seed.test.js.map +0 -1
  216. package/dist/cli/commands/setup.d.ts +0 -3
  217. package/dist/cli/commands/setup.d.ts.map +0 -1
  218. package/dist/cli/commands/setup.js +0 -84
  219. package/dist/cli/commands/setup.js.map +0 -1
  220. package/dist/cli/commands/stake.d.ts +0 -3
  221. package/dist/cli/commands/stake.d.ts.map +0 -1
  222. package/dist/cli/commands/stake.js.map +0 -1
  223. package/dist/cli/commands/status.d.ts +0 -8
  224. package/dist/cli/commands/status.d.ts.map +0 -1
  225. package/dist/cli/commands/status.js +0 -55
  226. package/dist/cli/commands/status.js.map +0 -1
  227. package/dist/cli/commands/subscribe.d.ts +0 -3
  228. package/dist/cli/commands/subscribe.d.ts.map +0 -1
  229. package/dist/cli/commands/subscribe.js.map +0 -1
  230. package/dist/cli/commands/withdraw.d.ts +0 -3
  231. package/dist/cli/commands/withdraw.d.ts.map +0 -1
  232. package/dist/cli/commands/withdraw.js.map +0 -1
  233. /package/dist/cli/commands/{metering.test.d.ts → buyer/metering.test.d.ts} +0 -0
  234. /package/dist/cli/commands/{metering.test.js → buyer/metering.test.js} +0 -0
  235. /package/dist/cli/commands/{profile.d.ts → identity/profile.d.ts} +0 -0
  236. /package/dist/cli/commands/{profile.js → identity/profile.js} +0 -0
package/README.md CHANGED
@@ -9,56 +9,76 @@ Command-line interface and web dashboard for the AntSeed Network — a P2P netwo
9
9
  | Command | Description |
10
10
  |---------|-------------|
11
11
  | **Setup** | |
12
- | `antseed init` | Install trusted provider and router plugins |
13
- | `antseed setup --role <role>` | Check readiness for provider or buyer role |
14
- | `antseed register` | Register peer identity on-chain (ERC-8004) |
12
+ | `antseed seller setup` | Interactive seller onboarding |
15
13
  | **Providing** | |
16
- | `antseed seed --provider <name>` | Start providing AI services on the P2P network |
17
- | `antseed stake <amount>` | Stake USDC as a provider (min $10) |
18
- | `antseed unstake` | Withdraw staked USDC |
19
- | `antseed claim` | Claim accumulated seller payouts |
14
+ | `antseed seller start` | Start providing AI services on the P2P network |
15
+ | `antseed seller register` | Register peer identity on-chain (ERC-8004) |
16
+ | `antseed seller stake <amount>` | Stake USDC as a provider (min $10) |
17
+ | `antseed seller unstake` | Withdraw staked USDC |
18
+ | `antseed seller emissions claim` | Claim accumulated seller payouts |
20
19
  | **Buying** | |
21
- | `antseed connect --router <name>` | Start the buyer proxy and connect to sellers |
22
- | `antseed deposit <amount>` | Deposit USDC for payments |
23
- | `antseed withdraw <amount>` | Withdraw USDC from deposits |
24
- | `antseed balance` | Check wallet and deposit balance |
25
- | `antseed browse` | Browse available services and pricing |
20
+ | `antseed buyer start` | Start the buyer proxy and connect to sellers |
21
+ | `antseed buyer start --router <name>` | Start the buyer proxy with a non-default router |
22
+ | `antseed buyer deposit <amount>` | Deposit USDC for payments |
23
+ | `antseed buyer withdraw <amount>` | Withdraw USDC from deposits |
24
+ | `antseed buyer balance` | Check wallet and deposit balance |
25
+ | `antseed network browse` | Browse available services and pricing |
26
26
  | `antseed payments` | Launch the payments portal |
27
27
  | **Session** | |
28
- | `antseed connection get` | Show current session state (pinned service, peer) |
29
- | `antseed connection set` | Update service/peer overrides on a running proxy |
30
- | `antseed connection clear` | Clear service/peer overrides |
28
+ | `antseed buyer connection get` | Show current session state (pinned service, peer) |
29
+ | `antseed buyer connection set` | Update service/peer overrides on a running proxy |
30
+ | `antseed buyer connection clear` | Clear service/peer overrides |
31
31
  | **Management** | |
32
- | `antseed status` | Show current node status |
32
+ | `antseed seller status` | Show seller status |
33
+ | `antseed buyer status` | Show buyer status |
33
34
  | `antseed config` | Manage configuration |
34
- | `antseed plugin add/remove/list` | Manage plugins |
35
+ | `antseed profile` | Manage your peer profile |
36
+ | `antseed peer <peerId>` | Show a peer profile |
35
37
  | `antseed dashboard` | Start the web dashboard |
36
- | `antseed channels` | List payment channels |
37
- | `antseed emissions` | View ANTS emissions and epoch info |
38
+ | `antseed buyer channels` | List payment channels |
39
+ | `antseed seller emissions info` | View ANTS emissions and epoch info |
38
40
  | `antseed dev` | Run seller + buyer locally for testing |
39
- | `antseed bootstrap` | Run a dedicated DHT bootstrap node |
41
+ | `antseed network bootstrap` | Run a dedicated DHT bootstrap node |
42
+
43
+ ## Configuration Workflow
44
+
45
+ The normal workflow is:
46
+
47
+ 1. Create or update `~/.antseed/config.json` with `antseed seller setup` or `antseed config ...`
48
+ 2. Keep non-secret settings there: providers, services, pricing, categories, `baseUrl`, ports
49
+ 3. Keep secrets in environment variables: API keys and `ANTSEED_IDENTITY_HEX`
50
+ 4. Start later with `antseed seller start` or `antseed buyer start`
51
+
52
+ Once your config file exists, the usual seller flow is just:
53
+
54
+ ```bash
55
+ export OPENAI_API_KEY=sk-...
56
+ export ANTSEED_IDENTITY_HEX=<your-identity-key>
57
+ antseed seller start
58
+ ```
59
+
60
+ `config.json` is the durable source of truth. Env vars are for secrets and one-off overrides.
40
61
 
41
62
  ## Plugins
42
63
 
43
- Antseed uses an open plugin ecosystem. Plugins are installed into `~/.antseed/plugins/` via npm.
64
+ Antseed uses an open plugin ecosystem. Provider and router plugins are installed into `~/.antseed/plugins/` via npm.
44
65
 
45
66
  **Providers** connect your node to an upstream AI API (seeder mode):
46
67
 
47
68
  ```bash
48
- antseed plugin add @antseed/provider-anthropic # API key auth
49
- antseed plugin add @antseed/provider-claude-code # Claude Code keychain auth
50
- antseed seed --provider anthropic
69
+ antseed config seller add-provider anthropic --plugin anthropic
70
+ antseed config seller add-service anthropic claude-sonnet-4-5-20250929 \
71
+ --input 12 --output 18 --cached 6 \
72
+ --categories coding,chat
73
+ antseed seller start
51
74
  ```
52
75
 
53
76
  **Routers** select peers and proxy requests (consumer mode):
54
77
 
55
78
  ```bash
56
- antseed plugin add @antseed/router-local
57
- antseed connect --router local
79
+ antseed buyer start
58
80
  ```
59
81
 
60
- Run `antseed init` to install all trusted plugins interactively.
61
-
62
82
  ## Configuration
63
83
 
64
84
  Configuration is stored at `~/.antseed/config.json` by default. Use `-c` / `--config` to specify an alternative path.
@@ -84,12 +104,6 @@ For dashboard frontend debug logging, set:
84
104
  VITE_ANTSEED_DEBUG=1
85
105
  ```
86
106
 
87
- Initialize a new config:
88
-
89
- ```bash
90
- antseed config init
91
- ```
92
-
93
107
  Pricing is configured in USD per 1M tokens with role-specific defaults and optional provider/service overrides. You can also set node `displayName`, an optional seller `publicAddress`, and per-service category tags announced in discovery metadata:
94
108
 
95
109
  ```json
@@ -99,28 +113,26 @@ Pricing is configured in USD per 1M tokens with role-specific defaults and optio
99
113
  },
100
114
  "seller": {
101
115
  "publicAddress": "peer.example.com:6882",
102
- "pricing": {
103
- "defaults": {
104
- "inputUsdPerMillion": 10,
105
- "cachedInputUsdPerMillion": 5,
106
- "outputUsdPerMillion": 10
107
- },
108
- "providers": {
109
- "anthropic": {
110
- "services": {
111
- "claude-sonnet-4-5-20250929": {
116
+ "providers": {
117
+ "anthropic": {
118
+ "plugin": "anthropic",
119
+ "defaults": {
120
+ "inputUsdPerMillion": 10,
121
+ "outputUsdPerMillion": 10,
122
+ "cachedInputUsdPerMillion": 5
123
+ },
124
+ "services": {
125
+ "claude-sonnet-4-5-20250929": {
126
+ "upstreamModel": "claude-sonnet-4-5-20250929",
127
+ "categories": ["coding", "chat"],
128
+ "pricing": {
112
129
  "inputUsdPerMillion": 12,
113
- "cachedInputUsdPerMillion": 6,
114
- "outputUsdPerMillion": 18
130
+ "outputUsdPerMillion": 18,
131
+ "cachedInputUsdPerMillion": 6
115
132
  }
116
133
  }
117
134
  }
118
135
  }
119
- },
120
- "serviceCategories": {
121
- "anthropic": {
122
- "claude-sonnet-4-5-20250929": ["coding", "privacy"]
123
- }
124
136
  }
125
137
  },
126
138
  "buyer": {
@@ -135,7 +147,9 @@ Pricing is configured in USD per 1M tokens with role-specific defaults and optio
135
147
  }
136
148
  ```
137
149
 
138
- Service categories are normalized to lowercase tags. Recommended tags include: `privacy`, `legal`, `uncensored`, `coding`, `finance`, `tee` (custom tags are also allowed).
150
+ Service categories are normalized to lowercase tags. Recommended normie-friendly tags include: `chat`, `coding`, `math`, `study`, `creative`, `writing`, `tasks`, `fast`, `free`, `translate` (custom tags are also allowed).
151
+
152
+ The set of keys under `seller.providers.<name>.services` determines which services this peer announces on the network — there's no separate allow-list.
139
153
 
140
154
  ### Ant Agent
141
155
 
@@ -159,16 +173,21 @@ Role-first config examples:
159
173
  # Identity / metadata display name
160
174
  antseed config set identity.displayName "Acme Inference - us-east-1"
161
175
 
162
- # Seller defaults
163
- antseed config seller set pricing.defaults.inputUsdPerMillion 12
164
- antseed config seller set pricing.defaults.cachedInputUsdPerMillion 6
165
- antseed config seller set pricing.defaults.outputUsdPerMillion 36
176
+ # Add a provider and then a service
177
+ antseed config seller add-provider anthropic --plugin anthropic --input 12 --output 18
178
+ antseed config seller add-service anthropic claude-sonnet-4-5-20250929 \
179
+ --upstream "claude-sonnet-4-5-20250929" \
180
+ --input 12 --output 18 --cached 6 \
181
+ --categories coding,chat
166
182
 
167
- # Seller per-service override for a provider
168
- antseed config seller set pricing.providers.anthropic.services '{"claude-sonnet-4-5-20250929":{"inputUsdPerMillion":14,"cachedInputUsdPerMillion":7,"outputUsdPerMillion":42}}'
183
+ # Remove a service
184
+ antseed config seller remove-service anthropic claude-sonnet-4-5-20250929
169
185
 
170
- # Seller per-service category tags announced in metadata
171
- antseed config seller set serviceCategories.anthropic.claude-sonnet-4-5-20250929 '["coding","legal"]'
186
+ # Fine-grained edits to a service already in the config (auto-creates
187
+ # intermediate objects; --dynamic paths under seller.providers.* are allowed)
188
+ antseed config seller set providers.anthropic.defaults.inputUsdPerMillion 12
189
+ antseed config seller set providers.anthropic.services.claude-sonnet-4-5-20250929.pricing.outputUsdPerMillion 20
190
+ antseed config seller set providers.anthropic.services.claude-sonnet-4-5-20250929.categories '["coding","legal"]'
172
191
 
173
192
  # Seller public address override for load-balanced deployments
174
193
  antseed config seller set publicAddress "peer.example.com:6882"
@@ -182,33 +201,33 @@ antseed config buyer set maxPricing.defaults.outputUsdPerMillion 75
182
201
  Runtime-only overrides (do not write your config file):
183
202
 
184
203
  ```bash
185
- antseed seed --provider anthropic --input-usd-per-million 10 --cached-input-usd-per-million 5 --output-usd-per-million 30
186
- antseed connect --router local --max-input-usd-per-million 20 --max-cached-input-usd-per-million 10 --max-output-usd-per-million 60
204
+ antseed seller start --provider anthropic --input-usd-per-million 10 --cached-input-usd-per-million 5 --output-usd-per-million 30
205
+ antseed buyer start --max-input-usd-per-million 20 --max-cached-input-usd-per-million 10 --max-output-usd-per-million 60
187
206
  ```
188
207
 
189
208
  ### Session overrides (live, while proxy is running)
190
209
 
191
- After `antseed connect` is running, you can override the service or peer for all subsequent requests without restarting:
210
+ After `antseed buyer start` is running, you can override the service or peer for all subsequent requests without restarting:
192
211
 
193
212
  ```bash
194
213
  # Pin all requests to a specific service (overrides whatever the tool sends)
195
- antseed connection set --service claude-opus-4-6
214
+ antseed buyer connection set --service claude-opus-4-6
196
215
 
197
216
  # Pin all requests to a specific peer (bypasses router for peer selection)
198
- antseed connection set --peer <40-char-hex-peer-id>
217
+ antseed buyer connection set --peer <40-char-hex-peer-id>
199
218
 
200
219
  # Combine both in one command
201
- antseed connection set --service claude-sonnet-4-6 --peer <peer-id>
220
+ antseed buyer connection set --service claude-sonnet-4-6 --peer <peer-id>
202
221
 
203
222
  # Check current session state
204
- antseed connection get
223
+ antseed buyer connection get
205
224
 
206
225
  # Clear individual overrides
207
- antseed connection clear --service
208
- antseed connection clear --peer
226
+ antseed buyer connection clear --service
227
+ antseed buyer connection clear --peer
209
228
 
210
229
  # Clear all overrides at once
211
- antseed connection clear
230
+ antseed buyer connection clear
212
231
  ```
213
232
 
214
233
  Session overrides are stored in `~/.antseed/buyer.state.json` and picked up by the running proxy immediately via file-watching. The desktop app reads and writes the same file to expose service/peer selection in its UI.
@@ -228,16 +247,13 @@ export ANTSEED_IDENTITY_HEX=<your-private-key-hex>
228
247
  # 2. Fund your wallet with ETH (for gas) and USDC (for staking) on Base Mainnet
229
248
 
230
249
  # 3. Register your identity on-chain
231
- antseed register
250
+ antseed seller register
232
251
 
233
252
  # 4. Stake USDC (minimum $10)
234
- antseed stake 10
235
-
236
- # 5. Check readiness
237
- antseed setup --role provider
253
+ antseed seller stake 10
238
254
 
239
255
  # 6. Start providing
240
- antseed seed --provider openai
256
+ antseed seller start
241
257
  ```
242
258
 
243
259
  ### Buyer Setup (Consuming)
@@ -255,7 +271,7 @@ antseed payments
255
271
  # connected wallet and credits your node — the identity key never holds funds.
256
272
 
257
273
  # 4. Connect to the network
258
- antseed connect --router local
274
+ antseed buyer start
259
275
  # Proxy listening on http://localhost:8377
260
276
  ```
261
277
 
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBuyerBalanceCommand(buyerCmd: Command): void;
3
+ //# sourceMappingURL=balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAwDnE"}
@@ -1,22 +1,21 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
- import { getGlobalOptions } from './types.js';
4
- import { loadConfig } from '../../config/loader.js';
3
+ import { getGlobalOptions } from '../types.js';
4
+ import { loadConfig } from '../../../config/loader.js';
5
5
  import { loadOrCreateIdentity, DepositsClient, resolveChainConfig, } from '@antseed/node';
6
- /** Format USDC base units (6 decimals) to human-readable string. */
7
6
  function formatUsdc(baseUnits) {
8
7
  const whole = baseUnits / 1000000n;
9
8
  const frac = baseUnits % 1000000n;
10
9
  const fracStr = frac.toString().padStart(6, '0').replace(/0+$/, '') || '0';
11
10
  return `${whole}.${fracStr}`;
12
11
  }
13
- export function registerBalanceCommand(program) {
14
- program
12
+ export function registerBuyerBalanceCommand(buyerCmd) {
13
+ buyerCmd
15
14
  .command('balance')
16
15
  .description('Show deposits balance for your wallet')
17
16
  .option('--json', 'output as JSON', false)
18
17
  .action(async (options) => {
19
- const globalOpts = getGlobalOptions(program);
18
+ const globalOpts = getGlobalOptions(buyerCmd);
20
19
  const config = await loadConfig(globalOpts.config);
21
20
  const payments = config.payments;
22
21
  const chainConfig = resolveChainConfig({
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/balance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBuyerChannelsCommand(buyerCmd: Command): void;
3
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/channels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAyDpE"}
@@ -1,7 +1,6 @@
1
1
  import chalk from 'chalk';
2
- import { getGlobalOptions } from './types.js';
3
- import { openChannelStore } from '../payment-utils.js';
4
- /** Abbreviate a session/peer ID to a short form. */
2
+ import { getGlobalOptions } from '../types.js';
3
+ import { openChannelStore } from '../../payment-utils.js';
5
4
  function short(id, len = 10) {
6
5
  return id.length > len ? id.slice(0, len) + '...' : id;
7
6
  }
@@ -14,8 +13,8 @@ function statusColor(status) {
14
13
  default: return status;
15
14
  }
16
15
  }
17
- export function registerChannelsCommand(program) {
18
- program
16
+ export function registerBuyerChannelsCommand(buyerCmd) {
17
+ buyerCmd
19
18
  .command('channels')
20
19
  .description('List payment channels from local store')
21
20
  .option('--status <status>', 'filter by status: active, settled, timeout, ghost')
@@ -23,7 +22,7 @@ export function registerChannelsCommand(program) {
23
22
  .option('--limit <number>', 'max number of channels to show', '20')
24
23
  .option('--json', 'output as JSON', false)
25
24
  .action(async (options) => {
26
- const globalOpts = getGlobalOptions(program);
25
+ const globalOpts = getGlobalOptions(buyerCmd);
27
26
  let store;
28
27
  try {
29
28
  store = openChannelStore(globalOpts.dataDir);
@@ -34,22 +33,15 @@ export function registerChannelsCommand(program) {
34
33
  process.exit(1);
35
34
  }
36
35
  try {
37
- // Query channels — ChannelStore doesn't have a generic list method,
38
- // so we use the DB directly via the available methods.
39
- // For now, we read from the active/timeout channels.
40
36
  const limit = parseInt(options.limit, 10) || 20;
41
37
  const statusFilter = options.status;
42
38
  const roleFilter = options.role;
43
39
  const allSessions = store.listAllChannels(limit * 2);
44
- // Apply filters
45
40
  let filtered = allSessions;
46
- if (statusFilter) {
47
- filtered = filtered.filter(s => s.status === statusFilter);
48
- }
49
- if (roleFilter) {
50
- filtered = filtered.filter(s => s.role === roleFilter);
51
- }
52
- // Sort by most recent first
41
+ if (statusFilter)
42
+ filtered = filtered.filter((session) => session.status === statusFilter);
43
+ if (roleFilter)
44
+ filtered = filtered.filter((session) => session.role === roleFilter);
53
45
  filtered.sort((a, b) => b.updatedAt - a.updatedAt);
54
46
  const limited = filtered.slice(0, limit);
55
47
  if (options.json) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBuyerConnectionCommand(buyerCmd: Command): void;
3
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6DxC,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAoFtE"}
@@ -37,17 +37,17 @@ function isProcessAlive(pid) {
37
37
  async function requireRunningBuyer() {
38
38
  const state = await readStateFile();
39
39
  if (!state) {
40
- console.error(chalk.red('No buyer connection found. Run `antseed connect` first.'));
40
+ console.error(chalk.red('No buyer connection found. Run `antseed buyer start` first.'));
41
41
  process.exit(1);
42
42
  }
43
43
  if (state.state !== 'connected' || !isProcessAlive(state.pid)) {
44
- console.error(chalk.red('Buyer proxy is not running. Run `antseed connect` first.'));
44
+ console.error(chalk.red('Buyer proxy is not running. Run `antseed buyer start` first.'));
45
45
  process.exit(1);
46
46
  }
47
47
  return state;
48
48
  }
49
- export function registerConnectionCommand(program) {
50
- const connection = program
49
+ export function registerBuyerConnectionCommand(buyerCmd) {
50
+ const connection = buyerCmd
51
51
  .command('connection')
52
52
  .description('Manage the active buyer connection session');
53
53
  connection
@@ -56,7 +56,7 @@ export function registerConnectionCommand(program) {
56
56
  .action(async () => {
57
57
  const state = await readStateFile();
58
58
  if (!state) {
59
- console.log(chalk.yellow('No buyer connection state found. Run `antseed connect` first.'));
59
+ console.log(chalk.yellow('No buyer connection state found. Run `antseed buyer start` first.'));
60
60
  return;
61
61
  }
62
62
  const alive = state.state === 'connected' && isProcessAlive(state.pid);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBuyerDepositCommand(buyerCmd: Command): void;
3
+ //# sourceMappingURL=deposit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposit.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/deposit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAkCnE"}
@@ -1,14 +1,14 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
- import { getGlobalOptions } from './types.js';
4
- import { loadConfig } from '../../config/loader.js';
5
- import { createDepositsClient, loadCryptoContext, parseUsdcToBaseUnits, } from '../payment-utils.js';
6
- export function registerDepositCommand(program) {
7
- program
3
+ import { getGlobalOptions } from '../types.js';
4
+ import { loadConfig } from '../../../config/loader.js';
5
+ import { createDepositsClient, loadCryptoContext, parseUsdcToBaseUnits, } from '../../payment-utils.js';
6
+ export function registerBuyerDepositCommand(buyerCmd) {
7
+ buyerCmd
8
8
  .command('deposit <amount>')
9
9
  .description('Deposit USDC into the deposits contract (amount in human-readable USDC, e.g. "5" = 5 USDC)')
10
10
  .action(async (amount) => {
11
- const globalOpts = getGlobalOptions(program);
11
+ const globalOpts = getGlobalOptions(buyerCmd);
12
12
  const config = await loadConfig(globalOpts.config);
13
13
  let amountBaseUnits;
14
14
  try {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/deposit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,UAAU,2BAA2B,CAAC,QAAiB;IAC3D,QAAQ;SACL,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,4FAA4F,CAAC;SACzG,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC/B,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,eAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEpD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,WAAW,UAAU,eAAe,cAAc,CAAC,CAAC,CAAC;QAEtF,MAAM,OAAO,GAAG,GAAG,CAAC,2CAA2C,CAAC,CAAC,KAAK,EAAE,CAAC;QAEzE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAC9E,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,WAAW,8BAA8B,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBuyerCommands(program: Command): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc5D"}
@@ -0,0 +1,24 @@
1
+ import { registerBuyerStartCommand } from './start.js';
2
+ import { registerBuyerStatusCommand } from './status.js';
3
+ import { registerBuyerDepositCommand } from './deposit.js';
4
+ import { registerBuyerWithdrawCommand } from './withdraw.js';
5
+ import { registerBuyerBalanceCommand } from './balance.js';
6
+ import { registerBuyerSubscribeCommand } from './subscribe.js';
7
+ import { registerBuyerConnectionCommand } from './connection.js';
8
+ import { registerBuyerChannelsCommand } from './channels.js';
9
+ import { registerBuyerMeteringCommand } from './metering.js';
10
+ export function registerBuyerCommands(program) {
11
+ const buyerCmd = program
12
+ .command('buyer')
13
+ .description('Buyer commands — connect to sellers and manage payments');
14
+ registerBuyerStartCommand(buyerCmd);
15
+ registerBuyerStatusCommand(buyerCmd);
16
+ registerBuyerDepositCommand(buyerCmd);
17
+ registerBuyerWithdrawCommand(buyerCmd);
18
+ registerBuyerBalanceCommand(buyerCmd);
19
+ registerBuyerSubscribeCommand(buyerCmd);
20
+ registerBuyerConnectionCommand(buyerCmd);
21
+ registerBuyerChannelsCommand(buyerCmd);
22
+ registerBuyerMeteringCommand(buyerCmd);
23
+ }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1E,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACrC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACxC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACzC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBuyerMeteringCommand(buyerCmd: Command): void;
3
+ //# sourceMappingURL=metering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/metering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAoFpE"}
@@ -1,8 +1,7 @@
1
1
  import chalk from 'chalk';
2
- import { getGlobalOptions } from './types.js';
2
+ import { getGlobalOptions } from '../types.js';
3
3
  import { loadOrCreateIdentity } from '@antseed/node';
4
- import { openChannelStore } from '../payment-utils.js';
5
- /** Format USDC base units (6 decimals) to human-readable string. */
4
+ import { openChannelStore } from '../../payment-utils.js';
6
5
  function formatUsdc(baseUnits) {
7
6
  const n = BigInt(baseUnits);
8
7
  const abs = n < 0n ? -n : n;
@@ -12,14 +11,14 @@ function formatUsdc(baseUnits) {
12
11
  const fracStr = frac.toString().padStart(6, '0').replace(/0+$/, '') || '0';
13
12
  return `${sign}${whole}.${fracStr}`;
14
13
  }
15
- export function registerMeteringCommand(program) {
16
- program
14
+ export function registerBuyerMeteringCommand(buyerCmd) {
15
+ buyerCmd
17
16
  .command('metering')
18
17
  .description('Show payment channel and usage stats from local database')
19
18
  .option('--peer <peerId>', 'show stats for a specific peer')
20
19
  .option('--json', 'output as JSON', false)
21
20
  .action(async (options) => {
22
- const globalOpts = getGlobalOptions(program);
21
+ const globalOpts = getGlobalOptions(buyerCmd);
23
22
  try {
24
23
  const identity = await loadOrCreateIdentity(globalOpts.dataDir);
25
24
  const buyerAddress = identity.wallet.address;
@@ -27,10 +26,9 @@ export function registerMeteringCommand(program) {
27
26
  try {
28
27
  const activeChannels = store.getActiveChannels('buyer');
29
28
  const channels = options.peer
30
- ? activeChannels.filter((c) => c.peerId === options.peer)
29
+ ? activeChannels.filter((channel) => channel.peerId === options.peer)
31
30
  : activeChannels;
32
31
  if (channels.length === 0) {
33
- // Show settled channels if no active ones
34
32
  const allChannels = options.peer
35
33
  ? [store.getLatestChannelByPeerAndBuyer(options.peer, 'buyer', buyerAddress)].filter(Boolean)
36
34
  : [];
@@ -40,10 +38,9 @@ export function registerMeteringCommand(program) {
40
38
  }
41
39
  }
42
40
  const results = {};
43
- // Collect unique peers (active + specific peer)
44
41
  const peerIds = options.peer
45
42
  ? [options.peer]
46
- : [...new Set(activeChannels.map((c) => c.peerId))];
43
+ : [...new Set(activeChannels.map((channel) => channel.peerId))];
47
44
  for (const peerId of peerIds) {
48
45
  const channel = store.getActiveChannelByPeerAndBuyer(peerId, 'buyer', buyerAddress)
49
46
  ?? store.getLatestChannelByPeerAndBuyer(peerId, 'buyer', buyerAddress);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/metering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/metering.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering.test.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/metering.test.ts"],"names":[],"mappings":"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"}