@antseed/cli 0.1.0

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 (179) hide show
  1. package/.env.example +15 -0
  2. package/README.md +169 -0
  3. package/dist/cli/commands/balance.d.ts +3 -0
  4. package/dist/cli/commands/balance.d.ts.map +1 -0
  5. package/dist/cli/commands/balance.js +64 -0
  6. package/dist/cli/commands/balance.js.map +1 -0
  7. package/dist/cli/commands/browse.d.ts +7 -0
  8. package/dist/cli/commands/browse.d.ts.map +1 -0
  9. package/dist/cli/commands/browse.js +100 -0
  10. package/dist/cli/commands/browse.js.map +1 -0
  11. package/dist/cli/commands/config.d.ts +20 -0
  12. package/dist/cli/commands/config.d.ts.map +1 -0
  13. package/dist/cli/commands/config.js +239 -0
  14. package/dist/cli/commands/config.js.map +1 -0
  15. package/dist/cli/commands/connect.d.ts +14 -0
  16. package/dist/cli/commands/connect.d.ts.map +1 -0
  17. package/dist/cli/commands/connect.js +298 -0
  18. package/dist/cli/commands/connect.js.map +1 -0
  19. package/dist/cli/commands/connect.test.d.ts +2 -0
  20. package/dist/cli/commands/connect.test.d.ts.map +1 -0
  21. package/dist/cli/commands/connect.test.js +54 -0
  22. package/dist/cli/commands/connect.test.js.map +1 -0
  23. package/dist/cli/commands/dashboard.d.ts +6 -0
  24. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  25. package/dist/cli/commands/dashboard.js +48 -0
  26. package/dist/cli/commands/dashboard.js.map +1 -0
  27. package/dist/cli/commands/deposit.d.ts +3 -0
  28. package/dist/cli/commands/deposit.d.ts.map +1 -0
  29. package/dist/cli/commands/deposit.js +48 -0
  30. package/dist/cli/commands/deposit.js.map +1 -0
  31. package/dist/cli/commands/dev.d.ts +3 -0
  32. package/dist/cli/commands/dev.d.ts.map +1 -0
  33. package/dist/cli/commands/dev.js +94 -0
  34. package/dist/cli/commands/dev.js.map +1 -0
  35. package/dist/cli/commands/init.d.ts +3 -0
  36. package/dist/cli/commands/init.d.ts.map +1 -0
  37. package/dist/cli/commands/init.js +91 -0
  38. package/dist/cli/commands/init.js.map +1 -0
  39. package/dist/cli/commands/plugin-create.d.ts +11 -0
  40. package/dist/cli/commands/plugin-create.d.ts.map +1 -0
  41. package/dist/cli/commands/plugin-create.js +201 -0
  42. package/dist/cli/commands/plugin-create.js.map +1 -0
  43. package/dist/cli/commands/plugin-create.test.d.ts +2 -0
  44. package/dist/cli/commands/plugin-create.test.d.ts.map +1 -0
  45. package/dist/cli/commands/plugin-create.test.js +53 -0
  46. package/dist/cli/commands/plugin-create.test.js.map +1 -0
  47. package/dist/cli/commands/plugin.d.ts +3 -0
  48. package/dist/cli/commands/plugin.d.ts.map +1 -0
  49. package/dist/cli/commands/plugin.js +279 -0
  50. package/dist/cli/commands/plugin.js.map +1 -0
  51. package/dist/cli/commands/plugin.test.d.ts +2 -0
  52. package/dist/cli/commands/plugin.test.d.ts.map +1 -0
  53. package/dist/cli/commands/plugin.test.js +53 -0
  54. package/dist/cli/commands/plugin.test.js.map +1 -0
  55. package/dist/cli/commands/profile.d.ts +10 -0
  56. package/dist/cli/commands/profile.d.ts.map +1 -0
  57. package/dist/cli/commands/profile.js +89 -0
  58. package/dist/cli/commands/profile.js.map +1 -0
  59. package/dist/cli/commands/seed.d.ts +11 -0
  60. package/dist/cli/commands/seed.d.ts.map +1 -0
  61. package/dist/cli/commands/seed.js +397 -0
  62. package/dist/cli/commands/seed.js.map +1 -0
  63. package/dist/cli/commands/seed.test.d.ts +2 -0
  64. package/dist/cli/commands/seed.test.d.ts.map +1 -0
  65. package/dist/cli/commands/seed.test.js +57 -0
  66. package/dist/cli/commands/seed.test.js.map +1 -0
  67. package/dist/cli/commands/status.d.ts +8 -0
  68. package/dist/cli/commands/status.d.ts.map +1 -0
  69. package/dist/cli/commands/status.js +55 -0
  70. package/dist/cli/commands/status.js.map +1 -0
  71. package/dist/cli/commands/types.d.ts +14 -0
  72. package/dist/cli/commands/types.d.ts.map +1 -0
  73. package/dist/cli/commands/types.js +41 -0
  74. package/dist/cli/commands/types.js.map +1 -0
  75. package/dist/cli/commands/withdraw.d.ts +3 -0
  76. package/dist/cli/commands/withdraw.d.ts.map +1 -0
  77. package/dist/cli/commands/withdraw.js +48 -0
  78. package/dist/cli/commands/withdraw.js.map +1 -0
  79. package/dist/cli/formatters.d.ts +29 -0
  80. package/dist/cli/formatters.d.ts.map +1 -0
  81. package/dist/cli/formatters.js +67 -0
  82. package/dist/cli/formatters.js.map +1 -0
  83. package/dist/cli/index.d.ts +3 -0
  84. package/dist/cli/index.d.ts.map +1 -0
  85. package/dist/cli/index.js +41 -0
  86. package/dist/cli/index.js.map +1 -0
  87. package/dist/cli/shutdown.d.ts +11 -0
  88. package/dist/cli/shutdown.d.ts.map +1 -0
  89. package/dist/cli/shutdown.js +34 -0
  90. package/dist/cli/shutdown.js.map +1 -0
  91. package/dist/config/defaults.d.ts +6 -0
  92. package/dist/config/defaults.d.ts.map +1 -0
  93. package/dist/config/defaults.js +48 -0
  94. package/dist/config/defaults.js.map +1 -0
  95. package/dist/config/effective.d.ts +26 -0
  96. package/dist/config/effective.d.ts.map +1 -0
  97. package/dist/config/effective.js +84 -0
  98. package/dist/config/effective.js.map +1 -0
  99. package/dist/config/effective.test.d.ts +2 -0
  100. package/dist/config/effective.test.d.ts.map +1 -0
  101. package/dist/config/effective.test.js +65 -0
  102. package/dist/config/effective.test.js.map +1 -0
  103. package/dist/config/loader.d.ts +12 -0
  104. package/dist/config/loader.d.ts.map +1 -0
  105. package/dist/config/loader.js +212 -0
  106. package/dist/config/loader.js.map +1 -0
  107. package/dist/config/loader.test.d.ts +2 -0
  108. package/dist/config/loader.test.d.ts.map +1 -0
  109. package/dist/config/loader.test.js +77 -0
  110. package/dist/config/loader.test.js.map +1 -0
  111. package/dist/config/types.d.ts +133 -0
  112. package/dist/config/types.d.ts.map +1 -0
  113. package/dist/config/types.js +2 -0
  114. package/dist/config/types.js.map +1 -0
  115. package/dist/config/validation.d.ts +10 -0
  116. package/dist/config/validation.d.ts.map +1 -0
  117. package/dist/config/validation.js +50 -0
  118. package/dist/config/validation.js.map +1 -0
  119. package/dist/env/load-env.d.ts +6 -0
  120. package/dist/env/load-env.d.ts.map +1 -0
  121. package/dist/env/load-env.js +18 -0
  122. package/dist/env/load-env.js.map +1 -0
  123. package/dist/plugins/loader.d.ts +7 -0
  124. package/dist/plugins/loader.d.ts.map +1 -0
  125. package/dist/plugins/loader.js +70 -0
  126. package/dist/plugins/loader.js.map +1 -0
  127. package/dist/plugins/manager.d.ts +11 -0
  128. package/dist/plugins/manager.d.ts.map +1 -0
  129. package/dist/plugins/manager.js +52 -0
  130. package/dist/plugins/manager.js.map +1 -0
  131. package/dist/plugins/registry.d.ts +8 -0
  132. package/dist/plugins/registry.d.ts.map +1 -0
  133. package/dist/plugins/registry.js +39 -0
  134. package/dist/plugins/registry.js.map +1 -0
  135. package/dist/proxy/buyer-proxy.d.ts +30 -0
  136. package/dist/proxy/buyer-proxy.d.ts.map +1 -0
  137. package/dist/proxy/buyer-proxy.js +488 -0
  138. package/dist/proxy/buyer-proxy.js.map +1 -0
  139. package/dist/status/node-status.d.ts +22 -0
  140. package/dist/status/node-status.d.ts.map +1 -0
  141. package/dist/status/node-status.js +83 -0
  142. package/dist/status/node-status.js.map +1 -0
  143. package/package.json +39 -0
  144. package/src/cli/commands/balance.ts +77 -0
  145. package/src/cli/commands/browse.ts +113 -0
  146. package/src/cli/commands/config.ts +271 -0
  147. package/src/cli/commands/connect.test.ts +69 -0
  148. package/src/cli/commands/connect.ts +342 -0
  149. package/src/cli/commands/dashboard.ts +59 -0
  150. package/src/cli/commands/deposit.ts +61 -0
  151. package/src/cli/commands/dev.ts +107 -0
  152. package/src/cli/commands/init.ts +99 -0
  153. package/src/cli/commands/plugin-create.test.ts +60 -0
  154. package/src/cli/commands/plugin-create.ts +230 -0
  155. package/src/cli/commands/plugin.test.ts +55 -0
  156. package/src/cli/commands/plugin.ts +295 -0
  157. package/src/cli/commands/profile.ts +95 -0
  158. package/src/cli/commands/seed.test.ts +70 -0
  159. package/src/cli/commands/seed.ts +447 -0
  160. package/src/cli/commands/status.ts +73 -0
  161. package/src/cli/commands/types.ts +56 -0
  162. package/src/cli/commands/withdraw.ts +61 -0
  163. package/src/cli/formatters.ts +64 -0
  164. package/src/cli/index.ts +46 -0
  165. package/src/cli/shutdown.ts +38 -0
  166. package/src/config/defaults.ts +49 -0
  167. package/src/config/effective.test.ts +80 -0
  168. package/src/config/effective.ts +119 -0
  169. package/src/config/loader.test.ts +95 -0
  170. package/src/config/loader.ts +251 -0
  171. package/src/config/types.ts +139 -0
  172. package/src/config/validation.ts +78 -0
  173. package/src/env/load-env.ts +20 -0
  174. package/src/plugins/loader.ts +96 -0
  175. package/src/plugins/manager.ts +66 -0
  176. package/src/plugins/registry.ts +45 -0
  177. package/src/proxy/buyer-proxy.ts +604 -0
  178. package/src/status/node-status.ts +105 -0
  179. package/tsconfig.json +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buyer-proxy.js","sourceRoot":"","sources":["../../src/proxy/buyer-proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { AntseedConfig } from '../config/types.js';
2
+ export interface NodeStatus {
3
+ state: 'seeding' | 'connected' | 'idle';
4
+ peerCount: number;
5
+ earningsToday: string;
6
+ tokensToday: number;
7
+ activeSessions: number;
8
+ uptime: string;
9
+ walletAddress: string | null;
10
+ proxyPort: number | null;
11
+ capacityUsedPercent: number;
12
+ daemonPid: number | null;
13
+ daemonAlive: boolean;
14
+ }
15
+ /**
16
+ * Query the current node status.
17
+ * Reads from the running daemon's state file at ~/.antseed/daemon.state.json.
18
+ * Uses PID-based liveness check first, falls back to 30s stale threshold.
19
+ * Returns idle state with zeroed metrics if no daemon is running or the state file is stale.
20
+ */
21
+ export declare function getNodeStatus(config: AntseedConfig): Promise<NodeStatus>;
22
+ //# sourceMappingURL=node-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-status.d.ts","sourceRoot":"","sources":["../../src/status/node-status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACtB;AAkBD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CA+C9E"}
@@ -0,0 +1,83 @@
1
+ import { readFile, stat } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ /** Stale threshold: 30 seconds */
5
+ const STALE_THRESHOLD_MS = 30_000;
6
+ /**
7
+ * Check if a process with the given PID is alive.
8
+ * Uses `process.kill(pid, 0)` which checks existence without sending a signal.
9
+ */
10
+ function isProcessAlive(pid) {
11
+ try {
12
+ process.kill(pid, 0);
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ /**
20
+ * Query the current node status.
21
+ * Reads from the running daemon's state file at ~/.antseed/daemon.state.json.
22
+ * Uses PID-based liveness check first, falls back to 30s stale threshold.
23
+ * Returns idle state with zeroed metrics if no daemon is running or the state file is stale.
24
+ */
25
+ export async function getNodeStatus(config) {
26
+ const stateFilePath = join(homedir(), '.antseed', 'daemon.state.json');
27
+ try {
28
+ const raw = await readFile(stateFilePath, 'utf-8');
29
+ const state = JSON.parse(raw);
30
+ // PID-based liveness check
31
+ const pid = typeof state.pid === 'number' ? state.pid : null;
32
+ const alive = pid !== null && isProcessAlive(pid);
33
+ // If PID is present and process is dead, return idle immediately
34
+ if (pid !== null && !alive) {
35
+ return idleStatus(config, pid);
36
+ }
37
+ // Fallback: if no PID in state file, use stale threshold
38
+ if (pid === null) {
39
+ const fileStat = await stat(stateFilePath);
40
+ const ageMs = Date.now() - fileStat.mtimeMs;
41
+ if (ageMs > STALE_THRESHOLD_MS) {
42
+ return idleStatus(config, null);
43
+ }
44
+ }
45
+ const validStates = ['seeding', 'connected', 'idle'];
46
+ const rawState = typeof state.state === 'string' && validStates.includes(state.state)
47
+ ? state.state
48
+ : 'idle';
49
+ return {
50
+ state: rawState,
51
+ peerCount: typeof state.peerCount === 'number' ? state.peerCount : 0,
52
+ earningsToday: typeof state.earningsToday === 'string' ? state.earningsToday : '0',
53
+ tokensToday: typeof state.tokensToday === 'number' ? state.tokensToday : 0,
54
+ activeSessions: typeof state.activeSessions === 'number' ? state.activeSessions : 0,
55
+ uptime: typeof state.uptime === 'string' ? state.uptime : '0s',
56
+ walletAddress: typeof state.walletAddress === 'string' ? state.walletAddress : (config.identity.walletAddress ?? null),
57
+ proxyPort: typeof state.proxyPort === 'number' ? state.proxyPort : null,
58
+ capacityUsedPercent: typeof state.capacityUsedPercent === 'number' ? state.capacityUsedPercent : 0,
59
+ daemonPid: pid,
60
+ daemonAlive: alive,
61
+ };
62
+ }
63
+ catch {
64
+ // State file doesn't exist or is unreadable — daemon is not running
65
+ return idleStatus(config, null);
66
+ }
67
+ }
68
+ function idleStatus(config, pid) {
69
+ return {
70
+ state: 'idle',
71
+ peerCount: 0,
72
+ earningsToday: '0',
73
+ tokensToday: 0,
74
+ activeSessions: 0,
75
+ uptime: '0s',
76
+ walletAddress: config.identity.walletAddress ?? null,
77
+ proxyPort: null,
78
+ capacityUsedPercent: 0,
79
+ daemonPid: pid,
80
+ daemonAlive: false,
81
+ };
82
+ }
83
+ //# sourceMappingURL=node-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-status.js","sourceRoot":"","sources":["../../src/status/node-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAiBlC,kCAAkC;AAClC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;;GAGG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAqB;IACvD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAEzD,2BAA2B;QAC3B,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,MAAM,KAAK,GAAG,GAAG,KAAK,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;QAElD,iEAAiE;QACjE,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,yDAAyD;QACzD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC5C,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;gBAC/B,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;QAC9D,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,KAA4B,CAAC;YAC1G,CAAC,CAAE,KAAK,CAAC,KAA6B;YACtC,CAAC,CAAC,MAAM,CAAC;QAEX,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACpE,aAAa,EAAE,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG;YAClF,WAAW,EAAE,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC1E,cAAc,EAAE,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACnF,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YAC9D,aAAa,EAAE,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC;YACtH,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YACvE,mBAAmB,EAAE,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAClG,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;QACpE,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAqB,EAAE,GAAkB;IAC3D,OAAO;QACL,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,CAAC;QACZ,aAAa,EAAE,GAAG;QAClB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;QACjB,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI;QACpD,SAAS,EAAE,IAAI;QACf,mBAAmB,EAAE,CAAC;QACtB,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,KAAK;KACnB,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@antseed/cli",
3
+ "version": "0.1.0",
4
+ "description": "Antseed Network CLI and Web Dashboard",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=20.0.0"
8
+ },
9
+ "bin": {
10
+ "antseed": "./dist/cli/index.js"
11
+ },
12
+ "scripts": {
13
+ "prebuild": "rm -rf dist",
14
+ "build": "tsc",
15
+ "postbuild": "chmod +x dist/cli/index.js",
16
+ "prepack": "npm run build",
17
+ "dev": "tsx watch src/cli/index.ts",
18
+ "start:seed": "node dist/cli/index.js seed",
19
+ "start:connect": "node dist/cli/index.js connect",
20
+ "start:dashboard": "node dist/cli/index.js dashboard",
21
+ "typecheck": "tsc --noEmit",
22
+ "test": "npm run build && node --test dist/config/*.test.js dist/cli/commands/*.test.js"
23
+ },
24
+ "dependencies": {
25
+ "@antseed/node": "workspace:*",
26
+ "antseed-dashboard": "workspace:*",
27
+ "chalk": "^5.6.2",
28
+ "cli-table3": "^0.6.5",
29
+ "commander": "^14.0.3",
30
+ "dotenv": "^16.6.1",
31
+ "open": "^11.0.0",
32
+ "ora": "^9.3.0"
33
+ },
34
+ "devDependencies": {
35
+ "@types/node": "^20.11.0",
36
+ "tsx": "^4.7.0",
37
+ "typescript": "^5.3.0"
38
+ }
39
+ }
@@ -0,0 +1,77 @@
1
+ import type { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { getGlobalOptions } from './types.js';
5
+ import { loadConfig } from '../../config/loader.js';
6
+ import {
7
+ loadOrCreateIdentity,
8
+ BaseEscrowClient,
9
+ identityToEvmAddress,
10
+ } from '@antseed/node';
11
+
12
+ /** Format USDC base units (6 decimals) to human-readable string. */
13
+ function formatUsdc(baseUnits: bigint): string {
14
+ const whole = baseUnits / 1_000_000n;
15
+ const frac = baseUnits % 1_000_000n;
16
+ const fracStr = frac.toString().padStart(6, '0').replace(/0+$/, '') || '0';
17
+ return `${whole}.${fracStr}`;
18
+ }
19
+
20
+ export function registerBalanceCommand(program: Command): void {
21
+ program
22
+ .command('balance')
23
+ .description('Show escrow balance for your wallet')
24
+ .option('--json', 'output as JSON', false)
25
+ .action(async (options) => {
26
+ const globalOpts = getGlobalOptions(program);
27
+ const config = await loadConfig(globalOpts.config);
28
+
29
+ const payments = config.payments;
30
+ if (!payments?.crypto) {
31
+ console.error(chalk.red('Error: No crypto payment configuration found.'));
32
+ console.error(chalk.dim('Configure payments.crypto in your config file or run: antseed init'));
33
+ process.exit(1);
34
+ }
35
+
36
+ const identity = await loadOrCreateIdentity(globalOpts.dataDir);
37
+ const address = identityToEvmAddress(identity);
38
+
39
+ const escrowClient = new BaseEscrowClient({
40
+ rpcUrl: payments.crypto.rpcUrl,
41
+ contractAddress: payments.crypto.escrowContractAddress,
42
+ usdcAddress: payments.crypto.usdcContractAddress,
43
+ });
44
+
45
+ const spinner = ora('Fetching balance...').start();
46
+
47
+ try {
48
+ const account = await escrowClient.getBuyerAccount(address);
49
+ const usdcBalance = await escrowClient.getUSDCBalance(address);
50
+
51
+ spinner.stop();
52
+
53
+ if (options.json) {
54
+ console.log(JSON.stringify({
55
+ address,
56
+ walletUSDC: formatUsdc(usdcBalance),
57
+ escrowDeposited: formatUsdc(account.deposited),
58
+ escrowCommitted: formatUsdc(account.committed),
59
+ escrowAvailable: formatUsdc(account.available),
60
+ }, null, 2));
61
+ return;
62
+ }
63
+
64
+ console.log(chalk.bold('Wallet: ') + chalk.cyan(address));
65
+ console.log('');
66
+ console.log(chalk.bold('USDC Balance (wallet): ') + chalk.green(formatUsdc(usdcBalance) + ' USDC'));
67
+ console.log('');
68
+ console.log(chalk.bold('Escrow Account:'));
69
+ console.log(` Deposited: ${chalk.green(formatUsdc(account.deposited) + ' USDC')}`);
70
+ console.log(` Committed: ${chalk.yellow(formatUsdc(account.committed) + ' USDC')}`);
71
+ console.log(` Available: ${chalk.green(formatUsdc(account.available) + ' USDC')}`);
72
+ } catch (err) {
73
+ spinner.fail(chalk.red(`Failed to fetch balance: ${(err as Error).message}`));
74
+ process.exit(1);
75
+ }
76
+ });
77
+ }
@@ -0,0 +1,113 @@
1
+ import type { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import Table from 'cli-table3';
5
+ import { getGlobalOptions } from './types.js';
6
+ import { loadConfig } from '../../config/loader.js';
7
+ import { AntseedNode } from '@antseed/node';
8
+ import { parseBootstrapList, toBootstrapConfig } from '@antseed/node/discovery';
9
+
10
+ function getReputationColor(reputation: number): (message: string) => string {
11
+ if (reputation >= 80) {
12
+ return chalk.green;
13
+ }
14
+ if (reputation >= 50) {
15
+ return chalk.yellow;
16
+ }
17
+ return chalk.red;
18
+ }
19
+
20
+ /**
21
+ * Register the `antseed browse` command on the Commander program.
22
+ * Discovers peers on the network and displays available models, prices, and reputation.
23
+ */
24
+ export function registerBrowseCommand(program: Command): void {
25
+ program
26
+ .command('browse')
27
+ .description('Browse available models, prices, and reputation on the P2P network')
28
+ .option('-m, --model <model>', 'filter by model name')
29
+ .option('--json', 'output as JSON', false)
30
+ .action(async (options) => {
31
+ const globalOpts = getGlobalOptions(program);
32
+ const config = await loadConfig(globalOpts.config);
33
+
34
+ const bootstrapNodes = config.network.bootstrapNodes.length > 0
35
+ ? toBootstrapConfig(parseBootstrapList(config.network.bootstrapNodes))
36
+ : undefined;
37
+
38
+ const spinner = ora('Discovering peers on the network...').start();
39
+
40
+ const node = new AntseedNode({
41
+ role: 'buyer',
42
+ bootstrapNodes,
43
+ });
44
+
45
+ try {
46
+ await node.start();
47
+ } catch (err) {
48
+ spinner.fail(chalk.red(`Failed to connect to network: ${(err as Error).message}`));
49
+ process.exit(1);
50
+ }
51
+
52
+ try {
53
+ const peers = await node.discoverPeers(options.model as string | undefined);
54
+ spinner.succeed(chalk.green(`Found ${peers.length} peer(s)`));
55
+
56
+ if (peers.length === 0) {
57
+ console.log(chalk.dim('No peers found. Try again later or check your bootstrap nodes.'));
58
+ await node.stop();
59
+ return;
60
+ }
61
+
62
+ if (options.json) {
63
+ console.log(JSON.stringify(peers, null, 2));
64
+ await node.stop();
65
+ return;
66
+ }
67
+
68
+ // Display peers in a table
69
+ const table = new Table({
70
+ head: [
71
+ chalk.bold('Peer ID'),
72
+ chalk.bold('Providers'),
73
+ chalk.bold('Input $/1M'),
74
+ chalk.bold('Output $/1M'),
75
+ chalk.bold('Reputation'),
76
+ chalk.bold('Load'),
77
+ ],
78
+ colWidths: [16, 18, 14, 14, 12, 10],
79
+ });
80
+
81
+ for (const peer of peers) {
82
+ const reputation = peer.reputationScore ?? 0;
83
+ const repLabel = `${reputation}%`;
84
+ const repColor = getReputationColor(reputation);
85
+
86
+ const load = peer.currentLoad !== undefined && peer.maxConcurrency !== undefined
87
+ ? `${peer.currentLoad}/${peer.maxConcurrency}`
88
+ : chalk.dim('n/a');
89
+
90
+ table.push([
91
+ chalk.dim(peer.peerId.slice(0, 12) + '...'),
92
+ peer.providers.join(', '),
93
+ peer.defaultInputUsdPerMillion !== undefined
94
+ ? `$${peer.defaultInputUsdPerMillion.toFixed(2)}`
95
+ : chalk.dim('n/a'),
96
+ peer.defaultOutputUsdPerMillion !== undefined
97
+ ? `$${peer.defaultOutputUsdPerMillion.toFixed(2)}`
98
+ : chalk.dim('n/a'),
99
+ repColor(repLabel),
100
+ load,
101
+ ]);
102
+ }
103
+
104
+ console.log('');
105
+ console.log(table.toString());
106
+ console.log('');
107
+ } catch (err) {
108
+ spinner.fail(chalk.red(`Discovery failed: ${(err as Error).message}`));
109
+ }
110
+
111
+ await node.stop();
112
+ });
113
+ }
@@ -0,0 +1,271 @@
1
+ import type { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { getGlobalOptions } from './types.js';
4
+ import { loadConfig, saveConfig } from '../../config/loader.js';
5
+ import type { AntseedConfig, ProviderConfig, ProviderType } from '../../config/types.js';
6
+ import { assertValidConfig } from '../../config/validation.js';
7
+
8
+ /**
9
+ * Register the `antseed config` command and its subcommands.
10
+ */
11
+ export function registerConfigCommand(program: Command): void {
12
+ const configCmd = program
13
+ .command('config')
14
+ .description('Manage Antseed configuration');
15
+
16
+ // antseed config show
17
+ configCmd
18
+ .command('show')
19
+ .description('Display current configuration (credentials redacted)')
20
+ .action(async () => {
21
+ const globalOpts = getGlobalOptions(program);
22
+ const config = await loadConfig(globalOpts.config);
23
+ const redacted = redactConfig(config);
24
+ console.log(JSON.stringify(redacted, null, 2));
25
+ });
26
+
27
+ // antseed config set <key> <value>
28
+ configCmd
29
+ .command('set <key> <value>')
30
+ .description('Set a configuration value (e.g., seller.reserveFloor 20)')
31
+ .action(async (key: string, value: string) => {
32
+ try {
33
+ const globalOpts = getGlobalOptions(program);
34
+ const config = await loadConfig(globalOpts.config);
35
+ const validKeys = getValidConfigKeys(config);
36
+ if (!validKeys.includes(key)) {
37
+ console.error(chalk.red(`Invalid config key: ${key}`));
38
+ console.error(chalk.dim(`Available keys: ${validKeys.join(', ')}`));
39
+ process.exitCode = 1;
40
+ return;
41
+ }
42
+ setConfigValue(config as unknown as Record<string, unknown>, key, value);
43
+ assertValidConfig(config);
44
+ await saveConfig(globalOpts.config, config);
45
+ console.log(chalk.green(`Set ${key} = ${value}`));
46
+ } catch (err) {
47
+ console.error(chalk.red(`Error: ${(err as Error).message}`));
48
+ process.exitCode = 1;
49
+ }
50
+ });
51
+
52
+ const sellerCmd = configCmd
53
+ .command('seller')
54
+ .description('Role-scoped seller configuration commands');
55
+
56
+ sellerCmd
57
+ .command('show')
58
+ .description('Display seller configuration')
59
+ .action(async () => {
60
+ const globalOpts = getGlobalOptions(program);
61
+ const config = await loadConfig(globalOpts.config);
62
+ console.log(JSON.stringify(config.seller, null, 2));
63
+ });
64
+
65
+ sellerCmd
66
+ .command('set <key> <value>')
67
+ .description('Set seller configuration value (e.g., pricing.defaults.inputUsdPerMillion 12)')
68
+ .action(async (key: string, value: string) => {
69
+ await setRoleScopedValue(program, 'seller', key, value);
70
+ });
71
+
72
+ const buyerCmd = configCmd
73
+ .command('buyer')
74
+ .description('Role-scoped buyer configuration commands');
75
+
76
+ buyerCmd
77
+ .command('show')
78
+ .description('Display buyer configuration')
79
+ .action(async () => {
80
+ const globalOpts = getGlobalOptions(program);
81
+ const config = await loadConfig(globalOpts.config);
82
+ console.log(JSON.stringify(config.buyer, null, 2));
83
+ });
84
+
85
+ buyerCmd
86
+ .command('set <key> <value>')
87
+ .description('Set buyer configuration value (e.g., preferredProviders [\"anthropic\",\"openai\"])')
88
+ .action(async (key: string, value: string) => {
89
+ await setRoleScopedValue(program, 'buyer', key, value);
90
+ });
91
+
92
+ // antseed config add-provider
93
+ configCmd
94
+ .command('add-provider')
95
+ .description('Add a new provider credential')
96
+ .requiredOption('-t, --type <type>', 'provider type (anthropic, openai, google, moonshot)')
97
+ .requiredOption('-k, --key <key>', 'API key or auth token')
98
+ .option('-e, --endpoint <url>', 'custom API endpoint URL')
99
+ .action(async (options) => {
100
+ const knownTypes = ['anthropic', 'openai', 'google', 'moonshot'];
101
+ if (!knownTypes.includes(options.type as string)) {
102
+ console.error(chalk.red(`Unknown provider type: ${options.type as string}`));
103
+ console.error(chalk.dim(`Known types: ${knownTypes.join(', ')}`));
104
+ process.exitCode = 1;
105
+ return;
106
+ }
107
+ const globalOpts = getGlobalOptions(program);
108
+ const config = await loadConfig(globalOpts.config);
109
+ const provider = buildProviderConfig(
110
+ options.type as ProviderType,
111
+ options.key as string,
112
+ options.endpoint as string | undefined
113
+ );
114
+ config.providers.push(provider);
115
+ await saveConfig(globalOpts.config, config);
116
+ console.log(chalk.green(`Added ${options.type as string} provider`));
117
+ });
118
+
119
+ // antseed config remove-provider <type>
120
+ configCmd
121
+ .command('remove-provider <type>')
122
+ .description('Remove a provider credential by type')
123
+ .action(async (type: string) => {
124
+ const globalOpts = getGlobalOptions(program);
125
+ const config = await loadConfig(globalOpts.config);
126
+ const before = config.providers.length;
127
+ config.providers = config.providers.filter((p) => p.type !== type);
128
+ const removed = before - config.providers.length;
129
+ await saveConfig(globalOpts.config, config);
130
+ if (removed > 0) {
131
+ console.log(chalk.green(`Removed ${removed} ${type} provider(s)`));
132
+ } else {
133
+ console.log(chalk.yellow(`No ${type} provider found`));
134
+ }
135
+ });
136
+
137
+ // antseed config init
138
+ configCmd
139
+ .command('init')
140
+ .description('Initialize a new config file with defaults')
141
+ .action(async () => {
142
+ const globalOpts = getGlobalOptions(program);
143
+ const { createDefaultConfig } = await import('../../config/defaults.js');
144
+ const config = createDefaultConfig();
145
+ await saveConfig(globalOpts.config, config);
146
+ console.log(chalk.green(`Config initialized at ${globalOpts.config}`));
147
+ });
148
+ }
149
+
150
+ /**
151
+ * Redact sensitive fields (auth values) from config for display.
152
+ */
153
+ export function redactConfig(config: AntseedConfig): Record<string, unknown> {
154
+ const clone = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;
155
+ const providers = clone['providers'] as Array<Record<string, unknown>> | undefined;
156
+ for (const provider of providers ?? []) {
157
+ if (provider['authValue']) {
158
+ const val = provider['authValue'] as string;
159
+ provider['authValue'] = val.slice(0, 8) + '...' + val.slice(-4);
160
+ }
161
+ }
162
+
163
+ return clone;
164
+ }
165
+
166
+ /**
167
+ * Set a nested config value by dot-separated key path.
168
+ * @example setConfigValue(config, 'seller.reserveFloor', '20')
169
+ */
170
+ export function setConfigValue(config: Record<string, unknown>, key: string, value: string): void {
171
+ const parts = key.split('.');
172
+ let current: Record<string, unknown> = config;
173
+ for (let i = 0; i < parts.length - 1; i++) {
174
+ const part = parts[i]!;
175
+ if (typeof current[part] !== 'object' || current[part] === null) {
176
+ throw new Error(`Invalid config key: ${key}`);
177
+ }
178
+ current = current[part] as Record<string, unknown>;
179
+ }
180
+ const lastKey = parts[parts.length - 1]!;
181
+ const trimmed = value.trim();
182
+
183
+ if (
184
+ (trimmed.startsWith('{') && trimmed.endsWith('}')) ||
185
+ (trimmed.startsWith('[') && trimmed.endsWith(']'))
186
+ ) {
187
+ try {
188
+ current[lastKey] = JSON.parse(trimmed) as unknown;
189
+ return;
190
+ } catch {
191
+ throw new Error(`Invalid JSON value for ${key}`);
192
+ }
193
+ }
194
+
195
+ // Auto-parse numeric scalars
196
+ const numVal = Number(trimmed);
197
+ current[lastKey] = Number.isNaN(numVal) ? value : numVal;
198
+ }
199
+
200
+ function getValidConfigKeys(config: AntseedConfig, prefix = ''): string[] {
201
+ const keys: string[] = [];
202
+ for (const [k, v] of Object.entries(config)) {
203
+ if (k === 'providers' || k === 'plugins') continue;
204
+ const path = prefix ? `${prefix}.${k}` : k;
205
+ if (v && typeof v === 'object' && !Array.isArray(v)) {
206
+ keys.push(...getValidConfigKeys(v as unknown as AntseedConfig, path));
207
+ } else {
208
+ keys.push(path);
209
+ }
210
+ }
211
+ return keys;
212
+ }
213
+
214
+ async function setRoleScopedValue(
215
+ program: Command,
216
+ role: 'seller' | 'buyer',
217
+ key: string,
218
+ value: string,
219
+ ): Promise<void> {
220
+ try {
221
+ const globalOpts = getGlobalOptions(program);
222
+ const config = await loadConfig(globalOpts.config);
223
+ const fullKey = `${role}.${key}`;
224
+ const validKeys = getValidConfigKeys(config);
225
+ if (!validKeys.includes(fullKey)) {
226
+ console.error(chalk.red(`Invalid ${role} config key: ${key}`));
227
+ const scopedKeys = validKeys
228
+ .filter((path) => path.startsWith(`${role}.`))
229
+ .map((path) => path.slice(role.length + 1));
230
+ console.error(chalk.dim(`Available ${role} keys: ${scopedKeys.join(', ')}`));
231
+ process.exitCode = 1;
232
+ return;
233
+ }
234
+ setConfigValue(config as unknown as Record<string, unknown>, fullKey, value);
235
+ assertValidConfig(config);
236
+ await saveConfig(globalOpts.config, config);
237
+ console.log(chalk.green(`Set ${fullKey} = ${value}`));
238
+ } catch (err) {
239
+ console.error(chalk.red(`Error: ${(err as Error).message}`));
240
+ process.exitCode = 1;
241
+ }
242
+ }
243
+
244
+ /**
245
+ * Build a ProviderConfig with default endpoint and auth header for known providers.
246
+ */
247
+ export function buildProviderConfig(
248
+ type: ProviderType,
249
+ authValue: string,
250
+ customEndpoint?: string
251
+ ): ProviderConfig {
252
+ const defaults: Record<string, { endpoint: string; authHeaderName: string }> = {
253
+ anthropic: { endpoint: 'https://api.anthropic.com', authHeaderName: 'x-api-key' },
254
+ openai: { endpoint: 'https://api.openai.com', authHeaderName: 'Authorization' },
255
+ google: { endpoint: 'https://generativelanguage.googleapis.com', authHeaderName: 'x-goog-api-key' },
256
+ moonshot: { endpoint: 'https://api.moonshot.cn', authHeaderName: 'Authorization' },
257
+ };
258
+
259
+ const fallbackDefaults = {
260
+ endpoint: customEndpoint ?? '',
261
+ authHeaderName: 'Authorization',
262
+ };
263
+ const def = defaults[type] ?? fallbackDefaults;
264
+
265
+ return {
266
+ type,
267
+ endpoint: customEndpoint ?? def.endpoint,
268
+ authHeaderName: def.authHeaderName,
269
+ authValue,
270
+ };
271
+ }