dsh-llm-xai-oauth
Đã xác minhdsh-llm-xai-oauth · v0.1.7 · MIT
Use a SuperGrok / X Premium subscription inside DeepSeek Harness. Device-code OAuth, grok-bridge token reuse, no xAI API key. Works in headless, web, and any TUI.
Cài đặt
dsh plugin add dsh-llm-xai-oauth Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Thẻ
Readme
dsh-llm-xai-oauth
已经在付 SuperGrok / X Premium 的话,用这个插件把订阅接进 DeepSeek Harness:
原生 xai 路由、grok-4.7、设备码登录、token 刷新不依赖某个 TUI 开着。不需要 xAI API Key。
headless、web、任意终端 profile 都能用。 SSH 终端 dsh-ssh-tui 可以叠在上面,不是前置条件。
English: README.md
dshfind 插件目录 已收录(请用 npm 安装,不要用页面上过期的 git 源):
从 npm 装(开发时才用 GitHub 源):
dsh plugin --profile headless add dsh-llm-xai-oauth@latest
npx dsh-llm-xai-oauth login
npx dsh-llm-xai-oauth daemon --install
dsh --profile headless --provider xai --model grok-4.7
profile 换成 web 或 tui 即可。更新必须带 @latest。 写成裸的 add dsh-llm-xai-oauth 时,pnpm 会沿用 lockfile 里钉死的旧版。
你要先知道的三件事
- 这是订阅 OAuth,不是 API Key。 装好插件后,dsh 走
https://cli-chat-proxy.grok.com,用~/.grok-bridge/auth.json里的 access token。 - access token 大约 1 小时过期。 只开着 dsh 时,插件会在过期前 5 分钟、以及遇到 401 时刷新。dsh 没开着的时候,这个刷新不会发生。
- 所以要另开一个刷新进程。 用
dsh-llm-xai-oauth daemon,不要指望 TUI / headless 进程帮你整夜续期。
/usage 报 401、发消息也 401,几乎都是:token 已经过期,而当时没有进程在刷新。
5 分钟配好
下面默认你已经能运行 dsh(npm i -g @deepseek-ai/dsh,已验证 0.1.5-rc.1 至 0.1.5-rc.3、0.1.7-rc.1/0.1.7-rc.2、0.2.0-rc.1/0.2.0-rc.2(桌面端安装包所在的版本线)),Node.js ≥ 22.19。0.1.2 与 0.1.6 alpha 不支持。
1. 把插件装进 profile
dsh plugin --profile headless add dsh-llm-xai-oauth@latest
dsh plugin --profile web add dsh-llm-xai-oauth@latest
dsh plugin --profile tui add dsh-llm-xai-oauth@latest
确认 bundle 在(要看到 id: llm-xai-oauth。没有这条,/model 里不会出现可调用的 SuperGrok 路由):
dsh --profile headless --dump-config | grep llm-xai-oauth
本机仓库只给开发用。日常请走 npm;目录里过期的 github: 装法在 pnpm ≥ 10 上还会拦 prepare 脚本。
2. 登录一次(有浏览器的机器上)
本机已经用过 grok-bridge 或官方 Grok CLI、并且 ~/.grok-bridge/auth.json / ~/.grok/auth.json 还在,这一步会自动复用,不再弹浏览器。
否则在能打开 auth.x.ai 的终端里:
npx dsh-llm-xai-oauth login
# 已有 token 也要重登:
npx dsh-llm-xai-oauth login --force
终端会打印一个 URL 和用户码。用浏览器打开、授权 SuperGrok / X Premium。成功后写入:
- token:
~/.grok-bridge/auth.json(权限0600) - dsh 默认模型:
$DSH_HOME/settings.yaml的agent-default-model→xai/grok-4.7
(如果已经是xai,不会改你选的 grok 模型和思考强度)
没有 TTY 的 headless / CI 不会提示登录。TTY 上也可以设 DSH_XAI_OAUTH_NO_LOGIN=1 跳过。
Windows 与桌面端:可视化首次引导
Windows 桌面端不带控制台,只在终端里打印设备码等于没人看得到。所以在 win32 上插件改为在本地起一个页面、用默认浏览器打开,在同一页里完成设备码授权:
- 页面上直接给出设备码、复制按钮和「打开授权页面」按钮;
- 轮询授权状态,xAI 一确认就变成「已连接」,不用手动刷新;
- 浅色 / 深色两套主题,和 DeepSeek Harness 桌面端一致。
页面只监听 127.0.0.1 的随机端口,并且挂在一条 128 位随机路径下,本机其他进程读不到待授权的设备码。除 xAI 接口外不依赖任何外部资源。
任意平台都可以手动开启或关闭:
npx dsh-llm-xai-oauth login --ui # 在 Linux/macOS 上也走可视化引导
GROK_BRIDGE_NO_BROWSER=1 npx dsh-llm-xai-oauth login # 完全不打开浏览器
如果打不开浏览器,引导页地址会打到 stderr,可以自己复制去打开。
看当前 token 还剩多久:
npx dsh-llm-xai-oauth status
3. 挂上自动刷新(和 dsh 无关)
access token 短。TUI、headless、定时任务如果在 token 过期后才启动,读到的就是过期 token,/usage 和对话都会 401。
推荐:用户级 systemd
npx dsh-llm-xai-oauth daemon --install
它会写入 ~/.config/systemd/user/dsh-llm-xai-oauth.service 并 enable --now。这个进程每分钟看一次 auth.json,过期前 5 分钟刷新,不需要 dsh 在跑。
没有 systemd、或不想装 user unit,二选一:
# 前台看着跑
npx dsh-llm-xai-oauth daemon
# 或 cron,每 20 分钟刷一次(token 仍有效时是空操作)
*/20 * * * * npx --yes dsh-llm-xai-oauth refresh >/tmp/dsh-xai-refresh.log 2>&1
卸掉 user unit:
npx dsh-llm-xai-oauth daemon --uninstall
临时手动刷一次:
npx dsh-llm-xai-oauth refresh
npx dsh-llm-xai-oauth refresh --force
4. 用 SuperGrok 跑一条
# 先看默认模型是不是 xai
grep -A3 agent-default-model ~/.dsh/settings.yaml
dsh --profile tui --provider xai --model grok-4.7
dsh --profile headless "Reply with exactly: xai-harness-ok. Do not use tools."
在 dsh-ssh-tui 里:/model 选 grok;/usage 读 SuperGrok 本周剩余额度。TUI 现在会在过期前刷新 token;若仍 401,会再强制刷新一次后重试。这救得了“刚打开 TUI 时 token 刚过期”,救不了“机器睡了一夜、没有任何刷新进程”。 第 3 步的 daemon 才是那个进程。
日常怎么切模型
# $DSH_HOME/settings.yaml
agent-default-model:
provider: xai
model: grok-4.7
reasoningEffort: high
或启动参数 / TUI /model。启动时插件会用当前 token 打 GET {baseURL}/models,/model 列表以订阅实时目录为准(现在一般是 grok-4.7 带 xhigh、grok-4.5 到 high)。静态回退仍含 grok-4.3。
| 模型 | 上下文 | 输出上限 | 思考强度 |
|---|---|---|---|
grok-4.7 |
500K | 64K | off / low / medium / high / xhigh |
grok-4.5 |
500K | 64K | off / low / medium / high |
grok-4.3 |
1M | 30K | off / low / medium / high |
DeepSeek 风格选择器里的 max 会映射成 xhigh。
可选配置是 baseURL、reasoningEffort、models 和重试 / 空闲超时。0.1.5 写在 $DSH_HOME/settings.yaml 的 llm-xai-oauth: 下;0.1.7 写在 profile patch 里,并且首次启动时会把那份旧文件导入一次。两种主机都是改完不用重启,下一次请求再生效。
超长 SuperGrok 会话会把 500K 窗口填满,下一轮 max_tokens 装不下时代理常回笼统的 HTTP 400 INVALID_REQUEST。从 0.1.3 起,适配器用上一轮用量推算下一次 prompt;剩余上下文装不下请求的补全时,会抛 CONTEXT_WINDOW_EXCEEDED,让 harness 走溢出压缩再试。压缩 / 标题请求仍会发出,并把 max_tokens 钳到剩余窗口。
401 / 过期排查
npx dsh-llm-xai-oauth status
ls -l ~/.grok-bridge/auth.json
# systemd 用户服务
systemctl --user status dsh-llm-xai-oauth.service
journalctl --user -u dsh-llm-xai-oauth.service -n 50
| 现象 | 常见原因 | 处理 |
|---|---|---|
/usage 或发消息 HTTP 401 |
access token 过期,当时没人 refresh | refresh --force,并装 daemon |
长会话发消息 HTTP 400 INVALID_REQUEST |
剩余上下文小于 max_tokens;旧版插件不会触发压缩 |
升到 0.1.3+;若本轮已经失败可 /compact |
status 显示 no refresh_token |
文件残缺或不是 OAuth 登录产物 | login --force |
dump-config 没有 llm-xai-oauth |
插件没进这个 profile | 再执行第 1 步 |
| 有 token 但仍走 DeepSeek | agent-default-model 不是 xai |
/model 切过去,或看 settings.yaml |
| daemon --install 失败 | 没有用户 systemd / linger | 改用 cron,或 loginctl enable-linger $USER |
代理:HTTPS_PROXY / HTTP_PROXY 对登录、刷新、对话都生效。
它不是什么
- 不是 xAI API Key 提供商。计量接口
api.x.ai仍走通用 catalog。 - 不是 Codex / Claude / Copilot 聚合器。
- 不是 Web「一键登录」设置页,也没有 OAuth 回调端口。设备码授权本身可以再复用本机已有 token;Windows 上的可视化引导只是把同一个设备码放进浏览器页面,方便没有控制台的桌面端。
- 不会
registerConfigurableProviders('xai'),因为llm-pi-ai已经占用了这个目录名。本包只拥有实际调用路由。
License
MIT