@openclaw/acpx 2026.7.2-beta.2 → 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,10 +1,11 @@
1
- import { t as createAcpxRuntimeService } from "./register.runtime-CysfMsSr.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";
5
5
  import process$1 from "node:process";
6
6
  import { decodeNodePtyResumeParams, resolveNodeHostExecutable, runNodePtyCommand } from "openclaw/plugin-sdk/node-host";
7
7
  import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
8
+ import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
8
9
  import { createReadStream, readFileSync, statSync } from "node:fs";
9
10
  import fs$1 from "node:fs/promises";
10
11
  import path from "node:path";
@@ -390,7 +391,7 @@ const LOCAL_HOST_ID$1 = "gateway";
390
391
  const DEFAULT_PAGE_LIMIT = 20;
391
392
  const MAX_PAGE_LIMIT$1 = 100;
392
393
  const MAX_SEARCH_LENGTH = 500;
393
- const MAX_CURSOR_LENGTH$1 = 128;
394
+ const MAX_CURSOR_LENGTH = 128;
394
395
  const MAX_TRANSCRIPT_ITEM_BYTES = 512 * 1024;
395
396
  const MAX_TRANSCRIPT_PAGE_BYTES = 20 * 1024 * 1024;
396
397
  const SESSION_ID_PATTERN$1 = /^(?!-)[A-Za-z0-9._:-]{1,256}$/u;
@@ -407,18 +408,35 @@ function boundedLimit(value, fallback = DEFAULT_PAGE_LIMIT) {
407
408
  function encodeCursor(offset) {
408
409
  return Buffer.from(JSON.stringify({ offset }), "utf8").toString("base64url");
409
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
+ }
410
416
  function decodeCursor(value) {
411
- if (value === void 0) return 0;
412
- const cursor = optionalPiString(value, MAX_CURSOR_LENGTH$1);
413
- if (!cursor) throw new Error("cursor is invalid");
417
+ const cursor = optionalRawCursor(value);
418
+ if (cursor === void 0) return 0;
414
419
  try {
415
- const parsed = JSON.parse(Buffer.from(cursor, "base64url").toString("utf8"));
416
- if (!isRecord(parsed) || !Number.isInteger(parsed.offset) || Number(parsed.offset) < 0) throw new Error("invalid offset");
417
- 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;
418
427
  } catch (error) {
419
428
  throw new Error("cursor is invalid", { cause: error });
420
429
  }
421
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
+ }
422
440
  function truncateUtf8(text, maxBytes) {
423
441
  if (Buffer.byteLength(text, "utf8") <= maxBytes) return text;
424
442
  let low = 0;
@@ -485,8 +503,7 @@ function parseListParams(value) {
485
503
  if (unknown) throw new Error(`unknown Pi session list parameter: ${unknown}`);
486
504
  const searchTerm = optionalPiString(value.searchTerm, MAX_SEARCH_LENGTH);
487
505
  if (value.searchTerm !== void 0 && !searchTerm) throw new Error("searchTerm is invalid");
488
- const cursor = optionalPiString(value.cursor, MAX_CURSOR_LENGTH$1);
489
- if (value.cursor !== void 0 && !cursor) throw new Error("cursor is invalid");
506
+ const cursor = optionalRawCursor(value.cursor);
490
507
  return {
491
508
  limit: boundedLimit(value.limit),
492
509
  ...searchTerm ? { searchTerm } : {},
@@ -503,8 +520,7 @@ function parseReadParams(value) {
503
520
  if (unknown) throw new Error(`unknown Pi session read parameter: ${unknown}`);
504
521
  const threadId = optionalPiString(value.threadId, 256);
505
522
  if (!threadId || !SESSION_ID_PATTERN$1.test(threadId)) throw new Error("threadId is invalid");
506
- const cursor = optionalPiString(value.cursor, MAX_CURSOR_LENGTH$1);
507
- if (value.cursor !== void 0 && !cursor) throw new Error("cursor is invalid");
523
+ const cursor = optionalRawCursor(value.cursor);
508
524
  return {
509
525
  threadId,
510
526
  limit: boundedLimit(value.limit),
@@ -534,7 +550,7 @@ function isoTimestamp(message, entry) {
534
550
  function jsonText(value, maxLength = 2e4) {
535
551
  try {
536
552
  const text = JSON.stringify(value);
537
- return text.length > maxLength ? `${text.slice(0, maxLength)}…` : text;
553
+ return text.length > maxLength ? `${truncateUtf16Safe(text, maxLength)}…` : text;
538
554
  } catch {
539
555
  return;
540
556
  }
@@ -692,7 +708,6 @@ const CAPABILITY = "pi-sessions";
692
708
  const LOCAL_HOST_ID = "gateway";
693
709
  const MAX_PAGE_LIMIT = 100;
694
710
  const MAX_HOSTS = 100;
695
- const MAX_CURSOR_LENGTH = 128;
696
711
  const NODE_TIMEOUT_MS = 2e4;
697
712
  const SESSION_ID_PATTERN = /^(?!-)[A-Za-z0-9._:-]{1,256}$/u;
698
713
  const TRANSCRIPT_ITEM_TYPES = /* @__PURE__ */ new Set([
@@ -714,7 +729,7 @@ function isOptionalNumber(value) {
714
729
  return value === void 0 || typeof value === "number";
715
730
  }
716
731
  function isNodeSession(value) {
717
- 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);
718
733
  }
719
734
  function isNodeTranscriptItem(value) {
720
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");
@@ -830,13 +845,15 @@ async function listPiNodeHost(runtime, query, node) {
830
845
  }
831
846
  };
832
847
  try {
848
+ const cursor = query.cursors?.[hostId];
849
+ if (cursor !== void 0 && !isExactPiSessionCursor(cursor)) throw new Error("cursor is invalid");
833
850
  const page = parseNodeSessionPage(unwrapNodePayload(await runtime.nodes.invoke({
834
851
  nodeId: node.nodeId,
835
852
  command: PI_SESSIONS_LIST_COMMAND,
836
853
  params: {
837
854
  ...query.limitPerHost ? { limit: query.limitPerHost } : {},
838
855
  ...query.search ? { searchTerm: query.search } : {},
839
- ...query.cursors?.[hostId] ? { cursor: query.cursors[hostId] } : {}
856
+ ...cursor !== void 0 ? { cursor } : {}
840
857
  },
841
858
  timeoutMs: NODE_TIMEOUT_MS,
842
859
  scopes: ["operator.write"]
@@ -861,22 +878,22 @@ function parseNodeSessionPage(value) {
861
878
  if (!isRecord(value) || !Array.isArray(value.sessions) || value.sessions.length > MAX_PAGE_LIMIT) throw new Error("Pi node returned an invalid session page");
862
879
  if (!value.sessions.every(isNodeSession)) throw new Error("Pi node returned an invalid session page");
863
880
  const sessions = value.sessions;
864
- const nextCursor = optionalPiString(value.nextCursor, MAX_CURSOR_LENGTH);
865
- 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");
866
883
  return {
867
884
  sessions,
868
- ...nextCursor ? { nextCursor } : {}
885
+ ...nextCursor !== void 0 ? { nextCursor } : {}
869
886
  };
870
887
  }
871
888
  function parseNodeTranscriptPage(value, threadId) {
872
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");
873
- const nextCursor = optionalPiString(value.nextCursor, MAX_CURSOR_LENGTH);
874
- 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");
875
892
  return {
876
893
  hostId: LOCAL_HOST_ID,
877
894
  threadId,
878
895
  items: value.items,
879
- ...nextCursor ? { nextCursor } : {}
896
+ ...nextCursor !== void 0 ? { nextCursor } : {}
880
897
  };
881
898
  }
882
899
  async function listPiHosts(runtime, query) {
@@ -986,10 +1003,12 @@ async function openPiTerminal(params) {
986
1003
  };
987
1004
  }
988
1005
  async function readPiTranscript(runtime, request) {
1006
+ const cursor = request.cursor;
1007
+ if (cursor !== void 0 && !isExactPiSessionCursor(cursor)) throw new Error("cursor is invalid");
989
1008
  if (request.hostId === LOCAL_HOST_ID) return await readLocalPiTranscriptPage({
990
1009
  threadId: request.threadId,
991
1010
  ...request.limit ? { limit: request.limit } : {},
992
- ...request.cursor ? { cursor: request.cursor } : {}
1011
+ ...cursor !== void 0 ? { cursor } : {}
993
1012
  });
994
1013
  if (!request.hostId.startsWith("node:")) throw new Error("hostId is invalid");
995
1014
  const nodeId = request.hostId.slice(5);
@@ -1002,7 +1021,7 @@ async function readPiTranscript(runtime, request) {
1002
1021
  params: {
1003
1022
  threadId: request.threadId,
1004
1023
  ...request.limit ? { limit: request.limit } : {},
1005
- ...request.cursor ? { cursor: request.cursor } : {}
1024
+ ...cursor !== void 0 ? { cursor } : {}
1006
1025
  },
1007
1026
  timeoutMs: NODE_TIMEOUT_MS,
1008
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-DJchyiuU.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-CysfMsSr.js";
1
+ import { t as createAcpxRuntimeService } from "./register.runtime-Dajn8myc.js";
2
2
  export { createAcpxRuntimeService };
@@ -1,14 +1,14 @@
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
+ import { sliceUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
6
7
  import fs from "node:fs/promises";
7
8
  import path, { resolve } from "node:path";
8
9
  import { AsyncLocalStorage } from "node:async_hooks";
9
10
  import { ACPX_BACKEND_ID, AcpxRuntime as AcpxRuntime$1, createAcpRuntime, createAgentRegistry, createFileSessionStore, decodeAcpxRuntimeHandleState, encodeAcpxRuntimeHandleState, isRequestedModelUnsupportedError } from "acpx/runtime";
10
11
  import { redactSensitiveText } from "openclaw/plugin-sdk/security-runtime";
11
- import { sliceUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
12
12
  //#region extensions/acpx/src/runtime.ts
13
13
  /**
14
14
  * OpenClaw ACPX runtime adapter. It wraps the upstream acpx runtime with
@@ -166,12 +166,6 @@ const OPENCLAW_BRIDGE_SUBCOMMAND = "acp";
166
166
  const CODEX_ACP_AGENT_ID = "codex";
167
167
  const CODEX_ACP_OPENCLAW_PREFIX = "openai/";
168
168
  const CLAUDE_ACP_OPENCLAW_PREFIX = "anthropic/";
169
- const CODEX_ACP_REASONING_EFFORTS = /* @__PURE__ */ new Set([
170
- "low",
171
- "medium",
172
- "high",
173
- "xhigh"
174
- ]);
175
169
  const CODEX_ACP_THINKING_ALIASES = /* @__PURE__ */ new Map([
176
170
  ["off", void 0],
177
171
  ["minimal", "low"],
@@ -286,24 +280,51 @@ function normalizeCodexAcpReasoningEffort(rawThinking) {
286
280
  if (!CODEX_ACP_THINKING_ALIASES.has(normalized)) failUnsupportedCodexAcpThinking(rawThinking ?? "");
287
281
  return CODEX_ACP_THINKING_ALIASES.get(normalized);
288
282
  }
289
- function normalizeCodexAcpModelOverride(rawModel, rawThinking) {
283
+ function isCodexAcpReasoningEffortAlias(value) {
284
+ const normalized = value?.trim().toLowerCase();
285
+ return Boolean(normalized && CODEX_ACP_THINKING_ALIASES.has(normalized));
286
+ }
287
+ function classifyCodexAcpModelRequest(rawModel, rawThinking) {
290
288
  const raw = rawModel?.trim();
291
289
  const thinkingReasoningEffort = normalizeCodexAcpReasoningEffort(rawThinking);
292
- if (!raw) return thinkingReasoningEffort ? { reasoningEffort: thinkingReasoningEffort } : void 0;
290
+ const thinkingOnlyOverride = thinkingReasoningEffort ? { reasoningEffort: thinkingReasoningEffort } : void 0;
291
+ if (!raw) return {
292
+ kind: "override",
293
+ override: thinkingOnlyOverride ?? {}
294
+ };
293
295
  let value = raw;
294
- if (value.toLowerCase().startsWith(CODEX_ACP_OPENCLAW_PREFIX)) value = value.slice(7);
295
- const parts = value.split("/");
296
- if (parts.length > 2) failUnsupportedCodexAcpModel(raw, `Codex ACP model "${raw}" is not supported. Use openai/<model> or <model>/<reasoning-effort>.`);
297
- const model = (parts[0] ?? "").trim();
298
- const modelReasoningEffort = normalizeCodexAcpReasoningEffort(parts[1]);
299
- if (!model) failUnsupportedCodexAcpModel(raw, `Codex ACP model "${raw}" is not supported. Use openai/<model> or <model>/<reasoning-effort>.`);
296
+ let hadOpenAiQualifier = false;
297
+ if (value.toLowerCase().startsWith(CODEX_ACP_OPENCLAW_PREFIX)) {
298
+ value = value.slice(7);
299
+ hadOpenAiQualifier = true;
300
+ }
301
+ let model = value.trim();
302
+ let modelReasoningEffort;
303
+ const slashIndex = value.lastIndexOf("/");
304
+ if (slashIndex >= 0 && isCodexAcpReasoningEffortAlias(value.slice(slashIndex + 1))) {
305
+ modelReasoningEffort = normalizeCodexAcpReasoningEffort(value.slice(slashIndex + 1));
306
+ model = value.slice(0, slashIndex).trim();
307
+ }
308
+ if (hadOpenAiQualifier && (!model || model.includes("/"))) failUnsupportedCodexAcpModel(raw, `Codex ACP model "${raw}" is not supported. Use openai/<model> or <model>/<reasoning-effort>.`);
309
+ if (!model || model.includes("/")) return thinkingOnlyOverride ? {
310
+ kind: "unsupported",
311
+ thinkingOverride: thinkingOnlyOverride
312
+ } : { kind: "unsupported" };
300
313
  const reasoningEffort = thinkingReasoningEffort ?? modelReasoningEffort;
301
- if (reasoningEffort && !CODEX_ACP_REASONING_EFFORTS.has(reasoningEffort)) failUnsupportedCodexAcpThinking(reasoningEffort);
302
314
  return {
303
- model,
304
- ...reasoningEffort ? { reasoningEffort } : {}
315
+ kind: "override",
316
+ override: {
317
+ model,
318
+ ...reasoningEffort ? { reasoningEffort } : {}
319
+ }
305
320
  };
306
321
  }
322
+ function withCodexSessionModel(input, override) {
323
+ const next = { ...input };
324
+ if (override?.model) next.model = override.model;
325
+ else delete next.model;
326
+ return next;
327
+ }
307
328
  function normalizeClaudeAcpModelOverride(rawModel) {
308
329
  const raw = rawModel?.trim();
309
330
  if (!raw) return;
@@ -317,8 +338,9 @@ function withAcpxSessionOptions(input) {
317
338
  ...existingOptions,
318
339
  model
319
340
  } : existingOptions;
341
+ const { modelExplicit: _modelExplicit, ...rest } = input;
320
342
  return {
321
- ...input,
343
+ ...rest,
322
344
  ...sessionOptions ? { sessionOptions } : {}
323
345
  };
324
346
  }
@@ -617,9 +639,18 @@ var AcpxRuntime = class {
617
639
  command,
618
640
  sessionKey: input.sessionKey
619
641
  });
642
+ const isCodexAcp = normalizeAgentName(input.agent) === CODEX_ACP_AGENT_ID && isCodexAcpCommand(command);
620
643
  const claudeModelOverride = isClaudeAcpCommand(command) ? normalizeClaudeAcpModelOverride(input.model) : void 0;
621
- const codexModelOverride = normalizeAgentName(input.agent) === CODEX_ACP_AGENT_ID && isCodexAcpCommand(command) ? normalizeCodexAcpModelOverride(input.model, input.thinking) : void 0;
622
- const ensureInput = claudeModelOverride ? {
644
+ const codexClassification = isCodexAcp ? classifyCodexAcpModelRequest(input.model, input.thinking) : void 0;
645
+ if (codexClassification?.kind === "unsupported" && input.modelExplicit) failUnsupportedCodexAcpModel(input.model ?? "");
646
+ const classifiedCodexOverride = codexClassification?.kind === "override" ? codexClassification.override : codexClassification?.thinkingOverride;
647
+ const codexModelOverride = classifiedCodexOverride && Object.keys(classifiedCodexOverride).length > 0 ? classifiedCodexOverride : void 0;
648
+ const requestedModel = input.model?.trim();
649
+ const appliedModel = isCodexAcp && requestedModel ? codexModelOverride?.model ? {
650
+ kind: "applied",
651
+ model: requestedModel
652
+ } : { kind: "dropped" } : void 0;
653
+ const ensureInput = isCodexAcp ? withCodexSessionModel(input, codexModelOverride) : claudeModelOverride ? {
623
654
  ...input,
624
655
  model: claudeModelOverride
625
656
  } : input;
@@ -631,7 +662,7 @@ var AcpxRuntime = class {
631
662
  command: stableLaunchCommand,
632
663
  resumeSessionId: input.resumeSessionId
633
664
  });
634
- if (!codexModelOverride) return await this.runWithLaunchLease({
665
+ const handle = !codexModelOverride ? await this.runWithLaunchLease({
635
666
  sessionKey: ensureInput.sessionKey,
636
667
  command: stableLaunchCommand,
637
668
  enabled: shouldStartWithLease,
@@ -640,21 +671,20 @@ var AcpxRuntime = class {
640
671
  fallbackCode: "ACP_SESSION_INIT_FAILED",
641
672
  run: () => ensureDelegateSessionWithModelFallback(delegate, ensureInput)
642
673
  })
643
- });
644
- const normalizedInput = {
645
- ...ensureInput,
646
- ...codexModelOverride.model ? { model: codexModelOverride.model } : {}
647
- };
648
- return await this.runWithLaunchLease({
674
+ }) : await this.runWithLaunchLease({
649
675
  sessionKey: input.sessionKey,
650
676
  command: stableLaunchCommand,
651
677
  enabled: shouldStartWithLease,
652
678
  run: () => this.codexAcpModelOverrideScope.run(codexModelOverride, () => this.withCodexWrapperDiagnostics({
653
679
  command: stableLaunchCommand,
654
680
  fallbackCode: "ACP_SESSION_INIT_FAILED",
655
- run: () => delegate.ensureSession(withAcpxSessionOptions(normalizedInput))
681
+ run: () => delegate.ensureSession(withAcpxSessionOptions(ensureInput))
656
682
  }))
657
683
  });
684
+ return appliedModel ? {
685
+ ...handle,
686
+ appliedModel
687
+ } : handle;
658
688
  }
659
689
  async *runTurn(input) {
660
690
  const command = await this.resolveCommandForHandle(input.handle);
@@ -771,22 +801,32 @@ var AcpxRuntime = class {
771
801
  const isCodexAcp = isCodexAcpCommand(command);
772
802
  if (WIRE_TIMEOUT_CONFIG_KEYS.has(key) && (isCodexAcp || isClaudeAcpCommand(command))) return;
773
803
  if (isCodexAcp) {
774
- if (key === "model" || key === "thinking" || key === "thought_level" || key === "reasoning_effort") {
775
- const override = key === "model" ? normalizeCodexAcpModelOverride(input.value) : normalizeCodexAcpModelOverride(void 0, input.value);
776
- if (!override && key !== "model") return;
777
- if (override) {
778
- if (override.model) await delegate.setConfigOption({
779
- ...input,
780
- key: "model",
781
- value: override.model
782
- });
783
- if (override.reasoningEffort) await delegate.setConfigOption({
784
- ...input,
785
- key: "reasoning_effort",
786
- value: override.reasoningEffort
787
- });
788
- return;
789
- }
804
+ if (key === "model") {
805
+ const classification = classifyCodexAcpModelRequest(input.value);
806
+ if (classification.kind === "unsupported") failUnsupportedCodexAcpModel(input.value);
807
+ const { override } = classification;
808
+ if (override.model) await delegate.setConfigOption({
809
+ ...input,
810
+ key: "model",
811
+ value: override.model
812
+ });
813
+ if (override.reasoningEffort) await delegate.setConfigOption({
814
+ ...input,
815
+ key: "reasoning_effort",
816
+ value: override.reasoningEffort
817
+ });
818
+ return;
819
+ }
820
+ if (key === "thinking" || key === "thought_level" || key === "reasoning_effort") {
821
+ const classification = classifyCodexAcpModelRequest(void 0, input.value);
822
+ const reasoningEffort = classification.kind === "override" ? classification.override.reasoningEffort : void 0;
823
+ if (!reasoningEffort) return;
824
+ await delegate.setConfigOption({
825
+ ...input,
826
+ key: "reasoning_effort",
827
+ value: reasoningEffort
828
+ });
829
+ return;
790
830
  }
791
831
  }
792
832
  if (isClaudeAcpCommand(command) && key === "model") {
@@ -827,10 +867,10 @@ var AcpxRuntime = class {
827
867
  const testing = {
828
868
  appendCodexAcpConfigOverrides,
829
869
  assertSupportedRuntimeSessionMode,
870
+ classifyCodexAcpModelRequest,
830
871
  isClaudeAcpCommand,
831
872
  isCodexAcpCommand,
832
- normalizeClaudeAcpModelOverride,
833
- normalizeCodexAcpModelOverride
873
+ normalizeClaudeAcpModelOverride
834
874
  };
835
875
  //#endregion
836
876
  export { ACPX_BACKEND_ID, AcpxRuntime, testing as __testing, testing, createAcpRuntime, createAgentRegistry, createFileSessionStore, decodeAcpxRuntimeHandleState, encodeAcpxRuntimeHandleState };
@@ -1,8 +1,8 @@
1
- import { n as createLazyAcpRuntimeProxy } from "./register.runtime-CysfMsSr.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-BEOGc4Ik.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.2",
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.2",
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.2",
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.2"
46
+ "pluginApi": ">=2026.7.2-beta.4"
31
47
  },
32
48
  "build": {
33
- "openclawVersion": "2026.7.2-beta.2",
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.2"
78
+ "openclaw": ">=2026.7.2-beta.4"
63
79
  },
64
80
  "peerDependenciesMeta": {
65
81
  "openclaw": {