dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Use a ChatGPT Plus or Pro subscription as an LLM provider in DeepSeek Harness.
The plugin adds device-code OAuth login through the Web settings UI and an interactive Harness /codex slash command. It does not run a browser callback server or localhost listener. After login, Codex models appear with other providers, tokens refresh automatically, and Web shows 5-hour and weekly limits in a Codex limits popup.
Rendered by the real plugin UI with sanitized demonstration balances.
The limits view and the live model-catalog sync use OpenAI's undocumented Codex endpoints. Their availability and response shape may change without notice.
0.1.0-rc.6 or a compatible release.dsh plugin command.auth.openai.com and chatgpt.com.DSH reconciles plugins per profile. Install the package in every profile where the provider or /codex command is needed; web is shown here:
dsh plugin --profile web add -w @syncended/dsh-codex
For local development, install a checkout instead:
dsh plugin --profile web add -w /absolute/path/to/deepseek-harness-openai-codex
The package declares a DSH bundle. It registers the openai-codex route and maps its credential automatically, so no dsh settings set command is needed. Restart the selected profile after installing or upgrading.
To remove it:
dsh plugin --profile web remove @syncended/dsh-codex
openai-codex/... model from the standard model selector and send a test prompt.Like other DSH credential settings, Web login is restricted to a loopback/same-origin Host session. For a remote Host, use an authenticated SSH/local tunnel to its loopback Web UI rather than exposing credential operations publicly.
/codex is a Harness slash command, not a shell executable. Run it inside an interactive profile that has this plugin installed:
| Command | Description |
|---|---|
/codex login | Start the device-code flow and print the verification URL and code. |
/codex status | Show token status and expiry. |
/codex models | Re-read OpenAI's Codex model catalog and republish it to the model selector. |
/codex logout | Delete the stored token file and unpublish the live credential. |
{ access, refresh, expires } in $DSH_HOME/openai-codex.json by default.OPENAI_CODEX_TOKEN.llm-pi-ai route uses the openai-codex-responses API and serves the installed pi-ai Codex catalog directly. It declares no models list: in dsh-llm-pi-ai a configured list replaces the catalog rather than extending it, so a hard-coded list would freeze model availability at this package's release.llm-pi-ai settings section, because the installed pi-ai catalog is a snapshot that lags what ChatGPT actually serves. Every model OpenAI still offers appears — including models it marks with an upgrade successor, which remain usable until OpenAI retires them — while rows the catalog hides or excludes from the API are dropped. The sync runs at startup, after login, on /codex models, and every modelCatalogRefreshMs.Protect $DSH_HOME: the token file is sensitive local credential state. /codex logout removes it and clears the published credential.
The defaults normally need no changes. To override them, edit the existing openai-codex row in $DSH_HOME/profiles/<profile>/cordis.patch.yml and restart that profile:
- id: openai-codex
config:
# clientId: app_EMoamEEZ…hrann
credentialRef: OPENAI_CODEX_TOKEN
deviceCodeTimeoutSeconds: 900
refreshWindowMs: 300000
modelCatalogRefreshMs: 21600000
# modelCatalogExclude:
# - gpt-5.5
# dshHome: /absolute/path/to/dsh-home
# tokenFile: /absolute/private/path/openai-codex.json
| Key | Default | Description |
|---|---|---|
clientId | built in | OpenAI OAuth client ID used by the device flow. |
credentialRef | OPENAI_CODEX_TOKEN | DSH credential ref receiving the live access token. |
deviceCodeTimeoutSeconds | 900 | Maximum time to approve a device login. |
refreshWindowMs | 300000 | Refresh-loop scheduling window; the implementation still refreshes only near expiry. |
modelCatalogRefreshMs | 21600000 | Interval between Codex model-catalog syncs (6 hours). |
modelCatalogExclude | [] | Optional ids to hide even though the catalog still offers them. Empty by default: every available model is published. |
dshHome | normal DSH home | Alternate base directory used to derive the default token path. |
tokenFile | $DSH_HOME/openai-codex.json | Absolute token persistence path; takes precedence over dshHome. |
Token-path precedence is tokenFile, then dshHome, then DSH_HOME, then ~/.dsh.
Two sources feed the selector, in this order:
models list, so the route serves the whole Codex catalog installed with pi-ai.models in the llm-pi-ai settings section with the live list from OpenAI's own Codex model catalog (/backend-api/codex/models). This is what makes models appear that pi-ai has not shipped yet. The write lands in $DSH_HOME/settings.yaml, so the last synced list survives a Host restart and a temporarily unreachable backend.A models list replaces the catalog instead of extending it, which is why the plugin writes the complete live list rather than individual entries. To pin a subset by hand, edit the openai-codex provider in settings.yaml; the next scheduled sync will overwrite it again, so set modelCatalogRefreshMs to a large value if a manual list must stand.
llm-pi-ai:
providers:
openai-codex:
models:
- id: gpt-6-astra
- id: gpt-6-sol
- id: gpt-6-luna
The sync publishes every model the catalog marks as available:
visibility: hide) or excludes from the API (supported_in_api: false) are dropped — gpt-reserve, codex-auto-review are internal and never usable;upgrade hint for (gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.5). An upgrade is a migration suggestion, not a retirement: OpenAI keeps those models servable, so they stay selectable;modelCatalogExclude is the only way to hide an available model, and it is empty by default.Models the catalog describes keep their context window, token cap, modalities, and reasoning levels; a synced entry overrides only the fields it sets. Reasoning levels the harness does not know (for example ultra) are dropped rather than mistranslated.
Models that pi-ai does not describe (for example gpt-6-sol) are declared without the catalog's compat flags, because dsh-llm-pi-ai only offers those to catalog rows. Basic requests work; the optional grammar-tool and tool-search switches stay off until pi-ai ships the model.
If credentialRef is changed, update the matching provider mapping in the existing llm-pi-ai row as well; otherwise the route continues reading OPENAI_CODEX_TOKEN:
- id: llm-pi-ai
config:
providers:
openai-codex:
displayName: OpenAI Codex
apiKeyEnv: MY_CODEX_TOKEN_REF
/codex status reports a credential. If only some Codex models show, a hand-pinned models list is shadowing the synced one./codex models to re-read OpenAI's catalog, then check the Host log if the sync failed. A model whose minimal_client_version is newer than the plugin's CODEX_CLIENT_VERSION stays hidden until the plugin is updated.modelCatalogExclude. Clear the exclude list or pin a manual models list to keep one./codex login, and approve before the 15-minute timeout./backend-api/codex/models is undocumented and may change; the last synced list stays in $DSH_HOME/settings.yaml, so the selector keeps working until a later sync succeeds.credentialRef matches the llm-pi-ai provider mapping.npm test
npm pack --dry-run
Tag-driven publication is documented in RELEASING.md.
MIT — see LICENSE.