dsh-codex-connect 0.1.0-alpha.4.45 → 0.1.0-alpha.4.46
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 +4 -4
- package/README.i18n.yaml +2 -2
- package/README.md +3 -3
- package/docs/README.zh.md +3 -3
- package/docs/agent-notes/windows-proxy-compressed-fetch.md +7 -0
- package/docs/release-notes/alpha-4.46.md +21 -0
- package/lib/bin.js +1 -1
- package/lib/client.js +1 -1
- package/lib/index.js +37 -1
- package/package.json +1 -1
package/INSTALL.md
CHANGED
|
@@ -4,7 +4,7 @@ Published Alpha 4.43 is verified with the exact DSH `0.1.7-rc.1` model-runtime p
|
|
|
4
4
|
|
|
5
5
|
Install `dsh-codex-connect` into one requested DeepSeek Harness profile without changing its current default model, search route, global configuration, or OAuth state.
|
|
6
6
|
|
|
7
|
-
Channel snapshot on 2026-09-24: npm `alpha`
|
|
7
|
+
Channel snapshot on 2026-09-24: npm `alpha` and `latest` both point to `0.1.0-alpha.4.45`. Use the exact-version command for the installed DSH version. Publishing an Alpha and promoting the default installation channel are separate actions.
|
|
8
8
|
|
|
9
9
|
## Safety requirements
|
|
10
10
|
|
|
@@ -30,7 +30,7 @@ Check `dsh --version` before changing the requested profile. Use `dsh --help` to
|
|
|
30
30
|
| `0.1.5-alpha.1` | `0.1.0-alpha.4.41` |
|
|
31
31
|
| `0.1.5-rc.1` | `0.1.0-alpha.4.41` |
|
|
32
32
|
| `0.1.5-rc.2` | `0.1.0-alpha.4.41` |
|
|
33
|
-
| `0.1.7-rc.1` | `0.1.0-alpha.4.
|
|
33
|
+
| `0.1.7-rc.1` | `0.1.0-alpha.4.45` |
|
|
34
34
|
|
|
35
35
|
If your exact DSH version is unknown or not listed, preserve the installed host, report that the combination is unverified, and verify it before making installation changes. A missing record does not prove incompatibility, and the catalog's latest verified DSH version is not the latest upstream release. Do not recommend upgrading or downgrading DSH merely to match a row. Investigate any specific failure and seek verification of the installed combination. Do not blindly install `dsh-codex-connect@alpha`: `alpha` is a moving tag, not a compatibility guarantee. Do not infer support for newer DSH versions from these rows.
|
|
36
36
|
|
|
@@ -76,7 +76,7 @@ Alpha 4.33 omits the `modelErrors` profile field required by RC model packages,
|
|
|
76
76
|
For the exact DSH `0.1.7-rc.1` pairing, use Alpha 4.43:
|
|
77
77
|
|
|
78
78
|
```sh
|
|
79
|
-
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.
|
|
79
|
+
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.45
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
For DSH `0.1.2-alpha.5`, use Alpha 4.25:
|
|
@@ -85,7 +85,7 @@ Alpha 4.33 omits the `modelErrors` profile field required by RC model packages,
|
|
|
85
85
|
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.25
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
If npm is unavailable after the matching GitHub prerelease is created, use `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.21'` only for the DSH `0.1.1-rc.2` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.23'` only for the DSH `0.1.2-alpha.2` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.25'` only for the DSH `0.1.2-alpha.5` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.41'` only for the DSH `0.1.2-rc.1`, `0.1.5-alpha.1`, `0.1.5-rc.1`, and `0.1.5-rc.2` combinations, or `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.
|
|
88
|
+
If npm is unavailable after the matching GitHub prerelease is created, use `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.21'` only for the DSH `0.1.1-rc.2` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.23'` only for the DSH `0.1.2-alpha.2` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.25'` only for the DSH `0.1.2-alpha.5` combination, `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.41'` only for the DSH `0.1.2-rc.1`, `0.1.5-alpha.1`, `0.1.5-rc.1`, and `0.1.5-rc.2` combinations, or `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.45'` only for DSH `0.1.7-rc.1`.
|
|
89
89
|
|
|
90
90
|
3. Run `dsh web --help` once to compose the installed profile without starting the server. DSH `0.1.2-rc.1` prepares profile plugin dependency fallback during this step.
|
|
91
91
|
4. Run `dsh --profile web --dump-config` and require exactly one `llm-openai-codex` row loading `dsh-codex-connect`.
|
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# git hash-object README.md docs/README.zh.md
|
|
5
|
-
README.md:
|
|
6
|
-
docs/README.zh.md:
|
|
5
|
+
README.md: 3dd09c3af313022796d95809cad3b53130eb6a1a
|
|
6
|
+
docs/README.zh.md: 3c5b9bf71227a795131522821424574b72d24088
|
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ This guide describes the published pairing below. Check `dsh --version` first an
|
|
|
16
16
|
|
|
17
17
|
| Requirement | Verified pairing |
|
|
18
18
|
|---|---|
|
|
19
|
-
| Codex Connect | `0.1.0-alpha.4.
|
|
19
|
+
| Codex Connect | `0.1.0-alpha.4.45` |
|
|
20
20
|
| DeepSeek Harness | `0.1.7-rc.1` |
|
|
21
21
|
| Node.js | `^22.19.0 \|\| >=24.0.0` |
|
|
22
22
|
| Account | ChatGPT OAuth with access to the requested Codex model; availability is decided by OpenAI |
|
|
@@ -28,7 +28,7 @@ On stock DSH `0.1.7-rc.1`, ordinary Composer works, but Task controls remain pau
|
|
|
28
28
|
### 1. Install
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
|
-
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.
|
|
31
|
+
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.45
|
|
32
32
|
dsh web
|
|
33
33
|
```
|
|
34
34
|
|
|
@@ -75,7 +75,7 @@ All options below are off on a fresh installation. Edit them in **Settings → P
|
|
|
75
75
|
|
|
76
76
|
| Capability | Enable with | Important behavior |
|
|
77
77
|
|---|---|---|
|
|
78
|
-
| Proxy | `enableProxy` | Credential-free HTTP(S), scoped to this plugin's traffic. A failed proxy request does not silently retry directly. |
|
|
78
|
+
| Proxy | `enableProxy` | Credential-free HTTP(S), scoped to this plugin's traffic, including compressed OAuth and quota responses. Unrelated Fetch calls retain the host's original transport. A failed proxy request does not silently retry directly. |
|
|
79
79
|
| Codex Search | `enableSearch` | Selects Codex for the entire profile's search route; disabling restores the previously active route. |
|
|
80
80
|
| Luna Reserve | `enableReserveFallback` | Uses the hidden Reserve route only when the backend explicitly authorizes it for the captured account; never changes global defaults or retries a generic `429`. |
|
|
81
81
|
| Image viewing | `enableImageTool` | Adds `view_image` to vision-capable models for local files and validated public HTTP(S) images. |
|
package/docs/README.zh.md
CHANGED
|
@@ -16,7 +16,7 @@ Codex Connect 为标准 Harness agent loop 添加 `openai-codex` 模型提供方
|
|
|
16
16
|
|
|
17
17
|
| 要求 | 已验证组合 |
|
|
18
18
|
|---|---|
|
|
19
|
-
| Codex Connect | `0.1.0-alpha.4.
|
|
19
|
+
| Codex Connect | `0.1.0-alpha.4.45` |
|
|
20
20
|
| DeepSeek Harness | `0.1.7-rc.1` |
|
|
21
21
|
| Node.js | `^22.19.0 \|\| >=24.0.0` |
|
|
22
22
|
| 账户 | 通过 ChatGPT OAuth 使用所请求的 Codex 模型;可用性由 OpenAI 决定 |
|
|
@@ -28,7 +28,7 @@ Codex Connect 为标准 Harness agent loop 添加 `openai-codex` 模型提供方
|
|
|
28
28
|
### 1. 安装
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
|
-
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.
|
|
31
|
+
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.45
|
|
32
32
|
dsh web
|
|
33
33
|
```
|
|
34
34
|
|
|
@@ -75,7 +75,7 @@ Alpha 4.40 还会在旧提供方目录缺失时补充 `gpt-6-sol` 和 `gpt-6-lun
|
|
|
75
75
|
|
|
76
76
|
| 能力 | 启用字段 | 重要行为 |
|
|
77
77
|
|---|---|---|
|
|
78
|
-
| 代理 | `enableProxy` | 不带凭据的 HTTP(S)
|
|
78
|
+
| 代理 | `enableProxy` | 不带凭据的 HTTP(S),只作用于本插件流量,包括压缩的 OAuth 和额度响应;无关的 Fetch 请求仍使用宿主原来的传输方式。代理请求失败不会静默改走直连。 |
|
|
79
79
|
| Codex 搜索 | `enableSearch` | 将整个 profile 的搜索路由切换为 Codex;关闭后恢复之前的路由。 |
|
|
80
80
|
| Luna Reserve | `enableReserveFallback` | 只在服务端为当前已固定账户明确授权时使用隐藏的 Reserve 路由;不修改全局默认模型,也不因普通 `429` 重试。 |
|
|
81
81
|
| 图片查看 | `enableImageTool` | 为视觉模型添加 `view_image`,读取本地文件和经过校验的公网 HTTP(S) 图片。 |
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Keep compressed Fetch responses decodable through the Codex proxy
|
|
2
|
+
|
|
3
|
+
On Windows with Node 24, the plugin's npm Undici 8 `ProxyAgent` can serve Node's built-in Fetch through its legacy v1 dispatcher bridge, but the returned response may lose `content-encoding` while retaining gzip bytes. The resulting HTTP 200 fails JSON parsing during OAuth exchange or quota refresh. A credential-free Windows probe reproduced `content-encoding: null` and the gzip magic bytes with the published Alpha 4.45 package. The equivalent macOS probe succeeded; local macOS tests alone do not prove the Windows path.
|
|
4
|
+
|
|
5
|
+
The proxy manager now routes Fetch calls made inside its `AsyncLocalStorage` scope through the same npm Undici runtime that owns its proxy agent. Outside that scope, the original host Fetch remains the fallback. The wrapper is installed only while a proxy manager owns it, follows a third-party Fetch replacement on the next acquisition, and restores the previous function on final disposal if still owned. Native `Request` instances are converted into their URL and request options because npm Undici's separate `Request` class does not accept them directly. The existing legacy dispatcher bridge remains for other Node HTTP clients; this fix does not alter direct requests or retry a failed proxy request without the proxy.
|
|
6
|
+
|
|
7
|
+
The keyless test serves gzip JSON through a local CONNECT proxy, checks both URL and native `Request` inputs, confirms the proxy was used, and checks Fetch restoration. PR CI runs that test on Windows Node 24.15.0 in addition to Ubuntu. It does not use real OAuth credentials or prove a browser login until the patched plugin is installed and exercised there.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Codex Connect Alpha 4.46 — Windows proxy response decoding
|
|
2
|
+
|
|
3
|
+
## English
|
|
4
|
+
|
|
5
|
+
When the optional Codex proxy is enabled on Windows, Alpha 4.45 can receive a successful compressed response but expose its gzip bytes without the encoding header. OAuth token exchange or quota refresh can then fail while parsing JSON. Alpha 4.46 routes Fetch calls inside the plugin's proxy scope through the same Undici runtime as its proxy agent; unrelated Fetch calls keep the host's original transport. A failed proxy request still does not retry directly.
|
|
6
|
+
|
|
7
|
+
This release targets DeepSeek Harness `0.1.7-rc.1`. The published 4.45 failure was reproduced without credentials on a Windows PC. The fix passed keyless Windows CI, including compressed JSON and proxy ownership checks. Real Chrome OAuth and quota refresh with the patched package on that PC remain unverified. This release does not address the separate, still-unconfirmed message-source report in Issue #261. Publishing to `alpha` does not promote npm `latest` or install the plugin in an existing profile.
|
|
8
|
+
|
|
9
|
+
After npm publication is independently confirmed, install this exact version with:
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.46
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 中文
|
|
16
|
+
|
|
17
|
+
在 Windows 上启用可选的 Codex 代理时,Alpha 4.45 可能收到成功的压缩响应,却丢失编码标头、把 gzip 原始字节交给调用方,导致 OAuth 换取凭据或额度刷新在解析 JSON 时失败。Alpha 4.46 让插件代理作用域内的 Fetch 使用与代理组件相同的 Undici 运行时;无关的 Fetch 仍使用宿主原有传输方式。代理请求失败时仍不会静默改走直连。
|
|
18
|
+
|
|
19
|
+
本版针对 DeepSeek Harness `0.1.7-rc.1`。已在 Windows PC 上不使用凭据复现发布版 4.45 的故障;修复通过了无凭据的 Windows CI,包括压缩 JSON 和代理所有权测试。该 PC 上安装修复包后的真实 Chrome OAuth 与额度刷新仍未验收。本版不处理 Issue #261 尚未确认的消息来源报告。发布到 `alpha` 不会同步提升 npm `latest`,也不会自动安装到现有 profile。
|
|
20
|
+
|
|
21
|
+
独立确认 npm 发布后,可使用上面的精确版本命令安装。
|
package/lib/bin.js
CHANGED
|
@@ -765,7 +765,7 @@ async function detectCompatibility(options = {}) {
|
|
|
765
765
|
}
|
|
766
766
|
//#endregion
|
|
767
767
|
//#region src/version.ts
|
|
768
|
-
const CODEX_CONNECT_VERSION = "0.1.0-alpha.4.
|
|
768
|
+
const CODEX_CONNECT_VERSION = "0.1.0-alpha.4.46";
|
|
769
769
|
//#endregion
|
|
770
770
|
//#region src/doctor.ts
|
|
771
771
|
/** Secret-free diagnostics and duplicate-provider guidance. */
|
package/lib/client.js
CHANGED
|
@@ -6526,7 +6526,7 @@ window.__ModuleLoader__.load({
|
|
|
6526
6526
|
}
|
|
6527
6527
|
//#endregion
|
|
6528
6528
|
//#region src/version.ts
|
|
6529
|
-
const CODEX_CONNECT_VERSION = "0.1.0-alpha.4.
|
|
6529
|
+
const CODEX_CONNECT_VERSION = "0.1.0-alpha.4.46";
|
|
6530
6530
|
//#endregion
|
|
6531
6531
|
//#region src/client/OpenAICodexModelsCard.tsx
|
|
6532
6532
|
/** Compact Models account entry with quota disclosure and shared configuration. */
|
package/lib/index.js
CHANGED
|
@@ -4184,6 +4184,37 @@ let previousDispatcher;
|
|
|
4184
4184
|
const legacySymbol = Symbol.for("undici.globalDispatcher.1");
|
|
4185
4185
|
let installedLegacy;
|
|
4186
4186
|
let previousLegacy;
|
|
4187
|
+
let installedFetch;
|
|
4188
|
+
let previousFetch;
|
|
4189
|
+
const scopedUndiciFetch = fetch$1;
|
|
4190
|
+
function installScopedFetch(fallback) {
|
|
4191
|
+
previousFetch = fallback;
|
|
4192
|
+
installedFetch = (input, init) => {
|
|
4193
|
+
if (proxyScope.getStore() === void 0) return fallback(input, init);
|
|
4194
|
+
if (input instanceof Request) {
|
|
4195
|
+
const request = new Request(input, init);
|
|
4196
|
+
return scopedUndiciFetch(request.url, {
|
|
4197
|
+
method: request.method,
|
|
4198
|
+
headers: request.headers,
|
|
4199
|
+
signal: request.signal,
|
|
4200
|
+
redirect: request.redirect,
|
|
4201
|
+
cache: request.cache,
|
|
4202
|
+
credentials: request.credentials,
|
|
4203
|
+
integrity: request.integrity,
|
|
4204
|
+
keepalive: request.keepalive,
|
|
4205
|
+
mode: request.mode,
|
|
4206
|
+
referrer: request.referrer,
|
|
4207
|
+
referrerPolicy: request.referrerPolicy,
|
|
4208
|
+
...request.body === null ? {} : {
|
|
4209
|
+
body: request.body,
|
|
4210
|
+
duplex: "half"
|
|
4211
|
+
}
|
|
4212
|
+
});
|
|
4213
|
+
}
|
|
4214
|
+
return scopedUndiciFetch(input, init);
|
|
4215
|
+
};
|
|
4216
|
+
globalThis.fetch = installedFetch;
|
|
4217
|
+
}
|
|
4187
4218
|
function installLegacy(fallback, bridge) {
|
|
4188
4219
|
previousLegacy = fallback;
|
|
4189
4220
|
installedLegacy = { dispatch: (...args) => {
|
|
@@ -4199,6 +4230,7 @@ function ensureInstalled(owner) {
|
|
|
4199
4230
|
installedDispatcher = new ScopedProxyDispatcher(current);
|
|
4200
4231
|
setGlobalDispatcher(installedDispatcher);
|
|
4201
4232
|
installLegacy(legacy, Reflect.get(globalThis, legacySymbol));
|
|
4233
|
+
installScopedFetch(globalThis.fetch);
|
|
4202
4234
|
} else if (current !== installedDispatcher) {
|
|
4203
4235
|
installedDispatcher = new ScopedProxyDispatcher(current);
|
|
4204
4236
|
previousDispatcher = current;
|
|
@@ -4208,6 +4240,7 @@ function ensureInstalled(owner) {
|
|
|
4208
4240
|
setGlobalDispatcher(installedDispatcher);
|
|
4209
4241
|
installLegacy(legacy, Reflect.get(globalThis, legacySymbol));
|
|
4210
4242
|
}
|
|
4243
|
+
if (globalThis.fetch !== installedFetch) installScopedFetch(globalThis.fetch);
|
|
4211
4244
|
activeOwners.add(owner);
|
|
4212
4245
|
}
|
|
4213
4246
|
function removeOwner(owner) {
|
|
@@ -4221,8 +4254,11 @@ function removeOwner(owner) {
|
|
|
4221
4254
|
previousDispatcher = void 0;
|
|
4222
4255
|
if (getGlobalDispatcher() === installed && previous !== void 0) setGlobalDispatcher(previous);
|
|
4223
4256
|
if (restoreLegacy !== void 0) Reflect.set(globalThis, legacySymbol, restoreLegacy);
|
|
4257
|
+
if (globalThis.fetch === installedFetch && previousFetch !== void 0) globalThis.fetch = previousFetch;
|
|
4224
4258
|
installedLegacy = void 0;
|
|
4225
4259
|
previousLegacy = void 0;
|
|
4260
|
+
installedFetch = void 0;
|
|
4261
|
+
previousFetch = void 0;
|
|
4226
4262
|
}
|
|
4227
4263
|
function isPromiseLike(value) {
|
|
4228
4264
|
return typeof value === "object" && value !== null && "then" in value && typeof value.then === "function";
|
|
@@ -5294,7 +5330,7 @@ function registerOpenAICodexOriginalImageRoute(ctx, trustedOrigins, assets) {
|
|
|
5294
5330
|
}
|
|
5295
5331
|
//#endregion
|
|
5296
5332
|
//#region src/version.ts
|
|
5297
|
-
const CODEX_CONNECT_VERSION = "0.1.0-alpha.4.
|
|
5333
|
+
const CODEX_CONNECT_VERSION = "0.1.0-alpha.4.46";
|
|
5298
5334
|
//#endregion
|
|
5299
5335
|
//#region src/doctor.ts
|
|
5300
5336
|
/** Secret-free diagnostics and duplicate-provider guidance. */
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "dsh-codex-connect",
|
|
3
3
|
"displayName": "Codex Connect",
|
|
4
4
|
"description": "ChatGPT OAuth and Codex models for DeepSeek Harness.",
|
|
5
|
-
"version": "0.1.0-alpha.4.
|
|
5
|
+
"version": "0.1.0-alpha.4.46",
|
|
6
6
|
"author": "Frank Song",
|
|
7
7
|
"contributors": [
|
|
8
8
|
"Yan-Zero (original dsh-codex author)"
|