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