@openclaw-cloud/agent-controller 0.7.1 → 0.7.3
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/commands/backup-cli.js +5 -24
- package/dist/commands/backup-cli.js.map +1 -1
- package/dist/commands/bootstrap.js +2 -8
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/knowledge-sync-cli.js +3 -13
- package/dist/commands/knowledge-sync-cli.js.map +1 -1
- package/dist/commands/self-update.js +3 -15
- package/dist/commands/self-update.js.map +1 -1
- package/dist/connection.d.ts +3 -1
- package/dist/connection.js +138 -90
- package/dist/connection.js.map +1 -1
- package/dist/handlers/backup.d.ts +2 -1
- package/dist/handlers/backup.js +31 -50
- package/dist/handlers/backup.js.map +1 -1
- package/dist/handlers/board-handler.js +12 -4
- package/dist/handlers/board-handler.js.map +1 -1
- package/dist/handlers/config.js +25 -29
- package/dist/handlers/config.js.map +1 -1
- package/dist/handlers/deploy.js +20 -6
- package/dist/handlers/deploy.js.map +1 -1
- package/dist/handlers/exec.js +1 -1
- package/dist/handlers/exec.js.map +1 -1
- package/dist/handlers/file-delete.js +4 -3
- package/dist/handlers/file-delete.js.map +1 -1
- package/dist/handlers/file-write.js +4 -3
- package/dist/handlers/file-write.js.map +1 -1
- package/dist/handlers/knowledge-sync.js +17 -6
- package/dist/handlers/knowledge-sync.js.map +1 -1
- package/dist/handlers/onboarding.js +21 -16
- package/dist/handlers/onboarding.js.map +1 -1
- package/dist/handlers/package-install.js +4 -6
- package/dist/handlers/package-install.js.map +1 -1
- package/dist/handlers/pair.js +3 -0
- package/dist/handlers/pair.js.map +1 -1
- package/dist/handlers/restart.js +21 -16
- package/dist/handlers/restart.js.map +1 -1
- package/dist/handlers/stop.js +4 -0
- package/dist/handlers/stop.js.map +1 -1
- package/dist/heartbeat.d.ts +4 -1
- package/dist/heartbeat.js +9 -13
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.js +20 -18
- package/dist/index.js.map +1 -1
- package/dist/openclaw/gateway-adapter.js +19 -12
- package/dist/openclaw/gateway-adapter.js.map +1 -1
- package/dist/openclaw/gateway-client.d.ts +2 -2
- package/dist/openclaw/gateway-client.js +31 -16
- package/dist/openclaw/gateway-client.js.map +1 -1
- package/dist/openclaw/index.d.ts +1 -0
- package/dist/openclaw/index.js +3 -0
- package/dist/openclaw/index.js.map +1 -1
- package/dist/platform/common.d.ts +6 -0
- package/dist/platform/common.js +2 -0
- package/dist/platform/common.js.map +1 -0
- package/dist/platform/linux.d.ts +2 -6
- package/dist/platform/linux.js +7 -18
- package/dist/platform/linux.js.map +1 -1
- package/dist/platform/macos.d.ts +2 -6
- package/dist/platform/macos.js +7 -18
- package/dist/platform/macos.js.map +1 -1
- package/dist/platform/windows.d.ts +2 -6
- package/dist/platform/windows.js +7 -18
- package/dist/platform/windows.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils/archive.d.ts +1 -0
- package/dist/utils/archive.js +16 -0
- package/dist/utils/archive.js.map +1 -0
- package/dist/utils/env.d.ts +1 -0
- package/dist/utils/env.js +9 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/exec.d.ts +1 -0
- package/dist/utils/exec.js +12 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/gateway-restart.d.ts +10 -0
- package/dist/utils/gateway-restart.js +23 -0
- package/dist/utils/gateway-restart.js.map +1 -0
- package/dist/utils/response.d.ts +3 -0
- package/dist/utils/response.js +7 -0
- package/dist/utils/response.js.map +1 -0
- package/dist/workspace.d.ts +12 -0
- package/dist/workspace.js +20 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,29 +1,8 @@
|
|
|
1
|
-
import { exec } from 'node:child_process';
|
|
2
1
|
import fs from 'node:fs/promises';
|
|
3
|
-
import os from 'node:os';
|
|
4
2
|
import path from 'node:path';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
function requireEnv(name) {
|
|
10
|
-
const value = process.env[name];
|
|
11
|
-
if (!value) {
|
|
12
|
-
console.error(`Missing required env: ${name}`);
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
return value;
|
|
16
|
-
}
|
|
17
|
-
function createArchive(archivePath, workspaceDir) {
|
|
18
|
-
return new Promise((resolve, reject) => {
|
|
19
|
-
exec(`tar -czf ${archivePath} -C ${path.dirname(workspaceDir)} ${path.basename(workspaceDir)}`, { timeout: 120_000 }, (err, _stdout, stderr) => {
|
|
20
|
-
if (err)
|
|
21
|
-
reject(new Error(`tar failed: ${stderr || err.message}`));
|
|
22
|
-
else
|
|
23
|
-
resolve();
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
}
|
|
3
|
+
import { getWorkspaceDir } from '../workspace.js';
|
|
4
|
+
import { requireEnv } from '../utils/env.js';
|
|
5
|
+
import { createArchive } from '../utils/archive.js';
|
|
27
6
|
export async function runBackup() {
|
|
28
7
|
const backendUrl = process.env.BACKEND_URL || process.env.BACKEND_INTERNAL_URL || requireEnv('BACKEND_URL');
|
|
29
8
|
const agentToken = requireEnv('AGENT_TOKEN');
|
|
@@ -33,6 +12,7 @@ export async function runBackup() {
|
|
|
33
12
|
const initRes = await fetch(`${backendUrl}/api/internal/agents/${agentId}/backup/init`, {
|
|
34
13
|
method: 'POST',
|
|
35
14
|
headers: { Authorization: `Bearer ${agentToken}` },
|
|
15
|
+
signal: AbortSignal.timeout(30_000),
|
|
36
16
|
});
|
|
37
17
|
if (!initRes.ok) {
|
|
38
18
|
const text = await initRes.text().catch(() => '');
|
|
@@ -69,6 +49,7 @@ export async function runBackup() {
|
|
|
69
49
|
method: 'POST',
|
|
70
50
|
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${agentToken}` },
|
|
71
51
|
body: JSON.stringify({ snapshotId, sizeBytes: stat.size }),
|
|
52
|
+
signal: AbortSignal.timeout(30_000),
|
|
72
53
|
});
|
|
73
54
|
if (!completeRes.ok) {
|
|
74
55
|
const text = await completeRes.text().catch(() => '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup-cli.js","sourceRoot":"","sources":["../../src/commands/backup-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"backup-cli.js","sourceRoot":"","sources":["../../src/commands/backup-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
-
|
|
5
|
-
const value = process.env[name];
|
|
6
|
-
if (!value) {
|
|
7
|
-
console.error(`Missing required environment variable: ${name}`);
|
|
8
|
-
process.exit(1);
|
|
9
|
-
}
|
|
10
|
-
return value;
|
|
11
|
-
}
|
|
4
|
+
import { requireEnv } from '../utils/env.js';
|
|
12
5
|
export async function bootstrap() {
|
|
13
6
|
const backendUrl = process.env.BACKEND_URL || process.env.BACKEND_INTERNAL_URL || requireEnv('BACKEND_URL');
|
|
14
7
|
const agentToken = requireEnv('AGENT_TOKEN');
|
|
@@ -24,6 +17,7 @@ export async function bootstrap() {
|
|
|
24
17
|
try {
|
|
25
18
|
const res = await fetch(url, {
|
|
26
19
|
headers: { Authorization: `Bearer ${agentToken}` },
|
|
20
|
+
signal: AbortSignal.timeout(30_000),
|
|
27
21
|
});
|
|
28
22
|
if (!res.ok) {
|
|
29
23
|
const body = await res.text().catch(() => '');
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
|
-
import os from 'node:os';
|
|
3
2
|
import path from 'node:path';
|
|
3
|
+
import { getWorkspaceDir } from '../workspace.js';
|
|
4
|
+
import { requireEnv } from '../utils/env.js';
|
|
4
5
|
const FIXED_FILES = ['SOUL.md', 'MEMORY.md', 'AGENTS.md', 'TOOLS.md', 'HEARTBEAT.md', 'USER.md'];
|
|
5
|
-
function getWorkspaceDir() {
|
|
6
|
-
const stateDir = process.env.OPENCLAW_STATE_DIR?.trim() ?? path.join(os.homedir(), '.openclaw');
|
|
7
|
-
return path.join(stateDir, 'workspace');
|
|
8
|
-
}
|
|
9
|
-
function requireEnv(name) {
|
|
10
|
-
const value = process.env[name];
|
|
11
|
-
if (!value) {
|
|
12
|
-
console.error(`Missing required env: ${name}`);
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
return value;
|
|
16
|
-
}
|
|
17
6
|
export async function runKnowledgeSync() {
|
|
18
7
|
const backendUrl = process.env.BACKEND_URL || process.env.BACKEND_INTERNAL_URL || requireEnv('BACKEND_URL');
|
|
19
8
|
const agentToken = requireEnv('AGENT_TOKEN');
|
|
@@ -49,6 +38,7 @@ export async function runKnowledgeSync() {
|
|
|
49
38
|
Authorization: `Bearer ${agentToken}`,
|
|
50
39
|
},
|
|
51
40
|
body: JSON.stringify({ files }),
|
|
41
|
+
signal: AbortSignal.timeout(30_000),
|
|
52
42
|
});
|
|
53
43
|
if (!res.ok) {
|
|
54
44
|
const text = await res.text().catch(() => '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-sync-cli.js","sourceRoot":"","sources":["../../src/commands/knowledge-sync-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"knowledge-sync-cli.js","sourceRoot":"","sources":["../../src/commands/knowledge-sync-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;AAEjG,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;IAC5G,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEvC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;IAEnC,uCAAuC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;IAEvC,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,MAAM,0BAA0B,CAAC,CAAC;IACnE,MAAM,KAAK,GAAwC,EAAE,CAAC;IACtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAEtD,kBAAkB;IAClB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,wBAAwB,OAAO,iBAAiB,EAAE;QACrF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,UAAU,EAAE;SACtC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;QAC/B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAA8B,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,6BAA6B,YAAY,IAAI,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execAsync } from '../utils/exec.js';
|
|
2
2
|
const PACKAGE_NAME = '@openclaw-cloud/agent-controller';
|
|
3
|
-
function execAsync(cmd, timeout) {
|
|
4
|
-
return new Promise((resolve, reject) => {
|
|
5
|
-
exec(cmd, { timeout }, (err, stdout) => {
|
|
6
|
-
if (err)
|
|
7
|
-
reject(err);
|
|
8
|
-
else
|
|
9
|
-
resolve(stdout.toString().trim());
|
|
10
|
-
});
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
3
|
export async function selfUpdate(currentVersion) {
|
|
14
4
|
console.log(`Current version: ${currentVersion}`);
|
|
15
5
|
let latestVersion;
|
|
@@ -18,8 +8,7 @@ export async function selfUpdate(currentVersion) {
|
|
|
18
8
|
}
|
|
19
9
|
catch (err) {
|
|
20
10
|
console.error('Failed to fetch latest version:', err instanceof Error ? err.message : err);
|
|
21
|
-
|
|
22
|
-
return; // unreachable in production; guards test flow when process.exit is mocked
|
|
11
|
+
throw err;
|
|
23
12
|
}
|
|
24
13
|
console.log(`Latest version: ${latestVersion}`);
|
|
25
14
|
if (currentVersion === latestVersion) {
|
|
@@ -31,11 +20,10 @@ export async function selfUpdate(currentVersion) {
|
|
|
31
20
|
await execAsync(`npm install -g ${PACKAGE_NAME}@latest`, 120_000);
|
|
32
21
|
console.log(`Successfully updated to ${latestVersion}. Restarting...`);
|
|
33
22
|
process.exit(0);
|
|
34
|
-
return; // unreachable in production; guards test flow when process.exit is mocked
|
|
35
23
|
}
|
|
36
24
|
catch (err) {
|
|
37
25
|
console.error('Update failed:', err instanceof Error ? err.message : err);
|
|
38
|
-
|
|
26
|
+
throw err;
|
|
39
27
|
}
|
|
40
28
|
}
|
|
41
29
|
//# sourceMappingURL=self-update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,YAAY,GAAG,kCAAkC,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,cAAsB;IACrD,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,EAAE,CAAC,CAAC;IAElD,IAAI,aAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,SAAS,CAAC,YAAY,YAAY,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3F,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC;IAEhD,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,cAAc,OAAO,aAAa,KAAK,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,kBAAkB,YAAY,SAAS,EAAE,OAAO,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,2BAA2B,aAAa,iBAAiB,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/connection.d.ts
CHANGED
|
@@ -8,7 +8,9 @@ export interface ConnectionOptions {
|
|
|
8
8
|
api: AgentApi;
|
|
9
9
|
version: string;
|
|
10
10
|
}
|
|
11
|
+
declare function subscribeToChannel(client: Centrifuge, channel: string, opts: ConnectionOptions): Subscription;
|
|
11
12
|
export declare function createConnection(opts: ConnectionOptions): {
|
|
12
13
|
client: Centrifuge;
|
|
13
|
-
|
|
14
|
+
drainCommands: () => Promise<void>;
|
|
14
15
|
};
|
|
16
|
+
export { subscribeToChannel };
|
package/dist/connection.js
CHANGED
|
@@ -15,7 +15,10 @@ 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
17
|
import { selfUpdate } from './commands/self-update.js';
|
|
18
|
-
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Handlers
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
function buildHandlers(opts) {
|
|
19
22
|
return {
|
|
20
23
|
exec: handleExec,
|
|
21
24
|
restart: handleRestart,
|
|
@@ -23,13 +26,16 @@ function buildHandlers(version) {
|
|
|
23
26
|
config: handleConfig,
|
|
24
27
|
pair: handlePair,
|
|
25
28
|
stop: handleStop,
|
|
26
|
-
backup: handleBackup,
|
|
29
|
+
backup: (cmd) => handleBackup(cmd, opts.api, opts.agentId),
|
|
27
30
|
package_install: handlePackageInstall,
|
|
28
31
|
file_write: handleFileWrite,
|
|
29
32
|
file_delete: handleFileDelete,
|
|
30
33
|
onboarding_complete: handleOnboardingComplete,
|
|
31
34
|
knowledge_sync: handleKnowledgeSync,
|
|
32
|
-
|
|
35
|
+
// RACE-3: selfUpdate calls process.exit(0) after npm install, which may interrupt
|
|
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)
|
|
33
39
|
.then(() => ({ id: cmd.id, type: cmd.type, success: true, data: {} }))
|
|
34
40
|
.catch((err) => ({
|
|
35
41
|
id: cmd.id,
|
|
@@ -39,7 +45,11 @@ function buildHandlers(version) {
|
|
|
39
45
|
})),
|
|
40
46
|
};
|
|
41
47
|
}
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Token helpers
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
42
51
|
async function fetchConnectionToken(backendUrl, agentToken, agentId) {
|
|
52
|
+
debugLog('api', '→ POST /api/internal/centrifugo-token', JSON.stringify({ agentId }));
|
|
43
53
|
const controller = new AbortController();
|
|
44
54
|
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
45
55
|
try {
|
|
@@ -52,10 +62,12 @@ async function fetchConnectionToken(backendUrl, agentToken, agentId) {
|
|
|
52
62
|
body: JSON.stringify({ agentId }),
|
|
53
63
|
signal: controller.signal,
|
|
54
64
|
});
|
|
65
|
+
const body = await res.text();
|
|
66
|
+
debugLog('api', `← POST /api/internal/centrifugo-token ${res.status}`, body.slice(0, 200));
|
|
55
67
|
if (!res.ok) {
|
|
56
|
-
throw new Error(`HTTP ${res.status}: ${
|
|
68
|
+
throw new Error(`HTTP ${res.status}: ${body}`);
|
|
57
69
|
}
|
|
58
|
-
const data =
|
|
70
|
+
const data = JSON.parse(body);
|
|
59
71
|
return data.token;
|
|
60
72
|
}
|
|
61
73
|
finally {
|
|
@@ -63,7 +75,6 @@ async function fetchConnectionToken(backendUrl, agentToken, agentId) {
|
|
|
63
75
|
}
|
|
64
76
|
}
|
|
65
77
|
async function fetchSubscriptionToken(backendUrl, agentToken, agentId, channels) {
|
|
66
|
-
console.log('Fetching subscription token...', { channels });
|
|
67
78
|
debugLog('api', '→ POST /api/internal/centrifugo-subscribe-token', JSON.stringify({ agentId, channels }));
|
|
68
79
|
const controller = new AbortController();
|
|
69
80
|
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
@@ -83,7 +94,6 @@ async function fetchSubscriptionToken(backendUrl, agentToken, agentId, channels)
|
|
|
83
94
|
throw new Error(`HTTP ${res.status}: ${body}`);
|
|
84
95
|
}
|
|
85
96
|
const data = JSON.parse(body);
|
|
86
|
-
console.log('Got subscription token for', channels.join(', '));
|
|
87
97
|
return data.subscriptions;
|
|
88
98
|
}
|
|
89
99
|
catch (err) {
|
|
@@ -94,90 +104,28 @@ async function fetchSubscriptionToken(backendUrl, agentToken, agentId, channels)
|
|
|
94
104
|
clearTimeout(timeout);
|
|
95
105
|
}
|
|
96
106
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Step 1: Create Centrifuge client (no subscriptions yet)
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
function createClient(opts) {
|
|
100
111
|
const getToken = async () => {
|
|
101
|
-
console.log('Fetching
|
|
112
|
+
console.log('Fetching connection token...');
|
|
102
113
|
try {
|
|
103
114
|
const token = await fetchConnectionToken(opts.backendUrl, opts.token, opts.agentId);
|
|
104
|
-
console.log('Got
|
|
115
|
+
console.log('Got connection token');
|
|
105
116
|
return token;
|
|
106
117
|
}
|
|
107
118
|
catch (err) {
|
|
108
|
-
console.error('
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
const token = await fetchConnectionToken(opts.backendUrl, opts.token, opts.agentId);
|
|
112
|
-
console.log('Got Centrifugo JWT (retry)');
|
|
113
|
-
return token;
|
|
114
|
-
}
|
|
115
|
-
catch (retryErr) {
|
|
116
|
-
console.error('JWT fetch retry failed:', retryErr instanceof Error ? retryErr.message : retryErr);
|
|
117
|
-
throw retryErr;
|
|
118
|
-
}
|
|
119
|
+
console.error('Connection token failed:', err instanceof Error ? err.message : err);
|
|
120
|
+
throw err;
|
|
119
121
|
}
|
|
120
122
|
};
|
|
121
|
-
const
|
|
123
|
+
const client = new Centrifuge(opts.url, {
|
|
122
124
|
websocket: WebSocket,
|
|
123
125
|
name: 'agent-controller',
|
|
124
126
|
getToken,
|
|
125
127
|
minReconnectDelay: 1000,
|
|
126
128
|
maxReconnectDelay: 30000,
|
|
127
|
-
};
|
|
128
|
-
const client = new Centrifuge(opts.url, centrifugeOpts);
|
|
129
|
-
const commandSub = client.newSubscription(commandChannel, {
|
|
130
|
-
getToken: async () => {
|
|
131
|
-
console.log("Fetching subscription token for", commandChannel);
|
|
132
|
-
const subs = await fetchSubscriptionToken(opts.backendUrl, opts.token, opts.agentId, [commandChannel]);
|
|
133
|
-
return subs[commandChannel] ?? '';
|
|
134
|
-
},
|
|
135
|
-
});
|
|
136
|
-
const handlers = buildHandlers(opts.version);
|
|
137
|
-
commandSub.on('publication', async (ctx) => {
|
|
138
|
-
console.log(`[WS] Received message on ${commandChannel}:`, JSON.stringify(ctx.data));
|
|
139
|
-
debugLog('connection', 'publication', commandChannel, JSON.stringify(ctx.data).slice(0, 500));
|
|
140
|
-
const command = ctx.data;
|
|
141
|
-
if (!command || !command.type) {
|
|
142
|
-
console.warn('[WS] Ignoring message without type:', JSON.stringify(ctx.data));
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
// Chat commands — handle before generic dispatch
|
|
146
|
-
if (command.type === 'chat_list_sessions' || command.type === 'chat_history' || command.type === 'chat_send') {
|
|
147
|
-
const publishFn = async (data) => { await opts.api.publishResponse(opts.agentId, data); };
|
|
148
|
-
console.log(`[WS] Handling chat command: type=${command.type} id=${command.id}`);
|
|
149
|
-
switch (command.type) {
|
|
150
|
-
case 'chat_list_sessions':
|
|
151
|
-
handleChatListSessions(command, publishFn).catch(console.error);
|
|
152
|
-
break;
|
|
153
|
-
case 'chat_history':
|
|
154
|
-
handleChatHistory(command, publishFn).catch(console.error);
|
|
155
|
-
break;
|
|
156
|
-
case 'chat_send':
|
|
157
|
-
handleChatSend(command, publishFn, opts.agentId).catch(console.error);
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
const handler = handlers[command.type];
|
|
163
|
-
if (!handler) {
|
|
164
|
-
console.error(`[WS] Unknown command type: ${command.type}`);
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
console.log(`[WS] Handling command: type=${command.type} id=${command.id}`);
|
|
168
|
-
try {
|
|
169
|
-
const response = await handler(command);
|
|
170
|
-
await opts.api.publishResponse(opts.agentId, response);
|
|
171
|
-
}
|
|
172
|
-
catch (err) {
|
|
173
|
-
const errorResponse = {
|
|
174
|
-
id: command.id,
|
|
175
|
-
type: command.type,
|
|
176
|
-
success: false,
|
|
177
|
-
error: err instanceof Error ? err.message : String(err),
|
|
178
|
-
};
|
|
179
|
-
await opts.api.publishResponse(opts.agentId, errorResponse);
|
|
180
|
-
}
|
|
181
129
|
});
|
|
182
130
|
client.on('connected', (ctx) => {
|
|
183
131
|
console.log(`Connected to Centrifugo via ${ctx.transport}`);
|
|
@@ -191,22 +139,122 @@ export function createConnection(opts) {
|
|
|
191
139
|
console.log(`Connecting: ${ctx.reason} (code ${ctx.code})`);
|
|
192
140
|
debugLog('connection', 'connecting', ctx);
|
|
193
141
|
});
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
142
|
+
return client;
|
|
143
|
+
}
|
|
144
|
+
// ---------------------------------------------------------------------------
|
|
145
|
+
// Step 2: Subscribe to a channel with subscription token auth
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
function subscribeToChannel(client, channel, opts) {
|
|
148
|
+
const sub = client.newSubscription(channel, {
|
|
149
|
+
getToken: async () => {
|
|
150
|
+
console.log(`Fetching subscription token for ${channel}...`);
|
|
151
|
+
const subs = await fetchSubscriptionToken(opts.backendUrl, opts.token, opts.agentId, [channel]);
|
|
152
|
+
const token = subs[channel];
|
|
153
|
+
if (!token) {
|
|
154
|
+
throw new Error(`No subscription token returned for ${channel}`);
|
|
155
|
+
}
|
|
156
|
+
console.log(`Got subscription token for ${channel}`);
|
|
157
|
+
return token;
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
sub.on('subscribed', (ctx) => {
|
|
161
|
+
console.log(`[WS] Subscribed to ${channel} (recovered=${ctx.wasRecovering})`);
|
|
162
|
+
debugLog('connection', 'subscribed', channel, ctx);
|
|
197
163
|
});
|
|
198
|
-
|
|
199
|
-
console.log(`[WS] Subscribing to ${
|
|
200
|
-
debugLog('connection', 'subscribing',
|
|
164
|
+
sub.on('subscribing', (ctx) => {
|
|
165
|
+
console.log(`[WS] Subscribing to ${channel}: ${ctx.reason} (code ${ctx.code})`);
|
|
166
|
+
debugLog('connection', 'subscribing', channel, ctx);
|
|
201
167
|
});
|
|
202
|
-
|
|
203
|
-
console.error(`[WS] Subscription error on ${
|
|
168
|
+
sub.on('error', (ctx) => {
|
|
169
|
+
console.error(`[WS] Subscription error on ${channel}:`, ctx.error);
|
|
204
170
|
});
|
|
205
|
-
|
|
206
|
-
console.log(`[WS] Unsubscribed from ${
|
|
171
|
+
sub.on('unsubscribed', (ctx) => {
|
|
172
|
+
console.log(`[WS] Unsubscribed from ${channel}: ${ctx.reason} (code ${ctx.code})`);
|
|
207
173
|
});
|
|
208
|
-
|
|
174
|
+
sub.subscribe();
|
|
175
|
+
return sub;
|
|
176
|
+
}
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
// Step 3: Wire up agent command channel
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
function attachCommandHandlers(sub, channel, opts) {
|
|
181
|
+
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
|
+
let commandQueue = Promise.resolve();
|
|
185
|
+
sub.on('publication', (ctx) => {
|
|
186
|
+
commandQueue = commandQueue.then(async () => {
|
|
187
|
+
console.log(`[WS] Received message on ${channel}:`, JSON.stringify(ctx.data));
|
|
188
|
+
debugLog('connection', 'publication', channel, JSON.stringify(ctx.data).slice(0, 500));
|
|
189
|
+
const raw = ctx.data;
|
|
190
|
+
if (!raw || typeof raw['id'] !== 'string' || typeof raw['type'] !== 'string') {
|
|
191
|
+
console.warn('[WS] Ignoring malformed message (missing id or type):', JSON.stringify(ctx.data));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const command = raw;
|
|
195
|
+
// Chat commands
|
|
196
|
+
if (command.type === 'chat_list_sessions' || command.type === 'chat_history' || command.type === 'chat_send') {
|
|
197
|
+
const publishFn = async (data) => { await opts.api.publishResponse(opts.agentId, data); };
|
|
198
|
+
console.log(`[WS] Handling chat command: type=${command.type} id=${command.id}`);
|
|
199
|
+
switch (command.type) {
|
|
200
|
+
case 'chat_list_sessions':
|
|
201
|
+
handleChatListSessions(command, publishFn).catch(console.error);
|
|
202
|
+
break;
|
|
203
|
+
case 'chat_history':
|
|
204
|
+
handleChatHistory(command, publishFn).catch(console.error);
|
|
205
|
+
break;
|
|
206
|
+
case 'chat_send':
|
|
207
|
+
handleChatSend(command, publishFn, opts.agentId).catch(console.error);
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const handler = handlers[command.type];
|
|
213
|
+
if (!handler) {
|
|
214
|
+
console.error(`[WS] Unknown command type: ${command.type}`);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
console.log(`[WS] Handling command: type=${command.type} id=${command.id}`);
|
|
218
|
+
try {
|
|
219
|
+
const response = await handler(command);
|
|
220
|
+
await opts.api.publishResponse(opts.agentId, response);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
const errorResponse = {
|
|
224
|
+
id: command.id,
|
|
225
|
+
type: command.type,
|
|
226
|
+
success: false,
|
|
227
|
+
error: err instanceof Error ? err.message : String(err),
|
|
228
|
+
};
|
|
229
|
+
try {
|
|
230
|
+
await opts.api.publishResponse(opts.agentId, errorResponse);
|
|
231
|
+
}
|
|
232
|
+
catch (publishErr) {
|
|
233
|
+
console.error('[WS] Failed to publish error response:', publishErr instanceof Error ? publishErr.message : publishErr);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}).catch((err) => {
|
|
237
|
+
// Prevent one command failure from breaking the queue for subsequent commands
|
|
238
|
+
console.error('[WS] Unhandled error in command queue:', err instanceof Error ? err.message : err);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
return () => commandQueue;
|
|
242
|
+
}
|
|
243
|
+
// ---------------------------------------------------------------------------
|
|
244
|
+
// Public API
|
|
245
|
+
// ---------------------------------------------------------------------------
|
|
246
|
+
export function createConnection(opts) {
|
|
247
|
+
const commandChannel = `agent:${opts.agentId}`;
|
|
248
|
+
// Step 1: Create client
|
|
249
|
+
const client = createClient(opts);
|
|
250
|
+
// Step 2: Subscribe to agent command channel
|
|
251
|
+
const commandSub = subscribeToChannel(client, commandChannel, opts);
|
|
252
|
+
// Step 3: Wire up command handlers
|
|
253
|
+
const drainCommands = attachCommandHandlers(commandSub, commandChannel, opts);
|
|
254
|
+
// Step 4: Connect
|
|
209
255
|
client.connect();
|
|
210
|
-
return { client,
|
|
256
|
+
return { client, drainCommands };
|
|
211
257
|
}
|
|
258
|
+
// Re-export for use in index.ts (board subscription)
|
|
259
|
+
export { subscribeToChannel };
|
|
212
260
|
//# 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,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAWvD,SAAS,aAAa,CAAC,
|
|
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,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAWvD,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,SAAS,aAAa,CAAC,IAAuB;IAC5C,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;QAC1D,eAAe,EAAE,oBAAoB;QACrC,UAAU,EAAE,eAAe;QAC3B,WAAW,EAAE,gBAAgB;QAC7B,mBAAmB,EAAE,wBAAwB;QAC7C,cAAc,EAAE,mBAAmB;QACnC,kFAAkF;QAClF,yFAAyF;QACzF,iFAAiF;QACjF,WAAW,EAAE,CAAC,GAAiB,EAAE,EAAE,CACjC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;aACrB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aACrE,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,CAAC;YACxB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;KACR,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,KAAK,UAAU,oBAAoB,CACjC,UAAkB,EAClB,UAAkB,EAClB,OAAe;IAEf,QAAQ,CAAC,KAAK,EAAE,uCAAuC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,gCAAgC,EAAE;YACrE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,UAAU,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;YACjC,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,yCAAyC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,UAAkB,EAClB,UAAkB,EAClB,OAAe,EACf,QAAkB;IAElB,QAAQ,CAAC,KAAK,EAAE,iDAAiD,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC1G,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,0CAA0C,EAAE;YAC/E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,UAAU,EAAE;aACxC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YAC3C,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,mDAAmD,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA8C,CAAC;QAC3E,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5F,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,0DAA0D;AAC1D,8EAA8E;AAE9E,SAAS,YAAY,CAAC,IAAuB;IAC3C,MAAM,QAAQ,GAAG,KAAK,IAAqB,EAAE;QAC3C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACpF,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE;QACtC,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,kBAAkB;QACxB,QAAQ;QACR,iBAAiB,EAAE,IAAI;QACvB,iBAAiB,EAAE,KAAK;KACzB,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5D,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE;QAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9D,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAC5D,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,SAAS,kBAAkB,CACzB,MAAkB,EAClB,OAAe,EACf,IAAuB;IAEvB,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE;QAC1C,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,KAAK,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAChG,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,eAAe,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC;QAC9E,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;QAC5B,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,KAAK,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAChF,QAAQ,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,0BAA0B,OAAO,KAAK,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,SAAS,EAAE,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E,SAAS,qBAAqB,CAC5B,GAAiB,EACjB,OAAe,EACf,IAAuB;IAEvB,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAErC,6EAA6E;IAC7E,wFAAwF;IACxF,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAErC,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;QAC5B,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5C,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9E,QAAQ,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACvF,MAAM,GAAG,GAAG,GAAG,CAAC,IAAsC,CAAC;YACvD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChG,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,GAA8B,CAAC;YAE/C,gBAAgB;YAChB,IAAI,OAAO,CAAC,IAAI,KAAK,oBAAoB,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC7G,MAAM,SAAS,GAAG,KAAK,EAAE,IAAa,EAAiB,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClH,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjF,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;oBACrB,KAAK,oBAAoB;wBACvB,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBAChE,MAAM;oBACR,KAAK,cAAc;wBACjB,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBAC3D,MAAM;oBACR,KAAK,WAAW;wBACd,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACtE,MAAM;gBACV,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAE5E,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxC,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,aAAa,GAAkB;oBACnC,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC;gBACF,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,UAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACzH,CAAC;YACH,CAAC;QACD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACf,8EAA8E;YAC9E,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,UAAU,gBAAgB,CAAC,IAAuB;IAItD,MAAM,cAAc,GAAG,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;IAE/C,wBAAwB;IACxB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,6CAA6C;IAC7C,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAEpE,mCAAmC;IACnC,MAAM,aAAa,GAAG,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAE9E,kBAAkB;IAClB,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACnC,CAAC;AAED,qDAAqD;AACrD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -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>;
|