@sequence0/blockclaw 2.0.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 (190) hide show
  1. package/README.md +97 -0
  2. package/dist/agent/binary.d.ts +15 -0
  3. package/dist/agent/binary.d.ts.map +1 -0
  4. package/dist/agent/binary.js +172 -0
  5. package/dist/agent/binary.js.map +1 -0
  6. package/dist/agent/chains.d.ts +26 -0
  7. package/dist/agent/chains.d.ts.map +1 -0
  8. package/dist/agent/chains.js +123 -0
  9. package/dist/agent/chains.js.map +1 -0
  10. package/dist/agent/client.d.ts +484 -0
  11. package/dist/agent/client.d.ts.map +1 -0
  12. package/dist/agent/client.js +448 -0
  13. package/dist/agent/client.js.map +1 -0
  14. package/dist/agent/config.d.ts +75 -0
  15. package/dist/agent/config.d.ts.map +1 -0
  16. package/dist/agent/config.js +133 -0
  17. package/dist/agent/config.js.map +1 -0
  18. package/dist/agent/process.d.ts +36 -0
  19. package/dist/agent/process.d.ts.map +1 -0
  20. package/dist/agent/process.js +208 -0
  21. package/dist/agent/process.js.map +1 -0
  22. package/dist/agent/wallet.d.ts +43 -0
  23. package/dist/agent/wallet.d.ts.map +1 -0
  24. package/dist/agent/wallet.js +146 -0
  25. package/dist/agent/wallet.js.map +1 -0
  26. package/dist/ai/brain.d.ts +21 -0
  27. package/dist/ai/brain.d.ts.map +1 -0
  28. package/dist/ai/brain.js +117 -0
  29. package/dist/ai/brain.js.map +1 -0
  30. package/dist/ai/prompts.d.ts +15 -0
  31. package/dist/ai/prompts.d.ts.map +1 -0
  32. package/dist/ai/prompts.js +67 -0
  33. package/dist/ai/prompts.js.map +1 -0
  34. package/dist/ai/rules.d.ts +19 -0
  35. package/dist/ai/rules.d.ts.map +1 -0
  36. package/dist/ai/rules.js +143 -0
  37. package/dist/ai/rules.js.map +1 -0
  38. package/dist/core/detector.d.ts +16 -0
  39. package/dist/core/detector.d.ts.map +1 -0
  40. package/dist/core/detector.js +90 -0
  41. package/dist/core/detector.js.map +1 -0
  42. package/dist/core/healer.d.ts +62 -0
  43. package/dist/core/healer.d.ts.map +1 -0
  44. package/dist/core/healer.js +355 -0
  45. package/dist/core/healer.js.map +1 -0
  46. package/dist/core/heartbeat.d.ts +67 -0
  47. package/dist/core/heartbeat.d.ts.map +1 -0
  48. package/dist/core/heartbeat.js +426 -0
  49. package/dist/core/heartbeat.js.map +1 -0
  50. package/dist/core/memory.d.ts +57 -0
  51. package/dist/core/memory.d.ts.map +1 -0
  52. package/dist/core/memory.js +149 -0
  53. package/dist/core/memory.js.map +1 -0
  54. package/dist/core/updater.d.ts +16 -0
  55. package/dist/core/updater.d.ts.map +1 -0
  56. package/dist/core/updater.js +107 -0
  57. package/dist/core/updater.js.map +1 -0
  58. package/dist/index.d.ts +3 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +97 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/interface/commands/ask.d.ts +3 -0
  63. package/dist/interface/commands/ask.d.ts.map +1 -0
  64. package/dist/interface/commands/ask.js +39 -0
  65. package/dist/interface/commands/ask.js.map +1 -0
  66. package/dist/interface/commands/backup.d.ts +3 -0
  67. package/dist/interface/commands/backup.d.ts.map +1 -0
  68. package/dist/interface/commands/backup.js +576 -0
  69. package/dist/interface/commands/backup.js.map +1 -0
  70. package/dist/interface/commands/config.d.ts +3 -0
  71. package/dist/interface/commands/config.d.ts.map +1 -0
  72. package/dist/interface/commands/config.js +107 -0
  73. package/dist/interface/commands/config.js.map +1 -0
  74. package/dist/interface/commands/daemon.d.ts +3 -0
  75. package/dist/interface/commands/daemon.d.ts.map +1 -0
  76. package/dist/interface/commands/daemon.js +162 -0
  77. package/dist/interface/commands/daemon.js.map +1 -0
  78. package/dist/interface/commands/doctor.d.ts +3 -0
  79. package/dist/interface/commands/doctor.d.ts.map +1 -0
  80. package/dist/interface/commands/doctor.js +143 -0
  81. package/dist/interface/commands/doctor.js.map +1 -0
  82. package/dist/interface/commands/earnings.d.ts +3 -0
  83. package/dist/interface/commands/earnings.d.ts.map +1 -0
  84. package/dist/interface/commands/earnings.js +165 -0
  85. package/dist/interface/commands/earnings.js.map +1 -0
  86. package/dist/interface/commands/health.d.ts +3 -0
  87. package/dist/interface/commands/health.d.ts.map +1 -0
  88. package/dist/interface/commands/health.js +48 -0
  89. package/dist/interface/commands/health.js.map +1 -0
  90. package/dist/interface/commands/history.d.ts +3 -0
  91. package/dist/interface/commands/history.d.ts.map +1 -0
  92. package/dist/interface/commands/history.js +113 -0
  93. package/dist/interface/commands/history.js.map +1 -0
  94. package/dist/interface/commands/info.d.ts +3 -0
  95. package/dist/interface/commands/info.d.ts.map +1 -0
  96. package/dist/interface/commands/info.js +82 -0
  97. package/dist/interface/commands/info.js.map +1 -0
  98. package/dist/interface/commands/logs.d.ts +3 -0
  99. package/dist/interface/commands/logs.d.ts.map +1 -0
  100. package/dist/interface/commands/logs.js +98 -0
  101. package/dist/interface/commands/logs.js.map +1 -0
  102. package/dist/interface/commands/menu.d.ts +4 -0
  103. package/dist/interface/commands/menu.d.ts.map +1 -0
  104. package/dist/interface/commands/menu.js +156 -0
  105. package/dist/interface/commands/menu.js.map +1 -0
  106. package/dist/interface/commands/receive.d.ts +3 -0
  107. package/dist/interface/commands/receive.d.ts.map +1 -0
  108. package/dist/interface/commands/receive.js +81 -0
  109. package/dist/interface/commands/receive.js.map +1 -0
  110. package/dist/interface/commands/register.d.ts +3 -0
  111. package/dist/interface/commands/register.d.ts.map +1 -0
  112. package/dist/interface/commands/register.js +231 -0
  113. package/dist/interface/commands/register.js.map +1 -0
  114. package/dist/interface/commands/restart.d.ts +3 -0
  115. package/dist/interface/commands/restart.d.ts.map +1 -0
  116. package/dist/interface/commands/restart.js +154 -0
  117. package/dist/interface/commands/restart.js.map +1 -0
  118. package/dist/interface/commands/send.d.ts +3 -0
  119. package/dist/interface/commands/send.d.ts.map +1 -0
  120. package/dist/interface/commands/send.js +108 -0
  121. package/dist/interface/commands/send.js.map +1 -0
  122. package/dist/interface/commands/service.d.ts +3 -0
  123. package/dist/interface/commands/service.d.ts.map +1 -0
  124. package/dist/interface/commands/service.js +474 -0
  125. package/dist/interface/commands/service.js.map +1 -0
  126. package/dist/interface/commands/setup.d.ts +5 -0
  127. package/dist/interface/commands/setup.d.ts.map +1 -0
  128. package/dist/interface/commands/setup.js +410 -0
  129. package/dist/interface/commands/setup.js.map +1 -0
  130. package/dist/interface/commands/start.d.ts +3 -0
  131. package/dist/interface/commands/start.d.ts.map +1 -0
  132. package/dist/interface/commands/start.js +171 -0
  133. package/dist/interface/commands/start.js.map +1 -0
  134. package/dist/interface/commands/status.d.ts +3 -0
  135. package/dist/interface/commands/status.d.ts.map +1 -0
  136. package/dist/interface/commands/status.js +77 -0
  137. package/dist/interface/commands/status.js.map +1 -0
  138. package/dist/interface/commands/stop.d.ts +3 -0
  139. package/dist/interface/commands/stop.d.ts.map +1 -0
  140. package/dist/interface/commands/stop.js +62 -0
  141. package/dist/interface/commands/stop.js.map +1 -0
  142. package/dist/interface/commands/update.d.ts +3 -0
  143. package/dist/interface/commands/update.d.ts.map +1 -0
  144. package/dist/interface/commands/update.js +53 -0
  145. package/dist/interface/commands/update.js.map +1 -0
  146. package/dist/interface/commands/wallet.d.ts +3 -0
  147. package/dist/interface/commands/wallet.d.ts.map +1 -0
  148. package/dist/interface/commands/wallet.js +446 -0
  149. package/dist/interface/commands/wallet.js.map +1 -0
  150. package/dist/interface/commands/webhook.d.ts +3 -0
  151. package/dist/interface/commands/webhook.d.ts.map +1 -0
  152. package/dist/interface/commands/webhook.js +99 -0
  153. package/dist/interface/commands/webhook.js.map +1 -0
  154. package/dist/interface/commands/withdraw.d.ts +3 -0
  155. package/dist/interface/commands/withdraw.d.ts.map +1 -0
  156. package/dist/interface/commands/withdraw.js +261 -0
  157. package/dist/interface/commands/withdraw.js.map +1 -0
  158. package/dist/interface/interactive.d.ts +43 -0
  159. package/dist/interface/interactive.d.ts.map +1 -0
  160. package/dist/interface/interactive.js +276 -0
  161. package/dist/interface/interactive.js.map +1 -0
  162. package/dist/interface/logo.d.ts +2 -0
  163. package/dist/interface/logo.d.ts.map +1 -0
  164. package/dist/interface/logo.js +21 -0
  165. package/dist/interface/logo.js.map +1 -0
  166. package/dist/interface/webhooks.d.ts +19 -0
  167. package/dist/interface/webhooks.d.ts.map +1 -0
  168. package/dist/interface/webhooks.js +172 -0
  169. package/dist/interface/webhooks.js.map +1 -0
  170. package/dist/utils/format.d.ts +19 -0
  171. package/dist/utils/format.d.ts.map +1 -0
  172. package/dist/utils/format.js +107 -0
  173. package/dist/utils/format.js.map +1 -0
  174. package/dist/utils/logger.d.ts +20 -0
  175. package/dist/utils/logger.d.ts.map +1 -0
  176. package/dist/utils/logger.js +47 -0
  177. package/dist/utils/logger.js.map +1 -0
  178. package/dist/utils/paths.d.ts +35 -0
  179. package/dist/utils/paths.d.ts.map +1 -0
  180. package/dist/utils/paths.js +45 -0
  181. package/dist/utils/paths.js.map +1 -0
  182. package/dist/utils/platform.d.ts +26 -0
  183. package/dist/utils/platform.d.ts.map +1 -0
  184. package/dist/utils/platform.js +72 -0
  185. package/dist/utils/platform.js.map +1 -0
  186. package/dist/version.d.ts +3 -0
  187. package/dist/version.d.ts.map +1 -0
  188. package/dist/version.js +3 -0
  189. package/dist/version.js.map +1 -0
  190. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/interface/commands/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+C/C"}
@@ -0,0 +1,48 @@
1
+ import { AgentClient } from "../../agent/client.js";
2
+ import { readBlockclawConfig } from "../../agent/config.js";
3
+ import { logger } from "../../utils/logger.js";
4
+ import { colorStatus, printTable } from "../../utils/format.js";
5
+ export function register(program) {
6
+ program
7
+ .command("health")
8
+ .description("Display wallet security group health")
9
+ .option("--wallet <wallet_id>", "Show health for a specific wallet")
10
+ .action(async (opts) => {
11
+ try {
12
+ const config = readBlockclawConfig();
13
+ const client = new AgentClient(`http://localhost:${config.api_port ?? 8080}`);
14
+ if (opts.wallet) {
15
+ const h = await client.walletCommitteeHealth(opts.wallet);
16
+ logger.header(`Wallet Security: ${opts.wallet}`);
17
+ logger.kv("Status", colorStatus(h.status));
18
+ logger.kv("Min. Signers Needed", String(h.threshold));
19
+ logger.kv("Total Members", String(h.total));
20
+ logger.kv("Online Members", String(h.alive));
21
+ if (h.dead_peers && h.dead_peers.length > 0) {
22
+ logger.kv("Offline Members", h.dead_peers.join(", "));
23
+ }
24
+ }
25
+ else {
26
+ const committees = await client.committeeHealth();
27
+ if (committees.length === 0) {
28
+ logger.info("No wallet security groups found");
29
+ return;
30
+ }
31
+ logger.header("Wallet Security Groups");
32
+ const rows = committees.map((c) => [
33
+ c.wallet_id.length > 24 ? c.wallet_id.slice(0, 24) + "…" : c.wallet_id,
34
+ colorStatus(c.status),
35
+ `${c.alive}/${c.total}`,
36
+ String(c.threshold),
37
+ ]);
38
+ printTable(["Wallet", "Status", "Online/Total", "Min. Signers"], rows);
39
+ }
40
+ logger.blank();
41
+ }
42
+ catch (err) {
43
+ logger.error(`Failed to get health: ${err.message}`);
44
+ process.exit(1);
45
+ }
46
+ });
47
+ }
48
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/interface/commands/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/interface/commands/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4H/C"}
@@ -0,0 +1,113 @@
1
+ import pc from "picocolors";
2
+ import { AgentClient } from "../../agent/client.js";
3
+ import { getChain, getExplorerUrl } from "../../agent/chains.js";
4
+ import { readBlockclawConfig } from "../../agent/config.js";
5
+ import { logger } from "../../utils/logger.js";
6
+ import { formatRelative } from "../../utils/format.js";
7
+ import { selectWallet, selectChain, withSpinner, handleCancel, } from "../interactive.js";
8
+ export function register(program) {
9
+ program
10
+ .command("history")
11
+ .description("View transaction history for a wallet")
12
+ .option("--wallet <id>", "Wallet identifier")
13
+ .option("--chain <chain>", "Filter by chain")
14
+ .option("--limit <n>", "Number of transactions to show", "10")
15
+ .action(async (opts) => {
16
+ try {
17
+ const config = readBlockclawConfig();
18
+ const client = new AgentClient(`http://localhost:${config.api_port ?? 8080}`);
19
+ // Step 1: Select wallet
20
+ const wallet = await selectWallet(client, opts.wallet);
21
+ if (!wallet)
22
+ handleCancel();
23
+ // Step 2: Select chain (filtered by wallet curve)
24
+ const chainId = await selectChain(wallet.curve, opts.chain);
25
+ if (!chainId)
26
+ handleCancel();
27
+ const chain = getChain(chainId);
28
+ const chainName = chain?.name ?? chainId;
29
+ const limit = parseInt(opts.limit, 10) || 10;
30
+ logger.header(`Transaction History`);
31
+ logger.kv("Wallet", wallet.walletId);
32
+ logger.kv("Chain", chainName);
33
+ logger.separator();
34
+ // Step 3: Try to fetch signing history
35
+ try {
36
+ const sessions = await withSpinner("Fetching transaction history...", async () => {
37
+ // Attempt the sign history endpoint
38
+ const res = await fetch(`${client.baseUrl}/sign/history?wallet_id=${encodeURIComponent(wallet.walletId)}&chain=${encodeURIComponent(chainId)}&limit=${limit}`, {
39
+ headers: { "Content-Type": "application/json" },
40
+ signal: AbortSignal.timeout(10_000),
41
+ });
42
+ if (!res.ok) {
43
+ return null;
44
+ }
45
+ return (await res.json());
46
+ });
47
+ if (!sessions || sessions.length === 0) {
48
+ // Endpoint not available or no results — show placeholder
49
+ showPlaceholder(chainId, chainName, wallet.address);
50
+ return;
51
+ }
52
+ // Display transaction list
53
+ logger.blank();
54
+ for (const session of sessions.slice(0, limit)) {
55
+ const status = session.status === "completed"
56
+ ? pc.green("completed")
57
+ : session.status === "failed"
58
+ ? pc.red("failed")
59
+ : pc.yellow(session.status);
60
+ const time = session.created_at
61
+ ? pc.dim(formatRelative(session.created_at))
62
+ : pc.dim("unknown");
63
+ console.log(` ${pc.dim(">")} ${pc.bold(session.request_id.slice(0, 12))} ${status} ${time}`);
64
+ if (session.signature) {
65
+ const explorerUrl = getExplorerUrl(chainId, session.signature);
66
+ if (explorerUrl) {
67
+ console.log(` ${pc.dim("explorer:")} ${pc.underline(pc.cyan(explorerUrl))}`);
68
+ }
69
+ }
70
+ // Try to parse the message for transfer details
71
+ if (session.message) {
72
+ try {
73
+ const payload = JSON.parse(session.message);
74
+ if (payload.type === "transfer") {
75
+ console.log(` ${pc.dim("to:")} ${payload.to} ${pc.dim("amount:")} ${payload.amount}`);
76
+ }
77
+ }
78
+ catch {
79
+ // Not JSON, skip
80
+ }
81
+ }
82
+ }
83
+ logger.blank();
84
+ logger.info(`Showing ${Math.min(sessions.length, limit)} of ${sessions.length} transactions`);
85
+ logger.blank();
86
+ }
87
+ catch {
88
+ // If the endpoint fails entirely, show placeholder
89
+ showPlaceholder(chainId, chainName, wallet.address);
90
+ }
91
+ }
92
+ catch (err) {
93
+ logger.error(`Failed to fetch history: ${err.message}`);
94
+ process.exit(1);
95
+ }
96
+ });
97
+ }
98
+ function showPlaceholder(chainId, chainName, address) {
99
+ logger.blank();
100
+ logger.info("Transaction history coming soon.");
101
+ logger.blank();
102
+ const chain = getChain(chainId);
103
+ if (chain?.explorerTx) {
104
+ const explorerBase = chain.explorerTx.replace(/\/tx\/?$/, "");
105
+ const addressUrl = `${explorerBase}/address/${address}`;
106
+ logger.info(`View on explorer: ${pc.underline(pc.cyan(addressUrl))}`);
107
+ }
108
+ else {
109
+ logger.info(`Check the ${pc.bold(chainName)} block explorer for transaction history.`);
110
+ }
111
+ logger.blank();
112
+ }
113
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/interface/commands/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/interface/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmF/C"}
@@ -0,0 +1,82 @@
1
+ import pc from "picocolors";
2
+ import { AgentClient } from "../../agent/client.js";
3
+ import { getBinaryVersion } from "../../agent/binary.js";
4
+ import { resolveBinary } from "../../agent/binary.js";
5
+ import { isAgentRunning } from "../../agent/process.js";
6
+ import { readBlockclawConfig, readAgentConfig } from "../../agent/config.js";
7
+ import { logger } from "../../utils/logger.js";
8
+ import { formatBytes } from "../../utils/format.js";
9
+ import { getSystemInfo, getDiskUsage } from "../../utils/platform.js";
10
+ import { SEQUENCE0_DIR, BLOCKCLAW_DIR, AGENT_LOG, AGENT_CONFIG, BLOCKCLAW_CONFIG, } from "../../utils/paths.js";
11
+ import { VERSION } from "../../version.js";
12
+ export function register(program) {
13
+ program
14
+ .command("info")
15
+ .description("Display system and network information")
16
+ .action(async () => {
17
+ try {
18
+ const sys = getSystemInfo();
19
+ // -- BlockClaw & Agent versions ----------------------------------------
20
+ logger.header("System Information");
21
+ logger.separator();
22
+ logger.kv("BlockClaw", `v${VERSION}`);
23
+ // Try to get the agent version — prefer the running API, fall back to binary on disk
24
+ let agentVersion = null;
25
+ const config = readBlockclawConfig();
26
+ const agentConfig = readAgentConfig();
27
+ const apiPort = config.api_port ?? agentConfig?.api_port ?? 8080;
28
+ const proc = isAgentRunning();
29
+ if (proc.running) {
30
+ try {
31
+ const client = new AgentClient(`http://localhost:${apiPort}`);
32
+ const health = await client.health();
33
+ agentVersion = health.version ?? null;
34
+ }
35
+ catch {
36
+ // API not responding, try binary
37
+ }
38
+ }
39
+ if (!agentVersion) {
40
+ try {
41
+ const binPath = await resolveBinary();
42
+ agentVersion = await getBinaryVersion(binPath);
43
+ }
44
+ catch {
45
+ // Binary not found
46
+ }
47
+ }
48
+ logger.kv("Agent", agentVersion ? `v${agentVersion}` : pc.dim("not installed"));
49
+ // -- Platform ----------------------------------------------------------
50
+ logger.separator();
51
+ logger.kv("Platform", sys.platform);
52
+ logger.kv("Arch", sys.arch);
53
+ logger.kv("Node.js", sys.nodeVersion);
54
+ logger.kv("Hostname", sys.hostname);
55
+ logger.kv("CPUs", String(sys.cpus));
56
+ logger.kv("Memory", `${sys.freeMemoryGB} GB free / ${sys.totalMemoryGB} GB total`);
57
+ logger.kv("System Uptime", sys.uptime);
58
+ // -- Paths -------------------------------------------------------------
59
+ logger.separator();
60
+ logger.kv("Data Directory", SEQUENCE0_DIR);
61
+ logger.kv("BlockClaw Dir", BLOCKCLAW_DIR);
62
+ logger.kv("Agent Config", AGENT_CONFIG);
63
+ logger.kv("BlockClaw Config", BLOCKCLAW_CONFIG);
64
+ logger.kv("Agent Log", AGENT_LOG);
65
+ // -- Disk usage --------------------------------------------------------
66
+ const disk = await getDiskUsage(SEQUENCE0_DIR);
67
+ if (disk.total > 0) {
68
+ logger.separator();
69
+ logger.kv("Disk Total", formatBytes(disk.total));
70
+ logger.kv("Disk Used", `${formatBytes(disk.used)} (${disk.usedPercent.toFixed(1)}%)`);
71
+ logger.kv("Disk Free", formatBytes(disk.free));
72
+ }
73
+ logger.separator();
74
+ logger.blank();
75
+ }
76
+ catch (err) {
77
+ logger.error(`Failed to gather info: ${err.message}`);
78
+ process.exit(1);
79
+ }
80
+ });
81
+ }
82
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/interface/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/interface/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B/C"}
@@ -0,0 +1,98 @@
1
+ import fs from "node:fs";
2
+ import { spawn } from "node:child_process";
3
+ import { AgentClient } from "../../agent/client.js";
4
+ import { readBlockclawConfig, readAgentConfig } from "../../agent/config.js";
5
+ import { AGENT_LOG } from "../../utils/paths.js";
6
+ import { logger } from "../../utils/logger.js";
7
+ export function register(program) {
8
+ program
9
+ .command("logs")
10
+ .description("View agent logs")
11
+ .option("-f, --follow", "Follow log output in real time")
12
+ .option("-n, --lines <count>", "Number of lines to display", "50")
13
+ .option("--api", "Fetch logs from the agent instead of the log file")
14
+ .action(async (opts) => {
15
+ try {
16
+ const lines = parseInt(opts.lines, 10) || 50;
17
+ if (opts.api) {
18
+ await showApiLogs(lines);
19
+ return;
20
+ }
21
+ if (opts.follow) {
22
+ followLogFile();
23
+ return;
24
+ }
25
+ showLogFile(lines);
26
+ }
27
+ catch (err) {
28
+ logger.error(`Failed to read logs: ${err.message}`);
29
+ process.exit(1);
30
+ }
31
+ });
32
+ }
33
+ /** Read the last N lines from the agent log file and print them */
34
+ function showLogFile(lines) {
35
+ if (!fs.existsSync(AGENT_LOG)) {
36
+ logger.warn(`Log file not found at ${AGENT_LOG}`);
37
+ logger.info("The agent may not have been started yet.");
38
+ return;
39
+ }
40
+ const content = fs.readFileSync(AGENT_LOG, "utf8");
41
+ const allLines = content.split("\n");
42
+ // Grab the last N lines (filter out trailing empty line from split)
43
+ const start = Math.max(0, allLines.length - lines - 1);
44
+ const tail = allLines.slice(start).join("\n").trimEnd();
45
+ if (!tail) {
46
+ logger.info("Log file is empty.");
47
+ return;
48
+ }
49
+ console.log(tail);
50
+ }
51
+ /** Stream the log file in real time using tail -f */
52
+ function followLogFile() {
53
+ if (!fs.existsSync(AGENT_LOG)) {
54
+ logger.warn(`Log file not found at ${AGENT_LOG}`);
55
+ logger.info("The agent may not have been started yet.");
56
+ return;
57
+ }
58
+ logger.info(`Following ${AGENT_LOG} (Ctrl+C to stop)`);
59
+ logger.blank();
60
+ const child = spawn("tail", ["-f", AGENT_LOG], {
61
+ stdio: ["ignore", "inherit", "inherit"],
62
+ });
63
+ // Forward signals for clean exit
64
+ const cleanup = () => {
65
+ child.kill("SIGTERM");
66
+ process.exit(0);
67
+ };
68
+ process.on("SIGINT", cleanup);
69
+ process.on("SIGTERM", cleanup);
70
+ child.on("error", (err) => {
71
+ logger.error(`Failed to tail log file: ${err.message}`);
72
+ process.exit(1);
73
+ });
74
+ child.on("exit", (code) => {
75
+ process.exit(code ?? 0);
76
+ });
77
+ }
78
+ /** Fetch logs from the agent and print them */
79
+ async function showApiLogs(lines) {
80
+ const config = readBlockclawConfig();
81
+ const agentConfig = readAgentConfig();
82
+ const apiPort = config.api_port ?? agentConfig?.api_port ?? 8080;
83
+ const client = new AgentClient(`http://localhost:${apiPort}`);
84
+ const entries = await client.logs();
85
+ if (!entries || entries.length === 0) {
86
+ logger.info("No log entries returned from agent API.");
87
+ return;
88
+ }
89
+ // Take the last N entries
90
+ const tail = entries.slice(-lines);
91
+ for (const entry of tail) {
92
+ const ts = new Date(entry.timestamp * 1000).toISOString();
93
+ const level = entry.level.toUpperCase().padEnd(5);
94
+ const mod = entry.module ? `[${entry.module}] ` : "";
95
+ console.log(`${ts} ${level} ${mod}${entry.message}`);
96
+ }
97
+ }
98
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/interface/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ export declare function showMenu(program: Command): Promise<void>;
3
+ export declare function register(program: Command): void;
4
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/interface/commands/menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoIzC,wBAAsB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0D9D;AAMD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO/C"}
@@ -0,0 +1,156 @@
1
+ import * as p from "@clack/prompts";
2
+ import pc from "picocolors";
3
+ import { printLogo } from "../logo.js";
4
+ // ---------------------------------------------------------------------------
5
+ // Menu definition
6
+ // ---------------------------------------------------------------------------
7
+ const MENU_ITEMS = [
8
+ { separator: true, label: pc.bold("Node") },
9
+ { value: "setup", label: "Setup wizard", hint: "First-time setup — get running in minutes" },
10
+ { value: "start", label: "Start node", hint: "Launch your Sequence0 node" },
11
+ { value: "stop", label: "Stop node", hint: "Gracefully shut down the node" },
12
+ { value: "status", label: "Node status", hint: "Health overview" },
13
+ { value: "doctor", label: "Run health check", hint: "Check configuration and connectivity" },
14
+ { separator: true, label: pc.bold("Wallets") },
15
+ { value: "wallet-create", label: "Create wallet", hint: "Works on all 81 supported chains" },
16
+ { value: "send", label: "Send crypto", hint: "Sign and send a transaction" },
17
+ { value: "wallet-balance", label: "Check balance", hint: "View wallet balances" },
18
+ { value: "receive", label: "Receive (show address)", hint: "Display wallet address" },
19
+ { value: "wallet-export", label: "Export wallet info", hint: "Save or copy public wallet details" },
20
+ { value: "history", label: "Transaction history", hint: "View past transactions" },
21
+ { separator: true, label: pc.bold("Earnings") },
22
+ { value: "register", label: "Register node", hint: "Start earning signing fees" },
23
+ { value: "earnings", label: "View earnings", hint: "Your earnings and statistics" },
24
+ { value: "withdraw", label: "Withdraw earnings", hint: "Claim your accumulated signing fees" },
25
+ { separator: true, label: pc.bold("Settings") },
26
+ { value: "service", label: "Install as service", hint: "Run your node on startup automatically" },
27
+ { value: "config", label: "Configuration", hint: "View or edit config" },
28
+ { value: "backup", label: "Backup node", hint: "Back up key shares and configuration" },
29
+ { value: "restore", label: "Restore from backup", hint: "Restore key shares from a backup file" },
30
+ { value: "webhook", label: "Set up notifications", hint: "Get alerts when something needs attention" },
31
+ { value: "ask", label: "Ask AI a question", hint: "Natural language interface" },
32
+ { separator: true, label: "" },
33
+ { value: "exit", label: "Exit" },
34
+ ];
35
+ // ---------------------------------------------------------------------------
36
+ // Command-to-argv mapping
37
+ // ---------------------------------------------------------------------------
38
+ const COMMAND_ARGV = {
39
+ setup: ["setup"],
40
+ start: ["start"],
41
+ stop: ["stop"],
42
+ status: ["status"],
43
+ doctor: ["doctor"],
44
+ "wallet-create": ["wallet", "create"],
45
+ send: ["send"],
46
+ "wallet-balance": ["wallet", "balance"],
47
+ receive: ["wallet", "receive"],
48
+ "wallet-export": ["wallet", "export"],
49
+ history: ["wallet", "history"],
50
+ register: ["register"],
51
+ earnings: ["earnings"],
52
+ withdraw: ["withdraw"],
53
+ service: ["service", "install"],
54
+ config: ["config", "show"],
55
+ backup: ["backup"],
56
+ restore: ["restore"],
57
+ webhook: ["webhook"],
58
+ ask: ["ask"],
59
+ };
60
+ // ---------------------------------------------------------------------------
61
+ // Build select options from menu items
62
+ // ---------------------------------------------------------------------------
63
+ function buildSelectOptions() {
64
+ const options = [];
65
+ for (const item of MENU_ITEMS) {
66
+ if ("separator" in item && item.separator) {
67
+ // @clack/prompts supports separator-like entries via the `group` API,
68
+ // but for p.select we use a visual label prefix approach.
69
+ // We'll add a disabled-looking separator option.
70
+ if (item.label) {
71
+ options.push({
72
+ value: `__sep_${options.length}`,
73
+ label: `${pc.dim("---")} ${item.label}`,
74
+ });
75
+ }
76
+ else {
77
+ options.push({
78
+ value: `__sep_${options.length}`,
79
+ label: pc.dim("───────────────"),
80
+ });
81
+ }
82
+ continue;
83
+ }
84
+ const opt = item;
85
+ options.push({
86
+ value: opt.value,
87
+ label: ` ${opt.label}`,
88
+ hint: opt.hint,
89
+ });
90
+ }
91
+ return options;
92
+ }
93
+ // ---------------------------------------------------------------------------
94
+ // showMenu — Exported for use in index.ts
95
+ // ---------------------------------------------------------------------------
96
+ export async function showMenu(program) {
97
+ // Header
98
+ printLogo();
99
+ const options = buildSelectOptions();
100
+ while (true) {
101
+ const selected = await p.select({
102
+ message: "What would you like to do?",
103
+ options,
104
+ });
105
+ if (p.isCancel(selected)) {
106
+ p.cancel("Goodbye.");
107
+ process.exit(0);
108
+ }
109
+ const choice = selected;
110
+ // Skip separator selections
111
+ if (choice.startsWith("__sep_")) {
112
+ continue;
113
+ }
114
+ // Exit
115
+ if (choice === "exit") {
116
+ p.outro(pc.dim("Goodbye."));
117
+ process.exit(0);
118
+ }
119
+ // Map to command argv and execute
120
+ const argv = COMMAND_ARGV[choice];
121
+ if (!argv) {
122
+ p.log.error(`Unknown command: ${choice}`);
123
+ continue;
124
+ }
125
+ // Execute the command by parsing with the mapped argv
126
+ try {
127
+ process.argv = ["node", "blockclaw", ...argv];
128
+ await program.parseAsync(process.argv);
129
+ }
130
+ catch {
131
+ // Errors are already handled by individual commands
132
+ }
133
+ // Offer to return to menu
134
+ console.log();
135
+ const again = await p.confirm({
136
+ message: "Return to menu?",
137
+ });
138
+ if (p.isCancel(again) || !again) {
139
+ p.outro(pc.dim("Goodbye."));
140
+ process.exit(0);
141
+ }
142
+ console.log();
143
+ }
144
+ }
145
+ // ---------------------------------------------------------------------------
146
+ // register — adds a "menu" command (mostly for internal use)
147
+ // ---------------------------------------------------------------------------
148
+ export function register(program) {
149
+ program
150
+ .command("menu")
151
+ .description("Show interactive menu")
152
+ .action(async () => {
153
+ await showMenu(program);
154
+ });
155
+ }
156
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/interface/commands/menu.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmBvC,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,UAAU,GAAe;IAC7B,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;IAC3C,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,2CAA2C,EAAE;IAC5F,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,4BAA4B,EAAE;IAC3E,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,+BAA+B,EAAE;IAC5E,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAClE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,sCAAsC,EAAE;IAE5F,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;IAC9C,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,kCAAkC,EAAE;IAC5F,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,6BAA6B,EAAE;IAC5E,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,sBAAsB,EAAE;IACjF,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,wBAAwB,EAAE;IACrF,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,oCAAoC,EAAE;IACnG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,wBAAwB,EAAE;IAElF,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;IAC/C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,4BAA4B,EAAE;IACjF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,8BAA8B,EAAE;IACnF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,qCAAqC,EAAE;IAE9F,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;IAC/C,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,wCAAwC,EAAE;IACjG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,qBAAqB,EAAE;IACxE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,sCAAsC,EAAE;IACvF,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,uCAAuC,EAAE;IACjG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,2CAA2C,EAAE;IACtG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,4BAA4B,EAAE;IAEhF,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;CACjC,CAAC;AAEF,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,YAAY,GAA6B;IAC7C,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACrC,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,gBAAgB,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IACvC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC9B,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACrC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC9B,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,GAAG,EAAE,CAAC,KAAK,CAAC;CACb,CAAC;AAEF,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,SAAS,kBAAkB;IAKzB,MAAM,OAAO,GAA2D,EAAE,CAAC;IAE3E,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,sEAAsE;YACtE,0DAA0D;YAC1D,iDAAiD;YACjD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE;oBAChC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;iBACxC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE;oBAChC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC;iBACjC,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,IAAkB,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,KAAK,GAAG,CAAC,KAAK,EAAE;YACvB,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAgB;IAC7C,SAAS;IACT,SAAS,EAAE,CAAC;IAEZ,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IAErC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,4BAA4B;YACrC,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,QAAkB,CAAC;QAElC,4BAA4B;QAC5B,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QAED,OAAO;QACP,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kCAAkC;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;YAC9C,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;QAED,0BAA0B;QAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;YAC5B,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function register(program: Command): void;
3
+ //# sourceMappingURL=receive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receive.d.ts","sourceRoot":"","sources":["../../../src/interface/commands/receive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkF/C"}