@openclaw/acpx 2026.11.5-beta.1 → 2026.11.5-beta.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.
@@ -6,7 +6,7 @@ import { formatPluginConfigIssue } from "openclaw/plugin-sdk/extension-shared";
6
6
  import { resolvePackageRuntimeProcessEntrypointUrl, resolveRuntimeWorkerArgv } from "openclaw/plugin-sdk/process-runtime";
7
7
  import { resolveStateDir } from "openclaw/plugin-sdk/state-paths";
8
8
  import { isRecord, normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString } from "openclaw/plugin-sdk/string-coerce-runtime";
9
- // extensions/acpx/src/config-schema.ts
9
+ //#region extensions/acpx/src/config-schema.ts
10
10
  /**
11
11
  * ACPX plugin configuration schema and public config types. Runtime setup uses
12
12
  * this file as the single source of truth for validation and defaulting.
@@ -62,12 +62,14 @@ const AcpxPluginConfigSchema = z.strictObject({
62
62
  args: z.array(z.string({ error: "args must be an array of strings" })).optional()
63
63
  })).optional()
64
64
  });
65
- // extensions/acpx/src/codex-adapter.ts
65
+ //#endregion
66
+ //#region extensions/acpx/src/codex-adapter.ts
66
67
  const CODEX_ACP_PACKAGE = "@agentclientprotocol/codex-acp";
67
68
  const CODEX_ACP_BIN = "codex-acp";
68
69
  const LEGACY_CODEX_ACP_PACKAGE = "@zed-industries/codex-acp";
69
70
  const OPENCLAW_CODEX_CONFIG_ARG = "--openclaw-codex-config";
70
- // extensions/acpx/src/command-line.ts
71
+ //#endregion
72
+ //#region extensions/acpx/src/command-line.ts
71
73
  /** Match ACPX's persisted argv identity; scalar records keep their original bytes. */
72
74
  function renderAgentCommand(command) {
73
75
  return typeof command === "string" ? command : command.map((part) => /^[A-Za-z0-9_@%+=:,./^~-]+$/.test(part) ? part : JSON.stringify(part)).join(" ");
@@ -189,7 +191,8 @@ function resolveAgentCommand(params) {
189
191
  if (!normalizedAgentName) return;
190
192
  return splitCommandParts(params.agentRegistry.resolve(normalizedAgentName));
191
193
  }
192
- // extensions/acpx/src/config.ts
194
+ //#endregion
195
+ //#region extensions/acpx/src/config.ts
193
196
  const MANAGED_MCP_BRIDGES = [[
194
197
  "pluginToolsMcpBridge",
195
198
  "openclaw-plugin-tools",
@@ -330,4 +333,5 @@ function resolveAcpxPluginConfig(params) {
330
333
  agents
331
334
  };
332
335
  }
336
+ //#endregion
333
337
  export { isClaudeAcpCommand as a, renderAgentCommand as c, CODEX_ACP_BIN as d, CODEX_ACP_PACKAGE as f, AcpxNativeAgentsSchema as g, ACPX_NATIVE_AGENT_IDS as h, toAcpMcpServers as i, resolveAgentCommand as l, OPENCLAW_CODEX_CONFIG_ARG as m, resolveAcpxPluginRoot as n, isCodexAcpCommand as o, LEGACY_CODEX_ACP_PACKAGE as p, resolveOpenClawRoot as r, isOpenClawBridgeCommand as s, resolveAcpxPluginConfig as t, splitCommandParts as u };
@@ -7,7 +7,7 @@ import { DEFAULT_PLUGIN_APPROVAL_TIMEOUT_MS } from "openclaw/plugin-sdk/approval
7
7
  import { toErrorObject } from "openclaw/plugin-sdk/error-runtime";
8
8
  import { resolveStorePath } from "openclaw/plugin-sdk/session-store-runtime";
9
9
  import { appendSessionTranscriptMessageByIdentityStrict } from "openclaw/plugin-sdk/session-transcript-runtime";
10
- // extensions/acpx/src/harness-attempt.ts
10
+ //#region extensions/acpx/src/harness-attempt.ts
11
11
  async function runAcpHarnessAttempt(params) {
12
12
  const { input, runtime } = params;
13
13
  if (!input.agentId || !input.sessionKey) throw new Error("ACP chat requires an owned OpenClaw session");
@@ -365,4 +365,5 @@ async function runAcpHarnessAttempt(params) {
365
365
  }
366
366
  };
367
367
  }
368
+ //#endregion
368
369
  export { runAcpHarnessAttempt };
@@ -1,4 +1,4 @@
1
- import { c as PI_SESSION_READ_COMMAND, i as PI_LOCAL_SESSION_HOST_ID, l as PI_TERMINAL_RESUME_COMMAND, n as piSessionStore, o as PI_SESSIONS_LIST_COMMAND, r as piSessionStoreAvailable, s as PI_SESSION_ID_PATTERN, t as piAcpSessionStoreRoot } from "./pi-session-paths-pUr6hnVA.mjs";
1
+ import { c as PI_SESSION_READ_COMMAND, i as PI_LOCAL_SESSION_HOST_ID, l as PI_TERMINAL_RESUME_COMMAND, n as piSessionStore, o as PI_SESSIONS_LIST_COMMAND, r as piSessionStoreAvailable, s as PI_SESSION_ID_PATTERN, t as piAcpSessionStoreRoot } from "./pi-session-paths-Cn5bsvi0.mjs";
2
2
  import { parseDateFirstTimestampMs, timestampMsToIsoString } from "openclaw/plugin-sdk/number-runtime";
3
3
  import { createReadStream } from "node:fs";
4
4
  import path from "node:path";
@@ -15,7 +15,7 @@ import fs$1 from "node:fs/promises";
15
15
  import { pruneMapToMaxSize } from "openclaw/plugin-sdk/collection-runtime";
16
16
  import { runTasksWithConcurrency } from "openclaw/plugin-sdk/concurrency-runtime";
17
17
  import { isPathStrictlyInside } from "openclaw/plugin-sdk/file-access-runtime";
18
- // extensions/acpx/src/pi-session-store.ts
18
+ //#region extensions/acpx/src/pi-session-store.ts
19
19
  const MAX_DISCOVERY_FILES = 1e4;
20
20
  const SUMMARY_SCAN_BATCH_SIZE = 100;
21
21
  const MAX_SUMMARY_CACHE_ENTRIES = 256;
@@ -328,7 +328,8 @@ async function readPiSessionById(threadId, env) {
328
328
  throw new Error("Pi session is unavailable", { cause: error });
329
329
  }
330
330
  }
331
- // extensions/acpx/src/pi-session-catalog.ts
331
+ //#endregion
332
+ //#region extensions/acpx/src/pi-session-catalog.ts
332
333
  const MAX_SEARCH_LENGTH = 500;
333
334
  const isExactPiSessionCursor = sessionCatalogPaging.isExactCursor;
334
335
  const PI_PARAMETER_MESSAGES = {
@@ -508,7 +509,8 @@ async function readLocalPiTranscriptPage(value) {
508
509
  ...page
509
510
  };
510
511
  }
511
- // extensions/acpx/src/pi-session-upstream-activity.ts
512
+ //#endregion
513
+ //#region extensions/acpx/src/pi-session-upstream-activity.ts
512
514
  function readFilePath(probe) {
513
515
  return isRecord(probe.upstreamRef) && typeof probe.upstreamRef.filePath === "string" ? probe.upstreamRef.filePath : void 0;
514
516
  }
@@ -558,7 +560,8 @@ async function checkPiUpstreamActivity(probes) {
558
560
  } catch {}
559
561
  return outcomes;
560
562
  }
561
- // extensions/acpx/src/pi-session-catalog-runtime.ts
563
+ //#endregion
564
+ //#region extensions/acpx/src/pi-session-catalog-runtime.ts
562
565
  const NODE_TIMEOUT_MS = 2e4;
563
566
  const ACPX_BACKEND_ID = "acpx";
564
567
  const PI_ACP_AGENT_ID = "pi";
@@ -692,4 +695,5 @@ function createPiSessionCatalogRuntime(api) {
692
695
  checkUpstreamActivity: (probes, policy) => checkPiUpstreamActivity(probes.filter((probe) => probe.hostId !== "gateway" || policy?.allowProcessHomeFallback !== false || !piSessionStore(process.env).usesProcessHomeFallback))
693
696
  }, isExactPiSessionCursor);
694
697
  }
698
+ //#endregion
695
699
  export { createPiSessionCatalogRuntime, listLocalPiSessionPage as listPiSessions, readLocalPiTranscriptPage as readPiSession, requireLocalPiSession };
@@ -2,14 +2,15 @@ import { readFileSync, statSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { isRecord, normalizeBoundedOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import os from "node:os";
5
- // extensions/acpx/src/pi-session-catalog-shared.ts
5
+ //#region extensions/acpx/src/pi-session-catalog-shared.ts
6
6
  const PI_SESSIONS_LIST_COMMAND = "acpx.pi.sessions.list.v1";
7
7
  const PI_SESSION_READ_COMMAND = "acpx.pi.sessions.read.v1";
8
8
  const PI_TERMINAL_RESUME_COMMAND = "acpx.pi.terminal.resume.v1";
9
9
  const PI_SESSIONS_CAPABILITY = "pi-sessions";
10
10
  const PI_LOCAL_SESSION_HOST_ID = "gateway";
11
11
  const PI_SESSION_ID_PATTERN = /^(?!-)[A-Za-z0-9._:-]{1,256}$/u;
12
- // extensions/acpx/src/pi-session-paths.ts
12
+ //#endregion
13
+ //#region extensions/acpx/src/pi-session-paths.ts
13
14
  function piHome(env) {
14
15
  return (process.platform === "win32" ? env.USERPROFILE?.trim() : env.HOME?.trim()) || os.homedir();
15
16
  }
@@ -79,4 +80,5 @@ function piSessionStoreAvailable(env, store) {
79
80
  return false;
80
81
  }
81
82
  }
83
+ //#endregion
82
84
  export { PI_SESSIONS_CAPABILITY as a, PI_SESSION_READ_COMMAND as c, PI_LOCAL_SESSION_HOST_ID as i, PI_TERMINAL_RESUME_COMMAND as l, piSessionStore as n, PI_SESSIONS_LIST_COMMAND as o, piSessionStoreAvailable as r, PI_SESSION_ID_PATTERN as s, piAcpSessionStoreRoot as t };
@@ -1,5 +1,5 @@
1
1
  import "node:module";
2
- // \0rolldown/runtime.js
2
+ //#region \0rolldown/runtime.js
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -24,7 +24,8 @@ var __copyProps = (to, from, except, desc) => {
24
24
  return to;
25
25
  };
26
26
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
27
- // packages/normalization-core/src/record-coerce.ts
27
+ //#endregion
28
+ //#region packages/normalization-core/src/record-coerce.ts
28
29
  /** Type guard for non-array object records at browser-safe boundaries. */
29
30
  function isRecord(value) {
30
31
  return value !== null && typeof value === "object" && !Array.isArray(value);
@@ -33,7 +34,8 @@ function isRecord(value) {
33
34
  function asNullableRecord(value) {
34
35
  return isRecord(value) ? value : null;
35
36
  }
36
- // src/config/channel-config-normalization.ts
37
+ //#endregion
38
+ //#region src/config/channel-config-normalization.ts
37
39
  /** Applies one channel-specific doctor migration to every object-shaped account. */
38
40
  function normalizeChannelAccounts(params) {
39
41
  const rawAccounts = asNullableRecord(params.entry.accounts);
@@ -109,7 +111,8 @@ function normalizeChannelConfigEntries(params) {
109
111
  changes
110
112
  };
111
113
  }
112
- // src/plugin-sdk/legacy-webhook-listener-migration.ts
114
+ //#endregion
115
+ //#region src/plugin-sdk/legacy-webhook-listener-migration.ts
113
116
  /** Preserve explicitly configured webhook listeners while moving ingress onto Gateway routes. */
114
117
  function createLegacyWebhookListenerDoctorContract(params) {
115
118
  const portKey = params.portKey ?? "webhookPort";
@@ -179,8 +182,10 @@ function createLegacyWebhookListenerDoctorContract(params) {
179
182
  }
180
183
  };
181
184
  }
182
- // \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
185
+ //#endregion
186
+ //#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
183
187
  var runtime_doctor_migrations_exports = /* @__PURE__ */ __exportAll({ createLegacyWebhookListenerDoctorContract: () => createLegacyWebhookListenerDoctorContract });
184
188
  import * as import_openclaw_plugin_sdk_runtime_doctor_migrations from "openclaw/plugin-sdk/runtime-doctor-migrations";
185
189
  __reExport(runtime_doctor_migrations_exports, import_openclaw_plugin_sdk_runtime_doctor_migrations);
190
+ //#endregion
186
191
  export { __exportAll as n, runtime_doctor_migrations_exports as t };
@@ -1,7 +1,7 @@
1
- import { a as isClaudeAcpCommand, c as renderAgentCommand, d as CODEX_ACP_BIN, f as CODEX_ACP_PACKAGE, i as toAcpMcpServers, l as resolveAgentCommand, m as OPENCLAW_CODEX_CONFIG_ARG, n as resolveAcpxPluginRoot, o as isCodexAcpCommand, p as LEGACY_CODEX_ACP_PACKAGE, r as resolveOpenClawRoot, s as isOpenClawBridgeCommand, t as resolveAcpxPluginConfig, u as splitCommandParts } from "./config-Cplh34lQ.mjs";
1
+ import { a as isClaudeAcpCommand, c as renderAgentCommand, d as CODEX_ACP_BIN, f as CODEX_ACP_PACKAGE, i as toAcpMcpServers, l as resolveAgentCommand, m as OPENCLAW_CODEX_CONFIG_ARG, n as resolveAcpxPluginRoot, o as isCodexAcpCommand, p as LEGACY_CODEX_ACP_PACKAGE, r as resolveOpenClawRoot, s as isOpenClawBridgeCommand, t as resolveAcpxPluginConfig, u as splitCommandParts } from "./config-DZaY96RI.mjs";
2
2
  import { AcpRuntimeError } from "../runtime-api.js";
3
- import { t as resolveAcpxSessionResource } from "./session-resource-D_tXKvcv.mjs";
4
- import { a as hashAcpxProcessCommand, adoptAcpxStateDirectory, c as withAcpxLeaseArgs, d as normalizeAcpxGatewayInstanceRecord, i as createAcpxProcessLeaseStore, l as ACPX_GATEWAY_INSTANCE_KEY, n as OPENCLAW_ACPX_LEASE_ID_ARG, o as openAcpxProcessLeaseStateStore, r as OPENCLAW_GATEWAY_INSTANCE_ID_ARG, s as readAcpxProcessLeaseIdentity, t as ACPX_PROBE_LEASE_SESSION_KEY, u as ACPX_GATEWAY_INSTANCE_NAMESPACE } from "./session-owner-migration-CQA7L68K.mjs";
3
+ import { t as resolveAcpxSessionResource } from "./session-resource-BI93OF1C.mjs";
4
+ import { a as hashAcpxProcessCommand, adoptAcpxStateDirectory, c as withAcpxLeaseArgs, d as normalizeAcpxGatewayInstanceRecord, i as createAcpxProcessLeaseStore, l as ACPX_GATEWAY_INSTANCE_KEY, n as OPENCLAW_ACPX_LEASE_ID_ARG, o as openAcpxProcessLeaseStateStore, r as OPENCLAW_GATEWAY_INSTANCE_ID_ARG, s as readAcpxProcessLeaseIdentity, t as ACPX_PROBE_LEASE_SESSION_KEY, u as ACPX_GATEWAY_INSTANCE_NAMESPACE } from "./session-owner-migration-BmfOUj9h.mjs";
5
5
  import { createRequire } from "node:module";
6
6
  import { finiteSecondsToTimerSafeMilliseconds } from "openclaw/plugin-sdk/number-runtime";
7
7
  import fs from "node:fs";
@@ -22,7 +22,7 @@ import { AsyncLocalStorage } from "node:async_hooks";
22
22
  import { isDeepStrictEqual } from "node:util";
23
23
  import { redactSensitiveText } from "openclaw/plugin-sdk/security-runtime";
24
24
  import { KeyedAsyncQueue } from "openclaw/plugin-sdk/keyed-async-queue";
25
- // extensions/acpx/src/adapter-wrapper-script.ts
25
+ //#region extensions/acpx/src/adapter-wrapper-script.ts
26
26
  const RUN_CONFIGURED_COMMAND_SENTINEL = "--openclaw-run-configured";
27
27
  const DIAGNOSTIC_REDACTION_RULES = [
28
28
  {
@@ -485,7 +485,8 @@ child.on("close", () => {
485
485
  main();
486
486
  `;
487
487
  }
488
- // extensions/acpx/src/codex-trust-config.ts
488
+ //#endregion
489
+ //#region extensions/acpx/src/codex-trust-config.ts
489
490
  const INHERITED_TOP_LEVEL_CODEX_CONFIG_KEYS = /* @__PURE__ */ new Set([
490
491
  "model",
491
492
  "model_provider",
@@ -534,7 +535,8 @@ function renderIsolatedCodexConfig(params) {
534
535
  ""
535
536
  ].filter((line, index, lines) => !(line === "" && lines[index - 1] === "")).join("\n");
536
537
  }
537
- // extensions/acpx/src/codex-auth-bridge.ts
538
+ //#endregion
539
+ //#region extensions/acpx/src/codex-auth-bridge.ts
538
540
  /**
539
541
  * Prepares isolated Codex and Claude ACP wrapper commands for ACPX. The bridge
540
542
  * copies safe auth/config state into plugin-owned homes and redacts diagnostics.
@@ -847,7 +849,8 @@ async function prepareAcpxCodexAuthConfig(params) {
847
849
  }
848
850
  };
849
851
  }
850
- // extensions/acpx/src/process-reaper.ts
852
+ //#endregion
853
+ //#region extensions/acpx/src/process-reaper.ts
851
854
  /**
852
855
  * ACPX process ownership checks and cleanup. The reaper only terminates
853
856
  * OpenClaw-owned wrapper trees after validating paths, packages, and lease ids.
@@ -1098,7 +1101,8 @@ async function reapStaleOpenClawOwnedAcpxOrphans(params) {
1098
1101
  wrapperRoot: params.wrapperRoot
1099
1102
  })).map((orphan) => collectProcessTree(processes, orphan.pid)).flatMap((tree) => tree.toReversed())), params.assertCurrent) };
1100
1103
  }
1101
- // extensions/acpx/src/model-ref.ts
1104
+ //#endregion
1105
+ //#region extensions/acpx/src/model-ref.ts
1102
1106
  function withAcpxSessionOptions(input) {
1103
1107
  const model = input.model?.trim() || input.sessionOptions?.model;
1104
1108
  const sessionOptions = model ? {
@@ -1137,7 +1141,8 @@ async function ensureSessionWithModelRef(ensureSession, input) {
1137
1141
  };
1138
1142
  }
1139
1143
  }
1140
- // extensions/acpx/src/runtime-generations.ts
1144
+ //#endregion
1145
+ //#region extensions/acpx/src/runtime-generations.ts
1141
1146
  var AcpxGenerationRegistry = class {
1142
1147
  constructor(sessionStore, delegate, createDelegate) {
1143
1148
  this.sessionStore = sessionStore;
@@ -1262,7 +1267,8 @@ var AcpxGenerationRegistry = class {
1262
1267
  this.isolatedSessionResources.clear();
1263
1268
  }
1264
1269
  };
1265
- // extensions/acpx/src/runtime-probe.ts
1270
+ //#endregion
1271
+ //#region extensions/acpx/src/runtime-probe.ts
1266
1272
  var AcpxRuntimeProbe = class {
1267
1273
  constructor(params) {
1268
1274
  this.params = params;
@@ -1295,7 +1301,8 @@ var AcpxRuntimeProbe = class {
1295
1301
  await this.tail;
1296
1302
  }
1297
1303
  };
1298
- // extensions/acpx/src/runtime-session-store.ts
1304
+ //#endregion
1305
+ //#region extensions/acpx/src/runtime-session-store.ts
1299
1306
  /** Generation-bound persistence and process-lease metadata for ACPX resets. */
1300
1307
  function withOpenClawLeaseSessionMetadata(record, lease) {
1301
1308
  return {
@@ -1416,7 +1423,8 @@ function createResetAwareSessionStore(baseStore, params) {
1416
1423
  }
1417
1424
  };
1418
1425
  }
1419
- // extensions/acpx/src/runtime-process-cleanup.ts
1426
+ //#endregion
1427
+ //#region extensions/acpx/src/runtime-process-cleanup.ts
1420
1428
  /** Capture OpenClaw wrapper cleanup ownership before a backend close can yield. */
1421
1429
  async function prepareAcpxProcessCleanup(params) {
1422
1430
  const { leaseStore, gatewayInstanceId, wrapperRoot } = params;
@@ -1462,7 +1470,8 @@ async function prepareAcpxProcessCleanup(params) {
1462
1470
  });
1463
1471
  };
1464
1472
  }
1465
- // extensions/acpx/src/session-owner.ts
1473
+ //#endregion
1474
+ //#region extensions/acpx/src/session-owner.ts
1466
1475
  function requireAcpxOwnerMigration(sessionKey) {
1467
1476
  throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", `ACP session "${sessionKey}" has an unqualified or unverifiable backend locator. Stop the Gateway and run "openclaw doctor --fix" to migrate ownership without losing history, then restart.`, { detailCode: "SESSION_OWNER_MIGRATION_REQUIRED" });
1468
1477
  }
@@ -1491,7 +1500,8 @@ function toAcpxResourceInput(input) {
1491
1500
  }
1492
1501
  };
1493
1502
  }
1494
- // extensions/acpx/src/runtime.ts
1503
+ //#endregion
1504
+ //#region extensions/acpx/src/runtime.ts
1495
1505
  /**
1496
1506
  * OpenClaw ACPX runtime adapter. It wraps the upstream acpx runtime with
1497
1507
  * OpenClaw session metadata, lease tracking, model scoping, and cleanup policy.
@@ -2219,7 +2229,8 @@ var AcpxRuntime$1 = class {
2219
2229
  });
2220
2230
  }
2221
2231
  };
2222
- // extensions/acpx/src/service.ts
2232
+ //#endregion
2233
+ //#region extensions/acpx/src/service.ts
2223
2234
  const ENABLE_STARTUP_PROBE_ENV = "OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE";
2224
2235
  const SKIP_RUNTIME_PROBE_ENV = "OPENCLAW_SKIP_ACPX_RUNTIME_PROBE";
2225
2236
  const MAX_ACPX_TOKIO_WORKER_THREADS = 8;
@@ -2427,4 +2438,5 @@ function createAcpxRuntimeService(params) {
2427
2438
  }
2428
2439
  };
2429
2440
  }
2441
+ //#endregion
2430
2442
  export { createAcpxRuntimeService };
@@ -1,12 +1,12 @@
1
- import { t as runtime_doctor_migrations_exports } from "./runtime-doctor-migrations-CSvRANPN.mjs";
2
- import { c as renderAgentCommand, t as resolveAcpxPluginConfig, u as splitCommandParts } from "./config-Cplh34lQ.mjs";
1
+ import { t as runtime_doctor_migrations_exports } from "./runtime-doctor-migrations-hxP-CXX7.mjs";
2
+ import { c as renderAgentCommand, t as resolveAcpxPluginConfig, u as splitCommandParts } from "./config-DZaY96RI.mjs";
3
3
  import path from "node:path";
4
4
  import { asFiniteNumber, asOptionalObjectRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { createHash } from "node:crypto";
6
6
  import fs from "node:fs/promises";
7
7
  import { isDeepStrictEqual } from "node:util";
8
8
  import { movePathWithCopyFallback } from "openclaw/plugin-sdk/security-runtime";
9
- // extensions/acpx/src/state.ts
9
+ //#region extensions/acpx/src/state.ts
10
10
  const ACPX_PROCESS_LEASE_NAMESPACE = "process-leases";
11
11
  const ACPX_PROCESS_LEASE_MAX_ENTRIES = 4096;
12
12
  const ACPX_GATEWAY_INSTANCE_NAMESPACE = "gateway-instance";
@@ -20,7 +20,8 @@ function normalizeAcpxGatewayInstanceRecord(value) {
20
20
  createdAt: Math.trunc(asFiniteNumber(record?.createdAt) ?? 0)
21
21
  };
22
22
  }
23
- // extensions/acpx/src/process-lease.ts
23
+ //#endregion
24
+ //#region extensions/acpx/src/process-lease.ts
24
25
  const OPENCLAW_ACPX_LEASE_ID_ARG = "--openclaw-acpx-lease-id";
25
26
  const OPENCLAW_GATEWAY_INSTANCE_ID_ARG = "--openclaw-gateway-instance-id";
26
27
  /** Synthetic session identity for generated-wrapper health probes. */
@@ -118,7 +119,8 @@ function withAcpxLeaseArgs(params) {
118
119
  params.gatewayInstanceId
119
120
  ];
120
121
  }
121
- // extensions/acpx/src/session-owner-migration.ts
122
+ //#endregion
123
+ //#region extensions/acpx/src/session-owner-migration.ts
122
124
  function openStateDirectoryMarker(input) {
123
125
  return input.openKeyedStore({
124
126
  namespace: "state-directory-migration",
@@ -228,7 +230,7 @@ async function legacyRecords(input, directory = sessionDirectory(input)) {
228
230
  directory,
229
231
  ids
230
232
  };
231
- const { resolveAcpxSessionResource } = await import("./session-resource-D_tXKvcv.mjs").then((n) => n.n);
233
+ const { resolveAcpxSessionResource } = await import("./session-resource-BI93OF1C.mjs").then((n) => n.n);
232
234
  const evidence = await input.context.inspectAcpSessionClaims?.();
233
235
  const { decodeAcpxRuntimeHandleState } = await import("acpx/runtime");
234
236
  return {
@@ -271,7 +273,7 @@ async function migrateRecord(input, directory, oldId, claims, changes, warnings)
271
273
  const raw = (0, runtime_doctor_migrations_exports.asObjectRecord)(JSON.parse((0, runtime_doctor_migrations_exports.decodeUtf8Input)(sourceBytes, `ACP record ${sourcePath}`)));
272
274
  if (!raw || raw.acpx_record_id !== oldId || typeof raw.name !== "string" || !raw.name.trim() || raw.name !== oldId && !oldId.startsWith(`${raw.name}:oneshot:`)) throw new Error("record ID/name is not a recognized ACPX locator");
273
275
  requireStoppedPid(raw.pid);
274
- const { resolveAcpxSessionResource } = await import("./session-resource-D_tXKvcv.mjs").then((n) => n.n);
276
+ const { resolveAcpxSessionResource } = await import("./session-resource-BI93OF1C.mjs").then((n) => n.n);
275
277
  const { createFileSessionStore, decodeAcpxRuntimeHandleState, encodeAcpxRuntimeHandleState } = await import("acpx/runtime");
276
278
  const candidates = claims.filter((claim) => matchesClaimRecord(claim, raw, oldId, resolveAcpxSessionResource(claim), decodeAcpxRuntimeHandleState));
277
279
  if (candidates.length !== 1) throw new Error("exactly one current owner claim is required");
@@ -428,4 +430,5 @@ const acpxSessionOwnerMigration = {
428
430
  };
429
431
  }
430
432
  };
433
+ //#endregion
431
434
  export { hashAcpxProcessCommand as a, acpxSessionOwnerMigration, adoptAcpxStateDirectory, withAcpxLeaseArgs as c, normalizeAcpxGatewayInstanceRecord as d, createAcpxProcessLeaseStore as i, ACPX_GATEWAY_INSTANCE_KEY as l, OPENCLAW_ACPX_LEASE_ID_ARG as n, openAcpxProcessLeaseStateStore as o, OPENCLAW_GATEWAY_INSTANCE_ID_ARG as r, readAcpxProcessLeaseIdentity as s, ACPX_PROBE_LEASE_SESSION_KEY as t, ACPX_GATEWAY_INSTANCE_NAMESPACE as u };
@@ -1,8 +1,8 @@
1
- import { n as __exportAll } from "./runtime-doctor-migrations-CSvRANPN.mjs";
1
+ import { n as __exportAll } from "./runtime-doctor-migrations-hxP-CXX7.mjs";
2
2
  import { AcpRuntimeError } from "../runtime-api.js";
3
3
  import { sha256Hex } from "openclaw/plugin-sdk/node-crypto-runtime";
4
4
  import { normalizeAgentId, parseAgentSessionKey } from "openclaw/plugin-sdk/routing";
5
- // extensions/acpx/src/session-resource.ts
5
+ //#region extensions/acpx/src/session-resource.ts
6
6
  var session_resource_exports = /* @__PURE__ */ __exportAll({ resolveAcpxSessionResource: () => resolveAcpxSessionResource });
7
7
  /** Logical OpenClaw keys stay intact; only bare backend resource names need a namespace. */
8
8
  function resolveAcpxSessionResource(target) {
@@ -13,4 +13,5 @@ function resolveAcpxSessionResource(target) {
13
13
  if (encodedOwner) return sessionKey;
14
14
  return `openclaw-owner-v1-${sha256Hex(JSON.stringify([agentId, sessionKey]))}`;
15
15
  }
16
+ //#endregion
16
17
  export { session_resource_exports as n, resolveAcpxSessionResource as t };
@@ -1 +1 @@
1
- {"version":3,"entries":[{"output":"doctor-contract-api.js","source":"extensions/acpx/doctor-contract-api.ts"},{"output":"index.js","source":"extensions/acpx/index.ts"},{"output":"runtime-api.js","source":"extensions/acpx/runtime-api.ts"},{"output":"setup-api.js","source":"extensions/acpx/setup-api.ts"}],"chunks":[{"output":".setup/config-Cplh34lQ.mjs","sha256":"d26588a4061ab1327c1c8f3b226d58b18f32167dae0c6cc88f39008eabab7a5d","facadeSource":null,"sources":["extensions/acpx/src/codex-adapter.ts","extensions/acpx/src/command-line.ts","extensions/acpx/src/config-schema.ts","extensions/acpx/src/config.ts"]},{"output":".setup/harness-attempt-Co9oLpPg.mjs","sha256":"1f4ff7f279f78641c8b0160aad3be6062ae981c184bc2a15088678e2db4d6add","facadeSource":"extensions/acpx/src/harness-attempt.ts","sources":["extensions/acpx/src/harness-attempt.ts"]},{"output":".setup/pi-session-catalog-runtime-DgzkbadO.mjs","sha256":"52b9233beb364ff104c8e7a6044cc746aaa883c49fa915ce39bbd32d0b9dd90d","facadeSource":"extensions/acpx/src/pi-session-catalog-runtime.ts","sources":["extensions/acpx/src/pi-session-catalog-runtime.ts","extensions/acpx/src/pi-session-catalog.ts","extensions/acpx/src/pi-session-store.ts","extensions/acpx/src/pi-session-upstream-activity.ts"]},{"output":".setup/pi-session-paths-pUr6hnVA.mjs","sha256":"da9568f3f583d68ff895d109855b4e61cb680e6550019dc3b7c643d08696dab0","facadeSource":null,"sources":["extensions/acpx/src/pi-session-catalog-shared.ts","extensions/acpx/src/pi-session-paths.ts"]},{"output":".setup/runtime-doctor-migrations-CSvRANPN.mjs","sha256":"0f9941caf2101d12539e47fd11f7da27fd330dd82bf8e80cdc11d8fd81ae2c6f","facadeSource":null,"sources":["packages/normalization-core/src/record-coerce.ts","src/config/channel-config-normalization.ts","src/plugin-sdk/legacy-webhook-listener-migration.ts"]},{"output":".setup/service-DmgP1gPb.mjs","sha256":"36916a546c59602225008bd4dbb4e88482a78f3b4dde9a9239d23f335ad00832","facadeSource":"extensions/acpx/src/service.ts","sources":["extensions/acpx/src/adapter-wrapper-script.ts","extensions/acpx/src/codex-auth-bridge.ts","extensions/acpx/src/codex-trust-config.ts","extensions/acpx/src/model-ref.ts","extensions/acpx/src/process-reaper.ts","extensions/acpx/src/runtime-generations.ts","extensions/acpx/src/runtime-probe.ts","extensions/acpx/src/runtime-process-cleanup.ts","extensions/acpx/src/runtime-session-store.ts","extensions/acpx/src/runtime.ts","extensions/acpx/src/service.ts","extensions/acpx/src/session-owner.ts"]},{"output":".setup/session-owner-migration-CQA7L68K.mjs","sha256":"26ed540907ae4bed933ec1c0c7211e8a3d5225ed17385bf047cf597a2c83c836","facadeSource":"extensions/acpx/src/session-owner-migration.ts","sources":["extensions/acpx/src/process-lease.ts","extensions/acpx/src/session-owner-migration.ts","extensions/acpx/src/state.ts"]},{"output":".setup/session-resource-D_tXKvcv.mjs","sha256":"dc4ea50fd410b0dadaf6c5fe5924a7e95d4c109d3128825d5bf999b668ac52f2","facadeSource":null,"sources":["extensions/acpx/src/session-resource.ts"]},{"output":"doctor-contract-api.js","sha256":"b93f9058efbf3d385e9a5168c563e68cdcb6caecf6e7e9fc4d15f7da0bb75070","facadeSource":"extensions/acpx/doctor-contract-api.ts","sources":["extensions/acpx/doctor-contract-api.ts"]},{"output":"index.js","sha256":"6a9615e8a9892102569672a50c1e63b6594b8edebe0f6ba9f286053af1b45399","facadeSource":"extensions/acpx/index.ts","sources":["extensions/acpx/index.ts","extensions/acpx/src/harness.ts","extensions/acpx/src/native-agents.ts","extensions/acpx/src/pi-session-catalog-plugin.ts","extensions/acpx/src/runtime-proxy.ts"]},{"output":"runtime-api.js","sha256":"fc9734d9dfabafe7281fca6ede1415215a44ac03bd0aa798fce919d11ae68605","facadeSource":"extensions/acpx/runtime-api.ts","sources":[]},{"output":"setup-api.js","sha256":"8251d1074687501cbbb6aee52f51d74113118f5c93570733c3a2544f9beeac31","facadeSource":"extensions/acpx/setup-api.ts","sources":["extensions/acpx/setup-api.ts"]}],"unrenderedSources":["extensions/acpx/runtime-api.ts"]}
1
+ {"version":3,"entries":[{"output":"doctor-contract-api.js","source":"extensions/acpx/doctor-contract-api.ts"},{"output":"index.js","source":"extensions/acpx/index.ts"},{"output":"runtime-api.js","source":"extensions/acpx/runtime-api.ts"},{"output":"setup-api.js","source":"extensions/acpx/setup-api.ts"}],"chunks":[{"output":".setup/config-DZaY96RI.mjs","sha256":"625fd5fe477dc20fbbc1575bd943359c360285d90e66f28f35637a094c6a554b","facadeSource":null,"sources":["extensions/acpx/src/codex-adapter.ts","extensions/acpx/src/command-line.ts","extensions/acpx/src/config-schema.ts","extensions/acpx/src/config.ts"]},{"output":".setup/harness-attempt-CR7gvC_C.mjs","sha256":"25d8bb8a268da63e16b5f97c09d3e79ea591d84cbf5fe60f5c90a7482aca31b8","facadeSource":"extensions/acpx/src/harness-attempt.ts","sources":["extensions/acpx/src/harness-attempt.ts"]},{"output":".setup/pi-session-catalog-runtime-hFy095NF.mjs","sha256":"053d9f772cbb8ceebbf14c2f34975da0bb9cb718a7381c0a97d306ef790152e9","facadeSource":"extensions/acpx/src/pi-session-catalog-runtime.ts","sources":["extensions/acpx/src/pi-session-catalog-runtime.ts","extensions/acpx/src/pi-session-catalog.ts","extensions/acpx/src/pi-session-store.ts","extensions/acpx/src/pi-session-upstream-activity.ts"]},{"output":".setup/pi-session-paths-Cn5bsvi0.mjs","sha256":"08a8154298de4f15b938f1a2658e89c0cb4523781ae16ff14eb8e6314d343173","facadeSource":null,"sources":["extensions/acpx/src/pi-session-catalog-shared.ts","extensions/acpx/src/pi-session-paths.ts"]},{"output":".setup/runtime-doctor-migrations-hxP-CXX7.mjs","sha256":"5e20ed323f11ae0bd7d3a940409f89b15f676828463579f8ea705f5153368d1f","facadeSource":null,"sources":["packages/normalization-core/src/record-coerce.ts","src/config/channel-config-normalization.ts","src/plugin-sdk/legacy-webhook-listener-migration.ts"]},{"output":".setup/service-By25n8eI.mjs","sha256":"e89a981a4ca99e013f81b82982d6bfc1273d5483ff2cdbcc322618dffde2ba18","facadeSource":"extensions/acpx/src/service.ts","sources":["extensions/acpx/src/adapter-wrapper-script.ts","extensions/acpx/src/codex-auth-bridge.ts","extensions/acpx/src/codex-trust-config.ts","extensions/acpx/src/model-ref.ts","extensions/acpx/src/process-reaper.ts","extensions/acpx/src/runtime-generations.ts","extensions/acpx/src/runtime-probe.ts","extensions/acpx/src/runtime-process-cleanup.ts","extensions/acpx/src/runtime-session-store.ts","extensions/acpx/src/runtime.ts","extensions/acpx/src/service.ts","extensions/acpx/src/session-owner.ts"]},{"output":".setup/session-owner-migration-BmfOUj9h.mjs","sha256":"776a69a9374ae1fc991fe4338a3974a979f4abe7628fb95979f62983c01be73d","facadeSource":"extensions/acpx/src/session-owner-migration.ts","sources":["extensions/acpx/src/process-lease.ts","extensions/acpx/src/session-owner-migration.ts","extensions/acpx/src/state.ts"]},{"output":".setup/session-resource-BI93OF1C.mjs","sha256":"d0778cae638d2d0301b339f02487c17e85bd610b74e7ed16727dd8369c3cb789","facadeSource":null,"sources":["extensions/acpx/src/session-resource.ts"]},{"output":"doctor-contract-api.js","sha256":"c860218ced54e76883f4f3a71e6d24a1fa3bc6b5927a605755f66626a7a57bb4","facadeSource":"extensions/acpx/doctor-contract-api.ts","sources":["extensions/acpx/doctor-contract-api.ts"]},{"output":"index.js","sha256":"ec8d13ac6177d11fb9fe90e6964887ef4a4de5ec4de1d518f8da1d49d595b948","facadeSource":"extensions/acpx/index.ts","sources":["extensions/acpx/index.ts","extensions/acpx/src/harness.ts","extensions/acpx/src/native-agents.ts","extensions/acpx/src/pi-session-catalog-plugin.ts","extensions/acpx/src/runtime-proxy.ts"]},{"output":"runtime-api.js","sha256":"fc9734d9dfabafe7281fca6ede1415215a44ac03bd0aa798fce919d11ae68605","facadeSource":"extensions/acpx/runtime-api.ts","sources":[]},{"output":"setup-api.js","sha256":"325620704c2d29397d30e6df9e239a8390e0372a3e6ab4c9c2b29182173a6af8","facadeSource":"extensions/acpx/setup-api.ts","sources":["extensions/acpx/setup-api.ts"]}],"unrenderedSources":["extensions/acpx/runtime-api.ts"]}
@@ -1,5 +1,5 @@
1
- import { t as runtime_doctor_migrations_exports } from "./.setup/runtime-doctor-migrations-CSvRANPN.mjs";
2
- // extensions/acpx/doctor-contract-api.ts
1
+ import { t as runtime_doctor_migrations_exports } from "./.setup/runtime-doctor-migrations-hxP-CXX7.mjs";
2
+ //#region extensions/acpx/doctor-contract-api.ts
3
3
  const ACPX_CONFIG_PATH = [
4
4
  "plugins",
5
5
  "entries",
@@ -46,13 +46,14 @@ const stateMigrations = [{
46
46
  doctorOnly: true,
47
47
  phase: "after-session-repair",
48
48
  async collectBackupResources(input) {
49
- return (await import("./.setup/session-owner-migration-CQA7L68K.mjs")).acpxSessionOwnerMigration.collectBackupResources(input);
49
+ return (await import("./.setup/session-owner-migration-BmfOUj9h.mjs")).acpxSessionOwnerMigration.collectBackupResources(input);
50
50
  },
51
51
  async detectLegacyState(input) {
52
- return (await import("./.setup/session-owner-migration-CQA7L68K.mjs")).acpxSessionOwnerMigration.detectLegacyState(input);
52
+ return (await import("./.setup/session-owner-migration-BmfOUj9h.mjs")).acpxSessionOwnerMigration.detectLegacyState(input);
53
53
  },
54
54
  async migrateLegacyState(input) {
55
- return (await import("./.setup/session-owner-migration-CQA7L68K.mjs")).acpxSessionOwnerMigration.migrateLegacyState(input);
55
+ return (await import("./.setup/session-owner-migration-BmfOUj9h.mjs")).acpxSessionOwnerMigration.migrateLegacyState(input);
56
56
  }
57
57
  }];
58
+ //#endregion
58
59
  export { legacyConfigRules, normalizeCompatibilityConfig, stateMigrations };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { g as AcpxNativeAgentsSchema, h as ACPX_NATIVE_AGENT_IDS, t as resolveAcpxPluginConfig } from "./.setup/config-Cplh34lQ.mjs";
2
- import { a as PI_SESSIONS_CAPABILITY, c as PI_SESSION_READ_COMMAND, l as PI_TERMINAL_RESUME_COMMAND, o as PI_SESSIONS_LIST_COMMAND, r as piSessionStoreAvailable, s as PI_SESSION_ID_PATTERN } from "./.setup/pi-session-paths-pUr6hnVA.mjs";
1
+ import { g as AcpxNativeAgentsSchema, h as ACPX_NATIVE_AGENT_IDS, t as resolveAcpxPluginConfig } from "./.setup/config-DZaY96RI.mjs";
2
+ import { a as PI_SESSIONS_CAPABILITY, c as PI_SESSION_READ_COMMAND, l as PI_TERMINAL_RESUME_COMMAND, o as PI_SESSIONS_LIST_COMMAND, r as piSessionStoreAvailable, s as PI_SESSION_ID_PATTERN } from "./.setup/pi-session-paths-Cn5bsvi0.mjs";
3
3
  import { createAgentRegistry } from "acpx/agent-registry";
4
4
  import { getAcpRuntimeBackend, registerAcpRuntimeBackend, requireAcpRuntimeBackend, tryDispatchAcpReplyHook, unregisterAcpRuntimeBackend } from "openclaw/plugin-sdk/acp-runtime-backend";
5
5
  import { createLazyRuntimeMethodBinder, createLazyRuntimeModule, createLazyRuntimeSurface } from "openclaw/plugin-sdk/lazy-runtime";
@@ -7,7 +7,7 @@ import { finiteSecondsToTimerSafeMilliseconds } from "openclaw/plugin-sdk/number
7
7
  import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  import { resolveNodeHostExecutable } from "openclaw/plugin-sdk/node-host";
9
9
  import { createSessionCatalogNodeHostBindings } from "openclaw/plugin-sdk/session-catalog";
10
- // extensions/acpx/src/native-agents.ts
10
+ //#region extensions/acpx/src/native-agents.ts
11
11
  function isAcpxNativeAgentEnabled(flags, agent) {
12
12
  return AcpxNativeAgentsSchema.parse(flags)?.[agent] !== false;
13
13
  }
@@ -24,7 +24,8 @@ function listAcpxNativeAgents(rawConfig, agents) {
24
24
  enabled: enabled?.[agent.id] !== false
25
25
  }));
26
26
  }
27
- // extensions/acpx/src/harness.ts
27
+ //#endregion
28
+ //#region extensions/acpx/src/harness.ts
28
29
  const LOCAL_TOOL_REQUIREMENTS = [
29
30
  "ls",
30
31
  "read",
@@ -204,7 +205,7 @@ function createAcpAgentHarness(params) {
204
205
  if (inspection?.launch.kind !== "installed") throw new Error(`${params.label} is not installed; refresh the model catalog`);
205
206
  const runtime = await runtimeFor(input.workspaceDir);
206
207
  generation.signal.throwIfAborted();
207
- const { runAcpHarnessAttempt } = await import("./.setup/harness-attempt-Co9oLpPg.mjs");
208
+ const { runAcpHarnessAttempt } = await import("./.setup/harness-attempt-CR7gvC_C.mjs");
208
209
  return await runAcpHarnessAttempt({
209
210
  input,
210
211
  runtime,
@@ -244,8 +245,9 @@ function createAcpAgentHarness(params) {
244
245
  }
245
246
  };
246
247
  }
247
- // extensions/acpx/src/pi-session-catalog-plugin.ts
248
- const loadPiSessionCatalogModule = createLazyRuntimeModule(() => import("./.setup/pi-session-catalog-runtime-DgzkbadO.mjs"));
248
+ //#endregion
249
+ //#region extensions/acpx/src/pi-session-catalog-plugin.ts
250
+ const loadPiSessionCatalogModule = createLazyRuntimeModule(() => import("./.setup/pi-session-catalog-runtime-hFy095NF.mjs"));
249
251
  function fullConfigCatalogEnabled(config) {
250
252
  if (!isRecord(config) || !isRecord(config.plugins) || !isRecord(config.plugins.entries)) return true;
251
253
  const entry = config.plugins.entries.acpx;
@@ -307,7 +309,8 @@ function registerPiSessionCatalog(api) {
307
309
  for (const command of nodeHost.commands) api.registerNodeHostCommand(command);
308
310
  for (const policy of nodeHost.policies) api.registerNodeInvokePolicy(policy);
309
311
  }
310
- // extensions/acpx/src/runtime-proxy.ts
312
+ //#endregion
313
+ //#region extensions/acpx/src/runtime-proxy.ts
311
314
  /** Start an ACP turn through a lazy runtime resolver without awaiting resolution up front. */
312
315
  function lazyStartRuntimeTurn(resolveRuntime, input) {
313
316
  const turnPromise = resolveRuntime().then((runtime) => runtime.startTurn(input));
@@ -353,9 +356,10 @@ function createLazyAcpRuntimeProxy(resolveRuntime) {
353
356
  close: bind((runtime) => runtime.close.bind(runtime))
354
357
  };
355
358
  }
356
- // extensions/acpx/index.ts
359
+ //#endregion
360
+ //#region extensions/acpx/index.ts
357
361
  const ACPX_BACKEND_ID = "acpx";
358
- const loadServiceModule = createLazyRuntimeModule(() => import("./.setup/service-DmgP1gPb.mjs"));
362
+ const loadServiceModule = createLazyRuntimeModule(() => import("./.setup/service-By25n8eI.mjs"));
359
363
  function unregisterOwnedRuntime(runtime) {
360
364
  if (runtime && getAcpRuntimeBackend(ACPX_BACKEND_ID)?.runtime === runtime) unregisterAcpRuntimeBackend(ACPX_BACKEND_ID);
361
365
  }
@@ -548,4 +552,5 @@ const plugin = {
548
552
  api.on("reply_dispatch", tryDispatchAcpReplyHook, { eligibleDispatchKinds: ["acp"] });
549
553
  }
550
554
  };
555
+ //#endregion
551
556
  export { plugin as default };
package/dist/setup-api.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
2
2
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
3
- // extensions/acpx/setup-api.ts
3
+ //#region extensions/acpx/setup-api.ts
4
4
  /**
5
5
  * ACPX setup plugin entry. It auto-enables setup when ACP config already points
6
6
  * at the embedded ACPX runtime backend.
@@ -16,4 +16,5 @@ var setup_api_default = definePluginEntry({
16
16
  });
17
17
  }
18
18
  });
19
+ //#endregion
19
20
  export { setup_api_default as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/acpx",
3
- "version": "2026.11.5-beta.1",
3
+ "version": "2026.11.5-beta.3",
4
4
  "description": "OpenClaw ACP runtime backend with plugin-owned session and transport management.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,10 +45,10 @@
45
45
  ]
46
46
  },
47
47
  "compat": {
48
- "pluginApi": ">=2026.11.5-beta.1"
48
+ "pluginApi": ">=2026.11.5-beta.3"
49
49
  },
50
50
  "build": {
51
- "openclawVersion": "2026.11.5-beta.1"
51
+ "openclawVersion": "2026.11.5-beta.3"
52
52
  },
53
53
  "release": {
54
54
  "publishToClawHub": true,
@@ -68,7 +68,7 @@
68
68
  "skills/**"
69
69
  ],
70
70
  "peerDependencies": {
71
- "openclaw": ">=2026.11.5-beta.1"
71
+ "openclaw": ">=2026.11.5-beta.3"
72
72
  },
73
73
  "peerDependenciesMeta": {
74
74
  "openclaw": {