dsh-codex-connect 0.1.0-alpha.4.25 → 0.1.0-alpha.4.27
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 +18 -14
- package/README.i18n.yaml +2 -2
- package/README.md +98 -234
- package/compatibility.json +1 -1
- package/docs/README.zh.md +100 -238
- package/docs/agent-notes/env-proxy-dispatcher-preservation.md +7 -0
- package/docs/agent-notes/search-route-runtime-override.md +7 -0
- package/docs/design.i18n.yaml +2 -2
- package/docs/design.md +6 -4
- package/docs/design.zh.md +6 -4
- package/lib/bin.js +2 -4
- package/lib/client.js +580 -84
- package/lib/index.d.ts +42 -7
- package/lib/index.js +2 -2
- package/lib/{src-Di2xxpDv.js → src-BcyhDCEJ.js} +557 -82
- package/package.json +77 -76
package/INSTALL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Installation Runbook for CLI Agents
|
|
2
2
|
|
|
3
|
-
Alpha 4.
|
|
3
|
+
Alpha 4.27 is verified with DSH `0.1.2-rc.1` and its declared pi-ai range `^0.84.2`.
|
|
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
|
|
|
@@ -23,13 +23,14 @@ Check `dsh --version` before changing the requested profile. Use `dsh --help` to
|
|
|
23
23
|
| `0.1.0-rc.7` | `0.1.0-alpha.4.14` |
|
|
24
24
|
| `0.1.1-rc.2` | `0.1.0-alpha.4.21` |
|
|
25
25
|
| `0.1.2-alpha.2` | `0.1.0-alpha.4.23` |
|
|
26
|
+
| `0.1.2-rc.1` | `0.1.0-alpha.4.27` |
|
|
26
27
|
| `0.1.2-alpha.5` | `0.1.0-alpha.4.25` |
|
|
27
28
|
|
|
28
29
|
If your exact DSH version is unknown or not listed, stop and verify the combination before installing. 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.
|
|
29
30
|
|
|
30
|
-
Alpha 4.
|
|
31
|
+
Alpha 4.27's verified contract is DSH plugin API packages `0.1.2-rc.1`, `@earendil-works/pi-ai` `^0.84.2`, and Node.js `^22.19.0 || >=24.0.0`. Alpha 4.25 remains the verified choice for DSH `0.1.2-alpha.5`, Alpha 4.23 remains the verified choice for DSH `0.1.2-alpha.2`, Alpha 4.21 remains the verified choice for DSH `0.1.1-rc.2`, and staying on DSH `0.1.0-rc.7` means selecting Alpha 4.14. Upgrading DSH is a separate decision: upgrade the DSH API packages and pi-ai together, then rerun `dsh-codex-connect doctor --json` and `pnpm --silent run check:compatibility` for the selected combination.
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
The Alpha 4.27 row reflects a fresh isolated installation and runtime probe. Historical rows remain the repository's existing verification record. This guidance does not change upstream DSH behavior or resolve [Issue #64](https://github.com/franksong2702/dsh-codex-connect/issues/64).
|
|
33
34
|
|
|
34
35
|
### Install the selected version and validate
|
|
35
36
|
|
|
@@ -52,23 +53,30 @@ These choices reflect the repository's existing verification record, not a new i
|
|
|
52
53
|
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.23
|
|
53
54
|
```
|
|
54
55
|
|
|
56
|
+
For DSH `0.1.2-rc.1`, use Alpha 4.27:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.27
|
|
60
|
+
```
|
|
61
|
+
|
|
55
62
|
For DSH `0.1.2-alpha.5`, use Alpha 4.25:
|
|
56
63
|
|
|
57
64
|
```sh
|
|
58
65
|
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.25
|
|
59
66
|
```
|
|
60
67
|
|
|
61
|
-
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,
|
|
68
|
+
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, or `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.27'` only for the DSH `0.1.2-rc.1` combination.
|
|
62
69
|
|
|
63
|
-
3. Run `dsh
|
|
64
|
-
4.
|
|
65
|
-
5.
|
|
70
|
+
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.
|
|
71
|
+
4. Run `dsh --profile web --dump-config` and require exactly one `llm-openai-codex` row loading `dsh-codex-connect`.
|
|
72
|
+
5. Confirm the effective `agent-default-model` and `web.searchProvider` values are unchanged from before installation.
|
|
73
|
+
6. Run secret-free diagnostics:
|
|
66
74
|
|
|
67
75
|
```sh
|
|
68
76
|
dsh plugin --profile web exec dsh-codex-connect doctor
|
|
69
77
|
```
|
|
70
78
|
|
|
71
|
-
|
|
79
|
+
7. If the user explicitly requests login, open **Settings → Plugins → Plugin configuration → Codex Connect**, or check `status` and then use `login` or `login --device-code`. OAuth approval belongs to the user.
|
|
72
80
|
|
|
73
81
|
Alpha 4.25 offers the same account actions in **Settings → Models → Openai-Codex**, plus a shared **More settings** dialog for model visibility, proxy, search, image, context-budget, and Auto-review controls. The original Plugin settings entry remains available; neither entry automatically starts login or changes model/search defaults.
|
|
74
82
|
|
|
@@ -87,7 +95,7 @@ The value is a full `http://` or `https://` origin including its port, not a bar
|
|
|
87
95
|
|
|
88
96
|
## Optional configuration
|
|
89
97
|
|
|
90
|
-
Use **Settings → Plugins → Plugin configuration → Codex Connect** for live, staged Save/Discard edits organized under Account & quota, Models, Network, and Capabilities. Switching modules preserves the draft. The same settings control `enableSearch`, `enableImageTool`, `enableImageGeneration`, and `enableAutoReview`; all four default to `false`. Enabling Auto-review permits bounded approval context, tool arguments, working directory, and the planned action to be sent to `chatgpt.com`; failures return to human approval. Enabling image generation uses the image generation capability included with the current GPT subscription and saves results as DSH attachments. Enabling search registers
|
|
98
|
+
Use **Settings → Plugins → Plugin configuration → Codex Connect** for live, staged Save/Discard edits organized under Account & quota, Models, Network, and Capabilities. Switching modules preserves the draft. The same settings control `enableSearch`, `enableImageTool`, `enableImageGeneration`, and `enableAutoReview`; all four default to `false`. Enabling Auto-review permits bounded approval context, tool arguments, working directory, and the planned action to be sent to `chatgpt.com`; failures return to human approval. Enabling image generation uses the image generation capability included with the current GPT subscription and saves results as DSH attachments. Enabling search registers the provider and selects it while the capability remains enabled; disabling restores the previous provider before unregistering Codex Search. Setting `agent-default-model` to `openai-codex` remains a separate explicit change.
|
|
91
99
|
|
|
92
100
|
Apply only requested choices and preserve unrelated keys:
|
|
93
101
|
|
|
@@ -100,17 +108,13 @@ Apply only requested choices and preserve unrelated keys:
|
|
|
100
108
|
enableAutoReview: false
|
|
101
109
|
searchMode: live
|
|
102
110
|
|
|
103
|
-
- id: web
|
|
104
|
-
config:
|
|
105
|
-
searchProvider: openai-codex
|
|
106
|
-
|
|
107
111
|
- id: agent-default-model
|
|
108
112
|
config:
|
|
109
113
|
provider: openai-codex
|
|
110
114
|
model: gpt-5.6-sol
|
|
111
115
|
```
|
|
112
116
|
|
|
113
|
-
Do not add the
|
|
117
|
+
Do not add a separate `web` row for this UI action. Do not add the `agent-default-model` row unless the user separately requested that default.
|
|
114
118
|
|
|
115
119
|
## Conflict handling
|
|
116
120
|
|
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: c135f207b65d25355ffa0dadf44a18732cad765f
|
|
6
|
+
docs/README.zh.md: c95461b5c330da72852c0161ee1b05625b7f914b
|
package/README.md
CHANGED
|
@@ -10,142 +10,83 @@ Connect your ChatGPT subscription to DeepSeek Harness with OAuth, optional GPT I
|
|
|
10
10
|
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/hero.jpg" alt="Codex Connect — ChatGPT OAuth for DeepSeek Harness" width="100%">
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Codex Connect adds ChatGPT OAuth and the `openai-codex` model provider to DeepSeek Harness. The selected model still runs inside the normal Harness agent loop, so Harness continues to own tools, permissions, approval prompts, attachments, session persistence, compaction, and recovery.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
The plugin is additive: installing it does not replace the default model or global search provider. Search, `view_image`, GPT Image generation, and Auto-review are all opt-in. It does not turn a ChatGPT subscription into an OpenAI Platform API key.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
## Highlights
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
- Sign in with ChatGPT from **Settings → Models**, manage up to 16 locally stored accounts, and choose the account used by subsequent requests.
|
|
20
|
+
- Discover the installed upstream Codex catalog. If that catalog does not yet include `gpt-6-astra`, Codex Connect supplies compatible metadata; the upstream definition wins as soon as it exists.
|
|
21
|
+
- Show conversation-scoped Fast Mode and server-reported `5h` and `7d` quota windows for GPT Codex conversations.
|
|
22
|
+
- Compare the installed DSH/plugin pair with the public compatibility record and show update guidance without running an upgrade.
|
|
23
|
+
- Optionally add Codex search, secure local or public-image viewing, GPT Image generation, and Codex Auto-review.
|
|
24
|
+
- Diagnose the installation without printing credentials or starting OAuth.
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
Model discovery is not an entitlement check. OpenAI evaluates the selected account on every request; an unavailable model fails explicitly and Codex Connect does not silently switch models or accounts.
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
## Quick start
|
|
24
29
|
|
|
25
|
-
|
|
26
|
-
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.25
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Expected result: the package is added to that profile. This does not change the profile's default model or global search route.
|
|
30
|
-
|
|
31
|
-
Use the exact version above to keep the verified DSH and plugin pair reproducible. `alpha` is a moving npm tag, not a compatibility guarantee.
|
|
32
|
-
|
|
33
|
-
### What's new in Alpha 4.25
|
|
34
|
-
|
|
35
|
-
- Show the exact 5-hour and weekly quota windows returned by ChatGPT for the selected Codex model. Missing windows stay hidden, Spark remains separate, and plan names do not suppress server data.
|
|
36
|
-
- Separate verified compatibility from maintainer follow-up. The settings card no longer treats missing verification as a known runtime failure or recommends a plugin downgrade.
|
|
37
|
-
- Link users to the canonical tracker for their DSH version when one exists, with a prefilled compatibility-gap report as the safe fallback.
|
|
38
|
-
- Track every newer DSH candidate through one Canary issue with explicit preliminary, compatibility-failure, or infrastructure-blocked state. Canary success does not declare support or publish anything.
|
|
39
|
-
|
|
40
|
-
### Version updates
|
|
41
|
-
|
|
42
|
-
Codex Connect checks public package metadata and this repository's `verified-compatibility.json` periodically through the DSH Web server. The same card reads the locally loaded DSH package version, shows it beside the latest DSH version recorded by this project, and evaluates the exact installed plugin and DSH version pair. Local version detection uses package metadata already available to the plugin and does not require a DSH Core change. The card's optional tracker lookup sends only that public DSH version to GitHub's public search API.
|
|
43
|
-
|
|
44
|
-
The compatibility record lists exact plugin and DSH versions rather than assuming every later release remains compatible. Maintainers can add a newly verified DSH version to the repository file without publishing another plugin release. The card keeps two decisions separate: its status describes only whether the installed pair or a specific upgrade path has been verified, while its GitHub action appears only when the installed latest-or-newer DSH has no verified published plugin. Missing verification never claims that a pair is known to fail. A green result means the installed pair was verified. Yellow recommends updating the plugin when the latest plugin matches the installed DSH, or updating DSH when the latest plugin matches the latest verified DSH. Red means Codex Connect has not caught up with the installed latest-or-newer DSH; it links to the canonical compatibility tracker when one exists, or offers a prefilled compatibility-gap report when the tracker lookup is unavailable or has no match. Gray means an older DSH version is not recorded or the public record could not be checked.
|
|
45
|
-
|
|
46
|
-
When a newer plugin version is available, a frame-wide DSH notice appears even if you switch conversations. It first shows the user-facing changes between your installed version and the newest version; technical release notes remain available as a secondary detail or from the release page. To update, copy the short request shown in the notice to the Agent you use for this DSH project. The Agent can inspect the project instructions and choose the appropriate install or update method; the plugin never runs an upgrade command itself.
|
|
47
|
-
|
|
48
|
-
After the Agent reports completion, return to the notice or settings card and select **Done — check again**. If the running process still reports the old version, restart that profile's DSH Web process and check again.
|
|
30
|
+
The command below is the verified public pairing for DSH `0.1.2-rc.1`. Check `dsh --version` and use [INSTALL.md](INSTALL.md) if you run another DSH version. `alpha` is a moving npm tag, not a compatibility guarantee. This README describes current `main`; changes merged after the displayed package version remain source-only until the next Alpha release.
|
|
49
31
|
|
|
50
|
-
|
|
32
|
+
### 1. Install one exact version
|
|
51
33
|
|
|
52
34
|
```sh
|
|
53
|
-
dsh plugin --profile web
|
|
35
|
+
dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.27
|
|
54
36
|
```
|
|
55
37
|
|
|
56
|
-
Replace `web` with your
|
|
38
|
+
Replace `web` with your existing profile name. From a DeepSeek Harness source checkout, prefix commands with `pnpm`. Installation must leave the profile's default model and search route unchanged.
|
|
57
39
|
|
|
58
|
-
### 2. Start Harness
|
|
40
|
+
### 2. Start Harness and authorize
|
|
59
41
|
|
|
60
42
|
```sh
|
|
61
43
|
dsh web
|
|
62
44
|
```
|
|
63
45
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
### 3. Find the Openai-Codex account card
|
|
67
|
-
|
|
68
|
-
Open **Settings → Models** and find **Openai-Codex**. This is the primary Alpha 4.25 account entry. If the profile does not expose the Models settings section, open **Settings → Plugins → Plugin configuration → Codex Connect** instead.
|
|
69
|
-
|
|
70
|
-
The Models card carries the attribution “Powered by the Codex Connect plugin.” and provides ChatGPT authorization, reauthorization, sign-out and quota. Both settings pages share one in-memory account state and polling owner. **More settings** opens the proxy, model visibility, search, image and context-budget configuration form in a dialog; the original Plugin settings entry remains available. Both entries save to the same settings scope. Close or Escape discards unsaved dialog edits. The Models footer is optional: profiles without that settings section retain the existing Plugin entry.
|
|
71
|
-
|
|
72
|
-
The compact Models row shows **Authorize** when signed out, or **Sign out** and **View quota** when signed in. Expanding quota shows only the server-reported usage rows, without repeating account controls. If browser authorization is interrupted, use **Continue authorization** in Models (**Reopen authorization** in Plugins) to resume the pending login, or **Cancel sign-in** and retry from either settings page or another trusted browser. Cancellation preserves an existing signed-in account. An abandoned authorization expires after 10 minutes by default; the plugin's `oauthTimeoutMs` configuration accepts 1,000–1,800,000 milliseconds and applies when the plugin loads. The separate 30-second wait for the initial authorization URL remains bounded. Neither cancellation nor expiry restarts DSH.
|
|
73
|
-
|
|
74
|
-
Expected result: a fresh installation shows **Authorize** in Models. The Plugin configuration fallback shows **Not signed in** and **Sign in with ChatGPT**.
|
|
75
|
-
|
|
76
|
-
The screenshot below shows the retained Plugin configuration fallback.
|
|
77
|
-
|
|
78
|
-
<p align="center">
|
|
79
|
-
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/plugin-entry.jpg" alt="Collapsed English-localized Codex Connect entry under Harness plugin configuration" width="586">
|
|
80
|
-
</p>
|
|
81
|
-
|
|
82
|
-
### 4. Sign in with ChatGPT
|
|
46
|
+
Open **Settings → Models → Openai-Codex** and select **Authorize**. Complete the approval yourself in the browser. If an embedded window is blocked, use **Open ChatGPT sign-in page** to continue in the system browser.
|
|
83
47
|
|
|
84
|
-
|
|
48
|
+
Never paste an authorization URL, code, token, or account identifier into an issue, log, chat, or configuration file.
|
|
85
49
|
|
|
86
|
-
|
|
50
|
+
### 3. Select a model
|
|
87
51
|
|
|
88
|
-
|
|
89
|
-
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/oauth-status.jpg" alt="English-localized Codex Connect signed-in state inside Harness plugin configuration" width="720">
|
|
90
|
-
</p>
|
|
91
|
-
|
|
92
|
-
### 5. Choose a model and make one safe check
|
|
93
|
-
|
|
94
|
-
Open Harness's normal model picker and select an `openai-codex` model for the agent or session you are using. This selection is separate from writing the profile's default model or global search route.
|
|
95
|
-
|
|
96
|
-
The picker groups the available entries under **OpenAI Codex**. Model identifiers such as `GPT-5.6 Luna` are canonical names, so they intentionally remain un-translated.
|
|
97
|
-
|
|
98
|
-
To shorten that list, open **Settings → Plugins → Plugin configuration → Codex Connect**, uncheck the models you do not want to see, and select **Save changes**. This controls discovery only: a hidden model already stored in an existing conversation or supplied by its exact id remains usable. A fresh installation shows the complete catalog.
|
|
99
|
-
|
|
100
|
-
Profiles may also seed the visible subset with `models`; provider order is preserved regardless of the order written here:
|
|
101
|
-
|
|
102
|
-
```yaml
|
|
103
|
-
- id: llm-openai-codex
|
|
104
|
-
config:
|
|
105
|
-
models:
|
|
106
|
-
- gpt-5.6-luna
|
|
107
|
-
- gpt-5.6-sol
|
|
108
|
-
- gpt-5.6-terra
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Omit `models` to show the full catalog. An empty list hides every Codex model from selectors without disabling exact-id routing.
|
|
52
|
+
Choose an `openai-codex` model in the normal Harness model picker. Model names remain canonical in every UI language. To shorten the catalog, use **More settings → Models**; hiding a model affects discovery only and does not disable exact-id routing.
|
|
112
53
|
|
|
113
54
|
<p align="center">
|
|
114
|
-
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/model-selector.jpg" alt="OpenAI Codex
|
|
55
|
+
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/model-selector.jpg" alt="OpenAI Codex models in the DeepSeek Harness model picker" width="360">
|
|
115
56
|
</p>
|
|
116
57
|
|
|
117
|
-
|
|
58
|
+
### 4. Verify the installation
|
|
118
59
|
|
|
119
60
|
```sh
|
|
120
61
|
dsh --profile web --dump-config
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Expected result: the configuration has exactly one `llm-openai-codex` row. Keep this configuration dump local; it may include unrelated profile settings.
|
|
124
|
-
|
|
125
|
-
For secret-free status and diagnostics that do not start OAuth, run:
|
|
126
|
-
|
|
127
|
-
```sh
|
|
128
62
|
dsh plugin --profile web exec dsh-codex-connect status --json
|
|
129
63
|
dsh plugin --profile web exec dsh-codex-connect doctor --json
|
|
130
64
|
```
|
|
131
65
|
|
|
132
|
-
|
|
66
|
+
The effective configuration should contain exactly one `llm-openai-codex` row. A signed-in `status --json` exits `0`; a signed-out status exits `1` without starting OAuth. `doctor --json` prints one secret-free diagnostic document.
|
|
67
|
+
|
|
68
|
+
## Accounts, models, and quota
|
|
133
69
|
|
|
134
|
-
|
|
70
|
+
The Models card and the Plugin configuration page share the same account state. **Manage accounts** can add, select, or remove accounts. Browser responses expose only plugin-generated account keys and masked labels, never OAuth tokens or raw OpenAI account ids.
|
|
135
71
|
|
|
136
|
-
|
|
72
|
+
- Adding an account leaves the current account usable while authorization is pending.
|
|
73
|
+
- Cancelling or timing out a new authorization preserves every existing account. Pending authorization expires after 10 minutes by default; `oauthTimeoutMs` accepts 1,000–1,800,000 milliseconds and is applied when the plugin loads.
|
|
74
|
+
- Switching accounts affects subsequent requests. A request captures its account before resolving authentication, so a concurrent switch cannot mix credentials.
|
|
75
|
+
- Removing the active account requires selecting a replacement when another account remains. Removing the last account signs out; **Sign out all accounts** deletes all locally stored Codex credentials.
|
|
76
|
+
- Codex Connect does not rotate accounts automatically or fail over when a request is rejected.
|
|
137
77
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
-
|
|
78
|
+
For GPT Codex conversations, the Composer shows two session controls:
|
|
79
|
+
|
|
80
|
+
- **Fast Mode** requests the faster `1.5×` mode for that conversation only. It is off by default and does not change the model.
|
|
81
|
+
- **Quota bars** show only the `5h` and `7d` windows returned by the server, with the exact remaining percentage and reset time. `gpt-5.3-codex-spark` uses its separate Spark bucket. Codex Connect never invents missing windows or suppresses returned windows based on a plan name.
|
|
141
82
|
|
|
142
83
|
<p align="center">
|
|
143
|
-
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/composer-capabilities.jpg" alt="
|
|
84
|
+
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/composer-capabilities.jpg" alt="Fast Mode and quota controls in the DeepSeek Harness Composer" width="820">
|
|
144
85
|
</p>
|
|
145
86
|
|
|
146
|
-
## Optional capabilities
|
|
87
|
+
## Optional capabilities
|
|
147
88
|
|
|
148
|
-
|
|
89
|
+
Fresh installations register the model provider and leave every additional capability disabled:
|
|
149
90
|
|
|
150
91
|
```yaml
|
|
151
92
|
- id: llm-openai-codex
|
|
@@ -157,182 +98,113 @@ The installed bundle is intentionally inert beyond model-provider registration:
|
|
|
157
98
|
enableAutoReview: false
|
|
158
99
|
```
|
|
159
100
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
### Network connection and proxy detection
|
|
101
|
+
Edit these options under **Settings → Plugins → Plugin configuration → Codex Connect** or **Settings → Models → Openai-Codex → More settings**. Changes are staged until **Save changes**. Most settings affect only this plugin; enabling Codex Search also selects it as the active profile-wide search route.
|
|
163
102
|
|
|
164
|
-
|
|
103
|
+
### Proxy
|
|
165
104
|
|
|
166
|
-
|
|
105
|
+
Direct connection is the default. An enabled credential-free HTTP(S) proxy applies only to this plugin's model, OAuth, refresh, quota, search, image, and Auto-review traffic. Detection checks standard proxy environment variables and documented loopback candidates without making a model call, consuming quota, or saving settings. A failed proxy request never silently retries through a direct connection. Loading Codex Connect does not replace Node's environment-proxy dispatcher, so unrelated Harness requests continue using the process's existing proxy policy.
|
|
167
106
|
|
|
168
|
-
|
|
107
|
+
### Search and image tools
|
|
169
108
|
|
|
170
|
-
|
|
109
|
+
- `enableSearch: true` registers Codex as an available search provider and selects it for profile-wide searches. Disabling it unregisters the provider and restores the route that was active before Codex Search was enabled.
|
|
110
|
+
- `enableImageTool: true` registers `view_image` on vision-capable models. Remote reads accept credential-free public HTTP(S) only and revalidate DNS and redirects.
|
|
111
|
+
- `enableImageGeneration: true` registers prompt-only GPT Image generation. Use the image generation capability included with your current GPT subscription. Availability, dimensions, and quota remain account- and service-controlled.
|
|
171
112
|
|
|
172
|
-
-
|
|
173
|
-
- `enableImageTool: true` enables `view_image` for approved local reads and public-network image fetches on vision-capable models.
|
|
174
|
-
- `enableImageGeneration: true` enables the prompt-only image generation tool. Use the image generation capability included with your current GPT subscription. Codex Connect preserves the exact generated file in plugin-owned storage and saves a DSH attachment as the conversation preview.
|
|
175
|
-
|
|
176
|
-
The screenshot below is an example after someone has explicitly enabled capabilities. It does not show the fresh-install default. This English guide uses the English-localized capture; the Chinese guide shows the matching Chinese-localized state.
|
|
113
|
+
Generated originals are stored under `$DSH_HOME/dsh-codex-connect/images/v1`; the conversation receives a separate DSH attachment preview. The result card reports dimensions and file sizes and can download either representation. Originals are owner-only, integrity-checked, and available only to the creating session and forks that inherited the result. Disabling or uninstalling the plugin does not delete those files automatically.
|
|
177
114
|
|
|
178
115
|
<p align="center">
|
|
179
|
-
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/
|
|
116
|
+
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/image-generation.png" alt="GPT Image result with prompt, download actions, and image details" width="780">
|
|
180
117
|
</p>
|
|
181
118
|
|
|
182
|
-
###
|
|
183
|
-
|
|
184
|
-
1. Turn on **Enable GPT Image generation** in the Codex Connect card and select **Save changes**.
|
|
185
|
-
2. Choose an `openai-codex` GPT model for the conversation.
|
|
186
|
-
3. Describe the image you want in ordinary language. The agent can expand that request into the prompt sent to GPT Image.
|
|
187
|
-
4. The exact generated file is preserved separately from the DSH attachment used to render the conversation preview. The result card lets you review and copy the full prompt, download the exact original or the preview, and compare their dimensions and file sizes.
|
|
188
|
-
|
|
189
|
-
This capability uses the image generation access included with your current GPT subscription; it does not require an OpenAI Platform API key. Availability remains subject to the GPT plan and model selected for the conversation.
|
|
190
|
-
|
|
191
|
-
Output dimensions are selected by the subscription service. The tool accepts a prompt only and does not offer a size setting or guarantee 4K output. Asking for "4K detail" does not establish the file's pixel dimensions; use the dimensions shown on the result card. Downloading the original preserves what the service returned, without upscaling it.
|
|
192
|
-
|
|
193
|
-
<p align="center">
|
|
194
|
-
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/image-generation.png" alt="English-localized Codex Connect GPT Image result with preview, copyable prompt, download action, and image details" width="780">
|
|
195
|
-
</p>
|
|
196
|
-
|
|
197
|
-
The detailed image prompt is authored by the selected GPT model. Codex Connect does not silently add image parameters: it validates the prompt-only request and forwards it through the ChatGPT subscription capability. The exact returned bytes are stored below `$DSH_HOME/dsh-codex-connect/images/v1`; an additional DSH attachment is the preview used by the conversation and may be resized or re-encoded by the active DSH attachment policy. The **Download original** action always uses the plugin-owned exact file, while **Download preview** returns that DSH representation. Originals are owner-only, integrity-checked before download, and available to the creating session and forks that inherited the image result, including after session restoration. Forks made before that result and unrelated sessions cannot download it. Disabling image generation or uninstalling the plugin does not automatically delete the files; downloading through the result card requires the plugin to remain installed. On the result card you can scroll through and copy the complete prompt. **Try again** and **Generate another** send that card's own prompt again, so an older card is not accidentally regenerated from a newer conversation message. **Modify this image** first asks what you want to change, then continues from that card's prompt.
|
|
198
|
-
|
|
199
|
-
### Usage limits in Plugin configuration
|
|
200
|
-
|
|
201
|
-
After sign-in, the Codex Connect settings card can show several server-reported windows. They are separate buckets, not three views of one number:
|
|
202
|
-
|
|
203
|
-
- The standard **Codex** bucket can contain a **5-hour** window, a **Weekly** window, or both.
|
|
204
|
-
- The exact Spark model uses the separate **GPT-5.3-Codex-Spark** bucket and displays whichever windows that bucket returns.
|
|
119
|
+
### Auto-review
|
|
205
120
|
|
|
206
|
-
|
|
121
|
+
`enableAutoReview: true` lets the Codex reviewer assess eligible Harness approval requests after DSH policy has determined that approval is required. First enablement requires confirmation because bounded recent approval context, tool arguments, working directory, and the planned action are sent to `chatgpt.com`. Hidden reasoning and stored credentials are excluded. Only a complete structured allow result authorizes one execution; ambiguity, malformed output, transport failure, and timeout return to human approval. See [Auto-review](docs/auto-review.md) for the full decision and retry rules.
|
|
207
122
|
|
|
208
|
-
|
|
123
|
+
## Routing and configuration
|
|
209
124
|
|
|
210
|
-
|
|
125
|
+
Installing Codex Connect does not select a default model or search provider. Enabling Codex Search selects it while the capability remains enabled; select a default model separately only when intended. The equivalent configuration is:
|
|
211
126
|
|
|
212
127
|
```yaml
|
|
213
128
|
- id: agent-default-model
|
|
214
129
|
config:
|
|
215
130
|
provider: openai-codex
|
|
216
131
|
model: gpt-5.6-sol
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
Selecting Codex as the profile's global search route is another explicit change:
|
|
220
132
|
|
|
221
|
-
```yaml
|
|
222
133
|
- id: llm-openai-codex
|
|
223
134
|
config:
|
|
224
135
|
enableSearch: true
|
|
225
136
|
searchMode: live
|
|
226
137
|
searchContextSize: medium
|
|
227
138
|
|
|
228
|
-
- id: web
|
|
229
|
-
config:
|
|
230
|
-
searchProvider: openai-codex
|
|
231
139
|
```
|
|
232
140
|
|
|
233
|
-
|
|
234
|
-
|---|---:|---|
|
|
235
|
-
| `models` | full catalog | Codex model id array; empty hides all entries |
|
|
236
|
-
| `enableProxy` | `false` | boolean; direct connection unless explicitly enabled |
|
|
237
|
-
| `proxyUrl` | `http://127.0.0.1:7890` (inactive placeholder) | Credential-free HTTP(S) proxy origin |
|
|
238
|
-
| `contextWindowOverrides` | none | Per-model context-window override map; see below |
|
|
239
|
-
| `enableSearch` | `false` | boolean |
|
|
240
|
-
| `enableImageTool` | `false` | boolean |
|
|
241
|
-
| `enableImageGeneration` | `false` | boolean |
|
|
242
|
-
| `searchModel` | `gpt-5.6-sol` | Codex model id |
|
|
243
|
-
| `searchMode` | `cached` | `cached`, `indexed`, `live` |
|
|
244
|
-
| `searchContextSize` | `medium` | `low`, `medium`, `high` |
|
|
245
|
-
| `searchMaxOutputTokens` | `10000` | positive integer |
|
|
246
|
-
|
|
247
|
-
### Context-window overrides
|
|
248
|
-
|
|
249
|
-
Use `contextWindowOverrides` to opt into a per-model client context budget when you have evidence that the bundled catalog does not fit your deployment. It cannot enlarge the OpenAI backend's context capacity. Overrides default off; this feature does not verify the community-reported larger windows.
|
|
250
|
-
|
|
251
|
-
In Plugin configuration and **Models → More settings**, each model row shows its numeric context budget and keeps its visibility checkbox. **Context → Adjust** opens a synchronized slider and integer input, with the installed catalog default and a configuration ceiling. **Restore default** uses the catalog value even if composition supplies an override. Hiding a model preserves its budget. **Save** applies staged edits; **Discard** abandons them. An empty input is invalid, not a reset.
|
|
141
|
+
The main plugin options are:
|
|
252
142
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
To restore defaults, distinguish the settings layers:
|
|
268
|
-
|
|
269
|
-
- A resolved empty map `{}` or no override uses catalog windows.
|
|
270
|
-
- DSH recursively merges settings maps. Updating an existing map with `{}` is therefore not a clear operation.
|
|
271
|
-
- Set `contextWindowOverrides: null` to explicitly disable all overrides, including values inherited from composition.
|
|
272
|
-
- Set a model entry to `null` to restore only that model's catalog default while preserving other overrides. The UI saves explicit per-model masks so restored defaults do not re-inherit composition values.
|
|
273
|
-
- Removing the stored field re-inherits composition settings; with no composition override, it restores catalog windows. Removing one stored model entry similarly restores that model's composition or catalog value.
|
|
274
|
-
|
|
275
|
-
## Reauthentication, diagnostics, and conflicts
|
|
276
|
-
|
|
277
|
-
- If the card says **Sign in again** or the server asks for reauthentication, click that action and complete the same safe browser flow. It preserves this plugin's capability settings and does not silently change your default model or global search route. Do not run `logout` just to renew a session.
|
|
278
|
-
- `doctor` reads process and filesystem metadata only. `doctor --json` emits exactly one secret-free JSON document with schema version 1, package/version/Node metadata, credential-file state and safe mode, capabilities, conflict status, and hints. It omits the absolute credential path and OAuth, account, and expiry data.
|
|
279
|
-
- `status --json` emits only signed-in or signed-out state with package metadata. `status --json` reads the credential only to determine sign-in state, but never prints credential contents or starts OAuth.
|
|
280
|
-
- Alpha 4.10 users whose search histories fail with an unknown `web/openai-codex-search-llm-request` event can run `dsh-codex-connect migrate-history --json`, stop DSH, then apply the reported repair with `migrate-history --apply --confirm-stopped --json`. The command is dry-run by default, backs up every changed compressed JSONL artifact, and is dry-run only on Windows; see [MIGRATION.md](MIGRATION.md).
|
|
281
|
-
- OAuth is stored separately at `$DSH_HOME/.openai-codex-auth.json` (`~/.dsh` by default). `~/.codex/auth.json` is never copied or modified. The parent directory and file use owner-only permissions where supported, writes are atomic, and refresh writes use a cross-process file lock.
|
|
282
|
-
- By default, the OAuth routes accept loopback browser requests only. When DSH runs on one device and you open it from another device on a trusted network, approve the browser address-bar origin explicitly on the device that runs DSH:
|
|
143
|
+
| Field | Default | Meaning |
|
|
144
|
+
|---|---:|---|
|
|
145
|
+
| `models` | full catalog | Visible Codex model ids; an empty array hides all entries |
|
|
146
|
+
| `enableProxy` | `false` | Use `proxyUrl` for Codex Connect traffic |
|
|
147
|
+
| `proxyUrl` | `http://127.0.0.1:7890` | Credential-free HTTP(S) proxy origin; inactive until enabled |
|
|
148
|
+
| `contextWindowOverrides` | none | Per-model client context-budget overrides |
|
|
149
|
+
| `enableSearch` | `false` | Register Codex search and select it when the setting is saved |
|
|
150
|
+
| `enableImageTool` | `false` | Register `view_image` |
|
|
151
|
+
| `enableImageGeneration` | `false` | Register GPT Image generation |
|
|
152
|
+
| `enableAutoReview` | `false` | Review eligible approval requests with Codex |
|
|
153
|
+
| `searchModel` | `gpt-5.6-sol` | Model used by standalone search |
|
|
154
|
+
| `searchMode` | `cached` | `cached`, `indexed`, or `live` |
|
|
155
|
+
| `searchContextSize` | `medium` | `low`, `medium`, or `high` |
|
|
156
|
+
| `searchMaxOutputTokens` | `10000` | Positive integer output budget for search |
|
|
283
157
|
|
|
284
|
-
|
|
285
|
-
dsh plugin --profile web exec dsh-codex-connect trust-origin http://192.168.1.20:3080
|
|
286
|
-
dsh plugin --profile web exec dsh-codex-connect trusted-origins
|
|
287
|
-
dsh plugin --profile web exec dsh-codex-connect untrust-origin http://192.168.1.20:3080
|
|
288
|
-
```
|
|
158
|
+
`contextWindowOverrides` changes the client budget, not OpenAI's server capacity. Unknown model ids and values above the plugin's documented configuration ceiling fail explicitly. Use `null` for the whole field to mask inherited overrides, or `null` for one model to restore its catalog default while preserving other entries. Leave room for output and protocol overhead, and treat larger values as deployment-specific experiments rather than entitlement evidence. [Alpha design](docs/design.md) documents the ownership and persistence rules.
|
|
289
159
|
|
|
290
|
-
|
|
291
|
-
- If startup reports an `openai-codex` collision, an old `dsh-codex` bundle or manual provider row may already own the adapter. Inspect the effective configuration and remove only the confirmed conflicting owner. Do not delete auth files or unrelated providers.
|
|
292
|
-
- Removing the package does not delete OAuth state. Run `logout` only when credential removal is intended.
|
|
160
|
+
## Diagnostics and recovery
|
|
293
161
|
|
|
294
|
-
###
|
|
162
|
+
### Capability probes
|
|
295
163
|
|
|
296
|
-
|
|
164
|
+
The local report performs no network request. Adding `--probe` sends one fixed short request and may consume quota:
|
|
297
165
|
|
|
298
166
|
```sh
|
|
299
167
|
dsh plugin --profile web exec dsh-codex-connect capabilities --model gpt-5.6-sol --json
|
|
300
168
|
dsh plugin --profile web exec dsh-codex-connect capabilities --model gpt-5.6-sol --probe --json
|
|
169
|
+
dsh plugin --profile web exec dsh-codex-connect auto-review-probe --json
|
|
301
170
|
```
|
|
302
171
|
|
|
303
|
-
|
|
172
|
+
Probes use a direct connection unless `--proxy <http(s)-origin>` is supplied. `--timeout-ms <1..60000>` overrides the 30-second deadline. They do not follow redirects or retry, cap responses at 64 KiB, and do not refresh credentials. Results label each check `supported`, `rejected`, or `unknown`; a catalog entry alone never proves entitlement. Exit `0` means the command's required checks were supported, `1` means at least one was rejected, and `2` means evidence was unknown or the invocation was invalid. Reports omit credentials, account ids, paths, proxy origins, response ids, headers, and generated text.
|
|
304
173
|
|
|
305
|
-
|
|
174
|
+
### Remote browser authorization
|
|
306
175
|
|
|
307
|
-
|
|
176
|
+
OAuth routes accept loopback browsers by default. If DSH runs on another device in a trusted network, add the exact origin from the browser address bar on the DSH host:
|
|
308
177
|
|
|
309
|
-
|
|
178
|
+
```sh
|
|
179
|
+
dsh plugin --profile web exec dsh-codex-connect trust-origin http://192.168.1.20:3080
|
|
180
|
+
dsh plugin --profile web exec dsh-codex-connect trusted-origins
|
|
181
|
+
dsh plugin --profile web exec dsh-codex-connect untrust-origin http://192.168.1.20:3080
|
|
182
|
+
```
|
|
310
183
|
|
|
311
|
-
|
|
184
|
+
Include the scheme and port, never a path, query, or fragment. Do not expose the OAuth route to the public Internet; use an SSH tunnel when the network is not trusted. The Web client displays these commands but never edits the allowlist.
|
|
312
185
|
|
|
313
|
-
|
|
186
|
+
### Migration and conflicts
|
|
314
187
|
|
|
315
|
-
|
|
316
|
-
dsh plugin --profile web exec dsh-codex-connect auto-review-probe --json
|
|
317
|
-
```
|
|
188
|
+
If startup reports an `openai-codex` collision, inspect the effective configuration and remove only the confirmed legacy `dsh-codex` bundle or manual provider row. Do not delete credentials or unrelated providers. See [MIGRATION.md](MIGRATION.md) for package migration and repair of Alpha 4.10 search histories.
|
|
318
189
|
|
|
319
|
-
|
|
190
|
+
OAuth is stored separately at `$DSH_HOME/.openai-codex-auth.json` (`~/.dsh` by default); `~/.codex/auth.json` is never copied or modified. Removing the package does not remove OAuth state. Run `logout` only when deleting credentials is intentional.
|
|
320
191
|
|
|
321
|
-
|
|
192
|
+
## Compatibility and security
|
|
322
193
|
|
|
323
|
-
|
|
194
|
+
- [verified-compatibility.json](verified-compatibility.json) is the authority for exact DSH/plugin pairs. Follow [INSTALL.md](INSTALL.md); do not infer future compatibility from a current row.
|
|
195
|
+
- A missing compatibility record means the pair is unverified, not known to be broken. Update notices explain the recorded path but never install anything automatically.
|
|
196
|
+
- ChatGPT plan eligibility, model access, quotas, backend context capacity, and service behavior are controlled by OpenAI and may change.
|
|
197
|
+
- Harness remains responsible for shell, filesystem, skills, MCP, subagents, approvals, permissions, attachments, session persistence, compaction, and recovery.
|
|
198
|
+
- Install, build, tests, `doctor`, and package validation require no real OAuth operation.
|
|
199
|
+
- This is a community Alpha. It is not affiliated with or endorsed by OpenAI, ChatGPT, Codex, DeepSeek, or DeepSeek Harness.
|
|
324
200
|
|
|
325
|
-
|
|
326
|
-
- The new DSH client splits its former runtime into Session Controller, Settings, Store, and Renderer packages. Codex Connect uses those public interfaces for settings and image actions. DSH owns normalized preview encoding and dimensions; Codex Connect retains the exact original image separately.
|
|
327
|
-
- Upgrade the DSH plugin API packages and `@earendil-works/pi-ai` as one group, then run `dsh-codex-connect doctor --json` and the compatibility check again. This contract does not make claims about future versions.
|
|
328
|
-
- When the daily upstream check finds a new `latest` or `next` DSH candidate, it installs Codex Connect into an isolated profile, boots the installed model runtime without OAuth credentials, verifies model and reasoning-effort discovery, and confirms provider disposal. Live sign-in, quota, and model requests still require manual validation in the test profile.
|
|
329
|
-
- ChatGPT plan eligibility, model access, quotas, and backend behavior are controlled by OpenAI and may change.
|
|
330
|
-
- The Codex endpoint does not enforce the ordinary Responses `max_output_tokens` field. Harness compaction still works, but that summary cap cannot be imposed server-side on this route.
|
|
331
|
-
- Shell, filesystem, skills, MCP, subagents, approvals, permissions, attachments, session persistence, compaction, and recovery continue to come from the active Harness profile.
|
|
332
|
-
- Remote `view_image` URLs are limited to public HTTP(S) destinations. Every DNS result and redirect is checked, and the connection is pinned to the validated address so localhost, private networks, link-local services, and cloud metadata endpoints remain unreachable.
|
|
333
|
-
- No real OAuth operation is required for installation, build, tests, doctor, or package validation.
|
|
201
|
+
## Project documentation
|
|
334
202
|
|
|
335
|
-
|
|
203
|
+
- [Installation and upgrades](INSTALL.md)
|
|
204
|
+
- [Migration from `dsh-codex`](MIGRATION.md)
|
|
205
|
+
- [Architecture and security details](docs/design.md)
|
|
206
|
+
- [Auto-review behavior](docs/auto-review.md)
|
|
207
|
+
- [Alpha release runbook](RELEASING.md)
|
|
336
208
|
|
|
337
209
|
## Development
|
|
338
210
|
|
|
@@ -341,14 +213,6 @@ pnpm install --frozen-lockfile
|
|
|
341
213
|
pnpm run check
|
|
342
214
|
```
|
|
343
215
|
|
|
344
|
-
##
|
|
345
|
-
|
|
346
|
-
Maintainers publish alpha versions through the [manual OIDC release workflow](.github/workflows/release.yml); see the [alpha release runbook](RELEASING.md) for the separate, short-lived `latest` promotion step.
|
|
347
|
-
|
|
348
|
-
## Legal / Acknowledgements
|
|
349
|
-
|
|
350
|
-
Copyright 2026 Frank Song for the modifications and additional work in Codex Connect. This project includes software derived from [Yan-Zero/dsh-codex](https://github.com/Yan-Zero/dsh-codex); Copyright 2026 Yan-Zero is retained for the upstream material. Both are distributed under Apache-2.0, with details in [NOTICE](NOTICE). This project is not affiliated with or endorsed by OpenAI, ChatGPT, Codex, DeepSeek, or DeepSeek Harness.
|
|
351
|
-
|
|
352
|
-
## License
|
|
216
|
+
## License and acknowledgements
|
|
353
217
|
|
|
354
|
-
Apache-2.0
|
|
218
|
+
Copyright 2026 Frank Song for Codex Connect modifications and additional work. This project contains software derived from [Yan-Zero/dsh-codex](https://github.com/Yan-Zero/dsh-codex); Copyright 2026 Yan-Zero is retained for upstream material. Both are distributed under Apache-2.0; see [NOTICE](NOTICE).
|