@openclaw/codex 2026.7.2-beta.5 → 2026.7.2-beta.7

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 (42) hide show
  1. package/dist/{app-server-policy-BmDgseo_.js → app-server-policy-BSaO2JIT.js} +1 -1
  2. package/dist/{attempt-notifications-CMR2_fmR.js → attempt-notifications-AP-a-Q5k.js} +1 -1
  3. package/dist/{bounded-turn-FEbUXoYT.js → bounded-turn-D2ZAgZVz.js} +29 -22
  4. package/dist/{capabilities-BHRSI6Cn.js → capabilities-BFDTVYr4.js} +1 -1
  5. package/dist/cli-metadata.js +1 -1
  6. package/dist/{command-formatters-ico4ZFnk.js → command-formatters-C336eRVS.js} +2 -2
  7. package/dist/{command-handlers-CRmnwI2N.js → command-handlers-DAHUSry9.js} +12 -12
  8. package/dist/{compact-dEN49UH6.js → compact-D_uvHurS.js} +5 -5
  9. package/dist/{computer-use-BjGylO-E.js → computer-use-CYEc8U3w.js} +111 -113
  10. package/dist/{conversation-control-DE7d9DOj.js → conversation-control-xsIeXbo4.js} +6 -6
  11. package/dist/doctor-contract-api.js +1 -1
  12. package/dist/{dynamic-tools-LIt9ojep.js → dynamic-tools-D2gYkSBO.js} +438 -51
  13. package/dist/effective-mcp-catalog-Bbd98Inw.js +114 -0
  14. package/dist/{event-projector-usage-tvgb1NCX.js → event-projector-usage-Xp4AlR2k.js} +20 -3
  15. package/dist/harness.js +13 -9
  16. package/dist/index.js +131 -108
  17. package/dist/media-understanding-provider.js +1 -1
  18. package/dist/{models-BA01NEez.js → models-BBMKU4jA.js} +2 -2
  19. package/dist/{notification-correlation-Bj_Ak_jI.js → notification-correlation-CU6_AnOb.js} +3 -3
  20. package/dist/{plugin-app-cache-key-DSXX-rXO.js → plugin-app-cache-key-DztPafOA.js} +132 -39
  21. package/dist/{rate-limits-S_PXs0ul.js → rate-limits-CU-gVCCS.js} +1 -1
  22. package/dist/{request-CXpPennK.js → request-qKh331yu.js} +3 -3
  23. package/dist/{run-attempt-C5GTPJOE.js → run-attempt-CY9WlDLc.js} +677 -199
  24. package/dist/{runtime-artifact-C2ITXdhM.js → runtime-artifact-CmtG_t1L.js} +90 -24
  25. package/dist/{sandbox-guard-D1Wky__S.js → sandbox-guard-NuhpXmPB.js} +4 -0
  26. package/dist/{session-binding-DlVQ-Pxs.js → session-binding-BXpo9ymA.js} +60 -7
  27. package/dist/{session-catalog-CP2oCcEb.js → session-catalog-DyOgR4WH.js} +268 -44
  28. package/dist/{session-cli-CqZ0Fp2a.js → session-cli-2PZaFLRh.js} +1 -1
  29. package/dist/{session-upstream-marker-QE-m5QFG.js → session-upstream-marker-B6U7tLw5.js} +1 -1
  30. package/dist/{settled-turn-finalizer-CA_2QXIE.js → settled-turn-finalizer-CXY2Z9dT.js} +19 -6
  31. package/dist/{shared-client-BVKE40c-.js → shared-client-DTbvH-XV.js} +166 -49
  32. package/dist/{side-question-CO12sHxo.js → side-question-_ulBk1AL.js} +10 -10
  33. package/dist/{thread-lifecycle-DRg_FdzC.js → thread-lifecycle-DF53ogiA.js} +968 -214
  34. package/dist/{protocol-validators-Dm4eXZmt.js → transcript-mirror-DzsdNCf5.js} +589 -2
  35. package/dist/{upstream-session-fork-_Vrz4WJr.js → upstream-session-fork-Dy4Xvuoj.js} +3 -3
  36. package/dist/{usage-UpVbdX5G.js → usage-CQ6GhD5-.js} +3 -3
  37. package/dist/{web-search-provider.runtime-CaQMYDbp.js → web-search-provider.runtime-CCFhg2z5.js} +3 -3
  38. package/package.json +6 -7
  39. package/dist/attempt-client-cleanup-Ia52yRWc.js +0 -127
  40. package/dist/realtime-voice-api-BPcA1uN9.js +0 -494
  41. package/dist/realtime-voice-api.js +0 -2
  42. package/dist/transcript-mirror-uKA-A4tB.js +0 -550
@@ -28,6 +28,32 @@ const RUNTIME_INJECTION_ENV_KEYS = /* @__PURE__ */ new Set([
28
28
  "DYLD_INSERT_LIBRARIES",
29
29
  "DYLD_LIBRARY_PATH"
30
30
  ]);
31
+ const SAFE_NODE_OPTIONS_BOOLEAN_FLAGS = /* @__PURE__ */ new Set([
32
+ "--enable-network-family-autoselection",
33
+ "--network-family-autoselection",
34
+ "--no-deprecation",
35
+ "--no-network-family-autoselection",
36
+ "--no-warnings",
37
+ "--pending-deprecation",
38
+ "--throw-deprecation",
39
+ "--trace-deprecation",
40
+ "--trace-warnings",
41
+ "--use-bundled-ca",
42
+ "--use-env-proxy",
43
+ "--use-openssl-ca",
44
+ "--use-system-ca"
45
+ ]);
46
+ const SAFE_NODE_OPTIONS_NUMERIC_FLAGS = /* @__PURE__ */ new Set([
47
+ "--max-old-space-size",
48
+ "--max-semi-space-size",
49
+ "--network-family-autoselection-attempt-timeout",
50
+ "--stack-trace-limit"
51
+ ]);
52
+ const SAFE_NODE_OPTIONS_DNS_RESULT_ORDERS = /* @__PURE__ */ new Set([
53
+ "ipv4first",
54
+ "ipv6first",
55
+ "verbatim"
56
+ ]);
31
57
  const ARTIFACT_BINDINGS_SYMBOL = Symbol.for("openclaw.codexAppServerRuntimeArtifactBindings");
32
58
  function getRuntimeArtifactBindings() {
33
59
  const globalState = globalThis;
@@ -116,40 +142,80 @@ function assertNoRuntimeInjectionEnvironment(env) {
116
142
  for (const [rawKey, value] of Object.entries(env)) {
117
143
  const key = rawKey.toUpperCase();
118
144
  if (!value?.trim()) continue;
119
- if (key === "NODE_OPTIONS" && isSafeNodeOptions(value)) continue;
120
- if (key === "NODE_OPTIONS") throw new Error(`Codex runtime artifact cannot attest injected runtime environment: ${key}`);
145
+ if (key === "NODE_OPTIONS") {
146
+ const result = attestNodeOptions(value);
147
+ if (result.ok) continue;
148
+ if (result.option) throw new Error(`Codex runtime artifact cannot attest NODE_OPTIONS option ${result.option}`);
149
+ throw new Error("Codex runtime artifact cannot safely parse NODE_OPTIONS");
150
+ }
121
151
  if (RUNTIME_INJECTION_ENV_KEYS.has(key) || key.startsWith("DYLD_")) throw new Error(`Codex runtime artifact cannot attest injected runtime environment: ${key}`);
122
152
  }
123
153
  }
124
- function isSafeNodeOptions(value) {
125
- const tokens = value.trim().split(/\s+/u);
126
- const valueFlags = /* @__PURE__ */ new Set([
127
- "--max-old-space-size",
128
- "--max_old_space_size",
129
- "--max-semi-space-size",
130
- "--max_semi_space_size",
131
- "--stack-trace-limit"
132
- ]);
133
- const booleanFlags = /* @__PURE__ */ new Set([
134
- "--no-deprecation",
135
- "--no-warnings",
136
- "--pending-deprecation",
137
- "--throw-deprecation",
138
- "--trace-deprecation",
139
- "--trace-warnings"
140
- ]);
154
+ function parseNodeOptions(value) {
155
+ const tokens = [];
156
+ let inQuotes = false;
157
+ let startsNewToken = true;
158
+ for (let index = 0; index < value.length; index += 1) {
159
+ let character = value[index];
160
+ if (character === "\\" && inQuotes) {
161
+ index += 1;
162
+ if (index >= value.length) return;
163
+ character = value[index];
164
+ } else if (character === " " && !inQuotes) {
165
+ startsNewToken = true;
166
+ continue;
167
+ } else if (character === "\"") {
168
+ inQuotes = !inQuotes;
169
+ continue;
170
+ }
171
+ if (startsNewToken) {
172
+ tokens.push(character);
173
+ startsNewToken = false;
174
+ } else tokens[tokens.length - 1] += character;
175
+ }
176
+ return inQuotes ? void 0 : tokens;
177
+ }
178
+ function normalizedNodeOptionName(token) {
179
+ const equalsIndex = token.indexOf("=");
180
+ const name = (equalsIndex === -1 ? token : token.slice(0, equalsIndex)).replaceAll("_", "-");
181
+ return /^--[a-z][a-z0-9-]{0,63}$/u.test(name) ? name : void 0;
182
+ }
183
+ function attestNodeOptions(value) {
184
+ const tokens = parseNodeOptions(value);
185
+ if (!tokens || tokens.length === 0) return { ok: false };
141
186
  for (let index = 0; index < tokens.length; index += 1) {
142
187
  const token = tokens[index];
143
- if (booleanFlags.has(token)) continue;
144
188
  const equalsIndex = token.indexOf("=");
145
- const flag = equalsIndex === -1 ? token : token.slice(0, equalsIndex);
189
+ const flag = normalizedNodeOptionName(token);
190
+ if (!flag) return { ok: false };
146
191
  const inlineValue = equalsIndex === -1 ? void 0 : token.slice(equalsIndex + 1);
192
+ if (SAFE_NODE_OPTIONS_BOOLEAN_FLAGS.has(flag)) {
193
+ if (inlineValue === void 0) continue;
194
+ return {
195
+ ok: false,
196
+ option: flag
197
+ };
198
+ }
147
199
  if (flag === "--disable-warning" && inlineValue && /^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/u.test(inlineValue)) continue;
148
- if (!valueFlags.has(flag)) return false;
200
+ if (flag === "--dns-result-order") {
201
+ const order = inlineValue ?? tokens[++index];
202
+ if (order && SAFE_NODE_OPTIONS_DNS_RESULT_ORDERS.has(order)) continue;
203
+ return {
204
+ ok: false,
205
+ option: flag
206
+ };
207
+ }
208
+ if (!SAFE_NODE_OPTIONS_NUMERIC_FLAGS.has(flag)) return {
209
+ ok: false,
210
+ option: flag
211
+ };
149
212
  const numericValue = inlineValue ?? tokens[++index];
150
- if (!numericValue || !/^\d+$/u.test(numericValue)) return false;
213
+ if (!numericValue || !/^\d+$/u.test(numericValue)) return {
214
+ ok: false,
215
+ option: flag
216
+ };
151
217
  }
152
- return tokens.length > 0;
218
+ return { ok: true };
153
219
  }
154
220
  async function hashSelectedArtifactFiles(descriptor, signal) {
155
221
  throwIfAborted(signal);
@@ -142,7 +142,10 @@ function readRuntimeSessionEntryBestEffort(params) {
142
142
  const DIRECT_METHOD_POLICIES = /* @__PURE__ */ new Map([
143
143
  ["account/rateLimits/read", "allowed-control-plane"],
144
144
  ["account/read", "allowed-control-plane"],
145
+ ["app/installed", "allowed-control-plane"],
145
146
  ["app/list", "allowed-control-plane"],
147
+ ["app/read", "allowed-control-plane"],
148
+ ["config/batchWrite", "allowed-control-plane"],
146
149
  ["config/mcpServer/reload", "allowed-control-plane"],
147
150
  ["config/read", "allowed-control-plane"],
148
151
  ["config/value/write", "allowed-control-plane"],
@@ -155,6 +158,7 @@ const DIRECT_METHOD_POLICIES = /* @__PURE__ */ new Map([
155
158
  ["mcpServerStatus/list", "allowed-control-plane"],
156
159
  ["model/list", "allowed-control-plane"],
157
160
  ["plugin/install", "allowed-control-plane"],
161
+ ["plugin/installed", "allowed-control-plane"],
158
162
  ["plugin/list", "allowed-control-plane"],
159
163
  ["plugin/read", "allowed-control-plane"],
160
164
  ["skills/list", "allowed-control-plane"],
@@ -14,6 +14,7 @@ import { normalizeTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-ru
14
14
  import { detectWindowsSpawnCommandInlineArgs } from "openclaw/plugin-sdk/windows-spawn";
15
15
  import { z } from "zod";
16
16
  import { parse } from "smol-toml";
17
+ import { isLoopbackHost } from "openclaw/plugin-sdk/ssrf-runtime";
17
18
  import { AsyncLocalStorage } from "node:async_hooks";
18
19
  import { getSessionEntry, resolveStorePath } from "openclaw/plugin-sdk/session-store-runtime";
19
20
  //#region extensions/codex/src/app-server/config-contracts.ts
@@ -1025,8 +1026,7 @@ function isLoopbackWebSocketUrl(value) {
1025
1026
  return false;
1026
1027
  }
1027
1028
  if (parsed.protocol !== "ws:" && parsed.protocol !== "wss:") return false;
1028
- const host = parsed.hostname.toLowerCase();
1029
- return host === "localhost" || host === "127.0.0.1" || host === "::1" || host === "[::1]" || host.startsWith("127.");
1029
+ return isLoopbackHost(parsed.hostname);
1030
1030
  }
1031
1031
  function hasIdentityBearingWebSocketAuth(params) {
1032
1032
  if (readNonEmptyString(params.authToken)) return true;
@@ -1074,11 +1074,23 @@ function resolveDefaultCodexAppServerPolicy(params) {
1074
1074
  }
1075
1075
  //#endregion
1076
1076
  //#region extensions/codex/src/app-server/config-runtime.ts
1077
+ /**
1078
+ * Sole owner of the app-server home-scope decision. Ordinary harness connections
1079
+ * default to the isolated agent home; the supervision connection owns the operator's
1080
+ * native Codex home on local transports. Auth handoffs must read the scope from here
1081
+ * (or from resolved start options) because a prepared login on a native home rewrites
1082
+ * the account Codex CLI and Desktop share.
1083
+ */
1084
+ function resolveCodexAppServerHomeScope(params) {
1085
+ const configured = params.appServer?.homeScope;
1086
+ if (configured) return configured;
1087
+ return params.connectionScope === "supervision" && resolveTransport(params.appServer?.transport) !== "websocket" ? "user" : "agent";
1088
+ }
1077
1089
  function resolveCodexAppServerRuntimeOptions(params = {}) {
1078
1090
  const env = params.env ?? process.env;
1079
1091
  const config = readCodexPluginConfig(params.pluginConfig).appServer ?? {};
1080
1092
  const transport = resolveTransport(config.transport);
1081
- const homeScope = config.homeScope ?? "agent";
1093
+ const homeScope = resolveCodexAppServerHomeScope({ appServer: config });
1082
1094
  const configCommand = readNonEmptyString(config.command);
1083
1095
  const envCommand = readNonEmptyString(env.OPENCLAW_CODEX_APP_SERVER_BIN);
1084
1096
  const command = configCommand ?? envCommand ?? "codex";
@@ -1326,8 +1338,10 @@ function codexSandboxPolicyForTurn(mode, cwd, nativeArgs = []) {
1326
1338
  function resolveCodexSupervisionAppServerRuntimeOptions(params = {}) {
1327
1339
  const pluginConfig = readCodexPluginConfig(params.pluginConfig);
1328
1340
  const appServer = pluginConfig.appServer ?? {};
1329
- const transport = resolveTransport(appServer.transport);
1330
- const homeScope = appServer.homeScope ?? (transport === "websocket" ? "agent" : "user");
1341
+ const homeScope = resolveCodexAppServerHomeScope({
1342
+ appServer,
1343
+ connectionScope: "supervision"
1344
+ });
1331
1345
  return resolveCodexAppServerRuntimeOptions({
1332
1346
  ...params,
1333
1347
  pluginConfig: {
@@ -1360,6 +1374,8 @@ var session_binding_exports = /* @__PURE__ */ __exportAll({
1360
1374
  readStoredCodexAppServerBinding: () => readStoredCodexAppServerBinding,
1361
1375
  reclaimCurrentCodexSessionGeneration: () => reclaimCurrentCodexSessionGeneration,
1362
1376
  resolveCodexAppServerBindingModelProvider: () => resolveCodexAppServerBindingModelProvider,
1377
+ resolveCodexRunSessionBindingAuthority: () => resolveCodexRunSessionBindingAuthority,
1378
+ scopeCodexRunBindingStore: () => scopeCodexRunBindingStore,
1363
1379
  sessionBindingIdentity: () => sessionBindingIdentity
1364
1380
  });
1365
1381
  const CODEX_APP_SERVER_NATIVE_AUTH_PROVIDER = "openai";
@@ -1382,6 +1398,25 @@ function sessionBindingIdentity(params) {
1382
1398
  ...sessionKey ? { sessionKey } : {}
1383
1399
  };
1384
1400
  }
1401
+ /** Decides whether a run may share the durable stable-key binding owner. */
1402
+ function resolveCodexRunSessionBindingAuthority(params) {
1403
+ const sessionKey = params.identity.sessionKey?.trim();
1404
+ if (!sessionKey) return "ephemeral";
1405
+ try {
1406
+ const storePath = params.storePath?.trim() || resolveStorePath(params.config?.session?.store, { agentId: params.identity.agentId });
1407
+ const entry = getSessionEntry({
1408
+ agentId: params.identity.agentId,
1409
+ hydrateSkillPromptRefs: false,
1410
+ readConsistency: "latest",
1411
+ sessionKey,
1412
+ storePath
1413
+ });
1414
+ if (!entry) return "ephemeral";
1415
+ return entry.sessionId === params.identity.sessionId ? "current" : "superseded";
1416
+ } catch {
1417
+ return "superseded";
1418
+ }
1419
+ }
1385
1420
  /** Builds the terminal coordination error used when a newer OpenClaw session owns the binding. */
1386
1421
  function createCodexSessionGenerationSupersededError(sessionId) {
1387
1422
  return new AgentHarnessSessionSupersededError(`Codex session generation is no longer current: ${sessionId}`);
@@ -1449,6 +1484,7 @@ const threadBindingSchema = z.object({
1449
1484
  threadId: z.string().refine((value) => Boolean(value.trim())),
1450
1485
  clientId: optionalStringSchema,
1451
1486
  cwd: z.string(),
1487
+ rolloutPath: optionalNonBlankStringSchema,
1452
1488
  connectionScope: z.literal("supervision").optional(),
1453
1489
  supervisionSourceThreadId: z.string().trim().min(1).optional(),
1454
1490
  authProfileId: optionalStringSchema,
@@ -1472,6 +1508,7 @@ const threadBindingSchema = z.object({
1472
1508
  dynamicToolsFingerprint: optionalStringSchema,
1473
1509
  dynamicToolsContainDeferred: optionalBooleanSchema,
1474
1510
  webSearchThreadConfigFingerprint: optionalStringSchema,
1511
+ nativeSkillIsolationFingerprint: optionalStringSchema,
1475
1512
  userMcpServersFingerprint: optionalStringSchema,
1476
1513
  mcpServersFingerprint: optionalStringSchema,
1477
1514
  ringZeroConfigFingerprint: optionalStringSchema,
@@ -1610,6 +1647,22 @@ function createStoredCodexAppServerBinding(value, options = {}) {
1610
1647
  function bindingLeaseLostError(key, cause) {
1611
1648
  return new Error(`Lost Codex binding lease: ${key}`, cause === void 0 ? void 0 : { cause });
1612
1649
  }
1650
+ /** Carries one prepared run identity through callers that rederive it from public params. */
1651
+ function scopeCodexRunBindingStore(params) {
1652
+ const mapSessionIdentity = (identity) => identity.agentId === params.logicalIdentity.agentId && identity.sessionId === params.logicalIdentity.sessionId && identity.sessionKey?.trim() === params.logicalIdentity.sessionKey?.trim() ? params.physicalIdentity : identity;
1653
+ const mapIdentity = (identity) => identity.kind === "session" ? mapSessionIdentity(identity) : identity;
1654
+ return {
1655
+ read: (identity) => params.bindingStore.read(mapIdentity(identity)),
1656
+ hasOtherThreadOwner: (threadId, identity) => params.bindingStore.hasOtherThreadOwner(threadId, identity ? mapIdentity(identity) : void 0),
1657
+ mutate: (identity, mutation) => params.bindingStore.mutate(mapIdentity(identity), mutation),
1658
+ prepareSessionGenerationReclaim: (identity) => params.bindingStore.prepareSessionGenerationReclaim(mapSessionIdentity(identity)),
1659
+ adoptSessionGeneration: (identity, expectedPreviousSessionId) => params.bindingStore.adoptSessionGeneration(mapSessionIdentity(identity), expectedPreviousSessionId),
1660
+ resetSessionGeneration: (identity) => params.bindingStore.resetSessionGeneration(mapSessionIdentity(identity)),
1661
+ retireSessionGeneration: (identity) => params.bindingStore.retireSessionGeneration(mapSessionIdentity(identity)),
1662
+ withThreadArchiveFence: (run) => params.bindingStore.withThreadArchiveFence(run),
1663
+ withLease: (identity, run) => params.bindingStore.withLease(mapIdentity(identity), run)
1664
+ };
1665
+ }
1613
1666
  /** Lets the authoritative OpenClaw session generation claim a stale stable binding row. */
1614
1667
  async function reclaimCurrentCodexSessionGeneration(params) {
1615
1668
  const sessionKey = params.identity.sessionKey?.trim();
@@ -1617,7 +1670,7 @@ async function reclaimCurrentCodexSessionGeneration(params) {
1617
1670
  const plan = await params.bindingStore.prepareSessionGenerationReclaim(params.identity);
1618
1671
  if (plan.kind === "resolved") return plan.result;
1619
1672
  try {
1620
- const storePath = resolveStorePath(params.config?.session?.store, { agentId: params.identity.agentId });
1673
+ const storePath = params.storePath?.trim() || resolveStorePath(params.config?.session?.store, { agentId: params.identity.agentId });
1621
1674
  if (getSessionEntry({
1622
1675
  agentId: params.identity.agentId,
1623
1676
  hydrateSkillPromptRefs: false,
@@ -2158,4 +2211,4 @@ function resolveCodexAppServerBindingModelProvider(params) {
2158
2211
  return params.modelProvider?.trim() || (isCodexAppServerNativeAuthProfile(params) ? PUBLIC_OPENAI_MODEL_PROVIDER : void 0);
2159
2212
  }
2160
2213
  //#endregion
2161
- export { CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME as A, isCodexAppServerApprovalPolicyAllowedByRequirements as C, resolveOpenClawExecPolicyForCodexAppServer as D, resolveCodexPluginsPolicy as E, isCodexFastServiceTier as O, resolveCodexModelBackedReviewerPolicyContext as S, readCodexPluginConfig as T, assertCodexAppServerConnectionSecurity as _, hashCodexAppServerBindingFingerprint as a, canUseCodexModelBackedApprovalsReviewerForModel as b, reclaimCurrentCodexSessionGeneration as c, codexAppServerStartOptionsKey as d, codexSandboxPolicyForTurn as f, resolveCodexSupervisionAppServerRuntimeOptions as g, resolveCodexComputerUseConfig as h, createCodexSessionGenerationSupersededError as i, CODEX_PLUGINS_MARKETPLACE_NAME as k, sessionBindingIdentity as l, resolveCodexAppServerStartOptionsForAgent as m, assertCodexBindingMayBeReplaced as n, isCodexAppServerNativeAuthProfile as o, resolveCodexAppServerRuntimeOptions as p, bindingStoreKey as r, normalizeCodexAppServerBindingModelProvider as s, CODEX_APP_SERVER_BINDING_GUARDED_REQUEST_TIMEOUT_MS as t, session_binding_exports as u, shouldAutoApproveCodexAppServerApprovals as v, isCodexSandboxExecServerEnabled as w, resolveCodexAppServerUserHomeDir as x, withMcpElicitationsApprovalPolicy as y };
2214
+ export { resolveOpenClawExecPolicyForCodexAppServer as A, canUseCodexModelBackedApprovalsReviewerForModel as C, isCodexSandboxExecServerEnabled as D, isCodexAppServerApprovalPolicyAllowedByRequirements as E, CODEX_PLUGINS_MARKETPLACE_NAME as M, CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME as N, readCodexPluginConfig as O, withMcpElicitationsApprovalPolicy as S, resolveCodexModelBackedReviewerPolicyContext as T, resolveCodexAppServerStartOptionsForAgent as _, hashCodexAppServerBindingFingerprint as a, assertCodexAppServerConnectionSecurity as b, reclaimCurrentCodexSessionGeneration as c, sessionBindingIdentity as d, session_binding_exports as f, resolveCodexAppServerRuntimeOptions as g, resolveCodexAppServerHomeScope as h, createCodexSessionGenerationSupersededError as i, isCodexFastServiceTier as j, resolveCodexPluginsPolicy as k, resolveCodexRunSessionBindingAuthority as l, codexSandboxPolicyForTurn as m, assertCodexBindingMayBeReplaced as n, isCodexAppServerNativeAuthProfile as o, codexAppServerStartOptionsKey as p, bindingStoreKey as r, normalizeCodexAppServerBindingModelProvider as s, CODEX_APP_SERVER_BINDING_GUARDED_REQUEST_TIMEOUT_MS as t, scopeCodexRunBindingStore as u, resolveCodexComputerUseConfig as v, resolveCodexAppServerUserHomeDir as w, shouldAutoApproveCodexAppServerApprovals as x, resolveCodexSupervisionAppServerRuntimeOptions as y };