Files
dsh_shenxian/dsh-server-docs/INDEX.md
T

266 lines
47 KiB
Markdown
Raw Normal View History

# 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`)。域名 `ai1net.com`(旧域 `alotbuy.com` 自 2026-09-19 仅作 301 过渡装置)。
---
## 一、按场景快速定位
| 我要做什么 | 先读 |
|---|---|
| **访问入口(当前域名)** | 门户 `https://ai1net.com`;用户实例 `https://<用户名>.ai1net.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-O14(源仓库只读 / 探针 0 命中 / 去插件 / 不带文档与 skill / **双轨授权:AGPL-3.0 原样 + 商业轨独立文件**)+ 脱敏映射表 + **迭代 SOP** + 验证七件套 · 多远端推送(GitHub + CNB);工作根在本机 `E:\ProgramData\AI技能\dsh-ai1net-github\` |
| **排查业务插件故障(没 UI / 装不上 / 改了没生效)** | **`skills/dsh-plugin-diagnose/SKILL.md`**:三层归属 + 三把尺子(inject 差集 / glibc 直测 / 产物插探针)|
| **换电脑 / 改了工作区路径,规则会不会丢** | **`skills/dsh-env-bootstrap/SKILL.md`**:常驻规则快照 + `--check` 校验 / `--inject` 注入 / `--env-check` 环境自检(默认只报不改)|
| **跑跨会话长任务(自动接力)** | **`skills/dsh-auto-handoff-chain/SKILL.md`**:六件套 prompt 骨架 + 登记门禁 + 六条实测防护 + **排期两条铁律**(首个/唯一接续棒 = 收口 + 5~8 分钟 · 同一时刻只挂一个接续棒) + 复跑脚本 `scripts/chain_report.py` |
| **排查线上运行问题 / 事后溯源(跨机日志)** | `scripts/dshlog.mjs`(代码仓):`collect` 拉取归档 → `q` 查询 / `timeline` 时间线 / `watch` 巡检;用法与实测基线见 **`04-调整方案/129-日志采集与巡检-方案C实现.md`** |
| 看还有什么没做完 | `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` |
---
## 二、全量清单
> **状态摘要**(**机器生成,勿手改**):档案 **123** 份(`04-*`),另含根级编号 5 条(01/02/03/06/07),另有非编号行 14 条(README / INDEX / 技能 / poc 等)—— ✅ 22 | 🔄 5 | 🔍 1 | 📋 23 | 🟡 1 | 未标记 76。复跑 `python3 scripts/docs-index-stats.py` 取数,`--write` 就地刷新本行。
> **分层与机读明细**(路径 / 日期 / 字符数 / 被引次数 / tier,可 `jq` 先筛后读):**`docs-manifest.json`**;复跑 `scripts/docs-manifest.py` 即刷新。
> 图例:✅已落地 | 🔄维护中 | 🧪PoC | 📝待开发 | 🔍核查完成 | 📋评估 | 🟡保留兜底 | 🗄归档|🔧修复|🔴|🚧|❓|PoC 实证完成(插件 v0|已上线|生效|已实施|已实施 + API 全链路验|已冻结|已落地 + 验证通过|审计已完成 → 加固项待用户|已上线,页面全部 200|已封板,实施中|核查完成 → 收敛项 H1-|✅ 已实施并在 admin/|🔄 批次 1 因改走 bun|方案 A + handoff|根因已定位并修复(nginx|修复已编译(CI ✅),待重|已实施并上线|已修复并上线(服务已重启|清单建立|✅ 已实施并端到端验证|✅ 已实施并 live 验证|✅ 已实施并视觉验证|🔍 核查完成,P0 待决策|✅ 已实施(commit 见|✅ 已实施(commit `|✅ 已修复(commit `|🔍 取证完成|🔍 核查完成|✅ 已实施(`99de8c5|✅ 已落地|✅ 已修复|已落地并实测验证|已落地并端到端验证|🔄 第一批已修复|✅ 已实施(两批):第一批|✅ 已实施并端到端验证(co|✅ 已实施并验证(服务器已生|admin 侧已实施|✅ 已部署并生效(服务器 `|✅ 已实现、已验证、已部署|✅ 已完成并部署|✅ 全部完成并验证|✅ 已完成(2026-09-|✅ 已止损|✅ 已落地并部署(2026-|✅ 已完成并部署(2026-|✅ 已实现并单点验证|✅ 已落地并实测验证(配置|📋 标准已立|✅ 代码改造 + 组件级验证|✅ 已落地并验证(服务器 `|✅ 已部署并验证(2026-|✅ 已修复并部署|📋 评估中|🚧 执行中(R0 已完成|🚧 代码完成、产物已出|✅ 已完成并上线验证|✅ 已上线并端到端验证(后端|✅ 已修复并验证(源仓 `c|🔄 进行中(L2 机制级已验
| 号 | 状态 | 一句话 |
|---|---|---|
| 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 源失效 ⇒ 正是全量重拉风暴的成因) |
| 04-113 | 📋 | **覆盖网络 · 传输方案取舍(开放端口 vs 自研 relay)**(决策稿):逐条对比 5 种传输形态,定下**自研 relay + 回环监听 + 中继切流**路线;⛔ P4(SSH 版中继 / 32023)判**不做** |
| 04-114 | 📋 | **覆盖网络 · 应用场景推演完成度 & 方案待完善清单**(检查稿):逐场景打勾哪些已推演、哪些仍缺;作为后续补遗的取数底稿 |
| 04-115 | 📋 | **覆盖网络 · 「插件 vs 改内核」架构判断**:结论 = **走插件层**(不改官方 dsh 内核,红线 R2);给出插件化边界与代价清单 |
| 04-116 | 📋 | **覆盖网络方案 · 问题逐条推演与解决方案**:把散落疑问逐条编号推演并给解法,是 103–112 之前的**问题总账** |
| 04-117 | 🔄 | **覆盖网络 · 参数表与观测口径(唯一一张)**:所有可调参数的**单一来源**(含「⛔ 不改」清单:`RELAY_FAILOVER_DEADLINE_MS` / `HB_SEC` / `COOLDOWN_MS=0` 禁用)+ 指纹口径(`sed '/^## §10 指纹/,$d'` 后再 md5) |
| 04-118 | 🔄 | **会合 / 中继从 Manager 拆分 · 取证与改造方案**(**进行中**):S0–S4 分步 + 每步验收 / 回滚;起因 = 重启会收掉实例 scope 而无 reconciler |
| 04-119 | 📋 | **集群化改造方案 · Manager / Worker 模式**:D1–D5 已定(⏳ 仅 D6 未做)+ **数据分层判据**(归属/租约只 Manager 写 · 跟用户走放实例 home · 本机运维放 Worker 本地库) |
| 04-120 | 📋 | **跨节点迁移 & 节点自举 · 完整流程方案**:用户实例在节点间搬迁的完整流程与自举条件 |
| 04-121 | 📋 | **项目代码 · 分层范式与迭代风险评估**:代码分层 P0 已立;给出各层边界与「层层补丁叠加」的返工风险 |
| 04-122 | 📋 | **guest 迁移(w-47 → w-106)与共享重建方案**:存量 guest 落 106 的搬运步骤 + 共享面重建判据 |
| 04-123 | 📋 | **方案规划方法 —— 从覆盖网络线提炼**:把本线的规划手法沉淀成**可复用方法论**(判据优先 / 单一来源 / 假绿识别) |
| 04-124 | 🔍 | **文档无效信息审计报告**:对文档库做「无效信息」体检,输出应删/应改/应合并清单(**报告,未执行**) |
| 04-125 | 📋 | **会话接续机制 · 问题复盘与修复**:复盘「接续为何断链/为何空转」,产出修复项(**排期两条铁律** = ① 首个/唯一接续棒 = 收口 + **5~8 分钟**〔原记 2~5,2026-09-18 用户更正〕② **同一时刻只挂一个接续棒**;规则实体见技能 `dsh-auto-handoff-chain §3.1.1`) |
| 04-126 | 🔄 | **会话接续规范:token 超限后如何无损继续**:接续六件套 prompt 骨架与登记门禁的规范文本 |
| 04-127 | 📋 | **DSH 平台客户端化部署方案 —— 单机自用**:B 档(单机自用)形态下的客户端化部署路径;⚠️ 真正硬阻塞 = 平台调用层(Windows 裸名 `spawn` ENOENT) |
| 04-128 | 📋 | **DSH 桌面客户端开发方案 —— 基于官方 Electron 壳迭代**(待评审 · 只做规划不含代码):复用官方壳 vs 自建的取舍与分发/版本矩阵 |
| 04-129 | ✅ | **日志采集 · 实时巡检 · 事后溯源(方案 C 实现)**:不装新日志服务(否 Amber / 否 Loki+Alloy),用 `scripts/dshlog.mjs` 把 47/106 journald 拉回本机按天归档 + 跨机时间线 + 8 条巡检规则;**服务器侧零安装零端口**;⚠️ 最大剩余缺口 = 实例 `dsh --profile` 的 stdout 不进 journald |
| 04-133 | 🟡 | 🔴 **序㊺ 实测判「D 本轮不实现」**(真实首屏包 **23 块 0 个低熵块**、60 份真实独立内容 **0 份低熵** ⇒ `D-1` 无对象可稀释、`D-2` 前提不成立)⇒ 剩 **C 域分离 + 判据重裁**(序㊻ · automation `aab9e357-8101-4011-b829-bf9f4a459bf7`)|**覆盖网络 · 低熵块治理方案 —— C 域分离 + D 非确定性**:块 id / 内容 id 的收敛哈希改 **per-network keyed hash**(切断跨 network 相关性,代价≈0)+ 低熵块非确定性(首选 **D-1「稀释域」**);⛔ **B(OPRF / SA-MLE)不立项**(降级为可选加强);🔴 **第一个动作 = 补测「低熵块种类数 / 体积 / 占首屏包比例」**(从未测过;且切分是**定长 1 MiB** ⇒ 首屏包内几乎无纯低熵块,待测必须含**子窗口腿**防假绿)|交付 = `交接单/覆盖网络-序45-低熵块治理-测熵与实现.md` |
| 04-134 | ✅ | **注册页人机验证与邮箱验证码**(2026-09-19 落地 · 线上实测通过):注册 = 用户名 + 密码 + **邮箱验证码** + **Cloudflare Turnstile**(✅ **密钥已配、已启用**;服务端校 `success` + `action` + `hostname` **三项** —— 只校 `success` 时"拿公开 sitekey 在自己站点替真人取合法 token 再打我们接口"这条路是通的);DB **迁移 v10**(`users.email` + `email_codes` 事件表);邮件走**可插拔驱动**(`brevo` / `http` / `log`,换供应商只改 env),发件人 **`noreply@ai1net.com`**(Brevo 域名已认证 + DKIM + SPF);防爆破 = 三层配额 + **递增冷却阶梯**(60→60→180→300→900→1800s)+ 试错 5 次作废 + 码只存哈希 + 单次使用;实测 Brevo **delivered**、冷却 429、错码 `attemptsLeft` 递减、正确码 201、重放被挡、无 token/假 token **403**|档案 `04-调整方案/134-注册页人机验证与邮箱验证码.md` |
| 04-135 | ✅ | **旧域 `alotbuy.com` 从项目移除**(2026-09-19 落地):代码 / 服务端 / 文档技能三层收敛为 `ai1net.com` 单域;旧域站点**降级为 301 过渡装置**(保留 ACME + `/dshs-relay` + `/dshs-overlay/bootstrap`,**30 天零流量**后退役);relay 候选 **5 → 3**(删掉两条“摘名不同、同落 47”的伪多样性);修 `wake.html` 转义点残留 + 演练脚本硬编码域造成的**假红**;参数表 2 键与 §10 指纹同步 |
| 04-136 | 📋 | **控制面按两台中继取并集 —— 立项交接单**(2026-09-19 立项 · **未落地**):平台 web 层只取 47 中继 ⇒ 106 中继不被使用;根因链 7 行(取址路径 `src/web/server.ts` / `rendezvous.ts`)、**先红后绿**强制、候选 A/B 各带优缺点、验收 E1–E8 + 回滚 |
| 04-137 | ✅ | **品牌标识改造 —— 去 DeepSeek 图形 → 平台自有标识**(2026-09-19 上线):**四页 + favicon 一并替换** —— `login` / `register` / `admin` 页头删 **DeepSeek 鲸鱼图标 +「DeepSeek」文字图形** 改平台标识(中文「**能力枢纽**」/英语及其他语言「**CapabilityNet**」,走 i18n 词条 `brand.name`,`en` 一条即覆盖其他语言回退);`portal` 顶栏换图标(页面名「管理门户」保留);**新建 `web/favicon.svg`**(平台自有 hub 图标,避开 DeepSeek 蓝);🔴 **会话页面左上角那处不动**(用户明示「先不替换」+它属官方 dsh client bundle,受 R2 约束);🔴 踩坑:**SVG 的 XML 注释不得含 ASCII 双连字符 `--`**(写 CSS 变量名即踩)⇒ 整份 SVG 解析失败、图标**静默不显示**,已加进 `verify-static.mjs` 并做反向自证;新增 `test/i18n-brand.test.mjs`|档案 `04-调整方案/137-品牌标识改造-去DeepSeek图形.md` |
| 04-138 | ✅ | **平台共享模型 —— 管理员逐用户授权(默认关闭)**(2026-09-19 上线):新增列 `users.shared_model_granted`(v11,**默认 0**),**生效 = `granted ∧ enabled`** —— 前者 admin 在**用户列表**里逐个开(新增「共享模型」列),后者仍是用户自己的偏好(保留);未授权时设置页**连"平台共享模型"那一块都不渲染**(插件 0.3.24);🔴 **顺带修掉一个既有真缺陷**:落地层原先用**本机 fs** 写用户 home,而用户卷在 worker 上 ⇒ **模型落地对"实例不在本机"的用户一直是静默空操作**(托管清单被清空、目标文件一字节没动;档案 87 的模型设置页对 guest 这类用户从未生效)⇒ 改为走 `UserFs` + worker agent 新增**白名单**端点 `/fs/home-read|write`;两腿实测(未授权撤销 / 授权恢复)|档案 `04-调整方案/138-平台共享模型-管理员逐用户授权.md` |
| 04-139 | ✅ | **品牌中文名:能力枢纽 → 能力网络**(2026-09-19 上线):其他语言仍 `CapabilityNet`(en 词条即回退);落点四处 = i18n 中文词条 / `admin.html` 顶栏 / **`favicon.svg` 的 `<title>`+`aria-label`**(最易漏)/ `design.css` 注释;品牌回归测试期望值同步,`verify-static` + SVG 真解析全绿;🔴 行尾按**目标目录既有风格**逐文件对齐(服务器 `admin.html`=CRLF 而本机=LF,直传会翻掉整个文件)|档案 `04-调整方案/139-品牌中文名改为能力网络.md` |
| 04-140 | ✅ | **涉密内容外置到配置目录**(2026-09-19 落地):把散落在代码里的**真实部署值**(域名 / IP / 主机号 / 内网路径 / Worker 令牌 / PG 口令)统一收进 `config/`,代码改为**引用配置**—— TS 走 `src/platform-paths.ts`、shell 走 `config/load.sh`、node 走 `config/index.cjs`;🔴 **真实值只放 `config/platform.env`**(`.gitignore` 排除、服务器侧 **600**),仓库内只留 `platform.env.example`;🔴 优先级 = **系统 env > `config/platform.env` > 代码内中性默认值**(代码默认一律中性 ⇒ ⛔ 别把生产值写回默认);🔴 `platform-dirs.conf` **必须保留 `DSH_PLATFORM_DIR=/opt/dsh`**(删掉它 `platformDir` 退化成 `<dataRoot>/platform` ⇒ state/backups/artifacts **静默搬家**);🔴 `DEFAULT_OVERLAY_SEED` / `DEFAULT_OVERLAY_BOOTSTRAP_SEEDS` **刻意留空**(种子只由 env 给,已固化为回归断言);`src/platform-paths.ts` **必须零副作用**(不 mkdir / 不写文件);注释里的真标识无法引用配置 ⇒ **一律中性化**(`<server-public-ip>` / `<base-domain>` / `<host-a>`);`web/wake.html` 注册域白名单改为**运行时从 `location.hostname` 推导**(换域名零改动);改造后**完整检查两遍**(第 2 遍抓到第 1 遍的漏项);零回归 = `tsc` 0 错 · `npm test` **373/375**(唯一失败 `lease` 属既有)· `/opt/dsh/{state,backups}` 未搬家 · `/var/lib/dshs/platform` 未误建;**下线核实轮**(09-19 15:3x)复扫补修 `scripts/find-ui-scan.py` 里残留的 `/var/lib/dshs` 字面量(改为由 `find-ui.mjs` 注入 `DSHS_USERS_DIR`,缺失即显式失败、⛔ 不静默回落)|档案 `04-调整方案/140-涉密内容外置到配置目录.md` |
| — | 🗄 | `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-O14 · 脱敏映射表唯一口径 · 双轨授权与其 MIT 法律前提 · 迭代发布 SOP · 多远端推送 · 验证七件套 · 21 条实测坑 · v1.7.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/`)|
| — | ✅ | `skills/dsh-auto-handoff-chain/SKILL.md`:**多棒自动接力编排法**(规划棒 ↔ 执行棒交替 · 一次性 automation 链条 · 六件套 prompt 骨架 · 登记门禁 · **排期两条铁律 §3.1.1**〔首个/唯一接续棒 = 收口 + 5~8 分钟 · 同一时刻只挂一个接续棒〕· 六条实测防护 · 断链 / 双开 / once 不转完成态 / 预登记队列 等 · `scripts/chain_report.py` 复跑)(工作副本在本机 `.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 完成 |
|**T09–T21**(2026-09-17 从工作区根批量入仓:覆盖网络线 13 份交接单 —— 含「落地执行 / 网抽象与地址规划 R6 / relay R2-R4 / 443 兜底 / 中继失败切流 / 切流冷却语义 / presence 在线态 / 一机一钥与信任根 / 参数表与观测 / 检测时延与 deadline / 最小形态真机批次 / 观测口径与在册缺陷 / 在册收尾」;⚠️ 均为**已完成单的归档副本**,若其中仍有未完成项需在 `交接单/` 另开新单)
| 三份工作区草案(插件管理面 / 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 脚本**(` |