@openclaw-cloud/agent-controller 0.8.2 → 0.9.1
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/api.d.ts +22 -0
- package/dist/api.js +89 -5
- package/dist/api.js.map +1 -1
- package/dist/commands/backup-cli.js +5 -1
- package/dist/commands/backup-cli.js.map +1 -1
- package/dist/commands/bootstrap.js +6 -15
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/knowledge-sync-cli.js +5 -1
- package/dist/commands/knowledge-sync-cli.js.map +1 -1
- package/dist/connection.js +39 -114
- package/dist/connection.js.map +1 -1
- package/dist/handlers/backup.d.ts +2 -1
- package/dist/handlers/backup.js +2 -2
- package/dist/handlers/backup.js.map +1 -1
- package/dist/handlers/chat.js +4 -3
- package/dist/handlers/chat.js.map +1 -1
- package/dist/handlers/config.js +13 -2
- package/dist/handlers/config.js.map +1 -1
- package/dist/handlers/diagnostics.d.ts +2 -0
- package/dist/handlers/diagnostics.js +50 -0
- package/dist/handlers/diagnostics.js.map +1 -0
- package/dist/handlers/knowledge-sync.d.ts +2 -1
- package/dist/handlers/knowledge-sync.js +2 -2
- package/dist/handlers/knowledge-sync.js.map +1 -1
- package/dist/handlers/onboarding.js +3 -21
- package/dist/handlers/onboarding.js.map +1 -1
- package/dist/handlers/package-install.js +17 -3
- package/dist/handlers/package-install.js.map +1 -1
- package/dist/handlers/restart.js +3 -21
- package/dist/handlers/restart.js.map +1 -1
- package/dist/handlers/self-update.d.ts +2 -0
- package/dist/handlers/self-update.js +14 -0
- package/dist/handlers/self-update.js.map +1 -0
- package/dist/heartbeat.js +0 -4
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/openclaw/gateway-adapter.d.ts +1 -0
- package/dist/openclaw/gateway-adapter.js +37 -7
- package/dist/openclaw/gateway-adapter.js.map +1 -1
- package/dist/platform/common.d.ts +1 -0
- package/dist/platform/common.js +10 -1
- package/dist/platform/common.js.map +1 -1
- package/dist/platform/linux.d.ts +1 -1
- package/dist/platform/linux.js +1 -8
- package/dist/platform/linux.js.map +1 -1
- package/dist/platform/macos.d.ts +1 -1
- package/dist/platform/macos.js +1 -8
- package/dist/platform/macos.js.map +1 -1
- package/dist/platform/windows.d.ts +1 -1
- package/dist/platform/windows.js +1 -8
- package/dist/platform/windows.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils/archive.js +2 -2
- package/dist/utils/archive.js.map +1 -1
- package/dist/utils/backup-push.d.ts +4 -3
- package/dist/utils/backup-push.js +10 -56
- package/dist/utils/backup-push.js.map +1 -1
- package/dist/utils/env.d.ts +1 -0
- package/dist/utils/env.js +3 -0
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/gateway-restart-handler.d.ts +6 -0
- package/dist/utils/gateway-restart-handler.js +27 -0
- package/dist/utils/gateway-restart-handler.js.map +1 -0
- package/dist/utils/knowledge-push.d.ts +3 -2
- package/dist/utils/knowledge-push.js +3 -20
- package/dist/utils/knowledge-push.js.map +1 -1
- package/package.json +1 -1
- package/dist/handlers/exec.d.ts +0 -2
- package/dist/handlers/exec.js +0 -29
- package/dist/handlers/exec.js.map +0 -1
package/dist/api.d.ts
CHANGED
|
@@ -1,7 +1,29 @@
|
|
|
1
|
+
export interface BackupInitResult {
|
|
2
|
+
snapshotId: string;
|
|
3
|
+
uploadUrl: string;
|
|
4
|
+
token: string | null;
|
|
5
|
+
method: 'presigned' | 'api';
|
|
6
|
+
}
|
|
7
|
+
export interface BootstrapResult {
|
|
8
|
+
openclawConfig?: Record<string, unknown>;
|
|
9
|
+
workspaceFiles?: Record<string, string>;
|
|
10
|
+
}
|
|
1
11
|
export interface AgentApi {
|
|
2
12
|
get(path: string): Promise<unknown>;
|
|
3
13
|
post(path: string, body?: unknown): Promise<Response>;
|
|
4
14
|
publishResponse(agentId: string, data: unknown): Promise<void>;
|
|
5
15
|
publishHeartbeat(agentId: string, payload: unknown): Promise<void>;
|
|
16
|
+
fetchConnectionToken(agentId: string): Promise<string>;
|
|
17
|
+
fetchSubscriptionToken(agentId: string, channels: string[]): Promise<Record<string, string>>;
|
|
18
|
+
backupInit(agentId: string): Promise<BackupInitResult>;
|
|
19
|
+
backupComplete(agentId: string, snapshotId: string, sizeBytes: number): Promise<void>;
|
|
20
|
+
knowledgePush(agentId: string, files: Array<{
|
|
21
|
+
path: string;
|
|
22
|
+
content: string;
|
|
23
|
+
}>): Promise<{
|
|
24
|
+
filesUpdated: number;
|
|
25
|
+
}>;
|
|
26
|
+
agentBootstrap(agentId: string): Promise<BootstrapResult>;
|
|
27
|
+
uploadRaw(url: string, body: NodeJS.ReadableStream | Buffer | Uint8Array, contentType: string, size: number, timeoutMs?: number): Promise<void>;
|
|
6
28
|
}
|
|
7
29
|
export declare function createAgentApi(backendUrl: string, agentToken: string): AgentApi;
|
package/dist/api.js
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import { DEBUG, debugLog } from './debug.js';
|
|
2
|
-
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Timeouts by operation type
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
const TIMEOUT_DEFAULT = 10_000;
|
|
6
|
+
const TIMEOUT_TOKEN = 5_000;
|
|
7
|
+
const TIMEOUT_LONG = 30_000;
|
|
8
|
+
const TIMEOUT_UPLOAD = 300_000; // 5 min
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Implementation
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
3
12
|
export function createAgentApi(backendUrl, agentToken) {
|
|
4
|
-
async function request(method, path, body) {
|
|
13
|
+
async function request(method, path, body, timeoutMs = TIMEOUT_DEFAULT) {
|
|
5
14
|
const controller = new AbortController();
|
|
6
|
-
const timeout = setTimeout(() => controller.abort(),
|
|
15
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
16
|
+
const start = Date.now();
|
|
7
17
|
try {
|
|
8
|
-
debugLog('api',
|
|
18
|
+
debugLog('api', `→ ${method} ${path}`, body ? JSON.stringify(body).slice(0, 500) : '');
|
|
9
19
|
const res = await fetch(`${backendUrl}${path}`, {
|
|
10
20
|
method,
|
|
11
21
|
headers: {
|
|
@@ -15,10 +25,11 @@ export function createAgentApi(backendUrl, agentToken) {
|
|
|
15
25
|
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
16
26
|
signal: controller.signal,
|
|
17
27
|
});
|
|
28
|
+
const elapsed = Date.now() - start;
|
|
18
29
|
if (DEBUG) {
|
|
19
30
|
const clone = res.clone();
|
|
20
31
|
const bodyText = await clone.text().catch(() => '');
|
|
21
|
-
debugLog('api',
|
|
32
|
+
debugLog('api', `← ${res.status} ${method} ${path} (${bodyText.length}b, ${elapsed}ms)`, bodyText.slice(0, 1000));
|
|
22
33
|
}
|
|
23
34
|
return res;
|
|
24
35
|
}
|
|
@@ -27,6 +38,7 @@ export function createAgentApi(backendUrl, agentToken) {
|
|
|
27
38
|
}
|
|
28
39
|
}
|
|
29
40
|
return {
|
|
41
|
+
// --- Generic ---
|
|
30
42
|
async get(path) {
|
|
31
43
|
const res = await request('GET', path);
|
|
32
44
|
if (!res.ok) {
|
|
@@ -37,6 +49,7 @@ export function createAgentApi(backendUrl, agentToken) {
|
|
|
37
49
|
async post(path, body) {
|
|
38
50
|
return request('POST', path, body);
|
|
39
51
|
},
|
|
52
|
+
// --- Agent responses & heartbeat ---
|
|
40
53
|
async publishResponse(agentId, data) {
|
|
41
54
|
const res = await request('POST', '/api/internal/agent-response', { agentId, data });
|
|
42
55
|
if (!res.ok) {
|
|
@@ -49,6 +62,77 @@ export function createAgentApi(backendUrl, agentToken) {
|
|
|
49
62
|
throw new Error(`publishHeartbeat failed: HTTP ${res.status}`);
|
|
50
63
|
}
|
|
51
64
|
},
|
|
65
|
+
// --- Centrifugo tokens ---
|
|
66
|
+
async fetchConnectionToken(agentId) {
|
|
67
|
+
const res = await request('POST', '/api/internal/centrifugo-token', { agentId }, TIMEOUT_TOKEN);
|
|
68
|
+
if (!res.ok) {
|
|
69
|
+
const body = await res.text().catch(() => '');
|
|
70
|
+
throw new Error(`HTTP ${res.status}: ${body}`);
|
|
71
|
+
}
|
|
72
|
+
const data = await res.json();
|
|
73
|
+
return data.token;
|
|
74
|
+
},
|
|
75
|
+
async fetchSubscriptionToken(agentId, channels) {
|
|
76
|
+
const res = await request('POST', '/api/internal/centrifugo-subscribe-token', { agentId, channels }, TIMEOUT_TOKEN);
|
|
77
|
+
if (!res.ok) {
|
|
78
|
+
const body = await res.text().catch(() => '');
|
|
79
|
+
throw new Error(`HTTP ${res.status}: ${body}`);
|
|
80
|
+
}
|
|
81
|
+
const data = await res.json();
|
|
82
|
+
return data.subscriptions;
|
|
83
|
+
},
|
|
84
|
+
// --- Backup ---
|
|
85
|
+
async backupInit(agentId) {
|
|
86
|
+
const res = await request('POST', `/api/internal/agents/${agentId}/backup/init`, undefined, TIMEOUT_LONG);
|
|
87
|
+
if (!res.ok) {
|
|
88
|
+
const text = await res.text().catch(() => '');
|
|
89
|
+
throw new Error(`Backup init failed: ${res.status} ${text}`);
|
|
90
|
+
}
|
|
91
|
+
return res.json();
|
|
92
|
+
},
|
|
93
|
+
async backupComplete(agentId, snapshotId, sizeBytes) {
|
|
94
|
+
const res = await request('POST', `/api/internal/agents/${agentId}/backup/complete`, { snapshotId, sizeBytes }, TIMEOUT_LONG);
|
|
95
|
+
if (!res.ok) {
|
|
96
|
+
const text = await res.text().catch(() => '');
|
|
97
|
+
throw new Error(`Backup complete failed: ${res.status} ${text}`);
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
// --- Knowledge ---
|
|
101
|
+
async knowledgePush(agentId, files) {
|
|
102
|
+
const res = await request('POST', `/api/internal/agents/${agentId}/knowledge/push`, { files }, TIMEOUT_LONG);
|
|
103
|
+
if (!res.ok) {
|
|
104
|
+
const text = await res.text().catch(() => '');
|
|
105
|
+
throw new Error(`Knowledge push failed: ${res.status} ${text}`);
|
|
106
|
+
}
|
|
107
|
+
return res.json();
|
|
108
|
+
},
|
|
109
|
+
// --- Bootstrap ---
|
|
110
|
+
async agentBootstrap(agentId) {
|
|
111
|
+
const res = await request('GET', `/api/internal/agent-bootstrap/${agentId}`, undefined, TIMEOUT_LONG);
|
|
112
|
+
if (!res.ok) {
|
|
113
|
+
const body = await res.text().catch(() => '');
|
|
114
|
+
throw new Error(`Bootstrap API failed: HTTP ${res.status} ${body}`);
|
|
115
|
+
}
|
|
116
|
+
return res.json();
|
|
117
|
+
},
|
|
118
|
+
// --- Raw upload (S3 presigned or backend API fallback) ---
|
|
119
|
+
async uploadRaw(url, body, contentType, size, timeoutMs = TIMEOUT_UPLOAD) {
|
|
120
|
+
const start = Date.now();
|
|
121
|
+
debugLog('api', `→ PUT ${url.slice(0, 80)}... (${size}b)`);
|
|
122
|
+
const res = await fetch(url, {
|
|
123
|
+
method: 'PUT',
|
|
124
|
+
headers: { 'Content-Type': contentType, 'Content-Length': String(size) },
|
|
125
|
+
body: body,
|
|
126
|
+
duplex: 'half',
|
|
127
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
128
|
+
});
|
|
129
|
+
const elapsed = Date.now() - start;
|
|
130
|
+
debugLog('api', `← ${res.status} PUT upload (${elapsed}ms)`);
|
|
131
|
+
if (!res.ok) {
|
|
132
|
+
const text = await res.text().catch(() => '');
|
|
133
|
+
throw new Error(`Upload failed: ${res.status} ${text}`);
|
|
134
|
+
}
|
|
135
|
+
},
|
|
52
136
|
};
|
|
53
137
|
}
|
|
54
138
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { createAgentApi } from '../api.js';
|
|
2
|
+
import { getBackendUrl, requireEnv } from '../utils/env.js';
|
|
1
3
|
import { pushBackupToBackend } from '../utils/backup-push.js';
|
|
2
4
|
export async function runBackup() {
|
|
3
5
|
console.log('Starting backup...');
|
|
6
|
+
const api = createAgentApi(getBackendUrl(), requireEnv('AGENT_TOKEN'));
|
|
7
|
+
const agentId = requireEnv('AGENT_ID');
|
|
4
8
|
try {
|
|
5
|
-
const { sizeBytes } = await pushBackupToBackend();
|
|
9
|
+
const { sizeBytes } = await pushBackupToBackend(api, agentId);
|
|
6
10
|
const sizeMb = (sizeBytes / 1024 / 1024).toFixed(2);
|
|
7
11
|
console.log(`Backup complete — ${sizeMb} MB.`);
|
|
8
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup-cli.js","sourceRoot":"","sources":["../../src/commands/backup-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"backup-cli.js","sourceRoot":"","sources":["../../src/commands/backup-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAElC,MAAM,GAAG,GAAG,cAAc,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,MAAM,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
-
import {
|
|
4
|
+
import { createAgentApi } from '../api.js';
|
|
5
|
+
import { getBackendUrl, requireEnv } from '../utils/env.js';
|
|
5
6
|
export async function bootstrap() {
|
|
6
|
-
const backendUrl =
|
|
7
|
+
const backendUrl = getBackendUrl();
|
|
7
8
|
const agentToken = requireEnv('AGENT_TOKEN');
|
|
8
9
|
const agentId = requireEnv('AGENT_ID');
|
|
9
10
|
const openclawDir = process.env.OPENCLAW_STATE_DIR?.trim() ?? path.join(os.homedir(), '.openclaw');
|
|
@@ -11,23 +12,13 @@ export async function bootstrap() {
|
|
|
11
12
|
console.log(`Bootstrapping agent ${agentId}...`);
|
|
12
13
|
console.log(` Backend: ${backendUrl}`);
|
|
13
14
|
console.log(` OpenClaw dir: ${openclawDir}`);
|
|
14
|
-
|
|
15
|
-
const url = `${backendUrl}/api/internal/agent-bootstrap/${agentId}`;
|
|
15
|
+
const api = createAgentApi(backendUrl, agentToken);
|
|
16
16
|
let data;
|
|
17
17
|
try {
|
|
18
|
-
|
|
19
|
-
headers: { Authorization: `Bearer ${agentToken}` },
|
|
20
|
-
signal: AbortSignal.timeout(30_000),
|
|
21
|
-
});
|
|
22
|
-
if (!res.ok) {
|
|
23
|
-
const body = await res.text().catch(() => '');
|
|
24
|
-
console.error(`Bootstrap API failed: HTTP ${res.status} ${body}`);
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
data = await res.json();
|
|
18
|
+
data = await api.agentBootstrap(agentId);
|
|
28
19
|
}
|
|
29
20
|
catch (err) {
|
|
30
|
-
console.error('Bootstrap
|
|
21
|
+
console.error('Bootstrap failed:', err instanceof Error ? err.message : err);
|
|
31
22
|
process.exit(1);
|
|
32
23
|
return;
|
|
33
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IACnG,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;IAE9C,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEnD,IAAI,IAA2F,CAAC;IAChG,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAgB,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,wBAAwB;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,SAAS,CAAC,MAAM,4BAA4B,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { createAgentApi } from '../api.js';
|
|
2
|
+
import { getBackendUrl, requireEnv } from '../utils/env.js';
|
|
1
3
|
import { pushKnowledgeToBackend } from '../utils/knowledge-push.js';
|
|
2
4
|
export async function runKnowledgeSync() {
|
|
3
5
|
console.log('Starting knowledge sync...');
|
|
6
|
+
const api = createAgentApi(getBackendUrl(), requireEnv('AGENT_TOKEN'));
|
|
7
|
+
const agentId = requireEnv('AGENT_ID');
|
|
4
8
|
try {
|
|
5
|
-
const { filesRead, filesUpdated } = await pushKnowledgeToBackend();
|
|
9
|
+
const { filesRead, filesUpdated } = await pushKnowledgeToBackend(api, agentId);
|
|
6
10
|
console.log(`Knowledge sync complete — ${filesUpdated}/${filesRead} files updated.`);
|
|
7
11
|
}
|
|
8
12
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-sync-cli.js","sourceRoot":"","sources":["../../src/commands/knowledge-sync-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge-sync-cli.js","sourceRoot":"","sources":["../../src/commands/knowledge-sync-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,MAAM,GAAG,GAAG,cAAc,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,6BAA6B,YAAY,IAAI,SAAS,iBAAiB,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/connection.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { debugLog } from './debug.js';
|
|
2
2
|
import { Centrifuge } from 'centrifuge';
|
|
3
3
|
import WebSocket from 'ws';
|
|
4
|
-
import {
|
|
4
|
+
import { handleDiagnostics } from './handlers/diagnostics.js';
|
|
5
5
|
import { handleRestart } from './handlers/restart.js';
|
|
6
6
|
import { handleDeploy } from './handlers/deploy.js';
|
|
7
7
|
import { handleConfig } from './handlers/config.js';
|
|
@@ -14,109 +14,41 @@ import { handleFileWrite } from './handlers/file-write.js';
|
|
|
14
14
|
import { handleFileDelete } from './handlers/file-delete.js';
|
|
15
15
|
import { handleOnboardingComplete } from './handlers/onboarding.js';
|
|
16
16
|
import { handleKnowledgeSync } from './handlers/knowledge-sync.js';
|
|
17
|
-
import {
|
|
17
|
+
import { handleSelfUpdate } from './handlers/self-update.js';
|
|
18
|
+
import { toErrorMessage } from './utils/response.js';
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
19
20
|
// Handlers
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
21
22
|
function buildHandlers(opts) {
|
|
22
23
|
return {
|
|
23
|
-
|
|
24
|
+
diagnostics: handleDiagnostics,
|
|
24
25
|
restart: handleRestart,
|
|
25
26
|
deploy: handleDeploy,
|
|
26
27
|
config: handleConfig,
|
|
27
28
|
pair: handlePair,
|
|
28
29
|
stop: handleStop,
|
|
29
|
-
backup: (cmd) => handleBackup(cmd),
|
|
30
|
+
backup: (cmd) => handleBackup(cmd, opts.api, opts.agentId),
|
|
30
31
|
package_install: handlePackageInstall,
|
|
31
32
|
file_write: handleFileWrite,
|
|
32
33
|
file_delete: handleFileDelete,
|
|
33
34
|
onboarding_complete: handleOnboardingComplete,
|
|
34
|
-
knowledge_sync: handleKnowledgeSync,
|
|
35
|
-
|
|
36
|
-
// in-flight commands. This is intentional — the agent restarts and resumes from scratch.
|
|
37
|
-
// The backend should handle missing responses for in-flight commands gracefully.
|
|
38
|
-
self_update: (cmd) => selfUpdate(opts.version)
|
|
39
|
-
.then(() => ({ id: cmd.id, type: cmd.type, success: true, data: {} }))
|
|
40
|
-
.catch((err) => ({
|
|
41
|
-
id: cmd.id,
|
|
42
|
-
type: cmd.type,
|
|
43
|
-
success: false,
|
|
44
|
-
error: err instanceof Error ? err.message : String(err),
|
|
45
|
-
})),
|
|
35
|
+
knowledge_sync: (cmd) => handleKnowledgeSync(cmd, opts.api, opts.agentId),
|
|
36
|
+
self_update: handleSelfUpdate(opts.version),
|
|
46
37
|
};
|
|
47
38
|
}
|
|
48
39
|
// ---------------------------------------------------------------------------
|
|
49
|
-
// Token helpers
|
|
50
|
-
// ---------------------------------------------------------------------------
|
|
51
|
-
async function fetchConnectionToken(backendUrl, agentToken, agentId) {
|
|
52
|
-
debugLog('api', '→ POST /api/internal/centrifugo-token', JSON.stringify({ agentId }));
|
|
53
|
-
const controller = new AbortController();
|
|
54
|
-
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
55
|
-
try {
|
|
56
|
-
const res = await fetch(`${backendUrl}/api/internal/centrifugo-token`, {
|
|
57
|
-
method: 'POST',
|
|
58
|
-
headers: {
|
|
59
|
-
'Content-Type': 'application/json',
|
|
60
|
-
'Authorization': `Bearer ${agentToken}`,
|
|
61
|
-
},
|
|
62
|
-
body: JSON.stringify({ agentId }),
|
|
63
|
-
signal: controller.signal,
|
|
64
|
-
});
|
|
65
|
-
const body = await res.text();
|
|
66
|
-
debugLog('api', `← POST /api/internal/centrifugo-token ${res.status}`, body.slice(0, 200));
|
|
67
|
-
if (!res.ok) {
|
|
68
|
-
throw new Error(`HTTP ${res.status}: ${body}`);
|
|
69
|
-
}
|
|
70
|
-
const data = JSON.parse(body);
|
|
71
|
-
return data.token;
|
|
72
|
-
}
|
|
73
|
-
finally {
|
|
74
|
-
clearTimeout(timeout);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
async function fetchSubscriptionToken(backendUrl, agentToken, agentId, channels) {
|
|
78
|
-
debugLog('api', '→ POST /api/internal/centrifugo-subscribe-token', JSON.stringify({ agentId, channels }));
|
|
79
|
-
const controller = new AbortController();
|
|
80
|
-
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
81
|
-
try {
|
|
82
|
-
const res = await fetch(`${backendUrl}/api/internal/centrifugo-subscribe-token`, {
|
|
83
|
-
method: 'POST',
|
|
84
|
-
headers: {
|
|
85
|
-
'Content-Type': 'application/json',
|
|
86
|
-
'Authorization': `Bearer ${agentToken}`,
|
|
87
|
-
},
|
|
88
|
-
body: JSON.stringify({ agentId, channels }),
|
|
89
|
-
signal: controller.signal,
|
|
90
|
-
});
|
|
91
|
-
const body = await res.text();
|
|
92
|
-
debugLog('api', `← POST /api/internal/centrifugo-subscribe-token ${res.status}`, body.slice(0, 500));
|
|
93
|
-
if (!res.ok) {
|
|
94
|
-
throw new Error(`HTTP ${res.status}: ${body}`);
|
|
95
|
-
}
|
|
96
|
-
const data = JSON.parse(body);
|
|
97
|
-
return data.subscriptions;
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
console.error('Subscription token fetch failed:', err instanceof Error ? err.message : err);
|
|
101
|
-
throw err;
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
clearTimeout(timeout);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// ---------------------------------------------------------------------------
|
|
108
40
|
// Step 1: Create Centrifuge client (no subscriptions yet)
|
|
109
41
|
// ---------------------------------------------------------------------------
|
|
110
42
|
function createClient(opts) {
|
|
111
43
|
const getToken = async () => {
|
|
112
44
|
console.log('Fetching connection token...');
|
|
113
45
|
try {
|
|
114
|
-
const token = await
|
|
46
|
+
const token = await opts.api.fetchConnectionToken(opts.agentId);
|
|
115
47
|
console.log('Got connection token');
|
|
116
48
|
return token;
|
|
117
49
|
}
|
|
118
50
|
catch (err) {
|
|
119
|
-
console.error('Connection token failed:', err
|
|
51
|
+
console.error('Connection token failed:', toErrorMessage(err));
|
|
120
52
|
throw err;
|
|
121
53
|
}
|
|
122
54
|
};
|
|
@@ -148,7 +80,7 @@ function subscribeToChannel(client, channel, opts) {
|
|
|
148
80
|
const sub = client.newSubscription(channel, {
|
|
149
81
|
getToken: async () => {
|
|
150
82
|
console.log(`Fetching subscription token for ${channel}...`);
|
|
151
|
-
const subs = await
|
|
83
|
+
const subs = await opts.api.fetchSubscriptionToken(opts.agentId, [channel]);
|
|
152
84
|
const token = subs[channel];
|
|
153
85
|
if (!token) {
|
|
154
86
|
throw new Error(`No subscription token returned for ${channel}`);
|
|
@@ -179,36 +111,35 @@ function subscribeToChannel(client, channel, opts) {
|
|
|
179
111
|
// ---------------------------------------------------------------------------
|
|
180
112
|
function attachCommandHandlers(sub, channel, opts) {
|
|
181
113
|
const handlers = buildHandlers(opts);
|
|
182
|
-
// RACE-1: Serialize command execution. A simple promise chain ensures no two
|
|
183
|
-
// commands execute concurrently, preventing races (dual restart, concurrent exec, etc.)
|
|
184
114
|
let commandQueue = Promise.resolve();
|
|
185
115
|
sub.on('publication', (ctx) => {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
return;
|
|
116
|
+
console.log(`[WS] Received message on ${channel}:`, JSON.stringify(ctx.data));
|
|
117
|
+
debugLog('connection', 'publication', channel, JSON.stringify(ctx.data).slice(0, 500));
|
|
118
|
+
const raw = ctx.data;
|
|
119
|
+
if (!raw || typeof raw['id'] !== 'string' || typeof raw['type'] !== 'string') {
|
|
120
|
+
console.warn('[WS] Ignoring malformed message (missing id or type):', JSON.stringify(ctx.data));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const command = raw;
|
|
124
|
+
// Chat commands are stateless — run concurrently, outside the queue
|
|
125
|
+
if (command.type === 'chat_list_sessions' || command.type === 'chat_history' || command.type === 'chat_send') {
|
|
126
|
+
const publishFn = async (data) => { await opts.api.publishResponse(opts.agentId, data); };
|
|
127
|
+
console.log(`[WS] Handling chat command: type=${command.type} id=${command.id}`);
|
|
128
|
+
switch (command.type) {
|
|
129
|
+
case 'chat_list_sessions':
|
|
130
|
+
handleChatListSessions(command, publishFn).catch(console.error);
|
|
131
|
+
break;
|
|
132
|
+
case 'chat_history':
|
|
133
|
+
handleChatHistory(command, publishFn).catch(console.error);
|
|
134
|
+
break;
|
|
135
|
+
case 'chat_send':
|
|
136
|
+
handleChatSend(command, publishFn, opts.agentId).catch(console.error);
|
|
137
|
+
break;
|
|
211
138
|
}
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
// All other commands — serialized queue (RACE-1)
|
|
142
|
+
commandQueue = commandQueue.then(async () => {
|
|
212
143
|
const handler = handlers[command.type];
|
|
213
144
|
if (!handler) {
|
|
214
145
|
console.error(`[WS] Unknown command type: ${command.type}`);
|
|
@@ -224,18 +155,17 @@ function attachCommandHandlers(sub, channel, opts) {
|
|
|
224
155
|
id: command.id,
|
|
225
156
|
type: command.type,
|
|
226
157
|
success: false,
|
|
227
|
-
error:
|
|
158
|
+
error: toErrorMessage(err),
|
|
228
159
|
};
|
|
229
160
|
try {
|
|
230
161
|
await opts.api.publishResponse(opts.agentId, errorResponse);
|
|
231
162
|
}
|
|
232
163
|
catch (publishErr) {
|
|
233
|
-
console.error('[WS] Failed to publish error response:', publishErr
|
|
164
|
+
console.error('[WS] Failed to publish error response:', toErrorMessage(publishErr));
|
|
234
165
|
}
|
|
235
166
|
}
|
|
236
167
|
}).catch((err) => {
|
|
237
|
-
|
|
238
|
-
console.error('[WS] Unhandled error in command queue:', err instanceof Error ? err.message : err);
|
|
168
|
+
console.error('[WS] Unhandled error in command queue:', toErrorMessage(err));
|
|
239
169
|
});
|
|
240
170
|
});
|
|
241
171
|
return () => commandQueue;
|
|
@@ -245,16 +175,11 @@ function attachCommandHandlers(sub, channel, opts) {
|
|
|
245
175
|
// ---------------------------------------------------------------------------
|
|
246
176
|
export function createConnection(opts) {
|
|
247
177
|
const commandChannel = `agent:${opts.agentId}`;
|
|
248
|
-
// Step 1: Create client
|
|
249
178
|
const client = createClient(opts);
|
|
250
|
-
// Step 2: Subscribe to agent command channel
|
|
251
179
|
const commandSub = subscribeToChannel(client, commandChannel, opts);
|
|
252
|
-
// Step 3: Wire up command handlers
|
|
253
180
|
const drainCommands = attachCommandHandlers(commandSub, commandChannel, opts);
|
|
254
|
-
// Step 4: Connect
|
|
255
181
|
client.connect();
|
|
256
182
|
return { client, drainCommands };
|
|
257
183
|
}
|
|
258
|
-
// Re-export for use in index.ts (board subscription)
|
|
259
184
|
export { subscribeToChannel };
|
|
260
185
|
//# sourceMappingURL=connection.js.map
|
package/dist/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AACtD,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { AgentCommand, AgentResponse } from '../types.js';
|
|
2
|
-
|
|
2
|
+
import type { AgentApi } from '../api.js';
|
|
3
|
+
export declare function handleBackup(command: AgentCommand, api: AgentApi, agentId: string): Promise<AgentResponse>;
|
package/dist/handlers/backup.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { pushBackupToBackend } from '../utils/backup-push.js';
|
|
2
2
|
import { toErrorMessage } from '../utils/response.js';
|
|
3
|
-
export async function handleBackup(command) {
|
|
3
|
+
export async function handleBackup(command, api, agentId) {
|
|
4
4
|
try {
|
|
5
|
-
const { snapshotId, sizeBytes } = await pushBackupToBackend();
|
|
5
|
+
const { snapshotId, sizeBytes } = await pushBackupToBackend(api, agentId);
|
|
6
6
|
return {
|
|
7
7
|
id: command.id,
|
|
8
8
|
type: 'backup',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/handlers/backup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/handlers/backup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB,EAAE,GAAa,EAAE,OAAe;IACtF,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1E,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;SAChC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/handlers/chat.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getChatProvider } from '../openclaw/index.js';
|
|
2
|
+
import { toErrorMessage } from '../utils/response.js';
|
|
2
3
|
export async function handleChatListSessions(command, publish) {
|
|
3
4
|
const provider = getChatProvider();
|
|
4
5
|
if (!provider) {
|
|
@@ -10,7 +11,7 @@ export async function handleChatListSessions(command, publish) {
|
|
|
10
11
|
await publish({ type: 'chat_sessions_response', correlationId: command.id, sessions });
|
|
11
12
|
}
|
|
12
13
|
catch (err) {
|
|
13
|
-
await publish({ type: 'chat_sessions_response', correlationId: command.id, sessions: [], error:
|
|
14
|
+
await publish({ type: 'chat_sessions_response', correlationId: command.id, sessions: [], error: toErrorMessage(err) });
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
export async function handleChatHistory(command, publish) {
|
|
@@ -25,7 +26,7 @@ export async function handleChatHistory(command, publish) {
|
|
|
25
26
|
await publish({ type: 'chat_history_response', correlationId: command.id, messages });
|
|
26
27
|
}
|
|
27
28
|
catch (err) {
|
|
28
|
-
await publish({ type: 'chat_history_response', correlationId: command.id, messages: [], error:
|
|
29
|
+
await publish({ type: 'chat_history_response', correlationId: command.id, messages: [], error: toErrorMessage(err) });
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
32
|
export async function handleChatSend(command, publish, agentId) {
|
|
@@ -56,7 +57,7 @@ export async function handleChatSend(command, publish, agentId) {
|
|
|
56
57
|
});
|
|
57
58
|
}
|
|
58
59
|
catch (err) {
|
|
59
|
-
await publish({ type: 'chat_response', correlationId, sessionKey, text: '', error:
|
|
60
|
+
await publish({ type: 'chat_response', correlationId, sessionKey, text: '', error: toErrorMessage(err) }).catch(() => { });
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
//# sourceMappingURL=chat.js.map
|