dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Amadeus: a web workspace for DSH with cloud and web agents, online code editing, PDF/Office/Markdown/LaTeX previews, TeX compilation, file management, and an integrated terminal.
基于 DeepSeek Harness 的单用户 AI 工作台,把对话、文件、编辑器与浏览器放在一起。
简介 · 功能一览 · 快速开始 · noVNC AI 浏览器 · 配置 · 数据与升级 · 架构 · 开发与测试 · 文档 · 致谢
DeepSeek Harness(DSH)提供了对话、文件树与预览、Web 自动化和插件体系。Amadeus 是一组 DSH 插件,补上了自托管个人工作台还缺的那些东西:写代码和论文的编辑器、能定位原文的注释、可以人工接管的 AI 浏览器、跨会话的记忆与人格,以及安全的远程访问。
所有定制都通过 DSH 公开的插件扩展点实现,不改写 DSH 本身,可以随上游版本升级。当前版本 1.3.0-alpha.1(预发布,稳定版为 1.2.0),基于 DSH 0.2.1-alpha.2;推荐用 Docker Compose 一键部署,宿主机无需安装 Node.js、code-server 或 TeX Live。
Amadeus 面向单用户自托管:登录者拥有工作区和容器终端的完整权限,不提供多用户隔离。
Ctrl+Alt+B 编译、Ctrl+Alt+V 预览 PDF。对话、文件树与预览、Office 转换和 Web 自动化沿用 DSH 自带的功能,Amadeus 不重复造轮子。
准备 Docker Engine + Compose,或使用 Linux 容器的 Docker Desktop。以下命令适用于 Bash;Windows PowerShell、WSL 和远端 Linux 的完整步骤见部署与连接教程。
git clone https://github.com/whyself/Amadeus.git
cd Amadeus
cp amadeus.docker.example.yml amadeus.local.yml
mkdir -p workspace
docker compose build
构建完成后生成登录密码哈希(终端要求输入两次密码,不回显):
docker compose run --rm --no-deps --entrypoint node amadeus scripts/hash-password.mjs
编辑 amadeus.local.yml,修改 username,将输出的完整哈希填入 passwordHash,替换 CHANGE-ME。保留示例中的容器路径,再启动:
docker compose config --quiet
docker compose up -d
docker compose logs -f amadeus
日志出现 dsh web: 后,打开 http://127.0.0.1:3080,使用用户名和原密码登录。Ctrl+C 只退出日志查看。首次构建会下载编辑器、TeX Live 与浏览器资源,耗时取决于网络和缓存。
Compose 默认只向宿主机 127.0.0.1:3080 发布端口。远程访问必须使用 HTTPS,反向代理还需转发 WebSocket;可选择 Tailscale HTTPS 或公网域名,详见连接教程与 nginx 示例。code-server 只监听容器回环地址,由 Amadeus 的认证代理提供访问。
默认 browserUse.mode: launch 使用 Amadeus 容器内的 Chromium,用户只能查看 AI 画面。需要人工登录或操作网页时,可启用 novnc 模式:每个主会话拥有独立 Selenium Chromium 容器与 profile,用户接管后该会话的浏览器工具暂停接受操作,交还后 AI 需重新获取页面快照。
browserUse:
enabled: true
mode: novnc
idleTimeoutMs: 600000
maxInstances: 4
userControlEnabled: true
部署时叠加 compose.novnc.yml,先拉取文档指定的固定镜像,并显式设置:
DOCKER_GID:Docker socket 的实际组号,仅供控制器使用。AMADEUS_NOVNC_DATA_VOLUME:已有 /data 命名卷的实际名称,避免创建空卷。AMADEUS_BROWSER_STATE_DIR 为对应的 <home>/browser。services/browser-controller 是独立服务,也是该 Compose 部署中唯一挂载 docker.sock 的服务;只提供固定的浏览器启停、输入权限和屏幕操作接口。不要给运行 AI 的 Amadeus 容器挂载 Docker socket 或添加 Docker 附加组。
启用、迁移、接管、持久化与容量规则见 noVNC 浏览器说明。控制器链路已在 Docker Desktop(WSL2)上完成启动、输入权限切换、屏幕调整与停止删除的真实验收;接管 / 交还等界面交互仍需人工验收。
要在侧栏展示工作区里的开发页面或静态 HTML,见在 AI 浏览器中打开本地网页。
Docker 使用 amadeus.docker.example.yml 作为模板,原生部署参考 amadeus.example.yml。私有配置不要提交到仓库。
Docker 镜像默认支持经用户批准的完全访问命令使用容器内 sudo,关闭参数及安全边界见容器内 sudo。
| 配置 | 建议 |
|---|---|
username / passwordHash | 设置自己的账号,使用 scrypt 密码哈希;浏览器仍输入原密码 |
host / port | Docker 内使用 0.0.0.0:3080;宿主机端口发布由 Compose 控制 |
home / workspace | Docker 内分别为 /data/dsh-home 与 /workspace |
publicUrl | 反向代理部署可填 HTTPS 工作台地址,用于启动公告与模型中的地址,不改变认证或同源校验 |
browserUse | 默认 launch;可选 novnc,或设 enabled: false 关闭浏览器自动化 |
personalization.home | 默认 <workspace>/.amadeus;固定全局目录,不随会话工作目录变化 |
宿主机已安装 Node.js 24 时,也可直接运行:
npm run hash-password
旧版的明文 password 仍可使用,启动时会提示迁移;迁移后记得删掉配置备份里的明文。password 与 passwordHash 不能同时配置。
Plugins → 个性化 提供总开关和统一保存的子设置。初始化保留已有文件,记忆写入使用版本校验、租约锁与原子保存,并保留本地 Git 历史;个人 Skills 由 Agent 用普通文件工具直接编辑,管理及确认开关是行为指导,不是文件权限。用法及事实快照规则见个性化插件。
| 宿主机 / 卷 → 容器路径 | 保存的内容 |
|---|---|
./workspace → /workspace | 项目文件、TeX 源码和编译产物;默认个性化目录 .amadeus 也在其中 |
./workspace/.amadeus/home → /home/node | 用户安装的软件、账户配置和 shell 配置 |
Compose 命名卷 amadeus-data → /data | DSH 会话与设置、code-server 配置和扩展、浏览器状态与工作台恢复数据 |
./amadeus.local.yml → /config/amadeus.yml | 私有登录与服务配置,只读挂载 |
amadeus-data 是 Compose 卷键,实际卷名通常带项目前缀。升级时保持同一项目目录或 COMPOSE_PROJECT_NAME,沿用原配置、工作区、持久化 HOME 与数据卷;自定义个性化目录也需备份。
docker compose down -v。 普通 docker compose down 会保留命名卷。git archive HEAD | docker build -t amadeus:<主题>-<10 位提交哈希> -,部署时确保 Compose 使用对应镜像。/data 卷,迁移步骤见 noVNC 文档。| 路径 | 职责 |
|---|---|
packages/login | Basic 登录、失败节流、scrypt 校验、首屏占位与 PWA |
packages/files | 在原生文件树上扩展上传、下载与文件操作 |
packages/reader | 选区注释、引用定位与客户端兼容插件 |
packages/editor | code-server 认证代理、Bridge 扩展与编辑器集成 |
packages/browser / browser-runtime | AI 浏览器与 noVNC;后者承载原生 profile 解析所需的构建产物 |
packages/personalization | SOUL、记忆、个人 Skills 与个性化 preset 接线 |
packages/session-query-global | 维护的原生历史查询工具层副本,复用唯一原生后端;来源见 NOTICE |
services/browser-controller | 独立容器服务,隔离 Docker 权限,管理 noVNC 工作容器 |
scripts/start.mjs | 读取配置、生成 DSH patch 并启动插件组合 |
scripts/build.mjs | 使用 esbuild 构建插件的 dist/ |
使用 Node.js 24 与 npm workspaces,遵守 AGENTS.md。原生开发还需配置固定版本的 code-server 4.104.2、LaTeX Workshop 10.9.0 和 Bridge,并应用两项编辑器补丁;详细步骤见部署教程。
npm ci
npm test
npm run build
npm start
npm test 执行 node --test tests/*.test.mjs;行为改动需单元测试。涉及界面或浏览器交互时,还需运行对应真实浏览器脚本:
npm run test:files-browser
npm run test:annotations-browser
npm run test:browser-compat
个性化 Web 验收先运行 node tests/personalization-web-host.mjs,再把输出的 origin 设为 AMADEUS_TEST_ORIGIN 运行 node tests/personalization-web-live.mjs。其余浏览器与编辑器测试入口见 package.json。
npm run pack:plugins 会把插件归档和 SHA256SUMS 输出到 .release/。
package.json 和 lock 文件为准。第三方组件按各自的许可证分发,声明随对应目录保留(例如 packages/browser/NOTICE.md、packages/session-query-global/NOTICE.md 和 third-party/)。依赖来源见 UPSTREAMS.md,贡献者见 CONTRIBUTORS.md。