dsh-codex-connect 0.1.0-alpha.4.20 → 0.1.0-alpha.4.21
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/INSTALL.md +28 -5
- package/README.i18n.yaml +2 -2
- package/README.md +28 -5
- package/docs/README.zh.md +28 -5
- package/docs/agent-notes/original-image-fork-access.md +7 -0
- package/lib/bin.js +368 -1
- package/lib/client.js +141 -31
- package/lib/index.js +1 -1
- package/lib/{src-B2d5HLN5.js → src-Cxq99TvF.js} +500 -107
- package/package.json +3 -2
package/lib/client.js
CHANGED
|
@@ -2869,12 +2869,18 @@ window.__ModuleLoader__.load({
|
|
|
2869
2869
|
unknownResult: "The image result could not be displayed safely.",
|
|
2870
2870
|
imageDetails: "Image details",
|
|
2871
2871
|
imageDetail: "{name}: {format} · {width} × {height} · {size}",
|
|
2872
|
+
originalImageDetail: "Original {name}: {format} · {width} × {height} · {size}",
|
|
2873
|
+
previewImageDetail: "Conversation preview: {format} · {width} × {height} · {size}",
|
|
2872
2874
|
download: "Download",
|
|
2873
2875
|
downloadNamed: "Download {name}",
|
|
2876
|
+
downloadOriginal: "Download original",
|
|
2877
|
+
downloadOriginalNamed: "Download original {name}",
|
|
2878
|
+
downloadPreview: "Download preview",
|
|
2879
|
+
downloadPreviewNamed: "Download preview {name}",
|
|
2874
2880
|
downloading: "Downloading…",
|
|
2875
2881
|
downloadFailed: "Download failed. Retry",
|
|
2876
2882
|
image: "Generated image",
|
|
2877
|
-
open: "Open
|
|
2883
|
+
open: "Open image preview",
|
|
2878
2884
|
openNamed: "Open {name}",
|
|
2879
2885
|
loading: "Loading image",
|
|
2880
2886
|
loadFailed: "Image could not be loaded. Retry",
|
|
@@ -3072,12 +3078,18 @@ window.__ModuleLoader__.load({
|
|
|
3072
3078
|
unknownResult: "无法安全显示这次图片结果。",
|
|
3073
3079
|
imageDetails: "图片详情",
|
|
3074
3080
|
imageDetail: "{name}:{format} · {width} × {height} · {size}",
|
|
3081
|
+
originalImageDetail: "原图 {name}:{format} · {width} × {height} · {size}",
|
|
3082
|
+
previewImageDetail: "对话预览:{format} · {width} × {height} · {size}",
|
|
3075
3083
|
download: "下载",
|
|
3076
3084
|
downloadNamed: "下载 {name}",
|
|
3085
|
+
downloadOriginal: "下载原图",
|
|
3086
|
+
downloadOriginalNamed: "下载原图 {name}",
|
|
3087
|
+
downloadPreview: "下载预览图",
|
|
3088
|
+
downloadPreviewNamed: "下载预览图 {name}",
|
|
3077
3089
|
downloading: "正在下载…",
|
|
3078
3090
|
downloadFailed: "下载失败,重试",
|
|
3079
3091
|
image: "生成的图片",
|
|
3080
|
-
open: "
|
|
3092
|
+
open: "打开图片预览",
|
|
3081
3093
|
openNamed: "打开 {name}",
|
|
3082
3094
|
loading: "正在加载图片",
|
|
3083
3095
|
loadFailed: "图片加载失败,重试",
|
|
@@ -3165,6 +3177,38 @@ window.__ModuleLoader__.load({
|
|
|
3165
3177
|
dismissUpdate: "稍后提醒"
|
|
3166
3178
|
};
|
|
3167
3179
|
//#endregion
|
|
3180
|
+
//#region src/image-assets-contract.ts
|
|
3181
|
+
/** Same-origin endpoint serving one session-owned original generated image. */
|
|
3182
|
+
const OPENAI_CODEX_ORIGINAL_IMAGE_PATH = "/plugins/dsh-codex-connect/images/original";
|
|
3183
|
+
/** Opaque identifier format for one plugin-owned original image. */
|
|
3184
|
+
const OPENAI_CODEX_IMAGE_ASSET_ID_PATTERN = /^img_[0-9a-f]{32}$/u;
|
|
3185
|
+
function positiveSafeInteger$1(value) {
|
|
3186
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
3187
|
+
}
|
|
3188
|
+
/** Decode session-log metadata without trusting an asset id, filename, or media type. */
|
|
3189
|
+
function decodeOpenAICodexOriginalImageRef(value) {
|
|
3190
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
3191
|
+
const candidate = value;
|
|
3192
|
+
if (typeof candidate.assetId !== "string" || !OPENAI_CODEX_IMAGE_ASSET_ID_PATTERN.test(candidate.assetId) || candidate.mediaType !== "image/png" && candidate.mediaType !== "image/jpeg" && candidate.mediaType !== "image/webp" || !positiveSafeInteger$1(candidate.width) || !positiveSafeInteger$1(candidate.height) || !positiveSafeInteger$1(candidate.bytes) || candidate.bytes > 50331648 || typeof candidate.name !== "string" || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(candidate.name) || typeof candidate.sha256 !== "string" || !/^[0-9a-f]{64}$/u.test(candidate.sha256)) return void 0;
|
|
3193
|
+
return {
|
|
3194
|
+
assetId: candidate.assetId,
|
|
3195
|
+
mediaType: candidate.mediaType,
|
|
3196
|
+
width: candidate.width,
|
|
3197
|
+
height: candidate.height,
|
|
3198
|
+
bytes: candidate.bytes,
|
|
3199
|
+
name: candidate.name,
|
|
3200
|
+
sha256: candidate.sha256
|
|
3201
|
+
};
|
|
3202
|
+
}
|
|
3203
|
+
/** Build a same-origin URL without allowing either opaque id to become a path segment. */
|
|
3204
|
+
function openAICodexOriginalImageUrl(sessionId, assetId) {
|
|
3205
|
+
const query = new URLSearchParams({
|
|
3206
|
+
sessionId,
|
|
3207
|
+
assetId
|
|
3208
|
+
});
|
|
3209
|
+
return `${OPENAI_CODEX_ORIGINAL_IMAGE_PATH}?${query.toString()}`;
|
|
3210
|
+
}
|
|
3211
|
+
//#endregion
|
|
3168
3212
|
//#region src/image-presentation.ts
|
|
3169
3213
|
/** Stable metadata marker for generated image result views. */
|
|
3170
3214
|
const IMAGE_PRESENTATION_KIND = "codex-connect-images";
|
|
@@ -3192,10 +3236,32 @@ window.__ModuleLoader__.load({
|
|
|
3192
3236
|
if (typeof value !== "object" || value === null) return void 0;
|
|
3193
3237
|
const candidate = value;
|
|
3194
3238
|
if (candidate.kind !== "codex-connect-images" || typeof candidate.prompt !== "string" || candidate.prompt.length < 1 || candidate.prompt.length > 32e3 || !Array.isArray(candidate.images) || candidate.images.length < 1 || candidate.images.length > 4) return void 0;
|
|
3195
|
-
|
|
3196
|
-
|
|
3239
|
+
if (candidate.schemaVersion === void 0) {
|
|
3240
|
+
const previews = candidate.images.map(imageRef);
|
|
3241
|
+
if (previews.some((image) => image === void 0)) return void 0;
|
|
3242
|
+
return {
|
|
3243
|
+
kind: IMAGE_PRESENTATION_KIND,
|
|
3244
|
+
schemaVersion: 1,
|
|
3245
|
+
prompt: candidate.prompt,
|
|
3246
|
+
images: previews.map((preview) => ({ preview }))
|
|
3247
|
+
};
|
|
3248
|
+
}
|
|
3249
|
+
if (candidate.schemaVersion !== 1) return void 0;
|
|
3250
|
+
const images = [];
|
|
3251
|
+
for (const value of candidate.images) {
|
|
3252
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
3253
|
+
const entry = value;
|
|
3254
|
+
const preview = imageRef(entry.preview);
|
|
3255
|
+
const original = decodeOpenAICodexOriginalImageRef(entry.original);
|
|
3256
|
+
if (preview === void 0 || original === void 0) return void 0;
|
|
3257
|
+
images.push({
|
|
3258
|
+
preview,
|
|
3259
|
+
original
|
|
3260
|
+
});
|
|
3261
|
+
}
|
|
3197
3262
|
return {
|
|
3198
3263
|
kind: IMAGE_PRESENTATION_KIND,
|
|
3264
|
+
schemaVersion: 1,
|
|
3199
3265
|
prompt: candidate.prompt,
|
|
3200
3266
|
images
|
|
3201
3267
|
};
|
|
@@ -3791,7 +3857,19 @@ window.__ModuleLoader__.load({
|
|
|
3791
3857
|
children: t("actionFailed")
|
|
3792
3858
|
}) : null;
|
|
3793
3859
|
}
|
|
3794
|
-
function
|
|
3860
|
+
function triggerDownload(url, name) {
|
|
3861
|
+
const anchor = document.createElement("a");
|
|
3862
|
+
anchor.href = url;
|
|
3863
|
+
anchor.download = name;
|
|
3864
|
+
anchor.rel = "noopener";
|
|
3865
|
+
document.body.append(anchor);
|
|
3866
|
+
try {
|
|
3867
|
+
anchor.click();
|
|
3868
|
+
} finally {
|
|
3869
|
+
anchor.remove();
|
|
3870
|
+
}
|
|
3871
|
+
}
|
|
3872
|
+
function DownloadButton({ label, onDownload, t }) {
|
|
3795
3873
|
const [state, setState] = (0, react.useState)("idle");
|
|
3796
3874
|
const alive = (0, react.useRef)(true);
|
|
3797
3875
|
(0, react.useEffect)(() => () => {
|
|
@@ -3801,17 +3879,7 @@ window.__ModuleLoader__.load({
|
|
|
3801
3879
|
if (state === "pending") return;
|
|
3802
3880
|
setState("pending");
|
|
3803
3881
|
try {
|
|
3804
|
-
|
|
3805
|
-
const anchor = document.createElement("a");
|
|
3806
|
-
anchor.href = url;
|
|
3807
|
-
anchor.download = image.name ?? t("image");
|
|
3808
|
-
anchor.rel = "noopener";
|
|
3809
|
-
document.body.append(anchor);
|
|
3810
|
-
try {
|
|
3811
|
-
anchor.click();
|
|
3812
|
-
} finally {
|
|
3813
|
-
anchor.remove();
|
|
3814
|
-
}
|
|
3882
|
+
await onDownload();
|
|
3815
3883
|
if (alive.current) setState("idle");
|
|
3816
3884
|
} catch {
|
|
3817
3885
|
if (alive.current) setState("failed");
|
|
@@ -3835,6 +3903,22 @@ window.__ModuleLoader__.load({
|
|
|
3835
3903
|
children: status
|
|
3836
3904
|
})] });
|
|
3837
3905
|
}
|
|
3906
|
+
async function downloadOriginal(sessionId, original) {
|
|
3907
|
+
const response = await fetch(openAICodexOriginalImageUrl(sessionId, original.assetId), {
|
|
3908
|
+
method: "GET",
|
|
3909
|
+
headers: { accept: original.mediaType },
|
|
3910
|
+
credentials: "same-origin"
|
|
3911
|
+
});
|
|
3912
|
+
if (!response.ok) throw new Error("Original image download failed");
|
|
3913
|
+
const blob = await response.blob();
|
|
3914
|
+
if (blob.size !== original.bytes) throw new Error("Original image download was incomplete");
|
|
3915
|
+
const url = URL.createObjectURL(blob);
|
|
3916
|
+
try {
|
|
3917
|
+
triggerDownload(url, original.name);
|
|
3918
|
+
} finally {
|
|
3919
|
+
URL.revokeObjectURL(url);
|
|
3920
|
+
}
|
|
3921
|
+
}
|
|
3838
3922
|
function PromptPanel({ prompt, t }) {
|
|
3839
3923
|
const [copyState, setCopyState] = (0, react.useState)("idle");
|
|
3840
3924
|
const [hovered, setHovered] = (0, react.useState)(false);
|
|
@@ -4151,7 +4235,7 @@ window.__ModuleLoader__.load({
|
|
|
4151
4235
|
style: header,
|
|
4152
4236
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("completed") })
|
|
4153
4237
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodexImageGallery, {
|
|
4154
|
-
images: decoded.images.map((
|
|
4238
|
+
images: decoded.images.map((image) => ({ attachment: image.preview })),
|
|
4155
4239
|
load,
|
|
4156
4240
|
align: "start",
|
|
4157
4241
|
labels: galleryLabels
|
|
@@ -4196,12 +4280,21 @@ window.__ModuleLoader__.load({
|
|
|
4196
4280
|
flexWrap: "wrap",
|
|
4197
4281
|
gap: 8
|
|
4198
4282
|
},
|
|
4199
|
-
children: decoded.images.
|
|
4200
|
-
image
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
|
|
4283
|
+
children: decoded.images.flatMap((image, index) => {
|
|
4284
|
+
const suffix = image.preview.name ?? String(index + 1);
|
|
4285
|
+
const exactOriginal = image.original;
|
|
4286
|
+
return [...exactOriginal === void 0 ? [] : [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DownloadButton, {
|
|
4287
|
+
onDownload: () => downloadOriginal(sessionId, exactOriginal),
|
|
4288
|
+
t,
|
|
4289
|
+
label: decoded.images.length === 1 ? t("downloadOriginal") : t("downloadOriginalNamed", { name: exactOriginal.name })
|
|
4290
|
+
}, `${image.preview.attachmentId}:original`)], /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DownloadButton, {
|
|
4291
|
+
onDownload: async () => {
|
|
4292
|
+
triggerDownload(await load(image.preview), image.preview.name ?? t("image"));
|
|
4293
|
+
},
|
|
4294
|
+
t,
|
|
4295
|
+
label: image.original === void 0 ? decoded.images.length === 1 ? t("download") : t("downloadNamed", { name: suffix }) : decoded.images.length === 1 ? t("downloadPreview") : t("downloadPreviewNamed", { name: suffix })
|
|
4296
|
+
}, `${image.preview.attachmentId}:preview`)];
|
|
4297
|
+
})
|
|
4205
4298
|
}),
|
|
4206
4299
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
|
|
4207
4300
|
style: {
|
|
@@ -4217,20 +4310,37 @@ window.__ModuleLoader__.load({
|
|
|
4217
4310
|
gap: 4,
|
|
4218
4311
|
marginTop: 6
|
|
4219
4312
|
},
|
|
4220
|
-
children: decoded.images.
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
|
|
4224
|
-
|
|
4225
|
-
|
|
4226
|
-
|
|
4313
|
+
children: decoded.images.flatMap((image, index) => {
|
|
4314
|
+
const preview = image.preview;
|
|
4315
|
+
const original = image.original;
|
|
4316
|
+
const name = preview.name ?? String(index + 1);
|
|
4317
|
+
if (original === void 0) return [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("imageDetail", {
|
|
4318
|
+
name,
|
|
4319
|
+
format: formatMediaType(preview.mediaType),
|
|
4320
|
+
width: preview.width,
|
|
4321
|
+
height: preview.height,
|
|
4322
|
+
size: formatBytes(preview.bytes)
|
|
4323
|
+
}) }, preview.attachmentId)];
|
|
4324
|
+
return [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("originalImageDetail", {
|
|
4325
|
+
name: original.name,
|
|
4326
|
+
format: formatMediaType(original.mediaType),
|
|
4327
|
+
width: original.width,
|
|
4328
|
+
height: original.height,
|
|
4329
|
+
size: formatBytes(original.bytes)
|
|
4330
|
+
}) }, `${preview.attachmentId}:original`), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("previewImageDetail", {
|
|
4331
|
+
format: formatMediaType(preview.mediaType),
|
|
4332
|
+
width: preview.width,
|
|
4333
|
+
height: preview.height,
|
|
4334
|
+
size: formatBytes(preview.bytes)
|
|
4335
|
+
}) }, `${preview.attachmentId}:preview`)];
|
|
4336
|
+
})
|
|
4227
4337
|
})] })
|
|
4228
4338
|
] })
|
|
4229
4339
|
});
|
|
4230
4340
|
}
|
|
4231
4341
|
//#endregion
|
|
4232
4342
|
//#region src/version.ts
|
|
4233
|
-
const CODEX_CONNECT_VERSION = "0.1.0-alpha.4.
|
|
4343
|
+
const CODEX_CONNECT_VERSION = "0.1.0-alpha.4.21";
|
|
4234
4344
|
//#endregion
|
|
4235
4345
|
//#region src/client/index.tsx
|
|
4236
4346
|
/** Stable browser-plugin name. */
|
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as
|
|
1
|
+
import { $ as OPENAI_CODEX_PROXY_PROBE_TIMEOUT_MS, A as openAICodexConflictMessage, At as OPENAI_CODEX_AUTH_FILENAME, B as DSH_PLUGIN_API_PACKAGES, C as OpenAICodexTransport, Ct as OPENAI_CODEX_USAGE_URL, D as IMAGE_GENERATE_TOOL_NAME, Dt as logoutOpenAICodex, E as VIEW_IMAGE_TOOL_NAME, Et as loginOpenAICodex, F as parseOpenAICodexUpdateResult, G as assessCompatibility, H as SUPPORTED_DSH_PLUGIN_API_VERSION, I as parseOpenAICodexVersion, K as detectCompatibility, L as COMPATIBILITY_CONTRACT, M as OPENAI_CODEX_UPDATE_PATH, Mt as OpenAICodexCredentialStore, N as checkForOpenAICodexUpdate, Nt as openAICodexAuthPath, O as assertNoOpenAICodexProviderConflict, Ot as openAICodexAuthStatus, P as compareOpenAICodexVersions, Q as OPENAI_CODEX_PROXY_CANDIDATE_LIMIT, R as COMPATIBILITY_PACKAGES, S as OPENAI_CODEX_TRANSPORT_SERVICE, T as isOpenAICodexTransportError, Tt as readOpenAICodexRateLimits, U as SUPPORTED_NODE_RANGE, V as PI_AI_PACKAGE, W as SUPPORTED_PI_AI_VERSION, X as OPENAI_CODEX_PROXY_TEST_PATH, Y as OPENAI_CODEX_PROXY_DETECT_PATH, Z as OPENAI_CODEX_LOCAL_PROXY_CANDIDATES, _ as OPENAI_CODEX_IMAGE_MAX_RESPONSE_BYTES, _t as FastModeRegistry, a as name, at as DEFAULT_OPENAI_CODEX_SEARCH_CONTEXT_SIZE, b as OPENAI_CODEX_TRANSPORT_API_VERSION, bt as isFastModeSessionId, c as migrateOpenAICodexSearchHistory, ct as DEFAULT_OPENAI_CODEX_SEARCH_MODEL, d as OPENAI_CODEX_SEARCH_URL, dt as decodeOpenAICodexSettings, et as OPENAI_CODEX_PROXY_PROBE_URL, f as OpenAICodexSearchProvider, ft as isValidOpenAICodexProxyUrl, g as OPENAI_CODEX_IMAGE_MAX_ERROR_BYTES, gt as OPENAI_CODEX_FAST_MODE_PATH, h as OPENAI_CODEX_IMAGE_MAX_COUNT, ht as resolveOpenAICodexSettings, i as inject, it as DEFAULT_OPENAI_CODEX_PROXY_URL, jt as OPENAI_CODEX_PROVIDER, k as diagnoseOpenAICodex, l as OPENAI_CODEX_BASE_URL, lt as DEFAULT_OPENAI_CODEX_SETTINGS, m as OPENAI_CODEX_IMAGE_GENERATION_URL, mt as resolveOpenAICodexProxyUrl, n as OPENAI_CODEX_SETTINGS_NS, nt as detectOpenAICodexProxies, o as OPENAI_CODEX_HISTORY_BACKUP_SUFFIX, ot as DEFAULT_OPENAI_CODEX_SEARCH_MAX_OUTPUT_TOKENS, p as mapOpenAICodexSearchResponse, q as evaluateCompatibility, r as apply, rt as listOpenAICodexProxyCandidates, s as OPENAI_CODEX_SEARCH_MODEL_REQUEST_EVENT, st as DEFAULT_OPENAI_CODEX_SEARCH_MODE, t as Config, tt as OpenAICodexProxyManager, u as OPENAI_CODEX_SEARCH_PROVIDER, ut as OPENAI_CODEX_SETTINGS_NAMESPACE, v as OPENAI_CODEX_IMAGE_PROMPT_MAX_LENGTH, vt as OPENAI_CODEX_FAST_MODE_MAX_SESSIONS, w as OpenAICodexTransportError, wt as parseOpenAICodexUsage, x as OPENAI_CODEX_TRANSPORT_ERROR_CODES, y as OPENAI_CODEX_IMAGE_REQUEST_TIMEOUT_MS, yt as OPENAI_CODEX_FAST_MODE_MAX_SESSION_ID_LENGTH, z as COMPATIBILITY_SCHEMA_VERSION } from "./src-Cxq99TvF.js";
|
|
2
2
|
export { COMPATIBILITY_CONTRACT, COMPATIBILITY_PACKAGES, COMPATIBILITY_SCHEMA_VERSION, Config, DEFAULT_OPENAI_CODEX_PROXY_URL, DEFAULT_OPENAI_CODEX_SEARCH_CONTEXT_SIZE, DEFAULT_OPENAI_CODEX_SEARCH_MAX_OUTPUT_TOKENS, DEFAULT_OPENAI_CODEX_SEARCH_MODE, DEFAULT_OPENAI_CODEX_SEARCH_MODEL, DEFAULT_OPENAI_CODEX_SETTINGS, DSH_PLUGIN_API_PACKAGES, FastModeRegistry, FastModeRegistry as OpenAICodexFastModeRegistry, IMAGE_GENERATE_TOOL_NAME, OPENAI_CODEX_AUTH_FILENAME, OPENAI_CODEX_BASE_URL, OPENAI_CODEX_FAST_MODE_MAX_SESSIONS, OPENAI_CODEX_FAST_MODE_MAX_SESSION_ID_LENGTH, OPENAI_CODEX_FAST_MODE_PATH, OPENAI_CODEX_HISTORY_BACKUP_SUFFIX, OPENAI_CODEX_IMAGE_GENERATION_URL, OPENAI_CODEX_IMAGE_MAX_COUNT, OPENAI_CODEX_IMAGE_MAX_ERROR_BYTES, OPENAI_CODEX_IMAGE_MAX_RESPONSE_BYTES, OPENAI_CODEX_IMAGE_PROMPT_MAX_LENGTH, OPENAI_CODEX_IMAGE_REQUEST_TIMEOUT_MS, OPENAI_CODEX_LOCAL_PROXY_CANDIDATES, OPENAI_CODEX_PROVIDER, OPENAI_CODEX_PROXY_CANDIDATE_LIMIT, OPENAI_CODEX_PROXY_DETECT_PATH, OPENAI_CODEX_PROXY_PROBE_TIMEOUT_MS, OPENAI_CODEX_PROXY_PROBE_URL, OPENAI_CODEX_PROXY_TEST_PATH, OPENAI_CODEX_SEARCH_MODEL_REQUEST_EVENT, OPENAI_CODEX_SEARCH_PROVIDER, OPENAI_CODEX_SEARCH_URL, OPENAI_CODEX_SETTINGS_NAMESPACE, OPENAI_CODEX_SETTINGS_NS, OPENAI_CODEX_TRANSPORT_API_VERSION, OPENAI_CODEX_TRANSPORT_ERROR_CODES, OPENAI_CODEX_TRANSPORT_SERVICE, OPENAI_CODEX_UPDATE_PATH, OPENAI_CODEX_USAGE_URL, OpenAICodexCredentialStore, OpenAICodexProxyManager, OpenAICodexSearchProvider, OpenAICodexTransport, OpenAICodexTransportError, PI_AI_PACKAGE, SUPPORTED_DSH_PLUGIN_API_VERSION, SUPPORTED_NODE_RANGE, SUPPORTED_PI_AI_VERSION, VIEW_IMAGE_TOOL_NAME, apply, assertNoOpenAICodexProviderConflict, assessCompatibility, checkForOpenAICodexUpdate, compareOpenAICodexVersions, decodeOpenAICodexSettings, detectCompatibility, detectOpenAICodexProxies, diagnoseOpenAICodex, evaluateCompatibility, inject, isFastModeSessionId, isOpenAICodexTransportError, isValidOpenAICodexProxyUrl, listOpenAICodexProxyCandidates, loginOpenAICodex, logoutOpenAICodex, mapOpenAICodexSearchResponse, migrateOpenAICodexSearchHistory, name, openAICodexAuthPath, openAICodexAuthStatus, openAICodexConflictMessage, parseOpenAICodexUpdateResult, parseOpenAICodexUsage, parseOpenAICodexVersion, readOpenAICodexRateLimits, resolveOpenAICodexProxyUrl, resolveOpenAICodexSettings };
|