@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.
- package/README.md +97 -0
- package/dist/agent/binary.d.ts +15 -0
- package/dist/agent/binary.d.ts.map +1 -0
- package/dist/agent/binary.js +172 -0
- package/dist/agent/binary.js.map +1 -0
- package/dist/agent/chains.d.ts +26 -0
- package/dist/agent/chains.d.ts.map +1 -0
- package/dist/agent/chains.js +123 -0
- package/dist/agent/chains.js.map +1 -0
- package/dist/agent/client.d.ts +484 -0
- package/dist/agent/client.d.ts.map +1 -0
- package/dist/agent/client.js +448 -0
- package/dist/agent/client.js.map +1 -0
- package/dist/agent/config.d.ts +75 -0
- package/dist/agent/config.d.ts.map +1 -0
- package/dist/agent/config.js +133 -0
- package/dist/agent/config.js.map +1 -0
- package/dist/agent/process.d.ts +36 -0
- package/dist/agent/process.d.ts.map +1 -0
- package/dist/agent/process.js +208 -0
- package/dist/agent/process.js.map +1 -0
- package/dist/agent/wallet.d.ts +43 -0
- package/dist/agent/wallet.d.ts.map +1 -0
- package/dist/agent/wallet.js +146 -0
- package/dist/agent/wallet.js.map +1 -0
- package/dist/ai/brain.d.ts +21 -0
- package/dist/ai/brain.d.ts.map +1 -0
- package/dist/ai/brain.js +117 -0
- package/dist/ai/brain.js.map +1 -0
- package/dist/ai/prompts.d.ts +15 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +67 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/rules.d.ts +19 -0
- package/dist/ai/rules.d.ts.map +1 -0
- package/dist/ai/rules.js +143 -0
- package/dist/ai/rules.js.map +1 -0
- package/dist/core/detector.d.ts +16 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +90 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/healer.d.ts +62 -0
- package/dist/core/healer.d.ts.map +1 -0
- package/dist/core/healer.js +355 -0
- package/dist/core/healer.js.map +1 -0
- package/dist/core/heartbeat.d.ts +67 -0
- package/dist/core/heartbeat.d.ts.map +1 -0
- package/dist/core/heartbeat.js +426 -0
- package/dist/core/heartbeat.js.map +1 -0
- package/dist/core/memory.d.ts +57 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +149 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/updater.d.ts +16 -0
- package/dist/core/updater.d.ts.map +1 -0
- package/dist/core/updater.js +107 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/interface/commands/ask.d.ts +3 -0
- package/dist/interface/commands/ask.d.ts.map +1 -0
- package/dist/interface/commands/ask.js +39 -0
- package/dist/interface/commands/ask.js.map +1 -0
- package/dist/interface/commands/backup.d.ts +3 -0
- package/dist/interface/commands/backup.d.ts.map +1 -0
- package/dist/interface/commands/backup.js +576 -0
- package/dist/interface/commands/backup.js.map +1 -0
- package/dist/interface/commands/config.d.ts +3 -0
- package/dist/interface/commands/config.d.ts.map +1 -0
- package/dist/interface/commands/config.js +107 -0
- package/dist/interface/commands/config.js.map +1 -0
- package/dist/interface/commands/daemon.d.ts +3 -0
- package/dist/interface/commands/daemon.d.ts.map +1 -0
- package/dist/interface/commands/daemon.js +162 -0
- package/dist/interface/commands/daemon.js.map +1 -0
- package/dist/interface/commands/doctor.d.ts +3 -0
- package/dist/interface/commands/doctor.d.ts.map +1 -0
- package/dist/interface/commands/doctor.js +143 -0
- package/dist/interface/commands/doctor.js.map +1 -0
- package/dist/interface/commands/earnings.d.ts +3 -0
- package/dist/interface/commands/earnings.d.ts.map +1 -0
- package/dist/interface/commands/earnings.js +165 -0
- package/dist/interface/commands/earnings.js.map +1 -0
- package/dist/interface/commands/health.d.ts +3 -0
- package/dist/interface/commands/health.d.ts.map +1 -0
- package/dist/interface/commands/health.js +48 -0
- package/dist/interface/commands/health.js.map +1 -0
- package/dist/interface/commands/history.d.ts +3 -0
- package/dist/interface/commands/history.d.ts.map +1 -0
- package/dist/interface/commands/history.js +113 -0
- package/dist/interface/commands/history.js.map +1 -0
- package/dist/interface/commands/info.d.ts +3 -0
- package/dist/interface/commands/info.d.ts.map +1 -0
- package/dist/interface/commands/info.js +82 -0
- package/dist/interface/commands/info.js.map +1 -0
- package/dist/interface/commands/logs.d.ts +3 -0
- package/dist/interface/commands/logs.d.ts.map +1 -0
- package/dist/interface/commands/logs.js +98 -0
- package/dist/interface/commands/logs.js.map +1 -0
- package/dist/interface/commands/menu.d.ts +4 -0
- package/dist/interface/commands/menu.d.ts.map +1 -0
- package/dist/interface/commands/menu.js +156 -0
- package/dist/interface/commands/menu.js.map +1 -0
- package/dist/interface/commands/receive.d.ts +3 -0
- package/dist/interface/commands/receive.d.ts.map +1 -0
- package/dist/interface/commands/receive.js +81 -0
- package/dist/interface/commands/receive.js.map +1 -0
- package/dist/interface/commands/register.d.ts +3 -0
- package/dist/interface/commands/register.d.ts.map +1 -0
- package/dist/interface/commands/register.js +231 -0
- package/dist/interface/commands/register.js.map +1 -0
- package/dist/interface/commands/restart.d.ts +3 -0
- package/dist/interface/commands/restart.d.ts.map +1 -0
- package/dist/interface/commands/restart.js +154 -0
- package/dist/interface/commands/restart.js.map +1 -0
- package/dist/interface/commands/send.d.ts +3 -0
- package/dist/interface/commands/send.d.ts.map +1 -0
- package/dist/interface/commands/send.js +108 -0
- package/dist/interface/commands/send.js.map +1 -0
- package/dist/interface/commands/service.d.ts +3 -0
- package/dist/interface/commands/service.d.ts.map +1 -0
- package/dist/interface/commands/service.js +474 -0
- package/dist/interface/commands/service.js.map +1 -0
- package/dist/interface/commands/setup.d.ts +5 -0
- package/dist/interface/commands/setup.d.ts.map +1 -0
- package/dist/interface/commands/setup.js +410 -0
- package/dist/interface/commands/setup.js.map +1 -0
- package/dist/interface/commands/start.d.ts +3 -0
- package/dist/interface/commands/start.d.ts.map +1 -0
- package/dist/interface/commands/start.js +171 -0
- package/dist/interface/commands/start.js.map +1 -0
- package/dist/interface/commands/status.d.ts +3 -0
- package/dist/interface/commands/status.d.ts.map +1 -0
- package/dist/interface/commands/status.js +77 -0
- package/dist/interface/commands/status.js.map +1 -0
- package/dist/interface/commands/stop.d.ts +3 -0
- package/dist/interface/commands/stop.d.ts.map +1 -0
- package/dist/interface/commands/stop.js +62 -0
- package/dist/interface/commands/stop.js.map +1 -0
- package/dist/interface/commands/update.d.ts +3 -0
- package/dist/interface/commands/update.d.ts.map +1 -0
- package/dist/interface/commands/update.js +53 -0
- package/dist/interface/commands/update.js.map +1 -0
- package/dist/interface/commands/wallet.d.ts +3 -0
- package/dist/interface/commands/wallet.d.ts.map +1 -0
- package/dist/interface/commands/wallet.js +446 -0
- package/dist/interface/commands/wallet.js.map +1 -0
- package/dist/interface/commands/webhook.d.ts +3 -0
- package/dist/interface/commands/webhook.d.ts.map +1 -0
- package/dist/interface/commands/webhook.js +99 -0
- package/dist/interface/commands/webhook.js.map +1 -0
- package/dist/interface/commands/withdraw.d.ts +3 -0
- package/dist/interface/commands/withdraw.d.ts.map +1 -0
- package/dist/interface/commands/withdraw.js +261 -0
- package/dist/interface/commands/withdraw.js.map +1 -0
- package/dist/interface/interactive.d.ts +43 -0
- package/dist/interface/interactive.d.ts.map +1 -0
- package/dist/interface/interactive.js +276 -0
- package/dist/interface/interactive.js.map +1 -0
- package/dist/interface/logo.d.ts +2 -0
- package/dist/interface/logo.d.ts.map +1 -0
- package/dist/interface/logo.js +21 -0
- package/dist/interface/logo.js.map +1 -0
- package/dist/interface/webhooks.d.ts +19 -0
- package/dist/interface/webhooks.d.ts.map +1 -0
- package/dist/interface/webhooks.js +172 -0
- package/dist/interface/webhooks.js.map +1 -0
- package/dist/utils/format.d.ts +19 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +107 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +35 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +45 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/platform.d.ts +26 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +72 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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"}
|