@openclaw/codex 2026.9.3 → 2026.9.5

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 (146) hide show
  1. package/assets/activity.svg +30 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/.setup/account-usage-runtime-C2MOIvfq.mjs +75 -0
  4. package/dist/{apply-B6el6hdO.js → .setup/apply-CJ0ZfmBG.mjs} +12 -13
  5. package/dist/.setup/async-questions-DdhOCwGi.mjs +27 -0
  6. package/dist/{attempt-client-cleanup-D6cR54TV.js → .setup/attempt-client-cleanup-BpYKdTA0.mjs} +30 -211
  7. package/dist/{attempt-context-AO4DSjE0.js → .setup/attempt-context-VXVwTCfS.mjs} +6 -6
  8. package/dist/.setup/attempt-terminal-gZrxQ35N.mjs +5 -0
  9. package/dist/{auth-binding-Co2Vfcf_.js → .setup/auth-binding-DhLWa_7K.mjs} +2 -2
  10. package/dist/{auth-cache-key-Kq6oerr6.js → .setup/auth-cache-key-QirmgiCo.mjs} +3 -3
  11. package/dist/{auth-profile-CwzO4_RG.js → .setup/auth-profile-WqZtZfXN.mjs} +1 -1
  12. package/dist/.setup/binding-connection-Bm38niE8.mjs +50 -0
  13. package/dist/.setup/binding-connection.runtime-CnRMC0ta.mjs +48 -0
  14. package/dist/{bounded-turn-lRpmZHFv.js → .setup/bounded-turn-BtlZcivC.mjs} +19 -14
  15. package/dist/{build-state-6RL6qohz.js → .setup/build-state-Xx9ybZqa.mjs} +1 -1
  16. package/dist/{capabilities-BeqLPbtM.js → .setup/capabilities-_vXcZGSx.mjs} +1 -1
  17. package/dist/{client-BEKu4yDx.js → .setup/client-vXs2929Q.mjs} +355 -164
  18. package/dist/{command-dispatch-CisT9Jqq.js → .setup/command-dispatch-naHIZwwF.mjs} +3 -3
  19. package/dist/{command-formatters-DeTfrapr.js → .setup/command-formatters-CGEkdawF.mjs} +4 -3
  20. package/dist/{command-handlers-BfIsJEuA.js → .setup/command-handlers-BtAJEW1X.mjs} +812 -152
  21. package/dist/{command-rpc-BMqRQOFX.js → .setup/command-rpc-DHFpn4le.mjs} +37 -21
  22. package/dist/{compact-CGJZ2rlb.js → .setup/compact-C3i3qlzj.mjs} +28 -43
  23. package/dist/{config-JDfTI4VI.js → .setup/config-CedDWjM-.mjs} +5 -4
  24. package/dist/{config-options-jnIFvwxD.js → .setup/config-options-BsanJ8QG.mjs} +9 -421
  25. package/dist/{protocol-CAAcVIKF.js → .setup/config-parsing-CcB9iPoq.mjs} +9 -51
  26. package/dist/{config-runtime-BWf6JLWG.js → .setup/config-runtime-CeAhl_h4.mjs} +2 -2
  27. package/dist/.setup/config-security-BRQ2mgW9.mjs +465 -0
  28. package/dist/{config-utils-C57JiJrU.js → .setup/config-utils-DujwEnhg.mjs} +2 -4
  29. package/dist/{conversation-binding-CxOlHiix.js → .setup/conversation-binding-DhzrpTM6.mjs} +60 -47
  30. package/dist/{conversation-binding-data-BiodpIzq.js → .setup/conversation-binding-data-CrcyZk6O.mjs} +1 -1
  31. package/dist/{conversation-control-CUCrSIQI.js → .setup/conversation-control-DN53ns41.mjs} +17 -13
  32. package/dist/.setup/cyber-failover-DYwbmf1o.mjs +123 -0
  33. package/dist/.setup/cyber-failover-notice-e9G3J9-e.mjs +17 -0
  34. package/dist/{dynamic-tools-D-JBoaLt.js → .setup/dynamic-tools-D16lOp67.mjs} +168 -61
  35. package/dist/{effective-mcp-catalog-J_5Ep5Um.js → .setup/effective-mcp-catalog-K6kLCN8X.mjs} +3 -3
  36. package/dist/{ephemeral-turn-DSwzP8YY.js → .setup/ephemeral-turn-R1gA8Sn6.mjs} +4 -5
  37. package/dist/{event-projector-assistant-message-BmBM4qBV.js → .setup/event-projector-assistant-message-DNUR1s0A.mjs} +6 -3
  38. package/dist/.setup/event-projector-items-DyTQ_XqL.mjs +200 -0
  39. package/dist/{attempt-notifications--H8zXR5-.js → .setup/event-projector-usage-C7Ntzs-f.mjs} +102 -9
  40. package/dist/{harness-FR6eQgyO.js → .setup/harness-rxaaoN-o.mjs} +90 -19
  41. package/dist/.setup/inference-context-fulhZuz8.mjs +94 -0
  42. package/dist/.setup/inference-proxy-CC15HuSi.mjs +311 -0
  43. package/dist/{isolated-completion-DHBefrzg.js → .setup/isolated-completion-B6srt48J.mjs} +7 -7
  44. package/dist/{launch-args-RXQwn8zV.js → .setup/launch-args-DnMak49W.mjs} +22 -1
  45. package/dist/{managed-binary-DrjjRRUD.js → .setup/managed-binary-DP6Rib3P.mjs} +11 -2
  46. package/dist/{managed-thread-store-D1t5jh3G.js → .setup/managed-thread-store-BMqgThVL.mjs} +48 -14
  47. package/dist/{model-catalog-B_6M04Wo.js → .setup/model-catalog-DkvUuBey.mjs} +35 -10
  48. package/dist/{models-P9k2qAof.js → .setup/models-BDFgm_G-.mjs} +3 -3
  49. package/dist/.setup/native-auth-BLZGqFjw.mjs +57 -0
  50. package/dist/.setup/native-subagent-history-YXaL6dMd.mjs +135 -0
  51. package/dist/.setup/native-subagent-monitor-B1hxzIOy.mjs +5031 -0
  52. package/dist/.setup/native-subagent-task-ids-DsuOonKv.mjs +411 -0
  53. package/dist/{node-cli-sessions-rj0ysJwM.js → .setup/node-cli-sessions-Cl8b2ZF3.mjs} +1 -1
  54. package/dist/{node-exec-server.runtime-BY_ctYnT.js → .setup/node-exec-server.runtime-BaViBKNz.mjs} +5 -5
  55. package/dist/{plan-BMJdMOEF.js → .setup/plan-xD7WKYTM.mjs} +331 -79
  56. package/dist/{plugin-activation-BQK-f5sV.js → .setup/plugin-activation-r8nq5Jzp.mjs} +24 -19
  57. package/dist/{plugin-app-cache-key-CdSQzWyX.js → .setup/plugin-app-cache-key-BOxKP7db.mjs} +29 -25
  58. package/dist/{plugin-approval-roundtrip-DeW95wB5.js → .setup/plugin-approval-roundtrip-CjfzafAZ.mjs} +1 -1
  59. package/dist/{plugin-inventory-CoRCzWW4.js → .setup/plugin-inventory-DUle8DLz.mjs} +12 -8
  60. package/dist/{plugin-marketplace-discovery-3akBizzF.js → .setup/plugin-marketplace-discovery-P-Vndfqq.mjs} +18 -15
  61. package/dist/{plugin-metadata-cache-DgNfRAGA.js → .setup/plugin-metadata-cache-DsS5buNa.mjs} +33 -14
  62. package/dist/{provider-capabilities-W4tfK5Y5.js → .setup/provider-capabilities-B8J4Dy-O.mjs} +2 -2
  63. package/dist/.setup/provider-fFh_-VR3.mjs +50 -0
  64. package/dist/{rate-limits-Bqnx1N4z.js → .setup/rate-limits-DOEGYRNs.mjs} +90 -46
  65. package/dist/.setup/request-BioXJLYa.mjs +292 -0
  66. package/dist/.setup/run-attempt-lifecycle-B7JbY4-F.mjs +71 -0
  67. package/dist/{run-attempt-DwKds3DN.js → .setup/run-attempt-rlA07pUv.mjs} +644 -491
  68. package/dist/{runtime-artifact-T-NwqeSH.js → .setup/runtime-artifact-Dy38Z5iU.mjs} +2 -2
  69. package/dist/{sandbox-guard-BcT66fWy.js → .setup/sandbox-guard-BBP-RbTf.mjs} +4 -3
  70. package/dist/{session-binding-CKSepwIC.js → .setup/session-binding-_0W_fHRr.mjs} +45 -63
  71. package/dist/{session-binding-record-CaZjYwNS.js → .setup/session-binding-record-TH3xA0zj.mjs} +181 -3
  72. package/dist/.setup/session-binding-sidecars-CKYEcfNn.mjs +543 -0
  73. package/dist/{session-catalog-adoption-BKLtSrwi.js → .setup/session-catalog-adoption-CR_whkEW.mjs} +6 -6
  74. package/dist/{session-catalog-archive-D0i2pGj2.js → .setup/session-catalog-archive-CwZaPacf.mjs} +6 -6
  75. package/dist/.setup/session-catalog-events-jMcYfQyd.mjs +250 -0
  76. package/dist/.setup/session-catalog-fUdWDx-U.mjs +2464 -0
  77. package/dist/.setup/session-catalog-index-B141u15s.mjs +1070 -0
  78. package/dist/.setup/session-catalog-index-order-Cc5BzlQr.mjs +48 -0
  79. package/dist/.setup/session-catalog-index-state-BAuDztHN.mjs +180 -0
  80. package/dist/{session-catalog-parsing-CdD3JhdM.js → .setup/session-catalog-native-projection-ChV3cCtm.mjs} +213 -21
  81. package/dist/{session-catalog-node-adoption-BUuDYY8R.js → .setup/session-catalog-node-adoption-BVRsYOSh.mjs} +3 -3
  82. package/dist/{session-catalog-node-continue-CBtc4wkI.js → .setup/session-catalog-node-continue-Dowv8osw.mjs} +7 -7
  83. package/dist/.setup/session-catalog-projection-C1Bj9Jl-.mjs +414 -0
  84. package/dist/{session-cli-CbgaHh0f.js → .setup/session-cli-DIj-IE-E.mjs} +4 -4
  85. package/dist/{session-history-Cz-tOOYj.js → .setup/session-history-C--SrLI8.mjs} +10 -5
  86. package/dist/{session-history-import-DFN7sWRU.js → .setup/session-history-import-JHXT5Xfi.mjs} +4 -4
  87. package/dist/{session-history-read-cxPUxyVV.js → .setup/session-history-read-B3ZfSUbF.mjs} +2 -2
  88. package/dist/{session-history.worker-CNEvGaU5.js → .setup/session-history.worker-CpNj7H_P.mjs} +192 -89
  89. package/dist/{session-initialization-Jo86C60I.js → .setup/session-initialization-DH1z6fXn.mjs} +2 -2
  90. package/dist/{session-permission-policy-B22InTp_.js → .setup/session-permission-policy-DhurXY0l.mjs} +2 -2
  91. package/dist/{session-retirement-BSNG_mhf.js → .setup/session-retirement-CU87AOg9.mjs} +6 -6
  92. package/dist/{settled-turn-context-Du6gdUDd.js → .setup/settled-turn-context-fmwouT5I.mjs} +2 -2
  93. package/dist/{settled-turn-finalizer-BuLUrZl2.js → .setup/settled-turn-finalizer-CiY2bLFK.mjs} +10 -10
  94. package/dist/{shared-client-CVhez2Uo.js → .setup/shared-client-BpTtuLQ5.mjs} +495 -156
  95. package/dist/{side-question-DLbr2vUU.js → .setup/side-question-DSCZyoBD.mjs} +64 -47
  96. package/dist/{source-Da-h6f7e.js → .setup/source-Bjp4UQij.mjs} +15 -14
  97. package/dist/{thread-archive-guard-D1bP04Tf.js → .setup/thread-archive-guard-jmecf6OJ.mjs} +1 -1
  98. package/dist/.setup/thread-history-page-BTx-4xsg.mjs +83 -0
  99. package/dist/{thread-lifecycle-D1pzRwHB.js → .setup/thread-lifecycle-Cik28qWn.mjs} +330 -150
  100. package/dist/{thread-ownership-D6oASVRu.js → .setup/thread-ownership-skomxnIt.mjs} +4 -4
  101. package/dist/{thread-policy-D8kI7yAO.js → .setup/thread-policy-Cjs4B8xf.mjs} +3 -3
  102. package/dist/{thread-resume-T5cveyxA.js → .setup/thread-resume-BkNpj9Pz.mjs} +8 -5
  103. package/dist/.setup/timeout-DZF05XrR.mjs +63 -0
  104. package/dist/{session-catalog-home-id-D7-aLiNt.js → .setup/transcript-history-projection-DHNBDhCU.mjs} +73 -20
  105. package/dist/{transcript-mirror-t5TOccct.js → .setup/transcript-mirror-D4qp_leP.mjs} +15 -6
  106. package/dist/{transcript-mirror-attestation-DibE0krH.js → .setup/transcript-mirror-attestation-CzM-94NC.mjs} +4 -1
  107. package/dist/{transport-stdio-BGjHoYLr.js → .setup/transport-stdio-Cmx94Oiy.mjs} +149 -44
  108. package/dist/{upstream-session-fork-De-sLJ2r.js → .setup/upstream-session-fork-D3UKxgVD.mjs} +27 -26
  109. package/dist/{usage-CPPTmBvZ.js → .setup/usage-BOgBEKso.mjs} +4 -4
  110. package/dist/.setup/usage-limit-error-C0ow7DOc.mjs +166 -0
  111. package/dist/{version-omm6IPI3.js → .setup/version-CoqzXPgK.mjs} +1 -1
  112. package/dist/{web-search-provider.runtime-CSVgQL0w.js → .setup/web-search-provider.runtime-CTGuJt6i.mjs} +3 -3
  113. package/dist/api.js +28 -20
  114. package/dist/cli-metadata.js +1 -1
  115. package/dist/doctor-contract-api.js +8 -528
  116. package/dist/harness.js +1 -1
  117. package/dist/index.js +130 -135
  118. package/dist/media-understanding-provider.js +3 -3
  119. package/dist/migration-provider-api.js +2 -0
  120. package/dist/native-tool-policy.js +12 -0
  121. package/dist/provider-discovery.js +18 -0
  122. package/dist/session-history-worker-runtime.js +23 -5
  123. package/dist/session-history.worker.js +2 -2
  124. package/dist/web-search-contract-api.js +1 -1
  125. package/openclaw.plugin.json +354 -68
  126. package/package.json +11 -8
  127. package/dist/binding-connection-QqgcPCgk.js +0 -60
  128. package/dist/event-projector-usage-CIyrYYid.js +0 -102
  129. package/dist/native-subagent-monitor-BbCUKRwC.js +0 -3350
  130. package/dist/request-CGvGOpeR.js +0 -198
  131. package/dist/session-catalog-HaDcp7Sv.js +0 -1533
  132. package/dist/session-catalog-provenance-DkJHo735.js +0 -124
  133. package/dist/timeout-BVw8aaM1.js +0 -33
  134. package/dist/{auth-profile-selection-DFu9e167.js → .setup/auth-profile-selection-DFu9e167.mjs} +0 -0
  135. package/dist/{context-compaction-activity-CMla5FPJ.js → .setup/context-compaction-activity-CMla5FPJ.mjs} +0 -0
  136. package/dist/{elicitation-input-DPoK8F7w.js → .setup/elicitation-input-DPoK8F7w.mjs} +0 -0
  137. package/dist/{history-rejection-B4nOXNXF.js → .setup/history-rejection-B4nOXNXF.mjs} +0 -0
  138. package/dist/{image-payload-sanitizer-tupAr-2o.js → .setup/image-payload-sanitizer-tupAr-2o.mjs} +0 -0
  139. package/dist/{incognito-session-uhrBF6wJ.js → .setup/incognito-session-uhrBF6wJ.mjs} +0 -0
  140. package/dist/{local-runtime-attribution-B_2mnqhb.js → .setup/local-runtime-attribution-B_2mnqhb.mjs} +0 -0
  141. package/dist/{native-execution-policy-umd0tgh4.js → .setup/native-execution-policy-YBMHSzC4.mjs} +1 -1
  142. /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
  143. /package/dist/{session-binding-meta-B7aEMU7g.js → .setup/session-binding-meta-B7aEMU7g.mjs} +0 -0
  144. /package/dist/{session-upstream-marker-D15C9NHp.js → .setup/session-upstream-marker-D15C9NHp.mjs} +0 -0
  145. /package/dist/{upstream-prompt-provenance-LphB8slG.js → .setup/upstream-prompt-provenance-LphB8slG.mjs} +0 -0
  146. /package/dist/{web-search-provider.shared-BrZmlqyR.js → .setup/web-search-provider.shared-BrZmlqyR.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { c as resolveCodexAppServerLocalHomeDir, l as resolveCodexAppServerUserHomeDir, s as resolveCodexAppServerHomeDir } from "./protocol-CAAcVIKF.js";
1
+ import { _ as resolveCodexAppServerUserHomeDir, g as resolveCodexAppServerLocalHomeDir, h as resolveCodexAppServerHomeDir } from "./config-security-BRQ2mgW9.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  import { createHash } from "node:crypto";
@@ -6,6 +6,22 @@ import { OPENCLAW_VERSION, embeddedAgentLog } from "openclaw/plugin-sdk/agent-ha
6
6
  import { isFutureDateTimestampMs, resolveDateTimestampMs, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
7
7
  import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
8
8
  import { readPluginPackageVersion } from "openclaw/plugin-sdk/extension-shared";
9
+ //#region extensions/codex/src/app-server/app-identity.ts
10
+ /**
11
+ * Apps SDK manifests and installed Codex connections can name the same app
12
+ * with asdk_app_ and legacy connector_ prefixes. Only the shared 128-bit ID
13
+ * establishes equivalence; display names never establish app ownership.
14
+ * Keep the installed ID for native config and calls. This comparison bridge
15
+ * can retire when installed inventories consistently return Apps SDK IDs.
16
+ */
17
+ function codexAppIdentityKey(id) {
18
+ return id.replace(/^connector_([a-f0-9]{32})$/, "asdk_app_$1");
19
+ }
20
+ /** Resolves a declared app against account-authorized runtime metadata. */
21
+ function findCodexAppById(apps, id) {
22
+ return apps.find((app) => app.id === id) ?? apps.find((app) => codexAppIdentityKey(app.id) === codexAppIdentityKey(id));
23
+ }
24
+ //#endregion
9
25
  //#region extensions/codex/src/app-server/app-inventory-cache.ts
10
26
  /**
11
27
  * Process-local cache for Codex app-server app inventories, keyed by runtime
@@ -69,7 +85,7 @@ var CodexAppInventoryCache = class {
69
85
  };
70
86
  const entry = this.entries.get(key);
71
87
  if (entry) {
72
- const scope = invalidatedAppIds?.filter(Boolean) ?? [];
88
+ const scope = invalidatedAppIds?.filter(Boolean).map(codexAppIdentityKey) ?? [];
73
89
  if (!entry.invalidated) entry.invalidatedAppIds = scope.length ? [...scope].toSorted() : void 0;
74
90
  else if (entry.invalidatedAppIds && scope.length) entry.invalidatedAppIds = Array.from(/* @__PURE__ */ new Set([...entry.invalidatedAppIds, ...scope])).toSorted();
75
91
  else entry.invalidatedAppIds = void 0;
@@ -106,7 +122,7 @@ var CodexAppInventoryCache = class {
106
122
  const promise = this.refreshUncoalesced(params, refreshToken, previousRefresh);
107
123
  const currentRefresh = {
108
124
  promise,
109
- targetAppIds: new Set(params.targetAppIds?.filter(Boolean) ?? [])
125
+ targetAppIds: new Set(params.targetAppIds?.filter(Boolean).map(codexAppIdentityKey) ?? [])
110
126
  };
111
127
  this.inFlight.set(params.key, currentRefresh);
112
128
  try {
@@ -133,7 +149,7 @@ var CodexAppInventoryCache = class {
133
149
  key: params.key,
134
150
  apps: inventory.apps,
135
151
  installedApps: inventory.installedApps,
136
- ...params.targetAppIds?.some(Boolean) ? { targetAppIds: Array.from(new Set(params.targetAppIds.filter(Boolean))).toSorted() } : {},
152
+ ...params.targetAppIds?.some(Boolean) ? { targetAppIds: Array.from(new Set(params.targetAppIds.filter(Boolean).map(codexAppIdentityKey))).toSorted() } : {},
137
153
  fetchedAtMs: nowMs,
138
154
  expiresAtMs,
139
155
  revision: this.revision
@@ -191,13 +207,13 @@ function resolvePublishedInventorySnapshot(existing, snapshot, nowMs) {
191
207
  }
192
208
  /** Replaces refreshed target rows in place, deletes vanished ones, appends new ones. */
193
209
  function mergeRefreshedRows(existingRows, refreshedRows, refreshedTargetIds) {
194
- const refreshedById = new Map(refreshedRows.map((row) => [row.id, row]));
195
- const existingIds = new Set(existingRows.map((row) => row.id));
210
+ const refreshedById = new Map(refreshedRows.map((row) => [codexAppIdentityKey(row.id), row]));
211
+ const existingIds = new Set(existingRows.map((row) => codexAppIdentityKey(row.id)));
196
212
  return [...existingRows.flatMap((row) => {
197
- if (!refreshedTargetIds.has(row.id)) return [row];
198
- const refreshed = refreshedById.get(row.id);
213
+ if (!refreshedTargetIds.has(codexAppIdentityKey(row.id))) return [row];
214
+ const refreshed = refreshedById.get(codexAppIdentityKey(row.id));
199
215
  return refreshed ? [refreshed] : [];
200
- }), ...refreshedRows.filter((row) => !existingIds.has(row.id))];
216
+ }), ...refreshedRows.filter((row) => !existingIds.has(codexAppIdentityKey(row.id)))];
201
217
  }
202
218
  /**
203
219
  * A refresh retires exactly the invalidation scope it re-read: a complete
@@ -217,7 +233,7 @@ function resolveRemainingInvalidationScope(existing, snapshot) {
217
233
  }
218
234
  function doesInFlightRefreshCover(existing, params) {
219
235
  if (existing.targetAppIds.size === 0) return true;
220
- const requestedAppIds = new Set(params.targetAppIds?.filter(Boolean) ?? []);
236
+ const requestedAppIds = new Set(params.targetAppIds?.filter(Boolean).map(codexAppIdentityKey) ?? []);
221
237
  return requestedAppIds.size > 0 && Array.from(requestedAppIds).every((appId) => existing.targetAppIds.has(appId));
222
238
  }
223
239
  /** Serializes a refresh failure without leaking large or sensitive error data. */
@@ -257,8 +273,8 @@ function normalizeRuntimeIdentityForCacheKey(value) {
257
273
  }
258
274
  async function readInstalledApps(request, options) {
259
275
  const installed = await request("app/installed", { forceRefresh: options.forceRefresh });
260
- const targetIds = new Set((options.targetAppIds ?? []).filter(Boolean));
261
- const apps = targetIds.size === 0 ? installed.apps : installed.apps.filter((app) => targetIds.has(app.id));
276
+ const targetIds = new Set((options.targetAppIds ?? []).filter(Boolean).map(codexAppIdentityKey));
277
+ const apps = targetIds.size === 0 ? installed.apps : installed.apps.filter((app) => targetIds.has(codexAppIdentityKey(app.id)));
262
278
  if (apps.length === 0) return {
263
279
  apps: [],
264
280
  installedApps: []
@@ -335,14 +351,6 @@ function isSensitiveErrorDataKey(key) {
335
351
  */
336
352
  const require = createRequire(import.meta.url);
337
353
  const CODEX_PLUGIN_VERSION = readPluginPackageVersion({ require });
338
- let catalogConnectionHomes = /* @__PURE__ */ new Map();
339
- function catalogConnectionHomeKey(fingerprint, agentDir) {
340
- return `${agentDir ?? ""}\0${fingerprint}`;
341
- }
342
- /** Replaces the lifecycle-owned catalog connection snapshot used by supervised bindings. */
343
- function replaceCodexCatalogConnectionHomes(homes) {
344
- catalogConnectionHomes = new Map(homes.map((home) => [catalogConnectionHomeKey(home.fingerprint, home.agentDir), home.codexHome]));
345
- }
346
354
  /** Builds the full app inventory cache key for Codex plugin/app discovery. */
347
355
  function buildCodexPluginAppCacheKey(params) {
348
356
  return buildCodexAppInventoryCacheKey({
@@ -379,10 +387,6 @@ function buildCodexAppServerConnectionFingerprint(appServer, agentDir) {
379
387
  cwd: appServer.start.cwd ?? null
380
388
  });
381
389
  }
382
- /** Looks up a snapshotted catalog store without repeating filesystem discovery on a run. */
383
- function resolveCodexCatalogConnectionHome(fingerprint, agentDir) {
384
- return catalogConnectionHomes.get(catalogConnectionHomeKey(fingerprint, agentDir));
385
- }
386
390
  function resolveCodexAppServerConnectionHome(start, agentDir) {
387
391
  const configured = start.env?.CODEX_HOME?.trim();
388
392
  if (configured) return configured;
@@ -424,4 +428,4 @@ function fingerprintCodexPluginAppCacheCredentials(startOptions) {
424
428
  return `sha256:${hash.digest("hex")}`;
425
429
  }
426
430
  //#endregion
427
- export { resolveCodexCatalogConnectionHome as a, serializeCodexAppInventoryError as c, replaceCodexCatalogConnectionHomes as i, buildCodexAppServerRuntimeFingerprint as n, CodexAppInventoryCache as o, buildCodexPluginAppCacheKey as r, defaultCodexAppInventoryCache as s, buildCodexAppServerConnectionFingerprint as t };
431
+ export { defaultCodexAppInventoryCache as a, findCodexAppById as c, CodexAppInventoryCache as i, buildCodexAppServerRuntimeFingerprint as n, serializeCodexAppInventoryError as o, buildCodexPluginAppCacheKey as r, codexAppIdentityKey as s, buildCodexAppServerConnectionFingerprint as t };
@@ -1,4 +1,4 @@
1
- import { A as resolveCodexGatewayTimeoutWithGraceMs } from "./shared-client-CVhez2Uo.js";
1
+ import { it as resolveCodexGatewayTimeoutWithGraceMs } from "./shared-client-BpTtuLQ5.mjs";
2
2
  import { isApprovalNotFoundError, toErrorObject } from "openclaw/plugin-sdk/error-runtime";
3
3
  import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
4
4
  //#region extensions/codex/src/app-server/plugin-approval-roundtrip.ts
@@ -1,7 +1,11 @@
1
- import { h as CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME, m as CODEX_PLUGINS_MARKETPLACE_NAME } from "./config-utils-C57JiJrU.js";
2
- import { S as resolveCodexPluginsPolicy } from "./protocol-CAAcVIKF.js";
3
- import "./config-JDfTI4VI.js";
1
+ import { f as resolveCodexPluginsPolicy } from "./config-parsing-CcB9iPoq.mjs";
2
+ import { c as findCodexAppById } from "./plugin-app-cache-key-BOxKP7db.mjs";
3
+ import "./config-CedDWjM-.mjs";
4
4
  import { embeddedAgentLog } from "openclaw/plugin-sdk/agent-harness-runtime";
5
+ //#region extensions/codex/src/app-server/config-contracts.ts
6
+ const CODEX_PLUGINS_MARKETPLACE_NAME = "openai-curated";
7
+ const CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME = "workspace-directory";
8
+ //#endregion
5
9
  //#region extensions/codex/src/app-server/plugin-inventory.ts
6
10
  /**
7
11
  * Reads Codex plugin marketplace state and app inventory to decide which
@@ -106,7 +110,7 @@ async function readCodexPluginInventory(params) {
106
110
  activationRequired: pluginPolicy.enabled && (unavailableByMarketplacePolicy || !summary.installed || !summary.enabled),
107
111
  authRequired: apps.some((app) => app.needsAuth || !app.accessible),
108
112
  appOwnership,
109
- ownedAppIds,
113
+ ownedAppIds: Array.from(/* @__PURE__ */ new Set([...ownedAppIds, ...apps.map((app) => app.id)])).toSorted(),
110
114
  apps
111
115
  });
112
116
  }
@@ -234,9 +238,9 @@ function resolveOwnedApps(params) {
234
238
  });
235
239
  return [];
236
240
  }
237
- const appInfoById = new Map((params.appInventory?.snapshot?.apps ?? []).map((app) => [app.id, app]));
241
+ const appInfos = params.appInventory?.snapshot?.apps ?? [];
238
242
  return detailApps.map((app) => {
239
- const info = appInfoById.get(app.id);
243
+ const info = findCodexAppById(appInfos, app.id);
240
244
  if (!info) return {
241
245
  id: app.id,
242
246
  name: app.name,
@@ -245,7 +249,7 @@ function resolveOwnedApps(params) {
245
249
  needsAuth: true
246
250
  };
247
251
  return Object.assign({
248
- id: app.id,
252
+ id: info.id,
249
253
  name: app.name,
250
254
  accessible: info.isAccessible,
251
255
  enabled: info.isEnabled,
@@ -322,4 +326,4 @@ function isOpenAiCuratedMarketplaceName(marketplaceName) {
322
326
  return marketplaceName === "openai-curated" || marketplaceName === CODEX_PLUGINS_REMOTE_MARKETPLACE_NAME || marketplaceName === CODEX_PLUGINS_API_MARKETPLACE_NAME;
323
327
  }
324
328
  //#endregion
325
- export { readCodexPluginInventory as a, pluginReadParams as i, isOpenAiCuratedMarketplace as n, resolveOwnedAppApprovalOverrideKeys as o, isOpenAiCuratedMarketplaceName as r, resolveRecoverableCodexPluginConfigKeys as s, findCodexMarketplacePluginSummary as t };
329
+ export { readCodexPluginInventory as a, CODEX_PLUGINS_MARKETPLACE_NAME as c, pluginReadParams as i, CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME as l, isOpenAiCuratedMarketplace as n, resolveOwnedAppApprovalOverrideKeys as o, isOpenAiCuratedMarketplaceName as r, resolveRecoverableCodexPluginConfigKeys as s, findCodexMarketplacePluginSummary as t };
@@ -12,21 +12,26 @@ function canMutateCodexHost(ctx) {
12
12
  //#endregion
13
13
  //#region extensions/codex/src/plugin-marketplace-discovery.ts
14
14
  /** Read-only discovery of Codex-owned local, curated, and remote plugin marketplaces. */
15
- const PLUGIN_SEGMENT_PATTERN = /^[A-Za-z0-9_-]+$/;
16
- const MAX_PLUGIN_DESCRIPTION_LENGTH = 160;
15
+ const PLUGIN_NAME_PATTERN = /^[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*$/;
16
+ const MARKETPLACE_NAME_PATTERN = /^[A-Za-z0-9_-]+$/;
17
+ const MAX_PLUGIN_METADATA_LENGTH = 160;
17
18
  const SUPPLEMENTAL_MARKETPLACE_KINDS = [
18
19
  "workspace-directory",
19
20
  "shared-with-me",
20
21
  "created-by-me-remote",
21
22
  "vertical"
22
23
  ];
24
+ function filterCodexMarketplacePlugins(plugins, query, marketplace) {
25
+ const normalizedQuery = query.trim().toLowerCase();
26
+ return plugins.filter((plugin) => (!marketplace || plugin.marketplaceName === marketplace) && (!normalizedQuery || `${plugin.id} ${plugin.displayName ?? ""} ${plugin.developerName ?? ""} ${plugin.description ?? ""}`.toLowerCase().includes(normalizedQuery)));
27
+ }
23
28
  /** Validates the same identifier segments required by Codex's stable PluginId parser. */
24
29
  function parseCodexPluginMarketplaceId(value) {
25
30
  const separator = value.lastIndexOf("@");
26
31
  if (separator <= 0 || separator === value.length - 1) return;
27
32
  const pluginName = value.slice(0, separator);
28
33
  const marketplaceName = value.slice(separator + 1);
29
- return PLUGIN_SEGMENT_PATTERN.test(pluginName) && PLUGIN_SEGMENT_PATTERN.test(marketplaceName) ? {
34
+ return PLUGIN_NAME_PATTERN.test(pluginName) && MARKETPLACE_NAME_PATTERN.test(marketplaceName) ? {
30
35
  pluginName,
31
36
  marketplaceName
32
37
  } : void 0;
@@ -62,17 +67,21 @@ async function discoverCodexMarketplacePlugins(params) {
62
67
  const discovered = /* @__PURE__ */ new Map();
63
68
  const ambiguous = /* @__PURE__ */ new Set();
64
69
  for (const marketplace of marketplaces) {
65
- if (!PLUGIN_SEGMENT_PATTERN.test(marketplace.name)) continue;
70
+ if (!MARKETPLACE_NAME_PATTERN.test(marketplace.name)) continue;
66
71
  for (const summary of marketplace.plugins) {
67
72
  const pluginName = pluginSlug(summary, marketplace.name);
68
73
  if (!pluginName) continue;
69
74
  const id = `${pluginName}@${marketplace.name}`;
70
75
  if (ambiguous.has(id)) continue;
71
76
  const previous = discovered.get(id);
77
+ const pluginInterface = asOptionalRecord(summary.interface);
72
78
  const next = {
73
79
  id,
74
80
  pluginName,
75
81
  marketplaceName: marketplace.name,
82
+ displayName: boundedCatalogText(pluginInterface?.displayName) || void 0,
83
+ developerName: boundedCatalogText(pluginInterface?.developerName) || void 0,
84
+ description: boundedCatalogText(pluginInterface?.shortDescription) || boundedCatalogText(pluginInterface?.longDescription) || void 0,
76
85
  installed: summary.installed,
77
86
  enabled: summary.enabled,
78
87
  available: summary.availability !== "DISABLED_BY_ADMIN" && summary.installPolicy !== "NOT_AVAILABLE",
@@ -85,8 +94,6 @@ async function discoverCodexMarketplacePlugins(params) {
85
94
  } : {},
86
95
  summaryId: summary.id
87
96
  };
88
- const description = pluginDescription(summary);
89
- if (description) next.description = description;
90
97
  if (previous && (previous.marketplacePath !== next.marketplacePath || previous.remotePluginId !== next.remotePluginId)) {
91
98
  discovered.delete(id);
92
99
  ambiguous.add(id);
@@ -114,21 +121,17 @@ function pluginSlug(summary, marketplaceName) {
114
121
  const qualified = parseCodexPluginMarketplaceId(summary.id);
115
122
  if (qualified?.marketplaceName === marketplaceName) return qualified.pluginName;
116
123
  const identitySegment = summary.id.split("/").at(-1);
117
- if (identitySegment && PLUGIN_SEGMENT_PATTERN.test(identitySegment)) return identitySegment;
118
- return PLUGIN_SEGMENT_PATTERN.test(summary.name) ? summary.name : void 0;
119
- }
120
- function pluginDescription(summary) {
121
- const description = asOptionalRecord(summary.interface)?.shortDescription;
122
- if (typeof description !== "string") return;
123
- return boundedCatalogText(description) || void 0;
124
+ if (identitySegment && PLUGIN_NAME_PATTERN.test(identitySegment)) return identitySegment;
125
+ return PLUGIN_NAME_PATTERN.test(summary.name) ? summary.name : void 0;
124
126
  }
125
127
  function boundedCatalogText(value) {
128
+ if (typeof value !== "string") return "";
126
129
  let sanitized = "";
127
130
  for (const character of value) {
128
131
  const codePoint = character.codePointAt(0);
129
132
  sanitized += codePoint !== void 0 && (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) ? " " : character;
130
133
  }
131
- return sanitized.replace(/\s+/g, " ").trim().slice(0, MAX_PLUGIN_DESCRIPTION_LENGTH);
134
+ return sanitized.replace(/\s+/g, " ").trim().slice(0, MAX_PLUGIN_METADATA_LENGTH);
132
135
  }
133
136
  //#endregion
134
- export { CODEX_NATIVE_EXECUTION_AUTH_ERROR as a, CODEX_HOST_INSPECTION_AUTH_ERROR as i, parseCodexPluginMarketplaceId as n, canMutateCodexHost as o, CODEX_FULL_PERMISSIONS_AUTH_ERROR as r, hasCodexAdminScope as s, discoverCodexMarketplacePlugins as t };
137
+ export { CODEX_HOST_INSPECTION_AUTH_ERROR as a, hasCodexAdminScope as c, CODEX_FULL_PERMISSIONS_AUTH_ERROR as i, filterCodexMarketplacePlugins as n, CODEX_NATIVE_EXECUTION_AUTH_ERROR as o, parseCodexPluginMarketplaceId as r, canMutateCodexHost as s, discoverCodexMarketplacePlugins as t };
@@ -1,12 +1,12 @@
1
- import { o as resolveCodexComputerUseConfig } from "./config-options-jnIFvwxD.js";
2
- import { s as resolveCodexAppServerHomeDir } from "./protocol-CAAcVIKF.js";
3
- import { c as isCodexAppServerIndeterminateTransportError, o as isCodexAppServerConnectionClosedError, s as isCodexAppServerIndeterminateRequestCancellationError } from "./client-BEKu4yDx.js";
4
- import { c as resolveMacOSDesktopCodexBundledMarketplaceCandidates, o as resolveFirstExistingMacOSDesktopCodexBundledMarketplacePath, t as isManagedCodexDesktopCommand } from "./managed-binary-DrjjRRUD.js";
5
- import { n as describeControlFailure } from "./capabilities-BeqLPbtM.js";
6
- import { i as requestCodexAppServerJson } from "./request-CGvGOpeR.js";
7
- import "./config-JDfTI4VI.js";
8
- import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-BWf6JLWG.js";
9
- import { $ as assertNotSymlink, Q as resolveCodexManagedBundledMarketplacePath, T as acquireCodexNativeConfigFence, Y as reconcileCodexComputerUseStartArtifacts, b as waitForCodexAppServerClientDesktopGenerationDrain, c as getLeasedSharedCodexAppServerClient, d as readCodexAppServerClientDesktopGeneration, g as resolveCodexNativeConfigFenceKey, h as releaseLeasedSharedCodexAppServerClient, p as readCodexAppServerClientProcessIdentity, t as assertCodexAppServerClientStartSelectionCurrent, u as isCodexAppServerStartSelectionChangedError } from "./shared-client-CVhez2Uo.js";
1
+ import { h as resolveCodexAppServerHomeDir } from "./config-security-BRQ2mgW9.mjs";
2
+ import { c as isCodexAppServerIndeterminateTransportError, o as isCodexAppServerConnectionClosedError, s as isCodexAppServerIndeterminateRequestCancellationError } from "./client-vXs2929Q.mjs";
3
+ import { o as resolveCodexComputerUseConfig } from "./config-options-BsanJ8QG.mjs";
4
+ import { l as resolveMacOSDesktopCodexBundledMarketplaceCandidates, s as resolveFirstExistingMacOSDesktopCodexBundledMarketplacePath, t as isManagedCodexDesktopCommand } from "./managed-binary-DP6Rib3P.mjs";
5
+ import { n as describeControlFailure } from "./capabilities-_vXcZGSx.mjs";
6
+ import { i as requestCodexAppServerJson } from "./request-BioXJLYa.mjs";
7
+ import "./config-CedDWjM-.mjs";
8
+ import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-CeAhl_h4.mjs";
9
+ import { $ as assertNotSymlink, D as acquireCodexNativeConfigFence, Q as resolveCodexManagedBundledMarketplacePath, Y as reconcileCodexComputerUseStartArtifacts, b as waitForCodexAppServerClientDesktopGenerationDrain, c as getLeasedSharedCodexAppServerClient, d as readCodexAppServerClientDesktopGeneration, g as resolveCodexNativeConfigFenceKey, h as releaseLeasedSharedCodexAppServerClient, p as readCodexAppServerClientProcessIdentity, t as assertCodexAppServerClientStartSelectionCurrent, u as isCodexAppServerStartSelectionChangedError } from "./shared-client-BpTtuLQ5.mjs";
10
10
  import { existsSync } from "node:fs";
11
11
  import path from "node:path";
12
12
  import fs$1 from "node:fs/promises";
@@ -33,6 +33,9 @@ const COMPUTER_USE_MARKETPLACE_NAME_PRIORITY = [
33
33
  ];
34
34
  const COMPUTER_USE_LIVE_TEST_RETRY_COUNT = 1;
35
35
  const COMPUTER_USE_LIVE_TEST_THREAD_NAME = "OpenClaw Computer Use readiness probe";
36
+ const COMPUTER_USE_LIST_APPS_TOOL = "list_apps";
37
+ const COMPUTER_USE_UNIFIED_JS_TOOL = "js";
38
+ const COMPUTER_USE_UNIFIED_JS_PROBE = "await cua.getState();";
36
39
  /** Reads Computer Use readiness without installing or mutating app-server state. */
37
40
  async function readCodexComputerUseStatus(params = {}) {
38
41
  const config = resolveComputerUseConfig(params);
@@ -318,7 +321,8 @@ async function readComputerUseTools(params) {
318
321
  params.releaseNativeConfigFence?.();
319
322
  const { liveTest, repair } = await runCodexComputerUseLiveTest({
320
323
  request: params.request,
321
- config: params.config
324
+ config: params.config,
325
+ tools
322
326
  });
323
327
  const compatibilityStartupAllowed = !liveTest.ok && !params.config.strictReadiness;
324
328
  return {
@@ -342,6 +346,7 @@ async function runCodexComputerUseLiveTest(params) {
342
346
  const startedAt = Date.now();
343
347
  let lastError;
344
348
  let repair;
349
+ const probe = resolveComputerUseLiveTestProbe(params.tools);
345
350
  for (let attempt = 0; attempt <= COMPUTER_USE_LIVE_TEST_RETRY_COUNT; attempt += 1) {
346
351
  let threadId;
347
352
  try {
@@ -350,12 +355,12 @@ async function runCodexComputerUseLiveTest(params) {
350
355
  developerInstructions: COMPUTER_USE_LIVE_TEST_THREAD_NAME,
351
356
  ephemeral: true
352
357
  }, { timeoutMs: params.config.liveTestTimeoutMs })).thread.id;
353
- await params.request("mcpServer/tool/call", {
358
+ if ((await params.request("mcpServer/tool/call", {
354
359
  threadId,
355
360
  server: params.config.mcpServerName,
356
- tool: "list_apps",
357
- arguments: {}
358
- }, { timeoutMs: params.config.toolCallTimeoutMs });
361
+ tool: probe.tool,
362
+ arguments: probe.arguments
363
+ }, { timeoutMs: params.config.toolCallTimeoutMs })).isError === true) throw new Error(`Computer Use readiness tool ${params.config.mcpServerName}.${probe.tool} returned an error result`);
359
364
  return {
360
365
  liveTest: {
361
366
  status: "passed",
@@ -395,6 +400,16 @@ async function runCodexComputerUseLiveTest(params) {
395
400
  ...repair ? { repair } : {}
396
401
  };
397
402
  }
403
+ function resolveComputerUseLiveTestProbe(tools) {
404
+ if (tools?.includes(COMPUTER_USE_UNIFIED_JS_TOOL) && !tools.includes(COMPUTER_USE_LIST_APPS_TOOL)) return {
405
+ tool: COMPUTER_USE_UNIFIED_JS_TOOL,
406
+ arguments: { code: COMPUTER_USE_UNIFIED_JS_PROBE }
407
+ };
408
+ return {
409
+ tool: COMPUTER_USE_LIST_APPS_TOOL,
410
+ arguments: {}
411
+ };
412
+ }
398
413
  async function repairComputerUseMcpRuntime(request, config) {
399
414
  try {
400
415
  await request("config/mcpServer/reload", void 0, { timeoutMs: config.liveTestTimeoutMs });
@@ -445,6 +460,7 @@ async function resolveMarketplaceRef(params) {
445
460
  candidates = await listComputerUseMarketplaceCandidates(params.request, params.config);
446
461
  }
447
462
  const waitUntil = marketplaceDiscoveryWaitUntil(params);
463
+ if (candidates.length === 0 && waitUntil > Date.now() && await codexNativePluginsDisabled(params.request)) return { message: "Codex native plugin support is disabled (features.plugins = false). Enable it in the Codex config, then run /codex computer-use install." };
448
464
  while (candidates.length === 0) {
449
465
  if (Date.now() >= waitUntil) break;
450
466
  await delay(Math.min(CURATED_MARKETPLACE_POLL_INTERVAL_MS, waitUntil - Date.now()), params.signal);
@@ -477,6 +493,9 @@ async function migrateLegacyBundledMarketplaceSource(params) {
477
493
  async function listComputerUseMarketplaceCandidates(request, config) {
478
494
  return findComputerUseMarketplaces(await request("plugin/list", { cwds: [] }), config.pluginName);
479
495
  }
496
+ async function codexNativePluginsDisabled(request) {
497
+ return (await request("experimentalFeature/list", {})).data.find(({ name }) => name === "plugins")?.enabled === false;
498
+ }
480
499
  function blockUnsafeAutoInstallStatus(config) {
481
500
  if (!config.marketplaceSource) return;
482
501
  return unavailableStatus(config, "auto_install_blocked", "Computer Use auto-install only uses marketplaces Codex app-server has already discovered. Run /codex computer-use install to install from a configured marketplace source.");
@@ -1,5 +1,5 @@
1
- import { h as releaseLeasedSharedCodexAppServerClient } from "./shared-client-CVhez2Uo.js";
2
- import { st as normalizeCodexDynamicToolName } from "./thread-lifecycle-D1pzRwHB.js";
1
+ import { h as releaseLeasedSharedCodexAppServerClient } from "./shared-client-BpTtuLQ5.mjs";
2
+ import { lt as normalizeCodexDynamicToolName } from "./thread-lifecycle-Cik28qWn.mjs";
3
3
  import { pinExecToolTarget } from "openclaw/plugin-sdk/codex-mcp-projection";
4
4
  import { loadNodeExecAvailability } from "openclaw/plugin-sdk/node-selection-runtime";
5
5
  //#region extensions/codex/src/app-server/shell-dynamic-tools.ts
@@ -0,0 +1,50 @@
1
+ //#region extensions/codex/src/migration/provider.ts
2
+ function isMemoryOnlyMigration(ctx) {
3
+ return Boolean(ctx.itemKinds && ctx.itemKinds.length > 0 && ctx.itemKinds.every((kind) => kind === "memory"));
4
+ }
5
+ function isAuthOnlyMigration(ctx) {
6
+ return Boolean(ctx.itemKinds && ctx.itemKinds.length > 0 && ctx.itemKinds.every((kind) => kind === "auth"));
7
+ }
8
+ function buildCodexMigrationProvider(params = {}) {
9
+ return {
10
+ id: "codex",
11
+ label: "Codex",
12
+ description: "Import Codex memory and skills while keeping Codex native plugins and hooks explicit.",
13
+ supportedItemKinds: ["memory", "auth"],
14
+ async detect(ctx) {
15
+ const { discoverCodexSource, hasCodexSource } = await import("./source-Bjp4UQij.mjs").then((n) => n.a);
16
+ const source = await discoverCodexSource({
17
+ input: ctx.source,
18
+ memoryOnly: isMemoryOnlyMigration(ctx),
19
+ authOnly: isAuthOnlyMigration(ctx)
20
+ });
21
+ const found = isMemoryOnlyMigration(ctx) ? source.memoryFiles.length > 0 : isAuthOnlyMigration(ctx) ? Boolean(source.authPath) : hasCodexSource(source);
22
+ return {
23
+ found,
24
+ source: source.root,
25
+ label: "Codex",
26
+ confidence: found ? source.confidence : "low",
27
+ message: found ? "Codex state found." : "Codex state not found."
28
+ };
29
+ },
30
+ async plan(ctx) {
31
+ const { buildCodexMigrationPlan } = await import("./plan-xD7WKYTM.mjs");
32
+ return buildCodexMigrationPlan(ctx);
33
+ },
34
+ deferredApply: { retrySafe: true },
35
+ prepareApply(ctx) {
36
+ if (isMemoryOnlyMigration(ctx) || isAuthOnlyMigration(ctx)) return;
37
+ return import("./apply-CJ0ZfmBG.mjs").then(({ prepareTargetCodexAppServer }) => prepareTargetCodexAppServer(ctx));
38
+ },
39
+ async apply(ctx, plan) {
40
+ const { applyCodexMigrationPlan } = await import("./apply-CJ0ZfmBG.mjs");
41
+ return await applyCodexMigrationPlan({
42
+ ctx,
43
+ plan,
44
+ runtime: params.runtime
45
+ });
46
+ }
47
+ };
48
+ }
49
+ //#endregion
50
+ export { buildCodexMigrationProvider as t };