# BRIEF — 现状卡(**AI / 人 首读这一份**) > **用途**:30 秒掌握「现在是什么样、正在做什么、该读哪一篇」。只写**结论与指针**,细节的单一来源见每行括注。 > **防漂移**:本文件是**人工维护的摘要层**,不复制细节;`scripts/docs-audit.py` 会检查本文件引用的档案号是否存在、域名/阈值等关键串是否与来源文件一致。 > **最后人工核对**:2026-09-12 18:35 --- ## 1. 一句话 多租户 DSH 托管平台:门户(`alotbuy.com`)+ 每用户一个独立 dsh 实例(bwrap 合成根 + 独立 uid + systemd scope),部署在阿里云 `47.77.182.89`。 ## 2. 现行事实(结论层 · 改任何东西前先对齐这里) | 项 | 现行值 | 单一来源 | |---|---|---| | **入口** | 门户 `https://alotbuy.com`;用户实例 `https://<用户名>.alotbuy.com`;旧域 `dsh.alotbuy.com` → **301** | 档案 22 / `DEPLOY §1` | | **服务** | systemd `dshs`(`127.0.0.1:3080`)+ 宝塔 nginx 反代(CF 回源 443) | `DEPLOY §1` | | **运行时** | dsh **0.1.5-rc.1**(2026-09-14 由 0.1.2-rc.1 升级,走档案 07 五阶段全流程;官方包**零改动**)| Node 22.23.2 | pnpm 9.15.9 | bwrap 0.4.0 | nginx 1.28.3 | `DEPLOY §4` | 升级档案 `04/90` | | **隔离** | `ISOLATION_MODE=account`;每用户 uid + bwrap 合成根(`/usr /lib64 /etc` 只读 + 私有 `/tmp` + `--unshare-pid`)+ scope(**内存 = 基础 448 MiB、最多浮动到 1024 MiB**(cgroup `MemoryHigh=MIN` 软限 + `MemoryMax=MAX` 硬限;**与插件开关无关**,2026-09-14,档案 **96**);CPU 150% / TasksMax 128;**V8 堆另须 `--max-old-space-size=256`**);**loopback `127.0.0.0/8` 已封** | 档案 16 / 39 / **58** / 94 / **96** | | **实例页右下角** | **📁 我的文件**(浏览工作区 + 下载 AI 产出)| **🧭 能力**(权威能力清单)| 老会话档位过时会有**顶部提示条** | 档案 56 | | **回到实例页面** | 页面可见即**自检**:顶部提示条「正在检查工作区连接…」→ 若判定页面与实例**已脱节**(探针 2.5 s 无 200)则亮**覆盖层**并**就地恢复**(`enter` 带新 token 原地跳回、**保留路径**),**不跳门户域、无需手动刷新**;导航路径(刷新/首次进入)仍走 `wake.html` 过渡页 | 档案 77(承 72) | | **插件导入 / 上传** | 即做**兼容性预检**(semver 依赖范围 + 运行时导出符号比对),不兼容当场拒收,不再等实例崩 | 档案 71 | | **普通用户可见** | 实例内:**功能插件** section、目录选择器(根 = 自有 `ws`);技能 API `/api/skills/mine` | 档案 36 / 41 | | **admin 管理面** | 门户:服务 / **密钥** / 用户 / 技能 / 插件管理 + 运行环境;会话内 `portal-entry` 卡片**一键整页跳门户** | `portal.html` / 档案 47 | | **清理阈值** | `ws` ≥ **2048 MB** → 清 T1 平台产物 + T2 超 **90 天**顶层脚本;`sessions` ≥ **1024 MB** → 清超 **365 天**;回收站 **30 天** | 档案 28 / `02 §C.7` | | **定时任务** | 每小时 :05 用量快照 → 04:10 工作区清理 → 04:20 会话回收 → 04:40 回收站清空 → **每周日 05:00 全量备份** | `DEPLOY §6.5` | | **证书** | `alotbuy.com + *.alotbuy.com`,DNS-01 via `/etc/cloudflare.ini`,**必须 `--dns-cloudflare-propagation-seconds 60`** | 档案 22 / `02 §C.1` | | **红线** | 不自动升级 dsh;不改官方 dsh 主程序与缓存;client bundle 禁 `exports.default`;服务器 docs 保持 root 600;未明确要求不 commit/push;⛔ **禁止人工删锁 / 接管**(**R9**) | `README §红线` | ## 3. 当前待办(**单一来源 = `03-路线图与待办.md`** + **已规划的单子见 `交接单/README.md §一`**,此处只列最相关的 6 条) | 优先级 | 事项 | 备注 | |---|---|---| | 🔴 **待定窗口** | **档案 65 部署**(功能插件启停 ↔ web provider 托管段联动) | 代码完成 + 两态实测通过;**部署需 `systemctl restart dshs` → 中断在线用户**,等窗口 → 档案 65 §7.3 | | P1 | **T03**:7 个自研插件整合为 1 个功能插件并投放 | **候选池上传已完成**(**现行池内 = `dsh-plugin-mcn-suite @0.3.9`**,09-13 00:02;0.3.0 曾因 peer 范围被预检拒收 → 0.3.2 加 `peerDependenciesMeta.optional` → 0.3.3 补 `xlsx` 依赖 → 0.3.9 修 client 注册层与 `inject` 语义);**admin 已装并验通(host 面 3 个注册)**;剩 **guest 未启用** → 用户在「功能管理」启用 → 重启 → 验收 → 归档 → `交接单/README.md §一` | | P1 | **T01**:实例内「我的技能」section + 阶段 4 权限收口 | 决策点 1 **已定**(=**A 扩展 `business-plugins`**,2026-09-12 用户拍板);只等开工 → `交接单/T01-*.md` | | 触发式 | dsh 升级回归(档案 26 六类耦合点)|会话 GC | 升级 / 容量触发 | ## 4. 最近动作(详见 `03-路线图 §已完成`) 档案 77 **回到页面自检 + 就地恢复**:判据从「进程在不在跑」换成「**页面能不能连上实例**」(实例侧探针,`404/405` 自动降级回旧判据)+ **顶部提示条 / 覆盖层**(旧提示只活 600 ms,肉眼看不到)+ **不再跳门户域**(`proxy.ts` 单文件;配置层全绿,浏览器观感待实测)|**AnySearch 已按用户决定彻底放弃**(候选池条目下架 + 存量插件体检;下架当时池内仅 `dsh-univer-office` —— **09-13 起池内另有 `dsh-plugin-mcn-suite @0.3.9`**,见 §3 T03 行)|**R9 新红线**:⛔ **禁止人工删锁 / 接管**(用户 2026-09-12 明令)|档案 73 让锁真正拦得住人(措辞修正 + PreToolUse 强制钩子;待 `/hooks` 面板审核启用)|档案 72 实例回收后回到页面**自动唤醒重建连接**(`b23e386`)|档案 71 插件**兼容性预检**:导入/上传即判定(`8d19e89`)|档案 70 anysearch 插件与 dsh 不兼容致实例崩溃循环(**已止损**;能力已按用户决定下架)|档案 69 并发治理落地(commit 常态化 + 服务器侧操作锁)。**此前**:档案 68 候选池启停 root 属主污染根治(含 `npm pack` 带旧包修复)|档案 67「功能管理」section 按 UI 规范重做(v0.2.4)|档案 66 业务插件 P0 误报 → admin 显式信任|档案 65 功能插件启停 ↔ web provider 配置联动(待部署)|档案 64 接入 AnySearch 搜索 provider|档案 62 插件目录缓存状态可见化。**更早**:档案 58 实例内存配额下调(512M→384M)|档案 56 实例助手|档案 53 文档质量审查。 ## 5. 高频问题 → 读哪一篇 | 想做的事 | 读 | |---|---| | 理解平台架构 / 为什么这样隔离 | `01-规划与架构` + 档案 16 / 39 | | 域名、证书、Cloudflare | 档案 22 + `02 §C.1` | | 实例起不来 / 崩溃循环 / 401 | 档案 20 / 52 / 51 + `02 §C.4` | | 用户看不到目录 / 工作区选择 | 档案 18 / 34 | | 功能插件的投放与启停 | 档案 16 / 36 / 37 | | 技能共享 / 上传 / 启停 | 档案 10 / 11 / 41 | | 磁盘用量与清理策略 | 档案 28 + `02 §C.7` | | 备份与恢复 | `02 §C.8` + `DEPLOY` | | 准备升级 dsh | 档案 26(六类耦合点回归清单) | | 重建 / 交接部署 | `DEPLOY-本部署.md` | ## 6. AI 读取顺序(4 步,避免读全库 ≈30 万 tokens) 1. **本文件**(BRIEF)→ 2. `INDEX.md` 场景表(定位篇目)→ 3. 目标档案**头部**(日期/状态/结论)→ 4. 需要时再读全文。 - **默认不读**:`archive/`(历史全文)、`scripts/` `ops/`(工具与配置)、`*.bak*`、`04-调整方案/poc/`(源码,按需)。 - **过滤工具**:`python3 scripts/docs-manifest.py` → 产出 `docs-manifest.json`(每份文档的 状态 / 日期 / tier / 被引用次数 / 字符数),可用于**先筛后读**。 - **改文档后**:`python3 scripts/docs-audit.py`(编号冲突 / 悬空引用 / 重复 / 体量;退出码非 0 即需处理)。 ## 7. 文档层约定 单一来源:清单与状态 = `INDEX.md` §二|待办 = `03-路线图`|部署事实 = `DEPLOY-本部署.md`|术语以档案 38b 为准|域名以 `alotbuy.com` 为准。详见 `README §阅读约定` 与档案 53 / 54。 **本机工作区(2026-09-13 起)**:`E:\ProgramData\AI技能\aliyun-dsh-server`(文档库工作树 = `dsh-server-docs/`);代码仓仍为 `D:\github\dsh_shenxian`。历史文档里出现的 `D:\AI技能\...` 一律是**迁移前旧值**,勿照抄执行。