docs: design hosted Office editing

This commit is contained in:
lofyer
2026-09-09 12:43:20 +08:00
parent b2ccc78642
commit f8ab801e2e
7 changed files with 253 additions and 32 deletions
+5 -1
View File
@@ -48,7 +48,11 @@ Prototype records are deliberately read-only fixtures. The action endpoint
returns an acknowledgement but does not persist changes. PostgreSQL, returns an acknowledgement but does not persist changes. PostgreSQL,
initialization and login, organization isolation, real authorization, device initialization and login, organization isolation, real authorization, device
WebSocket connections, task routing, relay, package storage, federation, and WebSocket connections, task routing, relay, package storage, federation, and
auditable mutations remain production implementation work. auditable mutations remain production implementation work. The planned Office
editing integration also has no current implementation: ONLYOFFICE Docs,
object storage, document sessions, save callbacks, checkpoints, and Desktop
document tabs remain design work described in the
[ShareServer feature documentation](docs/features/share-server/README.md).
The readiness endpoint reports this explicitly: The readiness endpoint reports this explicitly:
+4 -2
View File
@@ -1,7 +1,8 @@
# ShareServer # ShareServer
ShareServer 是 GoodBuddy 设备共享网络的独立 Web 服务。它为一个或多个组织提供身份与设备 ShareServer 是 GoodBuddy 设备共享网络的独立 Web 服务。它为一个或多个组织提供身份与设备
目录、能力发布、授权策略、任务路由、可选数据中继、能力包更新、网关联邦和审计管理。 目录、能力发布、授权策略、任务路由、可选数据中继、能力包更新、网关联邦、Office 编辑和
审计管理。
ShareServer 不属于 Electron Main,不负责桌面端局域网发现,也不自动取得设备上的能力、 ShareServer 不属于 Electron Main,不负责桌面端局域网发现,也不自动取得设备上的能力、
文件、凭据或 SSH Host。 文件、凭据或 SSH Host。
@@ -16,6 +17,7 @@ ShareServer 不属于 Electron Main,不负责桌面端局域网发现,也不
| [技术设计](./technical-design.md) | 服务模块、API、数据、部署、运维和验证 | | [技术设计](./technical-design.md) | 服务模块、API、数据、部署、运维和验证 |
| [实施进度](./progress.md) | 已验证实现、剩余生产工作与验证证据 | | [实施进度](./progress.md) | 已验证实现、剩余生产工作与验证证据 |
| [共享网络总体设计](../../../../goodbuddy/docs/architecture/share-network-architecture.md) | 跨端身份、能力、授权、任务、更新和协议权威(GoodBuddy 仓库) | | [共享网络总体设计](../../../../goodbuddy/docs/architecture/share-network-architecture.md) | 跨端身份、能力、授权、任务、更新和协议权威(GoodBuddy 仓库) |
| [Desktop Office 协同编辑](../../../../goodbuddy/docs/features/office-document-editing/README.md) | 文档 Tab、源文件回写、冲突和 AI 选区编辑(GoodBuddy 仓库) |
当前没有单独的 User Stories:管理员、能力发布者、审计员和普通成员场景已进入 PRD 与逻辑 当前没有单独的 User Stories:管理员、能力发布者、审计员和普通成员场景已进入 PRD 与逻辑
设计。仓库已建立可运行的全控制台交互原型;它用于确认信息架构与交互,不代表生产服务已经 设计。仓库已建立可运行的全控制台交互原型;它用于确认信息架构与交互,不代表生产服务已经
@@ -26,7 +28,7 @@ ShareServer 不属于 Electron Main,不负责桌面端局域网发现,也不
## 角色 ## 角色
- **系统管理员**:维护实例、身份源、域名、证书、存储和全局限制。 - **系统管理员**:维护实例、身份源、域名、证书、存储和全局限制。
- **组织管理员**:管理本组织成员、设备、组、策略、能力和联邦关系。 - **组织管理员**:管理本组织成员、设备、组、策略、能力、Office 编辑政策和联邦关系。
- **能力发布者**:在获准范围内发布设备能力或签名能力包。 - **能力发布者**:在获准范围内发布设备能力或签名能力包。
- **审批人**:处理调用、发布、更新和联邦申请。 - **审批人**:处理调用、发布、更新和联邦申请。
- **审计员**:只读查看和导出获准范围内的审计事件。 - **审计员**:只读查看和导出获准范围内的审计事件。
+53 -5
View File
@@ -5,8 +5,8 @@
| 项目 | 内容 | | 项目 | 内容 |
| --- | --- | | --- | --- |
| 状态 | 设计中 | | 状态 | 设计中 |
| 版本 | 0.2 | | 版本 | 0.3 |
| 日期 | 2026-09-05 | | 日期 | 2026-09-09 |
| 关联 PRD | [ShareServer PRD](./prd.md) | | 关联 PRD | [ShareServer PRD](./prd.md) |
| 共享规则 | [共享网络总体设计](../../../../goodbuddy/docs/architecture/share-network-architecture.md) | | 共享规则 | [共享网络总体设计](../../../../goodbuddy/docs/architecture/share-network-architecture.md) |
@@ -61,6 +61,17 @@ ShareServer 只路由调用方冻结的 provider,不在离线、繁忙或失
事实,不能读取原始条目、分区内容、来源正文或检索结果。新增可读分区按权限扩大重新审批, 事实,不能读取原始条目、分区内容、来源正文或检索结果。新增可读分区按权限扩大重新审批,
移除分区可以立即收紧。 移除分区可以立即收紧。
### INV-11 服务端检查点不等于源文件已保存
ONLYOFFICE 保存只产生 ShareServer 权威的 `DocumentCheckpoint`。只有 Desktop 或远程
GoodBuddy Agent 校验源文件基准并完成原子替换后,源文件才是已保存状态。ShareServer 不根据
callback 成功推断本机或 SSH 文件已经更新。
### INV-12 Office 凭据单用途
设备 API 凭据、编辑器一次性启动授权、ONLYOFFICE 文件令牌和 callback token 分别绑定不同
audience、单个文档会话和短期限。任何一种凭据都不能换取其他 API 权限。
## 2. 主要状态 ## 2. 主要状态
### 2.1 成员 ### 2.1 成员
@@ -124,6 +135,27 @@ active <-> paused
`mutually_confirmed` 只表示身份确认完成;双方策略同步成功后才进入 active。 `mutually_confirmed` 只表示身份确认完成;双方策略同步成功后才进入 active。
### 2.7 DocumentEditSession
```text
creating -> uploading -> ready -> editing
creating/uploading -> failed | cancelled | expired
ready/editing <-> offline
ready/editing/offline -> closing -> closed
任意非终态 -> revoked | expired
```
编辑内容使用独立状态维度:
```text
clean -> dirty -> saving -> checkpoint_available
saving -> failed | outcome_unknown
checkpoint_available -> dirty
```
`offline` 不删除已确认 checkpoint。`outcome_unknown` 必须通过对象摘要和 callback 幂等键查询
同一次保存,不能自动创建另一份 checkpoint。
## 3. 授权计算顺序 ## 3. 授权计算顺序
1. 验证请求身份、会话 audience 和 organization。 1. 验证请求身份、会话 audience 和 organization。
@@ -149,6 +181,7 @@ active <-> paused
| 编辑策略 | 否 | 是 | 否 | 否 | 只读 | 否 | | 编辑策略 | 否 | 是 | 否 | 否 | 只读 | 否 |
| 处理审批 | 否 | 可配置 | 否 | 授权范围 | 只读 | 自己的申请 | | 处理审批 | 否 | 可配置 | 否 | 授权范围 | 只读 | 自己的申请 |
| 联邦关系 | 实例级许可 | 是 | 否 | 可共同审批 | 只读 | 否 | | 联邦关系 | 实例级许可 | 是 | 否 | 可共同审批 | 只读 | 否 |
| Office 服务配置 | 是 | 策略与会话管理 | 否 | 可配置 | 只读 | 使用获准服务 |
| 审计导出 | 实例级 | 组织级 | 自己相关 | 自己相关 | 授权范围 | 自己相关 | | 审计导出 | 实例级 | 组织级 | 自己相关 | 自己相关 | 授权范围 | 自己相关 |
实际权限仍由策略计算,表格定义产品默认职责而非硬编码角色名称。 实际权限仍由策略计算,表格定义产品默认职责而非硬编码角色名称。
@@ -192,8 +225,21 @@ active <-> paused
- 删除用户不删除其历史动作,审计显示不可变主体摘要。 - 删除用户不删除其历史动作,审计显示不可变主体摘要。
- 撤销设备、Publication、Grant、Package 或联邦后立即阻止新令牌。 - 撤销设备、Publication、Grant、Package 或联邦后立即阻止新令牌。
- 对象存储中的未完成任务正文按任务期限清理;审计元数据按组织保留策略清理。 - 对象存储中的未完成任务正文按任务期限清理;审计元数据按组织保留策略清理。
- Office 会话关闭、撤销或到期后停止签发新启动、文件和 callback 令牌。工作副本与 checkpoint
按 Office 保留策略清理;法定保留只能保留匹配对象和审计,不能恢复会话权限。
- 法定保留只锁定匹配审计事件,不使被撤销身份重新可用。 - 法定保留只锁定匹配审计事件,不使被撤销身份重新可用。
### 8.1 Office 保存与回写结果
| 条件 | ShareServer 结果 |
| --- | --- |
| callback 通过验证且对象完整 | 原子发布新 checkpoint,通知 Desktop |
| callback 重复且幂等键相同 | 返回已有 checkpoint,不创建新版本 |
| callback 超时且对象结果未知 | `outcome_unknown`,查询确认后再转终态 |
| Desktop 确认源文件已写回 | 记录 `source_commit_confirmed` 元数据 |
| Desktop 报告源文件冲突 | 保留 checkpoint 至到期,记录 `source_conflict` |
| 设备或组织权限撤销 | 拒绝新操作并关闭会话,不删除 Desktop 源文件 |
## 9. 需求追踪 ## 9. 需求追踪
| 需求 | 主要逻辑 | | 需求 | 主要逻辑 |
@@ -211,9 +257,11 @@ active <-> paused
| `FR-11` | 组织角色边界及各对象状态;展示行为由 UI 设计定义 | | `FR-11` | 组织角色边界及各对象状态;展示行为由 UI 设计定义 |
| `FR-12` | 短期权威恢复规则和逻辑完整性;部署结构由技术设计定义 | | `FR-12` | 短期权威恢复规则和逻辑完整性;部署结构由技术设计定义 |
| `FR-13` | 注册、Publication、目录与授权不变量,provider 冻结及 `INV-10` | | `FR-13` | 注册、Publication、目录与授权不变量,provider 冻结及 `INV-10` |
| `FR-14` | `INV-11`、`INV-12`、DocumentEditSession、Office 保存与保留规则 |
## 10. 逻辑完整性 ## 10. 逻辑完整性
本设计覆盖实例、组织、成员、设备、能力与数字人发布、授权、审批、任务、更新、联邦、撤销 本设计覆盖实例、组织、成员、设备、能力与数字人发布、授权、审批、任务、更新、联邦、Office
和恢复。实现前仍需确定首个 OIDC 提供者矩阵、默认审计保留期、部署规模目标和中继带宽上限;这些部署 编辑、撤销和恢复。实现前仍需确定首个 OIDC 提供者矩阵、默认审计保留期、部署规模目标、中继
参数应可配置,不改变拒绝优先、双边联邦和 provider 冻结规则。 带宽上限、Office 文件上限和 checkpoint 保留期;这些部署参数应可配置,不改变拒绝优先、双边
联邦、provider 冻结、Office 凭据单用途和源文件权威规则。
+34 -2
View File
@@ -5,8 +5,8 @@
| 项目 | 内容 | | 项目 | 内容 |
| --- | --- | | --- | --- |
| 状态 | 设计中 | | 状态 | 设计中 |
| 版本 | 0.2 | | 版本 | 0.3 |
| 日期 | 2026-09-05 | | 日期 | 2026-09-09 |
| 适用产品 | 独立部署的 ShareServer 与 Web 管理控制台 | | 适用产品 | 独立部署的 ShareServer 与 Web 管理控制台 |
| 关联架构 | [共享网络总体设计](../../../../goodbuddy/docs/architecture/share-network-architecture.md) | | 关联架构 | [共享网络总体设计](../../../../goodbuddy/docs/architecture/share-network-architecture.md) |
| 关联文档 | [功能逻辑](./logic-design.md)、[管理界面](./ui-design.md)、[技术设计](./technical-design.md) | | 关联文档 | [功能逻辑](./logic-design.md)、[管理界面](./ui-design.md)、[技术设计](./technical-design.md) |
@@ -26,6 +26,7 @@
5. 两个组织可经双边确认建立有限范围的联邦协作。 5. 两个组织可经双边确认建立有限范围的联邦协作。
6. ShareServer 可以只运行控制面,也可按部署策略提供数据中继和包存储。 6. ShareServer 可以只运行控制面,也可按部署策略提供数据中继和包存储。
7. 成员可以显式开放自己的数字人,获准的组织成员可通过 `@数字人` 发起有界协作任务。 7. 成员可以显式开放自己的数字人,获准的组织成员可通过 `@数字人` 发起有界协作任务。
8. 部署方可以启用 ONLYOFFICE Docs,使 Desktop 在多个文档 Tab 中编辑 DOCX、XLSX 和 PPTX。
## 3. 产品范围 ## 3. 产品范围
@@ -39,6 +40,7 @@
- 签名能力包仓库、发布通道、更新策略和撤销。 - 签名能力包仓库、发布通道、更新策略和撤销。
- ShareServer 间双边联邦。 - ShareServer 间双边联邦。
- 组织数字人目录、数字人 Publication、授权发现和 `@数字人` 调用。 - 组织数字人目录、数字人 Publication、授权发现和 `@数字人` 调用。
- 可选 Office 编辑服务、工作副本、保存检查点、编辑器启动和 ONLYOFFICE callback。
- 审计、用量、保留和导出。 - 审计、用量、保留和导出。
- Web 管理控制台和成员自助页面。 - Web 管理控制台和成员自助页面。
@@ -54,6 +56,8 @@
- 自动信任同域邮箱、同一网络或其他 ShareServer。 - 自动信任同域邮箱、同一网络或其他 ShareServer。
- 公共开放市场、计费结算或匿名能力调用。 - 公共开放市场、计费结算或匿名能力调用。
- 替代 GoodBuddy 官方客户端、模型和 Agent 发布源。 - 替代 GoodBuddy 官方客户端、模型和 Agent 发布源。
- 自行实现 Office 渲染器,或把 ONLYOFFICE Document Server 打进 Desktop 安装包。
- 默认永久保存用户文档、选区、提示词或模型输出。
## 4. 功能需求 ## 4. 功能需求
@@ -176,6 +180,29 @@
- 审计默认只记录调用方、数字人、Publication、provider、数据类别、路由、授权、状态、耗时 - 审计默认只记录调用方、数字人、Publication、provider、数据类别、路由、授权、状态、耗时
和大小,不保存消息正文、附件内容、模型输出或记忆内容。 和大小,不保存消息正文、附件内容、模型输出或记忆内容。
### FR-14 Office 编辑服务
- Office 编辑是可选服务能力。未配置或健康检查失败时,ShareServer 仍可运行其他控制面功能,
并向 Desktop 返回明确不可用原因。
- 首期使用 ONLYOFFICE Docs Developer Edition,支持 DOCX、XLSX 和 PPTX。正式采用前必须完成
许可证、桌面集成、并发连接、白标、Automation API、私有部署和安全支持审核。
- Desktop 使用设备身份创建 `DocumentEditSession`,上传经过大小、格式和 SHA-256 声明的工作
副本。ShareServer 不接收本机或 SSH 绝对路径,也不允许文件名决定对象存储路径。
- ShareServer 为编辑器签发一次性启动授权,为 ONLYOFFICE 签发独立的短期文件和 callback
凭据;设备、编辑器和 callback audience 不能互换。
- ONLYOFFICE 保存先形成不可变 `DocumentCheckpoint`。ShareServer 只宣称检查点可用,不宣称
Desktop 本地或 SSH 源文件已经回写成功。
- 服务端保存组织、主体、会话、文档类型、大小、策略、编辑器版本、checkpoint 和清理审计;
默认不保存文档正文、选区正文、提示词或模型输出到普通日志和审计表。
- 管理员可以配置允许格式、文件大小、并发、会话期限、checkpoint 保留、只读策略和 AI 编辑
开关。策略变化可以阻止新操作,不改写已经下载到 Desktop 的源文件。
- ShareServer 托管固定版本的 GoodBuddy ONLYOFFICE 插件,用于有界选区、revision、编辑事务和
非正文状态事件。插件不能调用任意 ShareServer 管理 API、Electron IPC、宏或脚本执行入口。
- Ask 只能取得 AI 修改建议;只有 Desktop 确认的 Execute 请求可以取得绑定单会话、revision
和选区的短期编辑授权。
- 会话关闭、撤销或到期后停止新读取、保存和 AI 操作,并按组织保留策略清理工作副本、
checkpoint、Cookie 和对象令牌。
## 5. 产品验收 ## 5. 产品验收
- 新实例可完成初始化、登录、创建组织、邀请成员和注册真实桌面设备。 - 新实例可完成初始化、登录、创建组织、邀请成员和注册真实桌面设备。
@@ -192,4 +219,9 @@
- 数字人调用可以使用所有者在发布时勾选的 Agent、Global、指定 Project 或指定 Automation - 数字人调用可以使用所有者在发布时勾选的 Agent、Global、指定 Project 或指定 Automation
分区,但不能开放 Conversation 和 Run;ShareServer 和调用者不能读取原始记忆、未选择的 分区,但不能开放 Conversation 和 Run;ShareServer 和调用者不能读取原始记忆、未选择的
本地分区或记忆来源正文。 本地分区或记忆来源正文。
- 启用 Office 服务后,Windows、macOS 和 Linux Desktop 可从同一 ShareServer 分别打开、编辑
和保存 DOCX、XLSX、PPTX;多个会话不会串文件、选区、checkpoint 或权限。
- 文件 URL、callback token 和编辑器启动授权过期或撤销后不可重用;保存失败、源文件冲突或
网络结果未知不会被 ShareServer 记录为源文件已保存。
- Office 服务停用或故障不影响身份、设备、能力目录和其他任务控制面。
- 备份恢复后组织、策略、发布和审计身份保持一致,短期连接和令牌不恢复。 - 备份恢复后组织、策略、发布和审计身份保持一致,短期连接和令牌不恢复。
+14
View File
@@ -5,6 +5,17 @@
ShareServer 已进入可运行交互原型阶段。当前实现用于验证完整控制台信息架构、视觉方向与操作 ShareServer 已进入可运行交互原型阶段。当前实现用于验证完整控制台信息架构、视觉方向与操作
流程,不提供生产身份、组织隔离、设备连接、授权、任务路由或数据持久化。 流程,不提供生产身份、组织隔离、设备连接、授权、任务路由或数据持久化。
### 2026-09-09:Office 编辑目标设计
- PRD 新增 `FR-14`,将 ONLYOFFICE Docs、编辑会话、工作副本、保存检查点和 callback 定义为
ShareServer 可选托管能力。
- 功能逻辑明确服务端 checkpoint 不等于 Desktop 源文件已保存,并定义单用途凭据、会话状态、
callback 幂等、冲突结果和保留规则。
- 技术设计增加 Office 模块、API audience、数据模型、对象存储、部署依赖、编辑器插件、安全
边界和三平台集成测试要求;管理界面设计增加 Office 健康、策略和会话管理。
- 这些变更只有设计文档,没有修改当前 Hono/React 原型。仓库仍未集成 ONLYOFFICE、对象存储、
callback、Office API 或 GoodBuddy Desktop 文档 Tab,不能视为功能实现。
### 2026-09-06:独立仓库迁移 ### 2026-09-06:独立仓库迁移
- 源码、测试、锁文件、构建及容器配置从 GoodBuddy 的 `shareserver/` 移至 - 源码、测试、锁文件、构建及容器配置从 GoodBuddy 的 `shareserver/` 移至
@@ -80,9 +91,12 @@ npm run build # typecheck + Vite Web + server TypeScript passed
4. 设备挑战注册、凭据和出站 WebSocket 连接。 4. 设备挑战注册、凭据和出站 WebSocket 连接。
5. Publication、目录、拒绝优先策略、审批和任务路由。 5. Publication、目录、拒绝优先策略、审批和任务路由。
6. Package、可选中继、联邦、保留、导出、备份恢复和真实 Desktop 端到端验证。 6. Package、可选中继、联邦、保留、导出、备份恢复和真实 Desktop 端到端验证。
7. `FR-14` Office 会话、对象存储、ONLYOFFICE、callback、checkpoint、策略、管理界面和三平台
Desktop 文档 Tab 端到端验证。
当前尚未满足 PRD 的产品验收,也未进行真实 Desktop/ShareServer 集成测试。 当前尚未满足 PRD 的产品验收,也未进行真实 Desktop/ShareServer 集成测试。
2026-09-05 PRD `FR-13` 新增组织数字人发布和 `@数字人` 调用。当前交互原型尚无“数字人” 2026-09-05 PRD `FR-13` 新增组织数字人发布和 `@数字人` 调用。当前交互原型尚无“数字人”
目录、发布管理、提及选择器或 Agent 记忆边界展示,因此这些能力仍属于剩余生产与原型工作, 目录、发布管理、提及选择器或 Agent 记忆边界展示,因此这些能力仍属于剩余生产与原型工作,
不能由现有通用能力目录或原型操作确认替代。 不能由现有通用能力目录或原型操作确认替代。
2026-09-09 PRD `FR-14` 新增 Office 编辑服务;当前原型同样没有对应导航、配置或服务端路径。
+111 -15
View File
@@ -5,8 +5,8 @@
| 项目 | 内容 | | 项目 | 内容 |
| --- | --- | | --- | --- |
| 状态 | 设计中 | | 状态 | 设计中 |
| 版本 | 0.2 | | 版本 | 0.3 |
| 日期 | 2026-09-05 | | 日期 | 2026-09-09 |
| 关联 PRD | [ShareServer PRD](./prd.md) | | 关联 PRD | [ShareServer PRD](./prd.md) |
| 功能逻辑 | [功能逻辑设计](./logic-design.md) | | 功能逻辑 | [功能逻辑设计](./logic-design.md) |
| 共享协议 | [共享网络总体设计](../../../../goodbuddy/docs/architecture/share-network-architecture.md) | | 共享协议 | [共享网络总体设计](../../../../goodbuddy/docs/architecture/share-network-architecture.md) |
@@ -43,6 +43,7 @@ goodbuddy-shareserver/
tasks/ tasks/
relay/ relay/
packages/ packages/
office/
federation/ federation/
audit/ audit/
web/ web/
@@ -62,7 +63,8 @@ ShareServer 仍不得导入 Electron 的 `src/shared`,也不得依赖相邻桌
- 使用与仓库一致的 TypeScript/Node.js 工具链,具体 HTTP 框架在实现前根据维护性选择。 - 使用与仓库一致的 TypeScript/Node.js 工具链,具体 HTTP 框架在实现前根据维护性选择。
- PostgreSQL 是组织、策略、任务元数据和审计的权威数据库。 - PostgreSQL 是组织、策略、任务元数据和审计的权威数据库。
- Package 与可选中继暂存使用 S3 兼容对象存储;不开启对应功能时不要求对象存储。 - Package、可选中继暂存和 Office 工作副本使用 S3 兼容对象存储;不开启对应功能时不要求
对象存储,启用 Office 时对象存储是必需依赖。
- Web 控制台与 API 同源部署,采用严格 CSP,不在浏览器保存设备凭据。 - Web 控制台与 API 同源部署,采用严格 CSP,不在浏览器保存设备凭据。
- 单实例部署可完整工作;水平扩展时再引入共享事件/连接路由组件,不为未验证规模预设复杂 - 单实例部署可完整工作;水平扩展时再引入共享事件/连接路由组件,不为未验证规模预设复杂
分布式协议。 分布式协议。
@@ -80,6 +82,7 @@ ShareServer 仍不得导入 Electron 的 `src/shared`,也不得依赖相邻桌
| `tasks` | task/attempt、provider 路由、状态和取消 | | `tasks` | task/attempt、provider 路由、状态和取消 |
| `relay` | 可选有界数据中继,不解释能力正文 | | `relay` | 可选有界数据中继,不解释能力正文 |
| `packages` | 不可变对象、签名目录、通道和撤销 | | `packages` | 不可变对象、签名目录、通道和撤销 |
| `office` | 编辑会话、工作副本、ONLYOFFICE 配置、callback、checkpoint、保留和健康 |
| `federation` | 网关身份、offer、双边策略和跨组织映射 | | `federation` | 网关身份、offer、双边策略和跨组织映射 |
| `audit` | 事务内审计写入、查询、保留和导出 | | `audit` | 事务内审计写入、查询、保留和导出 |
@@ -87,18 +90,21 @@ ShareServer 仍不得导入 Electron 的 `src/shared`,也不得依赖相邻桌
## 4. API 边界 ## 4. API 边界
建议分为四类 audience: 建议分为六类 audience:
```text ```text
/api/v1/web/* 管理控制台与成员自助 API /api/v1/web/* 管理控制台与成员自助 API
/api/v1/device/* 设备注册、目录和任务控制 API /api/v1/device/* 设备注册、目录和任务控制 API
/api/v1/office/* Desktop Office 会话、文件和事件 API
/api/v1/federation/* ShareServer 间 API /api/v1/federation/* ShareServer 间 API
/api/v1/public/* 服务描述、健康与登录入口 /api/v1/public/* 服务描述、健康与登录入口
/internal/office/* ONLYOFFICE 文件读取和 callback API
``` ```
设备使用 WebSocket `/api/v1/device/connect` 建立出站控制通道。包下载使用短期、绑定主体和对象 设备使用 WebSocket `/api/v1/device/connect` 建立出站控制通道。包下载使用短期、绑定主体和对象
摘要的 URL。联邦 API 使用网关身份,不接受普通用户 session。每类 token 使用不同 issuer/ 摘要的 URL。联邦 API 使用网关身份,不接受普通用户 session。每类 token 使用不同 issuer/
audience/scope,不能互换。 audience/scope,不能互换。Office 启动 code、文件 token 和 callback token 也使用互不相同的
audience,并绑定单个 `DocumentEditSession`。
所有请求经 schema、认证、organization scope、授权、速率和大小边界。列表使用游标分页和固定 所有请求经 schema、认证、organization scope、授权、速率和大小边界。列表使用游标分页和固定
最大页;错误返回 request ID、稳定 code 和有界参数。 最大页;错误返回 request ID、稳定 code 和有界参数。
@@ -135,6 +141,8 @@ package_objects
package_releases package_releases
release_channels release_channels
update_policies update_policies
document_edit_sessions
document_checkpoints
federation_trusts federation_trusts
federation_capability_exports federation_capability_exports
audit_events audit_events
@@ -155,6 +163,10 @@ revocations
`project` 和 `automation` 种类及 Provider 验证后的本地关联 ID 摘要。Provider 执行时按该 `project` 和 `automation` 种类及 Provider 验证后的本地关联 ID 摘要。Provider 执行时按该
revision 在本地重新解析分区并检索;服务端不接收记忆文本、来源正文、Embedding 或检索 revision 在本地重新解析分区并检索;服务端不接收记忆文本、来源正文、Embedding 或检索
结果。新增来源是权限扩大,移除来源是单向收紧。 结果。新增来源是权限扩大,移除来源是单向收紧。
- `document_edit_sessions` 只保存组织、用户、设备、公开来源 ID、显示名、格式、对象键、摘要、
访问模式、策略 revision、状态和保留期限,不保存 Desktop 绝对路径。
- `document_checkpoints` 以 session 内单调 revision 保存对象键、大小、SHA-256、callback 幂等键
和时间;`source_commit_confirmed` 只表示 Desktop 回报结果,不由 callback 自动填写。
## 6. 事务与一致性 ## 6. 事务与一致性
@@ -164,6 +176,8 @@ revocations
- 设备在线状态允许短暂最终一致;身份、撤销、授权和任务接受必须走权威存储。 - 设备在线状态允许短暂最终一致;身份、撤销、授权和任务接受必须走权威存储。
- 重复注册挑战、联邦 offer 和 task create 使用唯一幂等键。 - 重复注册挑战、联邦 offer 和 task create 使用唯一幂等键。
- 无法确认 provider 副作用时只更新 `outcome_unknown`,不靠消息队列自动重放。 - 无法确认 provider 副作用时只更新 `outcome_unknown`,不靠消息队列自动重放。
- Office callback 的临时对象、checkpoint 行和审计事件在同一提交边界发布。数据库提交失败时
临时对象保持不可下载并由清理任务删除;重复 callback 依赖会话内幂等键返回已有 revision。
## 7. 设备连接与任务 ## 7. 设备连接与任务
@@ -200,7 +214,72 @@ authorize -> create task -> resolve exact provider connection
Release catalog 使用独立签名域。服务器不能重打包已签名 payload;镜像目标必须保持相同字节、 Release catalog 使用独立签名域。服务器不能重打包已签名 payload;镜像目标必须保持相同字节、
大小和 SHA-256。撤销更新目录和授权,不覆盖或原地删除仍受审计保留的对象。 大小和 SHA-256。撤销更新目录和授权,不覆盖或原地删除仍受审计保留的对象。
## 10. 联邦协议 ## 10. Office 编辑服务
### 10.1 部署边界
ShareServer 集成 ONLYOFFICE Docs Developer Edition,但不把 Document Server 代码并入 Hono
进程。生产部署使用独立容器和内部网络:
```text
GoodBuddy Desktop -> TLS reverse proxy -> ShareServer Office API
|-> S3 compatible object storage
|-> ONLYOFFICE Document Server
`-> Office callback worker
```
Desktop 只知道 ShareServer 公开 origin。Document Server 内部地址、JWT 密钥、对象存储凭据和
callback 内部地址只存在于部署配置或密钥管理系统。正式采用前必须完成许可证和桌面分发审核。
### 10.2 Desktop API
```text
POST /api/v1/office/sessions
PUT /api/v1/office/sessions/{id}/source
POST /api/v1/office/sessions/{id}/launch
GET /api/v1/office/sessions/{id}
GET /api/v1/office/sessions/{id}/events
GET /api/v1/office/sessions/{id}/checkpoints/{revision}
POST /api/v1/office/sessions/{id}/source-commit
DELETE /api/v1/office/sessions/{id}
GET /internal/office/files/{objectToken}
POST /internal/office/callback/{callbackToken}
```
Desktop 使用设备凭据创建会话,只提交公开来源 ID、显示名、MIME、声明大小和 SHA-256。上传按
流读取并校验真实格式,不接受 Desktop 指定对象键。`launch` 返回一次性 code;编辑页面交换为
HttpOnly、Secure、SameSite Cookie 后 code 立即失效。
ONLYOFFICE 文件 URL 和 callback URL 由 ShareServer 生成固定 origin,token 绑定 session、
revision、动作、大小和期限。接口不接受调用方提供的任意 callback URL。
### 10.3 保存检查点
callback 输出先写入随机临时对象,完成大小、摘要、格式和普通对象检查后发布不可变 checkpoint。
ShareServer 随后通过设备事件通道通知 Desktop。只有 Desktop 下载复核并回报
`source_commit_confirmed` 后,服务端审计才记录源文件已回写;冲突、超时和未知结果使用独立
状态,不能把“编辑器保存成功”翻译为“本地文件已保存”。
### 10.4 编辑器插件和 AI
ShareServer 托管固定版本的 GoodBuddy ONLYOFFICE 插件,并在会话配置中精确启用。插件只交换
有界选区描述、文档 revision、白名单编辑操作和非正文状态事件。它不能接收 JavaScript、宏、
任意 ONLYOFFICE 方法名或 ShareServer 管理 token。
AI 请求仍由 GoodBuddy Desktop 的 Conversation 和 Runtime 执行。Ask 只能生成建议;Execute
成功取得绑定 session、revision 和选区的短期 Grant 后,插件才可在单个撤销上下文中应用修改。
ShareServer 负责中继有界事件,不持久化选区正文、Prompt 或模型输出。
### 10.5 生命周期和清理
- 会话、工作副本、checkpoint、启动 Cookie 和对象 token 分别设置明确期限。
- 关闭、撤销或到期立即拒绝新读取、保存和 AI 操作。
- 清理使用对象标签和数据库状态,重复执行保持幂等,不根据用户文件名构造删除前缀。
- 法定保留只能延长明确匹配的工作副本、checkpoint 或审计元数据,不能恢复访问授权。
- 备份恢复不恢复编辑 Cookie、启动 code、文件 token、callback token 或活动编辑连接。
## 11. 联邦协议
- 每个实例生成网关身份和可轮换证书,私钥不进入数据库备份明文。 - 每个实例生成网关身份和可轮换证书,私钥不进入数据库备份明文。
- offer 包含双方可人工核对的组织名、端点、指纹、协议和 nonce。 - offer 包含双方可人工核对的组织名、端点、指纹、协议和 nonce。
@@ -209,7 +288,7 @@ Release catalog 使用独立签名域。服务器不能重打包已签名 payloa
- 不接受调用方提供的任意回调 URL、第三方 hop 或内部主体 ID。 - 不接受调用方提供的任意回调 URL、第三方 hop 或内部主体 ID。
- 证书轮换需要旧身份签名或双方重新确认;身份突变直接暂停关系。 - 证书轮换需要旧身份签名或双方重新确认;身份突变直接暂停关系。
## 11. Web 安全 ## 12. Web 安全
- 使用 HttpOnly、Secure、SameSite cookie 和 CSRF 防护管理 Web session。 - 使用 HttpOnly、Secure、SameSite cookie 和 CSRF 防护管理 Web session。
- OIDC 使用 state、nonce、PKCE 和固定回调地址。 - OIDC 使用 state、nonce、PKCE 和固定回调地址。
@@ -217,8 +296,10 @@ Release catalog 使用独立签名域。服务器不能重打包已签名 payloa
- 权限隐藏仅改善界面,所有 API 在服务端重新校验。 - 权限隐藏仅改善界面,所有 API 在服务端重新校验。
- 登录、设备注册、目录、审批、导出和联邦接口分别限速。 - 登录、设备注册、目录、审批、导出和联邦接口分别限速。
- 密钥字段只能替换、轮换和测试,永不回显。 - 密钥字段只能替换、轮换和测试,永不回显。
- 编辑页面使用独立 CSP 和 Cookie scope;ONLYOFFICE origin 不能访问管理控制台 session。
- Document Server 默认禁止任意出站网络、宏和未批准插件。编辑文件视为不可信内容。
## 12. 部署与配置 ## 13. 部署与配置
最小生产部署: 最小生产部署:
@@ -228,23 +309,31 @@ ShareServer API + Web
PostgreSQL PostgreSQL
可选:S3 compatible object storage 可选:S3 compatible object storage
可选:Relay worker 可选:Relay worker
可选套件:ONLYOFFICE Document Server + Office callback worker(需要对象存储)
``` ```
部署配置通过环境变量或挂载文件提供数据库、主密钥、公开 URL、OIDC、邮件、对象存储和限制。 部署配置通过环境变量或挂载文件提供数据库、主密钥、公开 URL、OIDC、邮件、对象存储和限制。
普通 Web 管理员不能修改基础设施秘密。提供数据库迁移命令、不可变镜像、非 root 容器、健康 普通 Web 管理员不能修改基础设施秘密。提供数据库迁移命令、不可变镜像、非 root 容器、健康
与就绪端点、优雅停止和部署示例。 与就绪端点、优雅停止和部署示例。
## 13. 可观测性与备份 Office 配置包括启用状态、Document Server 内部地址、公开编辑 origin、JWT 密钥引用、对象
存储 bucket、允许格式、文件大小、组织/用户并发、会话期限和 checkpoint 保留。管理界面不能
回显密钥。Office readiness 必须完成最小文档创建、编辑器加载、callback 和输出摘要验证,不能
只检查 Document Server HTTP 端口。
## 14. 可观测性与备份
- 结构化日志只包含 request/task/organization 关联 ID、稳定事件和错误码。 - 结构化日志只包含 request/task/organization 关联 ID、稳定事件和错误码。
- 指标覆盖请求、WebSocket、授权结果、任务状态、中继、Package 和联邦,不包含能力正文。 - 指标覆盖请求、WebSocket、授权结果、任务状态、中继、Package、Office 会话/callback 和联邦,
不包含能力正文、文档正文或选区。
- tracing 跨内部服务传播关联 ID,跨联邦只传播双方同意的关联标识。 - tracing 跨内部服务传播关联 ID,跨联邦只传播双方同意的关联标识。
- 备份 PostgreSQL、Package 对象和网关身份;不备份缓存、Web session、nonce 或中继暂存。 - 备份 PostgreSQL、Package 对象、策略要求保留的 Office checkpoint 和网关身份;不备份缓存、
Web session、nonce、Office 短期 token 或中继暂存。
- 恢复后撤销列表、组织 ID、签名目录和审计序列保持有效,所有设备重新连接。 - 恢复后撤销列表、组织 ID、签名目录和审计序列保持有效,所有设备重新连接。
## 14. 测试策略 ## 15. 测试策略
### 14.1 自动化 ### 15.1 自动化
- schema、认证 audience、CSRF、OIDC 和设备挑战。 - schema、认证 audience、CSRF、OIDC 和设备挑战。
- 每个 repository/API 的跨组织隔离与枚举防护。 - 每个 repository/API 的跨组织隔离与枚举防护。
@@ -254,8 +343,10 @@ PostgreSQL
- Package 流式校验、不可变性、权限 diff 和撤销。 - Package 流式校验、不可变性、权限 diff 和撤销。
- 联邦双方确认、策略交集、暂停、证书变化和禁止第三 hop。 - 联邦双方确认、策略交集、暂停、证书变化和禁止第三 hop。
- 审计事务、过滤、分页、导出和正文缺失。 - 审计事务、过滤、分页、导出和正文缺失。
- Office token audience、上传格式/摘要、callback 幂等、checkpoint 不可变、保留和清理。
- Ask 拒绝编辑写入,Execute Grant 绑定 session、revision 和选区且不能跨文档复用。
### 14.2 集成与部署 ### 15.2 集成与部署
- Desktop 与真实 ShareServer 完成注册、目录、调用、文件和取消。 - Desktop 与真实 ShareServer 完成注册、目录、调用、文件和取消。
- 两个隔离组织验证搜索、计数、错误、对象和审计不泄漏。 - 两个隔离组织验证搜索、计数、错误、对象和审计不泄漏。
@@ -263,10 +354,13 @@ PostgreSQL
- 中继关闭与开启、容量耗尽、连接中断和大文件背压。 - 中继关闭与开启、容量耗尽、连接中断和大文件背压。
- 数据库备份恢复、版本升级、滚动停止和设备重连。 - 数据库备份恢复、版本升级、滚动停止和设备重连。
- 生产 TLS、OIDC 和对象存储组合的端到端验证。 - 生产 TLS、OIDC 和对象存储组合的端到端验证。
- Windows、macOS、Linux Desktop 与同一 ShareServer 打开、编辑和保存 DOCX、XLSX、PPTX。
- 多文档会话隔离、同一源文件多开只读、源文件冲突、断线恢复、callback 失败和过期清理。
- ONLYOFFICE 真实版本、许可证允许的并发矩阵、浏览器兼容、CPU/内存和大文件边界。
设计完成不代表服务已实现;只有独立部署和真实 Desktop 端到端路径通过后才能更新实施状态。 设计完成不代表服务已实现;只有独立部署和真实 Desktop 端到端路径通过后才能更新实施状态。
## 15. 当前原型实现 ## 16. 当前原型实现
2026-09-05 建立的交互原型固定以下技术基线: 2026-09-05 建立的交互原型固定以下技术基线:
@@ -281,3 +375,5 @@ PostgreSQL
`productionReady=false`。原型 fixture、角色切换和操作确认只用于评审信息架构,不得被 `productionReady=false`。原型 fixture、角色切换和操作确认只用于评审信息架构,不得被
Desktop 或部署脚本当作真实身份、策略、任务或审计 API。下一实施阶段必须从 FR-1 Desktop 或部署脚本当作真实身份、策略、任务或审计 API。下一实施阶段必须从 FR-1
初始化、本地身份、PostgreSQL 组织作用域和事务审计开始,不在 fixture 上叠加生产状态。 初始化、本地身份、PostgreSQL 组织作用域和事务审计开始,不在 fixture 上叠加生产状态。
当前原型没有 Office 导航、配置、会话 API、对象存储、ONLYOFFICE、callback 或 Desktop 文档
Tab 集成;上述章节仅定义目标设计。
+32 -7
View File
@@ -5,8 +5,8 @@
| 项目 | 内容 | | 项目 | 内容 |
| --- | --- | | --- | --- |
| 状态 | 设计中 | | 状态 | 设计中 |
| 版本 | 0.2 | | 版本 | 0.3 |
| 日期 | 2026-09-05 | | 日期 | 2026-09-09 |
| 关联 PRD | [ShareServer PRD](./prd.md) | | 关联 PRD | [ShareServer PRD](./prd.md) |
| 功能逻辑 | [功能逻辑设计](./logic-design.md) | | 功能逻辑 | [功能逻辑设计](./logic-design.md) |
@@ -39,6 +39,7 @@ ShareServer 是独立 Web 产品,不直接复用 Electron 页面壳层实现
发布与更新 发布与更新
网关联邦 网关联邦
任务与中继 任务与中继
Office 编辑
审计 审计
系统设置(仅系统管理员) 系统设置(仅系统管理员)
``` ```
@@ -57,6 +58,7 @@ ShareServer 是独立 Web 产品,不直接复用 Electron 页面壳层实现
- 包更新异常和紧急撤销。 - 包更新异常和紧急撤销。
- 联邦连接异常。 - 联邦连接异常。
- 中继流量和容量,仅在中继启用时显示。 - 中继流量和容量,仅在中继启用时显示。
- Office 编辑健康、活动会话、保存失败和待清理对象,仅在 Office 服务启用时显示。
指标可点击进入已带筛选的对应页面。没有事件时不显示虚构趋势。 指标可点击进入已带筛选的对应页面。没有事件时不显示虚构趋势。
@@ -172,14 +174,36 @@ GPU-Worker-02 AI Team Linux 离线 8 2 小时前
时区和字段范围;大导出作为后台任务生成有时效下载。审计详情保持只读,不把原始内部错误、 时区和字段范围;大导出作为后台任务生成有时效下载。审计详情保持只读,不把原始内部错误、
认证信息或任务正文显示给管理员。 认证信息或任务正文显示给管理员。
## 13. 系统设置 ## 13. Office 编辑
只包含实例名称、公开地址、身份源、邮件、数据库/对象存储状态、中继开关与上限、保留策略、 Office 编辑页面属于系统管理员的服务配置和组织管理员的策略管理,不提供文档正文浏览器。
联邦总开关、证书和版本。秘密字段只支持替换或测试,不回显原值。
系统管理员视图显示:
- 服务状态、ONLYOFFICE 版本、许可证状态和最近一次完整健康检查。
- Document Server、callback worker、对象存储的独立状态和稳定错误阶段。
- 活动/断线/过期会话数、保存成功/失败/结果未知、存储用量和待清理对象。
- 全局允许格式、最大文件、并发、会话期限、checkpoint 保留和紧急停用。
组织管理员视图只显示本组织策略、用量和会话元数据,可以收紧允许格式、文件大小、并发、
只读和 AI 编辑策略,不能修改基础设施地址或密钥。会话表显示用户、设备、文档显示名、类型、
访问模式、状态、大小、创建时间、最后 checkpoint 和到期时间,不显示源文件路径或正文。
“测试 Office 服务”必须执行最小文档创建、编辑器加载、保存 callback 和输出校验。结果按阶段
显示,并说明测试会创建和自动清理临时文档。只检查端口不能显示为完整健康。
紧急停用需要说明:停止创建新会话和新保存,现有 Desktop 源文件不会删除,服务端工作副本按
保留策略处理。删除会话是危险操作,显示用户、设备、文件显示名、稳定 checkpoint 和未确认
回写状态;不能提供管理员直接下载任意成员文档的默认入口。
## 14. 系统设置
只包含实例名称、公开地址、身份源、邮件、数据库/对象存储状态、中继开关与上限、Office 服务
基础设施状态、保留策略、联邦总开关、证书和版本。秘密字段只支持替换或测试,不回显原值。
运行时基础设施配置优先来自部署环境;Web 界面不能修改数据库连接串、主密钥或容器挂载路径。 运行时基础设施配置优先来自部署环境;Web 界面不能修改数据库连接串、主密钥或容器挂载路径。
## 14. 状态、响应式与无障碍 ## 15. 状态、响应式与无障碍
- 加载、无数据、无匹配、无权限、服务错误和部分不可用分别展示。 - 加载、无数据、无匹配、无权限、服务错误和部分不可用分别展示。
- 管理表格支持键盘访问、可见焦点、表头关联和分页;行菜单有可访问名称。 - 管理表格支持键盘访问、可见焦点、表头关联和分页;行菜单有可访问名称。
@@ -187,7 +211,7 @@ GPU-Worker-02 AI Team Linux 离线 8 2 小时前
- 所有时间显示实例时区并可查看 ISO 时间;联邦事件同时显示对端时间时标明时区。 - 所有时间显示实例时区并可查看 ISO 时间;联邦事件同时显示对端时间时标明时区。
- 状态不只依赖颜色。危险操作在确认后保持原页面上下文和可恢复错误。 - 状态不只依赖颜色。危险操作在确认后保持原页面上下文和可恢复错误。
## 15. 交互原型视觉基线 ## 16. 交互原型视觉基线
2026-09-05 的首个可运行原型采用深海科技控制台方向,并同时提供浅色主题。视觉实现遵循 2026-09-05 的首个可运行原型采用深海科技控制台方向,并同时提供浅色主题。视觉实现遵循
shadcn/ui 的本地组件模式和 Radix 可访问 primitives,布局参考成熟后台的侧栏、顶栏、数据 shadcn/ui 的本地组件模式和 Radix 可访问 primitives,布局参考成熟后台的侧栏、顶栏、数据
@@ -198,3 +222,4 @@ shadcn/ui 的本地组件模式和 Radix 可访问 primitives,布局参考成
与品牌氛围;业务表格仍保持克制,状态继续同时使用图标与文字。原型操作会调用无持久化确认 与品牌氛围;业务表格仍保持克制,状态继续同时使用图标与文字。原型操作会调用无持久化确认
API,并持续标明不会写入生产数据,不能据此宣称真实审批、撤销、策略或任务操作已实现。 API,并持续标明不会写入生产数据,不能据此宣称真实审批、撤销、策略或任务操作已实现。
`FR-13` 新增的数字人目录、“我的数字人”和 `@` 选择器尚未进入当前原型。 `FR-13` 新增的数字人目录、“我的数字人”和 `@` 选择器尚未进入当前原型。
`FR-14` 新增的 Office 编辑导航、配置、健康和会话管理也尚未进入当前原型。