@openclaw/codex 2026.9.1-beta.1 → 2026.9.2

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 (81) hide show
  1. package/dist/api.js +8 -9
  2. package/dist/{attempt-client-cleanup-bfsmcQ6m.js → attempt-client-cleanup-Bp1ZOnk2.js} +105 -75
  3. package/dist/attempt-context-CSazkWns.js +634 -0
  4. package/dist/{auth-binding-B4FfbcCg.js → auth-binding-Ds_QVm-X.js} +18 -3
  5. package/dist/{bounded-turn-B7iBUcuP.js → bounded-turn-DxGJRYbY.js} +53 -57
  6. package/dist/{capabilities-BRMh0aIq.js → capabilities-B1mgvpP8.js} +2 -1
  7. package/dist/cli-metadata.js +1 -1
  8. package/dist/{command-formatters-DEsIufkt.js → command-formatters-DSbGMXA0.js} +5 -4
  9. package/dist/{command-handlers-D_-1_qRp.js → command-handlers-DOJvGv6-.js} +243 -148
  10. package/dist/{compact-BglNFZrQ.js → compact-Y_xBqrHN.js} +109 -65
  11. package/dist/{config-giW8X0QA.js → config-CyapYSji.js} +328 -374
  12. package/dist/config-utils-C57JiJrU.js +69 -0
  13. package/dist/{context-compaction-activity-BOeJf7yo.js → context-compaction-activity-CMla5FPJ.js} +4 -1
  14. package/dist/{conversation-binding-data-CW2GuupV.js → conversation-binding-data-BiodpIzq.js} +2 -1
  15. package/dist/doctor-contract-api.js +144 -14
  16. package/dist/{dynamic-tools-Dnlfa--w.js → dynamic-tools-BwpvTxaX.js} +1119 -1135
  17. package/dist/{effective-mcp-catalog-CTeGrnfO.js → effective-mcp-catalog-CY9Jn4bA.js} +4 -3
  18. package/dist/{event-projector-assistant-message-C5-Ds8mA.js → event-projector-assistant-message-B9kp6iGC.js} +15 -6
  19. package/dist/event-projector-usage-ZqEVbAEY.js +212 -0
  20. package/dist/{harness-Csz0F-DK.js → harness-Czh2Sdoc.js} +65 -52
  21. package/dist/harness.js +1 -1
  22. package/dist/{image-payload-sanitizer-CnfoUPCE.js → image-payload-sanitizer-tupAr-2o.js} +29 -15
  23. package/dist/index.js +495 -457
  24. package/dist/{isolated-completion-Cv6FqygM.js → isolated-completion-CRh-51AK.js} +9 -21
  25. package/dist/{managed-binary-DFYK4DWq.js → managed-binary-DcpnJF9x.js} +117 -80
  26. package/dist/media-understanding-provider.js +1 -1
  27. package/dist/model-catalog-DT5vo6qo.js +101 -0
  28. package/dist/{models-TS3HBU-q.js → models-CcrgSMQR.js} +26 -29
  29. package/dist/{native-subagent-monitor-4Mfq2HDs.js → native-subagent-monitor-B3bvQGcg.js} +63 -122
  30. package/dist/{node-exec-server.runtime-BpWqJO1V.js → node-exec-server.runtime-nfbUOtUB.js} +10 -7
  31. package/dist/{plugin-approval-roundtrip-bUm777tR.js → plugin-approval-roundtrip-aQVdyL5g.js} +30 -3
  32. package/dist/{plugin-marketplace-discovery-B9DvaAG-.js → plugin-marketplace-discovery-B7gHXJ3d.js} +44 -30
  33. package/dist/{plugin-metadata-cache-CTCT3w5L.js → plugin-metadata-cache-BwCLTY_U.js} +6 -6
  34. package/dist/provider-capabilities-BpG9Ltc5.js +101 -0
  35. package/dist/{rate-limits-C5_D8Gmb.js → rate-limits-Fx_l4eNa.js} +3 -2
  36. package/dist/{sandbox-guard-kuWTn9C5.js → request-C8H22rPi.js} +195 -2
  37. package/dist/{run-attempt-DYc0QCBF.js → run-attempt-BzthFQSM.js} +1616 -2634
  38. package/dist/{runtime-artifact-BvyT1uyd.js → runtime-artifact-Bh_gf6-t.js} +22 -15
  39. package/dist/{session-binding-Bcynfd-_.js → session-binding-4Ki04sW-.js} +282 -399
  40. package/dist/session-binding-record-CyaXZvTe.js +270 -0
  41. package/dist/{session-catalog-DaLKVtpH.js → session-catalog-B47uwekb.js} +812 -504
  42. package/dist/{session-cli-DMc4oS2w.js → session-cli-BjLhpmS1.js} +1 -1
  43. package/dist/session-history-DWmMqiqW.js +93 -0
  44. package/dist/session-history-read-LHldwvyh.js +36 -0
  45. package/dist/session-history-worker-runtime.js +48 -0
  46. package/dist/session-history.worker-zZVcx0ME.js +267 -0
  47. package/dist/session-history.worker.js +2 -0
  48. package/dist/session-initialization-BCFVnLL4.js +75 -0
  49. package/dist/{session-permission-policy-BrNH1bjy.js → session-permission-policy-BaueHmSj.js} +2 -2
  50. package/dist/session-retirement-DNdmYdFc.js +97 -0
  51. package/dist/{session-upstream-marker-BIkusb95.js → session-upstream-marker-DReTpGz6.js} +20 -4
  52. package/dist/settled-turn-context-BOM3Y1pl.js +45 -0
  53. package/dist/settled-turn-finalizer-BI-b1sry.js +115 -0
  54. package/dist/{shared-client-DKz23hHY.js → shared-client-CKhX2kFt.js} +3659 -847
  55. package/dist/{side-question-DjA_jsNe.js → side-question-B6DWAw1A.js} +168 -81
  56. package/dist/{thread-lifecycle-L7oEkTlq.js → thread-lifecycle-DPK30jad.js} +2412 -2145
  57. package/dist/{thread-ownership-DZeuKH1j.js → thread-ownership-CbucAmmp.js} +27 -16
  58. package/dist/thread-policy-CTalhWFy.js +105 -0
  59. package/dist/{plugin-app-cache-key-C1CAdfcP.js → thread-resume-BLgqkUc1.js} +61 -9
  60. package/dist/{transcript-mirror-DsCMWBca.js → transcript-mirror-_njEB84z.js} +114 -110
  61. package/dist/transcript-mirror-attestation-Byl34PC-.js +76 -0
  62. package/dist/transport-stdio-CzTngV0j.js +728 -0
  63. package/dist/{upstream-prompt-provenance-CFmsKwr9.js → upstream-prompt-provenance-LphB8slG.js} +8 -4
  64. package/dist/upstream-session-fork-1fwbNKzQ.js +886 -0
  65. package/dist/{usage-ROIaW3wo.js → usage-i9fv5-4m.js} +3 -3
  66. package/dist/{web-search-provider.runtime-ClaNPV7N.js → web-search-provider.runtime-DKQn67A7.js} +3 -3
  67. package/openclaw.plugin.json +1 -30
  68. package/package.json +6 -6
  69. package/dist/binding-connection-BMvPX73o.js +0 -45
  70. package/dist/command-rpc-CCeCkf_v.js +0 -90
  71. package/dist/event-projector-usage-Bk1I90Bg.js +0 -328
  72. package/dist/incognito-session-ET_ufDH-.js +0 -2
  73. package/dist/model-catalog-i9rNBthX.js +0 -48
  74. package/dist/protocol-validators-VeJxxJ0U.js +0 -2421
  75. package/dist/request-DXXGHko0.js +0 -157
  76. package/dist/session-catalog-home-id-BNwAJ9D7.js +0 -18
  77. package/dist/session-retirement-CcNC3YSY.js +0 -36
  78. package/dist/settled-turn-finalizer-Dc3ApjU4.js +0 -328
  79. package/dist/thread-resume-BE9qNEW0.js +0 -30
  80. package/dist/transport-stdio-DhoGy33Z.js +0 -99
  81. package/dist/upstream-session-fork-DlaHxSLC.js +0 -326
@@ -1,15 +1,15 @@
1
- import { i as resolveCodexAppServerRuntimeOptions } from "./config-giW8X0QA.js";
2
- import { K as createCodexElicitationResponse, c as isCodexAppServerStartSelectionChangedError, vt as isJsonObject } from "./shared-client-DKz23hHY.js";
3
- import { _ as readCodexNotificationTurnId, a as closeCodexStartupClientBestEffort, o as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS } from "./attempt-client-cleanup-bfsmcQ6m.js";
4
- import { b as isTerminalTurnStatus, n as normalizeCodexResponseTokenUsage, x as readCodexNotificationItem, y as isRetryableErrorNotification } from "./event-projector-usage-Bk1I90Bg.js";
5
- import { a as assertCodexThreadStartResponse, c as readCodexErrorNotification, o as assertCodexTurnStartResponse, u as readCodexTurnCompletedNotification } from "./protocol-validators-VeJxxJ0U.js";
6
- import { r as readModelListResult } from "./models-TS3HBU-q.js";
7
- import { A as attestCodexRestrictedToolSurfaceMcpServersDisabled, M as buildCodexRuntimeThreadConfig, N as readCodexInheritedMcpServerNames, bt as mergeCodexThreadConfigs, j as buildCodexRingZeroThreadConfigPatch, k as assertCodexManagedRequirementsDoNotOverrideToolPolicy } from "./thread-lifecycle-L7oEkTlq.js";
1
+ import { B as isJsonObject, i as resolveCodexAppServerRuntimeOptions } from "./config-CyapYSji.js";
2
+ import { at as readCodexErrorNotification, ct as createCodexElicitationResponse, nt as assertCodexThreadStartResponse, rt as assertCodexTurnStartResponse, st as readCodexTurnCompletedNotification, u as isCodexAppServerStartSelectionChangedError } from "./shared-client-CKhX2kFt.js";
3
+ import { m as readCodexAppServerConfigOptions } from "./managed-binary-DcpnJF9x.js";
4
+ import { _ as readCodexNotificationTurnId, a as closeCodexStartupClientBestEffort, o as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS } from "./attempt-client-cleanup-Bp1ZOnk2.js";
5
+ import { c as isRetryableErrorNotification, l as isTerminalTurnStatus, t as CodexUsageProjection, u as readCodexNotificationItem } from "./event-projector-usage-ZqEVbAEY.js";
6
+ import { r as readModelListResult } from "./models-CcrgSMQR.js";
7
+ import { Et as mergeCodexThreadConfigs, G as attestCodexRestrictedToolSurfaceMcpServersDisabled, _ as buildCodexRingZeroThreadConfigPatch, b as readCodexInheritedMcpServerNames, g as assertCodexManagedRequirementsDoNotOverrideToolPolicy, v as buildCodexRuntimeThreadConfig } from "./thread-lifecycle-DPK30jad.js";
8
8
  import { readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
9
+ import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
9
10
  import fs from "node:fs/promises";
10
11
  import path from "node:path";
11
12
  import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
12
- import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
13
13
  import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
14
14
  //#region extensions/codex/src/app-server/bounded-turn.ts
15
15
  const CODEX_APP_SERVER_ARGS_ENV_KEY = "OPENCLAW_CODEX_APP_SERVER_ARGS";
@@ -39,6 +39,7 @@ var CodexBoundedTurnTimeoutError = class extends Error {
39
39
  }
40
40
  };
41
41
  async function runBoundedCodexAppServerTurn(params) {
42
+ params.assertCurrent?.();
42
43
  const appServer = resolveCodexAppServerRuntimeOptions({
43
44
  pluginConfig: params.options.pluginConfig,
44
45
  managedCommandOrder: params.isolation === "private-stdio" ? "package-first" : void 0
@@ -64,31 +65,23 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
64
65
  const deadline = timing?.deadline ?? Date.now() + totalTimeoutMs;
65
66
  const timeoutMs = deadline - Date.now();
66
67
  if (timeoutMs <= 0) throw timeoutError;
68
+ params.assertCurrent?.();
67
69
  const agentDir = params.agentDir?.trim() || void 0;
68
- const isolatedStartOptions = workspace.codexHome ? buildPrivateCodexAppServerStartOptions(appServer.start, workspace.codexHome) : appServer.start;
69
- const startOptions = workspace.codexHome && params.preparedAuth ? {
70
- ...isolatedStartOptions,
71
- homeScope: "agent"
72
- } : isolatedStartOptions;
70
+ const startOptions = workspace.codexHome ? buildPrivateCodexAppServerStartOptions(appServer.start, workspace.codexHome) : appServer.start;
73
71
  const ownsClient = !params.options.clientFactory;
74
- const authSelection = params.preparedAuth ? { preparedAuth: params.preparedAuth } : { authProfileId: params.profile };
75
- const client = params.options.clientFactory ? await params.options.clientFactory({
72
+ const clientOptions = {
76
73
  startOptions,
77
- ...authSelection,
74
+ ...params.preparedAuth ? { preparedAuth: params.preparedAuth } : { authProfileId: params.profile },
78
75
  authRequirement: params.authRequirement,
79
76
  agentDir,
80
77
  config: params.config,
81
78
  timeoutMs,
79
+ assertCurrent: params.assertCurrent,
82
80
  ...params.signal ? { abandonSignal: params.signal } : {}
83
- }) : await import("./shared-client-DKz23hHY.js").then((n) => n.y).then(({ createIsolatedCodexAppServerClient }) => createIsolatedCodexAppServerClient({
84
- startOptions,
85
- timeoutMs,
86
- ...authSelection,
87
- authRequirement: params.authRequirement,
88
- agentDir,
89
- authProfileStore: params.authProfileStore,
90
- config: params.config,
91
- ...params.signal ? { abandonSignal: params.signal } : {}
81
+ };
82
+ const client = params.options.clientFactory ? await params.options.clientFactory(clientOptions) : await import("./shared-client-CKhX2kFt.js").then((n) => n.x).then(({ createIsolatedCodexAppServerClient }) => createIsolatedCodexAppServerClient({
83
+ ...clientOptions,
84
+ authProfileStore: params.authProfileStore
92
85
  }));
93
86
  const abortController = new AbortController();
94
87
  let activeThreadId;
@@ -114,17 +107,23 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
114
107
  const timeout = setTimeout(() => abortRun(timeoutError), Math.max(1, remainingRunMs));
115
108
  timeout.unref?.();
116
109
  let retrySelection = false;
110
+ const requestOptions = {
111
+ timeoutMs,
112
+ signal: abortController.signal,
113
+ assertCurrent: params.assertCurrent
114
+ };
117
115
  try {
116
+ params.assertCurrent?.();
118
117
  const modelSelection = await resolveCodexBoundedTurnModel({
119
118
  client,
120
119
  selection: params.model,
121
120
  requiredModalities: params.requiredModalities,
122
- timeoutMs,
123
- signal: abortController.signal
121
+ ...requestOptions
124
122
  });
125
123
  const inheritedMcpServerNames = params.requireNoExternalCapabilities ? await readCodexInheritedMcpServerNames(client, workspace.cwd, abortController.signal) : [];
126
124
  if (params.requireNoExternalCapabilities) await assertCodexManagedRequirementsDoNotOverrideToolPolicy(client, { restrictedToolSurface: true }, abortController.signal);
127
125
  const threadConfig = buildCodexRuntimeThreadConfig(resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames), { nativeCodeModeEnabled: false });
126
+ params.assertCurrent?.();
128
127
  const thread = assertCodexThreadStartResponse(await client.request("thread/start", {
129
128
  model: modelSelection.runtimeModelId,
130
129
  ...params.modelProvider ? { modelProvider: params.modelProvider } : {},
@@ -139,20 +138,15 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
139
138
  dynamicTools: [],
140
139
  experimentalRawEvents: true,
141
140
  ephemeral: true
142
- }, {
143
- timeoutMs,
144
- signal: abortController.signal
145
- }));
141
+ }, requestOptions));
146
142
  activeThreadId = thread.thread.id;
147
143
  if (abortController.signal.aborted) requestInterrupt();
148
144
  if (params.requireNoExternalCapabilities) await attestCodexRestrictedToolSurfaceMcpServersDisabled(client, thread.thread.id, threadConfig, abortController.signal);
149
145
  if (params.historyItems?.length) await client.request("thread/inject_items", {
150
146
  threadId: thread.thread.id,
151
147
  items: params.historyItems
152
- }, {
153
- timeoutMs,
154
- signal: abortController.signal
155
- });
148
+ }, requestOptions);
149
+ params.assertCurrent?.();
156
150
  const collector = createCodexBoundedTurnCollector(thread.thread.id, params.taskLabel, params.allowEmptyText === true);
157
151
  const cleanup = client.addNotificationHandler(collector.handleNotification);
158
152
  const requestCleanup = client.addRequestHandler(createCodexBoundedApprovalHandler(params.taskLabel));
@@ -161,20 +155,22 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
161
155
  threadId: thread.thread.id,
162
156
  input: params.input,
163
157
  approvalPolicy: "on-request",
164
- model: modelSelection.runtimeModelId,
165
158
  effort: "low"
166
- }, {
167
- timeoutMs,
168
- signal: abortController.signal
169
- }));
159
+ }, requestOptions));
170
160
  activeTurnId = turn.turn.id;
171
161
  if (abortController.signal.aborted) requestInterrupt();
162
+ const result = await collector.collect(turn.turn, {
163
+ signal: abortController.signal,
164
+ timeoutError
165
+ });
166
+ params.assertCurrent?.();
172
167
  return {
173
- ...await collector.collect(turn.turn, {
174
- signal: abortController.signal,
175
- timeoutError
176
- }),
177
- model: modelSelection.catalogId
168
+ ...result,
169
+ model: modelSelection.catalogId,
170
+ nativeSelection: {
171
+ model: thread.model,
172
+ modelProvider: thread.modelProvider
173
+ }
178
174
  };
179
175
  } finally {
180
176
  await interruptPromise;
@@ -204,10 +200,7 @@ function resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames)
204
200
  return mergeCodexThreadConfigs(privateConfig, CODEX_SETTLED_FINALIZER_THREAD_CONFIG, buildCodexRingZeroThreadConfigPatch({ toolsAllow: ["openclaw"] }, true, inheritedMcpServerNames)) ?? privateConfig;
205
201
  }
206
202
  function buildPrivateCodexAppServerStartOptions(start, codexHome) {
207
- const providerArgs = start.args.flatMap((arg, index) => {
208
- const override = arg === "-c" || arg === "--config" ? start.args[index + 1] : arg.startsWith("--config=") ? arg.slice(9) : void 0;
209
- return override && /^\s*(?:openai_base_url|model_catalog_json)\s*=/u.test(override) ? ["-c", override] : [];
210
- });
203
+ const providerArgs = readCodexAppServerConfigOptions(start.args).flatMap(({ name, value }) => (name === "-c" || name === "--config") && value && /^\s*(?:openai_base_url|model_catalog_json)\s*=/u.test(value) ? ["-c", value] : []);
211
204
  const privateEnv = Object.fromEntries(Object.entries(start.env ?? {}).filter(([name]) => name.trim().toUpperCase() !== CODEX_APP_SERVER_ARGS_ENV_KEY));
212
205
  const clearEnv = (start.clearEnv ?? []).filter((name) => {
213
206
  const normalized = name.trim().toUpperCase();
@@ -215,6 +208,7 @@ function buildPrivateCodexAppServerStartOptions(start, codexHome) {
215
208
  });
216
209
  return {
217
210
  ...start,
211
+ homeScope: "agent",
218
212
  args: [
219
213
  "app-server",
220
214
  ...providerArgs,
@@ -246,14 +240,16 @@ function createCodexBoundedApprovalHandler(taskLabel) {
246
240
  };
247
241
  }
248
242
  async function resolveCodexBoundedTurnModel(params) {
249
- const listed = readModelListResult(await params.client.request("model/list", {
243
+ const result = await params.client.request("model/list", {
250
244
  limit: null,
251
245
  cursor: null,
252
- includeHidden: false
246
+ includeHidden: params.selection.mode === "required"
253
247
  }, {
254
248
  timeoutMs: Math.min(params.timeoutMs, 5e3),
255
- signal: params.signal
256
- })).models;
249
+ signal: params.signal,
250
+ assertCurrent: params.assertCurrent
251
+ });
252
+ const listed = readModelListResult(result).models;
257
253
  if (params.selection.mode === "live-default") {
258
254
  const supported = listed.filter((entry) => params.requiredModalities.every((modality) => entry.inputModalities.includes(modality)));
259
255
  const selected = supported.find((entry) => entry.isDefault) ?? supported[0];
@@ -277,7 +273,7 @@ function createCodexBoundedTurnCollector(threadId, taskLabel, allowEmptyText) {
277
273
  let turnId;
278
274
  let completedTurn;
279
275
  let promptError;
280
- let responseUsage;
276
+ const usageProjection = new CodexUsageProjection();
281
277
  const pending = [];
282
278
  const completedItems = /* @__PURE__ */ new Map();
283
279
  const assistantTextByItem = /* @__PURE__ */ new Map();
@@ -311,8 +307,7 @@ function createCodexBoundedTurnCollector(threadId, taskLabel, allowEmptyText) {
311
307
  return;
312
308
  }
313
309
  if (notification.method === "rawResponse/completed") {
314
- const usage = isJsonObject(params.usage) ? params.usage : void 0;
315
- responseUsage = usage ? normalizeCodexResponseTokenUsage(usage) : void 0;
310
+ usageProjection.record(params);
316
311
  return;
317
312
  }
318
313
  if (notification.method === "turn/completed") {
@@ -321,6 +316,7 @@ function createCodexBoundedTurnCollector(threadId, taskLabel, allowEmptyText) {
321
316
  return;
322
317
  }
323
318
  if (notification.method === "error") {
319
+ usageProjection.invalidateContext();
324
320
  if (isRetryableErrorNotification(notification.params)) return;
325
321
  promptError = readCodexErrorNotification(notification.params)?.error.message ?? `codex app-server ${taskLabel} turn failed`;
326
322
  resolveCompletion();
@@ -349,7 +345,7 @@ function createCodexBoundedTurnCollector(threadId, taskLabel, allowEmptyText) {
349
345
  return {
350
346
  text,
351
347
  items,
352
- ...responseUsage ? { usage: responseUsage } : {}
348
+ usage: usageProjection.usage
353
349
  };
354
350
  }
355
351
  };
@@ -1,4 +1,4 @@
1
- import { G as CodexAppServerRpcError } from "./shared-client-DKz23hHY.js";
1
+ import { q as CodexAppServerRpcError } from "./shared-client-CKhX2kFt.js";
2
2
  //#region extensions/codex/src/app-server/capabilities.ts
3
3
  /**
4
4
  * Capability helpers for optional Codex app-server control-plane methods.
@@ -17,6 +17,7 @@ const CODEX_CONTROL_METHODS = {
17
17
  listSkills: "skills/list",
18
18
  listThreads: "thread/list",
19
19
  listThreadTurns: "thread/turns/list",
20
+ listThreadItems: "thread/items/list",
20
21
  readThread: "thread/read",
21
22
  rateLimits: "account/rateLimits/read",
22
23
  archiveThread: "thread/archive",
@@ -2,7 +2,7 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
2
2
  //#region extensions/codex/cli-metadata.ts
3
3
  function registerCodexCliMetadata(api) {
4
4
  api.registerCli(async ({ program }) => {
5
- const { registerCodexSessionCli } = await import("./session-cli-DMc4oS2w.js");
5
+ const { registerCodexSessionCli } = await import("./session-cli-BjLhpmS1.js");
6
6
  registerCodexSessionCli(program);
7
7
  }, { descriptors: [{
8
8
  name: "codex",
@@ -1,5 +1,5 @@
1
- import { vt as isJsonObject } from "./shared-client-DKz23hHY.js";
2
- import { c as summarizeCodexRateLimits, o as summarizeCodexAccountRateLimits, r as hasCodexRateLimitSnapshots } from "./rate-limits-C5_D8Gmb.js";
1
+ import { B as isJsonObject } from "./config-CyapYSji.js";
2
+ import { c as summarizeCodexRateLimits, o as summarizeCodexAccountRateLimits, r as hasCodexRateLimitSnapshots } from "./rate-limits-Fx_l4eNa.js";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  //#region extensions/codex/src/command-formatters.ts
5
5
  /**
@@ -118,7 +118,8 @@ function formatSkills(response) {
118
118
  return lines.join("\n");
119
119
  }
120
120
  function formatCodexSkillEntry(entry) {
121
- return `\`${formatCodexDisplayText(normalizeOptionalString((isJsonObject(entry) ? entry : {}).name) ?? "<unknown>")}\``;
121
+ const record = isJsonObject(entry) ? entry : {};
122
+ return `\`${formatCodexDisplayText(normalizeOptionalString(record.name) ?? "<unknown>")}\``;
122
123
  }
123
124
  const CODEX_RESUME_SAFE_THREAD_ID_PATTERN = /^[A-Za-z0-9._:-]+$/;
124
125
  function formatCodexResumeHint(threadId) {
@@ -278,4 +279,4 @@ function extractArray(value) {
278
279
  return [];
279
280
  }
280
281
  //#endregion
281
- export { formatComputerUseStatus as a, formatSkills as c, formatCodexStatus as i, formatThreads as l, formatAccount as n, formatList as o, formatCodexDisplayText as r, formatModels as s, buildHelp as t };
282
+ export { formatCodexDisplayText as a, formatComputerUseStatus as c, formatSkills as d, formatThreads as f, formatAccount as i, formatList as l, buildHelp as n, formatCodexStatus as o, escapeCodexChatText as r, formatCodexTextForDisplay as s, CODEX_RESUME_SAFE_THREAD_ID_PATTERN as t, formatModels as u };