@openclaw-cloud/agent-controller 3.1.1 → 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/agent-controller.js +5 -9
- package/dist/commands/agent-update-cli.js +23 -38
- package/dist/commands/agent-update-cli.js.map +1 -1
- package/dist/commands/backup-cli.js +6 -4
- package/dist/commands/backup-cli.js.map +1 -1
- package/dist/commands/bootstrap.js +4 -4
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/channel-server.js +4 -3
- package/dist/commands/channel-server.js.map +1 -1
- package/dist/commands/heartbeat-cli.js +2 -6
- package/dist/commands/heartbeat-cli.js.map +1 -1
- package/dist/commands/install-deps.d.ts +10 -0
- package/dist/commands/install-deps.js +33 -43
- package/dist/commands/install-deps.js.map +1 -1
- package/dist/commands/knowledge-sync-cli.js +6 -4
- package/dist/commands/knowledge-sync-cli.js.map +1 -1
- package/dist/commands/plugin-update-cli.js +2 -9
- package/dist/commands/plugin-update-cli.js.map +1 -1
- package/dist/commands/self-update.js +17 -34
- package/dist/commands/self-update.js.map +1 -1
- package/dist/commands/update-skills.js +4 -3
- package/dist/commands/update-skills.js.map +1 -1
- package/dist/config-file.d.ts +7 -0
- package/dist/config-file.js +21 -11
- package/dist/config-file.js.map +1 -1
- package/dist/handlers/agent-update.d.ts +4 -0
- package/dist/handlers/agent-update.js +16 -44
- package/dist/handlers/agent-update.js.map +1 -1
- package/dist/handlers/deploy.d.ts +1 -2
- package/dist/handlers/deploy.js +4 -20
- package/dist/handlers/deploy.js.map +1 -1
- package/dist/handlers/diagnostics.js +0 -12
- package/dist/handlers/diagnostics.js.map +1 -1
- package/dist/handlers/file-delete.js +4 -5
- package/dist/handlers/file-delete.js.map +1 -1
- package/dist/handlers/file-write.js +4 -4
- package/dist/handlers/file-write.js.map +1 -1
- package/dist/handlers/knowledge-sync.js +2 -14
- package/dist/handlers/knowledge-sync.js.map +1 -1
- package/dist/handlers/onboarding.d.ts +1 -2
- package/dist/handlers/onboarding.js +3 -20
- package/dist/handlers/onboarding.js.map +1 -1
- package/dist/handlers/package-install.js +1 -1
- package/dist/handlers/package-install.js.map +1 -1
- package/dist/handlers/pair.js +0 -12
- package/dist/handlers/pair.js.map +1 -1
- package/dist/handlers/restart.d.ts +1 -2
- package/dist/handlers/restart.js +3 -8
- package/dist/handlers/restart.js.map +1 -1
- package/dist/handlers/stop.js +0 -7
- package/dist/handlers/stop.js.map +1 -1
- package/dist/handlers/telegram-webhook.js +3 -22
- package/dist/handlers/telegram-webhook.js.map +1 -1
- package/dist/handlers/update-config.js +3 -11
- package/dist/handlers/update-config.js.map +1 -1
- package/dist/heartbeat.js +2 -1
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.js +37 -84
- package/dist/index.js.map +1 -1
- package/dist/lockfile.js +2 -1
- package/dist/lockfile.js.map +1 -1
- package/dist/platform/linux.js +6 -5
- package/dist/platform/linux.js.map +1 -1
- package/dist/platform/macos.js +3 -2
- package/dist/platform/macos.js.map +1 -1
- package/dist/platform/windows.js +3 -2
- package/dist/platform/windows.js.map +1 -1
- package/dist/providers/claude-code/channel-server.js +2 -1
- package/dist/providers/claude-code/channel-server.js.map +1 -1
- package/dist/providers/claude-code/settings-writer.d.ts +3 -2
- package/dist/providers/claude-code/settings-writer.js +6 -15
- package/dist/providers/claude-code/settings-writer.js.map +1 -1
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.js +25 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openclaw/index.js +11 -13
- package/dist/providers/openclaw/index.js.map +1 -1
- package/dist/utils/anthropic-auth.d.ts +14 -0
- package/dist/utils/anthropic-auth.js +24 -0
- package/dist/utils/anthropic-auth.js.map +1 -1
- package/dist/utils/apply-config.d.ts +13 -0
- package/dist/utils/apply-config.js +54 -71
- package/dist/utils/apply-config.js.map +1 -1
- package/dist/utils/claude-env.js +18 -28
- package/dist/utils/claude-env.js.map +1 -1
- package/dist/utils/env.d.ts +0 -1
- package/dist/utils/env.js +0 -8
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/gateway-restart-handler.d.ts +6 -2
- package/dist/utils/gateway-restart-handler.js +11 -2
- package/dist/utils/gateway-restart-handler.js.map +1 -1
- package/dist/utils/gateway-restart.d.ts +7 -0
- package/dist/utils/gateway-restart.js +12 -4
- package/dist/utils/gateway-restart.js.map +1 -1
- package/dist/utils/legacy-mcp-servers.d.ts +12 -0
- package/dist/utils/legacy-mcp-servers.js +37 -0
- package/dist/utils/legacy-mcp-servers.js.map +1 -0
- package/dist/utils/log-collector.js +2 -1
- package/dist/utils/log-collector.js.map +1 -1
- package/dist/utils/openclaw-ops.js +8 -7
- package/dist/utils/openclaw-ops.js.map +1 -1
- package/dist/utils/openclaw-stack-update.d.ts +31 -0
- package/dist/utils/openclaw-stack-update.js +50 -0
- package/dist/utils/openclaw-stack-update.js.map +1 -0
- package/dist/utils/package-install.js +4 -12
- package/dist/utils/package-install.js.map +1 -1
- package/dist/utils/package-version.d.ts +10 -0
- package/dist/utils/package-version.js +18 -0
- package/dist/utils/package-version.js.map +1 -0
- package/dist/utils/parse-id-at-version.d.ts +15 -0
- package/dist/utils/parse-id-at-version.js +22 -0
- package/dist/utils/parse-id-at-version.js.map +1 -0
- package/dist/utils/response.js +1 -0
- package/dist/utils/response.js.map +1 -1
- package/dist/utils/write-workspace-files.js +8 -13
- package/dist/utils/write-workspace-files.js.map +1 -1
- package/dist/workspace.d.ts +11 -0
- package/dist/workspace.js +20 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/claude-env.js
CHANGED
|
@@ -1,7 +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
|
-
import { classifyAnthropicAuth } from './anthropic-auth.js';
|
|
4
|
+
import { buildClaudeSettings, classifyAnthropicAuth, CLAUDE_PERMISSIONS, } from './anthropic-auth.js';
|
|
5
5
|
import { getResolvedDeployType, isManagedDeploy } from './deploy-type.js';
|
|
6
6
|
const CC_NOTIFY_SH = `#!/bin/bash
|
|
7
7
|
# Claude Code hook: notify OpenClaw on Stop/PermissionRequest
|
|
@@ -61,10 +61,6 @@ export async function writeClaudeEnv(envVars) {
|
|
|
61
61
|
await fs.writeFile(notifyPath, CC_NOTIFY_SH);
|
|
62
62
|
await fs.chmod(notifyPath, 0o755);
|
|
63
63
|
const auth = classifyAnthropicAuth({ anthropicApiKey: envVars.ANTHROPIC_API_KEY });
|
|
64
|
-
// This flow only handles the OAuth-vs-API-key split (no explicit
|
|
65
|
-
// anthropicAuthToken input); an `auth_token` classification here always
|
|
66
|
-
// means "the API key was in fact an OAuth token".
|
|
67
|
-
const isOAuthToken = auth.kind === 'auth_token';
|
|
68
64
|
const hooks = {
|
|
69
65
|
PreToolUse: [{ matcher: 'Bash', hooks: [] }],
|
|
70
66
|
PostToolUse: [{ matcher: 'Write|Edit', hooks: [] }],
|
|
@@ -80,29 +76,23 @@ export async function writeClaudeEnv(envVars) {
|
|
|
80
76
|
},
|
|
81
77
|
],
|
|
82
78
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
env
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
...(envVars.ANTHROPIC_BASE_URL
|
|
101
|
-
? { env: { ANTHROPIC_BASE_URL: envVars.ANTHROPIC_BASE_URL } }
|
|
102
|
-
: {}),
|
|
103
|
-
hooks,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
79
|
+
// This flow only handles the OAuth-vs-API-key split (no explicit
|
|
80
|
+
// anthropicAuthToken input); an `auth_token` classification here always
|
|
81
|
+
// means "the API key was in fact an OAuth token".
|
|
82
|
+
const settings = auth.kind === 'auth_token'
|
|
83
|
+
? // OAuth token flow: ANTHROPIC_AUTH_TOKEN, no apiKeyHelper, no ANTHROPIC_BASE_URL
|
|
84
|
+
{ ...buildClaudeSettings(auth), hooks }
|
|
85
|
+
: // API key flow (default): the key is NOT embedded — apiKeyHelper reads it
|
|
86
|
+
// out of the VM .env at runtime — so this branch cannot use the shared
|
|
87
|
+
// `env` variant. Optional ANTHROPIC_BASE_URL rides along.
|
|
88
|
+
{
|
|
89
|
+
permissions: CLAUDE_PERMISSIONS,
|
|
90
|
+
apiKeyHelper: "bash -c 'source /opt/openclaw-cloud/agent-controller/.env && echo $ANTHROPIC_API_KEY'",
|
|
91
|
+
...(envVars.ANTHROPIC_BASE_URL
|
|
92
|
+
? { env: { ANTHROPIC_BASE_URL: envVars.ANTHROPIC_BASE_URL } }
|
|
93
|
+
: {}),
|
|
94
|
+
hooks,
|
|
95
|
+
};
|
|
106
96
|
// Contains ANTHROPIC_AUTH_TOKEN on OAuth flow — chmod 0o600.
|
|
107
97
|
await fs.writeFile(path.join(claudeDir, 'settings.json'), JSON.stringify(settings, null, 2) + '\n', { mode: 0o600 });
|
|
108
98
|
// auth-profiles.json is now written by applyBootstrapConfig from openclaw.json
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-env.js","sourceRoot":"","sources":["../../src/utils/claude-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"claude-env.js","sourceRoot":"","sources":["../../src/utils/claude-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE1E,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCpB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA+B;IAClE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CACT,2DAA2D,qBAAqB,EAAE,IAAI,SAAS,GAAG,CACnG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,qBAAqB;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG;QACZ,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC5C,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACnD,IAAI,EAAE;YACJ;gBACE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;aACnF;SACF;QACD,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,mBAAmB;gBAC5B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;aAC3F;SACF;KACF,CAAC;IAEF,iEAAiE;IACjE,wEAAwE;IACxE,kDAAkD;IAClD,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK,YAAY;QACxB,CAAC,CAAC,iFAAiF;YACjF,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE;QACzC,CAAC,CAAC,0EAA0E;YAC1E,uEAAuE;YACvE,0DAA0D;YAC1D;gBACE,WAAW,EAAE,kBAAkB;gBAC/B,YAAY,EACV,uFAAuF;gBACzF,GAAG,CAAC,OAAO,CAAC,kBAAkB;oBAC5B,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,EAAE;oBAC7D,CAAC,CAAC,EAAE,CAAC;gBACP,KAAK;aACN,CAAC;IAER,6DAA6D;IAC7D,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACxC,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IAEF,+EAA+E;AACjF,CAAC"}
|
package/dist/utils/env.d.ts
CHANGED
package/dist/utils/env.js
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import { config, requireConfig } from '../config.js';
|
|
2
|
-
export function requireEnv(name) {
|
|
3
|
-
const value = process.env[name];
|
|
4
|
-
if (!value) {
|
|
5
|
-
console.error(`Missing required environment variable: ${name}`);
|
|
6
|
-
process.exit(1);
|
|
7
|
-
}
|
|
8
|
-
return value;
|
|
9
|
-
}
|
|
10
2
|
export function getBackendUrl() {
|
|
11
3
|
return config.backendUrl ?? requireConfig('backendUrl');
|
|
12
4
|
}
|
package/dist/utils/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,UAAU,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { AgentCommand, AgentResponse } from '../types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* The handler behind every command whose whole job is "restart the OpenClaw
|
|
4
|
+
* gateway": `restart`, `deploy` and `onboarding_complete`. They were three
|
|
5
|
+
* byte-identical copies of this wrapper.
|
|
6
|
+
*
|
|
7
|
+
* Emits only the domain event (`gateway_restart`) — the command lifecycle
|
|
8
|
+
* events are owned by the dispatch loop in connection.ts.
|
|
5
9
|
*/
|
|
6
10
|
export declare function handleGatewayRestartCommand(command: AgentCommand): Promise<AgentResponse>;
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { restartGateway } from './gateway-restart.js';
|
|
2
|
+
import { logCollector } from '../connection.js';
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
4
|
+
* The handler behind every command whose whole job is "restart the OpenClaw
|
|
5
|
+
* gateway": `restart`, `deploy` and `onboarding_complete`. They were three
|
|
6
|
+
* byte-identical copies of this wrapper.
|
|
7
|
+
*
|
|
8
|
+
* Emits only the domain event (`gateway_restart`) — the command lifecycle
|
|
9
|
+
* events are owned by the dispatch loop in connection.ts.
|
|
5
10
|
*/
|
|
6
11
|
export async function handleGatewayRestartCommand(command) {
|
|
12
|
+
logCollector?.push('gateway_restart', 'info', 'Gateway restart requested', {
|
|
13
|
+
commandId: command.id,
|
|
14
|
+
type: command.type,
|
|
15
|
+
});
|
|
7
16
|
try {
|
|
8
17
|
const { stdout, stderr } = await restartGateway();
|
|
9
18
|
return {
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAAqB;IACrE,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,2BAA2B,EAAE;QACzE,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;IACH,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"}
|
|
@@ -5,6 +5,13 @@ export interface GatewayRestartResult {
|
|
|
5
5
|
/**
|
|
6
6
|
* Restart the gateway via the configured agent provider.
|
|
7
7
|
* Returns { stdout: '', stderr: '' } for interface compatibility.
|
|
8
|
+
*
|
|
9
|
+
* `configureProvider()` only ever runs inside the daemon's `main()`, so in
|
|
10
|
+
* EVERY CLI invocation `getProvider()` is null. This used to warn and return
|
|
11
|
+
* success, which made `agent-controller restart` (and the restart tail of
|
|
12
|
+
* `deploy` / `agent-update` / `self-update`) a silent no-op that still exited
|
|
13
|
+
* 0. We now build a throwaway provider from config instead, and throw when
|
|
14
|
+
* even that is impossible so the caller can exit non-zero.
|
|
8
15
|
*/
|
|
9
16
|
export declare function restartGateway(): Promise<GatewayRestartResult>;
|
|
10
17
|
/**
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
import { getProvider } from '../providers/index.js';
|
|
1
|
+
import { createProviderFromConfig, getProvider } from '../providers/index.js';
|
|
2
|
+
import { config } from '../config.js';
|
|
2
3
|
/**
|
|
3
4
|
* Restart the gateway via the configured agent provider.
|
|
4
5
|
* Returns { stdout: '', stderr: '' } for interface compatibility.
|
|
6
|
+
*
|
|
7
|
+
* `configureProvider()` only ever runs inside the daemon's `main()`, so in
|
|
8
|
+
* EVERY CLI invocation `getProvider()` is null. This used to warn and return
|
|
9
|
+
* success, which made `agent-controller restart` (and the restart tail of
|
|
10
|
+
* `deploy` / `agent-update` / `self-update`) a silent no-op that still exited
|
|
11
|
+
* 0. We now build a throwaway provider from config instead, and throw when
|
|
12
|
+
* even that is impossible so the caller can exit non-zero.
|
|
5
13
|
*/
|
|
6
14
|
export async function restartGateway() {
|
|
7
|
-
const provider = getProvider();
|
|
15
|
+
const provider = getProvider() ?? createProviderFromConfig();
|
|
8
16
|
if (!provider) {
|
|
9
|
-
|
|
10
|
-
|
|
17
|
+
throw new Error(`Cannot restart gateway: unknown agent provider '${config.agentProvider}' ` +
|
|
18
|
+
'(set AGENT_PROVIDER to openclaw, claude-code or mock)');
|
|
11
19
|
}
|
|
12
20
|
await provider.restart();
|
|
13
21
|
return { stdout: '', stderr: '' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-restart.js","sourceRoot":"","sources":["../../src/utils/gateway-restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-restart.js","sourceRoot":"","sources":["../../src/utils/gateway-restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAOtC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,WAAW,EAAE,IAAI,wBAAwB,EAAE,CAAC;IAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,mDAAmD,MAAM,CAAC,aAAa,IAAI;YACzE,uDAAuD,CAC1D,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lift a legacy flat `mcpServers` map at the root of a config file into the
|
|
3
|
+
* canonical nested `mcp.servers`. Existing nested entries win; the flat key is
|
|
4
|
+
* removed. Mutates `fileConfig` in place and returns true when anything moved.
|
|
5
|
+
*
|
|
6
|
+
* OpenClaw's CLI switched to strict schema validation that rejects the unknown
|
|
7
|
+
* top-level `mcpServers` key, so leaving it behind crashes the gateway on
|
|
8
|
+
* startup. The same migration runs against openclaw.json (both at startup and
|
|
9
|
+
* on the scoped-merge path) and against ~/.claude/settings.json, which is why
|
|
10
|
+
* it lives here instead of being copy-pasted into each of them.
|
|
11
|
+
*/
|
|
12
|
+
export declare function migrateLegacyMcpServers(fileConfig: Record<string, unknown>, logPrefix: string): boolean;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function asPlainObject(v) {
|
|
2
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v)
|
|
3
|
+
? v
|
|
4
|
+
: null;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Lift a legacy flat `mcpServers` map at the root of a config file into the
|
|
8
|
+
* canonical nested `mcp.servers`. Existing nested entries win; the flat key is
|
|
9
|
+
* removed. Mutates `fileConfig` in place and returns true when anything moved.
|
|
10
|
+
*
|
|
11
|
+
* OpenClaw's CLI switched to strict schema validation that rejects the unknown
|
|
12
|
+
* top-level `mcpServers` key, so leaving it behind crashes the gateway on
|
|
13
|
+
* startup. The same migration runs against openclaw.json (both at startup and
|
|
14
|
+
* on the scoped-merge path) and against ~/.claude/settings.json, which is why
|
|
15
|
+
* it lives here instead of being copy-pasted into each of them.
|
|
16
|
+
*/
|
|
17
|
+
export function migrateLegacyMcpServers(fileConfig, logPrefix) {
|
|
18
|
+
const flat = asPlainObject(fileConfig.mcpServers);
|
|
19
|
+
if (!flat)
|
|
20
|
+
return false;
|
|
21
|
+
const mcp = asPlainObject(fileConfig.mcp) ?? {};
|
|
22
|
+
const nested = asPlainObject(mcp.servers) ?? {};
|
|
23
|
+
for (const [name, value] of Object.entries(flat)) {
|
|
24
|
+
if (!(name in nested)) {
|
|
25
|
+
nested[name] = value;
|
|
26
|
+
console.log(`${logPrefix} MIGRATED legacy mcpServers.${name} → mcp.servers.${name}`);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.warn(`${logPrefix} MIGRATION SKIP: mcp.servers.${name} already exists, dropping legacy flat entry`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
mcp.servers = nested;
|
|
33
|
+
fileConfig.mcp = mcp;
|
|
34
|
+
delete fileConfig.mcpServers;
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=legacy-mcp-servers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-mcp-servers.js","sourceRoot":"","sources":["../../src/utils/legacy-mcp-servers.ts"],"names":[],"mappings":"AAAA,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAE,CAA6B;QAChC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAmC,EACnC,SAAiB;IAEjB,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,+BAA+B,IAAI,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CACV,GAAG,SAAS,gCAAgC,IAAI,6CAA6C,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC;IACrB,OAAO,UAAU,CAAC,UAAU,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { toErrorMessage } from './response.js';
|
|
1
2
|
export class LogCollector {
|
|
2
3
|
buffer = [];
|
|
3
4
|
timer = null;
|
|
@@ -39,7 +40,7 @@ export class LogCollector {
|
|
|
39
40
|
if (this.buffer.length > 500) {
|
|
40
41
|
this.buffer.splice(500);
|
|
41
42
|
}
|
|
42
|
-
console.error('[log-collector] flush failed:', err
|
|
43
|
+
console.error('[log-collector] flush failed:', toErrorMessage(err));
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
async shutdown() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-collector.js","sourceRoot":"","sources":["../../src/utils/log-collector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log-collector.js","sourceRoot":"","sources":["../../src/utils/log-collector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAU/C,MAAM,OAAO,YAAY;IACf,MAAM,GAAe,EAAE,CAAC;IACxB,KAAK,GAA0B,IAAI,CAAC;IAC3B,eAAe,CAAS;IACxB,YAAY,CAAS;IACrB,GAAG,CAAW;IAE/B,YAAY,GAAa,EAAE,IAA0D;QACnF,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,eAAe,GAAG,IAAI,EAAE,eAAe,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,CACF,SAAiB,EACjB,KAA0C,EAC1C,OAAe,EACf,QAAkC;QAElC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,SAAS;YACT,KAAK;YACL,OAAO;YACP,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAChF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kDAAkD;YAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;YAC9B,gDAAgD;YAChD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,KAAK;YAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACnF,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -12,6 +12,7 @@ import fs from 'node:fs/promises';
|
|
|
12
12
|
import path from 'node:path';
|
|
13
13
|
import { execAsync } from './exec.js';
|
|
14
14
|
import { config } from '../config.js';
|
|
15
|
+
import { toErrorMessage } from './response.js';
|
|
15
16
|
const OPENCLAW_PACKAGE = 'openclaw';
|
|
16
17
|
export const AC_PACKAGE = '@openclaw-cloud/agent-controller';
|
|
17
18
|
// ---------------------------------------------------------------------------
|
|
@@ -34,11 +35,11 @@ export async function withEaccesRetry(fn, label) {
|
|
|
34
35
|
return await fn();
|
|
35
36
|
}
|
|
36
37
|
catch (retryErr) {
|
|
37
|
-
console.error(`${label} failed after permission fix:`, retryErr
|
|
38
|
+
console.error(`${label} failed after permission fix:`, toErrorMessage(retryErr));
|
|
38
39
|
throw retryErr;
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
|
-
console.error(`${label} failed:`, err
|
|
42
|
+
console.error(`${label} failed:`, toErrorMessage(err));
|
|
42
43
|
throw err;
|
|
43
44
|
}
|
|
44
45
|
}
|
|
@@ -56,7 +57,7 @@ export async function getOpenclawVersion() {
|
|
|
56
57
|
stdout = await execAsync('openclaw --version', 10_000);
|
|
57
58
|
}
|
|
58
59
|
catch (err) {
|
|
59
|
-
const msg =
|
|
60
|
+
const msg = toErrorMessage(err);
|
|
60
61
|
throw new Error(`openclaw --version failed: ${msg}`);
|
|
61
62
|
}
|
|
62
63
|
// Match a SemVer-like token; tolerate prefixes like "openclaw v1.2.3"
|
|
@@ -139,7 +140,7 @@ export async function listInstalledPlugins() {
|
|
|
139
140
|
stdout = await execAsync('openclaw plugins list --json', 60_000);
|
|
140
141
|
}
|
|
141
142
|
catch (err) {
|
|
142
|
-
const msg =
|
|
143
|
+
const msg = toErrorMessage(err);
|
|
143
144
|
throw new Error(`openclaw plugins list --json failed: ${msg}`);
|
|
144
145
|
}
|
|
145
146
|
let parsed;
|
|
@@ -147,7 +148,7 @@ export async function listInstalledPlugins() {
|
|
|
147
148
|
parsed = JSON.parse(stdout);
|
|
148
149
|
}
|
|
149
150
|
catch (err) {
|
|
150
|
-
const msg =
|
|
151
|
+
const msg = toErrorMessage(err);
|
|
151
152
|
throw new Error(`openclaw plugins list --json returned invalid JSON (${msg}): ${stdout.slice(0, 200)}`);
|
|
152
153
|
}
|
|
153
154
|
// Accept either a top-level array or { plugins: [...] }
|
|
@@ -238,7 +239,7 @@ export async function installPlugins(plugins) {
|
|
|
238
239
|
inventory = await listInstalledPlugins();
|
|
239
240
|
}
|
|
240
241
|
catch (err) {
|
|
241
|
-
console.warn('listInstalledPlugins failed; proceeding without skip-cache:', err
|
|
242
|
+
console.warn('listInstalledPlugins failed; proceeding without skip-cache:', toErrorMessage(err));
|
|
242
243
|
}
|
|
243
244
|
for (const p of plugins) {
|
|
244
245
|
if (!p || typeof p.id !== 'string' || typeof p.version !== 'string' || !p.id || !p.version) {
|
|
@@ -253,7 +254,7 @@ export async function installPlugins(plugins) {
|
|
|
253
254
|
result.skipped.push(p.id);
|
|
254
255
|
}
|
|
255
256
|
catch (err) {
|
|
256
|
-
const msg =
|
|
257
|
+
const msg = toErrorMessage(err);
|
|
257
258
|
result.failed.push({ id: p.id, error: msg });
|
|
258
259
|
}
|
|
259
260
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-ops.js","sourceRoot":"","sources":["../../src/utils/openclaw-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw-ops.js","sourceRoot":"","sources":["../../src/utils/openclaw-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type InstallPluginsResult } from './openclaw-ops.js';
|
|
2
|
+
export interface OpenclawStackUpdateOptions {
|
|
3
|
+
/** openclaw runtime version to install. Omit to only touch plugins. */
|
|
4
|
+
version?: string;
|
|
5
|
+
plugins?: Array<{
|
|
6
|
+
id: string;
|
|
7
|
+
version: string;
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Prefix for the emitted logCollector events (`self_update`, `agent_update`,
|
|
11
|
+
* `agent_update_cli`). Kept per-caller so backend log queries can still tell
|
|
12
|
+
* a self-update apart from an agent-update.
|
|
13
|
+
*/
|
|
14
|
+
eventPrefix: string;
|
|
15
|
+
/** Extra fields merged into every emitted event (e.g. `{ commandId }`). */
|
|
16
|
+
meta?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface OpenclawStackUpdateResult {
|
|
19
|
+
runtimeChanged: boolean;
|
|
20
|
+
pluginSummary?: InstallPluginsResult;
|
|
21
|
+
/** True only when a restart was attempted AND succeeded. */
|
|
22
|
+
gatewayRestarted: boolean;
|
|
23
|
+
/** Set when a restart was attempted and failed (best-effort — not fatal). */
|
|
24
|
+
restartError?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Throws whatever `installOpenclaw` / `installPlugins` throw — per-plugin
|
|
28
|
+
* failures are reported inside `pluginSummary`, not raised. A failed gateway
|
|
29
|
+
* restart is never thrown: the install already landed, so it is a warning.
|
|
30
|
+
*/
|
|
31
|
+
export declare function runOpenclawStackUpdate(opts: OpenclawStackUpdateOptions): Promise<OpenclawStackUpdateResult>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { installOpenclaw, installPlugins } from './openclaw-ops.js';
|
|
2
|
+
import { restartGateway } from './gateway-restart.js';
|
|
3
|
+
import { logCollector } from '../connection.js';
|
|
4
|
+
import { toErrorMessage } from './response.js';
|
|
5
|
+
/**
|
|
6
|
+
* Throws whatever `installOpenclaw` / `installPlugins` throw — per-plugin
|
|
7
|
+
* failures are reported inside `pluginSummary`, not raised. A failed gateway
|
|
8
|
+
* restart is never thrown: the install already landed, so it is a warning.
|
|
9
|
+
*/
|
|
10
|
+
export async function runOpenclawStackUpdate(opts) {
|
|
11
|
+
const { version, plugins, eventPrefix, meta = {} } = opts;
|
|
12
|
+
const push = (event, level, msg, data = {}) => {
|
|
13
|
+
logCollector?.push(`${eventPrefix}_${event}`, level, msg, { ...meta, ...data });
|
|
14
|
+
};
|
|
15
|
+
let runtimeChanged = false;
|
|
16
|
+
if (version) {
|
|
17
|
+
runtimeChanged = await installOpenclaw(version);
|
|
18
|
+
push(runtimeChanged ? 'runtime_installed' : 'runtime_skipped', 'info', runtimeChanged
|
|
19
|
+
? `openclaw runtime installed at ${version}`
|
|
20
|
+
: `openclaw runtime already at ${version}`, { version });
|
|
21
|
+
}
|
|
22
|
+
let pluginSummary;
|
|
23
|
+
if (plugins?.length) {
|
|
24
|
+
push('plugin_install_start', 'info', `Installing ${plugins.length} plugin(s)`, {
|
|
25
|
+
pluginCount: plugins.length,
|
|
26
|
+
});
|
|
27
|
+
pluginSummary = await installPlugins(plugins);
|
|
28
|
+
push('plugin_install_done', pluginSummary.failed.length > 0 ? 'warn' : 'info', `Plugin install complete: ${pluginSummary.installed.length} installed, ` +
|
|
29
|
+
`${pluginSummary.skipped.length} skipped, ${pluginSummary.failed.length} failed`, {
|
|
30
|
+
installed: pluginSummary.installed,
|
|
31
|
+
skipped: pluginSummary.skipped,
|
|
32
|
+
failed: pluginSummary.failed,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// One restart per invocation, no matter how many things changed.
|
|
36
|
+
const anyChanged = runtimeChanged || (pluginSummary?.installed.length ?? 0) > 0;
|
|
37
|
+
if (!anyChanged)
|
|
38
|
+
return { runtimeChanged, pluginSummary, gatewayRestarted: false };
|
|
39
|
+
try {
|
|
40
|
+
await restartGateway();
|
|
41
|
+
push('gateway_restarted', 'info', 'Gateway restarted after openclaw stack update');
|
|
42
|
+
return { runtimeChanged, pluginSummary, gatewayRestarted: true };
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
const error = toErrorMessage(err);
|
|
46
|
+
push('gateway_restart_failed', 'warn', `Gateway restart after openclaw stack update failed: ${error}`, { error });
|
|
47
|
+
return { runtimeChanged, pluginSummary, gatewayRestarted: false, restartError: error };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=openclaw-stack-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-stack-update.js","sourceRoot":"","sources":["../../src/utils/openclaw-stack-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execAsync } from './exec.js';
|
|
2
2
|
import { toErrorMessage } from './response.js';
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
// Shared package-install module — used by:
|
|
@@ -30,16 +30,6 @@ export function buildInstallCommand(manager, pkg) {
|
|
|
30
30
|
return `pip install ${pkg}`;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
function execPackage(cmd, timeoutMs) {
|
|
34
|
-
return new Promise((resolve, reject) => {
|
|
35
|
-
exec(cmd, { timeout: timeoutMs }, (error) => {
|
|
36
|
-
if (error)
|
|
37
|
-
reject(error);
|
|
38
|
-
else
|
|
39
|
-
resolve();
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
33
|
/**
|
|
44
34
|
* Install a single package via the named manager. Validates the package
|
|
45
35
|
* name against the allowlist regex first; never reaches the shell with an
|
|
@@ -50,7 +40,9 @@ export async function installOnePackage(manager, pkg, timeoutMs = INSTALL_TIMEOU
|
|
|
50
40
|
return { ok: false, error: 'Invalid package name: contains disallowed characters' };
|
|
51
41
|
}
|
|
52
42
|
try {
|
|
53
|
-
|
|
43
|
+
// execAsync, not a local wrapper: its 16MB maxBuffer is what keeps a
|
|
44
|
+
// chatty `npm install -g` from failing with ERR_CHILD_PROCESS_STDOUT_MAXBUFFER.
|
|
45
|
+
await execAsync(buildInstallCommand(manager, pkg), timeoutMs);
|
|
54
46
|
return { ok: true };
|
|
55
47
|
}
|
|
56
48
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-install.js","sourceRoot":"","sources":["../../src/utils/package-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"package-install.js","sourceRoot":"","sources":["../../src/utils/package-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,8EAA8E;AAC9E,2CAA2C;AAC3C,oDAAoD;AACpD,gDAAgD;AAChD,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,sEAAsE;AACtE,iEAAiE;AACjE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,CAAC,kBAAkB;AAE7D;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,iCAAiC,CAAC;AAI/D,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAuB,EAAE,GAAW;IACtE,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK;YACR,OAAO,sBAAsB,GAAG,EAAE,CAAC;QACrC,KAAK,KAAK;YACR,OAAO,kBAAkB,GAAG,EAAE,CAAC;QACjC,KAAK,KAAK;YACR,OAAO,eAAe,GAAG,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAOD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,GAAW,EACX,YAAoB,kBAAkB;IAEtC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sDAAsD,EAAE,CAAC;IACtF,CAAC;IACD,IAAI,CAAC;QACH,qEAAqE;QACrE,gFAAgF;QAChF,MAAM,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version from the package's own package.json.
|
|
3
|
+
*
|
|
4
|
+
* Read via `createRequire` rather than a JSON import so the compiled output
|
|
5
|
+
* stays plain ESM. The relative depth (`../..`) is correct from both
|
|
6
|
+
* `dist/utils/` and `src/utils/` — three call sites used to hand-roll this with
|
|
7
|
+
* three different depths, which is exactly the kind of thing that breaks
|
|
8
|
+
* silently when a file moves.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getPackageVersion(): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
const _require = createRequire(import.meta.url);
|
|
5
|
+
/**
|
|
6
|
+
* Version from the package's own package.json.
|
|
7
|
+
*
|
|
8
|
+
* Read via `createRequire` rather than a JSON import so the compiled output
|
|
9
|
+
* stays plain ESM. The relative depth (`../..`) is correct from both
|
|
10
|
+
* `dist/utils/` and `src/utils/` — three call sites used to hand-roll this with
|
|
11
|
+
* three different depths, which is exactly the kind of thing that breaks
|
|
12
|
+
* silently when a file moves.
|
|
13
|
+
*/
|
|
14
|
+
export function getPackageVersion() {
|
|
15
|
+
const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '../../package.json');
|
|
16
|
+
return _require(pkgPath).version;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=package-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../src/utils/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;IACpF,OAAQ,QAAQ,CAAC,OAAO,CAAyB,CAAC,OAAO,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Split a CLI token like `@scope/pkg@1.2.3` into `{ id, version }`, or null if
|
|
3
|
+
* it isn't one. Splits at the LAST `@` so scoped npm names survive, and rejects
|
|
4
|
+
* a leading `@` so a bare `@scope/name` (no version) doesn't parse as
|
|
5
|
+
* `{ id: '', version: 'scope/name' }`.
|
|
6
|
+
*
|
|
7
|
+
* Shared by the `plugin-update` and `agent-update` CLIs, which each had their
|
|
8
|
+
* own byte-identical copy. Kept out of openclaw-ops.ts on purpose: this is a
|
|
9
|
+
* pure parser, and openclaw-ops is the module every test mocks wholesale
|
|
10
|
+
* because it shells out.
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseIdAtVersion(token: string): {
|
|
13
|
+
id: string;
|
|
14
|
+
version: string;
|
|
15
|
+
} | null;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Split a CLI token like `@scope/pkg@1.2.3` into `{ id, version }`, or null if
|
|
3
|
+
* it isn't one. Splits at the LAST `@` so scoped npm names survive, and rejects
|
|
4
|
+
* a leading `@` so a bare `@scope/name` (no version) doesn't parse as
|
|
5
|
+
* `{ id: '', version: 'scope/name' }`.
|
|
6
|
+
*
|
|
7
|
+
* Shared by the `plugin-update` and `agent-update` CLIs, which each had their
|
|
8
|
+
* own byte-identical copy. Kept out of openclaw-ops.ts on purpose: this is a
|
|
9
|
+
* pure parser, and openclaw-ops is the module every test mocks wholesale
|
|
10
|
+
* because it shells out.
|
|
11
|
+
*/
|
|
12
|
+
export function parseIdAtVersion(token) {
|
|
13
|
+
const at = token.lastIndexOf('@');
|
|
14
|
+
if (at <= 0)
|
|
15
|
+
return null;
|
|
16
|
+
const id = token.slice(0, at).trim();
|
|
17
|
+
const version = token.slice(at + 1).trim();
|
|
18
|
+
if (!id || !version)
|
|
19
|
+
return null;
|
|
20
|
+
return { id, version };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=parse-id-at-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-id-at-version.js","sourceRoot":"","sources":["../../src/utils/parse-id-at-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/utils/response.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAqB,EAAE,GAAY;IACjE,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5F,CAAC"}
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,kFAAkF;IAClF,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAqB,EAAE,GAAY;IACjE,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5F,CAAC"}
|