dsh-codex-connect 0.1.0-alpha.4.10
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 +89 -0
- package/LICENSE +202 -0
- package/MIGRATION.md +12 -0
- package/NOTICE +15 -0
- package/README.i18n.yaml +6 -0
- package/README.md +193 -0
- package/compatibility.json +28 -0
- package/cordis.patch.yml +8 -0
- package/docs/README.zh.md +193 -0
- package/docs/assets/en/hero.jpg +0 -0
- package/docs/assets/en/model-selector.jpg +0 -0
- package/docs/assets/en/oauth-status.jpg +0 -0
- package/docs/assets/en/plugin-configuration.jpg +0 -0
- package/docs/assets/en/plugin-entry.jpg +0 -0
- package/docs/assets/hero.jpg +0 -0
- package/docs/assets/model-selector.jpg +0 -0
- package/docs/assets/oauth-status.jpg +0 -0
- package/docs/assets/plugin-configuration.jpg +0 -0
- package/docs/assets/zh/hero.jpg +0 -0
- package/docs/assets/zh/model-selector.jpg +0 -0
- package/docs/assets/zh/oauth-status.jpg +0 -0
- package/docs/assets/zh/plugin-configuration.jpg +0 -0
- package/docs/assets/zh/plugin-entry.jpg +0 -0
- package/docs/design.i18n.yaml +4 -0
- package/docs/design.md +29 -0
- package/docs/design.zh.md +25 -0
- package/lib/bin.d.ts +6 -0
- package/lib/bin.js +230 -0
- package/lib/client.js +1642 -0
- package/lib/index.d.ts +443 -0
- package/lib/index.js +2 -0
- package/lib/invariant.d.ts +14 -0
- package/lib/invariant.js +15 -0
- package/lib/src-DLX8Rs0k.js +2080 -0
- package/package.json +155 -0
package/INSTALL.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Installation Runbook for CLI Agents
|
|
2
|
+
|
|
3
|
+
Install `dsh-codex-connect` into one requested DeepSeek Harness profile without changing its current default model, search route, global configuration, or OAuth state.
|
|
4
|
+
|
|
5
|
+
## Safety requirements
|
|
6
|
+
|
|
7
|
+
- Never read, print, copy, move, or modify `~/.codex/auth.json`.
|
|
8
|
+
- Never print or inspect `$DSH_HOME/.openai-codex-auth.json`; `doctor` may inspect pathname metadata only.
|
|
9
|
+
- Never add OAuth URLs, codes, tokens, account identifiers, or generated profile state to Git.
|
|
10
|
+
- Preserve every unrelated profile dependency and patch row.
|
|
11
|
+
- Do not start login unless the user explicitly asks to authenticate.
|
|
12
|
+
|
|
13
|
+
## Install and validate
|
|
14
|
+
|
|
15
|
+
The only verified combination is DSH plugin API packages `0.1.0-rc.7`, `@earendil-works/pi-ai` `0.82.1`, and Node.js `^22.19.0 || >=24.0.0`. Alpha 4.10 uses the rc.7 keyed Plugin configuration slot; DSH rc.6 users should remain on Alpha 4.9. Upgrade the DSH API packages and pi-ai together, then rerun `dsh-codex-connect doctor --json` and `pnpm --silent run check:compatibility`; the contract does not make claims about future versions.
|
|
16
|
+
|
|
17
|
+
1. Check `dsh --version` or `dsh --help`. From a Harness checkout use `pnpm dsh`.
|
|
18
|
+
2. Install the package:
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
dsh plugin --profile web add dsh-codex-connect@alpha
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
After `0.1.0-alpha.4.10` is published, pin it exactly with `dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.10`. If npm is unavailable after its matching GitHub prerelease is created, use `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.10'`.
|
|
25
|
+
|
|
26
|
+
3. Run `dsh --profile web --dump-config` and require exactly one `llm-openai-codex` row loading `dsh-codex-connect`.
|
|
27
|
+
4. Confirm the effective `agent-default-model` and `web.searchProvider` values are unchanged from before installation.
|
|
28
|
+
5. Run secret-free diagnostics:
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
dsh plugin --profile web exec dsh-codex-connect doctor
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
6. 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.
|
|
35
|
+
|
|
36
|
+
### Remote browser access
|
|
37
|
+
|
|
38
|
+
The default Web OAuth boundary is loopback-only. When DSH runs on one device and you open it from another device on a trusted network through an IP address or domain, run the following on the device that runs DSH with the exact origin from the browser address bar:
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
dsh plugin --profile web exec dsh-codex-connect trust-origin http://192.168.1.20:3080
|
|
42
|
+
dsh plugin --profile web exec dsh-codex-connect trusted-origins
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The value is a full `http://` or `https://` origin including its port, not a bare device IP and not a path/query/fragment. Use `untrust-origin <origin>` to remove it. Restrict this to a trusted network and never expose the route publicly; use an SSH tunnel when that is safer. The Web client does not edit this list.
|
|
46
|
+
|
|
47
|
+
## Optional configuration
|
|
48
|
+
|
|
49
|
+
Use **Settings → Plugins → Plugin configuration → Codex Connect** for live, staged Save/Discard edits. The package row accepts the same `enableSearch` and `enableImageTool` fields as its composition base, both defaulting to `false`. Enabling search registers a provider but does not select it; selecting `web.searchProvider: openai-codex` is a second explicit profile change. Setting `agent-default-model` to `openai-codex` is also a separate explicit change.
|
|
50
|
+
|
|
51
|
+
Apply only requested choices and preserve unrelated keys:
|
|
52
|
+
|
|
53
|
+
```yaml
|
|
54
|
+
- id: llm-openai-codex
|
|
55
|
+
config:
|
|
56
|
+
enableSearch: true
|
|
57
|
+
enableImageTool: false
|
|
58
|
+
searchMode: live
|
|
59
|
+
|
|
60
|
+
- id: web
|
|
61
|
+
config:
|
|
62
|
+
searchProvider: openai-codex
|
|
63
|
+
|
|
64
|
+
- id: agent-default-model
|
|
65
|
+
config:
|
|
66
|
+
provider: openai-codex
|
|
67
|
+
model: gpt-5.6-sol
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Do not add the last two rows unless the user separately requested those routing changes.
|
|
71
|
+
|
|
72
|
+
## Conflict handling
|
|
73
|
+
|
|
74
|
+
`openai-codex` can have only one adapter. If startup reports a collision, inspect the effective config and remove only the old `dsh-codex` bundle or manual `openai-codex` provider row after confirming it is the conflicting owner. Do not delete auth files or unrelated providers.
|
|
75
|
+
|
|
76
|
+
## Update and removal
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
dsh plugin --profile web update dsh-codex-connect@alpha
|
|
80
|
+
dsh plugin --profile web remove dsh-codex-connect
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Use an exact npm version when a reproducible update is required; use a GitHub tag only as the npm-unavailable fallback.
|
|
84
|
+
|
|
85
|
+
Removal of the package and removal of its separate OAuth file are different actions. Run `dsh plugin --profile web exec dsh-codex-connect logout` only with explicit credential-deletion authorization.
|
|
86
|
+
|
|
87
|
+
## Completion report
|
|
88
|
+
|
|
89
|
+
Report the profile, installed version, effective default model, effective search route, enabled optional capabilities, signed-in/signed-out state only if checked, and Web client detection. Never report OAuth URLs, codes, token timestamps, account ids, or auth-file contents.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2026 Yan-Zero
|
|
190
|
+
Copyright 2026 Frank Song (modifications and additional work)
|
|
191
|
+
|
|
192
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
193
|
+
you may not use this file except in compliance with the License.
|
|
194
|
+
You may obtain a copy of the License at
|
|
195
|
+
|
|
196
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
197
|
+
|
|
198
|
+
Unless required by applicable law or agreed to in writing, software
|
|
199
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
200
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
201
|
+
See the License for the specific language governing permissions and
|
|
202
|
+
limitations under the License.
|
package/MIGRATION.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Migrating from `dsh-codex`
|
|
2
|
+
|
|
3
|
+
`dsh-codex-connect` uses the same provider id (`openai-codex`), OAuth filename (`.openai-codex-auth.json`), Cordis row id (`llm-openai-codex`), and browser auth routes for compatibility. The packages cannot be active together because Harness forbids duplicate provider adapters.
|
|
4
|
+
|
|
5
|
+
1. Record the effective default model, search route, and `llm-openai-codex` config without reading any OAuth file.
|
|
6
|
+
2. Remove `dsh-codex` from the selected profile and add `dsh-codex-connect`.
|
|
7
|
+
3. Keep exactly one `llm-openai-codex` row loading `dsh-codex-connect`.
|
|
8
|
+
4. Decide explicitly whether to set `enableSearch` and `enableImageTool`; both default to `false` after migration.
|
|
9
|
+
5. Preserve the prior `agent-default-model` and `web.searchProvider` only when the user wants those routes to remain selected.
|
|
10
|
+
6. Run `--dump-config`, then `dsh-codex-connect doctor`. Do not run OAuth again when `status` already reports signed in.
|
|
11
|
+
|
|
12
|
+
Rollback is the inverse package swap. Do not delete or copy the separate OAuth file during either direction. If Harness reports a duplicate `openai-codex` adapter, the old bundle or a manual provider row is still active; resolve that one row instead of changing credentials.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
dsh-codex-connect
|
|
2
|
+
Copyright 2026 Frank Song
|
|
3
|
+
|
|
4
|
+
This product includes software derived from Yan-Zero/dsh-codex:
|
|
5
|
+
https://github.com/Yan-Zero/dsh-codex
|
|
6
|
+
Copyright 2026 Yan-Zero
|
|
7
|
+
|
|
8
|
+
Modifications and additional work for Codex Connect are Copyright 2026
|
|
9
|
+
Frank Song. They include a distinct package identity, opt-in routing and
|
|
10
|
+
capabilities, secret-free diagnostics, provider-conflict guidance, migration
|
|
11
|
+
documentation, security hardening, live plugin configuration, and Alpha
|
|
12
|
+
release validation.
|
|
13
|
+
|
|
14
|
+
The upstream material and the Codex Connect modifications are distributed
|
|
15
|
+
under the Apache License, Version 2.0 included in LICENSE.
|
package/README.i18n.yaml
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
|
|
2
|
+
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
|
+
# after editing either side, bring the other along and re-record with:
|
|
4
|
+
# git hash-object README.md docs/README.zh.md
|
|
5
|
+
README.md: 6eedfff99162f49458c9fc6f5fc4dff502aa7dfc
|
|
6
|
+
docs/README.zh.md: 3fa64da86d3c1f1305f67a5e29e4255ca309eccb
|
package/README.md
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Codex Connect
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-codex-connect)
|
|
4
|
+
|
|
5
|
+
English | [中文](docs/README.zh.md)
|
|
6
|
+
|
|
7
|
+
Connect your ChatGPT subscription to DeepSeek Harness with OAuth, user-controlled defaults, Harness-native approvals, diagnostics, and reliable session recovery.
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
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
|
+
</p>
|
|
12
|
+
|
|
13
|
+
`dsh-codex-connect` adds the `openai-codex` model catalog and a separate ChatGPT OAuth login. Models run through Harness's normal LLM service, so streaming, tool calls, reasoning replay, compaction, filesystem controls, permission gates, and approval prompts remain Harness-owned. It does not turn a ChatGPT subscription into an OpenAI Platform API credential.
|
|
14
|
+
|
|
15
|
+
Installation is additive. The bundle does not replace the current default model or search route, and its standalone search provider and `view_image` tool are disabled until explicitly enabled.
|
|
16
|
+
|
|
17
|
+
Every UI screenshot in this English guide is captured from the English-localized Harness UI. The [Chinese guide](docs/README.zh.md) uses a Chinese capture of the same state. Model and provider identifiers keep their canonical spelling in both languages.
|
|
18
|
+
|
|
19
|
+
## Quick start (about five minutes)
|
|
20
|
+
|
|
21
|
+
This guide uses the `web` profile. Replace `web` with the name of the Harness profile you already use. You need a working `dsh` installation; from a DeepSeek Harness source checkout, prefix the commands with `pnpm`.
|
|
22
|
+
|
|
23
|
+
### 1. Install the plugin into one profile
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
dsh plugin --profile web add dsh-codex-connect@alpha
|
|
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
|
+
To reproduce this release exactly, use `dsh plugin --profile web add dsh-codex-connect@0.1.0-alpha.4.10`. If npm is unavailable after the matching GitHub prerelease exists, use `dsh plugin --profile web add 'github:franksong2702/dsh-codex-connect#v0.1.0-alpha.4.10'`. A local checkout can be installed as `link:/absolute/path/to/dsh-codex-connect`.
|
|
32
|
+
|
|
33
|
+
### 2. Start Harness
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
dsh web
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Expected result: the Harness web UI opens for the selected profile.
|
|
40
|
+
|
|
41
|
+
### 3. Find the Codex Connect card
|
|
42
|
+
|
|
43
|
+
Open **Settings → Plugins → Plugin configuration → Codex Connect**.
|
|
44
|
+
|
|
45
|
+
Expected result: a fresh installation shows **Not signed in** and a **Sign in with ChatGPT** button. The card is where you later manage optional capabilities too.
|
|
46
|
+
|
|
47
|
+
<p align="center">
|
|
48
|
+
<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="720">
|
|
49
|
+
</p>
|
|
50
|
+
|
|
51
|
+
### 4. Sign in with ChatGPT
|
|
52
|
+
|
|
53
|
+
Click **Sign in with ChatGPT** and complete the browser approval yourself. Do not copy an authorization URL, code, token, or account identifier into an issue, log, or configuration file.
|
|
54
|
+
|
|
55
|
+
Expected result: the account area changes to **Signed in**. The screenshot below is the successful end state after this step; it is not the initial sign-in screen.
|
|
56
|
+
|
|
57
|
+
<p align="center">
|
|
58
|
+
<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">
|
|
59
|
+
</p>
|
|
60
|
+
|
|
61
|
+
### 5. Choose a model and make one safe check
|
|
62
|
+
|
|
63
|
+
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.
|
|
64
|
+
|
|
65
|
+
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.
|
|
66
|
+
|
|
67
|
+
<p align="center">
|
|
68
|
+
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/model-selector.jpg" alt="OpenAI Codex model group in the English-localized DeepSeek Harness model picker" width="360">
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
To confirm the configured plugin row locally, run:
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
dsh --profile web --dump-config
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Expected result: the configuration has exactly one `llm-openai-codex` row. Keep this configuration dump local; it may include unrelated profile settings.
|
|
78
|
+
|
|
79
|
+
For secret-free status and diagnostics that do not start OAuth, run:
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
dsh plugin --profile web exec dsh-codex-connect status --json
|
|
83
|
+
dsh plugin --profile web exec dsh-codex-connect doctor --json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Expected result: `status --json` reports `signed-in` and exits `0`, while `doctor --json` prints one secret-free JSON document. A signed-out `status --json` exits `1`; return to step 4 instead of treating that as a plugin failure.
|
|
87
|
+
|
|
88
|
+
## Optional capabilities (off by default)
|
|
89
|
+
|
|
90
|
+
The installed bundle is intentionally inert beyond model-provider registration:
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
- id: llm-openai-codex
|
|
94
|
+
config:
|
|
95
|
+
enableSearch: false
|
|
96
|
+
enableImageTool: false
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Open **Settings → Plugins → Plugin configuration → Codex Connect** to manage the account and these options in one card. **Save changes** affects only this plugin's capability section and applies live. It never selects a default model or a global search route.
|
|
100
|
+
|
|
101
|
+
### Enable only the capability you intend to use
|
|
102
|
+
|
|
103
|
+
- `enableSearch: true` registers Codex as an available search provider. It does not select the profile's global search route.
|
|
104
|
+
- `enableImageTool: true` enables `view_image` for approved local reads and public-network image fetches on vision-capable models.
|
|
105
|
+
|
|
106
|
+
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.
|
|
107
|
+
|
|
108
|
+
<p align="center">
|
|
109
|
+
<img src="https://raw.githubusercontent.com/franksong2702/dsh-codex-connect/main/docs/assets/en/plugin-configuration.jpg" alt="English-localized Codex Connect optional capability configuration after explicit opt-in" width="720">
|
|
110
|
+
</p>
|
|
111
|
+
|
|
112
|
+
### Change a default model or global search route separately
|
|
113
|
+
|
|
114
|
+
To make a Codex model the default for new agents, add or update the separate Harness row yourself:
|
|
115
|
+
|
|
116
|
+
```yaml
|
|
117
|
+
- id: agent-default-model
|
|
118
|
+
config:
|
|
119
|
+
provider: openai-codex
|
|
120
|
+
model: gpt-5.6-sol
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Selecting Codex as the profile's global search route is another explicit change:
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
- id: llm-openai-codex
|
|
127
|
+
config:
|
|
128
|
+
enableSearch: true
|
|
129
|
+
searchMode: live
|
|
130
|
+
searchContextSize: medium
|
|
131
|
+
|
|
132
|
+
- id: web
|
|
133
|
+
config:
|
|
134
|
+
searchProvider: openai-codex
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
| Field | Default | Values |
|
|
138
|
+
|---|---:|---|
|
|
139
|
+
| `enableSearch` | `false` | boolean |
|
|
140
|
+
| `enableImageTool` | `false` | boolean |
|
|
141
|
+
| `searchModel` | `gpt-5.6-sol` | Codex model id |
|
|
142
|
+
| `searchMode` | `cached` | `cached`, `indexed`, `live` |
|
|
143
|
+
| `searchContextSize` | `medium` | `low`, `medium`, `high` |
|
|
144
|
+
| `searchMaxOutputTokens` | `10000` | positive integer |
|
|
145
|
+
|
|
146
|
+
## Reauthentication, diagnostics, and conflicts
|
|
147
|
+
|
|
148
|
+
- 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.
|
|
149
|
+
- `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.
|
|
150
|
+
- `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.
|
|
151
|
+
- 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.
|
|
152
|
+
- 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:
|
|
153
|
+
|
|
154
|
+
```sh
|
|
155
|
+
dsh plugin --profile web exec dsh-codex-connect trust-origin http://192.168.1.20:3080
|
|
156
|
+
dsh plugin --profile web exec dsh-codex-connect trusted-origins
|
|
157
|
+
dsh plugin --profile web exec dsh-codex-connect untrust-origin http://192.168.1.20:3080
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Replace the example with the exact origin from the browser address bar, including scheme and port; do not enter the accessing device's IP, a bare host, a path, a query, or a fragment. Trust only a network you control, never expose this route to the public Internet, and use an SSH tunnel as the fallback when explicit network trust is not appropriate. The browser page only displays and copies this command; it never changes the allowlist itself.
|
|
161
|
+
- 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.
|
|
162
|
+
- Removing the package does not delete OAuth state. Run `logout` only when credential removal is intended.
|
|
163
|
+
|
|
164
|
+
## Compatibility and security boundary
|
|
165
|
+
|
|
166
|
+
- The only verified compatibility combination is DSH plugin API packages `0.1.0-rc.7`, `@earendil-works/pi-ai` `0.82.1`, and Node.js `^22.19.0 || >=24.0.0`; see [compatibility.json](compatibility.json). Alpha 4.10 uses the rc.7 keyed Plugin configuration slot; DSH rc.6 users should remain on Alpha 4.9.
|
|
167
|
+
- 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.
|
|
168
|
+
- ChatGPT plan eligibility, model access, quotas, and backend behavior are controlled by OpenAI and may change.
|
|
169
|
+
- 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.
|
|
170
|
+
- Shell, filesystem, skills, MCP, subagents, approvals, permissions, attachments, session persistence, compaction, and recovery continue to come from the active Harness profile.
|
|
171
|
+
- 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.
|
|
172
|
+
- No real OAuth operation is required for installation, build, tests, doctor, or package validation.
|
|
173
|
+
|
|
174
|
+
See [INSTALL.md](INSTALL.md) for the idempotent agent runbook, [RELEASING.md](RELEASING.md) for the Alpha release checklist, [MIGRATION.md](MIGRATION.md) for migration from `dsh-codex`, and [docs/design.md](docs/design.md) for architecture details.
|
|
175
|
+
|
|
176
|
+
## Development
|
|
177
|
+
|
|
178
|
+
```sh
|
|
179
|
+
pnpm install --frozen-lockfile
|
|
180
|
+
pnpm run check
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Releases
|
|
184
|
+
|
|
185
|
+
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.
|
|
186
|
+
|
|
187
|
+
## Legal / Acknowledgements
|
|
188
|
+
|
|
189
|
+
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.
|
|
190
|
+
|
|
191
|
+
## License
|
|
192
|
+
|
|
193
|
+
Apache-2.0
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"engines": {
|
|
4
|
+
"node": "^22.19.0 || >=24.0.0"
|
|
5
|
+
},
|
|
6
|
+
"dshPluginApi": {
|
|
7
|
+
"version": "0.1.0-rc.7",
|
|
8
|
+
"packages": [
|
|
9
|
+
"@deepseek-ai/dsh-agent",
|
|
10
|
+
"@deepseek-ai/dsh-atomic-write",
|
|
11
|
+
"@deepseek-ai/dsh-attachment",
|
|
12
|
+
"@deepseek-ai/dsh-home-paths",
|
|
13
|
+
"@deepseek-ai/dsh-host-webserver",
|
|
14
|
+
"@deepseek-ai/dsh-invariants",
|
|
15
|
+
"@deepseek-ai/dsh-llm",
|
|
16
|
+
"@deepseek-ai/dsh-llm-pi-ai",
|
|
17
|
+
"@deepseek-ai/dsh-fs",
|
|
18
|
+
"@deepseek-ai/dsh-session",
|
|
19
|
+
"@deepseek-ai/dsh-settings",
|
|
20
|
+
"@deepseek-ai/dsh-tools",
|
|
21
|
+
"@deepseek-ai/dsh-web"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"piAi": {
|
|
25
|
+
"package": "@earendil-works/pi-ai",
|
|
26
|
+
"version": "0.82.1"
|
|
27
|
+
}
|
|
28
|
+
}
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Install the provider without changing the profile's current default model or
|
|
2
|
+
# web-search route. Optional capabilities require explicit profile config.
|
|
3
|
+
- insert:
|
|
4
|
+
- id: llm-openai-codex
|
|
5
|
+
name: dsh-codex-connect
|
|
6
|
+
config:
|
|
7
|
+
enableSearch: false
|
|
8
|
+
enableImageTool: false
|