@agentrouter-top/relay-dsh-plugin-codex 0.2.2-agentrouter.1

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.
@@ -0,0 +1,7 @@
1
+ # AgentRouter distribution of Relay Codex
2
+
3
+ Upstream: https://github.com/yangbobo2021/relay-dsh-plugin-codex.git @ 75918b3e06880df25375154321109f364124a544 (MIT).
4
+
5
+ Changes: version 1 generic codexHome/codexEnv launch interface, Codex 0.153.4, and package/build identity. No agent protocol, model picker, effort controls or tool implementation replaced.
6
+
7
+ Sources and checksummed contributions: https://github.com/Maybank01/agentrouter-dsh-plugins/tree/main/upstream/relay-codex
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 yangbobo2021 and Relay contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,419 @@
1
+ # Codex Conversations for DeepSeek Harness
2
+
3
+ > **Now supports DSH `0.1.2-rc.1` while retaining `0.1.2-alpha.3` compatibility.** Plugin `0.2.2` is verified on both releases. [Install it from npm](https://www.npmjs.com/package/relay-dsh-plugin-codex) · [Compatibility evidence](https://github.com/yangbobo2021/Relay/tree/codex/relay-foundation/dsh-lab/dsh-0.1.2-rc.1-20260903).
4
+
5
+ > **Release channels:** `latest` → `0.2.2`; `next` → `0.2.1-rc.1`.
6
+
7
+ ```bash
8
+ npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add relay-dsh-plugin-codex@0.2.2
9
+ npx @deepseek-ai/dsh@0.1.2-rc.1 web
10
+ ```
11
+
12
+ [![npm version](https://img.shields.io/npm/v/relay-dsh-plugin-codex?label=npm)](https://www.npmjs.com/package/relay-dsh-plugin-codex)
13
+ [![CI](https://github.com/yangbobo2021/relay-dsh-plugin-codex/actions/workflows/ci.yml/badge.svg)](https://github.com/yangbobo2021/relay-dsh-plugin-codex/actions/workflows/ci.yml)
14
+ [![npm downloads](https://img.shields.io/npm/dm/relay-dsh-plugin-codex?label=downloads)](https://www.npmjs.com/package/relay-dsh-plugin-codex)
15
+ [![GitHub stars](https://img.shields.io/github/stars/yangbobo2021/relay-dsh-plugin-codex?style=flat)](https://github.com/yangbobo2021/relay-dsh-plugin-codex/stargazers)
16
+ [![MIT license](https://img.shields.io/github/license/yangbobo2021/relay-dsh-plugin-codex)](LICENSE)
17
+ [![DSH compatibility](https://img.shields.io/badge/DSH-0.1.1--rc.2%20%7C%200.1.2--alpha.2%20%7C%200.1.2--alpha.3-2f7d68)](https://github.com/deepseek-ai/deepseek-harness)
18
+ [![npm provenance](https://img.shields.io/badge/npm_provenance-verified-2f9e44)](https://www.npmjs.com/package/relay-dsh-plugin-codex/v/0.2.1)
19
+
20
+ English | [中文](README.zh.md)
21
+
22
+ **npm package:** [`relay-dsh-plugin-codex`](https://www.npmjs.com/package/relay-dsh-plugin-codex)
23
+ · [All Relay DSH plugins](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/dsh-plugins.md)
24
+
25
+ **Run Codex inside official DeepSeek Harness without switching interfaces or
26
+ maintaining a DSH fork.**
27
+
28
+ `relay-dsh-plugin-codex` adds **Codex as a native conversation backend** to the
29
+ official [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)
30
+ (DSH) Web UI. You keep DSH's workspace, conversation history, composer,
31
+ approvals, and tools while each DSH Session continues one Codex App Server
32
+ Thread. The plugin installs independently; no Relay checkout is required.
33
+
34
+ ## Try It on Official DSH
35
+
36
+ Authenticate with an official Codex client before the first Session. Codex CLI
37
+ users can run:
38
+
39
+ ```bash
40
+ codex login
41
+ ```
42
+
43
+ The install requires Node.js 22.13 or newer and `pnpm` on `PATH`. Stop DSH Web,
44
+ install the stable plugin, and restart DSH:
45
+
46
+ ```bash
47
+ npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add relay-dsh-plugin-codex@latest
48
+ npx @deepseek-ai/dsh@0.1.2-rc.1 web
49
+ ```
50
+
51
+ Open **New Session**, select a workspace, choose **Codex** from the mode menu,
52
+ and send a message.
53
+
54
+ ![Codex and Claude Code in the DSH New Session mode menu](docs/images/dsh-new-session-backends.jpg)
55
+
56
+ The screenshot was captured from official DSH `0.1.1-rc.2` with the Codex and
57
+ Claude plugins installed. If you install only this plugin, only **Codex** is
58
+ added.
59
+
60
+ [Watch Plugin Manager find and install this package in 40 seconds](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/media/dsh-plugin-manager-codex-install-demo.en.mp4?raw=1)
61
+ · [review all Relay DSH plugins](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/dsh-plugins.md)
62
+
63
+ If this removes an interface switch from your DSH workflow,
64
+ [star this plugin](https://github.com/yangbobo2021/relay-dsh-plugin-codex) and
65
+ [share your DSH version or install feedback](https://github.com/yangbobo2021/relay-dsh-plugin-codex/issues).
66
+ That signal helps other DSH users find a tested Codex backend.
67
+
68
+ ## Do I Need This Plugin?
69
+
70
+ Install it when you want to:
71
+
72
+ - use Codex inside DSH instead of switching to a separate Codex interface;
73
+ - keep DSH's native conversation history, composer, approvals, and questions;
74
+ - let one DSH Session continue the same Codex App Server Thread across turns;
75
+ - use Codex models, reasoning effort, images, interruption, and DSH-contributed
76
+ tools in the same conversation.
77
+
78
+ You do not need it to use DSH's standard agents. It also does not add Relay
79
+ Events, file browsing, or a terminal panel. Those are separate optional plugins.
80
+
81
+ ## Complete Setup and Compatibility
82
+
83
+ The steps below were validated with:
84
+
85
+ - DeepSeek Harness `0.1.1-rc.2`, commit
86
+ [`b150a551`](https://github.com/deepseek-ai/deepseek-harness/commit/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e)
87
+ - Node.js 22.13 or newer
88
+ - `pnpm` available on `PATH`
89
+
90
+ DSH is currently a developer preview and may introduce compatibility-breaking
91
+ changes. This repository tracks official releases and records its tested version
92
+ here.
93
+
94
+ ### 1. Prepare Codex authentication
95
+
96
+ The plugin installs a pinned official `@openai/codex` runtime and launches it in
97
+ App Server mode. The runtime contains native binaries for macOS, Windows, and
98
+ Linux on x64 and arm64, so DSH does not need to find a `codex` command on its
99
+ `PATH`.
100
+
101
+ Codex authentication is still required. Install or open an official Codex
102
+ client and authenticate it before starting your first DSH Codex session. When
103
+ using the CLI, verify the shared local credentials with:
104
+
105
+ ```bash
106
+ codex --version
107
+ codex login
108
+ ```
109
+
110
+ See the official [Codex CLI guide](https://learn.chatgpt.com/docs/codex/cli) and
111
+ [authentication documentation](https://learn.chatgpt.com/docs/auth) for
112
+ installation and sign-in options. Credentials stay under Codex's normal local
113
+ authentication mechanism; this plugin does not collect them. Installing this
114
+ plugin supplies its App Server runtime, but does not add a global `codex` shell
115
+ command.
116
+
117
+ ### 2. Choose a package source and install
118
+
119
+ Stop a running DSH Web process before changing Profile bundles. Choose one of
120
+ the following sources.
121
+
122
+ #### Stable npm release
123
+
124
+ The published npm package name is
125
+ [`relay-dsh-plugin-codex`](https://www.npmjs.com/package/relay-dsh-plugin-codex).
126
+ Use `@latest` to install the current stable release:
127
+
128
+ ```bash
129
+ npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add relay-dsh-plugin-codex@latest
130
+ ```
131
+
132
+ At the time of writing, `latest` resolves to stable version `0.2.1`. The linked
133
+ npm page is the source of truth for the current version.
134
+
135
+ #### npm prerelease (recommended during DSH preview)
136
+
137
+ Use `@next` to try the newest release candidate that has passed the repository's
138
+ CI publishing and official DSH compatibility checks. The current candidate also
139
+ contains the bundled cross-platform App Server runtime, so DSH does not depend
140
+ on a global `codex` executable:
141
+
142
+ ```bash
143
+ npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add relay-dsh-plugin-codex@next
144
+ ```
145
+
146
+ The `next` tag remains on `0.2.1-rc.1`; `latest` points to `0.2.1`.
147
+ Check the npm registry for the currently published dist-tag before installing.
148
+
149
+ This prerelease preserves native service-tier and resumed-thread settings, stops
150
+ late commands belonging to canceled turns, rejects stale interaction replies, and
151
+ retains dynamic-tool errors. New conversations receive bounded execution guidance;
152
+ set `codexExecutionGuidance: false` to disable it, or `codexExecutionMode: native`
153
+ to compare without DSH dynamic tools and guidance. The default mode is `enhanced`.
154
+ The host identifies itself as DSH and does not advertise unimplemented Desktop
155
+ attestation or MCP App HTML rendering. Dependency discovery reports existing paths.
156
+
157
+ The bundled runtime is `@openai/codex@0.153.4`, including native GPT-6 Astra
158
+ model discovery and reasoning controls; Desktop's experimental binary
159
+ is not redistributed or required. This is not complete Desktop parity. Known
160
+ limitations include occasional empty native command-event output even when the
161
+ model received the error, and a macOS locale issue affecting tools such as
162
+ `shasum`. These have not been declared fixed. To roll back, stop DSH, reinstall
163
+ `relay-dsh-plugin-codex@0.2.0`, restore any changed profile configuration, and restart.
164
+
165
+ #### GitHub development build
166
+
167
+ Install the current `main` branch when testing an unreleased change:
168
+
169
+ ```bash
170
+ npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add github:yangbobo2021/relay-dsh-plugin-codex#main
171
+ ```
172
+
173
+ `main` can change at any time. For a reproducible GitHub install, pin a Tag or
174
+ full Commit SHA instead. For example:
175
+
176
+ ```bash
177
+ npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add github:yangbobo2021/relay-dsh-plugin-codex#v0.2.2
178
+ ```
179
+
180
+ The official DSH CLI initializes the `web` Profile if it does not exist, asks
181
+ `pnpm` to install the selected package, and adds the plugin's bundle layer. No
182
+ Relay checkout is required. If you already installed the `dsh` command, replace
183
+ the `npx @deepseek-ai/dsh@0.1.2-rc.1` prefix with `dsh` in any command above.
184
+
185
+ ### 3. Start or restart DSH Web
186
+
187
+ ```bash
188
+ npx @deepseek-ai/dsh@0.1.2-rc.1 web
189
+ ```
190
+
191
+ If you use an installed command, run `dsh web` instead. Bundle membership is read
192
+ at startup, so restarting after installation, update, or removal is required.
193
+
194
+ ### 4. Start a Codex conversation
195
+
196
+ 1. Open the DSH URL printed in the terminal. The default is
197
+ `http://127.0.0.1:3080`.
198
+ 2. On first launch, read the DSH testing notice and select **Continue**.
199
+ 3. Select **Add workspace** in the left sidebar and choose the project directory
200
+ Codex may work in.
201
+ 4. Select **New Session**.
202
+ 5. Open the mode menu labeled **Standard mode** and choose **Codex**.
203
+ 6. Enter a message and send it. Choose the backend before the first message;
204
+ existing sessions keep the backend with which they were created.
205
+
206
+ There is no separate activation command. A successful install plus a DSH restart
207
+ activates the bundle and registers the managed **Codex** mode automatically.
208
+
209
+ ### 5. Import existing Codex sessions for a Workspace
210
+
211
+ 1. Select the compact Codex import icon below the Workspace list and above Settings.
212
+ 2. In the dialog, confirm or change the visible **Target Workspace**, then select
213
+ **Scan sessions**. The current Session owner or recent Workspace is only the
214
+ initial selection; scanning never starts before this confirmation.
215
+ 3. Review each eligible Codex Thread's full ID, title, source path, last activity,
216
+ and ready or recoverable status. Select one, several, or all Threads.
217
+ 4. Select **Import selected**.
218
+ 5. Confirm that imported rows already show their Codex titles and source activity
219
+ order, then open any Session and continue chatting.
220
+
221
+ Only eligible Threads from the explicitly selected Workspace are shown. Already-bound
222
+ Threads and Threads from another Workspace cannot be selected. Titles and recency
223
+ are available before a Session is opened; batch execution time does not replace
224
+ the Codex inventory `thread/list.updatedAt` order.
225
+ Codex App Server remains authoritative for model context, tool state, and
226
+ compaction. DSH stores native user/assistant presentation history and the durable
227
+ one-to-one binding; it does not copy private Codex runtime records. Each time an
228
+ imported Session is opened, the plugin reads that Codex Thread once and appends
229
+ any missing terminal user/assistant Turns to DSH's presentation history, including
230
+ interrupted or failed Turns with visible messages. Only an `inProgress` Turn waits for
231
+ the next open. It does
232
+ not poll in the background, synchronize while the Session stays open, or add a
233
+ manual refresh action.
234
+
235
+ ## What Works
236
+
237
+ - One persistent Codex App Server Thread per DSH Session
238
+ - Model and reasoning-effort selection
239
+ - Streaming answers and reasoning in the native DSH conversation
240
+ - Live output from long-running Codex shell commands in newly created Sessions, retained in DSH history
241
+ - DSH approval and user-question flows
242
+ - Images, interruption, and continuation
243
+ - Generic DSH tools exposed under the Codex App Server `dsh` namespace
244
+ - Optional terminal transport when the separate Relay terminal plugin is present
245
+
246
+ Tools execute through the owning Agent's DSH tool runtime and remain subject to
247
+ DSH permissions and Codex approval behavior.
248
+
249
+ ## Reliability and App Server Lifecycle
250
+
251
+ The DSH Host plugin owns the Codex App Server process. It starts one child while
252
+ the plugin activates, before Codex model discovery, and stops it when DSH or the
253
+ plugin shuts down. The default child comes from the pinned `@openai/codex`
254
+ dependency, so a global `codex` command is not required.
255
+
256
+ Open **Settings → Advanced** to see whether Codex is **Connected**, **Not
257
+ started**, **Starting**, **Connection failed**, or **Codex unavailable**. A
258
+ forked Session that inherited Codex history without a safe one-to-one binding
259
+ shows **Rebind required** in its Session header. Installation and connection
260
+ errors include a stable error code and a next action; raw errors such as `spawn
261
+ codex ENOENT` are not shown as the user instruction.
262
+
263
+ On a blank New Session, switching among Standard, Codex, and Claude selects the
264
+ matching backend's model group and default reasoning effort. Delayed Codex model
265
+ discovery is retried, and an older asynchronous result cannot overwrite a newer
266
+ backend choice.
267
+
268
+ Forks use the Codex App Server `thread/fork` method. The child DSH Session sends
269
+ the inherited parent Thread id and completed `lastTurnId`; the returned child
270
+ Thread gets a new durable one-to-one binding. The operation fails closed if
271
+ provenance is incomplete, the source Thread has no owning DSH Session, or App
272
+ Server rejects the fork: Relay never falls back to `thread/start`. Existing
273
+ persisted bindings are also retained when resume fails. A pending approval is
274
+ answered only if its DSH Session, Codex Thread, Turn, Item, request, and binding
275
+ generation still match after reconnect; otherwise it is rejected with
276
+ diagnostic provenance.
277
+
278
+ See the [reliability specification](docs/reliability-spec.md) and
279
+ [executable acceptance matrix](docs/reliability-acceptance.md). Approval and
280
+ structured-question composition is defined by the
281
+ [DSH interaction bridge specification](docs/spec/dsh-interaction-bridge.md).
282
+
283
+ ## Plugin Boundary and Relay
284
+
285
+ This repository was designed and compatibility-tested in
286
+ [Relay](https://github.com/yangbobo2021/Relay), an open-source project for
287
+ long-running agent work, external-event delivery, reusable DSH workbench views,
288
+ and multiple conversation backends.
289
+
290
+ The plugin is independently installable. Its only Relay package dependency is
291
+ the provider-neutral session import hub, which the package manager installs
292
+ automatically. It has no runtime dependency on the Relay application, Relay
293
+ Events, or another feature plugin. It does not replace the official DSH layout
294
+ or install Files and Terminal views. This separation lets a user install only
295
+ Codex while the broader Relay project can compose Codex, Claude, events, waits,
296
+ monitors, and workbench extensions when those capabilities are needed.
297
+
298
+ Explore or star Relay to follow that broader work:
299
+ <https://github.com/yangbobo2021/Relay>.
300
+
301
+ ## Update, Inspect, or Remove
302
+
303
+ Stop DSH Web before changing the bundle, then restart it afterward.
304
+
305
+ ```bash
306
+ # Show why the plugin is installed
307
+ dsh plugin --profile web why relay-dsh-plugin-codex
308
+
309
+ # Update the npm dependency
310
+ dsh plugin --profile web update relay-dsh-plugin-codex
311
+
312
+ # Remove it
313
+ dsh plugin --profile web remove relay-dsh-plugin-codex
314
+ ```
315
+
316
+ Use the `npx @deepseek-ai/dsh@0.1.2-rc.1` prefix instead of `dsh` when you do not
317
+ have a persistent DSH command.
318
+
319
+ ## Troubleshooting
320
+
321
+ ### Codex is missing from the mode menu
322
+
323
+ Restart DSH Web. Then run `dsh plugin --profile web why
324
+ relay-dsh-plugin-codex`. If pnpm cannot find the package, repeat the npm
325
+ installation command and read its final error.
326
+
327
+ ### The first message reports an authentication or executable error
328
+
329
+ Run `codex login` with an official Codex client under the same operating-system
330
+ user that starts DSH, then restart DSH. The plugin normally uses its bundled
331
+ official `@openai/codex` runtime and does not depend on `PATH`.
332
+
333
+ If the error says the bundled runtime is missing, update or reinstall the plugin
334
+ so the package manager restores the platform-specific optional dependency. A
335
+ managed deployment can explicitly select another native Codex executable:
336
+
337
+ ```bash
338
+ # macOS or Linux
339
+ RELAY_CODEX_COMMAND=/absolute/path/to/codex dsh web
340
+ ```
341
+
342
+ ```powershell
343
+ # Windows PowerShell
344
+ $env:RELAY_CODEX_COMMAND = 'C:\absolute\path\to\codex.exe'
345
+ dsh web
346
+ ```
347
+
348
+ The DSH bundle configuration property `codexCommand` has higher priority than
349
+ `RELAY_CODEX_COMMAND`. Prefer an absolute native executable path; leaving both
350
+ unset selects the bundled, plugin-tested Codex version.
351
+
352
+ If Settings shows `CODEX_EXECUTABLE_NOT_FOUND`, remove an invalid
353
+ `codexCommand`/`RELAY_CODEX_COMMAND` override or replace it with an absolute
354
+ path. `CODEX_RUNTIME_MISSING` means the platform optional dependency must be
355
+ restored by reinstalling the plugin. **Connection failed** instead means the
356
+ executable was found but App Server initialization or its process failed.
357
+
358
+ ### A forked Session says Rebind required
359
+
360
+ Normal forks call App Server `thread/fork` and bind the returned child Thread.
361
+ This status means the source Thread/Turn could not authorize or complete that
362
+ operation—for example, the Turn was still running, provenance was incomplete,
363
+ or the source binding no longer existed. Return to the original DSH Session,
364
+ fix the reported condition, and retry Fork. The plugin intentionally does not
365
+ fall back to a fresh replacement Thread.
366
+
367
+ ### The composer is disabled
368
+
369
+ DSH requires a workspace before starting a coding conversation. Select **Add
370
+ workspace**, choose a directory, and return to **New Session**.
371
+
372
+ ### An imported Session says the Codex thread is open in another client
373
+
374
+ Codex permits only one App Server writer for a Thread. Switching to another Thread
375
+ in Codex Desktop may leave the writer held by that App Server process. Fully quit or
376
+ restart the owning Codex app, CLI, or App Server process, then retry the message in
377
+ DSH. The plugin keeps the original one-to-one binding and never creates a replacement
378
+ Thread. There is no safe force-takeover operation in the App Server protocol. Opening
379
+ the Session can still synchronize terminal presentation history through
380
+ `thread/read`; only continuation is blocked by writer ownership.
381
+
382
+ ### Installation says pnpm is missing
383
+
384
+ Install pnpm using its [official installation guide](https://pnpm.io/installation)
385
+ and confirm `pnpm --version` works in the same terminal.
386
+
387
+ ### DSH changed and the plugin no longer starts
388
+
389
+ DSH is a developer preview. Include the output of `dsh --version`, the plugin
390
+ source revision, and the startup error in a
391
+ [GitHub issue](https://github.com/yangbobo2021/relay-dsh-plugin-codex/issues).
392
+
393
+ ## Development
394
+
395
+ ```bash
396
+ git clone https://github.com/yangbobo2021/relay-dsh-plugin-codex.git
397
+ cd relay-dsh-plugin-codex
398
+ npm install
399
+ DSH_ROOT=/path/to/deepseek-harness npm run verify
400
+ npm pack
401
+ ```
402
+
403
+ `npm run verify` runs type checking, tests, and the production build. Boundary
404
+ tests reject accidental runtime dependencies on Relay or another feature plugin.
405
+
406
+ ## Feedback
407
+
408
+ Report bugs and feature requests in this repository's
409
+ [issue tracker](https://github.com/yangbobo2021/relay-dsh-plugin-codex/issues).
410
+
411
+ ### Published stable installation
412
+
413
+ Stable `0.2.1` targets DSH `0.1.1-rc.2`, `0.1.2-alpha.2`, and `0.1.2-alpha.3`; install it from npm `latest` or Git tag `v0.2.1`.
414
+
415
+ ```sh
416
+ npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add relay-dsh-plugin-codex@next
417
+ # Git tag alternative, after publication:
418
+ npx @deepseek-ai/dsh@0.1.2-rc.1 plugin --profile web add github:yangbobo2021/relay-dsh-plugin-codex#v0.2.2
419
+ ```