Vyline DOCS

开发者指南

本地开发、定位正确的修改边界、验证以及文档更新。

Setup

git clone --recurse-submodules https://github.com/tqmane/vyline.git
cd vyline
bun install --frozen-lockfile
bun run typecheck
bun run lint
bun test
bun run build

使用 Bun 1.4 或更高版本。workspace 包括 Vyline/packages/*、Desktop app、Backend 等;Protocol、Plugin、Themes 是 Git submodule。

开发服务器

bun run dev
# 仅 backend:  bun run dev:backend
# 仅 frontend: bun run dev:frontend

dev:backend 通过 Bun watch 重启 Vyline/backend/src/index.tsdev:frontend 启动 Vite dev server。production build 会把 Frontend 构建成 static asset,并由同一个 Bun/Hono Backend process 提供。

修改位置

要修改的内容先看这里
Web UIVyline/apps/desktop
HTTP API / DB / restoreVyline/backend
LINE RPC / E2EE / loginVyline/packages/protocol
Plugin contractVyline/packages/plugin + Backend plugin runtime
Theme presetVyline/packages/themes
Desktop LINE reverse researchtools

追踪处理时的顺序

处理FrontendBackendProtocol
首次显示useLineData.tsapi.line.bootstrapGET /line/:accountId/bootstrap → SQLite通常不发 RPC
新消息/事件useVylineSync.ts / pollIncomingevent buffer / processFetchedOperationsbase.talk.sync
active chat 增量pollMessagesDelta/messages/:chatMid/delta需要时 remote fetch
发送api/client.tsapi/line.tslineService.sendMessageTalk / E2EE
登录auth UI/clientclientManagerQR / Email / Token + E2EE ensure
媒体upload/download APIlineService / media storageTalk metadata + object storage/E2EE

排查问题时不要从 UI 直接跳到 Protocol。按 Frontend request → BFF route → service → session manager → Protocol 的顺序确认每个边界。

修改 Backend API

  1. 确认 Vyline/apps/desktop/src/api/client.ts 中的 client contract。
  2. Vyline/backend/src/api/line.ts 负责输入验证、status code 与 HTTP serialization。
  3. 涉及 LINE/DB 的处理放到 service/lineService.ts 或对应 service。
  4. 需要 account/session 时,复用 line/clientManager.ts 已有的 queue/urgent/send 路径。
  5. 修改持久状态时,同时检查 storage、restore 与 backup 的一致性。
  6. 添加 route/service test,并让 Frontend 类型与实际 response 对齐。

当前边界要求不要把大量业务逻辑塞进 api/line.ts。与 HTTP 无关的处理保留在 service 中,便于其他 endpoint 或未来 consumer 复用。

修改 Protocol

添加或修改 RPC 时,先在 Vyline/packages/protocol/src/dictionary/rpcMap.ts 确认现有对应关系,再按 Desktop evidence → Protocol stack → domain facade → Backend service/BFF 的顺序追踪。

rpcMap.ts
  canonicalName / desktopEvidence / path
        ↓
stack API / Thrift types
        ↓
domain API
        ↓
backend lineService
        ↓
api/line.ts
        ↓
frontend api/client.ts

如果故障来自 Desktop 更新,用 bun run vyline:deltabun run vyline:find-native -- <name> 确认当前实现。modules.map.ts 中的 feature 可缩小关联 binary、search string 与 analysis docs。

修改 Storage

chat runtime persistence 使用 SQLite,chatStoreSqlite.ts 管理 WAL mode、schema version、chats/messages/message_sync/local_read 等。Vyline 不是在启动时把全部聊天历史 hydrate 到内存。

  1. 检查现有 schema 以及 PRAGMA user_version 的处理方式。
  2. 设计不会破坏已有 DB 的向前 migration。
  3. restore/import 在 staging DB 或 copy 上验证,失败时不要部分修改原 DB。
  4. Docker 中明确数据应放在 /app/data 还是 /app/storage
  5. 同时确认 backup quota、media sidecar 与 cache 删除语义。

不要混淆 cache 与持久数据。可重新生成的 CDN/icon cache,与 session/chat DB/saved media/backup 在删除后的影响完全不同。

修改 Plugin / Theme

Plugin contract 位于 submodule 的 @vyline/plugin-sdk,执行与按账号保存的 enable 状态由 Backend pluginRuntime.ts/pluginManager.ts 负责。plugin 的 activate/deactivate 与 event handler 会被隔离,避免扩展异常拖垮主程序。

在 manifest 中增加 permission 字符串不会自动增加 capability。要一起检查 SDK 类型、Backend context 实际暴露的方法,以及 manager 的 permission handling。Theme 以 Vyline/packages/themesVyTheme 与 preset token 为准。

验证层级

bun run typecheck
bun run lint
bun test
bun run build

这四项全部通过,也不代表真实 LINE session 或 Docker deployment 已被验证。根据改动内容继续验证 local Backend API、browser UI、Docker image,必要时再验证真实 session。

更新 Docs 网站

web/ 是手工维护的 static HTML/CSS/JavaScript。直接编辑目标 web/docs/<page>/index.html。共用样式在 web/assets/vyline.css,Docs 搜索、主题、目录、代码复制逻辑在 web/assets/docs.js

不要用脚本自动生成 Web Docs。只更新真正受实现变更影响的页面,并先重新查看当前实现与相关文档;之后通过本地 HTTP server 检查显示与链接。

README

README.src.md 是 README 的编辑源。README 的日语/英语输出属于另一套流程,修改后运行 bun run docs:readme。Web Docs 本身仍由手工编辑 HTML,不由该命令生成。

按页面、设置或命令搜索