@openclaw/codex 2026.7.1-beta.4 → 2026.7.1-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{app-server-policy-BUk0GLMy.js → app-server-policy-C968Kgin.js} +1 -1
- package/dist/{command-handlers-UVniG5Hl.js → command-handlers-Dv-pzAmg.js} +6 -6
- package/dist/{command-rpc-BjgEPh19.js → command-rpc-eLM_mtC7.js} +4 -4
- package/dist/{compact-CZzbcygx.js → compact-4mVBriKT.js} +1 -1
- package/dist/{computer-use-DDeySrnb.js → computer-use-Bmaz333N.js} +1 -1
- package/dist/doctor-contract-api.js +201 -61
- package/dist/harness.js +5 -5
- package/dist/index.js +13 -13
- package/dist/{media-understanding-provider-DgqRvU2_.js → media-understanding-provider-BHOu9-Gg.js} +1 -1
- package/dist/media-understanding-provider.js +1 -1
- package/dist/{plugin-app-cache-key-o-AHbdaf.js → plugin-app-cache-key-BrhVdeEf.js} +1 -1
- package/dist/{provider-capabilities-gTCwjfmh.js → provider-capabilities-CDnHbmUZ.js} +3 -3
- package/dist/{provider-cc_62eQE.js → provider-zjPfx5Fs.js} +36 -9
- package/dist/provider.js +1 -1
- package/dist/{run-attempt-8SPLiDlT.js → run-attempt-FUyOjGCV.js} +86 -45
- package/dist/{session-binding-Dc03iwRF.js → session-binding-C1ZXdP-x.js} +41 -9
- package/dist/{side-question-DkjXvYv7.js → side-question-N4OaDer2.js} +5 -5
- package/dist/{thread-lifecycle-BskXnNP-.js → thread-lifecycle-qWE88Dn2.js} +64 -13
- package/dist/{web-search-provider.runtime-B5F42P7x.js → web-search-provider.runtime-BSlriav6.js} +2 -2
- package/npm-shrinkwrap.json +2 -2
- package/package.json +4 -4
|
@@ -2,9 +2,9 @@ import { n as flattenCodexDynamicToolFunctions, r as isJsonObject } from "./prot
|
|
|
2
2
|
import { h as resolveCodexPluginsPolicy, i as codexSandboxPolicyForTurn, t as CODEX_PLUGINS_MARKETPLACE_NAME } from "./config-CYEDnLJ2.js";
|
|
3
3
|
import { n as assertCodexThreadResumeResponse, r as assertCodexThreadStartResponse } from "./protocol-validators-dZQ-UTOa.js";
|
|
4
4
|
import { CODEX_GPT5_HEARTBEAT_PROMPT_OVERLAY } from "./prompt-overlay.js";
|
|
5
|
-
import { a as readCodexSupportedReasoningEfforts, i as isModernCodexModel, o as resolveCodexFallbackReasoningEfforts, r as isMaxReasoningCodexModel, s as resolveCodexSupportedReasoningEffort } from "./provider-
|
|
5
|
+
import { a as readCodexSupportedReasoningEfforts, i as isModernCodexModel, o as resolveCodexFallbackReasoningEfforts, r as isMaxReasoningCodexModel, s as resolveCodexSupportedReasoningEffort } from "./provider-zjPfx5Fs.js";
|
|
6
6
|
import { f as isCodexAppServerConnectionClosedError, n as clearSharedCodexAppServerClientIfCurrentAndUnclaimed, s as retireSharedCodexAppServerClientIfCurrent, t as clearSharedCodexAppServerClientIfCurrent, u as CodexAppServerRpcError } from "./shared-client-4ICy3U6d.js";
|
|
7
|
-
import { a as
|
|
7
|
+
import { a as normalizeCodexAppServerBindingModelProvider, i as isCodexAppServerNativeAuthProfile, o as reclaimCurrentCodexSessionGeneration, r as hashCodexAppServerBindingFingerprint, s as sessionBindingIdentity } from "./session-binding-C1ZXdP-x.js";
|
|
8
8
|
import "node:fs/promises";
|
|
9
9
|
import "node:path";
|
|
10
10
|
import { isFutureDateTimestampMs, resolveDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
|
|
@@ -1684,7 +1684,8 @@ async function startOrResumeThread(params) {
|
|
|
1684
1684
|
...params.timing,
|
|
1685
1685
|
enabled: params.timing?.enabled ?? isCodexAppServerProfilerEnabled(params.params.config)
|
|
1686
1686
|
});
|
|
1687
|
-
const
|
|
1687
|
+
const legacyDynamicToolsFingerprint = lifecycleTiming.measureSync("legacy-dynamic-tools-fingerprint", () => legacyFingerprintDynamicTools(params.dynamicTools));
|
|
1688
|
+
const dynamicToolsFingerprint = lifecycleTiming.measureSync("dynamic-tools-fingerprint", () => hashCodexAppServerBindingFingerprint(legacyDynamicToolsFingerprint));
|
|
1688
1689
|
const dynamicToolsContainDeferred = flattenCodexDynamicToolFunctions(params.dynamicTools).some((tool) => tool.deferLoading === true);
|
|
1689
1690
|
const webSearchThreadConfigFingerprint = fingerprintJsonObject(lifecycleTiming.measureSync("web-search-plan", () => resolveCodexWebSearchPlan({
|
|
1690
1691
|
config: params.params.config,
|
|
@@ -1696,6 +1697,7 @@ async function startOrResumeThread(params) {
|
|
|
1696
1697
|
const networkProxyConfigFingerprint = params.appServer.networkProxy?.configFingerprint;
|
|
1697
1698
|
const contextEngineBinding = lifecycleTiming.measureSync("context-engine-binding", () => buildContextEngineBinding(params.params, params.contextEngineProjection));
|
|
1698
1699
|
const userMcpServersConfigPatch = params.userMcpServersEnabled === false ? void 0 : buildCodexUserMcpServersThreadConfigPatch(params.params.config, { agentId: params.agentId ?? params.params.agentId });
|
|
1700
|
+
const legacyUserMcpServersFingerprint = legacyFingerprintUserMcpServersConfigPatch(userMcpServersConfigPatch);
|
|
1699
1701
|
const userMcpServersFingerprint = fingerprintUserMcpServersConfigPatch(userMcpServersConfigPatch);
|
|
1700
1702
|
const environmentSelectionFingerprint = fingerprintEnvironmentSelection(params.environmentSelection);
|
|
1701
1703
|
let binding = await lifecycleTiming.measure("read-binding", () => params.bindingStore.read(bindingIdentity));
|
|
@@ -1734,6 +1736,18 @@ async function startOrResumeThread(params) {
|
|
|
1734
1736
|
await clearCurrentBinding("rotating a stale thread binding");
|
|
1735
1737
|
binding = void 0;
|
|
1736
1738
|
}
|
|
1739
|
+
if (binding?.threadId && shouldRotateCodexGpt56MultiAgentBinding({
|
|
1740
|
+
bindingModel: binding.model,
|
|
1741
|
+
requestedModel: params.params.modelId
|
|
1742
|
+
})) {
|
|
1743
|
+
embeddedAgentLog.debug("codex app-server GPT-5.6 multi-agent version changed; starting a new thread", {
|
|
1744
|
+
threadId: binding.threadId,
|
|
1745
|
+
bindingModel: binding.model,
|
|
1746
|
+
requestedModel: params.params.modelId
|
|
1747
|
+
});
|
|
1748
|
+
await clearCurrentBinding("rotating a GPT-5.6 multi-agent thread binding");
|
|
1749
|
+
binding = void 0;
|
|
1750
|
+
}
|
|
1737
1751
|
const startModelSelection = resolveCodexAppServerThreadModelSelection({
|
|
1738
1752
|
provider: params.params.provider,
|
|
1739
1753
|
model: params.params.modelId,
|
|
@@ -1805,7 +1819,11 @@ async function startOrResumeThread(params) {
|
|
|
1805
1819
|
rotatedContextEngineBinding = true;
|
|
1806
1820
|
}
|
|
1807
1821
|
}
|
|
1808
|
-
if (binding?.threadId &&
|
|
1822
|
+
if (binding?.threadId && !areUserMcpServersFingerprintsCompatible({
|
|
1823
|
+
previous: binding.userMcpServersFingerprint,
|
|
1824
|
+
next: userMcpServersFingerprint,
|
|
1825
|
+
nextLegacy: legacyUserMcpServersFingerprint
|
|
1826
|
+
})) {
|
|
1809
1827
|
embeddedAgentLog.debug("codex app-server user MCP config changed; starting a new thread", { threadId: binding.threadId });
|
|
1810
1828
|
await clearCurrentBinding("rotating a stale thread binding");
|
|
1811
1829
|
binding = void 0;
|
|
@@ -1853,10 +1871,10 @@ async function startOrResumeThread(params) {
|
|
|
1853
1871
|
binding = void 0;
|
|
1854
1872
|
}
|
|
1855
1873
|
}
|
|
1856
|
-
if (binding?.threadId) if (binding.dynamicToolsFingerprint && !areDynamicToolFingerprintsCompatible(binding.dynamicToolsFingerprint, dynamicToolsFingerprint)) {
|
|
1874
|
+
if (binding?.threadId) if (binding.dynamicToolsFingerprint && !areDynamicToolFingerprintsCompatible(binding.dynamicToolsFingerprint, dynamicToolsFingerprint, legacyDynamicToolsFingerprint)) {
|
|
1857
1875
|
preserveExistingBinding = shouldStartTransientNoToolThread({
|
|
1858
1876
|
previous: binding.dynamicToolsFingerprint,
|
|
1859
|
-
|
|
1877
|
+
nextHasDynamicTools: params.dynamicTools.length > 0
|
|
1860
1878
|
});
|
|
1861
1879
|
if (preserveExistingBinding) embeddedAgentLog.debug("codex app-server dynamic tools unavailable for turn; starting transient thread", { threadId: binding.threadId });
|
|
1862
1880
|
else {
|
|
@@ -2081,6 +2099,23 @@ function shouldRotateCodexAppServerBindingForRuntime(params) {
|
|
|
2081
2099
|
if (params.binding === params.current) return false;
|
|
2082
2100
|
return params.connectionClass === "remote" || Boolean(params.binding);
|
|
2083
2101
|
}
|
|
2102
|
+
function resolveCodexGpt56MultiAgentVersion(modelRef) {
|
|
2103
|
+
let modelId = modelRef?.trim().toLowerCase();
|
|
2104
|
+
if (!modelId) return;
|
|
2105
|
+
const slashIndex = modelId.indexOf("/");
|
|
2106
|
+
if (slashIndex > 0) {
|
|
2107
|
+
const provider = modelId.slice(0, slashIndex);
|
|
2108
|
+
if (provider !== "openai" && provider !== "codex") return;
|
|
2109
|
+
modelId = modelId.slice(slashIndex + 1);
|
|
2110
|
+
}
|
|
2111
|
+
if (modelId === "gpt-5.6-sol" || modelId === "gpt-5.6-terra") return "v2";
|
|
2112
|
+
return modelId === "gpt-5.6-luna" ? "v1" : void 0;
|
|
2113
|
+
}
|
|
2114
|
+
function shouldRotateCodexGpt56MultiAgentBinding(params) {
|
|
2115
|
+
const bindingVersion = resolveCodexGpt56MultiAgentVersion(params.bindingModel);
|
|
2116
|
+
const requestedVersion = resolveCodexGpt56MultiAgentVersion(params.requestedModel);
|
|
2117
|
+
return Boolean(bindingVersion && requestedVersion && bindingVersion !== requestedVersion);
|
|
2118
|
+
}
|
|
2084
2119
|
function isTransientWebSearchRestriction(params) {
|
|
2085
2120
|
if (params.nativeProviderWebSearchSupport === "unknown") return true;
|
|
2086
2121
|
if (params.params.config?.tools?.web?.search?.enabled === false) return false;
|
|
@@ -2416,15 +2451,24 @@ function joinPresentSections(...sections) {
|
|
|
2416
2451
|
function codexDynamicToolsFingerprint(dynamicTools) {
|
|
2417
2452
|
return fingerprintDynamicTools(dynamicTools);
|
|
2418
2453
|
}
|
|
2454
|
+
function codexLegacyDynamicToolsFingerprint(dynamicTools) {
|
|
2455
|
+
return legacyFingerprintDynamicTools(dynamicTools);
|
|
2456
|
+
}
|
|
2419
2457
|
function areCodexDynamicToolFingerprintsCompatible(params) {
|
|
2420
|
-
return areDynamicToolFingerprintsCompatible(params.previous, params.next);
|
|
2458
|
+
return areDynamicToolFingerprintsCompatible(params.previous, params.next, params.nextLegacy);
|
|
2421
2459
|
}
|
|
2422
2460
|
function fingerprintDynamicTools(dynamicTools) {
|
|
2461
|
+
return hashCodexAppServerBindingFingerprint(legacyFingerprintDynamicTools(dynamicTools));
|
|
2462
|
+
}
|
|
2463
|
+
function legacyFingerprintDynamicTools(dynamicTools) {
|
|
2423
2464
|
return JSON.stringify(dynamicTools.map(fingerprintDynamicToolSpec).toSorted(compareJsonFingerprint));
|
|
2424
2465
|
}
|
|
2425
|
-
function
|
|
2466
|
+
function legacyFingerprintUserMcpServersConfigPatch(configPatch) {
|
|
2426
2467
|
return configPatch ? JSON.stringify(stabilizeJsonValue(configPatch)) : void 0;
|
|
2427
2468
|
}
|
|
2469
|
+
function fingerprintUserMcpServersConfigPatch(configPatch) {
|
|
2470
|
+
return configPatch ? hashCodexAppServerBindingFingerprint(JSON.stringify(stabilizeJsonValue(configPatch))) : void 0;
|
|
2471
|
+
}
|
|
2428
2472
|
function fingerprintJsonObject(value) {
|
|
2429
2473
|
return JSON.stringify(stabilizeJsonValue(value));
|
|
2430
2474
|
}
|
|
@@ -2454,12 +2498,19 @@ function stabilizeJsonValue(value) {
|
|
|
2454
2498
|
function readActiveCodexTurnIds(thread) {
|
|
2455
2499
|
return (thread.turns ?? []).filter((turn) => turn.status === "inProgress").map((turn) => typeof turn.id === "string" ? turn.id : "").filter((turnId) => turnId.trim().length > 0);
|
|
2456
2500
|
}
|
|
2457
|
-
const
|
|
2458
|
-
|
|
2459
|
-
|
|
2501
|
+
const LEGACY_EMPTY_DYNAMIC_TOOLS_FINGERPRINT = legacyFingerprintDynamicTools([]);
|
|
2502
|
+
const EMPTY_DYNAMIC_TOOLS_FINGERPRINT = hashCodexAppServerBindingFingerprint(LEGACY_EMPTY_DYNAMIC_TOOLS_FINGERPRINT);
|
|
2503
|
+
function areDynamicToolFingerprintsCompatible(previous, next, nextLegacy) {
|
|
2504
|
+
return !previous || previous === next || previous === nextLegacy;
|
|
2505
|
+
}
|
|
2506
|
+
function areUserMcpServersFingerprintsCompatible(params) {
|
|
2507
|
+
return params.previous === params.next || params.previous === params.nextLegacy || params.nextLegacy !== void 0 && params.previous === hashCodexAppServerBindingFingerprint(params.nextLegacy);
|
|
2460
2508
|
}
|
|
2461
2509
|
function shouldStartTransientNoToolThread(params) {
|
|
2462
|
-
return Boolean(params.previous && params.previous
|
|
2510
|
+
return Boolean(params.previous && !isEmptyDynamicToolsFingerprint(params.previous) && !params.nextHasDynamicTools);
|
|
2511
|
+
}
|
|
2512
|
+
function isEmptyDynamicToolsFingerprint(fingerprint) {
|
|
2513
|
+
return fingerprint === EMPTY_DYNAMIC_TOOLS_FINGERPRINT || fingerprint === LEGACY_EMPTY_DYNAMIC_TOOLS_FINGERPRINT;
|
|
2463
2514
|
}
|
|
2464
2515
|
function compareJsonFingerprint(left, right) {
|
|
2465
2516
|
return JSON.stringify(left).localeCompare(JSON.stringify(right));
|
|
@@ -2536,4 +2587,4 @@ function resolveReasoningEffort(thinkLevel, modelId, supportedReasoningEfforts)
|
|
|
2536
2587
|
return null;
|
|
2537
2588
|
}
|
|
2538
2589
|
//#endregion
|
|
2539
|
-
export {
|
|
2590
|
+
export { resolveCodexContextEngineProjectionMaxChars as A, buildCodexPluginThreadConfig as B, filterCodexDynamicTools as C, resolveCodexDynamicToolsLoadingForRuntime as D, resolveCodexDynamicToolsLoading as E, closeCodexStartupClientBestEffort as F, pluginReadParams as G, mergeCodexThreadConfigs as H, interruptCodexTurnBestEffort as I, buildCodexAppInventoryCacheKey as K, retireCodexAppServerClientAfterTimedOutTurn as L, CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS as M, CODEX_APP_SERVER_UNSUBSCRIBE_TIMEOUT_MS as N, fitCodexProjectedContextForTurnStart as O, CodexAppServerUnsafeSubscriptionError as P, unsubscribeCodexThreadBestEffort as R, sanitizeInlineImageDataUrl$1 as S, normalizeCodexDynamicToolName as T, shouldBuildCodexPluginThreadConfig as U, buildCodexPluginThreadConfigInputFingerprint as V, ensureCodexPluginActivation as W, buildCodexNativeWebSearchThreadConfig as _, buildDeveloperInstructions as a, invalidInlineImageText as b, codexDynamicToolsFingerprint as c, resolveCodexAppServerModelProvider as d, resolveCodexAppServerRequestModelSelection as f, startOrResumeThread as g, resolveReasoningEffort as h, buildContextEngineBinding as i, resolveCodexContextEngineProjectionReserveTokens as j, projectContextEngineAssemblyForCodex as k, codexLegacyDynamicToolsFingerprint as l, resolveCodexBindingModelProviderFallback as m, areCodexDynamicToolFingerprintsCompatible as n, buildTurnCollaborationMode as o, resolveCodexAppServerThreadModelSelection as p, defaultCodexAppInventoryCache as q, buildCodexRuntimeThreadConfig as r, buildTurnStartParams as s, CODEX_NATIVE_PERSONALITY_NONE as t, isContextEngineBindingCompatible as u, resolveCodexWebSearchPlan as v, isForcedPrivateQaCodexRuntime as w, sanitizeCodexHistoryImagePayloads as x, isCodexAppServerProfilerEnabled as y, buildCodexPluginAppsConfigPatchFromPolicyContext as z };
|
package/dist/{web-search-provider.runtime-B5F42P7x.js → web-search-provider.runtime-BSlriav6.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as isJsonObject } from "./protocol-2POPqAY4.js";
|
|
2
|
-
import {
|
|
3
|
-
import { n as runBoundedCodexAppServerTurn } from "./media-understanding-provider-
|
|
2
|
+
import { _ as buildCodexNativeWebSearchThreadConfig } from "./thread-lifecycle-qWE88Dn2.js";
|
|
3
|
+
import { n as runBoundedCodexAppServerTurn } from "./media-understanding-provider-BHOu9-Gg.js";
|
|
4
4
|
import { readStringParam, resolveSearchTimeoutSeconds, wrapWebContent } from "openclaw/plugin-sdk/provider-web-search";
|
|
5
5
|
//#region extensions/codex/src/web-search-provider.runtime.ts
|
|
6
6
|
async function executeCodexWebSearchProviderTool(ctx, args, executionContext, options) {
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/codex",
|
|
3
|
-
"version": "2026.7.1-beta.
|
|
3
|
+
"version": "2026.7.1-beta.6",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@openclaw/codex",
|
|
9
|
-
"version": "2026.7.1-beta.
|
|
9
|
+
"version": "2026.7.1-beta.6",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@openai/codex": "0.144.1",
|
|
12
12
|
"typebox": "1.3.3",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/codex",
|
|
3
|
-
"version": "2026.7.1-beta.
|
|
3
|
+
"version": "2026.7.1-beta.6",
|
|
4
4
|
"description": "OpenClaw Codex app-server harness and model provider plugin with a Codex-managed GPT catalog.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
]
|
|
35
35
|
},
|
|
36
36
|
"compat": {
|
|
37
|
-
"pluginApi": ">=2026.7.1-beta.
|
|
37
|
+
"pluginApi": ">=2026.7.1-beta.6"
|
|
38
38
|
},
|
|
39
39
|
"build": {
|
|
40
|
-
"openclawVersion": "2026.7.1-beta.
|
|
40
|
+
"openclawVersion": "2026.7.1-beta.6"
|
|
41
41
|
},
|
|
42
42
|
"release": {
|
|
43
43
|
"publishToClawHub": true,
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"README.md"
|
|
59
59
|
],
|
|
60
60
|
"peerDependencies": {
|
|
61
|
-
"openclaw": ">=2026.7.1-beta.
|
|
61
|
+
"openclaw": ">=2026.7.1-beta.6"
|
|
62
62
|
},
|
|
63
63
|
"peerDependenciesMeta": {
|
|
64
64
|
"openclaw": {
|