dsh-xiaozhi
Verifieddsh-xiaozhi · v0.1.6 · MIT · Web UI
旗驭小智AI网关一键接入:浏览器完成钉钉 SSO 登录后,自动开通网关令牌并把全部可用模型注册进 DSH
Install
dsh plugin add dsh-xiaozhi Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
dsh-xiaozhi
「旗驭小智AI网关」一键接入 DSH(DeepSeek Harness)的插件。
装上插件后,认证窗口直接弹在 dsh 界面里:未接入时进入 dsh 自动全屏弹出(已接入则不打扰)。用户点一次「钉钉扫码登录」→ 小窗直达钉钉扫码 → 自动跳回 → 插件自动从 xiaozhi-server 拿到 个人 sk- key + 网关地址 + 全部模型 并写入 DSH。一次扫码,零复制零粘贴。
之后每次 DSH 启动自动校验并静默同步模型(用已存的 key 直连网关 /v1/models,不依赖登录态和 Server 在线)。
接入后,dsh 设置页最上面的「小智网关」区块显示当前用户信息(头像/姓名/已注册模型数),可随时「重新接入」;侧边栏官方 logo 与浏览器标签图标会替换为旗驭小智形象(replaceLogo 可关)。
依赖与前提
xiaozhi-server(xiaozhi-core 仓库的 xiaozhi-work 模块)已部署且可访问,默认
https://ai-work.yqcx.faw.cn(可在设置里改serverURL)。它提供:GET /oauth/authorize?redirect=...:钉钉扫码登录(direct_sign_in 直跳钉钉)GET /api/work/models(Access-Token头):返回{baseUrl, apiKey, models[]}
Server 需配置外部回跳白名单(Nacos
xiaozhi-work.yaml),插件本地回调才能收到凭证:xiaozhi: auth: allowed-redirect-prefixes: - http://127.0.0.1:43117/ - http://localhost:43117/对应代码:
LogtoOAuthService.normalizeRedirect放行白名单绝对地址;OAuthController.callback对外部回跳 302 到{redirect}#access_token={jwt}(fragment 不落日志)。Logto「旗驭小智Work后端」应用的 Redirect URI 需登记
https://ai-work.yqcx.faw.cn/oauth/callback(各环境地址都登记)。网关账号要求:用户需在 ai-gateway 用钉钉登录过一次(Server 通过
users.oidc_id == Logto sub映射),且名下有可用令牌(优先名为xiaozhi)。Server 报错会原样透传到插件弹窗。
降级路径
- 弹窗被拦截:登录地址会以链接形式给出,手动打开即可
- 扫码有问题:设置区块/弹窗里可手动粘贴 accessToken(Server
/oauth/authorize不带 redirect 的 JSON 模式) - Server 未部署:key 直连网关的存量接入不受影响;新接入可临时走网关控制台「个人设置 → 安全 → 访问令牌」的旧路径(插件兼容识别)
使用
安装(本机已装好,写给别人看的)
# 1. 构建
pnpm install && pnpm run build
# 2. 挂进 profile(dev 用 link,发布后用包名)
# ~/.dsh/profiles/web/package.json:
# dependencies: { "dsh-xiaozhi": "link:/path/to/dsh-xiaozhi-work" }
# dsh.profile.bundles: [ ..., "dsh-xiaozhi" ]
dsh plugin --profile web install
# 3. 启动 dsh
dsh --profile web
配置
全部配置在 DSH 设置界面的 xiaozhi-connect 命名空间(对应 ~/.dsh/settings.yaml),热生效:
| 字段 | 默认 | 说明 |
|---|---|---|
serverURL |
https://ai-work.yqcx.faw.cn |
xiaozhi-work 服务地址 |
gatewayBaseURL |
https://ai-gateway.yqcx.faw.cn |
网关地址(模型直连/健康检查) |
providerId |
xiaozhi |
注册进 llm-pi-ai.providers 的 id |
displayName |
旗驭小智AI网关 |
模型列表显示名 |
apiKeyEnv |
XIAOZHI_API_KEY |
推理密钥在凭据库里的变量名 |
jwtEnv |
XIAOZHI_JWT |
xiaozhi JWT 在凭据库里的变量名 |
localPort |
43117 |
本机引导页/回调端口(需与 Server 白名单一致) |
autoSetDefaultModel |
false |
接入后是否把默认模型切到本网关 |
replaceLogo |
true |
替换官方 logo/favicon 为旗驭小智形象 |
技术细节
- 双面插件(dual-face):宿主半边(
lib/index.js,node)注册/api/xiaozhi/*同源路由(ctx.webServer.register,仅回环);浏览器半边(lib/client.js)由 dsh 网页经__ModuleLoader__加载,认证弹窗为纯 DOM 实现,settings.section官方插槽渲染用户信息区块。 - 登录闭环:弹窗 → Server
/oauth/authorize(direct_sign_in 直跳钉钉)→ 钉钉扫码 → Server 302 回http://127.0.0.1:43117/callback#access_token=...→ 本地回调页交给 node → Server/api/work/models换 key+模型 → 写入 DSH。 - 凭证读写走 DSH 正式服务 API:
ctx.credentials(.credentials.yaml,0600)与ctx.settings(settings.yaml,深合并热重载)。JWT 24h 过期只影响模型同步,推理用长期 sk- key。 - 网关连通性自检:启动时用存量 key 直连
/v1/models验证并刷新模型列表,全程不需要 Server。 - 构建产物自包含(零裸包名运行时依赖),类型来自
vendor-types/dsh.d.ts(从 DSH 0.1.0-rc.6 拷贝的精简声明)。
调试
pnpm run check # typecheck + build
dsh --profile web --port 3099 # 起测试实例
curl http://127.0.0.1:43117/ # 独立引导页兜底入口