CpfPatrick/dsh-codex-keychain
DeepSeek Harness的非官方ChatGPT OAuth提供商,支持原生操作系统钥匙串存储
项目介绍Project Overview
这是 DSH 的非官方 ChatGPT OAuth 插件,新增 openai-codex 模型路由,把完整 OAuth 凭据存入 macOS 钥匙串、Windows 凭据管理器或 Linux Secret Service,支持浏览器/设备码登录、自动刷新与状态查询。适合用合格 ChatGPT 账号访问 Codex 后端;无 API 密钥或明文文件回退。注意:alpha 固定适配 DSH 0.1.0-rc.6,且不提供配额、联网搜索或图像生成。
This is an unofficial DSH plugin that adds an openai-codex route using ChatGPT OAuth. It stores full credentials in the OS native keychain—macOS Keychain, Windows Credential Manager, or Linux Secret Service—with browser/device-code login, automatic refresh, and status checks. Use it to access the Codex backend from an eligible ChatGPT account; there is no API key or plaintext-file fallback. Caveat: the alpha targets DSH 0.1.0-rc.6 and omits quota, web search, and image generation.
请帮我了解并安装插件:【dsh-codex-keychain】【https://github.com/CpfPatrick/dsh-codex-keychain】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add dsh-codex-keychain@next
把 CpfPatrick/dsh-codex-keychain 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-codex-keychain
An unofficial, independent ChatGPT OAuth provider for
DeepSeek Harness. It adds the
openai-codex model route while keeping the complete OAuth credential in the
operating system's native credential store:
- macOS Keychain
- Windows Credential Manager
- Linux Secret Service
There is no OpenAI Platform API key involved, no fallback plaintext credential
file, and no reuse of ~/.codex/auth.json.
[!IMPORTANT] ChatGPT subscription access and OpenAI Platform API access are different products. This package connects only to the Codex backend made available to eligible ChatGPT accounts. It is not affiliated with or endorsed by OpenAI or DeepSeek.
Status
0.1.0-alpha.1 is a developer preview targeting DeepSeek Harness
0.1.0-rc.6 and @earendil-works/pi-ai 0.82.1.
Install
Install the prebuilt bundle into a DSH profile:
dsh plugin --profile web add dsh-codex-keychain@next
dsh web
Open Settings → OpenAI Codex, choose Sign in with browser, then click
Open authorization page and finish the OpenAI authorization. The plugin
deliberately does not change the default model; select an openai-codex model
from DSH's model picker after signing in.
For headless hosts or when the localhost callback cannot bind:
dsh plugin --profile web exec dsh-codex-keychain login --device-code
CLI
dsh plugin --profile web exec dsh-codex-keychain login
dsh plugin --profile web exec dsh-codex-keychain login --device-code
dsh plugin --profile web exec dsh-codex-keychain status
dsh plugin --profile web exec dsh-codex-keychain status --json
dsh plugin --profile web exec dsh-codex-keychain logout
status --json contains only the sign-in state, provider, platform, backend,
and—on failure—a stable code and safe message. It never includes tokens,
account IDs, or token timestamps.
Security model
The plugin stores a versioned manifest and bounded Base64 chunks entirely as
native credential items. The service is
io.github.CpfPatrick.dsh-codex-keychain; its root account is a SHA-256 digest
of the normalized DSH_HOME, and chunk accounts are derived from that digest.
Different Harness homes therefore do not share rotating refresh tokens. Two
fixed chunk banks keep updates crash-safe: a new bank is written and verified
before the small manifest is switched, then the retired bank is cleared. The
bounded items also stay below Windows Credential Manager's per-item limit.
Token refresh and logout use a non-secret cross-process lock under
$DSH_HOME/.locks. A refresh failure preserves the previous credential for a
later retry or explicit re-login. If the native credential store is missing,
locked, or unavailable, the plugin reports KEYCHAIN_UNAVAILABLE and refuses
to sign in—there is no silent file fallback.
Web authentication RPC is loopback-only. A remote DSH browser must run the CLI on the DSH host. OAuth URLs and device codes are transient; the plugin does not write them to application logs or persistent storage. The CLI displays them when required for login, so do not share or capture that terminal output.
See SECURITY.md for reporting and operational guidance.
Troubleshooting
KEYCHAIN_UNAVAILABLEon macOS: unlock the login keychain and allow the terminal or DSH process to use it. The plugin stays loaded but refuses model requests until secure storage works.KEYCHAIN_UNAVAILABLEon Windows: make sure Windows Credential Manager is available for the current user and that DSH is not running under a different service account.KEYCHAIN_UNAVAILABLEon Linux: run DSH inside a desktop or server session with a Secret Service provider, such as GNOME Keyring or KWallet, and a working D-Bus session. The plugin never substitutes a file backend or the Linux kernel keyring.- Browser callback cannot bind: the browser flow uses localhost port 1455. Stop the process occupying that port, use device-code login, or paste the callback response when the CLI or settings page asks for it.
- Another login is already running: one OAuth flow is allowed at a time across DSH and CLI processes. Finish or cancel that flow, then retry.
- A process crashed while holding a lock: first confirm that no DSH or
dsh-codex-keychainprocess for thisDSH_HOMEis still running. Only then, remove the orphaned$DSH_HOME/.locks/dsh-codex-keychain-openai-codex.lockand/or$DSH_HOME/.locks/dsh-codex-keychain-openai-codex-login.lock. Never remove a live process's lock. - Duplicate
openai-codexprovider: disable the other Codex/OAuth provider plugin and restart DSH. Two adapters cannot own the same model route. - Refresh or authorization failed: run login again. A failed refresh or incomplete login does not replace the previously stored credential.
- After a DSH upgrade: this alpha is pinned to DSH
0.1.0-rc.6; wait for a compatibility update or test the newer Developer Preview in an isolated profile before upgrading a working profile.
Remote browsers cannot call the authentication RPC. Run the CLI command on the DSH host instead. To remove the native credential before uninstalling:
dsh plugin --profile web exec dsh-codex-keychain logout
dsh plugin --profile web remove dsh-codex-keychain
Supported scope
The alpha includes:
- browser and device-code ChatGPT OAuth
- automatic locked token refresh
- the Codex model catalog and DSH model-picker integration
- DSH-native streaming, reasoning, tool calls, replay, and existing DSH image attachments/model vision
- a dedicated Web settings page and a headless CLI
It intentionally does not include quota displays, web search, a standalone image-viewing UI, or image generation.
Known alpha limitation: DSH 0.1.0-rc.6 resolves adapter authentication before
it creates the per-stream cancellation signal and idle watchdog. Normal model
streaming remains cancellable, but a network-stalled token refresh cannot be
cancelled by the current request. Do not remove a live process's writer lock;
stop that process first if recovery is required.
Development
Requirements: Node.js ^22.19 || >=24 and pnpm 11.7.0.
pnpm install
pnpm check
node scripts/native-keyring-smoke.mjs
The native smoke script sends a disposable OAuth-shaped document larger than
4 KiB through the production chunk store, verifies it, and deletes every item
in finally. Unit tests use an injected in-memory driver and never touch the
developer's real keychain.
Acknowledgements and clean-room boundary
The DSH community already has OAuth plugins, including
Yan-Zero/dsh-codex. This repository
was implemented independently against the public DSH and pi-ai interfaces; it
does not copy that project's source. The narrow differentiator here is strict,
cross-platform native credential storage with no ordinary-file fallback.
License
MIT
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS