@openclaw-cloud/agent-controller 0.7.9 → 0.8.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/dist/heartbeat.js +22 -12
- package/dist/heartbeat.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/package.json +1 -1
package/dist/heartbeat.js
CHANGED
|
@@ -5,9 +5,9 @@ import { debugLog } from './debug.js';
|
|
|
5
5
|
import { selfUpdate } from './commands/self-update.js';
|
|
6
6
|
import { execAsync } from './utils/exec.js';
|
|
7
7
|
const HEARTBEAT_INTERVAL = 30_000;
|
|
8
|
-
const STARTUP_DELAY = 80_000;
|
|
9
8
|
const UPDATE_CHECK_INTERVAL = 24 * 60 * 60 * 1000; // 24h
|
|
10
9
|
const PACKAGE_NAME = '@openclaw-cloud/agent-controller';
|
|
10
|
+
const GATEWAY_STATUS_TIMEOUT = 5_000;
|
|
11
11
|
async function checkForUpdate(currentVersion) {
|
|
12
12
|
if (process.env.NODE_ENV === "test")
|
|
13
13
|
return;
|
|
@@ -22,6 +22,18 @@ async function checkForUpdate(currentVersion) {
|
|
|
22
22
|
// No internet, npm unavailable, or already up to date — silently ignore
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
+
async function checkGateway() {
|
|
26
|
+
try {
|
|
27
|
+
const output = await execAsync('openclaw gateway status --json', GATEWAY_STATUS_TIMEOUT);
|
|
28
|
+
const parsed = JSON.parse(output);
|
|
29
|
+
const running = parsed.service?.runtime?.status === 'running';
|
|
30
|
+
const rpcOk = parsed.rpc?.ok === true;
|
|
31
|
+
return { running, rpcOk, pid: parsed.service?.runtime?.pid };
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return { running: false, rpcOk: false };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
25
37
|
export async function getLastMessageAt() {
|
|
26
38
|
const stateDir = process.env.OPENCLAW_STATE_DIR?.trim()
|
|
27
39
|
?? path.join(os.homedir(), '.openclaw');
|
|
@@ -53,12 +65,18 @@ function getMetrics() {
|
|
|
53
65
|
};
|
|
54
66
|
}
|
|
55
67
|
export async function publishHeartbeat(opts) {
|
|
68
|
+
const gw = await checkGateway();
|
|
69
|
+
if (!gw.running || !gw.rpcOk) {
|
|
70
|
+
debugLog('heartbeat', 'skipped — gateway not ready', JSON.stringify(gw));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
56
73
|
const payload = {
|
|
57
74
|
type: 'heartbeat',
|
|
58
75
|
agentId: opts.agentId,
|
|
59
76
|
ts: Date.now(),
|
|
60
77
|
version: opts.version,
|
|
61
78
|
metrics: getMetrics(),
|
|
79
|
+
gatewayStatus: gw,
|
|
62
80
|
...(opts.getBoardStatus ? { boardStatus: opts.getBoardStatus() } : {}),
|
|
63
81
|
lastMessageAt: await getLastMessageAt(),
|
|
64
82
|
};
|
|
@@ -74,22 +92,14 @@ export async function publishHeartbeat(opts) {
|
|
|
74
92
|
}
|
|
75
93
|
export function startHeartbeat(opts) {
|
|
76
94
|
const send = () => { publishHeartbeat(opts).catch(() => { }); };
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
startupTimer = null;
|
|
80
|
-
send();
|
|
81
|
-
heartbeatInterval = setInterval(send, HEARTBEAT_INTERVAL);
|
|
82
|
-
}, STARTUP_DELAY);
|
|
83
|
-
let heartbeatInterval = null;
|
|
95
|
+
send();
|
|
96
|
+
const heartbeatInterval = setInterval(send, HEARTBEAT_INTERVAL);
|
|
84
97
|
// Auto-update check: immediately on start, then every 24h
|
|
85
98
|
checkForUpdate(opts.version).catch(() => { });
|
|
86
99
|
const updateInterval = setInterval(() => { checkForUpdate(opts.version).catch(() => { }); }, UPDATE_CHECK_INTERVAL);
|
|
87
100
|
return {
|
|
88
101
|
stop() {
|
|
89
|
-
|
|
90
|
-
clearTimeout(startupTimer);
|
|
91
|
-
if (heartbeatInterval)
|
|
92
|
-
clearInterval(heartbeatInterval);
|
|
102
|
+
clearInterval(heartbeatInterval);
|
|
93
103
|
clearInterval(updateInterval);
|
|
94
104
|
},
|
|
95
105
|
};
|
package/dist/heartbeat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -16,6 +16,11 @@ export interface AgentResponse {
|
|
|
16
16
|
data?: Record<string, unknown>;
|
|
17
17
|
error?: string;
|
|
18
18
|
}
|
|
19
|
+
export interface GatewayStatus {
|
|
20
|
+
running: boolean;
|
|
21
|
+
rpcOk: boolean;
|
|
22
|
+
pid?: number;
|
|
23
|
+
}
|
|
19
24
|
export interface HeartbeatPayload {
|
|
20
25
|
type: 'heartbeat';
|
|
21
26
|
agentId: string;
|
|
@@ -27,6 +32,7 @@ export interface HeartbeatPayload {
|
|
|
27
32
|
uptime: number;
|
|
28
33
|
};
|
|
29
34
|
boardStatus?: BoardState;
|
|
35
|
+
gatewayStatus?: GatewayStatus;
|
|
30
36
|
lastMessageAt?: string | null;
|
|
31
37
|
}
|
|
32
38
|
export interface BoardState {
|