Skip to content

refactor(web): migrate handwritten console API calls to the generated oRPC contract - #44169

Merged
hyoban merged 68 commits into
mainfrom
refactor/web-orpc-console-calls
Oct 16, 2026
Merged

hyoban merged 68 commits into
mainfrom
refactor/web-orpc-console-calls

Conversation

@hyoban

@hyoban hyoban commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

Summary

Replace the handwritten get / post / put / patch / del console calls in web/ with the generated console contract (consoleQuery / consoleClient from @/service/console). The work is split into one commit per module. Where backend endpoints read query params or bodies that their OpenAPI docs did not declare, the docs were fixed so the generated contract types them.

Migrated

  • Logs, annotations, agent logs: use-log, annotation, log messages, and agent thoughts.
  • Model providers: credentials, default model, enable/disable, and parameter rules.
  • Workspace: members, RBAC roles, workspace info, and permission.
  • Small modules: publish, Notion import, and hit testing.
  • Account: auth flows, setup/init, account deletion, email change, and ownership transfer (service/common).
  • service/use-common: everything except one broken flow, listed below.
  • Datasets and knowledge: service/datasets and service/knowledge/use-{dataset,document,segment,metadata,create-dataset}.
  • Plugins: use-plugins (install, upgrade, upload, permission and auto-upgrade settings, debugging key, tasks, dynamic options) and plugins.ts.
  • Tools: tools.ts and use-tools.ts (built-in, API, workflow and MCP tools, MCP servers, app triggers).
  • RAG pipelines and datasources: use-pipeline and use-datasource.
  • Workflow draft calls: node run, inspect variables, last run, system/conversation variables, and variable reset/edit/delete. These go per flow type (app, RAG pipeline, snippet) through a typed callByFlowType helper.
  • Debug: chat history and suggested questions (now with a real AbortSignal), rule and instruction generation, prompt templates, and message detail.

Some UI types narrow fields that backend response models declare as plain strings or loose records: enum-like statuses, doc_form, plugin source, locale label maps. Those responses are narrowed once at the service boundary with a documented narrowResponse helper (service/console/narrow-response.ts) instead of retyping every consumer. Where a UI type was simply wrong, it now aliases or follows the generated type.

Bugs and mismatches the contract surfaced

  • Schema-name collisions. Flask-RESTX registered Pydantic schemas by bare class name, so same-named types overwrote each other. Registration now fails on a conflicting name.
  • Annotation batch delete. Array params were serialized with indexed keys, so a batch delete could clear all annotations. Repeated-key rules now cover annotations and document batch delete/status.
  • 204 responses. Deleting an external knowledge API and retrying error docs return 204. The UI only worked because the legacy fetch layer rewrote 204 into {result: 'success'}; callers now treat a resolved request as success.
  • Dataset update body. The type declared partial_member_list as string[], but the UI sends {user_id, role} objects. It now uses the generated type.
  • Removed endpoints still called: /tool-provider/model/tools (the backend has no model tool provider type; the fetch and the isModel prop chain were removed).
  • Missing required fields:
    • Plugin dynamic options require provider_type, which callers could leave unset. It now defaults to tool.
    • Document creation requires indexing_technique.
    • Workflow tool requests carry label.
    • MCP provider requests carry server_identifier.
  • Wrong UI types: member roles and timestamps, model parameter required, Notion icons without a type (now dropped), and icon_background nullability.
  • Response fields the backend never sends: workflow log read_at (the unread dot always renders; behaviour kept) and the conversation introduction, which lives at the top level.
  • Pipeline conversation variables. The UI queried them, but RAG pipelines have no such endpoint. The query now resolves empty for pipelines.

Not migrated (intentionally)

  • Handwritten flows that don't match the backend:
    • The forgot-password token flow: the endpoint requires email and code.
    • The legacy built-in tool credential modal: the schema moved, credentials became a list, and update/delete need a credential_id. Only non-plugin providers reach it, and none of them need credentials.
  • Hooks that take prebuilt URL strings: workflow draft fetch/sync, run history, run detail and tracing, version history, publish/restore/delete, stop run, human-input step forms, the plugin-auth credential registry (plugin-auth/hooks/use-get-api), and the one-step-run iteration/loop endpoints. Each needs its call sites redesigned around ids instead of URLs.
  • Streaming, binary and multipart transfers: SSE runs, file and skill uploads, the documents zip, skill blob downloads, and annotation batch import.
  • Marketplace calls: they hit the external marketplace API, and its hand-written contract does not cover these endpoints.
  • Public web-app APIs: share.ts, sso.ts, and the web-app login helpers in common.ts. They need a web-app contract client.
  • Endpoints without a contract: enterprise web-app access control, /x-version and /x-env.

Follow-ups

  • Declare literal types on backend response models (statuses, doc_form, plugin source, label maps) so narrowResponse call sites can be dropped.
  • Make fields with defaults required in response schemas (json_schema_serialization_defaults_required).
  • Redesign the URL-string registries listed above around ids so they can use the contract.
  • Add a web-app (public API) oRPC client for share.ts and the web-app helpers.
  • Rebuild or remove the legacy built-in tool credential modal.

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've verified the change and added or updated tests where meaningful regression risk justifies coverage.
  • I've updated the documentation accordingly.
  • I ran make lint && make type-check (backend) and vp staged (frontend) to appease the lint gods

Verification per commit: tsc --noEmit, vp lint, knip, the spec files that import each migrated module, and the touched backend controller tests. The full web suite was not run locally.

🤖 Generated with Claude Code

hyoban and others added 2 commits October 15, 2026 22:10
Pydantic models were registered into each Flask-RESTX namespace by bare
class name, so two different types with the same name silently overwrote
each other and corrupted the generated @dify/contracts types (e.g. the
conversation `ModelConfig` was replaced by the LLM-generator one).

- `_register_json_schema` now tracks the source type and schema of every
  component and raises `SchemaNameCollisionError` when a name (compared
  the way client generators normalize it, so `JSONValue`/`JsonValue`
  count as one) is reused by another type or by the same type with a
  different shape.
- Nested `$defs` are named by a custom generator that keeps names stable
  across schemas; `SCHEMA_NAME_OVERRIDES` gives third-party/core types
  that share a class name (graphon I18nObject, plugin dependency
  Github/Marketplace/Package, knowledge FileInfo) unique names.
- Renamed controller-local duplicates (ChatMessageExplorePayload,
  RagPipelineDraftWorkflowRunPayload, RagPipelineWorkflowRunQuery,
  HumanInputFormPreviewSubmitPayload, AppMessageFeedbackPayload,
  WebhookTriggerQuery, DatasourceContentPreviewPayload,
  SnippetPublishWorkflowPayload, SnippetWorkflowRunQuery,
  ConversationModelConfig, Any/Recursive/ShallowJSONValue,
  CompletionParamValue) and deduplicated identical response models.
- Response-only models are no longer also registered in validation mode.
- Regenerated contracts; the log ModelInfo component now owns its prop
  type instead of borrowing the overwritten generated `ModelConfig`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the forwarding hooks in service/use-log.ts with direct
consoleQuery calls at each call site and type the log pages with the
generated contract instead of handwritten DTOs.

- Conversation list/detail, workflow logs, pause details and annotation
  count now use consoleQuery queryOptions; use-log.ts is removed.
- Untyped JSON fields (model_config.model, user_input_form, details) are
  narrowed at the boundary in list-utils instead of being read as any.
- Read the conversation introduction from the top-level field the API
  actually returns, and skip null backstage input URLs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. web This relates to changes on the web. labels Oct 15, 2026
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-10-15 22:12:54.717570585 +0000
+++ /tmp/pyrefly_pr.txt	2026-10-15 22:12:46.133473321 +0000
@@ -1576,6 +1576,8 @@
    --> tests/unit_tests/commands/test_upgrade_db.py:128:5
 ERROR No attribute `MethodView` in module `builtins` [missing-attribute]
  --> tests/unit_tests/controllers/common/test_fields.py:8:5
+ERROR No matching overload found for function `pydantic.main.create_model` called with arguments: (Literal['UserModel'], __module__=Literal['other_module'], **dict[str, tuple[type[Any], EllipsisType]]) [no-matching-overload]
+   --> tests/unit_tests/controllers/common/test_schema.py:133:24
 ERROR Object of class `int` has no attribute `lower` [missing-attribute]
    --> tests/unit_tests/controllers/console/app/test_annotation_security.py:237:38
 ERROR Object of class `int` has no attribute `lower` [missing-attribute]

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Pyrefly Type Coverage

Metric Base PR Delta
Type coverage 75.04% 75.04% -0.01%
Strict coverage 74.71% 74.71% -0.01%
Typed symbols 61,998 62,004 +6
Untyped symbols 20,710 20,719 +9
Modules 3796 3797 +1

@ghfind-review ghfind-review Bot added the review: top ghfind author score; see https://ghfind.com label Oct 15, 2026
@codecov

codecov Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.25424% with 28 lines in your changes missing coverage. Please review.
✅ Project coverage is 89.10%. Comparing base (8c5eb6d) to head (c08553f).
⚠️ Report is 5 commits behind head on main.

Files with missing lines Patch % Lines
...ole/datasets/rag_pipeline/rag_pipeline_workflow.py 86.20% 4 Missing ⚠️
web/app/components/app/log/list.tsx 86.20% 4 Missing ⚠️
...pp/account/(commonLayout)/delete-account/state.tsx 0.00% 3 Missing ⚠️
...p/access-point/built-in-access-points/mcp-card.tsx 70.00% 3 Missing ⚠️
...figuration/dataset-config/settings-modal/index.tsx 83.33% 3 Missing ⚠️
web/app/components/app/log/list-utils.ts 96.34% 3 Missing ⚠️
...nts/app/annotation/view-annotation-modal/index.tsx 85.71% 2 Missing ⚠️
.../app/components/base/agent-log-modal/tool-call.tsx 75.00% 2 Missing ⚠️
...i/controllers/console/snippets/snippet_workflow.py 66.66% 1 Missing ⚠️
web/app/components/app/annotation/list.tsx 80.00% 1 Missing ⚠️
... and 2 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #44169      +/-   ##
==========================================
+ Coverage   88.94%   89.10%   +0.16%     
==========================================
  Files        5304     5305       +1     
  Lines      326595   326570      -25     
  Branches    63840    64242     +402     
==========================================
+ Hits       290497   291005     +508     
+ Misses      30900    30371     -529     
+ Partials     5198     5194       -4     
Flag Coverage Δ
api 88.57% <98.32%> (+0.04%) ⬆️
cli 90.56% <ø> (ø)
dify-ui 92.25% <ø> (ø)
web 89.70% <92.09%> (+0.35%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

hyoban and others added 12 commits October 15, 2026 22:29
…ontract

Call consoleClient directly for annotation settings, list, CRUD, export,
hit histories and job status, and type annotation items with the
generated contract. Only the multipart batch import stays on the
handwritten request layer.

The bulk delete endpoint now documents its repeated `annotation_id`
query, and the console client sends it as repeated keys: without them the
API receives no IDs and clears every annotation of the app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… contract

Chat messages, feedback, log annotations and agent log detail now call
consoleClient directly. The log chat formatter and agent log modal read
the generated response types; untyped JSON fields are narrowed where
they enter the chat UI types.

The agent log response schema now matches what the service returns:
`tool_label` is a name or i18n labels, `tool_icon` a URL or emoji icon.
The never-sent `meta.error` is no longer read, and a missing annotation
account no longer crashes the log detail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ract

Remove the forwarding hooks in service/use-models.ts. Credential
queries and mutations use consoleQuery/consoleClient where they are
consumed; useAuthService keeps owning the provider-vs-model dispatch.

The load balancing modal normalizes the generated response into its form
types at one boundary. The model credential query is skipped without a
model instead of requesting `model=undefined`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ace permission

Move the remaining calls of service/apps.ts, knowledge/use-import.ts,
knowledge/use-hit-testing.ts and use-workspace.ts to the console
contract at their call sites, and delete those modules.

- Hit testing types now alias the generated response; the record never
  had a `content` copy of the segment, and the query has no tsne position.
- Notion pre-import pages are normalized once in the query `select`;
  top-level pages without a parent are treated as `root`.
- RETRIEVE_METHOD drops `invertedIndex`, which the API never accepts or
  returns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e contract

Remove service/access-control/use-{member,workspace}-roles.ts and
useMembers. Consumers use consoleQuery directly; the role and member
invalidations those hooks owned now live in query-policies.

Backend contract fixes this depended on:
- RBAC role list/create/update/copy and role-member list now document
  their query parameters and request bodies, and the member list and
  member role endpoints document `language`; previously the generated
  client could not send them.
- Member `roles` is typed as `{id, name}` summaries, which is what the
  endpoint returns, instead of a free-form map. The web previously typed
  them as full roles and as ISO timestamps; both were wrong.

A shared role-list options factory normalizes the loosely typed role DTOs
into the UI role type. test/console/operation-hooks lets specs answer
console operations by path while other queries stay real.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ervice/common

Sign-in, setup/init, forgot/reset password, email-code login, invitation
activation, account deletion, email change, ownership transfer, member
removal, workspace rename, default model, model enable/disable and the
compliance download now call the console contract directly. Only the
web-app (public API) helpers and remote file upload remain in common.ts.

The generated response types exposed unreachable branches: console login
never returns an access token in the body, and email-code verification
and password-reset requests raise errors instead of returning failure
codes, so those branches are removed. Default model and parameter-rule
responses are normalized where they enter the model provider UI types.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e console contract

File upload limits, signup mail flow, account init, invitation checks,
file preview, schema definitions, code-based extensions, structured
output generation, notion binding and model parameter rules now use
consoleQuery at their call sites; use-common.ts keeps only logout and
one documented exception.

Backend contract fixes:
- Code-based extension responses list their items instead of `Any`.
- Structured output generation documents its `{output, error}` body.

Notes:
- The forgot-password token check is left on the handwritten request: the
  endpoint requires `email` and `code`, which the token-only link flow
  does not have, so that request cannot succeed as written.
- Model provider details keep a feature-owned options factory with a
  documented cast; its credential schemas are untyped JSON in the API.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t migration

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Vinext bundle analysis

JS gzip: 🟢 −4.65 KiB (−0.05%) · CSS gzip: ⚪ No change

All client output Base gzip → Merge gzip Gzip change
JS 9937.20 KiB → 9932.55 KiB 🟢 −4.65 KiB (−0.05%)
CSS 332.39 KiB → 332.39 KiB ⚪ No change

Entry changes: 🟠 5 increased · 🟢 166 decreased (gzip).

Largest entry changes

Top 5 by absolute gzip delta. Static dependencies overlap; do not sum entries.

Source entry Base gzip → Merge gzip Gzip change
app/components/workflow/nodes/data-source/panel.tsx 1048.83 KiB → 1075.09 KiB 🟠 +26.26 KiB (+2.50%)
app/(shareLayout)/chatbot/[token]/page.tsx 1011.29 KiB → 999.99 KiB 🟢 −11.29 KiB (−1.12%)
app/(shareLayout)/agent/[token]/page.tsx 1035.03 KiB → 1023.76 KiB 🟢 −11.27 KiB (−1.09%)
app/(shareLayout)/chat/[token]/page.tsx 1032.45 KiB → 1021.18 KiB 🟢 −11.27 KiB (−1.09%)
app/(shareLayout)/environment/chat/[token]/page.tsx 1032.45 KiB → 1021.18 KiB 🟢 −11.27 KiB (−1.09%)
Top 20 of 171 changed entries (full paths and raw sizes)
Source entry Base gzip → Merge gzip Gzip change Raw change
dynamic-entry: app/components/workflow/nodes/data-source/panel.tsx 1048.83 KiB → 1075.09 KiB 🟠 +26.26 KiB (+2.50%) 🟠 +99.04 KiB (+2.93%)
dynamic-entry: app/(shareLayout)/chatbot/[token]/page.tsx 1011.29 KiB → 999.99 KiB 🟢 −11.29 KiB (−1.12%) 🟢 −25.76 KiB (−0.81%)
dynamic-entry: app/(shareLayout)/agent/[token]/page.tsx 1035.03 KiB → 1023.76 KiB 🟢 −11.27 KiB (−1.09%) 🟢 −25.53 KiB (−0.78%)
dynamic-entry: app/(shareLayout)/chat/[token]/page.tsx 1032.45 KiB → 1021.18 KiB 🟢 −11.27 KiB (−1.09%) 🟢 −25.53 KiB (−0.78%)
dynamic-entry: app/(shareLayout)/environment/chat/[token]/page.tsx 1032.45 KiB → 1021.18 KiB 🟢 −11.27 KiB (−1.09%) 🟢 −25.53 KiB (−0.78%)
dynamic-entry: app/components/base/chat/chat-with-history/index.tsx 1029.96 KiB → 1018.69 KiB 🟢 −11.27 KiB (−1.09%) 🟢 −25.53 KiB (−0.78%)
dynamic-entry: app/components/explore/try-app/app/index.tsx 1039.61 KiB → 1028.36 KiB 🟢 −11.25 KiB (−1.08%) 🟢 −25.46 KiB (−0.77%)
dynamic-entry: app/components/datasets/create/index.tsx 683.72 KiB → 672.87 KiB 🟢 −10.85 KiB (−1.59%) 🟢 −25.42 KiB (−1.17%)
dynamic-entry: app/components/datasets/documents/detail/index.tsx 815.96 KiB → 805.26 KiB 🟢 −10.70 KiB (−1.31%) 🟢 −24.80 KiB (−0.93%)
dynamic-entry: app/components/datasets/create-from-pipeline/index.tsx 689.25 KiB → 678.65 KiB 🟢 −10.60 KiB (−1.54%) 🟢 −25.70 KiB (−1.17%)
dynamic-entry: app/components/app-sidebar/dataset-detail-sidebar.tsx 539.57 KiB → 529.25 KiB 🟢 −10.32 KiB (−1.91%) 🟢 −25.97 KiB (−1.52%)
dynamic-entry: app/components/app/log-annotation/index.tsx 1060.35 KiB → 1050.24 KiB 🟢 −10.11 KiB (−0.95%) 🟢 −22.65 KiB (−0.68%)
dynamic-entry: app/components/datasets/settings/form/index.tsx 662.80 KiB → 652.79 KiB 🟢 −10.01 KiB (−1.51%) 🟢 −22.88 KiB (−1.09%)
dynamic-entry: app/components/datasets/hit-testing/index.tsx 666.52 KiB → 656.58 KiB 🟢 −9.94 KiB (−1.49%) 🟢 −23.37 KiB (−1.11%)
dynamic-entry: app/components/explore/try-app/index.tsx 1340.34 KiB → 1331.18 KiB 🟢 −9.17 KiB (−0.68%) 🟢 −19.06 KiB (−0.44%)
dynamic-entry: app/components/datasets/documents/create-from-pipeline/index.tsx 889.03 KiB → 879.88 KiB 🟢 −9.15 KiB (−1.03%) 🟢 −21.87 KiB (−0.77%)
dynamic-entry: app/components/datasets/documents/detail/settings/index.tsx 825.91 KiB → 817.02 KiB 🟢 −8.90 KiB (−1.08%) 🟢 −21.40 KiB (−0.81%)
dynamic-entry: app/components/app/configuration/index.tsx 1386.85 KiB → 1378.29 KiB 🟢 −8.57 KiB (−0.62%) 🟢 −17.05 KiB (−0.38%)
dynamic-entry: app/components/workflow/panel/chat-record/index.tsx 1411.79 KiB → 1403.23 KiB 🟢 −8.56 KiB (−0.61%) 🟢 −15.89 KiB (−0.35%)
dynamic-entry: app/components/workflow/panel/debug-and-preview/index.tsx 1418.44 KiB → 1409.89 KiB 🟢 −8.55 KiB (−0.60%) 🟢 −15.89 KiB (−0.35%)
📦 3 package attribution changes (uncompressed modules)

Showing 3 of 3, ordered by absolute module-size delta.

Package Base Merge Δ
qs 40.48 KiB 0.00 KiB 🟢 −40.48 KiB (−100.00%)
@nolyfill/side-channel 1.37 KiB 0.00 KiB 🟢 −1.37 KiB (−100.00%)
es-define-property 0.28 KiB 0.00 KiB 🟢 −288 B (−100.00%)
Measurement details and build revisions

Base: 8c5eb6d16e97edad3c84e0b7d25408e40fbd8a7a · Merge: 09f8494641e840cb6d7f7d4a8c896c9812ee3a4f
Vinext: 1.1.0 → 1.1.0; Rolldown: 1.2.12 → 1.2.12

Raw JS change: 🟠 +2.38 KiB (+<0.01%) · Raw CSS change: ⚪ No change

🟠 Increase · 🟢 Decrease · ⚪ Unchanged. Colors indicate direction, not a performance budget verdict. Percentages use the base size.

Entries follow only static edges in the official Rolldown chunk graph, deduplicating shared files. Dynamic entries are measured when loaded; they are not page first-load metrics. Entry totals overlap and must not be summed.
Package attribution sums module sizes reported by Rolldown, not compressed emitted bytes. Gzip totals are measured per emitted file. This is Vinext output, not Next.js/Turbopack output.
Report only: increases do not fail this check. Missing or incompatible analysis data does.

Download base/merge snapshots and official Rolldown analysis reports.

Comparison: event base SHA vs the tested merge commit at GITHUB_SHA (PR or merge queue).

hyoban and others added 8 commits October 16, 2026 00:50
…nsole contract

- service/datasets.ts and service/knowledge/use-{dataset,document,segment,metadata,create-dataset}
  call consoleClient; knowledge UI DTOs are narrowed at the service boundary
- document query params (list, batch delete, batch status) and dataset query history
  pagination documented on the backend; repeated-key rules for document_id
- 204 endpoints (delete external API, retry error docs) no longer rely on the legacy
  {result: 'success'} rewrite
- dataset update body, notion info and pre-processing rules use generated request types
- drop unused qs dependency

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sole contract

- install/upgrade/upload, permission and auto-upgrade settings, debugging key, tasks and
  dynamic options call consoleClient; plugin UI DTOs are narrowed at the boundary
- extract the boundary narrowing helper to service/console/narrow-response
- dynamic options default provider_type to 'tool' (the backend requires it)
- marketplace (external API) calls stay on getMarketplace/postMarketplace

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- service/tools.ts and service/use-tools.ts call consoleClient; tool UI DTOs are narrowed
  at the boundary
- remove fetchModelToolList and the isModel prop: the backend has no model tool provider
  type and /tool-provider/model/tools does not exist
- keep the legacy built-in credential flow handwritten: it no longer matches the backend
  (schema moved, credentials became a list, update/delete need credential_id)
- MCP provider payloads require server_identifier and send icon_background without null;
  MCP server payloads require parameters; workflow tool requests carry label
- drop the unused _tools_util helper

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ontract

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…vice calls

- draft node runs, inspect variables, last run, system/conversation variables, variable
  reset/edit/delete call the console contract per flow type via callByFlowType
- block default configs, environment variables, human input form submission and email
  delivery tests call consoleClient
- debug: suggested questions and conversation messages pass an AbortSignal; rule and
  instruction generation, prompt templates and message detail use the contract
- plugins: upgrade, GitHub upload and task status use the contract
- RAG pipelines have no conversation variables, so that query resolves empty for them
- hooks that take prebuilt flow URLs (run history, config, version history, publish,
  restore, delete) stay on the legacy client

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- type the empty form_schema list in the code-based extension test (pyrefly)
- e2e document list queries pass numeric page/limit, now typed by the contract
- drop the unused legacy put helper and InitValidateStatusResponse type
- route the auto-upgrade settings dialog spec through the console transport

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hyoban and others added 6 commits October 16, 2026 10:27
Remove narrowResponse from service/tools.ts. Collection and tool lists and
the workflow tool detail go through the existing tool selectors, and the API
schema parse and custom provider detail get their own: parsed operations keep
an empty label when the schema gives no id or summary, and stored credentials
are read by their auth type, which a provider saved without one does not
have. The custom tool editor state drops the provider id the detail never
returned and stores the parsed operations it actually holds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rceInfo

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove narrowResponse from service/plugins.ts and service/use-plugins.ts.
Install, upgrade, upload and task responses use the generated types: the
plugin task and status UI types derive from the contract and add only the
task id the task list attaches, which the task list query now attaches too
instead of assuming it. Dynamic parameter options are mapped to form options,
with untranslated labels falling back to en_US as renderI18nObject does.

The uploaded package card comes from a mapper for the contract manifest
(pluginDeclarationToCardPluginProps), and plugin card text drops untranslated
locales through toPluginText.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…us/dify into refactor/web-orpc-console-calls
Remove the last narrowResponse callers in service/debug.ts and delete the
helper. The rule generator response is a typed model, and the prompt template
response declares its chat and completion configs and the stop words the
templates carry, which the old untyped model dropped. The instruction
generator answers with a rule, code or an LLM-written object depending on the
target, so its result is read through a guard.

Document settings no longer cast stored source info: step two takes the file
and Notion page fields it reads (StepTwoFile, StepTwoNotionPage), and the
crawl options are read with type checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- rule-generate spec stubs a rule config matching RuleGenerateResponse
- prompt template spec types its parameter for pyrefly
- preview picker spec expects the id/name/extension picker value

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hyoban
hyoban added this pull request to the merge queue Oct 16, 2026
Merged via the queue into main with commit 7cafd65 Oct 16, 2026
59 checks passed
@hyoban
hyoban deleted the refactor/web-orpc-console-calls branch October 16, 2026 03:53
hyoban added a commit that referenced this pull request Oct 16, 2026
Adopt main's generated oRPC console calls (#44169) in branch code: the deleted
use-dataset/use-datasource/useMembers hooks become consoleQuery queries, the
KnowledgeFS dataset list, scope dialog and card header keep their branch
behavior, and branch specs mock the new operations instead of the removed
modules. Contracts, OpenAPI markdown and oxlint suppressions are regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Awhitter added a commit to Awhitter/dify that referenced this pull request Oct 25, 2026
* feat(agent): stream Agent V2 text output in plain runs (langgenius#43986)

Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* refactor(api): read provider configuration cache rows via pydantic (langgenius#44055)

* refactor(web): use Select for the Studio app type filter (langgenius#44070)

* refactor(web): model app settings with form primitives (langgenius#44073)

* fix(dify-ui): show destructive colors on keyboard focus (langgenius#44079)

* ci: require TypeBase for new models (langgenius#44087)

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: enable Ruff E721 (langgenius#44096)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff SIM210 (langgenius#44095)

Co-authored-by: Codex <codex@openai.com>

* fix(web): align API key dialog lifecycle and copy behavior (langgenius#44077)

* test(dify-ui): wait for time picker visibility before axe scan (langgenius#44105)

* ci: enable Ruff B006 (langgenius#44099)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff FURB152 (langgenius#44091)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff E711 (langgenius#44088)

Co-authored-by: Codex <codex@openai.com>

* fix(knowledge): only batch-enable segments whose indexing completed (langgenius#44017)

* fix(nodejs-client): preserve SSE field value whitespace (langgenius#44083)

* fix(api): stage hit-testing query log with flush instead of committing caller session (langgenius#44084)

* fix(dify-agent): treat a confirmed-missing Home Snapshot as a success on Enterprise delete (langgenius#44085)

Co-authored-by: D41910 <d41910@users.noreply.github.com>

* fix(nodejs-client): override default headers case-insensitively (langgenius#44090)

* fix(nodejs-client): allow empty keyword filters in list APIs (langgenius#44097)

* fix(nodejs-client): replace stale user fields in native upload forms (langgenius#44120)

* fix(api): accept MCP protocol version 2025-11-25 (langgenius#44066)

* fix(api): compare datasource credentials as JSON on MySQL (langgenius#44039)

* fix(structured_output): skip reasoning JSON when selecting output (langgenius#44005)

Co-authored-by: crazywoola <427733928@qq.com>

* ci: enable Ruff E722 (langgenius#44098)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff UP032 (langgenius#44092)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff B905 (langgenius#44094)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff SIM113 (langgenius#44102)

Co-authored-by: Codex <codex@openai.com>

* fix(deps): upgrade Next.js to 16.4.1 for October security fixes (langgenius#44127)

* docs: record overlay ownership and focus lessons (langgenius#44126)

* refactor(workflow): use route identity and Console Query for webhook URLs (langgenius#44135)

* refactor(workflow): own preview chat requests with Console Query (langgenius#44136)

* perf(rag): reduce knowledge retrieval post-processing overhead (langgenius#43665)

* fix(api): fix typos in logger warning and docstrings (langgenius#44134)

* refactor(api): enable strict typing for enterprise telemetry exporter tests (langgenius#44138)

* refactor(api): enable strict typing for prompt transform tests (langgenius#44139)

* ci: enable Ruff TID252 (langgenius#44108)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff B026 (langgenius#44100)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff SIM103 (langgenius#44110)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff FURB113 (langgenius#44109)

Co-authored-by: Codex <codex@openai.com>

* refactor(tools): remove redundant nested cast in MCP tool (langgenius#44132)

* refactor(api): use Pydantic to validate crawl cache key (langgenius#44131)

* fix(mcp): collect all tool discovery pages (langgenius#43842)

* fix(deps): override fflate to 0.7.5 for CVE-2026-45820 (langgenius#44148)

* refactor(web): let layouts own viewport height instead of root h-full chain (langgenius#44143)

* refactor(web): centralize AppIcon data and Avatar rendering (langgenius#44149)

* fix(agent): fail closed on Landlock errors and require local tokens (langgenius#44152)

* chore(deps): bump mako from 1.3.12 to 1.4.2 in /api (langgenius#43607)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump multidict from 6.7.0 to 6.9.1 in /api (langgenius#43610)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump fsspec from 2026.3.0 to 2026.6.0 in /dify-agent (langgenius#43606)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump oauthlib from 3.3.1 to 4.0.0 in /api (langgenius#43257)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump pydantic-ai-slim from 2.31.0 to 2.53.0 in /api (langgenius#43725)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci: enable Ruff E712 (langgenius#44114)

Co-authored-by: Codex <codex@openai.com>

* refactor: migrate app tracing queries and harden monitoring configuration (langgenius#44150)

* ci: enable Ruff SIM108 (langgenius#44113)

Co-authored-by: Codex <codex@openai.com>

* refactor(api): remove redundant casts in tencent trace unit tests (langgenius#44158)

* fix(api): preserve timestamp ties in message pagination (langgenius#44023)

Co-authored-by: mac <mac@macdeMacBook-Pro.local>

* fix(web): keep the value selector of a Code node input when regenerating code (langgenius#44075)

* fix(e2e): share sandbox auth token across managed runtimes (langgenius#44164)

* chore: remove KnowledgeFS and New Knowledge from main (langgenius#44163)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* ci: enable Ruff SIM105 (langgenius#44112)

Co-authored-by: Codex <codex@openai.com>

* refactor(web): retire the app detail store in favour of the query cache (langgenius#44166)

* fix(api): let a removed active member sign in with a re-invite (langgenius#43667)

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Stream <Stream_2@qq.com>

* refactor(web): clarify App modes and scope workflow editor resources (langgenius#44171)

* chore: mark generated files as linguist-generated (langgenius#44180)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(api): let agents build, configure and ship Dify apps over openapi (langgenius#43067)

* ci: enable Ruff B007 (langgenius#44107)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff F821 (langgenius#44101)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff UP007 (langgenius#44106)

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: enable Ruff N806 (langgenius#44116)

Co-authored-by: Codex <codex@openai.com>

* fix: accumulate workflow elapsed time across resumptions (langgenius#44161)

* refactor(web): migrate handwritten console API calls to the generated oRPC contract (langgenius#44169)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* chore(deps): bump unstructured from 0.24.0 to 0.24.1 in /dify-agent (langgenius#44189)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(web): normalize collapsible indicator rotation (langgenius#44193)

* fix(workflow): generate template-compatible snippet node IDs (langgenius#43838)

* fix(api): return protocol errors for unsupported MCP requests (langgenius#44197)

* fix(api): align hosted moderation provider validation (langgenius#44200)

* feat(api): add inner API for enterprise admin app list and detail (langgenius#44044)

Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix(dify-ui): let portal order stack overlays so nested modals block clicks (langgenius#44214)

* fix(nodejs-client): collect workflow text_chunk and apply message_replace in toText (langgenius#44177)

* fix(rag): preserve newlines in recursive character fallback (langgenius#44179)

* refactor(web): remove unnecessary type assertions with a migration-only tsslint rule (langgenius#44219)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* refactor: remove redundant TypeScript type aliases (langgenius#44225)

* refactor(web): replace straightforward explicit any types (langgenius#44228)

* refactor(dify-ui): give AlertDialog a header part and design defaults (langgenius#44223)

Co-authored-by: Claude <noreply@anthropic.com>

* refactor(web): remove unnecessary use prefixes (langgenius#44231)

* fix(web): clear Storybook and file preview lint suppressions (langgenius#44233)

* refactor(web): replace explicit any in test fixtures and mocks (langgenius#44235)

* refactor(dify-ui): compose dialogs from the Design Kit anatomy (langgenius#44221)

* refactor(web): exercise real frontend behavior in tests (langgenius#44243)

* chore(web): prefer vinext for frontend development (langgenius#44246)

* chore(contracts): upgrade @hey-api/openapi-ts to 0.99.0 (langgenius#44247)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(dify-ui): scroll dialog bodies and give AlertDialog a body (langgenius#44248)

Signed-off-by: yyh <yuanyouhuilyz@gmail.com>
Co-authored-by: Stephen Zhou <hi@hyoban.cc>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): align app and agent export feedback (langgenius#44251)

* refactor(web): migrate Notion page preview to Console Query (langgenius#44252)

* test(web): include untested sources in coverage (langgenius#44254)

* test(web): replace low-value suites with behavioral coverage (langgenius#44260)

* fix(api): preserve published triggers on draft sync (langgenius#44068)

Co-authored-by: mac <mac@macdeMacBook-Pro.local>

* fix: don't stringify list values for union-typed MCP tool parameters (langgenius#44182)

Co-authored-by: Stream <Stream_2@qq.com>

* fix(cli): observe SSE read failures while consumers process events (langgenius#43943)

Co-authored-by: huyengiang101086-spec <270684046+huyengiang101086-spec@users.noreply.github.com>

* fix(skills): preserve PPTX presentation slide order (langgenius#43893)

Co-authored-by: LimbC-C <329404569+LimbC-C@users.noreply.github.com>

* fix(dify): retry failed archive deletion instead of reporting success (langgenius#44061)

Co-authored-by: Stream <Stream_2@qq.com>

* refactor(api): enable strict typing for tasks unit tests (langgenius#44255)

* refactor(api): enable strict typing for easy UI app config manager tests (langgenius#44244)

* test(web): consolidate suites around real feature behavior (langgenius#44274)

* fix(web): separate app dialog group and control labels (langgenius#44261)

Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com>

* fix(ops): bind tracing service accounts to the app workspace (langgenius#44208)

* refactor(api): enable strict typing for libs unit tests (langgenius#44276)

* refactor(ui): clarify dialog header close button anatomy (langgenius#44283)

* fix(plugins): align provider overlays and background update feedback (langgenius#44284)

* fix(web): merge parallel tool results into their own agent thoughts (langgenius#43843)

Co-authored-by: Stream <Stream_2@qq.com>

* test(web): exercise real workflow canvas controls and note actions (langgenius#44287)

* test(web): cover node context menu clicks and drop hooks-store facade mocks (langgenius#44288)

* fix(web): label the Notion page search field (langgenius#44290)

* ci: enable Ruff B903 (langgenius#44117)

Co-authored-by: Codex <codex@openai.com>

* refactor(web): migrate Mermaid diagrams to Pele (langgenius#44293)

* fix(tests): satisfy Ruff B903 for hit-test fake (langgenius#44299)

Co-authored-by: mac <mac@macdeMacBook-Pro.local>

* refactor(api): enable strict typing for configs unit tests (langgenius#44294)

Co-authored-by: Asuka Minato <i@asukaminato.eu.org>

* refactor(api): bring vector store provider sources under type checking (langgenius#44237)

Co-authored-by: Asuka Minato <i@asukaminato.eu.org>

* ci: enable Ruff PT011 (langgenius#44122)

Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff E402 (langgenius#44123)

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* refactor: migrate Dataset to TypeBase (langgenius#40817)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>

* ci: enable Ruff F841 (langgenius#44115)

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: honor RTF Unicode fallback lengths in skill attachments (langgenius#43789)

Co-authored-by: LimbC-C <329404569+LimbC-C@users.noreply.github.com>

* chore(deps): bump patch and minor pnpm catalog dependencies (langgenius#44319)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* chore(deps): drop unused postcss-selector-parser overrides (langgenius#43292)

* fix: preserve DOCX paragraph text in skill attachments (langgenius#43718)

Co-authored-by: LimbC-C <329404569+LimbC-C@users.noreply.github.com>

* feat(cli): let agents build Dify apps with difyctl and an embedded skill (langgenius#43819)

* refactor(api): enable strict typing for easy UI dataset and prompt template tests (langgenius#44320)

* fix(api): require a Tencent vector database name and type-check the provider (langgenius#44325)

* fix(web): open command menu instantly with a lighter backdrop (langgenius#44330)

* fix(cli): serialize token file updates (langgenius#44329)

Co-authored-by: mac <mac@macdeMacBook-Pro.local>

* fix(web): parse destructured and multi-line main signatures in Code node (langgenius#44046)

Co-authored-by: Stream <Stream_2@qq.com>

* refactor(web): simplify Mermaid preview layout and interactions (langgenius#44335)

* fix(web): stabilize Logs loading and conversation dialogs (langgenius#44338)

* fix(web): improve app access point accessibility (langgenius#44220)

Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com>

* fix(vdb): restore TiDB on Qdrant full-text query filtering (langgenius#44339)

* fix(web): remove redundant plugin permission success toast (langgenius#44342)

* fix(web): handle default model form submission feedback (langgenius#44345)

* fix(web): save the shown timezone on new schedule trigger nodes (langgenius#43532)

* test(web): exercise variable assignment with real workflow stores (langgenius#44349)

* fix(api): initialize default LLMs during onboarding (langgenius#44350)

* fix: replace str(e) with generic messages in error responses (langgenius#43049)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: enable Ruff B904 (langgenius#44121)

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: hjlarry <hjlarry@163.com>

* refactor(api): enable strict typing for tool encryption tests (langgenius#44348)

* refactor(api): enable strict typing for data source auth tests (langgenius#44347)

* refactor(workflow): adopt Graphon 0.8 execution orchestration (langgenius#40277)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* test(web): verify canvas updates and debounced variable edits (langgenius#44361)

* refactor(api): enable strict typing for file fetcher, common controller and app factory tests (langgenius#44379)

* refactor(api): enable strict typing for unstructured extractor tests (langgenius#44380)

* fix(vdb): balance multi-keyword Qdrant results (langgenius#44352)

Co-authored-by: mac <mac@macdeMacBook-Pro.local>

* fix(cli): accept BOM-prefixed JSON input (langgenius#44386)

Co-authored-by: mac <mac@macdeMacBook-Pro.local>

* chore(deps): bump aiohttp from 3.14.3 to 3.14.4 in /api (langgenius#44387)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Yunlu Wen <yunlu.wen@dify.ai>

* refactor(api): enable strict typing for remaining libs unit tests (langgenius#44388)

* refactor(api): enable strict typing for storage unit tests (langgenius#44389)

* feat: add reusable network access group APIs (langgenius#41025)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: CodingOnStar <hanxujiang@dify.com>
Co-authored-by: hjlarry <hjlarry@163.com>
Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com>
Co-authored-by: yyh <yuanyouhuilyz@gmail.com>

* feat: confirm clearing default models and refresh values on open (langgenius#44354)

Co-authored-by: yyh <yuanyouhuilyz@gmail.com>

* fix(cli): change local YAML files only through a locked update (langgenius#44375)

* chore(i18n): sync translations with en-US (langgenius#44397)

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>

* fix: retain model selector focus after clearing defaults (langgenius#44399)

* fix(dataset): batch segment and document cleanup with retries (langgenius#38519)

Co-authored-by: hjlarry <hjlarry@163.com>

* test(web): exercise workflow actions against real stores (langgenius#44381)

* fix(web): upgrade TanStack Hotkeys and isolate search commands (langgenius#44401)

* fix(web): parse Python Code node parameters with commas (langgenius#44337)

Co-authored-by: mac <mac@macdeMacBook-Pro.local>

* refactor(tooling): centralize lint and format maintenance (langgenius#44404)

* refactor(web): unify app metadata forms and dialog ownership (langgenius#44405)

* refactor(tooling): migrate remaining sources to TypeScript (langgenius#44410)

* fix(web): improve app deploy accessibility (langgenius#44378)

Co-authored-by: yyh <yuanyouhuilyz@gmail.com>

* fix(e2e): seed workspace defaults and refresh post-merge filters (langgenius#44412)

* chore: add frontend code owner backups and refresh coverage (langgenius#44413)

* fix(agent): finalize run as failed when run_started cannot be appended (langgenius#43959)

* refactor(web): use generated oRPC query keys (langgenius#44415)

* fix: keep archive deletion loading until completion (langgenius#44203)

* refactor(web): remove redundant annotation list success toasts (langgenius#44031)

* fix(web): apply log annotations to the displayed branch (langgenius#43238)

* feat: optimize access token ui (langgenius#44422)

* fix(agent): use Redis 6.0-compatible event replay (langgenius#44420)

* test(api): isolate Celery initialization app state (langgenius#44433)

* refactor(web): migrate console API helpers to generated contracts (langgenius#44430)

* refactor(web): query installation bootstrap status (langgenius#44382)

* fix(workflow): track human input forms by execution identity (langgenius#42819)

* refactor(api): enable strict typing for rate limit test fixtures (langgenius#44391)

* refactor(api): enable strict typing for core helper tests (langgenius#44390)

* chore(web): guard handwritten requests with native lint rules (langgenius#44436)

* fix(nodejs-client): reject streamed API errors in toText (langgenius#44199)

Co-authored-by: Stream <Stream_2@qq.com>

* fix(cli): load PowerShell module in rate-limit test (langgenius#44439)

* fix(api): write built-in document metadata in a single format (langgenius#44218)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Stream <Stream_2@qq.com>

* feat(workflow): execute workflow tools as nested containers (langgenius#42820)

Co-authored-by: WH-2099 <wh2099@pm.me>

* feat(workflow): expose authorized nested tool traces (langgenius#42821)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat(workflow): add nested tool trace drilldown (langgenius#42822)

* fix(tracing): exclude called tool internals from external exports (langgenius#42823)

* chore(web): replace deprecated third-party APIs (langgenius#44466)

* fix(plugin): pin daemon dispatches to package identifiers (langgenius#44396)

* fix(web): enforce schema depth limits through nested arrays (langgenius#44295)

* feat: network access group add rbac check (langgenius#44464)

* fix(api): validate builtin tool credentials outside the create lock (langgenius#44371)

Co-authored-by: Stream <Stream_2@qq.com>

* fix(trigger): stop leaking internal exception text from webhook 500 responses (langgenius#44395)

Co-authored-by: Stream <Stream_2@qq.com>

* fix(web): preserve Studio list filters across navigation (langgenius#44429)

Co-authored-by: Stream <Stream_2@qq.com>

* test(web): wait for goto-anything focus (langgenius#44454)

Co-authored-by: mac <mac@macdeMacBook-Pro.local>

* test(web): exercise workflow configuration and controls with real stores (langgenius#44471)

* test(web): exercise workflow controls and access points through real owners (langgenius#44423)

* fix(agent): attribute nested tool activity to its source (langgenius#42824)

* fix(cli): respect cancellation during device authorization retries (langgenius#44315)

Co-authored-by: huyengiang101086-spec <270684046+huyengiang101086-spec@users.noreply.github.com>

* feat(cli): send a folder as one part per file (langgenius#44356)

Co-authored-by: yunlu.wen <yunlu.wen@dify.ai>

* fix(web): handle autofilled Web App login credentials (langgenius#44474)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(api): handle non-object JSON auth error bodies (langgenius#44470)

* refactor: migrate agent models to TypeBase (langgenius#40816)

Co-authored-by: Codex <codex@openai.com>

* refactor(api): type-check vector store provider unit tests (langgenius#44458)

* refactor(api): enable strict typing for utils unit tests (langgenius#44331)

* test(web): replace node action mocks with real canvas behavior (langgenius#44495)

* fix(web): enforce focus style ownership and simplify invite recipients (langgenius#44504)

* fix: improve customization settings accessibility (langgenius#44492)

* fix(web): label workspace default model selectors (langgenius#44500)

* refactor(ui): split toast stories and align app toaster naming (langgenius#44510)

* chore(weaviate): bump bundled Weaviate to 1.39.13 (CVE-2026-111943) (langgenius#44508)

* chore: bump Node.js runtime to 24.22.1 (langgenius#44511)

* feat(tracing): export Agent app and Workflow Agent execution trees (langgenius#44144)

Co-authored-by: yyh <yuanyouhuilyz@gmail.com>

* feat(tracing): configure Agent tracing and link workflow runs to traces (langgenius#44186)

Co-authored-by: Yansong Zhang <916125788@qq.com>

* fix(web): make document metadata panel scrollable (langgenius#43621)

* test: split Build exit scenarios to reduce timeout flakiness (langgenius#44519)

* chore(web): improve Billing settings accessibility (langgenius#44487)

Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com>

* fix(deps): upgrade certifi and pillow (langgenius#44524)

* refactor(api): detach console app trigger management (langgenius#44457)

* refactor(web): highlight markdown code blocks with @pierre/highlights (langgenius#44522)

* fix(api): enforce cloud app quotas on DSL imports (langgenius#44525)

* perf(api): skip saved prompts when loading chat history (langgenius#44521)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* chore: improve Members settings accessibility (langgenius#44484)

* fix(web): preserve inline agent layout and clarify configure ownership (langgenius#44534)

Co-authored-by: hjlarry <hjlarry@163.com>

* fix: improve archived logs accessibility (langgenius#44535)

Co-authored-by: yyh <yuanyouhuilyz@gmail.com>

* fix: improve Preferences accessibility (langgenius#44539)

* fix: improve IP Policies accessibility (langgenius#44548)

* fix: preserve knowledge sidebar when adding files (langgenius#44552)

* fix: improve sort control accessibility and type safety (langgenius#44564)

* chore: type-check with tsrs (langgenius#44562)

* fix(api): stop leaking Redis result connections from fire-and-forget groups (langgenius#44551)

Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(api): upgrade NLTK to 3.10.4 (langgenius#44581)

* feat(agent): edit config prompts through the sandbox CLI (langgenius#44561)

* chore: port Document to TypeBase (langgenius#36084)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Codex <codex@openai.com>

* feat: KnowledgeFS and New Knowledge (langgenius#44165)

Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com>
Co-authored-by: hjlarry <hjlarry@163.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: zhaohao1004 <zhaohao1004@gmail.com>
Co-authored-by: yyh <yuanyouhuilyz@gmail.com>
Co-authored-by: FFXN <lizy@dify.ai>

* refactor: migrate CustomizedSnippet to TypeBase (langgenius#40818)

Co-authored-by: Codex <codex@openai.com>

* fix(php-sdk): preserve custom API base URL paths (langgenius#44569)

* fix(api): combine UTF-16 surrogate pairs in RTF extraction (langgenius#44565)

Co-authored-by: jayachandra2003 <jayachandravennam.jc@email.com>

* chore(i18n): sync translations with en-US (langgenius#44566)

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>

* refactor(ui): align floating positioning with Base UI (langgenius#44588)

* chore(i18n): sync translations with en-US (langgenius#44595)

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>

* chore(deps): bump certifi from 2026.4.22 to 2026.10.19 in /dify-agent (langgenius#44462)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(web): avoid redundant document enable success toast (langgenius#44594)

* test(web): replace workflow owner doubles with real canvas behavior (langgenius#44590)

* chore(release): prepare version 1.18.0 (langgenius#44546)

* Exclude generated Vercel deployment cache from source checks

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: yyh <yuanyouhuilyz@gmail.com>
Co-authored-by: Yunlu Wen <yunlu.wen@dify.ai>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: gongfpp <1360187968@qq.com>
Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com>
Co-authored-by: Asuka Minato <i@asukaminato.eu.org>
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: D41910 <158550716+D41910@users.noreply.github.com>
Co-authored-by: D41910 <d41910@users.noreply.github.com>
Co-authored-by: leilei3167 <imleilei123@gmail.com>
Co-authored-by: 非法操作 <hjlarry@163.com>
Co-authored-by: Shreyansh Jain <shreyanshjain646@gmail.com>
Co-authored-by: crazywoola <427733928@qq.com>
Co-authored-by: 呆萌闷油瓶 <253605712@qq.com>
Co-authored-by: Power <26699525@qq.com>
Co-authored-by: Eddy ZHANG <eddy.zhang24@gmail.com>
Co-authored-by: Lokesh Chauhan <lokesh0186@gmail.com>
Co-authored-by: Xiyuan Chen <52963600+GareArc@users.noreply.github.com>
Co-authored-by: 盐粒 Yanli <yanli@dify.ai>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Azusa010 <m3171470760@gmail.com>
Co-authored-by: mika <spacexstarship01@outlook.com>
Co-authored-by: mac <mac@macdeMacBook-Pro.local>
Co-authored-by: Yueliup <127648758+Yueliup@users.noreply.github.com>
Co-authored-by: Stephen Zhou <hi@hyoban.cc>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Stream <Stream_2@qq.com>
Co-authored-by: 林玮 (Jade Lin) <linw1995@icloud.com>
Co-authored-by: xjh <87483213+xiajiahang@users.noreply.github.com>
Co-authored-by: Temitope Kadri <147322025+TemitopeKadri@users.noreply.github.com>
Co-authored-by: lorenzozane <w2898683706@gmail.com>
Co-authored-by: Yann Roberto <165009858+shoyann@users.noreply.github.com>
Co-authored-by: David Allada <davidanilallada@gmail.com>
Co-authored-by: huyengiang101086-spec <huyengiang101086@gmail.com>
Co-authored-by: huyengiang101086-spec <270684046+huyengiang101086-spec@users.noreply.github.com>
Co-authored-by: LimbC-C <limbcc2333@gmail.com>
Co-authored-by: LimbC-C <329404569+LimbC-C@users.noreply.github.com>
Co-authored-by: CRYPTONIKAV <29835619+CRYPTONIKAV@users.noreply.github.com>
Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com>
Co-authored-by: Liu Ziming <liuziming.lzm@alibaba-inc.com>
Co-authored-by: Metehan Biçer <metehanbicer006@gmail.com>
Co-authored-by: mechmaster20 <srujan.gowni@iitgn.ac.in>
Co-authored-by: Denis Ermakov <ide404@gmail.com>
Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com>
Co-authored-by: Juhyuk choi <246447183+JHC56@users.noreply.github.com>
Co-authored-by: -LAN- <laipz8200@outlook.com>
Co-authored-by: zyssyz123 <916125788@qq.com>
Co-authored-by: CodingOnStar <hanxujiang@dify.com>
Co-authored-by: yyh <yuanyouhuilyz@gmail.com>
Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Alexey Shabalin <a.shabalin@gmail.com>
Co-authored-by: Codada <108800975+Redestiny@users.noreply.github.com>
Co-authored-by: wangxiaolei <fatelei@gmail.com>
Co-authored-by: 青阳寻雪 <142769065+lulalalual@users.noreply.github.com>
Co-authored-by: Tianyu Cai <cai18633758993@gmail.com>
Co-authored-by: WH-2099 <wh2099@pm.me>
Co-authored-by: Miyar <14232275+gakugaku@users.noreply.github.com>
Co-authored-by: xhdnoah <40939515+xhdnoah@users.noreply.github.com>
Co-authored-by: Duda Nogueira <dudanogueira@gmail.com>
Co-authored-by: zhsama <torvalds@linux.do>
Co-authored-by: Mesrop Harutyunyan <104313591+mesrop2008@users.noreply.github.com>
Co-authored-by: Takuya <83127305+Takuya-ops@users.noreply.github.com>
Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com>
Co-authored-by: zhaohao1004 <zhaohao1004@gmail.com>
Co-authored-by: FFXN <lizy@dify.ai>
Co-authored-by: Winoren <158550716+Winoren@users.noreply.github.com>
Co-authored-by: Jaya Chandra Vennam <149901816+jayachandra2003@users.noreply.github.com>
Co-authored-by: jayachandra2003 <jayachandravennam.jc@email.com>
Co-authored-by: ZengLiangliang <zll21377105@126.com>
Co-authored-by: Alec Whitters <alecwhitters@Alecs-MacBook-Pro-26.local>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

e2e End-to-end tests and E2E test infrastructure. review: top ghfind author score; see https://ghfind.com size:XXL This PR changes 1000+ lines, ignoring generated files. web This relates to changes on the web.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants