这套文档是照代码写的,不是照设计稿写的。每一条规则都标了它的出处(文件 + 行号), 所以当代码变了,能一眼看出哪一段需要跟着改。
| 文档 | 讲什么 | 什么时候读 |
|---|---|---|
| architecture.md | 两半结构、一次请求怎么走完、读管道与缓存、硬约束 | 第一次进这个仓库 |
| api.md | 76 条 HTTP 路由、信封、错误码表、乐观锁 | 改 host 或写客户端调用 |
| data-directory.md | 数据目录布局、四份侧车、原子写、回收站、迁移 | 改存储、调试”数据不见了” |
| tree-and-placement.md | 节点种类、R1–R5、计数、虚拟放置、快捷方式、置顶与快速访问、批量动作 | 改左侧树或拖拽 |
| bridge-and-theme.md | 面板 ↔ 窗口的命令总线、SSE、主题同步 | 改独立窗口或配色 |
| component.md | 浏览器组件:状态机、镜像、校验、发布、清扫 | 改安装流程 |
| testing.md | 四十五个测试文件各钉住什么、怎么跑 | 提交之前 |
sessions/ 的物理布局。 移动会话是唯一改文件的操作,走
lib/host/move.js 的三件事一个事务;”换个分组”用侧车覆盖(sessionPlacement),不动字节。lib/domain/tree-rules.js 拥有全部树规则;lib/client.js 只读 host 算好的
字段,不持有任何决策表。历史上三份规则漂移过一次,test/tree-mirror.test.mjs 就是为那次写的。lib/
index.js 路由表(76 条)、分发、错误映射、启动装配
client.js 整个面板与设置页(单文件、无构建)
http.js 信封与请求体解析
constants.js API 前缀、插件 id、固定节点 id
capabilities.js 对宿主服务的防御式探测
paths.js 数据目录解析(env → settings → .location)
fs.js 存在与列举:宿主与组件安装共用的两个文件判断
domain/ 纯规则:tree-rules / tree / folders / shortcuts / sessions /
annotations / settings / trash / export / session-state
sources/ 读管道:heads(zstd 扫描)、projcache、reader、artifact、workspaces、
content(会话内容索引,落盘复用)
store/ sidecar(原子写 + revision)、documents(四份文档)
host/ actions、trash、move、datadir、bridge、theme、
update(更新检查)、open-link(链接白名单)、maintenance(缓存清理)、
reset(清除数据,唯一不可逆的操作)
component/ 浏览器组件:layout、state、downloader、install、manager
detached/ Electron helper:launcher、main.cjs、preload.cjs
assets/detached/ 独立窗口的页面:index.html、window.css、shim.js(不自带 UI)
assets/vendor/ 自带 React 18.3.1 UMD 构建(无构建步骤的前提)
test/ 51 个测试文件 + render-smoke
client.js 是刻意的单文件:没有构建步骤是这个插件能在 DSH 的模块加载器里直接跑起来的前提。
不要为了”结构好看”拆它——拆了就要引入打包器,而打包器会带来一个必须维护的构建产物。