1.17.0
v1.17.0
New Features
Agent: E2B Sandbox, Home Snapshots, and Skill Management
- E2B sandbox backend: agent shell/code execution can now run on E2B cloud sandboxes in addition to the local sandbox. Select the backend with
DIFY_AGENT_RUNTIME_BACKEND; a newdocker-compose.e2b.yamlships the E2B stack, E2B traffic is authenticated, and the E2B template is synced on release (#39480, #39705, #39873, #39996, #40858, #40871, #40891, #40892). - Build-time Home Snapshots: when an agent build is applied (published), the agent's sandbox home directory — installed packages, prepared files, working state — is captured and subsequent runs of the published agent restore their home directory from that snapshot, so the agent starts from the exact filesystem state it had at build time. (#39702, #40876, #40996).
- Workspace-level Skill management: Skills are reusable, versioned capabilities packaged with code and tool definitions that agents can discover and invoke. A new workspace-level skills manager with draft → publish → version lifecycle ships alongside a web UI (skill listing, builder panel, file editor). (#39675, #39798, #39799, #41180).
- Context-aware history compaction: long agent conversations no longer blow past the model's context window — Dify resolves each model's effective window and tiers compaction (clear old tool results first, then summarize older history) so runs stay within budget without losing recent context (#40872).
Reusable LLM Environment Variables in Workflows
- Define a shared provider/model/mode/parameter configuration once (e.g.
for_summarize,for_research) and reference it from any LLM node. Coordinated model changes now happen in one place instead of drifting node-by-node, and the references survive DSL import/export, snippets, RAG pipelines, and collaborative editing (#39125).
Human Input in Loops and Iterations
- Human-in-the-loop forms now work inside Loop and Iteration nodes, pausing and resuming correctly across page refreshes for both debug and installed apps — enabling review/approval steps within repeated work (#39243).
Provider-Neutral Unified Tracing
- Opt-in unified tracing (
OPS_TRACE_UNIFIED_ENABLED) assembles the full parent-child span tree (workflows, chatflows, messages, nodes, loops, iterations, nested workflows) once in core and delegates only transport to lightweight adapters. Phoenix and LangSmith adapters ship first; disabled by default and fully backward compatible (#39451). - New GenAI spans surface LLM TTFT, agent ReAct steps, tool calls, and failed LLM nodes for deeper observability (#39339).
Cloudflare Turnstile (CAPTCHA) Support
- Optional Turnstile challenge on sign-in and email-code login to protect authentication endpoints from abuse, with configurable site/secret keys and allowed hostnames (#40494).
Azure Key Vault / Pluggable KMS
- Introduces a KMS provider abstraction with Azure Key Vault support for key provisioning, encryption, and decryption, plus key rotation configuration — a step toward externally-managed encryption keys (#39933).
TiDB Vector Full-Text & Hybrid Search
- TiDB Vector deployments can now enable full-text and hybrid retrieval (
TIDB_VECTOR_ENABLE_FULLTEXT_SEARCH, default off), using a multilingual full-text index alongside vector search (#38112).
Broader Model & File Handling
- LLM nodes and agents can now pass image files directly to multimodal models, and non-vision attachments are no longer silently dropped from agent chats (#39848, #40179).
- New multimodal retrieval guidance helps users pick embedding models correctly for image-bearing knowledge bases (#40566).
- Audio ASR now accepts
audio/x-m4a, and audio MIME types are validated more accurately (#40776, #41043).
Go to Anything (⌘K / Ctrl+K)
- Press ⌘K (Ctrl+K on Windows/Linux) anywhere in the console to open the command palette and jump to apps, agents, skills, knowledge bases, plugins, or workflow nodes, or trigger quick actions via slash commands. New in this release: agents and skills are searchable, and the icon-command system was refactored across all domains for consistency (#40620, #40621, #40646–#40649, #41160).
Other Additions
- ODT (OpenDocument Text) document extraction support (#39973).
- New
date/date-pickerparameter type for tool plugins (#36163). - Lao (lo-LA) language support (#39474).
- Automatic cleanup task for old conversations (
ENABLE_CONVERSATION_CLEANUP_TASK) to bound data growth (#40889-era). - Marketplace embedded directly into integration categories for smoother tool/plugin discovery (#40744).
Improvements
Accessibility (large a11y pass)
- A very large set of changes makes the console keyboard- and screen-reader-friendly: real
<button>semantics for dozens of interactive controls, accessible names for icon-only actions (copy, close, delete, menus), primary headings on auth/install pages, keyboard-accessible member/tool selectors, and correct ARIA states (#40192–#40377 and many others).
Workflow Authoring
- The workflow generator now prefers already-installed and configured tools when suggesting nodes, so builders reach for the tools they actually have (#40611, #39850).
Workflow & Runtime Stability
- Reproducible web workflow runs, preserved canvas state after history updates, no more refresh render loops, and SSE streams now end cleanly on terminal events (#40010, #40489, #41105, #40042).
stopis now honored between non-streaming nodes and paused workflows clear stale cancellation signals correctly (#41090, #40905, #40972).APP_MAX_EXECUTION_TIMEandWORKFLOW_MAX_EXECUTION_TIMEdefaults raised from 1200s → 3600s to accommodate longer-running workflows.
Internal Quality
- Large migration of unit tests to real ORM models / SQLite sessions for more reliable coverage, plus stronger typing across migrated tests (many #38xxx–#39xxx). No user-facing behavior change.
Security Enhancements
- Authentication hardening: Turnstile challenge on login/email-code flows, hardened email-code verification with attempt limits and token expiry (
EMAIL_CODE_LOGIN_MAX_ATTEMPTS,EMAIL_CODE_LOGIN_TOKEN_EXPIRY_MINUTES), suspended-email-domain handling, and short-lived agent authorization tokens (#40494, #40960, #41004, #40884). - Access-control / ownership scoping: dataset, document, RAG, conversation, workspace-credential, and OAuth-client resources are now consistently bound to their owners and app scope, closing several unauthorized-access paths (#40989, #40888, #40790, #40745, #40893, #40786, and related).
- SSRF & outbound hardening: outbound HTTP connect phases are bounded (5s), agent/binding download and run timeouts are configurable, and the SSRF-blocked error message now points to the correct issue (#40807, #41027, #40605).
Bug Fixes (selected)
- Prevent dropped
workflow_startedevents in Redis Streams and dropped/duplicated runs from superseded executions (#40964, #40699). - Normalize workflow timestamps to naive UTC and preserve run snapshots/history for failed, cancelled, and interrupted runs (#40947, #40876, #40972).
- Prevent cross-tab chat conversation switching and stop dropping non-vision attachments in agent chat (#40709, #40179).
- Correct Qwen/VL system-message ordering by merging system messages first (#39136).
- Fix Elasticsearch-JA adapter
document_idmapping andVectorType(#40400); avoid empty Bedrock schema fields (#40443). - Use dynamic DNS resolution for all nginx upstreams (#39155); preserve UTF-8 byte size for text uploads (#40034).
- Numerous webapp/UI fixes: restore email-code and password form submissions, mobile sign-in overflow, toast stacking, model selector spacing (#40227, #40222, #40921, #40970, #8d612895).
Environment Variable Changes
Added
Agent runtime / sandbox (docker/envs/core-services/dify-agent.env.example)
DIFY_AGENT_RUNTIME_BACKEND,DIFY_AGENT_RUN_TIMEOUT_SECONDS,DIFY_AGENT_SANDBOX_FILES_BASE_URL,DIFY_AGENT_STUB_UPLOAD_FILE_SIZE_LIMIT,DIFY_AGENT_BINDING_FILE_DOWNLOAD_COMMAND_TIMEOUT_SECONDS- E2B:
DIFY_AGENT_E2B_API_KEY,DIFY_AGENT_E2B_TEMPLATE,DIFY_AGENT_E2B_SHELLCTL_PORT,DIFY_AGENT_E2B_ACTIVE_TIMEOUT_SECONDS - Local sandbox:
DIFY_AGENT_LOCAL_SANDBOX_ENDPOINT,DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN - Outbound HTTP tuning:
DIFY_AGENT_OUTBOUND_HTTP_CONNECT_TIMEOUT,DIFY_AGENT_OUTBOUND_HTTP_READ_TIMEOUT,DIFY_AGENT_OUTBOUND_HTTP_WRITE_TIMEOUT,DIFY_AGENT_OUTBOUND_HTTP_POOL_TIMEOUT,DIFY_AGENT_OUTBOUND_HTTP_KEEPALIVE_EXPIRY,DIFY_AGENT_OUTBOUND_HTTP_MAX_CONNECTIONS,DIFY_AGENT_OUTBOUND_HTTP_MAX_KEEPALIVE_CONNECTIONS AGENT_BACKEND_BINDING_FILE_DOWNLOAD_TIMEOUT_SECONDS,AGENT_BACKEND_HOME_SNAPSHOT_TIMEOUT_SECONDS(api/.env.example)
Auth / security
TURNSTILE_SITE_KEY,TURNSTILE_SECRET_KEY,TURNSTILE_ALLOWED_HOSTNAMES,TURNSTILE_EMAIL_CODE_VERIFY_REQUIREDEMAIL_CODE_LOGIN_MAX_ATTEMPTS,EMAIL_CODE_LOGIN_TOKEN_EXPIRY_MINUTESKEY_PROVIDER_TYPE,AZURE_KEYVAULT_VAULT_URL,AZURE_KEYVAULT_KEY_SIZE,AZURE_KEYVAULT_ROTATION_INTERVAL_DAYS
Knowledge / retrieval
TIDB_VECTOR_ENABLE_FULLTEXT_SEARCH,TIDB_ON_QDRANT_ESTIMATED_STORAGE_LIMITS_MB,KNOWLEDGE_UPLOAD_FILE_SIZE_LIMIT_FOR_PAID_PLAN
Tracing / observability
OPS_TRACE_UNIFIED_ENABLED,OPS_TRACE_PARENT_CONTEXT_TTL_SECONDS
Misc
ENABLE_CONVERSATION_CLEANUP_TASK,CONVERSATION_CLEANUP_TASK_INTERVAL,CONVERSATION_CLEANUP_BATCH_SIZEUPLOAD_SKILL_FILE_SIZE_LIMIT,PLUGIN_MAX_FILE_SIZE,MARKDOWN_FORM_FIELD_NAME_EXTRA_CHARSDEPLOYMENT_EDITION(replacesEDITION, see below)
Removed
EDITION→ renamed toDEPLOYMENT_EDITIONENTERPRISE_ENABLED(enterprise gating consolidated)AGENT_BACKEND_RUN_TIMEOUT_SECONDS→ replaced byDIFY_AGENT_RUN_TIMEOUT_SECONDSDIFY_AGENT_SHELLCTL_AUTH_TOKEN,DIFY_AGENT_SHELLCTL_ENTRYPOINT(agent runtime reworked)
Modified (default values)
APP_MAX_EXECUTION_TIME:1200→3600WORKFLOW_MAX_EXECUTION_TIME:1200→3600OPS_TRACE_RETRYABLE_DISPATCH_MAX_RETRIES:60→780GRAPH_ENGINE_SCALE_UP_THRESHOLD:3→0
Docker Compose
docker/docker-compose.yaml— modifieddocker/docker-compose.middleware.yaml— modifieddocker/docker-compose.e2b.yaml— new (E2B agent sandbox stack)
Database Migrations
This release includes new migrations (community-edition relevant):
add_workflow_version_number— workflow version numbering (deployment v2)add_oauth_provider_app_auto_authorize— silent OAuth authorization flagadd_conversation_cleanup_index— supports the conversation cleanup taskadd_workspace_skill_management— workspace-level Skill management (draft/version/publish lifecycle)add_agent_home_snapshot_ledger,make_home_snapshot_references_nullable— agent build-time Home Snapshot ledger and nullable snapshot referencesreplace_agent_runtime_sessions_with_*,remove_agent_drive,clean_legacy_agent_soul_files,simplify_agent_v2_output_contract— new agent runtime
No manual backfill command is required for these migrations. Run flask db upgrade as part of the upgrade.
Upgrade Guide
[!IMPORTANT]
- This release includes new database migrations — run them as part of the upgrade.
- Environment variables changed substantially (many added, edition variable renamed
EDITION→DEPLOYMENT_EDITION, several defaults changed). Review the Environment Variable Changes section and update your.envaccordingly. In particular, renameEDITIONtoDEPLOYMENT_EDITIONif you set it.- Docker Compose configuration changed and a new
docker-compose.e2b.yamlwas added. If you maintain a customizeddocker-compose.yaml, re-apply local customizations carefully.- The migration
add_conversation_cleanup_indexbuilds index on existing data, which could take longer to execute if theconversationstable is big.
Docker Compose Deployments
- Back up your customized compose and env files:
cd docker cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak cp .env .env.$(date +%s).bak 2>/dev/null || true - Get the latest code:
git fetch --tags git checkout main # or the target release tag once cut - Stop services (from the
dockerdirectory):docker compose down - Back up data:
tar -cvf volumes-$(date +%s).tgz volumes - Review env changes and re-apply local customizations (remember
EDITION→DEPLOYMENT_EDITION). - Upgrade:
docker compose up -d
Source Code Deployments
- Stop the API server, Worker, and Web frontend.
- Get the latest code:
git fetch --tags git checkout main # or the target release tag once cut - Update Python dependencies:
cd api uv sync - Run migrations:
uv run flask db upgrade - Rebuild/restart the Web frontend, then restart the API server and Worker.
What's Changed
- test: use SQLite sessions in services plugin by @asukaminato0721 in https://github.com/langgenius/dify/pull/39084
- test: separate human input unit and database paths by @escape0707 in https://github.com/langgenius/dify/pull/39655
- test: use SQLite sessions in services core by @asukaminato0721 in https://github.com/langgenius/dify/pull/39088
- test: use SQLite sessions in controllers service api by @asukaminato0721 in https://github.com/langgenius/dify/pull/39098
- test: use SQLite sessions in services core by @asukaminato0721 in https://github.com/langgenius/dify/pull/39090
- test: move message cleanup coverage to unit tests by @asukaminato0721 in https://github.com/langgenius/dify/pull/38932
- test: use sqlite3 session in test_plugin_service by @asukaminato0721 in https://github.com/langgenius/dify/pull/38727
- test: use sqlite3 session in test_wraps by @asukaminato0721 in https://github.com/langgenius/dify/pull/38770
- test: use SQLite sessions in commands by @asukaminato0721 in https://github.com/langgenius/dify/pull/39080
- test: move data source controller coverage to unit tests by @asukaminato0721 in https://github.com/langgenius/dify/pull/38924
- fix: prevent Safari from clipping the settings close button by @iamjoel in https://github.com/langgenius/dify/pull/39664
- fix: prevent the model selector footer from covering options by @iamjoel in https://github.com/langgenius/dify/pull/39668
- test: move OAuth server service coverage to unit tests by @asukaminato0721 in https://github.com/langgenius/dify/pull/38931
- fix: validate plugin installation scope by @lyzno1 in https://github.com/langgenius/dify/pull/39669
- chore: improve archived logs hint in logs list page by @hjlarry in https://github.com/langgenius/dify/pull/39659
- test: use SQLite sessions in core app by @asukaminato0721 in https://github.com/langgenius/dify/pull/39099
- test: use SQLite sessions in core datasource by @asukaminato0721 in https://github.com/langgenius/dify/pull/39104
- test: use SQLite in LangSmith traces by @asukaminato0721 in https://github.com/langgenius/dify/pull/38986
- test: move workflow app service coverage to unit tests by @asukaminato0721 in https://github.com/langgenius/dify/pull/38946
- chore(docker): remove redundant feature preview env by @laipz8200 in https://github.com/langgenius/dify/pull/39035
- test: use SQLite in Aliyun trace utilities by @asukaminato0721 in https://github.com/langgenius/dify/pull/38983
- test: use SQLite sessions in services retention by @asukaminato0721 in https://github.com/langgenius/dify/pull/39074
- test: use SQLite sessions in core rag by @asukaminato0721 in https://github.com/langgenius/dify/pull/39105
- fix: reject trailing newlines in alphanumeric() validator (#39666) by @Harsh23Kashyap in https://github.com/langgenius/dify/pull/39667
- test: use SQLite sessions in core app apps by @asukaminato0721 in https://github.com/langgenius/dify/pull/39103
- chore(i18n): sync translations with en-US by @github-actions[bot] in https://github.com/langgenius/dify/pull/39671
- test: use sqlite3 session in test_agent_app_feature_service by @asukaminato0721 in https://github.com/langgenius/dify/pull/38724
- test: use sqlite3 session in test_web_login by @asukaminato0721 in https://github.com/langgenius/dify/pull/38725
- fix: improve unconfigured agent guidance by @iamjoel in https://github.com/langgenius/dify/pull/39676
- fix: populate completion_params from model schema defaults in Agent node by @rkfshakti in https://github.com/langgenius/dify/pull/39590
- ci: wait for KnowledgeFS before deployment by @JohnJyong in https://github.com/langgenius/dify/pull/39677
- chore: bump nltk from 3.9.4 to 3.10.0 in /api by @dependabot[bot] in https://github.com/langgenius/dify/pull/39503
- feat: add missing plugin installation to agent DSL imports by @iamjoel in https://github.com/langgenius/dify/pull/39680
- ci: replace custom noqa markers with guard ignores by @escape0707 in https://github.com/langgenius/dify/pull/39679
- ci: enforce strict checks for unit tests by @escape0707 in https://github.com/langgenius/dify/pull/39682
- refactor(web): derive workspace billing from current workspace by @lyzno1 in https://github.com/langgenius/dify/pull/39674
- feat: label agent conversation reset action on hover by @iamjoel in https://github.com/langgenius/dify/pull/39691
- chore(deps): bump gitpython from 3.1.54 to 3.1.57 in /api by @wylswz in https://github.com/langgenius/dify/pull/39684
- refactor: introduce agent working environment architecture by @BeautyyuYanli in https://github.com/langgenius/dify/pull/39480
- test(e2e): align Agent tool credential states by @lyzno1 in https://github.com/langgenius/dify/pull/39698
- test: enforce strict typing in migrated unit tests by @escape0707 in https://github.com/langgenius/dify/pull/39689
- test: share unbound unit test sessions by @escape0707 in https://github.com/langgenius/dify/pull/39690
- refactor(e2e): unify seeded runtime orchestration by @lyzno1 in https://github.com/langgenius/dify/pull/39700
- chore(deps): bump starlette, soupsieve, cryptography for CVE fixes by @GareArc in https://github.com/langgenius/dify/pull/39716
- feat(agent): make home snapshots optional and use backend defaults by @BeautyyuYanli in https://github.com/langgenius/dify/pull/39702
- chore: add E2B sync and tini supervision by @BeautyyuYanli in https://github.com/langgenius/dify/pull/39705
- chore(deps): bump wandb 0.28.0 -> 0.28.1 for CVE fix attempt by @GareArc in https://github.com/langgenius/dify/pull/39718
- fix(web): gate plugin auth permission hint by @hjlarry in https://github.com/langgenius/dify/pull/39721
- refactor(web): remove workflow node useBoolean usage by @lyzno1 in https://github.com/langgenius/dify/pull/39729
- test: use sqlite3 session in test_workflow_pause_events by @asukaminato0721 in https://github.com/langgenius/dify/pull/38688
- test: use sqlite3 session in test_human_input_timeout_tasks by @asukaminato0721 in https://github.com/langgenius/dify/pull/38703
- test: use sqlite3 session in test_metadata_bug_complete by @asukaminato0721 in https://github.com/langgenius/dify/pull/38721
- test: use sqlite3 session in test_sqlalchemy_workflow_execution_repository by @asukaminato0721 in https://github.com/langgenius/dify/pull/38761
- test: use sqlite3 session in test_session by @asukaminato0721 in https://github.com/langgenius/dify/pull/38772
- test: use SQLite sessions in core tools by @asukaminato0721 in https://github.com/langgenius/dify/pull/39107
- test: use SQLite sessions in libs by @asukaminato0721 in https://github.com/langgenius/dify/pull/39089
- test: use SQLite sessions in core rag by @asukaminato0721 in https://github.com/langgenius/dify/pull/39106
- refactor(web): consolidate settings state in URL by @lyzno1 in https://github.com/langgenius/dify/pull/39740
- fix: handle unconfigured LLM workflow streams by @linw1995 in https://github.com/langgenius/dify/pull/39741
- fix: avoid returning unused vectors in TiDB on Qdrant search by @hjlarry in https://github.com/langgenius/dify/pull/39744
- fix: display workflow run errors in the result panel by @iamjoel in https://github.com/langgenius/dify/pull/39746
- refactor(web): clarify education state ownership by @lyzno1 in https://github.com/langgenius/dify/pull/39748
- fix(web): force render dialog backdrop and use dialog description in education verify modal by @lyzno1 in https://github.com/langgenius/dify/pull/39749
- test: move service dataset controller coverage to unit tests by @asukaminato0721 in https://github.com/langgenius/dify/pull/38941
- test: use SQLite sessions in core app by @asukaminato0721 in https://github.com/langgenius/dify/pull/39100
- fix(docker): mount shared storage volume in api_websocket by @dparkmit24 in https://github.com/langgenius/dify/pull/39424
- test: use SQLite in Tencent traces by @asukaminato0721 in https://github.com/langgenius/dify/pull/38988
- fix(web): show API errors when agent publishing fails by @iamjoel in https://github.com/langgenius/dify/pull/39756
- chore: paginate installed apps by @hjlarry in https://github.com/langgenius/dify/pull/39739
- test: migrate account service tests to shared SQLite by @escape0707 in https://github.com/langgenius/dify/pull/39758
- chore: canonicalize Tailwind classes by @hyoban in https://github.com/langgenius/dify/pull/39762
- fix: fix hardcode /home/dify by @fatelei in https://github.com/langgenius/dify/pull/39767
- fix(matrixone): generate ids for every document by @csurong in https://github.com/langgenius/dify/pull/39734
- fix: refactor account about dialog ownership by @lyzno1 in https://github.com/langgenius/dify/pull/39765
- fix(plugin): preserve credentials during local replacement by @zyssyz123 in https://github.com/langgenius/dify/pull/39764
- fix(socketio): omit socket_timeout from RedisManager pub/sub options by @sergioperezcheco in https://github.com/langgenius/dify/pull/39587
- fix: allow an empty Agent tools selection by @zyz619963502zyz in https://github.com/langgenius/dify/pull/39695
- fix(api): delete custom models stored with legacy model_type values by @Souravrajvi0 in https://github.com/langgenius/dify/pull/39708
- fix(web): constrain slash picker triggers by @lyzno1 in https://github.com/langgenius/dify/pull/39768
- test: use SQLite sessions in services tools by @asukaminato0721 in https://github.com/langgenius/dify/pull/39063
- test: use SQLite sessions in services data_migration by @asukaminato0721 in https://github.com/langgenius/dify/pull/39065
- test: use SQLite sessions in rag pipeline transform by @asukaminato0721 in https://github.com/langgenius/dify/pull/39050
- test: use sqlite3 session in test_completion_completion_app_generator by @asukaminato0721 in https://github.com/langgenius/dify/pull/38723
- test: use SQLite sessions in core repositories by @asukaminato0721 in https://github.com/langgenius/dify/pull/39067
- test: use SQLite sessions in core repositories by @asukaminato0721 in https://github.com/langgenius/dify/pull/39073
- test: use SQLite sessions in services workflow by @asukaminato0721 in https://github.com/langgenius/dify/pull/39091
- test: use SQLite sessions in core rag by @asukaminato0721 in https://github.com/langgenius/dify/pull/39092
- test: use SQLite sessions in controllers console app by @asukaminato0721 in https://github.com/langgenius/dify/pull/39095
- test: use SQLite sessions in controllers console app by @asukaminato0721 in https://github.com/langgenius/dify/pull/39097
- test: use SQLite sessions in core app apps by @asukaminato0721 in https://github.com/langgenius/dify/pull/39101
- test: use SQLite sessions in core app apps by @asukaminato0721 in https://github.com/langgenius/dify/pull/39102
- fix(api): prevent HITL pause from aborting workflow resume by @Success6666 in https://github.com/langgenius/dify/pull/39485
- fix: open inline agent editor from checklist warnings by @iamjoel in https://github.com/langgenius/dify/pull/39781
- test: use SQLite in Langfuse traces by @asukaminato0721 in https://github.com/langgenius/dify/pull/38985
- test: use SQLite in Opik traces by @asukaminato0721 in https://github.com/langgenius/dify/pull/38987
- test: use SQLite sessions in core tools by @asukaminato0721 in https://github.com/langgenius/dify/pull/39094
- test: move RAG pipeline import coverage to unit tests by @asukaminato0721 in https://github.com/langgenius/dify/pull/38938
- test: use sqlite3 session in test_billing by @asukaminato0721 in https://github.com/langgenius/dify/pull/38722
- test: use sqlite3 session in test_factory by @asukaminato0721 in https://github.com/langgenius/dify/pull/38731
- test: use sqlite3 session in test_trial by @asukaminato0721 in https://github.com/langgenius/dify/pull/38732
- test: use sqlite3 session in test_workflow_node_execution_truncation by @asukaminato0721 in https://github.com/langgenius/dify/pull/38734
- test: use SQLite sessions in tasks by @asukaminato0721 in https://github.com/langgenius/dify/pull/39076
- fix(workflow): provide default values for AgentNodeData fields (#39743) by @loulanyue in https://github.com/langgenius/dify/pull/39754
- refactor(web): localize model load balancing modal state by @lyzno1 in https://github.com/langgenius/dify/pull/39789
- fix(chat): derive themes per chat root by @lyzno1 in https://github.com/langgenius/dify/pull/39790
- refactor(web): localize dataset external API state by @lyzno1 in https://github.com/langgenius/dify/pull/39791
- refactor(web): remove app log drawer context by @lyzno1 in https://github.com/langgenius/dify/pull/39792
- refactor(web): internalize trigger limit modal state by @lyzno1 in https://github.com/langgenius/dify/pull/39794
- refactor(web): localize retrieval method query by @lyzno1 in https://github.com/langgenius/dify/pull/39795
- refactor(web): remove configuration mitt context by @lyzno1 in https://github.com/langgenius/dify/pull/39796
- fix(web): isolate MCP card action overlays by @Jingyi-Dify in https://github.com/langgenius/dify/pull/39797
- feat: add upload size guidance and validation for agent files and skills by @iamjoel in https://github.com/langgenius/dify/pull/39798
- refactor(web): remove dead dataset operator context state by @lyzno1 in https://github.com/langgenius/dify/pull/39800
- refactor(web): remove stale header maximize state by @lyzno1 in https://github.com/langgenius/dify/pull/39801
- refactor(web): narrow app list context by @lyzno1 in https://github.com/langgenius/dify/pull/39802
- fix(ui): align select trigger focus ring by @lyzno1 in https://github.com/langgenius/dify/pull/39804
- feat: make skill package upload size limit configurable by @linw1995 in https://github.com/langgenius/dify/pull/39799
- test: use SQLite sessions in app DSL service tests by @escape0707 in https://github.com/langgenius/dify/pull/39803
- test: use caplog for telemetry error logging by @EvanYao826 in https://github.com/langgenius/dify/pull/39722
- refactor(dify-ui): govern public component APIs by @lyzno1 in https://github.com/langgenius/dify/pull/39806
- feat: change api/v1/plugins/download to api/v1/plugins/download-url by @fatelei in https://github.com/langgenius/dify/pull/39811
- refactor(web): align Base UI composition contracts by @lyzno1 in https://github.com/langgenius/dify/pull/39820
- docs: remove trailing whitespace in docker/README.md by @xiaoyaoqilan in https://github.com/langgenius/dify/pull/39808
- chore(api): consolidate chained .where() calls into single calls by @MannXo in https://github.com/langgenius/dify/pull/39819
- test: exercise credential visibility with SQLite by @escape0707 in https://github.com/langgenius/dify/pull/39827
- fix: refresh mcp server code by app id by @zhangx1n in https://github.com/langgenius/dify/pull/39828
- docs: fix typos in api comments and prompt example by @iridescentWen in https://github.com/langgenius/dify/pull/39838
- fix(api): silence opentelemetry.context error reports to Sentry on cloud by @MRZHUH in https://github.com/langgenius/dify/pull/39841
- fix(workflow): remap snippet references by @JzoNgKVO in https://github.com/langgenius/dify/pull/39843
- feat: prioritize configured tools in the agent prompt picker by @iamjoel in https://github.com/langgenius/dify/pull/39850
- fix(web): skip auth validation for local file datasource by @hjlarry in https://github.com/langgenius/dify/pull/39856
- fix(w
These notes run past the length kept in the archive. The rest is on the publisher’s page.