Yansong Zhang
0c7e7e0c4e
feat(api): port Sandbox + VirtualEnvironment + Skill system from feat/support-agent-sandbox (Phase 5-6)
...
Port the complete infrastructure for agent sandbox execution and skill system:
Sandbox & Virtual Environment (core/sandbox/, core/virtual_environment/):
- Sandbox entity with lifecycle management (ready/failed/cancelled states)
- SandboxBuilder with fluent API for configuring providers
- 5 VM providers: Local, SSH, Docker, E2B, AWS CodeInterpreter
- VirtualEnvironment base with command execution, file transfer, transport layers
- Channel transport: pipe, queue, socket implementations
- Bash session management and DifyCli binary integration
- Storage: archive storage, file storage, noop storage, presign storage
- Initializers: DifyCli, AppAssets, DraftAppAssets, Skills
- Inspector: file browser, archive/runtime source, script utils
- Security: encryption utils, debug helpers
Skill & App Assets (core/skill/, core/app_assets/, core/app_bundle/):
- Skill entity and manager
- App asset accessor, builder pipeline (file, skill builders)
- App bundle source zip extractor
- Storage and converter utilities
API Endpoints:
- CLI API blueprint (controllers/cli_api/) for sandbox callback
- Sandbox provider management (workspace/sandbox_providers)
- Sandbox file browser (console/sandbox_files)
- App asset management (console/app/app_asset)
- Skill management (console/app/skills)
- Storage file endpoints (controllers/files/storage_files)
Services:
- Sandbox service, provider service, file service
- App asset service, app bundle service
Config:
- CliApiConfig, CreatorsPlatformConfig, CollaborationConfig
- FILES_API_URL for sandbox file access
Note: Controller route registration temporarily commented out (marked TODO)
pending resolution of deep dependency chains (socketio, workflow_comment,
command node, etc.). Core sandbox modules are fully ported and syntax-validated.
110 files changed, 10,549 insertions.
Made-with: Cursor
2026-04-08 17:39:02 +08:00
Yansong Zhang
d9d1e9b63a
fix(api): resolve Agent V2 node E2E runtime issues
...
Fixes discovered during end-to-end testing of Agent workflow execution:
1. ModelManager instantiation: use ModelManager.for_tenant() instead of
ModelManager() which requires a ProviderManager argument
2. Variable template resolution: use VariableTemplateParser(template).format()
instead of non-existent resolve_template() static method
3. invoke_llm() signature: remove unsupported 'user' keyword argument
4. Event dispatch: remove ModelInvokeCompletedEvent from _run() yield
(graphon base Node._dispatch doesn't support it via singledispatch)
5. NodeRunResult metadata: use WorkflowNodeExecutionMetadataKey enum keys
(TOTAL_TOKENS, TOTAL_PRICE, CURRENCY) instead of arbitrary string keys
6. SSE topic mismatch: use AppMode.AGENT (not ADVANCED_CHAT) in
retrieve_events() so publisher and subscriber share the same channel
7. Celery task routing: add AppMode.AGENT to workflow_execute_task._run_app()
alongside ADVANCED_CHAT
All issues verified fixed: Agent V2 node successfully invokes LLM and
returns "Hello there!" through the full SSE streaming pipeline.
Made-with: Cursor
2026-04-08 16:21:12 +08:00
Yansong Zhang
1835a1dc5d
fix(api): allow AGENT mode in workflow features validation
...
Add AppMode.AGENT to validate_features_structure() match case
alongside ADVANCED_CHAT, fixing 'Invalid app mode: agent' error
when creating Agent apps (which auto-generate a workflow draft).
Discovered during E2E testing of the full create -> draft -> publish flow.
Made-with: Cursor
2026-04-08 13:19:59 +08:00
Yansong Zhang
96641a93f6
feat(api): add Agent V2 node and new Agent app type (Phase 1-3)
...
Introduce a new unified Agent V2 workflow node that combines LLM capabilities
with agent tool-calling loops, along with a new AppMode.AGENT for standalone
agent apps backed by single-node workflows.
Phase 1 — Agent Patterns:
- Add core/agent/patterns/ module (AgentPattern, FunctionCallStrategy,
ReActStrategy, StrategyFactory) ported from feat/support-agent-sandbox
- Add ExecutionContext, AgentLog, AgentResult entities
- Add Tool.to_prompt_message_tool() for LLM-consumable tool conversion
Phase 2 — Agent V2 Workflow Node:
- Add core/workflow/nodes/agent_v2/ (AgentV2Node, AgentV2NodeData,
AgentV2ToolManager, AgentV2EventAdapter)
- Register agent-v2 node type in DifyNodeFactory
- No-tools path: single LLM call (LLM Node equivalent)
- Tools path: FC/ReAct loop via StrategyFactory
Phase 3 — Agent App Type:
- Add AppMode.AGENT to model enum
- Add WorkflowGraphFactory for auto-generating start->agent_v2->answer graphs
- AppService.create_app() creates workflow draft for AGENT mode
- AppGenerateService.generate() routes AGENT to AdvancedChatAppGenerator
- Console API and DSL import/export support AGENT mode
- Default app template for AGENT mode
Old agent/agent-chat/LLM node paths are fully preserved.
38 unit tests all passing.
Made-with: Cursor
2026-04-08 12:31:23 +08:00
corevibe555
c825d5dcf6
refactor(api): tighten types for Tenant.custom_config_dict and MCPToolProvider.headers ( #34698 )
2026-04-08 01:36:42 +00:00
corevibe555
624db69f12
refactor(api): remove duplicated RAG entities from services layer ( #34689 )
2026-04-07 23:36:59 +00:00
corevibe555
80a7843f45
refactor(api): migrate consumers to shared RAG domain entities from core/rag/entities/ ( #34692 )
2026-04-07 23:22:56 +00:00
corevibe555
f8f7b0ec1a
refactor(api): deduplicate shared auth request payloads into auth_entities.py ( #34694 )
2026-04-07 22:51:11 +00:00
Dream
89ce61cfea
refactor(api): replace json.loads with Pydantic validation in security and tools layers ( #34380 )
2026-04-07 12:11:51 +00:00
Statxc
63db9a7a2f
refactor(api): type load balancing config dicts with TypedDict ( #34639 )
2026-04-07 05:58:10 +00:00
YBoy
1261e5e5e8
refactor(api): type webhook validation result and workflow inputs with TypedDict ( #34645 )
2026-04-07 05:57:02 +00:00
Pulakesh
bceb0eee9b
refactor(api): migrate dict returns to TypedDicts in billing service ( #34649 )
2026-04-07 05:56:02 +00:00
Renzo
1194957fde
refactor: migrate session.query to select API in end_user_service and small tasks ( #34620 )
2026-04-07 04:25:55 +00:00
Renzo
68bd29eda2
refactor: migrate session.query to select API in sync task and services ( #34619 )
2026-04-07 04:23:14 +00:00
YBoy
f67a811f7f
refactor: replace dict params with BaseModel payloads in TagService ( #34422 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-07 04:20:02 +00:00
Statxc
a7b6307d32
refactor(api): type dataset service dicts with TypedDict ( #34625 )
2026-04-07 02:10:52 +00:00
Statxc
2883ad6764
refactor(api): type plugin migration results with TypedDict ( #34627 )
2026-04-07 02:10:23 +00:00
Pulakesh
0feff5b048
refactor(api): enforce strict typing on retrieval_model to resolve FIXME ( #34614 )
2026-04-07 01:10:53 +00:00
YBoy
89e23456f0
refactor(api): type invitation detail with InvitationDetailDict TypedDict ( #34613 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-07 01:03:31 +00:00
YBoy
922f9242e4
refactor(api): type crawl status dicts with CrawlStatusDict TypedDict ( #34611 )
2026-04-07 01:01:04 +00:00
YBoy
7fc0a791a2
refactor(api): type document summary status detail with TypedDict ( #34610 )
2026-04-07 01:00:39 +00:00
YBoy
5ad906ea6a
refactor(api): type workflow run related counts with RelatedCountsDict TypedDict ( #34530 )
2026-04-06 13:17:01 +00:00
YBoy
1e5cd69205
refactor(api): type archive manifest with ArchiveManifestDict TypedDict ( #34594 )
2026-04-06 11:35:11 +00:00
YBoy
b71b9f80b9
refactor(api): type workflow run delete/count results with RunsWithRelatedCountsDict TypedDict ( #34531 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-05 16:11:41 +00:00
agenthaulk
ee87289917
refactor: convert AppMode if/elif to match/case in app_generate_service ( #30001 ) ( #34563 )
...
Co-authored-by: agenthaulk <agenthaulk@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-05 10:23:51 +00:00
agenthaulk
5ad8c3e249
refactor: convert AppMode if/elif to match/case in service files ( #30001 ) ( #34562 )
...
Co-authored-by: agenthaulk <agenthaulk@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-05 10:22:11 +00:00
Renzo
eca0cdc7a9
refactor: select in dataset_service (SegmentService and remaining cla… ( #34547 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-05 00:13:06 +00:00
Renzo
779e6b8e0b
refactor: select in datasource_provider_service ( #34548 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-05 00:12:15 +00:00
Renzo
c2428361c4
refactor: select in dataset_service (DocumentService class) ( #34528 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-03 22:52:01 +00:00
Renzo
68e4d13f36
refactor: select in annotation_service ( #34503 )
...
Co-authored-by: Asuka Minato <i@asukaminato.eu.org>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-03 22:47:22 +00:00
YBoy
8a398f3105
refactor(api): type messages cleanup stats with MessagesCleanStatsDict TypedDict ( #34527 )
2026-04-03 12:29:41 +00:00
Renzo
e85d9a0d72
refactor: select in dataset_service (DatasetService class) ( #34525 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-03 12:01:31 +00:00
Renzo
06dde4f503
refactor: select in account_service (TenantService class) ( #34499 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Asuka Minato <i@asukaminato.eu.org>
2026-04-03 11:03:45 +00:00
YBoy
64ddec0d67
refactor(api): type annotation service dicts with TypedDict ( #34482 )
...
Co-authored-by: Asuka Minato <i@asukaminato.eu.org>
2026-04-03 06:25:52 +00:00
Renzo
da3b0caf5e
refactor: select in account_service (RegisterService class) ( #34500 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-03 06:21:26 +00:00
Renzo
608958de1c
refactor: select in external_knowledge_service ( #34493 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-03 03:42:16 +00:00
Renzo
7eb632eb34
refactor: select in rag_pipeline ( #34495 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-03 03:42:01 +00:00
Renzo
33d4fd357c
refactor: select in account_service (AccountService class) ( #34496 )
2026-04-03 03:41:46 +00:00
YBoy
71d299d0d3
refactor(api): type hit testing retrieve responses with TypedDict ( #34484 )
2026-04-03 02:25:30 +00:00
YBoy
9a6222f245
refactor(api): type webhook data extraction with RawWebhookDataDict TypedDict ( #34486 )
2026-04-03 02:24:17 +00:00
YBoy
affe5ed30b
refactor(api): type get_knowledge_rate_limit with KnowledgeRateLimitD… ( #34483 )
2026-04-03 02:23:32 +00:00
Renzo
dbfb474eab
refactor: select in workflow_tools_manage_service ( #34477 )
2026-04-02 12:35:04 +00:00
Renzo
d243de26ec
refactor: select in metadata_service ( #34479 )
2026-04-02 12:34:38 +00:00
Poojan
5bafb163cc
test: add unit tests for services and tasks part-4 ( #33223 )
...
Co-authored-by: akashseth-ifp <akash.seth@infocusp.com>
Co-authored-by: rajatagarwal-oss <rajat.agarwal@infocusp.com>
Co-authored-by: Dev Sharma <50591491+cryptus-neoxys@users.noreply.github.com>
Co-authored-by: sahil-infocusp <73810410+sahil-infocusp@users.noreply.github.com>
2026-04-02 08:35:46 +00:00
Akash Kumar
e54383d0fe
test: added test for api/services/rag_pipeline folder ( #33222 )
...
Co-authored-by: sahil-infocusp <73810410+sahil-infocusp@users.noreply.github.com>
2026-04-02 06:40:52 +00:00
Sedo
43c48ba4d7
fix: add tenant/dataset ownership checks to prevent IDOR vulnerabilities ( #34436 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-02 05:45:20 +00:00
99
8f9dbf269e
chore(api): align Python support with 3.12 ( #34419 )
...
Co-authored-by: Asuka Minato <i@asukaminato.eu.org>
2026-04-02 05:07:32 +00:00
Renzo
cb9ee5903a
refactor: select in tag_service ( #34441 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-02 05:04:36 +00:00
Renzo
399d3f8da5
refactor: model_load_balancing_service and api_tools_manage_service ( #34434 )
...
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-04-02 04:38:35 +00:00
YBoy
2d29345f26
refactor(api): type OpsTraceProviderConfigMap with TracingProviderCon… ( #34424 )
2026-04-02 01:47:08 +00:00