拓冰建站拓冰建站
首页 / 资讯中心 / 正文

SiYuan v3.6.4 版本升级解析:粘贴与排版细节改进、缺陷修复及任务列表新内核 API

SiYuan v3.6.4 版本升级解析粘贴与排版细节改进、缺陷修复及任务列表新内核 API【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan本文基于 SiYuan 官方变更记录 v3.6.4 中文文档完整梳理该版本的 15 项功能改进、5 项缺陷修复与 5 项开发者向变更并结合内核源码Go与前端源码TypeScript逐一印证新增 API/api/file/workspaceCopyFiles、/api/block/updateTaskListItemMarker、/api/block/batchUpdateTaskListItemMarker、插件 APIgetAllTabs的type参数以及任务列表data-task状态属性的真实实现帮助插件开发者与运维用户理解 v3.6.4 的能力边界与升级要点。版本概述根据 v3.6.4 变更记录此版本定位是「改进了一些细节」变更集中在三类编辑器细节粘贴行为、块标block marker渲染与位置、行级代码粘贴、优化排版对全角字符的处理界面与布局按钮阴影、分屏布局、停靠栏面板标题、闪卡管理窗口分页按钮位置、云端配置界面加载图标、集市列表卡片数据与集成块引用导出、反向链接面板粘贴行为、已下载集市包的 README 离线化、macOS 默认工作空间数据丢失修复、若干安全漏洞修复以及面向插件开发者的新内核 API 与属性约束。改进功能详解编辑器粘贴与渲染文档块菜单新增「复制全文」选项在文档块菜单中可以直接复制整篇文档内容无需手动全选。改进粘贴链接优化粘贴链接的解析与转换行为使粘贴过来的链接内容更符合预期。改进包含反引号和与号的行级代码粘贴针对行内代码inline code中含有反引号或与号时粘贴错乱的场景做了修正。改进当列表项包含块引用或提示块时的块标渲染复杂嵌套块列表项内含 callout/提示块出现时块标的显示不再异常。优化排版忽略全角字符排版优化逻辑不再把全角字符纳入处理范围避免中文排版场景下被误改。改进块标的显示位置块标hover 时显示的块操作标记的定位更合理。界面与布局反向链接面板中的列表在粘贴后不再自动折叠粘贴操作不会再触发反向链接面板里列表的意外折叠。改进按钮阴影效果按钮的阴影样式统一优化。改进分屏布局分屏split view的布局行为改进。支持显示完整的停靠栏面板标题和操作按钮停靠栏面板变窄或标题过长时也能完整展示面板标题与操作按钮。加载图标不再覆盖整个云端配置界面云端配置界面加载态的 loading 图标尺寸收敛不再铺满整个界面。将闪卡管理窗口中的分页和导航按钮移动到左上角闪卡flashcard管理窗口的分页与导航按钮调整到左上角操作位置更顺手。集市与导出改进集市列表卡片集市插件/主题市场的列表卡片样式改进。改进块引用导出块引用block reference导出结果的准确性改进。已下载的集市包不再回退获取在线 README集市包本地下载后README 直接读取本地内容不再回退到在线获取——这也意味着离线环境下集市包的说明文档可正常展示减少了对网络的依赖。修复的缺陷macOS 上默认工作空间数据会丢失修复 macOS 平台默认工作空间数据丢失问题属数据安全性修复macOS 用户应优先升级到包含此修复的版本。将块拖动到反向链接面板时会导致报错拖拽块到反向链接面板的报错已修复。修复一些安全漏洞批量安全修复建议所有部署尤其是开启局域网访问的自托管实例跟进升级。Android 上导入 Markdown.zip 出错移动端导入 Markdown.zip 归档的错误已修复。在提示块内部拖动块后整个块会消失提示块callout内部拖动块导致块整体消失的严重编辑缺陷已修复。开发者变更源码级解读本版本对插件开发者与 API 集成者价值最大的部分是 5 项开发者变更。下面结合内核源码逐项说明。任务列表支持data-task状态属性任务列表项task list item现在有了规范的「任务状态」表达方式通过块 IAL 属性中的data-task读取任务状态但修改任务状态被限制为只能通过专用的 marker API 完成。从源码结构看这一约束实现在 setNodeAttrs0 中当通过通用的块属性设置接口尝试设置或移除data-task属性时内核会直接拒绝并返回明确指引setting or removing [data-task] attribute is not allowed via this interface. Please use /api/block/updateTaskListItemMarker or /api/block/batchUpdateTaskListItemMarker to update the task list item marker这一设计把「任务勾选」这类会引发事务transaction与多端广播的写操作收敛到单一受控入口避免插件绕过事务机制直接改属性造成状态不一致。新增内核 API/api/block/updateTaskListItemMarker该 API 用于更新单个任务列表项的勾选标记marker。请求参数为id块 ID与marker标记字符实现位于 updateTaskListItemMarker路由注册见 router.go需通过认证、管理员角色与只读检查中间件。从源码可以看到关键的校验与处理链路buildUpdatedTaskListItemBlockDOM 先按id取出块校验块类型必须是NodeListItem再加载所在文档的语法树Lute AST定位节点校验li.ListData.Typ 3确认为任务列表项校验marker长度必须为 1且不能是[或]防止破坏任务列表语法在 AST 的TaskListItemMarker节点上写入新标记并以TaskListItemChecked ! marker推导勾选态随后渲染出更新后的块 DOM通过事务机制提交构造Action: update的Operation经model.PerformTransactions与model.FlushTxQueue落库并broadcastTransactions广播到各端含移动端保证多端同步与历史记录history正确。请求示例{ id: 20260909000000-abcdefgh, marker: x }新增内核 API/api/block/batchUpdateTaskListItemMarker批量版本用于一次更新多个任务列表项的标记实现见 batchUpdateTaskListItemMarker。参数为对象数组items每个元素包含id与marker{ items: [ { id: 20260909000000-abcdefgh, marker: x }, { id: 20260909000001-ijklmnop, marker: } ] }从源码结构看其实现有两个值得注意的细节同一id重复出现时「保留最后一个 marker」且按去重后的 id 生成操作列表即重复提交是幂等收敛的所有操作合并进一个事务单个Transaction的DoOperations再统一广播。相比逐条调用单条 API批量接口减少事务次数适合插件做「一键完成全部任务」这类批量操作。新增内核 API/api/file/workspaceCopyFiles该 API 提供工作空间内的文件批量复制能力实现位于 workspaceCopyFiles。请求参数srcs字符串数组源文件路径相对于工作空间destDir目标目录相对于工作空间不存在时会自动创建。{ srcs: [data/box1/20260909000000-abcdefgh/20260909000000-abcdefgh.md], destDir: data/backup/20260909 }从源码看该接口在安全边界上做了多层防护这也呼应了本版本「修复一些安全漏洞」的整体基调每个源路径都经util.GetAbsPathInWorkspace解析并限定在工作空间内越界路径直接返回 403util.IsSensitivePath判定为敏感路径的文件拒绝复制返回code: -2rejectEncryptedBoxPath拒绝涉及加密笔记本的源路径与目标目录返回code: -3避免在加密笔记本内创建明文目录或绕过加密边界目标若为已存在的 symlink 则拒绝os.Create会跟随符号链接可能写入加密笔记本内部目标目录不存在时以0755权限MkdirAll创建且创建前先做加密笔记本目录拦截复制完成调用model.IncSync()保证文件同步机制感知到变更。这些防护意味着该 API 可以安全地用于插件实现「工作空间内备份/归档」类功能而无法被用作越权文件操作通道。插件 APIgetAllTabs新增type参数前端布局工具 getAllTabs 新增可选参数type用于按面板类型筛选标签页该函数已导出给插件使用见 API.ts。从源码实现看type支持的值包括Search、Asset、Editor、Graph、Backlink、Outline以及自定义面板的customModelType。筛选逻辑是双通道匹配已实例化的 tab 直接比较其model实例类型model instanceof Search等尚未完全初始化的 tab 回退解析头部元素的data-initdata属性按instance/customModelType字段匹配。插件使用示例// 仅获取所有编辑器标签页 const tabs getAllTabs(Editor); // 获取某个自定义类型的面板 const customTabs getAllTabs(myPanelType);此前插件只能拿到全量标签再自行过滤现在可以在布局层面直接按类型取回简化了「聚焦当前文档编辑器」「定位搜索面板」等常见插件逻辑。注意该实现标注了#if !MOBILE桌面端与移动端行为存在条件编译差异移动端相关逻辑不可用。升级建议与适用前提macOS 用户本版本修复了默认工作空间数据丢失问题建议尽快升级开启 API 自托管访问的用户本版本包含安全漏洞修复且新增的workspaceCopyFiles等 API 均叠加了认证、管理员角色与只读检查见 路由注册但生产环境仍建议保持最小化端口暴露插件开发者data-task的写约束意味着此前若有插件通过通用属性接口写任务状态的逻辑需要迁移到updateTaskListItemMarker/batchUpdateTaskListItemMarkergetAllTabs的type参数则为布局类插件提供了更精确的筛选能力。该变更记录基于当前仓库中 v3.6.4 的三个语言版本文档en、zh-CN、zh-TWAPI 行为以源码kernel/api/目录当前实现为准由于仓库为后续版本的源码个别实现细节可能在更新版本中继续演进。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门