@openclaw/acpx 2026.7.2-beta.1 → 2026.7.2-beta.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/dist/index.js +31 -16
- package/dist/{process-reaper-B29BzBk4.js → process-reaper-CoGRyMJ_.js} +26 -4
- package/dist/{register.runtime-DBqbPx5P.js → register.runtime-CysfMsSr.js} +1 -1
- package/dist/register.runtime.js +1 -1
- package/dist/{runtime-D_fW1HnP.js → runtime-BEOGc4Ik.js} +33 -30
- package/dist/{service-Dm8hpy-C.js → service-DJchyiuU.js} +173 -21
- package/npm-shrinkwrap.json +299 -58
- package/package.json +6 -5
- package/skills/acp-router/SKILL.md +1 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { t as createAcpxRuntimeService } from "./register.runtime-
|
|
1
|
+
import { t as createAcpxRuntimeService } from "./register.runtime-CysfMsSr.js";
|
|
2
2
|
import "./config-schema-lrk5nlcV.js";
|
|
3
3
|
import { tryDispatchAcpReplyHook } from "openclaw/plugin-sdk/acp-runtime-backend";
|
|
4
4
|
import { finiteSecondsToTimerSafeMilliseconds } from "openclaw/plugin-sdk/number-runtime";
|
|
5
5
|
import process$1 from "node:process";
|
|
6
|
-
import { decodeNodePtyResumeParams,
|
|
6
|
+
import { decodeNodePtyResumeParams, resolveNodeHostExecutable, runNodePtyCommand } from "openclaw/plugin-sdk/node-host";
|
|
7
7
|
import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
8
8
|
import { createReadStream, readFileSync, statSync } from "node:fs";
|
|
9
9
|
import fs$1 from "node:fs/promises";
|
|
@@ -389,7 +389,7 @@ async function readPiSessionById(threadId, env) {
|
|
|
389
389
|
const LOCAL_HOST_ID$1 = "gateway";
|
|
390
390
|
const DEFAULT_PAGE_LIMIT = 20;
|
|
391
391
|
const MAX_PAGE_LIMIT$1 = 100;
|
|
392
|
-
const MAX_SEARCH_LENGTH
|
|
392
|
+
const MAX_SEARCH_LENGTH = 500;
|
|
393
393
|
const MAX_CURSOR_LENGTH$1 = 128;
|
|
394
394
|
const MAX_TRANSCRIPT_ITEM_BYTES = 512 * 1024;
|
|
395
395
|
const MAX_TRANSCRIPT_PAGE_BYTES = 20 * 1024 * 1024;
|
|
@@ -483,7 +483,7 @@ function parseListParams(value) {
|
|
|
483
483
|
"cursor"
|
|
484
484
|
].includes(key));
|
|
485
485
|
if (unknown) throw new Error(`unknown Pi session list parameter: ${unknown}`);
|
|
486
|
-
const searchTerm = optionalPiString(value.searchTerm, MAX_SEARCH_LENGTH
|
|
486
|
+
const searchTerm = optionalPiString(value.searchTerm, MAX_SEARCH_LENGTH);
|
|
487
487
|
if (value.searchTerm !== void 0 && !searchTerm) throw new Error("searchTerm is invalid");
|
|
488
488
|
const cursor = optionalPiString(value.cursor, MAX_CURSOR_LENGTH$1);
|
|
489
489
|
if (value.cursor !== void 0 && !cursor) throw new Error("cursor is invalid");
|
|
@@ -693,7 +693,6 @@ const LOCAL_HOST_ID = "gateway";
|
|
|
693
693
|
const MAX_PAGE_LIMIT = 100;
|
|
694
694
|
const MAX_HOSTS = 100;
|
|
695
695
|
const MAX_CURSOR_LENGTH = 128;
|
|
696
|
-
const MAX_SEARCH_LENGTH = 500;
|
|
697
696
|
const NODE_TIMEOUT_MS = 2e4;
|
|
698
697
|
const SESSION_ID_PATTERN = /^(?!-)[A-Za-z0-9._:-]{1,256}$/u;
|
|
699
698
|
const TRANSCRIPT_ITEM_TYPES = /* @__PURE__ */ new Set([
|
|
@@ -762,15 +761,23 @@ function createPiSessionNodeHostCommands() {
|
|
|
762
761
|
isAvailable: ({ config, env }) => storeAvailable({
|
|
763
762
|
config,
|
|
764
763
|
env
|
|
765
|
-
}) && Boolean(
|
|
764
|
+
}) && Boolean(resolveNodeHostExecutable("pi", {
|
|
765
|
+
env,
|
|
766
|
+
pathEnv: env.PATH ?? env.Path ?? "",
|
|
767
|
+
strategy: "direct"
|
|
768
|
+
})),
|
|
766
769
|
handle: async (paramsJSON, io) => {
|
|
767
770
|
if (!io) throw new Error("Pi terminal command requires duplex transport");
|
|
768
771
|
const params = decodeNodePtyResumeParams(paramsJSON, validatePiThreadId);
|
|
769
772
|
const record = await requireLocalPiSession(params.threadId);
|
|
770
|
-
const
|
|
771
|
-
|
|
773
|
+
const resolution = resolveNodeHostExecutable("pi", {
|
|
774
|
+
env: process$1.env,
|
|
775
|
+
pathEnv: process$1.env.PATH ?? process$1.env.Path ?? "",
|
|
776
|
+
strategy: "direct"
|
|
777
|
+
});
|
|
778
|
+
if (!resolution) throw new Error("Pi CLI is unavailable");
|
|
772
779
|
return JSON.stringify(await runNodePtyCommand({
|
|
773
|
-
file,
|
|
780
|
+
file: resolution.executable,
|
|
774
781
|
args: ["--session", params.threadId],
|
|
775
782
|
cwd: record.cwd,
|
|
776
783
|
cols: params.cols,
|
|
@@ -828,7 +835,7 @@ async function listPiNodeHost(runtime, query, node) {
|
|
|
828
835
|
command: PI_SESSIONS_LIST_COMMAND,
|
|
829
836
|
params: {
|
|
830
837
|
...query.limitPerHost ? { limit: query.limitPerHost } : {},
|
|
831
|
-
...query.search
|
|
838
|
+
...query.search ? { searchTerm: query.search } : {},
|
|
832
839
|
...query.cursors?.[hostId] ? { cursor: query.cursors[hostId] } : {}
|
|
833
840
|
},
|
|
834
841
|
timeoutMs: NODE_TIMEOUT_MS,
|
|
@@ -874,7 +881,6 @@ function parseNodeTranscriptPage(value, threadId) {
|
|
|
874
881
|
}
|
|
875
882
|
async function listPiHosts(runtime, query) {
|
|
876
883
|
const requested = query.hostIds ? new Set(query.hostIds) : void 0;
|
|
877
|
-
const searchTerm = query.search?.trim().slice(0, MAX_SEARCH_LENGTH) || void 0;
|
|
878
884
|
const hosts = [];
|
|
879
885
|
if ((!requested || requested.has(LOCAL_HOST_ID)) && piSessionStoreAvailable(process$1.env)) try {
|
|
880
886
|
hosts.push({
|
|
@@ -884,9 +890,13 @@ async function listPiHosts(runtime, query) {
|
|
|
884
890
|
connected: true,
|
|
885
891
|
...await listLocalPiSessionPage({
|
|
886
892
|
limit: query.limitPerHost,
|
|
887
|
-
...
|
|
893
|
+
...query.search ? { searchTerm: query.search } : {},
|
|
888
894
|
cursor: query.cursors?.[LOCAL_HOST_ID]
|
|
889
|
-
}).then((page) => setTerminalCapability(page,
|
|
895
|
+
}).then((page) => setTerminalCapability(page, resolveNodeHostExecutable("pi", {
|
|
896
|
+
env: process$1.env,
|
|
897
|
+
pathEnv: process$1.env.PATH ?? "",
|
|
898
|
+
strategy: "fallback"
|
|
899
|
+
}) !== void 0))
|
|
890
900
|
});
|
|
891
901
|
} catch {
|
|
892
902
|
hosts.push({
|
|
@@ -937,16 +947,21 @@ async function openPiTerminal(params) {
|
|
|
937
947
|
const title = `pi --session ${params.threadId.slice(0, 12)}…`;
|
|
938
948
|
if (params.hostId === LOCAL_HOST_ID) {
|
|
939
949
|
const record = await requireLocalPiSession(params.threadId);
|
|
940
|
-
const
|
|
941
|
-
|
|
950
|
+
const resolution = resolveNodeHostExecutable("pi", {
|
|
951
|
+
env: process$1.env,
|
|
952
|
+
pathEnv: process$1.env.PATH ?? "",
|
|
953
|
+
strategy: "fallback"
|
|
954
|
+
});
|
|
955
|
+
if (!resolution) throw new Error("Pi CLI is unavailable");
|
|
942
956
|
return {
|
|
943
957
|
kind: "local",
|
|
944
958
|
argv: [
|
|
945
|
-
executable,
|
|
959
|
+
resolution.executable,
|
|
946
960
|
"--session",
|
|
947
961
|
params.threadId
|
|
948
962
|
],
|
|
949
963
|
...record.cwd ? { cwd: record.cwd } : {},
|
|
964
|
+
...resolution.pathEnv ? { pathEnv: resolution.pathEnv } : {},
|
|
950
965
|
title
|
|
951
966
|
};
|
|
952
967
|
}
|
|
@@ -7,6 +7,12 @@ import fs from "node:fs";
|
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import { runExec } from "openclaw/plugin-sdk/process-runtime";
|
|
9
9
|
import { fileURLToPath } from "node:url";
|
|
10
|
+
//#region extensions/acpx/src/codex-adapter.ts
|
|
11
|
+
const CODEX_ACP_PACKAGE = "@agentclientprotocol/codex-acp";
|
|
12
|
+
const CODEX_ACP_BIN = "codex-acp";
|
|
13
|
+
const LEGACY_CODEX_ACP_PACKAGE = "@zed-industries/codex-acp";
|
|
14
|
+
const OPENCLAW_CODEX_CONFIG_ARG = "--openclaw-codex-config";
|
|
15
|
+
//#endregion
|
|
10
16
|
//#region extensions/acpx/src/command-line.ts
|
|
11
17
|
/**
|
|
12
18
|
* Small shell-command helpers for ACPX-launched processes. Splitting supports
|
|
@@ -248,8 +254,10 @@ function resolveAcpxPluginConfig(params) {
|
|
|
248
254
|
const requireFromHere = createRequire(import.meta.url);
|
|
249
255
|
const GENERATED_WRAPPER_BASENAMES = /* @__PURE__ */ new Set(["codex-acp-wrapper.mjs", "claude-agent-acp-wrapper.mjs"]);
|
|
250
256
|
const OPENCLAW_PLUGIN_DEPS_MARKER = "/plugin-runtime-deps/";
|
|
257
|
+
const ACPX_PROCESS_LIST_TIMEOUT_MS = 2e3;
|
|
251
258
|
const OWNED_ACP_PACKAGE_NAMES = [
|
|
252
|
-
|
|
259
|
+
CODEX_ACP_PACKAGE,
|
|
260
|
+
LEGACY_CODEX_ACP_PACKAGE,
|
|
253
261
|
"@zed-industries/codex-acp-darwin-arm64",
|
|
254
262
|
"@zed-industries/codex-acp-darwin-x64",
|
|
255
263
|
"@zed-industries/codex-acp-linux-arm64",
|
|
@@ -259,7 +267,20 @@ const OWNED_ACP_PACKAGE_NAMES = [
|
|
|
259
267
|
"@agentclientprotocol/claude-agent-acp",
|
|
260
268
|
"acpx"
|
|
261
269
|
];
|
|
262
|
-
const
|
|
270
|
+
const PLUGIN_DEPS_CODEX_PACKAGE_NAMES = [
|
|
271
|
+
"@openai/codex",
|
|
272
|
+
"@openai/codex-darwin-arm64",
|
|
273
|
+
"@openai/codex-darwin-x64",
|
|
274
|
+
"@openai/codex-linux-arm64",
|
|
275
|
+
"@openai/codex-linux-x64",
|
|
276
|
+
"@openai/codex-win32-arm64",
|
|
277
|
+
"@openai/codex-win32-x64"
|
|
278
|
+
];
|
|
279
|
+
const ACP_PACKAGE_MARKERS = [
|
|
280
|
+
...OWNED_ACP_PACKAGE_NAMES.map((packageName) => `/node_modules/${packageName}/`),
|
|
281
|
+
...PLUGIN_DEPS_CODEX_PACKAGE_NAMES.map((packageName) => `/node_modules/${packageName}/`),
|
|
282
|
+
"/acpx/dist/"
|
|
283
|
+
];
|
|
263
284
|
function normalizePathLike(value) {
|
|
264
285
|
return value.replaceAll("\\", "/");
|
|
265
286
|
}
|
|
@@ -354,7 +375,8 @@ async function listPlatformProcesses() {
|
|
|
354
375
|
if (process.platform === "win32") return [];
|
|
355
376
|
const { stdout } = await runExec("ps", ["-axo", "pid=,ppid=,command="], {
|
|
356
377
|
logOutput: false,
|
|
357
|
-
maxBuffer: 8 * 1024 * 1024
|
|
378
|
+
maxBuffer: 8 * 1024 * 1024,
|
|
379
|
+
timeoutMs: ACPX_PROCESS_LIST_TIMEOUT_MS
|
|
358
380
|
});
|
|
359
381
|
return parseProcessList(stdout);
|
|
360
382
|
}
|
|
@@ -488,4 +510,4 @@ async function reapStaleOpenClawOwnedAcpxOrphans(params) {
|
|
|
488
510
|
};
|
|
489
511
|
}
|
|
490
512
|
//#endregion
|
|
491
|
-
export { resolveAcpxPluginRoot as a, splitCommandParts as c, resolveAcpxPluginConfig as i, isOpenClawLeaseAwareAcpxProcessCommand as n, toAcpMcpServers as o, reapStaleOpenClawOwnedAcpxOrphans as r, quoteCommandPart as s, cleanupOpenClawOwnedAcpxProcessTree as t };
|
|
513
|
+
export { resolveAcpxPluginRoot as a, splitCommandParts as c, LEGACY_CODEX_ACP_PACKAGE as d, OPENCLAW_CODEX_CONFIG_ARG as f, resolveAcpxPluginConfig as i, CODEX_ACP_BIN as l, isOpenClawLeaseAwareAcpxProcessCommand as n, toAcpMcpServers as o, reapStaleOpenClawOwnedAcpxOrphans as r, quoteCommandPart as s, cleanupOpenClawOwnedAcpxProcessTree as t, CODEX_ACP_PACKAGE as u };
|
|
@@ -200,7 +200,7 @@ function createLazyAcpRuntimeProxy(resolveRuntime) {
|
|
|
200
200
|
* immediately, then imports the heavier service only when a session needs it.
|
|
201
201
|
*/
|
|
202
202
|
const ACPX_BACKEND_ID = "acpx";
|
|
203
|
-
const loadServiceModule = createLazyRuntimeModule(() => import("./service-
|
|
203
|
+
const loadServiceModule = createLazyRuntimeModule(() => import("./service-DJchyiuU.js"));
|
|
204
204
|
async function startRealService(state) {
|
|
205
205
|
if (state.realRuntime) return state.realRuntime;
|
|
206
206
|
if (!state.ctx) throw new Error("ACPX runtime service is not started");
|
package/dist/register.runtime.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as createAcpxRuntimeService } from "./register.runtime-
|
|
1
|
+
import { t as createAcpxRuntimeService } from "./register.runtime-CysfMsSr.js";
|
|
2
2
|
export { createAcpxRuntimeService };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { i as createAcpxProcessLeaseId, o as hashAcpxProcessCommand, u as withAcpxLeaseEnvironment } from "./process-lease-DiKkFj6F.js";
|
|
2
2
|
import { AcpRuntimeError } from "./runtime-api.js";
|
|
3
|
-
import { c as splitCommandParts, n as isOpenClawLeaseAwareAcpxProcessCommand, t as cleanupOpenClawOwnedAcpxProcessTree } from "./process-reaper-
|
|
3
|
+
import { c as splitCommandParts, f as OPENCLAW_CODEX_CONFIG_ARG, n as isOpenClawLeaseAwareAcpxProcessCommand, t as cleanupOpenClawOwnedAcpxProcessTree, u as CODEX_ACP_PACKAGE } from "./process-reaper-CoGRyMJ_.js";
|
|
4
4
|
import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
5
5
|
import { normalizeStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
6
|
import fs from "node:fs/promises";
|
|
@@ -14,6 +14,7 @@ import { sliceUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
|
14
14
|
* OpenClaw ACPX runtime adapter. It wraps the upstream acpx runtime with
|
|
15
15
|
* OpenClaw session metadata, lease tracking, model scoping, and cleanup policy.
|
|
16
16
|
*/
|
|
17
|
+
const ACPX_PLUGIN_TOOLS_MCP_SERVER_NAME = "openclaw-plugin-tools";
|
|
17
18
|
const ACPX_OPENCLAW_TOOLS_MCP_SERVER_NAME = "openclaw-tools";
|
|
18
19
|
const OPENCLAW_TOOLS_MCP_AGENT_SESSION_KEY_ENV = "OPENCLAW_TOOLS_MCP_AGENT_SESSION_KEY";
|
|
19
20
|
function withOpenClawManagedTurnTimeout(input) {
|
|
@@ -256,7 +257,7 @@ function isOpenClawBridgeCommand(command) {
|
|
|
256
257
|
}
|
|
257
258
|
function isCodexAcpCommand(command) {
|
|
258
259
|
return isAcpCommand(command, {
|
|
259
|
-
packageName:
|
|
260
|
+
packageName: CODEX_ACP_PACKAGE,
|
|
260
261
|
executableName: "codex-acp"
|
|
261
262
|
});
|
|
262
263
|
}
|
|
@@ -303,10 +304,6 @@ function normalizeCodexAcpModelOverride(rawModel, rawThinking) {
|
|
|
303
304
|
...reasoningEffort ? { reasoningEffort } : {}
|
|
304
305
|
};
|
|
305
306
|
}
|
|
306
|
-
function codexAcpSessionModelId(override) {
|
|
307
|
-
if (!override.model) return "";
|
|
308
|
-
return override.reasoningEffort ? `${override.model}/${override.reasoningEffort}` : override.model;
|
|
309
|
-
}
|
|
310
307
|
function normalizeClaudeAcpModelOverride(rawModel) {
|
|
311
308
|
const raw = rawModel?.trim();
|
|
312
309
|
if (!raw) return;
|
|
@@ -344,10 +341,12 @@ function quoteShellArg(value) {
|
|
|
344
341
|
return `'${value.replace(/'/g, "'\\''")}'`;
|
|
345
342
|
}
|
|
346
343
|
function appendCodexAcpConfigOverrides(command, override) {
|
|
347
|
-
const
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
344
|
+
const config = {
|
|
345
|
+
...override.model ? { model: override.model } : {},
|
|
346
|
+
...override.reasoningEffort ? { model_reasoning_effort: override.reasoningEffort } : {}
|
|
347
|
+
};
|
|
348
|
+
if (Object.keys(config).length === 0) return command;
|
|
349
|
+
return `${command} ${OPENCLAW_CODEX_CONFIG_ARG} ${quoteShellArg(JSON.stringify(config))}`;
|
|
351
350
|
}
|
|
352
351
|
function createModelScopedAgentRegistry(params) {
|
|
353
352
|
return {
|
|
@@ -375,12 +374,14 @@ function shouldUseDistinctBridgeDelegate(options) {
|
|
|
375
374
|
const { mcpServers } = options;
|
|
376
375
|
return Array.isArray(mcpServers) && mcpServers.length > 0;
|
|
377
376
|
}
|
|
378
|
-
function
|
|
377
|
+
function withManagedToolsMcpSessionEnv(params) {
|
|
379
378
|
const sessionKey = params.sessionKey.trim();
|
|
380
|
-
if (!params.
|
|
379
|
+
if (!params.pluginToolsEnabled && !params.openclawToolsEnabled || !sessionKey || !params.mcpServers?.length) return params.mcpServers;
|
|
381
380
|
let changed = false;
|
|
382
381
|
const nextServers = params.mcpServers.map((server) => {
|
|
383
|
-
|
|
382
|
+
const isManagedPluginTools = params.pluginToolsEnabled && server.name === ACPX_PLUGIN_TOOLS_MCP_SERVER_NAME;
|
|
383
|
+
const isManagedOpenClawTools = params.openclawToolsEnabled && server.name === ACPX_OPENCLAW_TOOLS_MCP_SERVER_NAME;
|
|
384
|
+
if (!isManagedPluginTools && !isManagedOpenClawTools || !("command" in server)) return server;
|
|
384
385
|
changed = true;
|
|
385
386
|
const env = [...server.env.filter((entry) => entry.name !== OPENCLAW_TOOLS_MCP_AGENT_SESSION_KEY_ENV), {
|
|
386
387
|
name: OPENCLAW_TOOLS_MCP_AGENT_SESSION_KEY_ENV,
|
|
@@ -397,14 +398,16 @@ function withOpenClawToolsMcpSessionEnv(params) {
|
|
|
397
398
|
var AcpxRuntime = class {
|
|
398
399
|
constructor(options, testOptions) {
|
|
399
400
|
this.codexAcpModelOverrideScope = new AsyncLocalStorage();
|
|
400
|
-
this.
|
|
401
|
+
this.managedToolsSessionDelegates = /* @__PURE__ */ new Map();
|
|
401
402
|
this.launchLeaseScope = new AsyncLocalStorage();
|
|
402
403
|
const { openclawProcessCleanup, ...delegateTestOptions } = testOptions ?? {};
|
|
403
404
|
this.processCleanupDeps = openclawProcessCleanup;
|
|
404
405
|
this.wrapperRoot = options.openclawWrapperRoot;
|
|
405
406
|
this.gatewayInstanceId = options.openclawGatewayInstanceId;
|
|
406
407
|
this.processLeaseStore = options.openclawProcessLeaseStore;
|
|
408
|
+
this.pluginToolsMcpBridgeEnabled = options.pluginToolsMcpBridgeEnabled === true;
|
|
407
409
|
this.openclawToolsMcpBridgeEnabled = options.openclawToolsMcpBridgeEnabled === true;
|
|
410
|
+
this.managedToolsMcpBridgeEnabled = this.pluginToolsMcpBridgeEnabled || this.openclawToolsMcpBridgeEnabled;
|
|
408
411
|
this.cwd = options.cwd;
|
|
409
412
|
this.sessionStore = createResetAwareSessionStore(options.sessionStore, {
|
|
410
413
|
gatewayInstanceId: this.gatewayInstanceId,
|
|
@@ -433,35 +436,36 @@ var AcpxRuntime = class {
|
|
|
433
436
|
agentName: normalizeAgentName(options.probeAgent) ?? "codex",
|
|
434
437
|
agentRegistry: this.agentRegistry
|
|
435
438
|
});
|
|
436
|
-
const useBridgeSafeProbe = this.
|
|
439
|
+
const useBridgeSafeProbe = this.managedToolsMcpBridgeEnabled || shouldUseBridgeSafeDelegateForCommand(probeCommand);
|
|
437
440
|
this.probeDelegate = useBridgeSafeProbe ? this.bridgeSafeDelegate : this.delegate;
|
|
438
441
|
}
|
|
439
442
|
resolveDelegateForSession(params) {
|
|
440
443
|
if (shouldUseBridgeSafeDelegateForCommand(params.command)) return this.bridgeSafeDelegate;
|
|
441
|
-
return this.
|
|
444
|
+
return this.resolveManagedToolsDelegateForSession(params.sessionKey);
|
|
442
445
|
}
|
|
443
|
-
|
|
444
|
-
if (!this.
|
|
446
|
+
resolveManagedToolsDelegateForSession(sessionKey) {
|
|
447
|
+
if (!this.managedToolsMcpBridgeEnabled) return this.delegate;
|
|
445
448
|
const normalizedSessionKey = sessionKey.trim();
|
|
446
449
|
if (!normalizedSessionKey) return this.delegate;
|
|
447
|
-
const cached = this.
|
|
450
|
+
const cached = this.managedToolsSessionDelegates.get(normalizedSessionKey);
|
|
448
451
|
if (cached) return cached;
|
|
449
452
|
const delegate = new AcpxRuntime$1({
|
|
450
453
|
...this.delegateOptions,
|
|
451
|
-
mcpServers:
|
|
452
|
-
|
|
454
|
+
mcpServers: withManagedToolsMcpSessionEnv({
|
|
455
|
+
pluginToolsEnabled: this.pluginToolsMcpBridgeEnabled,
|
|
456
|
+
openclawToolsEnabled: this.openclawToolsMcpBridgeEnabled,
|
|
453
457
|
mcpServers: this.delegateOptions.mcpServers,
|
|
454
458
|
sessionKey: normalizedSessionKey
|
|
455
459
|
})
|
|
456
460
|
}, this.delegateTestOptions);
|
|
457
|
-
this.
|
|
461
|
+
this.managedToolsSessionDelegates.set(normalizedSessionKey, delegate);
|
|
458
462
|
return delegate;
|
|
459
463
|
}
|
|
460
|
-
|
|
461
|
-
if (!this.
|
|
464
|
+
releaseManagedToolsDelegateForSession(sessionKey) {
|
|
465
|
+
if (!this.managedToolsMcpBridgeEnabled) return;
|
|
462
466
|
const normalizedSessionKey = sessionKey.trim();
|
|
463
467
|
if (!normalizedSessionKey) return;
|
|
464
|
-
this.
|
|
468
|
+
this.managedToolsSessionDelegates.delete(normalizedSessionKey);
|
|
465
469
|
}
|
|
466
470
|
async resolveDelegateForHandle(handle) {
|
|
467
471
|
const record = await this.sessionStore.load(handle.acpxRecordId ?? handle.sessionKey);
|
|
@@ -639,7 +643,7 @@ var AcpxRuntime = class {
|
|
|
639
643
|
});
|
|
640
644
|
const normalizedInput = {
|
|
641
645
|
...ensureInput,
|
|
642
|
-
...
|
|
646
|
+
...codexModelOverride.model ? { model: codexModelOverride.model } : {}
|
|
643
647
|
};
|
|
644
648
|
return await this.runWithLaunchLease({
|
|
645
649
|
sessionKey: input.sessionKey,
|
|
@@ -751,8 +755,8 @@ var AcpxRuntime = class {
|
|
|
751
755
|
}
|
|
752
756
|
};
|
|
753
757
|
}
|
|
754
|
-
getCapabilities() {
|
|
755
|
-
return this.delegate.getCapabilities();
|
|
758
|
+
getCapabilities(input) {
|
|
759
|
+
return this.delegate.getCapabilities(input);
|
|
756
760
|
}
|
|
757
761
|
async getStatus(input) {
|
|
758
762
|
return (await this.resolveDelegateForHandle(input.handle)).getStatus(input);
|
|
@@ -815,7 +819,7 @@ var AcpxRuntime = class {
|
|
|
815
819
|
} finally {
|
|
816
820
|
await this.cleanupProcessTreeForRecord(input.handle, record);
|
|
817
821
|
}
|
|
818
|
-
if (closeSucceeded) this.
|
|
822
|
+
if (closeSucceeded) this.releaseManagedToolsDelegateForSession(input.handle.sessionKey);
|
|
819
823
|
if (closeSucceeded && input.discardPersistentState) this.sessionStore.markFresh(input.handle.sessionKey);
|
|
820
824
|
}
|
|
821
825
|
};
|
|
@@ -823,7 +827,6 @@ var AcpxRuntime = class {
|
|
|
823
827
|
const testing = {
|
|
824
828
|
appendCodexAcpConfigOverrides,
|
|
825
829
|
assertSupportedRuntimeSessionMode,
|
|
826
|
-
codexAcpSessionModelId,
|
|
827
830
|
isClaudeAcpCommand,
|
|
828
831
|
isCodexAcpCommand,
|
|
829
832
|
normalizeClaudeAcpModelOverride,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as createLazyAcpRuntimeProxy } from "./register.runtime-
|
|
1
|
+
import { n as createLazyAcpRuntimeProxy } from "./register.runtime-CysfMsSr.js";
|
|
2
2
|
import "./config-schema-lrk5nlcV.js";
|
|
3
3
|
import { a as createAcpxProcessLeaseStore, d as ACPX_GATEWAY_INSTANCE_KEY, f as ACPX_GATEWAY_INSTANCE_NAMESPACE, h as normalizeAcpxGatewayInstanceRecord, l as openAcpxProcessLeaseStateStore, n as OPENCLAW_ACPX_LEASE_ID_ENV, r as OPENCLAW_GATEWAY_INSTANCE_ID_ARG, t as OPENCLAW_ACPX_LEASE_ID_ARG } from "./process-lease-DiKkFj6F.js";
|
|
4
4
|
import { registerAcpRuntimeBackend, unregisterAcpRuntimeBackend } from "./runtime-api.js";
|
|
5
|
-
import { a as resolveAcpxPluginRoot, c as splitCommandParts, i as resolveAcpxPluginConfig, o as toAcpMcpServers, r as reapStaleOpenClawOwnedAcpxOrphans, s as quoteCommandPart, t as cleanupOpenClawOwnedAcpxProcessTree } from "./process-reaper-
|
|
5
|
+
import { a as resolveAcpxPluginRoot, c as splitCommandParts, d as LEGACY_CODEX_ACP_PACKAGE, f as OPENCLAW_CODEX_CONFIG_ARG, i as resolveAcpxPluginConfig, l as CODEX_ACP_BIN, o as toAcpMcpServers, r as reapStaleOpenClawOwnedAcpxOrphans, s as quoteCommandPart, t as cleanupOpenClawOwnedAcpxProcessTree, u as CODEX_ACP_PACKAGE } from "./process-reaper-CoGRyMJ_.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";
|
|
@@ -15,6 +15,7 @@ import { randomUUID } from "node:crypto";
|
|
|
15
15
|
import { inspect } from "node:util";
|
|
16
16
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
17
17
|
import { readJsonFileWithFallback } from "openclaw/plugin-sdk/json-store";
|
|
18
|
+
import { parse, stringify } from "smol-toml";
|
|
18
19
|
//#region extensions/acpx/src/codex-trust-config.ts
|
|
19
20
|
/**
|
|
20
21
|
* Builds isolated Codex config for ACPX sessions. It preserves safe inherited
|
|
@@ -225,8 +226,6 @@ function renderIsolatedCodexConfig(params) {
|
|
|
225
226
|
* Prepares isolated Codex and Claude ACP wrapper commands for ACPX. The bridge
|
|
226
227
|
* copies safe auth/config state into plugin-owned homes and redacts diagnostics.
|
|
227
228
|
*/
|
|
228
|
-
const CODEX_ACP_PACKAGE = "@zed-industries/codex-acp";
|
|
229
|
-
const CODEX_ACP_BIN = "codex-acp";
|
|
230
229
|
const CLAUDE_ACP_PACKAGE = "@agentclientprotocol/claude-agent-acp";
|
|
231
230
|
const CLAUDE_ACP_BIN = "claude-agent-acp";
|
|
232
231
|
const RUN_CONFIGURED_COMMAND_SENTINEL = "--openclaw-run-configured";
|
|
@@ -382,7 +381,7 @@ function renderDiagnosticRedactionRuleSpecs() {
|
|
|
382
381
|
}
|
|
383
382
|
function buildAdapterWrapperScript(params) {
|
|
384
383
|
return `#!/usr/bin/env node
|
|
385
|
-
import { appendFileSync, existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
384
|
+
import { appendFileSync, existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
386
385
|
import path from "node:path";
|
|
387
386
|
import { spawn } from "node:child_process";
|
|
388
387
|
import { StringDecoder } from "node:string_decoder";
|
|
@@ -395,6 +394,7 @@ const stderrLogMaxChars = 256 * 1024;
|
|
|
395
394
|
const openClawWrapperArgs = new Set([
|
|
396
395
|
${quoteCommandPart(OPENCLAW_ACPX_LEASE_ID_ARG)},
|
|
397
396
|
${quoteCommandPart(OPENCLAW_GATEWAY_INSTANCE_ID_ARG)},
|
|
397
|
+
${(params.openClawWrapperArgs ?? []).map(quoteCommandPart).join(",\n ")}
|
|
398
398
|
]);
|
|
399
399
|
|
|
400
400
|
function readOpenClawWrapperArg(args, name) {
|
|
@@ -406,6 +406,21 @@ function readOpenClawWrapperArg(args, name) {
|
|
|
406
406
|
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
+
function readOpenClawWrapperArgs(args, name) {
|
|
410
|
+
const values = [];
|
|
411
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
412
|
+
if (args[index] !== name) {
|
|
413
|
+
continue;
|
|
414
|
+
}
|
|
415
|
+
const value = args[index + 1];
|
|
416
|
+
if (typeof value === "string" && value.trim()) {
|
|
417
|
+
values.push(value.trim());
|
|
418
|
+
}
|
|
419
|
+
index += 1;
|
|
420
|
+
}
|
|
421
|
+
return values;
|
|
422
|
+
}
|
|
423
|
+
|
|
409
424
|
function safeDiagnosticFilePart(value) {
|
|
410
425
|
const sanitized = String(value || "").replace(/[^A-Za-z0-9._-]/g, "_").slice(0, 120);
|
|
411
426
|
return sanitized || "pid-" + process.pid;
|
|
@@ -550,14 +565,14 @@ function stripOpenClawWrapperArgs(args) {
|
|
|
550
565
|
}
|
|
551
566
|
|
|
552
567
|
const rawConfiguredArgs = process.argv.slice(2);
|
|
568
|
+
${params.envConfigSetup ?? ""}
|
|
553
569
|
const stderrLogPath = resolveStderrLogPath(rawConfiguredArgs);
|
|
554
|
-
|
|
555
|
-
try {
|
|
556
|
-
|
|
557
|
-
|
|
570
|
+
if (stderrLogPath) {
|
|
571
|
+
try {
|
|
572
|
+
rmSync(stderrLogPath, { force: true });
|
|
573
|
+
} catch {
|
|
574
|
+
// Diagnostic cleanup must never prevent the adapter from starting.
|
|
558
575
|
}
|
|
559
|
-
} catch {
|
|
560
|
-
// Stderr capture is diagnostic-only; never break the ACP adapter.
|
|
561
576
|
}
|
|
562
577
|
|
|
563
578
|
const configuredArgs = stripOpenClawWrapperArgs(rawConfiguredArgs);
|
|
@@ -706,6 +721,7 @@ function buildCodexAcpWrapperScript(installedBinPath) {
|
|
|
706
721
|
binName: CODEX_ACP_BIN,
|
|
707
722
|
installedBinPath,
|
|
708
723
|
stderrLogFileNamePrefix: "codex-acp-wrapper.stderr",
|
|
724
|
+
openClawWrapperArgs: [OPENCLAW_CODEX_CONFIG_ARG],
|
|
709
725
|
envSetup: `const codexHome = fileURLToPath(new URL("./codex-home/", import.meta.url));
|
|
710
726
|
const codexAuthPath = fileURLToPath(new URL("./codex-home/auth.json", import.meta.url));
|
|
711
727
|
const codexApiKey = (process.env.CODEX_API_KEY || process.env.OPENAI_API_KEY || "").trim();
|
|
@@ -739,7 +755,59 @@ if (shouldWriteCodexApiKeyAuth) {
|
|
|
739
755
|
const env = {
|
|
740
756
|
...process.env,
|
|
741
757
|
CODEX_HOME: codexHome,
|
|
742
|
-
}
|
|
758
|
+
};`,
|
|
759
|
+
envConfigSetup: `function isCodexConfigObject(value) {
|
|
760
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
function mergeCodexConfig(base, override) {
|
|
764
|
+
const merged = Object.assign(Object.create(null), base);
|
|
765
|
+
for (const [key, value] of Object.entries(override)) {
|
|
766
|
+
const existing = merged[key];
|
|
767
|
+
merged[key] =
|
|
768
|
+
isCodexConfigObject(existing) && isCodexConfigObject(value)
|
|
769
|
+
? mergeCodexConfig(existing, value)
|
|
770
|
+
: value;
|
|
771
|
+
}
|
|
772
|
+
return merged;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
const openClawCodexConfigs = readOpenClawWrapperArgs(
|
|
776
|
+
rawConfiguredArgs,
|
|
777
|
+
${quoteCommandPart(OPENCLAW_CODEX_CONFIG_ARG)},
|
|
778
|
+
);
|
|
779
|
+
if (openClawCodexConfigs.length > 0) {
|
|
780
|
+
let existingCodexConfig = {};
|
|
781
|
+
if (typeof env.CODEX_CONFIG === "string" && env.CODEX_CONFIG.trim()) {
|
|
782
|
+
try {
|
|
783
|
+
const parsedCodexConfig = JSON.parse(env.CODEX_CONFIG);
|
|
784
|
+
if (!parsedCodexConfig || typeof parsedCodexConfig !== "object" || Array.isArray(parsedCodexConfig)) {
|
|
785
|
+
throw new Error("CODEX_CONFIG must be a JSON object");
|
|
786
|
+
}
|
|
787
|
+
existingCodexConfig = parsedCodexConfig;
|
|
788
|
+
} catch {
|
|
789
|
+
console.error("[openclaw] CODEX_CONFIG must be a valid JSON object");
|
|
790
|
+
process.exit(1);
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
for (const openClawCodexConfig of openClawCodexConfigs) {
|
|
794
|
+
try {
|
|
795
|
+
const parsedOpenClawCodexConfig = JSON.parse(openClawCodexConfig);
|
|
796
|
+
if (
|
|
797
|
+
!parsedOpenClawCodexConfig ||
|
|
798
|
+
typeof parsedOpenClawCodexConfig !== "object" ||
|
|
799
|
+
Array.isArray(parsedOpenClawCodexConfig)
|
|
800
|
+
) {
|
|
801
|
+
throw new Error("invalid OpenClaw Codex config");
|
|
802
|
+
}
|
|
803
|
+
existingCodexConfig = mergeCodexConfig(existingCodexConfig, parsedOpenClawCodexConfig);
|
|
804
|
+
} catch {
|
|
805
|
+
console.error("[openclaw] invalid generated Codex ACP startup config");
|
|
806
|
+
process.exit(1);
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
env.CODEX_CONFIG = JSON.stringify(existingCodexConfig);
|
|
810
|
+
}`
|
|
743
811
|
});
|
|
744
812
|
}
|
|
745
813
|
function buildClaudeAcpWrapperScript(installedBinPath) {
|
|
@@ -826,15 +894,94 @@ function extractConfiguredAdapterArgs(params) {
|
|
|
826
894
|
if (isAcpBinName(parts[0] ?? "", params.binName)) return parts.slice(1);
|
|
827
895
|
if (basename(parts[0] ?? "") === "node" && isAcpBinName(parts[1] ?? "", params.binName)) return parts.slice(2);
|
|
828
896
|
}
|
|
829
|
-
function
|
|
830
|
-
|
|
897
|
+
function isConfigRecord(value) {
|
|
898
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
899
|
+
}
|
|
900
|
+
function mergeConfigRecords(base, override) {
|
|
901
|
+
const merged = { ...base };
|
|
902
|
+
for (const [key, value] of Object.entries(override)) {
|
|
903
|
+
const existing = merged[key];
|
|
904
|
+
const nextValue = isConfigRecord(existing) && isConfigRecord(value) ? mergeConfigRecords(existing, value) : value;
|
|
905
|
+
Object.defineProperty(merged, key, {
|
|
906
|
+
value: nextValue,
|
|
907
|
+
configurable: true,
|
|
908
|
+
enumerable: true,
|
|
909
|
+
writable: true
|
|
910
|
+
});
|
|
911
|
+
}
|
|
912
|
+
return merged;
|
|
913
|
+
}
|
|
914
|
+
function parseLegacyCodexConfigAssignment(assignment) {
|
|
915
|
+
const separator = assignment.indexOf("=");
|
|
916
|
+
if (separator <= 0) throw new Error(`Invalid legacy Codex ACP config override: ${assignment}`);
|
|
917
|
+
const rawKey = assignment.slice(0, separator).trim();
|
|
918
|
+
const key = rawKey === "use_legacy_landlock" ? "features.use_legacy_landlock" : rawKey;
|
|
919
|
+
const rawValue = assignment.slice(separator + 1).trim();
|
|
920
|
+
try {
|
|
921
|
+
return parse(`${key} = ${rawValue}`);
|
|
922
|
+
} catch {
|
|
923
|
+
const literal = rawValue.replace(/^["']+|["']+$/g, "");
|
|
924
|
+
return parse(`${key} = ${JSON.stringify(literal)}`);
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
function migrateLegacyCodexArgs(args) {
|
|
928
|
+
let config = {};
|
|
929
|
+
const forwardedArgs = [];
|
|
930
|
+
let hadOverrides = false;
|
|
931
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
932
|
+
const arg = args[index] ?? "";
|
|
933
|
+
let assignment;
|
|
934
|
+
if (arg === "-c" || arg === "--config") assignment = args[index += 1];
|
|
935
|
+
else if (arg.startsWith("--config=")) assignment = arg.slice(9);
|
|
936
|
+
else if (arg.startsWith("-c=")) assignment = arg.slice(3);
|
|
937
|
+
else if (arg.startsWith("-c") && arg.length > 2) assignment = arg.slice(2);
|
|
938
|
+
else {
|
|
939
|
+
forwardedArgs.push(arg);
|
|
940
|
+
continue;
|
|
941
|
+
}
|
|
942
|
+
if (!assignment) throw new Error(`Missing value for legacy Codex ACP option ${arg}`);
|
|
943
|
+
hadOverrides = true;
|
|
944
|
+
config = mergeConfigRecords(config, parseLegacyCodexConfigAssignment(assignment));
|
|
945
|
+
}
|
|
946
|
+
return {
|
|
947
|
+
config,
|
|
948
|
+
forwardedArgs,
|
|
949
|
+
hadOverrides
|
|
950
|
+
};
|
|
951
|
+
}
|
|
952
|
+
function resolveCodexAdapterLaunch(configuredCommand) {
|
|
953
|
+
const legacyAdapterArgs = extractConfiguredAdapterArgs({
|
|
954
|
+
configuredCommand,
|
|
955
|
+
packageName: LEGACY_CODEX_ACP_PACKAGE,
|
|
956
|
+
binName: CODEX_ACP_BIN
|
|
957
|
+
});
|
|
958
|
+
if (legacyAdapterArgs) {
|
|
959
|
+
const migration = migrateLegacyCodexArgs(legacyAdapterArgs);
|
|
960
|
+
return {
|
|
961
|
+
args: [...migration.hadOverrides ? [OPENCLAW_CODEX_CONFIG_ARG, JSON.stringify(migration.config)] : [], ...migration.forwardedArgs],
|
|
962
|
+
...migration.hadOverrides ? { migratedConfig: migration.config } : {}
|
|
963
|
+
};
|
|
964
|
+
}
|
|
965
|
+
const maintainedAdapterArgs = extractConfiguredAdapterArgs({
|
|
831
966
|
configuredCommand,
|
|
832
967
|
packageName: CODEX_ACP_PACKAGE,
|
|
833
968
|
binName: CODEX_ACP_BIN
|
|
834
969
|
});
|
|
835
|
-
if (
|
|
970
|
+
if (!maintainedAdapterArgs) return;
|
|
971
|
+
return { args: maintainedAdapterArgs };
|
|
972
|
+
}
|
|
973
|
+
function buildCodexAcpWrapperCommand(wrapperPath, configuredCommand) {
|
|
974
|
+
const launch = resolveCodexAdapterLaunch(configuredCommand);
|
|
975
|
+
if (launch) return buildWrapperCommand(wrapperPath, launch.args);
|
|
836
976
|
return buildWrapperCommand(wrapperPath, [RUN_CONFIGURED_COMMAND_SENTINEL, ...splitCommandParts(configuredCommand?.trim() ?? "")]);
|
|
837
977
|
}
|
|
978
|
+
async function persistMigratedCodexMcpConfig(params) {
|
|
979
|
+
const mcpServers = params.migratedConfig?.mcp_servers;
|
|
980
|
+
if (!isConfigRecord(mcpServers)) return;
|
|
981
|
+
const configPath = path.join(params.codexHome, "config.toml");
|
|
982
|
+
const merged = mergeConfigRecords(parse(await fs$1.readFile(configPath, "utf8")), { mcp_servers: mcpServers });
|
|
983
|
+
await fs$1.writeFile(configPath, stringify(merged), "utf8");
|
|
984
|
+
}
|
|
838
985
|
function buildClaudeAcpWrapperCommand(wrapperPath, configuredCommand) {
|
|
839
986
|
const configuredAdapterArgs = extractConfiguredAdapterArgs({
|
|
840
987
|
configuredCommand,
|
|
@@ -848,16 +995,20 @@ function buildClaudeAcpWrapperCommand(wrapperPath, configuredCommand) {
|
|
|
848
995
|
async function prepareAcpxCodexAuthConfig(params) {
|
|
849
996
|
params.logger;
|
|
850
997
|
const codexBaseDir = path.join(params.stateDir, "acpx");
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
998
|
+
const configuredCodexCommand = params.pluginConfig.agents.codex;
|
|
999
|
+
const configuredClaudeCommand = params.pluginConfig.agents.claude;
|
|
1000
|
+
const codexLaunch = resolveCodexAdapterLaunch(configuredCodexCommand);
|
|
1001
|
+
await persistMigratedCodexMcpConfig({
|
|
1002
|
+
codexHome: await prepareIsolatedCodexHome({
|
|
1003
|
+
baseDir: codexBaseDir,
|
|
1004
|
+
workspaceDir: params.pluginConfig.cwd
|
|
1005
|
+
}),
|
|
1006
|
+
migratedConfig: codexLaunch?.migratedConfig
|
|
854
1007
|
});
|
|
855
1008
|
const installedCodexBinPath = await (params.resolveInstalledCodexAcpBinPath ?? resolveInstalledCodexAcpBinPath)();
|
|
856
1009
|
const installedClaudeBinPath = await (params.resolveInstalledClaudeAcpBinPath ?? resolveInstalledClaudeAcpBinPath)();
|
|
857
1010
|
const wrapperPath = await writeCodexAcpWrapper(codexBaseDir, installedCodexBinPath);
|
|
858
1011
|
const claudeWrapperPath = await writeClaudeAcpWrapper(codexBaseDir, installedClaudeBinPath);
|
|
859
|
-
const configuredCodexCommand = params.pluginConfig.agents.codex;
|
|
860
|
-
const configuredClaudeCommand = params.pluginConfig.agents.claude;
|
|
861
1012
|
return {
|
|
862
1013
|
...params.pluginConfig,
|
|
863
1014
|
agents: {
|
|
@@ -876,7 +1027,7 @@ async function prepareAcpxCodexAuthConfig(params) {
|
|
|
876
1027
|
const ENABLE_STARTUP_PROBE_ENV = "OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE";
|
|
877
1028
|
const SKIP_RUNTIME_PROBE_ENV = "OPENCLAW_SKIP_ACPX_RUNTIME_PROBE";
|
|
878
1029
|
const ACPX_BACKEND_ID = "acpx";
|
|
879
|
-
const loadRuntimeModule = createLazyRuntimeModule(() => import("./runtime-
|
|
1030
|
+
const loadRuntimeModule = createLazyRuntimeModule(() => import("./runtime-BEOGc4Ik.js"));
|
|
880
1031
|
/** Convert ACPX timeout seconds into timer-safe milliseconds. */
|
|
881
1032
|
function resolveAcpxTimerTimeoutMs(timeoutSeconds) {
|
|
882
1033
|
if (timeoutSeconds === void 0) return;
|
|
@@ -897,6 +1048,7 @@ function createLazyDefaultRuntime(params) {
|
|
|
897
1048
|
agentRegistry: module.createAgentRegistry({ overrides: params.pluginConfig.agents }),
|
|
898
1049
|
probeAgent: params.pluginConfig.probeAgent,
|
|
899
1050
|
mcpServers: toAcpMcpServers(params.pluginConfig.mcpServers),
|
|
1051
|
+
pluginToolsMcpBridgeEnabled: params.pluginConfig.pluginToolsMcpBridge,
|
|
900
1052
|
openclawToolsMcpBridgeEnabled: params.pluginConfig.openClawToolsMcpBridge,
|
|
901
1053
|
permissionMode: params.pluginConfig.permissionMode,
|
|
902
1054
|
nonInteractivePermissions: params.pluginConfig.nonInteractivePermissions,
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/acpx",
|
|
3
|
-
"version": "2026.7.2-beta.
|
|
3
|
+
"version": "2026.7.2-beta.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@openclaw/acpx",
|
|
9
|
-
"version": "2026.7.2-beta.
|
|
9
|
+
"version": "2026.7.2-beta.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@agentclientprotocol/claude-agent-acp": "0.55.0",
|
|
12
|
-
"@
|
|
12
|
+
"@agentclientprotocol/codex-acp": "1.1.2",
|
|
13
13
|
"acpx": "0.11.2",
|
|
14
|
+
"smol-toml": "1.7.0",
|
|
14
15
|
"zod": "4.4.3"
|
|
15
16
|
}
|
|
16
17
|
},
|
|
@@ -31,6 +32,32 @@
|
|
|
31
32
|
"node": ">=22"
|
|
32
33
|
}
|
|
33
34
|
},
|
|
35
|
+
"node_modules/@agentclientprotocol/codex-acp": {
|
|
36
|
+
"version": "1.1.2",
|
|
37
|
+
"resolved": "https://registry.npmjs.org/@agentclientprotocol/codex-acp/-/codex-acp-1.1.2.tgz",
|
|
38
|
+
"integrity": "sha512-qE/R1WdqJJ9OFHsHGvbmVmS2j9iCMZzpWT3g2XIViXrGHu1fLOALLINBIlW+WzKDllCh131aB6cqcIWSt0otbw==",
|
|
39
|
+
"license": "Apache-2.0",
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@agentclientprotocol/sdk": "^1.2.1",
|
|
42
|
+
"@openai/codex": "^0.144.0",
|
|
43
|
+
"diff": "^9.0.0",
|
|
44
|
+
"open": "^11.0.0",
|
|
45
|
+
"vscode-jsonrpc": "^9.0.1",
|
|
46
|
+
"zod": "^4.0.0"
|
|
47
|
+
},
|
|
48
|
+
"bin": {
|
|
49
|
+
"codex-acp": "dist/index.js"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"node_modules/@agentclientprotocol/codex-acp/node_modules/@agentclientprotocol/sdk": {
|
|
53
|
+
"version": "1.2.1",
|
|
54
|
+
"resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-1.2.1.tgz",
|
|
55
|
+
"integrity": "sha512-jwYUdOQR7tc+Zfch53VL4JJyUNK/46q03uUTYb+PjECsmnNl94XFXOfYLJ8RBpMNidXd1rpOAVgb0vqD98xImA==",
|
|
56
|
+
"license": "Apache-2.0",
|
|
57
|
+
"peerDependencies": {
|
|
58
|
+
"zod": "^3.25.0 || ^4.0.0"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
34
61
|
"node_modules/@agentclientprotocol/sdk": {
|
|
35
62
|
"version": "1.1.0",
|
|
36
63
|
"resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-1.1.0.tgz",
|
|
@@ -694,33 +721,31 @@
|
|
|
694
721
|
}
|
|
695
722
|
}
|
|
696
723
|
},
|
|
697
|
-
"node_modules/@
|
|
698
|
-
"version": "
|
|
699
|
-
"resolved": "https://registry.npmjs.org/@
|
|
700
|
-
"integrity": "sha512-
|
|
701
|
-
"license": "MIT"
|
|
702
|
-
},
|
|
703
|
-
"node_modules/@zed-industries/codex-acp": {
|
|
704
|
-
"version": "0.16.0",
|
|
705
|
-
"resolved": "https://registry.npmjs.org/@zed-industries/codex-acp/-/codex-acp-0.16.0.tgz",
|
|
706
|
-
"integrity": "sha512-XKzqztT5R8Wg1BVFnk6/U4JVx5GNUaZgxpf9gP2Cw6BsknvJWh3aefcAGZQljgdMivRqczjNKYL4F6H65dc5vA==",
|
|
724
|
+
"node_modules/@openai/codex": {
|
|
725
|
+
"version": "0.144.4",
|
|
726
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4.tgz",
|
|
727
|
+
"integrity": "sha512-DTHzYatlKq9dw55E0/HsbK4tRCEKabuJ10ybbqpsG8gVv/kvwEdg3Z4OI3cvLXKa21xkIa4lkGlZoO/HmqmFFw==",
|
|
707
728
|
"license": "Apache-2.0",
|
|
708
729
|
"bin": {
|
|
709
|
-
"codex
|
|
730
|
+
"codex": "bin/codex.js"
|
|
731
|
+
},
|
|
732
|
+
"engines": {
|
|
733
|
+
"node": ">=16"
|
|
710
734
|
},
|
|
711
735
|
"optionalDependencies": {
|
|
712
|
-
"@
|
|
713
|
-
"@
|
|
714
|
-
"@
|
|
715
|
-
"@
|
|
716
|
-
"@
|
|
717
|
-
"@
|
|
718
|
-
}
|
|
719
|
-
},
|
|
720
|
-
"node_modules/@
|
|
721
|
-
"
|
|
722
|
-
"
|
|
723
|
-
"
|
|
736
|
+
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.144.4-darwin-arm64",
|
|
737
|
+
"@openai/codex-darwin-x64": "npm:@openai/codex@0.144.4-darwin-x64",
|
|
738
|
+
"@openai/codex-linux-arm64": "npm:@openai/codex@0.144.4-linux-arm64",
|
|
739
|
+
"@openai/codex-linux-x64": "npm:@openai/codex@0.144.4-linux-x64",
|
|
740
|
+
"@openai/codex-win32-arm64": "npm:@openai/codex@0.144.4-win32-arm64",
|
|
741
|
+
"@openai/codex-win32-x64": "npm:@openai/codex@0.144.4-win32-x64"
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
"node_modules/@openai/codex-darwin-arm64": {
|
|
745
|
+
"name": "@openai/codex",
|
|
746
|
+
"version": "0.144.4-darwin-arm64",
|
|
747
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-darwin-arm64.tgz",
|
|
748
|
+
"integrity": "sha512-6J3g498cM2oA7vYIJhpuGJlnIi/M5JdYmjB5BZ1Of5HQ0ziIlplFSvH801oVy9J5TQFp642ODzOu/ZEokDUXsg==",
|
|
724
749
|
"cpu": [
|
|
725
750
|
"arm64"
|
|
726
751
|
],
|
|
@@ -729,14 +754,15 @@
|
|
|
729
754
|
"os": [
|
|
730
755
|
"darwin"
|
|
731
756
|
],
|
|
732
|
-
"
|
|
733
|
-
"
|
|
757
|
+
"engines": {
|
|
758
|
+
"node": ">=16"
|
|
734
759
|
}
|
|
735
760
|
},
|
|
736
|
-
"node_modules/@
|
|
737
|
-
"
|
|
738
|
-
"
|
|
739
|
-
"
|
|
761
|
+
"node_modules/@openai/codex-darwin-x64": {
|
|
762
|
+
"name": "@openai/codex",
|
|
763
|
+
"version": "0.144.4-darwin-x64",
|
|
764
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-darwin-x64.tgz",
|
|
765
|
+
"integrity": "sha512-k1HC8gdbAy+VmMbekYkhM+r+QE2Xfgd67n1VSp94tjz7aXVKoalHcDkdKNM/uUQ8o2tvbiwhHSUftJF8Sm9/Lw==",
|
|
740
766
|
"cpu": [
|
|
741
767
|
"x64"
|
|
742
768
|
],
|
|
@@ -745,14 +771,15 @@
|
|
|
745
771
|
"os": [
|
|
746
772
|
"darwin"
|
|
747
773
|
],
|
|
748
|
-
"
|
|
749
|
-
"
|
|
774
|
+
"engines": {
|
|
775
|
+
"node": ">=16"
|
|
750
776
|
}
|
|
751
777
|
},
|
|
752
|
-
"node_modules/@
|
|
753
|
-
"
|
|
754
|
-
"
|
|
755
|
-
"
|
|
778
|
+
"node_modules/@openai/codex-linux-arm64": {
|
|
779
|
+
"name": "@openai/codex",
|
|
780
|
+
"version": "0.144.4-linux-arm64",
|
|
781
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-linux-arm64.tgz",
|
|
782
|
+
"integrity": "sha512-OlKx65579OwIzech9Tt3OUH9+hFZfFrCBP1hL2MudnMIoNr1+cFZjB5YIj5MWMRoBD+K5W3wdBIpQSH855b5Sg==",
|
|
756
783
|
"cpu": [
|
|
757
784
|
"arm64"
|
|
758
785
|
],
|
|
@@ -761,14 +788,15 @@
|
|
|
761
788
|
"os": [
|
|
762
789
|
"linux"
|
|
763
790
|
],
|
|
764
|
-
"
|
|
765
|
-
"
|
|
791
|
+
"engines": {
|
|
792
|
+
"node": ">=16"
|
|
766
793
|
}
|
|
767
794
|
},
|
|
768
|
-
"node_modules/@
|
|
769
|
-
"
|
|
770
|
-
"
|
|
771
|
-
"
|
|
795
|
+
"node_modules/@openai/codex-linux-x64": {
|
|
796
|
+
"name": "@openai/codex",
|
|
797
|
+
"version": "0.144.4-linux-x64",
|
|
798
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-linux-x64.tgz",
|
|
799
|
+
"integrity": "sha512-2jxrmV6+/7eBNdg5uhhmOEPFu2o28eYY/ClLzWhSBHH8uo3f2KA1z9JQcVtwlbToW03nEPlEzYNYfCF1UBqsVQ==",
|
|
772
800
|
"cpu": [
|
|
773
801
|
"x64"
|
|
774
802
|
],
|
|
@@ -777,14 +805,15 @@
|
|
|
777
805
|
"os": [
|
|
778
806
|
"linux"
|
|
779
807
|
],
|
|
780
|
-
"
|
|
781
|
-
"
|
|
808
|
+
"engines": {
|
|
809
|
+
"node": ">=16"
|
|
782
810
|
}
|
|
783
811
|
},
|
|
784
|
-
"node_modules/@
|
|
785
|
-
"
|
|
786
|
-
"
|
|
787
|
-
"
|
|
812
|
+
"node_modules/@openai/codex-win32-arm64": {
|
|
813
|
+
"name": "@openai/codex",
|
|
814
|
+
"version": "0.144.4-win32-arm64",
|
|
815
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-win32-arm64.tgz",
|
|
816
|
+
"integrity": "sha512-CCgfI1smFhHZTIpTuBwDJwBr/AR40RTqaFxbBWVabu0RMeYDteRuPiDfdTlktf3C43Y1q10VZXhVGYtCokDg2w==",
|
|
788
817
|
"cpu": [
|
|
789
818
|
"arm64"
|
|
790
819
|
],
|
|
@@ -793,14 +822,15 @@
|
|
|
793
822
|
"os": [
|
|
794
823
|
"win32"
|
|
795
824
|
],
|
|
796
|
-
"
|
|
797
|
-
"
|
|
825
|
+
"engines": {
|
|
826
|
+
"node": ">=16"
|
|
798
827
|
}
|
|
799
828
|
},
|
|
800
|
-
"node_modules/@
|
|
801
|
-
"
|
|
802
|
-
"
|
|
803
|
-
"
|
|
829
|
+
"node_modules/@openai/codex-win32-x64": {
|
|
830
|
+
"name": "@openai/codex",
|
|
831
|
+
"version": "0.144.4-win32-x64",
|
|
832
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-win32-x64.tgz",
|
|
833
|
+
"integrity": "sha512-iL1ky0ERgdQJOKzom/Ms1fhpwkSmpsA9eVrzAqURFlYGS8z7JqwEgm33+nLGCsY7y25d8Xs/LJ91Oiqz3yXcUg==",
|
|
804
834
|
"cpu": [
|
|
805
835
|
"x64"
|
|
806
836
|
],
|
|
@@ -809,10 +839,16 @@
|
|
|
809
839
|
"os": [
|
|
810
840
|
"win32"
|
|
811
841
|
],
|
|
812
|
-
"
|
|
813
|
-
"
|
|
842
|
+
"engines": {
|
|
843
|
+
"node": ">=16"
|
|
814
844
|
}
|
|
815
845
|
},
|
|
846
|
+
"node_modules/@stablelib/base64": {
|
|
847
|
+
"version": "1.0.1",
|
|
848
|
+
"resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz",
|
|
849
|
+
"integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==",
|
|
850
|
+
"license": "MIT"
|
|
851
|
+
},
|
|
816
852
|
"node_modules/accepts": {
|
|
817
853
|
"version": "2.0.0",
|
|
818
854
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
|
|
@@ -1030,6 +1066,21 @@
|
|
|
1030
1066
|
"url": "https://opencollective.com/express"
|
|
1031
1067
|
}
|
|
1032
1068
|
},
|
|
1069
|
+
"node_modules/bundle-name": {
|
|
1070
|
+
"version": "4.1.0",
|
|
1071
|
+
"resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
|
|
1072
|
+
"integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
|
|
1073
|
+
"license": "MIT",
|
|
1074
|
+
"dependencies": {
|
|
1075
|
+
"run-applescript": "^7.0.0"
|
|
1076
|
+
},
|
|
1077
|
+
"engines": {
|
|
1078
|
+
"node": ">=18"
|
|
1079
|
+
},
|
|
1080
|
+
"funding": {
|
|
1081
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1082
|
+
}
|
|
1083
|
+
},
|
|
1033
1084
|
"node_modules/bytes": {
|
|
1034
1085
|
"version": "3.1.2",
|
|
1035
1086
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
|
@@ -1165,6 +1216,46 @@
|
|
|
1165
1216
|
}
|
|
1166
1217
|
}
|
|
1167
1218
|
},
|
|
1219
|
+
"node_modules/default-browser": {
|
|
1220
|
+
"version": "5.5.0",
|
|
1221
|
+
"resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
|
|
1222
|
+
"integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
|
|
1223
|
+
"license": "MIT",
|
|
1224
|
+
"dependencies": {
|
|
1225
|
+
"bundle-name": "^4.1.0",
|
|
1226
|
+
"default-browser-id": "^5.0.0"
|
|
1227
|
+
},
|
|
1228
|
+
"engines": {
|
|
1229
|
+
"node": ">=18"
|
|
1230
|
+
},
|
|
1231
|
+
"funding": {
|
|
1232
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1233
|
+
}
|
|
1234
|
+
},
|
|
1235
|
+
"node_modules/default-browser-id": {
|
|
1236
|
+
"version": "5.0.1",
|
|
1237
|
+
"resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
|
|
1238
|
+
"integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
|
|
1239
|
+
"license": "MIT",
|
|
1240
|
+
"engines": {
|
|
1241
|
+
"node": ">=18"
|
|
1242
|
+
},
|
|
1243
|
+
"funding": {
|
|
1244
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1245
|
+
}
|
|
1246
|
+
},
|
|
1247
|
+
"node_modules/define-lazy-prop": {
|
|
1248
|
+
"version": "3.0.0",
|
|
1249
|
+
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
|
|
1250
|
+
"integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
|
|
1251
|
+
"license": "MIT",
|
|
1252
|
+
"engines": {
|
|
1253
|
+
"node": ">=12"
|
|
1254
|
+
},
|
|
1255
|
+
"funding": {
|
|
1256
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1257
|
+
}
|
|
1258
|
+
},
|
|
1168
1259
|
"node_modules/depd": {
|
|
1169
1260
|
"version": "2.0.0",
|
|
1170
1261
|
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
|
@@ -1174,6 +1265,15 @@
|
|
|
1174
1265
|
"node": ">= 0.8"
|
|
1175
1266
|
}
|
|
1176
1267
|
},
|
|
1268
|
+
"node_modules/diff": {
|
|
1269
|
+
"version": "9.0.0",
|
|
1270
|
+
"resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz",
|
|
1271
|
+
"integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==",
|
|
1272
|
+
"license": "BSD-3-Clause",
|
|
1273
|
+
"engines": {
|
|
1274
|
+
"node": ">=0.3.1"
|
|
1275
|
+
}
|
|
1276
|
+
},
|
|
1177
1277
|
"node_modules/dunder-proto": {
|
|
1178
1278
|
"version": "1.0.1",
|
|
1179
1279
|
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
|
@@ -1642,12 +1742,72 @@
|
|
|
1642
1742
|
"node": ">= 0.10"
|
|
1643
1743
|
}
|
|
1644
1744
|
},
|
|
1745
|
+
"node_modules/is-docker": {
|
|
1746
|
+
"version": "3.0.0",
|
|
1747
|
+
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
|
|
1748
|
+
"integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
|
|
1749
|
+
"license": "MIT",
|
|
1750
|
+
"bin": {
|
|
1751
|
+
"is-docker": "cli.js"
|
|
1752
|
+
},
|
|
1753
|
+
"engines": {
|
|
1754
|
+
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
1755
|
+
},
|
|
1756
|
+
"funding": {
|
|
1757
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1758
|
+
}
|
|
1759
|
+
},
|
|
1760
|
+
"node_modules/is-in-ssh": {
|
|
1761
|
+
"version": "1.0.0",
|
|
1762
|
+
"resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz",
|
|
1763
|
+
"integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==",
|
|
1764
|
+
"license": "MIT",
|
|
1765
|
+
"engines": {
|
|
1766
|
+
"node": ">=20"
|
|
1767
|
+
},
|
|
1768
|
+
"funding": {
|
|
1769
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1770
|
+
}
|
|
1771
|
+
},
|
|
1772
|
+
"node_modules/is-inside-container": {
|
|
1773
|
+
"version": "1.0.0",
|
|
1774
|
+
"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
|
|
1775
|
+
"integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
|
|
1776
|
+
"license": "MIT",
|
|
1777
|
+
"dependencies": {
|
|
1778
|
+
"is-docker": "^3.0.0"
|
|
1779
|
+
},
|
|
1780
|
+
"bin": {
|
|
1781
|
+
"is-inside-container": "cli.js"
|
|
1782
|
+
},
|
|
1783
|
+
"engines": {
|
|
1784
|
+
"node": ">=14.16"
|
|
1785
|
+
},
|
|
1786
|
+
"funding": {
|
|
1787
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1788
|
+
}
|
|
1789
|
+
},
|
|
1645
1790
|
"node_modules/is-promise": {
|
|
1646
1791
|
"version": "4.0.0",
|
|
1647
1792
|
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
|
|
1648
1793
|
"integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
|
|
1649
1794
|
"license": "MIT"
|
|
1650
1795
|
},
|
|
1796
|
+
"node_modules/is-wsl": {
|
|
1797
|
+
"version": "3.1.1",
|
|
1798
|
+
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
|
|
1799
|
+
"integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
|
|
1800
|
+
"license": "MIT",
|
|
1801
|
+
"dependencies": {
|
|
1802
|
+
"is-inside-container": "^1.0.0"
|
|
1803
|
+
},
|
|
1804
|
+
"engines": {
|
|
1805
|
+
"node": ">=16"
|
|
1806
|
+
},
|
|
1807
|
+
"funding": {
|
|
1808
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1809
|
+
}
|
|
1810
|
+
},
|
|
1651
1811
|
"node_modules/isexe": {
|
|
1652
1812
|
"version": "2.0.0",
|
|
1653
1813
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
|
@@ -1800,6 +1960,26 @@
|
|
|
1800
1960
|
"wrappy": "1"
|
|
1801
1961
|
}
|
|
1802
1962
|
},
|
|
1963
|
+
"node_modules/open": {
|
|
1964
|
+
"version": "11.0.0",
|
|
1965
|
+
"resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz",
|
|
1966
|
+
"integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==",
|
|
1967
|
+
"license": "MIT",
|
|
1968
|
+
"dependencies": {
|
|
1969
|
+
"default-browser": "^5.4.0",
|
|
1970
|
+
"define-lazy-prop": "^3.0.0",
|
|
1971
|
+
"is-in-ssh": "^1.0.0",
|
|
1972
|
+
"is-inside-container": "^1.0.0",
|
|
1973
|
+
"powershell-utils": "^0.1.0",
|
|
1974
|
+
"wsl-utils": "^0.3.0"
|
|
1975
|
+
},
|
|
1976
|
+
"engines": {
|
|
1977
|
+
"node": ">=20"
|
|
1978
|
+
},
|
|
1979
|
+
"funding": {
|
|
1980
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
1981
|
+
}
|
|
1982
|
+
},
|
|
1803
1983
|
"node_modules/parseurl": {
|
|
1804
1984
|
"version": "1.3.3",
|
|
1805
1985
|
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
|
@@ -1837,6 +2017,18 @@
|
|
|
1837
2017
|
"node": ">=16.20.0"
|
|
1838
2018
|
}
|
|
1839
2019
|
},
|
|
2020
|
+
"node_modules/powershell-utils": {
|
|
2021
|
+
"version": "0.1.0",
|
|
2022
|
+
"resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz",
|
|
2023
|
+
"integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==",
|
|
2024
|
+
"license": "MIT",
|
|
2025
|
+
"engines": {
|
|
2026
|
+
"node": ">=20"
|
|
2027
|
+
},
|
|
2028
|
+
"funding": {
|
|
2029
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
2030
|
+
}
|
|
2031
|
+
},
|
|
1840
2032
|
"node_modules/proxy-addr": {
|
|
1841
2033
|
"version": "2.0.7",
|
|
1842
2034
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
|
@@ -1918,6 +2110,18 @@
|
|
|
1918
2110
|
"node": ">= 18"
|
|
1919
2111
|
}
|
|
1920
2112
|
},
|
|
2113
|
+
"node_modules/run-applescript": {
|
|
2114
|
+
"version": "7.1.0",
|
|
2115
|
+
"resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
|
|
2116
|
+
"integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
|
|
2117
|
+
"license": "MIT",
|
|
2118
|
+
"engines": {
|
|
2119
|
+
"node": ">=18"
|
|
2120
|
+
},
|
|
2121
|
+
"funding": {
|
|
2122
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
2123
|
+
}
|
|
2124
|
+
},
|
|
1921
2125
|
"node_modules/safer-buffer": {
|
|
1922
2126
|
"version": "2.1.2",
|
|
1923
2127
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
|
@@ -2091,6 +2295,18 @@
|
|
|
2091
2295
|
"node": ">=18"
|
|
2092
2296
|
}
|
|
2093
2297
|
},
|
|
2298
|
+
"node_modules/smol-toml": {
|
|
2299
|
+
"version": "1.7.0",
|
|
2300
|
+
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz",
|
|
2301
|
+
"integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==",
|
|
2302
|
+
"license": "BSD-3-Clause",
|
|
2303
|
+
"engines": {
|
|
2304
|
+
"node": ">= 18"
|
|
2305
|
+
},
|
|
2306
|
+
"funding": {
|
|
2307
|
+
"url": "https://github.com/sponsors/cyyynthia"
|
|
2308
|
+
}
|
|
2309
|
+
},
|
|
2094
2310
|
"node_modules/standardwebhooks": {
|
|
2095
2311
|
"version": "1.0.0",
|
|
2096
2312
|
"resolved": "https://registry.npmjs.org/standardwebhooks/-/standardwebhooks-1.0.0.tgz",
|
|
@@ -2233,6 +2449,15 @@
|
|
|
2233
2449
|
"node": ">= 0.8"
|
|
2234
2450
|
}
|
|
2235
2451
|
},
|
|
2452
|
+
"node_modules/vscode-jsonrpc": {
|
|
2453
|
+
"version": "9.0.1",
|
|
2454
|
+
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.1.tgz",
|
|
2455
|
+
"integrity": "sha512-rfuA6T75H6m5EkbhtEPzre9pT0HPcDI2MMy4+nPFIBks5J8JBAUHD4tRYSgaBOijIEC7SRkC1kKyXTLqbmh9jw==",
|
|
2456
|
+
"license": "MIT",
|
|
2457
|
+
"engines": {
|
|
2458
|
+
"node": ">=14.0.0"
|
|
2459
|
+
}
|
|
2460
|
+
},
|
|
2236
2461
|
"node_modules/which": {
|
|
2237
2462
|
"version": "2.0.2",
|
|
2238
2463
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
|
@@ -2254,6 +2479,22 @@
|
|
|
2254
2479
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
|
2255
2480
|
"license": "ISC"
|
|
2256
2481
|
},
|
|
2482
|
+
"node_modules/wsl-utils": {
|
|
2483
|
+
"version": "0.3.1",
|
|
2484
|
+
"resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz",
|
|
2485
|
+
"integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==",
|
|
2486
|
+
"license": "MIT",
|
|
2487
|
+
"dependencies": {
|
|
2488
|
+
"is-wsl": "^3.1.0",
|
|
2489
|
+
"powershell-utils": "^0.1.0"
|
|
2490
|
+
},
|
|
2491
|
+
"engines": {
|
|
2492
|
+
"node": ">=20"
|
|
2493
|
+
},
|
|
2494
|
+
"funding": {
|
|
2495
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
2496
|
+
}
|
|
2497
|
+
},
|
|
2257
2498
|
"node_modules/zod": {
|
|
2258
2499
|
"version": "4.4.3",
|
|
2259
2500
|
"resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/acpx",
|
|
3
|
-
"version": "2026.7.2-beta.
|
|
3
|
+
"version": "2026.7.2-beta.2",
|
|
4
4
|
"description": "OpenClaw ACP runtime backend with plugin-owned session and transport management.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
"type": "module",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@agentclientprotocol/claude-agent-acp": "0.55.0",
|
|
12
|
-
"@
|
|
12
|
+
"@agentclientprotocol/codex-acp": "1.1.2",
|
|
13
13
|
"acpx": "0.11.2",
|
|
14
|
+
"smol-toml": "1.7.0",
|
|
14
15
|
"zod": "4.4.3"
|
|
15
16
|
},
|
|
16
17
|
"devDependencies": {
|
|
@@ -26,10 +27,10 @@
|
|
|
26
27
|
"minHostVersion": ">=2026.4.25"
|
|
27
28
|
},
|
|
28
29
|
"compat": {
|
|
29
|
-
"pluginApi": ">=2026.7.2-beta.
|
|
30
|
+
"pluginApi": ">=2026.7.2-beta.2"
|
|
30
31
|
},
|
|
31
32
|
"build": {
|
|
32
|
-
"openclawVersion": "2026.7.2-beta.
|
|
33
|
+
"openclawVersion": "2026.7.2-beta.2",
|
|
33
34
|
"staticAssets": [
|
|
34
35
|
{
|
|
35
36
|
"source": "./src/runtime-internals/mcp-proxy.mjs",
|
|
@@ -58,7 +59,7 @@
|
|
|
58
59
|
"skills/**"
|
|
59
60
|
],
|
|
60
61
|
"peerDependencies": {
|
|
61
|
-
"openclaw": ">=2026.7.2-beta.
|
|
62
|
+
"openclaw": ">=2026.7.2-beta.2"
|
|
62
63
|
},
|
|
63
64
|
"peerDependenciesMeta": {
|
|
64
65
|
"openclaw": {
|
|
@@ -210,7 +210,7 @@ Defaults are:
|
|
|
210
210
|
|
|
211
211
|
- `openclaw -> openclaw acp`
|
|
212
212
|
- `claude -> bundled @agentclientprotocol/claude-agent-acp@0.55.0`
|
|
213
|
-
- `codex -> bundled @
|
|
213
|
+
- `codex -> bundled @agentclientprotocol/codex-acp@1.1.2 through OpenClaw's isolated CODEX_HOME wrapper`
|
|
214
214
|
- `copilot -> copilot --acp --stdio`
|
|
215
215
|
- `cursor -> cursor-agent acp`
|
|
216
216
|
- `droid -> droid exec --output-format acp`
|