Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -64,17 +64,14 @@ RESET_WORKSPACE_TABLES_ON_BOOT=false
# true 时跳过 SMTP 与邮箱验证门槛,便于测试邀请流程;生产必须为 false。
SHARING_DEV_BYPASS=false

# 是否开启实时协作。
# 这是主开关。
# - packages/server 会通过 /api/v1/config 把 collaborationEnabled 下发给前端
# - packages/realtime 会据此决定是否接受 websocket / presence / persist-now 请求
# 如果要完全关闭协作,请在 packages/server/.env 和 packages/realtime/.env 中都设置为 false。
# 如果本实例不使用协作,建议直接不启动 packages/realtime 服务。
# 遗留共享功能开关。
# packages/server 会通过 /api/v1/config 把 collaborationEnabled 下发给共享页面。
# realtime 服务已经退役;编辑器固定使用单人 HTTP 保存,不读取这个开关。
COLLABORATION_ENABLED=true

# 前端本地附加开关,默认 true。
# 仅当你希望某个 packages/web 部署固定保持单人模式时再设置为 false
# 前端最终是否启用协作能力 = PUBLIC_COLLABORATION_ENABLED && 后端 /api/v1/config 的 collaborationEnabled
# 设置为 false 时隐藏 packages/web 中的遗留共享入口
# 遗留共享入口最终生效值 = PUBLIC_COLLABORATION_ENABLED && 后端 /api/v1/config 的 collaborationEnabled
# 该值属于 packages/web/.env,但统一在这里记录,避免分散查找。
# 如果已关闭 COLLABORATION_ENABLED,建议这里也同步设为 false。
PUBLIC_COLLABORATION_ENABLED=true
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# Project-local dependency caches
.corepack/
.pnpm-store/
.go/

# Go
# Binaries for programs and plugins
*.exe
Expand Down
47 changes: 18 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@

- 轻量云端写作:在线编辑、云端同步、公开分享和多端访问。
- 媒体库与图床工作流:集中管理图片与附件,支持从媒体反向定位引用文档。
- 实时协作可选:按部署需要启用或关闭协作、共享、presence 与持久化链路
- 实时协作可选:按部署需要启用或关闭协作、共享与持久化链路
- AI 融合支持:通过 Skill、MCP 与 REST Open API 接入 AI 客户端,让授权 AI 可以搜索、读取、整理和写入工作区文档,协助管理文章资产。

## 如何部署

当前推荐的部署方式是前后端分离:

- `packages/web` 单独部署到 Cloudflare Pages 或 EdgeOne Pages,保留 SvelteKit SSR。
- `packages/server` 与 `packages/realtime` 独立部署,适合后续统一放进 Docker Compose。
- `packages/server` 独立部署,适合后续放进 Docker Compose。

### Web 部署

Expand Down Expand Up @@ -75,29 +75,18 @@ Cloudflare Pages 构建如果涉及 Node 内建模块兼容,仓库内已经提

`MARKDOWN_CONVERTER_TOKEN` 需要同时配置到 `packages/server` 与 `packages/web` 的运行环境,用于保护 `/markdown/convert` 内部路由。它不是用户中心创建的 API Token,也不应提供给 AI 客户端。

### Server 与 Realtime
### Server 与文档保存

- `packages/server` 是 Go API 服务。
- `packages/realtime` 是独立的实时协作服务。
- 当前建议两者保持独立部署,避免把 WebSocket 与前端平台运行时耦合在一起。
- 后续可以统一收敛到 Docker Compose 做一键启动。
- 如果你不使用实时协作,建议直接不启动 `packages/realtime`。

实时协作总开关:

- 使用 `COLLABORATION_ENABLED=true|false`
- 这是服务端配置,不是前端配置
- `packages/server` 会把该值作为 `collaborationEnabled` 通过 `/api/v1/config` 下发给前端
- `packages/realtime` 会用同名变量决定是否接受 websocket、presence 和强制持久化请求
- 如果要完全关闭协作,必须同时在 `packages/server/.env` 和 `packages/realtime/.env` 中设置为 `false`
- 关闭后,前端编辑页会退回单人保存链路;非 owner 访问会按“文档不存在或无权访问”处理
- 如果还希望某个前端部署本地就完全不加载协作能力,可额外设置 `packages/web/.env` 中的 `PUBLIC_COLLABORATION_ENABLED=false`
- 前端最终生效值为:`PUBLIC_COLLABORATION_ENABLED && 后端下发的 collaborationEnabled`
- 以上两个变量统一记录在根目录 [`.env.example`](.env.example)
- 对于单人部署,推荐做法是:
- 不启动 `packages/realtime`
- `packages/server/.env` 设 `COLLABORATION_ENABLED=false`
- `packages/web/.env` 设 `PUBLIC_COLLABORATION_ENABLED=false`
- 独立 realtime 服务及其 Yjs 状态接口已经退役。
- 编辑器固定使用 `PUT /api/v1/edit/documents/:id/content` 保存规范化的 `ContentJSON`。
- 正文、编辑属性和上传统一受设备级编辑租约保护;同一设备的标签页复用令牌。
- MCP/Open API 写入使用一次性操作租约,文档正被浏览器编辑时会返回锁定错误。
Comment on lines +82 to +84
- 非 owner 访问编辑页会转到只读页面,前端不初始化 Yjs、WebSocket 或在线状态。

遗留共享功能仍由 `COLLABORATION_ENABLED` 和前端的
`PUBLIC_COLLABORATION_ENABLED` 共同控制。它们只影响共享页面、邀请和成员入口,
不影响编辑器的单人 HTTP 保存链路;后续删除共享模块时会一并移除。

### Skill / MCP / Open API

Expand Down Expand Up @@ -259,7 +248,7 @@ curl -sS http://127.0.0.1:5173/markdown/convert \

1. **环境准备**:
- 确保您已安装 Go (1.22+)。
- 确保您已安装 Node.js (20+)`pnpm`,建议使用 `22+`
- 确保您已安装 Node.js 22.13+ 和 pnpm 11.25.0,建议使用 Node.js 22.17.1

2. **启动后端服务**:
```bash
Expand Down Expand Up @@ -308,12 +297,12 @@ curl -sS http://127.0.0.1:5173/markdown/convert \
- 用户如果单独配置了 `document_quota`,会优先使用用户自己的值。
- 后端会在创建文档时校验这个上限。

- 实时协作开关
- `COLLABORATION_ENABLED`:是否启用实时协作,默认 `true`
- 需要在 `packages/server/.env` 与 `packages/realtime/.env` 保持一致
- 前端不会直接读取本地 env,而是读取后端 `/api/v1/config` 下发的 `collaborationEnabled`
- 遗留共享开关
- `COLLABORATION_ENABLED`:是否启用遗留共享接口,默认 `true`
- 前端编辑器不读取此值,始终采用单人 HTTP 保存
- 共享页面读取后端 `/api/v1/config` 下发的 `collaborationEnabled`
- 可选前端附加开关:`PUBLIC_COLLABORATION_ENABLED`,默认 `true`
- 适用于你想让某个前端部署固定保持单人模式,不去初始化协作 UI / provider
- 目前仅用于控制遗留共享入口;后续删除共享模块时会一并移除
- 这两个变量都已统一写在根目录 [`.env.example`](.env.example)

- Skill / MCP Markdown 转换
Expand Down
3 changes: 2 additions & 1 deletion docs/DEV_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

## 1. 环境要求
- Go (版本 >= 1.22)
- pnpm (用于前端)
- Node.js (版本 >= 22.13,建议 22.17.1)
- pnpm 11.25.0 (用于前端)
- `sqlite3` 命令行工具 (用于手动操作数据库)

## 2. 后端设置与启动
Expand Down
9 changes: 6 additions & 3 deletions docs/web_deployment.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# Web 部署说明

当前前端只部署 `packages/web`,后端与 realtime 独立部署
当前前端只部署 `packages/web`,Go 后端独立部署;项目不再包含 realtime 服务

## 通用设置

- 仓库根目录:`/`
- 前端项目目录:`packages/web`
- Node 版本:`22`(建议固定为 `22.17.1`)
- Node 版本:`22`(建议固定为 `22.17.1`,最低 `22.13`)
- pnpm 版本:`11.25.0`
- Pages / EdgeOne 部署时都建议先保存配置,再重新触发一次完整部署

## 环境变量约定
Expand All @@ -29,7 +30,7 @@
- 仓库内已提供 `packages/web/wrangler.toml`,默认包含:
- `name = "cyimewrite-web"`
- `pages_build_output_dir = ".svelte-kit/cloudflare"`
- `compatibility_date = "2026-04-04"`
- `compatibility_date = "2026-09-04"`
- `compatibility_flags = ["nodejs_compat"]`

### Cloudflare 操作步骤
Expand All @@ -39,6 +40,8 @@
3. `Build output directory` 填 `.svelte-kit/cloudflare`
4. 在项目环境变量里填写:

- `NODE_VERSION=22.17.1`
- `PNPM_VERSION=11.25.0`
- `PUBLIC_API_BASE_URL=https://你的后端域名`
- `PUBLIC_AVATAR_MAX_BYTES=2097152`
- `PUBLIC_AVATAR_OUTPUT_SIZE=512`
Expand Down
17 changes: 0 additions & 17 deletions packages/realtime/.env.example

This file was deleted.

30 changes: 0 additions & 30 deletions packages/realtime/package.json

This file was deleted.

Loading