其他
完整应用
deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DeepSeek Harness × 飞书登录 · 多用户 Web GUI 隔离
给 DeepSeek Harness Web GUI 加上飞书 OAuth 登录,让企业内部员工从公网访问,每人只能看到自己的对话。与 dsh-lark-link 完美配合:飞书 bot 里聊过的对话,登录网页后自动看到。
session_id 归属一个 open_id;用户只能看到、访问、修改自己的 session。非 owner 请求统一返回 404,不泄露存在性。dm:* 前缀的 session(dsh-lark-link 创建的),通过飞书 API 反查 chat_id → open_id,写入归属表。webServer.tapIndex() 注入小 UI(登录跳转 + 右上角用户菜单),不动 harness 前端源码。dsh plugin --profile web add dsh-lark-web-auth
必需环境变量:
| 变量 | 说明 |
|---|---|
LARK_WEB_APP_ID |
飞书自建应用 App ID(可复用 dsh-lark-link 的) |
LARK_WEB_APP_SECRET |
飞书自建应用 App Secret |
LARK_WEB_BASE_URL |
公网访问的 URL,如 https://web.yourdomain.com |
LARK_WEB_COOKIE_SECRET |
32+ 字节随机串,用于 cookie 签名。旋转会踢下所有用户 |
可选:
| 变量 | 默认 | 说明 |
|---|---|---|
LARK_WEB_AUTH_ENABLED |
true |
设为 false 可临时禁用 |
LARK_WEB_DB_PATH |
~/.dsh/lark-web-auth.sqlite |
SQLite 文件路径 |
LARK_WEB_DOMAIN |
feishu |
feishu(国内) 或 lark(海外) |
App ID / App Secret。https://web.yourdomain.com。https://web.yourdomain.com/auth/lark/callback。contact:user.base:readonly(拿 open_id 和昵称)。web.yourdomain.com {
reverse_proxy localhost:3080
}
启动:
export LARK_WEB_APP_ID=cli_xxxxx
export LARK_WEB_APP_SECRET=xxxxx
export LARK_WEB_BASE_URL=https://web.yourdomain.com
export LARK_WEB_COOKIE_SECRET=$(openssl rand -base64 32)
dsh --profile web
此插件必须在 api-remotes 之后加载——它用 ctx.inject(['typert']) 覆盖 typert lookup,晚注册者生效。cordis.patch.yml 里默认已经用 insert: 尾部追加。
dsh-lark-link 把飞书 P2P chat 变成一个 harness session(key = dm:${chat_id}),本插件把该 session 归属到用户 open_id,登录后网页可见。/api/* 请求先过 middleware 校验 cookie,未登录返 401。agent / session lookup 被包一层,请求上下文里的 openId 必须等于 session_owner 表里的记录,否则抛 session-not-found。session.list API 返回值过滤只保留 owner 匹配的项。session/created 事件,把 request context 的 openId 写入 session_owner;dm:* 前缀的 lark-link 会话按 chat_id 反查 open_id。chat_id → open_id 失败(如飞书返回 403),那条 session 保留无 owner 状态,任何人都看不到,需要手动分配(未来加 CLI)。MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。