目标:让
dsh(DeepSeek Harness)以 Web 服务器形态运行在公司内网/公网服务器上, 用户用浏览器(含手机)远程访问;同一台服务器服务多个用户,各用户数据隔离; 工作空间可在用户之间共享。改造以**覆盖层(overlay)**形态进行,不 fork 官方包, 可跟随@deepseek-ai/dsh升级。
🤖 面向 AI 代理/协作者的开工入口见 AGENTS.md(文档地图、当前状态、 已核实事实、常用命令、部署目标、工作约定)。
一支团队、一套服务器上的代码、各自的开发分支。 多用户可以共享服务器上同一套代码仓库进行开发:仓库 → 分支 → 对话 三层组织; 共享分支团队协作,个人分支(命名自由、仅本人可见)各自开发、互不干扰; 用户登录后自动匹配其代码平台的凭据,提交与推送按人归因。
| # | 特性 | 说明 |
|---|---|---|
| F1 | 服务器端运行 | dsh web 天然是 Web 服务器(HTTP + WebSocket + React 前端),改造后常驻服务器 |
| F2 | 手机远程访问 | 浏览器(含手机)经 HTTPS 远程访问;登录后全功能可用 |
| F3 | 同一服务器多用户 | 每用户独立进程 + 独立 $DSH_HOME,会话/设置/凭据/文件互不可见 |
| F4 | 工作空间分享 | 普通目录工作空间按 ACL 分享(读/写/撤销),见 docs/05 |
| F5 | 代码仓库工作区与分支开发(新增) | 工作区可对应 Git 代码仓库;UI 自动呈现 仓库 → 分支 → 对话 层级;用户自选展示哪些分支;分支下挂各自的对话;共享分支团队协作 + 个人开发分支;用户凭据绑定代码平台账号,见 docs/09 |
| 文档 | 内容 |
|---|---|
| docs/01-现状分析.md | 现有架构盘点:dsh web 今天是什么、能力与差距(含代码位置) |
| docs/02-目标架构.md | 目标架构总览:子域路由 + 每用户独立 dsh 进程 + 认证前门 |
| docs/03-认证与安全设计.md | 认证、会话 token、信任模型、特权方法门禁 |
| docs/04-多用户数据面与隔离.md | 每用户 DSH_HOME、进程模型、OS 级隔离选项与取舍 |
| docs/05-工作空间分享设计.md | 分享 ACL、双注册表同步、并发控制 |
| docs/06-覆盖层实现方案.md | 不 fork 的实现:新包清单、patch 插入点、RPC 门禁表 |
| docs/07-分阶段实施计划.md | Phase 0–4 任务分解与验收标准 |
| docs/08-部署与运维.md | Caddy/TLS、systemd、备份、审计、配额、监控、升级 |
| docs/09-代码仓库工作区与分支开发.md | 仓库化工作区:分支模型、凭据绑定、分支 UI、权限与并发 |
| docs/10-实施日志与Phase0验证.md | 实施日志:Phase 0 技术验证结论(含 R1 设计修订)、移动端实测清单 |
| 决策项 | 结论 |
|---|---|
| 部署场景 | 公司/组织内部(多人、统一管理)→ 需要用户账号、审计、配额 |
| 隔离强度 | 每用户独立进程(方案 A),数据面按用户隔离;OS 级隔离作为阶段 2+ 的强化项 |
| 改造形态 | 覆盖层:新插件 + profile patch,不 fork @deepseek-ai/dsh |
| 决策项 | 结论 |
|---|---|
| 仓库存储模型 | 服务器端每仓库一个 bare 主库 + 按分支的 git worktree(git worktree add),不同分支可并行开发;worktree 目录即官方 workspace(cwd 绑定),会话自动落在分支下 |
| 分支模型 | 共享分支(团队可见)+ 个人分支(名称由用户设定,gate 记录 owner,仅本人/被授权者可见,可一键提升为共享、不改名);受保护分支(main/develop)只读,变更走 Codeup MR 评审 |
| 凭据绑定 | 用户登录后按代码平台账号绑定凭据(gate 加密保管);添加工作区时选仓库 + 凭据;提交/推送按人归因(worktree 注入 user.name/email + credential.helper) |
| 分支 UI | 新增客户端插件 @webdsh/ui-repos(走官方 client 插件 roster insert)呈现 仓库→分支→对话 层级与分支显隐开关——官方包仍零改动,但"前端零改动"原则对该特性让位于"官方包零改动 + 新增客户端插件" |
| 与分享的关系 | 仓库成员(repo_members)是仓库级 ACL;分支 worktree 目录复用 F4 的 workspace 分享机制,两层叠加 |
| 决策项 | 结论 |
|---|---|
| 代码平台 | 阿里云 Codeup;HTTPS + 个人访问令牌优先,SSH key 备选 |
| 受保护分支 | 走 MR 评审:dsh 在受保护分支上只读(只读 worktree + 只读沙箱),合入一律经 Codeup MR(含 admin);拒绝逻辑由 Codeup 分支保护承担 |
| 共享分支并发 | 不做单写者强约束,靠团队约定(pull --rebase 等写入规范) |
| 个人分支命名 | 由用户设定;"个人"是分支属性(gate branches 表记录 owner),不靠 <用户名>/ 前缀推断 |
dsh web 今天已经是一个真正的 Web 服务器(HTTP + WebSocket + React 前端 + 多会话),
缺的三块是:认证(完全没有,--host 0.0.0.0 被硬编码拦截)、多用户数据面
($DSH_HOME 单根,会话/工作空间/设置/凭据全部混在一起)、工作空间分享
(workspace 记录没有 owner/ACL)。三块都能在不 fork 的前提下以覆盖层实现;
在此基础上再叠加 F5 仓库化工作区:仓库 → 分支 → 对话 三层组织,
让团队共享一套服务器代码、各自开分支开发。详见各文档。
WebDSH/
├── README.md # 本文件
└── docs/ # 方案文档集
├── 01-现状分析.md
├── 02-目标架构.md
├── 03-认证与安全设计.md
├── 04-多用户数据面与隔离.md
├── 05-工作空间分享设计.md
├── 06-覆盖层实现方案.md
├── 07-分阶段实施计划.md
├── 08-部署与运维.md
└── 09-代码仓库工作区与分支开发.md
实施阶段开始后,本仓库将新增
gate/(认证前门服务)、plugin/(dsh 覆盖层插件, 含ui-repos客户端插件)两个源码目录,目录结构届时更新。