@openclaw-cloud/agent-controller 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/backup-cli.js +10 -75
- package/dist/commands/backup-cli.js.map +1 -1
- package/dist/commands/knowledge-sync-cli.js +7 -44
- package/dist/commands/knowledge-sync-cli.js.map +1 -1
- package/dist/connection.js +35 -40
- package/dist/connection.js.map +1 -1
- package/dist/handlers/backup.d.ts +1 -2
- package/dist/handlers/backup.js +7 -80
- 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.js +25 -56
- 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 +16 -0
- package/dist/utils/backup-push.js +95 -0
- package/dist/utils/backup-push.js.map +1 -0
- 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 +8 -0
- package/dist/utils/knowledge-push.js +103 -0
- package/dist/utils/knowledge-push.js.map +1 -0
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type PlatformConfig } from './common.js';
|
|
2
2
|
export type { PlatformConfig };
|
|
3
3
|
export declare function installWindows(config: PlatformConfig): Promise<void>;
|
|
4
4
|
export declare function uninstallWindows(): Promise<void>;
|
package/dist/platform/windows.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { execAsync } from '../utils/exec.js';
|
|
4
|
-
|
|
5
|
-
try {
|
|
6
|
-
return await execAsync(`where "${bin}"`);
|
|
7
|
-
}
|
|
8
|
-
catch {
|
|
9
|
-
return '';
|
|
10
|
-
}
|
|
11
|
-
}
|
|
4
|
+
import { which } from './common.js';
|
|
12
5
|
export async function installWindows(config) {
|
|
13
6
|
const appData = process.env['APPDATA'] ?? join(process.env['USERPROFILE'] ?? 'C:\\Users\\Default', 'AppData', 'Roaming');
|
|
14
7
|
const openclawDir = join(appData, 'openclaw');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../src/platform/windows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"windows.js","sourceRoot":"","sources":["../../src/platform/windows.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* agent:<agentId> — commands from backend, responses from agent
|
|
4
4
|
* heartbeat:<agentId> — heartbeat publications from agent
|
|
5
5
|
*/
|
|
6
|
-
export type CommandType = '
|
|
6
|
+
export type CommandType = 'diagnostics' | 'restart' | 'deploy' | 'config' | 'pair' | 'stop' | 'backup' | 'chat_list_sessions' | 'chat_history' | 'chat_send' | 'package_install' | 'file_write' | 'file_delete' | 'onboarding_complete' | 'knowledge_sync' | 'self_update';
|
|
7
7
|
export interface AgentCommand {
|
|
8
8
|
id: string;
|
|
9
9
|
type: CommandType;
|
package/dist/utils/archive.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
const TAR_TIMEOUT = 120_000;
|
|
4
4
|
export function createArchive(archivePath, workspaceDir) {
|
|
5
5
|
return new Promise((resolve, reject) => {
|
|
6
|
-
|
|
6
|
+
execFile('tar', ['-czf', archivePath, '-C', path.dirname(workspaceDir), path.basename(workspaceDir)], { timeout: TAR_TIMEOUT }, (error, _stdout, stderr) => {
|
|
7
7
|
if (error) {
|
|
8
8
|
reject(new Error(`tar failed: ${stderr.toString() || error.message}`));
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/utils/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/utils/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,YAAoB;IACrE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CACN,KAAK,EACL,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EACpF,EAAE,OAAO,EAAE,WAAW,EAAE,EACxB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YACzB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface BackupResult {
|
|
2
|
+
snapshotId: string;
|
|
3
|
+
sizeBytes: number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Create a workspace backup and upload it to backend.
|
|
7
|
+
* Used by both CLI command and Centrifugo handler.
|
|
8
|
+
*
|
|
9
|
+
* Flow:
|
|
10
|
+
* 1. Request init from backend → get uploadUrl, snapshotId, method
|
|
11
|
+
* 2. Create tar.gz archive of workspace
|
|
12
|
+
* 3. Upload archive via stream (presigned S3 PUT or backend API)
|
|
13
|
+
* 4. Notify backend of completion (for presigned uploads)
|
|
14
|
+
*/
|
|
15
|
+
export declare function pushBackupToBackend(): Promise<BackupResult>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { createReadStream } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { getWorkspaceDir } from '../workspace.js';
|
|
5
|
+
import { requireEnv, getBackendUrl } from './env.js';
|
|
6
|
+
import { createArchive } from './archive.js';
|
|
7
|
+
const UPLOAD_TIMEOUT = 300_000; // 5 min
|
|
8
|
+
/**
|
|
9
|
+
* Create a workspace backup and upload it to backend.
|
|
10
|
+
* Used by both CLI command and Centrifugo handler.
|
|
11
|
+
*
|
|
12
|
+
* Flow:
|
|
13
|
+
* 1. Request init from backend → get uploadUrl, snapshotId, method
|
|
14
|
+
* 2. Create tar.gz archive of workspace
|
|
15
|
+
* 3. Upload archive via stream (presigned S3 PUT or backend API)
|
|
16
|
+
* 4. Notify backend of completion (for presigned uploads)
|
|
17
|
+
*/
|
|
18
|
+
export async function pushBackupToBackend() {
|
|
19
|
+
const backendUrl = getBackendUrl();
|
|
20
|
+
const agentToken = requireEnv('AGENT_TOKEN');
|
|
21
|
+
const agentId = requireEnv('AGENT_ID');
|
|
22
|
+
// Step 1: Init — get upload details from backend
|
|
23
|
+
const initRes = await fetch(`${backendUrl}/api/internal/agents/${agentId}/backup/init`, {
|
|
24
|
+
method: 'POST',
|
|
25
|
+
headers: { Authorization: `Bearer ${agentToken}` },
|
|
26
|
+
signal: AbortSignal.timeout(30_000),
|
|
27
|
+
});
|
|
28
|
+
if (!initRes.ok) {
|
|
29
|
+
const text = await initRes.text().catch(() => '');
|
|
30
|
+
throw new Error(`Backup init failed: ${initRes.status} ${text}`);
|
|
31
|
+
}
|
|
32
|
+
const { snapshotId, uploadUrl, token, method } = (await initRes.json());
|
|
33
|
+
// Step 2: Create archive
|
|
34
|
+
const archivePath = path.join('/tmp', `backup-${Date.now()}.tar.gz`);
|
|
35
|
+
try {
|
|
36
|
+
await createArchive(archivePath, getWorkspaceDir());
|
|
37
|
+
const stat = await fs.stat(archivePath);
|
|
38
|
+
// Step 3: Upload via stream
|
|
39
|
+
if (method === 'presigned') {
|
|
40
|
+
const stream = createReadStream(archivePath);
|
|
41
|
+
// Node.js fetch accepts ReadStream as body; cast needed for TS DOM types
|
|
42
|
+
const uploadInit = {
|
|
43
|
+
method: 'PUT',
|
|
44
|
+
headers: { 'Content-Type': 'application/gzip', 'Content-Length': String(stat.size) },
|
|
45
|
+
body: stream,
|
|
46
|
+
duplex: 'half',
|
|
47
|
+
signal: AbortSignal.timeout(UPLOAD_TIMEOUT),
|
|
48
|
+
};
|
|
49
|
+
const uploadRes = await fetch(uploadUrl, uploadInit);
|
|
50
|
+
if (!uploadRes.ok) {
|
|
51
|
+
const text = await uploadRes.text().catch(() => '');
|
|
52
|
+
throw new Error(`S3 upload failed: ${uploadRes.status} ${text}`);
|
|
53
|
+
}
|
|
54
|
+
// Step 4: Notify backend
|
|
55
|
+
const completeRes = await fetch(`${backendUrl}/api/internal/agents/${agentId}/backup/complete`, {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: {
|
|
58
|
+
'Content-Type': 'application/json',
|
|
59
|
+
Authorization: `Bearer ${agentToken}`,
|
|
60
|
+
},
|
|
61
|
+
body: JSON.stringify({ snapshotId, sizeBytes: stat.size }),
|
|
62
|
+
signal: AbortSignal.timeout(30_000),
|
|
63
|
+
});
|
|
64
|
+
if (!completeRes.ok) {
|
|
65
|
+
const text = await completeRes.text().catch(() => '');
|
|
66
|
+
throw new Error(`Backup complete notification failed: ${completeRes.status} ${text}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Fallback: upload through backend API (local storage)
|
|
71
|
+
const stream = createReadStream(archivePath);
|
|
72
|
+
const uploadInit = {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: {
|
|
75
|
+
'Content-Type': 'application/gzip',
|
|
76
|
+
'Content-Length': String(stat.size),
|
|
77
|
+
Authorization: `Bearer ${token}`,
|
|
78
|
+
},
|
|
79
|
+
body: stream,
|
|
80
|
+
duplex: 'half',
|
|
81
|
+
signal: AbortSignal.timeout(UPLOAD_TIMEOUT),
|
|
82
|
+
};
|
|
83
|
+
const uploadRes = await fetch(`${backendUrl}/api/internal/agents/${agentId}/knowledge/upload?snapshotId=${snapshotId}`, uploadInit);
|
|
84
|
+
if (!uploadRes.ok) {
|
|
85
|
+
const text = await uploadRes.text().catch(() => '');
|
|
86
|
+
throw new Error(`Upload failed: ${uploadRes.status} ${text}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { snapshotId, sizeBytes: stat.size };
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
await fs.unlink(archivePath).catch(() => { });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=backup-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-push.js","sourceRoot":"","sources":["../../src/utils/backup-push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,QAAQ;AAOxC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,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,iDAAiD;IACjD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,wBAAwB,OAAO,cAAc,EAAE;QACtF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,UAAU,EAAE,EAAE;QAClD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAKrE,CAAC;IAEF,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAExC,4BAA4B;QAC5B,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC7C,yEAAyE;YACzE,MAAM,UAAU,GAAG;gBACjB,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACpF,IAAI,EAAE,MAA6B;gBACnC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;aAC5C,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,UAAyB,CAAC,CAAC;YACpE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,qBAAqB,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,yBAAyB;YACzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAC7B,GAAG,UAAU,wBAAwB,OAAO,kBAAkB,EAC9D;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,UAAU,EAAE;iBACtC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CACF,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,wCAAwC,WAAW,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,uDAAuD;YACvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG;gBACjB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;oBACnC,aAAa,EAAE,UAAU,KAAK,EAAE;iBACjC;gBACD,IAAI,EAAE,MAA6B;gBACnC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;aAC5C,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,KAAK,CAC3B,GAAG,UAAU,wBAAwB,OAAO,gCAAgC,UAAU,EAAE,EACxF,UAAyB,CAC1B,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
package/dist/utils/env.d.ts
CHANGED
package/dist/utils/env.js
CHANGED
package/dist/utils/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;AAClG,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentCommand, AgentResponse } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared handler logic for commands that restart the OpenClaw gateway.
|
|
4
|
+
* Used by handleRestart and handleOnboardingComplete.
|
|
5
|
+
*/
|
|
6
|
+
export declare function handleGatewayRestartCommand(command: AgentCommand): Promise<AgentResponse>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { execGatewayRestart } from './gateway-restart.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared handler logic for commands that restart the OpenClaw gateway.
|
|
4
|
+
* Used by handleRestart and handleOnboardingComplete.
|
|
5
|
+
*/
|
|
6
|
+
export async function handleGatewayRestartCommand(command) {
|
|
7
|
+
try {
|
|
8
|
+
const { stdout, stderr } = await execGatewayRestart();
|
|
9
|
+
return {
|
|
10
|
+
id: command.id,
|
|
11
|
+
type: command.type,
|
|
12
|
+
success: true,
|
|
13
|
+
data: { stdout, stderr },
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
const e = err;
|
|
18
|
+
return {
|
|
19
|
+
id: command.id,
|
|
20
|
+
type: command.type,
|
|
21
|
+
success: false,
|
|
22
|
+
data: { stdout: e.stdout ?? '', stderr: e.stderr ?? '' },
|
|
23
|
+
error: e.message,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=gateway-restart-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-restart-handler.js","sourceRoot":"","sources":["../../src/utils/gateway-restart-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAAqB;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACtD,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;SACzB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAmD,CAAC;QAC9D,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE;YACxD,KAAK,EAAE,CAAC,CAAC,OAAO;SACjB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getWorkspaceDir } from '../workspace.js';
|
|
4
|
+
import { requireEnv, getBackendUrl } from './env.js';
|
|
5
|
+
const FIXED_FILES = [
|
|
6
|
+
'SOUL.md',
|
|
7
|
+
'MEMORY.md',
|
|
8
|
+
'AGENTS.md',
|
|
9
|
+
'TOOLS.md',
|
|
10
|
+
'HEARTBEAT.md',
|
|
11
|
+
'USER.md',
|
|
12
|
+
'IDENTITY.md',
|
|
13
|
+
];
|
|
14
|
+
const MAX_FILE_BYTES = 1_048_576; // 1 MB per file
|
|
15
|
+
const MAX_TOTAL_BYTES = 10_485_760; // 10 MB total payload
|
|
16
|
+
/**
|
|
17
|
+
* Resolve requested paths to actual file paths in workspace.
|
|
18
|
+
* Paths ending with '/' are treated as directories — scanned for .md files.
|
|
19
|
+
*/
|
|
20
|
+
async function resolvePaths(workspaceDir, paths) {
|
|
21
|
+
const resolved = [];
|
|
22
|
+
for (const p of paths) {
|
|
23
|
+
if (p.endsWith('/')) {
|
|
24
|
+
const dir = path.join(workspaceDir, p);
|
|
25
|
+
try {
|
|
26
|
+
const entries = await fs.readdir(dir);
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
if (entry.endsWith('.md'))
|
|
29
|
+
resolved.push(path.join(p, entry));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Directory doesn't exist — skip
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
resolved.push(p);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return resolved;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Read workspace files with size limits.
|
|
44
|
+
*/
|
|
45
|
+
async function readFiles(workspaceDir, filePaths) {
|
|
46
|
+
const files = [];
|
|
47
|
+
let totalBytes = 0;
|
|
48
|
+
for (const filePath of filePaths) {
|
|
49
|
+
if (totalBytes >= MAX_TOTAL_BYTES) {
|
|
50
|
+
console.warn(`[knowledge-push] Total payload limit (${MAX_TOTAL_BYTES / 1024 / 1024} MB) reached, skipping remaining files`);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const fullPath = path.join(workspaceDir, filePath);
|
|
55
|
+
const stat = await fs.stat(fullPath).catch(() => null);
|
|
56
|
+
if (!stat || !stat.isFile() || stat.size > MAX_FILE_BYTES) {
|
|
57
|
+
if (stat && stat.isFile()) {
|
|
58
|
+
console.warn(`[knowledge-push] Skipping ${filePath}: file too large (${stat.size} bytes)`);
|
|
59
|
+
}
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const content = await fs.readFile(fullPath, 'utf-8');
|
|
63
|
+
totalBytes += Buffer.byteLength(content, 'utf-8');
|
|
64
|
+
files.push({ path: filePath, content });
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// File doesn't exist or unreadable — skip
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return files;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Push knowledge files to backend via HTTP.
|
|
74
|
+
* Used by both CLI command and Centrifugo handler.
|
|
75
|
+
*/
|
|
76
|
+
export async function pushKnowledgeToBackend(paths) {
|
|
77
|
+
const backendUrl = getBackendUrl();
|
|
78
|
+
const agentToken = requireEnv('AGENT_TOKEN');
|
|
79
|
+
const agentId = requireEnv('AGENT_ID');
|
|
80
|
+
const requestedPaths = paths ?? [...FIXED_FILES, 'memory/'];
|
|
81
|
+
const workspaceDir = getWorkspaceDir();
|
|
82
|
+
const resolvedPaths = await resolvePaths(workspaceDir, requestedPaths);
|
|
83
|
+
const files = await readFiles(workspaceDir, resolvedPaths);
|
|
84
|
+
if (files.length === 0) {
|
|
85
|
+
return { filesRead: 0, filesUpdated: 0 };
|
|
86
|
+
}
|
|
87
|
+
const res = await fetch(`${backendUrl}/api/internal/agents/${agentId}/knowledge/push`, {
|
|
88
|
+
method: 'POST',
|
|
89
|
+
headers: {
|
|
90
|
+
'Content-Type': 'application/json',
|
|
91
|
+
Authorization: `Bearer ${agentToken}`,
|
|
92
|
+
},
|
|
93
|
+
body: JSON.stringify({ files }),
|
|
94
|
+
signal: AbortSignal.timeout(30_000),
|
|
95
|
+
});
|
|
96
|
+
if (!res.ok) {
|
|
97
|
+
const text = await res.text().catch(() => '');
|
|
98
|
+
throw new Error(`Knowledge push failed: ${res.status} ${text}`);
|
|
99
|
+
}
|
|
100
|
+
const { filesUpdated } = (await res.json());
|
|
101
|
+
return { filesRead: files.length, filesUpdated };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=knowledge-push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-push.js","sourceRoot":"","sources":["../../src/utils/knowledge-push.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/handlers/exec.d.ts
DELETED
package/dist/handlers/exec.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { exec } from 'node:child_process';
|
|
2
|
-
const EXEC_TIMEOUT = 60_000;
|
|
3
|
-
export function handleExec(command) {
|
|
4
|
-
const cmd = command.payload.command;
|
|
5
|
-
if (!cmd) {
|
|
6
|
-
return Promise.resolve({
|
|
7
|
-
id: command.id,
|
|
8
|
-
type: 'exec',
|
|
9
|
-
success: false,
|
|
10
|
-
error: 'Missing "command" in payload',
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
return new Promise((resolve) => {
|
|
14
|
-
exec(cmd, { timeout: EXEC_TIMEOUT }, (error, stdout, stderr) => {
|
|
15
|
-
resolve({
|
|
16
|
-
id: command.id,
|
|
17
|
-
type: 'exec',
|
|
18
|
-
success: !error,
|
|
19
|
-
data: {
|
|
20
|
-
exitCode: error ? (typeof error.code === 'number' ? error.code : 1) : 0,
|
|
21
|
-
stdout: stdout.toString(),
|
|
22
|
-
stderr: stderr.toString(),
|
|
23
|
-
},
|
|
24
|
-
...(error ? { error: error.message } : {}),
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=exec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/handlers/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG1C,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAiB,CAAC;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,OAAO,CAAC,OAAO,CAAC;YACrB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,8BAA8B;SACtC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC7D,OAAO,CAAC;gBACN,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC,KAAK;gBACf,IAAI,EAAE;oBACJ,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,KAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrH,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;oBACzB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;iBAC1B;gBACD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|