deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
面向自托管 DSH Web 的服务控制与运维插件。当前版本提供安全重启与自动恢复、更新提示、健康诊断、精确增量模型用量图表、容器探活、备份管理和 Linux 文件权限维护。
项目仍处于早期开发阶段。目前主要在 Linux + Docker 环境验证;重启后的自动拉起必须由 Docker、systemd、pm2 等外部进程管理器负责。
| 阶段 | 状态 | 内容 |
|---|---|---|
当前版本 0.10.0 |
✅ 功能完成 | 双版本自动更新状态、缓存检查和进入健康标签自动诊断已实现并通过自动化测试 |
| v0.3 安全与体验 | ✅ 已实现 | 重启安全网、重启后自动恢复、更新脚标与详情浮层、zh+en 动态切换 |
| v0.4 可观测性 | ✅ 已实现 | 健康面板、仅返回状态码的 /healthz 探活端点 |
| v0.5 数据与维护 | ✅ 已实现 | 会话/配置/插件清单备份、备份列表与删除、Linux 文件权限查看与受控修复 |
| v0.6 面板与用量 | ✅ 已实现 | 版本置顶、完整健康检查、精确增量模型统计、供应商/模型与项目筛选、可切换图表、折叠维护详情 |
| v0.7 错误统计与界面 | ✅ 已实现 | 最近 24 小时模型/工具错误、路径归一化、默认折叠错误详情、卡片分区与语义按钮颜色 |
| v0.8 标签式服务控制 | ✅ 已实现 | 概览、模型统计、备份维护、重启四标签;功能故障标签警告、顶部汇总提醒和高对比度展示面 |
| v0.9 原生设置页风格 | ✅ 已实现 | 概览、健康诊断、模型统计、备份维护、重启五标签;线型导航、单层内容区和简化统计布局 |
| v0.10 自动状态检查 | ✅ 已实现 | DSH/插件独立版本状态与发布链接;更新检查成功缓存 10 分钟、失败缓存 1 分钟;健康标签自动诊断并缓存 30 秒 |
目前插件已在 DSH 0.1.0-rc.7 中完成开发与验证,可以正常使用。后续 DSH 发布新版本后,本项目会同步进行兼容性测试并更新验证结果。
@deepseek-ai/dsh 版本。@gehennawu/dsh-service 尚未发布到 npm,HTTP 404 会明确显示「尚未发布可检查版本」,DSH 仍可正常显示是否最新;两者均提供发布记录链接。Host 对成功/部分成功结果缓存 10 分钟,对完全失败结果缓存 1 分钟。42 结束当前 DSH Web 进程。/dsh-service channel,提供 version、check-update、web endpoint,仅接受 loopback 调用。shell.overlay 显示全局状态,退避探测新的进程实例并自动刷新;60 秒未恢复时提供手动刷新。provider/model 展示供应商前缀。首次索引顺序读取历史会话,以后用会话 revision 和 lastSeq 只折叠新增事件;索引不保存消息、Prompt 或 Tool 内容。seedLength 以内继承的父会话历史,Subagent 默认计入其实际项目。llm/retry 与最终失败回合中提取 provider 错误,按 provider/model + code + HTTP status 归类,只保留滚动最近 24 小时并按次数从高到低排列;取消、最大 Token 和 Tool 错误不计入。详情默认折叠、跟随项目筛选,并集中放在概览区域。run_code 内子调用产生的失败,包括命令、读取、写入、编辑与搜索错误。优先使用稳定 error.code,缺失时归一化为 FS_NOT_OBSERVED、OLD_STRING_NOT_FOUND、PATH_NOT_FOUND、命令退出码等稳定口径;不同文件路径合并计数,索引和界面只保存/展示 <path> 级脱敏代表信息。只保留最近 24 小时、按次数降序、默认折叠、跟随项目筛选,并与模型报错一起显示在概览区域。▸ 展开并以 ▾ 收起。⚠,并在服务控制顶部汇总受影响标签。概览本身不承载健康故障标记;没有备份不算故障;最近 24 小时的模型报错和工具报错属于统计数据,也不会触发标签或顶部提醒。GET / HEAD /healthz 返回空的 HTTP 200;其他方法返回 405,不暴露版本、计数或其他 DSH 信息。它适合供另一台服务器上的 Uptime Kuma、Docker、Kubernetes 或其他监控程序检查 DSH Web 进程和 HTTP 服务是否仍可达;未配置外部消费者时不会自行产生作用,也不替代面板中的完整健康诊断。若 DSH 仅监听 127.0.0.1,应通过现有 Nginx/Caddy/Traefik 反向代理暴露该路径,不建议直接开放 3080 端口。$DSH_HOME/backups/ 创建会话、配置和插件 profile 清单归档;列表默认折叠,可查看文件名、大小、时间和总体积,并通过两段式确认删除。备份不限份数且不会自动清理,磁盘占用由用户自行管理;归档不包含凭据或 node_modules。$DSH_HOME/.credentials.yaml 使用凭据例外:group/other 权限位必须为零(owner-only,0400/0600 等均合规);工作区内同名文件仍按普通文件 644 判断。嵌套工作区(如 /workspace 与其子目录同时注册)只按外层根扫描一次,不重复计数。修复仍需两段式确认,先处理一般目录/文件,再将真正的 $DSH_HOME/.credentials.yaml 规范化为 600,避免 DSH 凭据插件因权限过宽而拒绝启动;修复完成后再次深检应无新增异常。非 Linux 不显示此功能。容器内若以 root 运行 DSH,目标仍是 root,因此该修复不能降权为普通用户。timer 服务延迟退出与调度恢复探测,使未完成的定时动作可随插件 Fiber 清理。dsh plugin --profile web add github:gehennawu/dsh-service
安装或更新后重启 DSH Web,使 Host 与 Client 两半插件重新加载:
dsh web
打开 DSH Web 设置页,进入 服务控制。
dsh plugin --profile web add link:/path/to/dsh-service
插件只发送退出信号,不负责重新启动进程。没有进程管理器时,点击重启会直接停止 DSH Web。
services:
dsh:
restart: unless-stopped
[Service]
ExecStart=/usr/local/bin/dsh web --host 127.0.0.1
Restart=on-failure
RestartSec=2
pm2 start "dsh web --host 127.0.0.1" --name dsh-web
| 环境 | 插件功能 | 重启后自动拉起 | 验证状态 |
|---|---|---|---|
| Linux + Docker Compose | 支持 | 配置 restart policy 后支持 | 已验证 |
| Linux + systemd / pm2 | 预期支持 | 由进程管理器负责 | 未单独验证 |
| macOS / Windows + pm2 等 | 代码未限制 | 由进程管理器负责 | 未验证 |
直接运行 dsh web |
支持 | 不支持 | 预期行为 |
运行要求:Node.js >=22,且 DSH Web 能加载 Host 和 Client 两半插件。检查更新需要访问 registry.npmjs.org;网络失败不会影响其他功能。
自动化测试以及当前 Linux + Docker 的 Host/真实 Chromium 验证已完成。当前 standard preset 未挂载 Terminal backend,容器也不提供 root、CAP_CHOWN、Docker socket 或 user namespace,因此这两种不可制造的环境分支通过隔离服务回归测试和真实 subprocess 临时目录测试覆盖。
https://registry.npmjs.org/@deepseek-ai%2Fdsh。<path> 代表信息;不保存消息、Prompt、Tool 参数、原始文件路径、密码、私钥或其他凭据。索引固定写入 $DSH_HOME/dsh-service-usage-index.json 并使用 0600 权限。index.js:Host 半;版本/更新、活动保护、健康指标与诊断、增量用量索引、探活、备份和权限维护 RPC。client.js:Browser 半;设置页布局、可切换用量图表、更新脚标和全局状态浮层。cordis.patch.yml:将 Host 与 Client 插件插入 DSH Web profile。README.en.md:英文文档。基础检查:
npm test
node --check index.js
node --check client.js
npm pack --dry-run
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。