@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.
- package/assets/activity.svg +30 -0
- package/assets/icon.png +0 -0
- package/dist/.setup/account-usage-runtime-C2MOIvfq.mjs +75 -0
- package/dist/{apply-B6el6hdO.js → .setup/apply-CJ0ZfmBG.mjs} +12 -13
- package/dist/.setup/async-questions-DdhOCwGi.mjs +27 -0
- package/dist/{attempt-client-cleanup-D6cR54TV.js → .setup/attempt-client-cleanup-BpYKdTA0.mjs} +30 -211
- package/dist/{attempt-context-AO4DSjE0.js → .setup/attempt-context-VXVwTCfS.mjs} +6 -6
- package/dist/.setup/attempt-terminal-gZrxQ35N.mjs +5 -0
- package/dist/{auth-binding-Co2Vfcf_.js → .setup/auth-binding-DhLWa_7K.mjs} +2 -2
- package/dist/{auth-cache-key-Kq6oerr6.js → .setup/auth-cache-key-QirmgiCo.mjs} +3 -3
- package/dist/{auth-profile-CwzO4_RG.js → .setup/auth-profile-WqZtZfXN.mjs} +1 -1
- package/dist/.setup/binding-connection-Bm38niE8.mjs +50 -0
- package/dist/.setup/binding-connection.runtime-CnRMC0ta.mjs +48 -0
- package/dist/{bounded-turn-lRpmZHFv.js → .setup/bounded-turn-BtlZcivC.mjs} +19 -14
- package/dist/{build-state-6RL6qohz.js → .setup/build-state-Xx9ybZqa.mjs} +1 -1
- package/dist/{capabilities-BeqLPbtM.js → .setup/capabilities-_vXcZGSx.mjs} +1 -1
- package/dist/{client-BEKu4yDx.js → .setup/client-vXs2929Q.mjs} +355 -164
- package/dist/{command-dispatch-CisT9Jqq.js → .setup/command-dispatch-naHIZwwF.mjs} +3 -3
- package/dist/{command-formatters-DeTfrapr.js → .setup/command-formatters-CGEkdawF.mjs} +4 -3
- package/dist/{command-handlers-BfIsJEuA.js → .setup/command-handlers-BtAJEW1X.mjs} +812 -152
- package/dist/{command-rpc-BMqRQOFX.js → .setup/command-rpc-DHFpn4le.mjs} +37 -21
- package/dist/{compact-CGJZ2rlb.js → .setup/compact-C3i3qlzj.mjs} +28 -43
- package/dist/{config-JDfTI4VI.js → .setup/config-CedDWjM-.mjs} +5 -4
- package/dist/{config-options-jnIFvwxD.js → .setup/config-options-BsanJ8QG.mjs} +9 -421
- package/dist/{protocol-CAAcVIKF.js → .setup/config-parsing-CcB9iPoq.mjs} +9 -51
- package/dist/{config-runtime-BWf6JLWG.js → .setup/config-runtime-CeAhl_h4.mjs} +2 -2
- package/dist/.setup/config-security-BRQ2mgW9.mjs +465 -0
- package/dist/{config-utils-C57JiJrU.js → .setup/config-utils-DujwEnhg.mjs} +2 -4
- package/dist/{conversation-binding-CxOlHiix.js → .setup/conversation-binding-DhzrpTM6.mjs} +60 -47
- package/dist/{conversation-binding-data-BiodpIzq.js → .setup/conversation-binding-data-CrcyZk6O.mjs} +1 -1
- package/dist/{conversation-control-CUCrSIQI.js → .setup/conversation-control-DN53ns41.mjs} +17 -13
- package/dist/.setup/cyber-failover-DYwbmf1o.mjs +123 -0
- package/dist/.setup/cyber-failover-notice-e9G3J9-e.mjs +17 -0
- package/dist/{dynamic-tools-D-JBoaLt.js → .setup/dynamic-tools-D16lOp67.mjs} +168 -61
- package/dist/{effective-mcp-catalog-J_5Ep5Um.js → .setup/effective-mcp-catalog-K6kLCN8X.mjs} +3 -3
- package/dist/{ephemeral-turn-DSwzP8YY.js → .setup/ephemeral-turn-R1gA8Sn6.mjs} +4 -5
- package/dist/{event-projector-assistant-message-BmBM4qBV.js → .setup/event-projector-assistant-message-DNUR1s0A.mjs} +6 -3
- package/dist/.setup/event-projector-items-DyTQ_XqL.mjs +200 -0
- package/dist/{attempt-notifications--H8zXR5-.js → .setup/event-projector-usage-C7Ntzs-f.mjs} +102 -9
- package/dist/{harness-FR6eQgyO.js → .setup/harness-rxaaoN-o.mjs} +90 -19
- package/dist/.setup/inference-context-fulhZuz8.mjs +94 -0
- package/dist/.setup/inference-proxy-CC15HuSi.mjs +311 -0
- package/dist/{isolated-completion-DHBefrzg.js → .setup/isolated-completion-B6srt48J.mjs} +7 -7
- package/dist/{launch-args-RXQwn8zV.js → .setup/launch-args-DnMak49W.mjs} +22 -1
- package/dist/{managed-binary-DrjjRRUD.js → .setup/managed-binary-DP6Rib3P.mjs} +11 -2
- package/dist/{managed-thread-store-D1t5jh3G.js → .setup/managed-thread-store-BMqgThVL.mjs} +48 -14
- package/dist/{model-catalog-B_6M04Wo.js → .setup/model-catalog-DkvUuBey.mjs} +35 -10
- package/dist/{models-P9k2qAof.js → .setup/models-BDFgm_G-.mjs} +3 -3
- package/dist/.setup/native-auth-BLZGqFjw.mjs +57 -0
- package/dist/.setup/native-subagent-history-YXaL6dMd.mjs +135 -0
- package/dist/.setup/native-subagent-monitor-B1hxzIOy.mjs +5031 -0
- package/dist/.setup/native-subagent-task-ids-DsuOonKv.mjs +411 -0
- package/dist/{node-cli-sessions-rj0ysJwM.js → .setup/node-cli-sessions-Cl8b2ZF3.mjs} +1 -1
- package/dist/{node-exec-server.runtime-BY_ctYnT.js → .setup/node-exec-server.runtime-BaViBKNz.mjs} +5 -5
- package/dist/{plan-BMJdMOEF.js → .setup/plan-xD7WKYTM.mjs} +331 -79
- package/dist/{plugin-activation-BQK-f5sV.js → .setup/plugin-activation-r8nq5Jzp.mjs} +24 -19
- package/dist/{plugin-app-cache-key-CdSQzWyX.js → .setup/plugin-app-cache-key-BOxKP7db.mjs} +29 -25
- package/dist/{plugin-approval-roundtrip-DeW95wB5.js → .setup/plugin-approval-roundtrip-CjfzafAZ.mjs} +1 -1
- package/dist/{plugin-inventory-CoRCzWW4.js → .setup/plugin-inventory-DUle8DLz.mjs} +12 -8
- package/dist/{plugin-marketplace-discovery-3akBizzF.js → .setup/plugin-marketplace-discovery-P-Vndfqq.mjs} +18 -15
- package/dist/{plugin-metadata-cache-DgNfRAGA.js → .setup/plugin-metadata-cache-DsS5buNa.mjs} +33 -14
- package/dist/{provider-capabilities-W4tfK5Y5.js → .setup/provider-capabilities-B8J4Dy-O.mjs} +2 -2
- package/dist/.setup/provider-fFh_-VR3.mjs +50 -0
- package/dist/{rate-limits-Bqnx1N4z.js → .setup/rate-limits-DOEGYRNs.mjs} +90 -46
- package/dist/.setup/request-BioXJLYa.mjs +292 -0
- package/dist/.setup/run-attempt-lifecycle-B7JbY4-F.mjs +71 -0
- package/dist/{run-attempt-DwKds3DN.js → .setup/run-attempt-rlA07pUv.mjs} +644 -491
- package/dist/{runtime-artifact-T-NwqeSH.js → .setup/runtime-artifact-Dy38Z5iU.mjs} +2 -2
- package/dist/{sandbox-guard-BcT66fWy.js → .setup/sandbox-guard-BBP-RbTf.mjs} +4 -3
- package/dist/{session-binding-CKSepwIC.js → .setup/session-binding-_0W_fHRr.mjs} +45 -63
- package/dist/{session-binding-record-CaZjYwNS.js → .setup/session-binding-record-TH3xA0zj.mjs} +181 -3
- package/dist/.setup/session-binding-sidecars-CKYEcfNn.mjs +543 -0
- package/dist/{session-catalog-adoption-BKLtSrwi.js → .setup/session-catalog-adoption-CR_whkEW.mjs} +6 -6
- package/dist/{session-catalog-archive-D0i2pGj2.js → .setup/session-catalog-archive-CwZaPacf.mjs} +6 -6
- package/dist/.setup/session-catalog-events-jMcYfQyd.mjs +250 -0
- package/dist/.setup/session-catalog-fUdWDx-U.mjs +2464 -0
- package/dist/.setup/session-catalog-index-B141u15s.mjs +1070 -0
- package/dist/.setup/session-catalog-index-order-Cc5BzlQr.mjs +48 -0
- package/dist/.setup/session-catalog-index-state-BAuDztHN.mjs +180 -0
- package/dist/{session-catalog-parsing-CdD3JhdM.js → .setup/session-catalog-native-projection-ChV3cCtm.mjs} +213 -21
- package/dist/{session-catalog-node-adoption-BUuDYY8R.js → .setup/session-catalog-node-adoption-BVRsYOSh.mjs} +3 -3
- package/dist/{session-catalog-node-continue-CBtc4wkI.js → .setup/session-catalog-node-continue-Dowv8osw.mjs} +7 -7
- package/dist/.setup/session-catalog-projection-C1Bj9Jl-.mjs +414 -0
- package/dist/{session-cli-CbgaHh0f.js → .setup/session-cli-DIj-IE-E.mjs} +4 -4
- package/dist/{session-history-Cz-tOOYj.js → .setup/session-history-C--SrLI8.mjs} +10 -5
- package/dist/{session-history-import-DFN7sWRU.js → .setup/session-history-import-JHXT5Xfi.mjs} +4 -4
- package/dist/{session-history-read-cxPUxyVV.js → .setup/session-history-read-B3ZfSUbF.mjs} +2 -2
- package/dist/{session-history.worker-CNEvGaU5.js → .setup/session-history.worker-CpNj7H_P.mjs} +192 -89
- package/dist/{session-initialization-Jo86C60I.js → .setup/session-initialization-DH1z6fXn.mjs} +2 -2
- package/dist/{session-permission-policy-B22InTp_.js → .setup/session-permission-policy-DhurXY0l.mjs} +2 -2
- package/dist/{session-retirement-BSNG_mhf.js → .setup/session-retirement-CU87AOg9.mjs} +6 -6
- package/dist/{settled-turn-context-Du6gdUDd.js → .setup/settled-turn-context-fmwouT5I.mjs} +2 -2
- package/dist/{settled-turn-finalizer-BuLUrZl2.js → .setup/settled-turn-finalizer-CiY2bLFK.mjs} +10 -10
- package/dist/{shared-client-CVhez2Uo.js → .setup/shared-client-BpTtuLQ5.mjs} +495 -156
- package/dist/{side-question-DLbr2vUU.js → .setup/side-question-DSCZyoBD.mjs} +64 -47
- package/dist/{source-Da-h6f7e.js → .setup/source-Bjp4UQij.mjs} +15 -14
- package/dist/{thread-archive-guard-D1bP04Tf.js → .setup/thread-archive-guard-jmecf6OJ.mjs} +1 -1
- package/dist/.setup/thread-history-page-BTx-4xsg.mjs +83 -0
- package/dist/{thread-lifecycle-D1pzRwHB.js → .setup/thread-lifecycle-Cik28qWn.mjs} +330 -150
- package/dist/{thread-ownership-D6oASVRu.js → .setup/thread-ownership-skomxnIt.mjs} +4 -4
- package/dist/{thread-policy-D8kI7yAO.js → .setup/thread-policy-Cjs4B8xf.mjs} +3 -3
- package/dist/{thread-resume-T5cveyxA.js → .setup/thread-resume-BkNpj9Pz.mjs} +8 -5
- package/dist/.setup/timeout-DZF05XrR.mjs +63 -0
- package/dist/{session-catalog-home-id-D7-aLiNt.js → .setup/transcript-history-projection-DHNBDhCU.mjs} +73 -20
- package/dist/{transcript-mirror-t5TOccct.js → .setup/transcript-mirror-D4qp_leP.mjs} +15 -6
- package/dist/{transcript-mirror-attestation-DibE0krH.js → .setup/transcript-mirror-attestation-CzM-94NC.mjs} +4 -1
- package/dist/{transport-stdio-BGjHoYLr.js → .setup/transport-stdio-Cmx94Oiy.mjs} +149 -44
- package/dist/{upstream-session-fork-De-sLJ2r.js → .setup/upstream-session-fork-D3UKxgVD.mjs} +27 -26
- package/dist/{usage-CPPTmBvZ.js → .setup/usage-BOgBEKso.mjs} +4 -4
- package/dist/.setup/usage-limit-error-C0ow7DOc.mjs +166 -0
- package/dist/{version-omm6IPI3.js → .setup/version-CoqzXPgK.mjs} +1 -1
- package/dist/{web-search-provider.runtime-CSVgQL0w.js → .setup/web-search-provider.runtime-CTGuJt6i.mjs} +3 -3
- package/dist/api.js +28 -20
- package/dist/cli-metadata.js +1 -1
- package/dist/doctor-contract-api.js +8 -528
- package/dist/harness.js +1 -1
- package/dist/index.js +130 -135
- package/dist/media-understanding-provider.js +3 -3
- package/dist/migration-provider-api.js +2 -0
- package/dist/native-tool-policy.js +12 -0
- package/dist/provider-discovery.js +18 -0
- package/dist/session-history-worker-runtime.js +23 -5
- package/dist/session-history.worker.js +2 -2
- package/dist/web-search-contract-api.js +1 -1
- package/openclaw.plugin.json +354 -68
- package/package.json +11 -8
- package/dist/binding-connection-QqgcPCgk.js +0 -60
- package/dist/event-projector-usage-CIyrYYid.js +0 -102
- package/dist/native-subagent-monitor-BbCUKRwC.js +0 -3350
- package/dist/request-CGvGOpeR.js +0 -198
- package/dist/session-catalog-HaDcp7Sv.js +0 -1533
- package/dist/session-catalog-provenance-DkJHo735.js +0 -124
- package/dist/timeout-BVw8aaM1.js +0 -33
- package/dist/{auth-profile-selection-DFu9e167.js → .setup/auth-profile-selection-DFu9e167.mjs} +0 -0
- package/dist/{context-compaction-activity-CMla5FPJ.js → .setup/context-compaction-activity-CMla5FPJ.mjs} +0 -0
- package/dist/{elicitation-input-DPoK8F7w.js → .setup/elicitation-input-DPoK8F7w.mjs} +0 -0
- package/dist/{history-rejection-B4nOXNXF.js → .setup/history-rejection-B4nOXNXF.mjs} +0 -0
- package/dist/{image-payload-sanitizer-tupAr-2o.js → .setup/image-payload-sanitizer-tupAr-2o.mjs} +0 -0
- package/dist/{incognito-session-uhrBF6wJ.js → .setup/incognito-session-uhrBF6wJ.mjs} +0 -0
- package/dist/{local-runtime-attribution-B_2mnqhb.js → .setup/local-runtime-attribution-B_2mnqhb.mjs} +0 -0
- package/dist/{native-execution-policy-umd0tgh4.js → .setup/native-execution-policy-YBMHSzC4.mjs} +1 -1
- /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
- /package/dist/{session-binding-meta-B7aEMU7g.js → .setup/session-binding-meta-B7aEMU7g.mjs} +0 -0
- /package/dist/{session-upstream-marker-D15C9NHp.js → .setup/session-upstream-marker-D15C9NHp.mjs} +0 -0
- /package/dist/{upstream-prompt-provenance-LphB8slG.js → .setup/upstream-prompt-provenance-LphB8slG.mjs} +0 -0
- /package/dist/{web-search-provider.shared-BrZmlqyR.js → .setup/web-search-provider.shared-BrZmlqyR.mjs} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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 {
|
|
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 };
|
package/dist/{plugin-approval-roundtrip-DeW95wB5.js → .setup/plugin-approval-roundtrip-CjfzafAZ.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import "./config-
|
|
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
|
|
241
|
+
const appInfos = params.appInventory?.snapshot?.apps ?? [];
|
|
238
242
|
return detailApps.map((app) => {
|
|
239
|
-
const info =
|
|
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:
|
|
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
|
|
16
|
-
const
|
|
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
|
|
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 (!
|
|
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 &&
|
|
118
|
-
return
|
|
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,
|
|
134
|
+
return sanitized.replace(/\s+/g, " ").trim().slice(0, MAX_PLUGIN_METADATA_LENGTH);
|
|
132
135
|
}
|
|
133
136
|
//#endregion
|
|
134
|
-
export {
|
|
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 };
|
package/dist/{plugin-metadata-cache-DgNfRAGA.js → .setup/plugin-metadata-cache-DsS5buNa.mjs}
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { s as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { n as describeControlFailure } from "./capabilities-
|
|
6
|
-
import { i as requestCodexAppServerJson } from "./request-
|
|
7
|
-
import "./config-
|
|
8
|
-
import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-
|
|
9
|
-
import { $ as assertNotSymlink,
|
|
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:
|
|
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.");
|
package/dist/{provider-capabilities-W4tfK5Y5.js → .setup/provider-capabilities-B8J4Dy-O.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as releaseLeasedSharedCodexAppServerClient } from "./shared-client-
|
|
2
|
-
import {
|
|
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 };
|