@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,19 @@
|
|
|
1
|
+
export interface WebhookConfig {
|
|
2
|
+
id: string;
|
|
3
|
+
type: "discord" | "telegram" | "slack" | "custom";
|
|
4
|
+
url: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
/** Event types to listen for (empty = all) */
|
|
7
|
+
events?: string[];
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
createdAt: number;
|
|
10
|
+
}
|
|
11
|
+
/** Load webhooks from file */
|
|
12
|
+
export declare function loadWebhooks(): WebhookConfig[];
|
|
13
|
+
/** Add a webhook */
|
|
14
|
+
export declare function addWebhook(config: Omit<WebhookConfig, "id" | "createdAt" | "enabled">): WebhookConfig;
|
|
15
|
+
/** Remove a webhook by ID */
|
|
16
|
+
export declare function removeWebhook(id: string): boolean;
|
|
17
|
+
/** Dispatch an event to all matching webhooks */
|
|
18
|
+
export declare function dispatchEvent(eventType: string, message: string, details?: Record<string, unknown>): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=webhooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/interface/webhooks.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,8BAA8B;AAC9B,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAQ9C;AAwED,oBAAoB;AACpB,wBAAgB,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,GAAG,SAAS,CAAC,GAAG,aAAa,CAarG;AAED,6BAA6B;AAC7B,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED,iDAAiD;AACjD,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAef"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { WEBHOOKS_FILE, ensureBlockclawDir } from "../utils/paths.js";
|
|
3
|
+
import { logger } from "../utils/logger.js";
|
|
4
|
+
/** Load webhooks from file */
|
|
5
|
+
export function loadWebhooks() {
|
|
6
|
+
try {
|
|
7
|
+
const content = fs.readFileSync(WEBHOOKS_FILE, "utf8");
|
|
8
|
+
const store = JSON.parse(content);
|
|
9
|
+
return store.webhooks ?? [];
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Save webhooks to file */
|
|
16
|
+
function saveWebhooks(webhooks) {
|
|
17
|
+
ensureBlockclawDir();
|
|
18
|
+
const store = { webhooks };
|
|
19
|
+
fs.writeFileSync(WEBHOOKS_FILE, JSON.stringify(store, null, 2), "utf8");
|
|
20
|
+
}
|
|
21
|
+
/** Validate that a webhook URL does not target private/loopback addresses (SSRF protection) */
|
|
22
|
+
function validateWebhookUrl(url) {
|
|
23
|
+
let parsed;
|
|
24
|
+
try {
|
|
25
|
+
parsed = new URL(url);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error("Invalid webhook URL");
|
|
29
|
+
}
|
|
30
|
+
// Only allow http and https schemes
|
|
31
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
32
|
+
throw new Error("Webhook URL must use http or https protocol");
|
|
33
|
+
}
|
|
34
|
+
const hostname = parsed.hostname.toLowerCase();
|
|
35
|
+
// Block loopback addresses
|
|
36
|
+
if (hostname === "localhost" ||
|
|
37
|
+
hostname === "127.0.0.1" ||
|
|
38
|
+
hostname === "0.0.0.0" ||
|
|
39
|
+
hostname === "[::1]" ||
|
|
40
|
+
hostname === "::1") {
|
|
41
|
+
throw new Error("Webhook URL must not target loopback addresses (localhost, 127.0.0.1, ::1)");
|
|
42
|
+
}
|
|
43
|
+
// Block private IPv4 ranges
|
|
44
|
+
// 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16 (link-local)
|
|
45
|
+
const ipv4Match = hostname.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
|
|
46
|
+
if (ipv4Match) {
|
|
47
|
+
const [, a, b] = ipv4Match.map(Number);
|
|
48
|
+
if (a === 10 ||
|
|
49
|
+
(a === 172 && b >= 16 && b <= 31) ||
|
|
50
|
+
(a === 192 && b === 168) ||
|
|
51
|
+
(a === 169 && b === 254) ||
|
|
52
|
+
a === 127) {
|
|
53
|
+
throw new Error("Webhook URL must not target private or internal IP addresses");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Block IPv6 private/link-local (bracketed form in URLs)
|
|
57
|
+
// Covers [::1], [fc00::], [fd00::], [fe80::], [::ffff:127.x], [::ffff:10.x], etc.
|
|
58
|
+
const ipv6Bracket = hostname.match(/^\[(.+)\]$/);
|
|
59
|
+
if (ipv6Bracket) {
|
|
60
|
+
const addr = ipv6Bracket[1].toLowerCase();
|
|
61
|
+
if (addr === "::1" ||
|
|
62
|
+
addr.startsWith("fc") ||
|
|
63
|
+
addr.startsWith("fd") ||
|
|
64
|
+
addr.startsWith("fe80") ||
|
|
65
|
+
addr.startsWith("::ffff:127.") ||
|
|
66
|
+
addr.startsWith("::ffff:10.") ||
|
|
67
|
+
addr.startsWith("::ffff:192.168.") ||
|
|
68
|
+
/^::ffff:172\.(1[6-9]|2\d|3[01])\./.test(addr)) {
|
|
69
|
+
throw new Error("Webhook URL must not target private or internal IP addresses");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Add a webhook */
|
|
74
|
+
export function addWebhook(config) {
|
|
75
|
+
validateWebhookUrl(config.url);
|
|
76
|
+
const webhooks = loadWebhooks();
|
|
77
|
+
const webhook = {
|
|
78
|
+
...config,
|
|
79
|
+
id: `wh-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
|
|
80
|
+
enabled: true,
|
|
81
|
+
createdAt: Date.now(),
|
|
82
|
+
};
|
|
83
|
+
webhooks.push(webhook);
|
|
84
|
+
saveWebhooks(webhooks);
|
|
85
|
+
return webhook;
|
|
86
|
+
}
|
|
87
|
+
/** Remove a webhook by ID */
|
|
88
|
+
export function removeWebhook(id) {
|
|
89
|
+
const webhooks = loadWebhooks();
|
|
90
|
+
const filtered = webhooks.filter((w) => w.id !== id);
|
|
91
|
+
if (filtered.length === webhooks.length)
|
|
92
|
+
return false;
|
|
93
|
+
saveWebhooks(filtered);
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
/** Dispatch an event to all matching webhooks */
|
|
97
|
+
export async function dispatchEvent(eventType, message, details) {
|
|
98
|
+
const webhooks = loadWebhooks().filter((w) => {
|
|
99
|
+
if (!w.enabled)
|
|
100
|
+
return false;
|
|
101
|
+
if (w.events && w.events.length > 0 && !w.events.includes(eventType))
|
|
102
|
+
return false;
|
|
103
|
+
return true;
|
|
104
|
+
});
|
|
105
|
+
const promises = webhooks.map((w) => sendWebhook(w, eventType, message, details));
|
|
106
|
+
const results = await Promise.allSettled(promises);
|
|
107
|
+
for (let i = 0; i < results.length; i++) {
|
|
108
|
+
if (results[i].status === "rejected") {
|
|
109
|
+
logger.debug(`Webhook ${webhooks[i].id} failed: ${results[i].reason}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** Send a message to a single webhook */
|
|
114
|
+
async function sendWebhook(webhook, eventType, message, details) {
|
|
115
|
+
let body;
|
|
116
|
+
switch (webhook.type) {
|
|
117
|
+
case "discord":
|
|
118
|
+
body = JSON.stringify({
|
|
119
|
+
embeds: [{
|
|
120
|
+
title: `BlockClaw: ${eventType}`,
|
|
121
|
+
description: message,
|
|
122
|
+
color: eventType.includes("critical") || eventType.includes("down") ? 0xFF0000 :
|
|
123
|
+
eventType.includes("warn") ? 0xFFA500 : 0x00FF00,
|
|
124
|
+
fields: details ? Object.entries(details).map(([name, value]) => ({
|
|
125
|
+
name,
|
|
126
|
+
value: String(value),
|
|
127
|
+
inline: true,
|
|
128
|
+
})) : [],
|
|
129
|
+
timestamp: new Date().toISOString(),
|
|
130
|
+
footer: { text: "BlockClaw Agent Monitor" },
|
|
131
|
+
}],
|
|
132
|
+
});
|
|
133
|
+
break;
|
|
134
|
+
case "telegram":
|
|
135
|
+
// URL format: https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>
|
|
136
|
+
body = JSON.stringify({
|
|
137
|
+
text: `*BlockClaw: ${eventType}*\n${message}${details ? "\n" + Object.entries(details).map(([k, v]) => `• ${k}: ${v}`).join("\n") : ""}`,
|
|
138
|
+
parse_mode: "Markdown",
|
|
139
|
+
});
|
|
140
|
+
break;
|
|
141
|
+
case "slack":
|
|
142
|
+
body = JSON.stringify({
|
|
143
|
+
text: `*BlockClaw: ${eventType}*\n${message}`,
|
|
144
|
+
attachments: details ? [{
|
|
145
|
+
fields: Object.entries(details).map(([title, value]) => ({
|
|
146
|
+
title,
|
|
147
|
+
value: String(value),
|
|
148
|
+
short: true,
|
|
149
|
+
})),
|
|
150
|
+
}] : [],
|
|
151
|
+
});
|
|
152
|
+
break;
|
|
153
|
+
default:
|
|
154
|
+
body = JSON.stringify({
|
|
155
|
+
event: eventType,
|
|
156
|
+
message,
|
|
157
|
+
details,
|
|
158
|
+
timestamp: new Date().toISOString(),
|
|
159
|
+
source: "blockclaw",
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
const response = await fetch(webhook.url, {
|
|
163
|
+
method: "POST",
|
|
164
|
+
headers: { "Content-Type": "application/json" },
|
|
165
|
+
body,
|
|
166
|
+
signal: AbortSignal.timeout(10000),
|
|
167
|
+
});
|
|
168
|
+
if (!response.ok) {
|
|
169
|
+
throw new Error(`HTTP ${response.status}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/interface/webhooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Format bytes to human readable */
|
|
2
|
+
export declare function formatBytes(bytes: number): string;
|
|
3
|
+
/** Format seconds to human readable duration */
|
|
4
|
+
export declare function formatDuration(seconds: number): string;
|
|
5
|
+
/** Format a timestamp to relative time */
|
|
6
|
+
export declare function formatRelative(ts: number): string;
|
|
7
|
+
/** Color a health status */
|
|
8
|
+
export declare function colorStatus(status: string): string;
|
|
9
|
+
/** Print a simple table */
|
|
10
|
+
export declare function printTable(headers: string[], rows: string[][], colWidths?: number[]): void;
|
|
11
|
+
/** Create a simple spinner */
|
|
12
|
+
export declare function createSpinner(text: string): {
|
|
13
|
+
stop: (finalText?: string) => void;
|
|
14
|
+
};
|
|
15
|
+
/** Truncate a string with ellipsis */
|
|
16
|
+
export declare function truncate(s: string, maxLen: number): string;
|
|
17
|
+
/** Format a wallet address (truncated) */
|
|
18
|
+
export declare function formatAddress(addr: string): string;
|
|
19
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAEA,qCAAqC;AACrC,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAqBlD;AAED,2BAA2B;AAC3B,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAoB1F;AAOD,8BAA8B;AAC9B,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,CAalF;AAED,sCAAsC;AACtC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGlD"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
/** Format bytes to human readable */
|
|
3
|
+
export function formatBytes(bytes) {
|
|
4
|
+
if (bytes === 0)
|
|
5
|
+
return "0 B";
|
|
6
|
+
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
7
|
+
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
|
8
|
+
return `${(bytes / Math.pow(1024, i)).toFixed(1)} ${units[i]}`;
|
|
9
|
+
}
|
|
10
|
+
/** Format seconds to human readable duration */
|
|
11
|
+
export function formatDuration(seconds) {
|
|
12
|
+
if (seconds < 60)
|
|
13
|
+
return `${Math.floor(seconds)}s`;
|
|
14
|
+
if (seconds < 3600)
|
|
15
|
+
return `${Math.floor(seconds / 60)}m ${Math.floor(seconds % 60)}s`;
|
|
16
|
+
const h = Math.floor(seconds / 3600);
|
|
17
|
+
const m = Math.floor((seconds % 3600) / 60);
|
|
18
|
+
if (h < 24)
|
|
19
|
+
return `${h}h ${m}m`;
|
|
20
|
+
const d = Math.floor(h / 24);
|
|
21
|
+
return `${d}d ${h % 24}h ${m}m`;
|
|
22
|
+
}
|
|
23
|
+
/** Format a timestamp to relative time */
|
|
24
|
+
export function formatRelative(ts) {
|
|
25
|
+
const diff = (Date.now() - ts) / 1000;
|
|
26
|
+
if (diff < 60)
|
|
27
|
+
return "just now";
|
|
28
|
+
if (diff < 3600)
|
|
29
|
+
return `${Math.floor(diff / 60)}m ago`;
|
|
30
|
+
if (diff < 86400)
|
|
31
|
+
return `${Math.floor(diff / 3600)}h ago`;
|
|
32
|
+
return `${Math.floor(diff / 86400)}d ago`;
|
|
33
|
+
}
|
|
34
|
+
/** Color a health status */
|
|
35
|
+
export function colorStatus(status) {
|
|
36
|
+
switch (status.toLowerCase()) {
|
|
37
|
+
case "healthy":
|
|
38
|
+
case "running":
|
|
39
|
+
case "ok":
|
|
40
|
+
case "online":
|
|
41
|
+
return pc.green(status);
|
|
42
|
+
case "degraded":
|
|
43
|
+
case "warning":
|
|
44
|
+
return pc.yellow(status);
|
|
45
|
+
case "atrisk":
|
|
46
|
+
case "at_risk":
|
|
47
|
+
return pc.yellow(pc.bold(status));
|
|
48
|
+
case "critical":
|
|
49
|
+
case "error":
|
|
50
|
+
case "dead":
|
|
51
|
+
case "offline":
|
|
52
|
+
return pc.red(pc.bold(status));
|
|
53
|
+
default:
|
|
54
|
+
return pc.dim(status);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Print a simple table */
|
|
58
|
+
export function printTable(headers, rows, colWidths) {
|
|
59
|
+
const widths = colWidths ?? headers.map((h, i) => {
|
|
60
|
+
const maxRow = rows.reduce((max, row) => Math.max(max, stripAnsi(row[i] ?? "").length), 0);
|
|
61
|
+
return Math.max(h.length, maxRow) + 2;
|
|
62
|
+
});
|
|
63
|
+
// Header
|
|
64
|
+
const headerLine = headers.map((h, i) => pc.bold(h.padEnd(widths[i]))).join(" ");
|
|
65
|
+
console.log(` ${headerLine}`);
|
|
66
|
+
console.log(` ${widths.map(w => "─".repeat(w)).join("──")}`);
|
|
67
|
+
// Rows
|
|
68
|
+
for (const row of rows) {
|
|
69
|
+
const line = row.map((cell, i) => {
|
|
70
|
+
const stripped = stripAnsi(cell);
|
|
71
|
+
const pad = widths[i] - stripped.length;
|
|
72
|
+
return cell + " ".repeat(Math.max(0, pad));
|
|
73
|
+
}).join(" ");
|
|
74
|
+
console.log(` ${line}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Strip ANSI codes for width calculation */
|
|
78
|
+
function stripAnsi(s) {
|
|
79
|
+
return s.replace(/\x1b\[[0-9;]*m/g, "");
|
|
80
|
+
}
|
|
81
|
+
/** Create a simple spinner */
|
|
82
|
+
export function createSpinner(text) {
|
|
83
|
+
const frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
84
|
+
let i = 0;
|
|
85
|
+
const timer = setInterval(() => {
|
|
86
|
+
process.stdout.write(`\r ${pc.cyan(frames[i++ % frames.length])} ${text}`);
|
|
87
|
+
}, 80);
|
|
88
|
+
return {
|
|
89
|
+
stop(finalText) {
|
|
90
|
+
clearInterval(timer);
|
|
91
|
+
process.stdout.write(`\r ${pc.green("✓")} ${finalText ?? text}\n`);
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/** Truncate a string with ellipsis */
|
|
96
|
+
export function truncate(s, maxLen) {
|
|
97
|
+
if (s.length <= maxLen)
|
|
98
|
+
return s;
|
|
99
|
+
return s.slice(0, maxLen - 1) + "…";
|
|
100
|
+
}
|
|
101
|
+
/** Format a wallet address (truncated) */
|
|
102
|
+
export function formatAddress(addr) {
|
|
103
|
+
if (addr.length <= 14)
|
|
104
|
+
return addr;
|
|
105
|
+
return `${addr.slice(0, 6)}…${addr.slice(-4)}`;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type LogLevel = "debug" | "info" | "warn" | "error" | "success";
|
|
2
|
+
export declare function setVerbose(v: boolean): void;
|
|
3
|
+
export declare const logger: {
|
|
4
|
+
debug: (msg: string, ...args: unknown[]) => void;
|
|
5
|
+
info: (msg: string, ...args: unknown[]) => void;
|
|
6
|
+
warn: (msg: string, ...args: unknown[]) => void;
|
|
7
|
+
error: (msg: string, ...args: unknown[]) => void;
|
|
8
|
+
success: (msg: string, ...args: unknown[]) => void;
|
|
9
|
+
/** Print a blank line */
|
|
10
|
+
blank: () => void;
|
|
11
|
+
/** Print a header with the BlockClaw branding */
|
|
12
|
+
header: (text: string) => void;
|
|
13
|
+
/** Print a key-value pair */
|
|
14
|
+
kv: (key: string, value: string | number, color?: (s: string) => string) => void;
|
|
15
|
+
/** Print a separator line */
|
|
16
|
+
separator: () => void;
|
|
17
|
+
/** Print a step in a process */
|
|
18
|
+
step: (n: number, total: number, msg: string) => void;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAIvE,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAE3C;AAgBD,eAAO,MAAM,MAAM;iBACJ,MAAM,WAAW,OAAO,EAAE;gBAC3B,MAAM,WAAW,OAAO,EAAE;gBAC1B,MAAM,WAAW,OAAO,EAAE;iBACzB,MAAM,WAAW,OAAO,EAAE;mBACxB,MAAM,WAAW,OAAO,EAAE;IAEzC,yBAAyB;;IAGzB,iDAAiD;mBAClC,MAAM;IAMrB,6BAA6B;cACnB,MAAM,SAAS,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM;IAKvE,6BAA6B;;IAK7B,gCAAgC;cACtB,MAAM,SAAS,MAAM,OAAO,MAAM;CAG7C,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
let verbose = false;
|
|
3
|
+
export function setVerbose(v) {
|
|
4
|
+
verbose = v;
|
|
5
|
+
}
|
|
6
|
+
const PREFIXES = {
|
|
7
|
+
debug: pc.dim(" [debug]"),
|
|
8
|
+
info: pc.blue(" [info]"),
|
|
9
|
+
warn: pc.yellow(" [warn]"),
|
|
10
|
+
error: pc.red(" [error]"),
|
|
11
|
+
success: pc.green(" [ok]"),
|
|
12
|
+
};
|
|
13
|
+
function log(level, msg, ...args) {
|
|
14
|
+
if (level === "debug" && !verbose)
|
|
15
|
+
return;
|
|
16
|
+
const prefix = PREFIXES[level];
|
|
17
|
+
console.log(`${prefix} ${msg}`, ...args);
|
|
18
|
+
}
|
|
19
|
+
export const logger = {
|
|
20
|
+
debug: (msg, ...args) => log("debug", msg, ...args),
|
|
21
|
+
info: (msg, ...args) => log("info", msg, ...args),
|
|
22
|
+
warn: (msg, ...args) => log("warn", msg, ...args),
|
|
23
|
+
error: (msg, ...args) => log("error", msg, ...args),
|
|
24
|
+
success: (msg, ...args) => log("success", msg, ...args),
|
|
25
|
+
/** Print a blank line */
|
|
26
|
+
blank: () => console.log(),
|
|
27
|
+
/** Print a header with the BlockClaw branding */
|
|
28
|
+
header: (text) => {
|
|
29
|
+
console.log();
|
|
30
|
+
console.log(` ${pc.bold(pc.cyan("BlockClaw"))} ${pc.dim("—")} ${text}`);
|
|
31
|
+
console.log();
|
|
32
|
+
},
|
|
33
|
+
/** Print a key-value pair */
|
|
34
|
+
kv: (key, value, color) => {
|
|
35
|
+
const val = color ? color(String(value)) : String(value);
|
|
36
|
+
console.log(` ${pc.dim(key.padEnd(20))} ${val}`);
|
|
37
|
+
},
|
|
38
|
+
/** Print a separator line */
|
|
39
|
+
separator: () => {
|
|
40
|
+
console.log(pc.dim(" " + "─".repeat(50)));
|
|
41
|
+
},
|
|
42
|
+
/** Print a step in a process */
|
|
43
|
+
step: (n, total, msg) => {
|
|
44
|
+
console.log(` ${pc.dim(`[${n}/${total}]`)} ${msg}`);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Root data directory for the Sequence0 agent */
|
|
2
|
+
export declare const SEQUENCE0_DIR: string;
|
|
3
|
+
/** BlockClaw-specific data directory */
|
|
4
|
+
export declare const BLOCKCLAW_DIR: string;
|
|
5
|
+
/** Agent binary install location */
|
|
6
|
+
export declare const BIN_DIR: string;
|
|
7
|
+
/** Agent data directory */
|
|
8
|
+
export declare const DATA_DIR: string;
|
|
9
|
+
/** Agent log file */
|
|
10
|
+
export declare const AGENT_LOG: string;
|
|
11
|
+
/** BlockClaw config file */
|
|
12
|
+
export declare const BLOCKCLAW_CONFIG: string;
|
|
13
|
+
/** Agent config file */
|
|
14
|
+
export declare const AGENT_CONFIG: string;
|
|
15
|
+
/** Persistent memory (issues, patterns, learnings) */
|
|
16
|
+
export declare const MEMORY_FILE: string;
|
|
17
|
+
/** Event history log */
|
|
18
|
+
export declare const EVENTS_LOG: string;
|
|
19
|
+
/** Daemon PID file (legacy, do not use directly) */
|
|
20
|
+
export declare const PID_FILE: string;
|
|
21
|
+
/** Agent process PID file */
|
|
22
|
+
export declare const AGENT_PID_FILE: string;
|
|
23
|
+
/** Daemon/monitor process PID file */
|
|
24
|
+
export declare const DAEMON_PID_FILE: string;
|
|
25
|
+
/** Unix domain socket for agent IPC (preferred over TCP) */
|
|
26
|
+
export declare const AGENT_SOCKET: string;
|
|
27
|
+
/** Webhook configurations */
|
|
28
|
+
export declare const WEBHOOKS_FILE: string;
|
|
29
|
+
/** Install server URL */
|
|
30
|
+
export declare const INSTALL_URL = "https://install.sequence0.network";
|
|
31
|
+
/** Ensure a directory exists */
|
|
32
|
+
export declare function ensureDir(dir: string): void;
|
|
33
|
+
/** Ensure BlockClaw data directory exists */
|
|
34
|
+
export declare function ensureBlockclawDir(): void;
|
|
35
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAMA,kDAAkD;AAClD,eAAO,MAAM,aAAa,QAAgC,CAAC;AAE3D,wCAAwC;AACxC,eAAO,MAAM,aAAa,QAAwC,CAAC;AAEnE,oCAAoC;AACpC,eAAO,MAAM,OAAO,QAAkC,CAAC;AAEvD,2BAA2B;AAC3B,eAAO,MAAM,QAAQ,QAAmC,CAAC;AAEzD,qBAAqB;AACrB,eAAO,MAAM,SAAS,QAAwC,CAAC;AAE/D,4BAA4B;AAC5B,eAAO,MAAM,gBAAgB,QAA0C,CAAC;AAExE,wBAAwB;AACxB,eAAO,MAAM,YAAY,QAA0C,CAAC;AAEpE,sDAAsD;AACtD,eAAO,MAAM,WAAW,QAA0C,CAAC;AAEnE,wBAAwB;AACxB,eAAO,MAAM,UAAU,QAAyC,CAAC;AAEjE,oDAAoD;AACpD,eAAO,MAAM,QAAQ,QAA4C,CAAC;AAElE,6BAA6B;AAC7B,eAAO,MAAM,cAAc,QAAkD,CAAC;AAE9E,sCAAsC;AACtC,eAAO,MAAM,eAAe,QAAmD,CAAC;AAEhF,4DAA4D;AAC5D,eAAO,MAAM,YAAY,QAAyC,CAAC;AAEnE,6BAA6B;AAC7B,eAAO,MAAM,aAAa,QAA4C,CAAC;AAEvE,yBAAyB;AACzB,eAAO,MAAM,WAAW,sCAAsC,CAAC;AAE/D,gCAAgC;AAChC,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
const HOME = os.homedir();
|
|
5
|
+
/** Root data directory for the Sequence0 agent */
|
|
6
|
+
export const SEQUENCE0_DIR = path.join(HOME, ".sequence0");
|
|
7
|
+
/** BlockClaw-specific data directory */
|
|
8
|
+
export const BLOCKCLAW_DIR = path.join(SEQUENCE0_DIR, "blockclaw");
|
|
9
|
+
/** Agent binary install location */
|
|
10
|
+
export const BIN_DIR = path.join(SEQUENCE0_DIR, "bin");
|
|
11
|
+
/** Agent data directory */
|
|
12
|
+
export const DATA_DIR = path.join(SEQUENCE0_DIR, "data");
|
|
13
|
+
/** Agent log file */
|
|
14
|
+
export const AGENT_LOG = path.join(SEQUENCE0_DIR, "agent.log");
|
|
15
|
+
/** BlockClaw config file */
|
|
16
|
+
export const BLOCKCLAW_CONFIG = path.join(BLOCKCLAW_DIR, "config.toml");
|
|
17
|
+
/** Agent config file */
|
|
18
|
+
export const AGENT_CONFIG = path.join(SEQUENCE0_DIR, "config.toml");
|
|
19
|
+
/** Persistent memory (issues, patterns, learnings) */
|
|
20
|
+
export const MEMORY_FILE = path.join(BLOCKCLAW_DIR, "memory.json");
|
|
21
|
+
/** Event history log */
|
|
22
|
+
export const EVENTS_LOG = path.join(BLOCKCLAW_DIR, "events.log");
|
|
23
|
+
/** Daemon PID file (legacy, do not use directly) */
|
|
24
|
+
export const PID_FILE = path.join(BLOCKCLAW_DIR, "blockclaw.pid");
|
|
25
|
+
/** Agent process PID file */
|
|
26
|
+
export const AGENT_PID_FILE = path.join(BLOCKCLAW_DIR, "blockclaw-agent.pid");
|
|
27
|
+
/** Daemon/monitor process PID file */
|
|
28
|
+
export const DAEMON_PID_FILE = path.join(BLOCKCLAW_DIR, "blockclaw-daemon.pid");
|
|
29
|
+
/** Unix domain socket for agent IPC (preferred over TCP) */
|
|
30
|
+
export const AGENT_SOCKET = path.join(SEQUENCE0_DIR, "agent.sock");
|
|
31
|
+
/** Webhook configurations */
|
|
32
|
+
export const WEBHOOKS_FILE = path.join(BLOCKCLAW_DIR, "webhooks.json");
|
|
33
|
+
/** Install server URL */
|
|
34
|
+
export const INSTALL_URL = "https://install.sequence0.network";
|
|
35
|
+
/** Ensure a directory exists */
|
|
36
|
+
export function ensureDir(dir) {
|
|
37
|
+
if (!fs.existsSync(dir)) {
|
|
38
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Ensure BlockClaw data directory exists */
|
|
42
|
+
export function ensureBlockclawDir() {
|
|
43
|
+
ensureDir(BLOCKCLAW_DIR);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;AAE1B,kDAAkD;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAE3D,wCAAwC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAEnE,oCAAoC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AAEvD,2BAA2B;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAEzD,qBAAqB;AACrB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAE/D,4BAA4B;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAExE,wBAAwB;AACxB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAEpE,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAEnE,wBAAwB;AACxB,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAEjE,oDAAoD;AACpD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAElE,6BAA6B;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;AAE9E,sCAAsC;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;AAEhF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAEnE,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAEvE,yBAAyB;AACzB,MAAM,CAAC,MAAM,WAAW,GAAG,mCAAmC,CAAC;AAE/D,gCAAgC;AAChC,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,kBAAkB;IAChC,SAAS,CAAC,aAAa,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type Platform = "darwin-arm64" | "darwin-x64" | "linux-x64" | "linux-arm64";
|
|
2
|
+
/** Get the current platform key */
|
|
3
|
+
export declare function getPlatformKey(): Platform;
|
|
4
|
+
/** Get the npm platform package name for the current platform */
|
|
5
|
+
export declare function getPlatformPackage(): string;
|
|
6
|
+
/** Get the binary filename for the install server */
|
|
7
|
+
export declare function getBinaryFilename(): string;
|
|
8
|
+
/** Get system info for diagnostics */
|
|
9
|
+
export declare function getSystemInfo(): {
|
|
10
|
+
platform: string;
|
|
11
|
+
arch: string;
|
|
12
|
+
nodeVersion: string;
|
|
13
|
+
hostname: string;
|
|
14
|
+
cpus: number;
|
|
15
|
+
totalMemoryGB: string;
|
|
16
|
+
freeMemoryGB: string;
|
|
17
|
+
uptime: string;
|
|
18
|
+
};
|
|
19
|
+
/** Get disk usage for a path (bytes) */
|
|
20
|
+
export declare function getDiskUsage(dir: string): Promise<{
|
|
21
|
+
total: number;
|
|
22
|
+
free: number;
|
|
23
|
+
used: number;
|
|
24
|
+
usedPercent: number;
|
|
25
|
+
}>;
|
|
26
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CAAC;AAkBnF,mCAAmC;AACnC,wBAAgB,cAAc,IAAI,QAAQ,CAOzC;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,sCAAsC;AACtC,wBAAgB,aAAa,IAAI;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAkBA;AAED,wCAAwC;AACxC,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB3H"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
const SUPPORTED_PLATFORMS = {
|
|
3
|
+
"darwin-arm64": "darwin-arm64",
|
|
4
|
+
"darwin-x64": "darwin-x64",
|
|
5
|
+
"linux-x64": "linux-x64",
|
|
6
|
+
"linux-arm64": "linux-arm64",
|
|
7
|
+
};
|
|
8
|
+
/** Internal npm platform packages — BlockClaw manages these automatically.
|
|
9
|
+
* Node runners should NOT install these directly; use `blockclaw setup` instead. */
|
|
10
|
+
const PLATFORM_PACKAGES = {
|
|
11
|
+
"darwin-arm64": "@sequence0/agent-darwin-arm64",
|
|
12
|
+
"darwin-x64": "@sequence0/agent-darwin-x64",
|
|
13
|
+
"linux-x64": "@sequence0/agent-linux-x64",
|
|
14
|
+
"linux-arm64": "@sequence0/agent-linux-arm64",
|
|
15
|
+
};
|
|
16
|
+
/** Get the current platform key */
|
|
17
|
+
export function getPlatformKey() {
|
|
18
|
+
const key = `${os.platform()}-${os.arch()}`;
|
|
19
|
+
const platform = SUPPORTED_PLATFORMS[key];
|
|
20
|
+
if (!platform) {
|
|
21
|
+
throw new Error(`Unsupported platform: ${key}. Supported: ${Object.keys(SUPPORTED_PLATFORMS).join(", ")}`);
|
|
22
|
+
}
|
|
23
|
+
return platform;
|
|
24
|
+
}
|
|
25
|
+
/** Get the npm platform package name for the current platform */
|
|
26
|
+
export function getPlatformPackage() {
|
|
27
|
+
return PLATFORM_PACKAGES[getPlatformKey()];
|
|
28
|
+
}
|
|
29
|
+
/** Get the binary filename for the install server */
|
|
30
|
+
export function getBinaryFilename() {
|
|
31
|
+
return `sequence0-agent-${getPlatformKey()}`;
|
|
32
|
+
}
|
|
33
|
+
/** Get system info for diagnostics */
|
|
34
|
+
export function getSystemInfo() {
|
|
35
|
+
const totalMem = os.totalmem();
|
|
36
|
+
const freeMem = os.freemem();
|
|
37
|
+
const uptimeSec = os.uptime();
|
|
38
|
+
const days = Math.floor(uptimeSec / 86400);
|
|
39
|
+
const hours = Math.floor((uptimeSec % 86400) / 3600);
|
|
40
|
+
const mins = Math.floor((uptimeSec % 3600) / 60);
|
|
41
|
+
return {
|
|
42
|
+
platform: os.platform(),
|
|
43
|
+
arch: os.arch(),
|
|
44
|
+
nodeVersion: process.version,
|
|
45
|
+
hostname: os.hostname(),
|
|
46
|
+
cpus: os.cpus().length,
|
|
47
|
+
totalMemoryGB: (totalMem / 1073741824).toFixed(1),
|
|
48
|
+
freeMemoryGB: (freeMem / 1073741824).toFixed(1),
|
|
49
|
+
uptime: `${days}d ${hours}h ${mins}m`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Get disk usage for a path (bytes) */
|
|
53
|
+
export async function getDiskUsage(dir) {
|
|
54
|
+
const { execFile } = await import("node:child_process");
|
|
55
|
+
const { promisify } = await import("node:util");
|
|
56
|
+
const execFileAsync = promisify(execFile);
|
|
57
|
+
try {
|
|
58
|
+
const { stdout } = await execFileAsync("df", ["-k", dir]);
|
|
59
|
+
const lines = stdout.trim().split("\n");
|
|
60
|
+
if (lines.length < 2)
|
|
61
|
+
throw new Error("Unexpected df output");
|
|
62
|
+
const parts = lines[1].split(/\s+/);
|
|
63
|
+
const total = parseInt(parts[1]) * 1024;
|
|
64
|
+
const used = parseInt(parts[2]) * 1024;
|
|
65
|
+
const free = parseInt(parts[3]) * 1024;
|
|
66
|
+
return { total, free, used, usedPercent: (used / total) * 100 };
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return { total: 0, free: 0, used: 0, usedPercent: 0 };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,iBAAiB,UAAU,CAAC"}
|