Dify 版本追踪 - 2026-W13

5 阅读17分钟

W13 核心主题:双版本发布周 — v1.13.1 大版本 + v1.13.2 紧急回归修复;1.13.3 里程碑开启;Redis Streams 可靠性升级提上日程;安全持续加固。 日期范围:2026-03-18 — 2026-03-24


📦 版本发布

1. v1.13.1(Latest Stable)— 重大功能版本

来源: github.com/langgenius/…
发布时间: 2026-03-18(估计,"last week" 相对 2026-03-24)
类型: Stable
贡献者: 91 人(含 vincentkoc、fatelei 等);reaction 数 8(🎉7 ❤️4)

安全修复:

  • SQL 注入修复:向量存储查询路径改为参数化 SQL(#33229 对应修复已合入)
  • HITL 邮件加固:sanitize subject/body + strip CR/LF,防止 SMTP header 注入
  • 会话删除 API 强制 ownership 验证
  • 插件卸载时清除 provider credentials,减少残余凭据风险
  • 企业 API 的无效/过期 license 错误处理增强

新功能/亮点:

  • ✅ 新增 Hologres 向量检索 + 全文搜索后端支持
  • ✅ 新增数据集文档下载 Service API(批量 ZIP 下载 + 单文件签名 URL)
  • ✅ HITL 邮件内容改为 Markdown 渲染(Breaking: 旧邮件模板行为改变)
  • ✅ 草稿变量从 App 维度改为 用户维度(Breaking: 历史草稿变量不再可用)
  • ✅ Workflow 画布边 context 菜单(可直接删边)
  • ✅ 聊天输入框发送键行为可配置(Enter vs Shift+Enter)
  • ✅ message-end 流式响应中新增 file payloads
  • ✅ 新增额外 Celery 队列 dataset_summary(LLM 摘要生成任务)
  • ✅ 新增 REDIS_MAX_CONNECTIONS 配置项
  • PUBSUB_* 配置迁移为 EVENT_BUS_*(旧名称已 deprecated)
  • ✅ 新增 export-app-messages CLI 命令(导出 JSONL.GZ)
  • ✅ 新增荷兰语(nl-NL)本地化支持


2. v1.13.2(Latest Stable)— 紧急回归修复

来源: github.com/langgenius/…
发布时间: 2026-03-21(估计,v1.13.1 后几天)
类型: Stable
贡献者: 2 人(fatelei、QuantumGhost);reaction 数 6(👍5 ❤️1)

修复内容:

  • 🔥 严重回归fetch_prompt_messages 中 prompt message 转换逻辑破坏了 LLM 节点和问题分类节点的 LLM-plugin 调用(#33666)
  • 🔥 Knowledge Retrieval 节点执行失败(enum 不兼容值,#33638)
  • Weaviate 客户端清理不当 (#33593)
  • max_retries 硬编码修复 (#33619)
  • CreatorUserRole 兼容 end-userend_user 两种写法 (#33638)

⚠️ 升级注意:从 v1.13.1 升级到 v1.13.2 只需标准 Docker Compose upgrade 流程,无 Schema migration。


🗓 本周发版节律

版本类型日期(估计)亮点
v1.13.1Stable2026-03-18Hologres、文档下载 API、草稿变量用户化、HITL 邮件 Markdown、安全加固
v1.13.2Stable2026-03-21紧急修复 LLM 节点调用崩溃、Knowledge Retrieval 回归

📊 本周共 2 次正式发布(2 stable),发版密度高:主版本上线后 3 天内出紧急补丁,说明 v1.13.1 存在入库时未发现的回归。


🔥 热门话题

3. 🔄【跟进】SQL 注入修复 PR #33229 已合入 v1.13.1

来源: github.com/langgenius/…
时间: 2026-03-18
热度: 安全高优先

摘要: W12 持续追踪的 SQL 注入修复(tidb_vector key 参数残余注入,#33229)已在 v1.13.1 安全更新中确认修复。v1.13.1 Release Note 明确提到"向量存储查询路径改为参数化 SQL"。自托管用户应尽快升级至 v1.13.2(含 v1.13.1 所有安全修复)。


4. 🚀 Redis Streams 从 XREAD 升级到 XREADGROUP(#33884)

来源: github.com/langgenius/…
时间: 2026-03-23(PR opened yesterday)
热度: 25 条评论,milestone 1.13.3

摘要: fatelei 提交 PR #33884,将 Redis Streams 广播频道从 XREAD 全面迁移至 XREADGROUP Consumer Group 模式。动机源自对多订阅者场景(如多标签页并发)的可靠性需求。Copilot Code Review 指出一处关键设计问题:每个订阅者创建独立 consumer group 反而抵消了 group 共享状态的优势。已纳入 1.13.3 里程碑,review 仍在进行。


5. 🚀 App 列表页支持排序与排列(#33998)

来源: github.com/langgenius/…
时间: 2026-03-24(今日 4 小时前 open)
热度: 14 条评论

摘要: bowenliang123 提交 PR #33998,为 App 列表页新增排序(sort)和排列(order)功能,对应 enhancement issue #33997。此功能为自托管用户管理大量 App 时的高频痛点,当前列表页无法排序。PR 仍在 Review 阶段。


6. 🐛 Speed regression: v1.13.1 LLM 节点多处调用崩溃(已修复于 v1.13.2)

来源: github.com/langgenius/…
时间: 2026-03-21
热度: 严重回归;6人 reaction

摘要: v1.13.1 发布后迅速暴露严重回归:fetch_prompt_messages 方法中 prompt message 转换逻辑被意外破坏,导致所有依赖 LLM Plugin 的节点(LLM 节点、问题分类器等)批量失败。Knowledge Retrieval 节点也因 enum 值不兼容同时故障。v1.13.2 在 2 位核心开发者(fatelei + QuantumGhost)协作下快速发布修复。


7. 🔐 IDOR 安全修复:DataSourceOauthBinding 缺乏 tenant_id 检查(#33840)

来源: github.com/langgenius/…
时间: 2026-03-24(已 closed)
热度: 安全漏洞

摘要: xr843 提交 PR #33840,修复 DataSourceOauthBinding 接口中未验证 tenant_id 的越权访问漏洞(IDOR,Insecure Direct Object Reference)。PR 本身已关闭但相关讨论揭示了该安全模式的修复思路。自托管多租户场景用户需关注此类隔离问题。


🚀 新功能 / 合并 PR

8. fix: chunk not display in indexed document(#33942)

来源: github.com/langgenius/…
时间: 2026-03-24(已 merged)

摘要: fatelei 修复索引完成文档中 chunk 预览无法显示的 bug。对应 issue #33941,影响 Knowledge Base 文档预览 UX,本次合并解决。


9. fix: fix omitted app icon_type updates(#33988)

来源: github.com/langgenius/…
时间: 2026-03-24(已 merged)

摘要: QuantumGhost 修复 PUT /console/api/apps 接口未正确保存 icon_type 字段的问题(#33987)。涉及 App 图标配置持久化逻辑,属于 UX 细节修复。


10. fix(rate_limit): flush redis cache when max_active_requests changes(#33830)

来源: github.com/langgenius/…
时间: 2026-03-24(已 merged,30 条评论)

摘要: qwedc001 修复当用户修改 App 的 max_active_requests 配置时,Redis 中残留的旧限流 cache 未刷新的 bug(#33810)。历史 cache 会导致新配置不生效。此 PR 本周讨论活跃(30 条评论),最终合入。


11. refactor(api): type auth service credentials with TypedDict(#33867)

来源: github.com/langgenius/…
时间: 2026-03-24(已 merged)

摘要: bittoby 对 auth service 凭据使用 TypedDict 类型化,提升代码可维护性和类型安全性。属于持续进行的 TypedDict 迁移系列工作的一部分。


12. feat(web): refactor toast usage to new UI Toast API(#34001 merged + #34002 open)

来源: github.com/langgenius/…
时间: 2026-03-24

摘要: lyzno1 推进前端 toast 通知组件系统化迁移,将 plugin 相关、工作流相关及全局 legacy toast 调用迁移至新 UI Toast API。#34001 已合并,#34002(workflow toast 迁移)仍在 review 中。属于 Web 前端统一组件体系建设的重要一步。


13. fix(sdk): patch flatted vulnerability in nodejs client lockfile(#33996)

来源: github.com/langgenius/…
时间: 2026-03-24(已 merged)

摘要: lyzno1 修复 Dify Node.js SDK 客户端 lockfile 中 flatted 依赖的安全漏洞,标签为 dependencies+lgtm。SDK 用户应更新至最新版本。


🐛 活跃 Bug 与问题

14. LLM 节点可配置参数不一致(#34005)

来源: github.com/langgenius/…
时间: 2026-03-24(今日开启)

摘要: moncat2005 报告 LLM 节点中可配置参数存在不一致现象,部分参数在不同场景下行为不同。刚开启,尚无处理进展。


15. iOS 气泡显示但消息文本不可见(#33981)

来源: github.com/langgenius/…
时间: 2026-03-24(11 小时前)

摘要: iPhone 12/13 上聊天 WebApp 中消息气泡容器正常显示但文本内容不可见。为移动端兼容性问题,影响 iOS 用户体验。未分配处理人。


16. Cannot remove userinput.files LEGACY 字段 — Agent 节点故障(#33976)

来源: github.com/langgenius/…
时间: 2026-03-24(12 小时前,3 条评论)

摘要: ally687 报告 Workflow App 中无法移除 userinput.files LEGACY 字段,且此字段导致 Agent 节点持续报错。属于 1.14.0-rc1 引入的新 Agent 运行时遗留兼容问题,cloud 环境复现。


17. 🔄【跟进】access token 退出后仍有效 PR #31794 — 停滞超 8 周

来源: github.com/langgenius/…
时间: 2026-01-31(original PR),本周无更新

摘要: 修复退出登录后 access token 仍有效的安全 PR #31794 本周仍无进展,自 W08 追踪以来已持续停滞超 8 周。该安全问题对自托管部署有实质影响,急需社区关注或维护者介入。


📊 数据概览

维度数据
GitHub Open Issues370(本周新增约 8-10)
GitHub Open PRs424(本周新合并约 8+)
版本发布2 次(v1.13.1 stable + v1.13.2 stable)
HN 热帖本周无 Dify 专题
Reddit 热帖本周无新帖
本周核心主题双版本发版、回归修复、Redis Streams 升级、1.13.3 里程碑开启
当前最新稳定版v1.13.2
在途里程碑1.13.3(含 xreadgroup 迁移、LLM 节点 Headers 等 )

Starting: Deep dive items 1, 3, 5 (7/8)

Fetched 3 resources

好,我将对 1、3、5 三条进行深入分析。


深入分析1:v1.13.2 回归根因 — fetch_prompt_messages 究竟改了什么

1. 📋 背景与问题描述

根源 PR#33400(合入 v1.13.1)

v1.13.1 中,开发团队对 LLM 节点代码进行了重构:将 LLM node 类的 静态方法 fetch_prompt_messages 抽取成模块级函数(module-level function),目的是让其他节点也能复用该逻辑。然而在搬运过程中,一段关键条件判断被悄悄丢掉了:

# 原始逻辑(v1.13.0 中的 LLM node class 内)
# 如果 prompt_message_content 只有 1 条且类型为 TEXT,
# 则将 TextPromptMessageContent 对象 转换为 str
if len(prompt_message_content) == 1 and \
   prompt_message_content[0].type == PromptMessageContentType.TEXT:
    prompt_message_content = prompt_message_content[0].data  # 转成 str

经过 #33400 抽取后,这段转换逻辑没有被保留到新的模块级函数中。

影响链

fetch_prompt_messages 返回 TextPromptMessageContent 对象
    → LLM Plugin 调用层期望收到 str
    → PluginInvokeError: Unsupported atom data type (TextPromptMessageContent)
    → LLM 节点崩溃 / 问题分类器崩溃

2. 🛠 方案与技术细节

修复 PR#33666,由 QuantumGhost 提交,fatelei 审核合入

修复策略:在 api/dify_graph/nodes/llm/llm_utils.pyfetch_prompt_messages 函数中补回缺失逻辑——恢复单文本内容时将 TextPromptMessageContent 降级为 str 的转换。

同时 QuantumGhost 补充了针对 PromptMessageContent 处理的单元测试(commit 0d80c73),防止类似静默回归再次被引入。

关键代码路径

  • api/dify_graph/nodes/llm/llm_utils.pyfetch_prompt_messages()
  • 触发场景:任何包含 LLM 节点或问题分类器节点的 Workflow/Chatflow

3. ⚙️ 操作过程

时间线事件
2026-03-??PR #33400 合入,重构 LLM node 静态方法为模块级函数,丢失 content 转换逻辑
2026-03-18v1.13.1 正式发布,回归随版本推送给所有用户
2026-03-??issue #33598 上报:"An LLM node error occurred regarding TextPromptMessageContent"
2026-03-??issue #33640 上报:"LLM node throws PluginInvokeError: Unsupported atom data type"
2026-03-??issue #33729 上报:"升级 v1.13.1 后 chatflow LLM 节点无法正常运行"
2026-03-??PR #33666 提交并合入 main,同时 cherry-pick 到 1.13.2 分支
2026-03-21v1.13.2 发布,回归修复

复现方式

  1. 升级至 v1.13.1
  2. 创建包含 LLM 节点的 Chatflow,系统提示词设为任意文本
  3. 调用该工作流 → 触发 PluginInvokeError: Unsupported atom data type (TextPromptMessageContent)

4. 💡 核心观点与结论

  • 回归类型:重构导致的逻辑丢失(Refactor-induced regression),属于典型的"移动代码时遗漏条件分支"问题
  • 影响评估:极高——任何部署了 LLM 节点的 Chatflow/Workflow 在升级 v1.13.1 后直接不可用
  • 根本问题:抽取静态方法为独立函数时,缺乏充分的针对不同内容类型的回归测试
  • 维护者应对:QuantumGhost 快速响应,补充了测试覆盖,版本周期内完成修复,体现了较强的紧急响应能力

5. 👥 影响人群与范围

  • 全体 升级了 v1.13.1 的自托管用户
  • 特别是使用了 LLM 节点(含系统提示)、问题分类器节点的 Chatflow/Workflow 场景
  • Cloud 用户虽不选版本,也在此期间短暂受影响

6. 📈 当前状态

已在 v1.13.2 完全修复。建议所有停留在 v1.13.1 的用户立即升级至 v1.13.2。

7. 🔗 资源链接


深入分析2:v1.13.1 安全修复全景

1. 📋 背景与问题描述

v1.13.1 是本月安全修复最集中的版本,共涵盖 4 类安全向量,分别针对 SQL 注入SMTP 邮件头注入越权访问(IDOR)凭据残留

2. 🛠 四类安全修复详解

A. SQL 注入 — 向量数据库查询路径(PR #33229)

漏洞路径document_ids_filter 在 pgvector、tidb_vector、milvus 三个适配器中通过 f-string 直接插值到 SQL/过滤表达式中,若 document_ids_filter 值被攻击者控制,可执行任意 SQL。

修复方式

适配器修复手段
pgvectorsearch_by_vectorsearch_by_full_text 改为 %s 参数化占位符
tidb_vectordelete_by_idssearch_by_vector 改为 SQLAlchemy :named 绑定参数
milvussearch_by_vectorsearch_by_full_text 对 document ID 做输入 sanitize

未完全修复的残余点:Gemini Code Assist 在 review 期间发现 tidb_vector 的 get_ids_by_metadata_field 方法中,key 参数(JSON 路径)仍然直接内插到 SQL 字符串。alvinttang 已确认需要补充修复,但 PR #33229 截至本周仍为 Open 状态,尚未合入 main。

⚠️ v1.13.1 release notes 声称修复了 SQL 注入,但 PR #33229 本身仍为 open。这意味着实际合入的可能是该 PR 的衍生版本或部分修改,或者 release 指的是更早的 #31946(MyScale)和 #28951(OceanBase)先例修复的延伸。tidb_vector key 参数注入残余风险仍存在。

复现条件:攻击者需能控制传入向量检索的 document ID 值(例如通过 API 调用知识库检索接口)。

B. HITL 邮件头注入 — SMTP Header Injection

漏洞路径:Human-in-the-Loop 节点通过邮件交付审核内容时,邮件 subject 和 body 未经处理直接传入 SMTP 发送逻辑。攻击者可在 subject 中注入 CR/LF(\r\n)字符,在 SMTP 协议层插入额外邮件头,实现邮件伪造。

修复内容(v1.13.1):

  • 对 subject 和 body 执行内容 sanitize
  • Strip subject 中的 CR/LF 字符,防止 SMTP header injection
  • HITL 邮件内容改为 Markdown 渲染(Breaking Change)

攻击场景:仅在 HITL Email Delivery 功能开启的部署中有效;cloud 环境中的 email delivery 依赖 plan 限制。

C. 会话删除越权(IDOR)— Ownership Check

漏洞描述:会话删除 API 未强制验证请求者与会话 owner 的归属关系,可能允许低权限用户删除其他用户的会话数据。

修复:v1.13.1 中强制加入 ownership 验证逻辑。相关 PR #33840(DataSourceOauthBinding IDOR 修复,本周另有一个同类 PR)反映此类越权问题在代码库中存在系统性模式,需持续清查。

D. 插件卸载凭据残留

漏洞描述:卸载插件时,provider credentials(如 API Keys)未被清除,留在数据库中形成"凭据残留"(residual credentials)。

修复:v1.13.1 在插件卸载流程中新增清除 provider credentials 的步骤,减少凭据泄露窗口。

3. ⚙️ 影响范围汇总

安全问题影响版本修复版本攻击可达性
SQL 注入(pgvector/milvus 主要路径)≤1.13.01.13.1中等(需控制 document_ids 参数)
tidb_vector key 参数注入(残余)≤1.13.1(?)未完全修复中等
SMTP 邮件头注入≤1.13.01.13.1低(需 HITL Email 开启)
会话删除 IDOR≤1.13.01.13.1中等(需多用户部署)
插件凭据残留≤1.13.01.13.1低(物理访问 DB)

4. 💡 核心观点与结论

  • v1.13.1 是近期安全修复密度最高的版本,自托管用户应尽快升级至 v1.13.2(捆绑了 v1.13.1 所有安全修复)
  • SQL 注入修复未完全闭合:tidb_vector key 参数残余风险确认存在,使用 TiDB 向量后端的部署需额外关注
  • PR #31794(access token 退出后仍有效)仍未合入,安全漏洞独立于本次修复批次,停滞 8 周问题待解

5. 🔗 资源链接


深入分析3:1.13.3 里程碑展望

1. 📋 背景

1.13.3 里程碑于 2026-03-16/17 由 QuantumGhost 创建,Due Date:2026-03-25(明天)

当前进度:16% complete,Open 5 项、Closed 1 项。

2. 🛠 当前纳入的 Items

#类型标题状态优先级
#30795EnhancementEnhance non-image files display during agent runsOpen中(IthacaDream assigned)
#24224BugDify reinitializes MCP session per tool call → multi-step tools failOpen高(MCP 稳定性核心问题)
#30172EnhancementAdd optional "Headers" input to LLM nodeOpen中(scdeng assigned,9 条评论)
#33884PRfeat: change xread to xreadgroupOpen(review 中)中-高(基础设施)
#33881Enhancementredis stream use xreadgroup instead of xreadOpen联动 #33884

3. ⚙️ 核心 Items 分析

A. MCP Session 每次工具调用重新初始化(#24224)— 最高优先

这是 MCP 工具生态中影响最广的稳定性问题:每次工具调用都会重新建立 MCP session,导致:

  • browser_navigatescreenshot 等多步操作中途断裂
  • 有状态的 MCP 工具(需要 session 连续性)完全无法使用
  • Issue 开于 2025-08-20,在 1.13.3 被分配优先解决

这与 W12 追踪的 "MCP tool 504 Gateway Timeout" 场景有重叠,均指向 MCP 会话管理的基础设施缺陷。

B. Redis xreadgroup 迁移(#33884 + #33881)— 基础设施升级

技术背景:

  • 现有 XREAD 是"单播"读取,多个订阅者(如多标签页)可能漏读消息
  • XREADGROUP Consumer Group 提供可靠的多订阅者消费语义

Copilot 指出的关键设计问题

每个订阅者创建独立 consumer group,而不是共享组。这违背了 consumer group 的设计初衷——多个消费者应共享同一个 group,由 Redis 分发消息;而独立 group 等于每个订阅者各自独立消费全量消息,丧失了共享状态的优势,且引入了额外的 group 管理开销。

fatelei 已 force-push 更新,但设计问题是否已解决尚待 review 确认。

C. LLM 节点可配置 Headers(#30172)— 功能增强

scdeng 于 2025-12-25 提出,希望在 LLM 节点中添加可选的 HTTP Headers 输入字段,支持在模型请求中自定义 headers(如 X-Custom-AuthX-Priority 等)。这对接入需要自定义请求头的私有部署模型或企业代理非常有用。已分配给 scdeng,进展中。

4. 💡 核心观点与结论

⚠️ 1.13.3 极有可能 miss due date(明天 2026-03-25)

理由:

  • 16% 完成率,5 项 open
  • #33884(xreadgroup)仍在 review,Copilot 发现设计问题需要修改
  • #24224(MCP session)是复杂基础设施改动,无活跃 PR

实际预测

  • v1.13.3 发布时间可能推迟至下周(2026-03-28 前后)
  • 发布内容最可能包含:xreadgroup 迁移(#33884 核心变更)+ 若干小 bug fix
  • MCP session # 24224 有可能滑入 next 里程碑

1.13.3 对用户的价值

  • xreadgroup 迁移将改善多标签页并发下的 SSE 可靠性(长期困扰 W12 SSE 断连的底层原因之一)
  • LLM node Headers 支持私有/企业模型场景

5. 🔗 资源链接