Files
dsh_shenxian/dsh-server-docs/INDEX.md
T
admin 4e3a1a4a13 docs(overlay): 覆盖网络/客户端化 10 份规划转正式档案 103-112 + 登记
- 新增 04-调整方案/103-112:可行性评估 · 全球架构复盘 · 骨干层方案 ·
  百台推演 v2 · 千台全场景推演 · 游戏专项 · 游戏网络与群聊上限调研 ·
  答疑(群聊/备份/迁移/保密) · 补遗与参考方案 · 九大瓶颈落地方案
- 每份按 交接单/README.md §二 8 段改写(目标/只读前置/范围/决策点/
  步骤/验收/回滚/回报格式)+ 头部状态标注(📋 规划态 · 未实施)
- 技术内容不变:附录 A 逐字保留原文全文(仅去其一级标题),已逐份校验字节一致
- 登记:INDEX.md §二 +10 行、03-路线图与待办.md §二 +1 行
- 收尾:docs-audit.py 退出码 0(无 P0)· docs-manifest.py 已刷新
- 本轮零代码、零服务器改动;⛔ 未 push
- 占号:103-112(先原子 mkdir .lock-<NN> 再写)
2026-09-16 10:25:09 +08:00

238 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# dsh 平台文档导航(INDEX)
> **首读 `BRIEF.md`(现状卡)**:30 秒对齐现行事实;本文件只管"定位篇目 + 状态"。
> **双端模型**:本机 `D:\github\dsh_shenxian\dsh-server-docs\`(**工作树**,git 仓库 `dsh_shenxian_doc`)↔ 服务器 `/opt/dsh/docs`(**部署镜像**,root 600,**无 .git**,靠 scp)。
> **对账**:`bash scripts/docs-sync-check.sh`(退出码 0 = 全绿)。
> **最后核对**:2026-09-12 — **篇数与规模不在此写死**:本库由多会话并行改动,绝对值数十分钟即失效(同日实测 83 → 85 → 87,3 次作废);**一律以 `python3 scripts/docs-manifest.py` 复跑结果为准**。代码 HEAD 看服务器:`git -C /opt/dshs log -1`(最后核对值 `ebe8075`)。域名 `alotbuy.com`(旧域 `dsh.alotbuy.com` 已 301)。
---
## 一、按场景快速定位
| 我要做什么 | 先读 |
|---|---|
| **访问入口(当前域名)** | 门户 `https://alotbuy.com`;用户实例 `https://<用户名>.alotbuy.com` | `04-22`(迁移+回滚) |
| **重建 / 交接部署** | **`DEPLOY-本部署.md`**(拓扑·目录·env·依赖·脚本族·构建/部署/回滚) | 档案 19 §C9 |
| 理解架构 / 多租户隔离 | `01-规划与架构.md`(一~五、九、十三) | `archive/` 全文 |
| 日常运维(重启/备份/token/KEY/排障) | `02-运维手册.md` | `03-路线图与待办.md` |
| **做一次平台改造(完整流程)** | **`skills/dsh-change-workflow/SKILL.md`**:六阶段 + **红线 R1-R11** + 档案模板 + 并行调度协议 |
| **开源导出 / 发新版本** | **`skills/dsh-opensource-release/SKILL.md`**:五条硬规则 R-O1–R-O5(源仓库只读 / 探针 0 命中 / 去插件 / 不带文档与 skill / 分层授权)+ 脱敏映射表 + **迭代 SOP** + 验证六件套;产物在本机 `_开源导出_20260913/` |
| **排查业务插件故障(没 UI / 装不上 / 改了没生效)** | **`skills/dsh-plugin-diagnose/SKILL.md`**:三层归属 + 三把尺子(inject 差集 / glibc 直测 / 产物插探针)|
| **换电脑 / 改了工作区路径,规则会不会丢** | **`skills/dsh-env-bootstrap/SKILL.md`**:常驻规则快照 + `--check` 校验 / `--inject` 注入 / `--env-check` 环境自检(默认只报不改)|
| 看还有什么没做完 | `03-路线图与待办.md` §二 | **`交接单/README.md` §一**(已规划待执行) |
| **改前端页面(强制基线)** | **`06-工作台UI规范.md`** |
| **改实例 UI 分区(设置面板)** | **`07-实例UI分区登记表.md`**(哪个包提供 / 源码在哪 / 能不能改)+ `06-工作台UI规范.md` |
| 红线与硬约束 | `README.md` §红线(含 **R7 禁批量全仓写入**、**R8 中断用户须先知会**)| `04-07` |
| **插件兼容性预检(导入/上传即判定)** | **`04-71`**(判据 + PoC + 三层防线)|**`交接单/T05`**(执行单)|`scripts/plugin-compat-check.mjs`(可在服务器直接跑) |
| **实例崩溃循环 / 插件不兼容** | `04-70`(anysearch 与 dsh-llm `assertNever` 不兼容;判据「重启后错误是否变化」)|`04-20`(自愈熔断)|`04-25`(崩溃循环前例)|`02 §C.4` |
| **锁机制(防并行冲突)** | **`04-73`(强制钩子)|`04-69`(三把锁建立)**|`交接单/README.md` §一·§三·§六|`scripts/{handoff-guard.sh,op-lock.sh,lock-guard-hook.py}` |
| **多会话并行 / 冲突治理** | **`04-69`**(两级文档锁 + 服务器侧操作锁 + commit 常态化)|`交接单/README.md`(占用锁 / 写者归属 / §六 服务器侧锁)|`scripts/handoff-guard.sh`、`scripts/op-lock.sh` |
| 插件管理面 | `04-16`(三层归属)| `04-31`(门户双 Tab)| `04-57`/`04-60`(设置面板分区) |
| **搜索 provider / 联网搜索** | `04-64`(接入 AnySearch)|`04-65`(启停与 web provider 联动)|`04-66`(P0 误报与 admin 显式信任) |
| **「能力管理」section UI** | `04-67`(按 UI 规范重做)|`04-36`/`04-38b`(分区铺开 / 术语统一)|`04-68`(启停属主污染根治)|**`04-100`(「我的技能」分组 · 09-15)**|**`04-101`(改名「能力管理」+ tab 分页 + 卡片三行 + DeepSeek 改名 · 09-15)** |
| 安全 / 暴露面 | `04-14`(出网护栏)|`04-39`(可见面收窄·封 loopback)|`04-41`(上传加固) |
| 技能共享层 / 管理面 | `04-10`(bundledSkillDir)|`04-11`(API+页面)|`04-40`(挂载修复) |
| 会话/登录跳转 · 断连恢复 | `04-13`(冷启动 404)|`04-24`(实例侧 401)|`04-49`(回收后反馈)|`04-51`(401 透明重放)|**`04-72`(回收/关闭后回到页面自动唤醒)** |
| 实例易用性 | `04-45`(老会话档位提示)|`04-56`(实例助手)|`04-59`(启动动画) |
| 实例资源 / 配额 | `04-58`(内存口径 + 配额 384M)|`04-38a`(边界:无磁盘配额) |
| VoxEMW | `04-12`(摘要)| `archive/工作区草案/` 两份全文 |
| 历史全量时间线 | `archive/dsh-improvement-plan-20260909-full.md` |
---
## 二、全量清单
> **状态摘要**(**机器生成,勿手改**):档案 **89** 份(`04-*`),另含根级编号 4 条(01/02/03/06),另有非编号行 12 条(README / INDEX / 技能 / poc 等)—— ✅ 70 | 🔄 8 | 🧪 1 | 🔧 1 | 未标记 13。复跑 `python3 scripts/docs-index-stats.py` 取数,`--write` 就地刷新本行。
> **分层与机读明细**(路径 / 日期 / 字符数 / 被引次数 / tier,可 `jq` 先筛后读):**`docs-manifest.json`**;复跑 `scripts/docs-manifest.py` 即刷新。
> 图例:✅已落地 | 🔄维护中 | 🧪PoC | 📝待开发 | 🔍核查完成 | 📋评估 | 🟡保留兜底 | 🗄归档|🔧修复|🔴|🚧|❓
| 号 | 状态 | 一句话 |
|---|---|---|
| README | 🔄 | 文档库总说明、模块一览、红线、使用约定(**档案清单唯一来源**)|
| INDEX | 🔄 | 本文件:场景速查 + 状态总览 |
| 01 | ✅ | 背景/架构/目录布局/dsh 分层/归属矩阵/安全边界 |
| 02 | ✅ | 迁移、备份恢复、域名接入、uid 排障、命令速查(**正文为历史,现行以附录 C 为准**)|
| 03 | 🔄 | OQ 结论、已完成清单、进行中/待办、历史决策 |
| 04-01 | ✅ | 登录直达 URL 自动带 launch token |
| 04-02 | ✅ | 权限边界收紧 + DB 加固 |
| 04-03 | ✅ | API KEY 收归管理员统一管控 |
| 04-04 | ✅ | 注册/审核/删除用户闭环 |
| 04-05 | PoC 实证完成(插件 v0 | 插件化可行性 + PoC(**PoC-2 三项已复核**:①不做 ②已实现 ③作废) |
| 04-06 | 已上线 | 登录直达会话窗口 v1+v2 |
| 04-07 | 生效 | 升级红线(禁自动取最新版)与独立升级流程 |
| 04-08 | ✅ | last-wins 单活跃会话 + idle-reap 常驻上限 |
| 04-09 | 已落地 | 角色化 profile patch 裁剪 client 插件 |
| 04-10 | 已实施 | 共享只读技能目录(bundledSkillDir)env 注入 |
| 04-11 | 已实施 + API 全链路验 | 技能管理面 API + 页面(zip-only 两阶段替换) |
| 04-12 | 已冻结 | VoxEMW 全云 API 化调研 + M1 落地 |
| 04-13 | 已落地 + 验证通过 | 登录直达冷启动竞态 404 修复 |
| 04-14 | 审计已完成 → 加固项待用户 | 会话敏感信息暴露面审计 + nftables 出网护栏 |
| 04-15 | 已上线,页面全部 200 | 三页 401 守卫跳登录 + 核心插件开关收归 admin |
| 04-16 | 已封板,实施中 | 页面导航定稿 + 插件三层归属模型(folder_plugins 废弃) |
| 04-17 | 核查完成 → 收敛项 H1- | 工作区选择器暴露面核查(P1/P2 边界判定) |
| 04-18 | ✅ 已实施并在 admin/ | 目录选择器收敛为仅见自有目录(v3 定稿实测,含 admin) |
| 04-19 | 🔄 批次 1 因改走 bun | 方案与代码全面审查(代码 10 项 + 文档 8 项) |
| 04-20 | 方案 A + handoff | 崩溃自愈:指数退避 + 熔断 + 观测(含 live 实测) |
| 04-21 | 根因已定位并修复(nginx | guest「卡顿」排查(根因=nginx proxy_buffering 已修) |
| 04-22 | 已上线 | 域名迁移到 alotbuy.com(含 4 个踩坑与回滚) |
| 04-23 | 修复已编译(CI ✅),待重 | 实例内 AI 能力与权限限制核查(合成根补 /bin 修复) |
| 04-24 | 已实施并上线 | 实例侧 401 自动恢复(freshAuthUrl 302 带新 token) |
| 04-25 | 已修复并上线(服务已重启 | 实例崩溃循环修复 + not_running 兜底 |
| 04-26 | 清单建立 | dsh 升级耦合点与回归清单(官方包零改动) |
| 04-27 | ❓ | MCN 工作台插件平台化评估(3 处 P0 必改) |
| 04-28 | ✅ | 用户数据清理三件套(ws-cleanup / session-gc / purge-trash) |
| 04-29 | ✅ 已实施并端到端验证 | 官方白名单插件来源(awesome-dsh-plugin,仅预构建可导入) |
| 04-30 | ✅ 已实施并 live 验证 | 编排器孤儿实例清理(spawn 前清 stale scope) |
| 04-31 | ✅ 已实施并视觉验证 | 插件管理页双 Tab + 说明为主视觉 |
| 04-32 | 🔍 核查完成,P0 待决策 | mcntimo 会话取证与沙箱 P0 核查 |
| 04-33 | ✅ 已实施(commit 见 | 实例权限默认档位改为完全权限(env 开关) |
| 04-34 | ✅ 已实施(commit ` | 功能插件启用探活 + 逐插件隔离 |
| 04-35 | ✅ 已修复(commit ` | ws-cleanup 误删平台 bundle 包修复 |
| 04-36 | ✅ 已实施(commit ` | 「功能插件」分区铺给普通用户 + 新用户自动铺 |
| 04-37a | 🔍 取证完成 | guest 会话取证与平台缺陷清单(P0-1 档位/P0-2 零技能) |
| 04-37b | ✅ 已实施(commit ` | 功能插件分区 v0.2:官方 token + i18n + 交互升级 |
| 04-38a | 🔍 核查完成 | 实例软件安装共享 / 网络与安全边界核查(S1-S3 缺口) |
| 04-38b | ✅ 已实施(`99de8c5 | 术语统一「业务插件」→「功能插件」 |
| 04-39 | ✅ 已落地 | 实例可见面收窄(/etc 白名单)+ 封宿主访问(H5) |
| 04-40 | ✅ | 共享技能层挂载修复(补 bwrap --ro-bind) |
| 04-41 | ✅ | 技能上传安全加固(symlink/zip bomb)+ 用户技能启停 |
| 04-42 | ✅ 已修复 | 实例共享 Python 运行时 + 会话取证复核(修 /etc/alternatives) |
| 04-43 | ✅ | root 污染用户工作区 → 属主自愈 |
| 04-44 | ✅ | 基础运行时版本冻结(PYTHONNOUSERSITE + USERBASE) |
| 04-45 | ✅ | 存量会话「新开会话」提示(选提示不选迁移) |
| 04-46 | ✅ | 实例共享工具 jq / ripgrep / ffmpeg |
| 04-47 | ✅ | admin「运行环境」管理页(含版本漂移告警) |
| — | ⚠️ | **编号 48 未使用**(跳号;不影响检索,勿补占)|
| 04-49 | ✅ 已落地 | 实例回收后首次访问的反馈与自愈(wake.html 过渡页) |
| 04-50 | ❓ | 会话过期自愈注入脚本(**已被 04-51 在传输层取代**,保留兜底) |
| 04-51 | 已落地并实测验证 | 实例侧 401 透明重放(含 SSE 自动重连) |
| 04-52 | 已落地并端到端验证 | 新用户实例无法启动(picker 三处连锁缺陷) |
| 04-53 | 🔄 第一批已修复 | 文档质量审查与精简(含 37/38 编号冲突立项) |
| 04-54 | ✅ 已实施(两批):第一批 | 文档信息架构优化(BRIEF 现状卡 + 机读清单) |
| 04-55 | 🔍 取证完成 | guest 最新会话取证与优化项(档位会话级播种) |
| 04-56 | ✅ 已实施并端到端验证(co | 实例助手:我的文件 / 能力清单 / 档位提示 + 文件下载端点 |
| 04-57 | ✅ 已实施并验证(服务器已生 | 设置面板「用户管理」入口 + 全员安装 |
| 04-58 | ✅ 已实施并验证(服务器已生 | 实例内存优化与配额下调(512M→384M + 编译缓存) |
| 04-59 | ✅ 已实施并验证(服务器已生 | 重连反馈:实例启动中的加载动画 |
| 04-60 | ✅ 已实施并验证(服务器已生 | 设置面板分区改名:功能插件 → 功能管理 |
| 04-61 | ✅ 已实施并验证(服务器已生 | 插件管理页:官方插件列表加高 + 页面底部留白 200px |
| 04-62 | ✅ 已实施并验证(服务器已生 | 插件目录:缓存状态可见化 + 「重新拉取目录」按钮 |
| — | ⚠️ | **编号 63 未使用**(跳号;该号只出现在当日工作日志的「事故 63」里,**无档案**,勿补占)|
| 04-64 | admin 侧已实施 | 接入 AnySearch 搜索 provider(admin 侧已实施;**待端到端确认 → 铺普通用户**) |
| 04-65 | ✅ 已部署并生效(服务器 ` | 功能插件启停与 web provider 配置联动(**已部署生效**:服务器 `lib/` 00:13 构建 → **00:15:23 重启即载入**,08:02 再载入;§7.3 第 3 条「anysearch 覆写 |
| 04-66 | ✅ 已实现、已验证、已部署 | 业务插件 P0 误报 → admin 显式信任(fail-closed + 逐条回显 + 留痕) |
| 04-67 | ✅ 已完成并部署 | 「功能管理」section 按 UI 规范重做 v0.2.4 |
| 04-68 | ✅ 全部完成并验证 | 候选池启停的 root 属主污染根治(setpriv 降权 + 属主自愈 + 清存量) |
| 04-69 | ✅ 已完成(2026-09- | 并发治理落地(文档库 commit 常态化 + 服务器侧操作锁 + 权限统一 + 代码库留路标) |
| 04-70 | ✅ 已止损 | **anysearch 插件与 dsh 0.1.2-rc.1 不兼容 → 实例崩溃循环**(已止损;**待决:能力保留/下架**) |
| 04-71 | ✅ 已落地并部署(2026- | **插件兼容性预检**:导入/上传即判定(判据 A semver 依赖范围 + 判据 B 运行时导出符号;已部署 `8d19e89`) |
| 04-72 | ✅ 已完成并部署(2026- | **实例被回收/关闭后,回到页面自动唤醒并重建连接**(不再需要手动刷新;`b23e386`) |
| 04-73 | ✅ 已实现并单点验证 | **让锁真正拦得住人**:措辞修正(guard/交接单)+ **PreToolUse 强制钩子**(无锁拒写;⚠️ 待 `/hooks` 审核启用) |
| 04-74 | ✅ 已落地并实测验证(配置 | **实例内存治理**:V8 老生代上限 **256→160 MiB**(走平台预留的 `DSH_INSTANCE_NODE_OPTIONS`,**零代码改动**)+ 采样脚本加**阈值告警**(85% × 连续 3 次 |
| 04-75 | 📋 标准已立 | **插件评估新增两维度**(接档案 71):**托管友好性** H1–H4(**向浏览器交付绝对 URL = 阻断**;硬编码 loopback / 自建监听 = 警告)+ **资源成本**(加载 `rss` 增量,>3 |
| 04-76 | ✅ 代码改造 + 组件级验证 | **dsh-univer-office 平台适配改造**(**档案 75 首个落地样本**):gateway 加 **unix socket** 传输(`UNIVER_DSH_GATEWAY_SOCKET`,**不设则完 |
| 04-77 | ✅ 已落地并验证(服务器 ` | **回到页面自检 + 就地恢复(恢复过程可见化)**:判据从「进程在不在跑」改为「**页面能不能连上实例**」(新增实例侧探针 `GET /`,2.5 秒超时;`404/405` → 降级回旧判据,**绝不误报**)+ |
| 04-78 | ✅ 已部署并验证(2026- | **崩溃熔断:冷却期 + 告警**(修档案 77 §八 遗留 1):熔断态改为**跨轮存活**(不再被 `resetCrashState()` 清空)+**指数冷却**(10 min × 2^(n-1),封顶 6 h), |
| 04-79 | ✅ 已修复并部署 | **插件启停的两处平台缺陷**(2026-09-13 发现,**P0 未修**):① 隔离定位循环 `uninstall` **缺 `await`** → unhandled rejection **把整个 orches |
| 04-80 | 📋 评估中 | **架构与功能优化评估(保留功能前提下的重构方向)+ 去平台痕迹**:**不推倒重来** —— 平台本体就是要保留的功能;**今天几次事故根因全是「层层补丁叠加」**(模板转义把注入脚本写崩 ×2、配额与插件集合脱钩致 |
| 04-81 | 🚧 执行中(R0 已完成 | ① 定下**一套命名**:对外叫「**工作台**」、内部统一前缀 **`dshs`**(替换 `dshs`); |
| 04-82 | 🚧 代码完成、产物已出 | ① R2 的 **R5 权限影响评估**已在档案 81 §9.2 出齐并获批(扩大点=实例内出现可操作的管理入口 ⇒ **仅 admin 可见** + **只读** + 写操作回跳)。⚠️ **本档内部 16 份重复(1 |
| 04-83 | ✅ 已完成并上线验证 | ① 查实:登录页用的是 `design.css` —— 一套**深色 OS-desktop 体系**,与 `06-工作台UI规范`(**强制基线**、冲突时以它为准)**全面冲突**; |
| 04-84 | ❓ | 实例内存配额口径统一(消灭「388 MiB」误报) |
| 04-85 | ✅ 已上线并端到端验证(后端 | ① 原先平台是「**统一 KEY**」——`resolveApiKey()` **显式忽略入参 userId**,不管谁 spawn 都注入 admin 那一把;② 本轮改为**两层**:**用户自己的 key 优先,没 |
| 04-86 | ✅ 已上线并端到端验证(后端 | ① 平台**所有**服务/文件 API 都是 `request.user.id` 语义(`desktop.ts` 头注释原文 "one user can never address another user's file |
| 04-87 | ✅ 已上线并端到端验证(后端 | **平台自建「模型设置」**(官方「设置 → 模型」页在平台环境**必然报错** ⇒ 弃用它):① 官方「模型」分区对**全角色(含 admin)**隐藏 —— 判据是**浏览器页面**的 loopback 判定(真实域 |
| 04-88 | ✅ 已修复并验证(源仓 `c | **内置 dsh 安装路径按序探测(修 P1 静默失效)**:平台**三处**把内置 dsh 目录写死成 `/usr/local/lib/node_modules/@deepseek-ai/dsh` —— 而 `npm |
| — | 🔍 | **档案 82–86 尚未登记进本表**(本轮发现;属别人 lane 故未代加):82 R2 管理面就地化|83 登录注册页对齐|84 内存配额口径统一|85 模型密钥开放给用户自配|86 admin 跨用户实例管理 + 两处改名。**待收口会话补** |
| — | 🧪 | `04-调整方案/poc/portal-entry/`:portal-entry 插件源码(v0.5.1)|
| 06 | 🔄 | **前端 UI 强制基线**:Token/布局/组件/交互/9 条已知坑 |
| 07 | ✅ | **实例 UI 分区登记表**:settings.section 的 id/order/label → 提供者 → 源码 → 可改性 + 定位套路(含"中文文案要同时搜 UTF-8 与 \uXXXX") |
| 04-89 | 🔄 进行中(L2 机制级已验 | **对话内文件预览**:采纳官方推荐库现成插件 `@softspark/dsh-file-preview`(65 KB,包住官方 `openWorkspacePath` 接管"点文件"手势;兼容预检 ok、已启用、L5 |
| 04-103 | 📋 | **客户端安装 + 覆盖网络互联 · 可行性评估**(规划态 · 未实施):判定 ✅ 可行,且现有架构已给出约 80% 形状(`soft` 档实例=裸子进程 ⇒ 无需 root;Worker 拨出式反向隧道 ⇒ **节点本来就不需要公网 IP**);缺口 4 条(客户端运行时落点 · 节点身份 · **信任模型反转** · 分发与版本矩阵);形态三档已按用户口径收窄为**单机自用**(B 档);6 步落地、每步可单独回滚。⚠️ 真正硬阻塞点修正 = **平台调用层**(Windows 下裸名 `spawn` ENOENT / `.cmd` EINVAL),非 dsh 运行时 |
| 04-104 | 📋 | **覆盖网络 · 全球架构复盘**(规划态 · 未实施):五层架构(控制面 / 会合 / 骨干·中继 / 数据面 / 观测)+ 12 条必须内建特性 + **10 类风暴类型学** + 流量组织五原则 + 流量预算表 + 7 步落地顺序。🔑 三句结论:控制面与数据面**彻底分离** · 失败不要变成重试(退避+抖动+判死) · 放大点必须前置治理。🟢 范围声明:**只做技术实现,跨境数据合规由使用者自负**(⛔ 不再作前置条件或上抛项) |
| 04-105 | 📋 | **覆盖网络 · 骨干层方案**(规划态 · 未实施):多中心骨干(≤10–20 成员、全互联;每节点只连 1–2 个骨干)+ 选择性加入。三条硬约束:**接入 / 成员 / 可见三分离** · **骨干资格只能控制面签发**(否则出现第二权威源、骨干沦为公网跳板) · **骨干不得被默认征用**(命中 R5)。⚠️ §7 唯一待拍板 = 骨干服务范围(A 只服务自己名下设备 / B 服务全网;**倾向 A→B 渐进**) |
| 04-106 | 📋 | **覆盖网络 · 百台规模推演 v2**(规划态 · 纯文字推演):⚠️ 含**前提级纠错**(v1 作废)—— 用户纠正「**单机用也要互联**」;错因 = **把「租户维度收窄」误当成「网络维度收窄」**。100 台异构画像:L1 10 / L2 30 / **L3 需中继 40–55** ⇒ **中继按 45% 设计、55% 留余量**(⛔ 不用同构假设的 15%);**必须补 443/TCP 兜底**(否则企业/校园网整类进不来);**L1 自动升格为中继候选**;仍不建全互联(4,950 vs 100) |
| 04-107 | 📋 | **覆盖网络 · 千台全场景推演**(规划态 · 纯文字推演):1000 台异构 × 11 场景 + **流量预算总表** + 瓶颈排序。🔥 **第一瓶颈 = presence**(1000 人大房 ≈ **16,700 次/秒**,是其消息扇出的 16 倍;普通房合计 8,200/s);💰 **最大成本杠杆 = 游戏服放 L1**(放家宽 ⇒ 中继 **600 Mbps 常驻**、峰值 1.2–2.0 Gbps;放公网 IP ⇒ **0**);游戏的真正门槛是 **jitter < 20 ms** 而非带宽;**agent 为本方案独有放大源** |
| 04-108 | 📋 | **覆盖网络 · 游戏专项(MMORPG 2D/2.5D · MUD · 传奇类)**(规划态 · 未实施):⚠️ 判定**由「不合适」修正为「最匹配」**(该类游戏天生服务端权威 + tick 驱动 + **AOI 九宫格** + 分区/分线;每玩家仅数 KB/s~数十 KB/s、几百 ms 无感)—— 原"不合适"只针对 3D 大世界强实时竞技。⭐ 核心简化:**玩家之间不需要互联 ⇒ 中继容量按「服数」算、不按「玩家数」算**。含 12 条设计细节 + 参考方案(Evennia/Skynet/Pomelo/Nakama…)+ 8 条反模式 |
| 04-109 | 📋 | **覆盖网络 · 调研:游戏网络特征与单房间群聊上限**(规划态 · 全网调研稿,数值均标来源):游戏侧每玩家 **2–20 KB/s**、同步 5–20 Hz、**jitter > 20 ms 即 desync**;群聊侧 **Telegram 20 万 / WhatsApp 2,048 / Discord 单频道 100K+**;🔑 **上限不是「人数」而是「扇出预算」**,且 **presence(N²) 比消息更早爆**(1000 人房 ≈16,700/s)。**本方案实际上限 = min(扇出预算, presence 预算, agent 预算)** |
| 04-110 | 📋 | **覆盖网络 · 答疑(群聊+agent / 备份 / 迁移提速 / 传输保密)**(规划态 · 未实施):① 群聊=**应用层**的事(覆盖网络只给「可达」);**agent 四条硬约束**(⛔ 禁止 agent 直接触发 agent);② ✅ **备份主层用对象存储**,覆盖网络只当**搬运通道与第三副本**(P2P 副本无 SLA、可误删,不适合当存档);③ 迁移 7 条按收益排,**最大一招 = 只搬不可再生(46.3 MB vs 2.9 GiB ≈ 64×)**;④ 保密 = 三层加密 + 元数据保护,**最大缺口 = 身份(共享令牌 → 一机一钥)** |
| 04-111 | 📋 | **覆盖网络 · 补遗与参考方案**(规划态 · 未实施):互联游戏 ✅ 但**由游戏形态决定**(锁步/回合/异步最友好;FPS/MOBA 64+ ❌ 不合适,P2P 无法反作弊);补遗 **24 条**(身份与账户 / 寻址与名字 / 接入与可见性 / 自检与选路 / 流量与公平 / 移动端弱网 / 升级版本自愈 / 可观测)+ 10 个能力域的参考方案 + **反模式 12 条**。⭐ 最划算的架构复用:**群聊房间与游戏对局是同一个模型**(一次投资,群聊 + 游戏 + 协作 + 看板共用) |
| 04-112 | 📋 | **覆盖网络 · 九大瓶颈落地方案**(规划态 · 未实施):把 107 的九大瓶颈逐个给成**可执行做法 + 验收判据**(含 Slack / SCCM·BranchCache·Delivery Optimization 官方照抄点)。🎯 **只做三件 = presence 改造 + 游戏服放 L1 + 块级内容寻址分发**(覆盖最大三个瓶颈,且**都不需要改传输协议**)。🔑 分水岭:**必须做「块级」内容寻址,⛔ 别做「包级」**(包级 = 版本一发所有 peer 源失效 ⇒ 正是全量重拉风暴的成因) |
| — | 🗄 | `archive/dsh-improvement-plan-20260909-full.md`:拆分前 19 章 |
| — | ✅ | `skills/dsh-change-workflow/SKILL.md`:六阶段 + **红线 R1-R11**(工作副本在本机 `.workbuddy/skills/`)|
| — | ✅ | `skills/dsh-decision-method/SKILL.md`:**改造决策方法论**(用户有效决策 U1-U12 / AI 有效决策 A1-A13 / 反例 X1-X8 + 确认最优解十问 + 交互 UI 专项清单)(工作副本在本机 `.workbuddy/skills/`)|
| — | ✅ | `skills/dsh-feature-first/SKILL.md`:**功能优先协作协议**(用户只提功能卡 4 问 · AI 自主决策 9 类白名单 · 只上抛功能语义分叉与红线门禁 · 报障闭环前置 · 交付回执格式)(工作副本在本机 `.workbuddy/skills/`)|
| — | ✅ | `skills/dsh-opensource-release/SKILL.md`:**开源导出与版本迭代**(五条硬规则 R-O1–R-O5 · 脱敏映射表唯一口径 · 分层授权与其 MIT 法律前提 · 迭代发布 SOP · 验证六件套 · 8 条实测坑)(工作副本在本机 `.workbuddy/skills/`)|
| — | ✅ | `skills/dsh-plugin-diagnose/SKILL.md`:**业务插件故障诊断**(三层归属 host / client / 网关·原生绑定 · 三把尺子 inject 差集 / glibc 直测 / 产物插探针 · 8 条实测坑)(工作副本在本机 `.workbuddy/skills/`)|
| — | ✅ | `skills/dsh-env-bootstrap/SKILL.md`:**环境引导 / 迁移**(常驻规则快照 `references/常驻规则-快照.md` + `scripts/resident-rules.py` 的 `--check / --inject / --env-check / --snapshot`;**权威方向单向**:CODEBUDDY.md 为权威、快照为副本)(工作副本在本机 `.workbuddy/skills/`)|
> **待办与优先级不在本文件维护**(单一来源):**未规划**的见 `03-路线图与待办.md` §二;**已规划待执行**的见 `交接单/README.md` §一。
---
## 三、变化与更新状态:怎么追
| 手段 | 怎么做 |
|---|---|
| **双端对账** | `bash scripts/docs-sync-check.sh`(一致/不一致/仅本地/仅服务器 + 退出码 0=全绿)|
| **机读清单** | `python3 scripts/docs-manifest.py` → `docs-manifest.json`(状态/日期/tier/引用数)|
| **质量审计** | `python3 scripts/docs-audit.py`(9 类判定;编号冲突与悬空引用会返回非 0)|
| **代码侧变更** | `git -C /opt/dshs log --oneline`(平台代码是 git 仓库,比文档更细)|
| **文档侧变更** | 本目录是 git 仓库:`git log --oneline`;服务器镜像无 .git,靠 scp 单向推送 |
| 时间线溯源 | `03-路线图 §已完成` + 各档案 commit 列 + `archive/` 全文 |
---
## 四、归档与工作区残留
| 文件 | 位置 | 状态 |
|---|---|---|
| **已完成的交接单**(规划/执行分离的单子)| `archive/交接单-已完成/` | **T02**(文档库收尾:37/38 编号消歧 + INDEX 瘦身 28,809→7,468)|**T03**(7 插件整合投放:`dsh-plugin-mcn-suite` 上传候选池 + **guest 启用成功**,实例重启探活通过)|**T04**(并发治理:commit 常态化 + 服务器侧操作锁 `/opt/dsh/state/.op-lock` + 权限 700/600 + 代码库 `ebe8075`→`06e63ac`)|**T05**(插件兼容性预检:`04-71` 落地 + 档案 66 源码回填)— 均 2026-09-12 完成|**T06**(平台自建「模型设置」:`04-87` 落地 + 插件 0.3.11 铺发 + 迁移 V6 + 官方模型分区全角色隐藏;验收四件事全绿,顺手修角色补丁整文件覆盖与陈旧断言两颗雷)— 2026-09-13 完成|**T07**(内置 dsh 安装路径按序探测:`04-88` 落地;**三处**写死路径(第 3 处是提出方漏的)改为按序探测 + 降级留痕;测试服 `test106` 三种姿势验证通过)— 2026-09-14 完成 |
| 三份工作区草案(插件管理面 / VoxEMW×2)| `archive/工作区草案/` | 已归档防丢;插件草案 v5 被档案 16 取代 |
| `scripts/docs-{sync-check.sh,audit.py,manifest.py}` | 本库 `scripts/` | 随库分发,**在用** |
| `.workbuddy/memory/YYYY-MM-DD.md` | 工作区 `.workbuddy/` | 过程日志,不入库 |
| `*.bak*` | 各处 | 已纳入 `.gitignore`;**服务器侧勿生成结尾带点号的备份名**(Windows 落不了地)|
---
## 五、仓库与同步拓扑
| 资产 | 路径 | 仓库 / 状态 |
|---|---|---|
| **平台代码** | 服务器 `/opt/dshs`(git,上游 fork,**浅克隆**)| `git@work.alotbuy.com:maogeigei/dsh_shenxian.git` — `master @ ebe8075` ✅ 已推送 |
| **改造文档** | 本机 `dsh-server-docs/`(**本目录即工作树**)↔ 服务器 `/opt/dsh/docs`(镜像,root 600)| `git@work.alotbuy.com:maogeigei/dsh_shenxian_doc.git` — `main @ 43e4ae9` ✅ 已推送 |
| 上游基线 | `上游骨架仓库(已按要求不再具名)`(123 提交,HEAD `04bc832`)| 本机 remote 名 `upstream` |
| 本机代码副本 | `D:\github\dsh_shenxian` | 上述代码仓库的 clone |
**约定**
1. **推送只能从本机执行**:服务器无 Gitea 凭据 → 服务器改码后 `git bundle`(区间)→ 本机 fetch/merge → push。
2. **同步链路(文档)**:编辑本目录 → `docs-sync-check.sh` 对账 → scp 到 `/opt/dsh/docs`(`chmod 600`,README 保持 644)→ 复跑脚本确认全绿。
3. **权限**:服务器 docs 树 root 600(README 644);`/opt/dsh` 为 `drwx------ root`(用户 uid 读不到,需先暂存到用户 home 再安装)。
4. **行尾**:本机 git 的 system 级 `core.autocrlf=true` 会把工作树写成 CRLF,而仓库 blob 是 **LF** → **scp 单文件前看 `file` 输出**;脚本类必须 LF(否则 shebang 带 `\r` 执行失败)。
---
## 六、新增文档的落位规则(约定)
1. **功能类改造** → `04-调整方案/` 新建档案,**编号递增**(**复跑取号,勿写死**:`ls 04-调整方案/ | sort -n | tail -1`;**63 为空号,勿补占**);模板:目标 → 改动 → 验证 → 红线遵守 → 回滚。
2. **规范 / 基线类**(跨页面长期生效)→ 根级编号文档(`01`~`06`),不入 `04-调整方案/`;入库时登记 §一 场景表 + §二 清单。
3. **排障记录** → 追加 `02-运维手册.md` 排障小节。
4. **状态 / 待办变化** → 更新 `03-路线图与待办.md` 与本文件 §二。
5. **保留原章节编号**,便于与 `archive/` 完整版对查。
6. **同步**:见 §五.2(对账 → scp → chmod → 复跑)。
7. **UI 规范优先**:涉及前端改动**先读 `06-工作台UI规范.md`**;沉淀了新"为什么"要回写源侧并回拷 `06`。
8. **规划/执行分离的任务单** → `交接单/`(约定见其 `README.md`):规划会话产出单子,执行会话按单开工(**不读规划会话上下文**);完成后 `git mv` 入 `archive/交接单-已完成/` 并在 §四 加行。
| 04-90 | 🔄 进行中(阶段 1 通过 | > 目标版本 = **`0.1.5-rc.1`**(npm `latest`;用户材料里插件 peer 也是 `^0.1.5-rc.1`,三方自洽)。 |
| 04-91 | ✅ 已上线(`busines | **「模型设置」页复刻官方交互**:换行根因是 **4 列表格 auto 列宽** ⇒ 改官方**卡片行**(两侧 nowrap)+「新增」改**两步式**(两个虚线按钮 → 卡片主字段只剩「API 密钥」);顺修「由 |
| 04-92 | ✅ 已上线 | **官方推荐插件列表按 dsh 版本过滤**:官方目录**不带** dsh 版本字段 ⇒ 平台侧逐包查 npm 声明与**平台真实版本**比;默认隐藏「仅兼容更旧版本」,「需更高版本」橙色标注。⚠️ 两处静默降级已钉住: |
| 04-93 | ✅ 已上线(平台后端已构建重 | **兼容判定收口**:① 「单测长期红」真相 = **服务器源码落后于 git**(本机 48/0 全绿)⇒ 同步即修;② 伞包 `@deepseek-ai/dsh` 收口到 `dsh-install.platformP |
| 04-94 | ✅ 已上线(平台后端已 `n | **实例内存口径定案**(用户裁定 base 448 / max 1024):两侧常量(编排器 `instanceMemMb()` ↔ 插件客户端 `MEM_*`)收成一份事实 = **BASE 448 / MIN 44 |
| 04-95 | ✅ 已上线 | **HTML 外壳缓存治理 —— 修「Failed to load plugins」根因 + 流程违规自审**:页面报 `client-modules: bundle script …&rev=… failed to l |
| 04-96 | ✅ 已上线(平台后端已重建重 | **实例内存与插件开关解耦 → 「基础 MIN、最多浮动到 MAX」**(用户两段原话:先「不要受插件开关影响,只受 min 和 max 值影响」,再「改成基础 min 最大可以浮动到 max」):平台侧 = cgrou |
| 04-97 | ✅ 已上线 | **`/plugins/` 合并脚本补 ETag + 304 短路**(承 96 之后查出的真缺陷,与当日故障无关):官方 `dsh-client-modules` 把全部客户端插件拼成**一条 11 MB 脚本**(` |
| 04-98 | ✅ 已上线 | **治本:陈旧 `dsh-auth-*` cookie 回写清理**:dsh 每次实例(重)启动都换 `dsh-auth-<随机>` 的 cookie 名,平台此前只在转发时丢弃旧的、**从不回写浏览器** ⇒ jar |
| 04-99 | 🔄 已落地待生效(钩子已装 | > 1. **根因 = 拦截点错位**(不是"AI 不听话"):既有「提问闸门」hook 的 matcher 是 `^AskUserQuestion$`,只能拦**工具调用**;实测本工作区宿主日志 `tool=AskU |
| 04-100 | ✅ 已实施并投放(`busi | **结论**:在**既有「功能管理」section 内新增「我的技能」分组**(**不新开 section**),用户在同一页看完并管理「功能插件 + 我的技能」两类功能;技能行支持 上传 / 启用 / 停用 / 删除, |
| 04-101 | ✅ 已实施并投放 | **结论**:分区改名「**能力管理**」(label 级),页内改为 **tab 分页**(功能插件 / 我的技能,各自独立操作),插件卡片的**中文用途描述从 1 行放宽到 3 行**(`.bp-plugDesc`) |
| 04-102 | ✅ 已实施并投放 | **结论**:语言切换搬进 **`@dsh-local/portal-entry` 的「用户设置」分区**(id `user-settings`,order 103), |