@openclaw/acpx 2026.9.2 → 2026.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{config-v8M2tNu6.js → config-D2FTk0K7.js} +15 -51
- package/dist/doctor-contract-api.js +3 -3
- package/dist/index.js +2 -2
- package/dist/{pi-session-catalog-runtime-C0HodUWT.js → pi-session-catalog-runtime-BIieInfo.js} +2 -1
- package/dist/{process-lease-Cwvj7WGe.js → process-lease-B83BGiLj.js} +33 -30
- package/dist/{register.runtime-Ba7FPMGu.js → register.runtime-CksaMeEx.js} +1 -1
- package/dist/register.runtime.js +1 -1
- package/dist/{runtime-memQfUBo.js → runtime-CSNBTQIs.js} +140 -263
- package/dist/{service-COMUTA5A.js → service-BAf6nuci.js} +36 -94
- package/dist/{session-owner-migration-CistlQKM.js → session-owner-migration-D36AH9RC.js} +2 -2
- package/openclaw.plugin.json +8 -1
- package/package.json +5 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { n as createLazyAcpRuntimeProxy } from "./register.runtime-
|
|
2
|
+
import { n as createLazyAcpRuntimeProxy } from "./register.runtime-CksaMeEx.js";
|
|
3
3
|
import "./config-schema-DN_uAi4R.js";
|
|
4
|
-
import { _ as
|
|
5
|
-
import { n as resolveAcpxPluginRoot, r as
|
|
4
|
+
import { _ as splitCommandParts, c as openAcpxProcessLeaseStateStore, d as ACPX_GATEWAY_INSTANCE_KEY, f as ACPX_GATEWAY_INSTANCE_NAMESPACE, h as normalizeAcpxGatewayInstanceRecord, i as createAcpxProcessLeaseStore, l as readAcpxProcessLeaseIdentity, n as OPENCLAW_ACPX_LEASE_ID_ARG, r as OPENCLAW_GATEWAY_INSTANCE_ID_ARG } from "./process-lease-B83BGiLj.js";
|
|
5
|
+
import { i as toAcpMcpServers, n as resolveAcpxPluginRoot, r as resolveOpenClawRoot, t as resolveAcpxPluginConfig } from "./config-D2FTk0K7.js";
|
|
6
6
|
import { createRequire } from "node:module";
|
|
7
7
|
import { finiteSecondsToTimerSafeMilliseconds } from "openclaw/plugin-sdk/number-runtime";
|
|
8
8
|
import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
|
|
@@ -12,8 +12,9 @@ import os from "node:os";
|
|
|
12
12
|
import path from "node:path";
|
|
13
13
|
import fs$1 from "node:fs/promises";
|
|
14
14
|
import { randomUUID } from "node:crypto";
|
|
15
|
-
import {
|
|
15
|
+
import { escapeRegExp } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
16
16
|
import { inspect } from "node:util";
|
|
17
|
+
import { isPidAlive, runExec } from "openclaw/plugin-sdk/process-runtime";
|
|
17
18
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
18
19
|
import { readJsonFileWithFallback } from "openclaw/plugin-sdk/json-store";
|
|
19
20
|
import { parse, stringify } from "smol-toml";
|
|
@@ -68,16 +69,9 @@ function resolvePackageRoot(packageName) {
|
|
|
68
69
|
return;
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
|
-
function resolveOpenClawInstallRoot(pluginRoot) {
|
|
72
|
-
if (path.basename(pluginRoot) === "acpx" && path.basename(path.dirname(pluginRoot)) === "extensions") {
|
|
73
|
-
const parent = path.dirname(path.dirname(pluginRoot));
|
|
74
|
-
return path.basename(parent) === "dist" ? path.dirname(parent) : parent;
|
|
75
|
-
}
|
|
76
|
-
return path.resolve(pluginRoot, "..");
|
|
77
|
-
}
|
|
78
72
|
function resolveOwnedAcpPackageRootCandidates(packageName) {
|
|
79
73
|
const pluginRoot = resolveAcpxPluginRoot(import.meta.url);
|
|
80
|
-
const openClawRoot =
|
|
74
|
+
const openClawRoot = resolveOpenClawRoot(pluginRoot);
|
|
81
75
|
return [
|
|
82
76
|
resolvePackageRoot(packageName),
|
|
83
77
|
path.join(pluginRoot, "node_modules", packageName),
|
|
@@ -91,15 +85,9 @@ function commandBelongsToResolvedAcpPackage(command) {
|
|
|
91
85
|
function commandMentionsGeneratedWrapper(command) {
|
|
92
86
|
return Array.from(GENERATED_WRAPPER_BASENAMES).some((basename) => command.includes(basename));
|
|
93
87
|
}
|
|
94
|
-
function commandWrapperBelongsToRoot(command, wrapperRoot) {
|
|
95
|
-
if (!wrapperRoot) return true;
|
|
96
|
-
const normalizedCommand = normalizePathLike(command);
|
|
97
|
-
const normalizedRoot = normalizePathLike(wrapperRoot).replace(/\/+$/, "");
|
|
98
|
-
return Array.from(GENERATED_WRAPPER_BASENAMES).some((basename) => normalizedCommand.includes(`${normalizedRoot}/${basename}`));
|
|
99
|
-
}
|
|
100
88
|
function commandContainsExactWrapperPath(command, wrapperPath) {
|
|
101
89
|
const expectedPath = normalizePathLike(wrapperPath);
|
|
102
|
-
return
|
|
90
|
+
return new RegExp(`(?:^|[\\s"'])${escapeRegExp(expectedPath)}(?=$|[\\s"'])`).test(normalizePathLike(command));
|
|
103
91
|
}
|
|
104
92
|
function wrapperPathBelongsToRoot(wrapperPath, wrapperRoot) {
|
|
105
93
|
const normalizedPath = normalizePathLike(wrapperPath);
|
|
@@ -108,24 +96,18 @@ function wrapperPathBelongsToRoot(wrapperPath, wrapperRoot) {
|
|
|
108
96
|
}
|
|
109
97
|
/** Check whether a command references an OpenClaw-generated ACPX wrapper path. */
|
|
110
98
|
function isOpenClawLeaseAwareAcpxProcessCommand(params) {
|
|
111
|
-
const command = params.command
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return commandMentionsGeneratedWrapper(normalized) && commandWrapperBelongsToRoot(normalized, params.wrapperRoot);
|
|
99
|
+
const command = normalizePathLike(Array.isArray(params.command) ? params.command.join(" ") : params.command ?? "");
|
|
100
|
+
const root = params.wrapperRoot ? `${normalizePathLike(params.wrapperRoot).replace(/\/+$/, "")}/` : "";
|
|
101
|
+
return Array.from(GENERATED_WRAPPER_BASENAMES).some((basename) => command.includes(`${root}${basename}`));
|
|
115
102
|
}
|
|
116
103
|
function commandsReferToSameRootCommand(liveCommand, storedCommand) {
|
|
117
104
|
if (!storedCommand?.trim()) return true;
|
|
118
105
|
return normalizePathLike(liveCommand).trim() === normalizePathLike(storedCommand).trim();
|
|
119
106
|
}
|
|
120
|
-
function commandOptionEquals(parts, option, expected) {
|
|
121
|
-
if (!expected) return true;
|
|
122
|
-
const index = parts.indexOf(option);
|
|
123
|
-
return index >= 0 && parts[index + 1] === expected;
|
|
124
|
-
}
|
|
125
107
|
function liveCommandMatchesLeaseIdentity(params) {
|
|
126
108
|
if (!params.expectedLeaseId && !params.expectedGatewayInstanceId) return true;
|
|
127
|
-
const
|
|
128
|
-
return
|
|
109
|
+
const identity = readAcpxProcessLeaseIdentity(params.command);
|
|
110
|
+
return (!params.expectedLeaseId || identity?.leaseId === params.expectedLeaseId) && (!params.expectedGatewayInstanceId || identity?.gatewayInstanceId === params.expectedGatewayInstanceId);
|
|
129
111
|
}
|
|
130
112
|
/** Check whether a command is owned by OpenClaw ACPX runtime packages or wrappers. */
|
|
131
113
|
function isOpenClawOwnedAcpxProcessCommand(params) {
|
|
@@ -237,25 +219,10 @@ async function cleanupOpenClawOwnedAcpxProcessTree(params) {
|
|
|
237
219
|
const rootCommand = listedTree[0]?.command ?? params.rootCommand;
|
|
238
220
|
const liveCommandWasGeneratedWrapper = commandMentionsGeneratedWrapper(normalizePathLike(rootCommand ?? ""));
|
|
239
221
|
const storedCommandWasGeneratedWrapper = commandMentionsGeneratedWrapper(normalizePathLike(params.rootCommand ?? ""));
|
|
240
|
-
if (!liveCommandWasGeneratedWrapper && storedCommandWasGeneratedWrapper)
|
|
241
|
-
inspectedPids: listedTree.map((processInfo) => processInfo.pid),
|
|
242
|
-
terminatedPids: [],
|
|
243
|
-
skippedReason: "not-openclaw-owned"
|
|
244
|
-
};
|
|
245
|
-
if (!liveCommandWasGeneratedWrapper && !commandsReferToSameRootCommand(rootCommand ?? "", params.rootCommand)) return {
|
|
246
|
-
inspectedPids: listedTree.map((processInfo) => processInfo.pid),
|
|
247
|
-
terminatedPids: [],
|
|
248
|
-
skippedReason: "not-openclaw-owned"
|
|
249
|
-
};
|
|
250
|
-
if (!isOpenClawOwnedAcpxProcessCommand({
|
|
222
|
+
if (!liveCommandWasGeneratedWrapper && (storedCommandWasGeneratedWrapper || !commandsReferToSameRootCommand(rootCommand ?? "", params.rootCommand)) || !isOpenClawOwnedAcpxProcessCommand({
|
|
251
223
|
command: rootCommand,
|
|
252
224
|
wrapperRoot: params.wrapperRoot
|
|
253
|
-
})
|
|
254
|
-
inspectedPids: listedTree.map((processInfo) => processInfo.pid),
|
|
255
|
-
terminatedPids: [],
|
|
256
|
-
skippedReason: "not-openclaw-owned"
|
|
257
|
-
};
|
|
258
|
-
if (!liveCommandMatchesLeaseIdentity({
|
|
225
|
+
}) || !liveCommandMatchesLeaseIdentity({
|
|
259
226
|
command: rootCommand,
|
|
260
227
|
expectedLeaseId: params.expectedLeaseId,
|
|
261
228
|
expectedGatewayInstanceId: params.expectedGatewayInstanceId
|
|
@@ -701,9 +668,6 @@ const DIAGNOSTIC_REDACTION_RULES = [
|
|
|
701
668
|
replacement: "[REDACTED_TELEGRAM_TOKEN]"
|
|
702
669
|
}
|
|
703
670
|
];
|
|
704
|
-
function renderDiagnosticRedactionRuleSpecs() {
|
|
705
|
-
return JSON.stringify(DIAGNOSTIC_REDACTION_RULES);
|
|
706
|
-
}
|
|
707
671
|
function buildAdapterWrapperScript(params) {
|
|
708
672
|
return `#!/usr/bin/env node
|
|
709
673
|
import { appendFileSync, existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
@@ -717,9 +681,9 @@ const stderrLogFileNamePrefix = ${params.stderrLogFileNamePrefix ? JSON.stringif
|
|
|
717
681
|
const stderrLogMaxChars = 256 * 1024;
|
|
718
682
|
|
|
719
683
|
const openClawWrapperArgs = new Set([
|
|
720
|
-
${
|
|
721
|
-
${
|
|
722
|
-
${(params.openClawWrapperArgs ?? []).map(
|
|
684
|
+
${JSON.stringify(OPENCLAW_ACPX_LEASE_ID_ARG)},
|
|
685
|
+
${JSON.stringify(OPENCLAW_GATEWAY_INSTANCE_ID_ARG)},
|
|
686
|
+
${(params.openClawWrapperArgs ?? []).map((arg) => JSON.stringify(arg)).join(",\n ")}
|
|
723
687
|
]);
|
|
724
688
|
|
|
725
689
|
function readOpenClawWrapperArg(args, name) {
|
|
@@ -756,13 +720,13 @@ function resolveStderrLogPath(args) {
|
|
|
756
720
|
return undefined;
|
|
757
721
|
}
|
|
758
722
|
const leaseId =
|
|
759
|
-
readOpenClawWrapperArg(args, ${
|
|
723
|
+
readOpenClawWrapperArg(args, ${JSON.stringify(OPENCLAW_ACPX_LEASE_ID_ARG)}) ||
|
|
760
724
|
"pid-" + process.pid;
|
|
761
725
|
const fileName = stderrLogFileNamePrefix + "." + safeDiagnosticFilePart(leaseId) + ".log";
|
|
762
726
|
return fileURLToPath(new URL("./" + fileName, import.meta.url));
|
|
763
727
|
}
|
|
764
728
|
|
|
765
|
-
const diagnosticRedactionRules = ${
|
|
729
|
+
const diagnosticRedactionRules = ${JSON.stringify(DIAGNOSTIC_REDACTION_RULES)}.map((rule) => [
|
|
766
730
|
new RegExp(rule.source, rule.flags),
|
|
767
731
|
rule.replacement,
|
|
768
732
|
]);
|
|
@@ -915,7 +879,7 @@ function resolveNpmCliPath() {
|
|
|
915
879
|
}
|
|
916
880
|
|
|
917
881
|
const npmCliPath = resolveNpmCliPath();
|
|
918
|
-
const installedBinPath = ${params.installedBinPath ?
|
|
882
|
+
const installedBinPath = ${params.installedBinPath ? JSON.stringify(params.installedBinPath) : "undefined"};
|
|
919
883
|
let defaultCommand;
|
|
920
884
|
let defaultArgs;
|
|
921
885
|
if (installedBinPath) {
|
|
@@ -1098,7 +1062,7 @@ function mergeCodexConfig(base, override) {
|
|
|
1098
1062
|
|
|
1099
1063
|
const openClawCodexConfigs = readOpenClawWrapperArgs(
|
|
1100
1064
|
rawConfiguredArgs,
|
|
1101
|
-
${
|
|
1065
|
+
${JSON.stringify(OPENCLAW_CODEX_CONFIG_ARG)},
|
|
1102
1066
|
);
|
|
1103
1067
|
if (openClawCodexConfigs.length > 0) {
|
|
1104
1068
|
let existingCodexConfig = {};
|
|
@@ -1164,23 +1128,13 @@ async function prepareIsolatedCodexHome(params) {
|
|
|
1164
1128
|
}), "utf8");
|
|
1165
1129
|
return codexHome;
|
|
1166
1130
|
}
|
|
1167
|
-
async function
|
|
1131
|
+
async function writeAdapterWrapper(baseDir, fileName, script) {
|
|
1132
|
+
await fs$1.mkdir(baseDir, { recursive: true });
|
|
1133
|
+
const wrapperPath = path.join(baseDir, fileName);
|
|
1134
|
+
await fs$1.writeFile(wrapperPath, script, { encoding: "utf8" });
|
|
1168
1135
|
try {
|
|
1169
1136
|
await fs$1.chmod(wrapperPath, 493);
|
|
1170
1137
|
} catch {}
|
|
1171
|
-
}
|
|
1172
|
-
async function writeCodexAcpWrapper(baseDir, installedBinPath) {
|
|
1173
|
-
await fs$1.mkdir(baseDir, { recursive: true });
|
|
1174
|
-
const wrapperPath = path.join(baseDir, "codex-acp-wrapper.mjs");
|
|
1175
|
-
await fs$1.writeFile(wrapperPath, buildCodexAcpWrapperScript(installedBinPath), { encoding: "utf8" });
|
|
1176
|
-
await makeGeneratedWrapperExecutableIfPossible(wrapperPath);
|
|
1177
|
-
return wrapperPath;
|
|
1178
|
-
}
|
|
1179
|
-
async function writeClaudeAcpWrapper(baseDir, installedBinPath) {
|
|
1180
|
-
await fs$1.mkdir(baseDir, { recursive: true });
|
|
1181
|
-
const wrapperPath = path.join(baseDir, "claude-agent-acp-wrapper.mjs");
|
|
1182
|
-
await fs$1.writeFile(wrapperPath, buildClaudeAcpWrapperScript(installedBinPath), { encoding: "utf8" });
|
|
1183
|
-
await makeGeneratedWrapperExecutableIfPossible(wrapperPath);
|
|
1184
1138
|
return wrapperPath;
|
|
1185
1139
|
}
|
|
1186
1140
|
function buildWrapperCommand(wrapperPath, args = []) {
|
|
@@ -1188,7 +1142,7 @@ function buildWrapperCommand(wrapperPath, args = []) {
|
|
|
1188
1142
|
process.execPath,
|
|
1189
1143
|
wrapperPath,
|
|
1190
1144
|
...args
|
|
1191
|
-
]
|
|
1145
|
+
];
|
|
1192
1146
|
}
|
|
1193
1147
|
function isAcpPackageSpec(value, packageName) {
|
|
1194
1148
|
const escapedPackageName = packageName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -1203,9 +1157,7 @@ function isPackageRunnerCommand(value) {
|
|
|
1203
1157
|
return /^(?:npx|npm|pnpm|bunx)(?:\.cmd|\.exe)?$/i.test(basename(value));
|
|
1204
1158
|
}
|
|
1205
1159
|
function extractConfiguredAdapterArgs(params) {
|
|
1206
|
-
const
|
|
1207
|
-
if (!trimmedConfiguredCommand) return [];
|
|
1208
|
-
const parts = splitCommandParts(trimmedConfiguredCommand);
|
|
1160
|
+
const parts = splitCommandParts(params.configuredCommand ?? []);
|
|
1209
1161
|
if (!parts.length) return [];
|
|
1210
1162
|
const packageIndex = parts.findIndex((part) => isAcpPackageSpec(part, params.packageName));
|
|
1211
1163
|
if (packageIndex >= 0) {
|
|
@@ -1291,11 +1243,6 @@ function resolveCodexAdapterLaunch(configuredCommand) {
|
|
|
1291
1243
|
if (!maintainedAdapterArgs) return;
|
|
1292
1244
|
return { args: maintainedAdapterArgs };
|
|
1293
1245
|
}
|
|
1294
|
-
function buildCodexAcpWrapperCommand(wrapperPath, configuredCommand) {
|
|
1295
|
-
const launch = resolveCodexAdapterLaunch(configuredCommand);
|
|
1296
|
-
if (launch) return buildWrapperCommand(wrapperPath, launch.args);
|
|
1297
|
-
return buildWrapperCommand(wrapperPath, [RUN_CONFIGURED_COMMAND_SENTINEL, ...splitCommandParts(configuredCommand?.trim() ?? "")]);
|
|
1298
|
-
}
|
|
1299
1246
|
async function persistMigratedCodexMcpConfig(params) {
|
|
1300
1247
|
const mcpServers = params.migratedConfig?.mcp_servers;
|
|
1301
1248
|
if (!isRecord(mcpServers)) return;
|
|
@@ -1310,7 +1257,7 @@ function buildClaudeAcpWrapperCommand(wrapperPath, configuredCommand) {
|
|
|
1310
1257
|
binName: CLAUDE_ACP_BIN
|
|
1311
1258
|
});
|
|
1312
1259
|
if (configuredAdapterArgs) return buildWrapperCommand(wrapperPath, configuredAdapterArgs);
|
|
1313
|
-
return configuredCommand
|
|
1260
|
+
return configuredCommand ?? buildWrapperCommand(wrapperPath);
|
|
1314
1261
|
}
|
|
1315
1262
|
/** Prepare ACPX agent commands and isolated auth homes for Codex/Claude adapters. */
|
|
1316
1263
|
async function prepareAcpxCodexAuthConfig(params) {
|
|
@@ -1328,13 +1275,13 @@ async function prepareAcpxCodexAuthConfig(params) {
|
|
|
1328
1275
|
});
|
|
1329
1276
|
const installedCodexBinPath = await (params.resolveInstalledCodexAcpBinPath ?? resolveInstalledCodexAcpBinPath)();
|
|
1330
1277
|
const installedClaudeBinPath = await (params.resolveInstalledClaudeAcpBinPath ?? resolveInstalledClaudeAcpBinPath)();
|
|
1331
|
-
const wrapperPath = await
|
|
1332
|
-
const claudeWrapperPath = await
|
|
1278
|
+
const wrapperPath = await writeAdapterWrapper(codexBaseDir, "codex-acp-wrapper.mjs", buildCodexAcpWrapperScript(installedCodexBinPath));
|
|
1279
|
+
const claudeWrapperPath = await writeAdapterWrapper(codexBaseDir, "claude-agent-acp-wrapper.mjs", buildClaudeAcpWrapperScript(installedClaudeBinPath));
|
|
1333
1280
|
return {
|
|
1334
1281
|
...params.pluginConfig,
|
|
1335
1282
|
agents: {
|
|
1336
1283
|
...params.pluginConfig.agents,
|
|
1337
|
-
codex:
|
|
1284
|
+
codex: buildWrapperCommand(wrapperPath, codexLaunch?.args ?? [RUN_CONFIGURED_COMMAND_SENTINEL, ...splitCommandParts(configuredCodexCommand ?? [])]),
|
|
1338
1285
|
claude: buildClaudeAcpWrapperCommand(claudeWrapperPath, configuredClaudeCommand)
|
|
1339
1286
|
}
|
|
1340
1287
|
};
|
|
@@ -1351,7 +1298,7 @@ var service_exports = /* @__PURE__ */ __exportAll({
|
|
|
1351
1298
|
});
|
|
1352
1299
|
const ENABLE_STARTUP_PROBE_ENV = "OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE";
|
|
1353
1300
|
const SKIP_RUNTIME_PROBE_ENV = "OPENCLAW_SKIP_ACPX_RUNTIME_PROBE";
|
|
1354
|
-
const loadRuntimeModule = createLazyRuntimeModule(() => import("./runtime-
|
|
1301
|
+
const loadRuntimeModule = createLazyRuntimeModule(() => import("./runtime-CSNBTQIs.js"));
|
|
1355
1302
|
/** Convert ACPX timeout seconds into timer-safe milliseconds. */
|
|
1356
1303
|
function resolveAcpxTimerTimeoutMs(timeoutSeconds) {
|
|
1357
1304
|
if (timeoutSeconds === void 0) return;
|
|
@@ -1396,9 +1343,6 @@ function createLazyDefaultRuntime(params) {
|
|
|
1396
1343
|
}
|
|
1397
1344
|
return {
|
|
1398
1345
|
...createLazyAcpRuntimeProxy(resolveRuntime),
|
|
1399
|
-
async probeAvailability() {
|
|
1400
|
-
await (await resolveRuntime()).probeAvailability();
|
|
1401
|
-
},
|
|
1402
1346
|
isHealthy() {
|
|
1403
1347
|
return runtime?.isHealthy() ?? false;
|
|
1404
1348
|
}
|
|
@@ -1592,20 +1536,18 @@ function createAcpxRuntimeService(params) {
|
|
|
1592
1536
|
lifecycleRevision += 1;
|
|
1593
1537
|
const currentRevision = lifecycleRevision;
|
|
1594
1538
|
try {
|
|
1595
|
-
await measureAcpxStartup(ctx, "probe.availability", () => withStartupProbeTimeout({
|
|
1596
|
-
promise: startedRuntime.
|
|
1539
|
+
const doctorReport = await measureAcpxStartup(ctx, "probe.availability", () => withStartupProbeTimeout({
|
|
1540
|
+
promise: startedRuntime.doctor(),
|
|
1597
1541
|
timeoutSeconds: pluginConfig.timeoutSeconds ?? 120
|
|
1598
1542
|
}));
|
|
1599
1543
|
if (currentRevision !== lifecycleRevision) return;
|
|
1600
|
-
if (
|
|
1544
|
+
if (doctorReport.ok) {
|
|
1601
1545
|
detailAcpxStartup(ctx, "probe.result", [["healthyCount", 1]]);
|
|
1602
1546
|
ctx.logger.info("embedded acpx runtime backend ready");
|
|
1603
1547
|
return;
|
|
1604
1548
|
}
|
|
1605
|
-
const doctorReport = await measureAcpxStartup(ctx, "probe.doctor", () => startedRuntime.doctor());
|
|
1606
|
-
if (currentRevision !== lifecycleRevision) return;
|
|
1607
1549
|
detailAcpxStartup(ctx, "probe.result", [["healthyCount", 0]]);
|
|
1608
|
-
ctx.logger.warn(`embedded acpx runtime backend probe failed: ${
|
|
1550
|
+
ctx.logger.warn(`embedded acpx runtime backend probe failed: ${formatDoctorFailureMessage(doctorReport)}`);
|
|
1609
1551
|
} catch (err) {
|
|
1610
1552
|
if (currentRevision !== lifecycleRevision) return;
|
|
1611
1553
|
detailAcpxStartup(ctx, "probe.result", [["healthyCount", 0]]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as resolveAcpxPluginConfig } from "./config-
|
|
1
|
+
import { a as hashAcpxProcessCommand, c as openAcpxProcessLeaseStateStore, l as readAcpxProcessLeaseIdentity, o as normalizeAcpxProcessLease } from "./process-lease-B83BGiLj.js";
|
|
2
|
+
import { t as resolveAcpxPluginConfig } from "./config-D2FTk0K7.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
5
5
|
import { archiveLegacyStateSource, asObjectRecord } from "openclaw/plugin-sdk/runtime-doctor-migrations";
|
package/openclaw.plugin.json
CHANGED
|
@@ -14,7 +14,14 @@
|
|
|
14
14
|
],
|
|
15
15
|
"doctorContract": {
|
|
16
16
|
"configRepair": true,
|
|
17
|
-
"stateMigrations":
|
|
17
|
+
"stateMigrations": [
|
|
18
|
+
{ "id": "acpx-runtime-state-to-plugin-state" },
|
|
19
|
+
{
|
|
20
|
+
"id": "acpx-session-owner-resources",
|
|
21
|
+
"doctorOnly": true,
|
|
22
|
+
"phase": "after-session-repair"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
18
25
|
},
|
|
19
26
|
"activation": {
|
|
20
27
|
"onStartup": true
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/acpx",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.3",
|
|
4
4
|
"description": "OpenClaw ACP runtime backend with plugin-owned session and transport management.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@agentclientprotocol/claude-agent-acp": "0.70.0",
|
|
12
12
|
"@agentclientprotocol/codex-acp": "1.6.2",
|
|
13
|
-
"acpx": "0.13.
|
|
13
|
+
"acpx": "0.13.2",
|
|
14
14
|
"smol-toml": "1.8.0",
|
|
15
15
|
"zod": "4.4.3"
|
|
16
16
|
},
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
45
|
"compat": {
|
|
46
|
-
"pluginApi": ">=2026.9.
|
|
46
|
+
"pluginApi": ">=2026.9.3"
|
|
47
47
|
},
|
|
48
48
|
"build": {
|
|
49
|
-
"openclawVersion": "2026.9.
|
|
49
|
+
"openclawVersion": "2026.9.3",
|
|
50
50
|
"staticAssets": [
|
|
51
51
|
{
|
|
52
52
|
"source": "./src/runtime-internals/mcp-proxy.mjs",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"skills/**"
|
|
75
75
|
],
|
|
76
76
|
"peerDependencies": {
|
|
77
|
-
"openclaw": ">=2026.9.
|
|
77
|
+
"openclaw": ">=2026.9.3"
|
|
78
78
|
},
|
|
79
79
|
"peerDependenciesMeta": {
|
|
80
80
|
"openclaw": {
|