1) dsh-server-docs/ 从工作区(原 E:\...\aliyun-dsh-server\dsh-server-docs)**整体并入本仓**,
保留目录名 ⇒ 仓库内 dsh-server-docs/... 的相对引用天然继续有效;旧目录(含其 .git)已归档到
工作区 _中间产物_待清理/,未随本提交带入。
2) .gitattributes:新增 `dsh-server-docs/** -text` —— 原文档库是 `* -text` + autocrlf=false,
必须保持纯 LF,否则会被本仓的 CRLF 规则翻掉。
3) 活引用里的绝对路径已全部改到新位置(docs 的 INDEX / README / scripts / skills + 用户级 skills
+ ~/.workbuddy/settings.json 的 hooks);历史档案(04-调整方案/、archive/)按「只增不改」未动。
⚠️ hooks 路径改动需「完全重启会话」才生效(配置是会话启动快照)。
4) 交接单/T08:新增 §16「生产整体切换执行记录」(形态 / 落地动作 / **4 个只有真上线才暴露的真 bug** /
验收证据 / 回滚命令 / 残留项);台账 T08 行 → 已完成并归档;03-路线图 §二 登记 T08 收尾项。
5) 统一称谓:**「本机」只指跑 WorkBuddy 的开发机**,47 / 106 一律写「远程服务器」。
71 lines
8.4 KiB
Markdown
71 lines
8.4 KiB
Markdown
# 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技能\...` 一律是**迁移前旧值**,勿照抄执行。
|