@openclaw-cloud/agent-controller 3.0.0-beta.2 → 3.0.0-beta.21
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/bin/agent-controller.js +5 -9
- package/dist/api.d.ts +16 -0
- package/dist/api.js.map +1 -1
- package/dist/commands/agent-update-cli.js +23 -38
- package/dist/commands/agent-update-cli.js.map +1 -1
- package/dist/commands/backup-cli.js +6 -4
- package/dist/commands/backup-cli.js.map +1 -1
- package/dist/commands/bootstrap.d.ts +10 -1
- package/dist/commands/bootstrap.js +33 -73
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/channel-server.js +4 -3
- package/dist/commands/channel-server.js.map +1 -1
- package/dist/commands/heartbeat-cli.js +2 -6
- package/dist/commands/heartbeat-cli.js.map +1 -1
- package/dist/commands/install-deps.d.ts +10 -0
- package/dist/commands/install-deps.js +33 -43
- package/dist/commands/install-deps.js.map +1 -1
- package/dist/commands/knowledge-sync-cli.js +6 -4
- package/dist/commands/knowledge-sync-cli.js.map +1 -1
- package/dist/commands/plugin-update-cli.js +4 -8
- package/dist/commands/plugin-update-cli.js.map +1 -1
- package/dist/commands/self-update.d.ts +1 -0
- package/dist/commands/self-update.js +76 -37
- package/dist/commands/self-update.js.map +1 -1
- package/dist/commands/update-skills.js +7 -6
- package/dist/commands/update-skills.js.map +1 -1
- package/dist/config-file.d.ts +24 -0
- package/dist/config-file.js +59 -20
- package/dist/config-file.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +1 -1
- package/dist/connection.d.ts +4 -0
- package/dist/connection.js +50 -5
- package/dist/connection.js.map +1 -1
- package/dist/handlers/agent-update.d.ts +4 -0
- package/dist/handlers/agent-update.js +16 -44
- package/dist/handlers/agent-update.js.map +1 -1
- package/dist/handlers/deploy.d.ts +1 -2
- package/dist/handlers/deploy.js +4 -20
- package/dist/handlers/deploy.js.map +1 -1
- package/dist/handlers/diagnostics.js +0 -12
- package/dist/handlers/diagnostics.js.map +1 -1
- package/dist/handlers/file-delete.js +4 -5
- package/dist/handlers/file-delete.js.map +1 -1
- package/dist/handlers/file-write.js +4 -4
- package/dist/handlers/file-write.js.map +1 -1
- package/dist/handlers/knowledge-sync.js +2 -14
- package/dist/handlers/knowledge-sync.js.map +1 -1
- package/dist/handlers/memory.d.ts +11 -1
- package/dist/handlers/memory.js.map +1 -1
- package/dist/handlers/onboarding.d.ts +1 -2
- package/dist/handlers/onboarding.js +3 -20
- package/dist/handlers/onboarding.js.map +1 -1
- package/dist/handlers/package-install.js +1 -1
- package/dist/handlers/package-install.js.map +1 -1
- package/dist/handlers/pair.js +0 -12
- package/dist/handlers/pair.js.map +1 -1
- package/dist/handlers/restart.d.ts +1 -2
- package/dist/handlers/restart.js +3 -8
- package/dist/handlers/restart.js.map +1 -1
- package/dist/handlers/slack-event.d.ts +13 -0
- package/dist/handlers/slack-event.js +40 -0
- package/dist/handlers/slack-event.js.map +1 -0
- package/dist/handlers/stop.js +0 -7
- package/dist/handlers/stop.js.map +1 -1
- package/dist/handlers/telegram-webhook.js +3 -22
- package/dist/handlers/telegram-webhook.js.map +1 -1
- package/dist/handlers/update-config.js +4 -13
- package/dist/handlers/update-config.js.map +1 -1
- package/dist/heartbeat.d.ts +7 -1
- package/dist/heartbeat.js +35 -6
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.js +96 -119
- package/dist/index.js.map +1 -1
- package/dist/lockfile.js +2 -1
- package/dist/lockfile.js.map +1 -1
- package/dist/mock-board-worker.d.ts +31 -0
- package/dist/mock-board-worker.js +125 -0
- package/dist/mock-board-worker.js.map +1 -0
- package/dist/platform/linux.js +6 -5
- package/dist/platform/linux.js.map +1 -1
- package/dist/platform/macos.js +3 -2
- package/dist/platform/macos.js.map +1 -1
- package/dist/platform/windows.js +3 -2
- package/dist/platform/windows.js.map +1 -1
- package/dist/providers/claude-code/channel-server.js +2 -1
- package/dist/providers/claude-code/channel-server.js.map +1 -1
- package/dist/providers/claude-code/settings-writer.d.ts +3 -2
- package/dist/providers/claude-code/settings-writer.js +6 -15
- package/dist/providers/claude-code/settings-writer.js.map +1 -1
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.js +25 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openclaw/gateway-adapter.js +2 -0
- package/dist/providers/openclaw/gateway-adapter.js.map +1 -1
- package/dist/providers/openclaw/gateway-client.js +6 -1
- package/dist/providers/openclaw/gateway-client.js.map +1 -1
- package/dist/providers/openclaw/index.js +34 -13
- package/dist/providers/openclaw/index.js.map +1 -1
- package/dist/slack-relay-server.d.ts +48 -0
- package/dist/slack-relay-server.js +197 -0
- package/dist/slack-relay-server.js.map +1 -0
- package/dist/types.d.ts +16 -1
- package/dist/utils/anthropic-auth.d.ts +14 -0
- package/dist/utils/anthropic-auth.js +24 -0
- package/dist/utils/anthropic-auth.js.map +1 -1
- package/dist/utils/apply-config.d.ts +65 -12
- package/dist/utils/apply-config.js +308 -100
- package/dist/utils/apply-config.js.map +1 -1
- package/dist/utils/claude-env.d.ts +6 -0
- package/dist/utils/claude-env.js +29 -28
- package/dist/utils/claude-env.js.map +1 -1
- package/dist/utils/config-merge-paths.d.ts +15 -1
- package/dist/utils/config-merge-paths.js +17 -3
- package/dist/utils/config-merge-paths.js.map +1 -1
- package/dist/utils/deploy-type.d.ts +16 -0
- package/dist/utils/deploy-type.js +34 -0
- package/dist/utils/deploy-type.js.map +1 -0
- package/dist/utils/env.d.ts +0 -1
- package/dist/utils/env.js +0 -8
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/exec.d.ts +11 -0
- package/dist/utils/exec.js +47 -1
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/gateway-restart-handler.d.ts +6 -2
- package/dist/utils/gateway-restart-handler.js +11 -2
- package/dist/utils/gateway-restart-handler.js.map +1 -1
- package/dist/utils/gateway-restart.d.ts +7 -0
- package/dist/utils/gateway-restart.js +12 -4
- package/dist/utils/gateway-restart.js.map +1 -1
- package/dist/utils/knowledge-graph.d.ts +13 -1
- package/dist/utils/knowledge-graph.js +75 -29
- package/dist/utils/knowledge-graph.js.map +1 -1
- package/dist/utils/legacy-mcp-servers.d.ts +12 -0
- package/dist/utils/legacy-mcp-servers.js +37 -0
- package/dist/utils/legacy-mcp-servers.js.map +1 -0
- package/dist/utils/log-collector.js +2 -1
- package/dist/utils/log-collector.js.map +1 -1
- package/dist/utils/openclaw-ops.d.ts +45 -3
- package/dist/utils/openclaw-ops.js +94 -15
- package/dist/utils/openclaw-ops.js.map +1 -1
- package/dist/utils/openclaw-stack-update.d.ts +31 -0
- package/dist/utils/openclaw-stack-update.js +50 -0
- package/dist/utils/openclaw-stack-update.js.map +1 -0
- package/dist/utils/package-install.js +4 -12
- package/dist/utils/package-install.js.map +1 -1
- package/dist/utils/package-version.d.ts +10 -0
- package/dist/utils/package-version.js +18 -0
- package/dist/utils/package-version.js.map +1 -0
- package/dist/utils/parse-id-at-version.d.ts +15 -0
- package/dist/utils/parse-id-at-version.js +22 -0
- package/dist/utils/parse-id-at-version.js.map +1 -0
- package/dist/utils/plugin-reconcile.d.ts +46 -0
- package/dist/utils/plugin-reconcile.js +201 -0
- package/dist/utils/plugin-reconcile.js.map +1 -0
- package/dist/utils/response.js +1 -0
- package/dist/utils/response.js.map +1 -1
- package/dist/utils/write-home-files.d.ts +27 -0
- package/dist/utils/write-home-files.js +72 -0
- package/dist/utils/write-home-files.js.map +1 -0
- package/dist/utils/write-workspace-files.d.ts +1 -1
- package/dist/utils/write-workspace-files.js +19 -7
- package/dist/utils/write-workspace-files.js.map +1 -1
- package/dist/workspace.d.ts +11 -0
- package/dist/workspace.js +20 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +9 -4
package/dist/handlers/pair.js
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
import { logCollector } from '../connection.js';
|
|
2
1
|
import { config } from '../config.js';
|
|
3
2
|
// STRUCT-3: This handler is intentionally a stub. The backend validates the pairing
|
|
4
3
|
// token server-side; agent-controller only echoes back the identifiers as confirmation.
|
|
5
4
|
// No local pairing operation is performed here.
|
|
6
5
|
export function handlePair(command) {
|
|
7
|
-
const startMs = Date.now();
|
|
8
|
-
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
9
|
-
commandId: command.id,
|
|
10
|
-
});
|
|
11
6
|
const pairToken = command.payload.token;
|
|
12
7
|
const targetId = command.payload.targetId;
|
|
13
8
|
if (!pairToken || !targetId) {
|
|
14
|
-
const durationMs = Date.now() - startMs;
|
|
15
|
-
logCollector?.push('command_failed', 'error', `${command.type} failed: Missing "token" or "targetId" in payload`, { commandId: command.id, durationMs });
|
|
16
9
|
return Promise.resolve({
|
|
17
10
|
id: command.id,
|
|
18
11
|
type: 'pair',
|
|
@@ -20,11 +13,6 @@ export function handlePair(command) {
|
|
|
20
13
|
error: 'Missing "token" or "targetId" in payload',
|
|
21
14
|
});
|
|
22
15
|
}
|
|
23
|
-
const durationMs = Date.now() - startMs;
|
|
24
|
-
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
25
|
-
commandId: command.id,
|
|
26
|
-
durationMs,
|
|
27
|
-
});
|
|
28
16
|
return Promise.resolve({
|
|
29
17
|
id: command.id,
|
|
30
18
|
type: 'pair',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/handlers/pair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/handlers/pair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,oFAAoF;AACpF,wFAAwF;AACxF,gDAAgD;AAChD,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,KAAe,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAkB,CAAC;IAEpD,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,0CAA0C;SAClD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,QAAQ;YACR,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function handleRestart(command: AgentCommand): Promise<AgentResponse>;
|
|
1
|
+
export { handleGatewayRestartCommand as handleRestart } from '../utils/gateway-restart-handler.js';
|
package/dist/handlers/restart.js
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
logCollector?.push('gateway_restart', 'info', 'Gateway restart requested', {
|
|
5
|
-
commandId: command.id,
|
|
6
|
-
});
|
|
7
|
-
return handleGatewayRestartCommand(command);
|
|
8
|
-
}
|
|
1
|
+
// `restart`, `deploy` and `onboarding_complete` are the same operation — a
|
|
2
|
+
// gateway restart. One implementation, three command names.
|
|
3
|
+
export { handleGatewayRestartCommand as handleRestart } from '../utils/gateway-restart-handler.js';
|
|
9
4
|
//# sourceMappingURL=restart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/handlers/restart.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/handlers/restart.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4DAA4D;AAC5D,OAAO,EAAE,2BAA2B,IAAI,aAAa,EAAE,MAAM,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentCommand, AgentResponse } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Backend → Centrifugo `slack_event` command. Forwards one Slack message event
|
|
4
|
+
* to the openclaw relay client over the local WS server. The push resolves once
|
|
5
|
+
* the frame is written to that client socket — NOT on openclaw's later
|
|
6
|
+
* dispatch-ack (see src/slack-relay-server.ts) — so `delivered:true` means the
|
|
7
|
+
* relay client received the frame, not that openclaw dispatched it to the agent.
|
|
8
|
+
*
|
|
9
|
+
* No CLI wrapper — same exemption as `telegram_webhook`: the payload is a live
|
|
10
|
+
* routed message that only makes sense arriving over the WS with a connected
|
|
11
|
+
* relay client on the other end; there is nothing to run standalone.
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleSlackEvent(cmd: AgentCommand): Promise<AgentResponse>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { logCollector } from '../connection.js';
|
|
2
|
+
import { toErrorMessage, toErrorResponse } from '../utils/response.js';
|
|
3
|
+
import { pushSlackEvent } from '../slack-relay-server.js';
|
|
4
|
+
/**
|
|
5
|
+
* Backend → Centrifugo `slack_event` command. Forwards one Slack message event
|
|
6
|
+
* to the openclaw relay client over the local WS server. The push resolves once
|
|
7
|
+
* the frame is written to that client socket — NOT on openclaw's later
|
|
8
|
+
* dispatch-ack (see src/slack-relay-server.ts) — so `delivered:true` means the
|
|
9
|
+
* relay client received the frame, not that openclaw dispatched it to the agent.
|
|
10
|
+
*
|
|
11
|
+
* No CLI wrapper — same exemption as `telegram_webhook`: the payload is a live
|
|
12
|
+
* routed message that only makes sense arriving over the WS with a connected
|
|
13
|
+
* relay client on the other end; there is nothing to run standalone.
|
|
14
|
+
*/
|
|
15
|
+
export async function handleSlackEvent(cmd) {
|
|
16
|
+
const { event, deliveryId, route } = cmd.payload;
|
|
17
|
+
// Trust boundary — the backend is upstream, validate before forwarding.
|
|
18
|
+
if (!event) {
|
|
19
|
+
return { id: cmd.id, type: cmd.type, success: false, error: 'Missing event' };
|
|
20
|
+
}
|
|
21
|
+
if (!deliveryId) {
|
|
22
|
+
// Required: it's the backend's at-least-once redelivery key and rides in the frame.
|
|
23
|
+
return { id: cmd.id, type: cmd.type, success: false, error: 'Missing deliveryId' };
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
await pushSlackEvent({
|
|
27
|
+
event,
|
|
28
|
+
deliveryId,
|
|
29
|
+
route: route ?? { kind: 'channel_default', key: '' },
|
|
30
|
+
});
|
|
31
|
+
// Domain event only — connection.ts owns command_received/completed/failed.
|
|
32
|
+
logCollector?.push('slack_event_forwarded', 'info', `Slack event forwarded to relay client (delivery ${deliveryId})`, { commandId: cmd.id, deliveryId });
|
|
33
|
+
return { id: cmd.id, type: cmd.type, success: true, data: { delivered: true } };
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
logCollector?.push('slack_event_forwarded', 'error', `Slack event relay failed (delivery ${deliveryId}): ${toErrorMessage(err)}`, { commandId: cmd.id, deliveryId });
|
|
37
|
+
return toErrorResponse(cmd, err);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=slack-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-event.js","sourceRoot":"","sources":["../../src/handlers/slack-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAiB;IACtD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,OAIxC,CAAC;IAEF,wEAAwE;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,oFAAoF;QACpF,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IACrF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,CAAC;YACnB,KAAK;YACL,UAAU;YACV,KAAK,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE;SACrD,CAAC,CAAC;QACH,4EAA4E;QAC5E,YAAY,EAAE,IAAI,CAChB,uBAAuB,EACvB,MAAM,EACN,mDAAmD,UAAU,GAAG,EAChE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAClC,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,EAAE,IAAI,CAChB,uBAAuB,EACvB,OAAO,EACP,sCAAsC,UAAU,MAAM,cAAc,CAAC,GAAG,CAAC,EAAE,EAC3E,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAClC,CAAC;QACF,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
|
package/dist/handlers/stop.js
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
import { logCollector } from '../connection.js';
|
|
2
1
|
export function handleStop(command) {
|
|
3
|
-
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
4
|
-
commandId: command.id,
|
|
5
|
-
});
|
|
6
|
-
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
7
|
-
commandId: command.id,
|
|
8
|
-
});
|
|
9
2
|
const response = {
|
|
10
3
|
id: command.id,
|
|
11
4
|
type: 'stop',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/handlers/stop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/handlers/stop.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,MAAM,QAAQ,GAAkB;QAC9B,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE;KAC9C,CAAC;IAEF,yFAAyF;IACzF,yFAAyF;IACzF,qFAAqF;IACrF,8CAA8C;IAC9C,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,EAAE,GAAG,CAAC,CAAC;IAER,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -3,16 +3,8 @@ import { logCollector } from '../connection.js';
|
|
|
3
3
|
const WEBHOOK_PORT = 8787;
|
|
4
4
|
const TIMEOUT_MS = 10_000;
|
|
5
5
|
export async function handleTelegramWebhook(command) {
|
|
6
|
-
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
7
|
-
commandId: command.id,
|
|
8
|
-
});
|
|
9
|
-
const startMs = Date.now();
|
|
10
6
|
const { body, webhookSecret } = command.payload;
|
|
11
7
|
if (!body) {
|
|
12
|
-
logCollector?.push('command_failed', 'error', `${command.type} failed: missing body in payload`, {
|
|
13
|
-
commandId: command.id,
|
|
14
|
-
durationMs: Date.now() - startMs,
|
|
15
|
-
});
|
|
16
8
|
return {
|
|
17
9
|
id: command.id,
|
|
18
10
|
type: command.type,
|
|
@@ -33,12 +25,10 @@ export async function handleTelegramWebhook(command) {
|
|
|
33
25
|
body: JSON.stringify(body),
|
|
34
26
|
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
35
27
|
});
|
|
28
|
+
// Domain event: which status the local gateway gave us. The command
|
|
29
|
+
// lifecycle (received/completed/failed) is logged by connection.ts.
|
|
30
|
+
logCollector?.push('telegram_webhook_forwarded', response.ok ? 'info' : 'error', `Telegram update forwarded to gateway: HTTP ${response.status}`, { commandId: command.id, statusCode: response.status });
|
|
36
31
|
if (!response.ok) {
|
|
37
|
-
logCollector?.push('command_failed', 'error', `${command.type} failed: gateway ${response.status}`, {
|
|
38
|
-
commandId: command.id,
|
|
39
|
-
durationMs: Date.now() - startMs,
|
|
40
|
-
statusCode: response.status,
|
|
41
|
-
});
|
|
42
32
|
return {
|
|
43
33
|
id: command.id,
|
|
44
34
|
type: command.type,
|
|
@@ -46,11 +36,6 @@ export async function handleTelegramWebhook(command) {
|
|
|
46
36
|
error: `Gateway responded with ${response.status}: ${response.statusText}`,
|
|
47
37
|
};
|
|
48
38
|
}
|
|
49
|
-
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
50
|
-
commandId: command.id,
|
|
51
|
-
durationMs: Date.now() - startMs,
|
|
52
|
-
statusCode: response.status,
|
|
53
|
-
});
|
|
54
39
|
return {
|
|
55
40
|
id: command.id,
|
|
56
41
|
type: command.type,
|
|
@@ -59,10 +44,6 @@ export async function handleTelegramWebhook(command) {
|
|
|
59
44
|
};
|
|
60
45
|
}
|
|
61
46
|
catch (err) {
|
|
62
|
-
logCollector?.push('command_failed', 'error', `${command.type} failed: ${toErrorMessage(err)}`, {
|
|
63
|
-
commandId: command.id,
|
|
64
|
-
durationMs: Date.now() - startMs,
|
|
65
|
-
});
|
|
66
47
|
return {
|
|
67
48
|
id: command.id,
|
|
68
49
|
type: command.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-webhook.js","sourceRoot":"","sources":["../../src/handlers/telegram-webhook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAqB;IAC/D,
|
|
1
|
+
{"version":3,"file":"telegram-webhook.js","sourceRoot":"","sources":["../../src/handlers/telegram-webhook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAqB;IAC/D,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAGvC,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,2BAA2B;SACnC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,iCAAiC,CAAC,GAAG,aAAa,CAAC;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,YAAY,mBAAmB,EAAE;YAChF,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,CAAC,CAAC;QAEH,oEAAoE;QACpE,oEAAoE;QACpE,YAAY,EAAE,IAAI,CAChB,4BAA4B,EAC5B,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAC9B,8CAA8C,QAAQ,CAAC,MAAM,EAAE,EAC/D,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CACvD,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO;gBACL,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,0BAA0B,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE;aAC3E,CAAC;QACJ,CAAC;QAED,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;SAClC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,26 +1,17 @@
|
|
|
1
1
|
import { toErrorMessage } from '../utils/response.js';
|
|
2
|
-
import {
|
|
2
|
+
import { fetchAndApplyConfig } from '../utils/apply-config.js';
|
|
3
3
|
import { logCollector } from '../connection.js';
|
|
4
4
|
export function handleUpdateConfig(api, agentId) {
|
|
5
5
|
return async (cmd) => {
|
|
6
|
-
const startMs = Date.now();
|
|
7
|
-
logCollector?.push('command_received', 'info', `Command: ${cmd.type}`, { commandId: cmd.id });
|
|
8
6
|
try {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const durationMs = Date.now() - startMs;
|
|
12
|
-
logCollector?.push('command_completed', 'info', `${cmd.type} completed`, {
|
|
7
|
+
const { managed } = await fetchAndApplyConfig(api, agentId);
|
|
8
|
+
logCollector?.push('config_applied', 'info', `Config applied (managed=${managed})`, {
|
|
13
9
|
commandId: cmd.id,
|
|
14
|
-
|
|
10
|
+
managed,
|
|
15
11
|
});
|
|
16
12
|
return { id: cmd.id, type: cmd.type, success: true, data: {} };
|
|
17
13
|
}
|
|
18
14
|
catch (err) {
|
|
19
|
-
const durationMs = Date.now() - startMs;
|
|
20
|
-
logCollector?.push('command_failed', 'error', `${cmd.type} failed: ${toErrorMessage(err)}`, {
|
|
21
|
-
commandId: cmd.id,
|
|
22
|
-
durationMs,
|
|
23
|
-
});
|
|
24
15
|
return { id: cmd.id, type: cmd.type, success: false, error: toErrorMessage(err) };
|
|
25
16
|
}
|
|
26
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-config.js","sourceRoot":"","sources":["../../src/handlers/update-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"update-config.js","sourceRoot":"","sources":["../../src/handlers/update-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,kBAAkB,CAAC,GAAa,EAAE,OAAe;IAC/D,OAAO,KAAK,EAAE,GAAiB,EAA0B,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC5D,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,2BAA2B,OAAO,GAAG,EAAE;gBAClF,SAAS,EAAE,GAAG,CAAC,EAAE;gBACjB,OAAO;aACR,CAAC,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACpF,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/heartbeat.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentApi } from './api.js';
|
|
2
|
-
import type { HeartbeatPayload } from './types.js';
|
|
2
|
+
import type { HeartbeatPayload, CentrifugoStatus } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Read sessions.json index to find the latest session activity timestamp.
|
|
5
5
|
* sessions.json is maintained by OpenClaw gateway and contains an `updatedAt`
|
|
@@ -12,6 +12,12 @@ export interface HeartbeatOptions {
|
|
|
12
12
|
api: AgentApi;
|
|
13
13
|
agentId: string;
|
|
14
14
|
version: string;
|
|
15
|
+
/**
|
|
16
|
+
* Optional probe for the Centrifugo WS connection. Wired in `index.ts`
|
|
17
|
+
* from the live `createConnection()` result. Omitted in CLI / one-shot
|
|
18
|
+
* contexts (`agent-controller heartbeat`) where no WS client exists.
|
|
19
|
+
*/
|
|
20
|
+
getCentrifugoStatus?: () => CentrifugoStatus;
|
|
15
21
|
}
|
|
16
22
|
declare function getMetrics(): HeartbeatPayload['metrics'];
|
|
17
23
|
export declare function publishHeartbeat(opts: HeartbeatOptions): Promise<void>;
|
package/dist/heartbeat.js
CHANGED
|
@@ -6,6 +6,7 @@ import { config } from './config.js';
|
|
|
6
6
|
import { getProvider } from './providers/index.js';
|
|
7
7
|
import { isLockFilePresent } from './lockfile.js';
|
|
8
8
|
import { getOpenclawVersion, listInstalledPlugins } from './utils/openclaw-ops.js';
|
|
9
|
+
import { toErrorMessage } from './utils/response.js';
|
|
9
10
|
const HEARTBEAT_INTERVAL = 30_000;
|
|
10
11
|
async function checkGateway() {
|
|
11
12
|
const provider = getProvider();
|
|
@@ -60,13 +61,20 @@ function getMetrics() {
|
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
62
63
|
* Collect installed component versions for the heartbeat. The controller
|
|
63
|
-
* version is always known (it's the binary running this code). Runtime
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
64
|
+
* version is always known (it's the binary running this code). Runtime
|
|
65
|
+
* goes through `openclaw --version` and is best-effort: a missing binary
|
|
66
|
+
* (mock/claude-code providers) drops the field. Plugin enumeration goes
|
|
67
|
+
* through `openclaw plugins list --json` — that's the source of truth.
|
|
68
|
+
* The config file's `plugins.installs` block is incomplete: bundled /
|
|
69
|
+
* compat-discovered plugins are absent from it, and openclaw itself
|
|
70
|
+
* sometimes rewrites the config without preserving the `installs` map,
|
|
71
|
+
* so reading the file under-reports loaded plugins. Plugin read returns
|
|
72
|
+
* `[]` on any failure; the backend treats `plugins: []` as a true "no
|
|
73
|
+
* plugins" signal (distinct from omitting the field).
|
|
67
74
|
*/
|
|
68
75
|
async function collectVersions(controllerVersion) {
|
|
69
76
|
const versions = { agentController: controllerVersion };
|
|
77
|
+
versions.nodeVersion = process.version;
|
|
70
78
|
try {
|
|
71
79
|
versions.agentRuntime = await getOpenclawVersion();
|
|
72
80
|
}
|
|
@@ -77,13 +85,27 @@ async function collectVersions(controllerVersion) {
|
|
|
77
85
|
versions.plugins = await listInstalledPlugins();
|
|
78
86
|
}
|
|
79
87
|
catch {
|
|
80
|
-
/* CLI failed —
|
|
88
|
+
/* CLI failed (timeout, missing subcommand) — report empty list rather than throw */
|
|
89
|
+
versions.plugins = [];
|
|
81
90
|
}
|
|
82
91
|
return versions;
|
|
83
92
|
}
|
|
84
93
|
export async function publishHeartbeat(opts) {
|
|
85
94
|
const gw = await checkGateway();
|
|
86
95
|
const versions = await collectVersions(opts.version);
|
|
96
|
+
// Capture Centrifugo status synchronously *before* the await on the network
|
|
97
|
+
// POST so the snapshot reflects the state at send-time, not at ack-time.
|
|
98
|
+
let centrifugoStatus;
|
|
99
|
+
if (opts.getCentrifugoStatus) {
|
|
100
|
+
try {
|
|
101
|
+
centrifugoStatus = opts.getCentrifugoStatus();
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
// Never let a probe failure crash a heartbeat — backend can infer
|
|
105
|
+
// "controller alive but probe broken" from the absent field.
|
|
106
|
+
debugLog('heartbeat', 'getCentrifugoStatus threw', err);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
87
109
|
const payload = {
|
|
88
110
|
type: 'heartbeat',
|
|
89
111
|
agentId: opts.agentId,
|
|
@@ -93,14 +115,21 @@ export async function publishHeartbeat(opts) {
|
|
|
93
115
|
metrics: getMetrics(),
|
|
94
116
|
gatewayStatus: gw,
|
|
95
117
|
lastMessageAt: await getLastMessageAt(),
|
|
118
|
+
...(centrifugoStatus ? { centrifugoStatus } : {}),
|
|
96
119
|
};
|
|
97
120
|
try {
|
|
98
121
|
debugLog('heartbeat', '→ sending', opts.agentId, JSON.stringify(payload).slice(0, 500));
|
|
99
122
|
await opts.api.publishHeartbeat(opts.agentId, payload);
|
|
100
123
|
debugLog('heartbeat', '← ok');
|
|
124
|
+
if (centrifugoStatus) {
|
|
125
|
+
console.log(`[heartbeat] ok centrifugo=${centrifugoStatus.state} commands=${centrifugoStatus.commandSubState} chat=${centrifugoStatus.chatSubState}`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.log('[heartbeat] ok');
|
|
129
|
+
}
|
|
101
130
|
}
|
|
102
131
|
catch (err) {
|
|
103
|
-
console.error('Heartbeat publish failed:', err
|
|
132
|
+
console.error('Heartbeat publish failed:', toErrorMessage(err));
|
|
104
133
|
debugLog('heartbeat', '← error', err);
|
|
105
134
|
}
|
|
106
135
|
}
|
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;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lift any legacy flat `mcpServers` at the root of openclaw.json into the
|
|
3
|
-
* canonical `mcp.servers` location. The OpenClaw CLI switched to strict
|
|
4
|
-
* schema validation that rejects the unknown top-level `mcpServers` key, so
|
|
5
|
-
* leaving it behind crashes the gateway on startup. Mutates `fileConfig`
|
|
6
|
-
* in place; returns true if anything changed.
|
|
7
|
-
*/
|
|
8
|
-
export declare function migrateLegacyMcpServers(fileConfig: Record<string, unknown>): boolean;
|
|
9
1
|
export declare function main(): Promise<void>;
|