Skip to content

dsh-xiaozhi

Verified

dsh-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/       # 独立引导页兜底入口