@openclaw/codex 2026.5.24-beta.2 → 2026.5.25-beta.1

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.
Files changed (26) hide show
  1. package/dist/{client-1sSy4p3z.js → client-SrtuTTVa.js} +10 -3
  2. package/dist/{client-factory-Bk6i4FnW.js → client-factory-A7DQkSLq.js} +1 -1
  3. package/dist/{command-handlers-CcTABuem.js → command-handlers-CLtPT37L.js} +10 -23
  4. package/dist/compact-acCua7zr.js +155 -0
  5. package/dist/{computer-use-Hdq1WgTA.js → computer-use-CVfE2Vfb.js} +2 -2
  6. package/dist/{config-DDMrwfJl.js → config-D6TUuyo2.js} +6 -3
  7. package/dist/{node-cli-sessions-9CAqnIaA.js → conversation-binding-B-GevkEb.js} +426 -434
  8. package/dist/{dynamic-tools-Bq717oJR.js → dynamic-tools-BXAE1U1-.js} +20 -11
  9. package/dist/harness.js +5 -5
  10. package/dist/index.js +451 -17
  11. package/dist/media-understanding-provider.js +7 -5
  12. package/dist/{models-DtGLkqMP.js → models-CC2IusQs.js} +3 -3
  13. package/dist/{notification-correlation-qKY_sgga.js → notification-correlation-D7tJW3FW.js} +26 -11
  14. package/dist/provider.js +3 -3
  15. package/dist/{request-D93E78SA.js → request-BO0z3vA8.js} +3 -3
  16. package/dist/{run-attempt-CT1N__qp.js → run-attempt-BjoI3hUJ.js} +279 -230
  17. package/dist/{session-binding-Bw_mfIW2.js → session-binding-CwNOIDP2.js} +1 -1
  18. package/dist/{shared-client-CFCUGEVs.js → shared-client-CZP1DjaN.js} +3 -4
  19. package/dist/{side-question-CYFMTA1O.js → side-question-Cb4COOQ9.js} +16 -11
  20. package/dist/test-api.js +3 -3
  21. package/dist/{thread-lifecycle-DGoaguJh.js → thread-lifecycle-CXMd9UgJ.js} +10 -12
  22. package/dist/{vision-tools-DOnxzH2y.js → vision-tools-CETeQgze.js} +16 -4
  23. package/npm-shrinkwrap.json +225 -238
  24. package/package.json +7 -7
  25. package/dist/compact-DnTgL6UT.js +0 -475
  26. package/dist/protocol-oeJQu4rs.js +0 -9
@@ -1,5 +1,4 @@
1
- import { l as resolveCodexAppServerRuntimeOptions } from "./config-DDMrwfJl.js";
2
- import { n as isRpcResponse } from "./protocol-oeJQu4rs.js";
1
+ import { l as resolveCodexAppServerRuntimeOptions } from "./config-D6TUuyo2.js";
3
2
  import { materializeWindowsSpawnProgram, resolveWindowsSpawnProgram } from "openclaw/plugin-sdk/windows-spawn";
4
3
  import { OPENCLAW_VERSION, embeddedAgentLog } from "openclaw/plugin-sdk/agent-harness-runtime";
5
4
  import { createInterface } from "node:readline";
@@ -7,6 +6,14 @@ import { spawn } from "node:child_process";
7
6
  import { EventEmitter } from "node:events";
8
7
  import { PassThrough, Writable } from "node:stream";
9
8
  import WebSocket from "ws";
9
+ //#region extensions/codex/src/app-server/protocol.ts
10
+ function isJsonObject$1(value) {
11
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
12
+ }
13
+ function isRpcResponse(message) {
14
+ return "id" in message && !("method" in message);
15
+ }
16
+ //#endregion
10
17
  //#region extensions/codex/src/app-server/transport-stdio.ts
11
18
  const UNSAFE_ENVIRONMENT_KEYS = new Set([
12
19
  "__proto__",
@@ -648,4 +655,4 @@ function formatExitValue(value) {
648
655
  return "unknown";
649
656
  }
650
657
  //#endregion
651
- export { isCodexAppServerConnectionClosedError as a, resolveCodexAppServerSpawnEnv as c, isCodexAppServerApprovalRequest as i, CodexAppServerRpcError as n, MANAGED_CODEX_APP_SERVER_PACKAGE as o, compareCodexAppServerVersions as r, MIN_CODEX_SANDBOX_EXEC_SERVER_APP_SERVER_VERSION as s, CodexAppServerClient as t };
658
+ export { isCodexAppServerConnectionClosedError as a, resolveCodexAppServerSpawnEnv as c, isCodexAppServerApprovalRequest as i, isJsonObject$1 as l, CodexAppServerRpcError as n, MANAGED_CODEX_APP_SERVER_PACKAGE as o, compareCodexAppServerVersions as r, MIN_CODEX_SANDBOX_EXEC_SERVER_APP_SERVER_VERSION as s, CodexAppServerClient as t };
@@ -1,5 +1,5 @@
1
1
  //#region extensions/codex/src/app-server/client-factory.ts
2
- const defaultCodexAppServerClientFactory = (startOptions, authProfileId, agentDir, config) => import("./shared-client-CFCUGEVs.js").then((n) => n.a).then(({ getSharedCodexAppServerClient }) => getSharedCodexAppServerClient({
2
+ const defaultCodexAppServerClientFactory = (startOptions, authProfileId, agentDir, config) => import("./shared-client-CZP1DjaN.js").then((n) => n.a).then(({ getSharedCodexAppServerClient }) => getSharedCodexAppServerClient({
3
3
  startOptions,
4
4
  authProfileId,
5
5
  agentDir,
@@ -1,14 +1,15 @@
1
- import { a as isCodexFastServiceTier, l as resolveCodexAppServerRuntimeOptions } from "./config-DDMrwfJl.js";
2
- import { n as listCodexAppServerModels, t as listAllCodexAppServerModels } from "./models-DtGLkqMP.js";
3
- import { t as isJsonObject } from "./protocol-oeJQu4rs.js";
4
- import { i as readCodexAppServerBinding, o as writeCodexAppServerBinding, t as clearCodexAppServerBinding } from "./session-binding-Bw_mfIW2.js";
5
- import { i as describeControlFailure, r as CODEX_CONTROL_METHODS, t as requestCodexAppServerJson } from "./request-D93E78SA.js";
6
- import { _ as summarizeCodexAccountUsage, a as buildHelp, c as formatCodexStatus, d as formatModels, f as formatThreads, l as formatComputerUseStatus, o as formatAccount, p as readString$1, s as formatCodexDisplayText, u as formatList } from "./notification-correlation-qKY_sgga.js";
1
+ import { a as isCodexFastServiceTier, l as resolveCodexAppServerRuntimeOptions } from "./config-D6TUuyo2.js";
2
+ import { n as listCodexAppServerModels, t as listAllCodexAppServerModels } from "./models-CC2IusQs.js";
3
+ import { l as isJsonObject } from "./client-SrtuTTVa.js";
4
+ import { i as readCodexAppServerBinding, o as writeCodexAppServerBinding, t as clearCodexAppServerBinding } from "./session-binding-CwNOIDP2.js";
5
+ import { i as describeControlFailure, r as CODEX_CONTROL_METHODS, t as requestCodexAppServerJson } from "./request-BO0z3vA8.js";
6
+ import { _ as summarizeCodexAccountUsage, a as buildHelp, c as formatCodexStatus, d as formatModels, f as formatThreads, l as formatComputerUseStatus, o as formatAccount, p as readString$1, s as formatCodexDisplayText, u as formatList } from "./notification-correlation-D7tJW3FW.js";
7
7
  import { n as resolveCodexNativeExecutionBlock, r as resolveCodexNativeSandboxBlock } from "./sandbox-guard-CTnEWuor.js";
8
- import { _ as steerCodexConversationTurn, b as readCodexConversationBindingData, d as parseCodexFastModeArg, f as parseCodexPermissionsModeArg, g as setCodexConversationPermissions, h as setCodexConversationModel, l as startCodexConversationThread, m as setCodexConversationFastMode, p as readCodexConversationActiveTurn, r as formatCodexCliSessions, u as formatPermissionsMode, v as stopCodexConversationTurn, x as resolveCodexDefaultWorkspaceDir, y as createCodexCliNodeConversationBindingData } from "./node-cli-sessions-9CAqnIaA.js";
9
- import { n as installCodexComputerUse, r as readCodexComputerUseStatus } from "./computer-use-Hdq1WgTA.js";
8
+ import { _ as steerCodexConversationTurn, b as readCodexConversationBindingData, d as parseCodexFastModeArg, f as parseCodexPermissionsModeArg, g as setCodexConversationPermissions, h as setCodexConversationModel, m as setCodexConversationFastMode, o as formatCodexCliSessions, p as readCodexConversationActiveTurn, r as startCodexConversationThread, u as formatPermissionsMode, v as stopCodexConversationTurn, x as resolveCodexDefaultWorkspaceDir, y as createCodexCliNodeConversationBindingData } from "./conversation-binding-B-GevkEb.js";
9
+ import { n as installCodexComputerUse, r as readCodexComputerUseStatus } from "./computer-use-CVfE2Vfb.js";
10
10
  import { n as rememberCodexRateLimits } from "./rate-limit-cache-N66I-Rd7.js";
11
11
  import crypto from "node:crypto";
12
+ import { normalizeOptionalString, normalizeUniqueStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
12
13
  import { ensureAuthProfileStore, findNormalizedProviderValue, resolveAgentDir, resolveAuthProfileEligibility, resolveAuthProfileOrder, resolveDefaultAgentDir, resolveProfileUnusableUntilForDisplay, resolveSessionAgentIds } from "openclaw/plugin-sdk/agent-runtime";
13
14
  //#region extensions/codex/src/command-account.ts
14
15
  const OPENAI_PROVIDER_ID = "openai";
@@ -74,7 +75,7 @@ async function readCodexAccountAuthOverview(params) {
74
75
  function resolveDisplayAuthOrder(params) {
75
76
  const codexOrder = resolveOrder(params.store.order, OPENAI_CODEX_PROVIDER_ID) ?? resolveOrder(params.config?.auth?.order, OPENAI_CODEX_PROVIDER_ID);
76
77
  if (codexOrder && codexOrder.length > 0) return {
77
- order: dedupe(codexOrder),
78
+ order: normalizeUniqueStringEntries(codexOrder),
78
79
  explicit: true
79
80
  };
80
81
  return {
@@ -302,17 +303,6 @@ function formatRelativeReset(untilMs, nowMs) {
302
303
  const days = Math.ceil(durationMs / dayMs);
303
304
  return `in ${days} ${days === 1 ? "day" : "days"}`;
304
305
  }
305
- function dedupe(values) {
306
- const seen = /* @__PURE__ */ new Set();
307
- const result = [];
308
- for (const value of values) {
309
- const trimmed = value.trim();
310
- if (!trimmed || seen.has(trimmed)) continue;
311
- seen.add(trimmed);
312
- result.push(trimmed);
313
- }
314
- return result;
315
- }
316
306
  //#endregion
317
307
  //#region extensions/codex/src/command-plugins-management.ts
318
308
  const POLICY_REFRESH_HINT = "New Codex conversations pick this up automatically. Use /new or /reset to refresh the current one.";
@@ -1607,8 +1597,5 @@ function normalizeComputerUseStringOverrides(overrides) {
1607
1597
  if (mcpServerName) normalized.mcpServerName = mcpServerName;
1608
1598
  return normalized;
1609
1599
  }
1610
- function normalizeOptionalString(value) {
1611
- return value?.trim() || void 0;
1612
- }
1613
1600
  //#endregion
1614
1601
  export { handleCodexSubcommand };
@@ -0,0 +1,155 @@
1
+ import { t as defaultCodexAppServerClientFactory } from "./client-factory-A7DQkSLq.js";
2
+ import { l as resolveCodexAppServerRuntimeOptions } from "./config-D6TUuyo2.js";
3
+ import { i as readCodexAppServerBinding } from "./session-binding-CwNOIDP2.js";
4
+ import { n as resolveCodexNativeExecutionBlock } from "./sandbox-guard-CTnEWuor.js";
5
+ import { asOptionalRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
6
+ import { embeddedAgentLog } from "openclaw/plugin-sdk/agent-harness-runtime";
7
+ //#region extensions/codex/src/app-server/compact.ts
8
+ const warnedIgnoredCompactionOverrides = /* @__PURE__ */ new Set();
9
+ async function maybeCompactCodexAppServerSession(params, options = {}) {
10
+ warnIfIgnoringOpenClawCompactionOverrides(params);
11
+ return compactCodexNativeThread(params, options);
12
+ }
13
+ function warnIfIgnoringOpenClawCompactionOverrides(params) {
14
+ const ignoredConfig = readIgnoredCompactionOverridePaths(params);
15
+ if (ignoredConfig.length === 0) return;
16
+ const warningKey = ignoredConfig.join("\0");
17
+ if (warnedIgnoredCompactionOverrides.has(warningKey)) return;
18
+ warnedIgnoredCompactionOverrides.add(warningKey);
19
+ embeddedAgentLog.warn("ignoring OpenClaw compaction overrides for Codex app-server compaction; Codex uses native server-side compaction", {
20
+ sessionId: params.sessionId,
21
+ sessionKey: params.sessionKey,
22
+ ignoredConfig
23
+ });
24
+ }
25
+ function readIgnoredCompactionOverridePaths(params) {
26
+ const ignored = /* @__PURE__ */ new Set();
27
+ for (const entry of readCompactionOverrideEntries(params)) {
28
+ const localProvider = typeof entry.record.provider === "string" ? entry.record.provider.trim() : "";
29
+ const inheritedProvider = !localProvider && typeof entry.inheritedRecord?.provider === "string" ? entry.inheritedRecord.provider.trim() : "";
30
+ const providerPath = localProvider ? `${entry.path}.compaction.provider` : inheritedProvider && entry.inheritedPath ? `${entry.inheritedPath}.compaction.provider` : void 0;
31
+ if (typeof entry.record.model === "string" && entry.record.model.trim()) ignored.add(`${entry.path}.compaction.model`);
32
+ if (providerPath) ignored.add(providerPath);
33
+ }
34
+ return [...ignored];
35
+ }
36
+ function readCompactionOverrideEntries(params) {
37
+ const entries = [];
38
+ const defaultCompaction = asOptionalRecord(asOptionalRecord(params.config?.agents)?.defaults)?.compaction;
39
+ const defaultRecord = asOptionalRecord(defaultCompaction);
40
+ if (defaultRecord) entries.push({
41
+ path: "agents.defaults",
42
+ record: defaultRecord
43
+ });
44
+ const agentId = readAgentIdFromSessionKey(params.sessionKey ?? params.sandboxSessionKey);
45
+ if (!agentId) return entries;
46
+ const agentCompaction = asOptionalRecord((Array.isArray(params.config?.agents?.list) ? params.config.agents.list : []).find((agent) => {
47
+ return (typeof agent?.id === "string" ? agent.id.trim().toLowerCase() : "") === agentId;
48
+ }))?.compaction;
49
+ const agentRecord = asOptionalRecord(agentCompaction);
50
+ if (agentRecord) entries.push({
51
+ path: `agents.list.${agentId}`,
52
+ record: agentRecord,
53
+ inheritedRecord: defaultRecord,
54
+ inheritedPath: "agents.defaults"
55
+ });
56
+ return entries;
57
+ }
58
+ function readAgentIdFromSessionKey(sessionKey) {
59
+ const parts = sessionKey?.trim().toLowerCase().split(":").filter(Boolean) ?? [];
60
+ if (parts.length < 3 || parts[0] !== "agent") return;
61
+ return parts[1]?.trim() || void 0;
62
+ }
63
+ async function compactCodexNativeThread(params, options = {}) {
64
+ const nativeExecutionBlock = resolveCodexNativeExecutionBlock({
65
+ config: params.config,
66
+ sessionKey: params.sandboxSessionKey ?? params.sessionKey,
67
+ sessionId: params.sessionId,
68
+ surface: "native compaction"
69
+ });
70
+ if (nativeExecutionBlock) return {
71
+ ok: false,
72
+ compacted: false,
73
+ reason: nativeExecutionBlock
74
+ };
75
+ const appServer = resolveCodexAppServerRuntimeOptions({ pluginConfig: options.pluginConfig });
76
+ const binding = await readCodexAppServerBinding(params.sessionFile, { config: params.config });
77
+ if (!binding?.threadId) return failedCodexThreadBindingCompactionResult(params, {
78
+ reason: "no codex app-server thread binding",
79
+ recovery: "missing_thread_binding"
80
+ });
81
+ const requestedAuthProfileId = params.authProfileId?.trim() || void 0;
82
+ if (requestedAuthProfileId && binding.authProfileId && binding.authProfileId !== requestedAuthProfileId) return {
83
+ ok: false,
84
+ compacted: false,
85
+ reason: "auth profile mismatch for session binding"
86
+ };
87
+ const client = await (options.clientFactory ?? defaultCodexAppServerClientFactory)(appServer.start, requestedAuthProfileId ?? binding.authProfileId, params.agentDir, params.config);
88
+ try {
89
+ await client.request("thread/compact/start", { threadId: binding.threadId });
90
+ embeddedAgentLog.info("started codex app-server compaction", {
91
+ sessionId: params.sessionId,
92
+ threadId: binding.threadId
93
+ });
94
+ } catch (error) {
95
+ if (isCodexThreadNotFoundError(error)) return failedCodexThreadBindingCompactionResult(params, {
96
+ threadId: binding.threadId,
97
+ reason: formatCompactionError(error),
98
+ recovery: "stale_thread_binding"
99
+ });
100
+ embeddedAgentLog.warn("codex app-server compaction failed", {
101
+ sessionId: params.sessionId,
102
+ sessionKey: params.sessionKey,
103
+ threadId: binding.threadId,
104
+ reason: formatCompactionError(error)
105
+ });
106
+ return {
107
+ ok: false,
108
+ compacted: false,
109
+ reason: formatCompactionError(error)
110
+ };
111
+ }
112
+ const resultDetails = {
113
+ backend: "codex-app-server",
114
+ threadId: binding.threadId,
115
+ signal: "thread/compact/start",
116
+ pending: true
117
+ };
118
+ return {
119
+ ok: true,
120
+ compacted: false,
121
+ result: {
122
+ summary: "",
123
+ firstKeptEntryId: "",
124
+ tokensBefore: params.currentTokenCount ?? 0,
125
+ details: resultDetails
126
+ }
127
+ };
128
+ }
129
+ function failedCodexThreadBindingCompactionResult(params, recovery) {
130
+ embeddedAgentLog.warn("codex app-server compaction could not use thread binding", {
131
+ sessionId: params.sessionId,
132
+ sessionKey: params.sessionKey,
133
+ threadId: recovery.threadId,
134
+ reason: recovery.reason,
135
+ recovery: recovery.recovery
136
+ });
137
+ return {
138
+ ok: false,
139
+ compacted: false,
140
+ reason: recovery.reason,
141
+ failure: {
142
+ reason: recovery.recovery,
143
+ rawError: recovery.reason
144
+ }
145
+ };
146
+ }
147
+ function isCodexThreadNotFoundError(error) {
148
+ return formatCompactionError(error).toLowerCase().includes("thread not found");
149
+ }
150
+ function formatCompactionError(error) {
151
+ if (error instanceof Error) return error.message;
152
+ return String(error);
153
+ }
154
+ //#endregion
155
+ export { maybeCompactCodexAppServerSession };
@@ -1,5 +1,5 @@
1
- import { l as resolveCodexAppServerRuntimeOptions, u as resolveCodexComputerUseConfig } from "./config-DDMrwfJl.js";
2
- import { i as describeControlFailure, t as requestCodexAppServerJson } from "./request-D93E78SA.js";
1
+ import { l as resolveCodexAppServerRuntimeOptions, u as resolveCodexComputerUseConfig } from "./config-D6TUuyo2.js";
2
+ import { i as describeControlFailure, t as requestCodexAppServerJson } from "./request-BO0z3vA8.js";
3
3
  import { existsSync } from "node:fs";
4
4
  //#region extensions/codex/src/app-server/computer-use.ts
5
5
  var CodexComputerUseSetupError = class extends Error {
@@ -1,6 +1,7 @@
1
1
  import { createHmac, randomBytes } from "node:crypto";
2
2
  import { readFileSync } from "node:fs";
3
3
  import { hostname } from "node:os";
4
+ import { normalizeTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
4
5
  import { detectWindowsSpawnCommandInlineArgs } from "openclaw/plugin-sdk/windows-spawn";
5
6
  import { z } from "zod";
6
7
  //#region extensions/codex/src/app-server/config.ts
@@ -9,6 +10,9 @@ const START_OPTIONS_KEY_SECRET = getStartOptionsKeySecret();
9
10
  const UNIX_CODEX_REQUIREMENTS_PATH = "/etc/codex/requirements.toml";
10
11
  const WINDOWS_CODEX_REQUIREMENTS_SUFFIX = "\\OpenAI\\Codex\\requirements.toml";
11
12
  const CODEX_PLUGINS_MARKETPLACE_NAME = "openai-curated";
13
+ function shouldAutoApproveCodexAppServerApprovals(appServer) {
14
+ return appServer.approvalPolicy === "never" && appServer.sandbox === "danger-full-access";
15
+ }
12
16
  const DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME = "computer-use";
13
17
  const DEFAULT_CODEX_COMPUTER_USE_MCP_SERVER_NAME = "computer-use";
14
18
  const DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS = 6e4;
@@ -457,8 +461,7 @@ function normalizeHeaders(value) {
457
461
  return Object.fromEntries(Object.entries(value).map(([key, child]) => [key.trim(), readNonEmptyString(child)]).filter((entry) => Boolean(entry[0] && entry[1])));
458
462
  }
459
463
  function normalizeStringList(value) {
460
- if (!Array.isArray(value)) return [];
461
- return value.map((entry) => readNonEmptyString(entry)).filter((entry) => entry !== void 0);
464
+ return normalizeTrimmedStringList(value);
462
465
  }
463
466
  function readBooleanEnv(value) {
464
467
  if (value === void 0) return;
@@ -526,4 +529,4 @@ function splitShellWords(value) {
526
529
  return words;
527
530
  }
528
531
  //#endregion
529
- export { isCodexFastServiceTier as a, readCodexPluginConfig as c, resolveCodexPluginsPolicy as d, withMcpElicitationsApprovalPolicy as f, isCodexAppServerApprovalPolicyAllowedByRequirements as i, resolveCodexAppServerRuntimeOptions as l, codexAppServerStartOptionsKey as n, isCodexSandboxExecServerEnabled as o, codexSandboxPolicyForTurn as r, normalizeCodexServiceTier as s, CODEX_PLUGINS_MARKETPLACE_NAME as t, resolveCodexComputerUseConfig as u };
532
+ export { isCodexFastServiceTier as a, readCodexPluginConfig as c, resolveCodexPluginsPolicy as d, shouldAutoApproveCodexAppServerApprovals as f, isCodexAppServerApprovalPolicyAllowedByRequirements as i, resolveCodexAppServerRuntimeOptions as l, codexAppServerStartOptionsKey as n, isCodexSandboxExecServerEnabled as o, withMcpElicitationsApprovalPolicy as p, codexSandboxPolicyForTurn as r, normalizeCodexServiceTier as s, CODEX_PLUGINS_MARKETPLACE_NAME as t, resolveCodexComputerUseConfig as u };