@openclaw/acpx 2026.7.2-beta.3 → 2026.7.2-beta.4

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.
@@ -1,4 +1,4 @@
1
- import { c as normalizeAcpxProcessLeaseFile, d as ACPX_GATEWAY_INSTANCE_KEY, f as ACPX_GATEWAY_INSTANCE_NAMESPACE, h as normalizeAcpxGatewayInstanceRecord, l as openAcpxProcessLeaseStateStore, m as ACPX_LEGACY_PROCESS_LEASE_FILE, p as ACPX_LEGACY_GATEWAY_INSTANCE_FILE, s as normalizeAcpxProcessLease } from "./process-lease-DiKkFj6F.js";
1
+ import { c as openAcpxProcessLeaseStateStore, d as ACPX_GATEWAY_INSTANCE_NAMESPACE, f as ACPX_LEGACY_GATEWAY_INSTANCE_FILE, m as normalizeAcpxGatewayInstanceRecord, o as normalizeAcpxProcessLease, p as ACPX_LEGACY_PROCESS_LEASE_FILE, s as normalizeAcpxProcessLeaseFile, u as ACPX_GATEWAY_INSTANCE_KEY } from "./process-lease-CU1cFI4I.js";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { archiveLegacyStateSource } from "openclaw/plugin-sdk/runtime-doctor";
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as createAcpxRuntimeService } from "./register.runtime-BrVpU-xc.js";
1
+ import { t as createAcpxRuntimeService } from "./register.runtime-Dajn8myc.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";
@@ -391,7 +391,7 @@ const LOCAL_HOST_ID$1 = "gateway";
391
391
  const DEFAULT_PAGE_LIMIT = 20;
392
392
  const MAX_PAGE_LIMIT$1 = 100;
393
393
  const MAX_SEARCH_LENGTH = 500;
394
- const MAX_CURSOR_LENGTH$1 = 128;
394
+ const MAX_CURSOR_LENGTH = 128;
395
395
  const MAX_TRANSCRIPT_ITEM_BYTES = 512 * 1024;
396
396
  const MAX_TRANSCRIPT_PAGE_BYTES = 20 * 1024 * 1024;
397
397
  const SESSION_ID_PATTERN$1 = /^(?!-)[A-Za-z0-9._:-]{1,256}$/u;
@@ -408,18 +408,35 @@ function boundedLimit(value, fallback = DEFAULT_PAGE_LIMIT) {
408
408
  function encodeCursor(offset) {
409
409
  return Buffer.from(JSON.stringify({ offset }), "utf8").toString("base64url");
410
410
  }
411
+ function optionalRawCursor(value) {
412
+ if (value === void 0) return;
413
+ if (typeof value !== "string" || value.length === 0 || value.length > MAX_CURSOR_LENGTH) throw new Error("cursor is invalid");
414
+ return value;
415
+ }
411
416
  function decodeCursor(value) {
412
- if (value === void 0) return 0;
413
- const cursor = optionalPiString(value, MAX_CURSOR_LENGTH$1);
414
- if (!cursor) throw new Error("cursor is invalid");
417
+ const cursor = optionalRawCursor(value);
418
+ if (cursor === void 0) return 0;
415
419
  try {
416
- const parsed = JSON.parse(Buffer.from(cursor, "base64url").toString("utf8"));
417
- if (!isRecord(parsed) || !Number.isInteger(parsed.offset) || Number(parsed.offset) < 0) throw new Error("invalid offset");
418
- return Number(parsed.offset);
420
+ const bytes = Buffer.from(cursor, "base64url");
421
+ if (bytes.toString("base64url") !== cursor) throw new Error("non-canonical base64url");
422
+ const parsed = JSON.parse(bytes.toString("utf8"));
423
+ if (!isRecord(parsed) || !Number.isSafeInteger(parsed.offset) || Number(parsed.offset) < 0) throw new Error("invalid offset");
424
+ const offset = Number(parsed.offset);
425
+ if (encodeCursor(offset) !== cursor) throw new Error("non-canonical cursor payload");
426
+ return offset;
419
427
  } catch (error) {
420
428
  throw new Error("cursor is invalid", { cause: error });
421
429
  }
422
430
  }
431
+ function isExactPiSessionCursor(value) {
432
+ if (typeof value !== "string") return false;
433
+ try {
434
+ decodeCursor(value);
435
+ return true;
436
+ } catch {
437
+ return false;
438
+ }
439
+ }
423
440
  function truncateUtf8(text, maxBytes) {
424
441
  if (Buffer.byteLength(text, "utf8") <= maxBytes) return text;
425
442
  let low = 0;
@@ -486,8 +503,7 @@ function parseListParams(value) {
486
503
  if (unknown) throw new Error(`unknown Pi session list parameter: ${unknown}`);
487
504
  const searchTerm = optionalPiString(value.searchTerm, MAX_SEARCH_LENGTH);
488
505
  if (value.searchTerm !== void 0 && !searchTerm) throw new Error("searchTerm is invalid");
489
- const cursor = optionalPiString(value.cursor, MAX_CURSOR_LENGTH$1);
490
- if (value.cursor !== void 0 && !cursor) throw new Error("cursor is invalid");
506
+ const cursor = optionalRawCursor(value.cursor);
491
507
  return {
492
508
  limit: boundedLimit(value.limit),
493
509
  ...searchTerm ? { searchTerm } : {},
@@ -504,8 +520,7 @@ function parseReadParams(value) {
504
520
  if (unknown) throw new Error(`unknown Pi session read parameter: ${unknown}`);
505
521
  const threadId = optionalPiString(value.threadId, 256);
506
522
  if (!threadId || !SESSION_ID_PATTERN$1.test(threadId)) throw new Error("threadId is invalid");
507
- const cursor = optionalPiString(value.cursor, MAX_CURSOR_LENGTH$1);
508
- if (value.cursor !== void 0 && !cursor) throw new Error("cursor is invalid");
523
+ const cursor = optionalRawCursor(value.cursor);
509
524
  return {
510
525
  threadId,
511
526
  limit: boundedLimit(value.limit),
@@ -693,7 +708,6 @@ const CAPABILITY = "pi-sessions";
693
708
  const LOCAL_HOST_ID = "gateway";
694
709
  const MAX_PAGE_LIMIT = 100;
695
710
  const MAX_HOSTS = 100;
696
- const MAX_CURSOR_LENGTH = 128;
697
711
  const NODE_TIMEOUT_MS = 2e4;
698
712
  const SESSION_ID_PATTERN = /^(?!-)[A-Za-z0-9._:-]{1,256}$/u;
699
713
  const TRANSCRIPT_ITEM_TYPES = /* @__PURE__ */ new Set([
@@ -715,7 +729,7 @@ function isOptionalNumber(value) {
715
729
  return value === void 0 || typeof value === "number";
716
730
  }
717
731
  function isNodeSession(value) {
718
- return isRecord(value) && typeof value.threadId === "string" && SESSION_ID_PATTERN.test(value.threadId) && typeof value.status === "string" && value.status.length > 0 && typeof value.archived === "boolean" && typeof value.canContinue === "boolean" && typeof value.canArchive === "boolean" && isOptionalString(value.name) && isOptionalString(value.cwd) && isOptionalString(value.source) && isOptionalString(value.modelProvider) && isOptionalString(value.cliVersion) && isOptionalString(value.gitBranch) && isOptionalString(value.openClawSessionKey) && isOptionalNumber(value.createdAt) && isOptionalNumber(value.updatedAt) && isOptionalNumber(value.recencyAt);
732
+ return isRecord(value) && typeof value.threadId === "string" && SESSION_ID_PATTERN.test(value.threadId) && typeof value.status === "string" && value.status.length > 0 && typeof value.archived === "boolean" && typeof value.canContinue === "boolean" && typeof value.canArchive === "boolean" && isOptionalString(value.name) && isOptionalString(value.cwd) && isOptionalString(value.source) && isOptionalString(value.modelProvider) && isOptionalString(value.cliVersion) && isOptionalString(value.gitBranch) && isOptionalString(value.sessionKey) && isOptionalNumber(value.createdAt) && isOptionalNumber(value.updatedAt) && isOptionalNumber(value.recencyAt);
719
733
  }
720
734
  function isNodeTranscriptItem(value) {
721
735
  return isRecord(value) && typeof value.type === "string" && TRANSCRIPT_ITEM_TYPES.has(value.type) && isOptionalString(value.id) && isOptionalString(value.text) && isOptionalString(value.timestamp) && isOptionalString(value.model) && (value.truncated === void 0 || typeof value.truncated === "boolean");
@@ -831,13 +845,15 @@ async function listPiNodeHost(runtime, query, node) {
831
845
  }
832
846
  };
833
847
  try {
848
+ const cursor = query.cursors?.[hostId];
849
+ if (cursor !== void 0 && !isExactPiSessionCursor(cursor)) throw new Error("cursor is invalid");
834
850
  const page = parseNodeSessionPage(unwrapNodePayload(await runtime.nodes.invoke({
835
851
  nodeId: node.nodeId,
836
852
  command: PI_SESSIONS_LIST_COMMAND,
837
853
  params: {
838
854
  ...query.limitPerHost ? { limit: query.limitPerHost } : {},
839
855
  ...query.search ? { searchTerm: query.search } : {},
840
- ...query.cursors?.[hostId] ? { cursor: query.cursors[hostId] } : {}
856
+ ...cursor !== void 0 ? { cursor } : {}
841
857
  },
842
858
  timeoutMs: NODE_TIMEOUT_MS,
843
859
  scopes: ["operator.write"]
@@ -862,22 +878,22 @@ function parseNodeSessionPage(value) {
862
878
  if (!isRecord(value) || !Array.isArray(value.sessions) || value.sessions.length > MAX_PAGE_LIMIT) throw new Error("Pi node returned an invalid session page");
863
879
  if (!value.sessions.every(isNodeSession)) throw new Error("Pi node returned an invalid session page");
864
880
  const sessions = value.sessions;
865
- const nextCursor = optionalPiString(value.nextCursor, MAX_CURSOR_LENGTH);
866
- if (value.nextCursor !== void 0 && !nextCursor) throw new Error("Pi node returned an invalid cursor");
881
+ const nextCursor = value.nextCursor;
882
+ if (nextCursor !== void 0 && !isExactPiSessionCursor(nextCursor)) throw new Error("Pi node returned an invalid cursor");
867
883
  return {
868
884
  sessions,
869
- ...nextCursor ? { nextCursor } : {}
885
+ ...nextCursor !== void 0 ? { nextCursor } : {}
870
886
  };
871
887
  }
872
888
  function parseNodeTranscriptPage(value, threadId) {
873
889
  if (!isRecord(value) || value.threadId !== threadId || !Array.isArray(value.items) || value.items.length > MAX_PAGE_LIMIT || !value.items.every(isNodeTranscriptItem)) throw new Error("Pi node returned an invalid transcript page");
874
- const nextCursor = optionalPiString(value.nextCursor, MAX_CURSOR_LENGTH);
875
- if (value.nextCursor !== void 0 && !nextCursor) throw new Error("Pi node returned an invalid cursor");
890
+ const nextCursor = value.nextCursor;
891
+ if (nextCursor !== void 0 && !isExactPiSessionCursor(nextCursor)) throw new Error("Pi node returned an invalid cursor");
876
892
  return {
877
893
  hostId: LOCAL_HOST_ID,
878
894
  threadId,
879
895
  items: value.items,
880
- ...nextCursor ? { nextCursor } : {}
896
+ ...nextCursor !== void 0 ? { nextCursor } : {}
881
897
  };
882
898
  }
883
899
  async function listPiHosts(runtime, query) {
@@ -987,10 +1003,12 @@ async function openPiTerminal(params) {
987
1003
  };
988
1004
  }
989
1005
  async function readPiTranscript(runtime, request) {
1006
+ const cursor = request.cursor;
1007
+ if (cursor !== void 0 && !isExactPiSessionCursor(cursor)) throw new Error("cursor is invalid");
990
1008
  if (request.hostId === LOCAL_HOST_ID) return await readLocalPiTranscriptPage({
991
1009
  threadId: request.threadId,
992
1010
  ...request.limit ? { limit: request.limit } : {},
993
- ...request.cursor ? { cursor: request.cursor } : {}
1011
+ ...cursor !== void 0 ? { cursor } : {}
994
1012
  });
995
1013
  if (!request.hostId.startsWith("node:")) throw new Error("hostId is invalid");
996
1014
  const nodeId = request.hostId.slice(5);
@@ -1003,7 +1021,7 @@ async function readPiTranscript(runtime, request) {
1003
1021
  params: {
1004
1022
  threadId: request.threadId,
1005
1023
  ...request.limit ? { limit: request.limit } : {},
1006
- ...request.cursor ? { cursor: request.cursor } : {}
1024
+ ...cursor !== void 0 ? { cursor } : {}
1007
1025
  },
1008
1026
  timeoutMs: NODE_TIMEOUT_MS,
1009
1027
  scopes: ["operator.write"]
@@ -22,11 +22,7 @@ function normalizeAcpxGatewayInstanceRecord(value) {
22
22
  * Persistent lease store for ACPX wrapper processes. Leases let OpenClaw attach
23
23
  * gateway/session identity to spawned ACP processes and clean them up later.
24
24
  */
25
- /** Environment variable carrying the ACPX process lease id. */
26
- const OPENCLAW_ACPX_LEASE_ID_ENV = "OPENCLAW_ACPX_LEASE_ID";
27
- /** Environment variable carrying the owning gateway instance id. */
28
- const OPENCLAW_GATEWAY_INSTANCE_ID_ENV = "OPENCLAW_GATEWAY_INSTANCE_ID";
29
- /** CLI argument carrying the ACPX process lease id for platforms without env wrapping. */
25
+ /** CLI argument carrying the ACPX process lease id. */
30
26
  const OPENCLAW_ACPX_LEASE_ID_ARG = "--openclaw-acpx-lease-id";
31
27
  /** CLI argument carrying the owning gateway instance id. */
32
28
  const OPENCLAW_GATEWAY_INSTANCE_ID_ARG = "--openclaw-gateway-instance-id";
@@ -127,15 +123,9 @@ function appendAcpxLeaseArgs(params) {
127
123
  quoteEnvValue(params.gatewayInstanceId)
128
124
  ].join(" ");
129
125
  }
130
- /** Add ACPX lease identity to a command through env vars and portable args. */
126
+ /** Add ACPX lease identity to a command through portable wrapper arguments. */
131
127
  function withAcpxLeaseEnvironment(params) {
132
- if ((params.platform ?? process.platform) === "win32") return appendAcpxLeaseArgs(params);
133
- return [
134
- "env",
135
- `${OPENCLAW_ACPX_LEASE_ID_ENV}=${quoteEnvValue(params.leaseId)}`,
136
- `${OPENCLAW_GATEWAY_INSTANCE_ID_ENV}=${quoteEnvValue(params.gatewayInstanceId)}`,
137
- appendAcpxLeaseArgs(params)
138
- ].join(" ");
128
+ return appendAcpxLeaseArgs(params);
139
129
  }
140
130
  //#endregion
141
- export { createAcpxProcessLeaseStore as a, normalizeAcpxProcessLeaseFile as c, ACPX_GATEWAY_INSTANCE_KEY as d, ACPX_GATEWAY_INSTANCE_NAMESPACE as f, normalizeAcpxGatewayInstanceRecord as h, createAcpxProcessLeaseId as i, openAcpxProcessLeaseStateStore as l, ACPX_LEGACY_PROCESS_LEASE_FILE as m, OPENCLAW_ACPX_LEASE_ID_ENV as n, hashAcpxProcessCommand as o, ACPX_LEGACY_GATEWAY_INSTANCE_FILE as p, OPENCLAW_GATEWAY_INSTANCE_ID_ARG as r, normalizeAcpxProcessLease as s, OPENCLAW_ACPX_LEASE_ID_ARG as t, withAcpxLeaseEnvironment as u };
131
+ export { hashAcpxProcessCommand as a, openAcpxProcessLeaseStateStore as c, ACPX_GATEWAY_INSTANCE_NAMESPACE as d, ACPX_LEGACY_GATEWAY_INSTANCE_FILE as f, createAcpxProcessLeaseStore as i, withAcpxLeaseEnvironment as l, normalizeAcpxGatewayInstanceRecord as m, OPENCLAW_GATEWAY_INSTANCE_ID_ARG as n, normalizeAcpxProcessLease as o, ACPX_LEGACY_PROCESS_LEASE_FILE as p, createAcpxProcessLeaseId as r, normalizeAcpxProcessLeaseFile as s, OPENCLAW_ACPX_LEASE_ID_ARG as t, ACPX_GATEWAY_INSTANCE_KEY as u };
@@ -1,5 +1,5 @@
1
1
  import { t as AcpxPluginConfigSchema } from "./config-schema-lrk5nlcV.js";
2
- import "./process-lease-DiKkFj6F.js";
2
+ import "./process-lease-CU1cFI4I.js";
3
3
  import { createRequire } from "node:module";
4
4
  import { formatPluginConfigIssue } from "openclaw/plugin-sdk/extension-shared";
5
5
  import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -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-D6LQXIcJ.js"));
203
+ const loadServiceModule = createLazyRuntimeModule(() => import("./service-DOsKw_R1.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");
@@ -1,2 +1,2 @@
1
- import { t as createAcpxRuntimeService } from "./register.runtime-BrVpU-xc.js";
1
+ import { t as createAcpxRuntimeService } from "./register.runtime-Dajn8myc.js";
2
2
  export { createAcpxRuntimeService };
@@ -1,6 +1,6 @@
1
- import { i as createAcpxProcessLeaseId, o as hashAcpxProcessCommand, u as withAcpxLeaseEnvironment } from "./process-lease-DiKkFj6F.js";
1
+ import { a as hashAcpxProcessCommand, l as withAcpxLeaseEnvironment, r as createAcpxProcessLeaseId } from "./process-lease-CU1cFI4I.js";
2
2
  import { AcpRuntimeError } from "./runtime-api.js";
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";
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-BIOtp_Ek.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 { sliceUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
@@ -1,8 +1,8 @@
1
- import { n as createLazyAcpRuntimeProxy } from "./register.runtime-BrVpU-xc.js";
1
+ import { n as createLazyAcpRuntimeProxy } from "./register.runtime-Dajn8myc.js";
2
2
  import "./config-schema-lrk5nlcV.js";
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";
3
+ import { c as openAcpxProcessLeaseStateStore, d as ACPX_GATEWAY_INSTANCE_NAMESPACE, i as createAcpxProcessLeaseStore, m as normalizeAcpxGatewayInstanceRecord, n as OPENCLAW_GATEWAY_INSTANCE_ID_ARG, t as OPENCLAW_ACPX_LEASE_ID_ARG, u as ACPX_GATEWAY_INSTANCE_KEY } from "./process-lease-CU1cFI4I.js";
4
4
  import { registerAcpRuntimeBackend, unregisterAcpRuntimeBackend } from "./runtime-api.js";
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";
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-BIOtp_Ek.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";
@@ -431,7 +431,6 @@ function resolveStderrLogPath(args) {
431
431
  return undefined;
432
432
  }
433
433
  const leaseId =
434
- process.env[${JSON.stringify(OPENCLAW_ACPX_LEASE_ID_ENV)}] ||
435
434
  readOpenClawWrapperArg(args, ${quoteCommandPart(OPENCLAW_ACPX_LEASE_ID_ARG)}) ||
436
435
  "pid-" + process.pid;
437
436
  const fileName = stderrLogFileNamePrefix + "." + safeDiagnosticFilePart(leaseId) + ".log";
@@ -1027,7 +1026,7 @@ async function prepareAcpxCodexAuthConfig(params) {
1027
1026
  const ENABLE_STARTUP_PROBE_ENV = "OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE";
1028
1027
  const SKIP_RUNTIME_PROBE_ENV = "OPENCLAW_SKIP_ACPX_RUNTIME_PROBE";
1029
1028
  const ACPX_BACKEND_ID = "acpx";
1030
- const loadRuntimeModule = createLazyRuntimeModule(() => import("./runtime-CMARmJuS.js"));
1029
+ const loadRuntimeModule = createLazyRuntimeModule(() => import("./runtime-CN4JQkdV.js"));
1031
1030
  /** Convert ACPX timeout seconds into timer-safe milliseconds. */
1032
1031
  function resolveAcpxTimerTimeoutMs(timeoutSeconds) {
1033
1032
  if (timeoutSeconds === void 0) return;
@@ -1,28 +1,28 @@
1
1
  {
2
2
  "name": "@openclaw/acpx",
3
- "version": "2026.7.2-beta.3",
3
+ "version": "2026.7.2-beta.4",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/acpx",
9
- "version": "2026.7.2-beta.3",
9
+ "version": "2026.7.2-beta.4",
10
10
  "dependencies": {
11
- "@agentclientprotocol/claude-agent-acp": "0.55.0",
12
- "@agentclientprotocol/codex-acp": "1.1.2",
13
- "acpx": "0.11.2",
11
+ "@agentclientprotocol/claude-agent-acp": "0.59.0",
12
+ "@agentclientprotocol/codex-acp": "1.1.4",
13
+ "acpx": "0.12.0",
14
14
  "smol-toml": "1.7.0",
15
15
  "zod": "4.4.3"
16
16
  }
17
17
  },
18
18
  "node_modules/@agentclientprotocol/claude-agent-acp": {
19
- "version": "0.55.0",
20
- "resolved": "https://registry.npmjs.org/@agentclientprotocol/claude-agent-acp/-/claude-agent-acp-0.55.0.tgz",
21
- "integrity": "sha512-zZ4EpT6OppURh3lrTTvQR42+ggPi5Q42TC7Nig+Vt0RGBAmw73xAnM6W5BpdNRL7VcT/2aRndV0Z7fuGrruMGA==",
19
+ "version": "0.59.0",
20
+ "resolved": "https://registry.npmjs.org/@agentclientprotocol/claude-agent-acp/-/claude-agent-acp-0.59.0.tgz",
21
+ "integrity": "sha512-GejLH5qxsI5IoSDfhyOVDEsRNxqi6y0Rcj5FstVeOwMACSht/bUXII0HILbzOQNoA5qlyZle3FRvf+CAjD7Rpg==",
22
22
  "license": "Apache-2.0",
23
23
  "dependencies": {
24
- "@agentclientprotocol/sdk": "1.1.0",
25
- "@anthropic-ai/claude-agent-sdk": "0.3.198",
24
+ "@agentclientprotocol/sdk": "1.2.1",
25
+ "@anthropic-ai/claude-agent-sdk": "0.3.207",
26
26
  "zod": "^3.25.0 || ^4.0.0"
27
27
  },
28
28
  "bin": {
@@ -33,13 +33,13 @@
33
33
  }
34
34
  },
35
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==",
36
+ "version": "1.1.4",
37
+ "resolved": "https://registry.npmjs.org/@agentclientprotocol/codex-acp/-/codex-acp-1.1.4.tgz",
38
+ "integrity": "sha512-DzusIpGwlQwMWuHgJhU8FWMsyQvzjenB93IEzQATkdbNulo5Rd9GKOz8+B+/C9iWWxmyXgtgmjzaL+iRFyDryQ==",
39
39
  "license": "Apache-2.0",
40
40
  "dependencies": {
41
41
  "@agentclientprotocol/sdk": "^1.2.1",
42
- "@openai/codex": "^0.144.0",
42
+ "@openai/codex": "^0.144.4",
43
43
  "diff": "^9.0.0",
44
44
  "open": "^11.0.0",
45
45
  "vscode-jsonrpc": "^9.0.1",
@@ -49,7 +49,7 @@
49
49
  "codex-acp": "dist/index.js"
50
50
  }
51
51
  },
52
- "node_modules/@agentclientprotocol/codex-acp/node_modules/@agentclientprotocol/sdk": {
52
+ "node_modules/@agentclientprotocol/sdk": {
53
53
  "version": "1.2.1",
54
54
  "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-1.2.1.tgz",
55
55
  "integrity": "sha512-jwYUdOQR7tc+Zfch53VL4JJyUNK/46q03uUTYb+PjECsmnNl94XFXOfYLJ8RBpMNidXd1rpOAVgb0vqD98xImA==",
@@ -58,32 +58,23 @@
58
58
  "zod": "^3.25.0 || ^4.0.0"
59
59
  }
60
60
  },
61
- "node_modules/@agentclientprotocol/sdk": {
62
- "version": "1.1.0",
63
- "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-1.1.0.tgz",
64
- "integrity": "sha512-NT2KqphUJ3w6EksUL51ZhJgIYgq/ZLGcBPkyMKgRSO5PMVwe9DnKKX+Htnvk6KHh6dUuh34UHK4gKp+4te1Mdg==",
65
- "license": "Apache-2.0",
66
- "peerDependencies": {
67
- "zod": "^3.25.0 || ^4.0.0"
68
- }
69
- },
70
61
  "node_modules/@anthropic-ai/claude-agent-sdk": {
71
- "version": "0.3.198",
72
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/-/claude-agent-sdk-0.3.198.tgz",
73
- "integrity": "sha512-xt469sSCyclTPtzpLAg0Aschy665GiRMgZKabSmESbGUA5/H56HcILVOiFxclXswkeMUk2fQxfHJUY9UZfiTnA==",
62
+ "version": "0.3.207",
63
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/-/claude-agent-sdk-0.3.207.tgz",
64
+ "integrity": "sha512-y0PkQRmQBi96MHiN5Xzfq+GaddxCZCqI/cXEQBLYBLXGa4i1nDSlulQqkMBj2RorrrSGQJ6Wdw+uhu6OfHNPzA==",
74
65
  "license": "SEE LICENSE IN README.md",
75
66
  "engines": {
76
67
  "node": ">=18.0.0"
77
68
  },
78
69
  "optionalDependencies": {
79
- "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.198",
80
- "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.198",
81
- "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.198",
82
- "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.198",
83
- "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.198",
84
- "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.198",
85
- "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.198",
86
- "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.198"
70
+ "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.207",
71
+ "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.207",
72
+ "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.207",
73
+ "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.207",
74
+ "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.207",
75
+ "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.207",
76
+ "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.207",
77
+ "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.207"
87
78
  },
88
79
  "peerDependencies": {
89
80
  "@anthropic-ai/sdk": ">=0.93.0",
@@ -92,9 +83,9 @@
92
83
  }
93
84
  },
94
85
  "node_modules/@anthropic-ai/claude-agent-sdk-darwin-arm64": {
95
- "version": "0.3.198",
96
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-arm64/-/claude-agent-sdk-darwin-arm64-0.3.198.tgz",
97
- "integrity": "sha512-ZmiAybQKIKcP1qEAE/vfXvfxtKxG9CnJn98QTXC5Zxiwuy7Mllx2ALXh9dfmsf0V87CGEodlZQmMgUJotNIsUw==",
86
+ "version": "0.3.207",
87
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-arm64/-/claude-agent-sdk-darwin-arm64-0.3.207.tgz",
88
+ "integrity": "sha512-08xSo1FDx8h0aLhL5tvcRxa2SMmcUV3aDWeZiEJVTclyiDAs61BgTjAxCg+SZcu1CndjJO8cfO0yM5dhamxz3g==",
98
89
  "cpu": [
99
90
  "arm64"
100
91
  ],
@@ -105,9 +96,9 @@
105
96
  ]
106
97
  },
107
98
  "node_modules/@anthropic-ai/claude-agent-sdk-darwin-x64": {
108
- "version": "0.3.198",
109
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-x64/-/claude-agent-sdk-darwin-x64-0.3.198.tgz",
110
- "integrity": "sha512-XwH5vgN46WSwg8aC1OagNofnJpV/G1ciEu118GEKer8ZhVkq/dvK/DqShxMkb6r1jV7u5IJ7zPXu9uKliyNJAw==",
99
+ "version": "0.3.207",
100
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-x64/-/claude-agent-sdk-darwin-x64-0.3.207.tgz",
101
+ "integrity": "sha512-1o7K4EYqyCixZ/oeOZSh7AzSy6TM86xoOuf4VuORjPSS31hBnoqY0NGZd27+2VDs9LGtsdksmsTqcNGx9xd1hA==",
111
102
  "cpu": [
112
103
  "x64"
113
104
  ],
@@ -118,9 +109,9 @@
118
109
  ]
119
110
  },
120
111
  "node_modules/@anthropic-ai/claude-agent-sdk-linux-arm64": {
121
- "version": "0.3.198",
122
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64/-/claude-agent-sdk-linux-arm64-0.3.198.tgz",
123
- "integrity": "sha512-qmz8dxEtDIlKntU5qYe0R4aWTxTue5S7zIQknatLX7aJ6HN/nq1aCNXWn5smTH2FViBkUPPR+sCIsNwSk6AT6Q==",
112
+ "version": "0.3.207",
113
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64/-/claude-agent-sdk-linux-arm64-0.3.207.tgz",
114
+ "integrity": "sha512-X4uezYOifDiNTTmmugfRCdg3nNamrr1LFRY9hg30vWYTShL+bbN+nfC3KaFfSYCl4GTtsEEUbYdOTC2F3bBpcA==",
124
115
  "cpu": [
125
116
  "arm64"
126
117
  ],
@@ -131,9 +122,9 @@
131
122
  ]
132
123
  },
133
124
  "node_modules/@anthropic-ai/claude-agent-sdk-linux-arm64-musl": {
134
- "version": "0.3.198",
135
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64-musl/-/claude-agent-sdk-linux-arm64-musl-0.3.198.tgz",
136
- "integrity": "sha512-Q7lKVNjIrUQ2B/AR77OvRf0zeOdEjonFVaR9FYrrwtzGeEqum69WSht5nM7Y7el3wjbNi0/eV0QTUM0DlsTEfw==",
125
+ "version": "0.3.207",
126
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64-musl/-/claude-agent-sdk-linux-arm64-musl-0.3.207.tgz",
127
+ "integrity": "sha512-oPj+g2DslhH4Y9nCTs7al4t9wZv78FZwLFQwOCg99BXuz1o0ZOpKmxyvR7J9eBR+GPszeMMS8gYplQTiZC9o2w==",
137
128
  "cpu": [
138
129
  "arm64"
139
130
  ],
@@ -144,9 +135,9 @@
144
135
  ]
145
136
  },
146
137
  "node_modules/@anthropic-ai/claude-agent-sdk-linux-x64": {
147
- "version": "0.3.198",
148
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64/-/claude-agent-sdk-linux-x64-0.3.198.tgz",
149
- "integrity": "sha512-Zqxyz2AT1UM5WlOOoLJhLssZDgZo8rBK5ku6daveK12zp+UTJGZhGsjFghz1/ASxH08KqOTbUePNTORnPhHAEQ==",
138
+ "version": "0.3.207",
139
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64/-/claude-agent-sdk-linux-x64-0.3.207.tgz",
140
+ "integrity": "sha512-Kg6BPH8Ee0ny/oEUWJmvT1jCRBne4jVpRSOMsJcYp1Fav1rMEgpU219oJJs+LWwx4ifuuLtNWedqJNnVw7mnKg==",
150
141
  "cpu": [
151
142
  "x64"
152
143
  ],
@@ -157,9 +148,9 @@
157
148
  ]
158
149
  },
159
150
  "node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl": {
160
- "version": "0.3.198",
161
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64-musl/-/claude-agent-sdk-linux-x64-musl-0.3.198.tgz",
162
- "integrity": "sha512-h1SrWVIMjLInYNPlf+TxXuKTOdoiOfJLBSoQG97315Z2Nh0IpBfqWExlqYTtPCgKE7q2iga31U283QfHpIDlSQ==",
151
+ "version": "0.3.207",
152
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64-musl/-/claude-agent-sdk-linux-x64-musl-0.3.207.tgz",
153
+ "integrity": "sha512-uRv+D5oG/7EYr41FAJ9IPo2pZYBe2ZMaA6nSHCeizsgPxCSMtl5bNppmU21+jZJvo4hivObEgkGFERAhdGqygg==",
163
154
  "cpu": [
164
155
  "x64"
165
156
  ],
@@ -170,9 +161,9 @@
170
161
  ]
171
162
  },
172
163
  "node_modules/@anthropic-ai/claude-agent-sdk-win32-arm64": {
173
- "version": "0.3.198",
174
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-arm64/-/claude-agent-sdk-win32-arm64-0.3.198.tgz",
175
- "integrity": "sha512-mjIHf1HFiRuXefewWTaNZFlTZlCaEt/xsRjc1nSTCEEpFolZayVhrDKz+O2QFVcDtPl8x8GeYSL0kiikg1DZjQ==",
164
+ "version": "0.3.207",
165
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-arm64/-/claude-agent-sdk-win32-arm64-0.3.207.tgz",
166
+ "integrity": "sha512-9fWpUzfkXlPAg2tf8JpQe7w9avFaomAUbfAwyAmykQgSIf66LwaJjvI5hNqhNqczRKyfsXPn3ei2S5HKlmFP+Q==",
176
167
  "cpu": [
177
168
  "arm64"
178
169
  ],
@@ -183,9 +174,9 @@
183
174
  ]
184
175
  },
185
176
  "node_modules/@anthropic-ai/claude-agent-sdk-win32-x64": {
186
- "version": "0.3.198",
187
- "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-x64/-/claude-agent-sdk-win32-x64-0.3.198.tgz",
188
- "integrity": "sha512-y3HLuCCz1kDwUrhd6OnqO+d5BUpTFSzNUsPT9kf3r1vk9HYKF+eMC9eIlcOhiW2kX491kxEvuEOfqgIkGx15cg==",
177
+ "version": "0.3.207",
178
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-x64/-/claude-agent-sdk-win32-x64-0.3.207.tgz",
179
+ "integrity": "sha512-YPjVT0q6aXEM2MgN4CI6/9fqiTXwETji+4NoPOzCYuqAkhXZqp30Jsk7/NHqYGNNSfURKrsuAoliKB0rsbpbjg==",
189
180
  "cpu": [
190
181
  "x64"
191
182
  ],
@@ -196,9 +187,9 @@
196
187
  ]
197
188
  },
198
189
  "node_modules/@anthropic-ai/sdk": {
199
- "version": "0.109.1",
200
- "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.109.1.tgz",
201
- "integrity": "sha512-q9OnEKLr5H9nxSuXdgDgJhxfYMiE+AaUEBze2Gk91UcaaLnsN+Lx5fbCYywiqurU/APLdwv23x03Wm6WN3EBsg==",
190
+ "version": "0.112.3",
191
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.112.3.tgz",
192
+ "integrity": "sha512-wjcozJlitVIuBEw9cj/xBuRznwkhcLmXmNzlFoeHbh4AvrDG3HGZrdvEOTTmobcbhjGkfOpKbmDTCQ4s9LQvCg==",
202
193
  "license": "MIT",
203
194
  "dependencies": {
204
195
  "json-schema-to-ts": "^3.1.1",
@@ -226,9 +217,9 @@
226
217
  }
227
218
  },
228
219
  "node_modules/@clack/core": {
229
- "version": "1.4.2",
230
- "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.2.tgz",
231
- "integrity": "sha512-0Ty/1Gfm+Kb07sXcuESjyKfwEhSy4Ns1AgeEisHb/bDY5fWme0tTeTkU14T1Gmcs17YIjB/teiDe4uaCghbYqQ==",
220
+ "version": "1.4.3",
221
+ "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz",
222
+ "integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==",
232
223
  "license": "MIT",
233
224
  "dependencies": {
234
225
  "fast-wrap-ansi": "^0.2.0",
@@ -239,12 +230,12 @@
239
230
  }
240
231
  },
241
232
  "node_modules/@clack/prompts": {
242
- "version": "1.6.0",
243
- "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.6.0.tgz",
244
- "integrity": "sha512-EYlRokl8szrP9Z25qT5aepMdBjzBvHF9ZEhzIiUBc9guz/T31EqRgvD0QSgZcpE93xiwrr+OkB4nz0BZyF6fSA==",
233
+ "version": "1.7.0",
234
+ "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz",
235
+ "integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==",
245
236
  "license": "MIT",
246
237
  "dependencies": {
247
- "@clack/core": "1.4.2",
238
+ "@clack/core": "1.4.3",
248
239
  "fast-string-width": "^3.0.2",
249
240
  "fast-wrap-ansi": "^0.2.0",
250
241
  "sisteransi": "^1.0.5"
@@ -722,9 +713,9 @@
722
713
  }
723
714
  },
724
715
  "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==",
716
+ "version": "0.144.6",
717
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6.tgz",
718
+ "integrity": "sha512-wk+2CWiBNXiJLBoN2D08N9RceWkSBnlgk5g2K1a4CXrP/C0gdlHyRUG7RFzm9y41DCK/7tvCct233JVxyFmznw==",
728
719
  "license": "Apache-2.0",
729
720
  "bin": {
730
721
  "codex": "bin/codex.js"
@@ -733,19 +724,19 @@
733
724
  "node": ">=16"
734
725
  },
735
726
  "optionalDependencies": {
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"
727
+ "@openai/codex-darwin-arm64": "npm:@openai/codex@0.144.6-darwin-arm64",
728
+ "@openai/codex-darwin-x64": "npm:@openai/codex@0.144.6-darwin-x64",
729
+ "@openai/codex-linux-arm64": "npm:@openai/codex@0.144.6-linux-arm64",
730
+ "@openai/codex-linux-x64": "npm:@openai/codex@0.144.6-linux-x64",
731
+ "@openai/codex-win32-arm64": "npm:@openai/codex@0.144.6-win32-arm64",
732
+ "@openai/codex-win32-x64": "npm:@openai/codex@0.144.6-win32-x64"
742
733
  }
743
734
  },
744
735
  "node_modules/@openai/codex-darwin-arm64": {
745
736
  "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==",
737
+ "version": "0.144.6-darwin-arm64",
738
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-darwin-arm64.tgz",
739
+ "integrity": "sha512-6zgvh70MzBNSeT17HEhSOrmmGGZGAKzSC7x6JAq+edkJkdPYA9P0I1tG7aJ49GlBkBxuC+MKBH1qm6+2Cghcww==",
749
740
  "cpu": [
750
741
  "arm64"
751
742
  ],
@@ -760,9 +751,9 @@
760
751
  },
761
752
  "node_modules/@openai/codex-darwin-x64": {
762
753
  "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==",
754
+ "version": "0.144.6-darwin-x64",
755
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-darwin-x64.tgz",
756
+ "integrity": "sha512-THRyPG0zSU6M8NQAge1LHEHsJDnoH4BpKsfJHB/qe3Fm+Wf6zqAmWJFlOKzBm27m0K2Hq3za4Ac2I5p5i4yp/A==",
766
757
  "cpu": [
767
758
  "x64"
768
759
  ],
@@ -777,9 +768,9 @@
777
768
  },
778
769
  "node_modules/@openai/codex-linux-arm64": {
779
770
  "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==",
771
+ "version": "0.144.6-linux-arm64",
772
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-linux-arm64.tgz",
773
+ "integrity": "sha512-PGiLXMN+2IQRkf7tOLi64dMInjU1pRLbz0Rwfj/yt2Y97SZQqAjFQoi2wmswmqtqMDnfwCPTC1DRXVQkvU6T6Q==",
783
774
  "cpu": [
784
775
  "arm64"
785
776
  ],
@@ -794,9 +785,9 @@
794
785
  },
795
786
  "node_modules/@openai/codex-linux-x64": {
796
787
  "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==",
788
+ "version": "0.144.6-linux-x64",
789
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-linux-x64.tgz",
790
+ "integrity": "sha512-4E7EnzCg0OnBxCyYnwJ+qnZwWHYe0YScr5ucKWbngE9u4+0XrpWELqq2Kn9jl5GZK8MDjU7PrJwFIwusHOHjuw==",
800
791
  "cpu": [
801
792
  "x64"
802
793
  ],
@@ -811,9 +802,9 @@
811
802
  },
812
803
  "node_modules/@openai/codex-win32-arm64": {
813
804
  "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==",
805
+ "version": "0.144.6-win32-arm64",
806
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-win32-arm64.tgz",
807
+ "integrity": "sha512-SpMjXJLW43JzMP0K62mVcYfmFcpk0BK4AOgYmWSfyZHs3iRtHMd0UYw7605n/9lwkT2EqbwQLT2omZFeKJFzwA==",
817
808
  "cpu": [
818
809
  "arm64"
819
810
  ],
@@ -828,9 +819,9 @@
828
819
  },
829
820
  "node_modules/@openai/codex-win32-x64": {
830
821
  "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==",
822
+ "version": "0.144.6-win32-x64",
823
+ "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-win32-x64.tgz",
824
+ "integrity": "sha512-dN39VnjEthKz5io1RNWwZDtErdSn07nW3pGUgvlA6DMxgm/nuGaIAZO/sG/Hgxq/x5j9HteAENfrFgVkpZ0lFg==",
834
825
  "cpu": [
835
826
  "x64"
836
827
  ],
@@ -863,15 +854,15 @@
863
854
  }
864
855
  },
865
856
  "node_modules/acpx": {
866
- "version": "0.11.2",
867
- "resolved": "https://registry.npmjs.org/acpx/-/acpx-0.11.2.tgz",
868
- "integrity": "sha512-ksTmfJDVqUAJJXsNDamEno03AMZ/aAZzXk/h5nt61VsLc/jcpoDMfCVpErzuYNJjwCd0V6Zm5o6F8OoqxsjQWA==",
857
+ "version": "0.12.0",
858
+ "resolved": "https://registry.npmjs.org/acpx/-/acpx-0.12.0.tgz",
859
+ "integrity": "sha512-APYpN04XFWrCGuSBvM4HTKWWFH8uSIuzc+qI7aCGeVdP9o4euZeBosFEkmNUHvBOop0XBemg6d8RsNvzXN3Mgw==",
869
860
  "license": "MIT",
870
861
  "dependencies": {
871
- "@agentclientprotocol/sdk": "^0.28.1",
862
+ "@agentclientprotocol/sdk": "^1.1.0",
872
863
  "commander": "^15.0.0",
873
864
  "skillflag": "^0.2.0",
874
- "tsx": "^4.22.4",
865
+ "tsx": "^4.23.0",
875
866
  "zod": "^4.4.3"
876
867
  },
877
868
  "bin": {
@@ -881,15 +872,6 @@
881
872
  "node": ">=22.13.0"
882
873
  }
883
874
  },
884
- "node_modules/acpx/node_modules/@agentclientprotocol/sdk": {
885
- "version": "0.28.1",
886
- "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-0.28.1.tgz",
887
- "integrity": "sha512-Z2Frs6YtPhnZZ+XwFXyQkRDXY0fn8FjCalEs0W4yUhQnY4TztmNq0/RnfzWdFN3vqT3h0jTz5klzYbZHGxCDyQ==",
888
- "license": "Apache-2.0",
889
- "peerDependencies": {
890
- "zod": "^3.25.0 || ^4.0.0"
891
- }
892
- },
893
875
  "node_modules/ajv": {
894
876
  "version": "8.20.0",
895
877
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
@@ -952,9 +934,9 @@
952
934
  }
953
935
  },
954
936
  "node_modules/bare-fs": {
955
- "version": "4.7.2",
956
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.2.tgz",
957
- "integrity": "sha512-aTvMFUWkBmjzKtEQMDGGDNF8bkfpD5N1b/FCwt7A3wrU4t1o/e/85Wzkluh6JlODCjqVESYCkQCdTXqZ9G7VFg==",
937
+ "version": "4.7.4",
938
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.4.tgz",
939
+ "integrity": "sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==",
958
940
  "license": "Apache-2.0",
959
941
  "dependencies": {
960
942
  "bare-events": "^2.5.4",
@@ -975,23 +957,11 @@
975
957
  }
976
958
  }
977
959
  },
978
- "node_modules/bare-os": {
979
- "version": "3.9.3",
980
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.3.tgz",
981
- "integrity": "sha512-fF4Q7QsyKVF5Rj0qvI8BgUNjqzC2JvQlpTaPLjVJVxYVUX5Zr9un+y3w1HmA4nNKdFmRBT8z/WmrjvXzXVerKQ==",
982
- "license": "Apache-2.0",
983
- "engines": {
984
- "bare": ">=1.14.0"
985
- }
986
- },
987
960
  "node_modules/bare-path": {
988
- "version": "3.0.1",
989
- "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.1.tgz",
990
- "integrity": "sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==",
991
- "license": "Apache-2.0",
992
- "dependencies": {
993
- "bare-os": "^3.0.1"
994
- }
961
+ "version": "3.1.1",
962
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.1.1.tgz",
963
+ "integrity": "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==",
964
+ "license": "Apache-2.0"
995
965
  },
996
966
  "node_modules/bare-stream": {
997
967
  "version": "2.13.3",
@@ -1463,11 +1433,12 @@
1463
1433
  }
1464
1434
  },
1465
1435
  "node_modules/express-rate-limit": {
1466
- "version": "8.5.2",
1467
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz",
1468
- "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==",
1436
+ "version": "8.6.0",
1437
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.0.tgz",
1438
+ "integrity": "sha512-XKJXDsASUOo0LLtFwW5hCcQGH0N4WQc/Rn8/Pvoia+TJFOkkFPvrtW9lZOeeNcxQJspvOIERMwiRLsVFlhHEkA==",
1469
1439
  "license": "MIT",
1470
1440
  "dependencies": {
1441
+ "debug": "^4.4.3",
1471
1442
  "ip-address": "^10.2.0"
1472
1443
  },
1473
1444
  "engines": {
@@ -1514,9 +1485,9 @@
1514
1485
  }
1515
1486
  },
1516
1487
  "node_modules/fast-uri": {
1517
- "version": "3.1.2",
1518
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
1519
- "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==",
1488
+ "version": "3.1.4",
1489
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz",
1490
+ "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==",
1520
1491
  "funding": [
1521
1492
  {
1522
1493
  "type": "github",
@@ -1674,9 +1645,9 @@
1674
1645
  }
1675
1646
  },
1676
1647
  "node_modules/hono": {
1677
- "version": "4.12.25",
1678
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.25.tgz",
1679
- "integrity": "sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ==",
1648
+ "version": "4.12.31",
1649
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.31.tgz",
1650
+ "integrity": "sha512-zJIHFrl6bq3RDd2YusFNCDlM8qUprxKswyi/OPzPyzKDdyBXDqWx8bZlZ7R+saTdSTatUmb3O7K4SspGPaEOQg==",
1680
1651
  "license": "MIT",
1681
1652
  "engines": {
1682
1653
  "node": ">=16.9.0"
@@ -1703,9 +1674,9 @@
1703
1674
  }
1704
1675
  },
1705
1676
  "node_modules/iconv-lite": {
1706
- "version": "0.7.2",
1707
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
1708
- "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
1677
+ "version": "0.7.3",
1678
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",
1679
+ "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",
1709
1680
  "license": "MIT",
1710
1681
  "dependencies": {
1711
1682
  "safer-buffer": ">= 2.1.2 < 3.0.0"
@@ -1999,9 +1970,9 @@
1999
1970
  }
2000
1971
  },
2001
1972
  "node_modules/path-to-regexp": {
2002
- "version": "8.4.0",
2003
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.0.tgz",
2004
- "integrity": "sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==",
1973
+ "version": "8.4.2",
1974
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",
1975
+ "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==",
2005
1976
  "license": "MIT",
2006
1977
  "funding": {
2007
1978
  "type": "opencollective",
@@ -2043,12 +2014,13 @@
2043
2014
  }
2044
2015
  },
2045
2016
  "node_modules/qs": {
2046
- "version": "6.15.2",
2047
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
2048
- "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==",
2017
+ "version": "6.15.3",
2018
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
2019
+ "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
2049
2020
  "license": "BSD-3-Clause",
2050
2021
  "dependencies": {
2051
- "side-channel": "^1.1.0"
2022
+ "es-define-property": "^1.0.1",
2023
+ "side-channel": "^1.1.1"
2052
2024
  },
2053
2025
  "engines": {
2054
2026
  "node": ">=0.6"
@@ -2383,9 +2355,9 @@
2383
2355
  "license": "MIT"
2384
2356
  },
2385
2357
  "node_modules/tsx": {
2386
- "version": "4.22.4",
2387
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.4.tgz",
2388
- "integrity": "sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==",
2358
+ "version": "4.23.1",
2359
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.1.tgz",
2360
+ "integrity": "sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==",
2389
2361
  "license": "MIT",
2390
2362
  "dependencies": {
2391
2363
  "esbuild": "~0.28.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/acpx",
3
- "version": "2026.7.2-beta.3",
3
+ "version": "2026.7.2-beta.4",
4
4
  "description": "OpenClaw ACP runtime backend with plugin-owned session and transport management.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,9 +8,9 @@
8
8
  },
9
9
  "type": "module",
10
10
  "dependencies": {
11
- "@agentclientprotocol/claude-agent-acp": "0.55.0",
12
- "@agentclientprotocol/codex-acp": "1.1.2",
13
- "acpx": "0.11.2",
11
+ "@agentclientprotocol/claude-agent-acp": "0.59.0",
12
+ "@agentclientprotocol/codex-acp": "1.1.4",
13
+ "acpx": "0.12.0",
14
14
  "smol-toml": "1.7.0",
15
15
  "zod": "4.4.3"
16
16
  },
@@ -24,13 +24,29 @@
24
24
  "install": {
25
25
  "npmSpec": "@openclaw/acpx",
26
26
  "defaultChoice": "npm",
27
- "minHostVersion": ">=2026.4.25"
27
+ "minHostVersion": ">=2026.4.25",
28
+ "requiredPlatformPackages": [
29
+ "@anthropic-ai/claude-agent-sdk-linux-x64",
30
+ "@anthropic-ai/claude-agent-sdk-linux-arm64",
31
+ "@anthropic-ai/claude-agent-sdk-linux-x64-musl",
32
+ "@anthropic-ai/claude-agent-sdk-linux-arm64-musl",
33
+ "@anthropic-ai/claude-agent-sdk-darwin-x64",
34
+ "@anthropic-ai/claude-agent-sdk-darwin-arm64",
35
+ "@anthropic-ai/claude-agent-sdk-win32-x64",
36
+ "@anthropic-ai/claude-agent-sdk-win32-arm64",
37
+ "@openai/codex-linux-x64",
38
+ "@openai/codex-linux-arm64",
39
+ "@openai/codex-darwin-x64",
40
+ "@openai/codex-darwin-arm64",
41
+ "@openai/codex-win32-x64",
42
+ "@openai/codex-win32-arm64"
43
+ ]
28
44
  },
29
45
  "compat": {
30
- "pluginApi": ">=2026.7.2-beta.3"
46
+ "pluginApi": ">=2026.7.2-beta.4"
31
47
  },
32
48
  "build": {
33
- "openclawVersion": "2026.7.2-beta.3",
49
+ "openclawVersion": "2026.7.2-beta.4",
34
50
  "staticAssets": [
35
51
  {
36
52
  "source": "./src/runtime-internals/mcp-proxy.mjs",
@@ -59,7 +75,7 @@
59
75
  "skills/**"
60
76
  ],
61
77
  "peerDependencies": {
62
- "openclaw": ">=2026.7.2-beta.3"
78
+ "openclaw": ">=2026.7.2-beta.4"
63
79
  },
64
80
  "peerDependenciesMeta": {
65
81
  "openclaw": {