Files
dsh_shenxian/dsh-server-docs/BRIEF.md
T
admin 3efd68517f chore: 并入已删除会话的在途成果(防丢失;原会话已删,未做功能验收)
**背景**:这些改动原属本工作区另外几个会话(T01/T02 等),**那些会话已被用户删除** ⇒
工作树里的成果处于"无主"状态,一次错误 checkout / 覆盖即**永久丢失** ⇒ 代入库保全。
口径遵循本项目**先例**(`39a1f2e` / `b617cdb`:**别人的活,代入库并在提交信息里注明**)。

**内容**:档案 101「能力管理」改名 + 页内 tab 分页|档案 102 语言切换搬入「用户设置」|
`07-实例UI分区登记表.md`|`scripts/find-ui*.mjs`(UI 元素定位工具)|`poc/portal-entry/`(0.5.3)|
`src/web/locale-pref.ts` + `home-files.ts`(语言偏好持久化)|`test/locale-pref.test.mjs`|
`package.json`|`BRIEF.md` / `INDEX.md` / `docs-manifest.json` / `03-路线图与待办.md` / 档案 100 增量。

**已做最小健全性检查**(⚠️ **未跑完整构建 / 单测** —— 那是原会话的验收职责,本次只求"不丢"):
- JSON 合法:`package.json` / `poc/business-plugins/package.json` / `docs-manifest.json` ✓
- 4 个 TS 文件 `{}`/`()` 配平 ✓;新增文件均非空 ✓
- 规模:13 文件改动 +340/−210,新增 12 条

**未 push**(按 §4 提交边界:用户说"提交",未说"推送")。
2026-09-15 21:17:12 +08:00

71 lines
8.4 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.
# 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技能\...` 一律是**迁移前旧值**,勿照抄执行。