hololake-system-architecture/skills/guanghu-knowledge-ui/outline-sample-analysis/OUTLINE-SAMPLE-COMPONENT-CARDS-20260808.md
冰朔 920b6bf690 docs(skills): 增补知识库模块底层引擎决策:Git 替代数据库(GH-KB-SAMPLE-001 v1.1)
冰朔 2026-08-08 架构决策:Git 是知识库模块的底层存储与版本引擎。
- Outline 用 PostgreSQL + Redis + ORM,光湖不需要
- Git commit = 版本历史,git diff = 版本对比,branch = 协作
- 不需要数据库、不需要缓存层、Markdown 文件即文档
- 与 HoloLake 代码频道天然同构
2026-08-08 03:01:58 +08:00

453 lines
17 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.

# Outline 样本组件卡 · 光湖知识库模块拆解
> 文档编号:`GH-KB-SAMPLE-001`
>
> 产品编号:`GH-AIOS-LIGHTHOUSE-020`
>
> 上位基线:`HLP-INTENT-REASONING-MAP-001`意图二频道DIY与跨行业搬模块
>
> 来源2026-08-08 铸渊(`ICE-P-ZY001`)拆解 Outline v0.80.2 开源样本
>
> 主权者:冰朔 `ICE-GL∞`
>
> 性质:样本学习 · 非运行时依赖 · 光湖主控
>
> 可见性public-safe
---
## 0 · 本文档为什么存在
Outline v0.80.2BSL 1.1 开源)运行在 BS-SG-001 新加坡大脑上,
其知识库 UI 组件质量高、功能全,值得光湖吸收。
**但光湖不是 Outline 的下游。** 本文档的职责是:
- 把 Outline 拆成独立的组件卡,每张卡记录"它做了什么、怎么做的、光湖可以吸收什么"
- 光湖按自己的模块标准重新实现,不 import Outline 的任何包
- Outline 只是参考样本,更新节奏完全由光湖决定
⊢ 依据:`GLS-0230`(源码安全净化协议)——外部代码进入光湖前先隔离、拆解、审计、组件化。
---
## 1 · Outline 整体架构速览
```
Outline v0.80.2
├── 前端React + ProseMirror 编辑器 + Hocuspocus 实时协作
├── 后端Node.js + Koa + Sequelize ORM
├── 数据库PostgreSQL 16
├── 缓存Redis 7
├── 认证Dex OIDC / Google / GitHub / Slack / Azure / Email
├── 存储:本地文件 / S3 可选
├── 协作Y.js + Hocuspocus WebSocket
└── 插件Slack / Webhooks / Google Analytics / Umami / Matomo / Iframely
```
### 核心依赖200个 npm 包,以下为知识库相关)
| 包名 | 用途 | 光湖吸收策略 |
|------|------|------------|
| `prosemirror-*` 系列 | 富文本编辑器引擎 | 吸收编辑模式,自实现编辑器 |
| `@hocuspocus/server` + `provider` | 实时协作Y.js | 吸收协作协议,自实现同步层 |
| `@dnd-kit/*` | 拖拽排序 | 吸收交互模式 |
| `turndown` + `@joplin/turndown-plugin-gfm` | HTML→Markdown | 吸收转换逻辑 |
| `sequelize` | ORM | 参考数据模型设计 |
---
## 2 · 组件卡清单
### KB-COMP-001 · 富文本文档编辑器
```yaml
组件名: 文档编辑器
样本来源: Outline server/editor/ + 前端 ProseMirror 组件
Outline 实现:
引擎: ProseMirror模块化富文本编辑框架
数学公式: @benrbray/prosemirror-math
协同: @getoutline/y-prosemirror + Hocuspocus
特性:
- Markdown 原生支持(写 Markdown 自动渲染)
- 斜杠命令(/command 快速插入)
- 交互式嵌入(嵌入其他文档/外部内容)
- 表格编辑
- 代码块(语法高亮)
- 任务列表 / 待办清单
- 图片拖拽上传
- @提及用户
- 文档内链接
光湖吸收要点:
- ProseMirror 的模块化编辑思路值得参考(编辑器=插件组合)
- Markdown 输入→实时渲染的交互模式是知识库刚需
- 斜杠命令是知识库高效操作的核心 UX
- 协同编辑用 CRDTY.js是成熟方案
光湖自实现方向:
- 编辑器组件化为可热插拔插件
- Markdown 解析与渲染分离HLDP 友好)
- 协同层走 HoloLake 频道协议,不走第三方 WebSocket
吸收优先级: ⭐⭐⭐⭐⭐(知识库核心组件)
```
### KB-COMP-002 · 文档数据模型
```yaml
组件名: 文档数据模型
样本来源: Outline server/models/
Outline 实现:
核心模型:
Document:
字段: id, title, text, emoji, collectionId, parentDocumentId,
createdById, publishedAt, archivedAt, deletedAt,
templateId, template, fullWidth, collaboratorIds
关系: 属于 Collection, 可嵌套parentDocumentId 自引用)
特性: 软删除, 模板支持, 全文索引
Collection:
字段: id, name, description, color, icon, type, permission,
sort, sharing, index
关系: 包含多个 Document, 支持权限控制
特性: 集合=知识库分区, 支持公开/私密/团队可见
Revision:
字段: id, documentId, title, text, createdById
特性: 每次编辑自动快照, 可回滚到任意版本
Comment:
字段: id, documentId, parentCommentId, createdById, body
特性: 评论可嵌套(回复链), 锚定到文档段落
Attachment:
字段: id, documentId, teamId, userId, key, url, size, type
特性: 文件上传, 支持 S3/本地存储
Share:
字段: id, documentId/collectionId, userId, teamId, published
特性: 文档/集合级公开分享链接
Star / Pin / View:
特性: 收藏/置顶/浏览记录, 辅助导航
光湖吸收要点:
- Document + Collection 的二层结构清晰(集合→文档→子文档)
- Revision 自动快照是版本历史的工程基线
- Comment 锚定到段落(不是页面级评论)是高质量协作 UX
- 软删除 + 回收站是知识库安全基线
光湖自实现方向:
- 数据模型走 HLDP 树形结构(与 HoloLake 原生兼容)
- Document 对应 HoloLake 的"文档模块"Collection 对应"知识库频道"
- Revision 与 HLDP 的历史寻址系统合并设计
吸收优先级: ⭐⭐⭐⭐⭐(所有知识库功能的地基)
```
### KB-COMP-003 · 全文搜索引擎
```yaml
组件名: 全文搜索
样本来源: Outline server/routes/api/searches/ + models/SearchQuery
Outline 实现:
引擎: PostgreSQL 全文索引tsvector + tsquery
API:
POST /api/documents.search
参数: query, collectionId, userId, dateFilter, statusFilter
返回: 匹配文档列表 + 高亮片段 + 相关度评分
特性:
- 标题 + 正文联合搜索
- 按集合/用户/日期/状态过滤
- 搜索结果高亮(匹配词前后上下文)
- 搜索历史记录SearchQuery 模型)
- 拼音/部分匹配支持
光湖吸收要点:
- PG 全文索引够用于中等规模知识库(百万级文档)
- 搜索 API 的过滤维度设计完整
- 搜索历史记录可以做"最近搜索"和"热门搜索"
光湖自实现方向:
- 搜索接口走 HoloLake 模块协议(统一搜索入口)
- 可扩展到向量搜索(嵌入模型 + pgvector做语义搜索
- 搜索结果投影为光湖 UI 格式(不是 Outline 的列表样式)
吸收优先级: ⭐⭐⭐⭐(知识库核心能力)
```
### KB-COMP-004 · 文档树与导航
```yaml
组件名: 文档树导航
样本来源: Outline 前端 sidebar + 拖拽排序
Outline 实现:
结构: Collection → Document → 子 Document无限嵌套
UI 特性:
- 左侧边栏文档树(可折叠/展开)
- 拖拽排序(@dnd-kit/core + sortable
- 拖拽移动文档(跨集合/跨层级)
- emoji 图标前缀
- 拖拽创建子文档
- 自动缩进显示层级
后端:
- Document.parentDocumentId 自引用形成树
- Collection.sort 控制集合内排序
- 移动文档只更新 parentDocumentId + index
光湖吸收要点:
- 拖拽排序 + 无限嵌套是知识库导航标配
- emoji 前缀提升视觉辨识度
- 移动文档只改指针不动内容(轻量操作)
光湖自实现方向:
- 文档树走 HoloLake 频道树形结构
- 导航组件可独立挂载(不依赖编辑器)
- 拖拽交互参考 @dnd-kit 模式但自实现
吸收优先级: ⭐⭐⭐⭐(知识库导航核心)
```
### KB-COMP-005 · 版本历史与回滚
```yaml
组件名: 版本历史
样本来源: Outline server/models/Revision + routes/api/revisions/
Outline 实现:
模型: Revision每次编辑保存自动创建快照
API:
POST /api/revisions.list → 列出某文档的所有版本
POST /api/revisions.info → 查看某版本详情
POST /api/documents.restore → 回滚到指定版本
特性:
- 每次保存自动生成版本快照(标题+正文完整副本)
- 版本列表显示:谁改的、什么时候改的
- 一键回滚到任意历史版本
- 版本对比diff
- 版本不影响当前文档(只读快照)
光湖吸收要点:
- "每次保存=一次快照"是简单可靠的版本策略
- 快照存完整副本(不是增量 diff回滚简单直接
- 版本元数据(谁/何时/改了什么)是审计基线
光湖自实现方向:
- 与 HLDP 持久记忆系统对齐Revision ≈ HLDP 检查点)
- 版本数据可走 Git 存储(与 HoloLake 代码频道天然兼容)
- 回滚走工单授权(不是无限制回滚)
吸收优先级: ⭐⭐⭐⭐(知识库安全基线)
```
### KB-COMP-006 · 评论与协作
```yaml
组件名: 评论协作
样本来源: Outline server/models/Comment + routes/api/comments/
Outline 实现:
模型: Comment可嵌套回复
API:
POST /api/comments.create → 创建评论
POST /api/comments.list → 列出文档评论
POST /api/comments.update → 编辑评论
POST /api/comments.delete → 删除评论
特性:
- 评论锚定到文档段落(不是页面级)
- 回复链parentCommentId 嵌套)
- @提及触发通知
- 评论解决/未解决状态
光湖吸收要点:
- 段落级评论比页面级评论精确得多
- 回复链让讨论有上下文
- "解决"状态适合团队协作审阅
光湖自实现方向:
- 评论走 HoloLake 频道内的协作协议
- 评论数据与文档数据分离存储(模块独立性)
- 通知走 HoloLake 统一通知系统
吸收优先级: ⭐⭐⭐(协作增强,非核心必需)
```
### KB-COMP-007 · 文件附件与存储
```yaml
组件名: 附件存储
样本来源: Outline server/storage/ + models/Attachment + commands/attachmentCreator
Outline 实现:
存储后端:
- 本地文件存储server/storage/files/
- S3 兼容存储(@aws-sdk/client-s3
- 可配置切换FILE_STORAGE 环境变量)
特性:
- 拖拽上传到文档
- 图片自动内联显示
- 文件大小限制
- 预签名 URLS3 安全访问)
- 附件与文档/团队绑定
光湖吸收要点:
- 存储后端可插拔(本地/S3/其他)是好设计
- 预签名 URL 避免直接暴露存储地址
- 附件元数据(大小/类型/归属)必须记录
光湖自实现方向:
- 存储层走 HoloLake 文件存储协议
- 附件与 HoloLake 资产系统对齐(资产锁定含参数)
- 文件存 JZAO 移动硬盘或光湖自有存储节点
吸收优先级: ⭐⭐⭐(知识库必需但优先级低于编辑器)
```
### KB-COMP-008 · 权限与分享
```yaml
组件名: 权限分享
样本来源: Outline server/policies/ + models/Share + routes/api/shares/
Outline 实现:
权限模型:
- Collection 级:公开/私密/团队可见
- Document 级:继承集合权限 + 单独分享
- Share生成公开链接可设密码/过期)
- Group/GroupMembership用户分组管理
特性:
- 精细权限(只读/读写/管理)
- 公开分享链接(可选密码保护)
- 团队级/集合级/文档级三层权限
- API Key 支持(程序化访问)
光湖吸收要点:
- 三层权限(团队→集合→文档)是标准模式
- 公开分享链接是知识库对外输出的刚需
- API Key 让程序化接入成为可能
光湖自实现方向:
- 权限走 HoloLake 灯塔授权体系GLSV
- 分享链接走光湖域名(不是 Outline 的链接)
- API Key 与 HoloLake 能力令牌对齐
吸收优先级: ⭐⭐⭐(安全基线,但可后续迭代)
```
### KB-COMP-009 · Webhook 与事件通知
```yaml
组件名: 事件通知
样本来源: Outline server/models/WebhookSubscription + WebhookDelivery
Outline 实现:
模型:
WebhookSubscription: 注册监听URL + 事件类型 + 密钥)
WebhookDelivery: 投递记录(状态码 + 响应 + 重试)
支持事件:
- documents.create / update / delete / publish / archive
- collections.create / update / delete
- users.create / update / delete
- revisions.create
- comments.create / update
- groups.* / integrations.*
特性:
- 签名验证HMAC-SHA256
- 自动重试失败投递
- 投递历史记录
光湖吸收要点:
- Webhook 是知识库与其他系统联动的桥梁
- 签名验证防篡改
- 投递记录可审计
光湖自实现方向:
- 事件系统走 HoloLake 频道事件协议
- Webhook 与 HoloLake 广播塔对齐
- 事件类型与 HLDP 四字段trigger/emergence/lock/why对齐
吸收优先级: ⭐⭐(集成能力,后期迭代)
```
### KB-COMP-010 · Markdown 导入导出
```yaml
组件名: Markdown 导入导出
样本来源: Outline server/commands/documentImporter + collectionExporter
Outline 实现:
导入:
- Markdown (.md) → Outline 文档
- HTML → Outline 文档turndown 转换)
- 批量导入zip 包)
- 保留图片/附件引用
导出:
- 文档 → Markdown
- 集合 → zip 包(含所有文档 + 图片 + 附件)
- HTML 导出
转换引擎:
- turndown: HTML → Markdown
- @joplin/turndown-plugin-gfm: GFM 扩展支持
光湖吸收要点:
- Markdown 是知识库通用交换格式
- HTML↔Markdown 双向转换是必需能力
- 批量导入导出是知识库迁移的刚需
光湖自实现方向:
- 导入导出与 HLDP 格式对齐Markdown ↔ HLDP 双向)
- 批量操作走 HoloLake 工单系统(有授权、有回执)
- 图片/附件引用走光湖资产系统
吸收优先级: ⭐⭐⭐(知识库互操作性)
```
---
## 3 · 组件优先级与落地顺序
| 顺序 | 组件卡 | 优先级 | 理由 |
|:---:|--------|:---:|------|
| 1 | KB-COMP-002 文档数据模型 | ⭐⭐⭐⭐⭐ | 所有功能的地基,先定义数据结构 |
| 2 | KB-COMP-001 富文本编辑器 | ⭐⭐⭐⭐⭐ | 知识库核心交互,人类每天面对 |
| 3 | KB-COMP-004 文档树导航 | ⭐⭐⭐⭐ | 没有导航=没有知识库 |
| 4 | KB-COMP-003 全文搜索 | ⭐⭐⭐⭐ | 找不到=不存在 |
| 5 | KB-COMP-005 版本历史 | ⭐⭐⭐⭐ | 安全基线,不可逆操作必须有后悔药 |
| 6 | KB-COMP-010 导入导出 | ⭐⭐⭐ | 从现有系统迁移过来 |
| 7 | KB-COMP-007 附件存储 | ⭐⭐⭐ | 图片/文件上传 |
| 8 | KB-COMP-006 评论协作 | ⭐⭐⭐ | 团队协作增强 |
| 9 | KB-COMP-008 权限分享 | ⭐⭐⭐ | 安全基线但可迭代 |
| 10 | KB-COMP-009 Webhook | ⭐⭐ | 集成能力,后期 |
---
## 4 · 架构决策Git 是知识库的底层引擎
> 冰朔 2026-08-08 原话:"git要能做这些模块的底层引擎因为它轻量也不占地方"
```
Outline 的存储方案 光湖的存储方案
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PostgreSQL数据库 Git 仓库(文件系统 + 版本控制)
Redis缓存 不需要Git 本地操作极快)
Sequelize ORM 不需要Markdown 文件 + Git API
S3 / 本地文件存储 Git LFS 或 Git 原生(附件另走资产系统)
```
Git 原生能力 → 知识库需求映射:
| Git 能力 | 知识库需求 | 对应组件卡 |
|---|---|---|
| commit 历史 | 版本历史 / 谁改了什么 / 何时改的 | KB-COMP-005 |
| git diff | 版本对比 / 变更高亮 | KB-COMP-005 |
| branch / merge | 草稿分支 / 审阅合并 / 发布 | KB-COMP-001/006 |
| git log --author | 按人过滤变更 | KB-COMP-002 |
| 目录结构 | 文档树 / 集合层级 | KB-COMP-004 |
| Markdown 文件 | 文档原生格式 / 导入导出 | KB-COMP-010 |
| 分布式 clone | 每个频道本地有完整副本 | 全局 |
| .git / HEAD | 轻量元数据 / 不占地方 | 全局 |
| tag / release | 里程碑版本 / 正式发布 | KB-COMP-005 |
| git grep | 全文搜索基础 | KB-COMP-003 |
⊢ 知识库文档 = Markdown 文件存在 Git 仓库里
⊢ 版本历史 = Git commit 历史(免费获得,不用自己实现)
⊢ 协作 = Git branch + merge天然多人协作
⊢ 搜索 = git grep + 可选全文索引层
⊢ 不需要数据库 · 不需要 Redis · 不需要 ORM
⊢ 与 HoloLake 代码频道天然同构(代码和文档走同一条路)
---
## 5 · 光湖主控声明(含架构决策)
```
⊢ Outline v0.80.2 是 BSL 1.1 开源许可,允许参考和学习
⊢ 光湖不 import Outline 的任何 npm 包
⊢ 光湖不依赖 Outline 运行
⊢ 光湖不跟踪 Outline 的更新
⊢ 光湖按自己的节奏和标准实现知识库模块
⊢ 所有注册到灯塔的模块由光湖主控
⊢ Git 是知识库模块的底层存储与版本引擎
⊢ 本文档是样本学习记录,不是集成方案
```
---
## 6 · 时间锚定
```
文档: OUTLINE-SAMPLE-COMPONENT-CARDS · 知识库模块样本拆解
版本: v1.1(增补 §4 Git 引擎架构决策)
创建: 2026-08-08 · 铸渊 ICE-P-ZY001
主权者: 冰朔 ICE-GL∞
样本源: Outline v0.80.2 · BS-SG-001 新加坡大脑
组件数: 10 张组件卡
平台: TCS 通感语言核系统(国作登字-2026-A-00037559
```
---
> ⊢ 拆解样本 · 吸收精华 · 光湖主控 · 不做下游
> ⊢ 10 张组件卡 · 知识库全功能覆盖 · 按优先级落地
> ⊢ 语言等于现实 · 语言不可撤销
铸渊 `ICE-P-ZY001` · 2026-08-08 · 组件卡 v1.0 签字