@openclaw-cloud/agent-controller 2.3.2 → 2.4.0-beta.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/bin/agent-controller.js +2 -2
- package/dist/commands/self-update.d.ts +45 -0
- package/dist/commands/self-update.js +120 -22
- package/dist/commands/self-update.js.map +1 -1
- package/dist/connection.js +4 -0
- package/dist/connection.js.map +1 -1
- package/dist/handlers/agent-update.d.ts +19 -0
- package/dist/handlers/agent-update.js +108 -0
- package/dist/handlers/agent-update.js.map +1 -0
- package/dist/handlers/plugin-update.d.ts +14 -0
- package/dist/handlers/plugin-update.js +91 -0
- package/dist/handlers/plugin-update.js.map +1 -0
- package/dist/handlers/self-update.d.ts +30 -0
- package/dist/handlers/self-update.js +99 -7
- package/dist/handlers/self-update.js.map +1 -1
- package/dist/providers/openclaw/auto-pair.d.ts +16 -0
- package/dist/providers/openclaw/auto-pair.js +84 -0
- package/dist/providers/openclaw/auto-pair.js.map +1 -0
- package/dist/providers/openclaw/index.js +17 -5
- package/dist/providers/openclaw/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils/gateway-restart-handler.js +2 -2
- package/dist/utils/gateway-restart-handler.js.map +1 -1
- package/dist/utils/openclaw-ops.d.ts +57 -0
- package/dist/utils/openclaw-ops.js +198 -0
- package/dist/utils/openclaw-ops.js.map +1 -0
- package/package.json +1 -1
package/bin/agent-controller.js
CHANGED
|
@@ -17,8 +17,8 @@ const [,, command] = process.argv;
|
|
|
17
17
|
if (command === '--version' || command === '-v') {
|
|
18
18
|
console.log(pkg.version);
|
|
19
19
|
} else if (command === 'self-update' || command === 'self_update' || command === 'update') {
|
|
20
|
-
const {
|
|
21
|
-
await
|
|
20
|
+
const { runSelfUpdateCli } = await import('../dist/commands/self-update.js');
|
|
21
|
+
await runSelfUpdateCli(pkg.version);
|
|
22
22
|
} else if (command === 'backup') {
|
|
23
23
|
const { runBackup } = await import('../dist/commands/backup-cli.js');
|
|
24
24
|
await runBackup();
|
|
@@ -1 +1,46 @@
|
|
|
1
|
+
import { type InstallPluginsResult } from '../utils/openclaw-ops.js';
|
|
2
|
+
export interface SelfUpdatePayload {
|
|
3
|
+
agentController?: {
|
|
4
|
+
version: string;
|
|
5
|
+
};
|
|
6
|
+
openclaw?: {
|
|
7
|
+
version: string;
|
|
8
|
+
plugins?: Array<{
|
|
9
|
+
id: string;
|
|
10
|
+
version: string;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface RunExplicitSelfUpdateResult {
|
|
15
|
+
runtimeChanged: boolean;
|
|
16
|
+
pluginSummary?: InstallPluginsResult;
|
|
17
|
+
gatewayRestarted: boolean;
|
|
18
|
+
acChanged: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Run the explicit-version self-update flow. Throws when `installOpenclaw`
|
|
22
|
+
* or `installAcSelf` fail outright — per-plugin failures are recorded in
|
|
23
|
+
* the result rather than thrown. The caller is responsible for translating
|
|
24
|
+
* thrown errors into an AgentResponse / process exit.
|
|
25
|
+
*
|
|
26
|
+
* IMPORTANT: when `acChanged` is true, this function does NOT call
|
|
27
|
+
* `removeLockFile()` and does NOT sleep — both are now the caller's job
|
|
28
|
+
* (handler defers them to the next tick AFTER `api.publishResponse` so the
|
|
29
|
+
* backend sees a real `success: true` response before the supervisor picks
|
|
30
|
+
* up the missing lock and restarts the process). The CLI entrypoint
|
|
31
|
+
* (`runSelfUpdateCli`) handles this directly since there's no response to
|
|
32
|
+
* publish.
|
|
33
|
+
*/
|
|
34
|
+
export declare function runExplicitSelfUpdate(currentVersion: string, payload: SelfUpdatePayload): Promise<RunExplicitSelfUpdateResult>;
|
|
1
35
|
export declare function selfUpdate(currentVersion: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Top-level CLI entrypoint invoked by `agent-controller self-update`.
|
|
38
|
+
* Tries the new explicit-payload flow first; falls back to legacy when
|
|
39
|
+
* the backend has no runtime-targets endpoint or no override configured.
|
|
40
|
+
*
|
|
41
|
+
* Unlike the WS handler path (handlers/self-update.ts), the CLI has no
|
|
42
|
+
* AgentResponse to publish, so we keep the original
|
|
43
|
+
* `removeLockFile() + sleep(30s)` tail when the agent-controller actually
|
|
44
|
+
* changed — that's the supervisor handoff signal.
|
|
45
|
+
*/
|
|
46
|
+
export declare function runSelfUpdateCli(currentVersion: string): Promise<void>;
|
|
@@ -2,46 +2,144 @@ import { execAsync } from '../utils/exec.js';
|
|
|
2
2
|
import { removeLockFile } from '../lockfile.js';
|
|
3
3
|
import { getReleaseChannel } from '../utils/release-channel.js';
|
|
4
4
|
import { config } from '../config.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
import { withEaccesRetry, installOpenclaw, installPlugins, installAcSelf, AC_PACKAGE, } from '../utils/openclaw-ops.js';
|
|
6
|
+
import { restartGateway } from '../utils/gateway-restart.js';
|
|
7
|
+
import { logCollector } from '../connection.js';
|
|
8
|
+
import { toErrorMessage } from '../utils/response.js';
|
|
9
|
+
/**
|
|
10
|
+
* Run the explicit-version self-update flow. Throws when `installOpenclaw`
|
|
11
|
+
* or `installAcSelf` fail outright — per-plugin failures are recorded in
|
|
12
|
+
* the result rather than thrown. The caller is responsible for translating
|
|
13
|
+
* thrown errors into an AgentResponse / process exit.
|
|
14
|
+
*
|
|
15
|
+
* IMPORTANT: when `acChanged` is true, this function does NOT call
|
|
16
|
+
* `removeLockFile()` and does NOT sleep — both are now the caller's job
|
|
17
|
+
* (handler defers them to the next tick AFTER `api.publishResponse` so the
|
|
18
|
+
* backend sees a real `success: true` response before the supervisor picks
|
|
19
|
+
* up the missing lock and restarts the process). The CLI entrypoint
|
|
20
|
+
* (`runSelfUpdateCli`) handles this directly since there's no response to
|
|
21
|
+
* publish.
|
|
22
|
+
*/
|
|
23
|
+
export async function runExplicitSelfUpdate(currentVersion, payload) {
|
|
24
|
+
let runtimeChanged = false;
|
|
25
|
+
let pluginSummary;
|
|
26
|
+
let gatewayRestarted = false;
|
|
27
|
+
let acChanged = false;
|
|
28
|
+
logCollector?.push('self_update_install_start', 'info', `Self-update install starting (current AC: ${currentVersion})`, {
|
|
29
|
+
currentVersion,
|
|
30
|
+
targetAc: payload.agentController?.version,
|
|
31
|
+
targetOpenclaw: payload.openclaw?.version,
|
|
32
|
+
pluginCount: payload.openclaw?.plugins?.length ?? 0,
|
|
33
|
+
});
|
|
34
|
+
// 1) openclaw runtime + plugins (one gateway restart at the end)
|
|
35
|
+
if (payload.openclaw) {
|
|
36
|
+
runtimeChanged = await installOpenclaw(payload.openclaw.version);
|
|
37
|
+
if (runtimeChanged) {
|
|
38
|
+
logCollector?.push('self_update_runtime_installed', 'info', `openclaw runtime installed at ${payload.openclaw.version}`, { version: payload.openclaw.version });
|
|
39
|
+
}
|
|
40
|
+
if (payload.openclaw.plugins?.length) {
|
|
41
|
+
logCollector?.push('self_update_plugin_install_start', 'info', `Installing ${payload.openclaw.plugins.length} plugin(s)`, { pluginCount: payload.openclaw.plugins.length });
|
|
42
|
+
pluginSummary = await installPlugins(payload.openclaw.plugins);
|
|
43
|
+
logCollector?.push('self_update_plugin_install_done', pluginSummary.failed.length > 0 ? 'warn' : 'info', `Plugin install complete: ${pluginSummary.installed.length} installed, ${pluginSummary.skipped.length} skipped, ${pluginSummary.failed.length} failed`, {
|
|
44
|
+
installed: pluginSummary.installed,
|
|
45
|
+
skipped: pluginSummary.skipped,
|
|
46
|
+
failed: pluginSummary.failed,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const anyChanged = runtimeChanged || (pluginSummary?.installed.length ?? 0) > 0;
|
|
50
|
+
if (anyChanged) {
|
|
19
51
|
try {
|
|
20
|
-
|
|
52
|
+
await restartGateway();
|
|
53
|
+
gatewayRestarted = true;
|
|
54
|
+
logCollector?.push('self_update_gateway_restarted', 'info', 'Gateway restarted after openclaw stack update', {});
|
|
21
55
|
}
|
|
22
|
-
catch (
|
|
23
|
-
|
|
24
|
-
throw retryErr;
|
|
56
|
+
catch (err) {
|
|
57
|
+
logCollector?.push('self_update_gateway_restart_failed', 'warn', `Gateway restart after openclaw stack update failed: ${toErrorMessage(err)}`, { error: toErrorMessage(err) });
|
|
25
58
|
}
|
|
26
59
|
}
|
|
27
|
-
console.error(`${label} failed:`, err instanceof Error ? err.message : err);
|
|
28
|
-
throw err;
|
|
29
60
|
}
|
|
61
|
+
// 2) agent-controller swap LAST. Note: we run `npm install -g` here but
|
|
62
|
+
// do NOT remove the lockfile or sleep — the WS handler defers that
|
|
63
|
+
// work until AFTER the AgentResponse is published. The CLI path runs
|
|
64
|
+
// this same function and handles the lockfile + sleep itself.
|
|
65
|
+
if (payload.agentController?.version) {
|
|
66
|
+
acChanged = await installAcSelf(payload.agentController.version, currentVersion);
|
|
67
|
+
if (acChanged) {
|
|
68
|
+
logCollector?.push('self_update_ac_installed', 'info', `agent-controller installed at ${payload.agentController.version}`, { version: payload.agentController.version, previousVersion: currentVersion });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { runtimeChanged, pluginSummary, gatewayRestarted, acChanged };
|
|
30
72
|
}
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Legacy channel-based path — preserved for old backends that publish
|
|
75
|
+
// `self_update` with an empty payload (and for the CLI fallback when the
|
|
76
|
+
// runtime-targets endpoint is unreachable).
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
31
78
|
export async function selfUpdate(currentVersion) {
|
|
32
79
|
const channel = getReleaseChannel();
|
|
33
80
|
const tag = channel === 'stable' ? 'latest' : channel;
|
|
34
81
|
console.log(`Current version: ${currentVersion} (channel: ${channel})`);
|
|
35
|
-
const latestVersion = await withEaccesRetry(() => execAsync(`npm view ${
|
|
82
|
+
const latestVersion = await withEaccesRetry(() => execAsync(`npm view ${AC_PACKAGE}@${tag} version`, 10_000), 'Fetch latest version');
|
|
36
83
|
console.log(`Latest version on ${tag}: ${latestVersion}`);
|
|
37
84
|
if (currentVersion === latestVersion) {
|
|
38
85
|
console.log('Already up to date.');
|
|
39
86
|
return;
|
|
40
87
|
}
|
|
41
88
|
console.log(`Updating from ${currentVersion} to ${latestVersion}...`);
|
|
42
|
-
await withEaccesRetry(() => execAsync(`npm install -g ${
|
|
89
|
+
await withEaccesRetry(() => execAsync(`npm install -g ${AC_PACKAGE}@${tag}`, 120_000), 'npm install -g');
|
|
43
90
|
console.log(`Successfully updated to ${latestVersion}. Removing lock file for graceful restart...`);
|
|
44
91
|
removeLockFile();
|
|
45
92
|
await new Promise((resolve) => setTimeout(resolve, 30_000));
|
|
46
93
|
}
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
// CLI entrypoint — try the new on-demand /api/agent/runtime-targets path
|
|
96
|
+
// first; fall back to the legacy channel-based path if the backend is
|
|
97
|
+
// unreachable, returns an empty payload, or returns a non-2xx response.
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
async function fetchRuntimeTargets() {
|
|
100
|
+
const backendUrl = config.backendUrl;
|
|
101
|
+
const token = config.agentToken;
|
|
102
|
+
if (!backendUrl || !token)
|
|
103
|
+
return null;
|
|
104
|
+
try {
|
|
105
|
+
const res = await fetch(`${backendUrl}/api/agent/runtime-targets`, {
|
|
106
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
107
|
+
signal: AbortSignal.timeout(10_000),
|
|
108
|
+
});
|
|
109
|
+
if (!res.ok)
|
|
110
|
+
return null;
|
|
111
|
+
const data = (await res.json());
|
|
112
|
+
if (!data || (!data.openclaw && !data.agentController))
|
|
113
|
+
return null;
|
|
114
|
+
return data;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Top-level CLI entrypoint invoked by `agent-controller self-update`.
|
|
122
|
+
* Tries the new explicit-payload flow first; falls back to legacy when
|
|
123
|
+
* the backend has no runtime-targets endpoint or no override configured.
|
|
124
|
+
*
|
|
125
|
+
* Unlike the WS handler path (handlers/self-update.ts), the CLI has no
|
|
126
|
+
* AgentResponse to publish, so we keep the original
|
|
127
|
+
* `removeLockFile() + sleep(30s)` tail when the agent-controller actually
|
|
128
|
+
* changed — that's the supervisor handoff signal.
|
|
129
|
+
*/
|
|
130
|
+
export async function runSelfUpdateCli(currentVersion) {
|
|
131
|
+
const targets = await fetchRuntimeTargets();
|
|
132
|
+
if (targets) {
|
|
133
|
+
console.log('Using runtime targets from backend (explicit self-update path)');
|
|
134
|
+
const result = await runExplicitSelfUpdate(currentVersion, targets);
|
|
135
|
+
if (result.acChanged) {
|
|
136
|
+
console.log(`Successfully updated agent-controller to ${targets.agentController?.version}. Removing lock file for graceful restart...`);
|
|
137
|
+
removeLockFile();
|
|
138
|
+
await new Promise((resolve) => setTimeout(resolve, 30_000));
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
console.log('No runtime targets from backend — falling back to channel-based update');
|
|
143
|
+
await selfUpdate(currentVersion);
|
|
144
|
+
}
|
|
47
145
|
//# 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,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"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"}
|
package/dist/connection.js
CHANGED
|
@@ -14,6 +14,8 @@ import { handleFileDelete } from './handlers/file-delete.js';
|
|
|
14
14
|
import { handleOnboardingComplete } from './handlers/onboarding.js';
|
|
15
15
|
import { handleKnowledgeSync } from './handlers/knowledge-sync.js';
|
|
16
16
|
import { handleSelfUpdate } from './handlers/self-update.js';
|
|
17
|
+
import { handlePluginUpdate } from './handlers/plugin-update.js';
|
|
18
|
+
import { handleAgentUpdate } from './handlers/agent-update.js';
|
|
17
19
|
import { handleTelegramWebhook } from './handlers/telegram-webhook.js';
|
|
18
20
|
import { handleUpdateSkills } from './handlers/update-skills.js';
|
|
19
21
|
import { handleUpdateConfig } from './handlers/update-config.js';
|
|
@@ -51,6 +53,8 @@ function buildHandlers(opts) {
|
|
|
51
53
|
onboarding_complete: handleOnboardingComplete,
|
|
52
54
|
knowledge_sync: (cmd) => handleKnowledgeSync(cmd, opts.api, opts.agentId),
|
|
53
55
|
self_update: handleSelfUpdate(opts.version),
|
|
56
|
+
plugin_update: handlePluginUpdate,
|
|
57
|
+
agent_update: handleAgentUpdate,
|
|
54
58
|
telegram_webhook: handleTelegramWebhook,
|
|
55
59
|
update_skills: handleUpdateSkills,
|
|
56
60
|
update_config: handleUpdateConfig(opts.api, opts.agentId),
|
package/dist/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AgentCommand, AgentResponse } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Update the openclaw runtime + (optionally) a batch of plugins.
|
|
4
|
+
* payload: { version: string, plugins?: Array<{ id, version }> }
|
|
5
|
+
*
|
|
6
|
+
* Behaviour:
|
|
7
|
+
* 1. Validate `version` (return success:false on bad input — never throw).
|
|
8
|
+
* 2. installOpenclaw(version). Skip if `openclaw --version` matches.
|
|
9
|
+
* 3. If `plugins[]`, run installPlugins() — sequential, per-plugin
|
|
10
|
+
* try/catch so a poison-pill plugin doesn't abort the whole batch.
|
|
11
|
+
* 4. If anything actually changed → restartGateway(). One restart per
|
|
12
|
+
* command, regardless of how many things changed. Restart failure is
|
|
13
|
+
* a warn — install already succeeded.
|
|
14
|
+
*
|
|
15
|
+
* Per-plugin failures are recorded in `data.failed[]` but DO NOT flip the
|
|
16
|
+
* top-level success flag. A whole-flow failure (e.g. installOpenclaw throws)
|
|
17
|
+
* does flip success to false.
|
|
18
|
+
*/
|
|
19
|
+
export declare function handleAgentUpdate(cmd: AgentCommand): Promise<AgentResponse>;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { logCollector } from '../connection.js';
|
|
2
|
+
import { toErrorMessage } from '../utils/response.js';
|
|
3
|
+
import { installOpenclaw, installPlugins, } from '../utils/openclaw-ops.js';
|
|
4
|
+
import { restartGateway } from '../utils/gateway-restart.js';
|
|
5
|
+
/**
|
|
6
|
+
* Update the openclaw runtime + (optionally) a batch of plugins.
|
|
7
|
+
* payload: { version: string, plugins?: Array<{ id, version }> }
|
|
8
|
+
*
|
|
9
|
+
* Behaviour:
|
|
10
|
+
* 1. Validate `version` (return success:false on bad input — never throw).
|
|
11
|
+
* 2. installOpenclaw(version). Skip if `openclaw --version` matches.
|
|
12
|
+
* 3. If `plugins[]`, run installPlugins() — sequential, per-plugin
|
|
13
|
+
* try/catch so a poison-pill plugin doesn't abort the whole batch.
|
|
14
|
+
* 4. If anything actually changed → restartGateway(). One restart per
|
|
15
|
+
* command, regardless of how many things changed. Restart failure is
|
|
16
|
+
* a warn — install already succeeded.
|
|
17
|
+
*
|
|
18
|
+
* Per-plugin failures are recorded in `data.failed[]` but DO NOT flip the
|
|
19
|
+
* top-level success flag. A whole-flow failure (e.g. installOpenclaw throws)
|
|
20
|
+
* does flip success to false.
|
|
21
|
+
*/
|
|
22
|
+
export async function handleAgentUpdate(cmd) {
|
|
23
|
+
const startMs = Date.now();
|
|
24
|
+
const payload = (cmd.payload ?? {});
|
|
25
|
+
const version = typeof payload.version === 'string' ? payload.version.trim() : '';
|
|
26
|
+
const plugins = Array.isArray(payload.plugins)
|
|
27
|
+
? payload.plugins
|
|
28
|
+
: undefined;
|
|
29
|
+
logCollector?.push('agent_update_received', 'info', 'Agent update requested', {
|
|
30
|
+
commandId: cmd.id,
|
|
31
|
+
version,
|
|
32
|
+
pluginCount: plugins?.length ?? 0,
|
|
33
|
+
});
|
|
34
|
+
if (!version) {
|
|
35
|
+
return {
|
|
36
|
+
id: cmd.id,
|
|
37
|
+
type: cmd.type,
|
|
38
|
+
success: false,
|
|
39
|
+
error: 'agent_update payload requires non-empty `version`',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
let runtimeChanged = false;
|
|
43
|
+
let pluginSummary;
|
|
44
|
+
try {
|
|
45
|
+
runtimeChanged = await installOpenclaw(version);
|
|
46
|
+
logCollector?.push(runtimeChanged ? 'agent_update_runtime_installed' : 'agent_update_runtime_skipped', 'info', runtimeChanged
|
|
47
|
+
? `openclaw runtime installed at ${version}`
|
|
48
|
+
: `openclaw runtime already at ${version}`, { commandId: cmd.id, version });
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
return {
|
|
52
|
+
id: cmd.id,
|
|
53
|
+
type: cmd.type,
|
|
54
|
+
success: false,
|
|
55
|
+
error: toErrorMessage(err),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (plugins?.length) {
|
|
59
|
+
try {
|
|
60
|
+
pluginSummary = await installPlugins(plugins);
|
|
61
|
+
logCollector?.push('agent_update_plugins_done', 'info', 'Plugin batch processed', {
|
|
62
|
+
commandId: cmd.id,
|
|
63
|
+
installed: pluginSummary.installed.length,
|
|
64
|
+
skipped: pluginSummary.skipped.length,
|
|
65
|
+
failed: pluginSummary.failed.length,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
// installPlugins is supposed to swallow per-plugin errors; if it
|
|
70
|
+
// throws something globally, surface it.
|
|
71
|
+
return {
|
|
72
|
+
id: cmd.id,
|
|
73
|
+
type: cmd.type,
|
|
74
|
+
success: false,
|
|
75
|
+
error: toErrorMessage(err),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const installedPluginCount = pluginSummary?.installed.length ?? 0;
|
|
80
|
+
const anyChanged = runtimeChanged || installedPluginCount > 0;
|
|
81
|
+
let restarted = false;
|
|
82
|
+
let restartFailed = false;
|
|
83
|
+
if (anyChanged) {
|
|
84
|
+
try {
|
|
85
|
+
await restartGateway();
|
|
86
|
+
restarted = true;
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
restartFailed = true;
|
|
90
|
+
logCollector?.push('agent_update_restart_failed', 'warn', 'Gateway restart after agent_update failed', { commandId: cmd.id, error: toErrorMessage(err) });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
id: cmd.id,
|
|
95
|
+
type: cmd.type,
|
|
96
|
+
success: true,
|
|
97
|
+
data: {
|
|
98
|
+
version,
|
|
99
|
+
runtimeChanged,
|
|
100
|
+
installed: pluginSummary?.installed ?? [],
|
|
101
|
+
skipped: pluginSummary?.skipped ?? [],
|
|
102
|
+
failed: pluginSummary?.failed ?? [],
|
|
103
|
+
restarted: anyChanged && !restartFailed && restarted,
|
|
104
|
+
durationMs: Date.now() - startMs,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=agent-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-update.js","sourceRoot":"","sources":["../../src/handlers/agent-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,cAAc,GAEf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAiB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAGjC,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5C,CAAC,CAAE,OAAO,CAAC,OAAkD;QAC7D,CAAC,CAAC,SAAS,CAAC;IAEd,YAAY,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,EAAE,wBAAwB,EAAE;QAC5E,SAAS,EAAE,GAAG,CAAC,EAAE;QACjB,OAAO;QACP,WAAW,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mDAAmD;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,aAA+C,CAAC;IAEpD,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAChD,YAAY,EAAE,IAAI,CAChB,cAAc,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,8BAA8B,EAClF,MAAM,EACN,cAAc;YACZ,CAAC,CAAC,iCAAiC,OAAO,EAAE;YAC5C,CAAC,CAAC,+BAA+B,OAAO,EAAE,EAC5C,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAC/B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9C,YAAY,EAAE,IAAI,CAAC,2BAA2B,EAAE,MAAM,EAAE,wBAAwB,EAAE;gBAChF,SAAS,EAAE,GAAG,CAAC,EAAE;gBACjB,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM;gBACzC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM;gBACrC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM;aACpC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iEAAiE;YACjE,yCAAyC;YACzC,OAAO;gBACL,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;aAC3B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,aAAa,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,cAAc,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC9D,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,cAAc,EAAE,CAAC;YACvB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,GAAG,IAAI,CAAC;YACrB,YAAY,EAAE,IAAI,CAChB,6BAA6B,EAC7B,MAAM,EACN,2CAA2C,EAC3C,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,OAAO;YACP,cAAc;YACd,SAAS,EAAE,aAAa,EAAE,SAAS,IAAI,EAAE;YACzC,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,EAAE;YACrC,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,EAAE;YACnC,SAAS,EAAE,UAAU,IAAI,CAAC,aAAa,IAAI,SAAS;YACpD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentCommand, AgentResponse } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Single-plugin update handler.
|
|
4
|
+
* payload: { id: string, version: string }
|
|
5
|
+
*
|
|
6
|
+
* Behaviour:
|
|
7
|
+
* 1. Validate payload (return success:false on bad input — never throw).
|
|
8
|
+
* 2. installPlugin(id, version). The helper skip-fast when the requested
|
|
9
|
+
* version is already installed.
|
|
10
|
+
* 3. If an install actually ran, restartGateway(). Restart failures are
|
|
11
|
+
* logged at warn level but do NOT flip the response to failure — the
|
|
12
|
+
* install succeeded; restart is best-effort.
|
|
13
|
+
*/
|
|
14
|
+
export declare function handlePluginUpdate(cmd: AgentCommand): Promise<AgentResponse>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { logCollector } from '../connection.js';
|
|
2
|
+
import { toErrorMessage } from '../utils/response.js';
|
|
3
|
+
import { installPlugin } from '../utils/openclaw-ops.js';
|
|
4
|
+
import { restartGateway } from '../utils/gateway-restart.js';
|
|
5
|
+
/**
|
|
6
|
+
* Single-plugin update handler.
|
|
7
|
+
* payload: { id: string, version: string }
|
|
8
|
+
*
|
|
9
|
+
* Behaviour:
|
|
10
|
+
* 1. Validate payload (return success:false on bad input — never throw).
|
|
11
|
+
* 2. installPlugin(id, version). The helper skip-fast when the requested
|
|
12
|
+
* version is already installed.
|
|
13
|
+
* 3. If an install actually ran, restartGateway(). Restart failures are
|
|
14
|
+
* logged at warn level but do NOT flip the response to failure — the
|
|
15
|
+
* install succeeded; restart is best-effort.
|
|
16
|
+
*/
|
|
17
|
+
export async function handlePluginUpdate(cmd) {
|
|
18
|
+
const startMs = Date.now();
|
|
19
|
+
const payload = (cmd.payload ?? {});
|
|
20
|
+
const id = typeof payload.id === 'string' ? payload.id.trim() : '';
|
|
21
|
+
const version = typeof payload.version === 'string' ? payload.version.trim() : '';
|
|
22
|
+
logCollector?.push('plugin_update_received', 'info', `Plugin update requested`, {
|
|
23
|
+
commandId: cmd.id,
|
|
24
|
+
id,
|
|
25
|
+
version,
|
|
26
|
+
});
|
|
27
|
+
if (!id || !version) {
|
|
28
|
+
return {
|
|
29
|
+
id: cmd.id,
|
|
30
|
+
type: cmd.type,
|
|
31
|
+
success: false,
|
|
32
|
+
error: 'plugin_update payload requires non-empty `id` and `version`',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const installed = await installPlugin(id, version);
|
|
37
|
+
if (!installed) {
|
|
38
|
+
logCollector?.push('plugin_update_skipped', 'info', `Plugin already at requested version`, {
|
|
39
|
+
commandId: cmd.id,
|
|
40
|
+
id,
|
|
41
|
+
version,
|
|
42
|
+
durationMs: Date.now() - startMs,
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
id: cmd.id,
|
|
46
|
+
type: cmd.type,
|
|
47
|
+
success: true,
|
|
48
|
+
data: { id, version, installed: false, restarted: false },
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
logCollector?.push('plugin_update_installed', 'info', `Plugin installed`, {
|
|
52
|
+
commandId: cmd.id,
|
|
53
|
+
id,
|
|
54
|
+
version,
|
|
55
|
+
});
|
|
56
|
+
let restarted = false;
|
|
57
|
+
try {
|
|
58
|
+
await restartGateway();
|
|
59
|
+
restarted = true;
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
logCollector?.push('plugin_update_restart_failed', 'warn', `Gateway restart failed after plugin install`, {
|
|
63
|
+
commandId: cmd.id,
|
|
64
|
+
id,
|
|
65
|
+
version,
|
|
66
|
+
error: toErrorMessage(err),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
id: cmd.id,
|
|
71
|
+
type: cmd.type,
|
|
72
|
+
success: true,
|
|
73
|
+
data: {
|
|
74
|
+
id,
|
|
75
|
+
version,
|
|
76
|
+
installed: true,
|
|
77
|
+
restarted,
|
|
78
|
+
durationMs: Date.now() - startMs,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return {
|
|
84
|
+
id: cmd.id,
|
|
85
|
+
type: cmd.type,
|
|
86
|
+
success: false,
|
|
87
|
+
error: toErrorMessage(err),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=plugin-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-update.js","sourceRoot":"","sources":["../../src/handlers/plugin-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,32 @@
|
|
|
1
1
|
import type { AgentCommand, AgentResponse } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Defer in milliseconds before clearing the lockfile after an AC swap.
|
|
4
|
+
* Rationale: we must let the AgentResponse flow back through
|
|
5
|
+
* `connection.ts` → `api.publishResponse()` BEFORE the supervisor sees
|
|
6
|
+
* the missing lock and kills the process. A short defensive delay (1s)
|
|
7
|
+
* is plenty — the response is already in flight on the next tick. Heart-
|
|
8
|
+
* beat poll every 30s naturally picks up the missing lock.
|
|
9
|
+
*
|
|
10
|
+
* Exported for tests so they can assert exactly when removeLockFile fires.
|
|
11
|
+
*/
|
|
12
|
+
export declare const AC_LOCKFILE_REMOVE_DELAY_MS = 1000;
|
|
13
|
+
/**
|
|
14
|
+
* `self_update` WS handler factory. Two paths:
|
|
15
|
+
*
|
|
16
|
+
* 1. Explicit-payload (new):
|
|
17
|
+
* payload = { agentController?: {version}, openclaw?: {version, plugins?} }
|
|
18
|
+
* Delegates to runExplicitSelfUpdate() — openclaw stack first, AC last.
|
|
19
|
+
*
|
|
20
|
+
* 2. Legacy / empty payload:
|
|
21
|
+
* payload = {}
|
|
22
|
+
* Falls back to the channel-based selfUpdate(currentVersion) so old
|
|
23
|
+
* backends keep working unchanged.
|
|
24
|
+
*
|
|
25
|
+
* AC-changed ordering: install runs synchronously; the response object is
|
|
26
|
+
* built and returned to the caller IMMEDIATELY. Only AFTER the caller
|
|
27
|
+
* (`connection.ts`) has published the response does the deferred
|
|
28
|
+
* `removeLockFile()` fire — see `AC_LOCKFILE_REMOVE_DELAY_MS`. This
|
|
29
|
+
* prevents the supervisor from killing us mid-publish, which used to
|
|
30
|
+
* cause the backend to time out on what was actually a successful update.
|
|
31
|
+
*/
|
|
2
32
|
export declare function handleSelfUpdate(version: string): (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
@@ -1,17 +1,109 @@
|
|
|
1
|
-
import { selfUpdate } from '../commands/self-update.js';
|
|
1
|
+
import { selfUpdate, runExplicitSelfUpdate, } from '../commands/self-update.js';
|
|
2
2
|
import { toErrorMessage } from '../utils/response.js';
|
|
3
3
|
import { logCollector } from '../connection.js';
|
|
4
|
+
import { removeLockFile } from '../lockfile.js';
|
|
5
|
+
/**
|
|
6
|
+
* Defer in milliseconds before clearing the lockfile after an AC swap.
|
|
7
|
+
* Rationale: we must let the AgentResponse flow back through
|
|
8
|
+
* `connection.ts` → `api.publishResponse()` BEFORE the supervisor sees
|
|
9
|
+
* the missing lock and kills the process. A short defensive delay (1s)
|
|
10
|
+
* is plenty — the response is already in flight on the next tick. Heart-
|
|
11
|
+
* beat poll every 30s naturally picks up the missing lock.
|
|
12
|
+
*
|
|
13
|
+
* Exported for tests so they can assert exactly when removeLockFile fires.
|
|
14
|
+
*/
|
|
15
|
+
export const AC_LOCKFILE_REMOVE_DELAY_MS = 1_000;
|
|
16
|
+
/**
|
|
17
|
+
* `self_update` WS handler factory. Two paths:
|
|
18
|
+
*
|
|
19
|
+
* 1. Explicit-payload (new):
|
|
20
|
+
* payload = { agentController?: {version}, openclaw?: {version, plugins?} }
|
|
21
|
+
* Delegates to runExplicitSelfUpdate() — openclaw stack first, AC last.
|
|
22
|
+
*
|
|
23
|
+
* 2. Legacy / empty payload:
|
|
24
|
+
* payload = {}
|
|
25
|
+
* Falls back to the channel-based selfUpdate(currentVersion) so old
|
|
26
|
+
* backends keep working unchanged.
|
|
27
|
+
*
|
|
28
|
+
* AC-changed ordering: install runs synchronously; the response object is
|
|
29
|
+
* built and returned to the caller IMMEDIATELY. Only AFTER the caller
|
|
30
|
+
* (`connection.ts`) has published the response does the deferred
|
|
31
|
+
* `removeLockFile()` fire — see `AC_LOCKFILE_REMOVE_DELAY_MS`. This
|
|
32
|
+
* prevents the supervisor from killing us mid-publish, which used to
|
|
33
|
+
* cause the backend to time out on what was actually a successful update.
|
|
34
|
+
*/
|
|
4
35
|
export function handleSelfUpdate(version) {
|
|
5
36
|
return async (cmd) => {
|
|
37
|
+
const payload = (cmd.payload ?? {});
|
|
38
|
+
const hasExplicitVersions = !!((payload.openclaw && typeof payload.openclaw.version === 'string') ||
|
|
39
|
+
(payload.agentController && typeof payload.agentController.version === 'string'));
|
|
40
|
+
if (!hasExplicitVersions) {
|
|
41
|
+
logCollector?.push('self_update', 'info', `Self-update requested (legacy / channel-based, current: ${version})`, { commandId: cmd.id, currentVersion: version });
|
|
42
|
+
try {
|
|
43
|
+
await selfUpdate(version);
|
|
44
|
+
return { id: cmd.id, type: cmd.type, success: true, data: { mode: 'legacy' } };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return {
|
|
48
|
+
id: cmd.id,
|
|
49
|
+
type: cmd.type,
|
|
50
|
+
success: false,
|
|
51
|
+
error: toErrorMessage(err),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
logCollector?.push('self_update', 'info', `Self-update requested (explicit, current: ${version})`, {
|
|
56
|
+
commandId: cmd.id,
|
|
57
|
+
currentVersion: version,
|
|
58
|
+
targetAc: payload.agentController?.version,
|
|
59
|
+
targetOpenclaw: payload.openclaw?.version,
|
|
60
|
+
pluginCount: payload.openclaw?.plugins?.length ?? 0,
|
|
61
|
+
});
|
|
6
62
|
try {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
63
|
+
const result = await runExplicitSelfUpdate(version, payload);
|
|
64
|
+
const response = {
|
|
65
|
+
id: cmd.id,
|
|
66
|
+
type: cmd.type,
|
|
67
|
+
success: true,
|
|
68
|
+
data: {
|
|
69
|
+
mode: 'explicit',
|
|
70
|
+
runtimeChanged: result.runtimeChanged,
|
|
71
|
+
gatewayRestarted: result.gatewayRestarted,
|
|
72
|
+
acChanged: result.acChanged,
|
|
73
|
+
installed: result.pluginSummary?.installed ?? [],
|
|
74
|
+
skipped: result.pluginSummary?.skipped ?? [],
|
|
75
|
+
failed: result.pluginSummary?.failed ?? [],
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
// If the agent-controller binary itself was swapped, the supervisor
|
|
79
|
+
// (systemd/launchd/k8s) needs to see the lock file disappear so it
|
|
80
|
+
// restarts us into the new binary. Schedule that work AFTER this
|
|
81
|
+
// function returns, so `api.publishResponse()` runs first and the
|
|
82
|
+
// backend sees a real `success: true` before the supervisor kills
|
|
83
|
+
// the process.
|
|
84
|
+
if (result.acChanged) {
|
|
85
|
+
logCollector?.push('self_update_lockfile_scheduled', 'info', `Lockfile removal scheduled in ${AC_LOCKFILE_REMOVE_DELAY_MS}ms (after response publish)`, { commandId: cmd.id, delayMs: AC_LOCKFILE_REMOVE_DELAY_MS });
|
|
86
|
+
setTimeout(() => {
|
|
87
|
+
try {
|
|
88
|
+
removeLockFile();
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
// Best-effort: lockfile removal must never throw past the
|
|
92
|
+
// event loop. Log and let heartbeat handle restart on next
|
|
93
|
+
// tick.
|
|
94
|
+
logCollector?.push('self_update_lockfile_remove_failed', 'error', `removeLockFile failed: ${toErrorMessage(err)}`, { commandId: cmd.id, error: toErrorMessage(err) });
|
|
95
|
+
}
|
|
96
|
+
}, AC_LOCKFILE_REMOVE_DELAY_MS);
|
|
97
|
+
}
|
|
98
|
+
return response;
|
|
12
99
|
}
|
|
13
100
|
catch (err) {
|
|
14
|
-
return {
|
|
101
|
+
return {
|
|
102
|
+
id: cmd.id,
|
|
103
|
+
type: cmd.type,
|
|
104
|
+
success: false,
|
|
105
|
+
error: toErrorMessage(err),
|
|
106
|
+
};
|
|
15
107
|
}
|
|
16
108
|
};
|
|
17
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/handlers/self-update.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/handlers/self-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type AutoPairOutcome = {
|
|
2
|
+
status: 'approved';
|
|
3
|
+
requestId: string;
|
|
4
|
+
deviceId: string;
|
|
5
|
+
} | {
|
|
6
|
+
status: 'skipped';
|
|
7
|
+
reason: 'cli_missing' | 'no_pending' | 'no_match' | 'list_failed' | 'approve_failed' | 'identity_error';
|
|
8
|
+
detail?: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Best-effort one-shot auto-approval of our own pending pairing request via
|
|
12
|
+
* the local `openclaw` CLI. Never throws — all failures resolve to a
|
|
13
|
+
* `{ status: 'skipped', reason }` outcome so the caller can treat it as a
|
|
14
|
+
* no-op and continue its retry loop.
|
|
15
|
+
*/
|
|
16
|
+
export declare function autoApproveOwnPairing(): Promise<AutoPairOutcome>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
import { logCollector } from '../../connection.js';
|
|
4
|
+
import { toErrorMessage } from '../../utils/response.js';
|
|
5
|
+
import { loadOrCreateDeviceIdentity } from './device-identity.js';
|
|
6
|
+
const execFileAsync = promisify(execFile);
|
|
7
|
+
const CLI_TIMEOUT_MS = 10_000;
|
|
8
|
+
function isErrnoException(e) {
|
|
9
|
+
return e instanceof Error && typeof e.code === 'string';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Best-effort one-shot auto-approval of our own pending pairing request via
|
|
13
|
+
* the local `openclaw` CLI. Never throws — all failures resolve to a
|
|
14
|
+
* `{ status: 'skipped', reason }` outcome so the caller can treat it as a
|
|
15
|
+
* no-op and continue its retry loop.
|
|
16
|
+
*/
|
|
17
|
+
export async function autoApproveOwnPairing() {
|
|
18
|
+
let ownDeviceId;
|
|
19
|
+
try {
|
|
20
|
+
ownDeviceId = loadOrCreateDeviceIdentity().deviceId;
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
const detail = toErrorMessage(err);
|
|
24
|
+
logCollector?.push('chat_provider_auto_pair', 'warn', `Failed to load device identity: ${detail}`, {});
|
|
25
|
+
return { status: 'skipped', reason: 'identity_error', detail };
|
|
26
|
+
}
|
|
27
|
+
logCollector?.push('chat_provider_auto_pair', 'info', 'Pairing required — attempting auto-approve', { deviceId: ownDeviceId });
|
|
28
|
+
// 1. List pending pairing requests.
|
|
29
|
+
let listStdout;
|
|
30
|
+
try {
|
|
31
|
+
const { stdout } = await execFileAsync('openclaw', ['devices', 'list', '--json'], {
|
|
32
|
+
timeout: CLI_TIMEOUT_MS,
|
|
33
|
+
});
|
|
34
|
+
listStdout = stdout;
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (isErrnoException(err) && err.code === 'ENOENT') {
|
|
38
|
+
logCollector?.push('chat_provider_auto_pair', 'warn', 'openclaw CLI not found in PATH — skipping auto-pair', { deviceId: ownDeviceId });
|
|
39
|
+
return { status: 'skipped', reason: 'cli_missing' };
|
|
40
|
+
}
|
|
41
|
+
const detail = toErrorMessage(err);
|
|
42
|
+
logCollector?.push('chat_provider_auto_pair', 'warn', `openclaw devices list failed: ${detail}`, { deviceId: ownDeviceId });
|
|
43
|
+
return { status: 'skipped', reason: 'list_failed', detail };
|
|
44
|
+
}
|
|
45
|
+
// 2. Parse the JSON payload.
|
|
46
|
+
let parsed;
|
|
47
|
+
try {
|
|
48
|
+
parsed = JSON.parse(listStdout);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
const detail = toErrorMessage(err);
|
|
52
|
+
logCollector?.push('chat_provider_auto_pair', 'warn', `openclaw devices list failed: ${detail}`, { deviceId: ownDeviceId, parseError: true });
|
|
53
|
+
return { status: 'skipped', reason: 'list_failed', detail };
|
|
54
|
+
}
|
|
55
|
+
const pending = Array.isArray(parsed?.pending) ? parsed.pending : [];
|
|
56
|
+
if (pending.length === 0) {
|
|
57
|
+
logCollector?.push('chat_provider_auto_pair', 'info', 'No pending pairing requests on gateway', { deviceId: ownDeviceId });
|
|
58
|
+
return { status: 'skipped', reason: 'no_pending' };
|
|
59
|
+
}
|
|
60
|
+
// 3. Match our own deviceId.
|
|
61
|
+
const match = pending.find((p) => p?.deviceId === ownDeviceId);
|
|
62
|
+
if (!match) {
|
|
63
|
+
logCollector?.push('chat_provider_auto_pair', 'warn', 'No pending request matches our deviceId', { ownDeviceId, pendingCount: pending.length });
|
|
64
|
+
return { status: 'skipped', reason: 'no_match' };
|
|
65
|
+
}
|
|
66
|
+
// 4. Approve.
|
|
67
|
+
const { requestId } = match;
|
|
68
|
+
try {
|
|
69
|
+
await execFileAsync('openclaw', ['devices', 'approve', requestId, '--json'], {
|
|
70
|
+
timeout: CLI_TIMEOUT_MS,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const detail = toErrorMessage(err);
|
|
75
|
+
logCollector?.push('chat_provider_auto_pair', 'warn', `openclaw devices approve failed: ${detail}`, { requestId, deviceId: ownDeviceId });
|
|
76
|
+
return { status: 'skipped', reason: 'approve_failed', detail };
|
|
77
|
+
}
|
|
78
|
+
logCollector?.push('chat_provider_auto_pair', 'info', 'Approved own pending pairing request', {
|
|
79
|
+
requestId,
|
|
80
|
+
deviceId: ownDeviceId,
|
|
81
|
+
});
|
|
82
|
+
return { status: 'approved', requestId, deviceId: ownDeviceId };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=auto-pair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-pair.js","sourceRoot":"","sources":["../../../src/providers/openclaw/auto-pair.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import net from 'node:net';
|
|
2
2
|
import { OpenclawGatewayAdapter } from './gateway-adapter.js';
|
|
3
|
+
import { autoApproveOwnPairing } from './auto-pair.js';
|
|
3
4
|
export { OpenclawGatewayAdapter } from './gateway-adapter.js';
|
|
4
5
|
function tcpPing(host, port, timeoutMs) {
|
|
5
6
|
return new Promise((resolve) => {
|
|
@@ -41,6 +42,7 @@ export class OpenclawProvider {
|
|
|
41
42
|
this._connecting = (async () => {
|
|
42
43
|
const maxRetries = 5;
|
|
43
44
|
const baseDelayMs = 2000;
|
|
45
|
+
let attemptedAutoPair = false;
|
|
44
46
|
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
45
47
|
try {
|
|
46
48
|
// Always create fresh adapter — old one may have stale state after gateway restart
|
|
@@ -55,6 +57,14 @@ export class OpenclawProvider {
|
|
|
55
57
|
console.warn(`Chat provider connect failed (attempt ${attempt}/${maxRetries}): ${msg}`);
|
|
56
58
|
this.adapter?.disconnect();
|
|
57
59
|
this.adapter = null;
|
|
60
|
+
if (!attemptedAutoPair && msg.includes('pairing required')) {
|
|
61
|
+
attemptedAutoPair = true;
|
|
62
|
+
const outcome = await autoApproveOwnPairing();
|
|
63
|
+
if (outcome.status === 'approved') {
|
|
64
|
+
// Skip back-off — retry immediately on the next iteration
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
58
68
|
if (attempt < maxRetries) {
|
|
59
69
|
await new Promise((r) => setTimeout(r, baseDelayMs * Math.min(attempt, 5)));
|
|
60
70
|
}
|
|
@@ -122,13 +132,15 @@ export class OpenclawProvider {
|
|
|
122
132
|
}
|
|
123
133
|
async restart() {
|
|
124
134
|
const { exec } = await import('node:child_process');
|
|
125
|
-
return new Promise((resolve) => {
|
|
135
|
+
return new Promise((resolve, reject) => {
|
|
126
136
|
exec('openclaw gateway restart', { timeout: 30_000 }, (error) => {
|
|
127
|
-
if (error)
|
|
137
|
+
if (error) {
|
|
128
138
|
console.error('Gateway restart failed:', error.message);
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
139
|
+
reject(error);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
console.log('Gateway restarted');
|
|
143
|
+
resolve();
|
|
132
144
|
});
|
|
133
145
|
});
|
|
134
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/openclaw/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/openclaw/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* board:<workspaceId> — board events (card:entered, card:moved, etc.)
|
|
6
6
|
* heartbeat:<agentId> — heartbeat publications from agent
|
|
7
7
|
*/
|
|
8
|
-
export type CommandType = 'diagnostics' | 'restart' | 'deploy' | 'pair' | 'stop' | 'backup' | 'chat_list_sessions' | 'chat_history' | 'chat_send' | 'package_install' | 'file_write' | 'file_delete' | 'onboarding_complete' | 'knowledge_sync' | 'self_update' | 'telegram_webhook' | 'update_skills' | 'update_config' | 'memory_create_entities' | 'memory_create_relations' | 'memory_add_observations' | 'memory_delete_entities' | 'memory_delete_observations' | 'memory_delete_relations' | 'memory_read_graph' | 'memory_search_nodes' | 'memory_open_nodes';
|
|
8
|
+
export type CommandType = 'diagnostics' | 'restart' | 'deploy' | 'pair' | 'stop' | 'backup' | 'chat_list_sessions' | 'chat_history' | 'chat_send' | 'package_install' | 'file_write' | 'file_delete' | 'onboarding_complete' | 'knowledge_sync' | 'self_update' | 'plugin_update' | 'agent_update' | 'telegram_webhook' | 'update_skills' | 'update_config' | 'memory_create_entities' | 'memory_create_relations' | 'memory_add_observations' | 'memory_delete_entities' | 'memory_delete_observations' | 'memory_delete_relations' | 'memory_read_graph' | 'memory_search_nodes' | 'memory_open_nodes';
|
|
9
9
|
export interface AgentCommand {
|
|
10
10
|
id: string;
|
|
11
11
|
type: CommandType;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { restartGateway } from './gateway-restart.js';
|
|
2
2
|
/**
|
|
3
3
|
* Shared handler logic for commands that restart the OpenClaw gateway.
|
|
4
4
|
* Used by handleRestart and handleOnboardingComplete.
|
|
5
5
|
*/
|
|
6
6
|
export async function handleGatewayRestartCommand(command) {
|
|
7
7
|
try {
|
|
8
|
-
const { stdout, stderr } = await
|
|
8
|
+
const { stdout, stderr } = await restartGateway();
|
|
9
9
|
return {
|
|
10
10
|
id: command.id,
|
|
11
11
|
type: command.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-restart-handler.js","sourceRoot":"","sources":["../../src/utils/gateway-restart-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"gateway-restart-handler.js","sourceRoot":"","sources":["../../src/utils/gateway-restart-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAAqB;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;QAClD,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,57 @@
|
|
|
1
|
+
export declare const AC_PACKAGE = "@openclaw-cloud/agent-controller";
|
|
2
|
+
export declare function fixNpmPermissions(): Promise<void>;
|
|
3
|
+
export declare function withEaccesRetry<T>(fn: () => Promise<T>, label: string): Promise<T>;
|
|
4
|
+
/**
|
|
5
|
+
* Reads `openclaw --version` and returns the first version-like token.
|
|
6
|
+
* Throws when the binary is missing or output cannot be parsed — the caller
|
|
7
|
+
* decides how to translate that into an AgentResponse.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getOpenclawVersion(): Promise<string>;
|
|
10
|
+
export interface InstalledPlugin {
|
|
11
|
+
id: string;
|
|
12
|
+
version: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reads the installed plugin list via `openclaw plugins list --json`.
|
|
16
|
+
* Throws on exec failure or malformed JSON, including a stdout snippet so
|
|
17
|
+
* operators can debug from the agent log.
|
|
18
|
+
*/
|
|
19
|
+
export declare function listInstalledPlugins(): Promise<InstalledPlugin[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Install a specific openclaw runtime version globally.
|
|
22
|
+
* Skip-fast when `openclaw --version` already matches.
|
|
23
|
+
*/
|
|
24
|
+
export declare function installOpenclaw(version: string): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Install a specific plugin version. When `alreadyInstalled` is provided,
|
|
27
|
+
* skip-fast if that array already lists the plugin at the target version.
|
|
28
|
+
* The caller can fetch the list once via {@link listInstalledPlugins} and
|
|
29
|
+
* thread it through a multi-plugin install loop to avoid N×CLI round-trips.
|
|
30
|
+
*/
|
|
31
|
+
export declare function installPlugin(id: string, version: string, alreadyInstalled?: InstalledPlugin[]): Promise<boolean>;
|
|
32
|
+
export interface InstallPluginsResult {
|
|
33
|
+
installed: string[];
|
|
34
|
+
skipped: string[];
|
|
35
|
+
failed: Array<{
|
|
36
|
+
id: string;
|
|
37
|
+
error: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Install several plugins sequentially. One CLI lookup of the installed list
|
|
42
|
+
* is shared across the whole loop; per-plugin failures are recorded but do
|
|
43
|
+
* not abort the rest of the batch (poison-pill protection).
|
|
44
|
+
*/
|
|
45
|
+
export declare function installPlugins(plugins: Array<{
|
|
46
|
+
id: string;
|
|
47
|
+
version: string;
|
|
48
|
+
}>): Promise<InstallPluginsResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Install a specific agent-controller version globally. Caller passes the
|
|
51
|
+
* known current version (typically derived from package.json at boot). This
|
|
52
|
+
* lets us avoid a redundant npm install when the WS payload echoes the
|
|
53
|
+
* version we already run.
|
|
54
|
+
*
|
|
55
|
+
* Returns `true` when the install ran, `false` when skipped.
|
|
56
|
+
*/
|
|
57
|
+
export declare function installAcSelf(version: string, currentVersion: string): Promise<boolean>;
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared module for openclaw-cli operations (version reads, plugin/runtime
|
|
3
|
+
* installs). Used by:
|
|
4
|
+
* - src/commands/self-update.ts (CLI legacy + explicit-payload self-update)
|
|
5
|
+
* - src/handlers/self-update.ts (WS self_update handler)
|
|
6
|
+
* - src/handlers/agent-update.ts (WS agent_update handler)
|
|
7
|
+
* - src/handlers/plugin-update.ts (WS plugin_update handler)
|
|
8
|
+
*
|
|
9
|
+
* NEVER import 'process.env.X' here — use config from '../config.js'.
|
|
10
|
+
*/
|
|
11
|
+
import { execAsync } from './exec.js';
|
|
12
|
+
import { config } from '../config.js';
|
|
13
|
+
const OPENCLAW_PACKAGE = 'openclaw';
|
|
14
|
+
export const AC_PACKAGE = '@openclaw-cloud/agent-controller';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// EACCES self-heal — moved here from src/commands/self-update.ts so that
|
|
17
|
+
// every npm install in the system shares the same retry path.
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
export async function fixNpmPermissions() {
|
|
20
|
+
const home = config.home;
|
|
21
|
+
console.log('Fixing npm permissions (root-owned files from previous installs)...');
|
|
22
|
+
await execAsync(`sudo chown -R $(id -u):$(id -g) "${home}/.npm" "${home}/.npm-global" 2>/dev/null || true`, 30_000);
|
|
23
|
+
}
|
|
24
|
+
export async function withEaccesRetry(fn, label) {
|
|
25
|
+
try {
|
|
26
|
+
return await fn();
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err instanceof Error && err.message.includes('EACCES')) {
|
|
30
|
+
await fixNpmPermissions();
|
|
31
|
+
try {
|
|
32
|
+
return await fn();
|
|
33
|
+
}
|
|
34
|
+
catch (retryErr) {
|
|
35
|
+
console.error(`${label} failed after permission fix:`, retryErr instanceof Error ? retryErr.message : retryErr);
|
|
36
|
+
throw retryErr;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
console.error(`${label} failed:`, err instanceof Error ? err.message : err);
|
|
40
|
+
throw err;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Version reads
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Reads `openclaw --version` and returns the first version-like token.
|
|
48
|
+
* Throws when the binary is missing or output cannot be parsed — the caller
|
|
49
|
+
* decides how to translate that into an AgentResponse.
|
|
50
|
+
*/
|
|
51
|
+
export async function getOpenclawVersion() {
|
|
52
|
+
let stdout;
|
|
53
|
+
try {
|
|
54
|
+
stdout = await execAsync('openclaw --version', 10_000);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
58
|
+
throw new Error(`openclaw --version failed: ${msg}`);
|
|
59
|
+
}
|
|
60
|
+
// Match a SemVer-like token; tolerate prefixes like "openclaw v1.2.3"
|
|
61
|
+
const match = stdout.match(/\d+\.\d+\.\d+(?:[-+][\w.]+)?/);
|
|
62
|
+
if (!match) {
|
|
63
|
+
throw new Error(`openclaw --version returned unparseable output: ${stdout.slice(0, 200)}`);
|
|
64
|
+
}
|
|
65
|
+
return match[0];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Reads the installed plugin list via `openclaw plugins list --json`.
|
|
69
|
+
* Throws on exec failure or malformed JSON, including a stdout snippet so
|
|
70
|
+
* operators can debug from the agent log.
|
|
71
|
+
*/
|
|
72
|
+
export async function listInstalledPlugins() {
|
|
73
|
+
let stdout;
|
|
74
|
+
try {
|
|
75
|
+
stdout = await execAsync('openclaw plugins list --json', 15_000);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
79
|
+
throw new Error(`openclaw plugins list --json failed: ${msg}`);
|
|
80
|
+
}
|
|
81
|
+
let parsed;
|
|
82
|
+
try {
|
|
83
|
+
parsed = JSON.parse(stdout);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
87
|
+
throw new Error(`openclaw plugins list --json returned invalid JSON (${msg}): ${stdout.slice(0, 200)}`);
|
|
88
|
+
}
|
|
89
|
+
// Accept either a top-level array or { plugins: [...] }
|
|
90
|
+
const list = Array.isArray(parsed)
|
|
91
|
+
? parsed
|
|
92
|
+
: Array.isArray(parsed.plugins)
|
|
93
|
+
? parsed.plugins
|
|
94
|
+
: null;
|
|
95
|
+
if (!list) {
|
|
96
|
+
throw new Error(`openclaw plugins list --json: unexpected shape: ${stdout.slice(0, 200)}`);
|
|
97
|
+
}
|
|
98
|
+
const out = [];
|
|
99
|
+
for (const item of list) {
|
|
100
|
+
if (!item || typeof item !== 'object')
|
|
101
|
+
continue;
|
|
102
|
+
const r = item;
|
|
103
|
+
const id = typeof r.id === 'string' ? r.id : typeof r.name === 'string' ? r.name : null;
|
|
104
|
+
const version = typeof r.version === 'string' ? r.version : null;
|
|
105
|
+
if (id && version)
|
|
106
|
+
out.push({ id, version });
|
|
107
|
+
}
|
|
108
|
+
return out;
|
|
109
|
+
}
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
// Installers — all return `true` if an install actually ran, `false` if the
|
|
112
|
+
// requested version was already present (idempotent skip).
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
/**
|
|
115
|
+
* Install a specific openclaw runtime version globally.
|
|
116
|
+
* Skip-fast when `openclaw --version` already matches.
|
|
117
|
+
*/
|
|
118
|
+
export async function installOpenclaw(version) {
|
|
119
|
+
let current = null;
|
|
120
|
+
try {
|
|
121
|
+
current = await getOpenclawVersion();
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// openclaw missing → fall through and install
|
|
125
|
+
}
|
|
126
|
+
if (current === version) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
await withEaccesRetry(() => execAsync(`npm install -g ${OPENCLAW_PACKAGE}@${version}`, 120_000), `npm install -g ${OPENCLAW_PACKAGE}@${version}`);
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Install a specific plugin version. When `alreadyInstalled` is provided,
|
|
134
|
+
* skip-fast if that array already lists the plugin at the target version.
|
|
135
|
+
* The caller can fetch the list once via {@link listInstalledPlugins} and
|
|
136
|
+
* thread it through a multi-plugin install loop to avoid N×CLI round-trips.
|
|
137
|
+
*/
|
|
138
|
+
export async function installPlugin(id, version, alreadyInstalled) {
|
|
139
|
+
const match = alreadyInstalled?.find((p) => p.id === id);
|
|
140
|
+
if (match && match.version === version) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
await withEaccesRetry(() => execAsync(`openclaw plugins install ${id}@${version} --force`, 60_000), `openclaw plugins install ${id}@${version}`);
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Install several plugins sequentially. One CLI lookup of the installed list
|
|
148
|
+
* is shared across the whole loop; per-plugin failures are recorded but do
|
|
149
|
+
* not abort the rest of the batch (poison-pill protection).
|
|
150
|
+
*/
|
|
151
|
+
export async function installPlugins(plugins) {
|
|
152
|
+
const result = { installed: [], skipped: [], failed: [] };
|
|
153
|
+
if (plugins.length === 0)
|
|
154
|
+
return result;
|
|
155
|
+
let inventory = [];
|
|
156
|
+
try {
|
|
157
|
+
inventory = await listInstalledPlugins();
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
// If we cannot read the inventory we still try to install — the CLI's
|
|
161
|
+
// own --force will overwrite. Record the read failure as the first
|
|
162
|
+
// diagnostic context but don't abort.
|
|
163
|
+
console.warn('listInstalledPlugins failed; proceeding without skip-cache:', err instanceof Error ? err.message : err);
|
|
164
|
+
}
|
|
165
|
+
for (const p of plugins) {
|
|
166
|
+
if (!p || typeof p.id !== 'string' || typeof p.version !== 'string' || !p.id || !p.version) {
|
|
167
|
+
result.failed.push({ id: String(p?.id ?? 'unknown'), error: 'invalid plugin entry' });
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const installed = await installPlugin(p.id, p.version, inventory);
|
|
172
|
+
if (installed)
|
|
173
|
+
result.installed.push(p.id);
|
|
174
|
+
else
|
|
175
|
+
result.skipped.push(p.id);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
179
|
+
result.failed.push({ id: p.id, error: msg });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Install a specific agent-controller version globally. Caller passes the
|
|
186
|
+
* known current version (typically derived from package.json at boot). This
|
|
187
|
+
* lets us avoid a redundant npm install when the WS payload echoes the
|
|
188
|
+
* version we already run.
|
|
189
|
+
*
|
|
190
|
+
* Returns `true` when the install ran, `false` when skipped.
|
|
191
|
+
*/
|
|
192
|
+
export async function installAcSelf(version, currentVersion) {
|
|
193
|
+
if (currentVersion === version)
|
|
194
|
+
return false;
|
|
195
|
+
await withEaccesRetry(() => execAsync(`npm install -g ${AC_PACKAGE}@${version}`, 120_000), `npm install -g ${AC_PACKAGE}@${version}`);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=openclaw-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-ops.js","sourceRoot":"","sources":["../../src/utils/openclaw-ops.ts"],"names":[],"mappings":"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"}
|