2026-09-23·by Sijie Wang#node#lucerna#software#architecture

key-designs

核心设计

父级:architecture

Lucerna 的承重子系统,每一个都经过对代码的核实(深入阅读,而非泛览)。按其服务对象分组。

阅读本体

  • raw-display-cursor——双坐标骨架:每个位置都以相对全书的 raw 偏移量存储,display 偏移量由其重建而来 → 与排版无关的书签/笔记/词汇/卡拉OK。
  • dynamic-pagination——基于 DOM 测量的分页,随字体/视口变化重新排版;仅重新分页的快速路径;LayoutKey + PAGINATION_VERSION
  • all-forms-underline——标记一个变形,点亮该词元的所有形式;省音分词器必须在下划线/词性标注/LLM 三者之间保持一致。
  • vocabulary-loop——点按 → 三级查词 → 动词信息增强 → 保存 → 全部形式 → 服务端持有的 SM-2
  • full-text-search——每本书一个句子粒度的 FlexSearch 索引,持久化到磁盘(恢复还是重建 + 版本管理)。
  • tts-audiobook——桌面端本地 Piper/sherpa-onnx 有声书 + 由 PCM 能量计时的逐词卡拉OK,以 raw 偏移量为锚点。

语言学核心

  • linguistic-two-engines——两套并行引擎:TS/LLM 优先(适用任意语言)对比 Python/spaCy 依存句法分析(确定性,德语+英语)。
  • upload-ingestion——客户端解析 EPUB/PDF/文本(扫描件走服务端 OCR)→ contentHash,一切数据锚定其上的连接键

架构支柱

  • cross-platform-seams——一个与框架无关的核心,通过三个 registry 接缝 + 一个惰性绑定代理同时驱动 web 与桌面端;HTTP-delegate 与 Hybrid-wrapper 两类仓库。
  • offline-first-outbox——桌面端离线优先:事务性 Outbox(同事务原子性)、以云端为权威的清空重填、IPC tx-id 桥接、临时 id 对账。
  • backends-three-services——auth / mainbackend / nlp-api 三方拆分(为什么是三个、各自归属什么;SRS 与 i18n 都在这里)。
about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →