首页
/ 思源筆記 v2.11.1 發行解析:雲端收集箱、搜尋與插件事件體系的全面升級

思源筆記 v2.11.1 發行解析:雲端收集箱、搜尋與插件事件體系的全面升級

2026-09-08 12:22:14作者:幸俭卉

前言:本版做了什麼

思源筆記(SiYuan)v2.11.1 是一次以「雲端收集箱與微信小助手」為核心的迭代版本,官方在概述中明確點出「此版本改進了雲端收集箱和微信小助手,歡迎體驗」。除此之外,該版本還覆蓋了搜尋介面與關鍵字歷史管理、只讀模式與移動端編輯體驗、匯出品質、一批數據倉儲缺陷修復,以及面向開發者的資料庫多視圖、插件事件匯流排擴充、日記屬性與日期範本函數等能力。

本篇文章以 v2.11.1 的官方繁體中文變更記錄(app/changelogs/v2.8.4-v2.12.8/v2.11.1/v2.11.1_zh_CHT.md)為主體骨架,逐一拆解每一類改進的功能含義與使用者價值,並結合當前倉庫內對應的 Go 內核與前端 TypeScript 原始碼,給出可核對的實現依據。讀完你將掌握:

  • 雲端收集箱「移動到文檔」時自動化處理(資源下載、語音/視訊塊轉換)的完整行為;
  • v2.11.1 新增的插件事件(mobile-keyboard-show/hidesync-start/end/fail)的觸發時機與訂閱方式;
  • 日記文檔 custom-dailynote-yyyyMMdd 屬性的底層寫入邏輯與應用場景。

說明:原文中的商業廣告段落(功能特性早鳥價等)屬於時效性資訊,截至 2024 年初已結束,本文不再展開;年付訂閱含功能特性這一帳戶規則仍適用於理解其商業模式,但不影響功能本身的使用。

一、雲端收集箱與微信小助手:語音資源的自動化處理鏈路

本版最大的功能主線是雲端收集箱與微信小助手。微信小助手通常用於將微信中的內容(文字、語音、圖片等)轉存到思源雲端收集箱,因此「語音」是這條鏈路上的高頻素材。

1.1 微信小助手:AMR 語音自動轉 MP3

微信語音消息的原始格式為 AMR(Adaptive Multi-Rate),瀏覽器與思源編輯器對其原生播放支援有限。v2.11.1 中思源微信小助手會把收到的 amr 檔自動轉換為 mp3 文件(Issue #9753),從而在源頭上解決「收集了語音卻無法在編輯器內直接播放」的問題。

該能力與下面的「移動收集箱時自動轉換 mp3/mp4」相互配合,構成語音素材從「微信收集 → 雲端暫存 → 移入文檔」全程自動化的閉環。

1.2 雲端收集箱移動到文檔:三步自動化

在 v2.11.1 之前,將雲端收集箱中的內容移動到知識庫文檔時,對網路資源、多媒體連結的處理並不完善。本版一口氣補齊了三項自動化能力:

  1. 自動下載網路資源文件(Issue #9775):移動到文檔時,若內容中包含遠端網路資源連結,會自動將其下載到本地資產目錄,而不是留下一個依賴外網可用性的死連結;
  2. mp3/mp4 超連結自動轉換為語音塊與視訊塊(Issue #9778):當收集箱條目內包含 mp3、mp4 這類媒體連結時,移動過程中會直接把「超連結」就地升級為思源的語音塊(audio block)與視訊塊(video block),使其具備內嵌播放能力;
  3. 收集箱內支援預覽語音與視訊(Issue #9780):在尚未移入文檔前,收集箱列表中即可直接預覽語音與視訊內容,方便先聽/先看再決定是否收錄。

1.3 界面改進與資料完整性修復

  • 改進雲端收集箱界面(Issue #9776):對條目列表、操作入口做了整體佈局與互動優化;
  • 修復「移動端文檔時遺漏數據」(Issue #9771):修補了從收集箱移入文檔時特定條件下部分數據丟失的缺陷,與 1.2 的自動化轉換一同保障資料不丟、格式正確。

1.4 原始碼佐證:收集箱的內核 API 結構

雲端收集箱在思源內部稱為 shorthand(摘錄/速記),相關後端 HTTP API 集中於 kernel/api/inbox.go

這些 API 的模型層實現在 kernel/model/cloud_service.go,包括 RemoveCloudShorthands(L415)、GetCloudShorthand(L446)與 GetCloudShorthands(L487)。由於雲端收集箱本質上依賴思源雲端帳號體系,其數據保存在雲端而非本地工作空間,因此「移動到文檔」一詞指的是:把雲端暫存的條目內容經上述自動化處理後,落地為知識庫中真實的 .sy 文檔節點。

二、搜尋體驗:介面重構與關鍵字歷史管理

搜尋是思源的高頻功能,v2.11.1 對搜尋入口與結果展示做了多處打磨:

  • 改進搜尋介面(Issue #9788):整體 UI 調整;
  • 搜尋關鍵字歷史支援刪除(Issue #9794):搜尋下拉中的歷史記錄此前無法單獨清除,本版支援逐條刪除,避免誤操作留下的歷史污染建議;
  • 搜尋輸入框新增清空按鈕(Issue #9801):輸入內容後一鍵清空,減少手動刪除成本;
  • 修復搜尋結果預覽包含轉義符問題(Issue #9790):此前命中內容的摘要預覽可能把 Markdown 轉義字元(如 \\\*)原樣帶出,影響可讀性,本版修正了預覽文字的轉義處理。

值得注意的是 Issue #9790 與缺陷修復中的「貼上轉義文字 處理不正確」(Issue #9787)同屬「轉義符號在複製/預覽鏈路中被錯誤保留」的問題族,說明該版本在「文字進出編輯器的轉義一致性」上做了系統性收斂。

三、編輯與移動端體驗改進

3.1 全局只讀模式

  • 切換全局只讀模式時編輯器閃爍(Issue #9767):此前在「讀寫 ↔ 只讀」切換瞬間,編輯器會出現明顯閃爍,本版優化了狀態切換時的渲染穩定性;
  • 只讀模式文檔切換頁籤時不保留劃選內容(Issue #9785):在只讀模式下劃選文字後切換文件頁籤再回來,範圍選中狀態不應殘留,本版修正該行為。

3.2 Android 軟鍵盤相容性

  • 改進 Android 端軟鍵盤隱藏相容性(Issue #9765):不同 Android 廠商 ROM 對軟鍵盤 resize/pan 策略實現差異大,此前部分裝置在輸入法收起後編輯器底部留白或佈局錯位,本版針對該相容性做了改進;
  • 為行動端新增軟換行按鈕(Issue #9797):移動端鍵盤工具列提供軟換行(Shift+Enter 對應的軟換行行為)按鈕,便於在列表項等場景中插入不產生新塊的換行。

與軟鍵盤相關的前端工具列實現在 app/src/mobile/util/keyboardToolbar.ts,該檔案同時是下文 4.2 中 mobile-keyboard-show/hide 事件的觸發源。

3.3 行級程式碼編輯與貼上

  • 改進 行級程式碼 Markdown 編輯(Issue #9805):行級程式碼(inline code)的 Markdown 原始碼編輯體驗優化;
  • 貼上轉義文字 處理不正確(Issue #9787):修正貼上帶轉義文字時內容被二次轉義或轉義失效的問題。

四、匯出品質:圖片、超連結與檔案系統安全

  • 改進匯出包含換行下劃線的圖片(Issue #9789):當圖片 src 中因換行而帶有底線(_)被誤判為 Markdown 強調語法時,匯出圖片會異常,本版修正了該場景的 Markdown 圖片語法生成;
  • 改進匯出 Markdown 超連結空格(Issue #9792):匯出 Markdown 時超連結文字與 URL 中的空格處理更規範;
  • 修復匯出含 ../ 超連結 Markdown 時檔案系統異常(Issue #9779):文檔內如存在指向其他目錄的 ../ 相對超連結,匯出為 Markdown 時可能觸發檔案系統層級異常,本版增加防護。

這幾項都屬於「匯出結果與原始內容等價、且不在目標檔案系統上造成副作用」的收斂,體現了匯出引擎對 Markdown 語法邊界(空格、底線、斜線)的嚴格處理。

五、缺陷修復與開發重構

  • 清理資料倉儲報錯 清理資料倉儲失敗:CreateFile ...(Issue #9760):在「設定 → 資源 → 清理資料倉儲」時,Windows 下可能因檔案句柄/佔用拋出 CreateFile 錯誤,本版修復,確保快照與資源清理流程穩定;
  • Ctrl+Tab 在 Windows 端失效(Issue #9770):在 Windows 桌面端,Ctrl+Tab 用於頁籤切換,本版修復其在特定條件下失效的問題(該修復與文檔區 Ctrl+Tab 的文件頁籤循環邏輯相關);
  • 開發重構:升級 Electron v27.1.3(Issue #9802):桌面端殼層由舊版 Electron 升級至 v27.1.3,獲得對應的 Chromium/V8 安全修復與效能改進。從當前倉庫的 app/package.json 可以看到,Electron 依賴此後仍持續演進,v2.11.1 的 v27.1.3 是當時發行時的版本狀態。

六、開發者能力:資料庫多視圖與插件體系擴充

v2.11.1 對插件開發者的 API 面有較大擴充,是插件作者值得關注的一個版本。

6.1 資料庫(屬性視圖)多視圖

  • 資料庫支援多視圖(Issue #9751):同一份資料表不再被鎖死在單一展示形式下,可在不同視圖間切換/並存;
  • 改進資料庫表格視圖 Tab 鍵互動(Issue #9761):表格視圖內 Tab 鍵在儲存格之間的焦點移動邏輯更符合編輯預期;
  • 當編輯器左側邊距最小時改進資料庫表格視圖行圖示(Issue #9772,PR #9772):在編輯器左邊距收窄到最小時,表格視圖左側行操作圖示的顯示與點擊區域得到修正。

在當前倉庫中,屬性視圖(Attribute View / AV)的各視圖渲染實現分散於 kernel/av/layout_table.gokernel/av/layout_kanban.gokernel/av/layout_gallery.go 等檔案,並由 kernel/av/layout.go 統一編排——從檔案結構可以推斷,v2.11.1 的「多視圖」正是這一層佈局能力的起點,後續版本持續在此基礎上擴展。

6.2 為插件 API 添加 Protyle 方法

  • 為插件 API 添加一些 Protyle 方法(Issue #9762):Protyle 是思源內核編輯器渲染實例的抽象,插件透過其 API 操作當前打開文檔的塊。本版為插件可見的 Protyle 物件補充了若干方法,擴充插件對編輯器的控制能力。

6.3 插件事件:鍵盤與同步狀態可監聽

v2.11.1 新增了兩組插件事件匯流排(Event Bus)事件:

移動端鍵盤事件

  • mobile-keyboard-showmobile-keyboard-hide(Issue #9773):分別在移動端軟鍵盤彈出與收起時觸發,供插件感知輸入法狀態、動態調整自訂 UI 位置。

同步事件

  • sync-startsync-endsync-fail(Issue #9798):分別在資料同步開始、成功結束與失敗時觸發,讓插件可以即時反映「正在同步 / 同步完成 / 同步失敗」三態。

從當前倉庫可以核對其實現:

插件訂閱範例(訂閱名與 TEventBus 型別一致):

this.eventBus.on("sync-start", () => {
  console.log("同步開始");
});
this.eventBus.on("sync-fail", (data) => {
  console.error("同步失敗", data);
});
this.eventBus.on("mobile-keyboard-hide", () => {
  // 收起輸入法時復位自訂浮層
});

6.4 插件 require 支援載入 Node 模組

  • 插件 require 函式支援載入 Node 模組(Issue #9803,PR #9803):此前插件沙箱中 require 的能力受限,本版讓其可載入標準 Node 模組,意味著插件作者可以把檔案操作、網路請求等依賴 Node API 的第三方庫直接帶入插件運行環境,顯著拓寬了插件可實現的功能範圍。

6.5 日記:custom-dailynote-yyyyMMdd 屬性

  • 建立日記文檔時新增 custom-dailynote-yyyyMMdd 屬性(Issue #9807):思源在建立日記時,會自動為文檔根節點寫入 custom-dailynote- 前綴、後接當日日期(yyyyMMdd 格式,如 custom-dailynote-20240101)的自訂屬性,用於將日記文檔與普通文檔在資料層面區分開來。

原始碼依據非常明確:常數定義於 kernel/model/file.go#L1164-L1168

const (
	DailyNoteAttrPrefix = "custom-dailynote-"
	NodeAttrTitleEmpty  = "custom-sy-title-empty"
	DocHiddenAttr       = "custom-hidden"
)

CreateDailyNotekernel/model/file.go#L1170)在建立日記時會以當日 20060102 格式作為屬性值寫入 IAL(Inline Attribute List):

該屬性的存在意義在於:外掛、主題、模板與查詢語句可以透過 custom-dailynote-* 精確識別「某年某月某日的日記」,例如在資料庫查詢中過濾出所有日記、或統計每日記錄量。需要留意的是,屬性鍵中的日期與日記所屬日期對應,與「文檔最後更新日」並不相同,這正是它適合做日記判定的原因。

6.6 日期相關模板函數

  • 新增一些日期相關的模板函數(Issue #9812,PR #9812):模板函數在思源中廣泛用於日記儲存路徑、模板渲染與匯出。本版補充的日期類函數可直接在 {{ }} 範本表達式中使用。

當前倉庫的內建模板函數註冊於 kernel/filesys/template.go#L35-L64BuiltInTemplateFuncs:函數表以 sprig.TxtFuncMap() 為基底(因此內含 datenowdateModify 等常用日期函數),並額外註冊了 WeekdayWeekdayCNWeekdayCN2ISOWeekISOYearISOMonthISOWeekDateparseTime 等與日期/週/ISO 8601 週曆相關的自訂函數。模板渲染入口 RenderGoTemplate 位於 kernel/model/template.go#L51-L69,它將 BuiltInTemplateFuncs 註冊進 text/template 後執行,而日記的儲存路徑正是透過 RenderGoTemplate(boxConf.DailyNoteSavePath) 渲染的(kernel/model/file.go#L1186),例如:

{{now | date "2006/01/02"}} 日記

七、小結與升級建議

v2.11.1 是一次「內容入口品質」與「開發者能力」並重的版本:

  • 對一般使用者,雲端收集箱的資源下載、語音/視訊塊自動轉換與預覽能力,配合微信小助手的 amr → mp3 轉換,讓「微信語音 → 可播放的思源語音塊」首次做到全自動;搜尋歷史管理、清空按鈕、只讀模式與移動端軟鍵盤/軟換行的改進則直接作用於日常編輯頻率最高的場景;
  • 對插件與主題開發者,mobile-keyboard-show/hidesync-start/end/fail 五個新事件、Protyle 新方法與 Node 模組 require 支援,值得在第一時間接入以擴充插件能力;
  • 對資料管理層,custom-dailynote-yyyyMMdd 屬性為「以屬性驅動日記管理」提供了穩固的資料依據,可作為後續查詢、統計與自動化腳本的判據。

如需查閱三語種的完整變更清單,可對照瀏覽 v2.11.1_zh_CN.mdv2.11.1.md。如果你正計劃將思源接入自己的自動化工作流,本文所涉及的雲端收集箱 API(kernel/api/inbox.go)、插件事件(app/src/types/index.d.ts)與日記屬性(kernel/model/file.go)即可作為首選的切入點。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
34
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.21 K
2.81 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
945
1.86 K
docsdocs
暂无描述
Markdown
906
5.84 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
537
607
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
864
1.36 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
4.28 K
1.03 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.39 K
1.48 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
550
401
flutter_flutterflutter_flutter
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.19 K
347